mirror of
https://github.com/PDP-10/stacken.git
synced 2026-03-02 17:45:26 +00:00
1542 lines
35 KiB
Plaintext
1542 lines
35 KiB
Plaintext
TITLE LINED VERSION 13B
|
||
SUBTTL LINE EDITOR FOR DISK FILES LARRY WADE/WJM/PMH/CAM
|
||
|
||
|
||
|
||
;COPYRIGHT (C) 1974,1978,1979 BY
|
||
;DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.
|
||
;
|
||
;
|
||
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED
|
||
;ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE
|
||
;INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER
|
||
;COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY
|
||
;OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY
|
||
;TRANSFERRED.
|
||
;
|
||
;THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE
|
||
;AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
|
||
;CORPORATION.
|
||
;
|
||
;DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS
|
||
;SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL.
|
||
|
||
EDIT==22
|
||
VERSION==XWD 1302,EDIT
|
||
|
||
;COPYRIGHT 1970,1971,1974, DIGITAL EQUIPMENT CORP., MAYNARD, MASS.
|
||
|
||
|
||
|
||
;DEFAULT DEFINITIONS FOR ASSEMBLY SWITCHES
|
||
;THESE YIELD A REENTRANT LINED WITH CCL & TMPCOR UUO CAPABILITY
|
||
|
||
IFNDEF PURE,<PURE==1>
|
||
IFNDEF CCLSW,<CCLSW==1>
|
||
IFNDEF TEMP,<TEMP==1>
|
||
|
||
;FOR ANY OTHER VERSION ASSEMBLE AS FOLLOWS:
|
||
;.R MACRO
|
||
;*LINED_TTY:,DSK:LINED.MAC
|
||
;PURE=0 ((IF NON-REENTRANT LINED WANTED))
|
||
;CCLSW=0 ((IF CCL NOT WANTED))
|
||
;TEMP=0 ((IF TMPCOR UUO NOT AVAILABLE))
|
||
;^Z
|
||
;^Z
|
||
|
||
|
||
|
||
LOC 137
|
||
VERSION
|
||
RELOC 0
|
||
|
||
IFN PURE,<
|
||
TWOSEG
|
||
RELOC 400000
|
||
>
|
||
;
|
||
; GENERAL-
|
||
; LINED IS A DERVIATIVE OF
|
||
; DREDIT (DRUM EDITOR) WHICH WAS WRITTEN BY WILLIAM MEIR OF APPLIED
|
||
; LOGIC CORPORATION AND EXISTS AS PART OF THE DECUS LIBRARY.
|
||
; LINED'S COMMAND STRUCTURE IS SIMILIAR TO DEC'S "EDITOR"
|
||
; BUT WORKS WITH FILES WHICH RESIDE ON THE DISK INSTEAD OF
|
||
; ON DEC TAPE.
|
||
;
|
||
;
|
||
;
|
||
; PURPOSE-
|
||
;
|
||
; THIS MEMO WILL DESCRIBE THE CAPABILITIES AND RESTRICTIONS OF
|
||
; LINED AND OUTLINE THE CHANGES NECESSARY TO MAKE LINED A PART
|
||
; OF DEC'S SOFTWARE.
|
||
;
|
||
; A MAJOR FEATURE OF LINED IS THE ABILITY TO
|
||
; REFERENCE ANY LINE AT ANY TIME, WITHOUT FIRST HAVING TO
|
||
; CLOSE AND THEN REOPEN THE FILE.
|
||
;
|
||
; COMMAND STRUCTURE-
|
||
;
|
||
; IN THE FOLLOWING DESCRIPTION, A POINT (.) OR DOT REFERS TO THE
|
||
; LAST LINE WHICH WAS TYPED, THE LAST LINE DELETED, OR THE LAST
|
||
; LINE INSERTED.
|
||
;
|
||
; 1. TO OPEN AN EXISTING FILE FOR EDITING.
|
||
;
|
||
; S<FILENAME.EXT><CR>
|
||
;
|
||
; 2. TO CREATE A NEW FILE.
|
||
;
|
||
; S<FILENAME.EXT><ALTMODE>
|
||
;
|
||
; 3.TO INSERT TEXT
|
||
;
|
||
; I
|
||
; I N1
|
||
; I N1,N2 INSERT THE TEXT WHICH FOLLOWS AT LINE
|
||
; N1 AND ASSIGN SEQUENCE NUMBERS IN
|
||
; INCREMENTS OF N2 FOR EACH LINE AFTER THE
|
||
; FIRST. IF LINE N1 EXISTS IT WILL BE
|
||
; REPLACED. IF N1 IS NULL A VALUE OF 10 IS
|
||
; ASSUMED. N1 MAY BE SPECIFIED AS A POINT (.).
|
||
; IF N2 IS NULL EITHER A VALUE OF 10
|
||
; IS ASSUMED OR THE VALUE LAST SPECIFIED IN
|
||
; AN INSERT COMMAND IS USED.
|
||
; AN ALTMODE IS TYPED TO RETURN TO LINED
|
||
; COMMAND LEVEL.
|
||
;
|
||
; 4. TO PRINT TEXT.
|
||
;
|
||
; P N1
|
||
; P N1,N2 PRINT LINE N1 OR LINES N1 THROUGH N2
|
||
; N1 MAY BE SPECIFIED AS A POINT (.).
|
||
; N2 MAY ALSO BE SPECIFIED AS A POINT AS
|
||
; LONG AS N1<N2.
|
||
; AN ALTMODE WILL CAUSE THE NEXT LINE
|
||
; TO BE TYPED.
|
||
;
|
||
; 5. TO DELETE TEXT
|
||
;
|
||
; D N1
|
||
; D N1,N2 DELETE LINE N1 OR LINES N1 THROUGH N2
|
||
; N1 MAY BE SPECIFIED AS A POINT (.)
|
||
; UNLESS AN INSERT WAS JUST PERFORMED.
|
||
; N2 MAY ALSO BE SPECIFIED AS A POINT AS
|
||
; LONG AS N1<N2.
|
||
;
|
||
; 6. TO CLOSE A FILE
|
||
;
|
||
; E<CR>
|
||
;
|
||
; RESTRICTIONS-
|
||
;
|
||
; 1. WHEN IN INSERTION MODE, THE ALTMODE RETURNS TO LINED
|
||
; COMMAND LEVEL. IF THE ALTMODE IS ALSO USED TO TERMINATE
|
||
; A LINE OF TEXT TO BE INSERTED, THE LINE OF TEXT IS
|
||
; IGNORED.
|
||
;
|
||
; 2. LINED ASSUMES ALL BLOCKS ON THE DISK FILE HAVE AN
|
||
; INTEGRAL NUMBER OF LINES. TO GUARANTEE THIS THE USER
|
||
; SHOULD USE THE "A" SWITCH (LINE BLOCKING) WITH PIP TO PUT A FILE ON
|
||
; THE DISK.
|
||
;
|
||
; 3. LINED AND TECO ARE INCOMPATIBLE AND THE SAME FILE
|
||
; SHOULD NOT BE EDITED BY BOTH UNLESS SEQUENCE
|
||
; NUMBERS ARE EITHER ADDED OR DELETED.
|
||
;
|
||
; 4. LINE NUMBER 0 IS ILLEGAL.
|
||
;
|
||
;
|
||
; ERROR HANDLING-
|
||
;
|
||
; WHEN AN ERROR IS DETECTED, A MEANINGFUL MESSAGE IS TYPED.
|
||
; IF IT IS AN I/O ERROR, WE EXIT. OTHERWISE WE
|
||
; RETURN TO COMMAND LEVEL.
|
||
;
|
||
; NOTE: THE OLD *ILR* AND *ILS* MESSAGES HAVE BEEN REMOVED.
|
||
; INSTEAD OF THEM LINED WORKS AS FOLLOWS:
|
||
; IF INSERTION AT A GIVEN LINE NUMBER WILL CAUSE
|
||
; REPLACEMENT OF AN EXISTING LINE, THE LINE# IS
|
||
; FOLLOWED BY A SINGLE TIC (').
|
||
; IF THE INSERTION LINE# INCREMENT IS SUCH THAT
|
||
; INSERTION AT A GIVEN LINE WILL CAUSE AN EXISTING
|
||
; LINE TO BE SKIPPED, THE LINE NUMBER IS
|
||
; FOLLOWED BY A DOUBLE TIC ("). SEE EXAMPLE 4.
|
||
; (THIS CHANGE EFFECTIVE AS OF V.010)
|
||
;
|
||
; CONCISE COMMAND LANGUAGE INTERFACE-
|
||
;
|
||
; THE CCL COMMANDS "CREATE" AND "EDIT" WILL BE USED TO ACCESS
|
||
; LINED. THE "CREATE" COMMAND WILL EFFECTIVELY GENERATE THE SEQUENCE
|
||
;
|
||
; R LINED
|
||
; S<FILENAME><ALTMODE>
|
||
;
|
||
; THE "EDIT" COMMAND WILL EFFECTIVELY GENERATE THE SEQUENCE
|
||
;
|
||
; R LINED
|
||
; S<FILENAME><CR>
|
||
;
|
||
; THE CCL CUSP WILL GENERATE A TEMPORARY DISK FILE WITH THE NAME
|
||
;
|
||
; ###EDT.TMP
|
||
;
|
||
; IN ORDER TO PASS THE ABOVE COMMANDS.
|
||
;
|
||
;
|
||
;
|
||
; EXAMPLE-1
|
||
;
|
||
; .R PIP<CR>
|
||
; *DSK:(ASX)_DTA0:FILE.ONE<CR>
|
||
; *^C
|
||
; .R LINED <CR>
|
||
; *SFILE.ONE<CR>
|
||
; *P10,30<CR>
|
||
; 00010 THIS IS THE FIRST LINE
|
||
; 00020 THIS IS THE SECOND LINE
|
||
; 00030 THIS IS THE THIRD LINE
|
||
; *I20<CR>
|
||
; 00020' THIS IS THE NEW LINE
|
||
; *D30<CR>
|
||
; *P10,30<CR>
|
||
; 00010 THIS IS THE FIRST LINE
|
||
; 00020 THIS IS THE NEW LINE
|
||
; *E<CR>
|
||
; *^C
|
||
; .
|
||
;
|
||
; EXAMPLE-2
|
||
;
|
||
; .CREATE PROGRAM
|
||
; *I<CR>
|
||
; 00010 THE PROGRAM IS
|
||
; 00020 INSERTED HERE
|
||
; 00030
|
||
; .
|
||
; .
|
||
; .
|
||
; .
|
||
; 000XX <ALTMODE>
|
||
; *E<CR>
|
||
; *^C
|
||
; .
|
||
;
|
||
;
|
||
; EXAMPLE-3
|
||
; VALID FORMS OF THE INSERT COMMAND
|
||
;
|
||
; I
|
||
; I10
|
||
; I10,2
|
||
; I.
|
||
; I,1
|
||
; I.,1
|
||
;
|
||
;
|
||
; EXAMPLE-4 NEW INDICATION OF REPLACEMENT & SKIPPING
|
||
;
|
||
; *SFOO<ALT>
|
||
; *I10
|
||
; 00010 A
|
||
; 00020 B
|
||
; 00030 C
|
||
; 00040 D
|
||
; 00050 <ALT>
|
||
; *I20,5
|
||
; 00020' BB
|
||
; 00025 XX
|
||
; 00030' CC
|
||
; 00035 <ALT>
|
||
; *I30,20
|
||
; 00030' CCC
|
||
; 00050" EEE
|
||
; 00070 <ALT>
|
||
; *
|
||
;
|
||
; IMPLEMENTATION-
|
||
;
|
||
; EACH LINE OF TEXT IS STORED IN THE WORKING BUFFER WITH A LINE
|
||
; HEADER WHICH HAS TWO ITEMS. IN THE LEFT HALF IS THE SEQUENCE
|
||
; NUMBER IN BINARY AND IN THE RIGHT HALF IS THE NUMBER OF WORDS
|
||
; (INCLUDING THE LINE HEADER) WHICH ARE NEEDED TO STORE THE
|
||
; LINE OF TEXT. THUS TO FIND THE NEXT LINE OF TEXT IT IS JUST
|
||
; NECESSARY TO TAKE THE ADDRESS OF THE CURRENT LINE HEADER AND
|
||
; ADD THE WORD COUNT.
|
||
;
|
||
; SEVERAL POINTER WORDS ARE USED TO KEEP TRACK OF THE LINES IN
|
||
; THE WORKING BUFFER. WRTLST CONTAINS THE SEQUENCE NUMBER OF THE
|
||
; LAST LINE WHICH WAS JUST PASSED THROUGH THE WORKING BUFFER.
|
||
; SEQLST CONTAINS THE HIGHEST SEQUENCE NUMBER OF THE HIGHEST
|
||
; LINE IN THE BUFFER. SN CONTAINS THE SEQUENCE NUMBER OF THE LINE
|
||
; CURRENTLY BEING HANDLED IN A COMMAND.
|
||
;
|
||
; WHEN THE PROGRAM DISCOVERS THAT SN IS GREATER THAN WRTLST IT
|
||
; KNOWS THAT THE LINE BEING SOUGHT HAS ALREADY PASSED THROUGH
|
||
; THE WORKING BUFFER AND IS NOT DIRECTLY ACCESSIBLE SINCE THERE
|
||
; IS NO WAY TO READ A FILE BACKWARDS. CONSEQUENTLY, IT IS NEC-
|
||
; ESSARY TO CLOSE THE FILE AND THEN REOPEN IT. THIS PROCESS OF
|
||
; GOING AROUND FROM WHERE WE ARE, TO THE END OF THE FILE, TO
|
||
; THE BEGINNING OF THE FILE AND FINALLY TO THE LINE BEING SOUGHT
|
||
; IS DONE.
|
||
;
|
||
; TO CLOSE THE FILE IT IS NECESSARY TO PASS ALL REMAINING TEXT
|
||
; THROUGH THE WORKING BUFFER AND TO THE TEMPORARY OUTPUT FILE
|
||
; (CALLED ###LIN.TMP). THIS IS DONE BY GIVING THE SUBROUTINE
|
||
; FNDLIN (FIND A LINE WHOSE SEQUENCE NUMBER IS IN SN) THE
|
||
; HIGHEST POSSIBLE SEQUENCE NUMBER, 99999. NEXT THE ORIGINAL
|
||
; FILE IS RENAMED TO ###TMP.TMP, THE TEMPORARY OUTPUT FILE
|
||
; IS RENAMED TO THE ORIGINAL FILE NAME, AND THE ###TMP.TMP FILE
|
||
; IS DELETED. THEN WE GIVE FNDLIN THE SEQUENCE NUMBER CURRENTLY
|
||
; BEING LOOKED FOR AND THE PROGRAM CONTINUES WITH THE ORIGINAL
|
||
; COMMAND.
|
||
; AC DEFINITIONS
|
||
|
||
FF=0 ; FLAGS
|
||
CH=1 ; ASCII CHARACTER
|
||
SN=2 ; SEQUENCE NUMBER
|
||
P=3 ; PDL POINTER
|
||
TAC=4 ; TEMPORARY AC'S
|
||
TAC1=5 ;
|
||
LP=6 ; ADDR OF CURRENT LINE
|
||
N1=7 ; ARGS FOR COMMANDS
|
||
N2=10 ;
|
||
NUM=11 ; FOR NUMBER CONVERSION
|
||
AC1=12 ; SCRATCH
|
||
AC2=13 ; "
|
||
AC3=14 ; "
|
||
AC4=15 ; "
|
||
OC=16 ;
|
||
PS=17 ;PREVIOUS SEQUENCE NUMBER
|
||
|
||
; MORE DEFINITIONS
|
||
ALTMOD==33 ;DEFINITION OF AN ALTMODE
|
||
ETTY==0
|
||
EICHL==1 ;EDIT DEVICE CHANNELS
|
||
EOCHL==2
|
||
EMDE==10 ;EDIT DEVICE MODE
|
||
CCLC==3 ;CCL DSK CHANNEL
|
||
PJOB==30 ;CALLI ARGUMENTS
|
||
TMPCOR==44
|
||
RESET==0
|
||
EXIT==12
|
||
|
||
;RH FLAGS (SET AND CLEARED DURING CMD EXECUTION)
|
||
NARG==1 ;1=TWO ARGS SEEN
|
||
ER==2 ;TRYING AGAIN ON ERROR
|
||
TFLG==10 ;AN EXISTING LINE HAS BEEN REPLACED ONCE ALREADY
|
||
DARG==20 ;USED IN DCOM
|
||
FILFLG==40 ;
|
||
IFLG==100 ;INSERTION CMD IN PROGRESS
|
||
ILRFLG==200 ;INSERT LINE FOUND
|
||
ILSFLG==400 ;INSERT SKIPS EXISTING LINE
|
||
EOL==1000 ;END-OF-LINE SEEN
|
||
|
||
;LH FLAGS (CLEARED ONLY BY E COMMAND)
|
||
FILACT==1 ;DENOTES ACTIVE FILE
|
||
NFILE==2 ;0=NEW FILE ONLY
|
||
ROUND==4 ;=1 IF IN THE PROCESS OF GOING AROUND TO THE
|
||
;BEGINNING OF THE FILE
|
||
NDFIL==10 ;END OF INPUT FILE OR NO INPUT FILE IF =0
|
||
CCLF==100 ;=1 IF ENTERED VIA CCL
|
||
; INITIALIZATION
|
||
|
||
START:
|
||
IFN CCLSW,<
|
||
TLZA FF,CCLF
|
||
TLO FF,CCLF
|
||
>
|
||
CSETUP:
|
||
IFN PURE,<
|
||
MOVSI TAC,ENDP ;IF REENTRANT, SET FIRST
|
||
HLLM TAC,.JBSA## ;FREE LOC. IN LOW SEG.
|
||
>
|
||
CALLI RESET ;INITIALIZE
|
||
MOVE TAC,.JBFF## ;ASSIGN CORE FOR DATA
|
||
ADDI TAC,2000
|
||
CALLI TAC,11
|
||
JRST NOCORE
|
||
SETZM DATA ;CLR DATA SEGMENT
|
||
MOVE TAC,[XWD DATA,DATA+1]
|
||
BLT TAC,ENDP-1
|
||
MOVE TAC,[JRST ERROR2] ;INIT DATA SEG. CONSTANTS
|
||
MOVEM TAC,ERROR1
|
||
MOVE TAC,[MOVEI TAC,DOFIL1]
|
||
MOVEM TAC,FILL1
|
||
MOVE TAC,[HRRZI TAC,DOFIL2]
|
||
MOVEM TAC,FILL2
|
||
MOVE TAC,[MOVE AC1,(AC2)]
|
||
MOVEM TAC,MOV1
|
||
MOVE TAC,[MOVEM AC1,(AC2)]
|
||
MOVEM TAC,MOV2
|
||
MOVE TAC,[MOVEM AC3,(AC2)]
|
||
MOVEM TAC,M2
|
||
MOVE TAC,[MOVE AC4,(AC2)]
|
||
MOVEM TAC,M1
|
||
MOVE TAC,[HRLI AC1,(LP)]
|
||
MOVEM TAC,DCM1
|
||
MOVE TAC,[SKIPE AC1,(TAC)]
|
||
MOVEM TAC,LNCNT1
|
||
MOVE TAC,[BLT AC1,(TAC)]
|
||
MOVEM TAC,OUTLN1
|
||
IFN CCLSW,<
|
||
MOVE TAC,[JRST CCLHR2]
|
||
MOVEM TAC,CCLHR3
|
||
IFN TEMP,<
|
||
MOVSI TAC,SIXBIT/ EDT/
|
||
MOVEM TAC,TMPFIL
|
||
MOVSI TAC,777600 ;XWD -200,0
|
||
MOVEM TAC,TMPFIL+1
|
||
>>
|
||
MOVEI TAC,SIXBIT/ TMP/
|
||
HRRZM TAC,ZDIRC
|
||
HRLZM TAC,ZDIRC+1
|
||
HRLZM TAC,ODIRC+1
|
||
IFN CCLSW,<
|
||
HRLZM TAC,CCLDIR+1
|
||
MOVEI TAC,SIXBIT/ EDT/
|
||
HRRZM TAC,CCLDIR
|
||
>
|
||
MOVEI TAC,SIXBIT/ LIN/
|
||
HRRZM TAC,ODIRC
|
||
MOVEI TAC,SIXBIT/ BAK/
|
||
HRLZM TAC,ZILCH+1
|
||
MOVEI TAC,3 ;GET PPN AND STORE IN DIRECTORYS
|
||
CALLI AC1,PJOB
|
||
CCLHR1: IDIVI AC1,12
|
||
ADDI AC2,"0"-40
|
||
LSHC AC2,-6
|
||
SOJG TAC,CCLHR1
|
||
IFN CCLSW,<
|
||
HLLM AC3,CCLDIR
|
||
>
|
||
HLLM AC3,ODIRC
|
||
HLLM AC3,ZDIRC
|
||
HRRI COMCLR
|
||
HRRM .JBREN## ;SET UP ALTERNATE ENTRY POINT
|
||
TRZ FF,ER
|
||
CSET9: INIT ETTY,0
|
||
SIXBIT /TTY/
|
||
XWD TYOBF,TYIBF
|
||
JRST NOTTY
|
||
TIBUF: INBUF ETTY,1
|
||
TOBUF: OUTBUF ETTY,1
|
||
MOVE TAC,.JBFF
|
||
MOVEM TAC,SVJBFF
|
||
SETZM SN
|
||
IFN CCLSW,<
|
||
AND FF,[XWD CCLF,0]
|
||
TLNE FF,CCLF
|
||
JSR CCLHRE
|
||
>
|
||
|
||
COMCLR: MOVE P,[XWD -PDSIZ1,PDL-1] ;CLEAR PDL LIST
|
||
|
||
COMRET: PUSH P,. ; FOR RETURN (NEVER "JRST" HERE)
|
||
TRZ FF,777777 ;CLEAR FLAGS
|
||
IFN CCLSW,<
|
||
TLNN FF,CCLF
|
||
>
|
||
PUSHJ P,ASKOUT
|
||
|
||
;NOW FALL INTO DISPATCH ROUTINE
|
||
; DISPATCH ROUTINE
|
||
|
||
COMRT1: PUSHJ P,GETCH1
|
||
CAIN CH,15
|
||
JRST GETCHR
|
||
CAIE CH,"S"
|
||
CAIN CH,"E"
|
||
JRST ARWCOM
|
||
TLNN FF,FILACT ;ACTIVE FILE ?
|
||
JSR NFO,ERROR ;NO
|
||
CAIN CH,ALTMOD ;CHECK FOR ALTMODE
|
||
JRST SPLPRT ;ALMODE SEEN
|
||
MOVE AC4,CH
|
||
PUSHJ P,GETARG
|
||
CAIN AC4,"I"
|
||
JRST ICOM
|
||
CAIN AC4,"D"
|
||
JRST DCOM
|
||
CAIN AC4,"P"
|
||
JRST PCOM
|
||
JSR ILC,ERROR
|
||
|
||
SPLPRT: AOJG SN,PDCOM ;PRINT THE NEXT LINE
|
||
JRST COMCLR ;ZERO SN
|
||
|
||
;TELETYPE INITIALIZATION ERROR
|
||
|
||
NOTTY: TRON FF,ER ;TRIED TWICE?
|
||
JRST CSET9 ;NO, TRY AGAIN
|
||
TTCALL 3,EMTTY ;YES, DIAGNOSTIC
|
||
CALLI EXIT ;NO TTY IS FATAL
|
||
|
||
EMTTY: ASCIZ /
|
||
?CANNOT INIT TTY/
|
||
; ROUTINE TO PICK UP ARGS FROM COMMAND
|
||
; RETURNED IN N1,N2 (N2=0 FOR 1 ARG)
|
||
; SPACES IGNORED
|
||
|
||
GETARG: SETZB N2,NUM
|
||
MOVEI TAC,5 ; COUNT
|
||
GTARG2: PUSHJ P,GETCHR ; GET INPUT CHAR.
|
||
CAIG CH,"9" ; NUMBER?
|
||
CAIGE CH,"0"
|
||
JRST GTARG3 ; NO
|
||
PUSHJ P,NCHCON ; YES - CONVERT
|
||
SOJGE TAC,GTARG2 ; AGAIN
|
||
JSR ILC,ERROR ; NO
|
||
GTARG3: CAIN CH,40 ; SPACE?
|
||
JRST GTARG2 ; YES
|
||
CAIE CH,"."
|
||
JRST .+3
|
||
MOVE NUM,SN
|
||
PUSHJ P,GETCHR
|
||
TRNE FF,NARG ; 2ND TIME?
|
||
SKIPA N2,NUM ; YES
|
||
MOVE N1,NUM ; NO
|
||
CAIN CH,15 ; CR
|
||
JRST GETCHR ; YES - DISCARD LF+RETURN
|
||
CAIN CH,ALTMOD ;CHECK FOR ALTMODE
|
||
POPJ P,
|
||
CAIN CH,"," ; TWO ARGS?
|
||
TROE FF,NARG ; YES - ALLOWABLE?
|
||
JSR ILC,ERROR ; NO OR BAD CHAR
|
||
JRST GETARG ; YES
|
||
|
||
CON033: MOVEI CH,33 ;MAKE IT STANDARD
|
||
POPJ P, ;RETURN
|
||
; INSERT COMMAND
|
||
|
||
; (N1=SN WANTED)
|
||
; (N2=STEP SIZE)
|
||
|
||
ICOM: SKIPE N2 ;NEW STEP SIZE?
|
||
MOVEM N2,STPSIZ ;YES
|
||
SKIPN SN,N1 ;GET SEQ# IF SPECIFIED
|
||
PUSHJ P,SET10 ;ASSUME SN OF 10 IF NONE SPECIFIED
|
||
PUSHJ P,LPSET ;SET LINE PTR & PREV. SEQ#
|
||
ICOM1: MOVEI TAC1,AC4 ; GET ASCII SEQ.#
|
||
PUSHJ P,RDXA ; CONVERT TO ASCII
|
||
PUSHJ P,FNDLIN ; FIND LOCATION OF LINE
|
||
JRST ICOM2 ; NOT FOUND
|
||
TRO FF,ILRFLG ;SET REPLACEMENT FLAG
|
||
TRO FF,TFLG ;SET "EXISTING" FLAG
|
||
ICOM2: TRON FF,IFLG
|
||
JRST .+3
|
||
CAME PS,AC3
|
||
TRO FF,ILSFLG ;INSERT HAS SKIPPED A LINE
|
||
AOS TYOBF1
|
||
MOVEM AC4,@TYOBF1 ; SEQ # TO TYO BUFFER
|
||
MOVEI CH,42 ;TYPE " IF SKIPPING A LINE
|
||
TRZE FF,ILSFLG
|
||
PUSHJ P,PUTCHR
|
||
MOVEI CH,"'" ;TYPE ' IF REPLACING A LINE
|
||
TRZE FF,ILRFLG
|
||
PUSHJ P,PUTCHR
|
||
MOVEI CH,11 ; TAB
|
||
PUSHJ P,P1CHR ; OUTPUT BUFFER
|
||
PUSHJ P,TYGTLN ; READ IN LINE
|
||
JRST IFIX ;SPECIAL HANDLING FOR .
|
||
CAILE SN,^D99999 ;GOING OVER LINE 99999?
|
||
JSR WRP,ERROR ;YES
|
||
CAMLE SN,SEQLST ;UPDATE SEQLST ?
|
||
MOVEM SN,SEQLST ;YES
|
||
TRZE FF,TFLG ;GOOD RETURN
|
||
PUSHJ P,DCOM2 ; DELETE EXISTING LINE
|
||
AOS TAC,AC3 ; NEW WD COUNT (+1 FOR HEADER)
|
||
CAMLE TAC,FREWDS ; ROOM?
|
||
PUSHJ P,ICOM3 ; NO
|
||
HRRM LP,MOV1
|
||
HRRZ AC1,LP
|
||
ADD AC1,AC3
|
||
HRRM AC1,MOV2
|
||
HRRZ AC2,PNTR
|
||
SUBI AC2,(LP)
|
||
DOMOV1: XCT MOV1 ;MOVE AC1,(AC2)
|
||
DOMOV2: XCT MOV2 ;MOVEM AC1,(AC2)
|
||
SOJGE AC2,DOMOV1
|
||
ADDM AC3,PNTR
|
||
MOVN TAC,AC3 ; UPDATE POINTERS
|
||
ADDM TAC,FREWDS ; NEW FREE WD NUMBER
|
||
HRL AC3,SN ;HEADER WORD
|
||
MOVSI AC4,44000 ;TAB
|
||
MOVSI AC2,(TAC) ;COUNT
|
||
HRRM LP,M2 ;"TO"
|
||
HRRZ TAC1,TYIBF1 ;"FROM"
|
||
HRRM TAC1,M1
|
||
JRST DOM2
|
||
DOM1: XCT M1 ;MOVE AC4,(AC2)
|
||
LSHC AC3,^D28 ;4 CHARS
|
||
LSH AC3,1 ;CLEAR BIT 35
|
||
DOM2: XCT M2 ;MOVEM AC3,(AC2)
|
||
LSHC AC3,^D7
|
||
SOSL @TYIBF1 ;CHECK "REAL" COUNT
|
||
AOBJN AC2,DOM1
|
||
AOBJN AC2,DOM1+1 ;(IF LAST WORD HAS FIVE CHARS)
|
||
MOVE AC3,SN ;SAVE PREVIOUS SN
|
||
ADD SN,STPSIZ ; NEXT LINE
|
||
MOVE N1,SN ;FOR RDXA
|
||
JRST ICOM1
|
||
ICOM3: PUSHJ P,FNLN2A ;OUTPUT AND DELETE
|
||
JRST FNDLIN ;FIND LOC AGAIN
|
||
|
||
IFIX: CAME N2,SN ;ALLOWS FOR POSSIBILITY OF GIVING AN I
|
||
;COMMAND BUT NOT GIVING ANY DATA
|
||
SUB SN,STPSIZ
|
||
JRST CARRET
|
||
|
||
; SET UP FOR LINE 00010
|
||
|
||
SET10: MOVEI SN,12 ;SEQUENCE # = 10
|
||
MOVEI N1,12 ;SAVE COPY FOR FIRST LINE # TYPEOUT
|
||
MOVEI AC4,"10"
|
||
POPJ P,
|
||
; ROUTINE TO DELETE A LINE (OR LINES)
|
||
; FROM TEXT BUFFER
|
||
; N1 ADR OF FIRST LINE TO DELETE
|
||
; N2 ADR OF LAST LINE TO DELETE
|
||
|
||
DCOM: SKIPE AC4,N2 ;TEST AND SAVE
|
||
CAMGE N1,N2 ;LEGAL ?
|
||
SKIPN SN,N1 ;YES,SET FOR FNDLIN
|
||
JSR ILC,ERROR
|
||
PUSHJ P,LPSET ;SET UP LP AND PS
|
||
PUSHJ P,FNDLIN ;SEARCH (PS CONTAINS SN OF PREVIOUS LINE UPON RETURN)
|
||
JSR NLN,ERROR
|
||
JUMPE AC4,DCOM5
|
||
MOVE SN,AC4
|
||
MOVE AC4,LP
|
||
HRL AC4,PS ;SAVE SN OF PREVIOUS LINE
|
||
PUSHJ P,FDL1A ;FIND 2ND LINE(WON'T ADVANCE PAGE)
|
||
SKIPA ;NOT FOUND
|
||
JRST DCOM1 ;FOUND
|
||
CAMLE SN,SEQLST ;IN BUFFER?
|
||
JRST DCOM3 ;NO DELETE ALL REST OF BUFFER
|
||
SETZ TAC, ;YES TEMOVE EXTRANEOUS
|
||
;NOW FALL INTO DCOM1
|
||
; BASIC ROUTINE TO REMOVE A LINE FROM
|
||
; TEXT BUFFER
|
||
; GIVEN: ADR OF LINE TO REMOVE
|
||
; ; # WORDS TO CLEAR
|
||
; C(TAC)=WORD COUNT
|
||
; C(LP)=ADR OF LINE
|
||
|
||
;AC1 CONTAINS SN OF LINE BEING DELETED
|
||
|
||
DCOM1: CAMN SN,SEQLST
|
||
HLRM AC4,SEQLST
|
||
ADDI TAC,(LP)
|
||
SUBI TAC,(AC4)
|
||
MOVEI LP,(AC4)
|
||
DCOM2: HRRM TAC,DCM1 ; FROM=TO+WD COUNT
|
||
DODCM1: XCT DCM1 ;HRLI AC1,(LP)
|
||
HRR AC1,LP ; TO
|
||
HRRZ AC2,PNTR
|
||
SUBI AC2,(TAC) ; LAST DEST
|
||
BLT AC1,(AC2) ; MOVE
|
||
HRRM AC2,PNTR
|
||
ADDM TAC,FREWDS
|
||
POPJ P, ;RETURN
|
||
DCOM3: HLRM AC4,SEQLST
|
||
HRRZ AC1,PNTR ;REST. FIRST FREE
|
||
SUBI AC1,(AC4)
|
||
HRRM AC4,PNTR
|
||
SETZM (AC4)
|
||
ADDM AC1,FREWDS
|
||
DCOM4: CAMGE SN,NUM
|
||
JRST FNLN1A
|
||
PUSHJ P,MVLIN1
|
||
TLNE FF,NDFIL
|
||
PUSHJ P,GETLIN ;LOOK FOR LINE WE WANT
|
||
POPJ P, ;NO MORE
|
||
JRST DCOM4
|
||
|
||
DCOM5: CAMN SN,SEQLST ;LAST SN OF BUFFER ?
|
||
MOVEM PS,SEQLST
|
||
JRST DCOM2
|
||
|
||
; ROUTINE TO PRINT LINES
|
||
; WILL ONLY PRINT ONE LINE AT A TIME
|
||
|
||
PCOM: SKIPN SN,N1
|
||
MOVEI SN,12 ;ASSUME 10 IF NONE SPECIFIED
|
||
SKIPN AC4,N2
|
||
JRST PCOM11
|
||
CAMLE N1,N2
|
||
JSR ILC,ERROR
|
||
PCOM11: PUSHJ P,LPSET
|
||
PUSHJ P,FNDLIN ;FIND IT
|
||
JRST PCOM2 ;NOT FOUND
|
||
PCOM1: PUSHJ P,FNDLIN
|
||
MOVE SN,AC1
|
||
HLRZ A,(LP) ;GET SEQ NUM
|
||
JUMPE A,ENDTTY
|
||
JUMPE AC4,PCOMC1 ;DON'T CHK FOR SINGLE LINES
|
||
CAILE A,(AC4) ;DON'T TYPE BEYOND (N2)
|
||
JRST ENDTTY
|
||
PCOMC1: MOVEI TAC,5
|
||
CAML TAC,TYOBF2
|
||
PUSHJ P,ENDTTY ;OUTPUT BUFFER
|
||
MOVE TAC1,TYOBF1
|
||
PUSHJ P,RDX1 ;CONVERT & OUTPUT
|
||
MOVEM TAC1,TYOBF1 ;FIX UP HDR POINTER
|
||
MOVNI TAC,5
|
||
ADDM TAC,TYOBF2
|
||
HRRI TAC1,1(LP)
|
||
HRLI TAC1,440700 ;FORM BP
|
||
ILDB CH,TAC1
|
||
PUSHJ P,PUTCHR
|
||
CAIG CH,14
|
||
CAIG CH,11
|
||
JRST .-4
|
||
CAML SN,AC4
|
||
JRST ENDTTY
|
||
AOJA SN,PCOM1
|
||
|
||
PDCOM: SETZI AC4,
|
||
TLNN FF,NFILE ;CREATING?
|
||
CAILE SN,1 ;AND NOTHING IN YET?
|
||
JRST PCOM1 ;NO, PROCEED
|
||
JRST CARRET ;YES, NOTHING TO DO
|
||
|
||
PCOM2: HLRZ SN,(LP) ;START AT NEXT LINE ABOVE (N1)
|
||
JUMPN SN,PCOM1 ;THERE ISN'T ANY
|
||
JSR NLN,ERROR
|
||
; BUFFER STRUCTURE
|
||
; TEXT IS STORED LINE BY LINE IN A SEQUENTIAL MANNER
|
||
; THE CONTENTS OF THE FIRST WORD OF LINE ARE AS FOLLOWS:
|
||
; C(LH)= SEQUENCE NUM (BIN)
|
||
; C(RH)= NUMBER OF WORDS
|
||
; IN LINE (INCLUDING HDR WORD)
|
||
; C(HEADER)=0 INDICATES END OF BUFFER
|
||
|
||
; LINE SEARCH ROUTINE
|
||
; GIVEN
|
||
; ADR OF BEG. OF SEARCH IN LP
|
||
; SEQ.NUMBER SOUGHT IN SN
|
||
|
||
; RETURN
|
||
; A) FOUND: VIA A JRST CPOPJ1
|
||
; LP CONTAINS ADR OF LINE
|
||
; TAC CONTAINS WORD COUNT OF LINE
|
||
; SN CONTAINS SEQ. NUM.
|
||
|
||
; B) NOT FOUND - VIA A POPJ,
|
||
; AS ABOVE EXCEPT LP CONTAINS ADR OF THE FIRST LINE WITH
|
||
; A SEQUENCE NUMBER HIGHER THAN THE ONE SOUGHT
|
||
|
||
; A GENERAL ROUTINE TO
|
||
; FIND A LINE AT ITS APPROXIMATE LOCATION
|
||
; UPON RETURN:
|
||
; LP CONTAINS LOCATION
|
||
; TAC CONTAINS WORD COUNT
|
||
|
||
; CALLED WITH SEQ. NUM. IN SN
|
||
|
||
FDL1A: TRO FF,FILFLG
|
||
FNDLIN: PUSHJ P,QKCHEK ;CHECK LIMITS
|
||
TLNN FF,NDFIL ;VIRGIN FILE ??
|
||
JRST LNSRCH ;FIND EXACT LOC.
|
||
;AND RETURN
|
||
FNDLN1: PUSHJ P,GETLIN ;GET WD COUNT
|
||
JRST LNSRCH
|
||
FNLN1A: CAMLE TAC,FREWDS ;ROOM?
|
||
PUSHJ P,FNDLN2 ;NO - OUTPUT
|
||
FNDLNA: HRL AC1,TAC1 ;FROM
|
||
HRR AC1,PNTR
|
||
PUSHJ P,MOVLIN ;MOVE IT
|
||
HRRM TAC1,PNTR
|
||
SETZM (TAC1)
|
||
MOVN AC1,TAC
|
||
ADDM AC1,FREWDS
|
||
MOVEM NUM,SEQLST
|
||
CAMG SN,NUM ;THE ONE WE WANT?
|
||
JRST LSCHLP ;YES
|
||
JRST FNDLN1 ;NO
|
||
|
||
; HERE WE OUTPUT AN ARBITRARY # OF
|
||
; LINES & THEN DELETE THEM
|
||
|
||
FNDLN2: TRZE FF,FILFLG
|
||
JRST TPOPJ
|
||
FNLN2A: SETZI AC2, ;ZERO AC2
|
||
PUSH P,TAC1 ;SAVE COUNT
|
||
PUSH P,TAC ;SAVE ADR
|
||
HLRZ TAC1,PNTR
|
||
FNDLN3: PUSHJ P,OUTLIN
|
||
ADD AC2,TAC
|
||
ADD TAC1,TAC
|
||
CAML AC2,(P) ;BIG ENOUGH HOLE ?
|
||
CAMGE AC2,OUTWRD ;OUTPUT ENOUGH?
|
||
JRST FNDLN3 ;NO
|
||
MOVE TAC,AC2 ;YES - FOR DCOM
|
||
HLRZ LP,PNTR
|
||
PUSHJ P,DCOM2 ;DELETE OUTPUT
|
||
POP P,TAC
|
||
TPOPJ: POP P,TAC1
|
||
POPJ P,
|
||
|
||
; LP - ADR OF LINE
|
||
; SN - NUMBER WANTED
|
||
; C(RH) TAC - WD COUNT
|
||
; AC1 - SCRATCH - CONTAINS NEW SEQ.# ON RETURN
|
||
|
||
LSCHLP: PUSHJ P,LPSET
|
||
LNSRCH: SKIPN TAC,(LP) ;GET & CHECK
|
||
POPJ P, ;"VIRGIN" FILE RETURN
|
||
HLRZ AC1,TAC ;SEQ.#
|
||
CAMN SN,AC1 ;CHECK IT
|
||
AOSA (P) ;FOUND
|
||
CAMG SN,AC1
|
||
JRST CLRTAC
|
||
ADDI LP,(TAC) ;UPDATE
|
||
HRRZ PS,AC1
|
||
JRST LNSRCH ;AROUND AGAIN
|
||
CLRTAC: HRRZS TAC
|
||
POPJ P,
|
||
; QUICK CHECK ROUTINE TO DETERMINE WHETHER A LINE WITH SN
|
||
; LIES WITHIN THE BUFFER.
|
||
|
||
; POPJ P, ;PAST END
|
||
; JRST CPOPJ1 ;O.K.
|
||
; ALSO AN EXIT FOR BEFORE BUFFER
|
||
; CALL WITH SN SET
|
||
|
||
QKCHEK: CAMG SN,WRTLST ;LAST WRITTEN
|
||
PUSHJ P,GORND
|
||
CAMG SN,SEQLST ;PAST END
|
||
CPOPJ1: AOS (P) ;O.K.
|
||
CPOPJ: POPJ P, ;RETURN
|
||
|
||
; SET LINE POINTER & PREVIOUS SEQUENCE #
|
||
|
||
LPSET: MOVE PS,SEQLST ;INIT PREV SEQ# = HIGHEST IN CURRENT BUFFER
|
||
HLRZ LP,PNTR ;INIT CUR LINE PTR = FIRST FREE LOC IN BUFR
|
||
POPJ P,
|
||
|
||
|
||
GORND: TRNN FF,FILFLG
|
||
JRST .+3
|
||
POP P,CH
|
||
JRST CPOPJ
|
||
PUSH P,SN
|
||
PUSH P,AC4
|
||
MOVEM P,PSAVE
|
||
TLO FF,ROUND
|
||
PUSHJ P,CLOSE0
|
||
GORND1: MOVE P,PSAVE
|
||
MOVEI CH,015
|
||
PUSHJ P,ARWOLD
|
||
TLZ FF,ROUND
|
||
PUSHJ P,LPSET
|
||
POP P,AC4
|
||
POP P,SN
|
||
POPJ P,
|
||
; TELETYPE I/O ROUTINES
|
||
|
||
; BASIC TTY INPUT
|
||
; (NON-CCL VERSION)
|
||
; ENTER AT GETCHR TO READ CHARS FROM NORMAL LINES
|
||
; ENTER AT GETCH1 TO READ A CHAR FROM AN UNTERMINATED LINE
|
||
|
||
IFE CCLSW,<
|
||
GETCHR: SOSGE TYIBF2 ;INPUT WHEN BUF CTR GOES .LT. 0
|
||
GETCH1: INPUT ETTY,0
|
||
ILDB CH,TYIBF1 ;GET A 7-BIT CHAR FROM BUF
|
||
JUMPE CH,GETCHR ;IGNORE NULL CHARS
|
||
POPJ P,
|
||
>
|
||
|
||
; BASIC TTY INPUT
|
||
; (CCL VERSION)
|
||
; ENTER AT GETCHR TO READ CHARS FROM NORMAL LINES
|
||
; ENTER AT GETCH1 TO READ A CHAR FROM AN UNTERMINED LINE
|
||
|
||
IFN CCLSW,<
|
||
GETCHR: TLNE FF,CCLF ;NORMAL OR CCL MODE?
|
||
JRST CCLCHR ;READ CCLBF
|
||
JRST TTYCHR ;READ TYIBF
|
||
|
||
GETCH1: TLNE FF,CCLF
|
||
JRST CCLCHR
|
||
JRST TTYCH1 ;READ CHAR FROM UNFINISHED LINE
|
||
|
||
; READ TYIBF
|
||
|
||
TTYCHR: SOSGE TYIBF2 ;INPUT WHEN BUF CTR GOES .LT. 0
|
||
TTYCH1: INPUT ETTY,
|
||
ILDB CH,TYIBF1 ;GET 7-BIT CHAR FROM BUF
|
||
JUMPE CH,TTYCHR ;IGNORE NULL CHARS
|
||
CAIN CH,032 ;IGNORE ^Z
|
||
JRST TTYCHR
|
||
TTYCH2: CAIE CH,176 ;CHANGE OLD ALTMODES TO NEW FORM
|
||
CAIN CH,175
|
||
MOVEI CH,033
|
||
CAIL CH,140 ;CONVERT LOWER CASE TO UPPER
|
||
TRZ CH,040
|
||
POPJ P,
|
||
; READ CCLBF
|
||
|
||
CCLCHR: SOSGE CCLBF2 ;INPUT WHEN BUF CTR GOES .LT. 0
|
||
CCLCH1: PUSHJ P,[IFN TEMP,<
|
||
SKIPE TMPFLG ;IS TMPCOR UUO IN PROGRESS?
|
||
CALLI 12 ;YES, EXIT
|
||
>
|
||
IN CCLC, ;INPUT ON CCL CHANNEL
|
||
POPJ P, ;NORMAL RET
|
||
JSR CCL,ERROR] ;ERROR RET
|
||
ILDB CH,CCLBF1 ;GET 7-BIT CHAR FROM BUF
|
||
JUMPE CH,CCLCHR ;IGNORE NULL CHARS
|
||
CAIN CH,032 ;IGNORE ^Z
|
||
JRST CCLCHR
|
||
JRST TTYCH2 ;FINISH CLEAN-UP AND RETURN
|
||
>
|
||
|
||
|
||
; READ LINE ON TTY & CHECK TERMINATING CHARACTER
|
||
; CALL: PUSHJ P,TYGTLN
|
||
; ALTMODE RETURN
|
||
; NORMAL RETURN
|
||
|
||
TYGTLN: INPUT ETTY,0 ;GET LINE
|
||
TRZ FF,EOL ;CLR EOL FLAG
|
||
MOVE AC1,TYIBF1 ;AIM BYTE PTR AT LINE HEADER
|
||
ADD AC1,(AC1) ;ADD WORD CT FOR THE LINE
|
||
SOS AC1 ;ADJUST PTR TO LAST WORD OF THE LINE
|
||
TYG1: ILDB CH,AC1 ;GET A 7-BIT CHAR FROM LAST WORD
|
||
CAIN CH,33
|
||
POPJ P,
|
||
CAIE CH,175 ;IF ALTMODE, SET TO 033 & RET VIA POPJ
|
||
CAIN CH,176
|
||
JRST CON033
|
||
CAIG CH,14 ;EOL SEEN?
|
||
CAIG CH,11
|
||
SKIPA ;NOT YET
|
||
TRO FF,EOL ;YES
|
||
TLNE AC1,700000 ;WATCH FOR END OF WORD
|
||
JRST TYG1 ;NOT YET, TRY NEXT CHAR
|
||
TRZN FF,EOL ;END-OF-LINE SEEN?
|
||
JSR LTL,ERROR ;NO, LINE TOO LONG
|
||
MOVE AC3,@TYIBF1 ;GET WD COUNT FOR THE LINE
|
||
CAIG CH,14
|
||
CAIG CH,11
|
||
JRST CPOPJ1 ;INCREMENT RET PTR & POPJ
|
||
AOJA AC3,CPOPJ1 ;EXCEPT IF LAST CHAR IS LF, VT, FF ALSO INCR WD CT
|
||
; BASIC TTY OUTPUT
|
||
|
||
PUTCHR: SOSG TYOBF2 ;OUTPUT WHEN BUF CTR GOES TO 0
|
||
PUTCH1: OUTPUT ETTY,0
|
||
SKIPE CH ;AVOID NULL OUTPUT
|
||
IDPB CH,TYOBF1 ;STORE NEW 7-BIT CHAR IN BUF
|
||
POPJ P,
|
||
|
||
; SINGLE CHARACTER TTY OUTPUT
|
||
|
||
ASKOUT: MOVEI CH,"*" ;TYPE ASTERISK
|
||
P1CHR: PUSHJ P,PUTCHR ;SENT CH TO TYOBF
|
||
ENDTTY: OUTPUT ETTY,0 ;FORCE OUTPUT
|
||
POPJ P,
|
||
|
||
; TTY MESSAGE OUTPUT
|
||
;CALL PUSHJ P,MESSAG
|
||
; ASCIZ /MESSAGE/
|
||
; RETURN
|
||
|
||
MESSAG: MOVSI TAC,(POINT 7,0) ;INIT BYTE PTR WITHOUT ADDR
|
||
HRR TAC,(P) ;NOW THE ADDRESS
|
||
MESS2: ILDB CH,TAC ;GET CHAR.
|
||
JUMPE CH,MESSGO ;QUIT AT THE 0
|
||
PUSHJ P,PUTCHR ;PRINT
|
||
JRST MESS2 ;GET NEXT
|
||
MESSGO: AOS TAC ;FIX UP PDL FOR PROPER RETURN
|
||
HRRM TAC,(P)
|
||
POPJ P,
|
||
ARWCOM: TLZE FF,FILACT
|
||
JRST CLOSE0
|
||
SETZM IFILNM
|
||
SETZM IFILXT
|
||
PUSHJ P,FILNAM
|
||
SKIPN IFILNM
|
||
JSR ILC,ERROR
|
||
MOVE TAC1,IFILNM
|
||
MOVEM TAC1,ZILCH
|
||
CAIN CH,"."
|
||
PUSHJ P,FILEXT
|
||
TLZ FF,NFILE!NDFIL
|
||
ARWOLD: PUSHJ P,SETUP
|
||
CAIN CH,ALTMOD
|
||
JRST INITO
|
||
TRZFFE: TRZ FF,ER
|
||
HLRZ TAC,IDIRC+1 ;CHECK EXTENSION
|
||
CAIN TAC,(SIXBIT /BAK/)
|
||
JSR BAK,ERROR ;CAN'T EDIT .BAK FILE
|
||
INIT EICHL,EMDE
|
||
SIXBIT /DSK/
|
||
EXP EDIBF
|
||
PUSHJ P,UNA ;NO DISK???
|
||
TLO FF,NFILE!NDFIL
|
||
LOOKUP EICHL,IDIRC
|
||
JSR NCF,ERROR
|
||
LDB TAC,[POINT 9,IDIRC+2,8] ;GET PROTECTION OF INPUT FILE
|
||
MOVEM TAC,PROTEC
|
||
INBUF EICHL,2
|
||
INITO: TRZ FF,ER
|
||
INIT EOCHL,EMDE
|
||
SIXBIT /DSK/
|
||
XWD EDOBF,0
|
||
PUSHJ P,UNA ;NO DISK
|
||
TLNN FF,NFILE
|
||
PUSHJ P,[ LOOKUP EOCHL,IDIRC
|
||
POPJ P,
|
||
JSR FAU,ERROR]
|
||
TRZ FF,ER
|
||
ENTER EOCHL,ODIRC
|
||
PUSHJ P,UNA ;CANT ENTER???
|
||
EOBUF: OUTBUF EOCHL,2
|
||
PUSHJ P,EWRITE ;SET UP HEADER
|
||
TLO FF,FILACT
|
||
DOFIL1: XCT FILL1 ;MOVEI TAC,.
|
||
MOVEM TAC,FREWDS
|
||
DOFIL2: XCT FILL2 ;HRRZI TAC,.
|
||
HRRZM TAC,PNTR
|
||
HRLS PNTR
|
||
SETZM (TAC)
|
||
MOVEI TAC,12
|
||
TLNN FF,ROUND
|
||
MOVEM TAC,STPSIZ
|
||
SETZM WRTLST
|
||
SETZM SEQLST
|
||
TLNE FF,NFILE
|
||
POPJ P,
|
||
CARRET: PUSHJ P,MESSAG
|
||
ASCIZ /
|
||
/
|
||
JRST ENDTTY
|
||
|
||
;DISK INITIALIZATION OR ENTER ERROR
|
||
|
||
UNA: TRON FF,ER ;TRIED TWICE?
|
||
JRST UNA2 ;NO
|
||
PUSHJ P,MESSAG ;YES, DIAGNOSTIC
|
||
ASCIZ /
|
||
?CANNOT ACCESS DISK/
|
||
JRST EREXIT ;FATAL CONDITION
|
||
|
||
;UUO ERROR RETRY ROUTINE
|
||
;ASSUMES TRZ FF,ER PRECEDES THE UUO
|
||
;IT SHOULD ANYWAY BECAUSE AN EARLIER
|
||
;UUO MAY SUCCEED ON THE SECOND TRY
|
||
|
||
UNA2: MOVNI TAC,3 ;TO TRY AGAIN BACK UP RETURN POINTER
|
||
ADDM TAC,(P)
|
||
SETZ TAC1,
|
||
MOVE TAC,@(P) ;LOOK FOR THE TRZ FF,ER
|
||
CAMN TAC,TRZFFE ;IF NO, WE WERE ON AN INIT
|
||
MOVEI TAC1,2 ;YES, WE WERE ON A LOOKUP OR RENAME
|
||
SUBI TAC1,1 ;MOVE POINTER TO THE ACTUAL UUO
|
||
ADDM TAC1,(P) ;-1 IN CASE OF INIT, +1 IN CASE OF LOOKUP
|
||
POPJ P,
|
||
CLOSE0: SKIPN IFILNM
|
||
JSR ILC,ERROR
|
||
MOVEI SN,^D10 ;FIND SOMETHING
|
||
PUSHJ P,LPSET
|
||
MOVEI SN,^D99999
|
||
PUSHJ P,FNDLIN
|
||
HRRZ TAC,FILL1
|
||
PUSHJ P,FNLN2A
|
||
CLOSE1: RELEASE EICHL,0
|
||
RELEASE EOCHL,0
|
||
TRZ FF,ER
|
||
INIT EICHL,0
|
||
SIXBIT /DSK/
|
||
0
|
||
PUSHJ P,ERA1 ;CANT
|
||
LOOKUP EICHL,IDIRC
|
||
JRST CLOSE2
|
||
CLOSE EICHL,0
|
||
MOVE TAC,PROTEC ;KEEP SAME PROT. ON TMP.TMP
|
||
DPB TAC,[POINT 9,ZDIRC+2,8]
|
||
LDB TAC,[POINT 23,IDIRC+2,35]
|
||
DPB TAC,[POINT 23,ZDIRC+2,35] ;SAVE CREATION DATE
|
||
LDB TAC,[POINT 3,IDIRC+1,20] ;GET HIGH PART OF DATE
|
||
DPB TAC,[POINT 3,ZDIRC+1,20] ;AND SAVE IT
|
||
TRZ FF,ER
|
||
RENAME EICHL,ZDIRC
|
||
PUSHJ P,ERA1 ;CANT
|
||
CLOSE2: TRZ FF,ER
|
||
INIT EOCHL,0
|
||
SIXBIT /DSK/
|
||
0
|
||
PUSHJ P,ERA2 ;CANT
|
||
TRZ FF,ER
|
||
LOOKUP EOCHL,ODIRC
|
||
PUSHJ P,ERA2 ;CANT
|
||
CLOSE EOCHL,0
|
||
LDB TAC,[POINT 9,ODIRC+2,8] ;STD PROT FOR NEW FOO IF CREATING
|
||
TLNE FF,NFILE ;SKIP IF CREATING
|
||
MOVE TAC,PROTEC ;NEW FOO GETS SAME PROTECTION AS OLD FOO
|
||
DPB TAC,[POINT 9,IDIRC+2,8] ; OR STANDARD IF NO INPUT FILE
|
||
LDB TAC,[POINT 23,ODIRC+2,35]
|
||
DPB TAC,[POINT 23,IDIRC+2,35] ;SAVE CREATION DATE
|
||
LDB TAC,[POINT 3,ODIRC+1,20] ;GET HIGH PART OF DATE
|
||
DPB TAC,[POINT 3,IDIRC+1,20] ;AND SAVE IT
|
||
TRZ FF,ER
|
||
RENAME EOCHL,IDIRC
|
||
PUSHJ P,ERA2 ;CANT
|
||
TRZ FF,ER
|
||
INIT EICHL,0
|
||
SIXBIT /DSK/
|
||
0
|
||
PUSHJ P,ERA3 ;CANT
|
||
LOOKUP EICHL,ZILCH
|
||
JRST CLOSE3
|
||
CLOSE EICHL,0
|
||
TRZ FF,ER
|
||
RENAME EICHL,DELDIR ;THIS AVOIDS A RENAME ERROR WITH .BAK
|
||
PUSHJ P,ERA3 ;CANT
|
||
CLOSE3: TRZ FF,ER
|
||
INIT EICHL,0
|
||
SIXBIT /DSK/
|
||
0
|
||
PUSHJ P,ERA3 ;CANT
|
||
LOOKUP EICHL,ZDIRC
|
||
JRST NOIFIL
|
||
CLOSE EICHL,0
|
||
MOVE TAC,PROTEC ;FOO.BAK GETS SAME PROTECTION AS FOO
|
||
DPB TAC,[POINT 9,ZILCH+2,8]
|
||
LDB TAC,[POINT 23,ZDIRC+2,35]
|
||
DPB TAC,[POINT 23,ZILCH+2,35]
|
||
LDB TAC,[POINT 3,ZDIRC+1,20] ;GET HIGH PART OF DATE
|
||
DPB TAC,[POINT 3,ZILCH+1,20] ;AND SAVE IT
|
||
TRZ FF,ER
|
||
RENAME EICHL,ZILCH
|
||
PUSHJ P,ERA3 ;CANT
|
||
NOIFIL: RELEASE EICHL,0
|
||
RELEASE EOCHL,0
|
||
TLNE FF,ROUND
|
||
JRST GORND1
|
||
SETZM IFILNM
|
||
SETZM IFILXT
|
||
JRST COMCLR
|
||
;ERROR IN RENAME PROCESS
|
||
|
||
ERA1: MOVE AC1,[POINT 6,IDIRC]
|
||
JRST ERA4
|
||
ERA2: MOVE AC1,[POINT 6,ZDIRC]
|
||
ERA4: MOVE AC2,[POINT 6,ODIRC]
|
||
JRST ERA
|
||
ERA3: MOVE AC1,[POINT 6,ZDIRC]
|
||
MOVE AC2,[POINT 6,IDIRC]
|
||
ERA: TRON FF,ER ;TRIED TWICE?
|
||
JRST UNA2 ;NO, TRY AGAIN
|
||
PUSHJ P,MESSAG ;YES, PRINT DIAGNOSTIC
|
||
ASCIZ /
|
||
?ERROR IN RENAME PROCESS.
|
||
INPUT FILE CLOSED WITH NAME /
|
||
PUSHJ P,MES61 ;INPUT FILE NAME
|
||
PUSHJ P,MESSAG
|
||
ASCIZ /
|
||
OUTPUT FILE CLOSED WITH NAME /
|
||
PUSHJ P,MES62 ;OUTPUT FILE NAME
|
||
JRST EREXIT
|
||
|
||
;6-BIT FILNAM.EXT PRINTOUT
|
||
|
||
MES62: MOVE AC1,AC2 ;SWITCH TO OUTPUT FILE NAME POINTER
|
||
MES61: MOVEI TAC,11 ;NAME CHAR. CTR
|
||
MES60: ILDB CH,AC1
|
||
ADDI CH,40 ;CHANGE 6-BIT TO ASCII
|
||
PUSHJ P,PUTCHR
|
||
CAIN TAC,4
|
||
PUSHJ P,DOTOUT
|
||
SOJN TAC,MES60
|
||
POPJ P,
|
||
DOTOUT: MOVEI CH,"."
|
||
JRST PUTCHR
|
||
; A ROUTINE TO RETURN A DESCRIPTOR. RETURNS WITH
|
||
; FIRST NON LEGAL CHAR IN AC CH. NAME (IN SIXBIT) WILL
|
||
; BE IN AC TAC UPON RETURN.
|
||
|
||
FILNAM: SKIPA TAC1,[POINT 6,IFILNM]
|
||
FILEXT: MOVE TAC1,[POINT 6,IFILXT]
|
||
JRST SXNAM2
|
||
SXNAM1: SUBI CH,40
|
||
TLNE TAC1,770000 ;FULL ?
|
||
IDPB CH,TAC1 ;STASH
|
||
SXNAM2: PUSHJ P,GETCHR ;GET
|
||
CAIN CH," " ;SPACE ?
|
||
JRST .-2
|
||
CAIL CH,60
|
||
CAILE CH,"Z"
|
||
POPJ P,
|
||
CAILE CH,"9"
|
||
CAIL CH,101
|
||
JRST SXNAM1
|
||
POPJ P,
|
||
|
||
|
||
; ROUTINE TO MOVE LINE, FIX UP COUNT & POINTER (OF HEADER)
|
||
; C(TAC1) = (FROM) TO
|
||
; C(TAC) = WD COUNT
|
||
|
||
MOVLIN: MOVE TAC1,TAC
|
||
ADDI TAC1,(AC1)
|
||
BLT AC1,-1(TAC1)
|
||
MVLIN1: MOVN N1,TAC
|
||
ADDM N1,EDIBF2
|
||
ADDM TAC,EDIBF1
|
||
POPJ P,
|
||
|
||
;GETLIN ROUTINE
|
||
|
||
GETLIN: HRRZ TAC1,EDIBF1
|
||
SKIPLE N1,EDIBF2
|
||
SKIPN (TAC1)
|
||
JRST EDREAD
|
||
LNCNT: MOVEI TAC,1
|
||
HRRM TAC1,LNCNT1
|
||
DOLNCT: XCT LNCNT1 ;SKIPE AC1,(TAC)
|
||
TRNE AC1,1
|
||
JRST .+2
|
||
AOJA TAC,.-3
|
||
CAMLE TAC,N1
|
||
MOVE TAC,N1
|
||
PUSHJ P,NUMCON
|
||
HRRM TAC,(TAC1)
|
||
JRST CPOPJ1
|
||
|
||
EDREAD: INPUT EICHL,0
|
||
AOS EDIBF1
|
||
STATO EICHL,760000
|
||
JRST GETLIN
|
||
STATZ EICHL,20000
|
||
JRST EOF
|
||
TLZ FF,FILACT
|
||
JRST INERR ;INPUT ERROR
|
||
EOF: TLZ FF,NDFIL
|
||
POPJ P, ;"NO MORE" RETURN
|
||
|
||
INERR: PUSHJ P,MESSAG
|
||
ASCIZ /
|
||
?IN/
|
||
JRST PUTERR
|
||
OUTERR: PUSHJ P,MESSAG
|
||
ASCIZ /
|
||
?OUT/
|
||
PUTERR: PUSHJ P,MESSAG
|
||
ASCIZ /PUT ERROR.
|
||
INCOMPLETE OUTPUT FILE CLOSED WITH NAME /
|
||
MOVE AC1,[POINT 6,ODIRC] ;FILE NAME
|
||
PUSHJ P,MES61
|
||
EREXIT: PUSHJ P,ENDTTY ;QUIT & LET USER DECIDE WHAT TO DO
|
||
RELEAS EOCHL,0
|
||
RELEAS EICHL,0
|
||
CALLI EXIT
|
||
|
||
; OUTPUT
|
||
; GIVEN
|
||
; ADR OF LINE IN TAC1
|
||
; ACTION
|
||
; GET WORD COUNT
|
||
; CONVERT SEQ.# TO ASCII
|
||
|
||
|
||
OUTLIN: SKIPN (TAC1) ;END OF BUFFER
|
||
JRST CLOSE1 ;YES (END OF FILE)
|
||
HRRZ TAC, (TAC1) ; GET COUNT
|
||
CAMLE TAC,OC ; ROOM?
|
||
PUSHJ P,EWRITE ; NO
|
||
SUB OC,TAC ; UPDATE COUNT
|
||
HLRZ A,(TAC1) ; SEQ. NUM.
|
||
MOVEM A,WRTLST
|
||
PUSHJ P,RDX ; CONVERT SEQ # TO ASCII
|
||
HRL AC1,TAC1 ; FROM
|
||
HRR AC1,EDOBF1 ; TO
|
||
HRRM AC1,OUTLN1 ; END
|
||
AOS AC1
|
||
DOUTL1: XCT OUTLN1 ;BLT AC1,(TAC)
|
||
ADDM TAC,EDOBF1 ; NEW LCN
|
||
POPJ P,
|
||
EWRITE: OUTPUT EOCHL,0
|
||
STATZ EOCHL,740000
|
||
JRST OUTERR ;OUTPUT ERROR
|
||
HRRZ OC,EDOBF2
|
||
POPJ P,
|
||
|
||
; ASCII CHAR TO BIN NUMBER CONVERSION ROUTINE (NUMBER IS DECIMAL)
|
||
; PUSHJ P,NUMCON
|
||
; WHERE
|
||
; CH - CONTAINS CHAR. TO BE CONV.
|
||
; NUM - CONTAINS BIN NUM. UPON RETURN
|
||
|
||
NCHCON: IMULI NUM,12 ; DECIMAL
|
||
ADDI NUM,-60(CH)
|
||
POPJ P,
|
||
|
||
; TO CONVERT 5 CHAR 7 BIT ASCII
|
||
; TO A BINARY NUMBER
|
||
NUMCON: SETZI NUM,
|
||
HRLI TAC1,440700
|
||
ILDB CH,TAC1
|
||
PUSHJ P,NCHCON
|
||
TLNE TAC1,700000 ; FINISHED
|
||
JRST NUMCON+2 ; NO
|
||
HRLM NUM, (TAC1) ; YES
|
||
POPJ P, ; RETURN
|
||
; SUBROUTINE TO INITIALIZE PROGRAM
|
||
|
||
SETUP: MOVE TAC1,SVJBFF
|
||
MOVEM TAC1,.JBFF
|
||
MOVE AC3,.JBREL##
|
||
MOVEI AC2,407*2
|
||
ADD TAC1,AC2
|
||
HRRM TAC1,FILL2 ;FIRST FREE LOC
|
||
SUB AC3,TAC1
|
||
HRRM AC3,FILL1 ;# FREE WORDS
|
||
IDIVI AC3,^D10
|
||
MOVEM AC3,OUTWRD
|
||
IFE CCLSW,<
|
||
POPJ P,
|
||
>
|
||
IFN CCLSW,<
|
||
TLNE FF,ROUND
|
||
POPJ P,
|
||
TLZN FF,CCLF
|
||
POPJ P,
|
||
SETZM CCLDIR
|
||
IFN TEMP,<
|
||
SKIPE TMPFLG ;IS A TMPCOR UUO IN PROGRESS
|
||
POPJ P, ;YES, DON'T TRY A RENAME
|
||
>
|
||
RENAME CCLC,CCLDIR
|
||
JSR CCL,ERROR
|
||
POPJ P,
|
||
|
||
CCLHR2:
|
||
IFN TEMP,<
|
||
HRRZ TAC,.JBFF ;READ DATA INTO A BUFFER AT .JBFF
|
||
HRRM TAC,TMPFIL+1 ;STORE IN TMPCOR READ BLOCK
|
||
HRLI TAC,440700 ;DUMMY UP BYTE POINTER
|
||
MOVEM TAC,CCLBF1 ;IN BUFFER HEADER
|
||
SOS TMPFIL+1 ;GET PROPER IOWD FORMAT
|
||
MOVE TAC,[XWD 2,TMPFIL]
|
||
CALLI TAC,TMPCOR ;READ AND DELETE EDT FILE FROM CORE
|
||
JRST TMPEND ;FILE NOT FOUND, TRY DISK
|
||
ADD TAC,.JBFF ;CALCULATE END OF BUFFER
|
||
MOVEM TAC,SVJBFF ;SAVE NEW .JBFF
|
||
SUB TAC,.JBFF
|
||
IMULI TAC,5 ;CALCULATE CHARACTER COUNT
|
||
MOVEM TAC,CCLBF2 ;FINISH DUMMYING HEADER
|
||
SETOM TMPFLG ;MARK THAT A TMPCOR UUO WAS USED
|
||
JRST @CCLHRE ;RETURN
|
||
|
||
TMPEND: >
|
||
INIT CCLC,0
|
||
SIXBIT/DSK/
|
||
XWD 0,CCLBF
|
||
JSR CCL,ERROR
|
||
SETZM CCLDIR+3
|
||
LOOKUP CCLC,CCLDIR
|
||
JSR CCL,ERROR
|
||
MOVE TAC,.JBFF
|
||
MOVEM TAC,SVJBFF
|
||
INBUF CCLC,1
|
||
JRST @CCLHRE
|
||
>
|
||
; BIN TO BCD CONVERSION ROUTINE
|
||
; ADAPTED FROM ANY RADIX PRINT IN MANUAL F-64PX (8/64)
|
||
|
||
; A CALL TO THIS ROUTINE WILL CONVERT A BINARY SEQ.
|
||
; NUMBER TO A 5 CHAR ASCII WORD WITH HEADING ZEROS
|
||
|
||
; CALL
|
||
; PUSHJ P,RDX
|
||
; WHERE TAC1 CONTAINS ADR FOR RESULT
|
||
; A CONTAINS BINARY # TO BE CONVERTED
|
||
|
||
A=N1
|
||
A1=A+1
|
||
|
||
RDX: SETOM (TAC1) ; SET SN BIT
|
||
RDXA: HRLI TAC1,440700 ; FORM POINTER
|
||
RDX1: MOVEI AC1,5 ; 5 DIGITS
|
||
RADIX: IDIVI A,12 ; RADIX IS DECIMAL
|
||
HRLM A1,(P) ; SAVE REMAINDER
|
||
SOSE AC1 ; FINISHED
|
||
PUSHJ P,RADIX ; NO
|
||
HLRZ A,(P)
|
||
ADDI A,60 ; FORM ASCII
|
||
IDPB A,TAC1 ; DEPOSIT IN WORD
|
||
POPJ P, ; RETURN SOMEPLACE
|
||
|
||
; ERROR ROUTINE
|
||
; DECIPHERS ERROR # AND PRINTS MESSAGE
|
||
|
||
ERROR2: TLZ FF,CCLF ;CLEAR CCL FLAG SO LOOPING DOES NOT OCCUR
|
||
SOS ERROR
|
||
LDB TAC,EPNT1 ; GET ERR #
|
||
MOVE TAC,EMT(TAC)
|
||
ERROR4: ILDB CH,TAC ; GET CHAR
|
||
JUMPE CH,ERROR3
|
||
PUSHJ P,PUTCHR ; TO BUFFER
|
||
JRST ERROR4
|
||
ERROR3: PUSHJ P,ENDTTY ; OUTPUT WORD
|
||
JRST COMCLR ; NEXT COMMAND
|
||
|
||
EPNT1: POINT 4,@ERROR,12
|
||
|
||
NOCORE: TTCALL 3,NOCOR
|
||
CALLI EXIT
|
||
|
||
NOCOR: ASCIZ /
|
||
?NO CORE AVAILABLE FOR DATA SEGMENT/
|
||
;ERROR MESSAGE NUMBERS
|
||
|
||
NFO==0
|
||
ILC==1
|
||
NLN==2
|
||
CCL==3
|
||
NCF==4
|
||
FAU==5
|
||
WRP==6
|
||
LTL==7
|
||
BAK==10
|
||
|
||
;ERROR MESSAGE ADDRESS TABLE
|
||
|
||
EMT: POINT 7,EMNFO
|
||
POINT 7,EMILC
|
||
POINT 7,EMNLN
|
||
POINT 7,EMCCL
|
||
POINT 7,EMNCF
|
||
POINT 7,EMFAU
|
||
POINT 7,EMWRP
|
||
POINT 7,EMLTL
|
||
POINT 7,EMBAK
|
||
|
||
;ERROR MESSAGES
|
||
|
||
EMNFO: ASCIZ /?FILE NOT SPECIFIED
|
||
/
|
||
EMILC: ASCIZ /?ILLEGAL COMMAND
|
||
/
|
||
EMNLN: ASCIZ /?LINE REFERENCED DOES NOT EXIST
|
||
/
|
||
EMCCL: ASCIZ /?SYSTEM ERROR READING COMMAND FILE
|
||
/
|
||
EMNCF: ASCIZ /?INPUT FILE NOT FOUND
|
||
/
|
||
EMFAU: ASCIZ /
|
||
?FILE NAME ALREADY IN USE
|
||
/
|
||
EMWRP: ASCIZ /?CANNOT INSERT ABOVE LINE 99999
|
||
/
|
||
EMLTL: ASCIZ /?LINE TOO LONG
|
||
/
|
||
EMBAK: ASCIZ /?CANNOT EDIT BACKUP FILE
|
||
/
|
||
|
||
|
||
LIT
|
||
PATCH:
|
||
IFN PURE,<RELOC>
|
||
|
||
DATA:
|
||
; I/O DATA
|
||
; MACRO TO SET UP HEADERS ETC.
|
||
|
||
DEFINE AREA (A,N)
|
||
<SEQ (A,N,0123456789)
|
||
>
|
||
DEFINE SEQ (A,N,NUM,%K)
|
||
<%K=0
|
||
IRPC NUM,
|
||
<IFG N-%K,
|
||
<IFE %K,
|
||
< A: BLOCK 1
|
||
>
|
||
IFN %K,
|
||
< A'NUM: BLOCK 1
|
||
>>
|
||
%K=%K+1
|
||
>
|
||
>
|
||
|
||
AREA (TYIBF,3)
|
||
AREA (EDOBF,3)
|
||
AREA (EDIBF,3)
|
||
REPEAT 0,<
|
||
AREA (EDRCO,4)
|
||
AREA (EDRCI,4)
|
||
>
|
||
AREA (TYOBF,3)
|
||
|
||
; STORAGE
|
||
|
||
ERROR: BLOCK 1 ; FOR JSR AC,ADR
|
||
ERROR1: BLOCK 1 ;JRST ERROR2
|
||
FILL1: BLOCK 1
|
||
FILL2: BLOCK 2
|
||
MOV1: BLOCK 1
|
||
MOV2: BLOCK 1
|
||
M1: BLOCK 1
|
||
M2: BLOCK 1
|
||
DCM1: BLOCK 1
|
||
LNCNT1: BLOCK 1
|
||
OUTLN1: BLOCK 1
|
||
IFN CCLSW,<
|
||
CCLHRE: BLOCK 1
|
||
CCLHR3: BLOCK 1
|
||
IFN TEMP,<
|
||
TMPFIL: BLOCK 1 ;SIXBIT /EDT/
|
||
BLOCK 1 ;XWD -200,0
|
||
TMPFLG: BLOCK 1
|
||
>>
|
||
PSAVE: BLOCK 1
|
||
FREWDS: BLOCK 1 ; NUMBER OF FREE WDS
|
||
PNTR: BLOCK 1 ;LH-FIRST FREE
|
||
;RH-ADDR OF LAST HEADER
|
||
WRTLST: BLOCK 1 ; SN LAST WRITTEN
|
||
STPSIZ: BLOCK 1 ; STEP SIZE FOR INSERT
|
||
SVJBFF: BLOCK 1 ; STORAGE
|
||
PROTEC: BLOCK 1 ;SAVE PROTECTION FOR OUTPUT FILE
|
||
OUTWRD: BLOCK 1
|
||
SEQLST: BLOCK 1 ;LAST SN IN CURRENT PAGE BUFFER
|
||
|
||
IFILNM:
|
||
IDIRC: BLOCK 1
|
||
IFILXT: BLOCK 3
|
||
|
||
OFILNM:
|
||
ODIRC: BLOCK 1 ;SIXBIT /###LIN/
|
||
BLOCK 1 ;SIXBIT /TMP/
|
||
BLOCK 2
|
||
|
||
|
||
PDSIZ=^D25
|
||
PDSIZ1=PDSIZ+1
|
||
PDL: BLOCK PDSIZ
|
||
|
||
|
||
IFN CCLSW,<
|
||
AREA (CCLBF,3)
|
||
|
||
|
||
CCLDIR: BLOCK 1 ;SIXBIT/###EDT/
|
||
BLOCK 1 ;SIXBIT/TMP/
|
||
BLOCK 2
|
||
>
|
||
ZDIRC: BLOCK 1 ;SIXBIT /###TMP/
|
||
BLOCK 1 ;SIXBIT /TMP/
|
||
BLOCK 2
|
||
ZILCH: BLOCK 1
|
||
BLOCK 1 ;SIXBIT /BAK/
|
||
BLOCK 2
|
||
|
||
DELDIR: BLOCK 4
|
||
|
||
DSKST: BLOCK 1000 ;FORCE INTO 2K
|
||
ENDP: END START
|
||
|