|
|
researchv10 Norman
#include <stdio.h>
#include <signal.h>
#include "pico.h"
extern short CUROLD, CURSCRATCH;
extern struct SRC src[MANY];
extern char linenumber;
extern FILE *INPUT;
extern int nsrc;
extern int DEF_LL, DEF_NL;
Usage(s)
char *s;
{
if (strlen(s) > 0)
fprintf(stderr, "pico: %s\n", s);
fprintf(stderr, "usage: pico -fto -m[0-9] -wN -hN [filenames]\n");
fprintf(stderr, "\t-f open framebuffer display (kwee)\n");
fprintf(stderr, "\t-m[012..] open metheus display /dev/om[012..]\n");
fprintf(stderr, "\t-t show parse trees\n");
fprintf(stderr, "\t-o turn off optimizer\n");
fprintf(stderr, "\t-wN set width work buffer to N pel\n");
fprintf(stderr, "\t-hN set depth work buffer to N pel\n");
exit(1);
}
whatarray(inname)
char *inname;
{
int i, j, k;
j = findbase(inname);
for (i = 2; i < nsrc; i++)
{ k = findbase(src[i].fname);
if (strcmp(&inname[j], &src[i].fname[k]) == 0)
return i;
}
return -1;
}
findbase(inname)
char *inname;
{
int i = strlen(inname)+1;
while (--i > 0)
if (inname[i] == '/')
return i+1;
return 0;
}
wsize(a,b,c,d) { fprintf(stderr, "(%d,%d,%d,%d)\n", a,b,c,d); }
files()
{ int i;
fprintf(stderr, "$0:\told\t");
fprintf(stderr, "%s\t\t", (src[CUROLD].nchan >= 3)?"color" : "b&w ");
fprintf(stderr, "%s\t", (src[CUROLD].incore==2)?"resident" : "absent ");
wsize(src[CUROLD].sx, src[CUROLD].sy, src[CUROLD].ex, src[CUROLD].ey);
if (nsrc==2) fprintf(stderr, "no files open\n");
for (i = 2; i < nsrc; i++)
{ fprintf(stderr, "$%d:\t%s\t", i-1, src[i].fname);
if (strcmp(src[i].fname, " empty") == 0)
{ fprintf(stderr, "\n");
continue;
}
fprintf(stderr, "%s ", (src[i].nchan >= 3)?"color":"b&w ");
fprintf(stderr, "%s ", (src[i].incore==2)? "resident":"absent ");
fprintf(stderr, "xo %d yo %d ", src[i].ox, src[i].oy);
fprintf(stderr, "ll %d nl %d ", src[i].ll, src[i].nl);
wsize(src[i].sx, src[i].sy, src[i].ex, src[i].ey);
}
}
char *
Emalloc(N)
unsigned N;
{
char *try, *malloc();
if ((try = malloc(N)) == NULL)
whoops("out of memory");
return try;
}
whoops(s)
char *s;
{
fprintf(stderr, "pico: fatal error `%s'\n", s);
exit(1);
}
append(n, m, k, l, s)
char *s;
{ int i, reopened=0;
if ((i = whatarray(s)) >= 2 && strcmp(s, src[i].fname) == 0)
{ lseek(src[i].fd, src[i].sop, 0);
reopened = 1;
} else
i = prepare(s);
if (i < 2) return 0;
src[i].ox = src[i].oy = 0;
if (n > 0)
{ src[i].sx = src[i].sx - n;
if (src[i].sx < 0)
{ src[i].ox = min(src[i].ll, -src[i].sx);
src[i].sx = 0;
}
} else src[i].sx = min(DEF_LL, src[i].sx - n);
if (m > 0)
{ src[i].sy = src[i].sy - m;
if (src[i].sy < 0)
{ src[i].oy = min(src[i].nl, -src[i].sy);
src[i].sy = 0;
}
} else src[i].sy = min(DEF_LL, src[i].sy - m);
if (k > 0) src[i].ll = k;
if (l > 0) src[i].nl = l;
src[i].ex = min(DEF_LL, src[i].sx + src[i].ll - src[i].ox);
src[i].ey = min(DEF_NL, src[i].sy + src[i].nl - src[i].oy);
if (reopened && src[i].incore==2)
src[i].incore = 1;
return i;
}
setwindow(a, b, c, d)
{
int e = min(DEF_LL, a+c);
int f = min(DEF_NL, b+d);
(Old)->sx = (Scratch)->sx = a;
(Old)->sy = (Scratch)->sy = b;
(Old)->ex = (Scratch)->ex = e;
(Old)->ey = (Scratch)->ey = f;
setmid();
}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.