Bell 32V development
[unix-history] / usr / src / cmd / adb / output.c
index 24e4893..ca45e38 100644 (file)
@@ -6,15 +6,19 @@
  */
 
 #include "defs.h"
  */
 
 #include "defs.h"
+SCCSID(@(#)output.c    2.3);
+#include <stdio.h>
 
 
 INT            mkfault;
 INT            infile;
 
 
 INT            mkfault;
 INT            infile;
-INT            outfile 1;
-INT            maxpos;
+INT            outfile = 1;
+L_INT          maxpos;
+L_INT          maxoff;
+INT            radix = 16;
 
 CHAR           printbuf[MAXLIN];
 
 CHAR           printbuf[MAXLIN];
-CHAR           *printptr printbuf;
+CHAR           *printptr printbuf;
 CHAR           *digitptr;
 
 
 CHAR           *digitptr;
 
 
@@ -32,9 +36,9 @@ eqstr(s1, s2)
 }
 
 length(s)
 }
 
 length(s)
-       STRING          s;
+       REG STRING              s;
 {
 {
-       INT             n 0;
+       INT             n 0;
        WHILE *s++ DO n++; OD
        return(n);
 }
        WHILE *s++ DO n++; OD
        return(n);
 }
@@ -63,7 +67,11 @@ printc(c)
                FI
             OD
             *q++=EOR;
                FI
             OD
             *q++=EOR;
+#ifdef EDDT
+               printptr=printbuf; do putchar(*printptr++); while (printptr<q);
+#else
             write(outfile,printbuf,q-printbuf);
             write(outfile,printbuf,q-printbuf);
+#endif
             printptr=printbuf;
        ELIF c==TB
        THEN *printptr++=SP;
             printptr=printbuf;
        ELIF c==TB
        THEN *printptr++=SP;
@@ -97,7 +105,7 @@ printf(fmat,a1)
        L_INT           lx;
        CHAR            digits[64];
 
        L_INT           lx;
        CHAR            digits[64];
 
-       fptr = fmat; vptr = &a1;
+       fptr = fmat; dptr = vptr = &a1;
 
        WHILE c = *fptr++
        DO  IF c!='%'
 
        WHILE c = *fptr++
        DO  IF c!='%'
@@ -106,7 +114,11 @@ printf(fmat,a1)
                 width=convert(&fptr);
                 IF *fptr=='.' THEN fptr++; prec=convert(&fptr); ELSE prec = -1; FI
                 digitptr=digits;
                 width=convert(&fptr);
                 IF *fptr=='.' THEN fptr++; prec=convert(&fptr); ELSE prec = -1; FI
                 digitptr=digits;
+#ifndef vax
                 dptr=rptr=vptr; lx = *dptr; x = *vptr++;
                 dptr=rptr=vptr; lx = *dptr; x = *vptr++;
+#else
+                rptr=dptr; x = shorten(lx = *dptr++);
+#endif
                 s=0;
                 switch (c = *fptr++) {
 
                 s=0;
                 switch (c = *fptr++) {
 
@@ -114,11 +126,23 @@ printf(fmat,a1)
                    case 'u':
                        printnum(x,c,10); break;
                    case 'o':
                    case 'u':
                        printnum(x,c,10); break;
                    case 'o':
+#ifndef vax
                        printoct(0,x,0); break;
                        printoct(0,x,0); break;
+#else
+                       printoct(itol(0,x),0); break;
+#endif
                    case 'q':
                        lx=x; printoct(lx,-1); break;
                    case 'x':
                    case 'q':
                        lx=x; printoct(lx,-1); break;
                    case 'x':
+#ifndef vax
                        printdbl(0,x,c,16); break;
                        printdbl(0,x,c,16); break;
+#else
+                       printdbl(itol(0,x),c,16); break;
+#endif
+                       case 'r':
+                       printdbl(lx=x,c,radix); break;
+                       case 'R':
+                       printdbl(lx,c,radix); vptr++; break;
                    case 'Y':
                        printdate(lx); vptr++; break;
                    case 'D':
                    case 'Y':
                        printdate(lx); vptr++; break;
                    case 'D':
@@ -133,9 +157,18 @@ printf(fmat,a1)
                    case 'c':
                        printc(x); break;
                    case 's':
                    case 'c':
                        printc(x); break;
                    case 's':
+#ifndef vax
                        s=x; break;
                        s=x; break;
+#else
+                       s=lx; break;
+#endif
+#ifndef EDDT
                    case 'f':
                    case 'F':
                    case 'f':
                    case 'F':
+#ifdef vax
+                       dptr++;
+                       sprintf(s=digits,"%+.16e",*rptr,*(rptr+4)); prec= -1; break;
+#else
                        vptr += 7;
                        s=ecvt(*rptr, prec, &decpt, &n);
                        *digitptr++=(n?'-':'+');
                        vptr += 7;
                        s=ecvt(*rptr, prec, &decpt, &n);
                        *digitptr++=(n?'-':'+');
@@ -149,6 +182,8 @@ printf(fmat,a1)
                        THEN *digitptr++ = 'e'; printnum(decpt,'d',10);
                        FI
                        s=0; prec = -1; break;
                        THEN *digitptr++ = 'e'; printnum(decpt,'d',10);
                        FI
                        s=0; prec = -1; break;
+#endif
+#endif
                    case 'm':
                        vptr--; break;
                    case 'M':
                    case 'm':
                        vptr--; break;
                    case 'M':
@@ -157,14 +192,22 @@ printf(fmat,a1)
                    case 't':
                        IF c=='T'
                        THEN width=x;
                    case 't':
                        IF c=='T'
                        THEN width=x;
+#ifndef vax
                        ELSE vptr--;
                        ELSE vptr--;
+#else
+                       ELSE dptr--;
+#endif
                        FI
                        IF width
                        THEN width -= charpos()%width;
                        FI
                        break;
                    default:
                        FI
                        IF width
                        THEN width -= charpos()%width;
                        FI
                        break;
                    default:
+#ifndef vax
                        printc(c); vptr--;
                        printc(c); vptr--;
+#else
+                       printc(c); dptr--;
+#endif
                }
 
                IF s==0
                }
 
                IF s==0
@@ -189,7 +232,11 @@ printdate(tvec)
 {
        REG INT         i;
        REG STRING      timeptr;
 {
        REG INT         i;
        REG STRING      timeptr;
+#ifndef EDDT
        timeptr = ctime(&tvec);
        timeptr = ctime(&tvec);
+#else
+       timeptr="????????????????????????";
+#endif
        FOR i=20; i<24; i++ DO *digitptr++ = *(timeptr+i); OD
        FOR i=3; i<19; i++ DO *digitptr++ = *(timeptr+i); OD
 } /*printdate*/
        FOR i=20; i<24; i++ DO *digitptr++ = *(timeptr+i); OD
        FOR i=3; i<19; i++ DO *digitptr++ = *(timeptr+i); OD
 } /*printdate*/
@@ -249,7 +296,7 @@ printoct(o,s)
             FI
        FI
        FOR i=0;i<=11;i++
             FI
        FI
        FOR i=0;i<=11;i++
-       DO digs[i] = po&7; po =>> 3; OD
+       DO digs[i] = po&7; po >>= 3; OD
        digs[10] &= 03; digs[11]=0;
        FOR i=11;i>=0;i--
        DO IF digs[i] THEN break; FI OD
        digs[10] &= 03; digs[11]=0;
        FOR i=11;i>=0;i--
        DO IF digs[i] THEN break; FI OD
@@ -257,27 +304,47 @@ printoct(o,s)
        DO *digitptr++=digs[i]+'0'; OD
 }
 
        DO *digitptr++=digs[i]+'0'; OD
 }
 
+#ifndef vax
 printdbl(lx,ly,fmat,base)
 INT lx, ly; char fmat; int base;
 printdbl(lx,ly,fmat,base)
 INT lx, ly; char fmat; int base;
+#else
+printdbl(lxy,fmat,base)
+L_INT lxy; char fmat; int base;
+#endif
 {      int digs[20]; int *dptr; char k;
 {      int digs[20]; int *dptr; char k;
+#ifndef MULD2
+       register char *cp1;
+       cp1=digs; if ((lxy&0xFFFF0000L)==0xFFFF0000L) {*cp1++='-'; lxy= -lxy;}
+       sprintf(cp1,base==16 ? "%X" : "%D",lxy);
+       cp1=digs; while (*digitptr++= *cp1++); --digitptr;
+#else
        L_REAL f ,g; long q;
        L_REAL f ,g; long q;
+#ifdef vax
+       INT lx,ly;
+       ly=lxy; lx=(lxy>>16)&0xFFFF;
+#endif
        dptr=digs;
        dptr=digs;
-       IF fmat!='D'
-       THEN    f=leng(lx); f *= itol(1,0); f += leng(ly);
-               IF fmat=='x' THEN *digitptr++='#'; FI
-       ELSE    f=itol(lx,ly);
+       IF fmat=='D' ORF fmat=='r'
+       THEN    f=itol(lx,ly);
                IF f<0 THEN *digitptr++='-'; f = -f; FI
                IF f<0 THEN *digitptr++='-'; f = -f; FI
+       ELSE
+               IF lx==-1
+               THEN *digitptr++='-'; f=leng(-ly);
+               ELSE f=leng(lx); f *= itol(1,0); f += leng(ly);
+               FI
+               IF fmat=='x' THEN *digitptr++='#'; FI
        FI
        WHILE f
        DO  q=f/base; g=q;
            *dptr++ = f-g*base;
            f=q;
        OD
        FI
        WHILE f
        DO  q=f/base; g=q;
            *dptr++ = f-g*base;
            f=q;
        OD
-       IF dptr==digs THEN *dptr++=0; FI
+       IF dptr==digs ORF dptr[-1]>9 THEN *dptr++=0; FI
        WHILE dptr!=digs
        DO  k = *--dptr;
            *digitptr++ = (k+(k<=9 ? '0' : 'a'-10));
        OD
        WHILE dptr!=digs
        DO  k = *--dptr;
            *digitptr++ = (k+(k<=9 ? '0' : 'a'-10));
        OD
+#endif
 }
 
 iclose()
 }
 
 iclose()
@@ -296,7 +363,11 @@ oclose()
 
 endline()
 {
 
 endline()
 {
+#ifndef vax
        IF charpos()>=maxpos
        IF charpos()>=maxpos
+#else
+       IF maxpos<=charpos()
+#endif
        THEN printf("\n");
        FI
 }
        THEN printf("\n");
        FI
 }