home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1992 March / Source_Code_CD-ROM_Walnut_Creek_March_1992.iso / usenet / altsrcs / 1 / 1677 < prev    next >
Encoding:
Internet Message Format  |  1990-12-28  |  17.5 KB

  1. From: shields@yunexus.YorkU.CA (Paul Shields)
  2. Newsgroups: alt.sources,comp.os.msdos.programmer
  3. Subject: Re: call86
  4. Message-ID: <13918@yunexus.YorkU.CA>
  5. Date: 16 Aug 90 13:12:30 GMT
  6.  
  7. I posted this before but it didn't get out.
  8.  
  9. Rich Saunders asked the net for some 8086 assembler routines that
  10. would act similarly to the int86() function, but use a FAR call
  11. instead of a software interrupt.
  12.  
  13. Here is my 2-hour hack solution: call86() and call86x(), designed to
  14. link to Microsoft C 5.1.
  15.  
  16. Please send bug reports to:
  17.  
  18. Paul Shields
  19. shields@nexus.yorku.ca
  20. ------------------------------------------------------------------------
  21. #! /bin/sh
  22. # This is a shell archive.  Remove anything before this line, then unpack
  23. # it by saving it into a file and typing "sh file".  To overwrite existing
  24. # files, type "sh file -c".  You can also feed this as standard input via
  25. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  26. # will see the following message at the end:
  27. #        "End of shell archive."
  28. # Contents:  call86/COPYRIGHT call86/REQUEST call86/build.bat
  29. #   call86/call86.asm call86/call86.c call86/call86.h
  30. #   call86/objects.z.uue call86/test.c
  31. # Wrapped by shields@yunexus on Thu Aug 16 09:00:25 1990
  32. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  33. if test -f 'call86/COPYRIGHT' -a "${1}" != "-c" ; then 
  34.   echo shar: Will not clobber existing file \"'call86/COPYRIGHT'\"
  35. else
  36. echo shar: Extracting \"'call86/COPYRIGHT'\" \(483 characters\)
  37. sed "s/^X//" >'call86/COPYRIGHT' <<'END_OF_FILE'
  38. XCopyright 1990 by Paul A. Shields.  This software may be distributed
  39. Xand used in other works free of charge provided that all source code
  40. Xversions of this software and its derivatives contain this copyright
  41. Xnotice and license.  As this software is distributed in source code
  42. Xform, the author shall not be held responsible for damages resulting
  43. Xfrom its use.  If the software fails to perform as specified, you
  44. Xassume all costs of servicing it or repairing damages that it may
  45. Xcause.
  46. END_OF_FILE
  47. if test 483 -ne `wc -c <'call86/COPYRIGHT'`; then
  48.     echo shar: \"'call86/COPYRIGHT'\" unpacked with wrong size!
  49. fi
  50. # end of 'call86/COPYRIGHT'
  51. fi
  52. if test -f 'call86/REQUEST' -a "${1}" != "-c" ; then 
  53.   echo shar: Will not clobber existing file \"'call86/REQUEST'\"
  54. else
  55. echo shar: Extracting \"'call86/REQUEST'\" \(2144 characters\)
  56. sed "s/^X//" >'call86/REQUEST' <<'END_OF_FILE'
  57. XPath: yunexus!geac!torsqnt!news-server.csri.toronto.edu!rutgers!mephisto!ncar!unmvax!ariel.unm.edu!hydra.unm.edu!saunders
  58. XFrom: saunders@hydra.unm.edu
  59. XNewsgroups: comp.os.msdos.programmer,comp.sys.ibm.pc.programmer,alt.msdos.programmer
  60. XSubject: More "Far Call in C"
  61. XMessage-ID: <1990Jul9.195959.13596@ariel.unm.edu>
  62. XDate: 9 Jul 90 19:59:59 GMT
  63. XArticle-I.D.: ariel.1990Jul9.195959.13596
  64. XPosted: Mon Jul  9 15:59:59 1990
  65. XSender: usenet@ariel.unm.edu (USENET News System)
  66. XDistribution: na
  67. XOrganization: University of New Mexico, Albuquerque
  68. XLines: 32
  69. XXref: yunexus comp.os.msdos.programmer:48 comp.sys.ibm.pc.programmer:2523 alt.msdos.programmer:1771
  70. X
  71. X
  72. X   MSDOS/8086 gurus:
  73. X
  74. X   Thanks for the responses.  Alas, most weren't what I needed.  I'll come
  75. Xclean right away: I am totally incompetent at 8086 assembly language!  The
  76. XNovell IPX/SPX and Microsoft XMS interfaces are CALLed, but with parms in
  77. Xthe registers.  Sort of a cross between a normal function call and a DOS
  78. X"int 21h" call.  Both IPX/SPX and XMS hook into "multiplex interrupt" 2fh
  79. Xand return their main address for the API (damn all these TLAs!) in ES:DI
  80. Xor ES:BX.  Then, Joe-Assembly-Programmer would just store the result 
  81. Xsomeplace and make indirect jumps through it.  Here is an example from the
  82. XXMS docs:
  83. X
  84. X         mov   ax,4310h                    ; XMS int 2fh signiture
  85. X         int   2Fh
  86. X         mov   word ptr [XMSControl],bx    ; XMSControl is a DWORD
  87. X         mov   word ptr [XMSControl+2],es
  88. X         ; We now have the XMS API entry point
  89. X         ; then we'de call an XMS function like this:
  90. X         mov   ah,00h      ; function code for "Get XMS version number"
  91. X         call  [XMSControl]
  92. X
  93. X   Notice how weird that is.  It's neither a int86() call nor a normal
  94. Xfunction call.  What I need is a general-purpose routine kind of like
  95. Xint86x(), but I'm unable to write one.  e.g.
  96. X    void farcall(void far *api_entry, 
  97. X                 union REGS regstuff,
  98. X                 struct SREGS sregstuff);
  99. X   I hear some of the mega-optimizing compilers have ways of declaring
  100. Xfunctions that take register parms, but I need something for MIX or MSC.
  101. X
  102. X      -- Rich Saunders
  103. X
  104. END_OF_FILE
  105. if test 2144 -ne `wc -c <'call86/REQUEST'`; then
  106.     echo shar: \"'call86/REQUEST'\" unpacked with wrong size!
  107. fi
  108. # end of 'call86/REQUEST'
  109. fi
  110. if test -f 'call86/build.bat' -a "${1}" != "-c" ; then 
  111.   echo shar: Will not clobber existing file \"'call86/build.bat'\"
  112. else
  113. echo shar: Extracting \"'call86/build.bat'\" \(50 characters\)
  114. sed "s/^X//" >'call86/build.bat' <<'END_OF_FILE'
  115. Xmasm /Ml call86.asm;
  116. Xcl -AL -Zi test.c call86.obj
  117. END_OF_FILE
  118. if test 50 -ne `wc -c <'call86/build.bat'`; then
  119.     echo shar: \"'call86/build.bat'\" unpacked with wrong size!
  120. fi
  121. # end of 'call86/build.bat'
  122. fi
  123. if test -f 'call86/call86.asm' -a "${1}" != "-c" ; then 
  124.   echo shar: Will not clobber existing file \"'call86/call86.asm'\"
  125. else
  126. echo shar: Extracting \"'call86/call86.asm'\" \(2512 characters\)
  127. sed "s/^X//" >'call86/call86.asm' <<'END_OF_FILE'
  128. X; Author: Paul A. Shields
  129. X; Hand-coded from MSC 5.1 output of call86.c stub.
  130. X; July 11, 1990
  131. X
  132. X    TITLE   call86.c
  133. X    NAME    call86
  134. X
  135. XCALL86_TEXT    SEGMENT  WORD PUBLIC 'CODE'
  136. XCALL86_TEXT    ENDS
  137. X_DATA    SEGMENT  WORD PUBLIC 'DATA'
  138. X_DATA    ENDS
  139. XCONST    SEGMENT  WORD PUBLIC 'CONST'
  140. XCONST    ENDS
  141. X_BSS    SEGMENT  WORD PUBLIC 'BSS'
  142. X_BSS    ENDS
  143. XDGROUP    GROUP    CONST, _BSS, _DATA
  144. X    ASSUME  CS: CALL86_TEXT, DS: DGROUP, SS: DGROUP
  145. XEXTRN    __acrtused:ABS
  146. XCALL86_TEXT      SEGMENT
  147. X    ASSUME    CS: CALL86_TEXT
  148. X; Line 24
  149. X    PUBLIC    _call86
  150. X_call86    PROC FAR
  151. X    push    bp
  152. X    mov    bp,sp
  153. X    push    si
  154. X;    addr = 6
  155. X;    inreg = 10
  156. X;    outreg = 14
  157. X
  158. X;inreg
  159. X    les    bx,DWORD PTR [bp+10]
  160. X    push    WORD PTR es:[bx]        ; ax
  161. X    mov    ax,WORD PTR es:[bx+2]   ; bx
  162. X    mov    cx,WORD PTR es:[bx+4]   ; cx
  163. X    mov    dx,WORD PTR es:[bx+6]   ; dx
  164. X    mov    si,WORD PTR es:[bx+8]   ; si
  165. X    mov    di,WORD PTR es:[bx+10]  ; di
  166. X        mov     bx,ax
  167. X        pop     ax
  168. X
  169. X        call    DWORD PTR [bp+6]        ; addr
  170. X        pushf
  171. X; outreg
  172. X        push    ax
  173. X        mov     ax,bx
  174. X    les    bx,DWORD PTR [bp+14]    ;outreg
  175. X    mov    WORD PTR es:[bx+10],di  ; di
  176. X    mov    WORD PTR es:[bx+8],si   ; si
  177. X    mov    WORD PTR es:[bx+6],dx   ; dx
  178. X    mov    WORD PTR es:[bx+4],cx   ; cx
  179. X    mov    WORD PTR es:[bx+2],ax   ; bx
  180. X    pop    WORD PTR es:[bx]        ; ax
  181. X    pop    WORD PTR es:[bx+12]     ; cflags
  182. X; Line 33
  183. X    pop    si
  184. X    pop    bp
  185. X    ret    
  186. X    nop    
  187. X
  188. X_call86    ENDP
  189. X; Line 39
  190. X    PUBLIC    _call86x
  191. X_call86x    PROC FAR
  192. X    push    bp
  193. X    mov    bp,sp
  194. X    push    si
  195. X;    addr = 6
  196. X;    inreg = 10
  197. X;    outreg = 14
  198. X;    segreg = 18
  199. X
  200. X        push    ds                      ; save ds
  201. X
  202. X    les    bx,DWORD PTR [bp+18]    ;segreg
  203. X    mov    ds,WORD PTR es:[bx+6]   ; ds
  204. X    push    WORD PTR es:[bx]        ; es
  205. X
  206. X    les    bx,DWORD PTR [bp+10]
  207. X    push    ax,WORD PTR es:[bx]     ; ax
  208. X    mov    ax,WORD PTR es:[bx+2]   ; bx
  209. X    mov    cx,WORD PTR es:[bx+4]   ; cx
  210. X    mov    dx,WORD PTR es:[bx+6]   ; dx
  211. X    mov    si,WORD PTR es:[bx+8]   ; si
  212. X    mov    di,WORD PTR es:[bx+10]  ; di
  213. X        mov     bx,ax
  214. X        pop     ax
  215. X        pop     es
  216. X
  217. X        call    DWORD PTR [bp+6]        ; addr
  218. X        pushf
  219. X        push    ax
  220. X        mov     ax,bx
  221. X
  222. X        push    es
  223. X    les    bx,DWORD PTR [bp+18]    ;segreg
  224. X    mov    WORD PTR es:[bx+6],ds   ; ds
  225. X    pop     WORD PTR es:[bx]        ; es
  226. X
  227. X    les    bx,DWORD PTR [bp+14]    ;outreg
  228. X    mov    WORD PTR es:[bx+10],di  ; di
  229. X    mov    WORD PTR es:[bx+8],si   ; si
  230. X    mov    WORD PTR es:[bx+6],dx   ; dx
  231. X    mov    WORD PTR es:[bx+4],cx   ; cx
  232. X    mov    WORD PTR es:[bx+2],ax   ; bx
  233. X
  234. X    pop    WORD PTR es:[bx]        ; ax
  235. X    pop    WORD PTR es:[bx+12]     ; cflags
  236. X
  237. X        pop     ds                      ; restore ds
  238. X        pop     si
  239. X    pop    bp
  240. X    ret    
  241. X    nop    
  242. X
  243. X_call86x    ENDP
  244. XCALL86_TEXT    ENDS
  245. XEND
  246. END_OF_FILE
  247. if test 2512 -ne `wc -c <'call86/call86.asm'`; then
  248.     echo shar: \"'call86/call86.asm'\" unpacked with wrong size!
  249. fi
  250. # end of 'call86/call86.asm'
  251. fi
  252. if test -f 'call86/call86.c' -a "${1}" != "-c" ; then 
  253.   echo shar: Will not clobber existing file \"'call86/call86.c'\"
  254. else
  255. echo shar: Extracting \"'call86/call86.c'\" \(1216 characters\)
  256. sed "s/^X//" >'call86/call86.c' <<'END_OF_FILE'
  257. X/* call86.c - "stub" for calling an assembly language function from C.
  258. X
  259. X   Author: Paul A. Shields
  260. X   Date: July 11, 1990
  261. X   Features: Function calls were built to be analogous to
  262. X             Microsoft C 5.x functions int86() and int86x().
  263. X
  264. X   **** NOTE! this file is provided for completeness only!
  265. X      it is a stub which will not work as coded.
  266. X      To make this work, I compiled as follows:
  267. X
  268. X         cl -AL -Ox -Fa call86.c -c 
  269. X
  270. X      then edited the assembly output file as needed to insert
  271. X      the proper code into the stubs.
  272. X */
  273. X
  274. X#include <dos.h>
  275. X#include "call86.h"
  276. X
  277. X/* w/o setting up segment registers: */
  278. Xint call86(void far *addr,union REGS *inreg,
  279. X            union REGS *outreg)
  280. X{
  281. X    outreg->x.ax = inreg->x.ax;
  282. X    outreg->x.bx = inreg->x.bx;
  283. X    outreg->x.cx = inreg->x.cx;
  284. X    outreg->x.dx = inreg->x.dx;
  285. X    outreg->x.si = inreg->x.si;
  286. X    outreg->x.di = inreg->x.di;
  287. X    outreg->x.cflag = inreg->x.cflag;
  288. X
  289. X   return inreg->x.ax;
  290. X}
  291. X
  292. X/* with setting up segment registers: */
  293. Xint call86x(void far *addr,union REGS *inreg,
  294. X            union REGS *outreg, struct SREGS *segreg)
  295. X{
  296. X    outreg->x.ax = segreg->es;
  297. X    outreg->x.bx = segreg->cs;
  298. X    outreg->x.cx = segreg->ss;
  299. X    outreg->x.dx = segreg->ds;
  300. X   return inreg->x.ax;
  301. X}
  302. END_OF_FILE
  303. if test 1216 -ne `wc -c <'call86/call86.c'`; then
  304.     echo shar: \"'call86/call86.c'\" unpacked with wrong size!
  305. fi
  306. # end of 'call86/call86.c'
  307. fi
  308. if test -f 'call86/call86.h' -a "${1}" != "-c" ; then 
  309.   echo shar: Will not clobber existing file \"'call86/call86.h'\"
  310. else
  311. echo shar: Extracting \"'call86/call86.h'\" \(277 characters\)
  312. sed "s/^X//" >'call86/call86.h' <<'END_OF_FILE'
  313. X/* call86.h - protoype statements for call86.c
  314. X   Author: Paul A. Shields
  315. X
  316. X   built to be analogous to Microsoft C 5.x functions int86() and
  317. X   int86x(). 
  318. X */
  319. X
  320. Xint call86(void far *,union REGS *,union REGS *);
  321. Xint call86x(void far *,union REGS *,union REGS *, struct SREGS *);
  322. END_OF_FILE
  323. if test 277 -ne `wc -c <'call86/call86.h'`; then
  324.     echo shar: \"'call86/call86.h'\" unpacked with wrong size!
  325. fi
  326. # end of 'call86/call86.h'
  327. fi
  328. if test -f 'call86/objects.z.uue' -a "${1}" != "-c" ; then 
  329.   echo shar: Will not clobber existing file \"'call86/objects.z.uue'\"
  330. else
  331. echo shar: Extracting \"'call86/objects.z.uue'\" \(6122 characters\)
  332. sed "s/^X//" >'call86/objects.z.uue' <<'END_OF_FILE'
  333. Xbegin 600 objects.zip
  334. XM4$L#!`H````&`-(;ZQ24+R0@)P$``&8!```*````0T%,3#@V+D]"2@\`$@,D
  335. XM%38G.#EJ>TR=;A\)!@$3-.7VEO<!,P2H<&Q8MFQQVG09=F[;^)9I2&^0Z%&I
  336. XM3ZM"'2ATZE2"1(-2#4IPZ%.B10E^<?:%0X,R99+^5ZI%L5(M^&5;"VSO="K5
  337. XMU)@/`D3:&N#!@@&_)(O0(R08D$$RG3!A0`/)M,&!`1]J1@A0X/^!_PG^%VB5
  338. XM<0.\__HU[%BY=.O.+4L6(%'(&L0/>/#+4A16CD"9Q*MD>=F("1`O.F!TT+'$
  339. XM0[[J8O96B7M5:/+_39.+CPH8_BF!X:\:&/XN@N'_*ER,'>M_KP8Y0UT\;'R'
  340. XM)A-!-QRV)P+W1.B>"-X?'Q#^*$.O79=#2EH]F"_1I..O!IPVJG7Q02A5`_6`
  341. XMU:0!>&4$;T<7-B!_$%M9*A80UW102P,$"@````8`UAOK%)<-BO1+`P``Q`4`
  342. XM``@```!415-4+D]"2@\`$@,D%38G.#EJ>TR=;A\)!@$3-.7VEO<!(P1HD&[9
  343. XMN71=C@V)^,"S-YT*<JA;Q`F0_\R4:5*A0XN61&Q@^<XPV3Y5AZRA`PZU>M.R
  344. XM%.0-$CTJ]6E5J`FI%IU*]0OQ6*D2'/J4:-&"7XD&I1J4`+$6>-Z)]@2_"ITZ
  345. XM=<"P'R1)DFI6*.S=7U0(LB=P?FK6ID*?,H%FRAX>$]\C-0IP(,&`RY(%[`L:
  346. XM#-@@F3YX,*""9!IAPH`'DATD68`,&P8<EJP%!RI<&'"DIB$O\/_`_P3_"[3*
  347. XMN8'Y`P,*%!@@Z8$&+!H0...6`!5^_1IVK%RZ=>>6N1_AU[%AV;+%:1,/^5_-
  348. XMUB'[KVW#IG53;=:C73.DUP(\#;G"_P&V.4#!=[QI!\GKC8B8`/2B`T8';6$^
  349. XMY",&&/ZN@"#B!`6TGYV3]=3Z?B!,T!(!<'O5Q>QG`M?$K8O+=UW.A=N9&[1:
  350. XM4"9H%OV(JE<0;/W46T^8=CW32`)WZT].19BZ1:L$KE;TH!]<O8.K%3=*`%AS
  351. XM?E3K`:J/"9H'U:.XVA=0^T*"\O\G%%A@?[EESS(D2&[9#;ZM2X>98__/@#DA
  352. XM?8;9R@?_OTSY9MW"T9X%7C3!EZ#0=,",`(\;!0^`V,41W]@H=HM0B"='K/*(
  353. XMQQ6]+N&E0MF;#R8.\3LG-,U<I%6!R#MP-74-PR-'<.P#AE\)JO0N"$;I!<I#
  354. XMEC>?HGU073B@$"3QOJ`Q3$\1`)MIG`#<7@B;T5^.0MF[F'^'3_E"$MS`DZQ(
  355. XMX7D&[%;\2(`/Y-TPZ(0#%,<#%#V@8135YX5[<-`2'UQ0H&"$5Y]*)2JUZ-&I
  356. XM:0.TX;^#"P,0!CF@"^P%"PR+%Y'F+U!,<?,+'%,\@>+)%&^@^+EI$2-8MN(5
  357. XM"BXXUBS;L&<1,P!;@2(<?`#L$8#M0K/$=F#3&<!VP@"$@0T88VS.9FP-BQ9Q
  358. XM@+2=3=HJ9OD!;SN;MZ5V1UP@;6=3MY)9#K6'<&0;>P7"+TB?@-CT`;%]`/0&
  359. XM)/L%4'N`N32`>EX?(2HG.+A!]@[4+SAEG6[P9@BO!.LX/:%T[!R^=>X<,[/B
  360. XM#?@):AGP?\,P;UCOG#VZ(-"!&`:`VZWK`@YT*P^*9)/&%4C[X,``J'EQ18;B
  361. XM=%!+`P0*````!@#8&^L4&G"2D:4+``"$%```"````%1%4U0N15A%#P`2`R05
  362. XM-B<X.6I[3)UN'PD&`1,TY?:6]YMJC0S0($",`$$"#`SP_W]%T"-D'YPBP(<`
  363. XM/6Q[`.:*_<*P]QAV&\,>8M@5`G0+\$.X_QCV(\/^:-@I#7NF8;<U[+R&'=BP
  364. XM5QMV;<,NZMWY!SC>KH#A%0T[M&'/-NPY"S[@`^#_@@$76'4Q^YG`-5MZ@B\N
  365. XMWW59L^-&"<"9'S<*'@"QBR.^L5'L%J$03XY8Y1&/*WI=PDN%JADJ0((`!Q.'
  366. XM<$]:)>Y5H<G_-TTN/BI@^*<$AK]J8/B["(;_JW`Q=JS_O1KD#'7QL/$=FDP$
  367. XMW7#8G@C<$Z%[(GA_?$#XHPR](#VDI-6#^1)-.OYJP&FC6A<?A%(U4`]831J`
  368. XM5T;P=G1A`_('L65(H&G#;!Z2I\"Y`IN#_*W&2-L4"'#E_<#^`4*4.]`7\?H=
  369. XM7P],W'_`_7,I6ORHF<V5K$WE^1>ZX[C_,ZE_,'G_-A.;1`J`V(GD;SPVP>G@
  370. XMD=H<+13@P/N)C';&PU=ZO[^=MI+S;3+VF!N@Q8/\?\L/<+S`E<^(?KZJIQTQ
  371. XM@:/7#(YJUVP/M0SZF>W_V_1F&-OD-NS:AAW;L%OCWL%81O?!!M.'XP)KQ]AQ
  372. XM#X#[XP:-`HBN30ZE*B85MQG8AUU;MU[W(%:H-O];%!A`K.QW@+R1,-.C=\TU
  373. XMP!K')_9X*JL-I@;H\(/S)77_!A`=WB]VZ##@>)>.#7!5%K?)$F!Q@Q`#,M8^
  374. XM<UO1>V08<&Z![]-?#6B#>@K4OFMOJY;IVFD'[8^WZ3CXS/\F`9':=%GF9@C0
  375. XMMV:`\TW379C[_Y\R+]]UW8SKRQOT>"#L[_\6#I`UYLBL_0.G&Q"I:O'W@'Z7
  376. XM[PWX%/6_C)K(4,M5:%\X8+H%`3^"'NC2O.=]8PSX2WCTJ`$@DY\!+C=NT!WL
  377. XMOGZ`G-U7$4.BHU_$C0L&@&>2`)LG&$"<RJ;1B.-?PK0N,_D"OI=H[VBMNW"P
  378. XM'UN^;@'0W@"91@?+47.Z!L:6M%]$/2W.-RKQ@[L.OS>KQ^(63_W)2UC_$;!/
  379. XM=.33;>@1=#HT;5'=%IO6X3OOSW4X^#W!Q047%A5(5_[_CNO=#]M,Q<T?@.O1
  380. XM@WW*HS>P]@@?@!5DFN66XO+Z]#C]9]6ZF/M*['(7[O2('Z#<@HO'2XVZ3/C0
  381. XM])146!'Q]!C]_W>QO-69]G-E[C+)\V<M$[SX_8#I5Z4;0?<Y[@!.$\CN=?EC
  382. XM@_HBX0;JKLT#Q&DA]J>;P@R,>!:S[^)XQS,U#X@-72$LO/_HT<0^1KTSU.SW
  383. XMHR^._LM_7P-_1ZCCK'F"I+N?9T*Z]WDVI/M6@9Q>>]2)M**3=G+2SD7:L?(4
  384. XM29<D3ZYT!PI=3WYF\J"LE%V?M!,<&'W]],7!HZ>?&!UUP+K*UP?`-_A7P/N)
  385. XM;M<%3[.#![\-'BU]_27+BZID^X'7CT8_%YSQ0@&+][]2_&+BHQ0KP4RRFO4'
  386. XM[C/,6O,?D/E5@8.'$RQN`\BS5N7U=?7IY3;VDMYOS*L",GS=@>D)`P#W@>O]
  387. XM0KI'/)E;"W=I7KD8K]S+4G["*U7U9&B#L+F@QNNC%0=6Q\]I7@3SQ:3,7<R[
  388. XM"G"_-4])&6:>SC9/6IK79E,9EC]^`!)-42*N\=>W>5KE+<&OSR].OSA_DMO4
  389. XMA?;I0G1L+#'W`>MV=%:X2!G67_0R4)+^%_>/7B[X`:[[QZN_$P)H+/^Z^-GT
  390. XM`_$G=LGM2B9K@>:.O7G>2<=?#,QSYU"Z"1/[J=[(F2].8$NT^/2)G0(07D#_
  391. XM7617]E:K5^1?;-6@;Y`!6^\41O=`+=-E>(FL%H^EQNO76_[J)=V5"U#7J__M
  392. XM&M1,L`!O<9"2%^LS)V3O))IEN(EHZ=,&@EA_L:<70Q]HH)*66S.G@=AY;HE]
  393. XMAQH=>^R!T]$SSKYHSKYR^<#@CH<M?IFD6.5")`D?B2QYY<4NXK/4AL/^>'J3
  394. XM^TXJZ*D@I=9UVY)JVK9E03)-*U9N6+EY0;8$.?0MW+QRTYY%@]4HQZ8$&3,G
  395. XMSIPL039-.U;NV[EOS=+I=KEP(?1S<IL]0#4W&W`&9X7&OQI-RK3HUZ1.C3XY
  396. XM!RQ-/7#@P`$#?`.1W%4^9!J<%PM.L%JF?06S>Y!Y\G0BI8_Z2#V7:A,F3)@-
  397. XM%3#IN73#CET+\JW=LG+-LGU[)SJA;5MG;&M:MW3+GL$>)-FT=M.2">)B^)2\
  398. XM`TP`SG.`J]LW;[H,\766V-'#.3KQS?`I:&MOB;N18_VU&Z5&;%@MQPA.QPCB
  399. XM]'+&S>%$-)=!M-SM8;1W>Q8DW#=PV]0LVMZ>#+X',.<QUN9UV;(1IZ+RL'/G
  400. XM`'YB8WAVIT+*CXZ`S+01-I,(J1:=2M7E4Z%*":Q8;T5-*AP:E"E3G#:L]8$9
  401. XM/1R,9<,S),/[<PF\Z<)TD?5ML,-8UPV`33_`QLF,U3;52Y,$L`V^[=PSVS1D
  402. XM@0:V2077:A:.-6U)'F4]VC5Q?(TUU8J;L(:MV\::TABCXAO&/;V7>];.-K4S
  403. XMWL,WS+:UT<HF6G,QV[!NJG*T9.5LTV8+"MDF(4R--?&W8[BE2GI7X,"O9NO$
  404. XM=-4KL.#7MF'(N`&3:,T?_#KFW-PTE&:.H)G$:\2R^,*O7\.6Q9N6[I<TMR(/
  405. XM$*T,OT@[4:%S[\)YLOLC9]((T_\L)FE^(-H4X[5PD31S!,W4(R[$&:7YZR4[
  406. XMQX$39R)T"GLBW2B.-YS5+6DZP3Y>]E<[>_8QG^=$DUKIU-JL"O9F<+:^MXL)
  407. XM&L."UYW#N1.(BROPBC*R"H#F"Z!I.:3K<IU1S<PL2O0OX[H+SYC4P9:=56D_
  408. XM*YH;_.)NN#,YEF3,LL[-L1E;TFG9D@76C+LUTWQ9>UGS`VZQ]*UMXU]0W\?J
  409. XM#K"-%:WIMK$K&]C]33=HG@Q0#`VK6<Q]A6/2$>78EH:UR^L='-&]SRV)A&F0
  410. XMPK"(A9>5]G)&MGW#N=]RQN9HDK%<!F-BSI;9X:7JV-%VV7C]6'#LZ+-MX=*5
  411. XMJVD,Z#%99^??HGO&VHWQ#GOVU#=JRR:JONL;/0?+G-<S'%Y:&T`<"-1J\EYK
  412. XM1W%>*2!-`NUCVF!BN*Y87^$XF26Q^5=!\P)OV5`'NR(OL`6>ZQJSLK,IFCM8
  413. XMWJC1+YSD0H,Z=5I4*KRMT&3%GNE]\STZ@>]1SPZ)GB&)H?FP</$5'N6J+T4:
  414. XM-2H]W,;#B#4=5C<W+]>2.^;KM"YG9K@VR2)=GEXK)#)1T@)87A;<.(O;DCP=
  415. XMQ9<:(<_8K"L!!)C%6R30+ZH\5JHOHCF#:/*JU"34FY%F]-XVSZMS>7]@K6.-
  416. XM[&$&8<Q*`/&<C,IS0,.HW#POW(.#"23T"PH4C/#J4ZE$I18].C4-R1K@W\&%
  417. XM`0B#'-`%]H(%AL6+&$#Q8HJ;7^"8X@D43Z9X`\4I><0(EJUXA8(+CJE]1<P`
  418. XM;`6*</`!L$<`M@O-8E9@TQG`MIJ4,+`!8XS-V8RM8=$B#I"VLTE;Q2P_X&UG
  419. XM\[8<<<0%TG8V=2N9Y0\&A'!D&WL%PB](GX#8]`&Q?0#T!E;]!5![@+DT@'I>
  420. XM'R$J)SBX0?8.U"\X99UN\&8(KP3KR\X12L?.X5L$;F9FQ1OP$]0RX/^&8=ZP
  421. XMWCE[-!6RI@$G\-&O"S@P&<9?H`!IM`)I'T3`1\TC!D#80K!7$&R7Y0(@]@$%
  422. XM3@SH0&([3@"\W\]6@@0TMA9H]A2Y.8$7\@0L.^?EB.09$B2W[`8.\G28.?;_
  423. XM#)@SC<\P6_G@_Y<IWZP;4[.F"][`;O3KNQQ;(*(:0A*N9\"T%3_BX1O8KD"C
  424. XMGE3HT*(NBIV#G.VI(HI6!."6[N#*`N,!R?ZS0*[X0`+)3L3;\KI`LJ-*]@[Q
  425. XM+J#8DK\0;\E'#3!-/81I3'N&:4O>S;3GF[:&<9-IYS!MR9_9X)P:VV;U:::)
  426. XMY'>X#*]Q;F5=Z&DB>3C3_F#:IC"G::(Q;=I?3)O?SYHFDG<U[22FK<LK>YI(
  427. XM7MJT0YBV.6]NFDA>W#2YH-FFJ>3E37N)::O2'OKB`I+]PIL=Q9MZ]F)EMN=4
  428. XM@LZ3>H!02P$""@`*````!@#2&^L4E"\D("<!``!F`0``"@```````````"``
  429. XM````````0T%,3#@V+D]"2E!+`0(*``H````&`-8;ZQ27#8KT2P,``,0%```(
  430. XM````````````(````$\!``!415-4+D]"2E!+`0(*``H````&`-@;ZQ0:<)*1
  431. XMI0L``(04```(````````````(````,`$``!415-4+D5815!+!08``````P`#
  432. X+`*0```"+$```````
  433. X`
  434. Xend
  435. END_OF_FILE
  436. if test 6122 -ne `wc -c <'call86/objects.z.uue'`; then
  437.     echo shar: \"'call86/objects.z.uue'\" unpacked with wrong size!
  438. fi
  439. # end of 'call86/objects.z.uue'
  440. fi
  441. if test -f 'call86/test.c' -a "${1}" != "-c" ; then 
  442.   echo shar: Will not clobber existing file \"'call86/test.c'\"
  443. else
  444. echo shar: Extracting \"'call86/test.c'\" \(251 characters\)
  445. sed "s/^X//" >'call86/test.c' <<'END_OF_FILE'
  446. X/* test.c - try to test call86() and call86x(). */
  447. X
  448. X#include <dos.h>
  449. X#include "call86.h"
  450. X
  451. Xvoid far fu() {}
  452. X
  453. Xmain()
  454. X{
  455. X   union REGS inreg, outreg;
  456. X   struct SREGS segreg;
  457. X   void far *fnptr = (void *)fu;
  458. X
  459. X   call86x(fnptr, &inreg, &outreg, &segreg);
  460. X}
  461. END_OF_FILE
  462. if test 251 -ne `wc -c <'call86/test.c'`; then
  463.     echo shar: \"'call86/test.c'\" unpacked with wrong size!
  464. fi
  465. # end of 'call86/test.c'
  466. fi
  467. echo shar: End of shell archive.
  468. exit 0
  469.