home *** CD-ROM | disk | FTP | other *** search
-
- /*
- ** Small-C Compiler Version 2.10
- **
- ** Copyright 1982 J. E. Hendrix
- **
- ** Modified version by F.A.Scacchitti 10/7/84
- **
- ** Upgrades are in chronological order. For more information regarding
- ** differences between this version and the one described in J.E.H.'s
- ** Small-C Manual, refer to CC.DOC.
- **
- ** 2.06
- ** -modified error pause to terminate on Control X
- ** CC22.C error()
- ** -increased all values to conform to 2.1
- ** CC.DEF
- ** -added autext function per J.E.H.'s 2.1 (37)
- ** CC32.C primary()
- ** CC4.C *ccptr, *symtab
- ** CC41.C trailer()
- ** 2.07
- ** -cleaned up and revised CC11.C to eliminate all that garbage
- ** mods include :
- ** -set M80 to always true (no -c option)
- ** CC11.C ask()
- ** -added -i option to command line to initialize
- ** storage areas to zeroes only when desired
- ** CC1.C int iflag;
- ** CC11.C ask()
- ** -redid initialization to default to DS instead
- ** DB or DW to speed up compile time
- ** CC11.C dumpzero()
- ** -removed FULL_C, C80, SMALL_VM, PDS, #defines
- ** CC.DEF and everyplace else encountered
- ** -fixed minor bug in auto-external function causing erroneos
- ** defining of external nothings
- **
- ** 2.08
- ** -more cleanup of old garbage got rid of all unnecessary #def's
- ** including CMD_LINE and NEW_CMD_LN
- ** CC.DEF, CC11.C and all other places encountered
- ** -added ## suffixes to all CALL calls to eliminate the CALL
- ** externals from STDIO.H
- ** -upgraded peephole() to accomodate new ptr values
- ** CC41.C, CC42.C
- ** -removed all unnecessary external defines from CC1.C, CC2.C
- ** CC3.C and CC4.C (left in as comments)
- **
- ** 2.09
- ** -defined HASH
- ** -defined DYNAMIC
- ** -changed CCALLOC to calloc and upgraded to conform to J.E.H's 2.1
- ** CC11.C
- ** -changed CCAVAIL to avail and upgraded to conform to J.E.H's 2.1
- ** CC21.C
- ** -modified ifline() to properly nest #ifdef's per J.E.H's 2.1
- ** CC22.C
- ** -modified trailer to autodeclare externals for both DYNAMIC and
- ** !DYNAMIC defines
- ** CC41.C
- ** -modified trailer to link to ULINK (runtime module) if source
- ** contain a main()
- ** CC41.C
- ** -modified runtime module - refer to those modules for specifics
- ** CLIB.DOC
- ** -seperated modules into standard C functions and
- ** genrerated clib.rel
- ** -modified compiler runtime module to minimize size, eliminate
- ** redirected input and unnecessary routines
- ** CCRTL.MAC
- ** -added permission for *(funct)() syntax as arguments
- ** CC12.C declglb(), doargs() J.E.H.'s (3)
- **
- ** 2.10
- ** -added -n option to compiler runstring to allow return to CP/M's
- ** CCP rather than return via warm boot
- ** CC1.C nbflg
- ** CC11.C ask()
- ** -added code generation for -n option
- ** CC4.C nbflg
- ** CC41.C trailer()
- ** -added static's to preprocessor to allow non-global definitions
- ** of static variables
- ** CC11.C parse()
- ** CC41.C trailer()
- ** -added or verified the following fixes to upgrade to J.E.H.'s 2.1
- ** #1 - CC13.C, CC21.C
- ** #3 - CC12.C
- ** #7 - CC22.C
- ** #8 - CC12.C
- ** #9 - CC22.C
- ** #10 -
- ** #11 -
- ** #16 - CC12.C
- ** #22 - C. A. L. L.
- ** #24 - CC33.C
- ** #25 - CC12.C
- ## #28 - CC41.C
- ** #30 - CC42.C
- ** #31 - CC21.C
- ** #35 - CC41.C
- ** #37 - CC.DEF, CC32.C, CC41.C
- ** #40 - CC12.C
- ** #41 - CC1.C, CC2.C, CC3.C, CC4.C
- **
- ** -added the conditional operator {e1 ? e2 : e3 }
- ** CC31.C heir1(), ducond()
- ** -changed stdiol.h to stdio.h -CC1.C, CC2.C, CC3.C, CC4.C
- ** -problems occur when using the (*funct)() syntax. Consider
- ** this feature not installed.
- **
- ** Stay tuned folk for the following:
- **
- ** >installed all fixes and pertinent upgrades per J.E.H.'s 2.1
- ** (13, 14, 15, 16, 26, 27, 34, 36, 38, )
- ** >added multi-dimensioned arrays
- ** >added arrays of pointers eg. *argv[], *num[i]
- ** >added multiple levels of indirection eg. **argv, ***ptr
- ** >added type longs
- ** >added floating point
- ** >added structures and unions
- ** >complete 'C' preprocessor external of compiler
- */
-
- /*
- ** Macro Definitions
- */
-
- /*
- ** compile options
- */
- #define M80 /* generate m80 compatable library calls */
- #define PHASE2 /* 2nd and later compiles */
- #define SEPARATE /* compile separately */
- #define OPTIMIZE /* compile output optimizer */
- #define NOCCARGC /* no calls to CCARGC */
- #define HASH /* use hash search for macros */
- #define DYNAMIC /* allocate memory dynamically */
- /* #define POLL /* poll for operator interruptions */
- #define COL /* terminate labels with a colon */
- #define TAB 9 /* put out tabs of this value */
- #define UPPER /* force symbols to upper case */
- #define LINK /* will use with linking loader */
-
- /*
- ** machine dependent parameters
- */
- #define BPW 2 /* bytes per word */
- #define LBPW 1 /* log2(BPW) */
- #define SBPC 1 /* stack bytes per character */
- #define ERRCODE 7 /* op sys return code */
-
- /*
- ** symbol table format
- */
- #define IDENT 0
- #define TYPE 1
- #define CLASS 2
- #define OFFSET 3
- #define NAME 5
- #define OFFSIZE (NAME-OFFSET)
- #define SYMAVG 10
- #define SYMMAX 14
-
- /*
- ** symbol table parameters
- */
- #define NUMLOCS 25
- #define STARTLOC symtab
- #define ENDLOC (symtab+(NUMLOCS*SYMAVG))
- #define NUMGLBS 200
- #define STARTGLB ENDLOC
- #define ENDGLB (ENDLOC+((NUMGLBS-1)*SYMMAX))
- #define SYMTBSZ 3050 /* NUMLOCS*SYMAVG + NUMGLBS*SYMMAX */
-
- /*
- ** System wide name size (for symbols)
- */
- #define NAMESIZE 9
- #define NAMEMAX 8
-
- /*
- ** possible entries for "IDENT"
- */
- #define LABEL 0
- #define VARIABLE 1
- #define ARRAY 2
- #define POINTER 3
- #define FUNCTION 4
-
- /*
- ** possible entries for "TYPE"
- ** low order 2 bits make type unique within length
- ** high order bits give length of object
- */
- /* LABEL 0 */
- #define CCHAR (1<<2)
- #define CINT (BPW<<2)
-
- /*
- ** possible entries for "CLASS"
- */
- /* LABEL 0 */
- #define STATIC 1
- #define AUTOMATIC 2
- #define EXTERNAL 3
- #define AUTOEXT 4
-
- /*
- ** "switch" table
- */
- #ifdef PHASE2
- #define SWSIZ (2*BPW)
- #define SWTABSZ (60*SWSIZ)
- #else /* PHASE2 */
- #define SWSIZ 4
- #define SWTABSZ 100
- #endif /* PHASE2 */
-
- /*
- ** "while" statement queue
- */
- #define WQTABSZ 30
- #define WQSIZ 3
- #define WQMAX (wq+WQTABSZ-WQSIZ)
-
- /*
- ** entry offsets in while queue
- */
- #define WQSP 0
- #define WQLOOP 1
- #define WQEXIT 2
-
- /*
- ** literal pool
- */
- #define LITABSZ 800
- #define LITMAX (LITABSZ-1)
-
- /*
- ** input line
- */
- #define LINEMAX 127
- #define LINESIZE 128
-
- /*
- ** command line
- */
- #define MAXARGS 32 /* maximum number of option arguments */
-
- /*
- ** output staging buffer size
- */
- #define STAGESIZE 800
- #define STAGELIMIT (STAGESIZE-1)
-
- /*
- ** macro (define) pool
- */
- #ifdef HASH
- #define MACNBR 100
- #define MACNSIZE 1100 /* 100*(NAMESIZE+2) */
- #define MACNEND (macn+MACNSIZE)
- #define MACQSIZE 500 /* 100*5 */
-
- #else /* HASH */
- #define MACQSIZE 1100
- #endif /* HASH */
-
- #define MACMAX (MACQSIZE-1)
-
- /*
- ** statement types
- */
- #define STIF 1
- #define STWHILE 2
- #define STRETURN 3
- #define STBREAK 4
- #define STCONT 5
- #define STASM 6
- #define STEXPR 7
- #define STDO 8 /* compile "do" logic */
- #define STFOR 9 /* compile "for" logic */
- #define STSWITCH 10 /* compile "switch/case/default" logic */
- #define STCASE 11
- #define STDEF 12
- #define STGOTO 13 /* compile "goto" logic */
-