mirror of
https://github.com/PDP-10/its.git
synced 2026-01-14 07:40:05 +00:00
IMPRNT - image mode printer.
This commit is contained in:
parent
97559f4b9b
commit
7c323de83c
@ -881,6 +881,13 @@ respond "*" ":midas sys1; ts imload_syseng; imload\r"
|
||||
expect ":KILL"
|
||||
respond "*" ":link sys1; ts imtran, sys1; ts imload\r"
|
||||
|
||||
# IMPRNT
|
||||
respond "*" ":midas sys1; ts imprnt_syseng; imprnt\r"
|
||||
expect ":KILL"
|
||||
respond "*" ":link sys1; ts imprin, sys1; ts imprnt\r"
|
||||
respond "*" ":link sys1; ts ardprn, sys1; ts imprnt\r"
|
||||
respond "*" ":link sys1; ts tekprn, sys1; ts imprnt\r"
|
||||
|
||||
# TJ6
|
||||
respond "*" ":midas sysbin;_tj6;tj6\r"
|
||||
expect ":KILL"
|
||||
|
||||
@ -95,6 +95,7 @@
|
||||
- IDLE, list idle users.
|
||||
- IFILE, Chaosnet file service.
|
||||
- IMLOAD/IMTRAN, load or translate an Imlac program.
|
||||
- IMPRNT, image mode printer.
|
||||
- INIT, a helper program for LOGIN, LOGOUT, and other script files.
|
||||
- INLINE, reads line from TTY and adds to JCL (for DDT init files).
|
||||
- INQUIR, user account database.
|
||||
|
||||
226
src/syseng/imprnt.6
Executable file
226
src/syseng/imprnt.6
Executable file
@ -0,0 +1,226 @@
|
||||
TITLE IMPRNT -- IMAGE MODE PRINTER
|
||||
|
||||
; buffers
|
||||
PDLLEN==40.
|
||||
PDL: BLOCK PDLLEN
|
||||
|
||||
BUFLEN==40.
|
||||
BUF: BLOCK BUFLEN
|
||||
BUFFER: BLOCK 101
|
||||
|
||||
; channels
|
||||
IN=1
|
||||
TOUT=2
|
||||
TIN=3
|
||||
TAOUT=4
|
||||
|
||||
; acs
|
||||
A=1
|
||||
B=2
|
||||
C=3
|
||||
D=4
|
||||
E=5
|
||||
F=6
|
||||
|
||||
FILE=7 ; file to print
|
||||
DEV=7 ; device
|
||||
NM1=10 ; name1
|
||||
NM2=11 ; name2
|
||||
SNM=12 ; sname
|
||||
|
||||
BPTR=13 ; byte pointer to command string
|
||||
OBPTR=14 ; old byte pointer
|
||||
CNT=15 ; count for printing pictures
|
||||
|
||||
P=17
|
||||
|
||||
|
||||
START: .SUSET [.RXJNAM,,JNAME']
|
||||
.OPEN TOUT,[SIXBIT / ETTY/]
|
||||
.VALUE
|
||||
.OPEN TIN,[SIXBIT / TTY/]
|
||||
.VALUE
|
||||
.OPEN TAOUT,[SIXBIT / 1TTY/]
|
||||
.VALUE
|
||||
|
||||
MOVE P,[-PDLLEN,,PDL-1] ; set up PDL
|
||||
|
||||
; MOVE F,JNAME
|
||||
; CAME F,['TEKPRN]
|
||||
; JRST START
|
||||
; PUT IN IMLAC IN TEK MODE
|
||||
; SEND OUT DIRECTLY ANYTHING FOLLOWING ALTMODE
|
||||
|
||||
SETZM BUF
|
||||
MOVE A,[BUF,,BUF+1]
|
||||
BLT A,BUF+BUFLEN-1 ; zero command buffer
|
||||
|
||||
.BREAK 12,[6,,FILE] ; read DDTs print defaults
|
||||
HLRZS DEV ; set up device correctly
|
||||
EXCH SNM,NM1 ; DDT uses funny order
|
||||
EXCH NM1,NM2
|
||||
.BREAK 12,[5,,BUF] ; read JCL line
|
||||
MOVE BPTR,[440700,,BUF]
|
||||
|
||||
INIT: PUSHJ P,SCNAME ; parse names
|
||||
|
||||
.SUSET [.SSNAME,,SNM] ; set sname
|
||||
FDELE: HRLI DEV,'& ; image mode
|
||||
.OPEN IN,FILE ; open
|
||||
JRST FAIL ; open failed
|
||||
|
||||
WIN: SETZM CNT
|
||||
JRST GOPIC
|
||||
|
||||
RCHR: JUMPN CNT,RCHR1 ; skip if buffer needs filling
|
||||
|
||||
; fill input buffer
|
||||
MOVE A,[-100,,BUFFER]
|
||||
.IOT IN,A
|
||||
MOVE B,[^C_29.] ; put ^C in last word -- never get
|
||||
MOVEM B,(A) ; to it if file doesn't run out
|
||||
MOVEI CNT,500 ; count of 500 characters
|
||||
MOVE BPTR,[440700,,BUFFER]
|
||||
|
||||
; output character
|
||||
RCHR1: SOS CNT
|
||||
ILDB A,BPTR ; get character
|
||||
CAIN A,^C ; if ^C, done
|
||||
JRST EXIT ; done
|
||||
CAIN A,^L ; if ^L, new picture
|
||||
JRST NEWPIC ; new picture
|
||||
MOVE F,JNAME
|
||||
CAME F,['ARDPRN]
|
||||
JRST RCHR2
|
||||
CAIL A,40
|
||||
JRST RCHR2
|
||||
CAIL A,34
|
||||
IORI A,200
|
||||
RCHR2: .IOT TOUT,A ; output it
|
||||
JRST RCHR ; loop
|
||||
|
||||
; read a character to continue
|
||||
; ^Q, ^S, and ^G all mean quit
|
||||
|
||||
NEWPIC: .IOT TIN,A ; read from tty
|
||||
CAIE A,^S
|
||||
CAIN A,^Q ; means seen enough
|
||||
JRST EXIT
|
||||
CAIN A,^G
|
||||
JRST EXIT
|
||||
|
||||
; here to start printing a new picture
|
||||
|
||||
GOPIC: .IOT TOUT,[^M]
|
||||
.IOT TOUT,[^J]
|
||||
.IOT TAOUT,[^P]
|
||||
.IOT TAOUT,["C]
|
||||
JRST RCHR ; read a character
|
||||
|
||||
EXIT: MOVE A,JNAME
|
||||
CAME A,['ARDPRN]
|
||||
JRST EXIT0
|
||||
IRP X,,[235,177,"N,"t,"N,234]
|
||||
MOVEI A,X
|
||||
.IOT TOUT,A
|
||||
TERMIN
|
||||
EXIT0: IRP X,,[%TDMV0,0,0]
|
||||
MOVEI A,X
|
||||
.IOT TOUT,A
|
||||
TERMIN
|
||||
.CALL [SETZ ? SIXBIT /SCPOS/ ? 1000,,TOUT ? 1000,,0 ? SETZI 0]
|
||||
JFCL
|
||||
|
||||
; set DDT's print defaults
|
||||
EXIT1: HRLZS DEV ; device is left justified
|
||||
EXCH NM1,NM2 ; put names back in DDT order
|
||||
EXCH NM1,SNM
|
||||
.BREAK 12,[400006,,FILE] ; set DDT's print defaults
|
||||
; close channels
|
||||
.CLOSE TOUT,
|
||||
.CLOSE TIN,
|
||||
.CLOSE IN,
|
||||
; exit
|
||||
.VALUE [ASCIZ /:KILL
|
||||
/]
|
||||
|
||||
; open failed
|
||||
|
||||
FAIL: MOVEI A,[ASCIZ /OPEN FAILED?
|
||||
/]
|
||||
EXITM: PUSHJ P,PMESS ; print message
|
||||
JRST EXIT ; and exit
|
||||
|
||||
; command line parser
|
||||
|
||||
SCNAME: MOVE C,[-2,,NM1]
|
||||
SCNGET: PUSHJ P,GETSYL ; return break in A, syl in B
|
||||
JUMPE B,SCNX ; no syls
|
||||
CAIN A,': ; device?
|
||||
HLRM B,DEV
|
||||
CAIN A,'; ; user?
|
||||
MOVEM B,SNM
|
||||
JUMPG A,SCNGET ; not space, get more syllable
|
||||
MOVEM B,(C)
|
||||
JUMPL A,SCNX ; control terminates
|
||||
AOBJN C,SCNGET ; get more
|
||||
SCNX: POPJ P,
|
||||
|
||||
; get single syllable
|
||||
|
||||
GETSYL: PUSH P,[0] ; initialize syllable on stack
|
||||
MOVE B,[440600,,0(P)] ; initialize byte pointer to stack
|
||||
GETSLP: MOVE OBPTR,BPTR ; save old byte pointer
|
||||
ILDB A,BPTR
|
||||
SKIPN A ; end of string?
|
||||
JRST GETSX ; end
|
||||
CAIN A,^X ; default first name?
|
||||
JRST GET1
|
||||
CAIN A,^Y ; default second name?
|
||||
JRST GET2
|
||||
CAIN A,^Q ; quote?
|
||||
JRST GETQOT ; yes
|
||||
SUBI A,40 ; not quote, make sixbit
|
||||
JUMPL A,GETSX ; control=exit
|
||||
JUMPE A,GETSP ; leading spaces flushed
|
||||
CAIE A,':
|
||||
CAIN A,';
|
||||
JRST GETSX ; ";" or ":" terminate
|
||||
GETSPT: CAIL A,100 ; lc?
|
||||
SUBI A,40 ; make upper case
|
||||
TLNE B,770000 ; check fit
|
||||
IDPB A,B ; store character
|
||||
JRST GETSLP
|
||||
; get quoted character
|
||||
GETQOT: ILDB A,BPTR ; get char to quote
|
||||
SKIPN A ; zero
|
||||
JRST GETSX ; exit
|
||||
SUBI A,40 ; 6bit
|
||||
JUMPGE A,GETSPT ; can't ^Q a control
|
||||
JRST GETSX
|
||||
|
||||
GET1: MOVE B,NM1
|
||||
SKIPA
|
||||
GET2: MOVE B,NM2
|
||||
SETZ A, ; make delimiter be space
|
||||
SKIPE (P)
|
||||
JRST XYTERM ; ^X or ^Y is also term
|
||||
POP P,0
|
||||
POPJ P,
|
||||
GETSP: TLNE B,400000 ; six chars?
|
||||
JRST GETSLP ; no, loop
|
||||
GETSX: POP P,B ; restore syl
|
||||
POPJ P,
|
||||
XYTERM: MOVE BPTR,OBPTR ; restore old bptr
|
||||
JRST GETSX ; and do normal return
|
||||
|
||||
PMESS: HRLI A,440700
|
||||
PUSH P,B
|
||||
PMES1: ILDB B,A
|
||||
JUMPE B,PMES2
|
||||
.IOT TOUT,B
|
||||
JRST PMES1
|
||||
PMES2: POP P,B
|
||||
POPJ P,
|
||||
|
||||
END START
|
||||
Loading…
x
Reference in New Issue
Block a user