IDENT O26,O26
PERIPH
BASE MIXED
SST MDC,RDS
*COMMENT O26 - CONSOLE TEXT EDITOR.
COMMENT COPYRIGHT CONTROL DATA SYSTEMS INC. 1992.
TITLE O26 - CONSOLE TEXT EDITOR.
O26 SPACE 4,10
*** O26 - CONSOLE TEXT EDITOR.
* D. A. CAHLANDER. 70/05/05.
* G. R. MANSFIELD. 70/10/25.
* D. A. CAHLANDER. 71/06/05.
* A. D. FORET. 74/12/05.
* P. D. HAAS. 84/02/08.
DOC SPACE 4,10
*** O26 PROVIDES THE CAPABILITY TO CREATE AND EDIT A FILE
* FROM THE 6612 CONSOLE. A CM BUFFER IS USED TO STORE AND
* EDIT THE BCD LINES BEFORE WRITING THE FILE. THE CM
* BUFFER SIZE = FL - 140, AND ALL LINES OF A FILE MUST FIT
* IN THE BUFFER.
OPERATOR SPACE 4,10
*** OPERATOR MESSAGES.
*
*
* *REQUEST DISPLAY. (O26)* = O26 IS WAITING FOR THE DISPLAY
* TO BE ASSIGNED.
TITLE DIRECT CELL ALLOCATIONS AND ASSEMBLY CONSTANTS.
DIRECT SPACE 4,20
**** DIRECT LOCATION ASSIGNMENTS.
LL EQU 15 LAST LINE POSITION STATUS
DA EQU 16 - 17 DISPLAY ADDRESS
AB EQU 20 - 24 ASSEMBLY BUFFER (5 LOCATIONS)
CA EQU 25 CHARACTER ADDRESS
XC EQU 26 X-COORDINATE
YC EQU 27 Y-COORDINATE
KE EQU 30 KEYBOARD ENTRY
KI EQU 31 KEYBOARD INDEX
KM EQU 32 KEYBOARD MESSAGE
KP EQU 33 KEYBOARD PREVIOUS STATUS
DR EQU 34 DISPLAY REFRESH STATUS
LC EQU 35 CHARACTER COUNT OF LINE
* MAINTAIN FOLLOWING ORDER.
SI EQU 36 SCAN INDEX
UC EQU 37 UPPER CASE FLAG
IP EQU 40 - 41 INSERT POSITION (2 LOCATIONS)
HF EQU 42 HOLD FLAG
IF EQU 43 INSERT FLAG
DL EQU 44 DISPLAY LENGTH
KD EQU 45 KEYBOARD BUFFER DISPLAY STATUS
SF EQU 46 SCAN FLAG
SC EQU 47 SCAN NUMBER
IO EQU 57 I/O BUSY FLAG
FT EQU 60 - 61 FIRST ADDRESS OF BUFFER (2 LOCATIONS)
IN EQU 62 - 63 NEXT INPUT ADDRESS (2 LOCATIONS)
OT EQU 64 - 65 NEXT OUTPUT ADDRESS (2 LOCATIONS)
LM EQU 66 - 67 LIMIT ADDRESS OF BUFFER (2 LOCATIONS)
****
ASSEMBLY SPACE 4,10
** ASSEMBLY CONSTANTS.
CH EQU CHDS DISPLAY CHANNEL
FET EQU 10 ADDRESS OF FILE FET
FETL EQU 10 FET LENGTH
SBUF EQU FET+FETL ADDRESS OF CM SYNTAX BUFFER
TITLE OVERLAY CONTROL AND MACRO DEFNITIONS.
OVL SPACE 4,20
** OVERLAY CONTROL.
NAME MICRO 1,, O26
OVNG MICRO 1,, OP OVERLAY NUMBER GENERATOR
OVNB MICRO 1,1, "OVNG" OVERLAY NAME BIAS MICRO
OVNB EQU 1R"OVNB" OVERLAY NAME BIAS
NOREF .L,.N
.N SET 0 OVERLAY NUMBER
.N MICRO 1,,
.L SET *
COMCMAC SPACE 4,15
* MACRO DEFINITIONS AND INSTRUCTION CONSTANTS.
*CALL COMPMAC
*CALL COMDMAC
SPACE 4,10
** COMMON DECKS.
*CALL COMSCPS
*CALL COMSPIM
*CALL COMSSRT
COMMAND SPACE 4,20
** COMMAND - GENERATE COMMAND OVERLAY.
*
*
* COMMAND (SUBTITLE)
* ENTRY *SUBTITLE* = COMMAND SUBTITLE.
PURGMAC COMMAND
COMMAND MACRO TXT
LOCAL A
QUAL
.M OVLN .N
QUAL O26".M"
TTL O26/9".M" - TXT
TITLE
HERE
QUAL
USE END FORCE LITERALS*/
A EQU *
.N SET .N+1
.N MICRO 1,, ".M"
QUAL O26".N"
IDENT 9".N",OVL TXT
ORG OVL
*COMMENT O26 - TXT
COMMENT COPYRIGHT CONTROL DATA SYSTEMS INC. 1992.
QUAL
IFC NE,*".N"*OB*,1
.L MAX A,.L
QUAL *
COMMAND ENDM
DKP SPACE 4,10
** DKP - DISPLAY KEYBOARD POINTER.
*
* ENTRY (XC) = X-COORDINATE.
* (YC) = Y-COORDINATE.
* (T2) = ADDRESS OF NEXT CHARACTER.
*
* MACROS CFNC.
PURGMAC DKPM545,DKPM721
DKPM545 MACRO *** CC545 CODE ***
LDD UC
ZJN DKP1
LCN 4
DKP1 SBN YINC
ADD YC
OAN CH+40
LDN 1RA
OAN CH+40
LDD XC
OAN CH+40
LDN 1RI
OAN CH+40
UJN DKPX
DKPM545 ENDM
DKPM721 MACRO *** CDC721 CODE ***
CFNC BIVF
CFNC DSCF
LDI T2
LPN 77
OAN CH+40
CFNC EIVF
UJN DKPX
DKPM721 ENDM
EDW SPACE 4,10
** EDW - EDIT AND DISPLAY WORD.
*
* ENTRY (CM - CM+4) = WORD TO BE PROCESSED.
*
* USES T1.
*
* MACROS CFNC.
PURGMAC EDWM545,EDWM721
EDWM545 MACRO *** CC545 CODE ***
LDD CM
SBD XC
MJN EDW1
LPN 77
STD CM
EDW1 LDD CM+1
SBD XC
MJN EDW2
LPN 77
STD CM+1
EDW2 LDD CM+2
SBD XC
MJN EDW3
LPN 77
STD CM+2
EDW3 LDD CM+3
SBD XC
MJN EDW4
LPN 77
STD CM+3
EDW4 LDD CM+4
SBD XC
MJN EDW6
LPN 77
NJN EDW5
LDN 1R
EDW5 STD CM+4
EDW6 LDN 5
OAM CM,CH
UJP EDWX
EDWM545 ENDM
EDWM721 MACRO *** CDC721 CODE ***
LDN CM
STD T1
EDW10 LDI T1
SBD XC
MJN EDW11
LPN 77
LMC 2L
STI T1
EDW11 AOD T1
LMN CM+5
NJN EDW10
EDW12 SOD T1
LMN CM-1
ZJN EDW13
LDI T1
ZJN EDW12
LDD T1
SBN CM-1
OAM CM,CH
LDD CM+4
NJN EDWX
EDW13 CFNC EELF
UJP EDWX
EDWM721 ENDM
ENTER SPACE 4,15
** ENTER - ENTER SPECIAL SYNTAX.
*
*
*ADDR ENTER (SYNTAX)
* ENTRY *ADDR* = OVERLAY ENTRY ADDRESS.
* *SYNTAX* = SYNTAX OF COMMAND.
PURGMAC ENTER
MACRO ENTER,ADDR,SYNTAX
LOCAL A
A SET *
CON ADDR/10000+100*OVNB,ADDR-ADDR/10000*10000
ORG *O-2
ENTER MICRO 1,, SYNTAX
ESS MICCNT ENTER
ESS DECMIC ESS
LOC A
VFD 42/"ESS"L_SYNTAX,18/ADDR
LOC A+1
ENTER ENDM
ENTRY SPACE 4,15
** ENTRY - DEFINE OVERLAY ENTRY POINT.
*
*
*NAME ENTRY ADDR
* ENTRY *NAME* = ENTRY POINT NAME.
* *ADDR* = ADDRESS OF ENTRY POINT.
* IF *ADDR* IS NOT PRESENT, ADDRESS OF ENTRY
* POINT IS THE CURRENT VALUE OF THE ORIGIN COUNTER.
PURGMAC ENTRY
MACRO ENTRY,NAME,ADDR
IFC NE,*ADDR**
RMT
QUAL
NAME EQU .N*10000B+/O26".N"/ADDR
QUAL *
RMT
ELSE 4
NAME BSS 0
QUAL
NAME EQU .N*10000B+/O26".N"/NAME
QUAL *
ENTRY ENDM
JMP SPACE 4,10
** JMP - THREADED JUMP.
*
*
* JMP ADDR
* ENTRY *ADDR* = JUMP ADDRESS.
PURGMAC JMP
JMP MACRO ADDR
IF -DEF,.ADDR,2
NOREF .ADDR
.ADDR MAX ADDR,*-40
IFGT .ADDR,*-40
UJN .ADDR
.ADDR SET *-1
ELSE 2
.ADDR SET *
LJM ADDR
JMP ENDM
OVLN SPACE 4,15
** OVLN - GENERATE OVERLAY NUMBER.
*
*
*A OVLN B
* ENTRY *B* = OVERLAY NUMBER.
* EXIT *A* = MICRO OF OVERLAY NAME.
PURGMAC OVLN
MACRO OVLN,A,B
LOCAL C
C SET B/1R4
C MICRO C+1,1, "OVNG"
A MICRO B-C*1R4+1,1, ABCDEFGHIJKLMNOPQRSTUVWXYZ01234
A MICRO 1,, "C""A"
OVLN ENDM
TITLE OVERLAY LOADER.
TITLE SUBROUTINES / MESSAGES.
LOV SPACE 4,20
** LOV - LOAD OVERLAY.
*
* ENTRY (A) = BITS 17-12 OVERLAY INDEX.
* BITS 11-00 ENTRY ADDRESS.
*
* USES T0, AB - AB+4.
*
* CALLS LPP.
QUAL
USE END
USE PRS
USE LOV
PRSA BSS 0
LOC MSFW
LOV STM LOVA SET ENTRY
SHN -14
ZJN LOV1 IF RESIDENT
STD T0
SHN 1
SCN 77
LMD T0
SCN 40
ADC 3R9OA-1
STM LOVB+4
SHN -14
STM LOVB+3
SHN 6
LMM OVL-5
SHN 6
LMM LOVB+4
SHN 6
LMM OVL-4
ZJN LOV1 IF PROGRAM IN CORE
RJM LPP LOAD PP PROGRAM
LOV1 LDN ZERL CLEAR ASSEMBLY BUFFER
CRD AB
LDC KBI8 CLEAR OVERLAY LOAD
STM KBIA
AOD DR
LDD CA (A) = CHARACTER ADDRESS
LJM *
LOVA EQU *-1
LOVB VFD 24/3L1DL,12/CH,24/0
LPP SPACE 4,20
** LPP - LOAD PP PROGRAM.
*
* ENTRY (LOVB+3 - LOVB+4) = PP PROGRAM NAME.
*
* EXIT TO *KIC* IF WAITING FOR OVERLAY TO BE LOADED.
* TO *ABT* IF CHANNEL TIMEOUT.
* TO *ABT1* IF NO PP AVAILABLE FOR *1DL*.
*
* USES T1, CM - CM+4, KM.
*
* MACROS CFNC, DFIM, EXECUTE, MONITOR.
LPP SUBR ENTRY/EXIT
EXECUTE 1DL,=
LDD MA
CWM LOVB,ON
LDN 1 DISABLE QUEUING OF PP REQUEST
STD CM+1
MONITOR RPPM REQUEST 1DL
LDD CM+1 CHECK CALL
STM LPPA
NJN LPP1 IF PP AVAILABLE
LDC ERRC MESSAGE = *SYSTEM BUSY - PPU.*
STD KM
LJM ABT1
* WAIT FOR 1DL.
LPP1 RJM KBIA SET RE-ENTRY
DFIM (CON SDCF),*+1
LDC DDCF DESELECT DISPLAY
CFNC
LDC ** READ PP INPUT REGISTER
LPPA EQU *-1
CRD CM
LDD CM+1 CHECK INPUT REGISTER
SCN 37
SHN 6
LMD CM
LMC 3RL1D
ZJN LPP2 IF *1DL*
SHN 14
LMN 1R1
NJN LPP5 IF *1DL* NOT LOADING
LPP2 LDD CM+2
LMC 7777
ZJN LPP3 IF TRANSMISSION READY
DCN CH+40
CCF *+2,CH
LDC ERRB MESSAGE = *SYSTEM BUSY - DISK.*
LJM KIC INCOMPLETE ENTRY
* INPUT OVERLAY.
LPP3 LDD TH DELAY
SBN 1
NJN *-1 IF DELAY NOT ELAPSED
DCN CH+40
* LDN 0 SET READY RECEIVE
STD CM+2
LDM LPPA
CWD CM
ACN CH
LCN 0 SET TIMER
STD T1
LPP4 FJM LPP6,CH IF CHANNEL FULL
SOD T1
NJN LPP4 IF CHANNEL NOT TIMED OUT
LPP5 DCN CH+40
CCF *+2,CH
LJM ABT ABORT
LPP6 LCN 0 INPUT OVERLAY
IAM OVL-5,CH
LDD KM CHECK MESSAGE
LMC ERRB
CCF *+2,CH
NJN LPP7 IF NOT *DISK BUSY.*
* LDN 0 CLEAR KEYBOARD MESSAGE
STD KM
LPP7 LJM LPPX RETURN
CDL SPACE 4,15
** CDL - CLEAR DISPLAY LINES.
*
* ENTRY (DR) = DISPLAY REFRESH STATUS.
* (IO) = I/O BUSY STATUS.
*
* EXIT (A) = (DR) = 0.
*
* USES T1, YC.
*
* CALLS ERL.
*
* MACROS CFNC, DFIM.
CDL3 CFNC CHSF CLEAR HIDDEN SCREEN
LDN 0
STD DR DISABLE REFRESH NEXT PASS
CDL SUBR ENTRY/EXIT
LDM DBFD
NJN CDL1 IF DISPLAY NOT ROLLING
AOD DR
CDL1 CFNC SLSF SELECT LEFT SCREEN - SMALL CHARACTERS
LDD DR
ADD IO SET REFRESH STATUS
STM DBFC
NJN CDL3 IF DISPLAY REFRESH ENABLED
STD T1
CDL2 LDM CDLA,T1
ZJN CDLX IF ALL LINES CLEARED
STD YC
RJM ERL ERASE LINE
AOD T1
UJN CDL2 LOOP
CDLA CON HL01
CON HL02
CON HL04
CON 0
ERL SPACE 4,10
** ERL - ERASE LINE.
*
* ENTRY (XC) = X-COORDINATE.
* (YC) = Y-COORDINATE.
*
* MACROS CFNC.
ERL SUBR ENTRY/EXIT
LDN 2
OAM XC,CH OUTPUT COORDINATES
CFNC EELF
UJN ERLX RETURN
ERR SPACE 4,15
** ERR - ERROR MESSAGES.
ERRA DATA C*FORMAT ERROR.*
ERRB DATA C*DISK BUSY.*
ERRC DATA C*PP BUSY.*
ERRD DATA C*REPEAT ENTRY.*
DFIM (CON LN27)
ERRE CON LN45,CH03
DATA C*RECORD TOO LONG.*
ERREL EQU *-ERRE
ERRF DATA C*CANNOT PERFORM I/O ON FILE.*
ERRNG PPFW-* IF PP RESIDENT MEMORY OVERFLOW
LOC *O
PRSAL EQU *-PRSA
TITLE MAIN PROGRAM.
O26 SPACE 4,20
** O26 - MAIN PROGRAM.
ORG PPFW
O26 LJM PRS PRESET PROGRAM
O261 RJM CDL CLEAR DISPLAY LINES
O262 RJM SYS DISPLAY SYSTEM STATUS
DCN CH+40
DFIM (CON LDMI)
UJN O263 DISPLAY BUFFER
CON DBFC
NJN O263 IF SCREENS BEING REPAINTED
LDD KI
LMD KP
ZJN O264 IF NO KEYBOARD INPUT
O263 RJM DBF DISPLAY BUFFER
DCN CH+40
RJM DKB DISPLAY KEYBOARD BUFFER
DFIM (LDD KI)
UJN O265 DISPLAY BUFFER STATUS
STD KP SET PREVIOUS INDEX = CURRENT
LDN 0
STD KD
O264 RJM KBI CHECK KEYBOARD INPUT
O265 RJM DBS DISPLAY BUFFER STATUS
CFNC THVF TRANSFER HIDDEN SCREEN TO VISIBLE
DCN CH+40
RJM KBI KEYBOARD INPUT
RJM TIO TRY I/O
O266 RJM PSS PAUSE FOR SYSTEM
DFIM (CON O261),*+1
LJM O262 LOOP
DPP SPACE 4,10
** DPP - CLEAR *DIS* FLAG AND DROP PP.
*
* EXIT TO PPR.
*
* USES CM - CM+4.
*
* MACROS MONITOR.
*
* NOTE THIS ROUTINE IS CALLED FROM *COMDDSP* ROUTINE *PSS*.
DPP BSS 0 ENTRY
LDN ZERL
CRD CM
LDN 10 SET MASK FOR *JCIW*
STD CM+4
LDN CCTS CLEAR *DIS* FLAG
STD CM+1
MONITOR SJCM
MONITOR DPPM DROP PP
LJM PPR EXIT TO PP RESIDENT
DBF SPACE 4,20
** DBF - DISPLAY BUFFER.
*
* ENTRY (OT - OT+1) = DISPLAY ADDRESS.
*
* EXIT (DL) = DISPLAY LENGTH.
* (LL) = 0 IF EXIT ON LAST LINE OF SCREEN.
* (DA - DA+1) = ADDRESS OF LAST LINE + 1.
*
* USES T1 - T7, CM - CM+4.
*
* CALLS CDA, DIL, EDW.
*
* MACROS CFNC, DFIM.
DBF SUBR ENTRY/EXIT
LDD OT SET DISPLAY ADDRESS
STD DA
LDD OT+1
STD DA+1
LDN 0 SET DISPLAY LENGTH
STD DL
LDC SLSF SET LEFT SCREEN
STM DBFB
LDC LN06 SET FIRST LINE
DBFA EQU *-1
STD YC
DFIM (UJN DBF1)
LMC LN06
ZJN DBF1 IF TOP OF SCREEN
AOM DBFA ADVANCE Y
STM DBFD
DBF1 LDC SLSF
DBFB EQU *-1
CFNC SELECT SCREEN - SMALL CHARACTERS
DBF2 RJM CDA CHECK DISPLAY ADDRESS
PJN DBFX IF BUFFER EMPTY
RJM DIL DISPLAY INSERT LINE
LDN 0
STD T3 CLEAR WORD COUNTS
STD T4
LDM DBFC
ZJN DBF3 IF DISPLAY REFRESH DISABLED
LDN 2
OAM XC,CH
OAN CH+40
LDC 2R .
OAN CH+40
* DISPLAY LINE.
DBF3 LDD DA READ WORD
SHN 6
ADD RA
SHN 6
ADD DA+1
CRD CM
AOD DL ADVANCE DISPLAY LENGTH
LDD SF
ZJN DBF7 IF SCAN NOT SET
* DISPLAY SCAN LINE.
AOD T3 COUNT WORD READ
SBD SC
SBN 1
PJN DBF5 IF WORD REACHED
DBF4 LJM DBF9 PROCESS END OF WORD
DBF5 SBN 6
MJN DBF7 IF SIX WORDS NOT DISPLAYED
SBN 10
MJN DBF4 IF EIGHT WORDS NOT SKIPPED
DBF6 LJM DBF10 PROCESS AS END OF LINE
* DISPLAY NORMAL LINE.
DBF7 AOD T4 COUNT WORD DISPLAYED
LMN 7
NJN DBF8 IF NOT 7TH WORD
STD T4
LDC CH05 RESET X-COORDINATE
OAN CH+40
LCN YINC
RAD YC
OAN CH+40
DFIM (ADC -LN25)
ADC -LN42
MJN DBF6 IF SCREEN OVERFLOW
RJM CDA CHECK DISPLAY ADDRESS
MJN DBF8 IF BUFFER NOT EMPTY
LJM DBFX RETURN
DBF8 LDC 1
DBFC EQU *-1
ZJN DBF9 IF REFRESH DISABLED
RJM EDW DISPLAY WORD
* PROCESS END-OF-WORD.
DBF9 AOD DA+1 ADVANCE WORD ADDRESS
SHN -14
RAD DA
LDD CM+4
ZJN DBF10 IF END OF LINE
LDD DA
SBD IN
SHN 14
ADD DA+1
SBD IN+1
PJN DBF10 IF ADDRESS .GE. *IN*
LJM DBF3 LOOP
* PROCESS END-OF-LINE.
DBF10 LDC 1 ADVANCE LINE NUMBER
DBFD EQU *-1
NJN DBF12 IF ROLL NOT NEEDED
AOD DR
LDD DA
STD OT
LDD DA+1 SET FIRST LINE ADDRESS
STD OT+1
LDD YC SET NEW Y-COORDINATE
DFIM (UJN DBF11)
SBN 2*YINC
STM DBFA
DBF11 STM DBFD SET ROLL NOT NEEDED
DFIM (LCN YINC)
DBF12 LCN 2*YINC
RAD YC
DFIM (ADC -LN25)
ADC -LN41
MJN DBF13 IF BOTTOM OF SCREEN
STD LL
LJM DBF2 LOOP
DBF13 LDD HN SET NEXT SCREEN
RAM DBFB
ERRNZ SLSF+100-SRSF CODE DEPENDS ON VALUE
SHN 21-6
PJN DBF14 IF RIGHT SCREEN DISPLAYED
FJM *,CH
DCN CH+40
DFIM (CON LN06),*+1
LDC LN06-LN41+YINC RESET LINE NUMBER
DFIM (STD YC)
RAD YC
LJM DBF1 LOOP
DBF14 LDD HF SET ROLL FLAG
STM DBFD
RJM DIL DISPLAY INSERT LINE
LJM DBFX RETURN
DBS SPACE 4,20
** DBS - DISPLAY BUFFER STATUS.
*
* USES T1, CM - CM+4.
*
* CALLS D6S, DOL.
*
* MACROS CFNC, DISPLA, MONITOR.
DBS SUBR ENTRY/EXIT
CFNC SLSF
LDD IO
ZJN DBS1 IF I/O NOT BUSY
DISPLA CH04,HL02,(CIO BUSY.)
DBS1 DISPLA CH01,HL01,(O26. FILE = )
LDD RA READ FILE NAME
SHN 6
ADN FET
CRD CM
LDN 4 DISPLAY FILE NAME
OAM CM,CH
LDM CRSB CHECK WRITE LOCKOUT
ZJN DBS2 IF WRITE ALLOWED
LDN 1R*
DBS2 OAN CH+40
LDD CM+4 DISPLAY STATUS
RJM D6S
DISPLA ,,(RS=) DISPLAY CURRENT RECORD SIZE
LDD IN
SBD FT
SHN 14
ADD IN+1
SBD FT+1
SHN 14 PRESERVE PRU COUNT
STD CM
SHN 6 DISPLAY WORD COUNT IN BUFFER
RJM D6S
LDD CM COMPARE WITH ORIGINAL BUFFER SIZE
LMM TIOG
ZJN DBS3 IF SAME FILE PRU SIZE
DISPLA ,,(**.) SET WARNING IF FILE CHANGED PRU SIZE
DBS3 DISPLA ,,(CM=)
LDD LM COMPUTE STORAGE
SBD IN
SHN 14
ADD LM+1
SBD IN+1
RJM D6S DISPLAY STORAGE
LDD CP READ MESSAGE 2
ADN MS2W
STD T1
CRD CM
LDD CM
NJN DBS4 IF SET
LDD CP READ MESSAGE 1
ADN MS1W
CRD CM
STD T1
DBS4 LDN 2 OUTPUT COORDINATES
OAM DBSA,CH
LDD T1 DISPLAY MESSAGE
RJM DOL
LDD CP READ JOB CONTROL
ADN STSW
CRD CM
LDD CM+2 CHECK ROLLOUT FLAG
LPN 1
ZJN DBS5 IF NOT SET
DISPLA CH25,HL02,(ROLLOUT.),H
DBS5 LDD CM+1
ZJN DBS8 IF ERROR FLAG NOT SET
SOD CM
LPN 37
NJN DBS8 IF .GT. 1 PP ASSIGNED
STD IO
LDN ZERL
CRD CM CLEAR RANDOM ACCESS
LDD RA
SHN 6
ADN FET+6
CWD CM
MONITOR CEFM CLEAR ERROR FLAG
DBS8 LJM DBSX RETURN
DBSA CON CH01,HL04
DKB SPACE 4,20
** DKB - DISPLAY KEYBOARD BUFFER.
*
* ENTRY (KM) = ADDRESS OF KEYBOARD MESSAGE. (IF (KM) = 0,
* NO MESSAGE.)
* (KI) = KEYBOARD INDEX.
* (KD) = 0 IF KEYBOARD BUFFER NOT DISPLAYED.
*
* USES T1, T3, YC.
*
* CALLS DKL, ERL, HIL.
*
* MACROS CFNC, DFIM, DISPLA.
DKB SUBR ENTRY/EXIT
CFNC SLSF
DFIM (CON LN50),*+1
LDC LN48 SET Y-COORDINATE
STD YC
LDN 2 OUTPUT MESSAGE COORDINATES
OAM ERRE,CH
LDD KM
ZJN DKB3 IF NO MESSAGE
STD T1 DISPLAY MESSAGE
LMC ERRE
ZJN DKB2 IF *RECORD TOO LONG*
DKB1 LDI T1
OAN CH+40
ZJN DKB3 IF END OF MESSAGE
AOD T1
UJN DKB1
DKB2 LDC ERREL*10000+ERRE
RJM HIL
DKB3 LDD IF
ZJN DKB4 IF NO INSERT
DISPLA ,,(INSERT.)
DKB4 LDM KBUF+1
LMN 1R.
NJN DKB7 IF 2ND CHARACTER .NE. *.*
DISPLA ,,(COL. =)
* LDN 0 PRESET DIGITS
STD T3
LDD KI DISPLAY COLUMN NUMBER
SBN 1
DKB5 STD T1
AOD T3
LDD T1 COUNT 10
SBN 10D
PJN DKB5 IF CONVERSION NOT COMPLETE
SOD T3
ZJN DKB6 IF LEADING ZERO
ADN 1R0
DKB6 OAN CH+40
LDD T1
SHN 6
ADC 2R0.
OAN CH+40
DKB7 DFIM (LDD KD)
UJN DKB8 DISPLAY KEYBOARD LINE
NJN DKB11 IF KEYBOARD BUFFER DISPLAYED
LDC SLPF
STM DKBA SELECT LEFT SCREEN - PRIORITY OUTPUT
CFNC
DKB8 RJM DKL DISPLAY KEYBOARD LINE
DFIM (SHN 21-11)
UJN DKB10 RETURN
PJN DKB10 IF DATA ON LAST LINE
DKB9 RJM ERL ERASE LAST LINE
DKB10 FJM *,CH IF FULL CHANNEL
DCN CH+40
LJM DKBX RETURN
DKB11 LDC SLPF CHECK KEYBOARD BUFFER DISPLAY
DKBA EQU *-1
ZJN DKB10 IF PRIORITY LINES CLEAR
CFNC
LDN 0 SET LINES CLEARED
STM DKBA
RJM ERL ERASE *LN50*
LCN YINC
RAD YC
UJN DKB9 CLEAR *LN51*
DLL SPACE 4,20
** DLL - DISPLAY LAST LINE.
*
* ENTRY (IF) = INSERT FLAG.
*
* EXIT (A) .GT. 0.
*
* CALLS DKL.
DLL SUBR ENTRY/EXIT
LDD IF CHECK INSERT FLAG
ZJN DLL1 IF NOT SET
LDD IP+1 CHECK INSERT
LMD IN+1
NJN DLL1 IF NOT AT END
LDD IP CHECK INSERT
LMD IN
NJN DLL1 IF NOT AT END
STD IF CLEAR INSERT
AOD DR
DLL1 RJM DIL DISPLAY INSERT LINE
LDD IF
NJN DLLX IF INSERT LINE
RJM DKL DISPLAY KEYBOARD LINE
UJN DLLX RETURN
DISPLAY SPACE 4,10
** DISPLAY COMMON DECKS.
*CALL COMDDSP
*CALL COMDSYS
TITLE KEYBOARD INPUT.
KBI SPACE 4,20
*** KEYBOARD INPUT.
*
* ALL ENTRIES ARE DISPLAYED ON THE BOTTOM OF THE LEFT SCREEN
* AS THEY ARE ENTERED.
*
* *CR* MUST FOLLOW ALL ENTRIES BEFORE ACTION IS TAKEN.
* *BKSP* DELETES THE PREVIOUS CHARACTER TYPED.
* *LEFT BLANK* DELETES THE CURRENT LINE BEING ENTERED.
* *RIGHT BLANK* IS THE TAB KEY.
*
* IF THESE CHARACTERS ARE THE FIRST ENTRY, THE FOLLOWING
* APPLIES -
* *0* = SET INSERT AT FIRST LINE.
* *1* = SET INSERT AT 4TH LINE ON SCREEN.
* *2* = SET INSERT AT 8TH LINE ON SCREEN.
* *3* = SET INSERT AT 12TH LINE ON SCREEN.
* *4* = SET INSERT AT 16TH LINE ON SCREEN.
* *5* = SET INSERT AT 20TH LINE ON SCREEN.
* *6* = SET INSERT AT 24TH LINE ON SCREEN.
* *7* = SET INSERT AT 32ND LINE ON SCREEN.
* *8* = SET INSERT *8* AT INSERT LINE.
* *9* = SET INSERT *9* AT INSERT LINE.
* *+* = DISPLAY NEXT PAGE.
* *-* = DISPLAY PREVIOUS 18 LINES.
* (*) = HOLD DISPLAY.
* */* = START OR STOP ROLL.
* *(* = ADVANCE INSERT BY 1.
* *)* = DECREMENT INSERT BY 1.
* *=* = TOGGLE INSERT FLAG.
* *,* = FIND INSERT LINE.
* *.* = DELETE NEXT LINE.
* *CR* = SET */REPEAT ENTRY.*
* * * = SET *P.* INTO BUFFER.
*
* ABOVE THE ENTRY DISPLAY, THE FOLLOWING MESSAGES MAY
* APPEAR -
*
* *DATA OVERFLOW.* = THE LINE TO BE ENTERED IN THE
* BUFFER OR THE BLOCK TO BE MOVED OR COPIED
* DOES NOT FIT INTO THE REMAINING FIELD LENGTH.
* USE *ENFL* COMMAND TO INCREASE BUFFER SPACE.
* *DISK BUSY.* = WAITING FOR *O26* OVERLAY.
* *FILE NOT ON MASS STORAGE.* = FILE NOT VALIDATED
* FOR RANDOM PROCESSING.
* *FORMAT ERROR.* = A FORMAT ERROR HAS BEEN
* DETECTED DURING TRANSLATION OF THE ENTRY.
* *INCORRECT COMMAND.* = USER ACCESS NOT VALID
* DETECTED.
* *INDEX NOT FOUND.* = THE FILE DIRECTORY (RANDOM
* INDEX) WAS NOT FOUND.
* *INSERT 8 OR 9 NOT SET.* = THE COMMAND ENTERED
* REQUIRES THAT BOTH THE INSERT 8 MARKER AND
* THE INSERT 9 MARKER BE SET.
* *INCORRECT FL REQUEST.* = THE REQUESTED FIELD
* LENGTH WAS GREATER THAN 131K, OR LESS THAN
* 10K IF EXTENDED MEMORY ASSIGNED.
* *LINE NOT FOUND.* = A LINE CONTAINING THE STRING
* SPECIFIED WAS NOT FOUND.
* *LINE OVERFLOW.* = THE REPLACE COMMAND INCREASED
* LINE LENGTH TO GREATER THAN THE MAXIMUM
* BUFFER SIZE OF 90 CHARACTERS.
* *LIST.* = *O26* IS GENERATING A LIST OF THE DIRECTORY
* FOR THE FILE.
* *NO RANDOM ACCESS.* = THE FILE IS NOT RANDOM ACCESS.
* *NOT IN LINE.* = CHARACTER STRING NOT FOUND BY THE
* REPLACE CHARACTER COMMANDS.
* *OUT OF RANGE.* = EDIT LINE NUMBER NOT IN BUFFER.
* *PP BUSY.* = REQUEST IGNORED BY SYSTEM.
* *PRU SIZE MODIFIED.* = A REWRITE IN PLACE CANNOT
* BE PERFORMED BECAUSE OF THE REASON INDICATED.
* *RECORD NOT FOUND.* = THE REQUESTED RECORD WAS NOT
* FOUND ON THE FILE. FOR SEQUENTIAL RECORD
* SEARCH, THE RECORD WAS NOT FOUND AFTER THE
* CURRENT FILE POSITION.
* *RECORD TOO LONG.* = RECORD READ DID NOT FIT
* INTO BUFFER.
* *REPEAT ENTRY.* = ENTRY WILL NOT BE CLEARED AFTER
* EXECUTION.
* *SEARCH / CCCCCCC.* = *O26* IS SEARCHING SEQUENTIAL
* RECORD *CCCCCCC*.
* *SEARCH.* = *O26* IS SEARCHING A RANDOM RECORD.
* *STORAGE NOT AVAILABLE.* = THE REQUESTED FIELD
* LENGTH IS CURRENTLY UNAVAILABLE.
* *WAITING FOR STORAGE.* = *O26* IS WAITING FOR THE
* REQUESTED FIELD LENGTH TO BE ASSIGNED.
* *WRITE ON READ-ONLY FILE.* = WRITE IS NOT ALLOWED
* ON THE EDIT FILE.
KBI SPACE 4,20
** KBI - KEYBOARD INPUT.
*
* USES T2, T5, CA, UC, KE, KI.
*
* CALLS CFC, RDL.
*
* MACROS CFNC, DFIM.
KBI8 SHN 21-6
PJN KBI9 IF NOT CONTROLWARE RELOAD REQUEST
AOD DR
KBI9 SHN 6-21
NJN KBI1 IF INPUT CHARACTER PRESENT
STM KBIB CLEAR CHARACTER
KBIX LJM O266 ENTRY/EXIT
KBI EQU *-1
CFNC SKIF SELECT KEYBOARD INPUT
IAN CH+40
DCN CH+40
STD KE
LJM KBI8 CHECK KEYBOARD INPUT
KBIA EQU *-1
JMP KBIX RETURN
KBI1 LDC **
KBIB EQU *-1
ZJN KBI2 IF NO PREVIOUS CHARACTER
SOM KBID DECREMENT DELAY
NJN KBIX IF DELAY NO ELAPSED
LDN 20 SET REPEAT DELAY
DFIM (LDN 1)
KBI2 LMN 24 SET INITIAL DELAY
STM KBID
LDD KE
STM KBIB STORE CURRENT CHARACTER
LDD KI
NJN KBI3 IF NOT FIRST CHARACTER
STM DKLA CLEAR ALTERNATE KEYBOARD
RJM CFC CHECK FIRST CHARACTER
KBI3 LDD KE CHECK CHARACTER
KBIC LMN **
NJN KBI4 IF NOT UPPER CASE SHIFT
LDD UC TOGGLE UPPER CASE
LMN 1
STD UC
ZJN KBI6 IF NOT UPPER CASE
JMP KBIX RETURN
KBI4 LDD UC
ZJN KBI6 IF NOT UPPER CASE
LDN 0 CLEAR UPPER CASE FLAG
STD UC
LDC KBIF-1 SET UPPER CASE TABLE
STD T2
KBI5 AOD T2 ADVANCE TABLE
LDI T2
ZJN KBI6 IF END OF TABLE
SHN -6
LMD KE COMPARE ENTRY
NJN KBI5 IF NO MATCH
LDI T2 ENTER SPECIAL CHARACTER
LPN 77
STD KE
SBN 1
ZJN .KBIX IF BKSP
ADN 1
UJN KBI7
KBI6 LDD KE CHECK ENTRY
SBN 53
MJN KBC IF .LT. *$*
SBN KBIEL
KBI7 PJN KBC IF .GT. * *
LDM KBIE-53,KE
STD T5 SET EXECUTE FLAG
LJM 0,T5 PROCESS ENTRY
* PROCESS *SPACE*.
KBS LDN 1R SUBSTITUTE * *
STD KE
LDC 0
KBSA EQU *-1
NJN KBC IF NOT SKIPPING
LDM KBUF
LMN 1RA
ZJN KBS1 IF *A*
LMN 1RD&1RA
ZJN KBS1 IF *D*
LMN 1RE&1RD
ZJN KBS1 IF *E*
LMN 1RL&1RE
NJN KBC IF NOT *L*
KBS1 LDM DBUF,KI
LPN 77
UJN KBC1
* PROCESS NORMAL CHARACTER.
KBC LDD KE CLEAR SKIP FLAG
NJN KBC0 IF NOT COLON
LDD HN SUBSTITUTE 100B FOR COLON
KBC0 STM KBSA TURN OFF SKIP MODE
KBC1 STM KBUF,KI
AOD KI
SBN 62D
NJN KBC3 IF NOT ADVANCE INTO DOUBLE DISPLAY LINE
AOD DR
LDN 0
KBC3 SBN KBUFL-62D
PJN KBB IF BUFFER FULL
LDN 0 CLEAR EXECUTE FLAG
STD T5
LJM INT INTERPRET KEYBOARD MESSAGE
* PROCESS *BKSP*.
KBB LDN 1R CLEAR PREVIOUS ENTRY
STM KBUF-1,KI
SOD KI
SBN 2
PJN KBB1 IF NOT BEFORE COLUMN 2
LDN 0 CLEAR DISPLAY ALTERNATE BUFFER
STM DKLA
KBB1 SBN 61D-2
NJN KBB2 IF NOT BACKSPACE INTO SINGLE DISPLAY LINE
AOD DR
KBB2 LDD KM CHECK KEYBOARD MESSAGE
LMC ERRD
ZJN KBB3 IF REPEAT ENTRY RETURN
LDN 0
STD KM
KBB3 JMP KBIX RETURN
* PROCESS *.*.
KBP LDD KI CHECK COLUMN
SBN 1
ZJN KBP1 IF COL. 2
LJM KBC
KBP1 STM KBSA SET SKIP FLAG
LDM KBUF
LMN 1RA
ZJN KBP2 IF *A*
LMN 1RD&1RA
ZJN KBP3 IF *D*
LMN 1RE&1RD
ZJN KBP3 IF *E*
LMN 1RL&1RE
ZJN KBP2 IF *L*
LMN 1RM&1RL
ZJN KBP2 IF *M*
LMN 1RN&1RM
NJN KBP4 IF NOT *N*
KBP2 LDD IF
ZJN .KBIX IF NO INSERT
AOD DR
LDC BUFM+2 SET CHARACTER ADDRESS
STD CA
LDN 0 CLEAR BUFFER
STI CA
RJM RDL READ NEXT LINE
KBP3 LDC DBUF SET ALTERNATE LINE BUFFER
STM DKLA
KBP4 LDN 1R.
JMP KBC1
DFIM (CON 1)
KBID DATA 24 DELAY COUNT
KBIE BSS 0
LOC 53
CON PLB 53 *LEFT BLANK*
CON KBC 54
CON PRT 55 *RIGHT BLANK*
CON KBC 56
CON KBP 57 *.*
CON INT 60 *CR*
CON KBB 61 *BKSP*
CON KBS 62 * *
LOC *O
KBIEL EQU *-KBIE
KBIF BSS 0
CON 1LS+53
CON 2R0# 60
CON 2R1[ 61
CON 2R2] 62
CON 1L3+63
CON 2R4" 64
CON 1L5+65 65
CON 2R6! 66
CON 2R7& 67
CON 2RQ' 70
CON 2RW? 71
CON 2RE< 72
CON 2RR> 73
CON 2RT@ 74
CON 2RY\ 75
CON 2RU^ 76
CON 2RI; 77
CON 2R=" 64
CON 1L.+65 65
CON 2RA& 67
CON 2R(< 72
CON 2R)> 73
CON 2R+@ 74
CON 2R-\ 75
CON 2R,; 77
CON 6101 BKSP
KBIG CON 2RZ0-1R0 00 ( 0, IF 63 CHARACTER SET)
CON 0 TERMINATOR
TITLE DISPLAY SUBROUTINES.
CDA SPACE 4,15
** CDA - CHECK DISPLAY ADDRESS.
*
* ENTRY (DA - DA+1) = CURRENT DISPLAY ADDRESS.
*
* EXIT (A) .LT. 0 IF BUFFER NOT EMPTY.
* = RESPONSE FROM *DLL* IF EMPTY.
*
* CALLS DLL.
CDA SUBR ENTRY/EXIT
LDD DA
SBD IN
SHN 14
ADD DA+1
SBD IN+1
MJN CDAX IF BUFFER NOT EMPTY
RJM DLL DISPLAY LAST LINE
UJN CDAX RETURN
CFC SPACE 4,20
** CFC - CHECK FIRST CHARACTER.
*
* ENTRY (KE) = FIRST CHARACTER.
* (DA - DA+1) = ADDRESS + 1 OF LAST LINE OF DISPLAY.
*
* USES T1, T2, KI, IN - IN+1, IP - IP+1, OT - OT+1.
*
* CALLS DNL, RID, SDS, SFL, SIL.
CFC SUBR ENTRY/EXIT
LDD KE
SBN 1R0
MJN CFCX IF .LT. *0*
SBN CFCAL
PJN CFCX IF .GT. * *
LDM CFCA-1R0,KE
STD T2
AOD DR ENABLE DISPLAY REFRESH
LDN 0
LJM 0,T2
* *,* - FIND INSERT LINE.
CFC1 LDD IF
ZJN CFC4 IF NO INSERT
LDD IP FIND INSERT LINE
STD OT
LDD IP+1
STD OT+1
JMP KBIX RETURN
* *CR* - SET *REPEAT ENTRY.*
CFC2 LDC ERRD ERROR = *REPEAT ENTRY.*
STD KM
JMP KBIX RETURN
* *+* - INCREMENT DISPLAY BY ONE SCREEN.
CFC3 LDD DA CHECK NEXT DISPLAY ADDRESS
LMD IN
SHN 14
LMD DA+1
LMD IN+1
ZJN CFC4 IF *IN* REACHED RETURN
LDD DA
STD OT
LDD DA+1 SET NEXT LINE ADDRESS
STD OT+1
CFC4 JMP KBIX RETURN
* *-* - DISPLAY PREVIOUS 18 LINES.
CFC5 LDD OT SET DISPLAY
STD T2
LDD OT+1
STD T3
LCN 18D
RJM SFL SEARCH FOR LINE
LDN T2 SET DISPLAY
RJM SDS
JMP KBIX RETURN
* */* - TOGGLE HOLD FLAG.
CFC6 LDD HF
LMN 1
STD HF
JMP KBIX RETURN
* *(* - ADVANCE INSERT.
CFC7 LDD IF
ZJN .KBIX IF NO INSERT
LDN 1 ADVANCE INSERT
UJN CFC10
* *)* - DECREMENT INSERT.
CFC8 LDD IF
NJN CFC9 IF INSERT
LDD DA
STD IP
LDD DA+1 SET INSERT AT LAST LINE
STD IP+1
CFC9 LCN 1 DECREMENT INSERT
CFC10 RJM SIL
JMP KBIX RETURN
* *=* - CLEAR INSERT.
CFC11 STD IF
JMP KBIX RETURN
* * * - SET *P.* IN BUFFER
CFC12 LDN 2
STD KI
LDN 1RP
STM KBUF
LDN 1R.
STM KBUF+1
JMP KBIX RETURN
* (*) - HOLD DISPLAY CHANNEL.
CFC13 RJM RID HOLD DISPLAY
JMP KBIX RETURN
* *0 - 7* - SET INSERT AT SCREEN START + 4*N LINES.
CFC14 LDD OT
STD IP
LDD OT+1
STD IP+1
LDD KE
SBN 1R0
SHN 2
RJM SIL SET INSERT LINE
JMP KBIX RETURN
* *8* - SET INSERT *8*.
CFC15 LCN 2
* UJN CFC16 SET INSERT *8*
* *9* - SET INSERT *9*.
CFC16 ADC CFCB+2
STD T1
LDD IF
ZJN CFC18 IF NO INSERT
LDD IP SET INSERT ADDRESS
STI T1
LDD IP+1
CFC17 STM 1,T1
JMP KBIX RETURN
CFC18 LDD IN SET INSERT ADDRESS
STI T1
LDD IN+1
UJN CFC17 RETURN
* *.* - DELETE NEXT LINE.
CFC19 RJM DNL DELETE NEXT LINE
JMP KBIX RETURN
* TABLE OF FIRST CHARACTER FORMATS.
CFCA BSS 0
LOC 1R0
CON CFC14 0
CON CFC14 1
CON CFC14 2
CON CFC14 3
CON CFC14 4
CON CFC14 5
CON CFC14 6
CON CFC14 7
CON CFC15 8
CON CFC16 9
CON CFC3 +
CON CFC5 -
CON CFC13 *
CON CFC6
CON CFC7 (
CON CFC8 )
CON CFCX LEFT BLANK
CON CFC11 =
CON CFCX RIGHT BLANK
CON CFC1 ,
CON CFC19 .
CON CFC2 CR
CON KBIX BKSP
CON CFC12 SPACE
LOC *O
CFCAL EQU *-CFCA
CFCB BSS 5 INSERT *8* AND *9* BUFFER
DIL SPACE 4,20
** DIL - DISPLAY INSERT LINE.
*
* ENTRY (DA - DA+1) = DISPLAY ADDRESS.
*
* CALLS DIM, DKL.
*
* MACROS DFIM.
DIL SUBR ENTRY/EXIT
LDM CFCB+1
LMD DA+1
NJN DIL1 IF NOT AT INSERT *8*
LDM CFCB
LMD DA
NJN DIL1 IF NOT AT INSERT *8*
LDN 1R8
RJM DIM DISPLAY INSERT MARK
DIL1 LDM CFCB+3
LMD DA+1
NJN DIL2 IF NOT AT INSERT *9*
LDM CFCB+2
LMD DA
NJN DIL2 IF NOT AT INSERT *9*
LDN 1R9
RJM DIM DISPLAY INSERT MARK
DIL2 LDD IF
ZJN DILX IF NO INSERT
LDD IP+1
LMD DA+1
NJN DILX IF NOT HERE
LDD IP
LMD DA
NJN DILX IF INSERT NOT HERE
RJM DKL DISPLAY KEYBOARD LINE
LJM DILX RETURN
DIM SPACE 4,15
** DIM - DISPLAY INSERT MARK.
*
* ENTRY (A) = INSERT MARK.
*
* USES T1, T3.
*
* MACROS DFIM.
DFIM (LCN YINC)
DIM3 LCN 2*YINC DECREMENT Y-COORDINATE
RAD YC
DIM SUBR ENTRY/EXIT
STD T3
LDM DBFC CHECK BUFFER REFRESH
DFIM (ZJN DIM3)
PSN (NO-OP ON CC545)
LDN 0
STD T1
LDD YC OUTPUT Y COORDINATE
OAN CH+40
LDC CH04 OUTPUT X-COORDINATE
OAN CH+40
DIM1 LDC 2R-- DISPLAY *--*
OAN CH+40
AOD T1
LMN 14
NJN DIM1 IF NOT COMPLETE LOOP
LDD T3
OAN CH+40
LDN 1R- DISPLAY * -*
OAN CH+40
DIM2 LDC 2R-- DISPLAY *--*
OAN CH+40
AOD T1
LMN 27
NJN DIM2 IF NOT COMPLETE LOOP
LDC 2R- DISPLAY *- *
OAN CH+40
UJP DIM3 DECREMENT Y-COORDINATE
DKL SPACE 4,15
** DKL - DISPLAY KEYBOARD LINE.
*
* ENTRY (YC) = Y-COORDINATE.
* (XC) = *CH01*.
* (KD) = 0.
*
* EXIT (A) = NEW Y-COORDINATE.
* (KD) = 1.
* (T1) = NUMBER OF CHARACTERS DISPLAYED.
* (XC) = *CH01*.
* (YC) = NEW Y-COORDINATE.
*
* USES T2, T5, XC, YC, CM - CM+4.
*
* CALLS DKP, DKS.
*
* MACROS DFIM.
DKL3 LDC CH01 RESET X-COORDINATE
STD XC
AOD KD SET KEYBOARD LINE DISPLAYED
DFIM (LCN YINC)
LCN 2*YINC DECREMENT Y-COORDINATE
RAD YC
DKL SUBR ENTRY/EXIT
LDN CH02-CH01
RAD XC
LDN 2 OUTPUT COORDINATES
OAM XC,CH
* LDN 0 SET DISPLAY INDEX
STD T1
LDC KBUF SET BUFFER ADDRESS
STD T2
LDD KI
RJM DKS DISPLAY KEYBOARD STRING
* DISPLAY ALTERNATE BUFFER.
LDC **
DKLA EQU *-1
ZJN DKL1 IF NO ALTERNATE BUFFER
ADD KI
STD T2
STD T5
LDD MA SAVE COORDINATES
CWD XC
CRD CM
LDN 2 RESET COORDINATES
OAM XC,CH
LDC ** CHECK LENGTH OF ALTERNATE LINE
DKLB EQU *-1
SBD KI
MJN DKL1 IF ALTERNATE LINE TOO SHORT
ZJN DKL1 IF ALTERNATE LINE TOO SHORT
RJM DKS DISPLAY KEYBOARD STRING
DFIM (LDN 2)
UJN DKL1 RESET COORDINATES
OAM CM,CH
LDD T5 RESET KEYBOARD POINTER
STD T2
RJM DKP
DKL1 LJM DKL3 ADJUST COORDINATES
DKP SPACE 4,15
** DKP - DISPLAY KEYBOARD POINTER.
DKP DSUB
DKS SPACE 4,20
** DKS - DISPLAY KEYBOARD STRING.
*
* ENTRY (A) = CHARACTER COUNT.
* (T1) = DISPLAY INDEX.
* (T2) = BUFFER ADDRESS.
* (XC, YC) = COORDINATES OF DISPLAY.
*
* EXIT (XC, YC) = UPDATED.
*
* CALLS DKP.
*
* MACROS CFNC, DFIM.
DKS8 NJN DKS2 IF NOT END OF STRING
DKS9 RJM DKP DISPLAY KEYBOARD POINTER
LDD T1
LMN 61D
ZJN DKSX IF POINTER AT END OF LINE
CFNC EELF
DKS SUBR ENTRY/EXIT
ZJN DKS9 IF NULL STRING
ADD T2 SET END OF STRING
STM DKSA
DKSB LDI T2
* UJN DKS2 (PRESET IF 63 CHARACTER SET SYSTEM)
LMN 1RF
ZJN DKS1 IF *F.*
LMN 1RS&1RF
ZJN DKS1 IF *S.*
LDC ZJNI+DKS3-DKSC-PSNI
DKS1 ADN PSNI
STM DKSC
DKS2 LDI T2 CHECK CHARACTER
LPN 77
STD T0
DKSC ZJN DKS3 IF ZERO CHARACTER
* PSN (63 CHARACTER SET)
SBN 53
ZJN DKS3 IF 53
SBN 60-53
MJN DKS5 IF LEGAL CODE
DKSD DFIM (UJN DKS4)
* SBN 63-60 (63 CHARACTER SET ON CDC721)
DFIM (NJN DKS4)
DFIM (STD T0)
DKS4 DFIM (CFNC DSCF)
DFIM (LDD T0)
DFIM (UJN DKS6)
DKS3 LDD YC UP Y
SBN 4
OAN CH+40
LDD T0 DISPLAY LOWER DIGIT
LPN 7
ADN 1R0
OAN CH+40
LDD XC OUTPUT COORDINATES
OAN CH+40
LDD YC
ADN 4
OAN CH+40
LDD T0 PREPARE UPPER DIGIT
SHN -3
LPN 7
ADN 1R0
OAN CH+40 DISPLAY UPPER DIGIT
LDD YC
UJN DKS6 RESET Y-COORDINATE
DKS5 ADN 60 DISPLAY CHARACTER
DKS6 OAN CH+40
AOD T1
LMN 62D
NJN DKS7 IF NOT END OF FIRST LINE
LDC CH03
STD XC
DFIM (LCN YINC)
LCN 2*YINC DECREMENT Y-COORDINATE
RAD YC
OAN CH+40
DKS7 LDN XINC ADVANCE X-COORDINATE
RAD XC
OAN CH+40
AOD T2 ADVANCE BUFFER
LMC **
DKSA EQU *-1
LJM DKS8 CHECK END OF STRING
ERRPL DKS3-DKSC-40
EDW SPACE 4,10
** EDW - EDIT AND DISPLAY WORD.
EDW DSUB
RID SPACE 4,10
** RID - REQUEST AND INITIALIZE DISPLAY.
*
* ENTRY (A) = 0 TO HOLD DISPLAY.
* = *RDSOS* TO REQUEST DISPLAY.
*
* USES T1.
*
* CALLS HDC, RDS.
*
* MACROS CFNC, DFIM.
RID1 LDM RIDA,T1 ISSUE FUNCTION
CFNC
SOD T1
PJN RID1 IF MORE FUNCTIONS
DCN CH+40
RID SUBR ENTRY/EXIT
STD T1
RJM HDC,T1 HOLD / REQUEST DISPLAY
DFIM (LDN RIDAL-1)
UJN RIDX RETURN
STD T1
UJN RID1 ISSUE CDC721 FUNCTIONS
RIDA BSS 0 FUNCTION LIST IN REVERSE ORDER
CON CHSF
CON RTPF
CON SRSF
CON RTPF
CON SLSF
RIDAL EQU *-RIDA LENGTH OF LIST
TITLE MAIN PROGRAM SUBROUTINES.
PDS SPACE 4,15
** PDS - PUSH DOWN I/O STACK.
*
* ENTRY (IO) = STACK INDEX.
*
* EXIT (A) = 0.
* (IO) UPDATED.
*
* USES T2.
PDS SUBR ENTRY/EXIT
LDN 0 MOVE STACK DOWN
STD T2
SOD IO
ZJN PDSX IF LAST ENTRY
PDS1 LDM TIOB+1,T2
STM TIOB,T2
AOD T2
SBD IO
MJN PDS1 IF NOT COMPLETE LOOP
UJN PDSX RETURN
PRO SPACE 4,15
** PRO - PROCESS ROLLOUT FLAG WHILE IN HOLD.
*
* USES IR+1, CM - CM+4.
*
* CALLS DDS.
*
* MACROS MONITOR.
*
* NOTE THIS ROUTINE IS CALLED BY *COMDDSP* ROUTINE *ROF*.
PRO LDD CP
ADN STSW
CRD CM
LDD CM+1
ZJN PRO1 IF ERROR FLAG NOT SET
LJM /COMDDSP/ROFX
PRO1 RJM DDS DROP DISPLAY
LDD IR+4 SET ROLLOUT FLAG
LPC 3777
LMC 4000
STD IR+4
LDD MA WRITE REQUEST TO MESSAGE BUFFER
CWD IR
LDN ZERL REQUEST DEFAULT RECALL PARAMETERS
CRD CM
MONITOR RECM
LJM PPR EXIT TO PP RESIDENT
TIO SPACE 4,20
** TIO - TRY I/O.
*
* ENTRY (IO) = I/O BUSY STATUS.
* (SFSA) = NONZERO, IF RANDOM ADDRESS MAY BE INCORRECT.
*
* USES T1 - T5, AB - AB+4.
*
* CALLS MBD, PDS, RRR, SDS, SFR.
TIO SUBR ENTRY/EXIT
LDD IO
ZJN TIOX IF I/O NOT BUSY
LDD RA READ BUFFER STATUS
SHN 6
ADN FET
CRD AB
LDD AB+4 SAVE LAST STATUS
STD T1
LPN 1
ZJN TIOX IF BUSY RETURN
LDM TIOB CHECK CURRENT REQUEST
STD AB+4
SHN 17D
STD T2
PJN TIO3 IF NOT SPECIAL REQUEST
LDM TIOA,T2
STD T2
LJM 0,T2
* SKIP TO END OF INFORMATION.
TIO1 LDC 240 SKIP TO END OF INFORMATION
STD AB+4
LCN 0
UJN TIO4
* SKIP RECORDS.
TIO2 LDM TIOD+1 SKIP FUNCTION
STD AB+4
LDM TIOD RECORD COUNT
UJN TIO4
* CHECK ACCURACY OF RANDOM ADDRESS.
TIO3 LDM SFSA
ZJN TIO4.1 IF RANDOM ADDRESS CORRECT
LDD AB+4
LMC 600
ZJN TIO3.1 IF *READEI* FUNCTION
LMC 240&600
ZJN TIO4.1 IF *SKIPF*, *SKIPFF*, OR *SKIPEI* FUNCTION
LDD AB+4
SBN 40
MJN TIO3.1 IF SIMPLE READ OR WRITE FUNCTION
ADN 40 RESTORE FUNCTION CODE
SHN -6
SBN 2
NJN TIO3.2 IF NOT COMPLEX READ OR WRITE FUNCTION
TIO3.1 LDD HN
STD AB+4 ISSUE *OPEN/READNR* TO SET RANDOM ADDRESS
* ISSUE NORMAL REQUEST.
TIO3.2 LDN 0 SET SKIP COUNT
TIO4 SHN 14
TIO4.1 STM TIOC+2
SHN -6
SCN 77
STM TIOC+3
LDD AB+3 CLEAR LEVEL NUMBER
SCN 77
STD AB+3
LDD AB+4 CHECK IF READ FUNCTION
LMN 12
NJN TIO5 IF NOT READ FUNCTION
LDD RA SAVE RANDOM ADDRESS OF RECORD
SHN 6
ADN FET+6
CRM TIOF,ON
TIO5 LDD RA STORE BUFFER STATUS
SHN 6
ADN FET
CWD AB
LDN ZERL
CRD CM
LDD MA CALL *CIO*
CWM TIOC,ON
CWD CM
MONITOR RPPM REQUEST PP
LDD CM+1
NJN TIO5.1 IF PP ASSIGNED
LDD T1 RESTORE LAST STATUS
STD AB+4
LDD RA
SHN 6
ADN FET
CWD AB
UJN TIO7 RETURN
TIO5.1 LDN 0
STM SFSA CLEAR RANDOM ADDRESS
LDD AB+4
LMD HN
ZJN TIO7 IF *OPEN/READNR* ISSUED
TIO6 RJM PDS PUSH DOWN STACK
TIO7 LJM TIOX RETURN
* READ IN POINTER.
TIO8 LDD T1 CHECK READ STATUS
SHN -3
LMN 1
STM CRSA SET/CLEAR RECORD READ NOT TOO LONG FLAG
NJN TIO9 IF NOT BUFFER READ
LDC ERRE *RECORD TOO LONG.*
STD KM
TIO9 LDD RA READ IN
SHN 6
ADN FET+2
CRD CM
AOD DR
LDD CM+3 SET IN
STD IN
SBD FT
SHN 14
LMD CM+4
STD IN+1
SBD FT+1
SHN -6
STM TIOG STORE RECORD SIZE IN PRU-S
LDD AB+4
LMN 11
ZJN TIO10 IF READ RANDOM RECORD
LMN 15&11
NJN TIO13.1 IF NOT LIST INDEX
LDC LST2&RRR LIST INDEX OF FILE
TIO10 LMC SFR&RRR READ RANDOM RECORD
TIO11 LMC SFR SEARCH FOR RECORD
LJM LOV
* SEARCH FOR RECORD.
TIO12 RJM PDS PUSH DOWN STACK
* LDN 0
UJN TIO11 LOAD RECORD SEARCH OVERLAY
* WRITEW REQUEST.
TIO13 LDD FT SET FIRST
STD T2
LDD FT+1
STD T3
LDD IP SET INSERT ADDRESS
STD T4
LDD IP+1
STD T5
RJM MBD MOVE BUFFER DOWN
LDN FT SET DISPLAY = LINE 0
RJM SDS
TIO13.1 LJM TIO6 PUSH DOWN STACK AND RETURN
* REWIND POINTERS (IN = OUT = FIRST) AFTER WRITE.
TIO14 LDN ZERL
CRD CM
LDC CBUF SET FIRST
STD CM+4
LDD RA
SHN 6
ADN FET+2 WRITE IN
CWD CM
ADN 1 WRITE OUT
CWD CM
JMP TIO6 COMPLETE
* TIO15 - REWRITE RECORD (MASS STORAGE ONLY)
TIO15 LDD RA CHECK IF RANDOM FILE
SHN 6
ADN FET+1
CRD CM READ FET+1
LDD CM+1
LPC 4000
NJN TIO17 IF RANDOM BIT SET
* LDN 0 CLEAR IO STACK
STD IO
LDC =C*FILE NOT ON MASS STORAGE.*
TIO16 LJM ERR1 DISPLAY ERROR
TIO17 LDN ZERL INITIALIZE RANDOM ADDRESS
CRD CM
LDM TIOF+2 CHECK IF RANDOM ADDRESS AVAILIABLE
ADM TIOF+1
NJN TIO18 IF .NE. 0
* LDN 0 CLEAR IO STACK
STD IO
LDC =C*NO RANDOM ADDRESS.*
UJN TIO16 DISPLAY ERROR MESSAGE
TIO18 LDM TIOF+1 SET RANDOM ADDRESS
SHN 14
STD CM+3
LMD CM+3
ADM TIOF+2
SHN -6
STD CM+4
LDC 224 SET CIO REWRITER FUNCTION
STD AB+4
LDD RA
SHN 6
ADN FET+6
CWD CM
LJM TIO3 CONTINUE NORMAL PROCESSING
TIOA CON TIO8 1 - READ IN POINTER
CON TIO1 3 - SKIP TO EOI
CON TIO2 5 - SKIP RECORDS
CON TIO12 7 - SEARCH FOR RECORD
CON TIO8 11 - READ RANDOM RECORD
CON TIO13 13 - WRITEW REQUEST
CON TIO8 15 - LIST FILE INDEX
CON TIO14 17 - SET FIRST = IN = OUT
CON TIO15 21 - REWRITE RECORD(MASS STORAGE ONLY)
TIOB BSSZ 10
TIOC VFD 24/0LCIO,18/0,18/FET
TIOD CON 0,0 COUNT AND SKIP CODE
TIOE CON 0 TEXT RECORD FLAG
TIOF VFD 60/0 FET+6 (RANDOM ADDRESS)
TIOG CON 0 NUMBER OF PRU,S IN BUFFER
WIO SPACE 4,15
** WIO - WAIT I/O.
*
* ENTRY (IO) = I/O BUSY FLAG.
*
* CALLS PSS, TIO.
WIO SUBR ENTRY/EXIT
WIO1 RJM PSS PAUSE FOR SYSTEM
LDD IO
ZJN WIOX IF STACK EMPTY RETURN
RJM TIO TRY I/O
UJN WIO1 LOOP
TITLE KEYBOARD ENTRY PROCESSING.
INT SPACE 4,15
** INT - INTERPRET KEYBOARD BUFFER.
*
* ENTRY (T5) = 0 IF INTERPRET ONLY.
* (T5) .NE. 0 IF EXECUTE REQUESTED.
* (KI) = END OF BUFFER POINTER.
*
* EXIT TO *LOV* TO LOAD SYNTAX OVERLAY IF SYNTAX NOT LOADED.
*
* USES T1 - T7.
*
* CALLS ENTRY PROCESSOR.
* LOAD SYNTAX OVERLAY IF NOT ALREADY LOADED.
INT13 LDC SCT
LJM LOV LOAD COMMAND TABLE
INT UJN INT13 LOAD SYNTAX OVERLAY IF NOT LOADED
* LDN TSFM-1 SET TABLE ADDRESS
STD T2
LDN 0 SET TRIAL CHARACTER
STD T1
INT1 AOD T2 ADVANCE TABLE
LDD RA
SHN 6
ADD T2
CRD CM
LDN CM
STD T4
LDI T4
NJN INT2 IF NOT END OF TABLE
LJM INT9
INT2 LDC KBUF SET CHARACTER ADDRESS
STD CA
INT3 LDI T4 COMPARE UPPER
SHN -6
ZJN INT7 IF COMPARE COMPLETE
STD T6
LMI CA
NJN INT4 IF NO MATCH
AOD CA
LDD T4
LMN CM+3
ZJN INT7 IF COMPARE COMPLETE
LDI T4 COMPARE LOWER
LPN 77
ZJN INT7 IF COMPARE COMPLETE
STD T6
LMI CA
NJN INT4 IF NO MATCH
AOD CA
AOD T4
UJN INT3 LOOP
* PROCESS NO HIT.
INT4 LDD CA CHECK FOR END OF COMPARE
ADC -KBUF
LMD KI
NJN INT5 IF NOT END OF KEYBOARD STRING
LDD T1
NJN INT6 IF NOT UNIQUE ENTRY
LDD T6 SET NEXT CHARACTER
STD T1
INT5 LJM INT1 LOOP
INT6 LMD T6
ZJN INT5 IF SAME CHARACTER LOOP
UJN INT10
* PROCESS UNIQUE CHARACTER.
INT7 LDD T5
ZJN INT11 IF NO INTERPRET
LDD CM+3 PROCESS ENTRY
LPN 77
SHN 14
LMD CM+4
LJM LOV
* PROCESS END OF FORMAT SCAN.
INT9 LDD T1
NJN INT12 IF UNIQUE CHARACTER
SOD KI BACKSPACE POINTER
LDN 1R
STM KBUF,KI
INT10 LDD T5
ZJN INT11 IF EXECUTE FLAG NOT SET
LDC ERRD *REPEAT ENTRY.*
STD KM
INT11 LJM KBIX RETURN
INT12 SBN 1R
PJN INT10 IF SPECIAL CHARACTER
LDD T1 FILL NEXT CHARACTER
STM KBUF,KI
AOD KI
LJM INT LOOP
CIF SPACE 4,10
** CIF - CLEAR INSERT FLAG.
CIF LDN 0 CLEAR INSERT FLAG
STD IF
LDN ZERL
CRM CFCB,ON CLEAR INSERT *8* AND *9*
UJN RET
PLB SPACE 4,15
** PLB - PROCESS *LEFT BLANK*.
PLB LDN 0 CLEAR KEYBOARD MESSAGE
STD KM
* UJN RET PROCESS AS NORMAL RETURN
RET SPACE 4,10
** RET - NORMAL RETURN.
RET LDN 0 CLEAR INDEX
RET1 STD T1 SET CLEARING INDEX
AOD DR
LDD KM
NJN RET3 IF MESSAGE SET
LDD T1 SET KEYBOARD INDEX
STD KI
RET2 LDN 1R CLEAR BUFFER
STM KBUF,T1
AOD T1
ADC -KBUFL
MJN RET2 IF NOT AT END OF BUFFER - LOOP
* LDN 0 CLEAR ALTERNATE DISPLAY BUFFER
STM DKLA
STD LC CLEAR LAST CHARACTER POSITION
RET3 JMP KBIX RETURN
ABT SPACE 4,10
** ABT - ABORT LOAD.
ABT LDN 0 CLEAR KEYBOARD MESSAGE
STD KM
ABT1 LDC KBI8 CLEAR OVERLAY LOAD
STM KBIA
JMP KBIX RETURN
KIC SPACE 4,10
** KIC - INCOMPLETE RETURN.
*
* ENTRY (A) = MESSAGE ADDRESS.
*
* EXIT TO KBIX.
*
* USES T1.
KIC STD T1
LDD KE
LMN 53
ZJN ABT IF *LEFT BLANK*
LDD KM
NJN KIC1 IF MESSAGE
LDD T1
STD KM
KIC1 JMP KBIX RETURN
ERR SPACE 4,7
** ERR - FORMAT ERROR RETURN.
ERR LDC ERRA SET FORMAT ERROR
ERR1 STD KM
JMP KBIX RETURN
ADD SPACE 4,20
** ADD - ASSEMBLE DECIMAL DIGITS.
*
* ENTRY (A) = CHARACTER ADDRESS.
*
* EXIT (A) = SEPARATOR CHARACTER.
* (AB - AB+4) = ASSEMBLED DIGITS RIGHT ADJUSTED.
* (T1) = UPDATED CHARACTER ADDRESS.
*
* USES T0 - T2.
ADD SUBR ENTRY/EXIT
STD T1 SET CHARACTER ADDRESS
LDN ZERL CLAR ASSMEBLY
CRD AB
ADD1 LDI T1 CHECK CHARACTER
SBN 1R0
MJN ADD2 IF ALPHA
SBN 1R+-1R0
MJN ADD3 IF DIGIT
SBN 1R -1R+
ZJN ADD5 IF * *
ADD2 LDI T1 RETURN WITH CHARACTER
UJN ADDX
ADD3 ADN 1R+-1R0 NEW DIGIT = CHARACTER
STD T0
LDN AB+4 SET BYTE ADDRESS
STD T2
ADD4 LDI T2 BYTE = BYTE * 10D
SHN 2
ADI T2
SHN 1
ADD T0 ADD NEW DIGIT
STI T2
SHN -14 NEW DIGIT = OVERFLOW
STD T0
SOD T2 DECREMENT BYTE ADDRESS
LMN AB-1
NJN ADD4 IF NOT END OF WORD LOOP
ADD5 AOD T1 ADVANCE CHARACTER
UJN ADD1 LOOP
ASN SPACE 4,20
** ASN - ASSEMBLE NAME.
*
* ENTRY (A) = CHARACTER ADDRESS.
*
* EXIT (A) = SEPARATOR CHARACTER.
* (T1) = CHARACTER ADDRESS.
* (AB - AB+4) = LEFT JUSTIFIED ASSEMBLY.
*
* USES T1, T2.
ASN SUBR ENTRY/EXIT
STD T1 STORE CHARACTER ADDRESS
LDN ZERL CLEAR ASSEMBLY
CRD AB
LDN AB SET BYTE ADDRESS
STD T2
ASN1 LDI T1 CHECK UPPER
SBN 1R+
PJN ASN2 IF SEPARATOR
ADN 1R+ STORE CHARACTER
SHN 6
STI T2
AOD T1 CHECK LOWER
LDI T1
SBN 1R+
PJN ASN2 IF SEPARATOR
ADN 1R+ STORE CHARACTER
RAI T2
AOD T1
AOD T2
LMN AB+4
NJN ASN1 IF NOT 7 CHARACTERS LOOP
ASN2 LDI T1 RETURN
UJN ASNX
CIO SPACE 4,10
** CIO - CALL CIO.
*
* ENTRY (A) = REQUEST.
*
* EXIT STACK ENTRY MADE.
CIO SUBR ENTRY/EXIT
STM TIOB,IO ENTER REQUEST
LDC *
CIOA EQU *-1 TERMINAL TYPE FLAG
NJN CIO1 IF NOT TERMINAL TYPE
LDC ERRF
JMP ERR1 PROCESS ERROR
CIO1 AOD IO
LMN 10
NJN CIOX IF STACK NOT FULL
SOD IO
UJN CIOX RETURN
CRS SPACE 4,10
** CRS - CHECK RECORD STATUS.
*
* EXIT TO *ERR1*, IF WRITE ATTEMPTED ON READ-ONLY FILE,
* OR THE RECORD READ WAS TOO LONG.
CRS SUBR ENTRY/EXIT
LDC *
CRSA EQU *-1 (RECORD READ NOT TOO LONG FLAG)
ZJN CRS1 IF RECORD READ WAS TOO LONG
LDC **
CRSB EQU *-1 (WRITE LOCKOUT FLAG)
ZJN CRSX IF WRITE IS ALLOWED
LDN ERRF-ERRE *WRITE ON READ-ONLY FILE.*
CRS1 ADC ERRE *RECORD TOO LONG.*
JMP ERR1 PROCESS ERROR
DNL SPACE 4,20
** DNL - DELETE NEXT LINE.
*
* USES T2 - T5, CM - CM+4.
*
* CALLS MBD, SFL.
DNL3 STD IF CLEAR INSERT FLAG
LDD IP DELETE LAST LINE
STD IN
LDD IP+1
STD IN+1
DNL SUBR ENTRY/EXIT
LDD IF
ZJN DNLX IF INSERT FLAG NOT SET
LDD IP SET FIRST ADDRESS
STD T2
STD T4
LDD IP+1
STD T3
STD T5
DNL1 LDD T4 CHECK ADDRESS
LMD IN
NJN DNL2 IF *IN* NOT REACHED
LDD T5
LMD IN+1
ZJN DNL3 IF *IN* REACHED RETURN
DNL2 LDD T4 READ WORD
SHN 6
ADD RA
SHN 6
ADD T5
CRD CM
AOD T5 ADVANCE ADDRESS
SHN -14
RAD T4
LDD CM+4
NJN DNL1 IF NOT END OF LINE LOOP
LDN ZERL CLEAR INSERT *8* AND *9*
CRM CFCB,ON
RJM MBD MOVE BUFFER DOWN
LJM DNLX RETURN
MBD SPACE 4,20
** MBD - MOVE BUFFER DOWN.
*
* ENTRY (T2 - T3) = TARGET ADDRESS.
* (T4 - T5) = FWA OF DATA.
* (IN - IN+1) = LWA+1 OF DATA.
*
* USES T1.
*
* CALLS SDB, SIP.
MBD SUBR ENTRY/EXIT
LDD T2 SET INCREMENT
SBD T4
SHN 14
ADD T3
SBD T5
STM MBDA+1
STM SDBA+1
SHN -14
LMC ADCI
STM MBDA
STM SDBA
LDD IN COMPUTE MOVE WORD COUNT
SBD T4
SHN 14
ADD IN+1
SBD T5
SHN 13D SET BLOCK COUNT
STD T1
SHN -13D SET ODD SIZE
STD T2
LDN 0 CLEAR CURRENT BLOCK COUNT
STD T3
LDD T1
ZJN MBD2 IF NO FULL BLOCKS
* MOVE COMPLETE BLOCKS.
MBD1 LDN 40
RJM SDB SHIFT 40 WORDS OF DATA
AOD T3
LMD T1
NJN MBD1 IF ALL BLOCKS NOT COMPLETE LOOP
* MOVE LAST ODD BLOCK.
MBD2 LDD T2
ZJN MBD3 IF NO ODD BLOCK
RJM SDB SHIFT ODD DATA BLOCK
MBD3 LDD IN SET NEW IN
SHN 14
LMD IN+1
MBDA ADC -* (DISTANCE DATA IS BEING MOVED)
STD IN+1
SHN -14
STD IN
RJM SIP SET IN POINTER
LJM MBDX RETURN
PKL SPACE 4,20
** PKL - PACK LINE INTO BUFFER BUF.
*
* ENTRY (CA) = CHARACTER ADDRESS.
*
* EXIT (T7) = LENGTH OF LINE IN CM WORDS.
*
* USES T1 - T3, T5, BUF - BUF+50.
PKL SUBR ENTRY/EXIT
LDN 0 CLEAR WORD COUNT
STD T7
LDD CA FORM CHARACTER LWA
ADC KBUFL/10D*10D ROUND BUFFER TO CM WORD BOUNDARY
STM PKLA
LDN ZERL
CRM CFCB,ON CLEAR INSERT *8* AND *9*
LDC BUF SET BYTE ADDRESS
STD T1
ADN KBUFL/10D*5D FORM LWA OF BUFFER
STM PKLB
PKL1 LDN 5 SET BYTE COUNT
STD T2
PKL2 LDI CA UPPER CHARACTER
SHN 6
STI T1
AOD CA
LDI CA LOWER CHARACTER
LPN 77
RAI T1
AOD CA ADVANCE CHARACTER ADDRESS
AOD T1 ADVANCE BYTE ADDRESS
SOD T2 DECREMENT BYTE COUNT
NJN PKL2 IF NOT FULL WORD LOOP
AOD T7 ADVANCE CM WORD COUNT
LDD CA CHECK FOR END OF BUFFER
LMC *
PKLA EQU *-1 (LWA OF CHARACTER BUFFER)
NJN PKL1 IF NOT END OF BUFFER
* DELETE TRAILING BLANK BYTES.
LDN 5
PKL3 STD T2 SET BYTE COUNTER
PKL4 SOD T1 DECREMENT BYTE ADDRESS
LMC BUF
ZJN PKL7 IF AT BEGINNING OF BUFFER
LDI T1 CHECK FOR BLANK BYTES
LMC 2R
NJN PKL5 IF NOT BLANK BYTE
STI T1 CLEAR BYTE
SOD T2 DECREMENT BYTE COUNTER
PJN PKL4 IF MORE BYTES IN WORD
SOD T7 DECREMENT CM WORD COUNT
LDN 4 RESET BYTE COUNTER
UJN PKL3 CHECK NEXT BYTE
PKL5 LPN 77
NJN PKL6 IF EVEN NUMBER OF BLANKS
LDI T1 CLEAR ODD-NUMBERED BLANK
SCN 77
STI T1
* CHECK FOR END OF LINE.
PKL6 AOD T1
LMM PKLB
NJN PKL7 IF TRAILING BLANKS ZEROED
AOD T7 INCREMENT CM WORD COUNT
LDN ZERL WRITE END OF LINE
CRM *,ON
PKLB EQU *-1 (LWA OF BUFFER BUF)
PKL7 LJM PKLX RETURN
PRT SPACE 4,20
** PRT - PROCESS TAB.
*
* USES T1, KI.
PRT LDM KBUF+1
LMN 1R.
ZJN PRT2 IF 2ND CHARACTER = *.*
LDD SF
ZJN PRT1 IF NO SCAN NOT REQUESTED RETURN
AOD SI SET NEXT SCAN
LDM TSCN-1,SI
STD SC
NJN PRT1 IF NOT END OF TABLE RETURN
STD SI RESET SCAN INDEX
PRT1 JMP KBIX RETURN
* PROCESS CHARACTER TAB.
PRT2 LDN 1R PRESET * *
STD T1
LDM KBUF CHECK FIRST CHARACTER
LMN 1RD
ZJN PRT3 IF *D*
LMN 1RE&1RD
ZJN PRT3 IF *E*
LMN 1RF&1RE
ZJN PRT5 IF *F*
LMN 1RA&1RF
ZJN PRT3 IF *A*
LMN 1RN&1RA
ZJN PRT4 IF *N*
LMN 1RL&1RN
NJN PRT6 IF NOT *L*
PRT3 STM KBSA
PRT4 LDM DBUF,KI SET TAB CHARACTER
LPN 77
PRT5 STD T1 SET TAB CHARACTER
PRT6 LDD T1 STORE TAB CHARACTER
STM KBUF,KI
AOD KI CHECK FOR END OF BUFFER
ADC -KBUFL
PJN PRT7 IF BUFFER FULL
LDM DBUF,KI CHECK FOR TAB COLUMN
SHN 7
MJN PRT8 IF TAB COLUMN
LDD KI CHECK FOR LAST CHARACTER OF ORIGINAL LINE
SBN 2
LMD LC
ZJN PRT8 IF AT LAST COLUMN
LJM PRT2 LOOP UNTIL TAB COLUMN REACHED
* BKSP OVER END OF BUFFER.
PRT7 SOD KI CLEAR ENTRY
LDN 1R
STM KBUF,KI
PRT8 JMP KBIX RETURN
RDL SPACE 4,20
** RDL - READ LINE FROM BUFFER.
*
* ENTRY (CA) = CHARACTER ADDRESS.
*
* EXIT (T4) = LAST CHARACTER ADDRESS.
* (LC) = CHARACTER COUNT OF LINE.
*
* USES T1 - T3, CM - CM+4.
RDL SUBR ENTRY/EXIT
LDD IF
NJN RDL1 IF INSERT SET
LJM ERR INCORRECT ENTRY
RDL1 LDD IP+1 CHECK INSERT
LMD IN+1
NJN RDL2 IF IN RANGE
LDD IP
LMD IN
NJN RDL2 IF IN RANGE
LDC =C*OUT OF RANGE.*
LJM ERR1
* READ LINE FROM CM BUFFER.
RDL2 LDN 19D READ LINE FROM BUFFER
STD T1
LDD IP
SHN 6
ADD RA
SHN 6
ADD IP+1
CRM BUFR,T1
LDC BUFR SET BUFFER ADDRESS
STD T1
LDD CA SET CHARACTER ADDRESS
STD T4
LDI T1
ADM 1,T1
ADM 2,T1
ADM 3,T1
ADM 4,T1
NJN RDL3 IF NOT NULL BUFFER
LDC 2R
STI T1
* UNPACK LINE INTO BUFFER.
RDL3 LDI T1
NJN RDL4 IF NON-ZERO BYTE
LDD T1
ADC -BUFR
* CHECK FOR MULTIPLE OF 5.
ADN 1 COMPENSATE FOR 0
RDL3.1 SBN 5
ZJN RDL5 IF END OF LINE
PJN RDL3.1 IF NOT COMPLETE
RDL4 LDI T1 UNPACK CHARACTER
SHN -6
STI T4 UPPER CHARACTER
AOD T4
LDI T1 UNPACK LOWER CHARACTER
LPN 77
STI T4
AOD T1
AOD T4 ADVANCE CHARACTER COUNT
SBD CA
ADC -KBUFL CHECK FOR END OF BUFFER
MJN RDL3 IF BUFFER NOT FULL - LOOP
* COPY LINE TO DUP BUFFER.
RDL5 SOD T4 BACK UP IN BUFFER
LDI T4
ZJN RDL5 IF *00* CHARACTER
AOD T4 FIRST *00* CHARACTER ADDRESS
LDC DBUF+2
STD T2
LDD CA SET CHARACTER ADDRESS
STD T1
RDL6 LDI T2 REPLACE DUP CHARACTER
SCN 77
LMI T1
STI T2
AOD T2
AOD T1 ADVANCE CHARACTER
LMD T4
NJN RDL6 IF NOT END OF LINE LOOP
LDD T2 SET DUP BUFFER LENGTH
ADC -DBUF
STM DKLB
* CLEAR TO END OF BUFFER.
RDL7 LDI T2 BLANK FILL TO END OF BUFFERS
SCN 77
ADN 1R
STI T2
LDN 1R KEYBOARD BUFFER
STI T1
AOD T2
AOD T1
SBD CA
ADC -KBUFL CHECK FOR END OF BUFFER
MJN RDL7 IF NOT END OF BUFFER - LOOP
LDD T4 SET CHARACTER COUNT
SBD CA
STD LC
LJM RDLX RETURN
SDB SPACE 4,10
** SDB - SHIFT DATA BLOCK IN CENTRAL MEMORY.
*
* ENTRY (A) = NUMBER OF CM WORDS TO BE SHIFTED.
* (T3) = COUNT OF DATA BLOCKS SHIFTED.
* (T4 - T5) = FWA OF DATA TO BE SHIFTED.
*
* USES T7, BUFM - BUFM+240.
SDB SUBR ENTRY/EXIT
STD T7 SET SHIFT COUNT
LDD T4 SET CM SHIFT ADDRESS
SHN 6
ADD RA
SHN 1 ADD COUNT OF SHIFTED BLOCKS
ADD T3
SHN 5
ADD T5
CRM BUFM,T7
SBD T7 REPLACE BLOCK AT LOWER CM ADDRESS
SDBA ADC -* (DISTANCE DATA IS BEING MOVED)
CWM BUFM,T7
UJN SDBX RETURN
SDS SPACE 4,20
** SDS - SET DISPLAY.
*
* ENTRY (A) = ADDRESS OF ADDRESS POINTER.
* (DL) = LENGTH OF DISPLAY.
*
* EXIT (OT - OT+1) = FIRST LINE ADDRESS.
*
* USES T1 - T3.
*
* CALLS SFL.
SDS2 LDD IN CHECK END OF DISPLAY
SBD OT
SHN 14
ADD IN+1
SBD OT+1
SBD DL
ZJN SDSX IF LAST LINE ON SCREEN
LDD OT ADVANCE ONE LINE
STD T2
LDD OT+1
STD T3
LDN 1
RJM SFL SEARCH FOR LINE
LDD T2
STD OT
LDD T3
STD OT+1
SDS SUBR ENTRY/EXIT
STD T1 SAVE INDEX
LDI T1
SBD OT
SHN 14
ADM 1,T1
SBD OT+1
MJN SDS1 IF LINE .LT. FIRST LINE
SBD DL CHECK END OF SCREEN
ZJN SDS2 IF AT END OF DISPLAY
MJN SDSX IF LINE ON DISPLAY
SDS1 LDI T1 SET DISPLAY ADDRESS
STD OT
LDM 1,T1
STD OT+1
UJN SDSX RETURN
SFL SPACE 4,20
** SFL - SEARCH FOR LINE.
*
* ENTRY (A) = NUMBER OF LINES TO ADVANCE/DECREMENT.
* (T2 - T3) = CURRENT ADDRESS.
*
* EXIT (T2 - T3) = LINE ADDRESS.
*
* USES T1 - T3, CM - CM+4.
* SEARCH BACKWARDS FOR LINE.
SFL2 LDD T2 CHECK FOR START OF BUFFER
LMD FT
SHN 14
LMD T3
LMD FT+1
ZJN SFLX IF AT START OF BUFFER
SFL3 LDD T2 READ PREVIOUS WORD
SHN 6
ADD RA
SHN 6
ADD T3
SBN 2
CRD CM
SOD T3 DECREMENT ADDRESS
PJN SFL4 IF NO CARRY
AOD T3
SOD T2
SFL4 LDD CM+4
NJN SFL3 IF NOT END OF PREVOIUS LINE LOOP
AOD T1 ADVANCE LINE NUMBER
ADC 770000
NJN SFL2 IF NOT COMPLETE
SFL SUBR ENTRY/EXIT
STD T1 SAVE LINE NUMBER
MJN SFL2 IF SEARCH BACKWARDS
* SEARCH FORWARD FOR LINE.
SFL1 LDD T2
LMD IN
SHN 14
LMD T3
LMD IN+1
ZJN SFLX IF ADDRESS = IN
LDD T2 READ WORD
SHN 6
ADD RA
SHN 6
ADD T3
CRD CM
AOD T3 ADVANCE ADDRESS
SHN -14
RAD T2
LDD CM+4
NJN SFL1 IF NOT END OF LINE LOOP
SOD T1 DECREMENT LINE COUNT
NJN SFL1 IF ADVANCEMENT/DECREMENT NOT COMPLETE LOOP
UJN SFLX RETURN
SFN SPACE 4,20
** SFN - SET FILE NAME.
*
* ENTRY (CA) = CHARACTER ADDRESS.
* (SFSA) = NONZERO, TO CHECK RANDOM ADDRESS.
*
* EXIT (CA) = UPDATED.
*
* USES CM, AB+4.
*
* CALLS ASN, SFS.
SFN SUBR ENTRY/EXIT
LDD CA CHECK FOR END OF KEYBOARD BUFFER
ADC -KBUF
LMD KI
ZJN SFN2 IF NO FILE NAME
LDD CA ASSEMBLE NAME
RJM ASN
LMN 1R.
ZJN SFN1 IF *.*
LJM ERR FORMAT ERROR
SFN1 LDD T1 UPDATE CHARACTER INDEX
STD CA
LDD AB CHECK ASSEMBLY
ZJN SFN2 IF NO FILE NAME ASSEMBLED RETURN
LDN 1 SET STATUS
STD AB+4
RJM SFS
SFN2 LDN 0 CLEAR CONSOLE MESSAGE
STD CM
LDD CP
ADN MS1W
CWD CM
ADN MS2W-MS1W
CWD CM
UJN SFNX RETURN
SFS SPACE 4,20
** SFS - SET FILE STATUS.
*
* ENTRY (AB - AB+4) = FILE NAME.
*
* EXIT (SFSA) = NONZERO, TO CHECK RANDOM ADDRESS.
*
* USES T1, T2, CM - CM+4.
SFS SUBR ENTRY/EXIT
LDN 0
STM CRSB CLEAR WRITE LOCKOUT
LDN 1
STM CIOA INITIALIZE TO NON TERMINAL TYPE
LDD CP READ FIELD LENGTH STATUS WORD
ADN FLSW
CRD CM
LDD CM SET END OF NFL
SHN 6
ADN 1
STD T1
LDC FNTN START OF FNT
STD T2
SFS1 LDN LENF ADVANCE FNT ADDRESS
RAD T2
SBD T1
PJP SFS2 IF END OF FILES
NFA T2,R READ FNT ENTRY
CRD CM
LDD CM
ZJN SFS1 IF BLANK ENTRY
LMD AB COMPARE FILE NAMES
NJN SFS1 IF NO COMPARE ON BYTE 0
LDD CM+1
LMD AB+1
NJN SFS1 IF NO COMPARE ON BYTE 1
LDD CM+2
LMD AB+2
NJN SFS1 IF NO COMPARE ON BYTE 2
LDD CM+3
LMD AB+3
SCN 77
NJN SFS1 IF NO COMPARE ON BYTE 3
LDD CM+3
LPN 1
STM CRSB SET WRITE LOCKOUT STATUS
NFA T2,R READ FST INFORMATION
ADN FSTL READ FST ENTRY
CRD CM
LDD CM GET EQUIPMENT TYPE
SBK TTEQ CHECK FOR TERMINAL TYPE PSEUDO EQUIPMENT
STM CIOA SET TO 0 IF TERMINAL TYPE
LDD CM+4 SET LAST BUFFER STATUS
STD AB+4
SFS2 LDD RA STORE FILE NAME
SHN 6
ADN FET
CWD AB
ADN 1 SET RANDOM ACCESS BIT
CRD CM
LDD CM+1
LPC 3777
LMC 4000
STD CM+1
STM SFSA SET RANDOM ADDRESS FLAG
LDD RA
SHN 6
ADN FET+1
CWD CM
LJM SFSX RETURN
SFSA CON 0 RANDOM ADDRESS FLAG
SIL SPACE 4,20
** SIL - SET INSERT LINE.
*
* ENTRY (A) = INCREMENT FROM CURRENT POSITION.
*
* USES T1, T2, T3.
*
* CALLS SDS, SFL.
SIL SUBR ENTRY/EXIT
ZJN SIL1 IF NO CHANGE
ADN 1
STD T1
LDD IP SEARCH FOR INSERT
STD T2
LDD IP+1
STD T3
LDD T1 SEARCH FOR LINE
SBN 1
RJM SFL
LDD T2 SET LINE ADDRESS
STD IP
LDD T3
STD IP+1
SIL1 LDN 1 SET INSERT FLAG
STD DR
STD IF
LDN IP SET DISPLAY
RJM SDS
UJN SILX RETURN
SIP SPACE 4,15
** SIP - SET IN POINTER.
*
* USES CM - CM+4.
SIP SUBR ENTRY/EXIT
LDN ZERL STORE IN
CRD CM
LDD IN
STD CM+3
LDD IN+1
STD CM+4
LDD RA
SHN 6
ADN FET+2
CWD CM
UJN SIPX RETURN
WRW SPACE 4,10
** WRW - WRITE AND REWIND FILE.
*
* CALLS CIO, CRS, SIP.
WRW SUBR ENTRY/EXIT
RJM CRS CHECK RECORD STATUS
RJM SIP STORE IN POINTER
LDN 26 WRITE END OF RECORD
RJM CIO
LDN 52 REWIND
RJM CIO
UJN WRWX RETURN
TABLE SPACE 4,10
** RESIDENT TABLES AND BUFFERS.
TSCN BSSZ 10 SCAN TABLE
SFRA DATA H*SEARCH / *
SFRB BSS 5
TITLE RESIDENT ENTRY PROCESSORS.
O26 SPACE 4
QUAL O26
DIS. SPACE 4,15
*** DIS.
*
* WRITE AND REWIND FILE AND CALL DIS TO CONTROL POINT.
DIS ENTRY
RJM WRW WRITE AND REWIND FILE
DIS1 LDN DSEQ SET EST ORDINAL IN INPUT REGISTER
LMC 4000 FORCE DIRECT CALL
STD IR+4
RJM DDS DROP DISPLAY
RJM WIO WAIT I/O
DIS2 LDC 2RDI SET *DIS* IN INPUT REGISTER
STD IR
LCN 1R6-1RS
SHN 6
RAD IR+1
LDD IA WRITE INPUT REGISTER FOR *DIS*
CWD IR
LJM PPR EXIT TO PP RESIDENT
DROP. SPACE 4,10
*** DROP.
*
* WRITE AND REWIND FILE AND DROP DISPLAY.
DRP ENTRY
RJM WRW WRITE AND REWIND FILE
DRP1 RJM DDS DROP DISPLAY
RJM WIO WAIT I/O
LJM DPP DROP PP
XDIS. SPACE 4,8
*** XDIS.
*
* CALL DIS TO CONTROL POINT ONLY. (NO WRITE)
XDS ENTRY DIS1
XDROP. SPACE 4,8
*** XDROP.
*
* DROP DISPLAY ONLY. (NO WRITE)
XDD ENTRY DRP1
TER SPACE 4,20
* TERMINATE RESIDENT ROUTINES.
QUAL
HERE
DIS HERE
USE END
OVL SPACE 4
** OVERLAY AREA.
OVL EQU *+5
TITLE PRESET PROGRAM.
PRS SPACE 4
** TTAB - TAB TABLE.
* ENTRY = COLUMN NUMBER.
TTAB BSS 0
DATA 11D
DATA 18D
DATA 30D
CON 40D
CON 50D
CON 60D
CON 73D
DATA 80D
DATA 0 END OF TABLE
PRS SPACE 4,20
** PRS - PRESET PROGRAM.
*
* EXIT (NC) = NUMBER OF CP-S.
PRS5 LDN 0 CLEAR KEYBOARD AND TAB BUFFERS
STD T1
PRS6 LDN 1R BLANK FILL BUFFERS
STM DBUF,T1
STM BUFM,T1
STM BUF,T1
AOD T1
LMC KBUFL
NJN PRS6 IF NOT COMPLETLY FILLED
STD T1
LDC TTAB SET TAB TABLE ADDRESS
STD T2
PRS7 LDI T2
ZJN PRS8 IF END OF TABLE
STD T3
LDC 6000 STORE TAB
RAM DBUF+1,T3
AOD T2
UJN PRS7 CHECK FOR END OF TABLE
PRS8 LDN ZERL CLEAR (RA - RA+FET-1)
CRD CM
PRS9 LDD RA
SHN 6
ADD T1
CWD CM
AOD T1
LMN FET
NJN PRS9 IF NOT COMPLETE
LDC SCT
LJM LOV LOAD COMMAND TABLE
USE PRS
PRS LDN 10
STD CM+4
LDN CCTS CLEAR *DIS* FLAG
STD CM+1
MONITOR SJCM
LDD IR+4
SHN 21-13
MJN PRS0 IF DIRECT CALL
CATD VU CHECK ACCESS TO DISPLAY CONSOLE
PRS0 LDN 0
STD CM+1
MONITOR DCPM DROP CPU
* LDN 0
STD T7
LDD FL CHECK FIELD LENGTH
SBN 2
PJN PRS1 IF FIELD LENGTH \ 200
LJM /O26/DIS2 LOAD *DIS*
PRS1 LDC PRO SET ROLLOUT PROCESSOR ADDRESS
STM /COMDDSP/ROFA
LDC CH01 SET X-COORDINATE
STD XC
LDN DSEQ
SFA EST
ADK EQAE
CRD AB
LDD AB+2
ZJN PRS2 IF CC545
MDIN
PRS2 LDM PRSA,T7 MOVE SUBROUTINES TO DRIVER AREA
STM MSFW,T7
AOD T7
LMC PRSAL
NJN PRS2 IF PROGRAM NOT COMPLETLY MOVED
STD CM+1
STD KM CLEAR DIRECT CELLS
STD KI
STM MSD CLEAR MS DRIVER PRESENT
STD IO
LDD CP CLEAR CONTROL POINT MESSAGES
ADN MS1W
CWD CM
ADN MS2W-MS1W
CWD CM
ADN DBAW-MS2W CLEAR K-DISPLAY ADDRESS POINTERS
CWD CM
LDN 10 SET MASK FOR *JCIW*
STD CM+4
LDN SCTS SET *DIS* FLAG IN CPA
STD CM+1
MONITOR SJCM
* LDN 0 CLEAR UPPER CASE
STD UC
STD IF CLEAR INSERT FLAG
STD HF CLEAR HOLD FLAG
STD SF CLEAR SCAN FLAG
STD SI CLEAR SCAN INDEX
STD SC CLEAR SCAN NUMBER
STD T1 CLEAR FET
LDD IR+2 STORE UPPER CASE CHARACTER
SHN 14
RAM KBIC
LDN ZERL CLEAR RA - CBUF
CRD CM
PRS3 LDD RA CLEAR RA - CBUF
SHN 6
ADN FET
ADD T1
CWD CM
AOD T1
LMC CBUF
NJN PRS3 IF NOT COMPLETE
STD FT SET IN = OUT = FIRST
STD IN
STD OT
LDC CBUF
STD FT+1
STD IN+1
STD OT+1
LDD FL SET LIMIT
SHN 6
STD CM+4
STD LM+1
SHN -14
STD CM+3
STD LM
LDD RA STORE BUFFER STATUS
SHN 6
ADN FET
CWM PRSB,TR
CWM PRSC,ON
CWD CM
* COMMON ENTRY.
LDN IPRL CHECK SYSTEM CHARACTER SET
CRD CM
LDD CM+2
LPN 1
NJN PRS4 IF 64 CHARACTER SET
STM KBIG DISABLE ENTRY OF ZERO CHARACTER
LDN PSNI
STM DKSC
LDC *
ORG *-1
LOC DKSB
UJN DKS2 63 CHARACTER SET SYSTEM
LOC *O
STM DKSB
LDD AB+2
ZJN PRS4 IF CC545 SYSTEM CONSOLE
LDC SBNI+63-60
STM DKSD
PRS4 LDD RA
SHN 6
ADN FET
CRD AB
RJM SFS SET FILE STATUS
LDK RDSOS REQUEST DISPLAY
RJM RID
LJM PRS5 COMPLETE
PRSB VFD 42/0LINPUT,18/1
VFD 12/0,12/4000,12/,6/FETL-5,18/CBUF
PRSC VFD 60/CBUF
SPACE 4,10
*CALL COMPCUA
SPACE 4,10
** DUMP INSTRUCTION MODIFICATION BLOCK.
USE LOV
DIMB
OVERFLOW
COMMAND (COMMAND TABLE.)
SCT SPACE 4,10
** SCT - STORE COMMAND TABLE.
*
* USES T1.
SCT ENTRY
ISTORE INT,(LDN TSFM-1) SET TABLE ADDRESS
LDC TCMDL/5
STD T1
LDD RA STORE COMMAND TABLE
SHN 6
ADN SBUF
CWM TCMD,T1
JMP RET RETURN
TSFM SPACE 4,10
** TSFM - TABLE OF SPECIAL FORMATS.
QUAL
TCMD BSS 0
LOC SBUF
TSFM BSS 0
AMG ENTER (A.)
BKS ENTER (BKSP.)
BKP ENTER (BKSPRU.)
BKN ENTER (BKSPRU,)
CEL ENTER (C.)
MVE ENTER (COPY.)
DEL ENTER (D,*)
DMC ENTER (D.)
DLE ENTER (DEL.)
DIS ENTER (DIS.)
DSF ENTER (DFL.)
DSL ENTER (DLL.)
DRP ENTER (DROP.)
DSC ENTER (DS,)
EFL ENTER (ENFL.)
EFN ENTER (ENFL,)
SEF ENTER (ERR.)
MRL ENTER (E.)
SFM ENTER (F.)
FIL ENTER (FILE.)
GTR ENTER (GETR,)
GTR1 ENTER (GETR.)
GET ENTER (GET,)
GET1 ENTER (GET.)
GGO ENTER (GO.)
GTR ENTER (GTR,)
GTR1 ENTER (GTR.)
HOL ENTER (HOLD.)
IGN ENTER (IGNORE.)
MRL ENTER (L.)
LST ENTER (LIST,)
LST1 ENTER (LIST.)
MVE ENTER (MOVE.)
MRG ENTER (M.)
MRN ENTER (N.)
ELN ENTER (P.)
RPC ENTER (RC,)
REC ENTER (RC.)
RPS ENTER (RM)
RPS ENTER (RS)
RDI ENTER (READI.)
RDN ENTER (READN.)
RNS ENTER (READNS.)
RDF ENTER (READ.)
RTN ENTER (RETURN.)
REW ENTER (REWIND.)
RFR ENTER (RFR.)
RIC ENTER (RI.)
RLR ENTER (RLR.)
RNR ENTER (RNR.)
ROC ENTER (RO.)
RPR ENTER (RPR.)
RPN ENTER (R,)
RWR ENTER (RWRITE.)
SCN ENTER (SCAN,)
SML ENTER (S.)
SKP ENTER (SKIPEI.)
TAB ENTER (TAB,)
UCC ENTER (UCC=)
UNL ENTER (UNLOAD.)
WRT ENTER (WRITE.)
WRF ENTER (WRITEF.)
WTW ENTER (WRITEW.)
XDS ENTER (XDIS.)
XDD ENTER (XDROP.)
VFD 60/ END OF TABLE
LOC *O
ECMDO EQU * END OF COMMAND OVERLAY
TCMDL EQU *-TCMD
.1 SET TCMDL/5+SBUF+37
CBUF EQU .1/40*40
COMMAND (FILE COMMANDS.)
BKSP. SPACE 4,10
*** BKSP.CCCCCCC.
*
* BACKSPACE FILE *CCCCCCC*. IF *CCCCCCC* IS MISSING,
* PREVIOUS FILE NAME WILL BE USED.
BKS ENTRY
LDN 42 BACKSPACE
* UJN IOF ISSUE FUNCTION
IOF SPACE 4,10
** IOF - I/O FUNCTION PROCESSOR.
*
* ENTRY (A) - CIO FUNCTION TO ISSUE.
*
* EXIT TO *RET*.
*
* CALLS CIO.
IOF STD T6
RJM SFN SET FILE NAME
LDD T6
RJM CIO
JMP RET RETURN
BKSPRU, SPACE 4,10
*** BKSPRU,X.
*
* BACKSPACE CURRENT FILE *X* PHYSICAL RECORDS.
BKN ENTRY
RJM ADD ASSEMBLE DECIMAL DIGITS
LMN 1R.
ZJN BKN1 IF *.* NO ERROR
LJM ERR FORMAT ERROR
BKN1 LDD AB+4 STORE PRU COUNT
STM TIOD
LDN 46 BACKSPACE PRU
STM TIOD+1
LDN 5 SKIP RECORDS
RJM CIO
JMP RET RETURN
BKSPRU. SPACE 4,10
*** BKSPRU.CCCCCCC.
*
* BACKSPACE FILE *CCCCCCC* ONE PRU. IF *CCCCCCC*
* IS MISSING, PREVIOUS FILE NAME WILL BE USED.
BKP ENTRY
LDN 46 BACKSPACE
JMP IOF RETURN
FILE. SPACE 4,10
*** FILE.CCCCCCC.
*
* SET FILE NAME = *CCCCCCC*.
FIL ENTRY
RJM SFN SET FILE NAME
JMP RET RETURN
RC. SPACE 4,15
*** RC.CCCCCCC.
*
* REWIND, READ, AND REWIND FILE *CCCCCCC*. IF
* *CCCCCCC* IS MISSING, FILE *COMPILE* WILL BE
* READ.
REC ENTRY
LDN 6 SET SCAN INDEX
STM TSCN
LDN 1 SET SCAN FLAG
STD SF
LDN 0 CLEAR SCAN INDEX
STD SI
STM TSCN+1
LDC =C*COMPILE* SET FILE NAME
LJM ROC1
READ. SPACE 4,15
*** READ.CCCCCCC.
*
* REWIND, READ, AND REWIND FILE *CCCCCCC*. IF
* *CCCCCCC* IS MISSING, PREVIOUS FILE NAME WILL
* BE USED.
RDF ENTRY
RJM SFN SET FILE NAME
RDF1 LDN 50 REWIND
RJM CIO
LDN 12 READ
RJM CIO
LDN 1 DUMMY REQUEST
RJM CIO
LDN 50 REWIND
RJM CIO
LJM RNR3
READI. SPACE 4,15
*** READI.CCCCCCC.
*
* SKIP TO END OF INFORMATION, BKSP, BKSP, AND READ
* FILE *CCCCCCC*. IF *CCCCCCC* IS MISSING,
* PREVIOUS FILE NAME WILL BE USED.
RDI ENTRY
RJM SFN SET FILE NAME
LDN 3 SKIP TO END OF INFORMATION
RJM CIO
* ENTRY FROM *RPR*.
RDI1 LDC 20640 SKIP BACKWARDS 2 RECORDS
* ENTRY FROM *RLR*.
RDI2 STM TIOD+1
SHN -14
STM TIOD
LDN 5 SKIP RECORDS
RJM CIO
LJM RNR1
READN. SPACE 4,15
*** READN.CCCCCCC.
*
* READ FILE *CCCCCCC*. NO REWIND. IF *CCCCCCC*
* IS MISSING, PREVIOUS FILE WILL BE READ. STOPS ON
* BUFFER FULL OR EOR.
RDN ENTRY
RJM SFN SET FILE NAME
RJM SIP STORE IN POINTER
LDN 12 READ
RJM CIO
LDN 1 DUMMY
RJM CIO
LJM RNR4
READNS. SPACE 4,15
*** READNS.CCCCCCC.
*
* READ FILE *CCCCCCC* NON-STOP. NO REWIND. IF
* *CCCCCCC* IS MISSING, PREVIOUS FILE WILL BE READ.
* STOPS ON BUFFER FULL OR EOF.
RNS ENTRY
RJM SFN SET FILE NAME
RJM SIP STORE IN POINTER
LDC 250 READ NON-STOP
RJM CIO
LDN 1 DUMMY
RJM CIO
LJM RNR4
RETURN. SPACE 4,10
*** RETURN.CCCCCCC.
*
* RETURN FILE CCCCCC. IF *CCCCCCC* IS MISSING,
* PREVIOUS FILE NAME WILL BE USED.
RTN ENTRY
LDN 0 CLEAR WRITE LOCKOUT STATUS
STM CRSB
LDN 70 RETURN
JMP IOF RETURN
REWIND. SPACE 4,10
*** REWIND.CCCCCCC.
*
* REWIND FILE CCCCCC. IF *CCCCCCC* IS MISSING,
* PREVIOUS FILE NAME WILL BE USED.
REW ENTRY
LDN 50 REWIND
JMP IOF RETURN
RFR. SPACE 4,10
*** RFR.CCCCCCC.
*
* REWIND AND READ FILE *CCCCCCC*. IF *CCCCCCC*
* IS MISSING, PREVIOUS FILE NAME WILL BE USED.
RFR ENTRY
RJM SFN SET FILE NAME
LDN 50 REWIND
RJM CIO
UJN RNR2
RI. SPACE 4,10
*** RI.CCCCCCC.
*
* REWIND, READ, AND REWIND FILE *CCCCCCC*. IF
* *CCCCCCC* IS MISSING, FILE *INPUT* WILL BE
* READ.
RIC ENTRY
LDC =C*INPUT* SET FILE NAME
LJM ROC1
RLR. SPACE 4,10
*** RLR.CCCCCCC.
*
* READ LAST RECORD ON FILE *CCCCCCC*. IF *CCCCCCC*
* IS MISSING, PREVIOUS FILE NAME WILL BE USED.
RLR ENTRY
RJM SFN SET FILE NAME
LDN 3 SKIP TO END OF INFORMATION
RJM CIO
LDC 10640 SKIP BACKWARDS 1 RECORD
LJM RDI2 CAUSE RECORD SKIP
RNR. SPACE 4,20
*** RNR.CCCCCCC.
*
* READ NEXT RECORD ON FILE *CCCCCCC*. IF *CCCCCCC*
* IS MISSING, PREVIOUS FILE NAME WILL BE USED.
RNR ENTRY
RJM SFN SET FILE NAME
* ENTRY FROM *RDI*.
RNR1 LDD RA SET IN = OUT
SHN 6
ADN FET+3
CRD CM
SBN 1
CWD CM
* ENTRY FROM *RFR*.
RNR2 LDN 12 READ
RJM CIO
LDN 1 DUMMY
RJM CIO
* ENTRY FROM *RDF*.
RNR3 LDN 1 SET HOLD FLAG
STD HF
LDN FT SET DISPLAY = LINE 0
RJM SDS
* ENTRY FROM *RDN* AND *RNS*.
RNR4 LDN 0 CLEAR SCAN
STD SC
STD SI
JMP CIF CLEAR INSERT FLAG
RO. SPACE 4,15
*** RO.CCCCCCC.
*
* REWIND, READ, AND REWIND FILE *CCCCCCC*. IF
* *CCCCCCC* IS MISSING, FILE *OUTPUT* WILL BE
* READ.
ROC ENTRY
LDN 4 SET SCAN INDEX
STM TSCN
LDN 10D
STM TSCN+1
LDN 0
STM TSCN+2
STD SI CLEAR SCAN INDEX
LDN 1 SET SCAN FLAG
STD SF
LDC =C*OUTPUT* SET FILE NAME
* ENTRY FROM *RIC* AND *REC*.
ROC1 RJM SDF
LDD CA SET FILE NAME
RJM SFN
LJM RDF1
RPR. SPACE 4,10
*** RPR.CCCCCCC.
*
* READ PREVIOUS RECORD ON FILE *CCCCCCC*. IF
* *CCCCCCC* IS MISSING, PREVIOUS FILE NAME WILL BE
* USED.
RPR ENTRY
RJM SFN SET FILE NAME
LJM RDI1 SKIP BACK 2 RECORDS
SKIPEI. SPACE 4,10
*** SKIPEI.CCCCCCC.
*
* SKIP TO END OF INFORMATION ON FILE . IF
* *CCCCCCC* IS MISSING, PREVIOUS FILE NAME
* WILL BE USED.
SKP ENTRY
LDN 3 SKIPEI
JMP IOF RETURN
UNLOAD. SPACE 4,10
*** UNLOAD.CCCCCCC.
*
* UNLOAD FILE *CCCCCCC*. IF *CCCCCCC* IS MISSING,
* PREVIOUS FILE NAME WILL BE USED.
UNL ENTRY
LDN 0 CLEAR WRITE LOCKOUT STATUS
STM CRSB
LDN 60 UNLOAD
JMP IOF RETURN
WRITE. SPACE 4,15
*** WRITE.CCCCCCC.
*
* WRITE BUFFER TO FILE *CCCCCCC*. IF *CCCCCCC*
* IS MISSING, PREVIOUS FILE NAME WILL BE USED.
WRT ENTRY
RJM SFN SET FILE NAME
RJM CRS CHECK RECORD STATUS
RJM SIP STORE IN POINTER
LDN 26 WRITE END OF RECORD
RJM CIO
LDN 17 SET PSEUDO REQUEST TO REWIND POINTERS
RJM CIO
JMP CIF CLEAR INSERT FLAG
WRITEF. SPACE 4,10
*** WRITEF.CCCCCCC.
*
* WRITE BUFFER TO FILE *CCCCCCC* WITH AN EOF MARK.
* IF *CCCCCCC* IS MISSING, PREVIOUS FILE NAME WILL
* BE USED.
WRF ENTRY
RJM SFN SET FILE NAME
RJM CRS CHECK RECORD STATUS
RJM SIP STORE IN POINTER
LDN 36 WRITE END OF FILE
RJM CIO
LDN 17 SET PSEUDO REQUEST TO REWIND POINTERS
RJM CIO
JMP CIF CLEAR INSERT FLAG
WRITEW. SPACE 4,20
*** WRITEW.CCCCCCC.
*
* WRITE FROM START OF BUFFER UP TO INSERT LINE TO
* FILE *CCCCCCC*. IF *CCCCCCC* IS MISSING,
* PREVIOUS FILE NAME WILL BE USED.
WTW ENTRY
LDD IF
NJN WTW1 IF INSERT
JMP ERR
WTW1 RJM SFN SET FILE NAME
RJM CRS CHECK RECORD STATUS
LDN ZERL SET INSERT ADDRESS
CRD CM
CRD AB
LDD IP
STD CM+3
LDD IP+1
STD CM+4
LDC CBUF
STD AB+4
LDD RA WRITE IN
SHN 6
ADN FET+2
CWD CM
ADN 1
CWD AB SET OUT = FIRST
LDN 26 WRITE END OF RECORD
RJM CIO
LDN 13 DUMMY
RJM CIO
JMP CIF CLEAR INSERT FLAG
SDF SPACE 4,15
** SDF - SET DEFINED FILE.
*
* ENTRY (A) = ADDRESS OF FILE NAME.
* (CA) = CHARACTER ADDRESS.
*
* USES AB - AB+4.
*
* CALLS SFS.
SDF SUBR ENTRY/EXIT
STM SDFA
LDD CA CHECK BUFFER
ADC -KBUF
LMD KI
NJN SDFX IF FILE SPECIFIED
LDD MA
CWM **,ON MOVE FILE NAME
SDFA EQU *-1
SBN 1
CRD AB
LDN 1 SET STATUS
STD AB+4
RJM SFS SET FILE STATUS
UJN SDFX RETURN
COMMAND (LINE ENTRY AND DATA MOVE.)
A. SPACE 4,10
*** A.CCC-CCC
*
* MERGE CHARACTERS *CCC-CCC* WITH FOLLOWING LINE
* EXCEPT TABBED OR SPACED AREA UP TO CARRAGE RETURN.
C. SPACE 4,20
*** C.CCC-CCC
*
* ENTER CHARACTERS *CCC-CCC* IN BUFFER. *CCC-CCC*
* MAY CONSIST OF UP TO 90 CHARACTERS.
CEL ENTRY
LDD CA CHECK FOR COPY NEXT LINE
ADC -KBUF
LMD KI
NJN CEL3 IF NOT COPY NEXT LINE
LDD IF
NJN CEL1 IF INSERT SET
JMP ERR MESSAGE = *FORMAT ERROR.*
CEL1 RJM RDL READ LINE
LDD LC SET KEYBOARD INDEX
ADN 2
STD KI
ADC -KBUFL
MJN CEL2 IF WITHIN BUFFER
LDC KBUFL-1 SET LAST CHARACTER ADDRESS
STD KI
CEL2 JMP KBIX RETURN
* ENTRY FROM *MRL*.
AMG ENTRY
CEL3 RJM ELB ENTER LINE IN BUFFER
JMP RET RETURN
COPY SPACE 4,8
*** COPY.
*
* COPY DATA FROM BLOCK STARTING AT INSERT *8* AND
* ENDING AT INSERT *9* INTO BLOCK AT INSERT MARKER.
*MVE ENTRY
DEL. SPACE 4,15
*** DEL.
*
* DELETE LINES AFTER INSERT MARK.
DLE ENTRY
LDD IF
ZJN DLE1 IF NO INSERT
LDD IP RESET IN
STD IN
LDD IP+1
STD IN+1
UJN DLE2
DLE1 LDD FT CLEAR BUFFER
STD IN
LDD FT+1
STD IN+1
DLE2 RJM SIP STORE IN POINTER
LDN IN
* ENTRY FROM *DEL*.
DLE3 RJM SDS SET DISPLAY
JMP CIF CLEAR INSERT FLAG
D,* SPACE 4,15
*** D,*
*
* DELETE FROM INSERT *8* THROUGH INSERT *9*.
DEL ENTRY
LDD MA MOVE INSERT PARAMETERS
CWM CFCB,ON
LDD MA
CRD T2 (SET T2 - T6)
LDD T2
ADD T3
ZJN DEL1 IF NO INSERT *8*
LDD T2
SBD T4
SHN 14
ADD T3
SBD T5
PJN DEL1 IF *I8* .GT. *I9*
RJM MBD MOVE BUFFER DOWN
LDC CFCB
JMP DLE3 SET DISPLAY
DEL1 JMP ERR FORMAT ERROR
D. SPACE 4,10
*** D.CCC-CCC
*
* MERGE *CCC-CCC* WITH REMAINDER OF CHARACTERS
* CHARACTERS IN DUP BUFFER EXCEPT TABBED AREA OR
* SPACED AREA UP TO CARRIAGE RETURN.
DMC ENTRY AMG
E. SPACE 4,8
*** E.CCC-CCC
*
* MERGE *CCC-CCC* WITH REMAINDER OF CHARACTERS
* CHARACTERS IN DUP BUFFER EXCEPT TABBED OR SPACED
* AREA.
L. SPACE 4,20
*** L.CCC-CCC
*
* MERGE CHARACTERS *CCC-CCC* WITH REMAINDER OF
* FOLLOWING LINE EXCEPT TABBED OR SPACED AREA.
MRL ENTRY
LDD KI COPY REMAINDER OF LINE
MRL1 ADC -KBUFL CHECK FOR END OF BUFFER
PJN MRL2 IF END OF BUFFER
LDM DBUF,KI COPY CHARACTER FROM DUP BUFFER
LPN 77 CLEAR TAB IF SET
STM KBUF,KI ENTER INTO KEYBOARD BUFFER
AOD KI ADVANCE
UJN MRL1 LOOP FOR NEXT CHARACTER
MRL2 LDC KBUF+2 SET CHARACTER ADDRESS
STD CA
LJM CEL3 ENTER LINE AND RETURN
MOVE. SPACE 4,20
*** MOVE.
*
* MOVE DATA FROM BLOCK STARTING AT INSERT *8* AND
* ENDING AT INSERT *9* INTO BLOCK AT INSERT MARKER.
MVE ENTRY
LDD MA SET MOVE PARAMETERS
CWM CFCB,ON
LDD MA
CRD AB
LDD AB
SHN 14
LMD AB+1
ZJN MVE1 IF INSERT *8* NOT SET
LDD AB+2
SHN 14
LMD AB+3
NJN MVE2 IF INSERT *9* SET
MVE1 LDC =C*INSERT 8 OR 9 NOT SET.*
JMP ERR1
MVE2 LDD AB+2 CALCULATE BLOCK SIZE
SBD AB
SHN 14
ADD AB+3
SBD AB+1
STD T7
SHN -14
ZJN MVE4 IF BLOCK .LT. 10000
LDC MVEB *DATA OVERFLOW.*
JMP ERR1
MVE4 RJM CRB CHECK ROOM IN BUFFER
LDD IF
ZJN MVE5 IF INSERT NOT SET
LCN IN-IP
MVE5 ADN IN
STD T3
LDI T3 SET INSERT ADDRESS
STD OT
STD T2
LDM 1,T3
STD OT+1
STD T3
LDD T2 CHECK DATA BLOCK LIMITS
SBD AB
SHN 14
ADD T3
SBD AB+1
PJN MVE6 IF - 8 - BEFORE INSERT
LDD T7 SET INSERT INCREMENT
STD AB+4
MVE6 LDD T2
SBD AB+2
SHN 14
ADD T3
SBD AB+3
PJN MVE7 IF - 9 - BEFORE OR AT INSERT
LDD AB+4
NJN MVE7 IF - 8 - AFTER INSERT
LJM ERR MESSAGE = *FORMAT ERROR.*
MVE7 RJM MBU MOVE BUFFER UP
LDD AB+4 SET FWA
RAD AB+1
STD T5
SHN -14
RAD AB
STD T4
LDD IN+1 SAVE IN ADDRESS
ADD T7
STM MVEA+1
SHN -14
ADD IN
ADC LDCI
STM MVEA
LDD AB+4 SET LWA
RAD AB+3
STD IN+1
SHN -14
RAD AB+2
STD IN
RJM MBD MOVE BUFFER DOWN
MVEA LDC ** RESET IN
STD IN+1
SHN -14
STD IN
LDM KBUF
LMN 1RC
ZJN MVE8 IF *COPY*
LDD MA
CWD AB SET MOVE AND FIRST ADDRESSES
CRD T2
RJM MBD MOVE BUFFER DOWN
MVE8 LDN ZERL CLEAR INSERT *8* AND *9*
CRM CFCB,ON
RJM SIP STORE IN POINTER
JMP RET RETURN
MVEB DATA C*DATA OVERFLOW.*
M. SPACE 4,8
*** M.CCC-CCC
*
* MERGE CHARACTERS *CCC-CCC* WITH
* REMAINDER OF FOLLOWING LINE.
MRG ENTRY MRL
N. SPACE 4,8
*** N.CCC-CCC
*
* MERGE CHARACTERS EXCEPT TABBED AREA.
MRN ENTRY MRL
P. SPACE 4,10
*** P.CCC-CCC
*
* ENTER CHARACTERS *CCC-CCC* IN BUFFER. *CCC-CCC*
* MAY CONSIST OF UP TO 96 CHARACTERS.
ELN ENTRY
RJM ELB ENTER LINE IN BUFFER
LDM DBFB
LMC SRSF
ADD LL
NJN ELN1 IF NOT END OF BUFFER ON RIGHT SCREEN
LDD IF
ADD HF
NJN ELN1 IF NOT ROLLING W/O INSERT POINTER
STM DBFD
AOD KD INHIBIT PRIORITY LINE USAGE
ELN1 LDN 2
LJM RET1 RETURN TO SAVE *P.*
ELB SPACE 4,20
** ELB - ENTER LINE IN BUFFER.
*
* ENTRY (CA) = CHARACTER ADDRESS.
* (IF) = INSERT FLAG.
* (IP - IP+1) = INSERT ADDRESS.
*
* USES T1 - T7, CM - CM+4, BUF - BUF+50.
*
* CALLS MBU.
ELB SUBR ENTRY/EXIT
RJM PKL PACK LINE INTO BUF
LDD IN SET INPUT ADDRESS
STD T2
LDD IN+1
STD T3
RJM CRB CHECK ROOM IN BUFFER
LDD IF
ZJN ELB1 IF NO INSERT
* PROCESS INSERTED LINE.
LDD IP SET INSERT ADDRESS
STD T2
LDD IP+1
STD T3
RJM MBU MOVE BUFFER UP
LDD T7 ADVANCE INSERT ADDRESS
RAD IP+1
SHN -14
RAD IP
* STORE LINE IN CM.
ELB1 LDD T2 STORE LINE
SHN 6
ADD RA
SHN 6
ADD T3
CWM BUF,T7
LDD T7 ADVANCE IN
RAD IN+1
SHN -14
RAD IN
RJM SIP SET IN POINTER
LJM ELBX RETURN
CRB SPACE 4,10
** CRB - CHECK ROOM IN BUFFER.
*
* ENTRY (IN - IN+1) = LWA+1 OF DATA IN BUFFER.
* (LM - LM+1) = LIMIT ADDRESS.
* (T7) = LENGTH OF NEW LINE OR BLOCK.
*
* ERROR TO *ERR1* IF INSUFFICIENT ROOM IN BUFFER.
CRB SUBR ENTRY/EXIT
LDD IN
SBD LM
SHN 14
ADD IN+1
SBD LM+1 COMPLEMENT OF WORDS AVAILABLE
ADD T7 WORDS NEEDED
MJN CRBX IF ROOM FOR DATA
LDC MVEB *DATA OVERFLOW.*
JMP ERR1 ERROR EXIT
MBU SPACE 4,10
** MBU - MOVE BUFFER UP.
*
* ENTRY (T2 - T3) = FWA TO MOVE.
* (IN - IN+1) = LWA+1 TO MOVE.
* (T7) = DISTANCE TO MOVE.
*
* USES T1, T4, BUFM - BUFM+240.
MBU SUBR ENTRY/EXIT
RJM CRB CHECK ROOM IN BUFFER
LDD IN COMPUTE MOVE WORD COUNT
SBD T2
SHN 14
ADD IN+1
SBD T3
SHN 13D SET BLOCK COUNT
STD T1
SHN -13D SET ODD SIZE
STD T4
ZJN MBU2 IF NO ODD BLOCK
* MOVE SHORT BLOCK.
LDD IN READ SHORT BLOCK
SHN 6
ADD RA
SHN 6
ADD IN+1
SBD T4
MBU1 CRM BUFM,T4
SBD T4 STORE ODD BLOCK
ADD T7
CWM BUFM,T4
MBU2 SOD T1
MJN MBUX IF NO FULL BLOCKS
LDN 40
STD T4 SET FULL BLOCK SIZE
* MOVE FULL BLOCKS.
LDD T2 READ BLOCK
SHN 6
ADD RA
SHN 1
ADD T1
SHN 5
ADD T3
UJN MBU1 MOVE BLOCK
COMMAND (DISPLAY, TAB, DUP AND SCAN CONTROL.)
DFL. SPACE 4,10
*** DFL.
*
* START DISPLAY AT FIRST LINE OF FILE AND HOLD.
DSF ENTRY
LDN FT SET DISPLAY ADDRESS
RJM SDS
LDN 1 SET HOLD FLAG
STD HF
JMP RET RETURN
DLL. SPACE 4,15
*** DLL.
*
* DISPLAY LAST PART OF FILE.
DSL ENTRY
LDD IN SET END OF FILE ADDRESS
STD T2
LDD IN+1
STD T3
LCN 18D SEARCH FILE BACKWARDS
RJM SFL
LDD T2 SET DISPLAY
STD OT
LDD T3
STD OT+1
JMP RET RETURN
DS,. SPACE 4,25
*** DS,NNNNNN.
*
* START DISPLAY AT LINE *NNNNNN* OF FILE.
DS, SPACE 4,20
*** DS,
*
* COUNT THE NUMBER OF LINES FROM THE START OF THE
* DISPLAY UP TO THE INSERT MARK OR END OF FILE.
* ENTER RESULT OF COUNT AFTER THE *DS,* IN THE
* KEYBOARD BUFFER.
DSC ENTRY
LDN ZERL SET COUNT TO ZERO
CRD AB
LDN IP SET END OF BUFFER
STD T7
LDD IF CHECK INSERT FLAG
NJN DSC1 IF INSERT SET
LDN IN SET END OF BUFFER
STD T7
DSC1 LDD CA CHECK KEYBOARD ENTRY
ADC -KBUF
LMD KI
ZJN DSC3 IF COUNT TO CURRENT LINE
LDN IN
STD T7
LDD CA
RJM ADD ASSEMBLE DIGITS
STD AB
SBN 1R.
ZJN DSC2 IF *.*
JMP ERR FORMAT ERROR
DSC2 LDD AB+3 CHECK COUNT
ADD AB+4
NJN DSC3 IF NOT FIRST LINE
LJM DSF DISPLAY FIRST LINE
DSC3 LDN 0 CLEAR COUNT
STD T4
STD T5
LDD FT SET START OF BUFFER
STD T2
LDD FT+1
STD T3
LDI T7 STORE BUFFER CHECK
SHN 6
ADD RA
SHN 6
ADM 1,T7
STM DSCA+1
SHN -14
LMC LMCI
STM DSCA
* SEARCH BUFFER AND COUNT LINES.
DSC4 LDD T2 READ BUFFER
SHN 6
ADD RA
SHN 6
ADD T3
CRD CM
DSCA LMC **
ZJN DSC5 IF END OF BUFFER
AOD T3 ADVANCE INDEX
SHN -14
RAD T2
LDD CM+4
NJN DSC4 IF NOT END OF LINE
* PROCESS END OF LINE.
AOD T5 ADVANCE LINE COUNT
SHN -14
RAD T4
LMD AB+3
NJN DSC4 IF NOT END OF COUNT
LDD T5
LMD AB+4
NJN DSC4 IF NOT END OF COUNT
* PROCESS END OF COUNT OR END OF BUFFER.
DSC5 LDN 0 CONVERT COUNT TO DECIMAL
STD T1
DSC6 LDN 0 CLEAR BUFFER
STM BUFM,T1
AOD T1
LMN 6
NJN DSC6 IF BUFFER NOT COMPLETELY CLEARED
STD T1
DSC7 LDD T4
SBM DSCB,T1
SHN 14
ADD T5
SBM DSCC,T1
MJN DSC8 IF NO POWER OF TEN THIS DIGIT
STD T5
SHN -14
STD T4
AOM BUFM,T1 ADVANCE TEN-S COUNT
UJN DSC7 LOOP
DSC8 AOD T1 ADVANCE INDEX
LMN 6
NJN DSC7 IF NOT 6 DIGITS LOOP
STD T1
* ASSEMBLE COUNT.
LDD AB CHECK TYPE OF CALL
ZJN DSC9 IF COUNT TO LINE
LDD T2 SET DISPLAY
STD OT
LDD T3
STD OT+1
JMP RET RETURN
DSC9 LDM BUFM,T1 SUPPRESS LEADING ZEROS
NJN DSC10 IF NOT LEADING ZERO
AOD T1
LMN 5
NJN DSC9 IF WORD NOT COMPLETE LOOP
DSC10 LDM BUFM,T1 CONVERT TO DISPLAY CODE
ADN 1R0
STM KBUF,KI
AOD KI
AOD T1
LMN 6
NJN DSC10 IF NOT END OF NUMBER LOOP
LDN 1R.
STM KBUF,KI
AOD KI
JMP KBIX RETURN
DSCB CON 100000D/1S12
CON 10000D/1S12
CON 1000D/1S12
CON 100D/1S12
CON 10D/1S12
CON 1D/1S12
DSCC CON 100000D-100000D/1S12*1S12
CON 10000D-10000D/1S12*1S12
CON 1000D
CON 100D
CON 10D
CON 1D
TAB SPACE 4,20
*** TAB,X,Y,...,Z.
*
* SET TABS TO COLUMNS X, Y, Z. IF X = 0, CLEAR TABS.
*
* DEFAULT TABS ARE - 11, 18, 30, 40, 50, 60, 73, 80.
TAB ENTRY
LDC 5777 SET TAB BUFFER
STM TABA
LMC 7777
STM TABB
LDD CA
TAB1 RJM ADD ASSEMBLE DIGITS
SBN 1R,
ZJN TAB3 IF *,*
SBN 1R.-1R,
ZJN TAB3 IF *.*
TAB2 JMP ERR FORMAT ERROR
TAB3 LDD AB+4 CHECK NUMBER
NJN TAB5 IF NON-ZERO
STD T2 CLEAR TABS
TAB4 LDM DBUF,T2
LPC 5777
TABA EQU *-1
STM DBUF,T2
AOD T2 CHECK FOR END OF KEYBOARD BUFFER
ADC -KBUFL
MJN TAB4 IF NOT END OF KEYBOARD BUFFER
UJN TAB6 CHECK SEPARATOR
TAB5 ADC -KBUFL CHECK FOR LEGAL COLUMN
PJN TAB2 IF BEYOND LAST CHARACTER ADDRESS
AOD AB+4 SET TAB
LDM DBUF,AB+4
LMC 2000
TABB EQU *-1
STM DBUF,AB+4
TAB6 LDI T1 CHECK SEPARATOR
LMN 1R.
ZJN TAB7 IF *.*
LMN 1R,&1R. CHECK FOR COMMA
NJN TAB2 IF NOT VALID SEPARATOR
AOD T1 ADVANCE
LJM TAB1 LOOP
TAB7 JMP RET RETURN
SCAN, SPACE 4,20
*** SCAN,X,Y,...,Z.
*
* SET WORD SCAN TO X, Y, Z. IF X = 0, CLEAR SCAN.
SCN ENTRY
LDN 0 CLEAR TABLE INDEX
STD T6
STD SF CLEAR SCAN FLAG
STD SC CLEAR SCAN NUMBER
LDD CA
SCN1 RJM ADD ASSEMBLE DIGITS
SBN 1R,
ZJN SCN3 IF *,*
SBN 1R.-1R,
ZJN SCN3 IF *.*
SCN2 LJM ERR FORMAT ERROR
SCN3 LDD AB+4 CHECK NUMBER
NJN SCN5 IF NON-ZERO
STD T2
SCN4 LDN 0 CLEAR ALL SCANS
STM TSCN,T2
AOD T2
LMN 10
NJN SCN4 IF ALL SCANS NOT CLEARED
UJN SCN6 CHECK SEPARATOR
SCN5 STM TSCN,T6 SET SCAN NUMBER
AOD T6 ADVANCE SCAN TABLE
LMN 7
ZJN SCN2 IF TOO MANY SCANS
LDN 1 SET SCAN FLAG
STD SF
SCN6 LDI T1 CHECK SEPARATOR
LMN 1R.
ZJN SCN7 IF *.*
AOD T1 ADVANCE
LJM SCN1 LOOP
SCN7 STM TSCN,T6 SET END OF TABLE
STD SI CLEAR SCAN INDEX
JMP RET RETURN
COMMAND (LINE SEARCH COMMANDS.)
F. SPACE 4,8
*** F.CCC-CCC
*
* SEARCH FOR MATCHING FIELD IN LINE. SEARCH IS END AROUND.
SFM ENTRY SML
S. SPACE 4,8
*** S.CCC-CCC
*
* STARTING WITH THE FIRST LINE DISPLAYED, SEARCH
* FOR A LINE BEGINNING WITH THE CHARACTERS *CCC-CCC*.
*
* SEARCH IS END AROUND.
SML ENTRY
LDD OT+1 SET LINE ADDRESS
STD T7
STD AB+1
LDD OT
STD T6
STD AB
LCN 0 SET NO SEARCH
STD T4
LDN 2 SET CHARACTER INDEX
STD T3
LDD T7 CHECK ADDRESS
LMD IN+1
NJN SML3 IF NOT END OF BUFFER
LDD T6
LMD IN
NJN SML3 IF NOT END OF BUFFER
LJM ERR MESSAGE = *FORMAT ERROR.*
SML1 LDD T7 CHECK ADDRESS
LMD IN+1
NJN SML2 IF NOT END OF BUFFER
LDD T6
LMD IN
NJN SML2 IF NOT END OF BUFFER
LDD FT RESET ADDRESS
STD T6
STD AB
LDD FT+1
STD T7
STD AB+1
SML2 LDD T7
LMD OT+1
NJN SML3 IF NOT BEGINNING OF BUFFER
LDD T6
LMD OT
NJN SML3 IF NOT BEGINNING OF BUFFER
LDC =C*LINE NOT FOUND.*
LJM ERR1 RETURN
SML3 LDD T6 READ WORD
SHN 6
ADD RA
SHN 6
ADD T7
CRD CM
AOD T7 ADVANCE ADDRESS
SHN -14
RAD T6
LDD T4
ZJN SML6 IF SEARCH IN PROGRESS
SML4 SOD T4 COUNT WORD
LDD CM+4
NJN SML5 IF NOT END OF LINE
LDD SC SET SEARCH FLAG
STD T4
LDN 2 RESET CHARACTER ADDRESS
STD T3
LDD T6 SET NEXT LINE ADDRESS
STD AB
LDD T7
STD AB+1
SML5 LJM SML1 LOOP
SML6 LDN CM SET BYTE ADDRESS
STD T2
SML7 LDM KBUF,T3 CHECK UPPER
ZJN SML8 IF NO COMPARISON NEEDED
SHN 6
LMI T2
SCN 77
NJN SML4 IF NO MATCH
SML8 AOD T3 ADVANCE CHARACTER
LMD KI
ZJN SML10 IF COMPARE COMPLETE
LDM KBUF,T3 CHECK LOWER
ZJN SML9 IF NO COMPARISON NEEDED
LMI T2
LPN 77
NJN SML4 IF NO MATCH
SML9 AOD T3 ADVANCE CHARACTER
LMD KI
ZJN SML10 IF COMPARE COMPLETE
AOD T2 ADVANCE BYTE
LMN CM+5
NJN SML7 IF NOT AT END OF WORD LOOP
LDD CM+4
NJN SML5 IF NOT END OF LINE
LJM SML4 PROCESS NEXT LINE
SML10 LDD AB SET LINE ADDRESS
STD OT
LDD AB+1
STD OT+1
LDN 0 CLEAR ERROR FLAG
STD KM
LDN 1 SET HOLD
STD HF
JMP KBIX RETURN
SFR SPACE 4,20
** SFR - SEARCH FOR RECORD.
*
* USES IN, IN+1, KM, AB - AB+4, CM - CM+4, T1 - T1+4.
*
* CALLS CIO, SPN.
SFR ENTRY
LDD RA READ FET
SHN 6
ADN FET
CRD T1
ADN 2 READ IN
CRD AB
ADN 1 SET IN = OUT
CRD CM
SBN 1
CWD CM
ADC CBUF-FET-2 READ RECORD NAME
CRD CM
LDD AB+3 SET IN POINTER
STD IN
LDD AB+4
STD IN+1
LDD T1+4 CHECK STATUS
LPN 30
LMN 30
NJN SFR1 IF NOT EOF
LDC =C*RECORD NOT FOUND.*
STD KM
LJM TIOX RETURN
SFR1 LDD CM
LMC 2R.P
NJN SFR1.1 IF NOT *.PROC,*.
LDD CM+1
LMC 2RRO
NJN SFR1.1 IF NOT *.PROC,*
LDD CM+2
LMC 2RC,
NJN SFR1.1 IF NOT *.PROC,*
RJM SPN SET PROCEDURE NAME AS RECORD NAME
SFR1.1 LDD CM
LMC 7700
NJN SFR2 IF NO 7700 TABLE
LDD RA READ RECORD NAME
SHN 6
ADC CBUF+1
CRD CM
SFR2 LDN CM+4 CLEAR TRAILING SPACE
STD T1
SFR2.1 LDI T1
LPN 77
LMN 1R
NJN SFR2.2 IF NOT A SPACE
LDI T1
SCN 77
STI T1
SFR2.2 SOD T1
LMN CM-1
NJN SFR2.1 IF MORE BYTES
AOD T1 RESTART AT CM
SFR2.3 LDI T1 CHECK THE RECORD NAME
LMM SFRB-CM,T1
ZJN SFR4 IF MATCH
LDD KM CHECK MESSAGE
ZJN SFR3 IF GET ABORTED
LDN 12 READ NEXT RECORD
RJM CIO
LDN 7 SEARCHING FOR RECORD
RJM CIO
SFR3 LJM TIOX RETURN
SFR4 AOD T1
LMN CM+5
NJN SFR2.3 IF NOT THE LAST BYTE
LDD RA CHECK RECORD LENGTH
SHN 6
ADN FET
CRD CM
LDD CM+4
SHN -3
LMN 1
STM CRSA SET/CLEAR RECORD READ NOT TOO LONG FLAG
ZJN SFR5 IF RECORD TOO LONG
LJM PLB CLEAR KEYBOARD
SFR5 LDC ERRE *RECORD TOO LONG*
STD KM
JMP RET RETURN
SPN SPACE 4,10
** SPN - SET PROCEDURE NAME AS RECORD NAME.
*
* *SPN* EXTRACTS THE PROCEDURE NAME FROM THE *.PROC,*
* HEADER AND RETURNS IT AS THE RECORD NAME.
*
* ENTRY (CM - CM+4) = FIRST WORD OF PROC HEADER.
*
* EXIT (CM - CM+4) = RECORD NAME (ZERO FILLED).
*
* USES T1, AB - AB+4, CM - CM+4.
SPN SUBR
* READ *.PROC,* STATEMENT FOR PROCEDURE NAME.
LDD RA
SHN 6
ADC CBUF+1 SECOND HALF OF PROCEDURE NAME
CRD AB
LDD CM+3
STD CM+0
LDD CM+4
STD CM+1
LDD AB+0
STD CM+2
LDD AB+1
STD CM+3
* TERMINATE RECORD NAME AT FIRST DELIMITER.
LDN CM
STD T1
SPN1 LDI T1
SHN -6
ZJN SPN3 IF DELIMITER IN UPPER
SBN 1R9+1
PJN SPN2 IF DELIMITER IN UPPER
LDI T1
LPN 77
ZJN SPN4 IF DELIMITER IN LOWER
SBN 1R9+1
PJN SPN4 IF DELIMITER IN LOWER
AOD T1
LMN CM+4
NJN SPN1 IF DELIMITER SEARCH NOT COMPLETE
SPN2 LDN 0
SPN3 STI T1
AOD T1 ZERO FILL RECORD NAME TO WORD BOUNDARY
LMN CM+4+1
NJN SPN2 IF ZERO FILL NOT COMPLETE
UJP SPNX RETURN
SPN4 LDI T1 CLEAR DELIMITER IN LOWER
SCN 77
UJN SPN3 CLEAR DELIMITER, ZERO FILL RECORD NAME
COMMAND (SEQUENTIAL RECORD SEARCH COMMANDS.)
GET, SPACE 4,20
*** GET,FFFFFFF.CCCCCCC.
*
* GET.CCCCCCC.
*
* SEARCH FILE *FFFFFFF* FOR RECORD *CCCCCCC*. IF
* *FFFFFFF* IS MISSING, PREVIOUS FILE NAME WILL BE
* USED.
GET ENTRY
RJM SFN SET FILE NAME
AOD CA ADVANCE CHARACTER
GET1 ENTRY
RJM ASN ASSEMBLE RECORD NAME
LMN 1R.
ZJN GET3 IF *.*
GET2 JMP ERR FORMAT ERROR
GET3 LDD AB
ZJN GET2 IF NO RECORD NAME
LDN 12 READ
RJM CIO
LDN 7 DUMMY
RJM CIO
LDC SFRA MESSAGE = *SEARCH / *CCCCCCC* *
STD KM
LDD MA SET RECORD NAME
CWD AB
CRM SFRB,ON
LDD RA SET IN = OUT
SHN 6
ADN FET+3
CRD CM
SBN 1
CWD CM
LDN 1 SET HOLD FLAG
STD HF
LDN FT SET DISPLAY = LINE 0
RJM SDS
LDN 0 CLEAR SCAN
STD SC
STD SI
JMP CIF CLEAR INSERT FLAG
COMMAND (RANDOM RECORD SEARCH COMMANDS.)
GETR, SPACE 4,20
*** GETR,FFFFFFF.CCCCCCC.
*
* GETR.CCCCCCC.
*
* READ RANDOM FILE *FFFFFFF* FOR TEXT OR .PROC RECORD
* *CCCCCCC*. IF *FFFFFFF* IS MISSING, PREVIOUS
* FILE NAME WILL BE USED.
GTR, SPACE 4
*** GTR,FFFFFFF.CCCCCCC.
* GTR.CCCCCCC.
* READ RANDOM FILE *FFFFFFF* FOR RECORD *CCCCCCC*.
* IF *FFFFFFF* IS MISSING, PREVIOUS FILE NAME WILL
* BE USED.
GTR ENTRY
RJM SFN SET FILE NAME
AOD CA ADVANCE CHARACTER
GTR1 ENTRY
RJM ASN ASSEMBLE RECORD NAME
LMN 1R.
ZJN GTR3 IF *.*
GTR2 JMP ERR FORMAT ERROR
GTR3 LDD AB
ZJN GTR2 IF NO RECORD NAME
RJM RRI READ RANDOM INDEX
LDN 11 READ RANDOM RECORD
RJM CIO
LDM KBUF+1 SET TEXT RECORD ONLY FLAG
LMN 1RT
STM TIOE
LDC =C*SEARCH.*
* ENTRY FROM *LST*.
GTR4 STD KM SET KEYBOARD MESSAGE
LDD MA SET RECORD NAME
CWD AB
CRM SFRB,ON
LDD RA SET IN = OUT
SHN 6
ADN FET+3
CRD CM
SBN 1
CWD CM
LDN 1 SET HOLD FLAG
STD HF
LDN FT SET DISPLAY = LINE 0
RJM SDS SET DISPLAY
LDN 0 CLEAR SCAN
STD SC
STD SI
JMP CIF CLEAR INSERT FLAG
LIST. SPACE 4,20
*** LIST,FFFFFFF.
*
* LIST.
*
* LIST THE DIRECTORY OF FILE NAME *FFFFFFF*. IF
* *FFFFFFF* IS MISSING, PREVIOUS FILE NAME WILL
* BE USED.
LST ENTRY
RJM SFN SET FILE NAME
AOD CA ADVANCE CHARACTER
LST1 ENTRY
RJM RRI READ RANDOM INDEX
LDN 15 READ RANDOM RECORD
RJM CIO
LDC =C*LIST.*
JMP GTR4 RETURN
* LIST FILE INDEX.
LST2 ENTRY
RJM CIR CHECK INDEX RECORD
LDC 2R
STD AB
STD AB+3
STD AB+4
LST3 LDD RA READ ENTRY
SHN 6
ADD T5
ADD T7
SBN 1
CRD CM READ ENTRY
LDD CM+4
RAD CM+4
LDM LSTA,CM+4 SET RECORD TYPE
STD AB+1
LDM LSTA+1,CM+4
STD AB+2
LDN 0
STD CM+4
LDD CM+3
SCN 77
STD CM+3
ADD CM CHECK FOR ZERO RECORD NAME
ADD CM+1
ADD CM+2
ZJN LST6 IF ZERO RECORD NAME
LST4 LDD RA STORE NAME
SHN 6
ADD T5
ADD T7
CWD CM
SBN 1 STORE RECORD TYPE
CWD AB
LCN 2 DECREMENT INDEX
RAD T7
MJN LST5 IF END OF OPLD
LJM LST3 CONTINUE PROCESSING ENTRIES
* END OF LIST.
LST5 LDC CBUF SET MOVE ADDRESS
STD T3
SHN -14
STD T2
RJM MBD MOVE BUFFER DOWN
LJM PLB RETURN
LST6 LDC 3R(0) SUBSTITUTE FOR ZERO RECORD NAME
STD CM+1
SHN -6
STD CM
UJN LST4 STORE NAME
LSTA BSS 0
DATA 4HTEXT 0
DATA 4HPP 1
DATA 4HCOS 2
DATA 4HREL 3
DATA 4HOVL 4
DATA 4HULIB 5
DATA 4HOPL 6
DATA 4HOPLC 7
DATA 4HOPLD 8
DATA 4HABS 9
DATA 4HPPU 10
DATA 4H 11 (UNDEFINED RECORD TYPE)
DATA 4H 12 (UNDEFINED RECORD TYPE)
DATA 4H 13 (UNDEFINED RECORD TYPE)
DATA 4HCAP 14 CAPSULE
DATA 4H 15 (UNDEFINED RECORD TYPE)
DATA 4HPROC 16 PROCEDURE
CIR SPACE 4,20
** CIR - CHECK INDEX RECORD.
*
* EXIT (CM - CM+4) = 7700 TABLE WORD.
* (AB - AB+4) = 7000 TABLE WORD.
* (T4 - T5) = ADDRESS OF FIRST ENTRY.
* (T7) = INDEX OF LAST ENTRY (2ND WORD).
* EXIT TO TIOX IF RECORD NOT FOUND.
CIR SUBR ENTRY/EXIT
RJM PDS PUSH DOWN STACK
LDD RA READ 7700 TABLE
SHN 6
ADC CBUF
CRD CM
ADD CM+1 READ 7000 TABLE
ADN 1
CRD AB
LDD CM
LMC 7700
ZJN CIR2 IF 7700 TABLE
CIR1 LDC =C*INDEX NOT FOUND.*
STD KM
LJM TIOX RETURN
CIR2 LDD AB
LMC 7000
NJN CIR1 IF NOT 7000 TABLE
LDD AB+3 CHECK LENGTH
NJN CIR1 IF INDEX TOO LONG
STD T4 SET START OF DISPLAY
LDC CBUF+2
ADD CM+1
STD T5
LDD IN CHECK LENGTH
SHN 14
LMD IN+1
SBD T5
SBD AB+4
MJN CIR1 IF INDEX TOO LONG
LDD AB+4 SET INDEX OF LAST ENTRY
SBN 1
STD T7
SBN 1
MJN CIR1 IF INDEX TOO SHORT
LJM CIRX RETURN
RRI SPACE 4,15
** RRI - READ RANDOM INDEX.
*
* ENTRY (A) = CHACRACTER ADDRESS.
*
* EXIT TO *ERR* ON FILE NAME ERROR.
*
* CALLS CIO.
RRI SUBR ENTRY/EXIT
LDD FT SET IN = OUT = FIRST
STD IN
STD OT
LDD FT+1
STD IN+1
STD OT+1
LDN 3 SKIP TO END OF INFORMATION
RJM CIO
LDC 20640 SKIP BACKWARDS 2 RECORDS
STM TIOD+1
SHN -14
STM TIOD
LDN 5 SKIP BACKWARDS
RJM CIO
LDN 12 READ
RJM CIO
UJN RRIX RETURN
RRR SPACE 4,20
** RRR - READ RANDOM RECORD.
*
* ENTRY (CM BUFFER) = RANDOM INDEX.
* (SFRB - SFRB+4) = NAME OF RECORD.
*
* USES T1 - T4, CM - CM+4, AB - AB+4.
*
* CALLS CIO, CIR, PDS.
RRR ENTRY
RJM CIR CHECK INDEX RECORD
* SEARCH BUFFER FOR RECORD.
RRR1 LDD RA READ ENTRY
SHN 6
ADD T5
ADD T7
SBN 1
CRD CM READ ENTRY
LDN CM COMPARE ENTRY
STD T1
RRR2 LDI T1
LMM SFRB-CM,T1
NJN RRR3 IF NO MATCH
AOD T1
LMN CM+4
NJN RRR2 IF NO MATCH LOOP
LDD T7 SET RECORD FOUND FLAG
STD T4
LDD CM+4
LMK TXRT
ZJN RRR5 IF TEXT RECORD
LMK PRRT&TXRT
ZJN RRR5 IF .PROC RECORD
RRR3 LCN 2
RAD T7
PJN RRR1 IF COMPARE NOT COMPLETE
* END OF SEARCH.
LDM TIOE CHECK IF NON-TEXT RECORD ALLOWED
NJN RRR4 IF ONLY TEXT ALLOWED
LDD T4
NJN RRR5 IF RECORD FOUND
RRR4 LDC =C*RECORD NOT FOUND.*
STD KM
LJM TIOX RETURN
* RECORD FOUND.
RRR5 LDD RA READ RANDOM ADDRESS
SHN 6
ADD T5
ADD T4
CRD CM
LDD RA SET RANDOM ADDRESS
SHN 6
ADN FET+6
CWD CM
SBN 3 SET IN = OUT
CRD CM
SBN 1
CWD CM
LDD FT SET IN = FIRST
STD IN
LDD FT+1
STD IN+1
LDN 12 READ RECORD
RJM CIO
LDN 1 DUMMY
RJM CIO
LJM PLB RETURN
COMMAND (REPLACE COMMANDS.)
RC, SPACE 4,20
*** RC,X,C.
*
* REPLACE CHARACTER *X* OF FOLLOWING LINE
* WITH CHARACTER *C*.
RPC ENTRY
RJM ADD ASSEMBLE CHARACTER NUMBER
LMN 1R,
ZJN RPC2 IF *,*
RPC1 JMP ERR FORMAT ERROR
RPC2 SOD AB+4 SAVE CHARACTER NUMBER
MJN RPC1 IF CHARACTER NUMBER ZERO
STD T7
ADC -KBUFL+2
PJN RPC1 IF OUT OF RANGE
AOD T1 SAVE CHARACTER ADDRESS
STD T6
LDD IF
ZJN RPC1 IF NO INSERT
LDC BUFM SET CHARACTER ADDRESS
STD CA
RJM RDL READ NEXT LINE
LDI T6 REPLACE CHARACTER
STM BUFM,T7
RJM RLB REPLACE LINE IN BUFFER
LDN 1 ADVANCE INSERT
RJM SIL
JMP KBIX RETURN
RM SPACE 4,25
*** RM/AAA-AAA/BBB-BBB/
*
* REPLACE CHARACTER STRING *AAA-AAA* FROM THE
* FOLLOWING LINE WITH CHARACTER STRING *BBB-BBB*.
* */* MAY BE ANY CHARACTER. DO NOT ADVANCE INSERT
* MARK.
RS SPACE 4,20
*** RS/AAA-AAA/BBB-BBB/
*
* REPLACE CHARACTER STRING *AAA-AAA* FROM THE
* FOLLOWING LINE WITH CHARACTER STRING *BBB-BBB*.
* */* MAY BE ANY CHARACTER.
RPS ENTRY
RJM CIL CHECK INSERT LINE
LDM KBUF+2 SET DELIMITER
STD T7
LDN 3 SET STARTING COLUMN
STD T2
LDN 0
* ENTRY FROM *RPN*.
RPS1 STD T3
STD T6
* SEARCH FOR MATCHING STRING.
RPS2 LDD T2 RESET INDEX
STD T1
RPS3 LMD KI
ZJN RPS4 IF END OF KEYBOARD STRING
LDM KBUF,T1
LMD T7
ZJN RPS5 IF DELIMITER FOUND
LDD T3
LMD LC
ZJN RPS4 IF END OF ORIGINAL LINE
LDM BUF+2,T3
LMM KBUF,T1
NJN RPS4 IF NO HIT
AOD T3
AOD T1
UJN RPS3 LOOP FOR NEXT CHARACTER
* COPY ONE CHARACTER ON NO HIT.
RPS4 LDD T6 CHECK FOR END OF LINE
LMD LC
ZJN RPS7 IF END OF LINE
LDM BUF+2,T6
STM BUFM+2,T6 COPY CHARACTER
AOD T6
STD T3
UJP RPS2 LOOP
* REPLACE CHARACTER STRING.
RPS5 AOD T1 CHECK FOR END OF KEYBOARD STRING
SBD KI
PJN RPS7 IF END OF STRING
LDM KBUF,T1
LMD T7
ZJN RPS10 IF DELIMITER FOUND
LMD T7
STM BUFM+2,T6 SET CHARACTER
AOD T6
ADC 2-KBUFL
MJN RPS5 IF NOT END OF BUFFER
LDM KBUF+1,T1
LMD T7
ZJN RPS12 IF END OF STRING
RPS6 LDC =C*LINE OVERFLOW.*
UJN RPS9 PROCESS ERROR
* PROCESS STRING NOT IN LINE.
RPS7 LDD KM CHECK MESSAGE
LMC ERRD
NJN RPS8 IF NOT *REPEAT ENTRY.*
LJM RPS15 ADVANCE INSERT
RPS8 LDC =C*NOT IN LINE.*
RPS9 LJM ERR1 PROCESS ERROR
* COPY REMAINDER OF FOLLOWING LINE.
RPS10 LDD T3 CHECK FOR END OF LINE
RPS11 LMD LC
RPS12 ZJN RPS14 IF END OF LINE
LDD T6
ADC 2-KBUFL
ZJN RPS6 IF PAST END OF BUFFER
LDM BUF+2,T3
STM BUFM+2,T6 SET NEXT CHARACTER
AOD T6
AOD T3
UJN RPS11 CONTINUE COPY
* BLANK FILL BUFFER.
RPS13 LDN 1R BLANK FILL *BUFM*
STM BUFM+1,T6
RPS14 AOD T6 ADVANCE INDEX
ADC 1-KBUFL
MJN RPS13 IF NOT END OF BUFFER
* ENTER LINE IN BUFFER.
LDC BUFM+2 SET CHARACTER ADDRESS
STD CA
RJM RLB REPLACE LINE IN BUFFER
LDM KBUF+1 CHECK FOR RM COMMAND
LMN 1RM
ZJN RPS16 IF *RM*
RPS15 LDN 1 ADVANCE INSERT
RJM SIL
RPS16 JMP RET RETURN
R, SPACE 4,20
*** R,X./AAA-AAA/BBB-BBB/
*
* REPLACE CHARACTER STRING AAA-AAA FROM THE
* FOLLOWING LINE STARTING WITH CHARACTER POSITION
* *X* WITH CHARACTER STRING BBB-BBB. */* MAY BE
* ANY CHARACTER.
RPN ENTRY
RJM CIL CHECK INSERT LINE
LDC KBUF+2 ASSEMBLE DIGITS
RJM ASD
STD T5
LDM 1,T1 SET DELIMITER
STD T7
LDD T1 SET STRING ADDRESS
ADC -KBUF+2
STD T2
SOD AB+4
MJN RPN1 IF NULL CHARACTER POSITION
ZJN RPN4 IF FIRST CHARACTER POSITION
ADC 1-KBUFL
MJN RPN2 IF POSITION WITHIN BUFFER
RPN1 JMP ERR FORMAT ERROR
RPN2 LDD AB+4 CHECK CHARACTER POSITION
SBD LC
MJN RPN3 IF WITHIN INSERT LINE
LJM RPS7 PROCESS AS *NOT IN LINE.*
RPN3 LDM BUF+2,T5 COPY LINE TO START OF SCAN
STM BUFM+2,T5
AOD T5 ADVANCE INDEX
LMD AB+4
NJN RPN3 IF NOT END OF COPY
LDD AB+4
RPN4 LJM RPS1 PROCESS STRING REPLACEMENT
ASD SPACE 4,10
** ASD - ASSEMBLE DIGITS.
*
* ENTRY (A) = CHARACTER ADDRESS.
*
* EXIT (A) = 0.
* (AB - AB+4) = RIGHT JUSTIFIED ASSEMBLY.
*
* CALLS ADD.
ASD SUBR ENTRY/EXIT
RJM ADD ASSEMBLE DECIMAL DIGITS
LMN 1R.
ZJN ASDX IF *.* RETURN
JMP ERR FORMAT ERROR
CIL SPACE 4,10
** CIL - CHECK INSERT LINE.
*
* ENTRY (IF) = INSERT FLAG.
*
* EXIT (BUF+2) = INSERT LINE.
*
* USES CA.
*
* CALLS RDL.
CIL1 LDC BUF+2 SET BUFFER ADDRESS
STD CA
RJM RDL READ INSERT LINE
CIL SUBR ENTRY/EXIT
LDD IF
NJN CIL1 IF INSERT FLAG SET
JMP ERR FORMAT ERROR
MBU SPACE 4,10
** MBU - MOVE BUFFER UP.
*
* ENTRY (T2 - T3) = FWA TO MOVE.
* (IN - IN+1) = LWA+1 TO MOVE.
* (T7) = DISTANCE TO MOVE.
*
* USES T1, T4, BUFM - BUFM+240.
MBU SUBR ENTRY/EXIT
LDD IN COMPUTE MOVE WORD COUNT
SBD T2
SHN 14
ADD IN+1
SBD T3
SHN 13D SET BLOCK COUNT
STD T1
SHN -13D SET ODD SIZE
STD T4
ZJN MBU2 IF NO ODD BLOCK
* MOVE SHORT BLOCK.
LDD IN READ SHORT BLOCK
SHN 6
ADD RA
SHN 6
ADD IN+1
SBD T4
MBU1 CRM BUFM,T4
SBD T4 STORE ODD BLOCK
ADD T7
CWM BUFM,T4
MBU2 SOD T1
MJN MBUX IF NO FULL BLOCKS
LDN 40
STD T4 SET FULL BLOCK SIZE
* MOVE FULL BLOCKS.
LDD T2 READ BLOCK
SHN 6
ADD RA
SHN 1
ADD T1
SHN 5
ADD T3
UJN MBU1 MOVE BLOCK
RLB SPACE 4,20
** RLB - REPLACE LINE IN CM BUFFER.
*
* ENTRY (CA) = CHARACTER ADDRESS.
* (IF) = INSERT FLAG.
* (IP - IP+1) = INSERT ADDRESS.
*
* USES T2 - T7, CM - CM+4, BUF - BUF+50.
*
* CALLS MBD, MBU, PKL, SFL, SIP.
RLB SUBR ENTRY/EXIT
RJM PKL PACK LINE INTO BUF
LDD T7 SET BUFFER LENGTH
STD T6
LDD IP SEARCH FOR END OF LINE
STD T2
LDD IP+1
STD T3
LDN 1
RJM SFL SEARCH FOR LINE
LDD T3 CALCULATE CURRENT LENGTH
STD T5
LDD T2
STD T4
SBD IP
SHN 14
ADD T3
SBD IP+1
SBD T6
MJN RLB1 IF LENGTH INCREASE
ZJN RLB2 IF SAME LENGTH
* MOVE BUFFER DOWN.
LDD IP+1 SET MOVE ADDRESS
ADD T6
STD T3
SHN -14
ADD IP
STD T2
RJM MBD MOVE BUFFER DOWN
UJN RLB2
* MOVE BUFFER UP.
RLB1 LMC 7777 SET WORD COUNT
STD T7
RJM MBU MOVE BUFFER UP
LDD T7 ADVANCE IN
RAD IN+1
SHN -14
RAD IN
LDD T7 ADVANCE DISPLAY LENGTH
RAD DL
* COPY LINE INTO CM BUFFER.
RLB2 LDD IP
SHN 6
ADD RA
SHN 6
ADD IP+1
CWM BUF,T6
RJM SIP SET IN POINTER
LJM RLBX RETURN
COMMAND (REWRITE RECORD IN PLACE.)
RWRITE SPACE 4
*** RWRITE.
*
* REWRITE RECORD ( MASS STORAGE ONLY )
*
*
* NOTES AND CAUTIONS.
*
* 1) NUMBER OF PRU,S MAY NOT CHANGE.
* REWRITE NOT ALLOWED IF CONDITION EXISTS.
*
* 2) AN ** WILL APPEAR TO THE RIGHT OF THE *RS=*
* FIELD WHEN A NO-REWRITE CONDITION EXISTS.
*
* 3) REWRITE TO ANOTHER FILE MAY CAUSE UNPREDICTABLE
* RESULTS.
RWR ENTRY
RJM CRS CHECK RECORD STATUS
RJM SIP STORE IN POINTER
LDD IN
SBD FT
SHN 14 CALCULATE PRU COUNT
LMD IN+1
SBD FT+1
SHN -6
LMM TIOG COMPARE WITH RECORD READ
ZJN RWR1 IF IN RANGE
LDC =C*PRU SIZE MODIFIED.*
JMP ERR1
* REWRITE RECORD.
RWR1 LDN 21 REWRITE RECORD
RJM CIO
LDN 17 RESET FET POINTERS
RJM CIO
JMP CIF
COMMAND (MISCELANEOUS COMMANDS.)
ENFL. SPACE 4,20
*** ENFL.
*
* SET FIELD LENGTH TO BUFFER SIZE+1000.
EFL ENTRY
LDD RA READ LIMIT
SHN 6
ADN FET+4
CRD AB
LDD CP GET NFL SIZE
ADN FLSW
CRD CM
LDD IN SET FIELD LENGTH
SHN 6
ADD CM INCLUDE NFL IN VALIDATION
SHN 6
ADD IN+1
ADC 1077
MJN EFL2 IF REQUEST .GE. 131K
SHN -6
SBD CM
STD T1
EFL1 LDD CP CHECK FOR *EXTENDED MEMORY* ASSIGNMENT
ADN ECSW
CRD AB
LDD AB+4
ZJN EFL3 IF *EXTENDED MEMORY* NOT ASSIGNED
LDD T1 ENSURE *FL* .GE. 10000B
ADC -MCMX/100
PJN EFL3 IF *FL* .GE. 10000
EFL2 LDC =C*INCORRECT FL REQUEST.*
UJN EFL7 ISSUE MESSAGE
EFL3 LDD T1 SET FL REQUEST
STM EFLA
EFL4 LDC * REQUEST STORAGE INCREASE
EFLA EQU *-1
EFL5 RJM RSI REQUEST STORAGE
ZJN EFL7 IF STORAGE ASSIGNED
MJN EFL6 IF NOT AVAILABLE
LDC =C*WAITING FOR STORAGE.*
STD KM
RJM KBIA
LDD KE CHECK KEYBOARD ENTRY
LMN 53
NJN EFL4 IF NOT LEFT BLANK
LDD FL
UJN EFL5 CLEAR STORAGE REQUEST TO *1SJ*
EFL6 LDC =C*STORAGE NOT AVAILABLE.*
EFL7 STD KM
LDC KBI8 RESET KEYBOARD
STM KBIA
LDD RA READ LIMIT
SHN 6
ADN FET+4
CRD AB
LDD FL RESET LIMIT
SHN 6
STD LM+1
STD AB+4
SHN -14
STD LM
STD AB+3
LDD RA
SHN 6
ADN FET+4
CWD AB
JMP RET RETURN
ENFL, SPACE 4,15
*** ENFL,X.
*
* SET FIELD LENGTH TO X.
EFN ENTRY
RJM AOD ASSEMBLE OCTAL DIGITS
LDD CP GET NFL SIZE
ADN FLSW
CRD CM
LDD AB+3
SHN 6
ADD CM INCLUDE NFL IN VALIDATION
SHN 6
ADD AB+4
ADN 77
PJN EFN1 IF REQUEST .LT. 131K
LJM EFL2 REQUEST .GE. 131K
EFN1 SHN -6 FL = FL/100
SBD CM
STD T1
SBD FL
NJN EFN3 IF FL .NE. 0
EFN2 LJM ERR MESSAGE = *FORMAT ERROR.*
EFN3 PJN EFN4 IF NEW FL .GT. OLD FL
LDD IN CHECK FOR DATA TRUNCATION
SHN 6
SBD T1
SHN 6
ADD IN+1
PJN EFN2 IF NEW FL TOO SMALL
EFN4 LJM EFL1 ISSUE FL REQUEST
ERR. SPACE 4,10
*** ERR.
*
* SET ERROR FLAG.
SEF ENTRY
LDN ZERL
CRD CM
LDN PPET SET ERROR FLAG = PP ABORT
STD CM+1
MONITOR CEFM
JMP RET RETURN
HOLD. SPACE 4,10
*** HOLD.
*
* DROP DISPLAY AND WAIT FOR OPERATOR ASSIGNMENT.
HOL ENTRY
RJM DDS DROP DISPLAY
LDK RDSOS REQUEST DISPLAY
RJM RID
JMP RET RETURN
IGN SPACE 4,10
*** IGNORE.
*
* IGNORE RECORD TOO LONG CONDITION. THE RECORD MAY NOW BE
* WRITTEN, BUT WILL BE TRUNCATED.
IGN ENTRY
AOM CRSA SET RECORD READ NOT TOO LONG FLAG
JMP RET RETURN
GO. SPACE 4,10
*** GO.
*
* CLEAR PAUSE FLAG.
GGO ENTRY
LDD CP READ SENSE SWITCH WORD
ADN SNSW
CRD CM
LDD CM+3 CLEAR PAUSE BIT
SCN 1
STD CM+3
LDD CP STORE SENSE SWITCH WORD
ADN SNSW
CWD CM
JMP RET RETURN
UCC SPACE 4,15
*** UCC=C
*
* SET UPPER CASE CONTROL CHARACTER TO C.
*
* TO ENTER ANY CHARACTER NOT ON KEYBOARD, HIT UCC AND
* ENTER 2 OCTAL DIGIT DISPLAY CODE BY DEPRESSING AN
* APPROPRIATE KEY.
*
* 0 THRU 7 = 60 THRU 67, QWERTYU = 70 THRU 77, AND S = 53.
*
* EXAMPLE UCC=*. TO ENTER " IN LINE DEPRESS * AND THEN 4.
UCC ENTRY
LDD CA CHECK FOR CLEAR/SET UCC
ADC -KBUF
LMD KI
ZJN UCC1 IF END OF KEYBOARD BUFER
LDI CA
UCC1 STM UCCA SET UPPER CASE CONTROL
LDM KBIC CLEAR/SET UPPER CASE CONTROL
SCN 77
LMC ** UPPER CASE CONTROL CHARACTER
UCCA EQU *-1
STM KBIC
SHN 6
LMD IR+2
SCN 77
LMD IR+2
STD IR+2
JMP RET RETURN
AOD SPACE 4,20
** AOD - ASSEMBLE OCTAL DIGITS.
*
* ENTRY (A) = CHARACTER ADDRESS.
*
* EXIT (A) = SEPARATOR CHARACTER.
* (AB - AB+4) = ASSEMBLED DIGITS RIGHT JUSTIFIED.
* (T1) = UPDATED CHARACTER ADDRESS.
*
* USES T0 - T2.
AOD SUBR ENTRY/EXIT
STD T1 SET CHARACTER AODRESS
LDN ZERL CLEAR ASSEMBLY
CRD AB
AOD1 LDI T1 CHECK CHARACTER
SBN 1R0
MJN AOD2 IF ALPHA
SBN 1R8-1R0
MJN AOD3 IF OCTAL DIGIT
SBN 1R -1R8
ZJN AOD5 IF * *
AOD2 LDI T1 RETURN WITH CHARACTER
UJN AODX
AOD3 ADN 1R8-1R0 NEW DIGIT = CHARACTER
STD T0
LDN AB+4 SET BYTE AODRESS
STD T2
AOD4 LDI T2 BYTE = BYTE * 10B
SHN 3
ADD T0
STI T2
SHN -14 NEW DIGIT = OVERFLOW
STD T0
SOD T2 DECREMENT BYTE ADDRESS
LMN AB-1
NJN AOD4 IF NOT AT END OF WORD LOOP
AOD5 AOD T1 ADVANCE CHARACTER
UJN AOD1 LOOP
COMMON SPACE 4
** COMMON DECKS.
*CALL COMPRSI
TITLE BUFFERS.
BUFFERS SPACE 4
* TERMINATE COMMAND OVERLAYS.
QUAL
HERE
USE END FORCE LITERALS
BUFFERS SPACE 4,10
** BUFFER DEFINITIONS.
BUFM EQU 7774-240 MOVE BUFFER
BUFR EQU 7774-19D*5 READ BUFFER
KBUFL EQU 92D KEYBOARD BUFFER LENGTH
* ENSURE ROOM FOR END OF LINE FOR EACH BUFFER.
BUF EQU BUFM-KBUFL-7 LINE BUFFER
DBUF EQU BUF-KBUFL-7 TAB AND DUP BUFFER
KBUF EQU DBUF-KBUFL-7 KEYBOARD BUFFER
OVL SPACE 4,10
* OVERLAY CONTROL.
*
* AN ADDITIONAL BYTE HAS TO BE ADDED TO OVERLAY LENGTH
* COMPUTATIONS TO ACCOUNT FOR THE FACT THAT THE BYTE AFTER
* THE LAST BYTE TRANSFERRED BY AN *IAM* INSTRUCTION IS ZEROED
* WHEN THE CHANNEL DISCONNECTS.
.L MAX *,.L ADD LAST OVERLAY TO OVERFLOW CHECK
.L SET .L+4-OVL
.L SET .L/5*5+OVL+1
ERRNG KBUF-.L PP MEMORY OVERFLOW
.L SET ECMDO+4-OVL
.L SET .L/5*5+OVL+1
ERRNG DBUF-.L PP MEMORY OVERFLOW
TTL O26 - CONSOLE TEXT EDITOR.
O26 SPACE 4
END O26 CONSOLE TEXT EDITOR