1
0
mirror of https://github.com/PDP-10/its.git synced 2026-01-13 23:36:30 +00:00

DOWNLD - print file in super-image mode to TTY.

This commit is contained in:
Lars Brinkhoff 2018-10-15 13:29:38 +00:00
parent 935e53a458
commit b1c77518fe
3 changed files with 167 additions and 0 deletions

View File

@ -211,6 +211,10 @@ expect ":KILL"
respond "*" ":midas sys2;ts stty_archy;stty\r"
expect ":KILL"
# DOWNLD
respond "*" ":midas sys3;ts downld_sysen1;downld\r"
expect ":KILL"
# OCTPUS
respond "*" ":midas sys2;ts octpus_gren;octpus\r"
expect ":KILL"

View File

@ -71,6 +71,7 @@
- DIRED, directory editor (independent from EMACS DIRED).
- DMPCPY, crash dump copy dragon.
- DOCTOR, KMP's psychiatrist game.
- DOWNLD, print file in super-image mode to TTY.
- DP Device, 7-bit conversions?
- DQ Device, for doing hostname resolutions. Used by COMSAT.
- DSKDEV/D, short disk device.

162
src/sysen1/downld.33 Executable file
View File

@ -0,0 +1,162 @@
title DOWNLD - Print file in super-image mode to tty with interrupts locked out
;; Author: KMP
;;
;; Notes:
;;
;; Block mode io would help speed a lot.
;;
;; TTY input buffer should be regularly flushed so that input buffer overflow
;; from line noise doesn't cause ITS to type ^G's in middle of this.
;;
;; Should do 8-bit i/o
.insrt syseng;$call macro
;; Register Allocation
a=:1
b=:2
c=:3
d=:4
e=:5
ch=:6
part=:7
p=:17
;; Channel Allocation
in.tty==:0
ou.tty==:1
in.fil==:2
;; Random Compile-Time Constants
jclsiz==20 ; Give us 16. x 5 = 80. chars of JCL
outsiz==2048. ; 2K words of storage
;; Useful macro support
define syscal op,args
.call [setz ? sixbit /op/ ? args ((setz))]
termin
call=:<pushj p,> ; Just say "call routine"
return=:<popj p,> ; Just say "return"
skip.=:<aos (p)> ; Use before return to get skip-return
;; Allocate Working Areas
jclbuf: block jclsiz ; Allocate JCL buffer
-1 ; end marker
outbuf: block outsiz ; Allocate output buffer
-1 ; end marker
;; Flags and other memory
fn1: 0
fn2: sixbit /DOWNLD/
dev: sixbit /DSK/
dir: 0
file: ; for referencing previous 4
count: 0
j.end: -1 ; If zero, end of JCL
downld: .suset [-2,,[ .RHSNAME,,DIR ? .RXUNAME,,FN1 ]]
jclbeg: .break 12,[..RJCL,,JCLBUF] ; Read JCL
move a,[440700,,JCLBUF] ; Init JCLBUF byte-pointer in a
move part,[-4] ; Set part to -4
j.get: setz c, ; Zero out c
setz d, ; Zero out d
j.whit: move b,a ; Get a byte-pointer in b
ildb ch,b ; Get a char
caie ch,^I ; If a tab
cain ch,40 ; or a rubout
jrst [move a,b ; update byte pointer
jrst j.whit] ; and loop
j.get1: move b,[440600,,d] ; 1-word buffer in d, pointer in b
j.loop: aos c ; Increment char count
ildb ch,a ; Load char from JCLBUF into ch
caie ch,^M ; If char is a carriage return
cain ch,^C ; or a control-c
jrst j.exit ; or a control-_
cain ch,^_ ; then we're done
jrst j.exit ;
cain ch,": ; Look for colon,
jrst j.coln
cain ch,"; ; Look for semi,
jrst j.semi
cain ch,40 ; Look for space,
jrst j.more
caile c,6 ; Skip if greater than 6 chars
jrst j.loop ; back to start of loop
cail ch,140 ; Maybe upcase
subi ch,40 ; Subtract 40
subi ch,40 ; subtract off some more
andi ch,77 ; Get rid of this bit
idpb ch,b ; Deposit
jrst j.loop ; Try for another char
j.coln: movem d,dev ; Device move
jrst j.next
j.semi: movem d,dir
jrst j.next
j.exit: setzm j.end ; Say we are done
skipn d ; If no text,
jrst openup ; Go print file
j.more: movem d,file(part) ; Move to default location
aosl part ; Increment. Skip if in range
move part,[-4] ; mod negative 4
j.next: skipe j.end ; If done,
jrst j.get ; go get more JCL
openup: $call open,[#in.tty,[sixbit /tty/]][][#.uai]
.lose %lsfil
$call open,[#ou.tty,[sixbit /tty/]][][#.uao\%tjsio]
.lose %lsfil
$call open,[#in.fil,dev,fn1,fn2,dir][][#.uai]
.lose %lsfil
ttyset: $call ttyget,[#in.tty][a,b,c]
jrst die
ior c,[2,,]
$call ttyset,[#in.tty,0,0,c]
jrst die
movei c,[%tdqot] ; Get a quote in c
pr.top: .iot in.fil,a ; Get a char
hlrz b,a ; Get left half in b
cain b,-1 ; Check for left half of -1
jrst done ; Exit at end of file
cain a,^C ; If ^C
jrst done ; Exit also
.iot ou.tty,c ; Output a quote
.iot ou.tty,a ; Output a char
jrst pr.top
done: .iot ou.tty,[^M]
.iot ou.tty,[^J]
$call close,[#in.file]
.lose %lsfil
$call close,[#ou.tty]
.lose %lsfil
$call close,[#in.tty]
.lose %lsfil
die: .logout 1,
end downld