ASMB,R * **************************************************************** HED RTE-M INTERACTIVE (SCROLLING) EDITOR * NAME: EDITM * SOURCE: 92064-18125 * RELOC: 92064-16025 * * PROGMR: H.L.CLAWSON * * NAM EDITM,3,90 92064-16025 REV.1813 780223 * **************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT * * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * **************************************************************** * * * MOD TO REPLACE CALL TO DTTY WITH CALL TO IFTTY 780221 GLM * * * * ENCODED PROGRAM HALTS DENOTE ALGORITHM ERRORS * IF THEY EVER OCCUR. * HLT 1-NEGATIVE CHAIN LENGTH * GETHD * GETTL * HLT 2-DEST CHAIN EMPTY (ALL RECORDS IN SOURCE CHAIN) * READ * WRITE * HLT 4-CHAIN LENGTH ALGORITHM ERROR * ./^ * HLT 77-PENDING LINE CHARACTER GOT DROPPED * CXT * SUP SUPPRESS EXTRANEOUS LISTING SKP SPC 1 EDITM JSB RMPAR GET 'ON' PARAMETERS DEF *+2 DEF TTYLU LDB .75 STB MAXOP LDB TBUFP STB TBUFF LDB MBUFP STB MBUFF LDB PBUFP STB PBUFF LDB EBUFP STB EBUFF LDB XYBFP STB XYBUF LDB M150 STB WIND2 LDB MINUS STB SDLM LDB ";" STB TABCR LDB M6 STB TAB0 LDB M20 STB TAB0+1 LDB "@" STB INDE2 LDB "/" STB DLMTR LDB "]" STB TERM LDB M4 STB LN FOUR-CHAR PROMPT STB TTY ASSUME NO INTERACTION STB LIST ASSUME NO LIST DEVICE LDB B3537 STB /+1 JSB LIMEM DEF *+4 DEF ZERO GET AVAILABLE MEMORY DEF DCBI FIRST WORD DEF ECH NO. OF WORDS CLB STB TAB0+2 STB SLENG STB DLENG STB PASS STB WIND1 STB ERR LDA ECH DIV B600 DIVIDE MEMORY INTO 3-SECTOR BLOCKS SZA,RSS JMP ER005 INSUFFICIENT MEMORY FOR DCB'S CLB MPY B200 CONVERT SECTOR COUNT TO WORD COUNT STA DCBSZ SIZE OF EACH DCB BUFFER ALS MULTIPLY BY 2 ADA .64 2 DCB HEADERS IN EACH DCB CMA,INA ADA ECH REMAINING MEMORY USED FOR LINE BUFFERS DIV .78 STA ALENG NO. OF LINE BUFFERS AVAILABLE CMA,INA,SZA,RSS JMP ER005 INSUFFICIENT MEMORY STA ./R$ CLB LDA DCBI ADA .9 STB A,I CLEAR OPEN FLAG ADA .23 9+23=16*2 ADA DCBSZ STA DCBO START OF SECOND DCB ADA .9 STB A,I CLEAR OPEN FLAG ADA .26 9+26=16*2+3 ADA DCBSZ STA AHEAD HEAD OF AVAILABLE MEMORY CHAIN LDB A ADA M3 STEP TO FORWARD LINK ADB .78 CALCULATE NEXT BLOCK ADDRESS STB A,I SET FORWARD LINK ADB M156 CALCULATE PREVIOUS BLOCK ADDRESS INA STEP TO BACKWARD POINTER STB A,I SET BACKWARD LINK ADA .77 STEP TO NEXT RECORD'S FORWARD LINK ADB .234 CALCULATE THAT FORWARD LINK ISZ ./R$ LAST RECORD? JMP *-7 NO-INITIALIZE NEXT BLOCK ADA M78 YES-STEP TO LAST RECORD OF CHAIN CCB STB SHEAD STB STAIL STB DHEAD STB DTAIL STB A,I DENOTE AS END-OF-CHAIN ADA .3 STEP TO LAST RECORD'S DATA ADDRESS STA ATAIL SET TAIL POINTER LDA AHEAD STEP TO FIRST RECORD OF CHAIN ADA M2 STEP TO BACKWARD POINTER STB A,I DENOTE AS START-OF-CHAIN LDB ALFIL SET TO INPUT ALL FILE NAMES LDA TTYLU+3 SZA,RSS IF FOURTH 'RUN' PARAMETER NOT ENTERED LDB NOSCR DO NOT ASK FOR SCRATCH FILES CLA NO ERRORS SO FAR STA SF1 CREATE SCRATCH FILES IF OPERATOR DEFAULTS STA SF2 * BADFL JSB FMPER PRINT ANY ERRORS CLA LDB OPT CPB SCR1 STA SF1 ALWAYS CREATE DEFAULT SCRATCH FILES CPB SCR2 STA SF2 JSB GTFIL ASK OPERATOR FOR FILE NAMES DEF *+10 DEF OPT OPTIONS DEF TTYIP ERROR DEF TTYLU COMMAND INPUT DEF INPUT SOURCE FILE DEF RUBSH OUTPUT DEF RUBSH LIST DEF RUBSH ERROR LIST DEF SF1 SCRATCH 1 DEF SF2 SCRATCH 2 LDA GDCB+9 SEE IF GDCB IS OPEN TO THIS PROGRAM SZA,RSS JMP ER002 TELL OPERATOR 'COMMAND FILE NOT FOUND' LDA GDCB. ADDRESS OF COMMAND INPUT DCB STA LDCB. LIST DCB LDB GDCB+2 FILE TYPE STB TYPE SZB JMP NOTTY NOT TYPE 0, NO INTERACTION ** ** CALL IFTTY TO SEE IF INTERACTIVE DEVICE 780221 GLM ** JSB IFTTY CHECK FOR INTERACTIVE COMMAND INPUT DEVICE DEF *+2 DEF GDCB+3 LU ** ** SSA,RSS JMP NOTTY CLA,INA STA TTY INTERACTION ALLOWED (A=1) STA LIST LISTING ALLOWED NOTTY LDA TTYIP ERROR CODE CPA M12 END OF FILE? JMP ./AB YES, ABORT LDB INFL ASK FOR INPUT FILE AGAIN LDA INPUT+1 IF ERROR OCCURRED SSA JMP BADFL LDB SCR1 LDA SF1+1 SSA JMP BADFL ASK FOR SCRATCH FILE AGAIN LDB SCR2 LDA SF2+1 SSA JMP BADFL ASK FOR SCRATCH FILE AGAIN JSB PASS1 OPEN INPUT SCRATCH FILE JMP BADFL ERROR, TRY AGAIN LDA SFP1 JSB OPENO OPEN SCRATCH FILE FOR OUTPUT JMP BADFL ERROR, TRY AGAIN JSB WRITF WRITE END OF FILE DEF *+5 DEF DCBO,I DEF RUBSH DEF RUBSH DEF M1 LDB SCR1 SSA JMP BADFL ERROR, TRY AGAIN * LDA INPUT+4 SSA JMP RWND DEFAULT TO SCRATCH INPUT FILE LDA INPP JSB OPENI OPEN USER SOURCE FILE JMP BADFL ERROR, TRY AGAIN CCA STA PASS SET TO OPEN SCRATCH AFTER ONE PASS * RWND JSB RWNDO REWIND OUTPUT FILE JSB RWNDI REWIND INPUT FILE * READ1 JSB READ READ IN FIRST LINE * DISPL JSB LSTSB LIST PENDING LINE * NODE1 CLA STA EXFLG EXCHANGE FLAG LDA TTY LDB GDCB. SSA,RSS IF INTERACTIVE, STB LDCB. RESET LIST DEVICE TO INPUT DEVICE * * 'X', 'Z', 'U', AND 'V' RETURN TO NODE2 UPON COMPLETION. * SO THE EXCHANGE PATTERN REMAINS ENABLED. NODE2 JSB TTYIP INPUT COMMAND JSB CAPS FETCH COMMAND CHARACTER JMP ER001 NULL IS AN INVALID COMMAND STA COMND SAVE FOR LATER CPA "A" JMP ./A ABORT EDITOR LDB B40 RESET TAB FILL STB TBFIL TO SPACE CPA B40 JMP O/PEB INSERT AFTER CPA "=" JMP ./= CHANGE LINE LENGTH CPA %G JMP ./CG MUTE BELL WITH PROMPT. CPA "P" JMP ./P DISPLAY PENDING LINE CCB STB TRFLG DO TRANSFER TO DEST. FILE STB LSTFG DO LIST CPA "C" JMP ./P EDIT PENDING LINE & GOTO NEXT CPA "!" JMP ./! PRINT SOURCE FILENAME CPA "$" JMP ./$ LIST OR CHANGE CONSTANT CHARACTERS CPA "L" JMP NUMBR LIST SEVERAL LINES CLB STB LSTFG DON'T LIST CPA "#" JMP ./# APPEND SEQUENCE NUMBERS CPA "O" JMP ./O COPY & EDIT PENDING LINE CPA "K" JMP ./K KILL TRAILING BLANKS CPA "M" JMP ./M MERGE FILE AFTER PENDING LINE CPA "?" JMP ./? ANSWER A QUESTION CPA "/" SLASH AND "+" MEAN THE SAME RSS CPA PLUSS JMP NUMBR GO DOWN SEVERAL LINES CPA "E" JMP ./E END EDITOR CPA "N" JMP ./N DISPLAY PENDING LINE NUMBER CPA "T" JMP ./T CHANGE TABS CPA "U" JMP ./U UNCOND. REPLACE W/O LIST. CPA "V" JMP ./V THIS WITH LIST. CPA "W" JMP ./W SPECIFY A NEW WINDOW CPA "G" JMP ./Z EXCHANGE IN PENDING LINE CPA "X" JMP ./X EXCHANGE IN ALL LINES WITH LIST CPA "Y" JMP ./X EXCHANGE IN PENDING LINE AND SEARCH FOR NEXT MATCH CPA "Z" JMP ./Z EXCHANGE IN ALL LINES W O LIST CPA "^" JMP ./^ GO UP SEVERAL LINES STB TRFLG DON'T TRANSFER CPA MINUS JMP NUMBR DELETE SEVERAL LINES JSB ASCII RSS JMP FNUM FIND LINE NUMBER JSB TAB TAB THE COMMAND LINE LDA COMND RESTORE COMMAND CHARACTER CPA "R" JMP ./R REPLACE PENDING LINE CPA "I" JMP ./I INSERT BEFORE CPA "D" JMP SERCH DELETE UNTIL MATCH CCB STB TRFLG DO TRANSFER CPA "F" JMP SERCH FIND MATCH CPA "B" COMPLETE TRANSFER AND START SEARCH JMP ./B FROM THE BEGINNING CPA "S" JMP ./S SEARCH AND MERGE JMP ER001 INVALID COMMAND *** SKP SPC 1 * '-', '/', AND '+' COMMANDS * NUMBR JSB NUMIN READ NUMERIC PARAMETER CMA,INA,SZA,RSS COMPLEMENT NUMBER CCA IF NUMBER IS ZERO SET STA COUNT TO -1 JSB NLSLU SET UP NEW LU IF GIVEN ./CC JSB TR FNUM2 ISZ COUNT FOUND LINE NUMBER? JMP ./CC NO, FETCH NEXT LINE JMP DISPL YES, DISPLAY IT *** * 'D', 'F', AND 'B' COMMANDS * SERCH JSB M.T MOVE PATTERN TO MATCH BUFFER NEXT JSB TR WRITE PENDING LINE & READ NEXT JSB COMPR COMPARE PENDING LINE TO MATCH BUFFER JMP NEXT PATTERN NOT FOUND - CONTINUE JMP DISPL FOUND - DISPLAY IT SKP SPC 1 * * THIS ROUTINE POSITIONS TO A GIVEN LINE NUMBER. * LINES IN THE SOURCE CHAIN ARE SKIPPED TO * INSURE THAT LINE NUMBERS MATCH RECORD NUMBERS * ON THE DISC. SPC 1 FNUM CLA RESET COMMAND STA ECCNT CHARACTER POINTER JSB NUMIN COMPUTE LINE NUMBER CMA,INA,SZA,RSS COMPLEMENT AND IF ZERO CCA SET TO -1 STA COUNT AND SAVE STA TRFLG SET TRANSFER FLAG JSB NLSLU SET UP NEW LU IF GIVEN LDB LINEM SZB JMP ER003 MORE THAN 32000 RECORDS LDA LINES SSA JMP ER003 MORE THAN 32000 RECORDS SZA,RSS IF NULL INPUT FILE JMP FNUM3 ROLL OVER FILES ADA COUNT SUBTRACT DESIRED LINE SSA,RSS JMP FNUM3 BACK UP LDB SLENG CMB,INB CLEAR OUT SOURCE CHAIN ADA B THEN ADVANCE INPUT FILE STA COUNT JMP ./CC GO FIND LINE *** *** ./# LDA M3 SKIP OVER STA COUNT ALPHA COMMENT. ./#0 JSB ECH NOP ISZ COUNT JMP ./#0 JSB NUMIN FETCH START NUMBER STA BASE AND SAVE AS BASE JSB NUMIN FETCH 2ND NUMBER SZA,RSS IF ZERO SET LDA .10 TO 10 AND STA INCR SAVE AS INCREMENT JSB ./B1 GO TO BEGINNING OF FILE JSB READE READ A LINE *** ./#1 CLA RESET CHARACTER OUTPUT STA OCCNT COUNTER LDA M72 MOVE STA COUNT FIRST PART OF SOURCE ./#2 JSB PCH CHARACTERS JMP SPC OF SOURCE JSB OUTCR TO OUTPUT ISZ COUNT BUFFER JMP ./#2 JMP ./#3 *** SPC LDA B40 BLANK JSB OUTCR FILL TO ISZ COUNT COLUMN 72 JMP SPC ./#3 CLA,INA SET UP COMMAND STA ECCNT BUFFER COUNTER LDA M3 SET UP LOOP STA COUNT COUNTER FOR 3 CHARACTERS ./#4 JSB ECH FETCH NEXT ALPHA COMMENT LDA B40 LOAD BLANKS IF NO COMMENT JSB OUTCR OUTPUT CHARACTER ISZ COUNT THIRD CHARACTER? JMP ./#4 NO, FETCH NEXT CHARACTER *** LDA BASE OUTPUT LINE NUMBER CLB JSB DEC IN ASCII LDA BASE UPDATE ADA INCR LINE STA BASE NUMBER JSB ./R$ SWAP TBUFF AND PBUFF JSB TR WRITE PENDING LINE AND READ NEXT JMP ./#1 CONTINUE *** SKP SPC 1 * SET UP MAXIMUM OUTPUT LENGTH (ALWAYS WORD COUNT) * ./= JSB NUMIN GET REQUESTED LENGTH SZA,RSS JMP ER000 ZERO ILLEGAL ADA M151 IF LONGER THAN ALLOWABLE SSA,RSS JMP ER000 PRINT ERROR ADA .152 CLE,ERA CONVERT TO WORD COUNT STA MAXOP NLS JSB NLSLU CHECK FOR NEW LIST DEVICE JMP NODE1 SPC 3 * SET UP WINDOW FOR SEARCH AND EXCHANGE COMMANDS * ./W JSB CHKN CHECK PARAMETERS JSB NUMIN FETCH SZA START OF ADA M1 WINDOW STA WIND1 POINTER JSB NUMIN FETCH CMA,INA,SZA,RSS END OF LDA M150 WINDOW STA WIND2 POINTER ADA WIND1 TEST THAT START IS BEFORE END SSA,RSS JMP ER000 JMP NODE1 GET NEXT COMMAND SPC 1 3 * DELETE TRAILING BLANKS FROM THE FILE ./K JSB ./B1 ROLL-OVER FILE ./K1 JSB READE READ FIRST LINE INA ROUND UP CLE,ERA CONVERT TO WORD COUNT ./K2 ADA M1 BACK UP ONE WORD SZA,RSS JMP ./K3 DO NOT DELETE LAST WORD LDB PBUFF ADB A LDB B,I CPB SPSP CHECK FOR 2 BLANKS JMP ./K2 YES, DECREMENT LINE LENGTH ./K3 INA ALR CONVERT TO CHARACTER COUNT STA PLNG STORE NEW RECORD LENGTH JSB O/PSB MOVE NEW RECORD TO DEST. FILE JMP ./K1 AND FIX IT