BSD 3 development
[unix-history] / usr / src / cmd / adb / input.c
index ce52a3e..1c2531b 100644 (file)
@@ -6,12 +6,13 @@
  */
 
 #include "defs.h"
  */
 
 #include "defs.h"
+SCCSID(@(#)input.c     2.2);
 
 INT            mkfault;
 CHAR           line[LINSIZ];
 INT            infile;
 CHAR           *lp;
 
 INT            mkfault;
 CHAR           line[LINSIZ];
 INT            infile;
 CHAR           *lp;
-CHAR           lastc EOR;
+CHAR           peekc,lastc = EOR;
 INT            eof;
 
 /* input routines */
 INT            eof;
 
 /* input routines */
@@ -35,12 +36,18 @@ readchar()
        THEN    lastc=EOF;
        ELSE    IF lp==0
                THEN    lp=line;
        THEN    lastc=EOF;
        ELSE    IF lp==0
                THEN    lp=line;
+#ifdef EDDT
+                       getcon(lp); eof=0; while (*lp++!=EOR);
+#else
                        REP eof = read(infile,lp,1)==0;
                            IF mkfault THEN error(0); FI
                        PER eof==0 ANDF *lp++!=EOR DONE
                        REP eof = read(infile,lp,1)==0;
                            IF mkfault THEN error(0); FI
                        PER eof==0 ANDF *lp++!=EOR DONE
+#endif
                        *lp=0; lp=line;
                FI
                        *lp=0; lp=line;
                FI
-               IF lastc = *lp THEN lp++; FI
+               IF lastc = peekc THEN peekc=0;
+               ELIF lastc = *lp THEN lp++;
+               FI
        FI
        return(lastc);
 }
        FI
        return(lastc);
 }
@@ -78,4 +85,22 @@ STRING               deformat;
        IF fptr!=deformat THEN *fptr++ = '\0'; FI
 }
 
        IF fptr!=deformat THEN *fptr++ = '\0'; FI
 }
 
-
+#ifdef EDDT
+getcon(cs) register char *cs; {
+register char *p=cs;
+for(;;) {
+       putchar(*p++=getcnsl());
+       if (p[-1]=='\r') {putchar(p[-1]='\n'); *p++='\0'; return;}
+       if (p[-1]=='\\') {p[-1]=getcnsl(); continue;}
+       if (p[-1]=='#') {p -= 2; continue;}
+       if (p[-1]=='@') {putchar('\r'); putchar('\n'); p=cs; continue;}
+}}
+getcnsl() {
+# define RXCS  32  /*  receiver control/staus */
+# define RXDB  33  /*  receiver data */
+# define RXCS_DONE  0x80  /*  receiver done */
+while ((mfpr(RXCS) & RXCS_DONE)==0);
+return (mfpr(RXDB) & 0177);
+}
+#endif