Research V5 development
authorDennis Ritchie <dmr@research.uucp>
Tue, 26 Nov 1974 23:13:21 +0000 (18:13 -0500)
committerDennis Ritchie <dmr@research.uucp>
Tue, 26 Nov 1974 23:13:21 +0000 (18:13 -0500)
Work on file usr/sys/dmr/lp.c
Work on file usr/c/efftab.s

Synthesized-from: v5

usr/c/efftab.s [new file with mode: 0644]
usr/sys/dmr/lp.c [new file with mode: 0644]

diff --git a/usr/c/efftab.s b/usr/c/efftab.s
new file mode 100644 (file)
index 0000000..6627f66
--- /dev/null
@@ -0,0 +1,279 @@
+/ c code tables
+
+.globl _efftab
+
+.data
+_efftab=.
+       30.;    ci30
+       31.;    ci30
+       32.;    ci30    / same as 30
+       33.;    ci30    / same as 31
+       80.;    ci80
+       70.;    ci70
+       71.;    ci70    / - like +
+       77.;    ci77
+       78.;    ci78
+       81.;    ci78
+       75.;    ci75
+       76.;    ci76
+       0
+.text
+
+/ ++,-- prefix, postfix
+ci30:
+%ai,n
+%abp,n
+%ab,n
+       IB1     A1
+
+%aip,n
+%adp,n
+%afp,n
+       I'      $^,A1
+
+%nbp*,n
+%ni*,n
+%nb*,n
+       F*
+       IB1     #1(R)
+
+%nip*,n
+%ndp*,n
+%nfp*,n
+       F*
+       I'      $^,#1(R)
+
+/ =
+ci80:
+%a,z
+%ad,zf
+       clrB1   A1
+
+%n*,z
+%nd*,zf
+       F*
+       clrB1   #1(R)
+
+%a,aw
+%ab,a
+       movBE   A2,A1
+
+%ab,n*
+%a,nw*
+       S*
+       movBE   #2(R),A1
+
+%a,n
+       S
+       movB1   R,A1
+
+%n*,aw
+%nb*,a
+       F*
+       movBE   A2,#1(R)
+
+%n*,ew*
+%nb*,e*
+       F*
+       S1*
+       movBE   #2(R1),#1(R)
+
+%n*,e
+       F*
+       S1
+       movB1   R1,#1(R)
+
+%e*,nw*
+%eb*,n*
+       S*
+       F1*
+       movBE   #2(R),#1(R1)
+
+%e*,n
+       S
+       F1*
+       movB1   R,#1(R1)
+
+%n*,nw*
+%nb*,n*
+       FS*
+       S*
+       movBE   #2(R),*(sp)+
+
+%n*,n
+       FS*
+       S
+       movBE   R,*(sp)+
+
+/ =| and =& ~
+ci78:
+%a,a
+       IBE     A2,A1
+
+%a,n
+       S
+       IB1     R,A1
+
+%n*,a
+       F*
+       IBE     A2,#1(R)
+
+%e*,n*
+       S*
+       F1*
+       IBE     #2(R),#1(R1)
+
+%e*,n
+       S
+       F1*
+       IBE     R,#1(R1)
+
+%n*,e*
+       F*
+       S1*
+       IBE     #2(R1),#1(R)
+
+%n*,e
+       F*
+       S1
+       IBE     R1,#1(R)
+
+%n*,n*
+       FS*
+       S*
+       IBE     #2(R),*(sp)+
+
+%n*,n
+       FS*
+       S
+       IBE     R,*(sp)+
+
+/ =& i
+ci77:
+%a,c
+       bicB1   $!C2,A1
+
+%a,n
+       S
+       com     R
+       bicB1   R,A1
+
+%n*,c
+       F*
+       bicB1   $!C2,#1(R)
+
+%e*,n
+       S
+       F1*
+       com     R
+       bicB1   R,#1(R1)
+
+%n*,e
+       F*
+       S1
+       com     R1
+       bicB1   R1,#1(R)
+
+%n*,n
+       FS*
+       S
+       com     R
+       bicB1   R,*(sp)+
+
+/ =+
+ci70:
+%n*,z
+%a,z
+
+%a,1
+       I'B1    A1
+
+%aw,aw
+       I       A2,A1
+
+%aw,nw*
+       S*
+       I       #2(R),A1
+
+%aw,n
+       S
+       I       R,A1
+
+%n*,1
+       F*
+       I'B1    #1(R)
+
+%ew*,nw*
+       S*
+       F1*
+       I       #2(R),#1(R1)
+
+%a,nw*
+       S*
+       movB1   A1',R1
+       I       #2(R),R1
+       movB1   R1,A1
+
+%a,n
+       S
+       movB1   A1',R1
+       I       R,R1
+       movB1   R1,A1
+
+%ew*,n
+       S
+       F1*
+       I       R,#1(R1)
+
+%nw*,n
+       SS
+       F*
+       I       (sp)+,#1(R)
+
+%n*,n
+       SS
+       F*
+       movB1   #1(R),R1
+       I       (sp)+,R1
+       movB1   R1,#1(R)
+
+/ =>>
+ci75:
+%a,1
+       asrB1   A1
+
+%n*,1
+       F*
+       asrB1   #1(R)
+
+%r,c
+       ash     $-C2,A1
+
+%r,n
+       S
+       neg     R
+       ash     R,A1
+
+/ =<<
+ci76:
+%a,1
+       aslB1   A1
+
+%n*,1
+       F*
+       aslB1   #1(R)
+
+%r,aw
+       ash     A2,A1
+
+%r,nw*
+       S*
+       ash     #2(R),A1
+
+%r,n
+       S
+       ash     R,A1
+
+.data
+.even
+
diff --git a/usr/sys/dmr/lp.c b/usr/sys/dmr/lp.c
new file mode 100644 (file)
index 0000000..20cfe33
--- /dev/null
@@ -0,0 +1,182 @@
+#
+/*
+ *     Copyright 1973 Bell Telephone Laboratories Inc
+ */
+
+/*
+ * LP-11 Line printer driver
+ */
+
+#include "../param.h"
+#include "../conf.h"
+#include "../user.h"
+
+#define        LPADDR  0177514
+
+#define        IENABLE 0100
+#define        DONE    0200
+
+#define        LPPRI   10
+#define        LPLWAT  50
+#define        LPHWAT  100
+#define        EJLINE  60
+#define        MAXCOL  80
+
+struct {
+       int lpsr;
+       int lpbuf;
+};
+
+struct  {
+       int     cc;
+       int     cf;
+       int     cl;
+       int     flag;
+       int     mcc;
+       int     ccc;
+       int     mlc;
+} lp11;
+
+#define        CAP     01
+#define        EJECT   02
+#define        OPEN    04
+
+#define        FORM    014
+
+lpopen(dev, flag)
+{
+
+       if(lp11.flag & OPEN || LPADDR->lpsr < 0) {
+               u.u_error = EIO;
+               return;
+       }
+       lp11.flag =| (CAP|EJECT|OPEN);
+       LPADDR->lpsr =| IENABLE;
+       lpcanon(FORM);
+}
+
+lpclose(dev, flag)
+{
+       lpcanon(FORM);
+       lp11.flag = 0;
+}
+
+lpwrite()
+{
+       register int c;
+
+       while ((c=cpass())>=0)
+               lpcanon(c);
+}
+
+lpcanon(c)
+{
+       register c1, c2;
+
+       c1 = c;
+       if(lp11.flag&CAP) {
+               if(c1>='a' && c1<='z')
+                       c1 =+ 'A'-'a'; else
+               switch(c1) {
+
+               case '{':
+                       c2 = '(';
+                       goto esc;
+
+               case '}':
+                       c2 = ')';
+                       goto esc;
+
+               case '`':
+                       c2 = '\'';
+                       goto esc;
+
+               case '|':
+                       c2 = '!';
+                       goto esc;
+
+               case '~':
+                       c2 = '^';
+
+               esc:
+                       lpcanon(c2);
+                       lp11.ccc--;
+                       c1 = '-';
+               }
+       }
+
+       switch(c1) {
+
+       case '\t':
+               lp11.ccc = (lp11.ccc+8) & ~7;
+               return;
+
+       case FORM:
+       case '\n':
+               if((lp11.flag&EJECT) == 0 ||
+                  lp11.mcc!=0 || lp11.mlc!=0) {
+                       lp11.mcc = 0;
+                       lp11.mlc++;
+                       if(lp11.mlc >= EJLINE && lp11.flag&EJECT)
+                               c1 = FORM;
+                       lpoutput(c1);
+                       if(c1 == FORM)
+                               lp11.mlc = 0;
+               }
+
+       case '\r':
+               lp11.ccc = 0;
+               return;
+
+       case 010:
+               if(lp11.ccc > 0)
+                       lp11.ccc--;
+               return;
+
+       case ' ':
+               lp11.ccc++;
+               return;
+
+       default:
+               if(lp11.ccc < lp11.mcc) {
+                       lpoutput('\r');
+                       lp11.mcc = 0;
+               }
+               if(lp11.ccc < MAXCOL) {
+                       while(lp11.ccc > lp11.mcc) {
+                               lpoutput(' ');
+                               lp11.mcc++;
+                       }
+                       lpoutput(c1);
+                       lp11.mcc++;
+               }
+               lp11.ccc++;
+       }
+}
+
+lpstart()
+{
+       register int c;
+
+       while (LPADDR->lpsr&DONE && (c = getc(&lp11)) >= 0)
+               LPADDR->lpbuf = c;
+}
+
+lpint()
+{
+       register int c;
+
+       lpstart();
+       if (lp11.cc == LPLWAT || lp11.cc == 0)
+               wakeup(&lp11);
+}
+
+lpoutput(c)
+{
+       if (lp11.cc >= LPHWAT)
+               sleep(&lp11, LPPRI);
+       putc(c, &lp11);
+       spl4();
+       lpstart();
+       spl0();
+}