[comp.binaries.amiga] suplib

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