Add original unix v6
This commit is contained in:
+132
@@ -0,0 +1,132 @@
|
||||
# define PL 102
|
||||
# define ESC 033
|
||||
# define SI 017
|
||||
# define SO 016
|
||||
# define LINELN 800
|
||||
char *page[PL];
|
||||
char lbuff [LINELN], *line;
|
||||
main ()
|
||||
{
|
||||
int c, i, j, ll, cp, mustwr;
|
||||
extern int fin, fout;
|
||||
fin = dup(0);
|
||||
fout = dup(1);
|
||||
|
||||
for (ll=0; ll<PL; ll++)
|
||||
page[ll] = 0;
|
||||
|
||||
c = 1;
|
||||
cp = ll = 0;
|
||||
line = lbuff;
|
||||
mustwr = PL;
|
||||
|
||||
while (c>0)
|
||||
switch (c = getchar())
|
||||
{
|
||||
case '\n':
|
||||
store (ll%PL);
|
||||
if (++ll >= mustwr)
|
||||
if (page[ll%PL] != 0)
|
||||
{
|
||||
printf ("%s\n",page[ll%PL]);
|
||||
mustwr++;
|
||||
free (page[ll%PL]);
|
||||
page[ll%PL]=0;
|
||||
}
|
||||
fetch (ll%PL);
|
||||
cp = 0;
|
||||
continue;
|
||||
case '\0': continue;
|
||||
case ESC:
|
||||
c = getchar();
|
||||
if (c == '7')
|
||||
{
|
||||
store(ll%PL);
|
||||
ll--;
|
||||
fetch (ll%PL);
|
||||
}
|
||||
else
|
||||
{
|
||||
outc (ESC, &line);
|
||||
outc (c, &line );
|
||||
}
|
||||
continue;
|
||||
case '\r':
|
||||
line = lbuff;
|
||||
continue;
|
||||
case '\t':
|
||||
outc (' ', &line);
|
||||
cp = line-lbuff;
|
||||
while (cp++%8)
|
||||
outc(' ', &line);
|
||||
continue;
|
||||
default:
|
||||
outc(c, &line);
|
||||
}
|
||||
for (i=0; i<PL; i++)
|
||||
if (page[(mustwr+i)%PL] != 0)
|
||||
printf ("%s\n",page[(mustwr+i) % PL]);
|
||||
flush();
|
||||
}
|
||||
outc (c, lp)
|
||||
char **lp;
|
||||
{
|
||||
int j;
|
||||
j = 0;
|
||||
while (j >0 || *(*lp) == '\b' || *(*lp) == ESC || **lp == SI || **lp == SO)
|
||||
{
|
||||
switch (*(*lp))
|
||||
{
|
||||
case '\b':
|
||||
j++;
|
||||
(*lp)++;
|
||||
break;
|
||||
case '\0':
|
||||
*(*lp)++ = ' ';
|
||||
j--;
|
||||
break;
|
||||
case ESC: /* 'escape' */
|
||||
(*lp) =+ 2;
|
||||
break;
|
||||
case SI:
|
||||
case SO:
|
||||
(*lp)++;
|
||||
break;
|
||||
default:
|
||||
(*lp)++;
|
||||
j--;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (c != ' ' || *(*lp) == '\0')
|
||||
*(*lp) = c;
|
||||
(*lp)++;
|
||||
}
|
||||
store (ll)
|
||||
{
|
||||
if (page[ll] != 0)
|
||||
free (page[ll]);
|
||||
page[ll] = alloc ( leng (lbuff) + 2);
|
||||
copy (page[ll],lbuff);
|
||||
}
|
||||
fetch(ll)
|
||||
{
|
||||
int i;
|
||||
for (i=0; i < LINELN; i++)
|
||||
lbuff[i] = '\0';
|
||||
copy (line=lbuff, page[ll]);
|
||||
}
|
||||
copy (s,t)
|
||||
char *s, *t;
|
||||
{
|
||||
if (t == 0)
|
||||
return (*s=0);
|
||||
while (*s++ = *t++);
|
||||
}
|
||||
leng (s)
|
||||
char *s;
|
||||
{
|
||||
int l;
|
||||
for (l=0; s[l]; l++);
|
||||
return (l);
|
||||
}
|
||||
Reference in New Issue
Block a user