URL
https://opencores.org/ocsvn/eco32/eco32/trunk
Subversion Repositories eco32
[/] [eco32/] [trunk/] [lcc/] [cpp/] [unix.c.ORIG] - Rev 4
Compare with Previous | Blame | View Log
#include <stdio.h>#include <stddef.h>#include <stdlib.h>#include <string.h>#include "cpp.h"extern int getopt(int, char *const *, const char *);extern char *optarg, rcsid[];extern int optind;int verbose;int Mflag; /* only print active include files */char *objname; /* "src.$O: " */int Cplusplus = 1;voidsetup(int argc, char **argv){int c, i;FILE *fd;char *fp, *dp;Tokenrow tr;extern void setup_kwtab(void);setup_kwtab();while ((c = getopt(argc, argv, "MNOVv+I:D:U:F:lg")) != -1)switch (c) {case 'N':for (i=0; i<NINCLUDE; i++)if (includelist[i].always==1)includelist[i].deleted = 1;break;case 'I':for (i=NINCLUDE-2; i>=0; i--) {if (includelist[i].file==NULL) {includelist[i].always = 1;includelist[i].file = optarg;break;}}if (i<0)error(FATAL, "Too many -I directives");break;case 'D':case 'U':setsource("<cmdarg>", NULL, optarg);maketokenrow(3, &tr);gettokens(&tr, 1);doadefine(&tr, c);unsetsource();break;case 'M':Mflag++;break;case 'v':fprintf(stderr, "%s %s\n", argv[0], rcsid);break;case 'V':verbose++;break;case '+':Cplusplus++;break;default:break;}dp = ".";fp = "<stdin>";fd = stdin;if (optind<argc) {if ((fp = strrchr(argv[optind], '/')) != NULL) {int len = fp - argv[optind];dp = (char*)newstring((uchar*)argv[optind], len+1, 0);dp[len] = '\0';}fp = (char*)newstring((uchar*)argv[optind], strlen(argv[optind]), 0);if ((fd = fopen(fp, "r")) == NULL)error(FATAL, "Can't open input file %s", fp);}if (optind+1<argc) {FILE *fdo = freopen(argv[optind+1], "w", stdout);if (fdo == NULL)error(FATAL, "Can't open output file %s", argv[optind+1]);}if(Mflag)setobjname(fp);includelist[NINCLUDE-1].always = 0;includelist[NINCLUDE-1].file = dp;setsource(fp, fd, NULL);}/* memmove is defined here because some vendors don't provide it atall and others do a terrible job (like calling malloc) */void *memmove(void *dp, const void *sp, size_t n){unsigned char *cdp, *csp;if (n<=0)return 0;cdp = dp;csp = (unsigned char *)sp;if (cdp < csp) {do {*cdp++ = *csp++;} while (--n);} else {cdp += n;csp += n;do {*--cdp = *--csp;} while (--n);}return 0;}
