Using object library
authorceriel <none@none>
Thu, 15 Jan 1987 22:06:16 +0000 (22:06 +0000)
committerceriel <none@none>
Thu, 15 Jan 1987 22:06:16 +0000 (22:06 +0000)
util/amisc/anm.c
util/amisc/asize.c
util/amisc/astrip.c

index da5dfc4..44cb43f 100644 (file)
@@ -1,6 +1,3 @@
-#define DUK    /* Modifications by Duk Bekema. */
-
-/* @(#)anm.c   1.4 */
 /* $Header$ */
 /*
 **     print symbol tables for
@@ -8,7 +5,6 @@
 **
 **     anm [-gopruns] [name ...]
 */
-#define        ushort  unsigned short
 
 #include       "out.h"
 
@@ -23,13 +19,14 @@ int globl_flg;
 int    nosort_flg;
 int    arch_flg;
 int    prep_flg;
+int    read_error;
 struct outhead hbuf;
 struct outsect sbuf;
-FILE   *fi;
 long   off;
 char   *malloc();
 char   *realloc();
 long   s_base[S_MAX];  /* for specially encoded bases */
+char   *filename;
 
 main(argc, argv)
 char **argv;
@@ -89,16 +86,21 @@ char **argv;
                unsigned        readcount;
                int             i,j;
 
-               fi = fopen(*++argv,"r");
-               if (fi == NULL) {
+               read_error = 0;
+               if (! rd_open(*++argv)) {
                        fprintf(stderr, "anm: cannot open %s\n", *argv);
                        continue;
                }
 
-               getofmt((char *)&hbuf, SF_HEAD, fi);
+               filename = *argv;
+               rd_ohead(&hbuf);
+               if (read_error) {
+                       rd_close();
+                       continue;
+               }
                if (BADMAGIC(hbuf)) {
-                       fprintf(stderr, "anm: %s-- bad format\n", *argv);
-                       fclose(fi);
+                       fprintf(stderr, "anm: %s -- bad format\n", *argv);
+                       rd_close();
                        continue;
                }
                if (narg > 1)
@@ -106,14 +108,14 @@ char **argv;
 
                n = hbuf.oh_nname;
                if (n == 0) {
-                       fprintf(stderr, "anm: %s-- no name list\n", *argv);
-                       fclose(fi);
+                       fprintf(stderr, "anm: %s -- no name list\n", *argv);
+                       rd_close();
                        continue;
                }
 
                if (hbuf.oh_nchar == 0) {
-                       fprintf(stderr, "anm: %s-- no names\n", *argv);
-                       fclose(fi);
+                       fprintf(stderr, "anm: %s -- no names\n", *argv);
+                       rd_close();
                        continue;
                }
                if ((readcount = hbuf.oh_nchar) != hbuf.oh_nchar) {
@@ -121,10 +123,14 @@ char **argv;
                        exit(2);
                }
 
-               /* store special section bases */
+               /* store special section bases ??? */
                if (hbuf.oh_flags & HF_8086) {
+                       rd_sect(&sbuf, hbuf.oh_nsect);
+                       if (read_error) {
+                               rd_close();
+                               continue;
+                       }
                        for (i=0; i<hbuf.oh_nsect; i++) {
-                               getofmt((char *)&sbuf, SF_SECT, fi);
                                s_base[i+S_MIN] =
                                        (sbuf.os_base>>12) & 03777760;
                        }
@@ -134,17 +140,20 @@ char **argv;
                        fprintf(stderr, "anm: out of memory on %s\n", *argv);
                        exit(2);
                }
-               fseek(fi, OFF_CHAR(hbuf), 0);
-               if (fread(cbufp, 1, readcount, fi) == 0) {
-                       fprintf(stderr, "anm: read error on %s\n", *argv);
-                       exit(2);
+               rd_string(cbufp, hbuf.oh_nchar);
+               if (read_error) {
+                       free(cbufp);
+                       rd_close();
+                       continue;
                }
-               fi_to_co = cbufp - OFF_CHAR(hbuf);
 
-               fseek(fi, OFF_NAME(hbuf), 0);
+               fi_to_co = (long) (cbufp - OFF_CHAR(hbuf));
                i = 0;
                while (--n >= 0) {
-                       getofmt((char *)&nbuf, SF_NAME, fi);
+                       rd_name(&nbuf, 1);
+                       if (read_error) {
+                               break;
+                       }
 
                        if (nbuf.on_foff == 0)
                                continue; /* skip entries without names */
@@ -157,7 +166,7 @@ char **argv;
                            ((nbuf.on_type&S_TYP)!=S_UND || (nbuf.on_type&S_ETC)!=0))
                                continue;
 
-                       nbuf.on_mptr = nbuf.on_foff + fi_to_co;
+                       nbuf.on_mptr = (char *) (nbuf.on_foff + fi_to_co);
 
                        /* adjust value for specially encoded bases */
                        if (hbuf.oh_flags & HF_8086) {
@@ -180,7 +189,7 @@ char **argv;
                        nbufp[i++] = nbuf;
                }
 
-               if (nosort_flg==0)
+               if (nbufp && nosort_flg==0)
                        qsort(nbufp, i, sizeof(struct outname), compare);
 
                for (n=0; n<i; n++) {
@@ -231,7 +240,7 @@ char **argv;
                        free((char *)nbufp);
                if (cbufp)
                        free((char *)cbufp);
-               fclose(fi);
+               rd_close();
        }
        exit(0);
 }
@@ -265,46 +274,8 @@ struct outname     *p1, *p2;
        return(0);
 }
 
-getofmt(p, s, f)
-register char  *p;
-register char  *s;
-register FILE  *f;
+rd_fatal()
 {
-       register i;
-       register long l;
-
-       for (;;) {
-               switch (*s++) {
-/*             case '0': p++; continue; */
-               case '1':
-                       *p++ = getc(f);
-                       continue;
-               case '2':
-                       i = getc(f);
-                       i |= (getc(f) << 8);
-#ifndef DUK
-                       *((short *)p)++ = i;
-#else DUK
-                       *((short *)p) = i;
-                       p += sizeof(short);
-#endif DUK
-                       continue;
-               case '4':
-                       l = (long)getc(f);
-                       l |= ((long)getc(f) << 8);
-                       l |= ((long)getc(f) << 16);
-                       l |= ((long)getc(f) << 24);
-#ifndef DUK
-                       *((long *)p)++ = l;
-#else DUK
-                       *((long *)p) = l;
-                       p += sizeof(long);
-#endif DUK
-                       continue;
-               default:
-               case '\0':
-                       break;
-               }
-               break;
-       }
+       fprintf(stderr,"read error on %s\n", filename);
+       read_error = 1;
 }
index 5d2699f..b16aeac 100644 (file)
@@ -1,8 +1,4 @@
-#define DUK    /* Modifications by Duk Bekema. */
-
-/* @(#)asize.c 1.2 */
 /* $Header$ */
-#define        ushort  unsigned short
 
 #include       <stdio.h>
 #include       "out.h"
@@ -20,7 +16,6 @@ char **argv;
        ushort          nrsect;
        long            sum;
        int             gorp;
-       FILE            *f;
 
        if (--argc == 0) {
                argc = 1;
@@ -29,20 +24,20 @@ char **argv;
        gorp = argc;
 
        while(argc--) {
-               if ((f = fopen(*++argv, "r"))==NULL) {
+               if (! rd_open(*++argv)) {
                        fprintf(stderr, "asize: cannot open %s\n", *argv);
                        continue;
                }
-               getofmt ((char *)&buf, SF_HEAD , f);
+               rd_ohead(&buf);
                if(BADMAGIC(buf)) {
                        fprintf(stderr, "asize: %s-- bad format\n", *argv);
-                       fclose(f);
+                       rd_close();
                        continue;
                }
                nrsect = buf.oh_nsect;
                if (nrsect == 0) {
                        fprintf(stderr, "asize: %s-- no sections\n", *argv);
-                       fclose(f);
+                       rd_close();
                        continue;
                }
                if (gorp > 1)
@@ -50,57 +45,19 @@ char **argv;
 
                sum = 0;
                while (nrsect-- > 0) {
-                       getofmt ((char *)&sbuf, SF_SECT , f);
+                       rd_sect(&sbuf, 1);
                        printf("%ld", sbuf.os_size);
                        sum += sbuf.os_size;
                        if (nrsect > 0)
                                putchar('+');
                }
                printf(" = %ld = 0x%lx\n", sum, sum);
-               fclose(f);
+               rd_close();
        }
 }
 
-getofmt(p, s, f)
-register char  *p;
-register char  *s;
-register FILE  *f;
+rd_fatal()
 {
-       register i;
-       register long l;
-
-       for (;;) {
-               switch (*s++) {
-/*             case '0': p++; continue; */
-               case '1':
-                       *p++ = getc(f);
-                       continue;
-               case '2':
-                       i = getc(f);
-                       i |= (getc(f) << 8);
-#ifndef DUK
-                       *((short *)p)++ = i;
-#else DUK
-                       *((short *)p) = i;
-                       p += sizeof(short);
-#endif DUK
-                       continue;
-               case '4':
-                       l = (long)getc(f);
-                       l |= (long)(getc(f) << 8);
-                       l |= ((long)getc(f) << 16);
-                       l |= ((long)getc(f) << 24);
-#ifndef DUK
-                       *((long *)p)++ = l;
-#else DUK
-                       *((long *)p) = l;
-                       p += sizeof(long);
-#endif DUK
-                       continue;
-               default:
-               case '\0':
-                       break;
-               }
-               break;
-       }
+       fprintf(stderr, "read error\n");
+       exit(2);
 }
index f2ebb91..962eaf4 100644 (file)
@@ -1,8 +1,4 @@
-#define DUK    /* Modifications by Duk Bekema. */
-
-/* @(#)astrip.c        1.1 */
 /* $Header$ */
-#define        ushort  unsigned short
 
 #include "out.h"
 #include <signal.h>
@@ -19,6 +15,7 @@ char  *mktemp();
 FILE   *fopen();
 FILE   *tf;
 struct outhead buf;
+int    readerror, writeerror;
 
 main(argc, argv)
 char **argv;
@@ -41,16 +38,17 @@ strip(name)
 char *name;
 {
        long size;
-       FILE *f;
 
-       if ((f = fopen(name,"r")) == NULL) {
+       if (! rd_open(name)) {
                fprintf(stderr, "astrip: cannot open %s\n", name);
                return(1);
        }
-       getofmt ((char *)&buf, SF_HEAD , f);
-       if(BADMAGIC(buf)) {
+       readerror = 0;
+       writeerror = 0;
+       rd_ohead(&buf);
+       if(readerror || BADMAGIC(buf)) {
                fprintf(stderr, "astrip: %s-- bad format\n", name);
-               fclose(f);
+               rd_close();
                return(1);
        }
        size = OFF_RELO(buf) - SZ_HEAD;
@@ -60,62 +58,68 @@ char *name;
        buf.oh_nchar = 0;
 
 
-       if ((tf = fopen(tname,"w")) == NULL) {
+       if (! wr_open(tname)) {
                fprintf(stderr, "astrip: cannot create temp file %s\n", tname);
-               fclose(f);
+               rd_close();
                return(2);
        }
-       fseek(tf, (long)0, 0);
-       putofmt((char *)&buf,SF_HEAD,tf,tname);
-       if(copy(name, tname, f, tf, size)) {
-               fclose(f);
-               fclose(tf);
+       wr_ohead(&buf);
+       if (writeerror) {
+               fprintf(stderr, "astrip: write error on temp file %s\n", tname);
+               rd_close();
+               wr_close();
+               return(1);
+       }
+       if(copy(name, tname, size)) {
+               rd_close();
+               wr_close();
                return(1);
        }
-       fclose(f);
-       fclose(tf);
+       rd_close();
+       wr_close();
        size += SZ_HEAD;
-       if ((f = fopen(name,"w")) == NULL) {
+       if (! wr_open(name)) {
                fprintf(stderr, "astrip: cannot write %s\n", name);
                return(1);
        }
-       if ((tf = fopen(tname,"r")) == NULL) {
+       if (! rd_open(tname)) {
                fprintf(stderr, "astrip: cannot read temp file %s\n", tname);
-               fclose(f);
+               wr_close();
                return(2);
        }
-       fseek(tf, (long)0, 0);
-       if(copy(tname, name, tf, f, size)) {
-               fclose(f);
-               fclose(tf);
+       if(copy(tname, name, size)) {
+               wr_close();
+               rd_close();
                return(2);
        }
 
-       fclose(f);
-       fclose(tf);
+       wr_close();
+       rd_close();
        return(0);
 }
 
-copy(fnam, tnam, fr, to, size)
+copy(fnam, tnam, size)
 char *fnam;
 char *tnam;
 long size;
-FILE *fr,*to;
 {
        register s, n;
        char lbuf[512];
+       int fr, fw;
 
+       fr = rd_fd();
+       fw = wr_fd();
        while(size != (long)0) {
                s = 512;
                if(size < 512)
                        s = (int) size;
-               n = fread(lbuf,1,s,fr);
-               if(n != s) {
+               rd_bytes(fr, lbuf, (long) s);
+               if (readerror) {
                        fprintf(stderr, "astrip: unexpected eof on %s\n", fnam);
                        return(1);
                }
-               n = fwrite(lbuf,1,s,to);
-               if(n != s) {
+               wr_bytes(fw, lbuf, (long) s);
+               if (writeerror) {
                        fprintf(stderr, "astrip: write error on %s\n", tnam);
                        return(1);
                }
@@ -124,90 +128,12 @@ FILE *fr,*to;
        return(0);
 }
 
-getofmt(p, s, f)
-register char  *p;
-register char  *s;
-register FILE  *f;
+rd_fatal()
 {
-       register i;
-       register long l;
-
-       for (;;) {
-               switch (*s++) {
-/*             case '0': p++; continue; */
-               case '1':
-                       *p++ = getc(f);
-                       continue;
-               case '2':
-                       i = getc(f);
-                       i |= (getc(f) << 8);
-#ifndef DUK
-                       *((short *)p)++ = i;
-#else DUK
-                       *((short *)p) = i;
-                       p += sizeof(short);
-#endif DUK
-                       continue;
-               case '4':
-                       l = (long)getc(f);
-                       l |= (long)(getc(f) << 8);
-                       l |= ((long)getc(f) << 16);
-                       l |= ((long)getc(f) << 24);
-#ifndef DUK
-                       *((long *)p)++ = l;
-#else DUK
-                       *((long *)p) = l;
-                       p += sizeof(long);
-#endif DUK
-                       continue;
-               default:
-               case '\0':
-                       break;
-               }
-               break;
-       }
+       readerror = 1;
 }
 
-putofmt(p, s, f, fnam)
-register char  *p;
-register char  *s;
-register FILE  *f;
-char           *fnam;
+wr_fatal()
 {
-       register i,j;
-       register long l;
-
-       while (j = *s++) {
-               switch (j -= '0') {
-/*             case 0: p++; break; */
-               case 1:
-                       i = *p++; putc(i,f);
-                       break;
-               case 2:
-#ifndef DUK
-                       i = *((short *)p)++;
-#else DUK
-                       i = *((short *)p);
-                       p += sizeof(short);
-#endif DUK
-                       putc(i,f);
-                       i>>=8; putc(i,f);
-                       break;
-               case 4:
-#ifndef DUK
-                       l = *((long *)p)++;
-#else DUK
-                       l = *((long *)p);
-                       p += sizeof(long);
-#endif DUK
-                       putc(l,f);
-                       l >>=8; putc(l,f);
-                       l >>=8; putc(l,f);
-                       l >>=8; putc(l,f);
-                       break;
-               default:
-                       break;
-               }
-               if (ferror(f)) fprintf(stderr, "astrip: write error on %s\n", fnam);
-       }
+       writeerror = 1;
 }