diff --git a/psys/include/p2c/p2c.h b/psys/include/p2c/p2c.h index 51f72b2ba77627ebb57d7f70289320c8b5e822a6..d97ef6f0de9373438805fd8eb5b533ac4bcf9181 100644 --- a/psys/include/p2c/p2c.h +++ b/psys/include/p2c/p2c.h @@ -19,7 +19,21 @@ #include <assert.h> #include <stdbool.h> -# define log1p(X) log(1+(X)) +/* Funcition for compiler warnings*/ +#ifdef __GNUC__ +#define DEPRECATED __attribute__((deprecated)) +#else +/** + * Deprecated functions + * + * Use this macro in front of a function declaration to say the function is deprecated. + * The compiler may emit a warning every time the function is used + */ +#define DEPRECATED +#endif + + +#define log1p(X) log(1+(X)) typedef struct __p2c_jmp_buf { struct __p2c_jmp_buf *next; @@ -78,35 +92,37 @@ extern int _EscIO (int); extern int microsleep (long); extern long ipow (long, long); -extern char *strsub (char *, char *, int, int); + +extern char *strsub (char *, char *, size_t, size_t); extern char *strltrim (char *); extern char *strrtrim (char *); -extern char *strrpt (char *, char *, int); -extern char *strpad (char *, char *, int, int); -extern int strpos2 (char *, char *, int); -extern void strmove (int len, char * s, int spos, char * d, int dpos); +extern char *strrpt (char *, char *, size_t); +extern char *strpad (char *, char *, size_t, size_t); +extern int strpos2 (char *, char *, size_t); +extern void strmove (size_t len, char * s, size_t spos, char * d, size_t dpos); extern int strcicmp (char * s1, char * s2); -extern long memavail (); -extern int P_peek (FILE *); + +extern long memavail () DEPRECATED; +extern char P_peek (FILE *); extern int P_eof (FILE *); extern int P_eoln (FILE *); -extern void P_readpaoc (FILE *, char *, int); -extern void P_readlnpaoc (FILE *, char *, int); +extern void P_readpaoc (FILE *, char *, size_t); +extern void P_readlnpaoc (FILE *, char *, size_t); extern long P_maxpos (FILE *); -extern char *P_trimname (char *, int); -extern long *P_setunion (long *, long *, long *); -extern long *P_setint (long *, long *, long *); -extern long *P_setdiff (long *, long *, long *); -extern long *P_setxor (long *, long *, long *); -extern int P_inset (unsigned, long *); -extern int P_setequal (long *, long *); -extern int P_subset (long *, long *); -extern long *P_addset (long *, unsigned); -extern long *P_addsetr (long *, unsigned, unsigned); -extern long *P_remset (long *, unsigned); -extern long *P_setcpy (long *, long *); -extern long *P_expset (long *, long); -extern long P_packset (long *); +extern char *P_trimname (char *, size_t) DEPRECATED; +extern long *P_setunion (long *, long *, long *) DEPRECATED; +extern long *P_setint (long *, long *, long *) DEPRECATED; +extern long *P_setdiff (long *, long *, long *) DEPRECATED; +extern long *P_setxor (long *, long *, long *) DEPRECATED; +extern int P_inset (unsigned, long *) DEPRECATED; +extern int P_setequal (long *, long *) DEPRECATED; +extern int P_subset (long *, long *) DEPRECATED; +extern long *P_addset (long *, unsigned) DEPRECATED; +extern long *P_addsetr (long *, unsigned, unsigned) DEPRECATED; +extern long *P_remset (long *, unsigned) DEPRECATED; +extern long *P_setcpy (long *, long *) DEPRECATED; +extern long *P_expset (long *, long) DEPRECATED; +extern long P_packset (long *) DEPRECATED; extern int P_getcmdline (int l, int h, char *line); extern void TimeStamp (int *Day, int *Month, int *Year, int *Hour, int *Min, int *Sec); @@ -208,24 +224,8 @@ typedef struct { #define P_max(a,b) ((a) > (b) ? (a) : (b)) #define P_min(a,b) ((a) < (b) ? (a) : (b)) -/* Funcition for compiler warnings*/ -#ifdef __GNUC__ -#define DEPRECATED __attribute__((deprecated)) -#else -/** - * Deprecated functions - * - * Use this macro in front of a function declaration to say the function is deprecated. - * The compiler may emit a warning every time the function is used - */ -#define DEPRECATED -#endif - #endif /* P2C_H */ -/* ifdefs for microsleep here */ - -#define BSDMICROSLEEP #if !defined(L_cuserid) #define L_cuserid 32 @@ -233,5 +233,3 @@ extern char * cuserid(char *); #endif /* End. */ - - diff --git a/psys/src/p2clib.c b/psys/src/p2clib.c index a649a322c49afa38f2bc7a8c51e317ee38d8ed51..c2d0364ab1656b89ee0f3af5cd18ef35b5790757 100644 --- a/psys/src/p2clib.c +++ b/psys/src/p2clib.c @@ -1,4 +1,3 @@ - /* Run-time library for use with "p2c", the Pascal to C translator */ /* "p2c" Copyright (C) 1989 Dave Gillespie. @@ -6,16 +5,14 @@ * by the licence agreement accompanying p2c itself. */ -/* To allow to use selct */ +/* To allow to use select */ #include <sys/select.h> -# include <time.h> +#include <time.h> #include <p2c/p2c.h> -#define Isspace(c) isspace(c) /* or "((c) == ' ')" if preferred */ - int P_argc; char **P_argv; @@ -35,48 +32,49 @@ __p2c_jmp_buf *__top_jb; int isbigendian() { - short d = 0x1234; - char *p = (char *)&d; + short d = 0x1234; + char *p = (char *)&d; - return *p == 0x12; + return *p == 0x12; } void PASCAL_MAIN(int argc, char **argv) { - P_argc = argc; - P_argv = argv; - __top_jb = NULL; - bigendian = isbigendian(); + P_argc = argc; + P_argv = argv; + __top_jb = NULL; + bigendian = isbigendian(); #ifdef LOCAL_INIT - LOCAL_INIT(); + LOCAL_INIT(); #endif } long ipow(long a, long b) { - long v; + long v; - if (a == 0 || a == 1) + if (a == 0 || a == 1) return a; - if (a == -1) + if (a == -1) return (b & 1) ? -1 : 1; - if (b < 0) + if (b < 0) return 0; - if (a == 2) + if (a == 2) return 1 << b; - + v = (b & 1) ? a : 1; - while ((b >>= 1) > 0) { + while ((b >>= 1) > 0) + { a *= a; if (b & 1) - v *= a; + v *= a; } - return v; + return v; } /* Common string functions: */ @@ -84,57 +82,61 @@ long ipow(long a, long b) /* Store in "ret" the substring of length "len" starting from "pos" (1-based). Store a shorter or null string if out-of-range. Return "ret". */ -char *strsub(ret, s, pos, len) -register char *ret, *s; -register int pos, len; +char *strsub(char *ret, char *s, size_t pos, size_t len) { - register char *s2; + char *s2; - if (--pos < 0 || len <= 0) { - *ret = 0; - return ret; - } - while (pos > 0) { - if (!*s++) { - *ret = 0; - return ret; - } - pos--; - } - s2 = ret; - while (--len >= 0) { - if (!(*s2++ = *s++)) - return ret; - } - *s2 = 0; - return ret; + if (pos == 0 || len == 0) + { + *ret = '\0'; + return ret; + } + --pos; + + while (pos-- > 0) + { + if (!*s++) + { + *ret = '\0'; + return ret; + } + } + + s2 = ret; + while (len-- > 0) + { + if (!(*s2++ = *s++)) + return ret; + } + + *s2 = '\0'; + return ret; } /* Return the index of the first occurrence of "pat" as a substring of "s", starting at index "pos" (1-based). Result is 1-based, 0 if not found. */ -int strpos2(s, pat, pos) -char *s; -register char *pat; -register int pos; -{ - register char *cp, ch; - register int slen; - - if (--pos < 0) - return 0; - slen = strlen(s) - pos; - cp = s + pos; - if (!(ch = *pat++)) - return 0; - pos = strlen(pat); - slen -= pos; - while (--slen >= 0) { - if (*cp++ == ch && !strncmp(cp, pat, pos)) - return cp - s; - } - return 0; +int strpos2(char *s, char *pat, size_t pos) +{ + char *cp, ch; + ptrdiff_t slen; + + if (pos == 0) + return 0; + pos--; + slen = strlen(s) - pos; + cp = s + pos; + if (!(ch = *pat++)) + return 0; + pos = strlen(pat); + slen -= pos; + while (--slen >= 0) + { + if (*cp++ == ch && !strncmp(cp, pat, pos)) + return cp - s; + } + return 0; } @@ -142,65 +144,62 @@ register int pos; /* Trim blanks at left end of string. */ -char *strltrim(s) -register char *s; +char *strltrim(char *s) { - while (Isspace(*s++)) ; - return s - 1; + while (isspace(*s)) + s++; + return s - 1; } /* Trim blanks at right end of string. */ -char *strrtrim(s) -register char *s; +char *strrtrim(char *s) { - register char *s2 = s; + char *s2 = s; - if (!*s) + if (!*s) + return s; + while (*++s2) ; + while (s2 > s && isspace(*--s2)) + *s2 = '\0'; return s; - while (*++s2) ; - while (s2 > s && Isspace(*--s2)) - *s2 = 0; - return s; } - /* Store in "ret" "num" copies of string "s". Return "ret". */ -char *strrpt(ret, s, num) -char *ret; -register char *s; -register int num; -{ - register char *s2 = ret; - register char *s1; - - while (--num >= 0) { - s1 = s; - while ((*s2++ = *s1++)) ; - s2--; - } - return ret; +char *strrpt(char *ret, char *s, size_t num) +{ + char *s2 = ret; + char *s1; + + while (num-- > 0) + { + s1 = s; + while ((*s2++ = *s1++)) ; + s2--; + } + return ret; } /* Store in "ret" string "s" with enough pad chars added to reach "size". */ -char *strpad(ret, s, padchar, num) -char *ret; -register char *s; -register int padchar, num; +char *strpad(char *ret, char *s, size_t padchar, size_t num) { - register char *d = ret; + char *d = ret; - if (s == d) { - while (*d++) ; - } else { - while ((*d++ = *s++)) ; - } - num -= (--d - ret); - while (--num >= 0) - *d++ = padchar; - *d = 0; - return ret; + if (s == d) + { + while (*d++) ; + } + else + { + while ((*d++ = *s++)) ; + } + + num -= (--d - ret); + while (num > 0) + *d++ = padchar; + *d = 0; + return ret; } @@ -208,84 +207,84 @@ register int padchar, num; to index "dpos" of "d", lengthening "d" if necessary. Length and indices must be in-range. */ -void strmove(int len, char * s, int spos, char * d, int dpos) +void strmove(size_t len, char *s, size_t spos, char *d, size_t dpos) { - s += spos - 1; - d += dpos - 1; - while (*d && --len >= 0) - *d++ = *s++; - if (len > 0) { - while (--len >= 0) - *d++ = *s++; + s += spos - 1; + d += dpos - 1; + while (*d && len-- > 0) + *d++ = *s++; + + while (len-- > 0) + *d++ = *s++; *d = 0; - } } /* Delete the substring of length "len" at index "pos" from "s". Delete less if out-of-range. */ -void strdelete(s, pos, len) -register char *s; -register int pos, len; -{ - register int slen; - - if (--pos < 0) - return; - slen = strlen(s) - pos; - if (slen <= 0) - return; - s += pos; - if (slen <= len) { - *s = 0; - return; - } - while ((*s = s[len])) s++; +void strdelete(char *s, size_t pos, size_t len) +{ + ptrdiff_t slen; + + if (pos == 0) + return; + --pos; + slen = strlen(s) - pos; + if (slen <= 0) + return; + s += pos; + if ((size_t)slen <= len) + { + *s = 0; + return; + } + while ((*s = s[len])) s++; } /* Insert string "src" at index "pos" of "dst". */ -void strinsert(src, dst, pos) -register char *src, *dst; -register int pos; +void strinsert(char *src, char *dst, size_t pos) { - register int slen, dlen; + ptrdiff_t slen, dlen; - if (--pos < 0) - return; - dlen = strlen(dst); - dst += dlen; - dlen -= pos; - if (dlen <= 0) { - strcpy(dst, src); - return; + if (pos == 0) + return; + --pos; + dlen = strlen(dst); + dst += dlen; + dlen -= pos; + if (dlen <= 0) + { + strcpy(dst, src); + return; } - slen = strlen(src); - do { - dst[slen] = *dst; - --dst; - } while (--dlen >= 0); - dst++; - while (--slen >= 0) - *dst++ = *src++; + slen = strlen(src); + + do + { + dst[slen] = *dst; + --dst; + } while (--dlen >= 0); + dst++; + while (--slen >= 0) + *dst++ = *src++; } /* File functions */ /* Peek at next character of input stream; return EOF at end-of-file. */ -int P_peek(f) -FILE *f; +char P_peek(FILE *f) { - int ch; + char ch; - ch = getc(f); - if (ch == EOF) - return EOF; - ungetc(ch, f); - return (ch == '\n') ? ' ' : ch; + ch = getc(f); + if (ch == EOF) + return EOF; + ungetc(ch, f); + return (ch == '\n') ? ' ' : ch; } @@ -293,117 +292,114 @@ FILE *f; stdin is broken; remove the special case for it to be broken in a different way. */ -int P_eof(f) -FILE *f; +int P_eof(FILE *f) { - register int ch; + char ch; - if (feof(f)) - return 1; - if (f == stdin) - return 0; /* not safe to look-ahead on the keyboard! */ - ch = getc(f); - if (ch == EOF) - return 1; - ungetc(ch, f); - return 0; + if (feof(f)) + return 1; + if (f == stdin) + return 0; /* not safe to look-ahead on the keyboard! */ + ch = getc(f); + if (ch == EOF) + return 1; + ungetc(ch, f); + return 0; } /* Check if at end of line (or end of entire file). */ -int P_eoln(f) -FILE *f; +int P_eoln(FILE *f) { - register int ch; + char ch; - ch = getc(f); - if (ch == EOF) - return 1; - ungetc(ch, f); - return (ch == '\n'); + ch = getc(f); + if (ch == EOF) + return 1; + ungetc(ch, f); + return (ch == '\n'); } /* Read a packed array of characters from a file. */ -void P_readpaoc(f, s, len) -FILE *f; -char *s; -int len; +void P_readpaoc(FILE *f, char *s, size_t len) { - int ch; + char ch; - for (;;) { - if (len <= 0) - return; - ch = getc(f); - if (ch == EOF || ch == '\n') - break; - *s++ = ch; - --len; - } - while (--len >= 0) - *s++ = ' '; - if (ch != EOF) - ungetc(ch, f); + for (;;) + { + if (len <= 0) + return; + ch = getc(f); + if (ch == EOF || ch == '\n') + break; + *s++ = ch; + --len; + } + while (len > 0) + { + *s++ = ' '; + --len; + } + if (ch != EOF) + ungetc(ch, f); } -void P_readlnpaoc(f, s, len) -FILE *f; -char *s; -int len; +void P_readlnpaoc(FILE *f, char *s, size_t len) { - int ch; + char ch; - for (;;) { - ch = getc(f); - if (ch == EOF || ch == '\n') - break; - if (len > 0) { - *s++ = ch; - --len; + for (;;) + { + ch = getc(f); + if (ch == EOF || ch == '\n') + break; + if (len > 0) + { + *s++ = ch; + --len; + } + } + while (len > 0) + { + *s++ = ' '; + --len; } - } - while (--len >= 0) - *s++ = ' '; } /* Compute maximum legal "seek" index in file (0-based). */ -long P_maxpos(f) -FILE *f; +long P_maxpos(FILE *f) { - long savepos = ftell(f); - long val; + long savepos = ftell(f); + long val; - if (fseek(f, 0L, SEEK_END)) - return -1; - val = ftell(f); - if (fseek(f, savepos, SEEK_SET)) - return -1; - return val; + if (fseek(f, 0L, SEEK_END)) + return -1; + val = ftell(f); + if (fseek(f, savepos, SEEK_SET)) + return -1; + return val; } /* Use packed array of char for a file name. */ -char *P_trimname(fn, len) -register char *fn; -register int len; +char *P_trimname(char *fn, size_t len) { - static char fnbuf[256]; - register char *cp = fnbuf; + char *fnbuf = malloc(sizeof(char) * 256); + char *cp = fnbuf; - while (--len >= 0 && *fn && !isspace(*fn)) - *cp++ = *fn++; - *cp = 0; - return fnbuf; + while (len-- > 0 && *fn && !isspace(*fn)) + *cp++ = *fn++; + + *cp = '\0'; + return fnbuf; } - - /* Pascal's "memavail" doesn't make much sense in Unix with virtual memory. We fix memory size as 10Meg as a reasonable compromise. */ @@ -421,287 +417,310 @@ long memavail() /* (Sets with 32 or fewer elements are normally stored as plain longs.) */ -long *P_setunion(d, s1, s2) /* d := s1 + s2 */ -register long *d, *s1, *s2; -{ - long *dbase = d++; - register int sz1 = *s1++, sz2 = *s2++; - while (sz1 > 0 && sz2 > 0) { - *d++ = *s1++ | *s2++; - sz1--, sz2--; - } - while (--sz1 >= 0) - *d++ = *s1++; - while (--sz2 >= 0) - *d++ = *s2++; - *dbase = d - dbase - 1; - return dbase; +long *P_setunion(long *d, long *s1, long *s2) /* d := s1 + s2 */ +{ + long *dbase = d++; + long sz1 = *s1++; + long sz2 = *s2++; + + while (sz1 > 0 && sz2 > 0) + { + *d++ = *s1++ | *s2++; + --sz1; + --sz2; + } + + while (--sz1 >= 0) + *d++ = *s1++; + + while (--sz2 >= 0) + *d++ = *s2++; + + *dbase = d - dbase - 1; + return dbase; } -long *P_setint(d, s1, s2) /* d := s1 * s2 */ -register long *d, *s1, *s2; +long *P_setint(long *d, long *s1, long *s2) /* d := s1 * s2 */ { - long *dbase = d++; - register int sz1 = *s1++, sz2 = *s2++; - while (--sz1 >= 0 && --sz2 >= 0) - *d++ = *s1++ & *s2++; - while (--d > dbase && !*d) ; - *dbase = d - dbase; - return dbase; + long *dbase = d++; + long sz1 = *s1++; + long sz2 = *s2++; + + while (--sz1 >= 0 && --sz2 >= 0) + *d++ = *s1++ & *s2++; + + while (--d > dbase && !*d) ; + + *dbase = d - dbase; + return dbase; } -long *P_setdiff(d, s1, s2) /* d := s1 - s2 */ -register long *d, *s1, *s2; +long *P_setdiff(long *d, long *s1, long *s2) /* d := s1 - s2 */ { - long *dbase = d++; - register int sz1 = *s1++, sz2 = *s2++; - while (--sz1 >= 0 && --sz2 >= 0) - *d++ = *s1++ & ~*s2++; - if (sz1 >= 0) { - while (sz1-- >= 0) - *d++ = *s1++; - } - while (--d > dbase && !*d) ; - *dbase = d - dbase; - return dbase; + long *dbase = d++; + long sz1 = *s1++; + long sz2 = *s2++; + + while (--sz1 >= 0 && --sz2 >= 0) + *d++ = *s1++ & ~*s2++; + + if (sz1 >= 0) + { + while (sz1-- >= 0) + *d++ = *s1++; + } + while (--d > dbase && !*d) ; + + *dbase = d - dbase; + return dbase; } -long *P_setxor(d, s1, s2) /* d := s1 / s2 */ -register long *d, *s1, *s2; +long *P_setxor(long *d, long *s1, long *s2) /* d := s1 / s2 */ { - long *dbase = d++; - register int sz1 = *s1++, sz2 = *s2++; - while (sz1 > 0 && sz2 > 0) { - *d++ = *s1++ ^ *s2++; - sz1--, sz2--; - } - while (--sz1 >= 0) - *d++ = *s1++; - while (--sz2 >= 0) - *d++ = *s2++; - while (--d > dbase && !*d) ; - *dbase = d - dbase; - return dbase; + long *dbase = d++; + long sz1 = *s1++; + long sz2 = *s2++; + + while (sz1 > 0 && sz2 > 0) + { + *d++ = *s1++ ^ *s2++; + sz1--, sz2--; + } + + while (--sz1 >= 0) + *d++ = *s1++; + + while (--sz2 >= 0) + *d++ = *s2++; + + while (--d > dbase && !*d) ; + *dbase = d - dbase; + + return dbase; } -int P_inset(val, s) /* val IN s */ -register unsigned val; -register long *s; +int P_inset(unsigned val, long *s) /* val IN s */ { - register int bit; - bit = val % SETBITS; - val /= SETBITS; - if (val < *s++ && ((1<<bit) & s[val])) - return 1; - return 0; + long bit = val % SETBITS; + + val /= SETBITS; + return ((long)val < *s++ && ((1<<bit) & s[val])); } -long *P_addset(s, val) /* s := s + [val] */ -register long *s; -register unsigned val; +long *P_addset(long *s, unsigned val) /* s := s + [val] */ { - register long *sbase = s; - register int bit, size; - bit = val % SETBITS; - val /= SETBITS; - size = *s; - if (++val > size) { - s += size; - while (val > size) - *++s = 0, size++; - *sbase = size; - } else - s += val; - *s |= 1<<bit; - return sbase; + long *sbase = s; + long bit; + size_t size; + + bit = val % SETBITS; + val /= SETBITS; + + size = *s; + if (++val > size) + { + s += size; + while (val > size) + *++s = 0, size++; + *sbase = size; + } + else + { + s += val; + } + + *s |= 1 << bit; + return sbase; } -long *P_addsetr(s, v1, v2) /* s := s + [v1..v2] */ -register long *s; -register unsigned v1, v2; +long *P_addsetr(long *s, unsigned v1, unsigned v2) /* s := s + [v1..v2] */ { - register long *sbase = s; - register int b1, b2, size; - if ((int)v1 > (int)v2) - return sbase; - b1 = v1 % SETBITS; - v1 /= SETBITS; - b2 = v2 % SETBITS; - v2 /= SETBITS; - size = *s; - v1++; - if (++v2 > size) { - while (v2 > size) - s[++size] = 0; - s[v2] = 0; - *s = v2; + long *sbase = s; + long b1, b2; + size_t size; + + if ((int)v1 > (int)v2) + return sbase; + + b1 = v1 % SETBITS; + v1 /= SETBITS; + b2 = v2 % SETBITS; + v2 /= SETBITS; + size = *s; + v1++; + if (++v2 > size) + { + while (v2 > size) + s[++size] = 0; + s[v2] = 0; + *s = v2; + } + s += v1; + if (v1 == v2) + { + *s |= (~((unsigned)(-2)<<(b2-b1))) << b1; } - s += v1; - if (v1 == v2) { - *s |= (~((-2)<<(b2-b1))) << b1; - } else { - *s++ |= (-1) << b1; - while (++v1 < v2) - *s++ = -1; - *s |= ~((-2) << b2); + else + { + *s++ |= (unsigned)(-1) << b1; + while (++v1 < v2) + *s++ = -1; + *s |= ~((unsigned)(-2) << b2); } - return sbase; + + return sbase; } -long *P_remset(s, val) /* s := s - [val] */ -register long *s; -register unsigned val; +long *P_remset(long *s, unsigned val) /* s := s - [val] */ { - register int bit; - bit = val % SETBITS; - val /= SETBITS; - if ((long)++val <= *s) { - if (!(s[val] &= ~(1<<bit))) - while (*s && !s[*s]) - (*s)--; - } - return s; + long bit = val % SETBITS; + val /= SETBITS; + if ((long)++val <= *s) + { + if (!(s[val] &= ~(1<<bit))) + while (*s && !s[*s]) + (*s)--; + } + + return s; } - -int P_setequal(s1, s2) /* s1 = s2 */ -register long *s1, *s2; +int P_setequal(long *s1, long *s2) /* s1 = s2 */ { - register int size = *s1++; - if (*s2++ != size) - return 0; - while (--size >= 0) { - if (*s1++ != *s2++) - return 0; - } - return 1; + long size = *s1++; + if (*s2++ != size) + return 0; + while (--size >= 0) + { + if (*s1++ != *s2++) + return 0; + } + return 1; } -int P_subset(s1, s2) /* s1 <= s2 */ -register long *s1, *s2; +int P_subset(long *s1, long *s2) /* s1 <= s2 */ { - register int sz1 = *s1++, sz2 = *s2++; - if (sz1 > sz2) - return 0; - while (--sz1 >= 0) { - if (*s1++ & ~*s2++) - return 0; - } - return 1; + long sz1 = *s1++; + long sz2 = *s2++; + if (sz1 > sz2) + return 0; + + while (--sz1 >= 0) + { + if (*s1++ & ~*s2++) + return 0; + } + + return 1; } -long *P_setcpy(d, s) /* d := s */ -register long *d, *s; +long *P_setcpy(long *d, long *s) /* d := s */ { - register long *save_d = d; + long *save_d = d; -#ifdef SETCPY_MEMCPY memcpy(d, s, (*s + 1) * sizeof(long)); -#else - register int i = *s + 1; - while (--i >= 0) - *d++ = *s++; -#endif - return save_d; -} + return save_d; +} /* s is a "smallset", i.e., a 32-bit or less set stored directly in a long. */ -long *P_expset(d, s) /* d := s */ -register long *d; -register long s; +long *P_expset(long *d, long s) /* d := s */ { - if (s) { - d[1] = s; - *d = 1; - } else - *d = 0; - return d; + if (s) + { + d[1] = s; + *d = 1; + } + else + { + *d = 0; + } + + return d; } -long P_packset(s) /* convert s to a small-set */ -register long *s; +long P_packset(long *s) /* convert s to a small-set */ { - if (*s++) - return *s; - else - return 0; + if (*s++) + return *s; + else + return 0; } /* Oregon Software Pascal extensions, courtesy of William Bader */ -int P_getcmdline(l, h, line) -int l, h; -char *line; +int P_getcmdline(int l, int h, char *line) { - int i, len; - char *s; + int i, len; + char *s; + + h = h - l + 1; + len = 0; - h = h - l + 1; - len = 0; - for(i = 1; i < P_argc; i++) { - s = P_argv[i]; - while (*s) { - if (len >= h) return len; - line[len++] = *s++; + for(i = 1; i < P_argc; i++) + { + s = P_argv[i]; + while (*s) + { + if (len >= h) + return len; + line[len++] = *s++; + } + if (len >= h) + return len; + line[len++] = ' '; } - if (len >= h) return len; - line[len++] = ' '; - } - return len; -} - -void TimeStamp(Day, Month, Year, Hour, Min, Sec) -int *Day, *Month, *Year, *Hour, *Min, *Sec; -{ -#ifndef NO_TIME - struct tm *tm; - time_t clock; - - time(&clock); - tm = localtime(&clock); - *Day = tm->tm_mday; - *Month = tm->tm_mon + 1; /* Jan = 0 */ - *Year = tm->tm_year; - if (*Year < 1900) - *Year += 1900; /* year since 1900 */ - *Hour = tm->tm_hour; - *Min = tm->tm_min; - *Sec = tm->tm_sec; -#endif + + return len; +} + +void TimeStamp(int *Day, int *Month, int *Year, int *Hour, int *Min, int *Sec) +{ + struct tm *tm; + time_t clock; + + time(&clock); + tm = localtime(&clock); + *Day = tm->tm_mday; + *Month = tm->tm_mon + 1; /* Jan = 0 */ + *Year = tm->tm_year; + if (*Year < 1900) + *Year += 1900; /* year since 1900 */ + *Hour = tm->tm_hour; + *Min = tm->tm_min; + *Sec = tm->tm_sec; } /* SUN Berkeley Pascal extensions */ -void P_sun_argv(s, len, n) -register char *s; -register int len, n; +void P_sun_argv(char *s, int len, int n) { - register char *cp; + char *cp; - if (n < P_argc) - cp = P_argv[n]; - else - cp = ""; - while (*cp && --len >= 0) - *s++ = *cp++; - while (--len >= 0) - *s++ = ' '; + if (n < P_argc) + cp = P_argv[n]; + else + cp = ""; + + while (*cp && --len >= 0) + *s++ = *cp++; + + while (--len >= 0) + *s++ = ' '; } - int _OutMem() { return _Escape(-2); @@ -720,146 +739,143 @@ int _NilCheck() /* The following is suitable for the HP Pascal operating system. It might want to be revised when emulating another system. */ -char *_ShowEscape(buf, code, ior, prefix) -char *buf, *prefix; -int code, ior; +char *_ShowEscape(char *buf, int code, int ior, char *prefix) { - char *bufp; + char *bufp; - if (prefix && *prefix) { - strcpy(buf, prefix); - strcat(buf, ": "); - bufp = buf + strlen(buf); - } else { - bufp = buf; - } - if (code == -10) { - sprintf(bufp, "Pascal system I/O error %d", ior); - switch (ior) { - case 3: - strcat(buf, " (illegal I/O request)"); - break; - case 7: - strcat(buf, " (bad file name)"); - break; - case FileNotFound: /*10*/ - strcat(buf, " (file not found)"); - break; - case FileNotOpen: /*13*/ - strcat(buf, " (file not open)"); - break; - case BadInputFormat: /*14*/ - strcat(buf, " (bad input format)"); - break; - case 24: - strcat(buf, " (not open for reading)"); - break; - case 25: - strcat(buf, " (not open for writing)"); - break; - case 26: - strcat(buf, " (not open for direct access)"); - break; - case 28: - strcat(buf, " (string subscript out of range)"); - break; - case EndOfFile: /*30*/ - strcat(buf, " (end-of-file)"); - break; - case FileWriteError: /*38*/ - strcat(buf, " (file write error)"); - break; - } - } else { - sprintf(bufp, "Pascal system error %d", code); - switch (code) { - case -2: - strcat(buf, " (out of memory)"); - break; - case -3: - strcat(buf, " (reference to NIL pointer)"); - break; - case -4: - strcat(buf, " (integer overflow)"); - break; - case -5: - strcat(buf, " (divide by zero)"); - break; - case -6: - strcat(buf, " (real math overflow)"); - break; - case -8: - strcat(buf, " (value range error)"); - break; - case -9: - strcat(buf, " (CASE value range error)"); - break; - case -12: - strcat(buf, " (bus error)"); - break; - case -20: - strcat(buf, " (stopped by user)"); - break; - } - } - return buf; + if (prefix && *prefix) + { + strcpy(buf, prefix); + strcat(buf, ": "); + bufp = buf + strlen(buf); + } + else + { + bufp = buf; + } + + if (code == -10) + { + sprintf(bufp, "Pascal system I/O error %d", ior); + switch (ior) + { + case 3: + strcat(buf, " (illegal I/O request)"); + break; + case 7: + strcat(buf, " (bad file name)"); + break; + case FileNotFound: /*10*/ + strcat(buf, " (file not found)"); + break; + case FileNotOpen: /*13*/ + strcat(buf, " (file not open)"); + break; + case BadInputFormat: /*14*/ + strcat(buf, " (bad input format)"); + break; + case 24: + strcat(buf, " (not open for reading)"); + break; + case 25: + strcat(buf, " (not open for writing)"); + break; + case 26: + strcat(buf, " (not open for direct access)"); + break; + case 28: + strcat(buf, " (string subscript out of range)"); + break; + case EndOfFile: /*30*/ + strcat(buf, " (end-of-file)"); + break; + case FileWriteError: /*38*/ + strcat(buf, " (file write error)"); + break; + } + } + else + { + sprintf(bufp, "Pascal system error %d", code); + switch (code) + { + case -2: + strcat(buf, " (out of memory)"); + break; + case -3: + strcat(buf, " (reference to NIL pointer)"); + break; + case -4: + strcat(buf, " (integer overflow)"); + break; + case -5: + strcat(buf, " (divide by zero)"); + break; + case -6: + strcat(buf, " (real math overflow)"); + break; + case -8: + strcat(buf, " (value range error)"); + break; + case -9: + strcat(buf, " (CASE value range error)"); + break; + case -12: + strcat(buf, " (bus error)"); + break; + case -20: + strcat(buf, " (stopped by user)"); + break; + } + } + return buf; } - int _Escape(int code) { - char buf[100]; + char buf[100]; - P_escapecode = code; - if (__top_jb) { - __p2c_jmp_buf *jb = __top_jb; - __top_jb = jb->next; - longjmp(jb->jbuf, 1); - } - if (code == 0) - exit(0); - if (code == -1) - exit(1); - fprintf(stderr, "%s\n", _ShowEscape(buf, P_escapecode, P_ioresult, "")); - exit(1); + P_escapecode = code; + if (__top_jb) + { + __p2c_jmp_buf *jb = __top_jb; + __top_jb = jb->next; + longjmp(jb->jbuf, 1); + } + + if (code == 0) + exit(0); + if (code == -1) + exit(1); + + fprintf(stderr, "%s\n", _ShowEscape(buf, P_escapecode, P_ioresult, "")); + exit(1); } -int _EscIO(code) -int code; +int _EscIO(int code) { - P_ioresult = code; - return _Escape(-10); + P_ioresult = code; + return _Escape(-10); } -char *GetChipmunkPath(ev, deft) -char *ev, *deft; +char *GetChipmunkPath(char *ev, char *deft) { - char *s; + char *s; - if ((s= getenv(ev)) != (char *) NULL) - return(s); - else return(deft); + if ((s = getenv(ev)) != (char *) NULL) + return(s); + else + return(deft); } -/* the following are two different ways to implement the microsleep */ -/* function: one for BSD-compatibles, and one for pure SysV. */ -/* both taken from the comp.unix FAQ */ - - -#ifdef BSDMICROSLEEP +/* + usleep -- support routine for 4.2BSD system call emulations + last edit: 29-Oct-1984 D A Gwyn +*/ +//extern int select(); - - /* - usleep -- support routine for 4.2BSD system call emulations - last edit: 29-Oct-1984 D A Gwyn - */ - -extern int select(); - -int microsleep( usec ) /* returns 0 if ok, else -1 */ -long usec; /* delay in microseconds */ +int microsleep(long usec) /* returns 0 if ok, else -1 */ { - static struct /* `timeval' */ { long tv_sec; /* seconds */ @@ -878,57 +894,3 @@ long usec; /* delay in microseconds */ } -#endif - - -#ifdef SYSVMICROSLEEP - - /* - subseconds sleeps for System V - or anything that has poll() - Don Libes, 4/1/1991 - - The BSD analog to this function is defined in terms of - microseconds while poll() is defined in terms of milliseconds. - For compatibility, this function provides accuracy "over the long - run" by truncating actual requests to milliseconds and - accumulating microseconds across calls with the idea that you are - probably calling it in a tight loop, and that over the long run, - the error will even out. - - If you aren't calling it in a tight loop, then you almost - certainly aren't making microsecond-resolution requests anyway, - in which case you don't care about microseconds. And if you did, - you wouldn't be using UNIX anyway because random system - indigestion (i.e., scheduling) can make mincemeat out of any - timing code. - - Returns 0 if successful timeout, -1 if unsuccessful. - - */ - - - #include <poll.h> - -int microsleep( usec ) /* returns 0 if ok, else -1 */ -long usec; /* delay in microseconds */ -{ - - static subtotal = 0; /* microseconds */ - int msec; /* milliseconds */ - /* 'foo' is only here because some versions of 5.3 have - * a bug where the first argument to poll() is checked - * for a valid memory address even if the second argument is 0. - */ - struct pollfd foo; - - subtotal += usec; - /* if less then 1 msec request, do nothing but remember it */ - if (subtotal < 1000) return(0); - msec = subtotal/1000; - subtotal = subtotal%1000; - return poll(&foo,(unsigned long)0,msec); -} - -#endif - -/* End. */