ast@cs.vu.nl (Andy Tanenbaum) (07/14/88)
: This is a shar archive. Extract with sh, not csh.
: This archive ends with exit, so do not worry about trailing junk.
: --------------------------- cut here --------------------------
PATH=/bin:/usr/bin:/usr/ucb
echo Extracting 'LISTING'
sed 's/^X//' > 'LISTING' << '+ END-OF-FILE ''LISTING'
X-rw-r--r-- 1 ast 646 Jul 14 13:52 brk.c.cdif
X-rw-r--r-- 1 ast 8357 Jul 14 13:52 crypt.c.cdif
X-rw-r--r-- 1 ast 3882 Jul 14 13:52 ctime.c.cdif
X-rw-r--r-- 1 ast 236 Jul 14 13:52 fopen.c.cdif
X-rw-r--r-- 1 ast 1718 Jul 14 13:52 fseek.c.cdif
X-rw-r--r-- 1 ast 483 Jul 14 13:52 getc.c.cdif
X-rw-r--r-- 1 ast 854 Jul 14 13:52 getenv.c.cdif
X-rw-r--r-- 1 ast 3199 Jul 14 13:52 ioctl.c.cdif
X-rw-r--r-- 1 ast 5107 Jul 14 13:53 malloc.c.cdif
X-rw-r--r-- 1 ast 1054 Jul 14 13:53 strncat.c.cdif
X-rw-r--r-- 1 ast 926 Jul 14 13:53 strncmp.c.cdif
X-rw-r--r-- 1 ast 1001 Jul 14 13:53 strncpy.c.cdif
X-rw-r--r-- 1 ast 1060 Jul 14 13:53 system.c.cdif
X-rw-r--r-- 1 ast 3085 Jul 14 13:53 termcap.c.cdif
X-rw-r--r-- 1 ast 426 Jul 14 13:53 wait.c.cdif
+ END-OF-FILE LISTING
chmod 'u=rw,g=r,o=r' 'LISTING'
set `wc -c 'LISTING'`
count=$1
case $count in
877) :;;
*) echo 'Bad character count in ''LISTING' >&2
echo 'Count should be 877' >&2
esac
echo Extracting 'brk.c.cdif'
sed 's/^X//' > 'brk.c.cdif' << '+ END-OF-FILE ''brk.c.cdif'
X*** /local/ast/minix/tape3a/lib/brk.c Mon May 16 23:23:01 1988
X--- brk.c Wed Jul 13 11:55:40 1988
X***************
X*** 21,31 ****
X int incr;
X {
X char *newsize, *oldsize;
X- extern int endv, dorgv;
X
X oldsize = brksize;
X newsize = brksize + incr;
X! if (incr > 0 && newsize < oldsize) return( (char *) -1);
X if (brk(newsize) == 0)
X return(oldsize);
X else
X--- 21,31 ----
X int incr;
X {
X char *newsize, *oldsize;
X
X oldsize = brksize;
X newsize = brksize + incr;
X! if (incr > 0 && newsize < oldsize || incr < 0 && newsize > oldsize)
X! return( (char *) -1);
X if (brk(newsize) == 0)
X return(oldsize);
X else
+ END-OF-FILE brk.c.cdif
chmod 'u=rw,g=r,o=r' 'brk.c.cdif'
set `wc -c 'brk.c.cdif'`
count=$1
case $count in
646) :;;
*) echo 'Bad character count in ''brk.c.cdif' >&2
echo 'Count should be 646' >&2
esac
echo Extracting 'crypt.c.cdif'
sed 's/^X//' > 'crypt.c.cdif' << '+ END-OF-FILE ''crypt.c.cdif'
X*** /local/ast/minix/tape3a/lib/crypt.c Mon May 16 23:23:03 1988
X--- crypt.c Wed Jul 13 11:55:42 1988
X***************
X*** 1,294 ****
X! /* From Andy Tanenbaum's book "Computer Networks",
X! rewritten in C
X! */
X!
X! struct block {
X! unsigned char b_data[64];
X! };
X!
X! struct ordering {
X! unsigned char o_data[64];
X! };
X!
X! static struct block key;
X!
X! static struct ordering InitialTr = {
X! 58,50,42,34,26,18,10, 2,60,52,44,36,28,20,12, 4,
X! 62,54,46,38,30,22,14, 6,64,56,48,40,32,24,16, 8,
X! 57,49,41,33,25,17, 9, 1,59,51,43,35,27,19,11, 3,
X! 61,53,45,37,29,21,13, 5,63,55,47,39,31,23,15, 7,
X! };
X!
X! static struct ordering FinalTr = {
X! 40, 8,48,16,56,24,64,32,39, 7,47,15,55,23,63,31,
X! 38, 6,46,14,54,22,62,30,37, 5,45,13,53,21,61,29,
X! 36, 4,44,12,52,20,60,28,35, 3,43,11,51,19,59,27,
X! 34, 2,42,10,50,18,58,26,33, 1,41, 9,49,17,57,25,
X! };
X!
X! static struct ordering swap = {
X! 33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,
X! 49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,
X! 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16,
X! 17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,
X! };
X!
X! static struct ordering KeyTr1 = {
X! 57,49,41,33,25,17, 9, 1,58,50,42,34,26,18,
X! 10, 2,59,51,43,35,27,19,11, 3,60,52,44,36,
X! 63,55,47,39,31,23,15, 7,62,54,46,38,30,22,
X! 14, 6,61,53,45,37,29,21,13, 5,28,20,12, 4,
X! };
X!
X! static struct ordering KeyTr2 = {
X! 14,17,11,24, 1, 5, 3,28,15, 6,21,10,
X! 23,19,12, 4,26, 8,16, 7,27,20,13, 2,
X! 41,52,31,37,47,55,30,40,51,45,33,48,
X! 44,49,39,56,34,53,46,42,50,36,29,32,
X! };
X!
X! static struct ordering etr = {
X! 32, 1, 2, 3, 4, 5, 4, 5, 6, 7, 8, 9,
X! 8, 9,10,11,12,13,12,13,14,15,16,17,
X! 16,17,18,19,20,21,20,21,22,23,24,25,
X! 24,25,26,27,28,29,28,29,30,31,32, 1,
X! };
X!
X! static struct ordering ptr = {
X! 16, 7,20,21,29,12,28,17, 1,15,23,26, 5,18,31,10,
X! 2, 8,24,14,32,27, 3, 9,19,13,30, 6,22,11, 4,25,
X! };
X!
X! static unsigned char s_boxes[8][64] = {
X! { 14, 4,13, 1, 2,15,11, 8, 3,10, 6,12, 5, 9, 0, 7,
X! 0,15, 7, 4,14, 2,13, 1,10, 6,12,11, 9, 5, 3, 8,
X! 4, 1,14, 8,13, 6, 2,11,15,12, 9, 7, 3,10, 5, 0,
X! 15,12, 8, 2, 4, 9, 1, 7, 5,11, 3,14,10, 0, 6,13,
X! },
X!
X! { 15, 1, 8,14, 6,11, 3, 4, 9, 7, 2,13,12, 0, 5,10,
X! 3,13, 4, 7,15, 2, 8,14,12, 0, 1,10, 6, 9,11, 5,
X! 0,14, 7,11,10, 4,13, 1, 5, 8,12, 6, 9, 3, 2,15,
X! 13, 8,10, 1, 3,15, 4, 2,11, 6, 7,12, 0, 5,14, 9,
X! },
X!
X! { 10, 0, 9,14, 6, 3,15, 5, 1,13,12, 7,11, 4, 2, 8,
X! 13, 7, 0, 9, 3, 4, 6,10, 2, 8, 5,14,12,11,15, 1,
X! 13, 6, 4, 9, 8,15, 3, 0,11, 1, 2,12, 5,10,14, 7,
X! 1,10,13, 0, 6, 9, 8, 7, 4,15,14, 3,11, 5, 2,12,
X! },
X!
X! { 7,13,14, 3, 0, 6, 9,10, 1, 2, 8, 5,11,12, 4,15,
X! 13, 8,11, 5, 6,15, 0, 3, 4, 7, 2,12, 1,10,14, 9,
X! 10, 6, 9, 0,12,11, 7,13,15, 1, 3,14, 5, 2, 8, 4,
X! 3,15, 0, 6,10, 1,13, 8, 9, 4, 5,11,12, 7, 2,14,
X! },
X!
X! { 2,12, 4, 1, 7,10,11, 6, 8, 5, 3,15,13, 0,14, 9,
X! 14,11, 2,12, 4, 7,13, 1, 5, 0,15,10, 3, 9, 8, 6,
X! 4, 2, 1,11,10,13, 7, 8,15, 9,12, 5, 6, 3, 0,14,
X! 11, 8,12, 7, 1,14, 2,13, 6,15, 0, 9,10, 4, 5, 3,
X! },
X!
X! { 12, 1,10,15, 9, 2, 6, 8, 0,13, 3, 4,14, 7, 5,11,
X! 10,15, 4, 2, 7,12, 9, 5, 6, 1,13,14, 0,11, 3, 8,
X! 9,14,15, 5, 2, 8,12, 3, 7, 0, 4,10, 1,13,11, 6,
X! 4, 3, 2,12, 9, 5,15,10,11,14, 1, 7, 6, 0, 8,13,
X! },
X!
X! { 4,11, 2,14,15, 0, 8,13, 3,12, 9, 7, 5,10, 6, 1,
X! 13, 0,11, 7, 4, 9, 1,10,14, 3, 5,12, 2,15, 8, 6,
X! 1, 4,11,13,12, 3, 7,14,10,15, 6, 8, 0, 5, 9, 2,
X! 6,11,13, 8, 1, 4,10, 7, 9, 5, 0,15,14, 2, 3,12,
X! },
X!
X! { 13, 2, 8, 4, 6,15,11, 1,10, 9, 3,14, 5, 0,12, 7,
X! 1,15,13, 8,10, 3, 7, 4,12, 5, 6,11, 0,14, 9, 2,
X! 7,11, 4, 1, 9,12,14, 2, 0, 6,10,13,15, 3, 5, 8,
X! 2, 1,14, 7, 4,10, 8,13,15,12, 9, 0, 3, 5, 6,11,
X! },
X! };
X!
X! static int rots[] = {
X! 1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1,
X! };
X!
X! static
X! transpose(data, t, n)
X! register struct block *data;
X! register struct ordering *t;
X! register int n;
X {
X! struct block x;
X!
X! x = *data;
X!
X! while (n-- > 0) {
X! data->b_data[n] = x.b_data[t->o_data[n] - 1];
X! }
X! }
X!
X! static
X! rotate(key)
X! register struct block *key;
X! {
X! register unsigned char *p = key->b_data;
X! register unsigned char *ep = &(key->b_data[55]);
X! int data0 = key->b_data[0], data28 = key->b_data[28];
X!
X! while (p++ < ep) *(p-1) = *p;
X! key->b_data[27] = data0;
X! key->b_data[55] = data28;
X! }
X!
X! static struct ordering *EP = &etr;
X!
X! static
X! f(i, key, a, x)
X! struct block *key, *a;
X! register struct block *x;
X! {
X! struct block e, ikey, y;
X! int k;
X! register unsigned char *p, *q, *r;
X!
X! e = *a;
X! transpose(&e, EP, 48);
X! for (k = rots[i]; k; k--) rotate(key);
X! ikey = *key;
X! transpose(&ikey, &KeyTr2, 48);
X! p = &(y.b_data[48]);
X! q = &(e.b_data[48]);
X! r = &(ikey.b_data[48]);
X! while (p > y.b_data) {
X! *--p = *--q ^ *--r;
X! }
X! q = x->b_data;
X! for (k = 0; k < 8; k++) {
X! register int xb, r;
X!
X! r = *p++ << 5;
X! r += *p++ << 3;
X! r += *p++ << 2;
X! r += *p++ << 1;
X! r += *p++;
X! r += *p++ << 4;
X!
X! xb = s_boxes[k][r];
X!
X! *q++ = (xb >> 3) & 1;
X! *q++ = (xb>>2) & 1;
X! *q++ = (xb>>1) & 1;
X! *q++ = (xb & 1);
X! }
X! transpose(x, &ptr, 32);
X! }
X!
X! setkey(k)
X! register char *k;
X! {
X!
X! key = *((struct block *) k);
X! transpose(&key, &KeyTr1, 56);
X! }
X!
X! encrypt(blck, edflag)
X! char *blck;
X! {
X! register struct block *p = (struct block *) blck;
X register int i;
X
X! transpose(p, &InitialTr, 64);
X! for (i = 15; i>= 0; i--) {
X! int j = edflag ? i : 15 - i;
X! register int k;
X! struct block b, x;
X!
X! b = *p;
X! for (k = 31; k >= 0; k--) {
X! p->b_data[k] = b.b_data[k + 32];
X! }
X! f(j, &key, p, &x);
X! for (k = 31; k >= 0; k--) {
X! p->b_data[k+32] = b.b_data[k] ^ x.b_data[k];
X! }
X! }
X! transpose(p, &swap, 64);
X! transpose(p, &FinalTr, 64);
X! }
X!
X! char *
X! crypt(pw,salt)
X! register char *pw;
X! char *salt;
X! {
X! /* Unfortunately, I had to look at the sources of V7 crypt.
X! There was no other way to find out what this routine
X! actually does.
X! */
X!
X! char pwb[66];
X! static char result[16];
X! register char *p = pwb;
X! struct ordering new_etr;
X! register int i;
X!
X! while (*pw && p < &pwb[64]) {
X! register int j = 7;
X!
X! while (j--) {
X! *p++ = (*pw >> j) & 01;
X! }
X pw++;
X- *p++ = 0;
X }
X! while (p < &pwb[64]) *p++ = 0;
X!
X! setkey(p = pwb);
X!
X! while (p < &pwb[66]) *p++ = 0;
X!
X! new_etr = etr;
X! EP = &new_etr;
X! for (i = 0; i < 2; i++) {
X! register char c = *salt++;
X! register int j;
X!
X! result[i] = c;
X! if ( c > 'Z') c -= 6 + 7 + '.'; /* c was a lower case letter */
X! else if ( c > '9') c -= 7 + '.';/* c was upper case letter */
X! else c -= '.'; /* c was digit, '.' or '/'. */
X! /* now, 0 <= c <= 63 */
X! for (j = 0; j < 6; j++) {
X! if ((c >> j) & 01) {
X! int t = 6*i + j;
X! int temp = new_etr.o_data[t];
X! new_etr.o_data[t] = new_etr.o_data[t+24];
X! new_etr.o_data[t+24] = temp;
X! }
X! }
X }
X!
X! if (result[1] == 0) result[1] = result[0];
X!
X! for (i = 0; i < 25; i++) encrypt(pwb,0);
X! EP = &etr;
X!
X! p = pwb;
X! pw = result+2;
X! while (p < &pwb[66]) {
X! register int c = 0;
X! register int j = 6;
X!
X! while (j--) {
X! c <<= 1;
X! c |= *p++;
X! }
X! c += '.'; /* becomes >= '.' */
X! if (c > '9') c += 7; /* not in [./0-9], becomes upper */
X! if (c > 'Z') c += 6; /* not in [A-Z], becomes lower */
X! *pw++ = c;
X }
X! *pw = 0;
X! return result;
X }
X--- 1,40 ----
X! char *crypt(pw, salt)
X! char *pw, *salt;
X {
X! static char buf[14];
X! register char bits[67];
X register int i;
X+ register int j, rot;
X
X! for (i=0; i < 67; i++)
X! bits[i] = 0;
X! if (salt[1] == 0)
X! salt[1] = salt[0];
X! rot = (salt[1] * 4 - salt[0]) % 128;
X! for (i=0; *pw && i < 8; i++) {
X! for (j=0; j < 7; j++)
X! bits[i+j*8] = (*pw & (1 << j) ? 1 : 0);
X! bits[i+56] = (salt[i / 4] & (1 << (i % 4)) ? 1 : 0);
X pw++;
X }
X! bits[64] = (salt[0] & 1 ? 1 : 0);
X! bits[65] = (salt[1] & 1 ? 1 : 0);
X! bits[66] = (rot & 1 ? 1 : 0);
X! while (rot--) {
X! for (i=65; i >= 0; i--)
X! bits[i+1] = bits[i];
X! bits[0] = bits[66];
X }
X! for (i=0; i < 12; i++) {
X! buf[i+2] = 0;
X! for (j=0; j < 6; j++)
X! buf[i+2] |= (bits[i*6+j] ? (1 << j) : 0);
X! buf[i+2] += 48;
X! if (buf[i+2] > '9') buf[i+2] += 7;
X! if (buf[i+2] > 'Z') buf[i+2] += 6;
X }
X! buf[0] = salt[0];
X! buf[1] = salt[1];
X! buf[13] = '\0';
X! return(buf);
X }
+ END-OF-FILE crypt.c.cdif
chmod 'u=rw,g=r,o=r' 'crypt.c.cdif'
set `wc -c 'crypt.c.cdif'`
count=$1
case $count in
8357) :;;
*) echo 'Bad character count in ''crypt.c.cdif' >&2
echo 'Count should be 8357' >&2
esac
echo Extracting 'ctime.c.cdif'
sed 's/^X//' > 'ctime.c.cdif' << '+ END-OF-FILE ''ctime.c.cdif'
X*** /local/ast/minix/tape3a/lib/ctime.c Mon May 16 23:23:03 1988
X--- ctime.c Wed Jul 13 11:55:43 1988
X***************
X*** 8,27 ****
X "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
X };
X static char *days[] = {
X! "Thu", "Fri", "Sat", "Sun", "Mon", "Tue", "Wed"
X };
X
X! #define MIN 60L
X! #define HOUR (60 * MIN)
X! #define DAY (24 * HOUR)
X! #define YEAR (365 * DAY)
X
X! char *
X! ctime(pt)
X long *pt;
X {
X- struct tm tm;
X- static char buf[26];
X register long t = *pt;
X
X tm.tm_year = 0;
X--- 8,38 ----
X "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
X };
X static char *days[] = {
X! "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"
X };
X
X! /* To compute which date falls on which day of the week, we need to know the
X! * day of the week corresponding to Jan 1 of each year 1970 - 1999. The table
X! * newyear[] gives this, with 0 = Mon, 1 = Tue, 2 = Wed, ..., 6 = Sun. After
X! * Jan 1, 2000 this program will screw up. It probably won't be the only one.
X! */
X! static int newyear[] = {
X! 3, 4, 5, 0, 1, 2, 3, 5, 6, 0, /* 1970 - 1979 */
X! 1, 3, 4, 5, 6, 1, 2, 3, 4, 6, /* 1980 - 1989 */
X! 0, 1, 2, 4, 5, 6, 0, 2, 3, 4 /* 1990 - 1999 */
X! };
X
X! #define MIN 60L /* # seconds in a minute */
X! #define HOUR (60 * MIN) /* # seconds in an hour */
X! #define DAY (24 * HOUR) /* # seconds in a day */
X! #define YEAR (365 * DAY) /* # seconds in a year */
X!
X! static struct tm tm;
X! static char buf[26];
X!
X! char *ctime(pt)
X long *pt;
X {
X register long t = *pt;
X
X tm.tm_year = 0;
X***************
X*** 30,62 ****
X tm.tm_hour = 0;
X tm.tm_min = 0;
X tm.tm_sec = 0;
X! while (t >= YEAR) {
X if ((tm.tm_year % 4) == 2)
X t -= DAY;
X tm.tm_year += 1;
X t -= YEAR;
X }
X tm.tm_year += 1970;
X days_per_month[1] = 28;
X! if ((tm.tm_year % 4) == 0)
X days_per_month[1]++;
X while (t >= (days_per_month[tm.tm_mon] * DAY))
X t -= days_per_month[tm.tm_mon++] * DAY;
X while (t >= DAY) {
X t -= DAY;
X tm.tm_mday++;
X }
X while (t >= HOUR) {
X t -= HOUR;
X tm.tm_hour++;
X }
X while (t >= MIN) {
X t -= MIN;
X tm.tm_min++;
X }
X tm.tm_sec = (int) t;
X sprintf(buf, "%s %s %2d %02d:%02d:%02d %d\n",
X! days[(t / DAY) % 7], months[tm.tm_mon],
X tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec, tm.tm_year);
X return buf;
X }
X--- 41,111 ----
X tm.tm_hour = 0;
X tm.tm_min = 0;
X tm.tm_sec = 0;
X!
X! /* t is elapsed time in seconds since Jan 1, 1970. */
X! while (t >= YEAR) { /* how many years can we subtract from t? */
X if ((tm.tm_year % 4) == 2)
X+ {
X+ if ( t < YEAR + DAY )
X+ break;
X t -= DAY;
X+ }
X tm.tm_year += 1;
X t -= YEAR;
X }
X tm.tm_year += 1970;
X+
X+ /* t is now the offset into the current year, in seconds. */
X+ tm.tm_yday = (t/DAY); /* day # of the year, Jan 1 = 0 */
X+ tm.tm_wday = ((newyear[tm.tm_year - 1970] + tm.tm_yday - 1) % 7) + 1;
X+
X days_per_month[1] = 28;
X! if ((tm.tm_year % 4) == 0) /* check for leap year */
X days_per_month[1]++;
X+
X+ /* Compute month. */
X while (t >= (days_per_month[tm.tm_mon] * DAY))
X t -= days_per_month[tm.tm_mon++] * DAY;
X+ tm.tm_mon++; /* Jan is month 1, not month 0 */
X+
X+ /* Month established, now compute day of the month */
X while (t >= DAY) {
X t -= DAY;
X tm.tm_mday++;
X }
X+
X+ /* Day established, now do hour. */
X while (t >= HOUR) {
X t -= HOUR;
X tm.tm_hour++;
X }
X+
X+ /* Hour established, now do minute. */
X while (t >= MIN) {
X t -= MIN;
X tm.tm_min++;
X }
X+
X+ /* Residual time is # seconds. */
X tm.tm_sec = (int) t;
X+
X+ /* Generate output in ASCII in buf. */
X sprintf(buf, "%s %s %2d %02d:%02d:%02d %d\n",
X! days[tm.tm_wday - 1], months[tm.tm_mon-1],
X tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec, tm.tm_year);
X return buf;
X+ }
X+
X+ struct tm *localtime(pt)
X+ long *pt;
X+ {
X+ ctime(pt);
X+ return &tm;
X+ }
X+
X+ struct tm *gmtime(pt)
X+ long *pt;
X+ {
X+ ctime(pt);
X+ return &tm;
X }
+ END-OF-FILE ctime.c.cdif
chmod 'u=rw,g=r,o=r' 'ctime.c.cdif'
set `wc -c 'ctime.c.cdif'`
count=$1
case $count in
3882) :;;
*) echo 'Bad character count in ''ctime.c.cdif' >&2
echo 'Count should be 3882' >&2
esac
echo Extracting 'fopen.c.cdif'
sed 's/^X//' > 'fopen.c.cdif' << '+ END-OF-FILE ''fopen.c.cdif'
X*** /local/ast/minix/tape3a/lib/fopen.c Mon May 16 23:23:06 1988
X--- fopen.c Wed Jul 13 11:55:45 1988
X***************
X*** 1,4 ****
X--- 1,6 ----
X #include <stdio.h>
X+ #include <errno.h>
X+ #include "lib.h"
X
X #define PMODE 0666
X
+ END-OF-FILE fopen.c.cdif
chmod 'u=rw,g=r,o=r' 'fopen.c.cdif'
set `wc -c 'fopen.c.cdif'`
count=$1
case $count in
236) :;;
*) echo 'Bad character count in ''fopen.c.cdif' >&2
echo 'Count should be 236' >&2
esac
echo Extracting 'fseek.c.cdif'
sed 's/^X//' > 'fseek.c.cdif' << '+ END-OF-FILE ''fseek.c.cdif'
X*** /local/ast/minix/tape3a/lib/fseek.c Mon May 16 23:23:07 1988
X--- fseek.c Wed Jul 13 11:55:46 1988
X***************
X*** 7,13 ****
X {
X int count;
X long lseek();
X! long pos;
X
X iop->_flags &= ~(_EOF | _ERR);
X /* Clear both the end of file and error flags */
X--- 7,13 ----
X {
X int count;
X long lseek();
X! long pos = -1L;
X
X iop->_flags &= ~(_EOF | _ERR);
X /* Clear both the end of file and error flags */
X***************
X*** 17,33 ****
X count = iop->_count;
X pos = offset;
X
X! if ( where == 0 )
X! pos += count - lseek(fileno(iop), 0L, 1);
X else
X! offset -= count;
X
X! if ( count > 0 && pos <= count
X! && pos >= iop->_buf - iop->_ptr ) {
X iop->_ptr += (int) pos;
X iop->_count -= (int) pos;
X return(0);
X }
X }
X pos = lseek(fileno(iop), offset, where);
X iop->_count = 0;
X--- 17,39 ----
X count = iop->_count;
X pos = offset;
X
X! if ( where == 0 ) {
X! long L_tmp = lseek(fileno(iop), 0L, 1);
X! /* determine where we are */
X!
X! pos += (long) count - L_tmp;
X! }
X else
X! offset -= (long) count;
X
X! if ( count > 0 && pos <= (long) count
X! && pos >= (long) iop->_buf - (long) iop->_ptr ) {
X iop->_ptr += (int) pos;
X iop->_count -= (int) pos;
X return(0);
X }
X+ if (where == 1)
X+ offset += (long) count; /* restore offset */
X }
X pos = lseek(fileno(iop), offset, where);
X iop->_count = 0;
X***************
X*** 35,39 ****
X fflush(iop);
X pos = lseek(fileno(iop), offset, where);
X }
X! return((pos == -1) ? -1 : 0 );
X }
X--- 41,45 ----
X fflush(iop);
X pos = lseek(fileno(iop), offset, where);
X }
X! return((pos == -1L) ? -1 : 0 );
X }
+ END-OF-FILE fseek.c.cdif
chmod 'u=rw,g=r,o=r' 'fseek.c.cdif'
set `wc -c 'fseek.c.cdif'`
count=$1
case $count in
1718) :;;
*) echo 'Bad character count in ''fseek.c.cdif' >&2
echo 'Count should be 1718' >&2
esac
echo Extracting 'getc.c.cdif'
sed 's/^X//' > 'getc.c.cdif' << '+ END-OF-FILE ''getc.c.cdif'
X*** /local/ast/minix/tape3a/lib/getc.c Mon May 16 23:23:08 1988
X--- getc.c Wed Jul 13 11:55:47 1988
X***************
X*** 32,40 ****
X iop->_ptr = iop->_buf;
X }
X
X if (testflag(iop,UNBUFF))
X return (ch & CMASK);
X else
X! return (--iop->_count, *iop->_ptr++ & CMASK);
X }
X
X--- 32,41 ----
X iop->_ptr = iop->_buf;
X }
X
X+ iop->_count--; /* account one char */
X if (testflag(iop,UNBUFF))
X return (ch & CMASK);
X else
X! return (*iop->_ptr++ & CMASK);
X }
X
+ END-OF-FILE getc.c.cdif
chmod 'u=rw,g=r,o=r' 'getc.c.cdif'
set `wc -c 'getc.c.cdif'`
count=$1
case $count in
483) :;;
*) echo 'Bad character count in ''getc.c.cdif' >&2
echo 'Count should be 483' >&2
esac
echo Extracting 'getenv.c.cdif'
sed 's/^X//' > 'getenv.c.cdif' << '+ END-OF-FILE ''getenv.c.cdif'
X*** /local/ast/minix/tape3a/lib/getenv.c Mon May 16 23:23:09 1988
X--- getenv.c Wed Jul 13 11:55:48 1988
X***************
X*** 1,14 ****
X char *getenv(name)
X register char *name;
X {
X extern char **environ;
X register char **v = environ, *p, *q;
X
X! while ((p = *v++) != 0) {
X! q = name;
X! while (*q && *q++ == *p++) /* nothing */ ;
X! if (*q || *p != '=') continue;
X! return(p+1);
X }
X return(0);
X }
X--- 1,21 ----
X+ #define NULL (char *) 0
X+
X char *getenv(name)
X register char *name;
X {
X extern char **environ;
X register char **v = environ, *p, *q;
X
X! if (v && name) { /* added if statement */
X! while ((p = *v++) != NULL) { /* was, while((p = *v) != NULL */
X! q = name;
X! while (*p++ == *q)
X! if (*q++ == 0)
X! continue;
X! if (*(p - 1) != '=')
X! continue;
X! return(p);
X! }
X }
X return(0);
X }
+ END-OF-FILE getenv.c.cdif
chmod 'u=rw,g=r,o=r' 'getenv.c.cdif'
set `wc -c 'getenv.c.cdif'`
count=$1
case $count in
854) :;;
*) echo 'Bad character count in ''getenv.c.cdif' >&2
echo 'Count should be 854' >&2
esac
echo Extracting 'ioctl.c.cdif'
sed 's/^X//' > 'ioctl.c.cdif' << '+ END-OF-FILE ''ioctl.c.cdif'
X*** /local/ast/minix/tape3a/lib/ioctl.c Mon Jun 27 23:07:47 1988
X--- ioctl.c Wed Jul 13 11:55:51 1988
X***************
X*** 11,26 ****
X } u;
X
X {
X! int n;
X! long erase, kill, intr, quit, xon, xoff, eof, brk;
X
X M.TTY_REQUEST = request;
X M.TTY_LINE = fd;
X
X switch(request) {
X case TIOCSETP:
X! erase = u.argp->sg_erase & 0377;
X! kill = u.argp->sg_kill & 0377;
X M.TTY_SPEK = (erase << 8) | kill;
X M.TTY_FLAGS = u.argp->sg_flags;
X M.TTY_SPEED = (u.argp->sg_ospeed << 8) | u.argp->sg_ispeed;
X--- 11,26 ----
X } u;
X
X {
X! int n, ispeed, ospeed;
X! long erase, kill, intr, quit, xon, xoff, eof, brk, speed;
X
X M.TTY_REQUEST = request;
X M.TTY_LINE = fd;
X
X switch(request) {
X case TIOCSETP:
X! erase = u.argp->sg_erase & BYTE;
X! kill = u.argp->sg_kill & BYTE;
X M.TTY_SPEK = (erase << 8) | kill;
X M.TTY_FLAGS = u.argp->sg_flags;
X M.TTY_SPEED = (u.argp->sg_ospeed << 8) | u.argp->sg_ispeed;
X***************
X*** 28,39 ****
X return(n);
X
X case TIOCSETC:
X! intr = u.argt->t_intrc & 0377;
X! quit = u.argt->t_quitc & 0377;
X! xon = u.argt->t_startc & 0377;
X! xoff = u.argt->t_stopc & 0377;
X! eof = u.argt->t_eofc & 0377;
X! brk = u.argt->t_brkc & 0377; /* not used at the moment */
X M.TTY_SPEK = (intr<<24) | (quit<<16) | (xon<<8) | (xoff<<0);
X M.TTY_FLAGS = (eof<<8) | (brk<<0);
X n = callx(FS, IOCTL);
X--- 28,39 ----
X return(n);
X
X case TIOCSETC:
X! intr = u.argt->t_intrc & BYTE;
X! quit = u.argt->t_quitc & BYTE;
X! xon = u.argt->t_startc & BYTE;
X! xoff = u.argt->t_stopc & BYTE;
X! eof = u.argt->t_eofc & BYTE;
X! brk = u.argt->t_brkc & BYTE; /* not used at the moment */
X M.TTY_SPEK = (intr<<24) | (quit<<16) | (xon<<8) | (xoff<<0);
X M.TTY_FLAGS = (eof<<8) | (brk<<0);
X n = callx(FS, IOCTL);
X***************
X*** 41,59 ****
X
X case TIOCGETP:
X n = callx(FS, IOCTL);
X! u.argp->sg_erase = (M.TTY_SPEK >> 8) & 0377;
X! u.argp->sg_kill = (M.TTY_SPEK >> 0) & 0377;
X! u.argp->sg_flags = M.TTY_FLAGS;
X return(n);
X
X case TIOCGETC:
X n = callx(FS, IOCTL);
X! u.argt->t_intrc = (M.TTY_SPEK >> 24) & 0377;
X! u.argt->t_quitc = (M.TTY_SPEK >> 16) & 0377;
X! u.argt->t_startc = (M.TTY_SPEK >> 8) & 0377;
X! u.argt->t_stopc = (M.TTY_SPEK >> 0) & 0377;
X! u.argt->t_eofc = (M.TTY_FLAGS >> 8) & 0377;
X! u.argt->t_brkc = (M.TTY_FLAGS >> 8) & 0377;
X return(n);
X
X default:
X--- 41,62 ----
X
X case TIOCGETP:
X n = callx(FS, IOCTL);
X! u.argp->sg_erase = (M.TTY_SPEK >> 8) & BYTE;
X! u.argp->sg_kill = (M.TTY_SPEK >> 0) & BYTE;
X! u.argp->sg_flags = M.TTY_FLAGS & 0xFFFF;
X! speed = (M.TTY_FLAGS >> 16) & 0xFFFFL;
X! u.argp->sg_ispeed = speed & BYTE;
X! u.argp->sg_ospeed = (speed >> 8) & BYTE;
X return(n);
X
X case TIOCGETC:
X n = callx(FS, IOCTL);
X! u.argt->t_intrc = (M.TTY_SPEK >> 24) & BYTE;
X! u.argt->t_quitc = (M.TTY_SPEK >> 16) & BYTE;
X! u.argt->t_startc = (M.TTY_SPEK >> 8) & BYTE;
X! u.argt->t_stopc = (M.TTY_SPEK >> 0) & BYTE;
X! u.argt->t_eofc = (M.TTY_FLAGS >> 8) & BYTE;
X! u.argt->t_brkc = (M.TTY_FLAGS >> 8) & BYTE;
X return(n);
X
X default:
+ END-OF-FILE ioctl.c.cdif
chmod 'u=rw,g=r,o=r' 'ioctl.c.cdif'
set `wc -c 'ioctl.c.cdif'`
count=$1
case $count in
3199) :;;
*) echo 'Bad character count in ''ioctl.c.cdif' >&2
echo 'Count should be 3199' >&2
esac
echo Extracting 'malloc.c.cdif'
sed 's/^X//' > 'malloc.c.cdif' << '+ END-OF-FILE ''malloc.c.cdif'
X*** /local/ast/minix/tape3a/lib/malloc.c Mon May 16 23:23:15 1988
X--- malloc.c Wed Jul 13 11:55:54 1988
X***************
X*** 28,58 ****
X * An area returned by malloc() is called a slot. Each slot
X * contains the number of bytes requested, but preceeded by
X * an extra pointer to the next the slot in memory.
X! * 'bottom' and 'top' point to the first/last slot.
X * More memory is asked for using brk() and appended to top.
X * The list of free slots is maintained to keep malloc() fast.
X! * 'empty' points the the first free slot. Free slots are
X * linked together by a pointer at the start of the
X * user visable part, so just after the next-slot pointer.
X * Free slots are merged together by free().
X */
X
X extern char *sbrk(), *brk();
X! static char *bottom, *top, *empty;
X
X static grow(len)
X unsigned len;
X {
X register char *p;
X
X! ASSERT(NextSlot(top) == 0);
X! p = (char *) Align((ptrint)top + len, BRKSIZE);
X! if (p < top || brk(p) != 0)
X return(0);
X! NextSlot(top) = p;
X NextSlot(p) = 0;
X! free(top);
X! top = p;
X return(1);
X }
X
X--- 28,58 ----
X * An area returned by malloc() is called a slot. Each slot
X * contains the number of bytes requested, but preceeded by
X * an extra pointer to the next the slot in memory.
X! * '_bottom' and '_top' point to the first/last slot.
X * More memory is asked for using brk() and appended to top.
X * The list of free slots is maintained to keep malloc() fast.
X! * '_empty' points the the first free slot. Free slots are
X * linked together by a pointer at the start of the
X * user visable part, so just after the next-slot pointer.
X * Free slots are merged together by free().
X */
X
X extern char *sbrk(), *brk();
X! static char *_bottom, *_top, *_empty;
X
X static grow(len)
X unsigned len;
X {
X register char *p;
X
X! ASSERT(NextSlot(_top) == 0);
X! p = (char *) Align((ptrint)_top + len, BRKSIZE);
X! if (p < _top || brk(p) != 0)
X return(0);
X! NextSlot(_top) = p;
X NextSlot(p) = 0;
X! free(_top);
X! _top = p;
X return(1);
X }
X
X***************
X*** 66,84 ****
X size = PTRSIZE; /* avoid slots less that 2*PTRSIZE */
X for (ntries = 0; ntries < 2; ntries++) {
X len = Align(size, PTRSIZE) + PTRSIZE;
X! if (bottom == 0) {
X p = sbrk(2 * PTRSIZE);
X p = (char *) Align((ptrint)p, PTRSIZE);
X p += PTRSIZE;
X! top = bottom = p;
X NextSlot(p) = 0;
X }
X #ifdef SLOWDEBUG
X! for (p = bottom; (next = NextSlot(p)) != 0; p = next)
X ASSERT(next > p);
X! ASSERT(p == top);
X #endif
X! for (prev = 0, p = empty; p != 0; prev = p, p = NextFree(p)) {
X next = NextSlot(p);
X new = p + len;
X if (new > next)
X--- 66,84 ----
X size = PTRSIZE; /* avoid slots less that 2*PTRSIZE */
X for (ntries = 0; ntries < 2; ntries++) {
X len = Align(size, PTRSIZE) + PTRSIZE;
X! if (_bottom == 0) {
X p = sbrk(2 * PTRSIZE);
X p = (char *) Align((ptrint)p, PTRSIZE);
X p += PTRSIZE;
X! _top = _bottom = p;
X NextSlot(p) = 0;
X }
X #ifdef SLOWDEBUG
X! for (p = _bottom; (next = NextSlot(p)) != 0; p = next)
X ASSERT(next > p);
X! ASSERT(p == _top);
X #endif
X! for (prev = 0, p = _empty; p != 0; prev = p, p = NextFree(p)) {
X next = NextSlot(p);
X new = p + len;
X if (new > next)
X***************
X*** 93,99 ****
X if (prev)
X NextFree(prev) = NextFree(p);
X else
X! empty = NextFree(p);
X return(p);
X }
X if (grow(len) == 0)
X--- 93,99 ----
X if (prev)
X NextFree(prev) = NextFree(p);
X else
X! _empty = NextFree(p);
X return(p);
X }
X if (grow(len) == 0)
X***************
X*** 116,122 ****
X /*
X * extend old if there is any free space just behind it
X */
X! for (prev = 0, p = empty; p != 0; prev = p, p = NextFree(p)) {
X if (p > next)
X break;
X if (p == next) { /* 'next' is a free slot: merge */
X--- 116,122 ----
X /*
X * extend old if there is any free space just behind it
X */
X! for (prev = 0, p = _empty; p != 0; prev = p, p = NextFree(p)) {
X if (p > next)
X break;
X if (p == next) { /* 'next' is a free slot: merge */
X***************
X*** 124,130 ****
X if (prev)
X NextFree(prev) = NextFree(p);
X else
X! empty = NextFree(p);
X next = NextSlot(old);
X break;
X }
X--- 124,130 ----
X if (prev)
X NextFree(prev) = NextFree(p);
X else
X! _empty = NextFree(p);
X next = NextSlot(old);
X break;
X }
X***************
X*** 177,190 ****
X register char *prev, *next;
X
X ASSERT(NextSlot(p) > p);
X! for (prev = 0, next = empty; next != 0; prev = next, next = NextFree(next))
X if (p < next)
X break;
X NextFree(p) = next;
X if (prev)
X NextFree(prev) = p;
X else
X! empty = p;
X if (next) {
X ASSERT(NextSlot(p) <= next);
X if (NextSlot(p) == next) { /* merge p and next */
X--- 177,190 ----
X register char *prev, *next;
X
X ASSERT(NextSlot(p) > p);
X! for (prev = 0, next = _empty; next != 0; prev = next, next = NextFree(next))
X if (p < next)
X break;
X NextFree(p) = next;
X if (prev)
X NextFree(prev) = p;
X else
X! _empty = p;
X if (next) {
X ASSERT(NextSlot(p) <= next);
X if (NextSlot(p) == next) { /* merge p and next */
+ END-OF-FILE malloc.c.cdif
chmod 'u=rw,g=r,o=r' 'malloc.c.cdif'
set `wc -c 'malloc.c.cdif'`
count=$1
case $count in
5107) :;;
*) echo 'Bad character count in ''malloc.c.cdif' >&2
echo 'Count should be 5107' >&2
esac
echo Extracting 'strncat.c.cdif'
sed 's/^X//' > 'strncat.c.cdif' << '+ END-OF-FILE ''strncat.c.cdif'
X*** /local/ast/minix/tape3a/lib/strncat.c Mon May 16 23:23:24 1988
X--- strncat.c Wed Jul 13 11:56:04 1988
X***************
X*** 1,21 ****
X! char *strncat(s1, s2, n)
X! register char *s1, *s2;
X int n;
X {
X! /* Append s2 to the end of s1, but no more than n characters */
X
X! char *original = s1;
X!
X! if (n == 0) return(s1);
X!
X! /* Find the end of s1. */
X! while (*s1 != 0) s1++;
X!
X! /* Now copy s2 to the end of s1. */
X! while (*s2 != 0) {
X! *s1++ = *s2++;
X! if (--n == 0) break;
X }
X! *s1 = 0;
X! return(original);
X }
X--- 1,29 ----
X! /*
X! strncat.c - char *strncat( char *s1, char *s2, int n )
X!
X! Strncat appends up to n characters from s2 to the end of s1.
X! It returns s1.
X! */
X!
X! char *strncat( s1, s2, n )
X! char *s1;
X! register char *s2;
X int n;
X {
X! register char *rs1;
X
X! rs1 = s1;
X! if ( n > 0 )
X! {
X! while ( *rs1++ != 0 )
X! ;
X! --rs1;
X! while ( (*rs1++ = *s2++) != 0 )
X! if ( --n == 0 )
X! {
X! *rs1 = 0;
X! break;
X! }
X }
X! return s1;
X }
+ END-OF-FILE strncat.c.cdif
chmod 'u=rw,g=r,o=r' 'strncat.c.cdif'
set `wc -c 'strncat.c.cdif'`
count=$1
case $count in
1054) :;;
*) echo 'Bad character count in ''strncat.c.cdif' >&2
echo 'Count should be 1054' >&2
esac
echo Extracting 'strncmp.c.cdif'
sed 's/^X//' > 'strncmp.c.cdif' << '+ END-OF-FILE ''strncmp.c.cdif'
X*** /local/ast/minix/tape3a/lib/strncmp.c Mon May 16 23:23:25 1988
X--- strncmp.c Wed Jul 13 11:56:05 1988
X***************
X*** 1,13 ****
X! int strncmp(s1, s2, n)
X! register char *s1, *s2;
X int n;
X {
X! /* Compare two strings, but at most n characters. */
X!
X! while (1) {
X! if (*s1 != *s2) return(*s1 - *s2);
X! if (*s1 == 0 || --n == 0) return(0);
X! s1++;
X! s2++;
X! }
X }
X--- 1,23 ----
X! /*
X! strncmp.c - int strncmp( char *s1, char *s2, int n )
X!
X! Strcmp compares s1 to s2, up to at most n characters
X! (lexicographically with native character comparison).
X! It returns
X! positive if s1 > s2
X! zero if s1 = s2
X! negative if s1 < s2.
X! */
X!
X! int strncmp( s1, s2, n )
X! register char *s1;
X! register char *s2;
X int n;
X {
X! if ( n <= 0 )
X! return 0;
X! while ( *s1++ == *s2++ )
X! if ( s1[-1] == 0 || --n == 0 )
X! return 0;
X! return s1[-1] - s2[-1];
X }
+ END-OF-FILE strncmp.c.cdif
chmod 'u=rw,g=r,o=r' 'strncmp.c.cdif'
set `wc -c 'strncmp.c.cdif'`
count=$1
case $count in
926) :;;
*) echo 'Bad character count in ''strncmp.c.cdif' >&2
echo 'Count should be 926' >&2
esac
echo Extracting 'strncpy.c.cdif'
sed 's/^X//' > 'strncpy.c.cdif' << '+ END-OF-FILE ''strncpy.c.cdif'
X*** /local/ast/minix/tape3a/lib/strncpy.c Mon May 16 23:23:25 1988
X--- strncpy.c Wed Jul 13 11:56:05 1988
X***************
X*** 1,15 ****
X! char *strncpy(s1, s2, n)
X! register char *s1, *s2;
X int n;
X {
X! /* Copy s2 to s1, but at most n characters. */
X
X! char *original = s1;
X!
X! while (*s2 != 0) {
X! *s1++ = *s2++;
X! if (--n == 0) break;
X }
X! *s1 = 0;
X! return(original);
X }
X--- 1,27 ----
X! /*
X! strncpy.c - char *strncpy( char *s1, char *s2, int n )
X!
X! Strncpy writes exactly n (or 0 if n < 0) characters to s1.
X! It copies up to n characters from s2, and null-pads the rest.
X! The result is null terminated iff strlen( s2 ) < n.
X! It returns the target string.
X! */
X!
X! char *strncpy( s1, s2, n )
X! char *s1;
X! register char *s2;
X int n;
X {
X! register char *rs1;
X
X! rs1 = s1;
X! if ( n > 0 )
X! {
X! while ( (*rs1++ = *s2++) != 0 && --n != 0 )
X! ;
X! if ( n != 0 )
X! while ( --n != 0 )
X! *rs1++ = 0;
X }
X! return s1;
X }
+ END-OF-FILE strncpy.c.cdif
chmod 'u=rw,g=r,o=r' 'strncpy.c.cdif'
set `wc -c 'strncpy.c.cdif'`
count=$1
case $count in
1001) :;;
*) echo 'Bad character count in ''strncpy.c.cdif' >&2
echo 'Count should be 1001' >&2
esac
echo Extracting 'system.c.cdif'
sed 's/^X//' > 'system.c.cdif' << '+ END-OF-FILE ''system.c.cdif'
X*** /local/ast/minix/tape3a/lib/system.c Mon May 16 23:23:26 1988
X--- system.c Wed Jul 13 11:56:06 1988
X***************
X*** 1,25 ****
X! #include <stdio.h>
X
X! #ifndef NIL
X! #define NIL 0
X! #endif
X!
X!
X! system( cmd )
X char *cmd;
X {
X int retstat, procid, waitstat;
X
X! if( (procid = fork()) == 0 )
X! {
X! execl( "/bin/sh", "sh", "-c", cmd, NIL );
X exit( 127 );
X }
X
X! while( (waitstat = wait(&retstat)) != procid && waitstat != -1 )
X! ;
X! if (waitstat == -1)
X! retstat = -1;
X
X! return( retstat );
X }
X--- 1,20 ----
X! #include <stdio.h>
X
X! system(cmd)
X char *cmd;
X {
X int retstat, procid, waitstat;
X
X! if ( (procid = fork()) == 0) {
X! /* Child does an exec of the command. */
X! execl( "/bin/sh", "sh", "-c", cmd, 0 );
X exit( 127 );
X }
X
X! /* Check to see if fork failed. */
X! if (procid < 0) exit(1);
X
X! while ( (waitstat = wait(&retstat)) != procid && waitstat != -1 ) ;
X! if (waitstat == -1) retstat = -1;
X! return(retstat);
X }
+ END-OF-FILE system.c.cdif
chmod 'u=rw,g=r,o=r' 'system.c.cdif'
set `wc -c 'system.c.cdif'`
count=$1
case $count in
1060) :;;
*) echo 'Bad character count in ''system.c.cdif' >&2
echo 'Count should be 1060' >&2
esac
echo Extracting 'termcap.c.cdif'
sed 's/^X//' > 'termcap.c.cdif' << '+ END-OF-FILE ''termcap.c.cdif'
X*** /local/ast/minix/tape3a/lib/termcap.c Mon May 16 23:23:27 1988
X--- termcap.c Wed Jul 13 11:56:07 1988
X***************
X*** 7,12 ****
X--- 7,20 ----
X *
X * A public domain implementation of the termcap(3) routines.
X */
X+
X+ /* efth 1988-Apr-29
X+
X+ - Correct when TERM != name and TERMCAP is defined [tgetent]
X+ - Correct the comparison for the terminal name [tgetent]
X+ - Correct the value of ^x escapes [tgetstr]
X+ */
X+
X #include <stdio.h>
X
X #define CAPABLEN 2
X***************
X*** 14,24 ****
X #define ISSPACE(c) ((c) == ' ' || (c) == '\t' || (c) == '\r' || (c) == '\n')
X #define ISDIGIT(x) ((x) >= '0' && (x) <= '9')
X
X- extern short ospeed; /* output speed */
X- extern char PC; /* padding character */
X- extern char *BC; /* back cursor movement */
X- extern char *UP; /* up cursor movement */
X-
X char *capab; /* the capability itself */
X int incr; /* set by %i flag */
X
X--- 22,27 ----
X***************
X*** 41,65 ****
X short len = strlen(name);
X
X capab = bp;
X! if ((file = getenv("TERMCAP")) != (char *) NULL) {
X! if (*file != '/' &&
X! (cp = getenv("TERM")) != NULL && strcmp(name, cp) == 0) {
X! (void) strcpy(bp, file);
X! return(1);
X! }
X! } else
X file = "/etc/termcap";
X if ((fp = fopen(file, "r")) == (FILE *) NULL)
X return(-1);
X while (fgets(bp, 1024, fp) != NULL) {
X /* skip V6 two letter name */
X for (cp = bp ; *cp != '|' ; cp++)
X ;
X for (++cp ; ISSPACE(*cp) ; cp++)
X ;
X! if (strncmp(name, cp, len) == 0) {
X! while (*(cp = &bp[strlen(bp) - 2]) == '\\')
X! fgets(cp, 1024, fp);
X fclose(fp);
X return(1);
X }
X--- 44,79 ----
X short len = strlen(name);
X
X capab = bp;
X!
X! /* Fixed problem: If TERM != name and TERMCAP was defined, */
X! /* then should look in /etc/termcap, but didn't. (efth) */
X!
X! if ( (file = getenv("TERMCAP")) == NULL )
X! file = "/etc/termcap";
X! else if ( *file != '/' )
X! if ( (cp = getenv("TERM")) != NULL && strcmp( name, cp ) == 0 ) {
X! strcpy( bp, file );
X! return( 1 );
X! } else
X file = "/etc/termcap";
X+
X+
X if ((fp = fopen(file, "r")) == (FILE *) NULL)
X return(-1);
X+
X while (fgets(bp, 1024, fp) != NULL) {
X+ /* Read in the rest of the definition now (efth) */
X+ while (*(cp = &bp[strlen(bp) - 2]) == '\\')
X+ fgets(cp, 1024, fp);
X+
X /* skip V6 two letter name */
X for (cp = bp ; *cp != '|' ; cp++)
X ;
X for (++cp ; ISSPACE(*cp) ; cp++)
X ;
X!
X! /* Make sure "name" matches exactly (efth) */
X! if (strncmp(name, cp, len) == 0 && cp[len] == '|') {
X fclose(fp);
X return(1);
X }
X***************
X*** 157,163 ****
X for (ret = *area, cp++; *cp && *cp != ':' ; (*area)++, cp++)
X switch(*cp) {
X case '^' :
X! **area = *++cp - 'A';
X break;
X case '\\' :
X switch(*++cp) {
X--- 171,177 ----
X for (ret = *area, cp++; *cp && *cp != ':' ; (*area)++, cp++)
X switch(*cp) {
X case '^' :
X! **area = *++cp - '@'; /* fix (efth)*/
X break;
X case '\\' :
X switch(*++cp) {
+ END-OF-FILE termcap.c.cdif
chmod 'u=rw,g=r,o=r' 'termcap.c.cdif'
set `wc -c 'termcap.c.cdif'`
count=$1
case $count in
3085) :;;
*) echo 'Bad character count in ''termcap.c.cdif' >&2
echo 'Count should be 3085' >&2
esac
echo Extracting 'wait.c.cdif'
sed 's/^X//' > 'wait.c.cdif' << '+ END-OF-FILE ''wait.c.cdif'
X*** /local/ast/minix/tape3a/lib/wait.c Mon May 16 23:23:29 1988
X--- wait.c Wed Jul 13 11:56:09 1988
X***************
X*** 5,10 ****
X {
X int k;
X k = callm1(MM, WAIT, 0, 0, 0, NIL_PTR, NIL_PTR, NIL_PTR);
X! if (status != 0) *status = M.m2_i1;
X return(k);
X }
X--- 5,10 ----
X {
X int k;
X k = callm1(MM, WAIT, 0, 0, 0, NIL_PTR, NIL_PTR, NIL_PTR);
X! if (k >= 0 && status != 0) *status = M.m2_i1;
X return(k);
X }
+ END-OF-FILE wait.c.cdif
chmod 'u=rw,g=r,o=r' 'wait.c.cdif'
set `wc -c 'wait.c.cdif'`
count=$1
case $count in
426) :;;
*) echo 'Bad character count in ''wait.c.cdif' >&2
echo 'Count should be 426' >&2
esac
exit 0