From 5d87874fb104ad5907f15cd284ac4f8efa171048 Mon Sep 17 00:00:00 2001 From: Adam Sampson Date: Wed, 9 May 2018 00:45:18 +0100 Subject: [PATCH] Allow filenames to be specified as JCL to VERSA. This reworks VERSA's test mode so that you can specify an arbitrary list of filenames as JCL, and have them rasterised either as SUPDUP graphics (with /D) or as Harvard scan files in .TEMP.; (by default). --- src/dcp/versa.211 | 156 ++++++++++++++++++++++++++++++++++------------ 1 file changed, 117 insertions(+), 39 deletions(-) diff --git a/src/dcp/versa.211 b/src/dcp/versa.211 index 2368e225..ce168b1c 100644 --- a/src/dcp/versa.211 +++ b/src/dcp/versa.211 @@ -262,6 +262,13 @@ ifg ,[+]a!termin commen ~ Packages and subroutines +Package JCL + + GO() + Non-spooler mode: parses input filenames from the JCL, and + outputs them either as Gould scan files using the HARGLD + device, or (with /D) as SUPDUP graphics. + Package SPOOLR WAIT() @@ -391,6 +398,8 @@ Package UTIL -- Random junk that is sometimes useful Package LOG -- Makes entries in log file + OPNTTY() + Write log messages to the TTY instead of a log file LOG(X) X is pointer to address of format string followed by arguments CLOSE() @@ -494,7 +503,7 @@ go: move p,[-lpdl,,pdl-1] ;initialize PDL .suset [.rxjname,,xjname'] move xjname camn [sixbit /versa/] - jrst [setzm spoolp ? jrst gonosp] + jrst [call jcl"go ? jrst exit] call spoolr"init ;"initialize the spooler movei x,string"catcha ;"catch all call util"catch ;"install it @@ -523,46 +532,9 @@ goloop: call spoolr"nextf ;"get the next file golooe: call util"uncatch ;"remove the BADREQ catch jrst goloop -gonosp: movei pfcv80"pfcfil ;" - movem spoolr"device ;" - call pfcv80"init ;" - .break 16, - - call tv"tvinit ;" - - call chaos"init ;" - -define $open chan,dev,fn1,fn2,dir - syscal open,[[.bii,,chan] - [sixbit/dev/] ? [sixbit/fn1/] - [sixbit/fn2/] ? [sixbit/dir/]] - .lose -termin - - $open dskich,dsk,pfcddv,foo,dcp - call ddv"ddv ;" - - $open dskich,dsk,dragon,fplots,dcp2 - call tek"tek7 ;" - - $open dskich,dsk,pfcddv,1,.glpr. - call ddv"ddv ;" - - $open dskich,dsk,foog,ards,dcp - call ards"ards ;" - - $open dskich,dsk,logain,press,cindyr - call press"press ;" - - $open dskich,dsk,chaos,xgp,dcp - call xgp"xgp ;" - - $open dskich,dsk,chaos,press,dcp - call press"press ;" - go2: .break 16, .logout 1, - .break 16,160000 +exit: .break 16,160000 .value @@ -588,6 +560,104 @@ init: setzm var... cpopj: return + +.begin jcl + +.vector jbuf(100) ;JCL string +.scalar jdev,jfn1,jfn2,jdir ;filename +.scalar jcount ;number of files processed + +$$RFN==-1 +$$SWITCH==-1 +.insrt syseng; rfn > + +rsixtp: caie a,"/ ;allow switches + cain a,"( + aos (p) + cain a,", ;allow multiple filenames + aos (p) + return + +switch: cain a,"D ;SUPDUP mode + setzm spoolp + return + +go: setom jcount ;init to -1 + call log"opntty ;log messages to the TTY + + setzm jbuf + .break 12,[..rjcl,,jbuf] + skipn jbuf ;no JCL? + jrst [ movei x,[[asciz \Usage: :VERSA [/D] FILE 1,FILE 2,...\]] + call log"log + return ] + + move [sixbit/dsk/] ;filename defaults + movem jdev + setzm jfn1 + move [sixbit/>/] + movem jfn2 + .suset [.rsname,,jdir] + + movei b,jdev + move d,[440700,,jbuf] +next: call rfn"rfn ;parse filename + push p,a ;save terminating char + push p,d ;and pointer + + aose jcount ;only do setup the first time + jrst rest + skipe spoolp ;want SUPDUP output? (/D) + jrst nod ;no + + movei pfcv80"pfcfil ;/D; set up for SUPDUP + movem spoolr"device + call pfcv80"init + .lose + + call tv"tvinit + call chaos"init + jrst rest + +nod: movei hargld"hargld ;no /D; set up for HARGLD + movem spoolr"device + +rest: syscal open,[[.bii,,dskich] ? jdev ? jfn1 ? jfn2 ? jdir] + jrst [ movei x,[[asciz /Couldn't open ~6:~6;~6 ~6/] + jdev ? jdir ? jfn1 ? jfn2] + call log"log + .lose ] + + syscal rfname,[movei %jself ? movei dskich + movem jdev ? movem jfn1 + movem jfn2 ? movem jdir] + .lose + + hlrz x,jfn2 ;look up FN2 in gtype table + movei y,spoolr"gtype + call util"assoc + skipa ;not found + jrst found + hlrz x,jfn1 ;how about FN1? + movei y,spoolr"gtype + call util"assoc + jrst [ movei x,[[asciz /Unknown filetype in ~6:~6;~6 ~6/] + jdev ? jdir ? jfn1 ? jfn2] + call log"log + .lose ] + +found: tlz z,-1 + call @z ;call the handler + + pop p,d + pop p,a + caie a,", ;any more filenames? + return + + ibp d ;skip the comma and parse again + jrst next + +.end .begin spoolr @@ -5614,6 +5684,14 @@ open8: .close logtmp, setom isopen return +opntty: skipe isopen + return + syscal open,[[.uao,,logfil] + [sixbit /tty /]] + .lose + setom isopen + return + close: skipn isopen return setzm isopen