.286p include cmacros.inc ?WIN=1 ; Use Windows prolog/epilog ?PLM=1 ; Use PASCAL calling convention externW __ahincr sBegin CODE ;INIT_TEXT assumes cs,CODE ;INIT_TEXT assumes ds,DATA cProc HugeOffset, parmD pSrc parmD cb cBegin mov ax, SEG_cb mov dx, ax mov ax, OFF_pSrc add ax, OFF_cb ;add src offset and bytecount adc dx, 0 ;dx = # segments to increment mov cx, ax ;save new offset mov ax, dx ;#segs into ax lea bx, __ahincr mul bx ;__ahincr ;mul by windows magic # mov dx, ax ;restore to dx for output mov ax, cx ;restore for output add dx, SEG_pSrc cEnd ifdef DEBUG cProc StkTrace, parmW cFrames parmD lpBuf cBegin push es mov cx, cFrames mov bx, bp les di, lpBuf cld x: mov bx, ss:[bx] and bx, 0FFFEh mov ax, ss:[bx+2] stosw loopnz x pop es cEnd endif ?WIN=0 ; turn off windows prolog/epilog stuff ; ; SwitchDS ; ; Routine to switch the DS to word argument ; Called from C but without C DS glue. ; cProc SwitchDS, parmW newDS cBegin mov ax,ds ; old DS is return value mov ds,newDS cEnd sEnd CODE ;INIT_TEXT end