RDROYA01@ULKYVX.BITNET (Robert Royar) (05/27/87)
This is a repost. The file I sent two weeks ago never got through. Could someone on BITNET send me a message to RDROYA01@ULKYVX detailing an address path to comp.sys.atari.st using bitnet or arpanet gateways? The routines in this file serve three purposes. They give Alcyon programmers who don't need all of the GEMLIB startup stuff or other baggage some useful string routines. Many are in GEMLIB already, but you can use these in very small TOS programs, such as auto folder programs. The second purpose is to provide the additional routines strpos, strrpos, strpbrk, strrpbrk, strscn, and strcscn which are not part of the Alcyon distribution. The last purpose is to fix a bug in the Atari/DRI index strchr routine. As written in the startup.s file, it does not return a pointer to the end of string when given the following: index("hello",'\0'); Harbison and Steele say that index/strchr should return a pointer to the NULL at the end of "hello" rather than a NULL pointer in this case. The bug was added by DRI and perpetuated by Atari. The Alcyon library's versions of strchr and strrchr both return pointers to the NULL at the end of "hello" when given the input above. I wonder if Atari can spell hermeneutics? And now, two questions. 1. Does anyone have the proper definition of the __fds structure that the Alcyon file ops use for each file? I know there is a definition in OSIF.H, but it refers to CP/M specific stuff like user numbers and passwords which don't seem to correspond to anything under GEM. Under the CP/M system you can get at the low level file handle for streams by working with the fds (note that fileno(fp) != file handle of the file). Note also that the Atari written low level C open routine fails to check for the file type (i.e. RO RW). If you've used the stack a bit and try to open a RO file for reading, the open will fail, simply because xopen fails to push the mode onto the stack. It would be relatively easy to replace xopen knowing the real __fds structure, a lot easier than rewriting the entire stream package. 2. Does anyone have a TOS-based font loader? I'd like something that will reset the default font and will allow the new font to be used by TOS-based programs. Is this impossible? It seems all that would be needed would be to load a new font, reset the old pointers (via linea), and Ptermres(). Anyway here's the string manipulation code: O O x (cut here) ---------------------------/-\------------------------------------------ #include <string.h> /* return length of str excluding the NULL */ strlen(str) register char *str; { register int len; len = 0; while(*str) { ++str; ++len; } return(len); } /* append str2 to str1, returning the beginning of str1 */ char * strcat(str1,str2) register char *str1, *str2; { register char *sptr; sptr = str1; while(*str1) ++str1; while(*str2) *str1++ = *str2++; *str1 = '\0'; return(sptr); } /* copy str2 to str1, returning the beginning of str1 */ char * strcpy(dest,src) register char *dest, *src; { register char *sptr; sptr = dest; while(*src) *dest++ = *src++; *dest = '\0'; return(sptr); } /* is str1 == str2? 0==yes; -#== str2 > str1; +#== str1 > str2 */ strcmp(str1,str2) register char *str1, *str2; { while(*str1) { if(*str1 != *str2) return(*str1-*str2); ++str1; ++str2; } if(*str2=='\0') return(0); else return(-1); } /* not in GEMLIB */ /* index 0 position of first occurence c in string str. -1 if c is not in str */ strpos(str, c) register char *str; register char c; { register int pos; pos = 0; while(*str) { if (*str++ == c) return(pos); ++pos; } if (c == '\0') return(pos); else return(-1); } /* Not in GEMLIB */ /* index 0 of position of last occurence of c in str. -1 if c not in str */ strrpos(str, c) register char *str; register char c; { register int pos; pos = 0; while(*str) { ++str; ++pos; } if (c == '\0') return(pos); while(pos >= 0) { if (*str-- == c) return(pos); --pos; } return(-1); } /* Not in GEMLIB */ /* find first occurence (in str) of one of the characters in set. Return * a pointer to it or NULL on failure. */ char * strpbrk(str, set) register char *str, *set; { register char *ptr; while(*set) if ((ptr=index(str,*set++))!=NULL) return(ptr); return(NULL); } /* Not in GEMLIB */ /* same as strpbrk, but find last occurence */ char * strrpbrk(str, set) register char *str, *set; { register char *rptr; while(*set) if ((rptr=rindex(str,*set++))!=NULL) return(rptr); return(NULL); } /* Not in GEMLIB */ /* search str for the first occurence of a character not in set. Return * the position of the last character in str in the set, or strlen if * all of set are in str. */ strspn(str, set) register char *str, *set; { register char *ptr; /* set is empty so the first char of str will not be in it */ if (*set == '\0') return(0); ptr = str; while(*str) { if (index(set,*str)==NULL) return(strpos(ptr,*str)); ++str; } return(strlen(ptr)); } /* Not in GEMLIB */ /* find first occurence of char in str that is included in set. Return * its position. */ strcspn(str, set) register char *str, *set; { register char *ptr; ptr = str; while(*str) { if (index(set,*str)) return(strpos(ptr,*str)); ++str; } return(strlen(ptr)); } /* return pointer to last occurence of c in str. (AKA strrchr). */ char * rindex(str, c) register char *str; register char c; { register char *sptr; sptr = str; while(*sptr) ++sptr; if (c == '\0') return(sptr); while(str != sptr) if (*sptr-- == c) return(++sptr); return(NULL); } /* strcat with max */ char * strncat(str1,str2,len) register char *str1, *str2; register int len; { register char *sptr; if (len <= 0) return(str1); sptr = str1; while(*sptr) ++sptr; while(*str2) { *sptr++ = *str2++; if (!--len) break; } *sptr = '\0'; return(str1); } /* strcpy with MAX */ char * strncpy(dest,src,len) register char *dest, *src; register int len; { register char *sptr; if (len <= 0) return(dest); sptr = dest; while(*src) { *sptr++ = *src++; if (!--len) break; } if (len) while(len-- > 0) *sptr++ = '\0'; return(dest); } /* compare len chars of str1 to len chars of str2 */ strncmp(str1,str2,len) register char *str1, *str2; register int len; { if (len <= 0) return(0); while(*str1) { if(*str1 != *str2) return(*str1-*str2); ++str1; ++str2; if (!--len) break; } if (!len) return(0); if(*str2=='\0') return(0); else return(-1); } /* As supplied the index function does not return a pointer to * the EOS when the requested character (in d0) was a '\0'. * Harbison and Steele (p. 262) say that a pointer to the NULL * should return if the indexed character is a '\0'. Replace * the index routine in your startup file with this routine. * Index function to find out if a particular character is in a string. * .globl _index .globl _strchr _index: _strchr: move.l 4(a7),a0 * a0 -> String move.w 8(a7),d0 * D0 = desired character xindex: tst.b (a0) * EOS? bne notend * No, continue to look tst.b d0 * Are we looking for the NULL ? bne out2 * Go around move.l a0,d0 * Load D0 with end of string rts out2: clr.l d0 * Not found rts * Quit notend: cmp.b (a0)+,d0 * check for character bne xindex * move.l a0,d0 * Found it subq.l #1,d0 * set return pointer rts */
john@viper.UUCP (06/07/87)
In <8705271729.AA20883@ucbvax.Berkeley.EDU> RDROYA01@ULKYVX.BITNET (Robert Royar) asks: > >2. Does anyone have a TOS-based font loader? I'd like something that will >reset the default font and will allow the new font to be used by TOS-based >programs. Is this impossible? It seems all that would be needed would be >to load a new font, reset the old pointers (via linea), and Ptrmres(). > Yes! A friend of mine wrote up just exactly what you asked for with the additional feature that you could auto folder load an alternate character set. His program works only with Degas .FNT files for fonts and allows you to specify fewer scan-lines per character if you wished which allows using alternate 50/40/etc line character fonts and the version of Emacs we hacked allows using the extended lines for editing. (Using a Courier font to edit C code looks almost exactly like the font used in K&R... :) I'll ask him for permission to post to the net. If you're in a hurry you could check CI$ in ataridev or atari16 for FONTLOAD.ARC which contains a slightly older, but functional version. Let me know if you want it. If I get enough interest, I'll post it to comp.sys.atari.st.... There is also a desk accessory called FONTTRIX which changes the default character set for all applications (fontload only changes the character set for TOS/TTP applications) but I've only seen it used, I have no idea who wrote it, if it's PD or anything else about it.... --- John Stanley (john@viper.UUCP) Software Consultant - DynaSoft Systems UUCP: ...{amdahl,ihnp4,rutgers}!{meccts,dayton}!viper!john
bammi@cwruecmp.UUCP (06/12/87)
In article <1102@viper.Lynx.MN.ORG> john@viper.UUCP (John Stanley) writes: >In <8705271729.AA20883@ucbvax.Berkeley.EDU> >RDROYA01@ULKYVX.BITNET (Robert Royar) asks: > > > >2. Does anyone have a TOS-based font loader? I'd like something that will > >reset the default font and will allow the new font to be used by TOS-based > >programs. Is this impossible? It seems all that would be needed would be > >to load a new font, reset the old pointers (via linea), and Ptrmres(). > > Here is one that i did (in three parts). It lets you load and use a Gdos font with Bconout()/Putchar etc. The Gdos font has to be mono-spaced and 8 wide. It can be any height. A sample Gdos font is included. BTW - in case anyone is interested, i wrote a little vfont (see man 5 vfont) to Gdos font converter (handles fixed width fonts only at present time), and will be glad to mail it to anyone interested. Using this, and another PD Mac utility that goes Mac->vfont, you can get all the nice PD Mac fonts in Gdos format. It handles Sun's fixed width fonts too. usenet: {decvax,cbosgd,sun}!cwruecmp!bammi jwahar r. bammi csnet: bammi@cwru.edu <---------Please note change of address arpa: bammi@cwru.edu <---------Please note change of address compuServe: 71515,155 -- ------------------cut here ------- TOS font switcher part 1 of 3 ---------- #!/bin/sh # This is a shell archive, meaning: # 1. Remove everything above the #!/bin/sh line. # 2. Save the resulting text in a file. # 3. Execute the file with /bin/sh (not csh) to create the files: # afona.uue # alglobal.c # compiler.h # init.c # makefile # makefile.alc # switchf.c # This archive created: Fri Jun 12 01:44:15 1987 # By: Jwahar R. Bammi(Case Western Reserve University) # Uucp: {decvax,sun,cbosgd}!cwruecmp!bammi # Csnet: bammi@cwru.edu # Arpa: bammi@cwru.edu # export PATH; PATH=/bin:$PATH echo shar: extracting "'afona.uue'" '(2646 characters)' if test -f 'afona.uue' then echo shar: over-writing existing file "'afona.uue'" fi sed 's/^X//' << \SHAR_EOF > 'afona.uue' Xtable X !"#$%&'()*+,-./0123456789:;<=>? X@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ Xbegin 644 afont.fnt XM6@ 0 $%&3TY44RXQ- ( !^ ! #0 *a XM ( ( @ 0 ! $ 0!55555 !8 6 !@! !@ ! a XM" 0 !@ ( H # . ! $@ 4 !8 & : !P '@ @ "( ) F "@ *@ L "Xa XM , R #0 -@ X #H / ^ 0@!$ $8 2 !* $P 3@!0 %( 5 !6 %@ 6@!a XM< %X 8 !B &0 9@!H &H ; !N ' <@!T '8 > !Z 'P ?@! (( A "& (@a XM B@", (X D "2 )0 E@"8 )H G "> * H@"D *8 J "J *P K@"P +( M "a XMV +@ N@"\ +X @ a XM a XM ( !" $ a XM /$ \ a XM ."' ()"0(,!@$"! (<"#P<##X,a XM?CP\ " $ \& (" $ 0 & a XM!@ . & (!& X ! 0" @ ()"0^2"0$$ @( (Ba XM&$(B%" P0D)& $ "!B)#A\&GQ_?QIW/C]S<(.'''X<?#I_YW?C=W=^(" $a XM" 0 " @ 1 " (!" ( ! 0" @R ()"1"22 ($ @(a XM" 0B*$("%" @ D)" ( !!"0@@B)B(A(28B" 0B($)")B$F(D9)0B)!a XM(B)"(! $% ( " @ 0 " " ( ! 0" A: ()'Y a XM2B 0( 1K" 0B" (")"! !$)"&!@0 @"3A0B0B$@($(B" 0D($9B0B%"a XM(D))0B))%"($(! $(@ $'"P:&AQ\&RPX/"8(DFP<;!MN/GQF=^-W=WX0" A,a XM ( "0P-! ( 0^" @B" 0<)#Q<!#Q&&!@@?@0$4A0B0"$D)$ B" 0Ha XM(&920B%"(C (0A1)%!0(( @$ (C(F)B80)C((!"0(;3(B,B8Q0A B(D$Ba XM(D00" @ ( "0,""D ( 0<?P!^ @B" @"1 )B"$(Z ! ((4B(\0"$\a XM/$ ^" 0X(&I20CY"/ P(0A15"!00( @$ B%"0D(00B((!"@(22)!(4(@a XM0! B(DD4(@A@ 8 'X"%D8 ( 0V" ! B"! "?@)""$(" @?@08a XM3"(B0"$D)$<B"$0D(%I*0B!") ((0A0V% @@( 0$ /B% 0GX00B((!#@(a XM22)!(4(@/! B%%T(%! 0" @ "1"*40 ( 0B" ! B""!"!$)"$$($a XM 0 @ 0#XA02$@($(B"$0D(5)*0B!"(D((0@@B% A"( 0$ 0B% 0D 0a XM0B((!"0(22)!(4(@ A B%#84%" 0" @ ( "1B24X $ @ "!@ &" B"$)Ba XM!&)B$$(,&!@( ! (D$A(B(A("(B"$0B(4)&9"!D(F(() @B(@A"( ($ a XM1C(B)B(0)B((!"((22(B,B8@0A(F""(B"$(0" @ ( "1<"3D $ @ !@ a XM&" </GX\#CP\$#PP&!@$ " 8'.-^''Q_>!QW/CAS?^?B.'@X<UP^& @B=SY^a XM( ($ .VP<&QQ\&G<^!&<^27<<+!IX? P;"")W"'X0" @ (!@ a XM"! @ $ @" $ 0 a XM ( $$ '\ @ ! ( ( $ 0" @ a XM ( !" ! ! a XM L / \ ! " ( ( $ .a XM"' " " a XM # . < < < a XM > a XM a X1 H a X a Xend SHAR_EOF if test 2646 -ne "`wc -c 'afona.uue'`" then echo shar: error transmitting "'afona.uue'" '(should have been 2646 characters)' fi echo shar: extracting "'alglobal.c'" '(920 characters)' if test -f 'alglobal.c' then echo shar: over-writing existing file "'alglobal.c'" fi sed 's/^X//' << \SHAR_EOF > 'alglobal.c' X X /***********************************************\ X * * X * alglobal.c * X * Global variables for C interface * X * declared here. Extern eveywhere else. * X * * X * J.R. Bammi * X * decvax!cwruecmp!bammi * X * bammi%cwru.edu.ARPA * X * bammi@cwru.edi.CSNET * X * CIS: 71515,155 * X * * X \***********************************************/ X X X#define ALGLOBAL X X#include "aline.h" X X XLINEA *aline; /* Pointer to line a parameter block returned by init */ X XNLINEA *naline; /* Pointer to line a parameters at negative offsets */ X XFONT **fonts; /* Array of pointers to the three system font headers */ X /* returned by init (in register A1) */ X XWORD (**funcs)(); /* Array of pointers to the 15 line a functions */ X /* returned by init (in register A2) */ X /* only valid in ROM'ed TOS */ SHAR_EOF if test 920 -ne "`wc -c 'alglobal.c'`" then echo shar: error transmitting "'alglobal.c'" '(should have been 920 characters)' fi echo shar: extracting "'compiler.h'" '(1647 characters)' if test -f 'compiler.h' then echo shar: over-writing existing file "'compiler.h'" fi sed 's/^X//' << \SHAR_EOF > 'compiler.h' X X /***********************************************\ X * * X * compiler.h * X * Compiler dependent defines * X * * X * J.R. Bammi * X * decvax!cwruecmp!bammi * X * bammi@cwru.edu.ARPA * X * bammi@cwru.edu.CSNET * X * CIS: 71515,155 * X * * X \***********************************************/ X X /* X * Assumptions: X * Type 'long' == 32 bit integer X * Type 'char' == 8 bit integer X * X * Compiler Dependant defines: X * Type 'WORD' == 16 bit signed int X * Type 'UWORD' == 16 bit unsigned int X * Type 'VOID' == nothing X */ X X/* X * Define one of the following X */ X/* #define ALCYON */ X/* #define MEGAMAX */ X/* #define LATTICE */ X/* #define MWC */ X X X/************************** The rest 'should' be ok **************************/ X X X/* X * Alcyon C X */ X#ifdef ALCYON X Xtypedef int WORD; Xtypedef unsigned int UWORD; X#define VOID void /* can't typedef void in alcyon (bug) */ X X#endif /* ALCYON */ X X X/* X * Megamax C X */ X#ifdef MEGAMAX X Xtypedef int WORD; Xtypedef unsigned UWORD; /* Check this */ Xtypedef int VOID; /* yech !! */ X X#endif /* MEGAMAX */ X X/* X * Lattice C X * I don't have a copy so ...... X */ X#ifdef LATTICE X Xtypedef short WORD; Xtypedef unsigned short UWORD; /* Is'nt lattice braindamaged like Megamax, X * in that it defines unsigned as a type X * instead of a type modifier ?? if so X * unsigned short is incorrect, and i X * don't know what it should be! X */ Xtypedef void VOID; /* what should this be ?? */ X X#endif /* LATTICE */ X X/* X * Mark Williams C X */ X#ifdef MWC X Xtypedef int WORD; Xtypedef unsigned int UWORD; Xtypedef void VOID; X X#endif /* MWC */ SHAR_EOF if test 1647 -ne "`wc -c 'compiler.h'`" then echo shar: error transmitting "'compiler.h'" '(should have been 1647 characters)' fi echo shar: extracting "'init.c'" '(1352 characters)' if test -f 'init.c' then echo shar: over-writing existing file "'init.c'" fi sed 's/^X//' << \SHAR_EOF > 'init.c' X /***********************************************\ X * * X * init.h * X * Common file for C interface * X * to low level Line A calls * X * * X * J.R. Bammi * X * decvax!cwruecmp!bammi * X * bammi%cwru.edu.CSNET * X * bammi@cwru.edu.ARPA * X * CIS: 71515,155 * X * * X \***********************************************/ X X#include "aline.h" X X /* A L C Y O N */ X#ifdef ALCYON XVOID init_aline() X{ X asm(".dc.w $a000"); /* Line A Init */ X asm("move.l a0, _aline"); /* Address of param block */ X asm("move.l a1, _fonts"); /* Array of system font headers */ X asm("move.l a2, _funcs"); /* Pointers to line a functions */ X X naline = ((NLINEA *)aline) - 1; /* Pointer to negative offset parms */ X X} X#endif /* ALCYON */ X X /* M A R K W I L L I A M S */ X#ifdef MWC X#include <linea.h> X XVOID init_aline() X{ X linea0(); X aline = (LINEA *)(la_init.li_a0); X fonts = (FONT **)(la_init.li_a1); X funcs = la_init.li_a2; X naline = ((NLINEA *)aline) - 1; X} X X#endif /* MWC */ X X X /* M E G A M A X */ X /* CAUTION --- NOT TESTED */ X#ifdef MEGAMAX Xinit_aline() X{ X asm X { X dc.w 0XA000 X movea.l A0,aline X movea.l A1,fonts X movea.l A2,funcs X } X naline = ((NLINEA *)aline) - 1; X} X#endif /* MEGAMAX */ X X#ifdef LATTICE X /* Someone fill this in */ X#endif /* LATTICE */ X X/** EOF **/ SHAR_EOF if test 1352 -ne "`wc -c 'init.c'`" then echo shar: error transmitting "'init.c'" '(should have been 1352 characters)' fi echo shar: extracting "'makefile'" '(244 characters)' if test -f 'makefile' then echo shar: over-writing existing file "'makefile'" fi sed 's/^X//' << \SHAR_EOF > 'makefile' X# X# Test out switchf.c X# MWC version X# XCFLAGS = -O -V -DMWC -DTEST X Xswitchf.prg : switchf.o alglobal.o init.o X cc -o switchf.prg switchf.o init.o alglobal.o -s -V -x X Xswitchf.o alglobal.o init.o : aline.h compiler.h X Xclean: X rm *.o switchf.prg SHAR_EOF if test 244 -ne "`wc -c 'makefile'`" then echo shar: error transmitting "'makefile'" '(should have been 244 characters)' fi echo shar: extracting "'makefile.alc'" '(495 characters)' if test -f 'makefile.alc' then echo shar: over-writing existing file "'makefile.alc'" fi sed 's/^X//' << \SHAR_EOF > 'makefile.alc' X# X# Test out switchf.c X# Alcyon version (V2.14 required) X# for 'make' as distributed to this net. X# X# Include directory XINCLUDE = c:\include X# Library XLIB = c:\lib X# LINKER XLINKER = c:\bin\lo68.prg X XCPFLAGS = -i $(INCLUDE)\ -DALCYON -DTEST X Xswitchf.prg : switchf.o alglobal.o init.o X $(LINKER) -r -s -o switchf.68k $(LIB)\gemstart.o switchf.o \ Xalglobal.o init.o $(LIB)\gemlib $(LIB)\libf X $(RELMOD) switchf X Xswitchf.o alglobal.o init.o : aline.h compiler.h X Xclean: X $(RM) *.o *.68k switchf.prg SHAR_EOF if test 495 -ne "`wc -c 'makefile.alc'`" then echo shar: error transmitting "'makefile.alc'" '(should have been 495 characters)' fi echo shar: extracting "'switchf.c'" '(5497 characters)' if test -f 'switchf.c' then echo shar: over-writing existing file "'switchf.c'" fi sed 's/^X//' << \SHAR_EOF > 'switchf.c' X X /***************************************\ X * * X * switchf.c * X * Gdos-less Gdos font switcher * X * soon to appear in Gulam, Xmdm * X * and Zmdm * X * * X * Jwahar R. Bammi * X * {decvax,cbosgd,sun}!cwruecmp!bammi * X * CSnet,Arpa: bammi@cwru.edu * X * CIS: 71515,155 * X * * X \***************************************/ X X X#include <stdio.h> X#include "aline.h" X X#define SCREENFONT 2 /* index of 8x16 monochrome system default font */ X X /* Possible Errors */ X#define ENO_ERROR 0 /* No error */ X#define EOPEN_FAIL 1 /* Error opening font file */ X#define EHEAD_READ 2 /* Error reading font header */ X#define EFORM_READ 3 /* Error reading font form */ X#define EOFF_READ 4 /* Error reading offset table */ X#define EMEMORY 5 /* Outa memory */ X X /* Globals */ XFONT *system_font; /* pointer to default system font */ Xint ferr; /* error # if any */ X X X/* X * Init aline & get system font pointer X */ Xinit() X{ X init_aline(); X system_font = fonts[SCREENFONT]; /* save it */ X} X X/* X * Switch to given Gdos font (pointer) X * Acknowledgements to X * Martin Minow X * minow%thundr.dec@decwrl.dec.com X * decvax!minow X * for discovering the info in the routine below. thanks! X */ Xswitch_font(fp) XFONT *fp; X{ X /* See aline.h for description of fields */ X X naline->V_CEL_HT = fp->form_height; X naline->V_CEL_WR = aline->VWRAP * fp->form_height; X naline->V_CEL_MY = (naline->V_Y_MAX / fp->form_height) - 1; X naline->V_CEL_MX = (naline->V_X_MAX / fp->max_cell_width) - 1; X naline->V_FNT_WR = fp->form_width; X naline->V_FNT_ST = fp->first_ade; X naline->V_FNT_ND = fp->last_ade; X naline->V_OFF_AD = fp->off_table; X naline->V_FNT_AD = fp->dat_table; X} X X/* X * Swap bytes of a word X */ Xstatic VOID Swap(p) Xunsigned char p[]; X{ X register unsigned char t; X X t = p[0]; X p[0] = p[1]; X p[1] = t; X X} X X X/* X * Swap all entries in Intel format to MC68K format WORDs X * X */ Xstatic VOID fix_font(font) Xregister FONT *font; X{ X X Swap(&font->font_id); X Swap(&font->size); X Swap(&font->first_ade); X Swap(&font->last_ade); X Swap(&font->top); X Swap(&font->ascent); X Swap(&font->half); X Swap(&font->descent); X Swap(&font->bottom); X Swap(&font->max_char_width); X Swap(&font->max_cell_width); X Swap(&font->left_offset); X Swap(&font->right_offset); X Swap(&font->thicken); X Swap(&font->ul_size); X Swap(&font->lighten); X Swap(&font->skew); X Swap(&font->flags); X Swap(&font->form_width); X Swap(&font->form_height); X X /* init only */ X font->h_table = (char *)NULL; X font->next_font = (FONT *)NULL; X} X X X X/* X * Load a font, return font pointer X * On error: ferr contains error # and pointer returned is NULL X */ XFONT *load_font(name) Xchar *name; X{ X register WORD i,j; X register FONT *font; X WORD *otable; X WORD ndata, nchar; X FILE *fp; X extern char *malloc(); X#ifdef ALCYON X extern FILE *fopenb(); X#else X extern FILE *fopen(); X#endif X X ferr = ENO_ERROR; X X /* open it up */ X#ifdef ALCYON X if((fp = fopenb(name, "r")) == (FILE *)NULL) X#else X if((fp = fopen(name, "rb")) == (FILE *)NULL) X#endif X { X ferr = EOPEN_FAIL; X return (FONT *)NULL; X } X X /* alloc font header */ X if((font = (FONT *)malloc(sizeof(FONT))) == (FONT *)NULL) X { X ferr = EMEMORY; X return (FONT *)NULL; X } X X if(fread(font, sizeof(FONT), 1, fp) != 1) X { X ferr = EHEAD_READ; X return (FONT *)NULL; X } X X /* Fix WORD fields and init */ X fix_font(font); X X /* alloc offset table */ X nchar = font->last_ade - font->first_ade + 1; /* # of chars in font */ X /* all we are doing here is if first_ade is > 30, we are makeing X * first_ade = 0, by adding 30 entries before first_ade and X * moving first_ade to 0, otherwise Bconout([2,5],X) will not X * work (they bomb) - Yet Another Undocumented 'Feature' :-) X */ X X /* add one for the last offset */ X i = (((nchar+30) < 256)? nchar+30 : nchar + (256 - nchar)) + 1; X if((font->off_table = (WORD *)malloc(i*2)) == (WORD *)NULL) X { X ferr = EMEMORY; X return (FONT *)NULL; X } X /* init it */ X for(j = 0; j < i; j++) X font->off_table[j] = 0; X X otable = ((nchar+30) < 256)? &font->off_table[30] : X &font->off_table[(256-nchar)]; X font->first_ade = 0; X X /* alloc font form table */ X ndata = font->form_width * font->form_height; /* bytes in font form */ X if((font->dat_table = malloc(ndata)) == (char *)NULL) X { X ferr = EMEMORY; X return (FONT *)NULL; X } X X /* read in offset table */ X if(fread(otable, 2, nchar, fp) != nchar) X { X ferr = EOFF_READ; X return (FONT *)NULL; X } X /* swap WORDs */ X for(i = 0; i <= nchar; i++) X Swap(&otable[i]); X X /* read in font form */ X if(fread(font->dat_table, 1, ndata, fp) != ndata) X { X ferr = EFORM_READ; X return (FONT *)NULL; X } X fclose(fp); X X /* and finally return the pointer to font header */ X return font; X} X X/* X * free up a loaded font X */ XVOID free_font(font) XFONT *font; X{ X free(font->dat_table); X free(font->off_table); X free(font); X} X X#ifdef TEST X/* X * load and show fonts X * X */ Xmain(argc, argv) XWORD argc; Xchar **argv; X{ X register WORD i, j; X register FONT *font_ptr; X extern FONT *load_font(); X X if(argc < 2) X { X fprintf(stderr,"Usage: switchf fontfiles ....\n"); X exit(1); X } X X init(); X while(--argc > 0) X { X if((font_ptr = load_font(*++argv)) == (FONT *)NULL) X fprintf(stderr,"Trouble Loading %s\n", *argv); X else X { X fprintf(stderr,"\n%s:\n", *argv); X switch_font(font_ptr); X for(j = 0, i = ' '; i < font_ptr->last_ade; i++) X { X putchar(i); X if((++j%8) == 0) X putchar('\n'); X else X putchar('\t'); X } X putchar('\n'); X free(font_ptr); X switch_font(system_font); X } X } X exit(0); X} X X#endif SHAR_EOF if test 5497 -ne "`wc -c 'switchf.c'`" then echo shar: error transmitting "'switchf.c'" '(should have been 5497 characters)' fi # End of shell archive exit 0 -- usenet: {decvax,cbosgd,sun}!cwruecmp!bammi jwahar r. bammi csnet: bammi@cwru.edu <---------Please note change of address arpa: bammi@cwru.edu <---------Please note change of address compuServe: 71515,155
bammi@cwruecmp.UUCP (06/12/87)
-------------cut here------TOS font switcher part 2 of 3------------------- #!/bin/sh # This is a shell archive, meaning: # 1. Remove everything above the #!/bin/sh line. # 2. Save the resulting text in a file. # 3. Execute the file with /bin/sh (not csh) to create the files: # aline.h # This archive created: Fri Jun 12 01:44:20 1987 # By: Jwahar R. Bammi(Case Western Reserve University) # Uucp: {decvax,sun,cbosgd}!cwruecmp!bammi # Csnet: bammi@cwru.edu # Arpa: bammi@cwru.edu # export PATH; PATH=/bin:$PATH echo shar: extracting "'aline.h'" '(26615 characters)' if test -f 'aline.h' then echo shar: over-writing existing file "'aline.h'" fi sed 's/^X//' << \SHAR_EOF > 'aline.h' X X /***********************************************\ X * * X * aline.h * X * Common include file for C interface * X * to low level Line A calls * X * * X * J.R. Bammi * X * decvax!cwruecmp!bammi * X * bammi%cwru.edu.CSNET * X * bammi@cwru.edu.ARPA * X * CIS: 71515,155 * X * * X \***********************************************/ X X#include "compiler.h" /* Compiler dependent defines */ X X X/*****************************************************************************\ X* * X* Defines * X* * X\*****************************************************************************/ X X/* X * Object colors (default pallette) X * X */ X#define WHITE 0 X#define BLACK 1 X#define RED 2 X#define GREEN 3 X#define BLUE 4 X#define CYAN 5 X#define YELLOW 6 X#define MAGENTA 7 X#define LWHITE 8 X#define LBLACK 9 X#define LRED 10 X#define LGREEN 11 X#define LBLUE 12 X#define LCYAN 13 X#define LYELLOW 14 X#define LMAGENTA 15 X X X/* X * Vdi writing modes X * X */ X#define MD_REPLACE 1 X#define MD_TRANS 2 X#define MD_XOR 3 X#define MD_ERASE 4 X X X/* X * Raster Op Codes X * X */ X#define ALL_WHITE 0 X#define S_AND_D 1 X#define S_AND_NOTD 2 X#define S_ONLY 3 X#define NOTS_AND_D 4 X#define D_ONLY 5 X#define S_XOR_D 6 X#define S_OR_D 7 X#define NOT_SORD 8 X#define NOT_SXORD 9 X#define D_INVERT 10 X#define NOT_D 11 X#define S_OR_NOTD 12 X#define NOTS_OR_D 13 X#define NOT_SANDD 14 X#define ALL_BLACK 15 X X/* X * Sprite formats X * X */ X#define SP_VDI 0 X#define SP_XOR 1 X X/* X * Line A Opcodes X * X */ X#define INIT 0 X#define PUTPIXEL 1 X#define GETPIXEL 2 X#define LINE 3 X#define HLINE 4 X#define RECTANGLE 5 X#define FPOLYGON 6 X#define BITBLT 7 X#define TEXTBLT 8 X#define SHOWMOUSE 9 X#define HIDEMOUSE 10 X#define TRANMOUSE 11 X#define USPRITE 12 X#define DSPRITE 13 X#define CPYRASTER 14 X#define FSEEDFILL 15 /* ROM TOS only */ X X X/*****************************************************************************\ X* * X* Types * X* * X\*****************************************************************************/ X X /* X * Global Variables at negative offsets from the Line A parameter X * block address returned by init. (I have no way of telling if this X * list is complete). X * X */ X/* Name Offset Type Description */ X/* --------------------------------------------------------------------------*/ X/* V_Y_MAX -4 W Max Y pixel value of the screen */ X/* V_STATUS -6 W Text Status byte */ X/* Bit Field Zero One */ X/* 0 cursor flash disabled enabled */ X/* 1 flash state off on */ X/* 2 cursor visible no yes */ X/* 3 end of line no-wrap wrap */ X/* 4 inverse video on off */ X/* 5 cursor saved false true */ X/* V_OFF_AD -10 L Font offset table address */ X/* V_X_MAX -12 W Max X pixel value */ X/* V_FNT_WR -14 W Width of Font Form in bytes (see type FONT below) */ X/* V_FNT_ST -16 W First font ASCII code (first_ade) */ X/* V_FNT_ND -18 W Last font ASCII code (last_ade ) */ X/* V_FNT_AD -22 L Font Form address */ X/* Mono Spaced, 8 pixels wide and byte aligned, any ht. */ X/* V_CUR_TIM -23 B Cursor countdown timer */ X/* V_CUR_CNT -24 B Cursor flash interval( in frames) */ X/* V_CUR_CY -26 W Y cursor position */ X/* V_CUR_CX -28 W X cursor position */ X/* V_CUR_OFF -30 W Offset from screen base to first cell (bytes) */ X/* V_CUR_AD -34 L Current cursor address */ X/* V_COL_FG -36 W Foreground color index */ X/* V_COL_BG -38 W Background color index */ X/* V_CEL_WR -40 W Offset to next vertical cell (bytes) */ X/* V_CEL_MY -42 W Max cells high - 1 */ X/* V_CEL_MX -44 W Max cells across - 1 */ X/* V_CEL_HT -46 W Cell height in pixels (font form's height) */ X/* --------------------------------------------------------------------------*/ X X/* X * Atari finally named these variables X * so here they are X * X */ Xtypedef struct { X WORD V_CEL_HT; /* *((WORD *)((char *)aline - (char *)46L)) */ X WORD V_CEL_MX; /* *((WORD *)((char *)aline - (char *)44L)) */ X WORD V_CEL_MY; /* *((WORD *)((char *)aline - (char *)42L)) */ X WORD V_CEL_WR; /* *((WORD *)((char *)aline - (char *)40L)) */ X WORD V_COL_BG; /* *((WORD *)((char *)aline - (char *)38L)) */ X WORD V_COL_FG; /* *((WORD *)((char *)aline - (char *)36L)) */ X char *V_CUR_AD; /* *((char **)((char **)aline - (char **)34L)) */ X WORD V_CUR_OFF; /* *((WORD *)((char *)aline - (char *)30L)) */ X WORD V_CUR_CX; /* *((WORD *)((char *)aline - (char *)28L)) */ X WORD V_CUR_CY; /* *((WORD *)((char *)aline - (char *)26L)) */ X WORD V_CUR_CNT; /* *((char *)((char *)aline - (char *)24L)) */ X/* char V_CUR_TIM; *((char *)((char *)aline - (char *)23L)) */ X char **V_FNT_AD; /* *((char **)((char **)aline - (char **)22L)) */ X WORD V_FNT_ND; /* *((WORD *)((char *)aline - (char *)18L)) */ X WORD V_FNT_ST; /* *((WORD *)((char *)aline - (char *)16L)) */ X WORD V_FNT_WR; /* *((WORD *)((char *)aline - (char *)14L)) */ X WORD V_X_MAX; /* *((WORD *)((char *)aline - (char *)12L)) */ X char **V_OFF_AD; /* *((char **)((char **)aline - (char **)10L)) */ X WORD V_STATUS; /* *((WORD *)((char *)aline - (char *) 6L)) */ X WORD V_Y_MAX; /* *((WORD *)((char *)aline - (char *) 4L)) */ X WORD xxdummy; /* *((WORD *)((char *)aline - (char *) 2L)) */ X} NLINEA; X X X /* A pointer to the type LINEA is returned by the Line A init call X * ($A000), in registers A0 and D0. X * This pointer is saved in the global variable 'aline'. X * X */ Xtypedef struct { X X/* Type Name Offset Function Comments */ X/* ------------------------------------------------------------------------- */ X WORD VPLANES; /* 0 # of Planes Also see CurrRez */ X WORD VWRAP; /* 2 Bytes / scan line " " " */ X /* VWRAP can be changed to implement special effect*/ X /* Doubling VWRAP will skip every other scan line */ X /* */ X /* */ X WORD *CONTRL; /* 4 Ptr to CONTRL Array Contrl gets set to this */ X WORD *INTIN; /* 8 Ptr to INTIN Array Intin gets set to this */ X WORD *PTSIN; /* 12 Ptr to PTSIN Array Ptsin gets set to this */ X WORD *INTOUT; /* 16 Ptr to INTOUT Array Intout gets set to this */ X WORD *PTSOUT; /* 20 Ptr to PTSOUT Array Ptsout gets set to this */ X /* CONTRL is the control array */ X /* INTIN is the array of input parameters */ X /* PTSIN is the array of input coordinates */ X /* Even entrys are X coordinate */ X /* Odd entrys are corresponding Y coodinates */ X /* INTOUT is the array of output parameters */ X /* PTSOUT is the array of output coordinates */ X /* organizes like PTSIN. */ X /* */ X WORD COLBIT0; /* 24 Plane 0 Color Value All Three Rez's */ X WORD COLBIT1; /* 26 Plane 1 Color Value Med and Low Rez only */ X WORD COLBIT2; /* 28 Plane 2 Color Value Low Rez only */ X WORD COLBIT3; /* 30 Plane 3 Color Value Low Rez Only */ X /* Foreground color COLBIT0 + 2*COLBIT1 + 4*COLBIT2*/ X /* + 8*COLBIT3 */ X /* */ X /* */ X WORD LSTLIN; /* 32 Always set to -1, Done for you in init_aline() */ X /* Does anyone know what it is supposed to be? */ X /* */ X WORD LNMASK; /* 34 Linemask used when drawing lines, same as Vdi's */ X /* line style */ X /* */ X WORD WMODE; /* 36 Writing mode */ X /* 0=Replace Mode-Replace all bits in Dest with src*/ X /* 1=Trans. Mode-Only additional bits in src set(OR*/ X /* 2=Xor Mode- Src XOR Dest */ X /* 3=Inverse Trans.- (NOT src) Or Dest */ X /* Values upto 16 are permitted */ X /* */ X WORD X1; /* 38 X1 coordinate used in various calls */ X /* */ X WORD Y1; /* 40 Y1 coordinate used in various calls */ X /* */ X WORD X2; /* 42 X2 coordinate used in various calls */ X /* */ X WORD Y2; /* 44 Y2 coordinate used in various calls */ X /* */ X /* */ X WORD *PATPTR; /* 46 Pointer to current fill pattern */ X /* Must be integral power of 2 (words) in length */ X WORD PATMSK; /* 50 I don't know why they call it a mask. It is in */ X /* reality the length in words of the current patt.*/ X WORD MFILL; /* 52 Multi Plane fill flag 1 == Current fill Pattern */ X /* is for Muti Plane. */ X /* */ X /* */ X WORD CLIP; /* 54 Clipping Flag 1 == TRUE */ X WORD XMINCL; /* 56 Min X of clipping window */ X WORD YMINCL; /* 58 Min Y of clipping window */ X WORD XMAXCL; /* 60 Max X of clipping window */ X WORD YMAXCL; /* 62 Max Y of clipping window */ X /* */ X /* */ X WORD XDDA; /* 64 Accumulator for Scaling, Must be set to 0x08000 */ X /* before each call to Text Blt. Done for you in */ X /* in aline_text() */ X WORD DDAINC; /* 66 Scaling factor - Fractional amount to scale char*/ X /* When scaling up = 256 *(Size-Textsize)/Textsize */ X /* When scaling down = 256*(Size)/Textsize */ X /* scaling down does not work */ X WORD SCALDIR; /* 68 Scaling direction 0 == down */ X WORD MONO; /* 70 Mono flag 0== current font is a propotional font*/ X /* Its Ok for Thickening to increase the width of */ X /* the current character. */ X /* 1 == current font is mono spaced, so thickening */ X /* may not increase the width of the current char */ X /* */ X WORD SOURCEX; /* 72 X coordinate of character in the font form */ X /* SOURCEX is caluclated from info in the font */ X /* header for the current font (see FONT type) */ X /* SOURCEX = off_table[char-first_ade] */ X /* SOURCEX is calculated for you in aline_text() */ X /* The pointer to a table of font header for the */ X /* internal fonts is returned in A2 on init (A000) */ X WORD SOURCEY; /* 74 Y coodinate of character in the font form */ X /* Typically set to 0 (top line of font form) */ X WORD DESTX; /* 76 X coordinate of character on screen */ X WORD DESTY; /* 78 Y coordinate of character on screen */ X WORD DELX; /* 80 Width of Character */ X /* Difference between two SOURCEX's */ X WORD DELY; /* 82 Height of Character */ X /* form_height field of FONT_HEAD of current font */ X WORD *FBASE; /* 84 Pointer to start of font form */ X WORD FWIDTH; /* 88 Width of the current font's form */ X /* */ X WORD STYLE; /* 90 Vector of style flags */ X /* Bit 0 = Thicken Flag */ X /* Bit 1 = Lighten Flag */ X /* Bit 2 = Skewing Flag */ X /* Bit 3 = Underline Flag (ignored) */ X /* Bit 4 = Outline Flag */ X /* */ X WORD LITEMASK; /* 92 Mask used for lightening text */ X /* The Mask is picked up from the font header */ X WORD SKEWMASK; /* 94 Mask used for skewing text */ X /* The Mask is picked up from the font header */ X WORD WEIGHT; /* 96 The number of bits by which to thicken text */ X /* The number is picked up from the font header */ X WORD ROFF; /* 98 Offset above baseline when skewing */ X /* Again picked up from the font header */ X /* */ X WORD LOFF; /* 100 Offset below character baseline when skewing */ X /* Again picked up from the font header */ X /* */ X WORD SCALE; /* 102 Scaling Flag 1 == true */ X /* */ X WORD CHUP; /* 104 Character rotation vector. */ X /* 0 = normal (0 degrees) */ X /* 1800 = 180 degrees */ X /* 2700 = 270 degrees */ X /* */ X WORD TEXTFG; /* 106 Text foreground color */ X /* */ X char *SCRTCHP; /* 108 Address of buffer required for creating special */ X /* text effects. The size of this buffer should be */ X /* 1K according the Internals. The Atari document */ X /* of course does not talk about such things :-) */ X /* */ X WORD SCRPT2; /* 112 The offset of the scaling buffer buffer in above*/ X /* buffer. Internals suggests an offset of 0x0040 */ X /* As usual the Atari document does'nt say a thing */ X /* */ X WORD TEXTBG; /* 114 Text background color (Ram Vdi only) */ X /* used for the BitBlt writing modes (4-19) only */ X /* */ X WORD COPYTRAN; /* 116 Copy raster form type flag (Ram vdi only) */ X /* 0 => Opaque type */ X /* n-plane source -> n-plane dest */ X /* BitBlt writing modes (4-19) */ X /* ~0 => Transparent type */ X /* 1-plane source -> n-plane dest */ X /* Vdi writing modes (1-3) */ X /* */ X WORD(*SEEDABORT)();/* 118 Pointer to function returning int, which is */ X /* called by the fill logic to allow the fill to */ X /* be aborted. If the routine returns FALSE (0) */ X /* the fill is not aborted. If it returns TRUE (~0)*/ X /* the fill is aborted */ X/* ------------------------------------------------------------------------- */ X X} LINEA; /* P H E W !!!!! */ X X X X /* A pointer to array of type FONT is returned by the Line A init call X * ($A000), in regsister A1. X * This pointer is saved in the global array variable 'fonts[]'. X * X */ X Xtypedef struct _font { X X/* Type Name Offset Function Comments */ X/* ------------------------------------------------------------------------- */ X WORD font_id; /* 0 Font face identifier 1 == system font */ X /* */ X WORD size; /* 2 Font size in points */ X /* */ X char name[32]; /* 4 Face name */ X /* */ X WORD first_ade; /* 36 Lowest ADE value in the face (lowest ASCII value */ X /* of displayable character). */ X /* */ X WORD last_ade; /* 38 Highest ADE value in the face (highest ASCII valu*/ X /* of displayable character). */ X /* */ X WORD top; /* 40 Distance of top line relative to baseline */ X /* */ X WORD ascent; /* 42 Distance of ascent line relative to baseline */ X /* */ X WORD half; /* 44 Distance of half line relative to baseline */ X /* */ X WORD descent; /* 46 Distance of decent line relative to baseline */ X /* */ X WORD bottom; /* 48 Distance of bottom line relative to baseline */ X /* All distances are measured in absolute values */ X /* rather than as offsets. They are always +ve */ X /* */ X WORD max_char_width; /* 50 Width of the widest character in font */ X /* */ X WORD max_cell_width; /* 52 Width of the widest cell character cell in face */ X /* */ X WORD left_offset; /* 54 Left Offset see Vdi appendix G */ X /* */ X WORD right_offset; /* 56 Right offset " " " */ X /* */ X WORD thicken; /* 58 Number of pixels by which to thicken characters */ X /* */ X WORD ul_size; /* 60 Width in pixels of the underline */ X /* */ X WORD lighten; /* 62 The mask used to lighten characters */ X /* */ X WORD skew; /* 64 The mask used to determine when to perform */ X /* additional rotation on the character to perform */ X /* skewing */ X /* */ X WORD flags; /* 66 Flags */ X /* bit 0 set if default system font */ X /* bit 1 set if horiz offset table should be used */ X /* bit 2 byte-swap flag (thanks to Intel idiots) */ X /* bit 3 set if mono spaced font */ X /* */ X char *h_table; /* 68 Pointer to horizontal offset table */ X /* */ X WORD *off_table; /* 72 Pointer to character offset table */ X /* */ X char *dat_table; /* 76 Pointer to font data */ X /* */ X WORD form_width; /* 80 Form width (#of bytes /scanline in font data) */ X /* */ X WORD form_height;/* 82 Form height (#of scanlines in font data) */ X /* */ X struct _font *next_font; /* 84 Pointer to next font in face */ X /* */ X/* ------------------------------------------------------------------------- */ X} FONT; X X X /* X * OP_TAB type required for Bit Blt parameter block. X * each entry defines the logic operation to apply for X * the 4 Fore/Back ground bit combinations X */ Xtypedef struct { X X/* Type Name Offset Function Comments */ X/* ------------------------------------------------------------------------- */ X char fg0bg0; /* 0 Logic op to employ when both FG and BG are 0 */ X char fg0bg1; /* 1 Logic op to employ when FG = 0 and BG = 1 */ X char fg1bg0; /* 2 Logic op to employ when FG = 1 and BG = 0 */ X char fg1bg1; /* 3 Logic op to employ when both FG and BG are 1 */ X/* ------------------------------------------------------------------------- */ X} OP_TAB; X X X/* X * Source and destination description blocks X */ Xtypedef struct { X WORD bl_xmin; /* Minimum x */ X WORD bl_ymin; /* Minimum y */ X char *bl_form; /* Word aligned memory form */ X WORD bl_nxwd; /* Offset to next word in line */ X WORD bl_nxln; /* Offset to next line in plane */ X WORD bl_nxpl; /* Offset to next plane */ X}SDDB; X X /* Offsets to next word in plane */ X#define HI_NXWD 2 X#define MED_NXWD 4 X#define LOW_NXWD 8 X X /* Scan line widths of the screen */ X#define HI_NXLN 80 X#define MED_NXLN 160 X#define LOW_NXLN 160 X X /* X * Offsets between planes - always the same due to X * the way the STs video memory is laid out X */ X#define NXPL 2 X X /* X * Bit Blt Parameter Block Type (for function $A007) X * X */ X Xtypedef struct { X X/* Type Name Offset Function Comments */ X/* ------------------------------------------------------------------------- */ X WORD bb_b_wd; /* width of block in pixels */ X WORD bb_b_ht; /* height of block in pixels */ X WORD bb_plane_ct; /* number of planes to blit */ X WORD bb_fg_col; /* foreground color */ X WORD bb_bg_col; /* back ground color */ X OP_TAB bb_op_tab; /* logic for fg x bg combination */ X SDDB bb_s; /* source info block */ X SDDB bb_d; /* destination info block */ X WORD *bb_p_addr; /* pattern buffer address */ X WORD bb_p_nxln; /* offset to next line in pattern */ X WORD bb_p_nxpl; /* offset to next plane in pattern */ X WORD bb_p_mask; /* pattern index mask */ X char bb_fill[24]; /* work space */ X/* ------------------------------------------------------------------------- */ X} BBPB; X X X/* X * Memory Form Definition Block X * X */ Xtypedef struct X{ X char *fd_addr; /* Addrerss of upper left corner of firs*/ X /* plane of raster area. If NULL then */ X /* MFDB is for a physical device */ X WORD fd_w; /* Form Width in Pixels */ X WORD fd_h; /* Form Height in Pixels */ X WORD fd_wdwidth; /* Form Width in words (fd_w/sizeof(int)*/ X WORD fd_stand; /* Form format 0= device spec 1=standard*/ X WORD fd_nplanes; /* Number of memory planes */ X WORD fd_r1; /* Reserved */ X WORD fd_r2; /* Reserved */ X WORD fd_r3; /* Reserved */ X} MFDB; X X X X X/* X * Sprite definition block X * X */ Xtypedef struct X{ X WORD sp_xhot; /* Offset to X hot spot */ X WORD sp_yhot; /* Offset to Y hot spot */ X WORD sp_format; /* Format SP_VDI or SP_XOR */ X WORD sp_bg; /* Background color */ X WORD sp_fg; /* Foregroud color */ X WORD sp_data[32]; /* Sprite data - */ X /* Alternating words of back/fore */ X /* ground data */ X /* Note that: */ X /* sprite save block is */ X /* 10+VPLANES*64 bytes long */ X X} SFORM; X X X X/*****************************************************************************\ X* * X* Global Variables * X* * X\*****************************************************************************/ X X /* X * Global Variables are defined in alglobal.c, extern every where else X * X */ X#ifndef ALGLOBAL X X /* global vars */ Xextern LINEA *aline; /* Pointer to line a parameter block returned by init*/ X Xextern NLINEA *naline; /* Pointer to line a parameters at negative offsets */ X Xextern FONT **fonts; /* Array of pointers to the three system font headers*/ X /* returned by init (in register A1) */ X Xextern WORD (**funcs)(); /* Array of pointers to the 15 line a functions */ X /* returned by init (in register A2) */ X /* only valid in ROM'ed TOS */ X X /* Functions */ Xextern VOID init_aline(); X#endif /* ALGLOBAL */ SHAR_EOF if test 26615 -ne "`wc -c 'aline.h'`" then echo shar: error transmitting "'aline.h'" '(should have been 26615 characters)' fi # End of shell archive exit 0 -- usenet: {decvax,cbosgd,sun}!cwruecmp!bammi jwahar r. bammi csnet: bammi@cwru.edu <---------Please note change of address arpa: bammi@cwru.edu <---------Please note change of address compuServe: 71515,155
bammi@cwruecmp.UUCP (06/12/87)
------------------cut here ------- TOS font switcher part 3 of 3 ---------- #!/bin/sh # This is a shell archive, meaning: # 1. Remove everything above the #!/bin/sh line. # 2. Save the resulting text in a file. # 3. Execute the file with /bin/sh (not csh) to create the files: # switcha.uue # This archive created: Fri Jun 12 01:44:21 1987 # By: Jwahar R. Bammi(Case Western Reserve University) # Uucp: {decvax,sun,cbosgd}!cwruecmp!bammi # Csnet: bammi@cwru.edu # Arpa: bammi@cwru.edu # export PATH; PATH=/bin:$PATH echo shar: extracting "'switcha.uue'" '(11661 characters)' if test -f 'switcha.uue' then echo shar: over-writing existing file "'switcha.uue'" fi sed 's/^X//' << \SHAR_EOF > 'switcha.uue' Xtable X !"#$%&'()*+,-./0123456789:;<=>? X@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ Xbegin 644 switchf.ttp XM8!H !S. " 'H "IO 0@;0 8T>T '"1M "Q"a XM@")(2A)G4"**)DHD64H:9OPBBDH29SP,&P!!9NP,&P!29N8,&P!'9N ,&P!6a XM9MH,&P ]9@I*$V<&(\L !ZF0ID@"2**)DHD64H:9OPBBDH29O(F &8R0ID@a XM"2+\ >R$7M ( 4&DB"0C(@ '(@%!IG%K0!9_A32B+*%!IG"K0!9OA"*O__a XM8.9"F2()T_D ![*(\$ ![*+DDK20 $+PTCR '5HO""\ DH#D@5-!/P&3a XMS2\)+PU"9S\\ $I.0=[\ Q*@V8N/SP !#\\ ).N0 %ZH^@$ZY 7^#]\a XM ( D)73KD !>J/H!.N0 %_A83YS.3KD 40WOP "C\ 3KD !:>/SP a XM3$Y!3E8 $ZY &.B!Y ?,B/H @ !\\3EY.=4Y6 B;@ (('D !\Xa XM,*D 4B)N @@>0 'T P* "P>D 4B!Y ?.#% 8B;@ (('D !\X,"@ a XM*DC @>D 4E- ('D !\X,4 !")N @@>0 'S@P* B2,"!Z0 T4T @>0 a XM'S@Q0 "(FX ""!Y ?.#%I % (")N @@>0 'S@Q:0 D !XB;@ (('D a XM !\X,6D )@ <(FX ""!Y ?."%I $@ )")N @@>0 'S@A:0!, !A.7DYUa XM3E;__"\'(&X "!X0(FX ""!N @0J0 !0D 0!R!N @10 !+A].7DYU3E;_a XM_"\-*FX ""\-3KD ( 6$](;0 "3KD ( 6$](;0 D3KD ( 6$](;0 Fa XM3KD ( 6$](;0 H3KD ( 6$](;0 J3KD ( 6$](;0 L3KD ( 6$](a XM;0 N3KD ( 6$](;0 P3KD ( 6$](;0 R3KD ( 6$](;0 T3KD ( a XM6$](;0 V3KD ( 6$](;0 X3KD ( 6$](;0 Z3KD ( 6$](;0 \3KD a XM ( 6$](;0 ^3KD ( 6$](;0! 3KD ( 6$](;0!"3KD ( 6$](;0!0a XM3KD ( 6$](;0!23KD ( 6$]"K0!$0JT 5"I?3EY.=4Y6_^A(UR# 0GD a XM !\V+SP !U>+RX "$ZY -6E!/+4#_]&8.< $SP 'S9"@& 7)P6#\ a XM3KD @,5$\J0" -9@1P!6#>+R[_]' !/P!P6#\ +PU.N0 #:C>_ ,#$ a XM 6<$< )@O"\-3KD (J6$\P+0 FD&T )%) /4#_^# N__@&0 >#$ ! &P*a XM,"[_^ 9 !Y@## \ 0"0;O_XT&[_^%) /@ P!^-(/P!.N0 " Q43RM $AGa XMAGP O$=L$C &2,#CB"! T>T 2$)04D9@ZC N__@&0 >#$ ! &P,("T 2 : a XM /& 0,#P! )!N__A(P..(T*T 2"U __Q";0 D,"T 4,'M %(]0/_Z/R[_a XM^DZY (#%1/*T 3&< _QXO+O_T/R[_^' "/P O+O_\3KD VHWOP #+!Na XM__AG!G $8 #^VGX OF[_^&X8, =(P..(T*[__"\ 3KD ( 6$]21V#B+R[_a XM]#\N__IP 3\ +RT 3$ZY -J-[\ RP;O_Z9P9P V _I0O+O_T3KD !(Da XM6$\@#4S7(,!.7DYU3E8 "!N @O* !,3KD @D6$\@;@ (+R@ 2$ZY (a XM)%A/+RX "$ZY ()%A/3EY.=4Y6__1(UR# #&X @ (;" O/ '6$O/ a XM'?1.N0 ")103W !/P!.N0 %IY43TZY !(E-N AO #<6*X "B!N HOa XM$$ZY #,%A/*D @#68>(&X "B\0+SP !V +SP !WT3KD B4WOP #&#"a XM(&X "B\0+SP !V4+SP !WT3KD B4WOP #"\-3KD $^6$]\ 'X@OFT a XM)FQ$+SP !W:/P<@>0 '>Q.D%Q/4D8P!DC @?P "$A 2D!F"B\\ =VG *a XM8 @O/ '=IP"3\ ('D !WL3I!<3U)'8+8O/ '=IP"C\ ('D !WL3I!<a XM3R\-3KD @D6$\O.0 'SQ.N0 3Y83V _R!"9TZY 6GE1/3-<@P$Y>a XM3G5.5@ 3KD !NX(_D !\F ?0"/Y ?*@ 'S(C^0 'RX !]$(#D a XM !] !( N(\ !\X3EY.=4Y6__!(USB +BX "%"'#(< ___@8@ A@R'a XM ( &0&+CP @ +P=.N0 &@Y83RI ($VQ_/____]G8$JY =O&82)DT@a XM"R/ =GB/ =FF F('D !V\L<UF"E&-4(<F;0 $8!(H>0 ';Q1C"!,a XM)F@ !"E- 0@!U& $ 2J ( ?0C2/ =O"A 48P@3$*0*4L !$S7.(!.a XM7DYU3E;_\$C7,,!^ " N A<@%. D#__BP O*X "&0&0H!@ #&F<PJ>0 a XM'9H@#6=R(!4N * 6=(( QG#B ' D#__M&4(!0N "I,*$V^AF,RGH8@a XM!PR !&0*(!4"0/_^*H!@%"J&( ;0C2/ =FB!Y =FB"'( U8@&!Da XMF<Q*AV<,( <"0/_^T(TJ0& $*FT !+OY =FF:.( QG!B/, =FE)Y =a XMHC Y =H@Q )E"E-Y =HF _U@O!DZY &>%A/+RX "$ZY ''%A/a XM*D!3>0 ':(@#4S7,,!.7DYU3E8 ' ,"X ""\ 3KD <<6$].7DYU3E;_a XM^$C7(( @+@ (68 J0$J59C1^ #!'T?P !VD2A!G(# '4D<P0-'\ =I! 0a XM2( _ ' "/P!P S\ 3DU<3V#43KD !;H )4 !3-<@@$Y>3G5.5@ 2&X a XM""\\ =VDZY (Z%!/3EY.=4Y6 !(;@ ,+RX "$ZY (Z%!/3EY.=4Y6a XM_^9(;O_F/SR "\N A.N0 #_S>_ *2&X #$AN_^9.N0 ".A03TAN_^9"a XM9R!N__A.D%Q/3EY.=4Y6_Y1(US" +6X #/_\(&[__"A06*[__! <2( ^ Q a XM "5G&DI'9P #9B\N @_!R!N @@: 23I!<3V#:<" ]0/_P</\]0/_L</\]a XM0/_N$!Q(@#X #$< +68.< $]0/_R$!Q(@#X 8 1";O_R#$< ,&8,<# ]0/_Pa XM$!Q(@#X #$< *F8F(&[__%2N__P]4/_L;!!P 3U __(P+O_L1$ ]0/_L$!Q(a XM@#X 8"I";O_L#$< ,&T@#$< .6X:,"[_[,'\ K01P1 # ]0/_L$!Q(@#X a XM8-H,1P N9DH0'$B /@ ,1P J9A0@;O_\5*[__#U0_^X0'$B /@!@*D)N_^X,a XM1P P;2 ,1P Y;AHP+O_NP?P "M!'!$ ,#U _^X0'$B /@!@V@Q' &QF)A <a XM2( ^ Q' &1G$@Q' &]G# Q' '5G!@Q' 'AF"# ' D#_WSX ( X$@ & Ma XM0/_T*D!P 3U _^@P!R!\ <UC(\ Y@ EA(L%A7R?_Z(%!.T& 4H@;O_\a XM5*[__#U0_^!*;O_@; XP+O_@1$ ]0/_@<"T:P' */P _+O_@+PU.N0 #'Y0a XM3RI 8 !$G */P @;O_\5*[__#\08.!P"&#N<!!@ZB!N__PM4/_@6*[__$JNa XM_^!L#B N_^!$@"U _^!P+1K < H_ "\N_^ O#4ZY ,ZM[\ I@K' */P @a XM;O_\+Q O#4ZY ,ZM[\ HJ0%BN__Q@ "D< A@WG 08-H@;O_\(! B* $a XM+4#_X"U!_^10KO_\+PT_+O_N+R[_Y"\N_^ _!TZY 6N-[\ !!@ /]20F[_a XMZ"!N__PM4/_X9@@M? ',[_^%BN__P@+O_X+4#_]"I 2AUG$DIN_^YM]B -a XMD*[_^+!N_^YOZE.-8"A";O_H(&[__%2N__PP$!K 8!8@;O_\+Q O+@ (3KD a XM CH4$]@ /]8("[_]"\ ,"[_[$C T9<@'Y"-/4#_ZFP$0F[_ZDIN__)F3$INa XM_^AG, QN ##_\&8H(&[_] P0 "UF'B\N @@;O_T4J[_]! 02( _ "!N @@a XM: 23I!<3S N_^I3;O_J2D!G"B\N @_+O_P8-X@;O_TL<UD("\N @@;O_Ta XM4J[_]! 02( _ "!N @@: 23I!<3V#82F[_\F< _+ P+O_J4V[_ZDI 9P#\a XMHB\N @_+O_P(&X ""!H !).D%Q/8-Q,US" 3EY.=4Y6_^I(UR# /BX #"I.a XM0B4P!P* #__X#N X\ &<B, <"@ __^ [@ .2$!(0$) 2$ @0-'\ =a XM,!L0/@9@SC\'0F<@7]'\ =,!L02A5G#"!N A2K@ ($)U@\" N A,UR# a XM3EY.=4Y6_^)(US" *FX "#XN !!)[O__0B1P # '+P O+@ ,3KD !P.4$\Ma XM0/_N9R1P # '+P O+@ ,3KD !Q44$\@0-'\ =,!D0+6[_[@ ,8,0@;@ ,a XMT?P !TP&1!*%&<$&MQ@^" -3-<P@$Y>3G5.5O_\+PTJ? '@Z[_ 'EYDa XM,DJ59PX@51 H !9(@ ) %F''#_/P O%2\N PO+@ (3KD YBWOP #BJ a XM8 98C6#&0H J7TY>3G5.5O_R2-<P@"IN @H;@ 0,"X #L'N P]0/_^$"P a XM%DB D !&<0+PP@; .3I!83QK 4V[__DJL AF#! L !9(@ ) )F($INa XM__YG3"\,(&P #DZ06$\^ Q __]G.AK'4V[__F#@/R[__B\-$"P %TB /P!.a XMN0 &/Q03SX ;P:?;O_^8!)*1V8( "P " 68 8 + 0 !8P+@ .P>X #)!Na XM__X"@ __^ [@ ,3-<P@$Y>3G5.5O_H2-<@X"IN ! ^+@ 4? %";O_^0F[_a XM_' !/4#_^B!N Q2K@ ,&A!P<AU __@0!4B #$ <F8 11\ '!W'4#_^"!Na XM P:$&<L$ 5(@ Q &)F $<0F[_^E*N P@;@ ,&A!G$! %2( ,0 !B9@ !a XM'D)N__I*1VP62F[__F80/P8O+@ (3KD !B87$\^ $I';$!*;O_^9@9*;O_\a XM9S0_/ &V+RX "$ZY 72%Q//@!M( Q& %G&C\'3KD !;\5$\_!B\N A.a XMN0 &)A<3SX 2D=M "V2F[__&<0< (_ $*G/P=.N0 &'!03R -9AYP&C\ a XM3KD @,5$\J0" -9@P_!TZY 6_%1/8'QP 1M !9*;O_Z9P8 +0 @ !9Pa XM "M 0J@"M A";0 ,*WP !&D XK? $<@ $AM' !<@#6!$$ 5(@ Q a XM '=F"%)N__Y@ /[F$ 5(@ Q &%F)E)N__Q@ /[4$ 5(@ Q "MG#A(N__A(a XM@1 %2("P068&? )@ /[.0H!,UR#@3EY.=4Y6__PO#2IN X@+@ (*H K0 (a XM*WP !"0 Y"+0 6,"X #$1 .T # QM@ $ #&P0.WQ__P ,*WP !!V !)@a XM""M\ 03@ 2( TJ7TY>3G5.5O_\+PTJ;@ *4VT #&P(0FT #'#_8 H@55*5a XM,"X "!" *E].7DYU3E;__"\-*FX "B!54I4P+@ ($( J7TY>3G5.5O_\+PTJa XM;@ (4FT #&\(0FT #'#_8 @@55*50D 0$"I?3EY.=4Y6__PO#2IN A*K0 (a XM9C 0+0 62( "0 "9A(_/ ( 3KD @,5$\K0 (9A(K? $_8 #BM\ 5a XM$ 28&X0+0 62( "0 "9C(0+0 72( _ $ZY 84%1/2D!G'KO\ =VF86a XM*WP !,4 XK? %;( $B M A@)BM\ 3% .*WP !2> !(0+0 72( _a XM $ZY 1:E1/2,#0K0 (*H K0 $0FT #"I?3EY.=4Y6__PO!W !/P!"IS\Na XM A.N0 &'!03RX #(#_____9@1"0& ., <"@ __^ _ ( 2$ N'TY>3G5.a XM5O_\+PTJ;@ (+PU.N0 $+983R\-(&T #DZ06$\J7TY>3G5.5O_X2-<@@#XNa XM @J;@ *+PU.N0 $+983R\-/P<@;0 23I!<3TS7((!.7DYU3E;__"\-*GP a XM !Y>68T@3;'\ >#F402I5G\"\53KD !(D6$]@Y"I?3EY.=4Y6__A(UR" a XM*FX "! M !9(@ ) %F!'#_8$ O#4ZY 2B%A//@ 0+0 72( _ $ZY 6a XM_%1/2JT "&<8$"T %DB D F8,+RT "$ZY ()%A/0BT %C '3-<@@$Y>a XM3G5.5O_X2-<@@"IN A";0 ,$"T %DB D $&9F(!60K0 $/@!O&C\'+RT a XM!! M !=(@#\ 3KD !IV4$^P1V8D2D=M'"!M A!Z ( L=5F#" M @J@"M a XM 1@!"M5 1"0& @,#D !U82, ,@ "!F"$)Y =6& & "T $ 6</],a XMUR" 3EY.=4Y6__A(UR" *FX "%)M QO "2+PU.N0 $HA83TI 9@ M@RYa XM 5L@ '>QF#B\\ =VDZY 2B%A/("T " : " )"M 0_ "\M 00a XM+0 72( _ $ZY 8_%!/1$ [0 ,#$ 69>,#D !U82, ,@ "!F"$)Ya XM =6& & "T $ 60FT #&!&,"T #%)M P@;0 $D, K2 $(%52E4) $! ^a XM ! M !9(@ ) "!G#@Q' UG /],#$< &F<*, =@#DIM QFP M @ %G#_a XM3-<@@$Y>3G5.5O_Z+PTJ;@ (#+D !6R =[&8.+SP !W:3KD !*(6$]"a XM;0 ,< $_ $AN__X0+0 72( _ $ZY 8_%!/#$#__V<T2D!G4 PN !K__F8,a XM$"T %DB D (&8\#"X #?_^9@P0+0 62( "0 @9K9"0! N__Y@*# Y =a XM6$C #( @9@A">0 '5A@#@ M ! %F & "T " 6</\J7TY>3G5.5O_Xa XM2-<@@#XN @J;@ *#$< "F8D$"T %DB D (&<8+PUP#3\ 3KD !2>7$\,a XM0/__9@1P_V P4VT #&PB+PU.N0 %C!83TI 9N@@+0 (!H ( D*T !%- a XM.T #"!54I4P!Q" 3-<@@$Y>3G5.5O_V2-<@@#XN @J;@ *'4?__@Q' IFa XM(! M !9(@ ) "!G%"\-< T_ $ZY 5$%Q/#$#__V=>0FT #! M !9(@ ) a XM !!F3B\-3KD !8P6$]*0&9 < $_ $AN__X0+0 72( _ $ZY :=E!/#$ a XM 68$, =@(# Y =6$C #( @9@A">0 '5A@!@ M ! %G#_3-<@@$Y>a XM3G5.5O_X2-<@@#XN @J;@ *#$< "F8D$"T %DB D (&<8+PUP#3\ 3KD a XM !6R7$\,0/__9@1P_V \0FT #"!M A!Z ( L=5F#B\-3KD !*(6$]*0&;>a XM(%52E3 '$( ,0 *9@XO#4ZY 2B%A/2D!FPC '3-<@@$Y>3G5.5O_\+PTJa XM;@ ($"T %DB D !&<*+PT@;0 .3I!83R!M 2QU6(,+PU.N0 $HA83V Ta XM< $_ " 5D*T !$C +P 0+0 72( _ $ZY 8<%!/#(#_____9@1P_V **U4 a XM!$)M Q"0"I?3EY.=4Y6 !.N0 $?8_+@ (3KD !;H5$].7DYU3E8 "\\a XM >7DZY <C%A/< $_ $ZY 6GE1/3EY.=4Y6 !.N0 %KA.7DYU3E8 a XM #\N AP3#\ 3D%83TY>3G5.5@ #&X !0 (;A(_+@ (3KD !JB5$\,0 !#a XM9RAP/S\ /RX "$ZY :^EA//RX "' ^/P!.05A/+P!.N0 &Y983V "0D!.a XM7DYU3E;__"\'0F<O+@ (<#P_ $Y!4$\N &TZ, =(P"X ;1)P1C\ , <_ $ZYa XM :^EA/8" ,A_____UM& R'_____VX0, <_ $ZY ;+E1/2, N "\'3KD a XM !N66$\N'TY>3G5.5O_\+P<_+@ (<$4_ $Y!6$\^ &P0, =(P"\ 3KD !N6a XM6$]@(C\N A.N0 &J)43SU AM#C\N @_!TZY :^EA/, <N'TY>3G5.a XM5O_\+P<_+@ (/RX "G)&/P%.05Q//@!*0&8H/RX "$ZY :HE1//4 "&T6a XM/RX "#\N I.N0 &OI83S N I@#C '2, O $ZY ;EEA/+A].7DYU3E8 a XM #\N A.N0 &J)43PQ $-F!' !8 )"0$Y>3G5.5@ /RX #C\N @O+@ *a XM<$(_ $Y!WOP "B\ 3KD !N66$].7DYU3E;__"\'/RX #"\N AP/3\ 3D%0a XM3RX ;3HP!TC +@!M$G!&/P P!S\ 3KD !KZ6$]@( R'_____6T8#(?_____a XM;A P!S\ 3KD !LN5$](P"X +P=.N0 &Y983RX?3EY.=4Y6__!(UR#@/RX a XM"$ZY :HE1/#$ 0V8 ,Q\ ! Y >STB /@ 0.0 'LY(@$C !H ![.a XM*D!3;@ .;0 CE-';&1P41/ >SD(Y >SR\\ >SG */P!.05Q//@!La XM"# '2,!@ "4< H_ ' "/P!P S\ 3DU<3W "$\ ![.$#D ![/2( ^ ! Ya XM >SDB 2, &@ 'LXJ0#!'T<UP"A" $!U(@#H #$4 &F8$?@!@%"!N I2a XMK@ *$(521@Q% IF /]N( T$@ 'LX3P 'LX3QP 'L\P!F D+RX "C Na XM Y(P"\ /RX "' _/P!.0=[\ PO $ZY ;EEA/3-<@X$Y>3G5.5O_X2-< a XMP"XN A*AVP((#S_____8#!*AV8((#G___\$8"12AR ' D#__BX +P=P2#\ a XM3D%<3RP 9]0@!M"'(\#___\$( 9,UP# 3EY.=4Y6 P+@ (2, O $ZY :a XM#EA/3EY.=4Y6 O+@ *,"X #DC +P _+@ (<$ _ $Y!WOP #"\ 3KD !N6a XM6$].7DYU3E;_^$C7(( ^+@ (, =60 Q )B'.5(,$#1_ '4 @4$[08"IPa XM4& F<$%@(G!#8!Y*1VT.*GD !ZF4T=M"$H=9OAP_V (2A5G^! 52(!,UR" a XM3EY.=4Y6__A(UR" /BX "$I';0XJ>0 'J931VT(2AUF^'#_8 I*%6?X,"X a XM"AJ 3-<@@$Y>3G5.5O_X2-<@@#XN @P!U9 #$ F)(Y4@P0-'\ =3"!0a XM3M J>0 'J80%4B L$=G#$H59@1PW6 F4HU@[" -D+D !ZF/P!.N0 %ZI4a XM3V .?D-@SGY!8,I^4&#&<-M,UR" 3EY.=4Y6 !*K@ (;! @+@ (1( SP a XM'5AP_V $("X "$Y>3G65RJ ( IF!$7I_\1(^0<! ?(DYU(F\ "& $0^\ a XM""(O 1J D2!)!%J D2"0?H !F 'Q*+P $:@Q*@6<"4H!*$6L(8 1*$6H"a XM1(!.=2)O A@!$/O @B+P $)!%!^@ &8 2DYU(F\ "& $0^\ ""01:@)$a XM@B(O 1!^@ &8 +" !9PI*+P $:@24@" "3G4B;P (8 1#[P ()!$B+P $a XM0?H !& $( %.=7#_2H)F!G 3M#BB+*"8P;CBF3VXI*2@F0"TH+CD&3T1H!.a XMT$Y6__PO#2IN A*%6<:+SP !W:$!5(@#\ ('D !WL3I!<3U*-8.(O/ a XM'=IP"C\ ('D !WL3I!<3RI?3EY.=7M.54Q,?0 $0 J\ $\ L2 %4 a XM KR %@ L6 &, N, &0 IL &4 L: &8 L: &< L: &\ JTa XM '( N> ', M. '4 JD '@ JX $0 D2,#$R,S0U-C<X.4%"0T1%a XM1@ &L@ !K, :T &X@ !N$ ;@ ')B %5S86=E.B!S=VETa XM8VAF(&9O;G1F:6QE<R N+BXN"@!4<F]U8FQE($QO861I;F<@)7,* HE<SH*a XM !"860@<&]I;G1E<B!I;B!F<F5E+@T* a XM !&D 1R"$ $:0 !'((0$ a XM 1I $<@C @ =P '=H !WT a XM a XM !9;W4@;75S="!C;VUP:6QE('=I=&@@=&AE("UFa XM(&]P=&EO;B!T;R!I;F-L=61E('!R:6YT9B@I(&9L;V%T:6YG('!O:6YT a XM !ZJ0T-!4#\_/S\_/S\_/S\_/S\_/S\_/S\_/S\_/P @ 3"(Ra XM!@XP" X("@P0!@@2#@X.$@X2#A 0$!!&# P,# P,# P,# P,# P,# P,#!X&a XM"A 0(!9$:" J'!H>$ P<!@8,"!@4!@82!@8,$@@:"@H."@P(!@X4!@0&! 8$a XM!@PR% P&"!0@0$H&) P&!@P,# H<)! :' 88'!(!A$90&$(<3 $.$D08"A0@a XM!BB2RB(4#AX0$"P(<"0*F X('@P(" X($"XV*B(*#BX2'DHP$"X.! @&)!00a XM;@0(!AQ"$$8:7" <$A! )!Q ("@*$ 8,$"X6%C@>#BH.%# 6%!8T-AX.&A(*a XM"A8&!BP&"@HV!@8F+"0<+"8<,CX*' @P(-0,#@H8!@8&!@8&!@8&!@8&!@84a XM! 0$! 1Z!!8$%@0(! 20 <!$ $* # #.' "* =@$ a X3 'H $*a X a Xend SHAR_EOF if test 11661 -ne "`wc -c 'switcha.uue'`" then echo shar: error transmitting "'switcha.uue'" '(should have been 11661 characters)' fi # End of shell archive exit 0 -- usenet: {decvax,cbosgd,sun}!cwruecmp!bammi jwahar r. bammi csnet: bammi@cwru.edu <---------Please note change of address arpa: bammi@cwru.edu <---------Please note change of address compuServe: 71515,155
bammi@cwruecmp.UUCP (06/12/87)
In article <2152@cwruecmp.UUCP> bammi@cwruecmp.UUCP (Jwahar R. Bammi) writes: >------------------cut here ------- TOS font switcher part 3 of 3 ---------- Sorry i forgot to mention that the font switcher has been tested with Mark Williams C (V2.0) and Alcyon C (V4.14) only. -- usenet: {decvax,cbosgd,sun}!cwruecmp!bammi jwahar r. bammi csnet: bammi@cwru.edu <---------Please note change of address arpa: bammi@cwru.edu <---------Please note change of address compuServe: 71515,155
pes@ux63.bath.ac.uk (Paul Smee) (06/17/87)
Haven't actually tried this yet, but one of your comments in the C code, about Lattice C, caught my eye as I was scanning thru it. Unlike Megamax (or at least, unlike how you say Megamax works, since I've never tried it) Lattice C does properly implement 'unsigned' as a type modifier. So you can have 'unsigned long', 'unsigned short', and 'unsigned char'...