call86
Paul Shields
shields at yunexus.YorkU.CA
Thu Aug 16 23:12:30 AEST 1990
I posted this before but it didn't get out.
Rich Saunders asked the net for some 8086 assembler routines that
would act similarly to the int86() function, but use a FAR call
instead of a software interrupt.
Here is my 2-hour hack solution: call86() and call86x(), designed to
link to Microsoft C 5.1.
Please send bug reports to:
Paul Shields
shields at nexus.yorku.ca
------------------------------------------------------------------------
#! /bin/sh
# This is a shell archive. Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file". To overwrite existing
# files, type "sh file -c". You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g.. If this archive is complete, you
# will see the following message at the end:
# "End of shell archive."
# Contents: call86/COPYRIGHT call86/REQUEST call86/build.bat
# call86/call86.asm call86/call86.c call86/call86.h
# call86/objects.z.uue call86/test.c
# Wrapped by shields at yunexus on Thu Aug 16 09:00:25 1990
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'call86/COPYRIGHT' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'call86/COPYRIGHT'\"
else
echo shar: Extracting \"'call86/COPYRIGHT'\" \(483 characters\)
sed "s/^X//" >'call86/COPYRIGHT' <<'END_OF_FILE'
XCopyright 1990 by Paul A. Shields. This software may be distributed
Xand used in other works free of charge provided that all source code
Xversions of this software and its derivatives contain this copyright
Xnotice and license. As this software is distributed in source code
Xform, the author shall not be held responsible for damages resulting
Xfrom its use. If the software fails to perform as specified, you
Xassume all costs of servicing it or repairing damages that it may
Xcause.
END_OF_FILE
if test 483 -ne `wc -c <'call86/COPYRIGHT'`; then
echo shar: \"'call86/COPYRIGHT'\" unpacked with wrong size!
fi
# end of 'call86/COPYRIGHT'
fi
if test -f 'call86/REQUEST' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'call86/REQUEST'\"
else
echo shar: Extracting \"'call86/REQUEST'\" \(2144 characters\)
sed "s/^X//" >'call86/REQUEST' <<'END_OF_FILE'
XPath: yunexus!geac!torsqnt!news-server.csri.toronto.edu!rutgers!mephisto!ncar!unmvax!ariel.unm.edu!hydra.unm.edu!saunders
XFrom: saunders at hydra.unm.edu
XNewsgroups: comp.os.msdos.programmer,comp.sys.ibm.pc.programmer,alt.msdos.programmer
XSubject: More "Far Call in C"
XMessage-ID: <1990Jul9.195959.13596 at ariel.unm.edu>
XDate: 9 Jul 90 19:59:59 GMT
XArticle-I.D.: ariel.1990Jul9.195959.13596
XPosted: Mon Jul 9 15:59:59 1990
XSender: usenet at ariel.unm.edu (USENET News System)
XDistribution: na
XOrganization: University of New Mexico, Albuquerque
XLines: 32
XXref: yunexus comp.os.msdos.programmer:48 comp.sys.ibm.pc.programmer:2523 alt.msdos.programmer:1771
X
X
X MSDOS/8086 gurus:
X
X Thanks for the responses. Alas, most weren't what I needed. I'll come
Xclean right away: I am totally incompetent at 8086 assembly language! The
XNovell IPX/SPX and Microsoft XMS interfaces are CALLed, but with parms in
Xthe registers. Sort of a cross between a normal function call and a DOS
X"int 21h" call. Both IPX/SPX and XMS hook into "multiplex interrupt" 2fh
Xand return their main address for the API (damn all these TLAs!) in ES:DI
Xor ES:BX. Then, Joe-Assembly-Programmer would just store the result
Xsomeplace and make indirect jumps through it. Here is an example from the
XXMS docs:
X
X mov ax,4310h ; XMS int 2fh signiture
X int 2Fh
X mov word ptr [XMSControl],bx ; XMSControl is a DWORD
X mov word ptr [XMSControl+2],es
X ; We now have the XMS API entry point
X ; then we'de call an XMS function like this:
X mov ah,00h ; function code for "Get XMS version number"
X call [XMSControl]
X
X Notice how weird that is. It's neither a int86() call nor a normal
Xfunction call. What I need is a general-purpose routine kind of like
Xint86x(), but I'm unable to write one. e.g.
X void farcall(void far *api_entry,
X union REGS regstuff,
X struct SREGS sregstuff);
X I hear some of the mega-optimizing compilers have ways of declaring
Xfunctions that take register parms, but I need something for MIX or MSC.
X
X -- Rich Saunders
X
END_OF_FILE
if test 2144 -ne `wc -c <'call86/REQUEST'`; then
echo shar: \"'call86/REQUEST'\" unpacked with wrong size!
fi
# end of 'call86/REQUEST'
fi
if test -f 'call86/build.bat' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'call86/build.bat'\"
else
echo shar: Extracting \"'call86/build.bat'\" \(50 characters\)
sed "s/^X//" >'call86/build.bat' <<'END_OF_FILE'
Xmasm /Ml call86.asm;
Xcl -AL -Zi test.c call86.obj
END_OF_FILE
if test 50 -ne `wc -c <'call86/build.bat'`; then
echo shar: \"'call86/build.bat'\" unpacked with wrong size!
fi
# end of 'call86/build.bat'
fi
if test -f 'call86/call86.asm' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'call86/call86.asm'\"
else
echo shar: Extracting \"'call86/call86.asm'\" \(2512 characters\)
sed "s/^X//" >'call86/call86.asm' <<'END_OF_FILE'
X; Author: Paul A. Shields
X; Hand-coded from MSC 5.1 output of call86.c stub.
X; July 11, 1990
X
X TITLE call86.c
X NAME call86
X
XCALL86_TEXT SEGMENT WORD PUBLIC 'CODE'
XCALL86_TEXT ENDS
X_DATA SEGMENT WORD PUBLIC 'DATA'
X_DATA ENDS
XCONST SEGMENT WORD PUBLIC 'CONST'
XCONST ENDS
X_BSS SEGMENT WORD PUBLIC 'BSS'
X_BSS ENDS
XDGROUP GROUP CONST, _BSS, _DATA
X ASSUME CS: CALL86_TEXT, DS: DGROUP, SS: DGROUP
XEXTRN __acrtused:ABS
XCALL86_TEXT SEGMENT
X ASSUME CS: CALL86_TEXT
X; Line 24
X PUBLIC _call86
X_call86 PROC FAR
X push bp
X mov bp,sp
X push si
X; addr = 6
X; inreg = 10
X; outreg = 14
X
X;inreg
X les bx,DWORD PTR [bp+10]
X push WORD PTR es:[bx] ; ax
X mov ax,WORD PTR es:[bx+2] ; bx
X mov cx,WORD PTR es:[bx+4] ; cx
X mov dx,WORD PTR es:[bx+6] ; dx
X mov si,WORD PTR es:[bx+8] ; si
X mov di,WORD PTR es:[bx+10] ; di
X mov bx,ax
X pop ax
X
X call DWORD PTR [bp+6] ; addr
X pushf
X; outreg
X push ax
X mov ax,bx
X les bx,DWORD PTR [bp+14] ;outreg
X mov WORD PTR es:[bx+10],di ; di
X mov WORD PTR es:[bx+8],si ; si
X mov WORD PTR es:[bx+6],dx ; dx
X mov WORD PTR es:[bx+4],cx ; cx
X mov WORD PTR es:[bx+2],ax ; bx
X pop WORD PTR es:[bx] ; ax
X pop WORD PTR es:[bx+12] ; cflags
X; Line 33
X pop si
X pop bp
X ret
X nop
X
X_call86 ENDP
X; Line 39
X PUBLIC _call86x
X_call86x PROC FAR
X push bp
X mov bp,sp
X push si
X; addr = 6
X; inreg = 10
X; outreg = 14
X; segreg = 18
X
X push ds ; save ds
X
X les bx,DWORD PTR [bp+18] ;segreg
X mov ds,WORD PTR es:[bx+6] ; ds
X push WORD PTR es:[bx] ; es
X
X les bx,DWORD PTR [bp+10]
X push ax,WORD PTR es:[bx] ; ax
X mov ax,WORD PTR es:[bx+2] ; bx
X mov cx,WORD PTR es:[bx+4] ; cx
X mov dx,WORD PTR es:[bx+6] ; dx
X mov si,WORD PTR es:[bx+8] ; si
X mov di,WORD PTR es:[bx+10] ; di
X mov bx,ax
X pop ax
X pop es
X
X call DWORD PTR [bp+6] ; addr
X pushf
X push ax
X mov ax,bx
X
X push es
X les bx,DWORD PTR [bp+18] ;segreg
X mov WORD PTR es:[bx+6],ds ; ds
X pop WORD PTR es:[bx] ; es
X
X les bx,DWORD PTR [bp+14] ;outreg
X mov WORD PTR es:[bx+10],di ; di
X mov WORD PTR es:[bx+8],si ; si
X mov WORD PTR es:[bx+6],dx ; dx
X mov WORD PTR es:[bx+4],cx ; cx
X mov WORD PTR es:[bx+2],ax ; bx
X
X pop WORD PTR es:[bx] ; ax
X pop WORD PTR es:[bx+12] ; cflags
X
X pop ds ; restore ds
X pop si
X pop bp
X ret
X nop
X
X_call86x ENDP
XCALL86_TEXT ENDS
XEND
END_OF_FILE
if test 2512 -ne `wc -c <'call86/call86.asm'`; then
echo shar: \"'call86/call86.asm'\" unpacked with wrong size!
fi
# end of 'call86/call86.asm'
fi
if test -f 'call86/call86.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'call86/call86.c'\"
else
echo shar: Extracting \"'call86/call86.c'\" \(1216 characters\)
sed "s/^X//" >'call86/call86.c' <<'END_OF_FILE'
X/* call86.c - "stub" for calling an assembly language function from C.
X
X Author: Paul A. Shields
X Date: July 11, 1990
X Features: Function calls were built to be analogous to
X Microsoft C 5.x functions int86() and int86x().
X
X **** NOTE! this file is provided for completeness only!
X it is a stub which will not work as coded.
X To make this work, I compiled as follows:
X
X cl -AL -Ox -Fa call86.c -c
X
X then edited the assembly output file as needed to insert
X the proper code into the stubs.
X */
X
X#include <dos.h>
X#include "call86.h"
X
X/* w/o setting up segment registers: */
Xint call86(void far *addr,union REGS *inreg,
X union REGS *outreg)
X{
X outreg->x.ax = inreg->x.ax;
X outreg->x.bx = inreg->x.bx;
X outreg->x.cx = inreg->x.cx;
X outreg->x.dx = inreg->x.dx;
X outreg->x.si = inreg->x.si;
X outreg->x.di = inreg->x.di;
X outreg->x.cflag = inreg->x.cflag;
X
X return inreg->x.ax;
X}
X
X/* with setting up segment registers: */
Xint call86x(void far *addr,union REGS *inreg,
X union REGS *outreg, struct SREGS *segreg)
X{
X outreg->x.ax = segreg->es;
X outreg->x.bx = segreg->cs;
X outreg->x.cx = segreg->ss;
X outreg->x.dx = segreg->ds;
X return inreg->x.ax;
X}
END_OF_FILE
if test 1216 -ne `wc -c <'call86/call86.c'`; then
echo shar: \"'call86/call86.c'\" unpacked with wrong size!
fi
# end of 'call86/call86.c'
fi
if test -f 'call86/call86.h' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'call86/call86.h'\"
else
echo shar: Extracting \"'call86/call86.h'\" \(277 characters\)
sed "s/^X//" >'call86/call86.h' <<'END_OF_FILE'
X/* call86.h - protoype statements for call86.c
X Author: Paul A. Shields
X
X built to be analogous to Microsoft C 5.x functions int86() and
X int86x().
X */
X
Xint call86(void far *,union REGS *,union REGS *);
Xint call86x(void far *,union REGS *,union REGS *, struct SREGS *);
END_OF_FILE
if test 277 -ne `wc -c <'call86/call86.h'`; then
echo shar: \"'call86/call86.h'\" unpacked with wrong size!
fi
# end of 'call86/call86.h'
fi
if test -f 'call86/objects.z.uue' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'call86/objects.z.uue'\"
else
echo shar: Extracting \"'call86/objects.z.uue'\" \(6122 characters\)
sed "s/^X//" >'call86/objects.z.uue' <<'END_OF_FILE'
Xbegin 600 objects.zip
XM4$L#!`H````&`-(;ZQ24+R0@)P$``&8!```*````0T%,3#@V+D]"2@\`$@,D
XM%38G.#EJ>TR=;A\)!@$3-.7VEO<!,P2H<&Q8MFQQVG09=F[;^)9I2&^0Z%&I
XM3ZM"'2ATZE2"1(-2#4IPZ%.B10E^<?:%0X,R99+^5ZI%L5(M^&5;"VSO="K5
XMU)@/`D3:&N#!@@&_)(O0(R08D$$RG3!A0`/)M,&!`1]J1 at A0X/^!_PG^%VB5
XM<0.\__HU[%BY=.O.+4L6(%'(&L0/>/#+4A16CD"9Q*MD>=F("1`O.F!TT+'$
XM0[[J8O96B7M5:/+_39.+CPH8_BF!X:\:&/XN at N'_*ER,'>M_KP8Y0UT\;'R'
XM)A-!-QRV)P+W1.B>"-X?'Q#^*$.O79=#2EH]F"_1I..O!IPVJG7Q02A5`_6`
XMU:0!>&4$;T<7-B!_$%M9*A80UW102P,$"@````8`UAOK%)<-BO1+`P``Q`4`
XM``@```!415-4+D]"2@\`$@,D%38G.#EJ>TR=;A\)!@$3-.7VEO<!(P1HD&[9
XMN71=C at V)^,"S-YT*<JA;Q`F0_\R4:5*A0XN61&Q@^<XPV3Y5AZRA`PZU>M.R
XM%.0-$CTJ]6E5J`FI%IU*]0OQ6*D2'/J4:-&"7XD&I1J4`+$6>-Z)]@2_"ITZ
XM=<"P'R1)DFI6*.S=7U0(LB=P?FK6ID*?,H%FRAX>$]\C-0IP(,&`RY(%[`L:
XM#-@@F3YX,*""9!IAPH`'DATD68`,&P8<EJP%!RI<&'"DIB$O\/_`_P3_"[3*
XMN8'Y`P,*%!@@Z8$&+!H0...6`!5^_1IVK%RZ=>>6N1_AU[%AV;+%:1,/^5_-
XMUB'[KVW#IG53;=:C73.DUP(\#;G"_P&V.4#!=[QI!\GKC8B8`/2B`T8';6$^
XMY",&&/ZN@"#B!`6TGYV3]=3Z?B!,T!(!<'O5Q>QG`M?$K8O+=UW.A=N9&[1:
XM4"9H%OV(JE<0;/W46T^8=CW32`)WZT].19BZ1:L$KE;TH!]<O8.K%3=*`%AS
XM?E3K`:J/"9H'U:.XVA=0^T*"\O\G%%A@?[EESS(D2&[9#;ZM2X>98__/@#DA
XM?8;9R@?_OTSY9MW"T9X%7C3!EZ#0=,",`(\;!0^`V,41W]@H=HM0B"='K/*(
XMQQ6]+N&E0MF;#R8.\3LG-,U<I%6!R#MP-74-PR-'<.P#AE\)JO0N"$;I!<I#
XMEC>?HGU073B@$"3QOJ`Q3$\1`)MIG`#<7 at B;T5^.0MF[F'^'3_E"$MS`DZQ(
XMX7D&[%;\2(`/Y-TPZ(0#%,<#%#V at 8135YX5[<-`2'UQ0H&"$5Y]*)2JUZ-&I
XM:0.TX;^#"P,0!CF@"^P%"PR+%Y'F+U!,<?,+'%,\@>+)%&^@^+EI$2-8MN(5
XM"BXXUBS;L&<1,P!;@2(<?`#L$8#M0K/$=F#3&<!VP@"$@0T88VS.9FP-BQ9Q
XM at +2=3=HJ9OD!;SN;MZ5V1UP@;6=3MY)9#K6'<&0;>P7"+TB?@-CT`;%]`/0&
XM)/L%4'N`N32`>EX?(2HG.+A!]@[4+SAEG6[P9 at BO!.LX/:%T[!R^=>X<,[/B
XM#?@):AGP?\,P;UCOG#VZ(-"!&`:`VZWK`@YT*P^*9)/&%4C[X,``J'EQ18;B
XM=%!+`P0*````!@#8&^L4&G"2D:4+``"$%```"````%1%4U0N15A%#P`2`R05
XM-B<X.6I[3)UN'PD&`1,TY?:6]YMJC0S0($",`$$"#`SP_W]%T"-D'YPBP(<`
XM/6Q[`.:*_<*P]QAV&\,>8M at 5`G0+\$.X_QCV(\/^:- at I#7NF8;<U[+R&'=BP
XM5QMV;<,NZMWY!SC>KH#A%0T[M&'/-NPY"S[@`^#_@@$76'4Q^YG`-5MZ at B\N
XMWW59L^-&"<"9'S<*'@"QBR.^L5'L%J$03XY8Y1&/*WI=PDN%JADJ0((`!Q.'
XM<$]:)>Y5H<G_-TTN/BI@^*<$AK]J8/B["(;_JW`Q=JS_O1KD#'7QL/$=FDP$
XMW7#8G at C<$Z%[(GA_?$#XHPR](#VDI-6#^1)-.OYJP&FC6A<?A%(U4`]831J`
XM5T;P=G1A`_('L65(H&G#;!Z2I\"Y`IN#_*W&2-L4"'#E_<#^`4*4.]`7\?H=
XM7P],W'_`_7,I6ORHF<V5K$WE^1>ZX[C_,ZE_,'G_-A.;1`J`V(GD;SPVP>G@
XMD=H<+13 at P/N)C';&PU=ZO[^=MI+S;3+VF!N at Q8/\?\L/<+S`E<^(?KZJIQTQ
XM@:/7#(YJUVP/M0SZF>W_V_1F&-OD-NS:AAW;L%OCWL%81O?!!M.'XP)KQ]AQ
XM#X#[XP:-`HBN30ZE*B85MQG8AUU;MU[W(%:H-O];%!A`K.QW at +R1,-.C=\TU
XMP!K')_9X*JL-I@;H\(/S)77_!A`=WB]VZ##@>)>.#7!5%K?)$F!Q at Q`#,M8^
XM<UO1>V08<&Z![]-?#6B#>@K4OFMOJY;IVFD'[8^WZ3CXS/\F`9':=%GF9 at C0
XMMV:`\TW379C[_Y\R+]]UW8SKRQOT>"#L[_\6#I`UYLBL_0.G&Q"I:O'W@'Z7
XM[PWX%/6_C)K(4,M5:%\X8+H%`3^"'NC2O.=]8PSX2WCTJ`$@DY\!+C=NT!WL
XMOGZ`G-U7$4.BHU_$C0L&@&>2`)LG&$"<RJ;1B.-?PK0N,_D"OI=H[VBMNW"P
XM'UN^;@'0W@"91@?+47.Z!L:6M%]$/2W.-RKQ@[L.OS>KQ^(63_W)2UC_$;!/
XM=.33;>@1=#HT;5'=%IO6X3OOSW4X^#W!Q047%A5(5_[_CNO=#]M,Q<T?@.O1
XM at WW*HS>P]@@?@!5DFN66XO+Z]#C]9]6ZF/M*['(7[O2('Z#<@HO'2XVZ3/C0
XM])146!'Q]!C]_W>QO-69]G-E[C+)\V<M$[SX_8#I5Z4;0?<Y[@!.$\CN=?EC
XM at _HBX0;JKLT#Q&DA]J>;P at R,>!:S[^)XQS,U#X at -72$LO/_HT<0^1KTSU.SW
XMHR^._LM_7P-_1ZCCK'F"I+N?9T*Z]WDVI/M6 at 9Q>>]2)M**3=G+2SD7:L?(4
XM29<D3ZYT!PI=3WYF\J"LE%V?M!,<&'W]],7!HZ>?&!UUP+K*UP?`-_A7P/N)
XM;M<%3[.#![\-'BU]_27+BZID^X'7CT8_%YSQ0@&+][]2_&+BHQ0KP4RRFO4'
XM[C/,6O,?D/E5 at 8.'$RQN`\BS5N7U=?7IY3;VDMYOS*L",GS=@>D)`P#W@>O]
XM0KI'/)E;"W=I7KD8K]S+4G["*U7U9&B#L+F at QNNC%0=6Q\]I7 at 3SQ:3,7<R[
XM"G"_-4])&6:>SC9/6IK79E,9EC]^`!)-42*N\=>W>5KE+<&OSR].OSA_DMO4
XMA?;I0G1L+#'W`>MV=%:X2!G67_0R4)+^%_>/7B[X`:[[QZN_$P)H+/^Z^-GT
XM`_$G=LGM2B9K@>:.O7G>2<=?#,QSYU"Z"1/[J=[(F2].8$NT^/2)G0(07D#_
XM7617]E:K5^1?;-6@;Y`!6^\41O=`+=-E>(FL%H^EQNO76_[J)=V5"U#7J__M
XM&M1,L`!O<9"2%^LS)V3O))IEN(EHZ=,&@EA_L:<70Q]HH)*66S.G@=AY;HE]
XMAQH=>^R!T]$SSKYHSKYR^<#@CH<M?IFD6.5")`D?B2QYY<4NXK/4AL/^>'J3
XM^TXJZ*D at I=9UVY)JVK9E03)-*U9N6+EY0;8$.?0MW+QRTYY%@]4HQZ8$&3,G
XMSIPL039-.U;NV[EOS=+I=KEP(?1S<IL]0#4W&W`&9X7&OQI-RK3HUZ1.C3XY
XM!RQ-/7#@P`$#?`.1W%4^9!J<%PM.L%JF?06S>Y!Y\G0BI8_Z2#V7:A,F3)@-
XM%3#IN73#CET+\JW=LG+-LGU[)SJA;5MG;&M:MW3+GL$>)-FT=M.2">)B^)2\
XM`TP`SG.`J]LW;[H,\766V-'#.3KQS?`I:&MOB;N18_VU&Z5&;%@MQPA.QPCB
XM]'+&S>%$-)=!M-SM8;1W>Q8DW#=PV]0LVMZ>#+X',.<QUN9UV;(1IZ+RL'/G
XM`'YB8WAVIT+*CXZ`S+01-I,(J1:=2M7E4Z%*":Q8;T5-*AP:E"E3G#:L]8$9
XM/1R,9<,S),/[<PF\Z<)TD?5ML,-8UPV`33_`QLF,U3;52Y,$L`V^[=PSVS1D
XM at 0:V2077:A:.-6U)'F4]VC5Q?(TUU8J;L(:MV\::TABCXAO&/;V7>];.-K4S
XMWL,WS+:UT<HF6G,QV[!NJG*T9.5LTV8+"MDF(4R--?&W8[BE2GI7X,"O9NO$
XM=-4KL.#7MF'(N`&3:,T?_#KFW-PTE&:.H)G$:\2R^,*O7\.6Q9N6[I<TMR(/
XM$*T,OT@[4:%S[\)YLOLC9]((T_\L)FE^(-H4X[5PD31S!,W4(R[$&:7YZR4[
XMQX$39R)T"GLBW2B.-YS5+6DZP3Y>]E<[>_8QG^=$DUKIU-JL"O9F<+:^MXL)
XM&L."UYW#N1.(BROPBC*R"H#F"Z!I.:3K<IU1S<PL2O0OX[H+SYC4P9:=56D_
XM*YH;_.)NN#,YEF3,LL[-L1E;TFG9D at 76C+LUTWQ9>UGS`VZQ]*UMXU]0W\?J
XM#K"-%:WIMK$K&]C]33=HG at Q0#`VK6<Q]A6/2$>78EH:UR^L='-&]SRV)A&F0
XMPK"(A9>5]G)&MGW#N=]RQN9HDK%<!F-BSI;9X:7JV-%VV7C]6'#LZ+-MX=*5
XMJVD,Z#%99^??HGO&VHWQ#GOVU#=JRR:JONL;/0?+G-<S'%Y:&T`<"-1J\EYK
XM1W%>*2!-`NUCVF!BN*Y87^$XF26Q^5=!\P)OV5`'NR(OL`6>ZQJSLK,IFCM8
XMWJC1+YSD0H,Z=5I4*KRMT&3%GNE]\STZ@>]1SPZ)GB&)H?FP</$5'N6J+T4:
XM-2H]W,;#B#4=5C<W+]>2.^;KM"YG9K at VR2)=GEXK)#)1T@)87A;<.(O;DCP=
XMQ9<:(<_8K"L!!)C%6R30+ZH\5JHOHCF#:/*JU"34FY%F]-XVSZMS>7]@K6.-
XM[&$&8<Q*`/&<C,IS0,.HW#POW(.#"23T"PH4C/#J4ZE$I18].C4-R1K at W\&%
XM`0B#'-`%]H(%AL6+&$#Q8HJ;7^"8X at D43Z9X`\4I><0(EJUXA8(+CJE]1<P`
XM;`6*</`!L$<`M at O-8E9@TQG`MIJ4,+`!8XS-V8RM8=$B#I"VLTE;Q2P_X&UG
XM\[8<<<0%TG8V=2N9Y0\&A'!D&WL%PB](GX#8]`&Q?0#T!E;]!5![@+DT@'I>
XM'R$J)SBX0?8.U"\X99UN\&8(KP3KR\X12L?.X5L$;F9FQ1OP$]0RX/^&8=ZP
XMWCE[-!6RI@$G\-&O"S at P&<9?H`!IM`)I'T3`1\TC!D#80K!7$&R7Y0(@]@$%
XM3 at SH0&([3@"\W\]6@@0TMA9H]A2Y.8$7\@0L.^?EB.09$B2W[`8.\G28.?;_
XM#)@SC<\P6_G at _Y<IWZP;4[.F"][`;O3KNQQ;(*(:0A*N9\"T%3_BX1O8KD"C
XMGE3HT*(NBIV#G.VI(HI6!."6[N#*`N,!R?ZS0*[X0`+)3L3;\KI`LJ-*]@[Q
XM+J#8DK\0;\E'#3!-/81I3'N&:4O>S;3GF[:&<9-IYS!MR9_9X)P:VV;U:::)
XMY'>X#*]Q;F5=Z&DB>3C3_F#:IC"G::(Q;=I?3)O?SYHFDG<U[22FK<LK>YI(
XM7MJT0YBV.6]NFDA>W#2YH-FFJ>3E37N)::O2'OKB`I+]PIL=Q9MZ]F)EMN=4
XM at LZ3>H!02P$""@`*````!@#2&^L4E"\D("<!``!F`0``"@```````````"``
XM````````0T%,3#@V+D]"2E!+`0(*``H````&`-8;ZQ27#8KT2P,``,0%```(
XM````````````(````$\!``!415-4+D]"2E!+`0(*``H````&`-@;ZQ0:<)*1
XMI0L``(04```(````````````(````,`$``!415-4+D5815!+!08``````P`#
X+`*0```"+$```````
X`
Xend
END_OF_FILE
if test 6122 -ne `wc -c <'call86/objects.z.uue'`; then
echo shar: \"'call86/objects.z.uue'\" unpacked with wrong size!
fi
# end of 'call86/objects.z.uue'
fi
if test -f 'call86/test.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'call86/test.c'\"
else
echo shar: Extracting \"'call86/test.c'\" \(251 characters\)
sed "s/^X//" >'call86/test.c' <<'END_OF_FILE'
X/* test.c - try to test call86() and call86x(). */
X
X#include <dos.h>
X#include "call86.h"
X
Xvoid far fu() {}
X
Xmain()
X{
X union REGS inreg, outreg;
X struct SREGS segreg;
X void far *fnptr = (void *)fu;
X
X call86x(fnptr, &inreg, &outreg, &segreg);
X}
END_OF_FILE
if test 251 -ne `wc -c <'call86/test.c'`; then
echo shar: \"'call86/test.c'\" unpacked with wrong size!
fi
# end of 'call86/test.c'
fi
echo shar: End of shell archive.
exit 0
More information about the Alt.sources
mailing list