From 382c88eb17cca3e9bd5ab2961d0cd6a9d75ba530 Mon Sep 17 00:00:00 2001 From: ceriel Date: Thu, 15 Jan 1987 22:06:16 +0000 Subject: [PATCH] Using object library --- util/amisc/anm.c | 105 +++++++++++------------------ util/amisc/asize.c | 61 +++-------------- util/amisc/astrip.c | 156 ++++++++++++-------------------------------- 3 files changed, 88 insertions(+), 234 deletions(-) diff --git a/util/amisc/anm.c b/util/amisc/anm.c index da5dfc4f3..44cb43fff 100644 --- a/util/amisc/anm.c +++ b/util/amisc/anm.c @@ -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>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 #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); } diff --git a/util/amisc/astrip.c b/util/amisc/astrip.c index f2ebb915b..962eaf47c 100644 --- a/util/amisc/astrip.c +++ b/util/amisc/astrip.c @@ -1,8 +1,4 @@ -#define DUK /* Modifications by Duk Bekema. */ - -/* @(#)astrip.c 1.1 */ /* $Header$ */ -#define ushort unsigned short #include "out.h" #include @@ -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; } -- 2.34.1