home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The C Users' Group Library 1994 August
/
wc-cdrom-cusersgrouplibrary-1994-08.iso
/
vol_200
/
223_02
/
cc.def
< prev
next >
Wrap
Text File
|
1989-02-23
|
11KB
|
374 lines
/*
** Small-C Compiler Version 2.7 (modified by Fred A. Scacchitti 3/26/86)
**
** Copyright 1982, 1983 J. E. Hendrix
**
**
**
**
** Version 2.6 -> 2.7 Changes F. A. Scacchitti 3/25/86
**
**
** - New runtime library (RDRTL) for use with compiler and to support
** redirected output to a file. ( write > and append >> modes )
** Supports 8 - 1k file buffers.
** Misc. bugs cleared up.
**
** - New I/O library (CLIB) improved size/performance with new
** available features. (statics and ? : operator)
** Added getkbd(), putcrt() to get around redirection if desired.
** Misc. bugs cleared up inc. JEH's #60
**
** added nested include files, up to 6 deep
** - CC1.C int input2[6], inclevel
** - CC11.C main()
** - CC12.C doinclude()
** - CC2.C extern int input2[6], inclevel
** - CC21.C inline()
**
** fixed minor bug in doasm() undid JEH's 49
** - CC13.C doasm()
**
**
** Version 2.5 -> 2.6 Changes F. A. Scacchitti 3/21/86
**
**
** - added global multidimensional arrays eg. ara[5] [5], c[4] [3] [5]
** - CC.DEF Multidimmensional Array Macros
** added AINDEX to symbol table macros
** - CC1.C added *sarrptr, *arrptr, *arrcount, to track and
** control array usage
** - CC11.C main()
** - CC12.C declglb(), newfunc()
** - CC3.C ext int *sarrptr, *arrptr, arrcount
** - CC32.C hier14()
** - CC41.C swap2() eliminate bad optimization for MDA's
** - CC42.C getmd() the code generator
**
** - upgraded main() syntax to optimize compiler operation
** - CC1.C changed argvs[MAXARGS] to argvs
** - CC11.C main() installed standard syntax
**
**
** Version 2.4 -> 2.5 Changes F. A. Scacchitti 3/6/86
**
**
** - added arrays of pointers eg. *argv[], ***ptr[]
** - CC12.C declglb(), decloc(), doargs(), newfunc()
** - CC12.C removed paerror() (undid JEH's #53)
**
** - added octal and hex constants eg 0377, 0777, 0xff, 0X12ab
** - CC33.C number()
**
**
** Version 2.3 -> 2.4 Changes F. A. Scacchitti 3/4/86
**
**
** - added type FILE
** - stdio.h
** - restore original type at end of pointer queue for type char
** - CC1.C char explevel
** - CC12.C doargs()
** - CC3.C ext char explevel()
** - CC31.C expression(), hier12()
** - CC4.C ext char explevel()
** - CC41.C indirect(), putstk()
**
**
** Version 2.2 -> 2.3 Changes F. A. Scacchitti 2/24/86
**
**
** - added J. E. Hendrix's fixes
** - #61 Increase number and size of allowed macros
**
** - added mutiple levels of indirection eg. **argv, ***ptr
** - CC.DEF modified symbol table format (added LEVEL, ITYPE)
** - CC1.C char level, itype
** - CC12.C declglb(), decloc(), doargs(), newfunc()
** - CC13.C addlabel()
** - CC21.C addsym()
** - CC3.C ext char level, itype
** - CC32.C primary()
** - NOT 100% for lowest level for type char
**
**
** Version 2.1 -> 2.2 Changes F. A. Scacchitti 2/17/86
**
**
** - changed the following to better conform to CP/M environment
** to conform to my runtime environment
** - newline character back to CR (undid 45)
** - new ask()
** - new openin() & xgets() replaces openfile() & mustopen()
** - new doinclude()
** - allow listfp to display listings (undid 48)
**
** - added -i option to initialize to zero only when directed
** - CC1.C char iflag, CC11.C ask(), dumpzero()
** - CC4.C ext char iflag
**
** - added -n option to allow return to CCP if desired
** - CC1.C char nbflg, CC11.C ask()
** - CC4.C ext char nbflg, CC41.C trailer()
**
** - added TYPE statics to allow nonglobal static variables
** - CC1.C char m80flg, CC11.C ask(), parse()
** - CC4.C ext char m80flg, CC41.C entry()
**
** - added the conditional operator {exp1 ? exp2 : exp3}
** - CC31.C hier1(), ducon()
**
** - added J. E. Hendrix's newsletter fixes
** - #59 CC32.C fix optimize error
** - #64 CC31.C fix assignment error
**
**
** Version 2.0 -> 2.1 Change Record
** (primed numbers keyed to text)
** 01' fix bogus label generated by "continue" within "switch"
** (A. Macpherson)
** 02' fix problem of "peephole" missing end of staging buffer
** (E. Payne & A. Macpherson)
** 03' permit (*func)() syntax for functions as arguments
** (E. Payne)
** 04 change spelling of "heir" to "hier"
** 05 change spelling of "plunge" to "plnge"
** 06 always compile function "upper"
** 07' allow smaller NAMEMAX/NAMESIZE w/o truncating keywords
** (E. Payne)
** 08' disallow local declarations inside "switch" statements
** 09' make "outdec" handle the constant 32768 properly
** 10 change CCALLOC() to calloc()
** 11 change CCAVAIL() to avail()
** 12 change CCPOLL() to poll()
** 13' install (*func)() syntax
** 14' correct extraneous operand fetch in expressions
** like (i+5)();
** 15' make expressions like (&ia[...] - &ia[...]) scale
** properly to give the number of objects lying between
** 16' eliminate "DW 0" generated by "int (*func)();"
** 17' "fclose" should return NULL or ERR like UNIX
** 18' "fflush" should return NULL or EOF like UNIX
** 19' "fgets" should return the newline like UNIX
** 20' remove redundant loop from "inline" (E. Payne)
** 21 rename functions (e.g., or(), and(),
** ret(), call(), etc.) to avoid M80 reserved words
** 22 shorten CCDDPDPI and CCDDPDPC to 6 characters
** to satisfy L80 and LIB
** 23' use NEWLINE symbol for newline value
** 24' fix pstr() end-of-line problem
** (A. Macpherson & M. Grundy)
** 25' allocate space for local pointer declared as ptr[]
** (A. Macpherson)
** 26' make primary() recognize expression strings
** (A. Macpherson)
** 27 alter code generation for M80, L80
** 28' use double colon to declare entry points
** 29 employ standard functions isalpha(), isdigit(),
** and toupper()
** 30' drop bad optimizing case from peephole(),
** per Paul West (DDJ #81)
** 31' supply argument for avail() to abort on stack
** overflow
** 32' prevent preprocess() from taking newline as
** white space
** 33' always declare "_link" external in LINK mode
** to force loading of required library functions
** 34' restrict doubling of constants operating on
** integer addresses to add and subtract operators
** 35' use XRA A to pass an argument count of zero
** per Paul West (DDJ #81)
** 36' improve indirect function calls per Paul West (DDJ #81)
** 37' automatically declare undeclared functions to be
** external
** 38 drop support of sequential macro and global table
** searching
** 39' provide a default extension of .C to input file
** names, and assume an output .MAC file if stdout
** has not been redirected to a disk file
** 40 drop support of parameter prompting and drop
** CMD_LINE
** 41 drop external function declarations from
** cc1.c, cc2.c, cc3.c, and cc4.c
** 42' begin execution at main() rather than first function
** 43 drop tabs from the output
** 44 always compile calls to poll() in the compiler
** 47' accept #include "...." or <....> constructs
** 48' show even #asm input in the listing and prevent an
** extra ";" at the end of the output from commenting
** out the first EXT
** 49' correct double spacing in the output during
** #asm ... #endasm intervals
** 50' correct lingering problem with correctly performing
** operand fetches for indirect function calls
** 51' correct bad syntax in trailer() if LINK not defined
** 52' init locptr before first function so something like
** "int ia[x];" where x is not #defined won't hang
** 53' generate error on attempt to declare pointer arrays
** 54' generate "EXT _link" only if "main()" is defined
** 55' eliminate redundant code generated at the end of a
** compound statement
** 56 change system global names from leading _ to U to
** accommodate users with pre 3.44 MACRO-80 packages
**
*/
/*
** compile options
*/
#define NOCCARGC /* no argument counts */
#define SEPARATE /* compile separately */
#define OPTIMIZE /* compile output optimizer */
#define DYNAMIC /* allocate memory dynamically */
#define COL /* terminate labels with a colon */
/* #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 LEVEL 3 /* fas 2.3 */
#define ITYPE 4 /* fas 2.3 */
#define AINDEX 5 /* fas 2.6 */
#define OFFSET 6 /* fas 2.6 */
#define NAME 8 /* fas 2.6 */
#define OFFSIZE (NAME-OFFSET)
#define SYMAVG 15 /* fas 2.6 */
#define SYMMAX 17 /* fas 2.6 */
/*
** 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 3775 /* NUMLOCS*SYMAVG + NUMGLBS*SYMMAX fas 2.4 */
/*
** multidimensional array parameters fas 2.6
*/
#define MAXELMNTS 8
#define MAXARRAYS 10 + 1 /* 1 dummy */
#define ARRINDEX MAXELMNTS
#define MDASIZE MAXELMNTS * MAXARRAYS
/*
** 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" or "ITYPE"
** 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 /*37*/
/*
** "switch" table
*/
#define SWSIZ (2*BPW)
#define SWTABSZ (60*SWSIZ)
/*
** "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
/*
** output staging buffer size
*/
#define STAGESIZE 800
#define STAGELIMIT (STAGESIZE-1)
/*
** macro (define) pool
*/
#define MACNBR 130
#define MACNSIZE (MACNBR*(NAMESIZE+2))
#define MACNEND (macn+MACNSIZE)
#define MACQSIZE (MACNBR*7)
#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 */
#define STLABEL 14 /*55*/
/*
** command line
*/
#define MAXARGS 24