#include #include unsigned short __callint( void *inout ); #pragma aux __callint = \ "push bp" /*1*/ \ "push es" /*2*/ \ "push bx" /*3*/ \ "push ds" /*4*/ \ "push di" /*5*/ \ "mov ax, [di]" \ "mov bx, 2[di]" \ "mov cx, 4[di]" \ "mov dx, 6[di]" \ "mov si, 8[di]" \ "mov es,12[di]" \ "mov bp,18[di]" \ "mov di,10[di]" \ "mov ds, bp" \ "stc" \ "int 0x21" \ "push ds" /*6*/ \ "push di" /*7*/ \ "mov bp, sp" \ "mov di, 4[bp]" \ "mov ds, 6[bp]" \ "mov [di], ax" \ "pushf" /*8*/ \ "pop ax" /* flags(7) */ \ "mov 20[di], ax" \ "mov 2[di], bx" \ "mov 4[di], cx" \ "mov 6[di], dx" \ "mov 8[di], si" \ "pop 10[di]" /*6*/ \ "pop ax" /*5*/ \ "pop bx" /*4*/ \ "pop ds" /*3*/ \ "pop bx" /*2*/ \ "mov 18[di], ax" \ "mov 12[di], es" \ "sbb ax, ax" /* ax=<0 if cf */ \ "pop es" /*1*/ \ "pop bp" \ parm caller [di] \ value [ax] \ modify [bx cx dx si di]; int _callint( union INTR *regs ) { register short retval; retval = __callint( regs ); if( regs->flags & 1 ) regs->cflag = 1; return( regs->ax ); }