add LCC - a better C-Compiler for WEGA
This commit is contained in:
parent
2b6598fb74
commit
541230dbb8
|
|
@ -0,0 +1,26 @@
|
|||
/*
|
||||
* Hardware bits
|
||||
*/
|
||||
#define DTR 00002 /* Data Terminal Ready (primary alarm) */
|
||||
#define R2S 00004 /* Request to Send (clear signal) */
|
||||
#define RCT 00010 /* Secondary Transmit Data (auxiliary alarm) */
|
||||
#define RCR 02000 /* Secondary Received Data (primary alarm status) */
|
||||
#define C2S 020000 /* Clear to Send (auxiliary alarm status) */
|
||||
#define RCHAR 063 /* The "reset character" */
|
||||
|
||||
/*
|
||||
* Function codes
|
||||
*/
|
||||
#define ALPRI 002000 /* Primary set, and test mask */
|
||||
#define ALAUX 020000 /* Auxiliary set, and test mask */
|
||||
#define ALTIME 000377 /* Timeout delay value mask */
|
||||
#define ALSET 001000 /* Set timer delay */
|
||||
#define ALRESET 004000 /* Restart watchdog timer */
|
||||
#define ALCLEAR 010000 /* Clear all alarms */
|
||||
|
||||
struct sgtty alsgtty;
|
||||
|
||||
#define alrmopn(name) (alfildes = open(name,2))
|
||||
#define alrmclo() close(alfildes)
|
||||
#define alrm(cmd) \
|
||||
(&alsgtty->sg_flags = cmd, stty(alfildes, &alsgtty), &alsgtty->sg_flags)
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
#define _U 01
|
||||
#define _L 02
|
||||
#define _N 04
|
||||
#define _S 010
|
||||
#define _P 020
|
||||
#define _C 040
|
||||
#define _B 0100
|
||||
#define _X 0200
|
||||
|
||||
extern char _ctype[];
|
||||
|
||||
#ifndef lint
|
||||
#define isalpha(c) ((_ctype+1)[c]&(_U|_L))
|
||||
#define isupper(c) ((_ctype+1)[c]&_U)
|
||||
#define islower(c) ((_ctype+1)[c]&_L)
|
||||
#define isdigit(c) ((_ctype+1)[c]&_N)
|
||||
#define isxdigit(c) ((_ctype+1)[c]&_X)
|
||||
#define isalnum(c) ((_ctype+1)[c]&(_U|_L|_N))
|
||||
#define isspace(c) ((_ctype+1)[c]&_S)
|
||||
#define ispunct(c) ((_ctype+1)[c]&_P)
|
||||
#define isprint(c) ((_ctype+1)[c]&(_P|_U|_L|_N|_B))
|
||||
#define isgraph(c) ((_ctype+1)[c]&(_P|_U|_L|_N))
|
||||
#define iscntrl(c) ((_ctype+1)[c]&_C)
|
||||
#define isascii(c) ((unsigned char)(c)<=0177)
|
||||
#define _toupper(c) ((c)-'a'+'A')
|
||||
#define _tolower(c) ((c)-'A'+'a')
|
||||
#define toascii(c) ((c)&0177)
|
||||
#endif
|
||||
|
|
@ -0,0 +1,33 @@
|
|||
#define NTREC 20
|
||||
#define MLEN 16
|
||||
#define MSIZ 4096
|
||||
|
||||
#define TS_TAPE 1
|
||||
#define TS_INODE 2
|
||||
#define TS_BITS 3
|
||||
#define TS_ADDR 4
|
||||
#define TS_END 5
|
||||
#define TS_CLRI 6
|
||||
#define MAGIC (int)60011
|
||||
#define CHECKSUM (int)84446
|
||||
struct spcl
|
||||
{
|
||||
int c_type;
|
||||
time_t c_date;
|
||||
time_t c_ddate;
|
||||
int c_volume;
|
||||
daddr_t c_tapea;
|
||||
ino_t c_inumber;
|
||||
int c_magic;
|
||||
int c_checksum;
|
||||
struct dinode c_dinode;
|
||||
int c_count;
|
||||
char c_addr[BSIZE];
|
||||
} spcl;
|
||||
|
||||
struct idates
|
||||
{
|
||||
char id_name[16];
|
||||
char id_incno;
|
||||
time_t id_ddate;
|
||||
};
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
/* Flag values accessible to open(2) and fcntl(2) */
|
||||
/* (The first three can only be set by open) */
|
||||
#define O_RDONLY 0
|
||||
#define O_WRONLY 1
|
||||
#define O_RDWR 2
|
||||
#define O_NDELAY 04 /* Non-blocking I/O */
|
||||
#define O_APPEND 010 /* append (writes guaranteed at the end) */
|
||||
|
||||
/* Flag values accessible only to open(2) */
|
||||
#define O_CREAT 00400 /* open with file create (uses third open arg)*/
|
||||
#define O_TRUNC 01000 /* open with truncation */
|
||||
#define O_EXCL 02000 /* exclusive open */
|
||||
|
||||
/* fcntl(2) requests */
|
||||
#define F_DUPFD 0 /* Duplicate fildes */
|
||||
#define F_GETFD 1 /* Get fildes flags */
|
||||
#define F_SETFD 2 /* Set fildes flags */
|
||||
#define F_GETFL 3 /* Get file flags */
|
||||
#define F_SETFL 4 /* Set file flags */
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
struct group { /* see getgrent(3) */
|
||||
char *gr_name;
|
||||
char *gr_passwd;
|
||||
int gr_gid;
|
||||
char **gr_mem;
|
||||
};
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
struct passwd {
|
||||
char *pw_name;
|
||||
char *pw_passwd;
|
||||
int pw_uid;
|
||||
int pw_gid;
|
||||
char *pw_age;
|
||||
char *pw_comment;
|
||||
char *pw_gecos;
|
||||
char *pw_dir;
|
||||
char *pw_shell;
|
||||
};
|
||||
|
||||
struct comment {
|
||||
char *c_dept;
|
||||
char *c_name;
|
||||
char *c_acct;
|
||||
char *c_bin;
|
||||
};
|
||||
|
|
@ -0,0 +1,417 @@
|
|||
#define CBRA 2
|
||||
#define CCHR 4
|
||||
#define CDOT 8
|
||||
#define CCL 12
|
||||
#define CDOL 20
|
||||
#define CCEOF 22
|
||||
#define CKET 24
|
||||
#define CBACK 36
|
||||
|
||||
#define STAR 01
|
||||
#define RNGE 03
|
||||
|
||||
#define NBRA 9
|
||||
|
||||
#define PLACE(c) ep[c >> 3] |= bittab[c & 07]
|
||||
#define ISTHERE(c) (ep[c >> 3] & bittab[c & 07])
|
||||
|
||||
char *braslist[NBRA];
|
||||
char *braelist[NBRA];
|
||||
int ebra;
|
||||
int sed, nbra;
|
||||
char *loc1, *loc2, *locs;
|
||||
int nodelim;
|
||||
|
||||
int circf;
|
||||
int low;
|
||||
int size;
|
||||
|
||||
char bittab[] = { 1, 2, 4, 8, 16, 32, 64, 128 };
|
||||
|
||||
char *
|
||||
compile(instring, ep, endbuf, seof)
|
||||
register char *ep;
|
||||
char *instring, *endbuf;
|
||||
{
|
||||
INIT /* Dependent declarations and initializations */
|
||||
register c;
|
||||
register eof = seof;
|
||||
char *lastep = instring;
|
||||
int cclcnt;
|
||||
char bracket[NBRA], *bracketp;
|
||||
int closed;
|
||||
char neg;
|
||||
int lc;
|
||||
int i, cflg;
|
||||
|
||||
lastep = 0;
|
||||
if((c = GETC()) == eof || c == '\n') {
|
||||
if(c == '\n') {
|
||||
UNGETC(c);
|
||||
nodelim = 1;
|
||||
}
|
||||
if(*ep == 0 && !sed)
|
||||
ERROR(41);
|
||||
RETURN(ep);
|
||||
}
|
||||
bracketp = bracket;
|
||||
circf = closed = nbra = ebra = 0;
|
||||
if(c == '^')
|
||||
circf++;
|
||||
else
|
||||
UNGETC(c);
|
||||
while(1) {
|
||||
if(ep >= endbuf)
|
||||
ERROR(50);
|
||||
c = GETC();
|
||||
if(c != '*' && ((c != '\\') || (PEEKC() != '{')))
|
||||
lastep = ep;
|
||||
if(c == eof) {
|
||||
*ep++ = CCEOF;
|
||||
RETURN(ep);
|
||||
}
|
||||
switch(c) {
|
||||
|
||||
case '.':
|
||||
*ep++ = CDOT;
|
||||
continue;
|
||||
|
||||
case '\n':
|
||||
if(!sed) {
|
||||
UNGETC(c);
|
||||
*ep++ = CCEOF;
|
||||
nodelim = 1;
|
||||
RETURN(ep);
|
||||
}
|
||||
else ERROR(36);
|
||||
case '*':
|
||||
if(lastep == 0 || *lastep == CBRA || *lastep == CKET)
|
||||
goto defchar;
|
||||
*lastep |= STAR;
|
||||
continue;
|
||||
|
||||
case '$':
|
||||
if(PEEKC() != eof && PEEKC() != '\n')
|
||||
goto defchar;
|
||||
*ep++ = CDOL;
|
||||
continue;
|
||||
|
||||
case '[':
|
||||
if(&ep[17] >= endbuf)
|
||||
ERROR(50);
|
||||
|
||||
*ep++ = CCL;
|
||||
lc = 0;
|
||||
for(i = 0; i < 16; i++)
|
||||
ep[i] = 0;
|
||||
|
||||
neg = 0;
|
||||
if((c = GETC()) == '^') {
|
||||
neg = 1;
|
||||
c = GETC();
|
||||
}
|
||||
|
||||
do {
|
||||
if(c == '\0' || c == '\n')
|
||||
ERROR(49);
|
||||
if(c == '-' && lc != 0) {
|
||||
if((c = GETC()) == ']') {
|
||||
PLACE('-');
|
||||
break;
|
||||
}
|
||||
while(lc < c) {
|
||||
PLACE(lc);
|
||||
lc++;
|
||||
}
|
||||
}
|
||||
lc = c;
|
||||
PLACE(c);
|
||||
} while((c = GETC()) != ']');
|
||||
if(neg) {
|
||||
for(cclcnt = 0; cclcnt < 16; cclcnt++)
|
||||
ep[cclcnt] ^= -1;
|
||||
ep[0] &= 0376;
|
||||
}
|
||||
|
||||
ep += 16;
|
||||
|
||||
continue;
|
||||
|
||||
case '\\':
|
||||
switch(c = GETC()) {
|
||||
|
||||
case '(':
|
||||
if(nbra >= NBRA)
|
||||
ERROR(43);
|
||||
*bracketp++ = nbra;
|
||||
*ep++ = CBRA;
|
||||
*ep++ = nbra++;
|
||||
continue;
|
||||
|
||||
case ')':
|
||||
if(bracketp <= bracket || ++ebra != nbra)
|
||||
ERROR(42);
|
||||
*ep++ = CKET;
|
||||
*ep++ = *--bracketp;
|
||||
closed++;
|
||||
continue;
|
||||
|
||||
case '{':
|
||||
if(lastep == (char *) 0)
|
||||
goto defchar;
|
||||
*lastep |= RNGE;
|
||||
cflg = 0;
|
||||
nlim:
|
||||
c = GETC();
|
||||
i = 0;
|
||||
do {
|
||||
if('0' <= c && c <= '9')
|
||||
i = 10 * i + c - '0';
|
||||
else
|
||||
ERROR(16);
|
||||
} while(((c = GETC()) != '\\') && (c != ','));
|
||||
if(i > 255)
|
||||
ERROR(11);
|
||||
*ep++ = i;
|
||||
if(c == ',') {
|
||||
if(cflg++)
|
||||
ERROR(44);
|
||||
if((c = GETC()) == '\\')
|
||||
*ep++ = 255;
|
||||
else {
|
||||
UNGETC(c);
|
||||
goto nlim;
|
||||
/* get 2'nd number */
|
||||
}
|
||||
}
|
||||
if(GETC() != '}')
|
||||
ERROR(45);
|
||||
if(!cflg) /* one number */
|
||||
*ep++ = i;
|
||||
else if((ep[-1] & 0377) < (ep[-2] & 0377))
|
||||
ERROR(46);
|
||||
continue;
|
||||
|
||||
case '\n':
|
||||
ERROR(36);
|
||||
|
||||
case 'n':
|
||||
c = '\n';
|
||||
goto defchar;
|
||||
|
||||
default:
|
||||
if(c >= '1' && c <= '9') {
|
||||
if((c -= '1') >= closed)
|
||||
ERROR(25);
|
||||
*ep++ = CBACK;
|
||||
*ep++ = c;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
/* Drop through to default to use \ to turn off special chars */
|
||||
|
||||
defchar:
|
||||
default:
|
||||
lastep = ep;
|
||||
*ep++ = CCHR;
|
||||
*ep++ = c;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
step(p1, p2)
|
||||
register char *p1, *p2;
|
||||
{
|
||||
register c;
|
||||
|
||||
if(circf) {
|
||||
loc1 = p1;
|
||||
return(advance(p1, p2));
|
||||
}
|
||||
/* fast check for first character */
|
||||
if(*p2 == CCHR) {
|
||||
c = p2[1];
|
||||
do {
|
||||
if(*p1 != c)
|
||||
continue;
|
||||
if(advance(p1, p2)) {
|
||||
loc1 = p1;
|
||||
return(1);
|
||||
}
|
||||
} while(*p1++);
|
||||
return(0);
|
||||
}
|
||||
/* regular algorithm */
|
||||
do {
|
||||
if(advance(p1, p2)) {
|
||||
loc1 = p1;
|
||||
return(1);
|
||||
}
|
||||
} while(*p1++);
|
||||
return(0);
|
||||
}
|
||||
|
||||
advance(lp, ep)
|
||||
register char *lp, *ep;
|
||||
{
|
||||
register char *curlp;
|
||||
char c;
|
||||
char *bbeg;
|
||||
int ct;
|
||||
|
||||
while(1) {
|
||||
switch(*ep++) {
|
||||
|
||||
case CCHR:
|
||||
if(*ep++ == *lp++)
|
||||
continue;
|
||||
return(0);
|
||||
|
||||
case CDOT:
|
||||
if(*lp++)
|
||||
continue;
|
||||
return(0);
|
||||
|
||||
case CDOL:
|
||||
if(*lp == 0)
|
||||
continue;
|
||||
return(0);
|
||||
|
||||
case CCEOF:
|
||||
loc2 = lp;
|
||||
return(1);
|
||||
|
||||
case CCL:
|
||||
c = *lp++ & 0177;
|
||||
if(ISTHERE(c)) {
|
||||
ep += 16;
|
||||
continue;
|
||||
}
|
||||
return(0);
|
||||
case CBRA:
|
||||
braslist[*ep++] = lp;
|
||||
continue;
|
||||
|
||||
case CKET:
|
||||
braelist[*ep++] = lp;
|
||||
continue;
|
||||
|
||||
case CCHR | RNGE:
|
||||
c = *ep++;
|
||||
getrnge(ep);
|
||||
while(low--)
|
||||
if(*lp++ != c)
|
||||
return(0);
|
||||
curlp = lp;
|
||||
while(size--)
|
||||
if(*lp++ != c)
|
||||
break;
|
||||
if(size < 0)
|
||||
lp++;
|
||||
ep += 2;
|
||||
goto star;
|
||||
|
||||
case CDOT | RNGE:
|
||||
getrnge(ep);
|
||||
while(low--)
|
||||
if(*lp++ == '\0')
|
||||
return(0);
|
||||
curlp = lp;
|
||||
while(size--)
|
||||
if(*lp++ == '\0')
|
||||
break;
|
||||
if(size < 0)
|
||||
lp++;
|
||||
ep += 2;
|
||||
goto star;
|
||||
|
||||
case CCL | RNGE:
|
||||
getrnge(ep + 16);
|
||||
while(low--) {
|
||||
c = *lp++ & 0177;
|
||||
if(!ISTHERE(c))
|
||||
return(0);
|
||||
}
|
||||
curlp = lp;
|
||||
while(size--) {
|
||||
c = *lp++ & 0177;
|
||||
if(!ISTHERE(c))
|
||||
break;
|
||||
}
|
||||
if(size < 0)
|
||||
lp++;
|
||||
ep += 18; /* 16 + 2 */
|
||||
goto star;
|
||||
|
||||
case CBACK:
|
||||
bbeg = braslist[*ep];
|
||||
ct = braelist[*ep++] - bbeg;
|
||||
|
||||
if(ecmp(bbeg, lp, ct)) {
|
||||
lp += ct;
|
||||
continue;
|
||||
}
|
||||
return(0);
|
||||
|
||||
case CBACK | STAR:
|
||||
bbeg = braslist[*ep];
|
||||
ct = braelist[*ep++] - bbeg;
|
||||
curlp = lp;
|
||||
while(ecmp(bbeg, lp, ct))
|
||||
lp += ct;
|
||||
|
||||
while(lp >= curlp) {
|
||||
if(advance(lp, ep)) return(1);
|
||||
lp -= ct;
|
||||
}
|
||||
return(0);
|
||||
|
||||
|
||||
case CDOT | STAR:
|
||||
curlp = lp;
|
||||
while(*lp++);
|
||||
goto star;
|
||||
|
||||
case CCHR | STAR:
|
||||
curlp = lp;
|
||||
while(*lp++ == *ep);
|
||||
ep++;
|
||||
goto star;
|
||||
|
||||
case CCL | STAR:
|
||||
curlp = lp;
|
||||
do {
|
||||
c = *lp++ & 0177;
|
||||
} while(ISTHERE(c));
|
||||
ep += 16;
|
||||
goto star;
|
||||
|
||||
star:
|
||||
do {
|
||||
if(--lp == locs)
|
||||
break;
|
||||
if(advance(lp, ep))
|
||||
return(1);
|
||||
} while(lp > curlp);
|
||||
return(0);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
getrnge(str)
|
||||
register char *str;
|
||||
{
|
||||
low = *str++ & 0377;
|
||||
size = (*str == 255)? 20000: (*str &0377) - low;
|
||||
}
|
||||
|
||||
ecmp(a, b, count)
|
||||
register char *a, *b;
|
||||
register count;
|
||||
{
|
||||
while(count--)
|
||||
if(*a++ != *b++)
|
||||
return(0);
|
||||
return(1);
|
||||
}
|
||||
|
|
@ -0,0 +1,80 @@
|
|||
/*
|
||||
* Structure for stty and gtty system calls.
|
||||
*/
|
||||
|
||||
struct sgttyb {
|
||||
char sg_ispeed; /* input speed */
|
||||
char sg_ospeed; /* output speed */
|
||||
char sg_erase; /* erase character */
|
||||
char sg_kill; /* kill character */
|
||||
int sg_flags; /* mode flags */
|
||||
};
|
||||
|
||||
/*
|
||||
* Modes
|
||||
*/
|
||||
#define HUPCL 01
|
||||
#define XTABS 02
|
||||
#define LCASE 04
|
||||
#define ECHO 010
|
||||
#define CRMOD 020
|
||||
#define RAW 040
|
||||
#define ODDP 0100
|
||||
#define EVENP 0200
|
||||
#define ANYP 0300
|
||||
#define NLDELAY 001400
|
||||
#define TBDELAY 002000
|
||||
#define CRDELAY 030000
|
||||
#define VTDELAY 040000
|
||||
#define BSDELAY 0100000
|
||||
#define ALLDELAY 0177400
|
||||
|
||||
/*
|
||||
* Delay algorithms
|
||||
*/
|
||||
#define CR0 0
|
||||
#define CR1 010000
|
||||
#define CR2 020000
|
||||
#define CR3 030000
|
||||
#define NL0 0
|
||||
#define NL1 000400
|
||||
#define NL2 001000
|
||||
#define NL3 001400
|
||||
#define TAB0 0
|
||||
#define TAB1 002000
|
||||
#define NOAL 004000
|
||||
#define FF0 0
|
||||
#define FF1 040000
|
||||
#define BS0 0
|
||||
#define BS1 0100000
|
||||
|
||||
/*
|
||||
* Speeds
|
||||
*/
|
||||
#define B0 0
|
||||
#define B50 1
|
||||
#define B75 2
|
||||
#define B110 3
|
||||
#define B134 4
|
||||
#define B150 5
|
||||
#define B200 6
|
||||
#define B300 7
|
||||
#define B600 8
|
||||
#define B1200 9
|
||||
#define B1800 10
|
||||
#define B2400 11
|
||||
#define B4800 12
|
||||
#define B9600 13
|
||||
#define EXTA 14
|
||||
#define EXTB 15
|
||||
|
||||
/*
|
||||
* ioctl arguments
|
||||
*/
|
||||
#define FIOCLEX (('f'<<8)|1)
|
||||
#define FIONCLEX (('f'<<8)|2)
|
||||
#define TIOCHPCL (('t'<<8)|2)
|
||||
#define TIOCGETP (('t'<<8)|8)
|
||||
#define TIOCSETP (('t'<<8)|9)
|
||||
#define TIOCEXCL (('t'<<8)|13)
|
||||
#define TIOCNXCL (('t'<<8)|14)
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
/*
|
||||
* Structure of a symbol table entry
|
||||
*/
|
||||
|
||||
struct symbol {
|
||||
char sy_name[8];
|
||||
char sy_type;
|
||||
int sy_value;
|
||||
};
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
struct tm { /* see ctime(3) */
|
||||
int tm_sec;
|
||||
int tm_min;
|
||||
int tm_hour;
|
||||
int tm_mday;
|
||||
int tm_mon;
|
||||
int tm_year;
|
||||
int tm_wday;
|
||||
int tm_yday;
|
||||
int tm_isdst;
|
||||
};
|
||||
extern struct tm *gmtime(), *localtime();
|
||||
extern char *ctime(), *asctime();
|
||||
extern void tzset();
|
||||
extern long timezone;
|
||||
extern int daylight;
|
||||
extern char *tzname[];
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
struct ustat {
|
||||
daddr_t f_tfree; /* total free */
|
||||
ino_t f_tinode; /* total inodes free */
|
||||
char f_fname[6]; /* filsys name */
|
||||
char f_fpack[6]; /* filsys pack name */
|
||||
};
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
/* <sys/types.h> must be included. */
|
||||
|
||||
#define UTMP_FILE "/etc/utmp"
|
||||
#define WTMP_FILE "/usr/adm/wtmp"
|
||||
#define ut_name ut_user
|
||||
|
||||
struct utmp
|
||||
{
|
||||
char ut_line[8] ; /* device name (console, lnxx) */
|
||||
char ut_user[8] ; /* User login name */
|
||||
long ut_time ; /* time entry was made */
|
||||
} ;
|
||||
Loading…
Reference in New Issue