mirror of
https://github.com/PDP-10/its.git
synced 2026-01-27 12:42:10 +00:00
2422 lines
47 KiB
Plaintext
2422 lines
47 KiB
Plaintext
|
||
TITLE SCRIMP
|
||
;THE MIT XGP UNSPOOLER PITTS JARVIS 4/13/74
|
||
;PLOT AND SCAN ADDED BY TK
|
||
;SQUISH COMMAND ADDED BY GLS AND H 4/14/75
|
||
|
||
.MLLIT==1
|
||
|
||
;AC ASSIGNMENTS
|
||
|
||
A=1
|
||
B=2
|
||
C=3
|
||
D=4
|
||
E=5
|
||
T=6 ;SUPER TEMPORARIES, NOT PRSERVED OVER SUBROUTINE CALLS
|
||
TT=7
|
||
X=10
|
||
Z=11
|
||
Y=12
|
||
X0=13
|
||
Y0=14
|
||
FONT=15 ;FONT INDEX
|
||
CHNL=16 ;TEN TO 11 CHANNEL
|
||
P=17
|
||
|
||
.XCREF A B C D E T TT X Z Y X0 Y0 FONT CHNL P XX
|
||
|
||
NCHNL==3 ;# OF CHANNELS WE ARE WILLING TO ADMIT
|
||
COCHNL==0 ;COMMAND OUT
|
||
CICHNL==1 ;COMMAND IN
|
||
DOCHNL==2 ;DATA OUT
|
||
|
||
;TIME SHARING I/O CHANNELS
|
||
|
||
TTYICH==0
|
||
TTYOCH==1
|
||
FNTICH==2
|
||
TXTICH==3
|
||
ERRICH==4
|
||
|
||
LAMBDA==10.*60. ;10 SECOND TIME OUT ON XGP
|
||
XGP11==1 ;IDENTIFICATION # OF XGP PDP-11
|
||
MAXFNT==20 ;MAXIMUM # FONTS WE WILL SEND TO PDP11
|
||
TTY1==3 ;ONLY THESE TTYS CAN SEND TO XGP
|
||
TTY2==24
|
||
CLKINT==200000 ;REAL TIME INTERRUPT, LEFT HALF
|
||
IOCINT==400 ;IO CHANNEL ERROR, RIGHT HALF
|
||
MAPMSK==574377776000 ;MASK TO TYPE 10-11 MAP TABLE ENTRIES
|
||
|
||
DEFINE CONC A,B,C
|
||
A!B!C
|
||
TERMIN
|
||
|
||
MK==117. ;MAX NUMBER OF BLOCKS ALLOWABLE FOR PLOT FILES
|
||
WDSPL==51.+2
|
||
YBITL==51.*32.
|
||
XBITL==11.*200.
|
||
BYTMAX==52.*4
|
||
|
||
LOC 42
|
||
JSR TSINT
|
||
|
||
LOC 100
|
||
|
||
GO: MOVE P,[-PDL,,PDB-1] ;GET A PDL
|
||
.OPEN TTYICH,[(SIXBIT /TTY/)] ;OPEN THE TTY
|
||
.VALUE
|
||
.OPEN TTYOCH,[1,,(SIXBIT /TTY/)]
|
||
.VALUE
|
||
.SUSET [.RIOC+TTYOCH,,A]
|
||
HLRZS A
|
||
ANDI A,77
|
||
MOVEM A,TTYNUM
|
||
CAIE A,TTY1
|
||
.VALUE [ASCIZ /:USE T03 (TELETYPE 35 NEAR XGP-11)
|
||
/]
|
||
.LOGOUT ;I HATE THOSE GOD DAMN BAG BITERS WHO TRY TO MAKE ME TOP LEVEL
|
||
PUSHJ P,VERTYP
|
||
.CORE ICORE ;REDUCE TO INITIAL CORE
|
||
.LOSE
|
||
SKIPN TXTSNM
|
||
.SUSET [.RSNAM,,TXTSNM]
|
||
SETZM DSKCMD
|
||
SETZM NOTYPE
|
||
MOVEI A,LNKVPG
|
||
MOVEM A,T11PAG
|
||
.CALL [ SETZ
|
||
SIXBIT /T11MP/
|
||
T11PAG
|
||
SETZ [<3_34.>\1777\<LNKV_10>\<XGP11_26.>]]
|
||
.VALUE NOPDP11
|
||
SKIPN 10LNKV
|
||
.HANG ;WAIT FOR 11 TO SET THINGS UP
|
||
MOVE A,[CLKINT,,IOCINT]
|
||
MOVEI B,1_<TTYICH>
|
||
.SETM2 A,
|
||
MOVE A,[200000,,B]
|
||
MOVEI B,LAMBDA ;XGP TIME OUT
|
||
.REALT A,
|
||
JFCL
|
||
PUSH P,[442000,,10LNKV]
|
||
ILDB A,(P) ;POINTS AT CHANNEL HEADERS
|
||
ILDB B,(P) ;# CHANNELS
|
||
IMULI B,BPRCHL ;# BYTES IN AREA
|
||
PUSHJ P,GET11 ;GET THAT PAGE
|
||
ILDB A,(P) ;ORIGIN OF BUFFER AREA
|
||
ILDB B,(P) ;SIZE (BYTES)
|
||
MOVEM A,BUFORG
|
||
SUB P,[1,,1]
|
||
PUSHJ P,GET11 ;GET BUFFER IN MAP
|
||
MOVEI CHNL,COCHNL
|
||
PUSHJ P,OPEN
|
||
|
||
;FALLS THROUGH
|
||
|
||
;MAIN LOOP
|
||
|
||
RECYCL: SETOM SET ;NO ERRORS FLAG
|
||
MOVE P,[-PDL,,PDB-1] ;RESET THE STACK
|
||
MOVEI CHNL,COCHNL
|
||
SETZB FONT,HDRCNT
|
||
SETZM DFHDRF
|
||
PUSHJ P,OPEN ;OPEN UP THE DATA CHANNEL
|
||
PUSHJ P,VRESET ;RESET VAIABLES
|
||
PUSHJ P,FRESET ;RESET FONTS
|
||
PUSHJ P,PRESET ;RESET PRINT FILE NAME AND DEVICE
|
||
PUSHJ P,COMMAN ;GET COMMAND FROM TTY OR OTHER
|
||
PUSHJ P,TXTOPN ;OPEN TEXT INPUT FILE
|
||
PUSHJ P,TXTFNF ; FILE NOT FOUND
|
||
SKIPN TXTCMD
|
||
JRST RECYC1 ;DON'T READ COMMANDS
|
||
SKIPGE SET
|
||
PUSHJ P,RTXTCM ;READ SETTINGS FROM TXTFILE
|
||
RECYC1: SKIPN SQSHFL ;SQUISH?
|
||
JRST RECYC2 ; NO
|
||
SKIPL SET
|
||
JRST RECYCL
|
||
PUSHJ P,PRESCN ; MUST PERFORM PRE-SCAN
|
||
PUSHJ P,TXTOPN
|
||
PUSHJ P,TXTFNF ;CONFUSION
|
||
RECYC2: SKIPL SET
|
||
JRST RECYCL
|
||
PUSHJ P,FONTS ;SEND THOSE FONTS
|
||
MOVEI FONT,0
|
||
SKIPL SET
|
||
JRST RECYCL ;ERRORS HAVE HAPPENED
|
||
PUSHJ P,SNDTXT ;SKIP PAGES AND SEND REMAINDER
|
||
.CLOSE TXTICH,
|
||
JRST RECYCL
|
||
|
||
;THIS IS THE FILE NAME READER
|
||
|
||
.INSRT SYSEN2; FNR >
|
||
|
||
;SCRIMPY INTERRUPT ROUTINES
|
||
|
||
TSINT: 0
|
||
0
|
||
PUSH P,A
|
||
SKIPGE A,TSINT
|
||
JRST TTYBRK ;TTY CHANNEL INTERUPT
|
||
TLZE A,CLKINT
|
||
JRST TSCLK ;CLOCK INTERUPT
|
||
TRZE A,IOCINT
|
||
JRST IOCERR ;IO CHANNEL ERROR
|
||
JRST TSX
|
||
TTYBRK: TRZN A,1_<TTYICH>
|
||
JRST TSX
|
||
MOVEI A,TTYICH
|
||
.ITYIC A,
|
||
JRST TSX
|
||
CAIN A,^G
|
||
PUSHJ P,CNTRLG ;STOP THE WORLD, HE TYPED CONTROL-G
|
||
TSX: POP P,A
|
||
.DISMI TSINT+1
|
||
|
||
TSCLK: MOVE A,ABORTL
|
||
TLZ A,777774
|
||
JUMPE A,TSX
|
||
POP P,A
|
||
.DISMI [CRASH]
|
||
|
||
;HERE FOR IO CHANNEL ERROR
|
||
|
||
IOCERR: MOVEI B,[ASCIZ /IO CHANNEL ERROR: /]
|
||
PUSHJ P,OUTSTR
|
||
.SUSET [.RBCHN,,A]
|
||
CAIN A,FNTICH ;IS IT FONT LOSSAGE
|
||
JRST [ PUSHJ P,FNTFNF
|
||
JRST IOCER1]
|
||
CAIN A,TXTICH ;PERHAPS IT IS THE TEXT FILE
|
||
JRST [ PUSHJ P,TXTFNF
|
||
JRST IOCER1]
|
||
PUSHJ P,ERRTYP ;HUH? WHAT'S THIS CHANNEL
|
||
IOCER1: MOVEI A,40 ;PUT A SPACE AT END
|
||
PUSHJ P,TYO
|
||
.CLOSE TXTICH,
|
||
.CLOSE FNTICH,
|
||
SETOM ABORTF ;TRY ABORTING THE LISTING
|
||
.DISMI [CRASH]
|
||
|
||
;HERE FOR CONTROL-G TYPED AT CONSOLE, GOBBLE UP ALL HIS TYPE IN
|
||
|
||
CNTRLG: SETOM ABORTF
|
||
PUSHJ P,TYI
|
||
CAIE A,^G
|
||
JRST .-2
|
||
POPJ P,
|
||
|
||
;COMMAND LINE SCANNER
|
||
|
||
COMMAN: PUSHJ P,SOUT ;CARRIAGE RETURN AND STAR
|
||
PUSHJ P,TTYLIN ;GET TTY LINE INTO COMAND BUFFER
|
||
COMAN1: MOVE B,[PUSHJ P,COMGET]
|
||
MOVE C,[-1,,["_]] ;BREAK TABLE
|
||
JSR FNR"GETFIL ;NON-SKIP RETURN FOR NULL FILE SPEC
|
||
JRST [ CAIN A,";
|
||
JRST ALTER
|
||
PUSHJ P,HUH
|
||
JRST COMMAN]
|
||
SETZM TXTFN1
|
||
SETZM TXTFN2
|
||
JUMPE E,GETFNT
|
||
MOVEM E,TXTFN1 ;FN1
|
||
SKIPN T
|
||
MOVSI T,360000 ;GREATER THAN
|
||
MOVEM T,TXTFN2 ;FN2
|
||
SKIPE TT
|
||
MOVEM TT,TXTSNM ;SNAME
|
||
SKIPE D
|
||
MOVEM D,TXTO ;DEV
|
||
GETFNT: SETZM ABORTF
|
||
CAIN A,15
|
||
PUSHJ P,COMGET ;IGNORE CARRIAGE RETURNS
|
||
CAIN A,12
|
||
POPJ P, ;END OF LINE
|
||
CAIE A,"_
|
||
SKIPA B,[[ASCIZ /IGNORING FONT SPEC/]]
|
||
PUSHJ P,GETF0 ;READ FONT FILE NAMES
|
||
JRST COMERR
|
||
POPJ P,
|
||
|
||
;ROUTINE TO READ FONT FILE NAMES
|
||
|
||
GETF0: MOVE C,[-1,,[",]]
|
||
MOVEI FONT,0
|
||
GETF0A: PUSH P,FONT
|
||
JSR FNR"GETFIL
|
||
JRST GETF2
|
||
MOVE FONT,(P)
|
||
JUMPE E,GETF1
|
||
MOVEM E,FNTFN1(FONT) ;FNAM1
|
||
SKIPN T
|
||
MOVSI T,'KST
|
||
MOVEM T,FNTFN2(FONT) ;FNAM2
|
||
GETF1: SKIPN TT
|
||
MOVE TT,FNTSNM ;DEFAULT SNAME
|
||
MOVEM TT,FNTSNM(FONT)
|
||
SKIPN D
|
||
MOVSI D,'DSK ;DEFAULT DEVICE
|
||
MOVEM D,FNTO(FONT)
|
||
SETOM FCHFLG(FONT)
|
||
CAIN A,15
|
||
PUSHJ P,COMGET ;IGNORE CARRIAGE RETURNS
|
||
GETF2: POP P,FONT
|
||
CAIN A,12
|
||
JRST POPJ1 ;A-OK
|
||
ADDI FONT,FNTVLN
|
||
CAIGE FONT,MAXFNT*FNTVLN
|
||
CAIN A,",
|
||
JRST GETF0A ;GO BACK FOR MORE
|
||
MOVEI B,[ASCIZ /IGNORING JUNK AT END OF FONT SPECS/]
|
||
POPJ P,
|
||
|
||
;TTY LEVEL COMMAND RETURN
|
||
|
||
COMERR: PUSH P,A
|
||
COMER1: PUSHJ P,TERPRI
|
||
POPXIT: POP P,A
|
||
COMXIT: CAIN A,12
|
||
POPJ P,
|
||
PUSHJ P,COMGET
|
||
JRST COMXIT
|
||
|
||
HUH: MOVEI B,[ASCIZ /???/]
|
||
JRST COMERR
|
||
|
||
;ALTER MODE COMES HERE
|
||
|
||
ALTER: PUSHJ P,SPCSKP ;SKIP OVER SPACES, TABS, AND CRS
|
||
CAIN A,12
|
||
JRST COMMAN ;IGNORE BLANK ALTER COMMANDS
|
||
ALTCOM: PUSHJ P,DECODE
|
||
JRST [ PUSHJ P,HUH
|
||
JRST COMMAN] ;UNDEFINED COMMAND
|
||
PUSHJ P,SPCSKP
|
||
SETZM ABORTF
|
||
MOVE C,COMTAB(B)
|
||
PUSHJ P,(C)
|
||
PUSHJ P,COMERR ;ROUTINE LOST, TELL THE PEOPLE WHY
|
||
PUSHJ P,COMXIT ;GOBBLE UP REST OF LINE
|
||
JRST COMMAN ;BACK TO PRINT MODE
|
||
|
||
;HERE TO SKIP OVER SPACES IN COMMAND LINE
|
||
|
||
SPCSKP: CAIN A,12 ;DON'T SKIP OVER LINE FEED
|
||
POPJ P,
|
||
SPCSK1: PUSHJ P,COMGET
|
||
SPCSK2: CAIE A,40
|
||
CAIN A,11
|
||
JRST SPCSK1
|
||
CAIN A,15
|
||
JRST SPCSK1
|
||
POPJ P,
|
||
|
||
;COMMAND DISPATCH TABLE
|
||
|
||
DEFINE XX NAME,ROUTIN
|
||
[SIXBIT /NAME/],,ROUTIN
|
||
TERMIN
|
||
|
||
;SHOULD BE IN ALPHABETICAL ORDER
|
||
;ALL THESE ROUTINES SHOULD SKIP RETURN IF NO ERRORS
|
||
; ERROR RETURN WITH POINTER TO ASCIZ STRING IN B
|
||
; NORML RETURN
|
||
|
||
COMTAB:
|
||
XX AUTCUT,SETCUT
|
||
XX BOTMAR,SETBOT
|
||
XX FFCUT,SETFFC
|
||
XX HEADER,HEADER
|
||
XX HEIGHT,SHWHGT
|
||
XX HELP,HELP
|
||
XX KILL,KILL
|
||
XX KSET,KSET
|
||
XX LFTMAR,SETLFT
|
||
XX LIST,LIST
|
||
XX LSP,SETLSP
|
||
XX LOGOUT,LOGOUT
|
||
XX NLINES,SETLIN
|
||
XX PLOT,PLOT
|
||
XX PRINT,PRINT
|
||
XX RESET,RESET
|
||
XX ROTATE,ROTATE
|
||
XX SAMPLE,SAMPLE
|
||
XX SCAN,SCAN
|
||
XX SHOW,SHOW
|
||
XX SIZE,SIZE
|
||
XX SKIP,SETPSK
|
||
XX SNDFNT,FONTSA
|
||
XX SQUISH,SQUISH
|
||
XX TEST,SETTST
|
||
XX TOPMAR,SETTOP
|
||
XX TXTCMD,SETXTC
|
||
XX VERSE,VERSE
|
||
XX VSP,SETVSP
|
||
XX X0,SETX0
|
||
XX Y0,SETY0
|
||
COMTBL==.-COMTAB
|
||
|
||
;READS COMMANDS FROM TEXT FILE
|
||
|
||
RTXTCM: AOSN ABORTF
|
||
JRST [ AOS SET
|
||
POPJ P,]
|
||
PUSH P,UDEPTH ;TO SEE IF IT CHANGES
|
||
PUSH P,DSKCMD
|
||
SETOM DSKCMD
|
||
TXTCM1: SKIPL DSKCMD
|
||
JRST TXTCXT
|
||
PUSHJ P,DSKLIN ;GET COMMAND FROM DISK
|
||
PUSHJ P,COMGET ;GET COMMAND CHARACTER
|
||
CAIN A,^M
|
||
JRST TXTCM1 ;IGNORE NULL LINE
|
||
CAIE A,";
|
||
JRST TXTCXT ;EXIT
|
||
PUSHJ P,SPCSKP
|
||
CAIN A,12
|
||
JRST TXTCM1 ;IGNORE NULL COMMAND LINE
|
||
MOVEI B,COMBUF
|
||
PUSH P,A
|
||
SKIPN NOTYPE
|
||
PUSHJ P,OUTSTR ;LET HIM KNOW WHAT'S GOING ON
|
||
POP P,A
|
||
PUSHJ P,DECODE
|
||
JRST TXTCXT ;NOT IN TABLE, GO AWAY
|
||
PUSHJ P,SPCSKP
|
||
MOVE C,COMTAB(B)
|
||
PUSHJ P,(C)
|
||
JFCL ;IGNORE LOSSAGE
|
||
PUSHJ P,COMXIT
|
||
JRST TXTCM1
|
||
|
||
;HERE TO EXIT TEXT FILE COMMAND READER
|
||
|
||
TXTCXT: POP P,DSKCMD
|
||
PUSHJ P,TXTOPN ;REOPEN, IT MIGHT EVEN BE A DIFFERENT FILE
|
||
JRST [ AOS SET ;LOSSAGE
|
||
POP P,(P) ;FLUSH UDEPTH
|
||
JRST TXTFNF]
|
||
POP P,A
|
||
CAME A,UDEPTH
|
||
JRST RTXTCM ;THAT WAS THE COMMAND FILE, NOW READ THE PRINT FILE
|
||
POPJ P,
|
||
|
||
;HERE TO DECODE COMMAND
|
||
|
||
DECODE: MOVE C,[440600,,D]
|
||
TDZA D,D
|
||
DECOD1: PUSHJ P,COMGET
|
||
PUSHJ P,CVSIX ;CONVERT TO SIX BIT
|
||
JUMPL B,[ CAIN A,15
|
||
PUSHJ P,COMGET ;IGNORE CARRIAGE RETURNS
|
||
CAIN A,12
|
||
JRST DECOD2
|
||
POPJ P,] ;COMMAND NOT UNDERSTOOD
|
||
JUMPE B,DECOD2 ;SEARCH COMMAND TABLE
|
||
TLNE C,770000
|
||
IDPB B,C ;ONLY 6 CHARACTERS
|
||
JRST DECOD1
|
||
|
||
;LOOK UP COMMAND IN D
|
||
|
||
DECOD2: JUMPE D,[ CAIN A,":
|
||
JRST DECODE ;DON'T SCREW FOR LEADING COLON
|
||
POPJ P,] ;ERROR
|
||
MOVEI B,COMTBL-1
|
||
DECOD3: MOVS C,COMTAB(B)
|
||
CAMN D,(C)
|
||
JRST POPJ1 ;FOUND HIM
|
||
SOJGE B,DECOD3
|
||
POPJ P, ;NOT FOUND
|
||
|
||
;CONVERT A TO SIXBIT, LEAVE RESULT IN B
|
||
|
||
CVSIX: CAIN A,11
|
||
MOVEI A,40
|
||
MOVNI B,1 ;ASSUME NOT SIXBIT
|
||
CAIL A,40
|
||
CAILE A,"_
|
||
JRST CVSIX1 ;MIGHT BE LOWER CASE
|
||
MOVEI B,-40(A) ;ITS UPPER CASE
|
||
POPJ P,
|
||
CVSIX1: CAIL A,"a
|
||
CAILE A,"z
|
||
POPJ P, ;NOT SIXBIT
|
||
MOVEI B,-100(A)
|
||
POPJ P,
|
||
|
||
;READ IN A DECIMAL NUMBER AND LEAVE RESULT IN D
|
||
; NON-SKIP RETURN, NUMBER NOT READ
|
||
;BREAK CHARACTER LEFT IN A
|
||
|
||
DECIN: MOVEI C,1 ;SIGN
|
||
CAIN A,"-
|
||
PUSHJ P,[ MOVNI C,1 ;NEGATIVE NUMBER
|
||
JRST COMGET]
|
||
PUSHJ P,CVDIG ;CONVERT CHARACTER CODE TO DIGIT
|
||
JUMPL B,CPOPJ ;NOT A DIGIT, NO NUMBER THERE
|
||
TDZA D,D
|
||
DECIN1: PUSHJ P,COMGET
|
||
PUSHJ P,CVDIG ;LEAVE DIGIT IN B
|
||
JUMPL B,[ JUMPGE C,POPJ1
|
||
MOVNS C
|
||
MOVNS D
|
||
JRST POPJ1]
|
||
IMULI D,10.
|
||
IMULI C,10. ;KEEP TRACK OF DIGITS READ
|
||
ADD D,B
|
||
JRST DECIN1
|
||
|
||
;COVERT DIGIT IN A TO NUMBER
|
||
|
||
CVDIG: MOVNI B,1 ;ASSUME FAILURE
|
||
CAIL A,"0
|
||
CAILE A,"9
|
||
POPJ P, ;FAILURE
|
||
MOVEI B,-"0(A)
|
||
POPJ P,
|
||
|
||
;GET POSITIVE ARGUMENT
|
||
; NON-SKIP RETURN FOR FAILURE
|
||
|
||
POSARG: PUSHJ P,ARGIN
|
||
POPJ P,
|
||
JUMPL D,CPOPJ
|
||
JRST POPJ1
|
||
|
||
ARGIN: PUSHJ P,DECIN
|
||
POPJ P, ;ERROR RETURN
|
||
PUSHJ P,SPCSK2
|
||
CAIN A,12
|
||
AOS (P)
|
||
POPJ P,
|
||
|
||
;ALTER MODE ACTION ROUTINES
|
||
|
||
SCAN: MOVEI A,SCAN2
|
||
MOVEM A,SCNRET
|
||
PUSHJ P,SCNFN
|
||
JRST [ MOVEI B,[ASCIZ /???/]
|
||
POPJ P,]
|
||
SCAN2: .SUSET [.SSNAM,,TXTSNM]
|
||
.CALL [ SETZ ? SIXBIT/OPEN/ ? 5000,,.BII ? 1000,,TXTICH
|
||
TXTO ? TXTFN1 ? TXTFN2 ? SETZ TXTSNM]
|
||
JRST [ SKIPGE DELUP ;PRINT ERROR MESSAGE ONLY FOR SINGLE FILE
|
||
AOSA (P)
|
||
PUSHJ P,TXTFNF
|
||
MOVEI B,0
|
||
POPJ P,]
|
||
SKIPGE DELUP'
|
||
PUSHJ P,SFNPNT
|
||
MOVEI A,SBUF
|
||
SCAN1: HRRZ B,A
|
||
LSH B,-12
|
||
CAILE B,MK+1
|
||
JRST SEOF
|
||
.CORE 1(B)
|
||
.VALUE
|
||
HRLI A,-2000
|
||
.IOT TXTICH,A
|
||
JUMPL A,SEOF
|
||
MOVEI B,SEOF+MK*2000
|
||
CAIL B,(A)
|
||
JRST SCAN1
|
||
SEOF: .CLOSE TXTICH,
|
||
PUSH P,A
|
||
MOVEI A,2
|
||
PUSHJ P,CMDO
|
||
PUSHJ P,CMDOF
|
||
MOVEI A,30.
|
||
.SLEEP A,
|
||
POP P,A
|
||
SUBI A,SBUF
|
||
HRRZS A
|
||
LSH A,-12
|
||
AOS A
|
||
PUSH P,A
|
||
MOVE D,A
|
||
PUSHJ P,DECPNT
|
||
MOVEI B,[ASCIZ /K CORE LOCKED
|
||
/]
|
||
PUSHJ P,OUTSTR
|
||
POP P,A
|
||
HRL A,A
|
||
HRRI A,SBUF_-12
|
||
.CALL XGPPLT
|
||
JRST XPLTL
|
||
MOVEI A,30.*30.
|
||
.SLEEP A,
|
||
.CORE SBUFP
|
||
.VALUE
|
||
SKIPL DELUP
|
||
JRST POPJ1
|
||
.CALL [SETZ ? 'DELETE
|
||
CHSTS ? CHSTS+1 ? CHSTS+2 ? SETZ CHSTS+3]
|
||
JFCL
|
||
JRST @SCNRET
|
||
|
||
|
||
SFNPNT: MOVE A,[TXTICH,,CHSTS]
|
||
.RCHST A,
|
||
MOVE A,TXTSNM
|
||
MOVEM A,CHSTS+3
|
||
HRLZS CHSTS
|
||
MOVEI A,CHSTS
|
||
PUSHJ P,PNTFNM
|
||
JRST TERPRI
|
||
|
||
XPLTL: MOVEI B,[ASCIZ /XGP LOSSAGE!
|
||
/]
|
||
PUSHJ P,OUTSTR
|
||
.CORE SBUFP
|
||
.VALUE
|
||
POPJ P,
|
||
|
||
XGPPLT: SETZ
|
||
SIXBIT /XGPIM/
|
||
SETZ A
|
||
|
||
SCNFN: MOVE D,[SIXBIT /DSK/]
|
||
MOVEM D,TXTO
|
||
SETZM DELUP
|
||
PUSHJ P,COMBAC
|
||
MOVE B,[PUSHJ P,COMGET]
|
||
MOVEI C,[0]
|
||
JSR FNR"GETFIL
|
||
POPJ P,
|
||
CAMN E,[SIXBIT /*/]
|
||
JSP B,[ SETOM DELUP
|
||
MOVSI E,(SIXBIT /</)
|
||
JRST (B) ]
|
||
ALLFIL: SKIPN E
|
||
POPJ P,
|
||
SKIPN T
|
||
MOVSI T,(SIXBIT /SCN/)
|
||
SKIPN TT
|
||
MOVE TT,TXTSNM
|
||
MOVEM TT,TXTSNM
|
||
MOVEM E,TXTFN1
|
||
MOVEM T,TXTFN2
|
||
SKIPE D
|
||
MOVEM D,TXTO
|
||
JRST POPJ1
|
||
|
||
PLOT: MOVEI A,PLOT2
|
||
MOVEM A,SCNRET'
|
||
PUSHJ P,SCNFN
|
||
JRST [ MOVEI B,[ASCIZ /???/]
|
||
POPJ P,]
|
||
MOVE A,TXTFN2
|
||
CAMN A,[SIXBIT /SCN/]
|
||
MOVE A,[SIXBIT /PLX/]
|
||
MOVEM A,TXTFN2
|
||
.SUSET [.SSNAM,,TXTSNM]
|
||
PLOT2: .CORE SBUFP
|
||
.VALUE
|
||
.CALL [ SETZ ? SIXBIT/OPEN/ ? 5000,,.BII ? 1000,,TXTICH
|
||
TXTO ? TXTFN1 ? SETZ TXTFN2 ]
|
||
JRST [ SKIPGE DELUP ;PRINT ERROR MESSAGE ONLY IF SINGLE FILE
|
||
AOSA (P)
|
||
PUSHJ P,TXTFNF
|
||
MOVEI B,0
|
||
POPJ P,]
|
||
.CORE SBUFP+MK+1
|
||
.VALUE
|
||
SKIPGE DELUP
|
||
PUSHJ P,SFNPNT
|
||
MOVEI TT,M1 ;initialize TT to up position
|
||
MOVE X0,INITX0 ;initial x coordinate
|
||
MOVE Y0,INITY0 ;inital y coordinate
|
||
LOOP: MOVE A,[-BUFL,,BUF] ;file buffer
|
||
.IOT TXTICH,A
|
||
MOVNI A,-BUF(A) ;get number of words really transferred
|
||
JUMPE A,SLLUP ;empty buffer, finished with file, convert to run length
|
||
HRLZS A ;get length of stuff transferred
|
||
HRRI A,BUF ;construct aobjn pointer
|
||
MOVE B,(A)
|
||
M1: JFFO B,DOIT ;dispatch on bits set
|
||
AOBJN A,.-2 ;end of this word, pick up next word of file
|
||
JRST LOOP ;back for another buffer full
|
||
|
||
BUF: BLOCK 200
|
||
BUFL==.-BUF
|
||
|
||
DOIT: ANDCM B,BITAB(C) ;clear bit for next dispatch
|
||
XCT DOBIT(C) ;dispatch on bit position of set bit
|
||
JRST (TT) ;write the bit into the bit map or not
|
||
|
||
DOBIT: BLOCK 36.
|
||
|
||
PLTD1: REPEAT 5,[
|
||
JRST M1 ;IGNORED
|
||
MOVEI TT,WRITE ;PENDOWN
|
||
MOVEI TT,M1 ;PENUP
|
||
SOJA X0,(TT)
|
||
AOJA X0,(TT)
|
||
SOJA Y0,(TT)
|
||
AOJA Y0,(TT)
|
||
]
|
||
JRST M1 ;IGNORED
|
||
|
||
PLTD2: REPEAT 5,[
|
||
JRST M1
|
||
MOVEI TT,WRITE
|
||
MOVEI TT,M1
|
||
AOJA Y0,(TT)
|
||
SOJA Y0,(TT)
|
||
SOJA X0,(TT)
|
||
AOJA X0,(TT)
|
||
]
|
||
JRST M1
|
||
|
||
|
||
BITAB: REPEAT 36.,1_<35.-.RPCNT>
|
||
|
||
WRITE: HRRZ X,X0 ;pick up x position of bit to write
|
||
TDNN B,MORMSK(D) ;don't mark till all motion done
|
||
CAIL X,XBITL ;out of range?
|
||
JRST M1 ;yes, ignore it
|
||
IMULI X,WDSPL ;words per scan line
|
||
HRRZ Z,Y0 ;pick up y position
|
||
CAIL Z,YBITL ;out of range?
|
||
JRST M1 ;yes, ignore
|
||
LSHC Z,-5 ;word # in line into z, bit position in high part of y
|
||
ADD X,Z ;add in the word number in the line
|
||
LSH Y,-<36.-5> ;move the bit position into spot to index with
|
||
MOVE Z,BITAB(Y) ;pick up the bit we really want to use
|
||
IORM Z,BITBUF(X) ;zap it into the buffer
|
||
JRST M1 ;back for another bit in the file
|
||
|
||
CNTER==36.
|
||
MORMSK: REPEAT 5,[
|
||
CNTER==CNTER-7
|
||
0
|
||
0
|
||
0
|
||
7_CNTER
|
||
3_CNTER
|
||
1_CNTER
|
||
0
|
||
]
|
||
|
||
;this routine converts the bit map just produced into a possibly more compact
|
||
;representation, using the run length encoding option. It can never result
|
||
;in a longer representation, since it can always use the image representation
|
||
;if that is more efficient
|
||
|
||
SLLUP: .CLOSE TXTICH,
|
||
MOVE A,LFTMAR
|
||
MOVEM A,VPOS'
|
||
MOVEI A,SBUF
|
||
MOVEM A,FPTR'
|
||
MOVEI A,BITBUF
|
||
SLLUP1: AOS VPOS
|
||
PUSH P,A
|
||
PUSHJ P,CNVRT
|
||
POP P,A
|
||
JUMPE B,SLLUP2
|
||
MOVE C,FPTR
|
||
MOVE D,B
|
||
ADDI D,1 ;FOR THE EXTRA POSITION/LENGTH WORD
|
||
LSH D,1
|
||
DPB D,[242000,,(C)]
|
||
MOVE D,VPOS
|
||
DPB D,[042000,,(C)]
|
||
AOS C
|
||
MOVE D,C
|
||
ADD D,B
|
||
MOVEM D,FPTR
|
||
HRLI C,BYTBF ;SOURCE
|
||
BLT C,-1(D)
|
||
SLLUP2: ADDI A,WDSPL
|
||
CAIGE A,BITBUF+MK*2000
|
||
JRST SLLUP1
|
||
MOVE A,FPTR
|
||
HRLI A,442000
|
||
MOVEI B,2
|
||
IDPB B,A
|
||
MOVEI B,XBITL+100
|
||
ADD B,LFTMAR
|
||
TRO B,100000
|
||
IDPB B,A
|
||
SETZM 1(A)
|
||
AOS FPTR
|
||
AOS A,FPTR
|
||
JRST SEOF
|
||
|
||
|
||
CNVRT: SETZM LSTBB'
|
||
SETZM BYTCNT'
|
||
SETZB E,D ;BIT COUNT, LAST DIFFERENT BIT COUNT
|
||
MOVEI C,0
|
||
JSP T,DEP
|
||
JFCL
|
||
MOVEI C,0
|
||
JSP T,DEP
|
||
JFCL
|
||
HRLI A,-WDSPL+2
|
||
W1: MOVE B,(A)
|
||
W2: JFFO B,DOW ;FOUND A BLACK BIT
|
||
W3: ADDI D,32. ;ALL BITS OF THIS WORD WHITE
|
||
AOBJN A,W1
|
||
MOVE C,LSTBB
|
||
MOVEM C,BYTCNT ;BACKUP BYTE BUFFER TO LAST BLACK BITS
|
||
REPEAT 3,[ MOVEI C,0 ;ESCAPE CODE
|
||
JSP T,DEP
|
||
JRST IMSL
|
||
]
|
||
MOVEI C,1
|
||
JSP T,DEP
|
||
JRST IMSL
|
||
JRST ESL
|
||
|
||
B1: SETCM B,(A)
|
||
B2: JFFO B,DOB ;FOUND A WHITE BIT
|
||
B3: ADDI D,32.
|
||
AOBJN A,B1
|
||
MOVEI C,0
|
||
JRST DOB ;PRETEND WE JUST GOT A WHITE BIT
|
||
|
||
DOW: ANDCA B,MTB(C)
|
||
CAIL C,40
|
||
JRST W3
|
||
ADD C,D ;BIT POSITION OF THIS BIT
|
||
EXCH C,E ;LAST CHANGE UPDATE
|
||
SUBM E,C ;DIFFERENCE IN C
|
||
DOW2: CAILE C,377
|
||
JRST DOW1
|
||
JSP T,DEP
|
||
JRST IMSL
|
||
JRST B2
|
||
|
||
DOW1: MOVEM C,TEMP'
|
||
MOVEI C,377
|
||
SUBM C,TEMP
|
||
JSP T,DEP
|
||
JRST IMSL
|
||
JSP T,DEP
|
||
JRST IMSL
|
||
MOVN C,TEMP
|
||
JRST DOW2
|
||
|
||
DOB: ANDCA B,MTB(C)
|
||
CAIL C,40
|
||
JRST B3
|
||
ADD C,D
|
||
EXCH E,C
|
||
SUBM E,C
|
||
DOB2: CAILE C,377
|
||
JRST DOB1
|
||
JSP T,DEP
|
||
JRST IMSL
|
||
MOVE C,BYTCNT
|
||
MOVEM C,LSTBB ;SAVE LAST BYTE USED FOR BLACKNESS
|
||
JRST W2
|
||
|
||
DOB1: MOVEM C,TEMP
|
||
MOVEI C,377
|
||
SUBM C,TEMP
|
||
JSP T,DEP
|
||
JRST IMSL
|
||
JSP T,DEP
|
||
JRST IMSL
|
||
MOVN C,TEMP
|
||
JRST DOB2
|
||
|
||
MTB: REPEAT 36.,[
|
||
<-1>_<-.RPCNT>
|
||
]
|
||
|
||
DEP: MOVE X,BYTCNT
|
||
CAIL X,BYTMAX ;CAN WE DO BETTER IN IMAGE MODE?
|
||
JRST (T) ;YES
|
||
MOVE Y,X
|
||
ANDI Y,3
|
||
LSH X,-2
|
||
DPB C,BYTAB(Y) ;DEPOSIT IN THE KLUDGY FORMAT WANTED BY THE XGP
|
||
MOVEI C,0
|
||
AOS BYTCNT
|
||
JRST 1(T)
|
||
|
||
BYTAB: 241000,,BYTBF(X)
|
||
341000,,BYTBF(X)
|
||
041000,,BYTBF(X)
|
||
141000,,BYTBF(X)
|
||
|
||
BYTBF: BLOCK WDSPL
|
||
|
||
;GET HERE WHEN THE RUN LENGTH ENCODED VERSION IS LONGER THAN AN IMAGE SCAN LINE,
|
||
;AND WE WANT TO CONVERT THE BIT MAP INTO AN IMAGE SCAN LINE.
|
||
|
||
IMSL: MOVE A,-1(P) ;POINTER TO BEG OF BIT MAP
|
||
HRLI A,-WDSPL+2
|
||
SETOM LSTBB ;WE HAVE BLACKNESS IN THIS LINE
|
||
SETZM BYTCNT ;START AT BEG OF THE BYTCOUNT
|
||
MOVEI C,0 ;ESC
|
||
JSP T,DEP
|
||
JFCL
|
||
MOVEI C,2 ;ENTER IMAGE MODE
|
||
JSP T,DEP
|
||
JFCL
|
||
IMSL1: MOVE C,(A) ;PICKUP WORD FROM BIT MAP
|
||
CIRC C,44 ;REVERSE BIT ORDER
|
||
MOVE C,D ;PICKUP FIRST 8 BITS
|
||
JSP T,DEP
|
||
JFCL
|
||
LSH D,-8 ;NEXT 8, ETC.
|
||
MOVE C,D
|
||
JSP T,DEP
|
||
JFCL
|
||
LSH D,-8
|
||
MOVE C,D
|
||
JSP T,DEP
|
||
JFCL
|
||
LSH D,-8
|
||
MOVE C,D
|
||
JSP T,DEP
|
||
JFCL
|
||
AOBJN A,IMSL1 ;BACK FOR THE NEXT BIT MAP WORD
|
||
ESL: MOVE B,BYTCNT
|
||
ADDI B,3 ;ROUND OFF TO NEXT HIGHER WORD
|
||
LSH B,-2 ;FOUR BYTES/WORD
|
||
SKIPN LSTBB
|
||
MOVEI B, ;RETURN ZERO IF THIS LINE IS NULL
|
||
POPJ P,
|
||
|
||
;READ ONLY MEMORY
|
||
|
||
SHWHGT: SKIPE NOTYPE
|
||
JRST POPJ1
|
||
MOVEI E,HEIGHT
|
||
ROMSHW: CAIE A,12
|
||
JRST ALTHUH
|
||
SHWARG: SKIPE NOTYPE
|
||
JRST POPJ1
|
||
MOVE D,(E)
|
||
PUSH P,A
|
||
PUSHJ P,DECPNT
|
||
JRST POPAJ1
|
||
|
||
;HERE TO GIVE # TEXT LINES
|
||
|
||
SETLIN: SKIPE NOTYPE
|
||
JRST POPJ1
|
||
MOVEI E,NLINES
|
||
JRST ROMSHW
|
||
|
||
VERSE: CAIE A,12
|
||
JRST BADARG
|
||
PUSHJ P,VERTYP ;TYPE OUT VERSION #
|
||
PUSHJ P,CRLF ;RESTORES A TO RIGHT THING!
|
||
JRST POPJ1
|
||
|
||
;POSITIVE ONLY VARIABLES
|
||
|
||
ONEARG: CAIN A,12
|
||
JRST SHWARG ;NO ARG, SHOW WHAT WE HAVE
|
||
PUSHJ P,POSARG
|
||
JRST BADARG
|
||
MOVEM D,(E)
|
||
JRST POPJ1
|
||
|
||
SETLFT: MOVEI E,LFTMAR
|
||
JRST ONEARG
|
||
|
||
SETTOP: SKIPA E,[TOPMAR]
|
||
SETBOT: MOVEI E,BOTMAR
|
||
SETVS1: PUSHJ P,ONEARG
|
||
JRST BADARG
|
||
SETVS2: PUSHJ P,CALINE ;RECALCULATE NLINES
|
||
JRST POPJ1
|
||
|
||
SETLSP: CAIE A,12
|
||
PUSHJ P,POSARG
|
||
JRST SHWARG
|
||
MOVEM D,LSP
|
||
SETOM VSP ;CAN'T HAVE IT BOTH WAYS
|
||
JRST SETVS2
|
||
|
||
SETTST: MOVEI A,3
|
||
PUSHJ P,CMDO
|
||
PUSHJ P,CMDOF
|
||
JRST COMMAN
|
||
|
||
SETVSP: CAIE A,12 ;VSP IS A FUNNY ONE
|
||
PUSHJ P,POSARG
|
||
JRST BADARG
|
||
MOVEM D,VSP
|
||
SETOM LSP
|
||
JRST SETVS2
|
||
|
||
ROTATE: MOVSI A,PLTD2
|
||
HRRI A,DOBIT
|
||
BLT A,DOBIT+43
|
||
JRST POPJ1
|
||
|
||
;ANY VALUE LEGAL VARIABLES
|
||
SETX0: SKIPA E,[INITX0]
|
||
SETY0: MOVEI E,INITY0
|
||
JRST ANYVAL
|
||
|
||
SETFFC: MOVEI E,FFCUT ;CAUSES XGP TO CUT ONLY ON FORM FEED
|
||
JRST ANYVAL
|
||
|
||
SETXTC: SKIPA E,[TXTCMD]
|
||
SETCUT: MOVEI E,AUTCUT
|
||
ANYVAL: CAIN A,12
|
||
JRST SHWARG
|
||
PUSHJ P,ARGIN
|
||
JRST BADARG
|
||
MOVEM D,(E)
|
||
JRST POPJ1
|
||
|
||
;MISCELLANEOUS ROUTINES
|
||
|
||
HEADER: SETZM HDRCNT ;SETS HEADING TEXT
|
||
CAIN A,12 ;NULL HEADER
|
||
JRST POPJ1 ; IS EASY
|
||
MOVEI B,HDRTXL*5 ;SIZE OF BUFFER
|
||
MOVE C,[440700,,HDRTXT]
|
||
HEAD1: PUSHJ P,COMGET
|
||
SOSL B ;DON'T OVERFLOW BUFFER
|
||
IDPB A,C
|
||
AOS HDRCNT
|
||
CAIE A,12 ;GO UNTIL WE FIND A LINE FEED
|
||
JRST HEAD1
|
||
JUMPGE B,POPJ1 ;JUMPE IF ALL IS OKAY
|
||
MOVEI B,[ASCIZ /HEADER TRUNCATED/]
|
||
POPJ P,
|
||
|
||
LIST: SETOM DFHDRF ;FLAG FOR DEFAULT HEADER
|
||
PRINT: SKIPE DSKCMD
|
||
JRST PRINT1 ;DIFFERENT THINGS FOR DSK COMNMANDS
|
||
MOVEM A,(P) ;CLOBBER RETURN ADDRESS
|
||
MOVEI B,[ASCIZ /PRINT MODE/]
|
||
PUSHJ P,TERPRI
|
||
POP P,A
|
||
CAIN A,12
|
||
JRST COMMAN
|
||
PUSHJ P,COMBAC
|
||
JRST COMAN1 ;READ THE FILE SPEC THAT'S THERE
|
||
|
||
;HERE TO FOR PRINT COMMAND WHILE READING DISK COMMANDS
|
||
|
||
PRINT1: AOSE UDEPTH
|
||
JRST POPJ1 ;ONLY ALLOW 1 LEVEL
|
||
PUSHJ P,COMBAC ;UNREAD THE LAST CHARACTER
|
||
MOVE B,[PUSHJ P,COMGET]
|
||
MOVEI C,0
|
||
JSR FNR"GETFIL ;NON-SKIP RETURN FOR NULL FILE SPEC
|
||
JRST POPJ1 ;IGNORE LOSSAGE
|
||
SETZM TXTFN1
|
||
SETZM TXTFN2
|
||
JUMPE E,POPJ1
|
||
MOVEM E,TXTFN1 ;FN1
|
||
SKIPN T
|
||
MOVSI T,360000 ;GREATER THAN
|
||
MOVEM T,TXTFN2 ;FN2
|
||
SKIPE TT
|
||
MOVEM TT,TXTSNM ;SNAME
|
||
SKIPE D
|
||
MOVEM D,TXTO ;DEV
|
||
JRST POPJ1
|
||
|
||
;LIST PRINTS FILES WITH DEFAULT HEADER (TIME, DATE, AND PAGE #)
|
||
COMBAC: MOVE B,COMPNT
|
||
PUSHJ P,DECBP ;DECREMENT BYTE POINTER
|
||
MOVEM B,COMPNT
|
||
AOS COMCNT
|
||
POPJ P,
|
||
|
||
KILL: SKIPE DSKCMD
|
||
JRST POPJ1
|
||
.VALUE [ASCIZ /:KILL
|
||
/]
|
||
|
||
LOGOUT: SKIPE DSKCMD
|
||
JRST POPJ1
|
||
.VALUE [ASCIZ /:LOGOUT
|
||
/]
|
||
|
||
SQUISH: SETOM SQSHFL ;JUST SET SQUISH FLAG
|
||
JRST POPJ1 .SEE SNDFNT
|
||
|
||
BADARG: MOVEI B,[ASCIZ /ARG???/]
|
||
POPJ P,
|
||
|
||
POPHUH: POP P,A
|
||
ALTHUH: MOVEI B,[ASCIZ /HUH/]
|
||
POPJ P,
|
||
|
||
SHOW: SKIPE NOTYPE
|
||
JRST POPJ1
|
||
PUSH P,A
|
||
MOVEI B,[ASCIZ /SKIP /]
|
||
MOVEI E,PSKIP
|
||
PUSHJ P,SHOW1
|
||
IRP VAR,,[LSP,VSP,LFTMAR,TOPMAR,BOTMAR,NLINES,AUTCUT,FFCUT,TXTCMD]
|
||
MOVEI B,[ASCIZ /VAR! /]
|
||
MOVEI E,VAR
|
||
PUSHJ P,SHOW1
|
||
TERMIN
|
||
MOVEI B,[ASCIZ /KSETS:/]
|
||
PUSHJ P,TERPRI
|
||
JRST KSET0A
|
||
KSET0: SKIPE NOTYPE
|
||
JRST POPJ1
|
||
PUSH P,A
|
||
KSET0A: MOVEI FONT,0
|
||
KSET1: PUSHJ P,KSET4
|
||
SKIPN FNTFN1(FONT)
|
||
JRST [ MOVEI B,[ASCIZ /UNSPECIFIED/]
|
||
PUSHJ P,TERPRI
|
||
JRST KSET69]
|
||
MOVEI A,FNTO(FONT)
|
||
PUSHJ P,PNTFNM ;PRINT FILE NAME
|
||
PUSHJ P,CRLF
|
||
KSET69: ADDI FONT,FNTVLN
|
||
CAIGE FONT,MAXFNT*FNTVLN
|
||
JRST KSET1
|
||
AOS -1(P) ;DO THE SKIP RETURN
|
||
JRST POPXIT
|
||
|
||
SHOW1: PUSHJ P,OUTSTR
|
||
MOVE D,(E)
|
||
PUSHJ P,DECPNT
|
||
JRST CRLF
|
||
|
||
KSET: CAIN A,12
|
||
JRST KSET0
|
||
PUSHJ P,COMBAC ;UN READ THE LAST CHARACTER
|
||
MOVE B,[PUSHJ P,COMGET]
|
||
PUSHJ P,GETF0 ;GET FONT FILE NAME (SETS UP C)
|
||
POPJ P, ;ERROR RETURN
|
||
PUSH P,A
|
||
MOVEI FONT,0
|
||
KSET2: SKIPN FNTFN2(FONT)
|
||
JRST [ SKIPN DSKCMD
|
||
SKIPE NOTYPE
|
||
JRST KSET3
|
||
PUSHJ P,KSET4
|
||
MOVEI B,[ASCIZ /NONE SPECIFIED/]
|
||
PUSHJ P,TERPRI
|
||
JRST KSET3]
|
||
MOVE A,FNTO
|
||
SKIPN FNTO(FONT)
|
||
MOVEM A,FNTO(FONT)
|
||
MOVE A,FNTSNM
|
||
SKIPN FNTSNM(FONT)
|
||
MOVEM A,FNTSNM(FONT)
|
||
PUSHJ P,FNTOPN
|
||
JRST [ SKIPE NOTYPE
|
||
JRST KSET3
|
||
PUSHJ P,KSET4
|
||
PUSHJ P,FNTFNF
|
||
PUSHJ P,CRLF
|
||
JRST KSET3]
|
||
.CLOSE FNTICH,
|
||
KSET3: ADDI FONT,FNTVLN
|
||
CAIGE FONT,MAXFNT*FNTVLN
|
||
JRST KSET2
|
||
JRST POPAJ1
|
||
|
||
KSET4: MOVE D,FONT
|
||
IDIVI D,FNTVLN
|
||
PUSHJ P,DECPNT
|
||
MOVEI A,40
|
||
PUSHJ P,TYO
|
||
JRST TYO
|
||
|
||
SAMPLE: PUSHJ P,VRESET
|
||
MOVEI B,[0]
|
||
CAIN A,12
|
||
POPJ P, ;ERROR, NO FONT SPECIFIED
|
||
PUSHJ P,COMBAC ;BACK UP A CHARACTER
|
||
MOVE B,[PUSHJ P,COMGET]
|
||
PUSHJ P,GETF0
|
||
POPJ P, ;ERROR
|
||
JUMPN FONT,CPOPJ ;MORE CHANCE FOR LOSSAGE
|
||
PUSH P,A
|
||
MOVE A,[FNTBEG,,FNTBEG+FNTVLN]
|
||
BLT A,FNTBEG+<FNTVLN*2>-1
|
||
MOVE A,[[SIXBIT /DSK/ ? SIXBIT /FIX25/ ? SIXBIT /KST/ ? SIXBIT /FONTS/],,FNTBEG]
|
||
BLT A,FNTBEG+FNTVLN-1
|
||
MOVEI FONT,0
|
||
SAMP1: SETOM FCHFLG(FONT)
|
||
PUSHJ P,FNTOPN
|
||
JRST POPAJ ;LOSSAGE
|
||
.CLOSE FNTICH,
|
||
JUMPN FONT,SAMP2
|
||
ADDI FONT,FNTVLN
|
||
JRST SAMP1
|
||
SAMP2: SETZM HDRCNT
|
||
MOVEI A,FNTO+FNTVLN
|
||
MOVE C,[440700,,HDRTXT]
|
||
PUSHJ P,SAMP3 ;PUT FONT NAME IN FILE
|
||
PUSHJ P,SAMP8 ;THROW IN SOME EXTRA CARRIAGE RETURNS
|
||
PUSHJ P,SAMP8
|
||
MOVE A,[[SIXBIT /DSK/ ? SIXBIT /CODES/ ? SIXBIT />/ ? SIXBIT /FONTS/],,TXTO]
|
||
BLT A,TXTSNM
|
||
POP P,A
|
||
PUSHJ P,COMXIT
|
||
SKIPE DSKCMD
|
||
JRST POPJ1
|
||
MOVEM A,(P) ;CLOBBER RETURN ADDRESS
|
||
MOVEI B,[ASCIZ /PRINT MODE/]
|
||
PUSHJ P,TERPRI
|
||
JRST POPAJ
|
||
|
||
SAMP3: PUSH P,A
|
||
MOVE B,(A) ;DEVICE
|
||
CAMN B,[SIXBIT /DSK/] ;ONLY AI HAS AN XGP
|
||
MOVE B,[SIXBIT /AI/]
|
||
PUSHJ P,SAMP4
|
||
MOVEI A,":
|
||
PUSHJ P,SAMP5
|
||
MOVE A,(P)
|
||
MOVE B,3(A) ;SNAME
|
||
PUSHJ P,SAMP4
|
||
MOVEI A,";
|
||
PUSHJ P,SAMP5
|
||
MOVE A,(P)
|
||
MOVE B,1(A) ;FILE NAME 1
|
||
PUSHJ P,SAMP4
|
||
MOVEI A,40
|
||
PUSHJ P,SAMP5
|
||
POP P,A
|
||
MOVE B,2(A) ;FILE NAME 2
|
||
SAMP4: MOVEI A,0
|
||
LSHC A,6
|
||
ADDI A,40
|
||
PUSHJ P,SAMP5
|
||
JUMPN B,SAMP4
|
||
POPJ P,
|
||
|
||
SAMP8: MOVEI A,15
|
||
PUSHJ P,SAMP5
|
||
MOVEI A,12
|
||
SAMP5: AOS HDRCNT
|
||
IDPB A,C
|
||
POPJ P,
|
||
|
||
SAMP6: HRLI B,440700
|
||
SAMP7: ILDB A,B
|
||
JUMPE A,CPOPJ
|
||
PUSHJ P,SAMP5
|
||
JRST SAMP7
|
||
|
||
RESET: PUSHJ P,VRESET
|
||
AOS (P)
|
||
JRST COMXIT
|
||
|
||
;TYPES LIST OF COMMANDS
|
||
|
||
HELP: SKIPE NOTYPE
|
||
JRST POPJ1
|
||
MOVEI D,0
|
||
HELP1: CAIL D,COMTBL
|
||
POPJ P,
|
||
MOVS B,COMTAB(D)
|
||
MOVE B,(B)
|
||
PUSHJ P,SIXO
|
||
PUSHJ P,CRLF
|
||
AOJA D,HELP1
|
||
|
||
;SET TO SKIP FIRST PAGES OF FILE
|
||
|
||
SETPSK: MOVEI E,PSKIP
|
||
CAIN A,12
|
||
JRST SHWARG
|
||
PUSHJ P,POSARG
|
||
JRST BADARG
|
||
MOVNS D
|
||
CAMGE D,PSKIP
|
||
MOVEM D,PSKIP
|
||
JRST POPJ1
|
||
|
||
;RESET VARIABLES
|
||
|
||
VRESET: MOVSI B,PLTD1
|
||
HRRI B,DOBIT
|
||
BLT B,DOBIT+43
|
||
IRP VAR,,[VSP,LSP,LFTMAR,TOPMAR,BOTMAR,PLINES,AUTCUT,PSKIP,TXTCMD,UDEPTH,INITX0,INITY0,SQSHFL,FFCUT]
|
||
MOVE B,[I!VAR]
|
||
MOVEM B,VAR
|
||
TERMIN
|
||
|
||
;CALCULATES # TEXT LINES IN TEXT AREA
|
||
|
||
CALINE: MOVE D,PLINES
|
||
SUB D,TOPMAR
|
||
SUB D,BOTMAR
|
||
MOVEM D,SLINES
|
||
SKIPGE E,LSP ;USE LSP IF SET
|
||
JRST CALIN1
|
||
SKIPGE E,VSP
|
||
MOVEI E,DVSP ;IF VSP NOT SET USE DEFAULT
|
||
ADD E,HEIGHT
|
||
CALIN1: IDIV D,E
|
||
MOVEM D,NLINES
|
||
POPJ P,
|
||
|
||
;RESET FONTS
|
||
|
||
FRESET: MOVE A,[[SIXBIT /DSK/ ? SIXBIT /FIX25/ ? SIXBIT /KST/ ? SIXBIT /FONTS/
|
||
25. ;HEIGHT
|
||
20. ;BASE LINE
|
||
0 ;CPA
|
||
0 ;KST ID
|
||
-1],,FNTBEG] ;FCHFLG
|
||
BLT A,FNTBEG+FNTVLN-1
|
||
SETZM FNTBEG+FNTVLN
|
||
MOVE A,[FNTBEG+FNTVLN,,FNTBEG+FNTVLN+1]
|
||
BLT A,FNTBEG+<FNTVLN*MAXFNT>-1
|
||
POPJ P,
|
||
|
||
;RESET PRINT FILE NAME
|
||
|
||
PRESET: MOVE A,[SIXBIT /DSK/]
|
||
MOVEM A,TXTO
|
||
SETZM TXTFN1
|
||
SETZM TXTFN2
|
||
POPJ P,
|
||
|
||
;CALCULATES SIZE OF PAGE WITH CURRENT SETTINGS
|
||
|
||
SIZE: SKIPE NOTYPE
|
||
JRST POPJ1
|
||
MOVEI FONT,0 ;DO CALUCLATIONS WITH THIS FONT
|
||
CAIE A,12
|
||
JRST SIZE2 ;SET SIZE OF PAGE BY SPECIFICATION IN INCHES
|
||
PUSH P,A
|
||
PUSHJ P,FNTOPN
|
||
JRST [ PUSHJ P,FNTFNF
|
||
JRST POPHUH]
|
||
.CLOSE FNTICH,
|
||
JUMPLE A,[ MOVEI B,[ASCIZ /ILLEGAL HEIGHT/]
|
||
JRST COMER1]
|
||
MOVE A,SLINES ;# SCAN LINES IN TEXT AREA
|
||
ADD A,TOPMAR
|
||
ADD A,BOTMAR
|
||
IDIVI A,192. ;SCAN LINE DENSITY (LINES/INCH)
|
||
PUSH P,B
|
||
MOVE D,A
|
||
PUSHJ P,DECPNT
|
||
MOVEI A,".
|
||
PUSHJ P,TYO
|
||
MOVE D,(P)
|
||
IMULI D,1000. ;THREE DECIMAL PLACES SUFFICES
|
||
IDIVI D,192. ;SCAN LINE DENSITY
|
||
MOVEI A,"0
|
||
CAIGE D,10.
|
||
PUSHJ P,TYO
|
||
CAIGE D,100.
|
||
PUSHJ P,TYO
|
||
PUSHJ P,DECPNT
|
||
MOVEI A,""
|
||
PUSHJ P,TYO
|
||
SKIPN (P)
|
||
JRST SIZE1
|
||
MOVEI B,[ASCIZ / (/]
|
||
PUSHJ P,OUTSTR
|
||
MOVE D,(P)
|
||
PUSHJ P,DECPNT
|
||
MOVEI B,[ASCIZ \/192)\]
|
||
PUSHJ P,OUTSTR
|
||
SIZE1: POP P,(P)
|
||
AOS -1(P) ;SKIP RETURN
|
||
JRST POPXIT
|
||
|
||
;HERE READ PAGE SIZE IN INCHES AND SET SLINES
|
||
|
||
SIZE2: PUSHJ P,ARGIN ;READ STRING OF DIGITS
|
||
JRST [ CAIE A,".
|
||
JRST BADARG
|
||
JRST .+1]
|
||
JUMPLE D,BADARG
|
||
IMULI D,1000. ;THOUSANDTHS OF INCHES
|
||
PUSH P,D
|
||
CAIN A,12
|
||
JRST SIZE4 ;NO DECIMAL FRACTION
|
||
PUSHJ P,COMGET ;GET FIRST DIGIT FOR ARGIN
|
||
CAIN A,15
|
||
JRST .-2
|
||
CAIN A,12
|
||
JRST SIZE4
|
||
PUSHJ P,ARGIN
|
||
SIZE3: JRST [ POP P,(D)
|
||
JRST BADARG]
|
||
JUMPL D,SIZE3
|
||
IMULI D,1000. ;THOUSANDTH'S OF INCHES
|
||
IDIV D,C ;SCALE TO # DIGITS READ
|
||
ADDM D,(P)
|
||
SIZE4: POP P,D
|
||
IMULI D,192.
|
||
IDIVI D,1000. ;SCAN LINES IN TEXT AREA
|
||
MOVE E,D
|
||
SUB D,TOPMAR
|
||
SUB D,BOTMAR
|
||
JUMPLE D,[ MOVEI B,[ASCIZ /TOP AND BOTTOM MARGINS EXCEED SIZE SPECIFIED/]
|
||
POPJ P,]
|
||
MOVEM E,PLINES
|
||
JRST SETVS2 ;RECALCULATE NLINES AND SKIP RETURN
|
||
|
||
;HERE TO TRANSMIT FONTS IN ALTER MODE
|
||
|
||
FONTSA: CAIE A,12
|
||
JRST HUH
|
||
PUSH P,A
|
||
MOVEI FONT,0 ;IF HE'S GONE TO ALL THIS TROUBLE. . .
|
||
FONTA1: SKIPE FNTFN1(FONT) ;MAKE SURE A FONT IS SPECIFIED
|
||
SETOM FCHFLG(FONT) ;TRANSMIT ALL FONTS
|
||
ADDI FONT,FNTVLN
|
||
CAIGE FONT,MAXFNT*FNTVLN
|
||
JRST FONTA1
|
||
PUSHJ P,FONTS
|
||
JRST POPAJ
|
||
|
||
;HERE TO TRANSMIT FONTS
|
||
|
||
FONTS: PUSHJ P,CLRKST ;CLEAR ALL CHARACTERS SETS FIRST
|
||
MOVEI FONT,0 ;TRANSMIT FONTS THAT NEED IT
|
||
FONTS0: AOSE FCHFLG(FONT)
|
||
JRST FONTS1 ;DONT NEED TO SEND THAT ONE
|
||
PUSHJ P,FNTOPN ;OPEN FONT FILE (READS FIRST 2 WORDS)
|
||
JRST [ PUSHJ P,FNTFNF ; FILE NOT FOUND
|
||
PUSHJ P,CRLF
|
||
JRST FNTS0A]
|
||
PUSHJ P,SNDFNT
|
||
FNTS0A: .CLOSE FNTICH,
|
||
FONTS1: ADDI FONT,FNTVLN
|
||
CAIGE FONT,MAXFNT*FNTVLN
|
||
JRST FONTS0
|
||
POPJ P,
|
||
|
||
;HERE TO CLEAR ALL KSETS IN PDP-11
|
||
|
||
CLRKST: MOVEI E,MAXFNT-1
|
||
CLRKS1: MOVEI A,0
|
||
PUSHJ P,CMDO ;KSET MODE
|
||
PUSHJ P,CMDO ;CLEAR . . .
|
||
MOVE A,E ;THIS CHARACTER SET
|
||
PUSHJ P,CMDO
|
||
SOJGE E,CLRKS1
|
||
POPJ P,
|
||
|
||
;COMMAND BUFFER FILLING AND GETTING
|
||
|
||
TTYLIN: MOVE B,[010700,,COMBUF-1]
|
||
SETZM COMCNT
|
||
TTYL1: PUSHJ P,TYI
|
||
JUMPE A,TTYL1
|
||
CAIN A,177
|
||
JRST RUBOUT ;RUBOUT
|
||
CAIN A,4
|
||
JRST [ MOVEI B,[ASCIZ / ???/]
|
||
PUSHJ P,OUTSTR
|
||
PUSHJ P,SOUT ;CONTROL-D CANCELS WHOLE LINE
|
||
JRST TTYLIN]
|
||
CAIN A,14
|
||
JRST TTYFF ;FORM FEED RETYPES BUFFER
|
||
CAIN A,15
|
||
JRST TTYCR
|
||
CAIN A,12
|
||
JRST TTYLF
|
||
PUSHJ P,COMPUT
|
||
JRST TTYL1
|
||
|
||
RUBOUT: SOSGE COMCNT
|
||
JRST [ PUSHJ P,CRLF
|
||
JRST TTYLIN]
|
||
LDB A,B
|
||
PUSHJ P,TYO
|
||
PUSHJ P,DECBP ;DECREMENT BYTE POINTER
|
||
JRST TTYL1
|
||
|
||
DECBP: ADD B,[070000,,0]
|
||
JUMPGE B,CPOPJ
|
||
SUB B,[430000,,1]
|
||
POPJ P,
|
||
|
||
TTYFF: PUSH P,B ;FORM FEED RETYPES BUFFER
|
||
PUSH P,C
|
||
PUSHJ P,CRLF
|
||
SKIPG C,COMCNT
|
||
JRST TTYFFX
|
||
MOVE B,[010700,,COMBUF-1]
|
||
TTYFF1: ILDB A,B
|
||
PUSHJ P,TYO
|
||
SOJG C,TTYFF1
|
||
TTYFFX: POP P,C
|
||
POP P,B
|
||
JRST TTYL1
|
||
|
||
TTYLF: MOVEI A,15
|
||
PUSHJ P,TYO
|
||
TTYCR: PUSHJ P,COMPUT
|
||
MOVEI A,12
|
||
PUSHJ P,COMPUT
|
||
MOVE B,[010700,,COMBUF-1]
|
||
MOVEM B,COMPNT
|
||
POPJ P,
|
||
|
||
COMPUT: IDPB A,B
|
||
AOS COMCNT
|
||
POPJ P,
|
||
|
||
COMGET: SOSGE COMCNT
|
||
.VALUE
|
||
ILDB A,COMPNT
|
||
POPJ P,
|
||
|
||
;FILL COMBUF WITH A COMMAND LINE FROM DISK FILE
|
||
|
||
DSKLIN: SETZM COMCNT
|
||
MOVE B,[010700,,COMBUF-1]
|
||
MOVEM B,COMPNT
|
||
DSKL1: PUSHJ P,TXTI
|
||
JUMPE A,DSKL1 ;IGNORE NULLS
|
||
JUMPL A,DSKSTP ;EOF?
|
||
CAIE A,3
|
||
CAIN A,14
|
||
JRST DSKSTP ;GET OUT
|
||
CAIN A,12
|
||
JRST DSKLF ;GET OUT
|
||
CAIE A,15 ;IGNORE CARRIAGE RETURNS
|
||
PUSHJ P,COMPUT
|
||
JRST DSKL1
|
||
|
||
DSKSTP: MOVEI A,1 ;STOP READING FROM DISK FILE AFTER THIS LINE
|
||
MOVEM A,DSKCMD
|
||
DSKLF: MOVEI A,15
|
||
PUSHJ P,COMPUT
|
||
MOVEI A,12
|
||
PUSHJ P,COMPUT
|
||
MOVEI A,0
|
||
JRST COMPUT
|
||
|
||
;TTY ROUTINES
|
||
|
||
TERPRI: PUSHJ P,OUTSTR
|
||
CRLF: MOVEI A,15
|
||
PUSHJ P,TYO
|
||
MOVEI A,12
|
||
TYO: .IOT TTYOCH,A
|
||
POPJ P,
|
||
|
||
SOUT: PUSHJ P,CRLF
|
||
MOVEI A,"*
|
||
JRST TYO
|
||
|
||
TYI: .IOT TTYICH,A
|
||
POPJ P,
|
||
|
||
VERTYP: MOVE B,[.FNAM1] ;PRINT VERSION NUMBER
|
||
PUSHJ P,SIXO
|
||
MOVEI A,".
|
||
PUSHJ P,TYO
|
||
MOVE B,[.FNAM2]
|
||
SIXO: MOVE C,[440600,,B]
|
||
SIXO1: ILDB A,C
|
||
JUMPE A,CPOPJ
|
||
ADDI A,40
|
||
PUSHJ P,TYO
|
||
TLNE C,770000
|
||
JRST SIXO1
|
||
POPJ P,
|
||
|
||
;FILES NOT FOUND
|
||
|
||
TXTFNF: MOVEI A,TXTO
|
||
MOVEI B,[ASCIZ /TEXT /]
|
||
JRST FNF
|
||
FNTFNF: MOVEI B,[ASCIZ /FONT /]
|
||
MOVEI A,FNTO(FONT)
|
||
FNF: PUSH P,A
|
||
AOS SET ;ERRORS HAVE HAPPENED
|
||
PUSHJ P,OUTSTR
|
||
POP P,A
|
||
PUSHJ P,PNTFNM ;PRINT FILE NAME
|
||
MOVEI A,40
|
||
PUSHJ P,TYO
|
||
ERRTYP: .OPEN ERRICH,[ (SIXBIT /ERR/)
|
||
1]
|
||
JRST .-1 ;DON'T TAKE NO FOR AN ANSWER
|
||
ERRTY1: .IOT ERRICH,A
|
||
CAIGE A,40
|
||
JRST [ .CLOSE ERRICH, ;ANY CONTROL CHARACTER STOP THIS NON-SENSE
|
||
POPJ P,]
|
||
PUSHJ P,TYO
|
||
JRST ERRTY1
|
||
|
||
OUTSTR: HRLI B,440700
|
||
OUTS1: ILDB A,B
|
||
JUMPE A,CPOPJ
|
||
PUSHJ P,TYO
|
||
JRST OUTS1
|
||
|
||
DECPNT: JUMPGE D,DECPN1
|
||
MOVEI A,"-
|
||
PUSHJ P,TYO
|
||
MOVMS D
|
||
DECPN1: IDIVI D,10.
|
||
HRLM E,(P)
|
||
JUMPE D,DECPN2
|
||
PUSHJ P,DECPN1
|
||
DECPN2: HLRZ A,(P)
|
||
ADDI A,"0
|
||
JRST TYO
|
||
|
||
;PRINTS FILE NAME
|
||
|
||
PNTFNM: PUSH P,A
|
||
MOVE B,(A) ;DEVICE
|
||
PUSHJ P,SIXO
|
||
MOVEI A,":
|
||
PUSHJ P,TYO
|
||
MOVE A,(P)
|
||
MOVE B,3(A) ;SNAME
|
||
PUSHJ P,SIXO
|
||
MOVEI A,";
|
||
PUSHJ P,TYO
|
||
MOVE A,(P)
|
||
MOVE B,1(A) ;FILE NAME 1
|
||
PUSHJ P,SIXO
|
||
MOVEI A,40
|
||
PUSHJ P,TYO
|
||
POP P,A
|
||
MOVE B,2(A) ;FILE NAME 2
|
||
JRST SIXO
|
||
|
||
CRASH: MOVE C,ABORTL+1
|
||
MOVEI D,10
|
||
MOVEM D,ABORTL
|
||
LSH C,-24
|
||
MOVEM C,XGPES'
|
||
TRNE C,200
|
||
PUSHJ P,E1
|
||
TRNE C,40
|
||
PUSHJ P,E2
|
||
TRNE C,20
|
||
PUSHJ P,E3
|
||
TRNE C,10
|
||
PUSHJ P,E4
|
||
TRNE C,4
|
||
PUSHJ P,E5
|
||
ABRTED: SETZM PSKIP
|
||
SETZM HDRCNT
|
||
SETZM DFHDRF
|
||
MOVEI B,[ASCIZ /LISTING ABORTED/]
|
||
PUSHJ P,OUTSTR
|
||
MOVE P,[-PDL,,PDB-1]
|
||
JRST RECYCL
|
||
|
||
E1: MOVEI B,[ASCIZ /PAPER LOW+/]
|
||
JRST OUTSTR
|
||
|
||
E2: MOVEI B,[ASCIZ /NO -12, PAPER JAM+/]
|
||
JRST OUTSTR
|
||
|
||
E3: MOVEI B,[ASCIZ /FUSER COLD+/]
|
||
JRST OUTSTR
|
||
|
||
E4: MOVEI B,[ASCIZ /FILAMENT COLD+/]
|
||
JRST OUTSTR
|
||
|
||
E5: MOVEI B,[ASCIZ %DRUM/WEB/PAPER OUT+%]
|
||
JRST OUTSTR
|
||
|
||
;GETS PAGES FROM PDP-11
|
||
; CALL WITH 11 ADDRESS IN A AND # BYTES DESIRED IN B
|
||
|
||
GET11: LSH B,-2 ;PROTECTION IN 10 WORDS
|
||
TRZ A,3 ;AVOID POSSIBLE EMBARASSEMENT
|
||
LSH A,10 ;10 STYLE ADDRESS
|
||
TLO A,600000 ;VALID AND WRITE ENABLE
|
||
MOVEI C,XGP11
|
||
LSH C,26. ;PDP-11 #
|
||
IOR A,C
|
||
GET11A: MOVEI C,1777 ;POSSIBLE PROTECTION
|
||
CAMG B,C
|
||
MOVE C,B ;ONLY WANTS PART OF PAGE
|
||
AOS T11PAG
|
||
IOR C,A ;MAP ENTRY
|
||
.CALL [ SETZ
|
||
SIXBIT /T11MP/
|
||
T11PAG
|
||
SETZ C]
|
||
.VALUE NOPDP11
|
||
ADD A,[2000_12] ;SET FOR NEXT PAGE
|
||
SUBI B,2000
|
||
JUMPGE B,GET11A ;HE WANTS MORE
|
||
POPJ P,
|
||
|
||
NOPDP11:
|
||
ASCIZ /: CANNOT GET PDP-11 PAGES
|
||
/
|
||
|
||
;SENDS 8 BIT BYTE TO 11
|
||
|
||
CMDO: SOSGE T,CMDPAR(CHNL) ;GET PARITY
|
||
MOVNS T,CMDPAR(CHNL)
|
||
SKIPL @CHHDRP(CHNL)
|
||
JRST ABRTED ;CHANNEL CLOSED BY 11
|
||
IDPB A,@CMDPTR(CHNL)
|
||
IBP @CMDPTR(CHNL)
|
||
SOSLE CMDCNT(CHNL)
|
||
POPJ P, ;MORE ROOM IN BUFFER
|
||
|
||
;HERE TO FORCE BUFFER
|
||
|
||
CMDOF: MOVE T,CMDSIZ(CHNL) ;SIZE OF THIS BUFFER
|
||
SUB T,CMDCNT(CHNL) ;NUMBER OF BYTES IN BUFFER
|
||
JUMPE T,CPOPJ ;DON'T FORCE
|
||
SKIPL @CHHDRP(CHNL)
|
||
JRST ABRTED ;CHANNEL CLOSED BY 11
|
||
IDPB T,CMDBUF(CHNL) ;MARK WITH VALID COUNT
|
||
ILDB T,CMDBUF(CHNL) ;NEXT ON RING
|
||
JUMPE T,[ SKIPN @CMDBUF(CHNL) ;10-11 INTERFACE IS ON LEVEL 7
|
||
.HANG ;AND SO IS RUG
|
||
LDB T,CMDBUF(CHNL)
|
||
JRST .]
|
||
PUSHJ P,SETCBF
|
||
SKIPL @CMDBUF(CHNL)
|
||
.HANG ;WAIT FOR THAT ONE TO FREE UP
|
||
CMDOF1: PUSH P,A
|
||
ADDI T,1 ;POINT AT NEXT TEN WORD
|
||
ILDB A,T ;SIZE OF THIS BUFFER
|
||
MOVEM A,CMDCNT(CHNL)
|
||
MOVEM A,CMDSIZ(CHNL)
|
||
MOVEI A,10 ;SWITCH TO 8 BIT BYTES
|
||
DPB A,[300600,,T]
|
||
MOVEI A,0
|
||
EXCH A,T
|
||
MOVEM A,@CMDPTR(CHNL)
|
||
ADDI T,1
|
||
IBP A
|
||
MOVEM A,@CMDPTR(CHNL)
|
||
SETZM CMDPAR(CHNL)
|
||
POPAJ: POP P,A
|
||
CPOPJ: POPJ P,
|
||
|
||
;HERE TO OPEN A 10-11 CHANNEL
|
||
|
||
OPEN: SKIPL @CHHDRP(CHNL)
|
||
.HANG
|
||
MOVEI T,@CHHDRP(CHNL)
|
||
PUSHJ P,ADRING ;WILL POINT TO BUFFER 11 IS HACKING
|
||
PUSHJ P,ADRING ;ADVANCE TO NEXT BUFFER
|
||
SKIPL (T)
|
||
.VALUE ;THAT BUFFER BETTER BE FREE
|
||
JRST CMDOF1 ;FOUND HIM SET POINTERS
|
||
|
||
ADRING: LDB T,[042000,,(T)]
|
||
SETCBF: SUB T,BUFORG ;OFFSET IN BYTES
|
||
SKIPGE T
|
||
.VALUE ;PDP-11 BUFFERS BUGGERED
|
||
LSH T,-2 ;IN PDP-10 WORDS
|
||
ADD T,[442000,,BUFFER]
|
||
MOVEM T,CMDBUF(CHNL)
|
||
POPJ P,
|
||
|
||
;HERE TO SEND WORD IN A TO 11
|
||
|
||
WRDO: PUSH P,A
|
||
PUSHJ P,CMDO ;LOW ORDER BYTE FIRST
|
||
MOVE A,(P)
|
||
LSH A,-10 ;NOW HIGH ORDER BYTE
|
||
PUSHJ P,CMDO
|
||
JRST POPAJ
|
||
|
||
;TIME SHARING I/O ROUTINES
|
||
|
||
FNTOPN: SETZM HEIGHT(FONT)
|
||
SETZM KSTID(FONT)
|
||
MOVE A,FNTSNM(FONT)
|
||
.SUSET [.SSNAM,,A]
|
||
.CALL [ SETZ ? SIXBIT/OPEN/ ? 5000,,.UII ? 1000,,FNTICH
|
||
FNTO(FONT) ? FNTFN1(FONT) ? SETZ FNTFN2(FONT)]
|
||
POPJ P,
|
||
PUSHJ P,FNTIN
|
||
MOVEM A,KSTID(FONT)
|
||
PUSHJ P,FNTIN
|
||
HRRZM A,HEIGHT(FONT)
|
||
PUSH P,A
|
||
LDB A,[221100,,(P)]
|
||
MOVEM A,BASE(FONT)
|
||
LDB A,[331100,,(P)]
|
||
MOVEM A,CPA(FONT)
|
||
HRRZS (P) ;RETURNS HEIGHT OF FONT IN A
|
||
PUSHJ P,CALINE
|
||
POPAJ1: POP P,A
|
||
POPJ1: AOS (P)
|
||
POPJ P,
|
||
|
||
TXTOPN: .SUSET [.SSNAM,,TXTSNM]
|
||
.CALL [ SETZ ? SIXBIT/OPEN/ ? 5000,,.BAI ? 1000,,TXTICH
|
||
TXTO ? TXTFN1 ? SETZ TXTFN2]
|
||
POPJ P,
|
||
AOS (P)
|
||
SETZM TXTFLG ;THAT FILE IS OPEN
|
||
TXTBF: SKIPGE A,TXTFLG
|
||
POPJ P, ;FOUND EOF
|
||
SETZM TXTBUF
|
||
MOVE A,[TXTBUF,,TXTBUF+1]
|
||
BLT A,TXTBUF+TXTBFL-1
|
||
MOVE A,[-TXTBFL,,TXTBUF]
|
||
.IOT TXTICH,A
|
||
MOVEM A,TXTFLG ;TRIPS EOF FLAG
|
||
MOVEI A,TXTBFL*5
|
||
MOVEM A,TXTCNT
|
||
MOVE A,[440700,,TXTBUF]
|
||
MOVEM A,TXTPTR
|
||
MOVEI A,0
|
||
SKIPL TXTFLG ;LAST BUFFER?
|
||
POPJ P,
|
||
HLRO A,TXTFLG ;CALCULATE # WORDS READ
|
||
ADDI A,TXTBFL
|
||
PUSH P,A
|
||
IMULI A,5 ;# CHARACTERS READ
|
||
MOVEM A,TXTCNT
|
||
POP P,A
|
||
ADDI A,TXTBUF
|
||
SETOM TXTBUF-1 ;END TEST IF BUFFER HAS ONLY EOF STYLE CHARACTERS IN IT.
|
||
HRLI A,010700 ;LAST BYTE OF LAST WORD IN BUFFER
|
||
PUSH P,B
|
||
DBPLR: LDB B,A
|
||
JUMPE B,DBPL ;NULL, IGNORE
|
||
CAIE B,3
|
||
CAIN B,14
|
||
JRST DBPL ;EITHER EOF CHAR OR FORM FEED, FLUSH
|
||
TXTBIX: MOVEI A,
|
||
POP P,B
|
||
POPJ P,
|
||
|
||
DBPL: MOVEI B,0
|
||
DPB B,A
|
||
ADD A,[070000,,] ;BACKUP THE BYTE POINTER
|
||
JUMPGE A,DBPLR ;RETURN TO CHECK THIS CHAR
|
||
SOS A
|
||
HRLI A,10700 ;BACK UP A WORD WORTH
|
||
JRST DBPLR
|
||
|
||
;HERE TO GET ONE CHARACTER FROM TEXT BUFFER
|
||
|
||
TXTBFI: PUSHJ P,TXTBF
|
||
JUMPL A,CPOPJ ;EOF
|
||
TXTI: SOSGE TXTCNT
|
||
JRST TXTBFI
|
||
ILDB A,TXTPTR
|
||
POPJ P,
|
||
|
||
;HERE TO GET WORD FROM FONT FILE
|
||
|
||
FNTIN: .IOT FNTICH,A
|
||
POPJ P,
|
||
|
||
;;; ROUTINE TO PRE-SCAN TEXT FILE AND DECIDE WHAT CHARS ARE NEEDED.
|
||
;;; SETS BITS IN SQSHTB FOR THE SNDFNT ROUTINE TO LOOK AT.
|
||
;;; SKIPS ON ***** FAILURE **** TO OPEN THE TEXT FILE.
|
||
.SEE RECYCL
|
||
|
||
PRESCN: SETZM SQSHTB ;CLEAR BIT TABLE
|
||
MOVE A,[SQSHTB,,SQSHTB+1]
|
||
BLT A,SQSHTB+177
|
||
PUSHJ P,TXTOPN ;OPEN TEXT FILE
|
||
JRST POPJ1 ;FAILED
|
||
SKIPA E,[400000,,0] ;INITIALLY IN FONT 0
|
||
PRSC0: IORM E,SQSHTB(A) ;HERE IF CHAR IS ACTUALLY USED (SET BIT)
|
||
PRSC1: PUSHJ P,TXTI ;GOBBLE CHAR FROM FILE
|
||
JUMPL A,CPOPJ ;EXIT ON EOF
|
||
JRST @.+1(A)
|
||
PRSC1 ;NULL
|
||
REPEAT 7, PRSC0 ;NORMAL GUYS
|
||
REPEAT 3, PRSC1 ;BS, TAB, LF
|
||
PRSC0 ;^K (NORMAL)
|
||
REPEAT 2, PRSC1 ;FF, CR
|
||
REPEAT 176-^M, PRSC0 ;NORMAL GUYS
|
||
PRSC2 ;RUBOUT (XGP ESCAPE)
|
||
|
||
|
||
PRSC2: PUSHJ P,TXTI ;XGP ESCAPE
|
||
JRST @.+1(A)
|
||
PRSC0 ;NORMAL
|
||
PRSC3 ;XGP ESCAPE 1 (GOBBLES N BYTES)
|
||
PRSC3C ;XGP ESCAPE 2 (GOBBLES 1 BYTE)
|
||
PRSC3B ;XGP ESCAPE 3 (GOBBLES 2 BYTES)
|
||
PRSC11 ;XGP ESCAPE 4 (GOBBLES 11. BYTES)
|
||
REPEAT 3, [.VALUE] ;RESERVED
|
||
REPEAT 3, PRSC0 ;BS, TAB, LF -- NORMAL
|
||
[.VALUE] ;RESERVED
|
||
REPEAT 2, PRSC0 ;FF, CR -- NORMAL
|
||
REPEAT 37-^M, [.VALUE] ;RESERVED
|
||
REPEAT 137, PRSC0 ;NORMAL GUYS
|
||
PRSC0 ;RUBOUT -- NORMAL
|
||
|
||
|
||
PRSC3: PUSHJ P,TXTI ;ESCAPE 1
|
||
JRST @PRST(A)
|
||
PRST: REPEAT 40, PRSC3A ; FONT SELECT
|
||
PRSC3B ;40 COLUMN SELECT (2 BYTES)
|
||
PRSC3C ;41 ! UNDERSCORE (1 BYTE)
|
||
PRSC3C ;42 " LINE SPACE (1 BYTE)
|
||
PRSC3C ;43 # ABSOLUTE BASE LINE ADJ (1 BYTE)
|
||
PRSC1 ;44 $ PAGE NUMBER (NO BYTES)
|
||
PRSC3D ;45 % HEADING (COUNT, THEN N BYTES)
|
||
PRSC1 ;46 & START UNDERLINE (NO BYTES)
|
||
PRSC3C ;47 ' STOP UNDERLINE (1 BYTE)
|
||
PRSC3C ;50 ( INTERCHAR SPACING (1 BYTE)
|
||
PRSC3B ;51 ) VARIABLE WIDTH UNDERLINE (2 BYTES)
|
||
PRSC3C ;52 * RELATIVE BASE LINE ADJUST (1 BYTE)
|
||
PRSTL==.-PRST
|
||
REPEAT 200-PRSTL, [.VALUE] ;RESERVED
|
||
|
||
PRSC3A: MOVSI E,400000 ;FONT SELECT
|
||
MOVNS A
|
||
LSH E,(A)
|
||
JRST PRSC1
|
||
|
||
PRSC3B: PUSHJ P,TXTI ;SKIP 2 BYTES
|
||
PRSC3C: PUSHJ P,TXTI ;SKIP 1 BYTE
|
||
JRST PRSC1
|
||
|
||
PRSC3D: PUSHJ P,TXTI ;SKIP N BYTES
|
||
SKIPA D,A
|
||
PRSC11: MOVEI D,11. ;SKIP 11. BYTES
|
||
PRSC3E: SOJL D,PRSC1
|
||
PUSHJ P,TXTI
|
||
JRST PRSC3E
|
||
|
||
COMMENT $ MIT FONT FORMAT AND CMU FONT FORMAT
|
||
|
||
WORDS 0-1
|
||
KSTID
|
||
BYTE (9) COLUMN_POSITION_ADJUSTMENT,BASE_LINE (18) HEIGHT
|
||
;base line # rasters from top of character matrix
|
||
REMAINDER OF FILE: ONE BLOCK OF DATA FOR EACH CHARACTER
|
||
USER_ID
|
||
;NOT USED 4/10/74 but LOW ORDER BIT MUST BE 1
|
||
LEFT_KERN,,CODE
|
||
;left kern always 0 for CMU
|
||
RASTER_WIDTH,,CHARACTER_WIDTH
|
||
;raster width always 0 for CMU
|
||
CHARACTER_MATRIX
|
||
;the matrix is stored 4 8-bit bytes per word so that
|
||
;ILDB with 8-bit byte size gets successive bytes.
|
||
;The bits are bit reversed in each byte (high order
|
||
;bit of character in low order bit of byte).
|
||
;the matrix is stored row by row.
|
||
$
|
||
|
||
;TRANSMITS FONT OVER COMMAND CHANNEL
|
||
|
||
SNDFNT: MOVE A,FONT ;CONVERT FONT INDEX TO FONT #
|
||
IDIVI A,FNTVLN
|
||
MOVN B,A
|
||
MOVSI X,400000
|
||
LSH X,(B) ;X HAS BIT FOR SQSHTB
|
||
SKIPGE SQSHFL
|
||
JSP E,SQCHK ;DON'T SEND FONT IF NO CHARACTERS USED
|
||
PUSH P,A ;SAVE FONT #
|
||
MOVEI A,0 ;ESCAPE TO KSET
|
||
PUSHJ P,CMDO
|
||
MOVNI A,1 ;LOAD THIS FONT
|
||
PUSHJ P,CMDO
|
||
POP P,A ;FONT #
|
||
PUSHJ P,CMDO
|
||
MOVE A,HEIGHT(FONT) ;HEIGHT
|
||
PUSHJ P,WRDO
|
||
MOVE A,BASE(FONT) ;BASE LINE
|
||
PUSHJ P,WRDO
|
||
SNDFN0: PUSHJ P,FNTIN ;IGNORE USER ID
|
||
trnn a,1 ;check terminating bit
|
||
jrst [ movei b,[asciz /bad font: /]
|
||
pushj p,outstr
|
||
movei a,fnto(font)
|
||
pushj p,pntfnm
|
||
pushj p,crlf
|
||
jrst sndf0a
|
||
]
|
||
SNDF0A: PUSHJ P,FNTIN ;CHARACTER CODE
|
||
MOVE E,A
|
||
HRRZS A ;CLEAR KERN INFO
|
||
CAILE A,177
|
||
HRROI A,200 ;ANY ILLEGAL CHARACTER STOPS US
|
||
SKIPGE SQSHFL ;IF SQUISHING, AND IF NOT END OF FONT,
|
||
JUMPGE A,SNDF7 ; THEN DECIDE WHETHER TO SEND CHARACTER
|
||
SNDF0H: movem a,lstchr
|
||
PUSHJ P,CMDO ;"SEND" IT
|
||
JUMPL A,SNDFXT ;FORCE BUFFER AND EXIT
|
||
HLRES E ;LEFT KERN
|
||
ADD E,CPA(FONT) ;FUDGE CPA INTO KERN
|
||
MOVN A,E ;FUDGE FOR THE PDP-11 PROGRAM
|
||
PUSHJ P,CMDO
|
||
PUSHJ P,FNTIN ;RASTER WIDTH,,CHARACTER WIDTH
|
||
SKIPG A
|
||
jrst [ movei b,[asciz /zero or negative char width: /]
|
||
jrst cfntnm ;0 OR NEGATIVE WIDTH
|
||
]
|
||
ADD A,E ;FUDGE IN KERN AND COLUMN POSITION ADJUSTMENT
|
||
JUMPLE A,[ movei b,[asciz /kern or cpa problem: /]
|
||
jrst cfntnm
|
||
] ;HALF HEARTED CHECK
|
||
PUSHJ P,WRDO ;SPACING WIDTH
|
||
TLNE A,-1
|
||
HLRZS A
|
||
PUSHJ P,WRDO ;RASTER WIDTH
|
||
ADDI A,7
|
||
LSH A,-3 ;# 8 BIT BYTES PER ROW
|
||
MOVEM A,BYPR ;BYTS PER ROW
|
||
MOVE E,HEIGHT(FONT)
|
||
MOVE C,BYPR
|
||
SNDF1: PUSHJ P,FNTIN
|
||
MOVE D,A ;BYTES COME PACKED 4 PER WORD
|
||
MOVE B,[441000,,D] ;THIS IS HOW WE UNPACK THEM
|
||
SNDF2: ILDB A,B
|
||
PUSHJ P,CMDO
|
||
SOJLE C,SNDF5 ;THATS ALL FOR THIS ROW
|
||
SNDF21: TLNN B,700000
|
||
JRST SNDF1 ;THAT'S ALL FOR THIS WORD
|
||
JRST SNDF2
|
||
|
||
cfntnm: pushj p,outstr
|
||
move a,lstchr'
|
||
pushj p,decpnt
|
||
movei a,".
|
||
pushj p,tyo
|
||
movei a,40
|
||
pushj p,tyo
|
||
movei a,fnto(font)
|
||
pushj p,pntfnm
|
||
pushj p,crlf
|
||
.value
|
||
|
||
SNDF5: MOVE C,BYPR
|
||
MOVEI A,0
|
||
TRNE C,1 ;IF ODD # OF BYTES, SEND A 0 BYTE
|
||
PUSHJ P,CMDO
|
||
SOJLE E,SNDFN0 ;THATS ALL FOR THIS CHAR
|
||
JRST SNDF21
|
||
|
||
;HERE TO DECIDE WHETHER TO SEND CHAR IN SQUISH MODE
|
||
|
||
SNDF7: TDNE X,SQSHTB(A) ;IF BIT NOT SET IN SQSHTB,
|
||
JRST SNDF0H ; MUST SKIP OVER CHARACTER
|
||
PUSHJ P,FNTIN ;SKIP RASTER WIDTH,,CHARACTER WIDTH
|
||
SNDF7A: PUSHJ P,FNTIN
|
||
TRNN A,1 ;BIT 1.1 => USER ID FOR NEXT CHAR
|
||
JRST SNDF7A
|
||
JRST SNDF0A
|
||
|
||
;HERE EXIT SNDFNT
|
||
|
||
SNDFXT: PUSHJ P,CMDOF ;FORCE BUFFER
|
||
SKIPGE KSTLOD ;WAIT FOR PDP-11 TO FINISH
|
||
.HANG
|
||
LDB D,[242000,,KSTLOD] ;# CHARACTERS MISSED
|
||
JUMPE D,CPOPJ
|
||
PUSHJ P,DECPNT ;TELL HIM HOW MANY HE LOST
|
||
MOVEI B,[ASCIZ / CHARACTERS LOST FONT /]
|
||
PUSHJ P,OUTSTR
|
||
MOVE D,FONT
|
||
IDIVI D,FNTVLN
|
||
PUSHJ P,DECPNT ;PRINT FONT #
|
||
MOVEI A,40
|
||
PUSHJ P,TYO
|
||
MOVEI A,FNTO(FONT)
|
||
PUSHJ P,PNTFNM
|
||
JRST CRLF
|
||
|
||
;SCAN THROUGH SQSHTB FOR THIS FONT, IF NO CHARACTERS IN THIS FONT
|
||
;ARE USED THE TAKE POPJ RETURN OTHER WISE RETURN TO SNDFNT
|
||
|
||
SQCHK: MOVEI B,177 ;CHARACTER CODE
|
||
SQCHK1: TDNE X,SQSHTB(B)
|
||
JRST (E) ;FOUND A CHARACTER THAT IS USED IN THIS FONT
|
||
SOJGE B,SQCHK1
|
||
POPJ P, ;NO CHARACTERS IN THIS FONT USED
|
||
|
||
;SNDTXT SEND TEXT TO THE PDP-11
|
||
|
||
SNDTXT: SETZM PAGE
|
||
AOS PAGE ;START PRINTING ON PAGE 1
|
||
AOSN DFHDRF ;WANT DEFAULT HEADER?
|
||
PUSHJ P,DEFHDR ; YES
|
||
SNDTX1: SKIPL PSKIP ;SKIPING PAGES
|
||
JRST XGPLPT ;NO, PRINT SOME GOODIES
|
||
PUSHJ P,TXTI ;GET A CHARACTER
|
||
CAIN A,177 ;RUBOUT IS ESCAPE CHARACTER
|
||
PUSHJ P,TXTRUB ;PROCESS RUBOUT
|
||
JUMPL A,SNDEND ;EOF WHILE SKIPPING?
|
||
CAIE A,^L ;PAGE MARK?
|
||
JRST SNDTX1
|
||
AOS PSKIP
|
||
AOS PAGE
|
||
JRST SNDTX1
|
||
|
||
;HERE TO PROCESS RUBOUT WHILE READING TEXT FILE
|
||
|
||
TXTRUB: PUSHJ P,TXTI ;GET NEXT CHARACTER
|
||
JUMPL A,CPOPJ ;EOF?
|
||
CAILE A,TXTRDL ;LEGAL CONTROL CODE
|
||
JRST RUBSXT ;NO, JUST CLOBBER A AND RETURN
|
||
JRST @.(A) ;DISPATCH
|
||
TXTRDO: RUBCA ;1 COMPLICATED
|
||
RUBS1 ;2 COLUMN INCREMENT, SOAKS UP 1 CHARACTER
|
||
RUBS2 ;3 SKIP TO SCAN LINE, SOAKS UP 2 CHARACTERS
|
||
RUBS13 ;4 VECTOR, SOAKS UP 13 CHARACTERS
|
||
TXTRDL==.-TXTRDO
|
||
|
||
;SOAKS UP CHARACTERS FROM INPUT STREAM, LOOKS FOR EOF
|
||
|
||
RUBS3: SKIPA B,[3]
|
||
RUBS13: MOVEI B,13
|
||
JRST RUBS
|
||
RUBS1: SKIPA B,[1]
|
||
RUBS2: MOVEI B,2
|
||
RUBS: PUSHJ P,TXTI ;GET CHARACTER
|
||
JUMPL A,CPOPJ ;EOF?
|
||
SOJG B,RUBS
|
||
RUBSXT: MOVEI A,0 ;CLOBBER CHARACTER
|
||
POPJ P,
|
||
|
||
;HERE TO PROCESS RUBOUT<CNTRL-A>
|
||
|
||
RUBCA: PUSHJ P,TXTI ;GET CHARACTER
|
||
JUMPL A,CPOPJ ;EOF?
|
||
CAIGE A,MAXFNT ;FONT SWITCH?
|
||
MOVE FONT,A
|
||
SUBI A,37 ;LOOK FOR OTHER CONTROL CODES
|
||
JUMPLE A,RUBSXT ;UNDER?
|
||
CAILE A,TXTADL ;OVER?
|
||
JRST RUBSXT
|
||
JRST @.(A) ;DISPATCH
|
||
TXTADO: RUBS2 ;40 COLUMN SELECT
|
||
RUBS3 ;41 ! UNDERSCORE
|
||
RUBS1 ;42 " LINE SPACE
|
||
RUBS1 ;43 # ABSOLUTE BASELINE ADJUST
|
||
RUBSXT ;44 $ PRINT PAGE NUMBER
|
||
TAKHDR ;45 % ACCEPT HEADING TEXT
|
||
RUBSXT ;46 & START UNDERLINE
|
||
RUBS1 ;47 ' STOP UNDERLINE
|
||
RUBS1 ;50 ( SET INTERCHARACTER SPACING
|
||
RUBS2 ;51 ) VARIBLE WIDTH UNDERLINE
|
||
RUBS1 ;52 * RELATIVE BASELINE ADJUST
|
||
TXTADL==.-TXTADO
|
||
|
||
;ACCEPTS HEADING TEXT
|
||
|
||
TAKHDR: PUSHJ P,TXTI ;GET CHARACTER COUNT OF HEADER
|
||
MOVEM A,HDRCNT
|
||
JUMPLE A,CPOPJ ;EOF?
|
||
SETZM HDRTXT ;CLEAR HEADER BUFFER
|
||
MOVE A,[HDRTXT,,HDRTXT+1]
|
||
BLT A,HDRTXT+HDRTXL-1
|
||
MOVE B,HDRCNT ;PREPARE TO READ HEADER TEXT
|
||
MOVE C,[440700,,HDRTXT]
|
||
MOVEI D,HDRTXL*5
|
||
TKHDR1: PUSHJ P,TXTI
|
||
JUMPL A,CPOPJ ;EOF?
|
||
SOSL D
|
||
IDPB A,C
|
||
SOJG B,TKHDR1
|
||
JUMPGE D,RUBSXT
|
||
ADDM D,HDRCNT ;D HAS -# CHARACTERS LOST
|
||
JRST RUBSXT
|
||
|
||
;SET UP THE DEFAULT HEADER
|
||
|
||
DEFHDR: SETZM HDRCNT
|
||
MOVE C,[440700,,HDRTXT]
|
||
.RLPDT A,
|
||
LDB A,[320300,,B] ;GET DAY OF WEEK (0 => SUNDAY)
|
||
MOVE B,[ [ASCIZ /Sun/]
|
||
[ASCIZ /Mon/]
|
||
[ASCIZ /Tues/]
|
||
[ASCIZ /Wednes/]
|
||
[ASCIZ /Thurs/]
|
||
[ASCIZ /Fri/]
|
||
[ASCIZ /Satur/]](A)
|
||
PUSHJ P,SAMP6
|
||
MOVEI B,[ASCIZ /day, /]
|
||
PUSHJ P,SAMP6
|
||
.RDATE B,
|
||
LSHC A,2*6 ;TWO SIX BIT CHARACTERS IS YEAR
|
||
LSH A,44-<2*6> ;SUITABLE FOR SIX BIT PRINTING
|
||
PUSH P,A
|
||
MOVEI A,0
|
||
LSHC A,6 ;FIRST DIGIT OF MONTH
|
||
MOVEI D,-20(A)
|
||
IMULI D,10.
|
||
MOVEI A,0
|
||
LSHC A,6 ;SECOND DIGIT OF MONTH
|
||
ADDI D,-20(A)
|
||
PUSH P,B
|
||
MOVE B,[ [ASCIZ /????/]
|
||
[ASCIZ /January /]
|
||
[ASCIZ /February /]
|
||
[ASCIZ /March /]
|
||
[ASCIZ /April /]
|
||
[ASCIZ /May /]
|
||
[ASCIZ /June /]
|
||
[ASCIZ /July /]
|
||
[ASCIZ /August /]
|
||
[ASCIZ /September /]
|
||
[ASCIZ /October /]
|
||
[ASCIZ /November /]
|
||
[ASCIZ /December /]](D)
|
||
PUSHJ P,SAMP6
|
||
POP P,B
|
||
MOVEI A,0 ;PRINT DAY OF MONTH
|
||
LSHC A,6 ;GET FIRST DIGIT
|
||
CAIE A,'0 ;DON'T PRINT LEADING ZERO
|
||
LSHC A,-6
|
||
PUSHJ P,SAMP4
|
||
MOVEI B,[ASCIZ /, 19/]
|
||
PUSHJ P,SAMP6
|
||
POP P,B
|
||
PUSHJ P,SAMP4 ;YEAR
|
||
MOVEI A,40
|
||
PUSHJ P,SAMP5
|
||
PUSHJ P,SAMP5
|
||
PUSHJ P,SAMP5
|
||
.RTIME B, ;DATE
|
||
LSHC A,2*6
|
||
LSH A,6
|
||
IORI A,':
|
||
LSHC A,2*6
|
||
LSH A,6
|
||
IORI A,':
|
||
PUSH P,B
|
||
MOVE B,A
|
||
PUSHJ P,SAMP4
|
||
POP P,B
|
||
PUSHJ P,SAMP4
|
||
MOVEI B,TENSP
|
||
PUSHJ P,SAMP6 ;TEN SPACES
|
||
MOVE A,[TXTICH,,CHSTS]
|
||
.RCHST A,
|
||
MOVEI A,CHSTS
|
||
HRLZS CHSTS
|
||
PUSHJ P,SAMP3 ;FILE NAME
|
||
MOVEI B,TENSP
|
||
PUSHJ P,SAMP6
|
||
MOVEI B,[ASCIZ /Page <20>$
|
||
|
||
|
||
/]
|
||
PUSHJ P,SAMP6
|
||
MOVEI A,HDRTXL*5
|
||
MOVEI B,[ASCIZ /HEADER BUFFER OVERFLOW/]
|
||
CAMGE A,HDRCNT
|
||
PUSHJ P,TERPRI
|
||
POPJ P,
|
||
|
||
TENSP: ASCIZ / /
|
||
|
||
;HERE TO PRINT THE REAL GOODS
|
||
|
||
XGPLPT: MOVEI A,1 ;ESCAPE TO "MIXED"
|
||
PUSHJ P,CMDO
|
||
SKIPL LSP ;LSP SPECIFIED
|
||
JRST SNDVAR ; LSP IS SPECIFIED, USE IT
|
||
SKIPGE A,VSP
|
||
MOVEI A,DVSP ;VSP WAS NOT SPECIFIED, USE THE DEFAULT VALUE
|
||
ADD A,HEIGHT
|
||
MOVEM A,LSP
|
||
SNDVAR: MOVEI A,ZZ
|
||
PUSHJ P,CMDO ;SEND COUNT OF NUMBER OF PARAMETER THAT FOLLOW
|
||
ZZ==0
|
||
IRP B,,[LSP,LFTMAR,TOPMAR,BOTMAR,PLINES,PAGE,AUTCUT,FFCUT]
|
||
ZZ==ZZ+1
|
||
MOVE A,B
|
||
PUSHJ P,WRDO
|
||
TERMIN
|
||
PUSHJ P,CMDOF ;FORCE OUTPUT
|
||
MOVEI CHNL,DOCHNL ;ALL THE REST GOES ON DATA OUT
|
||
PUSHJ P,OPEN
|
||
PUSHJ P,SNDRCA ;SEND RUBOUT<CNTRL-A>
|
||
MOVE A,FONT ;DO EXPLICIT FONT SELECT
|
||
PUSHJ P,CMDO
|
||
SKIPG B,HDRCNT ;SEND HEADER TEXT?
|
||
JRST XGPLOP
|
||
PUSHJ P,SNDRCA
|
||
MOVEI A,45 ;ACCEPT HEADER TEXT
|
||
PUSHJ P,CMDO
|
||
MOVE A,HDRCNT
|
||
PUSHJ P,CMDO
|
||
MOVE C,[440700,,HDRTXT]
|
||
ILDB A,C
|
||
PUSHJ P,CMDO
|
||
SOJG B,.-2
|
||
MOVE C,[440700,,HDRTXT] ;AND NOW WE SEND IT
|
||
XGPLP1: ILDB A,C ;SO THAT IT APPEARS AS HEADER OF FIRST PAGE
|
||
PUSHJ P,CMDO
|
||
SOSLE HDRCNT
|
||
JRST XGPLP1
|
||
XGPLOP: PUSHJ P,TXTI
|
||
JUMPL A,TXTEOF ;EOF?
|
||
PUSHJ P,CMDO
|
||
AOSE ABORTF
|
||
JRST XGPLOP
|
||
TXTEOF: MOVEI A,200 ;EOF CODE
|
||
PUSHJ P,CMDO
|
||
PUSHJ P,CMDOF ;FORCE BUFFER
|
||
MOVSI A,400000
|
||
ANDCAM A,@CHHDRP(CHNL) ;CLOSE DATA OUT CHANNEL
|
||
SNDEND: SETZM PSKIP
|
||
SETZM HDRCNT
|
||
SETZM DFHDRF
|
||
POPJ P, ;AND RETURN
|
||
|
||
;SENDS ROUBOUT<CNTRL-A>
|
||
|
||
SNDRCA: MOVEI A,177
|
||
PUSHJ P,CMDO
|
||
MOVEI A,1
|
||
JRST CMDO
|
||
|
||
PDL==20
|
||
PDB: BLOCK PDL
|
||
|
||
BYPR: 0 ;BYTES PER ROW WHILE LOADING FONTS
|
||
DSKCMD: 0 ;READING COMMANDS FROM DISK FLAG
|
||
NOTYPE: 0 ;DON'T TYPE OUT
|
||
TTYNUM: 0 ;NUMBER OF TTY WE HAVE
|
||
CHSTS: BLOCK 8 ;STORAGE FOR CURRENTLY PLOTTED/SCANNED FILE
|
||
ABORTF: 0 ;NON ZERO => XGP 11 PROGRAM CRAPPED OUT
|
||
;IN A WELL DEFINED WAY
|
||
|
||
TXTBFL==200
|
||
TXTCNT: 0 ;TEXT BUFFER COUNTER
|
||
TXTPTR: 0 ;BYTE POINTER INTO TEXT BUFFER
|
||
TXTFLG: 0 ;NEGATIVE=>EOF SEEN
|
||
|
||
0 ;DUMMY TEXT BUFFER LOCATION USED FOR END
|
||
;TEST AT DBPLR... MUST PRECEDE TXTBUF
|
||
TXTBUF: BLOCK TXTBFL
|
||
|
||
COMBFL==200
|
||
COMCNT: 0
|
||
COMPNT: 0
|
||
COMBUF: BLOCK COMBFL
|
||
|
||
T11PAG: 0 ;NEXT PAGE TO GET FROM 11
|
||
SET: 0 ;ERROR FLAG THAT STOPS XGP OUTPUT
|
||
BUFORG: 0 ;ORIGIN OF BUFFERS IN 11 SPACE
|
||
|
||
;DEFAULT PAGE PARAMETERS
|
||
|
||
IINITX0==1100.
|
||
IINITY0==-180.
|
||
ISQSHFL==0
|
||
ILFTMAR==200
|
||
ITOPMAR==200
|
||
IBOTMAR==174
|
||
ISLINES==3504 ;VSP, SLINES, TOPMAR, BOTMAR SET TO MAKE 60 LINES OF FIX25 PER PAGE
|
||
IPLINES==ISLINES+ITOPMAR+IBOTMAR
|
||
ILSP==-1
|
||
DLSP==25.+6 ;25 HIGH FONT + 6 LINES OF VSP
|
||
IVSP==-1 ;DEFAULT IS TO USE LSP
|
||
DVSP==6
|
||
IAUTCUT==-1
|
||
IFFCUT==0
|
||
IPSKIP==0 ;# PAGES TO SKIP AT BEGGINING
|
||
ITXTCMD==-1
|
||
IUDEPTH==-1
|
||
|
||
;PAGE PARAMETERS
|
||
|
||
INITX0: 0
|
||
INITY0: 0
|
||
SQSHFL: 0 ;NON-ZERO => SQUISH USELESS CHARS OUT OF FONTS
|
||
LFTMAR: 0
|
||
TOPMAR: 0 ;ALLOWS 60 LINES OF TEXT ON ONE 11" PAGE
|
||
BOTMAR: 0
|
||
NLINES: 0 ;11 INCHES
|
||
AUTCUT: 0
|
||
FFCUT: 0 ;NON-ZERO FORCES XGP TO CUT ONLY AT FORM FEEDS
|
||
PSKIP: 0 ;# PAGES TO SKIP AT BEGINING
|
||
TXTCMD: 0 ;0 IMPLIES DONT LOOK FOR COMMANDS IN TEXT FILE
|
||
LSP: 0 ;BASE LINE SPACING
|
||
VSP: 0 ;-1 => USE LSP, OTHER WISE LSPHEIGHT+VSP
|
||
UDEPTH: 0 ;# PRINTS IN PROGRESS
|
||
PLINES: 0 ;# SCAN LINES ON PAGE
|
||
SLINES: 0 ;# SCAN LINES IN TEXT AREA
|
||
PAGE: 0 ;PAGE # OF FIRST PRINTED PAGE
|
||
DFHDRF: 0 ;-1=>PUT DEFAULT HEADER ON EACH PAGE
|
||
HDRCNT: 0 ;# CHARACTERS IN PAGE HEADER
|
||
HDRTXL==<200+4>/5 ;SIZE OF TEXT HEADER AREA
|
||
HDRTXT: BLOCK HDRTXL ;BUFFER FOR HEADER TEXT
|
||
SQSHTB: BLOCK 200 ;ONE WORD FOR EACH ASCII CHAR
|
||
;BIT 4.9 = FONT 0, 4.8 = FONT 1, ETC.
|
||
|
||
;FONT VARIABLES
|
||
|
||
FNTBEG==.
|
||
FNTO: SIXBIT /DSK/
|
||
FNTFN1: SIXBIT /FIX25/ ;USED AS A FLAG, IF 0 THEN FONT NOT SPECIFIED
|
||
FNTFN2: SIXBIT /KST/
|
||
FNTSNM: SIXBIT /FONTS/
|
||
HEIGHT: 0 ;HEIGHT OF FONT
|
||
BASE: 0 ;BASE LINE
|
||
CPA: 0 ;COLUMN POSITON ADJUSTMENT
|
||
KSTID: 0 ;FONT ID
|
||
FCHFLG: -1 ;-1=> TRANSMIT TO 11
|
||
FNTVLN==.-FNTBEG ;LENGTH OF FONT VARIABLE AREA
|
||
|
||
LOC FNTBEG+<MAXFNT*FNTVLN>
|
||
|
||
TXTO: SIXBIT/DSK/
|
||
TXTFN1: 0
|
||
TXTFN2: 0
|
||
TXTSNM: 0
|
||
|
||
;10-11 CHANNEL DATA AREAS
|
||
|
||
CMDPAR: BLOCK NCHNL ;PARITY
|
||
CMDCNT: BLOCK NCHNL ;BUGGER BYTE COUNTER
|
||
CMDSIZ: BLOCK NCHNL ;SIZE OF THIS BUFFER
|
||
CMDBUF: BLOCK NCHNL ;BYTE POINTER TO FIRST 11 WORD OF BUFFER
|
||
CMDPTR: REPEAT NCHNL,CONC CMDPT,\.RPCNT,(T)
|
||
REPEAT NCHNL,[
|
||
CONC CMDPT,\.RPCNT,[: BLOCK 2]
|
||
]
|
||
CHHDRP: REPEAT NCHNL,CHHDR+<BPRCHL/4>*.RPCNT
|
||
|
||
LITTER: CONSTANTS
|
||
VARS:: VARIABLES
|
||
PAT:PATCH:
|
||
ICORE==<.+1777>_<-12>
|
||
;MEMORY MAP
|
||
|
||
;PROGRAM PAGES 0-ICORE
|
||
|
||
;CHANNEL HEADER POINTER AREA
|
||
|
||
LNKVPG==ICORE+1 ;PAGE #
|
||
10LNKV=LNKVPG_12 ;ORIGIN
|
||
LNKV==124 ;ORIGIN IN 11 ADDRESS SPACE
|
||
ABORTL=<402-LNKV>/4+10LNKV ;10 ADDRESS OF ABORT FLAG
|
||
KSTLOD=ABORTL+6 ;PDP-10 ADDRESS OF KST LOADER FLAG
|
||
|
||
;CHANNEL HEADER AREA
|
||
|
||
CHHDPG==LNKVPG+1 ;PAGE #
|
||
CHHDR=CHHDPG_12 ;ORIGIN
|
||
BPRCHL==10 ;# BYTES IN 1 CHANNEL HEADER
|
||
|
||
;10-11 BUFFER AREA
|
||
|
||
BUFPG==CHHDPG+1 ;FIRST PAGE #
|
||
BUFFER=BUFPG_12
|
||
|
||
SBUFP==BUFPG+1
|
||
SBUF=SBUFP_12
|
||
BITBUF=SBUF+WDSPL
|
||
|
||
END GO
|
||
|