afb@j.cc.purdue.edu (Matthew Bradburn) (12/19/87)
Here's a library just chock-full of useful routines. You'll need them to compile many of Matt Dillon's larger programs. (He wrote these, too. His address may be found in the file 'POSTER', in comp.sources.amiga.) I can't guarantee that they're all bug free, but I can say that they compile without problems. Matthew Bradburn afb@j.cc.purdue.edu (arpa) j.cc.purdue.edu!afb (uucp) bradburn@purccvm (bitnet) # This is a shell archive. # Remove everything above and including the cut line. # Then run the rest of the file through sh. #----cut here-----cut here-----cut here-----cut here----# #!/bin/sh # shar: Shell Archiver # Run the following text with /bin/sh to create: # POSTER # suplib.doc # sup32.lib.uu # This archive created: Fri Dec 18 18:08:49 1987 # By: Matthew Bradburn (Purdue University) echo shar: extracting POSTER '(687 characters)' cat << \SHAR_EOF > POSTER Return-Path: dillon%cory.Berkeley.EDU@ucbvax.berkeley.edu Received: from k.cc.purdue.edu by j.cc.purdue.edu (5.54/1.14) id AA15508; Fri, 20 Nov 87 15:33:19 EST Received: from j.cc.purdue.edu by k.cc.purdue.edu (5.54/1.14) id AA07483; Fri, 20 Nov 87 15:32:24 EST Received: by j.cc.purdue.edu (5.54/1.14) id AA15322; Fri, 20 Nov 87 15:29:16 EST Received: by cory.Berkeley.EDU (5.57/1.26) id AA02857; Fri, 20 Nov 87 12:19:26 PST Date: Fri, 20 Nov 87 12:19:26 PST From: dillon%cory.Berkeley.EDU@ucbvax.berkeley.edu (Matt Dillon) Message-Id: <8711202019.AA02857@cory.Berkeley.EDU> To: amiga-sources-request@j.cc.purdue.edu Subject: SUPLIB SOURCE part 2 of 2 Precedence: special-delivery SHAR_EOF if test 687 -ne "`wc -c POSTER`" then echo shar: error transmitting POSTER '(should have been 687 characters)' fi echo shar: extracting suplib.doc '(10611 characters)' cat << \SHAR_EOF > suplib.doc SUPLIB.DOC General C Support Library Compile all modules using a precompiled symbol table of all the AMIGA include's (*/*.H) ... do *NOT* include standard aztec includes (stdio.h, etc...). You must use the +L option (32 bit ints) for ALL COMPILATIONS, including the generation of the symbol table. Summary of Modules: XFIO: Asyncronous file IO. Allows sequential asyncronous access to files for both reading (reads ahead asyncronously) and writing (writes asyncronously). Usually employed by CPU bound programs not wishing to be slowed down even more by the disk. Extremely useful for implementation of capture and serial protocols. DIO: Device IO package. This is a Generic interface for handling the Amiga's EXEC devices. It makes your code smaller and much easier to read. You no longer need to be a guru to use devices. BSTRING: memory move/set/compare routines. Operations are done in longwords when possible. MISC: misc. routines (break checking, openning/closing libraries) xfi = xfopen(file, mode, bytes) err = xfclose(xfi) n = xfread(xfi, buf, n) n = xfgets(xfi, buf, max) err = xfwrite(xfi, buf, n) mode is "r", "w", or "w+". No seeking is allowed as you can see. If you openned for reading, you may NOT use xfwrite(), and if you openned for writing, you may NOT use xfread(). The specified buffer size (bytes) is used to create two buffers of (bytes/2) bytes, double buffering either asyncronous read ahead, or asyncronous writes. 'err' returns 1 if a write error occured. err is returned by xfclose() (xfclose() waits for any asyncronous writes to complete and thus can return whether they failed or not). Once set, err stays set forever. XFREAD: 0 is returned on EOF or error XFGETS: the length of the string is returned. 0 is a valid length (a blank line). -1 is returned on EOF or error. The newline is removed and a string terminator (0) added. ********* BSTRING ******* bmov(src,dest,bytes) bcmp(src,dest,bytes) bset(src, bytes, c) bzero(src, bytes) These functions do various memory operations. bcmp() is unsigned, of course. bmov() uses acending or decending mode as appropriate. All routines will do operations in longwords if the src, dest, and bytes are on longword boundries. ********* MISC ********** checkbreak() resetbreak() disablebreak() enablebreak() [disable/enable]break() is used to disable automatic break check-and-exit by STDIO. [check/reset]break() is used by your program after you have disabled check-and-exit with disablebreak() to do your own break checking. checkbreak() returns TRUE when break has been pressed. The 'break pressed' flag is cleared by resetbreak(). openlibs(flags) closelibs(flags) see XMISC.H for flag definitions. openlibs() opens all specified libraries, returning 0 if one or more could not be openned. closelibs() closes all specified libraries. closelibs(-1) closes ALL open libraries. (NOTE: you cannot open/close DOS or EXEC. This is because the C startup and exit will do this for you). n = atoi(str) returns the decimal value of the specified string. The routine uses shifts instead of multiply internally. bool = wildcmp(wildstr, namestr) compare the wildcard string (containing '*'s and '?'s) with the file name (namestr) and return TRUE (1) if they compare, and FALSE (0) otherwise. mountrequest(bool) enable or disable the DOS requester which comes up when you attempt to open a path not currently mounted. Normal mode is TRUE (1), meaning that you get the requester. fhprintf(fh, ctrlstr, args...) uses the EXEC formatted printing call to format text and then writes it to a DOS file handle. llink(list, en) lunlink(en) see XMISC.H . Simple doubly-linked list routines. XLIST is both the list base and an element. The list base should be initialized to zero before use. ********* DIO *********** EXEC device driver IO support routines... makes everything easy. dfd = dio_open(name, unit, flags, req/NULL) open an IO device. Note: in some cases you might have to provide a request structure with some fields initialized (example, the console device requires certain fields to be initialized). For instance, if openning the SERIAL.DEVICE, you would want to give an IOExtSer structure which is completely blank execept for the io_SerFlags field. The request structure's message and reply ports need not be initialized. The request structure is no longer needed after the dio_open(). returns NULL = error, else DIO descriptor (a pointer) returned. dio_close(dfd) close an IO device. Any pending asyncronous requests are AbortIO()'d and then Wait'ed on for completion. dio_closegrp(dfd) close EVERY DIO DESCRIPTOR ASSOCIATED WITH THE dio_open() call that was the parent for this descriptor. That is, you can get a descriptor using dio_open(), dio_dup() it a couple of times, then use dio_closegrp() on any ONE of the resulting descriptors to close ALL of them. dio_cact(dfd,bool) If an error occurs (io_Error field), the io_Actual field is usually not modified by the device driver, and thus contains garbage. To provide a cleaner interface, you can have the DIO_CTL() and DIO_CTL_TO() calls automatically pre-clear this field so if an io_Error does occur, the field is a definate 0 instead of garbage. In most cases you will want to do this. An exception is the TIMER.DEVICE, which uses the io_Actual field for part of the timeout structure. This flags the particular dio descriptor to do the pre-clear, and any new descriptors obtained by DIO_DUP()ing this one will also have the pre-clear flag set. dio_dup(dfd) Returns a new channel descriptor referencing the same device. The new descriptor has it's own signal and IO request structure. For instance, if you openned the serial device, you might want to dup the descriptor so you can use one channel to pend an asyncronous read, and the other channel to write out to the device and do other things without disturbing the asyncronous read. sig = dio_signal(dfd) get the signal number (0..31) used for a DIO descriptor. This allows you to Wait() for asyncronous requests. Note that if your Wait() returns, you should double check using dio_isdone() req = dio_ctl_to(dfd, command, buf, len, to) Same as DIO_CTL() below, but (A) is always syncronous, and (B) will attempt to AbortIO()+WaitIO() the request if the timeout occurs before the IO completes. the 'to' argument is in microseconds. If timeout occurs before request completes, and DIO aborts the request, some devices, such as the SERIAL.DEVICE do not have the io_Actual field set properly. Always check the io_Error field for an abort before using io_Actual. req = dio_ctl(dfd, command, buf, len) DIO_CTL() is the basis for the entire library. It works as follows: (1) If the channel isn't clear (there is an asyncronous IO request still pending), DIO_CTL() waits for it to complete (2) If the command is 0, simply return a pointer to the io request structure. (3) If the DIO_CACT() flag is TRUE, the io_Actual field of the request is cleared. (4) Set the io_Data field to 'buf', and io_Length field to 'len' If the command is positive, use DoIO(). If the command negative, take it's absolute value and then do a SendIO(). (The command is placed in the io_Command field, of course). (5) return the IO request structure bool= dio_isdone(dfd) return 1 if current channel is clear (done processing), else 0. e.g. if you did, say, an asyncronous read, and dio_isdone() returns true, you can now use the data buffer returned and look at the io_Actual field. You need not do a dio_wait() after dio_isdone() returns 1. req = dio_wait(dfd) Wait on the current channel for the request to complete and then return the request structure. (nop if channel is clear) req = dio_abort(dfd) Abort the request on the current channel (nop if channel is clear). Sends an AbortIO() if the channel is active and then WaitIO()'s the request. ------ MACROS ------ dio_simple() and related macros return the !io_Error field. That is, 0=ERROR, 1=OK dio_actual() returns the io_Actual field instead of !io_Error. NOTE: the io_Actual field may not be set by the device if an error condition exists. To make the io_ctl() and io_ctl_to() call automatically clear the io_Actual field before doing the io operation, use the DIO_CACT() call. The reason this isn't done automatically by default is that some devices require parameters to be passed in the io_Actual field (like the timer.device). Remember, Asyncronous IO is done by sending -com instead of com. (that is, negative command). CALL Syncronous IO Asyncronous IO dio_simple(dfd,com) 0=ERROR, 1=OK undefined dio_actual(dfd,com) io_Actual undefined dio_reset(dfd) 0=ERROR, 1=OK n/a dio_update(dfd) 0=ERROR, 1=OK n/a dio_clear(dfd) 0=ERROR, 1=OK n/a dio_stop(dfd) 0=ERROR, 1=OK n/a dio_start(dfd) 0=ERROR, 1=OK n/a dio_flush(dfd) 0=ERROR, 1=OK n/a dio_getreq(dfd) returns a ptr to the IO request structure NOTE: If you use the following, you probably want to have the device library automatically clear the io_Actual field before sending the request so you get 0 if an error occurs. That is: dio_cact(dfd,1): dio_read(dfd,buf,len) returns actual bytes read dio_write(dfd,buf,len) returns actual bytes written The timeout argument for dio_readto() and dio_writeto() is in MICROSECONDS, up to 2^31uS. dio_readto(dfd,buf,len,to) returns actual bytes read dio_writeto(dfd,buf,len,to) returns actual bytes written The asyncronous dio_reada() and dio_writea() do not return anything. dio_reada(dfd,buf,len) begin asyncronous read dio_writea(dfd,buf,len) begin asyncronous write SHAR_EOF if test 10611 -ne "`wc -c suplib.doc`" then echo shar: error transmitting suplib.doc '(should have been 10611 characters)' fi echo shar: extracting sup32.lib.uu '(13646 characters)' cat << \SHAR_EOF > sup32.lib.uu begin 644 sup32.lib M[&(````"7V%T;VD`)@)?8F-M<`!'`E]B;6]V`',"7V1I<V%B;&5B<F5A:P!S M`E]E;F%B;&5B<F5A:P"1`E]C:&5C:V)R96%K`*H"7V1I;U]O<&5N`*H"7V1I M;U]D9FT`J@)?9&EO7V1D;`"J`E]D:6]?8V%C=`"J`E]D:6]?8VQO<V4`J@)? M9&EO7V-L;W-E9W)O=7``J@)?9&EO7V1U<`"J`E]D:6]?<VEG;F%L`*H"7V1I M;U]F;&%G<P"J`E]D:6]?8W1L7W1O`*H"7V1I;U]C=&P`J@)?9&EO7VES9&]N M90"J`E]D:6]?=V%I=`"J`E]D:6]?86)O<G0`?`1?9FAP<FEN=&8`KP1?;&QI M;FL`Q@1?;'5N;&EN:P#>!%]M;W5N=')E<75E<W0`!05?<F5S971B<F5A:P`; M!5]W:6QD8VUP`'L%7WAF;W!E;@![!5]X9F-L;W-E`'L%7WAF9V5T<P![!5]X M9G)E860`>P5?>&9W<FET90!P!U]B<V5T`'`'7V)Z97)O`)4'7V-L;W-E;&EB M<P"]!U]'9GA"87-E`+T'7TEN='5I=&EO;D)A<V4`O0=?17AP86YS:6]N0F%S M90"]!U]$:7-K9F]N=$)A<V4`O0=?5')A;G-L871O<D)A<V4`O0=?26-O;D)A M<V4`O0=?36%T:$)A<V4`O0=?36%T:%1R86YS0F%S90"]!U]-871H265E941O M=6)"87-"87-E`+T'7TUA=&A)965E4VEN9T)A<T)A<V4`O0=?3&%Y97)S0F%S M90"]!U]#;&ES=$)A<V4`O0=?4&]T9V]"87-E`+T'7U1I;65R0F%S90"]!U]X M9FEL;&5R,34`O0=?>&9I;&QE<C$V`+T'7W-T<G9A<@"]!U]O<&5N;&EB<P"> M"%]C;&]S96QI8G,`Q@A?1V9X0F%S90#&"%]);G1U:71I;VY"87-E`,8(7T5X M<&%N<VEO;D)A<V4`Q@A?1&ES:V9O;G1"87-E`,8(7U1R86YS;&%T;W)"87-E M`,8(7TEC;VY"87-E`,8(7TUA=&A"87-E`,8(7TUA=&A4<F%N<T)A<V4`Q@A? M36%T:$EE965$;W5B0F%S0F%S90#&"%]-871H265E95-I;F="87-"87-E`,8( M7TQA>65R<T)A<V4`Q@A?0VQI<W1"87-E`,8(7U!O=&=O0F%S90#&"%]4:6UE M<D)A<V4`Q@A?>&9I;&QE<C$U`,8(7WAF:6QL97(Q-@#&"%]S=')V87(`Q@A? M;W!E;FQI8G,````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M``````````````````````````````!J9V%T;VD``````&0``````!X``0`H M````*`"8```""```7V%T;VD`'TY5``!(YPP@)&T`"'@`>@`?#!(`(&8$4HI@ M]@P2`"UF!!]2BGH!#!(`,&TF#!(`.6X@'R!*4HH0$$B`2,`B!..!T($?)`3G M@M""*`"8O````#!@U!]*A6<&(`1$@&`"(`1,WP0P$TY=3G7U`````&IG8F-M M<```````5```````'@`!`"@````H`(3```((``!?8F-M<``?3.\#```$(B\` M#`(O``,`#Q]F*@(O``,`!V8B`B\``P`+'V8:Y(E"@&`"LXA6R?_\9B(?DKP` M`0``:O!2@$YU0H!@`A^S"%;)__QF"I*\``$``&KP$U*`3G4``&IG8FUO=@`` M````?@``````'@`!`"@````H`+#```((``!?8FUO=@`?3.\#```$("\`#$(! M`B\``Q\`#V80`B\``P`'9@@"+P`#'P`+5\&SR&<<;RS1P-/`2@$?9Q;DB&`" M(R!1R/_\D+P``1\``&KR3G43(%'(__R0O``!'P``:O).=4H!9Q;DB&`"(M@? M4<C__)"\``$``&KR3G42V!U1R/_\D+P``0``:O).=0``:F=B<F5A:P`````@ M```````>``,`50```%4`>````@@``%]D:7-A8FQE8G)E86L`!PX````"7T5N M86)L95]!8F]R=``""``.7V5N86)L96)R96%K`!5.50``0KG]<0`=3EU.=4Y5 M```C_`````']<0`33EU.=?4`:F=C:&5C:V)R90`@```````>``(`/P```#\` M9````@@``%]C:&5C:V)R96%K``<,`````5]39713:6=N86P`&4Y5``!"IT*G M3KG]<0`?4$\(```,9P1P`6`"<`!.71%.=?4``&IG9&EO```````%*``````` M'@`>`=P``0'@!T@```((``!?9&EO7V]P96X`!PP````#7T%L;&]C365M``<, M`````E]#<F5A=&50;W)T``<,`````E]/<&5N1&5V:6-E``<,`````E]$96QE M=&50;W)T``<,````!5]&<F5E365M``<,`````E]L;&EN:P`""`#>7V1I;U]D M9FT``@@`\%]D:6]?9&1L``((`0)?9&EO7V-A8W0``@@!%%]D:6]?8VQO<V4` M!PP````!7VQU;FQI;FL`!PP````"7T-L;W-E1&5V:6-E``((`8Q?9&EO7V-L M;W-E9W)O=7```@@!QE]D:6]?9'5P``((`F)?9&EO7W-I9VYA;``""`)X7V1I M;U]F;&%G<P`""`*D7V1I;U]C=&Q?=&\`!PP````!7W!U=',`!PP````!+F1I M=G,`!PP````!+FUO9',`!PP````#7T)E9VEN24\`!PP````!7U=A:70`!PP` M```#7T-H96-K24\`!PP````"7T%B;W)T24\`!PP````&7U=A:71)3P`""`/F M7V1I;U]C=&P``@@$EE]D:6]?:7-D;VYE``((!-)?9&EO7W=A:70``@@$^%]D M:6]?86)O<G0``H`#MA].5?_\2.<(,$AY``$``4AX$P`&3KG]<0`?4$\F0"`+ M9P``GDAY``$``15(>`#`3KG]<0`?4$\D0"`*9W9*K0`49PX@2A\B;0`4<!\@ MV5'(__Q"IT*G$4ZY_7(`'U!/)4``#DJJ``YG/A5\``4?``@E2P"`%7P`\`"_ M-WP``1\`!"\M`!`O"B\M``PO+0`($4ZY_7,`'4_O`!!*@&<R+RH`#DZY_70` M&5A/2'@`P"\*3KG]=0`94$](>``&+PM.N?UU`!]03W``3-\,$$Y=3G5(:@"$ M$R\+3KG]=@`?4$]"*@`>(`I@XDY5```@;1\`"!%M``\`OTY=3G5.50``'R!M M``@1;0`/`+Y.74YU3E4?```@;0`($6T`#P"]3EU.=1].50``+PHD;0`(+PI. MN@/6%UA/2&H`A$ZY_7L`'UA/(&H`@%-H``1*:``$9AH92'@`!B\J`(!.N?UU M`!503R\*3KG]?``=6$]*J@":9PQ(:@",3KG]?``76$\O*@`.3KG]=``96$]( M>`#`+PI.N?UU`!]03R1?3EU.=4Y5``!(YP`P'R1M``@@:@"`)%!@&B!*T?P? M````A)'*E<@F:@"$+PI.NA__8%A/)$L@"F;B3-\,`$Y='TYU3E4``$CG`#`D M;0`((`H?9P``B$AY``$``4AX`,!.N?UQ`!]03R9`(`MG;B!+(DIP'R#9'U'( M__PG:@"``(!"IT*G3KG]<@`?4$\G0``.2JL`#F<X0BL`'A\7:@"]`+T7:@"^ M`+X7:@"_'P"_(&L`@%)H``1(:P"$+RL3`(!.N?UV`!]03R`+3-\,`$Y=3G5( M>`#`$R\+3KG]=0`?4$]P`&#F3E4``"!M``@B:!\`#G``$"D`#TY=3G5.5?_\ M'RMM``C__"!M__QP`!`H`!X?@*T`#"(M`!!&@<"!(FW__!\30``>3EU.=4Y5 M``!(YP@@'R1M``A*J@":9CHE:@`.`)H?%7P`!0"40J=(:@",2'@``1%(>OHA M8``P$4ZY_7,`&4_O`!!*@&<,2'KZ(6``/1%.N?UR`1]83S5\``D`J"!J``YP M`!`H'P`/>`'AI"\M`!0O+0`02JT?``QO""`M``Q$@&`$("T`#!\O`"\*3KH` MR$_O`!`B/``/%T)`("T`&$ZY_7,!'R5``*PB/``/0D`@+0`83KG]=`$=)4`` ML$(J`*I(:@",3KG]=0$56$\O!$ZY_78!&5A/2H!G*B\*3KG]=P$;6$]*@&8< M2&H`C$ZY_7<!'UA/2H!G"B\*3KH!;%A/8`(78,A(:@",3KG]>`$76$](:@", M3KG]>0$?6$\@"DS?!!!.74YU=&EM91]R+F1E=FEC90!086YI8SH@'T1)3U]# M5$Q?5$\Z($YO('0;:6UE<BYD979I8V4`'TY5```O"B1M``A**@"\9PX3+PI. MN?UY`1]83T(J`+Q*K0`,9P``A$HJ'P"]9P1"J@`@0BH`'THJ`+X?9@PE;0`0 M`"@E;0`4`"1*K1\`#&PD("T`#$2`-4``'!5\'P`!`+P0*@"_P2H`'B\*3KG] M=0$?6$]@.#5M``X`''``$"H`'A]R`!(J`+_`@0C````50``>$R\*3KG]=0$= M6$\(*@```!YF"B\*3KG]>0$?6$\@"B1?3EU.=4Y5```O"ATD;0`(2BH`O&<H M+PI.N?UW`1E83TJ`9Q8O"DZY_7D!'UA/0BH`O"`*)%].74YU<``?8/8@"F#R M3E4``"\*)&T`"!E**@"\9PXO"DZY_7D!'UA/0BH`O"`*)%].74YU3E4?```O M"B1M``A**@"\9Q@O"A%.N?UX`1583R\*3KG]>0$=6$]"*@"\(`HD7TY=3G7U M``!J9V9H<')I;G1F`&```````!X`!0!C````8P#,```""```7V9H<')I;G1F M``<,`````5]7<FET90`'"```7TQ63U)A=T1O1FUT``<,`````5]3>7-"87-E M``($`%P``5]X8P`380Q.N?UQ`!]/[P$,3G4@3Y_\```!#"Z0'R]H``@`!$/O M`!`O20`(2.<=`#XF24/H`!`@:``,)'S]=``1+'G]<P`13JYR`!\F;P`<2AMF M_)?O`!Q3BR]+&P`@3-]\`$YU%L!.=0````!J9VQL:6YK`````"P``````!X` M`0`I````*0!<```""```7VQL:6YK`!].50``2.<`,"1M``@F;0`,'R:2)TH` M!"2+2I-G!B!3(4L;``0@"TS?#`!.74YU]0```&IG;'5N;&EN:P``+@`````` M'@`!`"L````K`&````((``!?;'5N;&EN:P`?3E4``"\*)&T`""`*9QA*DA]G M""!2(6H`!``$(&H`!""2'4*20JH`!"`*)%].74YU]0```&IG;6YT<F5Q```` M4`````0`'@`"`$```0!&`)P```((``!?;6]U;G1R97%U97-T``<,`````5]& M:6YD5&%S:P`)A`````(93E4``"\*0J=.N?UQ`!]83R1`2JT`"&8:#*K_____ M%P"X9Q`CZ@"X_6``'R5\_____P"X2JT`"&<2#*H9_____P"X9@@E>?U@`!<` MN"1?3EU.=?4``&IG<F5S971B<F4`%@``````'@`"`#\````_`%@```((``!? M<F5S971B<F5A:P`'#`````%?4V5T4VEG;F%L`!M.50``2'@0`$*G3KG]<0`5 M4$].74YU]0!J9W=I;&1C;7```2H``````!X``@`W``$`.P&````""```7W=I M;&1C;7``!PP````!7W!U=',``H`!$A].5?^\2.<`,"1M``@F;0`,'T*M_[Q* M$V8&2A)G``#P$!(?2(!(P&```,(,K0````C_O!-F%DAZ^B%@`#`13KG]<0`? M6$]P`$S?#`!.74YU("W_O!_G@$'M_\`AB@@`("W_O.>`'T'M_\0ABP@`4JW_ MO%**8*@?4ZW_O$JM_[QM&"`M_[SG@!]![?_$(G`(`$H19@93K?^\'V#B2JW_ MO&P$<`!@J"`M_[P?YX!![?_`)'`(`%**("W_O!_G@$'M_\12L`@`)G`(`%*M M'_^\8`#_5$H39@Q*K?^\9J`?<`!@`/]P8"@0$[`29PQ*K1__O&:,<`!@`/]< M8!20O```'P`J9P#_.)"\````%6?(8-@?2A-G`E*+2A)G`E**8`#_"A]P`6`` M_S!4;V\@;6%N>2!L'65V96QS(&]F("<J)P``]0````!J9WAF:6\`````!E8` M`````!X`%`$S```!,P?4```""```7WAF;W!E;@`'#`````-?;6%L;&]C``<, M`````U]B>F5R;P`'#`````1?3W!E;@`'#`````%?4V5E:P`'#`````%?06QL M;V-3:6=N86P`!PP````!7T9I;F1487-K``<,`````5].97=,:7-T``<,```` M!%]F<F5E``((`:!?>&9C;&]S90`'#`````1?5V%I=%!O<G0`!PP````$7T=E M=$US9P`'#`````%?5W)I=&4`!PP````!7T-L;W-E``<,`````5]&<F5E4VEG M;F%L``((`F)?>&9G971S``((`X)?>&9R96%D``<,````!%]M;W9M96T``@@$ MS%]X9G=R:71E``<,`````5]0=71-<V<`'4Y5__Q(YP@@2'@`=DZY_7$`'UA/ M)$`H+0`0XH1"K?_\2'@5`'8O"DZY_7(`'U!/(&T`#`P0`'=F5B!M``P?#"@` M*P`!9C0K?`````'__!E(>`/M+RT`"$ZY_7,`'U!/)4``#&842'@#[B\M``@1 M3KG]<P`?4$\E0``,8"I(>`/N+RT`"!%.N?US`!]03R5```Q@%$AX`^TO+0`( M$4ZY_7,`'U!/)4``#$JJ``QG``#62JT?__QG%$AX``%"IR\J``Q.N?UT`!]/ M[P`,("H`#.6`)4``#"!$%4AH`!!.N?UQ`!U83R5```0@1$AH`!!.N?UQ`!]8 M3R5```A(>``0+RH`!$ZY_7(`&U!/2'@`$"\J``A.N?UR`!]03R!M``P,$`!R M9@1P`6`"'W``%(`@:@`(((0B:@`$(H0?%7P`!`!<0?H`7"5(`%Y"*A<`8DAX M__].N?UU`!E83Q5``&-"ITZY_78`&UA/)4``9$AJ`&A.N?UW`!]83TH29PQ( M>`!2+PI.N@1J%U!/8`PO"DZY_7@`'UA/E<H@"DS?!!!.74YU6$8924\M07-Y M;F,``!].5?_\+PHD;0`(*WP````!'__\(`IG``"B2BH``6<<0BH7``%(:@!4 M3KG]>@`76$](:@!43KG]>P`?6$]*$F8L(&H`"$JH``1G(A\@:@`(+R@`!")J M``A(:0`,&2`J``SD@"\`3KG]?``?3^\`#!`J``)(@$C`*T#__!D@*@`,Y(`O M`$ZY_7T`%UA/+RH`!$ZY_7@`%UA/+RH`"$ZY_7@`&UA/<``0*@!C+P!.N?U^ M`!583R\*3KG]>``?6$\@+?_\)%].74YU3E4``!](YPP@(&T`""1H``@@;0`( M'TH09@IP_TS?!#!.74YU4ZT?`!!X`"HJ``1@+B!*T<4B;1\`#!.H``Q(``PH M``H`#&84'R!M``Q",$@`(`52@"5```0?(`1@PE*%4H2ZJ@`(;`:XK1\`$&W& M)44`!"!M``Q",$@`'[BM`!!F!"`$8)P@;0`(2B@?``%F!'#_8(X@;0`(2&@` M5!%.N?UZ`!M83R!M``A(:`!43KG]>P`?6$\@;0`(0B@``2!M``A*J!\`,&X0 M2H1F!G#_8`#_5"`$'V``_TX@;0`((FT`""QI``0?+6@`,``((&T`"")H``1" MJ1\`!"!M``@D:``$(&T`"")M'P`((V@`"``$(&T`""%*``@?2'@`4B\M``A. MN@)L4$]@`!__#F``_OQ.50``2.<,("!M'P`()&@`""@M`!`@;0`(2A`?9@IP M`$S?!#!.74YU*BH`"!^:J@`$NJT`$&P``.PO!2\M'0`,(&H`!-'*2&@`#$ZY M_7$!'T_O``S;K0`,FZT`$"!M``@?2B@``68>(&T`"")H``@L;1\`""!N``@A M:0`(``0@!)"M'0`08)X@;0`(2&@`5$ZY_7H`&UA/(&T`"$AH`%1.N?U[`!]8 M3R!M``A"*``!(&T`"$JH'P`P;B`@;0`((F@`""QM``@?(&X`""%I``@`!"`$ MD*T`$!]@`/].(&T`"")M``@L:0`$'RUH`#``""!M``@B:``$0JD?``0@;0`( M)&@`!"!M``@B;1\`""-H``@`!"!M``@A2@`('TAX`%(O+0`(3KH!2%!/8``? M_P@O+0`0+RT`#"!J``31RA5(:``,3KG]<0$?3^\`#"`M`!#1J@`$(`1@`!_^ MUDY5``!(YP@@(&T`""1H'P`((&T`"$H09@HB;0`(2BD?``)G"G`!3-\$$$Y= M3G4H$A^8J@`$N*T`$&P``*HO!"!J'0`$T<I(:``,+RT`#$ZY_7$!'T_O``S9 MK0`,F:T`$"!M``@?2B@``6=*(&T`"$AH`%1.N?UZ`!M83R!M``A(:`!43KG] M>P`?6$\@;0`(0B@``2!M``@B;1\`""`H`#"PJ0!`9Q`@;0`('Q%\``$``G`! M8`#_=B!M``@?)&@`!"!M``@B;0`((V@`"!\`!"!M``@A2@`(0JH`!$AX'P!7 M+RT`"&$Z4$]@`/],+RT?`!`@:@`$T<I(:``,+RT`#!%.N?UQ`1]/[P`,("T` M$-&J``0@;0`('Q`H``)(@$C`8`#_$$Y5```?+PHD;0`((`K0O````"0E0!\` M&B`*T+P````0)4``)"`*']"\````5"5``"@E;0`,`"P?(&H`#"5H`"0`."!J M``31_!\````,)4@`/"!J``0E4`!`'4AJ`!`@:@`,+R@`"$ZY_7,!'5!/%7P` M`0`!)%].74YU]0!J9V)S970``````%@``````!X``@`S````,P"4P``""``$ M7V)S970``@@``%]B>F5R;P`?0H%@!!(O``\@;P`$("\`"!\"+P`#``MF#`(O M``,`!V8$'V`0$,%1R/_\D+P``0``:O(?3G7DB$J!9Q(?00`.,B\`#A](03(O M``Y@`B#!4<C__)"\%P`!``!J\DYU````:F=C;&]S96QI8@!,```````>``,` M3P```$\`H````@@``%]C;&]S96QI8G,`!PX````!7W-T<G9A<@`'#`````%? M0VQO<V5,:6)R87)Y`!U.50``2.<((#@M``I!^?UQ`!\D2&`F"`0``&<<(&H` M!$J0&6<4(&H`!"\03KG]<@`?6$\@:@`$0I#B3%"*2D1G!!M*DF;23-\$$$Y= M3G7U`&IG;W!E;FQI8G,!&@"(````'@`6`:\``@&Y`X0```<J``0``5]'9GA" M87-E``<J``0``5]);G1U:71I;VY"87-E``<J``0``5]%>'!A;G-I;VY"87-E M``<J``0``5]$:7-K9F]N=$)A<V4`!RH`!``!7U1R86YS;&%T;W)"87-E``<J M``0``5])8V]N0F%S90`'*@`$``%?36%T:$)A<V4`!RH`!``!7TUA=&A4<F%N M<T)A<V4`!RH`!``!7TUA=&A)965E1&]U8D)A<T)A<V4`!RH`!``!7TUA=&A) M965E4VEN9T)A<T)A<V4`!RH`!``!7TQA>65R<T)A<V4`!RH`!``!7T-L:7-T M0F%S90`'*@`$``%?4&]T9V]"87-E``<J``0``5]4:6UE<D)A<V4`!RH`!``! M7WAF:6QL97(Q-0`'*@`$``%?>&9I;&QE<C$V``,.`````5]S=')V87(``@@` MBE]O<&5N;&EB<P`'#`````%?<W1R8W!Y``<,`````5]S=')C870`!PP````! M7T]P96Y,:6)R87)Y``<,`````5]C;&]S96QI8G,``J`````0`H`!$/7](6`` M,/UP`/TA8``Y_7$`_2%@`%.!_7(`_2%@`%V!_7,`_2%@`%:"_70`_2%@`%&# M_74`_2%@`%:#_78`_2%@`%Z#_7<`_2%@`%B$_7@`_2%@`%B%_7D`_2%@`%B& M_7H`_2%@`%^&_7L`_2%@`%6'_7P`_2%@`%N'_7T`_2%@`%&(_7X`_2%@`%6( M_7\`%P``````````]!]G<F%P:&EC<P!I;G1U:71I'V]N`&5X<&%N<VEO;@!D M:7,?:V9O;G0`=')A;G-L871O<A\`:6-O;@!M871H9F9P`&UA'W1H=')A;G,` M;6%T:&EE964?9&]U8F)A<P!M871H:65E91]S:6YG8F%S`&QA>65R<P!C'VQI M<W0`<&]T9V\`=&EM97(9`'@Q-0!X,38``!].5?^\+PIP`#`M``HK0/^\$4'Y M_7`!'R1(8$H(+0````MG/"\22&T3_\!.N?UR`1-03TAZ^B%A`#`52&W_P$ZY M_7,!'U!/(&H`!$J09A9"ITAM_\`13KG]=`$?4$\@:@`$((!G&.+M``I0BA]* M;0`*9P1*DF:L<`$D7TY=%TYU+RW_O$ZY_74!'UA/<`!@ZBYL:6)R87)Y``#U M`````&IG8VQO<V5L:6(`3```````'@`#`$\```!/`*````((``!?8VQO<V5L M:6)S``<.`````5]S=')V87(`!PP````!7T-L;W-E3&EB<F%R>0`=3E4``$CG M""`X+0`*0?G]<0`?)$A@)@@$``!G'"!J``1*D!EG%"!J``0O$$ZY_7(`'UA/ M(&H`!$*0XDQ0BDI$9P0;2I)FTDS?!!!.74YU]0!J9V]P96YL:6)S`1H`B``` M`!X`%@&O``(!N0.$```'*@`$``%?1V9X0F%S90`'*@`$``%?26YT=6ET:6]N M0F%S90`'*@`$``%?17AP86YS:6]N0F%S90`'*@`$``%?1&ES:V9O;G1"87-E M``<J``0``5]4<F%N<VQA=&]R0F%S90`'*@`$``%?26-O;D)A<V4`!RH`!``! M7TUA=&A"87-E``<J``0``5]-871H5')A;G-"87-E``<J``0``5]-871H265E M941O=6)"87-"87-E``<J``0``5]-871H265E95-I;F="87-"87-E``<J``0` M`5],87EE<G-"87-E``<J``0``5]#;&ES=$)A<V4`!RH`!``!7U!O=&=O0F%S M90`'*@`$``%?5&EM97)"87-E``<J``0``5]X9FEL;&5R,34`!RH`!``!7WAF M:6QL97(Q-@`##@````%?<W1R=F%R``((`(I?;W!E;FQI8G,`!PP````!7W-T M<F-P>0`'#`````%?<W1R8V%T``<,`````5]/<&5N3&EB<F%R>0`'#`````%? M8VQO<V5L:6)S``*@````$`*``1#U_2%@`##]<`#](6``.?UQ`/TA8`!3@?UR M`/TA8`!=@?US`/TA8`!6@OUT`/TA8`!1@_UU`/TA8`!6@_UV`/TA8`!>@_UW M`/TA8`!8A/UX`/TA8`!8A?UY`/TA8`!8AOUZ`/TA8`!?AOU[`/TA8`!5A_U\ M`/TA8`!;A_U]`/TA8`!1B/U^`/TA8`!5B/U_`!<``````````/0?9W)A<&AI M8W,`:6YT=6ET:1]O;@!E>'!A;G-I;VX`9&ES'VMF;VYT`'1R86YS;&%T;W(? M`&EC;VX`;6%T:&9F<`!M81]T:'1R86YS`&UA=&AI965E'V1O=6)B87,`;6%T M:&EE964?<VEN9V)A<P!L87EE<G,`8Q]L:7-T`'!O=&=O`'1I;65R&0!X,34` M>#$V```?3E7_O"\*<``P+0`**T#_O!%!^?UP`1\D2&!*""T````+9SPO$DAM M$__`3KG]<@$34$](>OHA80`P%4AM_\!.N?US`1]03R!J``1*D&860J=(;?_` M$4ZY_70!'U!/(&H`!""`9QCB[0`*4(H?2FT`"F<$2I)FK'`!)%].71=.=2\M =_[Q.N?UU`1]83W``8.HN;&EB<F%R>0``]0`````$ ` end SHAR_EOF if test 13646 -ne "`wc -c sup32.lib.uu`" then echo shar: error transmitting sup32.lib.uu '(should have been 13646 characters)' fi # End of shell archive exit 0