mirror of
https://github.com/PDP-10/its.git
synced 2026-05-01 05:59:11 +00:00
294 lines
7.0 KiB
Plaintext
294 lines
7.0 KiB
Plaintext
title STYLOG -- Convert a PTY output file to a ascii log file
|
||
|
||
X=0
|
||
a=1
|
||
b=2
|
||
c=3
|
||
d=4
|
||
e=5
|
||
f=6
|
||
t=7
|
||
tt=10
|
||
|
||
sp=17
|
||
p=sp
|
||
|
||
pdllen==40
|
||
buflen==1000
|
||
|
||
dski==1
|
||
dsko==2
|
||
dspc==3
|
||
tboc==4
|
||
tyic==5
|
||
|
||
call=pushj sp,
|
||
ret=popj sp,
|
||
pjrst==jrst ;JRST hack JRST, I.e. PUSHJ SP, ? RET
|
||
|
||
$$RFN==-1 ;we want the RFN routine
|
||
$$SWITCH==-1 ;we want to handle switches
|
||
|
||
.insrt syseng;rfn >
|
||
|
||
define syscal a,b
|
||
.call [setz ? sixbit/a/ ? b ? setz+errret+calerr] termin
|
||
|
||
argi==1000,,0
|
||
val==2000,,0
|
||
errret==3000,,0
|
||
cnt==4000,,0
|
||
cnti==5000,,0
|
||
|
||
define type &string
|
||
move t,[440700,,[ascii string]]
|
||
movei tt,<.length string>
|
||
syscal siot,[argi dspc ? t ? tt]
|
||
.lose %lsfil
|
||
termin
|
||
|
||
go: move sp,[-pdllen,,pdl]
|
||
syscal open,[cnti .uao+%TJDIS
|
||
argi dspc
|
||
[sixbit /TTY/]]
|
||
.lose %lsfil
|
||
|
||
syscal open,[cnti .uai ;TTY input channel
|
||
argi tyic
|
||
[sixbit /TTY/]]
|
||
.lose %lsfil
|
||
|
||
syscal open,[cnti .uio+%TJSIO ;super-image output channel
|
||
argi tboc ; (TTY Buffer Output Channel)
|
||
[sixbit /TTY/]]
|
||
.lose %lsfil
|
||
.suset [.rsnam,,ifile+$dir]
|
||
|
||
.break 12,[5,,jclbuf] ;Get JCL
|
||
|
||
skipn jclbuf ;did he give JCL?
|
||
jrst help ; nope, give him help
|
||
|
||
ldb b,[350700,,jclbuf]
|
||
camn b,"? ;asking for help?
|
||
jrst help ; give it to him!
|
||
|
||
move d,[440700,,jclbuf]
|
||
movei b,ifile ;read it as the INPUT file
|
||
call rfn"rfn
|
||
|
||
skipn outp ;is this the output file instead?
|
||
jrst indef ; no, go default the input
|
||
|
||
move x,[ifile,,ofile]
|
||
blt x,ofile+3 ;make it the output file instead
|
||
|
||
setzm ifile
|
||
move x,[ifile,,ifile+1] ;Clear the input file block
|
||
blt x,ifile+3
|
||
|
||
movei b,ifile
|
||
call rfn"rfn ;read the input file again.
|
||
|
||
indef: skipn ifile+$dev ;was the device given?
|
||
jrst [move x,[sixbit /DSK/]
|
||
movem x,ifile+$dev
|
||
jrst .+1]
|
||
skipn ifile+$fn1 ;was the FN1 specified?
|
||
jrst [move x,[sixbit /STYOUT/]
|
||
movem x,ifile+$fn1
|
||
jrst .+1]
|
||
skipn ifile+$fn2 ;was the fn2 specified?
|
||
jrst [move x,[sixbit />/]
|
||
movem x,ifile+$fn2
|
||
jrst .+1]
|
||
skipn ifile+$dir ;was the dir specified?
|
||
.suset [.rsname,,ifile+$dir] ; use the default
|
||
|
||
syscal open,[cnti .uii
|
||
argi dski
|
||
ifile+$dev
|
||
ifile+$fn1
|
||
ifile+$fn2
|
||
ifile+$dir]
|
||
.lose %lsfil
|
||
|
||
outdef: skipn ttyswp ;is it /T
|
||
skipe out ; with no output file?
|
||
caia ; nope
|
||
jrst out ; yes, don't write a file
|
||
|
||
skipn ofile+$dev ;was the default specified?
|
||
jrst [move x,ifile+$dev
|
||
movem x,ofile+$dev
|
||
jrst .+1]
|
||
skipn ofile+$fn1 ;was the fn1 specivied?
|
||
jrst [move x,ifile+$fn1 ; no, use the input default!
|
||
movem x,ofile+$fn1
|
||
jrst .+1]
|
||
skipn ofile+$fn2 ;was the fn2 spec'd?
|
||
jrst [move x,[sixbit /STYLOG/]
|
||
movem x,ofile+$fn2
|
||
jrst .+1]
|
||
skipn ofile+$dir ;was the dir spec'd?
|
||
jrst [move x,ifile+$dir
|
||
movem x,ofile+$dir
|
||
jrst .+1]
|
||
|
||
syscal open,[cnti .uao ;open output channel
|
||
argi dsko
|
||
ofile+$dev
|
||
ofile+$fn1
|
||
ofile+$fn2
|
||
ofile+$dir]
|
||
.lose %lsfil
|
||
|
||
|
||
out: skipe ttyswp ;are we typeing?
|
||
jrst [type /C/ ; yes, clear the screen first!
|
||
jrst .+1]
|
||
|
||
setz b, ;not at end of file...
|
||
setz c, ;but have no characters left in buffer
|
||
outlop: call getchr ;get a character
|
||
skipe ttyswp ;is the /T switch on?
|
||
.iot tboc,d ; yes, type it out
|
||
|
||
skipn ttyswp ;is it /T
|
||
skipe out ; with no output file?
|
||
caia ; nope
|
||
jrst outlop ; yes, don't write a file
|
||
|
||
caige d,200 ;is it ascii?
|
||
.iot dsko,d ; yes, output it
|
||
|
||
cail d,%TDMAX ;is it legal?
|
||
jrst [type /AUnknown %TD code received!/
|
||
jrst outlop] ;continue
|
||
|
||
cail d,200 ;is it a buffer code?
|
||
xct buftab-200(d) ; yes, dispatch to an operation to handle
|
||
;it
|
||
jrst outlop ;keep on trucking!
|
||
|
||
|
||
;;; get a eight-bit character from disk
|
||
getchr: sosl c ;are there still chars in buffer?
|
||
jrst [ildb d,a ; yes, get the character
|
||
ret] ; and return it
|
||
skipe b ;is there more?
|
||
jrst [.close dsko, ; nope!
|
||
.logout 1,] ; all done!
|
||
|
||
move a,[444400,,buffer]
|
||
movei b,buflen
|
||
syscal SIOT,[argi dski ? a ? b]
|
||
.lose 1400
|
||
move a,[441000,,buffer]
|
||
movei c,buflen*4
|
||
movei d,(b)
|
||
imuli d,4
|
||
subi c,(d) ;approximate
|
||
jrst getchr ;and actually get the character
|
||
|
||
jclbuf: block 100
|
||
|
||
buffer: block buflen
|
||
block 2
|
||
|
||
buftab: call 4flush ;200 - %TDMOV flush 4 bytes
|
||
call 2flush ;201 - %TDMV1 flush 2 bytes
|
||
jfcl ;202 - %TDEOF nothing I can think of
|
||
jfcl ;203 - %TDEOL nothing I can think of
|
||
jfcl ;204 - %TDDLF nothing I can think of
|
||
jfcl ;205 - %TDMTF Ignore, no motors in files!
|
||
jfcl ;206 - %TDMTN Ignore, no motors in files!
|
||
call crlf ;207 - %TDCRL new line
|
||
jfcl ;210 - %TDNOP nothing at all
|
||
.iot dsko,[^H] ;211 - %TDBS backspace
|
||
.iot dsko,[^J] ;212 - %TDLF linefeed
|
||
.iot dsko,[^M] ;213 - %TDCR carraige return
|
||
jfcl ;214 - %TDORS Output reset?? Foo!
|
||
jfcl ;215 - %TDQOT quote next char
|
||
.iot dsko,[40] ;216 - %TDFS Space forward one
|
||
call 2flush ;217 - %TDMV0 flush 2 bytes
|
||
call [skipe pausep ;220 - %TDCLR clear screen ... just terpri
|
||
jrst [type /STZ/
|
||
.iot tyic,x
|
||
type /R/
|
||
jrst .+1]
|
||
pjrst crlf]
|
||
.iot dsko,[^G] ;221 - %TDBEL [DING]
|
||
jfcl ;222 - %TDINI System startup???
|
||
call [call crlf ;223 - %TDILP insert line
|
||
pjrst 1flush]
|
||
call [call crlf ;224 - %TDDLP delete line (insert a CRLF to
|
||
pjrst 1flush] ; avoid confusions
|
||
jfcl ;225 - %TDICP nothing I can think of
|
||
jfcl ;226 - %TDDCP nothing I can think of
|
||
jfcl ;227 - %TDBOW nothing I can think of
|
||
jfcl ;230 - %TDRST nothing I can think of
|
||
jfcl ;231 - I dunno what this is
|
||
jfcl ;232 - I dunno what this is
|
||
|
||
crlf: .iot dsko,[^M] ;CR
|
||
.iot dsko,[^J] ;LF
|
||
ret
|
||
|
||
1flush: call getchr ;Get a character
|
||
skipe ttyswp ;type it?
|
||
.iot tboc,d ; yes, gotta do it!
|
||
ret
|
||
|
||
2flush: call 1flush ;flush twice
|
||
pjrst 1flush
|
||
|
||
4flush: call 2flush ;flush twice twice
|
||
pjrst 2flush
|
||
|
||
pdl: block pdllen
|
||
|
||
$DEV==0 ;offsets into a file block
|
||
$FN1==1
|
||
$FN2==2
|
||
$DIR==3
|
||
|
||
IFILE: block 4 ;input file names go here
|
||
OFILE: block 4 ;output file names go here
|
||
outp: 0 ;non-zero if we got an output file
|
||
|
||
rsixtp: caie a,"/ ;is it a start of a switch?
|
||
cain a,"(
|
||
jrst popj1
|
||
|
||
caie a,"_ ;_ terminates
|
||
ret
|
||
setom outp ;note we got an output file first
|
||
popj1: aos (sp) ;skip return
|
||
ret
|
||
|
||
switch: cain a,"T ;is it a T?
|
||
setom ttyswp ; yes, so we want to type
|
||
cain a,"P ;is it a P?
|
||
setom pausep ; yes, so we want to pause on %TDCLR
|
||
ret
|
||
|
||
ttyswp: 0
|
||
pausep: 0
|
||
|
||
|
||
calerr: 0 ;error return for SYSCAL's
|
||
|
||
help: type /AUsage: :STYLOG <output file>_<input file>
|
||
Default output file is to use the same FN1 as the input file
|
||
or vice versa, and FN2 of STYLOG
|
||
|
||
There are 2 switches, T and P:
|
||
T means to print the file on the TTY instead, unless an explicit output file
|
||
was given.
|
||
P means to pause before clearing the screen.
|
||
/
|
||
.logout 1,
|
||
|
||
end go
|