diff options
Diffstat (limited to 'c/src/lib/libbsp/i960/rxgen960/startup/frmstr.c')
-rw-r--r-- | c/src/lib/libbsp/i960/rxgen960/startup/frmstr.c | 619 |
1 files changed, 0 insertions, 619 deletions
diff --git a/c/src/lib/libbsp/i960/rxgen960/startup/frmstr.c b/c/src/lib/libbsp/i960/rxgen960/startup/frmstr.c deleted file mode 100644 index 682890e57b..0000000000 --- a/c/src/lib/libbsp/i960/rxgen960/startup/frmstr.c +++ /dev/null @@ -1,619 +0,0 @@ -/*-------------------------------------*/ -/* frmstr.c */ -/* Last change : 14.10.94 */ -/*-------------------------------------*/ -/* - * $Id$ - */ - -#include "frmstr.h" -/*-------------------------------------*/ - /* How to treat the rest. - */ -#define FOR_CONSOLE 1 -#define DO_LONG 1 - - /* To Store a byte. - */ -#ifdef _STORE_BYTE -# define STORE_BYTE(a, b) (store_byte(a, b)) - long store_byte(void); -#else -# define STORE_BYTE(a, b) (* (a) = (b)) -#endif - /* Some decalrations. - */ -static void geta(ArgType *, int); -static const char * gnum(const char *, ArgType * ); -static char * i_compute(unsigned val, int, char *); -#ifdef DO_LONG -static char * l_compute(long, int, char *); -#endif -static ArgType * nextarg; - /* And macros. - */ -#define wsize(par) ((sizeof par) / sizeof(ArgType)) -#define signbit(par) (1L<<(sizeof par * 8 - 1)) - -int format_string(const char * fmt, ArgType * args, char * buffer) -{ - char * s; -# ifdef DO_LONG - long l; - int lflag; -# else -# define lflag 0 -# endif -# ifdef DO_FLOAT - double dbl; -# endif - ArgType inte; - ArgType_U uint; - ArgType width, ndigit; - int i, j, c, rjust, ndfnd, zfill; - const char * oldfmt; - char * s1, buf[64]; - - nextarg = args; - while (c = * fmt ++) { - if (c != '%') { -# ifdef FOR_CONSOLE - if (c == '\n') STORE_BYTE(buffer ++, '\r'); -# endif - STORE_BYTE(buffer ++, c); - continue; - } -# ifdef DO_LONG - lflag = 0 ; -# endif - j = 10 ; - rjust = 0; - if (* fmt == '-') { - fmt ++; - rjust ++; - } - zfill = ' '; - if (* fmt == '0') { - fmt ++; - zfill = '0'; - } - fmt = gnum(fmt, & width); - ndigit = 0; ndfnd = 0; - if (* fmt == '.') { - fmt ++; oldfmt = fmt; - fmt = gnum(fmt, & ndigit); - ndfnd = (int)(fmt != oldfmt); - } - s = s1 = buf; -# ifdef DO_LONG - if (* fmt == 'l' || * fmt == 'L') { - fmt ++; lflag ++; - } -# endif - switch (c = * fmt ++) { - default: -# ifdef FOR_CONSOLE - if (c == '\n') STORE_BYTE(buffer ++, '\r'); -# endif - STORE_BYTE(buffer ++, c); - continue; - case 's': - geta((ArgType *) & s1, wsize(s1)); - s = s1; - do { - if (s == 0) break; - if (* s == 0) - break; - s ++; - } while (-- ndigit); - break; - case 'b': - j = 2; - case 'u': - getu: - - if (! lflag) { - geta(& inte, wsize(inte)); - goto i_unsignd; - } -# ifdef DO_LONG - case 'U': - getlu: - - geta((ArgType *) & l, wsize(l)); - goto l_unsignd; - case 'B': - j = 2 ; - goto getlu; - case 'X': - j = 16; - goto getlu; - case 'O': - j = 8; - goto getlu ; - case 'D': - l_signed: - - geta((ArgType *) & l, wsize(l)); - if (l < 0) { - STORE_BYTE(s ++, '-'); - l = -l; - } - goto do_l; - - l_unsignd: - - if (l && ndigit) - STORE_BYTE(s ++, '0'); - - do_l: - - s = l_compute(l, j, s); - break; -# endif - case 'x': - j = 16; - goto getu; - case 'o': - j = 8; - goto getu; - case 'd': - if (lflag) goto l_signed; - geta(& inte, wsize(inte)); - if (inte < 0) { - STORE_BYTE(s ++, '-'); - inte = - inte; - } - goto do_i; - - i_unsignd: - - if (inte && ndigit) - STORE_BYTE(s ++, '0'); - - do_i: - - s = i_compute(inte, j, s); - break; - case 'c': - geta ((ArgType *) & uint, wsize(uint)); - for (i = sizeof uint - 1; i >= 0; i --) { - if (STORE_BYTE(s, uint % 256)) s ++; - uint /= 256 ; - } - break; -# ifdef DO_FLOAT - case 'e': - geta((ArgType *) & dbl, wsize(dbl)); - s = _pscien(dbl, s, ndigit, ndfnd); - break; - case 'f': - geta((ArgType *) &dbl,wsize(dbl)); - s = _pfloat(dbl, s, ndigit, ndfnd); - break; -# endif - case 'r': - geta((ArgType *) & nextarg, wsize(nextarg)); - geta((ArgType *) & oldfmt, wsize(fmt)); - fmt = oldfmt; - continue; - } - j = s - s1; - if ((c = width - j) > 0) { - if (rjust == 0) { - do STORE_BYTE(buffer ++, zfill); - while (-- c); - } - } - while (-- j >= 0) - STORE_BYTE(buffer ++, * s1 ++); - while (-- c >= 0) - STORE_BYTE(buffer ++, zfill); - } - STORE_BYTE(buffer, 0); - return 0; -} -static void geta(ArgType * p, int size) -{ - if ((ArgType *) & p - (ArgType *) & size > 0) { - p += size; - while (size --) { - * -- p = * nextarg --; - } - } - else { - while (size --) { - * p ++ = * nextarg ++ ; - } - } -} -static const char * gnum(const char * f, ArgType * ip) -{ - ArgType i; - int c; - - if (* f == '*') { - geta(ip, wsize(i)) ; - f ++; - } - else { - i = 0; - while ((c = * f - '0') >= 0 && c <= 9) { - i = i * 10 + c; - f ++; - } - * ip = i; - } - return f; -} -static char * i_compute(unsigned int val, int base, char * s) -{ - int c; - - c = val % base; - val /= base; - if (val) - s = i_compute(val, base, s); - STORE_BYTE(s ++, c>9 ? c-10+'a' : c+'0'); - return s; -} -#ifdef DO_LONG -static char *l_compute(long l1,int d, char * s) -{ - int c; - long l2; - - if (l1 < 0) { - c = l1 & 1; - l2 = ((l1>>1) & ~signbit(l1)); - l1 = l2 / (d>>1); - c += (l2%(d>>1))<<1; - } - else { - c = l1 % d; - l1 = l1 / d; - } - if (l1) - s = l_compute(l1, d, s); - STORE_BYTE(s ++, c>9 ? c-10+'A' : c+'0'); - return s; -} -#endif -#ifdef _STORE_BYTE -long store_byte(char * cp, long c) -{ - long shift, reg, * ptr; - - shift = ((long) cp & 3) * 8; - ptr = (long *) ((long) cp & ~3); - reg = * ptr; - reg &= ~(0xff << shift); - reg |= c << shift; - * ptr = reg; - - return c; -} -#endif - -#define SPC 01 -#define STP 02 - -#define NULL 0 -#define EOF 0 -#define SHORT 0 -#define REGULAR 1 -#define LONG 2 -#define INT 0 -#define FLOAT 1 - -static int new_c(void); -static void unnew_c(char); -static int _innum(int ** ptr, int type, int len, int size, int * eofptr); -static int _instr(char * ptr, int type, int len, int * eofptr); -static const char * _getccl(const char *); -static int vme_isupper(char); -static int vme_tolower(char); -static int vme_isdigit(char); - -static char _sctab[128] = { - 0,0,0,0,0,0,0,0, - 0,SPC,SPC,0,0,0,0,0, - 0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0, - SPC,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0, -}; -static const char * line; -static char * linep; - -int unformat_string(const char * fmt, int ** argp, const char * buffer) -{ - int ch; - int nmatch, len, ch1; - int ** ptr, fileended, size; - - line = buffer; - linep = (char*)line; - - nmatch = 0; - fileended = 0; - for (;;) switch (ch = * fmt ++) { - case '\0': - return (nmatch); - case '%': - if ((ch = * fmt ++) == '%') - goto def; - ptr = 0; - if (ch != '*') - ptr = argp ++; - else - ch = * fmt ++; - len = 0; - size = REGULAR; - while (vme_isdigit(ch)) { - len = len*10 + ch - '0'; - ch = * fmt ++; - } - if (len == 0) - len = 30000; - if (ch == 'l') { - ch = * fmt ++; - size = LONG; - } - else if (ch == 'h') { - size = SHORT; - ch = * fmt ++; - } - else if (ch=='[') - fmt = _getccl(fmt); - if (vme_isupper(ch)) { - ch = vme_tolower(ch); - size = LONG; - } - if (ch == '\0') - return -1; - if (_innum(ptr, ch, len, size, & fileended) && ptr) - nmatch ++; - if (fileended) - return nmatch? nmatch: -1; - break; - case ' ': - case '\n': - case '\t': - while ((ch1 = new_c())==' ' || ch1=='\t' || ch1=='\n') - ; - if (ch1 != EOF) - unnew_c(ch1); - break; - default: - - def: - - ch1 = new_c(); - if (ch1 != ch) { - if (ch1==EOF) - return -1 ; - unnew_c(ch1); - return nmatch; - } - } -} -static int new_c() -{ - char c; - - if (linep) { - c = * linep ++; - return c; - } - else { - return 0; - } -} -static void unnew_c(char ch) -{ - if (linep > line) - * (-- linep) = ch; -} -static int _innum(int ** ptr, int type, int len, int size, int * eofptr) -{ -# ifdef DO_FLOAT - extern double atof(); -# endif - char * np; - char numbuf[64]; - int c, base; - int expseen, scale, negflg, c1, ndigit; - long lcval; - - if (type=='c' || type=='s' || type=='[') - return _instr(ptr? * (char **) ptr: (char *) NULL, type, len, eofptr); - lcval = 0; - ndigit = 0; - scale = INT; - if (type=='e'||type=='f') - scale = FLOAT; - base = 10; - if (type=='o') - base = 8; - else if (type=='x') - base = 16; - np = numbuf; - expseen = 0; - negflg = 0; - while ((c = new_c())==' ' || c=='\t' || c=='\n'); - if (c=='-') { - negflg ++; - * np ++ = c; - c = new_c(); - len --; - } - else if (c=='+') { - len --; - c = new_c(); - } - for ( ; -- len >= 0; * np ++ = c, c = new_c()) { - if (vme_isdigit(c) - || base==16 && ('a'<=c && c<='f' || 'A'<=c && c<='F')) { - ndigit ++; - if (base==8) - lcval <<=3; - else if (base==10) - lcval = ((lcval<<2) + lcval)<<1; - else - lcval <<= 4; - c1 = c; - if ('0'<=c && c<='9') - c -= '0'; - else if ('a'<=c && c<='f') - c -= 'a'-10; - else - c -= 'A'-10; - lcval += c; - c = c1; - continue; - } - else if (c=='.') { - if (base!=10 || scale==INT) - break; - ndigit ++; - continue; - } - else if ((c=='e'||c=='E') && expseen==0) { - if (base!=10 || scale==INT || ndigit==0) - break; - expseen ++; - * np ++ = c; - c = new_c(); - if (c!='+'&&c!='-'&&('0'>c||c>'9')) - break; - } - else - break; - } - if (negflg) - lcval = -lcval; - if (c != EOF) { - unnew_c(c); - * eofptr = 0; - } - else - * eofptr = 1; - if (ptr==NULL || np==numbuf) - return 0; - * np ++ = 0; - switch ((scale<<4) | size) { -# ifdef DO_FLOAT - - case (FLOAT<<4) | SHORT: - case (FLOAT<<4) | REGULAR: - ** (float **) ptr = atof(numbuf); - break; - - case (FLOAT<<4) | LONG: - ** (double **) ptr = atof(numbuf); - break; -# endif - case (INT<<4) | SHORT: - ** (short **) ptr = lcval; - break; - - case (INT<<4) | REGULAR: - ** (int **) ptr = lcval; - break; - - case (INT<<4) | LONG: - ** (long **) ptr = lcval; - break; - } - return 1; -} -static int _instr(char * ptr, int type, int len, int * eofptr) -{ - int ch; - char * optr; - int ignstp; - - * eofptr = 0; - optr = ptr; - if (type=='c' && len==30000) - len = 1; - ignstp = 0; - if (type=='s') - ignstp = SPC; - while (_sctab[ch = new_c()] & ignstp) - if (ch==EOF) - break; - ignstp = SPC; - if (type=='c') - ignstp = 0; - else if (type=='[') - ignstp = STP; - while (ch!=EOF && (_sctab[ch]&ignstp)==0) { - if (ptr) - * ptr ++ = ch; - if (-- len <= 0) - break; - ch = new_c(); - } - if (ch != EOF) { - if (len > 0) - unnew_c(ch); - * eofptr = 0; - } - else - * eofptr = 1; - if (ptr && ptr!=optr) { - if (type!='c') - * ptr ++ = '\0'; - return 1; - } - return 0; -} -static const char * _getccl(const char * s) -{ - int c, t; - - t = 0; - if (* s == '^') { - t ++; - s ++; - } - for (c = 0; c < 128; c++) - if (t) - _sctab[c] &= ~STP; - else - _sctab[c] |= STP; - while (((c = * s ++)&0177) != ']') { - if (t) - _sctab[c++] |= STP; - else - _sctab[c++] &= ~STP; - if (c==0) - return -- s; - } - return s; -} -static int vme_isupper(char ch) -{ - if( ch >= 'A' & ch <= 'Z') - return 1; - else - return 0; -} -static int vme_tolower(char ch) -{ - return 'a' + 'A' - ch; -} -static vme_isdigit(char ch) -{ - if (ch >= '0' & ch <= '9') - return 1; - else - return 0; -} -/*-------------*/ -/* End of file */ -/*-------------*/ |