;COMPARISON OF DSK:SYSEN1;@ 695 AND DSK:GUEST4;SKEF NEWAT ;OPTIONS ARE /E /L /W /3 **** FILE DSK:SYSEN1;@ 695, 2-5 (1616) AFTER P=: 1) ;;; GLS Guy L. Steele Jr. (GLS@MIT-MC) 1) ;;; RMS Richard M. Stallman (RMS@MIT-AI) 1) ;;; RHG/RG02 Richard H. Gumpertz (Gumpertz@CMU-10A) 1) ;;; MRC Mark Crispin (MRC@SU-AI) 1) ;;; MOON David A. Moon (MOON@MIT-MC) 1) ;;; EAK Earl A. Killian (EAK@MIT-MC) 1) ;;; MT Michael Travers (MT@MIT-XX) 1) ;;; JMN Joseph M. Newcomer (Newcomer@CMU-10A) 1) ;;; KLH Ken Harrenstien (KLH@MIT-AI/SRI-NIC) 1) ;;; THE AUTHORITATIVE SOURCE FOR @ IS [MIT-AI]SYSEN1;@ > 1) ;; WARNING: RMS, MRC, AND GLS DON'T TAKE THIS BUREAUCRACY VERY SERIOUSLY. **** FILE DSK:GUEST4;SKEF NEWAT, 2-5 (1616) AFTER P=: 2) ;;; GLS Guy L. Steele Jr. (GLS@MIT-MC) 2) ;;; RMS Richard M. Stallman (RMS@MIT-AI) 2) ;;; RHG/RG02 Richard H. Gumpertz (Gumpertz@CMU-10A) 2) ;;; MRC Mark Crispin (MRC@SU-AI) 2) ;;; MOON David A. Moon (MOON@MIT-MC) 2) ;;; EAK Earl A. Killian (EAK@MIT-MC) 2) ;;; MT Michael Travers (MT@MIT-XX) 2) ;;; JMN Joseph M. Newcomer (Newcomer@CMU-10A) 2) ;;; KLH Ken Harrenstien (KLH@MIT-AI/SRI-NIC) 2) ;;; LNZ Leonard N. Zubkoff (Zubkoff@CMU-20C) 2) ;;; SKEF J. Skeffington Wholey (Wholey@CMU-20C) 2) ;;; THE AUTHORITATIVE SOURCE FOR @ IS [MIT-AI]QUUX;@ > 2) ;; WARNING: RMS, MRC, AND GLS DON'T TAKE THIS BUREAUCRACY VERY SERIOUSLY. *************** **** FILE DSK:SYSEN1;@ 695, 2-476 (27936) AFTER P=: 1) ;;; 16-Jan-81 KLH Added /D[Canon] as an ersatz XGP which accepts 1) ;;; ITS XGP format files, but has different resolution. 1) ;;; Fixed bug at FPSFN3, the minus-flag in B wasn't 1) ;;; being saved during font filename parsing. 1) ;;; Notiyr 10X monitor bug: GTJFN of a FPal by itself 1) ;;; will cause "No such version" error on 10X, even tho 1) ;;; the GJ%OFG bit is set!!! Not sure if buggy on T20 too. 1) ;;; Apparently only sure way to win is to parse the string 1) ;;; completely like MIDAS does, rather than trying to 1) ;;; get GTJFN to do the work. 1) ;;; Fixe#PFN3 to only zap last 3 chars of file extension 1) ;;; if on DOS system, rather than NOITS. 1) ;;; Fixed MCRFN4 to account for overlarge page #'s (was 1) ;;; running CREF lines off the right margin). In general, 1) ;;; any text of more than 10,000 lines per page is going 1) ;;; to lose grossly... in case anyone didn't know this. 1) ;;; (the doc doesn't mention this sort of thing) 1) ;;; 1-Mar-82 JMN Added device Florida (Florida Data Systems OSP-130) **** FILE DSK:GUEST4;SKEF NEWAT, 2-478 (28007) AFTER P=: 2) ;;; 1-Mar-82 JMN Added device Florida (Florida Data Systems OSP-130) *************** **** FILE DSK:SYSEN1;@ 695, 2-499 (29260) AFTER P=: 1) ;;; 29-Jun-82 KLH Took out the ADD C,FNTBAS at FNTCPP-3 (calculating 1) ;;; default # lines on page) because it seems to be 1) ;;; completely wrong-headed; it was screwing up 1) ;;; our Canon spooler (which is diligent about going to 1) ;;; ; page if a line runs over BOTM4A If someone 1) ;;; can explain why it works for XGP, and prove it isn't 1) ;;; an XGP bug, please do so. 1) ;;; FINALLY!!!!! R6aed losing TNX GTJFN filename parser 1) ;;; with by-hand parser from MIDAS source. Incomplete 1) ;;; filenames now default sensibly, tho still have sixbit 1) ;;; restrictin FN1 and EXT. 1) ;;; 25-Sep-82 KLH Increased DIRDLN to 4000 (so can list ITS) 1) SUBTTL SYSTEM-DEPENDENT DEFINITIONS **** FILE DSK:GUEST4;SKEF NEWAT, 2-484 (28366) AFTER P=: 2) ;;; 17-Mar-82 JMN Removed device Florida since we didn't get it after all 2) ;;; 0rd2eice Sanders 2) ;;; 17-Mar-82 JMN Experienced numerous problems with copyrights coming 2) ;;; out on the next page. Looking at the code after 2) ;;; OUTPP2, I found that the IDIVI and test for 2) ;;; zero remainder make sense only if the increment is 2) ;;; 1! Stepping by more than 1, as is done a few 2) ;;; instructions before that, will cause the 2) ;;; test to fail. 2) ;;; 28-May-82 LNZ Change Sanders support to handle margins properly; that 2) ;;; is, send VMON rather than VMOFF. 2) ;;; 7-Jun-82 JMN Fixed GETHST code so that if it fails (such as on a 2) ;;; non-TOPS-20AN system) AT keeps running 2) ;;; 21-Aug-82 SKEF Added "new" LREC format for TNX sites. Groups start 2) ;;; with an ascii string which is the name of the file, 2) ;;; followed by a zero WORD, followed by data. In @ file 2) ;;; blocks, SNAME is a byte pointer to the file name. 2) ;;; NAMBLK is now an area in which name strings are consed. 2) SUBTTL SYSTEM-DEPENDENT DEFINITIONS *************** **** FILE DSK:SYSEN1;@ 695, 3-85 (32031) AFTER P=: 1) ; True site-dependent (as opposed to OS-dependent) stuff 1) IFE <.SITE 0>-,[ 1) XGPFMT==:ITSFLG ; ITS type XGP cmds, but require /D[C] 1) ; to select Canon. Later fix up? 1) FNTDSN==:144 ; directory on SRI-NIC 1) ] ;SRI-NIC 1) IFNDEF XGPFMT,[ ;WHAT SORT OF XGP COMMANDS DO WE WANT TO OUTPUT? **** FILE DSK:GUEST4;SKEF NEWAT, 4-2 (31482) AFTER P=: 2) IFNDEF XGPFMT,[ ;WHAT SORT OF XGP COMMANDS DO WE WANT TO OUTPUT? *************** **** FILE DSK:SYSEN1;@ 695, 4-13 (32674) AFTER P=: 1) IFNDEF FLAFLG,[ ; Support Florida Data Systems OSP/130 1) FLAFLG==:1 ; yes 1) IFNDEF FLAFLG, FLAFLG==:0 1) ];IFNDEF FLAFLG 1) ;NONZERO TO ALLOW PRESS FILE OUTPUT. **** FILE DSK:GUEST4;SKEF NEWAT, 4-12 (31871) AFTER P=: 2) ifNDEF VFXFLG,[ ; Support Sanders VariFlex S700 2) VFXFLG==:1 ; yes 2) IFNDEF VFXFLG, VFXFLG==:0 2) ];IFNDEF VFXFLG 2) ;NONZERO TO ALLOW PRESS FILE OUTPUT. *************** **** FILE DSK:SYSEN1;@ 695, 4-48 (33345) AFTER P=: 1) DEFINE FLORIDA 1) 1 LAFLG!TERMIN 1) DEFINE NOFLORIDA 1) IFE FLAFLG!TERMIN 1) DEFINE XGPRES **** FILE DSK:GUEST4;SKEF NEWAT, 4-47 (32535) AFTER P=: 2) DEFINE VARIFLEX 2) IFN VFXFLG!TERMIN 2) DEFINE NOVARIFLEX 2) IFE VFXFLG!TERMIN 2) 1"ƓNE XGPRES *************** **** FILE DSK:SYSEN1;@ 695, 7-44 (40070) AFTER OLOOP: 1) IFNDEF DIRDLN,DIRDLN==:4000 ;DEFAULT DIRBUF SIZE IN 18-BIT BYTES 1) CMU,IFNDEF DFMARG,DFMARG==:394. ;AT CMU, USE 1CM MARGINS **** FILE DSK:GUEST4;SKEF NEWAT, 7-44 (39264) AFTER OLOOP: 2) IFNDEF DIRDLN,DIRDLN==:2000 ;DEFAULT DIRBUF SIZE IN 18-BIT BYTES 2) CMU,IFNDEF DFMARG,DFMARG==:394. ;AT CMU, USE 1CM MARGINS *************** **** FILE DSK:SYSEN1;@ 695, 10-4 (46919) AFTER C.CREF==: 1) ;THE FIRST WORD OF AN LREC FILE SHOULD NOW BE SIXBIT/LREC/+1. 1) ;ATTEMPTS TO USE FILES WHICH DO NOT SATISFY THAT CRITERION 1) ;CAUSE ERROR MESSAGES. 1) ;THE REST OF FILE IS COMPOSED OF ENTRIES, ONE AFTER THE OTHER. **** FILE DSK:GUEST4;SKEF NEWAT, 10-4 (46113) AFTER C.CREF==: 2) ;THE FIRST WORD OF AN LREC FILE SHOULD NOW BE SIXBIT/LREC/+1 FOR NOTNX SYSTEMS 2) ;AND SIXBIT/LREC/+2 FOR TNX SYSTEMS. THE LREC FORMATS DIFFER IN THE WAY A 2) ;FILENAME IS STORED. THE FORMAT FOR NOTNX SYSTEMS WILL BE CALLED THE "OLD" 2) ;FORMAT, AND THE TNX FORMAT WILL BE CALLED THE "NEW" FORMAT. 2) ;ATTEMPTS TO USE FILES WHICH DO NOT SATISFY THE PROPER CRITERION (WITH RESPECT 2) ;TO TNX-ISHNESS) CAUSE ERROR MESSAGES. 2) ;THE REST OF FILE IS COMPOSED OF ENTRIES, ONE AFTER THE OTHER. *************** **** FILE DSK:SYSEN1;@ 695, 10-11 (47310) AFTER C.CREF==: 1) ;AN ENTRY BEGINS WITH 4 WORDS GIVING THE SNAME, DEV, FN1 AND FN2 OF THE FILE. 1) ;THEN COME 0 OR MORE SUBENTRIES, FOLLOWED BY A -1 SIGNIFYING THE END **** FILE DSK:GUEST4;SKEF NEWAT, 10-14 (46772) AFTER C.CREF==: 2) ;AN OLD FORMAT ENTRY BEGINS WITH 4 WORDS GIVING THE SNAME, DEV, FN1 AND FN2 OF 2) ;THE FILE. A NEW FORMAT ENTRY BEGINS WITH AN ASCIZ STRING GIVING THE FILENAME 2) ;FOLLOWED BY A 0 WORD. 2) ;THEN COME 0 OR MORE SUBENTRIES, FOLLOWED BY A -1 SIGNIFYING THE END *************** **** FILE DSK:SYSEN1;@ 695, 13-14 (52678) AFTER DEVPDO==: 1) DEVANA==:6 ; Anadex something 1) DEVCGP==:7 ; Canon LBP-10 hacking XGP-type input 1) DEVFLA==:10 ; Florida something 1) DEVMAX==:1"]A+ 1) XGPP:,a => DEVICE DOESN'T CONTAIN XGP, -1 => DEVIXG, +1 => DEVCXG 1) ;-2 => DEVCGP (ersatz ITS XGP) 1) sTP: DFLANG ;TYPE OF INPUT EXPECTED (WHAT LANGUAGE IT'S IN) **** FILE DSK:GUEST4;SKEF NEWAT, 13-14 (52245) AFTER DEVPDO==: 2) DEVMAX==:10 ;1 + 2) XGPP: 0 ;0 => DEVICE DOESN'T CONTAIN XGP, -1 => DEVIXG, +1 => DEVCXG 2) CODTYP: DFLANG ;TYPE OF INPUT EXPECTED (WHAT LANGUAGE IT'S IN) *************** **** FILE DSK:SYSEN1;@ 695, 15-56 (61203) AFTER FWIDFL: 1) FWIDFL: XWD 0,0 1) SIXBIT /FON/ ;on FON: 1) SIXBIT /FONTS/ 1) SIXB5/ID/ 1) ];CMU20 **** FILE DSK:GUEST4;SKEF NEWAT, 15-56 (60622) AFTER FWIDFL: 2) FWIDFL: 440700,,[asciz /FON:Fonts.Wid/] 2) ];CMU20 *************** **** FILE DSK:SYSEN1;@ 695, 15-63 (61337) AFTER FWIDFL: 1) FWIDFL: 0 1) SIXBIT /SYS/ 1) SIXBIT /FONTS/ 1) SIXBIT /WID/ 1) ];NOCMU20 **** FILE DSK:GUEST4;SKEF NEWAT, 15-60 (60723) AFTER FWIDFL: 2) čL: 440700,,[asciz /PnF9onts.Wid/] 2) OMU20 *************** **** FILE DSK:SYSEN1;@ 695, 19-6 (69932) AFTER F.==: 1) F.ISNM==:0 ;INPUT SNAME 1) F.IDEV==:1 ;INPUT DEVICE **** FILE DSK:GUEST4;SKEF NEWAT, 19-6 (69307) AFTER ˞u 2) ˤӝM==:0 ;INPUT SNAME, or byte pointer to name string 2) F.IDEV==:1 ;INPUT DEVICE *************** **** FILE DSK:SYSEN1;@ 695, 19-55 (72246) AFTER MULTI: 1) NAMSIZ==:40. ; big buffer for accumulating filenames 1) NAMBLK: BLOCK NAMSIZ ; here it is 1) JFNBLK: BLOCK 17 ; for longform JFN **** FILE DSK:GUEST4;SKEF NEWAT, 19-55 (71653) AFTER MULTI: 2) NAMSIZ==:200. ; big buffer for accumulating filenames 2) NAMBLK: BLOCK NAMSIZ ; here it is 2) NAMEND:: ; and here it isn't 2) NAMNXT: NAMBLK ; pointer to next free word in it 2) JFNBLK: BLOCK 17 ; for longform JFN *************** **** FILE DSK:SYSEN1;@ 695, 22-14 (78304) AFTER CRDFN2: 1) IPTFN2: OFFSET -. **** FILE DSK:GUEST4;SKEF NEWAT, 22-14 (77795) AFTER CRDFN2: 2) NOTNX,[ 2) IPTFN2: OFFSET -. *************** **** FILE DSK:SYSEN1;@ 695, 22-26 (78555) AFTER T10,CODTXT 1) TNX,CODTXT::0 1) CODMDL:: SIXBIT/MDL/ **** FILE DSK:GUEST4;SKEF NEWAT, 22-27 (78055) AFTER T10,CODTXT 2) CODMDL:: SIXBIT/MDL/ *************** **** FILE DSK:SYSEN1;@ 695, 22-36 (78734) AFTER T10,FNDFN2 1) TNX,FNDFN2: SIXBIT/KST/ 1) CMU,FNDFN2: SIXBIT/KST/ 1) SAI,FNDFN2: SIXBIT/FNT/ 1) OTS 1) OPTFN2: OFFSET -. **** FILE DSK:GUEST4;SKEF NEWAT, 22-36 (78219) AFTER T10,FNDFN2 2) CMU,FNDFN2: SIXBIT/KST/ 2) SAI,FNDFN2: SIXBIT/FNT/ 2) ];NOTNX 2) TNX,[ 2) IPTFN2: OFFSET -. 2) CODMID:: 440700,,[ASCIZ /MID/] 2) CODRND:: 440700,,[0] 2) CODFAI:: 440700,,[ASCIZ /FAI/] 2) CODP11:: 440700,,[ASCIZ /M11/] 2) CODLSP:: 440700,,[ASCIZ /LSP/] 2) CODM10:: 440700,,[ASCIZ /MAC/] 2) CODUCO:: 440700,,[0] 2) CODTXT:: 440700,,[0] 2) CODMDL:: 440700,,[ASCIZ /MDL/] 2) CODH16:: 440700,,[ASCIZ /H16/] 2) CODMAX:: OFFSET 0 2) LRCFN2: 440700,,[ASCIZ /LREC/] 2) ALRFN2: 440700,,[ASCIZ /LRC/] 2) )F2: 440700,,[ASCIZ /OLR/] 2) CRDFN2: 440700,,[ASCIZ /ATC/] 2) TNX,FNDFN2: 440700,,[ASCIZ /KST/] 2) ];TNX 2) ];NOITS 2) NOTNX,[ 2) OPTFN2: OFFSET -. *************** **** FILE DSK:SYSEN1;@ 695, 22-56 (79111) AFTER OPTFN2: 1) DEVCGP:: SIXBIT/CGP/ 1) DEVFLA:: SIXBIT/FLA/ 1) DEVMAX::OFFSET 0 1) SUBTTL LINE AND PAGE LENGTH BY DEVICE **** FILE DSK:GUEST4;SKEF NEWAT, 22-80 (79099) AFTER OPTFN2: 2) DEVVFX:: SIXBIT/VFX/ 2) DEVMAX::OFFSET 0 2) ];NOTNX 2) TNX,[ 2) OPTFN2: OFFSET -. 2) DEVLPT:: 440700,,[ASCIZ/LST/] 2) kI i40700,,[ASCIZ/XGP/] 2) DEVCXG:: 440700,,[ASCIZ/XGO/] 2) DEVGLD:: 440700,,[ASCIZ/GLD/] 2) DEVLDO:: 440700,,[ASCIZ/PRESS/] 2) DEVPDO:: 440700,,[ASCIZ/PRESS/] 2) DEVANA:: 440700,,[ASCIZ/ANA/] 2) DEVVFX:: 440700,,[ASCIZ/VFX/] 2) DEVMAX::OFFSET 0 2) ];TNX 2) SUBTTL LINE AND PAGE LENGTH BY DEVICE *************** **** FILE DSK:SYSEN1;@ 695, 23-14 (79460) AFTER DEVANA: 1) DEVCGP:: 119. 1) DEVFLA:: 132. 1) DEVMAX::OFFSET 0 **** FILE DSK:GUEST4;SKEF NEWAT, 23-14 (79739) AFTER DEVANA: 2) DEVVFX:: 132. 2) DEVMAX::OFFSET 0 *************** **** FILE DSK:SYSEN1;@ 695, 23-28 (79753) AFTER DEVANA: 1) DEVCGP:: 85. 1) DEVFLA:: 60. 1) DEVMAX::OFFSET 0 **** FILE DSK:GUEST4;SKEF NEWAT, 23-27 (80017) AFTER DEVANA: 2) DEVVFX:: 60. 2) DEVMAX::OFFSET 0 *************** **** FILE DSK:SYSEN1;@ 695, 23-42 (80043) AFTER DEVANA: 1) DEVCGP:: 240. 1) DEVFLA:: 0 1) DEVMAX::OFFSET 0 **** FILE DSK:GUEST4;SKEF NEWAT, 23-40 (80293) AFTER DEVANA: 2) DEVVFX:: 960. 2) DEVMAOFSET 0 *************** **** FILE DSK:SYSEN1;@ 695, 23-56 (80346) AFTER DEVANA: 1) DEVCGP:: 240. 1) DEVFLA:: 0 1) DEVMAX::OFFSET 0 **** FILE DSK:GUEST4;SKEF NEWAT, 23-53 (80584) AFTER DEVANA: 2) DEVVFX:: 288. 2) DEVMAX::OFFSET 0 *************** **** FILE DSK:SYSEN1;@ 695, 23-70 (80642) AFTER DEVANA: 1) DEVCGP:: 1980. ; Theoretically 2040 but right margin has 60-pixel bug 1) DEVFLA:: 0 1) DEVMAX::OFFSET 0 **** FILE DSK:GUEST4;SKEF NEWAT, 23-66 (80868) AFTER DEVANA: 2) DEVVFX:: 8160. 2) DEVMAX::OFFSET 0 *************** **** FILE DSK:SYSEN1;@ 695, 23-84 (81015) AFTER DEVANA: 1) DEVCGP:: 240.*11. ; Should be able to hack full page. 1) kF. a 1) kMX::OFA0 **** FILE DSK:GUEST4;SKEF NEWAT, 23-79 (81174) AFTER DEVANA: 2) DEVVFX:: 3168. 2) DEVMAX::OFFSET 0 *************** **** FILE DSK:SYSEN1;@ 695, 23-100 (81416) AFTER DEVANA: 1) DEVCGP:: 0,,-2 1) DEVFLA:: 0 1) DEVMAX::OFFSET 0 **** FILE DSK:GUEST4;SKEF NEWAT, 23-94 (81523) AFTER DEVANA: 2) DEVVFX:: 0 2) DEVMAX::OFFSET 0 *************** **** FILE DSK:SYSEN1;@ 695, 26-20 (84247) AFTER FLSNLR: 1) FLSFNT::[ASCIZ /Font file not in known format (KST or FNT)/] **** FILE DSK:GUEST4;SKEF NEWAT, 26-20 (84338) AFTER FLSNLR: 2) TNX,FLSNNL::[ASCIZ /Old format LREC file. Run ZAPLRC.EXE to convert this file to the new format./] 2) FLSFN[SCIZ file not in known format (KST  *************** **** FILE DSK:SYSEN1;@ 695, 37-19 (105886) AFTER SYSINI: 1) TNX,.ERR This 1-word lossage should be fixed. 1) T20,[ **** FILE DSK:GUEST4;SKEF NEWAT, 37-19 (106078) AFTER SYSINI: 2) T20,[ *************** **** FILE DSK:SYSEN1;@ 695, 37-28 (106160) AFTER SYSINI: 1) jrst MFail ; couldn't 1) setzm machine ; indicate ASCII value is valid **** FILE DSK:GUEST4;SKEF NEWAT, 37-27 (106305) AFTER SYSINI: 2) erjmp MFail ; couldn't 2) setzm machine ; indicate ASCII value is valid *************** **** FILE DSK:SYSEN1;@ 695, 37-106 (107924) AFTER GOSCEL: 1) CAIE A,"a 1) CAIN A,"A ; If not "A" for "ATSIGN" 1) JRST RSCAN1 1) ËÃ3AY҄w assume line is not (3d cmd string. 1) JRST POPJ1 ; (this is pretty dumb, though) 1) PBIN 1) JRST GOSCEL 1) T.ЅIN h)rch for space **** FILE DSK:GUEST4;SKEF NEWAT, 37-105 (108070) AFTER GOSCEL: 2) ; CAIE A,"a 2) ; CAIN A,"A ; If not "A" for "ATSIGN" 2) ; JRST RSCAN1 2) ;GOSCEL: CAIN A,^J ; assume line is not a good cmd string. 2) ; JRST POPJ1 ; (this is pretty dumb, though) 2) ; PBIN 2) ; JRST GOSCEL 2) RSCAN1: PBIN ; Search for space *************** **** FILE DSK:SYSEN1;@ 695, 43-7 (117783) AFTER FPFILE: 1) MOVE CP,[440700,,NAMBLK] 1) SETZ CC, **** FILE DSK:GUEST4;SKEF NEWAT, 43-7 (117936) AFTER FPFILE: 2) move cp, namnxt ; get addr of next file name word 2) hrli cp, 440700 ; make it a 7 bit byte pointer 2) ;wm cp, LS.sore b=2wtr in file block 2) SETZ CC, *************** **** FILE DSK:SYSEN1;@ 695, 43-35 (118577) AFTER FPLOO2: 1) JRST FPLOOP ; get more **** FILE DSK:GUEST4;SKEF NEWAT, 43-37 (118858) AFTER FPLOO2: 2) hrrz a, cp ; get address 2) cail a, namend ; skip if we haven't destroyed things 2) jrsPfy"]e ranAflenam9ce 2) JRST FPLOOP ; get more *************** **** FILE DSK:SYSEN1;@ 695, 43-40 (118702) AFTER FPSPC: 1) MOVE A,[440700,,NAMBLK] 1) PUSHJ P,TNXRFD 1) IFN 0,[ 1) ;;; Now, su the longform GTJFN arguments that are naready **** FILE DSK:GUEST4;SKEF NEWAT, 43-45 (119122) AFTER FPSPC: 2) ;;; Now, set up the longform GTJFN arguments that are not already *************** **** FILE DSK:SYSEN1;@ 695, 43-63 (119336) AFTER FPSPC: 1) HRROI B,NAMBLK 1) PUSHJ P,CVJFN ; Get JFN 1) JRST FILBOG ; bogus filespec 1) PUSHJ P,UNJFN 1) RLJFN h)eyAJFN, don't any more 1) NOP 1) ] ;IFN 0 1) FPSWL: **** FILE DSK:GUEST4;SKEF NEWAT, 43-64 (119701) AFTER FPSPC: 2) MOVE B,0(P) ; Filename from file block 2) PUSHJ P,CVJFN ; Get JFN 2) JRST FILBOG ; bogus filespec 2) HRRI B,1(CP) ; 1 plus addr of last char -> A 2) MOVEM B,NAMNXT ; point to next free name word 2) RLJFN ; Release JFN, don't need any more 2) NOP 2) 2) FPSWL: *************** **** FILE DSK:SYSEN1;@ 695, 43-96 (119991) AFTER FILBOG: 1) ;;; SIXBIT word 1) UNJFN: PUSH P,D 1) PUSH P,A ; save JFN 1) HRROI A,NAMBLK ; where to write string 1) HRRZ B,(P) ; get JFN back **** FILE DSK:GUEST4;SKEF NEWAT, 43-97 (120455) AFTER FILBOG: 2) ;;; SIXBIT word. 2) UNJFN: pusx,Ar 2) PUSH P,D 2) PUSH P,A ; save JFN 2) hrro a, namnxt ; where to write string 2) hrr r, a ; address for call to JFN6 2) HRRZ0("DwAQ ack *************** **** FILE DSK:SYSEN1;@ 695, 43-105 (120219) AFTER UNJFN: 1) PUSHJ P,JFN6 ; convert7ixbit, return in A 1) MOVEM A,1(L) 1) ; Convert dev: to PPN 1) T20,[ HRROI A,NAMBLK 1) HRRZ B,(P) 1) 3g֋0[c00000,,0] ; device and no punctuation 1) SETZ D, 1) JFNS 1) PUSH P,A ; save string pointer 1) PUSHJ P,JFN6 ; check for nullness 1) JUMPN A,JFNNZD ; non-null 1) MOVE A,[ASCII /PS/] ; dummy device 1) MOVEM A,NAMBLK 1) MOVE A,[260700,,NAMBLK] ; pointer to just past it 1) MOVEM A,(P) 1) JFNNZD: 1) MOVEI A,": ; Punctuation 1) IDPB A,(P) ; put it into string 1) MOVE A,NAMBLK ;PRESERVE STRUCTURE NAME 1) MOVE B,NAMBLK+1 1) MOVEM A,STRBUF 1) MOVEM B,STRBUF+1 1) MOVE A,(P) ; where to write directory name 1) HRRZ B,-1(P) ; get JFN back 1) MOVE C,[20000,,1] ; 1) JFNS ; convert to string 1) POP P,A ; pointer to where it should be 1) ILDB B,A ; anything? 1) SKIPN B 1) JRST FILZPP 1) MOVSI A,(RC%EMO) ; Want exact match 1) HRROI B,NAMBLK 1) RCDIR ; Error shouldn't happen 1) MOVE B,C ; Get dir # into B 1) ];T20 1) 10X,[ HRROI A,NAMBLK 1) HRRZ B,(P) 1) MOVE C,[20000,,0] ; "directory" 1) JFNS 1) MOVE A,[440700,,NAMBLK] 1) ILDB B,A ; Anything? 1) JUMPE B,FILZPP 1) SETZ A, 1) HRROI B,NAMBLK 1) STDIR 1) .VALUE ; No match - should never happen 1) .VALUE ; ambiguous - ditto 1) MOVE B,A ; Get dir # into B 1) ];10X 1) **** FILE DSK:GUEST4;SKEF NEWAT, 43-108 (120736) AFTER UNJFN: 2) hrri d, 1(a) ; see if we ran out of string space 2) cail d, namend 2) jrst fnsgon ; yup, all gone 2) movem d, namnxt ; update next filename pointer 2) PUSHJ P,JFN6 ; convert to sixbit, return in A 2) 3g֋`c(L) 2) ; Convert dev: to PPN@@@@We have to hack this sometime? 2) ;T20,btro a, namnxt ; pointer to next filename string 2) ; HRRZ B,(P) 2) ; MOVE C,[100000,,0] ; device and no punctuation 2) ; SETZ D, 2) ; JFNS 2) ; hrri d, 1(a) ; see if we ran out of string space 2) ; cail d, namend 2) bPjst fnsgon ; yup, all gone 2) ; movem d, namnxt ; update next filename pointer 2) ; PUSH P,A ; save string pointer 2) ; PUSHJ P,JFN6 ; check for nullness 2) ; JUMPN A,JFNNZD ; non-null 2) ; MOVE A,[ASCII /PS/] ; dummy device 2) ; MOVEM A,NAMBLK 2) ; MOVE A,[260700,,NAMBLK] ; pointer to just past it 2) ; MOVEM A,(P) 2) ;JFNNZD: MOVEI A,": ; punctuation 2) ; IDPB A,(P) ; put it into string 2) ; MOVE A,NAMBLK ;PRESERVE STRUCTURE NAME 2) ; MOVE B,NAMBLK+1 2) ; MOVEM A,STRBUF 2) ; MOVEM B,STRBUF+1 2) ; MOVE A,(P) ; where to write directory name 2) ; HRRZ B,-1(P) ; get JFN back 2) ; MOVE C,[20000,,1] ; 2) ; JFNS ; convert to string 2) ; POP P,A ; pointer to where it should be 2) ; ILDB B,A ; anything? 2) ; SKIPN B 2) ; JRST FILZPP 2) ; MOVSI A,(RC%EMO) ; Want exact match 2) ; HRROI B,NAMBLK 2) ; RCDIR ; Error shouldn't happen 2) ; MOVE B,C ; Get dir # into B 2) ;];T20 2) ;10X,[ HRROI A,NAMBLK 2) ; HRRZ B,(P) 2) ; MOVE C,[20000,,0] ; "directory" 2) ; JFNS 2) ; MOVE A,[440700,,NAMBLK] 2) ; ILDB B,A ; Anything? 2) ; JUMPE B,FILZPP 2) ; SETZ A, 2) ; HRROI B,NAMBLK 2) ; STDIR 2) ; .VALUE ; No match - should never happen 2) ; .VALUE ; ambiguous - ditto 2) ; MOVE B,A ; Get dir # into B 2) ;];10X 2) *************** **** FILE DSK:SYSEN1;@ 695, 43-158 (121533) AFTER FILZPP: 1) HRROI A,NAMBLK 1) HRRZ B,(P) **** FILE DSK:GUEST4;SKEF NEWAT, 43-168 (122474) AFTER FILZPP: 2) hrro a, namnxt ; next free filename string 2) :9rKa ; address for call JN6 2) HRRZ B,(P) *************** **** FILE DSK:SYSEN1;@ 695, 43-162 (121591) AFTER FILZPP: 1) PUSHJ P,JFN6 **** FILE DSK:GUEST4;SKEF NEWAT, 43-173 (122599) AFTER FILZPP: 2) hrri d, 1(a) ; see if we ran out of string space 2) cail d, namend 2) jrst fnsgon ; yup, all gone 2) movem d, namnxt ; update next filename pointer 2) PUSHJ P,JFN6 *************** **** FILE DSK:SYSEN1;@ 695, 43-165 (121654) AFTER FILZPP: 1) HRROI A,NAMBLK 1) HRRZ B,(P) **** FILE DSK:GUEST4;SKEF NEWAT, 43-180 (122813) AFTER FILZPP: 2) hrro a, namnxt ; next free filename string 2) hrr Ka ; address for call JN6 2) HRRZ B,(P) *************** **** FILE DSK:SYSEN1;@ 695, 43-169 (121712) AFTER FILZPP: 1) PUSHJ P,JFN6 **** FILE DSK:GUEST4;SKEF NEWAT, 43-185 (122938) AFTER FILZPP: 2) hrri d, 1(a) ; see if we ran out of string space 2) cail d, namend 2) jrst fnsgon ; yup, all gone 2) movem d, namnxt ; update next filename pointer 2) PUSHJ P,JFN6 *************** **** FILE DSK:SYSEN1;@ 695, 43-173 (121777) AFTER FILZPP: 1) POPJ P, 1) nݠe9ing in NAMS%o SIXBIT and leave in A 1) JFN6: PUSH P,CH 1) MOVE B,[440600,,A] 1) MOVE C,[440700,,NAMBLK] 1) SETZ A, 1) JFN6A: ILDB CH,C 1) 2͡E CH,JFN6B 1) SUBI CH,40 **** FILE DSK:GUEST4;SKEF NEWAT, 43-193 (123154) AFTER FILZPP: 2) pop p, r 2) POPJ P, 2) ;;; convert string starting at what R points to to SIXBIT and leave in A 2) JFN6: PUSH P,CH 2) MOVE B,[440600,,A] 2) hrli r, 440700 2) SETZ A, 2) JFN6A: ILDB CH,r 2) JUMPE CH,JFN6B 2) SUBI CH,40 *************** **** FILE DSK:SYSEN1;@ 695, 43-185 (121994) AFTER JFN6A: 1) JRST JFN6A 1) JFN6B: POP P,CH 1) POPJ P, 1) nݠonvert the JFNBLK sptPJN **** FILE DSK:GUEST4;SKEF NEWAT, 43-206 (123392) AFTER JFN6A: 2) JRST JFN6A 2) JFN6B: POP P,CH 2) POPJ P, 2) ;;; Ce:h JFNBLK spec to a JFN *************** **** FILE DSK:SYSEN1;@ 695, 44-2 (122328) AFTER CVJFN: 1) SUBTTL File Description Storage (FILBLK's) 1) TNXSW== 1) IFN T)Y[ 1) ITSSW== 1) ;VBLK 1) ; Definitions for indices into a FILBLK. 1) ; Scratch block FB is formed while defining indices... 1) FB: OFFSET -. 1) ; Lots of crocks depend on the exact order of these 4 items. 1) $F6DEV:: 0 ; SIXBIT Device name 1) $F6FNM:: $F6FN1:: 0 ; SIXBIT Filename (on ITS, FN1) 1) $F6TYP:: $F6FN2:: $F6EXT:: 0 ; SIXBIT Extension (on ITS, FN2) 1) $F6DIR:: 0"DASIXBIT Directory (may be numerical PPN) 1) L$F6BLK==. 1) $FVERn IFGEN:H w File vers; Qor generation). NUMBER, not string. 1) IFN TNXSW,[ ; Almost all entries here are BP's to ASCIZ strings. 1) $FDEV:: 0 ; Device name 1) $FDIR:: 0 ; Directory name 1) $FNAME:: 0 ; File name (i.e. main name) 1) $FTYPE:: $FEXT:: 0 ; File type (or extension) 1) $FTEMP:: 0 ; -1 => File is a temporary file. 1) $FACCT:: 0 ; Account string 1) $FPROT:: 0 ; Protection string 1) $FJFN:: 0 ; JFN for file (may be ,,) 1) ] 1) IFN ITSSW\aӯ,[ 1) $FDEV==:$F6DEV ; These definitions made so some common code can do 1) $FDIR==:$F6DIR ; the right things. 1) $FNAME==:$F6FNM 1) $FTYPE==:$F6TYP 1) $FEXT==:$F6TYP 1) ] 1) L$FBLK==. ; Length of a FILBLK. 1) OFFSET 0 ; End of index definitions. 1) ] ;TNXSW 1) IFN TNXSW,[ ; Moby conditional for Tenex reader. 1) ; TNXRFD - ATSIGN TNX filename reader. 1) ; Takes BP in A to ASCIZ string to parse. 1) ; Takes L as ptr to filename block to fill out. 1) baX nothing. 1) TNXRFD: 1) .BEGIN RFDBLK 1) MAXIND==100. 1) FL20X==400000 1) FLUNRD==200000 1) FRCMND==2 1) FRNNUL==1 1) IFNDEF FRFDEV,FRFDEV==2 ; Set if read device. 1) IFNDEF FRFDIR,FRFDIR==1 ; Set if read directory. 1) FRFN1==4 1) IFNDEF FRFEXT,FRFEXT==FRFN1 ; Borrow this bit. Set if read extension. 1) FRARRO==10 1) F=R ; F must not == L. 1) FF=R+1 1) AA=R+2 1) T=R+3 1) TT=R+4 1) INSIRP PUSH P, A B C D F FF AA T TT 1) SETZ FF, ; set up flags 1) T20, TLO FF,FL20X 1) MOVEI F,FB ; Point to scratch FB 1) MOVEM A,RCHBP ; Save BP to asciz string 1) SETZM FB 1) MOVE A,[FB,,FB+1] 1) BLT A,FB+L$FBLK-1 1) PUSHJ P,TRFD 1) INSIRP POP P, TT T AA FF F D C B 1) PUSH P,F 1) MOVEI F,FB 1) PUSHJ P,CVFSIX ; Convert to sixbit entries 1) IRP STF,,[DIR,DEV,FN1,FN2] 1) MOVE A,$F6!STF(F) 1) MOVEM A,(L).IRPCNT 1) TERMIN 1) PUSHJ P,TDIRNM 1) CAIE A, ; If got a dir number, 1) SETZM 1(L) ; Zap the device field. 1) MOVEM A,0(L) ; Else keep it anyway, store result. 1) POP P,F 1) POP P,A 1) APOPJ: POPJ P, 1) ; TDIRNM - Given filblk pointed to by F, returns in A the dir # 1) ; for dev/dir combination. Returns 0 if failure. 1) TDIRNM: SKIPN A,$FDIR(F) ; Get BP to dir name 1) POPJ P, ; Not specified, leave all alone. 1) PUSH P,B 1) 10X,[ 1) MOVE B,A 1) SETZ A, 1) STDIR 1) SETZ A, ; No match - should never happen 1) SETZ A, ; ambiguous - ditto 1) ];10X 1) T20,[ PUSH P,C 1) SKIPN A,$FDEV(F) ; Device exists? 1) MOVE A,[440700,,[ASCIZ /PS/]] ; dummy device 1) SKIPA B,[440700,,STRBUF] 1) IDPB C,B 1) ILDB C,A 1) JUMPN C,.-2 1) MOVEI C,": 1) IDPB C,B 1) MOVEI C,"< ;> 1) IDPB C,B 1) SKIPA A,$FDIR(F) 1) IDBP C,B 1) ILDB C,A 1) JUMPN C,.-2 ;< 1) MOVEI C,"> 1) IDPB C,B 1) SETZ C, 1) IDPB C,B 1) MOVSI A,(RC%EMO) ; Want exact match 1) HRROI B,STRBUF 1) RCDIR ; Error shouldn't happen 1) ERJMP [SETZ C, ? JRST .+1] 1) MOVE A,C ; Get dir # into A 1) POP P,C 1) ];T20 1) POP P,B 1) POPJ P, 1) ; TRFD - TENEX-style Filename Reader. 1) ; Takes input from RCH. 1) ; Deposits name strings into filblk F points to. 1) ; Clobbers A,B,C,D, (and AA,T,TT due to FNCHK) 1) ; Uses FRFEXT flag to see if already read extension (type) or not. 1) ; Refuses to accept existing defaults for version, ;T, account, 1) ; protection, or JFN. It will also zap an existing directory 1) ; default if a device is specified, and vice versa. This is so that 1) ; logical names will win a little better. 1) ; Implements crufty ^R hack (if see ^R, act as if just starting to 1) ; read filename, so effect is stuff before ^R has set defaults.) 1) TRFD: TRZ FF,FRNNUL 1) SETZM $FJFN(F) ; Zap JFN since the filename we'll read won't match it. 1) SETZM $FACCT(F) ; Also zap other things that we don't want defaulted. 1) SETZM $FPROT(F) 1) SETZM $FTEMP(F) 1) SETZM $FVERS(F) 1) TRFD01: TRZ FF,FRFEXT+FRFDEV+FRFDIR ; Jump here if ^R seen. 1) TRFD10: PUSHJ P,GPASST ; remove tabs, spaces and get first non-tab/space 1) TRNN FF,FRCMND ; If parsing command line, 1) CAIE A,"; ; or if char isn't semicolon, 1) JRST TRFD21 ; just handle normally. 1) TRFD15: PUSHJ P,RCH ; Semi-colon and not command line, it's a comment! 1) CAIE A,^M ; So flush rest, up to EOL. 1) JRST TRFD15 1) POPJ P, 1) TRFD1: TLO FF,FLUNRD ; come here to re-read last char 1) TRFD2: PUSHJ P,RCH ; Get char 1) TRFD21: CAIE A,40 ; Space? (come here to scan already-read char) 1) CAIN A,^I ; or tab? 1) JRST [TRNE FF,FRCMND ; Space/tab, if reading command line 1) JRST TRFD2 ; then ignore and continue scanning (for switches), but 1) JRST TRFD15] ; if not in cmd line, go flush entire rest of line! 1) CAIN A,^M ; End of line? 1) POPJ P, ; If so, obviously done. 1) CAIN A,^R ; Crufty ^R hack? 1) JRST TRFD01 ; Sigh, pretend starting over. 1) TRNN FF,FRCMND ; Must we check for cmd line frobs? 1) JRST TRFD22 ; Nope, skip them. 1) ; Must check for chars special only in command line. 1) CAIN A,"= 1) MOVEI A,"_ 1) CAIE A,"_ ; backarrow is filename terminator... 1) CAIN A,", ; as is comma. 1) POPJ P, 1) CAIN A,"! ; For CCL hacking... 1) POPJ P, .SEE RFDRUN 1) ; PUSHJ P,CMDSW ; Check for switches... 1) ; JRST TRFD21 ; got some, process next char (returned by CMDSW) 1) ; Skips if none, drop thru. 1) ; Now see if char signifies start of anything in particular. 1) TRFD22: CAIE A,"< ; Start of directory name? 1) JRST TRFD24 ; No 1) PUSHJ P,RCH 1) PUSHJ P,TRFDW ; Read word, starting with next char 1) TRFD23: CAIN A,". ; Allow . as part of directory name 1) JRST [ PUSHJ P,TRFDW5 ; Read a continuation to this word 1) JRST TRFD23] ; And try again 1) MOVEI D,$FDIR ; Set up index. 1) CAIN A,"> ; Terminator should be end of dir name... 1) PUSHJ P,RCH ; If so, get next to avoid scan of ">". 1) ; else bleah, but aren't supposed to fail... 1) TRNN FF,FRFDEV ; Unless a device has been explicitly given, 1) SETZM $FDEV(F) ; zap any furnished default. 0 means DSK. 1) TRO FF,FRFDIR ; Now say dir was explicitly given. 1) JRST TRFD6 ; Go store it. 1) TRFD24: CAIN A,". ; Start of $FTYPE or $FVERS (20x)? 1) JRST [ MOVEI D,$FTYPE ; Assume reading $FTYPE field, 1) TLNE FF,FL20X ; always if 10X, but if really on 20X, then 1) TRON FF,FRFEXT ; use $FTYPE only if not already seen. 1) JRST TRFD4 ; $FTYPE - jump to get word & store. 1) PUSHJ P,TRFDNM ; $FVERS - 20X and $FTYPE already seen. Get #. 1) MOVEM B,$FVERS(F) ; Store it away if successful. 1) JRST TRFD1] ; and go re-read delimiting char. 1) CAIN A,"; ; Start of $FVERS (10x) or attribute? 1) JRST [ PUSHJ P,RCH ; Find what next char is. 1) CAIL A,"a ; Must uppercasify. 1) CAILE A,"z 1) CAIA 1) SUBI A,40 1) CAIN A,"T ; Temporary file? 1) JRST [ SETOM $FTEMP(C) 1) JRST TRFD2] 1) CAIN A,"A ; Account? 1) JRST [ MOVEI D,$FACCT ; Set index, and 1) JRST TRFD4] ; go gobble following word. 1) CAIN A,"P ; Protection? 1) JRST [ MOVEI D,$FPROT ; Set index, and 1) JRST TRFD4] ; go gobble following word. 1) TLO FF,FLUNRD ; Not alpha, try numeric. Re-read char, 1) PUSHJ P,TRFDNM ; trying to parse as number. 1) MOVEM B,$FVERS(F) ; Win, parsed as number! Store it. 1) JRST TRFD1] ; If none of above, ignore ";" entirely. 1) PUSHJ P,TRFDW ; Let's try reading it as word, 1) JUMPLE C,APOPJ ; If nothing read, assume it's some terminating delimiter. 1) CAIN A,": ; Else have something, check trailing delim for special cases 1) JRST [ MOVEI D,$FDEV ; Aha, a device. 1) PUSHJ P,RCH ; Flush the terminator & get next char. 1) TRNN FF,FRFDIR ; Unless dir was explicitly given, 1) SETZM $FDIR(F) ; zap furnished default. 0 uses connected dir. 1) TRO FF,FRFDEV ; Say device was explicitly given, and 1) JRST TRFD6] ; store name away. 1) MOVEI D,$FNAME ; Else assume it's the filename. 1) JRST TRFD6 1) TRFD4: PUSHJ P,RCH ; Here when must gobble next char, 1) TRFD5: PUSHJ P,TRFDW ; here when first char of wd already read. 1) TRFD6: PUSHJ P,FNCHKZ ; Note this can return and store a null string! 1) ADDI D,(F) ; Get address (filblk+index), and 1) MOVEM A,(D) ; store string pointer in the appropriate place. 1) TRO FF,FRNNUL ; Say non-null spec seen, 1) JRST TRFD1 ; and go re-read the delimiter, to process it. 1) ; TRFDW - Read a word (string), for use by TNXRFD. Copies sequence of 1) ; acceptable filename chars into FNBUF, until non-valid char seen. 1) ; A/ First char of word, 1) ; Returns A/ delimiting char, C/ count of chars in string, 1) ; clobbers nothing else. 1) TRFDW4: SUBI A,40 ; Make lowercase 1) TRFDW5: IDPB A,FNBWP ; Deposit into FNBUF, 1) PUSHJ P,RCH ; get next char, 1) AOSA C ; and bump count, skipping over zap instruction. 1) TRFDW: SETZ C, ; When called, zero cnt of chars in string. 1) CAIL A,"A ; See if char is uppercase alpha, 1) CAILE A,"Z 1) CAIA 1) JRST TRFDW5 1) CAIL A,"a ; or lowercase alpha, 1) CAILE A,"z 1) CAIA 1) JRST TRFDW4 1) CAIL A,"0 ; or numeric, 1) CAILE A,"9 1) CAIA 1) JRST TRFDW5 1) CAIE A,"$ ; or dollarsign 1) CAIN A,"- ; or hyphen 1) JRST TRFDW5 1) CAIN A,"_ ; Backarrow is special case, because 1) JRST [ TRNN FF,FRCMND ; if reading command, 1) TLNN FF,FL20X ; or running on 10X, 1) POPJ P, ; must treat as delimiter. 1) JRST TRFDW5] 1) CAIN A,^V ; ^V is quote char... 1) JRST [ PUSHJ P,RCH ; Quote, get next. 1) CAIE A,^M ; Quote anything but this. 1) CAIN A,0 ; or this. 1) POPJ P, ; time to exit. 1) PUSH P,A ; Quote it! Save char, 1) MOVEI A,^V ; so that a quoter can precede it. 1) IDPB A,FNBWP ; Fortunately this hair 1) POP P,A ; only needs care 1) IDPB A,FNBWP ; for quoted chars, which are 1) JRST TRFDW5] ; rare. 1) TLNE FF,FL20X ; Are we on a 10X? 1) POPJ P, ; If not, anything at this point is delimiter. 1) CAIL A,41 ; Check general bounds 1) CAIL A,137 ; Range from space to _ exclusive. 1) POPJ P, ; If outside that, delimiter. 1) CAIL A,72 ; This range includes :, ;, <, =, > 1) CAILE A,76 1) CAIA 1) POPJ P, ; delimiter. 1) CAIE A,". 1) CAIN A,", 1) POPJ P, 1) CAIE A,"* 1) CAIN A,"@ 1) POPJ P, 1) ; Finally, check out chars which are acceptable to 10X but which 1) ; might be delimiter in cmd line... 1) TRNN FF,FRCMND 1) JRST TRFDW5 ; Not hacking cmd line, it's an OK char. 1) CAIE A,"/ 1) CAIN A,"( 1) POPJ P, 1) CAIN A,"! 1) POPJ P, 1) JRST TRFDW5 ; at long last done. 1) ; TRFDNM - Read numerical string, halt when non-digit 1) ; seen, leaves result (decimal) in B, with delimiting char in A. 1) ; One peculiarity is skip return if no numerical char is seen at all; 1) ; else doesn't skip and B has a valid number. 1) TRFDNM: PUSHJ P,RCH ; First char needs special check. 1) CAIL A,"0 1) CAILE A,"9 1) JRST POPJ1 ; Not a number at all? 1) TDZA B,B 1) TRFDN2: IMULI B,10. 1) ADDI B,-"0(A) ; Convert to number 1) PUSHJ P,RCH ; Get following chars. 1) CAIL A,"0 1) CAILE A,"9 1) POPJ P, ; Nope, not digit so treat as delimiter. 1) JRST TRFDN2 ; Yep, a number 1) ;; Extra stuff to support ATSIGN use of MIDAS code 1) .SCALAR LASTCH, RCHBP 1) RCH: TLZE FF,FLUNRD 1) SKIPA A,LASTCH 1) ILDB A,RCHBP 1) CAIN A, 1) MOVEI A,^M 1) MOVEM A,LASTCH 1) POPJ P, 1) GPASST: PUSHJ P,RCH 1) CAIE A,40 1) CAIN A,^I 1) JRST GPASST 1) POPJ P, 1) ] ;IFN TNXSW 1) SUBTTL TENEX misc. Filename Routines, FS string storage 1) IFN TNXSW,[ .SEE FSDSK ; Part of this page is NOT conditionalized!! 1) ; To handle filenames of ASCIZ strings instead of SIXBIT words, each 1) ; word has instead a byte pointer to an ASCIZ string. For purposes of 1) ; easy comparison, all of these bp's point into FNBUF, and a routine 1) ; (FNCHK) is provided which checks a just-stored string and returns a bp 1) ; to either this string, if unique, or to a previously stored string if 1) ; it is the same as the one just stored (which is then flushed). Thus 1) ; strings can be compared for equality simply by a comparison of their 1) ; byte pointers. While not necessary, strings are stored beginning on 1) ; word boundaries for easier hacking. 1) ; <# files>**+<# wds for constants> 1) LFNBUF==*5*3+20 ; Enough to hold strings for all output files, 1) ; all translated files, and all .insrt files encountered. 1) ; Later a GC'er can be hacked up so that of the latter only 1) ; enough for the max .insrt level need be allocated. 1) FNBUF: block LFNBUF 1) ; Macro to easily define constant strings for comparison purposes 1) DEFINE DEFSTR *STR* 1) 440700,,%%FNLC 1) %%LSAV==. 1) LOC %%FNLC 1) ASCIZ STR 1) %%FNLC==. 1) LOC %%LSAV 1) TERMIN 1) %%FNLC==FNBUF 1) ] ; IFN TNXSW!!! 1) ; If not assembling for TENEX, the following strings become 1) ; simple SIXBIT values. This makes it possible to write simple 1) ; code to work for both TENEX and non-TENEX without messy conditionals. 1) IFE TNXSW,[EQUALS DEFSTR,SIXBIT] 1) FSDSK: DEFSTR /DSK/ ; This stuff defines various BP's into FNBUF to 1) FSSYS: DEFSTR /SYS/ ; use for comparison purposes later. 1) FSTTY: DEFSTR /TTY/ 1) FSNUL: DEFSTR /NUL/ 1) FSPTP: DEFSTR /PTP/ 1) FSATSN: DEFSTR /@/ 1) FSSBSY: DEFSTR /SUBSYS/ 1) FSPROG: DEFSTR /PROG/ 1) FSMID: DEFSTR /MID/ 1) FSMDAS: DEFSTR /MIDAS/ 1) FSGRTN: DEFSTR />/ 1) FSCRF: DEFSTR /CRF/ 1) FSCREF: DEFSTR /CREF/ 1) FSERR: DEFSTR /ERR/ 1) FSLST: DEFSTR /LST/ 1) FSLIST: DEFSTR /LIST/ 1) FSSAV: DEFSTR /SAV/ 1) FSEXE: DEFSTR /EXE/ 1) IFN TNXSW,[ 1) ;VBLK 1) FNBBP: 440700,,FNBUF ; Points to beg of FNBUF (hook for dynamic alloc) 1) FNBEP: FNBUF+LFNBUF-1 ; Points to last wd in FNBUF (address, not BP) 1) FNBWP: 440700,,%%FNLC ; Write Pointer into FNBUF. 1) FNBLWP: 440700,,%%FNLC ; Last Write Pointer, points to beg of string being stored 1) ;PBLK 1) EXPUNG %%FNLC 1) ; NOTE - provided MIDAS never restarts, no initialization is necessary to 1) ; start using FNCHK. (Unless of course FNBUF is dynamically allocated someday) 1) ; FNCHK - Check out just-stored filename. Returns BP in A to ASCIZ string, 1) ; which will be "canonical" for comparison purposes. 1) ; Clobbers A,B,T,TT,AA 1) ; FNCHKZ - Makes sure just-writ string is ASCIZ'd out before FNCHK'ing. 1) FNCHKZ: MOVE B,FNBWP ; Get write ptr, 1) LDB A,B ; see if last char was 0, 1) JUMPE A,FNCHK0 ; if so can skip one clobberage. 1) SETZ A, 1) IDPB A,B ; zero out bytes, 1) FNCHK0: TLNE B,760000 ; until at end of word. 1) JRST .-2 1) ADD B,[<440700,,1>-<010700,,>] ; bump BP to point canonically at next. 1) MOVEM B,FNBWP 1) FNCHK: HRRZ B,FNBWP ; See if write ptr 1) CAML B,FNBEP ; has hit end of FNBUF, and 1) ; ETF [ASCIZ /Filename buffer overflow/] ; barf horribly if so. 1) .VALUE ; sigh 1) MOVE A,FNBBP ; A - bp to start of existing string 1) MOVE AA,FNBLWP ; AA - bp to start of new string to store 1) FNCHK2: MOVEI T,(A) ; T - current addr being checked, existing str 1) MOVEI TT,(AA) ; TT - current addr, new str 1) CAIL T,(TT) ; If addrs are same, or overran somehow, 1) JRST [ MOVE A,AA ; didn't find any match, accept new string. 1) MOVE B,FNBWP 1) MOVEM B,FNBLWP ; Set up new last-write-ptr 1) POPJ P,] 1) FNCHK3: MOVE B,(T) 1) CAMN B,(TT) ; Compare strings, full word swoops. 1) JRST [ TRNE B,377 ; equal, last char zero? 1) AOJA T,[AOJA TT,FNCHK3] ; no, continue for whole string 1) ; Found it! Flush just-stored string, don't want duplicate. 1) MOVEM AA,FNBWP ; Clobber write ptr to previous value. 1) POPJ P,] 1) ; Not equal, move to next string to compare 1) MOVEI B,377 ; Check for ASCIZ, 1) TDNE B,(T) ; moving to end of current string 1) AOJA T,.-1 1) HRRI A,1(T) ; and updating BP to point at new string. 1) JRST FNCHK2 ; (T gets pointed there too at FNCHK2). 1) ; CVSSIX - Converts ASCIZ string to SIXBIT word. 1) ; A/ BP to ASCIZ string, 1) ; Returns SIXBIT word in A. Clobbers nothing else. 1) CVSSIX: PUSH P,B 1) PUSH P,C 1) PUSH P,D 1) MOVE D,A 1) SETZ A, 1) MOVE B,[440600,,A] 1) JRST CVSSX3 1) CVSSX2: CAIL C,140 1) SUBI C,40 ; Uppercase force 1) SUBI C,40 ; cvt to 6bit 1) IDPB C,B ; deposit 1) TLNN B,770000 ; If BP at end of word, 1) JRST CVSSX5 ; leave loop. 1) CVSSX3: ILDB C,D 1) JUMPN C,CVSSX2 1) CVSSX5: POP P,D 1) POP P,C 1) POP P,B 1) POPJ P, 1) ; CVFSIX - Takes current filblk (pointed to by F) and puts the 1) ; right stuff in $F6 entries. 1) CVFSIX: PUSH P,A 1) PUSH P,B 1) MOVSI B,-L$F6BL 1) CVFSX2: MOVE A,@CVFTAB(B) ; Get BP to string 1) PUSHJ P,CVSSIX ; Convert to 6bit 1) ADDI B,$F6DEV(F) ; Get index to right place to store. 1) MOVEM A,(B) 1) SUBI B,$F6DEV(F) ; restore aobjn pointer... 1) AOBJN B,CVFSX2 1) POP P,B 1) POP P,A 1) POPJ P, 1) CVFTAB: $FDEV(F) 1) $FNAME(F) 1) $FEXT(F) 1) $FDIR(F) 1) IFN <.-CVFTAB>-L$F6BL, .ERR CVFTAB loses. 1) .END RFDBLK 1) ] ;IFN TNXSW 1) SUBTTL COMMAND LINE SWITCH PARSER **** FILE DSK:GUEST4;SKEF NEWAT, 44-2 (123727) AFTER CVJFN: 2) SUBTTL COMMAND LINE SWITCH PARSER *************** **** FILE DSK:SYSEN1;@ 695, 57-36 (150988) AFTER FPSFN0: 1) FPSFN3: INSIRP PUSH P,CC CP FPNTBP L R D F B 1) FPSFNP==:.-FPSFN3 **** FILE DSK:GUEST4;SKEF NEWAT, 52-36 (135982) AFTER FPSFN0: 2) FPSFN3: INSIRP PUSH P,CC CP FPNTBP L R D F 2) FPSFNP==:.-FPSFN3 *************** **** FILE DSK:SYSEN1;@ 695, 57-47 (151442) AFTER FPSFN1: 1) INSIRP POP P,B F D R L FPNTBP CP CC 1) JRST FPSXGP **** FILE DSK:GUEST4;SKEF NEWAT, 52-47 (136434) AFTER FPSFN1: 2) INSIRP POP P,F D R L FPNTBP CP CC 2) JRST FPSXGP *************** **** FILE DSK:SYSEN1;@ 695, 59-22 (152532) AFTER FPSDE1: 1) CAIN A,'C 1) JRST [ MOVEI A,DEVCGP ;"C" => CGP (Canon ersatz XGP) 1) JRST FPSDV3] 1) ];XGP **** FILE DSK:GUEST4;SKEF NEWAT, 54-22 (137522) AFTER FPSDE1: 2) ];XGP *************** **** FILE DSK:SYSEN1;@ 695, 59-30 (152709) AFTER FPSDE1: 1) FLORIDA,[CAIN A,'F ; F => FLORIDA 1) jrst [MOVEI A,DEVFLA 1) JRST FPSDV4] 1) ];FLORIDA 1) PRESS,[ CAIE A,'D **** FILE DSK:GUEST4;SKEF NEWAT, 54-27 (137615) AFTER FPSDE1: 2) VARIFLEX,[CAIN A,'V ; V - Variflex 2) jrst [MOVEI A,DEVVFX 2) JRST FPSDV4] 2) ];VARIFLEX 2) PRESS,[ CAIE A,'D *************** **** FILE DSK:SYSEN1;@ 695, 64-10 (164749) AFTER FPDFN2: 1) MOVE H,CODTYP 1) MOVE H,IPTFN2(H) ;NOITS, DEFAULT FN2 IS APPROPRIATE TO LANGUAGE. 1) ];NOITS **** FILE DSK:GUEST4;SKEF NEWAT, 59-10 (149657) AFTER FPDFN2: 2) NOTNX,[ MOVE H,CODTYP 2) MOVE H,IPTFN2(H) ;NOITS, DEFAULT FN2 IS APPROPRIATE TO LANGUAGE. 2) ];NOTNX 2) , move b, codtyp ; get cod2n 2) move b, (b) 2) call defext ; default extension of block in a to name in b 2) ];TNX 2) ];NOITS *************** **** FILE DSK:SYSEN1;@ 695, 64-18 (164962) AFTER FPDFN2: 1) MOVEM H,F.IFN2(A) 1) FPDFN3: 1) DOS, HLLZS F.IFN2(A) ;DEFAULTING'S PAST, SO FLUSH THE RH "FOO." USES TO AVOID IT. 1) JRST 2INOPN ;IF IT SKIPS, WE DO TOO! 1) ;DEFAULT DIRECTORY OF LREC FILE. 1) ;NOTE OUTPUT FN2 DEFAULTED IN WLREC. INPUT FN2 DEFAULTED IN RLREC. **** FILE DSK:GUEST4;SKEF NEWAT, 59-23 (150012) AFTER FPDFN2: 2) NOTNX, MOVEM H,F.IFN2(A) 2) FPDFN3: 2) NOITS, HLLZS F.IFN2(A) ;DEFAULTING'S PAST, SO FLUSH THE RH "FOO." USES TO AVOID IT. 2) JRST 2INOPN ;IF IT SKIPS, WE DO TOO! 2) ;DEFAULT DIRECTORY OF LREC FILE.@*@* 2) ;NOTE OUTPUT FN2 DEFAULTED IN WLREC. INPUT FN2 DEFAULTED IN RLREC. *************** **** FILE DSK:SYSEN1;@ 695, 68-33 (171942) AFTER FPRCHS: 1) ] 1) DOS,[ LSH CH,LGEXTL **** FILE DSK:GUEST4;SKEF NEWAT, 63-33 (157004) AFTER FPRCHS: 2) ];TNX 2) DOS,[ LSH CH,LGEXTL *************** **** FILE DSK:SYSEN1;@ 695, 70-100 (177986) AFTER FNTCP6: 1) ;COMPUTE PAGEL FROM FONTS AND VSP. 1) ADD C,D ;ASSUME 1ST LINE VSP IS IGNORED, SO RECLAIM IT 1) ADD D,FNTHGT ;FIND TOTAL POI)ER LINE 1) ;;; ADD C,FNTBAS ;WHAT THE FUCK WAS THIS FOR???? 1) IDIV C,D ;FIND # WHOLE LINES THAT̙ FIT 1) MOVEM C,PAGEL **** FILE DSK:GUEST4;SKEF NEWAT, 65-100 (163052) AFTER FNTCP6: 2) ADD C,D ;COMPUTE PAGEL FROM FONTS AND VSP. 2) ADD D,FNTHGT 2) ADD C,FNTBAS 2) IDIV C,D 2) MOVEM C,PAGEL *************** **** FILE DSK:SYSEN1;@ 695, 72-32 (185721) AFTER RLRR1: 1) PUSHJ P,[ SKIPN F.IFN2(A) 1) JRST RLRRD ;OPEN INPUT LREC FILE WITH RLRRD TO DEFAULT FN2 **** FILE DSK:GUEST4;SKEF NEWAT, 67-33 (170638) AFTER RLRR1: 2) TNX,[ call getext ; see if this file has an extension 2) call [skipn b 2) jrst rlrrd 2) jrst 2inopn] 2) caia 2) jrst rlrr1a 2) ];TNX 2) NOTNX,[ PUSHJ P,[ SKIPN F.IFN2(A) 2) JRST RLRRD ;OPEN INPUT LREC FILE WITH RLRRD TO DEFAULT FN2 *************** **** FILE DSK:SYSEN1;@ 695, 72-37 (185873) AFTER RLRR1: 1) ITS, .STATUS UTIC,B ;ON ITS, ANY ERROR OTHER THAN "FILE NOT FOUND" 1) ITS, LDB B,[220600,,B] ;MEANS WE WOULD PROBABLY BE UNABLE TO CREATE THE LREC FILE, 1) ITS, pdAB,%ENq ;SO WE SHO" ΓfYACOMPLAIN. 1) ITS, JRST RLRR1E 1) MOVE R,SFILE ;CAN'T FIND THE INPUT LREC FILE!! WAS IT THE ONLY FILE SPEC'D? **** FILE DSK:GUEST4;SKEF NEWAT, 67-45 (170932) AFTER RLRR1: 2) ITS,[ .STATUS UTIC,B ;ON ITS, ANY ERROR OTHER THAN "FILE NOT FOUND" 2) LDB B,[220600,,B] ;MEANS WE WOULD PROBABLY BE UNABLE TO CREATE THE LREC FILE, 2) CAIE B,%ENSFL ;SO WE SHOULD DEFINITELY COMPLAIN. 2) JRST RLRR1E 2) ];ITS 2) MOVE R,SFILE ;CAN'T FIND THE INPUT LREC FILE!! WAS IT THE ONLY FILE SPEC'D? *************** **** FILE DSK:SYSEN1;@ 695, 72-49 (186599) AFTER RLRR1E: 1) RLRR1B: STRT [ASCIZ /(LREC file new - listing all files in full) 1) /] 1) POPJ P, **** FILE DSK:GUEST4;SKEF NEWAT, 67-57 (171652) AFTER RLRR1E: 2) ];NOTNX 2) RLRR1B: STRT [ASCIZ /(LREC file new - listing all files in full) 2) /] ; @@@@ make this work 2) POPJ P, *************** **** FILE DSK:SYSEN1;@ 695, 72-62 (186971) AFTER RLRR1C: 1) RLRRD: MOVE CH,LRCFN2 ;FIRST TRY "LREC" OR "LRC" AS FN2. **** FILE DSK:GUEST4;SKEF NEWAT, 67-72 (172060) AFTER RLRR1C: 2) TNX,[ 2) rlrrd: push p, f.isnm(a) ; save pointer to file name 2) move8 rcfn2 ; while we munPoce... 2) call defext 2) call 2inopn ; try to open with first try at extension 2) jrst rlrrd1 2) pop p, ch ; throw away old file name pointer 2) move ch, f.isnm(a) ; copy into output file name 2) movem ch, f.osnm(a) 2) jrst popj1 2) rlrrd1: pop p, f.isnm(a) ; restore the unmunged file name 2) move b, alrfn2 ; munge again with alternate extension 2) call defext 2) call 2inopn 2) jfcl ; this is our last chance 2) move ch, f.isnm(a) h1y into output file name 2) movem ch, f.osnm(a) 2) dropthruto popj1 2) ];TNX 2) NOTNX,[ 2) RLRRD: MOVE CH,LRCFN2 ;FIRST TRY "LREC" OR "LRC" AS FN2. *************** **** FILE DSK:SYSEN1;@ 695, 72-72 (187224) AFTER RLRRD1: 1) POPJ1: AOSA (P) **** FILE DSK:GUEST4;SKEF NEWAT, 67-103 (172924) AFTER RLRRD1: 2) ];NOTNX 2) POPJ1: AOSA (P) *************** **** FILE DSK:SYSEN1;@ 695, 73-23 (187753) AFTER RLRR1A: 1) CAMN R,[SIXBIT/LREC/+1] ;THIS IS WHAT IT SHOULD BE. 1) JRST RLRR2 ;FILE LOOKS LIKE LREC FILE. **** FILE DSK:GUEST4;SKEF NEWAT, 68-23 (173464) AFTER RLRR1A: 2) TNX,[ camn r, [sixbit /LREC/ + 2] ; this is what i9uld be for new lrec 2) jrst rlrr2 2) came r, [sixbit /LREC/ + 1] ; might be old format 2) jrst rlrr1y ; nope, just a losing file 2) flosei flsnnl, 0(a) ; "File is old format LREC file." 2) jrst rlrr1z ; he wants to press on anyway... 2) ];TNX 2) NOTNX,[ CAMN R,[SIXBIT/LREC/+1] ;THIS IS WHAT IT SHOULD BE. 2) JRST RLRR2 ;FILE ˧$ˋ LREC FILE. *************** **** FILE DSK:SYSEN1;@ 695, 73-27 (187961) AFTER RLRR1A: 1) FLOSEI FLSNLR,F.ISNM(A) ;"FILE IS NOT AN LREC FILE". 1) JFCL [ PUSH DP,R ;BUT USER INSISTS? OK, ASSUME IT IS ONE 1) JRST RLRR2] **** FILE DSK:GUEST4;SKEF NEWAT, 68-34 (173979) AFTER RLRR1A: 2) ];NOTNX 2) rlrr1y: FLOSEI FLSNLR,F.ISNM(A) ;"FILE IS NOT AN LREC FILE". 2) rlrr1z: JFCL [ PUSH DP,R ;BUT USER INSISTS? OK, ASSUME IT IS ONE 2) JRST RLRR2] *************** **** FILE DSK:SYSEN1;@ 695, 73-76 (189630) AFTER S)R3: 1) RLRRE: HRLZI D,(C) ;COME HERE FOR EACH ENTRY IN FILE. C -> ENTRY. 1) HRRI D,INSSNM **** FILE DSK:GUEST4;SKEF NEWAT, 68-84 (175671) AFTER RLRRL3: 2) RLRRE: hlrz d,(c) ;COME HERE FOR EACH ENTRY IN FILE. C -> ENTRY. 2) TNX,[ hrr c ; build byte pointer for TNX long file name 2) hrli d, 440700 2) movem d, inssnm ; store as input file name 2) skipe (c) ; move ahead until 0 word 2) aobjn c, .-1 2) push p, [0] ; save specified fn2 2) add c, [1,,1] ; move to subentries 2) ];TNX 2) NOTNX,[ HRLZI D,(C) 2) HRRI D,INSSNM *************** **** FILE DSK:SYSEN1;@ 695, 73-82 (189902) AFTER RLRRE: 1) PUSHH(,S ;NOW SKIP OVER SUBE)IkPOCESS3AVED SWITCHES, ETC. **** FILE DSK:GUEST4;SKEF NEWAT, 68-101 (176224) AFTER RLRRE: 2) ];NOTNX 2) PUSHJ P,RLRRS ;NOW SKIP OVER SUBENTRIES, PROCESSING SAVED SWITCHES, ETC. *************** **** FILE DSK:SYSEN1;@ 695, 76-16 (196657) AFTER MLREC1: 1) ADD B,[4,,4] ;ADVANCE PAST FILENAMES AT BEGINNING OF ENTRY. 1) ;ADVANCE PAST THE NEXT SUBENTRY. **** FILE DSK:GUEST4;SKEF NEWAT, 71-16 (182990) AFTER MLREC1: 2) TNX,[ skipe (b) ; move ahead until 0 word 2) aobjn b,.-1 2) add b,[1,,1] ; mov:oA}qe 2) ];TNX 2) NOTNX`ĉ[i,,4] .ĭANCE PAST FILENAMES 5BGINNING OF ENTRY. 2) ;ADVANCE PAST THE NEXT SUBENTRY. *************** **** FILE DSK:SYSEN1;@ 695, 77-31 (199464) AFTER XLREC2: 1) WLRDF: SKIPE A,WLRECP **** FILE DSK:GUEST4;SKEF NEWAT, 72-31 (185905) AFTER XLREC2: 2) TNX,[ 2) wlrdf: skipn a, wlrecp 2) ret 2) call getext ; get extension for file in a 2) skipq ; if b = 0, no :ezwAgiven 2) (9e ; otherwise there was one 2) move b, lrcfn2 ; just grab default extension 2) jrst defext ; cons up name with extension & return 2) ];TNX 2) NOTNX,[ 2) WLRDF: SKIPE A,WLRECP *************** **** FILE DSK:SYSEN1;@ 695, 78-2 (200251) AFTER WLREC3: 1) SUBTTL LREC DUMPING ROUTINES ( EBUGGING) **** FILE DSK:GUEST4;SKEF NEWAT, 72-67 (186969) AFTER WLREC3: 2) ];NOTNX 2) SUBTTL LREC DUMPING ROUTINES (FOR DEBUGGING) *************** **** FILE DSK:SYSEN1;@ 695, 82-42 (208231) AFTER WLREC: 1) WLRWWD B,[SIXBIT/LREC/+1] ;1ST WORD OF LREC FILE IS SIXBIT/LREC/+1 1) MOVEI A,FILES ;LOOK AT ALL FILES, **** FILE DSK:GUEST4;SKEF NEWAT, 77-42 (194961) AFTER WLREC: 2) TNX, wlrwwd b,[sixbit /LREC/ + 2] ; 1st word is sixbit /LREC/ + 2 for TNX 2) NOTNX, WLRWWD B,[SIXBIT/LREC/+1] ;1ST WORD OF LREC FILE IS SIXBIT/LREC/+1 2) 3g֋( 3" ;LOA ALL FILES, *************** **** FILE DSK:SYSEN1;@ 695, 84-50 (212474) AFTER WLRW: 1) WLRWWD B 1) NOCMU,[ ;UNDER CMU, USE THE SPECIFIED DEVICE, NTE REAL DEVICE **** FILE DSK:GUEST4;SKEF NEWAT, 79-50 (199285) AFTER WLRW: 2) TNX,[ hrrz b, b ; address of file block pointer 2) hrrz b, (b) ; address of file block 2) hrrz b, (b) ; address of filename string 2) push p,l ? push p,r ; save good old l & r 2) wlrwn0: move l,(b) ; get the word 2) wlrwwd l ; write it out 2) aos b 2) ldb r, [350700,,l] ; see if first byte was 0 2) jumpe r, wlrwn1 ; finish up if so 2) ldb r, [260700,,l] ; how about 2nd? 2) jumpe r, wlrwn1 2) ldb r, [170700,,l] ; etc. 2) jumpy,A9w1 2) ldb r, [100700,,l] 2) :e r, wlrwn1 2) ldb r, [010700,,l] 2) jumpe r, wlrwn1 2) jrst wlrwn0 ; go for next word of file name 2) wlrwn1: setz l, ; write out a zero word 2) wlrwwd l 2) pop p,r ? pop 6 wood old r & l 2) jrst wlrwss ; go down to switch setting writing outing ing 2) ];TNX 2) NOTNX, WLRWWD B 2) NOCMU,[ ;UNDER CMU, USE THE SPECIFIED DEVICE, NOT THE REAL DEVICE *************** **** FILE DSK:SYSEN1;@ 695, 84-65 (212813) AFTER WLRW: 1) WLRWWI R,LR.PSW ;SAVE ALL SWITCH SETTINGS. 1) WLRWPLY-14. .ֱi$AL.H. **** FILE DSK:GUEST4;SKEF NEWAT, 79-88 (200355) AFTER wlrwn1: 2) WLRWSS: WLRWWI R,LR.PSW ;SAVE ALL SWITCH SETTINGS. 2) WLRWWI L,-14. ;-14. IN L.H. *************** **** FILE DSK:SYSEN1;@ 695, 86-24 (216834) AFTER CPRF: 1) JRST [ CAIE D,DEVIXG ;IT PROBABLY CONTAINS XGP COMMANDS WHOSE LOSS WOULD SCREW. 1) CAIN D,DEVCGP 1) SETZM (B) 1) JRST .+1] 1) ];ITSXGP **** FILE DSK:GUEST4;SKEF NEWAT, 81-24 (204383) AFTER CPRF: 2) CAIE D,DEVIXG ;IT PROBABLY CONTAINS XGP COMMANDS WHOSE LOSS WOULD SCREW. 2) CAIA 2) SETZM (B) 2) ];ITSXGP *************** **** FILE DSK:SYSEN1;@ 695, 143-14 (316870) AFTER 2OCLS: 1) ; This is also set up to do the same for the Florida Data Systems OSP-130 1) |, **** FILE DSK:GUEST4;SKEF NEWAT, 138-14 (304391) AFTER 2OCLS: 2) ; This is also set up to do the same for the Sanders S700 Variflex 2) NoAnadex,[ *************** **** FILE DSK:SYSEN1;@ 695, 143-19 (317052) AFTER 2OCLS: 1) IFN ANAFLG!FLAFLG,[ 1) MOVE B,DEVICE **** FILE DSK:GUEST4;SKEF NEWAT, 138-19 (304566) AFTER 2OCLS: 2) IFN ANAFLG!VFXFLG,[ 2) MOVE B,DEVICE *************** **** FILE DSK:SYSEN1;@ 695, 143-24 (317165) AFTER 2OCLS: 1) CAIN B,DEVFLA ; skip if not Florida OSP-130 1) pushj p,CRLOUT **** FILE DSK:GUEST4;SKEF NEWAT, 138-24 (304679) AFTER 2OCLS: 2) CAIN B,DEVVFX ; skip if not Sanders Variflex 2) pushj p,CRLOUT *************** **** FILE DSK:SYSEN1;@ 695, 144-61 (319863) AFTER DEVPDO: 1) DEVANA:: 0 1) DEVCGP:: 0 1) DEVFLA:: 0 1) DEVMAX::OFFSET 0 1) ];ITS 1) CMU, 2QUEUE: POPJ P, 1) T10, 2QUEUE: POPJ P, **** FILE DSK:GUEST4;SKEF NEWAT, 139-61 (307378) AFTER DEVPDO: 2) DEVANA:: 0 2) DEVVFX:: 0 2) DEVMAX::OFFSET 0 2) ];ITS 2) ;CMU, 2QUEUE: POPJ P, ; screwing assembly with SITE==CMU20FLG! 2) T10, 2QUEUE: POPJ P, *************** **** FILE DSK:SYSEN1;@ 695, 145-43 (321133) AFTER DEVPDO: 1) DEVANA:: 0 1) DEVCGP:: 0 1) DEVFLA:: 0 **** FILE DSK:GUEST4;SKEF NEWAT, 140-43 (308681) AFTER DEVPDO: 2) DEVANA:: 0 2) DEVFLA:: 0 *************** **** FILE DSK:SYSEN1;@ 695, 147-6 (323316) AFTER 2LOOPD: 1) REPEAT 4,[ **** FILE DSK:GUEST4;SKEF NEWAT, 142-6 (310853) AFTER 2LOOPD: 2) TNX,[ skipn b, outfil ; skip if outfil was given 2) jrst 2loopo 2) movem b, f.osnm(a) ; make that the filename here 2) jrst 2loopz ; go and open it up 2) 2loopo: push p, a ; save a 2) skipe a, ofile ; close output file if one is open 2) call 2oclsq 2) move a, (p) ; look at file block again 2) move b, f.isnm(a) ; get input name 2) movem b, f.osnm(a) ; copy to output name 2) movei a, f.osnm(a) ; move to output filename 2) skipe b, fntspc ; grab default extension in b 2) skipl b, device 2) cail b, devmax 2) .value 2) move b, optfn2(b) 2) call defext ; defaultify extension of output name 2) ;w a, ( Dw restore pointer to 7 fileok 2) movem a, ofile 2) 2loopz: 2) ];TNX 2) NOTNX,[ 2) REPEAT 4,[ *************** **** FILE DSK:SYSEN1;@ 695, 147-48 (324663) AFTER 2LOOPO: 1) ITS, MOVE H,[SIXBIT/OUTPUT/] **** FILE DSK:GUEST4;SKEF NEWAT, 142-70 (312887) AFTER 2LOOPO: 2) ];NOTNX 2) ITS, MOVE H,[SIXBIT/OUTPUT/] *************** **** FILE DSK:SYSEN1;@ 695, 147-69 (325124) AFTER DEVANA: 1) DEVCGP::2FNTIX ; Like ITS XGP 1) DEVFLA::FLAINI 1) DEVMAX::OFFSET 0 **** FILE DSK:GUEST4;SKEF NEWAT, 142-92 (313357) AFTER DEVANA: 2) DEVVFX::VFXINI 2) DEVMAX::OFFSET 0 *************** **** FILE DSK:SYSEN1;@ 695, 152-2 (329558) AFTER ADAINI: 1) SUBTTL Assorted Florida Data OSP-130 code 1) NOFLORbAYFLAINI==:CPOPJ 1) FLORIDA,[ 1) FLAINI: 1) POPJ P, 1) ];FLORIDA 1) SUBTTL PASS 2 INPUT FILE OPEN ROUTINES **** FILE DSK:GUEST4;SKEF NEWAT, 147-1 (317757) AFTER ADAINI: 2) SUBTTL Assorted Sanders Variflex 2) NOVARIFLEX,FLAINI==:CPOPJ 2) VARIFLEX,[ 2) VFXINI: 2) ; first of all, compute number of lines per page and establish all the 2) ; vertical formatting parameters 2) move A,PGLDOT+DEVVFX ; get paper height 2) movei B,[ASCIZ /FL/] 2) pushj P,RCLNUM ; output numeric RCL 2) movei B,[ASCIZ /VMON/] 2) pushj P,OUTRCL ; turn on vertical forms control 2) move B,MARG.T ; get top marg in mils 2) imul B,DOTPIV+DEVVFX ; compute in 1K VEPs 2) addi B,500. ; round 2) idivi B,1000. ; convert to VEPs 2) push P,A 2) push P,B 2) move A,B ; send it out 2) movei B,[ASCIZ /TM/] 2) pushj P,RCLNUM 2) pop P,B 2) pop P,A 2) sub A,B ; deduct top margin 2) move B,MARG.B ; get bottom margin in mils 2) imul B,DOTPIV+DEVVFX ; compute in 2VPs 2) addi B,500. ; round 2) idivi B,1000. ; convert to VEPs 2) push P,A 2) push P,B 2) move A,B 2) movei B,[ASCIZ /BM/] 2) pushj P,RCLNUM 2) pop P,B 2) pop P,A 2) sub A,B ; deduct b:opin 2) idivi A,48. ; divide by Veps/Line 2) skipn EPAGEL ; did user give explicit page length? 2) movem A,PAGEL ; no, store this value 2) ; Now output the horizontal parameters, and update the LNL parameter 2) 2) move A,LNLDOT+DEVVFX ; get paper width 2) movei B,[ASCIZ /FW/] 2) pushj P,RCLNUM ; output numeric RCL 2) move B,MARG.L ; get left marg in mils 2) add B,MARG.H ; add hole margin in mils 2) imul B,DOTPIH+kVX ; compute in 1K HEPs 2) addi B,500. ; round 2) idivi B,1000. ; convert to HEPs 2) push P,A 2) push P,B 2) move A,B ; send it out 2) movei B,[ASCIZ /LM/] 2) pushj P,RCLNUM 2) pop P,B 2) pop P,A 2) <A,B ; deduct left margin 2) ;w0MRG.R ; get right marw n mils 2) imul B,DOTPIH+DEVVFX ; compute in 1K HEPs 2) addi B,500. ; round 2) idivi B,1000. ; convert to HEPs 2) push P,A 2) push P,B 2) move A,B 2) movei B,[ASCIZ /RM/] 2) pushj P,Rs'U 2) pop P,B 2) pop P,A 2) sub A,B ; deduct right margin 2) imuli A,16. ; multiply by Chars/In (Using GOUS1617) 2) idiv A,DOTPIH+DEVVFX ; divide by Heps/In 2) skipn ELINEL ; did user give /W? 2) movem A,LINEL .n9re as chars/line 2) ; now, finally select the font 2) movei B,[ASCIZ /AF0,GOUS1617/] 2) pushj P,outRCL 2) movei B,[ASCIZ /SF0/] 2) pushj P,outRCL 2) pushj P,2INIT ; re-initialize pass 2 values! 2) 4'Е P, 2) ; OUTRCL --- write an unparamterized RCL command 2) ; B - pointer to ASCIZ string 2) hA- preserved 2) OUTRCL: push P,A 2) push P,B 2) 2patCH "! 2) pop P,B 2) pushj P,ASCRCL 2) 2patCH "! 2) pop P,A 2) popj P, 2) ; RCLNUM --- write an RCLand with a numeric argument 2) ; B - pointer to ASCIZ string 2) ; A - numeric value 2) ; -9eerved 2) RCLNUM: push P,A 2) push P,B 2) 2patCH "! 2) pop P,B 2) pushj P,ASCRCL 2) move A,(P) 2) pushj P,000X ; write out number 2) 2patCH "! 2) pop P,A 2) popj P, 2) ];VARIFLEX 2) SUBTTL PASS 2 INPUT FILE OPEN ROUTINES *************** **** FILE DSK:SYSEN1;@ 695, 154-9 (332027) AFTER 2RDAHD: 1) TF6TOA: PUSH P,B 1) MOVE B,[440700*FLNM] 1) SETZM TFILNM ; Ensure string initially empty 1) CALL TF6TOB **** FILE DSK:GUEST4;SKEF NEWAT, 149-9 (322792) AFTER 2RDAHD: 2) ; If the left hand side of the SNAME is -1, the right hand side is the address 2) ; of a long file name. In this case, we just copy the string into TFILNM and 2) ; everyone should be happy. 2) TF6TOA: PUSH P,B 2) hlrz b,(a) ; check SNAME 2) 8 b,440700;real quick hack for testing... would be W.] 2) jrst tf6to0 2) push p,a ; copy long file name into TFILNM 2) push p,c 2) hrrz a,(a) 2) hrli a,440700 2) move b,[440700,,tfilnm] 2) ildb c,a 2) idpb c,b 2) jumpn c,.-2 2) pop p,c 2) pop p,a 2) pop p,b 2) ret 2) tf6to0: STRT [asciz /Old format file block encountered. TNX @ Bug./] 2) MOVE B,[440700,,TFILNM] 2) push p,B ; insure string is initially empty because 2) ; of various problems with non-robust code 2) ; around JSYSes 2) setz B, 2) IDPB B,(P) 2) pop P,B 2) MOVE B,[440700,,TFILNM] 2) CALL TF6TOB *************** **** FILE DSK:SYSEN1;@ 695, 154-30 (332475) AFTER TF6TOB: 1) 10X, MOVEI C,"< ? IDPB C,A 1) MOVE C,A ; Preserve byte pointer in case of failure 1) DIRST ; T20 adds punctuation by itself. 1) ERCAL [MOVE A,C ; If fail, restore old byte pointer 1) POPJ P,] 1) 10X, MOVEI C,"> ? IDPB C,A 1) JRS+c] **** FILE DSK:GUEST4;SKEF NEWAT, 149-56 (323925) AFTER TF6TOB: 2) 10X, MOVEI C,"< 2) 10X, IDPB C,A 2) move C,A ; preserve byte pointer 2) "bIuw T20 adds punctuatio1yA=9f. 2) ercal [ move A,C ; if fail, restore old byte pointer 2) popj P,] 2) ; ...otherwise, DIRST has updated the pointer 2) ,,,3g֋I C,"> 2) 10X, IDPB C,A 2) JRST .+1] *************** **** FILE DSK:SYSEN1;@ 695, 154-74 (333357) AFTER LBPAS1: 1) ];TNX **** FILE DSK:GUEST4;SKEF NEWAT, 149-105 (324864) AFTER LBPAS1: 2) ;;; DefExt defaults the extension of a file name i:h file bloch8onted to 2) ;;; by A to the string pointed to by B. 2) defext: push p,c ? push p,d ? push p,h ; save these things 2) push p, b ; save b on top 2) move b, 0(a) ; copy file name 2) move h, namnxt 2) hrli h, 440700 2) movem h, 0(a) ; replace file name with the one we're making 2) defex1: ildb c, b 2) jumpe c, se2 ; end of file 1 if end of string 2) cain c, ". ; or we hit a dot 2) jrst defex2 2) idpb c, h 2) hrrz d, h ; see if we've run out of filename space 2) caige d, namend 2) jrst defex1 ; if not, keep looping 2) jrst fnsgon ; all gone 2) defex2: movei c, ". ; throw a dot down 2) idpb c, h 2) pop p, b ; get extn 2) defex3: ildb c, b 2) idpb c, h 2) jumpe c, defex4 2) hrrz d, h ; see if we've run out of filename space 2) caige d, namend 2) jrst defex3 ; nah, keep copying 2) jrst fnsgon ; all gone 2) defex4: aos h ; save new next filename pointer 2) hrrm h, namnxt 2) pop p,h ? pop p,d ? pop p,c 2) ret 2) ;;; GetExt returns a7ter to the file's extensii r zero. 2) getext: push p,c ? push p,d ; save c & d 2) move c, 0(a) ; get pointer to filename 2) getex1: ildb d, c 2) jumpe d, getex2 ; return zero if end of string 2) caie d, ". ; return pointer if we've hit a dot 2) jrst getex1 ; else keep on looping 2) move b, c 2) pop p,d ? pop p,c ; restore c & d 2) ret 2) getexNp p,d ? pop p,c ; re}7 c & d 2) setz b, 2) ret 2) ;;; FNSGon tells the luser that we're out of filename space, and dies. 2) fnsgon: STRT [ASCIZ /Out of filename space! 2) /] 2) jrst errdie 2) ];TNX *************** **** FILE DSK:SYSEN1;@ 695, 162-71 (349333) AFTER PRSD4: 1) CAIL L,EFILES ;PRESS FILE HEADER PAGE. 1) JRST PRSD5 1) MOVE CH,F.OFN1(L) ;BUT, IF THIS OUTPUT FILE CORRESPONDS TO AN INPUT FILE 1) CAMN CH,F.RFN1(L) ;WHICH HAS THE SAME FN1 AS THE OUTPUT FILE, **** FILE DSK:GUEST4;SKEF NEWAT, 157-71 (342393) AFTER PRSD4: 2) TNX, NOP 2) NOTNX,[ CAIL L,EFILES ;PRESS FILE HEADER PAGE. 2) JRST PRSD5 2) ];NOTNX 2) TNX,[ move b, f.osnm(l) ; pointer to file name 2) call ascout ; shove it out 2) N 2) NOTNX͟PC,F.OFN1(L) ;BUT$ATHIS jPT FILE CORQiПNDS TO AN 3Ű 2) CAMN CH,FԣNc(L) ;$Ñ ATHE SAME FN1 AS$EAjP#IE, *************** **** FILE DSK:SYSEN1;@ 695, 162-78 (349705) AFTER PRSD5: 1) POP P,A **** FILE DSK:GUEST4;SKEF NEWAT, 157-83 (342884) AFTER PRSD5: 2) ];NOTNX 2) POP P,A *************** **** FILE DSK:SYSEN1;@ 695, 181-26 (387191) AFTER SLURP3: 1) IFN ANAFLG!FLAFLG,[ 1) SLGLEQ: PUSH P,B .SEE 2MXCRF ; to understand PUSH **** FILE DSK:GUEST4;SKEF NEWAT, 176-25 (380377) AFTER SLURP3: 2) IFN ANAFLG!VFXFLG,[ 2) SLGLEQ: PUSH P,B .SEE 2MXCRF h:oAe}0*ӑ *************** **** FILE DSK:SYSEN1;@ 695, 181-48 (387767) AFTER SLGNC1: 1) FLORIDA,[ 1) CAIE B,DEVFLA ; skip if OSP-130 1) JRST SLGNC2 .se if some 4e type, or done **** FILE DSK:GUEST4;SKEF NEWAT, 176-47 (380953) AFTER SLGNC1: 2) VARIFLEX,[ 2) CAIE B,DEVVFX ; skip if Sanders S700 2) JRST SLGNC2 ; see if some other type, or done *************** **** FILE DSK:SYSEN1;@ 695, 181-53 (387917) AFTER SLGNC1: 1) MOVEI CH,33 ; underline on 1) 2PUTCH 1) MOVEI CH,'E ; E 1) 2PUTCH 1) MOVE CH,0(P) ; get input char back **** FILE DSK:GUEST4;SKEF NEWAT, 176-52 (381109) AFTER SLGNC1: 2) movei B,[ASCIZ /BU/] 2) pushj P,OutRCL 2) MOVE CH,0(P) ; get input char back *************** **** FILE DSK:SYSEN1;@ 695, 181-62 (388148) AFTER SLGNC1: 1) MOVEI CH,33 ; underline off 1) 2PUTCH 1) MOVEI CH,'R 1) 2PUTCH 1) POP P,CH ; return original **** FILE DSK:GUEST4;SKEF NEWAT, 176-59 (381308) AFTER SLGNC1: 2) movei B,[ASCIZ /EU/] 2) pushj P,OutRCL 2) 4' ! ; return nal *************** **** FILE DSK:SYSEN1;@ 695, 181-72 (388364) AFTER SLGNC2: 1) ]; ANADEX!FLORIDA 1) SLLF: TRZE F,FRLCR **** FILE DSK:GUEST4;SKEF NEWAT, 176-67 (381501) AFTER SLGNC2: 2) ]; ANADEX!VARIFLEX 2) SLLF: TRZE F,FRLCR *************** **** FILE DSK:SYSEN1;@ 695, 181-118 (389550) AFTER SLTAB: 1) FLORIDA,[ 1) PUSH P,B 1) MOVE B,DEVICE 1) CAIN B,DEVFLA ; skip if not florida OSP-130 1) JRST [POP P,B **** FILE DSK:GUEST4;SKEF NEWAT, 176-113 (382688) AFTER SLTAB: 2) VARIFLEX,[ 2) PUSH P,B 2) MOVE B,DEVICE 2) CAIN B,DEVVFX ; skip if not Sanders S700 2) JRST [POP P,B *************** **** FILE DSK:SYSEN1;@ 695, 181-125 (389683) AFTER SLTAB: 1) ]; FLORIDA 1) TLNE F,FLXGP ;IN XGP LISTINGS, MUST CONVERT TABS TO SPACES **** FILE DSK:GUEST4;SKEF NEWAT, 176-120 (382819) AFTER SLTAB: 2) ]; VARIFLEX 2) TLNE F,FLXGP ;IN XGP LISTINGS, MUST CONVERT TABS TO SPACES *************** **** FILE DSK:SYSEN1;@ 695, 181-153 (390317) AFTER SLURP4: 1) 2PUTCH "$ **** FILE DSK:GUEST4;SKEF NEWAT, 176-148 (383454) AFTER SLURP4: 2) VARIFLEX,[ 2) 3g֋ B,DEVICE 2) CAIE B,DEVVFX 2) jrst SLURP5 2) 2PUTCH "= 2) movei B,[ASCIZ /NE/] 2) pushj P,outRCL 2) 2PATCH "/ 2) jrst SLALT1 2) SLURP5: 2) ];VARIFLEX 2) 2PUTCH "$ *************** **** FILE DSK:SYSEN1;@ 695, 182-2 (390437) AFTER ANADEX,SLA 1) SLTBL: JRST SLNUL ;^@ **** FILE DSK:GUEST4;SKEF NEWAT, 176-164 (383733) AFTER ANADEX,SLA 2) SLVFX: 2) VARIFl, 2) move B,DEVICE 2) caie B,DEVVFX 2) jrst SLURP1 ; nothing special if not Variflex 2) movei B,[ASCIZ /IC/] 2) pushj P,OutRCL ; insert it 2) ];VARIFLEX 2) NOVARIFLEX,[ 2) 2PUTCH "! 2) ];NOVARIFLEX 2) movei CH,'! 2) aoja0QH) 2) SLTBL: JRST SLNUL ;^@ *************** **** FILE DSK:SYSEN1;@ 695, 182-14 (390705) AFTER SLTBL: 1) IFE ANAFLG!FLAFLG,[ 1) REPEAT 4, JRST SLCTL ;^\-^_ 1) ];ANAFLG!FLAFLG 1) IFN ANAFLG!FLAFLG,[ 1) JRST SLGLEQ ;^\ - leq [ **** FILE DSK:GUEST4;SKEF NEWAT, 177-14 (384238) AFTER SLTBL: 2) IFE ANAFLG!VFXFLG,[ 2) REPEAT 4, JRST SLCTL ;^\-^_ 2) ];ANAFLG!VFXFLG 2) IFN ANAFLG!VFXFLG,[ 2) JRST SLGLEQ ;^\ - leq [ *************** **** FILE DSK:SYSEN1;@ 695, 182-21 (390878) AFTER SLTBL: 1) ];IFN ANAFLG!FLAFLG 1) TRO F,FRLTAB ;SPACE 1) REPEAT 14., TRZ F,FRLTAB ;! " # $ % & ' ( ) * + , - . 1) JRST SLSLSH ;/ **** FILE DSK:GUEST4;SKEF NEWAT, 177-21 (384411) AFTER s*B: 2) ];IFN ANAFLG!VFXFLG 2) TROFLTAB ;SPACE 2) IFE VFXFLG,[ 2) TRZ F,FRLTAB ;! 2) ] 2) IFN VFXFLG,[ 2) jrst SLVw! 2) ] 2) REPEAT 13., TRZ F,FRLTAB ;" # $ % & ' ( ) * + , - . 2) JRST SLSLSH ;/ *************** **** FILE DSK:SYSEN1;@ 695, 196-26 (411285) AFTER SIXOUT: 1) ;OUTPUT ASCIZ STRING POINTED TO BY ADDRESS IN B. **** FILE DSK:GUEST4;SKEF NEWAT, 191-26 (404888) AFTER SIXOUT: 2) VARIFLEX,[ 2) ; OUTPUT ASCIZ STRING POINTED TO BY ADDRESS IN B. 2) ; DOEh'OhDTE CC OR O+P] CRLF'S M6PB INCLUDED. 2) ; 2) ASCRCL: HRLI B,440700 2) ASCRC1: ILDB CH,B 2) JUMPE CH,CPOPJ 2) 2PATCH 2) jrst ASCRC1 2) ]; VARIFLEX 2) ;OUTPUT ASCIZ STRING POINTED TO BY ADDRESS IN B. *************** **** FILE DSK:SYSEN1;@ 695, 197-53 (414120) AFTER FILOU2: 1) MOVE CH,A ; Save BP in case of error 1) DIRST ; Dir # is in B 1) ERCAL [MOVE A,CH ; Error, restore BP 1) POPJ P,] 1) ,,,MOVEI CH,"! H,A **** FILE DSK:GUEST4;SKEF NEWAT, 192-53 (407943) AFTER FILOU2: 2) move ch,A 2) DIRST ; Dir # is in B 2) ercal [move A,CH ; in case of error, A was destroyed 2) popj P,] 2) 10X, MOVEI CH,"> ? IDPB CH,A *************** **** FILE DSK:SYSEN1;@ 695, 197-157 (416219) AFTER ITS,FNTOUT 1) NOITS,[ 1) IFN <.SITE 0,>-,FNTOUT==:FILOUT 1) .ELSE [ 1) ;Print an ITS-style file name on a non-ITS system (for XGP purposes). 1) ; Assumes directory is FONTS. MIT-XX 1) ;is the onPmz44a shouue this, mo}lkely. **** FILE DSK:GUEST4;SKEF NEWAT, 192-157 (410032) AFTER ITS,FNTOUT 2) SAI,FNTOUT==:FILOUT 2) NOITS,[ 2) NOSAI,[ 2) ;Print an ITS-style file name on a non-ITS system (for XGP purposes). 2) pl onlyh3oY and