Add original unix v6
This commit is contained in:
+149
@@ -0,0 +1,149 @@
|
||||
int fout;
|
||||
int cflg;
|
||||
int nflg;
|
||||
int uflg;
|
||||
int rflg 1;
|
||||
int gflg;
|
||||
int pflg;
|
||||
struct nl
|
||||
{
|
||||
char name[8];
|
||||
int typ;
|
||||
int *val;
|
||||
} *nlp;
|
||||
int fi;
|
||||
int buf[8];
|
||||
main(argc, argv)
|
||||
char **argv;
|
||||
{
|
||||
int n, i, j;
|
||||
int compare();
|
||||
|
||||
if (--argc > 0 && *argv[1] == '-') {
|
||||
argv++;
|
||||
while (*++*argv) switch (**argv) {
|
||||
case 'n':
|
||||
nflg++;
|
||||
continue;
|
||||
|
||||
case 'c':
|
||||
cflg++;
|
||||
continue;
|
||||
|
||||
case 'g':
|
||||
gflg++;
|
||||
continue;
|
||||
|
||||
case 'u':
|
||||
uflg++;
|
||||
continue;
|
||||
|
||||
case 'r':
|
||||
rflg = -1;
|
||||
continue;
|
||||
|
||||
case 'p':
|
||||
pflg ++;
|
||||
continue;
|
||||
|
||||
default:
|
||||
continue;
|
||||
}
|
||||
argc--;
|
||||
}
|
||||
if (argc==0)
|
||||
fi = open("a.out", 0); else
|
||||
fi = open(*++argv, 0);
|
||||
if(fi < 0) {
|
||||
printf("cannot open input\n");
|
||||
exit();
|
||||
}
|
||||
read(fi, buf, 020);
|
||||
if(buf[0]!=0407 && buf[0]!=0410 && buf[0]!=0411) {
|
||||
printf("bad format\n");
|
||||
exit();
|
||||
}
|
||||
seek(fi, buf[1], 1); /* text */
|
||||
seek(fi, buf[2], 1); /* data */
|
||||
if(buf[7] != 1) {
|
||||
seek(fi, buf[1], 1);
|
||||
seek(fi, buf[2], 1); /* reloc */
|
||||
}
|
||||
n = ldiv(0, buf[4], 12);
|
||||
if(n == 0) {
|
||||
printf("no name list\n");
|
||||
exit();
|
||||
}
|
||||
nlp = sbrk(12*n);
|
||||
read(fi, nlp, n*12);
|
||||
if (pflg==0)
|
||||
qsort(nlp, n, 12, compare);
|
||||
fout = dup(1);
|
||||
close(1);
|
||||
for(i=0; i<n; i++) {
|
||||
if(gflg && (nlp->typ&040)==0)
|
||||
goto out;
|
||||
if(cflg) {
|
||||
if(nlp->name[0] != '_')
|
||||
goto out;
|
||||
for(j=0; j<7; j++)
|
||||
nlp->name[j] = nlp->name[j+1];
|
||||
nlp->name[7] = '\0';
|
||||
}
|
||||
j = nlp->typ&037;
|
||||
if(j > 4)
|
||||
j = 1;
|
||||
if(j==0 && nlp->val)
|
||||
j = 5;
|
||||
if(uflg && j!=0)
|
||||
goto out;
|
||||
if(!uflg) {
|
||||
if(j==0)
|
||||
printf(" "); else
|
||||
printo(nlp->val);
|
||||
printf("%c ", (nlp->typ&040? "UATDBC":"uatdbc")[j]);
|
||||
}
|
||||
printf("%.8s\n", nlp);
|
||||
out:
|
||||
nlp++;
|
||||
}
|
||||
flush();
|
||||
}
|
||||
|
||||
compare(p1, p2)
|
||||
struct nl *p1, *p2;
|
||||
{
|
||||
int a, i;
|
||||
|
||||
a = 0;
|
||||
if(nflg) {
|
||||
if(p1->val > p2->val) {
|
||||
a = 1;
|
||||
goto out;
|
||||
}
|
||||
if(p1->val < p2->val) {
|
||||
a = -1;
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
for(i=0; i<8; i++)
|
||||
if(p1->name[i] != p2->name[i]) {
|
||||
if(p1->name[i] > p2->name[i])
|
||||
a = 1; else
|
||||
a = -1;
|
||||
goto out;
|
||||
}
|
||||
out:
|
||||
return(a*rflg);
|
||||
}
|
||||
|
||||
printo(v)
|
||||
{
|
||||
int i;
|
||||
|
||||
printf("%c", v<0?'1':'0');
|
||||
for(i=0; i<5; i++) {
|
||||
printf("%c", ((v>>12)&7)+'0');
|
||||
v =<<3;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user