/ WPEDIT 3.XX / / ******** EDIT HISTORY ******** / 258 KMD 23-Sep-85 Add Spanish Xlations and Page size check / 257 KMD 17-Sep-85 Add Sveeedish translation IFDEFs / 256 KMD 16-Sep-85 Add Norwegen (?) ifdefs. / MAKE SURE !!!!! / That you don't push the area of NWRUL buffer / up by a page by having translations that are / slightly too long .. Great fun.. / / / 255 KMD 13-Sep-85 Add Spanish technical changes (not xlations) / 254 EMcD 26-Aug-85 Add Insert-Overstrike mode / 253 EMcD 19-Aug-85 Conditionalise Swedish Ruler store /recall / 252 Mart 15-aug-85 add DUTCH / 251 KMD 02-AUG-85 Allow international radix characters / 250 EMcD 13-Jul-85 Put in FAO keyboard for Ruler store/recall / 249 RCME 03-Jul-85 Fix bug in LP and spell caused by 247 / 248 RCME 01-Jul-85 Define new table to take 8-bit characters / in ruler definitions / 247 RCME 24-Jun-85 Allow MCS currency symbols / 246 EMcD 07-jun-85 Fix write out of WPHOLE / 245 EMcD 22-may-85 Move PGECHO out to Panel to make some room / 244 EMcD 22-May-85 More Hyphenation code for 8 bit / 243 EMcD 21-May-85 Write out one more block of blasts / 242 EMcD 06-May-85 Expand write-out code for WPHOLE because / of extra block for Blast for 8 bit GOLD SWAP / 241 EMcD 23-Apr-85 Allow trans of 8 bit input only for / KB input chars / 240 rcme 22-Apr-85 Added load information for merge overlay hole / 239 Mart 19-mar-85 moved CMPRUL,CLRRULR to WPHOLE added ESIMCH / 238 Mart 11-mar-85 added blaster hook and made space by removing / part of the ruler buffer copy to panel mem / / *********** mods below are V2.0 and earlier / / 237 WCE 20-DEC-84 Fix PUTSCH to output attributes across screens / 236 WCE 12-NOV-84 Editor MATH changes for spaces in tab fields / 235 WCE 12-OCT-84 Change Status Line for Column Cursor display / 234 WCE 24-SEP-84 Change to Tech Character overlay call / 233 EJL 23-AUG-84 CALLAR checks menu code is swapped out before / JMS into field 2 / Fix reset of ruler during window change / 232 WCE 21-AUG-84 Fix to EDITOR MATH error handling during SWAP / 231 WJY 21-AUG-84 Fix to caller routine to clear skip return flag / 230 WCE 20-AUG-84 Change to file open for Personal Dict and Spell / 229 WJY 09-AUG-84 Return to main menu when the SPELL overlay INITSP / is unable to open a file. / 228 WCE 07-AUG-84 CHANGED GETLIN TO FIX PROBLEM WITH TIME DISPLAY / 227 EJL 07-AUG-84 Change FMSWAP calls to CALLAR and remove FMSWAP / Added stacking of 10 levels to CALLAR / 226 BC 26-JUL-84 Delete SPLTFL, use WIDNAR flag for 80/132 / 225 WCE 24-JUL-84 Added REGION indicator to Status Line display / 224 WCE 16-JUL-84 Changes for BRITISH pound sign / 223 BC 16-JUL-84 Added manual screen width choice / 222 BC 09-JUL-84 Deleted routine PPCALL from editor (not needed) / 221 WCE 28-JUN-84 Fix to COPY-DOC then EDIT crashing system / 220 WCE 27-JUN-84 Various bug fixes to EDITOR / 219 EJL 25-JUN-84 Expand ruler from 158 to 238 / 218 GDC 05-JUN-84 Field 2 routines using own callaroutine. / 217 GDC 05-JUN-84 Moved CENTER to field 2. / 216 DKR 01-JUN-84 Test MNSTAT for Ruler Display ON/OFF. Added / @RULOFF' to pt to Case-Table for Ruler Display / 215 DKR 29-MAY-84 Gold:Tab changes for key trapping / removed code associated with @tab center' / 214 BC 22-MAY-84 Add PPCALL (=CALLAROUTINE) to 2nd overlay / for Post Proc. calls to Edit subrs; add SB's / footnote fixes to INITSP. / 213 GDC 14-MAY-84 Added handling for second overlay area. / 212 WCE 11-MAY-84 Remove all occurrances of USERNO / 211 EJL 08-MAY-84 Add hooks for technical character / 210 WCE 02-MAY-84 Moved Resident Overlay from WPEDOV to WPEDIT / 209 GDC 29-APR-84 Moved LINDNT to field 2. / 208 GDC 23-APR-84 Moved FNTABSTOP and TBJUST to field 2. / 207 GDC 12-APR-84 Moved CHKMAR into field 2 freeing space in / editor root. / 206 GDC 24-MAR-84 Space saving mods / 205 AH 21-MAR-84 Add code for COLUMN CUT / 204 WCE 14-MAR-84 Change startup point from EIFIX to EINEXA to / correct a problem with blocks used display / 203 GDH 2-MAR-84 Fix SELECT bug with line exactly R-MARG long. / 202 WJY 29-FEB-84 Fix top of document display when DMI document / is opened in wide screen mode / 201 WJY 24-FEB-84 Fix DMI wide screen bug caused by removing DMI / specific code / 200 WJY 07-FEB-84 DECmate I compatability. / 199 EH 21-DEC-83 Fix for CHKMAR, handling tabs on wrapped lines / 198 GDH 20-DEC-83 Unconditionalized the math checks. / 197 EH 20-DEC-83 Moved the 5 ruler words on page 0 so as not to / get cleared at INITialization. (for GTR) / 196 GDH 13-DEC-83 Changed DSPRUL to accomodate status line changes. / 195 WJD 31-OCT-83 Remove GOLD_HALT from GTP & GOLD_BOTTOM / and change GOLD_BOTTOM logic to GTP logic / 194 WCE 27-OCT-83 REMOVED ALL PREVIOUS EDIT HISTORIES FOR / NEW VERSION 1.5 SOURCES FIELD 0 / FIELD WHERE RXHAN IS LOCATED *200 / START ADDRESS USED BY OS8 "GO" COMMAND JMP I .+3 / LOCATION USED TO START UP RXHAN JMP I .+1 / LOCATION USED TO RETURN TO OS8 MONITOR 7605 / ADDRESS OF OS8 MONITOR RETURN POINT RXLOAD / ADDRESS OF START LOCATION FOR RXHAN *RXLDLS / ADDRESS WITHIN RXHAN TO OVERLAY RXEWT / WRITE FUNCTION CODE 0 RXQBLK / ADDRESS OF QUEUE BLOCK TO USE . / ADDRESS OF TABLE OF DISK COMMANDS DLSTAT ; 400;CDF 0;-DSSTAT / SWAP AREA CODE & STATUS LINE DLOEDT ; 0;CDF 10;-DSOEDT / MAIN EDITOR DL3EDT ; 200;CDF 20;-DS3EDT / MORE EDITOR RESIDENT CODE DL4EDT ;1600;CDF 20;-DS4EDT / EDITOR MATH CODE, ONLY LOADED / IN WHEN NOT IN LIST PROCESSING DLBLED ;HOLEPG ;CDF 60 ;-DSBLED/ load out editor blastr holes DLBEOV ;HOLEOV ;CDF 50 ;-DSBEOV/ Load out Extra Blast holes /a242 DLEHL2 ;HOLEOV ;CDF 60 ;-DSEHL2/ Load out one more hole block/M245/A243 0 / WPEDIT - EDITOR JOB ECMTH1= 06 / START OF MATH CODE ECMTH2= 206 / END OF MATH CODE RECBUF= 10 / Start of RECord_BUFfer in buffer field / (for List Processing) HDRBUF= 6000 / START OF EDIT FILE HEADER BUFFER HDRFSZ= 5 / # BLOCKS IN THIS FILE HDRPSZ= 15 / #LINES PER PAGE ETXBUF= HDRBUF+400 / ETX BUFFER STXBUF= ETXBUF+400 / STX BUFFER PSTEBF= STXBUF+400 / PASTE BUFFER PRTBUF= HDRBUF / MERGE-TO-PRINTER BUFFER PRTSIZ= STXBUF-PRTBUF / " " SIZE BUFEND= HDRBUF / END OF EDIT BUFFER +1 BASKET= PSTEBF / WASTEBASKET BASKSZ= 400 / WASTEBASKET CAPACITY PSTEBG= DLCUTB / FIRST PASTE BLOCK PSTEND= PSTEBG+36 / LAST PASTE BLOCK +1 CR= 15 LF= 12 WIDTH= 204 / WIDTH OF SCREEN COLLIM= 360 / M219 Display ruler out to 240 / RULSV2 displays out to 240 / RLADV1, RLINE1 limits advance to 238 HAFRUL= COLLIM-1%2 / A219 Limit ruler to 238 COLM80= 117 / 80TH COLUMN POINTER COLM81= COLM80+1 / A219 NPTRS= 30 / NUMBER OF SCREEN LINES AVAILABLE ON TERMINAL CURPOS= 46 / CURRENT HORIZ POSITION ON SCREEN LOWLIM= 47 / SCREEN'S CURRENT LOW LIMIT, / EITHER 0 OR 27 DECIMAL /*************************************************************************** /**** PAGE ZERO LOCATIONS USED BY STATUS LINE DISPLAY ROUTINE **** /*************************************************************************** CDFMYF= CDFMNU *170 LINFLG, 0 / LOCATION FOR STATUS DISPLAY MODE FLAG LINRUL, 0 / LOCATION FOR RULER DETECTED FLAG LINDIF, 0 / LOCATION FOR STATUS DIFFERENT FLAG LINPGL, 0 / LOCATION FOR CURRENT LOW ORDER PAGE NUMBER LINPGH, 0 / LOCATION FOR CURRENT HIGH ORDER PAGE NUMBER LINNUM, 0 / LOCATION FOR CURRENT LINE NUMBER LINUSD, 0 / LOCATION FOR NUMBER OF BLOCKS USED LINFRE, 0 / LOCATION FOR NUMBER OF BLOCKS FREE X=. / INDICATE FIRST FREE LOCATION ON PAGE /-------------------- PAGE RELOC / RESET RELOCATION MECHANISM OF ASSEMBLER *400 / SET LOCATION COUNT TO FREE AREA IN FIELD 0 RELOC SWPBEG / LOCATION FOR STATUS LINE CODE TO RUN DSKBLK=.-SWPBEG%400+DLSTAT / DISK BLOCK WHERE PAGE IS LOADED /*************************************************************************** /**** TRANSFER VECTOR ENTRY POINTS FOR EDITOR SWAP AREA ROUTINES **** /*************************************************************************** CALLN1, XX / ENTRY POINT FOR ROUTINE NUMBER 1 JMS CALSUB / SET UP RETURN ADDRESS AND RETURN FIELD JMS LINDSP / GO UPDATE STATUS LINE INFORMATION JMP CALXIT / GO TO RETURN TO CALLER CODE CALLN2, XX / ENTRY POINT FOR ROUTINE NUMBER 2 JMS CALSUB / SET UP RETURN ADDRESS AND RETURN FIELD JMS LINCHK / GO CHECK FOR STATUS VALUE CHANGES JMP CALXIT / GO TO RETURN TO CALLER CODE CALLN3, XX / ENTRY POINT FOR ROUTINE NUMBER 3 JMS CALSUB / SET UP RETURN ADDRESS AND RETURN FIELD JMS LINSDN / GO HANDLE SCROLL DOWN EVENT JMP CALXIT / GO TO RETURN TO CALLER CODE CALLN4, XX / ENTRY POINT FOR ROUTINE NUMBER 4 JMS CALSUB / SET UP RETURN ADDRESS AND RETURN FIELD JMS LINSUP / GO HANDLE SCROLL UP EVENT JMP CALXIT / GO TO RETURN TO CALLER CODE CALLN5, XX / ENTRY POINT FOR ROUTINE NUMBER 5 JMS CALSUB / SET UP RETURN ADDRESS AND RETURN FIELD JMS LINCOL / SPECIAL CHECK FOR STATUS VALUE CHANGES /C235 JMP CALXIT / GO TO RETURN TO CALLER CODE CALLN6, XX / ENTRY POINT FOR ROUTINE NUMBER 6 JMS CALSUB / SET UP RETURN ADDRESS AND RETURN FIELD NOP / PLACE FOR TRANSFER TO SPECIAL CODE JMP CALXIT / GO TO RETURN TO CALLER CODE CALLN7, XX / ENTRY POINT FOR ROUTINE NUMBER 7 JMS CALSUB / SET UP RETURN ADDRESS AND RETURN FIELD NOP / PLACE FOR TRANSFER TO SPECIAL CODE JMP CALXIT / GO TO RETURN TO CALLER CODE CALLN8, XX / ENTRY POINT FOR ROUTINE NUMBER 8 JMS CALSUB / SET UP RETURN ADDRESS AND RETURN FIELD NOP / PLACE FOR TRANSFER TO SPECIAL CODE JMP CALXIT / GO TO RETURN TO CALLER CODE CALLN9, XX / ENTRY POINT FOR ROUTINE NUMBER 9 JMS CALSUB / SET UP RETURN ADDRESS AND RETURN FIELD NOP / PLACE FOR TRANSFER TO SPECIAL CODE JMP CALXIT / GO TO RETURN TO CALLER CODE /*************************************************************************** /**** SET UP RETURN FIELD AND ADDRESS FOR CALLN# ROUTINES **** /*************************************************************************** CALSUB, XX / ROUTINE TO SET UP RETURN FIELD AND ADDRESS DCA LINFLG / SAVE CONTENTS OF ACCUMULATOR IN FLAG WORD RDF / READ CALLERS DATA FIELD TAD CIDF0 / MAKE CDF-CIF INSTRUCTION BACK TO CALLER DCA CALXIT / STORE FOR RETURN TO CALLER CDFMYF / SET DATA FIELD BACK TO MY FIELD AC7776 / SET UP TO SUBTRACT A VALUE OF TWO TAD CALSUB / MAKE POINTER TO VECTOR ENTRY POINT DCA T2 / STORE FOR USE IN AN INDIRECT LOOKUP TAD I T2 / PICK UP CALLERS RETURN ADDRESS DCA CALRTN / STORE ADDRESS FOR LATER RETURN TO CALLER JMP I CALSUB / GO TRANSFER TO SPECIALIZED ROUTINES CALXIT, XX / LOCATION FOR CDF-CIF INSTRUCTION TO CALLER JMP I CALRTN / RETURN BACK TO CALLER CALRTN, XX / LOCATION FOR CALLERS RETURN ADDRESS X=. / INDICATE FIRST FREE LOCATION ON PAGE /-------------------- PAGE DSKBLK=.-SWPBEG%400+DLSTAT / DISK BLOCK WHERE PAGE IS LOADED /*************************************************************************** /**** THE CODE ASSEMBLED HERE IS USED BY THE EDITOR FOR STATUS LINE **** /*************************************************************************** LINCOL, XX / SPECIAL CHECK FOR STATUS VALUE CHANGES /A235 TAD I (MUBUF+MNSTAT) / PICK UP THE NUMBER OF STATUS LINES /A235 SNA CLA / ARE WE DISPLAYING STATUS INFORMATION /A235 JMP I LINCOL / NO, RETURN TO CALLER /A235 CDFEDT / CHANGE TO EDIT FIELD /A235 TAD I (GSRF) / PICK UP THE GLOBAL SEARCH FLAG /A235 CDFMYF / RESET BACK TO THIS FIELD /A235 SZA CLA / ARE WE DOING A GLOBAL SEARCH & REPLACE/A235 JMP LINPOS / YES, GO UPDATE COLUMN INFORMATION /A235 JMS LINCHK / GO CHECK FOR STATUS VALUE CHANGES /A235 AC7775 / SET UP FOR A COUNT OF THREE /A235 DCA T2 / STORE IN COUNTER REGISTER /A235 LINLOP, CIFSYS / CHANGE TO SYSTEM FIELD /A235 JWAIT / WAIT FOR A SIGNIFICANT EVENT /A235 CIFSYS / CHANGE TO SYSTEM FIELD /A235 XLTIN / GET A CHARACTER FROM KEYBOARD BUFFER /A235 JMP LINNCH / NO CHARACTERS AVAILABLE, SKIP AROUND /A235 ISZ CALRTN / GOT ONE, BUMP RETURN ADDRESS /A235 JMP I LINCOL / RETURN TO CALLER /A235 LINNCH, ISZ T2 / INCREMENT THE COUNTER /A235 JMP LINLOP / NOT DONE, GO WAIT SOME MORE /A235 LINPOS, TAD LINCUR / PICK UP THE LAST DISPLAYED POSITION /A235 DCA T2 / SAVE FOR LATER COMPARE /A235 CDFEDT / CHANGE TO EDIT FIELD /A235 TAD I (CURSOR) / PICK UP THE CURRENT CURSOR POSITION /A235 CDFMYF / RESET BACK TO THIS FIELD /A235 IAC / BUMP TO REAL VALUE /A235 DCA LINCUR / SAVE THE VALUE FOR DISPLAY /A235 TAD LINCUR / PICK UP THE COLUMN POSITION /A235 CIA / MAKE IT NEGATIVE /A235 TAD T2 / COMBINE WITH PREVIOUS VALUE /A235 SNA CLA / ARE THEY THE SAME ? /A235 JMP I LINCOL / YES, DON'T REDISPLAY, RETURN TO CALLER/A235 JMS I IOACAL / CALL IOA TO DISPLAY THE VALUE /A235 0 / USE DEFAULT IOA OUTPUT ROUTINE /A235 LINST1 / CONTROL STRING TO DISPLAY VALUE /A235 24 / SCREEN POSITION /A235 LINREV / SELECT REVERSE VIDEO IF SPECIFIED /A235 LINCUR, XX / LOCATION FOR CURRENT CURSOR POSITION /A235 JMP I LINCOL / RETURN TO CALLER /A235 LINCLR, XX / ROUTINE TO CLEAR SCREEN AND SET VALUES JMS I IOACAL / CALL IOA TO CLEAR THE SCREEN 0 / USE DEFAULT IOA OUTPUT ROUTINE LINST2 / CLEAR SCREEN AND SCROLL AREA /C235 TAD LINTXT / GET POINTER TO CURRENT TEXT SIZE CIFFIO / CHANGE TO FILE SYSTEM FIELD FILEIO / CALL FILE SYSTEM TO GET HEADER VALUE XHDRGT / GET VALUE FROM HEADER FUNCTION WORD DCA LINSIZ / STORE VALUE OF CURRENT TEXT SIZE CDFFIO / CHANGE TO FILE SYSTEM FIELD TAD I (SCFSPC) / GET NUMBER OF BLOCKS LEFT ON DISK CDFMYF / CHANGE BACK TO MENU FIELD DCA T3 / SAVE NUMBER OF FREE BLOCKS IN TMP / THE VALUE STORED IN LINFRE IS USED AS A FLAG TO INDICATE THAT THE MID SCREEN / DOCUMENT HEADER INFORMATION SHOULD BE DISPLAYED ON THE SCREEN. IF THE VALUE / OF LINFRE IS ZERO, IT INDICATES THAT THE NUMBER OF FREE BLOCKS REMAINING ON / THE DISKETTE HAS NOT BEEN UPDATED WHICH HAPPENS AT DOCUMENT OPEN TIME AND / THAT THE MID SCREEN DATA IS REQUIRED. / / THERE IS A CASE WHERE LINFRE HAS NOT BEEN UPDATED AND THE MID SCREEN / INFORMATION IS NOT WANTED. WHEN THIS HAPPENS, THE VLAUE OF THE OPERATION / FLAG WORD STORED IN LINFLG IS A THREE WHICH MEANS THAT ONLY A CLEAR SCREEN / IS DESIRED. A VALID TEST IS MADE BY COMBINING THE VALUES OF BOTH WORDS. TAD LINFLG / GET FLAG WORD FOR CURRENT OPERATION TAD LINFRE / GET LAST VALUE OF BLOCKS FREE SNA CLA / HAS IT BEEN INITIALIZED AND LINFLG=0 JMP LINMID / NO, GO DISPLAY MIDDLE LINES OF SCREEN TAD T3 / GET CURRENT BLOCKS FREE CIA / NEGATE VALUE FOR CHECK TAD LINFRE / COMBINE WITH LAST VALUE OF BLOCKS FREE TAD LINUSD / ADD RESIDUE TO NUMBER OF BLOCKS USED DCA LINUSD / STORE UPDATED NUMBER OF BLOCKS USED JMP LINSET / GO STORE CURRENT VALUE OF BLOCKS FREE LINMID, JMS I IOACAL / CALL IOA TO DISPLAY MID SCREEN DATA 0 / USE DEFAULT IOA OUTPUT ROUTINE LINST3 / CONTROL STRING FOR TEXT DISPLAY IFDEF CONDOR < 710 > / LOCATION FOR DOCUMENT NAME /C202 IFNDEF CONDOR < 310 > / COMPROMISE VALUE, WORKS IN BOTH /A202 / WIDE SCREEN & NORMAL MODES FOR DMI /A202 MUBUF+MNDRV / MENU LOCATION FOR DRIVE NUMBER MUBUF+MNDOCN / MENU LOCATION FOR DOC NUMBER MUBUF+MNFNAM / MENU LOCATION FOR DOC NAME IFDEF CONDOR < 1110 > / LOCATION FOR FIRST SCREEN LINE /C202 IFNDEF CONDOR < 510 > / COMPROMISE VALUE, WORKS IN BOTH /A202 / WIDE SCREEN & NORMAL MODES FOR DMI /A202 LINUSD / LOCATION FOR BLOCKS USED VALUE IFDEF CONDOR < 1310 > / LOCATION FOR SECOND SCREEN LINE /C202 IFNDEF CONDOR < 710 > / COMPROMISE VALUE, WORKS IN BOTH /A202 / WIDE SCREEN & NORMAL MODES FOR DMI /A202 T3 / LOCATION FOR BLOCKS FREE VALUE IFDEF CONDOR < 1510 > / LOCATION FOR THIRD SCREEN LINE /C202 IFNDEF CONDOR < 1110 > / COMPROMISE VALUE, WORKS IN BOTH /A202 / WIDE SCREEN & NORMAL MODES FOR DMI /A202 LINSIZ / LOCATION FOR CURRENT TEXT SIZE VALUE LINSET, TAD T3 / GET CURRENT NUMBER OF BLOCKS FREE DCA LINFRE / STORE UPDATED NUMBER OF BLOCKS FREE AC7775 / SET UP FOR A DECREMENT TAD I (MUBUF+MNSTAT) / PICK UP NUMBER OF STATUS LINES SMA CLA / CHECK FOR A ONE OR TWO LINE TOP AREA IAC / BUMP UP TO A TWO LINE AREA TAD LINTWO / SET UP FOR A ONE OR TWO LINE TOP AREA DCA LINAD1 / STORE FOR USE WITH IOA CALL AC7776 / SET UP FOR A DECREMENT TAD I (MUBUF+MNSTAT) / PICK UP NUMBER OF STATUS LINES SPA CLA / CHECK FOR A RULER LINE AREA IAC / NO RULER, BUMP UP TO FULL SCREEN TAD ("3) / SET UP RULER AREA IF SPECIFIED DCA LINAD2 / STORE FOR USE WITH IOA CALL DCA LINCUR / CLEAR COLUMN POSITION FOR REDISPLAY /A235 JMP I LINCLR / RETURN BACK TO CALLER LINTXT, 15-2 / POINTER TO HEADER CURRENT TEXT SIZE LINSTE, TEXT '!Y' / RESTORE CURSOR ATTRIBUTES LINSTF, TEXT '![(&^S^A![[?6H' / SELECT LANGUAGE & RELITIVE MODE /C235 / ESC [ ? 6 h / SELECT RELITIVE ORIGIN MODE /C235 LINSTG, ESC; "[ / START SELECTION OF SCROLL REGION /C224 LINAD1, "2; "; / FIRST ROW OF SCROLL REGION 2 OR 3 LINTWO, "2 LINAD2, "3; "r / LAST ROW OF SCROLL REGION AT 23 OR 24 0 / ASCII STRING TERMINATOR X=. / INDICATE FIRST FREE LOCATION ON PAGE /-------------------- PAGE DSKBLK=.-SWPBEG%400+DLSTAT / DISK BLOCK WHERE PAGE IS LOADED /*************************************************************************** /**** THE CODE ASSEMBLED HERE IS USED BY THE EDITOR FOR STATUS LINE **** /*************************************************************************** / LINDSP ROUTINE IS USED TO DISPLAY THE STATUS LINE INFORMATION IN THE EDITOR / / THE STATUS LINE AREA CONSISTS OF ONE OR TWO OR THREE LINES AS FOLLOWS: / LINE 1 = TOP LINE OF SCREEN - CURRENT PAGE NUMBER, CURRENT LINE NUMBER, / DRIVE NUMBER, DOCUMENT NUMBER AND DOCUMENT NAME BEING EDITED / LINE 2 = (IF SPECIFIED) A GRAPHICS BAR UNDER LINE ONE / LINE 24 = (IF SPECIFIED) CURRENT RULER IN EFFECT FOR EDITING / / PRIOR TO ENTRY, THE VALUE CONTAINED IN MNSTAT DETERMINES TYPE OF STATUS / DISPLAYED AS FOLLOWS: / / MNSTAT = 0 NO STATUS DISPLAYED WHILE EDITING / MNSTAT = 1 REVERSE VIDEO TOP STATUS LINE ONLY / MNSTAT = 2 REVERSE VIDEO TOP STATUS LINE AND CURRENT RULER / MNSTAT = 3 TOP STATUS LINE WITH GRAPHICS BAR AND CURRENT RULER / / UPON ENTRY, THE VALUE CONTAINED IN THE AC DETERMINES FUNCTION AS FOLLOWS: / / AC = 0 CLEAR THE SCREEN AND DISPLAY COMPLETE STATUS AREA / DEFINE SCROLLING REGION AND SET RELITIVE SCREEN ADDRESSING / AC = 1 UPDATE DISPLAY OF TOP STATUS LINE ONLY / AC = 2 UPDATE DISPLAY OF BOTTOM STATUS LINE ONLY (DISPLAY RULER) / AC = 3 CLEAR THE SCREEN AND RESET SCROLLING AREA TO FULL SCREEN LINDSP, XX / DISPLAY STATUS LINE ROUTINE TAD LINFLG / GET STATUS DISPLAY MODE FLAG SZA / CHECK FOR DISPLAY ALL MODE TAD LINM3 / NO, CHECK FOR SCREEN CLEAR & RESET SNA CLA / WAS SCREEN CLEAR & RESET REQUESTED JMS LINCLR / YES, GO CLEAR SCREEN AND SET VALUES TAD I (MUBUF+MNSTAT) / PICK UP NUMBER OF STATUS LINES SNA / CHECK TO SEE IF STATUS AREA IS ACTIVE JMP LINXIT / NO, STATUS IS NOT ACTIVE, RETURN TO CALLER TAD LINM3 / DECREMENT THE COUNT SMA CLA / CHECK FOR TOP LINE TO BE REVERSE VIDEO AC0004 / NO REVERSE VIDEO, BUMP ADDRESS TO NULL POINT TAD (LINST5) / PICK UP ADDRESS OF REVERSE VIDEO STRING DCA LINREV / STORE FOR USE WITH IOA CALLS TAD LINFLG / GET STATUS DISPLAY MODE FLAG SZA CLA / CHECK FOR DISPLAY ALL MODE JMP LINTOP / NO, GO CHECK FOR TOP LINE JMS I IOACAL / CALL IOA TO DISPLAY TOP REVERSE VIDEO LINE 0 / USE DEFAULT IOA DISPLAY ROUTINE LINST4 / DISPLAY REVERSE VIDEO AREA AND DOC NAME 0 / SCREEN POSITION FOR REVERSE SPACE LINREV / SELECT REVERSE VIDEO IF SPECIFIED LINST6 / DISPLAY 27 REVERSE SPACE CHARACTERS LINST6 / DISPLAY 27 REVERSE SPACE CHARACTERS LINST6 / DISPLAY 27 REVERSE SPACE CHARACTERS LINST6 / DISPLAY 27 REVERSE SPACE CHARACTERS LINST6 / DISPLAY 27 REVERSE SPACE CHARACTERS 41 / SCREEN POSITION FOR DOCUMENT NAME/C254/C235 MUBUF+MNDRV / MENU LOCATION FOR DRIVE NUMBER MUBUF+MNDOCN / MENU LOCATION FOR DOC NUMBER MUBUF+MNFNAM / MENU LOCATION FOR DOC NAME LINTOP, TAD LINFLG / GET STATUS DISPLAY MODE FLAG SZA / CHECK FOR DISPLAY ALL MODE TAD LINM1 / NO, CHECK FOR TOP LINE SZA CLA / IS IT JUST THE TOP LINE JMP LINBOT / NO, GO CHECK FOR BOTTOM LINE DCA LINDIF / CLEAR STATUS DIFFERENT FLAG JMS I IOACAL / CALL IOA TO START DISPLAY OF TOP LINE 0 / USE DEFAULT IOA OUTPUT ROUTINE LINST7 / SAVE CURSOR, SET ABSOLUTE, DISPLAY PAGE /C235 0 / SCREEN POSITION FOR PAGE LINREV / SELECT REVERSE VIDEO IF SPECIFIED TAD LINPGH / GET VALUE OF HIGH ORDER PAGE NUMBER SNA CLA / DO WE HAVE A THOUSAND PAGES ? JMP LINLOW / NO, JUST PUT UP LOW ORDER PAGE NUMBER JMS I IOACAL / CALL IOA TO DISPLAY THOUSANDS NUMBER 0 / USE DEFAULT IOA OUTPUT ROUTINE LINST9 / THOUSANDS NUMBER CONTROL STRING LINPGH / HIGH ORDER PAGE NUMBER LINPGL / LOW ORDER PAGE NUMBER JMP LINLIN / CONTINUE WITH LINE DISPLAY LINLOW, JMS I IOACAL / CALL IOA TO DISPLAY LOW PAGE NUMBER 0 / USE DEFAULT IOA OUTPUT ROUTINE LINSTA / HUNDREDS CONTROL STRING AND LINE NUMBER LINPGL / LOW ORDER PAGE NUMBER LINLIN, JMS INOVDP / Go display Insert-Overstrike /A254 JMS I IOACAL / CALL IOA TO START THE LINE DISPLAY 0 / USE DEFAULT IOA OUTPUT ROUTINE LINSTB / CONTROL STRING FOR LINE DISPLAY 11 / SCREEN POSITION FOR LINE /C235 TAD LINNUM / PICK UP THE CURRENT LINE NUMBER SNA CLA / IS THE LINE NUMBER DEFINED ? JMP LINUKN / NO, GO PUT UP "N/A" MESSAGE JMS I IOACAL / CALL IOA TO DISPLAY LINE NUMBER 0 / USE DEFAULT IOA OUTPUT ROUTINE LINSTC / DISPLAY LINE NUMBER LINNUM / POINTER TO CURRENT LINE NUMBER 21 / SCREEN POSITION FOR COLUMN POSITION /C235 JMP LINBOT / GO CHECK FOR BOTTOM LINE LINUKN, JMS I IOACAL / CALL IOA TO DISPLAY "N/A" MESSAGE 0 / USE DEFAULT IOA OUTPUT ROUTINE LINSTD / DISPLAY "N/A" LINBOT, TAD LINFLG / GET STATUS DISPLAY MODE FLAG SZA / CHECK FOR DISPLAY ALL MODE TAD LINM2 / NO, CHECK FOR BOTTOM LINE RULER SNA CLA / WAS BOTTOM LINE RULER REQUESTED TAD I (MUBUF+MNSTAT) / YES, PICK UP NUMBER OF STATUS LINES TAD LINM2 / DECREMENT THE COUNT SPA CLA / WAS BOTTOM LINE RULER SPECIFIED JMP LINSAM / NO, GO CHECK IF SETUP IS NEEDED DCA LINRUL / CLEAR RULER DETECTED FLAG JMS I IOACAL / CALL IOA TO DISPLAY BOTTOM LINE 0 / USE DEFAULT IOA OUTPUT ROUTINE LINST8 / SAVE CURSOR & SET ABSOLUTE ADDRESSING /C235 CDFEDT / CHNAGE TO EDIT FIELD TAD (NPTRS) / PICK UP VALUE FOR MAXIMUM SCREEN LINES DCA I (SCRNLN) / STORE MAX VALUE FOR PCUR ROUTINE /D220 CDFMYF / CHANGE BACK TO THIS FIELD /D220 CIFEDT / SET UP TO GO TO THE EDITOR FIELD /D220 JMS I (CALLAR) / CALL A ROUTINE IN THE EDITOR /D220 DSPCUR / ROUTINE TO DISPLAY THE CURRENT RULER /M196 /D220 CDFBUF / DATA FIELD TO USE FOR ROUTINE CDIEDT / SET UP TO GO TO THE EDITOR FIELD /A220 JMS I (DSPCUR) / ROUTINE TO DISPLAY THE CURRENT RULER /A220 JMS I IOACAL / CALL IOA TO FINISH DISPLAY OF BOTTOM LINE 0 / USE DEFAULT IOA OUTPUT ROUTINE LINSTE / RESTORE CURSOR ATTRIBUTES LINSAM, TAD LINFLG / GET STATUS DISPLAY MODE FLAG SZA CLA / CHECK FOR DISPLAY ALL MODE JMP LINXIT / NOT ZERO, MUST BE ALL DONE TAD I (MUBUF+MNSTAT) / PICK UP NUMBER OF STATUS LINES TAD LINM3 / DECREMENT COUNT OF NUMBER OF LINES SMA CLA / CHECK FOR ONLY ONE TOP LINE JMS LINBAR / NO, GO PUT UP GRAPHICS LINE JMS I IOACAL / CALL IOA TO SET UP SCROLL AREA AND MODE 0 / USE DEFAULT IOA DISPLAY ROUTINE LINSTF / CONTROL STRING TO SET AREA AND MODE /C224 MNLANG+MUBUF / POINTER TO LANGUAGE WORD /A224 LINSTG / SET SCROLL AREA, RELITIVE MODE /C224 LINXIT, TAD I (MUBUF+MNSTAT) / PICK UP NUMBER OF STATUS LINES CIA / NEGATE THE VALUE FOR A SUBTRACT TAD (NPTRS) / PICK UP VALUE FOR MAXIMUM SCREEN LINES CDFEDT / CHANGE TO EDIT FIELD DCA I (SCRNLN) / STORE NUMBER OF LINES IN SCROLL AREA CDFMYF / RESET BACK TO THIS FIELD JMP I LINDSP / RETURN TO CALLER LINREV, 0 / POINTER TO REVERSE VIDEO STRING LINSIZ, 0 / LOCATION FOR CURRENT TEXT SIZE LINM1, -1 / VALUE TO CHECK FOR TOP LINE LINM2, -2 / VALUE TO CHECK FOR BOTTOM LINE LINM3, -3 / VALUE TO CHECK FOR SCREEN RESET X=. / INDICATE FIRST FREE LOCATION ON PAGE /-------------------- PAGE DSKBLK=.-SWPBEG%400+DLSTAT / DISK BLOCK WHERE PAGE IS LOADED TRANTP=. / TOP OF TRANSLATIONS /A258 LINST1, TEXT '!X^P!A^D !Y' / CONTROL STRING FOR COLUMN NUMBER /C235 LINST2, TEXT '![[?6L![[2&J![[R' / SEQUENCES DESCRIBED BELOW /C235 / ESC [ ? 6 l / SET ABSOLUTE ADDRESSING MODE /C235 / ESC [ 2 J / ERASE ENTIRE SCREEN /C235 / ESC [ r / CLEAR SCROLLING REGION /C235 LINST3, IFDEF ENGLSH < TEXT '^P&DOCUMENT: (!D.!D) !A '; *.-1 TEXT '^P&BLOCKS USED: !D '; *.-1 TEXT '^P&BLOCKS REMAINING: !D '; *.-1 TEXT '^P&TEXT SIZE: !D LINES' > IFDEF V30NOR < TEXT '^P&DOKUMENT: (!D.!D) !A '; *.-1 TEXT '^P&BRUKTE BLKR: !D '; *.-1 TEXT '^P&LEDIGE BLKR: !D '; *.-1 TEXT '^P&TEKSTSTR.: !D LINJER' > IFDEF V30SWE < TEXT '^P&DOKUMENT: (!D.!D) !A '; *.-1 TEXT '^P&ANV\DNDA BLK: !D '; *.-1 TEXT '^P&LEDIGA BLK: !D '; *.-1 TEXT '^P&TEXTSTORLEK.: !D RADER' > IFDEF SPANISH < /NB: NEEDS XLATING/A255 TEXT '^P&DOC.: (!D.!D) !A '; *.-1 TEXT '^P&BLQS USADOS: !D'; *.-1 TEXT '^P&BLQS SIN USAR: !D'; *.-1 TEXT '^P&TATA\QO DEL TEXTOS: !D L\MNS' > IFDEF ITALIAN < TEXT '^P&DOCUMENTO: (!D.!D) !A '; *.-1 TEXT '^P&BLOCCHI USATI: !D '; *.-1 TEXT '^P&BLOCCHI LIBERI: !D '; *.-1 TEXT '^P&DIMENSIONE: !D RIGHE' > IFDEF DUTCH < TEXT '^P&DOC: (!D.!D) !A'; *.-1 TEXT '^P&GEBRUIKTE BLOKKEN: !D '; *.-1 TEXT '^P&VRIJE BLOKKEN: !D '; *.-1 TEXT '^P®ELS / PAGINA: !D LINES' > LINST4, IFNDEF V30NOR < IFNDEF V30SWE < TEXT '!X^P!A^S^S^S^S^S^P&DOC: (!D.!D) !A!Y' /C235 > > IFDEF V30NOR < TEXT '!X^P!A^S^S^S^S^S^P&DOK: (!D.!D) !A!Y' /C235 > IFDEF V30SWE < TEXT '!X^P!A^S^S^S^S^S^P&DOK: (!D.!D) !A!Y' /C235 > LINST5, ESC; "[; "7; "m / SELECT REVERSE VIDEO 0 / ASCII STRING TERMINATOR LINST6, TEXT ' ' / GRAPHICS BAR CHARACTER LINST7, TEXT '!X^P!A&P: ' / SAVE CURSOR, SET ABSOLUTE, DISPLAY PAGE /C235 LINST8, TEXT '!X' / SAVE CURSOR, SET ABSOLUTE /C235 LINST9, TEXT '!D!3D' LINSTA, TEXT '!D' LINSTB, IFDEF ENGLSH IFDEF V30NOR IFDEF V30SWE IFDEF SPANISH /A255 IFDEF ITALIAN IFDEF DUTCH LINSTC, IFDEF ENGLSH /C235 IFDEF V30NOR /C235 IFDEF V30SWE /C235 IFDEF SPANISH /A255 IFDEF ITALIAN /C235 IFDEF DUTCH /C235 IFDEF ENGLSH / LINE NUMBER NOT AVAILABLE /C235 IFDEF V30NOR / LINE NUMBER NOT AVAILABLE /C235 IFDEF V30SWE / LINE NUMBER NOT AVAILABLE /C235 IFDEF SPANISH / LINE NUMBER NOT AVAILABLE/A255 IFDEF DUTCH / LINE NUMBER NOT AVAILABLE /C235 X=. / INDICATE FIRST FREE LOCATION ON PAGE XTRLIN=200-.-TRANTP /-------------------- PAGE IFNZRO .-TRANTP-200 /A258 DSKBLK=.-SWPBEG%400+DLSTAT / DISK BLOCK WHERE PAGE IS LOADED /*************************************************************************** /**** EDITOR HOOKS FOR STATUS LINE DISPLAY **** /*************************************************************************** / CHECK STATUS CHANGE CALLED FROM THE HALT TEST ROUTINE IN LP FIELD AND BY / THE GET CHARACTER ROUTINE IN MGOVLY. / / THIS ROUTINE CHECKS TO SEE IF ANY OF THE DISPLAY / LOCATIONS OF THE STATUS LINE HAVE CHANGED SINCE / LAST CHECKED AND IF SO WILL DISPLAY THE NEW VALUES. LINCHK, XX / CHECK FOR STATUS VALUE CHANGE TAD LINDIF / PICK UP THE STATUS DIFFERENT FLAG SNA CLA / HAS THE TOP LINE OF STATUS CHANGED ? JMP LINCK1 / NO, GO UPDATE PRINTER STATUS AND TIME AC0001 / SET UP TO DISPLAY THE TOP STATUS LINE DCA LINFLG / STORE IN STATUS DISPLAY MODE FLAG JMS LINDSP / GO DISPLAY A NEW TOP STATUS LINE LINCK1, TAD LINRUL / PICK UP THE RULER DETECTED FLAG SNA CLA / HAS A RULER BEEN DETECTED ? JMP I LINCHK / NO, GO RETURN TO CALLER AC0002 / YES, DISPLAY THE BOTTOM STATUS LINE DCA LINFLG / STORE IN STATUS DISPLAY MODE FLAG JMS LINDSP / GO DISPLAY THE NEW RULER JMP I LINCHK / RETURN TO CALLER /*************************************************************************** /**** HANDLE SCROLL DOWN AND SCROLL UP EVENTS FOR STATUS LINE DISPLAY **** /*************************************************************************** LINSDN, XX / HANDLE SCROLL DOWN EVENT JMS LINTST / GO CHECK FOR SPECIAL CHRACTER JMP LINDNP / NEW PAGE OR PAGE MARKER DETECTED JMP LINDNR / RULER DETECTED - CHECK FOR TOP OF DOCUMENT JMP I LINSDN / IGNORE LINE - RETURN TO CALLER AC7777 / SET UP TO DECREMENT THE COUNT TAD LINNUM / COMBINE WITH CURRENT LINE COUNT DCA LINNUM / STORE NEW LINE COUNT JMP LINDNX / DONE WITH LINE, GO SET STATUS CHANGED FLAG LINDNP, AC7777 / SET UP TO DECREMENT THE COUNT TAD LINPGL / COMBINE WITH CURRENT LOW ORDER PAGE COUNT SMA / DID WE GO NEGATIVE ? JMP LINDNL / NO, THEN GO STORE NEW LOW ORDER PAGE NUMBER AC7777 / SET UP TO DECREMENT THE COUNT TAD LINPGH / COMBINE WITH CURRENT HIGH ORDER PAGE COUNT DCA LINPGH / STORE NEW HIGH ORDER PAGE COUNT TAD (1747) / PICK UP RESET VALUE OF 999 LINDNL, DCA LINPGL / STORE NEW LOW ORDER PAGE COUNT LINDNS, DCA LINNUM / MAKE LINE NUMBER "UNKNOWN" LINDNX, AC0001 / DONE WITH PAGE DCA LINDIF / SET STATUS CHANGED FLAG JMP I LINSDN / RETURN TO CALLER LINDNR, CDFEDT / CHANGE TO EDITOR DATA FIELD TAD I (PTRBLK+NPTRS-3)/ GET POINTER TO THIRD FROM LAST LINE CDFMYF / RESET BACK TO THIS FIELD SZA CLA / IS THIS THE TOP OF DOCUMENT JMP I LINSDN / NO, IGNORE RULER - RETURN TO CALLER AC0001 / YES, SET UP TO INITIALIZE THE COUNT JMP LINDNS / GO SET LINE NUMBER TO FIRST LINE LINSUP, XX / HANDLE SCROLL UP EVENT JMS LINTST / GO CHECK FOR SPECIAL CHRACTER JMP LINUPP / NEW PAGE OR PAGE MARKER DETECTED JMP I LINSUP / IGNORE RULER - RETURN TO CALLER JMP I LINSUP / IGNORE LINE - RETURN TO CALLER AC0001 / SET UP TO INCREMENT THE COUNT TAD LINNUM / COMBINE WITH CURRENT LINE COUNT DCA LINNUM / STORE NEW LINE COUNT JMP LINUPX / DONE WITH LINE, GO SET STATUS CHANGED FLAG LINUPP, TAD LINPGL / PICK UP CURRENT LOW ORDER PAGE NUMBER TAD (-1747) / COMBINE WITH NEGATIVE 999 PAGE COUNT SPA CLA / ARE WE AT LOW ORDER PAGE NUMBER 999 JMP LINUPL / GO INCREMENT LOW ORDER PAGE COUNT AC0001 / SET UP TO INCREMENT THE COUNT TAD LINPGH / COMBINE WITH CURRENT HIGH ORDER PAGE COUNT DCA LINPGH / STORE NEW HIGH ORDER PAGE COUNT JMP LINUPH / GO CLEAR LOW ORDER PAGE COUNT LINUPL, AC0001 / SET UP TO INCREMENT THE COUNT TAD LINPGL / COMBINE WITH CURRENT LOW ORDER PAGE COUNT LINUPH, DCA LINPGL / STORE NEW LOW ORDER PAGE COUNT AC0001 / SET UP TO INITIALIZE THE COUNT DCA LINNUM / SET LINE NUMBER TO FIRST LINE LINUPX, AC0001 / DONE WITH PAGE DCA LINDIF / SET STATUS CHANGED FLAG JMP I LINSUP / RETURN TO CALLER /*************************************************************************** /**** SUBROUTINE TO TEST VALUES FOR SPECIAL CHARACTERS **** /*************************************************************************** / THIS SUBROUTINE IS THE HEART OF THE STATUS LINE PAGE AND LINE NUMBER CHECK. / IT WORKS ON THE BASIS OF DETERMINING WHAT CHARACTER IS AT THE START OF THE / NEXT TO LAST LINE ON THE SCREEN BEFORE A SCROLL DOWN OPERATION AND AFTER A / SCROLL UP OPERATION. / / THIS ROUTINE WILL GENERATE MULTIPLE EXIT RETURNS BASED ON THE VALUE OF THE / CHARACTER AT THE START OF THE NEXT TO LAST LINE AND THE VALUE OF THE CONTROL / BLOCK FLAG AND ON THE VALUE OF THE LINE NUMBER AS FOLLOWS: / THE FIRST RETURN WILL BE THE DETECTION OF A VALID PAGE INDICATOR / THIS MEANS THAT IT IS TIME TO INCREMENT OR DECREMENT THE PAGE NUMBER / / THE SECOND RETURN WILL INDICATE THAT A START OF RULER HAS BEEN FOUND / / THE THIRD RETURN WILL INDICATE THAT THE CURRENT LINE SHOULD BE / IGNORED AND NOT COUNTED / / THE FOURTH RETURN WILL INDICATE THAT THE LINE IS A PRINTABLE LINE AND / THAT THE LINE NUMBER SHOULD BE INCREMENTED OR DECREMENTED LINTST, XX / TEST FOR SPECIAL CHARACTERS CDFEDT / CHANGE TO EDITOR DATA FIELD TAD I (PTRBLK+NPTRS-2)/ POINTER TO START OF NEXT TO LAST LINE DCA T1 / STORE POINTER INTO BUFFER FIELD CDFBUF / CHANGE TO BUFFER FIELD TAD I T1 / GET CHARACTER TO BE TESTED CDFMYF / RESET BACK TO THIS FIELD TAD (-ECPMRK) / CHECK FOR A PAGE MARKER SZA / SKIP IF THERE IS A MATCH TAD (ECPMRK-ECNWPG) / CHECK FOR A NEW PAGE SNA / SKIP IF THERE IS NO MATCH JMP I LINTST / PAGE DETECTED, TAKE FIRST RETURN ISZ LINTST / BUMP RETURN UP TO NEXT EXIT POINT TAD (ECNWPG-ECSTRL) / CHECK FOR A START OF RULLER SZA / IS THIS THE START OF A RULER ? JMP LINTS1 / NO, CONTINUE WITH THE TEST AC0001 / YES, THIS IS A RULER DCA LINRUL / SET RULER DETECTED FLAG JMP I LINTST / RULER DETECTED, TAKE SECOND RETURN LINTS1, ISZ LINTST / BUMP RETURN UP TO NEXT EXIT POINT TAD (ECSTRL-ECPCT1) / CHECK FOR A START CONTROL SZA / SKIP IF THERE IS A MATCH TAD (ECPCT1-ECPCT2) / CHECK FOR AN END CONTROL SZA CLA / SKIP IF THERE IS A MATCH TAD LINNUM / CHECK IF LINE NUMBER IS DEFINED SNA CLA / SKIP IF CONDITIONS VALID SO FAR JMP I LINTST / IGNORE LINE, TAKE THIRD RETURN CDFEDT / CHANGE TO EDITOR DATA FIELD TAD I (PCTLFL) / PICK UP VALUE FOR CONTROL BLOCK FLAG CDFMYF / RESET BACK TO THIS FIELD SNA CLA / IF SET THEN TAKE IGNORE LINE RETURN ISZ LINTST / BUMP RETURN UP TO COUNT THE LINE RETURN JMP I LINTST / RETURN BACK TO CALLER / Moved here for space reasons IFDEF ITALIAN < LINSTD, TEXT '&N/&D &C:!Y'>/ LINE NUMBER NOT AVAILABLE /C235 X=. / INDICATE FIRST FREE LOCATION ON PAGE /-------------------- PAGE DSKBLK=.-SWPBEG%400+DLSTAT / DISK BLOCK WHERE PAGE IS LOADED LINBAR, XX / ROUTINE TO PUT UP THE SECOND STATUS LINE JMS I IOACAL / CALL IOA TO DISPLAY GRAPHICS LINE 0 / USE DEFAULT IOA DISPLAY ROUTINE LINSTX / DISPLAY GRAPHICS LINE /C235 100 / SCREEN POSITION FOR GRAPHICS LINE LINSTY / DISPLAY 27 GRAPHIC LINE CHARACTERS /C235 LINSTY / DISPLAY 27 GRAPHIC LINE CHARACTERS /C235 LINSTY / DISPLAY 27 GRAPHIC LINE CHARACTERS /C235 LINSTY / DISPLAY 27 GRAPHIC LINE CHARACTERS /C235 LINSTY / DISPLAY 27 GRAPHIC LINE CHARACTERS /C235 JMP I LINBAR / ALL DONE, RETURN TO CALLER / / This routine displays OVRSTK if the user toggles the /A254 / Insert-Overstrike Key into Overstrike /A254 / INOVDP, XX /A254 CLA / Just in case /A254 CDFEDT / Point to Edit Field /A254 TAD I (INSOVF) / Get Insert-Overstrike Flag /A254 CDFMYF / Point back here /A254 SNA CLA / 0 for Ins , 1 for Over /A254 JMP INCLR / Clear screen /A254 INDPOV, JMS I IOACAL / Call display /A254 0 / default /A254 OVTOVS / Text for OVRSTK /A254 31 / Col Pos /A254 JMP I INOVDP / Bi Bi /A254 INCLR, JMS I IOACAL / Call display /A254 0 / default /A254 OVTCLR / Clear message /A254 31 / Col Pos /A254 JMP I INOVDP / Bi Bi /A254 OVTCLR, TEXT '^P ' /A254 OVTOVS, TEXT '^P![[1M&OVRSTK![[22M' /A254 LINSTX, TEXT '^P!CN^S^S^S^S^S!CO' / SEQUENCE DESCRIBED BELOW /C235 / ESC ( 0 / SELECT GRAPHICS CHARACTER SET /C235 LINSTY, TEXT 'QQQQQQQQQQQQQQQQQQQQQQQQQQQ' / GRAPHICS LINE CHARACTER /C235 X=. / INDICATE FIRST FREE LOCATION ON PAGE /-------------------- PAGE DSKBLK=.-SWPBEG%400+DLSTAT / DISK BLOCK WHERE PAGE IS LOADED / /A207 /++ /A207 / CALSWAP CALL_A_ROUTINE IN EDITOR SWAP AREA /A207 / /A207 /FUNTIONAL DESCRIPTION: CALSWAP /A207 / /A207 / THIS ROUTINE CAN BE USED TO CALL ANY SUBROUTINE IN THE EDITOR SWAP /A207 / AREA FROM ANY FIELD IN THE SYSTEM AS LONG AS THE EDITOR SWAP AREA /A207 / SUBROUTINE MAKES ONLY A NORMAL OR SKIP RETURN. /A207 / /A207 /CALLING SEQUENCE: CIFMNU (DF = CALLER FIELD) /A207 / JMS CALSWAP /A207 / CALLED ROUTINE RESIDING IN EDITOR SWAP AREA /A207 / DATA FIELD TO SET FOR CALLED ROUTINE /A207 / /A207 /INPUT PARAMETERS: AC = VALUE (IF ANY) NEEDED FOR CALLED ROUTINE /A207 / /A207 /IMPLICIT INPUT: CIDF0, CALSW1, T1, CALSWAP /A207 / /A207 /OUTPUT PARAMETERS: AC = OUTPUT OF CALLED ROUTINE /A207 / MQ = OUTPUT OF CALLED ROUTINE /A207 / DATA AND INSTRUCTION FIELD = CALLING FIELD /A207 / /A207 /IMPLICIT OUTPUT: CALSW1, T1, CALSW2 /A207 / /A207 /COMPLETION CODE: NONE /A207 / /A207 /SIDE EFFECTS: 1) CALSWAP USES T1 /A207 / /A207 /-- /A207 / /A207 CALSWAP,XX / CALL_A_ROUTINE IN EDITOR SWAP AREA /A207 MQL / HOLD VALUE IN AC /A207 RDF / SET UP RETURN CIF CDF INSTRUCTION /A207 TAD (CDF CIF 0) /A207 DCA CALSW1 / SAVE INSTRUCTION /A207 TAD I CALSWAP / GET ADDRESS OF ROUTINE TO JMS TOO /A207 DCA T1 / SAVE IT /A207 ISZ CALSWAP / BUMP RETURN FOR NEXT PARAMETER /A207 TAD I CALSWAP / GET CDF INSTRUCTION /A207 DCA CALSW2 / SAVE IT /A207 ISZ CALSWAP / BUMP RETURN /A207 CALSW2, .-. / HOLDS CIF CDF INSTRUCTION /A207 SWP / RESTORE TO AC CALLING VALUE /A207 JMS I T1 / JMS TO ROUTINE SPECIFIED AT CALLER+1 /A207 SKP / NONSKIP RETURN /A207 ISZ CALSWAP / SKIP RETURN - BUMP RETURN POINTER /A207 CALSW1, .-. / RETURN CIF CDF INSTRUCTION PLACED HERE/A207 JMP I CALSWAP / RETURN TO CALLER /A207 / /A207 / /A207 / /A207 / EFSCLU SCROLL SCREEN UP /A207 / /A207 EFSCLU, XX /A207 CDFMNU /A207 CIFEDT /A207 JMS I (FMSWAP) /A207 SCRLUP /A207 CDFBUF /A207 CDFEDT /A207 JMP I EFSCLU /A207 / EFSECO CALL SCECHO IN EDITOR FIELD /A207 / /A207 EFSECO, XX /A207 CDFMNU /A207 CIFEDT /A207 JMS I (FMSWAP) /A207 SCECHO /A207 CDFEDT /A207 CDFEDT /A207 JMP I EFSECO /A207 / EFINSR INSERT CHAR IN TEXT BUFFER /A207 / /A207 EFINSR, XX / INSERT CHAR IN TEXT BUFFER /A207 CDFMNU /A207 CIFEDT /A207 JMS I (FMSWAP) /A207 INSERT /A207 CDFBUF /A207 CDFEDT /A207 JMP I EFINSR /A207 / EFSLMD SET LINE MODIFIED /A207 / /A207 EFSLMD, XX / SET LINE MODIFIED /A207 CDFMNU /A207 CIFEDT /A207 JMS I (FMSWAP) /A207 SETLMD /A207 CDFEDT /A207 CDFEDT /A207 JMP I EFSLMD /A207 / EFBZZR RING THE KEYBOARD BELL /A207 / /A207 EFBZZR, XX / RING THE BELL /A207 CDFMNU /A207 CIFEDT /A207 JMS I (FMSWAP) /A207 BUZZER /A207 CDFEDT /A207 CDFEDT /A207 JMP I EFBZZR /A207 / EFADSP ADVANCE ONE PRINT SPACE IN TEXT BUFFER RETURNING CHAR /A207 / /A207 EFADSP, XX / CALL BKPSPC IN EDIT FIELD /A207 CDFMNU /A207 CIFEDT /A207 JMS I (FMSWAP) /A207 ESASPC / ROUTINE TO BE CALLED /A207 CDFBUF / SET BUFFER FIELD /A207 SKP / NONSKIP RETURN /A207 ISZ EFADSP / SKIP RETURN /A207 CDFEDT /A207 JMP I EFADSP / RETURN TO CALLER /A207 / EFBKSP BACKUP ONE PRINT SPACE IN TEXT BUFFER RETURNING CHAR /A207 / /A207 EFBKSP, XX / CALL BKPSPC IN EDIT FIELD /A207 CDFMNU /A207 CIFEDT /A207 JMS I (FMSWAP) /A207 ESBSPC / ROUTINE TO BE CALLED /A207 CDFBUF / SET BUFFER FIELD /A207 SKP / NONSKIP RETURN /A207 ISZ EFBKSP / SKIP RETURN /A207 CDFEDT /A207 JMP I EFBKSP / RETURN TO CALLER /A207 / EFLDCH GET CURRENT CHAR FROM TEXT BUFFER /A207 / /A207 EFLDCH, XX / CALL LODCHR IN EDT FIELD /A207 CDFMNU /A207 CIFEDT /A207 JMS I (FMSWAP) /A207 LODCHR / ROUTINE TO BE CALLED /A207 CDFEDT / CALL WITH EDITOR DATA FIELD SET /A207 SKP / NONSKIP RETURN /A207 ISZ EFLDCH / SKIP RETURN /A207 CDFEDT /A207 JMP I EFLDCH / RETURN TO CALLER /A207 / EFSSPT SET SPLIT SCREEN FLAG IF NECESSARY /A207 / /A207 EFSSPT, XX / SET SCREEN NEEDS TO BE SET FLAG /A207 CDFEDT / FROM MENU FIELD /A207 /D226 TAD I (SPLTFL) / GET SLPIT FLAG /A207 /D226 SNA /A207 AC7777 / SET TO NEEDS SPLIT /A207 DCA I (SPLTFL) /A207 /D226 CDFEDT /A207 JMP I EFSSPT /A207 / EFCKAL CHECK FOR PRINTING ASCII CHAR /A207 / /A207 EFCKAL, XX / CHKALP IN MENU FIELD /A207 MQL / SAVE AC IN MQ /A207 MQA /A207 AND P177 / STRIP BITS /A207 TAD (-ECSPC) / GREATER THAN SPACE? /A207 SMA SZA /A207 ISZ EFCKAL / YES, OK CODE /A207 CLA MQA / RESTORE AC /A207 CDFEDT /A207 JMP I EFCKAL / RETURN /A207 EFRSLN, XX /A208 CDFMNU /A208 CIFEDT /A208 JMS I (FMSWAP) /A208 RSTRLN /A208 CDFEDT /A208 JMP I EFRSLN /A208 EFADPT, XX /A208 CDFMNU /A208 CIFEDT /A208 JMS I (FMSWAP) /A208 ESAPTR /A208 CDFBUF /A208 SKP /A208 ISZ EFADPT /A208 JMP I EFADPT /A208 X= . PAGE DSKBLK=.-SWPBEG%400+DLSTAT / DISK BLOCK WHERE PAGE IS LOADED /A207 EFCKMR, XX / CHK RIGHT MARGIN /A207 DCA CHKMRF / CLEAR HYPHEN FLAG /A207 CDFEDT /A207 TAD I (CURSOR) /A207 TAD (-COLLIM+1) / LIMIT TO SCREEN WIDTH /A207 SMA /A207 JMP CHKMR5 /A207 TAD (COLLIM-COLM81) /M219 SZA CLA /A207 JMP CHKMR1 /A207 TAD I (RGTMAR) /A207 /D226 CLL / CLEAR LINK BEFORE CHECK /A226 TAD (-COLM80) /M219 SMA CLA /A207 JMS EFSSPT / SPLIT SCREEN IF APPROPRIATE /A207 TAD I (SPLTFL) /A207 SNA CLA /A207 JMP CHKMR5 /A207 CHKMR1, TAD I (LINMOD) /A207 SNA CLA /A207 JMP CHKMR9 / NO CHECK IF NO MOD FLAG /A207 TAD I (CURSOR) /A207 CIA /A207 TAD I (RGTMAR) / LIMIT TO RIGHT MARGIN /A207 SMA CLA /A207 JMP CHKMR9 / RETURN IF OK /A207 JMS EFLDCH /JMS LODCHR /A207 JMP CHKMR9 /A207 AND P177 / OR IF ONLY BLANKS OUTSIDE MARGIN /A207 TAD (-ECSPC) /A207 SNA /A207 JMP CHKMR9 /A207 TAD (ECSPC-ECTAB) /A207 SNA CLA /A207 JMP CHKMR4 / DO NOW IF TAB /A207 CHKMR5, CLA /A207 TAD I (CURSOR) /A207 CIA /A207 DCA CHKMRT / SET MOVE LIMIT /A207 CHKMR2, JMS EFBKSP / BKPSPC /A207 JMP CHKMR3 / LOOK FOR BLANK /A207 JMS EFCKAL / JMS CHKALP /A207 JMP CHKMR6 / CHECK FOR HYPHEN POINT /A207 AND (7177) / MASK OUT BOLD AND UNDERLINE BITS /A207 TAD (-ECPHYP) /A207 SNA CLA /A207 JMP CHKMR3 /A207 CLA MQA /A207 AND (2000) /A207 SNA CLA /A207 JMP CHKMR7 /A207 CHKM2A, TAD I (CURSOR) /M244 /A207 TAD CHKMRT /A207 SNA CLA /A207 JMP CHKMR7 / NOT TOO CLOSE /A207 TAD (ECHYLN-ECWWLN) /A207 DCA CHKMRF / SET HYPHEN FLAG /A207 JMP CHKMR3 /A207 CHKMR7, ISZ CHKMRT /A207 JMP CHKMR2 /A207 AC7777 /A207 DCA CHKMRT / HERE IF O.W.L. /A207 TAD I (CURSOR) /A207 TAD CHKMRT /A207 CHKMR3, CMA /A207 DCA CHKMRS / -# TO SKIP BEFORE BREAKING /A207 AC0001 /A207 TAD I (CURSOR) /A207 TAD CHKMRT /A207 TAD CHKMRS /A207 DCA CHKMRT / # TO ADVANCE AFTER BREAKING /A207 JMS EFADSP /ADVSPC /A207 NOP /A207 CLA / GO BACK TO WHERE WE WERE /A207 ISZ CHKMRS /A207 JMP .-4 /A207 TAD CHKMRT /A207 CHKMR4, CMA /A207 DCA CHKMRT / ...IN FORM FOR ISZ LOOP /A207 TAD I (CURSOR) /A207 TAD CHKMRT /A207 IAC /A207 DCA I (CURSOR) / FIX CURSOR /A207 TAD I (CURSOR) /A207 CMA /A207 TAD I (NWHMAR-NWRUL+CURUL) /A207 SMA CLA /A207 JMS EFBZZR /JMS BUZZER / BEEP ON VIOLATION /A207 JMS EFSLMD /SLNMOD /A207 TAD CHKMRF / GET HYPHEN FLAG /A207 TAD (ECWWLN) / +NEW LINE CODE /A207 JMS EFINSR /JMS INSERT /A207 JMS EFSCLU /JMS SCRLUP /A207 JMP CHKMRX /A207 JMS EFSECO /JMS SCECHO /A207 CHKMRX, ISZ CHKMRT /A207 JMP .-2 / GET BACK TO ORIGINAL POSITION /A207 SKP /A207 CHKMR9, ISZ EFCKMR / TAKE SKIP RETURN IF NO WRAPPING DONE /A207 JMP I EFCKMR / THEN RETURN TO CALLER /A207 CHKMRF, 0 /A207 CHKMRS, 0 /A207 CHKMRT, 0 /A207 X= . PAGE DSKBLK=.-SWPBEG%400+DLSTAT / DISK BLOCK WHERE PAGE IS LOADED /A207 / /A207 / THIS ROUTINE BELONGS WITH THE CHKMAR ROUTINE, IF ANY ROOM EVER /A207 / SHOWS UP ON THAT PAGE, THIS SHOULD BE MOVED WITH IT. /A207 / /A207 CHKMR6, AND (7177) / ELIM BOLD-UNDL BITS /A207 TAD (-ECSPC) / HARD SPACE? /A207 SNA /M199/A207 JMP CHKMR3 / PROCESS SPACE /A207 TAD (ECSPC-ECTAB) / TAB STOPPER? /A199/A207 SNA /M244 /A207 JMP CHKMR8 / PROCESS TAB /A199/A207 JMP CHKTCC /M244 /A207 CHK8MR, CDFMNU / BACK TO MY FIELD /A199/A207 AC7777 / BUMP POS COUNTER FOR THE SOFT SPACE/A199/A207 TAD CHKMRT / ... /A199/A207 DCA CHKMRT / ... /A199/A207 CHKMR8, JMS EFADSP / SCAN THE SOFT SPACES TO THE END/A199/A207 NOP / /A199/A207 AND (7177) / THE TAB STOP. /A199/A207 TAD (-ECJSPC) / ... /A199/A207 SNA CLA / /A199/A207 JMP CHK8MR / JMP WHILE IN THE TAB. /A199/A207 JMS EFBKSP / BACK UP TO THE PRIOR CHAR. /A199/A207 NOP / /A199/A207 CLA / ... /A199/A207 JMP CHKMR3 / MERGE BELOW /A199/A207 / EFCASE A SUBROUTINE TO PERFORM CASE STYLE CHECKING / / CALL: / / JMS EFCASE / TABLE-1 (ADDRESS OF THE TABLE TO COMPARE AGAINST) / (ON NO MATCH RETURNS HERE) / / AC ==> (VALUE TO COMPARE AGAINST) / / THE COMPARE TABLE HAS THE FORMAT OF: / / VALUE;ADDRESS / VALUE 1 AND ADDRESS TO JUMP TO ON MATCH / VALUE;ADDRESS / VALUE 2 AND ADDRESS TO JUMP TO ON MATCH / ... / ETC. / 0 / TABLE TERMINATOR / / NOTE: THIS SUBROUTINE DESTROYS THE CONTENTS OF AUTO INDEX / REGISTERS 6 AND 7 / CASTMP=IX0 / AUTO INDEX REGISTER 6 X7=IX1 / AUTO INDEX REGISTER 7 EFCASE, XX / ENTRY TO CASE SUBROUTINE DCA CASTMP / SAVE AC FOR COMPARES RDF / SAVE DATA FIELD TAD (CDF 0) / ADD TO CDF TO FIELD 0 DCA EFCS02 / AND PUT FOR RETURN CDFMNU / SET TO MYFIELD TAD I EFCASE / GET THE TABLE ADDRESS DCA X7 / SAVE IN AUTO INDEX REGISTER / / THIS IS THE CHECK LOOP FOR CASE MATCHING / EFCS01, TAD I X7 / GET VALUE SNA / TERMINATOR? JMP EFCSEX / YES TAKE DEFAULT RETURN CIA / NEGATE THE OPERAND TAD CASTMP / COMPARE SNA CLA / MATCHED? JMP EFCSMT / YES! GO TO MATCH EXIT ISZ X7 / SKIP JUMP VECTOR JMP EFCS01 / TRY THE NEXT VALUE / / END OF LOOP / EFCSMT, TAD I X7 / GET RETURN ADDRESS DCA EFCASE / STORE FOR RETURN SKP / DON'T INCREMENT EFCSEX, ISZ EFCASE / SKIP TABLE VECTOR EFCS02, CDFMYF / RESET DATA FIELD JMP I EFCASE / AND GO HOME EFLDNT, XX / INDENT TO LEFT MARGIN EFLDN1, JMS EFBKPT / CHECK LINE ENDING JMP LINDN4 CDFEDT AND P177 / MASK MODE BITS TAD (-ECNWLN) / IS CHAR. = NEW LINE? SZA CLA / SKIP IF: SO JMP EFLDN1 TAD I (CURPTR) / GET CHARACTER BACK DCA T1 CDFBUF TAD I T1 JMS EFCASE / CHECK FOR EOL MARK MATCH CTB001-1 / TABLE ADDRESS FOR CASE / / ECWWLN; LINDN5 / WORD WRAP EOL / ECHYLN; LINDN5 / HYPHENATION EOL / ECPGRF; LINDN3 / PARAGRAPH MARK / ECSLPT; LINDN8 / SELECT POINT / 0 / INDICATE END OF TABLE JMP LINDN4 / OR NORMAL (NOT SELECT ETC...) LINDN8, DCA LINDN2 / FIND CURSOR, IF SELECT POINT LINDN7, JMS EFBKSP JMP LINDN6 AND P177 JMS EFCASE / COMPARE TO EOL MARKS CTB002-1 / TABLE ADDRESS FOR CASE / ECNWLN; LINDN6 / NEWLINE / ECNWPG; LINDN6 / NEW PAGE / ECNDRL; LINDN6 / END RULER / 0 / INDICATE END OF TABLE ISZ LINDN2 JMP LINDN7 LINDN3, CDFEDT TAD I (PGFMAR) / THEN SET PROPER INDENT JMP LINDN9 LINDN4, CDFEDT TAD I (LFTMAR) JMP LINDN9 LINDN5, CDFEDT TAD I (WRPMAR) LINDN9, DCA LINDN2 / INTO LINDN2 LINDN6, CDFEDT TAD I (LINE23) DCA I (CURPTR) / RESTORE TEXT PTR TAD LINDN2 / SEE IF INDENT COUNT IS BEYOND /A203 CIA / THE RIGHT MARGIN. /A203 TAD I (RGTMAR) / IF SO, THEN CHANGE INDENT TO /A203 SPA CLA / INDENT ONLY TO THE LEFT MARGIN. /A203 JMP LINDN4 / ... /A203 LINDN1, CDFEDT TAD LINDN2 CIA TAD I (CURSOR) SMA CLA JMP I EFLDNT / RETURN IF DONE TAD (ECJSPC) JMS EFINSR / ELSE INSERT JSPACE JMS EFSECO / ...ECHO IT JMP LINDN1 / AND LOOP FOR MORE LINDN2, .-. CTB001, ECWWLN; LINDN5 / WORD WRAP EOL ECHYLN; LINDN5 / HYPHENATION EOL ECPGRF; LINDN3 / PARAGRAPH MARK ECSLPT; LINDN8 / SELECT POINT 0 / INDICATE END OF TABLE X= . PAGE DSKBLK=.-SWPBEG%400+DLSTAT / DISK BLOCK WHERE PAGE IS LOADED /A208 / /A208 /FIND_NEXT_TAB_STOP: /A208 / /A208 /ENTER: AC = LINE POSITION /A208 /EXIT: AC = TAB_CLASS /A208 / MQ = POSITION OF TAB IN RULER /A208 / /A208 /PSEUDO CODE: /A208 / SAVE POSITION IN LINE /A208 / /A208 / REPEAT /A208 / INCREMENT SAVED_LINE_POSITION /A208 / GET SAVED_LINE_POSITION + 1 /A208 / CALL EFGTBY (GET RULER SETTING FOR THIS POSITION) /A208 / CALL EFGTBY (SEE WHAT CLASS) /A208 / UNTIL [RULER TAB DETECTED] /A208 / /A208 / SAVE TAB_CLASS IN MQ /A208 / GET POSITION OF TAB IN RULER /A208 / RETURN WITH TAB_CLASS IN AC, POSITION OF TAB IN MQ /A208 / /A208 FNTABSTOP, / FIND_NEXT_TAB_STOP /A208 XX /A208 DCA FNTAB2 / SAVE POSITION ON LINE /A208 FNTAB1, ISZ FNTAB2 / INCREMENT POSITION /A208 NOP / ALLOW LEFT-MARGIN LOOKUP /A208 AC0001 / GET SAVED_LINE_POSITION + 1 /A208 TAD FNTAB2 /A208 JMS EFGTBY /A208 CURUL / GET RULER SETTING OF THIS POSITON /A208 JMS EFGTBY /A208 TBSTR / GET CLASS OF SETTING /A208 SNA / SKIP IF: TAB SETTING /A208 JMP FNTAB1 / NEXT POSITION /A208 MQL / HOLD CLASS IN MQ /A208 TAD FNTAB2 / GET POSITION OF TAB_SETTING /A208 SWP / PUT POSITION IN MQ AND CLASS IN AC /A208 JMP I FNTABSTOP / RETURN /A208 / /A208 / /A208 / /A208 / THIS ROUTINE ORIGIONALLY WAS SET UP TO REFRESH ONLY WHAT NEEDED TO BE /A208 / REFRESHED. DUE TO THE HIGH NUMBER OF EXCEPTION CASES & THE LACK OF SPACE/A208 / TO TEST FOR EACH EXCEPTION, THE ENTIRE LINE WILL BE REPAINTED WHENEVER A/A208 / TAB CHARACTER IS SEEN. /A208 / /A208 EFTJST, XX / JUSTIFY NEXT TAB STOP /A208 CDFEDT /A208 TAD I (RGTMAR) / GET RIGHT MARGIN /A208 CIA / NEGATE IT /A208 TAD I (CURSOR) / GET CURSOR POSITION /A208 SMA CLA / SKIP IF: CURSOR POSITIONED PREVIOUS /A208 / TO THE RIGHT MARGIN /A208 JMP I EFTJST / NOTHING TO DO IF AT RIGHT MARGIN /A208 TAD I (CURPTR) / SAVE POINTER /A208 DCA TBECH3 /A208 TAD I (CURSOR) / INIT TAB SEARCH COUNTER /A208 JMS FNTABSTOP / JMS TO FIND_NEXT_TAB_STOP /A208 / RETURN WITH AC = TAB_CLASS /A208 / MQ = TAB_SET POSITION /A208 / IN RULER /A208 TAD (-2) /A208 DCA TBECH2 / SAVE CLASS /A208 SWP / GET DISTANCE FROM SAVED CURSOR POSIT. /A208 / TO THIS TAB STOP /A208 CIA / NEGATE IT /A208 TAD I (CURSOR) /A208 DCA TBECH1 /A208 TAD TBECH2 / TEST CLASS OF TAB /A208 SPA CLA / SKIP IF: NOT NORMAL TAB /A208 JMP TBECHB / JUMP IF NORMAL TAB /A208 TBECHC, JMS EFADSP /A208 JMP TBECHB / SEARCH FOR TERMINATOR /A208 CDFEDT /A208 TAD (-ECCMRK) / IGNORE MARKER /A208 SNA CLA /A208 JMP TBECHC / IGNORE MARKER. GET NEXT CHAR. /A208 TBECHX, TAD TBECH2 / TEST CLASS /A208 SNA CLA /A208 JMP TBECHD / JUMP IF RIGHT-ADJUSTED TAB /A208 CDFEDT /A208 TAD I (CURPTR) / ELSE CHECK FOR DECIMAL TERMINATOR /A208 DCA T1 /A208 CDFBUF /A208 TAD I T1 /A208 AND P177 /A208 IFDEF PERDEC < /A208 TAD (-".+200) /A208 SZA /A208 TAD (".-")) /A208 > / END IFDEF PERDEC /A208 IFDEF COLDEC < /A208 TAD (-":+200) /A208 SZA /A208 TAD (":-")) /A208 > / END IFDEF COLDEC /A208 IFDEF COMDEC < /A208 TAD (-",+200) /A208 SZA /A208 TAD (",-")) /A208 > / END IFDEF COMDEC /A208 SNA CLA /A208 JMP TBECHB / JUMP IF GOT ONE /A208 TBECHD, CDFEDT /A208 TAD I (CURPTR) / CHECK FOR RIGHT-ADJUST TAB TERMINATOR /A208 DCA T1 /A208 CDFBUF /A208 TAD I T1 /A208 AND P177 / STRIP MODE BITS /A208 TAD (-ECSTOV) / CHARACTER = "START_DEAD_KEY_SEQ."? /A208 SZA / SKIP IF: SO /A208 TAD (ECSTOV-ECSPC) /A208 SPA CLA /A208 JMP TBECHB / JUMP IF GOT ONE /A208 ISZ TBECH1 /A208 JMP TBECHC / LOOP IF WE CAN /A208 JMP TBECHE / ELSE NOTHING TO DO /A208 TBECHB, TAD TBECH2 / WAS THIS A DECIMAL TAB OR NORMAL TAB? /A208 SZA CLA / SKIP IF: NORMAL TAB /A208 ISZ TBECH1 / REDUCE DISTANCE CNT BY 1 FOR DECIMAL TAB/A208 NOP /A208 TBECHE, JMS EFRSLN / SET REFRESH FLAGS FOR ENTIRE LINE. /A208 TBECHF, CDFEDT /A208 TAD TBECH3 /A208 DCA I (CURPTR) / RESTORE PTR /A208 TAD TBECH1 / GET DISTANCE COUNT /A208 SMA CLA / SKIP IF: JUSTIFYING SPACES NEEDED /A208 JMP I EFTJST / RETURN IF NO SPACES NEEDED /A208 TBECHG, JMS EFADPT /A208 NOP / ELSE INSERT THEM /A208 CLA /A208 TAD (ECJSPC) / GET "JUSTIFY_SPACE" CHARACTER /A208 JMS EFINSR / INSERT IT /A208 ISZ TBECH1 / BUMP COUNT /A208 JMP TBECHG / MORE 'JUSTIFY_SPACES" TO INSERT /A208 JMP TBECHF / RETURN AFTER RESTORING CURPTR /A208 / /A208 / TEMPS: /A208 FNTAB2, / SAVED_LINE_POSITION (USED BY /A208 / FNTABSTOP ROUTINE) /A208 TBECH1, .-. / LOADED WITH CURSOR POSITION /A208 TBECH2, .-. / LOADED WITH CLASS OF RULER SETTING /A208 TBECH3, .-. / LOADED WITH CURPTR /A208 / EFBKPT BACKUP CURPTR / / EFBKPT, XX CDFMNU CIFEDT JMS I (FMSWAP) ESBPTR CDFBUF SKP ISZ EFBKPT CDFBUF JMP I EFBKPT CTB002, ECNWLN; LINDN6 / NEWLINE ECNWPG; LINDN6 / NEW PAGE ECNDRL; LINDN6 / END RULER 0 / INDICATE END OF TABLE X= . PAGE DSKBLK=.-SWPBEG%400+DLSTAT / DISK BLOCK WHERE PAGE IS LOADED EFGTBY, XX / TAD INDEX - JMS EFGTBY - SPTR /A208 / RETURNS BYTE /A208 TAD (-1) /A208 CLL RAR /A208 CDFMNU /A208 TAD I EFGTBY / GET PTR /A208 DCA T1 /A208 CDFEDT /A208 TAD I T1 / GET WORD /A208 SNL /A208 BSW / GET BYTE /A208 AND P77 / ISOLATE IT /A208 ISZ EFGTBY /A208 JMP I EFGTBY / AND RETURN /A208 / / CROSS FIELD CALLS FOR FIELD 3 / EFPOUT, XX / call putout routine CDFMYF CIFEDT JMS I (FMSWAP) EDOCHR CDFEDT JMP I EFPOUT / CALLING SEQUENCE / / CDIMNU / JMS I (TCCHK) / RETURN + 0 = REGULAR DEAD KEY SEQEUENCE / RETURN + 1 = REQUIRED SPACE / RETURN + 2 = F6 FUNCTION / / THE INTERNAL DEAD KEY SEQUENCE FOR A TECHNICAL CHARACTER IS AS FOLLOWS: / / SD SP GS CH ED / / SD = START DEAD INDICATOR / SP = SPACE / GS = GRAPHICS SET G1 - G3 (OCTAL CODE 61-63) / TC = TECHNICAL CHARACTER / ED = END DEAD INDICATOR / WHEN CALLED THE START DEAD INDICATOR HAS ALREADY BEEN FOUND / TCCHK has been modified as of edit 244. /M244 / The purpose is to allow TCCHK to perform the same function /M244 / but split it into two routines /M244 / 1. Checks the dead key as above /M244 / (this to run only in field 2) /M244 / 2. Displays the tech char if found /M244 / /M244 / The purpose is to allow other routines to access TCCHK or /M244 / something similar /M244 / / TCCHK, XX / Set up to call TCCHR /M244 JMS TCCHR / Call scan routine /A244 JMP TCDED / Ordinary dead /A244 JMP TCREQ / Required space /A244 / /A244 / Must be tech so print it /A244 / /A244 TAD TCTEMP / WE PAST ALL THE CHECK POINTS DISPLAY THE TC AND (3) / START BY ACTIVATING THE PROPER CHARACTER SET SNA / EXCEPTION, TEST FOR GRAPHICS SET SELECTION 0 JMP TCTEC / NOT ALLOWED, DISPLAY IT AS A NORMAL DEAD/M244 TAD (JMP TCJMP) / BUILD JUMP TO PROPER SET GRAPHICS DISPLAY CODE DCA .+1 TCJMP, XX JMP TCGS1 / GO SET GRAPHICS SET 1 JMP TCGS2 / GO SET GRAPHICS SET 2 TAD (ESC) / SET GRAPHICS SET 3 JMS EFPOUT TAD (157) / TAD A SMALL o JMS EFPOUT JMP TCCONT TCGS1, TAD (16) / SET GRAPHICS SET 1 JMS EFPOUT JMP TCCONT TCGS2, TAD (ESC) / SET GRAPHICS SET 2 JMS EFPOUT TAD (156) / TAD A SMALL n JMS EFPOUT / FALL INTO NEXT ROUTINE TCCONT, TAD TCTMP1 / DISPLAY CHARACTER IN PROPER TECHNICAL CHAR SET JMS EFPOUT TAD (17) / RESET GRAPHICS TO DEFAULT SET JMS EFPOUT CDFEDT DCA I (PUTSC6) / TELLS VIEW CODE IT WAS NOT A REQUIRES SPACE CDFMYF TCTEC, ISZ TCCHK /A244 TCREQ, ISZ TCCHK /A244 TCDED, CDIEDT / Change back to Edit field /A244 JMP I TCCHK / Return /A244 / / This is a stripped down version of TCCHK that only checks /M244 / the dead key and does the skip return stuff /M244 TCCHR, XX CLL CLA / DEAD KEY ALREADY DETECTED BY CALLING ROUTINE JMS EFADPT / CHECK IF NEXT CHARACTER IS A SPACE NOP CDFEDT DCA I (PUTSC6) / STORE HERE TAD I (PUTSC6) / GET CHARACTER BACK CDFMYF AND P177 / MASK OUT ATTRIBIUTE BITS TAD (-ECSPC) / CHECK FOR SPACE SZA CLA JMP TCEX0 / NORMAL DEAD KEY SEQUENCE JMS EFADPT / CHECK NEXT CHARACTER NOP DCA TCTEMP / IF TC STORE GRAPHICS SET INDICATOR TAD TCTEMP / IF THIS CHARACTER IS A SPACE THEN EXIT AND P177 / JUST TO BE SURE BUT SHOULD NOT NEED IT TAD (-ECSPC) / IS SECOND CHARACTER A SPACE SNA CLA JMP TCEX1 / YES, WE HAVE A REAL REQUIRED SPACE EXIT IFNDEF CONDOR < JMP TCEX0 > / NO, EXIT IF DM1 - IT HAS NO TEC. CHARS JMS EFADPT / GET NEXT CHARACTER NOP / WHICH IS THE TECHNICAL CHARACTER DCA TCTMP1 / AND STORE IT JMS EFADPT / TEST FOR END DEAD INDICATOR TO MAKE NOP / SURE THE USER IS NOT PLAYING GAMES WITH TAD (-ECNDOV) / US. THAT IS A TC IS NOT DEADED WITH A SZA CLA / NORMAL CHARACTER. BAD TECHNICAL CHARACTER JMP TCEX0 / OUTPUT A HASH CHARACTER TCEX2, ISZ TCCHR / RETURN + 2 = TECHNICAL CHAR SET /M244 TCEX1, ISZ TCCHR / RETURN + 1 = REQUIRED SPACE /M244 / RETURN + 0 = NORMAL DEAD KEY TCEX0, JMS TCBKUP / Backup to start dead /M244 /d244 CDIEDT CDFEDT / Map to Edit field /M244 JMP I TCCHR / RETURN TO CALLER /M244 TCTEMP, 0 / HOLDS GRAPHICS SELECTION CHARACTER TCTMP1, 0 / HOLDS TECHNICAL CHARACTER / / This is a cross field callable version of TCCHR from Editor / TCCHX, XX /A244 JMS TCCHR / Call TCCHX to scan dead /A244 JMP TCRDED / Normal dead /A244 JMP TCRREQ / required space /A244 ISZ TCCHX / Bump return for tech /A244 TCRREQ, ISZ TCCHX / /A244 TCRDED, CIFEDT / Back to Editor /A244 JMP I TCCHX / And return /A244 / / This routine is a refugee from the CHKMR2 code since there is /A244 / no rrom there /A244 / It checks for hyphenation on a tech dead to allow hyphenation /A244 / on 8 bit /A244 CHKTCC, TAD (ECTAB-ECSTOV) / Is it a start dead ? /A244 SZA CLA / /A244 JMP CHKMR7 / No.. so rejoin code /A244 JMS TCCHR / Scan for tech dead /A244 JMP CHKMR7 / no .. ordinary /A244 JMP CHKMR7 / Required space /A244 TAD TCTMP1 / Get char /A244 AND (2000) / Is it hyphenated ? /A244 SNA CLA / /A244 JMP CHKMR7 / No /A244 JMP CHKM2A / Yes /A244 X=. /-------------- PAGE EFCNTR, CDFEDT /A217 TAD I (LINE23) /A217 DCA I (CURPTR) / FIND CURRENT INDENT /A217 DCA LNECHA /A217 JMS EFLDCH /A217 NOP / BY COUNTING JUSTIFY SPACES /A217 LNECH2, TAD (-ECJSPC) /A217 SZA CLA /A217 JMP LNECH6 /A217 ISZ LNECHA /A217 JMS EFADPT /A217 NOP /A217 JMP LNECH2 /A217 LNECH6, CDFEDT /A217 TAD I (CENMAR) /A217 CIA /A217 TAD I (CURSOR) / COMPUTE -#SPACES /A217 TAD LNECHA /A217 SMA /A217 JMP LNECH3 / JUMP IF NONE /A217 CLL CML RAR /A217 DCA LNECHA /A217 TAD LNECHA /A217 TAD I (RGTMAR) /A217 CIA /A217 TAD I (CURSOR) /A217 SPA SNA /A217 JMP LNECH4 /A217 TAD LNECHA /A217 SMA /A217 JMP LNECH3 /A217 DCA LNECHA /A217 LNECH4, CLA /A217 TAD (ECJSPC) /A217 JMS EFINSR /A217 ISZ LNECHA /A217 JMP .-3 / DO SPACES /A217 LNECH3, CLA /A217 CIFEDT /A217 CDFBUF /A217 JMP CNTREX /A217 LNECHA, .-. /A217 / / CALPSH (CALLAR PUSH) / Edit number 227 for whole routine /A227 / / This routine takes the address and data field of the routine / who called CALLAR, and pushes the values onto the stack. / / Note: If the stack overflows the routine will halt with AC = 0 / CALPSH, 0 / Push CALL A ROUTINE ADDRESS ONTO THE STACK ISZ CALPTR / Update stack pointer TAD I CALPTR / Have we exceed the stack table length SNA CLA JMP CALERR / YES!! Hit a stack boundry CRASH SOFTWARE CDFEDT / No TAD I (CALLAR) / Get calling routines address CDFMYF DCA I CALPTR / And push it onto the stack ISZ CALPTR / Update stack pointer CDFEDT TAD I (CALFLD) / Get INSTRUCTION field of calling routine CDFMYF DCA I CALPTR / And push it onto the stack CDIEDT JMP I CALPSH / Return / / CALPOP (CALLAR POP) / Edit number 227 for whole routine /A227 / / This routine will restore CALLAR's return with the last / CDI and ADDRESS on the stack. / / Note: If a return is attemped without an address / the routine will halt with AC = 1. / CALPOP, 0 / POP A CALL A ROUTINE ADDRESS OFF OF THE STACK TAD I CALPTR / Do we have an address to pop SNA JMP CALERR+1 / NO!! Crash the software CDFEDT / Yes DCA I (CALFLD) / Store return field CDFMYF CLA CMA / Backup stack pointer TAD CALPTR DCA CALPTR TAD I CALPTR / Get return address CDFEDT TAD I (CALSKP) / Add skip return offset DCA I (CALLAR) / Store return address CLA CMA / Back stack pointer TAD CALPTR DCA CALPTR CDIEDT JMP I CALPOP / Return CALERR, SKP CLA / Exceeded end of stack boundry AC0001 / Exceeded top of stack boundry HLT / STOP - Don't let the user go any further JMP .-1 / Just in case they try to proceede CALPTR, CALSTK / Pointer into stack CALSTK, 0000 / Top of stack boundry 7777;7777 / A stack for ten cross field calls 7777;7777 / Any non zero value will do. 7777;7777 7777;7777 7777;7777 7777;7777 7777;7777 7777;7777 7777;7777 7777;7777 0000 / End of stack boundry / / This routine belongs to TCCHK etc. but.. there's no room there /M244 / Backing up pointer to start dead was made a routine /M244 / TCBKUP, XX TCBKLP, JMS EFBKPT / LEAVE POINTER AT BEGINNING OF DEAD KEY SEQUENCE NOP TAD (-ECSTOV) SZA CLA JMP TCBKLP JMP I TCBKUP X=. /-------------- PAGE NWRUL, ZBLOCK HAFRUL / Allocate workspace 0000 / buffer terminator / THE FOLLOWING LOCATIONS WITH THE EXCEPTION OF NWDT, HOLD THE POSITION / NUMBER WITHIN THE RULER OF THE SETTINGS SPECIFIED. FOR EXAMPLE, A / RULER OF L1, R5 WOULD SET NMLMAR = 1 AND NWRMAR = 5. AFTER RULER / MODIFICATION THESE PARAMETERS ARE TRANSFERED ALONG WITH NWRUL TO CURUL. RLSTOR, NWLMAR, 0 / NEW LEFT MARGIN MARKER NWRMAR, 0 / NEW RIGHT MARGIN MARKER NWWMAR, 0 / NEW WORD WRAP INDENT MARKER NWPMAR, 0 / NEW PARAGRAPH INDENT MARKER NWCMAR, 0 / NEW CENTERING POINT MARKER NWHMAR, 0 / NEW HYPHENATION ZONE MARKER NWDT, 0 / NEW DECIMAL TABS - NUMBER OF DECIMAL TABS / IN THE RULER. NWRLND=. / End of ruler marker PAGE SWPEND, / DEFINE END OF SWAP AREA CODE SO / THAT REMANING AREA CAN BE CLEARED RELOC / RESET RELOCATION MECHANISM OF ASSEMBLER /*************************************************************************** /**** PAGE ZERO DEFINITIONS FOR MAIN EDITOR IN FIELD 3 **** /*************************************************************************** FIELD 1 / EDITOR LOADS HERE BUT RUNS IN FIELD THREE *100 CDFMYF= CDFEDT / DEFINE CDF INSTRUCTION FOR EDIT FIELD ZZCASE= JMS I . / CASE STYLE COMPARISONS (SIMILAR TO GDCASE / SWITCH IN "C" ) HLTTST= JMS I . / TEST HALT FLAG SET BY GOLD HALT USHLTS GETINP= JMS I . / CALL SYS TO GET CHARACTER FROM KEYBOARD EDICHR PUTOUT= JMS I . / PUT CHARACTER TO DISPLAY EDOCHR MODSET= JMS I . / SET OR CLEAR EDIT MODES ESMODE INSCHR= JMS I . / INSERT CHARACTER INTO TEXT BUFFER ESICHR /M241 /m239 ADVPTR= JMS I . / ADVANCE CURPTR TO NEXT NON-NULL CHAR IN FILE ESAPTR BKPPTR= JMS I . / BACKUP CURPTR TO NEXT NON-NULL CHAR IN FILE ESBPTR CHKPTR= JMS I . / CHECK CHARACTER IN TEXT BUFFER FOR: ESATST / NULL - ETX - STX STATUS TSTSLT= JMS I . / TEST FOR SELECT MODE ACTIVE ESLCTS ADVCHR= JMS I . / ADVANCE CURPTR A SPECIFIED COUNT OF NON-NULL ESACHR / CHARACTERS IN TEXT BUFFER / (NEVERS SCROLLS TO/FROM DISK) CURMOV= JMS I . / MOVE CURSOR FORWARD OF BACKWARD FOR A ESMVCR / SPECIFIED NUMBER OF CHARACTERS SLNMOD= JMS I . / SET LINE MODIFIED FLAGS (NOT IN BUFFER) SETLMD PUTESC= JMS I . / SEND ESCAPE SEQUENCES TO DISPLAY ESPTES XLTUPR= JMS I . / TRANSLATE LOWER CASE TO UPPER CASE ESXLUP ADVSPC= JMS I . / ADVANCE CURPTR A SCREEN CHARACTER WIDTH ESASPC BKPSPC= JMS I . / BACKUP CURPTR A SCREEN CHARACTER WIDTH ESBSPC PUTETX= JMS I . / PUT CHARACTER TO DISK AT END OF FILE ESPUTE PUTSTX= JMS I . / PUT CHARACTER TO DISK AT START OF FILE ESPUTS OVLJMP= JMS I . / CALL IN OVERLAY CODE AND EXECUTE OVJUMP SINZRO, / START OF INITED-TO-ZERO CONTROL WORDS RLRMOD, 0 / RULER MOD FLAG GETTRM, 0 / INPUT TERMINATOR RLPOSN= GETTRM / CURRENT RULER POSITION GETLEN, 0 / INPUT LENGTH SLCTDR, 0 / SELECT DIRECTION PSTBLK, 0 / CURRENT PASTE BLOCK PSTPTR, 0 / CURRENT PASTE BUFFER PTR BASKCT, 0 / CURRENT WASTEBASKET COUNT EDMODE, 0 / CURRENT EDIT MODES - / 0 = ADVANCE UNIT / 1 = BACKUP UNIT / 2 = BOLD UNIT / 3 = UNDERLINE UNIT / 4 = REMOVE BOLD UNIT / 5 = REMOVE UNDERLINE UNIT / 6 = CASE UNIT (UPPER/LOWER CASE) / 10 = SEARCH MODE / 20 = SELECT MODE GRAMUN, 0 / CURRENT GRAMMATICAL UNIT / 0 = CHARACTER, 1 = LINE, 2 = WORD, / 3 = SENTENCE, 4 = TAB POSITION, / 5 = PARAGRAPH, 6 = PAGE CURPTR, 0 / CURRENT LOC IN TEXT BUFFER CURSOR, 0 / CURRENT SCREEN COLUMN SCRLCT, 0 / SCREEN LAG - NUMBER OF LINES LEFT TO SCROLL SCRNFL, 0 / "WHOLE SCREEN" SCROLL FLAG / 0 = NO NEED TO SCROLL WHOLE SCREEN, / 2000 = SCROLL WHOLE SCREEN SCRLFL, 0 / SCROLL FLAG FOR BKP/ADV PCTLFL, 0 / PRINT CONTROL FLAG / 0 = NOT IN START CONTROL BLOCK, / -1 = IN START CONTROL BLOCK SPACNG, 0 / CURRENT HALF-SPACING (2-4) CURLIN, 0 / CURRENT SETCUR LINE (REL TO BOTTOM OF SCREEN) SCRLCU, 0 / NON-ZERO IF SCREEN NEEDS MODIFICATION SCRLIN, 0 / EARLIEST LINE OF SCREEN NEEDING MODIFICATION REJCNT, 0 / USED TO COUNT MODS TIL REJUST TIME REJFLG, 0 / SET TO -1 IF REJUST NEEDED LINMOD, 0 / "LINE MODIFIED" FLAG WORD ECHFLG, 0 / "ALWAYS ECHO" FLAG SRCDIR, 0 / SEARCH DIRECTION, ALSO USED BY GO-TO-PAGE MRGRSF, 0 / MERGE RESYNC FLAG CPYFNO= MRGRSF / IS CHARACTER AT LEAST A "0" ? CASBIT= CPYFNO / BIT SET FOR UP/LOW/BOLD/UNDL GETPSF= CASBIT / GET PST EOF FLG MRGPT1, 0 / MERGE TEMP PTR GLDPSF= MRGPT1 / "EXACT PASTE FLAG" RLDIRN= MRGPT1 / GOLD RULER DIRECTION (0-FORW; -1 REV) MRGPT2, 0 / MERGE TEMP PTR NINZRO= .-SINZRO / LENGTH OF INITED TO ZERO CTL WORDS /D226 SPLTFL, 0 / -1= SCREEN NEEDS TO BE SPLIT /D226 / 0 = SCREEN DOES NOT NEED TO BE SPLIT (WIDE) /D226 / 1 = SCREEN IS SPLIT (WIDE) /---------- / / O R D E R I M P O R T A N T / / These next 5 words have been moved beyond the page 0 / locations that are cleared during initialization. / /---------- LFTMAR, 0 / CURRENT LEFT MARGIN RGTMAR, 0 / CURRENT RIGHT MARGIN WRPMAR, 0 / CURRENT WORD WRAP MARGIN PGFMAR, 0 / CURRENT PARAGRAPH INDENT MARGIN CENMAR, 0 / CURRENT CENTER, *2 /---------- / / E N D O R D E R I M P O R T A N T / /---------- BUFBEG, 0 / PTR TO START OF EDIT BUFFER BUFSIZ, 0 / SIZE OF EDIT BUFFER FORMNO, 0 / MERGE FORM FILE NUMBER FILENO, 0 / EDIT FILE NUMBER FILOPT, 0 / EDIT OPTION (-1 RPLAC, 0 NORMAL) LINE23, 0 / LINE23 PTR SPCCHK, 0 / -# BLKS MIN BEFORE COMPLAINT GSRF, 0 / GLOBAL SEARCH AND REPLACE FLAG CURTMP, 0 / TEMP CURSOR STORAGE FOR VIEW MODE CHRATR, 0 / ATTRIBUTE OF CHAR GOING THRU BLKBOX SCRNLN, 0 / NUMBER OF LINES IN SCROLL AREA WIDNAR, WIDTH-COLM81 / 0 = WIDE, 64 (52 DEC) = NARROW SCREEN /A226 IFDEF FORIN < POINT1, 0 / POINTER FOR TABLE SCAN FOR FOREIGN CHARACTERS POINT2= X3 / TEMP STORAGE CHAR1= X4 / ALSO TEMP STORAGE > / END IFDEF FORIN X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------- PAGE DSKBLK=.%400+DLOEDT / DISK BLOCK WHERE PAGE IS LOADED /*************************************************************************** /**** START OF MAIN EDITOR CODE **** /*************************************************************************** EDITOR, XX JMP EDIOP1 EDMERG, XX / MERGE ENTRY /D221 RDF / GENERATE RETURN CIF CDF INSTRUCTION /D221 TAD CIDF0 /D221 DCA EDEXI3 CDFMYF / CHANGE DATA FIELD TO THIS FIELD /A221 DCA I EDITOV / CLEAR OVERLAY NUMBER TO FORCE LOAD /A221 OVLJMP;OVMRG1 / FIRST OVERLAY EDITOV, OVLAY1 / LOCATION OF OVERLAY AREA /A221 EDIOP1, CDFMYF / CHANGE DATA FIELD TO THIS FIELD /A221 CLA / DUMMY INSTRUCTION TO TAKE UP ROOM /A221 DCA I EDITOV / CLEAR OVERLAY NUMBER TO FORCE LOAD /A221 /D221 RDF / GENERATE RETURN CIF CDF INSTRUCTION /D221 TAD CIDF0 /D221 DCA EDEXI3 OVLJMP;OVINI1 / INIT FOR NORMAL EDIT REEDIT, OVLJMP;OVINIT / DO INIT OVERLAY JMP EINEXA / CONTINUE 'NORMAL' EDIT /M204 EIFILE, OVLJMP;OVXITF / DO EXIT OVERLAY JMP EDEXI3 / NORMAL EXIT / MUST BE HERE BECAUSE OF A CALL FROM MN1 UPON FINISHING USING THE SYSTEM EDCLPB, XX / CLEAR CUT/PASTE BUFFER /D221 RDF /D221 TAD CIDF0 /D221 DCA EDEXI4 CDFMYF / CHANGE DATA FIELD TO THIS FIELD /A221 CLA / DUMMY INSTRUCTION TO TAKE UP ROOM /A221 DCA I EDITOV / CLEAR OVERLAY NUMBER TO FORCE LOAD /A221 OVLJMP;OVCLPB EDEXI4, CDIMNU / SET DATA & INSTRUCTION FIELDS TO MENU /M221 JMP I EDCLPB / RETURN TO MAIN MENU EDEXI3, CDIMNU / SET DATA & INSTRUCTION FIELDS TO MENU /M221 JMP I EDITOR / RETURN TO MAIN MENU OLDHR, 0 / HOURS AT START OF EDIT OLDMIN, 0 / MINUTES AT START OF EDIT EITOP, OVLJMP;OVEXIT / CLOSE THE DOCUMENT JMP REEDIT / NOW RESUME 'NORMAL' EDIT FROM TOP LINDNT, XX / INDENT TO LEFT MARGIN CIFMNU CDFEDT JMS I (CALSWA) EFLDNT CDFEDT JMP I LINDNT / /++ / CALLAROUTINE CALL_A_ROUTINE / /FUNCTIONAL DESCRIPTION: CALLAROUTINE / / This routine can be used to call any subroutine in the editor from any / field in the system as long as the editor subroutine makes only a normal / or skip return. / /CALLING SEQUENCE: CIFEDT (DF = CALLER FIELD) / JMS CALLAR / Rouitne in field 3 to be called / Data field to set for called routine / /INPUT PARAMETERS: LINK, AC, MQ can equal any value that may be required / by the routine being called / / MQ = value (if any) needed for called routine / /IMPLICIT INPUT: CIDF0, CALLA1, T1, CALLAROUTINE / /OUTPUT PARAMETERS: LINK, AC, MQ = Output values set by called routine / Data and Instruction field = Calling field / /IMPLICIT OUTPUT: CALLA1, T1, CALLA2 / / FMSWAP, / Rewrite of CALL_A_ROUTINE /M227 CALLAR, XX / CALL_A_ROUTINE DCA CALSAC / Store value of AC RDF / Get field of calling routine TAD CIDF0 / and build a CIF CDF return DCA CALFLD / Store the return field call TAD I CALLAR / Get address of routine to be called DCA CALADD / store it ISZ CALLAR TAD I CALLAR / Get data field to set DCA CALCDF / store it ISZ CALLAR / Set up return address DCA CALSKP / Init skip return pointer CDFMNU / Set field to menu swap area /A233 TAD I (CALLN1+2) / This is a test to see if CALPSH, /A233 TAD (-NOP) / CALPOP rouitines are indeed in memory /A233 SZA CLA / /A233 JMP .+3 /A233 HLT / CALPSH, CALPOP are not loaded /A233 JMP .-1 / crash system!!! /A233 CDIMNU JMS I (CALPSH) / Push the information onto the stack TAD CALSAC / Restore the AC CALCDF, XX / CDF for routine being called JMS I CALADD / Call the routine SKP ISZ CALSKP DCA CALSAC / Store value of AC CDIMNU JMS I (CALPOP) DCA CALSKP / Clear flag for next return /A231 TAD CALSAC / Restore AC CALFLD, XX / CAlling field CID return JMP I CALLAR / Return to routine CALADD, 0 / CALLING ADD OF FIELD 3 ROUTINE CALSKP, 0 / ZERO = RETURN AT CALL+1, 1=CALL +2 CALSAC, 0 / STORE AC TEMP REG / This routine origionally was set up to refresh only what needed to be / refreshed. due to the high number of exception cases & the lack of space / to test for each exception, the entire line will be repainted whenever a / tab character is seen. / TBJUST, XX / JUSTIFY NEXT TAB STOP /A208 CDFEDT /A208 CIFMNU /A208 JMS I (CALSWA) /A208 EFTJST /A208 CDFEDT /A208 JMP I TBJUST /A208 BEEPER, XX JMS BUZZER CIFSYS / CLEAR UDK STACK UDKOPS JMP I BEEPER BUZZER, XX AC0006 IAC / SET AC TO 7 (saves 1 location) PUTOUT JMP I BUZZER BLDBIT= CASBIT BLDUNT, TAD (200) / SET... NBDUNT, DCA BLDBIT / ...OR CLEAR BOLDING OVLJMP;OVBOLD CHKMAR, XX / CHK RIGHT MARGIN /A207 CDFEDT / CALL IN MENU FIELD /A207 CIFMNU /A207 JMS I (CALSWA) /A207 EFCKMR /A207 CDFEDT /A207 SKP / NON-SKIP RETURN /A207 ISZ CHKMAR / SKIP RETURN /A207 CDFBUF JMP I CHKMAR /A207 EDOCHR, XX CDFMYF DCA HLDCHR / SAVE CHAR TO BE OUTPUT TAD HLDCHR / RESTORE CHAR AND (3600) / MASK OFF ATTRIBUTE BITS DCA CHRATR / AND SAVE FOR FUTURE REFERENCE TAD HLDCHR / RESTORE CHAR TO CONTINUE / BLKBOX WHICH HANDLES CHARACTERS TO BE DISPLAYED ON THE VT100 RESIDES / IN FIELD 1. GO THERE TO DISPLAY THIS CHARACTER. CIFPRT / "BLACKBOX" IN PRINTER FIELD (1) JMS I (BLKBOX) JMP I EDOCHR HLDCHR, 0 / TEMP STORAGE FOR BLKBOX ROUTINE X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------- PAGE /********************** )/ RESTORE CHAR TO CONTINUE / BLKBOX WHICH HANDLE /**** START OF RESIDENT OVERLAY AREA **** /**** THIS AREA IS OVERLAYED BY LIST PROCESSING AND SPELL **** /*************************************************************************** DSKBLK=.%400+DLOEDT / DISK BLOCK WHERE PAGE IS LOADED OVLAYM, / THIS SYMBOL IS USED BY L.P. AND SPELL / *** ENTRY POINTS FOR UNIMPLEMENTED OPERATIONS *** /d215 EITABC, / ** NOT IMPLEMENTED YET ** EIBAD, JMS BEEPER / NOTIFY USER OF ERROR EIFXT2, /A168 EIFIX, CLA / MAKE SURE WE ARE ON A LEGAL CHARACTER EIFIX1, CURMOV NOP / IGNORE TOP OR BOTTOM OF DOCUMENT MODSET /M168 EDTMOD / RESET MODES EINEXT, / GET INPUT CHARACTER CDFMYF / CHANGE BACK TO MY DATA FIELD CLA DCA ECHFLG / CLEAR ECHO MODE GSKILN, CIFSYS / REPLACED WITH A "SKIP" BY G.S.R. CODE XLTIN IFDEF DEMO < *.-2 NOP NOP > / END 'IFDEF DEMO' EINEXA, SKP CLA / XLTIN RETURN WITH NO CHARACTER /M168 JMP EINEXB / XLTIN RETURN WITH CHARACTER IN AC DCA ECHFLG / CLEAR ECHO MODE /A168 CURMOV NOP JMS TSTLIM JMS FXSCRL CDFMYF / NEEDED WHEN BACKING UP INTO A LONG LINE /A236 CIFMNU / CHANGE TO MENU FIELD FOR STATUS CHECK JMS I (CALLN5) / GO CHECK IF STATUS VALUES HAVE CHANGED /C235 GETINP / GO WAIT FOR USER TO ENTER A CHARACTER IFNDEF FORIN < EINEXB, SMA JMP OVSCHK /M254 > / END IFNDEF FORIN IFDEF FORIN < EINEXB, DCA CHAR1 OVLJMP ACCENT EINEXC, > / END IFDEF FORIN /*************************************************************************** /**** CAUTION - RESIDENT OVERLAY AREA **** /**** THIS AREA IS OVERLAYED BY LIST PROCESSING AND SPELL **** /*************************************************************************** EINEXD, MQL / TUCK THE CHAR ACL TAD (-EDUPAR) / CHECK FOR UP AND DOWN ARROW SNA JMP EINEXM TAD (EDUPAR-EDDNAR) SNA CLA JMP EINEXM AC7777 DCA REMCUR / NEITHER, SET "REMCUR" TO -1 EINEXM, ACL / GET CHARACTER BACK CMA TAD (-EDXVLN) / TEST FOR OK SMA JMP EIBAD TAD (EDXVEC+EDXVLN) / MAKE POINTER TO TRANSFER VECTOR TABLE DCA T1 / STORE FOR INDIRECT PICKUP CDFLP / CHANGE TO FIELD WHERE TABLE LOCATED TAD I T1 / PICK UP ROUTINE ADDRESS CDFMYF / CHANGE BACK TO THIS FIELD DCA T1 / STORE FOR INDIRECT JUMP TO ROUTINE JMP I T1 / TRANSFER TO ROUTINEE REQUESTED /*************************************************************************** /**** CAUTION - RESIDENT OVERLAY AREA **** /**** THIS AREA IS OVERLAYED BY LIST PROCESSING AND SPELL **** /*************************************************************************** / GOTO PAGE entrance for emulating ADVANCE PAGE.... RPGETUNT,XX / ADVANCE A PAGE CLA / CHAR. PASSED BY LODCHR TAD RPGETUNT / RETURN (A) AND ARG. PTR. DCA GETUNT / FOR NORMAL PROCESS JMP GETRPT / FOR NON-CONTINUOUS ECHO /=========================================================================== /==== THIS IS A CO-ROUTINE TYPE SUBROUTINE ==== /=========================================================================== GETUNT, XX / CO-ROUTINE ENTRY POINT AC0001 / SET FOR CONTINUOUS ECHO GETRPT, DCA ECHFLG / GOTO PAGE NON-CONTINUOUS ECHO DCA OVSFLG / CLEAR OVERSTRIKE FLAG (DEAD KEY) JMS LODCHR / LOAD FIRST AVAILABLE CHARACTER JMP GETUNZ / END OF FILE - AC=0 JMS CHKUNT / AC = CHARACTER OR BUFFER CODE GETUNX, XX / CHKUNT CO-ROUTINE RETURN POINT SMA SZA / CHECK FOR VALID CHARACTER JMP GETUNY / YES, GO HANDLE IT GETUNQ, SMA CLA / WAS THIS A SPECIAL CHARACTER TAD I CURPTR / YES, NOT DONE, GET CHARACTER BACK GETUNZ, JMS I GETUNT / GETUNT CO-ROUTINE RETURN POINT SZA / IS A CHARACTER BEING RETURNED ? DCA I CURPTR / YES, STORE IT IN THE BUFFER TAD OVSFLG / GET THE OVERSTRIKE FLAG (DEAD KEY) SZA / IS IT SET ? JMP GETUNO / YES, GO HANDLE DEAD KEY SEQUENCE TAD I CURPTR / NO, GET THE CURRENT CHARACTER TAD (-ECSTOV) / COMBINE THIS WITH START OF DEAD KEY CODE SNA CLA / IS THIS THE START OF DEAD KEY SEQUENCE ? JMP GETUNP / YES, GO HANDLE IT GETUNY, AC0001 / NO, SET UP TO MOVE TO NEXT CHARACTER CURMOV / GO DO THE MOVE JMP GETUNZ / END OF FILE, GO HANDLE IT JMS LODCHR / PICK UP THE NEXT AVAILABLE CHARACTER JMP GETUNZ / END OF FILE, GO HANDLE IT JMP I GETUNX / RETURN TO CHKUNT /*************************************************************************** /**** CAUTION - RESIDENT OVERLAY AREA **** /**** THIS AREA IS OVERLAYED BY LIST PROCESSING AND SPELL **** /*************************************************************************** GETUNP, ISZ OVSFLG / SET OVERSTRIKE FLAG (DEAD KEY) GETUNO, SPA CLA / CHECK VALUE OF FLAG JMP GETUNR / JUMP IF END OF OVERSTRIKE ADVPTR / ADVANCE TO NEXT BUFFER CHARACTER JMP GETUNZ / END OF FILE, GO HANDLE IT TAD (-ECNDOV) / COMBINE WITH END OF DEAD KEY CODE SZA CLA / IS THIS THE END OF THE DEAD KEY SEQUENCE ? JMP GETUNQ / NO, GO AND GET THE CHARACTER BACK AC7777 / YES, THIS IS THE END OF THE DEAD KEY DCA OVSFLG / SET END FLAG JMP GETUNQ / GO AND GET THE CHARACTER BACK GETUNR, DCA OVSFLG / SHOW OVERSTRIKE DONE (DEAD KEY) ADVPTR / MOVE TO NEXT BUFFER CHARACTER NOP / GET PAST END CODE BKPSPC NOP / BACK UP TO BEGINNING JMP GETUNY / NOW REALLY ADVANCE OVER IT OVSFLG, .-. /*************************************************************************** /**** CAUTION - RESIDENT OVERLAY AREA **** /**** THIS AREA IS OVERLAYED BY LIST PROCESSING AND SPELL **** /*************************************************************************** / / A REQUEST FOR V2 GOTO-PAGE, GOLD:BOTTOM, OR GOTO-RULER / IS BEING PROCESSED. / / NOTE: 'OVEXIT' AND 'OVINIT' ARE CALLED AS SUBROUTINES, AND SO / MUST NOT USE ANY ADDITIONAL OVERLAYS (I.E., MUST NOT USE 'OVLJMP') / RPTOP, OVLJMP;OVEXIT / AC => 0, GO CLOSE DOC AND RETURN HERE OVLJMP;OVINIT / REOPEN DOCUMENT, THEREBY FILLING THE / APPROPIATE BUFFERS WITH THE DOCUMENT / HEADER BLOCK AND RPPGDS BLOCK / PREVENT DISPLAY OF DOCUMENT HDR INFO / WHEN REPAINTING SCREEN CDFFIO / CHANGE TO FILE SYSTEM FIELD TAD I (SCFSPC) / GET NUMBER OF BLOCKS LEFT ON DISK CDFMYF / BACK TO THIS FIELD JMS MNUPUT / STORE VALUE FOR USE BY STATUS LINE LINFRE-MUBUF / LOCATION IN FIELD 2 FOR BLOCKS FREE OVLJMP;OVRRP2 / GO PERFORM THE GOTO-PAGE, GOLD:BOTTOM, / OR GOTO-RULER REQUEST EIHELP, OVLJMP;OVHELP / HELP COMMANDS EIINTB, OVLJMP;OVGLTB / GOLD:TAB (INDENT TABS) /A215 X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------------- PAGE /*************************************************************************** /**** END OF RESIDENT OVERLAY AREA **** /**** PREVIOUS AREA IS OVERLAYED BY LIST PROCESSING AND SPELL **** /*************************************************************************** DSKBLK=.%400+DLOEDT / DISK BLOCK WHERE PAGE IS LOADED EIRBSE, IAC / RUB OUT SENTENCE EIRBWD, IAC / RUB OUT WORD EIRBLN, IAC / RUB OUT LINE EIRBCH, / RUB OUT CHARACTER DCA GRAMUN / SET UNIT TYPE TAD (ECTMRK) / INSERT MARKER JMS INSERT JMS BACKUN / BACK UP ONE UNIT JMS BEEPER TAD (CNTMOD) JMP DELUNT / USE DELETE CODE CNTUN1, JMS CHKUNR CNTUNT, TAD (-ECTMRK) SZA CLA JMP CNTUN1 DCA I CURPTR JMS SCRNMD / SHOW SCREEN MODIFIED JMP LSTUNT / QUIT WUEN MARK FOUND GOTMRK, IAC SLXMOD, IAC EIENTR, IAC EIPAGE, IAC EIPARA, IAC EITABP, IAC EISENT, IAC EIWORD, IAC EILINE, IAC EICHAR, DCA GRAMUN / SET UNIT TYPE JMS SETUNT TAD EDMODE / GET CURRENT MODE AND (MVMASK) TAD (JMP I MVJTAB) / GET JUMP TO RIGHT ROUTINE DCA .+1 JMP I .-. MVJTAB, ADVUNT / ADVANCE BKPMOD= .-MVJTAB BKPUNT / BACK UP BLDMOD= .-MVJTAB BLDUNT / BOLD UDLMOD= .-MVJTAB UDLUNT / UNDER LINE NBDMOD= .-MVJTAB NBDUNT / REMOVE BOLD NUDMOD= .-MVJTAB NUDUNT / REMOVE UNDER LINE CASMOD= .-MVJTAB CASUNT / UPPER/LOWER CASE MVMASK= 7 SETUNT, XX / SET UNIT TAD GRAMUN TAD (JMP I MVCTAB) / MAKE JUMP OUT OF UNIT CODE DCA MVCODE / AND STORE IT DCA SCRLFL / CLEAR SCROLL FLAG JMP I SETUNT CHKUNR, XX / USED FOR OFF-PAGE CALLS JMS I CHKUNT JMP I CHKUNR CHKUNH, XX / SAME AS CHKUNR, BUT TEST HALT FLAG HLTTST AC7777 / RETURN "DONE" IF SET CDFBUF JMS I CHKUNT JMP I CHKUNH CHKUNT, XX MVCODE, JMP I .-. SETBNT, XX / SET FOR BACKUP TAD (MVBTAB-MVCTAB) JMS SETUNT JMP I SETBNT MVBTAB, CHRBNT LINBNT WRDBNT SNTBNT TABBNT PARUNT PAGBNT FLDBNT MVCTAB, CHRUNT LINUNT WRDUNT SNTUNT TABUNT PARUNT PAGUNT FLDUNT SLCTMD= .-MVCTAB / "SELECT" TYPE CODE SLTUNT CNTMOD= .-MVCTAB / "COUNT" TYPE CODE CNTUNT ECFIEL= 76 / CODE FOR FIELD DELIMITER (RIGHT ANGLE) FLDBN1, JMS CHKUNR FLDBNT, AND P177 TAD (-ECFIEL) SNA CLA JMP FLDBN1 FLDBN2, JMS CHKUNH FLDUNT, AND P177 TAD (-ECFIEL) SZA CLA JMP FLDBN2 FLDUN3, AC0001 JMS CHKUNH AND P177 TAD (-ECFIEL) SNA CLA JMP FLDUN3 JMP LSTUNT LINUN1, JMS CHKUNR LINUNT, LINBNT, CLA TAD SCRLFL SNA JMP LINUN1 LINUN2, SMA JMP LSTUNT CHRUNT, SPA CLA TABUN2, AC0001 JMS CHKUNR / RETURN CODE TO CO-ROUTINE CALLER LSTUNT, CHRBNT, AC7777 / SET DONE CODE JMP LSTUNT-1 / GO RETURN CODE TO CALLER SLTUN1, JMS CHKUNR / MAKE CALL TO CHKUNT SLTUNT, JMS ESLCTD / CHECK FOR SELECT MARK AND DELETE IT JMP SLTUN1 / NOT FOUND, GO CHECK NEXT CHARACTER DCA EDMODE / FOUND, CLEAR THE EDIT MODE FLAG JMP LSTUNT / GO RETURN DONE CODE TO CALLER RPCUBK, 0 / Rapid Paging CUrrent BlocK id # X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------- PAGE DSKBLK=.%400+DLOEDT / DISK BLOCK WHERE PAGE IS LOADED WRDUN1, JMS CHKUNR WRDBNT, JMS WRDTST SNA CLA JMP WRDUN1 WRDUN2, JMS CHKUNR WRDUNT, JMS WRDTST SZA CLA JMP WRDUN2 WRDUN3, AC0001 JMS CHKUNR JMS WRDTST SNA CLA JMP WRDUN3 JMP LSTUNT WRDTST, XX JMS PARCHK SZA TAD (ECNWPG-40) SZA TAD (40-ECTAB) JMP I WRDTST SNTUNX, XX SKP SNTUN1, JMS CHKUNR JMS WRDTST SNA CLA JMP SNTUN1 SNTUN3, JMS CHKUNH JMS PARCHK SZA TAD (ECNWPG-".+200) SZA TAD (".-"!) SZA TAD ("!-"?) SZA CLA JMP SNTUN3 JMP I SNTUNX SNTBNT, JMS SNTUNX JMP WRDUN3 SNTUNT, JMS SNTUNX JMP WRDUN3+1 TABUNT, AND P177 / MASK OFF ATTRIBUTES TAD (-ECTAB) SNA CLA JMP TABUN2 TAD SCRLFL SZA JMP LINUN2 TABBNT, CLA JMS CHKUNR JMP TABUNT PARUN0, JMS CHKUNR PARUNT, JMS PARCHK SNA CLA JMP PARUN0 PARUN1, JMS CHKUNH MQL MQA TAD (-ECPGRF) SNA CLA JMP PARUN2 / STOP QUICK ON GRAF MARKER MQA JMS PARCHK SZA CLA JMP PARUN1 JMS CHKUNR JMS PARCHK SZA CLA JMP PARUN1 PARUN2, AC0001 JMS CHKUNR JMS PARCHK SNA CLA JMP PARUN2 JMP LSTUNT PARCHK, XX AND P177 TAD (-ECNWLN) SZA TAD (ECNWLN-ECNWPG) JMP I PARCHK PAGBN1, JMS CHKUNR PAGBNT, JMS WRDTST SNA CLA JMP PAGBN1 PAGUN1, JMS CHKUNH PAGUNT, TAD (-ECNWPG) SZA TAD (ECNWPG-ECPMRK) SZA CLA JMP PAGUN1 JMP WRDUN3 / IF AC= SELECT POINT / THEN BUMP RETURN ADDRESS / SET THE LINE MODIFIED FLAG / DELETE SELECT POINT FROM BUFFER / DELETE ALL CHARACTERS FOLLOWING IT UNTIL THE NEXT CHARACTER WHICH / IS NOT A JUSTIFIED SPACE OR A LINE MODIFIED CHARACTER OR A RULER / MODIFIED CHARACTER. / IF A RULER MODIFIED CHARACTER IS FOUND SET THE RULER MODIFIED FLAG ESLCTD, XX TAD (-ECSLPT) / IF AC=SELECT POINT SZA CLA / JMP I ESLCTD / ISZ ESLCTD / THEN BUMP RETURN ADDRESS SLNMOD / SET LINE MODIFIED FLAG SLTUN2, DCA I CURPTR / LOOP, DELETE CHAR SLTUN4, JMS LODCHR / GET_CHAR (FROM EDIT BUFFER) JMP I ESLCTD / EXIT IF END OF FILE TAD (-ECJSPC) / EXIT IF CHAR .NE. (JUSTIFIED SPACE SNA CLA / JMP SLTUN2 / JMS CHKLMD / OR RULER MOD OR LINE MOD) JMP I ESLCTD / (RETURNS HERE IF NOT A 'MODIFIED' CHAR) JMP SLTUN4 / END_LOOP X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------- PAGE DSKBLK=.%400+DLOEDT / DISK BLOCK WHERE PAGE IS LOADED ESMODE, XX / SET EDIT MODE CDFMYF AC7777 TAD I ESMODE / GET ARG PTR DCA X0 TAD EDMODE / GET MODE AND I X0 / CLEAR SOME,... TAD I X0 / ...AND SET SOME DCA EDMODE ISZ ESMODE / BUMP TO RTN ADR JMP I ESMODE / AND RETURN / ESAPTR ADVANCE CURPTR 1 CHARACTER / / THIS ROUTINE WILL ADVANCE TO THE NEXT NON-NULL CHARACTER AFTER / THE CURRENT POSITION. IT UPDATES CURPTR TO POINT TO THIS / CHARACTER. IF THE CURRENT CHAR POINTED TO IS A NULL THEN THE / FIRST NON-NULL CHARACTER IS RETURNED. IF THE CHAR CURRENTLY / POINTED TO IS NOT NULL THEN THE NEXT NON-NULL CHAR IS RETURNED. / / CALL: / / ADVPTR / CALLED THROUGH PAGE ZERO / / / ESAPTR, XX / ENTRY POINT TO ESAPTR CLA / GET CHARACTER AT CURRENT POSITION CHKPTR / RETURN AC < 0 IF ETX IN BUFFER / AC = 0 IF NULL CHAR / AC > 0 IF OK CHARACTER SPA / ETX IN BUFFER? JMP ESAPT2 / YES, GO GET CHAR FROM DISK SZA CLA / NULL? AC0001 / NOT NULL ADVANCE 1 CHAR ADVCHR / ADVANCE TO NEXT NON-NULL CHARACTER SPA / REAL CHARACTER (NOT ETX)? JMP ESAPT2 / ETX FOUND, GO EXPAND ESAPT1, ISZ ESAPTR / INCREMENT FOR SKIP RETURN SKP / SKIP OVER CLEAR FOR NON-SKIP RETURN ESAPT4, CLA / NON-SKIP RETURN SO CLEAR AC JMP I ESAPTR / BYE-BYE ESAPT2, JMS ESGETE / GET NEXT CHARACTER FROM DISK SPA SNA / LEGAL CHARACTER? JMP ESAPT4 / NO TAKE NON-SKIP RETURN. ETX IN FILE! DCA I CURPTR / PLACE CHARACTER IN BUFFER. OVERWRITING / ETX MARK AC0001 / MOVE FORWARD ONE CHARACTER CHKPTR / RETURN AC <= 0 THEN OK TO INSERT ETX MARK / AC > 0 THEN MUST SAVE CHAR FIRST SPA SNA CLA / OK TO OVERWRITE? JMP ESAPT3 / YES, GO SHOVE IT IN. TAD I CURPTR / GET CHARACTER TO WRITE TO DISK PUTSTX / PUT CHARACTER OUT TO DISK ESAPT3, TAD (ECETX) / RESTORE OVERWRITTEN ETX MARKER DCA I CURPTR AC7777 / BACKUP TO CHARACTER RETRIEVED FROM DISK CHKPTR JMP ESAPT1 / AND TAKE SKIP RETURN / ESBPTR BACKUP CURPTR 1 CHARACTER / / THIS ROUTINE WILL BACKUP TO THE NEXT NON-NULL CHARACTER BEFORE / THE CURRENT POSITION. IT UPDATES CURPTR TO POINT CHARACTER. / IF THE CURRENT CHARACTER POINTED TO IS A NULL THEN THE FIRST / NON-NULL CHARACTER BEFORE THE CURRENT POSITION IS RETURNED. / / CALL: / / BKPPTR / CALL THROUGH PAGE ZERO LINK / / / ESBPTR, XX / ENTRY POINT ESBPT1, AC7777 / BACKUP ONE CHARACTER CHKPTR / RETURN AC < 0 IF STX IN BUFFER / AC = 0 IF NULL / AC > 0 IF LEGAL CHAR SMA SZA / LEGAL CHARACTER? JMP ESBPT3 / YES GO TAKE SUCCESSFUL EXIT SMA CLA / STX IN BUFFER? JMP ESBPT1 / NO, NULL SO LOOP TILL NON-NULL JMS ESGETS / GET CHARACTER FROM DISK SPA SNA / LEGAL CHAR? JMP ESBPT4 / STX IN FILE GO EXIT DCA I CURPTR / PUT CHARACTER IN TEXT BUFFER AC7777 / BACKUP A CHARACTER CHKPTR / RETURN AC <= 0 THEN OK TO INSERT STX / AC > 0 THEN PUT CHAR TO DISK SPA SNA CLA / MUST SAVE CHARACTER? JMP ESBPT2 / NO CAN OVERWRITE TAD I CURPTR / GET CHARACTER FROM BUFFER AND PUTETX / WRITE TO DISK ESBPT2, TAD (ECETX) / INSERT START OF TEXT MARK DCA I CURPTR / INTO BUFFER AC0001 / REPOSITION OVER CHARACTER BACKED UP TO CHKPTR ESBPT3, ISZ ESBPTR / SUCCEEDED SO SKIP RETURN JMP I ESBPTR / BYE BYE ESBPT4, AC0001 / REPOSITION OVER FIRST CHARACTER IN FILE CHKPTR CLA / CLEAR AC SINCE NOT FOUND JMP I ESBPTR / AND TAKE FAILURE RETURN EIPGRF, TAD (ECPGRF-ECNWLN) / Paragraph marker. EINWLN, TAD (ECNWLN-ECENLN) / Offset to GOLD:CENTER DCA T2 / save for overlay. OVLJMP;OVNWLN / Process new-line (check for CENTERED). TAD T2 / Get return code. EICENT, TAD (ECENLN-ECTAB) EITAB, TAD (ECTAB-ECPHYP) EIHYP1, TAD (ECPHYP) EINSRT, EIFXT1, JMS CHKSPC / CHECK FOR SPACE BEFORE INSERTING ANYTHING CDFBUF / LET'S PUT THIS IN THE RIGHT FIELD, NOW JMS ESIMCH / INSERT IT /M241 JMP EIFXT2 SWTHMA, XX / "MA" SWTHMA ROUTINE CDFMNU / CHANGE TO MENU DATA FIELD SNA CLA / WANT TO SAVE THE "MA" SWITCH? JMP SWTHM1 / NO: THEN RESTORE "MA" ORIGINAL STATE TAD I (MUBUF+MNMATH) / YES: THEN GET THE "MA" PRESENT SETTING DCA STORMA / SAVE IT FOR AFTER G-T-P OR GOLD-BOT DONE DCA I (MUBUF+MNMATH) / SHUT SWITCH TO DEACTIVATE MATH FOR NOW JMP SWTHM2 / GO SET UP TO RETURN TO CALLER SWTHM1, TAD STORMA / GET BACK THE ORIGINAL "MA" SETTING DCA I (MUBUF+MNMATH) / RESTORE THE "MA" SWITCH SETTING SWTHM2, CDIEDT / CHANGE BACK TO EDITOR DATA FIELD JMP I SWTHMA / RETURN TO CALLER STORMA, 0 / HOLDS ORIGINAL SETTING OF MA SWITCH HDRPUT, XX / JMS HDRPUT - HDROFST (AC=VALUE) CDFMYF MQL AC7776 TAD I HDRPUT ISZ HDRPUT CIFFIO FILEIO XHDRPT JMP I HDRPUT / SVSLCR SAVE SELECT CURSOR POSITION /A209 / /A209 / THIS ROUTINE IS USED FOR RECTANGULAR CUT AND PASTE TO GIVE /A209 / ONE OF THE COLUMN DELIMITER BOUNDARIES /A209 / /A209 / CALL: /A209 / /A209 / JMS SVSLCR /A209 / /A209 / /A209 / N O T E ! ! ! /A209 / ------------- /A209 / /A209 / THE LOCATION SLCRPT MUST REMAIN ON THE /A209 / SAME PAGE AS THE SVSLCR CODE. IF IT IS /A209 / MOVED TO A DIFFERENT PAGE (OTHER THAN ZERO) /A209 / THIS ROUTINE WILL NOT WORK!!!! /A209 / /A209 / /A209 SVSLCR, XX /ENTRY POINT /A209 TAD CURSOR /GET CURRENT CURSOR POSITION /A209 DCA SLCRPT /SAVE SELECT CURSOR POSITION /A209 JMP I SVSLCR /RETURN /A209 SLCRPT, ZBLOCK 1 /SELECT CURSOR POSITION SAVE LOCATION /A209 CTB009, ECSLPT; SCRTM1 / SELECT POINT ECPCT2; SCRTM2 / END CONTROL ECPCT1; SCRTM4 / START CONTROL 0 / INDICATE END OF TABLE X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------- PAGE DSKBLK=.%400+DLOEDT / DISK BLOCK WHERE PAGE IS LOADED IFDEF CONDOR < DM1ADJ= 0 > / SCREEN LINE ADJUSTMENT FOR DECMATE 2 /A226 IFNDEF CONDOR < DM1ADJ= -12 > / SCREEN LINE ADJUSTMENT FOR DECMATE 1 /A226 / REPOSITION CURSOR BY SENDING ESCAPE SEQUENCE: / [ CURLIN ; CURSOR H PCUR, XX DCA CURPOS / SAVE THE AC / PUT OUT THE CONTROL STRING INTRODUCER. PUTESC / OUTPUT AN ESCAPE CHARACTER TO SCREEN "[-200 / FOLLOWED BY THE "[" CHARACTER / PUT OUT THE FIRST DIGIT STRING. TAD WIDNAR / GET THE WIDE-NARROW FLAG /C226 SNA CLA / IN SPLIT SCREEN MODE ? /C226 TAD (DM1ADJ) / YES, MAKE SCREEN ADJUSTMENT FOR DMI /C226 TAD CURLIN / NO, COMBINE WITH CURRENT LINE COUNT TAD SCRNLN / ADD SIZE OF SCROLL AREA CIFMNU / INVOKE THE OUTDIG ROUTINE TO OUTPUT THE JMS OUTDIG / LINE POSITION IN BASE 10 ARGUMENTS. TAD (";-200) / INSERT A SEMI-COLON BETWEEN ARGUMENTS PUTOUT / PUT OUT THE SECOND DIGIT STRING. TAD CURPOS / GET THE CURSOR POSITION SPA / IF DESIRED POSITION IS LEFT OF SCREEN CLA / THEN DO COLUMN 1 / FOR SOME REASON, THIS ARGUMENT IS ONE TOO SMALL. HENCE, / IN VT-278 MODE WE INCREMENT BEFORE CALLING OUTDIG IAC / INCREMENT THE COLUMN NUMBER CIFMNU / INVOKE THE OUTDIG ROUTINE TO OUTPUT THE JMS OUTDIG / COLUMN POSITION IN BASE 10 ARGUMENTS. TAD ("H-200) / PUT OUT THE ENDING H PUTOUT JMP I PCUR / RETURN / TEST LIMITS FOR 132 COLUMN MODE OF VT100 TSTLIM, XX /D226 TAD SPLTFL / IN SPLIT SCREEN MODE? /D226 SNA CLA / SKIP IF YES. /D226 JMP TSTLMB / JMP TO RETAIN/SET 80 COL MODE. TAD WIDNAR / GET OFFSET FOR WIDE/NARROW (0 OR 52) /A223 TAD (-WIDTH) / ADD NEGATIVE SCREEN WIDTH = -132 OR -80 DCA SCNSZ / STORE FOR SCREEN SIZE CHECK /A223 TAD WIDNAR / GET OFFSET AGAIN (0 OR 52) /A223 SZA / /A223 TAD (4) / FIX MARGIN TEST OFFSET (0 OR 56) /A223 TAD (-COLLIM-2+WIDTH) /-242+132=-110 (+0 OR 56 = -110 OR -54) /M223 DCA MARG / STORE AS MARGIN CHECKER /A223 TAD CURSOR / TAD MARG / /A223 SPA SNA CLA / IS CURSOR IN LEFTMOST PART OF SCREEN? JMP TSTLMA / JMP IF YES. SET LOWLIM. TSTLMD, TAD CURSOR /A223 TAD SCNSZ /A223 SPA / IS CURSOR IN RIGHT PART OF SCREEN? /M223 JMP TSTLME / NO, /M226 TAD LOWLIM / YES; WITHIN BOUNDS OF THIS SCREEN? /A223 SPA CLA /A223 JMP TSTLME / MAYBE /A223 TAD MARG / NO, ADJUST LOW LIMIT BY SCREEN MARGIN /A223 TSTLMF, TAD LOWLIM /A223 DCA LOWLIM /A223 JMS CLSSET / INITIALIZE SCROLL POINTERS FOR STATUS JMP TSTLMD / RE-CHECK FOR NEXT SCREEN /A223 TSTLME, CLA /A226 TAD CURSOR / DID WE BACKUP PAST LOW LIMIT OF SCREEN?/A223 TAD LOWLIM / /A223 SMA CLA /A223 JMP TSTLMX / NO /A223 TAD MARG / YES, ADJUST LOW LIMIT DOWN BY MARGIN /A223 CIA JMP TSTLMF / /A223 TSTLMA, TAD LOWLIM / YES. /A223 SZA CLA / IS LOWLIM SET TO LEFT? /A223 JMS CLSSET / NO, INIT SCROLL POINTERS FOR STATUS /A223 TSTLMB, DCA LOWLIM / RESET LOWLIM FOR 80 COL RESET. TSTLMX, JMP I TSTLIM SCNSZ, -COLM81 / SCREEN SIZE (-132 OR -80), INIT:NARROW/A223 CENTER, XX / CENTER LINE CIFMNU / CALL IN MENU FIELD /M217 JMP EFCNTR /M217 CNTREX, JMP I CENTER / RETURN /M217 /KEEP NEXT TWO LINES TOGETHER!!! /A223 MARG, / MARGIN CHECK SIZE FOR WIDE/NARROW /A223 LNECHT, XX / ECHO HYPHEN OR SELECT POINT TAD (-ECHYLN) / compare with hyphen character SNA / Is it a hyphen? JMP LNECH1 / yes, so print hyphen character TAD (ECHYLN-ECSLPT) / no, is it a select point? SZA CLA JMP I LNECHT / no, return to caller / Here if character is a select point JMS PUTSPC / yes, display select point in EXGSLC / special graphics mode then return JMP I LNECHT / / Here if character is a hyphen LNECH1, TAD CHRATR / GET ATTRIBUTE OF PREVIOUS CHAR TO / APPEND W/HYPHEN TAD (55) PUTOUT / DO HYPHEN JMP I LNECHT SCRLTX, XX / REFRESH CURRENT CURSOR LINE TAD (PTRBLK+NPTRS-1) DCA SCRLT1 TAD CURPTR DCA SCRLT2 / SAVE CURPTR TAD CURSOR DCA SCRLT3 / AND CURSOR DCA CURPOS / RESET CHAR COUNTER TO START OF LINE. TAD I SCRLT1 / GET LINE PTR SNA JMP SCRLTY / CHECK FOR STX MSG IF 0 DCA CURPTR JMS PUTLIN TAD SCRLT2 DCA CURPTR / RESTORE TAD SCRLT3 DCA CURSOR JMP SCRLTZ / AND RETURN SCRLTY, ISZ SCRLT1 TAD I SCRLT1 / TEST ONE AFTER THE NULL SZA CLA TAD (STXMSG) JMS PGMSG / OUTPUT --TOP-- OR BLANKS SCRLTZ, JMP I SCRLTX / AND RETURN SCRLT1, 0 SCRLT2, 0 SCRLT3, 0 EISUBS, AC7776 EISUPS, DCA CASBIT OVLJMP;OVSUPS X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------- PAGE DSKBLK=.%400+DLOEDT / DISK BLOCK WHERE PAGE IS LOADED EIDLTW, AC0002 / SET GRAMMATICAL UNIT FOR WORD DELETION EIDLTC, / SET GRAMMATICAL UNIT FOR CHARACTER DELETION DELUNT, DCA GRAMUN OVLJMP;OVDLTE / JUMP TO DELETE OVERLAY CHKRPC, XX / CHECK FOR ECSTRL (START OF RULER), / ECPCT1 (START CONTROL), / ECPCT2 (END CONTROL) / RTN 1 IF ECSTRL / RTN 2, AC=0 IF REDUNDANT PCTL / RTN 2, AC=INPUT IF OK MQL MQA /D206 TAD (-ECSTRL) /D206 SZA /D206 ISZ CHKRPC / BUMP RTN ADDR IF NOT RLR START /D206 TAD (ECSTRL-ECPCT2) /D206 SNA /D206 JMP CHKRP2 / JUMP IF END PRINT CNTRL /D206 TAD (ECPCT2-ECPCT1) /D206 SZA ZZCASE /A206 CTB015-1 /A206 / ECSTRL; CHKRP1 / START RULER /A206 / ECPCT2; CHKRP2 / END CONTROL /A206 / ECPCT1; CHKRP3 / START CONTROL /A206 / 0 /A206 ISZ CHKRPC /A206 JMP CHKRP1 / JUMP IF NOT PRINT CNTRL CHKRP3, AC0001 / CHECK FOR REDUNDANT CONTROL /M206 CHKRP2, ISZ CHKRPC / SET TO SKIP RETURN /A206 TAD PCTLFL SZA / SKIP IF REDUNDANT CHKRP1, CLA MQA / ELSE RETURN INPUT JMP I CHKRPC CTB015, ECSTRL; CHKRP1 / START RULER /A206 ECPCT2; CHKRP2 / END CONTROL /A206 ECPCT1; CHKRP3 / START CONTROL /A206 0 /A206 PTDASH, XX / OUTPUT ARG2 A TOTAL OF ARG1 TIMES CDFMYF TAD I PTDASH DCA PTDSH1 PTDSHA, TAD ("-&177) PUTOUT ISZ PTDSH1 JMP PTDSHA ISZ PTDASH JMP I PTDASH PTDSH1, .-. MNUGET, XX / JMS MNUGET - MNOFST - RETURNS VALUE IN AC CDFMYF TAD I MNUGET / GET OFFSET ISZ MNUGET TAD MNUCAL+1 / ADD BASE DCA T1 CDFMNU TAD I T1 / GET VALUE CDFMYF JMP I MNUGET / AND RETURN MNUPUT, XX / JMS MNUPUT - MNOFST / EXPECTS VALUE IN AC DCA T2 / SAVE VALUE CDFMYF TAD I MNUPUT / GET OFFSET ISZ MNUPUT TAD MNUCAL+1 / ADD BASE DCA T1 CDFMNU TAD T2 DCA I T1 / STORE VALUE CDFMYF JMP I MNUPUT / AND RETURN SCRLPX, XX / SET UP AUTO-INDEX REGISTERS FOR SCRLUP TAD (PTRBLK) / GET POINTER TO POINTER BLOCK DCA X0 / STORE IN AUTO-INDEX REGISTER TAD (PTRBLK-1) / GET POINTER TO POINTER BLOCK -1 DCA X1 / STORE IN AUTO-INDEX REGISTER TAD (-NPTRS+1) / PICK UP ONE LESS LINE COUNT DCA X2 / STORE VALUE IN COUNTER JMP I SCRLPX / RETURN BACK TO SCRLUP ROUTINE / THIS ROUTINE WILL BACK UP TO THE NEXT CHARACTER. IF THE CHARACTER IS / AN END DEAD KEY SEQUENCE CODE THEN IT WILL BACK UP UNTIL IF FINDS THE / START DEAD KEY SEQUENCE AND RETURN THAT CHARACTER. / IT TAKES A SKIP RETURN UNLESS IT FINDS THE START_OF_TEXT IN WHICH CASE / IT TAKES A REGULAR RETURN / DATA FIELD MUST BE SET TO BUFFER FIELD (CDFBUF) ESBSPC, XX / BACK UP CHARACTER (BKPSPC) ESBSP3, BKPPTR JMP I ESBSPC / BACK UP TO FIRST NON_NULL CHARACTER TAD (-ECNDOV) / IF CHAR = END_DEAD_KEY_SEQUENCE SZA CLA / THEN JMP ESBSP2 / REPEAT ESBSP1, BKPPTR JMP I ESBSPC / BACK UP TO FIRST NON_NULL TAD (-ECSTOV) / SZA CLA / JMP ESBSP1 / UNTIL CHAR = START_DEAD_KEY_SEQUENCE ESBSP2, TAD I CURPTR / GET CHAR AGAIN ISZ ESBSPC / BUMP RETURN ADDRESS JMP I ESBSPC / RETURN / THIS ROUTINE ADVANCES TO THE NEXT CHARACTER WHICH TAKES A SPACE ON THE SCREEN / THEREFOR IT WILL RETURN THE FIRST CHARACTER OF A DEAD KEY SEQUENCE BUT NOT / ANY CHARACTER FOLLOWING IN THAT SEQUENCE. ESASPC, XX / ADVANCE SPACE (ADVSPC) CLA / CLEAR AC CHKPTR / GET CURRENT CHARACTER SMA JMP ESASP1 / USE LODCHR ONLY IF MIGHT BE ETX ADVPTR / ETX IN BUFFER GET NEXT CHAR FROM FILE JMP I ESASPC / ESASP1, TAD (-ECSTOV) / IF LAST CHARACTER RETURNED FROM THIS ROUTINE / WAS START OF DEAD KEY SEQUENCE SZA CLA / THEN SKIP OVER ALL REMAIN CHARS IN SEQUENCE JMP ESASP3 / / REPEAT ESASP2, ADVPTR JMP I ESASPC / GET PART OF COMPOSITE CHARACTER TAD (-ECNDOV) / SZA CLA / JMP ESASP2 / UNTIL CHAR = END OF DEAD KEY SEQUENCE / REPEAT ESASP3, ADVPTR JMP I ESASPC / GET CHARACTER ISZ ESASPC / BUMP RETURN ADDRESS JMP I ESASPC / RETURN TO CALLER WITH CHAR IN AC SCHMOD= 10 / SEARCH MODE FLAG SLTMOD= 20 / SELECT MODE FLAG EDTMOD, SCHMOD!SLTMOD / CLEAR SEARCH AND SELECT MODE BITS 0 / DON'T SET ANY MODE BITS SETCUR, XX TAD LOWLIM TAD CURSOR JMS PCUR JMP I SETCUR / THE FOLLOWING IS USED BY V2 GOTO PAGE OVERLAYS... CURPG1, 1 / EDIT BUFFER PAGE # (UNITS,TENS,HUNDREDS) / THE FOLLOWING ROUTINE IS CALLED BY BOTH SCRLUP AND SCRLDN. IT / COUNTS THE NUMBER OF LINES SCROLLED (CNSCRL) FOR THE PREV/NEXT / SCREEN ROUTINES (DOES NOT ADJUST PAST 0) / ENTER: AC = SCROLL DIRECTION (+=UP, -=DOWN) / / WHEN IT IS DONE COUNTING, THE ROUTINE GETS THE SCROLL DIRECTION / BACK AND CALLS ROUTINE SCRADJ (NOTE THAT CALLS TO THIS ROUTINE / REPLACED CALLS TO ROUTINE SCRADJ IN THE TWO SCROLLING MODULES) SCRAD0, XX DCA T1 / SAVE THE SCROLL DIRECTION TAD CNSCRL / GET THE COUNTER SZA / IF IT'S 0, KEEP IT THERE TAD T1 / INCREMENT OR DECREMENT DCA CNSCRL / AND STORE IT BACK TAD T1 / GET SCROLL DIRECTION BACK JMS SCRADJ / GO WHERE WE HEADED IN THE 1ST PLACE JMP I SCRAD0 / AND THEN BACK TO WHERE WE CAME FROM CNSCRL, .-. / THE COUNTER / / GOTO-RULER VARIABLE / RRDIR, .-. / DIRECTION WE ARE MOVING TO RULER: / 1 = ADVANCING / -1 = BACKING UP / 0 = NOT DOING GOTO-RULER EIGADV, OVLJMP;OVGADV / GOLD ADVANCE X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------- PAGE DSKBLK=.%400+DLOEDT / DISK BLOCK WHERE PAGE IS LOADED INSERT, XX / INSERT (AC) IN BUFFER DCA ESICH1 / SAVE CHAR TAD CURPTR DCA ESICH2 / AND CURPTR DCA ESICH3 / INIT CNTR ESICHA, CHKPTR / CHECK CURPTR SNA SPA CLA JMP ESICHX / JUMP ON ETX OR NULL TAD ESICH1 MQL / GET INSERT TAD I CURPTR / GET CURRENT CHAR ESICHE, SWP / SWAP THEM DCA I CURPTR / STORE INSERT ISZ ESICH3 / BUMP CNTR ISZ CURPTR / AND CURRENT PTR TAD I CURPTR / GET NEXT CHAR SMA SZA JMP ESICHE / LOOP IF NOT SPECIAL CLA MQA DCA ESICH1 / SAVE NEXT INSERT JMP ESICHA / AND LOOP ESICHX, TAD I CURPTR / NULL? SNA CLA JMP ESICHB / JUMP IF SO CLA CLL TAD (-400) TAD ESICH3 SZL CLA JMP ESICHZ / JUMP IF NEAR STX TAD ESICH1 / GET INSERT ESICHK, DCA I CURPTR / STORE OVER ETX AC0001 CHKPTR / ADVANCE CURPTR SPA SNA CLA JMP ESICHY / JUMP ON NULL OR ETX TAD I CURPTR / ELSE OUTPUT IT PUTSTX ESICHY, TAD (ECETX) JMP ESICHC ESICHZ, TAD (-100) DCA ESICH3 / SET LOOP COUNT TAD CURPTR DCA ESICH4 / SAVE ETX CURPTR TAD ESICH1 / GET INSERT ESICHF, PUTETX / PUT IT OUT AC7777 CHKPTR / BACKUP CLA TAD I CURPTR / GET CAR TO CPY ISZ ESICH3 JMP ESICHF / PUT IT OUT TIL COUNT DONE ESICHG, MQL / ELSE SAVE TAD CURPTR DCA ESICH1 / WHILE WE SWAP CURPTRS TAD ESICH4 DCA CURPTR ESICHJ, AC7777 CHKPTR CLA MQA DCA I CURPTR / THEN MOVE IT TAD ESICH1 CIA TAD ESICH2 / DONE WITH COPY? SNA CLA JMP ESICHH / JUMP IF SO TAD CURPTR DCA ESICH4 / ELSE SWAP CURPTRS AGAIN TAD ESICH1 DCA CURPTR AC7777 CHKPTR CLA TAD I CURPTR / GET NEXT FOR COPY JMP ESICHG / AND LOOP ESICHH, CLA MQL / SET ZERO FOR CLEAR LOOP TAD CURPTR CIA TAD ESICH2 / MORE TO CLEAR? SZA CLA JMP ESICHJ / JUMP IF SO ADVCHR CLA / ELSE FIX @CURPTR JMP ESICHI / AND RETURN ESICHB, TAD ESICH1 / GET INSERT ESICHC, DCA I CURPTR / STORE IT ESICHD, TAD ESICH2 DCA CURPTR / RESTORE CURPTR ESICHI, JMP I INSERT / AND RETURN ESICH1, 0 ESICH2, 0 ESICH3, 0 ESICH4, 0 CLSCRN, XX / CLEAR SCREEN CIFMNU / CHANGE TO MENU FIELD JMS I (CALLN1) / GO PUT UP STATUS LINE DISPLAY JMS CLSSET / INITIALIZE SCROLL VALUES JMP I CLSCRN / RETURN TO CALLER CLSSET, XX / INITIALIZE SCROLL VALUES AC2000 DCA SCRNFL / SET SCREEN FLAG AC2000 DCA SCRLCT / AND BIG COUNT JMP I CLSSET / RETURN TO CALLER / PUTSPC PSEUDO CODE / / set terminal to special graphics mode / get character at call+1 / display character / reset terminal to USASCII mode / return to caller PUTSPC, XX / OUTPUT ARG IN GRAPHIC MODE PUTESC "(+3600 "0-200 TAD I PUTSPC PUTOUT JMS MNUGET / PICK UP CURRENT LANGUAGE WORD /A224 MNLANG / LOCATION FOR LANGUAGE WORD /A224 SMA / SKIP IF A NUMBER CODE /A224 IAC / CONVERT TO UPPER CASE ASCII /A224 BSW / PUT BITS INTO PROPER ORDER /A224 DCA PUTLNG / STORE IN LINE FOR PUTESC ROUTINE /A224 PUTESC "(+3600 PUTLNG, "0 / OVERLAYED WITH LANGUAGE CODE VALUE /A224 /D224 IFDEF ENGLSH < /D224 IFNDEF ENGCAN < /D224 "B-200 /D224 > / END IFNDEF ENGCAN /D224 IFDEF ENGCAN < /D224 "3-200 /D224 > / END IFDEF ENGCAN /D224 > / END IFDEF ENGLSH /D224 IFDEF CANADA < /D224 "3-200 /D224 > / END IFDEF CANADA /D224 IFDEF FRENCH < /D224 "R-200 /D224 > / END IFDEF FRENCH /D224 IFDEF DUTCH < /D224 "4-200 /D224 > / END IFDEF DUTCH ISZ PUTSPC JMP I PUTSPC IFDEF FORIN < / SUBROUTINE GETENT GETS THE ENTRY EN TABLE1 OR TABLE2 POINTED AT BY / POINT1 INTO THE AC GETENT, XX CDFPRT / CHANGE TO PRINTER FIELD TAD I POINT1 / GET TABLE ENTRY CDFMYF / RETURN TO THIS FIELD JMP I GETENT / RETURN TO CALLER > / END IFDEF FORIN EIDICT, OVLJMP;OVABRV / ENTRY POINT FOR "GOLD-ABBRV" X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------- PAGE DSKBLK=.%400+DLOEDT / DISK BLOCK WHERE PAGE IS LOADED BKPUNT, JMS BACKUN / BACK UP A UNIT JMP EIBAD / ERROR, CAN'T BACKUP PAST TOP OF FILE JMP EINEXT / FIX UP SCREEN AND GET NEXT CHARACTER BACKUN, XX JMS SAVLMD / SAVE MOD FLAGS AC7777 CURMOV JMP BKPUNV / ERROR IF AT STX ISZ BACKUN JMS SETBNT / SET BACKUP MODE TAD I CURPTR / GET CHAR JMS CHKUNT / CHECK FOR END OF UNIT BKPUNZ, .-. SZA JMP BKPUNX / JUMP IF LAST AC7777 CURMOV JMP BKPUNV / BACKUP, JUMP IF AT STX BKPUNW, TAD I CURPTR / RE-GET CHARACTER JMP I BKPUNZ / AND LOOP BKPUNX, SPA CLA BKPUNY, JMP I BACKUN / JUMP IF FINAL AC0001 CURMOV JMP BKPUNY / DO AN ADVANCE JMP BKPUNW / AND LOOP BKPUNV, CURMOV NOP JMP BKPUNY / FIX CURSOR AT STX, AND RETURN ADVUNT, JMS LODCHR / ADVANCE UNIT JMP EIBAD JMS GETUNT / CHECK FOR END OF UNIT ADVUNW, .-. SZA CLA JMP I ADVUNW JMP EINEXT SAVLMD, XX / SAVE LINE MODIFIED TAD LINMOD SNA JMP I SAVLMD / JUST RETURN IF NO FLAG NEEDED JMS INSERT / ELSE INSERT FLAG DCA LINMOD / CLEAR LINE MODIFIED FLAG DCA RLRMOD / CLEAR RULER MODIFIED FLAG DCA REJFLG / CLEAR REJUSTIFIED FLAG JMP I SAVLMD / RETURN SETLMD, XX / SET "LINE MODIFIED" FLAG CLA TAD RLRMOD SNA TAD (ECMDFL) / GET "LINE_MODIFIED_FLAG" DCA LINMOD AC7777 DCA REJFLG / SET REJUSTIFY FLAG JMS SCRNMD / SET SCREEN MODIFIED FLAG JMP I SETLMD SCRNMD, XX / SET SCREEN MODIFIED FLAG TAD SCRLCT CIA TAD SCRLIN SNA JMP SETLME SPA CLA JMP I SCRNMD TAD SCRLCT DCA SCRLIN JMP SETLMF SETLME, TAD SCRLCU SNA JMP SETLMF TAD CURSOR SMA CLA JMP I SCRNMD SETLMF, TAD CURSOR CMA DCA SCRLCU JMP I SCRNMD SCRADJ, XX DCA SCRLFL / SET SCROLL FLAG CDFMYF CIFSYS JSWAP / DON'T HOG CPU TAD SCRNFL SZA CLA JMP I SCRADJ / JUST RETURN IF SCREEN FLAG SET TAD SCRLFL TAD SCRLCT DCA SCRLCT / ELSE ADJUST SCROLL COUNT AC2000 TAD SCRLCT SPA CLA AC2000 DCA SCRNFL / SET SCREEN FLAG - IF TOO BIG JMP I SCRADJ / AND RETURN SCRNSZ, XX / RETURN SCREEN SIZE TAD SPLTFL / PICK UP THE SPLIT-FLAG SNA CLA / ARE WE IN WIDE SCREEN MODE (132 COL) TAD SCRNLN / NO, USE VALUE OF FULL SCROLL REGION SNA / SKIP IF WE JUST GOT A VALUE TAD WIDSIZ / YES, USE VALUE OF SMALLER AREA JMP I SCRNSZ / RETURN TO CALLER WIDSIZ, 10 / M219 Default 132 col size is 8 lines. SPLTFL, 0 / 0 = 24 LINES OF SCREEN; -1 = 8 LINES. /A226 SCECHO, XX ISZ CURSOR ADVSPC NOP CLA JMP I SCECHO CHKREJ, XX / CALL REJUST IF IT'S TIME TO DO SO JMS SCECHO / BUMP PTR AND CURSOR ISZ REJCNT JMP I CHKREJ JMS REJUST JMP I CHKREJ REMCUR, 7777 / "REMEMBERED" CURSOR POSITION FOR UP / AND DOWN ARROW EIGCUT, OVLJMP;OVGCUT / CUT OVERLAY EIPSTE, OVLJMP;OVPSTE X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------- PAGE DSKBLK=.%400+DLOEDT / DISK BLOCK WHERE PAGE IS LOADED REJUST, XX / REJUSTIFY IF NECESSARY ISZ REJFLG JMP REJUSZ TAD (ECCMRK) JMS INSERT / MARK CURRENT POSITION JMS JCLEAN / CLEAR OLD JUSTIFY CODES REJUSX, TAD LINE23 DCA CURPTR / GET TO BEGINNING OF LINE DCA CURSOR DCA REJCP1 / CLEAR POSITION FLAG JMS JCLEAN / CLEAR OLD JUSTIF CODES JMS CHKLMR / ADJUST LEFT MARGIN AC7777 DCA REJCP3 / CLEAR TAB FLAG JMS LODCHR JMP REJUSK / CHECK NEXT CHAR REJUSY, TAD (-ECCMRK) SNA CLA JMP REJUSA / FOR MARKER TAD I CURPTR AND P177 ZZCASE / COMPARE AGAINST RULER PAGE NWLN TAB CTB005-1 / TABLE ADDRESS FOR CASE / ECSTRL; REJUSC / START OF RULER / ECNWPG; REJUSC / PAGE / ECNWLN; REJUSD / NEW LINE / ECTAB; REJS99 / TAB / 0 / INDICATE END OF TABLE JMP REJUSQ REJS99, DCA REJCP3 / SET TAB FLAG JMS TBJUST / JUSTIFY IT REJUSQ, TAD CURSOR / CIA TAD RGTMAR SMA CLA JMP REJUSF / JUMP IF OK TAD REJCP1 / GOT BACK TO MARKED POSITION YET? SZA CLA JMP REJUSK / JUMP IF SO REJUSF, JMS CHKMAR JMP REJUSX / CHECK MARGIN, JUMP IF WRAPPED ISZ CURSOR / NORMAL CHAR, BUMP PTRS REJUSJ, ADVSPC JMP REJUSK JMP REJUSY / AND LOOP FOR MORE CHECKING REJUSA, TAD CURPTR DCA REJCP1 / SAVE MARKER POSITION TAD CURSOR DCA REJCP2 JMP REJUSJ REJUSB, TAD REJCP1 / END OF LINE, SNA CLA JMP REJUSL / SCROLL, OR REJUSK, TAD REJCP1 DCA CURPTR / QUIT TAD REJCP2 DCA CURSOR CDFBUF REJUSM, DCA I CURPTR / ERASE MARKER ADVCHR CLA / GET OFF NULL WE JUST CREATED /D206 REJUSZ, JMS REJUX2 / RESET FLAGS REJUSZ, DCA REJFLG / CLEAR REJUST FLAG TAD RGTMAR CIA TAD CURSOR / RESET LIMIT COUNT TAD (12) SMA CLA TAD (-12) / (MIN OF 10.) DCA REJCNT JMP I REJUST / AND RETURN REJUSC, TAD CURSOR SNA CLA JMP REJUSE / JUST SCROLL UP IF AT LEFT EDGE OF SCREEN TAD (ECWWLN) JMS INSERT / ELSE INSERT WRAPPER REJUSE, TAD REJCP1 / PAGE OR RULER SZA CLA JMP REJUSK / QUIT IF GOT TO MARKER ALREADY REJUSL, JMS SCRLUP / START NEW LINE JMP REJUSX REJUSD, TAD I CURPTR / NWLN, CHECK FOR CENTER TAD (-ECENLN) SNA CLA / JUMP IF NOT. ISZ REJCP3 JMP REJUSB / JUMP IF WE'VE HAD TABS JMS CENTER / ELSE CENTER THE LINE TAD LINE23 DCA CURPTR / THEN REFIND MARKER (IF PRESENT) DCA CURSOR SLNMOD / SET LINE (SCREEN) MODIFIED FLAG. JMS LODCHR NOP REJUSN, TAD (-ECCMRK) SNA JMP REJUSM / JUMP IF MARKER TAD (ECCMRK-ECENLN) SNA CLA JMP REJUSL / JUMP IF END OF LINE ISZ CURSOR ADVSPC NOP JMP REJUSN / LOOP TIL WE FIND ONE OF THEM REJCP1, .-. REJCP2, .-. REJCP3, .-. EISLCT, TSTSLT / SELECT JMP ESLCT1 / JUMP IF NOT SELECTED ALREADY UNSLCT, MODSET / UNSELECT EDTMOD / SET ADVANCE MODE JMP SLXMOD / THE FOLLOWING IS USED BY V2 GOTO PAGE OVERLAYS... CURPG2, 0 / EDIT BUFFER PAGE # (THOUSANDS - MAX. 9) EIFIND, OVLJMP;XXFIND EIRQSP, OVLJMP;OVRQSP / GO INSERT "REQUIRED SPACE" X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------- PAGE DSKBLK=.%400+DLOEDT / DISK BLOCK WHERE PAGE IS LOADED CTB005, ECSTRL; REJUSC / START OF RULER ECNWPG; REJUSC / PAGE ECNWLN; REJUSD / NEW LINE ECTAB; REJS99 / TAB 0 / INDICATE END OF TABLE ESMVCR, XX / MOVE CURSOR / ENTER WITH OFFSET IN AC SPA JMP ESMVCL / JUMP IF MOVE LEFT CMA DCA ESMVC1 / SAVE -COUNT-1 JMP ESMVCQ ESMVCC, JMS LODCHR JMP ESMVLZ AND P177 / STRIP MODE BITS ZZCASE / COMPARE AGAINST TABLE CTB008-1 / TABLE ADDRESS FOR CASE / ECNWPG; ESMVCD / NEW PAGE / ECNWLN; ESMVCB / NEW LINE / ECMDFL; ESMVCG / LINE MODIFIED / ECSTRL; ESMVCZ / START RULER / 0 / INDICATE END OF TABLE JMP ESMVCU / SKIP IF: SO ESMVCZ, TAD CURSOR SZA CLA JMP ESMVCE JMS ADVRUL JMP ESMVCA BKPPTR / CANCEL ADVPTR IN SCRLUP BELOW NOP SKP CLA / MERGE BELOW. ESMVCK, TAD CURSOR / Are we at the beginning of the line? SNA CLA / Skip if no. JMP ESMVCB / Yes! handle page character as line ender SLNMOD / Set line as modified (so REJUST runs) JMS REJUST / put soft return infront of page marker TAD RLRMOD / reset "line modified" flag for DCA LINMOD / justification of line following NEW PAGE. JMS SCRLUP / scroll line infrontof page marker up. ESMVCB, TAD RLRMOD DCA LINMOD / CLEAR MOD FLAG ESMVCT, JMS SCRLUP ESMVCQ, JMS REJUST ESMVCA, JMS LODCHR JMP ESMVX2 JMP ESMVX1 / MAY HAVE TO MODIFY TO HANDLE REDUNDANT BEGIN MATH AREA OR END MATH AREA ESMVCD, TAD I CURPTR / CHECK PRINT CONTROL JMS SCRLTM / TEST TO SEE IF CHAR IS SPECIAL CODE NOP / CHAR WAS NORMAL JMP ESMVCK / CHAR WAS SELECT MARKER / CHAR WAS START OR END PRINT CONTROL / +1 IF START, 0 IF END CIA / TAD PCTLFL / -1 IF START, 0 IF END SZA CLA JMP ESMVCK DCA I CURPTR / DELETE CONTROL IF REDUNDANT JMS SCRNMD / AND SET SCREEN MOD FLAG JMP ESMVCA ESMVCE, TAD (ECWWLN) JMS INSERT JMP ESMVCT ESMVCG, JMS CHKLMD NOP JMP ESMVCQ ESMVCU, JMS CHKMAR JMS REJUST / CHECK MARGIN ESMVCV, ISZ CURSOR ADVSPC JMP ESMVX2 ESMVX1, JMS CHKCHR JMP ESMVCC / DON'T LAND ON FUNNY CODE ESMVX2, ISZ ESMVC1 JMP ESMVCC ESMVLX, ISZ ESMVCR / BUMP FOR OK RETURN ESMVLZ, JMP I ESMVCR / AND RETURN ESMVC1, 0 CTB008, ECNWPG; ESMVCD / NEW PAGE ECNWLN; ESMVCB / NEW LINE ECMDFL; ESMVCG / LINE MODIFIED ECSTRL; ESMVCZ / START RULER 0 / INDICATE END OF TABLE CHKLMR, XX / CHECK FOR LEFT MARGIN JMS LODCHR JMP LMRCH1 TAD (-ECCMRK) / SKIP JUSTIF MARKER SNA CLA JMP LMRCH3 TAD I CURPTR LMRCH4, AND P177 TAD (-ECSTRL) SZA / IF NOT AT RULER TAD (ECSTRL-ECNWPG) / OR NEW PAGE SZA CLA JMP LMRCH1 / THEN CHECK INDENT TAD LINE23 DCA CURPTR / ELSE RESTORE CURPTR JMP I CHKLMR / AND RETURN LMRCH1, JMS LINDNT / DO PROPER INDENT LMRCH2, JMP I CHKLMR / RETURN LMRCH3, ADVPTR JMP LMRCH1 JMP LMRCH4 / GO BACK TO CHECK FOR PAGE/RULER EIUDLT, OVLJMP;OVUDLT / UNDELETE OVERLAY EIHYPL, OVLJMP;OVHYPL / HYPHEN PULL / TAKE 1ST RETURN IF SET, 2ND RETURN IF NOT SET USHLTS, XX CIFLP JMS I (XHLTST) / DO HALT TEST IN LP FIELD RPCUOF, 0 / Rapid Paging CUrrent descriptor OFfset X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------- PAGE DSKBLK=.%400+DLOEDT / DISK BLOCK WHERE PAGE IS LOADED / MOVE CURSOR ROUTINE JUMPS HERE IF MOVING LEFT ESMVCL, DCA ESMVC2 / ESMVC2 = -NUMBER OF LOCATIONS TO MOVE ESMVLA, / REPEAT BKPSPC JMP ESMVLZ / GET NEXT CHAR TO LEFT AND P177 / STRIP MODE BITS TAD (-ECNWPG) SZA / IF CHAR = NEW_PAGE TAD (ECNWPG-ECNWLN) SZA / OR NEW_LINE TAD (ECNWLN-ECNDRL) SNA / OR END_RULER JMP ESMVLR / THEN SCROLL SCREEN DOWN ESMVLB, AC7777 / ELSE TAD CURSOR / DCA CURSOR / CURSOR := CURSOR - 1 ESMVLC, TAD I CURPTR / GET CHAR AGAIN JMS CHKCHR JMP ESMVLA / IF NOT A SPECIAL CHARACTER ISZ ESMVC2 JMP ESMVLA / THEN INCREMENT ESMVC2 JMP ESMVLX / UNTIL ESMVC2=0 ESMVLR, JMS SCRLDN JMP ESMVLC ESMVC2, 0 / NUMBER OF CURSOR POSITIONS TO MOVE BACK / PSUEDO_CODE FOR SCRLUM / / CASE AC =: / START_PRINT_CONTROL: PCTLFL=-1 / END_PRINT_CONTROL: PCTLFL=0 / SELECT_POINT: SLCTDR=0 / AC=0 SCRLUM, XX / CHANGE MODES FOR SCROLL UP /*** SCRLUM IS USED AS A VARIABLE (PUTSC6) /*** BY PUTSCH BELOW TO SAVE A WORD JMS SCRLTM / TEST FOR MODE CHANGE JMP I SCRLUM / RETURN IF NONE JMP SCRLU1 / JUMP IF SELECT POINT DCA PCTLFL / HERE IF PRINT CONTROL JMP I SCRLUM / RETURN SCRLU1, DCA SLCTDR / HERE IF SELECT POINT JMS SVSLCR / SAVE CURSOR POSITION /A209 JMP I SCRLUM / RETURN / PSUEDO_CODE FOR SCRLTM / / CASE AC =: / SELECT POINT: AC=0 INCREMENT RETURN ADDRESS BY 1 / START_PRINT_CONTROL: AC=-1 INCREMENT RETURN ADDRESS BY 2 / END_PRINT_CONTROL: AC=0 INCREMENT RETURN ADDRESS BY 2 / OTHERS: AC=0 / SCRLTM, XX / TEST FOR MODE CHANGE CHARACTER ZZCASE / COMPARE AGAINST SELECT AND CONTROL CTB009-1 / TABLE ADDRESS FOR CASE / ECSLPT; SCRTM1 / SELECT POINT / ECPCT2; SCRTM2 / END CONTROL / ECPCT1; SCRTM4 / START CONTROL / 0 / INDICATE END OF TABLE JMP SCRTM3 / TAKE NORMAL RTN IF NONE OF ABOVE SCRTM4, AC7777 / TAKE 2ND SKIP RTN IF STRT PRINT CONTROL SCRTM2, ISZ SCRLTM SCRTM1, ISZ SCRLTM SCRTM3, JMP I SCRLTM CLMPLL, ZBLOCK 1 / COLUMN MANIPULATION LOWER LIMIT /A209 CLMPUL, ZBLOCK 1 / " " UPPER " /A209 PSBFOF, ZBLOCK 1 / COLUMN MANIP. PASTE BUF. OVFLOW FLAG /A209 CLCTSW, ZBLOCK 1 / " " CUT/GOLD CUT SWITCH /A209 / / THE FOLLOWING IS USED BY V2 GOTO PAGE OVERLAYS ... / /D223 RPBKID, 0 / RAPID PAGINATION BLOCK ID # / / / SUBR PUTSCH -- PUT CHARACTER TO SCREEN / / CHARACTER PASSED TO PUTSCH IN AC / / PSUEDO-CODE FOR PUTSCH: / / SAVE CHAR. IN TEMP. LOCATION; / GET CHAR. BACK; / / ( CHECK SCREEN LIMITS ) / IF WIDE SCREEN MODE THEN / IF CURPOS < LEFT MARGIN OR CURPOS > RIGHT MARGIN THEN / EXIT; ( DON'T DISPLAY "CLIPPED" CHAR ) / / ( CHECK FOR OVERSTRIKE SEQUENCE ) / IF CHAR = "START OVERSTRIKE SEQUENCE" THEN / ( CHECK FOR "REQUIRED SPACE" ) / GET NEXT CHAR; / BACKUP CURPTR TO "START OVERSTRIKE SEQ" SO CURMOV WILL / SKIP REST OF SEQUENCE; / IF NEXT CHAR = SPACE THEN / ( "OVERSTRIKE SEQUENCE" IS REALLY A "REQUIRED SPACE" ) / DISPLAY A SPACE WITH PROPER ATTRIBUTES; / ELSE / ( THIS IS A REAL "OVERSTRIKE SEQUENCE", NOT A "REQ. SPACE" ) / DISPLAY A GRAPHICS BLOTCH TO STAND FOR THE OVERSTRIKE SEQ.; / ELSE ( NOT OVERSTRIKE ) / RESTORE CHAR.; / PUTOUT TO DISPLAY; / / EXIT. ( RETURN TO CALLER HAVING DISPLAYED CHAR ) / / PUTSCH, XX / OUTPUT CHAR DCA PUTSC6 / SAVE CHARACTER TO RESTORE LATER /D226 TAD SPLTFL / SPLIT (WIDE) SCREEN MODE? /D226 SNA CLA /D226 JMP PUTPA1 / NO, JUST DO IT NORMAL TAD CURPOS / GET CURRENT CURSOR POSITION TAD LOWLIM / COMBINE WITH LOW LIMIT OF SCREEN DISPLAY SMA / ARE WE BEFORE CURRENT LOW LIMIT /C237 JMP PUTPA1 / NO, GO CHECK IF WE ARE ABOVE IT /C237 CLA CLL / YES, CLEAR TRASH FROM THE ACCUMULATOR /A237 TAD PUTSC6 / GET CURRENT CHARACTER /A237 AND (1600) / MASK OFF THE ATTRIBUTE BITS /A237 JMP PUTSC4 / GO OUTPUT THE CHARACTER ATTRIBUTES /A237 PUTPA1, CDFMYF / RESET BACK TO THIS FIELD /C237 TAD SCNSZ / COMBINE RESULT WITH SCREEN SIZE /M223 /D237 CDFBUF /A223 SMA CLA / ARE WE PAST LAST COLUMN ? JMP PUTPA2 / YES, IGNORE THE CHARACTER TAD PUTSC6 / GET CHAR BACK /C237 /D237 SNA / SKIP IF CHAR. /D237 JMP PUTSC0 / IGNORE NULLS. AND P177 / MASK OFF ATTRIBUTES TAD (-ECSTOV) / SPECIAL PROCESSING FOR OVERSTRIKE IFDEF FORIN < SNA CLA JMP DEAD / FOUND FOREIGN OVERSTRIKE > / END IFDEF FORIN IFNDEF FORIN < SZA CLA / AT OVERSTRIKE SEQUENCE? (DEAD KEY) JMP PUTSC8 / NO: GO OUTPUT CHARACTER (PUTSC6) CDIMNU / YES: CHANGE TO MENU FIELD /A211 JMS I (TCCHK) / GO CHECK FOR DEAD KEY TYPE /A211 JMP PUTSC2 / NORMAL DEAD KEY /A211 JMP PUTSC8 / REQUIRED SPACE /A211 JMP PUTPA2 / TECHNICAL CHARACTER /A211 /D211 ADVPTR / YES: CHECK FOR "REQUIRED SPACE" /D211 NOP / BAD EDIT BUFFER CONTENTS /D211 DCA PUTSC6 / SAVE POSSIBLE ECSPC WITH ATTRIBUTES /D211 BKPPTR / RESTORE CURPTR TO ECSTOV /D211 NOP / BUG-SHOULD NEVER HAPPEN /D211 CLA /D211 TAD PUTSC6 / GET 2ND CHAR IN OVERSTRIKE SEQUENCE /D211 AND P177 / (IGNORE ATTRIBUTES) /D211 TAD (-ECSPC) / IS IT A SPACE? /D211 SZA CLA /D211 JMP PUTSC2 / NO-NOT A "REQUIRED SPACE": OUTPUT BLOB > / END IFNDEF FORIN PUTSC8, TAD PUTSC6 / RESTORE CHAR PUTSC4, PUTOUT / DISPLAY CHAR ON SCREEN JMP PUTPA2 / CONTINUE BELOW /A211 PUTSC2, JMS PUTSPC EXGOVS / SPECIAL CODE FOR OVERSTRIKE /D211 JMP I PUTSCH PUTPA2, CLL CLA PUTSC0, CDFMYF ISZ CURPOS JMP I PUTSCH PUTSC6= SCRLUM / TEMP. CHAR STORAGE FOR PUTSCH / ALSO USED BY OVVWB1 (GOLD:VIEW) X=.&7600 / X=FIRST LOC OF CURRENT PAGE PUTAER, IFNZRO SCRLUM&7600-X < ? > / ERROR: PUTSC6 NOT ON CURRENT PAGE SCRFSH, XX / REFRESH NON-SCROLLED LINES TAD SCRLCU / DOES SCREEN NEED MODIFICATION? SNA CLA / SKIP IF: SO JMP I SCRFSH / RETURN SCRFS1, TAD SCRLIN / GET EARLIEST LINE NEEDING MODIFICATION SMA SZA CLA JMP I SCRFSH TAD SCRLCU / Get posn in last line to get refreshed. SZA CMA / If 0 the start-of-line. If < 0 then DCA CURSOR / posn is CMA of SCRLCU. refresh from there JMS SCRNSZ / GET SCREEN SIZE TAD SCRLIN / ADD EARLIEST LINE NEEDING MODIFICATION SPA SNA CLA JMP SCRFS2 TAD SCRLIN / GET EARLIEST LINE NEEDING MODIFICATION DCA CURLIN / SET CURRENT LINE JMS SETCUR / posn cursor baised by LOWLIM. TAD SCRLCT / GET SCREEN LAG SPA CLA / If reverse scroll, then bais to bottom / of screen. CIA / NEGATE IT TAD SCRLIN / ADD EARLIEST LINE NEEDING MODIFICATION JMS SCRLTX SCRFS2, ISZ SCRLIN NOP DCA SCRLCU / Reset posn within next line to start at. DCA CURSOR / (incase SCRLIN now = 1). JMP SCRFS1 EIDEAD, OVLJMP;OVDEAD / GOLD DEAD EIGBKP, OVLJMP;OVGBKP / GOLD BACKUP EITC, OVLJMP ;OVTCHR / TECHNICAL CHARACTER /M234 X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------- PAGE DSKBLK=.%400+DLOEDT / DISK BLOCK WHERE PAGE IS LOADED SCRLDN, XX / SCROLL DOWN CDFMYF / RESET DATA FIELD TO THIS FIELD CIFMNU / SET INSTRUCTION FIELD TO MENU FIELD JMS CALLN3 / HANDLE SCROLL DOWN FOR STATUS LINE AC7777 JMS SCRAD0 / ADJUST SCROLL TAD FORMNO / IF NOT IN LIST PROCESSING SZA CLA / JMP SCRLD1 / CDILP / THEN GO FIDDLE WITH THE MATH FLAGS JMS SCRMTH / SCRLD1, TAD LINE23 DCA CURPTR JMS SAVLMD CDFMYF JMS SCRNSZ / GET SCREEN SIZE (IN LINES) CIA DCA X0 / STORE AS COUNT TO DO TAD X0 TAD (PTRBLK-1+NPTRS) DCA T1 / STORE FIRST PTR-1 AC0002 / SET UP FOR AN INCREMENT OF TWO TAD T1 / COMBINE WITH VALUE OF PTR-1 DCA SCRLDF / SAVE PTR TO OLD TOP PTR MQL / FOR MOVING PTRS SCRLDA, ISZ T1 TAD I T1 / SWAP A PAIR SWP DCA I T1 ISZ X0 JMP SCRLDA / AND LOOP TIL ALL DONE TAD I T1 DCA LINE23 TAD I SCRLDF / GET OLD TOP PTR SZA / SKIP W/O A POINTER JMP .+3 / JUMP WITH A POINTER ISZ SCRLDF / ADVANCE TO NEXT ENTRY JMP .-4 / REPEAT UNTIL POINTER DCA CURPTR / ELSE START BACK SEARCH FROM THERE BKPSPC JMP SCRLDG / JUMP IF NO MORE AND P177 TAD (-ECNWPG) SNA CLA JMP SCRLDE SCRLDB, BKPSPC JMP SCRLDE / JUMP IF STX AND P177 ZZCASE / COMPARE AGAINST TABLE CTB010-1 / TABLE ADDRESS FOR CASE / ECNWLN; SCRLDC / NEW LINE / ECNWPG; SCRLDC / NEW PAGE / ECSTRL; SCRLDE / START RULER / ECNDRL; SCRLDC / END RULER / 0 / INDICATE END OF TABLE JMP SCRLDB / LOOP IF NOT SCRLDC, ADVPTR JMP EIBAD CLA SCRLDE, CDFMYF AC7777 TAD SCRLDF DCA SCRLDF / SET TOP PTR PTR TAD CURPTR DCA I SCRLDF / SET NEW TOP SCRLDG, TAD LINE23 DCA CURPTR DCA CURSOR CDFBUF TAD I CURPTR / GET_CHAR SCRLDD, AND P177 / LOOP, STRIP MODE BITS ZZCASE / COMPARE AGAINST TABLE CTB011-1 / TABLE ADDRESS FOR CASE / ECNWLN; SCRLDL / NEW LINE / ECNWPG; SCRLDL / NEW PAGE / ECSTRL; SCRLDS / START RULER / 0 / INDICATE END OF TABLE ISZ CURSOR / THEN INCREMENT CURSOR ADVSPC JMP EIBAD / ADVANCE TO NEXT CHARACTER JMP SCRLDD / END_LOOP / CASE CURRENT_CHARACTER =: / SELECT_POINT: SLCTDR=1 / START_PRINT_CONTROL: PCTLFL=0 / END_PRINT_CONTROL: PCTLFL=-1 SCRLDL, TAD I CURPTR / GET CURRENT CHARACTER JMS SCRLTM / CHECK AC FOR SPECTIAL CHARACTER JMP SCRLDX / NO SPECIAL CHARACTER JMP SCRLDP / AC WAS A SELECT POINT CMA / AC WAS START_CONTROL OR END_CONTROL / -1 = END_CONTROL: 0 = START_CONTROL DCA PCTLFL / 0 = END_CONTROL: -1 = START_CONTROL JMP SCRLDX SCRLDS, TAD CURSOR SZA CLA JMP SCRLDX / IF THIS IS RULER LINE, JMS SETRUL ESADRL / RESET TO OLD RULER JMS COPRUL CDFBUF TAD LINE23 DCA CURPTR / RESET CURPTR JMP SCRLDX SCRLDP, AC0001 / CURRENT CHAR WAS SELECT POINT SO SET FLAG DCA SLCTDR / INDICATING SELECT POINT IS BELOW US SCRLDX, JMP I SCRLDN / RETURN TO CALLER SCRLDF, .-. CTB010, ECNWLN; SCRLDC / NEW LINE ECNWPG; SCRLDC / NEW PAGE ECSTRL; SCRLDE / START RULER ECNDRL; SCRLDC / END RULER 0 / INDICATE END OF TABLE CTB011, ECNWLN; SCRLDL / NEW LINE ECNWPG; SCRLDL / NEW PAGE ECSTRL; SCRLDS / START RULER 0 / INDICATE END OF TABLE SETSPT, XX / SET SCREEN-NEEDS-TO-BE-SPLIT FLAG /D226 TAD SPLTFL /D226 SNA AC7777 DCA SPLTFL JMP I SETSPT EISCUT, OVLJMP;OVSCUT / ENTRY POINT FOR STRAIGHT CUT RPMTBK, 0 / Rapid Paging MaTh BlocK begin offset /M226 X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------- PAGE DSKBLK=.%400+DLOEDT / DISK BLOCK WHERE PAGE IS LOADED FXSCRL, XX / UNDO SCREEN LAG CDFMYF TAD CURSOR / SAVE CURSOR POSN 'TILL LATER. DCA FXSCT1 / ... DCA CURSOR / REINIT TO START OF LINE. TAD WIDEFL / TEST NEED TO GO WIDE FLAG /M226 SMA CLA JMP FXSCRF / JUMP IF NOT SET DCA WIDEFL / RESET IT TO NOT NEEDED /M226 JMS SET132 / MAKE SCREEN WIDER TAD FORMNO SNA CLA / CAN'T DO WHOLE SCREEN IF MERGING!! JMP FXSCRE / AND REFRESH WHOLE SCREEN FXSCRF, TAD SCRNFL SZA CLA JMP FXSCRE / JUMP IF WHOLE SCREEN NEEDED TAD SCRLCT / TEST LAG SNA JMP FXSCRK / JUST SET CURSOR IF NO LAG SPA JMP FXSCRD / JUMP IF SCROLL DOWN NEEDED CIA JMS FXSCRA / TEST FOR TOO MUCH JMS SCRFSH FXSCRI, JMS NWLN FXSCRJ, AC0001 TAD FXSCT2 JMS SCRLTX / DO ONE LINE ISZ FXSCT2 JMP FXSCRB / LOOP FOR ALL FXSCRC, DCA CURLIN TAD FXSCT1 / Restore cursor posn. DCA CURSOR / ... TAD SCRLCT / forward scroll? SPA CLA / skip if yes. JMP FXSCX1 / If no then do DCA to current posn. TAD CURPOS / Get current cursor posn on the screen. CIA / Compare to TAD CURSOR / where we want to be. SNA CLA / Skip if not there. JMP FXSCX2 / Already there so ignore. TAD CURSOR / Are we aiming for col 1? SZA CLA / skip if yes. JMP FXSCX1 / JMP if no to do DCA to correct posn. TAD (CR) / to to get to col 1 of this line. PUTOUT / ... DCA CURPOS / reset cursor posn. JMP FXSCX2 / merge below to clean up & exit. FXSCX1, JMS SETCUR / posn cursor to desired colm. FXSCX2, DCA SCRLCT / RESET LAG DCA SCRNFL / AND SCREEN FLAG DCA SCRLCU / AND REFRESH FLAGS DCA SCRLIN JMP I FXSCRL / AND THEN RETURN FXSCRD, JMS FXSCRA / CHECK FOR TOO MUCH JMS SCRNSZ / SET TO TOP CIA IAC DCA CURLIN FXSCRH, PUTESC "[&177+4000 "H&177 / Cursor home. PUTESC "M&177 / SCROLL DOWN TAD SPLTFL / wide screen mode? SZA CLA / Skip if no. we's already at line. JMS PCUR / Reposn to start of current line. TAD FXSCT2 CMA TAD CURLIN JMS SCRLTX / DO ONE LINE ISZ FXSCT2 JMP FXSCRH / LOOP FOR ALL TAD SCRLCT / FIX REFRESH FLAG CIA TAD SCRLIN DCA SCRLIN FXSCRK, JMS SCRFSH / FIX UP LINES NOT SCROLLED JMP FXSCRC / AND FIX CURSOR AND RETURN FXSCRA, XX DCA FXSCT2 / SAVE COUNT JMS SCRNSZ / GET SCREEN SIZE TAD FXSCT2 / -COUNT SPA CLA JMP FXSCRE / JUMP IF TOO MUCH TAD SCRLCU SNA CLA JMP I FXSCRA JMS SCRNSZ TAD SCRLIN SMA CLA JMP I FXSCRA / RETURN IF OK FXSCRE, JMS CLSCRN / FOR WHOLE SCREEN, CLEAR IT JMS SCRNSZ / SET FULL COUNT CIA DCA FXSCT2 DCA SCRLCT / USE REAL SCREEN POSITION FXSCRB, TAD SCRLCT SZA CLA JMP FXSCRI / IF REALLY SCROLLING, USE BOTTOM LINE AC0001 TAD FXSCT2 / ELSE USE REAL LINE DCA CURLIN / Set line # to refresh. JMS PCUR / Posn to physical start of line. JMP FXSCRJ FXSCT1, 0 FXSCT2, 0 CHKALP, XX / SET MQ AND CHECK FOR OVER 40 MQL MQA AND P177 TAD (-40) SMA SZA ISZ CHKALP / SKIP RETURN IF OK CLA MQA / RESTORE CODE JMP I CHKALP / AND RETURN TO CALLER WIDEFL, 0 / FLAG TO KNOW WHEN TO GO TO WIDE SCREEN MODE / -1=NEED TO GO 132 COL., 0=NOT NEEDED /A226 X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------- PAGE DSKBLK=.%400+DLOEDT / DISK BLOCK WHERE PAGE IS LOADED SCRLUP, XX / SCROLL UP CDILP / CHANGE CONTROL TO LP FIELD TO CHK ON MATH JMS CKCTRL / GO PROCESS LATEST LINE SCROLLED UP TAD SCRLCT SMA CLA / IF SCROLLING UP (NOT DOWN) TAD ECHFLG / THEN SZA CLA / IF ECHOING JMS FXSCRL / THEN UPDATE SCREEN SCRLP1, AC0001 JMS SCRAD0 / INCREMENT SCROLL COUNT ADVPTR / ADVANCE NOP / RETURNS HERE IF END OF TEXT FOUND CLA / NORMALLY RETURNS HERE WITH CHAR IN AC CDFMYF / CHANGE DATA FIELD BACK TO THIS FIELD JMS SCRLPX / GO SET UP AUTO-INDEX REGISTERS TAD I X0 DCA I X1 ISZ X2 JMP .-3 TAD CURPTR DCA LINE23 TAD LINE23 DCA I X1 BKPPTR JMP SCRLUB / BACK UP OVER NEWLINE JMS SCRLUM / DO MODE CHANGE, IF NEC. SCRLUB, TAD LINE23 DCA CURPTR / RESTORE CURPTR /D203; TAD CURSOR / SAVE THE CURSOR POS FOR LATER /D203; DCA CURTMP / SELECT MIGHT WANT IT! DCA CURSOR TAD LINMOD SZA CLA SLNMOD / RESET MOD FLAG, IF NECESSARY CDFMYF / RESET DATA FIELD TO THIS FIELD CIFMNU / SET INSTRUCTION FIELD TO MENU FIELD JMS CALLN4 / HANDLE SCROLL UP FOR STATUS LINE CDFBUF / RESET TO BUFFER FIELD JMP I SCRLUP / AND THEN RETURN TO CALLER / THIS ROUTINE GETS RID OF ALL JUSTIFYING CHARACTERS (JUSTIFIED SPACES WORD / WRAPS ETC.) UP TO THE RIGHT MARGIN OR THE FIRST LINE_ENDING CHARACTER, / WHICHEVER COMES FIRST (I THINK THATS WHAT IT DOES ANYWAY) JCLEAN, XX TAD CURPTR DCA JCLEAY / SAVE CURPTR TAD RGTMAR / GET THE COLUMN # OF THE RIGHT MARGIN TAD (-COLM80) / M219 SMA CLA / IF RIGHT_MARGIN GREATER THAN 79 TAD (-COLLIM+COLM81) / THEN JCLEAX= -238 /M219 TAD (-COLM81) / ELSE JCLEAX= -80 /M219 DCA JCLEAX / (* STORE TO USE AS LOOP COUNTER *) JCLEA6, JMS LODCHR / GET CHARACTER JMP JCLEA2 / RETURNS HERE IF END_OF_TEXT (ETX) FOUND JMP .+3 JCLEA1, ADVSPC JMP JCLEA2 / RETURNS HERE IN END_OF_TEXT AND P177 / ELIMINATE IMPOSSIBLES, FOR SPEED TAD (-40) SMA SZA CLA / IF CHARACTER IS PRINTABLE JMP JCLEA4 / THEN GO INCREMENT LOOP COUNTER TAD I CURPTR JMS ESJTST SZA TAD JCLGCT / CHECK FOR PAGE MARKER IF NOT / GOLD CUTTING SNA CLA JMP JCLEA3 / JUMP IF GOT A JUSTIFYING CODE TAD I CURPTR / ELSE CHECK FOR LINE ENDING CHARACTER AND P177 TAD (-ECNWLN) SZA TAD (ECNWLN-ECNWPG) SZA TAD (ECNWPG-ECSTRL) SNA JMP JCLEA2 / JUMP IF A LINE ENDING CHARACTERONE SPA CLA JMS CHKLMD /HECK FOR RULER OR LINE MODIFIED CHAR SKP / RETURNS HERE IF NONE FOUND JMP JCLEA6 / RETURNS HERE OF ONE FOUND JCLEA4, ISZ JCLEAX / INCREMENT LOOP COUNTER JMP JCLEA1 / LOOP BACK IF NOT AT RIGHT END OF RULER / HERE IF CHAR IS: / ECNWLN 0012 NEW LINE / OR ECPGRF 1012 END PARAGRAPH / OR ECENLN 1412 CENTERED LINE / OR ECSLPT 3412 SELECT POINT / OR ECPCT1 1014 START CONTROL / OR ECPCT2 1414 END CONTROL / OR ECLTRL 0016 RULER START / OR IF AT END_OF_TEXT / OR IF AT RIGHTMOST MARGIN (EITHER 80 OR 160) JCLEA2, TAD JCLEAY DCA CURPTR JMP I JCLEAN / RETURN / HERE IF CHAR IS: / ECJSPC 2040 JUSTIFIED SPACE / OR ECWWLN 2012 WRAPPED LINE / OR ECHYLN 2412 WRAPPED LINE WITH HYPHEN / OR ECPMRK 2014 PAGE MARKER JCLEA3, DCA I CURPTR / DELETE JUSTIF CODE JMP JCLEA6 / AND LOOP FOR MORE JCLEAX, 0 / LOOP COUNTER INITIALIZED TO -160 FOR / WIDE RULERS OR -80 FOR REGULAR RULERS JCLEAY, 0 JCLGCT, JTSTOF-ECPMRK / OFFSET FOR DELETING PAGE MARKER / IF NOT IN GOLD CUT MODE DSKBLK=.%400+DLOEDT / DISK BLOCK WHERE PAGE IS LOADED / PSUEDO_CODE FOR ESLCTS / / IF ALREADY IN SELECT MODE / THEN / IF SELECT POINT IS ABOVE US / THEN / INSERT "ECSLPT" INTO TEXT / BACK UP TO SELECT MARK AND DELETE IT / SET LINE_MODIFIED FLAG / / INCREMENT RETURN ADDRESS / ESLCTS, XX / TEST SELECT MODE TAD ESLMOD+1 / ALREADY IN SELECT MODE? AND EDMODE SNA CLA / SKIP IF: SO JMP I ESLCTS / JUST RETURN IF NOT IN SELECT TAD SLCTDR / TEST DIRECTION SZA CLA / SKIP IF: FORWARD JMP ESLCT6 / JMP IF SELECTING BACKWARDS TAD (ECSLPT) JMS INSERT / ELSE INSERT OUR STOPPER JMS SVSLCR / SAVE CURSOR POSITION /A209 ESLCT4, AC7777 / LOOP CURMOV / BACKUP CURSOR JMP UNSLCT / EXIT IF START OF DOCUMENT FOUND TAD I CURPTR / GET NEXT CHAR JMS ESLCTD / IF CHAR NOT EQUAL SELECT POINT JMP ESLCT4 / THEN GOTO ESLCT4: / ELSE ESLCT6, ISZ ESLCTS / TAKE SKIP RETURN JMP I ESLCTS ESLMOD, 0 SLTMOD EINXSC, OVLJMP;OVNXSC / NEXT SCREEN / THE FOLLOWING IS USED BY V2 GOTO PAGE OVERLAYS... RPBOTF, 0 / V2 GOLD BOTTOM FLAG /M226 / - = V2 GOLD BOTTOM REQUEST / 0 = V2 GOTO PAGE REQUEST X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------- PAGE DSKBLK=.%400+DLOEDT / DISK BLOCK WHERE PAGE IS LOADED EIPCMD, TAD PCTLFL / START AND END CONTROL SNA CLA TAD (ECPCT1-ECPCT2) / INSERT NON-REDUNDANT CONTROL MARKER TAD (ECPCT2-ECNWPG) EINPAG, TAD (ECNWPG-ECPMRK) / NEW PAGE EIPMRK, TAD (ECPMRK) / PAGE MARKER MQL DCA CURSOR TAD LINE23 DCA CURPTR MQA JMP EIFXT1 / AND JUMP TO INSERT ESGETE, XX / GET FROM ETX JMS I ESGETX MGPTC1, XGETET / OR XRDFNC IF FORM JMP I ESGETE ESGETS, XX / GET FROM STX MGPTC2, JMS I ESGETX / OR SKP CLA IF FORM XGETST JMP I ESGETS ESPUTE, XX / PUT TO ETX MGPTC3, JMS I ESGETX / OR SKP CLA IF FORM XPUTET JMP I ESPUTE ESPUTS, XX / PUT TO STX MGPTC4, JMS I ESGETX / OR JMP I ESPUTX IF NO FILE XPUTST ESPUTY, JMP I ESPUTS ESGETX, DSKCAL ESPUTX, PUTST3 ESICHR, XX / INSERT CHAR AND ECHO JMS INSERT / INSERT INTO DOCUMENT AC0001 DCA ECHFLG / SET ECHO MODE SLNMOD / SET MODIFIED FLAG TAD I CURPTR / HANDLE NW PAGE AND NW LINE SPECIALLY DCA ESITMP / save character. TAD ESITMP / get back. AND P177 ZZCASE / COMPARE AGAINST TABLE CTB012-1 / TABLE ADDRESS FOR CASE / ECNWPG; ESINPG / NEW PAGE / ECNWLN; ESINP2 / NEW LINE / ECSTOV; ESINP1 / START DEAD KEY / ECNDOV; ESINP5 / END DEAD KEY / 0 / INDICATE END OF TABLE TAD ESINOV SNA CLA JMP ESINP7 BKPPTR NOP / CONTINUE OVERSTRIKE MODE TAD (-ECNDOV) / IF POSSIBLE SZA CLA JMP ESINP6 DCA I CURPTR ADVPTR NOP ESINP1, ADVPTR NOP CLA TAD (ECNDOV) JMS INSERT / START OVERSTRIKE MODE ADVPTR NOP AC0001 DCA ESINOV JMP I ESICHR ESINP2, JMS REJUST JMP ESINP4 ESINPG, TAD CURSOR / INSERT NEW LINE BEFORE NEW PAGE, IF NEC. SNA CLA JMP ESINP4 JMS REJUST TAD ESITMP / soft page marker? TAD (-ECPMRK) / ... SZA CLA / skip if yes. rejust deleted it. JMP ESNP3A / Hard PM so all is ok. /M220 TAD (ECPMRK) JMS INSERT / Insert soft page marker back!!! TAD (ECWWLN) JMS INSERT / INSERT SOFT RETURN JUST PRIOR TO NPM. JMP ESINP3 / MERGE BELOW TO PROPERLY SCROLL /A220 ESNP3A, TAD CURSOR / ARE WE AT START OF LINE NOW ? /A220 SZA CLA / SKIP IF YES. MUST HAVE BEEN LM NOT=0 /A220 ESINP3, JMS SCRLUP ESINP4, JMS SCRLUP JMP I ESICHR ESINP5, DCA I CURPTR / LEAVE OVERSTIKE MODE ISZ CURSOR DCA ESINOV JMP I ESICHR ESINP6, DCA ESINOV / CANCEL OVERSTIKE MODE ADVPTR NOP CLA ESINP7, JMS CHKREJ JMP I ESICHR / AND RETURN ESINOV, .-. ESITMP, 0 CTB012, ECNWPG; ESINPG / NEW PAGE ECNWLN; ESINP2 / NEW LINE ECSTOV; ESINP1 / START DEAD KEY ECNDOV; ESINP5 / END DEAD KEY 0 / INDICATE END OF TABLE / ESPTES IS REWRITTEN TO DEAL WITH THE NEW, LONGER ESCAPE SEQUENCES. / IF THERE ARE TWO CHARACTERS TO FOLLOW THE ESC, THE FIRST CHARACTER / HAS ITS 0 BIT SET. THIS VERSION TESTS FOR THAT AND FOLLOWS THROUGH. ESPTES,XX / PUT ESCAPE SEQUENCE TAD (ESC) AND P3777 / MASK OUT BIT 0. DOES NO HARM TO ESC. PUTOUT TAD I ESPTES / GET THE FIRST ARGUMENT. ISZ ESPTES / INCREMENT RETURN LOCATION. SPA / SKIP IF NOT ANOTHER ARGUMENT. JMP .-5 / RUN THROUGH THE CYCLE AGAIN IF THERE IS. PUTOUT JMP I ESPTES / RETURN X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------- PAGE DSKBLK=.%400+DLOEDT / DISK BLOCK WHERE PAGE IS LOADED /++ / FUNCTIONAL DESCRIPTION: CHKSPC / / CHECKS FOR SPACE LEFT ON A DISK AND INFORMS USER IF IT IS LESS / THAN THE MINIMUM CUTOFF VALUE (SPECIFIED IN SPCCHK) / / CHKSPC PSEUDO CODE: / / GET NUMBER OF FREE BLOCKS LEFT ON DISK / IF (BELOW MINIMUM CUTOFF VALUE) / EXIT - INFORM USER AND WAIT FOR KB INPUT / RETURN TO CALLER / / CALLING SEQUENCE: JMS CHKSPC / / INPUT PARAMETERS: NONE / / IMPLICIT INPUTS: ACSAVE, SCFSPC, SPCCHK / / OUTPUT PARAMETERS: NONE / / IMPLICIT OUTPUT: ACSAVE, SPCCHK / / COMPLETION CODE: NONE / / SIDE EFFECTS: THIS ROUTINE ONLY INFORMS YOU THAT YOU'RE / RUNNING OUT OF SPACE ON THE DISK. IT WILL NOT / PREVENT YOU FROM GOING BEYOND THE LIMIT AND / POSSIBLY WIPING OUT YOUR DISK. / /-- / CHKSPC, XX / CHECK DISKETTE ROOM DCA ACSAVE / SAVE AC IN TEMP LOCATION CDFFIO TAD I (SCFSPC) / GET NUMBER OF BLOCKS LEFT CDFMYF / COMPARE WITH CUTOFF POINT VALUE DCA T1 TAD T1 TAD SPCCHK SMA CLA / IS THERE ROOM ? JMP ACRSTR / YES / ???? DCA SPCCHK / CLEAR SPCCHK (ONE WARNING IS ENOUGH) TAD T1 / CHECK FOR HARD LIMIT TAD (-14) SMA SZA CLA JMP DOWTCH AC7777 DCA BLKALM JMP WARN DOWTCH, TAD BLWTCH / WATCH FOR NEXT USE OF A BLOCK SNA JMP NEWTCH CIA TAD T1 SMA CLA JMP ACRSTR NEWTCH, TAD T1 DCA BLWTCH WARN, OVLJMP;OVSPCE / PUT OUT MESSAGE AND RETURN TO EINEXT ACRSTR, TAD ACSAVE / RESTORE AC JMP I CHKSPC ACSAVE, 0 / TEMP SAVE LOCATION FOR AC SAVING BLWTCH, 0 / FOR KEEPING TRACK OF BLOCK USAGE BLKALM, 0 / ALARM FOR HARD LIMIT / LODCHR GET FIRST AVAILABLE CHARACTER / / THIS ROUTINE RETURNS THE FIRST AVAILABLE CHARACTER AT OR AFTER / THE POSITION POINTED TO BY CURPTR. / / CALL: / / JMS LODCHR / / / LODCHR, XX CLA CHKPTR SZA SMA JMP LODEXI ADVPTR JMP I LODCHR / TAKE 1ST RET IF ETX FOUND LODEXI, ISZ LODCHR JMP I LODCHR USCMPR, XX / COMPARE AC&177 WITH MQ, / USING MQ AS U/L MATCH / LEAVES AC 0, MQ UNCHANGED AND P177 / MASK CHAR CIA DCA USCMP1 / SAVE FOR COMPARE MQA TAD USCMP1 / COMPARE AS IS SNA CLA JMP USCMP2 / JUMP IF EQUAL MQA XLTUPR / MAKE MATCH CHAR UPPER CASE TAD USCMP1 / COMPARE AGAIN SNA CLA USCMP2, ISZ USCMPR / BUMP RETURN FOR MATCH JMP I USCMPR / NO BUMP FOR NO MATCH USCMP1= X0 / TEMP ESXLUP, XX / XLAT AC TO UPPER CASE TAD (-173) SMA JMP ESXLUA TAD (173-141) SMA TAD (-40) TAD (141-173) ESXLUA, TAD (173) JMP I ESXLUP / NOW THAT TABLE2 HAS BEEN MOVED TO THE PRINTER, WE HAVE ROOM TO PUT / ALL THE FORIN DEAD KEY CODE TOGETHER, RIGHT HERE. SOME MODIFICATIONS / WERE MADE TO ACCESS THE TABLES IN THE PRINTER FIELD. IFDEF FORIN < / HERE IF DEAD KEY SEQUENCE DEAD, TAD CURPTR / GET CURRENT POINTER DCA POINT2 / SAVE ADVPTR / ADVANCE CURSOR AND RETURN CHARACTER NOP / CAN'T RETURN HERE MQL / PUT CHAR IN MQ MQA / REPLACE INTO AC AND (7600) / GET MODE BITS DCA ESXLUP / TEMP STORAGE SWP / SWAP WITH MQ TO GET CHAR BACK AND P177 / MASK DCA CHAR1 / SAVE TAD (TABLE1-1) JMS SEARCH / SEARCH FOR CHARACTER IN TABLE1 JMP NOTACC / NOT FOUND, RESTORE CURSOR POINTER JMS GETENT / GET FLAG BITS DCA CHAR1 / SAVE ADVPTR / ADVANCE POINTER AND RETURN CHARACTER NOP / CAN'T RETURN HERE AND P177 / MASK TAD CHAR1 / COMBINE WITH FLAG BITS DCA CHAR1 / SAVE TAD (TABLE2-1) JMS SEARCH / LOOK FOR COMBINED CHAR. IN TABLE2 JMP NOTACC / NOT FOUND JMS GETENT SPA CLA / SPECIAL? JMP DEADSP / YES, HANDLE DIFFERENTLY TAD (16) / FOUND PUTOUT / OUTPUT SHIFT OUT JMS GETENT TAD ESXLUP / ADD MODE BITS PUTOUT / OUTPUT THE NEW CHARACTER DEAD1, TAD POINT2 DCA CURPTR / RESTORE CURSOR POINTER TAD (17) JMP PUTSC4 / OUTPUT SHIFT IN DEADSP, TAD POINT2 DCA CURPTR / RESET CURPTR JMS GETENT / GET CHARACTER JMP PUTSC4 / OUTPUT IT / HERE WHEN NO MATCH ON FL SPECIAL CHAR NOTACC, TAD POINT2 DCA CURPTR / RESTORE CURSOR POINTER JMP PUTSC2 / OUTPUT A BLOB > / END IFDEF FORIN RPBIN2, 0 / BINARY THOUSANDS CLSBEG, ZBLOCK 1 / COLUMN STRIP PARAMETERS CLSEND, ZBLOCK 1 EIREPL, OVLJMP;OVREPL / REPLACE EIUPAR, OVLJMP;OVUPAR / UP ARROW EIDNAR, OVLJMP;OVDNAR / DOWN ARROW ESATST, XX / TEST @CURPTR / RETURN 0 IF NULL, -1 IF ETX/STX, + OTHERWISE / ENTER WITH AC = OFFSET CDFBUF / GET TO CORRECT FIELD TAD CURPTR / ADD PTR TO OFFSET ESATS1, DCA CURPTR / UPDATE PTR TAD I CURPTR / GET CURRENT CHAR SMA JMP I ESATST / RETURN IF NOT SPECIAL IAC SNA JMP ESATS2 / JUMP IF BUFBEG IAC SNA JMP ESATS3 / JUMP IF BUFEND IAC CMA JMP I ESATST / RETURN -1 IF STX/ETX, + OTHERWISE ESATS2, AC7775 TAD BUFSIZ / GO TO BUFEND-2 ESATS3, IAC TAD BUFBEG / GO TO BUFBEG+1 JMP ESATS1 / UPDATE PTR AND TRY AGAIN /PGECHO is called with AC = page character, / 0014 = new page / 1014 = start print control / 1414 = end print control / 2014 = (soft) page marker PGECHO, XX / PRINT MESSAGE /D245 AND P7700 / ISOLATE HI BYTE /D245 BSW / MOVE TO LO BYTE /D245 CLL RTR / MAP TO 0,2,3,4 /D245 SNA /D245 IAC / MAP TO 1,2,3,4 /D245 TAD (PGMTBL-1) / INDEX INTO TABLE OF TEXT POINTERS /D245 DCA PGTEMP / SAVE PTR OF TEXT POINTERS /D245 CDFMYF / MAP OUR FIELD /D245 TAD I PGTEMP / GET TEXT POINTER JMS BHOOK / Call Blaster BPGECO / JMS PGMSG / PRINT MESSAGE JMP I PGECHO / RETURN /D245PGTEMP= T3 /D245PGMTBL, PGMSG1 / "new page" /D245 PGMSG3 / "START PRINT CONTROL /D245 PGMSG4 / "END PRINT CONTROL /D245 PGMSG2 / "PAGE MARKER" EIINOV, OVLJMP / Go into Overlay /A254 OVINOF / To switch Inset-Overstrike On-Off /A254 / / Check if we are in Overstrike mode , if not return to EINSRT /A254 / otherwise call the Overstrike Overlay /A254 / OVSCHK, DCA INCHTM / First save the char /A254 TAD INSOVF / Now check the flag /A254 SNA CLA / Are we in Overstrike /A254 JMP OVRSCH / No , restore char and insert it /A254 OVLJMP / Yes, /A254 OVINCH / So call the overlay /A254 OVRSCH, TAD INCHTM / Get char back /A254 JMP EINSRT / and insert it as normal /A254 INSOVF, 0 / Insert-Overstrike flag /A254 INCHTM, 0 / temp for char just entered /A254 X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------- PAGE DSKBLK=.%400+DLOEDT / DISK BLOCK WHERE PAGE IS LOADED ESACHR, XX / ADVANCE PTR TO NON-NULL ADVCL1, CHKPTR SZA JMP I ESACHR / JUST RETURN IF THERE ALREADY TAD CURPTR DCA T1 / ELSE SET OUR SCAN PTRS TAD T1 DCA T2 TAD (-50) DCA T3 / AND LIMIT COUNT DCA ADVCLT ADVCL8, ISZ ADVCLT ADVCL2, ISZ T1 / ADVANCE PEEK PTR TAD I T1 SNA JMP ADVCL8 / LOOP TIL NON-NULL SMA JMP ADVCL3 / JUMP IF NORMAL TEXT TAD (3) / ELSE CHECK FOR ETX SNA JMP ADVCL4 / JUMP IF ETX SPA CLA JMP ADVCL5 / JUMP IF NOT BUFEND TAD BUFBEG / ELSE RESET TO BUFBEG DCA T1 JMP ADVCL2 / AND CONTINUE LOOKING ADVCL5, TAD I T1 ADVCL3, DCA I T2 DCA I T1 AC7775 TAD ADVCLT SPA SNA CLA JMP ADVCL1 ADVCL7, ISZ T2 / BUMP COPY PTR TAD I T2 / CHECK FOR BUFEND SZA CLA JMP ADVCL6 / JUMP IF SO ISZ T3 JMP ADVCL2 / LOOP IF LIMIT NOT REACHED JMP ADVCL1 / ELSE RETURN ADVCL6, TAD BUFBEG / RESET TO BUFBEG DCA T2 JMP ADVCL7 / AND CONTINUE ADVCL4, AC7775 DCA I T2 / COPY ETX JMP ADVCL1 / AND RETURN ADVCLT, .-. RSTRLN, XX / RESTORE 23RD LINE TAD CURSOR DCA RSTRT2 DCA CURSOR JMS SCRNMD TAD RSTRT2 DCA CURSOR JMP I RSTRLN / THEN RETURN RSTRT2, 0 PROMPT, XX / CLEAR LINE AND PROMPT CLA JMS RSTRLN / SET MOD FLAG JMS PCUR / RESET TO BEGINNING OF LINE CDFMYF TAD I PROMPT DCA PROSTR / GET STRING PTR ISZ PROMPT TAD LOWLIM / RE-SET CURPOS TO START OF LINE!!! CIA / SO THAT PROMPT ISN'T TRUNCATED ON DCA CURPOS / RIGHT SIDE OF SCREEN. JMS PUTMSG / WRITE MESSAGE PROSTR, .-. JMP I PROMPT GETLIN, XX / GET USER INPUT (CR ENDS) DCA PRICNT / GET INITIAL FILL COUNT JMS CLREOL / Erase to end of line TAD I GETLIN DCA PRISTR / SET BUFFER PTR ISZ GETLIN / BUMP TO RETURN ADDR PROMP2, TAD PRICNT / LOAD FLAG WORD /D228 SNA CMA / INSURE IT'S NONZERO CIFMNU JMS I INACAL / READ A LINE PRISTR, EIGES3-1 / INTO BUFFER SKP TAD (EDNWLN) / SET TERMINATOR FOR NORMAL RTN DCA GETTRM SWP DCA PRICNT / SAVE FILL COUNT TAD GETTRM / TEST TERMINATOR FOR... ZZCASE / COMPARE AGAINST TABLE CTB013-1 / TABLE ADDRESS FOR CASE / EDRULR; RRGOTO / GOLD:RULER KEYS / EDPAGE; RPGOTO / PAGE KEY / EDNWLN; PRIST1 / RETURN KEY / EDADVN; PRIST1 / ADVANCE KEY / EDBKUP; PRIST1 / BACKUP KEY / EDSRCH; PRIST1 / SEARCH KEY / EDCONT; PRIST1 / CONTINUE SEARCH KEY / 0 / INDICATE END OF TABLE JMS BEEPER / ELSE ERROR JMP PROMP2 RRGOTO, OVLJMP / INITIATE GOTO-RULER (RAPID RULER) OVGSGR / ("GOLD:SEARCH GOLD:RULER" COMMAND) RPGOTO, OVLJMP;OVRPPG / INITIATE GOTO-PAGE (RAPID PAGING) PRIST1, JMP I GETLIN CTB013, EDRULR; RRGOTO / GOLD:RULER KEYS EDPAGE; RPGOTO / PAGE KEY EDNWLN; PRIST1 / RETURN KEY EDADVN; PRIST1 / ADVANCE KEY EDBKUP; PRIST1 / BACKUP KEY EDSRCH; PRIST1 / SEARCH KEY EDCONT; PRIST1 / CONTINUE SEARCH KEY 0 / INDICATE END OF TABLE PRICNT= GETLEN / Use the New Line escape sequence if in ANSI mode NWLN, XX PUTESC / Put out an escape sequence "E-200 / ESC E JMP I NWLN CLREOL, XX PUTESC / Put out an escape sequence "[+4000-200 / subtract 200 to convert to sixbit ascii / and add 4000 to signify continue "K-200 JMP I CLREOL X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------- PAGE DSKBLK=.%400+DLOEDT / DISK BLOCK WHERE PAGE IS LOADED PUTLNZ, 0 / THE COLUMN THAT THE CURSOR IS IN PUTLNX, 0 / TEMP POINTER TO CHARACTER IN DOCUMENT PUTLIN, XX / PUT LINE ON SCREEN TAD CURPTR DCA PUTLNX / SAVE CURPTR JMS LODCHR JMP PUTLNW / GET FIRST CHAR PUTLN2, AND P177 / STRIP MODE BITS ZZCASE / COMPARE AGAINST TABLE CTB014-1 / TABLE ADDRESS FOR CASE / ECSTRL; PUTLNR / START RULER / ECNWPG; PUTLNP / NEW PAGE / ECNWLN; PUTLNL / NEW LINE / ECTAB; PUTLNB / TAB / ECMDFL; PUTLN1 / LINE MODIFIED / 0 / INDICATE END OF TABLE JMP PUTLN4 PUTLN1, ADVSPC JMP PUTLNW JMP PUTLN2 PUTLNR, TAD CURPOS / Ignore unjustified ruler. SNA CLA / ... JMS DSPRLN / display ruler line. PUTLNU, PUTLNV, PUTLN3, CLA TAD PUTLNX DCA CURPTR / RESTORE CURPTR JMP I PUTLIN PUTLNP, TAD CURPOS SZA CLA JMP PUTLNU / Ignore unjustified page mrkr. TAD I CURPTR JMS PGECHO JMP PUTLN3 PUTLNL, TAD I CURPTR PUTLNW, JMS LNECHT / Print hyphen or select point if needed PUTESC "[&177+4000 "K&177 / do erase to End Of Line. JMP PUTLNV PUTLNB, TAD I CURPTR / RESTORE TAB CHAR AND (3600) / TO GET IT'S ATTRIBUTE MRGSPC, TAD (ECSPC) / AND MERGE WITH A SPACE JMP PUTLN6 PUTLN4, TAD I CURPTR TAD (-ECJSPC) / IF CHAR IS NOT A SOFT SPACE SZA CLA / THEN JMP PUT4 / RESTORE CHAR TO OUTPUT / ELSE TAD CHRATR / GET ATTRIBUTE OF TAB JMP MRGSPC / TO MERGE WITH A SPACE PUT4, TAD I CURPTR / RESTORE CHAR PUTLN6, MQL / save char temporarily. TAD CURPOS / Get current character posn in line. CIA / compare to 1st printable posn. TAD CURSOR / which is (CURSOR). SPA SNA CLA / skip if char to the left of "cursor". MQA / get printable character back. JMS PUTSCH TAD WIDNAR / wide screen? /M226 SNA CLA / skip if narrow. /M226 TAD (-WIDTH+COLM81) / M219 compute "-wide" width. TAD (-COLM81) / M219 compute "-narrow" width. TAD CURPOS / Get current cursor posn. TAD LOWLIM / Now see if within screen width. / AC is now >= 0 if outside screen width SPA CLA / skip if bbeyond threshold. JMP PUTLN1 / Loop to do more. JMP PUTLN3 / end of line encountered. / / +++ IN THIS CASE-TABLE THE ENTRY FOR 'START RULER' COULD /A216 / DYNAMICALLY BE CHANGED DURING EDITOR EXECUTION. THE REASON; /A216 / TURN RULER DISPLAY ON OR OFF DEPENDING ON EDITOR STATUS WORD /A216 / (MNSTAT): /A216 / /A216 / 0 OR 1 RULER DISPLAY ON GOTO @PUTLNR' /A216 / 2 OR 3 RULER DISPLAY OFF GOTO @PUTLN3' /A216 / /A216 / IN PLACE OF THE RULER, THE USER WILL SEE A BLANK LINE, WHICH THE/A216 / USER CANNOT PLACE THE CURSOR ON. /A216 / /A216 / THIS DYNAMIC CHANGE OCCURS ONLY WHEN THE EDITOR IS LOADED (FIRST/A216 / TIME) AND WHENEVER THE EDITOR-MENU IS CALLED. /A216 CTB014, ECSTRL /C216 RULOFF, PUTLNR / START RULER /C216 ECNWPG; PUTLNP / NEW PAGE ECNWLN; PUTLNL / NEW LINE ECTAB; PUTLNB / TAB ECMDFL; PUTLN1 / LINE MODIFIED 0 / INDICATE END OF TABLE PGMSG, XX / ENTER WITH AC = ADDRESS OF MESSAGE SNA / JMP PGMSGB DCA PGMSGX / SAVE MESSAGE ADDRESS FOR DISPLAY TAD WIDNAR / FORCED NARROW? /M223 SNA CLA / SKIP IF NARROW. /M223 TAD (-20) / XTRA SPACING FOR 132 COL MODE. JMS PTDASH -40 JMS PUTMSG PGMSGX, 0 / ADDRESS OF MESSAGE TO BE DISPLAYED CDFMYF /A223 TAD WIDNAR / FORCED NARROW? /M223 SNA CLA / SKIP IF NARROW. /M223 TAD P7700 / xtra spacing for 132 col mode. JMS PTDASH -53 AC7777 / reset CURPOS so that FXSCRL will DCA CURPOS / reposition the cursor. PGMSGB, JMP I PGMSG / PSUEDO_CODE: / BEGIN CHKLMD / IF CHAR = 'LINE_MODIFIED' OR 'RULER_MODIFIED' / THEN / IF CHAR = 'RULER_MODIFIED' / THEN SET RULER_MODIFIED_FLAG / / DELETE CHAR / SET LINE_MODIFIED_FLAG / BUMP RETURN ADDRESS / END CHKLMD CHKLMD, XX / CHECK FOR MODIFIED FLAGS TAD I CURPTR / GET CHARACTER TAD (-ECMDFL) / CHARACTER = "LINE_MODIFIED_FALG"? SNA / SKIP IF: NOT JMP CHKLMA TAD (ECMDFL-ECRMFL) / CHARACTER = "RULER_MODIFIED_FLAG"? SZA CLA / SKIP IF: SO JMP I CHKLMD / RETURN IF NOT MOD FLAG TAD (ECRMFL) / SET RULER MODIFIED FLAG DCA RLRMOD CHKLMA, DCA I CURPTR / DELETE FLAG SLNMOD / SET INDICATOR ISZ CHKLMD / BUMP RETURN JMP I CHKLMD / RETURN EISRCH, OVLJMP;OVSRCH / SEARCH OVERLAY CASUNT, OVLJMP;OVCASE / CASE UNIT (UPPER/LOWER CASE) EIHYPS, OVLJMP;OVHYPS / HYPHEN PUSH OVERLAY X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------- PAGE DSKBLK=.%400+DLOEDT / DISK BLOCK WHERE PAGE IS LOADED EDICHR, XX CDFMYF JMS GSRCK / SEE IF GLOBAL SEARCH IS ON JMP EDICH1 EDICH2, CIFSYS JWAIT EDICH1, CIFPRT JMS I (FLABUZ) / SOUND BUZZER AND TOGGLE LED'S / IF THEIR IS A PRINTER ERROR CIFSYS XLTIN JMP EDICH2 EDICH3, JMP I EDICHR DSKCAL, XX / CALL FIELD 0 DISKIO ROUTINES DCA T1 CDFMYF TAD I DSKCAL DCA .+4 TAD T1 CIFFIO FILEIO .-. ISZ DSKCAL CDFBUF JMP I DSKCAL PSTIO, XX / PASTE_I/O - READ & WRITE PASTE BUF. DCA .+4 / SET FUNCTION CODE TAD PSTBLK CDFBUF JMS SYSIO .-. PSTEBF / DO I/O JMS SETPST / RESET PTRS JMP I PSTIO / AND RETURN SYSIO, XX / DO SYS IO DCA PSQBLK+RXQBLK / SET BLOCK NUMBER RDF TAD CDF0 / GET BUFFER FIELD DCA PSQBLK+RXQBFD / STORE IN QBLK CDFMYF TAD I SYSIO DCA PSQBLK+RXQFNC / AND FUNCTION CODE ISZ SYSIO TAD I SYSIO DCA PSQBLK+RXQBAD / AND BUFFER ADDRESS /D212 TAD USERNO /D212 CLL RAL / GET DRIVE NUMBER DCA PSQBLK+RXQDRV / SET DRIVE NUMBER TO ZERO IN QUEUE BLOCK ISZ SYSIO CIFSYS ENQUE PQBLK / QUEUE Q-BLOCK SYSIO1, CIFSYS JWAIT / WAIT FOR EVENT TAD PSQBLK+RXQCOD / ARE WE DONE? SNA CLA JMP SYSIO1 / NO JMP I SYSIO / AND RETURN PQBLK, DSKQUE; 0; 0 PSQBLK, 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; PSTEBF; CDFBUF; 0; 0 / OVJUMP JUMP TO OVERLAY IN OVERLAY AREA 1 / / OVJUMP, XX CDFMYF TAD I OVJUMP DCA T1 TAD (OVLAY1) DCA OVLOA2 TAD (TAD (DLOEDO-1) ) DCA OVLOA4 JMP OVJMCM OVJRTN, ISZ OVJUMP JMP I OVJUMP / OV2JMP JUMP TO OVERLAY IN OVERLAY AREA 2 / / OV2JMP, XX CDFMYF TAD I OV2JMP DCA T1 TAD (OVLAY2) DCA OVLOA2 TAD (TAD (DLOEDO-1+37) ) DCA OVLOA4 JMP OVJMCM OV2JRT, ISZ OV2JMP JMP I OV2JMP OVJMCM, TAD I OVLOA2 / READ LOCATION 7400 FOR OVERLAY NUMBER CIA / NEGATE THE VALUE TAD T1 / COMPARE WITH CURRENT REQUEST NUMBER AND (7600) / MASK OFF ADDRESS BITS SNA CLA / IS OVERLAY IN MEMORY ? JMP OVLOA1 / JUMP IF SAME OVLOA3, TAD T1 / PICK UP OVERLAY REQUEST NUMBER BSW / MOVE TO LOW ORDER BITS AND P77 / MASK OFF OVERLAY NUMBER CLL RAR / DIVIDE NUMBER BY TWO OVLOA4, TAD (DLOEDO-1) / CONVERT TO BLOCK NUMBER JMS SYSIO RXERD / READ IT IN OVLOA2, OVLAY1 / TO OVERLAY AREA OVLOA1, TAD T1 AND P177 / GET DESIRED ADDRESS TAD OVLOA2 / RELOCATE IT TO OVERLAY AREA DCA T1 / STORE FOR CALLER JMP I T1 RPMTRL, 0 / Rapid Paging MaTh RuLer offset / THIS LINE (AND ANY LIKE IT) MAY APPEAR AT THE END OF ANY PAGE / THAT THERE IS ROOM (TWO WORDS PER LINE) EIRULR, OVLJMP;OVRULR / GOLD RULER X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------- PAGE DSKBLK=.%400+DLOEDT / DISK BLOCK WHERE PAGE IS LOADED RDNXNJ, XX / RDNXCH, NO JUST CODES JMS DSKCAL XRDFNC SNA SPA JMP RDNXN1 / JUMP IF ERR OR EOF JMS ESJCHK SZA TAD (JCHKOF-ECPMRK) SNA JMP RDNXNJ+1 TAD (ECPMRK) ISZ RDNXNJ JMP I RDNXNJ RDNXN1, CLA / TREAT ERR JUST LIKE EOF JMP I RDNXNJ COPRUL, XX / COPY NWRUL BUFFER TO CURUL BUFFER JMS CPYBUF -RULSIZ CDFMNU / M219 NWRUL-1 CDFMYF CURUL-1 CDFMNU / A219 TAD NWLMAR JMS GETBYT NWRUL / DETERMINE SPACING CLL RAR JMS GETBYT XLMAR DCA SPACNG CDFMNU / A219 / the following is a blaster call to a panel memory subroutine to /a238 / create space in this page for the panel hole blaster (rather /a238 / cannibalistic but there it is anyway) /a238 JMS BHOOK / off to the hook /a238 BLRUL0 / subroutines blaster table entry /a238 / contains all the information /a238 / required to run the folling deleted /a238 / code from panel memory routines /a238 /d238 AC7777 /d238 TAD NWLMAR /d238 DCA LFTMAR /d238 AC7777 /d238 TAD NWRMAR /d238 DCA RGTMAR /d238 AC7777 /d238 TAD NWWMAR /d238 SPA /d238 TAD NWLMAR /d238 DCA WRPMAR /d238 AC7777 /d238 TAD NWPMAR /d238 SPA /d238 TAD NWLMAR /d238 DCA PGFMAR /d238 AC7777 /d238 TAD NWCMAR /d238 CLL RAL /d238 SMA /d238 JMP .+4 /d238 AC0001 /d238 TAD LFTMAR /d238 TAD RGTMAR /d238 DCA CENMAR /d238 CDFMNU Qu. why did we need this anyway?? / A219 JMP I COPRUL INSRUL, XX / INSTALL RULER TAD (ECSTRL) JMS INSRL1 JMS MAKRUL CURUL INSRL1 TAD (ECMDRL) JMS INSRL1 JMS MAKRUL NWRUL INSRL1 TAD (ECNDRL) JMS INSRL1 JMP I INSRUL INSRL1, XX JMS INSERT AC0001 CHKPTR CLA CDFMYF JMP I INSRL1 RLGETS, XX / TAD RULR - JMS RLGETS JMS RLGETX DCA RLGET1 JMS CPYBUF -RULSIZ CDFBUF RLGET1, .-. CDFMNU / M219 NWRUL-1 JMP I RLGETS RLGETX, XX / TAD RULR - JMS RLGETX / RETURNS ADDR-1 CLL RAR TAD (DLRLRE) / GET BLOCK DCA PSTBLK RTL BSW / 0 OR 200 DCA RLGET1 TAD (RXERD) JMS PSTIO / READ TO PSTEBF CDFMYF TAD RLGET1 TAD PSTPTR / RETURN ADDR-1 JMP I RLGETX SETPST, XX / RESET PAST BUFFER PTRS TAD (PSTEBF) DCA PSTPTR DCA BASKCT / SHOW EMPTY WASTEBASKET CDFBUF / RESET FIELD JMP I SETPST /******************************************************************** / BHOOK Hook to panel page blaster /******************************************************************** /a238 BHOOK, 0 / hook return address /a238 DCA BLACSV / save accumulator /a238 RDF / read the data field /a238 TAD CDF0 / make a cdf instruction /a238 DCA BHKEXI / save for return /a238 CDFMYF / set to hooks field /a238 TAD I BHOOK / get the table entry /a238 MQL / push into MQ /a238 TAD BLACSV / get the ac /a238 ISZ BHOOK / increment the return address /a238 CIFMNU / blaster is in the menu field /a238 IOF / turn the interrupts off before.. /a238 JMS I BLASTH / Calling blaster /a238 ISZ BHOOK / skip return exit /a238 BHKEXI, 0 / CDF instruction /a238 JMP I BHOOK / return /a238 BLASTH, BLASTR / blastr address (get from WPF1) /a238 BLACSV, 0 / ac save /a238 / / Moved here on edit 241 for space reasons /M241 / EIBOTM, OVLJMP;OVRBOT / V2 "FAST" GOLD BOTTOM / / / Moved here on edit 245 for space reasons /M245 UDLBIT= BLDBIT UDLUNT, TAD (400) / SET... NUDUNT, DCA UDLBIT / ...OR CLEAR UNDERLINING OVLJMP;OVUNDL EIGPST, OVLJMP;OVGPST X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------- PAGE DSKBLK=.%400+DLOEDT / DISK BLOCK WHERE PAGE IS LOADED /a239 the following two subroutines CMPRUL and CLRRULR now call the BLASTR /a239 see WPHOLE / / SUBR CMPRUL -- / COMPARES CURRENT RULER (CURUL) TO NEW RULER (NWRUL). / CHECKS FOR RULER CHANGES. / / CALL: / CLA / AC MUST = 0 / / DF DOESN'T MATTER / JMS CMPRUL / COMPARE NWRUL TO CURUL / JMP RULSAM / RULERS ARE THE SAME, AC=0 / JMP RULDIF / RULERS ARE DIFFERENT, AC=0 / CMPRUL, XX JMS BHOOK / call CMPRLH through the BLASTR /a239 CMPRLE / BLASTR table entry /a239 SKP / normal return keep it normal /a239 ISZ CMPRUL / skip return from BHOOK and now from here /a239 JMP I CMPRUL / RETURN /a239 /d239 TAD (NWRUL-1) / GET PNTR TO NEW RULER /d239 DCA X0 /2239 TAD (CURUL-1) / GET PNTR TO OLD RULER /d239 DCA X1 /d239 TAD (-RULSIZ) /d239 DCA T1 /d239CMPRL1, CDFMNU / A219 /d239 TAD I X0 /d239 CIA / COMPARE NEW TO OLD /d239 CDFMYF / A219 /d239 TAD I X1 /d239 SZA CLA /d239 JMP CMPRL2 /d239 ISZ T1 /d239 JMP CMPRL1 / NOT SIGNIFICANT, DO NEXT /d239 SKP /d239CMPRL2, ISZ CMPRUL /d239 JMP I CMPRUL CLRULR, XX / CLEAR RULER JMS BHOOK / Call CLRLRH thru the BLASTR /a239 CLRLRE / BLASTR table entry /a239 JMP I CLRULR /a239 /d239 CDFMNU /d239 TAD (NWRUL-1) /d239 DCA X0 /d239 TAD (-HAFRUL) /d239 DCA T1 /d239 TAD (101) /d239 DCA I X0 /d239 ISZ T1 /d239 JMP .-3 /d239 TAD (-10) /d239 DCA T1 /d239 DCA I X0 /d239 ISZ T1 /d239 JMP .-2 /d239 CDFMYF /d239 JMP I CLRULR /a239 THE above two routines removed to WPHOLE /***********************************************************************/a239 /a239 INSERT CHAR into text buffer allowing for 8 bit data /***********************************************************************/a239 ESIMCH, XX / subroutine return address /a239 DCA ET1 / save the char /a239 TAD ET1 / get it back /a239 AND (200) / check for 8 bit data /a239 SNA CLA / skip if 8 bit /a239 JMP NEXPC / deal with the char normally /a239 SLNMOD / set line modified flag /a239 TAD (ESTRING-1) / get the start of the standard dead str/a239 DCA X1 / save in an index register /a239 ELOOP, RDF / read the data field /a239 TAD CDF0 / make a CDF instruction /a239 DCA ESCDF / put it where you can use it /a239 CDFMYF / get this field to access ESTRING /a239 TAD I X1 / use the index register to get'dead str/a239 ESCDF, 0 / restore the data field /a239 AND P177 / dead strings are all 7 bits /a239 SNA / test for end of string /a239 JMP I ESIMCH / RETURN on END of dead string /a239 JMS ESICHR / INSERT CHAR INTO TEXT BUFFER /a239 JMP ELOOP / get next dead str char /a239 NEXPC, TAD ET1 / get the char back /a239 JMS ESICHR / INSERT CHAR INTO TEXT BUFFER /a239 JMP I ESIMCH / RETURN /a239 ESTRING,10 / start of dead /a239 " / space /a239 "2 / 2 multinational char precedence /a239 ET1, 0 / save char temp and 8 bit char position/a239 15 / END OF DEAD /a239 0 / string terminator /a239 /***********************************************************************/a239 MAKRUL, XX / MAKE RULER / JMS MAKRUL - RULR - OUTRTN / GENS ESCS FOR RULR THRU OUTRTN CDFMYF TAD I MAKRUL DCA MAKRLA ISZ MAKRUL TAD I MAKRUL DCA MAKRLB / SAVE RULR AND OUTRTN PTRS ISZ MAKRUL DCA DSPRL1 / CLEAR POSITION MAKRL1, ISZ DSPRL1 / BUMP TO NEXT POSITION TAD DSPRL1 JMS GETBYT MAKRLA, .-. SNA JMP I MAKRUL / RETURN WHEN DONE TAD (-1) SNA JMP MAKRL1 / IGNORE NULS TAD (100) DCA MAKRLC / SAVE VAL CODE TAD DSPRL1 RTR RTR / GEN DSPRL1 AND (17) SNA JMP .+3 TAD (60) JMS I MAKRLB / 1ST HEX DIGIT TAD DSPRL1 AND (17) TAD (60) JMS I MAKRLB / 2ND HEX DIGIT TAD MAKRLC JMS I MAKRLB / VAL CODE CDFMYF JMP MAKRL1 / LOOP FOR MORE MAKRLB, .-. MAKRLC, .-. DSPRUL, XX / DISPLAY RULER JMS PCUR / POSITION CURSOR TAD I DSPRUL / Get agument of which ruler to display./A196 DCA DSPRLR / Save it. /A196 ISZ DSPRUL / Bump to return address. /A196 DSPRLA, AC0001 / Compute posn into string = cursor posn/A196 TAD CURPOS / ... /A196 JMS GETBYT DSPRLR, NWRUL SNA JMP I DSPRUL JMS GETBYT OKSTR / XLAT TO REAL CHAR BSW SMA IAC BSW / CONVERTS SIXBIT TO ASCII JMS PUTSCH JMP DSPRLA / RETURN IF NOT DSPRL1, .-. DSPRLN, XX TAD NORUPD / SKIP RULER UPDATE IF IN RULER MODE SNA CLA JMS ESNWRL /D233 DCA NORUPD JMS DSPRUL NWRUL / Display the NEW ruler. /A196 JMP I DSPRLN / NORUPD must be on same page as DSPRLN/A196 NORUPD, 0 / FLAG FOR NO RULER CHANGE IN FXSCRL DSPCUR, XX / Routine to display CURUL. Called by /A196 JMS DSPRUL / status line. /A196 CURUL / ... /A196 CDIMNU / SET UP TO RETURN BACK TO MENU FIELD /A220 JMP I DSPCUR / Return to caller. /A196 EIGRAR, OVLJMP;OVGRAR / GOLD RIGHT ARROW EIGLAR, OVLJMP;OVGLAR / GOLD LEFT ARROW EISWAP, OVLJMP;OVSWAP / SWAP OVERLAY X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------- PAGE DSKBLK=.%400+DLOEDT / DISK BLOCK WHERE PAGE IS LOADED / NOTE: THE GOTO-RULER CODE IN 'OVRRGO' RELIES ON THE FACT THAT / 'SETRUL' IS CALLED WHENEVER 'CURMOV' ADVANCES OR BACKS UP OVER / A RULER. WHEN 'OVRRSC' SCROLLS TO A RULER, IT CLEARS ENTRY POINT / 'SETRUL', THEN CALLS 'CURMOV' UNTIL 'SETRUL' IS NONZERO, / INDICATING 'CURMOV' HAS PASSED OVER A RULER. SETRUL, XX / JMS SETRUL - INRTN / SETS UP NWRUL CDFMYF TAD I SETRUL DCA SETRLA ISZ SETRUL JMS CLRULR / CLEAR NEW RULER SETRLB, DCA RLPOSN JMS I SETRLA AND P177 TAD P7700 / SAME AS (-100) ONLY ITS ON PAGE 0 SMA JMP SETRL3 / CHECK FOR PARMS TAD (100-60) SPA JMP SETRL1 MQL TAD RLPOSN / SAVE PRM, GET POSITION CLL RTL RTL MQA / RLPOSN*16+PRM JMP SETRLB / JUMP TO STORE, GET NEXT SETRL1, CLA / RETURN TO CALLER W/ ZEROED AC SETRL3, SNA JMP I SETRUL / JUMP IF NOT VAL IAC JMS UPDRUL JMP SETRLB SETRLA, .-. /++ / UPDRUL UPDATE_RULER / / FUNCTIONAL DESCRIPTION: UPDRUL / / UPDATING OF RULER (IN NWRUL), LOCATIONS CONTAINING RULER POSITION / VALUES (RLSTOR THRU NWHMAR), AND DECIMAL TAB COUNT BUFFER (NWDT). / / UPDRUL PSEUDO CODE: / COMMENTS: 1) RULER_SETTING_TYPE - EACH RULER CHARACTER (L, R, T, / ...ETC.) HAS A UNIQUE TYPE ASSIGNED TO IT. (SEE CHART / AT NWRUL) / 2) STORAGE_OFFSET_VALUE - EACH RULER CHARACTER HAS A / STORAGE OFFSET VALUE (SEE XLSTR) ASSOCIATED WITH IT / THAT IS USED FOR OFFSETTING FROM RLSTOR TO STORE THE / POSITION OF THE RULER SETTING IN THE RULER OR IN THE / CASE OF DECIMAL TABS, THE NUMBER OF THEM IN THE RULER. / BEGIN / SAVE NEW RULER_SETTING_TYPE / IF [NEW RULER_SETTING_TYPE IS VALID (1-16)] / | GET STORAGE_OFFSET_VALUE FOR NEW RULER_SETTING_TYPE (XLSTR TABLE) / | SAVE IT / | GET OLD RULER_SETTING_TYPE FOR RULER POSITION WE'RE AT / | GET OLD RULER SETTING STORAGE_OFFSET_VALUE / | IF [OLD RULER SETTING STORAGE_OFFSET_VALUE = DECIMAL TAB STORAGE_OFFSET_VALUE] / | | SET DECIMAL TAB COUNT = DECIMAL TAB COUNT - 1 / | ELSE / | IF [POSITION VALUE STORED FOR OLD RULER SETTING NEEDS CLEARING] / | CLEAR POSITION VALUE FOR OLD RULER SETTING / | / | IF [POSITION VALUE FOR NEW RULER_SETTING_TYPE NEEDS UPDATING] / | | SET POINTER FOR SAVING POSITION VALUE OF NEW RULER SETTING / | | IF [NEW RULER_SETTING_TYPE = DECIMAL TAB] / | | | SET DECIMAL TAB COUNT = DECIMAL TAB COUNT + 1 / | | ELSE / | | IF [OLD RULER_SETTING_TYPE NEEDS MODIFICATION] / | | SET POSITION OF OLD RULER SETTING IN RULER TO NO SETTING / | | STORE NEW RULER_SETTING_TYPE POSITION / | SET [NEW RULER SETTING IN RULER] / | / RETURN / / CALLING SEQUENCE: JMS UPDRUL / / INPUT PARAMETERS: RLPOSN = CURRENT POSITION IN RULER / AC = NEW RULER_SETTING_TYPE / / IMPLICIT INPUT: RLTYP, RLNSTR (T3), RLPOSN, NWDT, T2 / / OUTPUT PARAMETERS: NONE / / IMPLICIT OUTPUT: RLTYP, RLNSTR (T3), NWDT, T2 / / COMPLETION CODE: NONE / / SIDE EFFECTS: NONE / /-- RLNSTR= T3 UPDRUL, XX / UPDATE RULER DCA RLTYP / SAVE NEW RULER_SETTING_TYPE CDFMYF TAD RLTYP / GET THE TYPE OF SETTING TAD (-17) / IS IT A VALID SETTING? SMA CLA / SKIP IF: SO JMP I UPDRUL / IGNORE ILLEGAL SETTING TAD RLTYP / GET STORAGE_OFFSET_VALUE FOR NEW / RULER_SETTING_TYPE (XLSTR TABLE) JMS GETBYT XLSTR DCA RLNSTR / SAVE IT TAD RLPOSN / GET OLD RULER_SETTING_TYPE FOR / RULER POSITION WE'RE AT JMS GETBYT NWRUL JMS GETBYT XLSTR / GET OLD RULER SETTING STORAGE_OFFSET_- / VALUE TAD (RLSTOR-1-NWDT) / WAS OLD RULER SETTING STORAGE_OFFSET_- / VALUE THAT OF A DECIMAL TAB? CDFMNU / A219 SZA / SKIP IF: SO JMP UPDRLC / CONTINUE ON. NO SPECIAL PROCESSING. AC7777 / SET DECIMAL TAB COUNT = DECIMAL TAB / COUNT - 1 TAD NWDT DCA NWDT JMP UPDRLF / SKIP OVER CLEARING OLD OFFSET UPDRLC, TAD (NWDT+1-RLSTOR) / LOCATION HOLDING POSITION VALUE FOR / OLD RULER SETTING NEED CLEARING? SNA / SKIP IF: NEED TO CLEAR OLD STORAGE / OFFSET JMP UPDRLF TAD (RLSTOR-1) / CLEAR LOCATION HOLDING POSITION VALUE DCA T2 / FOR OLD RULER SETTING DCA I T2 UPDRLF, TAD RLNSTR / DOES THE POSITION VALUE FOR THE NEW / RULER_SETTING_TYPE NEED UPDATING? SNA / SKIP IF: NEED TO UPDATE JMP UPDRLA TAD (RLSTOR-1) / SET POINTER FOR SAVING POSITION VALUE / OF NEW RULER SETTING DCA T2 UPDRLD, AC7776 / NEW RULER SETTING A DECIMAL TAB? TAD RLTYP SZA CLA / SKIP IF: SO JMP UPDRLE / GO CLEAR OLD POSITION ISZ I T2 / SET DECIMAL TAB COUNT = DECIMAL TAB / COUNT + 1 JMP UPDRLA / BYPASS CLEARING OUT OLD POSITION UPDRLE, TAD I T2 / DOES OLD RULER_SETTING_TYPE NEED / MODIFICATION?   SNA / SKIP IF: YES JMP UPDRLB / JUST SET NEW POSITION MQL / HOLD POSITION ON LINE OF OLD RULER / SETTING IAC / SET AC = NO_SETTING RULER_SETTING_TYPE JMS PUTBYT / PUT THIS NO_SETTING CHARACTER IN RULER NWRUL UPDRLB, CDFMNU TAD RLPOSN / STORE NEW RULER_SETTING_TYPE'S POSITION DCA I T2 UPDRLA, TAD RLPOSN / SET NEW RULER SETTING IN RULER MQL / HOLD IT'S POSITION IN RULER TAD RLTYP / GET TYPE OF SETTING JMS PUTBYT / PUT IT IN NWRUL NWRUL JMP I UPDRUL / RETURN RLTYP, .-. / / / CHKCHR, XX / CHECK AC FOR SPECIAL CHARACTER JMS ESJCHK / RETURN FROM THIS SUBROUTINE WITH / AC = 0 IF CHARACTER WAS JUSTIFY_SPACE, / WRAPPED_LINE, WRAPPED_LINE_WITH_HYPHEN, / LINE_MODIFIED_FLAG, OR RULER_MODIFIED_FLAG. / IF NOT THEN AC = CHARACTER - RULER_ / MODIFIED_FLAG SZA / SKIP IF: CHARACTER IS ONE OF THOSE LISTED / ABOVE. TAD (JCHKOF-ECSTRL) / CHARACTER = "START_OF_RULER"? SZA CLA / SKIP IF: SO ISZ CHKCHR / BUMP RETURN. NONE OF SPECIAL CHARACTERS / LISTED HERE! JMP I CHKCHR / RETURN ESJCHK, XX / CHECK FOR LINE OR RULER MODIFIED FLAG JMS ESJTST / RETURN FROM ESJTST WITH AC = 0 IF CHAR. / WAS A JUSTIFY_SPACE, WRAPPED_LINE, OR / WRAPPED_LINE_WITH_HYPHEN. IF NOT THEN / AC = CHARACTER - ECHYLN SZA / SKIP IF: CHARACTER DETECTED DURING / ESJTST WAS A JUSTIFY_SPACE, WRAPPED_ / LINE, OR WRAPPED_LINE_WITH_HYPHEN TAD (JTSTOF-ECMDFL) / CHARACTER = "LINE_MODIFIED_FLAG"? SZA / SKIP IF: SO TAD (ECMDFL-ECRMFL) / SUBTRACT "RULER_MODIFIED_FLAG" CHAR. JMP I ESJCHK JCHKOF= ECRMFL / AC OFFSET ON RETURN, IF NON-ZERO ESJTST, XX / CHECK FOR JUSTIFY_SPACE, WORD_WRAP OR / WRAPPED_LINE_WITH_HYPHEN TAD (-ECJSPC) / CHARACTER = "JUSTIFY_SPACE"? SZA / SKIP IF: SO TAD (ECJSPC-ECWWLN) / CHARACTER = "WRAPPED_LINE"? SZA / SKIP IF: SO TAD (ECWWLN-ECHYLN) / SUBTRACT "WRAPPED_LINE_WITH_HYPHEN" CHAR. JMP I ESJTST / RETURN JTSTOF= ECHYLN EIPWFL, PUTESC / SET APPLICATION KEY-PAD MODE "=-200 JMS CLSSET / CLEAR SCROLL VALUES FOR STATUS DISPLAY JMP EINEXT / AND WAIT FOR NEXT EDIT CMD / SINCE THE ACCENTED CHARACTER TABLES HAVE BEEN MOVED TO THE PRINTER / SEARCH HAS BEEN MODIFIED TO LOOK IN THE PRINTER IFDEF FORIN < / SEARCH FOR ENTRY IN TABLE1 OR TABLE2 SEARCH, XX DCA POINT1 / SAVE TABLE ADDRESS CDFPRT / SET TO PRINTER FIELD ISZ POINT1 / BUMP POINTER TAD I POINT1 / GET CONTENTS ISZ POINT1 / BUMP AGAIN SNA / END OF TABLE? JMP SRCHEX / YES, TAKE 1ST EXIT TAD CHAR1 / COMPARE AGAINST CHAR. DESIRED SZA CLA / SAME? JMP SEARCH+3 / NO ISZ SEARCH / YES, TAKE 2ND EXIT SRCHEX, CDFMYF / CHANGE BACK TO THIS FIELD JMP I SEARCH > / END IFDEF FORIN X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------- PAGE DSKBLK=.%400+DLOEDT / DISK BLOCK WHERE PAGE IS LOADED PUTMSG, XX / OUTPUT MESSAGE TO SCREEN TAD I PUTMSG / GET ADDRESS OF MESSAGE TO OUTPUT ISZ PUTMSG / INCREMENT RETURN ADDRESS CDILP / SET DATA AN INSTRUCTION FIELD TO LP FIELD JMS PUTLP / CALL ROUTIN IN LIST PROCESSING FIELD JMP I PUTMSG / RETURN TO CALLER GETBYT, XX / TAD INDEX - JMS GETBYT - SPTR CDFMYF / A219 RETURNS BYTE TAD (-1) CLL RAR DCA T1 / A219 TAD I GETBYT / GET PTR JMS NRTST / A219 TAD T1 / A219 DCA T1 TAD I T1 / GET WORD SNL BSW / GET BYTE AND P77 / ISOLATE IT ISZ GETBYT CDFMYF / A219 JMP I GETBYT / AND RETURN PUTBYT, XX / TAD INDEX - MQL - TAD CHAR - JMS PUTBYT - SPTR CDFMYF / A219 SETS STRING(INDEX)=CHAR AND P77 / ISOLATE CHAR SWP TAD (-1) CLL RAR DCA T1 / A219 TAD I PUTBYT / GET PTR JMS NRTST / A219 TAD T1 / A219 DCA T1 TAD I T1 / GET WORD SNL BSW / GET BYTE AND P7700 / ISOLATE MQA / INSERT CHAR SNL BSW DCA I T1 / PUT IT BACK IN STRING ISZ PUTBYT CDFMYF / A219 JMP I PUTBYT / RETURN CPYBUF, XX / JMS COPY - -CNT - CDFA - A-1 - CDF B - B-1 CDFMYF TAD CPYBUF CIFLP JMS I (XFCOPY) / AND GO DO IT IN LP FIELD DLTRLR, XX / DELETE RULER CDFBUF DCA I CURPTR ADVPTR JMP I DLTRLR TAD (-ECNDRL) SZA CLA JMP .-5 DCA I CURPTR JMP I DLTRLR ADVRUL, XX / ADVANCE RULER TAD CURPTR DCA ADVRL1 / SAVE CURPTR ADVRLA, JMS ESNWRL / COLLECT NEW RULER INFO TAD ADVRL1 DCA CURPTR JMS DLTRLR / DELETE RULER ADVPTR / ADVANCE TO NEXT CODE JMP ADVRLB TAD (-ECSTRL) SNA CLA JMP ADVRLA / LOOP IF STILL IN RULERS ADVRLB, JMS CMPRUL JMP ADVRLC / COMPARE WITH OLD RULER JMS INSRUL / INSERT IF NOT A NULL CHANGE JMS COPRUL / AND MAKE IT THE NEW CURRENT RULER ISZ ADVRUL / BUMP TO NON-NULL RETURN TAD RGTMAR / WIDE RULER? TAD (-COLM80) SMA CLA JMS SETSPT / SET SPLIT SCREEN IF SO ADVRLC, DCA RLRMOD / CLEAR RULER CHANGE FLAG JMS SCRNMD / LET SCREEN REFRESH JMP I ADVRUL / AND RETURN ADVRL1, .-. / TEMP ESNWRL, XX / SET NEW RULER ADVPTR JMP I ESNWRL TAD (-ECMDRL) SZA CLA JMP .-4 / GET TO MIDDLE JMS SETRUL ESADRL / SET NWRUL CDFBUF / RESET FIELD JMP I ESNWRL ESADRL, XX ADVPTR NOP CDFMYF JMP I ESADRL / GLOBAL SEARCH FLAG CHECK ROUTINE / THIS ROUTINE IS BRANCHED TO FROM THE EDITORS INPUT CHAR WAIT LOOP / AT SYMBOL "EDICHR" TO SEE IF THE GLOBAL SEARCH FLAG (GSRF) IS SET / IF IT IS SET, WE CALL IN THE REPLACE OVERLAY TO CONTINUE THE OPERATION / THE SEARCH AND SELECT OVERLAY WILL COME HERE WHEN THE DESIRED TEXT / STRING IS FOUND IN THE DOCUMENT. THIS ROUTINE WILL THEN CALL IN THE / REPLACE OVERLAY, WHICH THEN CALLS IN THE SEARCH AND SELECT OVERLAY TO / CONTINUE. REACHING THE END OF THE DOCUMENT OR A GOLD+HALT WILL / TERMINATE THE PROCESS. GSRCK, XX TAD GSRF / GET THE GLOBAL SEARCH AND REPLACE FLAG SNA CLA / IS IT SET? JMP I GSRCK / NO, RETURN TO CALLER! OVLJMP;OVREPL / YES, CALL IN THE REPLACE OVERLAY /++ / RLEQTE RULER_EQUATE / / FUNTIONAL DESCRIPTION: RLEQTE / / COPY CURRENT RULER BUFFER (CURUL) TO NEW RULER BUFFER (NWRUL). / / RLEQTE PSEUDO CODE: / / BEGIN / | CALL CPYBUF / | RETURN / END / / CALLING SEQUENCE: JMS RLEQTE / / INPUT PARAMETERS: AC = 0 / / IMPLICIT INPUT: NONE / OUTPUT PARAMETERS: NONE / IMPLICIT OUTPUT: NONE / COMPLETION CODE: NONE / SIDE EFFECTS: NONE / /-- RLEQTE, XX / RULER_EQUATE JMS CPYBUF -RULSIZ / COUNT CDFMYF / FIELD TO COPY FROM CURUL-1 / STARTING ADDRESS TO COPY FROM CDFMNU / FIELD TO COPY TOO NWRUL-1 / STARTING ADDRESS TO COPY TOO JMP I RLEQTE / RETURN X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------- PAGE DSKBLK=.%400+DLOEDT / DISK BLOCK WHERE PAGE IS LOADED IFDEF PERDEC < / OK STRING - ACCEPTABLE RULER CHARACTERS OKSTR, 5556 / dash, period > / END IFDEF PERDEC IFDEF COLDEC < OKSTR, 5572 / dash, colon > / END IFDEF COLDEC IFDEF COMDEC < OKSTR, 5554 / dash, comma > / END IFDEF COMDEC / The following stings comprise the table of acceptable 7 bit characters / for ruler definitions. Where an 8 bit character is required, an entry / should be made here of an appropriate composable 7 bit character, such / as the ones shown on the key beside the 8 bit (eg. e-accute and # on the / Italian keyboard). The six bit representation of the 8 bit character / should be put in the appropriate corresponding place in EIGHTC. IFDEF ENGLSH < 7624 / closing angle bracket, T TEXT /LRDJWPCNHF/ > / END IFDEF ENGLSH IFDEF V30NOR < 7624 / closing angle bracket, T TEXT /VUDJIASNOF/ > / END IFDEF V30NOR IFDEF V30SWE < 7617 / closing angle bracket, O TEXT /VHYRISCZAX/ > / END IFDEF V30SWE IFDEF ITALIAN < 7624 / closing angle bracket, T TEXT /SDEGIPCNLM/ > / END IFDEF ITALIAN IFDEF SPANISH < /A255 7624 / closing angle bracket, T / " TEXT /SNDAIPCLGM/ / " > / END IFDEF SPANISH /A255 IFDEF FRENCH < 7624 / closing angle bracket, T TEXT "GDIJAPCHZF" > / END IFDEF FRENCH IFDEF GERMAN < 7624 / closing angle bracket, T TEXT /LRDJWPCNHF/ > / END IFDEF GERMAN IFDEF DUTCH < 7624 / closing angle bracket, T TEXT /LRDUIACNKF/ > / END IFDEF DUTCH IFDEF CANADA < 7624 / closing angle bracket, T TEXT /LRDJWPCNHF/ > / END IFDEF CANADA IFDEF NORWAY < 7624 / closing angle bracket, "T" TEXT "VHDJIASMOF" > / END IFDEF NORWAY IFDEF SWEDSH < 7624 / closing angle bracket, "T" TEXT "VHDJISCMAF" > / END IFDEF SWEDSH IFDEF DANISH < 7624 / closing angle bracket, "T" TEXT "VHDJIACMOF" > / END IFDEF DANISH *.-1 IFDEF ENGLSH < IFNDEF V30SWE < IFNDEF V30FAO < TEXT /=0123456789)!"#$%^&*(/ > > IFDEF V30FAO < TEXT '+0123456789=!"#$%&/()' /Keyboard layout for FAO/A250 > > / END IFDEF ENGLSH IFDEF V30NOR < TEXT '+0123456789=!"#$%&/()' /Keyboard layout for NORWAY/A254 > IFDEF V30SWE < TEXT '+0123456789=!"#$%&/()' /Keyboard layout for SVEEDON > IFDEF SPANISH < /A255 TEXT '+0123456789=!"#$%&/()' /Keyboard layout for SPN/ " > /A255 IFDEF ITALIAN < TEXT /-0123456789]\#"'(_7^[/ /NOTE: several of these can not be /obtained on an italian keyboard /except by a compose sequence /as they correspond to MCS chars /See eightc table for corresponding > /allowable MCS chars IFDEF FRENCH < TEXT :=0123456789#&["'(]?!\: > / END IFDEF FRENCH IFDEF GERMAN < TEXT :+0123456789=!"#$%&/(): > / END IFDEF GERMAN IFDEF DUTCH < TEXT :=0123456789"]\#$%!&(): > / END IFDEF DUTCH IFDEF CANADA < TEXT :=0123456789)!"/$%?&*(: > / END IFDEF CANADA IFDEF SCANDI < TEXT :+0123456789=!"#$%&/(): > / END IFDEF SCANDI TBSTR, 003;201;002;002;101;0;0 / EACH BYTE IN THIS TABLE CORRESPONDS / TO A RULER SETTING (SEE COMMENTS AT / NWRUL). EACH BYTE HERE TELLS US THE / CLASS OF RULER SETTING. XLSTR, 7;0;102;102;304;501;601 / EACH BYTE IN THIS TABLE CORRESPONDS / TO A RULER SETTING. (SEE COMMENTS AT / NWRUL). EACH BYTE TELLS US THE / OFFSET FROM LOCATION RLSTOR-1 TO / STORE THE POSITION OF THE RULER / SETTING UNDER CONSIDERATION. XLMAR, 002;400;003;100 / TYPE OF LEFT MARGIN PTRBLK, ZBLOCK NPTRS / SCREEN PTRS EIGES4, -63 / MAX LENGTH OF SEARCH PHRASE ZBLOCK 63 / 50 CHAR SEARCH BUFF / NWRUL IS LAODED WITH CURRENT RULER (CURUL BUFFER) PREVIOUS TO MODIFICATION / (GOLD-RULER). IT'S FORMAT IS AS FOLLOWS: EACH WORD IS DIVIDED INTO / 2 BYTES, EACH BYTE CONTAINING THE RULER SETTING FOR IT'S / CORRESPONDING POSITION IN THE RULER. PLEASE NOTE THAT WPS USES / OTHER CHARACTERS TO REPRESENT THE VARIOUS SETTINGS THAT MAY APPEAR / IN A RULER. THEY ARE NOT THE SAME CHARACTERS THAT APPEAR IN THE / RULER ON THE SCREEN. / / TYPE CLASS RULER SYMBOL / CHAR. VALUE IN NWRUL (TBSTR) MEANING SHOWN ON SCREEN / ----- ----- ------- ------- ------- --------------- / SPACE 41 1 0 NO SETTING _ / A 42 2 3 DECIMAL TAB STOP . / B 43 3 2 RIGHT-JUST. TAB STOP "RIGHT ANGLE BRACKET" / C 44 4 1 NORMAL (LEFT-JUST.) TAB T / D 45 5 0 LEFT MARGIN, SINGLE SPACED L / E 46 6 2 RIGHT MARGIN, RAGGED R / F 47 7 0 LEFT MARGIN, DOUBLE SPACED D / G 50 10 2 RIGHT MARGIN, JUSTIFIED J / H 51 11 1 WORD WRAPPED INDENT W / I 52 12 1 PARAGRAPH INDENT P / J 53 13 0 CENTERING POINT C / K 54 14 0 LEFT MARGIN, SPACE-AND-A-HALF N / L 55 15 0 HYPHENATION ZONE H / M 56 16 0 LEFT MARGIN, HALF-SPACE F / / CURUL - CURRENT_RULER / CURUL HOLDS THE SETTINGS OF THE CURRENT RULER WE ARE EDITING UNDER. / CURUL IS THE SAME FORMAT AS NWRUL DESCRIBED ABOVE. RULSIZ= NWRLND-NWRUL CURUL, ZBLOCK RULSIZ GSRPRV, 0 / PREVIOUS GLOBAL SEARCH FLAG WIDPRV, 0 / PREVIOUS WIDE SCREEN FLAG NOMOVE, 0 / FLAG FOR SEARCH MODE OPERATIONS RPRLHN, 0 / Rapid Paging Ruler Header block Number / RULER DISPLAY TEXT LITERALS RLSTR2, TEXT /....:....:/ RLSTR4, TEXT / / EIPRSC, OVLJMP;OVPRSC / PREV SCREEN X=. /-------------------- PAGE NRTST, 0 / Test if value is address of new ruler buffer TAD (-NWRUL) / If it is, set field to menu buffer swap area SNA CDFMNU TAD (NWRUL) CML / Restore link to original value JMP I NRTST / return to caller EIBKUP, IAC EIADVN, DCA MOVMOD+1 / SET MODE FLAG (FORWARD/BACKWARD) SIMCHR, MODSET MOVMOD / PUT MODE JMP EICHAR / SIMULATE CHAR BUTTON MOVMOD, SCHMOD!SLTMOD .-. EILOWR, TAD (40) / CASE LOWER EIUPPR, / CASE UPPER DCA CASBIT / SET UP/LOW SWITCH IAC EIUUDL, IAC / REMOVE UNDERLINE EIUBLD, IAC / REMOVE BOLD EIUNDL, IAC / UNDERLINE EIBOLD, / BOLD TAD (BLDMOD) DCA MOVMOD+1 / SAVE FUNCTION TYPE TSTSLT JMP SIMCHR / SIMULATE CHAR BUTTON IF NOT IN SELECT MODE / ELSE RETURN HERE WITH / CURRENT CHAR = START OF SELECT MODSET MOVMOD JMP SLXMOD ESLCT1, TAD (ECTMRK) / INSERT POSITION MARKER JMS INSERT DOSLCT, TAD (ECSLPT) / INSERT SELECT BREAK CHAR JMS INSERT JMS SVSLCR / SAVE CURSOR POSITION /A209 MODSET ESLMOD / SET SELECT MODE JMS SCRNMD AC0001 DCA ECHFLG AC0001 / GOLD S&R BUG FIX TAD SCRLCT / ARE WE ON A NEW LINE ie NEG SCRL CNT SPA CLA / SKIP IF NO. EVERYTHING IS STILL COOL JMS REJUST / IF YES WE MUST REJUSTIFY JMS SCRLUP JMS SCRNMD JMS LINDNT JMP GOTMRK / GDCASE A SUBROUTINE TO PERFORM CASE STYLE CHECKING / / CALL: / / ZZCASE (HAS A PAGE ZERO LINK) / TABLE-1 (ADDRESS OF THE TABLE TO COMPARE AGAINST) / (ON NO MATCH RETURNS HERE) / / AC ==> (VALUE TO COMPARE AGAINST) / / THE COMPARE TABLE HAS THE FORMAT OF: / / VALUE;ADDRESS / VALUE 1 AND ADDRESS TO JUMP TO ON MATCH / VALUE;ADDRESS / VALUE 2 AND ADDRESS TO JUMP TO ON MATCH / ... / ETC. / 0 / TABLE TERMINATOR / / NOTE: THIS SUBROUTINE DESTROYS THE CONTENTS OF AUTO INDEX / REGISTERS 6 AND 7 / CASTMP=IX0 / AUTO INDEX REGISTER 6 X7=IX1 / AUTO INDEX REGISTER 7 GDCASE, XX / ENTRY TO CASE SUBROUTINE DCA CASTMP / SAVE AC FOR COMPARES RDF / SAVE DATA FIELD TAD CDF0 / ADD TO CDF TO FIELD 0 DCA CASE02 / AND PUT FOR RETURN CDFMYF / SET TO MYFIELD TAD I GDCASE / GET THE TABLE ADDRESS DCA X7 / SAVE IN AUTO INDEX REGISTER / / THIS IS THE CHECK LOOP FOR CASE MATCHING / CASE01, TAD I X7 / GET VALUE SNA / TERMINATOR? JMP CASEXI / YES TAKE DEFAULT RETURN CIA / NEGATE THE OPERAND TAD CASTMP / COMPARE SNA CLA / MATCHED? JMP CASMAT / YES! GO TO MATCH EXIT ISZ X7 / SKIP JUMP VECTOR JMP CASE01 / TRY THE NEXT VALUE / / END OF LOOP / CASMAT, TAD I X7 / GET RETURN ADDRESS DCA GDCASE / STORE FOR RETURN SKP / DON'T INCREMENT CASEXI, ISZ GDCASE / SKIP TABLE VECTOR CASE02, CDFMYF / RESET DATA FIELD JMP I GDCASE / AND GO HOME HDRGET, XX / JMS HDRGET - HDROFST CDFMYF AC7776 TAD I HDRGET ISZ HDRGET CIFFIO FILEIO XHDRGT JMP I HDRGET EICONT, OVLJMP;OVCONT / ENTRY POINT FOR CONT SEARCH & SLCT EIVIEW, OVLJMP;OVVIEW / GOLD VIEW EIGPGE, OVLJMP;OVGPGE EITIME, OVLJMP;OVTIME EIGETC, OVLJMP;OVGETC EIDCMT, OVLJMP;OVDCMT / GOLD GET_DOC EIMENU, OVLJMP;OVMENU / ENTRY POINT FOR EDITOR MENU EIHYP2, OVLJMP;OVHYP2 IFDEF CONDOR < EITX, OVLJMP;OVTC / TECHNICAL CHARACTER OVERLAY /A211 EICLKY, OVLJMP;OVCLKY / COLUMN CUT /A205 > / END IFDEF CONDOR IFDEF LFTRGT < EILARO, OVLJMP;OVLARO / LEFT ARROW EIRARO, OVLJMP;OVRARO / RIGHT ARROW > / END IFDEF LFTRGT RPPRRL, 0 / Rapid Paging PRevious Ruler block ID# /M201 RPPG0, 0 / Minus = gone over TOP-DOC /M201 RPBIN1, 0 / BINARY UNITS,TENS,HUNDREDS / PATCH TO PUTSCH FOR HORIZ SCROLLING CHARPT= . / PUTPAT MERGED INTO PUTSCH / ROUTINES TO GO IN AND OUT OF 132-COLUMN DISPLAY MODE / This routine puts terminal in 80 column mode / AC UNIMPORTANT ON ENTRY / DATA FIELD NOT IMPORTANT ON ENTRY BUT SET TO THIS FIELD ON EXIT CLR132, XX AC0004 / PUT AN OFFSET IN AC SO SET132 JMS SET132 / WILL ACTUALLY CLEAR 132 COLUMN MODE JMP I CLR132 / RETURN / This routine puts terminal in 132 column mode if ac=0 or 80 / column mode if ac= "l-"h (4) / DATA FIELD NOT IMPORTANT ON ENTRY BUT SET TO THIS FIELD ON EXIT / Modified for manual screen width choice to check the force wide/narrow /M223 / flag (WIDNAR). SET132 is called with AC=0 to set wide, or with AC=4 /M223 / from CLR132 to set narrow. By adding the WIDNAR flag (0=wide, 64=nar.) /M223 / we get four possible values of AC: 0, 4, 64, or 70. 0 means wide, so /M223 / we call LP132 with 0 AC. AC=70 was a call from CLR132 to go narrow, /M223 / and WIDNAR=64 says we're forced narrow, so call LP132 with AC=4 to /M223 / go to 80 column mode. AC=64 was a call to SET132, but WIDNAR says /M223 / we're forced narrow, so call LP132 with AC=4 to stay in 80 column. /M223 / AC=4 is a call from CLR132 to go narrow, which we allow even though /M223 / WIDNAR says force wide. This is for cases like GOLD:TOP which goes /M223 / to narrow mode for messages, or GOLD:MENU for the editor menu. The /M223 / basic rule is to stay in narrow mode ALWAYS, unless SET132 is called /M223 / and the force wide (WIDNAR=0) flag is set. /M223 SET132, XX CDFMYF /A223 TAD WIDNAR / GET WIDE/NARROW FLAG /A223 SZA /A223 AC0004 / NARROW, OR CLR132 CALL: FORCE 80 COL. /A223 CDILP / REAL ROUTINE IN IN LP FIELD WHERE JMS I (LP132) / THERE'S MORE ROOM JMP I SET132 / RETURN X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------- PAGE / *7000 / OVERLAY AREA 2 LOCATION IFNZRO .-7000 OV2NUM= 0 / INITIALIZE OVERLAY TWO COUNTER OVLAY2, OV2NUM / STORE OVERLAY NUMBER AS FIRST LOCATION /*************************************************************************** /**** C A U T I O N **** /**** THIS OVERLAY PAGE IS USED BY DECSPELL AND MUST RESIDE HERE **** /*************************************************************************** CDISPL= CDIMTH / DEFINE CHANGE FIELD INSTRUCTION TO SPELL NLINES= 11 / NUMBER OF LINES WITHIN SCROLLING REGION INITSP, XX / Entry point of initialization code. RDF / Get return field. TAD CIDF0 / ... DCA INITXT / save return CIF CDF instruction. CDFEDT / Map current (editor) field. TAD (NLINES) / Set edit screen size to 9 lines. DCA SCRNLN / ... TAD (NLINES) / Set wide screen size too. DCA WIDSIZ / ... TAD (SINZRO-1) / Get start of editor stuff to zap. DCA X0 / ... TAD (-NINZRO) / Get size of initialization area. JMS ZAP / Initial the area to zero. DCA BUFBEG / Initialize editor buffer pointers. TAD (BUFEND) / ++++ DCA BUFSIZ / .... / / INITIALIZE EDIT BUFFER / *** / AC7777 / SET POINTER TO BUFFER_BEGIN - 1 DCA X0 CDFBUF TAD (ECBFBG) / GET BUFFER BEGIN CODE DCA I X0 / INSTALL AT TOP OF BUFFER TAD (ECSTX) / GET START OF TEXT CODE DCA I X0 / INSTALL IN NEXT BUFFER LOCATION TAD (ECETX) / GET END OF TEXT CODE DCA I X0 / INSTALL IN NEXT BUFFER LOCATION TAD X0 / SET CURPTR TO POINT AT ETX CHAR. THAT / WAS JUST INSTALLED DCA CURPTR / ... / / CLEAR THE REST OF THE BUFFER / TAD (4-BUFEND) / Compute negative counter of # of words to clear. JMS ZAP / Zero out the rest of the buffer. TAD (ECBFND) / INSTALL BUFFER_END CHARACTER DCA I X0 /*************************************************************************** /**** C A U T I O N **** /**** THIS OVERLAY PAGE IS USED BY DECSPELL AND MUST RESIDE HERE **** /*************************************************************************** / INITIALIZE EDIT PTRBLK (POINTER_BLOCK) TABLE / CDFEDT TAD (PTRBLK-1) / ++++ DCA X0 TAD (-NPTRS+1) / ++++ JMS ZAP / Zero area out. TAD CURPTR / Set last loc in PTRBLK = CURPTR. DCA I X0 / TAD CURPTR / Initialize LINE 23 pointer. DCA LINE23 / ... DCA CURSOR / Init cursor posn. DCA LOWLIM / and screen bais. TAD (-12) /TO TEST FOR POSTPROCESSOR /A214 CDFMNU / Get file # from menu field. TAD I (MUBUF+MNTMP6) /SET TO 12 FOR FOOTNOTING /A214 SNA CLA /SKIP TO CONTINUE WITH SPELL /A214 JMP PPOPEN /OPEN FOOTNOTING FILES RETURN AT PPORET /A214 TAD I (MUBUF+MNUTFN) / Pick up UTILITY file number to open /M230 CDFEDT / Back to our field. MQL / WPFILS wants file # in MQ. CIFFIO;FILEIO;XDSKIN / Open input file. /d229 SPA;NOP;CLA / ... SZA CLA / Skip if file was opened /A229 AC7777 / ERROR - file could not be opened /A229 PPORET, IAC / AC=1 if open ok, =0 if failed /A229 DCA OPNFIL / Save file open flag /A229 TAD OPNFIL / See if file(s) opened ok /A229 SNA CLA / Skip if open sucessful /A229 JMP INITXT / else just return /A229 CDFSYS / Save start time. /M229 TAD I (CLOCK+3) / (minutes), MQL / save in MQ. TAD I (CLOCK+4) / (hours), CDFEDT / Save these for the editor. DCA OLDHR / ... MQA / get minutes back. DCA OLDMIN / .... AC0001 / Set ECHO flag so that we keep screen uptodate. DCA ECHFLG / ... JMS CLRULR / Finally, initialize the ruler area. JMS COPRUL / and copy default ruler in. JMS LODCHR / Get 1st character of file. JMP INITRL / Insert initial ruler if file is empty. TAD (-ECSTRL) / Is the 1st character "start of ruler"? SNA CLA / Skip if no. Insert default ruler. JMP INITDN / 1st char is "start of ruler" so exit. INITRL, CDFEDT / ... JMS RLGETS / Get default ruler (ruler 0). JMS INSRUL / Insert it. TAD (ECRMFL) / Insert "ruler modified" flag. JMS INSRL1 / ... TAD LINE23 / Reset CURPTR to start of newly inserted ruler. DCA CURPTR / ... INITDN, JMS CLSSET / Init ptrs to that 1st time FXSCRL is called, / CLRSCN gets called. INITXT, XX / Back to Speller. /d229 ISZ OPNFIL / Say that file is now open. JMP I INITSP / Return to caller. PPOPEN, CDFMYF /DONT FORGET WHERE YOU ARE /A214 CIFMTH /FLD 6 IS FOR FOOTING BESIDES MATH/SPEL /A214 JMS I (BUFEND) /AIMING FOR 6000 /A214 JMP PPORET /RETURN IN LINE AFTER OPENS /A214 /*************************************************************************** /**** C A U T I O N **** /**** THIS OVERLAY PAGE IS USED BY DECSPELL AND MUST RESIDE HERE **** /*************************************************************************** ZAP, XX / routine to zero out a portion of memory. DCA T1 / Save negative count. ZAP1, DCA I X0 / Zero out next location. ISZ T1 / ++++ JMP .-2 JMP I ZAP / Return when done. OPNFIL, 0 / 0 UNTIL FILE HAS BEEN OPENED X=. / FIRST FREE LOCATION ON PAGE /--------------------- PAGE /*************************************************************************** /**** C A U T I O N **** /**** THIS OVERLAY PAGE IS USED BY DECSPELL AND MUST RESIDE HERE **** /*************************************************************************** GETCH, XX / entry point. CDFBUF / Map data field to buffer field. CURMOV / ... SKP / Handle EOF condition below. JMS LODCHR / Get character to check. SKP / non-skip return if E-O-F. ISZ GETCH / skip return if not E-O-F. CDISPL / Return CIF CDF to spell checker field. JMP I GETCH / return to caller. CLOSEF, XX / This routine closes the correct file. RDF / Get caller's field. TAD CIDF0 / Make return CDI instruction. DCA CLOSEX / Save for the return trip. CDFEDT / Map our field. JMS SAVLMD / Save line modified flag. / SKP CLA / Scan 'til end of text buffer. CLOSE1, AC0001 / ... CHKPTR / .... SMA CLA / Skip if at end of buffer. JMP CLOSE1 / Jmp if not. CLOSE2, AC7777 / Copy from end of the buffer CHKPTR / (1st see if another character) SPA CLA / (skip if yes). JMP CLOSE3 / (Jmp if no. time to exit). TAD I CURPTR / Get last character in buffer. JMS DSKCAL;XPUTET / and put it out to the file. JMP CLOSE2 / Loop until buffer emptied to the file. /*************************************************************************** /**** C A U T I O N **** /**** THIS OVERLAY PAGE IS USED BY DECSPELL AND MUST RESIDE HERE **** /*************************************************************************** CLOSE3, CDFSYS TAD I (CLOCK+3) / ++++ DCA CLSMIN / CURRENT MINUTES TAD I (CLOCK+4) / CURRENT HOUR CDFEDT JMS CVTMIN / ++++ DCA CLSMN2 TAD OLDMIN / ++++ DCA CLSMIN / INITIAL MINUTES TAD OLDHR / INITIAL HOURS JMS CVTMIN CIA TAD CLSMN2 / CURRENT TIME - INITIAL TIME SPA / ++++ TAD (30^74) / IF NEGATIVE, THE CLOCK ROLLED OVER.. / ADD 60 * 24 = MINUTES IN A DAY DCA CLSMN2 TAD (15) / ++++ CIFFIO / ++++ FILEIO / ++++ XHDRGT / GET OLD TOTAL TIME CLL / DONE TO CHECK FOR OVERFLOW IN NEXT ADD TAD CLSMN2 / NEW TOTAL TIME SZL / SKIP IF TIME < 68:15 AC7777 / TIME WAS RESET, SET TO MAX MQL / ++++ TAD (15) CIFFIO / ++++ FILEIO / ++++ XHDRPT / STORE NEW TOTAL TIME TAD CLSMN2 MQL / ++++ TAD (14) CIFFIO / ++++ FILEIO / ++++ XHDRPT / SAVE TIME THIS EDIT TAD WIDNAR / FORCED WIDE? /A223 SNA CLA / /A223 JMP CLOSE4 / JMP IF YES, LEAVE CURRENT SIZES /A223 TAD (30) / Set screen size back to max. DCA SCRNLN / ... JMS CLR132 / Back to 80 col mode. CLOSE4, AC0003 / Clear screen & region. /M223 CIFMNU / ... JMS I (CALLN1) / .... JMS PROMPT / display "filing being completed. MSGF / ... JMS DSKCAL / and close the file. XDSKCL / ... CLOSEX, XX / Map field to return to. JMP I CLOSEF / Return to caller. /*************************************************************************** /**** C A U T I O N **** /**** THIS OVERLAY PAGE IS USED BY DECSPELL AND MUST RESIDE HERE **** /*************************************************************************** CVTMIN, XX / SUBROUTINE TO CONVERT HOURS AND MINUTES TO MINUTES SNA / ++++ JMP CVTMN2 / IF ZERO AC (NO HOURS), JUMP CIA / ++++ DCA CLSHR / CVTMN1 CONTROL CVTMN1, TAD (74) ISZ CLSHR / ++++ JMP CVTMN1 CVTMN2, TAD CLSMIN / ADD MINUTES-FROM-HOURS TO MINUTES JMP I CVTMIN / CLSMN2, 0 / TEMP., ALWAYS CONTAINS MINUTES CLSMIN, 0 / MINUTES FOR CVTMIN CLSHR, 0 / NEG OF HOURS IN CVTMIN /*************************************************************************** /**** C A U T I O N **** /**** THIS OVERLAY PAGE IS USED BY DECSPELL AND MUST RESIDE HERE **** /*************************************************************************** /D222 / PPCALL POST PROCESSOR CALL_A_ROUTINE /A214 X=. / FIRST FREE LOCATION ON PAGE /--------------------- PAGE *7400 / OVERLAY AREA 1 LOCATION OVRNUM= 0 / INITIALIZE OVERLAY ONE COUNTER OVLAY1, OVRNUM / STORE OVERLAY NUMBER AS FIRST LOCATION X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------- PAGE / THIS FIELD IS USED FOR EDITOR MATH AND GO-TO-PAGE FIELD 2 CDFMYF=CDFLP *200 RELOC 6400 / THIS CODE WILL LOAD INTO THE TOP OF FIELD 5... / THIS IS AN EXTENSION OF THE EDITOR RESIDENT... IT CONTAINS THE SUPERKEY / VECTOR TABLE, AND THE COPY ROUTINE... / IT WAS DEVISED IN ORDER TO PREVIDE MORE SPACE IN THE RESIDENT PORTION OF THE / EDITOR FIELD SO THAT THE MATH INTERFACE, AND GOTO PAGE CODE CAN BE RESIDENT DSKBLK=.-6400%400+DL3EDT / DISK BLOCK WHERE PAGE IS LOADED / IF doing a GOTO PAGE request ignore the GOLD-HALT / ELSE process the GOLD-HALT / TEST FIELD 0 HALT FLAG (SET BY TYPING GOLD+HALT) / TAKE 1ST RETURN IF SET, 2ND RETURN IF NOT SET XHLTST, XX CDFEDT / CHANGE TO EDIT FIELD DCA T1 / SAVE AC TAD I (USHLTS) / RETRIEVE CALLER'S ADDRESS DCA XHLTST / MAKE IT RETURN ADDR TAD RPACTIVE / GET GOTO PAGE FLAG SZA CLA / SKIP IF GOTO PAGE NOT ACTIVE JMP RPIGNORE / JUMP TO IGNORE GOLD-HALT CDFMNU / CHANGE TO MENU FIELD TAD I (LINDIF) / PICK UP STATUS CHANGE FLAG SNA CLA / DID THE STATUS CHANGE ? JMP XHLTS1 / NO, SKIP AROUND THE STATUS UPDATE CDFMYF / YES, CHANGE BACK TO THIS FIELD CIFMNU / CHANGE TO MENU FIELD FOR CHECK JMS I (CALLN2) / GO CHECK FOR STATUS VALUE CHANGE XHLTS1, CDFSYS / CHANGE TO SYSTEM FIELD TAD I HLTFLG / PICK UP THE VALUE FOR THE HALT FLAG SNA CLA / IS THE HALT FLAG SET ? RPIGNORE, / GOTO PAGE EXIT POINT ISZ XHLTST / YES, SET UP TO TAKE SKIP RETURN TAD T1 CDIEDT / CHANGE BACK TO EDIT FIELD JMP I XHLTST RPACTIVE, .-. / IF NEG., GOTO PAGE ACTIVE / POS. MEANS NO GOTO PAGE / THIS IS THE ONLY ENTRY 'A105' YOU'LL SEE / BECAUSE IT IS TO SIGNIFY THE CORRECTION OF THIS SUBROUTINE / USED BY GOTO PAGE FOR COMPUTING THE 'CURRENT' PAGE / (SINCE THIS ROUTINE DIDN'T WORK BEFORE IT NOW IS CONSIDERED / NEW CODE) /************************************************** / / START GOTO PAGE FIND CURRENT EDIT PAGE OF ALL DOC. PAGES... / /************************************************* CDFILS= CDF 70 / 'WPFILS' IS IN FIELD 7 / ENTER HERE FROM A JMS WITHIN 'OVMENU' / CALCULATE THE CURRENT PAGE THE USER IS EDITING / AND THE TOTAL NUMBER OF PAGES WITHIN THE DOCUMENT / TO SATISFY THE 'XXX' AND 'YYY' VALUES WITHIN / THE FOLLOWING EDITOR MENU DISPLAY / / 'YOU ARE CURRENTLY EDITING PAGE XXX OF YYY PAGES' / X3 - IS USED AS A TEMPORARY REGISTER (NON AUTO-INDEX MODE) / / X4 - IS USED AS A TEMPORARY HOLDING REGISTER (FOR 'ISZ'S). / RPPMENU,XX / BEGIN COUNTING CURRENT/TOTAL PAGES DCA RPPAC / SAVE THE accumulator AT ENTRY / THE FIRST FEW WORDS OF THE EDIT BUFFER ARE ALWAYS / WORD 1 - 7777 / WORD 2 - 7775 STX (IF REALLY START OF TEXT - ELSE REAL TEXT) / WORD 3 - 0016 START OF RULER (IF WORD 2 IS STX) / WORD 4 - ???? TEXT CDFEDT AC7777 / INITIALIZE FLAG DCA RPSTART / TO SIGNIFY 2ND TIME AT EXT TAD I (CURPTR) / CURRENT LOC. IN EDIT BUFFER DCA RPPCURPTR / START SEARCH BACK FROM HERE CDFLP AC7776 / -2 MEANS GET THE 'PAGE COUNT' JMS RPPCAL / (THAT MEANS THE NUMBER OF PAGES) XRPRD / WITHIN THE 'STX' BUFFER TAD (-1750) /-1000. DCA RPPLSPAGE / START WITH ZERO PAGE COUNT (NEGATIVE NOTATION) DCA RPPMSPAGE /\ JMP .+1 / CALCULATE THE 'CURRENT PAGE' / BY SUMMING THE PAGE COUNT WITHIN EACH DATA DESCRIPTOR WORD / UNTIL THE DATA DESCRIPTOR OFFSET IS EQUAL TO THE OFFSET WITHIN 'SCTOP' / THEN READ EACH CHARACTER OF THE EDIT BUFFER / FOR ANY TYPE OF PAGE MARK / UNTIL THE POSITION WITHIN THE EDIT BUFFER / IS THE SAME AS THE ADDRESS WITHIN 'CURPTR' JMS RPPXMENU DCA RPMNT2 RAL / 0, 1 TAD RPPMSPAGE DCA RPMNT1 / IF THE CONTENTS OF THE ac AT ENTRY IS negative / THEN ALSO SET THE CONTENTS OF / CURPG1 WITH THE CONTENTS OF RPMNT2, AND / CURPG2 WITH THE CONTENTS OF RPMNT1 TAD RPPAC / GET BACK AC AT ENTRY SNA CLA / SKIP NEXT IF not 'GOLD M' JMP RPPMN2 / USER REQUEST FOR 'GOLD M' CDFEDT TAD RPMNT2 DCA I (CURPG1) TAD RPMNT1 DCA I (CURPG2) JMP RPREPL / REPLACE FILE SYS POINTERS, THEN EXIT / CALCULATE THE 'TOTAL PAGE' COUNT OF THE DOCUMENT / BY SUMMING THE PAGE COUNT FROM OUR PRESENT POSITION / WITHIN THE EDIT BUFFER UNTIL 'ETX' / THEN SUMMING THE PAGE COUNT WITHIN EACH REMAINING DATA DESCRIPTOR WORD / UNTIL A [0] TERMINATOR SIGNIFYING OUT OF DESCRIPTOR BLOCKS / OR UNTIL A [-1] TERMINATOR SIGNIFYING LAST DESCRIPTOR WORD RPPMN2, JMS RPPXMENU DCA RPMNT7 RAL / 0, 1 TAD RPPMSPAGE DCA RPMNT6 RPREPL, TAD (-4) / AC => - 4 TO REPLACE FILE SYSTEM POINTERS JMS RPPCAL / TO WHERE THEY WERE AT START OF TOTAL PAGE CALCULATION XRPRD / TO ENABLE RESUMMING THE EDIT CYCLE CDIEDT JMP I RPPMENU / EXIT RPPAC, ZBLOCK 1 / HOLDS THE AC AT ENTRY INTO 'RPPMENU' RPMNT2, ZBLOCK 1 / LOW RPMNT1, ZBLOCK 1 / HIGH RPMNT7, ZBLOCK 1 / LOW RPMNT6, ZBLOCK 1 / HIGH RPPSCTOP, / DATA DESCRIPTOR BLOCK SAME AS WITHIN 'SCTOP' RPPNOGDS, / EXAUSTED ALL DATA DESCRIPTOR BLOCKS RPPXCHARACTER, AC7777 / BACK-UP EDIT BUFFER PTR TAD RPPCURPTR / CURRENT LOC. PTR. SNA / SKIP IF NOT TOP OF BUFFER TAD (5777) / RESUME AT BOTTOM IF AT TOP DCA RPPCURPTR / UPDATE CURRENT LOC. PTR. CDFBUF / EDIT BUFFER FIELD TAD I RPPCURPTR / GET CHAR. FROM EDIT BUFFER CDFLP / BACK TO THIS FIELD TAD (-ECSTX) / TOP OR BOTTOM ID? SNA / SKIP IF NEITHER JMP RPPETX / SEE WHERE WE ARE TAD (ECSTX-ECNWPG) / IS IT NEW PAGE MARK? SZA / SKIP IF PAGE IN BUFFER TAD (ECNWPG-ECPMRK) SZA CLA / SKIP NEXT IF PAGE MARK JMP RPPXCHARACTER / NEITHER TYPE OF PAGE MARK / ANY TYPE OF PAGE MARK WAS FOUND / UPDATE 'RPPLSPAGE' AND 'RPPMSPAGE' AC0001 JMS RPPINCPAGECOUNT / GO ACCOUNT FOR PAGE IN BUFFER JMP RPPXCHARACTER / DO UNTIL STX MARKER FOUND RPSTART, ZBLOCK 1 / INDICATE # OF TIMES AROUND EDIT BUFFER RPPCURPTR, ZBLOCK 1 / OUR CURPTR / EACH CHARACTER FROM THE TOP OF THE EDIT BUFFER / STARTING AT THE ADDRESS WITHIN 'BUFBEG' / UNTIL THE ADDRESS WITHIN 'CURPTR' / HAS BEEN EXAMINED FOR EITHER TYPE OF PAGE MARK / PROGRAM LOCATIONS 'RPPMSPAGE' AND 'RPPLSPAGE' HAVE BEEN UPDATED ACCORDINGLY / BUT IF THE SUM OF THE CONTENTS OF THOSE TWO LOCATIONS IS ZERO / THEN SET 'RPPLSPAGE' EQUIVALENT TO 1 SIGNIFYING PAGE #1 RPPATCURPTR, / AT THE CURRENT POINTER OF THE EDIT BUFFER DCA RPPCURPTR RPPETX, / MAYBE AT TOP OR BOTTOM OF ED. BUF. CDFEDT / EDITOR FIELD TAD I (CURPTR) / ORIG. CURPTR AT START OF SEARCH CDFLP / BACK TO THIS FIELD CIA / FOR COMPARE TO OUR OWN TAD RPPCURPTR / EDIT BUFFER POINTER SNA CLA / SKIP IF BACKED-UP TO STX JMP ETXTST / SEE IF BACKUP TO ETX ATEND, / DONE SEARCHING THRU EDIT BUFFER AC0001 / 'CLL' / TAD (1750) TAD RPPLSPAGE SZA CLL JMP JMPIRPPXMENU / AT EXIT (AC) COULD = 0 AND (L) COULD = 1 / ELSE (AC) IS NOT ZERO AND (L) IS = 0 ETXTST, / ETX RECOGNIZED WITHIN BUFFER TAD RPSTART / IF FLAG IS MINUS SMA CLA / THEN WE STARTED AT ETX MARK JMP ATEND / ELSE, WE WENT THRU ENTIRE BUFFER-DONE DCA RPSTART / ETX WILL BE READ AGAIN, SO GET READY JMP RPPXCHARACTER / 1ST CHAR READ WAS ETX, SO CONTINUE MSG132, TEXT"^A" / MESSAGE USED FOR 132/80 COLOMN MODE SWITCH X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------- PAGE DSKBLK=.-6400%400+DL3EDT / DISK BLOCK WHERE PAGE IS LOADED RPPXMENU, XX RPPXDESCRIPTOR, AC7777 / ... [-1] MEANS... JMS RPPCAL / ... GET A 'RPPGDS' ... XRPRD / ... (DESCRIPTOR) WORD ... DCA RPGDSHOLD / ... AND TEMPORARILY SAVE IT ... / NOTE THAT FOR COS-310 COMPATABILITY / THE CONTENTS OF 'SCTOP' ARE ALWAYS [2] LESS / (WPFILS AUTOMATICALLY ADJUSTS FOR THIS) TAD (CURID-1) / GET ADDRESS OF CURRENT BLK ID MQL / TO SEND IN THE MQ AC7775 / -3 MEANS GET THE CONTENTS JMS RPPCAL / OF PROGRAM LOCATION 'SCTOP' XRPRD / & THE MQ = HEADER EXTENSION NUMBER / / AT THE 'START' OF THE REPOSITIONING REQUEST. PLUS PUT THE / 'CURRENT' VALUE OF SCTOP AND THE HDR EXTN # INTO CURID AND CURTOP... / SWP / INTERCHANGE MQ WITH AC CIA / NEGATE THE HEADER EXTENSION NUMBER TAD CURID / COMPARE IT WITH OUR CURRENT HDR ID SZA CLA / SKIP IF SCTOP IN THIS BLK JMP RPPVALUE / INCLUDE THIS DESC. THEN MQA / GET THE OFFSET INTO THE HEADER INTO THE AC / the contents of the AC contains the contents of program location 'SCTOP' / at start of relative paging request... / CIA TAD CURTOP / CURRENT SCTOP SPA SNA CLA / SKIP IF AT SCTOP JMP RPPVALUE / INCLUDE THIS DESC. THEN JMP RPPSCTOP / JMP TO COUNT THE NUMBER OF PAGES / WITHIN THE EDIT BUFFER STARTING / AT 'BUFBEG' UNTIL THE ADDRESS / WITHIN 'CURPTR' / NOTE: CURID & CURTOP MUST REMAIN TOGETHER & IN THAT ORDER CURID, .-. / CURrent blk ID # CURTOP, .-. / CURrent scTOP pointer RPGDSHOLD,ZBLOCK 1 JMPIRPPXMENU, JMP I RPPXMENU / 'RPPCAL' WAS COPIED AFTER 'DSKCAL' / (BECAUSE A 'JMS DSKCAL' FROM 'FIELD 5') / (WOULD BE AN INSTANT TRIP TO THE FUNNY FARM) RPPCAL, XX CDFLP / THIS DATA FIELD DCA T1 / SAVE AC TAD I RPPCAL / GET VECTOR ISZ RPPCAL DCA .+4 / SAVE VECTOR TAD T1 / GET BACK AC CIFFIO FILEIO .-. / the VECTOR CDFLP JMP I RPPCAL / EXIT RPPVALUE, TAD RPGDSHOLD / GET BACK THE 'DESCRIPTOR' WORD CMA SNA JMP RPPNOGDS / [-1] DESCRIPTOR WORD TERMINATOR FOUND CMA AND (37) / BITS 7-11 IS THE PAGE COUNT JMS RPPINCPAGECOUNT JMP RPPXDESCRIPTOR / SUBROUTINE TO INCREMENT VALUES WITHIN 'RPPLSPAGE' AND 'RPPMSPAGE' / ENTER WITH THE CONTENTS OF THE AC / EQUIVALENT TO THE 'NUMBER OF PAGES' / TO INCREMENT RPPINCPAGECOUNT, XX CLL TAD RPPLSPAGE / CURRENT PAGE + # OF PAGES IN THIS BLOCK SZL ISZ RPPMSPAGE SZL TAD (-1750) DCA RPPLSPAGE / UPDATE CURRENT PAGE NUMBER JMP I RPPINCPAGECOUNT RPPLSPAGE, -1750 /1-1000 / CURRENT PAGE NUMBER (NEGATIVE NOTATION) RPPMSPAGE, 0 / 1000-9000 (POSITIVE NOTATION) /*************************************************** / / END GOTO PAGE FIND CURRENT EDIT PAGE OF ALL DOC. PAGES... / /*************************************************** / / / SUBR RPXHLT PSUEDO-CODE: / / take out GOLD_HALT support for both GTP and GOLD_HALT... /A195 / / Determine if the user has requested a halt via the GOLD:HALT / key during a GOTO PAGE request; / If so, then / RPBOTF := -1; ( turn this into a GOLD:Bottom ) / jump to RPRULE; ( never returns to caller ) / else / ( user did not press GOLD:HALT ) / accumulate # of pages in document so far (in CURPG1); / compare current page # with desired page # ... / exit ... / ( the structure of RPXHLT is fuzzy because it's not / a piece of modular code that performs a distinct / function--it was made into a subroutine merely / as a device to move code to CDFLP. ) / / / CALL: / / CLA / AC MUST = 0 / / DF DOESN'T MATTER / CIFLP / JMS RPXHLT / JMP NXTDES / NOT AT DESIRED PAGE. / / (GO READ NEXT GOTO-PAGE DESCRIPTOR / / WORD AND TRY AGAIN) / / CURPG1= CURRENT PAGE # ACCUMULATED BY / / SCANNING GOTO-PAGE DESCRIPTOR WORDS / ... / AT OR PAST DESIRED PAGE (ACCORDING TO / / COMPARISON OF UNITS, TENS, AND / / HUNDREDS -- STILL NEED TO COMPARE / / THOUSANDS IN CURPG2) / / CURPG1= -# OF PAGE MARKS TO READ, / / STARTING AT CURRENT BLOCK, / / TO REACH DESIRED PAGE. / / AC= DESIRED PAGE # (THOUSANDS) / / = RPBIN2. / ... /RPXRULE,... / 'RPXHLT' JUMPS HERE (TO TAG RPXRULE) / / IF USER PRESSED GOLD:HALT. / / RPXHLT, 0 / MAY BE OVERLAID BELOW IF HALT REQUESTED /D195 CDFSYS / TO SYS FIELD TO /D195 TAD I HLTFLG / GET HALT FLAG /D195 SNA CLA / SKIP IF HALT SELECTED /D195 JMP WOHLTX / JUMP IF HALT NOT SELECTED /D195 CDFLP / BACK TO THIS FIELD /D195 TAD (RPXRULE) / ADDR. TO CONCLUDE GOTO PAGE AT /D195 DCA RPXHLT / NEW RETURN ADDR. /D195 CDFEDT / EDITOR'S DF /D195 AC7777 / AC = > -1 /D195 DCA I (RPBOTF) / SET V2 GOLD BOTTOM REQUEST /D195 JMP WIHLTX / LEAVE AC => 0 ON RETURN / if desired LO page-indication found within this GTP descriptor word / then load contents of 'THOUSANDS' word and resume at / RETURN+1 for furthur HO desired-page testing / else desired page not found so RETURN+0 to resume / by reading the next GTP descriptor word. /A195 WOHLTX, CDFEDT / EDITOR'S DF TAD I (SRCDIR) / PASS ALONG THE CURRENT DESCRIPTOR WORD AND (37) / BITS 7-11 FOR # OF PAGES IN THIS BLOCK TAD I (CURPG1) / CURRENT PAGE # + # OF PAGES IN THIS BLK DCA I (CURPG1) / UPDATE CURRENT PAGE NUMBER TAD I (RPBIN1) / GET DESIRED PAGE # CIA / FOR COMPARE TO TAD I (CURPG1) / ACCUMULATED # OF PAGES FOUND SPA / SKIP IF PAGE IN THIS BLK JMP WIHLTX / RETURN+0 TO RPDESC FOR NEXT DESC. CIA / NEG. REMAINDER OF PAGE-MARKS DCA I (CURPG1) / MAKE A COPY TAD I (SRCDIR) / CURRENT DESC. WORD CONTENTS AND (37) / # OF PAGES ONLY TAD I (CURPG1) / MINUS THOSE BEYOND OUR PAGE CIA / = # OF PAGE-MARKS TO READ TO PAGE DCA I (CURPG1) / SUPPLY FOR NEXT OVERLAY TAD I (RPBIN2) / LOOK AT THE THOUSANDS # ISZ RPXHLT / RETURN+1 TO CONTINUE W/THOUS. WIHLTX, CDIEDT / EDITOR'S DF AND IF JMP I RPXHLT / RETURN: TRYPGE IF NOT HALTED / RPRULE IF HALTED / just reported the page-not-found error. / get set to paint the screen with the last available page / as recorded by the descriptors. RPERRE, CDFEDT / EDITOR DF TAD I (CURPG1) / TOTAL # OF PAGES COUNTED BEFORE -1 DCA I (RPBIN1) / BECOMES THE NEW DESIRED PAGE DCA I (RPBIN2) AC7777 / F.C. TO READ DESC. JMS RPPCAL XRPRD / GTP ENTRY POINT CDFEDT / BACK TO EDITOR DF DCA I (SRCDIR) / SUPPLY NEW DESCRIPTOR WORD TAD I (SRCDIR) / GET A COPY OF IT DCA T1 / TO WORK WITH TAD T1 CMA / -1 FLAGS A V1 DOC. BEING USED FOR THE 1ST TIME SZA CLA / SKIP IF V1 DOC. JMP RPERPG / JUMP IF A PAGE AVAILABLE, MAYBE DCA I (CURPG1) / INDICATE TOP OF DOCUMENT CDIEDT / DF AND IF TO EDITOR TO RESUME EDIT CYCLE JMP RPRULE / GO POSITION TO TOP OF DOC. RPERPG, TAD T1 / GET THE DESCRIPTOR WORD BACK AND (37) / GET ITS' PAGE COUNT IN THIS BLOCK CIA TAD I (CURPG1) / ALREADY COUNTED THEM EARLIER BEFORE -1 FOUND DCA I (CURPG1) / PRETEND NEVER SAW THEM CDIEDT / DF AND IF TO EDITOR TO RESUME EDIT CYCLE JMP TRYPGE / FIND PAGE WITHIN THIS BLOCK /****************************************************** / END OF GOTO PAGE IN FIELD 5 /****************************************************** / PUTLP Routine moved here this edit for space elsewhere /a247 / ROUTINE TO OUTPUT A MESSAGE TO THE SCREEN, ADDRESS OF MESSAGE IS / IN AC ON ENTRY PUTLP, XX DCA PTLP1 / SET UP ADDRESS CIFMNU JMS I IOACAL / CALL I/O ROUTINE 0 / USE DEFAULT OUTPUT ROUTINE PTLP1, XX / ADDRESS OF TEXT STRING TO OUTPUT CDIEDT / SET BACK TO EDITOR FIELD JMP I PUTLP / RETURN / EXERR1 Moved here this edit to gather space together /a247 / EXTRACTNUMBER ERROR HANDLER EXERR1, TAD (EREXTR) / GET ERROR NUMBER JMS RESCURPTR / FIRST RESTORE CURPTR THEN.... JMS EDERR-1 / GO TO ERROR REPORTER. WON'T RETURN SAVTP, .-. / SAVED_TAB_POSITION - HOLDS TAB_POSITION / OF CURRENT DECIMAL TAB FIELD. USED / BY BOTH EDERR AND GETDTF ROUTINES. / MUST FOLLOW JMS TO EDERR-1 X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------- PAGE DSKBLK=.-6400%400+DL3EDT / DISK BLOCK WHERE PAGE IS LOADED / EDITOR MATH CODE GOES HERE / THIS IS EDITOR MATH CODE USED TO EVALUATE THE MATH CONTROL BLOCKS WHILE IN / THE EDITOR. THIS CODE IS ACTIVATED BY THE DISCOVERY OF A CONTROL BLOCK CHAR / IN THE TEXT THAT IS BEING EDITED. / THE FOLLOWING ROUTINE SERVES AS THE ENTRY POINT TO THE EDITOR MATH / CONTROL BLOCK PROCESSING CODE FROM THE EDITOR "SCRLUP" ROUTINE. / EACH TIME A LINE IS SCROLLED UP A CALL IS MADE HERE TO CHECK THE LINE / WHETHER IT IS IN A CONTROL BLOCK AND IF THE CONTROL BLOCK IS MATH. / PROCESSING IS DONE ACCORDINGLY. / **** WARNING ****!! "INCTLB" IS EQUATED TO 7000 WHILE / CKCTRL" IS EQUATED TO 7001 IN M.PA, THEREFORE DO / NOT MOVE "INCTLB" OR "CKCTRL" FROM THEIR PRESENT POSITIONS / UNLESS CHANGING M.PA ALSO INCTLB, 0 /"IN CONTROL BLOCK" FLAG, SET TO 1 IF NOT IN A CONTROL /BLOCK, AND 0 IF IN CTRL BLOCK. THIS FLAG HAS TO STAY /IN THIS POSITION BECAUSE IT IS DEFINED AS SUCH IN /WPF1.PA. THIS IS TO ALLOW IT TO BE INITIALIZED FROM /THE MATH FIELD AT THE SAME TIME THE EDITOR CODE IS /INITIALIZED. REF. "WPEDOV.PA" / ***** CAUTION ***** / CKCTRL ROUTINE IS FILLED WITH CDF AND CIF INSTRUCTIONS. IF YOU / ADD, MODIFY, MOVE, OR DELETE CODE CHECK FIELDS ARE PROPERLY SET! CKCTRL, XX CLA / CLEAR AC /D198; IFDEF UNBUND < /RUN CHECK TO SEE IF UNBUNDLING IS DEFINED AND IF IT IS THEN /SEE IF MATH IS ACTIVATED / *** CAUTION *** / THE HAVMTH ROUTINE RESIDES IN AN AREA OF FIELD 5 THAT IS / SHARED BY LIST PROCESSING AND THE EDITOR. HAVMTH IS NOT / RESIDENT WHEN RUNNING LIST PROCESSING! THUS THE FOLLOWING / TEST MUST FOLLOW THE TEST ABOVE SO THAT IF WE ARE RUNNING / LIST PROCESSING WE WILL NOT CALL HAVMTH AND CRASH! JMS HAVMTH / IF THE MATH FEATURE IS NOT ACTIVATED JMP BKEDIT / THEN JUST RETURN TO THE EDITOR /D198; > / END IFDEF UNBUND / YES: SEE WHAT TYPE OF MATH IS WANTED (I.E. LP OR EDITOR MATH / THIS IS NECESSARY BECAUSE LP ALSO MAKES USE OF THE EDITOR / (SEE NOTES FOR HAVMTH CHECK BELOW BEFORE TOUCHING THIS ROUTINE!!) CDFMTH / SET TO MATH DATA FIELD TAD I (MTHTYP) / GET "MATH TYPE" FLAG SNA CLA / IS IT EDITOR MATH THAT IS WANTED? JMP BKEDIT / NO: THEN JUST RETURN TO LP USE OF THE EDITOR / CHECK FOR ENTERING OR LEAVING A MATH AREA / CHECK TO SEE IF IN BACKUP MODE CDFEDT / GET EDITOR DATA FIELD AC7777 / IF EDMODE = 1 (IN BACKUP MODE) TAD I (EDMODE) SNA CLA JMP BKEDIT / THEN RETURN TO EDITOR / CHECK TO SEE IF "MA" SWITCH IS SET TO "YES" CDFMNU / CHANGE TO MENU DATA FIELD TAD I (MUBUF+MNMATH) / GET "MA" FLAG CDFMYF / RETURN TO THIS DATA FIELD SNA CLA / IS "MA" SET TO "YES"? JMP BKEDIT / NO: RETURN TO EDITOR / YES: CHECK WITH EDITOR TO SEE IF IN SELECT MODE JMS CKSCLT / IF IN SELECT MODE THEN SHUT MATH OFF AND / RETURN TO THE EDITOR DIRECTLY FROM "CKSCLT" CDFMYF AC7777 / OFFSET FOR SETTING OF CURPTR JMS STCURPTR / SET CURPTR FOR READING OF LINE / CHECK TO SEE IF THIS IS A RULER LINE. IF SO DON'T DO MATH. CKCTRT, JMS CKCTR1 / GO SEE IF THE LINE IS A RULER -1 / VALUE TO AND WITH CHARACTER READ -ECSTRL / NEG. VALUE OF CHARACTER TO MATCH / IF MATCH GOTO BKEDI3 FROM CKCTR1 ROUTINE. / IF NO MATCH WE RETURN HERE. / GO RUN CHECK ON PRESENT POSITION RELATIVE TO ANY CONTROL BLOCK JMP CKCTR6 / CHECK CONTROL BLOCK STATUS / IF NOT IN A BLOCK THEN RUN A CHECK TO SEE IF JUST STARTING ONE CKCTR2, JMS CKCTRS / ARE WE JUST STARTING A CONTROL BLOCK? JMP CKCTR3 / NO: RESET FLAG & CHECK EXTRACTION ROUTINE JMS STLOC1 / YES: IS "START CTRL" CHAR ON PREVIOUS LINE? JMP CKCTR4 / YES: GO PROCESS 1ST LINE OF BLOCK CKCTR3, AC0001 / NO: GET ONE IN THE AC DCA INCTLB / SET "IN CTRL BLOCK" FLAG = FALSE JMS MASTTS / IS "MA" SET TO YES, AND ARE WE IN MATH AREA? JMP BKEDI3 / NO: RESET CURPTR & RETURN TO EDITOR JMS CKCTR1 / SEE IF NEW PAGE, PAGE MARKER, START OR END / PRINT CONTROL. 0177 / VALUE TO AND WITH CHAR. READ -ECNWPG / NEG. VALUE OF CHARACTER TO MATCH / IF MATCH GOTO BKEDI3 FROM CKCTR1 ROUTINE. / IF NO MATCH WE RETURN HERE. JMP EXTRACTNUMBER / DO EDITOR MATH ON THIS LINE / THIS IS FIRST TIME CTRL BLOCK IS ACCESSED, SINCE JUST STARTING / BLOCK THEN INITIALIZE VALUES BEFORE START PROCESSING OF BLOCK CKCTR4, DCA MTHCTL / SET "IN MATH CTRL BLOCK" FLAG = FALSE DCA INCTLB / SET "IN CONTROL BLOCK" FLAG = TRUE DCA VALID / SET "VALID LINE FOUND" FLAG = TRUE CDFMTH / CHANGE DATA FIELD REGISTER TO MATH FIELD AC0001 / GET 1 IN THE AC DCA I (MTHSND) / SET EDIT MATH SECOND LINE FLAG = FALSE DCA I (FSTLNE) / SET "CONTROL BLOCK FIRST LINE" FLAG = TRUE CDFLP / RESET TO THIS DATA FIELD SETRTN, CIFMTH / CHANGE PROGRAM CONTROL TO MATH FIELD JMS RTRN1 / INITIALIZE INPUT LINE BUFFER PTR TO START OF BUFFER / SET UP TO PROCESS LATEST SCROLLED UP LINE SCRLLN, AC0001 / NO: CONTINUE PROCESS PRESENT LINE DCA LINEND / SET "LINE END" = FALSE (END SCROLLED LINE NOT FOUND) DCA BGNLNE / SET "START OF NEW SCROLLED LINE" FLAG = TRUE / PUT CHAR FROM SCROLLED UP LINE INTO THE LINEBUFFER PRSCHR, TAD LINEND / GET THE "LINE END" FLAG SNA CLA / IS IT THE END OF THE SCROLLED UP LINE BEING READ IN? JMP CHLINE / YES: GO SEE IF LINE ENDS WITH A HARD RETURN JMS READNEXTCHARACTER JMP BKEDIT / ETX RETURN. TAD CRLMB / CHARACTER = LINE_END? TAD (-ECNWLN) / ADD NEGATIVE OF "NEW LINE" CHAR SZA / IS IT A "NEW LINE" CHAR? TAD (ECNWLN-ECNWPG) / NO: GET "NEW PAGE/PAGE MARKER" CHAR VAL SNA CLA / IS THE CHAR A "NEW PAGE" OR "PAGE MARKER"? DCA LINEND / YES: SET LINE_END = TRUE JMS CHKCH1 / NO: PROCESS CHAR JUST READ IN FROM SCROLLED UP LINE TAD CRWMB / GET CHARACTER READ DCA CHROVR / SAVE IT IN LOCATION AFTER THE CALL TO MATH FLD CIFMTH / SET PROGRAM CONTROL TO MATH FLD JMS RTRN2 / GO PUT INPUT CHAR INTO INPUT LINE BUFFER CHROVR, 0 / CONTAINS INPUT CHAR TO PASS TO "RTRN2" IN MATH FLD JMP EDERR1 / SKIP RTN HERE IF MATH FIELD INPUT LINE / BUFFER OVERFLOW WITHIN THE CONTEXT OF A MATH CONTROL / BLOCK, OR LINES IN THE BLOCK AFTER AN "END" CTRL WORD / THE AC CONTAINS THE PASSED ERROR NUMBER NTMATH, JMP BKEDTX / DOUBLE SKIP RTN HERE FROM "RTRN2" IF INPUT LINE / BUFFER OVERFLOW AND NOT A MATH CONTROL BLOCK. / PROCEED TO IGNORE THE CTRL BLOCK CAUSE NOT MATH JMP PRSCHR / TRIPLE SKIP RETURN HERE FROM "RTRN2" IF INPUT CHAR / PLACED INTO INPUT LINE BUFFER WITHOUT AN OVERFLOW. / GET THE NEXT CHAR TO READ IN / ROUTINE TO CHECK FOR HARD RETURN AT END OF SCROLLED UP LINE CHLINE, TAD CRWMB / GET LAST CHARACTER TAD (-ECNWLN) / ADD TO IT NEGATIVE OF HARD RETURN SZA / WAS THE LAST CHAR ON THE LINE A HARD RETURN JMP NOTVLD / NO: THEN SET "VALID LINE FOUND" = FALSE / AND GO BACK TO EDITOR FOR NEXT SCROLLED LINE DCA VALID / YES: SET "VALID LINE FOUND" = TRUE / AND PROCESS VALID LINE WITHIN CONTROL BLOCK CIFMTH / GO TO MATH FIELD JMS RTRN3 / PROCESS STRING OF CHARS PLACED IN LINEBUFFER JMP SETRT1 / NORMAL RTRN FORM "RTRN3", INIT LINEBUFFER & GO BACK JMP EDERR1 / SKIP RTRN TO PROCESS MATH CTRL BLCK ERR NXMATH, JMP BKEDTX / DOUBLE SKIP RTN TO PROCESS ERROR BUT NOT MATH BLK / IF VALID LINE NOT FOUND NOTVLD, DCA VALID / SET "VALID LINE FOUND" = FALSE JMP BKEDI3 / GO RESTORE CURPTR AND THEN RETURN TO EDITOR SETRT1, CDFMTH / CHANGE TO MATH DATA FIELD TAD I (MTHWRK) / GET "EDITOR MATH WORK AREA" FLAG CDFLP / RETURN TO LP DATA FIELD SZA CLA / ARE WE IN AN EDITOR MATH WORK AREA? JMP SETRT2 / NO: SET UP TO PROCESS NEXT LINE / YES: THEN HAVE TO STOP HERE TO ASK IF IN CTRL BLOCK. / IF "INCTLB" = FALSE THEN MEANS HAVE REACHED END OF A MATH AREA / WHERE THE "1414" END OF BLOCK CHAR HAS TO BE USED AS A LINE / TERMINATOR IN ORDER TO PROCESS PREVIOUS INPUT WHICH REMAINS / AN INVALID LINE UNTIL A VALID TERMINATOR IS FOUND. THE END OF / BLOCK CHAR IS CONVERTED TO A "HARD RETURN" TO MAKE PREVIOUS / LINE VALID. HOWEVER NOW HAVE THE PROBLEM OF HAVING TO PROCESS / THIS LINE AFTER HAVING REACHED THE END OF A MATH BLOCK. THUS / ONE DOES NOT WANT TO SET "IN MATH CTRL BLOCK" FLAG = TRUE IF / THIS IS THE CASE, BECAUSE END OF THE MATH BLOCK HAS BEEN / REACHED AND "MTHCTL" SHOULD BE FALSE. THEREFORE A CHECK IS / PUT IN HERE TO SEE IF THE ABOVE CASE HAS BEEN ENCOUNTERED. / IF SO, THEN THE "MTHCTL" IS SET UP TO BE LEFT FALSE. FOR REF. / SEE "CHKCH1" - CHECK FOR & PROCESS END OF CTRL BLOCK CHAR TAD INCTLB / GET "IN CTRL BLOCK" FLAG SNA CLA / ARE WE STILL IN THE MATH CTRL BLOCK? AC0001 / YES: GET 1 TO SET "MTHCTL" = TRUE DCA MTHCTL / NO: THEN LEAVE IT SET TO FALSE SETRT2, CIFMTH / CHANGE PROGRAM CONTROL TO MATH FIELD JMS RTRN1 / INITIALIZE INPUT LINE BUFFER PTR TO START OF BUFFER / AND RETURN TO EDITOR BKEDI3, JMS RESCURPTR / RESTORE CURPTR BKEDIT, CDIEDT / CDI INSTRUCTION HERE TO RETURN TO EDITOR JMP I CKCTRL / RETURN TO CALLER IN WPEDIT "SCRLUP" ROUTINE X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------- PAGE DSKBLK=.-6400%400+DL3EDT / DISK BLOCK WHERE PAGE IS LOADED / ******** WARNING - "MTHCTL" DEFINED IN M.PA AS AT LOC 7200 ******* / IF "MTHCTL" IS MOVED THEN IT MUST BE REDEFINED IN THAT PREFIX MODULE / IT IS REFERENCED BY "RUNCHK" RTN IN MATH MODULE *7200 MTHCTL, 0 / "IN MATH CTRL BLOCK" FLAG, 0=FALSE, 1=TRUE / ******** WARNING - "RTNMTH" DEFINED IN M.PA AS AT LOC 7201 ****** *7201 RTNMTH, JMP BKEDI3 / ENTRY POINT BACK HERE FROM MATH MODULE, JUMP / HERE FROM "RUNCHK" IN TMATH.PA! GO RESTORE / "CURPTR" BEFORE RETURNING TO THE EDITOR / ***** WARNING ***** "ZROTBL" IS DEFINED IN "M.PA" AS AT 7205 **** / ***** DO NOT MOVE THIS SUBRTN WITHOUT ALSO CHANGING "M.PA" **** / SUBRTN CALLED FROM "SETCTL" RTN IN THE MATH FIELD, IT IS USED TO INITIALIZE / THE "DCHAR" AND "TCHAR" TABLES WHICH HOLD THE POINTERS TO THE VALUES OF THE / ":Dnn" AND ":Tnn" SYMBOLS ENCOUNTERED WHEN PARSING AN EDITOR MATH CTRL BLOCK /++ / ZERO_TABLES / / FUNTIONAL DESCRIPTION: ZROTBL / / THIS ROUTINE IS USED TO ZERO BOTH THE DCHAR AND TCHAR TABLES OR / ONLY THE DCHAR TABLE BASED ON VALUE IN THE AC UPON ENTRY. / / CALLING SEQUENCE: DF MUST = CALLER'S FIELD / CIFLP / JMS ZROTBL / / INPUT PARAMETERS: AC = 0 ---> ZERO BOTH DCHAR AND TCHAR TABLES / AC <> 0 ---> ZERO DCHAR TABLE ONLY / / IMPLICIT INPUT: T1 / OUTPUT PARAMETERS: NONE / IMPLICIT OUTPUT: X5, X4, T1 / COMPLETION CODE: NONE / / SIDE EFFECTS: 1) *CAUTION* - MQ HOLDS FLAG THOUGHOUT ROUTINE. / /-- *7205 ZROTBL, XX MQL / SAVE ENTRY FLAG = 0 - CLR D & TCHAR TABLES / 1 - CLR DCHAR TABLE ONLY RDF / SET UP RETURN CDIF INSTRUCTION TAD CIDF0 DCA ZROTB2 / SAVE IT CDFLP / SET TO FIELD OF DCHAR & TCHAR TABLE TAD (-DCHARL) / SET TABLE LENGTH COUNT DCA T1 TAD (DCHAR-1) / SET DCHAR TABLE ADDRESS DCA X5 TAD (TCHAR-1) / SET TCHAR TABLE ADDRESS DCA X4 ZROTB1, DCA I X5 / CLEAR DCHAR TABLE LOCATION MQA / CLEAR TCHAR TABLE LOCATION? SNA CLA / SKIP IF: NOT DCA I X4 / CLEAR TCHAR TABLE LOCATION ISZ T1 / FINISHED? JMP ZROTB1 / NO - CLEAR NEXT LOCATION ZROTB2, .-. / RETURN CDIF INSTRUCTION JMP I ZROTBL / RETURN / COME HERE TO PROCESS LATEST CHAR READ IN FROM SCROLLED UP LINE CHKCH1, XX / CHECK FOR & PROCESS "END OF CTRL" BLOCK CHAR TAD CRWMB / GET CHARACTER READ WITH MODE BITS TAD (-ECPCT2) / ADD TO IT NEGATIVE OF "END CTRL" CHAR SZA CLA / IS IT THE END OF THE MATH CTRL BLOCK? JMP CKRULE / NO: SKIP DOWN TO CONTINUE TO CHECK CHAR AC0001 / YES: SET THE AC TO 1 DCA INCTLB / SET "IN CONTROL BLOCK" FLAG = FALSE DCA MTHCTL / SET "IN MATH CONTROL BLOCK" FLAG = FALSE CDFMTH / CHANGE TO MATH DATA FIELD TAD I (MTHSND) / GET "SECOND LINE" FLAG CDFMYF / RETURN TO THIS DATA FIELD SMA CLA / WAS AN "END" COMMAND JUST PROCESSED BEFORE / FINDING THIS "END CTRL BLOCK" MARKER? JMP CKVALD / NO: CONTINUE REGULAR PROCESSING CDFMTH / YES: CHANGE TO MATH DATA FIELD AC0001 / GET 1 INTO THE AC DCA I (MTHWRK) / SET TO "NOT START OF MATH WORK AREA" CDFMYF / RETURN TO THIS DATA FIELD CKVALD, TAD VALID / GET VALID LINE FLAG SNA CLA / WAS THE LAST LINE VALID? JMP BKEDI3 / YES: GO RESET "CURPTR" & RETURN TO EDITOR TAD (ECNWLN) / NO: GET "NEW LINE" CHAR DCA CRWMB / REPLACE "END OF BLOCK" CHAR WITH "NEW LINE" CHAR / DONE BECAUSE "LEXIC" RTN WILL NOT HANDLE EOB CHAR / AS A VALID LINE TERMINATOR JMP CNTPR3 / GO SET "START OF LINE" = FALSE & RTRN TO PROCESS LINE / CHECK TO SEE IF THE LINE IS A RULER /CKRULE, TAD SAVCHR / PUT CHAR JUST READ IN INTO THE AC / TAD (-ECSTRL) / ADD TO IT NEGATIVE OF START OF RULER / SNA CLA / IS IT THE START OF A RULER? / JMP BKEDIT / YES: THEN IGNORE PRESENT LINE WITH RULER / / ON IT, GO BACK TO EDITOR & WAIT FOR / / NEXT SCROLLED UP LINE / / NO: THEN CONTINUE TO CHECK FOR OTHER POSSIBILITIES CKRULE, NOP /**** TEMP TO SEE IF NEED RULER CHECK CODE / SCREEN OUT LEADING SPECIAL CHARACTERS IF START OF VALID LINE FSTCHR, TAD VALID / GET "VALID LINE" FLAG SZA CLA / WAS THE LAST LINE VALID? JMP CNTPRS / NO: CONTINUE TO PROCESS CHARACTER TAD BGNLNE / YES: SEE IF START OF SCROLLED LINE SZA CLA / IS IT THE START OF A SCROLLED UP LINE JMP CNTPRS / NO: CONTINUE TO PROCESS CHAR TAD CRLMB / YES: GET CHARACTER TAD (-41) / GET NEGATIVE OF UPPER LIMIT OF SPECIAL CHARACTERS SMA CLA / IS IT A SPECIAL CHAR? JMP CNTPRS / NO: CONTINUE TO PROCESS CHARACTER TAD LINEND / YES: GET "LINE END" FLAG SNA CLA / IS IT THE END OF THE LINE? JMP BKEDI3 / YES: GO BACK TO EDITOR & WAIT FOR NEXT LINE JMP PRSCHR / NO: DUMP CHAR & GO READ IN NEXT CHAR FROM LINE / SCREEN OUT NULLS, JUSTIFIED SPACES & BOTH TYPES OF SOFT RETURNS / FROM ANYWHERE THEY OCCUR IN THE LINE - AS THE CASE MAY PERMIT CNTPRS, TAD CRWMB / GET CHARACTER READ WITH MODE BITS SZA / SKIP IF: CHARACTER = NULL TAD (-ECWWLN) / CHARACTER = SOFT_RETURN? SZA / SKIP IF: SO TAD (ECWWLN-ECJSPC) / CHARACTER = SOFT_SPACE? SZA / SKIP IF: SO TAD (ECJSPC-ECHYLN) / CHARACTER = SOFT_RETURN_WITH_HYPHEN? SNA CLA / SKIP IF: NOT JMP PRSCHR / YES: DUMP IT & GO GET NEXT CHAR FROM LINE / NO: THEN MUST BE A REGULAR CHAR - PROCESS AS SUCH CNTPR3, AC0001 / GET 1 IN THE AC DCA BGNLNE / SET "START OF NEW LINE" FLAG = FALSE CNTPR1, JMP I CHKCH1 / RETURN TO CALLER / THE FOLLLOWING ARE VALUES USED BY THE EDITOR MATH CONTROL BLOCK EVALUATION CODE BGNLNE, 0 / "START OF NEW SCROLLED LINE" FLAG / (NOTE A SCROLLED LINE IS COMPOSED OF THE FIRST LINE / UP FROM THE BOTTOM OF THE SCREEN) LINEND, 0 / 'LINE END" FLAG (I.E. END OF SCROLLED UP LINE) HLDPTR, 0 / HOLDS PTR TO "START" CTRL BLOCK CHAR POSITION PTR VALID, 0 / "VALID LINE FOUND" FLAG, = 0 IF TRUE & NOT 0 IF FALSE / (NOTE A VALID LINE IS COMPOSED OF ANY NUMBER OF / SCROLLED UP LINES THE END OF WHICH IS TERMINATED / BY A HARD RETURN) BKEDT1, AC0001 / SET AC TO 1 DCA INCTLB / SET "IN CONTROL BLOCK" FLAG =FALSE JMP BKEDI3 / RESTORE CURPTR AND THEN RETURN TO EDITOR BKDTX1, JMS SCRINI / IF ERROR FOUND IN BLOCK WHICH IS NOT MATH THAN / REINIT AS IF HAVE BACKED UP IN MATH BLOCK. / THIS SHOULD INSURE TRAPPING OUT ANY POSSIBILITY / OF LEAVING THE MATH MODULE (I.E. THE LINE- / BUFFER, ETC.) IN A WRONG STATE, THUS PRECLUDING / THE CHANGE OF LETTING SUCH THINGS AS A / COMMAND SEQUENCE LIKE "BEG(HR)IN" PASS BY / UNDETECTED BY THE CTRL BLOCK CODE BKEDTX, CLA / CLEAR ANY ERROR NUMBERS PASSED BACK FROM MATH DCA MTHCTL / SET "IN MATH CTRL BLOCK" FLAG = FALSE JMP BKEDI3 / RESTORE CURPTR AND THEN RETURN TO EDITOR / routine backs up the descriptor block list until it finds a ruler, at / which point it JMP's to BACK3 to set up RPMTRL and RPRLHN for the / loading of the ruler. this code is executed on a Gold Bottom request / / enter with RPCUOF pointing at the block that we will start our 10 block / scroll at. must adjust RPCUOF back 1 block before checking for a ruler. BACK1, XX / SAVE CALLERS RETURN ADDRESS BACK2, AC7777 / ADJUST BACK 1 JMS AJUST / ADJUST RPCUOF CDFEDT / FIELD 5 ON RETURN TAD I (RPCUBK) / IDENTIFY WHICH HDR BLK MQL / CONTAINS OUR CURRENT POSITION AC7776 / -2 TAD I (RPCUOF) / OFFSET TO BLK-2 OF OUR CURRENT POSITION JMS RPPCAL / REQUEST SCBOT AND SCTOP BE SET UP XRPRD / ENTRY POINT FOR V2 GOTO PAGE RANDOM BLK READ CDFEDT / FIELD 4 ON RETURN AC7777 / -1 JMS RPPCAL / REQUEST TO READ CURRENT DESCRIPTOR WORD XRPRD / ENTRY POINT CDFEDT / DESCRIPTOR WORD IN AC ON RETURN - FIELD 4 ON RETURN AND (4000) / DOES THE BLK CONTAIN A RULER?? SZA CLA / SKIP IF NO RULER FOUND JMP BACK3 / RULER FOUND JMP BACK2 / GO BACK ANOTHER BLK BACK4, JMP I BACK1 / RETURN.... X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------- PAGE DSKBLK=.-6400%400+DL3EDT / DISK BLOCK WHERE PAGE IS LOADED EDXVEC, / SPECIAL KEYBOARD XFER VECTOR EIPWFL / POWER FAIL DETECTED EIRBCH / RUB CHARACTER EIRBWD / RUB WORD EINWLN / RETURN EIPCMD / GOLD: COMMAND EIPGRF / GOLD: PARAGRAPH MARKER EITAB / TAB /D215 EITABC / GOLD: TAB CENTER EIINTB / GOLD: TAB (INDENT TAB) /A215 EIFILE / GOLD: FILE EIMENU / GOLD: MENU EICONT / GOLD: CONTINUE SEARCH & SELECT EIRBLN / GOLD: RUB LINE EIRBSE / GOLD: RUB SENTENCE EIDLTC / DELETE CHARACTER EIDLTW / DELETE WORD EIWORD / WORD EISENT / SENTENCE EILINE / LINE EITABP / TAB POSITION EIENTR / < > (ENTER KEY) EIPAGE / PAGE EIPARA / PARAGRAPH EIADVN / ADVANCE EIBKUP / BACK-UP EIGADV / GOLD: ADVANCE EIGBKP / GOLD: BACK-UP EIBOLD / BOLD EISLCT / SELECT EIUPPR / UPPER CASE EIUNDL / UNDERLINE EISCUT / CUT EISWAP / SWAP EIPSTE / PASTE EIUDLT / GOLD: DELETE (EITHER CHARACTER OR WORD) EIUBLD / GOLD: BOLD EILOWR / GOLD: UPPERCASE EIUUDL / GOLD: UNDERLINE EIHYPS / HYPHEN PUSH EIHYPL / GOLD: HYPHEN PULL EIHYP1 / GOLD: PRINTING BREAK HYPHEN EIHYP2 / GOLD: INVISIBLE HYPHEN (SHIFT PRINT HYPHEN) EIDEAD / GOLD: DEAD KEY EIDICT / GOLD: ABBREVIATION EIGETC / GOLD: LIBRARY EIDCMT / GOLD: GET DOCUMENT EITOP / GOLD: TOP DOCUMENT EIBOTM / GOLD: BOTTOM DOCUMENT EIFIND / GOLD: SEARCH EISRCH / GOLD: CONTINUE SEARCH EINPAG / GOLD: NEW PAGE EIPMRK / GOLD: PAGE MARKER EIRULR / GOLD: RULER EICENT / GOLD: CENTER EIGCUT / GOLD: CUT EIGPST / GOLD: PASTE EIGPGE / GOLD: PAGE EIREPL / GOLD: REPLACE EISUBS / GOLD: SUBSCRIPT EISUPS / GOLD: SUPERSCRIPT EIVIEW / GOLD: VIEW EITIME / GOLD: DATE & TIME EITC / TECHNICAL CHARACTER EIHELP / HELP COMMAND KEY EIPRSC / PREV SCREEN EINXSC / NEXT SCREEN EIUPAR / UP ARROW EIDNAR / DOWN ARROW IFDEF CONDOR < /M200 IFDEF LFTRGT < EIRARO / RIGHT ARROW EILARO / LEFT ARROW > / END IFDEF LFTRGT IFNDEF LFTRGT < EIBAD EIBAD > / END IFNDEF LFTRGT EIGRAR / GOLD: RIGHT ARROW EIGLAR / GOLD: LEFT ARROW > / END IFDIF CONDOR EIRQSP / GOLD: SPACE (REQUIRED SPACE) IFDEF CONDOR < /A205 EICLKY / COLUMN CUT /A205 > / END IFDEF CONDOR /A205 EIINOV / INSERT-OVERSTRIKE /A254 EDXVLN= .-EDXVEC / THIS IS THE COPY ROUTINE, MODIFIED FOR CROSS-FIELD CALLS... / IT LENDS ITSELF TO BEING MOVED, BECAUSE THE CALL CONTAINS THE / APPROPRIATE CDF INSTRUCTIONS TO MAKE IT UNIVERSAL XFCOPY, XX / JMS COPY - -CNT - CDFA - A-1 - CDF B - B-1 DCA COPTMP TAD I COPTMP DCA T1 / GET CNT TAD COPTMP DCA X0 TAD I X0 DCA COPY1 / CDF A TAD I X0 DCA X1 / A TAD I X0 DCA COPY2 / CDF B TAD I X0 DCA X2 / B RDF TAD CIDF0 / CONSTANT FOR CDF-CIF INSTRUCTION DCA COPXIT COPY1, .-. / CDF TAD I X1 COPY2, .-. / CDF DCA I X2 ISZ T1 JMP COPY1 CDFMYF COPXIT, .-. JMP I X0 / RETURN COPTMP, 0 / TEMP FOR COPY ROUTINE / ROUTINE CALLED FROM SCRLDN ROUTINE IN THE EDITOR, IT IS USED AS /FOLLOWS: / /IF MA=YES & IN MATH AREA / THEN IF IN CONTROL BLOCK / THEN SET "MTHWRK" = FALSE / SET "INCTLB" = FALSE / ELSE RETURN / ENDIF / ELSE RETURN / ENDIF SCRMTH, XX /D198; IFDEF UNBUND < JMS HAVMTH / IF MATH FEATURE NO ACTIVATED JMP SCREX / THEN JUST RETURN TO EDITOR /D198; > / END IFDEF UNBUND CDFEDT / YES: CHANGE TO EDITOR DATA FIELD TAD I (PCTLFL) / GET IN CONTROL BLOCK FLAG CDFMYF / RETURN TO THIS DATA FIELD SMA CLA / ARE WE IN A CONTROL BLOCK? JMP SCREX / NO: JUST RETURN JMS SCRINI / YES: GO SHUT MATH DOWN SCREX, CDIEDT / RETURN TO SCROLL DOWN ROUTINE JMP I SCRMTH / RETURN TO CALLER IN "SCRLDN" /D198; IFDEF UNBUND < / This routine does a skip return if the math feature is activated and / a regular return if not HAVMTH, XX CDFMNU / SET TO MENU DATA FIELD TAD I (MUBUF+MNOPTC) / GET ACTIVE FEATURES CONTROL WORD CDFMYF / RETURN TO DATA THIS FIELD AND (MABIT) / GET ACTIVATED MATH FEATURES CONTROL WORD SZA CLA / IF THE MATH FEATURE IS ACTIVATED ISZ HAVMTH / THEN BUMP THE RETURN ADDRESS JMP I HAVMTH / RETURN TO CALLER /D198; > / END IFDEF UNBUND X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------- PAGE DSKBLK=.-6400%400+DL3EDT / DISK BLOCK WHERE PAGE IS LOADED / THIS ROUTINE WILL EITHER SET OR CLEAR 132 COLUMN MODE / MUST BE CALLED WITH "l-"h IN AC TO CLEAR OR 0 IN AC TO SET / DATA AND INSTRUCTION FIELD MUST BE SET TO LP FIELD (CDILP) AND IT / ALWAYS RETURNS WITH DATA FIELD IN EDITOR FIELD / CAN ONLY BE CALLED FOR EDITOR FIELD LP132, XX TAD ("H+40) / SET UP TO EITHER SET OR CLEAR DCA SETCLR / 132 COLUMN MODE IFNDEF ITALIAN < TAD SETCLR / See if same as last time. CIA / ... TAD SETSAV / .... SNA CLA / skip if not the same. we must do it. JMP LPXIT / same, so exit. > TAD SETCLR / Get new value. DCA SETSAV / save it for next check. CIFMNU JMS I IOACAL / CALL I/O ROUTINE 0 / USE DEFAULT OUTPUT ROUTINE MSG132 / ADDRESS OF TEXT STRING TO OUTPUT S132MS / ADDRESS OF STRING ARGUMENT LPXIT, CDIEDT / SET BACK TO EDITOR FIELD JMP I LP132 / RETURN /MSG132, TEXT "^A" / !A MEANS USE FOLLOWING ARGUMENT AS ADDRESS / OF ASCII STRING TO OUTPUT S132MS, ESC / esc "[ / [ "? / ? "3 / 3 SETCLR, 0 / h TO SET OR l TO CLEAR ESC / ESC "[ / [ "? / ? "1 / 1 "H+40 / h 0 / END OF ESCAPE SEQUENCE SETSAV, "L+40 / we start out in 80 col mode. / PUTLP Routine moved this edit to gather space here /a247 / ROUTINE TO OUTPUT A MESSAGE TO THE SCREEN, ADDRESS OF MESSAGE IS / IN AC ON ENTRY /d247 PUTLP, XX /d247 DCA PTLP1 / SET UP ADDRESS /d247 CIFMNU /d247 JMS I IOACAL / CALL I/O ROUTINE /d247 0 / USE DEFAULT OUTPUT ROUTINE /d247 PTLP1, XX / ADDRESS OF TEXT STRING TO OUTPUT /d247 CDIEDT / SET BACK TO EDITOR FIELD /d247 JMP I PUTLP / RETURN / USE IOA !& CALL TO CAPITILIAZE WORDS STXMSG, IFDEF ENGLSH < TEXT " !&TOP " > IFDEF V30NOR < TEXT " !&TOPP " > IFDEF V30SWE < TEXT " !&B\VRJAN " > IFDEF SPANISH < TEXT "&SUPERIOR" > /A255 IFDEF ITALIAN < TEXT "!&INIZIO" > IFDEF FRENCH < TEXT " &HAUT " > IFDEF GERMAN < TEXT " &ANFANG " > IFDEF DUTCH < TEXT " &BEGIN " > IFDEF CANADA < TEXT " &HAUT " > IFDEF NORWAY < TEXT " &TOPP " > IFDEF SWEDSH < TEXT " &TOPP " > IFDEF DANISH < TEXT " &TOP " > PGMSG1, IFDEF ENGLSH < TEXT " !&NEW !&PAGE " > IFDEF V30NOR < TEXT " !&NY !&SIDE " > IFDEF V30SWE < TEXT " !&NY !&SIDA " > IFDEF SPANISH < TEXT "&P\AGINA &NUEVA" > /A255 IFDEF ITALIAN < TEXT "!&NUOVA !&PAGINA" > IFDEF CANADA < TEXT " &NOUV. &PAGE " > IFDEF FRENCH < TEXT " &NOUV. &PAGE " > IFDEF GERMAN < TEXT " &NEUE &SEITE " > IFDEF DUTCH < TEXT " &NIEUWE &PAGINA " > IFDEF NORWAY < TEXT " &NY &SIDE " > IFDEF SWEDSH < TEXT " &NY &SIDA " > IFDEF DANISH < TEXT " &NY &SIDE " > PGMSG2, IFDEF ENGLSH < TEXT " !&PAGE !&MARKER " > IFDEF V30NOR < TEXT " !&SIDEMERKE " > IFDEF V30SWE < TEXT " !&SIDMARKERING " > IFDEF SPANISH < TEXT "&MARCADOR DE &P\AGIN" > /A255 IFDEF ITALIAN < TEXT "!&INDICATORE !&PAGINA" > IFDEF CANADA < TEXT " &CHANG. &PAGE "> IFDEF FRENCH < TEXT " &CHGT &PAGE " > IFDEF GERMAN < TEXT " &SEITEN &MARKE " > IFDEF DUTCH < TEXT " &PAGINA-&MARKERING "> IFDEF NORWAY < TEXT " &SIDEMARKERING " > IFDEF SWEDSH < TEXT " &SIDMARKERING " > IFDEF DANISH < TEXT " &SIDEMARKERING " > PGMSG3, IFDEF ENGLSH < TEXT " !&START !&CONTROL " > IFDEF V30NOR < TEXT " !&KONTROLL !&BEGYNN " > IFDEF V30SWE < TEXT " &START KONTROLL" > IFDEF SPANISH < TEXT "&INICIO &CONTROL" > /A255 IFDEF ITALIAN < TEXT "!&INIZIO !&CONTROLLO" > IFDEF CANADA < TEXT " &CMDE &DEBUT &IMPRESSION " > IFDEF FRENCH < TEXT " &CDE &DEBUT &IMPRESSION " > IFDEF GERMAN < TEXT " &START &DRUCKAUSGABE " > IFDEF DUTCH < TEXT " !&BEGIN !&OPDRACHT " > IFDEF NORWAY < TEXT " &START &UTSKRIFTSKONTROLL " > IFDEF SWEDSH < TEXT " &START &UTSKRIFTSKONTROLL " > IFDEF DANISH < TEXT " &START &UDSKRIFTSKONTROL " > PGMSG4, IFDEF ENGLSH < TEXT " !&END !&CONTROL " > IFDEF V30NOR < TEXT " !&KONTROLL !&SLUTT " > IFDEF V30SWE < TEXT " &SLUTT KONTROLL " > IFDEF SPANISH < TEXT "&FIN &CONTROL" > /A255 IFDEF ITALIAN < TEXT "!&FINE !&CONTROLLO" > IFDEF CANADA < TEXT " &CMDE &FIN &IMPRESSION " > IFDEF FRENCH < TEXT " &CDE &FIN &IMPRESSION " > IFDEF GERMAN < TEXT " &ENDE &DRUCKAUSGABE " > IFDEF DUTCH < TEXT " !&EINDE !&OPDRACHT " > IFDEF NORWAY < TEXT " &SLUTT &UTSKRIFTSKONTROLL " > IFDEF SWEDSH < TEXT " &SLUT &UTSKRIFTSKONTROLL " > IFDEF DANISH < TEXT " &SLUT &UDSKRIFTSKONTROL " > MSGF, IFDEF ENGLSH < TEXT "--!&DOCUMENT !&FILING !&BEING !&COMPLETED--" > IFDEF V30NOR < TEXT "--!&DOKUMENT !&ARKIVERES--" > IFDEF V30SWE < TEXT "--&AVSLUTA--" > IFDEF SPANISH < TEXT "--&SE &HA &COMPLETADO &EL &ARCHIVO &DEL &DOC.--" > /A255 IFDEF ITALIAN < TEXT "--!&ARCHIVIAZIONE !&DOCUMENTO !&IN !&CORSO--" > IFDEF CANADA < TEXT "--&CLASSEMENT &DU &DOCUMENT &EN &COURS--" > IFDEF FRENCH < TEXT "--&CLASSEMENT &DU &DOCUMENT--" > IFDEF DUTCH < TEXT "--!&DOCUMENT !&WORDT !&OPGESLAGEN--" > IFDEF GERMAN < TEXT "--&DATEI &WIRD &ARCHIVIERT--" > IFDEF NORWAY < TEXT "-- &DOKUMENTET &LAGRES --" > IFDEF SWEDSH < TEXT "-- &DOKUMENTET &LAGRAS --" > IFDEF DANISH < TEXT "-- &DOKUMENT &LAGRES --" > /**************************************************************************** / SVNTO8 SeVeN TO eight bit routine. Takes characters from the /a247 / edit buffer using READNEXTCHARACTER and checks for dead /a247 / key sequences representing multinational characters. /a247 / These it converts to eight bits. /a247 /**************************************************************************** SVNTO8, XX / Start of SeVeN TO eight bit convertion/a247 JMS READNEXTCHAR / Read the next character from the buf /a247 JMP EREXIT / If ETX found, exit /a247 TAD DEADKEY / Check for dead key sequence introducer/a247 SNA CLA / Is this a dead key we are reading? /a247 JMP NOT8 / No, just do non-error skip return /a247 JMS READNEXTCHAR / Read the next character from the buf /a247 JMP EREXIT / If ETX found, exit /a247 TAD CRLMB / Get the char without mode bits /a247 TAD (-ECSPC) / Test for multinational identifier /a247 SZA CLA / Is this a space? /a247 JMP NO8NXC / No, therefore skip user dead key /a247 JMS READNEXTCHAR / Read the next character from the buf /a247 JMP EREXIT / If ETX found, exit /a247 JMS READNEXTCHAR / Read the next character from the buf /a247 JMP EREXIT / If ETX found, exit /a247 TAD CRLMB / Get the seven bit representation /a247 TAD (200) / Add the eigth bit /a247 DCA CRLMB / Restore the character /a247 NO8NXC, JMS ADUNIT / Advance a character without reseting /a247 / CRLMB /a247 JMP EREXIT / If ETX, exit /a247 TAD (-ECNDOV) / Check for the end of the dead key /a247 SZA CLA / Is the current character an End Dead? /a247 JMP NO8NXC / No, get the next character /a247 NOT8, DCA DEADKEY / Zero the dead key flag /a247 ISZ SVNTO8 / Skip return if ETX not encountered /a247 EREXIT, JMP I SVNTO8 / Return /a247 X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------- PAGE RELOC RELOC 200 / CODE EXECUTED AT LOCATION 200 IN FIELD 5 DSKBLK=.-200%400+DL4EDT / DISK BLOCK WHERE PAGE IS LOADED / This space is reserved for editor math or any other editor code / that is GUARENTEED NOT TO BE USED WHILE IN LIST PROCESSING / It is loaded into field five (CDFLP) by the editor overlay which / initializes for a normal edit session (as opposed to using the / editor for list processing. / There are 12 pages of code available here. It is limited only by / the location of the BCDASC routine which currently resides at 5400 / therefor this space can be expanded. To change the amount of of code / assembled here (hence the number of blocks allocated on the system / diskette to hold the code) it is only necessary to change the value / of DS4EDT in WPDL.PA. This constant is equal to the number of / blocks of code (2 pages per block) / THE FOLLOWING TABLES ARE USED IN CONJUNCTION WITH THE ":Dnn" and ":Tnn" / SYMBOLS WHICH CAN BE ENTERED INTO THE SYMBOL TABLE WHILE IN EDITOR MATH / THERE IS A ":Dnn" TABLE - "DCHAR", AND A ":Tnn" TABLE - "TCHAR" / THE ENTRY OF THESE SYMBOL NAMES IN THE SYMBOL TABLE IS JOINED BY A / COINCIDENTAL ENTRY OF THE POINTER TO THAT SYMBOL NAME VALUE ( IN THE / SYMBOL TABLE) BEING PUT IN THE APPROPRIATE TABLE HERE. / BOTH DCHAR AND TCHAR AS WELL AS THEIR LENGTHS ARE DEFINED IN WPF1! DCHAR, ZBLOCK DCHARL TCHAR, ZBLOCK TCHARL / CALLED FROM "CKCTRL" RTN CHECKS IF MATH CTRL BLOCK ERR PASSED BACK FROM / MATH MODULE WAS ENCOUNTERED WHILE IN EDITOR MATH WORK AREA. IF IT WAS / NOT THEN THE LINE IS IGNORED, IF IT WAS THEN THE ERROR IS REPORTED AS / AS AN EDITOR MATH ERROR EDERR1, MQL / HOLD ERROR NUMBER CDFMTH / CHANGE TO MATH DATA FIELD TAD I (MTHWRK) / GET "EDITOR MATH WORK AREA" FLAG CDFLP / RETURN TO LP DATA FIELD SZA CLA / ARE WE IN AN EDITOR MATH WORK AREA? JMP BKDTX1 / NO: IGNORE LINE, REINIT & RETURN TO EDIT JMS SCRINI / YES: RE-INIT TO SHUT EDITOR MATH DOWN BECAUSE / AN ERROR WAS ENCOUNTERED IN A MATH CTRL BLOCK MQA / RESTORE ERROR NUMBER TO AC JMS RESCURPTR / RESTORE CURPTR JMP EDERR / GO TO ERROR CODE TO REPORT ERROR / CODE TO RUN CHECK ON PRESENT EDIT MATH CONTROL BLOCK STATUS, CALLED / AS PART OF IN-LINE CODE FROM "CKCTRL" CKCTR6, TAD INCTLB / GET "IN CTRL BLOCK" FLAG SZA CLA / ARE WE ALREADY IN A BLOCK? JMP CKCTR2 / NO: SEE IF JUST STARTING BLOCK TAD MTHCTL / YES: GET "IN MATH CTRL BLOCK" FLAG SZA CLA / ARE WE IN A MATH CTRL BLOCK? JMP SCRLLN / YES: THEN GO PROCESS LINE CDFMTH / NO: THEN CHANGE TO MATH DATA FIELD TAD I (MTHWRK) / GET "EDIT MATH WORK AREA" FLAG CDFLP / RETURN TO LP DATA FIELD SNA CLA / ARE WE IN EDITOR MATH WORK AREA? JMP CKCTRZ / YES: GO SEE IF STILL IN BLOCK CDFMTH / NO: THEN CHANGE TO MATH DATA FIELD TAD I (MTHSND) / GET EDITOR MATH "SECOND LINE" FLAG CDFLP / RETURN TO LP DATA FIELD SZA CLA / IS THE SECOND LINE NEXT TO BE PROCESSED? JMP CKCTRZ / NO: GO SEE IF STILL IN BLOCK JMP SCRLLN / YES: GO PROCESS LINE CKCTRZ, JMS READNEXTCHARACTER / GET 1ST CHAR ON THE LINE NOP / ETX RETURN, SHOULD NEVER HIT HERE TAD CRWMB / PUT CHAR WITH MODE BITS INTO AC TAD (-ECPCT2) / ADD NEGATIVE OF "END CONTROL BLOCK" CHAR SNA CLA / REACHED THE END OF THE NON-MATH CONTROL BLOCK? JMP BKEDT1 / YES: SET "INCTLB"=FALSE & RTRN TO EDITOR JMP BKEDI3 / NO : IGNORE LINE CAUSE NOT EDIT MATH X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------- PAGE DSKBLK=.-200%400+DL4EDT / DISK BLOCK WHERE PAGE IS LOADED / EXTRACTNUMBER ROUTINE ALONG WITH ALL ASSOCIATED SUBROUTIINES ARE / CLASSIFIED AS IN EDIT HISTORY!! / /++ / EXTRACTNUMBER EXTRACT_NUMBER / / FUNTIONAL DESCRIPTION: EXTRACTNUMBER / / EXTRACT_NUMBER ROUTINE PERFORMS THE EXTRACTION OF NUMBERS FROM A LINE / OF TEXT WITHIN A DOCUMENT FOR THE PURPOSE OF PERFORMING EDITOR MATH. / IT ALSO CALLS MATH EXECUTION AND MATH INSERT_DELETE ROUTINES AS NEEDED. / / CALLING SEQUENCE: JMP EXTRACTNUMBER / / INPUT PARAMETERS: AC = 0 / / IMPLICIT INPUT: GLOBAL: MTHWRK, NWDT, MTHTOT, CURPTR, LNEPC, TABFLAGS, / TABPOSITION, CRLMB, CRWMB, DTABCOUNT, T1 / LOCAL: SEIRF / / OUTPUT PARAMETERS: NONE / / IMPLICIT OUTPUT: GLOBAL: DTABCOUNT, LNEPC, CURPTR, T1, LTABPOSITION, / CRWMB / LOCAL: SEIRF, EXTRA4 / / COMPLETION CODE: AC = 0 / / SIDE EFFECTS: 1) IF INSDEL (INSERT_DELETE) ROUTINE IS NOT CALLED / CURPTR IS SET TO VALUE IT WAS ON ENTRY TO / EXTRACTNUMBER ROUTINE. / /-- EXTRACTNUMBER, CDFMTH / ARE WE IN A MATH_WORK AREA? TAD I (MTHWRK) SZA CLA / SKIP IF: SO JMP BKEDI3 / RETURN TO EDITOR - DON'T DO MATH CDFEDT / DOES CURRENT RULER CONTAIN DECIMAL TABS? TAD I (CURUL+NWDT-NWRUL) SNA CLA / SKIP IF: SO JMP BKEDI4 / RETURN TO EDITOR - DON'T DO MATH / CHECK FOR PROPER LINE TERMINATION BEFORE DOING MATH. IF LINE IS NOT / TERMINATED BY HARD RETURN OR CHARACTERS EXCEED RIGHT MARGIN THEN DO / NOT PERFORM MATH ON THIS LINE!! TAD I (CURUL+NWRMAR-NWRUL) / SET LNEPC = -(RIGHT_MARGIN + 1) CDFMYF EXTR15, CMA / ALSO USED SET LNEPC = -1 FROM BELOW DCA LNEPC / SAVE IT EXTRA6, JMS READNEXTCHAR / READ A CHARACTER JMP BKEDI4 / ETX RETURN - SHOULD NEVER READ TAD CRLMB / GET CHARACTER READ TAD (-ECNWLN) / CHAR. = LINE_ENDING CHARACTER? SNA CLA / SKIP IF: NOT JMP EXTR14 / CHECK FOR SPECIAL LINE_END CHAR. ISZ LNEPC / BUMP -RIGHT_MARGIN COUNT JMP EXTRA6 / HAVE NOT EXCEEDED RIGHT MARGIN! TAD CRLMB / CHECK FOR SPACES BEYOND RIGHT MAR. TAD (-ECSPC) SNA CLA / SKIP IF: NOT A SPACE JMP EXTR15 / RESET LNEPC = -1 AND CONTINUE JMP BKEDI4 / RIGHT_MARGIN LIMIT EXCEEDED!! / RETURN TO EDITOR. EXTR14, TAD CRWMB / CHAR. = SPECIAL_LINE_ENDING? / (I.E.:WRAPPED_LINE,PARA._MARK...ETC.) AND (3000) SZA CLA / SKIP IF: NOT - LINE OK TO PROCESS! JMP BKEDI4 / SKIP LINE: RTRN TO EDIT. RESTORE / "TOTAL" FLAG & CURPTR ON THE WAY JMS RESCURPTR / RESTORE OLD CURPTR AC7777 / RESET CURPTR TO PROCESS MATH LINE JMS STCURPTR DCA DTABCOUNT / INITIALIZE DECIMAL_TAB_COUNT CDFMTH / CHECK IF IN MATH TOTAL AREA TAD I (MTHTOT) CDFMYF SZA CLA / SKIP IF: NOT JMP EXTRA7 JMS IDCST / INITIALIZE_DECIMAL_CHARACTER_SYMBOL_TABLE AC0001 / INITIALIZE SKIP_EXECUTION_AND_ / INSERTION_ROUTINE_FLAG = TRUE DCA SEIRF DCA LTABPOSITION / INITIALIZE LAST_TAB_POSITION AC7777 / INIT. LINE_POSITION_COUNTER = LEFT_- / MARGIN - 1 DCA LNEPC EXTRA1, DCA CRWMB / INITIALIZE CHARACTER_READ_WITH_MODE_BITS EXTRA2, JMS READTABORLINEEND/ READ_TAB_OR_LINE_END JMP EXTRA9 / END_OF_LINE , ETX TAD TABFLAGS / IS TAB TYPE = DECIMAL ALIGN TAB? SNA CLA / SKIP IF: SO JMP EXTRA3 TAD DTABCOUNT / ADD DECIMAL_TAB_COUNT + DCHAR TAD (DCHAR) / CHECK TO SEE IF THERES A MATCH IN DCA T1 / DCHAR TABLE FOR THIS POSITION OF THE TAD I T1 / DECIMAL TAB. IF THERE IS IT MEANS / FIELD NEEDED FOR MATH COMPUTATIONS. SNA / SKIP IF: FIELD NEEDED FOR MATH COMPUTATIONS JMP EXTRA1 / NO MATCH - CLEAR CRWMB BEFORE READ NEXT CHAR. DCA EXTRA4 / SAVE POINTER INTO SYMBOL TABLE JMS GETDTF / JMS GET_DECIMAL_TAB_FIELD JMP EXTRA2 / UNDEFINED FIELD RETURN / CONVERT ASCII STRING TO BCD NUMBER EXTRA5, CIFMTH JMS ASCBCD / CALL ASCBCD ROUTINE ENASBF / ADDRESS OF ASCII STRING TO BE CONVERTED EXTRA4, .-. / ADDRESS IN SYMBOL TABLE WHERE BCD / NUMBER WILL BE PLACED SKP / ASCBCD ERROR RETURN (AC = ERROR NUMBER) JMP EXTR11 / NO ERROR - KEEP ON TRUCKIN!! / CHECK IF ERROR CAUSED BY "*UN.DEF*" OR "*OVR.FLO*" STRING BEING SUBMITTED / TO ASCBCD ROUTINE. IF SO THEN SET SKIP_EXECUTION_AND_INSERTION_ROUTINE_FLAG / = FALSE AND LABEL FIELD AS UNDEFINED IN SYMBOL TABLE (EXTR13). CLA CLL JMS CSNF / SEE IF FIELD THAT CAUSED ERROR WAS EITHER / "*UN.DEF*" OR "*OVR.FLO*" STRING JMP EXERR1 / ERROR NOT CAUSED BY EITHER "*UN.DEF*" / OR "*OVR.FLO*" STRING SO REPORT IT! EXTR11, DCA SEIRF / SET SKIP_EXECUTION_AND_INSERTION_ / ROUTINE_FLAG = FALSE JMP EXTRA2 / GET NEXT DECIMAL FIELD / POSITION CURPTR TO CHARACTER - 1 POSITION OF RULER TAB SETTING EXTRA3, TAD TABPOSITION CIA TAD LNEPC DCA TCCNTR / SAVE RESULT IN TEMPORARY_CHARACTER_COUNTER EXTR10, ISZ TCCNTR / INCREMENT COUNTER SKP / COUNT NOT YET EXHAUSTED - KEEP GOING JMP EXTRA1 / CURPTR NOW REPOSITIONED ISZ LNEPC / INCREMENT LINE POSITION COUNTER JMS READNEXTCHARACTER NOP / ETX RETURN - SHOULD NEVER SEE ETX!! JMP EXTR10 EXTRA9, TAD SEIRF / CHECK SKIP_EXECUTION_AND_INSERTION_- / ROUTINE_FLAG SZA CLA / SKIP IF: FALSE JMP BKEDI3 / BACK TO EDITOR, RESTORE CURPTR ON WAY EXTRA8, CIFMTH JMS EXECUTION / DO MATH EXECUTION ROUTINE SZA / WAS AN ERROR RETURNED FROM THE EXECUTION CODE? JMP EDERR / YES: GO PASS ERROR # TO ERROR REPORTING RTN TAD (DCHAR-TCHAR) / NO: SET AC = DCHAR FOR CALL TO INSERTION EXTRA7, TAD (TCHAR) / SET AC = TCHAR FOR CALL TO INSERTION JMS INSDEL / DO MATH INSERTION_DELETION ROUTINE EXTR13, CLA CLL CDFMTH DCA I (MTHTOT) / CLEAR MTHTOT FLAG / DIDN'T BOTHER TO ADJUST FIELD HERE / SINCE BKEDIT DOES FIELD ADJUSTMENTS JMP BKEDIT SEIRF, .-. / SKIP_EXECUTION_AND_INSERTION_ROUTINE_FLAG / 0 = DON'T SKIP / 1 = SKIP DTABCOUNT, .-. / COUNT OF DECIMAL_TABS X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------- PAGE DSKBLK=.-200%400+DL4EDT / DISK BLOCK WHERE PAGE IS LOADED /++ / INITIALIZE_DCHAR_SYMBOL_TABLE / / FUNTIONAL DESCRIPTION: IDCST / / USING THE DCHAR TABLE ENTRYS AS POINTERS INTO THE MATH SYMBOL TABLE / INITIALIZE EACH SYMBOL TABLE FIELD TO UNDEFINED. / / CALLING SEQUENCE: JMS IDCST / / INPUT PARAMETERS: AC = 0 / / IMPLICIT INPUT: T3, X5 / / OUTPUT PARAMETERS: AC = 0 / / IMPLICIT OUTPUT: X5, T3, T2 / / COMPLETION CODE: NONE / SIDE EFFECTS: NONE / /-- / IDCST, XX / INITIALIZE_DECIMAL_CHARACTER_SYMBOL_TABLE TAD (DCHAR-1) / GET STARTING ADDRESS OF DCHAR TABLE - 1 DCA X5 / STORE IT TAD (-DCHARL) / SET COUNTER = -DCHARL - 1 /C236 /D236 CMA DCA T3 / SAVE RESULT FOR COUNTER IDCST1, TAD I X5 / GET NEXT DCHAR TABLE ENTRY /C236 SNA / SKIP IF: CONTAINS POINTER INTO SYM. TABLE JMP IDCST2 / NO POINTER - GO TO NEXT ENTRY /C236 DCA T2 / SAVE POINTER INTO SYM. TABLE AC2000 / SET UNDEF FLAG IN FIRST LOCATION CDFMTH DCA I T2 CDFMYF / DONE /D236 JMP IDCST1 IDCST2, ISZ T3 / PAST END OF DCHAR TABLE? /D236 SKP / NO JMP IDCST1 / NO - INIT. FOR NEXT DCHAR TABLE ENTRY JMP I IDCST / YES - INIT COMPLETE SO RETURN /C236 /++ / GET_DECIMAL_TAB_FIELD / / FUNTIONAL DESCRIPTION: GETDTF / / REMOVE A FIELD OF TEXT THAT HAS BEEN TABBED TO A DECIMAL TAB / RULER SETTING WITHIN A DOCUMENT, CHECKING FOR PROPER ALIGNMENT TO / THE DECIMAL TAB RULER SETTING AS FIELD IS READ. / / CALLING SEQUENCE: JMS GETDTF / / INPUT PARAMETERS: AC = 0 / / IMPLICIT INPUT: GLOBAL: TABPOSITION, LNEPC, TABFLAGS, CRLMB, SAVTP / LOCAL: GETD11, DFDONEF, FLDNE / / OUTPUT PARAMETERS: AC = 0 / / IMPLICIT OUTPUT: GLOBAL: LNEPC, SAVTP / LOCAL: FLDNE, DFDONEF, GETDT1, GETD11, GETDTF / / COMPLETION CODE: 1) RETURN CALLER+1 IF EMPTY FIELD / RETURN CALLER+2 IF FIELD NOT EMPTY AND ALIGNED / TO THE DECIMAL TAB SETTING. / / SIDE EFFECTS: 1) IF AN ERROR CONDITION OCCURS THEN EXIT GETDTF / VIA ERROR HANDLER. / /-- / ENASBF= TOKVAL / EXTRACT_NUMBER_ASCII_STRING_BUFFER ENASBS= MAXTOK / EXTRACT_NUMBER_ASCII_STRING_BUFFER_SIZE GETDTF, XX DCA FLDNE / INITIALIZE FIELD_NOT_EMPTY_FLAG = FALSE DCA DFDONEF / INITIALIZE DECIMAL_FIELD_DONE_FLAG = FALSE TAD (ENASBF-1) / INITIALIZE POINTER TO EXTRACT_NUMBER_ASCII_- / STRING_BUFFER DCA GETDT1 TAD (ENASBS) / INITIALIZE COUNTER FOR OUTPUT BUFFER CIA DCA GETDT2 TAD TABPOSITION / SET SAVED_TAB_POSITON = TAB_POSITION - 1 DCA SAVTP GETDT3, ISZ LNEPC / INCREMENT LINE POSITION COUNTER JMS SVNTO8 / /m247 JMP GETDT9 / ETX RETURN TAD SAVTP / SET FLAG TO SHOW LINE_POINTER_COUNTER / RELATIVE POSITION TO SAVED_TAB_POSITION CIA TAD LNEPC / IF RESULT < 0 - PRE_TAB / = 0 - AT TAB / " " > 0 - POST_TAB DCA GETD11 / SAVE RESULT IN TEMP. TAD GETD11 / LINE_POSITION_COUNTER => SAVED_TABPOSITION? SPA CLA / SKIP IF: SO JMP GETDT8 / LINE_POSITION_COUNTER < SAVED_TABPOSITION AC7777 / CALL FINDTP TO SEARCH FOR TAB FROM / CURRENT LINE POSITION - 1 JMS FINDTP / FIND_TAB_POSITION LNEPC AC4000 / IS LINE_POSITION AT DECIMAL TAB RULER / SETTING? AND TABFLAGS SZA CLA / SKIP IF: NOT JMS IDTABCOUNT / INCREMENT DECIMAL_TAB_COUNT GETDT8, TAD CRLMB / GET CHARACTER_READ_LESS_MODE_BITS TAD (-41) / SPECIAL CHARACTER? SMA / SKIP IF:SO JMP GETDT4 TAD (41-ECSTOV) / CHARACTER_READ_LESS_MODE_BITS = START_- / DEAD_KEY SEQUENCE? SNA / SKIP IF: NOT JMP GETDT4 TAD (ECSTOV-ECTAB) / CHARACTER_READ_LESS_MODE_BITS = TAB? SZA / SKIP IF: SO TAD (ECTAB-ECNWLN) / CHARACTER_READ_LESS_MODE_BITS = LINE_- / ENDING CHARACTER? SNA / SKIP IF: NOT JMP GETDT9 / SET DECIMAL_FIELD_DONE_FLAG = TRUE GETDT7, TAD (ECNWLN-ECSPC) / CHARACTER_READ_LESS_MODE_BITS = SPACE? SZA CLA / SKIP IF: SO JMP GETDT3 / IGNORE AND GET NEXT CHARACTER TAD GETD11 / ARE WE POSITIONED AT TAB? SNA / SKIP IF: NOT JMP EXERR1 / *** ERROR *** SPACE AT TAB POSITION SMA CLA / SKIP IF: POSITIONED PRE_TAB JMP GETDT9 / MUST BE POSITIONED POST_TAB TAD FLDNE / IS THIS A LEADING SPACE? SNA CLA / SKIP IF: NOT JMP GETDT3 / IGNORE IT JMP GETDT6 /d247 GETD12, ISZ DFDONEF / SET DECIMAL_FIELD_DONE_FLAG = TRUE /d247 JMP GETDT6 GETDT4, TAD (41-")+200) / IS CHARACTER = ")"? SZA / SKIP IF: SO /D251 TAD (")-".) / IS CHARACTER = "."? TAD RADCHR / IS CHARACTER = RADIX POINT /A251 SNA CLA / SKIP IF: NOT JMP GETD13 / DON'T CHECK IF LEGAL CHAR. AT TAB_POSITION TAD GETD11 / LINE_POSITION_COUNTER = SAVED_TAB POSITION? SNA CLA / SKIP IF: NOT JMP EXERR1 / *** ERROR *** ILLEGAL CHAR. AT DTP GETD13, ISZ FLDNE / SET FIELD_NOT_EMPTY_FLAG = TRUE GETDT6, /d247 CLA ISZ GETDT2 / BUMP OUTPUT_BUFFER_COUNTER SKP / ROOM IN OUTPUT_BUFFER FOR CHARACTER. GETDT9, ISZ DFDONEF / SET DECIMAL_FIELD_DONE_FLAG = TRUE ISZ GETDT1 / INCREMENT OUTPUT_BUFFER_POINTER TAD DFDONEF / DECIMAL_FIELD_DONE_FLAG = TRUE ? SNA CLA / SKIP IF: SO TAD CRLMB / PUT CHARACTER INTO OUTPUT_BUFFER CDFMTH DCA I GETDT1 CDFMYF TAD DFDONEF / DECIMAL_FIELD_DONE_FLAG = TRUE ? SNA CLA / SKIP IF: SO JMP GETDT3 / BACK FOR THE NEXT CHARACTER TAD FLDNE / CHECK FIELD_NOT_EMPTY_FLAG SZA CLA / SKIP IF: TRUE ISZ GETDTF / BUMP RETURN GETDT5, JMP I GETDTF / RETURN GETDT1, .-. / TEMP. - HOLDS POINTER INTO OUTPUT BUFFER GETDT2, .-. / TEMP. - HOLDS COUNTER FOR OUTPUT BUFFER GETD11, .-. / TEMP. - HOLDS RELATIVE LINE POSITION / INDICATOR FLDNE, .-. / FIELD_NOT_EMPTY_FLAG / 0: FIELD EMPTY / 1: FIELD CONTAINS VALID CHARACTERS DFDONEF, / DECIMAL_FIELD_DONE_FLAG .-. / 0: NOT FINISHED READING DECIMAL FIELD / 1: FINISHED READING DECIMAL FIELD RADCHR, /A251 IFDEF PERDEC< /A251 ")-". / RADIX = . /A251 > /A251 IFDEF COLDEC< /A251 ")-": / RADIX = : /A251 > /A251 IFDEF COMDEC< /A251 ")-", / RADIX = , /A251 > /A251 / EXERR1 moved this edit to gather space in one place /a247 / EXTRACTNUMBER ERROR HANDLER /d247 EXERR1, TAD (EREXTR) / GET ERROR NUMBER /d247 JMS RESCURPTR / FIRST RESTORE CURPTR THEN.... /d247 JMS EDERR-1 / GO TO ERROR REPORTER. WON'T RETURN /d247 SAVTP, .-. / SAVED_TAB_POSITION - HOLDS TAB_POSITION /d247 / OF CURRENT DECIMAL TAB FIELD. USED /d247 / BY BOTH EDERR AND GETDTF ROUTINES. /d247 / MUST FOLLOW JMS TO EDERR-1 / CALFXS Moved here this edit to gather space in one place /a247 / CALLS EDITOR FXSCRL ROUTINE CALFXS, XX CLA / CLEAR AC CDFEDT / IF THE SCREEN LAG COUNT IS NEGATIVE TAD I (SCRLCT) / CDFMYF / SNA CLA / THEN CALL FXSCRL TO UPDATE SCREEN JMP I CALFXS / CIFEDT / SET TO EDITORS INSTRUCTION FIELD JMS CALLAR / ALL PURPOSE ROUTINE TO CALL ANY / EDITOR ROUTINE FXSCRL / ADDRESS OF ROUTINE IN EDITOR CDFBUF / DATA FIELD FOR ROUTINE TO USE JMP I CALFXS / RETURN TO CALLER X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------- PAGE DSKBLK=.-200%400+DL4EDT / DISK BLOCK WHERE PAGE IS LOADED /++ / CHECK_SPECIAL_NUMBER_FIELD CSNF / / FUNTIONAL DESCRIPTION: CSNF / / CHECK IF ASCII STRING CONTAINED WITHIN ENASBF IS EITHER / "*OVR.FLO*" OR "*UN.DEF*". / / CALLING SEQUENCE: JMS CSNF / / INPUT PARAMETERS: AC = 0 / / IMPLICIT INPUT: LOCAL: ASTPTR (X5), ASP (X4), ENASBP (T2) / / OUTPUT PARAMETERS: AC AND MQ = 0 / / IMPLICIT OUTPUT: LOCAL: ASTPTR (X5), ASP (X4), ENASBP (T2), CSNF / / COMPLETION CODE: 1) RETURN CALLER+1 IF NO MATCH / RETURN CALLER+2 IF MATCH / / SIDE EFFECTS: 1) NOTE: ASTPTR=X5, ASP=X4, ENASBP=T2 / 2) OFTEXT AND UDTEXT STRINGS RESIDE IN BCDASC / ROUTINE AND ARE DEFINED IN WPF1. /-- ASTPTR= X5 ASP= X4 ENASBP= T2 CSNF, XX TAD (AST-1) / SET ASCII_STRING_TABLE_POINTER = ASCII_- / STRING_TABLE - 1 DCA ASTPTR CSNF1, TAD I ASTPTR / INCREMENT ASCII_STRING_TABLE_POINTER AND / GET ASCII_STRING_TABLE ENTRY SNA / SKIP IF: NOT END OF TABLE JMP CSNF5 / NO MATCH. DO NONSKIP RETURN DCA ASP / SET ASCII_STRING_POINTER = ASCII_STRING_- / TABLE ENTRY TAD (ENASBF-1) / SET EXTRACT_NUMBER_ASCII_STRING_BUFFER_- / POINTER = EXTRACT_NUMBER_ASCII_BUFFER - 1 DCA ENASBP CSNF2, ISZ ENASBP / INC. EXTRACT_NUMBER_ASCII_STRING_BUFFER_POINTER TAD I ASP / INC. ASCII_STRING_POINTER AND GET CHARACTER SZA / SKIP IF: END OF STRING JMP CSNF4 / GO CHECK FOR MATCH CDFMTH / CHECK IF END OF EXTRACT_NUMBER_ASCII_BUFFER / STRING TAD I ENASBP CDFMYF SZA CLA / SKIP IF: SO - ASCII STRINGS MATCHED!! JMP CSNF1 / NO MATCH - TRY NEXT ASCII STRING ISZ CSNF / INCREMENT RETURN POINTER FOR MATCH RETURN JMP CSNF5 / DO RETURN CSNF4, CIA / DOES CHAR. FROM ASCII STRING MATCH CHAR. / FROM EXTRACT_NUMBER_ASCII_BUFFER? CDFMTH TAD I ENASBP CDFMYF SNA CLA / SKIP IF: NOT JMP CSNF2 / MATCH - SEE IF NEXT CHAR. MATCHES JMP CSNF1 / NO MATCH - GO TRY NEXT ASCII STRING CSNF5, JMP I CSNF / RETURN AST, OFTEXT-1 / ADDRESS OF *OVR.FLO* TEXT - 1 UDTEXT-1 / ADDRESS OF *UN.DEF* TEXT - 1 0 / AST TABLE TERMINATOR /++ / FIND_TAB_POSITION FINDTP / / FUNTIONAL DESCRIPTION: FINDTP / / USING THE LINE POSITION POINTED TO AT CALL+1 PLUS OFFSET IN AC, / FIND THE NEXT TAB SETTING IN THE RULER. STORE ITS CLASS THEN / SET FLAGS TO INDICATE IF IT WAS A DECIMAL ALIGN TAB AND IF LINE / POSITION SPECIFIED UPON CALL DIRECTLY CORRESPONDS TO TAB SETTING / POSITION IN RULER. / / CALLING SEQUENCE: CALL: JMS FINDTP / CALL+1: POINTER TO ADDRESS OF LINE POSITION / / INPUT PARAMETERS: AC = OFFSET TO BE ADDED TO LINE POSITION / / IMPLICIT INPUT: GLOBAL: TABPOSITION, TABFLAGS / LOCAL: FINDT2, T3 / / OUTPUT PARAMETERS: AC = TAB CLASS / MQ = POSITION OF TAB IN RULER / / IMPLICIT OUTPUT: GLOBAL: TABPOSITION, TABFLAGS / LOCAL: FINDT2, T3 / / COMPLETION CODE: NONE / SIDE EFFECTS: NONE / /-- FINDTP, XX DCA T1 / SAVE ENTRY OFFSET TAD I FINDTP / GET ADRESS OF POSITION COUNT DCA T2 / SAVE ADDRESS TAD T1 / RESTORE OFFSET TAD I T2 / ADD POSITION COUNT CIFMNU / GET DECIMAL CLASS AND POSITION /M208 JMS CALSWAP / CALL_A_ROUTINE IN EDITOR SWAP AREA /M208 FNTABSTOP / FIND_NEXT_TAB_STOP ROUTINE CDFEDT / DATA FIELD FOR ROUTINE DCA T3 / STORE TAB CLASS SWP / GET POSITION IN AC DCA TABPOSITION / STORE POSITION DCA TABFLAGS / CLEAR TAB_FLAGS TAD T3 / RESTORE TAB_CLASS TO AC TAD (-3) / CHECK FOR CLASS = DECIMAL TAB SZA CLA / SKIP IF:DECIMAL TAB JMP FINDT3 / NOT DECIMAL TAB ISZ TABFLAGS / SET BIT11 = DECIMAL TAB DETECTED TAD TABPOSITION / GET DECIMAL TAB POSITION CIA TAD I T2 / ADD POSITION COUNT SNA CLA / SKIP IF: DIRECTLY ALIGNED TO DECIMAL / TAB AC4000 / SET BIT1 = CHARACTER DIRECTLY ALIGNED / WITH DECIMAL TAB IN RULER TAD TABFLAGS / ADD CURRENT TAB_FLAGS DCA TABFLAGS / SAVE UPDATED TAB_FLAGS FINDT3, ISZ FINDTP / BUMP RETURN POINTER JMP I FINDTP / RETURN /++ / READ_NEXT_CHARACTER READNEXTCHARACTER / FUNTIONAL DESCRIPTION: READNEXTCHARACTER / / BUMP LINE_POSITION_COUNTER AND READ THE NEXT CHARACTER. / / CALLING SEQUENCE: JMS READNEXTCHARACTER / ETX RETURN / / INPUT PARAMETERS: AC = 0 / / IMPLICIT INPUT: GLOBAL: CRWMB / / OUTPUT PARAMETERS: AC = 0 / / IMPLICIT OUTPUT: GLOBAL: CRWMB, CRLMB / LOCAL: READNEXTCHARACTER / / COMPLETION CODE: 1) ETX CHARACTER RETURN TO CALLER+1. ALL OTHER / CHARACTERS RETURN CALLER+2. / / SIDE EFFECTS: NONE / /-- READNEXTCHARACTER, XX JMS ADUNIT / Advance one unit, returning characters/m247 / from within deadkeys, if required /m247 SKP / ETX RETURN ISZ READNEXTCHARACTER / BUMP RETURN POINTER DCA CRWMB / SAVE CHARACTER_READ_WITH_MODE_BITS TAD CRWMB / Get it back /a247 TAD (-ECSTOV) / Test for the start of a dead key /a247 SNA CLA / Is this a dead key sequence? /a247 ISZ DEADKEY / Yes, tickle the deadkey flag. /a247 TAD CRWMB / GET IT BACK AND P177 / STRIP MODE BITS DCA CRLMB / SAVE CHARACTER_READ_LESS_MODE_BITS JMP I READNEXTCHARACTER / RETURN /++ / READ_TAB_OR_LINE_END READTABORLINEEND / / FUNTIONAL DESCRIPTION: READTABORLINEEND / / THIS SUBROUTINE WILL CONTINUE TO READ CHARACTERS FROM A DOCUMENT / CURRENTLY BEING EDITED UNTIL ONE OF THREE CONDITIONS ARE MET: 1) READING / OF A TAB CHARACTER, 2) READING OF A LINE ENDING CHARACTER, OR 3) ETX / CHARACTER IS ENCOUNTED. IF A TAB IS READ THEN A SKIP RETURN IS MADE / TO THE CALLER. LINE ENDING AND ETX WILL RESULT IN A RETURN TO CALLER+1. / / CALLING SEQUENCE: JMS READTABORLINEEND / LINE_END OR ETX RETURN / TAB RETURN / / INPUT PARAMETERS: AC = 0 / / IMPLICIT INPUT: GLOBAL: LNEPC, CRLMB, TABFLAGS / / OUTPUT PARAMETERS: AC = 0 / / IMPLICIT OUTPUT: LOCAL: LNEPC, READTABORLINEEND / / COMPLETION CODE: 1) RETURN TO CALLER+1 IF LINE_END CHAR. OR ETX CHAR. / WAS ENCOUNTED DURING READ. / 2) RETURN TO CALLER+2 IF TAB CHAR. ENCOUNTED DURING / READ. / / SIDE EFFECTS: 1) LNEPC SET TO CHARACTER POSITION AT RETURN TIME. / 2) A CHECK IS PERFORMED AFTER THE READING OF EACH / CHARACTER TO TEST IF ITS DIRECTLY ALIGNED WITH / A DECIMAL TAB RULER SETTING. IF SO THEN / DTABCOUNT IS INCREMENTED. IF THE CHARACTER / IS AN ECTAB THEN AN ADDITIONAL CALL IS MADE / TO FINDTP SO THAT TABPOSITION, AND TABFLAGS / WILL REFLECT THE RULER SETTING ECTAB IS / ASSOCIATED WITH. / /-- READTABORLINEEND, XX TAD CRWMB / HAS CHARACTER BEEN READ ALREADY? SZA CLA / SKIP IF: SO JMP READT4 / PROCESS CHARACTER READT1, ISZ LNEPC / INCREMENT LINE POSITION COUNTER NOP / ALLOW FOR LNEPC = -1 JMS READNEXTCHARACTER / READ_NEXT_CHARACTER JMP READT2 / ETX RETURN AC7777 / CALL FINDTP TO SEARCH FOR TAB FROM / CURRENT LINE POSITION - 1 JMS FINDTP / FIND_TAB_POSITION LNEPC TAD TABFLAGS / CURRENT POSITION DIRECTLY ALIGNED WITH / A DECIMAL TAB? SPA CLA / SKIP IF: NOT JMS IDTABCOUNT / YES - INCREMENT DECIMAL TAB COUNT READT4, TAD CRLMB / GET CHARACTER_READ_LESS_MODE_BITS TAD (-ECTAB) / IS CHARACTER = TAB? SZA / SKIP IF: SO JMP READT3 ISZ READTABORLINEEND/ INCREMENT RETURN POINTER / ADJUST TABFLAGS AND TABPOSITION FOR THIS TAB JMS FINDTP / CALL FIND_TAB_POSITION LNEPC / LINE_POSITION_COUNTER JMP READT2 READT3, TAD (ECTAB-ECNWLN) / IS CHARACTER = NEW_LINE? SZA CLA / SKIP IF: SO JMP READT1 / NO - GO FOR NEXT CHARACTER READT2, JMP I READTABORLINEEND/ RETURN / SET CURPTR /++ / STCURPTR / / FUNTIONAL DESCRIPTION: SET_CURPTR / / SAVE CURRENT VALUE OF CURPTR. ADD OFFSET IN AC ON ENTRY WITH / CURRENT VALUE OF LINE23 TO PROVIDE NEW CURPTR VALUE. TO RESTORE / OLD CURPTR CALL RESCURPTR ROUTINE. / / CALLING SEQUENCE: JMS STCURPTR / / INPUT PARAMETERS: AC = OFFSET TO BE ADDED TO CURRENT VALUE OF LINE23 / / IMPLICIT INPUT: GLOBAL: CURPTR, LINE23 / / OUTPUT PARAMETERS: AC = 0 / / IMPLICIT OUTPUT: GLOBAL: SAVCP, CURPTR / / COMPLETION CODE: NONE / SIDE EFFECTS: NONE / /-- STCURPTR, XX MQL / HOLD ONTO OFFSET CDFEDT TAD I (CURPTR) / SAVE CURPTR VALUE DCA SAVCP SWP / RESTORE OFFSET AND INITIALIZE POINTER / FOR READING LINE TAD I (LINE23) DCA I (CURPTR) CDFMYF JMP I STCURPTR / RETURN / RESTORE CURPTR RESCURPTR, XX MQL / SAVE VALUE IN AC TAD SAVCP / RESTORE CURPTR CDFEDT DCA I (CURPTR) CDFMYF SWP / RETORE AC JMP I RESCURPTR / RETURN X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------- PAGE DSKBLK=.-200%400+DL4EDT / DISK BLOCK WHERE PAGE IS LOADED / ENTIRE INSDEL ROUTINE /************************************************************************ / / / INSDEL / / / / EDITS MATH TEXT, DELETING PREVIOUS RESULTS & INSERTING / / NEW RESULTS AFTER HAVING DETERMINED THAT THESE FIT / / WITHOUT OVERLAPPING ANY OTHER FIELDS / / / /***********************************************************************/ / This routine is divided into four phases: scanning a line of text / preparing tables about the contents of the line, comparing the space / available on the line to the requirements determined by the results / to be inserted into the line, deleting any text in result fields from / previous passes, and inserting math results which are known to fit / into the slots which have been prepared for them. /***********************************************************************/ / / / PHASE 1 SCAN TEXT LINE PREPARING TABLE FLDDIM / / / /***********************************************************************/ / NUMEROUS CORRECTIONS AND REARRANGING OF CODE WERE MADE AS / PART OF THE INITIAL DEBUGGING OF INSDEL. THESE ARE TOO NUMEROUS / AND TOO FAR-REACHING TO BE WORTH LISTING INDIVIDUALLY. INSDEL, XX DCA DTABPR / SAVE DCHAR OR TCHAR POINTER JMS CLRZER / CLEAR TABLE AREAS FLDDIM -5^MXTABS+3 DCA FLDCNT / CLEAR FIELD COUNT TAD (FLDDIM) / INITIALIZE TABLE POINTER DCA REG1 JMS EDITINIT / INITIALIZE EDIT CURSOR POINTER DCA CHARCNT / OTHER VALUES DCA BEGFLD / LEFT BOUNDARY OF A FIELD DCA ENDFLD / RIGHT BOUNDARY OF A FIELD IAC DCA PCP / CURRENT COLUMN POSITION OF LINE DCA XPCP / EXTRA SPACES, SOFT (OR BETWEEN FLDS) DCA DTABN / COUNT OF DEC. TAB POSITIONS DCA FLAGS / THESE VALUES RETURNED BY GETTAB ISZ FLDCNT / DETERMINE CASE PH14, JMS NXCASE / GET NEXT CODE & RETURN ACCORDING TO CASE JMP PH15 / ALPHANUMERIC JMP PH141 / SPACE JMP PH17 / NEW LINE JMP PH16 / TAB JMP PH17 / OWN CODE JMP PH15 / DEAD KEY / CASE: SPACE OR SOFT SPACE PH141, TAD FLAGS / IF DTAB RESULT FIELD SMA CLA JMP PH142 TAD CHARCNT / THEN IF FIELD.CHAR.COUNT # 0 SNA CLA JMP PH142 TAD PCP / END PREVIOUS FIELD DCA ENDFLD JMS FLDSTRT / START NEW FIELD WITHOUT TAB. DCA FLAGS / CLEAR FLAGS & TABPCP,SINCE DCA TABPCP / NEW FIELD DOES NOT CORRESPOND DCA CHARCNT / TO ANY TAB POSITION. ISZ PCP / EXTRA INCR AFTER ALPHANUMERICS PH142, ISZ XPCP / INCR EXTRA SPACE COUNTER JMP PH14 / CASE: ALPHANUMERIC PH15, JMS INSEXTR / PCP=PCP+XPCP I.E. ADD EXTRA SPACES TO PCP DCA XPCP / CLEAR EXTRA SPACES COUNTER TAD CHARCNT / FIND OUT IF THIS ALPHANUMERIC BEGINS A FIELD SZA CLA JMP PH151 TAD PCP DCA BEGFLD / SET NEW BEGINNING OF FIELD SKP PH151, ISZ PCP / INCR PRINT CHARACTER POSITION ISZ CHARCNT / INCR CHAR. COUNT JMP PH14 / CASE: TAB CODE PH16, TAD CHARCNT / IF FIELD.CHAR.COUNT = 0 SZA CLA JMP PH161 JMS INSEXTR / PCP=PCP+XPCP I.E. ADD EXTRA SPACES TO PCP DCA XPCP TAD PCP / SET FIELD BEGINNING ADDRESS DCA BEGFLD AC7777 TAD FLDCNT / IF BEGINNING OF LINE, THEN DO NOT START SNA CLA / A FIELD ON A BLANK TAB JMP PH162 PH161, AC2000 / IF RIGHT-JUSTIFIED FIELD, THEN AND TABPCP / DO NOT ELIMINATE ANY TRAILING SZA CLA / SPACES. TAD XPCP TAD PCP / COMPLETE PREVIOUS FLDDIM ENTRY DCA ENDFLD JMS FLDSTRT / AND START NEXT ONE JMS INSEXTR / PCP=PCP+XPCP I.E. ADD EXTRA SPACES TO PCP TAD XPCP / CHECK FOR ZONE TO SWEEP AFTER! LAST FIELD SNA CLA /C236 JMP PH162 JMP PH162 / *** T E M P O R A R Y F I X FOR MATH BUG /A236 / *** DISABLE SWEEPING ZONE FOR TABS BECAUSE /A236 / *** IT DOES NOT WORK RIGHT AND CAN CAUSE A /A236 / *** SYSTEM HALT FROM RECURSIVE CALLS TO REJUST/A236 TAD PCP / YES! SWEEP THIS ZONE FOR TABS. IAC / BUMP END COUNT BY ONE /C236 MQL / IT BEGINS AT END OF LAST FIELD & TAD ENDFLD / ENDS AFTER EXTRA SPACES FOLLOWING JMS TABCHK / THIS FIELD. PH162, DCA XPCP ISZ PCP / INCREMENT POSITION COUNTER TAD PCP / GET NEXT TAB POSITION TO BEGIN FIELD JMS GETTAB SZA ISZ DTABN / COUNT DTAB POSITION, IF ANY DCA FLAGS / THESE VALUES RETURNED BY GETTAB ACL DCA TABPCP TAD CHARCNT / IF FIELD IS BLANK SZA CLA / THEN DO NOT DO EXTRA INCREMENT ISZ PCP / OF PCP. EXTRA IS REQUIRED SINCE ISZ FLDCNT / FIRST ALPHANUMERIC OF EACH FIELD DCA CHARCNT / IS NOT COUNTED IN ORDER TO RETARD JMP PH14 / PCP. / CASE: CR OR WORD-WRAP CODE PH17, AC2000 / IF RIGHT-JUSTIFIED FIELD, THEN AND TABPCP / DO NOT ELIMINATE ANY TRAILING SZA CLA / SPACES. TAD XPCP TAD PCP / UPDATE POSITION, PCP DCA PCP JMS INSFEND / GO END CURRENT FIELD, IF ANY AC7777 TAD RIGHTM / SAVE RIGHT MARGIN IN MQ FOR TAB CHECK BELOW MQL AC2000 / THEN IF LINE ENDS WITH A WORD-WRAP AND CRWMB SNA CLA JMP PH171 TAD ENDFLD IAC / THEN SET ABSOLUTE MARGIN AT SKP / THE END OF THAT FIELD PH171, TAD RIGHTM / SET ABSOLUTE MARGIN=RIGHT MARGIN DCA ABSOLM TAD ENDFLD / CREATE ENTRIES IN FLDDIM FOR ALL TAB IAC JMS TABCHK / POINTS TO THE RIGHT OF THE CR JMP PHASE2 X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------- PAGE DSKBLK=.-200%400+DL4EDT / DISK BLOCK WHERE PAGE IS LOADED /***********************************************************************/ / / /PHASE 2 DETERMINE IF RESULTS FIT INTO AVAILABLE SPACE / / / /***********************************************************************/ / Phase 2 matches the entries in FLDDIM is order to assure that there / are no overlaps. The ending location of each field is matched against / the beginning location of the next field. The latter must always be / a greater number if there is no overlapping. If two fields do overlap, / then the program will determine if one or both of the fields are / result fields and take an error exit appropriate to the case. PHASE2, DCA REG4 / CLEAR REG4 SO THAT FIRST MATCH WORKS TAD (FLDDIM-5) / INITIALIZE LIST POINTER DCA REG1 PH21, JMS GETFLDS / GET NEXT ENTRY FROM FLDDIM TO MATCH AGAINST NEWCON JMP PHASE3 / END LIST RETURN, EXIT TO NEXT PHASE JMS INSBLANK / CHECK FOR TAB-ONLY ENTRY CLA /A236 /D236 AC7777 / NOT TAB-ONLY RETURN: DECR BEGFLD TAD BEGFLD / TAB-ONLY RETURN SPA SNA / DO NOT LET BEGFLD BECOME <= 0 IAC DCA BEGFLD / SAVE RETURNED LEFT BOUNDARY TAD REG4 / MATCH RIGHT BOUNDARY OF PREVIOUS FIELD CIA / AGAINST LEFT BOUNDARY OF UPCOMING TAD BEGFLD / FIELD SPA SNA CLA / RIGHT BOUNDARY MUST BE GREATER, JMP FLDERR / OTHERWISE, ERROR JMS SETFEND / ESTABLISH END OF THIS FIELD FOR NXT LOOP AC7777 / TAB-ONLY RETURN-DECR ENDFLD TAD ENDFLD / AND STORE VALUE IN REG4 DCA REG4 TAD ENDFLD / CHECK CURRENT ENDFLD AGAINST LINE END CIA TAD ABSOLM / DO NOT EXCEED ABSOLUTE END OF LINE SPA CLA JMP FLDERR JMP PH21 /***********************************************************************/ / ERROR EXIT / /***********************************************************************/ FLDERR, JMS RESCURPTR / RESET CURSOR TO VALUE PRIOR TO MATH TAD (FLDER1) / SETUP POINTER TO STORE ERROR DATA IN DCA REG3 / CALLING SEQUENCE DCA FLDER2 DCA FLDER4 TAD (-5) / GET POINTER TO PREVIOUS ITEM IN FLDDIM TAD REG1 DCA REG2 / AND PUT IT INTO REG2 TAD REG2 / MAKE SURE DO NOT BACK UP BEYOND TABLE TAD (-FLDDIM) / BEGINNING SPA CLA JMP FLDERA TAD I REG2 SMA / WAS THE PREVIOUS FIELD A RESULT FIELD? JMP FLDERA JMS GETRES / GET BCD RESULT POINTER DCA FLDER3 / AND PUT IT INTO CALLING SEQ. ISZ REG2 AC7777 TAD I REG2 / GET TAB PCP & PUT THIS AND P377 / INTO CALLING SEQ. DCA FLDER1 ISZ REG3 FLDERA, CLA TAD I REG1 / IS THE CURRENT FIELD A RESULT FIELD? SMA JMP FLDERB / IF YES, THEN JMS GETRES / AND PUT IT INTO CALLING SEQ. MQL ISZ REG1 / GET TAB PCP & PUT THIS AC7777 TAD I REG1 / INTO CALLING SEQ. AND P377 DCA I REG3 ACL / RECOVER SAVED POINTER ISZ REG3 / INCR TO NEXT SLOT ISZ REG3 DCA I REG3 / PUT POINTER INTO PARAM LIST FLDERB, CLA TAD REG3 / SET ERROR CODE TO ERNOSP IF ONLY ONE TAD (-FLDER3) / RESULT FIELD TO BE DISPLAYED SPA SNA CLA / OR TO ERNSP2 IF TWO RESULT JMP FLDERC / FIELDS TO BE DISPLAYED. TAD (ERNSP2) SKP FLDERC, TAD (ERNOSP) JMS EDERR-1 / EXIT TO ERROR WITH ERNOSP ERROR CODE FLDER1, XX / PCP OF DTAB OF 1ST OVERLAPPING FIELD FLDER2, XX / 0 OR PCP OF DTAB OF 2ND OVERLAPPING FIELD FLDER3, XX / POINTER TO BCD RESULTS, CONTENTS OF 1ST FIELD FLDER4, XX / 0 OR PTR TO BCD RESULTS, CONTENTS OF 2ND FIELD / NOTE: NO RETURN IS MADE FROM ABOVE "JMS" WHEN ERROR IS CALLED!!! / "JMS" WAS USED INSTEAD OF "JMP" IN ORDER TO PASS ADDRESS OF THE / PCP'S & POINTERS. /************************************************************************/ / NORMAL (NON-ERROR) EXIT / /************************************************************************/ INSEXIT,JMS CALREJ / CALLED EDITOR REJUSTIFY ROUTINE TAD INSDEL / SET UP TO EXIT DCA T1 JMP I T1 / EXIT /******************************SUBROUTINE*******************************/ / This routine will set up and call the editor rejustify routine CALREJ, XX CDFEDT AC7777 DCA I (REJFLG) / SET EDITOR REJUSTIFY CONDITION CDFMYF CIFEDT JMS CALLAR / CALL EDITOR REJUSTIFY REJUST / ADDRESS OF ROUTINE IN EDITOR CDFBUF / DATA FIELD FOR REJUST TO USE CLA CLL JMP I CALREJ / RETURN TO CALLER /******************************SUBROUTINE*******************************/ / ROUTINE USED BY PHASE1 (SCAN OF DATA) TO DETERMINE THE CONDITIONS AT THE / END OF TEXT LINE (FINDING CR) INSFEND,XX TAD CHARCNT / IF FIELD.CHAR.COUNT # 0 SNA CLA JMP INSF1 TAD PCP / THEN COMPLETE FLDDIM ENTRY JMP INSF2 INSF1, AC7777 / IF 0, THEN LOOK FOR EMPTY LINE TAD FLDCNT / I.E. CR ONLY SNA CLA JMP I INSFEND / IF SO, THEN EXIT TAD TABPCP / ELSE CREATE BLANK TAB ENTRY AND P377 DCA BEGFLD / SET BEGFLD=ENDFLD=TABPCP TAD BEGFLD INSF2, DCA ENDFLD JMS FLDSTRT / UNDATE FLDDIM TABLE JMP I INSFEND /******************************SUBROUTINE*******************************/ X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------- PAGE DSKBLK=.-200%400+DL4EDT / DISK BLOCK WHERE PAGE IS LOADED /***********************************************************************/ / / / PHASE 3 DELETE ANY TEXT FOUND IN RESULT FIELDS / / / /***********************************************************************/ PHASE3, JMS EDITINIT / INITIALIZE EDIT CURSOR POINTER TAD (FLDDIM-5) / INITIALIZE TABLE TWO POINTER & DCA REG1 / COL.POSITION COUNTER IAC / INITIALIZE PCP TO 1 DCA PCP DCA REG3 / CLEAR TAB FLAG PH31, JMS GETFLDS / GET NEXT ENTRY: FLAGS TABPCP BEGFLD ENDFLD OLDCON NOP / DO NOT EXIT UNTIL LINE END CODE FOUND / DETERMINE CASE PH32, JMS NXCASE / GET NEXT CODE & RETURN ACCORDING TO CASE JMP PH321 / ALPHANUMERIC JMP PH322 / SPACE JMP PH324 / NEW LINE JMP PH323 / TAB JMP PH323 / OWN CODE JMP PH321 / DEAD KEY / CASE: ALPHANUMERIC PH321, TAD BEGFLD / TEST FOR POSITION ON LINE CIA / EITHER STARTING A NEW FIELD TAD PCP / OR CONTINUING A FIELD SMA SZA CLA JMP PH3211 TAD REG3 / STARTING A FIELD - CHECK FOR TAB SZA CLA JMP PH3210 TAD (ECMTH1+400) / IF THERE IS NO TAB, THEN INSERT JMS INSFORCE / OWN FIELD MARKER JMP PH3212 PH3210, TAD FLAGS / CHECK FOR PREVIOUS RESULT FIELD SMA CLA JMP PH3212 JMS DELCODE / DELETE CODE FROM EDIT BUFFER ACL / GET ATTRIBUTES SAVED BY DELCODE AND (MASKATTR) MQL / SAVE ATTRIBUTES IN MQ TAD I REG1 / GET PRESENT VALUE FROM FLDDIM MQA / & "OR" ATTRIBUTES DCA I REG1 / THEN RESTORE INTO FLDDIM. PH3211, TAD FLAGS / CHECK RESULT FIELD (DELETION) SPA CLA JMS DELCODE / YES, DELETE THIS CHARACTER PH3212, DCA REG3 / CONTINUING A FIELD - CLEAR TAB COUNTER & TAD ENDFLD / CHECK FOR POSITION ON LINE CIA / EITHER ENDING FIELD TAD PCP / OR CONTINUING A FIELD ISZ PCP / INCR POSITION ON LINE SPA CLA JMP PH32 / CONTINUING FIELD - GET NEXT CODE JMP PH31 / ENDING A FIELD - GET NEXT FIELD ENTRY / CASE: SPACE OR SOFT SPACE PH322, TAD BEGFLD / TEST FOR POSITION ON LINE CIA / EITHER LESS THAN BEGINNING A FIELD TAD PCP / OR GREATER THAN ENDING A FIELD SPA SNA CLA / OR WITHIN A FIELD: JMP PH3221 / IN EITHER OF THE FIRST TAD ENDFLD / TWO CASES - DELETE THE CIA / SPACE, OTHERWISE, TAD PCP / CONTINUE SPA SNA CLA JMP PH3222 PH3221, ISZ PCP / INCR POSITION ON LINE TAD CRWMB / IF OUTSIDE A FIELD, THEN AND (400) / DELETE SPACE UNLESS UNDERLINED SZA CLA JMP PH32 JMS DELCODE / DELETE CODE FROM EDIT BUFFER JMP PH32 PH3222, TAD ENDFLD / CHECK FOR POSITION ON LINE CIA / EITHER ENDING FIELD TAD PCP / OR CONTINUING A FIELD ISZ PCP / INCR POSITION ON LINE SPA CLA JMP PH32 / CONTINUING FIELD - GET NEXT CODE JMP PH31 / ENDING A FIELD - GET NEXT FIELD ENTRY / CASE: TAB PH323, ISZ REG3 / SET TAB FLAG ISZ PCP / & INCR POSITION ON LINE AC2000 AND FLAGS / CHECK FOR FORCED TAB SZA CLA JMP PH3232 / IF FOUND, THEN GO FORCE IT. JMS INSBLANK / CHECK FOR BLANK FIELD JMP PH32 / NON-BLANK RETURN - CONTINUE PH3231, JMS GETFLDS / ELSE GET NEXT ENTRY & OLDCON / CONTINUE TO CHECK FOR /D236 NOP JMP PH32 PH3232, JMS INSTAB / FORCED-TAB INSERTIONS JMP PH32 / NON-SKIP, DONE JMP PH3231 / SKIP, CONTINUE / CASE: NEW LINE PH324, TAD REG1 / SAVE FLDDIM POINTER DCA SVREG1 PH3241, TAD FLAGS / OTHERWISE, CHECK FOR RESULTS FIELD SPA CLA / THROUGH REST OF LIST JMP PH3242 JMS GETFLDS / GET NEXT ITEM FROM LIST OLDCON JMP PHASE4 / IF END OF LIST IS FOUND, EXIT THIS PHASE JMP PH3241 PH3242, TAD SVREG1 / IF A RESULT, THEN GO INSERT FORCED-TABS DCA REG1 / BEFORE NEW LINE CODE PH3243, JMS INSTAB / INSERT TAB JMP PHASE4 / NON-SKIP, DONE JMS GETFLDS OLDCON JMP PHASE4 JMP PH3243 SVREG1, 0 /****************************SUBROUTINE*********************************/ INSTAB, XX AC2000 / LOOK FOR BIT CALLING FOR FORCED TAB AND FLAGS SNA CLA JMP I INSTAB / NON-SKIP RETURN, DONE TAD (ECTAB) / IF FORCED TAB BIT FOUND JMS INSFORCE / THEN INSERT TAB CODE ISZ INSTAB JMP I INSTAB / SKIP RETURN, CONTINUE /****************************SUBROUTINE*********************************/ X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------- PAGE DSKBLK=.-200%400+DL4EDT / DISK BLOCK WHERE PAGE IS LOADED /***********************************************************************/ / / / PHASE 4 INSERT RESULTS IN ASCII INTO PREPARED FIELDS / / / /***********************************************************************/ PHASE4, JMS EDITINIT / INITIALIZE EDIT CURSOR POINTER TAD (FLDDIM-5) DCA REG1 DCA FLDCNT / CLEAR FIELD COUNTER CDFEDT TAD I (CURUL+NWLMAR-NWRUL) / GET VALUE OF LEFT MARGIN CDFMYF / AND SET PCP DCA PCP / DETERMINE CASE PH41, JMS NXCASE / GET NEXT CODE & RETURN ACCORDING TO CASE JMP PH411 / ALPHANUMERIC JMP PH412 / SPACE JMP PH414 / NEW LINE JMP PH413 / TAB JMP PH415 / OWN CODE JMP PH411 / DEAD KEY / CASE: ALPHANUMERIC PH411, ISZ PCP / INCR POSITION ON LINE JMP PH41 / CASE: SPACE OR SOFT SPACE PH412, ISZ PCP / INCR POSITION ON LINE JMP PH41 / CASE: TAB PH413, JMS GETFLDS / GET FLAGS, TABPCP, BEGFLD, ENDFLD NEWCON JMP INSEXIT / NON-SKIP RETURN, END OF INSERTIONS JMS INSBLANK / CHECK FOR BLANK FIELD SKP / NON-BLANK RETURN JMP PH41 / BLANK - GO GET NEXT CODE TAD BEGFLD / SET PCP=BEGINNING OF FIELD DCA PCP TAD FLAGS / CHECK FOR DTAB RESULT FIELD SMA CLA JMP PH41 TAD FLAGS / GET POINTER TO BCD RESULT JMS GETRES TAD (-1) / OFFSET POINTER RETURNED FROM GETRES DCA PH4131 / AND THEN DO BCD TO ASCII CONVERSION, JMS BCDASC PH4131, XX NUMBUF CDFMYF DCA REG3 DCA I REG3 TAD (NUMBUF) / AND FINALLY TRANSFER ASCII NUMBER DCA REG3 / FROM NUMBUF TO PH4132, TAD I REG3 / INSERTION INTO THE SNA CLA / EDIT BUFFER. JMP PH41 JMS READNEXT / MOVE CURSOR POINTER ONE PLACE RIGHT NOP TAD I REG3 / GET ASCII CODE FROM NUMBUF MQL TAD FLAGS AND (MASKATTR) / GET ATTRIBUTES, SWP / CHARACTER & JMS INSMCH / INSERT INTO EDIT BUFFER. ISZ PCP ISZ REG3 JMP PH4132 / CASE: NEW LINE PH414, JMP INSEXIT / GO TO REJUSTIFY & EXIT / CASE: OWN CODE, I.E. CODE INSERTED TO MARK NON-TAB, NON-DTAB FIELDS PH415, JMS DELCODE / DELETE ECMTH1+400 FIELD MARKER JMS GETFLDS / SET FLAGS TABPCP BEGFLD ENDFLD NEWCON JMP INSEXIT / NON-SKIP RETURN ENDS INSERTION PH4151, TAD BEGFLD / THEN INSERT SPACES, AS CIA / NEEDED TO ARRIVE AT BEGINNING TAD PCP / OF FIELD. SMA CLA JMP PH41 TAD (ECSPC) JMS INSCODE / INSERT SPACE INTO EDIT BUFFER ISZ PCP JMP PH4151 /******************************SUBROUTINE*******************************/ / GET flags tabpcp begfld (new/old dimensions) endfld (new/old dimensions) / FROM THE NEXT ENTRY IN FLDDIM GETFLDS,XX TAD I GETFLDS / GET PARAMETER IDENTIFYING TYPE OF CONTENTS DCA GETF2 ISZ GETFLDS GETF1, TAD REG1 / ADVANCE POINTER TO NEXT ENTRY IN FLDDIM TAD (5) DCA REG1 JMS GETITEM / GET NEXT LEFT & RIGHT BOUNDARIES GETF2, XX / RETURNS END LIST OR AC=LT BOUNDARY JMP I GETFLDS / MQ=RT BOUNDARY SNA JMP GETF1 / GET NEXT ENTRY IF ENTRY IS BLANK. DCA BEGFLD TAD REG1 / GET FLAGS & TAB PCP FROM SAME ENTRY DCA REG2 TAD I REG2 / GET FLAGS DCA FLAGS ISZ REG2 TAD I REG2 / GET TAB PCP DCA TABPCP ACL DCA ENDFLD / GET ENDFLD ISZ FLDCNT / INCR FIELD COUNT ISZ GETFLDS / TAKE SKIP RETURN JMP I GETFLDS /******************************SUBROUTINE*******************************/ / "CKSCLT" CHECKS TO SEE IF IN SELECT MODE AND IF SO THEN SHUTS DOWN / MATH FOR A PARTICULAR WORK AREA WHETHER IN THAT AREA OR NOT. THIS / IS CLEANER THAN TRYING TO DETERMINE IF IN SELECT MODE AND IN EDITOR / MATH WORK AREA ( WHICH MUST INCLUDE SOME WAY TO TELL IF JUST STARTING / ONE BUT NOT CONFIRMED YET, I.E. SELECT MODE HIT AT A "BEGIN" COMMAND), / AND THEN HAVING TO SHUT DOWN MATH ANYWAYS. / / IF IN "SELECT MODE" / | THEN SHUT DOWN MATH IN CASE IN WORK AREA / | RETURN TO EDITOR / | ELSE RETURN TO CALLER TO CONTINUE PROCESSING / CKSCLT, XX CDFEDT / GET EDITOR DATA FIELD TAD I (ESLMOD+1) / GET SELECT MODE FLAG AND I (EDMODE) / AND IT WITH THE EDITOR MODE CDFMYF / RETURN TO THIS DATA FIELD SNA CLA / IS THE EDITOR IN SELECT MODE? JMP I CKSCLT / NO: RETURN TO CALLER TO CONTINUE PROCESSING JMS SCRINI / YES: SHUT MATH DOWN IN CASE SELECT DONE IN / EDITOR MATH WORK AREA JMP BKEDIT / RETURN TO EDITOR X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------- PAGE DSKBLK=.-200%400+DL4EDT / DISK BLOCK WHERE PAGE IS LOADED /***********************************************************************/ / / / PROGRAM SUBROUTINES / / / /***********************************************************************/ /****************************SUBROUTINE*********************************/ / INITIALIZE EDIT CURSOR POINTER TO START OF LINE EDITINIT,XX CDFEDT TAD I (CURUL+NWRMAR-NWRUL) / GET RIGHT MARGIN DCA RIGHTM TAD I (CURUL+NWLMAR-NWRUL) / GET LEFT MARGIN DCA TABPCP / SAVE LEFT MARGIN SETTING AC7777 TAD I (LINE23) / GET POINTER TO BEGINNING OF LINE-1 DCA I (CURPTR) / AND INITIALIZE CURSOR POINTER CDFMYF JMP I EDITINIT /****************************SUBROUTINE*********************************/ / GETS THE NEXT TAB POSITION FROM RULER & RETURNS DATA ABOUT IT: / RETURNS MQ0=1 RIGHT MARGIN AC0=1 RESULT FIELD / MQ1=1 > OR J OR R AC6-11 DTAB NUMBER / MQ4-11 TAB PCP GETTAB, XX TAD (-1) / ADJUST PTR SINCE CURUL COUNTS FROM 0 MQL / RESET RULER POSITION POINTER GT0, ACL / AC=POSITION WITH WHICH TO START SEARCH CIFMNU /M208 JMS CALSWAP / CALL_A_ROUTINE IN EDITOR SWAP AREA /M208 FNTABSTOP / FIND NEXT TAB STOP CDFEDT AND (0003) / MAKE SURE VALUE DOES NOT EXCEED LIMIT TAD (TABCLASS) / ADD PTR TO DISPATCH TABLE DCA GT1 / SAVE IN GT1 FOR INDIRECT TAD I GT1 / GET ADDR OF TYPE ROUTINE DCA GT1 ACL / GET TAB POSITION INTO AC IAC / & INCREMENT (VALUE IS RETURNED 1 TO LEFT) MQL / & RETURN TO MQ JMP I GT1 / GOTO EXECUTE ROUTINE PER TYPE GT1, 0 TABCLASS, GT2 GT3 GT4 GT5 / TYPE 0 - L D C N H F / TYPE 1 - T W P GT2= . GT3= . JMP I GETTAB / TYPE 2 - > J R GT4, ACL CIA TAD RIGHTM / CHECK FOR RIGHT MARGIN SETTING SNA CLA AC4000 / SET FLAG FOR RIGHT MARGIN TAD (2000) / SET FLAG FOR > OR J TAB MQA MQL / MQ=TABCLASS+PCP - AC=FLAGS=0 JMP I GETTAB / EXIT / TYPE 3 - . GT5, TAD DTABN / GET NEXT DTAB NUMBER IAC JMS GETRES / GET RESULT BIT & IGNORE POINTER CLA RAR / SHIFT BITS TO COMBINE WITH PCP TAD DTABN / MQ=PCP AC0=1 & AC6-11=DTAB NO. IAC JMP I GETTAB /****************************SUBROUTINE*********************************/ / INSERT CONTENTS OF AC INTO TABLE FLDDIM AT REG1 INDIRECT + PARAMETER / REG1 ON ENTRY IS ASSUMED TO POINT TO CURRENT / ENTRY IN FLDDIM TABINS, XX DCA TREG4 / SAVE AC TAD REG1 / REG3 = FLDDIM + 2*FLDCNT + PARAMETER TAD I TABINS DCA TREG3 TAD TREG4 / RECOVER SAVED AC & DCA I TREG3 / PUT INTO TABLE. ISZ TABINS / END OF PREVIOUS FIELD JMP I TABINS TREG3, 0 TREG4, 0 /****************************SUBROUTINE*********************************/ / COPY VALUES FROM LOCATIONS flags tabpcp begfld endfld / INTO FLDDIM TABLE. ALSO, IF THE FIELD DESCRIBED IS A RESULTS FIELD, / THEN GET THE LENGTHS LEFT & RIGHT OF DECIMAL DIGIT OF THE RESULT / AND COPY INTO FLDDIM. / REG1 IS ASSUMED TO POINT TO NEXT SLOT IN FLDDDIM FLDSTRT,XX TAD FLAGS JMS TABINS / SET FIRST TABLE ITEM = FLAGS 0 TAD CHARCNT / CHECK FOR EMPTY FIELD, TAB ONLY SNA CLA TAD (1000) / IF EMPTY, THEN SET TAB ONLY BIT TAD TABPCP JMS TABINS / SET SECOND TABLE ITEM = TAB PCP 1 TAD BEGFLD JMS TABINS / SET THIRD TABLE ITEM = LEFT BOUNDARY 2 TAD ENDFLD JMS TABINS / SET FOURTH TABLE ITEM = RIGHT BOUNDARY 3 TAD FLAGS / CHECK FOR DTAB RESULT FIELD SMA CLA JMP FLDS2 TAD DTABN / IF DTAB RESULT FIELD, THEN GET LENGTHS JMS GETRES / GET POINTER TO BCD NO. FROM DCHAR/TCHAR TAD (-1) / AND ADJUST IT. DCA FLDS1 JMS BCDASC / CALL BCD TO ASCII CONVERSION FLDS1, XX / RETURNS: MQ=LEFT.RIGHT NUMBUF / LEFT=DIGITS LEFT OF DECIMAL CDFMYF / RIGHT=DEC.DIGITS INCLUDING DECIMAL ACL JMS TABINS / SET FIFTH TABLE ITEM = 0 OR RESULTS LENGTHS 4 FLDS2, TAD REG1 / INCREMENT TABLE POINTER TO NEXT ENTRY SLOT TAD (5) DCA REG1 TAD ENDFLD / SAVE RIGHT BOUNDARY OF SEARCH ZONE MQL TAD FLAGS / CHECK FOR DTAB FIELD SNA CLA JMP FLDS3 TAD TABPCP / IF DTAB FIELD, THEN SKP / BEGIN SEARCH AFTER DTAB FLDS3, TAD BEGFLD / SWEEP ZONE OF FIELD JUST CREATED FOR TAD (4000) / SKIPPED TABS - THESE MUST BE JMS TABCHK / PUT INTO LIST TO CATCH ANY RESULT JMP I FLDSTRT / DTABS UNUSABLE WITHIN ANOTHER FIELD /****************************SUBROUTINE*********************************/ / BKEDI4 Moved here this edit to gather space in one place /a247 / AN EXIT IS DONE FROM THE "EXTRACTNUMBER" ROUTINE THRU "BKEDI4" / WHEN CONDITIONS ON THE TOTAL LINE OF EDITOR MATH ARE SUCH AS TO NOT / ALLOW A PROPER PARSING OF THAT LINE BECAUSE IT IS TERMINATED BY A / SOFT RETURN OR, NOT TO ALLOW INSERTION OF THE TOTAL VALUE BECAUSE / A RULER CHANGE WITH NO DECIMAL TABS IN IT HAS BEEN INSERTED PREVIOUS / TO THE TOTAL LINE. THIS CODE TRAPS THESE CONDITIONS BY RESETTING THE / "TOTAL" FLAG TO REFLECT THE ABOVE - THUS TURNING OF TOTALS INSERTION BKEDI4, CDFMTH / CHANGE TO MATH DATA FIELD DCA I (MTHTOT) / SET "TOTAL" FLAG TO FALSE CDFMYF / RETURN TO THIS DATA FIELD JMP BKEDI3 / GO RESET CURPTR & RETURN TO THE EDITOR X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------- PAGE DSKBLK=.-200%400+DL4EDT / DISK BLOCK WHERE PAGE IS LOADED /****************************SUBROUTINE*********************************/ / CHECK FOR RULER-DEFINED TABS BETWEEN FIELDS & CREATE DUMMY FLDDIM ENTRIES / AC=LEFT LIMIT OF ZONE TO SWEEP / PLUS AC0=0 MEANS SWEEP IS BETWEEN FIELDS / AC0=1 MEANS SWEEP INTERIOR OF A FIELD /MQ=RIGHT LIMIT OF ZONE TO SWEEP TABCHK, XX DCA REG2 / SAVE IN ORDER TO CHECK LATER FOR TYPE TAD REG2 / OF CALL: SWEEP FIELD OR BETWEEN FIELDS DCA REG3 / SAVE LEFT LIMIT OF ZONE TO CHECK FOR TABS ACL DCA REG4 / SAVE RIGHT LIMIT OF ZONE TO CHECK FOR TABS TAB1, TAD REG3 AND P377 / GET ORIGINAL OR NEW LEFT LIMIT JMS GETTAB / SEARCH TABLE ONE FOR NEXT GREATER TAB SWP / MAKE AC=TAB POSITION,MQ=FLAGS SNA JMP I TABCHK / EXIT IF NO FURTHER TAB POINTS FOUND DCA REG3 / SAVE POSITION IF GREATER TAB POINT IS FOUND TAD REG3 AND P377 / CHECK IF THIS POSITION < RIGHT LIMIT CIA TAD REG4 SPA CLA JMP I TABCHK / NO - EXIT ACL SZA CLA ISZ DTABN / COUNT DTAB POSITION TAD REG2 / DO NOT FLAG TO FORCE TAB UNLESS RAL / CALL IS TO SWEEP BETWEEN FIELDS! ACL / GET FLAGS - RETURNED BY GETTAB ABOVE SNL TAD (2000) / SET BITS TO FORCE INSERTION OF TAB JMS TABINS / CREATE TAB POSITION ENTRY 0 / PUT FLAGS WORD INTO FLDDIM TAD REG3 JMS TABINS / PUT TABPCP WORD INTO FLDDIM 1 ACL SMA CLA / IF DTAB RESULT FIELD, THEN FILL OUT JMP TAB3 / BEGFLD TAD REG3 / ENDFLD AND P377 / NEW.DIMENSIONS JMS TABINS 2 TAD REG3 AND P377 / BEGFLD & ENDFLD = TAB POSITION JMS TABINS 3 TAD DTABN JMS GETRES / NEW.DIMENSIONS = VALUE OF MQ RETURNED TAD (-1) / BY BCDASC ROUTINE DCA TAB2 JMS BCDASC TAB2, XX NUMBUF CDFMYF ACL JMS TABINS / PUT NEW.DIMENSIONS INTO TABLE 4 AC6000 TAD I REG1 / CHECK FOR RESULT FIELD WHERE TAB SMA CLA / CANNOT BE FORCED JMP FLDERR / IF FOUND, THIS IS AN ERROR! TAB3, TAD (5) / ADVANCE TO NEXT ENTRY SLOT TAD REG1 DCA REG1 JMP TAB1 /****************************SUBROUTINE*********************************/ / ACCESS DCHAR OR TCHAR AND BCD TABLES / CALL WITH AC = REL. NO. OF DTAB TO CHECK / RETURNING AC = POINTER TO BCD RESULTS / LINK = 1 IF FIELD IS A RESULT FIELD GETRES, XX AND P77 / SUPPRESS FLAG BITS TAD (-1) / TABLE ACCESSES COUNT DTAB'S FROM 0 CLL / CLEAR LINE IN CASE OF NULL RETURN TAD DTABPR / GET ADDR OF RESULTS TABLE DCA GREG4 / SET ADDR OF ENTRY IN RESULTS TABLE TAD I GREG4 / MAKE SURE THERE IS A POINTER IN DCHAR SNA / OTHERWISE, JMP I GETRES / EXIT IF NO POINTER IN DCHAR DCA GREG3 / SAVE PTR TO DTAB VALUE CDFMTH / DTAB VALUE IN IN FIELD SIX TAD I GREG3 / GET FIRST WORD OF VALUE (FLAGS) CDFMYF AND (400) / SAVE RESULT BIT (1 IF RESULT) CLL RTL / IN LINK RTL TAD I GREG4 / RETURN POINTER IN AC JMP I GETRES GREG3, 0 GREG4, 0 /****************************SUBROUTINE*********************************/ / GET NEXT CODE FROM EDIT BUFFER AND DETERMINE CASE / RETURN IS AT RETURN + n as follows: / 0 alphanumeric / 1 space / 2 new line / 3 tab / 4 own code / 5 dead key NXCASE, XX JMS SVNTO8 / GET NEXT CODE JMP NXCR2 / ETX RETURN GOES TO NEW LINE TAD CRLMB / AC=CODE WITHOUT ATTRIBUTES TAD (-ECSPC) / MATCH AGAINST SPACE CODE SMA SZA / IS IT GREATER THAN SPACE JMP NXCR0 / IT'S GREATER: GO HANDLE ALPHANUMERIC SNA / IS IT EQUAL TO SPACE JMP NXCR1 / IT'S EQUAL: GO HANDLE SPACE TAD (ECSPC-ECTAB) / MATCH AGAINST TAB CODE SMA SZA / IS IT GREATER THAN TAB JMP NXCR2 / IT'S GREATER: GO HANDLE NEW LINE SNA / IS IT EQUAL TO TAB JMP NXCR3 / IT'S EQUAL: GO HANDLE TAB TAD (ECTAB-ECMTH1) / MATCH AGAINST OUR OWN INSERT CODE SZA CLA / IF EQUAL: THEN GO HANDLE OUR OWN CODE NXCR5, ISZ NXCASE / DEAD KEY RETURN NXCR4, ISZ NXCASE / OUR OWN CODE RETURN NXCR3, ISZ NXCASE / TAB RETURN NXCR2, ISZ NXCASE / NEW LINE RETURN NXCR1, ISZ NXCASE / SPACE RETURN NXCR0, CLA / ALPHANUMERIC RETURN - CLEAR UNWANTED VALUE JMP I NXCASE / RETURN TO CALLER /D236 NXCASE, XX /D236 JMS READNEXT / GET NEXT CODE /D236 JMP NXC1 / ETX RETURN GOES TO NEW LINE /D236 TAD CRLMB / AC=CODE WITHOUT ATTRIBUTES /D236 JMS MATCH / MATCH AGAINST SPACE /D236 ECSPC /D236 JMP I NXCASE / GREATER: ALPHANUMERIC /D236 JMP NXC1 / LESS: FUNCTION /D236 ISZ NXCASE /D236 JMP I NXCASE / EQUAL: SPACE /D236 NXC1, ISZ NXCASE /D236 ISZ NXCASE /D236 TAD CRLMB /D236 JMS MATCH / MATCH AGAINST TAB CODE /D236 ECTAB /D236 JMP I NXCASE / GREATER: NEW LINE /D236 JMP NXC2 / LESS: DEAD KEY OR OWN CODE /D236 ISZ NXCASE / EQUAL: TAB /D236 JMP I NXCASE /D236NXC2, ISZ NXCASE /D236 ISZ NXCASE /D236 TAD CRLMB /D236 TAD (-ECMTH1) / MATCH AGAINST OWN INSERT CODE /D236 SZA CLA / EQUAL: OWN INSERT CODE /D236 ISZ NXCASE / UNEQUAL: DEAD KEY /D236 JMP I NXCASE /****************************SUBROUTINE*********************************/ / CKCTRS Moved here to gather space in one place elsewhere /a247 / ROUTINE USED IN "CKCTRL" TO SEE IF IN A CONTROL BLOCK OR NOT. DOES A / SKIP RETURN IF IN BLOCK AND A NORMAL RETURN IF NOT. CKCTRS, XX CDFEDT / CHANGE OVER TO EDITOR DATA FIELD TAD I (PCTLFL) / GET CONTROL BLOCK FLAG CDFLP / BACK TO THIS DATA FIELD SPA CLA / FOUND A CONTROL BLOCK? ISZ CKCTRS / YES: SET UP SKIP RETURN JMP I CKCTRS / NO: DO NORMAL RETURN X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------- PAGE DSKBLK=.-200%400+DL4EDT / DISK BLOCK WHERE PAGE IS LOADED /****************************SUBROUTINE*********************************/ /D236 / MATCH CONTENTS OF AC TO PARAMETER CODE /D236 / CALLING SEQUENCE IS: /D236 / AC=CODE1 /D236 / JMS MATCH /D236 / CODE2 /D236 / -RETURN IF CODE1 > CODE2 /D236 / -RETURN IF CODE1 < CODE2 /D236 / -RETURN IF CODE1 = CODE2 /D236 MATCH, 0 /D236 CIA /D236 TAD I MATCH /D236 ISZ MATCH /D236 SMA /D236 ISZ MATCH /D236 SNA CLA /D236 ISZ MATCH /D236 JMP I MATCH /****************************SUBROUTINE*********************************/ / STMPDK SToMP on Dead Keys. This routine tests the character /a247 / in the edit buffer pointed to by the AC on entry. If /a247 / it is an End of Dead Key, previous characters will be /a247 / overwritten until an Start of Dead key is found. If it /a247 / is not, then just this character is overwritten. /a247 / / Calling sequence should be:- /a247 / / AC=Address of character /a247 / CDFBUF /a247 / JMS STMPDK /a247 STMPDK, XX / Stomp on poor, unsuspecting dead keys /a247 DCA DELPTR / Store the address passed in the AC /a247 TAD I DELPTR / Get the character at this address /a247 TAD (-ECNDOV) / Test for End of Dead Key character /a247 SZA CLA / Is this a Dead Key Sequence? /a247 JMP NOSTMP / No, only stomp this character /a247 FNDEND, TAD I DELPTR / Get the character again /a247 MQL / Save it /a247 DCA I DELPTR / Stomp on character in Dead Key /a247 AC7777 / Backup to previous character /a247 TAD DELPTR / /a247 DCA DELPTR / /a247 TAD I DELPTR / And get it /a247 TAD (-ECSTOV) / Test for Start of Dead character /a247 SZA CLA / Have we stomped all the Dead Key yet? /a247 JMP FNDEND / No, still got to find the Start /a247 NOSTMP, DCA I DELPTR / Delete the character (or Start Dead) /a247 JMP I STMPDK / Return /a247 DELPTR, 0 /****************************SUBROUTINE*********************************/ / GET BEGINNING & ENDING FIELD BOUNDARYS FROM FLDDIM / REG1 IS ASSUMED TO POINT TO THE NEXT / ITEM IN THE TABLE TO BE ACCESSED. / REG1 WILL NOT BE CHANGED UNLESS A DUMMY / ENTRY IS ENCOUNTERED, IN WHICH CASE REG1 / WILL BE LEFT POINTED TO THE NEXT NON-DUMMY ENTRY. GETITEM,XX TAD REG1 / GET POINTER & INITIALIZE WORKING POINTER DCA REG2 TAD I REG2 / CHECK FOR RESULT FIELD (AC0=1) SMA CLA JMP GETIT1 TAD I GETITEM / NEW OR OLD CONTENTS WANTED? SNA CLA JMP GETIT1 ISZ REG2 / GET NEW RESULT FIELD & COMPUTE BOUNDARIES TAD I REG2 / GET DTAB PCP AND P377 DCA GTREG ISZ REG2 ISZ REG2 ISZ REG2 TAD I REG2 / GET WORD: LEFT BYTE=NO. LT DIGITS AND P77 / RIGHT BYTE=NO. RT DIGITS TAD (-1) TAD GTREG / RIGHT BOUNDARY=PCP-1+NO.RT DIGITS MQL / MQ=RIGHT BOUNDARY TAD I REG2 BSW AND P77 / LEFT BOUNDARY=PCP-NO.LT DIGITS CIA TAD GTREG / AC=LEFT BOUNDRY,MQ=RIGHT BOUNDRY JMP GETIT5 / THEN EXIT GETIT1, AC2000 AND I REG2 / CHECK FOR A FORCED-TAB ENTRY SNA CLA JMP GETIT2 ISZ REG2 / IF FORCED-TAB, THEN SET BOUNDRIES TAD I REG2 AND P377 MQL ACL JMP GETIT5 GETIT2, ISZ REG2 / CHECK FOR END OF FLDDIM TAD I REG2 ISZ REG2 SZA CLA JMP GETIT3 TAD I REG2 / IF BOTH TABPCP & BEGFLD = 0, THEN SNA CLA JMP GETIT6 / EXIT, END OF FLDDIM, NON-SKIP RETURN GETIT3, TAD I REG2 / CHECK FOR DUMMY ENTRY IN FLDDIM, SKIPPED TAB SZA / POSITION,I.E. BEGFLD=0 JMP GETIT4 TAD REG1 / SKIPPED ENTRY: SETUP RETURN AC=0 & MQ=TABPCP IAC DCA REG2 TAD I REG2 / SET AC=TABPCP AND P377 MQL / SET MQ=TABPCP - AC=0 JMP GETIT5 GETIT4, MQL / NORMAL ENTRY,MQ=LEFT BOUNDARY ISZ REG2 TAD I REG2 / AC=RIGHT BOUNDARY SWP / AC=LEFT BOUNDARY, MQ=RIGHT BOUNDARY GETIT5, ISZ GETITEM / NORMAL SKIP EXIT GETIT6, ISZ GETITEM / END OF LIST NON-SKIP EXIT JMP I GETITEM GTREG, 0 /****************************SUBROUTINE*********************************/ / INSERT CODE FOUND IN AC INTO TEXT STREAM AT CURRENT CURSOR VALUE / THEN BYPASS THIS CODE PLUS THE FOLLOWING CODE / AC=CODE TO INSERT INTO EDIT BUFFER INSFORCE,XX JMS INSCODE / ECMTH1 CODE TO MARK FIELD BEGINNING JMS READNEXT / AFTER INSERT, AVOID RE-READING NOP / INSERTED CODE JMP I INSFORCE /****************************SUBROUTINE*********************************/ / INSERT CODE INTO EDIT BUFFER / AC=CODE TO INSERT INTO EDIT BUFFER INSCODE,XX CIFEDT JMS CALLAR / CALL INSERT ROUTINE INSERT CDFBUF JMP I INSCODE /****************************SUBROUTINE*********************************/ / CLEAR AN AREA TO ZEROS / / JMS CLRZER / -PTR TO START OF ZONE TO CLEAR / -NEG. OF NUMBER OF WORDS TO CLEAR CLRZER, XX TAD I CLRZER / INITIALIZE POINTER DCA REG2 ISZ CLRZER TAD I CLRZER / INITIALIZE COUNTER DCA REG1 ISZ CLRZER CLRZ1, DCA I REG2 / CLEAR ONE LOCATION ISZ REG2 / ADVANCE POINTER ISZ REG1 / LOOP UNTIL COUNTER=0 JMP CLRZ1 JMP I CLRZER /****************************SUBROUTINE*********************************/ / PCP=PCP+XPCP INSEXTR,XX TAD PCP / ADVANCE POSITION PTR PAST TAD XPCP / ANY EXTRA SPACES DCA PCP / PCP = PCP + XPCP JMP I INSEXTR /****************************SUBROUTINE*********************************/ / CHECK FOR TYPE OF FIELD & ADJUST ENDFLD ACCORDING TO CASE SETFEND,XX AC2000 AND TABPCP / IF '>' FIELD & SNA JMP SETFE1 RAR / THAT FIELD IS NOT BLANK AND TABPCP / THEN TAKE SKIP RETURN SNA CLA SKP SETFE1, JMS INSBLANK / ELSE, CHECK FOR BLANK (TAB-ONLY) FIELD ISZ SETFEND JMP I SETFEND /****************************SUBROUTINE*********************************/ X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------- PAGE DSKBLK=.-200%400+DL4EDT / DISK BLOCK WHERE PAGE IS LOADED /****************************SUBROUTINE*********************************/ / CHECK FOR BLANK FIELD & TAKE NON-SKIP RETURN IF NOT BLANK INSBLANK,XX TAD I GETF2A / IF FIELD ACCESSED IS NEW CONTENTS TAD NEWLIT / THEN SZA CLA / DO CHECK JMP INSBL0 / FOR RESULT FIELD TAD FLAGS / FIRST CHECK FOR RESULT FIELD SPA CLA JMP I INSBLANK / IF SO, TAKE NON-BLANK RETURN INSBL0, AC2000 / ELSE, CHECK FOR FORCE-TAB BIT AND FLAGS SZA CLA JMP INSBL1 / IF SET, TAKE BLANK RETURN AC2000 / ELSE, IF BLANK BIT SET RAR / (AC2000 & RAR=2000,NO LITERAL AND TABPCP / THEN TAKE BLANK RETURN SZA CLA INSBL1, ISZ INSBLANK / IF BLANK DO SKIP RET. JMP I INSBLANK / IF NON-BLANK, RETURN GETF2A, GETF2 / MUST AVOID ASSEMBLY ADDR AT FOOT OF PAGE NEWLIT, -NEWCON / DITTO /****************************SUBROUTINE*********************************/ / INMATH Moved here this edit to gather space together elsewhere /a247 / THIS ROUTINE MAKES A SKIP RETURN IF WE ARE IN A MATH AREA OR A CONTROL / BLOCK AND A REGULAR RETURN IF NOT INMATH, XX / CLA / CDFEDT / SET TO EDITORS DATA FIELD TAD I XPCTLFL / TEST CONTROL_BLOCK FLAG / =0 IF NOT IN CONTROL BLOCK / =-1 IF IN A CONTROL BLOCK CIA / AC=0 IF IN = 1 IF NOT IN CDFMYF / / =0 IF NOT IN MATH AREA / =1 IF IN A MATH AREA ISZ INMATH / BUMP RETURN ADDRESS IF EITHER / FLAG IS SET JMP I INMATH / RETURN XPCTLFL,PCTLFL / It says above that auto links should /a247 / not be generated. Who am I to argue? /a247 /***********************************************************************/ / / / ALLOCATE TABLE AREA / / / /***********************************************************************/ / THE TABLE FLDDIM IS COMPRISED OF FIVE WORDS PER ENTRY, AS FOLLOWS: / / FLAGS BIT 0=1 INDICATES RESULT FIELD / BIT 1=1 INDICATES TAB MUST BE INSERTED / BITS 2-4 FIELD/CHARACTER ATTRIBUTES / BITS 6-11 GIVES DTAB NUMBER OF DTAB FIELDS / / TABPCP BIT 0=1 INDICATES 'R' ENTRY / BIT 1=1 INDICATES '>' 'J' OR 'R' ENTRY / BIT 2=1 INDICATES FIELD WITHOUT DATA,TAB ONLY / BITS 4-11 GIVES POSITION OF TAB / / BEGFLD BITS 0-11 GIVES POSITION OF FIELD BEGINNING, / FIRST NON-SPACE CODE IN THE FIELD / / ENDFLD BITS 0-11 GIVES POSITION OF FIELD ENDING, / LAST NON-SPACE CODE IN THE FIELD, / UNLESS THE FIELD IS RIGHT / JUSTIFIED, IN WHICH CASE SPACES / ARE COUNTED / / RESULTS BITS 0-5 NUMBER OF POSITIONS TO THE / LEFT OF THE DECIMAL POINT / BITS 6-11 NUMBER OF POSITIONS TO THE / RIGHT OF THE DECIMAL POINT / AND INCLUDING THE DECIMAL POINT / FLDDIM, ZBLOCK 5^MXTABS+3 / ALLOCATE BUFFER TO HOLD ASCII NUMBER CONVERTED FROM BCD PRIOR TO / BEING INSERTED INTO THE EDIT BUFFER! NUMBUF, ZBLOCK MXASCII+1 X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------- PAGE DSKBLK=.-200%400+DL4EDT / DISK BLOCK WHERE PAGE IS LOADED / PSEUDO-CODE TO SET UP SYMBOL TABLE ENTRIES FROM EDITOR MATH TO FIT INTO / TABLES THAT HOLD POINTERS TO THE VALUES OF ":Dnn" and ":Tnn". / START PROGRAM / / GET LEAD CHAR / / IF (LEAD CHAR = "D" OR "T") AND NOT LAST CHAR / THEN SET UP CORRESPONDING TABLE FOR ENTRY / | GET NEXT CHAR / | IF NOT LAST CHAR / | THEN IF CHAR VALUE RANGE = NUMERICAL 1 TO 3 / | | THEN CALCULATE FIRST PART OF OFFSET TO TABLE / | | | GET NEXT CHAR / | | | IF LAST CHAR AND CHAR VAL RANGE = NUM 0 TO 9 / | | | THEN CALCULATE REST OF OFFSET TO TBL / | | | | PUT SYM VALUE PTR IN TABLE / | | | ENDIF / | | ENDIF / | ELSE IF CHAR VALUE RANGE = NUMERICAL 1 TO 9 / | | THEN CALCULATE OFFSET TO TABLE / | | | PUT SYM VALUE PTR IN TABLE / | | ENDIF / | ENDF / ENDIF / / RETURN TO CALLER / / END PROGRAM / / VALUES USED IN EDITOR MATH SYMBOL NAME PROCESSING CODE STRMT1, 0 / CONTAINS SYM PTR TABLE PTR TO SYM NAME PTR STRPTR, 0 / CONTAINS PTR TO SYM NAME IN SYMBOL TABLE HLDTBL, 0 / CONTAINS BASE ADDR OF TABLE TO INSERT SYM VAL PTR TBLOFS, 0 / CONTAINS OFFSET INTO TABLE WHERE TO PUT SYM VAL PTR / ROUTINE TO RUN CHECK ON SYMBOLS ADDED TO SYMBOL TABLE WHEN IN EDITOR MATH / NOTE - RETAIN MATH DATA FIELD TO SET UP POINTERS CHKNME, XX DCA STRMT1 / POINTER & SAVE IT TAD I STRMT1 / INDIRECT THRU IT TO GET PTR TO NAME IN SYM TABLE DCA STRPTR / SAVE IT / CHECK IF FIRST LETTER (AFTER THE COLON) OF THE SYM NAME IS A "T" / OR "D" ISZ STRPTR / ADVANCE START OF NAME PTR TO SKIP ":" TAD I STRPTR / GET FIRST CHAR AFTER COLON SPA / IF IT IS LAST CHAR IN NAME JMP EXTCHK / THEN EXIT (NOT A VALID COLUMN NAME) TAD (-"D+200) / GET NEGATIVE 7 BIT ASCII VALUE FOR A "D" SNA / IS THE CHAR A "D"? JMP DTAB / YES: GO SET UP FOR RIGHT TABLE IF PROCESS IT TAD ("D-"T) / NO: RESET AC AND GET NEG OF ASCII FOR "T" SZA CLA / IF CHAR NOT A "T" JMP EXTCHK / THEN EXIT (NOT A VALID COLUMN NAME) TAD (TCHAR-DCHAR) / GET START OF "T"PROCESSING TABLE DTAB, TAD (DCHAR) / GET START OF "D" PROCESSING TABLE DCA HLDTBL / INITIALIZE D OR T PROCESSING TABLE / CHECK FOR SYMBOL NAME SIZE CONCHK, ISZ STRPTR / MOVE DOWN TO NEXT CHAR IN NAME TAD I STRPTR / GET NEXT CHARACTER IN NAME SPA / IF THIS IS THE LAST CHAR JMP PRSONE / THEN GO TO HANDLE A ":Dn" NAME / PROCESS TWO DIGITS LEFT AFTER "D" OR "T" JMS RNGECK / CHECK THE RANGE ON THE DIGIT -"1+200 / PASS NEGATIVE OF LOWER LIMIT OF RANGE -"3+200 / PASS NEGATIVE OF UPPER LIMIT OF RANGE JMP EXTCHK / IF NOT IN RANGE THEN EXIT (NOT A VALID COLUMN NAME) / RETURN HERE IF IN RANGE SPECIFIED - CLL RAL / MULTIPLE IT BY 2 DCA TBLOFS / SAVE IT TAD TBLOFS / GET IT BACK CLL RTL / MULTIPLE IT BY 8 TAD TBLOFS / ADD MULTIPLICATON BY 2 DCA TBLOFS / SAVE THE NUM AS PART OF AN OFFSET TO THE TABLE ISZ STRPTR / SET PTR TO SECOND OF TWO DIGITS TAD I STRPTR / GET THE CHAR SMA / IF NOT THE LAST CHAR JMP EXTCHK / THEN EXIT (NOT A VALID COLUMN NAME) AND P177 / STIP OFF MINUS BIT (WHICH INDICATES LAST CHAR) JMS RNGECK / CHECK THE RANGE ON THE DIGIT -"0+200 / PASS NEGATIVE OF LOWER LIMIT OF RANGE -"9+200 / PASS NEGATIVE OF UPPER LIMIT OF RANGE JMP EXTCHK / RETURN HERE IF NOT IN RANGE - RETURN TO CALLER / RETURN HERE IF IN RANGE AC = 0 TO 9 TAD TBLOFS / ADD IN THE VALUE OF FIRST DIGIT * 10 JMP SAVSYM / GO INSERT PTR TO SYM NAME VALUE IN THE TABLE / PROCESS ONE DIGIT LEFT AFTER "D" OR "T" PRSONE, AND P177 / STRIP OFF SIGN BIT JMS RNGECK / CHECK THE RANGE ON THE DIGIT -"1+200 / PASS NEGATIVE OF LOWER LIMIT OF RANGE -"9+200 / PASS NEGATIVE OF UPPER LIMIT OF RANGE JMP EXTCHK / RETURN HERE IF NOT IN RANGE - RETURN TO CALLER / RETURN HERE IF IN RANGE - AC = CHAR - 60 / INSERT PTR TO SYMBOL NAME VALUE INTO THE APPROPRIATE TABLE SAVSYM, DCA TBLOFS / SAVE OFFSET INTO TABLE AC7777 / DECREMENT TABLE ADDRESS BY 1 TO ALLOW THE USE / OF THE FIRST LOC OF TBL,SINCE NEVER SEE "<:D0>" TAD HLDTBL / GET START OF TABLE TO PROCESS CHAR TAD TBLOFS / GET OFFSET TO THE TABLE DCA TBLOFS / USE IT TO SET UP A POINTER CDFLP / RETURN TO LP DATA FIELD AC0002 / SET TO MOVE PTR BY FORMAT WORD TO START OF VALUE TAD STRPTR / ADD TO IT PTR TO END OF SYM NAME DCA I TBLOFS / PLACE IT INTO THE PROPER PLACE IN THE TABLE EXTCHK, CDIMTH / SET PROGRAM CONTROL BACK TO MATH FIELD CLA JMP I CHKNME / RETURN TO CALLER IN MATH FIELD / ROUTINE TO RANGE CHECK ON A SPECIFIC CHARACTER. CALL TO THIS ROUTINE IS / SET UP AS FOLLOWS: / . / . / (CHAR TO BE CHECKED PASSED IN THE AC) / / JMS RNGECK / / (NEGATIVE OF LOWER LIMIT OF RANGE) / / (NEGATIVE OF UPPER LIMIT OF RANGE) / / RETURN HERE IF NOT IN RANGE / / RETURN HERE IF IN RANGE / / (AC HAS CHAR -60 ON EXIT WEATHER FOUND OR NOT) / . RNGCHR, 0 / CHAR PASSED IN AC RNGECK, XX / RANGE CHECK ROUTINE CDFLP / CDF TO MY FIELD DCA RNGCHR / SAVE CHAR PASSED FOR RANGE CHECK TAD I RNGECK / GET NEG OF LOW END OF RANGE TAD RNGCHR / ADD TO IT CHAR FOR CHECK SPA CLA / IS CHAR IN RANGE? JMP OUTRNG / NO: SET SKIP RETURN TO PROCESS ACCORDINGLY ISZ RNGECK / YES: SET P.C. TO PICK UP UPPER RANGE LIMIT TAD I RNGECK / GET NEG OF UPPER LIMIT INTO AC TAD RNGCHR / ADD TO IT CHAR FOR CHECK SPA SNA CLA / IS CHAR IN RANGE? OUTRNG, ISZ RNGECK / YES: SET RETURN TO PROCESS ACCORDINGLY ISZ RNGECK / NO: SET RETURN TO SKIP PROCESSING CDFMTH / CDF BACK TO MATH FIELD TAD RNGCHR / GET DIGIT BACK IN AC TAD (-60) / CHANGE FROM ASCII TO BINARY JMP I RNGECK / RETURN TO CALLER / Here on a Gold Bottom request. Gold Bottom goes to the end of the / descriptor list and then backs up 10 blocks. if the last ruler found / was below the 10 blocks, the wrong ruler will be loaded for the scroll. / this routine starts searching from this 10th block up, looking for the / first ruler. when found return to load this ruler and continue the / scroll / delete this logic from GOLD_BOTTOM... /A195 /D195RULCHK, XX / SAVE CALLERS RETURN ADDRESS /D195 TAD I (RPCUOF) / SAVE CURRENT OFFSET /D195 DCA I (RPMTBK) / FOR SCROLL AFTER FINDING RULER /D195 TAD I (RPCUBK) / ALONG WITH BLK ID # /D195 DCA I (RPBKID) /D195 JMS BACK1 / GO LOOK FOR BLK W/RULER /D195 CIFEDT / FOR RETURN TO OVERLAYS /D195 JMP I RULCHK / RETURN / routine sets up blocks for ruler load and resets blocks for scroll BACK3, TAD I (RPCUOF) / RULER FOUND AT THIS OFFSET DCA I (RPMTRL) / SET UP THE BLKS FOR THE RULER LOAD TAD I (RPCUBK) / BLK ID # DCA I (RPRLHN) TAD I (RPMTBK) / RETRIEVE LOC. FOR START OF SCROLL DCA I (RPCUOF) / CURRENT OFFSET FOR START / BLK ID IS SET UP ON RETURN LOC IN OVERLAY JMP BACK4 / RETURN / THE FOLLOWING ROUTINE IS CALLED FROM WITHIN "CKCTRL". IT IS USED TO / MAKE SURE THAT THE 1ST TIME A CONTROL BLOCK IS ENCOUNTERED, IT IS / THE FIRST LINE AFTER THE "START CONTROL" CHAR. THIS IS NECESSARY / SINCE SUCH THINGS AS A "GOLD-BOTTOM" OR "BACK-UP LINE" CAN LEAVE THE / USER IN ANY KIND OF A CONTROL BLOCK SITUATION, BUT NOT NECESSARILY ON / THE FIRST LINE OF THAT CONTROL BLOCK. IF HOWEVER THE LINE THE USER IS / LEFT ON STARTS WITH A "WPSMATH" (CR) "BEGIN" (CR), EVEN IF THERE ARE / ILLEGAL MATH CTRL BLOCK LINES PRECEEDING IT, THE CODE WILL THINK IT IS / THE BEGINNING OF A VALID EDITOR MATH WORK AREA. THIS CODE IS INSURANCE / THAT THIS WILL NOT HAPPEN. STLOC2, 0 / LOC TO HOLD ADDR TO START OF 2ND LINE FROM / THE BOTTOM OF THE SCREEN, KEEP ON SAME PAGE / WITH "STLOC1" ROUTINE STLOC1, XX CDFEDT / CHANGE TO EDITOR DATA FIELD TAD I (PTRBLK+NPTRS-2)/ PTR TO THE 2ND LINE FROM THE BOTTOM DCA STLOC2 / SAVE IT CDFBUF / CHANGE TO EDIT BUFFER DATA FIELD TAD I STLOC2 / GET THE FIRST CHAR ON THAT LINE CDFMYF / RETURN TO THIS DATA FIELD TAD (-ECPCT1) / ADD TO IT NEGATIVE OF "START CTRL" CHAR SZA CLA / IS 2ND LINE FROM BOTTOM A "START CONTROL"? ISZ STLOC1 / NO: SET SKIP RETURN TO HANDLE JMP I STLOC1 / YES: NORMAL RETURN TO CONTINUE PROCESSING / DELCODE moved here to gather space elsewhere in one place /a247 / DELETE CODE FROM EDIT BUFFER DELCODE,XX CDFEDT TAD I (CURPTR) / DELETE BY OVERWRITING CODE POINTED TO /d247 DCA DELPTR / BY CURPTR WITH A NULL CDFBUF DCA DELTEMP / Save the pointer /a247 TAD I DELTEMP / Get it back to save in the MQ register/a247 MQL / ... /a247 TAD DELTEMP / Get the address back to pass on /a247 /d247 TAD I DELPTR / GET CODE TO SAVE ATTRIBUTES JMS STMPDK / Stomp on the character pointed to /a247 /d247 MQL /d247 DCA I DELPTR CDFMYF JMP I DELCODE DELTEMP,0 X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------- PAGE DSKBLK=.-200%400+DL4EDT / DISK BLOCK WHERE PAGE IS LOADED TRANTP=. / TOP OF TRANSLATIONS PAGE /A258 / THESE MESSAGES BROUGHT IN FROM THE EDITOR OVERLAYS. THEY ARE SPECIAL / IN THAT THEY ARE NEVER USED WHILE IN LIST PROCESSING. EIFND1, IFDEF ENGLSH < TEXT "!&ENTER !&PHRASE: " > IFDEF V30NOR < TEXT "!&ANGI !&UTTRYKK: " > IFDEF V30SWE < TEXT "&SKRIV FRAS: " > IFDEF SPANISH < TEXT "&TECLEE &FRASE: " > /A255 IFDEF ITALIAN IFDEF CANADA < TEXT "&TAPER &L'&EXPRESSION: " > IFDEF FRENCH < TEXT "&TAPER &L'&EXPRESSION : " > IFDEF DUTCH < TEXT "&TYP &DE &ZOEKTEKST: " > IFDEF GERMAN < TEXT "&BEGRIFF &EINGEBEN: " > IFDEF NORWAY < TEXT "&SKRIV &S\KEBEGREP: " > /L.PHI IFDEF SWEDSH < TEXT "&SKRIV &S\KBEGREPP: " > /L.U.O IFDEF DANISH < TEXT "&SKRIV &S\GEBEGREP : " > /L.PHI EIGES1, IFDEF ENGLSH < TEXT "!&ENTER !&NAME: " > IFDEF V30NOR < TEXT "!&ANGI !&NAVN: " > IFDEF V30SWE < TEXT "&SKRIV NAMN: " > IFDEF SPANISH < TEXT "&TECLEE &NOMBRE: " > /A255 IFDEF ITALIAN IFDEF CANADA < TEXT "&TAPER &LE &NOM: " > IFDEF FRENCH < TEXT "&TAPER &LE &NOM : " > IFDEF DUTCH < TEXT "&TYP &DE &NAAM: " > IFDEF GERMAN < TEXT "&NAME &EINGEBEN: " > IFDEF NORWAY < TEXT "&SKRIV &NAVN: " > IFDEF SWEDSH < TEXT "&SKRIV &NAMN: " > IFDEF DANISH EIGER2, IFDEF ENGLSH < TEXT "!&NOT !&FOUND-!&REENTER: " > IFDEF V30NOR < TEXT "!&IKKE !&FUNNET-!&LEGG INN P\E NYTT: " > IFDEF V30SWE < TEXT "&HITTAS INTE - &F\VRS\VK IGEN: " > IFDEF SPANISH < TEXT "&NO &SE &ENCUENTRA-&TECLEE OTRA VEZ: " >/A255 IFDEF ITALIAN IFDEF CANADA < TEXT "&INTROUVABLE-&REESSAYER:"> IFDEF FRENCH < TEXT "&INTROUVABLE--&REESSAYER : " >/L.A.E IFDEF DUTCH < TEXT "&NIET &AANWEZIG-&PROBEER &OPNIEUW: " > IFDEF GERMAN < TEXT "&NICHT &GEFUNDEN--&NOCH &EINMAL: " > IFDEF NORWAY < TEXT "&IKKE &FUNNET--&PR\V &IGJEN: " > /L.PHI IFDEF SWEDSH < TEXT "&FINNS &INTE--&F\RS\K &IGEN: " > /L.U.O, L.U.O IFDEF DANISH / L.PHI / FOLLOWING TEXT STATEMENTS MOVED IN FROM EDITOR OVERLAYS SINCE THEY / MUST NOW RESIDE IN FIELD 5 RANBAD, IFDEF ENGLSH < TEXT " - &UP &TO 4 &DIGITS &ALLOWED" > IFDEF V30NOR < TEXT " - &INNTIL 4 SIFFER ER TILLATT" > IFDEF V30SWE < TEXT " - &MAXIMALT 4 TECKEN \DR TILL\ETNA" > IFDEF SPANISH < TEXT " - &SE &PERMITE &HASTA 4 &D\MGITOS" > /A255 IFDEF ITALIAN < TEXT " - &MAX. 4 CIFRE" > IFDEF DUTCH < TEXT " - &MAX. 4 CIJFERS"> CHABAD, IFDEF ENGLSH < TEXT " - &NUMBERS &ONLY &PLEASE" > IFDEF V30NOR < TEXT " - &BARE TALL" > IFDEF V30SWE < TEXT " - &SKRIV ENDAST TAL" > IFDEF SPANISH < TEXT " - &S\SLO &N\ZMEROS" > /A255 IFDEF ITALIAN < TEXT " - &SOLO NUMERI" > IFDEF DUTCH < TEXT " - &GEBRUIK ALLEEN CIJFERS" > RPPME9, IFDEF ENGLSH < TEXT " - &MULTIPLE &MATH &START &BLOCKS" > IFDEF V30NOR < TEXT " - &FLERE &START-BLOKKER FOR ®NING" > IFDEF V30SWE < TEXT " - &FLERTAL &MATEMATIK &START &BLK" > IFDEF SPANISH < TEXT " - &BLOQUES &INICIO &MAT &M\ZLTIPLE" > /A255 IFDEF ITALIAN < TEXT " - &C'\H UN SECONDO COMANDO !&INIZIO NELL'AREA MATEMATICA" > IFDEF DUTCH < TEXT " - &MEERDERE !&BEGIN (REKENEN) OPDRACHTEN" > RPPRETRY, IFDEF ENGLSH < TEXT " - &PRESS !&RETURN &TO &CONTINUE" > IFDEF V30NOR < TEXT " - &TRYKK P'E !&RETUR FOR \E FORTSETTE" > IFDEF V30SWE < TEXT " - &TRYCK P\E RETUR F\VR ATT FORTS\DTTA" > IFDEF SPANISH < TEXT " - &PULSE !&RETORNO &PARA &CONTINUAR" > /A255 IFDEF ITALIAN < TEXT " - &PREMERE !&RETORNO" > IFDEF DUTCH < TEXT " - &DRUK OP !&RETURN" > EIRPG1, IFDEF ENGLSH < TEXT "&ENTER &PAGE &NUMBER:" > IFDEF V30NOR < TEXT "&ANGI SIDETALL:" > IFDEF V30SWE < TEXT "&SKRIV SIDNUMMER:" > IFDEF SPANISH < TEXT "&TECLEE &PAG. &N\ZMERO:" > /A255 IFDEF ITALIAN < TEXT "&INTRODURRE IL NUMERO DI PAGINA:" > IFDEF DUTCH < TEXT "&TYP HET PAGINA-NUMMER: " > EIRRAB, IFDEF ENGLSH < TEXT "&PRESS !&ADVANCE OR !&BACK !&UP" > IFDEF V30NOR < TEXT "&TRYKK P'E !&FREM EL. !&TILBAKE" > IFDEF V30SWE < TEXT "&TRYCK P\E FRAM\ET ELLER BAK\ET" > IFDEF SPANISH < TEXT "&PULSE !&ADELANTE O !&ATRAS" > /A255 IFDEF ITALIAN < TEXT "&PREMERE !&AVANTI O !&INDIETRO" > IFDEF DUTCH < TEXT "&DRUK OP !&VOORUIT OF !&TERUG" > X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------- PAGE IFNZRO .-TRANTP-200 /A258 DSKBLK=.-200%400+DL4EDT / DISK BLOCK WHERE PAGE IS LOADED / THE FOLLOWING IS PART OF THE EDITOR MATH ERROR REPORTING CODE. / This routine places a caret ("^"), on line 6. if wide screen and / on line 16. if narrow screen, in the column which was passed / to this routine in the ac. EDRTW, / subroutine head used for temporary storage EDRCOL, XX CDFEDT TAD I (LOWLIM) / ADD LOWLIMIT TO COLUMN NUMBER TO MAKE / SURE THAT CARET CAN BE PLACED IN / POSITION PASSED TO EDRCOL. DCA EDRTX / SAVE RESULT TAD EDRTX / POSITION LESS THAN LEFT SCREEN LIMIT? SPA SNA / SKIP IF: NOT JMP EDRCO1 / EXIT (CAN'T DISPLAY CARET) TAD (-205) / POSITION GTR THAN RIGHT SCREEN LIMIT? SMA CLA / SKIP IF: NOT (OK TO DISPLAY CARET) JMP EDRCO1 / EXIT (CAN'T DISPLAY CARET) TAD (-7) / set line number DCA I (CURLIN) CDFMYF TAD EDRTX / get the column number CIFEDT / position the cursor JMS CALLAR PCUR CDFEDT TAD ("^&177) / write the caret CIFEDT JMS CALLAR EDOCHR CDFEDT EDRCO1, CLA CLL CDFMYF JMP I EDRCOL / This routine gets the next argument from EDERR's arg list, / which is a pointer to the oversize result in BCD. (The arg list / will have one or two such args.) The BCD result must be translated / into ASCII for IOA, and then displayed at the location which / was passed to this routine in the ac. EDRTX, / subroutine head used for temporary storage EDRDYR, XX DCA EDRPSN / put cursor position in IOA call ISZ EDRALP / get next argument less one TAD EDRALP DCA EDRTW AC7777 TAD I EDRTW DCA EDRBCD / put it in BCDASC call JMS BCDASC / call the conversion routine EDRBCD, .-. NUMBUF / ADDRESS TO PUT ASCII RESULTS CDFMYF DCA EDRBCD / mark the end of the ASCII string DCA I EDRBCD / with a 0 CIFMNU / call IOA to display a cursor JMS I IOACAL / position (where the result goes), 0 / and an ASCII string (the result) EDRIND EDRPSN, .-. NUMBUF / ADDRESS OF ASCII NUMBER JMP I EDRDYR / exit subr / the following was moved here from the overlays / offset ADJUSTMENT subroutine / / adjust (INCREMENT OR DECREMENT) the offset to the rppgds / and the pointer to the rppgds block / / the contents of the AC at entry = positive for forward adjustment, or / = negative for backward adjustment AJUST, XX / THE CONTENTS OF THE AC IS THE COUNT CDFEDT / CHANGE TO EDITOR FIELD SPA / SKIP NEXT IF POSITIVE MEANING ADJUST FORWARD JMP ADJBACK / ADJUST IN THE REVERSE DIRECTION / adjust in the forward direction ISZ I (RPCUOF) / ADJUST FORWARD BY 1 COUNT (ALWAYS) AC7775 / ARE WE PROCESSING THE THIRD EXT.?? TAD I (RPCUBK) SZA CLA / SKIP IF SO JMP ADJUS1 / NOT IN THE THIRD EXT. TAD I (RPCUOF) / IF WE HAVE REACHED TAD (-362) / 362 IN THE THIRD EXT., RESET SNA CLA / SKIP IF LESS THAN 362 JMP ADJUS2 / AT 362, RESET... ADJUS1, TAD I (RPCUOF) TAD (-400) / SPA CLA / JMP ADJEX3 / EXIT / gone to far forward ADJUS2, AC0002 / 2 / /\ DCA I (RPCUOF) / ISZ I (RPCUBK) / JMP ADJEX2 / EXIT / adjust in the backward direction ADJBACK,TAD I (RPCUOF) / GET POINTER VALUE BEFORE ADJUSTMENT DCA I (RPCUOF) / SAVE BACKWARD ADJUSTED VALUE TAD I (RPCUBK) / CLL RAR / SNA CLA / JMP RPPH01 / AC7776 / -2 / TAD I (RPCUOF) / SMA / JMP ADJEX1 / STILL WITHIN LIMITS OF RPPGDS BLOCK AFTER ADJUSTMENT / the contents of the AC is a negative number / which means out of the logical boundries / of the RPPGDS block after the backward adjustment DCA ADJTMP / SAVE CURRENT VALUE OF RPCUOF TAD I (RPCUBK) / ARE WE IN THE FOURTH EXT.??? TAD (-4) SNA CLA / SKIP IF NOT TAD (7762) / GET BACK TO 361 IN THIRD EXT. TAD (400) / TAD ADJTMP / RETRIEVE RPCUOF DCA I (RPCUOF) / RPCUOF IS NOW CORRECTED AC7777 / -1 / TAD I (RPCUBK) / DCA I (RPCUBK) / JMP ADJEX3 / EXIT ADJTMP, 0 / TEMP. WORKING STORAGE / special boundry testing / because the pointer adjusted / is in the 1st RPPGDS descriptor block / (which has unique limits) / / 55 - is the 'top' of the block where the 1st RPPGDS descriptor word is / 377 - is the 'bottom' of the block where the last descriptor word is RPPH01, TAD (-55) / TAD I (RPCUOF) / ADJEX1, SMA CLA / JMP ADJEX3 / EXIT - STILL WITHIN LIMITS AFTER ADJUSTMENT TAD (55) / ADJEX2, DCA I (RPCUOF) / ADJEX3, CDFLP JMP I AJUST / EXIT / ADJUS0 Moved here this edit to gather space in one place /a247 / ADJUS0, XX / SAVE RETURN ADDRESS DCA ADJTM1 / ADJUST DIRECTION IN MQ RDF / GET CALLERS (RETURN) FIELD TAD CIDF0 / MAKE A RETURN CID INSTR. DCA ADJEX4 / SAVE FOR RETURN TO CALLER TAD ADJTM1 / SUPPLY ADJUST DIRECTION JMS AJUST / DO ADJUST ADJEX4, .-. / CALLERS FIELD JMP I ADJUS0 / RETURN ADJTM1, .-. / TEMP FOR ADJUST DIRECTION X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------- PAGE DSKBLK=.-200%400+DL4EDT / DISK BLOCK WHERE PAGE IS LOADED / * * * * * * * * * * * * * * * * * / * * / * EDITOR MATH ERROR REPORTING * / * * / * * * * * * * * * * * * * * * * * / Most of the display work is done in the menu. This routine accepts / an error code and up to four parameters. It passes the error code and / the first two parameters to menu block DLMLP5, list proc & ed math / error reporting. A flag passed back by the menu processor tells this / routine whether to either just exit, or to call PELINE to show the / partially parsed formula or command appropriate to some error messages. / For two of the messages (ERNOSP and ERNSP2), this routine will not call / PELINE, but will make a display which shows results which do not fit. / calling sequence: / / for ERNOSP and ERNSP2 -- / TAD (error code) / CDFMYF / JMS EDERR-1 / pcp to the first result's tab stop / pcp to the second result's tab stop / pointer to the first oversize result / pointer to the second oversize result / / for EREXTR -- / TAD (error code) / CDFMYF / JMS EDERR-1 / pcp to the erroneous number / / for all other errors -- / TAD (error code) / JMP EDERR / pseudo-code / EDERR: proc / save ac / if in view mode then exit view mode endif / eliminate any screen lag / MNTMP4 = SPLTFL / if SPLTFL then EDRDIF = 0 else EDRDIF = #1200 endif / do / { error code passed in ac } / MNTMP5 = saved ac / { tell menu processor that we're editor math } / MNTMP1 = 1 / call MENU_INTERPRETER / { the menu process will clear the error code to show that no } / { further processing is needed } / until MNTMP5==0 here / { check to see what flavor of further processing is needed } / select MNTMP5 of / case EREXTR / call EDRCOL ( arg1 ) / case ERNOSP / call EDRDYR ( #744 ) { will use arg3 } / call EDRCOL ( arg1 ) / case ERNSP2 / call EDRDYR ( #744 ) { will use arg3 } / call EDRDYR ( #1044 ) { will use arg4 } / call EDRCOL ( arg2 ) / call EDRCOL ( arg1 ) / otherwise / call PELINE / endselect / { tell menu processor that it's being called a second time } / saved ac = 1 / enddo / fix up the screen / goto editor re-entry / / EDRCOL: proc / save ac / call PCUR ( [CURLIN=-7] saved ac ) / call EDOCHR ( '^' ) / return / / EDRDYR: proc / save ac plus EDRDIF / ac = next argument of EDERR / call BCDASC ( ac, NUMBUF ) / mark end of NUMBUF with 0 / call IOA ( 0, "^P^A", saved ac, NUMBUF ) / return / real-code EDRALP, XX / sometimes called with JMS in order to / establish an argument list pointer EDERR, DCA EDRTZ / save error code CDFEDT / view overlay?? TAD I (OVLAY1) TAD (-VIEWF1) SZA CLA JMP EDRJ1 / not view overlay TAD I (VIEWF2) / view mode?? SNA CLA JMP EDRJ1 / not view mode DCA I (VIEWF2) / exit view mode AC2000 DCA I (SCRLCT) AC2000 DCA I (SCRNFL) EDRJ1, CDFMYF / get first two arguments TAD I EDRALP DCA EDRT1 ISZ EDRALP TAD I EDRALP DCA EDRT2 CDFEDT / eliminate any screen lag AC0001 DCA I (ECHFLG) JMS CALFXS / CALL EDITORS FXSCRL ROUTINE /D232 CIFMNU / CHANGE TO MENU FIELD /D232 PGSWAP / AC=0 SAVE SWAP AREA & RELOAD MENU CODE TAD EDRTZ / get saved error code EDRRPT, CDFMNU / pass error code to menu processor DCA I (MUBUF+MNTMP5) AC0001 / signal that we're editor math DCA I (MUBUF+MNTMP1) / (list proc uses a 0) CDFMYF / call the menu processor on the "list CIFMNU / CHANGE TO MENU FIELD /M232 PGSWAP / AC=0 SAVE SWAP AREA & RELOAD MENU CODE /M232 CIFMNU / proc & ed math errors" block JMS I MNUCAL DLMLP5 AC7777 / SET AC=-1 /M232 CIFMNU / CHANGE TO MENU FIELD /M232 PGSWAP / AC=-1, SO JUST LOAD IN THE SAVE AREA /M232 CDFMNU / see if the menu process cleared the TAD I (MUBUF+MNTMP5) / error code or whatever CDFMYF SNA CLA JMP EDREND / err code cleared -- all done JMS EDRTYP / not cleared -- which error?? JMP EDROTH / other -- go call PELINE JMP EDRXTR / EREXTR -- display one caret only JMP EDRONE / ERNOSP -- display one big result JMS EDRDSP / ERNSP2 -- display two big results 2144 / screen position for display JMS EDRDYR / one result after "...results: " JMS EDRDSP / calculate correct screen position 2244 / screen position for display JMS EDRDYR / one result after "...and: " TAD EDRT2 / one caret at column arg2 JMS EDRCOL JMP EDRXTR EDRONE, JMS EDRDSP / calculate correct screen position 2142 / screen position for display JMS EDRDYR / one result after "...result: " EDRXTR, TAD EDRT1 / one caret at column arg1 JMS EDRCOL JMP EDRAGN / go call the menu proc to finish up EDROTH, JMS EDRDSP / calculate correct screen position 2200 / screen position for display / it's not one of those listed, so assume CIFMTH / it's the kind of error with something JMS PELINE / informative in the line buffer EDRAGN, AC0001 / tell the menu processor that this is JMP EDRRPT / a second call / This routine calculates the correct screen position for the error display. / / The call is as follows: / JMS EDRDSP / Calculate correct screen position / value / Position to use for no status lines / ... / Return with AC = correct location EDRDSP, XX / Calculate correct screen position CDFMNU / Switch to menu field TAD I (MUBUF+MNSTAT) / Pick up value of status line count CDFMYF / Switch back to this field BSW / Swap low order bits with high order bits CIA / Make value negative for a subtract TAD I EDRDSP / Combine with NO-STATUS-LINE value ISZ EDRDSP / Bump return address over value JMP I EDRDSP / Return to caller / This routine examines the saved error code (in EDRTZ) and takes an / alternate return depending on the specific error. / JMS+1 (normal return) -- not one of those tested for / JMS+2 (skip 1) -- EDRTZ = EREXTR / JMS+3 (skip 2) -- EDRTZ = ERNOSP / JMS+4 (skip 3) -- EDRTZ = ERNSP2 EDRTYP, XX TAD EDRTZ TAD (-EREXTR) SNA JMP EDRTR1 TAD (EREXTR-ERNOSP) SNA JMP EDRTR2 TAD (ERNOSP-ERNSP2) SZA CLA JMP I EDRTYP ISZ EDRTYP EDRTR2, ISZ EDRTYP EDRTR1, ISZ EDRTYP JMP I EDRTYP / some useful things EDRTZ, 0 / error code (passed to EDERR in ac) EDRT1, 0 / arg1 EDRT2, 0 / arg2 / come here to exit from error reporting to the editor EDREND, /D232 AC7777 / SET AC=-1 /D232 CIFMNU / CHANGE TO MENU FIELD /D232 PGSWAP / AC=-1, SO JUST LOAD IN THE SAVE AREA CDFEDT / fix up the screen TAD (-10) DCA I (SCRLCT) DCA I (CURLIN) DCA I (CURPOS) JMS CALFXS / CALL EDITORS FXSCRL ROUTINE CDFBUF / jump to the editor CIFEDT JMP EIFXT2 / some useful things EDRIND, TEXT "^P^A" X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------- PAGE DSKBLK=.-200%400+DL4EDT / DISK BLOCK WHERE PAGE IS LOADED / THE FOLLOWING ROUTINE IS USED TO GET THE STATUS OF THE "MA" SWITCH, AND / INFO REGARDING WHETHER IN MATH AREA OR NOT! / / IF MA = YES / THEN IF IN MATH WORK AREA = TRUE / THEN DO SKIP RETURN / ELSE DO NORMAL RETURN / ENDIF / ELSE SET "IN MATH WORK AREA" FLAG = FALSE / SET "IN CONTROL BLOCK" FLAG = FALSE / DO NORMAL RETURN / ENDIF MASTTS, XX CDFMNU / CHANGE TO MENU DATA FIELD TAD I (MUBUF+MNMATH) / GET "MA" FLAG CDFMYF / RETURN TO THIS DATA FIELD SNA CLA / IS "MA" YES? JMP MASTT1 / NO: GO FIX FLAGS CDFMTH / YES: CHANGE TO MATH DATA FIELD TAD I (MTHWRK) / GET "IN MATH WORK AREA" FLAG CDFMYF / RETURN TO THIS DATA FIELD SNA CLA / ARE WE IN A MATH WORK AREA? ISZ MASTTS / YES: SET UP FOR A SKIP RETURN JMP I MASTTS / NO: RETURN TO CALLER / TAKE TIME HERE TO SET FOLLOWING FLAGS IN CASE "MA" IS SHUT OFF / IN THE MIDDLE OF A MATH AREA. MASTT1, AC0001 / GET 1 IN THE AC CDFMTH / CHANGE TO MATH DATA FIELD DCA I (MTHWRK) / SET IN MATH WORK AREA FLAG TO FALSE CDFMYF / RETURN TO THIS DATA FIELD AC0001 / GET 1 IN THE AC DCA INCTLB / SET "IN CONTROL BLOCK" FLAG = FALSE JMP I MASTTS / RETURN TO CALLER / THIS RTN IS CALLED FROM "SCRMTH" AND "EDERR1". IT IS USED TO SHUT / DOWN EDITOR MATH IN THE CASE OF BACKING UP INTO, IN, OR OUT OF A CTRL / BLOCK IN AN EDITOR MATH WORK AREA. ALSO IT IS USED TO SHUT IT DOWN IF / AN ERROR IS ENCOUNTERED IN AN EDITOR MATH CONTROL BLOCK SCRINI, XX / SUBRTN USED TO SHUT EDITOR MATH DOWN CDFMTH / YES: CHANGE TO MATH DATA FIELD AC0001 / GET 1 IN THE AC DCA I (MTHWRK) / SET "IN MATH WORK AREA" = FALSE DCA I (MTHTOT) / SET "MATH TOTAL" FLAG = FALSE / DONE IN CASE "TOTAL" COMMAND IS PUT IN 1ST / BLOCK OF EDITOR MATH AREA. IF PROCESS THRU 1ST / BLOCK OF MATH AREA, THEN BACK UP TO TOP OF AREA / AND RESCROLL, DEPENDING ON WHERE THE "TOTAL" / HAS BEEN PLACED RELATIVE TO THE "FORMULAS" IN / THE BLOCK, INCONSISTENCIES CAN RESULT IN THE / EXECUTION OF THE 1ST LINE OF THE TABLE / FOLLOWING THE BLOCK DCA I (FSTLNE) / SET "CONTROL BLOCK FIRST LINE" FLAG = TRUE / THIS IS DONE TO COVER THE CASE WHERE THE USER / BACKS UP IN AN EDITOR MATH AREA CTRL BLOCK / TO THE "WPSMATH" THEN SCROLLS FORWARD THEN / BACKS UP AGAIN TO THE TOP OF THE MATH AREA. / THIS FIX SHOULD ALLOW THE SYSTEM TO PROCESS / THE MATH AREA STARTING FROM THE "WPSMATH" / INSTEAD OF HAVING TO BACK UP TO BEFORE THE / START OF THE MATH AREA, THUS KEEPING IT / CONSISTENT WITH THE WAY IT ACTS IF BACKUP IS / DONE WHILE NOT IN A CTRL BLOCK. CDFMYF / RETURN TO THIS DATA FIELD AC0001 / GET 1 IN THE AC DCA INCTLB / SET "IN CONTROL BLOCK" FLAG = FALSE DCA MTHCTL / SET "IN MATH CONTROL BLOCK" = FALSE.... / ..THIS IS DONE TO COVER ANY UNFORESEEN PROBLEMS JMP I SCRINI / RETURN TO CALLER / INMATH Moved this edit to make space for INSMCH /a247 / CALFXS Moved this edit to make room for INSMCH /a247 / CKCTRS Moved this edit to make room for INSMCH /a247 / CHAR. CHECK ROUTINE / READS CHARACTER IN EDIT BUFFER POINTERED TO BY LINE23 AND CHECKS FOR / MATCH TO CHARACTER SPECIFIED AT CALLER+2. USED IN "CKCTRL". / ROUTINE WILL GO BACK TO THE EDITOR, RESTORING CURPTR ALONG THE WAY IF / THE CHARCTER READ MATCHES THE CHARACTER SPECIFIED AT CALLER+2 ELSE / IT RETURNS TO CALLER+3 IF NO MATCH. / CALL : JMS CKCTR1 / CALL+1 : VALUE TO AND CHAR. WITH (IE. - STRIP MODE BITS) / CALL+2 : -CHAR. TO MATCH CKCTR1, XX CDFEDT TAD I (LINE23) / GET POINTER TO 1ST CHAR. IN LINE DCA T1 / SAVE IN TEMP. CDFBUF TAD I T1 / GET CHARACTER CDFMYF AND I CKCTR1 / GET VALUE TO AND FROM CALLER+1 ISZ CKCTR1 / BUMP RETURN PTR. TO GET NEXT PARAM. TAD I CKCTR1 / GET NEG. VALUE OF CHAR. TO MATCH. SNA CLA / SKIP IF: NO MATCH JMP BKEDI3 / RULER LINE - SKIP MATH ISZ CKCTR1 / BUMP RETURN POINTER JMP I CKCTR1 / RTRN TO CALLER TO CONTINUE PROCESSING /++ / INCREMENT_DECIMAL_TAB_COUNT / / FUNTIONAL DESCRIPTION: IDTABCOUNT / / THE FUNCTION OF THIS ROUTINE IS TO CHECK PREVIOUS TO INCREMENTING / DTABCOUNT THAT IT HAS NOT BEEN INCREMENTED ONCE ALREADY FOR THE / CURRENT TABPOSITION. IF NOT YET INCREMENTED FOR THE CURRENT / TABPOSITION THEN INCREMENT DTABCOUNT AND SET LAST_TAB_POSITION = / -TABPOSITION FOR THE NEXT PASS THROUGH IDTABCOUNT. / / CALLING SEQUENCE: JMS IDTABCOUNT / / INPUT PARAMETERS: AC = 0 / / IMPLICIT INPUT: GLOBAL: TABPOSITION, LTABPOSITION, DTABCOUNT / / OUTPUT PARAMETERS: AC = 0 / / IMPLICIT OUTPUT: GLOBAL: LTABPOSITION, DTABCOUNT / / COMPLETION CODE: NONE / / SIDE EFFECTS: 1) LTABCOUNT INITS. IN EXTRACTNUMBER ROUTINE / /-- IDTABCOUNT, / INCREMENT_DECIMAL_TAB_COUNT XX TAD TABPOSITION / HAS DTABCOUNT ALREADY BEEN INCREMENTED / FOR THIS TAB POSITION? TAD LTABPOSITION / ADD LAST_TAB_POSITION SZA CLA / SKIP IF: SO ISZ DTABCOUNT / NO - INCREMENT DECIMAL TAB COUNT TAD TABPOSITION / SET LTABPOSITION CIA DCA LTABPOSITION JMP I IDTABCOUNT / RETURN / ADJUS0 Moved this edit to make space for ADUNIT /a247 / BKEDI4 Moved elsewhere this edit to make space for ADUNIT /a247 /**************************************************************************** / ADUNIT ADance UNIT routine is used by READNEXTCHARACTER /a247 / to aquire the next relevent character from the edit /a247 / buffer. If not in a dead key sequence, then ADVSPC /a247 / is used to get the next printable character. If a /a247 / dead key sequence is in progress, ADVPTR is used /a247 / until an End Dead is seen. On encountering the End /a247 / Dead, the dead key sequence flag is reset and /a247 / processing returns to normal. /a247 /**************************************************************************** ADUNIT, XX / Start of routine to get next unit /a247 TAD DEADKEY / Get the state of the dead key flag /a247 SZA CLA / Are we in a dead key sequence? /a247 JMP DEAD / Yes, get the next non-null file char /a247 CIFEDT / No, call the ADVSPC routine to get /a247 JMS CALLAR / the next printable character /a247 ESASPC / /a247 CDFBUF / The field of the text buffer /a247 JMP AUETXT / Jump to non-skip ETX exit /a247 JMP AUOKXT / Jump to skip return with normal char /a247 DEAD, CIFEDT / Call a routine in the editor using /a247 JMS CALLAR / the universal entry point /a247 ESAPTR / Call the Advance Pointer routine /a247 CDFBUF / with the datafield of the edit buffer /a247 JMP AUETXT / ETX found return /a247 TAD (-ECNDOV) / Test for end of dead key sequence /a247 SNA / Is this the end of the sequence? /a247 DCA DEADKEY / Yes, reset the dead key flag /a247 TAD (ECNDOV) / Recover the character /a247 AUOKXT, ISZ ADUNIT / Skip return on normal character /a247 AUETXT, JMP I ADUNIT / Return /a247 DEADKEY,0 / The Dead Key Sequence Flag /a247 /**************************************************************************** / INSMCH INSert Multinational CHaracter. This routine is used /a247 / by editor maths mainly for the task of inserting /a247 / multinational currency symbols. /a247 / / The character to insert should be passed in the AC /a247 / The attributes for the character should be passed in MQ /a247 /**************************************************************************** INSMCH, XX / Start of 8 Bit insertion routine /a247 DCA INCHAR / Save the character passed in AC /a247 SWP / Get the attribute bits /a247 DCA INSATR / Save them for now /a247 TAD INCHAR / Get the character back again /a247 AND (200) / Test the eigth bit /a247 SNA CLA / Is this a multinational character? /a247 JMP INMNXP / No, output normally /a247 TAD (ISTRING) / Yes, get the addr of std dead key seq./a247 DCA X1 / Store in index register /a247 ISZ DEADKEY / Tickle deadkey flag so READNEXT works /a247 TAD ISTRING / Get the First character of the seq. /a247 JMP INMENT / Enter the output loop /a247 INMLOOP,TAD I X1 / Get the next character in the sequence/a247 SPA / Is this the terminating character? /a247 JMP INMEXT / Yes, print it then exit /a247 AND P177 / No, so strip eigth bits off /a247 MQL / Save in the MQ register /a247 TAD INSATR / Get the attribute bits /a247 MQA / Then merge with the character code /a247 INMENT, JMS INSCODE / Insert the character in the buffer /a247 JMS READNEXT / Move edit pointer to next position /a247 NOP / (Should not reach end of file) /a247 JMP INMLOOP / And loop for next character /a247 INMNXP, TAD INCHAR / For ordinary 7 bit chars, just recall /a247 MQA / the character and add the attributes /a247 SKP / /a247 INMEXT, AND P177 / Strip the top bit from terminator /a247 JMS INSCODE / Insert the character into the buffer /a247 DCA DEADKEY / End of dead key sequence /a247 JMP I INSMCH / Return /a247 ISTRING, ECSTOV / Start of Dead Key character /a247 " / Space /a247 "2 / Multinational character set /a247 INCHAR, 0 / The required character /a247 ECNDOV+4000 / End Dead Key and terminator bit /a247 INSATR, 0 / Place to store the attribute bits /a247 X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------- PAGE / RELOC CDFMYF= CDFEDT / ALL EDITOR OVERLAY CODE EXECUTES IN EDITOR FIELD /d238 NOPUNCH / TURN OFF THE BINARY PUNCH   / WPEDOV - EDITOR OVERLAYS / / /=============================================================== / / / ******* EDIT HISTORY ******* / 240 KMD 23-Sep-85 Add Spanish Xlations and page size checks / 239 KMD 17-Sep-85 Add V30 Sveeedish translation IFDEFs / 238 KMD 16-Sep-85 Add V30 NORWAY IFDEFS / 237 KMD 15-Sep-85 Move TEC8VAL routine to blaster / 236 KMD 13-Sep-85 Add Spanish technical changes / 235 EMcD 26-Aug-85 Add Insert-Overstrike Mode / 234 MART 16-AUG-85 ADD DUTCH / 233 RCME 12-Jul-85 Add new table and code to allow keys / returning 8 bit characters on mcs / keyboards to generate technical chars. / 232 RCME 01-Jul-85 Add new table for allowable 8-bit chars in / ruler definitions / 231 EMcD 15-May-85 Allow (and show) Breaking Hyphen on Gold / View for MCS chars / 230 EMcD 14-May-85 Upper/Lower casing of 8 bit chars / 229 EMcD 07-May-85 Allow Swap on Dead key chars / 228 EMcD 01-May-85 Allow Search on 8bit chars / 227 EMcD 01-May-85 Fix Bug with Swap on Bold char / 226 EMcD 30-Apr-85 Change UNDEADing to UNDEAD extended / tech and MCS deads. / 225 EMcD 26-Apr-85 Moved Gold Swap and allow allow 8 bit in / Abbrev doc. / 224 rcme 23-Apr-85 Add code and hole to merge overlay to deal / with extended field names from MATH module / containing multinational and tech characters / 223 EMcD 19-Mar-85 Allow line Drawing set for tech chars / /-------------------- All mods below refer to V2.0 and earlier -------------- / / 222 IHZ 11-JAN-84 Fix HELP MENU display for DECmate I / 221 WCE 11-JAN-84 Fix COLUMN CUT ending on spaced line / 220 WCE 17-DEC-84 Fix GOLD SEARCH not checking line length / 219 WCE 13-DEC-84 Fix GOLD VIEW problem with multiple screens / 218 WCE 10-DEC-84 Fix COLUMN STRIP RIGHT of single column / 217 WCE 01-NOV-84 Fix GOLD RULER when backing up across screens / 216 DFB 31-OCT-84 Fix COLUMN PASTE to paste on correct line / 215 WCE 30-OCT-84 Fix COLUMN PASTE pasting extra TAB characters / 214 WCE 22-OCT-84 Fix premature GOLD-HALT problem with go-to-page / 213 DFB 19-OCT-84 Fix to column strip left when at left margin / 212 EJL 16-OCT-84 Change help column values / 211 EJL 26-SEP-84 Fix to uparrow code for ruler problem / 210 WCE 24-SEP-84 Search for technical characters / Rewrote Search, GSR, Tech Character overlays / 209 WCE 20-SEP-84 Fix to List Processing for Caller Routine Call / 208 WCE 19-SEP-84 Fix to COLUMN PASTE not pasting CUT text / 207 EJL 18-SEP-84 Prevent case change on dead key sequences / 206 WCE 13-SEP-84 Fix Go-To-Page zapping search buffer text / 205 WCE 11-SEP-84 Move cursor to CUT buffer overflow point / 204 WCE 07-SEP-84 Fix for GOLD CUT not bringing rulers like CUT / 203 DFB 05-SEP-84 Fixes for Column Cut Paste BUG / 202 EJL 04-SEP-84 More fixes for arrow keys and math / 201 DFB 29-AUG-84 Fixes for Column Cut Paste / 200 GDH 29-AUG-84 Fix for Go-To-Ruler not found within buffer. / 199 WCE 28-AUG-84 Fix for Go-To-Ruler not found within buffer / 198 WCE 25-AUG-84 Fix for Global Search finding Centered Lines / 197 EJL 23-AUG-84 Fix reset of ruler during window change / 196 WCE 21-AUG-84 Fix for no error at 50 characters in GSR / 195 WCE 20-AUG-84 Fix for GSR not completting replace operation / 194 EJL 14-AUG-84 Process math on down arrow / 193 EJL 07-AUG-84 Increase speed of column paste / Fix ruler status line in ruler edit mode / 192 BC 26-JUL-84 Delete SPLTFL, use WIDNAR flag for 80/132 / 191 WCE 23-JUL-84 Fix for List Processing HALT problem / 190 WCE 16-JUL-84 Changes for BRITISH pound sign / 189 MP 16-JUL-84 Fix problem with GOLD Menu from G.S. menu / 186 BC 16-JUL-84 Add manual screen width choice / 185 WCE 10-JUL-84 Fix for HELP key crashing system / 184 EJL 09-JUL-84 Fix for storing rulers / 183 JAC 08-JUL-84 Changed size of buffer for 100 UDK'S / 182 WCE 28-JUN-84 Various bug fixes for the EDITOR / Problem redisplaying centered lines after paste / Problem with GOLD PAGE and STATUS LINE / 181 WCE 27-JUN-84 Rewrote EDITOR MENU page to fix SO-CD problem / 180 EJL 26-JUN-84 Extend ruler from 158 to 238 / 179 GDC 22-JUN-84 Column cut, paste, and strip inserted. / 178 MP 17-JUN-84 XXFIND will search for CR, TABS. / 177 DKR 01-JUN-84 Added Calls to OVRLOF (turn ruler display / on/off) in OVINIT and OVMENU. And, Erase / Line if Rulers-Off .AND. Gold:Tab makes a / new ruler / 176 DKR 29-MAY-84 Gold:Tab Code (Indent Tabs) / 175 EJL 29-MAY-84 Update Technical Character Mapping Table / 174 GDC 14-MAY-84 Changes to support second overlay area. / 173 WCE 11-MAY-84 Remove all occurances of USERNO / 172 EJL 08-MAY-84 Install Technical Character overlay / Fixed deadkey and required space / 171 WCE 02-MAY-84 Moved Resident Overlay from WPEDOV to WPEDIT / 170 WCE 26-APR-84 Fixed problem with LP and SWAP AREA / 169 AH 22-MAR-84 Added code for Column Cut / 168 WCE 13-MAR-84 Changed reset point from EIFXT2 to EIFIX / for SEARCH and CONTINUE SEARCH overlay / Changed startup point from EIFIX to EINEXA to / correct problem with blocks used display / 167 WJY 24-FEB-84 Hang up modem on finish on DMI also / 166 WJY 08-FEB-84 DECmate I compatability / 165 WCE 19-JAN-84 Made swap area smaller by two blocks / 164 EH 18-JAN-84 Removed fix #162 / 163 EH 09-JAN-84 Do Not destroy UDK's if no next ruler found / 162 EH 21-DEC-83 Fix PASTE to insert prior to centered mark / 161 GDH 14-DEC-83 Fixed View code to update status line. / 160 GDH 14-DEC-83 Changed DSPRUL calling seq. OVRULR effected. / 159 EH 08-DEC-83 Fix G-Ruler, G-Menu System Halt / 158 DMB 30-NOV-83 Misc bug fixes: (1) GTP no longer winds up / on wrong page if it passes empty pages or / if the destination new-page-marker is too / close to the start of the block; / (2) GOLD:BOT and GTP no longer set "MA NO". / 157 DMB 12-NOV-83 REWRITE SUBSTANTIAL PORTION OF GOTO-RULER / TO FIX SOME PARTICULARLY TRICKY BUGS. / EDIT HISTORY ONLY UPDATED FOR ROUTINES / NOT EXCLUSIVELY USED BY GOTO-RULER. / 156 WCE 17-NOV-83 FIX FOR L.P TO PRINTER NOT SCROLLING AND / DUPLICATE WARNINGS FOR LACK OF SPACE / 155 DMB 03-NOV-83 FIX VARIOUS GOTO-RULER BUGS / 154 WJD 31-OCT-83 MAKE GOLD_BOTTOM ACT LIKE GTP / and remove GOLD_HALT process from GTP & GOLD_BOTTOM / 153 WCE 27-OCT-83 REMOVED ALL PREVIOUS EDIT HISTORIES FOR / NEW VERSION 1.5 SOURCE FILES / WRITE OUT CODE FOR THE EDITOR OVERLAYS FIELD 0 / FIELD WHERE RXHAN IS LOCATED *200 / START ADDRESS USED BY OS8 "GO" COMMAND JMP I .+3 / LOCATION USED TO START UP RXHAN JMP I .+1 / LOCATION USED TO RETURN TO OS8 MONITOR 7605 / ADDRESS OF OS8 MONITOR RETURN POINT RXLOAD / ADDRESS OF START LOCATION FOR RXHAN *RXLDLS / ADDRESS WITHIN RXHAN TO OVERLAY RXEWT / WRITE FUNCTION CODE 0 RXQBLK / ADDRESS OF QUEUE BLOCK TO USE . / ADDRESS OF TABLE OF DISK COMMANDS DLOEDO ;0;CDF 30;-17 / FIELD ONE EDITOR OVERLAYS DLOEDO+17;0;CDF 40;-20 / FIELD TWO EDITOR OVERLAYS DLOEDO+37;0;CDF 50;-17 / FIELD THREE EDITOR OVERLAYS 0 / / MISC GLOBAL SYMBOL DEFINITIONS FOR EDITOR OVERLAYS / CDFMYF= CDFEDT / EDITOR OVERLAY CODE EXECUTES IN EDITOR FIELD IFZERO OVLAYM / INITIALIZE MERGE OVERLAY ADDRESS OVRNUM= 0 / INITIALIZE OVERLAY NUMBER COUNTER ONE IFZERO OVLAY1 / INITIALIZE OVERLAY NUMBER ONE ADDRESS OV2NUM= 0 / INITIALIZE OVERLAY NUMBER COUNTER TWO IFZERO OVLAY2 / INITIALIZE OVERLAY NUMBER TWO ADDRESS / RPPGDS (GOTO-PAGE) DESCRIPTOR WORD BIT DEFINITIONS - / BIT VALUE: / IF SET MEANS: RPRULR= 4000 / RULER PRESENT IN THIS BLOCK RPMTHB= 100 / MATH BEGINS IN THIS BLOCK RPMTHO= 100 / PAGE IS WITHIN A MATH AREA RPMTHE= 100 / MATH ENDS IN THIS BLOCK DH1BL= 55 / OFFSET INTO HEADER BLOCK # 1 / FOR FIRST BLOCK IN DOCUMENT FIELD 3 *0 /*************************************************************************** /**** START OF OVERLAY **** /*************************************************************************** OVRNUM=OVRNUM+200 OVRBLK=OVRNUM%200+DLOEDO-1 / DISK BLOCK WHERE OVERLAY IS LOADED RELOC RELOC OVLAY1 OVRNUM OVSTLD= .-OVLAY1+OVRNUM /LOAD THIS OVERLAY FOR STRIP JMP OVJRTN OVSTPX= .-OVLAY1+OVRNUM JMP ESSTPX /SECOND HALF OF STRIP OVMRG4= .-OVLAY1+OVRNUM / DISK FULL EXIT POINT FOR MERGE IAC OVMRG3= .-OVLAY1+OVRNUM / FINAL MERGE OVERLAY JMP XVMRG3 OVINI1= .-OVLAY1+OVRNUM / NORMAL EDIT INITIALIZE TAD (-DLSTAT) / PICK UP ADDRESS OF STATUS CODE CIFMNU / CHANGE TO MENU FIELD PGSWAP / AC=DLSTAT SO JUST READ IN STATUS CODE /D170 / INITIALIAZE THE SWAP AREA ON THE DISK BY STORING HALT INSTRUCTIONS IN /D170 / UNUSED LOCATIONS. ENTER WITH THE DATA FIELD POINTING TO THIS FIELD /D170 TAD (SWPEND) / POINTER TO FIRST MEMORY LOCATION /D170 DCA T1 / STORE IN TEMPORARY COUNTER /D170 TAD (DSSTAT^400+SWPBEG-SWPEND) / NUMBER OF WORDS TO CLEAR /D170 CIA / MAKE COUNT NEGATIVE /D170 DCA T2 / STORE NEGATIVE COUNT OF WORDS TO CLEAR /D170 CDFMNU / CHANGE TO MENU FIELD /D170 CLRLOP, TAD (7402) / PICK UP HALT INSTRUCTION /D170 DCA I T1 / STORE IN MENU FIELD /D170 ISZ T1 / BUMP COUNTER TO NEXT ADDRESS /D170 ISZ T2 / INCREMENT COUNTER - SKIP IF DONE /D170 JMP CLRLOP / NOT DONE, GO DO IT AGAIN CDFMYF / CHANGE DATA FIELD BACK TO THIS FIELD CIFMNU / CHANGE INSTRUCTION FIELD TO MENU FIELD PGSWAP / AC=0, SAVE SWAP AREA & RELOAD MENU CODE JMS MNUGET MNFNO DCA FILENO DCA FORMNO / CLEAR FORM NUMBER (USED AS FLAG TO INDICATE / NOT IN LIST PROCESSING DCA FILOPT /******************** EDITOR MATH INIT CALL **************************** / THE FOLLOWING CALL IS MADE TO THE MATH FIELD TO INITIALIZE THE MATH / MODULE CODE AND SET "MTHTYP" TO 1 IN THE MATH FIELD IN PREPARATION / FOR USING EDITOR MATH. A 1 IS PLACED IN THE AC BEFORE THE CALL TO TELL /"RTRN4" THAT IT IS TO INIT FOR EDITOR MATH NOT LIST PROCESSING MATH / NOTE THAT THIS SAME INIT CALL TAKES PLACE IN "OVEXIT" AND HERE IN /"OVINI1". AC0001 / SET THE AC = 1 CIFMTH / CHANGE PROGRAM CONTROL TO MATH FIELD JMS RTRN4 / GO SET "MTHTYP" = 1; AND INIT MATH MODULE /****************** END MATH INIT CALL ***************************** CIFMNU / CALL ROUTINE IN FIELD TWO TO LOAD JMS I OLAYCL / IN THE EDITOR MATH OVERLAY 10 / NUMBER OF THE EDITOR MATH OVERLAY DCA BUFBEG TAD (BUFEND) DCA BUFSIZ /D171 JMS CPYBUF /D171 -200 /D171 CDFMYF /D171 MGOVLY-1 /D171 CDFMYF /D171 OVLAYM-1 TAD (XGETET) DCA MGPTC1 TAD (ESGETX&177+4600) DCA MGPTC2 TAD MGPTC2 DCA MGPTC3 TAD MGPTC3 DCA MGPTC4 CDFSYS TAD I (CLOCK+3) MQL / SAVE MINUTES AND HOURS AT TAD I (CLOCK+4) / START OF EDIT CDFMYF DCA OLDHR MQA DCA OLDMIN TAD (WIDTH-COLM81) / SET TO NARROW SCREEN AT STARTUP /A186 DCA WIDNAR / /A186 JMP OVJRTN XVMRG3, DCA MRGDNC / SET EXIT CONDITION CODE CURMOV NOP / FINISH WITH STYLE JMS CLR132 / REVERT TO 80-COLUMN MODE PUTESC / CLEAR SCREEN "[&177+4000 "2&177+4000 "J-200 JMS PROMPT MSGF / SHOW WE'RE ALMOST DONE AC7777 CHKPTR SMA CLA JMP .-3 / GET TO STX MRGDNA, AC0001 CHKPTR SNA JMP .-3 / IGNORE NULLS SPA CLA JMP MRGDNB / JUMP IF ETX TAD I CURPTR PUTSTX / PUT OUT REAL CHAR JMP MRGDNA / AND LOOP FOR ALL MRGDNB, TAD FILENO SZA CLA JMP MRGDNF / JUMP IF MERGE TO FILE / ELSE CLOSE PRINTER AC7777 PUTSTX / SET EOF FLAG (AND WAIT FOR PRINTER) JMP MRGDNX / THEN EXIT MRGDNF, JMS DSKCAL XDSKCL / CLOSE EDIT FILE MRGDNX, CLA CDFMYF / CHANGE DATA FIELD TO THIS FIELD /A170 CIFMNU / CHANGE INSTRUCTION FIELD TO MENU FIELD /A170 PGSWAP / AC=0, SAVE SWAP AREA & RELOAD MENU CODE /A170 TAD MRGDNC / LOAD CONDITION CODE JMP EDEXI3 / THEN EXIT MRGDNC, .-. X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------------- PAGE / MGOVLY MOVED TO WPEDIT RESIDENT AREA BY EDIT 171 / STRP13 SEARCH FOR NEXT LINE / / ESSTPX, CDFBUF TAD I CURPTR /FETCH FIRST CHAR JMP STRP14 STRP13, ADVSPC JMP STPEX1 STRP14, AND P177 ZZCASE STPTB3-1 / ECNWLN; STRP15 /NEWLINE COULD BE GOOD / ECNWPG; STPEX2 /NEWPAGE HERE IS NONO / ECSTRL; STPEX2 /SAME WITH RULER / ECMDFL; STRP16 /MODIFIED FLAG SKIP INC CURSOR / 0 ISZ CURSOR STRP16, JMP STRP13 /GO BACK AND CHECK NEXT CHARACTER /C218 /D218 STRP16, CURMOV /D218 JMP STPEX1 /EOF IS ACTUALLY CATASTROPHIC FAILURE /D218 JMP STRP13 /GO BACK AND CHECK NEXT CHARACTER STRP15, TAD I CURPTR /WHAT TYPE OF NEWLINE? TAD (-ECSLPT) /SELECT POINT? SNA JMP STRP17 /YES FINISH OUT TAD (ECSLPT-ECNWLN) /HARD RETURN? SZA CLA JMP STPEX1 /NOPE BAD DATA STRP22, AC0001 CURMOV JMP STPEX1 /CATO. ERROR TAD I CURPTR AND P177 TAD (-ECNWPG) SNA CLA JMP STRP20 TAD CURPTR DCA IX1 TAD LINE23 DCA CURPTR BKPPTR HLT AND P177 TAD (-ECNDRL) SNA CLA JMP STRP18 STRP23, TAD IX1 DCA CURPTR JMS OV2JMP OVSTRP / STRP18 RULER ABORT / / STRP18, TAD IX1 DCA CURPTR JMP STPEX1 / STRP20 CHECK CURRENT PAGE MARK / / STRP20, TAD I CURPTR TAD (-ECPCT1) SNA JMP STRP25 TAD (ECPCT1-ECPCT2) SNA CLA JMP STPEX1 JMP STRP22 STRP25, AC0001 CURMOV JMP STPEX1 TAD I CURPTR TAD (-ECSLPT) SNA JMP STRP17 TAD (ECSLPT-ECPCT2) SZA CLA JMP STRP25 JMP STRP22 / STPXE1 EXIT VIA STPNFG / / STPEX1, JMS OV2JMP OVSNFG / STPEX2 EXIT VIA STPEXB / / STPEX2, JMS OV2JMP OVSEXB STPTB3, ECNWLN; STRP15 /NEWLINE COULD BE GOOD ECNWPG; STPEX2 /NEWPAGE HERE IS NONO ECSTRL; STPEX2 /SAME WITH RULER ECMDFL; STRP16 /MODIFIED FLAG SKIP INC CURSOR 0 STPTB4, ECNWLN; STRP28 ECNWPG; STRP28 ECTAB; STRP28 0 STPTB5, ECNWLN; STRP12 /NO COLUMN TO STRIP ECNWPG; STPNFG /BAD DATA FORMAT ECTAB; STRP28 0 X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------------- PAGE /*************************************************************************** /**** START OF OVERLAY **** /*************************************************************************** OVRNUM=OVRNUM+200 / OVERLAY NUMBER OVRBLK=OVRNUM%200+DLOEDO-1 / DISK BLOCK WHERE OVERLAY IS LOADED RELOC RELOC OVLAY1 OVRNUM / CURRENT OVERLAY CONTENTS IFDEF FORIN < ACCENT= .-OVLAY1+OVRNUM JMP XCCENT > / END IFDEF FORIN OVSPCE= .-OVLAY1+OVRNUM TAD FORMNO SNA CLA JMP EISPCE OVLJMP OVMRG4 / QUIT NOW IF MERGING OVSPC2= .-OVLAY1+OVRNUM ISZ BLKALM / FORCE HARD LIMIT JMP EISPCE OVINIT= .-OVLAY1+OVRNUM / CURRENT OVERLAY TAD RPBIN1 / EXCLUSIVE GOTO PAGE FLAG SMA CLA / DONT' CLEAR SCREEN IF GOTO PAGE JMS CLR132 / REVERT TO 80 COLUMNS CDFFIO DCA I (SCFSPC) / CLEAR SPACE LEFT INDICATOR CDFMYF TAD FILENO / GET THE OUTPUT FILE NUMBER SNA / CHECK FOR LIST PROCESSING TO A PRINTER JMP INIX00 / YES, SKIP AROUND DOCUMENT RELATED ITEMS MQL TAD FILOPT / SAVE FILE #, SET NORMAL OPTION JMS DSKCAL XDSKIN / INIT FILE SZA JMP EDEXI3 / QUIT IF OPEN FAILED JMS HDRGET HDRPSZ / CHECK PAGE SIZE SZA CLA JMP .+5 / IF ZERO, JMS MNUGET MNPGSZ / GET DEFAULT PAGE SIZE JMS HDRPUT HDRPSZ / AND PUT TO HEADER JMS HDRGET / GET FILE SIZE FROM DOCUMENT HEADER HDRFSZ / POINTER TO FILE SIZE JMS MNUPUT / STORE FILE SIZE FOR STATUS LINE LINUSD-MUBUF / LOCATION FOR BLOCKS USED IN DOCUMENT JMS MNUPUT / CLEAR BLOCKS FREE FOR STATUS LINE LINFRE-MUBUF / LOCATION FOR BLOCKS FREE IN DOCUMENT JMS MNUPUT / CLEAR HIGH ORDER PAGE NUMBER LINPGH-MUBUF / HIGH ORDER PAGE NUMBER IN DOCUMENT AC0001 / SET TO A COUNT OF ONE JMS MNUPUT / STORE PAGE NUMBER FOR STATUS LINE LINPGL-MUBUF / LOW ORDER PAGE NUMBER IN DOCUMENT AC0001 / SET TO A COUNT OF ONE JMS MNUPUT / STORE LINE NUMBER FOR STATUS LINE LINNUM-MUBUF / LOCATION FOR LINE NUMBER IN DOCUMENT /D157 TAD (3777) / CLEAR DON'T-DISPLAY-MSG FLAG /D157 AND RPBIN1 / FROM UNIQUE GOTO PAGE WORD /D157 DCA RPBIN1 /D156 TAD FORMNO / GET THE FORM NUMBER /D156 SZA CLA / ARE WE MERGING (LIST PROCESSING) /D156 JMP INIX01 / YES, PICK UP MAXIMUM NUMBER OF LINES /D156 JMS MNUGET / NO, THEN SET UP FOR SCROLLING AREA /D156 MNSTAT / PICK UP NUMBER OF STATUS LINES /D156 CIA / MAKE NEGATIVE FOR SUBTRACT /D156 INIX01, TAD (NPTRS) / PICK UP MAXIMUM NUMBER OF LINES /D156 DCA SCRNLN / SAVE FOR USE BY EDITOR ROUTINES TAD (-24) / USE 20 AS CUTOFF AT ALL TIMES INIX00, DCA SPCCHK / FOR L.P. TO A PRINTER, USE A VALUE OF ZERO DCA BLKALM / CLEAR SPACE ALARM FLAG /D156 DCA BLWTCH / CLEAR FREE BLOCK WATCH WORD TAD FORMNO / GET THE FORM NUMBER /A156 SZA CLA / ARE WE MERGING (LIST PROCESSING) /A156 JMP INIX01 / YES, PICK UP MAXIMUM NUMBER OF LINES /A156 JMS MNUGET / NO, THEN SET UP FOR SCROLLING AREA /A156 MNSTAT / PICK UP NUMBER OF STATUS LINES /A156 CIA / MAKE NEGATIVE FOR SUBTRACT /A156 INIX01, TAD (NPTRS) / PICK UP MAXIMUM NUMBER OF LINES /A156 DCA SCRNLN / SAVE FOR USE BY EDITOR ROUTINES /A156 / +++ Modify RULOFF Case-Table to turn Display-Rulers ON or OFF. /a177 / /a177 / MNSTAT = 0 or 1 ... Ruler Display ON /a177 / MNSTAT = 2 or 3 ... Ruler Display OFF /a177 / /a177 JMS OV2JMP / LOAD OVERLAY 2 /a177 OVRLOF / Adjust Case-Table and Continue /a177 / INITIALIZE EDIT PAGE 0 CONTROL WORDS JMS CLRMEM / CLEAR MEMORY SINZRO-1 / FROM -NINZRO / - NUMBER OF LOCATIONS CDFEDT / CDF INSTRUCTION / INITIALIZE EDIT MATH PAGE 0 CONTROL WORDS JMS CLRMEM / CLEAR MEMORY MF5P0ET-1 / FROM -LMF5P0ET / - NUMBER OF LOCATIONS CDFLP / CDF INSTRUCTION / INITIALIZE EDIT BUFFER AC7777 / SET POINTER TO BUFFER_BEGIN - 1 TAD BUFBEG DCA X0 CDFBUF TAD (ECBFBG) / GET BUFFER BEGIN CODE DCA I X0 / INSTALL AT TOP OF BUFFER TAD (ECSTX) / GET START OF TEXT CODE DCA I X0 / INSTALL IN NEXT BUFFER LOCATION TAD (ECETX) / GET END OF TEXT CODE DCA I X0 / INSTALL IN NEXT BUFFER LOCATION TAD X0 / SET CURPTR TO POINT AT ETX CHAR. THAT / WAS JUST INSTALLED DCA CURPTR / CLEAR THE REST OF THE BUFFER TAD BUFSIZ / SET COUNTER FOR NO. OF WORDS TO CLEAR CIA TAD (4) DCA X1 DCA I X0 / CLEAR ONE LOCATION ISZ X1 / SKIP IF: FINISHED JMP .-2 / NOT FINISHED! DO THE NEXT LOCATION! TAD (ECBFND) / INSTALL BUFFER_END CHARACTER DCA I X0 / INITIALIZE SCREEN / *** / INITIALIZE EDITOR'S PTRBLK (POINTER_BLOCK) TABLE CDFMYF JMS CLRMEM / CLEAR MEMORY PTRBLK-1 / FROM INIXLN, -NPTRS+1 / - NUMBER OF LOCATIONS CDFEDT / CDF INSTRUCTION TAD CURPTR / SET LAST LOC. IN PTRBLK = CURPTR DCA I X0 TAD CURPTR / INITIALIZE LINE 23 POINTER /A157 DCA LINE23 /A157 DCA CURSOR / CLEAR CURSOR /A157 DCA LOWLIM / CLEAR LOLIM /A157 AC7777 / A180 CIFMNU PGSWAP / CLEAR CURRENT RULER IF NOT DOING GOTO-PAGE, GOLD:BOT, OR GOTO-RULER; /A157 / CLEAR "GOTO-PAGE, GOLD:BOTTOM, OR GOTO-RULER" FLAG. /A157 CLA CLL CML RAR / L,AC = 04000 /A157 TAD RPBIN1 / LINK=RPBIN1 BIT 0,AC0=-RPBIN1 BIT 0 /A157 SMA /A157 DCA RPBIN1 / CLEAR RPBIN1 BIT 0 /A157 / (CLEAR "GTP, GOLD:BOT, OR GTR" FLAG, /A157 / BUT FLAG LIVES ON IN LINK) /A157 JMP INIX04 / CONTINUE ON NEXT PAGE X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------------- PAGE /D157 INIX04, TAD CURPTR / INITIALIZE LINE 23 POINTER /D157 DCA LINE23 /D157 DCA CURSOR / CLEAR CURSOR /D157 DCA LOWLIM / CLEAR LOLIM / INHIBIT CLEARING OF CURRENT RULER FOR GOTO-RULER /A157 INIX04, SZL CLA / G-T-PAGE, GOLD:BOT OR G-T-RULER? /A157 JMP INIX05 / YES: PRESERVE CURRENT RULER /A157 JMS CLRULR / NO: CLEAR RULERS JMS COPRUL INIX05, TAD FORMNO /M157 SNA JMP .+3 JMS DSKCAL XRDFIN / INIT FORM FILE IF MERGING JMS LODCHR / GET FIRST CHARACTER JMP INIX03 / THERE WAS NONE, GO INSERT A RULER TAD (-ECSTRL) / IS IT THE START OF A RULER SNA CLA / SKIP IF: NOT JMP INIX02 / RULER FOUND, NO CHANGE NEEDED / NO RULER! INSERT ONE! INIX03, CDFMYF JMS RLGETS JMS INSRUL / ELSE INSERT RULER 0 TAD (ECRMFL) JMS INSRL1 / AND RLRMOD CODE TAD LINE23 DCA CURPTR / RESET TO START OF MEM INIX02, PUTESC / SET APPLICATION KEYPAD MODE "=-200 JMS SETCUR / GET TO BOTTOM LINE AC0003 DCA SCRLCT / INIT TO TOP TAD FORMNO / AND START UP RIGHT PROCESS SNA CLA JMP TOOVJRTN / CHECK AMOUNT OF ROOM ON DISK BEFORE / RESUME OF EDIT OR GTP / AC7777 / SET AC = -1 /A170 / CIFMNU / CHANGE INSTRUCTION FIELD TO MENU FIELD /A170 / PGSWAP / AC=-1 SO JUST LOAD IN THE SAVE AREA /A170 OVLJMP OVMRG2 / ... OR MERGE EISPCE, JMS CLR132 / MAKE SURE THE SCREEN IS IN NARROW MODE AC0003 / SET UP TO RESET SCROLL REGION CIFMNU / CHANGE INSTRUCTION FIELD TO MENU FIELD JMS I (CALLN1) / RESET SCROLL REGION SET ABSOLUTE MODE / CIFMNU / CHANGE INSTRUCTION FIELD TO MENU FIELD / PGSWAP / AC=0, SAVE SWAP AREA & RELOAD MENU CODE TAD BLKALM / CHECK FOR HARD LIMIT SZA CLA / IF NOT SET, THEN TAKE SOFT APPROCH /A156 /D156 SNA CLA /D156 JMP EISPC3 / NOT HARD, TAKE SOFT APPROACH /D156 TAD BLWTCH / SEE IF THIS IS THE FIRST WARNING /D156 SZA CLA EISPC2, AC0002 / SET-UP MENU TO FORCE EXIT EISPC3, IAC / TAKE SOFT WARNING APPROACH JMS MNUPUT MNTMP1 CDFFIO TAD I (SCFSPC) JMS MNUPUT MNTMP2 CIFMNU PGSWAP CIFMNU JMS I MNUCAL DLMEM1 /D156 TAD BLKALM / IS THIS A FORCE EXIT? /D156 SNA CLA /D156 JMP EISPC4 / NO, RETURN TO EDITOR /D156 TAD BLWTCH / COULD BE, CHECK BLWTCH /D156 SZA CLA / FIRST WARNING! DON'T FORCE FILE TAD BLKALM / IS THIS A FORCE EXIT? /A156 SZA CLA /A156 JMP EIFILE / YES! FILE THE DOCUMENT! EISPC4, AC7777 / SET AC = -1 CIFMNU / CHANGE INSTRUCTION FIELD TO MENU FIELD PGSWAP / AC=-1 SO JUST LOAD IN THE SAVE AREA TAD WIDNAR / ARE WE FORCED WIDE? /M192 SNA CLA / SKIP IF NOT /M192 JMS SET132 / YES JMS CLSSET / USE CLSCRN IN FXSCRL TO DISPLAY STATUS TAD OPNFLG / CHECK VALUE OF OPEN FLAG SNA CLA / SKIP IF: OPENING A DOCUMENT JMP EINEXT JMP OVJRTN / RESUME NORMAL EDIT OR GTP /++ / CLRMEM / FUNTIONAL DESCRIPTION: CLEAR_MEMORY / THIS ROUTINE WILL CLEAR ANY SECTION OF MEMORY AS PER PARAMETERS / SPECIFIED AT CALLER+1, 2, AND 3. / CALLING SEQUENCE: JMS CLRMEM / ADDRESS - 1 TO START CLR / -NUMBER OF LOCATIONS TO CLR / CDF INSTRUCTION / INPUT PARAMETERS: AC = 0 / IMPLICIT INPUT: X0, T1 / OUTPUT PARAMETERS: AC = 0 / IMPLICIT OUTPUT: X0, T1, CLRME1 / COMPLETION CODE: NONE / SIDE EFFECTS: NONE /-- CLRMEM, XX / CLEAR_MEMORY TAD I CLRMEM / GET ADDRESS-1 OF MEM. TO BE CLEARED DCA X0 / SAVE IT ISZ CLRMEM / BUMP RETURN POINTER TAD I CLRMEM / GET -NUMBER OF LOCATIONS TO BE CLEARED DCA T1 / SAVE IT ISZ CLRMEM / BUMP RETURN POINTER TAD I CLRMEM / GET CDF INSTRUCTION FOR MEM. TO BE CLEARED DCA CLRME1 / SAVE IT ISZ CLRMEM / BUMP RETURN POINTER CLRME1, .-. / HOLDS CDF INSTRUCTION DCA I X0 / BUMP POINTER THEN CLEAR LOCATION ISZ T1 / FINISHED? SKIP IF: SO JMP .-2 / CLEAR THE NEXT LOCATION CDFMYF / RESTORE DATA FIELD JMP I CLRMEM / RETURN / THIS ROUTINE CHECKS TO SEE HOW MUCH ROOM IS LEFT ON THE DISKETTE AT / OPEN TIME. IF THE NUMBER OF BLOCKS LEFT IS GREATER THAN THE CUTOFF / POINT (SPCCHK) RESUME. ELSE, IF THE NUMBER OF BLOCKS IS GREATER / THAN 6, THEN WARN THE USER ABOUT DISK SPACE AND RESUME. ELSE / THE NUMBER OF BLOCKS LEFT IS LESS THAN 6, DO NOT ALLOW THE USER / TO EDIT THE DOCUMENT. / THIS ENTIRE ROUTINE IS EDIT #132 TOOVJRTN, AC0001 / DCA OPNFLG / SIGNIFIES OPENING DOCUMNET CDFFIO / TAD I (SCFSPC) / GET THE # OF AVAILABLE BLOCKS CDFMYF / DCA BLWTCH / AND SAVE NUMBER OF FREE BLOCKS /M156 TAD BLWTCH / RESTORE FREE BLOCK COUNT /M156 TAD SPCCHK / COMPARE TO CUTOFF POINT SMA CLA / SKIP IF: BELOW CUTOFF POINT JMP EISPC4 / ENOUGH BLOCKS LEFT, GO PAGE SWAP AREA TAD BLWTCH / RESTORE FREE BLOCK COUNT /M156 TAD (-7) / COMPARE TO HARD LIMIT SMA CLA / SKIP IF: LESS THAN HARD LIMIT JMP EISPC3 / SOFT LIMIT, WARN USER /D156 ISZ BLWTCH ISZ BLKALM / SETTING THIS WORD TELLS EISPC2 THAT USER JMP EISPC2 / HAS REACHED HARD LIMIT, FILE THE DOCUMENT OPNFLG, 0 / IF = 1: OPEN IFDEF FORIN < / HERE TO TEST FOR ACCENTED CHARACRTERS ON INPUT XCCENT, TAD CHAR1 / GET CHARACTER BACK SPA / INPUT COMMAND? JMP EINEXC / YES, PROCESS COMAND CLA TAD (TABLE1-1) JMS SEARCH / LOOK FOR CHARACTER IN TABLE JMP ACENT1 / NOT FOUND TAD (ECSTOV) / FOUND INSCHR / INSET DEAD KEY START TAD CHAR1 INSCHR / INSERT CHARACTER ACENT0, GETINP / GET NEXT CHARACTER SMA / SPECIAL? JMP ACENT2 / NO JMS BEEPER / DCA CHAR1 /YES, SAVE CHARACTER JMP ACENT0 / ADVPTR / ADVANCE POINTER NOP / JMP EIBAD /? NOP / TAD (ECNDOV) NOP / JMS INSRL1 / STORE END OF DEAD KEY SEQUENCE NOP / TAD CHAR1 NOP / JMP EINEXC / NOW EXECUTE SPECIAL CHARACTER ACENT2, INSCHR / INSERT 2ND CHARACTER TAD (ECNDOV) SKP / INSERT DEAD KEY SEQ. END ACENT1, TAD CHAR1 / CHAR NOT FOUND IN TABLE JMP EINSRT / INSERT INTO TEXT NORMALLY > / END IFDEF FORIN X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------------- PAGE /*************************************************************************** /**** START OF OVERLAY **** /*************************************************************************** OVRNUM=OVRNUM+200 OVRBLK=OVRNUM%200+DLOEDO-1 / DISK BLOCK WHERE OVERLAY IS LOADED RELOC RELOC OVLAY1 OVRNUM OVMRG1= .-OVLAY1+OVRNUM / "MERGE" OVERLAY # 1 JMS CPYBUF / SAVE CONTENTS OF FIRST SWAP AREA BLOCK /A170 -200 / NUMBER OF WORDS TO SAVE /A170 CDFMNU / SOURCE FIELD /A170 SWPBEG-1 / SOURCE ADDRESS /A170 CDFMYF / DESTINATION FIELD /A170 OVLAYM-1 / DESTINATION ADDRESS /A170 TAD (-DLSTAT) / PICK UP ADDRESS OF STATUS CODE /A170 CIFMNU / CHANGE TO MENU FIELD /A170 PGSWAP / AC=DLSTAT SO JUST READ IN STATUS CODE /A170 JMS CPYBUF / RESTORE CONTENTS OF SWAP AREA BLOCK /A170 -200 / NUMBER OF WORDS TO SAVE /A170 CDFMYF / SOURCE FIELD /A170 OVLAYM-1 / SOURCE ADDRESS /A170 CDFMNU / DESTINATION FIELD /A170 SWPBEG-1 / DESTINATION ADDRESS /A170 TAD (7400) / PICK UP SPECIAL VALUE OF NO-OP CODE /A209 JMS MNUPUT / STORE FOR SWAP AREA LOADED CHECK /A209 CALLN1+2-MUBUF / FLAG LOCATION USED BY CALLER ROUTINE /A209 CIFMNU / CHANGE INSTRUCTION FIELD TO MENU FIELD /A170 PGSWAP / AC=0, SAVE SWAP AREA & RELOAD MENU CODE /A170 TAD (5000) DCA BUFBEG / SET UP EDIT BUF PTRS TAD (BUFEND-5000) DCA BUFSIZ TAD EDMERG DCA EDITOR / COPY RETURN ADDR TAD (CDILP) /A191 DCA EDEXI3 / SET UP RETURN FIELD INSTRUCTION /A191 JMS MNUPUT / CLEAR EDITOR LOCK WORD SO THAT THE /A191 OLL110-MUBUF / EDITOR CODE IN MEMORY IS REFRESHED /A191 JMS CPYBUF -200 CDFMYF MGOVLY-1 CDFMYF OVLAYM-1 TAD (XRDFNC) DCA MGPTC1 / DO PATCHES TAD (SKP CLA) DCA MGPTC2 TAD (SKP CLA) DCA MGPTC3 TAD (ESGETX&177+4600) DCA MGPTC4 CDFBUF / GET ARGS AC7777 DCA X0 TAD I X0 DCA FORMNO TAD I X0 DCA FILENO TAD I X0 DCA FILOPT TAD FILENO SZA CLA JMP MRGINB / INIT PRINT IF NEC. TAD (PRTBUF-1) / GET THE STARTING LOC. OF THE DCA X0 / MERGE-TO-PRINT BUFFER TAD (-PRTSIZ+1) / AND ITS SIZE DCA T1 DCA I X0 / SO THAT ISZ T1 / WE CAN JMP .-2 / CLEAR THE BUFFER TAD (PRTBUF-1) DCA I X0 / AND SET END MARKER CDFMYF TAD (ESPUTX&177+5600) DCA MGPTC4 / RE-PATCH FOR PRINTER AC7777 / Set "printer not halted yet" flag. DCA MRGHFG / Reset "printer halted" flag. CDFPRT RIF TAD (CIF) / GET CIF TO MY FIELD DCA I (PRIRFD) / SET CALL TO OUR ROUTINE TAD (GETPRT) DCA I (PRIRAD) MRGINB, OVLJMP;OVINIT / NOW INIT REST OF WORLD X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------------- PAGE / THIS ROUTINE RETURNS A NON-ZERO CHARACTER, UNLESS THE END OF THE FILE IS / REACHED. WHEN THE END OF THE FILE IS REACHED, THE ROUTINE CONTINUES TO / RETURN A ZERO EACH TIME IT IS INVOKED. HOWEVER, THE END OF FILE MARK IS / NEVER REMOVED, SO THE ROUTINE MUST BE "CLOSED" IF LIST PROCESSING IS TO / TERMINATE. TO DO THIS, SIMPLY CALL GETPRT WITH A NON-ZERO AC. MGOVLY, RELOC OVLAYM / DEFINE THE MERGE OVERLAY GETPRT, XX / CALLED FROM PRINTER FOR MERGE OUTPUT CDFBUF / map buffer field for final call. SZA CLA JMP GETPRZ / YES--CLOSE THINGS OFF GETPRY, CDFBUF TAD I PRGETP / GET NEXT CHAR SNA SPA JMP GETPRV / JUMP IF WRAP OR EOF GETPRZ, MQL / SAVE CHAR DCA I PRGETP / SHOW WE GOT IT CDFSYS DCA I (INTFLG) / LET EVERYBODY WAKE UP ISZ PRGETP / WHILE WE FIX PTR CLA MQA / RETRIEVE CHAR GETPRX, CIF CDFPRT / RETURN CIF JMP I GETPRT GETPRV, SNA JMP GETPRW / JUMP IF NO CHARACTERS TO BE HAD IAC SNA JMP GETPRX / RETURN IMMEDIATELY IF END OF FILE DCA PRGETP / ELSE RESET FOR WRAPPED BUFFER JMP GETPRY / AND RETRY GETPRW, CDFMYF CIFSYS JWAIT / WAIT FOR OUTPUT JMP GETPRY / THEN TRY AGAIN PRGETP, PRTBUF / PRINT BUFFER READ PTR PUTST2, HLTTST / See if GOLD:HALT has been pressed. SKP / this return if yes. Process GOLD:HALT JMP PUTST4 / This return if no. continue waiting. AC7777 / check printer status. CDFPRT / get printer status word. TAD I (PRSTTS) / ... SNA CLA / Skip if FR<> 1 (stop/ error status). JMP PUTST4 / JMP to ignore the HALT. continue WAIT TAD MRGHFG / have we halted thee spooler yet? SNA / skip if no. Do it this time. JMP PUTXIT / Ignore character. DCA I (PABORT) / set printer abort flag. unhang spooler AC0001 DCA I (PRSTOP) / set printer stop flag. AC0002 DCA I (PRACTN) / set stop action to cancel. / set flag saying that we already DCA MRGHFG / halted the spooler. PUTXIT, CDFBUF / return to calling routine. JMP ESPUTY / ... PUTST4, CDFMYF CIFSYS JWAIT PUTST1, JMS KBDCHK / CHECK FOR PRINTER COMAND CDFSYS DCA I (INTFLG) / WAKE PEOPLE UP CDFBUF TAD I PRPUTP / CHECK FOR WRAP/ FULL SMA JMP .+6 / JUMP IF NOT WRAP IAC SNA JMP PUTST2 / JUMP IF ALL DONE DCA PRPUTP JMP .-7 / ELSE RESET AND RETRY SZA CLA JMP PUTST2 / JUMP IF FULL TAD T1 DCA I PRPUTP / STORE GOOD CHAR IN BUFFER TAD T1 SPA CLA JMP PUTST3 / JUMP IF ALL DONE ISZ PRPUTP / BUMP BUFFER PTR JMP ESPUTY / RETURN PUTST3, DCA T1 / SAVE CHAR JMP PUTST1 / JOIN OUTPUT LOOP PRPUTP, PRTBUF / OUTPUT PTR TO PRINT BUFFER MRGHFG, 0 / 0 until printer is told to cancel. KBDCHK, XX / CHECK KEYBOARD FOR PRINTER COMMAND KBDCH1, CDFMYF CIFSYS TTYIN / Get char from KB: (not UDK). JMP I KBDCHK / RETURN IF NONE SPA JMP KBDCH4 / COMPLAIN IF SPECIAL AND P177 XLTUPR TAD (-"R+200) SNA JMP KBDCH5 / RESUME? TAD ("R-"N) SNA JMP KBDCH6 / NEW PAGE? TAD ("N&177) / restore origional character. TAD I HLTLST / see if part of GOLD:HALT string. ISZ HLTLST / bump string pointer. SZA CLA JMP KBDCH4 / JMP if not part of GOLD:HALT. TAD I HLTSTR / are we at the end of GOLD:HALT? SZA CLA JMP KBDCH1 / Jmp if NO. Get next input character. JMP KBDCH7 / Hit the end. reset pointer but no beep KBDCH4, JMS BEEPER KBDCH7, TAD (HLTSTR) / reset GOLD:HALT string pointer. DCA HLTLST / ... JMP KBDCH1 / COMPLAIN AND IGNORE IF ILLEGAL KBDCH5, AC0006 SKP / RESUME, KBDCH6, AC0001 / OR NEW PAGE CDFPRT DCA I (PRACTN) JMP KBDCH1 / AND CONTINUE HLTLST, HLTSTR / pointer into GOLD:HALT string. HLTSTR, -33;-117;-120;-140;0 / GOLD:HALT sequencee. X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------------- PAGE /*************************************************************************** /**** START OF OVERLAY **** /*************************************************************************** OVRNUM=OVRNUM+200 OVRBLK=OVRNUM%200+DLOEDO-1 / DISK BLOCK WHERE OVERLAY IS LOADED RELOC RELOC OVLAY1 OVRNUM / UTILITY OVERLAY OVDLTE= .-OVLAY1+OVRNUM JMP XVDLTE / / OVSWAP= .-OVLAY1+OVRNUM / SWAP ENTRY / / OVSWAP which used to be here has been moved to OVHELP to allow /M225 / it more room to handle MCS and give Hyphenation space to also /M225 / handle MCS. /M225 / / / OVTIME overlay has now also been moved to OVHELP to allow /M231 / Hyphenation more space for 8 bit support /M231 / OVHYPS= .-OVLAY1+OVRNUM / HYPHEN PUSH XVHYPS, DCA SCRLFL / CLEAR SCROLL FLAG XVHYPB, AC7777 CURMOV JMP EIBAD / BACK UP TO PREVIOUS LINE TAD SCRLFL SZA CLA / Skip if no. JMP XVHYPC / Jmp if yes. see where we are. AC2000 / see if there is an invisible-hyphen. AND I CURPTR / ... SNA CLA / skip if yes. JMP XVHYPV / no. go to next prev posn. /M231 XVHYB1, TAD CURSOR / save earliest hyphen posn. /A231 IAC / make bais by 1 (not 0). DCA HYPSAV / ... JMP XVHYPB / go to next prev posn. XVHYPC, TAD I CURPTR / Get current character. JMS CHKALP JMP EIHYPT / SKIP IF NOT ALPHA /M231 AND (5777) DCA I CURPTR / CLEAR BREAK FLAG EIHYPY, CLA SLNMOD DCA SCRLFL / CLEAR SCROLL FLAG AGAIN EIHYPW, AC0001 CURMOV JMP EIHYPX / SET FLAG ON NEXT TAD SCRLFL SZA CLA JMP EIHYPX / UNLESS LINE TOO LONG TAD CURSOR / OR AT RIGHT MARGIN ALREADY CIA TAD RGTMAR SPA SNA CLA JMP EIHYPZ TAD HYPSAV / Did we see an invisible hyphen? SNA / Skip if YES. See if it's within ruler. JMP XVHYPD / No. Force normal hyphenization. TAD CURSOR / Compute cursor address of seen hyphen. CIA TAD RGTMAR SMA CLA JMP EIHYPZ / JMP if within ruler setting. XVHYPD, TAD I CURPTR JMS CHKALP JMP XVHYPR / OR CHAR NOT ALPHA /M231 AC2000 MQA DCA I CURPTR EIHYPZ, AC0001 CURMOV JMP EIHYPX / THEN ADVANCE LINE TAD SCRLFL SNA CLA JMP EIHYPZ / TO SHOW NEW HYPHENATION EIHYPX, JMP EIFIX / AND GO LISTEN /C168 EIHYPT, JMS HYPLMX / Is it 8 bit /A231 JMP EIHYPY / No .. go away /A231 JMP EIHYPY / Yes .. but we are already finished /A231 XVHYPR, JMS BHOOK / Check for 8 bit /A231 MCSTHY / 8 bit char ? /A231 JMP EIHYPZ / No /A231 TAD (2000) / Put on breaking bit /A231 DCA I CURPTR / Put char away again /A231 JMS HYBKUP / Now backup /A231 JMP EIHYPZ XVHYPV, JMS BHOOK / Check for 8 bit /A231 MCSTHY / /A231 JMP XVHYPB / No /A231 CLA / /A231 TAD I CURPTR / Get full char back /A231 DCA XVTEMP / Save char /A231 JMS HYBKUP / move back /A231 CLA / Clear out Start dead /A231 TAD XVTEMP / get char back /A231 AND (2000) / is breaking bit set ? /A231 SNA CLA / /A231 JMP XVHYPB / No get out /A231 JMP XVHYB1 / Yes , set HYPSAV /A231 OVHYPL= .-OVLAY1+OVRNUM / HYPHEN PULL XVHYPL, DCA SCRLFL / CLEAR SCROLL FLAG DCA HYPSAV / init previous HYPHEN posn. AC7777 CURMOV JMP EIBAD / BACK UP TO PREVIOUS LINE TAD SCRLFL SNA CLA JMP .-5 TAD I CURPTR JMS CHKALP JMP HYPLMC / Test for Pull on MCS /M231 AND (5777) DCA I CURPTR / CLEAR BREAK FLAG HYPLFN, SLNMOD AC7776 CURMOV JMP EIBAD / TWO MORE, SO WE CAN ADVANCE JMP EIHYPY / IN COMMON CODE HYPSAV, 0 / posn (0 bais) of next invisible hyphen. HYPLMC, JMS HYPLMX / Is it 8 bit /A231 JMP EIHYPZ / No .. go away /A231 JMP HYPLFN / Yes .. we are already finished /A231 HYPLMX, XX JMS BHOOK / Is this an MCS char /A231 MCSTHY / 8 bit char in Hyphenation /A231 JMP I HYPLMX / No , ignore /A231 DCA I CURPTR / Put char back /A231 ISZ HYPLMX / Bump return for 8 bit /A231 JMS HYBKUP / Now backup to start of dead /A231 JMP I HYPLMX / And rejoin Mainline /A231 HYBKUP, XX / Backup cursor /A231 BKPPTR / Backup /A231 NOP / Shouldn't happen .. /A231 BKPPTR / And again /A231 NOP / Shouldn't happen .. /A231 BKPPTR / Last one /A231 NOP / /A231 JMP I HYBKUP / Get out /A231 XVTEMP, 0 / Temp for char /A231 X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------------- PAGE XVDLTE, TAD (BASKET-1) DCA X5 / SET UP PTRS DCA BASKCT / AND COUNT FOR WASTEBASKET FILLING DCA PSTBLK / SHOW NO INCORE PASTE TAD CURPTR DCA DELUN1 / SAVE CURPTR JMS SETUNT / SET PROPER UNIT TYPE JMS RLEQTE / MAKE NWRUL=CURUL JMS LODCHR JMP DELUNZ / QUIT IF EOF JMS CHKUNT / CHECK FOR END OF UNIT DELNXT, XX SPA CLA JMP DELUNX / QUIT IF ALL DONE TAD I CURPTR / Get character to delete. AND P177 / isolate character bits. TAD (-LF) / compare against line terminator. SNA CLA / skip if not terminator. JMS RSTRLN / set to repaint entire line. TAD I CURPTR TAD (-ECSLPT) / CLEAR SELECT IF WE CROSS SNA JMP DELUNS TAD (ECSLPT-ECRMFL) SNA JMP DELUNM TAD (ECRMFL-ECSTRL) SNA JMP DELUNR DELUNE, TAD (ECSTRL-ECSTOV) SNA CLA JMP DELUNO TAD I CURPTR JMS ESJCHK SNA CLA JMP DELUNA DELUNP, JMS DELPUT / OTPUT TO WASTEBASKET DELUNA, DCA I CURPTR / DELETE CHAR AC0001 CHKPTR SNA JMP .-3 / GET NEXT CHAR SMA CLA JMP DELUNB / JUMP IF OK TAD I CURPTR DCA I DELUN1 / COPY ETX CODE TAD DELUN1 DCA CURPTR / RESET CURPTR DELUNC, ADVPTR JMP DELUNX / JUMP IF EOF JMP I DELNXT / ELSE TEST AGAIN DELUNB, TAD I CURPTR JMP I DELNXT DELUND, DCA I CURPTR / DELETE LAST CHAR DELUNX, TAD DELUN1 DCA CURPTR / RESET CURPTR SLNMOD TAD LINMOD JMS INSERT / SET MOD FLAG DELUNW, JMS CMPRUL JMP DELUNY / CHECK FOR RULER CHANGE JMS INSRUL DELUNY, TAD DELUN1 DCA CURPTR / RESET CURPTR (AGAIN) SLNMOD / SHOW MODS HAPPENED DELUNZ, JMP EIFIX / AND RETURN DELPUT, XX TAD BASKCT / PUT TO WASTEBASKET, IF NOT FULL TAD (-BASKSZ) SNA CLA JMP I DELPUT TAD I CURPTR DCA I X5 ISZ BASKCT JMP I DELPUT DELUNO, JMS DELPUT / OUTPUT TO WASTEBASKET DCA I CURPTR / DELETE ADVPTR JMP DELUNX TAD (-ECNDOV) / CHECK FOR END SZA CLA JMP DELUNO / LOOP IF NOT JMP DELUNP / ELSE OUTPUT AND RETURN DELUNM, TAD I CURPTR DCA RLRMOD / SAVE MOD FLAG JMP DELUNA DELUNS, DCA EDMODE / DELETE SELECT POINT JMP DELUNA DELUNR, TAD DELUN1 DCA CURPTR / RESET CURPTR JMS ESNWRL / GET NEW RULER TAD DELUN1 DCA CURPTR JMS DLTRLR / DELETE RULER JMP DELUNC DELUN1, 0 X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------------- PAGE /*************************************************************************** /**** START OF OVERLAY **** /*************************************************************************** OVRNUM=OVRNUM+200 OVRBLK=OVRNUM%200+DLOEDO-1 / DISK BLOCK WHERE OVERLAY IS LOADED RELOC RELOC OVLAY1 OVRNUM / CURRENT OVERLAY CONTENTS CURSAV=RPGETUNT / LOCATION ONLY USED BY GO-TO-PAGE OVCLKY= .-OVLAY1+OVRNUM / COLUMN CUT /A169 JMP COLKEY /A169 OVXRL1= .-OVLAY1+OVRNUM / CONTINUATION ENTRY POINT FOR GOLD: RULER DCA RLDIRN / SET RULER MOVEMENT DIRECTION TO FORWARD /A217 RULSVE, JMS PCUR / SET TO BOTTOM LINE IFDEF PERDEC < TAD (4056) DCA OKSTR / USE BLANKS FOR NULLS > / END IFDEF PERDEC IFDEF COLDEC < TAD (4072) DCA OKSTR / USE BLANKS FOR NULLS > / END IFDEF COLDEC IFDEF COMDEC < TAD (4054) DCA OKSTR / USE BLANKS FOR NULLS > / END IFDEF COMDEC / DISPLAY SCALE FOR RULER JMS NWLN JMS NWLN DCA RLIT1 RULSV2, ISZ RLIT1 / Display 10 - 80 TAD RLIT1 TAD (-10) SMA SZA CLA JMP RULSV3 JMS TWODEC JMP RULSV2 RULSV3, /D192 TAD SPLTFL / IN SPLIT SCREEN MODE? /D192 SZA CLA JMS RLDBLD / YES, PAINT REST OF RULER / Output ...:...: text TAD (-10) DCA RLIT1 JMS NWLN JMS PCUR RULV3A, JMS PUTMSA RLSTR2 ISZ RLIT1 JMP RULV3A JMS NWLN TAD (-4) DCA SCRLCT / SET UP FOR SCROLL RECOVERY OVLJMP / GO SET RLPOSN AND DISPLAY RULER OVDRUL / JUMP TO NEXT OVERLAY OVRULX= .-OVLAY1+OVRNUM / HERE TO "GO DOUBLE" AC7777 DCA SPLTFL / Swaped next 2 locations /M193 JMS FXMEUP / RE-PAINT THE SCREEN NOW JMS SET132 / SET 132 COL IF WIDNAR FLAG IS WIDE /M192 JMP RULSVE RLDBLD, XX JMS TWODEC TAD RLIT1 TAD (-30) ISZ RLIT1 SZA CLA JMP RLDBLD+1 TAD (-21) / SO WE GET UP TO 242 ON WIDE RULERS /M186 JMP I RLDBLD RLIT1, .-. RLIT2, .-. TWODEC, 0 / Two digit decimal print routine JMS PUTMSA / Print 7 spaces RLSTR4 DCA NUMDGT TAD RLIT1 NUM01, TAD (7766) / -10 decimal SPA JMP NUM02 ISZ NUMDGT JMP NUM01 NUM02, TAD (12) / decimal 10 DCA NUMB TAD NUMDGT / get hundreds digit and display SNA TAD (-20) / If zero convert to a space JMS NUMOUT TAD NUMB / get tens digit and display JMS NUMOUT JMS NUMOUT / units digit always 0 JMP I TWODEC NUMOUT, 0 TAD (60) JMS PUTSCH JMP I NUMOUT NUMB, 0 NUMDGT, 0 PUTMSA, XX DCA RLIT2 TAD I PUTMSA DCA PUTMA2 ISZ PUTMSA PUTMA1, ISZ RLIT2 TAD RLIT2 JMS GETBYT PUTMA2, 0 SNA JMP I PUTMSA BSW / THIS LITTLE TRICK CONVERTS SIXBIT TO ASCII SMA IAC BSW JMS PUTSCH JMP PUTMA1 X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------------- PAGE FXMEUP, XX JMS CLSSET / INITIALIZE SCROLL VALUES FOR STATUS / USE HYPHENS FOR NULLS IFDEF PERDEC < TAD (5556) DCA OKSTR > / END IFDEF PERDEC IFDEF COLDEC < TAD (5572) DCA OKSTR > / END IFDEF COLDEC IFDEF COMDEC < TAD (5554) DCA OKSTR > / END IFDEF COMDEC ISZ NORUPD / KEEP RULER FROM REVERTING JMS FXSCRL / AND RE-PAINT THE SCREEN DCA NORUPD / /A197 JMP I FXMEUP /************* FROM HERE THRU NEXT LINE OF ASTERISKS IS ALL********* /A169 COLKEY, /D201 GETINP / GET A KEYSTROKE AND DECODE COLCH1, CIFSYS /A201 JWAIT /A201 HLTTST /HAS GOLD HALT BEEN SET /A201 JMP EINEXT /YES /A201 CIFPRT /A201 JMS I (FLABUZ) / SOUND BUZZER AND TOGGLE LED'S /A201 / IF THEIR IS A PRINTER ERROR CIFSYS /A201 XLTIN /A201 JMP COLCH1 /A201 / MUST BE PASTE, CUT, GOLD:CUT, DELCHR, RUBCHR ZZCASE / TEST KEYSTROKE AGAINST TABLE COLTAB-1 / TABLE FOR CASE JMS BEEPER / NO MATCH, FOR NOW BEEP TWICE JMP EIBAD / BAD EXIT COLTAB, EDPSTE / PASTE OVCLPX / ADDRESS FOR PASTE EDSCUT / CUT OVCLCX EDGCUT / GOLD:CUT OVCGCX EDDLTC / DELCHR OVCLRX EDRBCH / RUBCHR OVCLLX / EDLINE / LINE SOLIDIFY TEXT / OVCLSD / EDPARA / PARA SOFTEN TEXT / OVCLSF 0 / END OF CASE CHECK INDICATOR / COLUMN OPERATIONS /A169 OVCLPX, OVLJMP;OVCLPS / COLUMN PASTE /A169 OVCLCX, OVLJMP;OVCLCT / COLUMN CUT /A169 OVCGCX, OVLJMP;OVCGCT / COLUMN GOLD:CUT /A169 OVCLRX, JMS OV2JMP / COLUMN DELCHR /A169 OVCLRS /A169 OVCLLX, JMS OV2JMP / COLUMN RUBCHR /A169 OVCLLS /A169 OVCLSD, JMS OV2JMP / LINE SOLIDIFY TEXT /A169 OVSLID /A169 OVCLSF, JMS OV2JMP / PARA SOFTEN TEXT /A169 OVSOFT /A169 /***************** END ADDITIONS FOR COLUMN ********************** A169 X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------------- PAGE /*************************************************************************** /**** START OF OVERLAY **** /*************************************************************************** OVRNUM=OVRNUM+200 OVRBLK=OVRNUM%200+DLOEDO-1 / DISK BLOCK WHERE OVERLAY IS LOADED RELOC RELOC OVLAY1 OVRNUM OVRBAD= .-OVLAY1+OVRNUM JMP XVRBAD OVERUL= .-OVLAY1+OVRNUM RLERUL, JMS RLEQTE / SET NEW=OLD (CANCEL MODS) OVDRUL= .-OVLAY1+OVRNUM AC0001 TAD CURSOR DCA RLPOSN / POSN=CURSOR OVPRUL= .-OVLAY1+OVRNUM RLPRUL, JMS DSPRUL / DISPLAY RULER NWRUL / display new ruler. /A160 RLGETI, JMS TSTLIM / TEST FOR SCREEN ZONE CHANGE TAD SCRNFL TAD (-2000) / DID ZONE CHANGE? SZA CLA JMP RLGET0 / NO /D192 JMS CLSCRN / CLEAR SCREEN ON ZONE CHANGE DCA SCRNFL / YES, CLEAR SCRNFL OVLJMP / THEN REDISPLAY SCREEN OVRULX /M192 RLGET0, AC7777 TAD RLPOSN TAD LOWLIM / NORMALIZE TO LEFT OF SCREEN JMS PCUR / REPOSITION CURSOR CIFMNU / CHANGE TO MENU FIELD /A217 JMS I (CALLN5) / CHECK FOR STATUS LINE CHANGES /A217 GETINP / GET NEXT INPUT CHARACTER SPA / SKIP IF: NOT A SPECIAL CHARACTER JMP RLSPCI / JUMP IF SPECIAL DCA RLCHAR / Save the character while /a232 TAD RLCHAR / a check is made for an eight bit /a232 AND (200) / character. /a232 SZA CLA / Is the character eight bit? /a232 TAD (EIGHTC / Yes, determine from eight bit table /a232 SNA / and skip the next instruction. If not /a232 TAD (OKSTR / then use ordinary table /a232 DCA SRHTBL / Save the table address to be used /a232 IFDEF ENGLSH < TAD RLCHAR / RESTORE FOR COMPARE TAD (-140) / IS THE CHAR A "@"? SZA / SKIP IF: CHAR IS "@" TAD (-36) / IS THE CHAR A "~"? SNA CLA / SKIP WITH VALID CHAR JMP RLBADI / CHAR WAS A "@" OR A "~" TAD RLCHAR / RESTORE CHAR FOR FURTHER COMPARE TAD (-140) / CONVERT CHARACTER TO 6-BIT CODE SPA TAD (40) SNA / SKIP IF: CHARACTER WAS NOT AN '@' TAD (""&77) / SUBSTITUTE A '"' IN PLACE OF '@' > / END IFDEF ENGLSH / THE SPANISH TRAP CHARACTERS ARE A COPY OF THE ENGLSH. IFDEF SPANISH < /A236 TAD RLCHAR / RESTORE FOR COMPARE TAD (-140) / IS THE CHAR A "@"? SZA / SKIP IF: CHAR IS "@" TAD (-36) / IS THE CHAR A "~"? SNA CLA / SKIP WITH VALID CHAR JMP RLBADI / CHAR WAS A "@" OR A "~" TAD RLCHAR / RESTORE CHAR FOR FURTHER COMPARE TAD (-140) / CONVERT CHARACTER TO 6-BIT CODE SPA TAD (40) SNA / SKIP IF: CHARACTER WAS NOT AN '@' TAD (""&77) / SUBSTITUTE A '"' IN PLACE OF '@' > / END IFDEF SPANISH /A236 / THE NORWAY TRAP CHARACTERS ARE A COPY OF THE ENGLSH. IFDEF V30NOR < /A238 TAD RLCHAR / RESTORE FOR COMPARE TAD (-140) / IS THE CHAR A "@"? SZA / SKIP IF: CHAR IS "@" TAD (-36) / IS THE CHAR A "~"? SNA CLA / SKIP WITH VALID CHAR JMP RLBADI / CHAR WAS A "@" OR A "~" TAD RLCHAR / RESTORE CHAR FOR FURTHER COMPARE TAD (-140) / CONVERT CHARACTER TO 6-BIT CODE SPA TAD (40) SNA / SKIP IF: CHARACTER WAS NOT AN '@' TAD (""&77) / SUBSTITUTE A '"' IN PLACE OF '@' > / END IFDEF V30NOR /A238 / THE SWEDISH TRAP CHARACTERS ARE A COPY OF THE ENGLSH. IFDEF V30SWE < /A239 TAD RLCHAR / RESTORE FOR COMPARE TAD (-140) / IS THE CHAR A "@"? SZA / SKIP IF: CHAR IS "@" TAD (-36) / IS THE CHAR A "~"? SNA CLA / SKIP WITH VALID CHAR JMP RLBADI / CHAR WAS A "@" OR A "~" TAD RLCHAR / RESTORE CHAR FOR FURTHER COMPARE TAD (-140) / CONVERT CHARACTER TO 6-BIT CODE SPA TAD (40) SNA / SKIP IF: CHARACTER WAS NOT AN '@' TAD (""&77) / SUBSTITUTE A '"' IN PLACE OF '@' > / END IFDEF V30SWE /A239 IFDEF ITALIAN < TAD RLCHAR TAD (-134) / Have we a \? SNA / Well? JMP RLBADI / Yes, well we don't want it here! TAD (134-140) / Convert to six bit SPA TAD (40) SNA / Have we an @ or an a-grave? TAD (34) / Yes, make it into a \ as six bit / can't represent @ > IFDEF DUTCH < TAD RLCHAR / RESTORE FOR COMPARE TAD (-140) / IS THE CHAR A "@"? SZA / SKIP IF: CHAR IS "@" TAD (-36) / IS THE CHAR A "~"? SNA CLA / SKIP WITH VALID CHAR JMP RLBADI / CHAR WAS A "@" OR A "~" TAD RLCHAR / RESTORE CHAR FOR FURTHER COMPARE TAD (-140) / CONVERT CHARACTER TO 6-BIT CODE SPA TAD (40) SNA / SKIP IF: CHARACTER WAS NOT AN '@' TAD (""&77) / SUBSTITUTE A '"' IN PLACE OF '@' > / END IFDEF DUTCH IFDEF FRENCH < TAD (-175) SNA TAD (77-175) TAD (175-140) SPA TAD (40) SNA TAD ("#&77) > / END IFDEF FRENCH IFDEF GERMAN < TAD (-140) SPA TAD (40) SNA TAD ("#&77) > / END IFDEF GERMAN IFDEF CANADA < TAD (-140) SPA TAD (40) SNA TAD (""&77) > / END IFDEF CANADA IFDEF SCANDI < TAD (-140) SPA TAD (40) > / END IFDEF SCANDI AND P77 / MASK UPPER BYTE CIA / GET -CHARACTER VALUE DCA T2 / SAVE VALUE DCA T3 / ZERO INDEX COUNT / SEE IF INPUT CHARACTER IS LEGAL BY CHECKING FOR A MATCH FOR IT IN / OKSTR TABLE. INDEXA, ISZ T3 / BUMP INDEX COUNT TAD T3 / GET INDEX COUNT JMS GETBYT / GET CORRESPONDING CHARACTER IN / OKSTR TABLE SRHTBL, OKSTR /m232 SNA / SKIP IF: NOT AT END OF TABLE JMP RLBADI / ERROR IF NOT FOUND TAD T2 / ADD -CHAR. VALUE TO VALUE RETURNED / FROM OKSTR TABLE. SZA CLA / SKIP IF: CHARACTER MATCHED JMP INDEXA / LOOP IF NOT EQUAL TAD T3 / RETURN INDEX TAD (-17) / ADD (NUMBER OF RULER SETTING CHARACTERS IN / OKSTR TABLE - 1) SMA / SKIP IF: INPUT CHARCTER WAS A RULER SETTING / CHARACTER ( 'L', 'R', 'D', '.' ...ETC.) JMP GETSRL / INPUT CHARACTER WAS EITHER A STORE_RULER / ('!', '@', '#' ...ETC.) OR ACCESS_STORED_ / RULER CHARACTER ('1', '2', '3' ...ETC.). / JUMP TO HANDLER. TAD (17) / RESTORE INDEX NUMBER IN AC JMS UPDRUL / UPDATE RULER JMP RLPRUL / AND DISPLAY GETSRL, SNA / SKIP IF: TABLE MATCH DID NOT OCCUR ON 17TH / BYTE OF OKSTR TABLE (CHARACTER IN 17TH / BYTE IS AN '=') JMP RLERUL / INPUT CHARACTER WAS AN '='. SO GOTO / ROUTINE THAT WILL RESET THE NEW RULER / EQUAL TO THE OLD. TAD (-13) / IS CHARACTER AN ACCESS_STORED_RULER CHAR.? SPA / SKIP IF: SO JMP GETSRX / JUMP TO GET RULER SPECIFIED BY INPUT CHAR. DCA T3 / STORE THIS RULER AS PER STORE_RULER CHAR. / SPECIFIED BY INPUT CHARACTER. OVLJMP; OVGSRL / GO STORE THE RULER /M184 GETSRX, TAD (12) JMS RLGETS CDFMNU TAD NWRMAR TAD (-COLM81) CDFMYF SPA SNA CLA JMP RLPRUL TAD SPLTFL SZA CLA JMP RLPRUL OVLJMP OVRULX / / ADVANCE TO NEXT RULER (AFTER ENTERING RULER BEING EDITED) / RLGOAD, AC0001 / INDICATE ADVANCE TO RULER JMP RLNWL / / BACKUP TO PREVIOUS RULER (AFTER ENTERING RULER BEING EDITED) / RLGOBK, AC7777 / INDICATE BACKUP TO RULER JMP RLNWL / / CANCEL ALL MODS TO RULER AND EXIT / RLQUIT, JMS RLEQTE / SET NWRUL := CURUL / / ENTER RULER BEING EDITED, AND EXIT GOLD:RULER COMMAND / RLNWL, DCA RRDIR / SET GOTO-RULER FLAG (0=NO GOTO-RULER) OVLJMP OVXRUL / RLSPCI moved to next page to make room this edit /a232 TLITAA, SPCLST-1 RLCHAR, 0 / TEMP HOLD FOR CURRENT INPUT CHAR X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------------- PAGE SPCLST, RLQUIT / CANCEL MODS AND QUIT -EDRULR RLNWL / EXIT WITH MODS -EDNWLN RLBKP / BACK-UP CURSOR -EDBKUP RLADV / ADVANCE CURSOR -EDADVN RLMNU / CALL UP EDITOR MENU -EDMENU RLWRD / MOVE CURSOR TO NEXT RULER MARK -EDWORD RLINE / MOVE CURSOR TO COLUMN 80 -EDLINE RLOJDL / DELETE RULER -EDDLTW / (DELETE WORD) RLERUL / UNDELETE RULER -EDUDLT / (GOLD DELETE WORD) RLGOAD / ADVANCE TO NEXT RULER -EDGADV / (GOLD:ADVANCE) RLGOBK / BACKUP TO PREVIOUS RULER -EDGBKP / (GOLD:BACKUP) 0 / END OF SPCLST RLSPCI, DCA T1 / SAVE CODE TAD TLITAA DCA X0 TAD I X0 SNA JMP RLBADI / ERROR IF NOT FOUND DCA T2 TAD I X0 TAD T1 SZA CLA JMP .-7 JMP I T2 / JUMP TO ROUTINE RLBKP, AC7777 RLADV, DCA RLDIRN / SET DIRECTION FOR FUTURE MOVES JMS RLMOV / DO MOVE OF ONE JMP RLINE2 / AND LISTEN FOR MORE RLMOV, XX TAD RLDIRN SMA CLA JMP RLADV1 / MOVE ONE IN RIGHT DIRECTION AC7777 / ELSE BACK UP TAD RLPOSN SNA JMP RLBADI DCA RLPOSN JMP I RLMOV RLADV1, TAD (-COLLIM+2) / ADVANCE CURSOR TAD RLPOSN SMA CLA JMP RLBADI /D192 TAD RLPOSN /D192 TAD (-COLM81) ISZ RLPOSN /D192 SPA CLA JMP I RLMOV /D192 TAD SPLTFL / SPLIT SCREEN MODE? /D192 SZA CLA /D192 JMP I RLMOV / RETURN IF YES! /D192 AC7777 /D192 TAD RLPOSN / ELSE SET CURSOR TO 1 LESS THAN RULER /D192 DCA CURSOR /D192 OVLJMP /D192 OVRULX /D217 RLDIRN, 0 / GOLD: RULER DIRECTION (0 FORWARD, -1 REVERSE) RLWRD, JMS RLMOV / GO ONE POSITION TAD RLPOSN JMS GETBYT NWRUL / CHECK FOR SOMETHING TAD (-1) SNA CLA JMP RLWRD / LOOP TIL WE GET IT JMP RLINE2 / THEN GO LISTEN FOR MORE RLINE, TAD RLDIRN SMA CLA JMP RLINE1 IAC / GO TO END OF LINE DCA RLPOSN JMP RLINE2 / AND RETURN FOR MORE RLINE1, TAD RLPOSN TAD (-COLM81) / SECOND LINE? SMA CLA /M192 TAD (COLLIM-COLM81-2) / ADD OFFSET IF SO TAD (COLM81) DCA RLPOSN RLINE2, AC7777 TAD RLPOSN / SET CURSOR TO 1 LESS THAN RULER POS'N DCA CURSOR JMP RLGETI XVRBAD, RLBADI, JMS BEEPER JMP RLINE2 RLMNU, JMS RLEQTE / CANCEL ANY MODS IFDEF PERDEC < TAD (5556) DCA OKSTR / RESTORE RULER DISPLAY CODES > / END IFDEF PERDEC IFDEF COLDEC < TAD (5572) DCA OKSTR / RESTORE RULER DISPLAY CODES > / END IFDEF COLDEC IFDEF COMDEC < TAD (5554) DCA OKSTR / RESTORE RULER DISPLAY CODES > / END IFDEF COMDEC DCA CURSOR TAD LINE23 DCA CURPTR /D159; CIFMNU / CHANGE INSTRUCTION FIELD TO MENU FIELD /D159; PGSWAP / AC=0, SAVE SWAP AREA & RELOAD MENU CODE OVLJMP OVMENU / GO TO EDITOR MENU / / TRANSFER TO "DELETE RULER" ROUTINE IN ANOTHER OVERLAY / RLOJDL, OVLJMP OVRLDL / This next string has the same purpose as OKSTR, in that it defines / acceptable characters for ruler definitions. However, whereas OKSTR / only has the definitions for correct 7 bit characters, this string / only has the definitions for correct 8 bit characters. /1........1.........1.........1.........1.........1/ EIGHTC, IFDEF ENGLSH < IFNDEF V30FAO < TEXT \ \ > IFDEF V30FAO < TEXT \ C \ > > IFDEF V30NOR < TEXT \ \ > IFDEF V30SWE < TEXT \ \ > IFDEF SPANISH < TEXT \ C \ > IFDEF ITALIAN < TEXT " \#I H G" > IFDEF DUTCH < TEXT \ \ > X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------------- PAGE /*************************************************************************** /**** START OF OVERLAY **** /*************************************************************************** OVRNUM=OVRNUM+200 OVRBLK=OVRNUM%200+DLOEDO-1 / DISK BLOCK WHERE OVERLAY IS LOADED RELOC RELOC OVLAY1 OVRNUM / CURRENT OVERLAY NUMBER OVABRV= .-OVLAY1+OVRNUM / GOLD ABBREVIATION ENTRY POINT JMP XVABRV OVGETC= .-OVLAY1+OVRNUM / GOLD LIBRARY ENTRY POINT JMP XVGETC OVDCM2= .-OVLAY1+OVRNUM JMP XVDCM2 / ERROR HANDLING FOR THE GET COPY, ABBREVIATION, AND LIBRARY CODE EIGETY, JMS PROMPT / PROMPT ERROR MESSAGE EIGER2 EIGER2 / "NOT FOUND" ERROR MESSAGE / GET COPY, ABREVIATION, AND LIBRARY CODE EIGETA, TAD (-EIGESL) DCA I .+2 / SET BUFFER LENGTH (OVER BRACKET) JMS GETLIN EIGES3 / GET PARA NAME TAD GETLEN SNA JMP EIGETD / NOP IF NO NAME TAD (EIGES3) DCA X2 / FIX END OF STRING JMS MNUGET MNLBRY / GET LIBRARY FILE NUM JMS EIGOPN JMP EIGETD / OPEN FOR READING JMS EIGETK JMP EIGETY EIGETB, JMS RDNXNJ JMP EIGETD / GET NEXT CHAR FROM GRAF DCA EIGTM1 DCA EIGTM2 / SAVE IT HLTTST JMP EIGETD / QUIT IF HALTED TAD EIGTM1 AND P177 TAD (-"<+200) SZA CLA JMP EIGETF / CHECK FOR END JMS RDNXNJ JMP EIGETE DCA EIGTM2 TAD EIGTM2 AND P177 TAD (-"<+200) SNA CLA JMP EIGETD / JUMP IF AT END EIGETF, TAD EIGTM1 JMS EIGETG / ELSE INSERT TAD EIGTM2 SZA JMS EIGETG JMP EIGETB / AND LOOP FOR MORE EIGETG, XX JMS CHKRPC JMP EIGETH / JUMP IF RULER JMS CHKSPC / HELPS PRREVENT DISKETTE OVERFILL SZA INSCHR / INSERT IF OK EIGETX, JMP I EIGETG EIGETH, JMS RDNXNJ JMP I EIGETG TAD (-ECMDRL) SZA CLA JMP EIGETH / GET TO MIDDLE JMS SETRUL EIGETJ / SET NWRUL JMS CMPRUL JMP I EIGETG / JUMP IF =OLD TAD CURPTR DCA EIGTM1 / SAVE PTR JMS I TLITBA / INSERT NEW RULER TAD (ECRMFL) JMS INSERT / SET MOD FLAG SLNMOD TAD EIGTM1 DCA CURPTR / RESTORE PTR CURMOV NOP / FIX UP TAD LINE23 DCA CURPTR / RESTORE CURPTR DCA CURSOR JMP I EIGETG / AND LOOP FOR NEXT INPUT EIGETE, TAD EIGTM1 INSCHR / STRANGE END #1 EIGETD, JMP I TLITBC EIGTM1, 0 / TEMPS EIGTM2, 0 TLITBA, INSRUL / ****LITERALS TO BYPASS PAL8 LIMITS*** TLITBC, EIFIX /C168 EIGESL=21 / MAX PARA NAME LENGTH EIGES2, "<-200 "<-200 ZBLOCK EIGESL+2 / BUFFER EIGES3=EIGES2+1 / BUFFER START FOR GETLIN X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------------- PAGE EIGETJ, XX JMS RDNXNJ JMP EIGETX CDFMYF JMP I EIGETJ EIGETK, XX / SET UP FOR RDFIND CDFMYF TAD ("<-200) DCA I (EIGES3) TAD (">-200) DCA I X2 TAD (">-200) DCA I X2 DCA I X2 DCA PSTBLK DCA BASKCT JMS RDFIND EIGES2 JMP I EIGETK ISZ EIGETK / BUMP FOR SUCCESSFUL RETURN JMP I EIGETK RDFIND, XX CDFMYF / FIND STRING IN SYSFIL RDFLP1, TAD I RDFIND DCA RDFPTR / GET STRING PTR RDFLP2, JMS RDNXNJ JMP RDFXI1 / GET NEXT CHAR MQL HLTTST JMP RDFXI1 / QUIT IF HALTED CDFMYF TAD I RDFPTR / COMPARE WITH STRING SWP JMS USCMPR JMP RDFLP1 / REINIT IF NO MATCH HERE ISZ RDFPTR / BUMP STRING PTR TAD I RDFPTR / END YET? SZA CLA JMP RDFLP2 / CONTINUE MATCH IF NOT ISZ RDFIND / ELSE BUMP TO OK RETURN RDFXI1, ISZ RDFIND JMP I RDFIND / RETURN TO CALLER RDFPTR, 0 / TMP XVABRV, JMS MNUGET / CODE FOR ABRV OVERLAY MNABRV / GET ABBREV FILE NUM JMS EIGOPN JMP EIFIX / INIT ABBREV FILE /C168 JMS RDNXNJ JMP EIABRA CLA / CHECK IT TAD (EIGES3) DCA X2 / INIT STRING PTR GETINP SPA JMP EIABRA / GET 1ST CHAR JMS XVABIN / Insert it (7 or 8 bit) /A225 GETINP / Get 2nd char SPA / JMP EIABRA / And process as for 1st JMS XVABIN / Insert it /A225 JMS EIGETK JMP EIABRA / GO FIND IT JMP EIGETB / GO COPY IF FOUND EIABRA, JMP EIBAD XVGETC, JMS FXSCRL / UPDATE SCREEN JMS PROMPT EIGES1 / ASK FOR NAME JMP EIGETA / GO TO CONTINUATION ROUTINE XVDCM2, TAD CPYFNO / SECOND OVERLAY JMS EIGOPN JMP EIFIX / INIT DOCUMENT FILE /C168 EIDCMD, JMS RDNXNJ JMP EIGETD / GET A CHARACTER, EXIT IF DONE JMS EIGETG / INSERT CHARACTER HLTTST / TEST IF HALT FLAG SET JMP EIGETD / YES, DONE JMP EIDCMD / NO, GO AROUND AGAIN EIGOPN, XX / CHECK FILE, THEN OPEN FOR READING DCA CPYFNO / SAVE FILE NO TAD CPYFNO CIA / COMPARE AGAINST EDIT FILE TAD FILENO SZA CLA JMP .+3 JMS BEEPER / COMPLAIN IF SAME JMP I EIGOPN / TAKE NON-SKIP RETURN TAD CPYFNO JMS DSKCAL XRDFIN / ELSE INIT IT ISZ EIGOPN JMP I EIGOPN / AND TAKE SKIP RETURN / / Routine (blasted) to insert 7 or 8 bit (dead key) char into /A225 / EIGESL buffer /A225 / XVABIN, XX DCA XABRVC / Store 1st char /A225 TAD XABRVC / Get it back /A225 AND (200) / Is it 8 bit ? /A225 SZA CLA / /A225 JMP XABXPC / Yes, expand char /A225 TAD XABRVC / Get char back /A225 DCA I X2 / And save it /A225 JMP I XVABIN / Now exit /A225 XABXPC, TAD XABRVC / get char /A225 JMS BHOOK / Call Blaster /A225 AB8INS / /A225 JMP I XVABIN / return /A225 XABRVC, 0 / Temp for input char /A225 X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------------- PAGE /*************************************************************************** /**** START OF OVERLAY **** /*************************************************************************** OVRNUM=OVRNUM+200 / NEW OVERLAY OVRBLK=OVRNUM%200+DLOEDO-1 / DISK BLOCK WHERE OVERLAY IS LOADED RELOC RELOC OVLAY1 OVRNUM / CURRENT OVERLAY NUMBER /D185 BEGIN HELP OVERLAY........CALL CLEAR SCREEN AND SAVE MENU DATA /D185 OVHELP= .-OVLAY1+OVRNUM /D185 TAD BASKCT / GET WASTEBASKET COUNT /D185 DCA T3 / SAVE FOR HELP UNDELETE /D185 JMS EIDCMB / SAVE MENU DATA /D185 OVLJMP;OVHLP1 / START OF HELP OVERLAY /D185 END HELP OVERLAY..........RESTORE MENU DATA AND POINTERS /D185 OVHLPE= .-OVLAY1+OVRNUM /D185 JMS EIDCMC / RESET PTRS /D185 JMS EIPSWP / GO RESTORE THE SWAP AREA /A181 /D185 TAD T2 / FINISH - GET RETURN CODE /D185 SNA / IS CODE OR NULL(RET TO EDITOR) /D185 JMP EINEXT / RETURN TO NORMAL EDITOR FUNCTIONS /C168 /D185 JMP EINEXB / RETURN TO EDITOR ...WITH NEG CODE IN AC OVDCMT= .-OVLAY1+OVRNUM / GET DOCUMENT JMS EIDCMB / SAVE MENU STUFF JMS MNUPUT MNTMP1 / NO SPECIAL OPTIONS CIFMNU JMS I MNUCAL DLMEM1 / CALL MENU JMS EIDCMC / RESTORE MENU STUFF JMS EIPSWP / GO RESTORE THE SWAP AREA /A181 JMS MNUGET MNTMP3 / GET FILE NUM FROM MENU SNA JMP EIFIX / QUIT IF NULL /C168 DCA CPYFNO / ELSE SAVE FOR CHECKING OVLJMP;OVDCM2 / AND JUMP TO NEXT OVERLAY OVMENU= .-OVLAY1+OVRNUM / EDITOR MENU XVMENU, JMS EIDCMB / SAVE MENU STUFF JMS HDRGET HDRPSZ / GIVE HIM OUR PAGE SIZE JMS MNUPUT MNTMP3 /D186 CDFMYF TAD WIDNAR / GET WIDE/NARROW FLAG /A186 SZA CLA / CONVERT TO 1/0 FLAG /A186 AC0001 / NARROW (52 DEC) = 1 /A186 JMS MNUPUT / STORE WHERE MENU CAN FIND IT /A186 MNTMP8 /A186 CIFMNU JMS I MNUCAL DLMEM2 / CALL MENU DCA LOWLIM / CLEAR SO THAT TESTLIM CAN SET IT OK /A186 JMS MNUGET /A186 MNTMP8 / GET WIDE/NARROW SCREEN FLAG /A186 CLL RAR / CONVERT TO FORM EDITOR CAN USE /A186 SZL CLA / SKIP IF WIDE MODE JUST SPECIFIED /A186 TAD (WIDTH-COLM81) / NARROW = 52 DECIMAL FOR EDITOR USE /A186 DCA WIDNAR / STORE IT AWAY /A186 SNL CLA / WHAT IS IT? /A186 CMA / WIDE, SET AC=-1, PRESERVE LINK!! /A186 DCA WIDEFL / SET 'NEED TO GO TO 132 COL.' FLAG /A192 SNL / SKIP IF NARROW /A192 JMS SET132 / WIDE, GO TO 132 COLUMN MODE /A186 JMS EIDCMC / RESTORE MENU STUFF JMS MNUGET MNTMP3 / GET PAGE SIZE BACK AGAIN JMS HDRPUT HDRPSZ / PUT BACK IN HEADER JMS MNUGET MNTMP5 / WRITE SYSTEM OPTIONS PAGE IF MODIFIED SZA CLA JMS EIMSVU / +++ Modify RULOFF Case-Table to turn Display-Rulers ON or OFF. /a177 / /a177 / MNSTAT = 0 or 1 ... Ruler Display ON /a177 / MNSTAT = 2 or 3 ... Ruler Display OFF /a177 / /a177 JMS OV2JMP / LOAD OVERLAY 2 /a177 OVRLOF / Adjust Case-Table and Continue /a177 JMS MNUGET MNTMP4 / GET MNU OPTION RETURN TAD (JMP I EIMNUA) / USE TO JUMP THRU TABLE DCA .+1 JMP I EIMNUA / TAKE OPTION JUMP EIMNUA, EIMNU0 / RETURN EIMNU1 / DK EIMNU2 / NULL VALUE EIMNU3 / CONTINUE PRINTER EIMNU4 / FINISH DOCUMENT EIMNU5 / GLOBAL SEARCH AND REPLACE EIMNU6 / AUTO-PAGINATION EIMNU0, JMS EIPSWP / GO RESTORE THE SWAP AREA /A181 JMP EIFIX / RETURN TO EDITOR /C168 EIMNU4, JMS EIPSWP / GO RESTORE THE SWAP AREA /A181 JMP EIFILE / GO FILE THE DOCUMENT EIMNU2, / NULL VALUE EIMNU5, DCA PSTBLK / RESET PASTE BLOCK POINTER TO CAUSE / PASTE BLOCK TO BE RE-INITITED IN CORE OVLJMP;OVGSRP / GO TO GSR OVERLAY /C210 /D181 EIDCMA, XX /D181 CDFMNU /D181 AC7777 /D181 TAD I (FNAMSP) /D181 DCA X1 /D181 TAD (SMULOC-1) /D181 DCA X2 /D181 JMP I EIDCMA EIDCMB, XX CDFMNU / CHANGE TO MENU FIELD /A181 AC7777 / SET UP FOR A DECREMENT /A181 TAD I (FNAMSP) / PICK UP ADDRESS OF FILE NAME BUFFER /A181 DCA EDICMX / STORE SOURCE ADDRESS /A181 JMS CPYBUF / CALL SYSTEM ROUTINE TO MOVE BUFFER /A181 -STRLEN / NUMBER OF WORDS TO MOVE /A181 CDFMNU / SOURCE FIELD /A181 EDICMX, 0 / SOURCE ADDRESS /A181 CDFMYF / DESTINATION FIELD /A181 SMULOC-1 / DESTINATION ADDRESS /A181 DCA PSTBLK DCA BASKCT / CLEAR PASTE BUF FLAGS JMS CLR132 / MAKE SURE THE SCREEN IS IN NARROW MODE AC0003 / SET UP TO RESET SCROLL REGION CIFMNU / CHANGE INSTRUCTION FIELD TO MENU FIELD JMS I (CALLN1) / RESET SCROLL REGION SET ABSOLUTE MODE CIFMNU / CHANGE INSTRUCTION FIELD TO MENU FIELD PGSWAP / AC=0, SAVE SWAP AREA & RELOAD MENU CODE JMP I EIDCMB EIDCMC, XX TAD EDICMX / PICK UP ADDRESS OF FILE NAME BUFFER /A181 DCA EDICMY / STORE SOURCE ADDRESS /A181 JMS CPYBUF / CALL SYSTEM ROUTINE TO MOVE BUFFER /A181 -STRLEN / NUMBER OF WORDS TO MOVE /A181 CDFMYF / SOURCE FIELD /A181 SMULOC-1 / SOURCE ADDRESS /A181 CDFMNU / DESTINATION FIELD /A181 EDICMY, 0 / DESTINATION ADDRESS /A181 /D192 TAD SPLTFL / CHECK FOR WIDE SCREEN /D192 SZA CLA / SKIP IF NARROW JMS SET132 / CONVERT TO 132 COLUMN MODE (IF WIDE!) JMS CLSSET / INITIALIZE SCROLL VALUES FOR STATUS JMP I EIDCMC X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------------- PAGE EIMNU3, AC0006 / LOAD 'CONTINUE' ACTION CODE CDFPRT / GET TO PRINTER FIELD DCA I (PRACTN) / SET ACTION CODE /D173 TAD I (PRSTOP) / STOP PRINTER, /D173 SZA CLA /D173 JMP .+4 / IF NOT ALREADY STOPPED AC0001 /D173 TAD USERNO / BY SETTING OUR NUMBER DCA I (PRSTOP) / IN PRINTER STOP FLAG CDFMYF / BACK TO OUR FIELD JMP EIMNU0 / GO RETURN TO EDITOR /A173 EIMNU1, JMS CLR132 / DON'T NEED WIDE SCREEN HERE OVLJMP;OVUDKS / GO TRANSFER TO UDK OVERLAY EIMNU6, JMS EIPSWP / GO RESTORE THE SWAP AREA /A181 JMS TSTLIM / GO SET UP THE LIMITS OF DISPLAY /A186 JMS FXSCRL / GO REPAINT THE SCREEN /A186 OVLJMP;OVAPAG / JUMP TO AUTO GOLD PAGE OVERLAY EIMSVU, XX / SAVE SYSTEM OPTIONS PAGE TAD (DLSVAL) / DISK BLOCK TO READ /A181 CDFMYF / FIELD TO READ IT INTO /A181 JMS SYSIO / SYSTEM ROUTINE TO READ A DISK BLOCK /A181 RXERD / READ COMMAND CODE /A181 OVLAY2 / BUFFER TO READ IT INTO /A181 JMS CPYBUF / CALL SYSTEM ROUTINE TO MOVE BUFFER /A181 -MUSYSL / NUMBER OF WORDS TO MOVE /A181 CDFMNU / SOURCE FIELD /A181 MUSYSV-1 / SOURCE ADDRESS /A181 CDFMYF / DESTINATION FIELD /A181 OVLAY2-1 / DESTINATION ADDRESS /A181 TAD (DLSVAL) / DISK BLOCK TO WRITE /M181 CDFMYF / FIELD TO WRITE FROM /M181 JMS SYSIO / SYSTEM ROUTINE TO WRITE A DISK BLOCK /M181 RXEWT / WRITE COMMAND CODE /M181 EIMLAY, OVLAY2 / BUFFER TO WRITE FROM /M181 DCA I EIMLAY / ZAP POINTER TO SECOND OVERLAY NUMBER /M181 JMP I EIMSVU / RETURN TO CALLER /M181 SMULOC, ZBLOCK STRLEN / LOCATION TO SAVE THE FILE NAME BUFFER /D181 SMOOT, 0 / SHOWS LENGTH OF SMULOC BLOCK EIPSWP, XX / RESTORE THE SWAP AREA ROUTINE /A181 AC7777 / SET AC = -1 /A181 CIFMNU / CHANGE INSTRUCTION FIELD TO MENU FIELD/A181 PGSWAP / AC=-1 SO JUST LOAD IN THE SAVE AREA /A181 JMP I EIPSWP / RETURN TO CALLER /A181 X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------------- PAGE /*************************************************************************** /**** START OF OVERLAY **** /*************************************************************************** OVRNUM=OVRNUM+200 / NEW OVERLAY OVRBLK=OVRNUM%200+DLOEDO-1 / DISK BLOCK WHERE OVERLAY IS LOADED RELOC RELOC OVLAY1 OVRNUM / CURRENT OVERLAY NUMBER OVSCUT= .-OVLAY1+OVRNUM / ENTRY POINT FOR STANDARD CUT OVERLAY JMP XVSCUT OVCLPB= .-OVLAY1+OVRNUM / ENTRY POINT FOR CLEAR CUT/ PASTE BUFFER JMP XVCLPB OVGCUT= .-OVLAY1+OVRNUM / ENTRY POINT FOR GOLD CUT OVERLAY JMP XVGCUT OVREPL= .-OVLAY1+OVRNUM / ENTRY POINT FOR GOLD REPLACE OVERLAY TSTSLT / CHECK FOR SELECT REGION /C204 JMP CLRGSR / ERROR IF NOT IN SELECT TAD (SLCTMD) / PICK UP CODE FOR SELECT COMMAND DCA GRAMUN / SET "FLAG" UNIT TYPE TAD (ESNOPC) / PICK UP NULL OUTPUT ROUTINE ADDRESS JMS CUTSUB / DELETE TO NOWHERE OVLJMP / JUMP TO DO PASTE OVPSTE CLRGSR, DCA GSRF / CLEAR GSR FLAG /C204 JMP EIBAD / ERROR IF NO SELECT / ENTRY POINT FOR GOLD CUT OVERLAY XVGCUT, TAD (ESCUTX) / PICK UP OUTPUT ROUTINE ADDRESS /A204 DCA CUTOUT / SAVE OUTPUT ROUTINE POINTER /A204 JMS ESCUTY / GO INITIALIZE POINTERS JMS SETUNT / SETUP FOR CHKUNT JMS RLEQTE / SET UP FOR RULER CHANGE CHECKING /A204 JMS CUTRUL / SAVE CURRENT RULER /A204 JMP XVGCU1 / PASTE BUFFER OVERFLOW ERROR /A204 CDFMYF / RESET BACK TO OUR FIELD DCA JCLGCT / SET FLAG TO NOT DELETE PAGE MARKER DCA SETRUL / CLEAR FLAG INDICATING RULER CROSSED /A204 JMS GETUNT / CO-ROUTINE, GET CHARACTER UNTIL SELECT GCUTNX, XX / RESTART CO-ROUTINE ENTRY POINT SNA CLA / RETURN FROM CO-ROUTINE WITH CHAR OR NULL/C204 JMP XVGCU1 / JUMP IF ALL DONE CDFMYF / RESET BACK TO OUR FIELD /A204 TAD SETRUL / GET THE RULER CROSSING FLAG /A204 SNA CLA / DID WE CROSS A RULER ? /A204 JMP XVGCU0 / NO, GO PUT CHARACTER INTO PASTE BUFFER/A204 JMS CUTRUL / YES, PUT NEW RULER INTO PASTE BUFFER /A204 JMP XVGCU1 / PASTE BUFFER OVERFLOW ERROR /A204 CDFMYF / RESET BACK TO OUR FIELD /A204 DCA SETRUL / CLEAR THE FLAG FOR NEXT TIME /A204 XVGCU0, CDFBUF / SET TO BUFFER FIELD /A204 TAD I CURPTR / PICK UP THE CURRENT CHARACTER /A204 JMS ESCUTX / STUFF IT INTO THE PASTE BUFFER JMP I GCUTNX / GO GET ANOTHER CHARACTER ISZ CURPTR / OVERFLOW, SKIP OVER CURRENT CHARACTER /A205 XVGCU1, CDFMYF / BACK TO OUR FIELD TAD GCLIT1 / RESTORE JCLEAN LITERAL DCA JCLGCT JMP ESCUT3 / PUT ONE MORE IN PSTE BUFFER GCLIT1, JTSTOF-ECPMRK / LITERAL FOR JCLEAN TO DELETE PG MRK'S / ENTRY POINT FOR STANDARD CUT OVERLAY XVSCUT, JMS ESCUTY / GO INITIALIZE POINTERS TAD (ESCUTX) / PICK UP OUTPUT ROUTINE ADDRESS JMS CUTSUB / DELETE SELECT RANGE TO PASTE BUFFER ESCUT3, ISZ ESCUT1 / CHECK FOR OVERFLOW JMP ESCUT4 / JUMP IF NORMAL TERMINATE JMS BEEPER / ELSE COMPLAIN JMP CUTMOV / KILL SELECT & BACK UP TO OVERFLOW POINT/A205 /D205 JMP UNSLCT / SCROLL TO SELECT POINT ESCUT4, CDFBUF DCA I PSTPTR / SET PASTE STOPPER TAD (RXEWT+2000) JMS PSTIO / OUTPUT LAST BUFFER JMP EINEXT / AND GO LISTEN ESCUT1, 0 / LOCATION USED FOR OVERFLOW FLAG ESCUTX, XX / ROUTINE TO PUT A CHARACTER TO PASTE BUFFER CDFBUF / SET TO BUFFER FIELD DCA I PSTPTR / STORE CHARACTER FOR OUTPUT ISZ PSTPTR / BUMP THE POINTER INTO THE PASTE BUFFER JMP I ESCUTX / RETURN IF NOT FULL TAD (RXEWT+2000) / PICK UP THE CODE FOR A DISK BLOCK WRITE JMS PSTIO / GO OUTPUT THE PASTE BUFFER BLOCK ISZ PSTBLK / BUMP THE BLOCK NUMBER TAD PSTBLK / PICK UP THE BLOCK NUMBER TAD (-PSTEND) / COMBINE WITH THE LIMIT OF BLOCKS SZA CLA / DID WE DO THE LAST PASTE BUFFER BLOCK JMP I ESCUTX / RETURN IF NOT AC7777 / SET AC TO A MINUS 1 DCA ESCUT1 / SET OVERFLOW FLAG ISZ ESCUTX / BUMP TO ABNORMAL RETURN JMP I ESCUTX / AND TAKE IT ESCUTY, XX / ROUTINE TO INITIALIZE POINTERS TSTSLT / CHECK FOR SELECT REGION JMP EIBAD / ERROR IF NOT IN SELECT TAD (PSTEBG) / PICK UP START BLOCK OF PASTE BUFFER DCA PSTBLK / SET TO BEGINNING BLOCK OF FILE JMS SETPST / SET BUFFER PTR AND COUNT DCA ESCUT1 / CLEAR OVERFLOW FLAG TAD (SLCTMD) / PICK UP CODE FOR SELECT COMMAND DCA GRAMUN / SET SELECT UNIT TYPE JMP I ESCUTY / RETURN TO CALLER / ENTRY POINT FOR "CLEAR CUT/ PASTE BUFFER" OVERLAY / WHEN READING FROM THE CUT/ PASTE BUFFER, THE PROCESS STOPS / AS SOON AS A ZERO IS READ, HENCE PUT A ZERO IN THE FIRST / WORD OF THE BUFFER, AND THE BUFFER APPEARS EMPTY XVCLPB, CLA / IF the entry into "OVJUMP" is from "F" (FINISHED using the system) / THEN "Hang-up" the modem TAD OVJUMP AND (7600) TAD (-200) SZA CLA JMP .+5 TAD (7402) CIFSYS HS2OU CLA TAD (PSTEBG) DCA PSTBLK / SET TO BEGINNING BLOCK OF FILE TAD (PSTEBF) DCA PSTPTR / RESET POINTERS CDFBUF DCA I PSTPTR / CLEAR THE FIRST WORD OF THE BUFFER TAD (RXEWT+2000) JMS PSTIO / PUT OUT BUFFER JMP OVJRTN / AND RETURN X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------------- PAGE CUTMOV, TAD (ECTMRK) / PICK UP POSITION MARKER /A205 JMS INSERT / INSERT MARK INTO TEXT BUFFER /A205 MODSET; EDTMOD / SET ADVANCE CHARACTER MODE /A205 JMS LODCHR / PICK UP CURRENT OR NEXT CHARACTER /A205 JMP EIFIX / ERROR, SHOULD NOT BE AT END OF FILE /A205 JMS GETUNT / CO-ROUTINE TO GET NEXT UNIT /A205 CUTXXX, .-. / RETURN POINT BACK TO CO-ROUTINE /A205 SZA CLA / DID WE FIND THE SELECT MARK /A205 JMP I CUTXXX / NO, GO CHECK NEXT CHARACTER /A205 CUTOVR, AC7777 / SET UP FOR A BACKWARD MOVE /A205 CURMOV / MOVE BACK ONE CHARACTER /A205 NOP / EOF RETURN, IMPOSSIBLE AT THIS TIME /A205 TAD I CURPTR / PICK UP THE CURRENT CHARACTER /A205 CIA / MAKE IT NEGATIVE /A205 TAD (ECTMRK) / CHECK FOR PLACEMENT MARK /A205 SZA CLA / IS THIS THE MARK WE JUST PUT IN ? /A205 JMP CUTOVR / NO, GO CHECK AGAIN /A205 DCA I CURPTR / CLEAR THE MARK FROM THE BUFFER /A205 JMP EIFIX / GO HANDLE NEXT COMMAND FROM USER /A205 CUTUN1= CUTXXX / USE FOR STORAGE LOCATION /A205 ESNOPC, XX / NULL OUTPUT ROUTINE FOR GOLD REPLACE CLA / CLEAR ARGUMENT JMP I ESNOPC / RETURN TO CALLER CUTSUB, XX / DELETE SELECTED TEXT THRU ARG-ROUTINE DCA CUTOUT / SAVE OUTPUT ROUTINE POINTER TAD CURPTR / GET CURSOR POINTER ADDRESS IN BUFFER DCA CUTUN1 / SAVE CURRENT POINTER JMS SETUNT / SET UP FOR CHKUNT JMS RLEQTE / SET UP FOR RULER CHANGE CHECKING JMS CUTRUL / SAVE CURRENT RULER JMP CUTUNX / PASTE BUFFER OVERFLOW ERROR /A204 JMS LODCHR / GET CURRENT OR NEXT CHARACTER JMP I CUTSUB / QUIT AT EOF, RETURN TO CALLER /C204 JMS CHKUNT / CO-ROUTINE CHECK FOR DONE CUTNXT, .-. SPA CLA / RETURNS -1 WHEN DONE JMP CUTUNX / QUIT IF DONE TAD I CURPTR / GET THE CURRENT CHARACTER BACK TAD (-ECSTRL) / COMBINE WITH THE START OF RULER CODE SZA / IS THIS THE START OF A RULER /C204 JMP CUTUNR / JUMP IF NO RULER TAD CUTUN1 / PICK UP SAVED BUFFER POINTER /C204 DCA CURPTR / RESTORE VALUE TO CURPTR JMS ESNWRL / COLLECT NEW RULER JMS CUTRUL / OUTPUT TO "CUTOUT" JMP CUTUNX / PASTE BUFFER OVERFLOW ERROR /A204 TAD CUTUN1 / PICK UP SAVED BUFFER POINTER DCA CURPTR / RESTORE VALUE TO CURPTR JMS DLTRLR / DELETE RULER JMP CUTUNC / CONTINUE CUTUNR, TAD (ECSTRL-ECRMFL) / COMBINE WITH RULER MODIFIED CODE /C204 SZA CLA / IS THIS RULER MODIFIED FLAG CODE /C204 JMP CUTUNM / JUMP IF NOT RULER MODIFIED FLAG TAD I CURPTR / PICK UP THE CURRENT CHARACTER /C204 DCA RLRMOD / SAVE RULER MODIFIED FLAG JMP CUTUNA / JUMP TO DELETE IT CUTUNM, TAD I CURPTR / PICK UP THE CURENT CHARACTER /C204 JMS ESJCHK / GO CHECK FOR JUSTIFIED CODES SNA CLA / IS THIS A JUSTIFIED CHARACTER CODE JMP CUTUNA / JUMP IF J-CODES TAD I CURPTR / PICK UP THE CURENT CHARACTER JMS CUTCHR / OUTPUT CHARACTER TO PASTE BUFFER CUTUNA, DCA I CURPTR / DELETE CHARACTER CUTUND, AC0001 / SET UP FOR A FORWARD MOVE /C204 CHKPTR / MOVE FORWARD AND CHECK NEXT CHARACTER SNA / IS IT A NULL CHARACTER JMP CUTUND / YES, GO GET NEXT CHARACTER /C204 SPA CLA / IS IT A BUFFER TERMINATOR CODE /C204 JMP CUTUNB / YES, GO RESET BUFFER WRAP POINTERS TAD I CURPTR / NO, PICK UP THE CURRENT CHARACTER JMP I CUTNXT / GO CHECK FOR DONE CUTUNB, TAD I CURPTR / PICK UP THE CURRENT CHARACTER /C204 DCA I CUTUN1 / COPY ETX POINTER TAD CUTUN1 DCA CURPTR / RESTORE CURPTR CUTUNC, ADVPTR / ADVANCE TO NEXT CHARACTER JMP CUTUNX / QUIT IF EOF JMP I CUTNXT / ELSE GO CHECK FOR DONE CUTCHR, XX / OUTPUT CHAR TO "CUTOUT" ROUTINE JMS I CUTOUT JMP I CUTCHR / JUST RETURN IF OK DCA I CURPTR / DELETE LAST CHAR AND QUIT IF OVERFLOW CUTUNX, TAD CUTUN1 DCA CURPTR / RESTORE PTR SLNMOD / SET LINE MODIFIED FLAG TAD LINMOD JMS INSERT / SAVE MOD FLAG JMS CMPRUL JMP CUTUNY / JUMP IF NO RULER CHANGE JMS INSRUL / ELSE INSERT LAST RULER CUTUNY, TAD CUTUN1 DCA CURPTR / RESTORE CURPTR AGAIN SLNMOD / SET LINE MODIFIED FLAG JMP I CUTSUB / RETURN TO CALLER CUTRUL, XX / OUTPUT RULER TAD (ECSTRL) / PICK UP START OF RULER CODE JMS CUTCHX / OUTPUT IT TO PASTE BUFFER JMS MAKRUL / MAKE A RULER IN THE PASTE BUFFER NWRUL / RULER TO USE FOR A PATTERN CUTCHX / OUTPUT ROUTINE TO USE TO MAKE A RULER TAD (ECNDRL) / PICK UP END OF RULER CODE JMS CUTCHX / OUTPUT IT TO PASTE BUFFER ISZ CUTRUL / BUMP TO "OK" RETURN /A204 JMP I CUTRUL / RETURN TO CALLER CUTCHX, XX / OUTPUT RULER CHARACTER TO "CUTOUT" JMS I CUTOUT JMP I CUTCHX / JUST RETURN IF OK JMP I CUTRUL / ELSE QUIT /C204 CUTOUT, .-. / LOCATION TO USE FOR CUT OPERATION /D205 CUTUN1, .-. / PLACE TO SAVE THE VALUE OF CURPTR X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------------- PAGE /*************************************************************************** /**** START OF OVERLAY **** /*************************************************************************** OVRNUM=OVRNUM+200 OVRBLK=OVRNUM%200+DLOEDO-1 / DISK BLOCK WHERE OVERLAY IS LOADED RELOC RELOC OVLAY1 OVRNUM OVGBKP= .-OVLAY1+OVRNUM JMP GLDBKP / TRANSFER TO GOLD BACKUP ROUTINE OVGADV= .-OVLAY1+OVRNUM JMP GLDADV / TRANSFER TO GOLD ADVANCE ROUTINE / OVNWLN -- check for permature termination of a centered line. OVNWLN= .-OVLAY1+OVRNUM JMP XVNWLN OVGPST= .-OVLAY1+OVRNUM / EXACT PASTE OVERLAY AC7777 / SET EXACT PASTE FLAG / AND FALL THRU TO PASTE OVPSTE= .-OVLAY1+OVRNUM / "PASTE" OVERLAY PSTE4, DCA GLDPSF / SET (OR CLEAR) EXACT PASTE FLAG DCA GETPSF / CLEAR EOF FLAG TAD GLDPSF SZA CLA JMS I TLITCJ / SAVE RULER IF EXACT PASTE JMS SETPST / SET UP BUFFER PTRS TAD PSTBLK TAD TLITCB / NEED TO READ FIRST? SNA CLA JMP PSTE1 / JUMP IF NOT TAD (PSTEBG) DCA PSTBLK / ELSE SET IT UP PSTE3, TAD TLITCC JMS PSTIO / AND READ IT IN PSTE1, TAD I PSTPTR PSTE9, SNA JMP PSTXIT / JUMP IF DONE JMS GSRTST / IF NOT IN GSR THEN TEST FOR GOLD+HALT /M195 JMP PSTXIT / STOP IF ONE FOUND JMS CHKSPC / Check for enough space on diskette JMS I TLITCD JMP I TLITCE / JUMP IF RULER SZA / SKIP IF REDUNDANT /D164; JMS DOINSR / ELSE INSERT CHAR IN FILE /A162 INSCHR / ELSE INSERT CHAR IN FILE /M164 PSTE8, JMS I TLITCF JMP PSTE9 / LOOP FOR ALL CHARS TLITCA, EIFIX /C168 TLITCB, -PSTEBG TLITCC, RXERD TLITCD, CHKRPC TLITCE, PSTRUL TLITCF, GETPST TLITCG, 12 TLITCH, RLGETS TLITCI, PSTRLX TLITCJ, SAVCRL PSTXIT, TAD GSRF / IS THE GLOBAL SEARCH FLAG SET? SNA CLA JMP PSTEXT / -NO- DO NORMAL REPLACE EXIT. OVLJMP / -YES- CALL BACK THE SEARCH AND OVCONT / SELECT OVERLAY TO CONTINUE G.S.R PSTEXT, TAD GLDPSF / EXACT PASTE? SNA CLA JMP I TLITCA / RETURN IF NOT TAD TLITCG JMS I TLITCH / ELSE RESTORE RULER JMS I TLITCI JMP I TLITCA / AND THEN RETURN PSTRUL, CLA JMS SETRUL GETPST / GET NEW RULER FROM PASTE BUFFER TAD GETPSF SZA CLA JMP PSTXIT / JUMP IF ABNORMAL TERMINATION TAD GLDPSF SZA CLA JMS PSTRLX / INSERT RULER IF EXACT PASTE IN EFFECT JMP PSTE8 / THEN GO GET MORE PSTRLX, XX / PASTE RULER JMS CMPRUL JMP I PSTRLX / JUST RETURN IF NOT NECESSARY TAD CURPTR DCA PSTRL2 JMS INSRUL / ELSE INSERT NEW RULER TAD (207) JMS INSERT / AND RULER MOD FLAG TAD PSTRL2 DCA CURPTR / RESTORE CURPTR SLNMOD CURMOV NOP / ADVANCE OVER RULER JMP I PSTRLX / AND RETURN PSTRL2, .-. SAVCRL, XX / SAVE CURRENT RULER (AS RLR 10.) JMS CPYBUF -RULSIZ CDFMYF CURUL-1 CDFBUF PSTEBF TAD (DLRLRE+5) DCA PSTBLK TAD (RXEWT+2000) JMS PSTIO JMP I SAVCRL OVUDLT= .-OVLAY1+OVRNUM / UNDELETE ENTRY TAD BASKCT / GET WASTEBASKET COUNT SNA JMP EIFIX / IGNORE IF NULL /C168 CIA DCA UDLTM1 TAD (BASKET-1) DCA UDLTX0 / INIT BASKET PTR UDLTLP, CDFBUF / GET TO WASTEBASKET FIELD TAD I UDLTX0 / GET NEXT CHAR JMS CHKRPC CLA / CHECK FOR REDUNDANT PRINT CONTROL SZA / SKIP IF REDUNDANT JMS DOINSR / INSERT CHAR (unless redundant) ISZ UDLTM1 JMP UDLTLP / LOOP FOR ALL JMP EIFIX / RESET MODE AND GET NEXT /C168 UDLTX0=X5 UDLTM1, 0 / TEMP X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------------- PAGE / ROUTINE TO CHECK FOR GOLD HALT IF NOT IN GLOBAL SEARCH AND REPLACE /A195 GSRTST, XX / DO HLTTST IF NOT DOING GSR /A195 DCA GSRTS2 / SAVE THE ACCUMULATOR /A195 TAD GSRF / GET THE GSR IN PROGRESS FLAG /A195 SZA CLA / ARE WE DOING A GSR OPERATION ? /A195 JMP GSRTS1 / YES, TAKE NORMAL EXIT /A195 HLTTST / CHECK THE GOLD HALT FLAG /A195 SKP / ONE FOUND, TAKE ABORT EXIT /A195 GSRTS1, ISZ GSRTST / BUMP RETURN POINTER FOR NORMAL RETURN /A195 TAD GSRTS2 / RETREIVE THE CONTENTS OF THE AC /A195 JMP I GSRTST / RETURN TO CALLER /A195 GSRTS2, 0 / LOCATION TO SAVE THE AC /A195 XVNWLN, TAD CURPTR / SAVE CURRENT TEXT POINTER. DCA JNWLNP / ... TAD T2 / SAVE T2 (FOR EINWLN). DCA NWLNT2 / ... TAD RGTMAR / COMPUTE A LOOP COUNTER. TAD (-COLM80) SMA CLA TAD (-COLLIM+COLM81) TAD (-COLM81) / ... DCA NWLNCT / SET MAX LOOP COUNTER. JMS LODCHR / GET 1ST CHAR. JMP NWLND / JMP IF NO MORE TEXT. JMP NWLNB / MERGE BELOW. NWLNA, ADVSPC / BUMP TO NEXT POSN. JMP NWLND NWLNB, AND P177 / ISOLATE LO BITS. TAD (-ECNWLN) / CHECK FOR LINE TERMINATOR. SZA CLA / SKIP IF LINE TERMINATOR. JMP NWLNC / NOT A TERMINATOR. CHECK FOR DONE. TAD I CURPTR / GET CHARACTER BACK. TAD (-ECENLN) / IS IT A "CENTER"ED MARK? SNA CLA / SKIP IF NOT /A182 JMS RSTRLN / WE MUST RE-PAINT THE LINE /A182 JMP NWLND / EXIT BELOW. /A182 /D182 SZA CLA / SKIP IF YES. WE MUST RE-PAINT THE LINE. /D182 JMP NWLND / NOPE. CONTINUE AS IS. /D182 TAD CURSOR / SAVE CURSOR. /D182 DCA NWLNCT / ... /D182 DCA CURSOR / RESET TO BEGINING OF LINE. /D182 SLNMOD / SET LINE TO BE REPAINTED FROM START. /D182 TAD NWLNCT / RESTORE CURSOR. /D182 DCA CURSOR / ... /D182 JMP NWLND / EXIT BELOW. NWLNC, ISZ NWLNCT / 1 MORE POSN CHECKED OUT. JMP NWLNA / CONTINUE TESTING. NWLND, TAD JNWLNP / RESTORE CURSOR POINTER. DCA CURPTR / ... TAD NWLNT2 / RESTORE T2 (FOR EINWLN, ETC.) DCA T2 / ... JMP OVJRTN / return to caller. NWLNT2, 0 / TEMP HOLDING PLACE FOR "T2". JNWLNP, 0 / SAVE LOCATION FOR "CURPTR". NWLNCT, 0 / TEMP COUNTER. GETPST, XX / GET NEXT CHAR FROM PST BUFFER ISZ PSTPTR / BUMP PTR JMP GETPS1 / JUMP IF OK ISZ PSTBLK / ELSE BUMP BLK TAD PSTBLK TAD (-PSTEND) / AND CHECK FOR END SNA CLA JMP GETPS2 / JUMP IF END TAD (RXERD) JMS PSTIO / ELSE READ NEXT BLOCK GETPS1, CDFBUF TAD I PSTPTR / GET NEXT CHAR SZA JMP I GETPST / RETURN IF NOT EOF GETPS2, AC7777 DCA GETPSF / ELSE SET EOF FLAG JMP I GETPST / AND RETURN DOINSR, XX / ROUTINE TO CHECK INSERTION CHAR FOR / & DCA T2 / SAVE CHAR. TAD T2 / GET IT BACK. /D164; AND P177 / MASK TO 7-BIT /A162 TAD (-ECNWLN) / SEE IF SZA / SKIP IF YES. /D164; TAD (ECNWLN-ECNWPG) / SEE IF /M162 TAD (ECNWLN-ECPGRF) / SEE IF /M164 SZA CLA / SKIP IF OR JMP DOINSA / PROCESS CHAR BELOW. OVLJMP;OVNWLN / CKECK FOR TERMINATION OF CENTERED TEXT /D164; TAD T2 / RESTORE CHAR /A162 /D164; AND P177 / MASK TO 7-BIT /A162 /D164; TAD (-ECNWPG) / SEE IF /A162 /D164; SZA CLA / SKIP IF /A162 /D164; JMP DOINSA / PROCESS CHAR BELOW /A162 /D164; DCA CURSOR / RESET CURSOR /A162 /D164; TAD LINE23 / AND /A162 /D164; DCA CURPTR / CURPTR /A162 DOINSA, TAD T2 / GET CHARACTER TO INSERT BACK. INSCHR / ELSE INSERT CHAR IN FILE JMP I DOINSR / RETURN TO CALLER. GLDBKP, AC7777 / SET UP FOR A BACKWARD MOVEMENT JMS GLDMOV / GO MOVE BACKWARD THROUGH DOCUMENT JMP EIBAD / ERROR, CAN'T BACK UP PAST TOP OF FILE JMP EIFIX / FIX UP SCREEN AND GET NEXT CHARACTER GLDADV, AC0001 / SET UP FOR A FORWARD MOVEMENT JMS GLDMOV / GO MOVE FORWARD THROUGH DOCUMENT JMP EIBAD / ERROR, CAN'T ADVANCE PAST BOTTOM JMP EIFIX / FIX UP SCREEN AND GET NEXT CHARACTER GLDMOV, XX / ROUTINE TO ADVANCE OR BACKUP IN FILE DCA GLDDIR / SAVE DIRECTION INDICATOR FOR MOVE AC0001 / SET UP TO KEEP THE SCREEN UPDATED DCA ECHFLG / TURN ON THE "ALWAYS ECHO" FLAG JMS FXSCRL / UPDATE THE SCREEN TAD GLDDIR / PICK UP MOVEMENT DIRECTION INDICATOR SPA CLA / SKIP IF DIRECTION IS FORWARD AC0001 / INDICATE A BACKUP CONDITION DCA MOVMOD+1 / SET OR CLEAR EDMODE - NEEDED FOR MODSET / PROPER EXECUTION OF EDITOR MATH MOVMOD TAD GLDDIR / PICK UP MOVEMENT DIRECTION INDICATOR CURMOV / TRY TO MOVE AT LEAST ONE POSITION JMP I GLDMOV / COULDN'T DO IT, GO REPORT THE ERROR ISZ GLDMOV / BUMP RETURN PAST ERROR RETURN GLDMV1, TAD GLDDIR / PICK UP MOVEMENT DIRECTION INDICATOR CURMOV / MOVE THE CURSOR ONE CHARACTER POSITION JMP I GLDMOV / HIT END OF DOCUMENT, ALL DONE TAD SCRLCT / PICK UP THE SCREEN LAG COUNT SPA CLA / SKIP IF SCREEN IS OK JMS FXSCRL / DON'T LET SCREEN GET BEHIND HLTTST / CHECK IF USER WANTS TO STOP JMP EIFIX / YES, THEN WE ARE ALL DONE JMP GLDMV1 / LOOP TILL STOPPED GLDDIR, 0 / LOCATION TO HOLD DIRECTION INDICATOR X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------------- PAGE /*************************************************************************** /**** START OF OVERLAY **** /*************************************************************************** OVRNUM=OVRNUM+200 OVRBLK=OVRNUM%200+DLOEDO-1 / DISK BLOCK WHERE OVERLAY IS LOADED RELOC RELOC OVLAY1 OVRNUM OVCONT= .-OVLAY1+OVRNUM / THE USER TYPED "GOLD:SEARCH & SELECT" OVCON1, TSTSLT / CHECK TO SEE IF WE ARE ALREADY IN SELECT JMP OVCON2 / NOT IN SELECT, GO DO THE SEARCH CLA / IF IN 'SELECTED' POSITION AND TAD GSRF / THE USER REQUESTS 'GLOBAL SEARCH AND SNA CLA / REPLACE', LET OPERATION CONTINUE JMP EISRCL / OTHERWISE, DO UNSELECT AND SEARCH OVLJMP / CALL IN THE 'REPLACE' OVERLAY OVREPL / TO CONTINUE G.S.R. FUNCTION / FIX TO ALLOW CONT SEARCH AND SEL TO DELETE SEL MARK THEN SEARCH NEXT ARG EISRCL, DCA EDMODE / CLEAR CURRENT EDIT MODE JMP EISRCN / GO LOAD CHAR EISRCM, ADVPTR / ADVANCE POINTER JMP SLXMOD / ETX EISRCN, JMS LODCHR / GET THE NEXT CHARACTER JMP SLXMOD / ETX JMS ESLCTD / IF SELECT MARK DELETE IT JMP EISRCM / NOT A SELECT MARK GET NEXT CHARACTER /\ JMP OVCON2 / GO DO SEARCH - FALL THROUGH OVCON2, DCA SRCDIR / SET FOR SEARCHING FORWARD AC0001 DCA ECHFLG / SET FLAG TO LET SCREEN SCROLL WITH US ISZ NOMOVE / KEEP CURSOR FROM PRE-INCREMENTING AC0001 / AND SET S/ S FLAG /\ JMP EISRCG / FALL THROUGH INTO CONTINUE SEARCH OVSRCH= .-OVLAY1+OVRNUM / USER TYPED "GOLD:CONTINUE SEARCH" / ENTER HERE FROM REGULAR SEARCH EISRCG, DCA SRCSLT / RESET S/ S FLAG CDFMYF / GO-TO-PAGE USES SRCDIR AS A FLAG WORD /A206 / MAKE SURE DIRECTION VALUE IS VALID /A206 AC0002 / SET UP AC WITH VALUE OF TWO /A206 TAD SRCDIR / COMBINE WITH VALUE IN DIRECTION FLAG /A206 SZA CLA / SKIP IF BACKWARD DIRECTION SET /A206 DCA SRCDIR / SET FORWARD DIRECTION /A206 TAD I (EIGES4+1) / PICK UP FIRST CHARACTER IN SEARCH BUFFER SNA CLA / CHECK FOR ANYTHING TO SEARCH FOR JMP EIFIX / DON'T BOTHER, IF NULL /C168 JMP EISRCB / SKIP OVER BUFFER POINTER RESTORATION EISRCA, TAD EIFND4 / PICK UP SAVED BUFFER POSITION DCA CURPTR / RESTORE CURPTR EISRCB, HLTTST / GO CHECK IF USER PRESSED THE HALT KEY JMP EISRCJ / QUIT ON HALT TAD NOMOVE / DO WE MOVE CURSOR OR NOT? SZA CLA JMP EISRCQ / NO, WE DON'T AC0001 / SET UP FOR A FORWARD MOVEMENT TAD SRCDIR / COMBINE WITH REAL DIRECTION CURMOV / MOVE TO NEXT CHARACTER JMP EISRCK / STX/ETX, QUIT AT END OF BUFFER EISRCQ, CDFMYF / RESET BACK TO THIS FIELD DCA NOMOVE / CLEAR THE MOVEMENT FLAG TAD CURPTR / PICK UP THE CURRENT BUFFER POSITION DCA EIFND4 / SAVE CURPTR TAD (EIGES4+1) / PICK UP POINTER TO SEARCH STRING DCA EIFND6 / SET UP POINTER REGISTER CDFBUF / SET TO BUFFER FIELD TAD I CURPTR / GET CURRENT CHARACTER JMP EISRCD / SKIP OVER BUFFER MOVEMENT ROUTINE EISRCC, ADVPTR / MOVE POINTER ONE BUFFER POSITION /C209 /D209 ADVSPC / MOVE POINTER ONE SCREEN POSITION JMP EISRCA / ETX, QUIT AT END OF BUFFER EISRCD, JMS ESJCHK / CHECK FOR LINE OR RULER MODIFIED FLAG SNA / AC = 0 OR AC = VALID CHARACTER - JCHKOF JMP EISRCC / NO JUST CODES TAD (JCHKOF) / RESTORE TO ORIGINAL CHARACTER CDFMYF / RESET TO THIS FIELD TAD (-ECSTOV) / START OF DEAD-KEY SEQUENCE? SZA / SKIP IF YES. JMP EISRCX / TAD I EIFND6 / GET CHARACTER FROM STRING JMP EISRDK / GO HANDLE DEAD KEY SEQUENCE EISRCX, TAD (ECSTOV) / NO, RESTORE TO ORIG. CHAR MQL / PUT CHARACTER IN THE MQ TAD I EIFND6 / GET CHARACTER FROM STRING /A198 TAD (-ECNWLN) / COMPARE WITH NEW LINE CHARACTER /A198 SZA CLA / IS THIS A CARRIAGE RETURN ? /A198 JMP EISNNL / NO, THIS IS NOT A NEW LINE /A198 MQA / GET BACK THE BUFFER CHARACTER /A198 TAD (-ECNWLN) / COMPARE WITH NEW LINE CHARACTER /A198 SZA CLA / IS BUFFER CHARACTER A NEW LINE ? /A198 JMP EISRCA / NO, NO MATCH, GO RESTART THE SEARCH /A198 EISNNL, TAD I EIFND6 / PICK UP CHARACTER FROM SEARCH STRING SWP / SWAP PLACES WITH BUFFER CHARACTER JMS USCMPR / COMPARE WITH STRING BYTE JMP EISRCA / JUMP IF NO MATCH EISRCY, ISZ EIFND6 / THEY MATCH, BUMP THE STRING POINTER TAD I EIFND6 / GET THE NEXT CHARACTER SZA CLA / CHECK FOR NULL CHARACTER JMP EISRCC / NOT NULL, LOOP TILL END OF STRING TAD SRCSLT / DONE, GET THE SEARCH AND SELECT FLAG SNA CLA / IS IT SET ? JMP EISRCE / NO, SKIP AROUND ADVPTR / IF SET, PASS FINAL CHARACTER NOP / ETX RETRUN, SHOULD NOT HAPPEN CLA / THROW AWAY ANY CHARACTER CODE RETURNED TAD (ECTMRK) / PICK UP POSITION MARK JMS INSERT / MARK OUR PLACE FOR SELECT TAD EIFND4 / PICK UP SAVED BUFFER POSITION DCA CURPTR / RESTORE TO START OF STRING JMP DOSLCT / JUMP TO SELECT STRING EISRCE, TAD EIFND4 DCA CURPTR / RESTORE CURPTR EISRCF, JMP EIFIX /C168 SRCSLT, 0 / SEARCH AND SELECT FLAG EIFND4, 0 EIFND6, 0 X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------------- PAGE EISRCK, CDFMYF CLA DCA GSRPRV / CLEAR PREVIOUS GLOBAL SEARCH FLAG DCA NOMOVE /\ JMP EISRCJ / FALL THROUGH / HERE AFTER HALT TEST - FIELD = EDITOR EISRCJ, TAD XLTINI / RESTORE GSKILN AFTER FINISHING DCA GSKILN / A G.S.R. OPERATION JMS BUZZER / DO NOT CLEAR UDK STACK(BEEPER DOES) TAD SRCDIR / PICK UP THE SEARCH DIRECTION SNA CLA / SKIP IF NOT GOING FORWARD AC7776 / REVERSE DIRECTION DCA SRCDIR / FOR NEXT TIME DCA GSRF / CLEAR GLOBAL SEARCH FLAG JMP EIFIX / GO BACK FOR NEXT EDITOR COMMAND /C168 XLTINI, CIFSYS / INST TO PATCH UP EDITOR / DEAD KEY SEQUENCE WAS FOUND IN TEXT BUFFER. CHECK FOR TECH CHARACTER / AND REQUIRED SPACE. IF NOT, THEN RESTART THE SEARCH EISRDK, SPA / CHECK FOR A SPECIAL CHARACTER ? CMA / YES, INVERT THE CHARACTER FOR CHECK DCA EISRT1 / SAVE THE CURRENT BUFFER CHARACTER ADVPTR / MOVE TO THE NEXT CHARACTER OF SEQUENCE JMP EISRCA / ETX, GO RESTART THE SEARCH AND P177 / Strip off attributes /A228 TAD (-ECSPC) / SUBTRACT OFF THE VALUE OF A SPACE SZA CLA / WAS THIS CHARACTER A SPACE ? JMP EISRCA / NO, MUST BE A NORMAL DEAD KEY, RESTART ADVPTR / MOVE TO THE NEXT CHARACTER OF SEQUENCE JMP EISRCA / ETX, GO RESTART THE SEARCH DCA EISRT2 / SAVE THE CHARACTER JUST OBTAINED TAD EISRT2 / GET THE CHARACTER BACK AGAIN TAD (-ECSPC) / SUBTRACT OFF THE VALUE OF A SPACE SZA CLA / WAS THIS CHARACTER A SPACE ? JMP EISRTC / NO, IT MUST BE A TECHNICAL CHARACTER TAD EISRT1 / GET THE SAVED BUFFER CHARACTER SNA / CHECK FOR REQUIRED SPACE CODE JMP EISROK / YES, IT'S A MATCH TAD (-ECSPC) / CHECK FOR A NORMAL SPACE SZA CLA / CHECK FOR A MATCH JMP EISRCA / NO MATCH, GO RESTART THE SEARCH JMP EISROK / IT'S A MATCH, GO GET END OF DEAD KEY EISRTC, TAD EISRT2 / GET THE CHARACTER BACK AGAIN AND (174) / DROP OUT LOW ORDER BITS /M228 TAD (-60) / SUBTRACT OFF CHARACTER SET VALUE SZA CLA / IS THIS A TECH CHARACTER ? JMP EISRCA / NO, GO RESTART THE SEARCH TAD EISRT2 / GET THE CHARACTER BACK AGAIN AND (3) / ISOLATE THE LOW ORDER BITS DCA EISRT3 / SAVE FOR COMPARISON TAD EISRT1 / GET THE BUFFER CHARACTER R3L / POSITION CHARACTER SET BITS AND (3) / ISOLATE THE LOW ORDER BITS CIA / MAKE VALUE NEGATIVE TAD EISRT3 / COMBINE WITH SAVED BITS SZA CLA / IS THERE A MATCH ? JMP EISRCA / NO, GO RESTART THE SEARCH TAD EISRT1 / YES, GET THE SAVED BUFFER CHARACTER AND P177 / ISOLATE THE LOW ORDER BITS DCA EISRT3 / SAVE FOR COMPARISON ADVPTR / MOVE TO THE NEXT CHARACTER OF SEQUENCE JMP EISRCA / ETX, GO RESTART THE SEARCH AND P177 / Strip off attributes /A228 CIA / NEGATE THE CHARACTER TAD EISRT3 / COMBINE WITH SAVED ASCII CHARACTER SZA CLA / CHECK FOR A MATCH JMP EISRCA / NO MATCH, GO RESTART THE SEARCH EISROK, ADVPTR / MOVE TO THE NEXT CHARACTER OF SEQUENCE JMP EISRCA / ETX, GO RESTART THE SEARCH TAD (-ECNDOV) / SUBTRACT OFF VALUE OF END DEAD CHARACTER SZA CLA / IS THIS THE END OF THE DEAD KEY ? JMP EISROK / NO, GO CHECK AGAIN CDFMYF / RESET BACK TO THIS FIELD FOR NEXT CHECK JMP EISRCY / DONE, GO CHECK NEXT CHARACTER EISRT1, .-. / TEMPORARY REGISTER ONE - BUFFER CHARACTER EISRT2, .-. / TEMPORARY REGISTER TWO - TEXT CHARACTER EISRT3, .-. / TEMPORARY REGISTER THREE - MATCH VALUE X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------------- PAGE /*************************************************************************** /**** START OF OVERLAY **** /*************************************************************************** OVRNUM=OVRNUM+200 OVRBLK=OVRNUM%200+DLOEDO-1 / DISK BLOCK WHERE OVERLAY IS LOADED RELOC RELOC OVLAY1 OVRNUM IFDEF LFTRGT < OVRARO= .-OVLAY1+OVRNUM JMP XVRARO / RIGHT ARROW OVLARO= .-OVLAY1+OVRNUM JMP XVLARO / LEFT ARROW > OVUPAR= .-OVLAY1+OVRNUM JMP XVUPAR / UP ARROW OVDNAR= .-OVLAY1+OVRNUM JMP XVDNAR / DOWN ARROW OVGRAR= .-OVLAY1+OVRNUM JMP XVGRAR / GOLD RIGHT ARROW OVGLAR= .-OVLAY1+OVRNUM JMP XVGLAR / GOLD LEFT ARROW OVSUPS= .-OVLAY1+OVRNUM JMP XVSUPS OVHYP2= .-OVLAY1+OVRNUM JMP XVHYP2 / LCMAP defines the end of the alphabet that is to be considered for / UPPER/ lower casing commands. 133 includes "A"-"Z", and 136 / includes "A"-"Z" and the national standard characters "[","\" and "]" IFDEF SCANDI / Scandinavian: include extra characters IFNDEF SCANDI / American: use only ASCII set OVCASE= .-OVLAY1+OVRNUM / SET UPPER-LOWER CASE JMS SCRNMD / SHOW SCREEN (TO BE) MODIFIED JMS GETUNT CASNXT, XX SNA JMP EINEXT JMS BHOOK / Call Blaster /A230 MNCUCS / Case any valid char /A230 JMP GETUNY / Finished with invalid or dead /A230 JMP I CASNXT / Exit /A230 /d230 TAD (-ECSTOV) / Is it a dead key sequence /A207 /d230 SNA / No /A207 /d230 JMP GETUNY / Yes, curmov over it /A207 /d230 TAD (ECSTOV) / Restore character to original value /A207 /d230 JMS CHKALP /d230 JMP I CASNXT /d230 AND (137) / SET UPPER CASE /d230 TAD (-133) / CHECK FOR PROPER RANGE /d230 SMA /d230 JMP CASUN1 /d230 TAD (133-101) /d230 SPA /d230 JMP CASUN1 /d230 CLA MQA /d230 AND (7737) /d230 TAD CASBIT /d230 MQL /d230CASUN1, CLA MQA /d230 JMP I CASNXT OVBOLD= .-OVLAY1+OVRNUM XVBOLD, JMS SCRNMD / SET BOLD - SHOW SCREEN (TO BE) MODIFIED JMS GETUNT BLDNXT, XX SNA JMP EINEXT JMS CHKALP JMP BLDUN2 BLDUN3, AND (7577) / CLEAR THE BIT TAD BLDBIT / SO WE CAN (SET) IT BLDUN1, JMP I BLDNXT BLDUN2, AND (2177) TAD (-40) SZA TAD (40-ECTAB) / ALLOW TABS TO BE BOLDED SZA CLA JMP BLDUN1 CLA MQA JMP BLDUN3 OVUNDL= .-OVLAY1+OVRNUM XVUNDL, JMS SCRNMD / UNDERLINING - SHOW SCREEN (TO BE) MODIFIED JMS GETUNT UDLNXT, XX SNA JMP EINEXT JMS CHKALP JMP UDLUN2 RTL SPA CLA JMP UDLUN1 / IGNORE IF SUPERSCRPTED UDLUN3, CLA MQA / RESTORE CHAR AND (7377) / CLEAR THE BIT TAD UDLBIT / SO WE CAN (SET) IT UDLUN1, JMP I UDLNXT UDLUN2, AND (3177) TAD (-40) SZA TAD (40-ECTAB) SZA CLA JMP UDLUN1 JMP UDLUN3 XVSUPS, TSTSLT / SUPER-SUBSCRPT SKP CLA TAD (SLCTMD) DCA GRAMUN JMS SETUNT JMS GETUNT SUPNXT, XX SNA JMP EIFIX /C168 JMS CHKALP JMP I SUPNXT AND (2377) SWP RTL RAL SNL CLA / CLEAR IF NOT SUP-SUB SPA CLA CMA CLL / -1 IF SUB SZL IAC / +1 IF SUP TAD CASBIT / ADJUST FOR MODE IN EFFECT TAD (TAD EISUP1) / THIS INSURES A CURRENT PAGE REFERENCE / AVOIDING ANY DATA FIELD PROBLEMS DCA .+1 .-. MQA JMP I SUPNXT 1400 / SUB OF SUB 1400 / SUB OF NORMAL 0000 / SUB OF SUP (OR SUP OF SUB) EISUP1, 1000 / SUP OF NORMAL 1000 / SUP OF SUP / / We are here because the user tried to Hyphenate a char which /A231 / was not alpha , so check for 8 bit /A231 / XVHYP3, TAD (-ECNDOV) / Check if we are on a dead /A231 SZA CLA / Yes , go check it out /A231 JMP XVHYP4 / No , go on as normal /A231 JMS BHOOK / Call the Blaster again /A231 XVMNPH / Check for Mutli Nat for Hyphen /A231 JMP XVHYP4 / And exit /A231 X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------------- PAGE XVHYP2, BKPPTR JMP I TLITDA JMS CHKALP JMP XVHYP3 / Go check for 8 bit /M231 AC2000 MQA / SET BREAK BIT DCA I CURPTR / STORE UPDATED CHAR XVHYP4, ADVPTR NOP / RESTORE CURSOR JMP EIFIX /C168 TLITDA, EIBAD / **TEMP FOR OS/ 8 LIT POOL LIMIT BYPASS /*********************************************************************** /**** LEFT AND RIGHT ARROW ROUTINES **** /*********************************************************************** IFDEF LFTRGT < / LEFT AND RIGHT CURSOR XVLARO, IAC / MOVE MODE XVRARO, JMS ARMSET / SET MOVE MODE JMS ARCURM / GO MOVE CURSOR JMP EIBAD / (STX/ETX OR SCROLL) JMP EINEXT / DIDN'T SCROLL, SUPER! > / END IFDEF LFTRGT /*********************************************************************** /**** GOLD LEFT AND RIGHT ARROW ROUTINES **** /*********************************************************************** XVGLAR, IAC / MOVE MODE XVGRAR, JMS ARMSET / SET MOVE MODE DCA ARCTMP / SAVE CURSOR DIRECTION TAD ARCTMP JMS ARCURM / MOVE CURSOR JMP EIBAD / (CAN'T, GO BUZZ) GLDARR, TAD ARCTMP JMS ARCURM / KEEP MOVING TILL WE GET JMP EINEXT / TO THE END OF THE LINE JMP GLDARR /*********************************************************************** /**** UP AND DOWN ARROW ROUTINES **** /*********************************************************************** XVUPAR, IAC / MOVE MODE XVDNAR, JMS ARMSET / SET MOVE MODE JMS UPDNAR / GO MOVE THE CURSOR JMP EINEXT / OKAY JMP EIBAD / (CAN'T) /*********************************************************************** / COMMON CODE FOR UP/DOWN ARROW / ENTER: AC = CURSOR DIRECTION (+1=ADV, -1=BKP) / EXIT: 1ST RETURN IF WE ARE SITTING ON THE FIRST OR / LAST LINE OF TEXT (CURSOR UNCHANGED) / SKIP RETURN IF WE ACTUALLY SCROLL A LINE / (CURSOR MOVED TO PROPER POSITION W/IN LINE) /*********************************************************************** UPDNAR, XX DCA ARCTMP / SAVE DIRECTION TAD REMCUR / DO WE HAVE A REMEMBERED POSITION? SMA CLA JMP UPDN0 / YES, ALL SET TAD CURSOR / NO, SAVE WHERE WE ARE NOW DCA REMCUR UPDN0, TAD ARCTMP / GOING FORWARD OR BACK? SPA CLA JMP UPDNUP / (BACK) / GOING FORWARD (DOWN ARROW) AC0001 JMS ARMVSC / FORWARD TILL WE SCROLL ISZ UPDNAR / ETX, TAKE SKIP RETURN JMS FXSCRL / FIX FOR DOWN ARROW AND MATH /A194 JMP UPDNXT / THEN GO POSITION CURSOR / GOING BACKWARD (UP ARROW) UPDNUP, JMS SAVLMD / SAVE LINE MODE IF NECESSARY AC7777 / BACK UP TILL WE SCROLL JMS ARMVSC SKP / (STX) JMP UPDNU0 ISZ UPDNAR / STX, TAKE SKIP RETURN UPDNU1, CURMOV / FIX CURSOR AT STX NOP JMP UPDNXT / GO POSITION CURSOR UPDNU0, AC7777 JMS ARMVSC / BACK UP TILL WE SCROLL AGAIN JMP UPDNU1 / (STX, GO FIX -- NO ERROR THIS TIME) AC0001 / AND FORWARD JMS ARMVSC NOP / COMMON EXIT PROCESSING FOR UP & DOWN POSITION THE CURSOR ON THE LINE UPDNXT, CLA CDFEDT TAD REMCUR / WHERE ARE WE NOW? CIA TAD CURSOR SMA CLA / (NOT THERE YET) JMP I UPDNAR / ALL DONE, RETURN CDFBUF / SET FIELD TO EDIT BUFFER /A202 TAD I CURPTR / GET CURRENT CHARACTER /A202 CDFMYF / RESET DATA FIELD /A202 AND P177 / MASK OUT CHARACER /A202 ZZCASE / TEST FOR LINE ENDER CONDITIONS /A202 UPDNX9-1 / TABLE /A202 AC0001 / NO MATCH ADVANCE CURSOR JMS ARCURM / MOVE WITHOUT LEAVING LINE /C211 UPDNX1, JMP I UPDNAR / HIT STX OR ETX JMP UPDNXT / HAVE WE REACHED THE PROPER COLUMN COUNT UPDNX9, ECNWLN; UPDNX1 / LINE ENDER CHARACTERS /A202 ECNWPG; UPDNX1 / /A202 0000 / /A202 / ARROW KEYPAD CURSOR MOVE (MOVE W/O LEAVING LINE) / ENTER: AC = CURSOR DIRECTION (+1=ADV, -1=BKP) / EXIT: AC = 0 / 1ST RETURN IF WE CAN'T MOVE ON THE LINE ARCURM, XX DCA ARCTMP / SAVE DIRECTION DCA SCRLFL / ENSURE SCROLL FLAG 0 TAD ARCTMP CURMOV / MOVE THE CURSOR JMP I ARCURM / (STX OR ETX) CLA TAD SCRLFL / DID WE SCROLL? SZA CLA JMP ARCRM0 / (YES, THAT'S A NO-NO) ISZ ARCURM / NO, GREAT! TAKE SKIP JMP I ARCURM ARCRM0, TAD ARCTMP / PROBLEM -- WE SCROLLED CIA JMS ARMVSC / UNDO THE SCROLL NOP JMP I ARCURM / TAKE FIRST RETURN / ROUTINE TO MOVE CURSOR TILL WE SCROLL / ENTER: AC = CURSOR DIRECTION (+1=ADV, -1=BKP) / EXIT: AC = 0 / 1ST RETURN - WE HIT STX OR ETX (IF STX, WE SCROLLED) / 2ND RETURN - OKAY ARMVSC, XX DCA ARCTMP / SAVE DIRECTION DCA SCRLFL / ENSURE FLAG = 0 ARMVS0, TAD ARCTMP CURMOV / MOVE THE CURSOR JMP I ARMVSC / (STX OR ETX) CLA TAD SCRLFL / DID WE SCROLL? SNA CLA JMP ARMVS0 / NO, GO AGAIN ISZ ARMVSC / YES, TAKE SKIP JMP I ARMVSC / RETURN / SET MOVE MODE FOR ARROW KEYPAD / ENTER: AC = MOVE MODE (0=ADV, 1=BKP) / EXIT: AC = CURSOR DIRECTION (+1=ADV, -1=BKP) ARMSET, XX DCA ARCTMP MODSET / SET MOVE MODE ARMODE TAD ARCTMP / NOW SET THE CURSOR DIRECTION SZA AC7776 / (BACKUP) IAC / (ADVANCE) JMP I ARMSET ARMODE, SCHMOD!SLTMOD ARCTMP, .-. / TEMP STORAGE FOR THIS PAGE X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------------- PAGE / OVERLAY TO MERGE LIST DOCUMENT / THE CHARACTER "<" IN A FORM DOCUMENT IS TREATED IN A SPECIAL WAY DEPENDING ON / WHAT FOLLOWS IT: / - SUBSTITIUTE THE TEXT OF THE NAMED FIELD IN THE / CURRENT RECORD AT THIS POINT IN THE OUTPUT. / - START THE REPETITIVE ZONE HERE, NOT AT THE TOP OF THE / FORM DOCUMENT. (PRECEDING TEXT IS THE HEADER.) / - END THE REPETITIVE ZONE HERE, NOT AT THE BOTTOM OF THE / FORM DOCUMENT. (FOLLOWING TEXT IS A TRAILER.) / - COPY THE TEXT OF THE CURRENT RECORD FROM THE LIST / DOCUMENT TO THE OUTPUT. / <> - ADVANCE TO THE NEXT RECORD IN THE LIST DOCUMENT. / << - OUTPUT A SINGLE "<" AT THIS POINT. / NO OTHER CHARACTERS IN THE FORM DOCUMENT ARE TREATED SPECIALLY. /*************************************************************************** /**** START OF OVERLAY **** /*************************************************************************** OVRNUM=OVRNUM+200 / NEW OVERLAY NUMBER OVRBLK=OVRNUM%200+DLOEDO-1 / DISK BLOCK WHERE OVERLAY IS LOADED RELOC RELOC OVLAY1 OVRNUM OVMRG2= .-OVLAY1+OVRNUM / SECOND MERGE OVERLAY ISZ ECHFLG / SET FLAG TO LET SCREEN SCROLL WITH US ISZ MRGRSF / INIT RESYNC FLAG FOR: NO RESYNC MRGFSA, CURMOV NOP MRGFSB, JMS LODCHR / LOOKING FOR START OF FIELD JMP MRGEOF / WE HIT END OF THE FORM DOCUMENT AND P177 / STRIP MODE BITS FROM CHARACTER TAD (-"<+200) / IS CHARACTER = "<"? SZA CLA / SKIP IF: SO JMP MRGADV / JUMP IF NOT TAD CURPTR / GET POINTER TO LEFT ANGLE BRACKET DCA MRGPT2 / SAVE POINTER TO LEFT ANGLE BRACKET SLNMOD / SET LINE MODIFIED FLAG JMS JCLEAN / WE'RE GOING TO CHANGE SOMETHING ADVPTR / GET NEXT CHARACTER JMP MRGETX / WE HIT END OF TEXT AND P177 / STRIP MODE BITS TAD (-"<+200) / IS CHARACTER ANOTHER "<"? SNA / SKIP IF: NOT JMP MRGS1A / GO PROCESS A "<<" SEQUENCE TAD ("<-">) / IS CHARACTER = ">"? SNA / SKIP IF: NOT JMP MRGS2A / GO PROCESS "<>"(NULL FIELD NAME) TAD (">-"!) / IS CHARACTER = "!"? SNA CLA / SKIP IF: NOT JMP MRGS3A / GO PROCESS SPECIAL NAME (!E, !R, !S) / MATCH FIELD NAME IN FORM DOCUMENT TO A FIELD NAME FROM THE MATH / RESULT BUFFER AND THEN THE RECORD BUFFER JMS MFNIFD / MATCH FIELD NAME IN FORM DOCUMENT TO RESBUF / FIELD NAME IN MATH RESULT BUFFER CDFLP / RESBUF IS IN LIST PROCESS. FIELD / IF NO MATCH IS FOUND WE WILL RETURN / HERE FROM THE JMS SO WE CAN TRY TO / FIND A MATCH IN RECBUF. IF A MATCH / WAS FOUND IN RESBUF THEN MFNIFD / RETURNS TO MRGFSA (NOT HERE!!!!). / ALL FOR THE NEED OF SPACE. JMS MFNIFD / MATCH FIELD NAME IN FORM DOCUMENT TO RECBUF / FIELD NAME IN RECORD BUFFER CDFBUF / DF TO THE EDITOR BUFFER FIELD JMP MRGFNF / NO MATCH - FIELD NAME NOT FOUND IN / EITHER RESBUF OR RECBUF. / IF NO MATCH IS FOUND WE WILL RETURN / HERE FROM THE JMS SO WE CAN GO TO / FIELD NOT FOUND ROUTINE. IF A / MATCH WAS FOUND IN RECBUF THEN / MFNIFD RETURNS TO MRGFSA (NOT / HERE!!!!). ALL FOR THE NEED OF / SPACE. /**************************************************************************** / / The following routine has been made into a blasted routine /a224 / to make space for the multinational and technical character set /a224 / changes (see WPHOLE.PA for explanation). /a224 / /**************************************************************************** /d224 MFNIFD, XX / MATCH FIELD NAME IN FORM DOCUMENT /d224 CDFMYF / CHANGE DF TO MY FIELD /d224 TAD I MFNIFD / GET ADDRESS OF BUFFER TO MATCH /d224 DCA MRGPT1 / SAVE IT /d224 ISZ MFNIFD / BUMP RETURN /d224 TAD I MFNIFD / GET FIELD OF THAT BUFFER /d224 DCA TADIM1 / SAVE IT /d224 ISZ MFNIFD / BUMP RETURN /d224 MRGFS1, TAD MRGPT2 / POINT TO TEXT BRACKET IN FORM /d224 DCA CURPTR / RESET POINTER /d224 MRGFS2, JMS TADIMRGPT1 / GET NEXT CHAR FROM RECORD ISZ MRGPT1 / BUMP RECORD PTR /d224 SNA / SKIP IF: NOT END OF RECORD /d224 JMP I MFNIFD / FIELD NOT FOUND, END OF RECORD / RETURN TO CALLER /d224 TAD (-"<+200) / IS CHARACTER = "<"? /d224 SZA CLA / SKIP IF: SO /d224 JMP MRGFS2 / LOOP TIL FIELD START /d224 TAD (-GPBSIZ / Field found, so init max siz counter /a224 /d224 DCA T2 / to ignore end comparison if max siz /a224 /d224 / for significant field name reached /a224 /d224 MRGFS3, ADVPTR / GET NEXT FIELD VALUE CHAR. FROM TEXT /d224 JMP MRGETX / WE HIT THE END OF TEXT /d224 AND P177 / STRIP MODE BITS /d224 XLTUPR / XLAT CHAR TO UPPER CASE /d224 CIA / SET UP FOR COMPARE WITH RECORD'S /d224 DCA T1 / FIELD NAME VALUE /d224 JMS TADIMRGPT1 / GET NEXT CHAR FROM RECORD /d224 XLTUPR / XLAT TO UPPER CASE /d224 TAD T1 / COMPARE WITH CHARACTER FROM TEXT /d224 ISZ T2 / Has the max length of FN been reached?/a224 /d224 SNA CLA / NO, SKIP IF: CHARACTERS DON'T MATCH /d224 SKP CLA / Yes, or match, skip on. /a224 /d224 JMP MRGFS1 / LOOP IF NOT EQUAL /d224 JMS TADIMRGPT1 / GET NEXT RECORD CHARACTER /d224 ISZ MRGPT1 / BUMP POINTER INTO RECORD /d224 TAD (-">+200) / IS CHARACTER = ">"? /d224 SZA CLA / SKIP IF:SO /d224 JMP MRGFS3 / CHECK FOR END OF NAME /d224 TAD MRGPT2 / RESET TEXT BUFFER POINTER TO START OF /d224 DCA CURPTR / FIELD NAME WE JUST MATCHED. /d224 JMS MRGDLF / DELETE THAT FIELD NAME FROM TEXT /d224 MRGFS4, DCA MRGPT2 / SET LOOKAHEAD /d224 JMS TADIMRGPT1 / CHECK FOR END OF FIELD IN RECORD /d224 TAD (-"<+200) / IS CHARACTER = "<"? /d224 SNA CLA / SKIP IF: NOT /d224 JMP MRGFS5 / JUMP IF END OF FIELD VALUE /d224 TAD MRGPT2 / GET LOOK AHEAD CHARACTER /d224 SZA / SKIP IF: 0 /d224 INSCHR / OUTPUT LOOKAHEAD /d224 JMS TADIMRGPT1 / LOAD NEW LOOKAHEAD /d224 CLA SWP / ATTRIBUTED CHAR. COMES BACK IN THE MQ /d224 / NOW RESTORE IT TO THE AC /d224 ISZ MRGPT1 / BUMP POINTER INTO FIELD VALUE /d224 JMP MRGFS4 / LOOP TO OUTPUT NEXT FIELD VALUE CHAR. /d224 / INTO RESULT DOCUMENT /d224 /d224 MRGFS5, TAD MRGPT2 / OUTPUT LAST CHAR AT END OF FIELD /d224 TAD (-40) / WAS THIS A SPECIAL CHAR.? /d224 SPA SNA CLA / SKIP IF: NOT /d224 JMP MRGFS6 / SPECIAL CHARACTER. DO NOT INSERT /d224 TAD MRGPT2 / REGULAR CHARACTER. INSERT INTO TEXT /d224 INSCHR /d224 MRGFS6, JMP MRGFSA / BUMP RETURN FOR MATCH /**************************************************************************** / / The following routine is the replacement for the above. It /a224 / calls the blaster hook for this field to blast in the field /a224 / name search routine moved. /a224 / /**************************************************************************** MFNIFD, XX / Replacement field name search /a224 CDFMYF / Return to home data field /a224 TAD I MFNIFD / Set up the parameters passed after the/a224 DCA MRGPT1 / call, which can not be done by the /a224 ISZ MFNIFD / blasted routine, as the return addres /a224 TAD I MFNIFD / points to the blaster, not the call to/a224 DCA TADIM1 / here. /a224 ISZ MFNIFD / /a224 JMS BHOOK / Blast in the routine /a224 MFNHLR / Merge_Field_Name_HoLe_Routine /a224 JMP I MFNIFD / Return here if not found, and exit /a224 SZA CLA / Return here if found or EOF of form /a224 JMP MRGFSA / If found, continue /a224 JMP MRGETX / If EOF, deal with it /a224 / THIS ROUTINE WILL READ A CHARACTER FROM THE BUFFER SPECIFIED WHEN / MFNIFD WAS CALLED. TADIM1 IS PRIMED UPON CALL TO MFNIFD. UPON / READING A CHARACTER THE DF IS ALWAYS RETURNED TO THE EDITOR BUFFER / FIELD SINCE OTHER ROUTINES CALLED DURING OVMRG2 DEPEND ON DF SET / TO THE EDITOR BUFFER FIELD. / THE MQ IS USED TO HOLD THE ATTRIBUTED CHARACTER SO THAT WHEN / LOADING CHARACTERS FROM THE LIST DOCUMENT TO THE RESULT DOC. / ATTRIBUTES OF CHARACTERS ARE NOT DROPPED TADIMRGPT1, XX TADIM1, .-. / LOADED WITH CDF INSTRUCTION TAD I MRGPT1 / READ CHARACTER FROM RECORD MQL / LOAD THE ATTRIBUTED CHAR INTO THE MQ MQA / RESTORE THE CHAR INTO THE AC AND P177 / STRIP MODE BITS CDFBUF / SET DF TO EDITOR BUFFER FIELD JMP I TADIMRGPT1 / RETURN / MULTIPLE LEFT ANGE BRACKET SEQUENCE HANDLER ("<<...ETC.") - DELETE / ONE OF THE LEFT ANGLE BRACKETS IN THE TEXT AND IGNORE ANY THAT / IMMEDIATELY FOLLOW. WHEN THE FIRST CHARACTER THAT IS NOT A "<" IS / READ REENTER SCAN LOOP. THIS ENABLES US TO USE FIELD NAMES AS / TEXT WITHIN A DOCUMENT WITHOUT TRYING TO FIND A MATCH WITH A / FIELD NAME IN THE CURRENT RECORD. MRGS1A, DCA I CURPTR / DELETE ONE OF THE LEFT ANGLE BRACKETS TAD MRGPT2 / RESTORE POINTER TO START OF FIELD DCA CURPTR SLNMOD / SET LINE MODIFIED FLAG MRGS1B, AC0001 / ADVANCE CURSOR 1 CHARACTER CURMOV JMP MRGEOF / EOF RETURN FROM CURMOV JMS CHKSPC / CHECK DISKETTE SPACE JMS LODCHR / GET THE NEXT CHARACTER JMP MRGEOF / EOF RETURN AND P177 / STRIP MODE BITS TAD (-"<+200) / IS CHARACTER = "<"? SNA CLA / SKIP IF: NOT JMP MRGS1B / CHARACTER = "<". GET NEXT ONE JMP MRGFSB / REENTER SCAN LOOP X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------------- PAGE / ADVANCE CURSOR ONE CHARACTER AT A TIME THROUGH RESULT DOCUMENT, / CHECKING FOR ENOUGH ROOM ON DISKETTE TO CONTINUE THROUGH THE DOC. MRGADV, AC0001 / ADVANCE CURSOR 1 CHARACTER CURMOV JMP MRGEOF / EOF RETURN FROM CURMOV JMS CHKSPC / CHECK DISKETTE SPACE JMP MRGFSB / GO CHECK NEXT CHAR / FIELD NOT FOUND (NO MATCH BETWEEN FORM DOCUMENT FIELD AND ANY OF THE / FIELDS OF THE CURRENT RECORD BEING PROCESSED). THEREFOR DELETE THIS / FIELD FROM THE RESULT DOCUMENT. MRGFNF, TAD MRGPT2 / POINT TO START OF FIELD IN RESULT DOC. DCA CURPTR JMS MRGDLF / AND DELETE THE FIELD JMP MRGFSA / THEN CONTINUE SCAN LOOP / EMPTY LEFT AND RIGHT ANGLE BRACKET HANDLER ("<>") - DELETE "<>" FROM / THE RESULT DOCUMENT AND LOAD THE NEXT RECORD TO BE PROCESSED. MRGS2A, TAD MRGPT2 / RESET POINTER TO "<" DCA CURPTR JMS MRGDLF / DELETE "<>" FROM RESULT DOCUMENT JMS MRGNXT / GET NEXT RECORD SKP / NO MORE RECORDS JMP MRGFSA / REENTER SCAN LOOP IF WE GOT ONE / ELSE SKIP TO / DELETE TO AND INCLUSIVE OF THE CONTROL SEQUENCE "" IN THE RESULT / DOCUMENT. IF "" IS NOT ENCOUNTED THEN DELETE TO END OF RESULT / DOCUMENT. MRGS2B, JMS MRGDLS / DELETE TO AND INCLUSIVE OF "+200) / WAS CHARACTER JUST DELETED A ">"? SZA CLA / SKIP IF: SO JMP .-4 / DELETE TIL END SLNMOD / SET LINE MODIFIED JMP I MRGDLF / THEN RETURN / MERGE NEXT RECORD - LOAD THE NEXT RECORD OF THE LIST DOCUMENT INTO / RECBUF. IF THERE ARE NO MORE RECORDS LEFT THEN DON'T SKIP RETURN. MRGNXT, XX / GET NEXT RECORD SLNMOD / SET LINE MODIFIED JMS FXSCRL / UPDATE SCREEN CDFMYF / CHANGE DATA FIELD MYFIELD CIFLP / CHANGE INSTRUCTION FIELD TO LP FIELD. JMS I (SELCT) / LOAD THE NEXT RECORD SNA CLA / SKIP IF: NO RECORDS LEFT ISZ MRGNXT / BUMP RETURN - WE'VE LOADED A RECORD JMP I MRGNXT / RETURN / ANALYZE THE SPECIAL FIELD NAMES (E, R, S) MRGS3A, ADVPTR / GET THE NAME JMP MRGETX / NO CHARACTERS LEFT DCA MRGPT1 / SAVE IT, WHILE TAD MRGPT2 / DELETE REST OF THE FIELD NAME DCA CURPTR JMS MRGDLF TAD MRGPT1 / GET THE NAME BACK AND P177 / STRIP THE MODE BITS XLTUPR / XLAT NAME TO UPPER CASE TAD (-"E+200) / IS THE FIELD NAME = "E"? SNA / SKIP IF: NOT JMP MRGSEA / PROCESS START OF TRAILER TAD ("E-"R) / IS THE FIELD NAME = "R"? SNA / SKIP IF: NOT JMP MRGSRA / PROCESS INSERT WHOLE RECORD TAD ("R-"S) / IS THE FIELD NAME = "S"? SNA CLA / SKIP IF: NOT DCA MRGRSF / SET RESYNC FLAG FOR: RESYNC JMP MRGFSA / NONE OF THE ABOVE - IGNORE THIS FIELD / PROCESS INSERT WHOLE RECORD - INSERT RECORD COMMAND MRGSRA, TAD (RECBUF) / INIT POINTER TO TOP OF RECORD DCA MRGPT1 MRGSRB, TAD I MRGPT1 / GET NEXT CHAR FROM RECORD SNA / SKIP IF: NOT END OF RECORD IN BUFFER JMP MRGFSA / QUIT IF NO MORE INSCHR / INSERT INTO TEXT ISZ MRGPT1 / BUMP TO NEXT CHAR JMP MRGSRB / AND LOOP FOR ALL / DELETE A PARTIAL FIELD (FIELD NAME WITH NO TERMINATING ">") MRGETX, TAD MRGPT2 / RESET POINTER TO START OF FIELD NAME DCA CURPTR JMS MRGDLF / DELETE THIS PARTIAL FIELD THEN JOIN / COMMON CODE FOR EOF PROCESSING BELOW / PROCESS START OF TRAILER MRGSEA, / LOOP BACK POINT MRGEOF, / OR EOF JMS MRGNXT / GET NEXT RECORD JMP MRGTRL / SKIP TO TRAILER IF NO MORE TAD FORMNO / REINIT FORM DOCUMENT FOR READ JMS DSKCAL XRDFIN TAD MRGRSF / IS A RESYNC NEEDED? SZA CLA / SKIP IF: SO (MRGRSF=0) JMP MRGFSA / JUMP IF NO RESYNC NEEDED MRGSEB, JMS MRGDLS / ELSE DELETE TO RESYNC POINT TAD (-"S+200) / IS THE CHAR. FOLLOWING "" JMS MRGDLF / DELETE REST OF RESYNC FIELD JMP MRGFSA / AND REENTER SCAN LOOP / DELETE UPTO AND INCLUSIVE OF THE " / END IFDEF PERDEC IFDEF COLDEC < RLXIT, TAD (5572) DCA OKSTR > / END IFDEF COLDEC IFDEF COMDEC < RLXIT, TAD (5554) DCA OKSTR > / END IFDEF COMDEC CDFMYF / PROPER FIELD /A192 TAD SPLTFL / SPLIT SCREEN? SMA CLA /M192 JMP RLXIT1 / NO, OR NO CHANGE /M192 TAD WIDPRV / WAS SCREEN WIDE BEFORE? SZA CLA JMP RLXIT2 / YES, DO NOTHING CDFMNU TAD NWRMAR / REMOVE SPLIT, IF NEC. CDFMYF TAD (-COLM80) / (I.E., IF R .LT. 80) SMA SZA CLA JMP RLXIT1 DCA SPLTFL /D192 JMS CLR132 / REVERT TO 80-COLUMN DISPLAY AND /D192 / DO FINAL EXIT STUFF. RLXIT2, JMS CLSSET / INITIALIZE SCROLL VALUES FOR STATUS / / END OF PROCESSING FOR GOLD:RULER COMMAND. / THE USER HAS JUST INSERTED A NEW RULER INTO THE DOCUMENT. / / FIX UP RULERS (I.E., CONCATENATE ADJACENT RULERS, AND DELETE RULERS / THAT MAKE NO NET CHANGE) BY MOVING THE CURSOR BACK THEN FORWARD / OVER RULER(S). / / BEFORE FIXING UP RULERS TURN MATH OFF SO THAT MATH IS NOT REDUNDANT / ON THE SAME LINE. WHEN FINISHED FIXING UP LINE THEN RESTORE MATH / TO ON/OFF STATE AT ENTRY TO RLXIT1. / NOTE: IT MIGHT SEEM THAT SUBR SWTHMA WOULD BE SUITABLE FOR USE HERE. / ALTHOUGH SWTHMA WILL PREVENT REDUNDANT CALCULATIONS FROM BEING / PERFORMED WHEN MOVING FORWARD, IT WILL PERMIT MATH TO BE TURNED OFF / UNDER CERTAIN CONDITIONS (WHEN MOVING BACKWARDS IN A WPSMATH CONTROL / BLOCK??), WHICH COULD MEAN THAT A SIDE EFFECT OF CHANGING A RULER / IS TO TURN OFF MATH. WE MUST AVOID THIS, SO WE CAN'T USE SWTHMA ... RLXIT1, JMS MNUGET / GET A VALUE FROM THE MENU FIELD MNOPTC / ACTIVE FEATURES CONTROL WORD DCA RXLIT2 / SAVE IT IN TEMPORARY LOCATION TAD RXLIT2 / RESTORE ACTIVE FEATURES CONTROL WORD AND (-MABIT-1) / BUT WITH THE MATH INACTIVATED JMS MNUPUT / PUT A VALUE INTO THE MENU FIELD MNOPTC / ACTIVE FEATURES CONTROL WORD AC7777 / SETUP FOR A BACKWARD MOVE CURMOV / MOVE CURSOR BACKWARD ONE POSITION SKP CLA / IF TOP OF DOCUMENT, THEN DON'T / CURMOV FORWARD RLXIT3, AC0001 / MOVE PTR FORWARD ONE CURMOV JMP RLXIT4 / EOF. MAYBE HALT CAUSE THIS IS AN ERROR/a176 TAD I CURPTR / IS THIS CHAR THE TEMP MARKER? /a176 TAD (-ECTMRK) /a176 SZA CLA /a176 JMP RLXIT3 / NO, KEEP LOOKING /a176 TAD (ECMDFL) / YES, REPLACE IT WITH A LINE MODIFIED /a176 DCA I CURPTR /a176 RLXIT4, TAD RXLIT2 / RESTORE ACTIVE FEATURES CONTROL WORD / TO IT'S VALUE AT ENTRY TO RXLIT1 JMS MNUPUT / PUT A VALUE INTO THE MENU FIELD MNOPTC / ACTIVE FEATURES CONTROL WORD / / TERMINATE NORMAL GOLD:RULER COMMAND / TAD RRDIR / IS THIS GOTO-RULER? SNA CLA JMP EIFIX / NO (END OF NORMAL GOLD:RULER CMD): /C168 / GO LISTEN FOR NEXT EDITOR COMMAND JMS FXSCRL / GET RID OF THE EDITED RULER & SCALE OVLJMP / YES: GO DO GOTO-RULER OVRRGO X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------------- PAGE /*************************************************************************** /**** START OF OVERLAY **** /*************************************************************************** OVRNUM=OVRNUM+200 OVRBLK=OVRNUM%200+DLOEDO-1 / DISK BLOCK WHERE OVERLAY IS LOADED RELOC RELOC OVLAY1 OVRNUM VIEWF1= OVRNUM / used to identify view mode overlay / HANDLE KEYBOARD INPUT FOR GOLD:VIEW COMMAND OVVWDX= .-OVLAY1+OVRNUM JMP XVVWDX / "GOLD:VIEW" COMMAND OVVIEW= .-OVLAY1+OVRNUM JMP VIEW / +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ / +++ Gold:Tab (Indent Tabs) +++ / +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ / / This Code is called from OVRULR for processing Gold:Tab. The / purpose of which is to place a @W' (word wrap) at the current / ruler position (and perhaps, generate a new ruler). / / This will make it very easy to do such things as outlines, / where you'd like to change the word wrap margin often. / / When called, a few things could happen depending on where the / cursor (CURSOR) is in the ruler. / / 1) Cursor is on the Left Margin / Clear the Ruler of the Word Wrap: / Modify or generate a ruler without a Word Wrap. / Change the old Word Wrap (if present) to a Tab. / If too many tabs exist, the old Word Wrap is changed / to a blank. / If no Word Wrap is present in the Current ruler, / then nothing happens. / / 2) Cursor is on the Right Margin / Error: / Beep the bell. Don't clear the UDK Stack. / / 3) Cursor is neither on Left or Right Margins / Add Word Wrap to the Ruler: / Modify or generate a ruler with a Word Wrap at the Cursor. / Change the old Word Wrap (if present) to a Tab. / If too many tabs exist, the old Word Wrap is changed / to a blank. / / Upon completion of this routine, OVXRUL is called which cleans / things up, and displays the newly modified or created ruler. / / OVINTB= .-OVLAY1+OVRNUM DCA RRDIR / CLEAR 'GOTO-RULER' FLAG TAD CURSOR / CHECK FOR CURSOR=RIGHT MARGIN CIA TAD RGTMAR SPA SNA CLA JMP INTB3 / RIGHT MARGIN - BEEP AND RETURN TO EDITOR INTB1, JMS WTOT / CHANGE WORD WRAP TO TAB(04) OR BLANK(01) CHGRUL, 04 / WTOT ARGUMENT TAD CURSOR / CHECK FOR CURSOR=LEFT MARGIN CIA TAD LFTMAR SNA CLA JMP INTB2 / LEFT MARGIN - ALL DONE AC0001 TAD CURSOR DCA RLPOSN / GET RULER POSTION OF CURSOR TAD WRPVAL / PUT WORD WRAP AT CURSOR IN RULER JMS UPDRUL INTB2, OVLJMP OVXRUL / RULER COMPLEATION CODE WRPVAL, 11 / INTERNAL-RULER WRAP CODE INTBAD= .-OVLAY1+OVRNUM / +++ OVERLAY CALL WHEN THE RULER HAS AN ERROR IN IT: / NAMELY TOO MANY TABS. / / IF THERE IS NO PREVIOUSLY DEFINED WORD WRAP .. WE RESTORE / THE RULER, BEEP, AND RETURN TO THE EDITOR / / IF THERE WAS A WORD WRAP DEFINED, WE MAKE IT A SPACE INSTEAD / OF A TAB (LIKE WE DO NORMALLY) / AC0001 / SET TO PUT A SPACE IN THE RULER DCA CHGRUL TAD LFTMAR CIA TAD WRPMAR SZA CLA / WAS THERE A WORD WRAP DEFINED? JMP INTB1 / YES, MAKE IT A SPACE JMS RLEQTE / NO, RESTORE NEW-RULER TO CURRENT-RULER INTB3, JMS BUZZER / BEEP (BUT DON'T CLEAR UDK STACK) JMP INTB2 / AND RETURN TO EDITOR / +++ SUBROUTINE: WTOT / / CHANGE THE WORD WRAP IN THE CURRENT RULER TO THE VALUE / SPECIFIED IN CALL+1. / / IF THERE IS NO WORD WRAP DEFINED (IE. LEFT MARGIN = WORD WRAP) / THEN NOTHING HAPPENS AND WTOT RETURNS / / CALL: JMS WTOT / XX VALUE TO CHANGE WRAP TO / (IN OUR CASE, ONLY: TAB(04) OR BLANK(01) WTOT, XX TAD LFTMAR / WORD WRAP DEFINED? CIA TAD WRPMAR SNA CLA JMP WTOT1 / NO - JUST RETURN AC0001 TAD WRPMAR DCA RLPOSN / GET PTR TO WORD WRAP IN RULER TAD I WTOT / GET RULER VALUE ARGUMENT JMS UPDRUL / CHANGE RULER WTOT1, ISZ WTOT / BUMP PTR JMP I WTOT / FOR RETURN ... / ROUTINE TO CHECK FOR KEYS USED IN GOLD VIEW /A219 VWTEST, XX / CHECK FOR GOLD VIEW KEYS /A219 TAD (-EDPRSC) / CODE FOR THE PREVIOUS SCREEN KEY /A219 SNA / DID USER PRESS PREVIOUS SCREEN KEY ? /A219 JMP VWPREV / YES, GO HANDLE IT /A219 IAC / BUMP COUNT TO NEXT VALUE /A219 SNA / DID USER PRESS NEXT SCREEN KEY ? /A219 JMP VWNEXT / YES, GO HANDLE IT /A219 TAD (EDPRSC-1-EDLINE) / CODE FOR THE LINE KEY /A219 JMP I VWTEST / RETURN TO INLINE CODE CHECK /A219 VWNEXT, TAD WIDNAR / GET THE SCREEN WIDTH FLAG /A219 SZA / DOES IT INDICATE WIDE SCREEN ? /A219 TAD (4) / NO, MAKE CORRECTION FOR NARROW SCREEN /A219 TAD (-COLLIM-2+WIDTH) / CONSTRUCT OFFSET TO NEXT SCREEN /A219 TAD LOWLIM / COMBINE WITH CURRENT SCREEN OFFSET /A219 DCA VWTEMP / SAVE NEW OFFSET VALUE /A219 TAD VWTEMP / GET NEW OFFSET VALUE BACK AGAIN /A219 TAD (WIDTH+COLM81) / COMBINE WITH OVERFLOW VALUE /A219 SPA CLA / DID WE OVERFLOW THE MAXIMUM VALUE ? /A219 JMP VWERR / YES, IGNORE IT AND GO RING THE BELL /A219 JMP VWVALU / NO, GO UPDATE NEW LOWLIM VALUE /A219 VWPREV, TAD WIDNAR / GET THE SCREEN WIDTH FLAG /A219 SZA / DOES IT INDICATE WIDE SCREEN ? /A219 TAD (4) / NO, MAKE CORRECTION FOR NARROW SCREEN /A219 TAD (-COLLIM-2+WIDTH) / CONSTRUCT OFFSET TO NEXT SCREEN /A219 CIA / NEGATE THE OFFSET VALUE /A219 TAD LOWLIM / COMBINE WITH CURRENT SCREEN OFFSET /A219 DCA VWTEMP / SAVE NEW OFFSET VALUE /A219 TAD VWTEMP / GET NEW OFFSET VALUE BACK AGAIN /A219 SMA SZA CLA / DID WE OVERFLOW THE MINIMUM VALUE ? /A219 JMP VWERR / YES, IGNORE IT AND GO RING THE BELL /A219 VWVALU, TAD VWTEMP / NO, GET NEW LOWLIM VALUE /A219 DCA LOWLIM / UPDATE LOMLIM WITH NEW OFFSET VALUE /A219 JMP VIEW / GO UPDATE THE SCREEN /A219 VWERR, JMS BUZZER / ERROR, CAN'T MOVE, RING THE BELL /A219 JMP VWADX2 / GO GET NEXT CHARACTER /A219 VWTEMP, XX / SAVE LOCATION FOR NEW LOWLIM VALUE /A219 X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------------- PAGE XVVWDX, DCA CURLIN / CLEAR FOR PCUR ROUTINE TO POSN CURSOR /A161 CIFMNU / CHANGE TO MENU FIELD FOR STATUS CHECK /A161 JMS I (CALLN2) / GO CHECK IF STATUS VALUES HAVE CHANGED/A161 VWADX1, AC7777 DCA CURLIN / SET CURLIN BACK TO CORRECT VALUE FOR VIEW JMS SETCUR / AND CURSOR TO BE ON SCREEN VWADX2, GETINP / WAIT FOR KEYBOARD INPUT /C219 DCA VIEWCX / SAVE IT ... TAD VIEWCX /D219 TAD (-EDLINE) JMS VWTEST / GO CHECK FOR THE GOLD VIEW KEYS /A219 SNA CLA JMP VWADLN DCA VIEWF2 / clear view mode flag, then exit JMS CLSSET / CLAER SCREEN UPDATE FLAGS /A219 /D219 AC2000 /D219 DCA SCRLCT /D219 AC2000 /D219 DCA SCRNFL DCA CURLIN TAD VIEWCX / THEN GET INPUT CHAR TAD (-EDVIEW) / TREAT VIEW AS NOP/RETURN SNA CLA JMP EINEXT TAD VIEWCX / ELSE RELOAD INPUT CHAR JMP EINEXB / AND JUMP TO PROCESS IT VWADLN, DCA SCRLCT DCA SCRNFL DCA ECHFLG AC7777 / set view mode flag in case CURMOV DCA VIEWF2 / calls editor math VWADL1, AC0001 CURMOV JMP VWADL2 TAD SCRLCT SNA CLA JMP VWADL1 VWADL2, CDFMYF /D219 TAD WIDNAR / WIDE SCREEN? /M192 /D219 SNA CLA /M192 /D219 JMP VWADL4 / JUMP IF WIDE NEEDED TAD SCRLCT / DID WE MOVE? SNA JMS BEEPER / COMPLAIN IF NOT (MUST BE AT END OF FILE) SPA CLA JMP VIEW / ...JUST IN CASE... /C219 JMS SCRNSZ / CHECK FOR STILL ON SCREEN CLL RAR CIA TAD SCRLCT SMA CLA JMP VIEW / JUMP IF NOT /C219 TAD SCRLCT SNA JMP VWADL3 / JUMP IF NO MOVEMENT CIA CLL RAL DCA VIEWCX / SET -COUNT OF LINES TO SCROLL UP JMS PCUR / ERASE BOTTOM LINES JMS CLREOL / Clear to end of line JMS NWLN / CR LF JMS CLREOL / Clear to end of line TAD VIEWCX / COMPUTE NEW CURLIN TAD CURLIN DCA CURLIN JMS NWLN ISZ VIEWCX JMP .-2 / SCROLL SCREEN UPWARDS VWADL3, TAD SCRLCT / GET NEW LOOP COUNTER CMA JMP VIEWA0 /D219 VWADL4, /D192 AC0001 /D192 DCA SPLTFL / FIX SPLIT SCREEN FLAG /D219 JMS SET132 / MAKE SCREEN WIDE /D219 / FALL THRU INTO OVVIEW ... / "GOLD:VIEW" COMMAND VIEW, DCA CURLIN / CLEAR FOR PCUR ROUTINE TO POSN CURSOR /A219 JMS CLSCRN / CLEAR SCREEN, GO TO HOME POS. JMS SCRNSZ / GET SCREEN SIZE CLL RAR CIA VIEWA0, CDFMYF DCA VWX2 / -COUNT OF LINES TO DO TAD VWX2 / GET PTR TO FIRST LINE TAD (PTRBLK+NPTRS) DCA VWX1 TAD CURSOR / SAVE CURSOR POSITION DCA CURTMP DCA CURSOR TAD I VWX1 / FIND FIRST REAL LINE SZA CLA JMP VIEWA3 / QUIT QUICK IF OK VIEWA1, ISZ VWX1 / ELSE LOOP TAD I VWX1 SZA CLA JMP VIEWA2 ISZ VWX2 JMP VIEWA1 / MOVE CURSOR TO START OF TOP LINE VIEWA2, TAD VWX2 / GET LINE LOOP COUNTER STL RAL / TIMES 2 + 1 DCA CURLIN / = LINE NUMBER FOR PCUR JMS PCUR / MOVE CURSOR / DISPLAY "...----- TOP -----..." TAD (STXMSG) JMS PGMSG / ----- TOP ----- ISZ VWX2 / BETTER NOT SKIP! VIEWA3, /D219 / TEMPORARILY COPY VWX1 & VWX2 INTO SUBR ENTRY POINTS /D219 / TO TRANSFER VALUES TO NEXT OVERLAY. /D219 TAD VWX1 /D219 DCA I ADVSPC&177 /D219 TAD VWX2 /D219 DCA I BKPSPC&177 JMS OV2JMP OVVWB1 VWX1, .-. / PTR INTO PTRBLK FOR FIRST LINE / (COPIED TO VIEWX1 IN NEXT OVERLAY) VWX2, .-. / -(# OF TEXT LINES TO DISPLAY) / (COPIED TO VIEWX2 IN NEXT OVERLAY) VIEWCX, .-. VIEWF2, .-. / view mode flag (if this overlay is in) / / Code from VIEWBA which won't fit there / / It checks to see what type of Dead sequence is next in the buffer / VIEWBZ, CIFMNU / Move to Menu field /A231 JMS I (TCCHK) / Go check this dead thing /A231 JMP VIEWBA / Vanilla dead , display as text /A231 JMP VIEWSP / req space dead , go print it /A231 CDFMNU / Point to Menu field /A231 TAD TCTMP1 / get char itself /A231 JMP VIEWBB / and get back /A231 X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------------- PAGE FIELD 4 RELOC *0 /*************************************************************************** /**** START OF OVERLAY **** /*************************************************************************** OVRNUM=OVRNUM+200 OVRBLK=OVRNUM%200+DLOEDO-1 / DISK BLOCK WHERE OVERLAY IS LOADED RELOC RELOC OVLAY1 OVRNUM / EDIT EXIT PROCESSING OVUDKS= .-OVLAY1+OVRNUM / FIRST ENTRY USED ONLY AT THE VERY END JMP XVUDKS / OF AN EDIT (IE, NOT AT GOLD TOP) OVXITF= .-OVLAY1+OVRNUM IAC / 1 IN AC INDICATES FIRST ENTRY OVEXIT= .-OVLAY1+OVRNUM / EXIT OVERLAY DCA LSTPAS / IF ZERO, THIS IS NOT LAST CALL OF THIS EDIT TSTSLT / IF EDITOR IS IN SELECT MODE SKP JMS UNSLCS / THEN DELETE SELECT MARK CDFMYF / IF SELECTED, RETURN TO THIS FIELD /******************** EDITOR MATH INIT CALL **************************** / THE FOLLOWING CALL IS MADE TO THE MATH FIELD TO INITIALIZE THE MATH / MODULE CODE AND SET "MTHTYP" TO 1 IN THE MATH FIELD WHEN A GOLD TOP HAS / BEEN DONE IN A CTRL BLOCK WITHIN A EDITOR MATH WORK AREA. OTHERWISE / MATH WOULD NOT GET REINITALIZED AND EDITOR MATH ENDS UP BROKEN. A 1 IS / PLACED IN THE AC BEFORE THE CALL TO TELL "RTRN4" THAT IT IS TO INIT FOR / EDITOR MATH NOT LIST PROCESSING MATH. NOTE THAT THIS SAME INIT CALL / TAKES PLACE IN "OVINI1" AND HERE IN "OVEXIT". AC0001 / SET THE AC = 1 CIFMTH / CHANGE PROGRAM CONTROL TO MATH FIELD JMS RTRN4 / GO SET "MTHTYP" = 1; AND INIT MATH MODULE /****************** END MATH INIT CALL ***************************** JMS RPCHK / IF GOTO PAGE, DON'T ALTER SCREEN IMAGE JMS SAVLMD / SAVE MOD FLAG IN TEXT / *** CLOSE FILE AND EXIT SKP CLA AC0001 CHKPTR SMA CLA JMP .-3 / GET TO ETX EDEXI1, AC7777 CHKPTR SNA JMP .-3 / COPY TO STX SPA CLA JMP EDEXI2 TAD I CURPTR JMS DSKCAL XPUTET JMP EDEXI1 EDEXI2, / NEXT, DETERMINE TIME THIS EDIT / AND NEW TOTAL EDIT TIME TAD LSTPAS SNA CLA / IF FINAL PASS, OK JMP TOLVED / ELSE DONT UPDATE TIMES, AND DON'T / INCREMENT THE VERSION NUMBER CDFSYS TAD I (CLOCK+3) DCA MIN / CURRENT MINUTES TAD I (CLOCK+4) / CURRENT HOUR CDFMYF JMS TOMIN DCA TMPMIN TAD OLDMIN DCA MIN / INITIAL MINUTES TAD OLDHR / INITIAL HOURS JMS TOMIN CIA TAD TMPMIN / CURRENT TIME - INITIAL TIME SPA TAD (30^74) / IF NEGATIVE, THE CLOCK ROLLED OVER.. / ADD 60 * 24 = MINUTES IN A DAY DCA TMPMIN TAD (15) CIFFIO FILEIO XHDRGT / GET OLD TOTAL TIME CLL / DONE TO CHECK FOR OVERFLOW IN NEXT ADD TAD TMPMIN / NEW TOTAL TIME SZL / SKIP IF TIME < 68:15 AC7777 / TIME WAS RESET, SET TO MAX MQL TAD (15) CIFFIO FILEIO XHDRPT / STORE NEW TOTAL TIME TAD TMPMIN MQL TAD (14) CIFFIO FILEIO XHDRPT / SAVE TIME THIS EDIT JMP LVED TOLVED, CDFMYF TAD (10) CIFFIO FILEIO / GET THE VERSION NUMBER (THE NUMBER XHDRGT / OF TIMES THE DOCUMENT HAS BEEN EDITED) TAD (-1) / DECREMENT THIS NUMBER BY ONE, SO THAT / GOLD TOP, GOLD BOTTOM AND GO-TO-PAGE MQL / DON'T ALTER IT TAD (10) CIFFIO FILEIO XHDRPT / REPLACE THE VERSION NUMBER LVED, JMS DSKCAL XDSKCL / AND CLOSE IT CDFMYF JMP OVJRTN / THEN RETURN TO MAIN LINE EXIT UNSLCS, XX / UNSELECT SUBROUTINE MODSET EDTMOD / SET ADVANCE MODE TAD (SLCTMD) DCA GRAMUN JMS SETUNT JMS GETUNT .-. SZA CLA JMP I .-2 JMP I UNSLCS TMPMIN, 0 / TEMP., ALWAYS CONTAINS MINUTES MIN, 0 / MINUTES FOR TOMIN HR, 0 / NEG OF HOURS IN TOMIN LSTPAS, 0 / FLAG - ZERO INDICATES ENTRY THRU OVEXIT, / OTHER WHEN ENTRY THRU OVXITF. X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------------- PAGE XVUDKS, JMS BFOVLY UDKOVL AC7777 / SET AC = -1 CIFMNU / CHANGE INSTRUCTION FIELD TO MENU FIELD PGSWAP / AC=-1 SO JUST LOAD IN THE SAVE AREA OVLJMP OVMENU / RETURN TO EDITOR MENU WHEN DONE UDKONM=15 / OVERLAY NUMBER FOR DK BUFONM=17 / DUMMY OVERLAY FOR BUFFLD LOCK WORD UDKOVL, -DSOUDK / -(LENGTH OF WPUDKS CODE) /M183 0 / LOCAL START LOC OF WPUDKS CODE DSOUDK-DSSEDT / -(LENGTH OF UDK BUFFER) /M183 UDKSTR / LOCNS OF BUFFLD TO WRITE OUT (READ BACK) UDKONM 200 / OVERLAY TO CALL & START ADDR IN BUFFLD BFOVLY, XX / LOAD OVERLAY INTO BUFFLD / AFTER SAVEING RELEVANT LOCATIONS / RESTORE THOSE LOCATIONS ON RETURN FROM OVERLAY TAD (RXEWT+2000) / LOAD OP CODE JMS BFSVRS / WRITE OUT BUFFLD LOCATIONS DCA BFOVT4 / SAVE OVERLAY NUMBER CIFMNU JMS I OLAYCL / LOAD OVERLAY BFOVT4, .-. ISZ BFOVT1 / BUMP ARG PTR TO ENTRY ADDR RIF TAD (CIF+10) DCA BFOVT2 / STORE CIF TO BUFFLD TAD I BFOVT1 DCA BFOVT4 / STORE ENTRY ADDR BFOVT2, .-. / ---CIF BUFFLD--- JMS I BFOVT4 / CALL OVERLAY TAD (RXERD) / RESTORE BUFFLD CONTENTS JMS BFSVRS CLA / OVERLAY NUM NOT NEEDED THIS TIME! CIFMNU JMS I OLAYCL BUFONM / CLEAR BUFFLD LOCK WORD ISZ BFOVLY / BUMP TO RETURN ADDR JMP I BFOVLY BFOVT1, .-. / TEMP BFSVRS, XX / BUFFLD SAVE-RESTORE SUBROUTINE DCA BFOVT5 / SAVE RXHAN OP-CODE (READ/ WRITE) TAD I BFOVLY / GET ARG PTR DCA BFOVT1 TAD (DLSEDT) DCA BFOVT4 / SET DISK LOCN BFOVL1, TAD I BFOVT1 / GET NEXT -COUNT SMA JMP I BFSVRS / RETURN IF NOT COUNT DCA BFOVT2 ISZ BFOVT1 TAD I BFOVT1 / GET ADDR DCA BFOVT3 ISZ BFOVT1 BFOVL2, TAD BFOVT4 / LOAD DISK BLOCK # CDFBUF JMS SYSIO BFOVT5, .-. / READ-WRITE OP-CODE BFOVT3, .-. / ADDR ISZ BFOVT4 / BUMP DISK BLOCK # TAD (400) TAD BFOVT3 DCA BFOVT3 / BUMP ADDR ISZ BFOVT2 JMP BFOVL2 / LOOP TIL COUNT COMPLETE JMP BFOVL1 / SUBROUTINE TO CONVERT HOURS AND MINUTES TO MINTUTES TOMIN, 0 SNA JMP MIN2 / IF ZERO AC (NO HOURS), JUMP CIA DCA HR / LOOP CONTROL LOOP, TAD (74) ISZ HR JMP LOOP MIN2, TAD MIN / ADD MINUTES-FROM-HOURS TO MINUTES JMP I TOMIN RPCHK, 0 / IF GOTO PAGE, LEAVE SCREEN ALONE TAD RPBIN1 / GOTO PAGE FLAG SPA CLA / SKIP IF NOT GOTO PAGE JMP RPXCHK / CONTINUE GOTO PAGE CLOSE JMS CLR132 / 80-COL. MODE CLA DCA SPLTFL / THIS MAKES FOR 24 LINES CIFMNU / CHANGE TO MENU INSTRUCTION FIELD AC0003 / SET UP FOR CLEAR SCREEN REQUEST JMS I (CALLN1) / GO TO STATUS LINE ROUTINE FOR CLEAR TAD (NPTRS) / PICK UP MAXIMUM NUMBER OF LINES DCA SCRNLN / SAVE FOR USE BY PROMPT ROUTINE JMS PROMPT /"...FILING BEING DONE" MSG MSGF / MSG POINTER RPXCHK, CIFMNU / CHANGE INSTRUCTION FIELD TO MENU FIELD PGSWAP / AC=0, SAVE SWAP AREA & RELOAD MENU CODE JMP I RPCHK / RESUME CLOSE PROCESS X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------------- PAGE /*************************************************************************** /**** START OF OVERLAY **** /*************************************************************************** OVRNUM=OVRNUM+200 OVRBLK=OVRNUM%200+DLOEDO-1 / DISK BLOCK WHERE OVERLAY IS LOADED RELOC RELOC OVLAY1 OVRNUM OVDEAD= .-OVLAY1+OVRNUM / THE USER TYPED "GOLD:DEAD" JMP XVDEAD OVRQSP= .-OVLAY1+OVRNUM / THE USER TYPED "GOLD:SPACE" JMP XVRQSP / (REQUIRED OR NONBREAKING SPACE) RPPER9= .-OVLAY1+OVRNUM JMP XPPER9 / MULTIPLE MATH 'START' BLOCKS FOUND RPPER5= .-OVLAY1+OVRNUM JMP XPPER5 / REPORT INVALID CHARACTER STRING RPPER3= .-OVLAY1+OVRNUM / JMP XPPER3 XPPER3, TAD (RANBAD) SKP XPPER5, TAD (CHABAD) / AC => ADDR. OF MSG. STRING SKP XPPER9, TAD (RPPME9) DCA RPMSG / SUPPLY FOR OUTPUT TO SCREEN JMS PUTMSG / DISPLAY AN ERROR MSG. ON THE / SAME LINE AS PAGE NUMBER MSG. RPMSG, .-. / ADDR. OF DESIRED ERROR MSG. JMS PUTMSG RPPRETRY JMS GETLIN RPBUF /C206 OVLJMP; OVRPP4 / STARTUP REPOSITIONING AGAIN... RPBUF, -1 /C206 ZBLOCK 1 /*********************************************************************** /**** PREVIOUS AND NEXT SCREEN ROUTINES **** /*********************************************************************** OVPRSC= .-OVLAY1+OVRNUM / ENTER FOR PREVIOUS SCREEN IAC OVNXSC= .-OVLAY1+OVRNUM / ENTER FOR NEXT SCREEN DCA ARTMP / AC = MOVE MODE (0=ADV, 1=BKP) MODSET ARCMOD / SET MOVE MODE AC0001 DCA GRAMUN / SET UNIT TO LINE TAD ARTMP / NOW GET MOVE MODE BACK AGAIN SNA CLA / DISPATCH TO PROPER ROUTINE JMP NXSCR1 / (NEXT SCREEN) JMS SCRNSZ / PREVIOUS SCREEN ROUTINE DCA CNSCRL / STORE SCROLL COUNT JMS BACKUN / TRY 1ST BACKUP JMP EIBAD / (CAN'T, GO BUZZ) PRVSC1, CLA CDFMYF TAD CNSCRL / DONE? SNA CLA JMP EINEXT / YES JMS BACKUN / NO, TRY BACKING UP AGAIN JMP EINEXT / (FAIL NOW IS OKAY) JMP PRVSC1 / LOOP TO TEST IF DONE NXSCR1, JMS SCRNSZ / NEXT SCREEN ROUTINE CIA / NEGATE THE SCROLL COUNT IAC / SET TO DO ONE LESS DCA CNSCRL JMS SETUNT / SET UNIT CODE JMS LODCHR / START US OFF JMP EIBAD / (CAN'T, GO BUZZ) NXSCR2, JMS GETUNT / CK FOR END OF LINE NXSCR3, .-. SZA CLA / DONE WITH LINE? JMP I NXSCR3 / NO, CONTINUE LOOKING CDFMYF TAD CNSCRL / DONE? SNA CLA JMP EINEXT / YES DCA SCRLFL / NO, ENSURE SCROLL FLAG 0 JMS LODCHR / AND GO ANOTHER LINE JMP EINEXT / (FAIL NOW IS OKAY) JMP NXSCR2 / LOOP TO GET END OF LINE ARCMOD, SCHMOD!SLTMOD ARTMP, .-. / / We got here because we entered into a tech dead thing and now we/A226 / want to get out /A226 / DEDKYX, CLA / /A226 TAD I CURPTR / get current char /A226 DEDBNX, TAD (-ECSTOV) / Are we at the start yet ? /A226 SNA CLA / /A226 JMP EIBAD / Yes ,Must have been a req space /A226 / so beep and get out /A226 BKPPTR / Not there yet so keep backing up /A226 NOP / /A226 JMP DEDBNX / Try previous one /A226 / / The compound Tech-Mcs dead has been split now back up to 2nd /A226 / 1st non-tech char in string /A226 / DEDBKP, BKPPTR / Backup /A226 NOP / Shouldn't happen /A226 SLNMOD / Set line modified /A226 AC0001 / /A226 JMP EIFIX1 / Go listen for more /A226 X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------------- PAGE / HANDLE "GOLD:DEAD" COMMAND (DEAD KEY = EDDEAD) XVDEAD, JMS LODCHR JMP EIBAD JMS CHKALP JMP DEDKYA / JUMP IF NOT ALPHA BKPPTR JMP EIBAD JMS CHKALP JMP DEDKYB / JUMP IF PREV NOT ALPHA AC7777 / SET CURSOR TO START OF DEAD- TAD CURSOR / KEY SEQUENCE. FROM HERE GETS DCA CURSOR / REFRESHED. SLNMOD / SAVE LINE POSN FOR REFRESH. TAD (ECSTOV) JMS INSRL1 / BOTH ALPHA, START OVERSTRIKE DEDKYE, ADVPTR JMP EIBAD / ADVANCE OVER BOTH ADVPTR NOP CLA TAD (ECNDOV) JMS INSRL1 / END OVERSTRIKE SLNMOD JMP EIFIX / JUMP TO LISTEN FOR MORE DEDKYA, TAD (-ECSTOV) / IS CURRENT OVERSTRIKE? SZA CLA JMP EIBAD / JUMP IF NOT ADVPTR / AND NOT A "REQUIRED SPACE"? JMP DEDKYC / (BUG) AND P177 / IGNORE ATTRIBUTES TAD (-ECSPC) SZA CLA /M172 JMP DEDKA1 /A172 /d226 BKPPTR / Restore pointer to beginning /A172 /d226 NOP / of dead key seq /A172 /d226 JMP EIBAD / NO-I MEAN YES IT'S A REQUIRED SPACE / SO USER CAN'T BREAK APART OVERSTRIKE / SEQUENCE BECAUSE, CONCEPTUALLY, IT'S JMP DEDKYH / Check if he wants to Undead a tech /A226 / NOT AN OVERSTRIKE DEDKA1, ADVPTR JMP DEDKYC / ADVANCE TO END TAD (-ECNDOV) SZA CLA JMP .-4 DCA I CURPTR / DELETE END MARKER DEDKYC, BKPPTR JMP EIBAD / BACK UP TO START TAD (-ECSTOV) SZA CLA JMP .-4 DCA I CURPTR / DELETE START SLNMOD AC0001 JMP EIFIX1 / ADVANCE CURSOR AND LISTEN / / PREVIOUS CHAR (NOW CURRENT CHAR) IS NOT PRINTABLE. / IF IT'S AN OVERSTRIKE SEQUENCE, THEN APPEND TO IT. / IF IT'S A REQUIRED SPACE OR ANYTHING ELSE, THEN USER ERROR (BEEP). / DEDKYB, TAD (-ECNDOV) / IS PREVIOUS CHAR AN OVERSTRIKE? SZA CLA JMP DEDKYG / NO: USER ERROR BKPPTR / YES: IS PREVIOUS CHAR A REQUIRED SPACE? JMP DEDKYG / (BUG - FIX CURSOR POS) AND P177 / (IGNORE ATTRIBUTES) TAD (-ECSPC) SZA CLA JMP DEDKYD / NO: APPEND TO OVERSTRIKE SEQUENCE ADVPTR / YES: USER ERROR - RESTORE CURPTR ... JMP EIBAD / (BUG) DEDKYG, ADVPTR / ... TO POSITION AT ENTRY TO XVDEAD ... JMP EIBAD / (BUG) JMP EIBAD / ... AND COMPLAIN / / AT ENTRY TO XVDEAD, THE CURSOR WAS ON A PRINTING CHARACTER, / AND A NON-REQUIRED-SPACE OVERSTRIKE SEQUENCE PRECEEDED THE CURSOR. / THUS, WE NEED TO APPEND THE PRINTING CHARACTER TO THE OVERSTRIKE / SEQUENCE. / (CURPTR IS NOW ON CHAR BEFORE ECNDOV) / DEDKYD, ADVPTR / ADVANCE CURPTR TO ECNDOV JMP EIBAD / (BUG) CLA / DELETE ECNDOV DCA I CURPTR / IN EDIT BUFFER AC0010 / Incase it is a technical re-display hash/A172 PUTOUT /A172 JMS PUTSPC /A172 EXGOVS /A172 JMP DEDKYE / GO INSERT ECNDOV AFTER PRINTING CHAR / / HANDLE "GOLD SPACE" (REQUIRED SPACE = EDRQSP) / / A "REQUIRED SPACE" IS A SPACE THAT WILL NOT BE USED AS A LINE BREAK / BY THE JUSTIFICATION ROUTINES (A NONBREAKING SPACE). / / "REQUIRED SPACE" IS IMPLEMENTED AS AN OVERSTRIKE SEQUENCE CONTAINING / TWO SPACES. THIS APPEARS IN THE EDIT BUFFER AS: / ECSTOV ECSPC ECSPC ECNDOV / (THE ECSPC CHARS MAY HAVE ATTRIBUTES SET.) / SUCH A SEQUENCE IS IMPOSSIBLE TO ENTER MANUALLY BECAUSE OVERSTRIKE / SEQUENCES MAY ONLY CONTAIN PRINTING CHARACTERS. / CONCEPTUALLY, SUCH SEQUENCES ARE HEREBY REDEFINED AS A "REQUIRED SPACE", / AND THUS MAY NOT BE MANIPULATED OR DISPLAYED AS OVERSTRIKE SEQUENCES. / / THIS ROUTINE INSERTS A "REQUIRED SPACE" INTO THE EDIT BUFFER. / XVRQSP, SLNMOD / TELL FXSCRL WE'RE MODIFYING EDIT BUFFER TAD (ECSTOV) / INSERT ECSTOV INTO EDIT BUFFER JMS INSRL1 TAD (ECSPC) / INSERT ECSPC JMS INSRL1 TAD (ECSPC) / INSERT ECSPC JMS INSRL1 TAD (ECNDOV) / INSERT ECNDOV JMS INSRL1 JMP EIFIX / DONE / / Test if user is trying to UNDEAD a tech-MCs-Linedrawing compose /A226 / seq which he has previously extended with extra chars /A226 / DEDKYH, ADVPTR / Look at char after space /A226 JMP EIBAD / Bug .. /A226 AND P177 / Strip off attributes /A226 TAD (-60) / Is it greater than 60 /A226 SPA SNA / ? /A226 JMP DEDKYX / No , back pointer up and get out /A226 TAD (60-64) / Is it less than or equal to 63 /A226 SMA SZA / /A226 JMP DEDKYX / No , Backup and get out /A226 CLA / /A226 ADVPTR / Move on to "real" char /A226 JMP EIBAD / Bug.. shouldn't happen /A226 ADVPTR / Now we should be on the End Dead /A226 JMP EIBAD / Bug.. shouldn't happen /A226 TAD (-ECNDOV) / Is it really the end of dead ? /A226 SNA CLA / /A226 JMP DEDKYX / Yes , backup and get out /A226 TAD (ECNDOV) / Put End of Dead here /A226 JMS INSRL1 / Now insert it /A226 DEDSNX, TAD (-ECNDOV) / Is it end of dead ? /A226 SNA CLA / /A226 JMP DEDKRB / Yes , go rubout End of dead /A226 ADVPTR / Try the next one /A226 JMP EIBAD / Bug.. shouldn't happen /A226 JMP DEDSNX / Try next /A226 DEDKRB, DCA I CURPTR / Rubout the end of dead /A226 JMP DEDBKP / Go back to 2nd char in dead seq /A226 X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------------- PAGE /*************************************************************************** /**** START OF OVERLAY **** /*************************************************************************** OVRNUM=OVRNUM+200 / NEW OVERLAY NUMBER OVRBLK=OVRNUM%200+DLOEDO-1 / DISK BLOCK WHERE OVERLAY IS LOADED RELOC RELOC OVLAY1 OVRNUM / MERGE TRAILER FOR LIST PROCESSING. / / THE CHARACTER "<" IN A FORM DOCUMENT TRAILER IS TREATED IN A SPECIAL WAY / DEPENDING ON WHAT FOLLOWS IT: / / - SUBSTITIUTE THE TEXT OF THE NAMED FIELD IN THE / CURRENT RECORD AT THIS POINT IN THE OUTPUT. IF A / MATCH FOR THIS FIELD IS NOT FOUND WITHIN THE CURRENT / MATH RESULT BUFFER THEN THIS FIELD IS OUTPUT JUST AS / IT APPEARS IN THE FORM DOCUMENT. / / - OUTPUT THIS FIELD AS IS. DO NOT TREAT THIS FIELD AS / THE START OF A REPETITIVE ZONE. / / - OUTPUT THIS FIELD AS IS. DO NOT TREAT THIS FIELD AS / THE END OF A REPETITIVE ZONE. / / - OUTPUT THIS FIELD AS IS. DO NOT TREAT THIS FIELD AS / A COMMAND TO COPY THE TEXT OF THE CURRENT RECORD FROM / THE LIST DOCUMENT TO THE OUTPUT. / / <> - OUTPUT THIS FIELD AS IS. DO NOT TREAT THIS FIELD AS / A COMMAND TO ADVANCE TO THE NEXT RECORD IN THE LIST / DOCUMENT. / / << - OUTPUT A SINGLE "<" AT THIS POINT. / / NO OTHER CHARACTERS IN THE FORM DOCUMENT ARE TREATED SPECIALLY. OVMRG5= .-OVLAY1+OVRNUM / FIFTH MERGE OVERLAY TMRGSA, CURMOV NOP TMRGSB, JMS LODCHR / LOOKING FOR START OF FIELD JMP TMRGDON / WE HIT END OF THE FORM DOCUMENT AND P177 / STRIP MODE BITS FROM CHARACTER TAD (-"<+200) / IS CHARACTER = "<"? SNA CLA / SKIP IF: NOT JMP TMRGS7 / START OF FIELD NAME - PROCESS IT TMRGSC, JMS TMRGADV / ADVANCE CURSOR BY ONE CHARACTER JMP TMRGSB / CONTINUE LOOKING FOR START OF FIELD TMRGS7, TAD CURPTR / GET POINTER TO LEFT ANGLE BRACKET DCA MRGPT2 / SAVE POINTER TO LEFT ANGLE BRACKET SLNMOD / SET LINE MODIFIED FLAG JMS JCLEAN / WE'RE GOING TO CHANGE SOMETHING ADVPTR / GET NEXT CHARACTER JMP TMRGDON / WE HIT END OF TEXT AND P177 / STRIP MODE BITS TAD (-"<+200) / IS CHARACTER ANOTHER "<"? SNA / SKIP IF: NOT JMP TMLLAB / GO PROCESS A "<<" SEQUENCE TAD ("<-">) / IS CHARACTER = ">"? SNA / SKIP IF: NOT JMP TMRGSA / NULL FIELD NAME - IGNORE TAD (">-"!) / IS CHARACTER = "!"? SNA CLA / SKIP IF: NOT JMP TMRGSA / SPECIAL NAME - IGNORE / MATCH TRAILER FIELD NAME IN FORM DOCUMENT TO FIELD NAME FROM MATH / RESULT BUFFER. CDFMYF / CHANGE DF TO MY FIELD JMS TMFNIF / MATCH FIELD NAME IN FORM DOCUMENT TO RESBUF / FIELD NAME IN MATH RESULT BUFFER CDFLP / RESBUF IS IN LIST PROCESS. FIELD JMP TMRGSC / NO MATCH FOUND JMP TMRGSA / MATCH - SCAN DOCUMENT FOR NEXT FN / MATCH FIELD NAME IN FORM DOCUMENT TO A FIELD NAME FROM RECORD. TMFNIF, XX / MATCH FIELD NAME IN FORM DOCUMENT TAD I TMFNIF / GET ADDRESS OF BUFFER TO MATCH DCA MRGPT1 / SAVE IT ISZ TMFNIF / BUMP RETURN TAD I TMFNIF / GET FIELD OF THAT BUFFER DCA TTADI1 / SAVE IT ISZ TMFNIF / BUMP RETURN TMRGS1, TAD MRGPT2 / POINT TO TEXT BRACKET IN FORM DCA CURPTR / RESET POINTER TMRGS2, JMS TTADIMRGPT1 / GET NEXT CHAR FROM RECORD ISZ MRGPT1 / BUMP RECORD PTR SNA / SKIP IF: NOT END OF RECORD JMP TMRGS8 / FIELD NOT FOUND, END OF RECORD TAD (-"<+200) / IS CHARACTER = "<"? SZA CLA / SKIP IF: SO JMP TMRGS2 / LOOP TIL FIELD START TMRGS3, ADVPTR / GET NEXT FIELD VALUE CHAR. FROM TEXT JMP TMRGDON / WE HIT THE END OF TEXT AND P177 / STRIP MODE BITS XLTUPR / XLAT CHAR TO UPPER CASE CIA / SET UP FOR COMPARE WITH RECORD'S DCA T1 / FIELD NAME VALUE JMS TTADIMRGPT1 / GET NEXT CHAR FROM RECORD XLTUPR / XLAT TO UPPER CASE TAD T1 / COMPARE WITH CHARACTER FROM TEXT SZA CLA / SKIP IF: CHARACTERS MATCH JMP TMRGS1 / LOOP IF NOT EQUAL JMS TTADIMRGPT1 / GET NEXT RECORD CHARACTER ISZ MRGPT1 / BUMP POINTER INTO RECORD TAD (-">+200) / IS CHARACTER = ">"? SZA CLA / SKIP IF:SO JMP TMRGS3 / CHECK FOR END OF NAME TAD MRGPT2 / RESET TEXT BUFFER POINTER TO START OF DCA CURPTR / FIELD NAME WE JUST MATCHED. JMS TMRGDLF / DELETE THAT FIELD NAME FROM TEXT TMRGS4, DCA MRGPT2 / SET LOOKAHEAD JMS TTADIMRGPT1 / CHECK FOR END OF FIELD IN RECORD TAD (-"<+200) / IS CHARACTER = "<"? SNA CLA / SKIP IF: NOT JMP TMRGS5 / JUMP IF END OF FIELD VALUE TAD MRGPT2 / GET LOOK AHEAD CHARACTER SZA / SKIP IF: 0 INSCHR / OUTPUT LOOKAHEAD JMS TTADIMRGPT1 / LOAD NEW LOOKAHEAD CLA SWP / ATTRIBUTED CHAR COMES BACK IN THE MQ / SO RESTORE IT TO THE AC ISZ MRGPT1 / BUMP POINTER INTO FIELD VALUE JMP TMRGS4 / LOOP TO OUTPUT NEXT FIELD VALUE CHAR. / INTO RESULT DOCUMENT TMRGS5, TAD MRGPT2 / OUTPUT LAST CHAR AT END OF FIELD TAD (-40) / WAS THIS A SPECIAL CHAR.? SPA SNA CLA / SKIP IF: NOT JMP TMRGS6 / SPECIAL CHARACTER. DO NOT INSERT TAD MRGPT2 / REGULAR CHARACTER. INSERT INTO TEXT INSCHR TMRGS6, ISZ TMFNIF / BUMP RETURN FOR MATCH TMRGS8, JMP I TMFNIF / RETURN / THIS ROUTINE WILL READ A CHARACTER FROM THE BUFFER SPECIFIED WHEN / MFNIFD WAS CALLED. TADIM1 IS PRIMED UPON CALL TO MFNIFD. UPON / READING A CHARACTER THE DF IS ALWAYS RETURNED TO THE EDITOR BUFFER / FIELD SINCE OTHER ROUTINES CALLED DURING OVMRG2 DEPEND ON DF SET / TO THE EDITOR BUFFER FIELD. / THE MQ IS USED TO SAVE THE CHARACTER WITH IT'S ATTRIBUTES SO THAT / ANY ATTRIBUTES IT HAS WILL BE CARRIED OVER FROM THE LIST DOCUMENT / TO THE RESULT DOCUMENT TTADIMRGPT1, XX TTADI1,.-. / LOADED WITH CDF INSTRUCTION TAD I MRGPT1 / READ CHARACTER FROM RECORD MQL / SAVE THE ATTRIBUTED CHAR IN THE MQ MQA / RESTORE CHAR TO THE AC AND P177 / STRIP MODE BITS CDFBUF / SET DF TO EDITOR BUFFER FIELD JMP I TTADIMRGPT1 / RETURN / ADVANCE CURSOR ONE CHARACTER AT A TIME THROUGH RESULT DOCUMENT, / CHECKING FOR ENOUGH ROOM ON DISKETTE TO CONTINUE THROUGH THE DOC. TMRGADV,XX AC0001 / ADVANCE CURSOR 1 CHARACTER CURMOV JMP TMRGDON / EOF RETURN FROM CURMOV JMS CHKSPC / CHECK DISKETTE SPACE JMP I TMRGADV / RETURN / MULTIPLE LEFT ANGLE BRACKET SEQUENCE HANDLER ("<<...ETC.") - DELETE A / LEFT ANGLE BRACKET FROM THIS FIELD NAME . WHEN THE FIRST CHARACTER / THAT IS NOT A "<" IS READ REENTER SCAN LOOP. TMLLAB, / TRAILER_MULTIPLE_LEFT_ANGLE_BRACKET_PROCESSOR DCA I CURPTR / DELETE A LEFT ANGLE BRACKET TAD MRGPT2 / RESTORE POINTER TO START OF FIELD DCA CURPTR SLNMOD / SET LINE MODIFIED FLAG TMLLA1, JMS TMRGADV / ADVANCE CURSOR ONE CHARACTER JMS LODCHR / GET THE NEXT CHARACTER JMP TMRGDON / EOF RETURN AND P177 / STRIP MODE BITS TAD (-"<+200) / IS CHARACTER = "<"? SNA CLA / SKIP IF: NOT JMP TMLLA1 / CHARACTER = "<". GET NEXT ONE JMP TMRGSB / REENTER SCAN LOOP X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------------- PAGE / DELETE A CHARACTER IN THE RESULT DOCUMENT TMRGDEL,XX / DELETE CHAR SUBROUTINE JMS LODCHR / READ A CHARACTER JMP I TMRGDEL / NONE LEFT - EXIT ISZ TMRGDEL / BUMP TO OK RETURN AND P177 / STRIP MODE BITS MQL / HOLD CHARACTER IN MQ DCA I CURPTR / DELETE CHARACTER FROM TEXT MQA / RESTORE CHAR TO AC JMP I TMRGDEL / AND RETURN / DELETE A FIELD TMRGDLF,XX / DELETE FIELD SUBROUTINE JMS TMRGDEL / DELETE ONE CHARACTER OF THE FIELD JMP I TMRGDLF / QUIT IF NO MORE TAD (-">+200) / WAS CHARACTER JUST DELETED A ">"? SZA CLA / SKIP IF: SO JMP .-4 / DELETE TIL END SLNMOD / SET LINE MODIFIED JMP I TMRGDLF / THEN RETURN TMRGDON,OVLJMP / DO EXIT OVERLAY OVMRG3 X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------------- PAGE /*************************************************************************** /**** START OF OVERLAY **** /*************************************************************************** OVRNUM=OVRNUM+200 OVRBLK=OVRNUM%200+DLOEDO-1 / DISK BLOCK WHERE OVERLAY IS LOADED RELOC RELOC OVLAY1 OVRNUM OVRPP4= .-OVLAY1+OVRNUM JMP RPERR / SECONDARY ENTRY POINT AFTER / REPORTING INPUT STRING ERROR /**************************************************************** / START OF THE NEW V2 FAST FORWARD AND REVERSE (GOTO PAGE) /**************************************************************** OVRPPG= .-OVLAY1+OVRNUM / BEGINNING OF V2.0 GO-TO-PAGE RPCMMA= ",-200 / ASCII COMMA RPPLUS= "+-200 / ASCII PLUS SIGN RPMINU= "--200 / ASCII MINUS SIGN RPPRCT= "%-200 / ASCII PERCENT SIGN /D206 TMP= EIGES4+1 / BUFFER CONTIANING ASCZI CHARS. / ----------------------------------------------------------------------------- / SHARING MAIN MEMORY LOCATIONS TO CONSERVE SPACE HERE PLUS / PERMITTING ACCESS TO THESE VALUES FROM ANY V2.0 GO-TO-PAGE / OVERLAY... RPWORD= SRCDIR / FLAG WORD FOR POSITIONING INFO. / (STORED IN MAIN EDITOR MEMORY PAGE 0) ABSOL= 4000 / BIT0 ON = ABSOLUTE PAGE/BLK # / OFF = OFFSET PAGE/BLK # REVERS= 2000 / BIT1 ON = REVERSE (-) DIRECTION / OFF = FORWARD (+) DIRECTION PGMODE= 1000 / BIT2 ON = POSITION TO A PAGE / OFF = POSITION TO A BLOCK / ----------------------------------------------------------------------------- / RPINIT - Rapid Positioning INITialization / Here whenever the response to the "ENTER PHRASE:" / message was terminated via the PAGE key. / Begin the V2.0 repositioning procedure to a user / defined page or block. / RPINIT PSEUDO CODE: /begin / if the reply to the "ENTER PHRASE:" message was the / PAGE key preceeded by data, error exit back / to request the search string again / else, continue by displaying the "ENTER PAGE NUMBER:" / message and inputting the user response / / if the reply to the "ENTER PAGE NUMBER:" message was / solely the RETURN key, abort process by returning / to the Editor keyboard loop routine / else, / if the 1st char. supplied in response to the / "ENTER PAGE NUMBER:" message was the - / sign, set BIT1 on in RPWORD / else / leave BIT1 reset / set Range Factor (T1) to -1 to account for / special character in input buffer and / set buffer offset (T2) to 1 to skip first / input buffer char. / else, clear Range Factor (T1) and / start buffer offset (T2) / set BIT0 in RPWORD / / / / WITH THE PAGE KEY IN RESPONSE / TO THE "ENTER PHRASE:" MSG. TAD GETLEN / # OF CHARS (from French bug fix 112 SZA CLA / SKIP IF VALID USER RESPONSE JMP EIFIND / EXIT:USER SUPPLIED CHARS. WITH / THE PAGE KEY. ASK FOR PHRASE AGAIN. / REPEAT THE SEARCH PROCESS; NOTE / THAT THE AC MUST BE ZERO RPERR, JMS PROMPT / CLEAR SCROLL LINE THEN ASK FOR PAGE NUMBER EIRPG1 / POINTER TO "ENTER PAGE NUMBER:" JMS GETLIN / GET PAGE INFO. FROM USER EIRPG2 / POINTER TO NEG. INPUT RANGE VALUE; / OUR INPUT BUFFER ALSO STARTS IN THAT / WORD IMMEDIATELY FOLLOWING EIRPG2 / NOW SEE IF THE USER HAS DECIDED AGAINST CONTINUING THIS / POSITIONING REQUEST BY LOOKING FOR THE 'RETURN' KEY AS THE / ONLY RESPONSE TO THE "ENTER PAGE NUMBER:" MSG... TAD GETLEN / # OF CHARS. IN THE INPUT BUFFER SNA CLA / SKIP IF OTHER THAN 'RETURN' JMP EINEXT / ABORT POSITIONING REQ. / USER INPUT IS IN BUFFER AT EIRPG2+1. STRIP ALLOWABLE SPECIAL / CHARS. (+,-,%) BEFORE CONVERTING ASCII NUMERICS INTO THEIR / CUMULATIVE BINARY VALUE... DCA RPWORD / CLEAR POSITIONING FLAGS' WORD DCA T1 / INIT. 'RANGE' FACTOR DCA T2 / AND INPUT BUFFER CHAR. OFFSET TAD I (EIRPG2+1) / GET THE 1ST INPUT CHAR. TAD (-RPPLUS) / COMPARE TO + SIGN SNA / SKIP IF NOT + JMP SETSPC / LEAVE BIT 1 OFF TAD (RPPLUS-RPMINU) / COMPARE TO - SIGN SNA CLA / SKIP IF NOT + OR - JMP SETNEG / GO SET REVERSE DIRECTION FLAG TAD (ABSOL) / BIT0 ON (ABSOLUTE #, NOT OFFSET) DCA RPWORD / SET BIT0 ON IN POSITION WORD JMP PAGBLK / NOW SEE IF PAGE OR BLOCK POSITIONING SETNEG, TAD (REVERS) / BIT1 ON = REVERSE DIRECTION DCA RPWORD / OFF = FORWARD DIRECTION SETSPC, AC7777 / TAKE 1 AWAY FROM RANGE VALUE LATER DCA T1 / TO ACCOUNT FOR THE SPECIAL DIRECTION SIGN ISZ T2 / T2 => OFFSET OF 1 BEYOND 1ST CHAR. / THE ONLY OTHER ALLOWABLE SPECIAL CHAR. IS THE % SIGN (AS THE / LAST INPUT CHAR. ONLY). IF PRESENT, POSITION TO A BLOCK, ELSE / POSITION TO A PAGE PAGBLK, TAD GETLEN / # OF ACTUAL CHARS. IN BUFFER TAD (EIRPG2) / PLUS THE ADDR. OF INPUT BUFFER-1 DCA T3 / T3 => PTR. TO LAST CHAR. IN EIRPG2 TAD I T3 / GET THE LAST CHAR. FROM THE INPUT BUFFER TAD (-60) / COMPARE TO ASCII 0 SPA / SKIP IF = OR > 0 JMP RPERCH / EXIT: INVALID CHAR. TAD (-11) / COMPARE REMAINDER TO 9 SMA SZA CLA / SKIP IF CHAR. 0-9 JMP RPERCH / EXIT:INVALID CHAR. TAD (PGMODE) / BIT2 ON FOR PAGE MODE TAD RPWORD / INCLUDE IN POSITION FLAGS' WORD DCA RPWORD / UPDATE MEMORY TAD T2 / AC=> OFFSET BEYOND +/- IF PRESENT TAD (EIRPG2) / + ADDR. OF 1ST INPUT CHAR.-1 DCA X0 / INIT. AUTO-INDEX REG. TO POINT AT / FIRST NUMERIC CHAR. TAD T1 / -1 FOR +/- AND -1 FOR % TAD GETLEN / GET # OF INPUT CHARS. TAD (-3) / SEE IF MORE THAN 3 NORMAL CHARS. SMA SZA / SKIP WITH 1-3 CHARS. ONLY JMP DOTHOU / > 3 = THOUSANDS AND HUNDREDS TAD (3) / GET ORIG. RANGE VALUE CIA / MAKE INTO NEG. CHAR. CTR. DCA T3 / T3 => # OF HUNDREDS CHARS TO MOVE JMP DOHUNS / CLEAR THOUS. COUNT AND DO HUNDR. DOTHOU, CLA / AC => 0 TAD I X0 / GET THE THOUS. DIGIT DCA EIRPG3 / SUPPLY IT FOR CONVERSION /A206 DCA EIRPG3+1 / ASCIZ TERMINATOR... /A206 /D206 DCA TMP / SUPPLY IT FOR CONVERSION /D206 DCA TMP+1 / ASCIZ TERMINATOR... / If current string char. is a comma bump string pointer (X0) / beyond it to point at hundreds and account for the / presence of a special char. in string range (-1) / else string pointer (X0) is at hundreds and don't have to / account for the presence of a special char. / if total # of input chars. (GETLEN) less the presence of any / special chars. (T1&AC) is greater than 4 / then exit to report 'RANGE' error / else convert ASCII chars. (EIRPG2) to binary TAD X0 / POINTS AT CURRENT CHAR. DCA T2 / MAKE A COPY, LEAVING X0 ALONE ISZ T2 / PERFORM AUTO-INDEX TO... TAD I T2 / GET THE CHAR. AFTER THE THOU. TAD (-RPCMMA) / IS IT A COMMA? SZA CLA / SKIP TO ACCOUNT FOR COMMA JMP CKRANG / PROCESS AS IS... ISZ X0 / BUMP PTR. TO HUNDREDS CHAR. AC7777 / AC => -1 TO ACCOUNT FOR COMMA / VALIDATE THE # OF DIGITS IN STRING CKRANG, TAD GETLEN / GETLIN SUPPLIED # OF INPUT CHARS. TAD T1 / MINUS 1 FOR +/- AND -1 FOR % TAD (-4) / - MAX. # OF NUMERICS ALLOWED (9999) SMA SZA CLA / SKIP WITH VALID RANGE JMP RPERRG / ERROR:INVALID # OF NUMERICS SUPPLIED / BY THE USER AC7775 / AC => -3 DCA T3 / T3 => MOVE 3 CHARS. AFTER THOUS. MOVED JMP TOMNU / PAGE JUMP... RPERRG, OVLJMP;RPPER3 / ERROR:MORE THAN 4 NUMERICS SUPPLIED RPERCH, CLA OVLJMP;RPPER5 / ERROR:CHAR. WASN'T A VALID NUMERIC / OR ONE OF THE ALLOWABLE SPECIAL / CHARS. (+,-,% OR ,) EIRPP2, HLT / CODE NOT USED ? CLA / AC MUST BE 0 TO INFORM OVEXIT THAT / THIS IS NOT THE FINAL END OF THIS EDIT /? JMP RPTOP / GO CLOSE DOC. / THEN RE-OPEN IT, THEREBY SUPPLYING / THE MAIN HDR. BLOCK AND ITS NEW / PARELLEL RAPID PAGE DATA STRUCTURE / IN THEIR RESPECTIVE SCROLL BUFFERS EIRPG2, -6 / 6 CHAR. MAX. INPUT RANGE (+9,999) ZBLOCK 6 / START OF 6 CHAR. INPUT BUFFER EIRPG3, ZBLOCK 6 / START OF 6 CHAR. WORK BUFFER /A206 X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------------- PAGE TOMNU, CIFMNU / CHANGE FOR MENU FLD JMS I CVDCAL / ASCIZ TO BINARY VIA CVDBN EIRPG3 / GET ASCIZ CHARS. HERE /A206 /D206 TMP / GET ASCIZ CHARS. HERE JMP RPERCH / CHAR. WASN'T 0-9 DOHUNS, DCA RPBIN2 / UPDATE BINARY # OF THOUSANDS TAD (EIRPG3-1) /A206 /D206 TAD (TMP-1) DCA X1 / X1 => MOVE TO THIS BUFFER TAD I X0 / GET INPUT CHAR. DCA I X1 / MOVE INTO TEMP. BUFFER ISZ T3 / T3 => # OF CHARS. TO MOVE JMP .-3 / LOOP IF MORE TO MOVE DCA I X1 / SUPPLY ASCIZ DELIMTER CIFMNU / CHANGE TO MENU FLD JMS I CVDCAL / ASCIZ TO BINARY VIA CVDBN EIRPG3 / GET ASCIZ CHARS. HERE /A206 /D206 TMP / GET ASCIZ CHARS. HERE JMP RPERCH / CHAR. WASN'T 0-9 DCA RPBIN1 / UPDATE BINARY # OF HUNDREDS / initialize GOTO PAGE pointers TAD (55) DCA RPCUOF / OFFSET TO 1ST DESCRIPTOR WORD IN 1ST RPPGDS BLOCK ONLY TAD (55) DCA RPMTRL / OFFSET TO DEFAULT RULER BLOCK DCA RPMTBK / NO MATH BLOCK OFFSET DCA RPPG0 / 0 = NOT OVER --TOP-- AC0001 DCA RPCUBK / START WITH 1ST RPPGDS BLOCK AC0001 DCA RPRLHN / DEFAULT RULER BLOCK IS IN 1ST RPPGDS BLOCK / RaPid POSItioning / HERE TO BEGIN THE ACTUAL REPOSITIONING TO THAT PAGE OR BLOCK / SPECIFIED BY USER INPUT. / RPPOSI PSEUDO CODE: / if RPWORD = "absolute" positioning go test block or page / else if RPWORD = "forward" direction leave RPBIN1 and RPBIN2 / as is / else convert the positive binary page value in RPBIN1 / and RPBIN2 into negative values (-) / DETERMINE WHAT THE PAGE NUMBER VALUE SUPPLIED BY THE USER WAS. / IF IT WAS AN ABOSULTE NUMBER, THEN RPBIN1 AND RPBIN2 CAN / REMAIN AS IS; OTHERWISE, THE OFFSET VALUE STORED WITHIN / RPBIN1 AND RPBIN2 MUST BE CONVERTED TO AN ABSOLUTE BLOCK / NUMBER OR PAGE NUMBER. HOWEVER, THE DISTINCTION BETWEEN PAGE / AND BLOCK POSITIONING MUST BE MADE PRIOR TO THIS CONVERSION, / SO THAT BLOCK CALCULATION DOES NOT USE CURPG1 AN CURPG2 / START THE ACTUAL REPOSITIONING... TAD RPWORD / GET POSITIONING FLAGS AND (REVERS) / TEST REVERSE (-) OFFSET FLAG SNA CLA / SKIP TO COMPLEMENT OFFSET JMP CKMODE / NOT - SO CHECK MODE TYPE TAD RPBIN2 / GET # OF THOUSANDS SUPPLIED CIA / MAKE NEGITIVE TO BACKUP DCA RPBIN2 / SAVE -THOUSANDS # TAD RPBIN1 / GET # OF HUNDREDS SUPPLIED CIA / MAKE NEGITIVE TO BACKUP DCA RPBIN1 / SAVE -HUNDREDS # / DETERMINE IF REPOSITIONING TO A PAGE OR BLOCK TO CONTINUE / OFFSET CONVERSION, IF NECESSARY... / If RPWORD = "offset" calculate absolute page # / if RPWORD = positive offset set CURPTR direction / offset (T1) to +1 / else set CURPTR direction offset (T1) to -1 / else set CURPTR direction offset (T1) to +1 CKMODE, TAD RPWORD / POSITION FLAGS SPA CLA / SKIP TO PROCESS OFFSET JMP FORDIR / JMP TO SET CURPTR OFFSET +1 AC7777 / GOTO PAGE "REQ" FLAG CDILP / DF & IF TO FIELD 5 JMS RPPMENU / GET CURRENT EDIT BUFFER PAGE VALUE / INTO CURPG1 & CURPG2 TAD CURPG2 / CURRENT THOUS. PAGE # TAD RPBIN2 / + OFFSET = DESIRED THOUSANDS # DCA RPBIN2 / ABSOLUTE THOUSANDS PAGE # TAD CURPG1 / CURRENT HUNDREDS PAGE # TAD RPBIN1 / + OFFSET = DESIRED HUNDREDS # DCA RPBIN1 / ABSOLUTE HUNDREDS PAGE # FORDIR, DCA RPBOTF / RPBOTF = 0 => DOING V2 GOTO PAGE, NOT V2 GOLD BOTTOM AC7777 TAD RPBIN1 / FORCE TO TOP OF DESIRED PAGE SMA / SKIP IF TOP-OF-PAGE NOT AVAILABLE JMP FORDR / TOP-OF-PAGE AVAILABLE DCA RPPG0 / RESULT INTO --TOP-- FLAG TAD RPBIN2 / CHECK FOR THOUSANDS SNA / SKIP IF THOUSANDS JMP FORDR / NO THOUSANDS TAD (-1) / DECREMENT BY ONE DCA RPBIN2 / AND SAVE AS NEW THOUSANDS COUNT TAD (1747) / PAGE 1000 OR 2000 OR 3000 WAS DESIRED / SO SET RPBIN1 TO 999 AND DECREMENT / RPBIN2 BY ONE TAD RPBIN1 / ADDED TO CURRENT HUNDREDS FORDR, DCA RPBIN1 / RPBIN1 = DESIRED PAGE NUMBER AC4000 / MINUS FLAG FOR GOTO PAGE INIT. TAD RPBIN1 / USE AVAIL. MEMORY WORD DCA RPBIN1 / DON'T DISPLAY FILE INFO. AT OPEN TIME... DCA CURPG1 / CLEAR PAGE MARK COUNTER TAD RPPG0 / GET --TOP-- FLAG SNA / SKIP IF AT --TOP-- OF DOC JMP OVL2 / JUMP IF NOT APPLICABLE TAD (1) / FOR INCR. OF --TOP-- FLAG SZA CLA / SKIP IF REALLY AT --TOP-- JMP OVL2 / JUMP IF BEYOND --TOP-- TAD RPWORD / WHAT TYPE OF POSITION REQ.? AND (2000) / WAS IT RELATIVE POSITIONING? SZA CLA / SKIP IF ERROR W/ ABSOLUTE PAGE0 DCA RPPG0 / CLEAR --TOP--FLAG / RPPG0 = + IF OK / RPPG0 = - IF ERROR OVL2, OVLJMP; OVPAGE / show "REPOSITIONING TO..." message... / tell the user to standby while the doc. is closed (updating / descriptor words) and then re-opened (supplies the doc. header / block and the RPPGDS block in their repective buffers) X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------------- PAGE /*************************************************************************** /**** START OF OVERLAY **** /*************************************************************************** OVRNUM=OVRNUM+200 OVRBLK=OVRNUM%200+DLOEDO-1 / DISK BLOCK WHERE OVERLAY IS LOADED RELOC RELOC OVLAY1 OVRNUM / GOLD:SEARCH GOLD:RULER COMMAND (GOTO-RULER) OVGSGR= .-OVLAY1+OVRNUM / PROMPT FOR "ADVANCE" OR "BACKUP" JMS PROMPT / CLEAR SCROLL LINE THEN DISPLAY PROMPT EIRRAB / PTR TO "Press ADVANCE or BACK UP" / WAIT UNTIL USER TYPES "ADVANCE" OR "BACKUP", / AND SET RRDIR ACCORDINGLY RRPRLP, GETINP / GET KEYBOARD CHAR ZZCASE / DISPATCH ADVANCE,BACKUP RRDISP-1 JMS BEEPER / NEITHER ADVANCE NOR BACKUP - ERROR JMP RRPRLP / TRY AGAIN / USER TYPED "ADVANCE" KEY RRPRAD, AC0001 / SET RRDIR:=1 TO INDICATE ADVANCE SKP / USER TYPED "BACKUP" KEY RRPRBK, AC7777 / SET RRDIR:=-1 TO INDICATE BACKUP DCA RRDIR JMS FXSCRL / GET RID OF PROMPT / (REPLACE PROMPT LINE WITH DOCMT TEXT) / START GOTO-RULER PROCESSING OVRRGO= .-OVLAY1+OVRNUM JMP XVRRGO / DISPATCH TABLE FOR GOLD:SEARCH GOLD:RULER PROMPT RRDISP, EDADVN; RRPRAD / ADVANCE EDGADV; RRPRAD / GOLD:ADVANCE EDBKUP; RRPRBK / BACKUP EDGBKP; RRPRBK / GOLD:BACKUP EDNWLN; RRABOR / RETURN (ABORT GOTO-RULER) 0 / SUBR RRGETN -- MOVE CURSOR IN TEXT BUFFER, /M157 / EXHAUSTING ETX (STX) BUFFER, / BUT STOP WHEN DISK ACTIVITY OCCURS. / AC DETERMINES DIRECTION / RROROF MUST BE SET UP WITH OFFSET OF ORIGINAL ETX (STX) BLOCK. / / CALL: / / DF = DOESN'T MATTER / TAD RRDIR / AC=DIRECTION TO MOVE: +=>FORWARD, -=>BACKWARD / JMS RRGETN / GET NEXT (OR LAST) CHARACTER / JMP ETXSTX / REACHED ETX (OR STX), AC=0 / JMP ETBSTB / NO MORE CHARS AVAILABLE WITHOUT DISK INPUT / / (ACTUALLY, THE NEXT DOCUMENT BLOCK HAS BEEN / / READ INTO THE ETX (OR STX) BUFFER, / / BUT LITTLE OF ITS DATA HAS BEEN USED YET/M157 / ... / MOVED CURSOR 1 POSITION. /M157 / / MAY HAVE MOVED CHAR FROM ETX (OR STX) / / BUFFER TO TEXT BUFFER, / / BUT DID NO DISK I/O. / / ON ALL RETURNS, DF = CDFMYF, AC=0 /M157 / RRGETN, XX CDFMYF / MAKE SURE WERE LOOKING AT OUR FIELD /A199 TAD RRDIR / AC=DIRECTION OF NEXT CHAR /A199 SMA / MOVE FORWARD OR BACKWARD? JMP RRGEFW / FORWARD / MOVING BACKWARD CURMOV JMP RRGEX1 / REACHED STX: TAKE 1ST RETURN JMS RRGTTP / GET CURRENT SCTOP,SCTPH INTO AC,MQ / CHECK WHETHER ANOTHER DOCUMENT BLOCK WAS READ INTO / THE ETX (OR STX) BUFFER. / ASSUME AC = OFFSET OF CURRENT ETX (STX) BLOCK. RRGETS, CIA / DID ANY DISK INPUT OCCUR? CDFMYF TAD RROROF / (COMPARE OFFSETS INTO HDR BLK) SNA CLA / (SKIP IF THERE WAS DISK INPUT) ISZ RRGETN / NO: TAKE 3RD (NORMAL) RETURN RRGEX2, ISZ RRGETN RRGEX1, JMP I RRGETN / MOVING FORWARD RRGEFW, CURMOV JMP RRGEX1 / REACHED ETX: TAKE 1ST RETURN TAD (-5) / AC=FUNCT # TO READ SCBOT,SCBTH JMS DSKCAL / GET AC=CURRENT SCBOT XRPRD / (&MQ=CURRENT SCBTH, NOT NEEDED) JMP RRGETS / GO CHECK FOR DISK I/O / SUBR RRGTTP -- Rapid Ruler GeT ToP ptrs sctop,sctph / / RETURNS WPFILS VARIABLES SCTOP,SCTPH IN AC,MQ. / / CALL: / / AC = DOESN'T MATTER / / DF = DOESN'T MATTER / JMS RRGTTP / GET SCTOP,SCTPH IN AC,MQ / / AC = SCTOP FROM WPFILS / / MQ = SCTPH FROM WPFILS / / DF = CDFMYF / / TEMPS USED: / CURID,CURTOP(=CURID+1) / / DUE TO THE CLUMSINESS OF THE AVAILABLE WPFILS CALLS, / A RATHER ROUNDABOUT APPROACH MUST BE USED TO GET / THE TOP POINTERS. RRGTTP, XX AC7777 TAD (CURID) / MQ=PTR TO LOCS TO RETURN CURRENT SCTOP,SCTPH MQL / (CURID IS USED AS A TEMP) AC7775 / WPFILS-GET ORIG & CUR SCTOP,SCTPH JMS DSKCAL XRPRD / (MISC GOTO-PAGE FUNCTIONS) CLA / FORGET "ORIGINAL" SCTOP CDFLP TAD I (CURID) / GET CURRENT SCTPH FROM WPFILS MQL / RETURN SCTPH IN MQ TAD I (CURTOP) / RETURN CURRENT SCTOP FROM WPFILS IN AC CDFMYF JMP I RRGTTP / EXIT / SUBR RRRFSP -- Rapid Ruler Restore File System Pointers / / (CREATED TO SAVE A LITTLE SPACE ON CALLING PAGE) RRRFSP, XX TAD (-4) JMS DSKCAL XRPRD JMP I RRRFSP / SUBR RRSVBK -- / PREPARE TO USE RANDOM-ACCESS TO JUMP TO RULER, / USING BLOCK POINTERS (SCTOP,SCTPH). / (CREATED TO SAVE SPACE ON CALLING PAGE.) / RPCUOF := EXTRA OVERSHOOT CORRECTION IF NO RULER FOUND; /A157 RRSVBK, XX CDFMYF /A157 CIA / REVERSE DIRECTION TO CANCEL OVERSHOOT /A157 DCA RPCUOF / SAVE 'HIT ETX OR STX' FLAG /A157 / (SCTOP,SCTPH HAVE OVERSHOT RULER BY AT LEAST ONE BLOCK - / CORRECT OVERSHOOT) / IF ADVANCING TO RULER, THEN / DECREMENT SCTOP,SCTPH BY 1 BLOCK; / IF BACKING UP TO RULER, THEN / (LATER ON WE WILL WANT TO OPEN BLOCK *AFTER* THE / BLOCK THAT CONTAINS THE RULER, THEN BACKUP TO RULER, / SO ADVANCE AN EXTRA BLOCK) / INCREMENT SCTOP,SCTPH BY 2 BLOCKS; / INCREMENT SCTOP,SCTPH BY RPCUOF; /A157 TAD RRDIR / ADVANCING OR BACKING UP TO RULER? SMA CLA AC7775 / ADVANCING: DECREMENT 1 BLOCK TAD (2) / BACKING UP: INCREMENT 2 BLOCKS TAD RPCUOF / CORRECT EXTRA OVERSHOOT IF REACHED /A157 / ETX OR STX /A157 MQL / MQ = BLOCK INCREMENT TO CORRECT OVERSHOOT TAD (-6) / READ DESC WORD, INC SCTOP,SCTPH BY MQ JMS DSKCAL XRPRD / CONVERT SCTOP,SCTPH TO A PHYSICAL BLOCK #. /A157 JMS RRGTTP / GET SCTTOP IN AC /A157 TAD (HDRBUF+2) / + ADDR OF DOCMT HEADER BUFFER /A157 / + SKIP OVER COS COMPATABILY WORDS /A157 DCA T1 / SAVE PTR TO CORRESPONDING PHYS BLK # /A157 CDFBUF / FIELD OF DOCUMENT HEADER BUFFER /A157 TAD I T1 / GET PHYSICAL BLOCK # /A157 / SAVE PHYSICAL BLOCK # OF BLOCK WITH RULER /A157 / (OR OF LAST BLOCK DEFINED IN GOTO-PAGE STRUCTURE) INTO RPCUBK, /A157 / TO BE USED MUCH LATER AFTER DOCUMENT HAS BEEN CLOSED (FILED OUT) /A157 / AND THE REOPENED. /A157 / NOTE: THE PHYSICAL BLOCK # IS SAVED BECAUSE SCTOP,SCTPH ARE /A157 / RELATIVE BLOCK #S. THE ACTUAL BLOCK REFERED TO BY SCTOP,SCTPH /A157 / MAY BE PUSHED DOWN OR UP WHEN THE DOCUMENT IS FILED, /A157 / RENDERING SCTOP,SCTPH INVALID, BUT THE PHYSICAL BLOCK # /A157 / WILL NOT CHANGE. /A157 CDFMYF /A157 DCA RPCUBK /A157 JMS RRRFSP / RESTORE FILE SYSTEM POINTERS JMP I RRSVBK / EXIT / CHECK BUFFER FOR ACTUAL RULER CODE. THE ABOVE CODE FOR RULER CHECK /A199 / FAILS WHEN THE BUFFER IS FULL AND ESPECIALLY WHEN CURMOVING BACKWARD /A199 RRSAVE= RRRFSP / DEFINE TEMPORARY STORAGE LOCATION /A199 RRCBUF, XX / CHECK BUFFER FOR RULER CODE /A199 TAD CURPTR / GET THE CURRENT CURSOR POSITION /A199 DCA RRSAVE / SAVE FOR LATER RESTORE /A199 RRCHK1, CDFMYF / SWITCH BACK TO THIS FIELD /A199 TAD RRDIR / GET THE DIRECTION VALUE /A199 CHKPTR / MOVE AND CHECK THE POINTER /A199 SNA / CHECK FOR A NULL CHARACTER /A199 JMP RRCHK1 / YES, IGNORE THE NULL /A199 SPA / CHECK FOR A END OF BUFFER INDICATOR /A199 JMP RRCHK2 / YES, GO HANDLE END OF BUFFER /A199 TAD (-ECNDRL) / CHECK FOR A END OF RULER CODE /A199 SZA / SKIP IF SO /A199 IAC / CHECK FOR A START OF RULER CODE /A199 SZA CLA / SKIP IF SO /A199 JMP RRCHK1 / NO MATCH, GO CHECK NEXT CHARACTER /A199 ISZ RRCBUF / BUMP RETURN ADDRESS FOR FOUND RULER /A199 RRCHK2, CLA / CLEAN UP FROM END OF BUFFER CHECK /A199 TAD RRSAVE / PICK UP ORIGINAL CURSOR POSITION /A199 DCA CURPTR / RESTORE CURSOR POINTER /A199 JMP I RRCBUF /RETURN TO CALLER /A199 X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------------- PAGE /******************************************************************* / / START GOTO-RULER PROCESSING / / / COME HERE TO GOTO THE NEXT (OR PREVIOUS) RULER. / / 'RRDIR' MUST BE SET TO INDICATE DIRECTION: / RRDIR=+1 => ADVANCE TO NEXT RULER; / RRDIR=-1 => BACKUP TO PREVIOUS RULER. / /******************************************************************* / / / / IF WE ARE ADVANCING TO NEXT RULER THEN / IF RULER MODIFIED FLAG IS SET THEN / SCROLL FORWARD TO RULER; / DONE. / ELSE (RULER MODIFIED FLAG IS NOT SET) / (PREPARE TO SCAN FORWARD THROUGH TEXT & STX BUFFERS) / GET CURRENT VALUE OF SCBOT FOR RRGETN; / XVRRGO, DCA ECHFLG / DON'T DISPLAY CURMOV'S CDFMYF / MAKE SURE WE ARE IN THIS FIELD TAD RRDIR / ARE WE ADVANCING? SPA CLA JMP RRBK / NO: MUST BE BACKING UP TAD RLRMOD / YES: IS THE RULER MODIFIED FLAG SET? SZA CLA JMP RRSC / YES AND YES: GO SCROLL TO RULER TAD (-5) / NO: GET SCBOT IN AC FOR RRGETN JMS DSKCAL XRPRD JMP RRSNEB / GO SCAN TEXT&ETX(STX) BUFFERS FOR RULER / / IF MOVING BACKWARDS, THEN / (WE MAY BE AT A RULER NOW. WE DON'T WANT TO FIND THIS / CURRENT RULER AS THE PREVIOUS RULER, SO WE MOVE THE CURSOR / BACK 1 CHAR. THE BACKUP IS HARMLESS IF THERE WAS NO / RULER PRESENT.) / MOVE CURSOR TO START OF LINE; / BACKUP CURSOR 1 CHAR; (TO SKIP OVER CURRENT RULER IF ANY) / GET SCTOP FOR RRGETN. / / THE CONVENTION IS THAT CURSOR IS "AT" A RULER IF CURSOR / IS ANYWHERE ON LINE FOLLOWING RULER. RRBK, TAD LINE23 / MOVE CURSOR TO START OF LINE /M157 DCA CURPTR DCA CURSOR AC7777 / BACKUP 1 CHAR CURMOV / SKIP OVER CURRENT RULER IF ANY JMP RRERRB / REACHED STX: NO PREVIOUS RULER JMS RRGTTP / GET SCTOP IN AC FOR RRGETN / / SCAN FORWARD (OR BACKWARD) THROUGH EDIT BUFFER SEARCHING FOR A RULER. / CONTINUE SCAN UNTIL ETX (OR STX) BUFFER IS EXHAUSTED. / RRSNEB, DCA RROROF / SAVE OFFSET OF ORIGINAL ETX(STX) BLOCK MQA DCA RRORID / SAVE HDR BLK ID # OF ORIGINAL BLOCK / CLEAR ENTRY POINT OF SUBR SETRUL, WHICH IS USED DURING RULER PROCESSING. / SETRUL'S ENTRY POINT IS USED HERE AS A FLAG / WHICH TELLS US WHEN CURMOV HAS ENCOUNTERED A RULER. CDFMYF DCA SETRUL RRSNEL, /D214 CDFSYS / CHECK FOR PENDING GOLD:HALT /D214 TAD I HLTFLG / WITHOUT UPDATING STATUS LINE (FOR SPEED) /D199 CDFMYF /D214 SZA CLA / SKIP IF NO GOLD:HALT /D214 JMP RRABOR / GOLD:HALT: ABORT GOTO-RULER /D199 TAD RRDIR / AC=DIRECTION OF NEXT CHAR JMS RRGETN / MOVE CURRSOR TO NEXT CHAR JMP RRERRT / ETX (OR STX) - NO NEXT RULER JMP RR3X / END OF EDIT & ETX (STX) BUFFERS /C199 TAD SETRUL / HAS CURSOR PASSED OVER A RULER? SNA CLA JMP RRSNEL / NO: CONTINUE SCAN FOR RULER JMP RRSCDN / YES: FOUND DESTINATION RULER / CHECK REAL BUFFER FOR RULER /A199 RR3X, TAD SETRUL / HAS CURSOR PASSED OVER A RULER? /A199 SZA CLA /A199 JMP RRSCDN / YES: FOUND DESTINATION RULER /A199 JMS RRCBUF / NO: GO CHECK BUFFER FOR RULER CODE /A199 JMP RR3 / REAL END OF BUFFER, CHECK STRUCTURE /A199 JMP RRSCLP / JUMP INTO RRSC CODE BELOW /A199 / SCROLL FORWARD (OR BACKWARD) TO NEXT RULER RRSC, AC0001 / ECHO TEXT WE SCROLL OVER DCA ECHFLG / MOVE FORWARD OR BACKWARD TO START OF NEXT RULER RRSCLP, CDFMYF / SETRUL'S ENTRY POINT IS USED AS A FLAG /A199 DCA SETRUL / INDICATES CURMOV HAS CROSSED A RULER. /A199 TAD RRDIR / PICK UP DIRECTION TO MOVE CURMOV / MOVE FORWARD OR BACKWARD JMP RRERRT / ETX OR STX /D214 TAD ECHFLG / ARE WE ECHOING CURMOV'S? /D214 SZA CLA /D214 HLTTST / YES: UPDATE STATUS LINE /D214 NOP / IGNORE HLTTST RESULT /D214 CDFSYS / CHECK FOR PENDING GOLD:HALT /D214 TAD I HLTFLG / WITHOUT UPDATING STATUS LINE(FOR SPEED) /D214 SZA CLA / SKIP IF NO GOLD:HALT REQUEST /D214 JMP RRABOR / GOLD:HALT: ABORT GOTO-RULER TAD ECHFLG / GET THE ECHO FLAG /C214 SNA CLA / ARE WE ECHOING CURMOV'S? /C214 JMP RRSC2 / NO, SKIP THE HALT TEST /C214 HLTTST / YES: UPDATE STATUS LINE & CHECK FLAG /C214 JMP RRABOR / GOLD:HALT: ABORT GOTO-RULER /C214 RRSC2, CDFMYF / DID CURMOV PASS OVER A RULER? TAD SETRUL SNA CLA / (CURMOV CALLS SETRUL TO PROCESS A RULER) JMP RRSCLP / NO: KEEP LOOKING FOR RULER / FOUND RULER. LEAVE CURSOR JUST AFTER RULER. RRSCDN, TAD RRDIR / WERE WE ADVANCING OR BACKING UP? SPA CLA / ADVANCING: DON'T MOVE CURSOR AC0001 / BACKING UP: ADVANCE CURSOR TO AFTER RULER CURMOV NOP / IMPOSSIBLE / GOTO-RULER IS DONE! (SUCCESS) JMP EIFIX / GO LISTEN FOR NEXT EDITOR CMD / NEXT RULER IS NOT IN TEXT BUFFER OR ORIGINAL ETX (OR STX) BUFFER, / THEREFORE WE MUST USE GOTO-PAGE STRUCTURE TO FIND NEXT RULER. / / FIRST, SAVE WPFILS' FILE SYSTEM POINTERS, BECAUSE / READING SUCCESSIVE GOTO-PAGE DESCRIPTOR WORDS MODIFIES THE / FILE SYSTEM POINTERS, AND AFTER SCANNING DESC WORDS FOR A RULER, / WE NEED A WAY TO RETURN TO OUR STARTING POINT IN THE DOCUMENT. / WARNING: DO NOT PERFORM ANY CURMOV, ADVCHR, ETC. THAT INVOLVES / DISK SCROLLING AFTER MODIFYING THE FILE SYSTEM POINTERS, / OR ELSE THE DOCUMENT WILL BE CORRUPTED! RR3, AC7776 / AC=-2 => SAVE FILE SYSTEM POINTERS JMS DSKCAL XRPRD CLA / FORGET # OF PAGES IN STX BUFFER / SET UP SCTOP,SCTPH TO ACCESS THE GOTO-PAGE DESCRIPTOR WORD / FOR THE BLOCK CURRENTLY LOADED IN THE ETX (OR STX) BUFFER TAD RRORID / COPY RRORID ... MQL TAD RROROF / ... AND RROROF ... JMS DSKCAL / ... TO SCTPH AND SCTOP XRSCTP / SCAN GOTO-PAGE STRUCTURE FORWARD (OR BACKWARD) UNTIL A BLOCK / CONTAINING A RULER IS FOUND. / KEEP TRACK OF THE # OF BLOCKS SKIPPED, SO WE CAN ESTIMATE / WHETHER IT'S FASTER TO SCROLL TO RULER OR JUMP TO IT. DCA RRBLCT / CLEAR # OF BLOCKS SKIPPED OVER / SCANNING FORWARD (BACKWARD): /A157 / START AT ORIGINAL SCTOP,SCTPH (SCBOT,SCBTH) DESCRIPTOR WORD, AND /A157 / INCREMENT (DECREMENT) UNTIL ETX (STX) OR RULER FOUND. /A157 RRDW, /D214 CDFSYS /A157 /D214 TAD I HLTFLG / DID USER TYPE GOLD:HALT? /A157 /D214 SZA CLA /A157 /D214 JMP RRHLT / YES: STOP WHERE YOU ARE /A157 CDFMYF /A157 TAD RRDIR / GET DIRECTION TO SCAN /A157 MQL / SET INCREMENT OR DECREMENT /A157 TAD (-6) / READ G-T-P DESC WORD, INC /A157 JMS DSKCAL / (AC=DESC WORD, -1==ETX OR STX) /A157 XRPRD /A157 CMA / REACHED ETX OR STX? /A157 SNA /A157 JMP RRFNDE / YES-NO NEXT RULER, OR GTP STRUCT /A157 / INCOMPLETE /A157 ISZ RRBLCT / NO: COUNT # OF BLOCKS SCANNED /A157 RRAER2, IFNZRO RPRULR-4000 < ? >/ PREFIX FILE CHANGED /A157 SPA CLA / DOES CURRENT BLK CONTAIN A RULER? /A157 JMP RRDW / NO: CONTINUE LOOKING FOR A RULER /A157 JMP RRFND / YES-FOUND DESTINATION RULER /A157 / REACHED ETX OR STX WHILE SCANNING TEXT & ETX (STX) BUFFERS FOR RULER / OR WHILE SCROLLING TO RULER -- / ERROR (BEEP) IF HAVEN'T FOUND RULER YET; / LEAVE CURSOR AT BOTTOM (OR TOP) OF DOCUMENT. RRERRT, CDFMYF TAD SETRUL / FOUND RULER JUST BEFORE ETX OR STX? SNA CLA / SKIP IF: YES /M163 RRERRB, JMS BUZZER / WARN USER, GET NEXT EDITOR COMMAND /M163 JMP EIFIX / YES-NO ERROR: GET NEXT EDITOR CMD /M163 / USER TYPED GOLD:HALT RRHLT, JMS RRRFSP / RESTORE FILE SYSTEM POINTERS RRABOR, JMP EIFIX / GO LISTEN FOR NEXT EDITOR COMMAND / HIT ETX (OR STX IF CORRUPT GTP STRUCT) WHILE SCANNING GTP DESC WORDS. / EITHER THERE IS NO NEXT RULER, OR THE GTP STRUCTURE IS INCOMPLETE. / PREPARE TO OPEN AT LAST KNOWN BLOCK, THEN CURMOV TO RULER OR ETX. RRFNDE, CDFMYF TAD RRDIR / AC=FLAG TO CORRECT OVERSHOOT AT ETX(STX) / RRFND: FOUND NEXT RULER USING GOTO-PAGE DESCRIPTOR WORDS. / PREPARE TO USE RANDOM-ACCESS TO JUMP TO RULER, / USING BLOCK POINTERS (SCTOP,SCTPH) SET BY SCAN LOOP ABOVE. / NO HARM DONE IF WE LATER DECIDE TO SCROLL INSTEAD. RRFND, JMS RRSVBK / ESTIMATE WHETHER RULER IS CLOSE ENOUGH TO SCROLL DIRECTLY TO IT, / OR IF IT WOULD BE FASTER TO USE GOTO-PAGE TECHNIQUES TO JUMP TO / RULER (RANDOM-ACCESS) TAD RRBLCT / IS RULER WITHIN 20 BLOCKS? TAD (-20) / (TO PULL A # OUT OF MY EAR) SPA SNA CLA JMP RRSC2 / YES: SCROLL TO THE RULER (NO ECHO) / NO: JUMP TO THE RULER / NOW ENTER COMMON CODE FOR GOTO-RULER, GOTO-PAGE, / GOLD:BOTTOM, (GOLD:TOP?,) AND FILE-DOCUMENT (GOLD:F) / / THE FOLLOWING FLAGS ARE VALID ONLY DURING AND IMMEDIATELY / FOLLOWING THIS COMMON CODE: / / 'RRDIR' IS THE FLAG THAT DISTINGUISHES GOTO-RULER FROM / GOTO-PAGE AND GOLD:BOTTOM. / RRDIR=+1 == GOTO-RULER (ADVANCING) / RRDIR=-1 == GOTO-RULER (BACKING UP) / RRDIR=0 == GOTO-PAGE OR GOLD:BOTTOM (*NOT* GOLD-RULER) / / 'RPBIN1' BIT 0 IS THE FLAG THAT DISTINGUISHES A / GOTO-PAGE, GOTO-RULER, OR GOLD:BOTTOM FROM A GOLD:F / (FILE DOCUMENT): / RPBIN1<0 == GOTO-PAGE, GOTO-RULER, OR GOLD:BOTTOM / (INHIBITS CERTAIN SCREEN MESSAGES) / RPBIN1>=0 == FILE DOCUMENT / AT EXIT FROM OVINIT, RPBIN1 BIT 0 := 1, BITS 1-11 ARE UNCHANGED. / / 'RPBOTF' IS A FLAG TO DISTINGUISH BETWEEN GOTO-PAGE & GOLD:BOTTOM / (NOT USED FOR GOTO-RULER): / RPBOTF>=0 == GOTO-PAGE / RPBOTF<0 == GOLD:BOTTOM / / / OUTLINE OF WHAT HAPPENS NEXT: / / OVRRDS DISPLAYS A MESSAGE SIMILAR TO THE GOTO-PAGE MESSAGE, / AND SETS RPBIN1:=4000 SO COMMON CODE LEAVES SCREEN ALONE; / THE COMMON CODE CALLS 2 OVERLAYS AS SUBROUTINES: / OVEXIT: / FILES THE DOCUMENT; / OVINIT: / INITIALIZES THE EDITOR (INCLUDING THE EDIT BUFFER & WPFILS); / OPENS THE DOCUMENT AT THE TOP; / THE GOTO-RULER/GOTO-PAGE/GOLD:BOTTOM OVERLAY RUNS: / OVRRP2: / JUMP TO ORIGINAL GOTO-PAGE/GOLD:BOT OVERLAY (OVRPP2) / IF NOT DOING GOTO-RULER; / OPEN THE DOCUMENT AT THE PHYSICAL BLOCK SPECIFIED BY RPCUBK; / CURMOV FORWARD OR BACKWARD TO THE NEXT RULER; AND / REPAINT THE SCREEN; / JUMP TO GET NEXT EDITOR COMMAND (DONE!). / OVLJMP / GO DISPLAY GOTO-RULER SCREEN, ETC... OVRRDS / VARIABLES RRBLCT, .-. / BLOCK COUNT WHILE SCANNING DESCRIPTOR / WORDS FOR NEXT RULER / = # OF BLOCKS FROM ETB (OR STB) TO / NEXT RULER. / OFFSET OF [[ORIGINAL BLOCK IN ETX (OR STX) BUFFER] + 1]. / THIS VALUE IS COMPARED TO CURRENT SCBOT (OR SCTOP) TO TELL / WHEN A NEW BLOCK HAS BEEN READ (THEREFORE ALL OF THE OLD / BLOCK HAS BEEN COPIED INTO THE EDIT BUFFER). / ALSO USED WHEN SCANNING GOTO-PAGE DESC WORDS FOR A RULER. RROROF, .-. / HEADER ID # OF [[ORIGINAL BLOCK IN ETX (OR STX) BUFFER] + 1]. RRORID, .-. X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------------- PAGE /*************************************************************************** /**** START OF OVERLAY **** /*************************************************************************** OVRNUM=OVRNUM+200 OVRBLK=OVRNUM%200+DLOEDO-1 / DISK BLOCK WHERE OVERLAY IS LOADED RELOC RELOC OVLAY1 OVRNUM OVRPRL= .-OVLAY1+OVRNUM CDILP / NO ROOM HERE JMP RPERRE / GO FIX POINTERS FOR SCROLL AT EXIT TIME / / CONTINUE NORMAL GOTO-PAGE OR GOLD:BOTTOM / OVRPP2= .-OVLAY1+OVRNUM / /A157 / CLEAR CURRENT RULER (CURUL) FOR GOTO-PAGE AND GOLD:BOTTOM. /A157 / THIS IS USUALLY NOT NEEDED UNLESS DESTINATION PAGE IS IN FIRST BLOCK. /A157 / (OVINIT USED TO CLEAR CURUL, BUT NO LONGER DOES SO FOR GOTO-PAGE, /A157 / GOLD:BOTTOM, OR GOTO-RULER, FOR THE CONVENIENCE OF GOTO-RULER) /A157 / /A157 JMS CLRULR / CLEAR NWRUL /A157 JMS COPRUL / COPY NWRUL TO CURUL (CLEAR CURUL) /A157 JMP RP7777 / SETUP / Enter here to continue V2 GOTO PAGE request. / The edit buffer has been flushed; thereby updating the RPPGDS / block descriptors and closing the document. / The document has been re-opened thereby loading the HEADER block / and the RPPGDS block into the appropriate scroll buffers. / ***************************************************************** / *** *** / 'SRCDIR' HAS THE WORKING COPY OF THE RPPGDS DESCRIPTOR WORD / 'RPCUOF' HAS + OFFSET TO THE BLOCK CONTAINING THE DESIRED PAGE (END LOAD) / 'RPMTRL' HAS + OFFSET TO RULER BLOCK (LOAD RULER) / *** *** / ***************************************************************** / BEGIN LOOKING FOR DESIRED PAGE RPDESC, AC0001 / ('JMP' HERE AFTER SETUP AT 'XVRPP2') JMS ADJUST RP7777, AC7777 / RPDSCP FLAG INTO AC JMS DSKCAL / CALL WPFILS TO READ THE DESCRIPTOR WORD XRPRD / WPFILS ENTRY FOR 'RPINIT' CDFMYF / DATA FIELD SET TO 'BUFFER' AT 'DSKCAL' EXIT DCA SRCDIR / SAVE THE PRESENT RPPGDS WORD TAD SRCDIR / GET IT BACK FOR SOME TESTS CMA / -1 IS RPPGDS TERMINATOR SNA CLA / SKIP NEXT IF REAL DESCRIPTOR JMP TRYBOT / FOUND DESCRIPTOR LIST TERMINATOR / IF NOT PROCESSING V2 GOLD BOTTOM, / THEN THIS IS AN ERROR CONDITION AC4000 / RPRULR AND SRCDIR / SNA CLA / SKIP WITH A RULER IN THIS BLOCK JMP TRYPGE / JMP WITHOUT A RULER TAD RPMTRL / SAVE PREVIOUS RULER OFFSET. DCA RPMTBK / ... TAD RPRLHN / BLK. ID # OF EX-RULER DCA RPPRRL / BLK ID # FOR PREVIOUS RULER TAD RPCUOF / AC = OFFSET TO CURRENT DESCRIPTOR WORD DCA RPMTRL / THIS IS LATEST RULER BLOCK TAD RPCUBK / RPPGDS BLOCK IDENTIFIER DCA RPRLHN / SAVE UNTIL RULER LOAD REQUIRED / A78 TRYPGE, CDILP / FOR ROOM JMS RPXHLT / TEST desc. for desired page-blk. JMP RPDESC / return here if LO page not found / not honoring GOLD_HALT any longer /A154 SNA / return here if LO page found / SKIP IF USER DESIRED PAGE GREATER THAN 999 / AC = 0 IF NO 1000'S PAGE # SUPPLIED / SO WE'RE AT THE BLOCK CONTAINING THE PAGE /D154 JMP RPNOHLT / not honoring GOLD_HALT anymore JMP RPSURL / jump with blk. containing desired page /A154 TAD (-1) / TAKE AWAY A THOUSAND DCA RPBIN2 / UPDATE MEMORY THOUSAND PAGE # ISZ CURPG3 / UPDATE THOUSANDS # OF PAGES COUNTED TAD SRCDIR / TOTAL PAGES IN THIS BLOCK AND (37) / INTO THE AC TAD CURPG1 / -REMAINDER OF PAGES IN THIS BLOCK CIA / NEG COUNT OF PAGES LEFT IN BLOCK TAD (1750) / FROM 1000 = NEW HUNDREDS PAGE # DCA RPBIN1 / UPDATE MEMORY HUNDREDS PAGE # DCA CURPG1 / RESET PAGE COUNTER JMP RPDESC / CONTINUE WITH NEXT DESCRIPTOR   / here only if the -1 GTP desc. found. /A154 / if GOLD_BOTTOM flag negative then pursue GOLD_BOTTOM /A154 / else pursue PAGE_NOT_FOUND error condition /A154 / TRYBOT, TAD RPBOTF / get the GOLD_BOTTOM flag /A154 SPA CLA / skip if NOT GOLD_BOTTOM /A154 JMP TORPSURL / jump to perform a GOLD_BOTTOM /A154 TAD CURPG1 / these 2 words will contain pages /A154 TAD CURPG3 / found upto the -1 desc. word /A154 SNA CLA / if pages counted, then this is a /A154 / paginated doc. /A154 AC7776 / else, no pages so GO-TO-TOP /A154 DCA RPPG0 / will = 0 when page # too large /A154 JMP RPPGER / -2 when no pages avail. to /A154 / paint screen after err-report/A154 CURPG3, 0 /count of # of 1000's pages /A154 / user has depressed the GOLD_BOTTOM key and GTP has found the / logical end_of_file (-1 desc. word). Backup the descriptor / pointer to indirectly point at the last text block. / intialize CURPG1 to 1 for two reasons: enables correct flow / thru RPRULE with a GOLD_BOTTOM using a doc. without pages and / secondly, insures that RPADVNW reads all of the BOTTOM block into / the edit-buffer before filling PTRBLK prior to exit... TORPSURL, / -1 desc. word OK when doing GOLD_BOT /A154 AC7777 / get to GTP desc. word immediately /A154 JMS ADJUST / preceeding the -1 to find the ruler /A154 AC0001 / init.'d in order to share /A154 DCA CURPG1 / GTP exit logic JMP RPSURL / SETUP TO LOAD RULER /A157 / FOLLOWING CODE WAS MOVED IN SPACE WAR /A157 /D157 / if PAGE (or BOTTOM) & RULER are within the SAME block /D157 / then use previous RULER block (RPMTBK) in case /D157 / the ruler within the desired PAGE block is /D157 / beyond the desired PAGE /D157 / else use the latest RULER block (RPMTRL) found /D157 /D157 RPSURL, / Set-Up RuLer /D157 TAD RPCUOF / POINTS TO DESIRED PAGE or BOTTOM BLOCK /D157 CIA / FOR COMPARE TO /D157 TAD RPMTRL / LATEST RULER BLOCK POINTER /D157 SZA CLA / SKIP TO MAKE PRIOR THE LATEST RULER /D157 JMP SURLEX / JUMP TO RETAIN LATEST RULER /D157 TAD RPMTBK / RULER PRIOR TO LATEST RULER /D157 DCA RPMTRL / INSURE PRESENCE OF A RULER /D157 /D157 TAD RPPRRL / BLK ID # FOR PREVIOUS RULER /D157 DCA RPRLHN / TO BE LOADED /D157 /D157 SURLEX, TAD (-55) / OFFSET TO 1ST TEXT-BLOCK /D157 TAD RPCUOF / IF PAGE NOT IN 1ST TEXT-BLOCK /D157 SNA CLA / THEN LOAD ITS' RULER NOW /D157 JMP RPPAGE / ELSE, LOAD IT W/ PAGE or BOTTOM /D157 JMP RPRULE / GO SET-UP WPFILS SCTOP&SCBOT / the block being loaded into the EDIT buf. is pointed at by / the offset within RPMTRL; SCBOT points at this block -2 (COS). / when all chars. within this block have been moved into the / EDIT buf., WPFILS will automatically read in the next seq. / block and bump SCBOT. when SCBOT and RPMTRL no longer match / then a new block has just been read (we are done w/ current blk) RPCKBT, 0 / ChecK scBoT DCA T2 / CHAR. JUST LOADED INTO ED. BUF. TAD (-5) / F.C. TO REQ. SCBOT CONTENTS JMS DSKCAL / WPFILS WILL SUPPLY SCBOT IN AC XRPRD CDFMYF / BACK FROM BUFFER FIELD CIA / FOR COMPARE TO TAD RPMTRL / CURRENT BLOCK OFFSET SNA CLA / NO CHANGE MEANS SAME BLOCK ISZ RPCKBT / CHANGED WHEN NEXT SEQ. BLK. READ JMP I RPCKBT / RETURN + 1 = CONTINUE W/ THIS BLK. / RETURN + 0 = ENTIRE BLOCK PROCESSED / SPA / SKIP NEXT IF POSITIVE MEANING ADJUST FORWARD / JMP ADJBACK / ADJUST IN THE REVERSE DIRECTION / adjust in the forward direction / ISZ RPCUOF / ADJUST FORWARD BY 1 COUNT (ALWAYS) / CLA / TAD RPCUOF / TAD (-400) / SPA CLA / JMP I ADJUST / EXIT / gone to far forward / AC0002 / 2 /\ DCA RPCUOF / ISZ RPCUBK / JMP ADJEX2 / EXIT / adjust in the backward direction / ADJBACK,TAD RPCUOF / GET POINTER VALUE BEFORE ADJUSTMENT / DCA RPCUOF / SAVE BACKWARD ADJUSTED VALUE / TAD RPCUBK / CLL RAR / SNA CLA / JMP RPPH01 / AC7776 / -2 / TAD RPCUOF / SMA / JMP ADJEX1 / STILL WITHIN LIMITS OF RPPGDS BLOCK AFTER ADJUSTMENT / the contents of the AC is a negative number / which means out of the logical boundries / of the RPPGDS block after the backward adjustment / TAD (400) / DCA RPCUOF / RPCUOF IS NOW CORRECTED / AC7777 / -1 / TAD RPCUBK / DCA RPCUBK / JMP I ADJUST / EXIT / special boundry testing / because the pointer adjusted / is in the 1st RPPGDS descriptor block / (which has unique limits) / 55 - is the 'top' of the block where the 1st RPPGDS descriptor word is / 377 - is the 'bottom' of the block where the last descriptor word is / RPPH01, TAD (-55) / TAD RPCUOF / ADJEX1, SMA CLA / JMP I ADJUST / EXIT - STILL WITHIN LIMITS AFTER ADJUSTMENT / TAD (55) / ADJEX2, DCA RPCUOF / JMP I ADJUST / EXIT / after reporting that the desired page was not found, / backup to the previous descriptor word to get the block / containing the last available page..... SETBLK, XX / SAVE CALLERS RETURN ADDRESS TAD (-5) / F.C. TO REQ. SCBOT CONTENTS JMS DSKCAL / WPFILS WILL SUPPLY SCBOT IN AC XRPRD / GTP ENTRY POINT CDFMYF TAD (1) / INIT. RPMTRL TO BE THE DCA RPMTRL / BLK BEING LOADED AC7775 / -3 TAD RPCUBK / ARE WE IN THE 3RD EXT?? SZA CLA / SKIP IF 3RD EXT TAD (16) TAD (360) / IF IN 3RD EXT. SCBOT CANNOT BE >= 360 / ANY OTHER EXT. SCBOT CANNOT BE >= 376 CIA / MAKE NEG FOR COMPARE TAD RPMTRL / TO BLK BEING LOADED SNA CLA / SKIP W/ VALID BLOCK DCA RPMTRL / CORRECT BLOCK OFFSET JMP I SETBLK / RETURN X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------------- PAGE / can delete all this because GOLD_BOTTOM now takes GTP path... /A154 /D157 / ENTRY TO 'RPXRULE' FROM 'TRYBOT' /D157 / A -1 RPPGDS DESCRIPTOR LIST TERMINATOR WAS FOUND /D157 / BACKUP THE LIST POINTER 10 POSITIONS /D157 / 10 POSITIONS = 1 TO GET BEFORE -1 DESCRIPTOR /D157 / 9 TO INSURE THAT THERE WILL BE ENOUGH TEXT /D157 / TO PAINT THE SCREEN /D157 /D154 RPXRULE, / was called only by TRYBOT /D154 TAD (-12) / ADJUST BACK 10 BLOCKS /D154 JMS ADJUST / ADJUST 'RPCUOF' /D154 CIFLP / FIELD 5 /D154 JMS RULCHK / CHECK TO LOAD CORRECT RULER /D154 TAD RPBKID / RESTORE BLK ID # /D154 DCA RPCUBK / FOR SCROLL... /D154 JMP RPRUL1 / IF DESIRED PAGE (OR BOT DOC) & LATEST RULER ARE WITHIN THE SAME BLOCK THEN/A157 / USE PREVIOUS RULER BLOCK (RPMTBK,RPPRRL) IN CASE /A157 / THE RULER WITHIN THE DESIRED PAGE BLOCK IS /A157 / BEYOND THE DESIRED PAGE; /A157 / ELSE (NOT WITHIN THE SAME BLOCK) /A157 / USE THE LATEST RULER BLOCK (RPMTRL,RPRLHN) FOUND. /A157 /A157 RPSURL, / Set-Up RuLer /A157 TAD RPCUOF / OFFSET OF DESIRED PAGE OR BOTTOM BLOCK/A157 CIA / FOR COMPARE TO /A157 TAD RPMTRL / LATEST RULER BLOCK OFFSET /A157 SZA CLA / SKIP IF BLOCKS MAY BE THE SAME /A157 JMP SURLEX / JUMP TO RETAIN LATEST RULER /A157 TAD RPCUBK / DO BLOCK ID #S ALSO MATCH? /A157 CIA / (COMPARE BLK ID # FOR DESIRED PAGE /A157 TAD RPRLHN / WITH BLK ID # FOR LATEST RULER) /A157 SZA CLA / SKIP IF YES:SET LATEST RUL:=PREVIOUS RUL/A157 JMP SURLEX / NO: RETAIN LATEST RULER /A157 /A157 TAD RPMTBK / RULER PRIOR TO LATEST RULER /A157 DCA RPMTRL / INSURE PRESENCE OF A RULER /A157 /A157 TAD RPPRRL / BLK ID # FOR PREVIOUS RULER /A157 DCA RPRLHN / TO BE LOADED /A157 /A157 SURLEX, TAD (-55) / OFFSET TO 1ST TEXT BLOCK /A157 TAD RPCUOF / IS PAGE OR BOTTOM IN 1ST TEXT BLOCK? /A157 SZA CLA /A157 JMP RPRULE / NO: GO LOAD IT'S RULER /A157 AC7777 / (MAYBE: CHECK BLOCK ID #S) /A157 TAD RPCUBK /A157 SNA CLA / SKIP IF NO: LOAD RULER SEPARATELY /A157 JMP RPPAGE / YES: LOAD RULER W/ PAGE OR BOTTOM /A157 / Request the initialization of WPFILS' SCTOP & SCBOT to enable / the READ of our RULER block. The contents of SCTOP & SCBOT / are used as offsets within the HEADER BLOCK BLOCK-LIST to / obtain the block # of the desired text block. They are always / a -2 away from the desired block list offset. SCGETR of WPFILS / takes the contents of SCTOP or SCBOT and adds 2 to obtain the / desired text block # from the block list. This module does not / alter the actual contents of either SCTOP or SCBOT. / Load the RULER into the edit buffer ; fill the edit ruler area (NWRUL) / with the contents of this RULER. RPRULE, TAD CURPG1 / PAGE NUMBER SNA CLA / SKIP IF VALID JMP RPPAG1 / USER SUPPLIED A PAGE VALUE / = OR < 0, OR NON-PAGINATED TAD RPRLHN / RPCUBK - IDENTIFY WHICH HEADER BLOCK CONTIANS MQL / THE RULER BLOCK OFFSET AC7776 / -2 / MAKES FOR WPFILS 'SCBOT' / / COS-310 COMPATABILITY TAD RPMTRL / RPCUOF - OFFSET TO THE BLOCK -2 / CONTAINING THE RULER JMS DSKCAL / REQUEST THAT SCBOT & SCTOP BE SETUP / FOR OUR READ XRPRD / ENTRY POINT FOR V2 GOTO PAGE / RANDOM BLOCK READ JMS RPBFIN / GO INITIALIZE THE EDIT BUFFER / the EDIT BUFFER is now logically empty. / WPFILS has been primed to start reading text blocks (SCBOT & SCTOP). / using ADVPTR because CURMOV doesn't know what to do with / an END-RULER (17) that may come before a START-RULER (16) / which is possible now with random block access employed / by GOTO-PAGE... JMS SETBLK / SET UP RPMTRL TO POINT AT THE / BLOCK TO BE LOADED RPRLSR, / START SEARCH FOR START-OF-RULER ADVPTR / READ/ LOAD 1 CHAR. NOP / ETX WILL NOT OCCUR CDFMYF / BACK TO THIS FIELD JMS RPCKBT / SEE IF ENTIRE BLOCK LOADED JMP RPPAGE / YES - ALL RULERS LOADED TAD T2 / CHAR. JUST LOADED TAD (-ECSTRL) / IS IT START-OF-RULER? SZA CLA / SKIP IF RULER FOUND JMP RPRLSR / NO RULER - KEEP LOOKING / load BOTTOM ruler just like GTP ruler /A154 /D154 TAD RPBOTF / IF THIS IS A /D154 SPA CLA / GOLD-BOTTOM REQUEST /D154 JMP TOBOTF / THEN JUMP TO CONT. IT JMS ADVRUL / LOAD RULER JUST FOUND NOP / ETX WILL NOT OCCUR JMS RPCKBT / DID IT FORCE READ OF NEW BLOCK? JMP RPPAGE / YES - ENTIRE BLOCK PROCESSED JMP RPRLSR / NO - DO UNTIL ENTIRE BLOCK READ / request the initialization of WPFILS' SCTOP & SCBOT to enable the / read of our PAGE block. / Exit to final overlay to paint the screen with the first line of / the new page in the bottom line of the screen. Set scroll pointers / with the edit buffer lines preceeding the first line of the new page. RPPAGE, JMS RPBFIN / GO INIT. THE EDIT BUFFER OVLJMP; OVRPWP / GO INIT. WPFILS'S SCTOP & SCBOT AND / TEST FOR ACTIVE CONTROL-BLOCK RPPAG1, OVLJMP; OVRPEX / LOAD PAGE INTO BUFFER;PAINT SCREEN; EXIT / can delete all this now because GOLD_BOTTOM handled like GTP /A154 / was called by RPRLSR only... /A154 /D154TOBOTF, TAD RPCUBK / HEADER BLOCK ID # /D154 CLL RAR /D154 SZA CLA / SKIP IF THIS IS 1ST HEADER BLOCK /D154 JMP BOTRLR / GO LOAD THE RULER INTO EDITOR RULER AREA /D154 TAD (-55) / 1ST TEXT BLOCK POINTER OFFSET /D154 TAD RPCUOF / COMPARE TO CURRENT BLOCK (BOTTOM OF DOC) /D154 SNA CLA / IF NOT 1ST DESCRIPTOR WORD /D154 JMP BOTEM / GO LOAD RULER / IF WE ARE IN THE FIRST BLOCK OF THE FIRST EXTENSION, LOAD THE RULER /D154BOTRLR, TAD (376) / READ IN THE NEWEST RULER /D154 CURMOV /D154 NOP /D154BOTRL1, JMS RPBFIN / CLEAN-UP EDIT BUFFER FROM RULER /D154 OVLJMP; OVRPWP / INIT. WPFIL'S SCTOP & SCBOT, / AND READ PAGE DESC. FOR PRINT CONTROL / error condition recognized.... RPPGER, TAD CURPG1 / -1 DESCRIPTOR FOUND SNA / IF NO PAGES IN THE DOCUMENT TAD CURPG3 / THEN REPORT ERROR AND SNA CLA JMP RPPAG1 / GO TO TOP OF DOCUMENT / ELSE AC2000 / ERROR RECOVERY FLAG DCA RPBOTF / FOR -1 DESC. FOUND CONDITION OVLJMP; RPPER7 / GO REPORT ERROR: RAN OUT OF / DESCRIPTOR WORDS BEFORE PAGE FOUND / INIT. THE EDIT BUFFER JUST LIKE AT OVINIT TIME... RPBFIN, XX CDFBUF AC7777 / TAKE 1 AWAY FROM THE FOLLOWING ADDR. TAD BUFBEG / START OF THE EDIT BUFFER DCA X0 / X0 = EDIT BUFFER LOC. POINTER TAD (ECBFBG) / BUFFER BEGIN WORD DCA I X0 / INTO 1ST EDIT BUFFER WORD TAD (ECSTX) / START OF TEXT WORD DCA I X0 / INTO 2ND EDIT BUFFER WORD TAD (ECETX) / END OF TEXT WORD DCA I X0 / INTO 3RD EDIT BUFFER WORD TAD BUFSIZ / # OF TOTAL BUFFER WORDS CIA / INTO A COUNTER TAD (4) / ACCOUNT FOR WORDS WE ALREADY INIT'D DCA X1 / X1 = # OF WORDS TO CLEAR TAD X0 DCA CURPTR DCA I X0 / CLEAR A BUFFER LOC. ISZ X1 / SKIP IF ENTIRE BUFFER = 0 JMP .-2 / NOT DONE CLEARING YET TAD (ECBFND) / PHYSICAL END OF BUFFER WORD DCA I X0 / INTO LAST BUFFER LOC. CDFMYF / INITIALIZE SCREEN TAD (PTRBLK-1) DCA X0 TAD (-NPTRS+1) DCA X1 DCA I X0 ISZ X1 JMP .-2 / GPT MUST USE INIT PTR BLK, DCA I X0 / UNLIKE OVINIT THAT INITS BOTTOM ENTRY TO 2 TAD CURPTR DCA LINE23 / INIT SEPARATE LINE 23 POINTER DCA CURSOR JMP I RPBFIN / RETURN TO CALLER / this routine was moved to field 5 for more room / offset ADJUSTMENT subroutine / adjust (INCREMENT OR DECREMENT) the offset to the rppgds; / and the pointer to the rppgds block / the contents of the AC at entry = positive for forward adjustment, or / = negative for backward adjustment ADJUST, XX / THE CONTENTS OF THE AC IS THE COUNT CIFLP / FOR ROOM..... JMS ADJUS0 JMP I ADJUST / RETURN TO CALLER / BOTEM called by TOBOTF only. Just deleted TOBOTF logic so this call /A154 / can also be deleted. /A154 / IF WE ARE IN THE FIRST BLOCK OF THE FIRST EXTENTION, LOAD THE RULER /D154BOTEM, OVLJMP;OVRBTM / MUST LOAD RULER, ELSE IT WON'T GET / PAINTED IF PTRBLK ISN'T FULL X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------------- PAGE /*************************************************************************** /**** START OF OVERLAY **** /*************************************************************************** OVRNUM=OVRNUM+200 OVRBLK=OVRNUM%200+DLOEDO-1 / DISK BLOCK WHERE OVERLAY IS LOADED RELOC RELOC OVLAY1 OVRNUM /D155 OVRPEX= .-OVLAY1+OVRNUM /D155 JMP RPFPG / CONTINUE NORMAL GOTO PAGE /D157 OVRPWP= .-OVLAY1+OVRNUM / INIT. WPFILS;TEST FOR PRINT-CONTROL AREA /D157 JMP TORPWP / BOTEM just deleted, so this goes also /A154 /D154 OVRBTM= .-OVLAY1+OVRNUM /D154 JMP BOTRUL / LOAD RULER FOR SHORT DOC. GOLD BOTTOM OVRRP2= .-OVLAY1+OVRNUM / / COME HERE FOR GOTO-PAGE, GOLD:BOTTOM, AND GOTO-RULER. / / THE DOCUMENT HAS BEEN CLOSED, / THEN RE-OPENED, AND NOW WE FIND OURSELVES HERE. / / IF THIS IS GOTO-PAGE REQUEST, THEN / GOTO OVRPP2 TO COMPUTE WHICH BLOCK # HAS DESIRED / PAGE AND RULER(S); / IF THIS IS GOTO-RULER, THEN / WE ALREADY HAVE BLOCK # OF DESIRED RULER IN RPCUOF & RPCUBK, / SO OPEN DOCUMENT AT THAT BLOCK & POSITION CURSOR AT RULER. / TAD RRDIR / IS THIS GOTO-RULER? SZA CLA JMP RRPOS / YES OVLJMP / NO: GOTO ORIGINAL GOTO-PAGE,GOLD:BOTTOM OVRPP2 / OVERLAY (CURRENT OVERLAY DOESN'T DO / MUCH FOR GOTO-PAGE UNTIL LATER!) / OPEN DOCUMENT AT BLOCK WITH RULER (PHYSICAL BLOCK RPCUBK) / (ALSO INITIALIZES PCTLFL FROM GOTO-PAGE DESCRIPTOR WORD) RRPOS, JMS RROPP JMS MNUPUT / MAKE LINE # IN STATUS LINE = "N/A" (UNKNOWN) LINNUM-MUBUF / DONE AS EARLY AS POSSIBLE TO MAXIMIZE THE / CHANCE IT WILL BE SET TO SOMETHING USEFUL. / TURN MATH OFF BECAUSE 'RRPS' EXPECTS IT TO BE OFF AC0001 / FUNCTION TO SAVE "MA" SWITCH JMS SWTHMA / AND DEACTIVATE MATH / SET UP PTRBLK IF NECCESSARY. (MOVING CURSOR BACKWARDS (SCRLDN) / REQUIRES THAT AT LEAST LAST 2 ENTRIES IN PTRBLK BE FILLED.) TAD RRDIR / BACKING UP TO RULER? SPA CLA JMS RRPS / YES: MUST FILL PTRBLK NOW / CLEAR ENTRY POINT OF SUBROUTINE SETRUL, WHICH IS USED DURING RULER PROCESSING. / ENTRY POINT IS USED AS FLAG WHICH TELLS WHEN CURMOV HAS ENCOUNTERED A RULER. DCA SETRUL / BEGIN LOOP TO ADVANCE ( OR BACKUP) CURSOR TO RULER. / (NEXT RULER IS DESTINATION RULER.) RRJMLP, TAD RRDIR / GET DIRECTION CURMOV / MOVE CURSOR JMP RRJMET / ETX OR STX-MAYBE RULER NOT FOUND /D214 CDFSYS / IF USER PRESSED GOLD:HALT THEN ABORT /D214 TAD I HLTFLG / IS GOLD:HALT REQUEST PENDING? /D214 SZA CLA /D214 JMP RREXT / YES: ABORT LOOP CDFMYF / LOOP BACK UNTIL CURSOR HAS PASSED OVER RULER TAD SETRUL / DID CURMOV PROCESS A RULER? SNA CLA JMP RRJMLP / NO: LOOP BACK / FOUND DESTINATION RULER. IF WE WERE BACKING UP, CURSOR WILL BE / BEFORE RULER. MAKE SURE CURSOR IS JUST AFTER DESIRED RULER. TAD RRDIR / ADVANCING OR BACKING UP? SPA CLA AC0001 / BACKING UP: MOVE CURSOR AFTER RULER(DIST=1) RRJMET, CURMOV / ADVANCING: DON'T MOVE CURSOR(DIST=0) NOP / HIT ETX-THAT'S OK / CURSOR HIT ETX (OR STX). IF RULER NOT FOUND THEN BEEP TO WARN USER; / GO EXIT FROM GOTO-RULER (COMMON CODE WITH GTP, GOLD:BOT) CDFMYF TAD SETRUL / DID CURSOR PASS RULER JUST BEFORE ETX(STX)? SNA CLA JMS BUZZER / NO: BEEP TO WARN USER /M163 JMP RREXT / PREPARE TO PAINT SCREEN / CONTINUE NORMAL GOTO-PAGE OR GOLD:BOTTOM OVRPWP= .-OVLAY1+OVRNUM / --OVERLAY ENTRY POINT-- JMS RROPR / OPEN FILE FOR SCROLLING AT RELATIVE /A157 / BLOCK DEFINED BY RPCUOF,RPCUBK /A157 / CONTINUE NORMAL GOTO-PAGE OR GOLD:BOTTOM /A155 OVRPEX= .-OVLAY1+OVRNUM / --OVERLAY ENTRY POINT-- /A155 AC0001 / SET UP TO SHUT "MA" SWITCH & DEACTIVATE MATH JMS SWTHMA / GO SHUT OFF "MA" SWITCH & SAVE ORIGINAL / SETTING THIS KEEPS GO-TO-PAGE FUNCTION FROM / REACTIVATING MATH AS IT USES "CURMOV" IN THE / PROCESS OF POSITIONING ITSELF CORRECTLY FOR / THE RIGHT PAGE. (NOTE: "CKCTRL"CALLED BY / "SCRLUP" CALLED BY "CURMOV" THUS ACTIVATING / EDITOR MATH.) /D157 / IF GOLD-HLT IS HIT DURING G-T-P THE EXIT TO /D157 / G-T-P IS DONE VIA "EIBOT2" (I.E. GOLD-BOTTOM) /D157 / WHICH IS SET TO HANDLE A "HLTTST". / IF G-T-P OR GOLD:BOTTOM EXITS NORMALLY THEN / MATH "MA" IS RESTORED IN "RREXT" / /A158 / CONTINUE GOTO-PAGE AFTER ERROR MSG RE REQUEST FOR PAGE ABOVE --TOP--. /A158 / SKIPS "JMS SWTHMA" BECAUSE IT HAS ALREADY BEEN CALLED (WE'VE COME /A158 / THROUGH HERE BEFORE!); /A158 / WILL GO TO 'RPPTOP', THEN 'TOTOP'. /A158 / /A158 OVRPZZ= .-OVLAY1+OVRNUM / --OVERLAY ENTRY POINT-- /A158 / SET STATUS LINE # = "N/A" (UNKNOWN). /A157 / THIS IS DONE AS EARLY AS POSSIBLE TO MAXIMIZE /A157 / THE CHANCE IT WILL BE SET TO SOMETHING MEANINGFUL. /A157 JMS MNUPUT /A157 LINNUM-MUBUF /A157 / CHECK DESTINATION PAGE "OFFSET" TAD CURPG1 / - # OF PAGES TO READ INTO BUFFER SNA CLA / SKIP IF VALID JMP RPPTOP / EITHER THIS DOC. IS NOT PAGINATED, OR / THE USER SUPPLIED A PAGE # = < 0 / start loading text into the EDIT BUFFER, / from the block containing the desired page (or end of GTP structure), / stopping when the top of the desired page (or the bottom of / the document) has been loaded... JMP RPADV2 / CHECK CHAR CURSOR IS ON /A158 / LOOP TO ADVANCE TO DESIRED PAGE (FOR GOTO-PAGE), /A158 / OR BOTTOM OF DOCUMENT (FOR GOLD:BOTTOM) /A158 RPADV1, /D214 CDFSYS / HAS USER PRESSED GOLD:HALT? /A158 /D214 TAD I HLTFLG /A158 /D214 SZA CLA /A158 /D214 JMP RREXT / YES-ABORT: LEAVE CURSOR WHERE IT IS. /A158 AC0001 / ADVANCE CURSOR TO NEXT CHARACTER /A158 RPADV2, CURMOV /A158 JMP RREXT / HIT ETX (NORMAL EXIT FOR GOLD:BOT) /A158 TAD I CURPTR / GET CURRENT CHAR /A158 AND P177 / IGNORE ATTRIBUTE BITS /A158 TAD (-ECNWPG) / IS CURRENT CHAR A NEW-PAGE-MARKER? /A158 CDFMYF /A158 SNA CLA /A158 ISZ CURPG1 / YES: IS MARKER FOR DESIRED PAGE? /A158 JMP RPADV1 / NO OR NO: LOOP BACK TO KEEP LOOKING /A158 / HANDLE CASE OF HAVING MORE THAN 4095 PAGES AFTER LOGICAL /A158 / END OF DOCUMENT (AS DETERMINED BY THE END OF THE GOTO-PAGE /A158 / DESCRIPTOR WORDS) /A158 TAD RPBOTF / IS THIS GOLD:BOTTOM? /A158 SPA CLA / SKIP IF GOTO-PAGE /A158 JMP RPADV1 / YES: ADVANCE UNTIL ETX /A158 / /A158 / FOUND DESIRED PAGE. /A158 / ADVANCE CURSOR TO NEXT PRINTABLE CHAR. /A158 / /A158 RPADV3, AC0001 / ADVANCE CURSOR /A158 CURMOV /A158 JMP RREXT / HIT ETX /A158 TAD I CURPTR / GET CURRENT CHAR /A158 JMS WRDTST / IS IT A WORD TERMINATOR? /A158 SNA CLA /A158 JMP RPADV3 / YES: LOOP TO FIND NON-TERMINATOR /A158 / NO: FOUND PRINTABLE CHARACTER /A158 /D158 / ADVANCE PAGE to desired page... /D158 /D158 RPADVUNT, / EMULATE ADVANCE PAGE /D158 AC0006 / AC => 6 FOR PAGE ID /D158 DCA GRAMUN / SUPPLY UNIT ID /D158 JMS SETUNT / SET PAGE-UNIT /D158 /D158 JMS LODCHR / LOOK FOR PAGE-MARKER /D158 JMP RREXT / ETX WILL now occur if GOLD_BOTTOM /M154 /D158 JMS RPGETUNT / SEE IF A PAGE-MARKER FOUND /D158 RPADVNW, /D158 .-. /D158 SZA CLA / RECOGNIZE PAGE-UNIT? /D158 JMP I RPADVNW / NO, KEEP SCROLLING... /D158 / CHECK GOLD:HALT AFTER EVERY PAGE /A157 /D158 / (THERE MAY BE NO PAGES! IS THIS A BUG?) /A157 /D158 CDFSYS /A157 /D158 TAD I HLTFLG / IS THERE A PENDING GOLD:HALT? /A157 /D158 SZA CLA / SKIP IF NO /A157 /D158 JMP RREXT / YES: ABORT, LEAVE CURSOR WHERE IT IS /A157 /D158 / LOOP BACK IF NOT AT DESIRED PAGE /D158 CDFMYF / FROM BUFFER FIELD /D158 ISZ CURPG1 / SKIP W/DESIRED PAGE IN BUFFER /D158 JMP RPADVUNT / JUMP TO SCROLL ANOTHER PAGE /D158 /D158 / HANDLE CASE OF HAVING MORE THAN 4095 PAGES AFTER LOGICAL /A157 /D158 / END OF DOCUMENT (AS DETERMINED BY THE END OF THE GOTO-PAGE /A157 /D158 / DESCRIPTOR WORDS) /A157 /D158 TAD RPBOTF / IS THIS GOLD:BOTTOM? /A157 /D158 SPA CLA / SKIP IF GOTO-PAGE /A157 /D158 JMP RPADVUNT / YES: ADVANCE UNTIL ETX /A157 /D157 JMP RPGBOT / can't use CURPG1 for GOLD_BOTTOM /A154 / / CURSOR IS AT DESIRED FINAL PLACE IN TEXT FOR GOTO-PAGE, GOTO-RULER / OR GOLD-BOTTOM, BUT PTRBLK MIGHT NOT BE COMPLETELY FULL. / RREXT, JMS RRPS / FILL PTRBLK IF NECESSARY & POSSIBLE /A157 AC2000 / SET FLAG THAT TELLS FXSCRL TO DCA SCRNFL / REPAINT THE ENTIRE SCREEN / THE BLOCK CONTAINING THE DESIRED PAGE, RULER, OR DOCUMENT BOTTOM / IS IN THE EDIT BUFFER, AND THE CURSOR IS POSITIONED AT THE / DESIRED ENTITY IF IT EXISTS; OTHERWISE THE CURSOR IS AT THE / BOTTOM OF THE DOCUMENT -- UNLESS THE USER PRESSED GOLD:HALT! / IN ANY EVENT, PTRBLK HAS BEEN SET UP TO PAINT THE SCREEN PROPERLY. JMS SWTHMA / GO RESTORE THE ORIGINAL "MA" SWITCH SETTING / FROM BEFORE ENTERING GTP, G:BOT, OR GTR / (SEE COMMENT AT START OF "OVRPEX" / OR "RRPOS" ROUTINES.) /D157 CDFSYS / GET TO FIELD 0 TO /D157 DCA I HLTFLG / CLEAR A POSSIBLE GOLD-HALT FLAG /D157 CDFLP / NOW TO FIELD 5 TO /D157 DCA RPACTIVE / CLEAR GTP 'ACTIVE' FLAG / GO FINISH UP SOME BUSY WORK, / CALCULATE & SET THE STATUS LINE'S PAGE NUMBER LOCATIONS, AND THEN / GO RE-PAINT THE SCREEN, CLEAR MOVEMENT AND EDIT MODES, AND / WAIT FOR NEXT EDIT COMMAND OVLJMP;OVBOTB / END OF REPOSITIONING REQUEST / / SUBR RRPS -- PTRBLK SETUP / FILLS UP PTRBLK WITH THE DESIRED SCREEN IMAGE, / AND LEAVES THE CURSOR AT THE SAME PLACE IN THE TEXT WHEN DONE. / / ENTRY CONDITIONS: / RRPS ASSUMES THE CURSOR IS IN COLUMN 0. /A157 / PTRBLK MAY BE TOTALLY EMPTY, PARTIALLY FULL, OR COMPLETELY FULL, /A157 / BUT IT MUST NOT BE GARBAGE. /A157 / MATH MUST BE TURNED OFF. /A157 / IT IS BEST IF EDITOR'S STATUS LINE'S LINE # IS INITIALIZED / (SO IF PAGE IS FOUND BY RRPS, THEN LINE # WILL BE SET). / RRPS, XX / CHECK WHETHER PTRBLK IS PRIMED FOR SCRLDN /A157 / (SCRLDN REQUIRES THAT LAST 2 PTRBLK ENTRIES BE FULL) /A157 CDFMYF /A157 TAD PTRBLK+26 / GET PTRBLK ENTRY FOR LAST LINE - 1 /A157 SZA CLA / IS PTRBLK PRIMED? /A157 JMP RRPS1 / YES-DON'T PRIME IT AGAIN /A157 / PTRBLK NOT PRIMED - SO PRIME IT FOR MOVING CURSOR BACKWARDS /A157 / SCRLDN WILL ACT STRANGE THE 1ST TIME IT'S CALLED /A157 / (IT WILL PLACE CURSOR AFTER CURRENT POSITION, NOT BEFORE), /A157 / BUT IF WE CONTINUE BACKING UP LINES (WHICH WE WILL), /A157 / THEN EVERYTHING WILL BE OK. /A157 TAD LINE23 /A157 DCA PTRBLK+26 / SET UP LAST LINE-1 IN WINDOW /A157 TAD LINE23 /A157 DCA PTRBLK+27 / SET UP LAST LINE IN WINDOW /A157 RRPS1, / PREPARE TO BACKUP A LINE /M157 AC0001 / AC:=1 FOR "LINE" UNIT MODE DCA GRAMUN / 1 = "LINE" MOVEMENT / INSERT MARKER TO REMEMBER CURRENT PLACE IN DOCUMENT TAD (ECTMRK) / POSITION MARK UNAFFECTED BY JUSTIFICATION JMS INSRL1 / INSERT POSITION MARKER /M155 / NOTE: INSRL1 LEAVES CURPTR AFTER /A155 / INSERTED CHAR. THUS RULER MODIFIED /A155 / FLAG WILL BE INSERTED AFTER ECTMRK, /A155 / ELSE THE ECTMRK MIGHT BE REJUSTIFIED! /A155 / / BACKUP A LINE UNTIL PTRBLK IS FULL OR STX IS REACHED. / /D157 RRPSLP, CLA /D157 CDFMYF /D157 TAD PTRBLK / IS PTRBLK FULL? /D157 / (COULD BE FINE TUNED FOR WIDE /D157 / SCREEN AND STATUS LINE) /D157 SZA CLA /D157 JMP RRPSFM / YES: GO FIND POSITION MARKER RRPSLP, JMS BACKUN / BACK CURSOR UP A LINE. /M157 / FOR SOME OBSCURE REASON, BACKUN / FILLS IN AN EXTRA ENTRY TOWARD THE / TOP OF PTRBLK (AND THE SCREEN) / EACH TIME IT IS CALLED. / IF THIS WERE NOT SO, THIS ROUTINE / WOULD BACKUP TO STX! (OHHHH NOOOO!) JMP RRPSGM / HIT STX: GO FIND POSITION MARKER /M158 CDFMYF TAD PTRBLK / IS PTRBLK FULL YET? SNA CLA JMP RRPSLP / NO: LOOP UNTIL IT IS /M157 / / PTRBLK IS NOW AS FULL AS IT CAN GET BY BACKING UP. / MOVE FORWARD TO POSITION MARKER (WHICH MARKS DESIRED / RULER OR PAGE). / / AS WE MOVE FORWARD TO POSITION MARKER, / PTRBLK MAY FILL UP MORE IF WE HAD REACHED STX; / REJUSTIFICATION WILL OCCUR IF NEEDED (USUALLY IT WON'T BE); / AND MATH MUST BE TURNED OFF IN CASE CURSOR PASSES OVER / A WPSMATH CONTROL BLOCK (SEE SWTHMA). / / /D158 RRPSFM, JMS LODCHR / AC=CURRENT CHAR /D158 JMP RRPSLM / AT EOT: BUG-LOST MARKER /D158 / MARKER IS PROBABLY STILL IN TEXT /D158 / SOMEWHERE-TRY SEMI GRACEFUL RECOVERY /D158 TAD (-ECTMRK) / IS CURSOR AT POSITION MARKER? /D158 SNA CLA /D158 JMP RRPSAM / YES-AT MARKER SKP CLA / Start checking w/ current char. /A200 RRPSFM, AC0001 / ADVANCE CURSOR /M158 RRPSGM, CURMOV /M158 JMP RRPSLM / AT EOT: BUG-LOST MARKER / MARKER IS PROBABLY STILL IN TEXT / SOMEWHERE-TRY SEMI GRACEFUL RECOVERY TAD I CURPTR / GET CURRENT CHAR /A158 TAD (-ECTMRK) / IS IT THE POSITION MARKER? /A158 SZA CLA /A158 JMP RRPSFM / NO: LOOP BACK TO FIND MARKER / / FOUND POSITION MARKER. / DELETE POSITION MARKER, THEN / ADVANCE TO CHAR BEING MARKED (CURSOR'S FINAL RESTING PLACE) / RRPSAM, DCA I CURPTR / DELETE POSITION MARKER ADVPTR / MOVE TO 1ST REAL CHAR ON LINE NOP / REACHED ETX-THAT'S OK / RRPSLM, CLA / FORGET CURRENT CHAR CDFMYF JMP I RRPS / EXIT RRPS! X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------------- PAGE / here when this document has not been paginated or, if it has, / the user supplied a page # value = or < 0. / for either case, go to the top of the document and continue the edit cycle / Pseudo-OVINIT... Want to set the pointers to the top of the document. Upon / entering, the buffer contains the start of a ruler, which we want to remove. / When entering, the edit buffer looks like: 7777 When exiting: 7777 / 7775 7775 / 0016 7775 / 7775 0000 / 0000 0000 / . . / . . / . . RPPTOP, TAD RPPG0 / --TOP-- FLAG SMA CLA / SKIP IF ABSOLUTE PAGE 0 OR, / NEG. OFFSET WENT BEYOND --TOP-- JMP TOTOP / JUMP IF PAGE 1 OR, / NEG. OFFSET = CURRENT PAGE # OVLJMP;RPPER7 / REPORT ERROR AND RETURN AT OVRPEX... TOTOP, / GET TO ---TOP--- JMS RPOVIN / CLEAR EDIT BUFFER /M157 JMS RRPBIN / CLEAR PTRBLK & INIT LAST ENTRY /A157 OVLJMP / JUMP TO OVERLAY WITH ABOVE CODE OVRPTP /D157 TORPWP, JMS RROPR / OPEN DOCUMENT AT DESIRED BLOCK /D157 CDFMYF /D154 TAD RPBOTF / GET THE 'GOLD BOTTOM' FLAG /D154 SPA CLA / SKIP IF NOT GOLD BOTTOM /D154 JMP EIBOTA / JUMP IF GOLD BOTTOM /D157 JMP RPFPG / CONTINUE GOTO-PAGE and GOLD_BOTTOM /D155 / /D155 / SUBR RRRAND -- RANDOM-ACCESS OPEN /D155 / /D155 / /D155 / PSUEDO-CODE: /D155 / /D155 / CALL WPFILS TO OPEN DOCUMENT FOR SCROLLING AT DESIRED BLOCK /D155 / (DEFINED BY RPCUOF,RPCUBK); /D155 / READ GOTO-PAGE DESCRIPTOR WORD FOR THIS BLOCK (CHANGES BLOCK); /D155 / IF BIT RPMTHB IS ON THEN /D155 / PCTLFL := 1 ( INDICATE WITHIN CONTROL BLOCK ) /D155 / ELSE /D155 / PCTLFL := 0 ( INDICATE NOT WITHIN CONTROL BLOCK ) /D155 / CALL WPFILS TO OPEN DOCUMENT FOR SCROLLING AT DESIRED BLOCK /D155 / (DEFINED BY RPCUOF,RPCUBK); /D155 / /D155 / /D155 / CALL: /D155 / / IT IS ASSUMED TEXT, ETX, & STX BUFFERS ARE ALL EMPTY /D155 / / RPCUOF= OFFSET INTO DOCUMENT HEADER BLOCK FOR DESIRED BLOCK /D155 / / RPCUBK= HEADER BLOCK ID # FOR DESIRED BLOCK /D155 / CDFMYF /D155 / CLA /D155 / JMS RRRAND / RANDOM-ACCESS OPEN FOR SCROLLING /D155 / / DOCUMENT IS NOW OPEN FOR SCROLLING USING STANDARD METHODS /D155 / / (ADVPTR,BAKPTR,ETC.). /D155 / / PCTLFL IS SET UP TO INDICATE WHETHER OR NOT CURSOR IS /D155 / / IN A CONTROL BLOCK. /D155 / / AC= 0. /D155 / / DF= CDFBUF /D155 / /D155 / /D155 RRRAND, XX /D155 / /D155 / OPEN DOCUMENT AT DESIRED BLOCK /D155 / /D155 JMS RRRAOP /D155 / /D155 / READ GOTO-PAGE DESCRIPTOR WORD OF "DESIRED BLOCK" /D155 / /D155 AC7777 / SUBFUNCTION TO READ "NEXT" DESC WORD /D155 JMS DSKCAL /D155 XRPRD /D155 / /D155 / SET PCTLFL FROM GOTO-PAGE DESCRIPTOR WORD /D155 / /D155 AND (RPMTHB) / TEST "WITHIN CONTROL BLOCK" BIT /D155 SZA CLA / SKIP IF NOT IN CONTROL BLOCK /D155 AC7777 / INDICATE IN CONTROL BLOCK /D155 DCA PCTLFL /D155 / /D155 / RE-OPEN DOCUMENT AT "DESIRED BLOCK", /D155 / SINCE "READ DESC WORD" ABOVE INCREMENTED BLOCK POINTERS /D155 / /D155 JMS RRRAOP /D155 JMP I RRRAND / EXIT /D155 /D155 / /D155 / SUBR RRRAOP -- OPEN DOCUMENT AT "DESIRED BLOCK" /D155 / /D155 RRRAOP, XX /D155 CDFMYF /D155 TAD RPCUBK / HEADER BLOCK ID # /D155 MQL /D155 AC7776 / ADJUST OFFSET TO 0..375 /D155 TAD RPCUOF / OFFSET INTO HEADER FOR DESIRED BLOCK /D155 JMS DSKCAL / OPEN DOCUMENT AT THIS BLOCK /D155 XRPRD / (SPECIAL GOTO-PAGE FUNCTION) /D155 JMP I RRRAOP / EXIT / START OF "/A155" BLOCK ... /A155 / / SUBR RROPR -- RANDOM-ACCESS OPEN FILE FOR SCROLLING / AT RELATIVE BLOCK RPCUOF,RPCUBK / CLEARS TEXT BUFFER AND PTRBLK. / FIRST FILE SCROLLING OPERATION MAY BE ADVPTR OR BAKPTR. / RROPR IS USED BY GOTO-PAGE AND GOLD:BOTTOM. / / CALL: / / RPCUOF= OFFSET INTO DOCUMENT HEADER BLOCK FOR DESIRED BLOCK / / RPCUBK= HEADER BLOCK ID # FOR DESIRED BLOCK / CDFMYF / CLA / JMS RROPR / RANDOM-ACCESS OPEN AT RELATIVE BLOCK / / AC= 0 / / DF= CDFMYF / RROPR, XX TAD RPCUBK / HEADER BLOCK ID # MQL AC7776 / ADJUST OFFSET TO 0..375 TAD RPCUOF / OFFSET INTO HEADER FOR DESIRED BLOCK JMS RROPN / OPEN DOCMT AT RELATIVE BLOCK JMP I RROPR / / SUBR RROPP -- RANDOM-ACCESS OPEN FILE FOR SCROLLING / AT PHYSICAL BLOCK RPCUBK / ASSUMES FILE IS OPEN AND SCTOP,SCTPH POINT TO FIRST DOCMT BLOCK-1. /A157 / CLEARS TEXT BUFFER AND PTRBLK. / FIRST FILE SCROLLING OPERATION MAY BE ADVPTR OR BKPPTR. / RROPR IS USED BY GOTO-RULER. / / CALL: / / RPCUBK= PHYSICAL BLOCK # OF DESIRED BLOCK / CDFMYF / CLA / JMS RROPP / RANDOM-ACCESS OPEN AT PHYSICAL BLOCK / / AC= 0 / / DF= CDFMYF / RROPP, XX / /A157 / TRANSLATE PHYSICAL BLOCK # (RPCUBK) /A157 / TO RELATIVE BLOCK # (HDR BLOCK OFFSET, HDR BLK ID #) /A157 / /A157 RROPPL, / GET GTP DESC WORD FOR NEXT DOCMT BLK /A157 AC7777 / FUNCTION=INC SCTOP,SCTPH & READ DESC /A157 JMS DSKCAL /A157 XRPRD /A157 CMA / HIT ETX? /A157 SNA CLA /A157 HLT / YES-COULDN'T FIND PHYS BLK # IN DOCMT /A157 / GET CURRENT SCTOP (WPFILS MAKES THIS AWKWARD) /A157 TAD (CURID-1) / RETURN SCTOP,SCTPH AT CURID,CURID+1 /A157 MQL / (USES CURID AS A TEMP) /A157 AC7775 / FUNCTION=RETURN SAVED & CURRENT /A157 JMS DSKCAL / SCTOP,SCTPH IN AC,MQ & @(ORIG MQ) /A157 XRPRD /A157 CLA / FORGET SAVED SCTOP IF ANY /A157 CDFLP /A157 TAD I (CURID+1) / GET SCTOP (FINALLY!) /A157 / GET PHYSICAL BLOCK # CORRESPONDING TO SCTOP /A157 TAD (HDRBUF+2) / CONVERT SCTOP TO PTR INTO DOCMT HDR BLK/A157 DCA T1 / SAVE PTR TO PHYS BLK # /A157 CDFBUF / FIELD OF DOCMT HDR BLOCK BUFFER /A157 TAD I T1 / GET PHYSICAL BLOCK # /A157 / LOOP IF NOT AT DESIRED PHYSICAL BLOCK # /A157 CIA / COMPARE CURRENT PHYSICAL BLK # TO ... /A157 CDFMYF /A157 TAD RPCUBK / ... DESIRED PHYSICAL BLOCK # /A157 SZA CLA /A157 JMP RROPPL / NO MATCH: KEEP LOOKING /A157 / FOUND PHYSICAL BLOCK! /A157 / PUT RELATIVE BLOCK # IN AC,MQ FOR OPEN /A157 CDFLP / FIELD OF CURID, WHERE CURRENT SCTOP, /A157 / SCTPH WERE STORED BY WPFILS CALL ABOVE/A157 TAD I (CURID) / GET CURRENT SCTPH /A157 MQL / MQ=DOCMT HDR BLOCK ID (0..17?) /A157 TAD I (CURID+1) / GET CURRENT SCTOP=OFFSET INTO HDR BLK /A157 / RANDOM-ACCESS OPEN AT DESIRED PHYSICAL BLOCK (USING REL BLK) /A157 JMS RROPN /A157 / WPFILS HAS A BUG SUCH THAT IF BKPPTR IS FIRST FILE SCROLLING / OPERATION AFTER A RANDOM-ACCESS OPEN, THE FILE MODE (LOWER CASE, / UNDERLINE, ETC) CAN BE LOST. THIS PROBLEM IS AVOIDED / BECAUSE RROPN ALWAYS DOES AN ADVPTR FIRST. JMP I RROPP / EXIT / / SUBR RROPN -- RANDOM-ACCESS OPEN FILE FOR SCROLLING / AT BLOCK IN AC (OFFSET), MQ (HEADER ID #) / RROPN, XX / / OPEN DOCUMENT AT DESIRED BLOCK / JMS DSKCAL XRPRD / / NOTE: SCBOT,SCBTH POINT TO DESIRED BLOCK; / SCTOP,SCTPH POINT TO DESIRED BLOCK - 1. / READ GOTO-PAGE DESCRIPTOR WORD OF "DESIRED BLOCK" / AC7777 / (FUNCTION=READ "NEXT" DESC WORD) JMS DSKCAL / INC SCTOP,SCTPH TO "DESIRED BLOCK" XRPRD AC7777 / FORGET DESC WORD(WE'LL GET IT AGAIN) MQL / DEC SCTOP,SCTPH TO ORIGINAL BLOCK TAD (-6) / BUT FIRST READ GTP DESC WORD JMS DSKCAL / FOR "DESIRED BLOCK" INTO AC AGAIN XRPRD / / SET PCTLFL FROM GOTO-PAGE DESCRIPTOR WORD / AND (RPMTHB) / TEST "WITHIN CONTROL BLOCK" BIT SZA CLA / SKIP IF NOT IN CONTROL BLOCK AC7777 / INDICATE IN CONTROL BLOCK DCA PCTLFL / /A157 / ADVANCE TO START OF LINE. /A157 / (CURMOV IS CLEANER IF IT STARTS AT THE START OF A LINE. /A157 / THIS AVOIDS A COUPLE OF RATHER UNLIKELY BUGS.) /A157 / /A157 JMS RPOVIN / CLEAR EDIT BUFFER /A157 RROPLN, ADVPTR / GET NEXT CHAR FROM START OF "DESIRED BLOCK"/A157 JMP RROPX / AT ETX /A157 AND P177 / IGNORE ATTRIBUTE BITS /A157 ZZCASE / AT START OF NEW LINE? /A157 RROPTB-1 /A157 / ECSTRL; RROPX / YES /A157 / ECNWPG; RROPX / YES /A157 / ECNWLN; RROPL2 / ALMOST (NEXT CHAR IS START OF LINE) /A157 JMP RROPLN / NO: ADVANCE UNTIL START OF LINE /A157 /A157 RROPL2, ADVPTR / SKIP OVER LINE END /A157 NOP / REACHED ETX /A157 CLA / THROW OUT LINE ENDING CHAR /A157 RROPX, JMS RRPBIN / CLEAR PTRBLK & INIT LAST ENTRY /A157 JMP I RROPN / EXIT /A157 /A157 / ZZCASE JUMP TABLE /A157 RROPTB, ECSTRL; RROPX / START OF RULER /A157 ECNWPG; RROPX / NEW PAGE /A157 ECNWLN; RROPL2 / NEW LINE /A157 0 / END OF "/A155" BLOCK ... /A155 / / SUBR RPOVIN -- INITIALIZE EDIT BUFFER /M157 / / ASSUMES EDIT BUFFER STARTS AT LOC 0000 AND IS 6000(8) WORDS LONG; /M155 / THUS WILL NOT WORK WITH LIST PROCESSING. / ADDITIONAL ASSUMPTIONS COULD BE MADE WHICH WOULD / SHORTEN THE CODE EVEN MORE. / RPOVIN, XX CDFBUF / GET TO BUFFER FIELD AC7777 / POINTER TO START DCA X0 / X0 => EDIT BUFFER POINTER /D155 TAD (ECBFBG) / 7777 IFNZRO ECBFBG-7777 < ? > / PREFIX FILE CHANGED /A155 AC7777 / AC := ECBFBG /A155 DCA I X0 / 1ST LOC. /D155 TAD (ECSTX) / 7775 IFNZRO ECSTX-7775 < ? > / PREFIX FILE CHANGED /A155 AC7775 / AC := ECSTX /A155 DCA I X0 / 2ND LOC. /D155 TAD (ECETX) / 7775 IFNZRO ECETX-7775 < ? > / PREFIX FILE CHANGED /A155 AC7775 / AC := ECETX /A155 DCA I X0 / 3RD LOC. /D155 TAD BUFSIZ / SIZE OF EDIT BUFFER /D155 CIA / - # OF WORDS IN EDIT BUFFER /D155 TAD (4) / ALREADY USED THESE MANY TAD (-6000+4) / -(LENGTH OF EDIT BUFFER - 4) /A155 / (WILL FAIL DURING LIST PROCESSING) /A155 DCA X1 / X1 => # OF LOC. TO CLEAR TAD X0 / 2ND LOC. DCA CURPTR / CURPTR => PTR. AT ETX DCA I X0 / CLEAR A LOC. ISZ X1 / SKIP IF EDIT BUFFER CLEARED JMP .-2 / LOOP UNTIL CLEARED /D155 TAD (ECBFND) / 7776 IFNZRO ECBFND-7776 < ? > / PREFIX FILE CHANGED /A155 AC7776 / AC := ECBFND /A155 DCA I X0 / LAST BUFFER LOC. /D157 JMS RRPBIN / INITIALIZE PTRBLK /D157 TAD CURPTR / POINTS AT ETX /D157 DCA LINE23 / INIT. SCREEN LINE /D157 DCA CURSOR / INIT. JMP I RPOVIN / RETURN TO CALLER / called by OVRBTM which was called by BOTEM to do old GOLD_BOTTOM /A154 / don't need this anymore... /A154 /D154 BOTRUL, JMS RRPBIN / INITIALIZE PTRBLK /D154 AC0001 / finish loading the ruler /D154 CURMOV /D154 NOP / etx will never occur /D154 EIBOTA, OVLJMP;OVBOTA / GO TO NEXT OVERLAY TO FINISH UP / / SUBR RRPBIN - PTRBLK INITIALIZATION / / CLEARS PTRBLK & INITIALIZES LAST ENTRY; / INITIALIZES LINE23 & CURSOR. /A157 / ASSUMES CURPTR IS AT THE START OF A LINE. / RRPBIN, XX CDFMYF / FROM BUFFER FIELD TAD (PTRBLK-1) / START OF SCROLL POINTERS DCA X0 TAD (-NPTRS+1) / # OF POINTERS DCA X1 DCA I X0 / CLEAR A POINTER ISZ X1 / SKIP IF ALL POINTERS CLEARED JMP .-2 / LOOP UNTIL ALL CLEARED TAD CURPTR / GET PTR TO (ASSUMED) START OF LINE /M157 DCA I X0 / INIT. 1ST SCROLL POINTER TAD CURPTR / POINTS AT ETX /A157 DCA LINE23 / INIT. SCREEN LINE /A157 DCA CURSOR / INIT. /A157 JMP I RRPBIN /D157 / here to close a very small GOLD_BOTTOM window, that being the presence /D157 / of a document that contains 4095 page markers between the logical_EOF /D157 / ( -1 desc. word) and physical_EOF /D157 /D157 RPGBOT, TAD RPBOTF / get the GOLD_BOTTOM flag /A154 /D157 SMA CLA / skip if doing a GOLD_BOTTOM /A154 /D157 JMP RRPS / jump to conclude GTP /A154 /D157 AC0001 / initial for furthur scrolling /A154 /D157 DCA CURPG1 / won't come here for every page /A154 /D157 JMP RPADVUNT / scroll_until_EOF /A154 X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------------- PAGE /*************************************************************************** /**** START OF OVERLAY **** /*************************************************************************** OVRNUM=OVRNUM+200 OVRBLK=OVRNUM%200+DLOEDO-1 / DISK BLOCK WHERE OVERLAY IS LOADED RELOC RELOC OVLAY1 OVRNUM / / DISPLAY THE GOTO-PAGE SCREEN / ("REPOSITIONING TO YOUR DESIRED PAGE...") / OVPAGE= .-OVLAY1+OVRNUM / --OVERLAY ENTRY POINT-- JMS CLR132 / CLEAR 132 MODE ON GOLD BOTTOM CIFMNU / CHANGE TO MENU INSTRUCTION FIELD AC0003 / SET UP FOR CLEAR SCREEN REQUEST JMS I (CALLN1) / GO TO STATUS LINE ROUTINE FOR CLEAR CIFMNU / ...GOING TO 'IOA' FOR SCREEN DISPLAYS JMS I IOACAL 0 / NO SPECIAL OUTPUT ROUTINE M2PAGE / ADDR OF MESSAGE 1125 / ^P (SCREEN POSITION) M2PAG / ^S (STRING ARG="PAGE") 1437 / ^P 2700 / ^P JMP XVGOPG / / DISPLAY THE GOTO-RULER SCREEN / ("REPOSITIONING TO YOUR DESIRED RULER...") / OVRRDS= .-OVLAY1+OVRNUM / / SET UP SOME FLAGS TO DO GOTO-RULER / SEE LARGE COMMENT BLOCK SHORTLY AFTER 'RRFND1' FOR DETAILS / AC4000 / INHIBITS CLEARING OF SCREEN DCA RPBIN1 / WE ARE ABOUT TO CREATE / / DISPLAY "REPOSITIONING TO DESIRED RULER..." SCREEN / JMS CLR132 / CLEAR 132 MODE ON GOLD BOTTOM CIFMNU / CHANGE TO MENU INSTRUCTION FIELD AC0003 / SET UP FOR CLEAR SCREEN REQUEST JMS I (CALLN1) / GO TO STATUS LINE ROUTINE FOR CLEAR CIFMNU / ...GOING TO 'IOA' FOR SCREEN DISPLAYS JMS I IOACAL 0 / NO SPECIAL OUTPUT ROUTINE M2PAGE / ADDR OF MESSAGE 1125 / ^P (SCREEN POSITION) M2RUL / ^S (STRING ARG="RULER") 1437 / ^P 2700 / ^P / / GO TO COMMON CODE / JMP RPTOP / GO CLOSE DOCUMENT, OPEN AT TOP, ETC, / GOLD_BOTTOM now paints the screen and exits in the same way as /A154 / GTP does... /A154 / / FINISH GO-TO-PAGE, GOLD:BOTTOM AND GO-TO-RULER FOR STATUS LINE / OVBOTB= .-OVLAY1+OVRNUM / --OVERLAY ENTRY POINT-- /D157 CLA /A154 /D157 DCA RPBOTF / clear doing GOLD_BOTTOM flag /A154 CDFLP / NOW TO FIELD 5 TO /A157 DCA RPACTIVE / CLEAR GTP 'ACTIVE' FLAG /A157 AC7777 / SET FLAG TO RETURN THE VALUES CDILP / SET TO FIELD FIVE FOR ROUTINE JMS RPPMENU / CALCULATE CURRENT PAGE VALUE TAD CURPG2 / PICK UP THOUSANDS COUNT OF PAGES JMS MNUPUT / STORE VALUE IN HIGH ORDER PAGE COUNT LINPGH-MUBUF / STATUS LINE HIGH ORDER PAGE NUMBER TAD CURPG1 / PICK UP HUNDREDS COUNT OF PAGES JMS MNUPUT / STORE VALUE IN LOW ORDER PAGE COUNT LINPGL-MUBUF / STATUS LINE LOW ORDER PAGE NUMBER JMP EIFIX / GO PUT UP THE SCREEN CONTENTS / / "GOLD:BOTTOM" COMMAND / OVRBOT= .-OVLAY1+OVRNUM / --OVERLAY ENTRY POINT-- / DISPLAY THE GOLD BOTTOM SCREEN /D158 AC0001 / SET UP TO SHUT DOWN THE "MA" SWTCH /D158 JMS SWTHMA / DEACTIVATE MATH & SAVE ORIGINAL "MA". AC4000 DCA RPBIN1 AC0100 DCA RPBIN2 /D157 AC7777 /D157 DCA RPBOTF / [-1] MEANS GOLD BOTTOM REQUEST DCA RPPG0 / 0 = NOT AT ---TOP-- FLAG JMS CLR132 / CLEAR 132 MODE ON GOLD BOTTOM CIFMNU / CHANGE TO MENU INSTRUCTION FIELD AC0003 / SET UP FOR CLEAR SCREEN REQUEST JMS I (CALLN1) / GO TO STATUS LINE ROUTINE FOR CLEAR CIFMNU / ...GOING TO 'IOA' FOR SCREEN DISPLAYS JMS I IOACAL 0 / NO SPECIAL OUTPUT ROUTINE M2BOT / ADDR OF MESSAGE 1125 / ^P 1437 / ^P 2700 / ^P AC7777 / NEG RPBOTF MEANS DO GOLD:BOTTOM /A157 XVGOPG, DCA RPBOTF / POS RPBOTF MEANS DO GOTO-PAGE /A157 / initialize common GOLD:BOTTOM and GOTO-PAGE pointers DCA RRDIR / INDICATE THIS IS NOT GOTO-RULER /M157 TAD (55) DCA RPCUOF / POINTS AT 1ST DESCRIPTOR WORD TAD (55) DCA RPMTRL / DEFAULT RULER-BLOCK OFFSET DCA RPMTBK / NO MATH BLOCK AC0001 DCA RPCUBK / START WITH 1ST RPPGDS BLOCK AC0001 DCA RPRLHN / DEFAULT RULER IN 1ST RPPGDS BLOCK / DOING A GTP or GOLD_BOTTOM REQUEST, IGNORE GOLD-HALT WHILE / PREPARING THE SCREEN AND LOADING A RULER / NOTE: I DON'T THINK THIS IS NEEDED--MY BET IS THAT ALL /A157 / REFERENCES TO 'RPACTIVE' COULD BE DELETED! /A157 CDFLP / FIELD 5 FOR OUR FLAG AC7777 / WAS 0; SET TO 'ACTIVE' DCA RPACTIVE / SO GOLD-HALT GETS IGNORED BY HLTTST CDFMYF / BACK TO THIS FIELD JMP RPTOP / 'TOP' THE DOC THEN TO OVERLAY OVRRP2 X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------------- PAGE TRANTP=. / TOP OF TRANSLATION PAGE /A240 M2BOT, IFDEF ENGLSH < TEXT '^P&REPOSITIONING TO BOTTOM OF DOCUMENT. ' / 1133 *.-1 TEXT '^P&PLEASE STAND BY.^P' / 1450 / 2700 > IFDEF V30NOR < TEXT '^P&MARK\XREN FLYTTES TIL BUNNEN AV DOKUMENTET. ' / 1133 *.-1 TEXT '^P&VENT.^P' / 1450 / 2700 > IFDEF V30SWE < TEXT '^P&FLYTTAR TILLBAKA TILL SLUTET AV DOKUMENTET. ' / 1133 *.-1 TEXT '^P&V\DNTA.^P' / 1450 / 2700 > IFDEF SPANISH < /A236 TEXT '^P&REAJUSTE DE PARTE INFERIOR DEL DOCUMENTO. ' / 1133 *.-1 TEXT '^P&ESPERE.^P' / 1450 / 2700 > /A236 IFDEF ITALIAN < TEXT '^P&REPOSIZIONAMENTO ALLA FINE DEL DOCUMENTO.^P&ATTENDERE.^P' > IFDEF DUTCH < TEXT '^P&OP WEG NAAR HET EINDE VAN HET DOCUMENT.' *.-1 TEXT '^P&EVEN GEDULD...^P' > M2PAGE, IFDEF ENGLSH < TEXT '^P&REPOSITIONING TO YOUR DESIRED ^S. ' / 1133 *.-1 TEXT '^P&PLEASE STAND BY.^P' / 1450 / 2700 > IFDEF V30NOR < TEXT '^P&MARK\XREN FLYTTES TIL ANGITT ^S. ' / 1133 *.-1 TEXT '^P&VENT^P' / 1450 / 2700 > IFDEF V30SWE < TEXT '^P&FLYTTAR TILLBAKA TILL \VNSKAD ^S. ' / 1133 *.-1 TEXT '^P&V\DNTA^P' / 1450 / 2700 > IFDEF SPANISH < /A236 TEXT '^P&REAJUSTE COMO DESEE ^S. ' / 1133 *.-1 TEXT '^P&ESPERE.^P' / 1450 / 2700 > /A236 IFDEF ITALIAN < TEXT '^PRIPOSIZIONAMENTO SUL^S.^P&ATTENDERE.^P' > IFDEF DUTCH < TEXT '^P&OP WEG NAAR DE GEWENSTE ^S.' *.-1 TEXT '^P&EVEN GEDULD...' > M2PAG, IFDEF ENGLSH < TEXT 'PAGE' > IFDEF V30NOR < TEXT 'SIDE' > IFDEF V30SWE < TEXT 'SIDA' > IFDEF SPANISH < TEXT 'P\AGINA' > /A236 IFDEF ITALIAN < TEXT 'LA PAGINA VOLUTA' > IFDEF DUTCH < TEXT 'PAGINA' > M2RUL, IFDEF ENGLSH < TEXT 'RULER' > IFDEF V30NOR < TEXT 'FORMATERINGSLINJE' > IFDEF V30SWE < TEXT 'LINJAL' > IFDEF SPANISH < TEXT 'REGLA' > /A236 IFDEF ITALIAN < TEXT ' DESCRITTORE RIGA VOLUTO' > IFDEF DUTCH < TEXT 'REGELINDELING' > X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------------- PAGE IFNZRO . /A240 /*************************************************************************** /**** START OF OVERLAY **** /*************************************************************************** OVRNUM=OVRNUM+200 OVRBLK=OVRNUM%200+DLOEDO-1 / DISK BLOCK WHERE OVERLAY IS LOADED RELOC RELOC OVLAY1 OVRNUM RPPER7= .-OVLAY1+OVRNUM / --OVERLAY ENTRY POINT-- / JMP XPPER7 /D192 CDFEDT JMS CLR132 / 80 column mode for error display /A192 CIFMNU / CHANGE TO MENU INSTRUCTION FIELD AC0003 / SET UP FOR CLEAR SCREEN REQUEST JMS I (CALLN1) / GO TO STATUS LINE ROUTINE FOR CLEAR CIFMNU / ...GOING TO 'IOA' FOR SCREEN DISPLAYS JMS I IOACAL 0 MER7 0031 / ^P 0431 / ^P 1317 / ^P 1417 / ^P OVLJMP; RPER7B / 2ND HALF OF GOTO PAGE ERROR #7 / ========================================================================= / +++ CHANGES FOR EDIT HISTORY #176 FOR GOLD:TAB +++ / ========================================================================= / / Double Entry Point routine to process either / Gold:tab or Gold:ruler. / / OVRULR= .-OVLAY1+OVRNUM / Gold:Ruler /c176 VECFLG, DCA VECFLG / VECFLG="0" /a176 OVGLTB= .-OVLAY1+OVRNUM / Gold:Tab /a176 / VECFLG="DCA VECFLG" (Non-Zero) /a176 / PREPARE TO MODIFY RULER BY CONCATENATING ADJACENT RULERS, IF ANY. JMS RLCKNR / CHECK FOR NEW RULER JMP RLCONA / NO NEW RULER / THERE IS A NEW RULER. / CHECK FOR ADJACENT RULER. BKPPTR / BACKUP TO ECNDRL OF ADJ RULER, IF ANY JMP RLCONB / NO ADJACENT RULER TAD (-ECNDRL) / IS THERE AN ADJACENT RULER? SNA CLA JMP RLCONC / YES: CONCATENATE ADJACENT RULERS / THERE IS A NEW RULER, BUT NO ADJACENT RULER(S), SO / THERE IS NO INITIAL RULER CONCATENATION, AND / CURPTR IS RESTORED TO VALUE ON ENTRY TO OVRULR. RLCONB, TAD RLCURP DCA CURPTR JMP RLCONA / / +++ RLCONA was moved to the next page for space /m176 / / THERE ARE ADJACENT RULERS. / TO SIMPLIFY THE "DELETE RULER" FUNCTION WHICH MAY / BE INVOKED LATER, WE WILL NOW CONCATENATE THESE / ADJACENT RULERS (WHICH MAY BE DELETED IN THE PROCESS). / / WE WILL CONCATENATE ADJACENT RULERS BY MOVING THE CURSOR / BACK THEN FORWARD OVER THEM. WHEN WE DO THIS, / WE WILL FORGET THE CURRENT CURSOR LOCATION WITHIN / THE LINE, SINCE THERE IS A TINY CHANCE THAT THERE / ARE 50 OR MORE ADJACENT RULERS, AND THAT MOVING / OVER THEM WILL CAUSE DATA TO BE SCROLLED IN FROM / DISK OVER THE PLACE IN THE EDIT BUFFER CORRESPSN$. / / WE WILL CONCATRSOR LOCATION! / PARANOID, ISN'T IT? / / AT ANY RATE, THE CURSOR WILL BE LEFT AT THE / BEGINNING OF THE LINE. RLCONC, TAD LINE23 / MOVE TO BEGINNING OF THE LINE DCA CURPTR DCA CURSOR AC7777 / BACK UP CURSOR OVER ALL ADJACENT RULERS CURMOV SKP CLA / AT STX: GLIDE OVER RULER(S) TO 1ST TEXT CHAR AC0001 / ADVANCE CURSOR OVER ALL ADJACENT RULERS, CURMOV / AND CONCATENATE OR DELETE THEM. JMP RLCONA JMP RLCONA / / DELETE RULER COMMAND / OVRLDL= .-OVLAY1+OVRNUM / IF CURPTR IS AT A RULER, THEN / IF CURPTR IS AT THE FIRST RULER IN THE DOCUMENT, THEN / BEEP TO WARN THE USER; / ELSE (* NOT FIRST RULER *) / SET NWRUL := BACKWARD POINTING HALF OF RULER; / (*WHEN THIS RULER IS INSERTED AFTER THE EXISTING RULER, / THE RULER CLEAN-UP CODE WILL DELETE BOTH RULERS. / NOTE THAT IF THERE IS A NEW RULER, IT CANNOT HAVE AN / ADJACENT RULER, SINCE WE CAREFULLY CONCATENATED ANY / SUCH RULERS WHEN WE STARTED (AT OVRULR). / *) / RESTORE CURPTR TO VALUE AT TIME OF ENTRY TO OVRLDL; / ELSE (* NO NEW RULER *) / (* SAME AS "=" COMMAND *) / SET NWRUL := CURUL; / GOTO DISPLAY NWRUL AND ACCEPT RULER EDITING COMMAND JMS RLCKNR / CHECK FOR EXISTING RULER JMP RLOJER / NONE: SAME AS "=" BKPPTR / AT STX? JMP RLDLER / YES: AT FIRST RULER, CAN'T DELETE IT ADVPTR / NO: RESTORE CURPTR NOP / (AT ETX--THAT'S OK) CLA / FORGET ECSTRL IN AC FROM ADVPTR JMS SETRUL / SET NWRUL FROM BACKWARDS POINTING / HALF OF EXISTING RULER ESADRL / (GET RULER CHAR ROUTINE) RLDL2, TAD RLCURP / RESTORE CURPTR DCA CURPTR OVLJMP / GO DISPLAY RULER AND WAIT FOR CMD OVDRUL / THERE IS NO NEW RULER IN TEXT TO DELETE, SO / JUST AVOID INSERTING A NEW ONE. RLOJER, OVLJMP / PERFORM "=" COMMAND OVERUL / ERROR: ATTEMPT TO DELETE FIRST RULER IN DOCUMENT RLDLER, JMS BEEPER / CHASTISE USER SEVERELY JMP RLDL2 / EXIT, LEAVING THINGS AS THEY WERE / / SUBR RLCKNR -- CHECK FOR NEW RULER JUST BEFORE CURRENT LINE / / CALL: / CLA / JMS RLCKNR / CHECK FOR NEW RULER / / / JMP NORULR / NONE THERE. / / 'CURPTR' AND 'CURSOR' ARE UNCHANGED. / / / JMP RULR / FOUND NEW RULER. / / 'CURPTR' POINTS TO START OF RULER / / (ANOTHER RULER MAY IMMEDIATELY / / PRECEED 'CURPTR'). / / 'CURSOR' IS UNCHANGED. / / 'RLCURP' = VALUE OF 'CURPTR' ON / / ENTRY TO RLCKNW. / / ON ALL EXITS, AC=0, DF=CDFBUF / RLCKNR, XX / CHECK FOR NEW RULER TAD CURPTR / SAVE 'CURPTR' (STILL SAME VALUE AS BEFORE DCA RLCURP / USER HIT GOLD:RULER). / THIS IS NEEDED SO THAT IF RULER IS NOT / MODIFIED, CURSOR CAN BE RESTORED TO / WHERE IT WAS BEFORE GOLD:RULER CMD. TAD LINE23 / MOVE TO START OF LINE DCA CURPTR BKPPTR / MOVE TO END OF RULER, IF ANY JMP RLCKNB / (HIT TOP, NO RULER) TAD (-ECNDRL) / IS A RULER THERE? SNA CLA JMP RLCKNA / YES RLCKNB, TAD RLCURP / NO: RESTORE CURPTR DCA CURPTR JMP I RLCKNR / TAKE "NO NEW RULER" RETURN / THERE IS A NEW RULER. / BACKUP TO START OF NEW RULER. RLCKNA, BKPPTR HLT / BUG (BROKEN RULER--MISSING ECSTRL) TAD (-ECSTRL) / AT START OF RULER? SZA CLA JMP RLCKNA / NO: BACKUP UNTIL WE ARE / CURPTR IS AT START OF NEW RULER. (IGNORE POSSIBILITY / THAT ANOTHER NEW RULER MAY IMMEDIATELY PRECEED CURRENT / NEW RULER.) ISZ RLCKNR / TAKE "FOUND NEW RULER" RETURN JMP I RLCKNR RLCURP, 0 / VARIABLE: SAVE CURPTR / /M155 / CONTINUATION OF CODE TO GET TO ---TOP--- /M155 / /M155 OVRPTP= .-OVLAY1+OVRNUM /M155 JMS CLSSET / INITIALIZE SCROLL VALUES FOR STATUS /M155 /M155 AC0001 /M155 MQL / MAIN HEADER BLOCK /M155 TAD (53) /M155 JMS DSKCAL / INITIALIZE SCTOP & SCBOT TO /M155 XRPRD / BE 52 & 53 RESPECTIVELY /M155 /M155 / INITIALIZE BUFFER AND SCREEN /M155 /M155 /D155 JMS RPOVIN / CLEAR EDIT BUFFER AND PTRBLK /M155 JMS SWTHMA / TAKE CARE OF MATH-FLAG SETTINGS /M155 /M155 CDFSYS / GET TO FIELD 0 TO /M155 DCA I HLTFLG / CLEAR A POSSIBLE GOLD-HALT FLAG /M155 CDFLP / NOW TO FIELD 5 TO /M155 DCA RPACTIVE / CLEAR GTP 'ACTIVE' FLAG /M155 CDFMYF / BACK TO THIS FIELD /M155 /M155 JMS LODCHR / GET FIRST CHAR (RULER) /M155 NOP /M155 /M155 AC0001 / SET UP FOR PAGE NUMBER ONE /M155 JMS MNUPUT / STORE LOW ORDER PAGE NUMBER /M155 LINPGL-MUBUF / STATUS LINE LOW ORDER PAGE NUMBER /M155 /M155 JMS MNUPUT / CLEAR HIGH ORDER PAGE NUMBER /M155 LINPGH-MUBUF / STATUS LINE HIGH ORDER PAGE NUMBER /M155 /M155 AC0001 / SET UP TO INDICATE FIRST LINE OF FILE /M155 JMS MNUPUT / STORE NEW LINE NUMBER /M155 LINNUM-MUBUF / LOCATION OF LINE NUMBER IN MENU FIELD /M155 /M155 AC0001 / SET UP TO INDICATE STATUS HAS CHANGED /M155 JMS MNUPUT / STORE VALUE IN STATUS CHANGE FLAG /M155 LINDIF-MUBUF / STATUS CHANGE FLAG IN MENU FIELD /M155 JMP EIFIX / FIX UP SCREEN AND GET NEXT CHARACTER /M155 X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------------- PAGE / ========================================================================= / +++ MOVED HERE PER EDIT #176 +++ / ========================================================================= / / PREPARE TO EDIT RULER. RLCONA, CDFMYF TAD SPLTFL / KEEP A COPY OF SPLTFL DCA WIDPRV JMS RLEQTE / EQUATE THIS RULER TO OLD ONE JMS FXSCRL / GET SCREEN UP TO DATE TAD CURSOR / GET CURRENT CURSOR POSN. DCA CURSAV / SAVE. / TAD VECFLG / SAVE VECFLG FOR OTHER ROUTINES /a176 JMS MNUPUT / (PUT IT IN THE MENU FIELD) /a176 MNTMP1 /a176 TAD VECFLG / HOW DID WE GET HERE /a176 SZA CLA /a176 JMP RLCOND / GOLD:TAB /a176 / OVLJMP / GOLD:RULER OVXRL1 / RLCOND, OVLJMP /a176 OVINTB /a176 MER7, (0) / GIVES PE ERROR IF XLATIONS O/F /A236 IFDEF ENGLSH < TEXT '^P-- !&GO-!&TO-!&PAGE !&ERROR -- ' / 0031 *.-1 TEXT '^P&YOUR PAGE WAS NOT FOUND. ' / 0431 *.-1 TEXT '^P&YOU MAY USE A !&GO-!&TO-!&PAGE REQUEST, BUT ONLY ' / 1317 *.-1 TEXT '^PENTER A PAGE NUMBER WITHIN THE RANGE OF PAGES ' / 1417 > IFDEF V30NOR < TEXT '^P-- &FEIL I !&G\E-!&TIL-!&SIDE -- ' / 0031 *.-1 TEXT '^P&FANT IKKE ANGITT SIDE. ' / 0431 *.-1 TEXT '^P&N\ER DU BRUKER FUNKSJONEN !&G\E-!&TIL-!&SIDE, M\E DU ' / 1317 *.-1 TEXT '^PANGI ET SIDETALL SOM FINNES I DETTE ' / 1417 > IFDEF V30SWE < TEXT '^P-- "!&G\E-!&TILL-!&SIDA"-FEL -- ' / 0031 *.-1 TEXT '^P&DEN SIDAN KUNDE INTE HITTAS ' / 0431 *.-1 TEXT '^P&DU KAN S\VKA EN SIDA MED HJ\DLP AV "!&G\E-!&TILL-!&SIDA", MEN ENDAST ' *.-1 TEXT '^POM DU SKRIVER ETT SIDNUMMER SOM INTE \VVERSKRIDER DET ANTAL SIDOR ' / 1417 > IFDEF SPANISH < /A236 TEXT '^P-- !&IR-!&A-!&ERROR !&PAGINA -- ' / 0031 *.-1 TEXT '^P&IMPOSIBLE ENCONTRAR SU P\AGINA. ' / 0431 *.-1 TEXT '^P&PUEDE USAR EL PEDIDO DE !&IR-&A-!&PAGINA, PERO S\SLO '/ 1317 *.-1 TEXT '^PTECLEE UN N\ZMERO DE P\AGINA DENTRO DEL MARGEN DE P\AGINAS ' / 1417 > /A236 IFDEF DUTCH < /A236 TEXT '^P-- !&FOUT !&BIJ !&ZOEKEN !&PAGINA -- ' / 0031 *.-1 TEXT '^P&PAGINA NIET GEVONDEN ' / 0431 *.-1 TEXT '^P&GEBRUIK ALLEEN PAGINA-NUMMERS BINNEN DE GRENZEN '/ 1317 *.-1 TEXT '^PVAN HET DOCUMENT. ' / 1417 > /A236 IFDEF ITALIAN < TEXT '^P-- !&ERRORE !&DI !&RICERCH !&PAGINA -- ' *.-1 TEXT '^P&LA PAGINA RICHIESTA NON \H STATA TROVATA. ' *.-1 TEXT '^P&\H POSSIBILE EFFETTUARE UN !&CERCA !&PAGINA SOLO ' *.-1 TEXT '^PINTRODUCENDO UN NUMERO DI PAGINA MINORE O UGUALE AL ' > X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------------- PAGE /*************************************************************************** /**** START OF OVERLAY **** /*************************************************************************** OVRNUM=OVRNUM+200 OVRBLK=OVRNUM%200+DLOEDO-1 / DISK BLOCK WHERE OVERLAY IS LOADED RELOC RELOC OVLAY1 OVRNUM RPER7B= .-OVLAY1+OVRNUM / --OVERLAY ENTRY POINT-- / JMP XPER7B RPCHKREPLY, / RETURN-KEY only valid terminator FOR INPUT /M154 CIFMNU / CHANGE TO MENU FIELD JMS I IOACAL 0 MER7B 1517 / ^P 1717 / ^P 2017 / ^P 2700 / ^P /D154 JMS CLREOL / done, when needed, by BEEPER CIFMNU / menu-field (fix to automatic exit-problem)/A154 JMS I INACAL / get reply to PAGE NOT FOUND msg. ER7BUF / arg 1 SKP / for normal INA return TAD (EDNWLN) / for special INA return TAD (-EDNWLN) / look for RETURN key SZA CLA / skip if valid-input JMP CHKAGAIN / inform user of invalid-input JMS SET132 / SET TO 132 COL. MODE IF WIDE FLAG SET /A192 TAD RPPG0 / ---TOP-- DOC. FLAG SZA CLA / SKIP IF NOT PAGE0 PROBLEM JMP RPOVRT / JUMP IF BEYOND --TOP-- / INPUT PAGE # WAS TOO LARGE. BACKUP TO DESC. CONTAINING / LAST AVAILABLE PAGE AND GOTO IT... FIXPTR, AC7777 / BACKUP 1 DESCRIPTOR WORD CIFLP / LP FIELD JMS ADJUS0 / CHECKING RPCUOF FOR <55 OR <2 TAD RPCUBK / CURRENT HDR # MQL AC7776 / FC TO SET SCTOP AND SCBOT TAD RPCUOF / IDENTIFIES CURRENT BLOCK JMS DSKCAL / SET TO DESIRED BLOCK/ HDR # XRPRD / GTP ENTRY POINT CDFMYF AC7777 / FC TO READ A DESC. JMS DSKCAL XRPRD CDFMYF / BACK TO THIS FIELD MQL / SAVE CONTENTS OF DESC. TAD RULFLG / IF POSITIVE SPA CLA / LOOKING FOR PAGE JMP TSTRUL / ELSE LOOKING FOR RULER ACL / RETRIEVE CURRENT DESC. WRD AND (37) / SAVE # OF PAGES IN THIS BLOCK SNA CLA / SKIP IF PAGES IN THIS BLOCK JMP FIXPTR / NO PAGES, FIND LAST ONE TAD RPCUBK DCA CUBKTMP / SAVE HDR ID # FOR LAST PG TAD RPCUOF DCA CUOFTMP / AND OFFSET FOR LAST PG AC7777 DCA RULFLG / INDICATE PG FOUND, LOOK FOR VALID RULER JMP FIXPTR TSTRUL, ACL / RETRIEVE DESC. AND (4000) / RULER IN THIS DESC??? SNA CLA / SKIP W/ RULER JMP FIXPTR / BACK UP ANOTHER TAD RPCUOF / CURRENT OFFSET FOR RULER DCA RPMTRL / LATEST RULER TAD RPCUOF DCA RPMTBK / SAME AS PREVIOUS RULER TAD RPCUBK / HDR ID # FOR RULER DCA RPRLHN / LATEST RULER HDR TAD RPCUBK DCA RPPRRL / PREVIOUS RULER HDR TAD CUBKTMP DCA RPCUBK / RESTORE PAGE HDR ID # TAD CUOFTMP DCA RPCUOF / AND PAGE OFFSET TAD RPCUBK / HDR ID # MQL AC7776 / F.C. TO SET SCTOP & SCBOT TAD RPCUOF / BLK CONTAINING DESIRED PG JMS DSKCAL XRPRD / GTP ENTRY PT CDFMYF OVLJMP; OVRPRL / REPAINT SCREEN--THEN EXIT BACK TO EDITOR RULFLG, 0 / + = LOOKING FOR LAST PAGE / - = LOOKING FOR VALID RULER CUBKTMP, 0 / PAGE HDR ID # TMP STORAGE CUOFTMP, 0 / PAGE OFFSET TMP STORAGE RPOVRT, DCA RPPG0 / CLEAR ---TOP--- FLAG TO RESUME OVLJMP;OVRPZZ / RESUME EDIT AT ---TOP--- /M158 ER7BUF, -1 ZBLOCK 1 CHKAGAIN, / input wasn't RETURN key JMS BEEPER / inform the user JMP RPCHKREPLY / do until RETURN key X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------------- PAGE MER7B, (0) IFDEF ENGLSH < TEXT '^PCONTAINED IN THIS DOCUMENT, OR ' / 1517 *.-1 / 1717 TEXT '^P&YOU MAY USE &GOLD !&BOT !&DOCMT OR &GOLD !&ADVANCE TO UPDATE ' *.-1 TEXT '^PTHE RANGE OF PAGES FOR THIS DOCUMENT. ' / 2017 *.-1 TEXT '^P&BUT FIRST PRESS !&RETURN TO CONTINUE. ' / 2700 > IFDEF V30NOR < TEXT '^PDOKUMENTET. &DU KAN OGS\E BRUKE ' / 1517 *.-1 / 1717 TEXT '^P&GULL !&BUNN EL. &GULL !&FREM FOR \E AJOURF\XRE ' *.-1 TEXT '^PANTALL SIDER I DETTE DOKUMENTET. ' / 2017 *.-1 TEXT '^P&TRYKK P\E !&RETUR FOR \E FORTSETTE. ' / 2700 > IFDEF V30SWE < TEXT '^PSOM FINNS I DETTA DOKUMENT. &DU KAN OCKS\E ANV\DNDA GULD SLUT DOK ' / 1517 *.-1 / 1717 TEXT '^P&ELLER GULD FRAM\ET F\VR ATT \DNDRA ANTAL SIDOR I DETTA ' *.-1 TEXT '^PDOKUMENT. ' / 2017 *.-1 TEXT '^P&TRYCK F\VRST P\E RETUR F\VR ATT FORTS\DTTA ' / 2700 > IFDEF SPANISH < /A236 TEXT '^PCONTIEN ESTE DOCUMENTO, O ' / 1517 *.-1 / 1717 TEXT '^P&PUEDE USAR &DORADA !&FINAL !&DOCUMENTO O &DORADA !&ADELANTE PARA ' *.-1 TEXT 'PONER AL D\MA ' *.-1 TEXT '^PLAS P\AGINAS PARA ESTE DOCUMENTO SON. ' / 2017 *.-1 TEXT '^P&PERO PRIMERO PULSE !&RETORNO PARA CONTINUAR. ' / 2700 > /A236 IFDEF DUTCH < /A236 TEXT '^P ' / 1517 *.-1 / 1717 TEXT '^P&DEZE FUNCTIE WERKT NIET MET DOCUMENTEN ' *.-1 TEXT '^PAANGEMAAKT MET VORIGE VERSIES VAN !&WPS. ' *.-1 TEXT '^P&DRUK OP !&RETURN OM VERDER TE GAAN. ' / 2700 > /A236 IFDEF ITALIAN < TEXT '^PNUMERO DELLE PAGINE DI CUI \H COMPOSTO IL DOCUMENTO. ' *.-1 TEXT '^P&OPPURE \H POSSIBILE USARE &ORO !&FINE !&DOCUMEN OPPURE ' *.-1 TEXT '^P&ORO !&AVANTI PER AGGIORNARE LA NUMERAZIONE DELLE PAGINE. ' *.-1 TEXT /^P&PRIMA PER\R PREMERE !&RITORNO PER CONTINUARE L'OPERAZIONE./ > X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------------- PAGE /*************************************************************************** /**** START OF OVERLAY **** /*************************************************************************** RELOC RELOC OVLAY1 OVRNUM= OVRNUM+200 OVRBLK=OVRNUM%200+DLOEDO-1 / DISK BLOCK WHERE OVERLAY IS LOADED OVRNUM OVSSTP= .-OVLAY1+OVRNUM /SETUP COLUMN STRIP PARAMETERS JMP ESSSTP / ESCLPS COLUMNAR PASTE / / OVCLPS= .-OVLAY1+OVRNUM ESCLPS, JMS FNCLLM /FIND THE LIMITS OF THE COLUMN IN WHICH /PASTE DCA PSBFOF /CLEAR PASTE FLAG JMS SETPST TAD (-PSTEBG) /FIRST BLOCK OF PASTE BUFFER ONLY BLOCK? TAD PSTBLK JMP ESCP01 / ESCLCT COLUMNAR CUT / / OVCLCT= .-OVLAY1+OVRNUM ESCLCT, JMS SETCUT /INITIALIZE COLUMNAR CUT VARIABLES CDFMYF TAD (DCA I CURPTR) /SET FOR CUT NOT COPY JMP ESCLCX /GO JOIN COMMON CODE /A213 /D213 DCA CLCTSW /D213 OVLJMP /GO DO CUT /D213 OVDOCC / ESCLGC COLUMNAR GOLD CUT / / OVCGCT= .-OVLAY1+OVRNUM ESCLGC, JMS SETCUT /INITIALIZE COLUMNAR CUT VARIABLES CDFMYF TAD (CLA) /SET TO COPY NOT CUT ESCLCX, DCA CLCTSW /C213 OVLJMP /GO DO CUT OVDOCC / CLCTER COLUMNAR CUT ERROR PROCESSING / / CLCTER, CLA JMS BEEPER /RING DA BELL JMP UNSLCT /AND UNSELECT THE TEXT / FNCLLM FIND COLUMN LIMITS / / THIS ROUTINE WILL FIND THE UPPER AND LOWER CHARACTER POSITION / LIMITS OF A COLUMN; RELATIVE TO THE CURRENT CURSOR POSITION. / / INPUTS ARE CURPTR POINTING TO A CHARACTER OR TRAILING TAB FOR THE / DESIRED COLUMN. / FNCLLM, XX /ENTRY POINT FCLM01, BKPSPC /SEARCH BACKWARDS FOR THE BEGINNING OF THE /BEGINNING OF THE COLUMN OR FOR AN INVALID /CONDITION JMP FCLM03 /START OF FILE IS LEGAL COLUMN BOUNDARY BUT /SHOULD NEVER HAPPEN DUE TO INITIAL RULER AND P177 /STRIP THE MODE BITS FOR COMPARISONS ZZCASE /MATCH AGAINST SPECIAL CHARACTERS FCLTB1-1 / ECNWLN; FCLM04 /NEW LINE COULD BE COLUMN DELIMITER / ECNWPG; FCLM07 /NEW PAGE IS COLUMN DELIMITER / ECNDRL; FCLM06 /END RULER IS COLUMN DELIMITER / ECTAB; FCLM05 /TAB IS COLUMN DELIMITER / ECMDFL; FCLM01 /MODIFIED FLAG IS BOGUS CHAR SO SKIP / 0 AC7777 /NO MATCH SO DECREMENT CURSOR POSITION TAD CURSOR SPA /SHOULD NEVER GET BELOW POSITION ZERO JMP CLCTER /DID GO TO NEGATIVE POSITION SO ERROR DCA CURSOR /SAVE UPDATED CURSOR JMP FCLM01 /AND TRY AGAIN FCLM06, ADVSPC /POSITION BAK AT FIRST CHAR AFTER END RULER/C213 NOP CLA /ELIMINATE UNWANTED CHARACTER VALUE /A213 JMP FCLM08 /C213 FCLM04, TAD I CURPTR /CHECK THAT THE NEW LINE IS A HARD RETURN TAD (-ECNWLN) SZA CLA JMP CLCTER /NOT A CARRIAGE RETURN SO ERROR FCLM07, ADVSPC /ADVANCE OVER THE CHARACTER NOP /SHOULD NEVER HAPPEN BUT REALLY DON'T CARE AC7777 /BACKUP KEEPING PTRBLK HAPPY CURMOV HLT /HAVE ALREADY BEEN AT THIS CHAR SO NO END OF /FILE IS POSSIBLE. JMP FCLM02 FCLM05, AC7777 /dec cursor pos TAD CURSOR DCA CURSOR FCLM02, AC0001 /POSITION AT FIRST CHAR IN COLUMN FCLM08, CURMOV /SET CURSOR POSITION /C213 NOP FCLM03, CLA /MAKE SURE EVERYTHING OK TAD CURSOR /AND SEE IF THERE IS A TAB STOP HERE JMS GTRLCD DCA T2 /SAVE RULER CODE TAD T2 TAD (FCLJTB-1) /BUILD JUMP ADDRESS DCA T1 TAD I T1 DCA T1 JMP I T1 /GO DO APPROPRIATE / FCLMRJ /"-" DO RIGHT JUSTIFIED / FCLMRJ /"." DO RIGHT JUSTIFIED / FCLMRJ /">" DO RIGHT JUSTIFIED / FCLMLJ /"T" DO LEFT JUSTIFIED / FCLMLJ /"L" DO LEFT JUSTIFIED / FCLMRJ /"R" DO RIGHT JUSTIFIED / FCLMLJ /"D" DO LEFT JUSTIFIED / FCLMRJ /"J" DO RIGHT JUSTIFIED / FCLMLJ /"W" DO LEFT JUSTIFIED / FCLMLJ /"P" DO LEFT JUSTIFIED / FCLMRJ /"C" DO RIGHT JUSTIFIED / FCLMLJ /"N" DO LEFT JUSTIFIED / FCLMRJ /"H" DO RIGHT JUSTIFIED / FCLMLJ /"F" DO LEFT JUSTIFIED / FCLMLJ FIND COLUMN LIMITS FOR LEFT JUSTIFIED TAB / / BEGIN; / TEMP:=CLMPLL:=CURSOR; / WHILE( CURUL[TEMP+1] <> NOSTOP OR / CURUL[TEMP+1] <> HSTOP OR / CURUL[TEMP+1] <> CSTOP) TEMP:=TEMP+1; / CLMPUL:=TEMP; / END; / FCLMLJ, TAD CURSOR /GET CURRENT POSITION DCA CLMPLL /SAVE AS COLUMN LOWER LIMIT TAD CLMPLL /SET UP COUNTER TO FIND UPPER LIMIT DCA T1 FCLLJ1, AC0001 /EXAMINE FOLLOWING TAB STOP TAD T1 JMS GTRLCD ZZCASE /MATCH AGAINST NON-TABS FCLTB2-1 / 1; FCLLJ2 /"-" / 12; FCLLJ2 /"C" / 14; FCLLJ2 /"H" / 0 TAD T1 /SAVE UPPER LIMIT DCA CLMPUL JMP I FNCLLM /DONE! / / FCLLJ2, ISZ T1 /BUMP TO NEXT POSITION JMP FCLLJ1 /AND TRY NEXT / FCLMRJ FIND COLUMN LIMITS FOR RIGHT JUSTIFIED TAB STOP / / / BEGIN; / TEMP:=CURSOR; / WHILE( CURUL[TEMP-1] = NOSTOP OR / CURUL[TEMP-1] = CSTOP OR / CURUL[TEMP-1] = HSTOP) TEMP:=TEMP-1; / IF CURUL[TEMP-1] = RIGHT.MARGIN OR / CURUL[TEMP-1] = RIGHT.JUST.STOP THEN TEMP:=TEMP+1; / CLMPLL:=TEMP; / TEMP:=CURSOR-1; / SEEN.DECIMAL.FLAG=FALSE; / WHILE( CURUL[TEMP+1] = NOSTOP OR / CURUL[TEMP+1] = CSTOP OR / CURUL[TEMP+1] = HSTOP OR / ( CURUL[TEMP+1 = DECIMAL.STOP AND / SEEN.DECIMAL.FLAG = FALSE)) / BEGIN; / TEMP:=TEMP+1; / IF CURUL[TEMP] = DECIMAL.STOP THEN / SEEN.DECIMAL.FLAG = TRUE; / END; / CLMPUL:=TEMP; / END; / FCLMRJ, DCA FTHRU /FIRST TIME THRU FLAG TAD CURSOR /SETUP FOR BACK COUNT DCA T1 FCLRJ1, AC7777 /DECREMENT COUNT TAD T1 /AND CHECK PREVIOUS POSITION SPA /IF IT GOES BELOW ZERO THEN DEEP SHIT JMP CLCTER /ERROR, ERROR, DIVE! DIVE! DIVE! JMS GTRLCD TAD (FCLJT3-1) /BUILD PTR TO PROCESSING LOCATION DCA T2 TAD I T2 DCA T2 JMP I T2 /AND EXECUTE / FCLRJ2 /"-" / FCLRJ3 /"." / FCLRJ4 /">" / FCLRJ3 /"T" / FCLRJ3 /"L" / FCLRJ2 /"R" / FCLRJ3 /"D" / FCLRJ2 /"J" / FCLRJ3 /"W" / FCLRJ3 /"P" / FCLRJ2 /"C" / FCLRJ3 /"N" / FCLRJ2 /"H" / FCLRJ3 /"F" FCLRJ4, ISZ FTHRU JMP FCLRJ2 AC0001 /INCREMENT POSITION FCLRJ3, TAD T1 /SAVE POSITION AS LOWER LIMIT DCA CLMPLL AC7777 /STARTING FROM CURSOR POS -1 TAD CURSOR /EXAMINE FOR UPPER LIMIT DCA T1 DCA T3 /CLEAR DECIMAL POINT TAB SEEN FLAG FCLRJ5, AC0001 /EXAMINE FOLLOWING TAB STOP TAD T1 JMS GTRLCD ZZCASE /MATCH AGAINST NON-TABS FCLTB3-1 / 1; FCLRJ6 /"-" / 2; FCLRJ7 /"." / 12; FCLRJ6 /"C" / 14; FCLRJ6 /"H" / 0 FCLRJ8, AC0002 TAD T1 /SAVE UPPER LIMIT DCA CLMPUL JMP I FNCLLM /DONE! FTHRU, ZBLOCK 1 X=. /--------------------- PAGE / / FCLRJ2, AC7777 /DECREMENT POSITION AND TRY AGAIN TAD T1 DCA T1 AC7777 DCA FTHRU JMP FCLRJ1 FCLRJ7, TAD T3 /FIRST TIME THROUGH? SZA JMP FCLRJ8 /NO, FINISH UP ISZ T3 /SET FLAG FCLRJ6, ISZ T1 /BUMP TO NEXT POSITION JMP FCLRJ5 /AND TRY NEXT / GTRLCD GET RULER CODE / / THIS ROUTINE IS PASSED A VALUE CORRESPONDING TO A POSITION IN THE / CURRENTLY ACTIVE RULER. IT RETURNS THE TAB STOP TYPE CODE FOR THE / DESIGNATED POSITION. / / CALL: / / (AC := POSITION IN RULER) / JMS GTRLCD / / GTRLCD, XX /ENTRY POINT CLL RAR /DIVIDE BY TWO SAVE ODD FLAG TAD (CURUL) /BUILD PTR TO RULER CODE CDFMYF DCA GRCTMP /SAVE PTR FOR ACCESS TAD I GRCTMP /AND ACCESS RULER SNL /HIGH BYTE OR LOW? BSW /HIGH BYTE SO SWAP AND P77 /MASK CODE JMP I GTRLCD /RETURN GRCTMP, ZBLOCK 1 / SETCUT SETUP COLUMNAR CUT VARIABLES / / SETCUT, XX /ENTRY POINT TSTSLT /IN SELECT MODE? JMP EIBAD /NO, ERROR! ERROR! THAT DOES NOT COMPUTE! JMS FNCLLM /GO FIND COLUMN LIMITS TAD CLMPLL /SELECT >= LOWER LIMIT? CIA TAD SLCRPT SPA CLA JMP CLCTER /NEGATIVE NEGATIVE DIE! TAD SLCRPT /SELECT <=UPPER LIMIT? CIA TAD CLMPUL SPA CLA JMP CLCTER /NFW BADASS TAD (PSTEBG) /SET BEGINNING BLOCK NUMBER DCA PSTBLK DCA PSBFOF /CLEAR BUFFER OVERFLOW FLAG JMS SETPST /SETUP PASTE BUFFER I/O JMP I SETCUT /RETURN / ESCP01 SETUP PASTE BUFFER FOR PASTE / / ESCP01, SNA CLA JMP ESCP02 /YES TAD (PSTEBG) /SETUP PASTE BUFFER AND READ IN FIRST BLOCK DCA PSTBLK TAD (RXERD) JMS PSTIO ESCP02, JMS OV2JMP /DO THE PASTE OVDOPS / SETUP COLUMN STRIP PARAMETERS / / ESSSTP, JMS SETCUT JMP OVJRTN / COLUMNAR CUT SETUP CASE TABLES / / FCLTB1, ECNWLN; FCLM04 /NEW LINE COULD BE COLUMN DELIMITER ECNWPG; FCLM07 /NEW PAGE IS COLUMN DELIMITER ECNDRL; FCLM06 /END RULER IS COLUMN DELIMITER ECTAB; FCLM05 /TAB IS COLUMN DELIMITER ECMDFL; FCLM01 /MODIFIED FLAG IS BOGUS CHAR SO SKIP 0 FCLTB2, 1; FCLLJ2 /"-" 12; FCLLJ2 /"C" 14; FCLLJ2 /"H" 0 FCLTB3, 1; FCLRJ6 /"-" 2; FCLRJ7 /"." 12; FCLRJ6 /"C" 14; FCLRJ6 /"H" 0 / COLUMNAR CUT SETUP JUMP TABLES / / FCLJTB, FCLMRJ /"-" DO RIGHT JUSTIFIED FCLMRJ /"." DO RIGHT JUSTIFIED FCLMRJ /">" DO RIGHT JUSTIFIED FCLMLJ /"T" DO LEFT JUSTIFIED FCLMLJ /"L" DO LEFT JUSTIFIED FCLMRJ /"R" DO RIGHT JUSTIFIED FCLMLJ /"D" DO LEFT JUSTIFIED FCLMRJ /"J" DO RIGHT JUSTIFIED FCLMLJ /"W" DO LEFT JUSTIFIED FCLMLJ /"P" DO LEFT JUSTIFIED FCLMRJ /"C" DO RIGHT JUSTIFIED FCLMLJ /"N" DO LEFT JUSTIFIED FCLMRJ /"H" DO RIGHT JUSTIFIED FCLMLJ /"F" DO LEFT JUSTIFIED FCLJT3, FCLRJ2 /"-" FCLRJ3 /"." FCLRJ4 /">" FCLRJ3 /"T" FCLRJ3 /"L" FCLRJ2 /"R" FCLRJ3 /"D" FCLRJ2 /"J" FCLRJ3 /"W" FCLRJ3 /"P" FCLRJ2 /"C" FCLRJ3 /"N" FCLRJ2 /"H" FCLRJ3 /"F" PAGE RELOC /*************************************************************************** /**** START OF OVERLAY **** /*************************************************************************** RELOC RELOC OVLAY1 OVRNUM= OVRNUM+200 OVRBLK=OVRNUM%200+DLOEDO-1 / DISK BLOCK WHERE OVERLAY IS LOADED OVRNUM CLCTDN= X5 TBCTFL= X4 / OVDOER DO COLUMN ERROR HANDLING / / OVDOER= .-OVLAY1+OVRNUM CCDOER, JMP DOCCER / ESDOCC DO COLUMN CUT/COPY / / OVDOCC= .-OVLAY1+OVRNUM ESDOCC, TAD CLCTSW /SET FOR CUT OR COPY DCA CONCTC /CUTTING CHARACTERS / / THE LOCATION CONCTC IS LOADED WITH A DCA I CURPTR OR / A CLA DEPENDING ON WHETHER THE TEXT IS TO BE CUT TO / THE PASTE BUFFER OR COPIED. / DCA CLCTDN /CLEAR DONE FLAG OVDCC5= .-OVLAY1+OVRNUM DOCC05, TAD (ECTMRK) /MARK THE BEGINNING OF THE COLUMN JMS INSERT DCA TBCTFL /CLEAR TAB CUT FLAG ADVPTR /SKIP OVER THE MARK JMP DOC1ER /ERROR PREMATURE EOF TAD (-ECSLPT) /IS IT A SELECT POINT AT BEGINNING OF COLUMN SZA CLA JMP DOCC24 /NO GO PROCESS ISZ CLCTDN /YES, SO MARK LAST COLUMN DCA I CURPTR /CLEAR IT OUT OF THE TEXT BUFFER BKPPTR /KILL THE MARKER HLT CLA DCA I CURPTR SLNMOD /REJUSTIFY THE LINE JMS REJUST JMP DOCC05 /AND START PROCESSING AT THE BEGINNING OF /THE COLUMN DOCC24, TAD I CURPTR JMP DOCC23 DOCC01, ADVSPC /FORWARD SPACE UNTIL AN END OF COLUMN /DELIMITER IS FOUND JMP DOCC06 /END OF FILE - TREAT AS END OF LINE /C218 DOCC23, AND P177 /STRIP MODE BITS ZZCASE /MATCH AGAINST DELIMITERS DCCTB1-1 / ECNWLN; DOCC03 /NEW LINE COULD BE / ECNWPG; DOC1ER /NEW PAGE HERE IS ERROR / ECSTRL; DOC1ER /START RULER ALWAYS ERROR / ECTAB; DOCC02 /TAB IS GOOD BOY / ECMDFL; DOCC01 /SKIP MODIFIED FLAG / 0 ISZ CURSOR /BUMP CURSOR COUNT JMP DOCC01 /AND TRY NEXT CHAR DOCC03, TAD I CURPTR /CHECK EOL CHAR TAD (-ECNWLN) /HARD RETURN BONAFIDE SNA JMP DOCC02 /GOOD BOY GO CUT TAD (ECNWLN-ECSLPT) /SELECT POINT? SZA CLA JMP DOC1ER /NOPE ERROR ERROR DCA I CURPTR /DELETE SELECT POINT DCA CURSOR /RESET POINTER /A201 ISZ CLCTDN /SET DONE FLAG JMP DOCC01 /AND FETCH NEXT CHAR DOCC02, CDFMYF TAD CURSOR /CHECK POSITION AGAINST UPPER LIMIT CIA TAD CLMPUL SPA CLA /IF CLMPUL >= CURSOR THEN OK JMP DOC1ER /ERROR YOU GRAVY SUCKING PIG JMS LODCHR /GET EOC CHAR HLT /EOF CAN'T BE HERE TAD (-ECTAB) /IF TAB DO CUT OPERATION SZA CLA JMP DOCC06 /DON'T CUT HARD RETURN JMS CUTNOT /CUT OR COPY ISZ TBCTFL /SET EOC TAB CUT FLAG DOCC06, TAD (ECTMRK) /MARK END OF COLUMN JMS INSERT DOCC09, BKPPTR /FIND BEGINNING OF COLUMN MARK HLT /CAN'T HAPPEN UNLESS TOTALLY CORRUPTED TAD (-ECTMRK) /FOUND MARKER? SZA CLA JMP DOCC09 /NO, PERSEVERE THEN TAD TBCTFL /CHECK FOR A TAB CUT? SZA CLA JMP DOCC07 /YES EVERYTHING IS HUNKY DORY DOCC19, BKPPTR /SEE IF PREVIOUS TAB TO CUT JMP DOCC08 /NO, NEVER GETS HERE ANYWAY ZZCASE DCCTB2-1 / ECTAB; DOCC20 /YES GO DO IT / ECNWLN; DOCC08 / ECNWPG; DOCC08 / ECNDRL; DOCC08 / 0 JMP DOCC19 DOCC20, JMS CUTNOT /CUT OR COPY DOCC08, ADVPTR /FIND THE MARK AGAIN HLT TAD (-ECTMRK) SZA CLA JMP DOCC08 DOCC07, DCA I CURPTR /KILL THE MARKER DOCC10, ADVPTR /GET CHARACTER HLT /NO WAY TAD (-ECTMRK) /END OF COLUMN? SNA CLA JMP DOCC11 /YES, GO FINISH UP THE COLUMN TAD I CURPTR /REFETCH CHAR DCA T1 /SAVE CHAR JMS CUTNOT /CUT OR COPY TAD T1 /GET CHAR JMS PUTPST /PUT IT TO PASTE BUFFER JMP DOCC10 /DO NEXT CHARACTER JMP DNCCOV /BUFFER OVERFLOW GO CLEAN UP /D203 OVDC11= .-OVLAY1+OVRNUM DOCC11, DCA I CURPTR /KILL END MARKER OVDC12= .-OVLAY1+OVRNUM /A203 DOCC12, TAD (ECNWLN) /PUT COLUMN MARKER IN PASTE BUFFER /C203 JMS PUTPST SKP CLA /PUT AWAY OK SKIP ERROR RETURN JMP DNCCOV /BUFFER OVERFLOW GO CLEAN UP TAD LINE23 /SETUP AND REJUSTIFY THE LINE DCA CURPTR DCA CURSOR SLNMOD JMS REJUST CLA /SEE IF THAT WAS LAST COLUMN TAD CLCTDN SZA CLA JMP DONCCT /YES, HURRAY!!!!! JMS OV2JMP OVDCEL X=. /--------------------- PAGE / DOC1ER ERROR HANDLING AFTER COLUMN FOUND / / DOC1ER, TAD LINE23 /SEARCH FOR THE MARKER TO DELETE DCA CURPTR /FROM THE BEGINNING OF THE LINE DCA CURSOR SKP /DON'T FORWARD SPACE THE FIRST TIME DOC1E1, AC0001 /SEARCH FOR MARKER CURMOV HLT /EOF BEFORE MARKER FOUND MEANS /CATASTROPHIC DOCUMENT FAILURE TAD I CURPTR TAD (-ECTMRK) /FOUND? SZA CLA JMP DOC1E1 /NO, TRY NEXT DCA I CURPTR /DELETE MARK SLNMOD /REJUSTIFY THE LINE JMS REJUST / DOCERR ERROR FINISH UP HANDLING / / DOCCER, JMS BEEPER /RIND DA BELL JMS PUTPST /CLOSE PASTE BUFFER NOP TAD (RXEWT+2000) JMS PSTIO SLNMOD TAD CLCTDN /CHECK IF SELECT FOUND SNA CLA JMP UNSLCT /NO SO GO FIND IT DCA EDMODE /CLEAR MODES JMP EIBAD /AND LEAVE / DNCCOV COLUMN CUT ABORTED DUT TO OVERFLOW HANDLING / / DNCCOV, AC0001 /SEARCH FOR SELECT POINT AND MARKER CURMOV HLT /BETTER NOT FIND EOF TAD I CURPTR TAD (-ECTMRK) /MARKER? SNA JMP DNCOV1 /YES DELETE IT TAD (ECTMRK-ECSLPT) /SELECT POINT? SZA JMP DNCCOV /NO, TRY NEXT CHAR DCA I CURPTR /DELETE SELECT MARK JMS BEEPER /SIGNAL ERROR JMP DNCCT1 /GO TERMINATE CUT DNCOV1, DCA I CURPTR /DELETE MARKER SLNMOD /REJUSTIFY LINE JMS REJUST JMP DNCCOV /SEARCH FOR SELECT POINT / DONCCT DONE COLUMN CUT HANDLING / / DONCCT, JMS PUTPST /PUT TERMINATOR BYTE INTO BUFFER NOP /IGNORE OVERFLOW TAD (RXEWT+2000) /WRITE OUT FINAL BLOCK JMS PSTIO DNCCT1, TAD LINE23 /RESET POINTERS DCA CURPTR DCA CURSOR DCA EDMODE /RESET MODE SLNMOD /REJUSTIFY LINE JMS REJUST JMP EIFIX /CONTINUE PROCESSING / PUTPST WRITE TO PASTE BUFFER / / THIS ROUTINE TAKES CHARACTERS PASSED IN THE AC AND PUTS THEM IN / THE PASTE DISK BUFFER. WHEN THE BUFFER IS FULL IT WRITES THE / BUFFER TO DISK. WHEN THE LAST ALLOCATED DISK BLOCK IS WRITTEN / IT SETS THE CUT OVERFLOW FLAG AND TAKES A SKIP RETURN. / / CALL: / / JMS PUTPST (AC := CHARACTER TO WRITEOUT) / / / / RETURNS WITH AC:=0 IN ALL CASES / PUTPST, XX /ENTRY POINT CDFBUF /SET TO BUFFER FIELD DCA I PSTPTR /PUT CHARACTER IN BUFFER ISZ PSTPTR /BUMP PTR AND CHECK FOR BLOCK FULL JMP I PUTPST /BLOCK NOT FULL SO RETURN DIRECTLY TAD (RXEWT+2000) /BLOCK I/O WRITE CODE JMS PSTIO /PERFORM WRITE TO DISK ISZ PSTBLK /INCREMENT BLOCK NO TAD PSTBLK /CHECK FOR END OF ALLOCATED BLOCKS TAD (-PSTEND) /FOR PASTE BUFFER SZA CLA /END OF ALLOCATION? JMP I PUTPST /NO, SO STRAIGHT RETURN AC7777 /EOA FOR PASTE BUFFER DCA PSBFOF /SET PASTE BUFFER OVERFLOW FLAG ISZ PUTPST /AND TAKE A SKIP RETURN JMP I PUTPST /B-B / CUTNOT CUT OR COPY A CHARACTER / / CUTNOT, XX CONCTC, HLT /THIS LOCATION HAS EITHER A DCA I CURPTR /OR A CLA WRITTEN IN UPON ENTRY. THE /DCA I CURPTR WILL CUT THE TAB. THE CLA /DOES NOTHING. JMP I CUTNOT / CASE TABLES FOR COLUMNAR CUT / / DCCTB1, ECNWLN; DOCC03 /NEW LINE COULD BE ECNWPG; DOC1ER /NEW PAGE HERE IS ERROR ECSTRL; DOC1ER /START RULER ALWAYS ERROR ECTAB; DOCC02 /TAB IS GOOD BOY ECMDFL; DOCC01 /SKIP MODIFIED FLAG 0 DCCTB2, ECTAB; DOCC20 /YES GO DO IT ECNWLN; DOCC08 ECNWPG; DOCC08 ECNDRL; DOCC08 0 X=. /--------------------- PAGE /*************************************************************************** /**** START OF OVERLAY **** /*************************************************************************** OVRNUM=OVRNUM+200 OVRBLK=OVRNUM%200+DLOEDO-1 / DISK BLOCK WHERE OVERLAY IS LOADED RELOC RELOC OVLAY1 OVRNUM / BEGIN HELP OVERLAY........ OVHELP= .-OVLAY1+OVRNUM JMP OVHLP1 / CALL CLEAR SCREEN AND SAVE MENU DATA /A185 / / Moved here on edit 225 for space reasons / OVSWAP= .-OVLAY1+OVRNUM JMP XVSWAP / Call Gold swap routine OVTIME= .-OVLAY1+OVRNUM JMP XVTIME /D185 OVHLP1= .-OVLAY1+OVRNUM / --OVERLAY ENTRY POINT-- / OVERLAY HELP EDIT OVHLP0, CIFMNU JMS I MNUCAL / PRINT HELP MENU DLHLP0 / BLOCK NUM ARG.. JMP HLPBKC / SKIP INC FIRST TIME AND DISPLAY HLPADV, TAD HLPSPC / GET SPACE CHAR JMS HLPDP0 / PRINT IT ISZ NOWPTR JMP HLPBKC / PRINT '*' / BACKUP POINTER HLPBAK, TAD HLPSPC / GET SPACE CHAR JMS HLPDP0 / PRINT IT CLA CMA / -1 FOR BACKUP HLPBKC, TAD NOWPTR SNA / BEG OF SCREEN JMP HLPDST / YES IS OK SPA / IS IT BEFORE 1ST COMMENT JMP HLPSTZ / YES SET TO LAST TAD HLPNMX / CHECK END (-HLPMAX) SPA / PAST LAST? HLPSTZ, TAD HLPMAX / YES RESET HLPDST, DCA NOWPTR / SET POINTER TAD HLPCSR / GET CURSOR CHAR JMS HLPDP0 / PRINT IT HLPNXT, GETINP / GET A CHAR SNA / IS=0 JMP HLPNXT / YES MAY BE NULL FROM PRINT SCREEN TAD (-EDHELP) / =HELP SNA JMP HLPHLP / IS HELP MENU 2ND LEVEL TAD (-EDADVN+EDHELP)/ ADVANCE CHAR SNA JMP HLPADV / IS ADVANCE TAD (-EDBKUP+EDADVN)/ CHECK BACKUP SNA JMP HLPBAK / IS BACKUP PTR IFDEF HELPDO < TAD (-EDDO+EDBKUP) / ****UPPER IS TEMP****IS DO IT COMMAND SNA JMP HLPDO / YES EXEC COMMAND TAD (-EDNWLN+EDDO) / IS RETURN > / END IFDEF HELPDO IFNDEF HELPDO < TAD (-EDNWLN+EDBKUP) > / END IFNDEF HELPDO SNA JMP HLPRET / RETURN TO EDIT MODE TAD (-EDMENU+EDNWLN)/ GOLD MENU? SNA CLA JMP HLPRET / RETURN TO EDIT MODE JMS BUZZER / ILLEGAL CHAR JMP HLPNXT / GET ANOTHER CHAR / SET UP LINE AND COL PRINT POSITION HLPDP0, 0 DCA HLPCHR / SAVE CHAR TO BE DISPLAYED TAD NOWPTR / GET POSITION DCA HLPTM1 / SAVE POSITION PTR DCA COLCNT / INIT COL PTR DCA HLPRW1 / INIT ROW PTR DCA COLNUM / TAB COLUMN NUMBER HLPNX1, SETLSC, JMS SETLST / CHECK LAST COLUMN SETCOL, TAD COLNUM / GET TAB COL NUMBER CLL RAL / *2 TAD COLPT1 / POINTER TO TABLE DCA COLPT2 / TEMP POINTER TAD I COLPT2 / GET 1ST CHAR ENTRY DCA HLPCL1 / SET 2ND POS(0,2,5) ISZ COLPT2 / GET 2ND ENTRY IN TABLE TAD I COLPT2 / SET L/ O=(3,7,1) DCA HLPCL2 / SET L/ O POS. PNTR TAD HLPK04 / 4=FIRST PRINT LINE TAD HLPTM1 / LINE OFFSET DCA HLPTM1 SETCLB, TAD HLPKM9 / -9 TAD HLPTM1 SPA / IS GREATER THAN 9 JMP HLPST1 / NO CONT DCA HLPTM1 / SAVE LINE # ISZ HLPRW1 / INC ROW NUMBER ASSUMES L.T.20 JMP SETCLB / REPEAT (FOR G.T. 20 HLPST1, CLA CLL CML RAR / 4000 TAD HLPRW1 TAD HLPK60 / ASCII DCA HLPRW1 / ADD ROW NUM CLA CLL CML RAR / 4000 TAD HLPK60 / ASCII TAD HLPTM1 DCA HLPRW2 / PUT COMMAND STRING PUTESC "[+4000-200 HLPRW1, "0+4000-200 / ROW TENS DIGIT HLPRW2, "1+4000-200 / ROW L/ O DIGIT ";+4000-200 / SEPARATOR "0+4000-200 / COL H/ O COLCNT, HLPCL1, "0+4000-200 / =0,3,6 HLPCL2, "3+4000-200 "H+4000-200 / CUROR POSITION HLPCHR, "0-200 / CHARACTER TO PRINT JMP I HLPDP0 / THIS ROUTINE COMPARES ARG PASSED AGAINST NOWPTR / LIKE RESULTS RETURN +1 ELSE+2 CHKSPL, 0 TAD NOWPTR / POINTER TO CODE TAD I CHKSPL / GET CODE TO COMPARE AGAINST SZA CLA / IS IT SPECIAL CODE? ISZ CHKSPL / NO SET RETURN ISZ CHKSPL JMP I CHKSPL / SET DIRECTION FOR ADV/ BACKUP LINE OR PARA SETDIR, 0 MODSET / SET IT MOVMOD JMP I SETDIR / RET IFDEF CONDOR / TOTAL NUM OF LIST IN MENU /C212 IFNDEF CONDOR /C222 NUMLPC, -17 / NUMBER LINES PER COLUMN HLPTM1, 0 / TEMP STOREAGE HLPMAX, LSTLNT / MAX NUM COMMANDS HLPNMX, -LSTLNT / NEG HLP MAX HLPSPC, " -200 / SPACE HLPCSR, "*-200 / CURSOR CHAR=* HLPK60, 60 / " HLPKM9, -12 / -9 IFDEF HELPDO < HLPPTR, HLPTBL / POINTER TO COMMAND TABLE > / END IFDEF HELPDO NOWPTR, 0 / CURRENT POSITION POINTER HLPK04, 4 / FIRST LINE OF PRINT COLNUM, 0 / TAB POSITION COLPT1, COLPT3 / POINTER TO TABLE COLPT2, 0 / TEMP POINTER POS. X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------------- PAGE IFDEF HELPDO < / DO COMMAND POINTED TO PY CURSOR POSITION HLPCOD, 0 / POINTER TO COMMAND LOC HLPDO, TAD NOWPTR / GET POINTER TO CURRENT COMMAND CLL RAR / DIV 2 2 ENTRIES PER WD. TAD HLPPTR / ADD START OF TABLE DCA HLPCOD / SET POINTER TO COMMAND TAD I HLPCOD / GET COMMAND CODE SNL / HI OR LO BYTE 0=HI BSW / =HI AND (77) / MASK 6 BITS SZA / 0=NO CODE TAD (7700) / REPLACE 6 BITS IN CODE DCA HLPCOD / SAVE NEW CODE JMS CHKSPL / CHECK SPECIAL CODE -BAKLIN / IS = BACKUP LINE(UP ARRW) JMP SETBKW / SET TO BACKWARD JMS CHKSPL / CHECK SPECIAL CODE -ADVLIN / IS = ADV LINE(DWN ARRW) JMP SETFWD / SET TO FORWARD JMS CHKSPL / CHECK SPECIAL CODE -NXTSCR / IS = ADVANCE PARA(NXT SCREEN) JMP SETFWD / SET TO FORWARD JMS CHKSPL / CHECK SPECIAL CODE -PRVSCR / IS = BACKUP PARA(PREV SCREEN) JMP SETBKW / SET TO FORWARD JMP SETCNT / CONTINUE SETBKW, IAC / 1=BACKUP DIRECTION SETFWD, / 0=FORWARD DIRECTION DCA MOVMOD+1 / 0=BACK 1=FWRD JMS SETDIR / SET THE DIRECTION SETCNT, TAD HLPCOD / GET THE CODE > / END IFDEF HELPDO / RETURN TO EDIT MODE HLPRET, DCA T2 / SAVE RETURN CODE TAD T3 / GET BASKET COUNT DCA BASKCT / RESET /D185 OVLJMP;OVHLPE / END HELP OVERLAY RESTORE MENU DATA AND POINTERS TAD WIDNAR / CHECK FOR WIDE SCREEN /M192 SNA CLA /M192 JMS SET132 / CONVERT TO 132 COLUMN MODE /A185 JMS CLSSET / INITIALIZE SCROLL VALUES FOR STATUS /A185 AC7777 / SET AC = -1 /A185 CIFMNU / CHANGE INSTRUCTION FIELD TO MENU FIELD/A185 PGSWAP / AC=-1 SO JUST LOAD IN THE SAVE AREA /A185 TAD T2 / FINISH - GET RETURN CODE /A185 SNA / IS CODE OR NULL(RET TO EDITOR) /A185 JMP EINEXT / RETURN TO NORMAL EDITOR FUNCTIONS /A185 JMP EINEXB / RETURN TO EDITOR ...WITH NEG CODE IN AC/A185 OVHLP1, TAD BASKCT / GET WASTEBASKET COUNT /A185 DCA T3 / SAVE FOR HELP UNDELETE /A185 DCA PSTBLK /A185 DCA BASKCT / CLEAR PASTE BUF FLAGS /A185 JMS CLR132 / MAKE SURE THE SCREEN IS IN NARROW MODE/A185 AC0003 / SET UP TO RESET SCROLL REGION /A185 CIFMNU / CHANGE INSTRUCTION FIELD TO MENU FIELD/A185 JMS I (CALLN1) / RESET SCROLL REGION SET ABSOLUTE MODE /A185 CIFMNU / CHANGE INSTRUCTION FIELD TO MENU FIELD/A185 PGSWAP / AC=0, SAVE SWAP AREA & RELOAD MENU CODE/A185 JMP OVHLP0 / START OF HELP OVERLAY HLPHLP, TAD NOWPTR / NEXT LEVEL HELP TEXT - GET ARG CDFMNU DCA I (MUBUF+MNTMP1) CDFEDT CIFMNU JMS I MNUCAL / CAL MENU DLHL01 / MENU BLOK(ARG PASSED IN MNTMP1) CDFMNU TAD I (MUBUF+MNTMP1) / ARG RET HERE(0=NEXT NOT 0=DO) CDFEDT IFNDEF HELPDO < SNA CLA / IS DISPLAY MENU? JMP OVHLP0 / YES JMP HLPRET / YES RESUME EDITING > / END END IFNDEF HELP DO IFDEF HELPDO < SNA / IS DISPLAY MENU? JMP OVHLP0 / YES SMA CLA / IS IT GOLD MENU JMP HLPRET / YES RESUME EDITING JMP HLPDO / DO FUNCTION CODE > / END IFDEF HELPDO IFDEF ENGLSH < COLPT3, "0+4000-200 / (01) "1+4000-200 "1+4000-200 / (19) "9+4000-200 "3+4000-200 / (37) /C212 "7+4000-200 /C212 "5+4000-200 / (52) /C212 "2+4000-200 /C212 "6+4000-200 / (65) /C212 "5+4000-200 /C212 > IFDEF V30SWE < COLPT3, "0+4000-200 / (01) "1+4000-200 "1+4000-200 / (19) "9+4000-200 "3+4000-200 / (37) /C212 "7+4000-200 /C212 "5+4000-200 / (52) /C212 "2+4000-200 /C212 "6+4000-200 / (65) /C212 "5+4000-200 /C212 > IFDEF V30NOR < COLPT3, "0+4000-200 / (01) "1+4000-200 "1+4000-200 / (19) "9+4000-200 "3+4000-200 / (37) /C212 "7+4000-200 /C212 "5+4000-200 / (52) /C212 "2+4000-200 /C212 "6+4000-200 / (65) /C212 "5+4000-200 /C212 > IFDEF SPANISH < COLPT3, "0+4000-200 / (01) /A236 "1+4000-200 / " "1+4000-200 / (19) / " "9+4000-200 / " "3+4000-200 / (37) / " "7+4000-200 / " "5+4000-200 / (52) / " "2+4000-200 / " "6+4000-200 / (65) / " "5+4000-200 /A236 > IFDEF ITALIAN < COLPT3, "0+4000-200 / (01) "1+4000-200 "2+4000-200 / (20) "0+4000-200 "3+4000-200 / (41) /C212 "9+4000-200 /C212 "5+4000-200 / (52) /C212 "2+4000-200 /C212 "6+4000-200 / (65) /C212 "5+4000-200 /C212 > IFDEF DUTCH < COLPT3, "0+4000-200 / (01) "1+4000-200 "1+4000-200 / (19) "9+4000-200 "3+4000-200 / (36) /C212 "6+4000-200 /C212 "5+4000-200 / (52) /C212 "2+4000-200 /C212 "6+4000-200 / (65) /C212 "5+4000-200 /C212 > SETLST, XX / CHECK LAST COLUMN TAD LNTPTR / LENGTH TABLE POINTER DCA LNTTMP / SAVE TEMP SETNXT, TAD HLPTM1 / POSITION POINTER TAD I LNTTMP / GET LNGTH SPA / L.T. THAN POINTER JMP SETEXT / YES DCA HLPTM1 / NO ISZ COLNUM / INC COL NUMBER ISZ LNTTMP / INC PTR JMP SETNXT SETEXT, CLA / SET POSITION IN COL JMP I SETLST / RET LNTPTR, LNTTBL / POINTER LNTTMP, 0 / TEMP LNTTBL, /A166 IFNDEF CONDOR < /A166 -17 / NEG LNTH COL 1 /C212 -20 / NEG LNTH COL 2 /C212 -15 / NEG LNTH COL 3 /C222 -21 / NEG LNTH COL 4 /A166 -7 / NEG LNTH COL 5 /C222 > / END IFNDEF CONDOR /A166 IFDEF CONDOR < /A166 -21 / NEG LNTH COL 1 /C212 -21 / NEG LNTH COL 2 /C212 -16 / NEG LNTH COL 3 /C212 -21 / NEG LNTH COL 4 -17 / NEG LNTH COL 5 /C212 > / END IFDEF CONDOR /A166 0 / END TABLE IFDEF HELPDO < / FOLLOWING TABLE ASSUMES ALL CODES START WITH 77XX IN H/ O 6 BITS / IT IS USED WITH 6 BITS FROM 1ST CODE STORED IN H/ O 6 BITS / AND 6 BITS FROM NEXT CODE STORED IN L/ O 6 BITS HLPTBL, / COMMAND TABLE EDDICT^100+EDGADV+100 / ABBREVIATION / GOLD ADVANCE EDGBKP^100+EDUBLD+100 / GOLD BACKUP / GOLD:BOLD EDBOTM^100+EDCENT+100 / BOTTOM / CENTER EDPCMD^100+EDSRCH+100 / COMMAND / CONT. SEARCH EDCONT^100+EDRBSE+100 / CONTINUE SEARCH & SELECT/ RUB SENTENCE EDGCUT^100+EDTIME+100 / GOLD CUT / GOLD:DATE & TIME EDDEAD^100+EDUDLT+100 / DEAD KEY / GOLD:DELETE EDFILE^100+EDDCMT+100 / FILE / GOLD:G GET DOC 0000000^100+EDHYPL+100 / NO HELP CODE RESUME EDITEDHALT / HYPHEN PULL EDGPST^100+EDGETC+100 / INSERT HERE=GOLD PASTE/ LIBRARY EDMENU^100+EDNPAG+100 / MENU / NEW PAGE EDGPGE^100+EDPMRK+100 / GOLD:PAGE / PAGE MARKER EDCRET^100+EDGPST+100 / PARAGRAPH MARKER / GOLD:PASTE EDHYP1^100+EDGCUT+100 / PRINT HYP / GOLD REMOVE= GOLD CUT EDREPL^100+EDRBLN+100 / REPLACE / RUB LINE EDRULR^100+EDHYP2+100 / RULER / INVISIBLE HYP EDFIND^100+EDFIND+100 / SEARCH / SEARCH PAGE (TEMP DO SEARCH) EDSUBS^100+EDSUPS+100 / SUBSCRIPT / SUPERSCRIPT EDSWAP^100+EDTOP+100 / SWAP / TOP EDUUDL^100+EDLOWR+100 / GOLD:UNDERLINE / GOLD:UPPERCASE EDVIEW^100+EDGBKP+100 / VIEW / UP ARROW=BACKUP LINE(**) EDGADV^100+EDGBKP+100 / DN ARROW=ADVANCE LINE(**)/ LFT ARROW=BACKUP LINE(**) EDGADV^100+EDADVN+100 / RHT ARROW=ADVANCE LINE(**) / ADVANCE EDBKUP^100+EDBOLD+100 / BACKUP / BOLD EDSCUT^100+EDDLTC+100 / CUT / DELETE CHAR EDDLTW^100+EDLINE+100 / DELTE WORD / LINE EDPAGE^100+EDPARA+100 / PAGE / PARAGRAPH EDPSTE^100+EDSLCT+100 / PASTE / SELECT EDSENT^100+EDTABP+100 / SENTENCE / TABPOSITION EDUNDL^100+EDUPPR+100 / UNDERLINE / UPPERCASE EDWORD^100+EDENTR+100 / WORD / ENTER EDFIND^100+EDHYPS+100 / FIND=GOLD SRCH / HYPH PULL(**) / FOLLOWING DEFINE USED TO DETERMINE OFFSET IN TABLE / USED TO LOCATE FUNCTIONS REQUIRING 2 CODES TO BE EXECUTED NXTSCR=.-HLPTBL^2+1 / NXT SCRN=ADV PARA L/ O BYTE EDPSTE^100+EDPARA+100 / INSERT HERE=PASTE/NEXT SCREEN=ADVANCE PARA(**) PRVSCR=.-HLPTBL^2 / PREV SCRN=BKUP PARA H/ O BYTE EDPARA^100+EDSCUT+100 / PREV SCREEN=BACKUP PARA(**)/REMOVE=CUT BAKLIN=.-HLPTBL^2+1 / UP ARROW=BK LINE L/ O BYTE EDSLCT^100+EDLINE+100 / SELECT=SEL/ UP ARROW=BACKUP LINE(**) ADVLIN=.-HLPTBL^2 / DWN ARROW=ADV LINE L/ O BYTE EDLINE^100+EDBKUP+100 / DN ARROW=ADVANCE LINE(**)/ LFT ARROW=BACKUP LINE(**) EDADVN^100+007700+100 / RHTARROW=ADVANCE LINE(**) HLPTBE, / END OF TABLE+1 > / END IFDEF HELPDO / END HELP MENU / / Moved here on edit 225 for space reasons / / Modified on edit 229 to allow Swap on dead key sequences. / XVSWAP, JMS BHOOK / Call Blaster /A229 SWPDED / To swap a dead thing /A229 JMP EIBAD / Bad Swap /A229 JMP EIFIX / Char has been inserted , wait for more/A229 EISWPA, XX / Check current char for Swap JMS LODCHR / JMP EISWBD / Bad if ETX AND P177 TAD (-ECNWLN) / Or if EOL SNA JMP EISWBD / TAD (ECNWLN-ECNWPG) / Or if PAGE SNA CLA / /M229 /D229 TAD (ECNWPG-ECSTOV) / Or if Overstruck /D229 SNA CLA JMP EISWBD ISZ EISWPA EISWBD, JMP I EISWPA / Return only if OK / OVTIME moved here on edit 231 to allow room for hyphenation of /A231 / 8 bit chars /A231 / OVTIME= .-OVLAY1+OVRNUM /TIME ENTRY XVTIME, CIFMNU JMS I TIMCAL NOP / UPDATE TIMER CDFMNU AC7777 TAD I (DATESP) / GET DATE STRING DCA OVTIMX / SAVE PTR-1 XVTIM1, CDFMNU TAD I OVTIMX / GET NEXT CHAR SNA JMP EIFIX / QUIT IF NULL INSCHR / ELSE INSERT JMP XVTIM1 / AND LOOP FOR MORE OVTIMX=X5 / STRING INDEX REGISTER X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------------- PAGE /*************************************************************************** /**** START OF OVERLAY **** /*************************************************************************** OVRNUM=OVRNUM+200 OVRBLK=OVRNUM%200+DLOEDO-1 / DISK BLOCK WHERE OVERLAY IS LOADED RELOC RELOC OVLAY1 OVRNUM /*************************************************************************** /**** MOVED DURING EDIT #176 FOR GOLD:TAB STUFF **** /*************************************************************************** OVXRUL= .-OVLAY1+OVRNUM / / RULER CLEAN UP CODE / / ENTERED HERE FROM EDIT-RULER MODE AND COMPLETION OF GOLD:TAB / / "GOLD:TAB" / "GOLD:RULER" / "ENTER" / "GOLD:ADVANCE" OR "GOLD:BACKUP" / JMS CHKRUL / CHECK NEW RULER JMP RLBADX / NEW RULER IS BAD, RETURN TO RULER OR TAB TAD CURSAV / GET SAVED CURSOR POSN FROM RESIDENT DCA CURSOR / RESTORE CURSOR POSN. TAD (ECTMRK) / PUT THE TEMP MARKING IN THE DOCUMENT /a176 JMS INSERT /a176 JMS CMPRUL JMP RLEXIT / NO CHANGE IN RULER / / +++ THE RULER CHANGED. /a176 / WE JUST PUT THE MARKER IN THE EDIT BUFFER, NOW, INSERT /a176 / THE NEW RULER AND RULER-MODIFIED CODE. THEN WHEN WE /a176 / GET TO THE NEXT OVERLAY, WE WILL PLACE THE CURSOR AT THE /a176 / SCREEN LOCATION BEFORE THE GOLD:TAB OR GOLD:RULER COMMAND. /a176 / WAS ISSUED. /a176 / / Also, we are going to Erase the Current line from the screen /a177 / Because of problems with Gold:tab and Editor-Status-Word /a177 / Defined to Display the Ruler on the 24th Line (but not in /a177 / the body of the text). /a177 / /a177 PUTESC / LETS OUTPUT AN ESCAPE SEQUENCE /a177 "[&177+4000 / WHICH WILL ERASE THE CURRENT LINE /a177 "2&177+4000 /a177 "K&177 /a177 / / TAD LINE23 / MOVE EDIT BUFFER POINTER /c177 DCA CURPTR / AND SCREEN CURSOR POINTER DCA CURSOR / TO LEFT MARGIN JMS INSRUL / INSERT NEW RULER TAD (ECRMFL) DCA LINMOD / SET RULER MODIFIED FLAG JMS SAVLMD / INSERT IT TAD LINE23 / MOVE EDIT PTR TO BEFORE NEW RULER DCA CURPTR RLEXIT, OVLJMP / TRANSFER TO ANOTHER OVERLAY TO FINISH OVRLXT / / / +++ THERE IS SOME KIND OF PROBLEM WITH THE NEW-RULER /a176 / /a176 / IF WE GOT HERE FROM GOLD:RULER, IT COULD BE ANYTHING. /a176 / IF WE GOT HERE FROM GOLD:TAB, THEN WE MUST HAVE TOO MANY TABS /a176 / /a176 / WE RETURN TO THE PROPER OVERLAY BY VECTORING ON MNTMP1 IN THE /a176 / MENU FIELD. /a176 / RLBADX, JMS MNUGET /a176 MNTMP1 / GET VECTOR FLAG /a176 SZA CLA / .EQ.0 = RULER .NE.0 = TAB /a176 JMP RLBAD1 / TAB /a176 OVLJMP / RULER /a176 OVRBAD /a176 RLBAD1, OVLJMP / TAB /a176 INTBAD /a176 OVGSRL= .-OVLAY1+OVRNUM JMS CHKRUL / CHECK FOR VALID RULER JMP RLBADX / ERROR - INVALID RULER / READ THE BLOCK WHICH CONTAINS THE STORED RULER WE WANT TO /A184 / OVERWRITE AND THEN COPY THE NWRUL BUFFER INTO THAT READ BUFFER. /A184 / THE MODIFIED BUFFER IS THEN WRITTEN OUT TO THE DISK. /A184 TAD T3 / RULER VALID - PUT IT TO DISK /A184 JMS RLGETX / GO READ EDITOR RULER BLOCK /A184 DCA RLPUT1 / RETURN WITH ADDRESS - 1 OF RULER AND /A184 / SET UP FOR COPY /A184 JMS CPYBUF / COPY NWRUL TO WRITE OUT BUFFER /A184 -RULSIZ / MINUS SIZE OF NEW RULL /A184 CDFMNU / RESIDES IN MENU FIELD /A184 NWRUL-1 / AT THIS LOCATION /A184 CDFBUF / COPY TO THIS FIELD /A184 RLPUT1, .-. / AT THIS LOCATION /A184 TAD (RXEWT+2000) / GET WRITE OUT FUNCTION CODE /A184 JMS PSTIO / WRITE TO DISK /A184 OVLJMP / GOTO RULER MODIFICATION ROUTINE TO OVPRUL / DISPLAY RULER AND GET NEXT INPUT CHAR. X=. / INDICATE FIRST FREE LOCATION ON PAGE /------------------------------ PAGE / / SUBR CHKRUL -- CHECK NEW RULER TO SEE IF IT ADHERES TO THE FOLLOWING / RULES: / (1) THERE MUST BE A LEFT MARGIN; / (2) THE LEFT MARGIN, WORD WRAP INDENT MARK, PARA INDENT MARK, / AND CENTERING POINT MUST ALL BE TO THE LEFT OF THE / RIGHT MARGIN; / (3) # OF MARKERS (TABS, ETC) < (20 IF RIGHT MARGIN<80, ELSE 41); / ALSO DELETES MARKERS PAST RIGHT MARGIN. / / CALL: / TAD JUNK / AC DOESN'T MATTER / JMS CHKRUL / CHECK NEW RULER (NWRUL) / JMP RULBAD / RULER BAD (VIOLATES 1 OR MORE RULES) / JMP RULOK / RULER OK / CHKRUL, XX / CHECK NEW RULER AC0001 DCA T1 / INIT POSN CDFMNU TAD NWLMAR SNA JMP MCHK1 / ERROR IF NO L JMS MCHK TAD NWWMAR JMS MCHK TAD NWPMAR JMS MCHK TAD NWCMAR JMS MCHK TAD NWRMAR TAD (-COLM81) / NOW CHECK TOTAL SIZE OF RULER SMA CLA TAD (-25) TAD (-25) DCA RLTMP / -(MAX COUNT OF MARKS)-1 DCA MCHK RLXCH1, ISZ MCHK / BUMP POSITION TAD MCHK JMS GETBYT NWRUL / LOOK AT IT SNA JMP RLXCH2 / JUMP IF DONE TAD (-1) SNA CLA JMP RLXCH1 / IGNORE IF NOTHING THERE TAD MCHK CIA CDFMNU TAD NWRMAR SMA CLA JMP RLXCH3 / COUNT IF INSIDE MARGIN TAD MCHK MQL IAC / ELSE DELETE JMS PUTBYT NWRUL JMP RLXCH1 / COUNT MARKER AT LEFT OF RIGHT MARGIN RLXCH3, ISZ RLTMP JMP RLXCH1 / IGNORE IF OK SO FAR TAD MCHK / ELSE COMPLAIN IF TOO MANY MARKS JMP MCHK2 RLTMP, 0 / NEW RULER IS OK. TAKE OK RETURN. RLXCH2, ISZ CHKRUL RLXCH4, CDFMYF JMP I CHKRUL / / SUBR MCHK -- / ENTER WITH AC = NEW RULER SETTING. / *** THIS SUBROUTINE MAY ONLY BE CALLED FROM WITHIN SUBR CHKRUL! / MCHK MAKES SURE NEW RULER SETTING IS TO THE LEFT OF NEW RIGHT MARGIN. / IF IT IS, THEN EXIT MCHK WITH AC=0; / ELSE (BAD NEW RULER) TAKE ERROR RETURN FROM ***CHKRUL*** !! MCHK, XX DCA T1 TAD T1 CIA TAD NWRMAR SMA SZA CLA JMP I MCHK MCHK1, TAD T1 MCHK2, DCA RLPOSN JMP RLXCH4 X=. / INDICATE FIRST FREE LOCATION ON PAGE /------------------------------ PAGE /*************************************************************************** /**** START OF OVERLAY **** /*************************************************************************** OVRNUM=OVRNUM+200 OVRBLK=OVRNUM%200+DLOEDO-1 / DISK BLOCK WHERE OVERLAY IS LOADED RELOC RELOC OVLAY1 OVRNUM OVINCH=.-OVLAY1+OVRNUM JMP INOVCH / Handle chars in Overstrike /A235 / mode /A235 OVINOF=.-OVLAY1+OVRNUM / Switch INSOV Flag On - Off /A235 INONOF, CLA / Clear Acc /A235 TAD INSOVF / Get Overstrike flag /A235 CMA / Flip bits /A235 AND (1) / Mask out everything else /A235 DCA INSOVF / Now re-store it /A235 AC0001 / Set Acc up /A235 CDFMNU / Point to Menu field /A235 DCA I XLINDIF / Set line different flag /A235 CDFMYF / and back here /A235 JMP EIFIX / Go back for more /A235 INOVCH, CDFBUF / Point to User buff /A235 TAD I CURPTR / Get next char /A235 AND P177 / Strip off attributes /A235 CDFMYF / Now back here /A235 TAD (-ECSPC) / Check if alpha /A235 SPA / /A235 JMP INONAL / Not alpha /A235 CLA / Clear out results of test /A235 CDFBUF / Point to user buffer /A235 DCA I CURPTR / And kill char /A235 CDFMYF / Now point back here /A235 TAD INCHTM / Get char just input /A235 JMP EINSRT / And wait for more /A235 INONAL, TAD (ECSPC-ECSTOV) / Is it the start of a dead seq /A235 SNA CLA / /A235 JMP INOVDED / yes , Kill it then return /A235 TAD INCHTM / No get char back /A235 JMP EINSRT / And insert it instead /A235 INOVDED,JMS INVKIL / Kill char /A235 ADVPTR / Get next /A235 NOP / /A235 TAD (-ECNDOV) / End of the dead seq ? /A235 SZA CLA / /A235 JMP INOVDED / No , keep trying /A235 JMS INVKIL / Yes , kill it /A235 TAD INCHTM / Now get back original char /A235 JMP EINSRT / And insert it /A235 / / Small routine to kill next char in user buffer /A235 / INVKIL, XX CDFBUF / Point to user buffer /A235 DCA I CURPTR / And kill char /A235 CDFMYF / Point back here /A235 JMP I INVKIL / And return /A235 XLINDIF,LINDIF / Pointer to LINDIF in Menu field/A235 X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------------- PAGE ZBLOCK 1 / RESERVE SPACE FOR SECOND OVERLAY PAGE X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------------- PAGE /*************************************************************************** /**** START OF OVERLAY **** /*************************************************************************** OVRNUM=OVRNUM+200 OVRBLK=OVRNUM%200+DLOEDO-1 / DISK BLOCK WHERE OVERLAY IS LOADED RELOC RELOC OVLAY1 OVRNUM OVTCHR= .-OVLAY1+OVRNUM / USER TYPED "TECHNICAL CHARACTER KEY" JMS OV2JMP / CALL REST OF ROUTINE IN OVERLAY 2 AREA OVTC / NECESSARY TO LOAD THIS OVERLAY & TABLE XXFIND= .-OVLAY1+OVRNUM / USER TYPED "GOLD:SEARCH" ISZ NOMOVE / KEEP CURSOR FROM PRE-INCREMENTING JMS FXSCRL / UPDATE SCREEN JMS PROMPT / PROMPT USER 'ENTER PHRASE:' EIFND1 JMS OV2JMP / CALL ROUTINE IN SECOND OVERLAY AREA OVAGET / ALTERNATE GETLIN ROUTINE TAD GETTRM / TEST TERMINATOR FOR... TAD (-EDRULR) / RULER CODE ? SNA / . JMP XXGOTO / USER TYPED "GOLD:SEARCH - GOLD:RULER" TAD (EDRULR-EDPAGE) / PAGE CODE ? SNA CLA / . /C206 JMP XPGOTO / USER TYPED "GOLD:SEARCH - PAGE" JMS CPYBUF / COPY INPUT AREA CONTAINING SEARCH STRING ALTLIM, -63 / NUMBER OF WORDS TO COPY /C196 CDFMNU / FIELD TO COPY FROM MUBUF+MNIBUF-1 / ADDRESS TO COPY FROM CDFMYF / FIELD TO COPY TO EIGES4 / ADDRESS TO COPY TO TAD GETTRM / TEST TERMINATOR FOR... TAD (-EDCONT) / CONTINUE SEARCH AND SELECT ? /C206 SNA / . JMP XXCONT / USER TYPED "GOLD:CONTINUE SEARCH & SELECT" TAD (EDCONT-EDBKUP) / BACKUP? SNA CLA / . AC7776 / MODIFY INDICATORS ACCORDINGLY... DCA SRCDIR / . OVLJMP; OVSRCH / CONTINUE WITH "CONTINUE SEARCH" XXGOTO, OVLJMP; OVGSGR / USER TYPED "GOLD:SEARCH - GOLD:RULER" XPGOTO, OVLJMP; OVRPPG / USER TYPED "GOLD:SEARCH - PAGE" / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - / GET GLOBAL SEARCH AND REPLACE / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - OVGSRP= .-OVLAY1+OVRNUM / GLOBAL SEARCH AND REPLACE MAIN ENTRANCE JMS CLR132 / KEEP SCREEN WIDTH AT 80 TAD GSRPRV / GET PREVIOUS GLOBAL SEARCH FLAG SZA CLA / WAS THERE A PREVIOUS GLOBAL SEARCH? AC0001 / YES, ALLOW RE-START JMS GETALT / CALL MENU AND GET STRING TAD GETLEN / GET LENGTH OF INPUT STRING SZA CLA / WAS ANYTHING TYPED ? JMP GS2 / YES, GO HANDLE STRING TAD GSRPRV / NO, GET PREVIOUS GLOBAL SEARCH FLAG SZA CLA / WAS THERE A PREVIOUS GLOBAL SEARCH? JMP XVGSGO / YES, THEN GO CONTINUE IT JMS SET132 / SET TO 132 COL. IF WIDNAR=WIDE /M192 JMS GS1SWP / RESTORE THE SWAP AREA JMP EIFIX / AND RETURN TO EDITOR IF FOUND GS2, JMS CPYBUF / COPY INPUT AREA CONTAINING SEARCH STRING -63 / NUMBER OF WORDS TO COPY CDFMNU / FIELD TO COPY FROM MUBUF+MNIBUF-1 / ADDRESS TO COPY FROM CDFMYF / FIELD TO COPY TO EIGES4 / ADDRESS TO COPY TO / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - / GET SUBSTITUTION SCREEN / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AC0002 / INDICATE REPLACEMENT MENU TEXT JMS GETALT / CALL MENU AND GET STRING TAD GETTRM / GET THE TERMINATING CHARACTER TAD (-EDPSTE) / COMBINE WITH PASTE KEY VALUE SNA CLA / IS IT THE PASTE KEY ? JMP XVGSGO / YES, GO USE CURRENT PASTE BUFFER TAD (PSTEBG) / SET UP THE PARAMETERS TO RESET THE DCA PSTBLK / CUT-PASTE BLOCK HANDLING LOGIC. JMS SETPST / GO SET ADRS POINTERS JMS OV2JMP / CALL ROUTINE IN SECOND OVERLAY AREA OVFIXP / TRANSFER MENU BUFFER TO PASTE BUFFER TAD (RXEWT+2000) / SET UP THE CALL TO WRITE THE CUT-PASTE BLOCK JMS PSTIO / TO THE USER SCRATCH AREA ON THE DISK. CDFMYF / RESET BACK TO THIS FIELD XVGSGO, TAD (SKP) / PICK UP THE SKIP INSTRUCTION DCA GSKILN / STORE SO THAT GSR WILL RUN ISZ GSRPRV / SET THE PREVIOUS GSR FLAG ISZ GSRF / SET THE GSR IN PROGRESS FLAG JMS SET132 / SET TO 132 COL. IF WIDNAR=WIDE /M192 JMS GS1SWP / RESTORE THE SWAP AREA /A189 XXCONT, OVLJMP; OVCONT / GO TO CONTINUE SEARCH & SELECT OVERLAY GETALT, XX / COMMON GSR STRING INPUT ROUTINE JMS MNUPUT / TRANSFER MESSAGE CODE TO MENU TEMP MNTMP2 / USE MENU TMEP NUMBER 2 CIFMNU / CHANGE TO MENU FIELD JMS I MNUCAL / AND CALL THE MENU DLMGS1 / USE THE FIRST GSR MENU BLOCK JMS OV2JMP / CALL ROUTINE IN SECOND OVERLAY AREA OVAGET / ALTERNATE GETLIN ROUTINE TAD GETTRM / GET TERMINATING CHARACTER TAD (-EDMENU) / COMBINE WITH VALUE FOR GOLD MENU SZA CLA / WAS GOLD MENU PRESSED ? JMP I GETALT / NO, RETURN TO CALLER JMS GS1SWP / YES, GO RESTORE THE SWAP AREA OVLJMP;OVMENU / GO CALL UP THE EDITOR MENU GS1SWP, XX / SUBROUTINE TO RESTORE THE SAVE AREA JMS CLSSET / INITIALIZE SCROLL VALUES FOR STATUS AC7777 / SET AC = -1 CIFMNU / CHANGE INSTRUCTION FIELD TO MENU FIELD PGSWAP / AC=-1 SO JUST LOAD IN THE SAVE AREA JMP I GS1SWP / RETURN TO CALLER X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------------- PAGE / Mapping table for the Technical Character Set / /** Note: If octal code of mapped character is 0 the user input will / be ignored and no technical character will be generated. / / .-- Character set selection G1, G2, G3 / | .-- 7 bit octal code of Technical Character / | | .-- 7 bit octal code of character to be mapped / | | | .-- ASCII character of octal code to be mapped / | | | | .-- Mapped Technical Character description / |/ \ | | | TCMAP, IFDEF DUTCH < 3042 / 041 ! Top left radical 2067 / 042 " Middle dot 3065 / 043 # Top right summation 3066 / 044 $ Bottom right summation 2061 / 045 % Plus minus 3044 / 046 & Top integral 3103 / 047 ' Divided by 3053 / 050 ( Top left paren 3055 / 051 ) Top right paren 3046 / 052 * Vertical connentor 3051 / 053 + Top right square bracket 1133 / 054 , Left square bracket 3050 / 055 - Bottom left square bracket 1135 / 056 . Right square bracket 3133 / 057 / Includes 3056 / 060 0 Bottom right paren 3041 / 061 1 Left radical 3126 / 062 2 Radical 3057 / 063 3 Left middle brace 3060 / 064 4 Right middle brace 3067 / 065 5 Right middle summation 3062 / 066 6 Bottom left summation 3045 / 067 7 Bottom intergral 3043 / 070 8 Horizontal connector 3054 / 071 9 Bottom left paren 3136 / 072 : Logical and 3137 / 073 ; Logical or 3074 / 074 Less than - Less than or equal 3052 / 075 = Bottom right square bracket 3076 / 076 Greater than - Greater than or equal 3132 / 077 ? Is included in 3100 / 100 @ Therefore 3105 / 101 A Nabla, del 3102 / 102 B Inifinity 3121 / 103 C Capital psi 3106 / 104 D Capital phi 3173 / 105 E Left arrow 3140 / 106 F Logical not 3114 / 107 G Capital lambda 2066 / 110 H Paragraph 3174 / 111 I Upward arrow 3134 / 112 J Intersection 2047 / 113 K Section 3127 / 114 L Capital omega 3157 / 115 M Partial derivative 3110 / 116 N Is approximate to 3176 / 117 O Downard arrow 0000 / 120 P (Spare location rings bell to indicate error) 3107 / 121 Q Capital gamma 3112 / 122 R Capital theta 3123 / 123 S Capital sigma 3175 / 124 T Right arrow 3130 / 125 U Captial xi 3101 / 126 V Variation, proportional to 3104 / 127 W Capital delta 3117 / 130 X Identical to 3131 / 131 Y Capital upsilon 3111 / 132 Z Similar or equal to 3160 / 133 [ Small pi 3075 / 134 \ Not equal 3116 / 135 ] Implies 3061 / 136 ^ Top left summation 3047 / 137 _ Top left square bracket 3064 / 140 ` Bottom vertical summation connector 3141 / 141 a Small alpha 3142 / 142 b Small beta 3161 / 143 c Small psi 3146 / 144 d Small phi 3145 / 145 e Small epsilon 3166 / 146 f Function 3154 / 147 g Small lambda 3150 / 150 h Small eta 3151 / 151 i Small iota 3135 / 152 j Union 3153 / 153 k Small kapa 3167 / 154 l Small omega 2065 / 155 m Small mu 3156 / 156 n Small nu 2060 / 157 o Degree 3162 / 160 p Small rho 3147 / 161 q Small gamma 3152 / 162 r Small theta 3163 / 163 s Small sigma 3164 / 164 t Small tau 3170 / 165 u Small xi 3113 / 166 v Times, cross product 3144 / 167 w Small delta 3143 / 170 x Small chi 3171 / 171 y Small upsilon 3172 / 172 z Small zeta 3120 / 173 { Captial pi 3077 / 174 | Integral 3115 / 175 } If and only if 3063 / 176 ~ Top vertical summation connector 0000 / 177 Delete key is not allowed > IFDEF ENGLSH < IFNDEF V30FAO < 3042 / 041 ! Top left radical 2067 / 042 " Middle dot 3065 / 043 # Top right summation 3066 / 044 $ Bottom right summation 2061 / 045 % Plus minus 3044 / 046 & Top integral 3103 / 047 ' Divided by 3053 / 050 ( Top left paren 3055 / 051 ) Top right paren 3046 / 052 * Vertical connentor 3051 / 053 + Top right square bracket 1133 / 054 , Left square bracket 3050 / 055 - Bottom left square bracket 1135 / 056 . Right square bracket 3133 / 057 / Includes 3056 / 060 0 Bottom right paren 3041 / 061 1 Left radical 3126 / 062 2 Radical 3057 / 063 3 Left middle brace 3060 / 064 4 Right middle brace 3067 / 065 5 Right middle summation 3062 / 066 6 Bottom left summation 3045 / 067 7 Bottom intergral 3043 / 070 8 Horizontal connector 3054 / 071 9 Bottom left paren 3136 / 072 : Logical and 3137 / 073 ; Logical or 3074 / 074 Less than - Less than or equal 3052 / 075 = Bottom right square bracket 3076 / 076 Greater than - Greater than or equal 3132 / 077 ? Is included in 3100 / 100 @ Therefore 3105 / 101 A Nabla, del 3102 / 102 B Inifinity 3121 / 103 C Capital psi 3106 / 104 D Capital phi 3173 / 105 E Left arrow 3140 / 106 F Logical not 3114 / 107 G Capital lambda 2066 / 110 H Paragraph 3174 / 111 I Upward arrow 3134 / 112 J Intersection 2047 / 113 K Section 3127 / 114 L Capital omega 3157 / 115 M Partial derivative 3110 / 116 N Is approximate to 3176 / 117 O Downard arrow 0000 / 120 P (Spare location rings bell to indicate error) 3107 / 121 Q Capital gamma 3112 / 122 R Capital theta 3123 / 123 S Capital sigma 3175 / 124 T Right arrow 3130 / 125 U Captial xi 3101 / 126 V Variation, proportional to 3104 / 127 W Capital delta 3117 / 130 X Identical to 3131 / 131 Y Capital upsilon 3111 / 132 Z Similar or equal to 3160 / 133 [ Small pi 3075 / 134 \ Not equal 3116 / 135 ] Implies 3061 / 136 ^ Top left summation 3047 / 137 _ Top left square bracket 3064 / 140 ` Bottom vertical summation connector 3141 / 141 a Small alpha 3142 / 142 b Small beta 3161 / 143 c Small psi 3146 / 144 d Small phi 3145 / 145 e Small epsilon 3166 / 146 f Function 3154 / 147 g Small lambda 3150 / 150 h Small eta 3151 / 151 i Small iota 3135 / 152 j Union 3153 / 153 k Small kapa 3167 / 154 l Small omega 2065 / 155 m Small mu 3156 / 156 n Small nu 2060 / 157 o Degree 3162 / 160 p Small rho 3147 / 161 q Small gamma 3152 / 162 r Small theta 3163 / 163 s Small sigma 3164 / 164 t Small tau 3170 / 165 u Small xi 3113 / 166 v Times, cross product 3144 / 167 w Small delta 3143 / 170 x Small chi 3171 / 171 y Small upsilon 3172 / 172 z Small zeta 3120 / 173 { Captial pi 3077 / 174 | Integral 3115 / 175 } If and only if 3063 / 176 ~ Top vertical summation connector 0000 / 177 Delete key is not allowed > IFDEF V30FAO < 3042 / 041 ! Top left radical 3100 / 042 " Therefore 0000 / 043 # ----- 3066 / 044 $ Bottom right summation 2061 / 045 % Plus minus 3061 / 046 & Top left summation 3050 / 047 ' Bottom left square bracket 3046 / 050 ( Vertical connector 3053 / 051 ) Top left paren 3115 / 052 * Iff (if and only if) 3116 / 053 + Implies 1133 / 054 , Left square bracket 3133 / 055 - Includes 1135 / 056 . Right square bracket 3044 / 057 / Top integral 3056 / 060 0 Bottom right paren 3041 / 061 1 Left radical 3126 / 062 2 Radical 3057 / 063 3 Left middle brace 3060 / 064 4 Right middle brace 3067 / 065 5 Right middle summation 3062 / 066 6 Bottom left summation 3045 / 067 7 Bottom intergral 3043 / 070 8 Horizontal connector 3054 / 071 9 Bottom left paren 1135 / 072 : Right square bracket 1133 / 073 ; Left square bracket 3074 / 074 Less than - Less than or equal 3055 / 075 = Top right paren 3076 / 076 Greater than - Greater than or equal 3047 / 077 ? Top left square bracket 0000 / 100 @ ----------- 3105 / 101 A Nabla, del 3102 / 102 B Inifinity 3121 / 103 C Capital psi 3106 / 104 D Capital phi 3173 / 105 E Left arrow 3140 / 106 F Logical not 3114 / 107 G Capital lambda 2066 / 110 H Paragraph 3174 / 111 I Upward arrow 3134 / 112 J Intersection 2047 / 113 K Section 3127 / 114 L Capital omega 3157 / 115 M Partial derivative 3110 / 116 N Is approximate to 3176 / 117 O Downard arrow 0000 / 120 P (Spare location rings bell to indicate error) 3107 / 121 Q Capital gamma 3112 / 122 R Capital theta 3123 / 123 S Capital sigma 3175 / 124 T Right arrow 3130 / 125 U Captial xi 3101 / 126 V Variation, proportional to 3104 / 127 W Capital delta 3117 / 130 X Identical to 3131 / 131 Y Capital upsilon 3111 / 132 Z Similar or equal to 0000 / 133 [ ------ 0000 / 134 \ ------ 0000 / 135 ] ------ 3120 / 136 ^ Capital Pi 3132 / 137 _ Is included in 3160 / 140 ` Small Pi 3141 / 141 a Small alpha 3142 / 142 b Small beta 3161 / 143 c Small psi 3146 / 144 d Small phi 3145 / 145 e Small epsilon 3166 / 146 f Function 3154 / 147 g Small lambda 3150 / 150 h Small eta 3151 / 151 i Small iota 3135 / 152 j Union 3153 / 153 k Small kapa 3167 / 154 l Small omega 2065 / 155 m Small mu 3156 / 156 n Small nu 2060 / 157 o Degree 3162 / 160 p Small rho 3147 / 161 q Small gamma 3152 / 162 r Small theta 3163 / 163 s Small sigma 3164 / 164 t Small tau 3170 / 165 u Small xi 3113 / 166 v Times, cross product 3144 / 167 w Small delta 3143 / 170 x Small chi 3171 / 171 y Small upsilon 3172 / 172 z Small zeta 0000 / 173 { Captial pi 0000 / 174 | Integral 0000 / 175 } If and only if 3077 / 176 ~ Integral 0000 / 177 Delete key is not allowed > > IFDEF V30NOR < 3042 / 041 ! Top left Radical 3100 / 042 " Therefor 3065 / 043 # Top Right Summ 3066 / 044 $ Bott Right Summ 2061 / 045 % +/- 3061 / 046 & Top Left Summ 3052 / 047 ' Divide by 3046 / 050 ( Vertical Conn 3053 / 051 ) Top Left Paren 3077 / 052 * Vertical Bar 3050 / 053 + Bott left Square bracket 1133 / 054 , Left Sq Bracket 3133 / 055 - Includes 1135 / 056 . Right Sq Bracket 3044 / 057 / Top Integral 3056 / 060 0 Bott Right Paren 3041 / 061 1 Left Radical 3126 / 062 2 Radical 3057 / 063 3 Left Midd Brace 3060 / 064 4 Right Midd Brace 3067 / 065 5 Right Midd Summ 3062 / 066 6 Bott Right Summ 3045 / 067 7 Bott Integral 3043 / 070 8 Horr Conn 3054 / 071 9 Bott Left Paren 1135 / 072 : Right Sq Bracket 1133 / 073 ; Left Sq Bracket 3074 / 074 Less than - Lessthan or = 3055 / 075 = Top Right Paren 3076 / 076 G.T. Greater than Or = 3047 / 077 ? Top Left Sq Bracket 0000 / 100 @ ------- 3105 / 101 A Nabla, del 3102 / 102 B Inifinity 3121 / 103 C Capital psi 3106 / 104 D Capital phi 3173 / 105 E Left arrow 3140 / 106 F Logical not 3114 / 107 G Capital lambda 2066 / 110 H Paragraph 3174 / 111 I Upward arrow 3134 / 112 J Intersection 2047 / 113 K Section 3127 / 114 L Capital omega 3157 / 115 M Partial derivative 3110 / 116 N Is approximate to 3176 / 117 O Downard arrow 0000 / 120 P (Spare location rings bell to indicate error) 3107 / 121 Q Capital gamma 3112 / 122 R Capital theta 3123 / 123 S Capital sigma 3175 / 124 T Right arrow 3130 / 125 U Captial xi 3101 / 126 V Variation, proportional to 3104 / 127 W Capital delta 3117 / 130 X Identical to 3131 / 131 Y Capital upsilon 3111 / 132 Z Similar or equal to 0000 / 133 ] ------- 0000 / 134 \ ------- 0000 / 135 ) ------- 3115 / 136 ^ Iff 3132 / 137 _ Is included in 3051 / 140 ` Top Right Sq Bracket 3141 / 141 a Small alpha 3142 / 142 b Small beta 3161 / 143 c Small psi 3146 / 144 d Small phi 3145 / 145 e Small epsilon 3166 / 146 f Function 3154 / 147 g Small lambda 3150 / 150 h Small eta 3151 / 151 i Small iota 3135 / 152 j Union 3153 / 153 k Small kapa 3167 / 154 l Small omega 2065 / 155 m Small mu 3156 / 156 n Small nu 2060 / 157 o Degree 3162 / 160 p Small rho 3147 / 161 q Small gamma 3152 / 162 r Small theta 3163 / 163 s Small sigma 3164 / 164 t Small tau 3170 / 165 u Small xi 3113 / 166 v Times, cross product 3144 / 167 w Small delta 3143 / 170 x Small chi 3171 / 171 y Small upsilon 3172 / 172 z Small zeta 0000 / 173 { ------- 0000 / 174 | ------- 0000 / 175 } ------- 3064 / 176 ~ Bott Vertical Summ Conn > IFDEF V30SWE < 3042 / 041 ! Top left Radical 3100 / 042 " Therefor 3065 / 043 # Top Right Summ 3066 / 044 $ Bott Right Summ 2061 / 045 % +/- 3061 / 046 & Top Left Summ 3052 / 047 ' Divide by 3046 / 050 ( Vertical Conn 3053 / 051 ) Top Left Paren 3077 / 052 * Vertical Bar 3050 / 053 + Bott left Square bracket 1133 / 054 , Left Sq Bracket 3133 / 055 - Includes 1135 / 056 . Right Sq Bracket 3044 / 057 / Top Integral 3056 / 060 0 Bott Right Paren 3041 / 061 1 Left Radical 3126 / 062 2 Radical 3057 / 063 3 Left Midd Brace 3060 / 064 4 Right Midd Brace 3067 / 065 5 Right Midd Summ 3062 / 066 6 Bott Right Summ 3045 / 067 7 Bott Integral 3043 / 070 8 Horr Conn 3054 / 071 9 Bott Left Paren 1135 / 072 : Right Sq Bracket 1133 / 073 ; Left Sq Bracket 3074 / 074 Less than - Lessthan or = 3055 / 075 = Top Right Paren 3076 / 076 G.T. Greater than Or = 3047 / 077 ? Top Left Sq Bracket 0000 / 100 @ ------- 3105 / 101 A Nabla, del 3102 / 102 B Inifinity 3121 / 103 C Capital psi 3106 / 104 D Capital phi 3173 / 105 E Left arrow 3140 / 106 F Logical not 3114 / 107 G Capital lambda 2066 / 110 H Paragraph 3174 / 111 I Upward arrow 3134 / 112 J Intersection 2047 / 113 K Section 3127 / 114 L Capital omega 3157 / 115 M Partial derivative 3110 / 116 N Is approximate to 3176 / 117 O Downard arrow 0000 / 120 P (Spare location rings bell to indicate error) 3107 / 121 Q Capital gamma 3112 / 122 R Capital theta 3123 / 123 S Capital sigma 3175 / 124 T Right arrow 3130 / 125 U Captial xi 3101 / 126 V Variation, proportional to 3104 / 127 W Capital delta 3117 / 130 X Identical to 3131 / 131 Y Capital upsilon 3111 / 132 Z Similar or equal to 0000 / 133 ] ------- 0000 / 134 \ ------- 0000 / 135 ) ------- 0000 / 136 ^ ------- 3132 / 137 _ Is included in 3051 / 140 ` Top Right Sq Bracket 3141 / 141 a Small alpha 3142 / 142 b Small beta 3161 / 143 c Small psi 3146 / 144 d Small phi 3145 / 145 e Small epsilon 3166 / 146 f Function 3154 / 147 g Small lambda 3150 / 150 h Small eta 3151 / 151 i Small iota 3135 / 152 j Union 3153 / 153 k Small kapa 3167 / 154 l Small omega 2065 / 155 m Small mu 3156 / 156 n Small nu 2060 / 157 o Degree 3162 / 160 p Small rho 3147 / 161 q Small gamma 3152 / 162 r Small theta 3163 / 163 s Small sigma 3164 / 164 t Small tau 3170 / 165 u Small xi 3113 / 166 v Times, cross product 3144 / 167 w Small delta 3143 / 170 x Small chi 3171 / 171 y Small upsilon 3172 / 172 z Small zeta 0000 / 173 { ------- 0000 / 174 | ------- 0000 / 175 } ------- 3064 / 176 ~ Bott Vertical Summ Conn > IFDEF SPANISH < 3042 / 041 ! Top left radical 3100 / 042 " Therefore 0000 / 043 # ----- 3066 / 044 $ Bottom right summation 2061 / 045 % Plus minus 3061 / 046 & Top left summation 3050 / 047 ' Bottom left square bracket 3046 / 050 ( Vertical connector 3053 / 051 ) Top left paren 3115 / 052 * Iff (if and only if) 3116 / 053 + Implies 1133 / 054 , Left square bracket 3133 / 055 - Includes 1135 / 056 . Right square bracket 3044 / 057 / Top integral 3056 / 060 0 Bottom right paren 3041 / 061 1 Left radical 3126 / 062 2 Radical 3057 / 063 3 Left middle brace 3060 / 064 4 Right middle brace 3067 / 065 5 Right middle summation 3062 / 066 6 Bottom left summation 3045 / 067 7 Bottom intergral 3043 / 070 8 Horizontal connector 3054 / 071 9 Bottom left paren 1135 / 072 : Right square bracket 1133 / 073 ; Left square bracket 3074 / 074 Less than - Less than or equal 3055 / 075 = Top right paren 3076 / 076 Greater than - Greater than or equal 3047 / 077 ? Top left square bracket 0000 / 100 @ ----------- 3105 / 101 A Nabla, del 3102 / 102 B Inifinity 3121 / 103 C Capital psi 3106 / 104 D Capital phi 3173 / 105 E Left arrow 3140 / 106 F Logical not 3114 / 107 G Capital lambda 2066 / 110 H Paragraph 3174 / 111 I Upward arrow 3134 / 112 J Intersection 2047 / 113 K Section 3127 / 114 L Capital omega 3157 / 115 M Partial derivative 3110 / 116 N Is approximate to 3176 / 117 O Downard arrow 0000 / 120 P (Spare location rings bell to indicate error) 3107 / 121 Q Capital gamma 3112 / 122 R Capital theta 3123 / 123 S Capital sigma 3175 / 124 T Right arrow 3130 / 125 U Captial xi 3101 / 126 V Variation, proportional to 3104 / 127 W Capital delta 3117 / 130 X Identical to 3131 / 131 Y Capital upsilon 3111 / 132 Z Similar or equal to 0000 / 133 [ ------ 0000 / 134 \ ------ 0000 / 135 ] ------ 3120 / 136 ^ Capital Pi 3132 / 137 _ Is included in 3160 / 140 ` Small Pi 3141 / 141 a Small alpha 3142 / 142 b Small beta 3161 / 143 c Small psi 3146 / 144 d Small phi 3145 / 145 e Small epsilon 3166 / 146 f Function 3154 / 147 g Small lambda 3150 / 150 h Small eta 3151 / 151 i Small iota 3135 / 152 j Union 3153 / 153 k Small kapa 3167 / 154 l Small omega 2065 / 155 m Small mu 3156 / 156 n Small nu 2060 / 157 o Degree 3162 / 160 p Small rho 3147 / 161 q Small gamma 3152 / 162 r Small theta 3163 / 163 s Small sigma 3164 / 164 t Small tau 3170 / 165 u Small xi 3113 / 166 v Times, cross product 3144 / 167 w Small delta 3143 / 170 x Small chi 3171 / 171 y Small upsilon 3172 / 172 z Small zeta 0000 / 173 { Captial pi 0000 / 174 | Integral 0000 / 175 } If and only if 3077 / 176 ~ Integral 0000 / 177 Delete key is not allowed > IFDEF ITALIAN < 3132 / 041 ! Is included in 3057 / 042 " Left middle brace 0000 / 043 # --------------- 3116 / 044 $ Implies 2067 / 045 % Middle dot 3115 / 046 & If and only if 3060 / 047 ' Right middle brace 3067 / 050 ( Right middle summation 3050 / 051 ) Bottom left square bracket 3075 / 052 * Not equal 3051 / 053 + Top right square bracket 2065 / 054 , Small mu 3052 / 055 - Bottom right square bracket 1133 / 056 . Left square bracket 1135 / 057 / Right square bracket 3055 / 060 0 Top right paren 3042 / 061 1 Top left radical 3100 / 062 2 Therefore 3065 / 063 3 Top right summation 3066 / 064 4 Bottom right summation 2061 / 065 5 Plus/minus 3061 / 066 6 Top left summation 3044 / 067 7 Top intergral 3046 / 070 8 Vertical connector 3053 / 071 9 Top left paren 1135 / 072 : Right square bracket 1133 / 073 ; Left square bracket 3074 / 074 Less than - Less than or equal 3120 / 075 = Capital Pi 3076 / 076 Greater than - Greater than or equal 3157 / 077 ? Partial derivative 0000 / 100 @ ------------ 3105 / 101 A Nabla, del 3102 / 102 B Inifinity 3121 / 103 C Capital psi 3106 / 104 D Capital phi 3173 / 105 E Left arrow 3140 / 106 F Logical not 3114 / 107 G Capital lambda 2066 / 110 H Paragraph 3174 / 111 I Upward arrow 3134 / 112 J Intersection 2047 / 113 K Section 3127 / 114 L Capital omega 3136 / 115 M Logical and 3110 / 116 N Is approximate to 3176 / 117 O Downard arrow 0000 / 120 P (Spare location rings bell to indicate error) 3107 / 121 Q Capital gamma 3112 / 122 R Capital theta 3123 / 123 S Capital sigma 3175 / 124 T Right arrow 3130 / 125 U Captial xi 3101 / 126 V Variation, proportional to 3111 / 127 W Similar or equal to 3117 / 130 X Identical to 3131 / 131 Y Capital upsilon 3104 / 132 Z Capital Delta 0000 / 133 [ -------------- 0000 / 134 \ -------------- 0000 / 135 ] -------------- 3043 / 136 ^ Horizantal Connector 3062 / 137 _ Bottom left summation 3064 / 140 ` Bottom vertical summation connector 3141 / 141 a Small alpha 3142 / 142 b Small beta 3161 / 143 c Small psi 3146 / 144 d Small phi 3145 / 145 e Small epsilon 3166 / 146 f Function 3154 / 147 g Small lambda 3150 / 150 h Small eta 3151 / 151 i Small iota 3135 / 152 j Union 3153 / 153 k Small kapa 3167 / 154 l Small omega 3137 / 155 m Logical or 3156 / 156 n Small nu 2060 / 157 o Degree 3162 / 160 p Small rho 3147 / 161 q Small gamma 3152 / 162 r Small theta 3163 / 163 s Small sigma 3164 / 164 t Small tau 3170 / 165 u Small xi 3113 / 166 v Times, cross product 3172 / 167 w Small zeta 3143 / 170 x Small chi 3171 / 171 y Small upsilon 3144 / 172 z Small delta 0000 / 173 { --------------- 0000 / 174 | --------------- 0000 / 175 } --------------- 3063 / 176 ~ Top vertical summation connector 0000 / 177 Delete key is not allowed > / E N D O F T A B L E / ROUTINE TO VALIDATE AND EXTRACT A TECH CHARACTER CODE FROM THE TABLE TECVAL, XX / VALIDATE TECH CHARACTER JMS BHOOK / HOOK to BLAST to TEC8VAL / check for 8 bit character comming in /a233 JMP TEC8CH / No skip return if char was 8 bit /A237 / Skip return if 7 bit was I/P /A237 / NEXT BIT DONE IN BLAST AS NO ROOM FOR IT HERE /A237 /D237TEC7BIT,TAD TECTMP / Get the character for translation /a233 /D237 AND P177 / MASK OFF TO 7 BIT CHARACTER /D237 TAD (-41) / SUBTRACT OFF UNUSED CODES SPA / IS CHARACTER IN LEGAL RANGE? JMP I TECVAL / NO, TAKE ERROR RETURN TAD (TCMAP) / YES, COMBINE WITH TABLE ADDRESS DCA TECTMP / STORE POINTER INTO MAP TABLE TAD I TECTMP / PICK UP MAPED TECH CHARACTER CODE SNA / IS IT A VALID CHARACTER ? JMP I TECVAL / NO, TAKE ERROR RETURN TEC8CH, / HERE IF 8 BIT I/P. /A237 SNA / AC=0 IF NOT IN 8 BIT TABLE /A237 JMP TEC8RTN / IF SO, JUST RETURN /A237 DCA TECTMP / STORE CHARACTER FOR LATER USE /m233 TAD TECTMP / BUILD GRAPHIC SET SELECTION / G1 = 61, G2 = 62, G3 = 63 R3L / SELECTION CONTAINED IN AC 0 - 2 AND (3) / MASK OFF LOW ORDER BITS TAD (60) / BUILD ASCII CHARACTER DCA TECSET / STORE ASCII CHARACTER IN LIST TAD TECTMP / GET SAVED TECH CHARACTER AND P177 / MASK FOR 7 BIT CHARACTER DCA TECMAP / STORE ASCII CHARACTER IN LIST ISZ TECVAL / BUMP TO NORMAL RETURN TEC8RTN,JMP I TECVAL / RETURN TO CALLER /m233 TECTMP, .-. / TEMPORARY LOCATION TO HOLD TECH CHARACTER TECSET, .-. / VALUE OF G SET FOR TECH CHARACTER TECMAP, .-. / VALUE OF MAPPED TECH CHARACTER X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------------- PAGE FIELD 5 RELOC *0 /*************************************************************************** /**** START OF OVERLAY **** /*************************************************************************** OV2NUM=OV2NUM+200 / NEW OVERLAY OVRBLK=OV2NUM%200+DLOEDO+36 / DISK BLOCK WHERE OVERLAY IS LOADED RELOC RELOC OVLAY2 OV2NUM /*************************************************************************** / ALTERNATE INPUT LINE ROUTINE ENTRY POINT (RETURNS TO SEARCH OVERLAY) /*************************************************************************** OVAGET= .-OVLAY2+OV2NUM / ALTERNATE GET OVERLAY ENTRY ALTGET, JMS CLREOL / CLEAR TO END OF LINE AFTER PROMPT TEXT ALTCLR, CLA / SET UP FOR A CLEAR OPERATION DCA GETLEN / CLEAR NUMBER OF CHARACTERS IN BUFFER ALTNXT, JMS ALTCHR / GO GET CHARACTER FROM KEYBOARD DCA GETTRM / SAVE THE CHARACTER JUST ENTERED BY USER TAD GETTRM / PICK UP THE CHARACTER JUST ENTERED BY USER TAD (-40) / COMBINE WITH SPACE CODE SZA CLA / IS CHARACTER A SPACE ? /C189 JMP ALTNEG / NO, GO CHECK FOR A NEGATIVE VALUE TAD (176) / YES, PICK UP GRAPHIC DISPLAY CHARACTER DCA ALTMS2 / STORE FOR GRAPHIC DISPLAY ROUTINE JMP ALTGRA / GO DISPLAY SPACE. /C190 ALTNEG, TAD GETTRM / PICK UP THE CHARACTER JUST ENTERED BY USER SPA / CHECK FOR A REGULAR CHARACTER JMP ALTCAS / IT'S MINUS, IT'S A SPECIAL CHARACTER / DISPLAY REGULAR TEXT CHARACTER JMS ALTTST / CHECK FOR OVERFLOW /A196 TAD GETTRM / GET CHARACTER ENTERED BY THE USER JMP ALTOX2 / SKIP OVER INITIAL JWAIT INSTRUCTION ALTOX1, CIFSYS / CHANGE TO SYSTEM FIELD JWAIT / WAIT FOR SIGNIFICANT EVENT ALTOX2, JMP ALT8BF / Test for 8 bit /A228 / / Here because the char is NOT 8 bit / ALT7DP, TAD GETTRM / Get char back /A228 CIFSYS / CHANGE TO SYSTEM FIELD TTYOU / OUTPUT THE CHARACTER TO THE SCREEN JMP ALTOX1 / BUSY, GO WAIT SOME MORE JMP ALTBUF / GO STORE CHARACTER IN MENU TEXT BUFFER ALTCAS, ZZCASE / CASE CHECK CHARACTER IN AC XXFTBL-1 / CHARACTER TABLE. / EDPWFL; ALTRO / POWER FAIL CODE / EDRBCH; ALTRO / RUBOUT CHARACTER CODE / EDRBWD; ALTRW / RUB WORD CHARACTER CODE / EDNWLN; ALTCR / CARRIAGE RETURN CODE / EDTAB; ALTTAB / TAB / EDRULR; ALTXIT / GOLD:RULER KEYS / EDPAGE; ALTCHK / PAGE KEY / EDCONT; ALTXIT / CONTINUE / EDADVN; ALTXIT / ADVANCE KEY / EDBKUP; ALTXIT / BACKUP KEY / EDSRCH; ALTXIT / SEARCH KEY / EDCONT; ALTXIT / CONTINUE SEARCH KEY / EDPSTE; ALTCHK / PASTE KEY / EDDO; ALTXIT / DO KEY / EDENTR; ALTXIT / ENTER KEY / EDMENU; ALTXIT / GOLD:MENU KEY / EDRQSP; ALTRQS / GOLD:SPACE (REQUIRED SPACE) / EDTC; ALTTEC / TECHNICAL CHARACTER KEY / 0 ALTBAD, JMS BEEPER / ELSE ERROR JMP ALTNXT / AND IGNORE RETURN ALTTEC, JMS ALTCHR / GO GET A CHARACTER FROM THE USER SPA / CHECK FOR A COMMAND CODE JMP ALTCAS / YES, IGNORE TECH CHAR KEY JMS TECVAL / GO VALIDATE AND MAP TECH CHARACTER CODE JMP ALTBAD / NOT A VALID KEY, GO REPORT THE ERROR ALTFND, TAD TECTMP / PICK UP THE MAPPED TECH CHARACTER CODE CMA / MAKE IT NEGATIVE FOR SEARCH STRING DCA GETTRM / SAVE CHARACTER FOR SEARCH TAD TECMAP / GET THE MAPPED ASCII CHARACTER CODE DCA ALTMS2 / STORE FOR GRAPHIC DISPLAY ROUTINE TAD TECSET / PICK UP THE GRAPHICS SET NUMBER TAD (-62) / SUBTRACT OFF MIDDLE VALUE SZA / CHECK FOR G2 CHARACTER SET JMP ALTTC1 / NO, GO CONTINUE CHECK TAD (7400) / YES, SET DEC MULTI NATIONAL SET JMP ALTSET / GO SAVE IT & DISPLAY GRAPHIC CHARACTER ALTTC1, SPA CLA / CHECK FOR G3 CHARACTER SET JMP ALTTC2 / NO, GO SET UP FOR THE G1 SET TAD (7600) / YES, SET DEC TECHNICAL CHARACTER SET JMP ALTSET / GO SAVE IT & DISPLAY GRAPHIC CHARACTER ALTTC2, TAD ("B&77^100) / G1 SET, SET TO US ASCII CHARACTER SET JMP ALTSET / GO SAVE IT & DISPLAY GRAPHIC CHARACTER ALTRQS, TAD (166) / REQUIRED SPACE. DISPLAY GRAPHIC BOTTOM "T" DCA ALTMS2 / STORE FOR GRAPHIC DISPLAY ROUTINE AC7777 / GET EDIT BUFFER CHARACTER FOR SEARCH JMP ALTSAV / GO SAVE IT & DISPLAY GRAPHIC CHARACTER ALTTAB, TAD ("b&177) / TAB CHARACTER. DISPLAY GRAPHIC "HT" CODE DCA ALTMS2 / STORE FOR GRAPHIC DISPLAY ROUTINE TAD (ECTAB) / GET EDIT BUFFER CHARACTER FOR SEARCH JMP ALTSAV / GO SAVE IT & DISPLAY GRAPHIC CHARACTER ALTCR, TAD ("d&177) / CARRIAGE RETURN. DISPLAY GRAPHIC "CR" CODE DCA ALTMS2 / STORE FOR GRAPHIC DISPLAY ROUTINE TAD (ECNWLN) / GET EDIT BUFFER CHARACTER FOR SEARCH ALTSAV, DCA GETTRM / SAVE CHARACTER FOR SEARCH ALTGRA, TAD ("0&77^100) / PICK UP GRAPHIC CHARACTER SET SELECTION ALTSET, DCA ALTMS1 / STORE FOR CHARACTER SET SELECTION JMS ALTTST / CHECK FOR OVERFLOW /A220 JMS MNUGET / GET VALUE OF LANGUAGE WORD MNLANG / LOCATION OF LANGUAGE WORD DCA ALTMS3 / SAVE WORD FOR SCREEN OUTPUT CIFMNU / CHANGE TO MENU FIELD JMS I IOACAL / CALL SYSTEM DISPLAY ROUTINE 0 / USE DEFAULT OUTPUT ROUTINE ALTMSG / CONTROL STRING TO SELECT LANGUAGE ALTMS1 / POINTER TO CHARACTER SET SELECTION CODE ALTMS2 / ASCII CHARACTER TO BE OUTPUT ALTMS3 / POINTER TO COPY OF LANGUAGE WORD ALTBUF, TAD GETTRM / GET CHARACTER ENTERED BY THE USER JMS ALTST1 / SAVE CHARACTER IN MENU FIELD BUFFER ISZ GETLEN / INCREMENT THE CHARACTER COUNTER JMP ALTNXT / GO GET NEXT CHARACTER / TEST FOR OVERFLOW ALTTST, XX / CHECK FOR CHARACTER OVERFLOW AC0001 / BUMP THE COUNT FOR THIS CHARACTER TAD GETLEN / COMBINE WITH THE CHARACTER COUNT TAD ALTLIM / COMPARE AGAINST THE LIMIT SMA CLA / OVERFLOW IF POSITIVE OR ZERO JMP ALTBAD / ERROR - OVERFLOW HAS OCCURED JMP I ALTTST / RETURN TO CALLER / SEE IF OK TO DO PAGE OR PASTE EXIT. ALTCHK, TAD GETLEN / GET CURRENT LENGTH SZA CLA / ACC ZERO ? JMP ALTBAD / NO, GO BEEP THE BUZZER -- /\ JMP ALTXIT / YES, ALLOW EXIT -- ALTXIT, JMS ALTST1 / STORE ZERO IN LAST LOCATION OF BUFFER JMP OV2JRT / RETURN TO CALLER IN SEARCH OVERLAY ALTMS1, XX / CHARACTER SET SELECTION CODE ALTMS2, XX / ASCII CHARACTER TO BE OUTPUT 0 / TERMINATOR FOR ASCII STRING ALTMS3, XX / COPY OF LANGUAGE WORD FROM MENU X=. / INDICATE FIRST FREE LOCATION ON PAGE /------------------------------ PAGE / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - / EXIT DISPATCH TABLE. / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - XXFTBL, EDPWFL; ALTRO / POWER FAIL CODE EDRBCH; ALTRO / RUBOUT CHARACTER CODE EDRBWD; ALTRW / RUB WORD CHARACTER CODE EDNWLN; ALTCR / CARRIAGE RETURN CODE EDTAB; ALTTAB / TAB EDRULR; ALTXIT / GOLD:RULER KEYS EDPAGE; ALTCHK / PAGE KEY EDCONT; ALTXIT / CONTINUE EDADVN; ALTXIT / ADVANCE KEY EDBKUP; ALTXIT / BACKUP KEY EDSRCH; ALTXIT / SEARCH KEY EDCONT; ALTXIT / CONTINUE SEARCH KEY EDPSTE; ALTCHK / PASTE /D189 EDDO; ALTXIT / DO EDDO; ALTBAD / DO - DISABLE KEY FOR NOW /A189 EDENTR; ALTXIT / ENTER KEY /D189 EDENTR; ALTBAD / ENTER KEY - DISABLE KEY FOR NOW /A189 EDMENU; ALTXIT / GOLD:MENU KEY EDRQSP; ALTRQS / GOLD:SPACE (REQUIRED SPACE) EDTC; ALTTEC / TECHNICAL CHARACTER KEY 0 / END OF TABLE INDICATOR / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - / RUBOUT. / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ALTRO, JMS ALTROR / CALL RUBOUT ROUTINE ONCE JMP ALTNXT / GO GET NEXT CHARACTER / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - / RUBOUT WORD. / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ALTRW, JMS ALTROR / DO A RUBOUT JMS ALTGT1 / PICK UP CHARACTER FROM MENU TEXT BUFFER TAD (-40) / SUBTRACT VALUE FOR A SPACE SZA CLA / SITTING ON A BLANK? JMP ALTRW / NO - DO RUBOUT AGAIN JMP ALTNXT / YES - DONE, GO GET NEXT CHARACTER / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - / DO SCREEN RUBOUT. / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ALTROR, XX / ROUTINE TO RUBOUT A CHARACTER AC7777 / SET UP TO DECREMENT THE COUNT TAD GETLEN / GET THE COUNT OF CHARACTERS ENTERED SO FAR SPA / CHECK FOR A ZERO COUNT JMP ALTCLR / NONE, SO JUST IGNORE THE RUBOUT FUNCTION DCA GETLEN / STORE THE DECREMENTED COUNT OF CHARACTERS CIFMNU / CHANGE TO MENU FIELD JMS I IOACAL / CALL SYSTEM DISPLAY ROUTINE 0 / USE DEFAULT OUTPUT ROUTINE ALTRUB / CONTROL STRING TO RUBOUT FUNCTION JMP I ALTROR / RETURN TO CALLER ALTRUB, TEXT '^R' / RUBOUT BY BAKSPACE-SPACE-BACKSPACE / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - / SETUP ADDRESS VECTOR INTO MENU TEXT BUFFER. / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ALTADR, XX / ROUTINE TO SET THE BUFFER POINTER AC0001 / SET THE ACCUMULATOR TO A VALUE OF ONE TAD GETLEN / PICK UP THE CHARACTER COUNT TAD (MNIBUF-1) / ADD TO THE USER'S BUFFER ADDRESS JMP I ALTADR / RETURN TO CALLER / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - / STORE CHARACTER IN THE MENU TEXT BUFFER. / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ALTST1, XX DCA T1 / SAVE ACCUMULATOR FOR NOW. JMS ALTADR / COMPUTE CURRENT ADDRESS DCA ALTS04 / SAVE ADDRESS. TAD T1 / RESTORE ACCUMULATOR JMS MNUPUT / SAVE IN MENU BUFFER ALTS04, .-. JMP I ALTST1 / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - / GET CHARACTER FROM MENU TEXT BUFFER. / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ALTGT1, XX JMS ALTADR / COMPUTE CURRENT ADDRESS DCA ALTG04 / SAVE ADDRESS. JMS MNUGET / SAVE IN MENU BUFFER ALTG04, .-. JMP I ALTGT1 / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - / GET CHARACTER FROM KEYBOARD BUFFER. / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ALTCHR, XX / GET CHARACTER FROM USER JMP ALTINP / SKIP OVER JWAIT INSTRUCTION ALTWAT, CIFSYS / CHANGE TO SYSTEM FIELD JWAIT / WAIT FOR SIGNIFICANT EVENT ALTINP, CIFSYS / CHANGE TO SYSTEM FIELD XLTIN / GET A CHARACTER FROM THE KEYBOARD JMP ALTWAT / NONE THERE, GO WAIT FOR SOME JMP I ALTCHR / RETURN TO CALLER ALTMSG, TEXT '![(&^S^A![(&^S' / CONTROL STRING FOR GRAPHICS OUTPUT ALT8BF, AND (200) / Check 8th bit /A228 SNA CLA / /A228 JMP ALT7DP / 7 bit job display and Insert it /A228 TAD (62) / Its 8 bit so must be MNC /A228 DCA TECSET / Pretend its a tech /A228 TAD GETTRM / Get char /A228 AND P177 / Strip 8th bit /A228 DCA TECMAP / Store it /A228 TAD TECMAP / Get it back /A228 TAD (2000) / Set precedence of 2 /A228 / We can now rejoin main code as if we /A228 / had found a Tech Char and set up the /A228 / things that TECVAL would do ! /A228 JMP ALTFND X=. / INDICATE FIRST FREE LOCATION ON PAGE /------------------------------ PAGE /*************************************************************************** /**** START OF OVERLAY **** /*************************************************************************** OV2NUM=OV2NUM+200 / NEW OVERLAY OVRBLK=OV2NUM%200+DLOEDO+36 / DISK BLOCK WHERE OVERLAY IS LOADED RELOC RELOC OVLAY2 OV2NUM / / THIS IS A CONTINUATION OF OVVIEW. / IT IS A LOOP THAT PUTS UP THE VIEW MODE SCREEN. / OVVWB1= .-OVLAY2+OV2NUM / COPY VARIABLES FROM LAST OVERLAY TO THIS OVERLAY / FROM SUBR ENTRY POINTS USED AS TEMP VARIABLES ACROSS OVLJMP /D219 TAD I ADVSPC&177 TAD VWX1 /A219 DCA VIEWX1 /D219 TAD I BKPSPC&177 TAD VWX2 /A219 DCA VIEWX2 / TAD CURPTR / SAVE CURRENT TEXT PTR DCA VIEWCP / / DISPLAY NEXT TEXT LINE / VIEWB1, JMS VIEWAC / POSITION CURSOR AT NEXT TEXT LINE TAD I VIEWX1 DCA CURPTR / SET TO START OF LINE JMS LODCHR JMP VIEWB2 / QUIT IF EOF / / DISPLAY NEXT TEXT LINE / VIEWB3, JMS VIEWLK / LOOK UP IN SPECIAL TABLE JMP VIEWB4 / JUMP IF NORMAL (NOT IN TABLE) SNA / AC=SPECIAL GRAPHICS CHAR TO DISPLAY JMP VIEWB5 / JUMP IF IGNORE CHAR DCA VIEWTP / ELSE SAVE TYPE TAD VIEWTP / CHECK FOR PAGE-RULER RAL SMA CLA JMP VIEWB6 / JUMP IF NOT TAD VIEWX3 / PAGES AND RULERS SZA CLA JMP VIEWC1 / QUIT IF NOT WHOLE LINE TAD VIEWTP RTL SMA CLA JMP VIEWPG / JUMP IF PAGE JMS DSPRLN / ELSE DO RULER JMP VIEWC1 / AND QUIT /D190 JMS VWMODE /D190 IFDEF ENGLSH < /D190 IFNDEF ENGCAN < /D190 "B&177 / LEAVE GRAPHICS MODE /D190 > / END IFNDEF ENGCAN /D190 IFDEF ENGCAN < /D190 "3-200 /D190 > / END IFDEF ENGCAN /D190 > / END ENGLSH /D190 IFDEF CANADA < /D190 "3-200 /D190 > / END IFDEF CANADA /D190 IFDEF FRENCH < /D190 "R-200 /D190 > / END IFDEF FRENCH /D190 IFDEF DUTCH < /D190 "4-200 /D190 > / END IFDEF DUTCH VIEWB4, CDFBUF / PUT NORMAL CHAR TAD I CURPTR DCA VIEWTP / SAVE IN TEMP. TAD VIEWTP / GET BACK. AND P177 / CHECK FOR TAB CHARACTER. TAD LITV01 / ... SNA CLA / SKIP IF NOT TAB. JMP VIEWB8 / JMP TO PROCESS THE TAB CHARACTER. / / NOW CONSIDER WHAT TO DISPLAY BELOW TEXT CHAR. / IF CHAR WAS A "REQUIRED SPACE", THEN DISPLAY A "^" UNDERNEATH; / ELSE ATTRIBUTES WILL DETERMINE CHAR BELOW. / TAD VIEWTP / GET TEXT CHAR TAD (-ECSTOV) / WAS CHAR AN OVERSTRIKE SEQUENCE? SNA CLA /M231 JMP VIEWBZ / Dead , find out what type bypass test /A231 JMP VIEWBA / Not dead , display text char /A231 /d231 TAD PUTSC6 / YES: WAS IT REALLY A REQUIRED SPACE? /d231 AND P177 / (IGNORE ATTRIBUTES) /d231 TAD (-ECSPC) /d231 SZA CLA /d231 JMP VIEWBA / NOT REQ SPC , CHECK MCS / / We are here because we found a required space / VIEWSP, TAD VIEWTP / GET CHARACTER TO OUTPUT BACK. /A231 JMS PUTSCH / DISPLAY TEXT CHAR /A231 TAD ("^&177+4000) / YES: DISPLAY "^" BELOW REQUIRED SPACE JMP VIEWB9 / SHOW ATTRIBUTES (SUPERSCRIPT, SUBSCRIPT, "BREAKING", AND / REDUNDANT BOLD) BENEATH TEXT CHAR. / VIEWBA, TAD VIEWTP / GET CHARACTER TO OUTPUT BACK. /M231 JMS PUTSCH / DISPLAY TEXT CHAR /M231 JMP VIEWBC / And now attributes /M231 VIEWBB, CDFMYF / Rejoined here from VIEWBZ so change /A231 / back to buffer field /A231 DCA VIEWTP / Save char with attributes /A231 VIEWBC, TAD VIEWTP / GET CHAR BACK (FOR ATTRIBUTE BITS) RAR BSW AND (17) TAD (VIEWTD) DCA T1 TAD I T1 SNA JMP VIEWB7 / DON'T BOTHER WITH SPACES. VIEWB9, DCA ATR / AND OUTPUT IT (ON THE NEXT LINE). PUTESC / ... "[&177+4000 / "CURSOR DOWN" "B&177+4000 / ... 10+4000 / "BACK SPACE" ATR, 0+4000 / THE ATTRIBUTE OF CHARACTER (OR "^") 33+4000 / "CURSOR UP". "[&177+4000 / ... "A&177 / .... VIEWB7, JMS VIEWAD / BUMP COUNTER JMP VIEWC1 / JUMP IF DONE VIEWB5, ADVSPC JMP VIEWB2 / ELSE ADVANCE PTR JMP VIEWB3 / AND LOOP VIEWB8, TAD VIEWTP / GET THE TAB BACK (WITH ATTRIBUTES) TAD LITV02 / TRANSLATE TO GRAPHICS VIEWB2, TAD (4000+EXGETX) / ETX SYMBOL DCA VIEWTP /D190 JMS VWMODE /D190 "0-200 / ENTER GRAPHICS MODE VIEWB6, CDFMYF / /A192 PUTESC / ENTER GRAPHICS MODE /A192 "(+3600 / /A192 "0-200 / /A192 TAD VIEWTP / GET CHAR JMS PUTSCH JMS MNUGET / PICK UP CURRENT LANGUAGE WORD /A192 MNLANG / LOCATION FOR LANGUAGE WORD /A192 SMA / SKIP IF A NUMBER CODE /A192 IAC / CONVERT TO UPPER CASE ASCII /A192 BSW / PUT BITS INTO PROPER ORDER /A192 DCA VWLNG / STORE IN LINE FOR PUTESC ROUTINE /A192 PUTESC "(+3600 VWLNG, "0 / OVERLAYED WITH LANGUAGE CODE VALUE /A224 TAD VIEWTP / CHECK FOR END SMA CLA JMP VIEWB7 / JUMP IF NOT /D190 JMS VWMODE /D190 IFDEF ENGLSH < /D190 IFNDEF ENGCAN < /D190 "B-200 / LEAVE GRAPHICS MODE /D190 > / END IFNDEF ENGCAN /D190 IFDEF ENGCAN < /D190 "3-200 /D190 > / END IFDEF ENGCAN /D190 > / END IFDEF ENGLSH /D190 IFDEF CANADA < /D190 "3-200 /D190 > / END IFDEF CANADA /D190 IFDEF FRENCH < /D190 "R-200 /D190 > / END IFDEF FRENCH /D190 IFDEF DUTCH < /D190 "4-200 /D190 > / END IFDEF DUTCH VIEWC1, JMP VIEWD1 / GET FIRST CHAR LITV01, -ECTAB LITV02, EXGTAB-ECTAB-4000-EXGETX VIEWX1, 0 / -(# OF TEXT BUF LINES LEFT TO DISPLAY) VIEWX2, 0 / PTR INTO PTRBLK FOR CURRENT DISPLAY LINE VIEWX3, 0 / CURRENT COLUMN # VIEWCP, 0 / SAVED CURPTR VIEWTP, 0 / CURRENT CHARACTER BEING DISPLAYED OVRLOF= .-OVLAY2+OV2NUM JMP RLONOF /A192 X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------------- PAGE VIEWPG, CDFBUF / GET CHAR BACK TAD I CURPTR JMS I TLITEA / PUT PROPER PAGE MARKER JMP VIEWC1 / AND QUIT TLITEA, PGECHO / **TEMP FOR OS/ 8 LIT POOL LIMIT BYPASS / / SET LOOP COUNTER AND CURLIN AND CURSOR POSITION / VIEWAC, XX CDFMYF TAD VIEWX2 / GET LINE LOOP COUNTER STL RAL / TIMES 2, +1 DCA CURLIN / =LINE NUMBER FOR PCUR DCA VIEWX3 / CLEAR CHAR LOOP COUNTER JMS PCUR / MOVE CURSOR TO START OF LINE JMP I VIEWAC / AND RETURN / / TEST LOOP COUNTER, TAKE SKIP RTN IF NOT DONE / VIEWAD, XX CDFMYF ISZ VIEWX3 / BUMP COUNTER TAD WIDNAR / WIDE SCREEN MODE? /M192 SNA CLA / SKIP IF NOT. COMPUTE MAX NARO WIDTH /M192 TAD (-WIDTH+COLM81) / COMPUTE MAX WIDE WIDTH TAD (-COLM81) / COMPUTE MAX NARO WIDTH TAD LOWLIM / Bais by start colm #. TAD VIEWX3 / SEE IF WITHIN LINE SPA CLA / SKIP IF YES. ISZ VIEWAD / SKIP RETURN WHEN DONE JMP I VIEWAD /D190 / SUBR VWMODE -- ENTER/EXIT GRAPHICS MODE. /D190 / DOES NOT OUTPUT REDUNDANT ESCAPE SEQUENCES. /D190 / CHANGED TO PUT OUT "(" BEFORE CHARACTER FOR VT-278. /D190 / /D190 / CALL: /D190 / / AC & DF DON'T MATTER /D190 / JMS VWMODE /D190 / CHAR / ASCII CODE OF CHAR TO OUTPUT /D190 / /D190 VWMODE, XX /D190 CLA /D190 CDFMYF /D190 TAD I VWMODE /D190 CIA /D190 TAD VWMOD1 /D190 SNA CLA /D190 JMP VWMOD2 /D190 TAD I VWMODE /D190 DCA VWMOD1 /D190 PUTESC /D190 "(+3600 /D190 VWMOD1, .-. /D190 VWMOD2, ISZ VWMODE /D190 JMP I VWMODE VIEWD1, CDFMYF ISZ VIEWX1 / BUMP LINE PTR ISZ VIEWX2 / AND COUNTER JMP VIEWB1 / LOOP IF MORE LINES TO DO TAD VIEWCP DCA CURPTR / ELSE RESTORE CURPTR TAD CURTMP / RESTORE CURSOR POSITION DCA CURSOR OVLJMP OVVWDX VIEWLK, XX / LOOK UP FOR SPECIALS CDFMYF AND (7777-200) / IGNORE BOLD BIT DCA T1 TAD (VIEWTB-1) DCA X0 / INIT TABLE SEARCH PTR VIEWL1, TAD I X0 SNA JMP I VIEWLK / ZERO MARKS END (NOT SPECIAL) TAD T1 / COMPARE SZA CLA JMP VIEWL1 / LOOP IF NOT EQUAL TAD (VIEWTC-VIEWTB) / ELSE GET VALUE TAD X0 DCA T1 TAD I T1 SMA SZA TAD CHRATR / ADD ATTRIBUTES TO SOFT SPACES ISZ VIEWLK / BUMP TO OK RETURN JMP I VIEWLK / AND TAKE IT VIEWTB, / LOOK UP TABLE -ECMDFL / LINE MOD FLAG -ECNWLN / NEW LINE -ECWWLN / WORD WRAP -ECHYLN / HYPH WRAP -ECPGRF / END PARA -ECENLN / CENTERED LINE -ECSLPT / SELECT POINT -ECNWPG / NEW PAGE -ECPMRK / PAGE MARKER -ECPCT1 / START PRINT CONT. -ECPCT2 / END PRINT CONT. -ECSTRL / RULER START -ECJSPC / JUSTIFY SPACE VIEWTC, 0 / *** BELONGS TO TWO TABLES: / VIEWTB: END OF TABLE / VIEWTC: VALUE FOR ECMDFL / FLAG BITS USED IN VIEWTC: / 4000=END OF LINE / 6000=PAGE / 7000=RULER 4000+EXGNLN / NEW LINE (CR) 4000+EXGWLN / WORD WRAPPED LINE (DEGREE) 4000+EXGHLN / HYPH WRAPPED (-) 4000+EXGPGF / PARA (T) 4000+EXGCEN / CENTERED LINE (+) 4000+EXGSLC / SELECT POINT (SOLID DIAMOND) 6000 6000 6000 6000 7000 EXGJSP / / VIEWTD -- ATTRIBUTE TRANSLATE TABLE / / TABLE VIEWTD IS INDEXED BY THE ATTRIBUTE FIELD OF THE / CURRENT CHAR (BITS 1-4). / VIEWTD CONTAINS THE CHARACTER THAT APPEARS DIRECTLY BELOW / EACH DOCUMENT CHARACTER IN VIEW MODE TO REVEAL THE / ATTRIBUTES OF THE DOCUMENT CHARACTER. / VIEWTD, / ATTRIBUTE TRANSLATE TABLE 0 / " " - NO ATTRIBUTE 0 / " " - BOLDED - NO SPECIAL CHAR 0 / " " - UNDERLINED - NO SPECIAL CHAR 0 / " " - BOLD & UNDERLINED - NO SPEC CHR IFNDEF FRENCH < "Q&177+40+4000 / "q" - SUPERSCRIPT "Q&177+4000 / "Q" - BOLDED SUPERSCRIPT "A&177+40+4000 / "a" - SUBSCRIPT "A&177+4000 / "A" - BOLDED SUBSCRIPT > / END IFNDEF FRENCH IFDEF FRENCH < "A+40+4000 / "a" - SUPERSCRIPT "A+4000 / "A" - BOLDED SUPERSCRIPT "Q+40+4000 / "q" - SUBSCRIPT "Q+4000 / "Q" - BOLDED SUBSCRIPT > / END IFDEF FRENCH "/&177+4000 / "/" - HYPHEN "/&177+4000 / "/" - HYPHEN & BOLDED "/&177+4000 / "/" - HYPHEN & UNDERLINED "/&177+4000 / "/" - HYPHEN, UNDERLINED, & BOLDED IFNDEF FRENCH < "Q&177+40+4000 / "q" - HYPHEN & SUPERSCRIPT "Q&177+4000 / "Q" - HYPHEN & BOLDED SUPERSCRIPT "A&177+40+4000 / "a" - HYPHEN & SUBSCRIPT "A&177+4000 / "A" - HYPHEN & BOLDED SUBSCRIPT > / END IFNDEF FRENCH IFDEF FRENCH < "A+40+4000 / "a" - HYPHEN & SUPERSCRIPT "A+4000 / "A" - HYPHEN & BOLDED SUPERSCRIPT "Q+40+4000 / "q" - HYPHEN & SUBSCRIPT "Q+4000 / "Q" - HYPHEN & BOLDED SUBSCRIPT > / END IFDEF FRENCH / +++ WE JUST GOT CALLED FROM EITHER OVINIT OR OVMENU IN OVERLAY #1 /A177 / /A177 / THIS ROUTINE IS CALLED FROM OVINIT AND OVMENU TO CHECK /A177 / THE MNSTAT (EDITOR STATUS WORD) AND MODIFY THE CASE-TABLE /A177 / AT RULOFF (IN WPEDIT) SUCH THAT RULERS ARE EITHER ON OR OFF /A177 / /A177 / MNSTAT = 0 OR 1 ... RULERS ON /A177 / MNSTAT = 2 OR 3 ... RULERS OFF /A177 / /A177 RLONOF, JMS MNUGET / GET THE EDITOR-STATUS-WORD /A177 MNSTAT /A177 TAD (-2) /A177 CLA / (FORCE RULERS TO BE ON ALL THE TIME) /D177 SPA CLA / RULERS ON OR OFF? /A177 TAD (PUTLNR-PUTLN3) / ...ON... /A177 TAD (PUTLN3) / ...OFF.. /A177 DCA RULOFF / MODIFY THE TABLE /A177 JMP OV2JRT / RETURN TO OVERLAY 2 JUMP ROUTINE /A177 X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------------- PAGE /*************************************************************************** /**** START OF OVERLAY **** /*************************************************************************** OV2NUM=OV2NUM+200 OVRBLK=OV2NUM%200+DLOEDO+36 / DISK BLOCK WHERE OVERLAY IS LOADED RELOC RELOC OVLAY2 OV2NUM OVSLID= .-OVLAY2+OV2NUM / SOLIDIFY TEXT ENTRY JMP ESOLID OVSOFT= .-OVLAY2+OV2NUM / SOFTEN TEXT ENTRY JMP ESOFT OVDCEL= .-OVLAY2+OV2NUM / FIND NEXT SEGMENT PROCESSING DOCCEL, CDFBUF TAD I CURPTR JMP DOCC21 DOCC22, ADVPTR /FIND THE EOL MARK HLT /SHOULDN'T HAPPEN TO A DOG DOCC21, AND P177 TAD (-ECNWLN) SZA CLA JMP DOCC22 /NOT FOUND YET TAD I CURPTR /CHECK IT BETTER BE A HARD RETURN TAD (-ECNWLN) SZA CLA JMP GODOER /ERROR WRAP RETURN DOCC17, AC0001 /FORWARD TO BEGINNING OF NEXT LINE CURMOV NOP /DON'T CAR ABOUT EOF TAD CURPTR /SAVE CURRENT PTR DCA IX1 TAD LINE23 /FIND OUT WHAT PREVIOUS LINE ENDER DCA CURPTR /WAS BKPPTR HLT /CAN'T HAPPEN TAD (-ECNDRL) /END RULER? SNA CLA JMP GODOER /YES ERROR TAD IX1 /RESTORE PTR DCA CURPTR TAD I CURPTR /CHECK IF SKIPPING IS NECESSARY AND P177 /STRIP MODE BITS TAD (-ECNWPG) /SKIP PAGE MARKS CONTROL BLOCKS ETC. SNA CLA JMP DOCCPG /GO CHECK IT OUT DOCC13, CDFMYF TAD CLMPLL /CHECK FOR LOWER LIMIT OF COLUMN CIA /<=CURSOR TAD CURSOR SMA CLA JMP DOCC18 /YES GO EXECUTE DOCC14, JMS LODCHR /GET CHAR UNDER PTR HLT /CATASTROPHIC ERROR AND P177 /CHECK FOR TAB OR EOL ZZCASE DCCTB3-1 / ECTAB; DOCC15 /TAB DO LIMIT CHECK / ECNWLN; GODO11 /NEWLINE DO EMPTY COLUMN / ECMDFL; DOCC16 /MODIFIED FLAG SKIP / ECSTRL; GODOER /START RULER ERROR / ECNWPG; GODOER /NEW PAGE ERROR / 0 ISZ CURSOR /BUMP CURSOR DOCC16, ADVSPC /TRY NEXT CHARACTER HLT JMP DOCC14 DOCC15, AC0001 /FIND FIRST CHAR OF COLUMN CURMOV HLT JMP DOCC13 /GO CHECK BOUNDARIES DOCC18, OVLJMP /GO TRY NEXT COLUMN OVDOCC / DOCCPG DO PAGE AND CONTROL BLOCK HANDLING / / DOCCPG, TAD I CURPTR /GET CHARACTER AND CHECK TYPE ZZCASE DCCTB4-1 / ECNWPG; DOCC17 /NEW PAGE CHECK NEXT LINE / ECPMRK; DOCC17 /PAGE MARK GO CHECK NEXT LINE / ECPCT1; DCPG01 /CONTROL BLOCK SKIP / ECPCT2; GODOER /END CONTROL BLOCK IS ERROR / 0 HLT /SHOULD NOT BE ABLE TO GET HERE DCPG01, CDFMYF DCA SETRUL /SET FLAG TO FIND OUT IF RULER PASSED DCPG02, AC0001 /SEARCH FOR END CONTROL CURMOV HLT TAD I CURPTR /CHECK FOR END CONTROL AND SELECT POINT TAD (-ECPCT2) SNA JMP DCPG03 /END CONTROL FOUND BREAK OUT TAD (ECPCT2-ECSLPT) SZA JMP DCPG02 /NOT THIS TIME CHARLEY DCA I CURPTR /DELETE SELECT POINT SLNMOD /SET LINE MODIFIED JMS REJUST /REJUSTIFY THE LINE JMP EIFIX /DONE DCPG03, CDFMYF TAD SETRUL /RULER PASSED? SNA CLA JMP DOCC17 /NO GO DO NEXT COLUMN JMS BEEPER /DIE YOU GRAVY SUCKING PIG JMP UNSLCT / GODO11 - SELECT OR END OF LINE DETECTED GODO11, TAD I CURPTR /PICK UP THE BUFFER CHARACTER /A221 TAD (-ECNWLN) /COMPARE AGAINST END OF LINE /A221 SZA CLA /IS THIS A REAL END OF LINE /A221 JMP GODOSE /NO, GO HANDLE SELECT ERROR /A221 OVLJMP /OVERLAY TRANSFER TO DOCC11 OVDC12 /C203 / GODOSE - SELECT MARK ERROR DETECTED ON TEXT LINE /A221 GODOSE, TAD LINE23 /PICK UP BEGINNING OF LINE POINTER /A221 JMP GODOBP /GO STORE BUFFER POINTER /A221 / GODOER - ERROR CONDITION DETECTED GODOER, TAD IX1 /PICK UP THE SAVED BUFFER POINTER GODOBP, DCA CURPTR /RESET THE BUFFER POINTER /C221 OVLJMP /OVERLAY TRANSFER TO DOCCER OVDOER / COLUMNAR CUT CASE TABLES / / DCCTB3, ECTAB; DOCC15 /TAB DO LIMIT CHECK ECNWLN; GODO11 /NEWLINE DO EMPTY COLUMN ECMDFL; DOCC16 /MODIFIED FLAG SKIP ECSTRL; GODOER /START RULER ERROR ECNWPG; GODOER /NEW PAGE ERROR 0 DCCTB4, ECNWPG; DOCC17 /NEW PAGE CHECK NEXT LINE ECPMRK; DOCC17 /PAGE MARK GO CHECK NEXT LINE ECPCT1; DCPG01 /CONTROL BLOCK SKIP ECPCT2; GODOER /END CONTROL BLOCK IS ERROR 0 X=. /--------------------- PAGE / ESOLID SOLIDIFY TEXT BY REPLACINF SOFT RETURNS / / ESOLID, TSTSLT JMP EIBAD SOLID1, CDFBUF TAD I CURPTR JMP SOLID2 SOLID3, ADVSPC JMP EIBAD SOLID2, ZZCASE SLIDTB-1 / ECNWLN; SOLID4 / HARD RETURN DO NOTHING / ECPGRF; SOLID4 / PARA. MARK DO NOTHING / ECENLN; SOLID4 / CENTER DO NOTHING / ECWWLN; SOLID5 / WORD WRAP SOLIDIFY / ECHYLN; SOLID5 / HYPHEN WRAP SOLIDIFY / ECSLPT; SDSFEX / SELECT POINT DELETE AND EXIT / ECMDFL; SOLID7 / MODIFIED FLAG EXECUTE / ECRMFL; SOLID7 / DITTO / ECSTRL; SOLID4 / SKIP RULERS / ECPMRK; SOLID4 / SKIP PAGE MARKS / ECPCT1; SOLID4 / SKIP PRINT CONTROL / ECPCT2; SOLID4 / DITTO / ECNWPG; SOLID4 / SKIP NEW PAGE / 0 ISZ CURSOR / BUMP CURSOR TO REFLECT CURMOV / KEEP CURMOV HAPPY JMP EIBAD / CATASTROPHIC ERROR JMP SOLID3 / DO NEXT CHAR SOLID5, TAD (ECNWLN) / SOLIDIFY LINE ENDER DCA I CURPTR SOLID4, AC0001 CURMOV JMP EIBAD JMP SOLID1 SOLID7, CURMOV / REJUSTIFY ON FLAG JMP EIBAD JMP SOLID1 / FETCH CHAR DIRECT / ESOFT SOFTEN TEXT BY REPLACING HARD RETURNS / / ESOFT, TSTSLT JMP EIBAD CDFBUF JMP SOFT2 SOFT3, AC0001 CURMOV JMP EIBAD SOFT2, TAD I CURPTR TAD (-ECNWLN) SNA JMP SOFT5 TAD (ECNWLN-ECSLPT) SZA CLA JMP SOFT3 SDSFEX, TAD (ECMDFL) / PUT MODIFIED FLAG IN TO DCA I CURPTR / DELETE SELECT POINT DCA EDMODE / RESET EDIT MODE JMP EIFIX / GO GET NEXT COMMAND SOFT5, TAD (ECMDFL) / SOFTIFY LINE ENDER DCA I CURPTR CURMOV JMP EIBAD JMP SOFT2 / SOLIDIFY AND SOFTEN TEXT CASE TABLES / / SLIDTB, ECNWLN; SOLID4 / HARD RETURN DO NOTHING ECPGRF; SOLID4 / PARA. MARK DO NOTHING ECENLN; SOLID4 / CENTER DO NOTHING ECWWLN; SOLID5 / WORD WRAP SOLIDIFY ECHYLN; SOLID5 / HYPHEN WRAP SOLIDIFY ECSLPT; SDSFEX / SELECT POINT DELETE AND EXIT ECMDFL; SOLID7 / MODIFIED FLAG EXECUTE ECRMFL; SOLID7 / DITTO ECSTRL; SOLID4 / SKIP RULERS ECPMRK; SOLID4 / SKIP PAGE MARKS ECPCT1; SOLID4 / SKIP PRINT CONTROL ECPCT2; SOLID4 / DITTO ECNWPG; SOLID4 / SKIP NEW PAGE 0 X=. /--------------------- PAGE /*************************************************************************** /**** START OF OVERLAY **** /*************************************************************************** OV2NUM=OV2NUM+200 / NEW OVERLAY OVRBLK=OV2NUM%200+DLOEDO-1+37 / DISK BLOCK WHERE OVERLAY IS LOADED RELOC RELOC OVLAY2 OV2NUM / DOCLPS DO COLUMN PASTE / / PASTE CHARACTERS INTO THE TEXT BUFFER UNTIL THE PASTE BUFFER IS / EMPTY, OR THE END OF A LINE SEGMENT IS REACHED, OR AN ILLEGAL / CHARACTER IS FOUND IN THE PASTE BUFFER. OVDOPS= .-OVLAY2+OV2NUM DOCLPS, CDFBUF TAD I PSTPTR /GET CHAR FROM PASTE BUFFER SNA /ZERO IS END OF PASTE BUFFER /M215 /(SHOULDN'T HAPPEN HERE) /M215 JMP EIFIX /DONE NO MORE TO PASTE /M215 DCP001, AND P177 /STRIP MODE BITS ZZCASE /COMPARE AGAINST LIST CLPTB1-1 / ECNWLN; DCP002 /END OF SEGMENT / ECNWPG; DCP003 /ILLEGAL CHAR TO PASTE DUMP TEXT / ECSTRL; DCP021 /START OF RULER, SKIP TO END OF RULER / 0 TAD I PSTPTR /RETRIEVE CHAR INSCHR /PASTE IT IN DCP017, JMS DCPGNC /GO GET NEXT CHAR JMP DCPXIT /RAN OUT OF PASTE TEXT SO QUIT /C215 SZA /ZERO IS END OF PASTE BUFFER /A215 JMP DCP001 /GO PASTE NEXT CHAR IN DCPXIT, JMS DCPEOL /DO END OF SEGMENT PROCESSING /A215 NOP /END OF BUFFER RETURN /A215 JMP EIFIX /ALL DONE, GO GET NEXT EDIT COMMAND /A215 / DCP003 DUMP PASTE TO TEXT BUFFER / / UNDER AN ERROR CONDITION THE PASTE BUFFER IS DUMPED TO THE / TEXT BUFFER WITHOUT AND FURTHER FORMATTING. DCP003, CDFBUF /CHANGE TO BUFFER FIELD /A215 TAD I PSTPTR /FETCH PASTE CHAR DCP004, SNA JMP EIFIX /END OF PASTE BUFFER TAD (-ECSTRL) /IS IT A RULER? SNA CLA JMP DCP005 /SKIP TO END OF RULER BEFORE RESUMING /PASTE TAD I PSTPTR /PASTE CHAR INTO TEXT BUFFER INSCHR DCP006, JMS DCPGNC /FETCH NEXT CHARACTER JMP EIFIX /DONE NO MORE PASTE JMP DCP004 /PROCESS NEXT CHARACTER DCP005, JMS DCPGNC /SKIP TO END OF RULER JMP EIFIX TAD (-ECNDRL) SNA CLA JMP DCP006 JMP DCP005 / DCP021 SKIP RULERS IN PASTE BUFFER DCP021, JMS DCPGNC /SKIP TO END OF RULER JMP EIFIX TAD (-ECNDRL) SNA CLA JMP DCP017 JMP DCP021 / DCPEOL END OF SEGMENT PROCESSING /C215 / / WHEN AN EOL MARK IS FOUND IN THE PASTE BUFFER THIS IS TAKEN AS / DELIMITING A SEGMENT OF COLUMN TEXT. IF THE NEXT CHARACTER AFTER / THE END OF THE SEGMENT IS A HARD RETURN THEN DON'T INSERT A / TRAILING TAB AFTER THE SEGMENT. DCPEOL, XX /DO END OF SEGMENT PROCESSING /A215 JMS LODCHR /GET NEXT CHAR FROM TEXT BUFFER JMP I DCPEOL /END OF FILE - RETURN TO CALLER /C215 TAD (-ECNWLN) SNA CLA JMP DCP007 /GO FIND THE NEXT PLACE TO PASTE TEXT TAD (ECTAB) INSCHR DCP007, SLNMOD JMS REJUST ISZ DCPEOL /BUMP RETRUN ADDRESS /A215 JMP I DCPEOL /RETURN TO CALLER /A215 / FOUND END OF SEGMENT IN PASTE BUFFER DCP002, JMS DCPEOL /GO DO END OF SEGMENT PROCESSING /C215 SKP /END OF TEXT BUFFER DETECTED /C215 JMP DCP008 /GO FIND THE NEXT LINE ENDER DCPNWL, TAD (ECNWLN) /PICK UP LINE ENDER TO FINISH COLUMN /A215 INSCHR /INSERT THE LINE ENDER /A215 SLNMOD /SET THE LINE MODIFIED FLAG /A215 JMS REJUST /FIX THE LINE /A215 JMP DCP009 /NOW TREAT END OF TEXT AS A SHORT LINE /A215 / DCP008 FIND NEXT LINE ENDER / / THE LINE FOLLOWING THE NEXT LINE ENDING IN A HARD RETURN IS THE / LINE IN WHICH TO INSERT THE NEXT COLUMN SEGMENT FROM THE PASTE / BUFFER. IF A PAGE MARK/CONTROL BLOCK IS FOUND THEN THE PAGE / MARK OR THESTART CONTROL END CONTROL PAIR IS SKIPPED AND THE / SEARCH PROCEEDS FOR THE HARD RETURN. IF A RULER OR END OF / TEXT IS FOUND PRIOR TO A LINE ENDING IN A HARD RETURN THEN / DUMP THE TEXT WITHOUT CROSSING THIS VIRTUAL BOUNDARY. IF THE / HARD RETURN IS FOUND THEN GO FIND THE CORRECT COLUMN POSITION. DCP008, TAD I CURPTR /FETCH THE NEXT CHAR FROM THE TEXT /C216 TAD (-ECNWLN) /HARD RETURN? /C216 SNA CLA JMP DCP009 /YES GO FIND COLUMN POSITION TAD I CURPTR /IS CHAR A PAGE MARK? AND P177 TAD (-ECNWPG) SNA CLA /C216 JMP DCP010 /YES, GO SKIP TO NEXT LOGICAL POSITION SKP / NOT NECESSARY TO SET THE LINE MOD /A193 DCP011, SLNMOD / FLAG AFTER EVERY CHARACTER ADVSPC /GO GET NEXT CHAR JMP DCPNWL /RAN OUT OF TEXT SO GO ADD A LINE ENDER /C215 TAD (-ECSTRL) /IS CHAR A RULER? /C216 SNA CLA /M216 JMP DCP006 /YES, GO DUMP THE REST OF TEXT /M216 CURMOV /FIXUP PTRBLK /M216 HLT /SHOULD NEVER HIT EOF HERE /M216 JMP DCP008 /TEST NEXT CHARACTER / DCP010 CHECK PAGE MARKS / / IF WHILE SEARCHING FOR THE HARD RETURN EOL A PAGE MARK, NEW / PAGE, OR START/END CONTROL IS SEEN THEN CHECK. SKIP NEW PAGE / AND PAGE MARK. SKIP TO END OF CONTROL BLOCK ON START CONTROL / AND DUMP TEXT DUE TO ERROR ON END CONTROL. DCP010, TAD I CURPTR ZZCASE CLPTB2-1 / ECNWPG; DCP011 /NEW PAGE / ECPMRK; DCP011 /PAGE MARK / ECPCT1; DCP012 /START CONTROL / ECPCT2; DCP006 /END CONTROL / 0 DCP012, AC0001 CURMOV JMP DCP006 TAD I CURPTR TAD (-ECPCT2) SNA CLA JMP DCP011 JMP DCP012 / DCP015 SKIP TO END OF CONTROL BLOCK DCP015, AC0001 /MOVE FORWARD A CHARACTER CURMOV JMP DCP006 /END OF TEXT DUMP PASTE BUFFER TAD I CURPTR /FETCH CHARACTER TAD (-ECPCT2) /END CONTROL? SNA CLA JMP DCP009 /YES GO PROCESS BEGINNING OF LINE JMP DCP015 /TRY NEXT CHARACTER / DCP013 DUMP TEXT BEFORE RULER / / IF A RULER CHANGE OCCURS DUMP THE PASTE BUFFER BEFORE THE / RULER. DCP013, TAD X5 /RESTORE THE CURSOR POSITION DCA CURPTR AC7777 /BACK UP OVER THE RULER CURMOV HLT JMP DCP006 /AND DUMP THE REST OF THE PASTE BUFFER X=. /--------------------- PAGE / DCP009 CHECK LINE FOLLOWING / / FINDING THE CORRECT COLUMN POSITION REQUIRES THAT THE LINE IN / WHICH THE HARD RETURN LINE ENDER WAS FOUND HAVE NO INTERVENING / RULERS BETWEEN IT AND THE LINE IN WHICH THE COLUMN IS TO GO. / IF THE LINE IMMEDIATELY FOLLOWING THE LINE WITH A HARD RETURN IS / A PAGE MARK OR CONTROL BLOCK THEN YOU WANT TO SKIP OVER THAT AND / GO TO THE NEXT TEXT LINE FOLLOWING SO AS TO CONFORM WITH COLUMN / CUT. DCP009, AC0001 /POSITION TO FIRST CHAR OF NEXT LINE CURMOV JMP DCPCHK /RAN OUT OF TEXT - TREAT AS SHORT LINE /C215 TAD CURPTR /SAVE CURRENT PTR POSITION DCA X5 TAD LINE23 /AND CHECK LINE ENDER IMMEDIATELY DCA CURPTR /PRECEDING BKPPTR HLT /NFW TAD (-ECNDRL) /WASN'T A RULER WAS IT? SNA CLA JMP DCP013 /BACKUP OVER IT AND DUMP THE TEXT OUT TAD X5 /RESTORE PTR DCA CURPTR TAD I CURPTR /CHECK FOR PAGE MARK OR CONTROL BLOCK ZZCASE CLPTB3-1 / ECNWPG; DCP009 /NEW PAGE SKIP TO NEXT LINE / ECPMRK; DCP009 /PAGE MARK SKIP TO NEXT LINE / ECPCT1; DCP015 /START CONTROL SKIP TO LINE AFTER END CONTROL / ECPCT2; DCP006 /END CONTROL ERROR DUMP REMAINING TEXT / 0 /\ JMP DCPCHK /NOT A BAD SITUATION GO DO COLUMN FIND /C215 / DCPCHK CHECK TO SEE IF THERE IS ANY MORE TEXT IN PASTE BUFFER /A215 DCPCHK, JMS DCPGNC /GO GET NEXT CHAR FROM PASTE BUFFER /A215 JMP EIFIX /RAN OUT OF PASTE TEXT SO QUIT /A215 SNA CLA /ZERO IS END OF PASTE BUFFER /A215 JMP EIFIX /DONE NO MORE TO PASTE /A215 /\ JMP DCP014 /FALL INTO DCP014 ROUTINE /A215 / DCP014 FIND PROPER COLUMN POSITION / / THE CURSOR POSITION IN THE LINE IS CHECKED AGAINST THE UPPER / AND LOWER LIMITS OF THE COLUMN. IF IT IS WITHIN THE RANGE / THEN THE COLUMN IS FOUND AND THE NEXT LINE SEGMENT IS PASTED / IN. OTHERWISE THE SEARCH CONTINUES FOR THE COLUMN. DCP014, CDFMYF /CHECK POSITION AGAINST LOWER LIMIT OF TAD CLMPLL /COLUMN CIA TAD CURSOR SPA CLA JMP DCP016 /MOVE FORWARD TAD CURSOR /CHECK UPPER LIMIT CIA TAD CLMPUL SMA CLA JMP DOCLPS /GO PASTE IN NEXT SEGMENT /C215 / IF THERE IS NO COLUMN BREAK IN THE APPROPRIATE POSITION THEN / THE CURSOR IS MOVE BACKED TO THE BEGINNING OF THE LINE AND THE / REST OF THE PASTE BUFFER IS DUMPED THERE. TAD LINE23 /LINE HAS NO COLUMN BREAK DCA CURPTR /DUMP PASTE BEFORE BEGINNING OF LINE DCA CURSOR CURMOV HLT /NO CAN DO CHARLIE JMP DCP003 /GO DUMP THE PASTE BUFFER /C215 / DCP016 CHECK FOR THE NEXT COLUMN DELIMITER / / DCP016, JMS LODCHR /GET CHAR UNDER PTR JMP DCP019 /END OF TEXT - TREAT AS SHORT LINE /C215 AND P177 /CHECK FOR TABS AND EOLS ZZCASE CLPTB4-1 / ECTAB; DCP018 /TAB DO LIMIT CHECK / ECNWLN; DCP019 /EOL SAYS SHORT LINE OF BAD LINE / ECMDFL; DCP020 /DON'T COUNT MODIFIED FLAGS / ECSTRL; DCP003 /GO DUMP THE REST OF PASTE ON A RULER /C215 / ECNWPG; DCP003 /SAME AS RULER FOR PAGE AND CONTROL /C215 / 0 ISZ CURSOR /UPGRADE POSITION ADVSPC /TRY OUT NEXT CHAR JMP DCP019 /END OF TEXT - TREAT AS SHORT LINE /C215 JMP DCP016 /GO CHECK NEXT DCP020, DCA I CURPTR /DELETE LINE MODIFIED FLAG SLNMOD /AND REJUSTIFY LINE JMS REJUST JMP DCP016 /GO CHECK NEXT DCP019, TAD I PSTPTR /GET CHARACTER FROM PASTE BUFFER /A215 TAD (-ECNWLN) /CHECK FOR A HARD RETURN /A215 SNA CLA /IS THIS A BLANK PASTE LINE ? /A215 JMP DCP002 /YES, GO DO END OF SEGMENT PROCESSING /A215 TAD (ECTAB) /NO, INSERT TAB TO PAD OUT LINE JMS INSERT SLNMOD DCP018, AC0001 /JUSTIFY THE DAMN TAB SO AS TO FIND CURMOV /FIRST CHAR IN COLUMN JMP DCP003 /RAN OUT OF TEXT SO DUMP PASTE BUFFER /C215 JMP DCP014 /GO CHECK COLUMN BOUNDARY / DCPGNC GET NEXT CHAR FROM PASTE BUFFER / / THIS ROUTINE RETRIEVES THE NEXT CHARACTER FROM THE PASTE BUFFER. / IF A CHARACTER IS FETCHED THEN A SKIP RETURN IS TAKEN. ON / FAILURE THE DIRECT RETURN. THE CHARACTER IS RETURNED IN THE AC. / DCPGNC, XX ISZ PSTPTR /POINT TO NEXT CHAR IN PASTE BUFFER JMP DCGNC1 /THERE IS ANOTHER CHAR IN THE CURRENT /BUFFER ISZ PSTBLK /LAST BUFFER EMPTY TRY NEXT TAD PSTBLK /WAS THAT THE LAST BLOCK AVAILABLE TAD (-PSTEND) SNA CLA JMP I DCPGNC /YES NO MORE AVAILABLE TAD (RXERD) /READ NEXT BLOCK OF PASTE BUFFER JMS PSTIO DCGNC1, CDFBUF /FETCH A CHAR TAD I PSTPTR ISZ DCPGNC /TAKE SKIP RETURN JMP I DCPGNC / COLUMN PASTE CASE TABLES / / CLPTB1, ECNWLN; DCP002 /END OF SEGMENT ECNWPG; DCP003 /ILLEGAL CHAR TO PASTE DUMP TEXT ECSTRL; DCP021 /START OF RULER, SKIP TO END OF RULER /C208 0 CLPTB2, ECNWPG; DCP011 /NEW PAGE ECPMRK; DCP011 /PAGE MARK ECPCT1; DCP012 /START CONTROL ECPCT2; DCP006 /END CONTROL 0 CLPTB3, ECNWPG; DCP009 /NEW PAGE SKIP TO NEXT LINE ECPMRK; DCP009 /PAGE MARK SKIP TO NEXT LINE ECPCT1; DCP015 /START CONTROL SKIP TO LINE AFTER END CONTROL ECPCT2; DCP006 /END CONTROL ERROR DUMP REMAINING TEXT 0 CLPTB4, ECTAB; DCP018 /TAB DO LIMIT CHECK ECNWLN; DCP019 /EOL SAYS SHORT LINE OF BAD LINE ECMDFL; DCP020 /DON'T COUNT MODIFIED FLAGS ECSTRL; DCP003 /GO DUMP THE REST OF PASTE ON A RULER /C215 ECNWPG; DCP003 /SAME AS RULER FOR PAGE AND CONTROL /C215 0 X=. /---------------------- PAGE /*************************************************************************** /**** START OF OVERLAY **** /*************************************************************************** OV2NUM=OV2NUM+200 OVRBLK=OV2NUM%200+DLOEDO+36 / DISK BLOCK WHERE OVERLAY IS LOADED RELOC RELOC OVLAY2 OV2NUM OVTC= .-OVLAY2+OV2NUM / USER REQUESTED A TECHNICAL CHARACTER / BUILD A TECHNICAL CHARACTER / / FORMAT / / SD SP GS CH TC ED / / SD = START DEAD / SP = SPACE / GS = GRAPHICS SET G1 - G3 (OCTAL CODE 61 - 63) / TC = TECHNICAL CHARACTER / ED = END DEAD TCCHAR, DCA LNDSUB / Clear temp for line drawing set GETINP / GET NEXT CHARACTER SPA / -AC MEANS COMMAND KEY JMP LNDTST / Test for line drawing set /M223 JMS TECVAL / GO VALIDATE AND MAP TEC CHARACTER JMP EIBAD / BEEP USER, NOT A VALID TECHNICAL CHARACTER TCINS, SLNMOD / SET LINE MODIFIED FLAG TAD (ECSTOV) / YES. BUILD DEAD KEY SEQUENCE JMS INSRL1 / INSERT START DEAD CODE TAD (ECSPC) JMS INSRL1 / INSERT SPACE TAD TECSET / GRAPHIC SET G1 = 61, G2 = 62, G3 = 63 JMS INSRL1 / AND INSERT IT TAD TECMAP / GET MAPPED TECH CHARACTER JMS INSRL1 / AND INSERT IT TAD (ECNDOV) / INSERT END DEAD CODE JMS INSRL1 JMP EIFIX / ALL DONE. GET NEXT INPUT OVFIXP= .-OVLAY2+OV2NUM / TRANSFER MENU BUFFER TO PASTE BUFFER TAD (MUBUF+MNIBUF-1) / ADDRESS TO COPY FROM DCA X0 / SET UP POINTER ADDRESS TAD (PSTEBF-1) / ADDRESS TO COPY TO DCA X1 / SET UP POINTER ADDRESS AAFIXP, CDFMNU / FIELD TO COPY FROM TAD I X0 / PICK UP WORD FROM MENU BUFFER CDFBUF / FIELD TO COPY TO SNA / CHECK FOR THE LAST WORD TO COPY JMP XXFIXP / GO STORE A FINAL ZERO TO END PASTE BUFFER SPA / CHECK FOR A TECHNICAL CHARACTER CODE JMP CCFIXP / YES, GO HANDLE SPECIAL CODE BBFIXP, DCA I X1 / NO, STORE WORD IN PASTE BUFFER JMP AAFIXP / GO GET NEXT WORD CCFIXP, CMA / INVERT TO CORRECT FORM SZA / CHECK FOR A REQUIRED SPACE CODE JMP DDFIXP / NO, GO HANDLE TECHNICAL CHARACTER / BUILD REQUIRED SPACE IN PASTE BUFFER TAD (ECSTOV) / PICK UP START DEAD CODE DCA I X1 / STORE WORD IN PASTE BUFFER TAD (ECSPC) / PICK UP SPACE CHARACTER CODE DCA I X1 / STORE WORD IN PASTE BUFFER TAD (ECSPC) / PICK UP SPACE CHARACTER CODE JMP EEFIXP / GO STORE WORD AND FINISH SEQUENCE / BUILD TECHNICAL CHARACTER IN PASTE BUFFER DDFIXP, DCA ZZFIXP / SAVE MAPPED TECHNICAL CHARACTER TAD (ECSTOV) / PICK UP START DEAD CODE DCA I X1 / STORE WORD IN PASTE BUFFER TAD (ECSPC) / PICK UP SPACE CHARACTER CODE DCA I X1 / STORE WORD IN PASTE BUFFER TAD ZZFIXP / PICK UP SAVED TECHNICAL CHARACTER R3L / POSITION SELECTION BITS IN AC, 0 - 2 AND (3) / MASK OFF LOW ORDER BITS TAD (60) / GRAPHIC SET G1 = 61, G2 = 62, G3 = 63 DCA I X1 / STORE WORD IN PASTE BUFFER TAD ZZFIXP / GET MAPPED TECH CHARACTER AND P177 / MASK OFF 7 BIT ASCII CHARACTER EEFIXP, DCA I X1 / STORE WORD IN PASTE BUFFER TAD (ECNDOV) / PICK UP END DEAD CODE JMP BBFIXP / GO STORE WORD IN PASTE BUFFER XXFIXP, DCA I X1 / STORE ZERO IN PASTE BUFFER JMP OV2JRT / ALL DONE, RETURN TO CALLER ZZFIXP, .-. / LOCATION TO SAVE MAPPED TECHNICAL CHARACTER / THE FOLLOWING ROUTINE MOVED TO BLASTER ON EDIT 237 //////////////////////// / The following code handles 8 bit characters typed after the ALT key /a233 / as the table for TECVAR would be sparse and too large if it was just /a233 / extended to cope with 8 bits. So a table search algorithm is used /a233 / here for the few keys returning 8 bit characters on multinational /a233 / keyboards. /a233 / /TEC8VAL,DCA TECTMP / Save temprarily /a233 / TAD TECTMP / Get it back for test /a233 / AND (200) / Is this a multinational character /a233 / SNA CLA / .....? /a233 / JMP TEC7BIT / No, deal with it elsewhere /a233 / TAD TECTMP / Yes, get the char to be translated. /a233 / AND P377 / Make sure its only 8 bits /a233 / CIA / Make it negative to subtract from /a233 / DCA TECTMP / table entries. Store for later /a233 / TAD (TEC8TB-2) / Get the address of the 8 bit TEC table/a233 / DCA X0 / We know X0 is free as is reset later /a233 / / (Famous last words) /a233 /TEC8LP, ISZ X0 / Skip over TEC char /a233 / TAD I X0 / Get first 8 bit char /a233 / TAD TECTMP / Compare with the 8 bit char entered /a233 / SMA SZA / Are we still before the table entry? /a233 / JMP TEC8RTN / No, therefore not in table /a233 / SZA CLA / Same? /a233 / JMP TEC8LP / No, check rest of table /a233 / TAD I X0 / Yes, get the representative TEC char /a233 / JMP TEC8FND / and process it /a233 / / The next table is O R D E R I M P O R T A N T --------------------- / /TEC8TB, IFDEF ENGLSH < / IFDEF V30FAO < / 0241; 3063 / Upsidedown Bang = Top Vert Summ Connect / 0243; 3065 / Pound Sterling = Top right Summ / 0252; 3051 / a ordinal = Top right Sq Brkt / 0272; 3052 / o ordinal = Bot right Sq Brkt / 0277; 3064 / Upsidedown Question = Bot Vert sum Connect / 0321; 3136 / N tilde = Logical And / 0347; 3075 / c cedilla = Not Equal / 0361; 3137 / n tilde = Logical Or / > / 7777 / > / / IFDEF SPANISH < / 0241; 3063 / Upsidedown Bang = Top Vert Summ Connect / 0243; 3065 / Pound Sterling = Top right Summ / 0252; 3051 / a ordinal = Top right Sq Brkt / 0272; 3052 / o ordinal = Bot right Sq Brkt / 0277; 3064 / Upsidedown Question = Bot Vert sum Connect / 0321; 3136 / N tilde = Logical And / 0347; 3075 / c cedilla = Not Equal / 0361; 3137 / n tilde = Logical Or / 7777 / > / / IFDEF ITALIAN < / 0243; 3041 / Lira symbol = Radical / 0247; 3077 / Section symbol = Integral / 0260; 3047 / Degree symbol = Top left square bkt / 0340; 3056 / a-grave = Bottom right paren / 0347; 3054 / c-cidila = Bottom left paren / 0350; 3045 / e-grave = Bottom integral / 0351; 3126 / e-accute = Radical / 0354; 3160 / i-grave = Small pi / 0362; 3133 / o-grave = Includes / 0371; 3103 / u-grave = Divide / 7777 / > / IFDEF DUTCH < / 7777 / > / / End of -------------- O R D E R I M P O R T A N T -------------------- /D237D237D237D237D237D237D237D237D237D237D237D237D237D237D237D237D237D237D237 X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------------- PAGE / / The next "bit" tests for line drawing characters typed from / the F11 alt char key. / / The characters are arranged to coincide with the keys on the / alternate keypad i.e. / / Sent Tab Under - - - - / Pos Line | | | / / / | | | / Word Para Bold - - - - / | | | / / / Back Line Upper | | | / Up Case - - - - / / / Horizontal line is the Advance key or Left/Right arrows / Vertical line is the Enter key or Up/Down arrows. / LNDTST, ZZCASE / Check Input command /A223 LNDTBL-1 / Against Despatch table/A223 JMP EIBAD / Not matched , Beep BiBi/A223 TLHC, ISZ LNDSUB /Top Left hand Corner /A223 TMT, ISZ LNDSUB /Top Middle T /A223 TRHC, ISZ LNDSUB /Top Right hand corner /A223 LMT, ISZ LNDSUB /Left Middle T /A223 MCRS, ISZ LNDSUB /Middle Cross /A223 RMT, ISZ LNDSUB /Right Middle T /A223 BLHC, ISZ LNDSUB /Bottom Left Hand Corner /A223 BMT, ISZ LNDSUB /Bottom Middle T /A223 BRHC, ISZ LNDSUB /Bottom Right Hand Corner /A223 VLINE, ISZ LNDSUB /Vertical Line /A223 HLINE, ISZ LNDSUB /Horizontal line /A223 CLA / /A223 TAD (LNDCHRS-1) /Address of correspoding chars /A223 TAD LNDSUB /Add offset into table /A223 DCA LNDPTR /Save as a pointer /A223 TAD I LNDPTR /Get Line drawing character /A223 DCA TECMAP /Put that away /A223 TAD (61) /Line drawing from set 1 /A223 DCA TECSET /Put that away too /A223 JMP TCINS /Rejoin main code /A223 LNDCHRS, 161 / Horiz line /q /A223 170 / Vert Line /x /A223 152 / Bottom Right Hand Corner /j /A223 166 / Bottom Middle T /v /A223 155 / Bottom Left Hand Corner /m /A223 165 / Right Hand middle T /u /A223 156 / Middle Cross /n /23 164 / left Middle T /t /A223 153 / Top Right Hand Corner /k /A223 167 / Top Middle T /w /A223 154 / Top Left Hand Corner /l /A223 LNDTBL, EDSENT; TLHC /A223 EDTABP; TMT /A223 EDUNDL; TRHC /A223 EDWORD; LMT /A223 EDPARA; MCRS /A223 EDBOLD; RMT /A223 EDBKUP; BLHC /A223 EDLINE; BMT /A223 EDUPPR; BRHC /A223 EDUPAR; VLINE /A223 EDDNAR; VLINE /A223 EDRARO; HLINE /A223 EDLARO; HLINE /A223 EDENTR; VLINE /A223 EDADVN; HLINE /A223 0 /A223 LNDPTR, 0 /Pointer to Char table /A223 LNDSUB, 0 / temp subscript for line drawing table /A223 X=. / INDICATE FIRST FREE LOCATION ON PAGE /--------------------- PAGE /*************************************************************************** /**** START OF OVERLAY **** /*************************************************************************** OV2NUM=OV2NUM+200 OVRBLK=OV2NUM%200+DLOEDO+36 / DISK BLOCK WHERE OVERLAY IS LOADED RELOC RELOC OVLAY2 OV2NUM OVSNFG= .-OVLAY2+OV2NUM JMP STPNFG OVSEXB= .-OVLAY2+OV2NUM JMP STPEXB OVCLRS= .-OVLAY2+OV2NUM /ESCLRS RIGHT STRIP FUNCTION ESCLRS, TAD SLCRPT /SAVE BEGINNING STRIP POS DCA CLCTSW OVLJMP OVSSTP /SETUP STRIP PARAMETERS CDFMYF TAD CLCTSW /SET UP BEGIN AND END POINTS DCA CLSBEG TAD CLMPUL DCA CLSEND AC7777 JMP ESCLGO /GO DO STRIP /C213 /D213 DCA CLCTSW /D213 JMP ESTRIP-1 /GO DO STRIP OVCLLS= .-OVLAY2+OV2NUM /ESCLLS LEFT STRIP FUNCTION ESCLLS, TAD SLCRPT /SAVE BEGINNING STRIP POS DCA CLCTSW OVLJMP OVSSTP /SETUP STRIP PARAMETERS CDFMYF TAD CLMPLL DCA CLSBEG TAD CLCTSW /SET UP BEGIN AND END POINTS DCA CLSEND ESCLGO, DCA CLCTSW /C213 DCA CLCTDN /FALL INTO STRIP CODE OVSTRP= .-OVLAY2+OV2NUM /ESTRIP STRIP TEXT FROM A COLUMN ESTRIP, OVLJMP OVSTLD CDFMYF TAD CLCTSW /CHECK IF LEFT STRIP SZA CLA JMP STRP05 /NO RIGHT DOES'NT NEED COL CHECK AC7777 /CHECK PREVIOUS CHAR CURMOV JMP STRPA5 /START OF FILE GO FIX UP RULER /C213 TAD I CURPTR /CHECK FOR COL DELIMITER AND P177 ZZCASE STPTB4-1 / ECNWLN; STRP28 / ECNWPG; STRP28 / ECTAB; 2TRP28 / 0 STRP29, AC0001 /FORWARD SPACE TO NEXT COLUMN CURMOV JMP STPNFG TAD I CURPTR AND P177 ZZCASE STPTB5-1 / ECNWLN; STRP12 /NO COLUMN TO STRIP / ECNWPG; STPNFG /BAD DATA FORMAT / ECTAB; STRP28 / 0 JMP STRP29 STRP28, AC0001 /FORWARD TO BEGINNING CHAR OF COLUMN STRPA5, CURMOV /HERE TO MOVE OFF START OF RULER/C213 JMP STPNFG STRP05, CDFMYF TAD CURSOR /CHECK FOR LOWER LIMIT OF STRIP CIA TAD CLSBEG SPA SNA CLA JMP STRP01 /STRIP BEGINNING FOUND CDFBUF TAD I CURPTR AND P177 ZZCASE STPTB1-1 / ECMDFL; STRP02 /MODIFIED FLAG REJUST REST / ECNWLN; STRP03 /NEWLINE CHECK CONDITIONS / ECNWPG; STPEXB /BAD MOVE CHARLIE SHOULD BE HARD /RETURN / ECSTRL; STPEXB /SO ARE RULERS AND OTHER TYRANTS / 0 ADVSPC /FORWARD SPACE ONE PRINT POS JMP STPNFG /REALLY A CATO. ERROR CAN'T HAPPEN CLA ISZ CURSOR /UP THE BODY COUNT JMP ESTRIP /AND TRY FOR A TRUE KILL / STRP01 INSERT MARKERS FOR STRIP DELIMITING / / STRP01, CDFMYF TAD CURSOR /CHECK AGAINST UPPER LIMIT CIA TAD CLSEND SPA SNA CLA JMP STPNFG /NO WAY BEYOND THE REALM CDFBUF TAD (ECTMRK) /INSERT LOWER MARKER JMS INSERT STRP04, AC7777 / CURSOR LESS ONE BECAUSE OF INSERT TAD CURSOR DCA CURSOR STRP06, ADVSPC JMP STRP07 /INSERT OTHER MARKER AND P177 ZZCASE STPTB2-1 / ECNWLN; STRP08 / ECNWPG; STPNFW / ECSTRL; STPNFW / ECTAB; STRP07 / ECMDFL; STRP06 / 0 ISZ CURSOR NOP /FIX FOR CURSOR = 0 /A213 CDFMYF TAD CURSOR CIA TAD CLSEND SMA SZA CLA JMP STRP06 / STRP07 INSERT END MARKER / / STRP07, CDFBUF TAD (ECTMRK) JMS INSERT STRP09, BKPPTR HLT TAD (-ECTMRK) SZA CLA JMP STRP09 TAD (ECMDFL) / STRP10 STRIP BETWEEN MARKERS / / STRP10, DCA I CURPTR /DELETE MARKER ADVPTR HLT TAD (-ECTMRK) /END OF STRIP? SNA CLA JMP STRP11 TAD I CURPTR JMS PUTSTP JMP STRP10 /PROCESS NEXT CHAR JMP STPNFW /PASTE BUFFER OVERFLOW X=. /-------------------------- PAGE / STRP11 PROCESS END OF STRIP / / STRP11, DCA I CURPTR /DELETE MARKER STRP12, TAD (ECNWLN) /PUT EOS IN PASTE JMS PUTSTP SKP JMP STPNFG /BUFFER OVERFLOW EXIT TAD LINE23 /RESET LINE PTRS FOR EOL SEARCH DCA CURPTR DCA CURSOR SLNMOD JMS REJUST TAD CLCTDN /CHECK IF STRIP DONE SZA CLA JMP STPGEX OVLJMP OVSTPX / STRP03 HANDLE NEWLINE IN COLUMN / / STRP03, TAD I CURPTR TAD (-ECNWLN) /END OF COLUMN AND LINE? SNA JMP STRP12 /YES TAD (ECNWLN-ECSLPT) /SELECT POINT SZA CLA JMP STPEXB /NO WRAPPED OR CENTERED IS A SCREW UP TAD (ECMDFL) /PROCESS AS MODIFIED FLAG DCA I CURPTR ISZ CLCTDN /MARK DONE / STRP02 HANDLE MODIFIED FLAG IN COLUMN / / STRP02, CURMOV JMP STPNFG JMP ESTRIP / STRP08 HANDLE NEWLINE IN COLUMN / / STRP08, TAD I CURPTR /CHECK FOR NEWLINE TAD (-ECNWLN) SNA JMP STRP07 TAD (ECNWLN-ECSLPT) /CHECK FOR SELECT POINT SZA CLA JMP STPNFW TAD (ECMDFL) DCA I CURPTR ISZ CLCTDN CURMOV JMP STPNFW BKPPTR HLT JMP STRP04 / BAD EXITS FROM STRIP / / STPNFW, TAD LINE23 /RESET PTRS TO BEGINNING OF LINE DCA CURPTR DCA CURSOR STPNF1, CURMOV /SEARCH FORWARD FOR MARKER HLT TAD I CURPTR TAD (-ECTMRK) SNA CLA JMP STPNF2 AC0001 JMP STPNF1 STPNF2, DCA I CURPTR /DELETE MARKER SLNMOD JMP STPNFG STPEXB, BKPPTR /BACKUP TO PREVIOUS LINE HLT /SEVERE CORRUPTION STPNFG, CLA TAD PSBFOF /PASTE FILLED? SNA CLA JMS PUTSTP NOP OVLJMP OVDOER STRP17, DCA I CURPTR STPGEX, DCA EDMODE JMS PUTSTP NOP JMP EIFIX / PUTSTP WRITE TO PASTE BUFFER / / THIS ROUTINE TAKES CHARACTERS PASSED IN THE AC AND PUTS THEM IN / THE PASTE DISK BUFFER. WHEN THE BUFFER IS FULL IT WRITES THE / BUFFER TO DISK. WHEN THE LAST ALLOCATED DISK BLOCK IS WRITTEN / IT SETS THE CUT OVERFLOW FLAG AND TAKES A SKIP RETURN. / / CALL: / / JMS PUTSTP (AC := CHARACTER TO WRITEOUT) / (RETURNS HERE IF OK) / (RETURNS HERE ON END OF PASTE BUFFER) / / RETURNS WITH AC:=0 IN ALL CASES / PUTSTP, XX /ENTRY POINT CDFBUF /SET TO BUFFER FIELD DCA I PSTPTR /PUT CHARACTER IN BUFFER ISZ PSTPTR /BUMP PTR AND CHECK FOR BLOCK FULL JMP I PUTSTP /BLOCK NOT FULL SO RETURN DIRECTLY TAD (RXEWT+2000) /BLOCK I/O WRITE CODE JMS PSTIO /PERFORM WRITE TO DISK ISZ PSTBLK /INCREMENT BLOCK NO TAD PSTBLK /CHECK FOR END OF ALLOCATED BLOCKS TAD (-PSTEND) /FOR PASTE BUFFER SZA CLA /END OF ALLOCATION? JMP I PUTSTP /NO, SO STRAIGHT RETURN AC7777 /EOA FOR PASTE BUFFER DCA PSBFOF /SET PASTE BUFFER OVERFLOW FLAG ISZ PUTSTP /AND TAKE A SKIP RETURN JMP I PUTSTP /B-B STPTB1, ECMDFL; STRP02 / Modified Flag rejust REST ECNWLN; STRP03 / Newline Check conditions ECNWPG; STPEXB / Bad move Charlie should be hard / return ECSTRL; STPEXB / So are rulers and other tyrants 0 STPTB2, ECNWLN; STRP08 ECNWPG; STPNFW ECSTRL; STPNFW ECTAB; STRP07 ECMDFL; STRP06 0 X=.   / WPSC.PA - DECSPELL STARTUP CODE / / ******* EDIT HISTORY ******* / / 013 EMcD 29-Sep-85 Add Dutch- Spanish Xlations / 012 RCME 22-May-85 Enable use of multinational characters in the / personal dictionary. / / ---------------- All below refer to V2.0 and earlier ------------------- / / 011 WJY 22-OCT-84 Put OpeN FILe flag into MQ & pass control / off to WPSPEL to check & report file open / error (WPSV2-240). / 010 WJY 11-OCT-84 Give error message if drive specified for / utility and/or dictionary disk is already / in use (WPSV2-225). / 009 WJY 09-AUG-84 Return to main menu when the SPELL overlay / INITSP is unable to open the file. / 008 WJY 02-AUG-84 Support "Update personal dictionary ..." / 007 WJY 29-JUN-84 Fix mixed screen on "Loading ...." screen. / 006 BC 4-JUN-84 Modify FILLIO to do writes as well as reads. / 005 WJY 26-MAY-84 XPU support & American/British on same Utility dsk / 004 WCE 23-APR-84 ELIMINATED SECOND QURX ROUTINE IN FIELD TWO / 003 WCE 12-APR-84 REMOVED NECESSITY FOR MENU INTERPERTER BY / ADDING ONCE ONLY MENU MODULE FOR FIELD FOUR / 002 WCE 26-MAR-84 CHANGE DISK NAME FROM DECSPL TO WPSUTL / 001 GDH/EH AUG/SEP-83 Initial version / /*************************************************************************** /**** WRITE OUT CODE FOR WPSC **** /*************************************************************************** FIELD 0 / FIELD WHERE RXHAN IS LOCATED *200 / START ADDRESS USED BY OS8 "GO" COMMAND JMP I .+3 / LOCATION USED TO START UP RXHAN JMP I .+1 / LOCATION USED TO RETURN TO OS8 MONITOR 7605 / ADDRESS OF OS8 MONITOR RETURN POINT RXLOAD / ADDRESS OF START LOCATION FOR RXHAN *RXLDLS / ADDRESS WITHIN RXHAN TO OVERLAY RXEWT / WRITE FUNCTION CODE 0 RXQBLK / ADDRESS OF QUEUE BLOCK TO USE . / ADDRESS OF TABLE OF DISK COMMANDS IFNDEF DECDEV < DLOSPI;SPINIT;CDF 10;-DSOSPI / Write-out spell check init code. DLOSPS;SPSTAT;CDF 10;-DSOSPS / Write-out spell check status line stuff. DLOSPM;SPMENU;CDF 10;-DSOSPM / Write-out spell check menu routine > IFDEF DECDEV < DLOSPI;SPINIT;CDF 50;-DSOSPI / Write-out spell check init code. DLOSPS;SPSTAT;CDF 50;-DSOSPS / Write-out spell check status line stuff. DLOSPM;SPMENU;CDF 50;-DSOSPM / Write-out spell check menu routine > DLSPHL;SPHOLE;CDF 60;-DSSPHL / Write-out spell hole code /a012 0 / END OF LIST INDICATOR IFNDEF DECDEV < FIELD 1 / This is the auxillary field. > IFDEF DECDEV < FIELD 5 > / Note that the editor loads into 6400-7777 of this field and that several / editor routines use some of the globaly defined temps (X0, X1, X2, T1, etc.) IFNDEF OVLAY1 / for 1st pass only. OVLAY1 is defined in WPEDIT IFNDEF OVLAYM / for 1st pass only. OVLAYM is defined in WPEDIT *SWPBEG / Start assembling code at the begining of the SWAP area. / That is where the code will eventually load / at run-time (in field 2). CDFMYF=CDFMNU / A CDF to current field. SPSTAT=. DSKBLK= .-3000%400+DLOSPS / DISK BLOCK WHERE PAGE IS LOADED /*************************************************************************** /**** TRANSFER VECTOR ENTRY POINTS FOR EDITOR SWAP AREA ROUTINES **** /*************************************************************************** CALLN1, XX / ENTRY POINT FOR ROUTINE NUMBER 1 JMS CALSUB / SET UP RETURN ADDRESS AND RETURN FIELD JMS UPDTSC / GO UPDATE STATUS LINE (SCREEN) INFO. JMP CALXIT / GO TO RETURN TO CALLER CODE CALLN2, XX / ENTRY POINT FOR ROUTINE NUMBER 2 JMS CALSUB / SET UP RETURN ADDRESS AND RETURN FIELD NOP / GO CHECK FOR STATUS VALUE CHANGES JMP CALXIT / GO TO RETURN TO CALLER CODE CALLN3, XX / ENTRY POINT FOR ROUTINE NUMBER 3 JMS CALSUB / SET UP RETURN ADDRESS AND RETURN FIELD NOP / GO HANDLE SCROLL DOWN EVENT JMP CALXIT / GO TO RETURN TO CALLER CODE CALLN4, XX / ENTRY POINT FOR ROUTINE NUMBER 4 JMS CALSUB / SET UP RETURN ADDRESS AND RETURN FIELD NOP / GO HANDLE SCROLL UP EVENT JMP CALXIT / GO TO RETURN TO CALLER CODE CALLN5, XX / ENTRY POINT FOR ROUTINE NUMBER 5 JMS CALSUB / SET UP RETURN ADDRESS AND RETURN FIELD NOP / PLACE FOR TRANSFER TO SPECIAL CODE JMP CALXIT / GO TO RETURN TO CALLER CODE CALLN6, XX / ENTRY POINT FOR ROUTINE NUMBER 6 JMS CALSUB / SET UP RETURN ADDRESS AND RETURN FIELD NOP / PLACE FOR TRANSFER TO SPECIAL CODE JMP CALXIT / GO TO RETURN TO CALLER CODE CALLN7, XX / ENTRY POINT FOR ROUTINE NUMBER 7 JMS CALSUB / SET UP RETURN ADDRESS AND RETURN FIELD NOP / PLACE FOR TRANSFER TO SPECIAL CODE JMP CALXIT / GO TO RETURN TO CALLER CODE CALLN8, XX / ENTRY POINT FOR ROUTINE NUMBER 8 JMS CALSUB / SET UP RETURN ADDRESS AND RETURN FIELD NOP / PLACE FOR TRANSFER TO SPECIAL CODE JMP CALXIT / GO TO RETURN TO CALLER CODE CALLN9, XX / ENTRY POINT FOR ROUTINE NUMBER 9 JMS CALSUB / SET UP RETURN ADDRESS AND RETURN FIELD NOP / PLACE FOR TRANSFER TO SPECIAL CODE JMP CALXIT / GO TO RETURN TO CALLER CODE /*************************************************************************** /**** SET UP RETURN FIELD AND ADDRESS FOR CALLN# ROUTINES **** /*************************************************************************** CALSUB, XX / ROUTINE TO SET UP RETURN FIELD AND ADDRESS DCA T1 / SAVE CONTENTS OF ACCUMULATOR RDF / READ CALLERS DATA FIELD TAD CIDF0 / MAKE CDF-CIF INSTRUCTION BACK TO CALLER DCA CALXIT / STORE FOR RETURN TO CALLER CDFMNU / SET DATA FIELD BACK TO MY FIELD AC7776 / SET UP TO SUBTRACT A VALUE OF TWO TAD CALSUB / MAKE POINTER TO VECTOR ENTRY POINT DCA T2 / STORE FOR USE IN AN INDIRECT LOOKUP TAD I T2 / PICK UP CALLERS RETURN ADDRESS DCA CALRTN / STORE ADDRESS FOR LATER RETURN TO CALLER JMP I CALSUB / GO TRANSFER TO SPECIALIZED ROUTINES CALXIT, XX / LOCATION FOR CDF-CIF INSTRUCTION TO CALLER JMP I CALRTN / RETURN BACK TO CALLER CALRTN, XX / LOCATION FOR CALLERS RETURN ADDRESS /*************************************************************************** /**** THE CODE ASSEMBLED HERE IS USED BY THE EDITOR FOR STATUS LINE **** /*************************************************************************** / UPDTSC ROUTINE IS USED TO DISPLAY THE STATUS LINE INFORMATION IN THE EDITOR / / THE STATUS LINE AREA CONSISTS OF TWO LINES AS FOLLOWS: / LINE 1 = TOP LINE OF SCREEN - CURRENT PAGE NUMBER, CURRENT LINE NUMBER, / DRIVE NUMBER, DOCUMENT NUMBER AND DOCUMENT NAME BEING EDITED / LINE 24 = CURRENT RULER IN EFFECT FOR EDITING / / UPON ENTRY, THE VALUE CONTAINED IN THE T1 DETERMINES FUNCTION AS FOLLOWS: / / T1 = 0 CLEAR THE SCREEN AND DISPLAY COMPLETE STATUS AREA / DEFINE SCROLLING REGION AND SET RELITIVE SCREEN ADDRESSING / T1 = 1 UPDATE DISPLAY OF TOP STATUS LINE ONLY / T1 = 2 UPDATE DISPLAY OF BOTTOM STATUS LINE ONLY (DISPLAY RULER) / T1 = 3 CLEAR THE SCREEN AND RESET SCROLLING AREA TO FULL SCREEN UPDTSC, XX / Entry point. TAD T1 / PICK UP SAVED CONTENTS OF T1CUMULATOR TAD LITSC1 / Index into dispatch table. DCA .+1;XX / Go dispatch to routine to handle request. LITSC1, JMP I UPDTDS / Jmp thru dispatch table. UPDTDS, UPDT00 / Case 0. UPDT01 / Case 1. UPDT02 / Case 2. UPDT03 / and Case 3. UPDT00, CIFSPL / Map speller field. JMS I (SCRNIN) / Call screen initialization routine. UPDT01, UPDT02, JMP I UPDTSC / Return to caller. UPDT03, JMS I IOACAL / Clear the screen & region area. 0 / .... SCSTS1 / All the esc sequences to do it. JMP I UPDTSC / Return to caller. SYPRMP, XX / Prompt for system diskette. SYPRM1, JMS I IOACAL / ... 0 / Display to the screen. SYDISK / Replace the system diskette, etc. 0000 / Cursor Home address. 1505 / Error message address. 2305 / posn of 2nd part of prompt. JMP SYPAP2 / Merge below. SYPAP1, CIFSYS / JWAIT for a bit. JWAIT / ... SYPAP2, CIFSYS / Get an input character. XLTIN / ... JMP SYPAP1 / Loop & wait if none. TAD (-EDNWLN) / Return typed? SZA CLA / Skip if yes. Otherwise repeat error. JMP SYPRM1 / Repeat the message. CDIEDT / Return CIF CDF instruction to EDIT field. JMP I SYPRMP / Return to caller. SYDISK, IFDEF ENGLSH < TEXT '^P!E^CG^P&REPLACE THE SYSTEM DISKETTE IN DRIVE 0^P&AND &PRESS !&RETURN' > IFDEF ITALIAN < TEXT /^P!E^CG^P&INTORODURRE IL DISCO SISTEMA NELL'UNIT\@ 0 / *.-1 TEXT /^P&E PREMERE RITORNO/ > IFDEF DUTCH < TEXT '^P!E^CG^P&ZET DE SYSDISKETTE WEER IN AANDRIJVER 0 ' *.-1 TEXT /^P&^P EN DRUK OP !&RETURN' > IFDEF SPANISH < TEXT '^P!E^CG^P&CAMBIE EL DISKETTE SISTEMA EN LA UNIDAD 0^P&Y ' *.-1 TEXT 'PULSE !&RETORNO'> X=. / FIRST FREE LOCATION ON PAGE /--------------------- PAGE DSKBLK= .-3000%400+DLOSPS / DISK BLOCK WHERE PAGE IS LOADED /FILLIO -- fills queue block with I/O parameters & then does I/O. / /CALL: JMS FILLIO / FUNCTION code /M006 / CDF to buffer field. / ADDRESS to read/write to/from. / -# of disk blocks to read/write. / START block #. / Rtn1: Return here if I/O error. / Rtn2: Normal completion return. / FILLIO, XX / Entry point. TAD I FILLIO / Get FUNCTION code. /A006 DCA FILLFN / Store in line. /A006 ISZ FILLIO / Bump to CDF. /A006 TAD I FILLIO / Get CDF to buffer. DCA CMDBLK+RXQBFD / Set into queue block. /M004 ISZ FILLIO / Bump to read/write address. TAD I FILLIO / Get read/write address. DCA CMDBLK+RXQBAD / Set into queue block. /M004 ISZ FILLIO / Bump to size (in blocks). TAD I FILLIO / Get minus number of blocks to read/write. DCA CMDBLK+RXQRS1 / Set into queue block. /M004 ISZ FILLIO / Bump to startint block #. RDF / Get return field. TAD CIDF0 / Convert into a return CIF CDF. DCA FILXIT / Save for final return. TAD I FILLIO / Get starting block #. ISZ FILLIO / Bump to return address. CDFMYF / Map current field. JMS RDFIO / Go do the read/write. FILLFN, 0 / ... /M006 SMA CLA / Skip if error returned. ISZ FILLIO / For normal return, bump address. FILXIT, XX / Return CIF CDF goes here. JMP I FILLIO / Return to caller. RDFIO, XX DCA CMDBLK+RXQBLK / STORE BLOCK NUMBER /M004 RDF / Get field of caller. TAD CIDF0 / Make a return CIF CDF. DCA RDFXIT / and save for the exit. TAD I RDFIO / ++++ CDFMYF / Now map our field. DCA CMDBLK+RXQFNC / AND FUNCTION CODE /M004 ISZ RDFIO JMS CMDQUX / USE SYSTEM QURX ROUTINE FOR CALL /A004 RDFXIT, XX / CIF CDF to return field goes here. JMP I RDFIO / ELSE RETURN STATUS / The code immediately below is called by the startup code. This code decides / whether or not the SC disk need to be loaded. This code runs in field 2. / CHKSC, XX / Entry point. TAD I (OLL301) / See if FIELD 5 need be re-loaded. /M005 TAD (-OLL301) / Check currently loaded OLAY block. /M005 SZA / Skip if no. /M005 DCA LOADSC / Set flag if yes. SC needs to be loaded./M005 TAD I (OLL400) / Now check FIELD 6. /M005 TAD (-OLL301) / ... /M005 SZA / Skip if no. /M005 DCA LOADSC / Set flag if yes. SC needs to be loaded./M005 TAD I (MUBUF+MNFMAT) / Get format word /A005 AND (MNFM3X) / Mask off "British dictionary in use" bit/A005 SNA CLA / Skip if British /A005 AC0001 / AC=1 if American /A005 TAD (-2) / AC=-2 if British else AC=-1 /A005 DCA T1 / & save for later /A005 TAD I (MUBUF+MNPULD) / Get APU/XPU loaded word /A005 AND (MNRX0X+MNRX1X) / Mask off American & British loaded bits/A005 / =0 if nothing loaded /A005 / =1 if American loaded /A005 / =2 if British loaded /A005 TAD T1 / Add back dictionary in use value /A005 SNA / Skip if nothing or wrong one loaded /A005 JMP NOLOAD / Else JMP, spell disk isn't needed /A005 DCA LOADSC / Set flag. SC needs to be loaded /A005 TAD (MNRX0X+MNRX1X) / Get American & British loaded bits /A005 CMA / Complement to form clearing mask /A005 AND I (MUBUF+MNPULD) / & clear them in the APU/XPU loaded wd /A005 DCA I (MUBUF+MNPULD) / & save the new APU/XPU loaded word /A005 NOLOAD, TAD LOADSC / Do we need to (re)load the spell disk /A005 SZA CLA / Skip if not /A005 ISZ CHKSC / Take bump return to (re)load the spell disk./M005 CDIEDT / Back to caller. JMP I CHKSC / ... LOADSC, 0 / Set if (re)load of spell disk is needed/A005 SCSTS1, TEXT '![[?6L![[2&J![[R' / ESCAPE SEQUENCES DESCRIBED BELOW /M004 / ESC [ ? 6 l / Set absolute mode. / ESC [ 2 J / Erase entire screen. / ESC [ r / Clear scrolling region. X=. / FIRST FREE LOCATION ON PAGE /--------------------- PAGE SPINIT=. CDFMYF=CDFEDT / This code loads in the editor field. RELOC RELOC OVLAY1 / This code will load in editor from 7400-7777. DSKBLK= .-7400%400+DLOSPI / DISK BLOCK WHERE PAGE IS LOADED STRTUP, XX / Do initialization stuff. CDIMNU / Map MENU field. TAD I (MUBUF+MNOPTC) / Get options word. DCA OPTNWD / save it aside. TAD OPTNWD / Save it for editing w/o MABIT. AND (-1-MABIT) / Isolate all but MABIT. DCA I (MUBUF+MNOPTC) / ... /d008 TAD (-7) / Get a minus 7. /A006 TAD I (MUBUF+MNTMP6) / Pick up operation code from menu field DCA SAVET6 / SAVET6 IS USED AS A THREE WAY SWITCH /A006 / MINUS VALUE = SPELLING CORRECTOR /A006 / ZERO VALUE = LOAD USER DICTIONARY /A006 / PLUS VALUE = POST PROCESSING /A006 CDFMYF / Map data field back to our field. TAD (DLOSPS) / Load Spell-Check status line stuff. PGSWAP / ... CIFMNU / Map menu field, where FILLIO resides. JMS I (FILLIO) / Load ROOT-EDITOR Swap Area Code RXERD+4000 / Function /A006 CDFMNU / field two. SWPBEG+1400 / load address offset by three blocks. -DSSTAT+3 / size in blocks. DLSTAT+3 / start block #. JMP MYEXIT / If I/O error, abort. CIFMNU / Map menu field, where FILLIO resides. JMS I (FILLIO) / Load Spell-Check menu text module RXERD+4000 / Function /A006 CDFBUF / field. SPLMNU / load address. -DSOSPM / size in blocks. DLOSPM / start block #. JMP MYEXIT / If I/O error, abort. JMS MOV100 / Go copy 100 locations from MENU field CDFBUF / to field four JMS GTDKID / Get system disk id. SYSID-1 / ... TAD SAVET6 / Check for Post Processor Operation /M006 TAD (-12) /A008 SNA CLA / Is this post processing ? /M006 /M008 JMP UTLOAD / YES, skip test of APU loading CDIMNU / Map menu field. JMS I (CHKSC) / See if SC diskette needs to be loaded. JMP NOSC / JMP if no. We are currently loaded. UTLOAD, AC0001 / INDICATE UTILITY DISK REQUIRED UTLDER, CDIBUF / SWITCH TO BUFFER FIELD JMS GETDRV / ASK USER FOR DRIVE NUMBER AND VALIDATE IT JMP STRTGM / USER OPTED FOR GOLD MENU RETURN TAD SAVET6 / Check for Post Processor Operation /M006 TAD (-12) /A008 SZA CLA / Is this post processing ? /M006 /M008 JMP SCLOAD / NO, go load spelling corrector code PPLOAD, CIFMNU / Call routine down in menu field. JMS I (FILLIO) / Fill queue block parameters. RXERD+4000 / Function /A006 CDFSPL / Field. 100 / load address. -DSOFFF / Size in blocks. DLOFFF / Starting block #. JMP UTLDER / Report missing sc disk error. JMS MOV100 / Go copy 100 locations from MENU field CDFSPL / to field six JMP NODD / Go continue with main loop SCLOAD, CIFMNU / Call routine down in menu field. JMS I (FILLIO) / Fill queue block parameters. RXERD+4000 / Function /A006 CDFSPL / Field. 100 / load address. -DSOSPL / Size in blocks. DLOSPL / Starting block #. JMP UTLDER / Report missing sc disk error. JMS MOV100 / Go copy 100 locations from MENU field CDFSPL / to field six CIFMNU / Call routine down in menu field. JMS I (FILLIO) / Now read field 5 stuff. RXERD+4000 / Function /A006 CDFTXT / ... 200 / Load address. -DSOSPX / size in blocks. DLOSPX / Starting block #. JMP UTLDER / Report missing sc disk error. CIFTXT / Map field 5 code. JMS I (CHKAPU) / Do APU initialization. JMP STRTGM / Return if APU init failure. NOSC, CIFSPL / Map spelling field. JMS I (LODAPU) / Load the APU. TAD SAVET6 / See if operation is SC (6) /M006 TAD (-6) /A008 SZA CLA / If this is SC then dictionary required/M006 JMP NODD / Not SC, DD is not required. DDLOAD, CDFMNU / Map to MENU field. /A005 TAD I (MUBUF+MNFMAT) / Get format word. /A005 AND (MNFM3X) / Mask off "British dictionary" bit /A005 SZA CLA / Skip if AMERICAN dictionary in use /A005 AC0001 / INDICATE BRITISH DICTIONARY REQUIRED /A005 TAD (2) / INDICATE AMERICAN DICTIONARY REQUIRED /A005 CDIBUF / SWITCH TO BUFFER FIELD JMS GETDRV / ASK USER FOR DRIVE NUMBER AND VALIDATE IT JMP STRTGM / USER OPTED FOR GOLD MENU RETURN NODD, JMS INITSP / Go execute Spelling Checker editor initialization. TAD OPNFIL / See if file was opened. /A009 /d011 SNA CLA / Skip if it was /A009 /d011 JMP STRTGM / else just clean up & exit /A009 MQL / Leave file open flag in MQ register /A011 CIFSPL / Map spell field. JMS I (SPELL) / Start up the spell checker. STRTGM, JMS CHKID / Make sure original system diskette is installed. MYEXIT, AC7777 / Restore Menu field stuff. CIFMNU / ... PGSWAP / .... CDIMNU / Return CDI instruction to MENU field JMP I STRTUP / Return to caller. OPTNWD, 0 / Location for MNOPTC word during spell check. SAVET6, 0 / Location for value of MNTMP6 operation word. / *** SAVET6 = (MNTMP6) - 7 *** /A006 / SAVET6 IS USED AS A THREE WAY SWITCH /A006 / MINUS VALUE = SPELLING CORRECTOR /A006 / ZERO VALUE = LOAD USER DICTIONARY /A006 / PLUS VALUE = POST PROCESSING /A006 X=. / FIRST FREE LOCATION ON PAGE /--------------------- PAGE DSKBLK= .-7400%400+DLOSPI / DISK BLOCK WHERE PAGE IS LOADED /*********************************************************************** / CHKID - MAKE SURE ORIGINAL SYSTEM DISKETTE IS INSTALLED BEFORE / RETURN TO MAIN MENU. / / WHEN WPSPEL IS CALLED, THE NAME AND DISK "RANDOM" ID ARE READ INTO / SYSID0-3. BEFORE WPSPEL IS EXITED, THE NAME AND "RANDOM" ID FOR THE / DISK IN DRIVE 0 ARE READ INTO SYSID4-7. THIS ROUTINE CHECKS TO MAKE / SURE THAT BOTH BLOCKS MATCH / / IF NO MATCH IS FOUND, THE OPERATOR IS ASKED TO INSERT THE ORIGINAL SYSTEM / DISKETTE. THE ROUTINE IS NOT EXITED UNTIL THE NAME AND "RANDOM" ID MATCH / /*********************************************************************** CHKID, XX / CHECK ORIGINAL SYSTEM DISKETTE TAD OPTNWD / Get original option word. CDFMNU / Map MENU field. DCA I (MUBUF+MNOPTC) / Restore it. CDFMYF / Back to our field. TAD OPNFIL / Did we open the file? SZA CLA / Skip if no. nothing to close. JMS CLOSEF / Call close file routine. JMS GTDKID / Go read current drive diskette name & ID. CHKID0, SYSID+4-1 / ... TAD (-4 / DCA T1 / SET UP COUNTER TAD (SYSID-1 / DCA X1 / SET UP SOURCE INDEX TAD CHKID0 / = (SYSID+4-1 /M006 DCA X2 / SET UP COMPARE INDEX CHKIDL, TAD I X1 / READ OLD WORD CIA / TAD I X2 / COMPARE WITH NEW WORD SZA CLA / JMP GTDKER / NO, GO ASK FOR ORIGINAL SYSTEM DISKETTE ISZ T1 / SEE IF LAST WORD JMP CHKIDL / NO, LOOP BACK JMP I CHKID / RETURN TO CALLER MOV100, XX / INITIALIZE PAGE ZERO LOCATIONS TAD I MOV100 / PICK UP FIELD TO MOVE TOO DCA MOV10F / STORE CHANGE FIELD INSTRUCTION ISZ MOV100 / BUMP RETURN ADDRESS OVER FIELD INSTRUCTION JMS CPYBUF / Copy locations 0-77 to memory field X -100 / 100 locations CDFMNU / from MENU field 0000-1 / location 0, MOV10F, XX / to field X, 0000-1 / location 0. JMP I MOV100 / RETURN TO CALLER /*********************************************************************** / / GTDKID GETS THE DISK ID OF THE SYSTEM DISK / THE ID IS THE THREE NAME WORDS AND THE "RANDOM" WORD / IT IS USED TO INSURE THAT THE SAME SYSTEM DISK IS REINSERTED / IN CASES WHERE IT MUST BE REMOVED. / /*********************************************************************** GTDKID, XX TAD I GTDKID / Get buffer address to copy NAME & ID into. ISZ GTDKID / Bump to return address. DCA GTDKIA / save buffer address. GTDK1, CDIMNU / Get density of drive 0. DCA I (CMDBLK+RXQDRV) / Set the drive # to 0. /M004 CDFMYF / Back to our field & Call RDFIO in MENU field. JMS I (RDFIO) / Do a GET DENSITY to establish drive density. RXEDN+4000 / "GET DENSITY" code. SPA CLA / Skip if no error. JMP GTDKER / Error. Display "replace" msg. CIFMNU / Go read in the home block. JMS I (FILLIO) / ... RXERD+4000 / Function /A006 CDFTXT / Read home block into block buffer. BUFADR / buffer address. -1 / Size (1 block). DLDIR / Read the home block. JMP GTDKER / Error. Display "replace" msg. JMS CPYBUF -4 / Size CDFTXT / Source field. BUFADR+2-1 / Source Address CDFMYF / DESTINATION FIELD GTDKIA, XX / DESTINATION ADDRESS JMP I GTDKID / RETURN TO CALLER AFTER OBTAINING ID WORDS GTDKER, CDIMNU / Prompt user to insert the system diskette. JMS I (SYPRMP) / ... JMP GTDK1 / Go retry. SYSID, 0;0;0;0 / System disk ID. 0;0;0;0 / ID of diskette in drive 0 at exit time. X=. / FIRST FREE LOCATION ON PAGE /--------------------- PAGE RELOC / RESET RELOCATION COUNTER CDFMYF= CDFBUF / DEFINE OUR FIELD AS FIELD FOUR. SPMENU= . / DEFINE OUR LOAD POINT. SPLMNU= 200 / DEFINE OUR RUN LOCATION. RELOC SPLMNU / RELOCATE TO WHERE CODE RUNS IN FIELD FOUR /*************************************************************************** /**** PAGE ZERO LOCATIONS IN FIELD FOUR **** /*************************************************************************** / SET COUNTER TO LOCATION 100 ON PAGE ZERO X= 100; SPLFUN= X / LOCATION FOR SPELL FUNCTION CODE X= X+1; SPLDRV= X / LOCATION FOR USER SPECIFIED DRIVE NUMBER X= X+1; SPLMAX= X / LOCATION FOR MAXIMUM DRIVE NUMBER X= X+1; SPLDOC= X / LOCATION FOR CURRENT DOCUMENT NUMBER X= X+1; SPLMS1= X / LOCATION FOR POINTER TO UTILITY/DICTIONARY TEXT X= X+1; SPLMS2= X / LOCATION FOR POINTER TO DRIVE - DRIVE/DEVICE TEXT X= X+1; SPLOPT= X / LOCATION FOR SYSTEM OPTION CONFIGURATION BITS X= X+1; SPLSDR= X / LOCATION FOR USER DRIVE SELECTION FOR SPELL X= X+1; REDFLG= X / LOCATION FOR READ ROUTINE DRIVE REQUEST FLAG X= X+1; REDDRV= X / LOCATION FOR READ ROUTINE DRIVE NUMBER X= X+1; REDNUM= X / LOCATION FOR READ ROUTINE CHARACTER COUNTER X= X+1; REDCHR= X / LOCATION FOR READ ROUTINE INPUT CHARACTER X= X+1; VALADD= X / LOCATION FOR VALIDATION TABLE POINTER ADDRESS X= X+1; SPLFNR= X / LOCATION FOR FOOTNOTE RESULT DOC DRIVE NUMBER /A010 X= X+1; SPLOPR= X / LOCATION FOR SPell OPeRation flag /A010 / 0 IF FOOTNOTING, NOT 0 IF DECSPELL /A010 DSKBLK= .-200%400+DLOSPM / DISK BLOCK WHERE PAGE IS LOADED / GETDRV IS CALLED BY THE EDITOR TO OBTAIN A VALID DRIVE NUMBER FOR THE / UTILITY DISK AND THE DICTIONARY DISK. IT CALLS SPLGET TO PROMPT THE / USER FOR THE DRIVE NUMBER AND THEN CHECKS TO SEE IF THE USER SUPPLIED / NUMBER IS A VALID DRIVE NUMBER WITH THE PROPER DISKETTE LOADED. / IF NOT, IT CALLS SPLGET TO REPORT THE ERROR. / / GETDRV IS CALLED AS FOLLOWS: / / CDIBUF / CHANGE TO BUFFER FIELD / JMS I GETDRV / CALL ROUTINE TO GET DRIVE NUMBER / JMP GOLDMN / GOLD MENU RETURN / .... / NORMAL RETURN / / UPON ENTRY, THE AC CONTAINS ONE OF THE FOLLOWING VALUES: / / AC = 0 ERROR CALL INDICATING AN ERROR DETECTED WHILE READING / AC = 1 REQUEST FOR WPS UTILITY DISKETTE / AC = 2 REQUEST FOR AMERICAN DICTIONARY DISKETTE / AC = 3 REQUEST FOR BRITISH DICTIONARY DISKETTE GETDRV, XX / ROUTINE TO GET DRIVE # VIA MENU. GETBAD, DCA SPLFUN / SAVE SPELL FUNCTION CODE CDIBUF / SWICH TO FIELD FOUR FOR MENU ROUTINE JMS SPLGET / GO PROMPT USER FOR DRIVE NUMBER JMP GETXIT / USER OPTED FOR GOLD:MENU RETURN. CIFMNU / MAP MENU FIELD. JMS FILLIO / FIRST, READ IN THE ALLOC BLOCK. RXERD+4000 / FUNCTION /A006 CDFTXT / USE THE BUFFER DEFINED IN TXT FIELD. BUFADR / BUFFER ADDRESS. -1 / 1 BLOCK. DLALOC / ALLOCATION BLOCK. JMP GETBAD / REPORT BAD DISKETTE. CDFTXT / MAP BUFFER TAD I (BUFADR+1) / SEE IF DOCUMENT DISKETTE. TAD (-40) / 40 MEANS DOCUMENT DISKETTE. SZA CLA / SKIP IF DOCUMENT DISKETTE. JMP GETBAD / REPORT VALIDATION ERROR. TAD I (BUFADR+2) / CHECK MAX NUMBER OF DOCUMENTS ALLOWED. SZA CLA / SKIP IF NONE. JMP GETBAD / REPORT VALIDATION ERROR. CDFMYF / BACK TO OUR FIELD. CIFMNU / MAP MENU FIELD JMS FILLIO / NOW READ THE HOME BLOCK. RXERD+4000 / FUNCTION /A006 CDFTXT / USE THE SAME 2 PAGES. BUFADR / ... -1 / 1 BLOCK. DLDIR / HOME BLOCK. JMP GETBAD / REPORT BAD DISKETTE. VALDAT, TAD VALADD / GET TABLE ADDRESS POINTER TO NAME DCA X0 / SAVE IN AUTO INDEX REGISTER AC7775 / SET UP TO COMPARE 3 WORDS. DCA T1 / STORE COUNT IN COUNTER TAD (BUFADR+2-1) / POINTER TO ACTUAL DOCUMENT NAME. DCA X1 / SAVE IN AUTO INDEX REGISTER VAL001, CDFMYF / SWITCH BACK TO THIS FIELD TAD I X0 / PICK UP PART OF DESIRED NAME. CIA / SEE IF IT'S SAME AS DOCUMENT NAME. CDFTXT / SWITCH TO TEXT FIELD BUFFER TAD I X1 / GET WORD OF ACTUAL DOCUMENT NAME. SZA CLA / SKIP IF THE SAME. JMP GETBAD / REPORT VALIDATION ERROR. ISZ T1 / BUMP COUNT OF WORDS TO COMPARE. JMP VAL001 / LOOP UNTIL DONE WITH WORDS TO COMPARE ISZ X1 / POINT TO DATE OF BUILD. ISZ X1 / ... X=BLDDY^100+BLDMO / COMPUTE EXPECTED DAY-MONTH VALUE. TAD (-X) / SEE IF DATE OF BUILD MATCHES DISKETTE. TAD I X1 / IF NOT THEN DISKETTE IS OF A DIFFERENT BUILD SZA CLA / AND THEREFORE IS TO BE REJECTED. JMP GETBAD / REJECT DISKETTE IF FROM A DIFFERENT BUILD. TAD (-BLDYR) / COMPARE YEAR OF BUILD TOO. TAD I X1 / THAT SHOULD MATCH AS WELL. SZA CLA / SKIP IF MATCH. JMP GETBAD / REJECT DISKETTE IF FROM A DIFFERENT BUILD. CDFMYF / SWITCH BACK TO THIS FIELD ISZ GETDRV / BUMP RETURN POINT PAST GOLD MENU RETURN TAD SPLMS1 / GET THE MESSAGE POINTER TO UTL OR DIC TAD (-SPLUTL) / SUBTRACT POINTER TO UTILITY DISK SZA CLA / ARE WE ABOUT TO LOAD THE UTILITY DISK ? JMP GETXIT / NO, WE ARE DOING THE DICTIONARY DISK CIFMNU / YES, DISPLAY MESSAGE "LOADING SOFTWARE" JMS I IOACAL / CALL STANDARD MESSAGE OUTPUT ROUTINE 0 / USE DEFAULT OUTPUT CHANNEL WRKTXT / POINTER TO MESSAGE CONTROL STRING 0200 / CLEAR SCREEN FROM TIME DISPLAY FIRST /A007 1020 / SCREEN POSITION FOR FIRST TEXT LINE SPLUTL / POINTER TO "WPS UTILITY SOFTWARE" GETXIT, CDIEDT / SWITCH BACK TO EDITOR FIELD JMP I GETDRV / RETURN TO CALLER. / / / SPLINU - Report IF Drive(/device) in use by spell (or footnoting) / for a document & accept user response. / / SPLINU, XX /A010 TAD SPLDOC / Get Spell or Footnote source drive no./A010 CIA / /A010 TAD SPLDRV / Compare to Utility drive /A010 SNA CLA / They're different, we're ok so far /A010 JMP INUDSP / Same - ERROR - Go tell user &get resp./A010 TAD SPLOPR / See if we're footnoting /A010 SZA CLA / Yes we are - continue checking /A010 JMP INUOK / No we're not - take OK exit /A010 TAD SPLFNR / Get Footnote result drive no. /A010 CIA / /A010 TAD SPLDRV / Compare to Utility drive /A010 SNA CLA / They're different - take OK exit /A010 JMP INUDSP / Same - ERROR - Go tell user &get resp./A010 INUOK, ISZ SPLINU / Begin setup of a RETURN+2 exit /A010 JMP INUXIT / Go finish housekeeping /A010 INUDSP, CIFMNU / Display IN USE message /A010 JMS I IOACAL / /A010 0 / /A010 INUERR / /A010 0 / /A010 1002 / /A010 SPLMS2 / /A010 AC7777 / Signal RETURN & GOLD MENU as only resp./A010 JMS REDSPL / & get the user response /A010 JMP INUDSP / Invalid response - redisplay msg. /A010 SKP / GOLD MENU - take "NORMAL" return /A010 / RETURN - take "RETURN+1" return /A010 INUXIT, ISZ SPLINU / /A010 JMP I SPLINU / /A010 VALTAB, 7061 / 'WP' 6466 / 'SU' 6555 / 'TL' Utility diskette name. 6664 / 'US' American 4552 / 'DI' 4465 / 'CT' Dictionary diskette name. 6654 / 'UK' British 4552 / 'DI' 4465 / 'CT' Dictionary diskette name. X=. / FIRST FREE LOCATION ON PAGE /--------------------- PAGE DSKBLK= .-200%400+DLOSPM / DISK BLOCK WHERE PAGE IS LOADED / SPLGET IS CALLED FROM THE GETDRV ROUTINE TO PROMPT THE USER FOR A DISK / DRIVE NUMBER WHICH SHOULD CONTAIN EITHER THE WPS UTILITY SOFTWARE OR THE / AMERICAN OR BRITISH DICTIONARY. THIS ROUTINE IS ALSO CALLED TO HANDLE A / DISK ERROR THAT MAY BE CAUSED BY THE USER NOT HAVING THE PROPER DISKETTE / LOADED IN THE SPECIFIED DRIVE OR A READ ERROR ON THE SPECIFIED DRIVE. / / UPON ENTRY, THE VALUE STORED IN SPLFUN DETERMINES WHAT KIND OF REQUEST IS / BEING MADE. A ZERO ENTRY INDICATES THAT THIS ROUTINE HAS BEEN CALLED / BEFORE AND THAT ALL TEXT POINTERS ARE CORRECTLY SET UP. A NON-ZERO ENTRY / WILL CAUSE THE ROUTINE TO SET ITSELF UP TO HANDLE THE PROPER REQUEST. / AFTER THE USER HAS ENTERED A DRIVE NUMBER, IF NECESSARY, THE INDICATED / DRIVE NUMBER IS CHECKED VIA A GET-DENSITY CALL TO SEE IF IT CONTAINS A / DISKETTE OR FOR A WINCHESTER SYSTEM, THAT THE VOLUME IS MOUNTED. / UPON EXIT, CONTROL IS PASSED TO THE FIRST LOCATION FOLLOWING THE CALL IF / THE USER TYPED GOLD MENU TO ABORT THE OPERATION AND RETURN TO MAIN MENU. / CONTROL IS PASSED TO THE SECOND LOCATION FILLOWING THE CALL WHEN THE USER / ENTERS A VALID DRIVE NUMBER CONTAINING A MOUNTED DISKETTE OR VOLUME. SPLGET, XX / ENTRY POINT TO GET A DRIVE NUMBER FROM USER TAD SPLFUN / PICK UP THE SPELL FUNCTION CODE SNA / IS THIS A VALIDATION ERROR OPERATION ? JMP SPLVER / YES, GO HANDLE THE VALIDATION ERROR CLL RAL / MULTIPLY BY TWO TAD SPLFUN / MULTIPLY BY THREE TAD (VALTAB-1-3) / CONSTRUCT VALIDATION POINTER DCA VALADD / STORE TABLE POINTER ADDRESS TAD SPLFUN / GET THE FUNCTION CODE BACK TAD (-1) / DECREMENT THE FUNCTION CODE SNA / IS THIS A UTILITY DISK REQUEST ? JMP SPLGT1 / YES, GO SET UP FOR THE UTILITY DISK TAD (-1) / DECREMENT THE FUNCTION CODE SZA CLA / IS THIS AN AMERICAN DICTIONARY REQUEST ? TAD (SPLUKD-SPLUSD) / NO, SET UP FOR THE BRITISH DICTIONARY TAD (SPLUSD-SPLUTL) / YES, SET UP FOR THE AMERICAN DICTIONARY SPLGT1, TAD (SPLUTL) / ELSE SET UP FOR WPS UTILITY DISK DCA SPLMS1 / STORE POINTER TO UTL. OR DIC. TEXT STRING CDFMNU / CHANGE DATA FIELD TO THE MENU FIELD TAD MNMXDR+MUBUF / PICK UP THE MAXIMUM DRIVE NUMBER ALLOWED DCA SPLMAX / SAVE FOR LATER USE /D010 TAD MNFNO+MUBUF / PICK UP THE CURRENT DOCUMENT DRIVE NUMBER TAD MNUTFN+MUBUF / PICK UP SPELL/FOOT.SRC. DRIVE/DOC NO. /A010 BSW;RTR;AND (17) / & ISOLATE DRIVE NO. /A010 DCA SPLDOC / SAVE FOR LATER USE TAD MNFNO+MUBUF / PICK UP FOOTNOTE RESULT DRIVE/DOC NO. /A010 BSW;RTR;AND (17) / & ISOLATE DRIVE NO. /A010 DCA SPLFNR / SAVE FOR LATER USE /A010 TAD MNTMP6+MUBUF / PICK UP OPERATION CODE /A010 TAD (-12) / ADD IN NEGATIVE VALUE OF FOOTNOTE OPER./A010 DCA SPLOPR / & SAVE RESULT AS SPeLl OPeRation flag /A010 TAD MNOPTN+MUBUF / PICK UP THE SYSTEM OPTION CONFIGURATION BITS DCA SPLOPT / SAVE FOR LATER USE TAD MNSDRV+MUBUF / PICK UP THE USER DRIVE SELLECTION FOR SPELL DCA SPLSDR / SAVE FOR LATER USE CDFMYF / RETURN DATA FIELD TO OUR FIELD TAD SPLOPT / GET OPTION CONFIGURATION BITS AND (MNRX2X) / MASK OFF THE WINCHESTER ON LINE BIT SZA CLA / CHECK TO SEE IF THE WINCHESTER IS ON LINE TAD (DEVTXT-DRVTXT) / YES, SET UP TO DISPLAY "DRIVE/DEVICE" TAD (DRVTXT) / NO, SET UP TO DISPLAY "DRIVE" DCA SPLMS2 / STORE FOR MESSAGE DISPLAYS AC7776 / SET THE AC EQUAL TO A MINUS 2 TAD SPLMAX / COMBINE WITH THE MAXIMUM DRIVE NUMBER SMA CLA / IS THIS A MULTI DRIVE SYSTEM ? JMP SPLGDR / YES, GO REQUEST THE DRIVE NUMBER / NO, THIS IS A TWO DRIVE SYSTEM TAD SPLDOC / PICK UP THE DOCUMENT DRIVE NUMBER SNA CLA / IS DOCUMENT ON DRIVE NUMBER ONE ? AC0001 / NO, DOCUMENT IS ON DRIVE ZERO DCA SPLDRV / SELECT OTHER DRIVE FROM DOCUMENT JMP SPLVE1 / GO HANDLE AS A VALIDATION ERROR SPLGDR, CLA CLL CMA / SET AC TO MINUS ONE AND CLEAR THE LINK TAD SPLFUN / COMBINE WITH FUNCTION CODE - SETS LINK SNA CLA / IS THIS A UTILITY DISK REQUEST ? CLL / YES, CLEAR THE LINK FOR INDICATOR TAD SPLSDR / PICK UP THE USER DRIVE SELECTION FOR SPELL SNL / IS THE FLAG SET FOR THE DICTIONARY DISK JMP SPLGD1 / NO, GO HANDLE UTILITY DRIVE NUMBER BSW / YES, SWAP HIGH ORDER FOR LOW ORDER RTR / SHIFT DOWN TWO MORE PLACES SPLGD1, AND (17) / MASK OFF THE DIRVE BITS DCA SPLDRV / SAVE INDICATED DRIVE NUMBER TAD SPLDRV / GET DRIVE NUMBER BACK AGAIN SZA CLA / WAS A DRIVE NUMBER SPECIFIED BY USER JMP SPLDEN / YES, GO CHECK ITS DENSITY SPLGD2, CIFMNU / NO, PRINT "TYPE THE DRIVE/DEVICE NUMBER ..." JMS I IOACAL / CALL STANDARD MESSAGE OUTPUT ROUTINE 0 / USE DEFAULT OUTPUT CHANNEL NUMTX1 / POINTER TO MESSAGE CONTROL STRING 0 / ADDRESS FOR CLEAR SCREEN COMMAND 1020 / SCREEN POSITION FOR FIRST TEXT LINE SPLMS2 / POINTER TO "DRIVE" OR "DRIVE/DEVICE" 1220 / SCREEN POSITION FOR SECOND TEXT LINE SPLMS1 / POINTER TO "UTILITY" OR "DICTIONARY" SPLAND / POINTER TO "AND PRESS RETURN" JMS REDSPL / GO HANDLE USER INPUT REQUEST JMP SPLGD2 / USER ERROR - GO HANDLE IT JMP SPLGMR / USER TYPED "GOLD MENU", GO HANDLE IT / USER TYPED "RETURN" - DO A DENSITY CHECK SPLDEN, TAD SPLMAX / PICK UP THE MAXIMUM ALLOWABLE DRIVE NUMBER CMA / MAKE IT NEGATIVE TAD SPLDRV / COMBINE WITH USER SELECTED DRIVE NUMBER SMA CLA / IS USER SELECTED DRIVE NUMBER WITHIN RANGE JMP SPLGD2 / NO, GO REQUEST A VALID DRIVE NUMBER /d010 TAD SPLDOC / PICK UP CURRENT DOCUMENT DRIVE NUMBER /d010 CIA / MAKE IT NEGATIVE /d010 TAD SPLDRV / COMBINE WITH USER SELECTED DRIVE NUMBER /d010 SNA CLA / DID USER SELECT THE DOCUMENT DRIVE ? /d010 JMP SPLGD2 / YES, GO REQUEST A VALID DRIVE NUMBER JMS SPLINU / CHECK TO SEE IF DRIVE ALREADY IN USE /A010 JMP SPLGMR / YES & USER GAVE GOLD-MENU /A010 JMP SPLGD2 / " " " " RETURN - TRY AGAIN /A010 TAD SPLDRV / PICK UP THE DRIVE NUMBER CDIMNU / GET DENSITY OF SC/DD DISKETTE. DCA I (CMDBLK+RXQDRV) / SET TO USER SPECIFIED DRIVE NUMBER. CDFMYF / BACK TO OUR FIELD & CALL RDFIO IN MENU FIELD. JMS I (RDFIO) / DO A GET DENSITY TO ESTABLISH DRIVE DENSITY. RXEDN+4000 / "GET DENSITY" CODE. SPA CLA / SKIP IF NO ERROR. JMP DENERR / GET DENSITY ERROR DETECTED, REPORT TO USER ISZ SPLGET / BUMP THE RETURN ADDRESS POINTER SPLGMR, JMP I SPLGET / RETURN TO CALLER X=. / FIRST FREE LOCATION ON PAGE /--------------------- PAGE DSKBLK= .-200%400+DLOSPM / DISK BLOCK WHERE PAGE IS LOADED / TEXT SUBROUTINES TO PLACE COMMON TEXT STRINGS ON THE SCREEN SPLTX1, XX / PRINT "REMOVE THE DISKETTE FROM DRIVE ..." CIFMNU / CHANGE INDTRUCTION FIELD TO MENU FIELD JMS I IOACAL / CALL STANDARD MESSAGE OUTPUT ROUTINE 0 / USE DEFAULT OUTPUT CHANNEL REMTXT / POINTER TO MESSAGE CONTROL STRING 0 / ADDRESS FOR CLEAR SCREEN COMMAND 1020 / SCREEN POSITION FOR FIRST TEXT LINE SPLDRV / POINTER TO DRIVE NUMBER 1220 / SCREEN POSITION FOR SECOND TEXT LINE SPLMS1 / POINTER TO "UTILITY" OR "DICTIONARY" SPLAND / POINTER TO "AND PRESS RETURN" JMP I SPLTX1 / RETURN TO CALLER SPLTX2, XX / PRINT "INSERT THE DISKETTE INTO DRIVE ..." CIFMNU / CHANGE INDTRUCTION FIELD TO MENU FIELD JMS I IOACAL / CALL STANDARD MESSAGE OUTPUT ROUTINE 0 / USE DEFAULT OUTPUT CHANNEL INSTXT / POINTER TO MESSAGE CONTROL STRING 0 / ADDRESS FOR CLEAR SCREEN COMMAND 1020 / SCREEN POSITION FOR FIRST TEXT LINE SPLMS1 / POINTER TO "UTILITY" OR "DICTIONARY" 1220 / SCREEN POSITION FOR SECOND TEXT LINE SPLDRV / POINTER TO DRIVE NUMBER SPLAND / POINTER TO "AND PRESS RETURN" JMP I SPLTX2 / RETURN TO CALLER SPLTX3, XX / PRINT "TYPE THE DRIVE/DEVICE NUMBER ..." CIFMNU / CHANGE INDTRUCTION FIELD TO MENU FIELD JMS I IOACAL / CALL STANDARD MESSAGE OUTPUT ROUTINE 0 / USE DEFAULT OUTPUT CHANNEL NUMTX1 / POINTER TO MESSAGE CONTROL STRING 1600 / ADDRESS FOR CLEAR SCREEN COMMAND 1620 / SCREEN POSITION FOR FIRST TEXT LINE SPLMS2 / POINTER TO "DRIVE" OR "DRIVE/DEVICE" 2020 / SCREEN POSITION FOR SECOND TEXT LINE SPLMS1 / POINTER TO "UTILITY" OR "DICTIONARY" SPLAND / POINTER TO "AND PRESS RETURN" JMP I SPLTX3 / RETURN TO CALLER SPLTX4, XX / PRINT "OR TYPE THE DRIVE/DEVICE NUMBER ..." CIFMNU / CHANGE INDTRUCTION FIELD TO MENU FIELD JMS I IOACAL / CALL STANDARD MESSAGE OUTPUT ROUTINE 0 / USE DEFAULT OUTPUT CHANNEL NUMTX2 / POINTER TO MESSAGE CONTROL STRING 1620 / SCREEN POSITION FOR FIRST TEXT LINE SPLMS2 / POINTER TO "DRIVE" OR "DRIVE/DEVICE" 2020 / SCREEN POSITION FOR SECOND TEXT LINE SPLMS1 / POINTER TO "UTILITY" OR "DICTIONARY" SPLAND / POINTER TO "AND PRESS RETURN" JMP I SPLTX4 / RETURN TO CALLER / COME HERE TO HANDLE VALIDATION ERRORS SPLVER, AC7776 / SET THE AC EQUAL TO A MINUS 2 TAD SPLMAX / COMBINE WITH THE MAXIMUM DRIVE NUMBER SMA CLA / IS THIS A MULTI DRIVE SYSTEM ? JMP SPLTYP / YES, GO CHECK DRIVE TYPE SPLVE1, JMS SPLTX1 / PRINT "REMOVE THE DISKETTE FROM DRIVE ..." AC7777 / SET UP FOR NO DRIVE NUMBER ALLOWED JMS REDSPL / GO HANDLE USER INPUT REQUEST JMP SPLVE1 / USER ERROR - GO HANDLE IT JMP SPLGMR / USER TYPED "GOLD MENU", GO HANDLE IT JMP SPLDEN / USER TYPED "RETURN", GO HANDLE IT SPLTYP, JMS SPLSEL / CHECK IF DRIVE IS WINCHESTER OR FLOPPY JMP SPLVE3 / WINCHESTER, DISPLAY "VOLUME DOES NOT ..." SPLVE2, JMS SPLTX1 / PRINT "REMOVE THE DISKETTE FROM DRIVE ..." JMS SPLTX4 / PRINT "OR TYPE THE DRIVE/DEVICE NUMBER ..." AC0001 / SET UP FOR OPTIONAL DRIVE NUMBER JMS REDSPL / GO HANDLE USER INPUT REQUEST JMP SPLVE2 / USER ERROR - GO HANDLE IT JMP SPLGMR / USER TYPED "GOLD MENU", GO HANDLE IT JMP SPLDEN / USER TYPED "RETURN", GO HANDLE IT SPLVE3, CIFMNU / YES, HANDLE VOLUME DOES NOT CONTAIN... JMS I IOACAL / CALL STANDARD MESSAGE OUTPUT ROUTINE 0 / USE DEFAULT OUTPUT CHANNEL SPLVNC / POINTER TO MESSAGE CONTROL STRING 0 / ADDRESS FOR CLEAR SCREEN COMMAND 1020 / SCREEN POSITION FOR FIRST TEXT LINE SPLDRV / POINTER TO DRIVE NUMBER SPLMS1 / POINTER TO "UTILITY" OR "DICTIONARY" JMS SPLTX3 / PRINT "TYPE THE DRIVE/DEVICE NUMBER ..." JMS REDSPL / GO HANDLE USER INPUT REQUEST JMP SPLVE3 / USER ERROR - GO HANDLE IT JMP SPLGMR / USER TYPED "GOLD MENU", GO HANDLE IT JMP SPLDEN / USER TYPED "RETURN", GO HANDLE IT / COME HERE TO HANDLE DENSITY ERRORS DENERR, AC7776 / SET THE AC EQUAL TO A MINUS 2 TAD SPLMAX / COMBINE WITH THE MAXIMUM DRIVE NUMBER SMA CLA / IS THIS A MULTI DRIVE SYSTEM ? JMP DENTYP / YES, GO CHECK DRIVE TYPE SPLDE1, JMS SPLTX2 / PRINT "INSERT THE DISKETTE INTO DRIVE ..." AC7777 / SET UP FOR NO DRIVE NUMBER ALLOWED JMS REDSPL / GO HANDLE USER INPUT REQUEST JMP SPLDE1 / USER ERROR - GO HANDLE IT JMP SPLGMR / USER TYPED "GOLD MENU", GO HANDLE IT JMP SPLDEN / USER TYPED "RETURN", GO HANDLE IT DENTYP, JMS SPLSEL / CHECK IF DRIVE IS WINCHESTER OR FLOPPY JMP SPLDE3 / WINCHESTER, DISPLAY "VOLUME NOT ASSIGNED" SPLDE2, JMS SPLTX2 / PRINT "INSERT THE DISKETTE INTO DRIVE ..." JMS SPLTX4 / PRINT "OR TYPE THE DRIVE/DEVICE NUMBER ..." AC0001 / SET UP FOR OPTIONAL DRIVE NUMBER JMS REDSPL / GO HANDLE USER INPUT REQUEST JMP SPLDE2 / USER ERROR - GO HANDLE IT JMP SPLGMR / USER TYPED "GOLD MENU", GO HANDLE IT JMP SPLDEN / USER TYPED "RETURN", GO HANDLE IT SPLDE3, CIFMNU / YES, HANDLE VOLUME NOT ASSIGNED JMS I IOACAL / CALL STANDARD MESSAGE OUTPUT ROUTINE 0 / USE DEFAULT OUTPUT CHANNEL SPLNAS / POINTER TO MESSAGE CONTROL STRING 0 / ADDRESS FOR CLEAR SCREEN COMMAND 1020 / SCREEN POSITION FOR FIRST TEXT LINE SPLDRV / POINTER TO DRIVE NUMBER JMS SPLTX3 / PRINT "TYPE THE DRIVE/DEVICE NUMBER ..." JMS REDSPL / GO HANDLE USER INPUT REQUEST JMP SPLDE3 / USER ERROR - GO HANDLE IT JMP SPLGMR / USER TYPED "GOLD MENU", GO HANDLE IT JMP SPLDEN / USER TYPED "RETURN", GO HANDLE IT X=. / FIRST FREE LOCATION ON PAGE /--------------------- PAGE DSKBLK= .-200%400+DLOSPM / DISK BLOCK WHERE PAGE IS LOADED / REDSPL IS THE ROUTINE THAT HANDLES THE USER RESPONSE. IT DISPLAYS / THE COMMON TEXT MESSAGE AND SELECTIVLY ACCEPTS ONLY THE KEYS FOR / "RETURN" AND "GOLD-MENU" OR IT ALSO ACCEPTS A DIRVE NUMBER OF ONE DIGIT / AND ALLOWS THE USER TO RUB-OUT A MISTAKE. / / UPON ENTRY: / / A NEGATIVE VALUE IN THE AC MEANS THAT NO DRIVE NUMBER IS ALLOWED AND THAT / ONLY THE "RETURN" KEY AND THE "GOLD-MENU" KEYS ARE VALID. / / A POSITIVE VALUE IN THE AC MEANS THAT THE DRIVE NUMBER IS OPTIONAL AND / THAT THE "RETURN" KEY AND THE "GOLD-MENU" KEYS ARE VALID. / / A ZERO VALUE IN THE AC MEANS THAT THE DRIVE NUMBER IS REQUIRED AND THAT / A NUL-RESPONSE WILL GENERATE AN ERROR. THE DRIVE NUMBER CAN ONLY BE ONE / DECIMAL CHARACTER AND IS TERMINATED BY PRESSING THE "RETURN" KEY. / THE RUBOUT KEY CAN BE USED TO CORRECT AN ERROR IN THE FIRST DIGIT. / TWO DIGITS OR ANY NON DIGIT KEY TERMINATES WITH AN ERROR. / / UPON EXIT: / / CONTROL IS TRANSFERED TO THE FIRST LOCATION FOLLOWING THE CALL WHEN A USER / INPUT ERROR IS DETECTED AND CAUSES THE TERMINAL BELL TO RING. AC IS CLEAR. / / CONTROL IS TRANSFERED TO THE SECOND LOCATION FOLLOWING THE CALL IF THE USER / PRESSES THE "GOLD-MENU" KEYS. AC IS CLEAR. / / CONTROL IS TRANSFERED TO THE THIRD LOCATION FOLLOWING THE CALL WHEN THE USER / SUCCESSFULLY PRESSES THE RETURN KEY OR ENTERS A ONE DIGIT DRIVE NUMBER AND / THEN PRESSES THE RETURN KEY. THE LOCATION SPLDRV IS UPDATED WITH THE / VALUE FROM REDDRV IF THE USER ACTUALLY TYPED A DRIVE NUMBER. AC IS CLEAR. REDSPL, XX / HANDLE THE USER RESPONSE DCA REDFLG / SAVE DRIVE NUMBER REQUEST VALUE CIFMNU / CHANGE INDTRUCTION FIELD TO MENU FIELD JMS I IOACAL / CALL STANDARD MESSAGE OUTPUT ROUTINE 0 / USE DEFAULT OUTPUT CHANNEL REDTXT / POINTER TO MESSAGE CONTROL STRING 2520 / ADDRESS FOR LINE OF COMMON TEXT GMTXT / "OR PRESS GOLD MENU ..." 2700 / POSSITION CURSOR TO BOTTOM SCREEN LINE DCA REDDRV / CLEAR THE SAVED DRIVE NUMBER REDNXT, DCA REDNUM / STORE NEW CHARACTER COUNT CIFMNU / CHANGE INDTRUCTION FIELD TO MENU FIELD JMS I (INAIN) / GO GET A CHARACTER AND DISPLAY TIME DCA REDCHR / SAVE CHARACTER THAT USER TYPED TAD REDFLG / GET THE DRIVE NUMBER REQUESTED FLAG SPA CLA / CAN USER ENTER A DRIVE NUMBER ? JMP RETTST / NO, ONLY RETURN AND GOLD MENU ALLOWED AC7777 / SET THE AC EQUAL TO A MINUS ONE TAD REDNUM / COMBINE WITH THE CHARACTER COUNT SNA CLA / HAS THE USER ENTERED ONE CHARACTER ? JMP RUBTST / YES, THEN NO MORE DIGITS ARE ALLOWED TAD REDCHR / GET CHARACTER THAT USER ENTERED SPA / IS IT A SPECIAL CHARACTER ? JMP RUBTST / YES, GO CHECK FOR A VALID ONE TAD (-60) / NO, CHECK FOR AN ASCII "0" CHARACTER SPA CLA / IS CHARACTER AT LEAST A "0" ? JMP REDERR / NO, IT'S LESS THAN "0", GO REPORT ERROR TAD REDCHR / GET CHARACTER THAT USER ENTERED TAD (-72) / CHECK FOR AN ASCII "9" CHARACTER SMA CLA / IS CHARACTER GREATER THAN A "9" JMP REDERR / YES, GO REPORT THE ERROR TAD REDCHR / PICK UP CHARACTER USER TYPED AND (17) / MASK OFF DRIVE BITS DCA REDDRV / SAVE DRIVE NUMBER TAD REDCHR / PICK UP CHARACTER THAT USER TYPED JMS REDOUT / ECHO CHARACTER ON SCREEN AC0001 / SET UP FOR AN INCREMENT JMP REDSET / GO UPDATE THE CHARACTER COUNT RUBTST, TAD REDCHR / PICK UP CHARACTER THAT USER TYPED TAD (-EDRBCH) / CHECK FOR THE "RUB-OUT" KEY SZA CLA / IS IT A MATCH ? JMP RETTST / NO, GO CHECK FOR THE OTHER CHARACTERS TAD REDNUM / YES, PICK UP THE CHARACTER COUNT SNA CLA / IS THERE ANYTHING TO RUB-OUT JMP REDNXT / NO, JUST IGNORE THE KEY TAD (10) / PICK UP THE BACK SPACE CHARACTER CODE JMS REDOUT / OUTPUT IT TO THE SCREEN TAD (40) / PICK UP THE SPACE CHARACTER CODE JMS REDOUT / OUTPUT IT TO THE SCREEN TAD (10) / PICK UP THE BACK SPACE CHARACTER CODE JMS REDOUT / OUTPUT IT TO THE SCREEN DCA REDDRV / CLEAR DRIVE NUMBER AC7777 / SET UP FOR A DECREMENT REDSET, TAD REDNUM / COMBINE WITH CHARACTER COUNT JMP REDNXT / GO STORE NEW CHARACTER COUNT RETTST, TAD REDCHR / PICK UP CHARACTER THAT USER TYPED TAD (-EDMENU) / COMBINE WITH GOLD MENU CODE SNA CLA / DID USER TYPE "GOLD-MENU" ? JMP GMXIT / YES, GO TAKE GOLD MENU EXIT TAD REDCHR / PICK UP CHARACTER THAT USER TYPED TAD (-EDNWLN) / COMBINE WITH RETURN KEY CODE SZA CLA / DID USER TYPE "RETURN" ? JMP REDERR / NO, GO REPORT ERROR TAD REDFLG / GET DRIVE NUMBER REQUEST FLAG SZA CLA / MUST THE USER ENTER A DRIVE NUMBER ? JMP RETXIT / NO, TAKE NORMAL RETURN WITH CLEAR AC TAD REDNUM / PICK UP THE CHARACTER COUNT SNA CLA / DID THE USER TYPE ANYTHING ? JMP REDERR / NO, GO REPORT THE ERROR RETXIT, TAD REDNUM / PICK UP THE CHARACTER COUNT SNA CLA / DID THE USER ENTER A DRIVE NUMBER JMP REDXIT / NO, THEN DO NOT UPDATE THE DRIVE NUMBER TAD REDDRV / PICK UP THE USER SPECIFIED DRIVE NUMBER DCA SPLDRV / SET UP THE NEW DRIVE NUMBER REDXIT, ISZ REDSPL / BUMP RETURN ADDRESS TO NORMAL RETURN GMXIT, ISZ REDSPL / BUMP RETURN ADDRESS TO GOLD MENU RETURN JMP I REDSPL / RETURN TO CALLER REDERR, CIFMNU / CHANGE INDTRUCTION FIELD TO MENU FIELD JMS I IOACAL / CALL STANDARD MESSAGE OUTPUT ROUTINE 0 / USE DEFAULT OUTPUT CHANNEL ERRTXT / POINTER TO CONTROL STRING TO RING BELL JMP I REDSPL / TAKE ERROR RETURN TO CALLER REDOUT, XX / ROUTINE TO OUTPUT A CHARACTER JMP REDOT2 / SKIP OVER JWAIT INSTRUCTION REDOT1, CIFSYS / CHANGE INSTRUCTION FIELD TO SYSTEM FIELD JWAIT / WAIT FOR NEXT SIGNIFICENT EVENT REDOT2, CIFSYS / CHANGE INSTRUCTION FIELD TO SYSTEM FIELD TTYOU / TRY TO OUTPUT THE CHARACTER TO THE SCREEN JMP REDOT1 / BUSY, GO TO SYSTEM WAIT ROUTINE JMP I REDOUT / DONE, RETURN TO CALLER / SPLSEL IS A ROUTINE THAT WILL DETERMINE IF THE SPECIFIED DRIVE NUMBER / BELONGS TO A WINCHESTER DEVICE OR A FLOPPY DISK DRIVE. / RETURN IS TO CALL+1 FOR WINCHESTER AND CALL+2 FOR FLOPPY. SPLSEL, XX / CHECK DRIVE SELECTION FOR DEVICE TYPE TAD SPLOPT / GET OPTION CONFIGURATION BITS AND (MNRX2X) / MASK OFF WINCHESTER ON LINE BIT SNA CLA / CHECK FOR WINCHESTER ON LINE JMP SPLFLP / NO, DRIVE MUST BELONG TO A FLOPPY TAD SPLDRV / PICK UP THE DRIVE NUMBER TAD (-10) / SUBTRACT FOR DRIVES 0 TO 7 SMA CLA / CHECK FOR DRIVES 8 AND 9 JMP SPLFLP / YES, THEN DRIVES ARE FLOPPY TAD SPLOPT / GET OPTION CONFIGURATION BITS AND (MNRX4X) / MASK OFF DRIVE 0 ASSIGNED TO WINNI BIT SZA CLA / CHECK FOR SYSTEM RUNNING ON WINCHESTER JMP SPLWIN / YES, DRIVE MUST BELONG TO WINCHESTER TAD SPLDRV / PICK UP THE DRIVE NUMBER SNA / CHECK FOR DRIVE ZERO JMP SPLFLP / YES, THEN IT'S A FLOPPY TAD (-1) / DECREMENT THE DRIVE COUNT SZA CLA / CHECK FOR DRIVE ONE JMP SPLWIN / NO, DRIVE MUST BELONG TO WINCHESTER TAD SPLOPT / GET OPTION CONFIGURATION BITS AND (MNRX3X) / MASK OFF DRIVE ONE ASSIGNED TO WINNI BIT SNA CLA / CHECK FOR DRIVE ONE ASSIGNED TO WINCHESTER SPLFLP, ISZ SPLSEL / NO, DRIVE BELONGS TO FLOPPY DRIVE SPLWIN, JMP I SPLSEL / YES, DRIVE BELONGS TO WINCHESTER X=. / FIRST FREE LOCATION ON PAGE /--------------------- PAGE / TEXT MESSAGES DISPLAYED WHEN REQUESTING THE WPS UTILITY SOFTWARE / /----------------------------------------------------------------------------- / TWO DRIVE SYSTEM | REMOVE THE DISKETTE FROM DRIVE 0 AND INSERT THE / VALIDATION ERROR VE1 | WPS UTILITY SOFTWARE DISKETTE AND PRESS RETURN / DRIVE NUMBER ERROR | / RETURN OR GOLD MENU | OR PRESS GOLD MENU TO RECALL THE MAIN MENU. /----------------------------------------------------------------------------- / TWO DRIVE SYSTEM | INSERT THE WPS UTILITY SOFTWARE DISKETTE / GET DENSITY ERROR DE1 | INTO DRIVE 1 AND PRESS RETURN / DRIVE NUMBER ERROR | / RETURN OR GOLD MENU | OR PRESS GOLD MENU TO RECALL THE MAIN MENU. /----------------------------------------------------------------------------- / MULTI DRIVE SYSTEM | TYPE THE DRIVE NUMBER THAT CONTAINS THE / NO DEFAULT SET GDR | WPS UTILITY SOFTWARE AND PRESS RETURN / DRIVE NUMBER REQURIED | / GOLD MENU | OR PRESS GOLD MENU TO RECALL THE MAIN MENU. /----------------------------------------------------------------------------- / MULTI DRIVE SYSTEM | REMOVE THE DISKETTE FROM DRIVE 0 AND INSERT THE / VALIDATION ERROR VE2 | WPS UTILITY SOFTWARE DISKETTE AND PRESS RETURN / | / | OR TYPE THE DRIVE NUMBER THAT CONTAINS THE / | WPS UTILITY SOFTWARE AND PRESS RETURN / DRIVE NUMBER OPTIONAL | / RETURN OR GOLD MENU | OR PRESS GOLD MENU TO RECALL THE MAIN MENU. /----------------------------------------------------------------------------- / MULTI DRIVE SYSTEM | INSERT THE WPS UTILITY SOFTWARE DISKETTE / GET DENSITY ERROR DE2 | INTO DRIVE 1 AND PRESS RETURN / | / | OR TYPE THE DRIVE NUMBER THAT CONTAINS THE / | WPS UTILITY SOFTWARE AND PRESS RETURN / DRIVE NUMBER OPTIONAL | / RETURN OR GOLD MENU | OR PRESS GOLD MENU TO RECALL THE MAIN MENU. /----------------------------------------------------------------------------- / WINCHESTER SYSTEM | TYPE THE DRIVE/DEVICE NUMBER THAT CONTAINS THE / NO DEFAULT SET GDR | WPS UTILITY SOFTWARE AND PRESS RETURN / DRIVE NUMBER REQURIED | / GOLD MENU | OR PRESS GOLD MENU TO RECALL THE MAIN MENU. /----------------------------------------------------------------------------- / WINCHESTER SYSTEM | VOLUME 5 DOES NOT CONTAIN THE WPS UTILITY SOFTWARE / VALIDATION ERROR VE3 | / | TYPE THE DRIVE/DEVICE NUMBER THAT CONTAINS THE / | WPS UTILITY SOFTWARE AND PRESS RETURN / DRIVE NUMBER REQURIED | / GOLD MENU | OR PRESS GOLD MENU TO RECALL THE MAIN MENU. /----------------------------------------------------------------------------- / WINCHESTER SYSTEM | VOLUME 5 IS NOT ASSIGNED. / GET DENSITY ERROR DE3 | / | TYPE THE DRIVE/DEVICE NUMBER THAT CONTAINS THE / | WPS UTILITY SOFTWARE AND PRESS RETURN / DRIVE NUMBER REQURIED | / GOLD MENU | OR PRESS GOLD MENU TO RECALL THE MAIN MENU. /----------------------------------------------------------------------------- / TEXT MESSAGES DISPLAYED WHEN REQUESTING THE AMERICAN DICTIONARY / /----------------------------------------------------------------------------- / TWO DRIVE SYSTEM | REMOVE THE DISKETTE FROM DRIVE 0 AND INSERT THE / VALIDATION ERROR VE1 | AMERICAN DICTIONARY DISKETTE AND PRESS RETURN / DRIVE NUMBER ERROR | / RETURN OR GOLD MENU | OR PRESS GOLD MENU TO RECALL THE MAIN MENU. /----------------------------------------------------------------------------- / TWO DRIVE SYSTEM | INSERT THE AMERICAN DICTIONARY DISKETTE / GET DENSITY ERROR DE1 | INTO DRIVE 1 AND PRESS RETURN / DRIVE NUMBER ERROR | / RETURN OR GOLD MENU | OR PRESS GOLD MENU TO RECALL THE MAIN MENU. /----------------------------------------------------------------------------- / MULTI DRIVE SYSTEM | TYPE THE DRIVE NUMBER THAT CONTAINS THE / NO DEFAULT SET GDR | AMERICAN DICTIONARY AND PRESS RETURN / DRIVE NUMBER REQURIED | / GOLD MENU | OR PRESS GOLD MENU TO RECALL THE MAIN MENU. /----------------------------------------------------------------------------- / MULTI DRIVE SYSTEM | REMOVE THE DISKETTE FROM DRIVE 0 AND INSERT THE / VALIDATION ERROR VE2 | AMERICAN DICTIONARY DISKETTE AND PRESS RETURN / | / | OR TYPE THE DRIVE NUMBER THAT CONTAINS THE / | AMERICAN DICTIONARY AND PRESS RETURN / DRIVE NUMBER OPTIONAL | / RETURN OR GOLD MENU | OR PRESS GOLD MENU TO RECALL THE MAIN MENU. /----------------------------------------------------------------------------- / MULTI DRIVE SYSTEM | INSERT THE AMERICAN DICTIONARY DISKETTE / GET DENSITY ERROR DE2 | INTO DRIVE 1 AND PRESS RETURN / | / | OR TYPE THE DRIVE NUMBER THAT CONTAINS THE / | AMERICAN DICTIONARY AND PRESS RETURN / DRIVE NUMBER OPTIONAL | / RETURN OR GOLD MENU | OR PRESS GOLD MENU TO RECALL THE MAIN MENU. /----------------------------------------------------------------------------- / WINCHESTER SYSTEM | TYPE THE DRIVE/DEVICE NUMBER THAT CONTAINS THE / NO DEFAULT SET GDR | AMERICAN DICTIONARY AND PRESS RETURN / DRIVE NUMBER REQURIED | / GOLD MENU | OR PRESS GOLD MENU TO RECALL THE MAIN MENU. /----------------------------------------------------------------------------- / WINCHESTER SYSTEM | VOLUME 5 DOES NOT CONTAIN THE AMERICAN DICTIONARY / VALIDATION ERROR VE3 | / | TYPE THE DRIVE/DEVICE NUMBER THAT CONTAINS THE / | AMERICAN DICTIONARY AND PRESS RETURN / DRIVE NUMBER REQURIED | / GOLD MENU | OR PRESS GOLD MENU TO RECALL THE MAIN MENU. /----------------------------------------------------------------------------- / WINCHESTER SYSTEM | VOLUME 5 IS NOT ASSIGNED. / GET DENSITY ERROR DE3 | / | TYPE THE DRIVE/DEVICE NUMBER THAT CONTAINS THE / | AMERICAN DICTIONARY AND PRESS RETURN / DRIVE NUMBER REQURIED | / GOLD MENU | OR PRESS GOLD MENU TO RECALL THE MAIN MENU. /----------------------------------------------------------------------------- / TEXT MESSAGES DISPLAYED WHEN REQUESTING THE BRITISH DICTIONARY / /----------------------------------------------------------------------------- / TWO DRIVE SYSTEM | REMOVE THE DISKETTE FROM DRIVE 0 AND INSERT THE / VALIDATION ERROR VE1 | BRITISH DICTIONARY DISKETTE AND PRESS RETURN / DRIVE NUMBER ERROR | / RETURN OR GOLD MENU | OR PRESS GOLD MENU TO RECALL THE MAIN MENU. /----------------------------------------------------------------------------- / TWO DRIVE SYSTEM | INSERT THE BRITISH DICTIONARY DISKETTE / GET DENSITY ERROR DE1 | INTO DRIVE 1 AND PRESS RETURN / DRIVE NUMBER ERROR | / RETURN OR GOLD MENU | OR PRESS GOLD MENU TO RECALL THE MAIN MENU. /----------------------------------------------------------------------------- / MULTI DRIVE SYSTEM | TYPE THE DRIVE NUMBER THAT CONTAINS THE / NO DEFAULT SET GDR | BRITISH DICTIONARY AND PRESS RETURN / DRIVE NUMBER REQURIED | / GOLD MENU | OR PRESS GOLD MENU TO RECALL THE MAIN MENU. /----------------------------------------------------------------------------- / MULTI DRIVE SYSTEM | REMOVE THE DISKETTE FROM DRIVE 0 AND INSERT THE / VALIDATION ERROR VE2 | BRITISH DICTIONARY DISKETTE AND PRESS RETURN / | / | OR TYPE THE DRIVE NUMBER THAT CONTAINS THE / | BRITISH DICTIONARY AND PRESS RETURN / DRIVE NUMBER OPTIONAL | / RETURN OR GOLD MENU | OR PRESS GOLD MENU TO RECALL THE MAIN MENU. /----------------------------------------------------------------------------- / MULTI DRIVE SYSTEM | INSERT THE BRITISH DICTIONARY DISKETTE / GET DENSITY ERROR DE2 | INTO DRIVE 1 AND PRESS RETURN / | / | OR TYPE THE DRIVE NUMBER THAT CONTAINS THE / | BRITISH DICTIONARY AND PRESS RETURN / DRIVE NUMBER OPTIONAL | / RETURN OR GOLD MENU | OR PRESS GOLD MENU TO RECALL THE MAIN MENU. /----------------------------------------------------------------------------- / WINCHESTER SYSTEM | TYPE THE DRIVE/DEVICE NUMBER THAT CONTAINS THE / NO DEFAULT SET GDR | BRITISH DICTIONARY AND PRESS RETURN / DRIVE NUMBER REQURIED | / GOLD MENU | OR PRESS GOLD MENU TO RECALL THE MAIN MENU. /----------------------------------------------------------------------------- / WINCHESTER SYSTEM | VOLUME 5 DOES NOT CONTAIN THE BRITISH DICTIONARY / VALIDATION ERROR VE3 | / | TYPE THE DRIVE/DEVICE NUMBER THAT CONTAINS THE / | BRITISH DICTIONARY AND PRESS RETURN / DRIVE NUMBER REQURIED | / GOLD MENU | OR PRESS GOLD MENU TO RECALL THE MAIN MENU. /----------------------------------------------------------------------------- / WINCHESTER SYSTEM | VOLUME 5 IS NOT ASSIGNED. / GET DENSITY ERROR DE3 | / | TYPE THE DRIVE/DEVICE NUMBER THAT CONTAINS THE / | BRITISH DICTIONARY AND PRESS RETURN / DRIVE NUMBER REQURIED | / GOLD MENU | OR PRESS GOLD MENU TO RECALL THE MAIN MENU. /----------------------------------------------------------------------------- /*************************************************************************** /**** N O T E **** /**** IF YOU CHANGE ANY OF THE TEXT STRINGS BELOW, MAKE SURE YOU **** /**** CHANGE THE MESSAGE LISTINGS ON THE THREE PREVIOUS PAGES **** /*************************************************************************** DSKBLK= .-200%400+DLOSPM / DISK BLOCK WHERE PAGE IS LOADED SPLUTL, IFDEF ENGLSH IFDEF ITALIAN IFDEF DUTCH IFDEF SPANISH SPLUSD, IFDEF ENGLSH IFDEF ITALIAN IFDEF DUTCH IFDEF SPANISH < TEXT '&DICCIONARIO &AMERICANO'> SPLUKD, IFDEF ENGLSH IFDEF ITALIAN IFDEF DUTCH IFDEF SPANISH DRVTXT, IFDEF ENGLSH IFDEF ITALIAN IFDEF DUTCH IFDEF SPANISH DEVTXT, IFDEF ENGLSH IFDEF ITALIAN IFDEF DUTCH IFDEF SPANISH REMTXT, IFDEF ENGLSH < TEXT '^P!E^P&REMOVE THE DISKETTE FROM DRIVE !D AND INSERT THE ' *.-1 TEXT '^P!S DISKETTE^S' > IFDEF ITALIAN < TEXT /^P!E^P&TOGLIERE IL DICHETTO DALL'UNIT\@ !D ED INSERIRE IL / *.-1 TEXT /^PDISCHETTO DEI !S/ > IFDEF DUTCH < TEXT '^P!E^P&VERVANG DE DISKETTE UIT AANDRIJVER !D DOOR DE ' *.-1 TEXT '^P!S DISKETTE^S'> IFDEF SPANISH < TEXT '^P!E^P&RETIRE EL DISKETTE DE LA UNIDAD !D E INSERTE LOS ' *.-1 TEXT '^P!S DISKETTE^S'> SPLAND, IFDEF ENGLSH IFDEF ITALIAN IFDEF DUTCH < TEXT ' EN DRUK OP !&RETURN'> IFDEF SPANISH < TEXT ' Y PULSE RETORNO'> INSTXT, IFDEF ENGLSH IFDEF ITALIAN< TEXT /^P!E^P&INSERIRE IL DISCHETTO DEI !S NELL'UNIT\@ !D^S/ > IFDEF DUTCH IFDEF SPANISH NUMTX1, IFDEF ENGLSH IFDEF ITALIAN< TEXT /^P!E^P&INTORDURRE IL NUMERO DELL'!SCHE CONTIENE I^P!S^S/> IFDEF DUTCH IFDEF SPANISH NUMTX2, IFDEF ENGLSH IFDEF ITALIAN< TEXT /^P&O INTRODURRE IL NUMERO DELL'!SCHE CONTIENE I^P!S^S/> IFDEF DUTCH IFDEF SPANISH SPLVNC, IFDEF ENGLSH IFDEF ITALIAN IFDEF DUTCH IFDEF SPANISH SPLNAS, IFDEF ENGLSH IFDEF ITALIAN IFDEF DUTCH IFDEF SPANISH WRKTXT, IFDEF ENGLSH /M007 IFDEF ITALIAN IFDEF DUTCH IFDEF SPANISH < TEXT '^P!E^P&CARGANDO ^S - &ESPERE'> REDTXT, TEXT '^P^S^P' GMTXT, IFDEF ENGLSH < TEXT '!&OR &PRESS &GOLD !&MENU TO RECALL THE &MAIN &MENU.'> IFDEF ITALIAN < TEXT /&O PREMERE &ORO !&MENU PER TORNARE AL &MENU &PRINCIPALE./> IFDEF DUTCH < TEXT '!&DRUK OP &GOUD !&MENU OM TERUG TE GAAN NAAR HET &HOOFDMENU'> IFDEF SPANISH < TEXT '!&O &PULSE &DORADA !&MENU PARA VOLVER AL &MEN\Z &PRINCIPAL.'> ERRTXT, TEXT '^CG' / CONTROL STRING TO RING THE TERMINAL BELL INUERR, IFDEF ENGLSH < TEXT '^P!E^P&THAT!SIS ALREADY IN USE. &PRESS !&RETURN TO ' /A010 *.-1 /A010 TEXT 'ENTER ANOTHER NUMBER.' /A010 > IFDEF ITALIAN < TEXT /^P!E^P&!SGI\@ UTILIZZATA. &PREMERE !&RITORNO, USARE UN / *.-1 TEXT /ALTRO NUMERO./ > IFDEF DUTCH < TEXT '^P!E^P&DIE!S IS AL IN GEBRUIK. DRUK OP !&RETURN EN ' *.-1 TEXT 'PROBEER OPNIEUW.'> IFDEF SPANISH < TEXT '^P!E^P&ESTE!S YA EST\A EN USO. &PULSE !&RETORNO PARA' *.-1 TEXT ' TECLEE OTRO N\ZMERO.'> /*************************************************************************** /**** N O T E **** /**** IF YOU CHANGE ANY OF THE TEXT STRINGS ABOVE, MAKE SURE YOU **** /**** CHANGE THE MESSAGE LISTINGS ON THE THREE PREVIOUS PAGES **** /*************************************************************************** RELOC /WPSPEL.PA / ******* EDIT HISTORY ******* / / 019 rcme 22-May-85 Adapt to multinational characters in personal / dictionaries. Fix DEL CHAR/Tech character bug. / / -------------------- All below refer to V2.0 and earlier -------------------- / / 018 WJY 07-NOV-84 Fix bug which caused XPU port patches to be / done on a dictionary block / 017 WJY 26-OCT-84 Eliminate file name display while user dictnry / is loading to prevent possible wrong name / from being displayed (WPSV2-315). / 016 WJY 25-OCT-84 Fix bug induced in edit 15 which causes the UD / operation to run when SC/LU should.(&vice versa?) / 015 WJY 22-OCT-84 Report document open failure to user (WPSV2-240). / 014 WJY 18-OCT-84 Change all occurrences of LINCOL to SPLINC / to eliminate conflict in name with new symbol / defined in WPEDIT. / 013 WJY 28-AUG-84 Support larger Z80 ram files / 012 WJY 21-AUG-84 Enable "Add New Word" functionality w/o / new word list full message. / 011 WJY 18-AUG-84 Fix bug which caused words followed by a period / to miss possible corrections. / 010 WJY 14-AUG-84 More "Update Personal Dictionary" / 009 WJY 07-AUG-84 Reduce max word length to 31 to prevent HM code / from dying. Bug WPSV2-156 / 008 WJY 24-JUL-84 Add "Update Personal Dictionary" functionality / 007 WJY 21-JUL-84 Delete debugging halt accidentally installed / in base level. / 006 WJY 13-JUL-84 "Undelete" commented out code for XPU reset / sequence. Unnecessary in pass 1 boards but / needed for pass 2. Production boards ??? / 005 WJY 12-JUN-84 Eliminate the "Working" message & add / additional XPU comments. / 004 WJY 29-MAY-84 XPU & single American/British Utility disk / support. / 003 WCE 23-APR-84 Eliminated second QURX routine in Field TWO / 002 WJY 06-APR-84 Unbundle Spelling Corrector / 001 GDH/EH AUG/SEP-83 Initial version / FIELD 0 / Write out code. *200 / Set up for write-out. JMP I .+2 JMP I .+2 RXLOAD 7605 *RXLDLS RXEWT;0;RXQBLK;. IFNDEF DECDEV < DLOSPL;100;CDF 20;-DSOSPL / Write-out primary spell-check code. > IFDEF DECDEV < DLOSPL;100;CDF 40;-DSOSPL > DLOSPX;200;CDF 30;-DSOSPX / Writeout auxillary IOA & text code. 0 IFNDEF DECDEV < FIELD 2 / Assemble SPELLING CHECKER code into field 3. > IFDEF DECDEV < FIELD 4 > CDFSPL=CDFMTH CIFSPL=CIFMTH CDISPL=CDIMTH CDFMYF=CDFSPL CDFTXT=CDFLP / Text field is field 5. CIFTXT=CIFLP / ... CDITXT=CDILP / / Page 0 values. *100 SCURSR, 0 / Saved CURSOR value for start of word. SCURPT, 0 / Saved CURPTR value for start of word. HYPHEN, 0 / - ==> scan 'till hyphen seen. / 0 ==> no hyphen seen. / + ==> word is hyphenated. LINCNT, 0 / # of lines word crosses. CHAR, 0 / Saved char from TSTCHR routine. NOTWRD, 0 / "NOT WORD" indicator. <> 0 means NOT A WORD. WRDSIZ, 0 / Word size thus far. DISATR, 0 / Contains attributes word for REPLACE replacement words. NEWLIN, 0 / Flag to indicate that a NEW LINE has been scrolled. SLCRSR, 0 / CURSOR value of 1st word on current line. ELINCT, 0 / counter as to which line user is on during EDIT. RLINCT, 0 / counter as to which line is the restart line. UNDLCT, 0 / count of # of characters in undeleted buffer. NOINSR, 0 / <> 0 when INSERT not allowed. NOMORE, 0 / <> 0 when at end of current line. ECMODE, 0 / current MODE of EDIT processing. ECERFL, 0 / <> 0 When there is an error msg being displayed. OFFSET, 0 / pointer to the option requested WDOFST, 0 / pointer to the correct word requested LEVEL, 0 / active menu line: 0/corr. list, 1/menu INPCHR, 0 / char input by user to menu CURLSZ, 0 / current logical size of correct word list RTNSTS, 0 / return status code SIXTEN, 16 / row 16 P137, 137 / 7-bit mask to uppercase M107, -107 / minus (107) LNCLMR, 0 / line & column # of <.......> text TMPWRD, 0 / temp location WRD, 0 / pointer to start of word ROW, 0 / row correct words are being displayed on WRDCNT, 0 / counter of number of words NUMTRY, 0 / number of times user reaches end of C.W.L WDSAVL, 0 / if set, word not found in dictionary HLPLEN, -110 / number of 'spaces' in the HELP header VIDEO, 0 / 1 if error word is highlighted, 0 if not. / Set/Cleared by DISPLY. HALTFG, 0 / GOLD:HALT flag. Set if GOLD:HALT detected. UPDCLK, 0 / If set, WTLOOP will update the screen clock. STRTAH, 1&377 / high byte starting address to load Z80 from STRTAL, 0&377 / low byte starting address to load Z80 from GTAPU1=400 / starting address to go to ( 100 hex ) INIUSR, 0 / -1 for SC, 0 for LU (loading user dict'ry),/M008 / >0 for UD (update user dict'ry) /A008 HOLDCH, 0 / temp for DISWRD routine. FILNUM, 0 / file # the APU should be reading from CORACT, 0 / CORrector ACTivated flag: /A002 / =1 if Spelling Corrector Option active/A002 / =0 otherwise (any other value INVALID)/A002 XPUFLG, 0 / True when the external processor is an XPU/A004 MSTRLX=-2 / Master lexicon file: file # 2 RAMFIL=-3 / RAM load file: file # 3 HMCODE=620 / Block # where Houghton-Mifflin code starts/M013 UPDICT=1 / *TEMPORARY* activates add new word.. /A012 SLNMOD=JMS I .;ECSLMD / Spell Check equivalent of some editor routines. ADVPTR=JMS I .;ECAPTR / ... BKPPTR=JMS I .;ECBPTR / INSCHR=JMS I .;ECICHR / INSERT (not same as EDITOR INSCHR) GETCHR=JMS I .;ECGCHR / CURMOV & LODCHR MOVCHR=JMS I .;CRSTMV / CURMOV only. LOADCH=JMS I .;ECLOAD / LODCHR UPDSCN=JMS I .;FXSCRN / FXSCRL CHKSCN=JMS I .;CKSCRN / TSTLIM & FXSCRL PUTCHR=JMS I .;PTCHRS / Output a string of 7 bit characters. CALEDT=JMS I .;CALLAR / Linkage to editor 'CALLAR' routine. /d009 MAXCHR=40 / Maximum size of word (32 decimal). MAXCHR=37 / Max. length=31 as temp fix for HM bug /A009 BUF0LEN=226 / length of correct word buffer (150 dec.) BUF1LEN=74 / length of table of correct words / (max. of 30 words, 2 entries/word) / Below are the equates associated with the APU protocol. / PCSTWD=1 / START word. PCENWD=2 / END word. PCADWD=3 / ADD word to user dictionary (IGNORE). PCRDBK=4 / READ block. PCWDOK=5 / Word FOUND and spelled correctly. PCWDNF=6 / Word NOT FOUND in dictionary. PCNXWD=7 / Get NEXT possible correct word(s). PCNOMR=10 / No more possible corrections. PCDONE=11 / Done ADD function. PCUSDF=12 / User dictionary FULL. PCUDFE=13 / Undefined Error. PCSTBK=14 / Start of block. PCENBK=15 / End of block. PCVRFY=16 / Verify last word. PCINUD=17 / Initialize user dictionary. PCDUPL=20 / Duplicate word in user dictionary. PCADNW=21 / ADD word to user dict. & new list (IGNORE)/A008 PCRTNW=22 / Return new user word list /A008 PCENNW=23 / End of new word list /A008 PCSS8B="%&177 / Single Shift an 8 bit character /a019 / / These are the IOT's associated with the APU & XPU / / APU XPU / ------ ------- Z80DF=6140 ;X80DF=6170 / Set APU outbound data available flag Z80SF=6141 ;X80SF=6171 / Skip next instruction if APU flag is set, / and clear flag. Z80RN=6142 ; / not used / Read APU outbound register, DO NOT clear/M005 / APU outbound read not finished flag. Z80RS=6143 ;X80RS=6173 / Read APU outbound register, clear APU / outbound read not finished flag. Z80NP=6144 / NOP. X80ST=6174 / Set selected bits in XPU status register/A005 Z80LI=6145 ;X80LI=6175 / Load APU interrupt enable. Z80WR=6146 ;X80WR=6176 / Write APU inbound register. Z80IF=6147 ;X80IF=6177 / Skip on APU inbound read complete flag, / and clear it. / / Bit definitions for send to APU / CDBIT=0400 / command XRBIT=1000 / transfer ready RBIT=4000 / reset / / Bit definitions for the XPU IOTs. / ATTNBIT=4000 / attention (X80ST) /A005 BKDNBIT=2000 / block transfer done " /A005 TIMRBIT=100 / 10 msec timer " /A005 RSETBIT=1000 / hardware reset (X80LI) /A005 /**************************************************************************** / ECDOIN Hook to the origional routine which will trap /a019 / any 8 bit characters input, and expand them to /a019 / dead things /a019 /**************************************************************************** ECDOIN, XX / Return address for 8 bit ECDOIN /a019 TAD T1 / Get the character /a019 CIFTXT / Change to field containing 8 bit code /a019 JMS ECIMCH / Call the routine /a019 JMP I ECDOIN / Return /a019 /----------- PAGE /------------------------------------------------------------------------/ / / NOTE: All FATAL errors, after being reported, jmp to EOF for final / cleanup. In order to catch the start-up errors, the entry point / and exit CDI are assembled to return to appropriate clean-up / code. / /------------------------------------------------------------------------/ SPELL, STRTGM / entry point to spelling checker. RDF / Get return data field. TAD CIDF0 / Make a return CID instruction. DCA SPLXIT / save for final return. CDFMYF / Back to our field. /d015 TAD INIUSR / See if SC or LU or UD /A008 /d015 SMA SZA CLA / It's SC or LU - SKIP /A008 CIFTXT / Go do initial checking /A015 JMS SPINCK / ... /A015 JMP UPDTPD / It's UD - Go update the user's dict. /A008 JMP SCNXT2 / PD or DS -merge below to get to 1st posn./M015 / Couldn't open file -just exit /A015 EOF, JMS CLRRGN / Clear scrolling region. SPLXIT, CDIEDT / Map return field. JMP I SPELL / Return to Menu (or where ever). / / return to here to ignore.... SCFIX moved edit no. 008 - space wars /M008 / / / merge here to scan to the start of the next word. / SCNEXT, CDFEDT / Re-enable ECHO while scanning to next word. AC0001 / ... DCA I (ECHFLG) / .... TAD I (SCRLCT) / Test screen lag. CDFMYF / SZA CLA / Skip if no lag. JMS UNDOLG / Update screen. SCNXT1, AC0001 / Move to next CURSOR position. SCNXT2, GETCHR / Get (next) character. JMP EOF / If we get EOF then we're done. AND P177 / Strip mode bits /a019 JMS TSTCHR / See if character is ALPHA-ONLY. JMP SCNXT1 / Jmp if no. Char must be a word separator. NOP / Allow words to begin w/ nuneric. TAD CHAR / Get character back. JMS TSTSPC / See if special (".", "-", or "'"). SNA CLA / Skip if none of those. JMP SCNXT1 / Don't allow those chars as introducers. / / found Start of Word. / CDFEDT / Map edit field. TAD I (CURSOR) / Save current context. DCA SCURSR / Current cursor posn. TAD I (CURPTR) / Save current text pointer. DCA SCURPT / ... DCA I (ECHFLG) / Turn off echo while scanning word. TAD I (SCRLCT) / Test screen lag to start of word. CDFMYF / Back to our field. SZA CLA / Skip if no lag. JMS UNDOLG / Undo screen lag (Call FXSCRL). TAD NEWLIN / has there been a new line since the start of / the last word? SNA CLA / Skip if yes. JMP SCNXT3 / JMP if no. TAD SCURSR / Save cursor of 1st word on the line. DCA SLCRSR / ... DCA NEWLIN / Reset new line seen flag. SCNXT3, DCA LINCNT / Init # of lines word is on. TAD (WRDBUF-1) / Init buffer to save chars in. DCA X0 / ... AC0001 / Set "NOT A WORD" flag to say that word DCA NOTWRD / is "NOT A WORD" (yet). DCA WRDSIZ / Init # of chars of word to none. DCA CHARCT / Init # of chars to send to APU to 0 /a019 TAD CHAR / Restore 1st character of word. MSLMRG, AND P377 / Isolate only the character bits. TAD (-ECMDFL) / Trap out stray Line Modified Flags /a019 SNA / Is this a line modified flag? /a019 JMP NEXTCH / Yes, ignore it /a019 TAD (ECMDFL) / No, restore character /a019 JMS TSTCHR / See if character is ALPHA-NUMERIC. JMP DONWRD / Exit loop if no. JMP MSLMG1 / Allow numeric. TAD CHAR / Get character. JMS TSTSPC / See if allowable special (".", "-", or "'"). SZA CLA / Skip if yes. DCA NOTWRD / Otherwise set "WORD IS A WORD" when see alpha. MSLMG1, TAD CHARCT / See if word buffer is full. TAD (-MAXCHR) / ... SMA CLA / Skip if no. JMP SCANWD / If yes, word is too long. Scan it. TAD CHAR / Get character back. X="-&177 TAD (-X) / Is character a hyphen? SZA CLA / Skip if yes. JMP NXTCH2 / no. continue below. TAD HYPHEN / What mode are we currently in? SPA CLA / Skip if 1st pass on word. JMP DNWRD2 / If 2nd pass, then stop on the hyphen. ISZ HYPHEN / Say that a hyphen has been seen. NXTCH2, TAD CHAR / Get character back. DCA I X0 / Save character in intermediate buffer. JMS TSTLIN / Check for word wrapped. CLA / Get rid off rubbish in AC /a019 TAD CHAR / Check for 8 bit character /a019 AND (200) / Is this an 8 bit character? /a019 SZA CLA / .... /a019 ISZ CHARCT / Yes, increase no of chars to Z80 to /a019 / include toggle character sent to APU /a019 ISZ WRDSIZ / 1 more char in word buffer. ISZ CHARCT / And 1 more char to send to Z80 /a019 NEXTCH, AC0001 / Move text ptr to next cursor posn. NXTCH1, GETCHR / Load character. JMP DONWRD / if EOF then we're done this word. AND P177 / Mask out mode bits /a019 JMP MSLMRG / Check out this character. CHARCT, 0 / Count of chars to be sent to Z80 /a019 /**************************************************************************** / GETZ8C Code here is placed around the old GETZ80 code to deal /a019 / with 8 bit characters form the Z80, which appear as /a019 / stripped 7 bit preceeded by a toggle character /a019 /**************************************************************************** GETZ8C, XX / Start routine with return address /a019 JMS GETZ80 / Use the old routine to get a char from/a019 TAD (-PCSS8B) / the Z80 APU. Check for the SS 8 bit /a019 SZA / Is it the single shift into 8 bit char?/a019 JMP GETZXT / No, just return the character /a019 JMS GETZ80 / Yes, get the next character /a019 TAD (200) / Set the 8th bit /a019 SKP / as is new character, skip toggle add /a019 GETZXT, TAD (PCSS8B) / Recover origional 7 bit character /a019 JMP I GETZ8C / Return /a019 /----------- PAGE SCANWD, AC7777 / Say that word (which is too long) is notaword. DCA NOTWRD / ... SCANLP, AC0001 / Move to next cursor position. GETCHR / Get next character. JMP EOF / Done at End of file. JMS TSTCHR / Check current character for ALPHA. JMP DONWRD / Terminator character. JMP SCANLP / Scan words with NUMERIC in them. JMP SCANLP / It is alpha. continue to scan. DONWRD, TAD HYPHEN / 1st pass? SPA CLA / Skip if yes. Leave HYPHEN indicator as set. DCA HYPHEN / Reset "STOP ON HYPHEN" flag. DNWRD2, TAD NOTWRD / Is word NOT A WORD? SZA CLA / Skip if NO (ie word is still a word). JMP WRDOK / Check HLT FLAG & then scan to next word. JMS TSTLIN / See if we word-wrapped. TAD X0 / Get ptr to last char of word. DONXXX, DCA BUFPTR / Save ptr to last char. TAD I BUFPTR / Get last char of word. JMS TSTSPC / See if special (".", "-", or "'"). SZA CLA / Skip if yes. JMP DONYYY / JMP if no. we're at the end of the word. TAD BUFPTR / Get ptr to last character of word. TAD (-WRDBUF) / See if we're at the start of the buffer. SNA / Skip if no. JMP WRDOK / If yes, then word is empty (& therefore OK). TAD (WRDBUF-1) / Backup the pointer by 1. JMP DONXXX / And try next character. DONYYY, TAD BUFPTR / Compute size of word. TAD (-WRDBUF+1) / ... DCA WRDSIZ / save it for those who need it. DCA I X0 / Set a stopper at the real end of the word. JMS SNDWRD / Send the word to the APU. JMS GETAPU / Get response back. -12 / Time-out max. - 10 seconds PCWDOK;WRDOK / Word is valid. Check HALT FLAG, then continue scanning. PCWDNF;NOTFND / Word is not in dictionary. PCDONE;WRDOK / Done adding word to user dictionary. PCUSDF;USDFUL / User dictionary full. PCDUPL;WRDOK / Word already in dictionary. Ignore error. 0 / No more valid return options. NOTFND, ISZ BUFPTR / Bump to the next character. TAD I BUFPTR / Get next character. X=".&177 / period character. TAD (-X) / See if next char is a period. SZA CLA / Skip if yes. JMP NTFND2 / JMP if no. handle "WORD NOT FOUND". ISZ WRDSIZ / Bump word size. JMS SNDWRD / Retry the word with the period. JMS GETAPU / get response. -12 / Time-out maximum - 10 seconds. PCWDOK;WRDOK / Word is valid after all. Check HALT FLAG, then continue. PCWDNF;NTFND1 / Word still isn't found. 0 / All other returns are fatal. BUFPTR, 0 / Ptr into word. WRDOK, CDFSYS / Check the HALT FLAG. TAD I HLTFLG / ... CDFMYF / .... SNA CLA / Skip if it's set. JMP SCNEXT / Halt flag not set. Continue scanning. ISZ HALTFG / Say that we GOLD:HALTed. AC7777 / Say that no word is highlighted. DCA VIDEO / ... JMP WRDERR / Merge to user menu. NTFND1, AC7777 / Bump size back down. Highlight the word TAD WRDSIZ / without the terminating period. DCA WRDSIZ / ... / Must use SNDWRD to tell HM that the /A011 / word it returns corrections for will /A011 / be "foo" not "foo." /A011 JMS SNDWRD / Send incorrectly spelt word w/o the period./M011 JMS GETAPU / Get response /A011 -12 / Time-out max. - 10 secs. /A011 PCWDNF;NTFND2 / Word was not found B4 so this is the /A011 0 / only kosher response /A011 NTFND2, TAD HYPHEN / Is word hyphenated? SMA SZA CLA / Skip if part of hyphenated word in error. JMP NTFND4 / Jmp if only done 1st pass on hyphenated word. CDFEDT / Now do a 'screen check' for 158 col mode. TAD I (CURSOR) / If word terminates in 2nd half TAD (-WIDTH) / then be sure that 2nd screen gets displayed. SMA CLA / Skip if word doesn't end in 2nd half. JMP NTFND3 / JMP if word ends in right-half screen. TAD SCURSR / Get start of word. Make sure that start-of- DCA I (CURSOR) / word half is mapped. NTFND3, CDFMYF / Back to our field. CHKSCN / Make sure right screen is displayed. TAD SCURSR / Restore CURSOR to point to start of word. CDFEDT / ... DCA I (CURSOR) / .... CDFMYF / back to our field. JMS DISPLY / Refresh word. 1 / flag to say SET REVERSE VIDEO. DCA HALTFG / Say that NOT stopped due to GOLD:HALT. WRDERR, JMP ERRGCOR / set up to display corrections.. / / return to here to continue..... / SCCONT, TAD VIDEO / Did we edit the line? SZA CLA / Skip if yes. Editting reset the restart point. JMP SCFIX / Didn't edit. Unhighlight word & continue. JMS ECPSCN / Position cursor to start of restart word. DCA NEWLIN / Say "still on same old line". JMP SCNXT2 / Rescan old word. /----------- PAGE /------- / /DISPLY - routine to redisplay currently selected word. / / This routine refreshes the text on the screen starting at SCURPT / for WRDSIZ characters. Screen / position of start of word is minus LINCNT (-LINCNT) lines from the / bottom of the screen. Column of start of word is SCURSR. / DISPLY, XX / entry point. TAD I DISPLY / Get address of type of video call. DCA VIDEO / save. ISZ DISPLY / bump return address. TAD WRDSIZ / Get size of word. CIA / Negate for IZZY loop. DCA DISCNT / ... DCA T2 / reset current attributes. JMS SETATR / ... AC7777 / In all attributes initially. DCA DISATR / ... JMS POSNCU / Position CURSOR & init EDT pointers. LOADCH / Load 1st character of word. XX / Should not get here. JMP DSPLY2 / Merge below w/ character. DSPLY1, ADVPTR / Advance CURPTR to next character. XX / should never get here. DSPLY2, TAD (-ECWWLN) / soft wrap? /m019 SNA / skip if no. JMP DSPLY4 / Yes. output CR LF sequence. TAD (ECWWLN-ECHYLN) / Is character SOFT-HYPHEN? SNA / Skip if no. JMP DSPLY3 / JMP if yes. output attributed hyphen & CRLF. TAD (ECHYLN-ECSTRL) / Start of ruler? SNA / Skip if no. JMP DSPLY5 / Skip over ruler. TAD (ECSTRL-ECJSPC) / Soft space? SNA / Skip if no. JMP DSPLY6 / Skip over soft space. TAD (ECJSPC) / Make character normal. JMS DSPLY7 / Check the attributes /a019 /d019 DCA T1 / Save character. /d019 TAD T1 / Get character. /d019 AND (1600) / Isolate attribute bits only. /d019 DCA T2 / Save temporarily /a019 /d019 TAD T2 / Retrieve again /a019 /d019 AND DISATR / AND with prior attributes. /d019 DCA DISATR / Set new attributes word. /d019 TAD T1 / Get character back. /d019 AND (1600) / Isolate attributes. /d019 DCA T2 / See if same as previous attributes. /d019 TAD T2 / ... /d019 CIA / ... /d019 TAD PRVATR / .... /d019 SZA CLA / Skip if yes. /d019 JMS SETATR / otherwise set new attributes. /d019 TAD T1 / Get character (with attributes). CIFEDT / Call routine in editor field to output char. CALEDT; PUTSCH / ... CDFEDT / .... TAD T1 / Get the last character back again /a019 TAD (-ECSTOV) / Test for it being a dead key sequence /a019 SZA CLA / Is this a dead key introducer? /a019 JMP DISNDK / No, don't display a dead key character/a019 DISADV, ADVPTR / Yes, skip the rest as PUTSCH displays /a019 XX / Should never get here /a019 TAD (-ECNDOV) / the whole thing on the first pass /a019 SNA / Is this the end of the dead sequence? /a019 JMP DISNDK / Yes, go deal with rest of word /a019 TAD (ECNDOV) / Restore the original character /a019 JMS DSPLY7 / Check the attributes /a019 JMP DISADV / Deal with next char in dead key /a019 DISNDK, TAD T2 / Get attributes back again /a019 AND DISATR / AND with prior attributes /a019 DCA DISATR / Set new attributes word /a019 ISZ DISCNT / See if done word yet. JMP DSPLY1 / Not at end yet. get next character. TAD VIDEO / Reverse video? SZA CLA / Skip if no. JMS CLRRV / Shut-off reverse video. CIFPRT / Shut-down BLKBOX routine. JMS I (BLKBOX) / ... JMP I DISPLY / Return to caller. DSPLY3, TAD ("-&177 / Get hyphen character. TAD PRVATR / Add on attributes of immediate prior character. CIFEDT / Call editor routine to output character. CALEDT; PUTSCH / ... CDFEDT / .... DSPLY4, PUTCHR; 4000+CR / Posn to start of next line. 0000+LF / .... CDFEDT / Reset column pointer to start of line. DCA I (CURPOS) / ... DSPL4A, CDFMYF / Back to our field. JMP DSPLY1 / Loop back to get next character. DSPLY5, ADVPTR / Scan an EDT buffer character. XX / Should never get here. TAD (-ECNDRL) / Is this the end of the ruler? SZA CLA / Skip if yes. JMP DSPLY5 / Scan to next character. JMP DSPLY4 / Skip to next line. DSPLY6, PUTCHR; 4000+ESC / advance cursor. 4000+"[ / ... 0000+"C / .... CDFEDT / Bump column pointer to next column. ISZ I (CURPOS) / ... JMP DSPL4A / Reset data field & process next char. DSPLY7, XX / Store and set new attributes routine /a019 DCA T1 / Save character /a019 TAD T1 / Get the character with the attributes /a019 AND (1600) / Mask out the attribute bits /a019 DCA T2 / Save in temporary register /a019 JMS STATR1 / Check against previous attributes and /a019 / change them if neccesary /a019 TAD T1 / Get character back /a019 JMP I DSPLY7 / Return /a019 PRVATR, 0 / Saved attributes of previous character. DISCNT, 0 / Count of # of chars in word. /**************************************************************************** / ECSCRL moved elsewere to make space for DISPLY to expand /a019 /**************************************************************************** /**************************************************************************** / SNDAPC This code has been put round the origional SNDAPU to /a019 / deal with 8 bit characters by proceeding them with a /a019 / toggle character /a019 /**************************************************************************** SNDAPC, XX / Start routine with return address /a019 DCA T3 / Save the character temporarily /a019 TAD T3 / Get it back /a019 AND (200) / Is it an 8 bit character /a019 SNA CLA / ? /a019 JMP CHROLY / No, send character only /a019 TAD (PCSS8B) / Yes, send a toggle character /a019 JMS SNDAPU / Send it via the old SNDAPU routine /a019 CHROLY, TAD T3 / Get the character back /a019 JMS SNDAPU / Sent it /a019 JMP I SNDAPC / Return to caller /a019 /------------ PAGE NTFND4, AC7777 / Set flag to stop at next hyphen DCA HYPHEN / and rescan the word. TAD LINCNT / Get # of lines to start of word. JMS ECSCRL / Scroll to the line in question. JMS ECINI2 / Posn cursor to start of word. DCA NEWLIN / Reset "still on same line" flag. JMP SCNXT2 / Start rescanning the word. /------------- / /ECOPTN - handle EDIT option for SPELLING CORRECTOR. / / This routine allows the user to EDit the line with the word in / question on it. The user is allowed a subset of full editting / capabilities. The user is not allowed to backup beyond the beginning / of the line, nor are they allowed to advance beyond the last word on / the line (which may cross multiple line boundries). / / /CALL: JMS ECOPTN (from USER MENU dispatcher). / rtn1 Return to take if the RETURN key is hit. / rtn2 Return to take if the GOLD:MENU key is hit. / /-------------- ECOPTN, XX / Entry point. ISZ INEDIT / Say that we're editing. TAD VIDEO / Is word currently displayed in RV mode? SZA CLA / Skip if no. Skip first time initialization. JMS ECINIT / Do edit command initialization stuff. JMS ECPSCN / Position cursor (for gold:menu exit & return). DCA UNDLCT / Clear out the DELETE buffer. DCA DISATR / Zero word attributes so ECIMCH works /a019 DCA ECMODE / Reset MODE to ADVANCE. JMS ECINI2 / Do rest of initialization. ECLOOP, CDFEDT / Get scroll count (if any). TAD I (SCRLCT) / ... CDFMYF / Back to our field. DCA T1 / save. TAD T1 / Get lag count. TAD ELINCT / Keep track which line we are on. DCA ELINCT / ... TAD T1 / Get lag count. TAD RLINCT / update distance to restart line. DCA RLINCT / ... CHKSCN / Update screen (call FXSCRL). JMS IPTCHR / Get next input character. / JWAIT until something available. DCA T1 / Save character for a bit. TAD ECERFL / Is there an error line to clear? SNA CLA / Skip if yes. JMP ECHECK / Jmp if no. continue below. JMS PUTERR / Output error line. BLANKL / blank line. DCA ECERFL / Say no error line being displayed. ECHECK, TAD (ECTBL-2) / Get address of command table. DCA X1 / Save in an index register. TAD T1 / Send the char in the AC. JMS DSPTCH / Dispatch to appropriate routine. If not command / then try inserting character into document. TAD T1 / Get user edit command. SPA CLA / Skip if insertable character. JMP ECBDCM / Report "this command has no meaning here" error. ECINS1, JMS ECDOIN / Check for error & insert character. ECFIX, MOVCHR / Fix up justification. ECFIX3, DCA ECMODE / Reset MODE to ADVANCE. JMP ECLOOP / Go wait for next command. ECBDCM, JMS PUTERR / Output error message. NOMEAN / "this command has no meaning here". JMP ECLOOP / Wait for next command. ECRTN3, ISZ ECOPTN / GOLD:MENU return. IAC / Set Gold:MENU exit flag. ECRTN2, JMS ECEXIT / Do common EDIT/REPLACE exit stuff. JMP I ECOPTN / return to caller. ECHELP, JMS SAVCUR / Save cursor & attributes. AC0001 / set to indicate edit line help JMP HLPKEY / display the help menu ECHPRN, JMS RSTCUR / Restore cursor & attributes. JMP ECLOOP / Get next input. INEDIT, 0 / <> 0 while in ecoptn. ECINIT, XX / Routine common both to EDIT & REPLACE cmnds. JMS DISPLY / Remove reverse video from incorrect word. 0 / ... TAD LINCNT / Get # of lines from start of line w/ error. DCA ELINCT / Initialize our line counter. TAD ELINCT / DCA RLINCT / Initialize distance to restart line. TAD ELINCT / Get distance to edit line. JMS ECSCRL / Scroll Screen down, if appropriate. JMP I ECINIT / Return to caller. ECINI2, XX / Some more edit initialization code. DCA NOMORE / Reset the end-of-line error flag. DCA NOINSR / Reset insert inhibit flag. CDFEDT / Map edit field. TAD SCURPT / Set pointers to point to start of word. DCA I (CURPTR) / text pointer. TAD SCURSR / DCA I (CURSOR) / screen pointer. CDFMYF / back to our field. JMP I ECINI2 / return to caller. ECEXIT, XX / Common exit code for EDIT/REPLACE. DCA T2 / Save GOLD:MENU exit flag. TAD RLINCT / Get distance to restart line. JMS ECSCRL / Scroll Screen to there, if appropriate. JMS ECINI2 / Restore EDT pointers to start of word. MOVCHR / Load "line modified" char if sitting on it. UPDSCN / Update screen (call FXSCRL). DCA LINCNT / Say that we're on bottom line. TAD ELINCT / Compute distance from start of line. CIA / ... TAD RLINCT / .... DCA ELINCT / Save in case this is a GOLD:MENU exit. DCA RLINCT / Reinit for GOLD:MENU re-entry. DCA INEDIT / Say that we're done ECOPTN. TAD T2 / Is this a GOLD:MENU exit? SZA CLA / Skip if no. JMP ECRTN / if yes, then we're done. TAD ELINCT / This is a hard exit back to the main checking SNA CLA / loop. If we're not on the initial line JMP ECRTN / (skip if we're not) then reset sol cursor. TAD SCURSR / ... DCA SLCRSR / .... ECRTN, JMP I ECEXIT / Return to caller. ECPSCN, XX / Routine to call SETCUR. CIFEDT / Call routine in editor field. CALEDT; SETCUR / routine will posn cursor to start of word. CDFEDT / routine DF to editor field. CDFEDT / Map editor field. TAD I (CURSOR) / Set screen posn same as CURSOR. DCA I (CURPOS) / ... CDFMYF / .... JMP I ECPSCN / Return to caller. /------------ PAGE ECHYPS, JMS ECHYPP / Do common hyphen push/pull init. JMP ECHYPY / Label to goto if prior line not hyphenated. AC0001 / Advance to next posn. ECHYPW, MOVCHR / ... CDFEDT / See if line scrolled yet. TAD I (SCRLFL) / ... CDFMYF / .... SZA CLA / Skip if no. JMP ECHYPX / Jmp if yes. Stay where we ended up. CDFEDT / Back to edit field. TAD I (CURSOR) / See if at right margin yet. CIA / ... TAD I (RGTMAR) / .... CDFMYF / Back to our field. SPA SNA CLA / skip if 'not yet'. JMP ECHYPZ / Jmp if yes. ECHYPD, JMS ECGTCH / Get character. JMS CHK040 / See if in alpha range. JMP ECHYPZ / Jmp if no. TAD (2000) / Add in the 'hyphenation' bit. JMS ECPTCH / save char w/ hyphenation bit. ECHYPZ, AC0001 / Advance to next posn until line wraps. GETCHR / ... NOP / Ignore error. JMS CHK040 / See if at end of word. JMP ECHYPX / Jmp if yes. CLA / Start w/ clear AC. CDFEDT / See if line wrapped yet. TAD I (SCRLFL) / ... CDFMYF / .... SNA CLA / Skip if yes. JMP ECHYPZ / Keep advancing until line wraps. ECHYPX, JMS CRSTRT / Re-compute restart point, etc. JMP ECFIX3 / Reset mode to ADVANCE & wait for next input. ECHYPL, JMS ECHYPP / Do common hyphen-push/pull initialization. JMP ECHYPZ / Lable to goto if prior line not hyphenated. AC7777 / Backup to prior character. JMP ECHYPW / ... ECHYPP, XX / Common hyphen-push/pull initialization. JMS TSTLAG / See if we're on the initial line of error. JMP ECBDCM / Cannot Hyphen Push/Pull on 1st line. TAD I ECHYPP / Get transfer instruction. DCA ECHYP1 / Save. ISZ ECHYPP / Bump to real return. CDFEDT / Map EDIT field. Have to do some diddleing. TAD I (LINE23) / Set text ptr to the start of the line. DCA I (CURPTR) / ... DCA I (CURSOR) / Reset screen ptr to start of line. CDFMYF / Back to our field. AC7777 / Backup to last char on previous line. GETCHR / Get the character. JMP ECBDCM / Report error. JMS CHK040 / See if char is in the alpha range. ECHYP1, JMP ECHYPY / Jmp if no. AND (5777) / Clear 'break' bit. JMS ECPTCH / Store char w/o hyphenation bit. ECHYPY, SLNMOD / ... CDFEDT / Map edit field. DCA I (SCRLFL) / Reset 'line scrolled' flag. CDFMYF / Back to our field. JMP I ECHYPP / Return to caller. CHK040, XX / See if character is in alpha range (ie over 40). DCA T1 / Save character. TAD T1 / Get character. AND P177 / isolate onlyy the character bits. TAD (-40) / See if in alpha range. SPA SNA CLA / skip if yes. JMP CKO40 / Jmp to take 'not over' return. TAD T1 / Get character back. ISZ CHK040 / Take 2nd return (char is 'over 40'). CKO40, JMP I CHK040 / Return to caller. / /Dispatch table for Edit commands. / ECTBL, -EDMENU;ECRTN3 / GOLD:MENU -EDNWLN;ECRTN2 / RETURN key -EDHELP;ECHELP / HELP key -EDADVN;ECADVN / ADVANCE key -EDBKUP;ECBKUP / BACKUP key -EDWORD;ECWORD / WORD key -EDBOLD;ECBOLD / BOLD key -EDUBLD;ECUBLD / UNBOLD (gold:bold) key -EDUNDL;ECUNDL / UNDERLINE key -EDUUDL;ECUUDL / UNUNDERLINE (gold:underline) key -EDUPPR;ECUPPR / UPPERCASE key -EDLOWR;ECLOWR / LOWERCASE (gold:uppercase) key -EDSWAP;ECSWAP / SWAP (current & next characters) key -EDRBCH;ECRBCH / RUB CHAR OUT key -EDRBWD;ECRBWD / RUB WORD OUT key -EDDLTC;ECDLTC / DEL CHAR key -EDDLTW;ECDLTW / DEL WORD key -EDUDLT;ECUDLT / UNDELETE (gold:del char or gold:del word) key -EDHYPS;ECHYPS / HYPHEN PUSH key -EDHYPL;ECHYPL / HYPHEN PULL (gold:hyphen push) key 0 / terminator /------------ PAGE ECGETU, XX / Get next character of UNIT routine. CLA / incase we're entered w/ non-zero AC. TAD NOMORE / Are we already at the end of the line? SZA CLA / Skip if no. JMP ECGETE / JMP if yes. Report error. DCA DEADKY / Say "not in DEAD-KEY sequence" (least not yet). LOADCH / Get 1st next character. JMP ECGETE / Sitting on Start/End of file. Return 0000. JMS OVTST / See what type of character current char is. JMP ECGETF / OTHER. see if still on initial line. NOP / NUMERIC. we can always scan. / ALPHA-ONLY. we can always scan. ECGETG, TAD CHAR / Get initial character back. JMS ECHKUN / See if at end of UNIT yet. ECGETX, XX / Co-routine return to test next UNIT char. SMA SZA / Skip if not "at end of UNIT". JMP ECGETY / At end of UNIT (or between UNITs). ECGETQ, SMA CLA / Skip if at start of 2nd UNIT (-1) & return 0. JMS ECGTCH / otherwise return current character. ECGETZ, JMS I ECGETU / Return next character of UNIT to caller. / Return 0 when done returning all characters of / the returned UNIT. SZA / If MODE processor returned a MODEd character JMS ECPTCH / save MODEd character over prior unMODEd char. TAD DEADKY / Are we in the midst of a "dead key sequence"? SZA / Skip if NO. JMP ECGETO / Jmp if yes. Return next character from D-K-S. JMS ECGTCH / Get current character back. TAD (-ECSTOV) / see if it's the start of a DEAD KEY SEQUENCE. SNA CLA / Skip if no. JMP ECGETP / YES. Process next character from D-K-S. ECGETY, CLA / TAD NOMORE / Is the next character the END-OF-LINE char? SZA CLA / Skip if no. JMP ECGETZ / Jmp if yes. report "end-of-unit". AC0001 / Advance to next cursor posn. GETCHR / Get next character. JMP ECGETZ / Return END-OF-UNIT if at end of FILE. JMS OVTST / See what kind of char we have. JMP ECGETH / OTHER. do special end-of-line check. NOP / NUMERIC. treat as ALPHA-ONLY. ECGET2, TAD CHAR / Get character back. JMP I ECGETX / Return & process this character. ECGETP, ISZ DEADKY / Say that we're starting a DEAD KEY SEQUENCE. ECGETO, SPA CLA / Skip if START OF or WITHIN a D-K-S. JMP ECGETR / Handle DONE DEAD KEY SEQUENCE. ADVPTR / Advance to the next character. JMP ECGETZ / Premature termination. TAD (-ECNDOV) / is this the END-OF-DEAD-KEY-SEQ char? SZA CLA / Skip if YES. JMP ECGETQ / JMP if no. return character for processing. AC7777 / Set "end-of-dead-key" flag for next time. DCA DEADKY / That way, we'll get a chance to clean up. JMP ECGETQ / Go process the END-OF-DEAD-KEY-SEQ character. ECGETR, DCA DEADKY / Reset the "IN DEAD-KEY-SEQ" flag. ADVPTR / Advance to the next character. JMP ECGETZ / premature termination. CIFEDT / Backup over the DEAD-KEY sequence. CALEDT; ESBSPC / (BKPSPC) CDFBUF / .... NOP / JMP ECGETY / Now really advance over the Dead Key Seq. ECGETF, JMS CHKEOL / See if char is a line terminator. JMP ECGETE / JMP if yes. Report EOL error. JMS TSTLAG / See if still on line word was found on. JMP ECGETG / YES. go process character. ECGETE, JMS PUTERR / display error message. ERREOL / "end of line reached" error message. JMP ECGETZ / Return to caller. w/ end of UNIT. ECGETH, JMS CHKEOL / See if current char is a line terminator. JMP ECGET2 / If yes, return char (NOMORE is now set). JMS TSTLAG / See is still on same line. SKP / Yes. see if next char is end-of-line char. JMP ECGETZ / Return "end-of-UNIT" if no. ADVPTR / Advance to the next character. JMP ECGETI / next char is end-of-file. TAD (-ECWWLN) / See if next character is WORD-WRAP return. SNA CLA / Skip if no. ISZ NOMORE / If yes, then next time return end-of-unit. ECGETI, BKPPTR / Backup a character posn. NOP / Cann't be at begining of file. CLA / Don't really want returned character. JMP ECGET2 / Return current character. ECGETD, ISZ NOMORE / Set "at-end-of-line" flag. AC7777 / Backup a chacacter. GETCHR / Backup a character. NOP / CLA / don't really want returned character. JMP ECGETZ / Return "end-of-unit" code. DEADKY, 0 / 0 when not in; 1 when in; -1 when exitting. TSTLAG, XX / Routine to see if still on line w/ word on it. CDFEDT / See if any current lag. TAD I (SCRLCT) / ... CDFMYF / also see if any TAD ELINCT / lag from line word is on. SZA CLA / Skip if yes. Take 1st return. ISZ TSTLAG / Not on same line. take "end-of-UNIT" return. JMP I TSTLAG / Return to process end-of-UNIT. CHKEOL, XX / Routine to see if current char is a line terminator. TAD CHAR / Get current character. AND P177 / Isolate just the char bits. TAD (-ECNWLN) / See if it's a LINE TERMINATOR char. SZA CLA / Skip if yes. process it. JMP CKEOL1 / Not line terminator, take 2nd return. ISZ NOMORE / Set NOMORE chars on line flag. SKP / Take 1st return. CKEOL1, ISZ CHKEOL / Not line terminator. Take 2nd return. JMP I CHKEOL / Return to caller. ECPTCH, XX / Routine to save character at posn ptd to by CURPTR. DCA T2 / Save character to save. CDFEDT / Map EDIT field. TAD I (CURPTR) / Get current text pointer. DCA T3 / Save so that we can indirect thru. CDFBUF / Map text field. TAD T2 / Get character to save. DCA I T3 / Save character. CDFMYF / back to our field. JMP I ECPTCH / return to caller. /------------ PAGE ECRBWD, IAC / compute ECUNIT ECRBCH, DCA ECUNIT / Set to 0 for CHARACTER, 1 for WORD. TAD (ECTMRK) / Insert marker into text. INSCHR / ... JMS BACKUP / Backup 1 unit. JMS ECTFBK / Beep & display B-O-L error message. IAC / MODE = DELETE (continue). ECDLTW, IAC / UNIT = WORD. ECDLTC, DCA ECUNIT / UNIT = CHAR. JMS ECDLTU / Go delete the selected unit. JMP ECFIX / Fix line & wait for next command. ECTFBK, XX / To Far BacK. Display error msg. JMS PUTERR / Begining of line reached. ERRBOL / ... JMP I ECTFBK / return to continue deletion. ECLOWR, TAD (40) / Set lower case. ECUPPR, DCA ECMODB / Save CASE bit. IAC / Set CASE. MODE 4. JMP ECMOD3 / Merge below setting of attribute bits. ECUNDL, TAD (400) / Set or ECUUDL, DCA ECMODB / clear UNDERLINE bit(s). ECMOD3, IAC / UNDERLINING. MODE 3. JMP ECMOD2 / Merge below. ECBOLD, TAD (200) / Set or ECUBLD, DCA ECMODB / clear bold bit(s). ECMOD2, IAC / Set/clear attribute bit. MODE 2. ECBKUP, IAC / Set BACKUP. MODE 1. ECADVN, DCA ECMODE / Set ADVANCE. MODE 0. Save mode. SKP / UNIT type is CHARACTER. ECWORD, IAC / UNIT type is WORD. DCA ECUNIT / Save UNIT type. JMS STADVU / Set ADVANCE UNIT transfer vector. TAD ECMODE / Get mode we're processing. TAD (JMP I MODTBL) / Compute JMP to MODE handle. DCA .+1 / save as START OF UNIT handler. JMP I MODTBL / Start processing UNIT via MODE value. STADVU, XX / Routine to set advance UNIT mode. TAD ECUNIT / Compute routine to check UNIT doneness. TAD (JMP I ECUNTB) / ... DCA JMPUNT / save for later transfer to. JMP I STADVU / Return to caller. STBKPU, XX / Routine to set backup UNIT mode. TAD ECUNIT / Get UNIT type. TAD (JMP I ECBUNT) / Make a JMP to start of unit. DCA JMPUNT / Init for start of unit. JMP I STBKPU / return to caller. MODTBL, ECADVU / MODE = ADVANCE ECBAKU / MODE = BACKUP ECBLDU / MODE = BOLD/UNBOLD ECUNDU / MODE = UNDERLINE/UNUNDERLINE. ECUPLO / MODE = UPPERCASE/LOWERCASE CHKRTN, XX / Return from CHECK UNIT. / AC = 0 if scanning UNIT. / AC = 1 when scanning between UNITs (after / scanning unit. / AC =-1 when at start of NEXT UNIT. JMS I ECHKUN / Co Routine return to caller. JMP I CHKRTN / Check this (next) character for UNITization. ECHKUN, XX / Routine called by MODE processor to test / for end of UNIT. JMPUNT, JMP I ECUNTB / Jmp to UNIT processor to test for UNIT doneness. ECUNTB, ECCHRU / UNIT = [advance] CHARACTER ECWRDU / UNIT = [advance] WORD ECCNTU / UNIT = [advance] DELETE (continue) ECBUNT, ECBCHR / UNIT = [backup] CHARACTER ECBWRD / UNIT = [backup] WORD ECUNIT, 0 / UNIT type (0=char; 1=word). ECMODB, 0 / Mode bits to be set in UNIT. /**************************************************************************** / BHOOK Hokk to panel field blaster /a019 /**************************************************************************** SBHOOK, XX / Hook return address /a019 DCA SBLACSV / Save acc. /a019 RDF / Read data field so that it can be /a019 TAD CDF0 / preserved after the call /a019 DCA SBHKEXI / Save the constructed CDF routine /a019 CDFMYF / Make sure I'm here /a019 TAD I SBHOOK / Get the table entry from after the call/a019 MQL / Push into MQ reg /a019 TAD SBLACSV / Get the acc. back /a019 ISZ SBHOOK / Inc return past parameter /a019 CIFMNU / Blaster is in th menu field /a019 IOF / Turn the interups off before.... /a019 JMS I SBLASTH / Calling blaster /a019 ISZ SBHOOK / Skip return exit /a019 SBHKEXI,XX / Place for CDF instruction /a019 JMP I SBHOOK / Return /a019 SBLASTH,BLASTR / Blaster address (in WPF1) /a019 SBLACSV,0 / Acc save area /a019 /**************************************************************************** / TSTCHR Moved to give it room to breathe /a019 /**************************************************************************** /**************************************************************************** / ECSCRL moved here to give DISPLY room to expand /a019 /**************************************************************************** ECSCRL, XX / routine to scroll screen. SNA / Skip if we need to scroll down. JMP I ECSCRL / Return to caller if nothing to scroll. SPA / Skip if to scroll screen down. JMP ECSCUP / JMP to handle scroll up. CIA / Get negative of cursor. DCA T1 / Save negative number of lines to unscroll. ECSCR1, CIFEDT / Call scrolldown to unscroll a line. CALEDT; SCRLDN / ... CDFBUF / Map buffer field. ISZ T1 / 1 more line unscrolled. JMP ECSCR1 / Loop until finished. JMP I ECSCRL / Return to caller. ECSCUP, DCA T1 / Save count of lines to scroll up. ECSCR2, AC0001 / Move to next char posn. GETCHR / ... JMP ECSCR3 / Return if at EOF. CLA / Don't really want char. CDFEDT / See if line changed. TAD I (SCRLCT) / ... CDFMYF / compare to where we want to be. TAD T1 / ... SPA CLA / Skip if we're back to the desired line. JMP ECSCR2 / Loop until we get there. ECSCR3, JMP I ECSCRL / Return when done. /**************************************************************************** / STATR1 Shell for DISPLY set atribute call /a019 /**************************************************************************** STATR1, XX / Location for return address /a019 TAD T2 / Get the new attributes /a019 CIA / See if the same as the previous ones /a019 TAD PRVATR / .... /a019 SZA CLA / Skip if so /a019 JMS SETATR / If not the same, set new ones /a019 JMP I STATR1 / Return /a019 /------------ PAGE ECCHRU, SKP CLA / [advance] CHARACTER UNIT. ECLCHR, / LAST char of UNIT return point. ECBCHR, AC7777 / for [backup] or 2nd [advance] then done. JMS CHKRTN / Return code. JMP ECBCHR / Return done code. /------ ECBWD1, JMS CHKRTN / Return 0 (scanning PRE-WORD UNIT). ECBWRD, JMS TSTCHR / See if character is part of word. JMP ECBWD1 / JMP if no. (non-alphanumeric) Scan more. NOP / NUMERIC -- Part of word. / ALPHA return -- Part of word. ECBWD2, JMS CHKRTN / Return 0 (Scanning WORD UNIT). ECWRDU, JMS TSTCHR / See if character is part of word. JMP ECBWD3 / Jmp if no longer in word. NOP / NUMERIC -- Part of word. Keep scanning. JMP ECBWD2 / ALPHA -- Part of word. Keep scanning. ECBWD3, AC0001 / Return 1. now inbetween WORD unit(s). JMS CHKRTN / ... JMS TSTCHR / See if character is part of word. JMP ECBWD3 / Jmp if NO. continue scanning (non-alpahnumeric). NOP / NUMERIC. YES. Start of NEXT WORD UNIT. JMP ECLCHR / ALPHA. Return start of NEXT WORD UNIT code. /------ ECCNT1, JMS CHKRTN / Return status (0) to caller. ECCNTU, TAD (-ECTMRK) / Are we at our previously inserted mark yet? SZA CLA / Skip if yes. JMP ECCNT1 / Not yet, return "not done yet" code. JMS ECPTCH / ZAP the mark. JMP ECLCHR / Return LAST char of UNIT code. /------------ ECADVU, JMS ECGETU / Check for end of unit. ECADVX, XX / co-routine return point. SZA CLA / zero in AC when at end of UNIT. JMP I ECADVX / Get next character of UNIT. JMP ECLOOP / DONE! go to input loop. /------ ECUPLO, JMS SVSCMD / Save "screen modified" info. JMS ECGETU / Check for end of UNIT. NXUPLO, XX / co-routine return point. SNA / Skip if not at end of unit yet. JMP ECLOOP / DONE! go to edit input loop. JMS CKOV40 / See if character >= 40 (octal). JMP I NXUPLO / No, cannot upper/lower case it. AND (137) / Isolate lower case version. TAD (-133) / See if too big. SMA / Skip if no. JMP CKUPL1 / Yes. cannot case change it. TAD (133-101) / Compare against lower range. SPA CLA / Skip if too small. JMP CKUPL1 / Cannot case change. TAD T1 / Get origional character back. AND (7737) / Isolate without the CASE bit. TAD ECMODB / Add CASE bit if appropriate. JMS ECPTCH / Store case-changed character. JMS CRSTRT / Check for new restart posn. JMP I NXUPLO / Return character & get next. CKUPL1, CLA / Ignore character if not alpha-only. JMP I NXUPLO / ... /------ ECBLDU, JMS SVSCMD / SaVe SCreen MoDified info. JMS ECGETU / Check for end of UNIT. NXBOLD, XX / co-routine return point. SNA / Skip if a character (of current unit) is returned. JMP ECLOOP / DONE UNIT!!! go wait for next edit command. JMS CKOV40 / Is character printable? JMP I NXBOLD / Ignore char if no. AND (7577) / Isolate character minus bold bit. TAD ECMODB / Add BOLD attribute (if appropriate). JMP I NXBOLD / Return character with proper attributes. /------ ECUNDU, JMS SVSCMD / Save "screen modified info". JMS ECGETU / Get next character of UNIT. NXUNDL, XX / co-routine return point. SNA / Skip if not end of UNIT. JMP ECLOOP / DONE UNIT!!! Go process next edit command. JMS CKOV40 / Is character printable? JMP I NXUNDL / Ignore character if no. / allow UNDERLINE but only if / char not SUPERSCRIPTED. RTL / Check the SUPERSCRIPT (1000) bit. SPA CLA / If set, setting UNDERLINE bit yields SUBSCRIPT JMP I NXUNDL / so ignore character if SUPERSCRIPTED. TAD T1 / Get character to add attruibute to. AND (7377) / Isolate w/o UNDERLINE bit. TAD ECMODB / Add attribute bit (if setting). JMP I NXUNDL / Return attributed character. /------ ECBAKU, JMS BACKUP / Back up a UNIT. JMS ECTFBK / display "cannot edit before this line" error msg. JMP ECLOOP / Go get next user input. /------------ SVSCMD, XX / Routine to call SCRNMD editor routine. CIFEDT / ... CALEDT; SCRNMD / This will set appropriate screen modified flags. CDFEDT / Map EDIT field while we're there. JMP I SVSCMD / Return to caller. /----------- / /CHKDEL - Check char about to delete for a line terminator character. / / /CALL: JMS CHKDEL / AC contains 12 bit char to check. / rtn1 /this return if yes. / rtn2 /this return of no. / / This routine sees if the character about to be deleted is in the class / of line terminators (any new-line type and any new-page type). These / chars can only be seen when deleting in a forward direction (ie DELCHR / and DELWRD) and therefore the ECTMRK set for reverse direction deletes / (RUBCHR & RUBWRD) won't be a problem of inadvertantly being left in. / /----------- CHKDEL, XX / Entry point. TAD (-ECWWLN) / Check for soft terminators. SZA / Skip if yes. TAD (ECWWLN-ECHYLN) / another soft line terminator. SZA / Skip if yes. TAD (ECHYLN-ECPMRK) / Soft page (PAGE MARKER)? SNA / Skip if no. JMP CHKDL1 / let these pass, they're not word terminators. TAD (ECPMRK) / Restore origional char. AND P177 / Isolate only the character bits. TAD (-ECNWLN) / See if in the line class of terminators. SZA / Skip if yes. TAD (ECNWLN-ECNWPG) / if not see if in the page class of terminators. SZA CLA / Skip if yes. take the 1st return. CHKDL1, ISZ CHKDEL / Not a line terminator. Take the 2nd return. JMP I CHKDEL / Return to caller. /------------ PAGE BACKUP, XX / Backup a UNIT. CIFEDT / 1st save current LINE MODIFIED FLAG. CALEDT; SAVLMD / ... CDFBUF / .... JMS TSTLAG / see if on initial line word is on. SKP / Skip if yes. JMP BCKUPA / No. All backup is allowed. TAD SLCRSR / Get cursor address of 1st word on line. CIA / Compare to where we currently are. CDFEDT / ... TAD I (CURSOR) / ... CDFMYF / .... SPA SNA CLA / Skip if not at start of 1st word on line. JMP BCKUPY / Return to caller to report error. BCKUPA, AC7777 / Do a CURMOV of -1. GETCHR / Get previous character. JMP BCKUPV / Already sitting on STX. Go fix. CLA / Don't really want character. ISZ BACKUP / Bump return for when we finally take it. JMS STBKPU / Set Backup UNIT routine. DCA NOMORE / reset forward e-o-l indicator. DCA NOINSR / insert's are now allowed. JMS ECGTCH / Get current character. JMS ECHKUN / Start checking the UNIT. BCKUPZ, XX / co-routine return goes here. SZA / Skip if in unit. JMP BCKUPX / Jmp if might not in unit. AC7777 / Backup to next character posn. GETCHR / Backup to previous posn. JMP BCKUPV / JMP if at start of text buffer. JMP I BCKUPZ / return character to UNIT processor. BCKUPX, SPA CLA / Skip if just went beyound unit. must now advance. BCKUPY, JMP I BACKUP / When at start of next unit we're done. RETURN. AC0001 / do an advance. GETCHR / load next character. JMP BCKUPY / Return if at end of text. JMP I BCKUPZ / Go process this character. BCKUPV, GETCHR / Fix up CURSOR. NOP / Just return. CLA / clear character just returned. JMP BCKUPY / .... /------------- / /RCOPTN - handle REPLACE option for SPELLING CORRECTOR. / / This routine replaces the highlighted error word with the selected / word from the replacement list. This routine essentially does a RUB WRD / function to DELETE the error word & then does an INSERT WORD to insert / the selected word. This routine is called with the AC pointing to the / replacement word (which will always be terminated by a SPACE). Inputs / to this routine are the same as those to the EDIT routine. Infact, / common INIT and EXIT code has been placed into subroutines which both / the EDIT command & this REPLACE command use. / / /CALL: JMS RCOPTN (from USER MENU dispatcher). AC points to replacement word. / rtn Return here when done. / /-------------- RCOPTN, XX / Entry point. DCA RCTEMP / Save ptr to replacement text string. ADVPTR / Bump to after last character. NOP / Ignore possible E-O-F. CLA / Clear return code from ADVPTR. TAD (ECTMRK) / Insert stopper for DELETE routine. INSCHR / ... JMS ECINIT / Call common initialization code. JMS ECINI2 / Do rest of edit initialization. AC0002 / Set mode to DELETE mode. DCA ECUNIT / ... JMS ECDLTU / Delete the selected word. AC7777 / Get ptr minus 1 to text of replacement string. TAD RCTEMP / ... DCA X5 / Save ptr to text in an index register. RCOPT1, TAD I X5 / Get next char. TAD (-ECSPC) / Check for done. SNA / Skip if not done. JMP RCOPT2 / JMP when done insert. TAD (ECSPC) / Get original char back. /d019 TAD DISATR / Add in attributes. DCA T1 / Save char for DOINSR. JMS ECDOIN / insert character. JMP RCOPT1 / Loop for all replacement word chars. RCOPT2, MOVCHR / Rejustify word. CDFEDT / Get scroll count (if any). TAD I (SCRLCT) / ... CDFMYF / Back to our field. DCA T1 / save. TAD T1 / Get lag count. TAD ELINCT / Keep track which line we are on. DCA ELINCT / ... TAD T1 / Get lag count. TAD RLINCT / update distance to restart line. DCA RLINCT / ... JMS ECEXIT / Do common cleanup code. (Must call w/ AC=0). JMP I RCOPTN / Take RETURN return. RCTEMP, 0 / Temp to hold ptr to replacement text. SETATR, XX / routine to set attributes from T2. TAD T2 / Get attributes to set. DCA PRVATR / Save them for ourselves. TAD T2 / Now set them for BLKBOX. CIFPRT / ... JMS I (BLKBOX) / now the screen has proper attributes set. TAD VIDEO / reverse? SZA CLA / Skip if no. JMS SETRV / When yes, add reverse video too! JMP I SETATR / return to caller. UNDOLG, XX / Routine to call FXSCRL. TAD LINCNT / Update # of lines in word. DCA LINCNT / ... ISZ NEWLIN / Say that a NEW LINE has been seen!!! UPDSCN / Update Screen (FXSCRL). JMP I UNDOLG / Return to caller. CKOV40, XX / Routine to see if character passed is > 40. DCA T1 / Save origional character. TAD T1 / Get character back. AND P177 / Isolate character bits. TAD (-ECTAB) / Is character a TAB character? SZA / Skip if yes. Return as if it's a char. TAD (ECTAB-40) / See if >= 40. SPA CLA / Skip if yes. JMP I CKOV40 / Return if no. take SPECIAL char return. TAD T1 / otherwise return character in AC. ISZ CKOV40 / and take the skip return. JMP I CKOV40 /------------ PAGE /---------- / /ECDLTU - Delete a UNIT. / / / This routine deletes a UNIT. For RUB functions, an ECTMRK was inserted / at the current posn, a backup UNIT (char/word) function was performed, / and the MODE was set to CNTMOD (scan terminated by the ECTMRK). For a / DEL function, the MODE was set to ADVANCE, and we delete characters / until we come to the end of the UNIT (char/word). / /---------- ECDLTU, XX / Entry point. JMS STADVU / Set ADVANCE UNIT transfer vector. TAD (BASKET-1) / Get address of UNDELETED thing buffer. DCA X5 / Save in an index register. DCA UNDLCT / Init count of characters to none. CDFEDT / TAD I (CURPTR) / Get ptr to start of thing to delete. CDFMYF / Back to our field. DCA ECDPNT / Save pointer. GETCHR / Load current character. JMP ECDLTZ / Quit if at End-Of-File. JMS CHKDEL / See if line terminator. JMP ECDEOL / JMP if yes. Display error & quit. DCA NOMORE / reset forward e-o-l indicator. DCA NOINSR / insert's are now allowed. JMS ECGTCH / Go get char back. JMS ECHKUN / Test char for end-of-UNIT. ECDLTN, XX / Co-routine return point saved here. SPA CLA / Skip if not at end of unit yet. JMP ECDLTX / Quit when done. JMS ECGTCH / Get character. JMS CHKDEL / See if line terminator. JMP ECDLTX / If yes, terminate delete operation & sit on it. JMS ECGTCH / Get character again. /d019 ECDLTP, JMS ECDPUT / Put char into the UNDELETE buffer. /d019 ECDLTA, JMS ECPTCH / Zap char with a null. /d019 ECDLTE, ADVPTR / Advance (& expand text buffer) to next char. /d019 JMP ECDLTX / Jmp if End-Of-File. TAD (-ECSLPT) / Select point? (shouldn't unless from prior edit). SNA / Skip if no. JMP ECDLTS / Go handle SELECT POINT. TAD (ECSLPT-ECRMFL) / RULER Modified? SNA / Skip if no. JMP ECDLTM / YES, go handle RULER MODIFIED code. TAD (ECRMFL-ECSTRL) / Start of RULER? SNA / Skip if no. JMP ECDLTR / Go handle RULER. TAD (ECSTRL-ECSTOV) / Start of DEAD-KEY Sequence? SNA CLA / Skip if no. JMP ECDLTO / Go handle OVERSTRIKE (DEAD-KEY Sequence). JMS ECGTCH / Get character back. CIFEDT / See if something "soft". CALEDT; ESJCHK / ... CDFEDT / .... SNA CLA / Skip if not "soft". JMP ECDLTA / Zap the "softie" & advance to next char posn. ECDLTP, JMS ECDPUT / Put char into the UNDELETE buffer. /m019 ECDLTA, JMS ECPTCH / Zap char with a null. /m019 ECDLTE, ADVPTR / Advance (& expand text buffer) to next char./m019 JMP ECDLTX / Jmp if End-Of-File. /m019 /d019 JMS ECGTCH / Get character back. JMP I ECDLTN / Go check this character. ECDLTX, TAD (ECMDFL) / Set "line modified" flag. INSCHR / so that if we crossed a ruler, all will justify. JMS ECDSET / Reset CURPTR back to start of stuff to delete. SLNMOD / Set "line modified" flag. CDFEDT / Get line modified flag. TAD I (LINMOD) / ... CDFMYF / INSCHR / and insert it into text. JMS ECDSET / Reset CURPTR back to start of stuff to delete. SLNMOD / Set "line modified" flag. JMS CRSTRT / Fix restart CURPTR/CURSOR. ECDLTZ, JMP I ECDLTU / Return to caller. ECDEOL, JMS PUTERR / Display "end-of-line" error message. ERREOL / ... JMP ECDLTZ / and then quit. ECDLTM, JMS ECGTCH / Get current character. CDFEDT / Map edit field so that DCA I (RLRMOD) / we can save the ruler modified flag. CDFMYF / Back to our field. ECDLTS, JMP ECDLTA / Delete char from file & continue. ECDLTO, JMS ECDPUT / Output char to UNDELETE buffer. JMS ECPTCH / ZAP char. eliminate from text buffer. ADVPTR / Advance to the next character. JMP ECDLTX / exit if at end of file. TAD (-ECNDOV) / End of OVERSTRIKE (DEAD-KEY Sequence)? SZA CLA / Skip if YES. JMP ECDLTO / Loop if no. Go do next character. JMP ECDLTP / otherwise output & try advance. ECDLTR, ADVPTR / Get next character SKP / treat E-O-F like End-Of-Ruler (AC is 0). TAD (-ECNDRL) / End of ruler? SZA CLA / Skip if yes. JMP ECDLTR / JMP if no. continue to scan until find end. JMP ECDLTE / Done processing ruler. Continue delete on next char. ECDPUT, XX / Routine to output current char to DELETE buff. TAD UNDLCT / See if basket is full yet. TAD (-BASKSZ) / Compare to max. SNA CLA / Skip if not yes. JMP I ECDPUT / Return w/o saving char if DELETE area full. JMS ECGTCH / Get character. CDFBUF / Save in waste-basket. DCA I X5 / ... CDFMYF / Back to our field. ISZ UNDLCT / 1 more char in basket. JMP I ECDPUT / Return to caller. ECDSET, XX / Routine to reset CURPTR back ECDPNT. CDFEDT / Reset CURPTR. TAD ECDPNT / set it to start of stuff to delete. DCA I (CURPTR) / ... CDFMYF / .... JMP I ECDSET / Return to caller. ECDPNT, 0 / CURPTR of start of deleted text. ECGTCH, XX / Routine to get character pointer to by CURPTR. / Assumed that entered with AC=0. CDFEDT / Map EDIT field. TAD I (CURPTR) / Get character pointer. DCA T3 / Save pointer. CDFBUF / Map TEXT field. TAD I T3 / Get character. CDFMYF / finally, return to caller. JMP I ECGTCH / ... /------------ PAGE ECSWAP, TAD NOINSR / Are we beyond the INSERT boundry? SZA CLA / Skip if no. We can still SWAP. JMP ECSWPB / Report at End-Of-Line. JMS ECSWPA / Check char we're sitting on for valid SWAP char. AC0001 / Move to next char posn. GETCHR / Get to next character. JMP INSERR / Report "at end of line" error. DCA T1 / Save 2nd char (incase we SWAP). JMS ECSWPA / See if this (2nd) char is swapable. JMS ECPTCH / Zap 2nd character. SLNMOD / Set line modified flag. AC7777 / Backup to prior (1st) char posn. GETCHR / Backup to previous character. JMP INSERR / Shouldn't get here but handle error. CLA / not interested in returned char. JMP ECINS1 / Go insert 2nd char infront of 1st char. ECSWPA, XX / Routine to check char for valid SWAP char. LOADCH / 1st, load char we're sitting on. JMP ECSWPB / If error beep & give up. AND P177 / Isolate char only. TAD (-ECNWLN) / LINE TERMINATOR is invalid SWAP char. SZA / Skip if not valid. TAD (ECNWLN-ECNWPG) / PAGE TERMINATOR is invalid SWAP char. SZA / Skip if not valid. TAD (ECNWPG-ECSTOV) / Start of DEAD-KEY is invalid SWAP char. SZA CLA / Skip if not valid SWAP char. JMP I ECSWPA / Return if char is swapable. ECSWPB, JMS PUTERR / Display "invalid SWAP" error message. ERRSWP / ... JMP ECLOOP / go wait for another input. /---------- / /ECUDLT - Undelete a UNIT. / / / This routine the last deleted text of this edit. The text was saved / in the 'waste-basket' (buffer field, @ basket), the length of the / last deleted item is stored in UNDLCT. A zero there means that the / waste basket is empty. / /---------- ECUDLT, TAD UNDLCT / Get size of UNDELETE buffer. SNA / Skip if there's something in it. JMP ECFIX3 / Reset MODE to advance & get next command. CIA / compute ISZ count. DCA T2 / Save character count. TAD (BASKET-1) / Get ptr to UNDELETE buffer. DCA X5 / save in index register. ECUDLP, CDFBUF / Map TEXT field. TAD I X5 / Get char to UNDELETE. CDFMYF / Back to our field. DCA T1 / Save character for later check. JMS ECDOIN / insert character. ISZ T2 / loop while still more to insert. JMP ECUDLP / Loop to undelete next character. JMP ECFIX / Fix mode & get next input. ECD8IN, XX / Routine to check for allowable insert & do it. TAD NOINSR / Check for End-Of-Line encountered. SZA CLA / Skip if not at End-Of-Line yet. JMP INSERR / Report insert error (e-o-l reached). TAD T3 / Get character to insert. /m019 INSCHR / Insert char into document. SLNMOD / Set "modified" flag. TAD T3 / Get character back. /m019 TAD (-ECSTOV) / Start of "Dead Key Sequence"? SNA / Skip if no. JMP DOINS1 / Go handle start of DEAD-KEY-SEQUENCE. TAD (ECSTOV-ECNDOV) / End of "Dead Key Sequence"? SNA CLA / Skip if no. JMP DOINS2 / Jmp to process End of DEAD-KEY-SEQUENCE. TAD INSDKS / Are we currently in a DEAD-KEY sequence? SNA CLA / Skip if YES. JMP DOINS4 / No. go handle regular insert. BKPPTR / continue overstrike mode. See if prior char NOP / is END-OF-DEAD-KEY. TAD (-ECNDOV) / Check prior char for end-of-deadkey. SZA CLA / Skip if yes. insert char there instead. JMP DOINS3 / No. cancel dead-key seq. JMS ECPTCH / Cancel prior end-of-deadkey. ADVPTR / Advance to char just inserted. NOP / ... DOINS1, ADVPTR / Advance just beyond char just inserted. NOP / ... CLA TAD (ECNDOV) / Insert End-Of-Deadkey sequence char. INSCHR / ... ADVPTR / Advance beyond end-of-deadkey char just inserted. NOP / ... AC0001 / Say that we're in a dead-key sequence. JMP DOINS5 / done. DOINS2, JMS ECPTCH / Cancel redundant end-of-deadkey. CDFEDT / Bump cursor posn to next col. ISZ I (CURSOR) / ... CDFMYF / .... JMP DOINS5 / done. DOINS3, ADVPTR / Bump past char just inserted. NOP / ... CLA DOINS4, CIFEDT / Do rejustification (if necessary). CALEDT; CHKREJ / Call CHKREJ to see if rejustification CDFBUF / is appropriate. DOINS5, DCA INSDKS / Cancel/Set overstrike mode. AC7777 / Check restart CURSOR/CURPTR for insert. JMS CRSTRT / Check restart CURSOR/CURPTR. TAD T3 / Get prior char (ie. the one just inserted.)/m019 JMS TSTCHR / Check it's type. JMP DOINS6 / OTHER. See if we were at End-Of-Line. JMP DOINS7 / NUMERIC & JMP DOINS7 / ALPHA-ONLY are always insertable. DOINS6, JMS TSTLAG / See if on same line as word was on. JMP DOINS7 / YES. char does not define new E-O-L. ISZ NOMORE / We just inserted a new E-O-L definition. ISZ NOINSR / so stop further ADVANCE & INSERT. DOINS7, CDITXT / Back to field that called it /a019 JMP I ECD8IN / Return to caller. Char is inserted & flags set. INSDKS, .-. INSERR, JMS PUTERR / Display error. ERREOL / "End of line reached" error message. JMP ECFIX3 / Reset MODE to ADVANCE & get next input. /----------- PAGE /----------- / /CRSTRT - Check restart CURSOR & CURPTR / / /CALL: JMS CRSTRT /AC=0/-1 upon entry & 0 upon exit. / / If insert, then AC=-1 so we know to backup. / / / This routine checks to see if we're still on the 1st edit line. / If not, then an immediate return is made & we are done. Otherwise / there are 2 cases to consider. / / Case 1) We are before or on the prior restart point. In this case, / CURSOR will be <= SCURSR before rejustification. In this / case, the word we are on is by definition the word to backup / to. So, we rejustify the line, save our new (rejustified) posn, / backup a character if from INSERT, backup while not in OTHER, / advance until in NUMERIC or ALPHA & save that posn as the / restart point. We go back to our saved (rejustified) posn & are / finished. / / Case 2) We are after the prior restart point. In this case, / CURSOR will be > SCURSR before rejustification. We need to / compute the proper SCURSR/SCURPT after rejustification. To / accomplish this, we scan backwards counting the number of posns / we pass until we get to the restart point. We remember this / count, go back to our initial point, rejustify, scan backwards / the remembered count & save that CURSOR/CURPTR as the restart / SCURSR/SCURPT. We return to the new (rejustified) initial point / and are finished. / /----------- CRSTRT, XX / Entry point. DCA RSTMT3 / Save insert indicator. JMS TSTLAG / Are we on the initial edit line? SKP / Skip if yes. we got's lots to do. JMP I CRSTRT / No. just return. TAD SLCRSR / Compute distance to start of line. JMS GETDST / ... DCA SLDIST / Save the distance. CDFEDT / See if the restart line is initial line. TAD I (SCRLCT) / ... CDFMYF / .... TAD RLINCT / Is the restart line same line? SZA CLA / Skip if yes. JMP RCASE1 / JMP if no. we're definately case 1. CDFEDT / Map edit field. TAD I (CURSOR) / Get current screen posn. CDFMYF / CIA / compare screen posn to start of restart word. TAD SCURSR / ... SPA CLA / Skip if case 1. (ie we're on or before restart). JMP RCASE2 / Jump to handle case 2. RCASE1, MOVCHR / Rejustify. DCA RSDIST / Init distance back to 0. TAD RSTMT3 / Get "in INSERT" flag. SNA / Skip if not 0. gotta move to char just inserted. JMP CRSTL1 / Merge below. MOVCHR / Backup if in insert. this will posn us to / the char just inserted. AC7777 / start out our backup count for the 1st char. DCA RSDIST / ... CRSTL1, AC7777 / Make a note that 1 more char scanned. TAD RSDIST / ... DCA RSDIST / .... AC7777 / Backup until out of word. GETCHR / ... JMP CRSTL3 / if hit start of file, quit. JMS TSTCHR / Check character type. JMP CRSTL2 / OTHER, quit. JMP CRSTL1 / NUMERIC. continue to backup. JMP CRSTL1 / ALPHA. continue to backup. CRSTL2, AC0001 / Now advance to start of word. CRSTL3, MOVCHR / Move CURSOR. ISZ RSDIST / Make a note that 1 less char got scanned. LOADCH / Skip if not at starting point yet. JMP CRSTL4 / If at starting point, then quit. JMS TSTCHR / Check character type. JMP CRSTL2 / OTHER. continue scanning. JMP CRSTL4 / NUMERIC. done. CRSTL4, CDFEDT / Map edit field. TAD I (CURSOR) / Get CURSOR DCA SCURSR / Save as restart CURSOR. TAD I (CURPTR) / Get CURPTR. DCA SCURPT / Save as restart CURPTR. TAD I (SCRLCT) / compute distance to the restart line. CIA / .... DCA RLINCT / save for future reference. CDFMYF / Back to our field. TAD RSDIST / We're currently at the restart point. Compute CIA / the distance to the start-of-line point TAD SLDIST / ie dist from restart minus dist from sol. MOVCHR / Go to start of the line. CDFEDT / Get CURSOR posn. TAD I (CURSOR) / ... CDFMYF / and save it as the new DCA SLCRSR / start of line cursor posn... TAD SLDIST / Get distance back to our posn. CIA / ... MOVCHR / go back to our posn. TAD SLDIST / Are we at the start of the line? SZA CLA / Skip if yes. JMP CRSTL5 / JMP if no. Leave ELINCT as is. TAD RLINCT / Reset ELINCT to allow for deleting DCA ELINCT / across a ruler. CRSTL5, JMP I CRSTRT / Return to caller. RCASE2, TAD SCURSR / Compute distance to restart point. JMS GETDST / ... DCA RSDIST / Save count to restart point. MOVCHR / Rejustify the line. TAD RSDIST / Get # of posns to back to to restart point. MOVCHR / backup to that posn. JMP CRSTL4 / Save this posn as the restart posn, restore / to rejustified posn & we're done. CRSTMV, XX / Routine to do a CURMOV only. GETCHR / Get & LOAD char. NOP / Error will be handled later. CLA / Don't return the char. JMP I CRSTMV / Return w/ clean AC. GETDST, XX / Routine to compute distance from current posn / to posn passed in the AC. Return is negative. DCA RSTMT1 / Save posn to backup to. CDFEDT / Save current CURSOR & CURPTR. TAD I (CURSOR) / ... DCA SAVT1 / ... TAD I (CURPTR) / ... DCA SAVT2 / .... CDFMYF / Back to our field. DCA RSTMT2 / Init count. GTDST1, CDFEDT / Map edit field. TAD I (CURSOR) / Get CURSOR. CDFMYF / Back to our field. CIA / Compare CURSOR to restart posn (SCURSR). TAD RSTMT1 / ... SNA CLA / Skip if not there yet. JMP GTDST2 / Jmp when we arrive to start of restart word. AC7777 / Backup that posn. GETCHR / ... JMP GTDST2 / If error, quit. CLA / Don't really want char. ISZ RSTMT2 / 1 more char posn bumped over. JMP GTDST1 / Go see if done yet. GTDST2, CDFEDT / Now, restore us to where we were. TAD SAVT1 / This way we won't rejustify (yet). DCA I (CURSOR) / Also, since rejustification hasn't been TAD SAVT2 / done yet, we know that we're still on DCA I (CURPTR) / the same line. CDFMYF / Back to our field. TAD RSTMT2 / Get count. CIA / Return negative count. JMP I GETDST / ... SAVT1, 0 / Temp for saved CURSOR. SAVT2, 0 / Temp for saved CURPTR. RSTMT1, 0 / restart point to scan to. RSTMT2, 0 / Distance to restart point. RSTMT3, 0 / A temp. RSDIST, 0 / Distance to restart point. SLDIST, 0 / Distance to start of line. /------------ PAGE /----------- / /SLNMOD / / /----------- ECSLMD, XX / Routine to x-field call SETLMD (SLNMOD). CIFEDT / Call SETLMD to set screen update flags. CALEDT; SETLMD / ... CDFEDT / .... JMP I ECSLMD / Return to caller. /----------- / /ADVPTR / / /----------- ECAPTR, XX / Routine to call ESAPTR in edit field. CIFEDT / Move CURPTR to next character. CALEDT; ESAPTR / ADVPTR routine. CDFBUF / field to be mapped to. SKP / 1st return, take same return to caller. ISZ ECAPTR / Bump to correct return. JMP I ECAPTR / ... /----------- / /BKPPTR / / /----------- ECBPTR, XX / Routine to call ESBPTR in edit field. CIFEDT / Backup to where we were. CALEDT; ESBPTR / BKPPTR CDFBUF / .... SKP / Take 1st return. ISZ ECBPTR / Take 2nd return. JMP I ECBPTR / Return to caller. /----------- / /INSCHR / / /----------- ECICHR, XX / Routine to call INSERT in edit field. CIFEDT / CALEDT; INSERT / Call INSERT CDFBUF JMP I ECICHR / Return to caller. /----------- / /GETCHR / / /----------- ECGCHR, XX / Routine to call CURMOV & LODCHR. CIFEDT / Call editor routine to insert character. JMS I (GETCH) / Call routine in editor field. SKP / Return via 1st return. ISZ ECGCHR / Return via 2nd return. JMP I ECGCHR / Return to caller. /----------- / /LOADCH / / /----------- ECLOAD, XX / Routine to call LODCHR. CIFEDT / Call editor routine to load character. CALEDT; LODCHR / ... CDFBUF / buffer field to be BUFFLD. SKP / Take 1st return. ISZ ECLOAD / Take 2nd return. JMP I ECLOAD / Return to caller. /----------- / /UPDSCN / / /----------- FXSCRN, XX / Routine to call FXSCRL in edit field. CIFEDT / CALEDT; FXSCRL / Call FXSCRL CDFEDT / .... JMP I FXSCRN / Return to caller. /----------- / /CHKSCN / / /----------- CKSCRN, XX / Routine to call TSTLIM & then FXSCRL. CIFEDT / CALEDT; TSTLIM / Call TSTLIM CDFEDT / .... UPDSCN / Call FXSCRL to repaint. JMP I CKSCRN / Return to caller. /----------- / /PUTERR - display error message on bottom line. / / /CALL: JMS PUTERR / display error message on bottom line. / ptr / pointer to a TEXT string for IOA. / /----------- PUTERR, XX / entry point. JMS SETMOD / set modes, ring bell, etc... TAD I PUTERR / Get error msg text pointer. TAD (-BLANKL) / Is this the call to clear the error msg? SNA CLA / Skip if no. Ring the bell. JMP PUTER1 / Don't ring the bell if clearing the line. PUTCHR; BELL / Ring the bell. PUTER1, TAD I PUTERR / Get address of text string to display. ISZ PUTERR / Bump to return address. DCA PUTER2 / Save it for IOACAL. CIFTXT / Call output IOA output routine in TXT field. JMS I (CALIOA) / display the message PUTER2, .-. / arg1 -2700 / arg2 NOP / arg3 JMS RSTCUR / restore cursor and attributes. ISZ ECERFL / Say that there is an error msg being displayed. JMP I PUTERR / return to caller. /---------- / / /---------- SETMOD, XX JMS SAVCUR / save cursor posn and attributes. JMS SETABS / Set ORIGIN mode to ABSOLUTE mode. JMS CLRRV / Eliminate any current attributes. JMS SETRV / Error message gets output in reverse video. JMP I SETMOD TYMOUT, TAD (TIMERR-FATAL) / offset to error msg GTOOPS, BADBLO, DSKERR, TAD (FATAL) / pointer to text message DCA DYSKE1 / set up for display CDFMNU / Get the option word. TAD I (MUBUF+MNPULD) / Get the external processor loaded word./M004 AND (-1-MNRX0X-MNRX1X) / clear the American & British loaded bits./M004 DCA I (MUBUF+MNPULD) / Save new external processor loaded word./M004 CDFMYF / Back to our field. DYSKER, JMS PUTERR / Ring bell & display error msg. DYSKE1, .-. / arg1 JMS IPTCHR / Get an input character. TAD (-EDNWLN) / Return typed? SZA CLA / skip if yes. JMP DYSKER / Repeat message if not RETURN key. JMP EOF / Time to shut down!!! /---------- / / DSPTCH - routine to dispatch control / / / CALL: JMS DSPTCH / rtn1 / only return if: end of table encountered / / Inputs: / X1 - pointer to the dispatch table / T1 - character being matched to the dispatch table / (passed here in the AC) / / Outputs: / Control is passed to the appropriate routine, unless / a match is not made, in which case, return to caller / /---------- DSPTCH, XX / Return address DCA T1 / save the input char to check DSPTC1, ISZ X1 / bump rest of this entry. TAD I X1 / Check next table entry. SNA / Skip if there is one. JMP I DSPTCH / no more valid commands, return to process. TAD T1 / see if table entry matches desired command. SZA CLA / Skip if yes. JMP DSPTC1 / Check entry. TAD I X1 / Get address of routine to call. DCA T1 / Save for jump indirect thru. JMP I T1 / Dispatch to edit routine. / / here if user dictionary fills up during initialization / USDFUL, TAD (UDFUL2) / error message. DCA DYSKE1 / ... JMP DYSKER / Display error message, wait for return & abort. /---------- PAGE PTCHRS, XX / Routine to output a string of chars. PUTCH1, TAD I PTCHRS / Get next character to output. AND P177 / Isolate only the character bits. JMS OPTCHR / Output character. TAD I PTCHRS / Get character just output. ISZ PTCHRS / Bump to next char/return address. SPA CLA / Skip if last one was the last. JMP PUTCH1 / Go do next character. JMP I PTCHRS / Done! return to caller. / / / OPTCHR, XX / return address JMP OPTCH2 OPTCH1, CIFSYS JWAIT OPTCH2, CIFSYS TTYOU / output the char JMP OPTCH1 JMP I OPTCHR / return when done POSNCU, XX / Routine to init EDT pointers to start of / word & posn screen CURSOR. TAD SCURPT / Reinit text pointer. CDFEDT / CURPTR is in EDT field. DCA I (CURPTR) / ... TAD SCURSR / Reset cursor column address variable. DCA I (CURSOR) / .. TAD LINCNT / Reset cursor line address variable. CIA / DCA I (CURLIN) / "Current line number". CDFMYF / ... JMS ECPSCN / Call SETCUR to posn the cursor. JMP I POSNCU / return to caller. /----------- / / GRAFXS - set graphics mode / / / CALL: JMS GRAFXS AC ignored & destroyed on return / / ESC ( 0 / /----------- GRAFXS, XX / return address PUTCHR; 4000+ESC / output escape sequence to the terminal 4000+"( / "0&177 / JMP I GRAFXS / return to caller /----------- / / GRAFXC - clear graphics mode / / / CALL: JMS GRAFXC AC ignored & destroyed on return. / / ESC ( B / /----------- GRAFXC, XX / return address PUTCHR; 4000+ESC / output escape sequence to the terminal 4000+"( / "B&177 / JMP I GRAFXC / return to caller /----------- / /SETRGN - Set scrolling region up. / / /CALL: JMS SETRGN AC ignored & destroyed on return. / / ESC [ 3 ; 11 r / /----------- SETRGN, XX / entry point. PUTCHR; 4000+ESC / define scrolling region from line 3 to 13 4000+"[ / Send escape sequence to terminal to 4000+"3 / From line 3, 4000+"; / ... 4000+"1 / to line 4000+"1 / 11 "r&177 / terminator. JMS SETREL / Set ORIGIN mode to RELATIVE (relative to region). JMP I SETRGN / Return to caller. /----------- / / STMRGN - Set scrolling region for help menus. / / / CALL: JMS STMRGN AC ignored & destroyed on return. / / ESC [ 16 ; 24 r / /----------- STMRGN, XX / return address PUTCHR; 4000+ESC / output the escape sequence to the terminal 4000+"[ / define scrolling region 4000+"1 / from line 14, 4000+"4 / ... 4000+"; / to line 4000+"2 / 24 4000+"4 / ... "r&177 / JMP I STMRGN / return to caller /----------- / /CLRRGN - Clear scrolling region upon exit. / / /CALL: JMS CLRRGN AC ignored & destroyed on return. / / ESC [ r / /----------- CLRRGN, XX / entry point. PUTCHR; 4000+ESC / Send escape sequence to terminal to 4000+"[ / undefine scrolling region. "r&177 / terminator. JMS SETABS / Set ORIGIN mode to absolute. JMP I CLRRGN / Return to caller. /----------- / /SETREL - Set ORIGIN mode to relative. / / /CALL: JMS SETREL AC ignored & destroyed on return. / / ESC [ ? 6 h / /----------- SETREL, XX / Entry point. PUTCHR; 4000+ESC / Send escape sequence to terminal. 4000+"[ / ... 4000+"? / ... 4000+"6 / ORIGIN mode "h&177 / relative. JMP I SETREL / Return to caller. /----------- / /SETABS - Set ORIGIN mode to absolute. / / /CALL: JMS SETABS AC ignored & destroyed on return. / / ESC [ ? 6 l / /----------- SETABS, XX / Entry point. PUTCHR; 4000+ESC / Send escape sequence to terminal. 4000+"[ / ... 4000+"? / ... 4000+"6 / ORIGIN mode "l&177 / absolute. JMP I SETABS / Return to caller. /----------- / /SAVCUR - Save cursor and attributes. / /CALL: JMS SAVCUR AC ignored and destoryed on return. / / ESC 7 / /----------- SAVCUR, XX / entry point. PUTCHR; 4000+ESC / Output escape sequence to save cursor & attr. "7&177 / ... JMP I SAVCUR /----------- / /RSTCUR - Restore cursor and attributes. / /CALL: JMS RSTCUR AC ignored and destoryed on return. / / ESC 8 / /----------- RSTCUR, XX / entry point. PUTCHR; 4000+ESC / Output escape sequence to restore cursor & attr. "8&177 / ... JMP I RSTCUR /----------- / / SETRV - Set screen to reverse video mode. / / / CALL: JMS SETRV AC is 0 on entry & return. / / ESC [ 7 m / /----------- SETRV, XX PUTCHR; 4000+ESC / Output escape sequence to set terminal attributes. 4000+"[ / 4000+"7 / "m&177 / JMP I SETRV / Return to caller. /----------- / / CLRRV - Reset screen of all attributes. / / / CALL: JMS CLRRV AC is 0 on entry & return. / / ESC [ 0 m / /----------- CLRRV, XX PUTCHR; 4000+ESC / Output escape sequence to set terminal attributes. 4000+"[ / 4000+"0 / "m&177 / JMP I CLRRV / Return to caller. /----------- / / STBOLD - set bold / / / CALL: JMS STBOLD AC ignored & destroyed on return. / / ESC [ 1 m / /----------- STBOLD, XX / return address PUTCHR; 4000+ESC / output escape sequence to the terminal 4000+"[ / 4000+"1 / "m&177 / JMP I STBOLD / return to caller /----------- / / STUNDR - set underline mode / / / CALL: JMS STUNDR AC ignored & destroyed on return. / / ESC [ 4 m / /----------- STUNDR, XX / return address PUTCHR; 4000+ESC / output escape sequence to the terminal 4000+"[ / 4000+"4 / "m&177 / JMP I STUNDR / return to caller /------ PAGE /---------- / / SNDWRD - Sends a word to the APU. / / Send: / Start-of-Word / Word / End-of-Word / Wait: / Done / Send: / 1) Add-Word-to-User-Dictionary (if loading user dict.) / or / 2) Verfiy-Word / / CALL: JMS SNDWRD / / Inputs: / / WRDSIZ - word size / WRDBUR - buffer containing the word / INIUSR - 0 if loading user dictionary, -1 otherwise /M008 / /---------- SNDWRD, XX / Routine to send word to be tested to APU. / SNDWD1 moved inline since edit no.011 /A011 / eliminated the other call to it /A011 /d011 JMS SNDWD1 / Use common routine to send the word. /d011 SNDWD1, XX / Routine to send word & wait for DONE. TAD (PCSTWD) / Send 'start word' code. JMS SNDAPU / ... TAD WRDSIZ / Get word size. CIA / ... DCA T1 / Save for izzy loop. TAD (WRDBUF-1) / save address of word. DCA X0 / ... SNDXX1, TAD I X0 / Get char. JMS SNDAPC / send char. ISZ T1 / loop on word size. JMP SNDXX1 / .... TAD (PCENWD) / Send "end word" code. JMS SNDAPU / ... JMS GETAPU / Wait to make sure the word was received. -12 / A maximum of 10 seconds. PCDONE;SNDXX2 / Acknowledgement of word. 0 / That's the only return we want! /d011 SNDXX2, JMP I SNDWD1 / Return to caller. SNDXX2, TAD INIUSR / Are we loading the user dictionary? /M011 SMA CLA / Skip if: verify word. /M008 TAD (PCADWD-PCVRFY) / Add word to user dictionary. TAD (PCVRFY) / Verify word. JMS SNDAPU / Send code. JMP I SNDWRD / Return to caller. /---------------- / /GETAPU / /CALL: JMS GETAPU / -# / arg;addr / arg;addr / ... / 0 / / this routine handles the PCRDBK (read block) request internally, / All other returns are checked against the caller return list. / If the return is not in the caller return list, a FATAL error is / declared. The number immediately following the call is the time-out / wait. / /------------ GETAPU, XX / Entry point. TAD I GETAPU / Get the time-out maximum. ISZ GETAPU / Bump the pointer past the value. DCA TIMER / Set up the counter for the wait loop. DCA TIMES / Clear wait loop flag. GTNEXT, JMS GETZ80 / Get character from the APU. TAD (-PCRDBK) / Is it requesting a BLOCK to be READ? SNA / Skip if no. JMP RDBLCK / Jmp to READ a BLOCK. TAD (PCRDBK) / restore original response. CIA / Save negative of response. DCA T1 / Save in a temp for compare against list. GTLOOP, TAD I GETAPU / Get next arg in return list. SNA / Skip if not end of list. JMP GTOOPS / OOPS! return code not in return list. TAD T1 / See if return matches list entry. SNA CLA / Skip if no. Try next entry. JMP GTEXIT / JMP to take exit & process return. ISZ GETAPU / Bump to ISZ GETAPU / next entry. JMP GTLOOP / & try again. GTEXIT, ISZ GETAPU / Point to address of address to return to. TAD I GETAPU / Get return address argument. DCA T1 / save for indirect. JMP I T1 / Take return. RDBLCK, JMS GETZ80 / Get type of file to read (RAM Load/Dict.). DCA T3 / save. JMS GETZ80 / Get lo byte of block #. DCA T1 / save. JMS GETZ80 / Get hi byte of block #. DCA T2 / Save that too. TAD T1 / Check lo byte for validity. AND (7400) / ... SZA CLA / Skip if all is OK. JMP BADBLOCKNUMBER / JMP if passed bad number. TAD T2 / Check for validity. AND (7760) / HI bits should be zeros. SZA CLA / Skip if all is well. JMP BADBLOCKNUMBER / Jmp if block is out of range. TAD T2 / Get hi byte of block #. CLL BSW / Shift 6 bits. RTL / shift 2 more bits (8 in all). TAD T1 / Add in the LO byte. DCA T2 / save. / / Map the relative block # stored in T2 to an abosolute block #. First, / determine which file to map to. / / T3: / 2 - master lexicon / 3 - RAM load file / TAD (RAMFIL) / (-3) TAD T3 / File number to map to. SNA / Skip if: not RAM load file. JMP RAMLOD / RAM load file read request. IAC / Bump the contents of the AC. SZA CLA / Skip if: master lexicon JMP DSKERR / Invalid read request. AC0002 / Master lexicon file starts in block 3. TAD T2 / Add offset to relative block number. TAD (-377) / Compare to block 377 (reserved). SMA / Skip if: block number below 377. IAC / Bump absolute block number by one. TAD (377) / Restore offset. JMP RDBLC1 / Continue. RAMLOD, / Read from RAM load file. / / Check to see that we have not completed the initialization / process. If we have completed, and come here, error.. / TAD FILNUM / Get the # of the file we are reading. TAD T3 / Compare to the file # requested SZA CLA / Skip if: requested expected file. JMP DSKERR / Error. Completed init. shouldn't be here. TAD T2 / Relative block number. TAD RAMLST / Plus starting location of RAM load file./M004 RDBLC1, DCA T2 / Creates block number to read. TAD (PCSTBK) / Send START of BLOCK. JMS SNDAPU / ... TAD T2 / Get block #. JMS PUTBLK / Read the block. TAD (PCENBK) / Send END of BLOCK. JMS SNDAPU / ... JMS GETZ80 / Wait for answering 'DONE'. TAD (-PCDONE) / Check response. SNA CLA / Skip if not correct 'DONE' response. JMP GTNEXT / Go handle the next APU request. JMP GTOOPS / Report error. RAMLST, 377 / Start of American ramload file. /A004 / patched at run time if British /A004 /------------ PAGE / / Incorrect spelling of word has been found ... / ERRGCOR, JMS SETABS DCA WDOFST / initialize the correct word list pointer TAD HALTFG / Are we GOLD:HALTed? SZA CLA / Skip if no. See if any corrections available. JMP ERRHLT / Jmp to enter user menu via GOLD:HALT. TAD CORACT / Is Corrector active? /A002 SNA CLA / Skip if yes. /A002 JMP ERRCORNA / else take CORrector Not Active path /A002 TAD (PCNXWD) / get next possible word code JMS SNDAPU / JMS GETAPU / get response -17 / Time-out maximum - 15 seconds. PCNOMR;ERRNCOR / no correction available PCSTWD;ERRWCOR / successful completion, corrections avail. 0 / ERRHLT, JMS DISERRMSG / menus AC0004 / set default menu option to CONTINUE. JMP ERRMRG / Merge below to display the default option. ERRWCOR, JMS GETWDS / get the correct words AC0001 / rtn1 - no more corrections after these DCA RTNSTS / rtn2 - still more corrections JMS DISWRD / display words to user AC0001 / highlight JMS ARRMOV / to hi-lite the first option JMS RFXMUP / replace menus CLA / enter here on error w/corrections JMP ERRMRG / ERRNCOR, JMS NCORRECT / no corrections available NOP / routine currently takes rtn+1 ERRCORNA, / spelling corrector option not active /A002 JMS DISERRMSG / menus AC0001 / enter here on error w/no corrections / AC - 0 or 1 ERRMRG, DCA OFFSET / set up default offset to menu table TAD OFFSET / set up a flag depending on our status DCA WDSAVL / if set, no words available TAD WDSAVL / DCA LEVEL / set level according to status ERRMR1, JMS MENULINE / display the menuline w/default option bolded ERRMR2, JMS SPOTCR / position the cursor / JMP MNUINP / get users input /---------- / / ROPSHUN - user has selected the replace option / /---------- ROPSHUN, TAD VIDEO / Is the word in error highlighted? SPA SNA CLA / Skip if yes. JMP NORPLC / NO. Report error. TAD WDSAVL / Are there words available? SZA CLA / skip if: words available JMP NORPL1 / No words to replace. TAD LEVEL / Check which level we are on. SNA CLA / Skip if: on menu level. JMP ROPSH0 / Correct list level, replace w/selected word DCA LEVEL / Set level to correct list. AC0001 / hi-lite JMS ARRMOV / The currently active word. JMS RFXMUP / Re-paint the prompt line JMP MNUINP / Wait for more input. ROPSH0, JMS SETREL / set mode to relative / / Set up a pointer to the word chosen / to be replacing the word in error. / TAD WDOFST / word # in the correct word list CLL CML RAL / set up a pointer to the address /m019 TAD (WDTABLE) / within the offset table / DCA T3 / save pointer to address TAD I T3 / get the address in the AC / JMS RCOPTN / Call REPLACE edit code. COPSHUN, / COPSHUN - Continue OPtion merge point. / User has selected the continue option. TTABL1, JMS SETABS / set mode to absolute CIFTXT JMS I (CALIOA) CLREOS / clear the bottom of the screen 1400 NOP JMS MNUPNT / re-paint the menu line JMS SETREL / set relative mode JMP SCCONT / and continue / / No word hi-lited (or available), cannot replace... / NORPL1, JMS PUTERR / output error message /M008 NOEDT / no hi-lited /A008 JMP MNUINP / wait for more input /A008 NORPLC, JMS PUTERR / output error message /M008 NOCORRECT / none available /A008 /d008 DCA NORPL / .... /d008 JMS PUTERR / output error message /d008NORPL, .-. / / JMP MNUINP / wait for more input /---------- / / EOPSHUN - user has selected the edit option / /---------- EOPSHUN, / rtn2 - edit JMS EFXMUP / edit menus / JMS SETREL / set mode to relative JMS ECOPTN / Call EDIT code. JMP TTABL1 / rtn1 - end of edit (CR detected) / fix up screen, join main scroll loop JMS SETABS / rtn2 - (gold menu) - set mode to absolute AC0004 / set default mode DCA OFFSET / to finish JMS RFRSCN / refresh the screen JMS DISERRMSG / finish painting the screen JMP ERRMR2 / listen for input /---------- / / IOPSHUN - user has selected the ignore option / /---------- IOPSHUN, / rtn3 - ignore / TAD VIDEO / Is error word highlighted? SPA SNA CLA / SKip if yes. IGNORE option is valid. JMP NORPLC / JMP if no. cannot ignore if word not hilighted. TAD IOPSHNW / get add word code / w or w/o add to NW list/M008 JMS SNDAPU / add word to user word list JMS GETAPU / get response -12 / Time-out maximum wait - 10 seconds PCUSDF;IOPSH2 / user dictionary full PCDONE;COPSHUN / done ADD function PCDUPL;COPSHUN / Word already in dictionary. Ignore error. IFNDEF UPDICT < 0; 0 > / Update not implemented - all others fatal/A008 IFDEF UPDICT < PCENNW;COPSHUN >/ New Word list full/A008 / Say nothing /M012 0 / all other returns are fatal IOPSHNW, / When ignore is chosen we... /A008 IFDEF UPDICT / Start out adding to NW list /A008 IFNDEF UPDICT / Add to user dict'ry only /A008 / / IOPSH2 moved for space reasons edit no. 002 /---------- PAGE /---------- / / MNUINP - get users input at menu level / / / CALL: JMP MNUINP / /---------- MNUINP, JMS IPTCHR / get a char from the user / char is returned in the AC SMA / skip if: special character /A008 AND P137 / mask to 7 bits & uppercase /A008 DCA INPCHR / save the char / JMS PUTERR / clear any error messages BLANKL / .... / MNUIN1, TAD (MNTABL-2) / set up a pointer to the allowable inputs DCA X1 / .... TAD INPCHR / restore for compares JMS DSPTCH / dispatch to appropriate routine / return if: char not in dispatch table /d008 TAD INPCHR / restore the char /d008 SPA / skip if: not special char /d008 JMP ILLEGAL / invalid input /d008 AND P137 / mask to 7-bit and upper-case /d008 DCA INPCHR / .... /d008 TAD (MNTABL-2) / set up a pointer to the allowable inputs /d008 DCA X1 / .... /d008 TAD INPCHR / restore for compares /d008 JMS DSPTCH / dispatch to appropriate routine /d008 / return if: char not in dispatch table ILLEGAL, CLA / Clear AC incase special char is in it. JMS PUTERR / display error message NOPTION / JMP MNUINP / wait for valid input /----- / Replace, Edit, Ignore, Continue, Finish, or Overview option requested /----- MNUIN3, TAD LEVEL / what level are we on? SZA CLA / skip if: correct list level JMP MNUIN4 / menu line level already AC7777 / un-hi-lite JMS ARRMOV / the currently selected word AC0001 / set to menu level. DCA LEVEL / ... MNUIN4, TAD (-MNTABL) / pointer to start of input list TAD X1 / create an offset into the table CLL RAR MNUIN5, DCA OFFSET / save the offset JMS DISERRMSG / menus JMP ERRMR1 / and wait for more input MNUIN6, TAD CORACT / is corrector active? /A002 SNA CLA / skip if yes. /A002 JMP ILLEGAL / else corrector NOT active, Replace illegal/A002 JMP MNUIN4 / continue processing /A002 / / User has struck RETURN, hand off to the appropriate routine. / EXMNUINP, TAD OFFSET / set up an offset to the appropriate routine TAD (TRNTBL) / thru the transfer table DCA T1 / save TAD I T1 / address of routine DCA T1 / ... JMP I T1 / and goto the routine / / allowable inputs to main menu / / - ORDER IMPORTANT - / MNTABL, -"R+200;MNUIN6 / replace / new branch - is Corrector active?/M002 -"E+200;MNUIN3 / edit -"I+200;MNUIN3 / ignore -"C+200;MNUIN3 / continue -"F+200;MNUIN3 / finish -"O+200;MNUIN3 / overwrite / -"M+200;MORE / more -EDHELP;HOPSHUN / help key -EDUPAR;UPARRO / up arrow -EDDNAR;DNARRO / down arrow -EDADVN;ADVNCE / right arrow -EDBKUP;BCKUP / left arrow -EDNWLN;EXMNUINP / CR 0 / terminator / / allowable routines after recieving a RETURN / TRNTBL, ROPSHUN / replace EOPSHUN / edit IOPSHUN / ignore COPSHUN / continue EOF / finish HOPSHUN / help / / - END ORDER IMPORTANT - / /---------- / / HOPSHUN - Help OPtion / / User has selected the help option. / /---------- HOPSHUN, TAD LEVEL / what line are we on? SNA CLA / skip if: menu line AC7777 / correction list, enter routine w/AC=(-1) JMP HLPKEY / display the help menu /---------- / / UPARRO - UP ARROw / / Up arrow key was struck at user input level. / If [on corrections list level] / Then / error / Else / If spelling corrector activated /A002 / Then /A002 / hi-lite active replacement word (if available) /M002 / Else /A002 / error /A002 / /---------- UPARRO, TAD LEVEL / What level are we on? SNA CLA / Skip if: on mene level. JMP ILLEGAL / Correct list level, error TAD VIDEO / Is the word in error highlighted? SPA SNA CLA / Skip if yes. JMP NORPLC / NO. Report error. JMS CORCHK / skip if corrector is active /A002 JMP ILLEGAL / else correct list level, error /A002 TAD WDSAVL / Check for replacement words available SZA CLA / Skip if: no words available JMP NORPL1 / display error msg and wait for input DCA LEVEL / Set to corrections list level DCA OFFSET / Set to replace AC0001 / Hi-lite replacement word JMS ARRMOV / ... JMS RFXMUP / Replace menus JMP ERRMR1 / Position cursor and wait for input. /---------- / / DNARRO - DowN ARROw / / Down arrow key was struck at user input level. / If [on menu level] / Then / error / Else / un-hi-lite selected replacement word / hi-lite edit / /---------- DNARRO, TAD LEVEL / What level are we on? SZA CLA / Skip if: on correct list level JMP ILLEGAL / Menu level, error IAC / Set DCA LEVEL / Menu level AC7777 / Un-hi-lite JMS ARRMOV / Currently selected word AC0001 / Set to edit JMP MNUIN5 / Hi-lite edit and wait for more input / following moved here for space reasons edit no. 002 IOPSH2, JMS PUTERR / display error msg. - 'user dictionary full' UDFULL JMP MNUINP / wait for some other response IOPSH3, TAD (PCADWD) / get code to just add word to user dict/A008 DCA IOPSHNW / & put into ignore option routine /A008 / so no more words will be added to new /A008 / word list in this session /A008 JMS PUTERR / display error msg. - 'new word list full'/A008 NWFULL JMP MNUINP / wait for input /A008 /---------- PAGE /---------- / / MORE - / / User typed 'M' at input level. / /---------- MORE, TAD RTNSTS / are there more corrections available SZA CLA / skip if: more corrections available JMP MORE1 / no more corrections available TAD WDSAVL / are there words to begin with? SZA CLA / skip if: words JMP NORPL1 / no words available, error AC0001 / set DCA MOORE / to indicate displaying (for STATTR) TAD LNCLMR / set up the line and column # to hi-lite <...> SPA CLA / ... AC0001 / ... TAD SIXTEN / ... DCA LYNE / ... TAD LNCLMR / ... AND P3777 / ... DCA COLL / ... PUTCHR; ESC / output an escape sequence CIFTXT / position the cursor JMS I (CALIOA) / TXTSTR / LYNE, .-. / line COLL, .-. / column TAD (MORDIS) / pointer to DCA DISMO1 / ... JMS SETRV / set reverse video TAD (SNL) / want to hi-lite with the same DCA STATT1 / attributes as the selected word JMS STATTR / set correct attributes JMS DISMORE / re-paint JMS CLRRV / clear attributes JMS SPOTCR / re-position cursor for input TAD (-WDTABLE) / calculate the number of words TAD X3 / ... CLL RAR / ... IAC / bump count by one DCA WDOFST / point to next word DCA MOORE / clear flag JMP GETM0 / get the words MORE1, JMS PUTERR / Display ENDCOR / No more corrections JMP MNUINP / wait for valid input MOORE, 0 / flag to indicate painting / BCKUP - ADVNCE routine moved for space reasons edit no. 002 /---------- / / GETWDS - routine to read correct word list from the Z80 / / / CALL: JMS GETWDS / rtn1 / end of corrections / rtn2 / still more corrections available / / Routine will fill up the correct word buffer with / input supplied from the Z80, and build a count of / the number of characters in the buffer. / /---------- GETWDS, XX / return address TAD (WDLIST-1) / set up a pointer to the correct word buffer DCA X0 / .... DCA CURLSZ / initialize the char count TAD (-12) / set up time-out maximum time - 10 seconds DCA TIMER / ... DCA TIMES / clear wait loop flag / GETWD1, JMS GETZ8C / get a char from the Z80 TAD (-PCENWD) / is it the end of word, (end of input)? SNA / skip if: some other char JMP GETWD2 / end of input, wait for status. TAD (PCENWD) / restore the char DCA I X0 / and store in the buffer. ISZ CURLSZ / bump the char count JMP GETWD1 / and loop 'till done. / GETWD2, JMS GETAPU / get status -12 / Time-out maximum wait - 10 seconds. PCNOMR;GETWD4 / no more corrections PCDONE;GETWD3 / more corrections available 0 / all others are fatal / GETWD4, CIFTXT / JMS I (CALIOA) / Display ENDCOR / No more corrections available 2700 / NOP / JMP GETWD5 / normal exit GETWD3, ISZ GETWDS / bump return if more corrections GETWD5, JMP I GETWDS / normal return if no more corrections / following routines moved here for space reasons edit no. 002 /---------- / / EFXMUP - / / Fix up the screen prior to resuming the edit session. / /---------- EFXMUP, XX CIFTXT JMS I (CALIOA) / clear to end of screen CLREOS / ... 1400 / starting from line 15 NOP / (filler) / CIFTXT JMS I (CALIOA) MSGRP2 2300 2200 / edit menu line / JMP I EFXMUP /---------- / / RFXMUP - Replace menus / /---------- RFXMUP, XX CIFTXT JMS I (CALIOA) REPRMT / replace menus 2300 2400 JMP I RFXMUP /---------- / / /---------- NCORRECT, XX / return address JMS CORCHK / skip if corrector is active /A002 JMP NCOREXIT / else just exit w/o display /A002 / CIFTXT JMS I (CALIOA) NOCORRECT / display no corrections message 1500 NOP / (filler) / NCOREXIT, ISZ NCORRECT / routine takes return+1 /M002 JMP I NCORRECT / return to caller /---------- PAGE /**************************************************************************** /****** W A R N I N G - T H I S P A G E B L A S T E D ****** /**************************************************************************** / SPHOLE is defined in WPF1, and hence will cause an assembly error if /a019 / moved from here. /a019 SPHOLE=. /a019 / / Control passed here when user strikes the HELP key / HLPKEY, DCA SAVAC / save the AC upon entry / JMS SETABS / set mode to absolute JMS SETRV / set reverse video / CIFTXT JMS I (CALIOA) RVHELP / display header 1400 NOP / (filler) / TAD HLPLEN / # of 'spaces' to output DCA T3 / as a counter TAD (ECSPC) / output the remainder of the header JMS OPTCHR / ... ISZ T3 / ... JMP .-3 / ... / TAD SAVAC / restore AC: 0=top level of help / -1=second level of help (replace) / +1=second level of help (edit) SNA / skip if: second level JMP HELP0 / top help level / TAD (MENU2TABLE) / set up a pointer to the menu header DCA HELP1 / ... TAD SAVAC / restore AC TAD (HELP2TABLE) / set up a pointer to the help menu JMP HELP5 / ... (join common code) / HELP0, TAD OFFSET / set up a pointer to the menu name CLL RAL;IAC / ... TAD (MENUTABLE) / ... DCA HELP1 / TAD OFFSET / set up a pointer to the correct menu TAD (HELPTABLE) HELP5, DCA T3 AC7777 TAD I T3 DCA X4 / CIFTXT JMS I (CALIOA) MENUNM 1477 HELP1, .-. / menu name / JMS CLRRV / clear reverse video JMS STMRGN / set up the scrolling region for the menus JMS SETREL / set relative mode /----- / / Display the HELP menu / /----- HELP2, TAD I X4 / get a text line SNA / skip if: more lines available JMP HELP3 / end of initial input DCA HELP23 / save pointer to menu line / HELP21, TAD HELP25 / Set default NOP for BLANK lines. DCA HELP24 / ... TAD HELP23 / is this the BLANK line? TAD (-BLANK) / ... SNA CLA / Skip if no. Set filler. JMP HELP22 / Go merge for this help line. TAD I X4 / pick up the substring address DCA HELP24 / deposit in the IOA string HELP22, PUTCHR; CR+4000 / Output sequence. LF / .... / CIFTXT / Display the menu line JMS I (CALIOA) / HELP23, .-. / address of the menu line HELP24, .-. / this location can be modified for substrings HELP25, NOP / (filler) JMP HELP2 / loop for rest of menu / HELP3, TAD I X4 / get next menu line SNA / skip if: at end of first screen JMP HELP4 / at end of menu DCA HELP23 / at end of first screen, save ptr. and / check if user wants to continue JMS IPTCHR / get a char / TAD (-EDHELP) / is it the HELP key? SNA / skip if: not the HELP key JMP HELP21 / help key SKP / some other key, exit HELP4, JMS IPTCHR / get a char CLA / throw it away JMS SETRGN / re-set the document scrolling region JMS SETABS / set absolute mode / TAD SAVAC / if coming from edit, refresh screen different SMA SZA CLA / skip if: not in edit session JMP EFIXMP / in process of edit JMS RFRSCN / refresh the screen TAD WDSAVL / get the status TAD (-4) / are we halted? SMA / skip if: not halted JMP HELP6 / halted, no messages TAD (4) / restore value of WDSAVL SZA CLA / skip if: words to display JMS NCORRECT / display -no corrections- message to user JMS DISWRD / display words to user HELP6, TAD LEVEL / if on correction list, must hi-lite word SZA CLA / skip if: on corrections list JMP HELP8 / menu line, wait for more input AC0001 / hi-lite JMS ARRMOV / selected word JMS RFXMUP / paint replace menus JMP ERRMR2 / wait for more input HELP8, JMS DISERRMSG / menus JMP ERRMR2 / wait for input /----- / / Re-paint the screen prior to resuming the edit session / /----- EFIXMP, JMS EFXMUP / re-paint screen JMP ECHPRN / and return to edit /---------- PAGE /**************************************************************************** /****** W A R N I N G - T H I S P A G E B L A S T E D ****** /**************************************************************************** /**************************************************************************** / TSTCHR Moved here to give it breathing space /a019 /**************************************************************************** /----------- / /TSTCHR -- See if current character is ALPHA, NUMERIC, or OTHER. / /CALL: JMS TSTCHR AC=0 on input. / char=other return / char=numeric return / char=alpha-only return / / char is stored in T1 for subsequent reference. / /------------ TSTCHR, XX / Entry point. DCA CHAR / Save character. TSTCND, / Entry point from OVTST /a019 TAD CHAR / Get character. AND P377 / Isolate only the character bits. AND (200) / Test for 8 bit character /a019 SZA CLA / Is the character 8 bit? /a019 JMP TSTALP / Yes, accept all 8 bit chars as ALPHA /a019 TAD CHAR / No, retrieve character /a019 X="a&177 / First check for lower case characters. TAD (-X) / Compare against little "a". SPA / Skip if maybe. JMP TSTUPR / See if upper case. TAD ("a-"z) / See if within lowercase range. SMA SZA / Skip if ALPHA ONLY. JMP TSTOTH / Jmp to take OTHER return. TSTALP, ISZ TSTCHR / ALPHA-ONLY return. TSTNUM, ISZ TSTCHR / NUMERIC return. TSTOTH, CLA / OTHER return. JMP I TSTCHR / Return to caller. TSTUPR, TAD ("a-"A) / See if uppercase character. SPA / Skip if possible UPPERCASE. JMP TSNTAL / Definately not ALPHA-BETIC. See if numeric. TAD ("A-"Z) / See if within ALPHA-ONLY range. SMA SZA / Skip if ALPHA ONLY. JMP TSTOTH / Must be OTHER. JMP TSTALP / Jump to take ALPHA return. TSNTAL, TAD ("A&177) / Normalize. JMS TSTSPC / See if special (".", "-", or "'"). SNA / Skip if no. JMP TSTALP / Treat HYPHEN, PERIOD, and APOSTRAPHE as ALPHA. TAD ("'-"0) / See if numeric. SPA / Skip if maybe. JMP TSTDED / Jmp if NO. Test for start of dead key./m019 TAD ("0-"9) / See if within NUMERIC range. SMA SZA / Skip if yes. JMP TSTOTH / Jmp if no. Must be OTHER. JMP TSTNUM / Take NUMERIC return. X="0&177 TSTDED, TAD (X-ECSTOV) / Test for a start of dead character /a019 SZA / Is it a "Start of Dead"? /a019 JMP TSTOTH / No, it's something else /a019 CDFEDT / Get the pointer into text buffer /a019 TAD I (CURPTR) / from the editor /a019 DCA X3 / Store it in an index register /a019 CDFBUF / Change to buffer field to get text /a019 JMS GETNON / Move the cursor on one character and /a019 / get the next character /a019 AND P177 / Mask off character from mode bits /a019 TAD (-40) / Test for space /a019 SZA / Is it a space? /a019 JMP FOUND8 / No, user dead - so just pass 1st char /a019 JMS GETNON / Get the next character /a019 AND P177 / Mask out mode bits again /a019 TAD (-40) / Test for a required space /a019 SNA / Is it another space? /a019 JMP FOUND8 / Yes, required space - output a space /a019 TAD (40-62) / Is this a multinational character? /a019 SZA CLA / Is it? /a019 JMP FOUND8 / No, is tech or line drawing - seperator/a019 JMS GETNON / Yes, get the next character - this is /a019 / a striped 7 bit of the required 8 bit /a019 AND P177 / Strip any mode bits /a019 ISZ TSTCHR / Prepare to return as ALPHA if multinat/a019 ISZ TSTCHR / ... /a019 TAD (200-40) / Set the 8th bit and prepare for... /a019 FOUND8, TAD (40) / Adding in the 40 subtracted above /a019 DCA CHAR / Save the new version of the character /a019 FINDED, JMS GETNON / Start looking for the "End of Dead" /a019 AND P177 / Strip mode bits /a019 TAD (-ECNDOV) / Test for "End of Dead" /a019 SZA / Is this the end of the dead sequence? /a019 JMP FINDED / No, keep on searching /a019 CDFMYF / Yes, back to home field before... /a019 JMP TSTOTH / Return (inced if ALPHA character) /a019 GETNON, XX / Routine to get the next non-null char /a019 GETNLP, TAD I X3 / pointed to by X3 /a019 SNA / Is this a null? /a019 JMP GETNLP / Yes, get next character /a019 JMP I GETNON / No, return /a019 TSTSPC, XX / Routine to see if passed char is ".", "-", or "'". X=".&177 / AC returns 0 if yes, char - "'" if no. AND P177 / Isolate only the character bits. TAD (-X) / See if period. SZA / Skip if yes. TAD (".-"-) / See if initial dash (hyphen). SZA / Skip if yes. TAD ("--"') / See if initial apostrophe. JMP I TSTSPC / Return 0 for special, char - "'" if not. /**************************************************************************** / LODAPU Blasted out to give TSTCHR breathing space /a019 /**************************************************************************** LODAPU, XX / Hook to LODAPU routine to blast it in /a019 RDF / This needs to be cross-field callable /a019 TAD CIDF0 / so create and store the exit CIF CDF /a019 DCA LAPXIT / instruction /a019 JMS SBHOOK / Call the blaster hook /a019 BLODAP / Blast in the LODAPU routine /a019 LAPXIT, XX / The cross-field CIF CDF return instruc/a019 JMP I LODAPU / Return on compleation of routine /a019 /d019 /d019 /---------- /d019 / /d019 / LODAPU - LOaD the APU /d019 / /d019 /---------- /d019 LODAPU, XX /d019 RDF / Get return field. /d019 TAD CIDF0 / Create a return CIF CDF. /d019 DCA LODXYT / ... /d019 CDFSPL / Map spell field. /d019 DCA I (TIMES) / clear wait loop flag /d019 AC0001 / set /d019 DCA I (UPDCLK) / update clock flag /d019 CDFMNU / Map menu field. /d019 TAD (BUFADR) / Init queue block parameters. /d019 DCA I (CMDBLK+RXQBAD) / Buffer address. /M003 /d019 TAD (CDFTXT) / ... /d019 DCA I (CMDBLK+RXQBFD) / Buffer field. /M003 /d019 DCA I (CMDBLK+RXQRS1) / Init block count to the default (1). /M003 /d019 /d019 TAD (OLL301) / Reset the field 2 lock words. /d019 DCA I (OLL301) / field 5 lock word. /d019 TAD (OLL301) / ... /d019 DCA I (OLL400) / and field 6 lock word. /d019 /d019 TAD I (MUBUF+MNOPTC) / Check for spelling corrector active /A002 /d019 AND (SEDBIT) / ... /A002 /d019 SZA CLA / Skip if not active /A002 /d019 AC0001 / else set and ... /A002 /d019 DCA CORACT / Save CORrector ACTive flag /A002 /d019 /d019 / See if we're loading the user dictionary. /d019 TAD I (MUBUF+MNTMP6) / this will be 6 for SC; 7 for LU. /d019 TAD (-7) / This yields -1 for SC, 0 for LU, or /M008 /d019 / +4 for UD. /A008 /d019 DCA INIUSR / Set the SC/LU/UD indicator. /A008 /d019 /D004 TAD I (MUBUF+MNOPTN) / Get the option word. /d019 /D004 AND (MNRX7X) / Is the APU loaded? /d019 TAD I (MUBUF+MNPULD) / Get the external processor loaded word/A004 /d019 AND (MNRX0X+MNRX1X) / Is the "APU" loaded ? /A004 /d019 /d019 SNA CLA / Skip if yes. check for LU & overwrite. /d019 JMP LODAP1 / APU not loaded. Go load it. /d019 TAD INIUSR / Are we loading the user dictionary? /d019 SZA CLA / Skip if yes. /d019 JMP LODXIT / Normal SC run & APU is already loaded. /d019 TAD I (MUBUF+MNTMP5) / See if OVERWRITE (<>0) option. /d019 SNA CLA / Skip if yes. /d019 JMP LODXIT / For ADD (0) to user dictionary, nothing more to do. /d019 CDFMYF / Back to current field. /d019 TAD (PCINUD) / Tell loaded Z80 to INIT the user dictionary. /d019 JMS SNDAPU / ... /d019 JMP LODAP3 / Go wait for the done status. /d019 /d019 LODAP1, CDFMYF / Back to current field. /d019 IFNDEF DEBUG < / Don't assemble this if going out the comm line. /d019 TAD XPUFLG / Is the external processor an XPU /A004 /d019 SZA CLA / Skip if not .. continue w APU code /A004 /d019 JMP LODXPU / else branch to XPU specific code /A004 /d019 /d019 / loop /d019 /d019 LODAP2, JMS MMCMD / load address - ( 16-bit ) /d019 0!CDBIT!XRBIT / ( 2 byte starting address for data xfer ) /d019 TAD STRTAH / get the starting address ( high order byte ) /d019 JMS SNDAPU / send to APU /d019 TAD STRTAL / ... ( low order byte ) /d019 JMS SNDAPU / send to APU /d019 /d019 JMS MMCMD / load byte count ( 2 bytes ) /d019 1!CDBIT!XRBIT / ... /d019 AC0002 / Hi byte of 1000. /d019 JMS SNDAPU / high order length /d019 JMS SNDAPU / low order 8-bit byte of 1000. /d019 /d019 CIFMNU / Update the date & time display. /d019 JMS I (TIMDSP) / ... /d019 /d019 JMS MMCMD / load data to Z80 RAM - ( until byte count=0 ) /d019 2!CDBIT!XRBIT / ... /d019 TAD STRTBK / block number to load /d019 JMS PUTBLK / output the data /d019 /d019 AC0002 / bump to correct load address /d019 TAD STRTAH / /d019 DCA STRTAH / high byte starting address for next block /d019 ISZ STRTBK / bump to next block /d019 ISZ NMBRBK / bump block count /d019 JMP LODAP2 / more blocks to load /d019 /d019 / until: all blocks loaded /d019 / Now start up the APU & wait for the done code. /d019 /d019 JMS MMCMD / load the PC /d019 33!CDBIT!XRBIT / ( '1B' hex - load register pair ) /d019 TAD (GTAPU1%400) / get starting address /d019 JMS SNDAPU / output the address ( high byte ) /d019 IFNZRO GTAPU1&377 < /d019 TAD (GTAPU1&377) / ... /d019 > / IFNZERO GTAPU1&377 /d019 JMS SNDAPU / ... ( low byte ) /d019 JMS MMCMD / run from RAM /d019 4!CDBIT!XRBIT / ( from saved PC address ) /d019 > /IFNDEF DEBUG /d019 /d019 LODAPM, / Merge from LODXPU /M004 /d019 /d004 TAD I (MUBUF+MNOPTN) / Get options word. /d019 /d004 TAD (MNRX7X) / Add in the 'Z80 loaded' bit. /d019 /d004 DCA I (MUBUF+MNOPTN) / Store new options word. /d019 JMS SETLDB / Go set the load bits /A004 /d019 TAD (RAMFIL) / Set file # to indicate RAM load file reads. /d019 DCA FILNUM / ... /d019 /d019 LODAP3, JMS GETAPU / wait for a response /d019 -36 / Time-out wait maximum - 30 seconds. /d019 PCDONE;LODAP4 / done, exit /d019 0 / all others are fatal /d019 /d019 LODAP4, TAD (MSTRLX) / Set file # to indicate master lex. file reads /d019 DCA FILNUM / ... /d019 /d019 LODXIT, CDFSPL / date field to spell /d019 DCA I (UPDCLK) / clear update clock flag /d019 LODXYT, XX / Return CIF CDF goes here. /d019 JMP I LODAPU / finished loading 1 'something' /d019 /d019 /d019 STRTBK, HMCODE / starting block # /M004 /d019 NMBRBK, -50 / -# of blocks to load / RFXMUP moved for space reasons edit no. 002 / / return to here to ignore.... Moved here edit no. 008 / SCFIX, JMS DISPLY / Refresh the word unreversed video. 0 / Say NOT REVERSED VIDEO. CDFEDT / Compute cursor posn of last char of word. AC7777 / CURPOS currently points to next posn so backup. TAD I (CURPOS) / ... DCA I (CURSOR) / Set current cursor posn to there. JMP SCNEXT / no longer in-line must now make specific jump/a008 /---------- PAGE /---------- / / MENULINE - / / This routine will display the menu line in reverse video mode, / with the currently active menu option bolded. / /---------- MENULINE, XX / save callers return address JMS CORCHK / skip if corrector is active /A002 AC7777 / else factor in bypass of Replace /A002 TAD OFFSET / set up a pointer the the selected option. DCA MENUCURSOR / ... JMS SETRV / set reverse video mode / set up a pointer to the menu options / and display them to the user JMS CORCHK / skip if corrector is active /A002 /A002 SNA CLA / ... /A002 AC0002 / else bypass display of Replace /A002 TAD (MENUTABLE) / DCA POSITION / set up pointer to address of cursor position TAD POSITION / IAC / DCA ADDRESS / set up pointer to address of text string JMS CORCHK / skip if corrector is active /A002 /A002 SNA CLA / ... /A002 AC7777 / else reduce # of options by 1 /A002 TAD (ENDMENUTABLE-MENUTABLE%2) CIA DCA OPTCNT / counter of # of options MENUL1, TAD MENUCURSOR SNA CLA JMS STBOLD / set the bold attribute / CIFTXT JMS I (CALIOA) MENUCONTROL POSITION, .-. / address of ^P ADDRESS, .-. / address of text string address TAD MENUCURSOR SNA CLA JMS CLRBLD / bold is set, clear / AC7777 TAD MENUCURSOR DCA MENUCURSOR / decrement position of pointer / AC0002 / set up to display next option TAD POSITION DCA POSITION AC0002 TAD ADDRESS DCA ADDRESS ISZ OPTCNT JMP MENUL1 JMS CLRRV / clear reverse video JMP I MENULINE / return to caller / CLRBLD, XX / return address JMS CLRRV / clear attributes JMS SETRV / restore reverse video JMP I CLRBLD / return to caller / MENUCURSOR, 0 / position of bolded option OPTCNT, 0 / counter of # of options / EFXMUP moved for space reasons edit no. 002 /---------- / / Display the string: / / or / /---------- DISMORE, XX CIFTXT JMS I (CALIOA) DISMO1, .-. / or LABRKT / left angle bracket RABRKT / right " " JMP I DISMORE / NCORRECT moved for space reasons edit no. 002 /---------- / / RFRSCN - refresh the screen / / / This routine will erase the screen from the bottom / of the scroll area to the bottom of the screen. It / will then re-paint the menu line with the current / option highlighted. / /---------- RFRSCN, XX / return address CIFTXT JMS I (CALIOA) / CLREOS / clear the screen 1400 / starting line to clear from NOP / (filler) / JMS RVBKGRND / paint the background for the main menu / JMS MENULINE / paint the menu line / JMP I RFRSCN / return to caller / This routine is called to display the main error messages to the user DISERRMSG, XX / highlight replace or edit, depending on / whether or not corrected spellings were found CIFTXT JMS I (CALIOA) E1RRLINE / display main error line 23 2300 / display second line first 2400 / and third line second JMP I DISERRMSG / prior to return, reset edit scrolling region IPTCHR, XX / return address JMP IPTCH2 / IPTCH1, CIFSYS JWAIT / IPTCH2, CIFSYS XLTIN JMP IPTCH1 / nothing / JMP I IPTCHR / return to user with char in AC / following moved here for space reasons edit no. 002 /---------- / / BCKUP - / |-- adjust the offset into the menu line, and highlight... / ADVNCE - / / / Control is passed here when either a left or right / arrow key is struck at input level. Check to see / which level we are on. If on corrections list, pass / control to another routine, if menu, move the highlighted / option appropriately and check to make sure the cursor / stays within the limits of the menu line. / /---------- BCKUP, AC7776 ADVNCE, IAC / AC = +/- 1 MQL / save AC TAD LEVEL / which level are we on? SNA CLA / skip if: menu level JMP MOVHILYT / corrections list MQA / restore AC TAD OFFSET / modify current offset into menu table SPA / skip if: moving right TAD (ENDMENUTABLE-MENUTABLE%2) DCA OFFSET / update offset pointer TAD (ENDMENUTABLE-MENUTABLE%2-1) CIA TAD OFFSET / MQL / save for later use /A002 MQA / restore for test /A002 SMA SZA CLA / skip if: within bounds of menu line DCA OFFSET / reset pointer to start of menu line TAD CORACT / is corrector NOT active /A002 TAD OFFSET / AND is Replace function selected /A002 SZA CLA / skip if yes. /A002 JMP ADVBKX / else OFFSET is legal - continue /A002 MQA / restore saved AC (= +1 or -5) /A002 SPA / if it is =1 thats what we want /A002 CIA / else make the -5 a positive value /A002 DCA OFFSET / & save the adjusted pointer /A002 ADVBKX, JMS MENULINE / re-paint menuline /M002 JMS SPOTCR / position the cursor JMP MNUINP / listen for input /---------- / / MMCMD - Send commands to the minimonitor (moved here edit no. 010) / /---------- MMCMD, XX MMCMX, Z80IF / wait for the inbound read complete flag/M004 JMP .-1 / APU not ready to read yet... /d008 CLL CLA / ready for read... TAD I MMCMD / get the command ISZ MMCMD / bump return address MMCMY, Z80WR / send the command /M004 CLA CLL / AC is dirty on return JMP I MMCMD / return to caller /---------- PAGE / paints the correct word list on the screen DISWRD, XX / TAD (WDTABLE-1) / set up a pointer to the word buffer DCA X3 / JMS SAVCUR / save the cursor position / ... / TAD (WDLIST-1) / set up a pointer to the word list DCA X0 TAD (-BUF0LEN) / check to see if the word buffer is full. TAD CURLSZ / ... SZA CLA / skip if: the word buffer is full. JMP PNTLN0 / word buffer is not full. TAD I (WDLIST+BUF0LEN-1) / get the last char in the word buffer. TAD (-ECSPC) / is it a 'space'? SNA CLA / skip if: not a 'space'. PNTLN0, AC7777 / the last valid char in the word buffer is / a 'space' so our count of valid characters / is one too many. TAD CURLSZ / and a counter of the number of chars CIA DCA T1 DCA T2 / current column number DCA ROW / initialize row number for table / CIFTXT JMS I (CALIOA) / position the cursor for paint PCURSTRING 1500 NOP / (filler) / JMS SETRV / set reverse video / PNTLI1, TAD (SZL) / set up proper instruction DCA STATT1 / for set attribute routine JMS STATTR / set up the proper attributes for paint JMS FNDLNXTWRD / find the length of the next word / PNTLI2, TAD I X0 / get a char / DCA HOLDCH / save TAD HOLDCH / restore TAD (-ECSPC) / is the char a space? SNA CLA / skip if: not a space JMS CHKATR / a space, set RV, check for bold / TAD HOLDCH / restore the char JMS OPTCHR / and output it to the screen / ISZ T2 / bump the column # ISZ T1 / more to output? JMP PNTLI4 / jump if so... / JMS CLRRV / clear attributes / JMS FITITT / make sure we can fit the <.......> text / and display the appropriate <.......> text / JMS RSTCUR / restore the cursor position / ... JMP I DISWRD / and return to caller / PNTLI4, ISZ T3 / bump the word char count JMP PNTLI2 / output the rest of the word JMP PNTLI1 / loop for more words / /---------- / / PUTBLK - PUT a 'BLocK' of data to the APU / / / In order that this routine might be able to execute without / the need of knowing which media is being used, whenever a / request to read a block is made, compute the track and sector / number for that block. (That way, DSKHND has all of the info. / it needs regardless of media type.) / / Upon entry: / / AC = block # to read/send / /---------- PUTBLK, XX / compute track & sector for block # DCA T2 / save the block number DCA T1 / initialize counter for division TAD (SCTABL) / pointer to the sector table DCA T3 / ... / / compute the track # / / TRACK # = [ (BLOCK#/(SECTORS per TRACK)) + 1 ] / / and / / compute the sector # / / SECTOR # = [ REMAINDER OF DIVISION FOR TRACK # / AS AN OFFSET INTO THE SECTOR TABLE ] / / TAD T2 / restore ... / loop to divide the block number by 10 PUTBL0, TAD (DIVIZR) / SPA / skip if: not done JMP PUTBL1 / division complete ISZ T1 / counter SZA / JMP PUTBL0 / continue ... SKP / Remainder is 0. PUTBL1, TAD (-DIVIZR) / Restore the remainder. TAD T3 / offset into the sector table DCA T3 / save TAD I T3 / and get the sector # CDFMNU / MENU field. DCA I (CMDBLK+RXQSEC) / set the sector # /M003 CDFMYF / MY field. TAD T1 / get result of division IAC / add 1 CDFMNU / MENU field. DCA I (CMDBLK+RXQTRK) / set the track # /M003 CDFMYF / back to my-field TAD T2 / block # to read. CIFMNU / Map code. JMS I (RDFIO) / read the block RXEPR+4000 / physical (8-bit) read SPA CLA / skip if: no error JMP DSKERR / report the error TAD (HMCODE / get 1st block # of Z80 code /A004 CIA / negate /A004 TAD T2 / add in requested block # /A004 SZA CLA / skip if 1st block of Z80 code /A004 JMP PUTBLX / else bypass further checking /A004 TAD XPUFLG / is it an XPU? /A004 SZA CLA / no, just continue /A004 JMS CHPORT / yes, go change the port assignments /A004 / & masks in the 1st block of code /A004 PUTBLX, TAD (BUFADR-1) / pointer to start of buffer area /M004 DCA X0 / .... TAD (-1000) / counter ( 512 8-bit bytes ) DCA T1 / .... PUTBL3, CDFTXT / data field of data to send to APU TAD I X0 / get a word CDFMYF / back to my-field AND P377 / mask to 8-bit JMS SNDAPU / send word to APU ISZ T1 / bump the count JMP PUTBL3 / loop for all JMP I PUTBLK / return DIVIZR=-12 / 10 sectors/track ( 5.25 inch disk ) /---------- PAGE / This routine finds the length of the next word in the word list, if it / will fit on the current, return to the caller. If the word will not / fit on the current line, set the cursor to the beginning of the next / line and return. FNDLNXTWRD, XX DCA T3 / reset word length count TAD X0 / set up our own pointer to the word list DCA X1 / FNDLN1, TAD I X1 / get a char TAD (-ECSPC) / is it a space? SNA CLA / skip if: not a space JMP FNDLN2 / found the end of a word / ISZ T3 / bump the word char count JMP FNDLN1 / loop for more / / found the end of the word, now see if it will fit on the current line / FNDLN2, TAD T2 / current column # TAD T3 / plus length of next word TAD (-120) / compare to max. # of chars. SMA SZA CLA / skip if: next word fits on current line JMP FNDLN4 / next word won't fit on this line / FNDLN3, TAD T3 / make word length negative for counter CMA DCA T3 / TAD ROW / insert this word into the word buffer TAD T2 IAC DCA I X3 / row and column number AC0001 TAD X0 DCA I X3 / pointer to beginning of word / JMP I FNDLNXTWRD / return to caller / FNDLN4, DCA T2 / reset the column number / CIFTXT JMS I (CALIOA) CURSTR / erase to end of line and 1600 / position the cursor to next row NOP / AC4000 / adjust row number we're displaying on DCA ROW / JMP FNDLN3 / return / This routine moves the highlighted attributes on the correct word list ARRMOV, XX / return address SMA CLA / skip if: removing hi-lite from word TAD (SNL-SZL) / hi-liting new word TAD (SZL) / removing hi-lites DCA STATT1 / set up routine properly JMS STATTR / set modes for current word JMS SETRV / set reverse video TAD WDOFST / word number to modify CLL;RAL / multiply count by 2 TAD (WDTABLE) DCA SPLINC / pointer to line and column number TAD I SPLINC SPA CLA / skip if: positive, line 16 AC0001 / negative, line 17 TAD SIXTEN DCA LINE / line number of first word TAD I SPLINC AND P3777 DCA COL / column number of first word TAD SPLINC IAC DCA WRD / pointer to address of start of first word / PUTCHR; ESC / output an escape to the terminal CIFTXT JMS I (CALIOA) TXTSTR LINE, .-. / address of line number COL, .-. / address of column number / AC7777 TAD I WRD / set up a pointer to the word DCA X4 / ARRMO2, TAD I X4 / get a char DCA TMPWRD / save to output TAD TMPWRD TAD (-ECSPC) / is it a space (end of word)? SNA CLA / skip if: not a space JMP ARRMO3 / end of word / TAD TMPWRD JMS OPTCHR / output the char JMP ARRMO2 / loop for more / ARRMO3, JMS CLRRV / clear reverse video / JMP I ARRMOV / return to caller / SPLINC, 0 / line & column number of a word / if bit 0 on: line 16 / if bit 0 off: line 17 CHKATR, XX / return address JMS CLRRV / clear all attributes JMS SETRV / set reverse video TAD DISATR / attribute of the word in error AND (200) / check for bold SZA CLA / skip if: no bold JMS STBOLD / bold the spaces, also JMP I CHKATR / return to caller /---------- / / SPOTCR - SPOT the CuRsor for input / /---------- SPOTCR, XX CIFTXT / JMS I (CALIOA) / position cursor for input PCURSTRING / 0000 / line,column NOP / JMP I SPOTCR / return /----------- / / CORCHK - CORrector CHecK - see if the Corrector has been activated /A002 / /----------- CORCHK, XX /A002 TAD CORACT / is the Corrector active /A002 SZA CLA / skip if it isn't (take normal return) /A002 ISZ CORCHK / else bump up return address /A002 JMP I CORCHK / return /A002 SCTABL, / sector table ( 5.25 inch disk ) 1;3;5;7;11 2;4;6;10;12 /---------- PAGE / This routine adjusts the cursor pointer to the correct word line and / hands off control to the routine which will paint the line properly. MOVHILYT, MQA / restore AC, = +/- (1) DCA SAVAC / save the AC / AC7777 / clear attributes JMS ARRMOV / clear the bold attribute from the current wrd / TAD SAVAC / restore the AC TAD WDOFST / modify current offset into correct word table SPA / skip if: moving to the right JMP FSTLST / set to last word in line MOVHI1, DCA WDOFST / update offset pointer / TAD (WDTABLE) / pointer to start of table CIA / TAD X3 / pointer to end of table CLL RAR / divide by two CIA TAD WDOFST / are we beyond the end of the table? SMA SZA CLA / skip if: within bounds of table JMP GETMOR / at end of list, see if there are more / MOVHI2, TAD LEVEL / which line are we on? SZA CLA / skip if: on correction list line JMP MOVHI3 / requested more words from the menu line AC0001 / set bold JMS ARRMOV / hi-lite the selected word / MOVHI3, JMS SPOTCR / position the cursor for input JMP MNUINP / wait for more input /----- / / Hi-lited word was the first word in the corrections list, and / the left arrow key was struck, position the hi-lite to the last / word in the list. / /----- FSTLST, CLA / Dirty AC upon entry TAD (-WDTABLE) / Pointer to start of table TAD X3 / Pointer to end of table CLL RAR / Divide to get number of words JMP MOVHI1 / Return to update WDOFST / / / / GETMOR, JMS SPOTCR / position the cursor for input / TAD RTNSTS / get the return status SNA CLA / skip if: no more words available JMP MORE / more words, get them. / / no more corrections GET0, DCA WDOFST / wrap to start of correction list JMP MOVHI2 / hi-lite first correction / GETM0, TAD (PCNXWD) / get next possible word code JMS SNDAPU / / GETMO0, JMS GETAPU / wait for start-of-word -17 / Time-out wait maximum - 15 seconds. PCSTWD;GETM00 / got it.. 0 / all others are fatal GETM00, TAD CURLSZ / save the length of the correct word list DCA HLDSIZ / .... JMS GETWDS / get more words AC0001 / rtn1 - no more correction available DCA RTNSTS / rtn2 - more corrections available JMS DISWRD / display the correct word line TAD HLDSIZ / restore the saved length of the list CIA / compare to TAD CURLSZ / the current length SZA CLA / skip if: we didn't get more words JMP MOVHI2 / hi-lite first new word CIFTXT / JMS I (CALIOA) / Display ENDCOR / no more corrections 2700 / NOP / AC7777 / bump word pointer back TAD WDOFST / .... JMP GET0 / didn't get any more words / / HLDSIZ, 0 / temp storage SAVAC, 0 / save the AC upon entry /---------- / / SCRNINIT - This routine sets up the initial screen display prior / to the start of the corrector portion of the feature. / / 1) Display the document name. / 2) Delimit the scrolling region by solid lines. / 3) Display the main menu line. / 4) Set up the scrolling region to range from lines 3 to 13. / 5) Pass control to the Main Scrolling Loop. / /---------- SCRNINIT, XX / save callers return address RDF / Get return field. TAD CIDF0 / Make a return CIF CDF instruction. DCA SCRNXT / save for the exit. CDFMYF / Map our field for the duration of our stay. JMS SETABS / Set screen orgin mode to ABSOLUTE. JMS DISDOCNAME / display and save document name JMS SOLIDLINE / paint the solid lines TAD INEDIT / Are we currently in edit mode? SZA CLA / Skip if no. Paint just paint menu line. JMP SCRNI1 / Jmp if currently editting. JMS MNUPNT / Paint the menu line. JMP SCRNI2 / Merge below to finish up screen initialization. SCRNI1, JMS EFXMUP / Display 'editting' message. SCRNI2, JMS SETRGN / set up the scrolling region for the / document being corrected / SCRNXT, XX / Return CIF CDF goes here. JMP I SCRNINIT / return to caller SETLDB, XX CDFMNU TAD I (MUBUF+MNFMAT) / Get format word /A004 AND (MNFM3X) / Mask out 'British dictionary' bit /A004 SZA CLA / Skip if NOT British /A004 AC0001 / Set AC=1 if British /A004 IAC / AC=1 American, AC=2 British /A004 TAD I (MUBUF+MNPULD) / Add in external processor loaded word /A004 DCA I (MUBUF+MNPULD) / & save it with new settings /A004 TAD I (MUBUF+MNFMAT) / Get format word again /A004 CDFMYF / Back to current field. AND (MNFM3X) / Mask out 'British dictionary' bit /A004 SZA CLA / Skip if NOT British /A004 TAD (110) / British ramload starts at American+110/M013 TAD RAMLST / Add start of AMerican ramload /A004 DCA RAMLST / & save new start /A004 JMP I SETLDB /---------- PAGE /---------- / / DISDOCNAME - / / This routine will display the document (name & number) / being corrected, centering it on the top line of the screen. / /---------- DISDOCNAME, XX / return address / CIFTXT JMS I (CALIOA) / CLREOS / erase the screen 0 / line to start clearing from NOP / (filler) / / See if we are dealing with the user /A017 / dictionary. If we are exit w/o /A017 / displaying the file name /A017 TAD INIUSR / Get SC/LU/UD indicator /A017 SMA CLA / Skip on SC /A017 JMP DISDO4 / LU or UD - just exit /A017 / CDFMNU /***** / data field to menu TAD I (MUBUF+MNDRV) / Get drive #. DCA DOCDRV / save for IOA. TAD I (MUBUF+MNDOCN) / Get document #. DCA DOCNUM / save that too. AC7777 TAD I (MUBUF+MNFNAM) / set up a pointer to the filename CDFMYF /***** / back to my field DCA X1 / and save the pointer TAD X1 / ... DCA X2 / and save a copy DCA T1 / initialize a counter for length of word / The following 2 routines position the cursor so that the / document name will be centered on the screen / First, find the length of the document name / DISDO1, CDFMNU /***** / data field to menu TAD I X1 / CDFMYF /***** / back to my field SNA CLA / skip if: have not found end of filename JMP DISDO2 / found end of name, exit ISZ T1 / bump counter JMP DISDO1 / and continue / / T1 now contains the length of the word, get the width of the screen / and find the starting location for the paint of the name / / Due to manual wide screen mode spell code cannot enter wide screen /A017 / so the following lines were extraneous & were deleted to make room /A017 / DISDO2, /d017 CDFEDT /***** / edit field /d017 TAD I (SPLTFL) / wide screen? /d017 CDFMYF /***** / my-field /d017 SZA CLA / skip if: normal screen /d017 TAD (32) TAD (45) DCA T2 / pointer to center of screen / TAD T1 / get document name length CLL RAR / divide length by 2 CIA / make negative TAD T2 / subtract from mid-screen DCA DISD2A / set up position to start paint from CIFTXT JMS I (CALIOA) / ... PCURSTRING / ... DISD2A, .-. / ... NOP / (filler) CIFTXT / Display '(drive.doc) ' JMS I (CALIOA) / ... DISTXT / text string. DOCDRV, 0 / drive # of the document. DOCNUM, 0 / document # of the document. DISDO3, / now display the document name CDFMNU /***** TAD I X2 CDFMYF /***** SNA JMP DISDO4 / JMS OPTCHR / output the character / JMP DISDO3 / continue with next / DISDO4, JMP I DISDOCNAME / return to caller /---------- / / SOLIDLINE - / / This routine will paint the 2 lines delimiting the scrolling region. / /---------- SOLIDLINE, XX / callers return address JMS GRAFXS / switch to grafix / JMS SETCNT / set up counter for width of screen / CIFTXT JMS I (CALIOA) PCURSTRING 100 / position cursor to start of line 2 NOP / (filler) JMS LOOPS / display first line / JMS SETCNT / set up counter for width of screen / CIFTXT JMS I (CALIOA) PCURSTRING 1300 / position cursor to start of line 14 NOP / (filler) JMS LOOPS / display second line / JMS GRAFXC / restore SI / JMP I SOLIDLINE / return to caller / / routine to print horizontal line (scan 5) to screen / LOOPS, XX / return address LOOPA, TAD (161) / horizontal line, (scan 5) JMS OPTCHR / print the char ISZ T1 / bump the character count JMP LOOPA / loop for more JMP I LOOPS / return to caller / / routine to set up counter for width of screen / SETCNT, XX CDFEDT / from edit field. TAD I (SPLTFL) / wide screen? CDFMYF / Back to current field. SZA CLA / skip if: narrow screen TAD (64) TAD (120) CIA DCA T1 / counter for number of prints JMP I SETCNT / return /---------- / / RVBKGRND - / / Reverse video the background of the menu line. / /---------- RVBKGRND, XX / return address JMS SETRV / set reverse video mode / CIFTXT JMS I (CALIOA) / position the cursor on the menu line PCURSTRING 2000 NOP / (filler) / TAD MENULEN / length of menu line (-62) DCA T1 / set up as a counter / TAD (ECSPC) / output spaces JMS OPTCHR / ... ISZ T1 / bump the character count JMP .-3 / loop 'till done / JMS CLRRV / clear reverse video / JMP I RVBKGRND / return to caller / MENULEN, -62 / minus the length of the menu line /---------- / / MNUPNT - Paint the initial menu line / /---------- MNUPNT, XX / JMS RVBKGRND / reverse video the background of the menu line AC7777 / DCA OFFSET / clear display at start-up JMS MENULINE / display the menu line JMP I MNUPNT / return /---------- PAGE HELPR, / replace BLANK / screen #1 HLPR1;HYLTWD HLPR2;NOP BLANK BLANK HLPR4;FTMET HLPR5;ULARAK BLANK BLANK BLANK EXIT1;EXIT10 0 0 / HELPE, / edit BLANK / screen #1 HLPE1;HYLTWD HLPE2;NOP HLPE3;NOP BLANK HLPE4;FTMET HLPR5;ULARAK BLANK BLANK BLANK EXIT1;EXIT10 0 0 / HELPI, / ignore BLANK / screen #1 HLPI1;NOP HLPI2;NOP BLANK HLPI3;FTMET HLPR5;ULARAK BLANK BLANK BLANK BLANK EXIT1;EXIT10 0 0 / HELPC, / continue BLANK / screen #1 HLPI1;NOP HLPC1;NOP BLANK HLPC2;FTMET HLPR5;ULARAK BLANK BLANK BLANK BLANK EXIT1;EXIT10 0 0 / HELPF, / finish BLANK / screen #1 HLPF1;NOP BLANK BLANK HLPF3;FTMET HLPR5;ULARAK BLANK BLANK BLANK BLANK EXIT1;EXIT10 0 0 / HELPH, / help BLANK / screen #1 HLPH1;DSPAID HLPH2;NOP BLANK HLPH3;DSPAID HLPH4;HOUMIF HLPH5;NOP BLANK HLPH6;NOP HLPH7;NOP EXIT2;EXIT10 0 BLANK / screen #2 HLPH8;NOP BLANK HLPH9;NOP HLPH90;NOP HLPH0;ULARAK HLPH10;NOP BLANK HLPH11;NOP BLANK EXIT2;EXIT10 0 BLANK / screen #3 HLPH12;NOP BLANK HLPH13;NOP HLPH14;NOP HLPH15;NOP HLPH16;NOP HLPH17;NOP BLANK BLANK EXIT2;EXIT10 0 BLANK / screen #4 HLPH18;HOUMIF HLPH19;HOUMIF BLANK HLPH20;HOUMIF HLPH21;NOP HLPH22;NOP BLANK HLPH24;NOP BLANK EXIT1;EXIT10 0 0 / HELPK, / corrections list BLANK / screen #1 HLPK1;NOP BLANK HLPK2;NOP HLPK3;ULARAK BLANK HLPK4;LABRKT HLPK5;NOP BLANK HLPK7;NOP EXIT1;EXIT10 0 0 / HELPL, / editing the line BLANK / screen #1 BLANK HLPL1;EDIT BLANK HLPL2;OCASD HLPL3;OCASD HLPL4;NOP HLPL5;LABRKT BLANK BLANK EXIT2;EXIT10 0 BLANK / screen #2 HLPL9;NOP BLANK HLPL6;TODELA HLPL7;TODELA HLPL8;GOLD HLPL10;CHRWRD HLPL11;CHRWRD HLPL12;CHRWRD HLPL13;CHRWRD EXIT2;EXIT10 0 BLANK / screen #3 HLPL9;NOP BLANK HLPL14;CHRWRD HLPL15;CHRWRD HLPL16;NOP HLPL17;NOP HLPL18;NOP BLANK BLANK EXIT1;EXIT10 0 0 / HELPTABLE, / table of help menus HELPR / replace HELPE / edit HELPI / ignore HELPC / continue HELPF / finish HELPH / overwrite / HELPK / correct list HELP2TABLE, / table of help menus at second level XX / not used HELPL / editing line / / / This buffer area holds the word as it's scanned by the high level scanner. / WRDBUF, / ZBLOCK MAXCHR / X=. / Since WRDBUF is only in use during high level scan & since WDLIST / is only in use after an error has been detected, both use the same / buffer (WDLIST is the larger). / / This buffer contains the correct word choices. The buffer has a hard / space coded at the end to make sure the buffer always ends with a space. / WDLIST, ZBLOCK BUF0LEN X=. ECSPC X=. / / This buffer is built as new words are received. The reason for the / separate buffer is for moving the cursor and the attributes along / the correct word list. The buffer is set up in the following form: / / line,column;address / WDTABLE, ZBLOCK BUF1LEN X=. /----------- / /SNDAPU - Sends a character/code to the APU. / / /CALL: JMS SNDAPU AC=character to send. / /Return AC=0 & character is sent. All waiting done by this routine. / /------------- IFDEF DEBUG < / Assemble this version to debug across comm line. SNDAPU, XX / Entry point. JMP SNDGO / Merge below. SNDWT, CIFSYS / The APU is busy. Let others run. JSWAP / & then try again. SNDGO, CIFSYS / try sending the character. HS2OU / for now use the host line. JMP SNDWT / Busy. wait & try again. JMP I SNDAPU / Return to caller when done. > / IFDEF DEBUG IFNDEF DEBUG < / Assemble this version to run on the Z80. SNDAPU, XX SNDAP0, MQL / put contents of AC into MQ, clear AC TAD (-20) / iteration count. DCA XFRCNT / save for izzy. TAD (XRBIT) / transfer ready bit MQA / OR MQ back in SNDAP1, Z80IF / Skip on APU inbound read complete flag, JMP SNDAP2 / not ready SNDAPX, Z80WR / send the data out /M004 CLL CLA / AC is dirty on return JMP I SNDAPU / return to caller SNDAP2, ISZ XFRCNT / Bump iszy count. JMP SNDAP1 / count not zero yet. try again. DCA XFRCNT / Save character to send. JMS WTLOOP / Check for time-out. SKP / No time-out yet. continue below. JMP TYMOUT / Report time-out error. TAD XFRCNT / Get character to send. JMP SNDAP0 / restart... XFRCNT, 0 / Iteration count. > / IFNDEF DEBUG /----------- / / GETZ80 - Gets a character/code from the APU. / / / CALL: JMS GETZ80 / / Return: / AC=character sent from the APU. / All waiting done by this routine. If the time limit / that has been set for the particular 'GET' is / exceeded, this routine will hand off to the DYSKER / routine to display the error message. / /------------- IFDEF DEBUG < / Assemble this version to debug across comm line. GETZ80, XX / Entry point. GETAP1, CIFSYS / for now use HS2IN. HS2IN / ... JMP GETAP2 / MQL / save byte / CLA / to be sure... / DCA TIMES / clear wait loop flag / MQA / restore... JMP I GETZ80 / return to caller w/ return byte. GETAP2, JMS WTLOOP / Let other's run. JMP GETAP1 / rtn1 - then try again (more time to wait). JMP TYMOUT / rtn2 - time-out error. > / IFDEF DEBUG IFNDEF DEBUG < / Assemble this version to run in the same machine. GETZ80, XX / Entry point. GETAP0, TAD (-200) / iteration count. DCA XFRCNT / save for loop count. GETAP1, Z80SF / wait for flag JMP GETAP2 / not ready.... GETAPX, Z80RS / get a byte /M004 GETAPY, AND P377 / mask off data I/O channel #. /M004 JMP I GETZ80 / return to caller w/ return byte. GETAP2, ISZ XFRCNT / Bump iszy count. JMP GETAP1 / count not zero yet. try again. DCA XFRCNT / Save character to send. JMS WTLOOP / Check for time-out. SKP / No time-out yet. continue below. JMP TYMOUT / Report time-out error. TAD XFRCNT / Get character to send. JMP GETAP0 / restart... > / IFNDEF DEBUG /---------- PAGE /---------- / / STATTR - SeT ATTRibutes / / This routine must have a location modified prior to calling. If / the correct word list is being displayed, set STATT1 up as a (SZL) / instruction. If the selected word is being hi-lited, set up STATT1 / as a (SNL) instruction. / / Disatr - location containing attributes to be appended / / |0|1|2|3|4|5|6|7|8|9|10|11| / --------------------------- / |*| |*|*|*| |*| | | | | | / --------------------------- / ^ ^ ^ ^ ^ / | | | | | / | | | | \ / | | | | ---> lower case character / | | | \ / | | | -------> bold / | | \ / | | ---------> | 00 - none / | \ | 01 - underscore / | -----------> | 10 - superscript / | | 11 - subscript / \ / ---------------> upper case first character in word ONLY STATTR, XX / return address TAD DISATR / get the attributes word AND (0600) / mask for underline and bold CLL;BSW;RTR / if underline, AC=1; if bold, L=1 DCA HOLDCH / save the AC, (in case underline) STATT1, .-. / (SZL) if setting true word mode / (SNL) if setting hi-lite on selected word JMS STBOLD / send bold escape sequence TAD MOORE / are we displaying ? SZA CLA / skip if: not JMP I STATTR / displaying , no underlines. TAD HOLDCH / restore SZA CLA / skip if: no underline JMS STUNDR / send escape sequence to set underline JMP I STATTR / return to caller / / routine to see that the <.......> text can fit on the first / line of the correct word list. if it can, return to the / caller, otherwise, position the cursor to the start of the / second line for the display. / FITITT, XX AC7777 / bump the word table pointer back TAD X3 / .... DCA T2 / .... AC4000 / mask AND I T2 / get the line # of the last word DCA LNCLMR / .... TAD I T2 / line, column number AND P3777 / column # DCA T1 TAD X3 / pointer to the word table DCA T2 / .... AC7777 / TAD I T2 / index pointer to start of last word DCA X2 / a pointer to the last word on the first line / loop TAD I X2 / get the next char in the word TAD (-ECSPC) / a space? SNA CLA / skip if: not a space, end of word JMP FITIT0 / found end of word ISZ T1 / bump the column number JMP .-5 / find end of word / 'till "space" found FITIT0, AC0001 / 1+ TAD T1 / column # of last char TAD LNCLMR / combine with line # of last word DCA LNCLMR / and save TAD T1 / restore... TAD M107 / compare to the max length allowed SPA SNA CLA / skip if: will not fit JMP FITIT1 / continue CIFTXT / JMS I (CALIOA) / CURSTR / erase to end of line and 1600 / bump cursor to next line for display NOP / TAD (4002) / Set up line/col # for (2nd line,col 1) DCA LNCLMR / ... FITIT1, TAD (ECSPC) / 'space' JMS OPTCHR / output a 'space' at the end of the list TAD RTNSTS / get the return status SZA CLA / skip if: more corrections available TAD (NOMORDIS-MORDIS)/ no more corrections, display TAD (MORDIS) / more corrections, display DCA DISMO1 / set up for display JMS DISMORE / and display the text / JMP I FITITT / return /---------- / / WTLOOP - Wait Loop / / Upon entry: / / TIMER should be set up to indicate the / number of seconds to wait. / / CALL: JMS WTLOOP / rtn1 / have not reached maximum time. / rtn2 / end of wait time reached. / /---------- TIMER, 0 / number of seconds to wait (negative form) TIMER1, 0 / current seconds TIMES, 0 / 0 if first time thru/wait WTLOOP, XX RDF / get return field TAD CIDF0 / make a return CIF CDF instruction DCA WTLOO4 / save for the exit CDFSPL / TAD UPDCLK / Should we update the clock? SNA CLA / Skip if: yes JMP WTLOO0 / don't update the screen clock CIFMNU / Update the time & date display. JMS I (TIMDSP) / ... WTLOO0, TAD TIMER / are we done before we start? SNA CLA / skip if: more time to wait JMP WTLOO3 / waited long enough TAD TIMES / have we been here before SZA CLA / skip if: first time thru JMP WTLOO1 / been here before, don't re-init time CDFSYS / sys-field TAD I (CLOCK+2) / get the seconds CDFMYF / back to my field DCA TIMER1 / save for compares AC0001 / set to indicate first time thru DCA TIMES / ... WTLOO1, CIFSYS / JSWAP / wait for others / CDFSYS / TAD I (CLOCK+2) / get current seconds CDFMYF / CIA / negative for compare TAD TIMER1 / to saved tenths SNA / skip if: change JMP WTLOO4 / no change in time, exit CIA / Restore to new value. TAD TIMER1 / ... DCA TIMER1 / ... /D005 TAD UPDCLK / Get the update clock flag /D005 SNA CLA / Skip if: set /D005 JMP WTLOO2 / Not set /D005 CIFTXT / Set... /D005 JMS I (CALIOA) / Display... /D005 WRKING / Working... /D005 1732 / /D005 1732 / WTLOO2, ISZ TIMER / bump our counter NOP / in case time goes to zero JMP WTLOO4 / exit WTLOO3, DCA TIMES / clear first time thru flag ISZ WTLOOP WTLOO4, .-. / return CIF CDF instruction JMP I WTLOOP / return PORTBL, 11 / XPU status port 10 / XPU data port 100 / XPU output ready mask 1 / XPU input available mask 100 / XPU output ready XOR mask 0 / end of table /---------- PAGE /**************************************************************************** / OVTST Entry point for the TSTCHR routine which drops through /a019 / Start Dead Key Sequence characters /a019 /**************************************************************************** OVTST, XX / The required return address is here /a019 DCA CHAR / The character is placed here /a019 TAD OVTST / Get the required return address /a019 DCA TSTCHR / Pass it to the TSTCHR routine /a019 TAD CHAR / Get the character back /a019 TAD (-ECSTOV) / Test for Start-of-Dead /a019 SZA CLA / Is it Start-Of-Dead? /a019 JMP TSTCND / No, enter the TSTCHR routine /a019 JMP I OVTST / Yes, return as an OTHER character /a019 /**************************************************************************** / LODXPU has been blasted out to join LODAPU /a019 /**************************************************************************** /---------- / / LODXPU - LOad the XPU / / This code is branched to from LODAPU to perform the / the XPU specific stuff involved in loading the Z80. / Control is returned to a merge re-entry point in LODAPU / /---------- /d019 LODXPU, / Z80 address space on the XPU is /d019 / 20000-3FFFF hex (on even byte bounds) /d019 / Segment register=2000h to address this space /d019 JMS MMCMD / Send monitor command /d019 1054 / =22Ch=Write memory segment(MS) register /d019 CLA / Low byte=0 /d019 JMS SNDAPU / Send it to the XPU /d019 TAD (40 / High byte = 20h /d019 JMS SNDAPU / Send it to the XPU /d019 JMS MMSTA / Wait for status returned from monitor /d019 JMS MMCMD / Send monitor command /d019 1053 / =22Bh=Write memory offset(MO) register /d019 TAD STRTAL / Get low byte of starting address /d019 RAL / x2 since we are wrting even bytes /d019 JMS SNDAPU / Send it to the XPU /d019 TAD STRTAH / Get high byte of starting address /d019 RAL / x2 since we are wrting even bytes /d019 JMS SNDAPU / Send it to the XPU /d019 JMS MMSTA / Wait for status returned from monitor /d019 /d019 LODXPN, /d019 CIFMNU / Update the date & time display. /d019 JMS I (TIMDSP) / ... /d019 /d019 JMS MMCMD / Send monitor command /d019 5 / =Write block on even bytes /d019 TAD STRTBK / Get block # to write /d019 JMS PUTBLK / & go write it /d019 TAD (BKDNBIT) / Set BlocK transfer DoNe bit into AC /d019 X80ST / & write it to XPU status register /d019 CLA / Clear garbage left in AC /d019 JMS MMSTA / Wait for status returned from monitor /d019 /d019 ISZ STRTBK / bump to next block /d019 ISZ NMBRBK / bump block count /d019 JMP LODXPN / more blocks to load /d019 /d019 / until: all blocks loaded /d019 /d019 / Now start up the XPU & wait for the done code. /d019 /d019 /d019 JMS MMCMD / Send monitor command /d019 1074 / =23Ch=write z80 PC /d019 TAD STRTAL / Get low byte of starting address /d019 JMS SNDAPU / Send it to the XPU /d019 TAD STRTAH / Get high byte of starting address /d019 JMS SNDAPU / Send it to the XPU /d019 JMS MMSTA / Wait for status returned from monitor /d019 /d019 JMS MMCMD / Send monitor command /d019 11 / =9h=startup Z80 /d019 /d019 JMS MMSTA / Wait for status returned from monitor /d019 JMP LODAPM / Merge back with original stream /----------- / / MMSTA - MiniMonitor STAtus return / /----------- MMSTA, XX TAD (NOP) / Get a "NOP" into AC DCA GETAPY / & put into the "GETAPU" routine to prevent / masking out the high order bits of a valid / monitor response JMS GETAPU / Get output from XPU monitor -5 / Time out after 5 seconds 7400;MMSTAC / =F00h=Normal completion of a monitor command 0 / Any other is fatal MMSTAC, TAD (AND P377) / Get the 'mask to 8 bits' instruction into AC DCA GETAPY / & restore it into the "GETAPU" routine JMP I MMSTA / & Return /---------- / / CHPORT - CHange Z80 PORT assignments for the XPU /A005 / / Called once when loading the 1st block of Z80 code into the XPU / /---------- CHPORT, XX AC0002 / Just return if we are reading the dictn/A018 TAD FILNUM / /A018 SNA CLA / /A018 JMP I CHPORT / /A018 TAD (PORTBL-1) / Point to beginning of XPU port assignment table DCA X0 / & save for auto-index TAD (BUFADR+2) / Point to address in Z80 code where port / assignments are stored (START + 3) DCA X1 / & save for auto-index CHPOLP, CDFMYF / Back to our field TAD I X0 / Pick up entry in table SNA / Skip if there was an entry JMP I CHPORT / AC=0 End Of Table Return CDFTXT / Change to our buffer field DCA I X1 / & store into corresponding address in Z80 code JMP CHPOLP / Go get next entry UPDTPD, TAD (PCADNW) / Get command to add to new word list /A008 DCA IOPSHNW / & store in IOPSHUN routine. We are /A008 / clearing new word list, so adding to /A008 / it will be ok again. /A008 BKPPTR / GET TO BEGINNING OF FILE /A008 SKP /A008 JMP .-2 /A008 GETCHR / ADVANCE PAST RULER /A008 NOP / /A008 CLA CLL / /A008 TAD (-12) / 10 SEC. TIMEOUT /A008 DCA TIMER /A008 DCA TIMES /A008 TAD (PCRTNW) / Tell Z80 to ReTurn the New Word list /A008 JMS SNDAPU /A008 UPDTNX, CLA / Clear possible dirty AC JMS GETAPU / Get the response /A008 -12 / 10 sec. timeout /M010 PCENNW;SPLXIT / End of list - exit spell /A008 PCSTWD;GETNEW / Start of word - get the word /A008 0 / All others fatal /A008 GETNEW, JMS GETZ8C / Get the next character /A008 TAD (-PCENWD) / Check for end of word /A008 SNA / Skip if: NOT end of word /A008 JMP GETEND / End of word - put EOL /M010 TAD (PCENWD) / Restore the original character /A008 INSCHR;ADVPTR;NOP / & put it to file. /A008 JMP GETNEW / Loop for next char /A008 GETEND, TAD (LF) / Put LF to file /M010 INSCHR;ADVPTR;NOP / /M010 JMP UPDTNX / Get next word /A010 /**************************************************************************** / TSTLIN Moved here to make room in page 200 /a019 /**************************************************************************** TSTLIN, XX / Routine to see if word wrapped to next line. CDFEDT / Map edit field. TAD I (SCRLCT) / (get lag counter). CDFMYF / Back to our field. SNA / Skip if we bumped a line. JMP TSTLNX / return if still on same line. JMS UNDOLG / Undo screen lag (via FXSCRL). TAD WRDSIZ / Backup to the start of the word. CIA / ... MOVCHR / posn to start of word. CDFEDT / Map edit field. TAD I (SCRLCT) / See if word still starts on same initial line. TAD LINCNT / compare lag count to line count. SPA SNA CLA / Skip if now we're fewer lines. (accounted for JMP MFIXUP / by wrapping text when modified). JMP if OK. TAD I (SCRLCT) / Reset # of lines to start of word. CIA / ... DCA LINCNT / .... TAD I (CURSOR) / Save CURSOR posn of start of word. DCA SCURSR / ... TAD I (CURPTR) / Save text ptr to start of word. DCA SCURPT / ... TAD SCURSR / Reset start of line pointer. DCA SLCRSR / (cursor posn). DCA NEWLIN / Reset 'new line' indicator since start of line / pointers already initialized. MFIXUP, CDFMYF / back to our field. TAD WRDSIZ / Get distance to where we were. MOVCHR / Go there. TSTLNX, JMP I TSTLIN / Return to caller. /---------- PAGE FIELD 3 / This is the auxillary field. / note that the editor loads into 6400-7777 / of this field. Also note that several / editor routines use some of the globaly / defined temps (X0, X1, X2, T1, etc.) *200 / Start assembling code at 200. BUFADR, / Buffer for I/O starts here. CDFMYF=CDFTXT / A CDF to this field. /d015 ZBLOCK 400 / Reserve 2 pages for start of 1000 word buffer. ZBLOCK 200 / Only one page is necessary now as XPU /A015 / code has pushed the resident code up /A015 / & we need the space. /A015 /---------- PAGE /---------- / / CHKAPU - CHecK the APU / / / This routine, checks to be sure that the APU board is present. / If so, it then performs a mini-self-test to see that it is / functioning proporly. If either of these tests fail, set up / a pointer to an error message, and take the normal return to / display the error message, otherwise, take a return+1. / / / CALL: JMS CHKAPU / rtn1 / error / rtn2 / APU is present & OK / /---------- CHKAPU, XX RDF / Get return field. TAD CIDF0 / ... DCA CHKAP3 / Save for the return trip home. AC0001 / Set flag allows for updating of screen clock CDFSPL / Spell field DCA I (UPDCLK) / Update clock flag CDFMNU / See if APU has been loaded already. TAD I (MUBUF+MNOPTN) / Get options word. AND (MNRX7X) / See if the XPU bit is set. /M004 DCA XPUFLG / & save for later use /A004 TAD I (MUBUF+MNPULD) / Get external processor loaded word /A004 AND (MNRX0X+MNRX1X) / Mask out American/British loaded bits /A004 SZA CLA / Skip if both bits are 0...APU not loaded./M004 JMP CHKAP1 / APU is loaded, so skip the self-test. CDFMYF / Now map our field. TAD XPUFLG / See which device to start up /A004 SZA CLA / Skip if it is APU (XPUFLG NOT set) /A004 JMP CHKXPU / Else go to XPU start up routine /A004 Z80LI / No APU interrupt. (AC=0) JMS WAKAPU / Start the APU and wait for it to answer JMP APUINC / rtn1 - APU incompatible or failure JMP APUBAD / rtn2 - APU failure JMS WAKAPU / Reset the APU and wait for another flag JMP APUINC / rtn1 - APU incompatible or failure JMP APUBAD / rtn2 - APU failure / Test the data communications channels used for all data / and command I/O. Send a byte of data to the APU, which / will echo the byte back with a walking '1' in the address / field, until a 'command' byte is received. AC4000 / Zero on right, walking '1' on left. CHKAPA, DCA TEMP2 / Store in temp2. TAD TEMP2 / Restore. AND P377 / 8-bit mask. SNA CLA / First time through? JMP CHKAPC / Don't wait first time through. TAD (-200) / Set maximum number of retries. DCA INTTIM / Into the internal timer. CHKAA1, CLL CLA / Z80IF / Wait for inbound read complete flag. SKP / Not ready, test for timed out. JMP CHKAPC / ready, continue test ISZ INTTIM / Bump our internal timer (counter). JMP CHKAA1 / Continue waiting. JMP APUBAD / Timed out. CHKAPC, TAD TEMP2 / Restore temp2. AND P377 / 8-bit mask. MQL / AC into MQ TAD (XRBIT) / Transfer ready bit. MQA / 'OR' MQ back into AC. Z80WR / Put out temp2. CLL CLA / Dirty AC after call. TAD (-200) / Set maximum number of retries. DCA INTTIM / Into the internal timer (counter). CHKAC1, CLL CLA / Z80SF / Test the inbound data ready flag. SKP / Not ready, test for timed out. JMP CHKAPD / Ready, continue. ISZ INTTIM / Bump the timer. JMP CHKAC1 / Continue to wait. JMP APUBAD / Timed out, error. CHKAPD, Z80RS / Get the data from the APU. CIA / Make negative for compare. TAD TEMP2 / To the expected value SZA CLA / Skip if: interface OK, so far. JMP APUBAD / Interface test failed. TAD TEMP2 / Get back old expected value. IAC / Bump data portion up by 1. AND P377 / Mask out upper bit. SNA / Skip if: more testing to do. JMP CHKAPZ / Finished this test. MQL / New data value into MQ CLA / To be sure! TAD TEMP2 / Old value for rotate. AND (7400) / Just these 4-bits. CLL RAR / Rotate right 1-bit. DCA TEMP2 / Save as new temp2. TAD TEMP2 / Restore. TAD (-200) / Have we rotated too far? SZA CLA / Skip if: too far. JMP .+3 / Not too far, TEMP2 is OK. AC4000 / SKP / TAD TEMP2 / Here is rotate was OK. MQA / 'OR' in data stored in MQ JMP CHKAPA / Loop ... / Now, let the APU do its RAM test. First, send any command. CHKAPZ, TAD (CDBIT!XRBIT) / Turn on command bit. Z80WR / Put out temp2. CLL CLA / Dirty AC after call. TAD (-10) / Wait for 10 seconds. CDFSPL / data field to spell. DCA I (TIMER) / ... CDFMYF / Back to my field. CHKAP0, CIFSPL / Instruction field to spell. JMS WTLOOP / For RAM test to complete. SKP / rtn1 - not finished wait. JMP APUBAD / rtn2 - wait completed. Z80SF / Skip on device falg. JMP CHKAP0 / Not ready. Z80RS / Get the data from the APU. TAD (-7401) / Should be 'f01' (hex). SZA CLA / Skip if: OK. JMP APUBAD / Failed RAM test. / Successfully completed the APU Self-Test. CHKAP1, ISZ CHKAPU / bump on success return CHKAP2, /D004 CLA / Clear update clock flag CDFSPL / Spell field DCA I (UPDCLK) / Clear update clock flag /M004 TAD XPUFLG / See if we need to put patches in main /A004 / spell code for XPU. /A004 SZA CLA / Skip if APU /A004 JMS PATXPU / Else go do XPU patches /A004 CHKAP3, XX / Return CIF CDF instruction goes here. JMP I CHKAPU / return to caller INTTIM, 0 / Internal timer (counter). TEMP2, 0 / Temp storage for the I/O tests. /---------- PAGE /---------- / / RSTAPU - ReSeT the APU / /---------- RSTAPU, XX CLA TAD (RBIT) / get the reset bit Z80WR / RESET / / The sequence RESET/RELEASE RESET does not clear the APU outbound / data available flag, nor does it clear (entirely) the data coming / from the APU. Hence, the next 5 instructions were added to make / sure that the data available flag does get cleared, so that when / a read is issued, expected data is returned (no error condition). / /----- / Z80DF / set APU outbound data available flag Z80SF / skip on APU outbnd data avail. flg, clear it JMP .-1 / wait for flag Z80SF / just in case (H/W) NOP / / /----- / CLL CLA / clear dirty AC Z80WR / RELEASE RESET CLL CLA / clear dirty AC JMP I RSTAPU / return /---------- / / WAKAPU - Wake up the APU / / Reset the APU, wait for 3 seconds, and see if / we got a response back. / /---------- WAKAPU, XX JMS RSTAPU / reset the APU AC7775 / maximum of 3 seconds. CDFSPL / data field to spell DCA I (TIMER) / ... CDFMYF / back to my field WAKAP0, CIFSPL / instruction field to spell JMS WTLOOP / wait loop SKP / rtn1 - not finished wait. JMP WAKAP1 / rtn2 - wait completed - never heard / check if device 14 has signalled ... Z80SF / skip if: APU flag set JMP WAKAP0 / never heard from the APU Z80RS / get the data from the APU TAD (-7400) / make sure it's 'F00' (hex) SNA CLA / skip if: wrong response ISZ WAKAPU / good response, bump return ISZ WAKAPU / wrong response WAKAP1, CDFSPL / data field to spell DCA I (TIMES) / clear wait loop flag CDFMYF / JMP I WAKAPU / return+1 if OK, normal return otherwise. / / error detected, display appropriate error message before returning. / APUINC, TAD (INCAPU-BADAPU) / APU incompatibility APUBAD, TAD (BADAPU) / APU failure DCA APUBA1 / Set up for display CIFMNU / Do a MENU call to display the message. JMS I IOACAL / ... 0 / Display to the screen. APUBA1, .-. / Error message ptr. -2700 / arg1 ASTRNG / arg2 THREST / arg3 JMS WAITRT / Wait for a return. JMP APUBAD / Something else was typed. Repeat error. JMP CHKAP2 / normal return on error WAITRT, XX / Routine to wait for 1st input char & check it. JMP BADAP2 / Merge below. BADAP1, CIFSYS / JWAIT for a bit. JWAIT / ... BADAP2, CIFSYS / Get an input character. XLTIN / ... JMP BADAP1 / Loop & wait if none. TAD (-EDNWLN) / Return typed? SNA CLA / Skip if no. Return to repeat error. ISZ WAITRT / Take success return. JMP I WAITRT / return to caller. /----------- / / WTIDRD - WaiT for xpu Input Data ReaD flag /A005 / /----------- WTIDRD, XX AIDRD, X80IF / Skip if XPU has read input data SKP CLA / else go wait a bit JMP I WTIDRD / RETURN CIFSPL / Change to spell field JMS WTLOOP / Check for timeout, etc. JMP AIDRD / No timeout - try again JMP APUBAD / Timeout error /----------- / / WTODAV - WaiT for xpu Outbound Data AVailable flag /A005 / /----------- WTODAV, XX AODAV, X80SF / Skip if XPU has output data available SKP CLA / else go wait a bit JMP I WTODAV / RETURN CIFSPL / Change to spell field JMS WTLOOP / Check for timeout, etc. JMP AODAV / No timeout - try again JMP APUBAD / Timeout error /---------- / / RSTXPU - ReSeT the XPU / /---------- RSTXPU, XX CLA TAD (RSETBIT) X80LI / / The sequence RESET/RELEASE RESET does not clear the XPU outbound / data available flag, nor does it clear (entirely) the data coming / from the XPU. Hence, the next 6 instructions were added to make / sure that the data available flag does get cleared, so that when / a read is issued, expected data is returned (no error condition). / /----- / AC0001 /M006 X80DF / set XPU outbound data available flag /M006 X80SF / skip on XPU outbnd data avail. flg, clear it/M006 JMP .-1 / wait for flag /M006 X80SF / just in case (H/W) /M006 NOP / /M006 / /----- / CLL CLA / clear dirty AC X80LI CLL CLA / clear dirty AC JMP I RSTXPU / return /---------- / / WAKXPU - Wake up the XPU / / Reset the XPU, wait for 3 seconds, and see if / we got a response back. / /---------- WAKXPU, XX JMS RSTXPU / reset the XPU AC7775 / maximum of 3 seconds. CDFSPL / data field to spell DCA I (TIMER) / ... CDFMYF / back to my field WAKXP0, CIFSPL / instruction field to spell JMS WTLOOP / wait loop SKP / rtn1 - not finished wait. JMP WAKXP1 / rtn2 - wait completed - never heard / check if device 17 has signalled ... X80SF / skip if: XPU flag set JMP WAKXP0 / never heard from the XPU X80RS / get the data from the XPU DCA XTMP1 ISZ WAKXPU / good response, bump return ISZ WAKXPU / wrong response WAKXP1, CDFSPL / data field to spell DCA I (TIMES) / clear wait loop flag CDFMYF / JMP I WAKXPU / return+1 if OK, normal return otherwise. /---------- PAGE /--------- / / PATXPU - PATch the spell code with XPU specific IOTs, etc. / /--------- PATXPU, XX TAD (PATTBL-1) / Get address of patch table-1 DCA X0 / & save for auto-indexing PATXLP, CDFMYF / Change to our field TAD I X0 / Get address to be patched SNA / Skip if valid address (.NE. 0) JMP I PATXPU / else RETURN DCA T1 / Save address TAD I X0 / Get patch CDFSPL / Change to spell field DCA I T1 / & put in the patch JMP PATXLP / Loop back for the next PATTBL, GETAP1 ;X80SF GETAPX ;X80RS SNDAP1 ;X80IF MMCMX ;X80IF SNDAPX ;X80WR MMCMY ;X80WR XPUFLG ;1 / This signals the code in the spell field / that it is dealing with an XPU 0 /------------ / / CHKXPU - CHecK the XPU /A005 / / Branched to from CHKAPU to perform the XPU specific startup / and self-test handshaking. Takes same error path as CHKAPU / & branches back to CHKAPU on successful completion / /------------ CHKXPU, /d007 7402 / **temp** X80LI / No XPU interrupt. (AC=0) JMS WAKXPU / Start the XPU and wait for it to answer JMP APUINC / rtn1 - XPU incompatible or failure JMP APUBAD / rtn2 - XPU failure JMS WAKXPU / Reset the XPU and wait for another flag JMP APUINC / rtn1 - XPU incompatible or failure JMP APUBAD / rtn2 - XPU failure TAD (-12) / Set AC=-10 decimal. Allow 10 secs. for / completion of self-test. CDFSPL / Change data field to spell & DCA I (TIMER) / Set the timer. CDFMYF / Back to our field. JMS WTODAV / Wait for xpu to signal it has output ready /note: this code is adapted directly from the self test performed under / CP/M which waits for output but then ignores it (an error !?!?) / Probably should be an X80RS etc. here, but when in Rome .... X80WR / Send xpu anything CLA CLL / Clear garbage JMS WTIDRD / Wait for xpu to signal input data read CLA CLL / Clear garbage TAD (TIMRBIT) / Set RS.TIMR bit in XPU RSTATUS register X80ST / ... CLA CLL / Clear garbage JMS WTODAV / Wait for xpu to signal it has output ready X80RS / Get output from XPU DCA XTMP1 / & save it TAD (BKDNBIT) / Set RS.BKDN bit in XPU RSTATUS register X80ST / ... CLA CLL / Clear garbage JMS WTODAV / Wait for xpu to signal it has output ready X80RS / Get output from XPU DCA XTMP1 / & save it TAD (ATTNBIT) / Set RS.ATTN bit in XPU RSTATUS register X80ST / ... CLA CLL / Clear garbage JMS WTODAV / Wait for xpu to signal it has output ready X80RS / Get output from XPU DCA XTMP1 / & save it AC0001 / Initialize the starting pattern TEST1B, DCA XTMP2 / Save the pattern AC7776 / Set inner loop counter for 2 patterns DCA INSCNT / ... TEST1C, TAD XTMP2 / Get the pattern X80WR / Send it to the XPU CLA CLL / Clear garbage JMS WTIDRD / Wait for xpu to signal input data read JMS WTODAV / Wait for xpu to signal it has output ready X80RS / Get output from XPU DCA XTMP1 / & save it TAD XTMP2 / Get back pattern originally sent CIA / Negate it TAD XTMP1 / Add in what XPU returned SZA CLA / Skip if the same JMP APUBAD / else report error TAD XTMP2 / Get the pattern just sent CMA / Complement it DCA XTMP2 / & save the new pattern ISZ INSCNT / Update the inner loop counter JMP TEST1C / Did floating 1 - now do floating 0 TAD XTMP2 / Get the pattern CLL RAL / Shift the floating 1 once left SNL / Skip if we've been through every bit JMP TEST1B / else go do this pattern CLA CLL / Clear garbage TAD (BKDNBIT) / Tell the XPU we're finished sending data X80ST / ... CLA CLL / Clear garbage JMS WTODAV / Wait for xpu to signal it has output ready X80RS / Get output from XPU DCA XTMP1 / & save it TAD XTMP1 / Get it back TAD (-7401) / See if it was F01h=Monitor ready after reset SZA CLA / Skip if it was JMP APUBAD / else report error / Because of the difference between the way / the APU & XPU start up the following is / done to prevent a timeout from occurring / in the routine MMCMD the first time it is / entered. AC0002 / Set the XPU input data read flag X80DF / ... CLA CLL / Clear garbage CDFSPL / Change to spell field DCA I (TIMES) / Clear wait loop flag JMP CHKAP1 / Merge back into CHKAPU stream XTMP1, 0 XTMP2, 0 INSCNT, 0 /---------- PAGE /---------- / / / Jms Calioa / **** / arg1 (text string) / **** / arg2 / **** / arg3 / /---------- CALIOA, XX TAD I CALIOA / pick up the text string address DCA CALIO1 / ... ISZ CALIOA / bump to next location TAD I CALIOA / pick up next arg DCA CALIO2 / ... ISZ CALIOA / bump to next location TAD I CALIOA / pick up next arg DCA CALIO3 / ... ISZ CALIOA / bump for return RDF / Get field of caller. TAD CIDF0 / Make return CIF CDF. DCA CALIO4 / save for the return. CDFMYF / Map our field. / CIFMNU JMS I IOACAL 0 CALIO1, .-. CALIO2, .-. CALIO3, .-. CALIO4, XX / return CDI JMP I CALIOA / return to caller / / / SPINCK - SPell INitial ChecK , See that document file was opened / & if not report, Check what operation to do. / ADDED EDIT NUMBER 015 / / SPINCK, XX RDF / Get field of caller TAD CIDF0 / Make return CIF CDF DCA SPINEX / & save for the return TAD I SPINT0 / Get the SC/LU/UD indicator /M016 CDFMYF / Map our field SWP / Save indicator in MQ for now / & get open file flag into AC SNA CLA / Skip on open file JMP SPINFO / File open failed - inform user ACL / Get back SC/LU/UD indicator SPA SNA CLA / Skip on SC or LU ("Normal" return) SPINT1, ISZ SPINCK / Increment return ("Skip") SPINEX, XX / Return CDI JMP I SPINCK / Return to caller SPINFO, JMS CALIOA / Clear screen from 2nd line down CLREOS 0100 NOP JMS CALIOA / Give "Document could not be opened..." msg FOMGTX 1404 NOP JMP SPFOIP / Go look for GOLD MENU (actually any key) SPFOWT, CIFSYS / Wait for an event JWAIT / ... SPFOIP, CIFSYS / See if user struck a "key" XLTIN / ... JMP SPFOWT / Not yet - Go wait CLA / Get rid of it ISZ SPINCK / Bump the return address JMP SPINT1 / Go bump the return again & exit (Double "Skip") SPINT0, INIUSR / INIUSR is zero page, so we need this /A016 / literal to get at it from this field /A016 /---------------------------------------- / / ***** C A U T I O N ***** / the next locations are order important / /---------------------------------------- MENUTABLE, / table of menu options 2000; REPLACE / 'replace' option 2012; EDIT / 'edit' option 2021; IGNORE / 'ignore' option 2032; CONTINUE / 'continue' option 2045; FINISH / 'finish' option 2056; OVERVIEW / 'overview' option ENDMENUTABLE=. / end of table / CORRECT / correct list help header MENU2TABLE, / headers for help menus at second level XX / not used EDTING / editing line help header /---------------------------------------- / / end order important / /---------------------------------------- /**************************************************************************** / / The next routine has been inserted to deal with correction of /a019 / words containing 8-bit characters. It emulates the editor 8-bit/a019 / expansion routine, without calling the screen update routines /a019 / /**************************************************************************** ECIMCH, XX / 8 bit character/dead key expansion rtn/a019 DCA EC8 / Save the character /a019 TAD EC8 / Get it back /a019 AND (200) / Check for 8 bit data /a019 SNA CLA / Is it 8 bit? /a019 JMP ECN8BT / No, output it normally /a019 TAD EC8SPC / Get the space of the dead sequence /a019 AND P177 / Mask out previous attributes /a019 TAD I (DISATR) / Add the attributes in /a019 DCA EC8SPC / Restore the space with the attributes /a019 TAD EC8CST / Get the character set identifier /a019 AND P177 / Mask off previous attributes /a019 TAD I (DISATR) / Add the attributes in /a019 DCA EC8CST / Restore the identifier /a019 TAD EC8 / Get the character /a019 AND P177 / Mark off the 8th bit /a019 TAD I (DISATR) / Add in the attributes /a019 DCA EC8 / Restore the character /a019 CDFMYF / Back to my field /a019 TAD (EC8STR-1) / Get addr of dead seq. string /a019 DCA X4 / Save in an index register /a019 EC8LOP, TAD I X4 / Get the next character in the dead seq/a019 SNA / Is it the end of the string? /a019 JMP EC8RTN / Yes, exit via CIDF instruction /a019 JMS ECIMCR / No, insert the character into the text/a019 JMP EC8LOP / Get the next character in the seq. /a019 ECN8BT, TAD EC8 / Get the 7 bit character /a019 TAD I (DISATR) / Add in the attributes /a019 CDFMYF / Return data to here /a019 JMS ECIMCR / Insert it into the text buffer /a019 EC8RTN, CDISPL / Place for CIDF instruction /a019 JMP I ECIMCH / Return /a019 ECIMCR, XX / Routine to call the editor INSERT rtn /a019 CDFSPL / Change to Spelling data field /a019 DCA I (T3) / Store the character in insert param /a019 CIFSPL / Change to the spelling field /a019 JMS ECD8IN / Call INSERT /a019 JMP I ECIMCR / Return to caller /a019 EC8ATT, 0 / Attributes of the 8 bit character /a019 EC8STR, ECSTOV / Dead string to insert for 8 bit char /a019 EC8SPC, " / Space alternate char set introducer /a019 EC8CST, "2 / Multinational character set selector /a019 EC8, 0 / Location for storage of character /a019 ECNDOV / End of dead sequence /a019 0 / End of string /a019 /---------------- PAGE FOMGTX, TEXT /^P&DOCUMENT COULD NOT BE OPENED. &PRESS !&GOLD !&MENU TO //A015 *.-1 /A015 TEXT /RETURN TO MAIN MENU./ /A015 INCAPU, TEXT /!X^P^A&BOARD INCOMPATIBILITY OR FAILURE.^S!Y/ BADAPU, TEXT /!X^P^A&BOARD FAILURE.^S!Y/ ASTRNG, BELL; ESC; "[; "0; ";; "7; "m&177; 0 / Ring bell; set reverse Video. NOMEAN, TEXT /^P&THAT COMMAND HAS NO MEANING HERE./ ERREOL, TEXT /^P&END OF LINE REACHED. &CANNOT EDIT BEYOND THIS LINE./ ERRBOL, TEXT /^P&START OF LINE REACHED. &CANNOT EDIT BEFORE THIS LINE./ ERRSWP, TEXT /^P&INVALID SWAP./ FATAL, TEXT '^P&READ/&WRITE ERROR. &VERIFY YOUR DISKETTE OR &Z80 BOARD.' *.-1 TEXT ' &PRESS !&RETURN.' THREST, TEXT / &PRESS !&RETURN./ TIMERR, TEXT /^P&TIME-OUT ERROR. &PRESS !&RETURN TO RETURN TO &MAIN &MENU./ NWFULL, /A008 TEXT /^P&NEW WORD LIST FULL. &WORDS IGNORED FROM NOW ON WILL NOT//A008 *.-1 TEXT / BE INCLUDED IN AN UPDATE/ /A008 UDFULL, TEXT /^P&TEMPORARY MEMORY FULL. &CANNOT IGNORE ANY MORE WORDS./ UDFUL2, TEXT /^P&PERSONAL DICTIONARY TOO LARGE. &PRESS !&RETURN./ ESCAPE, 33;0 LABRKT, 74;0 RABRKT, 76;0 ERASE, TEXT /!E/ BLANKL, PCURST, TEXT /^P/ CURSTR, TEXT /!L^P/ CLREOS, TEXT /^P!E/ MENUCONTROL, TEXT /!P!S/ CONTROL, TEXT /^A/ TXTSTR, TEXT /&[^D;^D&H/ MENUNM, TEXT /^P&!S/ DISTXT, TEXT /(^D.^D) / REPLACE, TEXT /&REPLACE/ EDIT, TEXT /&EDIT/ IGNORE, TEXT /&IGNORE/ CONTINUE, TEXT /&CONTINUE/ FINISH, TEXT /&FINISH/ OVERVIEW, TEXT /&OVERVIEW/ CORRECT, TEXT /&CORRECTIONS &LIST/ EDTING, TEXT /&EDITING THE &LINE/ RVHELP, TEXT /^P!E &H &E &L &P/ /D005WRKING, /D005 TEXT /^P ^P...&WORKING.../ E1RRLINE, TEXT /^P!L&SELECT AN OPTION WITH !&ADVANCE OR !&BACKUP, / *.-1 TEXT /OR TYPE THE LETTER. &PRESS !&RETURN./ *.-1 TEXT /^P!L&FOR MORE INFORMATION, PRESS THE !&HELP KEY./ NOPTION, TEXT /^P!L&INVALID CHOICE - &SELECT ANOTHER OPTION./ NOCORRECT, TEXT /^P!L&NO CORRECTIONS AVAILABLE FOR THIS WORD./ MSGRP2, TEXT /^P!L&FOR MORE INFORMATION, PRESS THE !&HELP KEY./ *.-1 TEXT /^P!L&EDIT AND PRESS !&RETURN. !&OR PRESS &GOLD !&MENU TO RETURN / *.-1 TEXT /TO &SPELLING &MENU./ REPRMT, TEXT /^P!L&SELECT AN ALTERNATE WITH !&ADVANCE OR !&BACKUP / *.-1 TEXT /AND PRESS !&RETURN. !&OR TYPE / *.-1 TEXT /^P!LA LETTER FOR AN OPTION. &FOR MORE INFORMATION,/ *.-1 TEXT / PRESS THE !&HELP KEY. / NOEDT, TEXT /^P!L&NO ERROR HIGHLIGHTED. &SELECT ANOTHER OPTION./ ENDCOR, TEXT /^P&NO MORE CORRECTIONS AVAILABLE FOR THIS WORD./ MORDIS, TEXT /^A&MORE...^A/ NOMORDIS, TEXT /^ANO MORE^A/ HYLTWD, TEXT / THE ERROR (HIGHLIGHTED/ FTMET, TEXT / FROM THE MENU, EITHER TYPE / ULARAK, TEXT /USING THE !&BACKUP AND !&ADVANCE KEYS/ DSPAID, TEXT /&D&E&CSPELL / HOUMIF, TEXT /&HOUGHTON &MIFFLIN/ BLANK, TEXT // HLPR1, TEXT / &LETS YOU REPLACE^S WORD) WITH A WORD FROM/ HLPR2, TEXT / THE CORRECTIONS LIST. &THIS LIST APPEARS JUST BELOW THE TEXT./ HLPR4, TEXT / &TO SELECT &REPLACE^S&R, OR HIGHLIGHT &REPLACE/ HLPR5, TEXT / ^S. &THEN PRESS !&RETURN./ EXIT1, TEXT /^SKEY./ EXIT10, TEXT / &TO EXIT HELP, PRESS ANY / HLPE1, TEXT / &LETS YOU EDIT THE LINE WHICH CONTAINS^S/ HLPE2, TEXT / WORD). &YOU CANNOT EDIT ANY OTHER LINE. &IF YOU ADD OR DELETE ANY/ HLPE3, TEXT / WORDS THE TEXT WILL BE REFORMATTED./ HLPE4, TEXT / &TO SELECT &EDIT^S&E, OR HIGHLIGHT &EDIT/ HLPI1, TEXT / &CONTINUES CHECKING THE DOCUMENT, LEAVING THE HIGHLIGHTED WORD/ HLPI2, TEXT / UNCHANGED. &ANY FURTHER OCCURRENCES OF THE WORD ARE IGNORED./ HLPI3, TEXT / &TO SELECT &IGNORE^S&I, OR HIGHLIGHT &IGNORE/ HLPC1, TEXT / WORD UNCHANGED./ HLPC2, TEXT / &TO SELECT &CONTINUE^S&C, OR HIGHLIGHT &CONTINUE/ HLPF1, TEXT / &LEAVES &D&E&CSPELL. &THE DOCUMENT IS UPDATED TO INCLUDE ANY / *.-1 TEXT /CORRECTIONS./ HLPF3, TEXT / &TO SELECT &FINISH^S&F, OR HIGHLIGHT &FINISH/ HLPH1, TEXT / ^SDETECTS AND CORRECTS SPELLING MISTAKES AND CAPITALIZATION/ HLPH2, TEXT / ERRORS IN ANY SELECTED DOCUMENT./ HLPH3, TEXT / ^SCHECKS EACH WORD USING A DICTIONARY BASED UPON &AMERICAN/ HLPH4, TEXT / &HERITAGE &DICTIONARIES PUBLISHED BY ^S AND USING/ HLPH5, TEXT / YOUR OWN PERSONAL DICTIONARY, TO WHICH YOU CAN ADD WORDS./ HLPH6, TEXT / &WORDS THAT ARE NOT IN THE DICTIONARIES ARE HIGHLIGHTED AS ERRORS./ HLPH7, TEXT / &YOU CAN CORRECT OR IGNORE ERRORS USING OPTIONS FROM THE MENU./ EXIT2, TEXT / &FOR MORE HELP, PRESS THE !&HELP KEY.^SOTHER KEY./ HLPH8, TEXT / &TO SELECT AN OPTION FROM THE MENU:/ HLPH9, TEXT / . &TYPE THE FIRST LETTER OF THE OPTION AND PRESS !&RETURN./ HLPH90, TEXT / &O&R/ HLPH0, TEXT / . &HIGHLIGHT THE OPTION ^S AND/ HLPH10, TEXT / THEN PRESS !&RETURN./ HLPH11, TEXT / &TO RECEIVE HELP ON THAT OPTION, PRESS THE !&HELP KEY INSTEAD OF / *.-1 TEXT /!&RETURN./ HLPH12, TEXT / &THE FOLLOWING OPTIONS ARE AVAILABLE FROM THE MENU./ HLPH13, TEXT / !&REPLACE - LETS YOU REPLACE THE ERROR WITH A CORRECTION./ HLPH14, TEXT / !&EDIT - LETS YOU EDIT THE LINE CONTAINING THE ERROR./ HLPH15, TEXT / !&IGNORE - IGNORES THE ERROR AND ALL FURTHER OCCURRENCES OF IT./ HLPH16, TEXT / !&CONTINUE - IGNORES THE ERROR./ HLPH17, TEXT / !&FINISH - LEAVES &D&E&CSPELL; THE DOCUMENT IS UPDATED TO THIS POINT./ /HLPH71, /TEXT / &M - DISPLAYS MORE CORRECTIONS (IF ^A&MORE...> IS DISPLAYED)./ HLPH18, TEXT / ^S &SPELLING &VERIFICATION - &CORRECTION,/ HLPH19, TEXT / (C) ©RIGHT 1983, 1981, ^S. &ALL RIGHTS STRICTLY RESERVED./ HLPH20, TEXT / &CONTAINS CONFIDENTIAL UNPUBLISHED PROPERTY OF ^S,/ HLPH21, TEXT / LICENSED SOLELY FOR USE IN &DIGITAL SOFTWARE. &REPRODUCTION, DISCLOSURE, / HLPH22, TEXT / OR RE-CREATION OF EMBODIED COMPUTER PROGRAMS OR ALGORITHMS PROHIBITED./ HLPH24, TEXT / &D&E&CSPELL, (C) COPYRIGHT !&DIGITAL &EQUIPMENT / *.-1 TEXT /&CORPORATION 1983/ HLPK1, TEXT / &A LIST OF POSSIBLE REPLACEMENTS FOR THE ERROR./ HLPK2, TEXT / . &TO INSERT A REPLACEMENT INTO THE TEXT, HIGHLIGHT THE WORD/ HLPK3, TEXT / ^S, THEN PRESS !&RETURN./ HLPK4, TEXT / . &TO DISPLAY MORE CORRECTIONS (IF ^A&MORE...> IS DISPLAYED), PRESS / HLPK5, TEXT / THE &A&D&V&A&N&C&E KEY WHEN THE HIGHLIGHTING IS ON THE LAST/ *.-1 TEXT / CORRECTION./ HLPK7, TEXT / &TO RETURN TO THE MENU, TYPE THE LETTER OF THE DESIRED MENU OPTION./ OCASD, TEXT / ONE CHARACTER AND SET DIRECTION / TODELA, TEXT / TO DELETE A / GOLD, TEXT / !&GOLD / HLPL1, TEXT / &^S THE WORDS ON THE LINE USING THE FOLLOWING KEYS:/ HLPL2, TEXT / !&ADVANCE - TO MOVE FORWARD^SFORWARD/ HLPL3, TEXT / !&BACKUP - TO MOVE BACK^SBACKWARD/ HLPL4, TEXT / !&WORD - TO MOVE ONE WORD IN SET DIRECTION/ HLPL5, TEXT / ^A-- --> - TO MOVE ONE CHARACTER IN EITHER DIRECTION/ HLPL6, TEXT / !&RUBOUT !&KEY OR !&DEL !&CHAR -^SCHARACTER/ HLPL7, TEXT / !&RUBOUT !&KEY OR !&DEL !&WORD -^SWORD/ HLPL8, TEXT / !&GOLD !&DEL !&WORD,^S!&DEL !&CHAR - TO RECOVER ERASED TEXT/ HLPL9, TEXT / &OTHER KEYS AVAILABLE:/ HLPL10, TEXT / !&UPPER !&CASE - TO CAPITALIZE^S/ HLPL11, TEXT / !&GOLD !&UPPER !&CASE - TO LOWER-CASE^S/ HLPL12, TEXT / !&BOLD - TO BOLD^S/ HLPL13, TEXT / !&GOLD !&BOLD - TO UN-BOLD^S/ HLPL14, TEXT / !&UNDERLINE - TO UNDERLINE^S/ HLPL15, TEXT / !&GOLD !&UNDERLINE - TO REMOVE UNDERLINE FROM^S/ HLPL16, TEXT / !&SWAP - TO SWAP CHARACTERS/ HLPL17, TEXT / !&HYPH !&PUSH - MOVES FIRST CHARACTER IN LINE UP TO PREVIOUS LINE/ HLPL18, TEXT / !&GOLD !&HYPH !&PULL - MOVES LAST CHARACTER IN PREVIOUS LINE DOWN TO / *.-1 TEXT /CURRENT LINE/ CHRWRD, TEXT / A CHARACTER OR WORD/ /------ PAGE NOPUNCH /WPSFF.PA / ******* EDIT HISTORY ******* / /010 WJY 29-SEP-84 Fix bug #293 - use ruler imbedded in control / block like printer. /009 BC 20-JUL-84 Fix footnote w/dead keys; Field 5&6 lock words /008 BC 6-JUL-84 Change WPS FOOTNOTE RULER to FOOTNOTE /007 BC 26-JUN-84 Fixes bug with footnote after New Page Mark. /006 BC 20-JUN-84 Delete check for superscpt # before footnote /005 BC 18-JUN-84 Support footnote rulers (defined in ctrl blks) / Delete code leftover from spelling. /004 BC 4-JUN-84 Enable read/write of footnote text to scratch / area of utility disk. Allow GOLD HALT abort. /003 BC 30-MAY-84 Add error messages, speed footnote cutting. / Increase size of scrolling region. /002 BC 24-MAY-84 Add minimal footnote algorithm /001 SBB 14-APR-84 INITIAL VERSION / FIELD 0 / Write out code. *200 / Set up for write-out. JMP I .+2 JMP I .+2 RXLOAD 7605 *RXLDLS RXEWT;0;RXQBLK;. DLOFFF;100;CDF 20;-DSOFFF / Write-out primary spell-check code. / DLOSPX;200;CDF 30;-DSOSPX / Writeout auxillary IOA & text code. 0 FIELD 2 / Assemble FOOTNOTE FORMATTER code in field 3. CDFSPL=CDFMTH CIFSPL=CIFMTH CDISPL=CDIMTH CDFMYF=CDFSPL CDFTXT=CDFLP / Text field is field 5. CIFTXT=CIFLP / ... CDITXT=CDILP / / Page 0 values. *100 SCURSR, 0 / Saved CURSOR value for start of word. SCURPT, 0 / Saved CURPTR value for start of word. LINCNT, 0 / # of lines word crosses. CHAR, 0 / Saved char from TSTCHR routine. NEWLIN, 0 / Flag to indicate that a NEW LINE has been scrolled. OFFSET, 0 / pointer to the option requested ECERFL, 0 / # 0 When there is an error msg being displayed. IFDEF OLDSPL < /A003 HYPHEN, 0 / - == scan 'till hyphen seen. / 0 == no hyphen seen. / + == word is hyphenated. NOTWRD, 0 / "NOT WORD" indicator. # 0 means NOT A WORD. WRDSIZ, 0 / Word size thus far. DISATR, 0 / Contains attributes word for REPLACE replacement words. SLCRSR, 0 / CURSOR value of 1st word on current line. ELINCT, 0 / counter as to which line user is on during EDIT. RLINCT, 0 / counter as to which line is the restart line UNDLCT, 0 / count of # of characters in undeleted buffer NOINSR, 0 / # 0 when INSERT not allowed. NOMORE, 0 / # 0 when at end of current line. ECMODE, 0 / current MODE of EDIT processing. WDOFST, 0 / pointer to the correct word requested LEVEL, 0 / active menu line: 0/corr. list, 1/menu INPCHR, 0 / char input by user to menu CURLSZ, 0 / current logical size of correct word list RTNSTS, 0 / return status code SIXTEN, 16 / row 16 M107, -107 / minus (107) LNCLMR, 0 / line & column # of (.......) text TMPWRD, 0 / temp location WRD, 0 / pointer to start of word ROW, 0 / row correct words are being displayed on WRDCNT, 0 / counter of number of words NUMTRY, 0 / number of times user reaches end of C.W.L WDSAVL, 0 / if set, word not found in dictionary HLPLEN, -110 / number of 'spaces' in the HELP header VIDEO, 0 / 1 if error word is highlighted, 0 if not. / Set/Cleared by DISPLY. UPDCLK, 0 / If set, WTLOOP will update the screen clock. STRTAH, 1&377 / high byte starting address to load Z80 from STRTAL, 0&377 / low byte starting address to load Z80 from GTAPU1=400 / starting address to go to ( 100 hex ) INIUSR, 0 / 0 for SC, 1 for LU (loading user dictionary). HOLDCH, 0 / temp for DISWRD routine. FILNUM, 0 / file # the APU should be reading from MSTRLX=-2 / Master lexicon file: file # 2 RAMFIL=-3 / RAM load file: file # 3 > / end ifdef OLDSPL /A003 P137, 137 / 7-bit mask to uppercase HALTFG, 0 / GOLD:HALT flag. Set if GOLD:HALT detected. / Page 0 values for Footnoting /A002 WTHNFN, 0 / = 1 if within a footnote /A002 APFN, 0 / = 1 if autopaginating footnotes /A002 FNRLSN, 0 / = 1 if footnote ruler seen /A002 FNOTP, 0 / = 1 if footnotes on this page /A002 FNLTP, 0 / = # of footnote lines, this page /A002 PGESFN, 0 / = # of pages worth of footnotes /A002 FNBPLP, 0 / ->next put entry in footnote buffer list (-1) /A002 FNBPCT, 0 / = count of room in footnote put buffer /A002 FNBPPT, 0 / ->next word in footnote put buffer /A002 FNBGLP, 0 / ->next get entry in footnote buffer list (-1) /A002 FNBGCT, 0 / = count of room in footnote get buffer /A002 FNBGPT, 0 / ->next word in footnote get buffer /A002 FNDLAD, 0 / = address of footnote delimiter string /A002 FNODSK, 0 / = 1 if footnotes spilled over to disk /A003 FNFDSK, 0 / = 1 if started reading footnote text from disk/A003 FNWSPC, 0 / = minus # blocks avail. for writing ftnt text /A003 FNRSPC, 0 / = minus # blocks avail. for reading ftnt text /A003 FNRFLG, 0 / = 0 if no footnote ruler encountered /A005 SLNMOD=JMS I .;ECSLMD / Footnote equivalent of some editor routines. ADVPTR=JMS I .;ECAPTR / ... BKPPTR=JMS I .;ECBPTR / INSCHR=JMS I .;ECICHR / INSCHR INSTCH=JMS I .;ECNCHR / INSERT /A005 GETCHR=JMS I .;ECGCHR / CURMOV & LODCHR MOVCHR=JMS I .;CRSTMV / CURMOV only. LOADCH=JMS I .;ECLOAD / LODCHR UPDSCN=JMS I .;FXSCRN / FXSCRL CHKSCN=JMS I .;CKSCRN / TSTLIM & FXSCRL PUTCHR=JMS I .;PTCHRS / Output a string of 7 bit characters. CALEDT=JMS I .;CALLAR / Linkage to editor 'CALLAR' routine. NXTCHR=JMS I .;FNXCHR, 0 / Get next char (= GETCHR /or/ ADVPTR) /A003 MAXCHR=40 / Maximum size of word (32 decimal). NLINES=11 / Number of lines within scrolling region. FLINES=24 / # of lines in footnote scrolling region/A003 BUF0LEN=226 / length of correct word buffer (150 dec.) BUF1LEN=74 / length of table of correct words / (max. of 30 words, 2 entries/word) / Equates for Footnote Processing /A002 ECSTFN=74 / Start of footnote (left angle bracket) /A002 ECNDFN=76 / End of footnote (right angle bracket) /A002 SUPBIT=1000 / Superscript bit /A002 DECIMAL MAXCOL=238 / Maximum column number is 238 decimal /A005 OCTAL IFNDEF DSUSAV < /***TEMP*** /A003 DSUSAV=57 /***TEMP*** /A003 > / end ifndef DSUSAV /A003 /--------- PAGE /------------------------------------------------------------------------/ / / NOTE: All FATAL errors, after being reported, jmp to EOF for final / cleanup. In order to catch the start-up errors, the entry point / and exit CDI are assembled to return to appropriate clean-up / code. / /------------------------------------------------------------------------/ SPELL, STRTGM / entry point to spelling checker. RDF / Get return data field. TAD CIDF0 / Make a return CID instruction. DCA SPLXIT / save for final return. /D005 CDFMYF /MAKE SURE WE'RE HERE (HURTS LT PINCH) /001 /D005 TAD (SCRNIN) /NEED ADR OF SCREEN INIT ROUTINE /001 /D005 CDFEDT /WPSC IS IN PART OF EDIT FLD /001 /D005 CLA /DCA I (SINADR) /INTO DISPATCH TABLE IN WPSC /001 CDFMNU /NEED TO ZAP LOCK WORDS /D009 TAD (OLL301) /USE ADDRESS FOR RANDOMCONSTANT DCA I (OLL301) /TO ZAP FIELD 5 LOCK WORD /D009 TAD (OLL301) /AGAIN DCA I (OLL400) /TO ZAP FIELD 6 LOCK WORD CDFMYF / Back to our field. JMS INITFN / Init footnote process /A002 JMP SCNXT2 / merge below to get to 1st posn. EOF, JMS CLRRGN / Clear scrolling region. SPLXIT, CDIEDT / Map return field. JMP I SPELL / Return to Menu (or where ever). CHKAPU, /THESE TAGS ARE TO PREVENT 'US' /001 LODAPU, /ASSEMBLY ERRORS IN WPSC /001 IFDEF OLDSPL < /A005 / / return to here to ignore.... / SCFIX,/SB JMS DISPLY / Refresh the word unreversed video. /SB 0 / Say NOT REVERSED VIDEO. CDFEDT / Compute cursor posn of last char of word. AC7777 / CURPOS currently points to next posn so backup. TAD I (CURPOS) / ... DCA I (CURSOR) / Set current cursor posn to there. / / merge here to scan to the start of the next word. / SCNEXT, CDFEDT / Re-enable ECHO while scanning to next word. AC0001 / ... DCA I (ECHFLG) / .... TAD I (SCRLCT) / Test screen lag. CDFMYF / SZA CLA / Skip if no lag. JMS UNDOLG / Update screen. > / end ifdef OLDSPL /A003 SCNXT1, AC0001 / Move to next CURSOR position. SCNXT2, NXTCHR / Get (next) character. /C003 JMP FNDUMP / If we get EOF, go dump the footnotes /A002 DCA CHAR / Save character /A002 CDFSYS / Check the HALT FLAG. /A004 TAD I HLTFLG / ... /A004 CDFMYF / .... /A004 SZA CLA / Skip if it's not set. /A004 JMP HLTERR / Halt flag set. Abort process /A004 TAD CHAR / Get character /A005 TAD (-ECPCT1 / Is is Start Control? /A005 SNA CLA / /A005 JMP CKFNRL / Yes, check if footnote ruler defn /A005 SCNXT5, TAD FNOTP / Footnotes on this page? /A002 SNA CLA / /A002 JMP SCNXT4 / No, just look for footnote start /A002 TAD CHAR / Get character /A002 TAD (-ECNWPG / Is it New Page Mark? /A002 SNA CLA / /M005 JMP FNDUMP / Yes, go dump the footnotes /A002 /D005 TAD (ECNWPG-ECPMRK / Is it Page Mark? /A002 /D005 SZA CLA / /A002 /D005 JMP SCNXT3 / No /A002 /D005 TAD APFN / Yes, are we autopaginating? /A002 /D005 SNA CLA / /A002 /D005 JMP FNDUMP / No, so page mark => dump footnotes /A002 SCNXT3, TAD WTHNFN / Are we within a footnote? /A002 SZA CLA / /A002 JMP FNCHAR / Yes, process a footnote character /A002 TAD APFN / Not in a footnote, are we autopaging? /A002 SNA CLA / /A002 JMP SCNXT4 / Nope, see if it's footnote start /A002 JMS INCRLN / Autopaging: check line count change /A002 JMP SCNXT1 / no change /A002 JMS PGFULL / Check if the page is full /A002 JMP SCNXT1 / nope /A002 / Should backup to line start and dump footnotes, but doesn't yet /A002 JMP SCNXT1 / yup /A002 / Look for footnote start SCNXT4, TAD CHAR / Get character /A002 / Should handle footnote ruler, but doesn't yet /A002 AND P177 / Isolate only the character bits /A002 TAD (-ECSTFN / Is it footnote start? /A002 SZA CLA / /A002 JMP SCNXT1 / No, go on /A002 JMP MAYBFN / Maybe footnote start /A002 INCRLN, XX /A002 / Should check line count change /A002 JMP I INCRLN /A002 PGFULL, XX /A002 / Should check if page is full /A002 JMP I PGFULL / /A002 /------ PAGE / / FNCHAR - Here when processing a footnote. We've seen the footnote start / and we're picking up the footnote characters, deleting them from / the editor buffer, and storing them in the footnote buffer. We / delete soft spaces, line wraps, and select marks, etc. since these / have to be recalculated when the footnote is re-inserted at the / end of the page. If we encounter a Start Ruler command, we abort / the process, as this is illegal (we don't know how to move the / ruler). If we find a start of dead key sequence, we loop till we / find the end, not checking anything within the sequence. / FNCHAR, TAD CHAR / Get the character /A002 AND P177 / Isolate only the character bits /A002 TAD (-ECSTOV / Is it start of dead key sequence? /A009 SNA / /A009 JMP FNDKS / Yes, go handle it /A009 TAD (ECSTOV-ECNDFN / Is it footnote end? /M009 SNA / /A002 JMP FFNEND / Maybe, go find footnote end /A002 TAD (ECNDFN-ECMDFL / Is it line/ruler modified? /A003 SNA / /A003 JMP SCNXT1 / Yes, skip over it /A003 TAD (ECMDFL-ECSTRL / Is it ruler start? /A003 SNA / /A003 JMP RLRINF / Yes, that's a no-no /A003 TAD (ECSTRL-ECSPC / Is it space, justify space, posn mark?/A003 SZA / Yes, delete all but space /A003 TAD (ECSPC-ECNWLN / Is it new line class? /A003 SZA CLA / /A003 JMP FNCHR1 / No /A003 TAD CHAR / Get original char /A003 AND (2000 / Is it wrapped line or select point? /A003 TAD (-2000 / (or justify space or posn marker?) /A003 SZA CLA / /A003 JMP FNCHR1 / No /A003 JMS DELCHR / Yes, delete it /A003 JMP SCNXT2 / Proceed /A003 FNCHR1, TAD APFN / Are we autopaginating? /A002 SZA CLA / /A002 JMP FNCAPY / Yes, process footnote char. w/AP=Yes /A002 TAD CHAR / No, just put char in footnote buffer /A002 JMS PUTFNB / /A002 JMS DELCHR / And delete it from Editor buffer /A002 JMP SCNXT2 / Proceed /A002 / Start of dead key sequence encountered in footnote: scan for the /A009 / end of it, moving characters to the footnote buffer without checking /A009 / for special characters. /A009 FNDKS1, NXTCHR / Get next character /A009 JMP WRDEOF / EOF in middle of dead key sequence? /A009 DCA CHAR / Store the character /A009 FNDKS, TAD CHAR / Get the character /A009 JMS PUTFNB / Store in footnote buffer /A009 JMS DELCHR / Delete char from edit buffer /A009 TAD CHAR / Was it end of dead key sequence? /A009 TAD (-ECNDOV / /A009 SNA CLA / /A009 JMP SCNXT2 / Yes, back to normal process /A009 JMP FNDKS1 / No, keep looking for end dead /A009 / Ruler encountered within footnote: error, as we're not smart enough /A003 / to move it correctly. /A003 RLRINF, TAD (ERRRWF / Get pointer to msg /A003 JMP DSKERR / Go print msg and wait for RETURN /A003 FNCAPY, / Should check line count incr/page full, but doesn't yet /A002 JMP SCNXT1 / Proceed /A002 / / MAYBFN - May be Footnote Start / / Here when found a single angle bracket (<). We check if it is / followed by another (<) and is preceded by a superscripted / character. If so, then it defines start of a footnote. / MAYBFN, AC0001 / Move to next cursor position /A002 NXTCHR / Get next character /C003 JMP FNDUMP / EOF, dump footnotes /A002 AND P177 / Isolate character bits only /A002 TAD (-ECSTFN / Is it footnote start? /A002 SZA CLA / /A002 JMP SCNXT2 / No /A002 BKPPTR / Yes, backup before footnote start /A002 JMP WRDEOF / Wierd EOF /A002 /D006 BKPPTR / Now look at char before footnote /A002 /D006 JMP FFNST1 / File must start with '<<' /A002 /D006 DCA CHAR / Save character /A002 /D006 TAD CHAR / Get character /A002 /D006 AND (SUPBIT / Isolate superscript bit /A002 /D006 TAD (-SUPBIT / Is it superscripted? /A002 /D006 SZA CLA / /A002 /D006 JMP FFNST2 / No /A002 /D005 TAD CHAR / Get the character /A002 /D005 AND P177 / Isolate character bits only /A002 /D005 X="0&177 /D005 TAD (-X / See if numeric /A002 /D005 SPA / /A002 /D005 JMP FFNST2 / No /A002 /D005 TAD ("0-"9 / /A002 /D005 SMA SZA CLA / /A002 /D005 JMP FFNST2 / No /A002 / ?Should we check footnote within footnote? if so, change SCNXT4 /A002 MAYBF1, /D006 ADVPTR / Yes, a real footnote, point at '<<' /A002 /D006 JMP WRDEOF / Wierd EOF /A002 / Should assign a footnote number, if we're autonumbering-doesn't yet /A002 FNSTRT, JMS DELCHR / Delete first '<' from Editor buffer /A002 TAD (ECTMRK / And insert marker to return to /A002 INSCHR / /A002 JMS DELCHR / Delete second '<' /A002 ISZ WTHNFN / Set Within Footnote /A002 / Should insert CR, Footnote Ruler in Editor Buffer-doesn't /A002 TAD (ECAPTR / Set so NXTCHR does ADVPTR /A003 DCA FNXCHR / /A003 TAD APFN / Autopaginating? /A002 SZA CLA / /A002 JMP FNSTR1 / Yes /A002 TAD FNOTP / Footnotes on this Page? /A002 SZA CLA / /A002 JMP FNSTR2 / Yes, skip insertion of short-rule /A002 TAD FNDLAD / No, get addr. of footnote delimiter /A002 DCA X1 / into auto-index register /A002 FNSTR4, TAD I X1 / Get a character of delimiter /A002 SNA / End of delimiter string? /A002 JMP FNSTR2 / Yes /A002 JMS PUTFNB / No, put character in footnote buffer /A002 JMP FNSTR4 / Loop /A002 /Should see if room on page for short-rule & first footnote line-doesn't/A002 / if not-do footnote crosses page w/AP=yes, if so, start count of foot /A002 / note lines this page. /A002 FNSTR1, FNSTR2, ISZ FNOTP / Set Footnotes on this Page. /A002 JMP SCNXT2 / Proceed /A002 /D006FFNST2, ADVPTR / Forward over non-superscript char /A002 /D006 JMP WRDEOF / Wierd EOF /A002 /D006FFNST1, ADVPTR / Forward over fake footnote start /A002 /D006 JMP WRDEOF / Wierd EOF /A002 /D006 JMP SCNXT1 / Go get next character /A002 /------ PAGE / / FFNEND - Found Footnote End / / Here when we find the closing (>>) to end the footnote. We terminate / the footnote in the footnote buffer with a New Line. Then we fix / the NXTCHR routine so that it does GETCHR's instead of ADVPTR's (so / the non-footnote text scrolls by on the screen. / FFNEND, ADVPTR / Get next character /A002 JMP FNEND / EOF, treat as footnote end /A002 DCA CHAR / Store char /A003 TAD CHAR / Get char /A003 AND P177 / Isolate character bits only /A002 TAD (-ECNDFN / Is it footnote end? /A002 SZA CLA / /A002 JMP SCNXT2 / No /A002 JMS DELCHR / Yes, delete the second char /A002 FNEND, BKPPTR / Backup CURPTR /A002 JMP WRDEOF / Wierd EOF??? /A002 JMS DELCHR / Delete the first char /A002 FNEND1, BKPPTR / Backup CURPTR /A002 JMP WRDEOF / Wierd EOF??? /A002 TAD (-ECTMRK / This the marker we left in? /A002 SZA CLA / /A002 JMP FNEND1 / No /A002 JMS DELCHR / Yup, delete it /A002 DCA WTHNFN / Clear Within Footnote flag /A002 TAD (ECGCHR / Set so NXTCHR does GETCHR /A003 DCA FNXCHR / /A003 TAD APFN / Autopaginating? /A002 SZA CLA / /A002 JMP APFNND / Yes, handle footnote end /A002 TAD (ECNWLN / Put New Line in buffer /A002 JMS PUTFNB / to terminate this footnote /A002 / Should backup to mark, delete hard rtn & footnote ruler-doesn't /A002 JMP SCNXT2 / Proceed /A002 APFNND, / /A002 / Should put new line in bfr, chk for field 5 full, chk for more than /A002 / one page worth of footnotes, etc.- doesn't /A002 TAD (ECNWLN / Put New Line in buffer /A002 JMS PUTFNB / to terminate this footnote /A002 JMP SCNXT1 / Proceed /A002 WRDEOF, TAD (ERRUEF / Unexpected End of File /A003 JMP DSKERR / Give the message and terminate /A003 / / DELCHR - Delete character from editor buffer / / Deletes current character from editor buffer, and sets line / modified flag. / DELCHR, XX / /A002 CLA / Clear out the trash /A002 CDFEDT / Change to Editor Field /A002 TAD I (CURPTR / Pickup CURPTR /A002 DCA SCURPT / Store it locally /A002 CDFBUF / Change to Editor buffer field /A002 DCA I SCURPT / Delete the footnote character /A002 CDFMYF / Back to our field /A002 SLNMOD / Set line modified /A002 JMP I DELCHR / Return /A002 / / FNDUMP - Dump the footnote at end of page (or end of document). / / Here when we hit New Page mark or End of File. We store an EOF in / the footnote buffer. If footnote text has spilled over to / the scratch area on the disk, we write out the last block and read / in the first block, in preparation for inserting footnotes into / the editor buffer. / / If a footnote ruler was defined in a Footnote Control Block, we / insert the ruler, followed by the footnote text. After all the / text is inserted, we restore the ruler which was in effect prior / to insertion of footnotes. / FNDUMP, TAD FNOTP / Footnotes on this page? /A002 SNA CLA / /A002 JMP NOFN / Nope /A002 JMS PUTFNB / Yes, store EOF in footnote buffer /A002 TAD FNODSK / Footnotes overflow onto disk? /A003 SNA CLA / /A003 JMP FNDMP5 / No /A003 JMS WRTFNB / Yes, write out last buffer /A003 JMS RDFRST / And read in first /A003 FNDMP5, TAD WTHNFN / Within footnote? /A002 SZA CLA / /A002 JMP NDMSNG / Yes, end of footnote missing /A002 FNDMP0, BKPPTR / Backup to check previous character /A005 JMP WRDEOF / Wierd EOF /A005 DCA CHAR / Save temporarily /A005 ADVPTR / Back where we were /A005 NOP / Have to ignore EOF here /A005 CLA / Clear out the garbage /A005 TAD CHAR / Get previous character /A005 AND P177 / Just the character bits /A005 TAD (-ECNWLN / Is it new line of some sort? /A005 SZA CLA / /A005 TAD (ECNWLN / No, so insert new line before footnts /A005 SZA / Don't insert a null /A005 INSCHR / In case no CR at last line /A005 JMS INSRL / Now insert footnote ruler /A002 FNRLBF / Which is stored in FNRLBF /A002 FNDMP1, JMS GETFNB / Get character from footnote buffer /A002 SNA / Footnote EOF? /A002 JMP FNDMP2 / Yup /A002 INSCHR / No, insert it in Editor buffer /A002 CDFSYS / Check the HALT FLAG. /A004 TAD I HLTFLG / ... /A004 CDFMYF / .... /A004 SNA CLA / Skip if it's set. /A004 JMP FNDMP1 / Loop back /A002 HLTERR, TAD (ERRHLT / Print message and abort /A004 JMP DSKERR / /A004 FNDMP2, TAD APFN / Autopaginating? /A002 SNA CLA / /A002 JMP FNDMP4 / No /A002 AC7777 / Yes, decr. # pages worth of footnotes /A002 TAD PGESFN / /A002 SPA / More footnotes in buffer? /A002 JMP FNDMP3 / No /A002 DCA PGESFN / Yes, store updated count /A002 / Should reset count of footnote lines to count for next page-doesn't /A002 / and if at Eof, should dump rest of footnotes /A002 JMP FNDMPX / Done /A002 FNDMP4, JMS INSRL / Now restore old current ruler /A005 CURLBF / Which is stored in CURLBF /A005 ADVPTR / Move over (New) Page Mark /A002 NOP / Eof is caught below /A002 FNDMP3, CLA / Set no more Footnotes on this Page /A002 DCA FNOTP / /A002 NOFN, JMS INITPG / Init for next page processing /A002 FNDMPX, GETCHR / Are we at EOF? /A002 JMP EOF / Yes, finish up /A002 CLA / clear out the junk /A007 JMP SCNXT2 / No, proceed /A002 NDMSNG, TAD (ERRFEM / Footnote end missing /A003 / Should print message, then allow continue-doesn't /A002 JMP DSKERR / Give the message and terminate /A003 /----------- PAGE IFDEF OLDSPL < /SB WRDOK, CDFSYS / Check the HALT FLAG. TAD I HLTFLG / ... CDFMYF / .... SNA CLA / Skip if it's set. JMP SCNEXT / Halt flag not set. Continue scanning. ISZ HALTFG / Say that we GOLD:HALTed. AC7777 / Say that no word is highlighted. DCA VIDEO / ... JMP WRDERR / Merge to user menu. NTFND1, AC7777 / Bump size back down. Highlight the word TAD WRDSIZ / without the terminating period. DCA WRDSIZ / ... /SB JMS SNDWD1 / Send incorrectly spelt word w/o the period. NTFND2, TAD HYPHEN / Is word hyphenated? SMA SZA CLA / Skip if part of hyphenated word in error. JMP NTFND4 / Jmp if only done 1st pass on hyphenated word. CDFEDT / Now do a 'screen check' for 158 col mode. TAD I (CURSOR) / If word terminates in 2nd half TAD (-WIDTH) / then be sure that 2nd screen gets displayed. SMA CLA / Skip if word doesn't end in 2nd half. JMP NTFND3 / JMP if word ends in right-half screen. TAD SCURSR / Get start of word. Make sure that start-of- DCA I (CURSOR) / word half is mapped. NTFND3, CDFMYF / Back to our field. CHKSCN / Make sure right screen is displayed. TAD SCURSR / Restore CURSOR to point to start of word. CDFEDT / ... DCA I (CURSOR) / .... CDFMYF / back to our field. DCA HALTFG / Say that NOT stopped due to GOLD:HALT. WRDERR, JMP EOF /SBERRGCOR / set up to display corrections.. / / return to here to continue..... / SCCONT, TAD VIDEO / Did we edit the line? SZA CLA / Skip if yes. Editting reset the restart point. JMP SCFIX / Didn't edit. Unhighlight word & continue. /SB JMS ECPSCN / Position cursor to start of restart word. DCA NEWLIN / Say "still on same old line". JMP SCNXT2 / Rescan old word. / to rejustified posn & we're done. > /END IFDEF OLDSPL /SB / / CKFNRL - Check if control block is a footnote ruler definition / / Come here when we find a start control block. We check if the / control block begins with the phrase "FOOTNOTE" and / if so, start looking for ruler setting commands like "L=1", / "R=65", "T=20", "<=44" etc. They may be in any order, as the / Editor doesn't care, but they must end with New Line, and must / not have embedded spaces. They may be upper or lower case. / / Edit 010 now uses new logic to copy the forward pointing ruler / from any ruler imbedded in the control block. If there is no / ruler in the control block, the existing format ruler (if any) / is shut off. / CKFNRL, TAD (FNRTXT-1 / Get addr of key phrase /A005 DCA CKFRT1 / To temp storage /A005 CKFNR1, /M010 /d010 TAD CHAR / /A005 /d010 TAD (-ECPCT2 / Is it end of control block? /A005 /d010 SNA CLA / /A005 /d010 JMP SCNXT5 / Yeah, back where we came from /A005 ISZ CKFRT1 / Bump to next character /A005 TAD I CKFRT1 / Get character of Footnote ruler phrase/A005 SNA CLA / End of string? /M010 JMP CKFNR2 / Yes /A005 AC0001 / ... /A005 NXTCHR / Get next character /A005 JMP FNDUMP / If EOF, dump the footnotes /A005 DCA CHAR / Store character /A005 TAD I CKFRT1 / Get back char. of Footnote ruler phrase/M010 TAD CHAR / Add the text character /A005 AND P177 / Just the character bits /A005 SNA / Match? /A005 JMP CKFNR1 / Yes /A005 TAD (-40 / Try lower case version /A005 SNA CLA / Match? /A005 JMP CKFNR1 / Yes, keep going /A005 JMP SCNXT5 / No, go back where we came from /A005 CKFRT1, 0 / -> into footnote ruler phrase /A005 FNRCHR, 0 / Temp storage for footnote ruler char /A005 / Found Footnote Ruler Control Block /A005 / Start looking for ruler(s). /M010 CKFNR2, DCA FNRFLG / Shut off footnote ruler /A010 /d010 SKP / Already got next char /A005 CKFNR8, ADVPTR / Peek ahead /A010 NOP / Handle EOF later /A010 TAD (-ECSTRL / Are we at a ruler? /A010 SNA CLA / Skip if NOT a ruler /A010 JMP CKFINR / Go process ruler /A010 CKFNR9, BKPPTR / Back to where we started /A010 NOP / Don't care about EOF /A010 AC0001 / Get next char /A005 NXTCHR / ... /A005 JMP FNDUMP / If EOF, go dump the footnotes /A005 DCA CHAR / Store it /M010 TAD CHAR / Get it back /A005 TAD (-ECPCT2 / Is it End Control Block? /A005 SNA CLA / /A005 JMP SCNXT1 / Yes, back to main line /M010 JMP CKFNR8 / Look at next char in control block /A010 CKFINR, / Read the ruler until we find the /A010 / forward pointing portion /A010 TAD (FNRLBF+2 / Get adr of footnote ruler buffer /A005 DCA FNRBFP / Store in pointer to buffer /A005 DCA CKFRT1 / use to count how far forward we go /A010 CKFIN1, ISZ CKFRT1 / INCREMENT COUNT /A010 SKP / NORMAL PATH /A010 JMP FCBERR / RULER MUCH TOO LONG! /A010 ADVPTR / Get next character /A010 JMP WRDEOF / Any file that ends in a ruler is WIERD/A010 TAD (-ECMDRL / Is it the mid-ruler character? /A010 SZA CLA / Skip if it is /A010 JMP CKFIN1 / Else not there yet - get next char /A010 CKFCPR, / Now copy each char into the format /A010 / ruler buffer until end of ruler | ERR/A010 ISZ CKFRT1 / INCREMENT COUNT /A010 SKP / NORMAL PATH /A010 JMP FCBERR / RULER MUCH TOO LONG! /A010 ADVPTR / Get next character /A010 JMP WRDEOF / Any file that ends in a ruler is WIERD/A010 TAD (-ECNDRL / Have we reached the end? /A010 SNA / Skip if NOT end /A010 JMP FNREND / Else end of ruler - go finish up /A010 TAD (ECNDRL / Get character back /A010 JMS PTFNR / & copy it to footnote ruler buffer /A010 JMP CKFCPR / & loop back for next character /A010 /d010 TAD (-FNRTSZ / Get counter for ruler char table /A005 /d010 DCA CKFRT1 / Store in a temp /A005 /d010 TAD (FNRTBL-1 / Get adr of ruler char table /A005 /d010 DCA X1 / Store in auto index reg /A005 /d010 TAD CHAR / Get char back /A005 /d010 AND P177 / Just the char bits /A005 /d010 TAD I X1 / Is it "."? /A005 /d010 SNA / /A005 /d010 JMP CKFNR3 / Yes, go handle it /A005 /d010 ISZ X1 / No, skip equiv. char. /A005 /d010 TAD I X1 / Is it ">"? /A005 /d010 SNA / /A005 /d010 JMP CKFNR3 / Yes, go handle it /A005 /d010 CKFNR4, ISZ X1 / Skip equiv. char. /A005 /d010 TAD I X1 / Match this char? /A005 /d010 SNA / /A005 /d010 JMP CKFNR3 / Yes, go handle it /A005 /d010 TAD (-40 / No, match lower case version of it? /A005 /d010 SNA / /A005 /d010 JMP CKFNR3 / Yes, go handle it /A005 /d010 TAD (40 / No, back to uppercase check /A005 /d010 ISZ CKFRT1 / End of table? /A005 /d010 JMP CKFNR4 / No, loop to next /A005 /d010 CKFNR5, TAD (ERRIRC / Char not legal Footnote Ruler Operator/A005 /d010 JMP DSKERR / Give message and terminate /A005 FCBERR, TAD (ERRFCB / Footnote Control Block error /A005 JMP DSKERR / /A005 / Found character in table of legal ruler characters, get the /A005 / equivalent internal character, then pick up the column number. /A005 /d010 CKFNR3, TAD I X1 / Get equivalent character /A005 /d010 DCA FNRCHR / Store for later /A005 /d010 DCA FNRCOL / Init column number to zero /A005 /d010 AC0001 / Get next char /A005 /d010 NXTCHR / /A005 /d010 JMP FNDUMP / If EOF, go dump the footnotes /A005 /d010 DCA CHAR / Store it /A005 /d010 TAD CHAR / Get it back /A005 /d010 AND P177 / Just the char bits /A005 /d010 X="=&177 /d010 TAD (-X / Is it equals sign? /A005 /d010 SZA CLA / /A005 /d010 JMP CKFNR5 / No, error /A005 /d010 CKFNR6, JMS CVTD / Yes, convert column number to decimal /A005 /d010 JMP CKFNR7 / End of string /A005 /d010 JMP CKFNR6 / Digit, keep checking /A005 /d010 CKFNR7, TAD FNRCOL / Get the column number /A005 /d010 RTR / Isolate top 4 bits of col /A005 /d010 RTR / ... /A005 /d010 AND (17 / /A005 /d010 SZA / Don't store first digit of 0 /A005 /d010 TAD (60 / Make it ascii /A005 /d010 SZA / Don't store first digit of 0 /A005 /d010 JMS PTFNR / Store it in the ruler buffer /A005 /d010 TAD FNRCOL / Now the low 4 bits of col /A005 /d010 AND (17 / ... /A005 /d010 TAD (60 / ... /A005 /d010 JMS PTFNR / Store it in ruler buffer /A005 /d010 TAD FNRCHR / Get the footnote ruler char /A005 /d010 JMS PTFNR / Store it in ruler buffer /A005 /d010 JMP CKFNR8 / Go check for more ruler chars /A005 FNREND, TAD (ECNDRL / Store end ruler flag in buffer /A005 JMS PTFNR / /A005 AC7777 / Set footnote ruler encountered /A005 DCA FNRFLG / ... /A005 TAD CKFRT1 / GET COUNT OF HOW FAR WE WANDERED /A010 CIA / NEGATE /A010 DCA CKFRT1 / SAVE IT FOR LOOP COUNTER /A010 FNREN1, BKPPTR / Back to where we were /A010 NOP / Ignore EOF here /A010 ISZ CKFRT1 / SKIP IF WE ARE BACK /A010 JMP FNREN1 / /A010 JMP CKFNR9 /A010 /------ /A005 PAGE / / PTFNR - Put character to footnote ruler /A005 / PTFNR, XX / /A005 DCA I FNRBFP / Store character in ruler buffer /A005 ISZ FNRBFP / Increment pointer /A005 CLL / /A005 TAD FNRBFP / Past end of buffer? /A005 TAD (-FNRLBE / /A005 SZL CLA / /A005 JMP FCBERR / Give Error and abort /A005 JMP I PTFNR / Return /A005 FNRBFP, 0 / -> into footnote ruler buffer /A005 / / CVTD - Convert ASCII column number to decimal /A005 / JMS CVTD /A005 / JMP NOTDIG / End of string /A005 / JMP .-2 / Char was a digit, loop /A005 / /A005 / Value stored in FNRCOL /A005 / /d010 CVTD, XX / /A005 /d010 AC0001 / Get next char /A005 /d010 NXTCHR / /A005 /d010 JMP FNDUMP / If EOF, go dump the footnotes /A005 /d010 DCA CHAR / Store it /A005 /d010 TAD CHAR / Get the char. /A005 /d010 AND P177 / Isolate character bits /A005 /d010 X="9&177 / /A005 /d010 TAD (-X / Is it a decimal digit? /A005 /d010 SMA SZA / /A005 /d010 JMP CVTD2 / Nope /A005 /d010 TAD ("9-"0 / Keep checking /A005 /d010 SPA / /A005 /d010 JMP CVTD2 / Not a digit /A005 /d010 DCA T1 / Ok, store in a temp /A005 /d010 TAD FNRCOL / Get footnote ruler column so far /A005 /d010 CLL RTL / x 4 /A005 /d010 TAD FNRCOL / x 5 /A005 /d010 RAL / x 10 /A005 /d010 TAD T1 / + digit /A005 /d010 TAD (-MAXCOL / Is it greater than 238 decimal? /A005 /d010 SMA / /A005 /d010 JMP CKFNR5 / Yes, error /A005 /d010 TAD (MAXCOL / Get column number back /A005 /d010 DCA FNRCOL / Store it away /A005 /d010 ISZ CVTD / Return to call +2 /A005 /d010 CVTD1, JMP I CVTD / Return /A005 /d010 CVTD2, CLA / /A005 /d010 TAD CHAR / /A005 /d010 AND P177 / /A005 /d010 TAD (-ECNWLN / Is it New Line? /A005 /d010 SZA CLA / /A005 /d010 JMP CKFNR5 / No, error /A005 /d010 JMP CVTD1 / Yes, return to call+1 /A005 /d010 /d010 FNRCOL, 0 / Holds footnote ruler column number /A005 / /A002 / INSRL - Insert Ruler into Editor Buffer /A002 / /A005 / Inserts ruler into editor buffer, backs over it, then CURMOV's /A005 / over it so old current ruler is inserted into ruler. Then backs /A005 / over it and saves old current ruler in CURLBF so it can be /A005 / reinserted after footnotes have been dumped. /A005 / / JMS INSRL /A002 / BUFADR / address of buffer containing ruler /A005 / INSRL, XX / /A002 TAD FNRFLG / Was a footnote ruler encountered? /A005 SNA CLA / /A005 JMP INSRX / No, so just return /A005 TAD I INSRL / Get pointer to ruler /A005 DCA FNRBFP / Store in a temp /A005 AC7777 / Backup pointer by one /A005 GETCHR / /A005 JMP WRDEOF / /A005 CLA / Clear the character /A005 CDFEDT / To the editor field /A005 TAD I (CURPTR / Get CURPTR /A005 CDFMYF / Back to my field /A005 DCA SCURPT / Save it locally /A005 ADVPTR / Advance one char /A005 NOP / Have to ignore EOF here /A005 CLA / Clear out garbage /A005 INSR1, TAD I FNRBFP / Get a char of the ruler /A005 INSTCH / Insert the char into Editor Buffer /A005 ADVPTR / Step over it /A005 NOP / Have to ignore EOF here /A005 CLA / Clear out the garbage /A005 TAD I FNRBFP / Get the char back /A005 ISZ FNRBFP / Bump the pointer /A005 TAD (-ECNDRL / Is it end of ruler? /A005 SZA CLA / /A005 JMP INSR1 / No, continue /A005 INSR2, CDFEDT / To editor field /A005 TAD SCURPT / Get saved CURPTR /A005 DCA I (CURPTR / Restore it /A005 CDFMYF / Back home /A005 AC0001 / Ok, now CURMOV past the ruler /A005 GETCHR / /A005 NOP / Have to ignore EOF here /A005 INSR3, BKPPTR / Now backup over ruler again /A005 JMP WRDEOF / Should never happen /A005 TAD (-ECSTRL / Is it start of ruler? /A005 SZA CLA / /A005 JMP INSR3 / No, keep backing up /A005 TAD (CURLBF+2 / Yes, get pointer to save bfr for curul/A005 DCA FNRBFP / Save in a temp /A005 INSR4, ADVPTR / Step over ruler start /A005 JMP WRDEOF / Should never happen /A005 TAD (-ECMDRL / Is it ruler middle? /A005 SNA / /A005 JMP INSR5 / Yes, end of current ruler /A005 TAD (ECMDRL / Restore the char /A005 DCA I FNRBFP / Store in current ruler save buffer /A005 ISZ FNRBFP / Bump the pointer /A005 JMP INSR4 / Loop back /A005 INSR5, TAD (ECNDRL / Store End Ruler in the buffer /A005 DCA I FNRBFP / /A005 INSR6, ADVPTR / Look for ruler end /A005 JMP WRDEOF / Should never happen /A005 TAD (-ECNDRL / Is it ruler end? /A005 SZA CLA / /A005 JMP INSR6 / No /A005 ADVPTR / Yes, skip over it /A005 NOP / Have to ignore EOF here /A005 CLA / Clear out the garbage /A005 TAD (ECRMFL / Insert Ruler Modified flag /A005 INSCHR / Into editor buffer /A005 INSRX, ISZ INSRL / Bump return address /A005 JMP I INSRL / Return /A002 /------ PAGE / / FNRTBL - Table of legal footnote ruler settings and equivalent internal / characters used by the editor. / / Format of table: / 1st: -"x; "y&177 / x is setting, y is equiv. internal character / rest: "x-"z; "w&177 / z is setting, w is equiv. internal char. / etc. / end: 0 / (Note: "." and ">" must be first two, since after first two, code checks / for upper/lower case value of setting. / X=".&177 / /A005 FNRTBL, -X; "A&177 / Decimal tab /A005 ".-">; "B&177 / Right-just tab /A005 FNRTB1, ">-"T; "C&177 / Normal tab /A005 "T-"L; "D&177 / Left margin, single spaced /A005 "L-"R; "E&177 / Right margin, ragged /A005 "R-"D; "F&177 / Left margin, double spaced /A005 "D-"J; "G&177 / Right margin, justified /A005 "J-"W; "H&177 / Word wrap indent /A005 "W-"P; "I&177 / Paragraph indent /A005 "P-"C; "J&177 / Centering Point /A005 "C-"N; "K&177 / Left margin, space and a half /A005 "N-"H; "L&177 / Hyphenation zone /A005 "H-"F; "M&177 / Left Margin, half line spaced /A005 FNRTBE, 0 / End of table /A005 FNRTSZ=FNRTBE-FNRTB1 / Size of alpha portion of table /A005 / / FNRTXT - Text which marks a control block as a footnote control block. / Must match this (upper/lower case unimportant) or else the / control block is ignored. / FNRTXT, -"F; -"O; -"O; -"T; -"N; -"O; -"T; -"E /C008 -ECNWLN /C008 0 / End of table /A005 / / Footnote Buffer List /A002 / Each entry is 3 words: /A002 / Word 1 = CDF to buffer field /A002 / Word 2 = -(size of buffer in words) /A002 / Word 3 = start addr of buffer (page boundary) /A002 / 0 Terminates list /A002 / Last entry in list is address of footnote I/O buffer. If no room in /A003 / memory for all footnote text, this buffer is used over and over to /A003 / read/write excess footnote text on the utility diskette. /A003 / ** Hopefully temp., first word of fld 5 was being zapped, use 200 ** /A002 FNBFL, CDFTXT / = CDF to buffer field /A002 -40+5^200 / = -size of buffer (in words) /A002 200 / = start addr of buffer (page boundary) /A002 FNIOBP, CDFMYF /*** Must be LAST entry in list *** /A003 -400 / = 1 block buffer /A003 FNIOBF / = addr of footnote I/O buffer /A003 0 / List terminator /A002 / / Short Ruled line for footnote delimiter /A002 / SHRTRL, "_&177; "_&177; "_&177; "_&177; "_&177; "_&177; ECNWLN; ECNWLN /A002 0 / List terminator /A002 / / Init Footnote Process /A002 / INITFN, XX / /A002 DCA WTHNFN / Not within a footnote /A002 DCA APFN / Assume not autopaginating /A002 DCA FNRLSN / Footnote ruler not seen yet /A002 DCA PGESFN / 0 pages worth of footnotes /A002 JMS INITBL / Init footnote buffer list ptrs /A002 JMP I INITFN / Return /A002 / / Init Footnote Buffer List Pointers and Next Char Routine Pointer /A002 / INITBL, XX / /A002 TAD (FNBFL-1 / Get pointer to footnote buffer list /A002 DCA X1 / into auto-index reg. /A002 TAD I X1 / Get CDF to buffer field /A002 DCA FNPCDF / Store in buffer fill (put) routine /A002 TAD FNPCDF / /A002 DCA FNGCDF / and buffer empty (get) routine /A002 TAD I X1 / Get minus size of buffer /A002 DCA FNBPCT / Store as count of room in buffer (put)/A002 TAD FNBPCT / /A002 DCA FNBGCT / (and get) /A002 TAD I X1 / Get start addr of buffer /A002 DCA FNBPPT / Store in footnote buffer put pointer /A002 TAD FNBPPT / /A002 DCA FNBGPT / (and get pointer) /A002 TAD X1 / Store addr-1 of next buffer list entry/A002 DCA FNBPLP / in buffer list put pointer /A002 TAD FNBPLP / /A002 DCA FNBGLP / (and get pointer) /A002 TAD (SHRTRL-1 / Store address of shortruled line /A002 DCA FNDLAD / as address of footnote delimiter /A002 TAD (ECGCHR / Init next char routine to do GETCHR /A003 DCA FNXCHR / /A003 JMP I INITBL / Return /A002 / / Init for next page processing /A002 / INITPG, XX / /A002 TAD (ECGCHR / Init next char routine to do GETCHR /A003 DCA FNXCHR / /A003 TAD APFN / Autopaginating? /A002 SNA CLA / /A002 JMS INITBL / No, init footnote buffer list ptrs /A002 INITPX, JMP I INITPG / Return /A002 CRSTMV, XX / Routine to do a CURMOV only. GETCHR / Get & LOAD char. NOP / Error will be handled later. CLA / Don't return the char. JMP I CRSTMV / Return w/ clean AC. /------ PAGE / PUTFNB - Put Character in Footnote Buffer /A002 / /A002 / JMS PUTFNB /A002 / /A002 / (If no more room for footnotes, generates error and terminates) /A002 / /A002 PUTFNB, XX / /A002 FNPCDF, XX / CDF to footnote buffer field /A002 DCA I FNBPPT / Store the character /A002 CDFMYF / CDF back home /A002 ISZ FNBPCT / Bump count of room in buffer /A002 JMP PUTFN1 / Still some space left /A002 / Here when a footnote buffer fills, get next entry in list of buffers /A002 TAD FNBPLP / Get addr-1 of next buffer list entry /A002 PUTFN0, DCA X1 / Store in index reg. /A002 TAD I X1 / Get CDF to buffer field /A002 SNA / End of buffer list? /A002 JMP PTFNBK / Yes, footnotes are too big /A002 DCA FNPCDF / Store CDF in line /A002 TAD I X1 / Get minus size of buffer /A002 DCA FNBPCT / Store as put counter /A002 TAD I X1 / Get addr of buffer /A002 DCA FNBPPT / Store as buffer put pointer /A002 TAD X1 / Store addr-1 of next buffer put entry /A002 DCA FNBPLP / in footnote buffer list pointer /A002 SKP / /A002 PUTFN1, ISZ FNBPPT / INC put ptr (won't skip: count didn't)/A002 JMP I PUTFNB / Return /A002 / Footnote buffer filled, and no more entries in buffer list /A002 PTFNBK, TAD FNODSK / Any FootNotes On DiSK? /A003 SZA CLA / /A003 JMP PTFNB1 / Yup, already initialized /A003 TAD (-DSUSAV-1 / No, get minus size of area on disk /A003 DCA FNWSPC / Store as footnote WRITE space avail. /A003 TAD (DLCUTB / Get address of first block /A003 DCA WTFNBK / Store it in call to write routine /A003 ISZ FNODSK / Say there are footnotes on disk /A003 JMP PTFNB2 / Proceed /A003 PTFNB1, ISZ FNWSPC / Any WRITE space left on disk? /A003 JMP PTFNB2 / Yes, go write the buffer out /A003 FSERR, TAD (ERRFSE / No, Footnote Storage Exceeded /A003 JMP DSKERR / Issue the msg and terminate /A003 PTFNB2, JMS WRTFNB / Write footnote bfr to CUT/PASTE blocks/A002 TAD (FNIOBP-1 / Get -> footnote I/O buffer list entry /A002 JMP PUTFN0 / Go continue /A002 / / Get Character from Footnote Buffer /A002 / /A002 / JMS GETFNB /A002 / /A002 / GETFNB, XX / /A002 FNGCDF, XX / CDF to footnote buffer field /A002 TAD I FNBGPT / Get the character /A002 CDFMYF / CDF back home /A002 ISZ FNBGCT / Bump count of chars taken from buffer /A002 JMP GETFN1 / Still some left /A002 / Here when a footnote buffer empties, get next entry in list of buffers/A002 DCA GTMP / Save the character /A002 TAD FNBGLP / Get addr-1 of next buffer list entry /A002 GETFN0, DCA X1 / Store in index reg. /A002 TAD I X1 / Get CDF to buffer field /A002 SNA / End of buffer list? /A002 JMP GTFNBK / Yes, footnotes spill onto disk /A002 DCA FNGCDF / Store CDF in line /A002 TAD I X1 / Get minus size of buffer /A002 DCA FNBGCT / Store as get counter /A002 TAD I X1 / Get addr of buffer /A002 DCA FNBGPT / Store as buffer get pointer /A002 TAD X1 / Store addr-1 of next buffer list entry/A002 DCA FNBGLP / in footnote buffer get list pointer /A002 TAD GTMP / Get character back /A002 SKP / /A002 GETFN1, ISZ FNBGPT / INC get ptr (won't skip: count didn't)/A002 JMP I GETFNB / Return /A002 / Footnote bfr emptied: no more entries in buffer list, get disk block /A003 GTFNBK, ISZ FNRSPC / Any more footnote text on disk? /A003 JMP GTFNB2 / Yes, go read the buffer in /A003 FRERR, /A003 / Should never happen...Physical EOF before footnote EOF /A003 TAD (ERRFSE / No, Footnote Storage Exceeded /A003 JMP DSKERR / Issue the msg and terminate /A003 GTFNB2, JMS RDFNB / Read to footnt bfr frm CUT/PASTE blks /A002 TAD (FNIOBP-1 / Get -> footnote I/O buffer list entry /A002 JMP GETFN0 / Go continue /A002 / / Read first block of footnotes stored on disk /A003 / RDFRST, XX / /A003 TAD (-DSUSAV-1 / Get minus size of area on disk /A003 DCA FNRSPC / Store as footnote read space avail. /A003 TAD (DLCUTB / Get address of first block /A003 DCA RDFNBK / Store it in call to read routine /A003 JMS RDFNB / Read the first block /A003 JMP I RDFRST / Return /A003 GTMP, 0 / Temp character storage /A002 / Write footnote buffer to CUT/PASTE blocks /A003 WRTFNB, XX / /A003 CIFMNU / Menu field /A003 JMS I (FILLIO / Write out the footnote I/O buffer /A003 RXEWT+2000 / Write function /A003 CDFMYF / Buffer field /A003 FNIOBF / Buffer address /A003 -1 / 1 block. /A003 WTFNBK, 0 / block # to write to /A003 JMP FNWERR / Footnote write error /A003 ISZ WTFNBK / Bump block # for next write /A003 NOP / (just in case) /A003 JMP I WRTFNB / Return /A003 FNWERR, TAD (ERRFNW / Error writing footnote text to disk /A003 JMP DSKERR / Give msg and terminate /A003 / Read footnote buffer from CUT/PASTE blocks /A003 RDFNB, XX / /A003 CIFMNU / Menu field /A003 JMS I (FILLIO / Read in the footnote I/O buffer /A003 RXERD+4000 / Read function /A003 CDFMYF / Buffer field /A003 FNIOBF / Buffer address /A003 -1 / 1 block. /A003 RDFNBK, 0 / block # to read from /A003 JMP FNRERR / Footnote read error /A003 ISZ RDFNBK / Bump block # for next read /A003 NOP / (just in case) /A003 JMP I RDFNB / Return /A003 FNRERR, TAD (ERRFNR / Error reading footnote text from disk /A003 JMP DSKERR / Give msg and terminate /A003 /------ /A002 PAGE /---------- / / / Jms Calioa / **** / arg1 (text string) / **** / arg2 / **** / arg3 / /---------- CALIOA, XX TAD I CALIOA / pick up the text string address DCA CALIO1 / ... ISZ CALIOA / bump to next location TAD I CALIOA / pick up next arg DCA CALIO2 / ... ISZ CALIOA / bump to next location TAD I CALIOA / pick up next arg DCA CALIO3 / ... ISZ CALIOA / bump for return RDF / Get field of caller. TAD CIDF0 / Make return CIF CDF. DCA CALIO4 / save for the return. CDFMYF / Map our field. / CIFMNU JMS I IOACAL 0 CALIO1, .-. CALIO2, .-. CALIO3, .-. CALIO4, XX / return CDI JMP I CALIOA / return to caller / / IPTCHR - Accept a character from the keyboard /A003 / Used to read a RETURN after error messages IPTCHR, XX / /A003 JMP IPTCH2 / /A003 IPTCH1, CIFSYS / /A003 JWAIT / /A003 IPTCH2, CIFSYS / /A003 XLTIN / /A003 JMP IPTCH1 / nothing /A003 JMP I IPTCHR / Return to our field with char in AC /A003 IFDEF OLDSPL < /SB TSTLAG, XX / Routine to see if still on line w/ word on it. CDFEDT / See if any current lag. TAD I (SCRLCT) / ... CDFMYF / also see if any TAD ELINCT / lag from line word is on. SZA CLA / Skip if yes. Take 1st return. ISZ TSTLAG / Not on same line. take "end-of-UNIT" return. JMP I TSTLAG / Return to process end-of-UNIT. CHKEOL, XX / Routine to see if current char is a line terminator. TAD CHAR / Get current character. AND P177 / Isolate just the char bits. TAD (-ECNWLN) / See if it's a LINE TERMINATOR char. SZA CLA / Skip if yes. process it. JMP CKEOL1 / Not line terminator, take 2nd return. ISZ NOMORE / Set NOMORE chars on line flag. SKP / Take 1st return. CKEOL1, ISZ CHKEOL / Not line terminator. Take 2nd return. JMP I CHKEOL / Return to caller. ECPTCH, XX / Routine to save character at posn ptd to by CURPTR. DCA T2 / Save character to save. CDFEDT / Map EDIT field. TAD I (CURPTR) / Get current text pointer. DCA T3 / Save so that we can indirect thru. CDFBUF / Map text field. TAD T2 / Get character to save. DCA I T3 / Save character. CDFMYF / back to our field. JMP I ECPTCH / return to caller. ECPSCN, XX / Routine to call SETCUR. CIFEDT / Call routine in editor field. CALEDT; SETCUR / routine will posn cursor to start of word. CDFEDT / routine DF to editor field. CDFEDT / Map editor field. TAD I (CURSOR) / Set screen posn same as CURSOR. DCA I (CURPOS) / ... CDFMYF / .... JMP I ECPSCN / Return to caller. NTFND4, AC7777 / Set flag to stop at next hyphen DCA HYPHEN / and rescan the word. TAD LINCNT / Get # of lines to start of word. /SB JMS ECSCRL / Scroll to the line in question. /SB JMS ECINI2 / Posn cursor to start of word. CLA /SB DCA NEWLIN / Reset "still on same line" flag. JMP SCNXT2 / Start rescanning the word. > /END IFDEF OLDSPL /SB /------------ /D002TSTSSC, XX /TEST FOR SUPERSCRIPT CHAR /SB /D002 ISZ TSTSSC /TO LOOK FOR NEXT /SB /D002 JMP I TSTSSC /GO BACK FOR MORE /SB /----------- IFDEF OLDSPL < /SB / /TSTCHR -- See if current character is ALPHA, NUMERIC, or OTHER. / /CALL: JMS TSTCHR AC=0 on input. / char=other return / char=numeric return / char=alpha-only return / / char is stored in T1 for subsequent reference. / /------------ TSTCHR, XX / Entry point. DCA CHAR / Save character. TAD CHAR / Get character. AND P177 / Isolate only the character bits. X="a&177 / First check for lower case characters. TAD (-X) / Compare against little "a". SPA / Skip if maybe. JMP TSTUPR / See if upper case. TAD ("a-"z) / See if within lowercase range. SMA SZA / Skip if ALPHA ONLY. JMP TSTOTH / Jmp to take OTHER return. TSTALP, ISZ TSTCHR / ALPHA-ONLY return. TSTNUM, ISZ TSTCHR / NUMERIC return. TSTOTH, CLA / OTHER return. JMP I TSTCHR / Return to caller. TSTUPR, TAD ("a-"A) / See if uppercase character. SPA / Skip if possible UPPERCASE. JMP TSNTAL / Definately not ALPHA-BETIC. See if numeric. TAD ("A-"Z) / See if within ALPHA-ONLY range. SMA SZA / Skip if ALPHA ONLY. JMP TSTOTH / Must be OTHER. JMP TSTALP / Jump to take ALPHA return. TSNTAL, TAD ("A&177) / Normalize. JMS TSTSPC / See if special (".", "-", or "'"). SNA / Skip if no. JMP TSTALP / Treat HYPHEN, PERIOD, and APOSTRAPHE as ALPHA. TAD ("'-"0) / See if numeric. SPA / Skip if maybe. JMP TSTOTH / Jmp if NO. Must be OTHER. TAD ("0-"9) / See if within NUMERIC range. SMA SZA / Skip if yes. JMP TSTOTH / Jmp if no. Must be OTHER. JMP TSTNUM / Take NUMERIC return. TSTSPC, XX / Routine to see if passed char is ".", "-", or "'". X=".&177 / AC returns 0 if yes, char - "'" if no. AND P177 / Isolate only the character bits. TAD (-X) / See if period. SZA / Skip if yes. TAD (".-"-) / See if initial dash (hyphen). SZA / Skip if yes. TAD ("--"') / See if initial apostrophe. JMP I TSTSPC / Return 0 for special, char - "'" if not. /------------ > /END IFDEF SPL /SB PAGE IFDEF OLDSPL < /A005 UNDOLG, XX / Routine to call FXSCRL. TAD LINCNT / Update # of lines in word. DCA LINCNT / ... ISZ NEWLIN / Say that a NEW LINE has been seen!!! UPDSCN / Update Screen (FXSCRL). JMP I UNDOLG / Return to caller. > /END IFDEF OLDSPL /A005 /----------- / /SLNMOD / / /----------- ECSLMD, XX / Routine to x-field call SETLMD (SLNMOD). CIFEDT / Call SETLMD to set screen update flags. CALEDT; SETLMD / ... CDFEDT / .... JMP I ECSLMD / Return to caller. /----------- / /ADVPTR / / /----------- ECAPTR, XX / Routine to call ESAPTR in edit field. CIFEDT / Move CURPTR to next character. CALEDT; ESAPTR / ADVPTR routine. CDFBUF / field to be mapped to. SKP / 1st return, take same return to caller. ISZ ECAPTR / Bump to correct return. JMP I ECAPTR / ... /----------- / /BKPPTR / / /----------- ECBPTR, XX / Routine to call ESBPTR in edit field. CIFEDT / Backup to where we were. CALEDT; ESBPTR / BKPPTR CDFBUF / .... SKP / Take 1st return. ISZ ECBPTR / Take 2nd return. JMP I ECBPTR / Return to caller. /----------- / /INSCHR / / /----------- ECICHR, XX / Routine to call ESICHR in edit field. CIFEDT / CALEDT; ESICHR / Call ESICHR CDFBUF / .... JMP I ECICHR / Return to caller. /----------- / /INSTCH /A005 / / /----------- ECNCHR, XX / Routine to call INSERT in edit field. CIFEDT / CALEDT; INSERT / Call INSERT CDFBUF / .... JMP I ECNCHR / Return to caller. /----------- / /GETCHR / / /----------- ECGCHR, XX / Routine to call CURMOV & LODCHR. CIFEDT / Call editor routine to insert character. JMS I (GETCH) / Call routine in editor field. SKP / Return via 1st return. ISZ ECGCHR / Return via 2nd return. JMP I ECGCHR / Return to caller. /----------- / /LOADCH / / /----------- ECLOAD, XX / Routine to call LODCHR. CIFEDT / Call editor routine to load character. CALEDT; LODCHR / ... CDFBUF / buffer field to be BUFFLD. SKP / Take 1st return. ISZ ECLOAD / Take 2nd return. JMP I ECLOAD / Return to caller. /----------- / /UPDSCN / / /----------- FXSCRN, XX / Routine to call FXSCRL in edit field. CIFEDT / CALEDT; FXSCRL / Call FXSCRL CDFEDT / .... JMP I FXSCRN / Return to caller. /----------- / /CHKSCN / / /----------- CKSCRN, XX / Routine to call TSTLIM & then FXSCRL. CIFEDT / CALEDT; TSTLIM / Call TSTLIM CDFEDT / .... UPDSCN / Call FXSCRL to repaint. JMP I CKSCRN / Return to caller. /----------- / /PUTERR - display error message on bottom line. / / /CALL: JMS PUTERR / display error message on bottom line. / ptr / pointer to a TEXT string for IOA. / /----------- PUTERR, XX / entry point. JMS SETMOD / set modes, ring bell, etc... TAD I PUTERR / Get error msg text pointer. TAD (-PCURST) / Is this the call to clear the error msg? SNA CLA / Skip if no. Ring the bell. JMP PUTER1 / Don't ring the bell if clearing the line. PUTCHR; BELL / Ring the bell. PUTER1, TAD I PUTERR / Get address of text string to display. ISZ PUTERR / Bump to return address. DCA PUTER2 / Save it for IOACAL. /SB CIFTXT / Call output IOA output routine in TXT field. JMS I (CALIOA) / display the message PUTER2, .-. / arg1 -2700 / arg2 PRSRTN / arg3 JMS RSTCUR / restore cursor and attributes. ISZ ECERFL / Say that there is an error msg being displayed. JMP I PUTERR / return to caller. /---------- / / /---------- SETMOD, XX JMS SAVCUR / save cursor posn and attributes. JMS SETABS / Set ORIGIN mode to ABSOLUTE mode. JMS CLRRV / Eliminate any current attributes. JMS SETRV / Error message gets output in reverse video. JMP I SETMOD IFDEF OLDSPL < /SB /---------- / / DSPTCH - routine to dispatch control / / / CALL: JMS DSPTCH / rtn1 / only return if: end of table encountered / / Inputs: / X1 - pointer to the dispatch table / T1 - character being matched to the dispatch table / (passed here in the AC) / / Outputs: / Control is passed to the appropriate routine, unless / a match is not made, in which case, return to caller / /---------- DSPTCH, XX / Return address DCA T1 / save the input char to check DSPTC1, ISZ X1 / bump rest of this entry. TAD I X1 / Check next table entry. SNA / Skip if there is one. JMP I DSPTCH / no more valid commands, return to process. TAD T1 / see if table entry matches desired command. SZA CLA / Skip if yes. JMP DSPTC1 / Check entry. TAD I X1 / Get address of routine to call. DCA T1 / Save for jump indirect thru. JMP I T1 / Dispatch to edit routine. > /END IFDEF OLDSPL /SB / / DSKERR - Issue error message, and wait for user to hit RETURN. Then / go to EOF to finish up and close files. / / Address of message is in AC on entry DSKERR, DCA DYSKE1 / set up for display CDFMYF / Back to our field. DYSKER, JMS PUTERR / Ring bell & display error msg. DYSKE1, .-. / arg1 JMS IPTCHR / Get an input character. TAD (-EDNWLN) / Return typed? SZA CLA / skip if yes. JMP DYSKER / Repeat message if not RETURN key. JMP EOF / Time to shut down!!! /---------- PAGE PTCHRS, XX / Routine to output a string of chars. PUTCH1, TAD I PTCHRS / Get next character to output. AND P177 / Isolate only the character bits. JMS OPTCHR / Output character. TAD I PTCHRS / Get character just output. ISZ PTCHRS / Bump to next char/return address. SPA CLA / Skip if last one was the last. JMP PUTCH1 / Go do next character. JMP I PTCHRS / Done! return to caller. / / / OPTCHR, XX / return address JMP OPTCH2 OPTCH1, CIFSYS JWAIT OPTCH2, CIFSYS TTYOU / output the char JMP OPTCH1 JMP I OPTCHR / return when done IFDEF OLDSPL < /A005 POSNCU, XX / Routine to init EDT pointers to start of / word & posn screen CURSOR. TAD SCURPT / Reinit text pointer. CDFEDT / CURPTR is in EDT field. DCA I (CURPTR) / ... TAD SCURSR / Reset cursor column address variable. DCA I (CURSOR) / .. TAD LINCNT / Reset cursor line address variable. CIA / DCA I (CURLIN) / "Current line number". CDFMYF / ... JMS ECPSCN / Call SETCUR to posn the cursor. JMP I POSNCU / return to caller. > / end ifdef OLDSPL /A005 /----------- / / GRAFXS - set graphics mode / / / CALL: JMS GRAFXS AC ignored & destroyed on return / / ESC ( 0 / /----------- GRAFXS, XX / return address PUTCHR; 4000+ESC / output escape sequence to the terminal 4000+"( / "0&177 / JMP I GRAFXS / return to caller /----------- / / GRAFXC - clear graphics mode / / / CALL: JMS GRAFXC AC ignored & destroyed on return. / / ESC ( B / /----------- GRAFXC, XX / return address PUTCHR; 4000+ESC / output escape sequence to the terminal 4000+"( / "B&177 / JMP I GRAFXC / return to caller /----------- / /SETRGN - Set scrolling region up. / / /CALL: JMS SETRGN AC ignored & destroyed on return. / / ESC [ 3 ; 11 r / /----------- SETRGN, XX / entry point. PUTCHR; 4000+ESC / define scrolling region from line 3 to 13 4000+"[ / Send escape sequence to terminal to 4000+"3 / From line 3, 4000+"; / ... 4000+"2 / to line /C003 4000+"2 / 22 /C003 "r&177 / terminator. JMS SETREL / Set ORIGIN mode to RELATIVE (relative to region). JMP I SETRGN / Return to caller. IFDEF OLDSPL < /A003 /----------- / / STMRGN - Set scrolling region for help menus. / / / CALL: JMS STMRGN AC ignored & destroyed on return. / / ESC [ 16 ; 24 r / /----------- STMRGN, XX / return address PUTCHR; 4000+ESC / output the escape sequence to the terminal 4000+"[ / define scrolling region 4000+"1 / from line 14, 4000+"4 / ... 4000+"; / to line 4000+"2 / 24 4000+"4 / ... "r&177 / JMP I STMRGN / return to caller > / end ifdef OLDSPL /A003 /----------- / /CLRRGN - Clear scrolling region upon exit. / / /CALL: JMS CLRRGN AC ignored & destroyed on return. / / ESC [ r / /----------- CLRRGN, XX / entry point. PUTCHR; 4000+ESC / Send escape sequence to terminal to 4000+"[ / undefine scrolling region. "r&177 / terminator. JMS SETABS / Set ORIGIN mode to absolute. JMP I CLRRGN / Return to caller. /----------- / /SETREL - Set ORIGIN mode to relative. / / /CALL: JMS SETREL AC ignored & destroyed on return. / / ESC [ ? 6 h / /----------- SETREL, XX / Entry point. PUTCHR; 4000+ESC / Send escape sequence to terminal. 4000+"[ / ... 4000+"? / ... 4000+"6 / ORIGIN mode "h&177 / relative. JMP I SETREL / Return to caller. /----------- / /SETABS - Set ORIGIN mode to absolute. / / /CALL: JMS SETABS AC ignored & destroyed on return. / / ESC [ ? 6 l / /----------- SETABS, XX / Entry point. PUTCHR; 4000+ESC / Send escape sequence to terminal. 4000+"[ / ... 4000+"? / ... 4000+"6 / ORIGIN mode "l&177 / absolute. JMP I SETABS / Return to caller. /----------- / /SAVCUR - Save cursor and attributes. / /CALL: JMS SAVCUR AC ignored and destoryed on return. / / ESC 7 / /----------- SAVCUR, XX / entry point. PUTCHR; 4000+ESC / Output escape sequence to save cursor & attr. "7&177 / ... JMP I SAVCUR /----------- / /RSTCUR - Restore cursor and attributes. / /CALL: JMS RSTCUR AC ignored and destoryed on return. / / ESC 8 / /----------- RSTCUR, XX / entry point. PUTCHR; 4000+ESC / Output escape sequence to restore cursor & attr. "8&177 / ... JMP I RSTCUR /----------- / / SETRV - Set screen to reverse video mode. / / / CALL: JMS SETRV AC is 0 on entry & return. / / ESC [ 7 m / /----------- SETRV, XX PUTCHR; 4000+ESC / Output escape sequence to set terminal attributes. 4000+"[ / 4000+"7 / "m&177 / JMP I SETRV / Return to caller. /----------- / / CLRRV - Reset screen of all attributes. / / / CALL: JMS CLRRV AC is 0 on entry & return. / / ESC [ 0 m / /----------- CLRRV, XX PUTCHR; 4000+ESC / Output escape sequence to set terminal attributes. 4000+"[ / 4000+"0 / "m&177 / JMP I CLRRV / Return to caller. /----------- / / STBOLD - set bold / / / CALL: JMS STBOLD AC ignored & destroyed on return. / / ESC [ 1 m / /----------- STBOLD, XX / return address PUTCHR; 4000+ESC / output escape sequence to the terminal 4000+"[ / 4000+"1 / "m&177 / JMP I STBOLD / return to caller /----------- / / STUNDR - set underline mode / / / CALL: JMS STUNDR AC ignored & destroyed on return. / / ESC [ 4 m / /----------- STUNDR, XX / return address PUTCHR; 4000+ESC / output escape sequence to the terminal 4000+"[ / 4000+"4 / "m&177 / JMP I STUNDR / return to caller /------ PAGE /---------- / / DISDOCNAME - / / This routine will display the document (name & number) / being corrected, centering it on the top line of the screen. / /---------- DISDOCNAME, XX / return address / /SB CIFTXT JMS I (CALIOA) / CLREOS / erase the screen 0 / line to start clearing from NOP / (filler) / CDFMNU /***** / data field to menu TAD I (MUBUF+MNDRV) / Get drive #. DCA DOCDRV / save for IOA. TAD I (MUBUF+MNDOCN) / Get document #. DCA DOCNUM / save that too. AC7777 TAD I (MUBUF+MNFNAM) / set up a pointer to the filename CDFMYF /***** / back to my field DCA X1 / and save the pointer TAD X1 / ... DCA X2 / and save a copy DCA T1 / initialize a counter for length of word / The following 2 routines position the cursor so that the / document name will be centered on the screen / First, find the length of the document name / DISDO1, CDFMNU /***** / data field to menu TAD I X1 / CDFMYF /***** / back to my field SNA CLA / skip if: have not found end of filename JMP DISDO2 / found end of name, exit ISZ T1 / bump counter JMP DISDO1 / and continue / / T1 now contains the length of the word, get the width of the screen / and find the starting location for the paint of the name / DISDO2, CDFEDT /***** / edit field TAD I (SPLTFL) / wide screen? CDFMYF /***** / my-field SZA CLA / skip if: normal screen TAD (32) TAD (45) DCA T2 / pointer to center of screen / TAD T1 / get document name length CLL RAR / divide length by 2 CIA / make negative TAD T2 / subtract from mid-screen DCA DISD2A / set up position to start paint from /SB CIFTXT JMS I (CALIOA) / ... PCURSTRING / ... DISD2A, .-. / ... NOP / (filler) /SB CIFTXT / Display '(drive.doc) ' JMS I (CALIOA) / ... DISTXT / text string. DOCDRV, 0 / drive # of the document. DOCNUM, 0 / document # of the document. DISDO3, / now display the document name CDFMNU /***** TAD I X2 CDFMYF /***** SNA JMP DISDO4 / JMS OPTCHR / output the character / JMP DISDO3 / continue with next / DISDO4, JMP I DISDOCNAME / return to caller /---------- / / SOLIDLINE - / / This routine will paint the 2 lines delimiting the scrolling region. / /---------- SOLIDLINE, XX / callers return address JMS GRAFXS / switch to grafix JMS SETCNT / set up counter for width of screen /SB CIFTXT JMS I (CALIOA) PCURSTRING 100 / position cursor to start of line 2 NOP / (filler) JMS LOOPS / display first line JMS SETCNT / set up counter for width of screen /SB CIFTXT JMS I (CALIOA) PCURSTRING 2600 / position cursor to start of line 26 /C003 NOP / (filler) JMS LOOPS / display second line JMS GRAFXC / restore SI JMP I SOLIDLINE / return to caller / / routine to print horizontal line (scan 5) to screen / LOOPS, XX / return address LOOPA, TAD (161) / horizontal line, (scan 5) JMS OPTCHR / print the char ISZ T1 / bump the character count JMP LOOPA / loop for more JMP I LOOPS / return to caller / / routine to set up counter for width of screen / SETCNT, XX CDFEDT / from edit field. TAD I (SPLTFL) / wide screen? CDFMYF / Back to current field. SZA CLA / skip if: narrow screen TAD (64) TAD (120) CIA DCA T1 / counter for number of prints JMP I SETCNT / return /---------- / / RVBKGRND - / / Reverse video the background of the menu line. / /---------- RVBKGRND, XX / return address JMS SETRV / set reverse video mode /SB CIFTXT JMS I (CALIOA) / position the cursor on the menu line PCURSTRING 2000 NOP / (filler) TAD MENULEN / length of menu line (-62) DCA T1 / set up as a counter TAD (ECSPC) / output spaces JMS OPTCHR / ... ISZ T1 / bump the character count JMP .-3 / loop 'till done JMS CLRRV / clear reverse video JMP I RVBKGRND / return to caller MENULEN, -62 / minus the length of the menu line /---------- / / MNUPNT - Paint the initial menu line / /---------- MNUPNT, XX / JMS RVBKGRND / reverse video the background of the menu line AC7777 / DCA OFFSET / clear display at start-up /SB JMS MENULINE / display the menu line JMP I MNUPNT / return /---------- PAGE IFDEF OLDSPL < /SB ECDOIN, XX / Routine to check for allowable insert & do it. /SB TAD NOINSR / Check for End-Of-Line encountered. /SB SZA CLA / Skip if not at End-Of-Line yet. /SB JMP INSERR / Report insert error (e-o-l reached). TAD T1 / Get character to insert. INSCHR / Insert char into document. SLNMOD / Set "modified" flag. TAD T1 / Get character back. TAD (-ECSTOV) / Start of "Dead Key Sequence"? SNA / Skip if no. JMP DOINS1 / Go handle start of DEAD-KEY-SEQUENCE. TAD (ECSTOV-ECNDOV) / End of "Dead Key Sequence"? SNA CLA / Skip if no. JMP DOINS2 / Jmp to process End of DEAD-KEY-SEQUENCE. TAD INSDKS / Are we currently in a DEAD-KEY sequence? SNA CLA / Skip if YES. JMP DOINS4 / No. go handle regular insert. BKPPTR / continue overstrike mode. See if prior char NOP / is END-OF-DEAD-KEY. TAD (-ECNDOV) / Check prior char for end-of-deadkey. SZA CLA / Skip if yes. insert char there instead. JMP DOINS3 / No. cancel dead-key seq. JMS ECPTCH / Cancel prior end-of-deadkey. ADVPTR / Advance to char just inserted. NOP / ... DOINS1, ADVPTR / Advance just beyond char just inserted. NOP / ... CLA TAD (ECNDOV) / Insert End-Of-Deadkey sequence char. INSCHR / ... ADVPTR / Advance beyond end-of-deadkey char just inserted. NOP / ... AC0001 / Say that we're in a dead-key sequence. JMP DOINS5 / done. DOINS2, JMS ECPTCH / Cancel redundant end-of-deadkey. CDFEDT / Bump cursor posn to next col. ISZ I (CURSOR) / ... CDFMYF / .... JMP DOINS5 / done. DOINS3, ADVPTR / Bump past char just inserted. NOP / ... CLA DOINS4, CIFEDT / Do rejustification (if necessary). CALEDT; CHKREJ / Call CHKREJ to see if rejustification CDFBUF / is appropriate. DOINS5, DCA INSDKS / Cancel/Set overstrike mode. /SB AC7777 / Check restart CURSOR/CURPTR for insert. /SB JMS CRSTRT / Check restart CURSOR/CURPTR. TAD T1 / Get prior char (ie. the one just inserted.) JMS TSTCHR / Check it's type. JMP DOINS6 / OTHER. See if we were at End-Of-Line. JMP DOINS7 / NUMERIC & JMP DOINS7 / ALPHA-ONLY are always insertable. DOINS6, JMS TSTLAG / See if on same line as word was on. JMP DOINS7 / YES. char does not define new E-O-L. ISZ NOMORE / We just inserted a new E-O-L definition. ISZ NOINSR / so stop further ADVANCE & INSERT. DOINS7, JMP I ECDOIN / Return to caller. Char is inserted & flags set. INSDKS, .-. /SBINSERR, JMS PUTERR / Display error. /SB ERREOL / "End of line reached" error message. /SB JMP ECFIX3 / Reset MODE to ADVANCE & get next input. /----------- PAGE PAGE > /END IFDEF OLDSPL /SB / Footnote I/O Buffer /A003 / Used to read/write footnote text from/to the scratch area on the/A003 / WPS Utility Diskette. /A003 FNIOBF, ZBLOCK 400 /A003 PCURST, TEXT /^P/ CLREOS, TEXT /^P!E/ DISTXT, TEXT /(^D.^D) / ERRFEM, IFDEF ENGLSH >).^S/> /M005 IFDEF ITALIAN>).^S/> ERRRWF, IFDEF ENGLSH /M005 IFDEF ITALIAN ERRUEF, IFDEF ENGLSH /M005 IFDEF ITALIAN ERRFSE, IFDEF ENGLSH /M005 IFDEF ITALIAN ERRFNR, IFDEF ENGLSH /M005 IFDEF ITALIAN ERRFNW, IFDEF ENGLSH /M005 IFDEF ITALIAN ERRHLT, IFDEF ENGLSH /M005 IFDEF ITALIAN< TEXT /^P&ANNULLO OPERAZIONE DOPO AVER PREMUTO !&ORO !&STOP.^S/> ERRIRC, IFDEF ENGLSH /A004 IFDEF ITALIAN ERRFCB, IFDEF ENGLSH /M010 IFDEF ITALIAN< TEXT /^P&DESCRITTORE RIGA NON VALIDO NEL BLOCCO DI CONTROLLO.^S/> PRSRTN, IFDEF ENGLSH /ARCM IFDEF ITALIAN / Footnote ruler buffer. Footnote ruler, if one exists, is stored here. /A005 FNRLBF, ECSTRL; ECMDRL / Beginning of footnote ruler /A005 ZBLOCK 50^3+2 / Storage for footnote ruler /A005 FNRLBE=. / Space for 40 settings + ruler end /A005 / Current ruler in effect at time footnotes are dumped is saved here. /A005 CURLBF, ECSTRL; ECMDRL / Beginning of storage for saved ruler /A005 ZBLOCK 50^3+2 / Storage for saved ruler /A005 CURLBE=. / Space for 40 settings + ruler end /A005 /----------- PAGE *6000 /HOPEFULLY TEMPORARY /SB OPENER, XX /CALLED TO OPEN POST PROCESSOR FILES /SB RDF /NEED TO FIND WAY BACK TO RIGHT FLD /SB TAD CIDF0 /GET BLANK FLD CHANGE INST /SB DCA OPENEX /PLUG INTO RETURN PATH /SB CDFMNU /OUTPUT FILENO IS IN MENUFLD /SB TAD I (MUBUF+MNFNO) /WHERE IT USUALLY IS /SB MQL /WPFILS EXPECTS IT IN MQ /SB TAD I (MUBUF+MNTMP1) /NEED T-B-O OPTION (0 1 -1) /SB CDFMYF /BACK HERE /SB CIFFIO;FILEIO;XDSKIN /OPEN FILE FOR INPUT OR OUTPUT /SB SPA;NOP;CLA /A LOT OF NECESSARY NOTHING /SB /NOWGET READY TO OPEN FILE FOR INPUT ONLY /SB TAD (XRDFNC) /NEXT 4 PAIRS ARE MAGIC FROM OVMRG1 /SB CDFEDT /MG LABELS ARE IN EDITOR /SB DCA I (MGPTC1) /SB CLA /SB TAD (SKP CLA) /SB DCA I (MGPTC2) /SB TAD I (MGPTC2) /AGAIN /SB DCA I (MGPTC3) /SB CLA /SB TAD (ESGETX&177+4600) /SB DCA I (MGPTC4) /SB TAD (FLINES / Get # lines in Footnote scroll region /A003 DCA I (SCRNLN / Store in edit screen size /A003 TAD (FLINES / /A003 DCA I (WIDSIZ / and in wide screen size, too /A003 CDFMNU /GET LAST FILENO /SB TAD I (MUBUF+MNFNO) /IE 'RESULT' FILE /SB CDFMYF /PUT NEAR SAVED INPUT FILE /SB DCA INFNO-1 / DCA I (OPENER+1) /IS CUB2+1 IN WPCUT /SB TAD 7500 / TAD I (OPENER) /SAVED INPUT FILE /SB CDFMNU /SB DCA I (MUBUF+MNFNO) /PLUG IN FOR FUTURE REFERENCES /SB CDFMYF /BACK HERE /SB TAD 7500 /NOW HERE /SB NOP /SB MQL /WPFILS EXPECTS IT HERE /SB CIFFIO;FILEIO;XRDFIN /OPEN FOR INPUT ONLY /SB SPA;NOP;CLA /IS THIS ALL NECESSARY /SB TAD INFNO-1 /RETRIEVE RESULT FILE # /SB CDFMNU /WANT TO PUT IT IN MNFNO /SB DCA I (MUBUF+MNFNO) /TO CONINCIDE WITH REMEMBERED FILE NAME /SB CDFMYF /DON'T LOSE TRACK OF WHERE WE ARE NOW /SB OPENEX, XX /GETS FILLED WITH RETURN CIF /SB JMP I OPENER /THAT'S ALL FOLKS /SB /---------- / / SCRNINIT - This routine sets up the initial screen display prior / to the start of the corrector portion of the feature. / / 1) Display the document name. / 2) Delimit the scrolling region by solid lines. / 3) Display the main menu line. / 4) Set up the scrolling region to range from lines 3 to 13. / 5) Pass control to the Main Scrolling Loop. / /---------- *6077 /******TEMP ****** /SB SCRNINIT, XX / save callers return address RDF / Get return field. TAD CIDF0 / Make a return CIF CDF instruction. DCA SCRNXT / save for the exit. CDFMYF / Map our field for the duration of our stay. JMS SETABS / Set screen orgin mode to ABSOLUTE. JMS DISDOCNAME / display and save document name JMS SOLIDLINE / paint the solid lines /SB TAD INEDIT / Are we currently in edit mode? /SB SZA CLA / Skip if no. Paint just paint menu line. /SB JMP SCRNI1 / Jmp if currently editting. /SB JMS MNUPNT / Paint the menu line. /SB JMP SCRNI2 / Merge below to finish up screen initialization. /SB /SBSCRNI1, JMS EFXMUP / Display 'editting' message. SCRNI2, JMS SETRGN / set up the scrolling region for the / document being corrected / SCRNXT, XX / Return CIF CDF goes here. JMP I SCRNINIT / return to caller /---------- PAGE *7500 /HOPEFULLY TEMPORARY /SB INFNO, 0 /TEMP /SB FIELD 3 /AUXILIARY FIELD *200 BUFADR, /BUFFER FOR I/O STARTS HERE ZBLOCK 400 /RESERVE 2 PAGES PAGE NOPUNCH / WINUTL - WINCHESTER UTILITY / / 014 EMcD 26-Sep-85 Add Spanish and Dutch Xlations (cond) / 013 EMcD 11-Sep-85 Add Nordic translations (conditional) / 012 RCME 20-JUN-85 Move some text to make space for more / / ------------------- All below refer to V2.0 and earlier -------------------- / / 011 WCE 16-NOV-84 Reset DECmate mode on Winnie boot / 010 DFB 20-SEP-84 Fix power on boot for non winnie systems / 009 DFB 21-AUG-84 Set boot to power boot on floppy / 008 AH 07-MAY-84 FIX, ENHANCE MESSAGES / 007 DFB 08-MAR-84 Fix password check for error vol bug / 006 DFB 21-FEB-84 Do not allow assign/deassign dev. 0 / 005 DFB 20-JAN-84 Fix display messages / 004 DFB 17-JAN-84 Fix display if no volume password / 003 DFB 12-DEC-83 Allow assign if bootable vol / 002 DFB 03-OCT-83 Set MNOPTN bit 9=0 drive 1=RX, / Set MNOPTN bit 9=1 drive 1=WINNIE / 001 DFB 29-AUG-83 NEW MODULE /*************************************************************************** /**** WRITE OUT CODE FOR WINUTL **** /*************************************************************************** FIELD 0 / FIELD WHERE RXHAN IS LOADED *200 / START ADDRESS USED BY OS8 "GO" COMMAND JMP I .+3 / LOCATION USED TO START UP RXHAN JMP I .+1 / LOCATION USED TO RETURN TO OS8 MONITOR 7605 / ADDRESS OF OS8 MONITOR RETURN POINT RXLOAD / ADDRESS OF START LOCATION FOR RXHAN *RXLDLS / ADDRESS WITHIN RXHAN TO OVERLAY RXEWT / WRITE FUNCTION CODE 0 RXQBLK / ADDRESS OF QUEUE BLOCK TO USE . / ADDRESS OF TABLE OF DISK COMMANDS DLWINI / STARTING DISK BLOCK TO WRITE 0 / WRITEOUT ON PAGE BOUNDARY /C061 CDF 10 / FIELD TO WRITE FROM -DSWINI / NEGATIVE NUMBER OF BLOCKS TO WRITE 0 / END OF LIST INDICATOR / THE ACTUAL ROUTINE FIELD 1 / FIELD FOR ASSEMBLY CDFMYF=CDF 30 / MY NORMAL FIELD OF OPERATION IS THREE CDFACP=CDF 70 / ACP FIELD PASSWD=1 / ENABLE PASSWORD CHECK PRQ3=6236 / PRQ3 CODE LENVOL=30 / LENGTH OF 1 VOL DIR 24 WORDS LONG LENNAM=10 / LENGTH OF VOLUME NAME LENRD=2 / LENGTH OF READ PASSWORD LENWRT=2 / LENGTH OF WRITE PASSWORD LENPBL=2 / LENGTH OF PHYSICAL BLOCK LENSIZ=2 / LENGTH OF NO BLOCKS LENOS=7 / LENGTH OF OS DEPENDENT DATA LENDE=1 / LENGTH OF ENTRY DATA BITS VOLNM=0 / START VOLUME NAME VOLRD=VOLNM+LENNAM / START OF READ PASSWORD VOLWRT=VOLRD+LENRD / START OF WRITE PASSWORD VOLPBL=VOLWRT+LENWRT / START PHYSICAL BLOCK NUMBER VOLSIZ=VOLPBL+LENPBL / START OF #BLOCKS L/O FIRST WRD VOLDE=VOLSIZ+LENSIZ / START OF DATA BITS; / 4=READ ACCESS; 5=WRITE ACCESS; 6=UNIT / 7=VOLUME MOUNTED; 9=STARTUP; 10=MODIFIED VOLDAT=VOLDE+LENDE / START OF VOLUME OS/ DATA / 4=BOOTABLE; 5-11=VOLUME TYPE, SEE BELOW WPS8=-10 / VALUES ARE NEGATIVE FOR USE IN TABLE /A008 OS278=-11 /A008 COS310=-12 /A008 CPM=-100 /A008 *100 VOLBUF, VOLTB2 / VOLUME TABLE POINTER / LEN= 60 VOLS*24 WORDS/VOL 2440(8) / PLUS ACTIVE VOLUME DATA / LEN= 8 VOLS*24 WORDS/VOL 300(8) VOLPTR, 0 / POINTER TO CURRENT POSITIONS / IN BUFFER MOUNTED VOLUME VOLPT2, VOLTB2-1 / POINTER TO MOUNTED VOLUME /D008 WINCNT, 0 / -NUMBER DRIVES COUNT /D008 MNTCNT, 0 / NO OF MOUNTED DEVICES RPASS2, 0 / READ PASSWORD H/O RPASS3, 0 / READ PASSWORD L/O WPASS2, 0 / WRITE PASSWORD H/O WPASS3, 0 / WRITE PASSWORD L/O WINJMP, JMPTBL-1 / JUMP TABLE JMPTBL, WINMV / A - MOUNT DEVICE... ASSIGN VOLUME WINDV / D - DISMOUNT DEVICE...DEASSIGN VOLUME WINSA / LA - LIST ASSIGNED VOLUMES WINSAL / LI - LIST ALL VOLUMES DATA SVX0, 0 / SAVE CURRENT POINTER SVX1, 0 / SAVE CURRENT POINTER SVPT2, 0 / SAVE SYSDEV, 0 / SYSTEM DEVICE..0=RX50..ELSE WINNIE /A006 WINPAS, 0 PASSER, 0 / READ PASSWORD ERROR SW BNTMP1, 0 / TMP PNTR BNTMP2, 0 / TMP PNTR BNTMP3, 0 / TMP PNTR BNCNT, 0 / COUNTER CRERSW, 0 / CR-ERROR-SW. IF SET CLEAR BOT LINE. / DONT GO TO LAST MENU /A004 /D008 PRTCNT, 0 / ODD=FIRST TIME EVEN=SECOND PRTL06, 6 / STARTING CURSOR POSITION /A008 WINTMP, 0 / TEMP STORAGE.. VOLTMP, 0 / TEMP STRCNT, 0 / INPUT STRING COUNT SAVENO, 0 / SAVE AREA NUMBER /A007 AREANO, 0 PRTHO, 0 PRTLO, 0 / LO MUST FOLLOW IMMEDIATELY AFTER H/O GTGMCR, PRTLS0 / GET CR OR G.M. ONLY K20, MNRX4X / =20 M7, -7 / CONST M10, -10 / CONST M9, M11, -11 / CONST MVLCHP, MVLCHQ / POINTER TO STRING BUFFER MVLCHX, 0 / SAVE CHAR PRTVOL, MVLCHR / POINTER TO VOLUME NAME PRTLNO, 3 / LINE NO BEING PROCESSED, SET BY / WINSA, WINSAL FROM PRTL06 CLRSCX, CLRSCR / CLEAR SCREEN /A008 PRTHDX, PRTHDR / PRINT HEADER FOR BOTH LISTS /A008 WINP7X, WINPT7 / ERROR MESSAGE ROUTINE /A008 WINP5X, WINPT5 /A008 WINWFX, WINWFT / RING BELL /A008 PRTLSX, PRTLST / RETURN, GOLD MENU MESSAGE /A008 QUBLK1, DSKQUE / 0 / 0 WINQBK, / QBLOCK- 0 / RXQCOD FLAGS RETURNED HERE 0 / RXQFNC FUNCTION CODE 0 / RXQDN1 0 / RXQDN2 0 / RXQENO 0 / RXQID1 0 / RXQSPC 0 / RXQCTL 0 / RXQDRV DRIVE NUMBER 0 / RXQBLK BLOCK NUMBER 0 / RXQRS1 0 / RXQBAD BUFFER ADDRESS CDFMYF / RXQBFD BUFFER FIELD CDF 0 / RXQTRK TRACK 0 / RXQSEC SECTOR X=. / INDICATE FIRST FREE LOCATION ON PAGE /-------------------- PAGE DSKBLK=.%400+DLWINI / DISK BLOCK WHERE PAGE IS LOADED / ENTRY TO WINNIE UTILITY / ENTERS WITH CODE IN MNTMP1 / 1=MOUNT VOLUME / 2=DISMOUNT VOLUME / 3=SHOW ALL MOUNTED AREAS / 4=SHOW ALL DIRECTORY DATA WINUTL, XX JMP WINMNU / CALLED FROM WINNIE MENU WINFIN, XX / CALLED FROM FINISH COMMAND(MAIN MENU) JMP WINFN1 WINFNA, XX / CALLED FROM FINISH COMMAND(MAIN MENU) JMP WINFNB WINMNU, JMS WINFLD / GET CALL FLD DCA RETCIF / STORE IT WNCRET, / WINCHESTER MENU RETURN JMS WINCLR / CLEAR BUFFER AREA CIFMNU JMS I MNUCAL / CALL DLMDUB / WINNIE MAINT MENU NOP / SPARE CLA IAC BSW / 100 JMS I CLRSCX / CLEAR SCREEN FROM LINE 1 /C008 CDFMNU / MENU FLD TAD I (MUBUF+MNTMP1) / GET ARGUMENT CDFMYF SNA / 0=GOLD MENU JMP WINRET / YES TAD WINJMP / SET UP JMP ADDR DCA WINTMP TAD I WINTMP DCA WINTMP / SET POINTER JMS I WINTMP / DOIT JMP WNCRET / TO WINCHESTER MENU MVGOLD, / GOLD MENU RET WINRET, RETCIF, 0 JMP I WINUTL WINFN1, JMS WINFLD / GET CALL FLD DCA RETCF1 / STORE IT JMS WINCHK / SKIP IF NO WINNIE ON LINE /A010 JMS DEALL / DEASSIGN ALL RETCF1, 0 JMP I WINFIN WINMV, XX / MOUNT A WINNCHESTER VOLUME CLA CLL CMA RAL / -2 DCA WINPAS / NO OF PASSWORD RETRIES BEFORE RETURNING TO MM DCA PASSER / PASSWORD ERROR SW WINMVA, JMS GETVOL / GET MOUNTED VOLUME DATA WINMVB, JMS WINPT1 PRC / "TYPE DEVICE NUMBER ... " JMS GTVERA / GET AREA NUMBER, VERIFY JMP WINMVB / ERROR INPUT; ONLY 1-7 ALLOWED JMP WINMVD / NOT MOUNTED WINMVC, JMS I WINP7X /C008 PRTER5 / "DEVICE ALREADY ASSIGNED ... " JMP WINMVB / AREA ALREADY MOUNTED WINMVD, JMS CLRLST / CLEAR LAST LINE /D008 WINMVE, /D008 TAD AREANO / DEVICE NO /D008 SNA CLA / =0? /D008 JMP WINMVB / YES CANNOT MOUNT DRIVE 0 WINMVF, /D008 JMS WINPT1 JMS WINP31 / "TYPE VOLUME NAME ... " /A008 /D008 PRTMVB JMS WINNAM / GET VOLUME NAME SKP / ALREADY MOUNTED JMP WINMVG / NOT ALREADY MOUNTED JMS I WINP7X /C008 PRTER6 / "VOLUME ALREADY ASSIGNED. ... " JMP WINMVF / VOLUME ALREADY MOUNTED WINMVG, JMS CHKVOL / IS VOL NAME VALID? JMP WINMVF / NO. MSSGE PRINTED ALREADY. GET NEXT VOL. WINMVH, JMS CLRLST / CLEAR LST LINE JMS MOVNAM / MOVE NAME TO PRINT AREA /M004 WINMVK, JMS ZERPAS / CHECK PASSWORD=0 /A003 JMP WINMVL / PASSWORD=0 IGNORE /A003 JMS WINPT1 PRTMVC / "ENTER READ PASSWORD ... " JMS GETBIN / GET PASSWORD ISZ PASSER / RET HERE IF ERROR ON READ PASSWORD TAD T3 DCA RPASS3 / LO PASSWORD TAD T2 DCA RPASS2 / HO PASSWORD JMS WINPT1 PRTMVD / "ENTER WRITE PASSWORD ... " JMS GETBIN / GET PASSWORD ISZ PASSER / RET HERE IF ERROR ON WRITE PASSWORD TAD T2 DCA WPASS2 / SAVE TAD T3 DCA WPASS3 JMS CHKPAS / CHECK PASSWORD TAD PASSER / WAS READ PASS AN ERROR SZA CLA / ADDS 1 LEVEL OF PROTECTION JMP WINMVN / WAS AN ERR. WINMVL, TAD SVX0 / POINTER TO VOL PASSWRD-1 /C003 TAD (-VOLRD+1) / SET TO VOLUME NAME IN U.CASE JMS WINIO RDEMNT+4000 / WINNIE MOUNT CMND IAC JMS WINSET / SET TABLE AS MOUNTED WINNIE TAD (VOLSAR) DCA X0 / SET FOR PRINT JMS WINPT3 PRTMVE / "VOLUME IS ASSIGNED TO DEVICE" JMP WINMVQ WINMVN, DCA PASSER / CLEAR PASSWORD ERROR SW JMS WINPTF / "READ/WRITE PASSWORD ERROR" /C005 /D005 PRTER7 ISZ WINPAS / RETRY COUNT /D008 JMP WINMVK / DO IT AGAIN JMP WINMVR / WAIT FOR CR (GM MAYBE) /A008 /D008 JMP I WINMV / ERROR RETURN; WAIT FOR USER ENTRY WINMVQ, JMS I PRTLSX / PRINT MSSG FOR CR OR GOLD MENU /C008 JMS I GTGMCR / GET IT ISZ WINMV / CAR RET ENTERED JMP I WINMV / WAS G.M.-RET WINMVR, / WAIT FOR CR (GM) AFTER FIRST /A008 / WRONG ENTRY /A008 JMP .+2 / NO BELL ON ENTRY /A008 JMS I WINWFX / BELL /A008 JMS I GTGMCR / GET GM OR CR /A008 JMP .-2 / GM NOT ALLOWED, RING BELL /A008 JMP WINMVK / CR, TRY AGAIN /A008 X=. / INDICATE FIRST FREE LOCATION ON PAGE /-------------------- PAGE DSKBLK=.%400+DLWINI / DISK BLOCK WHERE PAGE IS LOADED WINDV, XX / WINNIE DISMOUNT A VOLUME WINDVA, CLA IAC BSW / 100 JMS I CLRSCX /C008 JMS GETVOL WINDVB, JMS WINPT1 PMA / "...AREA TO DISMOUNT.. JMS GTVERA / GET AREA # AND VOL NAME JMP WINDVB / ERROR AREA NO JMP WINDVS / AREA IS NOT MOUNTED-- RETURN TAD VOLPTR / AREA IS MOUNTED DCA X1 /D008 TAD M7 TAD M10 /A008 DCA T3 / SET UP TO MOVE TO PRINT AREA TAD X1 / POINTER TO VOLUME DCA WINPTD / SET IT UP JMS MOVT01 / X0 TO X1 JMS WINPTB / "VOLUME NAME ^A ASSIGNED TO DEVICE !D" JMS WINPT9 / "IS THIS THE VOLUME YOU WANT TO DEASSIGN" JMS I PRTLSX / "PRESS RETURN ... " /C008 WINDVG, JMS WNYORN / GET "Y" OR "N" JMP WINDVA / "N" RET JMP WINDVP / NOT "Y" OR "N" / "Y" RET TAD AREANO DCA WINQBK+RXQDRV / SET DRIVE TO BE DISMOUNTED TAD PRTVOL DCA WINQBK+RXQBAD / VOL NAME ADDRESS /D011 TAD MYFLD1 / PICK UP CDF INSTRUCTION TO THIS FIELD /C011 /D011 DCA WINQBK+RXQBFD / BUFFER FIELD TAD (RDEDIS+4000) / DISMOUNT COMMAND FUNCTION CODE /D011 DCA WINQBK+RXQFNC JMS QURX / DOIT JMP WINDVR / ERROR JMS WINSET / CLEAR MOUNTED BIT <11> TAD WINPTD DCA X0 / SET POINTER TO VOL FOR PRINT JMS WINPT3 PRTDME / "VOLUME HAS BEEN DEASSIGNED FROM DEVICE" JMS I PRTLSX / PRINT MSSG FOR CR OR GOLD MENU /C008 JMS I GTGMCR / GET IT ISZ WINDV / CAR RET ENTERED JMP I WINDV / WAS G.M.-RET WINDVP, /D008 JMS WINPT5 /D008 PRTER3 / ILLEG CHAR JMS I WINWFX / NOT Y OR N, RING BELL /A008 JMS I PRTLSX / CR GM OPTION /C008 JMP WINDVG /Y OR N WINDVR, JMS I WINP5X /C008 PRTER4 / DISK ERROR JMP WINDVB WINDVS, JMS I WINP5X /C008 PRTER2 / "NOT MOUNTED TO A VOLUME" JMP WINDVB WINSA, XX / SHOW ALL MOUNTED VOLUMES....LA JMS GETVOL / GET VOLUME DATA JMS I PRTHDX / PRINT HEADER /C008 /D008 IAC TAD PRTL06 /A008 DCA PRTLNO / SET RELATIVE LINE NO. /D008 DCA PRTCNT / CLEAR SWITCH TAD VOLPT2 / START OF BUFFER POINTER WINSA1, DCA VOLTMP /M006 TAD VOLTMP / GET POINTER TO TABLE DCA X0 TAD I X0 SMA / ENTRY HERE? JMP WINSA3 / YES CLA TAD X0 TAD (LENVOL) JMS I PRTLSX / PRINT MSSG FOR CR OR GOLD MENU /C008 JMS I GTGMCR / GET IT ISZ WINSA / CAR RET ENTERED JMP I WINSA / WAS G.M.-RET WINSA3, JMS WINSA7 / SET PRINT AREA JMP WINSA1 / NEXT / GET 1 LINE OF INPUT / IF CR RET / IF GOLD MENU RET+1 / ELSE RET+2 / ARG PASSED = MAX # INPUT CHARS / IN ORDER TO PRINT MSSG WITH OVFLOW CHAR MUST BE INCREMENTED / THEN CHECKED ON NORMAL RET.. ELSE NOT PUT INTO BUFFER MVLLIN, XX TAD I MVLLIN / GET INPUT STR COUNT DCA STRCNT ISZ MVLLIN MVLLN1, CIFMNU JMS I INACAL / GET A LINE MVLLN2, MVLCHQ / POINTER TO BUFFER...1ST LOC=-CNT OF CHARS+1 JMP MVLLN4 / OVFLOW ERR OR GOLD CHAR TAD I PRTVOL /1ST CHAR OF STRING /C008 SZA CLA /=CR? /C004 JMP MVLLN3 / NO-CHK LNGTH OF STRING /C004 TAD CRERSW / IS CR AFTER ERROR? /A004 SNA CLA /A004 JMP I MVLLIN / NO JMS CLCRER / CLEAR BOTTOM LINE AND ERROR SW /A004 JMP MVLLN1 / GET NEXT LINE /A004 MVLLN3, MQA TAD STRCNT SMA CLA / STRING TOO LONG JMP MVLLN5 / YES JMP MVLLN7 / NO MVLLN4, TAD (-EDMENU) SNA CLA / =GOLD MENU? JMP MVLLN8 / YES MVLLN5, TAD I MVLLN2 / GET LINE CHAR COUNT JMS MVLERM / ERROR MESSAGE JMP MVLLN1 / NEXT MVLLN7, ISZ MVLLIN / SET NORMAL RET MVLLN8, ISZ MVLLIN / GOLD MENU RET JMP I MVLLIN / RET WINFLD, XX CLA RDF TAD CIDF0 MYFLD1, CDFMYF / CDF INSTRUCTION TO THIS FIELD /C011 JMP I WINFLD X=. / INDICATE FIRST FREE LOCATION ON PAGE /-------------------- PAGE DSKBLK=.%400+DLWINI / DISK BLOCK WHERE PAGE IS LOADED WINSAL, XX / SHOW ALL VOLUMES...LI JMS GETVOL / GET VOLUME DATA JMS I PRTHDX / PRINT HEADER /C008 IAC / PASS DEV # TAD VOLPTR DCA WINQBK+RXQBAD / BUFF. ADDR DCA WINQBK+RXQDRV / DEVICE # /D011 TAD MYFLD2 / GET CDF INSTRUCTION TO THIS FIELD /C011 /D011 DCA WINQBK+RXQBFD / BUFFER FIELD TAD (RDEGTD+4000) / GET DIRECTORY DATA FUNCTION CODE /D011 DCA WINQBK+RXQFNC JMS QURX JMP I WINSAL / ERROR TAD VOLPTR / PTR TO DIR DATA DCA SVX0 / CURRENT POINTER /D008 IAC TAD PRTL06 / STARTING CURSOR POSITION /A008 DCA PRTLNO / SET RELATIVE LINE NO. /D008 DCA PRTCNT / CLEAR IT DECIMAL /A008 TAD (-12) / LINE COUNT /A008 OCTAL /A008 DCA LINCNT WINSAA, TAD SVX0 DCA X0 / CURRENT POINTER TO DIR DATA TAD I X0 SNA / END DIR BUF AREA? JMP WINSXX / PRINT GOLD MENU MSSG CIA / NEG TAD P377 SNA CLA / DELETED IN MASTER MENU? JMP WINSAJ / YES IGNORE; BUMP POINTER TO NEXT ENTRY TAD VOLPT2 JMP WINSAC WINSAB, TAD SVPT2 TAD (LENVOL+1) / SET TO NEXT WINSAC, DCA SVPT2 DCA AREANO / CLEAR IT TAD SVX0 DCA X0 / CURRENT POINTER TO DIR DATA TAD SVPT2 DCA X1 / CURRENT POINTER TO MOUNTED VOL TBLE TAD I X1 / AREA # SPA / END OF AREA? JMP WINSAH / YES LAST ENTRY DCA AREANO / SET IT FOR DISPLAY JMS CMPVOL / NO-COMPARE TO ENTRY IN BUFFER; VOLUME NAMES JMP WINSAB / NOT EQUAL JMS WINSAE / DELETE A VOLUME FROM LIST WINSAH, CLA TAD SVX0 DCA X0 TAD AREANO / GET FOR DISPLAY JMS WINSA7 / ON PRINT LINE DCA VOLTMP / INCREMENTED AT WINSA8 /A006 ISZ LINCNT / TIME FOR NEXT SCREEN MSG? /A008 JMP WINSAJ / NO, NORMAL CONTINUE /A008 JMS PRTNXT / NEXT SCREEN, C.R., G.M. AND REPLY /A008 JMP WINSXX / NO MORE TO PRINT, NORMAL EXIT /A008 JMP WINNXT / NEXT SCREEN ENTERED /A008 JMP WINSXY / GOLD MENU /A008 JMP WINSXZ / RETURN /A008 WINSAJ, TAD SVX0 TAD (LENVOL) DCA SVX0 / SET TO NEXT ENTRY JMP WINSAA / NEXT WINSXX, CLA JMS PRTLST / PRINT MSSG FOR CR OR GOLD MENU JMS I GTGMCR / GET IT WINSXY, ISZ WINSAL / CAR RET ENTERED /C008 WINSXZ, JMP I WINSAL / WAS G.M.-RET /C008 WINNXT, JMS I PRTHDX / PRINT HEADER ON NEW SCREEN /A008 DECIMAL /A008 TAD (-12) / SET LINE COUNT /A008 OCTAL /A008 DCA LINCNT /A008 TAD PRTL06 / RESET CURSOR POSITION /A008 DCA PRTLNO /A008 JMP WINSAJ / AND CONTINUE /A008 LINCNT, 0 / LINE COUNTER FOR NEXT SCREEN /A008 WINSAE, XX / DELETE A VOLUME FROM THE ACTIVE VOLUME LIST TAD SVPT2 DCA X0 / SET TO DELETE VOLUME FROM MOUNTED AREA TAD SVPT2 TAD (LENVOL+1) / SET TO END OF THIS VOLUME + AREA NUM DCA X1 WINSAF, TAD I X1 SPA / END OF AREA? JMP WINSAG / YES DCA I X0 / NO STORE IT JMP WINSAF / REPEAT WINSAG, DCA I X0 / SET END JMP I WINSAE / SET WINNIE CODE IN TABLE 4000=WINNIE DEVICE / 1=MOUNTED / ADDS 4000 TO AC THEN SETS INTO DEVICE TABLE IN ACP / RXSTRT+1=POINTER TO STRT TABLE +DEV NO = LOCATION FOR DEVICE WINSET, XX MQL / SAVE MOUNT/DISMOUNT CODE /A002 CLA CMA /A002 TAD WINQBK+RXQDRV / DRIVE# /A002 SZA CLA / MOUNTING/DISMOUNTING DRIVE 1? /A002 JMP I WINSET / NO /A002 MQA / GET CODE /A002 CLL RTL / TO BIT 8 /A002 RAL /A002 MQL / SAVE IT /A002 CDFMNU / MENU FLD /A002 TAD I (MNOPTN+MUBUF) / OPTN CODE /A002 AND K7767 / CLEAR BIT 8 /A002 MQA / CLEAR/SET IT /A002 DCA I (MNOPTN+MUBUF) /A002 MYFLD2, CDFMYF / CDF INSTRUCTION TO THIS FIELD /C011 JMP I WINSET / RETURN K7767, 7767 PRTER1, IFDEF ENGLSH /A008 IFDEF ITALIAN /A008 IFDEF V30NOR /A013 IFDEF V30SWE IFDEF DUTCH IFDEF SPANISH X=. / INDICATE FIRST FREE LOCATION ON PAGE /-------------------- PAGE DSKBLK=.%400+DLWINI / DISK BLOCK WHERE PAGE IS LOADED / GET AREA NUMBER AND VOLUME NAME AND VERIFY / RET+0 IF ERROR ELST RET+1 GTVERA, XX TAD VOLPT2 / MOUNTED VOLUME TABLE DCA X0 TAD M7 DCA T3 / COUNT FOR MAX VOL NAME SIZE JMS MVLLIN / GET LINE -2 / STRING COUNT JMP MVCRET / CARRIAGE RET JMP MVGOLD / IS A GOLD MENU TAD I PRTVOL / CHAR /C008 TAD (-60) / SET TO BIN DCA WINTMP TAD WINTMP / GET DEV NUM. /C008 SNA / TRYING TO ASSIGN/DEASSIGN DEV. 0? /A006 JMP GTVERB / YES.......ERROR /A006 TAD M10 / IS DEV NUMBER G.T. 7 /C008 SPA CLA / .LE. 7? /C008 JMP GTVERC / OK CONT GTVERB, JMS I WINP5X / ERROR /C008 /D008 PRTER1 PRTERA / CHOOSE 1-7. ... /A008 JMP I GTVERA / ERROR RET. C+1 GTVERC, ISZ GTVERA / C+2 TAD WINTMP DCA AREANO / AREA NUMBER JMS GETNAM / CHECK IF AREA ALREADY MOUNTED JMP I GTVERA / AREA NUM NOT FOUND IN MOUNT TABLE. C+2 ISZ GTVERA / FOUND AREA # IN MOUNTED VOLUME TABLE JMP I GTVERA / C+3 / SET PRINT BUFFERS / ENTERS WITH AC=AREA # AND X0 POINTER TO VOLUME TABLE WINSA7, XX DCA AREANO / SET TO PRINT DEVICE NO. TAD (-10) / CHECK FOR DEVICE 10..FOR SOME REASON /A006 TAD AREANO /..IT SHOWS UP WHEN BOOTING FROM WINNIE /A006 SNA CLA / IS IT 8?...(THINK FIRMWARE SENDS IT) /A006 JMP WINSA8 / YES IGNORE IT...DOESNT HAPPEN W/FLOPPY BOOT/A006 TAD (VOLSAR-1) DCA X1 / SET TO VOLUME NAME TAD (-LENNAM) / LENGTH DCA T3 JMS MOVT01 / MOV FROM X0 TO X1 WHERE T3=COUNT TAD X0 TAD (VOLSIZ-VOLRD) / PTR SET TO VOLUME SIZE/16 DCA X0 TAD I X0 DCA T3 / LOW ORDER COUNT TAD I X0 / HIGH ORDER DCA T2 / JMS MULT16 / MULT T2-T3 * 16 TAD T3 CLL RTL / *8 RTL / *16 DCA T3 / FORMAT WAS 8BITS H/O 8BITS L/O / SHIFT L/O IS = DIV/16 DECIMAL TAD (999) OCTAL DCA NUMBLO / DIVISOR JMS DBLDVD / DIVIDE T2-T3 BY 999 TAD T3 / GET QUOTIENT DCA PRTHO / SET TO PRINT H/O TAD NUMBLO / GET REMAINDER(L/O) DCA PRTLO / SET TO PRINT L/O TAD PRTLNO / LINE NO TO DISPLAY BSW / TO H/O TAD (05) / CURSOR POSITION; COLUMN 05 FOR DEVICE /A008 DCA PRTLN2 /D008 TAD PRTCNT / SW--EVEN=FRST TIME FOR LINE /D008 RAR /D008 SZL CLA / FRST TIME? /D008 TAD (46) / NO SET COL AT END /D008 TAD (402) / SET UP FIRST LINE /D008 TAD PRTLN2 /D008 DCA PRTLN2 TAD PRTLN2 TAD (17) / COLUMN 24 FOR BLOCKS /C008 DCA PRTLN3 / CURSOR POSITION FOR BLOCKS /D008 SZL /1ST TIME TO PRINT LINE ISZ PRTLNO / NO INCREMENT LINE NO /D008 ISZ PRTCNT / NEXT LINE SW JMS PRTLN1 / DISPLAY LINE WINSA8, ISZ VOLTMP /A006 TAD VOLTMP TAD (LENVOL) / SET TO NEXT VOL /D006 DCA VOLTMP JMP I WINSA7 / RET MOVNAM, XX / MOVE NAME FROM INPUT BUFFER TO SET FOR PRINT TAD MVLCHP DCA X0 / FROM STRING PTR TAD (VOLSAR-1) DCA X1 / TO STRING POINTER TAD M9 / COUNT DCA T3 JMS MOVT01 / FROM X0 TO X1 JMP I MOVNAM / RET / / GET INPUT CHECK FOR "Y" OR "N" / "N" = NORMAL RET / NOT "Y" OR "N" = RET+1 / "Y" = RET+2 WNYORN, XX JMS MVLLIN / GET LINE -4 / STRING COUNT JMP MVCRET JMP MVGOLD TAD I PRTVOL / GET CHAR /C008 AND (337) / SET UPPER CASE TAD (-"N+200) SNA / =N? JMP I WNYORN / "N" RET IFDEF ENGLSH < TAD (-"Y+"N) > IFDEF ITALIAN < TAD (-"S+"N) > IFDEF DUTCH < TAD (-"J+"N) > IFDEF V30NOR < TAD (-"J+"N) > IFDEF V30SWE < TAD (-"J+"N) > IFDEF SPANISH < TAD (-"S+"N) > SNA CLA / =Y ISZ WNYORN / SET YES RET ISZ WNYORN / NOT Y OR N RET JMP I WNYORN / RET MVCRET, CLA / SET MNTMP2 TO 0 RETURN TO WINNIE MENU MVGLDA, CDFMNU DCA I (MUBUF+MNTMP2) CDFMYF JMP WNCRET X=. / INDICATE FIRST FREE LOCATION ON PAGE /-------------------- PAGE DSKBLK=.%400+DLWINI / DISK BLOCK WHERE PAGE IS LOADED / / MOUNT CHECK--CHECKS NAME STORED IN PRTVOL / AGAINST VOLUME MOUNTED TABLE / RET+0 =NO MATCH RET+1=MATCH(ALREADY MOUNTED) MNTCHK, XX TAD X1 DCA SVX1 TAD VOLBUF / POINTER TO MOUNTED VOLUME TABLE MNTCK2, DCA SVX0 TAD SVX1 DCA X1 TAD SVX0 / SAVE CURRENT POINTER DCA X0 TAD I SVX0 / GET DEVICE? SPA CLA / END OF MOUNTED VOLUME TABLE JMP I MNTCHK / MATCHES ISZ LCCLUG / LOWER CASE IGNORE CLUDGE JMS CMPVOL / CHECK IF VOLUME ALREADY MOUNTED SKP / NO JMP MNTCK3 / YES TAD SVX0 TAD (LENVOL+1) JMP MNTCK2 / NEXT VOL MNTCK3, ISZ MNTCHK JMP I MNTCHK PADNAM, XX / PADNAM PADS TABLE WITH SPACES MQA / GET COUNT TAD MVLCHP / START ADDRESS-1 DCA X0 / SET IT MQA / GET COUNT TAD M10 / SET TO LAST CHAR-1 SNA / FULL? JMP PADNM2 / YES DON'T NEED PAD DCA T3 PADNM1, TAD (" -200) / SPACE DCA I X0 ISZ T3 / END? JMP PADNM1 / NO PADNM2, DCA I X0 / SET 0 TERMINATOR FOR PRINT. TAD MVLCHP / PNTR TO NAME DCA X1 / RESET TAD M10 DCA T3 JMP I PADNAM / GET VOLUME AREA FROM DISMOUNT TABLE / VOLUME NUMBER IN AREANO / RETURNS WITH X0 POINTING TO NAME GETNAM, XX TAD VOLPT2 GETNM1, DCA X0 TAD I X0 SPA JMP GETNM9 / END TABLE CIA TAD AREANO SNA CLA / FOUND? JMP GETNM7 / YES TAD X0 TAD (LENVOL) / SET TO NEXT JMP GETNM1 GETNM7, ISZ GETNAM / SET FOUND RET GETNM9, CLA JMP I GETNAM IFDEF PASSWD < / GET DEC NO FROM KEYBOARD AND CONVERT IT TO BIN DBLE PREC. ADDED TO T2-T3 / GET DBLE PREC. # IN T2 T3. / RETURNS WITH H/O IN T2 L/O IN T3 GETBIN, XX DCA T2 / CLEAR DCA T3 GETBN1, JMS MVLLIN / GET LINE -106 / STRING COUNT JMP MVCRET / CARRIAGE RET JMP MVGOLD / IS A GOLD MENU GETBN2, MQA / CHAR COUNT SNA / ONLY CRET? JMP MVCRET / YES CIA / NEG DCA GETCNT / COUNTER TAD MVLCHP / ADDRESS OF BUFFER DCA X3 GETBN3, TAD I X3 / GET CHAR TAD (-"0+200) SPA / L.T. 0? JMP GETBNM / YES EXIT TAD (-"9+"0) SMA SZA / G.T.9? JMP GETBNM / YES TAD ("9-"0) / SET TO BINARY DCA BNTMP1 TAD M11 / -9 DEC DCA BNCNT / COUNT / MULTIPLY T2--T3 BY 10 / MULT23, 0 TAD T2 DCA BNTMP2 / SAVE TAD T3 DCA BNTMP3 / LO MULTLP, TAD T3 TAD BNTMP3 / ADD TO ITSELF DCA T3 RAL / CARRY BIT TAD T2 TAD BNTMP2 /H/O DCA T2 TAD T2 / AND K20 SZA CLA / G.T. 65000? JMP GETBNM / YES =ERROR ISZ BNCNT / COUNT JMP MULTLP / LOOP TAD T3 TAD BNTMP1 DCA T3 / SET IT RAL / SHIFT IN CARRY TAD T2 DCA T2 / CHAR ADDED TO T2,T3 ISZ GETCNT JMP GETBN3 / NEXT GETBN5, ISZ GETBIN / SET RETURN JMS SHIFT4 / SHIFTS H/O 4 BITS IN T3(LO WRD) / TO L/O 4 BITS IN T2(HO) GETBNM, CLA JMP I GETBIN / RET GETCNT, 0 / CHAR COUNTER > / END IFDEF PASSWD CLRLST, XX / CLEAR BOTTOM LINE OF SCREEN TAD (3000) / POINTER JMS I CLRSCX / DO IT /C008 JMP I CLRLST X=. / INDICATE FIRST FREE LOCATION ON PAGE /-------------------- PAGE DSKBLK=.%400+DLWINI / DISK BLOCK WHERE PAGE IS LOADED / DIVIDE T2-T3 BY NUMBLO LEAVING QUOTIENT IN T3 AND REM IN NUMB / USES T2-T3 NUMBLO DBLDVD, XX DCA PSMQHI DCA PSMQLO TAD (-31) DCA MQCNT TAD NUMBLO CLL CMA CML DCA NUMBLO RAL TAD NUMBHI CLA CMA CML DCA NUMBHI JMP DBDV2 DBDV1, TAD PSMQLO RAL DCA PSMQLO TAD PSMQHI RAL DCA PSMQHI TAD PSMQLO TAD NUMBLO MQL RAL TAD PSMQHI TAD NUMBHI SNL JMP DBDV2 DCA PSMQHI MQA DCA PSMQLO DBDV2, CLA TAD T3 RAL DCA T3 TAD T2 RAL DCA T2 ISZ MQCNT JMP DBDV1 TAD PSMQLO DCA NUMBLO TAD PSMQHI DCA NUMBHI JMP I DBLDVD /VARIABLES FOR MULT/DIV /SUBR----NEGATE NUMB PSMQHI, 0 PSMQLO, 0 MQCNT, 0 NUMBHI, 0 NUMBLO, 0 / /SHIFT4 ROUTINE....CONVERTS PASSWORD CONTAINED IN T2(L/O 4 BITS OF H/O WORD) / ............................. AND T3(12 BITS OF L/O D.P. WORD) / ..............INTO 2 8 BIT WORDS H/O IN T2 LO IN T3 SHIFT4, XX TAD (-4) / SHIFT COUNT DCA SHFTCT TAD T2 / H/O MQL TAD T3 / L/O SHFTNX, CLL RAL / SHIFT L/O LNK BIT NOT MATTER HERE SWP / GET H/O RAL / INTO BIT 11 SWP / RESET BACK ISZ SHFTCT / DONE? JMP SHFTNX / NO CLA TAD T3 / GET UNSHIFTED L/O WRD AND P377 / YES CLEAR BITS 0-3 L/O WORD DCA T3 / RESET CLA SWP / GET H/O DCA T2 / RESET JMP I SHIFT4 SHFTCT, 0 / TEMP STORE / CHKVOL ROUTINE READS IN DIRECTORY DATA / VERIFIES THAT THE VOLUME NAME IS VALID / IF VOLUME NAME NOT FOUND IT PRINTS ERROR MESSAGE AND RETURNS RET+0 / IF VOLUME NAME VALID IT RETURNS RET+1 / SVX0 LEFT POINTING TO PASSWORD CHKVOL, XX TAD VOLBUF / BUFFER DCA WINQBK+RXQBAD TAD (RDEGTD) / GET DIRECTORY DATA FUNCTION CODE /D011 DCA WINQBK+RXQFNC JMS QURX / DO IT JMP CHKVL2 / IO ERROR TAD VOLPT2 / BUFFER-1 CHKNXT, DCA X0 IAC / SET UP BUFFER TAD X0 DCA SVX0 / SAVE IT TAD MVLCHP / POINTER TO START OF NAME VOLUME-1 DCA X1 ISZ LCCLUG / LOWER CASE IGNORE CLUDGE JMS CMPVOL / VOLUME IN TABLE=VOLIME TO BE MNTED SKP / NO CHECK TABLE END JMP CHKVL1 / FOUND VOLUME..X0 POINTS TO PASSWORD-1 TAD I SVX0 / FIRST CHAR OF NAME SNA CLA / 0=END TABLE JMP CHKVL0 / ERROR TAD SVX0 TAD (LENVOL-1) / SET TO NEXT BUFFER -1 JMP CHKNXT / DO IT CHKVL0, JMS I WINP7X / PRINT ERROR MESSAGE /C008 PRTER8 / "^P ^A NOT A VOLUME NAME. ... " JMP CHKVL2 / ERR RET CHKVL1, TAD X0 / POINTES TO READ PASSWORD-1 DCA SVX0 TAD SVX0 TAD (VOLDAT-VOLRD+1) / SET POINTER TO OS/WPS DATA DCA SHFTCT / TEMP TAD (10) / -(WPS-8) CODE BIT /C003 AND I SHFTCT / REQUESTED VOLUME CODE /C003 SZA CLA / =WPS-8? /C003 JMP CHKVL3 / YES JMS I WINP7X / NO PRINT ERR MESSAGE /C008 PRTER9 / "NOT A WPS VOL ... " CHKVL2, TAD AREANO / SAVE IT AS GETVOL RESETS IT /A007 DCA SAVENO /A007 JMS GETVOL / RESET MOUNTED VOLUME DATA /A006 TAD SAVENO / GET IT BACK /A007 DCA AREANO / /A007 JMP I CHKVOL / RET CHKVL3, ISZ CHKVOL / SET NORMAL RET JMP I CHKVOL X=. / INDICATE FIRST FREE LOCATION ON PAGE /-------------------- PAGE DSKBLK=.%400+DLWINI / DISK BLOCK WHERE PAGE IS LOADED / CHKPAS ROUTINE ENTERS WITH SVX0 POINTING TO PASSWORD FOR DESIRED VOLUME / .... IT THEN CHECKS THE PASSWORD FOR THAT VOLUME AGAINST THE / .... ONE ENTERED.. IF ERROR IT SETS PASSER CHKPAS, XX TAD SVX0 DCA X0 TAD I X0 / GET L/O PASSWORD CIA TAD RPASS3 SZA CLA / =? JMP CHKPEE / NO TAD I X0 / GET H/O PASSWORD CIA TAD RPASS2 SZA CLA / =? JMP CHKPEE / NO TAD I X0 / GET L/O PASSWORD CIA TAD WPASS3 SZA CLA / =? JMP CHKPEE / NO TAD I X0 / GET H/O PASSWORD CIA TAD WPASS2 SZA CLA / =? CHKPEE, ISZ PASSER / SET ERROR JMP I CHKPAS WINFNB, / FINISH COMMAND /D009 JMS WINFLD / GET CALL FLD /D009 DCA RETCF2 / SET RET FLD SETPRQ, / BOOT WINNIE OR RX50D TAD (MNRX5X+MNRX4X) / WINNIE FIRMWARE BIT 6 OR SYS DEV = WINNIE/C009 CDFMNU AND I (MUBUF+MNOPTN) / STATUS WORD CDFMYF CLL RTR / SHIFT DRV 0 WINNIE BIT /A009 SNA CLA / WINNIE FIRMWARE? /C009 JMP POBOOT / NO DO POWER ON BOOT /C009 SZL / IS DRIVE 0 = WINNIE? /A009 JMP WNBOOT / YES REBOOT MASTER MENU /A009 CDFMNU /A009 TAD I (MNSYSA+MUBUF) / LAST CHAR ENTERED /A009 CDFMYF /A009 SZA CLA / CHECK FOR CARRIAGE RETURN /C011 JMP RX50BT / NO, GO BOOT THE FLOPPY /C011 / YES, FALL INTO WINNIE BOOT WNBOOT, CIFMNU JMS I IOACAL / SET TO KEYPAD MODE WINZRO, 0 / USE DEFAULT OUTPUT ROUTINE /C011 TXTKEY / CONTROL STRING TO OUTPUT RESET COMMANDS /D011 TXTPAD / CURSOR KEYPAD MODE ISZ WINZRO / WAIT TO INSURE COMPLETE SCREEN OUTPUT /A011 JMP .-1 / NOT DONE, GO DO IT AGAIN /A011 TAD DEALP7 / SET UP TO DISMOUNT VOL 0 /C011 DCA DEALP1 /A003 JMS DEALL / DISMOUNT DRIVE 0 /A003 DCA AREANO / SET DRIVE=0 JMS WINIO RDEMTS / MOUNT SYSTEM VOLUME PRQ3 / RESET DECMATE MODE /A011 10 / FUNCTION CODE ARGUMENT /A011 -1 / END OF LIST INDICATOR /A011 AC7775 / BOOT THE WINNIE /C011 SKP / SKIP OVER RX-50 BOOT CODE /A011 RX50BT, AC7776 / BOOT THE FLOPPY /C011 PRQ3 / ISSUE PANNEL REQUEST COMMAND 6 / COMMAND CODE -1 / TERMINATOR JMP . / TEST HALT /C009 POBOOT, PRQ3 / ISSUE PANNEL REQUEST COMMAND 5 / CODE FOR A POWER UP BOOT -1 / TERMINATOR JMP . / TEST HALT /C009 FRMTYP, 0 / FRIMWARE TYPE 0=FLOPPY -1=WINNIE DEALL, XX / DEALLOCATE ALL VOLUMES XCPT 0 JMS GETVOL / GET ALL ASSIGNED VOLUMES TAD VOLBUF / POINTER TO START OF TABLE DEALP0, DCA VOLTMP / SET IT TAD I VOLTMP / GET DEVICE # ISZ VOLTMP / POINTER TO NAME SNA / =0? DEALP1, JMP DEALP5 / YES SKIP DEASSIGN /C003 SPA / END OF TABLE? JMP DEALP7 / YES DCA WINQBK+RXQDRV / SET DRIVE TO BE DISMOUNTED TAD VOLTMP DCA WINQBK+RXQBAD / VOL NAME ADDRESS /D011 TAD (CDFMYF) /D011 DCA WINQBK+RXQBFD / BUFFER FIELD TAD (RDEDIS+4000) / DISMOUNT COMMAND FUNCTION CODE /D011 DCA WINQBK+RXQFNC JMS QURX / DO IT JMP DEALP5 / IGNORE ERROR DO NEXT DEALP5, TAD (LENVOL) TAD VOLTMP / SET TO NEXT JMP DEALP0 / DO NEXT DEALP7, CLA JMP I DEALL / RET QURX, XX DCA WINQBK+RXQFNC / STORE COMMAND CODE IN QUEUE BLOCK /A011 CIFSYS / CHANGE TO SYSTEM FIELD ENQUE / QUEUE TO RXHAN QUBLK1 / ADDRESS OF QUEUE BLOCK TO USE QURX1, CIFSYS / CHANGE TO SYSTEM FIELD JWAIT / WAIT FOR DONE /D011 CLA TAD WINQBK+RXQCOD / PICK UP THE COMPLETION CODE SNA / CHECK FOR DONE /C011 JMP QURX1 / NOT DONE, GO CHECK AGAIN /C011 SMA CLA / CHECK FOR AN ERROR /C011 ISZ QURX / BUMP FOR SUCESSFUL RETURN JMP I QURX / ERROR--RETURN WITH NO INCRMENT /D011 TAD WINQBK+RXQCOD /D011 SNA CLA / /D011 JMP QURX1 /D011 ISZ QURX / BUMP FOR SUCESSFUL RETURN /D011 JMP I QURX / DONE / GET DIRECTORY DATA / AC=POINTER TO VOL NAME WINIO, XX DCA WINQBK+RXQBAD / BUFFER ADDRESS TAD AREANO DCA WINQBK+RXQDRV /D011 TAD (CDFMYF) /D011 DCA WINQBK+RXQBFD TAD I WINIO / GET COMMAND FUNCTION CODE ISZ WINIO / SET RETURN ADDRESS /D011 DCA WINQBK+RXQFNC / FUNCTION CODE JMS QURX JMP WINMVN / DISK ERROR JMP I WINIO / RET IFDEF ENGLSH < TXTLN2, TEXT '^P!2D/!2D/!2D !2D:!2D' /MOVED HERE FOR SPACE REASONS /M012 > IFDEF ITALIAN < TXTLN2, TEXT '^P!2D/!2D/!2D !2D:!2D' /MOVED HERE FOR SPACE REASONS /M012 > IFDEF V30NOR < TXTLN2, TEXT '^P!2D/!2D/!2D !2D:!2D' /MOVED HERE FOR SPACE REASONS /M012 > IFDEF V30SWE < TXTLN2, TEXT '^P!2D/!2D/!2D !2D:!2D' /MOVED HERE FOR SPACE REASONS /M012 > IFDEF DUTCH < TXTLN2, TEXT '^P !2D/!2D/!2D !2D:!2D' /MOVED HERE FOR SPACE REASONS /M012 > IFDEF SPANISH < TXTLN2, TEXT '^P !2D/!2D/!2D !2D:!2D' /MOVED HERE FOR SPACE REASONS /M012 > X=. / INDICATE FIRST FREE LOCATION ON PAGE /-------------------- PAGE DSKBLK=.%400+DLWINI / DISK BLOCK WHERE PAGE IS LOADED / GET ALL MOUNTED VOLUME DIRECTORIES / AND SET POINTERS IN VOLTB1 POINTING TO THE NAMES IN THE DIRECTORIES GETVOL, XX TAD VOLBUF DCA VOLPTR / MAIN POINTER CDFMNU TAD I (MUBUF+MNMXDR) / MAX NUM DRIVES IN SYSTEM MYFLD3, CDFMYF / CDF INSTRUCTION TO THIS FIELD /C011 CMA DCA WINCNT / # DEVICES PROCESSED DCA AREANO / AREA/DRIVE BEING PROCESSED DCA MNTCNT / # DRIVES MOUNTED GTVOLA, TAD AREANO DCA I VOLPTR / SET DEV # AT BEG. OF TABLE /C006 ISZ VOLPTR TAD VOLPTR DCA WINQBK+RXQBAD / ADDRESS /D011 TAD MYFLD3 / GET CDF INSTRUCTION TO THIS FIELD /C011 /D011 DCA WINQBK+RXQBFD / FIELD TAD AREANO DCA WINQBK+RXQDRV / DEVICE # TAD (RDEGTV+4000) / GET VOLUME DATA FUNCTION CODE /D011 DCA WINQBK+RXQFNC / FUNCT. CODE JMS QURX SKP / IS AN ERROR JMP WINOK / IS MOUNTED CLA CMA TAD VOLPTR / RESET POINTER DCA VOLPTR CLA CMA / -1 DCA I VOLPTR / NOT MOUNTED JMP WINEXT / IS END? WINOK, TAD VOLPTR TAD (LENVOL) / SET TO NEXT DCA VOLPTR ISZ MNTCNT / NO OF MOUNTED DEVICES = +1 WINEXT, ISZ AREANO / NEXT ISZ WINCNT / MAX # DRIVES JMP GTVOLA CLA CMA DCA I VOLPTR / SET END JMP I GETVOL WINCNT, 0 / -NUMBER OF DRIVES /M008 MNTCNT, 0 / NUMBER OF MOUNTED DEVICES /M008 MOVT01, XX / MOVE FROM X0(POINTER) TO X1(PTR) T3=COUNT MOV01A, TAD I X0 DCA I X1 ISZ T3 JMP MOV01A JMP I MOVT01 MULT16, XX / MULTIPLY T2 T3 BY 16 TAD (-4) DCA MULCNT / COUNTER MULTLQ, TAD T3 / LOW ORDER CLL RAL / SHFT DCA T3 TAD T2 / HIGH ORDER RAL / SHIFT IN LINK DCA T2 ISZ MULCNT / DONE? JMP MULTLQ / NO JMP I MULT16 / YES MULCNT, 0 / COMPAR VOLUME NAME IN X0 TO NAME IN X1 T3=NUM CHARS TO COMP / RETURN+0 IF ERROR END TABLE / RETURN+1 IF MATCH CMPVOL, XX TAD (-LENNAM) DCA T3 CMPVL1, JMS SETUPC / SET UPPER CASE IF SW SET CMPVL2, TAD I X1 CIA TAD I X0 SZA CLA / =? JMP CMPVL3 / NOT EQ. ISZ T3 / END NAME? JMP CMPVL1 / NOT YET ISZ CMPVOL / SET RET CMPVL3, DCA LCCLUG / CLEAR SW JMP I CMPVOL / EXIT /-------------------- / THIS IS THE ERROR MESSAGE HANDLER / THIS ROUTINE WILL WAIT FOR A GOLD MENU OR A CR / RESPONSE FROM THE KEYBOARD. / CALLING SEQUENCE: / JMS WTFRRS / HERE / RETURNS HERE IF RETURN PRESSED / HERE+1 / RETURNS HERE IF GOLD-MENU PRESSED / HERE+2 / RET FOR OTHER CHAR / V036 CODE DELETED WHICH CHECKS SYSTEM DISK ID / MVLGET, XX CIFMNU JMS I (INAIN) / GET A CHAR AND UPDATE TIME DCA MVLCHX / SAVE CHAR AND EXIT TAD MVLCHX TAD (-EDMENU) / CHECK FOR A GOLD MENU SNA / JMP MVLGTC TAD (EDMENU-EDNWLN) / NOW FOR A CR SNA CLA / JMP I MVLGET / / JMS WINWFT / BELL REPLY / CLA ISZ MVLGET / NORMAL RET MVLGTC, / GOLD MENU WAS TYPED ISZ MVLGET / SKIP RETURN JMP I MVLGET MVLERM, XX DCA MVLERT / SAVE NUM CHARS SHOULD HAVE BEEN READ MQA / LOAD # CHARS READ -1 IAC TAD MVLERT / ADD -NUM CHARS SHOULD HAVE BEEN READ SNA CLA / WAS RETURN DUE TO TOO MANY CHARS ENTERED JMP MVLERP / NO JMS I WINP5X / PRINT ERR MSG /C008 PRTER1 / "INPUT TOO LONG /A008 JMP I MVLERM / RET MVLERP, CIFMNU JMS I MNUCAL / CALL ERROR MESSAGE DLMCR1 / MENU ERROR MSG TAD (2200) / LINE 22 JMS I CLRSCX / CLEAR BOTTOM OF SCREEN FROM LINE 22 /C008 JMS I PRTLSX / PAINT CR G.MENU MSG /C008 JMP I MVLERM / RETURN CLCRER, XX / CLEAR BOTTOM LINE AND ERROR SW DCA CRERSW / CLEAR ERROR SW /A004 TAD (2700) / LAST LINE /A004 JMS I CLRSCX / CLEAR IT /C008 JMP I CLCRER / RET /A004 MVLERT, 0 / TEMP HOLD BUFFER X=. / INDICATE FIRST FREE LOCATION ON PAGE /-------------------- PAGE DSKBLK=.%400+DLWINI / DISK BLOCK WHERE PAGE IS LOADED PRTLN1, XX / PRINT LINE NO IN AC TAD AREANO / GET DEVICE # SZA / DEVICE 0? TAD K20 / NO SET TO NUMERIC TAD (40) / YES SET TO SPACE BSW / CHAR IN H/O AND TERMINATOR IN L/L DCA PRTLN4 / SET FOR PRINT / PRTLN3 = 24 TAD PRTLN3 / SET POSITION FOR TYPE IFDEF ENGLSH < TAD (7) / COLUMN 33(8) > IFDEF ITALIAN < TAD (7) / COLUMN 33(8) > IFDEF V30NOR < TAD (7) / COLUMN 33(8) > IFDEF V30SWE < TAD (7) / COLUMN 33(8) > IFDEF DUTCH < TAD (12) > IFDEF SPANISH < TAD (12) > DCA PRTLN5 TAD PRTLN5 / SET POSITION FOR ATTRIBUTES IFDEF ENGLSH < TAD (12) / COLUMN 45(8) > IFDEF ITALIAN < TAD (12) / COLUMN 45(8) > IFDEF V30NOR < TAD (12) / COLUMN 45(8) > IFDEF V30SWE < TAD (12) / COLUMN 45(8) > IFDEF DUTCH < TAD (13) > IFDEF SPANISH < TAD (13) > DCA PRTLN7 TAD PRTLN7 IFDEF ENGLSH < TAD (31) / COLUMN 76(8) FOR LAST BACKUP > IFDEF ITALIAN < TAD (31) / COLUMN 76(8) FOR LAST BACKUP > IFDEF V30NOR < TAD (31) / COLUMN 76(8) FOR LAST BACKUP > IFDEF V30SWE < TAD (31) / COLUMN 76(8) FOR LAST BACKUP > IFDEF DUTCH < TAD (25) > IFDEF SPANISH< TAD (25) > DCA PRTLN8 / ON ENTRY, X0 CONTAINS ADDRESS OF SECOND WORD (20(8)) OF NUMBER OF BLOCKS / START WITH 1, NOT 0 / WORD 21(8) CONTAINS READ/WRITE ACCESS (4,5); UNIT (6); VOLUME MOUNTED (7) / STARTUP (9); MODIFIED (10); / WORD 22(8) CONTAINS BOOTABLE (SYSTEM) (4); SYSTEM TYPE (5-11) / PUT TYPE (WPS, OS8, COS, CPM) INTO CALLING SEQUENCE NOP / FOR DEBUG ONLY CLL CLA IAC RAL / AC=2 TAD X0 DCA WORKX0 / POINT TO DATA BITS FOR TYPE; WORD 21(8) TAD (PTLN90-1) / SET UP TO SCAN TABLE DCA X1 PTLN30, TAD I X1 / GET FROM TABLE SNA / DONE? JMP PTLN32 / END OF TABLE W/O MATCH DCA PRTTMP / SAVE TABLE ENTRY A MOMENT TAD I WORKX0 / COMPARE TO DATA AND (0113) / KEEP BITS 5, 8, 10,11 TAD PRTTMP SZA CLA JMP PTLN30 / NO MATCH, TRY AGAIN TAD (-PTLN90) / FOUND TYPE, CALCULATE DISTANCE DOWN TABLE TAD X1 TAD (PTLN20) / PLUS ADDRESS OF START OF MESSAGES DCA PRTLN6 / INTO CALLING SEQUENCE TAD I PRTLN6 DCA PRTLN6 JMP PTLN40 PTLN32, CLA CMA / CHECK FOR RESERVED TYPE TAD WORKX0 / BACK TO WORD 20(8) FOR VOLUME MOUNTED BIT DCA WORKX0 / IF BIT=0, VOLUME NOT MOUNTED (RESERVED) TAD I WORKX0 AND (20) / CHECK BIT 7 SNA CLA TAD (PTLN19-PTLN18) / PRINT SPACES, NOT RESERVED TAD (PTLN18) DCA PRTLN6 / PUT ATTRIBUTES (SYSTEM, MODIFIED, STARTUP) INTO CALLING SEQUENCE PTLN40, TAD (PTLN50-1) / POINT TO TEXT ARRAY DCA X1 IAC TAD X1 DCA WORKX0 DCA I WORKX0 / SET TERMINATOR IN TEXT ARRAY CLL CLA IAC RAL / BUMP TO WORD 22(8) TAD X0 DCA WORKX0 TAD I WORKX0 / GET DATA BITS AND (200) / BIT 4 (SYSTEM) SNA CLA / CHECK FOR BOOTABLE (SYSTEM) JMP .+3 JMS PTLN80 / MOVE TEXT TO OUTPUT ARRAY PTLN50 PTSYST-1 / "SYSTEM" CLA CMA / BACK TO WORD 21(8) TAD WORKX0 DCA WORKX0 TAD I WORKX0 AND (2) / MODIFIED BY WRITE COMMAND SNA CLA JMP .+3 JMS PTLN80 / MOVE TEXT PTMODI-1 / "MODIFIED" TAD I WORKX0 AND (4) / STARTUP SNA CLA JMP .+3 JMS PTLN80 PTSTAR-1 / "STARTUP" CIFMNU JMS I IOACAL 0 TXTLN1 / ^P^S____^A^P!4D!3D^P^S^P^A PRTLN2, /D008 0402 0500 / ^P; CURSOR POSITION FOR DEVICE; COL. 05 /A008 PRTLN4 / ^S; ADDR. OF DEVICE # VOLSAR / ^A; ADDR. OF ASCII STRING(VOLUME NAME PRTLN3, 0 / ^P; CURSOR POSITION FOR BLOCKS; COL. 22 PRTHO / !4D; ADDR. OF BLOCK # HIGH ORDER PRTLO / !3D; ADDR. OF BLOCK # LOD ORDER PRTLN5, 0 / ^P; CURSOR POSITION FOR TYPE /A008 PRTLN6, 0 / ^S; ADDRESS OF TEXT FOR TYPE /A008 PRTLN7, 0 / ^P; CURSOR POSITION FOR ATTRIBUTES /A008 PTLN50 / ^A; ADDRESS OF TEXT FOR ATTRIBUTES /A008 JMS PTLN00 / DATE OF LAST BACKUP JMP I PRTLN1 PRTLN4, 0 / DEVICE NUM WORKX0, 0 PRTTMP, 0 PTLN20, PTLN10 / POINTERS TO TEXT MESSAGES PTLN11 PTLN12 PTLN13 PTLN90, WPS8 / LOOKUP TABLE FOR SYSTEM TYPE OS278 COS310 CPM 0 X=. / INDICATE FIRST FREE LOCATION ON PAGE /-------------------- PAGE DSKBLK=.%400+DLWINI / DISK BLOCK WHERE PAGE IS LOADED WINCLR, XX / CLEAR BUFFER AREA -PRIMARILY FOR DIR READ END TAD VOLBUF / STRT BUFFER POINTER DCA X0 TAD (VOLTB2-VLTBLE) / COUNTER DCA CLRCNT DCA CRERSW / CR-ERR-SW...INITIALIZE /A004 WINCL1, DCA I X0 ISZ CLRCNT JMP WINCL1 CDFMNU /A006 TAD I (MUBUF+MNOPTN) / GET OPTION CODE /A006 CDFMYF /A006 AND K20 / DEV 0=WINNIE(BIT 7) /A006 DCA SYSDEV / SET SYSTEM DEV. 0=RX50,ELSE WINNIE /A006 JMP I WINCLR / DONE CLRCNT, 0 / COUNTER / CHECK PASSWORD FOR 0...IF ZERO RET NORMAL / ..ELSE RET + 1 ZERPAS, XX /A003 TAD SVX0 / PNTR TO PASSWORD /A003 DCA X0 /A003 TAD M4 /-4 /A003 DCA BNTMP1 / TEMP /A003 ZERPS1, TAD I X0 / GET PASS /A003 SZA CLA /=0 /A003 JMP ZERPS3 / NO..MUST NOW CHECK IT /A003 ISZ BNTMP1 / DONE /A003 JMP ZERPS1 / NO /A003 JMP I ZERPAS / YES..0 RET /A003 ZERPS3, ISZ ZERPAS /A003 JMP I ZERPAS /A003 M4, -4 /A003 /SETUPC ..SETS UPPER CASE FOR STRING IN X1 IF SWITCH SET AND RETURNS .+1 /ELSE RETURNS NORMAL SETUPC, XX TAD LCCLUG / GET SW SNA CLA / SET? JMP I SETUPC / NO ISZ SETUPC TAD I X1 TAD (-140) / VOLUME NAME CAN NOT CONTAIN NON ALPHA CHRS SPA / L.C.ALPHA? TAD (40) / YES CLEAR LC BIT TAD (100) JMP I SETUPC / RET LCCLUG, 0 WINPT9, XX CIFMNU JMS I IOACAL 0 PRTDMC /C008 1505 JMP I WINPT9 PRTLS0, XX / GET A CHARACTER, BELL IF NOT CR OR GOLD MENU JMP PRTLS2 / IGNORE BELL 1ST TIME PRTLS1, JMS WINWFT / RING BELL PRTLS2, JMS MVLGET / GET A CHAR /D008 JMP PRTLS3 / CR ISZ PRTLS0 / CR /A008 JMP I PRTLS0 / GOLD MENU JMP PRTLS1 /D008 PRTLS3, ISZ PRTLS0 / CR /D008 JMP I PRTLS0 WINWFT, XX / PRINT BELL HERE TO SAVE SPACE TAD (7) / RING THE BELL IF BAD CHARACTER JMP .+3 CIF 0 / JWAIT CIF 0 / TTYOU JMP .-4 JMP I WINWFT / RETURN PRTLST, XX / PRINT LINE CIFMNU JMS I IOACAL 0 TLS1 / ^P PRESS RETURN TO RECALL ... ^P^S^P PRTLS9, 2205 / PRTLS9, PRTL10, PRTL11 SET /C008 / AND RESTORED BY PRTNXT PRTL10, 2305 /C008 TXTLS2 / OR PRESS GOLD MENU ... PRTL11, 2405 /C008 JMP I PRTLST / / / THIS ROUTINE CHECKS FOR A WINNIE ON LINE... / ...IF NO WINNIE IT RETURNS TO RET+1 WINCHK, XX /A010 TAD (MNRX5X+MNRX4X) / WINNIE FIRMWARE BIT 6 /A010 / OR SYS DEV = WINNIE /A010 CDFMNU /A010 AND I (MUBUF+MNOPTN) / STATUS WORD /A010 CDFMYF /A010 SNA CLA / IS WINNIE ON LINE? /A010 ISZ WINCHK / NO -- SKIP RETURN /A010 JMP I WINCHK /A010 WINNAM, XX / WINNAM GETS NAME OF VOLUME TO BE MOUNTED JMS MVLLIN / GET LINE -11 / COUNT JMP MVCRET / CR JMP MVGOLD JMS PADNAM / PADS TABLE WITH BLONKS JMS MNTCHK / CHECK IF VOL ALREADY MOUNTED ISZ WINNAM / NO MATCH RETURN JMP I WINNAM / MATCH RETURN /***********************************************************************/ / / / CLRSCR--ROUTINE TO CLEAR THE SCREEN FROM A GIVEN POSITION / / AC CONTAINS THE POSTION TO CLEAR THE SCREEN FROM / / / /***********************************************************************/ CLRSCR, XX / CLEAR THE SCREEN DCA CLRSCP / SET THE POSITION TO CLEAR FROM CIFMNU JMS I IOACAL 0 PSCR CLRSCP, 0 / POSTION TO CLEAR FROM JMP I CLRSCR PTLN80, XX TAD I PTLN80 / FROM DCA X3 ISZ PTLN80 PTLN81, TAD I X3 SNA JMP PTLN82 DCA I X1 JMP PTLN81 PTLN82, DCA I X1 / TERMINATING ZERO CMA / BACK UP X1 FOR NEXT STORE TAD X1 DCA X1 JMP I PTLN80 X=. / INDICATE FIRST FREE LOCATION ON PAGE /-------------------- PAGE DSKBLK=.%400+DLWINI / DISK BLOCK WHERE PAGE IS LOADED WINPT1, XX / PRINT LINE AND WAIT FOR CR OR GOLD MENU TAD I WINPT1 / POINTER TO STRING DCA WINPT2 ISZ WINPT1 / SET RETURN CIFMNU JMS I IOACAL 0 WINPT2, 0 / STRING ADDRESS (PRC, PRTMVC, PRTMVD, PMA) 1405 2700 / PTR TO RESPONSE JMS I PRTLSX / CR OR G.M. MSGE JMP I WINPT1 / RET WINPT5, XX TAD I WINPT5 DCA WINPT6 ISZ WINPT5 CIFMNU JMS I IOACAL 0 WINPT6, 0 2705 /D008 MVLCHQ+1 IFDEF V30NOR < PRTRYK > /A013 IFDEF V30SWE < PRTRYK > IFDEF SPANISH < PULSE > ISZ CRERSW / CR-RET-ERROR SW /A004 JMP I WINPT5 WINPT3, XX TAD X0 / PTR TO VOL NAME -1 DCA WINPTZ / SET IT TAD I WINPT3 DCA WINPT4 ISZ WINPT3 CIFMNU JMS I IOACAL 0 WINPT4, 0 / ADDRESS OF OUTPUT STRING 1405 / CURSOR POSITION WINPTZ, MVLCHR AREANO / AREA NUMBER 2700 JMP I WINPT3 WINPT7, XX TAD I WINPT7 DCA WINPT8 ISZ WINPT7 CIFMNU JMS I IOACAL 0 WINPT8, 0 / ADDRESS OF TEXT 3000 /C008 MVLCHR IFDEF V30NOR < PRTRYK > /A013 IFDEF V30SWE < PRTRYK > IFDEF SPANISH < PULSE > ISZ CRERSW / CR-RET-ERROR SW /A004 JMP I WINPT7 / ERROR RET WINPTB, XX CIFMNU JMS I IOACAL 0 PRTDMB / ^P!E ... ^A ... !D^P 1405 WINPTD, 0 / ADDRESS OF ASCII NAME AREANO / DEVICE NUMBER 1505 JMP I WINPTB WINPTE, XX /D008 JMS I WINWPT / BELL CIFMNU JMS I IOACAL 0 PRTERA / "CHOOSE 1-7. ... " 3014 IFDEF V30NOR < PRTRYK> /A013 IFDEF V30SWE < PRTRYK> IFDEF SPANISH < PULSE > ISZ CRERSW / CR-RET-ERROR SW /A004 JMP I WINPTE / ERROR RET WINPTF, XX / PASSWORD ERROR /D008 JMS I WINWPT / BELL CIFMNU JMS I IOACAL 0 PRTER7 / "READ/WRITE PASSWORD ERROR ... " 3000 IFDEF V30NOR < PRTRYK > /A013 IFDEF V30SWE < PRTRYK > IFDEF SPANISH < PULSE > ISZ CRERSW / CR-RET-ERROR SW JMP I WINPTF / ERROR RET /D008 WINWPT, WINWFT WINP31, XX CIFMNU JMS I IOACAL 0 PRTMVB / OUTPUT STRING 1405 / CURSOR POSITION AREANO / DEVICE NUMBER 1505 / CURSOR POSITION FOR SECOND LINE 2700 / CURSOR POSITION FOR INPUT JMS I PRTLSX / GET INPUT JMP I WINP31 PRTHDR, XX / PRINT MENU HDR CIFMNU JMS I IOACAL 0 TXTHD0 / FORMAT 0202 / POSITION CURSOR FOR ERASE 0212 / POSITION CURSOR FOR TEXT /C008 TXTHD1 / FIRST LINE OF HEADER; VOLUME... /D008 0250 /D008 TXTHD1 /D008 0302 /D008 D3 /D008 0405 0302 / POSITION CURSOR /A008 TXTHD2 / SECOND LINE OF HEADER /A008 0402 / POSITION CURSOR /A008 D3 / UNDERLINES /A008 0502 / POSITION CURSOR /A008 JMP I PRTHDR PTLN00, XX / TEST TO SEE IF DATE OF LAST BACKUP, / OUTPUT IF THERE CLL CLA IAC CML RAL / AC = 3 TAD X0 DCA PRTLN9 TAD I PRTLN9 / SEE IF DATE SNA CLA JMP I PTLN00 / NO DATE JMS I PTLNAA / SET ADDRESSES IN CALLING SEQ CIFMNU / OUTPUT DAATE OF LAST BACKUP JMS I IOACAL 0 TXTLN2 / ^P!2D/!2D/!2D !2D:!2D PRTLN8, 0 / CURSOR POSITION PRTLN9, 0 / ADDRESS OF MONTH 0 / DAY 0 / YEAR 0 / HOUR 0 / MINUTE JMP I PTLN00 PTLNAA, PTLN05 X=. / INDICATE FIRST FREE LOCATION ON PAGE /-------------------- PAGE DSKBLK=.%400+DLWINI / DISK BLOCK WHERE PAGE IS LOADED PTLN05, XX / SET UP ADDRESSES OF LAST BACKUP CLA CLL IAC RAL / AC = 2 TAD X0 DCA PTLN09 / FROM ADDRESS-1 TAD PRTLNA / TO ADDRESS DCA X1 TAD PRTLNB / 5 ITEMS DCA PTLN08 PTLN06, ISZ PTLN09 / BUMP FROM ADDRESS TAD PTLN09 / GET ADDRESS DCA I X1 / ADDRESS INTO CALLING SEQ ISZ PTLN08 / COUNT JMP PTLN06 JMP I PTLN05 PTLN09, 0 PTLN08, 0 PRTLNA, PRTLN9-1 PRTLNB, -5 PRTNXT, XX / NEXT SCREEN, CR, GM MESSAGES TAD SVX0 / TEST IF MORE TO DISPLAY TAD PRTNXG / SET POINTER TO NEXT ENTRY IAC / TO MAKE UP FOR AUTO INCREMENT REGISTER DCA T1 TAD I T1 / TEST FOR ENTRY SNA CLA JMP I PRTNXT / EXIT C+1 FOR NORMAL CONTINUATION TAD PR2510 / ADJUST CURSOR POSITION FOR NEXT SCREEN MSG. DCA I PRTNXF TAD PR2605 DCA I PRTNXH TAD PR2705 DCA I PRTNXI CIFMNU JMS I IOACAL 0 TLS00 / "^P; PRESS NEXT SCREEN ... ^POR " 2405 2505 JMS I PRTLSX / CR, GM MESSAGE TAD PR2205 / RESET CURSOR POSITION DCA I PRTNXF TAD PR2305 DCA I PRTNXH TAD PR2405 DCA I PRTNXI PRTNX1, JMS I PRTNXC / GET INPUT JMP PRTNX7 / CR: GOTO C+4 EXIT JMP PRTNX8 / GM: GOTO C+3 EXIT TAD MVLCHX / OTHER, TEST FOR NEXT SCREEN TAD PRTNXD SNA CLA JMP PRTNX9 / NS: GOTO C+2 EXIT JMS I WINWFX / NOT ANY, BELL JMP PRTNX1 / GET AGAIN NOP / IN CASE NOP PRTNX7, ISZ PRTNXT PRTNX8, ISZ PRTNXT PRTNX9, ISZ PRTNXT JMP I PRTNXT PR2510, 2510 PR2205, 2205 PR2605, 2605 PR2705, 2705 PR2305, 2305 PR2405, 2405 PRTNXC, MVLGET PRTNXD, -EDNXSC PRTNXF, PRTLS9 PRTNXG, LENVOL PRTNXH, PRTL10 PRTNXI, PRTL11 NOP / SAVE A LITTLE ROOM NOP PTLN10, TEXT "!&WPS-8 " PTLN11, TEXT "!&OS278 " PTLN12, TEXT "!&COS-310 " PTLN13, TEXT "!&CP/&M " PTLN18, IFDEF ENGLSH < TEXT "RESERVED" > IFDEF ITALIAN < TEXT "RESERVED" > IFDEF V30NOR < TEXT 'RESERVERT' > IFDEF V30SWE < TEXT 'RESERVERAD'> IFDEF DUTCH < TEXT " VOORBH. " > IFDEF SPANISH < TEXT "RESERVADO" > PTLN19, TEXT " " PTSYST, "S&177 "Y&177 "S&177 "T&177 "E&177 IFDEF DUTCH < "E&177 > "M&177 40 0 PTMODI, IFNDEF DUTCH < "M&177 "O&177 "D&177 "I&177 "F&177 "I&177 "E&177 "D&177 40 0 > IFDEF DUTCH < "H&177 "E&177 "R&177 "Z&177 "I&177 "E&177 "N&177 40 0 > PTSTAR, "S&177 "T&177 "A&177 "R&177 "T&177 IFNDEF DUTCH < "U&177 "P&177 > 0 / TEXT STRINGS TXTHD0, TEXT '^P!E^P^S^P^S^P^S^P' /C008 IFDEF ENGLSH < TXTHD1, TEXT '!&VOLUME !&SIZE' /C008 TXTHD2, TEXT '!&DEVICE !&NAME (!&BLOCKS) !&TYPE !&ATTRIBUTES ' /A008 *.-1 / CONTINUATION OF TXTHD2 /A008 TEXT ' !&LAST !&BACKUP' /A008 > IFDEF ITALIAN < TXTHD1, TEXT '!&ARCHIVIO !&DIM.' /C008 TXTHD2, TEXT '!&UNIT\@ !&DO.TI !&BLOCCHI !&FORMATO !&CARATTERISTICHE ' /A008 *.-1 / CONTINUATION OF TXTHD2 /A008 TEXT ' !&ULTIMO !&SALVA.IO' /A008 > IFDEF V30NOR < /A013 TXTHD1, TEXT '!&OMR\EDTS !&STR.' TXTHD2, TEXT '!&ENHETENS !&NAVN (!&BLOKKER) !&TYPE !&ATTRIBUTTER' *.-1 TEXT ' !&SISTE !&SIKKERHETSKOPIERING' > IFDEF V30SWE < TXTHD1, TEXT '!&VOLYM !&STORLEK' TXTHD2, TEXT '!&ENHET !&NAMN (!&BLOCK) !&SKRIV !&ATTRIBUT' *.-1 TEXT ' !&SENASTE !&S\DKERHETSKOPIERING'> IFDEF DUTCH < TXTHD1, TEXT ' &NAAM &GROOTE' TXTHD2, TEXT '&AANDR. GEBIED (BLOKKEN) &TYPE &KENMERK ' *.-1 TEXT ' &LAATSTE &KOPIE' > IFDEF SPANISH < TXTHD1, TEXT '!&VOLUMNE &TAMA\QO' TXTHD2, TEXT '&DISP. !&NOMBRE (!&BLOQUES) !&TIPO !&ATRIB ' *.-1 TEXT ' &ULT.&COP.&SEG' > TXTKEY, TEXT '![[61"P![C' / ESC [ 6 1 " p RESET TO LEVEL 1 /C011 / ESC c RESET TERMINAL /C011 /D011 TXTPAD, ESC;"[&177;"?&177;"1&177;57;0 / ESC[?1/ D3, IFDEF ENGLSH < TEXT '------ ------ -------- -------' /C008 *.-1 / CONTINUATION OF D3 /C008 TEXT '- ----------------------- ---------------' /C008 > IFDEF ITALIAN < TEXT '------ ------ -------- -------' /C008 *.-1 / CONTINUATION OF D3 /C008 TEXT '- --------------- ---------------' /C008 > IFDEF V30NOR < TEXT '------- ---- -------- ---- ------- ---- -----------' *.-1 TEXT ' ----- -------------------' > IFDEF V30SWE < TEXT '------ ------ -------- -------' /C008 *.-1 / CONTINUATION OF D3 /C008 TEXT '- ----------------------- ---------------' /C008 > IFDEF DUTCH < TEXT '------ ------ ---------- --------' *.-1 TEXT '- --------------------- --------------' > IFDEF SPANISH < TEXT '------ ------ ---------- --------' *.-1 TEXT '- --------------------- --------------' > TXTLN1, TEXT '^P^S ^A^P!4D!3D^P^S^P^A' /C008 IFDEF ENGLSH < TLS00, TEXT '^P&PRESS !&NEXT !&SCREEN FOR MORE,^P!&OR ' /A008 TLS1, TEXT '^P&PRESS !&RETURN TO RECALL THE &HARD &DISK &VOLUME &MENU,' /C008 *.-1 /A008 TEXT '^P^S^P' / CONTINUATION OF TLS1 /A008 TXTLS2, TEXT '!&OR &PRESS &GOLD !&MENU TO RECALL THE &MAIN &MENU' PMA, TEXT '^P&TYPE THE DEVICE NUMBER YOU WANT TO DEASSIGN AND PRESS !&RETURN^P' PRTDMB, TEXT '^P!E&VOLUME NAME ^A IS NOW ASSIGNED TO &DEVICE !D^P' /C008 PRTDMC, TEXT '&IS THIS THE VOLUME YOU WANT TO DEASSIGN? (&Y OR &N)^P' /C008 PRTDME, TEXT '^P!E&VOLUME ^A HAS BEEN DEASSIGNED FROM &DEVICE !D.^P' / MOUNT MESSAGES PRC, TEXT '^P!L&TYPE THE DEVICE NUMBER YOU WANT TO ASSIGN AND PRESS !' /C008 *.-1 /A008 TEXT '&RETURN.^P' / CONTINUATION OF PRC /A008 PRTMVB, TEXT '^P!L&TYPE THE VOLUME NAME YOU WANT TO ASSIGN TO &DEVICE !D' /C008 *.-1 / CONTINUATION OF PRTMVB /A008 TEXT '^PAND &PRESS !&RETURN.^P' /A008 IFDEF PASSWD < PRTMVC, TEXT '^P!E&ENTER READ PASSWORD AND PRESS !&RETURN.^P' /C008 PRTMVD, TEXT '^P!E&ENTER WRITE PASSWORD AND PRESS !&RETURN.^P' > / END IFDEF PASSWD PRTMVE, TEXT '^P!E&VOLUME NAME ^A ASSIGNED TO DEVICE !D.^P' > IFDEF ITALIAN < TLS00, TEXT '^P&PREMERE !&SCHERM !&SUCC PER CONTINUARE,^PO ' /A008 TLS1, TEXT '^P&PREMERE !&RITORNO PER TORNARE AL &MENU &DEFINIZIONI SU &DISCO &RIGIDO ' /C008 *.-1 /A008 TEXT '^P^S^P' / CONTINUATION OF TLS1 /A008 TXTLS2, TEXT '&PREMERE &ORO !&MENU PER TORNARE AL &MENU &PRINCIPALE' PMA, TEXT /^P&INTRODURRE L'UNIT\@ DA ANNULLARE E PREMERE !&RITORNO^P' PRTDMB, TEXT /^P!E&ARCHIVIO DOCUMENTI ^A \H DEFINITO COME UNIT\@ !D^P//C008 PRTDMC, TEXT '&CONFERMA ANNULLAMENTO ? (&S/&N)^P' /C008 PRTDME, PRTMVE, TEXT '^P!E&ARCHIVIO DOCUMENTI ^A DEFINITO COME UNIT\@ !D ANNULLATO.^P' / MOUNT MESSAGES PRC, TEXT /^P!L&INTRODURRE L'UNIT\@ DA DEFINIRE E PREMERE !&RITORNO./ /C008 PRTMVB, TEXT /^P!L&INTRODURRE L'ARCHIVIO DOCUMENTI DA DEFINIRE COME UNIT\@ !D / /C008 *.-1 / CONTINUATION OF PRTMVB /A008 TEXT '^PE PREMERE !&RITORNO.^P' /A008 IFDEF PASSWD < PRTMVC, TEXT '^P!E&INTRODURRE PAROLA CHIAVE PER LETTURA E PREMERE !&RITORNO.^P' /C008 PRTMVD, TEXT '^P!E&INTRODURRE PAROLA CHIAVE PER SCRITTURA E PREMERE !&RITORNO.^P' > / END IFDEF PASSWD > IFDEF V30NOR < /A013 TLS00, TEXT '^P&TRYKK P\E !&SKJERM,FOR \E G\E TIL NESTE SIDE ^P!&EL ' /A008 TLS1, TEXT '^P&TRYKK P\E !&RETUR FOR \E F\E MENYEN FOR &PLATELAGER, ' /C008 *.-1 /A008 TEXT '^P^S^P' / CONTINUATION OF TLS1 /A008 TXTLS2, TEXT '!&EL &TRYKK P\E !&GEULL !&MENY FOR \E F\E &HOVEDMENYEN' PMA, TEXT '^P&SKRIV NUMMERET P\E ENHETEN DU VIL TREKKE TILBAKE OG TRYKK P\E' *.-1 TEXT ' !&RETUR^P' PRTDMB, TEXT '^P!E&OMR\EDENAVNET ^A ER N\E TILDELT ENHET !D^P' /C008 PRTDMC, TEXT '&ER DET DETTE OMR\EDET DU VIL TREKKE TILBAKE (&J EL. &N)^P'/C008 PRTDME, TEXT '^P!E&OMR\EDE ^A ER TRUKKET TILBSKE FRA ENHET !D.^P' / MOUNT MESSAGES PRC, TEXT '^P!L&ANGI NUMMERET P\E ENHETEN DU VIL TILDELE, OG TRYKK P\E !'/C008 *.-1 /A008 TEXT '&RETUR.^P' / CONTINUATION OF PRC /A008 PRTMVB, TEXT '^P!L&ANGI NAVNET P\E OMR\EDET DU VIL TILDELE ENHET !D ' /C008 *.-1 / CONTINUATION OF PRTMVB /A008 TEXT '^POG TRYKK P\E !&RETUR.^P' /A008 IFDEF PASSWD < PRTMVC, TEXT '^P!E&ANGI PASSORD FOR !&LESE OG TRYKK P\E !&RETUR.^P' /C008 PRTMVD, TEXT '^P!E&ANGI PASSORD FOR !&SKRIVE OG TRYKK !&RETUR.^P' > / END IFDEF PASSWD PRTMVE, TEXT '^P!E&OMR\EDENAVNET ^A ER TILDELT ENHET !D.^P' > IFDEF V30SWE < TLS00, TEXT '^P&TRYCK P\E N\DSTA BILD FVR MER INFORMATION' /A008 TLS1, TEXT '^P&FVR ATT \ETERG\E TILL MENYN FVR FAST SKIVMINNE, TRYCK P\E RETUR' *.-1 /A008 TEXT '^P^S^P' / CONTINUATION OF TLS1 /A008 TXTLS2, TEXT '&FVR ATT \ETERG\E TILL HUVUDMENYN, ANV\DND GULD MENY' PMA, TEXT '^P&SKRIV NR P\E ENHET D\DR DU VILL TA BORT TILLDELN. OCH TRYCK P\E RETUR^P' PRTDMB, TEXT '^P!E&VOLYMNAMN ^A \DR NU TILLDELAT ENHET !D^P' /C008 PRTDMC, TEXT '&\DR DETTA DEN VOLYM D\DR DU VILL TA BORT TILLDELNING (J ELLER N)^P' /C008 PRTDME, TEXT '^P!E&TILLDELNINGEN FVR VOLYM ^A HAR TAGITS BORT FR\EN ENHET !D.^P' / MOUNT MESSAGES PRC,TEXT '^P!L&SKRIV NUMRET P\E DEN ENHET DU VILL TILLDELA OCH TRYCK P\E RETUR' /C008 PRTMVB, TEXT '^P!L&SKRIV NAMET P\E DEN VOLYM DU VILL TILLDELA ENHET !D' /C008 *.-1 / CONTINUATION OF PRTMVB /A008 TEXT '^POCH TRYCK P\E RETUR^P' /A008 IFDEF PASSWD < PRTMVC, TEXT '^P!E&SKRIV L\DS LVSENORD OCH TRYCK P\E RETUR^P' /C008 PRTMVD, TEXT '^P!E&SKRIV SKRIV LVSENORD OCH TRYCK P\E RETUR^P' > / END IFDEF PASSWD PRTMVE, TEXT '^P!E&VOLYMNAMNET ^A \DR TILLDELAT ENHET !D.^P' > IFDEF DUTCH < TLS00, TEXT '^P&DRUK OP !&VOLG !&BEELD VOR VERVOLG.^P' /A008 TLS1, TEXT '^P!&RETURN OM TERUG TE GAAN NAAR HET MENU.' /C008 *.-1 /A008 TEXT '^P^S^P' / CONTINUATION OF TLS1 /A008 TXTLS2, TEXT '&GOUD !&MENU OM TERUG TE GAAN NAAR HET &HOOFMENU.' PMA, TEXT '^P&TYP HET NUMMER VAN DE TE ANNULEREN TOEWIJZING EN DRUK !&RETURN.^P' PRTDMB, TEXT '^P!E !D VERWIJST NU NAAR GEBIED ^A^P' /C008 PRTDMC, TEXT '&WEET U ZEKER DAT U DE TOEWIJZING WILT ANNULEREN (&JA/&NEE).^P'/C008 PRTDME, TEXT '^P!E&NAAM ^A TOEGEWEZEN AAN GEBIED !D.^P' / MOUNT MESSAGES PRC, TEXT '^P!L&TYP NUMMER VAN TOE TE WIJZEN GEBIED EN DRUK OP !&RETURN.^P'/C008 PRTMVB, TEXT '^P!L&TYP NAAM TOE TE WIJZEN GEBIED EN DRUK OP !&RETURN' /C008 IFDEF PASSWD < PRTMVC, TEXT '^P!E&TYP WACHTWOORD VOOR !&LEZEN EN DRUK OP !&RETURN .^P' /C008 PRTMVD, TEXT '^P!E&TYP WACHTWOORD VOOR !&SCHRIJVEN EN DRUK OP !RETURN.^P' > / END IFDEF PASSWD PRTMVE, TEXT '^P!E&NAAM ^A TOEGEWEZEN AAN GEBIED !D.^P' > IFDEF SPANISH < TLS00, TEXT '^P&PULSE !&PROX !&PANTALLA PARA M\AS INFO.,^P!&O ' /A008 TLS1, TEXT '^P&PULSE !&RETORNO PARA VOLVER AL &MEN\Z DE VOLUMEN DE DISCO DURO , '/C008 *.-1 /A008 TEXT '^P^S^P' / CONTINUATION OF TLS1 /A008 TXTLS2, TEXT '!&O &PULSE &DORADA !&MENU PARA VOLVER AL &MEN\Z &PRINC.' PMA, TEXT '^P&TECLEE EL N\ZMERO DE DISPOSITIVO QUE DESEA DESASIGNAR ' *.-1 TEXT 'Y PULSE !&RETORNO^P' PRTDMB, TEXT '^P!E&EL NOMBRE DE VOLUMEN ^A AHORA EST\A' *.-1 TEXT ' ASIGNADO AL &DISPOSITIVO !D^P' /C008 PRTDMC, TEXT '&ES ESTE EL VOLUMEN QUE DESEA DESASIGNAR? (&S O &N)^P' /C008 PRTDME, TEXT '^P!E&SE HA DESASIGNADO EL VOLUMEN ^A DEL &DISPOSITIVO !D.^P' / MOUNT MESSAGES PRC, TEXT '^P!L&TECLEE EL N\ZMERO DE DISPOSITIVO QUE DESEA ASIGNAR Y PULSE ' /C008 *.-1 /A008 TEXT 'RETORNO.^P' / CONTINUATION OF PRC /A008 PRTMVB, TEXT '^P!L&TECLEE EL NOMBRE DEL VOLUMEN QUE DESEA ASIGNAR AL' /C008 *.-1 / CONTINUATION OF PRTMVB /A008 TEXT ' DISPOSITIVO !D ^PY &PULSE !&RETORNO.^P' /A008 IFDEF PASSWD < PRTMVC, PRTMVD, TEXT '^P!E&TECLEE LA CLAVE DE LECTURA/ESCRITURA Y PULSE !&RETORNO.^P' > / END IFDEF PASSWD PRTMVE, TEXT '^P!E&EL NOMBRE DE VOLUMEN ^A ASIGNADO AL DISPOSITIVO !D.^P' > / TEXT ERROR MESSAGES IFDEF ENGLSH < /D008 PRTER1, TEXT '^P^A IS AN ILLEGAL DEVICE NUMBER' /C003 PRTER2, TEXT '^P!E IS NOT ASSIGNED TO A VOLUME. &PRESS !&RETURN' /A008 /D008 PRTER3, TEXT '^P!E^A IS AN ILLEGAL ENTRY. &PLEASE TYPE &Y OR &N.' PRTER4, TEXT '^P&DISK &ERROR. &PLEASE TRY AGAIN.' PRTER5, TEXT '^P!E &DEVICE ^A ALREADY ASSIGNED. &PRESS !&RETURN' /C008 PRTER6, TEXT '^P!E &VOLUME ^A ALREADY ASSIGNED. &PRESS !&RETURN' /C008 PRTER7, TEXT '^P!E &READ/WRITE PASSWORD ERROR. &PRESS !&RETURN' PRTER8, TEXT '^P!E ^A NOT A VOLUME NAME. &PRESS !&RETURN' /C008 PRTER9, TEXT '^P!E &VOLUME ^A IS NOT A &W&P&S-8 VOLUME. &PRESS !&RETURN'/C008 /D008 PRTERA, TEXT '^P !&ERROR ON INPUT..TOO MANY CHARACTERS.' PRTERA, TEXT '^P &CHOOSE 1-7. &PRESS !&RETURN' /A008 > IFDEF ITALIAN < /D008 PRTER1, TEXT '^P^A IS AN ILLEGAL DEVICE NUMBER' /C003 PRTER2, TEXT '^P!E NON DEFINITA. &PREMERE !&RITORNO' /A008 /D008 PRTER3, TEXT '^P!E^A IS AN ILLEGAL ENTRY. &PLEASE TYPE &Y OR &N.' PRTER4, TEXT '^P&ERRORE SU DISCO. &PROVARE ANCORA.' PRTER5, TEXT '^P!E &UNIT\@ ^A GI\@ DEFINITA. &PREMERE !&RITORNO' /C008 PRTER6, TEXT '^P!E &ARCHIVIO DOCUMENTI ^A GI\@ DEFINITO. &PREMERE !&RITORNO' /C008 PRTER7, TEXT '^P!E &ERRORE IN PAROLA CHIAVE. &PREMERE !&RITORNO' PRTER8, TEXT '^P!E ^A NON \H UN NOME DI UN ARCHIVIO. &PREMERE !&RITORNO'/C008 PRTER9, TEXT '^P!E &ARCHIVIO DOCUMENTI ^A NON \H DI TIPO &W&P&S-8. &PREMERE !&RITORNO'/C008 /D008 PRTERA, TEXT '^P !&ERROR ON INPUT..TOO MANY CHARACTERS.' PRTERA, TEXT '^P &SCEGLIERE 1-7. &PREMERE !&RITORNO' /A008 > IFDEF V30NOR < /D008 PRTER1, TEXT '^P^A IS AN ILLEGAL DEVICE NUMBER' /C003 PRTER2, TEXT '^P!E ER IKKE TILDELT ET OMR\EDE.&^S' /A008 /D008 PRTER3, TEXT '^P!E^A IS AN ILLEGAL ENTRY. &PLEASE TYPE &Y OR &N.' PRTER4, TEXT '^P&DISK-FEIL. &PR\XV IGJEN.^S' PRTER5, TEXT '^P!E &ENHET ^A ER ALLEREDE TILDELT. &^S' /C008 PRTER6, TEXT '^P!E &OMR\EDE ^A ER ALLEREDE TILDELT. &^S'/C008 PRTER7, TEXT '^P!E &FEIL I PASSORD . &^S' PRTER8, TEXT '^P!E ^A ER IKKE ET OMR\EDE-NAVN. &^S' /C008 PRTER9, TEXT '^P!E &OMR\EDE ^A ER IKKE ET !&WPS-8-OMR\EDE. &^S'/C008 /D008 PRTERA, TEXT '^P !&ERROR ON INPUT..TOO MANY CHARACTERS.' PRTERA, TEXT '^P &VELG 1-7. &^S' /A008 PRTRYK, TEXT 'TRYKK P\E !&RETUR' > IFDEF V30SWE < /D008 PRTER1, TEXT '^P^A IS AN ILLEGAL DEVICE NUMBER' /C003 PRTER2, TEXT '^P!E \OR INTE TILLDELAT EN VOLYM. &^S' /A008 /D008 PRTER3, TEXT '^P!E^A IS AN ILLEGAL ENTRY. &PLEASE TYPE &Y OR &N.' PRTER4, TEXT '^P&FEL P\E MINNE - &FVRSVK IGEN!' PRTER5, TEXT '^P!E &ENHET ^A \DR REDAN TILLDELAD. &^S' /C008 PRTER6, TEXT '^P!E &VOLYM ^A \DR REDAN TILLDELAD. &^S' /C008 PRTER7, TEXT '^P!E &L\DS/SKRIV-FEL FVR LVSENORD. &^S' PRTER8, TEXT '^P!E ^A \DR INTE ETT VOLYMNAMN. &^S' /C008 PRTER9, TEXT '^P!E &VOLYMEN ^A \DR INTE EN "&W&P&S-8"-VOLYM. &^S'/C008 /D008 PRTERA, TEXT '^P !&ERROR ON INPUT..TOO MANY CHARACTERS.' PRTERA, TEXT '^P &V\DLJ 1-7. &^S' /A008 PRTRYK, TEXT 'TRYCK P\E RETUR' > IFDEF DUTCH < PRTER2, TEXT '^P!E IS NIET TOEGEWEZEN AAN EEN GEBIED. DRUK OP !&RETURN.'/A008 PRTER4, TEXT '^P&SCHIJFFOUT &PROBEER OPNIEUW.' PRTER5, TEXT '^P!E &GEBIED ^A IS AL TOEGEWEZEN. &DRUK OP !&RETURN' /C008 PRTER6, TEXT '^P!E &GEBIED ^A IS AL TOEGEWEZEN. &DRUK OP !&RETURN' /C008 PRTER7, TEXT '^P!E &WACHTWOORD ONJUIST.&DRUK OP !&RETURN.' PRTER8, TEXT '^P!E ^A IS GEEN GEBIEDSNAAM. &DRUK OP !&RETURN.' /C008 PRTER9, TEXT '^P!E &GEBIED ^A IS GEEN &W&P&S-8 GEBIED. &DRUK OP !&RETURN'/C008 PRTERA, TEXT '^P &KIES 1-7. &DRUK OP !&RETURN' /A008 > IFDEF SPANISH < PRTER2, TEXT '^P!E NO SE HA ASIGNADO AL VOLUMEN. ^S' /A008 PRTER4, TEXT '^P&ERROR DE DOSCO. &INT\INTELO OTRA VEZ.' PRTER5, TEXT '^P!E &EL DISPOSITIVO ^A YA EST\A ASIGNADO. ^S' /C008 PRTER6, TEXT '^P!E &EL VOLUMEN ^A YA EST\A ASIGNADO.^S' /C008 PRTER7, TEXT '^P!E &ERROR DE CLAVE . ^S' PRTER8, TEXT '^P!E ^A NO UN NOMBRE DE VOLUMEN. ^S' /C008 PRTER9, TEXT '^P!E &EL VOLUMEN ^A NO ES UN VOLUMEN &W&P&S-8. ^S'/C008 PRTERA, TEXT '^P &SELECCIONE 1-7. ^S' /A008 PULSE, TEXT '&PULSE !&RETORNO' > /D008 TEXTG1, TEXT '^P^S^P' / GENERAL 1 SUBSTRING CONTROL STRING PSCR, TEXT '^P!E' / CLEAR SCREEN / BUFFER AREAS MVLCHQ, -107 / -NUM CHARS +1 MVLCHR, 0 / LAST CHAR ENTERED PRVTBL, 0 ZBLOCK 105 0 / TERMINATOR DECIMAL VOLSAR, ZBLOCK 9 / STORED VOL NAME IN ASCII VOLTB2, 0 / MOUNTED VOLUME BLOCK BUFFER ZBLOCK 193 / 8 VOLS * 24 WORDS PER VOL VLEND2, 0 / END 2 VOLTBL, 0 / VOLUME DIR TABLE ZBLOCK 1440 /60 VOLS * 24 WORDS PER VOL VLTBLE, 0 / END ALL OCTAL PTLN50, ZBLOCK 31 / ARRAY FOR "SYSTEM MODIFIED STARTUP" TEXT/A008 VOLEND=. /   / WPLOG - PHONE & LOGON UTILITIES / / 028 EMcD 26-Sep-85 Dutch & Spanish Xlations / 027 EMcD 13-Sep-85 Nordic translations / (conditionalised) / 026 EMcD 15-Jul_85 Change from ~ to + and ' to ! / in command lines / 025 TCW 06-DEC-84 Remove scrolling regions from logon / 024 TCW 04-DEC-84 Enlarge number buffer / 023 TCW 01-NOV-84 Ck. for non-valid edit chars / 022 TCW 04-OCT-84 Change screen output routines / 021 TCW 18-SEP-84 Reset LINBUF / 020 WCE 20-AUG-84 CHANGE FILE OPEN TO USE MNUTFN / 019 TCW 17-AUG-84 CHANGE INTEGRAL MODEM CK / 018 GDH 14-AUG-84 Fix DIAL routine -- coordinate TT output. / 017 GDH 7-AUG-84 Enhance keyboard input support. / 016 TCW 03-JUL-84 Integral Modem support / 015 TCW 12-APR-84 INCLUDE USE OF ARROW & FIND KEYS / 014 BCR 30-DEC-83 RESTRUCTURE AND ADD PHONE UTILITY / 013 BCR 4-NOV-83 GIVE ERROR ON MISSING WAIT OBJECT / 012 BCR 25-OCT-83 DISALLOW OCTAL 8 / 011 GDH 30-SEP-83 Fixed dangling EOF flag. / 010 GDH 30-SEP-83 CX 'call' to 'chain' / 009 BCR 21-SEP-83 HANGUP MODEM AT MENU TIME / 008 BCR 20-SEP-83 FIX ECHO OF USER KEYSTROKES / 007 BCR 19-SEP-83 CHANGE HOST DRAINING TIMES / 006 BCR 16-SEP-83 CHANGE '~' TO ACCEPT KBD INPUT / 005 BCR 16-SEP-83 ADD "MENU" COMMAND / 004 BCR 24-AUG-83 MIXED UC/LC GO TARGETS / 003 BCR 2-AUG-83 ALLOW CR IN WAIT HOST / 003 BCR 2-AUG-83 ECHO WAIT KBD ~ / 002 BCR 15-JUL-83 ' text delimiter, CR KBD delimiter / 001 GDH 20-MAY-83 Creation of stub module. / / WRITES OUT WPLOG / *200 JMP I .+3 JMP I .+1 7600 RXLOAD *RXLDLS RXEWT=4 RXEWT 0 RXQBLK=11 RXQBLK . DLOLOG / ++++ 100 / ++++ CDF 20 / ++++ -DSOLOG 0 / FIELD 2 / *100 / THE FIRST 100 LOCATIONS ARE USED FOR THE SYSTEM / / / THIS MODULE CONTAINS THE LOGON PROCESSOR AND / THE TELEPHONE DIRECTOR/AUTODIALER UTILITY. / THE LATTER IS THE CODE BETWEEN LOCATIONS / "PHSTRT" AND "LOG", THE SUBROUTINE "SUBSTR" / AND ASSORTED MESSAGE TEXTS AT THE END. / IT CAN EASILY BE MADE INTO AN OVERLAY. / THE PHONE DIRECTORY IS A USER DOCUMENT CONTAINING / AN UNLIMITED NUMBER OF ENTRIES CONTAINING NAME / FIELDS (WHICH BEGIN WITH ) AND TELEPHONE / NUMBER FIELDS (WHICH BEGIN WITH <#>). EACH / ENTRY ENDS WITH <> AND MAY CONTAIN OTHER / FIELDS WHICH ARE IGNORED. /-----------WARNING---------------- / THE PHONE DIRECTORY IS OPENED FOR READ/WRITE. / DOCUMENT CORRUPTION CAN RESULT FROM ABNORMAL / EXITING. DO NOT REMOVE THE DISKETTE WITHOUT / RETURNING TO MAIN MENU (AND BE CAREFUL WHEN / USING CPODT). / THESE ARE CONSTANTS USED BY THE LOGON UTILITY / CIFMYF=CIFLP / DEFINE OUR FIELD. CDFMYF=CDFLP / ... CIFCX=CIF 40 / CIF to the CX field. CDFCX=CDF 40 / CDF to the CX field. CXLINE=4600 / Address of DEFAULT CX SETTINGS line. / Set/reset by CX command. / This line buffer resides in the CX field (4). FORWRD=AC0004 IFNZRO XGETET-4 BCKWRD=AC0002 IFNZRO XGETST-2 H2DTR=6362 / MODEM CONTROL IOT /A016 / / FREQUENTLY USED LITERALS AND LOCATIONS / BUFPTR, BUFBEG / Ptr to buffer to store chars in. LINCTR, 1 / Line # for error reporting. CHAR, 0 / THE CURRENT CHARACTER FROM THE FILE HALT, XX / ADDRESS TO GO TO ON DETECTING GOLD HALT WTSPTR, 0 / WAIT PROCESSOR STRING POINTERS WTXPTR, 0 / .....HERE BECAUSE OF SCATTERED WTGPTR, 0 / .....INDIRECTS / EOF, 0 / Set only if E-O-F or ERROR is encountered. /D022TTCHRS, 0 / Count of # of chars in LINBUF (for RUBOUT)/A017 /D022TYPPTR, LINBUF / ptr into LINBUF tt buffer. /A017 / / OCTAL VALUES OF SOME ASCII CHARACTERS COLON=72 COMMA=54 AMPERS=46 SQUOTE=041 / Use ! for ' in V3 /m026 TILDA=053 / Use + for ~ in V3 /m026 SPACE=40 BSPACE=10 /D017 TAB=11 SLASH=57 ZERO=60 EIGHT=70 NINE=71 C=103 L=114 F=106 EOL=ECNWLN / SOME LOGON PARAMETERS ATMSIZ=17 /MAXIMUM CHARACTERS/ATOM LABSIZ=6 /MAXIMUM CHARACTERS/STATEMENT LABEL WTTSIZ=31 /MAXIMUM CHARACTERS/WAIT TEXT ITEM TXTSIZ=144 /MAXIMUM CHARACTERS/ ~ RESPONSE CXSIZ=26 /DOCUMENTED LENGTH OF CX COMMAND BUFFER SCRSIZ=120 /WIDTH OF SCREEN PHNSIZ=55 / NUMBER OF DIGITS IN A PHONE NUMBER /A024 / / SEE WPF1.PA FOR EQUATES DEFINING CHARACTERS COMING FROM THE FILE. / /-------------------- / THESE ARE CONSTANTS USED BY THE PHONE UTILITY / / OCTAL VALUES OF SOME ASCII CHARACTERS /BSPACE=10 ESIGN=75 CTLA=1 CTLB=2 BELL=7 LARR=74 RARR=76 NUMSGN=43 N=116 LPAR=50 RPAR=51 DASH=55 A=101 B=102 X=130 G=107 / / SOME PHONE PARAMETERS KEYSIZ=WTTSIZ /MAX LENGTH OF SEARCH KEY NAMSIZ=TXTSIZ /MAX LENGTH OF NAME FIELD NUMSIZ=WTTSIZ /MAX LENGTH OF NUMBER FIELD / / /------------ PAGE LOGON, /ENTRY POINT FOR LOGON. COME HERE BY TYPING LG EXIT, XX /COMMON SYSTEM RETURN FOR LOGON & PHONE JMP LOG /GO START UP LOGON / PHONE, XX /ENTRY POINT FOR PHONE. /COME HERE FROM MAIN MENU COMMAND "PH" CDFMYF /MAP OUR FIELD CLA TAD PHONE /SAVE RETURN POINT IN CASE OF EXIT DCA EXIT / VIA LOGON. JMP PHSTRT /GO START UP THE PHONE UTILITY /----------------------------------------- / / / / /----------------------------------------- / EXIT TO MAIN MENU OR CX FROM EITHER LOGON OR PHONE CLSRTN, JMS CLOSE / Close the directory document RTNSY, CLA / Hang up any modem connection /A009 TAD (7402 / Send hangup code to host /A009 JMS HSOUT CIF 60 / Map COMM buffer field. JMS I (COMXIT) / Call COMM Clean-Up code. CDFSYS / ++++ DCA I (CMADSX) / ++++ RTNXIT, /D025 CDFMYF /D025 CIFMNU / Clear date & time and reset scroll /D025 JMS I IOACAL /D025 0 /D025 SCROLR / Default scrolling region /D025 ESCAPE /D025 LFSTRG / Scroll to 1st line. /M017 CDIMNU JMP I EXIT / PHONE UTILITY PHSTRT, JMS INITER /INITIALIZE SOME COMMON STUFF TAD (CLSRTN /SET GOLD HALT RETURN DCA HALT JMS OPENRW / OPEN FILE FOR READ-WRITE /A023 /D023 SPA CLA /SKIP UNLESS OPEN ERROR SZA / SKIP UNLESS OPEN ERROR /A023 JMP ERR1 /OPEN ERROR DCA SCANSW /SET TO SCAN FORWARD FORWRD /FORWARD READ-WRITE DCA GETOP IFNZRO KEY-WTS1 < JMS NULSTR /CLEAR KEY STRING KEY > TAD (SKP CLA) /SET TO "NOSCREEN" MODE DCA SCRNSW / / ASK USER FOR A NAME SEARCH KEY. WE WILL SEARCH / THE DIRECTORY FILE FOR THE NEXT ENTRY WHOSE NAME / FIELD CONTAINS A MATCH FOR THIS KEY. / IF NONE IS SUPPLIED (IE ONLY A CR) THEN WE WILL / USE THE PREVIOUS KEY AGAIN. / IF THERE IS NO PREVIOUS KEY WE WILL MATCH THE / NEXT ENTRY. / / GETKEY, TAD (NEXMSG /INITIALIZE TO NOT DISPLAY OLD KEY /M015 DCA KEYDSP TAD KEY+1 /IS KEY A NULL STRING SNA CLA JMP ASKKEY /YES TAD (OKYMSG /NO, DISPLAY OLD KEY DCA KEYDSP / ASKKEY, CIFMNU /ASK USER FOR NAME KEY JMS I IOACAL 0 KEYMSG 0 0100 /POSITION TO LINE 1 0200 KEYDSP, XX /ADDRESS OF EITHER NULMSG OR OLD KEY MESSAGE KEY+1 0300 MENMSG /RETURN TO MM MESSAGE 0400 TAD (SKP CLA)/INITIALIZE OPTION DISPLAY SWITCH DCA OPTSW / JMS KBGET /GET FIRST CHARACTER DCA CHAR TAD CHAR /IS IT A CR TAD (-EDNWLN SNA JMP KEYGOT /YES, USE KEY AGAIN TAD (EDNWLN-EDMENU /NO, IS IT GOLD MENU SNA CLA JMP CLSRTN /YES, CLOSE DIRECTORY AND RETURN JMS NULSTR /CLEAR OLD KEY KEY /D022 JMS RSLNBF / RESET LINE INPUT BUFFER /A021 KEYGO, TAD CHAR / CK FOR NON-VALID CHARS /A023 TAD (-EDRBWD / SMA CLA / /A023 JMP KEYRUB / CHAR OK - GO PROCESS /A023 JMS BEEPER / RING BELL /A023 JMP KEYAGN / NO - NON VALID EDIT KEY /A023 KEYRUB, TAD CHAR / PICK UP CHAR /A023 JMS CHKRUB KEY /A022 / /D022 TAD CHAR /ADD TO PREVIOUS KEY STRING JMS ADDSTR KEY JMP KEYOVF /KEY TOO LONG KEYAGN, JMS KBGET /GET ANOTHER KEYSTROKE DCA CHAR /SAVE IT TAD CHAR /GET CHARACTER BACK TAD (-EDNWLN /CHECK FOR CR SNA CLA JMP KEYGOT /YES, END OF KEY JMP KEYGO /LOOP FOR NEXT KEY CHAR / KEYOVF, JMS BEEPER /BEEP FOR TOO LONG KEYGOT, JMS CLRSCN /CLEAR SCREEN JMP GETFIL /------------ PAGE / WE HAVE THE COMPLETE KEY. NOW SEARCH FOR / AN ENTRY WITH A MATCH. / GETFIL, JMS CHKHLT /CHECK FOR GOLD HALT JMS NXTNAM /GO GET A NEW NAME AND NUMBER FROM THE DIRECTORY JMP EOFOPT /END OF DIRECTORY ENCOUNTERED JMS SUBSTR /CHECK FOR A SUBSTRING MATCH KEY NAME JMP GETFIL /NO MATCH. GET ANOTHER ENTRY / MATCH FOUND. DISPLAY TO USER / DISPLAY KEY OPTIONS ONLY ONCE OPTSW, SKP CLA /SET TO "CLA" WHEN DISPLAY NEED NOT BE REPAINTED JMP DISPLY TAD (CLA) /SET NOT TO REDISPLAY THESE MESSAGES DCA OPTSW JMS SHOOPT /DISPLAY THE USER OPTIONS / DISPLAY THE USER EXITS CIFMNU JMS I IOACAL 0 XITMSG 1300 1400 CLA TAD (SKP CLA)/SET TO ALLOW BOTH ADVANCE & BACKUP DCA ADVAN TAD (SKP CLA) DCA BACK DISPLY, TAD (SKP /SET SWITCH TO ALLOW DIALING DCA CXLGSW / TAD NUMBR+1 /CHECK FOR NUMBER FOUND SZA JMP DODISP /YES, GO DO DISPLAY JMS MOVSTR /SHOW USER 'NO NUMBER' NONUM NUMBR NOP /SHOULD NEVER TAKE THIS ERROR RETURN DODISP, JMS DISPNM /DISPLAY NAME AND NUMBER / WAIT FOR USER RESPONSE TO OPTIONS DISPLAY OPTWT, JMS KBGET /GET A CHARACTER OPTCHK, TAD (-EDADVN /IS IT ADVANCE SNA JMP ADVAN /YES, GO GET NEXT ENTRY TAD (EDADVN-EDBKUP /IS IT BACKUP SNA JMP BACK /YES, GO GET PREVIOUS ENTRY TAD (EDBKUP-EDFIND /IS IT GOLD SEARCH SNA JMP GETKEY /YES, GO GET A NEW SEARCH KEY TAD (EDFIND-EDMENU /IS IT GOLD MENU SNA JMP CLSRTN /YES, BACK TO MAIN MENU / CXLGSW, SKP /SET TO NOP WHEN CX AND LG ARE NOT ALLOWED JMP BEEP / TAD (EDMENU-C /IS IT C AND (7737 /EITHER CASE SNA JMP CXTST TAD (C-L /NO, IS IT L SNA JMP LGTST BEEP, JMS BEEPER JMP OPTWT / CXTST, JMS KBGET /CHECK FOR POSSIBLE CX AND (7737 /EITHER CASE TAD (-X /DID WE GET IT SZA JMP BEEP /NO JMS DIALER /GO DIAL THE NUMBER JMP NOTANS /NOT ANSWERED JMS CLOSE /ANSWERED, CLOSE DIRECTORY AND JMP RTNCX /EXIT TO CX / NOT ANSWERED FOR SOME REASON NOTANS, JMS KBGET /WAIT FOR A KEYSTROKE DCA T1 /SAVE IT JMS DISPNM /REPAINT NAME AND NUMBER FOR POSSIBLE NEW TRY TAD T1 /GO CHECK OPTION SELECTION JMP OPTCHK LGTST, JMS KBGET /CHECK FOR POSSIBLE LG AND (7737 /EITHER CASE TAD (-G /DID WE GET IT SZA JMP BEEP /NO /D022 JMS RSLNBF / YES - RESET LINE BUFFER /A021 / / AT THIS POINT WE MUST GET THE NAME OF THE LOGON FILE / THE USER WANTS TO USE IF HIS PHONE CALL IS COMPLETED. / CURRENTLY WE GO TO MN1 AND PROMPT IN THE SAME WAY / AS FOR NORMAL LG REQUESTS. IN THE FUTURE BOTH THE / LOGON AND PHONE FILES MAY BE DEFAULTS, CHANGEABLE / THROUGH "SO". IN ANY EVENT, CONTROL MUST ALWAYS / RETURN HERE, EVEN IF GOLD MENU IS PRESSED, IN ORDER / TO CLOSE THE PHONE FILE (WHICH IS STILL OPEN IN CASE / THE USER WANTS A DIFFERENT ENTRY OR THE LINE IS BUSY) / AND TO CLEANUP CX. MENXIT, CIFMNU /YES, ASK FOR LOGON FILE NAME JMS I MNUCAL DLMED1 CLA CDFMNU TAD I (MUBUF+MNSYSA /CHECK FOR GOLD MENU CDFMYF TAD (-EDMENU!4000 SNA CLA /SKIP IF NOT JMP CLSRTN /YES, BACK TO SYSTEM JMS DISPNM /REPOSITION THE CURSOR / JMS DIALER /GO DIAL THE NUMBER JMP NOTANS /NOT ANSWERED JMS CLOSE /CLOSE DIRECTORY JMP LOG /EXIT TO LOGIN /------------ PAGE BACK, SKP CLA /SET TO NOP WHEN "BACK" NOT ALLOWED JMP BEEP AC7777 /SET TO SCAN BACKWARD JMP BACADV / ADVAN, SKP CLA /SET TO NOP WHEN "ADVAN" NOT ALLOWED JMP BEEP / BACADV, DCA SCANSW /SAVE SCAN DIRECTION JMS NXTNAM /GO GET ANOTHER ENTRY JMP GOTEOF /END OF DIRECTORY REACHED JMP OPTSW / END OF FILE ENCOUNTERED GOTEOF, CLA TAD SCANSW /WHICH WAY WERE WE GOING SZA JMP BACEOF /BACKWARD / END OF FILE IN FORWARD DIRECTION = END OF FILE AC7777 /SET TO BACK OVER ONE ENTRY DCA BACKUP TAD (ENDMSG /SHOW END OF FILE DCA ENDBEG TAD (BCKMSG /SHOW ONLY "BACKUP" DCA ADVBCK TAD (NOP) /DISALLOW "ADVANCE" NOW DCA ADVAN TAD (SKP CLA)/AND ALLOW "BACKUP" DCA BACK JMP SHOEND / END OF FILE IN BACKWARD DIRECTION = BEGINNING OF FILE BACEOF, AC7776 /SET TO BACK OVER TWO ENTRIES DCA BACKUP TAD (BEGMSG /SHOW BEGINNING OF FILE DCA ENDBEG TAD (ADVMSG /SHOW ONLY "ADVANCE" DCA ADVBCK TAD (NOP) /DISALLOW "BACKUP" NOW DCA BACK TAD (SKP CLA)/AND ALLOW "ADVAN" DCA ADVAN / SHOEND, CIFMNU JMS I IOACAL 0 EODMSG 0400 /M015 ENDBEG, XX /BEGINNING OR END OF FILE MESSAGE 0500 /M015 0700 /M015 1000 ADVBCK, XX ENTMSG 1300 TAD (SKP CLA)/SET TO REPAINT OPTIONS DCA OPTSW TAD (NOP) /SET TO DISABLE DIALING DCA CXLGSW DCA EOF /CLEAR EOF FLAG TAD SCANSW /FLIP SCAN TO OTHER DIRECTION CMA DCA SCANSW JMP OPTWT /GO WAIT FOR A KEYSTROKE / REPAINT THE USER OPTIONS EOFOPT, JMS SHOOPT JMP GOTEOF SCANSW, 0 /0 = FORWARD SCAN, -1 = BACKWARD / /CMPSTR - COMPARE 2 7-BIT ASCIIZ STRINGS / / JMS CMPSTR / ADDRESS OF FIRST STRING / ADDRESS OF SECOND STRING / NOT EQUAL RETURN (AC=0) / EQUAL RETURN (AC=0) / / A LOWER CASE CHARACTER IN THE FIRST / STRING WILL COMPARE EQUAL TO EITHER / LOWER OR UPPER CASE VERSIONS OF / THAT CHARACTER IN THE SECOND STRING. / / STRINGS MUST BE OF EQUAL LENGTH TO / COMPARE EQUAL. / CMPSTR, XX CLA TAD I CMPSTR /GET ADDR OF S1 DCA X1 ISZ CMPSTR TAD I CMPSTR /GET ADDR OF S2 DCA X2 ISZ CMPSTR /POINT TO NOT EQUAL RETURN CMPLOP, TAD I X1 /FETCH A CHARACTER FROM S1 SNA JMP CMPE1 AND (177 /COMPARE ONLY 7 BITS DCA CMPC1 TAD I X2 /FETCH A CHARACTER FROM S2 SNA JMP I CMPSTR /SECOND STRING SHORTER AND (177 CIA /SAVE -SECOND CHAR DCA CMPC2 DCA CMPULA /CLEAR UPPER/LOWER ADJUSTER TAD CMPC1 /IS FIRST STRING CHARACTER L/C TAD (-172 SMA SZA JMP CMPCMP /NO, >z TAD (172-141 SPA CLA JMP CMPCMP /NO, TAD (-RARR SZA CLA JMP NXT1 / JMS NULSTR /CLEAR NAME STRING NAME JMS NULSTR /CLEAR NUMBER STRING NUMBR GETNAM, JMS GETNXT /STUFF IN ALL CHARACTERS UP TO A < TAD (-LARR SNA JMP CHKNUM TAD (LARR JMS ADDSTR NAME JMP GETNAM /IGNORE OVERFLOW CHARACTERS JMP GETNAM / LOOKNU, JMS GETNXT /SKIP TO A < TAD (-LARR SZA JMP LOOKNU /NOT FOUND YET CHKNUM, JMS GETNXT /CHECK FOR # TAD (-RARR SNA JMP GETRTN /WE HAVE <> TAD (RARR-NUMSGN SNA JMP GETNAR /WE HAVE <# TAD (NUMSGN-N SZA CLA JMP LOOKNU /SKIP TO NEXT < JMS GETNXT /WE HAVE . SKIP TO <> GETNAR, JMS GETNXT TAD (-RARR SZA JMP LOOKNU /<#> NOT FOUND YET. LOOK FOR < / GETNUM, JMS GETNXT /STUFF CHARACTERS INTO NUMBER UP TO A < TAD (-LARR SNA JMP ENDNUM TAD (LARR JMS ADDSTR NUMBR JMP GETNUM /IGNORE OVERFLOW DIGITS JMP GETNUM / / < FOUND. SEE IF IT WAS <> ENDNUM, JMS GETNXT /GET PAST <> TAD (-RARR SNA JMP GETRTN GETDIA, JMS GETNXT /LOOK FOR THE < TAD (-LARR SZA JMP GETDIA /LOOP BACK FOR < JMP ENDNUM /< FOUND. NOW CHECK FOR > GETRTN, ISZ NXTNAM /TAKE NORMAL RETURN / GETEOF, JMP I NXTNAM /TAKE EOF RETURN / / BACK UP TO THE AT THE START OF THE PREVIOUS ENTRY NXBACK, BCKWRD /SET BACKWARD READ-WRITE DCA GETOP TAD BACKUP /GET -NUMBER OF ENTRIES TO GO BACK DCA BACKCT NXTB1, JMS GETNXT TAD (-RARR / > FOUND? SZA JMP NXTB1 /NOT YET JMS GETNXT TAD (-N / N> FOUND? SZA JMP NXTB1 /NOT YET JMS GETNXT TAD (-LARR SZA JMP NXTB1 ISZ BACKCT / FOUND. BACK ANOTHER ENTRY? JMP NXTB1 /YES JMP NXTBK /NOW READ ENTRY IN THE FORWARD DIRECTION BACKCT, XX /COUNT OF ENTRIES WHILE BACKING UP BACKUP, XX /-1 OR -2 ENTRIES TO BACKUP NEXT TIME / GET NEXT CHARACTER FROM PHONE DIRECTORY FILE / IGNORING HARD RETURN. / GO TO GETEOF IF EOF OR BOF. / GETNXT, XX GETNX1, JMS GETCHR /FETCH A CHARACTER JMP GETEOF /NONE FOUND MQL MQA TAD (-ECNWLN /CHECK FOR HARD RETURN SNA CLA JMP GETNX1 /IGNORE IT AND GET ANOTHER CHARACTER MQA /RESTORE CHARACTER JMP I GETNXT /D022CSTRNG, TEXT /^A^A!L/ / IOA text string to output LINBUF with. /D022CRSTRG, CR;0 / return to col 1 before display. LFSTRG, LF;0 / scroll to next line. /------------ PAGE / LOGON UTILITY / THIS IS THE START OF THE LOGON PROCESSOR / COME HERE FROM MAIN MENU COMMAND "LG" / LOG, CDFMYF / Map our field. JMS INITER / Initialize some common stuff AC0001 / Init some counters/pointers. /A011 DCA LINCTR / ... /A011 DCA LINBMP / /A011 TAD (BUFBEG) / Init ptr to saved text. /A011 DCA BUFPTR / ... /A011 TAD (BUFBEG-1) / Zero out saved text buffer. /A011 DCA X0 / ... /A011 TAD (BUFBEG-BUFEND-1)/ Buffer size. /A011 DCA T1 / ... /A011 INIT1, DCA I X0 / zero out the buffer. /A011 ISZ T1 / Loop on negative size count. /A011 JMP INIT1 / .... /A011 DCA TEMODE / SET INITIAL "TEXTSCAN" MODE TAD (NOP) / INITIALIZE TO "SCREEN" DCA SCRNSW TAD (SKP CLA) / INITIALIZE TO STUFF ERROR BUFFER DCA NEXTSW TAD (XRDFNC / SET FOR READ ONLY DCA GETOP TAD (LOGHLT /SET UP GOLD HALT ADDRESS DCA HALT JMS CLRSCN / CLEAR SCREEN /A025 /D025 CIFMNU / Set up to call IOA /D025 JMS I IOACAL / use IOA to clear the screen. /D025 0 / Do I/O to terminal. /D025 SCROLS / Set scrolling region to 2-24 /D025 0100 / Clear screen /D025 ESCAPE /D025 ESCAPE /D025 0100 CDFMNU / Get the file number from MENU area. TAD I (MUBUF+MNUTFN) / ... /M020 CDFMYF CIFFIO / Open file for READ-ONLY. FILEIO / ... XRDFIN SMA CLA / Skip if error condition occurs (shouldn't). JMP PARSE1 / And away we go... ERR1, JMS ABORT;1 / Report file open failure. /----------------------------------------- / / / END OF LOGON PRECESSING / / /----------------------------------------- RTNCX, JMS CLRSCN / Clear screen ENDCMD, CDFMNU / Map MENU field. AC7777 / Tell CX that we're bypassing init. DCA I (MUBUF+MNTMP6) / ... TAD LOADCX / Tell WPCMD that re're chaining to WPCX /A011 DCA I (MUBUF+MNONUM / CX overlay # /A011 TAD LOADCX+1 /A011 DCA I (MUBUF+MNONUM+1 / start address /A011 TAD LOADCX+2 /A011 DCA I (MUBUF+MNONUM+2 / CIF to CX field /A011 CDFMYF / Back to our field. ISZ EXIT / BUMP TO 'CHAIN' RETURN JMP RTNXIT / EXIT / INITIALIZE SOME THINGS COMMON TO PHONE AND LOGON INITER, XX JMS INITWS / INITIALIZE ASCIIZ WORK STRINGS DCA EOF / NOT AT END OF FILE DCA TEMODE / INITIAL "TEXTSCAN" MODE /D022 TAD (LINBUF) / Initialize Screen text pointer. /A017 /D022 DCA TYPPTR / ... /A017 /D022 DCA I TYPPTR / Init buffer to MT. /A017 TAD (SKP) DCA ECHOSW / SET TO ECHO KEYSTROKES JMS CPYTIM / COPY DATE & TIME JMP I INITER / CLEAR THE SCREEN CLRSCN, XX CIFMNU JMS I IOACAL 0 CLRMSG / Clear screen 0 JMP I CLRSCN / LOADCX, 3 /CX OVERLAY, ADDRESS, AND FIELD /A011 200 /A011 CIF 20 /A011 / / COME HERE ON GOLD HALT DURING LOGON LOGHLT, JMS ABORT;2 /EXIT THROUGH ABORT ROUTINE / OPEN FILE FOR READ-WRITE /A023 OPENRW, XX / /A023 CDFMNU / Get the file number from MENU area. TAD I (MUBUF+MNUTFN) / ... /M020 MQL /PUT IN MQ & CLEAR AC CDFMYF CIFFIO / Open file for READ-WRITE. FILEIO / ... XDSKIN JMP I OPENRW / /A023 / CLOSE THE DIRECTORY DOCUMENT CLOSE, XX CIFFIO FILEIO XDSKCL JMP I CLOSE /------------ X=. PAGE / THIS IS THE PARSER FOR THE LOGON PROCESSOR. / THE FIRST (OR ONLY) WORD OF A COMMAND IS / PARSED OFF HERE, AND CONTROL PASSED TO A / ROUTINE TO PERFORM THE REQUESTED ACTION. / / COME TO PARSE1 TO START PARSE1G THE FIRST STATEMENT / / JUMP TO "PARSER" WHEN THROUGH PROCESSING ANY STATEMENT LINE / PARSE1, JMS NEXTCH /FETCH NEXT/FIRST CHARACTER TAD EOF /CHECK FOR EOF SZA JMP ERR3 /GIVE ERROR MESSAGE IF SO PARSER, JMS SKIPBL /SKIP TO NON-BLANK JMP PARSE1 /GO GET NEW LINE IF EOL JMS GETATM /GET AN ATOM TAD CHAR TAD (-COLON /CHECK FOR COLON DELIMITER SZA JMP PBRNCH /GO CHECK ATOM FOR KNOWN COMMAND JMS NEXTCH /ATOM IS A LABEL. GO GET NEXT ATOM JMP PARSER PBRNCH, JMS LISTBR /EXIT TO A ROUTINE TO PROCESS COMMAND CMDLST JMP ERR5 /NO MATCH. NOT A VALID COMMAND ERR3, JMS ABORT;3 ERR5, JMS ABORT;5 NOSCRN, TAD (SKP CLA-NOP) / Load a SKP CLA instr for NOSCREEN. /M017 SCREEN, TAD (NOP) / load a NOP instr for SCREEN. /M017 DCA SCRNSW / SCRNSW = SKP CLA/NOP for NOSCREEN/SCREEN. JMP PARSER / Do next command. / / MENU, ABORT, AND END STATEMENTS ARE PROCESSED HERE. / EACH DRAINS THE COMM LINE UNDER THE CURRENT / SCREEN/NOSCREEN SPECIFICATION BEFORE RELINQUISHING / CONTROL. / / / MENU STATEMENT / MENU, JMS DRAINH / Drain HOST buffer JMP RTNSY / Back to MAIN MENU / / / ABORT STATEMENT / ABORTC, JMS DRAINH / Drain HOST buffer JMS ABORT;6 / Go to abort routine / / / END STATEMENT / ENDCM, JMS DRAINH / Drain HOST buffer JMP ENDCMD / Exit to CX / / CX COMMAND PROCESSED HERE / /CALL: JMP CXCMND / / parses CX command which looks like: CX KH HS KP etc. / note: the 'CX' is already parsed off. / CXCMND, TAD (CXLINE-1) / Get address of where to stuff CX commands. DCA X0 / Set aside. TAD (-CXSIZ / Get length OF CX buffer DCA CXCNT JMS NEXTCH / Get first character. JMS SKIPBL / Skip any leading blanks JMP CXDONE / Jump if EOL CXLOOP, TAD CHAR / Get character TAD (-SLASH) / Check for comments SNA CLA JMS EOLINE / Skip rest of line TAD CHAR TAD (-EOL / Line Terminator? SNA / Skip if no. JMP CXDONE / Jmp if yes. We are done. ISZ CXCNT / Bump buffer count SKP JMP ERR4 / Too long TAD (EOL / Restore character back to normal. JMS UPPER / Change character to upper case. CDFCX / Map CX field. DCA I X0 / Stuff char into CX Line buffer. CDFMYF / Back to our field. JMS NEXTCH / Get next character JMP CXLOOP / and go test it. CXDONE, CDFCX / Map CX field. DCA I X0 / Set line terminator (null) in CX line buffer. CDFMYF / Back to our field. JMP PARSER / Back to command decoder loop. UPPER, XX / Routine to UPPER-CASE a character. / Character is passed back & forth in AC. TAD (-173);SMA;JMP UPPER1 TAD (173-141);SMA;TAD (-40) TAD (141-173) UPPER1, TAD (173) JMP I UPPER CXCNT, 0 / / ROUTINE TO DELAY ONE SECOND WAIT1, XX JMS TIMER WAIT1L, JMS TIMER SNA CLA JMP WAIT1L JMP I WAIT1 / /TIMER / /CALL: JMS TIMER / / Returns w/ AC = # of secs since last call. / TIMER, XX / Entry point. CIFSYS JWAIT JMS CHKHLT / Check HALT FLAG and clear the AC. JMS DOTIME / Update date & time on screen TAD LSTIME / Get time of last time. CIA / Negate for compare. CDFSYS / Map SYS field. TAD I (CLOCK+2) / Get current SEC value. CDFMYF / Back to our field. DCA T1 / Save the difference. TAD T1 / Get back. TAD LSTIME / compute current time DCA LSTIME / and save for next time. TAD T1 / Get the difference back. SPA;TAD (74) / If negative then we bumped a minute. Fix. JMP I TIMER / Return to caller. LSTIME, 0 / Temp to hold the time of the last time. SECNDS, 0 ESCAPE, 33;0 /------------ PAGE / GO - LOGON PROCESSOR GO STATEMENT HANDLER / / THE CURRENT ATOM IS "GO" / / THE JOB OF THIS ROUTINE IS TO GET THE / STATEMENT NAME FOLLOWING THE "GO" AND / READ FILE LINES UNTIL ONE IS FOUND / THAT BEGINS WITH THAT NAME FOLLOWED BY / A COLON. IF FOUND, CONTROL IS TO BE / RETURNED TO THE PARSER. IF NOT FOUND, / IT IS A USER ERROR. / / "WAIT" ENTERS THIS ROUTINE AT "GOT" WHEN A / STRING WITH A TARGET IS MATCHED. THE TARGET / LABEL WILL BE IN "GOTRGT". / / GO, JMS SKIPTO /GET NEXT ATOM (SKIPPING OPTIONAL "TO") JMS MOVSTR /MOVE ATOM TO TARGET ATOM GOTRGT JMP ERR4 /TARGET MORE THAN 6 CHARACTERS / / GOTRGT CONTAINS THE LABEL TO GO TO GOT, TAD (NOP) /TELL NEXTCH TO STOP STUFFING DCA NEXTSW /THE ERROR MESSAGE BUFFER. TAD LINCTR /SAVE THE LINE NUMBER IN CASE OF ERROR DCA GOWLIN / GOTNXT, JMS EOLINE /GET TO NEXT LINE JMS NEXTCH /START NEW LINE JMS GETATM /LOOK FOR A STATEMENT LABEL TAD CHAR /IS ATOM FOLLOWED BY A : TAD (-COLON SZA CLA JMP GOTNXT /NO, TRY NEXT LINE / / FORCE ALL UPPERCASE ALPHAS IN ATOM TO LOWER CASE FOR MATCHING TAD (ATOM+1 DCA T1 /START OF STRING / GOTLCL, CLA TAD I T1 /FETCH A CHARACTER SNA JMP GOTLCC /END OF STRING TAD (-101 /CHECK FOR A SPA JMP GOTLCB /SMALLER THAN A. LEAVE ALONE TAD (101-132 /CHECK FOR Z SPA SNA TAD (40 /UPPER-CASE ALPHA. FORCE TO LOWER TAD (132 DCA I T1 /STORE BACK GOTLCB, ISZ T1 /BUMP TO NEXT CHARACTER JMP GOTLCL /AND TEST AGAIN / GOTLCC, JMS CMPSTR /SEE IF THIS LABEL IS THE ONE WE WANT ATOM GOTRGT JMP GOTNXT /NO, TRY FOR ANOTHER / / YES, TARGET FOUND. TAD (SKP CLA)/TURN ON THE BUFFER STUFFING AGAIN DCA NEXTSW / / CLEAR THE ERROR MESSAGE BUFFER / SO THAT IT WILL BE CURRENT. TAD (BUFBEG-1 DCA X1 GOCLR, DCA I X1 /CLEAR A CHARACTER TAD X1 /CHECK IF ALL DONE TAD (-BUFEND SZA CLA JMP GOCLR /NOT YET, DO NEXT TAD (BUFBEG /RESET POINTER TO START DCA BUFPTR / / PUT THE TARGET NAME IN THE BUFFER AS THE START OF THE LINE TAD (GOTRGT /GET TARGET NAME LOCATION DCA X1 GOTBUF, TAD I X1 /FETCH A CHARACTER SNA JMP GOCOL /END OF NAME. PUT OUT : JMS PUTBUF /PUT CHARACTER INTO BUFFER JMP GOTBUF /GO FOR ANOTHER GOCOL, TAD CHAR /PUT OUT THE DELIMITING : JMS PUTBUF / JMP PARSER /RETURN TO THE PARSER ERR4, JMS ABORT;4 /ELEMENT TOO LONG GOWLIN, 0 /LINE NUMBER OF GO OR WAIT FOR POSSIBLE ERROR MESSAGE / TYPE - LOGON PROCESSOR TYPE STATEMENT HANDLER / / THE CURRENT ATOM IS "TYPE" / / THIS ROUTINE DETERMINES WHETHER WE ARE TO / DO "TYPE [TO] HOST" OR "TYPE [TO] SCREEN" AND THEN / CALLS "TEXT" TO GET THE CHARACTERS TO BE SENT / OUT TO THE REQUESTED DESTINATION. / / / TYPE, JMS SKIPTO /GET NEXT ATOM (SKIPPING OPTIONAL "TO") JMS CMPSTR /LOOK FOR "SCREEN" OR "HOST" SCRENS ATOM SKP JMP TYPSLP /"SCREEN" FOUND JMS CMPSTR HOSTS ATOM JMP ERR7 /NEITHER FOUND / / DO TYPE HOST JMS DRAINH /DRAIN HOST INPUT BUFFER TO SCREEN OR BIT BUCKET TYPHLP, JMS TEXTSC /GO GET NEXT TEXT CHARACTER IN AC JMP ERR10 /TEXT ERROR JMP PARSER /END OF TEXT ENCOUNTERED JMS HSOUT /PUT CHARACTER OUT TO HOST JMP TYPHLP /LOOP FOR NEXT / / DO TYPE SCREEN TYPSLP, JMS TEXTSC /GO GET NEXT TEXT CHARACTER IN AC /D022 JMP TYPERR /TEXT ERROR /D022 JMP TYPDON /END OF TEXT ENCOUNTERED /D022 SPA /DON'T ALLOW BREAK OR DTR TO SCREEN /D022 JMP TYPERR /D022 JMS TTADD / Add character to IOA buffer. /D022 JMP TYPSLP /LOOP FOR NEXT /D022TYPDON, JMS TTDISP / Display stored up buffer. /D022 JMP PARSER / Return to perser. / JMP ERR10 / TEXT ERROR /A022 JMP PARSER / END OF TEXT /A022 SPA / DON'T ALLOW BREAK OR DTR /A022 JMP ERR10 / /A022 JMS KBOUT / OUTPUT CHAR /A022 JMP TYPSLP / LOOP FOR NEXT /A022 ERR7, JMS ABORT;7 /MUST BE SCREEN OR HOST /D022TYPERR, JMS TTDISP / Display stored up buffer. ERR10, JMS ABORT;10/BAD TEXT ELEMENT / FETCH THE NEXT ATOM. / IF IT IS "TO", AND NOT THE LAST ATOM OF THE LINE, / IGNORE IT AND FETCH AGAIN. SKIPTO, XX JMS GETATM /GET NEXT ATOM JMS SKIPBL /MAKE SURE THIS ATOM IS NOT THE LAST ONE JMP I SKIPTO /EOL FOUND, SO DO NOT IGNORE "TO" JMS CMPSTR /CHECK FOR OPTIONAL "TO" TOS ATOM SKP /NOT FOUND, SO RETURN JMS GETATM /IGNORE. GET NEXT ATOM JMP I SKIPTO /------------ PAGE / "TEXTSCAN" - LOGON PROCESSOR TEXT HANDLER / / JMS TEXTSCAN / ERROR RETURN (AC=0) / END OF TEXT RETURN (AC=0) / NORMAL RETURN (AC=NEXT TEXT CHARACTER) / (WARNING: USES X3 WHILE IN MODE 3!) / / ACCEPTABLE INPUTS VIA "NEXTCH": / CR (UPPER OR LOWER-CASE) / LF (DITTO) / BRK (DITTO) (RETURNS 7401) / DTR (DITTO) (RETURNS 7402) / OCTAL DIGIT STRINGS / ' TEXT ' / '~ TEXT ' / BLANKS OR TABS SURROUNDING ANY OF THE FOREGOING / & BETWEEN ANY OF THE FOREGOING / , AND EOL TERMINATING THE TEXT / TEMODE, 0 / / TEMODE IS USED TO KEEP TRACK OF THE CURRENT / STATE OF THE SCAN. IT SHOULD START OUT AT 0. / / / DISPATCH TO THE PROPER ENTRY POINT / BASED ON THE VALUE OF ARG. TEXTSC, XX TAD TEMODE /GET -ARG TAD (JMP I LOTABL) DCA .+1;XX / Dispatch. LOTABL, TEXT0 / MODE 0 --> Initial call. TEXT1 / MODE 1 --> Not initial call, but not inside of a ' TEXT2 / MODE 2 --> Currently inside of a ' TEXT3 / MODE 3 --> Cureently inside of a '~ / INITIAL CALL TEXT0, JMS SKIPBL /SKIP ANY LEADING BLANKS JMP TEDXIT /EOL FOUND TAKE DONE RETURN ISZ TEMODE /SET MODE TO 1 JMP TEXT11 /GO GET FIRST CHARACTER TEXT25, AC0001 /SET MODE TO 1 DCA TEMODE / JMP TEXT1 /GO SEE WHAT (IF ANYTHING) / ROUTINE INITIALIZED, BUT NOT INSIDE OF A ' TEXT1, JMS SKIPBL /SKIP ANY BLANKS JMP TEDXIT /EOL FOUND TAD CHAR /CHECK FOR COMMA TAD (-COMMA SNA JMP TEDXIT /TAKE THE DONE RETURN TAD (COMMA-AMPERS /CHECK FOR CONCATENATION & SZA CLA JMP TEXT11 /GO GET NEXT TEXT ITEM JMS NEXTCH /SKIP OVER CONCATENATION JMS SKIPBL JMP TEEXIT /EOL AFTER & IS AN ERROR / / CHECK NEXT ITEM FOR ', OCTAL DIGITS, CR, LF TEXT11, TAD CHAR TAD (-SQUOTE /IS IT ' SNA JMP TEXT16 /YES, CHECK FOR '~ TAD (SQUOTE-EIGHT /CHECK FOR OCTAL DIGIT SMA JMP TEXT14 /NOT OCTAL TAD (EIGHT-ZERO SPA JMP TEXT14 /NOT OCTAL DIGIT DCA TEOCT /SAVE BIT VALUE / / WE ARE SCANNING ONE OR MORE OCTAL DIGITS TEXT12, JMS NEXTCH /LOOK FOR ANOTHER DIGIT TAD CHAR TAD (-EIGHT /IS IT ANOTHER OCTAL SMA JMP TEXT13 /NO TAD (EIGHT-ZERO SPA JMP TEXT13 /NO DCA TEMP /YES, COMBINE WITH PREVIOUS RESULTS TAD TEOCT R3L /MAKE ROOM FOR 3 MORE BITS TAD TEMP /AND PUT IN CURRENT VALUE DCA TEOCT JMP TEXT12 TEXT13, CLA /LAST OCTAL DIGIT IN. TAD TEOCT /RETURN COMPOSITE RESULT AND P177 JMP TENXIT / / / CHECK FOR CR, LF, BRK, OR DTR TEXT14, JMS GETELM /GET WHATEVER ELEMENT COMES NEXT IN ATOM JMS LISTBR /BRANCH BY CONTENTS TXTLST JMP TEEXIT /NO MATCH FOUND. TAKE ERROR RETURN / / ACTION ROUTINES TCR, TAD (CR-LF /CR TLF, TAD (LF-7401 /LF TBRK, TAD (7401-7402 /BREAK CODE TDTR, TAD (7402 /DTR - HANGUP CODE / JMP TENXIT /RETURN TO CALLER / / RETURN POINTS TENXIT, ISZ TEXTSCAN /NORMAL RETURN SKP TEDXIT, DCA TEMODE /DONE RETURN. BACK TO MODE 0. ISZ TEXTSCAN TEEXIT, /ERROR RETURN JMP I TEXTSCAN / / / ' FOUND. CHECK FOR '~ TEXT16, ISZ TEMODE /SET MODE TO 2 JMS NEXTCH /GET NEXT CHAR TAD CHAR TAD (-TILDA /IS IT ~ SNA CLA JMP TEXT21 /YES, GO CHECK FOR '~' / JMP TEXT2 / CURRENTLY INSIDE OF A ' BUT NOT '~ TEXT2, TAD CHAR TAD (-EOL SNA CLA JMP TEEXIT /TAKE ERROR EXIT ON EOL TAD CHAR DCA TEMP /SAVE CURRENT CHAR TAD CHAR TAD (-SQUOTE /CHECK FOR ' SNA CLA JMP TEXT20 /' FOUND. GO CHECK FOR '' JMS NEXTCH /GET NEXT CHARACTER TAD TEMP /RETURN THE CURRENT CHARACTER JMP TENXIT / / ' FOUND. IT MAY BE THE LITERAL TERMINATOR / OR THE FIRST OF A '' PAIR TO BE TREATED / AS TEXT OF '. TEXT20, JMS NEXTCH TAD CHAR TAD (-SQUOTE /IS THE NEXT CHAR ' ALSO SZA JMP TEXT25 /NO. WE HAD A ' TERMINATOR JMS NEXTCH TAD (SQUOTE /YES, WE HAD ''. RETURN A SINGLE ' JMP TENXIT / / ROUTINE TO DO A CR LF / CRLF, XX CLA TAD (CR /D022 JMS TTADD /SEND CR JMS KBOUT /SEND CR /A022 TAD (LF /D022 JMS TTADD /SEND LF JMS KBOUT /SEND LF /A022 JMP I CRLF /------------ PAGE / / '~ HAS BEEN FOUND. IF IT IS '~' FOLLOWED BY / & OR , OR BLANK OR EOL WE WILL ACCEPT KEYBOARD TEXT AT ONCE /A006 / OTHERWISE WHAT FOLLOWS IT IS A PROMPT TO THE USER. /A006 TEXT21, JMS NEXTCH TAD CHAR /CHECK NEXT CHARACTER TAD (-EOL SNA JMP TEEXIT /ERROR IF IT WAS EOL TAD (EOL-SQUOTE SZA CLA JMP TEXT22 /PROMPT IF IT WAS NOT ' JMS NEXTCH /SEE WHAT FOLLOWS '~' TAD CHAR TAD (-SQUOTE SNA JMP TEXT22 /WE HAVE '~'' SO PROMPT SINGLE ' TAD (SQUOTE-SPACE /CHECK BLANK SZA TAD (SPACE-COMMA /CHECK , SZA TAD (COMMA-AMPERS /CHECK & SZA TAD (AMPERS-EOL SZA CLA /CHECK EOL JMP TEEXIT /ERROR IF '~' NOT FOLLOWED BY ONE OF THE ABOVE JMP TEXT26 /GO GET USER KEYSTROKES WITHOUT PROMPTING /A006 / / PROCESSING '~ / SEND REST OF TEXT ITEM TO SCREEN AS A PROMPT TEXT22, TAD CHAR /D022 JMS TTADD /SEND CHAR JMS KBOUT / SEND CHAR /A022 JMS NEXTCH /GET NEXT CHAR TAD CHAR TAD (-EOL /IS IT EOL SNA CLA /D022 JMP TEXT2E /YES. > ERROR JMP TEEXIT / YES. > ERROR /A022 TAD CHAR TAD (-SQUOTE /IS IT ' SZA CLA JMP TEXT22 /NO, GO DO ANOTHER JMS NEXTCH /YES, SEE WHAT FOLLOWS THE ' TAD CHAR TAD (-SQUOTE SNA CLA JMP TEXT22 /WE HAVE '', SO PROMPT WITH ' /D022 JMS TTDISP / Display (via IOA), the prompt. /A017 /D022 DCA TTCHRS / Reset # of rubout-able chars. /A017 / / WE HAVE REACHED THE PROMPT TERMINATOR, / ACCUMULATE THE RESPONSE IN TSTRNG. TEXT26, JMS NULSTR /INITIALIZE TSRTNG TO NULL /M006 TSTRNG /D022 DCA TTCHRS / Clear rubout character count. /M017 / CHECK THE FIRST RESPONSE CHAR & IF IT IS A RUBOUT / DO NOT ECHO THE RESPONSE ON THE SCREEN JMS KBGET /GET FIRST CHAR DCA TEMP /SAVE IT TAD TEMP TAD (-EDRBCH SZA CLA /SKIP IF A RUBOUT JMP TEXT28 /NOT RUBOUT, PROCEED NORMALLY TAD (CLA) /SET SWITCH TO NOT ECHO THIS TEXT DCA ECHOSW TEXT23, JMS KBGET /GET A RESPONSE CHARACTER DCA TEMP /SAVE RESPONSE TEXT28, TAD TEMP TAD (-EDNWLN /IS THIS THE END OF RESPONSE SNA CLA JMP TEXT24 /YES, GO SEND IT OUT TAD TEMP /NO, CHECK FOR RUBOUT AND ECHO JMS CHKRUB TSTRNG /A022 /D022 TAD TEMP /NO, ADD CHARACTER TO STRING JMS ADDSTR TSTRNG JMP TEEXIT /STRING FULL > ERROR JMP TEXT23 /GO BACK FOR MORE RESPONSE /D022TEXT2E, JMS TTDISP / Display the prompt. /A017 /D022 JMP TEEXIT / Take error exit. /A017 / / RESPONSE IS COMPLETE TEXT24, TAD (SKP) /SET ECHO SWITCH TO ECHO MODE DCA ECHOSW JMS CRLF / Echo CR-LF /A017 ISZ TEMODE /SET MODE TO 3 TAD (TSTRNG /POINT TO STRING ROOT DCA X3 / SEND THE USER RESPONSE TO A ~ PROMPT / FROM TSTRNG, ONE CHARACTER AT A TIME TEXT3, TAD I X3 /FETCH NEXT RESPONSE CHAR SZA /END OF STRING JMP TENXIT /NO, RETURN CHARACTER AC0001 /SET ARG TO 1 DCA TEMODE JMP TEXT1 /BACK TO MAIN TEXT SCAN / TEMP, 0 TEOCT, 0 / / / SCREEN LINES ARE USED AS FOLLOWS: / 0 date and time / 1 ENTER SEARCH KEY / 2 OR PRESS GOLD MENU TO RETURN TO THE MAIN MENU / 3 search key / 4 unused / 5 name selected / 6 phone number and dialing status / 7 unused /10 PRESS ADVANCE OR BACKUP TO SEE ANOTHER ENTRY /11 PRESS GOLD SEARCH TO ENTER A NEW SEARCH KEY /12 PRESS GOLD MENU TO RETURN TO THE MAIN MENU /13 TYPE CX TO DIAL AND ENTER CX /14 TYPE LG TO DIAL AND ENTER LOGON /15 + MN1 FILE SELECTION TEXT AFTER THE USER TYPES LG / / / DISPLAY THE NAME AND NUMBER DISPNM, XX CIFMNU JMS I IOACAL 0 NAMMSG 1500 0400 NAME+1 0500 NUMBR+1 JMP I DISPNM SHOOPT, XX CIFMNU /DISPLAY USER OPTIONS JMS I IOACAL 0 OPTMSG 0700 1000 1100 1200 MENMSG JMP I SHOOPT /------------ PAGE / / WAIT - LOGON PROCESSOR WAIT STATEMENT HANDLER / / THE CURRENT ATOM IS "WAIT" / / THIS ROUTINE DISCARDS OPTIONAL "FOR" AND CHECKS THE NEXT / ATOM FOR "KBD" OR "HOST" (IF NEITHER IS PRESENT THEN / THIS IS A SIMPLE TIME WAIT). THE NEXT ATOM / IS THE TIME INTERVAL IN SECONDS. / THE NEXT ATOM IS THE GO TO TARGET FOR TIME / EXPRIATION (IF NOT PRESENT THEN THE NEXT STATEMENT / IS IMPLIED). ANY REMAINING ITEMS WILL BE / TEXT / GO TO TARGET PAIRS (OF WHICH THERE MAY / BE UP TO FIVE). THE TEXT IS LIMITED TO 25 / CHARACTERS EACH. / / WTMODE WILL BE SET TO 0 FOR TIME ONLY WAIT / 1 FOR WAIT HOST / 2 FOR WAIT KBD WTMODE, 0 / WAIT, JMS GETATM /GET NEXT ATOM JMS CMPSTR /CHECK FOR "FOR" FORS ATOM SKP /SKIP IF NOT JMS GETATM /IGNORE. GET NEXT ATOM DCA WTMODE /SET WAIT MODE TO TIME ONLY DCA WTNSTR /CLEAR TEXT PAIRS COUNT JMS CMPSTR /CHECK NEXT ATOM HOSTS /IS IT HOST? ATOM SKP JMP WTHOST /YES JMS CMPSTR KBDS /IS IT KBD ATOM JMP WTT /NOT KBD OR HOST. MUST BE TIME / WAIT KBD / ISZ WTMODE / WAIT HOST / WTHOST, ISZ WTMODE JMS GETATM WTT, JMS MOVSTR /SAVE TIME INTERVAL ATOM WTTIME JMP ERR11 /BAD TIME SPEC / / TIME IS KEPT IN DOUBLE PRECISION DCA WTSECL /INITIALIZE TO 0 DCA WTSECH TAD (WTTIME DCA X1 / CONVERT TO DP BINARY WTCTL, TAD I X1 SNA JMP WTCTX /END OF TIME STRING. GO LOOK AT TEXTS DCA WTTMP TAD WTTMP /CHECK FOR NUMERIC TAD (-NINE SMA SZA JMP ERR11 /NOT NUMERIC TAD (NINE-ZERO SPA JMP ERR11 /NOT NUMERIC DCA WTTMP / MULTIPLY PREVIOUS RESULT BY 10 CLL TAD WTSECL RAL MQL TAD WTSECH RAL SWP RAL SWP RAL SWP TAD WTSECL SWP SZL IAC TAD WTSECH SWP RAL SWP RAL SWP TAD WTTMP /ADD IN NEW DIGIT DCA WTSECL SWP SZL IAC TAD WTSECH DCA WTSECH JMP WTCTL /LOOP BACK FOR NEXT DIGIT / ALL DIGITS NOW CONVERTED WTCTX, TAD WTSECH /STORE -NUMBER OF SECONDS CMA CLL DCA WTSECH TAD WTSECL CIA DCA WTSECL SZL ISZ WTSECH SKP JMP ERR11 /DON'T ALLOW WAIT 0 JMS NULSTR /CLEAR TIME GO TO TARGET WTGO JMS SKIPBC /SKIP TABS, BLANKS AND COMMAS JMP WTW /EOL FOUND. GO WAIT JMS GETATM /GET TIME TARGET JMS MOVSTR ATOM WTGO JMP ERR4 TAD (WTSLST /GET STRING LIST ADDRESS DCA WTSPTR TAD (WTGLST /SET POINTER TO LIST OF TARGETS DCA WTGPTR TAD (WTXLST /SET POINTER TO LIST OF STRING POSITIONS DCA WTXPTR JMP WTTL1 /GO GET TEXT STRING / TARGET PAIRS / ERR11, JMS ABORT;11 X=. /------------ PAGE / / GATHER TEXT STRING / GO TO TARGET PAIRS / WTTL1, JMS SKIPBC /SKIP DELIMITERS JMP WTW /EOL FOUND. GO WAIT TAD WTMODE /CHECK FOR TIME ONLY WAIT /A013 SNA CLA /NO, WAIT HOST OR KBD /A013 JMP ERR7 /YES, SHOULD NOT HAVE STRINGS /A013 TAD I WTSPTR /GET STRING ADDRESS SNA JMP ERR12 /END OF LIST REACHED. TOO MANY PAIRS DCA WTSS1 TAD I WTSPTR DCA WTSS2 TAD I WTSPTR /ADD TO LIST OF FIRST CHARACTERS IAC DCA I WTXPTR ISZ WTXPTR ISZ WTSPTR TAD I WTGPTR /GET TARGET ADDRESS DCA WTSS3 TAD I WTGPTR DCA WTSS4 ISZ WTGPTR ISZ WTNSTR /BUMP COUNT OF TEXT STRINGS JMS NULSTR /CLEAR A TEXT STRING WTSS1, 0 WTTXL, JMS TEXTSCAN /GO GET A TEXT CHARACTER JMP ERR10 JMP WTETX /END OF TEXT SPA /DON'T ALLOW BREAK OR DTR JMP ERR10 DCA WTTMP /SAVE TEXT CHARACTER TAD WTTMP SNA /DON'T ALLOW NULLS JMP ERR10 TAD (-177 SNA CLA /OR RUBOUTS JMP ERR10 TAD WTTMP TAD (-CR /CHECK FOR CR SZA CLA JMP WTTNCR /NOT CR AC7776 TAD WTMODE /CHECK FOR WAIT KBD SNA CLA /SKIP IF NOT JMP WTTCR /WAIT KBD ... CR FOUND, DO NOT PUT ON STRING WTTNCR, TAD WTTMP JMS ADDSTR /APPEND CHARACTER TO STRING WTSS2, 0 JMP ERR4 JMP WTTXL /GO GET ANOTHER / / WAIT KBD ... CR FOUND. SHOULD BE THE END OF TEXT ITEM WTTCR, JMS TEXTSCAN /SYNTAX ERROR IF MORE TEXT AFTER A CR JMP ERR10 SKP JMP ERR10 / / NOW GET THE TARGET ASSOCIATED WITH THE TEXT WTETX, JMS NULSTR /CLEAR TARGET WTSS3, 0 JMS SKIPBC JMP WTW /EOL FOUND JMS GETATM /GET TARGET JMS MOVSTR ATOM WTSS4, 0 JMP ERR4 JMP WTTL1 /GO LOOK FOR ANOTHER PAIR / / ALL TEXT / GO TO PAIRS ARE IN WTW, JMS TIMER /INITIALIZE THE SYSTEM TIMER AC7776 TAD WTMODE /SEE WHAT KIND OF WAIT THIS IS SZA JMP WTTIML /NOT WAIT KBD. GO CHECK TIME. / WAIT KBD JMS NULSTR /INITIALIZE THE KEYBOARD STRING WTKBS /D022 DCA TTCHRS /RESET KEYSTROKE COUNTER JMP WTTIML /START TIMING AND MONITORING THE KBD / ERR12, JMS ABORT;12 /D022TTADD, XX / Common routine to add character (from file) to IOA buffer. /D022 DCA I TYPPTR / Stuff character into buffer. /D022 TAD I TYPPTR / Get character back. /D022 ISZ TYPPTR / Bump buffer ptr. /D022 TAD (-LF) / Did we just output a LINE FEED? /D022 SNA CLA / Skip if no. If yes, dump stored buffer. /D022 JMS TTDUMP / Dump stored up buffer. /D022 JMP I TTADD / Return to caller. /D022TTDUMP, XX / Common routine to dump stored up buffer. /D022 JMS TTDISP / Display stored buffer (thus far). /D022 TAD (LINBUF) / Initialize buffer ptr. /D022 DCA TYPPTR / ... /D022 DCA TTCHRS / Reset # of characters in TT buffer (for Rubout). /D022 JMP I TTDUMP / Return to caller. /D022TTDISP, XX / Routine to display contents of stored buffer. /D022 DCA I TYPPTR / Set stopper. /D022 CIFMNU / Call IOA to output what we've got thus far. /D022 JMS I IOACAL / ... /D022 KBOUT / Use KBOUT routine to output (also check for HALT). /D022 CSTRNG / Control string /^A/ /D022 CRSTRG / 1st output a CR. /D022 LINBUF / where the actual text to output is. /D022 JMP I TTDISP / Return to caller. /D022TTADDD, XX / Called from IOACAL to output PUTMSG txt. /A018 /D022 DCA TTDISP / Save char. /D022 RDF / Get return field. /D022 TAD CIDF0 / Create a return CIF CDF instr. /D022 DCA TTADEX / Save for the exit. /D022 CDFMYF / Map our field. /D022 TAD TTDISP / Get char to output. /D022 SZA / Skip if the end. /D022 JMS TTADD / if not the end then add to buffer. /D022TTADEX, XX / Return CIF CDF instruction. /D022 JMP I TTADDD / Return to caller. FOFMES, IFDEF ENGLSH < TEXT /&FILE &OPEN &FAILURE/> IFDEF ITALIAN < TEXT /&DOCUMENTO DI COLLEGAMENTO NON ESITENTE/> IFDEF V30NOR < TEXT '&KAN IKKE FINNE FIL'> /A027 IFDEF V30SWE < TEXT '&FEL VID \VPPNING AV FIL'> IFDEF DUTCH < TEXT '&FOUT BIJ OPENEN BESTAND'> IFDEF SPANISH < TEXT '&FALLO AL &ABRIR &FICHERO'> /------------ PAGE / UPDATE THE TIME LIMIT FOR THIS WAIT / WTTIML, JMS TIMER /GET ELAPSED SECONDS CLL TAD WTSECL /APPLY TO LIMIT DCA WTSECL SZL ISZ WTSECH SKP JMP WTTEXP /TIME LIMIT HAS EXPIRED / TAD WTMODE /CHECK KIND OF WAIT WE ARE DOING CIA SNA JMP WTTIML /TIME WAIT ONLY IAC SNA CLA JMP WTH /GO TO WAIT HOST JMP WTK /GO TO WAIT KBD / / THE TIME LIMIT HAS EXPIRED / WTTEXP, CLA TAD (WTGO /GET THE ADDRESS OF THE GO TO TARGET JMP WTEXIT WTXGO, TAD (WTGLST /GET THE ADDRESS OF THE STRING'S TARGET TAD WTNSTR TAD WTSCTR DCA WTTMP TAD I WTTMP WTEXIT, DCA WTTARG /SAVE TARGET STRING ADDRESS TAD WTTARG /CHECK FOR NULL TARGET DCA X1 TAD I X1 SZA CLA JMP WTTGO /EXIT TO TARGET JMS EOLINE /NULL TARGET STRING. GO TO NEXT LINE JMP PARSER WTTGO, JMS MOVSTR /MOVE TARGET STRING WTTARG, 0 GOTRGT JMP ERR4 JMP GOT /EXIT VIA THE GO PROCESSOR WTTMP, 0 WTNSTR, 0 WTSCTR, 0 WTSECL, 0 /WAIT SECONDS, LOW ORDER WTSECH, 0 /WAIT SECONDS, HIGH ORDER / WAIT KBD WTK, JMS KBINPT /GET A CHAR JMP WTTIML DCA WTKCH /SAVE KEYBOARD CHARACTER TAD WTKCH JMS CHKRUB /ECHO IT WTKBS /A022 /D022 TAD WTKCH /IS IT CR TAD (-EDNWLN SNA CLA JMP WTKCR /YES TAD WTKCH /NO, APPEND TO KEYBOARD STRING JMS ADDSTR WTKBS JMP ERR4 JMP WTTIML /GO CHECK ON TIME AGAIN / / CR FOUND. THE KEYBOARD ENTRY IS COMPLETE WTKCR, TAD (LF /CR FOUND. ADD A LF JMS KBOUT / TAD WTNSTR /CHECK NUMBER OF STRINGS TO MATCH SNA JMP WTTIML /NONE. GO CHECK TIME CIA /SAVE -COUNT DCA WTSCTR TAD (WTSLST /GET LIST OF STRING ADDRESSES DCA WTKPTR WTKCR2, TAD I WTKPTR /GET A STRING ADDRESS DCA WTKSAD JMS CMPSTR /CHECK FOR A MATCH WTKSAD, 0 WTKBS SKP JMP WTXGO /MATCH FOUND. GO TO THE TARGET LABEL ISZ WTSCTR /THIS STRING DID NOT MATCH. ARE THERE MORE JMP WTKNXT /YES, TRY NEXT JMS NULSTR /NO, CLEAR KEYBOARD STRING WTKBS JMP WTTIML /GO CHECK TIME AND WAIT FOR MORE KB INPUT / WTKNXT, ISZ WTKPTR /BUMP TO NEXT STRING ADDRESS JMP WTKCR2 WTKCH, 0 WTKPTR, 0 / / PUSH THE AC CHARACTER INTO A CIRCULAR BUFFER FOR / USE BY THE ABORT ERROR PROCESSOR. DO IT / HERE RATHER THAN AT THE GETCHR LEVEL SO / THAT MISSING GO TARGETS DON'T WIPE OUT / THE EVIDENCE. / PUTBUF, 0 DCA I BUFPTR / Save character in character buffer. TAD BUFPTR / Now to update buffer pointer. TAD (-BUFEND) / See if currently at last buffer posn. SMA / Skip if not yet. TAD (BUFBEG-BUFEND-1) / Re-orient to start of buffer. TAD (BUFEND+1) / Bump ptr by 1. DCA BUFPTR / Save ptr. JMP I PUTBUF /RETURN /------------ PAGE / WAIT HOST WTH, JMS HSINPT /WAIT HOST. GET A CHAR JMP WTTIML /NONE FOUND AND P177 /KEEP ONLY 7 BITS SNA JMP WTTIML /SKIP NULLS DCA WTHCHR /SAVE CHARACTER TAD WTHCHR JMS SCROUT /GO DISPLAY IF "SCREEN" IN EFFECT / / / LATEST CHARACTER FROM THE HOST IS IN WTHCHR. / CHECK FOR A MATCH WITH ANY OF THE TEXT STRINGS. / A LOWER CASE ALPHA STRING CHARACTER WILL MATCH / EITHER A LOWER OR UPPER CASE HOST CHARACTER / IN WTHCHR. / / TAD WTNSTR /GET NUMBER OF STRINGS TO BE CHECKED SNA JMP WTTIML /NO STRINGS. GO CHECK TIME LIMIT CIA DCA WTSCTR TAD (WTXLST /INITIALIZE LIST POINTERS DCA WTXPTR TAD (WTSLST DCA WTSPTR WTXL1, TAD I WTXPTR /GET ADDRESS OF A STRING CHARACTER DCA WTADDR DCA WTUCLC /CLEAR THE UPPER/LOWER ADJUSTER TAD I WTADDR /GET THE CHARACTER TAD (-172 /IS IT LOWER CASE SMA SZA JMP WTNLC /NO TAD (172-141 SPA CLA JMP WTNLC /NOT LOWER CASE TAD (40 /STRING CHARACTER IS LOWER CASE DCA WTUCLC /STORE ADJUSTMENT WTNLC, CLA TAD I WTADDR /GET THE STRING CHARACTER AGAIN CIA TAD WTHCHR /DOES IT MATCH SZA TAD WTUCLC SZA CLA JMP WTXNO /DOES NOT MATCH ISZ WTADDR /MATCHES, BUMP TO NEXT CHARACTER IN STRING TAD I WTADDR /CHECK IF END OF STRING SNA CLA JMP WTXGO /YES. THIS STRING HAS BEEN MATCHED TAD WTADDR /NOT THE END YET. SET TO TEST NEW CHAR NEXT TIME DCA I WTXPTR JMP WTXNXT / THE LATEST CHARACTER DID NOT MATCH THE ONE / POINTED TO IN THIS STRING. BACK UP OVER ANY / REPEATED SEQUENCES AND TRY AGAIN. IF NO / REPEATS, RESET THE POINTER TO THE BEGINNING / OF THE STRING. WTXNO, TAD I WTSPTR /GET ADDRESS OF FIRST STRING CHAR IAC DCA WTLOPS TAD WTLOPS /SEE IF WE ARE BEYOND FIRST CHAR CIA TAD WTADDR SNA CLA JMP WTXNXT /NO, THE MISMATCH WAS AT THE BEGINNING TAD WTLOPS /GET ADDRESS OF SECOND CHAR IAC DCA WTHIPS WTXNO1, TAD WTHIPS /CHECK IF UP TO CURRENT MISMATCH CIA TAD WTADDR SNA CLA JMP WTXNO4 /YES, NO MORE REPEATS TO CHECK TAD WTLOPS /INITIALIZE THE LOW RUNNING POINTER DCA WTLOP TAD WTHIPS /INITIALIZE THE HIGH RUNNING POINTER DCA WTHIP WTXNO2, TAD I WTLOP /GET A LOW CHARACTER CIA TAD I WTHIP /COMPARE TO A HIGH CHARACTER SNA CLA JMP WTXNO3 /THEY MATCH, SO THIS MAY BE A REPEATED SEQUENCE ISZ WTHIPS /NO MATCH. TRY ONE FARTHER UP JMP WTXNO1 WTXNO3, ISZ WTLOP /BUMP BOTH RUNNING POINTERS ISZ WTHIP TAD WTHIP /CHECK IF WE ARE UP TO THE CURRENT MISMATCH CIA TAD WTADDR SZA CLA JMP WTXNO2 /NO, KEEP GOING ON THIS REPEAT TAD WTLOP /COMPLETE REPEAT FOUND. DCA I WTXPTR /RESUME MATCHING AFTER IT JMP WTXL1 WTXNO4, TAD WTLOPS /NO REPEAT. POINT BACK TO STRING START DCA I WTXPTR JMP WTXL1 /TEST FOR MATCH THERE WTXNXT, ISZ WTSCTR /CHECK FOR MORE STRINGS TO TEST SKP JMP WTTIML /NONE. GO CHECK TIME LIMIT ISZ WTXPTR /POINT TO THE NEXT ONE ISZ WTSPTR JMP WTXL1 WTLOP, 0 WTLOPS, 0 WTHIP, 0 WTHIPS, 0 WTUCLC, 0 WTHCHR, 0 WTADDR, 0 /D025SCROLS, TEXT /^P!E^A&[2;24R^A&[?6H^P/ /SET SCROLL 2 TO 24 /D025SCROLR, TEXT /!X^A&[R!L!Y^A/ /RESET SCROLL /------------ PAGE / / "DIAL" COMMAND. / PARSE OFF COMMA DELIMITED PHONE NUMBER TEXT / AND SEND TO THE DIALER. IF NOT ANSWERED, TRY / THE NEXT NUMBER (IF ANY). EXIT THROUGH ABORT / IF NO CALLS COMPLETED. DIAL, JMS DRAINH /CLEAR OUT THE COMM LINE JMS NULSTR /CLEAR OUT THE PHONE NUMBER NUMBR JMS CRLF /GET TO A FRESH LINE JMS PUTMSG /SHOW "DIALING" DIAMSG DIGET, JMS TEXTSC /GET A PHONE NUMBER CHARACTER JMP ERR10 /SYNTAX ERROR JMP DIGOT /FULL NUMBER NOW FETCHED SPA /DON'T ALLOW BREAK OR DTR JMP ERR10 DCA T1 TAD T1 /DISPLAY IF "SCREEN" IN EFFECT JMS SCROUT / Add to TT buffer (if SCREEN in effect). /D022 JMS TTDISP / Update screen. TAD T1 JMS ADDSTR /APPEND TO NUMBER NUMBR JMP ERR4 /TOO BIG JMP DIGET /GO BACK FOR ANOTHER DIGOT, JMS DIALER /GO TRY DIALING THE NUMBER JMP DINOA /NOT ANSWERED JMS EOLINE /ANSWERED. SKIP REST OF LINE JMP PARSE1 /BACK TO PARSE NEXT LINE DINOA, JMS CRLF /GET NEW LINE JMS SKIPBC /LOOK FOR ANOTHER NUMBER TO TRY SKP /NONE JMP DIAL /BACK TO TRY AGAIN JMS ABORT;14 /NO NUMBER ANSWERED. ABORT / /KBINPT / /CALL: JMS KBINPT / RETURN 1: no char return point (AC set to 0) / RETURN 2: char return in AC. / / if no character, JWAIT is executed before return. / KBINPT, XX / entry point. CIFSYS / Map SYS field. XLTIN / Get keyboard input character. JMP KBINP1 / Take nothing exit. ISZ KBINPT / Map return. TAD (-EDTAB / Check for TAB SNA TAD (ECTAB-EDTAB / Turn into a real TAB TAD (EDTAB JMP KBINP2 / Return w/ character in AC. KBINP1, CIFSYS / Map sys field. JWAIT / Let others run. KBINP2, JMP I KBINPT / Return to caller. w/ character (or 0) from XLTIN / /KBOUT / /CALL: JMS KBOUT (AC = character to output) / / character is output to terminal, JWAITing and checking HALT flag / as necessary. Return is made only after character is output. / This routine is made cross-field callable so that it may be used / as the output routine for IOA calls. / KBOUT, XX / entry point. DCA KBTEMP / Save character. /D022 RDF / Get field of caller. /D022 TAD CIDF0 / Make our return CIF CDF instr. /D022 DCA KBEXIT / Return to caller. /D022 CDFMYF / back to our field. KBOUT1, TAD KBTEMP / Get character to output. TAD (-TAB / TAB ? /A022 SNA / NO /A022 TAD (SPACE-TAB / CONVERT TABS TO SPACES /A022 TAD (TAB / RESTORE CHAR /A022 CIFSYS / Map SYS field. TTYOU / output character. SKP / Skip if couldn't. JMP I KBOUT / RETURN WHEN CHAR IS OUTPUTTED /A022 /D022 JMP KBEXIT / Return when character is outputted. JMS CHKHLT / Check HALT flag. CIFSYS / Map SYS field for JWAIT. JWAIT / Let others run. JMP KBOUT1 / Try again. /D022KBEXIT, XX / Set to return CIF CDF. /D022 JMP I KBOUT / Return to caller. KBTEMP, 0 / a temp for the char being output. / /HSINPT / /CALL: JMS HSINPT / RETURN 1: no char return point (AC set to 0) / RETURN 2: char return (AC set to 7 bit character). / / additionally, if no character, JWAIT is executed before return. / HSINPT, XX / entry point. JMS CHKHLT / See if to be halted. CIFSYS / Map SYS field. HS2IN / Get character from HOST line. JMP HSINP1 / Take nothing exit. ISZ HSINPT / Map return. JMP HSINP2 / Return w/ character in AC. HSINP1, CIFSYS / Map sys field. JWAIT / Let others run. HSINP2, JMP I HSINPT / Return to caller. w/ character (or 0) from TTYIN / /HSOUT / /CALL: JMS HSOUT (AC = character to output) / / MAY DESTROY T1 / / character is output to terminal, JWAITing and checking HALT flag / as necessary. Return is made only after character is output. / HSOUT, XX / entry point. HSOUT1, CIFSYS / Map SYS field. HS2OU / output character. SKP / Skip if couldn't. JMP I HSOUT / Return upon success. DCA T1 / Save character. JMS CHKHLT / Check HALT flag. TAD T1 / Get character back. CIFSYS / Map SYS field for JWAIT. JWAIT / Let others run. JMP HSOUT1 / Try again. / /CHKHLT / /CALL: JMS CHKHLT / / If HALT FLAG is set, reset it and go to halt address. / Otherwise, return with AC=0. / CHKHLT, XX / entry point. CLA / init AC. CDFSYS / Map SYS field. TAD I HLTFLG / Get halt flag indicator. CDFMYF / Back to our field. SNA CLA / Skip if set. JMP I CHKHLT / Return to caller. CDFSYS / Clear HLTFLG DCA I HLTFLG CDFMYF JMP I HALT / GOLD HALT HAS BEEN SENT TIMMSG, TEXT /!X^A&[?6L^P^A!L^A&[?6H!Y/ CLRMSG, TEXT /^P!E/ /------------ PAGE / / SUBROUTINE TO DIAL A NUMBER / / MOVE NUMBER TEXT TO ASCIIZ STRING "NUMBR" / JMS DIALER / NOT ANSWERED RETURN / ANSWERED RETURN DIALER, XX /D022 JMS RSLNBF / RESET LINE BUFFER /A021 CDFMNU / CK FOR INTEGRAL MODEM ENABLED /A016 TAD I (MUBUF+MNFMAT) / /A016 CDFMYF / /A016 AND (MNFM4X / /A016 SNA CLA / SKIP IF ENABLED /A019 JMP IMODC1 / NO - ASSUME DF03 /A019 TAD (4003 / ISSUE ENABLE /A019 H2DTR / /A019 CLA / MUST BE CLEARED /A019 LAS / CK IF THE MODEM IS PRESENT /A019 AND (4000 / BIT 0 IS MODEM BIT /A019 SNA CLA / 0 = ENABLED /A019 JMP ADIMCK / YES - GO INIT., RET. AT IMODEX, /A019 IMODC1, JMS DRAINH / NO - CLEAR INPUT BUFFER /A016 TAD (CTLA / ASSUME DF03 /A016 JMS HSOUT / /A016 JMS WAIT1 / /A016 TAD (CTLB / /A016 JMS HSOUT / /A016 JMS WAIT1 / /A016 IMODEX, TAD (-43 /INITIALIZE A 35 SECOND WAIT /M016 DCA SECNDS JMS PUTMSG /TELL USER TO BE PATIENT WATMSG TAD (NUMBR /POINT TO NUMBER DCA X1 / SEND DIGITS ONE AT A TIME NUMLOP, CLA TAD I X1 /FETCH A CHARACTER SNA JMP DIALWT /LAST DIGIT SENT. WAIT FOR RESPONSE TAD (-DASH /CHECK FOR IGNORED CHARACTERS SZA TAD (DASH-LPAR SZA TAD (LPAR-RPAR SZA TAD (RPAR-SPACE SNA JMP NUMLOP /IGNORE THIS CHAR AND GET ANOTHER TAD (SPACE) / RESTORE CHAR /A024 /D024 TAD (SPACE-ESIGN /CHECK FOR = /D024 SZA /D024 JMP NUMTST /GO CHECK FOR VALID DIGIT /D024 TAD (ESIGN /= IS A VALID DELAY CHAR /D024 JMP SEND /SEND IT OUT / /D024NUMTST, TAD (ESIGN-ZERO /CHECK FOR VALID DIGIT /D024 SPA /D024 JMP BADNUM /D024 TAD (ZERO-NINE /D024 SMA SZA /D024 JMP BADNUM /D024 TAD (NINE SEND, JMS HSOUT /SEND DIGIT TO DIALER JMP NUMLOP /GO GET NEXT DIGIT / NUMBER HAS BEEN COMPLETELY DIALED. WAIT FOR ANSWER DIALWT, TAD (43 / # SIGN FOR INTEGRAL MODEM /A016 JMS HSOUT / /A016 DIALW1, JMS CHKHLT /CHECK FOR GOLD HALT JMS TIMER /WAIT 35 SECONDS AFTER START OF DIALING TAD SECNDS DCA SECNDS TAD SECNDS SMA JMP UNKOWN /NO RESPONSE AT ALL JMS HSINPT /WAIT FOR A CHAR JMP DIALW1 /NONE YET AND (177 / SEVEN BITS ONLY /A016 TAD (-A /IS IT A SMA / /A016 SKP / /A016 JMP DIALW1 / LESS THAN "A" DON'T CARE /A016 SNA / GREATER THAN "A" - CONTINUE /A016 JMP ANSW /YES. LINE ANSWERED TAD (A-B /IS IT B SNA / NO - CONTINUE /M016 JMP DALBSY / YES - LINE IS BUSY /A016 TAD (B-N / CK FOR "No" /A016 SNA / /A016 JMP NOANS / YES - /A016 JMP DIALW1 / NO - GO BACK AND WAIT /A016 / LINE ANSWERED ANSW, JMS WAIT1 / WAIT FOR REST OF STRING /A016 JMS DRAINH / CLEAR INPUT BUFFER /A016 JMS PUTMSG /TELL USER ANSMSG ISZ DIALER /TAKE SECOND RETURN / DIALING COMPLETED. RETURN SUCCESS OR FAILURE DIALX, JMS WAIT1 /ALLOW A SECOND FOR USER TO SEE MESSAGE JMS CRLF /GET TO NEXT LINE ON SCREEN JMP I DIALER / BADNUM, JMS PUTMSG /BAD CHAR IN NUMBER. TELL USER BADMSG JMP DIALX /TAKE NO ANSWER RETURN / UNKOWN, JMS PUTMSG /UNKNOWN RESPONSE FROM DIALER UNKMSG JMP DIALX /TAKE NO ANSWER RETURN /------------ PAGE / /ABORT / /CALL: JMS ABORT / n / / n is an argument indicating which error message to display. / / 1 = FILE OPEN FAILURE / 2 = GOLD HALT DETECTED / 3 = MISSING END STATEMENT / 4 = ELEMENT TOO LONG / 5 = INVALID COMMAND / 6 = ABORT STATEMENT EXECUTION. / 7 = TYPE OR WAIT OBJECT NOT SPECIFIED /A013 / 10 = INVALID TEXT ELEMENT / 11 = INVALID TIME SPECIFICATION / 12 = TOO MANY WAIT STRINGS / 13 = MISSING GO/WAIT TARGET / 14 = DIALING NOT COMPLETED / USES T1 / ABORT, XX / Entry point. PURGEK, JMS KBINPT / Purge keystrokes SKP / Skip if none JMP PURGEK / Loop for more CIFMNU / Map menu field. JMS I IOACAL / Display start of message. 0 / No alternate routine for output. ABRMSG / Abortion message. 0 / Posn cursor to HOME. 0424 / Posn cursor to line 4 col 20. TAD I ABORT / Get calling argument. TAD (ABRTBL-1) / Index into message pointer table. DCA T1 / Get ptr to message address. TAD I T1 / Get Message address. DCA ABRTL1 / plop down. DCA NOTYET / Init 'seen EOL' flag. /A011 TAD ABRTL1 / Check for ABORT 13 TAD (-GOWMES / Which has a different format message SZA CLA / Skip if GO/WAIT message JMP ABRTT1 / Jump for all other messages CIFMNU / Map menu display JMS I IOACAL / Display the missing GO/WAIT label 0 GOWMES GOTRGT+1 / Start of target name JMP ABRTT2 / Rejoin other messages ABRTT1, CIFMNU / Map IOACAL. JMS I IOACAL / Display the reason 0 / to the screen. ABRTL1, XX / Set to message to display. ABRTT2, CIFMNU / Now display where the error occurred. JMS I IOACAL / ... 0 / To the terminal DSPMSG / the message. 0624 / line 6, col 20 LINCTR / ptr to the line #. 1000 / Where to put up the text. TAD BUFPTR / Get ptr to saved text. DCA T1 / initialize bufptr. JMP ABRTL3 ABRTL2, TAD T1 / Check for doneness. CIA / ... TAD BUFPTR / ... SNA CLA / Skip if not done. JMP ABRTL6 / Jmp when done outputting saved text. ABRTL3, TAD NOTYET / displaying yet? SNA CLA / Skip if yes. JMP ABRTL4 / JMP if no. TAD I T1 / Get character to output. SNA / Skip if not null. JMP ABRTL5 / Jmp if null character. Go to next. JMS KBOUT / Output character ABRTL4, TAD I T1 / Get character just output. SNA JMP ABRTL9 / Jump if null TAD (-ECNWLN) / Check for NEW LINE. SZA CLA / Skip if yes. JMP ABRTL5 / NOPE! continue below. TAD (CR) / get to start of next line. JMS KBOUT ABRTL9, ISZ NOTYET / time to display!!! ABRTL5, TAD T1 / Now check for buffer wrap. TAD (-BUFEND) / ... SMA / Skip if not at end. TAD (BUFBEG-BUFEND-1) / Wrap to start of buffer. TAD (BUFEND+1) / ... DCA T1 / Save in register. JMP ABRTL2 / Go do next character. ABRTL6, TAD NOTYET / Are we displaying SZA CLA / Skip if no. have to re-display. JMP ABRTL7 / Go finish up. ISZ NOTYET / enable display. JMP ABRTL3 / Go re-display the text. ABRTL7, CIFMNU / Map menu. JMS I IOACAL / Finish the display. 0 / No alternate output routine. FINMSG / Finish the display... 2014 / Line 16 col 12 MENMSG 2214 / Line 18 col 12 ABRTLP, JMS KBGET / Look for RETURN or GOLD MENU TAD (-EDMENU) / GOLD:MENU!!! return to Main Menu. SNA / Skip if no. JMP RTNSY / JMP if yes!!! Back to Main Menu. TAD (EDMENU-EDNWLN) / RETURN? SNA CLA / Skip if no. Report error. JMP RTNCX / YES! Onward to CX. JMS BEEPER / REPORT ERROR JMP ABRTLP / Get another input. / ROUTINE TO UPDATE OUR DISPLAY OF THE DATE & TIME DOTIME, XX CIFPRT / Call FLABUZ in printer field. JMS I (FLABUZ) / ... (display printer error if appropriate) CIFMNU / Now display updated time. JMS I TIMCAL / ... JMP I DOTIME / no time change. don't update display. JMS CPYTIM / Copy new time values. CIFMNU / Now to update the screen. JMS I IOACAL / ... 0 / output directly to the terminal. TIMMSG / ... ESCAPE 0072 / Line 1, col 59. DATTIM / Time/Date string. ESCAPE JMP I DOTIME NOTYET, 0 / set to <> 0 when start displaying saved lines. / / ROUTINE TO RING THE BELL / BEEPER, XX CLA TAD (BELL JMS KBOUT JMP I BEEPER /------------ PAGE / ROUTINE TO WAIT FOR A CHARACTER FROM THE KEYBOARD / AND RETURN IT IN THE AC. THE DATE AND TIME DISPLAY / WILL BE UPDATED WHILE WAITING. / KBGET, XX KBGETL, JMS DOTIME /UPDATE DATE & TIME DISPLAY JMS CHKHLT /CHECK FOR GOLD HALT JMS KBINPT /GET THE NEXT KEYSTOKE IN THE AC JMP KBGETL /NOT FOUND JMP I KBGET /FOUND. RETURN CHAR IN AC / / ROUTINE TO PUT THE AC ON THE SCREEN, TAKING / APPROPRIATE ACTION FOR RUBOUT. / / / ROUTINE TO PUT THE AC ON THE SCREEN, TAKING / APPROPRIATE ACTION FOR RUBOUT. / CHKRUB, XX DCA GTTEMP / Save incoming char. TAD I CHKRUB / Get string pointer. DCA CHKPTR / Save for positioning the pointers. ISZ CHKRUB / Bump to actual return. ECHOSW, SKP / SET TO (CLA) WHEN USER WANTS NO ECHOING/A022 JMP CHKXIT / RETURN IF ECHO IS OFF /A022 CKRUB1, ISZ CHKPTR / Bump string pointer. TAD I CHKPTR / Get next char of string. SZA CLA / Skip if not at string end yet. JMP CKRUB1 / Keep looping until just after last char. TAD GTTEMP / Get char back. TAD (-EDRBCH / RUB CHAR? SNA / Skip if no. JMP GTRBCH / JMP if so. Rubout the last character. TAD (EDRBCH-EDRBWD / RUB WORD? SNA / Skip if no. JMP GTRBWD / JMP if so. Rubout the last word. TAD (EDRBWD / Restore the character. JMS KBOUT / Display (echo) the character. CHKXIT, TAD GTTEMP / Get character. JMP I CHKRUB / return to caller. / / GTRBCH - RUBOUT A CHARACTER. / GTRBCH, JMS GTRBCR / CALL RUB CHAR CKBEEP, JMS BEEPER / NO CHARACTERS TO RUBOUT JMP CHKXIT / Something successfully rubbed out. exit. / / GTRBWD - RUBOUT A WORD / GTRBWD, JMS GTBKCR / Get character one back from here TAD (-40) SMA SZA CLA / Skip if a space or less (ie not a character). JMP GTRBW2 / found a character (start of word). JMS GTRBCR / Rub out leading spaces, tabs, etc. JMP CHKXIT / Line empty return. JMP GTRBWD / do rest of leading spaces, tabs, etc. GTRBW2, JMS GTBKCR / Get character one back from here TAD (-40) SMA SZA CLA / Skip if not a word character. JMS GTRBCR / Rub out a character of word. JMP CHKXIT / Line empty, so done. JMP GTRBW2 / check out next (preceding) character. / / GTRBCR - RUB A CHARACTER / IF THERE ARE NO CHARS IT WILL DO A NON SKIP RETURN / IF DID RUB OUT SOMETHING THEN A NORMAL (2ND) RETURN / GTRBCR, XX AC7777 / Decrement the character pointer. TAD CHKPTR DCA CHKPTR TAD I CHKPTR / ... SPA CLA / Skip if there's a char to rubout. JMP I GTRBCR / Take MT return. ISZ GTRBCR / Bump to successful return. TAD (BSPACE / OUTPUT BS SP BS JMS KBOUT / TAD (SPACE / JMS KBOUT / TAD (BSPACE / JMS KBOUT / JMP I GTRBCR / Return GTBKCR, XX AC7777 / Back up the char pointer. TAD CHKPTR / ... DCA T1 / .... TAD I T1 / ... SMA / Skip if buffer MT. JMP I GTBKCR / Return w/ prior character. JMP CKBEEP / Buffer MT. Report error & take early return. GTTEMP, 0 / Temp. CHKPTR, 0 / Pointer into string that holds prior (echoed) text. / / ROUTINE TO DRAIN TEXT FROM TTHE HOST. / PUT IT ON THE SCREEN IF "SCREEN" IN EFFECT; / OTHERWISE THROW IT AWAY. / DRAINH, XX DRLOOP, JMS HSINPT /SEE IF ANYTHING IN HOST BUFFER JMP I DRAINH /A022 /D022 JMP DREXIT / Update screen & return if not. JMS SCROUT /GO DISPLAY OR DISCARD JMP DRLOOP /GO CHECK FOR MORE /D022DREXIT, JMS TTDISP / Update screen. /A017 /D022 JMP I DRAINH / Return to caller. /A017 / ROUTINE TO PUT THE AC ON THE SCREEN IF / "SCREEN" IS IN EFFECT. SCROUT, XX SCRNSW, NOP /CHANGED TO SKP CLA FOR "NOSCREEN" JMS KBOUT /A022 /D022 JMS TTADD / Add char to display buffer. /M017 JMP I SCROUT / ROUTINE TO PUT THE NEXT CHARACTER FROM THE / FILE INTO CHAR. / IF NEXTSW IS NOP, PUSH CHAR INTO THE ERROR / MESSAGE BUFFER. IF IT IS SKP, DO NOT DO / THIS SO THAT THE USER WILL SEE THE GO/WAIT / THAT COULD NOT BE SATISFIED. / NEXTCH, 0 JMS GETCHR /GET NEXT FILE CHARACTER JMP ERR13 /END OF FILE REACHED DCA CHAR TAD LINBMP / Start of new line? SZA CLA ISZ LINCTR / Yes, bump line number DCA LINBMP TAD T1 / Get character. AND P177 / Check for line terminator. TAD (-ECNWLN) / this is one set, SZA / SKip if yes. TAD (ECNWLN-ECNWPG) / this one's the other set. SNA CLA / Skip if not line terminator. ISZ LINBMP / Set to bump line counter. NEXTSW, SKP CLA /CHANGED TO NOP DURING GO/WAIT TARGET SEARCHES JMP I NEXTCH TAD CHAR /PUT CHAR IN ERROR MESSAGE BUFFER JMS PUTBUF JMP I NEXTCH / ERR13, TAD GOWLIN /RECOVER LINE NUMBER OF GO OR WAIT DCA LINCTR /RESTORE TO LINE COUNTER JMS ABORT;13 /MISSING GO/WAIT TARGET / LINBMP, 0 X=. /------------ PAGE / ROUTINE TO GET THE NEXT ATOM. / ATOMS ARE ELEMENTS (SEE BELOW) THAT MAY / INCLUDE (IE ARE NOT TERNIMATED BY) & CHARACTERS. / THIS IS BECAUSE WE DIDN'T EXCLUDE & IN LABELS / IN THE DISTRIBUTED DOCUMENTATION. / GETATM, XX JMS GETELM /GO GET NEXT ELEMENT TAD CHAR /CHECK DELIMITER FOR & TAD (-AMPERS SZA CLA JMP I GETATM /NOT & SO RETURN ELEMENT AS ATOM JMP GETELN /GO BACK AND ADD TO CURRENT ELEMENT /UNTIL IT IS NOT DELIMITED BY &. / / / / ROUTINE TO GET THE NEXT ELEMENT IN ATOM. / ELEMENTS ARE DELIMITED BY BLANK, TAB, COMMA, / COLON, AMPERSAND, SLASH OR EOL. / THE DELIMITER IS RETURNED IN CHAR. / GETELM, XX JMS NULSTR /CLEAR THE ATOM ATOM JMS SKIPBL /GET TO FIRST CHARACTER JMP I GETELM /EOL FOUND GETELL, TAD CHAR TAD (-SPACE /CHECK FOR TERMINATORS SZA TAD (SPACE-TAB SZA TAD (TAB-COMMA SZA TAD (COMMA-COLON SZA TAD (COLON-AMPERS SZA TAD (AMPERS-SLASH SZA TAD (SLASH-EOL SNA CLA JMP I GETELM /ATOM COMPLETE GETELN, TAD CHAR JMS ADDSTR /APPEND CHAR TO ATOM ATOM JMP ERR4 JMS NEXTCH /GET NEXT CHARACTER JMP GETELL /GO TEST IT FOR TERMINATORS / / / ROUTINE TO CHECK ATOM AGAINST TEXT STRINGS AND BRANCH / TO THE ADDRESS ASSOCIATED WITH A MATCH. / / JMS LISTBR / LIST / NO MATCH RETURN (AC=0) / MATCH RETURN (AC=0) / . / . / . /LIST, ADDRESS OF TEXT1;MATCH ADDRESS1; / . / . / . / ADDRESS OF TEXTn; MATCH ADDRESSn; / 0 / LISTBR, XX AC7777 TAD I LISTBR /GET ADDRESS OF LIST DCA X0 ISZ LISTBR LSTCMP, TAD I X0 /CHECK FOR END OF LIST SNA JMP I LISTBR /END. WE DIDN'T RECOGNIZE THIS ATOM DCA LSTADD TAD I X0 /GET ROUTINE ADDRESS DCA LSTXIT JMS CMPSTR /CHECK IF ATOM IS A MATCH LSTADD, 0 ATOM JMP LSTCMP /NOT A MATCH. GO TEST NEXT CANDIDATE JMP I LSTXIT /MATCHED. GO TO PROCESSING ROUTINE LSTXIT, 0 / / ROUTINE TO SKIP TO A SCANNABLE CHARACTER / I.E. IF CHAR IS BLANK OR TAB CALL NEXTCH UNTIL IT IS NOT. / IF CHAR IS /, REST OF LINE IS A REMARK - SKIP IT. / IF AT EOL TAKE THE FIRST RETURN; / OTHERWISE TAKE SECOND RETURN / JMS SKIPBL / EOL RETURN (AC=0) / NORMAL RETURN (AC=0) SKIPBL, XX SK1, CLA TAD CHAR /GET CHAR TAD (-SPACE /SKIP BLANKS AND TABS SZA TAD (SPACE-TAB SZA JMP SK2 JMS NEXTCH JMP SK1 SK2, TAD (TAB-SLASH SNA CLA JMS EOLINE /SKIP ALL OF REMARK TAD CHAR /CHECK FOR EOL TAD (-EOL SZA CLA /FOUND. TAKE FIRST RETURN ISZ SKIPBL /TAKE NORMAL RETURN JMP I SKIPBL / / SKIP OVER COMMAS AS WELL AS CHARACTERS / SKIPPED BY SKIPBL / TAKE FIRST RETURN IF EOL ENCOUNTERED, / OTHERWISE RETURN TO SECOND LOCATION / WITH NEXT NON-BLANK, NON-COMMA IN "CHAR" / SKIPBC, XX SKIPCL, JMS SKIPBL /SKIP BLANKS AND TABS JMP I SKIPBC /TAKE EOL RETURN TAD CHAR TAD (-COMMA /ARE WE AT A COMMA SZA CLA JMP SKIPCX /NO, EXIT JMS NEXTCH /YES, FETCH NEXT CHARACTER JMP SKIPCL /NOW CHECK AGAIN SKIPCX, ISZ SKIPBC /TAKE NORMAL RETURN JMP I SKIPBC / ROUTINE TO MAKE SURE CHAR IS EOL / EOLINE, XX EL1, CLA TAD CHAR /IS CHAR EOL TAD (-EOL SNA CLA JMP I EOLINE /YES JMS NEXTCH /NO, GET NEXT AND TEST AGAIN JMP EL1 CPYTIM, XX / Routine to copy the DATE & TIME string AC7777 / less 1 for index registers CDFMNU / From the menu field to our field. TAD I (DATESP) / This will get the address of the string. DCA X0 / Set from pointer. TAD (DATTIM-1) / Where we will put it. DCA X1 / ... CPYTM1, CDFMNU / Map where to get from. TAD I X0 / Get Date & Time character. CDFMYF / Back to us. SNA / Skip if not at end of string. JMP I CPYTIM / Return to caller when done. DCA I X1 / ... JMP CPYTM1 / Loop until done the copy. / "No Answer" RESPONSE FROM MODEM /A016 NOANS, JMS PUTMSG / TELL USER /A016 NASMSG / /A016 JMP DIALX / TAKE NO ANSWER RETURN /A016 / LINE IS BUSY DALBSY, JMS PUTMSG /TELL USER BSYMSG JMP DIALX /WAIT A SECOND AND TAKE FIRST RETURN /------------ PAGE / /GETCHR / /CALL: JMS GETCHR / ERROR RETURN/END-FILE RETURN / NORMAL RETURN / AC = CHARACTER ON RETURN. / IF ERROR, AC IS NEGATIVE; IF E-O-F, AC IS 0. / / Characters are read from the LOGON file, one at a time, and / stripped/ignored as follows: / modified flags ignored / dead-key seqs ignore start & end sequence chars / hard return passed thru / soft return ignored / page markers ignored / soft spaces ignored / paragraph marker turn into hard return / centered line turn into hard return / select point ignore / position marker ignore / justification marker ignore / ruler ignore in entirty / normal chars strip attributes / / Additionally, the 1st time E-O-F is encountered, an end-of-line / is returned. Thereafter, return is made to the E-O-F/ERROR return. / GETCHR, XX / Routine to return next char from file. JMS CHKHLT / See if HALT FLAG is set. Return only if no. TAD EOF / See if E-O-F has been detected. SZA CLA / Skip if no. Continue processing. JMP GOTEND / Take E-O-F return w/ zero AC. GETCH1, JMS DOCHAR / Get a character. DCA T1 / Save character. TAD T1 / Get character. AND P177 / Isolate character bits. TAD (-ECSPC) / bigger than a space? SMA SZA / Skip if no. JMP GOTCHR / Jmp if yes. return char minus attributes. CLA / Get origional char back. TAD T1 / ... TAD (-ECMDFL) / Line modified? SZA / Skip if yes. Ignore. TAD (ECMDFL-ECRMFL) / RULER modified? SZA / Skip if yes. Ignore. TAD (ECRMFL-ECSTOV) / Start of DEAD-KEY sequence? SZA / Skip if yes. Ignore. TAD (ECSTOV-ECNDOV) / End of DEAD-KEY sequence? SZA / Skip if yes. Ignore. TAD (ECNDOV-ECNWPG) / NEW PAGE marker? SZA / Skip if yes. Ignore. TAD (ECNWPG-ECPMRK) / PAGE marker? SZA / Skip if yes. Ignore. TAD (ECPMRK-ECJSPC) / Justifing space? SZA / Skip if yes. Ignore. TAD (ECJSPC-ECWWLN) / Wrapped line? SZA / Skip if yes. Ignore. TAD (ECWWLN-ECHYLN) / Wrapped line w/ hyphen? SZA / Skip if yes. Ignore. TAD (ECHYLN-ECSLPT) / Select point? SZA / Skip if yes. Ignore. TAD (ECSLPT-ECTMRK) / position marker? SZA / Skip if yes. ignore. TAD (ECTMRK-ECCMRK) / REJUST posn marker? SNA / Skip if no. JMP GETCH1 / Ignore character. TAD (ECCMRK-ECSPC) / SPACE character? SNA / skip if no. JMP GOTCHR / return SPACE character. TAD (ECSPC-ECTAB) / TAB character? SNA / Skip if no. JMP GETCH4 / return TAB TAD (ECTAB-ECNWLN) / check for HARD return, SZA / skip if yes. TAD (ECNWLN-ECPGRF) / PARAgraph marker. SZA / Skip if yes. TAD (ECPGRF-ECENLN) / and CENTERED line. SNA / skip if none-of-the-above. JMP GETCH3 / Turn them into HARD returns. TAD (ECENLN-ECPCT1) / Start PRINT CONTROL? SNA / Skip if no. JMP GETCHA / Jmp if yes. process Print Control block. TAD (ECPCT1-ECSTRL) / Start of ruler? SZA / Skip if yes. Skip to end of ruler. JMP GETCH1 / other wise ignore character. GETCH2, JMS DOCHAR / Get next character from file. TAD (-ECNDRL) / END-OF-RULER? SNA CLA / Skip if no. ignore character & try next. JMP GETCH1 / Done PC/RULER. Process next character. JMP GETCH2 / we are still in PC or RULER. loop. GETCHA, JMS DOCHAR / Get next character from disk file. TAD (-ECPCT2) / END-OF-PRINT-CONTROL? SNA CLA / Skip if no. ignore character & try next. JMP GETCH1 / Done PC/RULER. Process next character. JMP GETCHA / we are still in PC or RULER. loop. EOLERR, CLA / return HARD return 1st time. ERRXIT, ISZ EOF / Set E-O-F flag for next time. GETCH3, TAD (ECNWLN-ECTAB) / Return HARD return. GETCH4, TAD (ECTAB-ECSPC / Return TAB character GOTCHR, TAD (ECSPC) / Turn back into a character. ISZ GETCHR / take normal (skip) return. GOTEND, JMP I GETCHR / Return w/ AC=character. / ROUTINE TO GET THE NEXT CHARACTER FROM THE / CURRENT DOCUMENT. FOR LOGON DOCUMENTS THIS / INVOLVES A READ-ONLY FETCH VIA XRDFIN. / FOR PHONE DIRECTORIES WE DO READ-WRITE / FETCHES: XGETET FOLLOWED BY XPUTST FOR / FORWARD FETCHES, AND XGETST FOLLOWED BY / XPUTET FOR BACKWARD FETCHES. DOCHAR, XX CIFFIO FILEIO GETOP, XX / GET A CHARACTER SPA SNA / Skip if got a character. JMP EOLERR / Take end exit. DCA T1 TAD GETOP / IS THIS READ-ONLY? TAD (-XRDFNC SNA JMP DOCRET / YES / CHANGE XGETET TO XPUTST OR XGETST TO XPUTET IFNZRO XRDFNC-7 IFNZRO XGETET-4 IFNZRO XPUTST-3 IFNZRO XGETST-2 IFNZRO XPUTET-5 CIA / NO, MAKE WRITE-BACK OPERATOR DCA PUTOP TAD T1 / PUT CHARACTER BACK IN FILE CIFFIO FILEIO PUTOP, XX / WRITE THE CHARACTER BACK DOCRET, TAD T1 / Get character to return. JMP I DOCHAR / return to caller w/ character in AC. / / ROUTINE TO PUT A TEXT MESSAGE AT THE CURRENT / CURSOR POSITION. / PUTMSG, XX CLA TAD I PUTMSG /GET ADDRESS OF TEXT DCA PUTMA ISZ PUTMSG CIFMNU JMS I IOACAL /SEND TO IO 0 /A022 /D022 TTADDD / add to TT buffer. PUTMA, XX /D022 JMS TTDISP / display tt buffer. JMP I PUTMSG /------------ PAGE / /ADDSTR - ADD A 7-BIT CHARACTER TO AN ASCIIZ STRING /THESE ASCIIZ STRINGS START WITH A WORD /CONTAINING THE NEGATIVE COUNT OF THE NUMBER /OF WORDS RESERVED FOR THE STRING (INCLUDING /THAT ONE). SO, THE MAXIMUM NUMBER OF /CHARACTERS IT CAN CONTAIN IS COUNT-2. / /RUBOUT CHARACTERS ARE PROPERLY HANDLED. / / PUT CHARACTER TO BE ADDED IN THE AC / JMS ADDSTR / ADDRESS OF STRING / "STRING FULL" RETURN (CHARACTER NOT ADDED) / NORMAL RETURN / (AC=0 FOR EITHER RETURN) / / ADDSTR, XX DCA ADDCHR /SAVE THE CHARACTER TAD I ADDSTR / Get string address. DCA ADDDST / Save. ISZ ADDSTR / point to 1st return. TAD I ADDDST / Get -max count. SMA / check for negative. JMP ADDERR / bad string. take error return. IAC / compute negative of one less than size. DCA ADDLEN / ... DCA MAXLEN / Init string size. ADDLOP, ISZ MAXLEN / Count size+1 of string. ISZ ADDDST / Bump to next char posn. TAD I ADDDST / Check for zero stopper. SZA CLA JMP ADDLOP TAD ADDCHR / Check for RUBOUT request. TAD (-EDRBCH SNA / Skip if not RUBCHR JMP ADRBCH / Process RUBCHR. TAD (EDRBCH-EDRBWD) / How 'bout RUBWRD? SNA CLA / Skip if not RUBWRD. JMP ADRBWD / Process RUBWRD. TAD MAXLEN / Get current size. TAD ADDLEN / Compare to negative of max size. SMA CLA / If >= 0 then string already at max size. JMP I ADDSTR / no more room. TAD ADDCHR / get character to add AND P177 DCA I ADDDST / store char in string. ISZ ADDDST / Bump to stopper. DCA I ADDDST / set stopper in string. ADDRET, ISZ ADDSTR / Take normal return. ADDERR, CLA JMP I ADDSTR / / ADRBCH - RUBOUT A CHARACTER. / ADRBCH, JMS ADRBCR / CALL RUB CHAR NOP / Ignore beginning of buffer. JMP ADDRET / Something successfully rubbed out. exit. / / ADRBWD - RUBOUT A WORD / ADRBWD, JMS ADBKCR / Get character one back from here TAD (-40) SMA SZA CLA / Skip if a space or less (ie not a character). JMP ADRBW2 / found a character (start of word). JMS ADRBCR / Rub out leading spaces, tabs, etc. JMP ADDRET / Line empty return. JMP ADRBWD / do rest of leading spaces, tabs, etc. ADRBW2, JMS ADBKCR / Get character one back from here TAD (-40) SMA SZA CLA / Skip if not a word character. JMS ADRBCR / Rub out a character of word. JMP ADDRET / Line empty, so done. JMP ADRBW2 / check out next (preceding) character. / / ADRBCR - RUB A CHARACTER / IF THERE ARE NO CHARS IT WILL DO A NON SKIP RETURN / IF DID RUB OUT SOMETHING THEN A NORMAL (2ND) RETURN / ADRBCR, XX IFDEF FORIN < AC7777 / Once-only check for ACCENT before character. DCA T1 / > / end IFDEF FORIN. AC7777 / Any chars to rubout? TAD MAXLEN / ... SNA CLA / Skip if YES. JMP I ADRBCR / Take 1st return if NO. ISZ ADRBCR ADRBC1, AC7777 / Decrement the character pointer. TAD ADDDST / ... DCA ADDDST / .... DCA I ADDDST / Set new stopper. AC7777 / Decrement the count of chars too. TAD MAXLEN / ... DCA MAXLEN / .... IFDEF FORIN < ISZ T1 / Already checked for ACCENT? JMP I ADRBCR / Return if yes. JMS ADBKCR / Get prior character. CIFMNU / Map MENU field. JMS I (SRTAB1 / to see if it's an accent. SKP CLA / No, Just return. JMP ADRBC1 / Yes, Delete it too. > / end ifdef FORIN JMP I ADRBCR / Return ADBKCR, XX AC7777 TAD MAXLEN / Any chars in line? SNA CLA / Skip if yes. JMP ADDRET / Take early exit if no. AC7777 / point back 1 char posn. TAD ADDDST / ... DCA ADTEMP / .... TAD I ADTEMP / Get prior char. JMP I ADBKCR / Return with char. ADDCHR, 0 ADDDST, 0 ADDLEN, 0 MAXLEN, 0 / Set to the maximum size. ADTEMP, 0 / /MOVSTR - MOVE AN ASCIIZ STRING / / JMS MOVSTR / ADDRESS OF SOURCE STRING / ADDRESS OF DESTINATION STRING / ERROR RETURN - DESTINATION TOO SHORT AC=0 / NORMAL RETURN (AC=0) /THESE ASCIIZ STRINGS START WITH A WORD /CONTAINING THE NEGATIVE COUNT OF THE NUMBER /OF WORDS RESERVED FOR THE STRING (INCLUDING /THAT ONE). SO, THE MAXIMUM NUMBER OF /CHARACTERS IT CAN CONTAIN IS COUNT-2. / MOVSTR, XX CLA TAD I MOVSTR /GET ADDR OF SOURCE DCA X1 ISZ MOVSTR TAD I MOVSTR /GET ADDR OF DESTINATION CIA;CMA /POINT TO -LENGTH DCA X2 TAD I X2 /GET -DESTINATION LENGTH DCA MOVMAX ISZ MOVSTR /POINT TO FIRST RETURN MOVLOP, ISZ MOVMAX /COUNT CHARACTERS SKP JMP I MOVSTR /TAKE ERROR RETURN TAD I X1 /FETCH A SOURCE CHARACTER SNA JMP MOVEND DCA I X2 /STORE IT JMP MOVLOP /GO FOR ANOTHER MOVEND, DCA I X2 /END OF STRING ISZ MOVSTR /NORMAL RETURN JMP I MOVSTR MOVMAX, 0 / INITIALIZE INTEGRAL MODEM - (SET TO BURST MODE) /A019 ADIMCK, JMS DRAINH / CLEAR INPUT BUFFER /A019 TAD (CTLA / ^A INIT. MODEM (ACU) /A019 JMS HSOUT / /A019 JMS WAIT1 / /A019 JMS HSINPT / CK RESPONSE /A019 JMP IMODEX / NOTHING PRESENT - IN BURST MODE /A019 JMS DRAINH / CLEAR INPUT BUFFER AGAIN /A019 TAD (CTLA / THIS ONE SHOULD DO IT. /A019 JMS HSOUT / /A019 JMP IMODEX / /A019 /------------ X=. PAGE / /SUBSTR - COMPARE 2 7-BIT ASCIIZ STRINGS / RETURN EQUAL IF THE FIRST STRING IS A / SUBSTRING OF THE SECOND STRING. / / JMS SUBSTR / ADDRESS OF FIRST STRING / ADDRESS OF SECOND STRING / NOT EQUAL RETURN (AC=0) / EQUAL RETURN (AC=0) / / UPPER/LOWER CASE INDEPENDENT / / SUBSTR, XX CLA TAD I SUBSTR /GET ADDR OF S1 DCA SUBS1 ISZ SUBSTR TAD I SUBSTR /GET ADDR OF S2 DCA SUBS2 ISZ SUBSTR /POINT TO NOT EQUAL RETURN SUBTRY, TAD SUBS1 /INITIALIZE FOR A SUBSTRING PASS DCA X1 TAD SUBS2 DCA X2 ISZ SUBS2 /BUMP STRING2 START POINT FOR NEXT TRY / SUBLOP, TAD I X1 /FETCH A CHARACTER FROM S1 SNA JMP SUBE1 AND (177 /COMPARE ONLY 7 BITS DCA SUBC1 TAD I X2 /FETCH A CHARACTER FROM S2 SNA JMP I SUBSTR /SECOND STRING SHORTER AND (177 CIA /SAVE -SECOND CHAR DCA SUBC2 TAD SUBC1 /IS FIRST STRING CHARACTER L/C TAD (-172 SMA SZA JMP SUBCMP /NO, >z TAD (172-141 SPA JMP SUBCMP /NO, IFDEF ITALIAN<-12;"N;"e;"s;"s;"u;"n;" ;"n;"u;"m;"e;"r;"o;0> IFDEF V30NOR<-12;"N;"o;" ;"n;"u;"m;"b;"e;"r;0> IFDEF V30SWE<-12;"N;"o;" ;"n;"u;"m;"b;"e;"r;0> IFDEF DUTCH<-12;"N;"o;" ;"n;"u;"m;"b;"e;"r;0> IFDEF SPANISH<-12;"N;"o;" ;"n;"u;"m;"b;"e;"r;0> / / / ALL LOWER CASE IN ORDER TO MATCH UPPER OR LOWER / CASE IN CMPSTR ROUTINE. / IFDEF ENGLSH < TYPES, -6;"t;"y;"p;"e;0 TOS, -4;"t;"o;0 GOS, -4;"g;"o;0 WAITS, -6;"w;"a;"i;"t;0 FORS, -5;"f;"o;"r;0 SCRENS, -10;"s;"c;"r;"e;"e;"n;0 NSCRNS, -12;"n;"o;"s;"c;"r;"e;"e;"n;0 MENUS, -6;"m;"e;"n;"u;0 DIALS, -6;"d;"i;"a;"l;0 ABORTS, -7;"a;"b;"o;"r;"t;0 CXS, -4;"c;"x;0 ENDS, -5;"e;"n;"d;0 HOSTS, -6;"h;"o;"s;"t;0 KBDS, -5;"k;"b;"d;0 CRS, -4;"c;"r;0 LFS, -4;"l;"f;0 BRKS, -5;"b;"r;"k;0 DTRS, -5;"d;"t;"r;0 > IFDEF ITALIAN < TYPES, -6;"i;"n;"v;"i;"o;"_;"a;0 TOS, -4;"a;0 GOS, -4;"s;"a;"l;"t;"o;0 WAITS, -6;"a;"t;"t;"e;"s;"a;0 FORS, -5;"p;"e;"r;0 SCRENS, -10;"v;"i;"d;"e;"o;0 NSCRNS, -12;"n;"o;"_;"v;"i;"d;"e;"o;0 MENUS, -6;"m;"e;"n;"u;0 DIALS, -6;"c;"h;"i;"a;"m;"a;"t;"a;0 ABORTS, -7;"i;"n;"t;"e;"r;"r;"u;"z;"i;"o;"n;"e;0 CXS, -4;"e;"t;0 ENDS, -5;"f;"i;"n;"e;0 HOSTS, -6;"o;"s;"p;"i;"t;"e;0 KBDS, -5;"t;"s;"t;0 CRS, -4;"r;"i;"t;0 LFS, -4;"l;"f;0 BRKS, -5;"i;"n;"c;0 DTRS, -5;"d;"t;"r;0 > IFDEF V30NOR < TYPES, -6;"t;"y;"p;"e;0 TOS, -4;"t;"o;0 GOS, -4;"g;"o;0 WAITS, -6;"w;"a;"i;"t;0 FORS, -5;"f;"o;"r;0 SCRENS, -10;"s;"c;"r;"e;"e;"n;0 NSCRNS, -12;"n;"o;"s;"c;"r;"e;"e;"n;0 MENUS, -6;"m;"e;"n;"u;0 DIALS, -6;"d;"i;"a;"l;0 ABORTS, -7;"a;"b;"o;"r;"t;0 CXS, -4;"c;"x;0 ENDS, -5;"e;"n;"d;0 HOSTS, -6;"h;"o;"s;"t;0 KBDS, -5;"k;"b;"d;0 CRS, -4;"c;"r;0 LFS, -4;"l;"f;0 BRKS, -5;"b;"r;"k;0 DTRS, -5;"d;"t;"r;0 > IFDEF V30SWE < TYPES, -6;"t;"y;"p;"e;0 TOS, -4;"t;"o;0 GOS, -4;"g;"o;0 WAITS, -6;"w;"a;"i;"t;0 FORS, -5;"f;"o;"r;0 SCRENS, -10;"s;"c;"r;"e;"e;"n;0 NSCRNS, -12;"n;"o;"s;"c;"r;"e;"e;"n;0 MENUS, -6;"m;"e;"n;"u;0 DIALS, -6;"d;"i;"a;"l;0 ABORTS, -7;"a;"b;"o;"r;"t;0 CXS, -4;"c;"x;0 ENDS, -5;"e;"n;"d;0 HOSTS, -6;"h;"o;"s;"t;0 KBDS, -5;"k;"b;"d;0 CRS, -4;"c;"r;0 LFS, -4;"l;"f;0 BRKS, -5;"b;"r;"k;0 DTRS, -5;"d;"t;"r;0 > / END IFDEF V30SWE IFDEF DUTCH < TYPES, -6;"t;"y;"p;"e;0 TOS, -4;"t;"o;0 GOS, -4;"g;"o;0 WAITS, -6;"w;"a;"i;"t;0 FORS, -5;"f;"o;"r;0 SCRENS, -10;"s;"c;"r;"e;"e;"n;0 NSCRNS, -12;"n;"o;"s;"c;"r;"e;"e;"n;0 MENUS, -6;"m;"e;"n;"u;0 DIALS, -6;"d;"i;"a;"l;0 ABORTS, -7;"a;"b;"o;"r;"t;0 CXS, -4;"c;"x;0 ENDS, -5;"e;"n;"d;0 HOSTS, -6;"h;"o;"s;"t;0 KBDS, -5;"k;"b;"d;0 CRS, -4;"c;"r;0 LFS, -4;"l;"f;0 BRKS, -5;"b;"r;"k;0 DTRS, -5;"d;"t;"r;0 > IFDEF SPANISH < TYPES, -6;"t;"y;"p;"e;0 TOS, -4;"t;"o;0 GOS, -4;"g;"o;0 WAITS, -6;"w;"a;"i;"t;0 FORS, -5;"f;"o;"r;0 SCRENS, -10;"s;"c;"r;"e;"e;"n;0 NSCRNS, -12;"n;"o;"s;"c;"r;"e;"e;"n;0 MENUS, -6;"m;"e;"n;"u;0 DIALS, -6;"d;"i;"a;"l;0 ABORTS, -7;"a;"b;"o;"r;"t;0 CXS, -4;"c;"x;0 ENDS, -5;"e;"n;"d;0 HOSTS, -6;"h;"o;"s;"t;0 KBDS, -5;"k;"b;"d;0 CRS, -4;"c;"r;0 LFS, -4;"l;"f;0 BRKS, -5;"b;"r;"k;0 DTRS, -5;"d;"t;"r;0 > / / TEXT STRINGS / NULMSG, TEXT / / KEYMSG, IFDEF ENGLSH IFDEF ITALIAN IFDEF V30NOR IFDEF V30SWE IFDEF DUTCH IFDEF SPANISH *.-1 TEXT /^P^S^A/ *.-1 IFDEF ENGLSH IFDEF ITALIAN IFDEF V30NOR IFDEF V30SWE IFDEF DUTCH IFDEF SPANISH MENMSG, IFDEF ENGLSH < TEXT /&PRESS &GOLD !&MENU TO &RETURN TO THE &MAIN &MENU/> IFDEF ITALIAN < TEXT /&PREMERE &ORO !&MENU PER TORNARE AL &MENU &PRINCIPALE/> IFDEF V30NOR < TEXT '&TRYKK P\E &GULL !&MENY FOR \E F\E &HOVEDMENYEN'> /A027 IFDEF V30SWE < TEXT '&TILLBAKA TILL HUVUDMENYN: ANV\DND GULD MENY'> IFDEF DUTCH < TEXT /&DRUK OOP &GOUD !&MENU VOOR HET &HOOFDMENU./> IFDEF SPANISH < TEXT /&PULSE &DORADA !&MENU PARA &VOLVER AL &MEN\Z &PRINCIPAL/> NEXMSG, IFDEF ENGLSH < TEXT /&OR &JUST &PRESS &RETURN TO GET THE &NEXT &ENTRY/> IFDEF ITALIAN < TEXT /&PREMERE &RITORNO PER CONTINUARE LA RICERCA/ /A015> IFDEF V30NOR < TEXT '&EL. TRYKK P\E !&RETUR FOR \E F\E NESTE OPPSLAG'> /A027 IFDEF V30SWE < TEXT '&TILL N\DSTA POST: TRYCK P\E RETUR'> IFDEF DUTCH < TEXT /&OR &JUST &PRESS &RETURN TO GET THE &NEXT &ENTRY/> IFDEF SPANISH < TEXT /&OR &JUST &PRESS &RETURN TO GET THE &NEXT &ENTRY/> OKYMSG, IFDEF ENGLSH IFDEF ITALIAN IFDEF V30NOR /A027 IFDEF V30SWE IFDEF DUTCH IFDEF SPANISH NAMMSG, TEXT /^P!E^P^A!L^P^A!L/ ADVMSG, IFNDEF V30SWE < IFDEF ENGLSH IFDEF ITALIAN IFDEF V30NOR /A027 IFDEF DUTCH IFDEF SPANISH *.-1 7600 > IFDEF V30SWE BCKMSG, IFNDEF V30SWE < IFDEF ENGLSH IFDEF ITALIAN IFDEF V30NOR IFDEF DUTCH IFDEF SPANISH *.-1 7400 > IFDEF V30SWE ENTMSG, IFDEF ENGLSH IFDEF ITALIAN IFDEF V30NOR IFDEF V30SWE IFDEF DUTCH IFDEF SPANISH OPTMSG, IFDEF ENGLSH IFDEF ITALIAN IFDEF V30NOR IFDEF DUTCH IFDEF SPANISH IFDEF V30SWE < TEXT '^P!E&TITTA P\E N\DSTA POST: TRYCK P\E FRAM\ET ELLER - '> *.-1 TEXT '> ' *.-1 IFDEF ENGLSH /M015 IFDEF ITALIAN IFDEF V30NOR < TEXT 'FOR \E SE P\E NEST OPPSLAG '> IFDEF V30SWE < TEXT ''> IFDEF DUTCH /M015 IFDEF SPANISH /M015 *.-1 IFDEF ENGLSH IFDEF ITALIAN IFDEF V30NOR IFDEF V30SWE < TEXT '^P&TITTA P\E F\VREG\EENDE POST: TRYCK P\E BAK\ET ELLER -'> IFDEF DUTCH IFDEF SPANISH *.-1 TEXT '< ' *.-1 IFDEF ENGLSH /M015 IFDEF ITALIAN IFDEF V30NOR IFDEF V30SWE IFDEF DUTCH /M015 IFDEF SPANISH /M015 *.-1 IFDEF ENGLSH < TEXT /^P&PRESS &GOLD !&SRCH OR !&FIND TO &ENTER /> /M015 IFDEF ITALIAN < TEXT /^P&PREMERE &ORO !&CERCA O !&RICER PER SELEZIONARE /> IFDEF V30NOR < TEXT 'TRYKK &GULL !&FINN EL. !&FINN FOR \E &ANGI'> IFDEF V30SWE < TEXT '&TRYCK P\E GULD S\VK F\VR ATT B\VRJA'> IFDEF DUTCH < TEXT /^P&PRESS &GOLD !&SRCH OR !&FIND TO &ENTER /> /M015 IFDEF SPANISH < TEXT /^P&PRESS &GOLD !&SRCH OR !&FIND TO &ENTER /> /M015 *.-1 IFDEF ENGLSH /M015 IFDEF ITALIAN IFDEF V30NOR IFDEF V30SWE IFDEF DUTCH /M015 IFDEF SPANISH /M015 *.-1 TEXT /^P^S/ XITMSG, IFDEF ENGLSH IFDEF ITALIAN < TEXT /^P&INTRODURRE !&ET PER COLLEGAMENTO AUTOMATICO TRAMITE MODEM IN !&ET /> IFDEF V30NOR < TEXT 'LEGG INN !&CX FOR \E RINGE OPP OG G\E INN I !&CX'> IFDEF V30SWE IFDEF DUTCH IFDEF SPANISH *.-1 IFDEF ENGLSH IFDEF ITALIAN < TEXT /^PINTRODURRE !&CO PER COLLEGAMENTO AUTOMATICO TRAMITE MODEM IN !&CO/> IFDEF V30NOR < TEXT '^P&SKRIV !&LG FOR \E RINGE OPP OG G\E INN I !&EASYCOM'> IFDEF V30SWE IFDEF DUTCH IFDEF SPANISH WATMSG, IFDEF ENGLSH IFDEF ITALIAN IFDEF V30NOR IFDEF V30SWE IFDEF DUTCH IFDEF SPANISH BSYMSG, IFDEF ENGLSH IFDEF ITALIAN IFDEF V30NOR IFDEF V30SWE IFDEF DUTCH IFDEF SPANISH ANSMSG, IFDEF ENGLSH IFDEF ITALIAN IFDEF V30NOR IFDEF V30SWE IFDEF DUTCH IFDEF SPANISH NASMSG, IFDEF ENGLSH /A016 IFDEF ITALIAN IFDEF V30NOR IFDEF V30SWE /A016 IFDEF DUTCH /A016 IFDEF SPANISH /A016 BADMSG, IFDEF ENGLSH IFDEF ITALIAN IFDEF V30NOR IFDEF V30SWE IFDEF DUTCH IFDEF SPANISH UNKMSG, IFDEF ENGLSH IFDEF ITALIAN IFDEF V30NOR IFDEF V30SWE IFDEF DUTCH IFDEF SPANISH BEGMSG, IFDEF ENGLSH IFDEF ITALIAN IFDEF V30NOR IFDEF V30SWE IFDEF DUTCH IFDEF SPANISH ENDMSG, IFDEF ENGLSH IFDEF ITALIAN IFDEF V30NOR IFDEF V30SWE IFDEF DUTCH IFDEF SPANISH EODMSG, IFDEF ENGLSH IFDEF ITALIAN IFDEF V30NOR IFDEF V30SWE IFDEF DUTCH IFDEF SPANISH DIAMSG, IFDEF ENGLSH IFDEF ITALIAN IFDEF V30NOR IFDEF V30SWE IFDEF DUTCH IFDEF SPANISH ABRMSG, IFDEF ENGLSH IFDEF ITALIAN IFDEF V30NOR IFDEF V30SWE IFDEF DUTCH IFDEF SPANISH GHTMES, IFDEF ENGLSH IFDEF ITALIAN IFDEF V30NOR IFDEF V30SWE IFDEF DUTCH IFDEF ENGLSH ENDMES, IFDEF ENGLSH IFDEF ITALIAN IFDEF V30NOR IFDEF V30SWE IFDEF DUTCH IFDEF SPANISH ITLMES, IFDEF ENGLSH IFDEF ITALIAN IFDEF V30NOR IFDEF V30SWE IFDEF DUTCH IFDEF SPANISH IVCMES, IFDEF ENGLSH IFDEF ITALIAN IFDEF V30NOR IFDEF V30SWE IFDEF DUTCH IFDEF SPANISH ABRMES, IFDEF ENGLSH IFDEF ITALIAN IFDEF V30NOR IFDEF V30SWE IFDEF DUTCH IFDEF SPANISH TYPMES, IFDEF ENGLSH IFDEF ITALIAN IFDEF V30NOR IFDEF V30SWE IFDEF DUTCH IFDEF SPANISH TXTMES, IFDEF ENGLSH IFDEF ITALIAN IFDEF V30NOR IFDEF V30SWE IFDEF DUTCH IFDEF SPANISH TIMMES, IFDEF ENGLSH IFDEF ITALIAN IFDEF V30NOR IFDEF V30SWE IFDEF DUTCH IFDEF ENGLSH WAIMES, IFDEF ENGLSH IFDEF ITALIAN IFDEF V30NOR < TEXT 'FOR MANGE VARIABLER (MAKS. 5)'> IFDEF V30SWE IFDEF DUTCH IFDEF SPANISH DNCMSG, IFDEF ENGLSH IFDEF ITALIAN IFDEF V30NOR IFDEF V30SWE IFDEF DUTCH IFDEF SPANISH GOWMES, IFDEF ENGLSH IFDEF ITALIAN IFDEF V30NOR IFDEF V30SWE IFDEF DUTCH IFDEF SPANISH DSPMSG, IFDEF ENGLSH IFDEF ITALIAN IFDEF V30NOR IFDEF V30SWE IFDEF DUTCH IFDEF SPANISH FINMSG, TEXT /^P^S / *.-1 IFDEF ENGLSH IFDEF ITALIAN IFDEF V30NOR IFDEF V30SWE IFDEF DUTCH IFDEF SPANISH /D022LINBUF, ZBLOCK 200 / Buffer for TYPE SCREEN text so that we can IOA it. / AREAS TO BE INITIALIZED BY THE PROGRAM TO SAVE FLOPPY SPACE X=. / / / ASCIIZ STRING WORK SPACES TO BE INITIALIZED BY / CALLS TO INISTR. / ATOM=X;X=X+ATMSIZ+2 /CURRENT ATOM (LANGUAGE ELEMENT) TSTRNG=X;X=X+TXTSIZ+2 /USER REPLY TO ~ PROMPT NAME=TSTRNG WTTIME=X;X=X+7 /SECONDS TO WAIT GOTRGT=X;X=X+LABSIZ+2 /TARGET FOR "GO" AND "WAIT" / WTGO=X;X=X+LABSIZ+2 /TARGET FOR WAIT TIME / WTKBS=X;X=X+WTTSIZ /KEYSTROKES DURING "WAIT KBD" / / WAIT TARGET STRINGS WTG1=X;X=X+LABSIZ+2 WTG2=X;X=X+LABSIZ+2 WTG3=X;X=X+LABSIZ+2 WTG4=X;X=X+LABSIZ+2 WTG5=X;X=X+LABSIZ+2 / / WAIT TEXT STRINGS WTS1=X;X=X+WTTSIZ+2 WTS2=X;X=X+WTTSIZ+2 WTS3=X;X=X+WTTSIZ+2 WTS4=X;X=X+WTTSIZ+2 WTS5=X;X=X+WTTSIZ+2 WTS6=X;X=X+PHNSIZ+2 /A024 / KEY=WTS1 NUMBR=WTS6 /A024 /D024NUMBR=WTS2 / / BUFFER BLOCKS WTXLST=X;X=X+5 /WORK POINTERS FOR EACH WAIT STRING DATTIM=X;X=X+27 /HOLDS DATE & TIME BUFBEG=X;X=X+100 /HOLD LAST 100 STATEMENT CHARACTERS FOR ABORT BUFEND=X-1 /LAST LOCATION IFZERO BUFEND&4000   /DSKHND DATE = 03/23/84 CURRENT EDIT / / / 052 KMD 26-Sep-85 Add Dutch & Spanish Xlations / 051 Mart 20-aug-85 fix ITALIAN edit bugs / 050 MART 24-APR-85 change dskhnd to call v25st on warm boot / 049 EMcD 04-Mar-85 Add read in/kick start V2.5 into life / 048 EMcD 27-Feb-85 Add DECDEV switch / 047 DFB 20-DEC-84 Fix to display date/time after error(dev 0=HD) / 046 DFB 31-AUG-84 Fix to pass unit number to verify on restart / 045 DFB 18-AUG-84 Fix to error retry for multiblock load / 044 DFB 08-AUG-84 Fix to read verify 12 bit logical / 043 HLP 23-MAR-84 Change load table for new system init / 042 DFB 21-FEB-84 Add get status code / 041 WJY 06-FEB-84 Addl. fix for DEC I compatability / 040 DFB 17-JAN-84 DEF fix for DEC I compatability / 039 DFB 12-JAN-84 Fix for load4 / 038 HLP 20-DEC-83 Change read-in address for printer / 037 DFB 02-DEC-83 Add update to winnie function / 036 DFB 29-NOV-83 Fix to read multiple blks on winnie / 035 DFB 01-NOV-83 Set to handle mount system vol / 034 DFB 16-SEPT-83 Set to return error if winnie not mounted /VERSION 033 ******************** / / 033 WCE 3-SEP-83 Changed RZ IOT's to RX IOT's and changed / FIELD instructions to standard instructions / 032 DFB 07-19-83 /WINNIE ADDITIONS / Jswap for winnie defined as RDOSWQ in WPF1 / FROM DSKHND VER31 / 031 DFB 04-08-83 /Update defs for DI,DII functionality / 030 DFB 12-DEC-82 /Update condor defs for DI,DII assy / 029 DFB 02-DEC-82 Stop Gold Halt exit during getdns / 028 DFB 16-NOV-82 Fix to allow JSWAP chnge externally / RDOSWP defined in WPF1.. overlayed by jswap in / WPCU2.after proper initialization of system / Jswap must overlay RDOSWP / / 027 DFB 10-NOV-82 Set drive 0 to 4 for load / conditional load4=1 / 026 DFB 22-OCT-82 Return after 1st write if RX50 write protect. / And do JSWAP if done not set on read/write / AND error return if Gold halt pressed during / error process / 025 DFB 15-AUG-82 Fix bug in physio 12 bit verify / 024 DFB 23-AUG-82 Set up to handle RX01 and RX02 / 023 DFB 03-AUG-82 Seek trk 0 instead of init(err. retry) / Delete skew code (determined not necessary) / 022 DFB 19-JUL-82 Set GET DEN to time out(ret err5) / Add seek tr 79 rx50 error logic / Add offset 2 code (skew=1 to install) / 021 DFB 15-JUL-82 Delete sel error return / 020 DFB 12-JUL-82 FIX TO SEL DEVICE ON ERR RETRY / 019 DFB 10-MAY-82 Verify Rx50 and rx50 startup fixes / 018 DFB 16-APR-82 Verify Rx50 and rx50 startup fixes / /*****COPIED FROM DSKHND.PA VERSION 17 28-FEB-82*************** / 017 GDH 28-FEB-82 Modified startup "read in" code. / 016 DFB 23-FEB-82 Set hndlr to rewrite then read when error / is detected during verify / 015 DFB 16-FEB-82 Add verify read after write / 014 DFB 04-FEB-82 Set error retry to init heads / 013 DFB 01-FEB-82 Double density interleave of 3 / 012 DFB 27-JAN-82 Double density interleave of 2 / 011 DFB 13-JAN-82 Allow 8bit phys i/o for dd / 010 DFB 06-JAN-82 Fix to return status in ret code / 009 DFB 28-DEC-81 Fix blk 6 1st loc=7401 for DOC diskette / 008 DFB 14-DEC-81 Add doc disk message / / *******if DMESS changes location other than 6400 / *******DCSTRT in RXPRDF MUST CHANGE ACCORDINGLY / 007 DFB 02-DEC-81 Fix to error hndler / 006 DFB 25-NOV-81 Fix to handle 2 RX02's / 005 DFB 18-NOV-81 Fix error hndler init on retry / 004 DFB 17-NOV-81 Fix to handle errs during boot / 003 GDH 13-NOV-81 Bug fix for Get Density on / 002 GDH 11-09-81 FIXED FOR RX01. / 001 DFB 10-29-81 /***************************************************************** / COPYRIGHT (C) 1977 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 TO 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. / / /******************************************************************* / / / THE FOLLOWING CODE IS USED TO WRITE THE RX02 HANDLER TO / DISC. IT IS REPEATED IN BOTH MODULES TO ALLOW FOR A SEPARATION / OF THESE MODULES AT A LATER DATE. OBVIOUSLY WHEN DOING SO / THE PARAMETERS (DLRXLD, LFRXLD AND STRT ADDR.) WOULD HAVE TO BE REPLACED / WITH THE CORRECT BLOCK NUMBERS,LENGTH AND STARTING ADDRESS. / / /********************************************************************* EJECT FIELD 0 *200 JMP I .+3 /WRITE BLOCK JMP I .+1 7600 RXLOAD *RXLDLS RXEWT /WRITE CODE 0 /DEVICE NUM RXQBLK /#BLOCKS . /LIST PNTR-1 DLRXLD /BLOCK NUM RXDLDP-200 /START ADDRESS(COMP FOR 1/2 BLK)/XXXDFB IFNDEF DECDEV < CDFMNU /FIELD NO /M048 /M033 > IFDEF DECDEV < CDF 50 /A048 > -DSRXLD /BLOCK COUNT 0 /END BLOCK /********************************************************************* /******************************************************************* /******************************************************************* /******************************************************************* / / /---------------- THE COMMENTS IN THIS PROGRAM ARE NOT------------- /----------------- AS ACCURATE AS ONE WOULD------------ /----------------- LIKE. WHEN THE COMMENTS ARE UPDATED------------ /------------------- THIS PARAGRAPH WILL BE DELETED ------------- / /********************************************************************* /********************************************************************* /********************************************************************* /********************************************************************* / / THE DIVISOR FOR THE INTERLEAVE ALGORITHM MUST BE / MODIFIED TO "25" FOR A DOUBLE DENSITY INTERLEAVE OPERATION, / BUT MUST REMAIN "26" FOR A SINGLE DENSITY OPERATION. THE / REASON BEHIND THIS LIES IN THE THEORY OF NUMBERS. / THE INTERLEAVE FACTOR AND THE NUMBER OF TRACKS PER / SECTOR MUST BE RELATIVELY PRIME, WHICH "2" AND "26" ARE NOT. / HOWEVER, FOR FOR A SINGLE DENSITY OPERATION THEY ARE RELATIVELY / PRIME, AS "3" AND "26" ALWAYS ARE. / HENCE, THE "DIVISOR" FOR THE INTERLEAVE OPERATION, AND / ONLY FOR THAT PARTICULAR OPERATION MUST BE MODIFIED TO "25" / DOUBLE DENSITY OPERATIONS, AND MUST REMAIN "26" FOR ALL SINGLE / DENSITY OPERATIONS. THIS IS ACCOMPLISHED, BY THE FOLLOWING / MECHANISM. / / -26 + ( +1 ) = -25, FOR DOUBLE DENSITY OPERATIONS. / -26 + ( 0 ) = -26, FOR SINGLE DENSITY OPERATIONS. / / THE FACTOR OF "0" OR "1" IS THE DISKETTE DENSITY PARAMETER / "RZDENS", OR "BTRXID" IN THE BOOTSTRAPS, WHICH IS RETURNED / AS A "0" FOR A SINGLE DENSITY DISKETTE, AND AS A "1" FOR A / DOUBLE DENSITY DISKETTE. / SCHEMATICALLY, THE ALGORITHM PROCEEDS AS FOLLOWS. / / SINGLE DENSITY DOUBLE DENSITY / 0>=N>=25 / / 3N (A.) 2N / Q(1)=3N(MOD 26.) (B.) Q(2)=2N(MOD 25.) / S(1)=Q(1) + 1 (C.) S(2)=Q(2) + 1 / / (A.) CALCULATE 2*SECTOR NUMBER WITHIN THE TRACK / I.E. THE RESIDUE FROM THE DIVIDE. / / USING THE DENSITY PARAMETER, SD=0/DD=1, / BUILD 2*SECTOR NUMBER + SECTOR NUMBER / FOR A SINGLE DENSITY DISKETTE, OR / SIMPLY 2*SECTOR NUMBER + 0 FOR A DOUBLE / DENSITY DISKETTE. / / (B.) CALCULATE THE PHYSICAL SECTOR NUMBER MINUS ONE BASED / ON THE CORRECT MODULUS. / / I.E. K*SECTOR NUMBER - 26 + DENSITY PARAMETER (SD=0/DD=1) / AND CONTINUE ADDING " - 26 + DENSITY PARAMETER" / TO THE RESULT WHILE IT REAMAINS POSITIVE. / / (C.) FOR EITHER DENSITY ADD "1" TO THE FINAL RESULT TO / OBTAIN THE CORRECT PHYSICAL SECTOR NUMBER. / / /********************************************************************* EJECT / ** -1- ** PAGE 1 DOCUMENTATION **** /********************************************************************* / / PAGE 1 / /********************************************************************* / / PAGE 1 OF THE DRIVER CONTAINS, AND IN THE PROPER ORDER, / THE FOLLOWING ROUTINES, AND DATA AREAS. / / A. THE ENTRY POINT TO THE DRIVER. / / B. THE "DPB" ( I.E. DEVICE PARAMETER BLOCK ) TRANSFER / ROUTINE. / / C. THE CONTROLLER SELECT CODE. / / D. THE IOT MODIFICATION PROCESSOR. / / E. THE DISKETTE DENSITY DETERMINATION. / / F. THE BUILD OF THE CONTROLLER COMMAND. / / G. THE INITIALISATION/RE-TRY PROCESSOR. / / H. THE READ/WRITE PROCESSOR/DISPATCHER. / / I. THE PAGE 1 DATA AREAS. / /********************************************************************* / IFNDEF DECDEV < FIELD 2 /FOR WRITE DISK ONLY > IFDEF DECDEV < FIELD 5 > / FIELD 00 /ACTUAL LOAD FIELD *RXDLDP /LOAD ADDRESS FOR DRIVER. / / /--------------------------------------------------------------------- / /************************ ENTRY POINT TO RX01/RX02 DEVICE DRIVER ***** / / ARGUMENTS ARE ACCESSED BY A "PASCAL-LIKE" CASE STATEMENT, / AS IMPLEMENTED IN PDP-8 ASSEMBLY LANGUAGE, AS INDICATED / IN THE PREAMBLE TO THIS DRIVER. / /--------------------------------------------------------------------- / /A015 / VERIFY BIT = BIT 1 /A015 / /A015 / WHEN SET IN RZXDIR ON INPUT /A015 / LOGICAL WRITE=READ AFTER WRITE (DONT EMPTY SILO)/A015 / LOGICAL READ(12BIT) =READ AND COMPARE SILO TO BUFFER /A015 / PHYSICAL READ=READ AND COMPARE SILO TO BUFFER /A015 / /---------------------------------------------------------------/A015 RX2SYS, 0 / ENTRY POINT TO "RX2SYS". DCA RZEXIT /SET RETURN FIELD(IN ACC UPON ENTRY) TAD RZCDF0 / BUILD PROPER "CDF",... RDF / ...TO KNOW WHICH DATA FIELD,... DCA RZCCDF / ......DRIVER WAS CALLED FROM. JMS RZARGS / LOAD TABLE HEAD. RZACNT, RZDRIV-RZARGS / COUNT OF # OF ARGUMENTS PASSED. RZCTLR, / * LOCAL STORAGE FOR THE CONTROLLER #. RZDRIV, 0 / LOCAL STORAGE FOR DRIVE # ( 0-3 ). PYSECT, / SECTOR NO FOR PHYSICAL I/O RZBLKN, 0 / LOCAL STORAGE FOR START BLOCK # ON DISKETTE. RZBCDF, 0 / LOCAL STORAGE FOR "CDF" OF BUFFER FIELD. RZBPTR, 0 / LOCAL STORAGE FOR BUFFER ADDRESS WITHIN FIELD. RZBCTR, 0 / LOCAL STORAGE FOR # OF BLOCKS TO TRANSFER. PYTRAK, 0 /TRACK NO FOR PHYSICAL IO RZXDIR, 0 / LOCAL STORAGE FOR TRANSFER DIRECTION. RZUNIT, / * LOCAL STORAGE FOR UNIT #. RZARGS, 0 / ENTRY POINT TO "RXARGS". TAD RZACNT / LOAD COUNT OF ,... DCA RZACTR / ...NUMBER OF ARGUMENTS PASSED. RZARG1, ISZ RZARGS / UPDATE POINTER TO ADDR. OF NEXT LOCAL ARG. RZCCDF, CDFSYS / * "CDF" TO CALLER FIELD. /M033 TAD I RX2SYS / LOAD ARGUMENT,... CDFSYS / ENSURE LOCAL DATA FIELD. /M033 ISZ RX2SYS / ...UPDATE TO ADDRESS OF NEXT ARGUMENT,... DCA I RZARGS / ......STORE ARGUMENT LOCALLY,... ISZ RZACTR / ALL ARGUMENTS PASSED ? JMP RZARG1 / NO - RETREIVE NEXT. /--------------------------------------------------------------------- / /************************ INITIALISE/SET RETRY PARAMETERS ************ / /--------------------------------------------------------------------- TAD RZRTCT / LOAD THE RE-TRY COUNT,... DCA RZECTR / ...AND SAVE IT. /--------------------------------------------------------------------- / /************************ SELECT SPECIFIED CONTROLLER **************** / /--------------------------------------------------------------------- /--------------------------------------------------------------------- / FOR DECMATE I / / RZDRIV = 0,1 SEL DRIVE 0 UNIT 0,1 / RZDRIV = 2,3 SEL DRIVE 1 UNIT 0,1 / / / FOR DECMATE II / / / RZDRIV = 0,1 SEL DRIVE 0 UNIT 0,1 HEAD 0 / RZDRIV = 4,5 SEL DRIVE 0 UNIT 0,1 HEAD 1 / RZDRIV = 2,3 SEL DRIVE 1 UNIT 0,1 HEAD 0 / RZDRIV = 6,7 SEL DRIVE 1 UNIT 0,1 HEAD 1 / /-------------------------------------------------------------------- IFDEF WINNIE < TAD RZXDIR /FUNCTION CODE /A032 SPA /=PHYIO? /A032 /M036 CMA /YES /A032 /M036 RAR /WINNIE BIT IN LINK /A032 /M036 SZL /=WINNIE? /A032 /M036 JMP ISAWIN /TAG SPEAKS FOR ITSELF /A036 /D036 JMS WINCHK /CHECKS FOR WINNIE RETRNS IF NOT/A032 CLA /NOT CLEAR ON RETURN /A032 > /END IFDEF WINNIE /A032 IFDEF CONDOR < IFNDEF LOAD4 < CLA CLL IAC RTL /=4 DEVICE PAIR BIT /A019 AND RZDRIV /GET DRIVE > /END IFNDEF LOAD4 /A027 IFDEF LOAD4 < JMS SET4 /SET UP DRIVE 4 /A027 > /END IFDEF LOAD4 /A027 CLL RTR /SET PAIR BIT(11) /A019 RTR /A019 DCA RZPAIR /SAVE > /A018 CLA CLL CML IAC RAL / YES - 0003 = MASK FOR DRIVE NUMBER. AND RZDRIV / MASK OFF DRIVE NUMBER. RAR / MQL /SAVE UNIT RTR;BSW /SHIFT INTO POS DCA RZUNIT CLA SWP /GET CTRLR IFDEF CONDOR < TAD RZPAIR /ADD PAIR BIT(11) /A019 > /END IFDEF CONDOR /A030 DCA RZSLDV /SAVE PAIR TO BE SELECTED /A020 JMS SELCMD /SET SELECT /A018 /D036 CLA /A006 JMS RZSETB /RESET CDF'S SIZE= .-RX2SYS / /************************ PHYSICAL I/O SET UP AND CALL***************** / /**************** PHYSICAL I/O READS/WRITES ONLY ONE ************ /************* CALL IN RZXDIR IS COMPLEMENT OF READ/WRITE ********* /**************** FOR PHYSICAL I/O ******************** /******************* SECTOR FOR EACH CALL *************** / /----------------------------------------------------------------------- RZBYPS, TAD RZXDIR IFDEF CONDOR < SPA /IS LOGIO? /A025 CMA /NO=PHYSIO COMPL. /A025 AND (1000 /M025 DCA RZ50SW /SET RZ50X SWITCH. 0=NO 1=YES /M025 TAD RZXDIR /C025 > /A018 /M025 SPA /IS PHYSICAL I/O? JMP PHYSIO /YES EJECT / ** -1- ** MORE INITIALIZATION **** /--------------------------------------------------------------------- / /************************ BUILD CONTROLLER COMMAND ******************* / /--------------------------------------------------------------------- LOGIO, DCA RZPAT1 /SAVE FULL COMMAND JMS DVSET /SET DISK VERIFY SW /A015 TAD RZPAT1 AND MSK37 /CLEAR ALL BUT FUNCTION BITS DCA RZXDIR /RESET TAD RZPAT1 AND MSK400 /GET DENSITY BIT SZA CLA /IS SD? IAC /NO. IT IS DD DCA RZDENS /SET DENSITY FLAG 0=SD 1=DD TAD RZ50SW /IS IT RX50 SZA CLA JMP LOGIOA /YES CLEAR MODE SW TAD RZDENS SNA CLA /IF SD SET MODE BIT = 100 CLA IAC BSW /....ELSE IS DD MODE BIT = 000 LOGIOA, DCA RZMODE TAD RZPAT1 /GET FULL CMND AND MSK400 /GET DENSITY BIT TAD RZXDIR /GET CMND AND CONTINUE TAD RZMODE /MODE BIT 5=0 12BIT MODE =1 8BIT MODE TAD RZUNIT / YES - LOAD IN UNIT CODE,... TAD RZHEAD /ADD HEAD BIT FOR X50 DCA RZCMND / ......AND SAVE IT. DCA RZPHSW /CLR PHYS/LOG IO SW 0=LOGIO /--------------------------------------------------------------------- / /************************ CALCULATE LOGICAL SECTOR NUMBER ************ / /--------------------------------------------------------------------- TAD RZ50SW SZA CLA /IS IT RX50? JMP RZINT3 /INTERLEAVE BY 2 IF 50 TAD RZDENS / LOAD THE DENSITY SPECIFIER. SNA CLA / DOUBLE DENSITY ? TAD RZBLKN / NO - MAKE IT *3. RZINT2, TAD RZBLKN / YES - MAKE IT,... RZINT3, TAD RZBLKN / ...ONLY *2. DCA RZLSEC / ......AND SAVE IT. / / RZRTRY, JMS BLKSET /SET BLOCK CNT /c045 TAD RZLSEC / BACK UP THE "LOGICAL" SECTOR #,... DCA RZCSEC / ...AND [RE-]SET THE CURRENT SECT. #. TAD RZBPTR / GET THE CURRENT BUFFER POINTER,... DCA RZBFFR / ...AND SAVE IT FOR A RETRY. JMS RZDIVD / CALCULATE FIRST TRACK/SECTOR VALUES. JMS RZNEXT RZEXIT, CIFSYS /RETURN TOO CALLER /M033 RZ2RET, JMP I RX2SYS /RETURN TO CALLER /D032RZCDIF, CIFSYS /USED TO SET RETURN /M033 MSK37, 37 /MASK MSK400, 400 /DENSITY BIT MASK RZACTR, /A015 RZPAT1, 0 /TEMP STORE /A015 RZ50SW, 0 /0=RX01 OR RX02-- NOT 0=RX50 RZHEAD, 0 /HEAD SIDE IFDEF CONDOR < RZPAIR, 0 /PAIR BIT(11) 1 = 2 RX50 OR RX50 +RX02 /A019 > SIZE= .-LOGIO / / ** -1- ** PAGE 1 DATA AREA **** /--------------------------------------------------------------------- / /************************ OFF-PAGE POINTERS, DATA, ETC. ************** / /--------------------------------------------------------------------- RZCSEC, 0 / * CURRENT SECTOR NUMBER. / RZCDF0, CDFSYS / "CDF 0" INSTRUCTION. /M033 / RZRTCT, -10 / POINTER TO RETRY COUNT. RZLSEC, 0 /LOGICAL SECTOR RZECTR, 0 /ERROR COUNT WORD RZPHSW, 0 /PHYSICAL I/O SW 0=LOGIO 1=PHYS RZDENS, 0 /DENSITY SW /M036 SIZE= .-RZCSEC SPARE= .+177&7600-. PAGE EJECT / ** -2- ** PAGE 2 DOCUMENTATION **** /********************************************************************* / / PAGE 2 / /********************************************************************* / / THIS PAGE OF THE DRIVER CONTAINS ALL OF THE I/O FUNCTIONS / AND CONTROLLER I/O COMMAND PROCESSORS, AND CONCOMMITANT / DATA AREAS. / / A. THE 8 BIT MODE/SINGLE DENSITY, SECTOR 1, DATA / PACKING ROUTINE. / / B. THE 8 BIT MODE/SINGLE DENSITY, SECTOR 1, DATA / UNPACKING ROUTINE. / / C. COMBINED MODE/DUAL DENSITY, READ PRIMITIVE. / / D. COMBINED MODE/DUAL DENSITY, WRITE PRIMITIVE. / / E. THE PHYSICAL I/O CONTROLLER PRIMITIVE. / / F. THE CONTROLLER COMMAND PRIMITIVES. / / G. THE CONTROLLER "DONE"/"ERROR" PROCESSOR PRIMITIVES. / / H. THE PAGE 2 DATA AREA. / /********************************************************************* / ** -2- ** PACKING ALGORITHM **** /********************************************************************* / / THE ROUTINE "DXPACK" PERFORMS A TRANSFORMATION OF A / BLOCK (I.E. 256(10)) OF TWELVE BIT WORDS INTO THREE / 128(10) SECTORS OF 8 BIT BYTES SCHEMATICALLY INDICATED / BY THE FOLLOWING DIAGRAM. / / THE ROUTINE "DXUNPK" REVERSES THIS PACKING ALGORITHM. / / / NOTA BENE - Nx,y INDICATES NIBBLE(BITS 0-3) OF PAGE "x", WORD "y". / WHILE / Bx,y INDICATES BYTE(BITS 4-11) OF PAGE "x", WORD "y". / / !<--------12------->! / !<--4->!<----8----->! / ! N0,0 ! B0,0 ! / ! N0,1 ! B0,1 ! / ! N0,2 ! B0,2 ! / ! N0,3 ! B0,3 ! / . / . / . / ETC. / . / . / . / !N1,127! B1,127 ! / / / / IS TRANSFORMED INTO / / / / ! SECTOR "1" ! ! SECTOR "2" ! ! SECTOR "3" ! / !<-----8----->! !<----8----->! !<----8----->! / ! N0,1 ! N0,0 ! ! B0,0 ! ! B1,0 ! / ! N0,3 ! N0,2 ! ! B0,1 ! ! B1,1 ! / ! N0,5 ! N0,4 ! ! B0,2 ! ! B1,2 ! / ! N0,7 ! N0,6 ! ! B0,3 ! ! B1,3 ! / . . . / . . . / . . . / ETC. + ETC. + ETC. / . . . / . . . / . . . / !N1,127!N1,126! ! B0,127 ! ! B1,127 ! / /********************************************************************* EJECT / ** -2- ** RX01 SECTOR PACKING ROUTINE **** /--------------------------------------------------------------------- / /************************ RX01 SECTOR PACKING ROUTINE **************** / /!!!!!!!!!!!!!!!!!!!!!!!! NOTA BENE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! / / THE DATA FIELD OF THIS ROUTINE IS THE SPECIFIED BUFFER FIELD. / /!!!!!!!!!!!!!!!!!!!!!!!! END NOTE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! / /--------------------------------------------------------------------- DXPACK, 0 / ENTRY POINT TO "DXPACK". JMS RZLCMD / INITIATE A "FILL SILO" OPERATION. DXPAK1, CLA CLL / ENSURE REGISTER CLEAR, "XDR" DOESN'T. RZ1SET, CDFSYS /M033 TAD I RZBTMP / LOAD A DATUM,... AND DXNMSK / ...AND ISOLATE THE HIGH ORDER 4 BITS. ISZ RZBTMP / UPDATE BUFFER ADDRESS TO NEXT DATUM. DXNMSK, 7400 / (NOP)- JUST IN CASE THE "ISZ" SKIPS. -/M033 CLL RTR / ALIGN BITS AGAINST HOB BOUNDARY,... RTR MQL / ...AND SAVE TEMPORARILY. TAD I RZBTMP / LOAD NEXT SEQUENTIAL DATUM,... CDFSYS /RESET /M033 AND DXNMSK / ...AND ISOLATE HIGH ORDER 4 BITS. ISZ RZBTMP / UPDATE BUFFER ADDRESS TO NEXT DATUM. NOP / - JUST IN CASE THE "ISZ" SKIPS. BSW / ALIGN BITS ON LOB BOUNDARY,... CLL RTR / ...COMPLETE BUILD OF 8 BIT BYTE,... MQA / ......BY COMPLETING ALIGNMENT,... JMS I R2XFER / .........THEN TRANSFER TO SILO. JMP DXPAK1 / - REPEAT PROCESS. JMP RZEPRO /ERROR RETURN JMS RZPHYS JMS DYWRIT / DONE - LET "DYWRIT" FINISH IT OFF. JMP I DXPACK / RETURN TO CALLER. SIZE= .-DXPACK EJECT / ** -2- ** RX01 UNPACKING ROUTINE **** /--------------------------------------------------------------------- / /************************ RX01 UNPACKING ROUTINE ********************* / /!!!!!!!!!!!!!!!!!!!!!!!! NOTA BENE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! / / THE DATA FIELD OF THIS ROUTINE IS THE SPECIFIED BUFFER FIELD. / /!!!!!!!!!!!!!!!!!!!!!!!! END NOTE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! / /--------------------------------------------------------------------- DXUNPK, 0 / ENTRY POINT TO "DXUNPK". JMS RZPHYS / EFFECT A "READ SECTOR" OPERATION. JMS RZLCMD / INITIATE AN "EMPTY SILO" OPERATION,... DXUPK1, JMS I R2XFER / TRANSFER A DATUM,... JMP DXCONT /TRANSFER JMP RZEPRO /ERROR RET JMP DXDONE /DONE RETURN DXCONT, AND DXK377 / ...AND ENSURE HIGH ORDER NIBBLE = 0. CLL RTL / ALIGN NIBBLES ONTO BYTE BOUNDARY. MQL / SAVE. MQA / RETREIVE. AND DXBMSK / ISOLATE HIGH ORDER NIBBLE,... CLL RTL / ...COMPLETE ALIGNMENT,... RZ2SET, CDFSYS /M033 DCA I RZBTMP / ......AND INSERT INTO BUFFER. ISZ RZBTMP / UPDATE POINTER TO NEXT BUFFER ADDRESS. DXK377, 0377 / - JUST IN CASE THE "ISZ" SKIPS. / ( == "AND 377 ). MQA / RETREIVE DATUM. AND DXPC77 / ISOLATE NEXT SEQUENTIAL NIBBLE,... BSW / ...ISOLATE INTO HIGH ORDER BYTE,... DCA I RZBTMP / ......THEN INSERT INTO BUFFER. CDFSYS /RESET /M033 ISZ RZBTMP / UPDATE POINTER TO NEXT BUFFER ADDRESS. DXPC77, 0077 / - JUST IN CASE THE "ISZ" SKIPS. / ( == "AND 77 ). JMP DXUPK1 / NO - REPEAT. DXDONE, JMS DYREAD / YES - LET "DYREAD" FINISH IT OFF. JMP I DXUNPK / RETURN TO CALLER. SIZE= .-DXUNPK EJECT / ** -2- ** READ PRIMITIVE **** /--------------------------------------------------------------------- / /************************ READ PRIMITIVE ***************************** / /!!!!!!!!!!!!!!!!!!!!!!!! NOTA BENE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! / / THE DATA FIELD OF THIS ROUTINE IS THE SPECIFIED BUFFER FIELD. / /!!!!!!!!!!!!!!!!!!!!!!!! END NOTE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! / / / THE FOLLOWING ROUTINE UTILISES A PROPERTY OF THE / RX28 SUBSYSTEM THAT IS MODE DEPENDENT. / / IN 12 BIT MODE: / ALL TRANSFERS TO THE AC FROM THE / INTERFACE REGISTER ARE 12 BIT JAM / TRANSFERS. / / IN 8 BIT MODE: / ALL TRANSFERS TO THE AC FROM THE / INTERFACE REGISTER ARE LOCICAL "OR'S" / INTO BITS 4-11 OF THE AC. / / THUS, IN 12 BIT MODE, THE DATA IN THE AC, ACCESSED / BY THE "TAD I RZBFFR", ARE OVER-WRITTEN BY THE / TRANSFER. IN 8 BIT MODE, HOWEVER, THE DATA TRANSFERRED / IS "OR"ED INTO THE DATA ALREADY IN THE AC ( USUALLY / THE HIGH ORDER FOUR(4) BITS OF A PACKED WORD). / / HENCE, THIS FUNCTION MAY BE EMPLOYED AS A "READ" / PRIMITIVE. / / /--------------------------------------------------------------------- DYREAD, 0 / ENTRY POINT TO "DYREAD". DYRD01, JMS RZPHYS / EXECUTE A "READ SECTOR" OPERATION. JMS RZLCMD / INITIATE "EMPTY SILO" OPERATION. DYRD02, TAD RZXVFY /VERIFY MODE? /A024 SZA /A024 JMP RZ3SET /YES /A024 TAD RZPHSW /PHYSICAL IO SW RZ3SET, CDFSYS /M033 SNA CLA CLL /IF SET DONT ADD CONTENTS OF BUFFER TAD I RZBFFR / LOAD CONTENTS OF BUFFER. CDFSYS /RESET /M033 JMS I R2XFER / LOAD A DATUM. /#(12 BIT MODE = JAM XFER BITS 0-11) /#( 8 BIT MODE = "OR" OF BITS 4-11.) JMP DYCONT /TRDONE JMP RZEPRO /ERROR RETURN JMP DYDONE /DONE RETURN DYCONT, RZ4SET, CDFSYS /M033 /__________________________________________________________/A015 / / VERIFY DISKETTE /A015 / MUST BE LOCATED IN SAME PAGE AREA AS CALLING SUBROUTINE /A015 / ELSE CDF'S AND/OR SECOND BUFFER POINTER NEEDED /A015 / / VERIFY MODE COMPARES BUFFER TO SILO /A015 / RZVJMP, JMP RZXNOV /NOT VERIFY MODE=JMP..NOP=VFY MODE/A015 CIA /A015 TAD I RZBFFR /CHECK AGAINST BUFFER /A015 SNA CLA /A015 JMP DVFCNT /OK CONTINUE /A015 CDFSYS /RESET TO DRIVE FIELD /M033 RZXLOP, CLA /WILL NOT RESET 10 TIMES /A015 JMS I R2XFER /WAIT UNTILL DONE TO CLEAR FLAGS/A015 JMP RZXLOP /TR TRY AGN /A015 JMP RZEPRO /IS ERROR /C024 JMP RZEPRO /IS ERROR /C024 RZXNOV, /A015 DCA I RZBFFR /STORE /A015 DVFCNT, CDFSYS /RESET /M033 / ISZ RZBFFR / UPDATE BUFFER ADDRESS - WRAP ? DXBMSK, SMA CLA / - JUST IN CASE THE "ISZ" SKIPS - / ( == 7700 & WILL NEVER SKIP!!!) JMP DYRD02 / CHECK FOR OPERATION DONE. DYDONE, ISZ RZSCTR / YES - ALL SECTORS PROCESSED ? JMP DYRD01 / NO - PROCESS NEXT. JMP I DYREAD / YES - RETURN TO CHECK FOR END OF REQUEST. /M032 RZVSKP, JMP RZXNOV /VERIFY SKIP INSTRUCTION /A015 SIZE= .-DYREAD EJECT / ** -2- ** WRITE PRIMITIVE **** /--------------------------------------------------------------------- / /************************ WRITE PRIMITIVE **************************** / /!!!!!!!!!!!!!!!!!!!!!!!! NOTA BENE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! / / THE DATA FIELD OF THIS ROUTINE IS THE SPECIFIED BUFFER FIELD. / /!!!!!!!!!!!!!!!!!!!!!!!! END NOTE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! / /--------------------------------------------------------------------- DYWRIT, 0 / ENTRY POINT TO "DYWRIT". DYWRT1, JMS RZLCMD / INITIATE A "FILL SILO" COMMAND. DYWRT0, CLA CLL / RZ5SET, CDFSYS /M033 TAD I RZBFFR /UPDATE BUFFER ADDR CDFSYS /RESET /M033 JMS I R2XFER /TRANSMIT JMP DYCNT1 /TRANSMIT RETURN JMP RZEPRO /ERROR RETURN JMP DYDNE /DONE RETTURN DYCNT1, ISZ RZBFFR NOP /NECESSARY WHEN REACH END OF FLD JMP DYWRT0 /NEXT DYDNE, JMS RZPHYS / YES - EXECUTE A "WRITE SECTOR" OPERATION. ISZ RZSCTR / ALL SECTORS PROCESSED ? JMP DYWRT1 / NO - DO NEXT. JMP I DYWRIT / YES - RETURN TO CHECK FOR END OF REQUEST. /M032 SIZE= .-DYWRIT / /M032 /CHECK FOR PHYSICAL IO /M032 / RETURN+1 IF SWITCH=1 /M032 / CHKPHY, 0 /M032 CLA /M032 TAD RZPHSW /PHYS IO? /M012 /M032 SZA CLA /A012 /M032 ISZ CHKPHY /A012 /M032 JMP I CHKPHY /A012 /M032 /***************************************************** EJECT / /____________________________________________________________/A015 / FOLLOWING MAY NOT BE NECESSARY TO RESET TO WRITE UPON EXIT/A015 / TO BE RECHECKED ?A015 /_______________________________________________________________/A015 DVSETW, 0 CLA CLL CMA RTL /7775 /A015 AND RZCMND /CLEAR READ BIT /A015 DCA RZCMND /A015 JMP I DVSETW /A015 / / RZXVFY, 0 /VERIFY MODE SWITCH /A015 / ** -2- ** PAGE 2 DATA AREA **** /--------------------------------------------------------------------- / /************************ OFF-PAGE POINTERS, DATA, ETC. ************** / /!!!!!!!!!!!!!!!!!!!!!!!! NOTA BENE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! / / THE DATA FIELD OF THIS ROUTINE IS THE SPECIFIED BUFFER FIELD. / /!!!!!!!!!!!!!!!!!!!!!!!! END NOTE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! / /--------------------------------------------------------------------- RZCMND, 0 / * CONTROLLER COMMAND WORD. RZBFFR, 0 / * RUNNING BUFFER ADDRESS. RZBTMP, 0 / * TEMPORARY BUFFER POINTER. RZTRAK, 0 / * THE PHYSICAL TRACK NUMBER. RZSECT, 0 / * THE PHYSICAL SECTOR NUMBER. RZSCTR, 0 / * SECTOR COUNTER. / / R2XFER, RZXFER /POINTER TO "RZXFER ROUTINE SIZE= .-RZCMND SPARE= .+177&7600-. PAGE EJECT /-------------------------------------------------------------------- / /************************ PHYSICAL I/O SET UP AND CALL***************** / /**************** PHYSICAL I/O READS/WRITES ONLY ONE ************ /************* CALL IN RZXDIR IS COMPLEMENT OF READ/WRITE ********* /**************** FOR PHYSICAL I/O ******************** /******************* SECTOR FOR EACH CALL *************** / /----------------------------------------------------------------------- PHYSIO, CMA / DCA RZXDIR /RESET CALL /D032 IAC /PHYSICAL IO SW FOR DVSET /A015 JMS DVSET /SET VERIFY SW /A015 CLA CLL IAC BSW /100 AND RZXDIR /MASK COMPUTED MODE BIT DCA RZMODE /SET MODE CALLED FOR TAD RZUNIT /ADD UNIT NO TAD RZHEAD /HEAD 0/1 FOR RX50 TAD RZXDIR AND KON536 /MASK OUT COMMAND BITS DCA RZCMND / SAVE COMMAND /PHYSIO DENSITY BIT USED ONLY AS SW /IN LDCMND ROUTINE TAD RZXDIR /GET MODE TO RESET DENSITY SW AND (400 /DENSITY BIT /A011 SZA CLA /CHECK DENSITY /A011 IAC /IS DBLE DEN /A011 DCA RZDENS /... SET ACTUAL DENSITY FOR THIS DSKETTE TAD PYTRAK DCA RZTRAK /SET TRACK TAD PYSECT DCA RZSECT /SET SECTOR RZPHIO, /M025 CLA IAC /RETRY I/O ERR /C016 /C025 DCA RZPHSW /SET PHYSICAL IO SW=-1 TAD RZBPTR /BUFFER POINTER /M025 DCA RZBFFR /RESET /M025 CMA /-1 /M016 DCA RZSCTR /SET TO READ ONLY 1 SECTOR /M016 TAD RZCMND JMS RZXJMP /SET JMP TO FUNCTION RZWRIT /FUNCTION 0=WRITE RZREAD / 2=READ RZFRMT / 4=FORMAT DSKETTE RZLDEN / 6=GET DENSITY RZEXT / 10=IGNORE RZDSTY / 12=READ ERROR STATUS TRCON, /SPACE WARS /M011 RZXJMP, 0 CLL RAR / /2 AND KON7 TAD RZXJMP /GET ADDR DCA RZXJMP /SAVE LOC TAD I RZXJMP DCA RZXJMP JMP I RZXJMP /EXEC RZFRMT, TAD KYWORD /KEYWORD TO SET DENS RZDSTY, DCA TRCON /111 FOR TRNSFER 0 FOR DONE RZFUNC, AC0004 /EXECUTE PHYSICAL IO FUNCTION /M033 JMS RZLCMD /D019 JMP RZERR1 /ERR TAD TRCON SKP /SET FOR TRNSFER CLA /SET FOR DONE RETURN JMS RZXFER /READ STATUS JMP .-2 /CHECK DONE JMP RZERR6 /ERR RET JMP I R3RET /DONE RETURN RZREAD, JMS DYREAD /GO READ IT JMP I R3RET /EXIT RZWRIT, JMS DYWRIT /WRITE IT JMP I R3RET /EXIT RZLDEN, JMS RZIDEN /GET DENSITY RZEXT, JMP I R3RET /EXIT R3RET, RZEXIT /DONE RET EJECT / ** -1- ** RX01/RX02 PROCESS DISPATCHER **** /--------------------------------------------------------------------- / /************************ RX01/RX02 PROCESS DISPATCHER *************** / / THIS IS THE MAIN I/O PROCESSOR - ALL I/O LOOPS THROUGH THIS / ROUTINE. / / THE FOLLOWING DISPATCH ROUTINE IS BASED UPON AN INDEX, A SUM / CALCULATED FROM THE DENSITY FUNCTION, AND THE I/O FUNCTION / AS FOLLOWS: / / SD DD / RZDENS 0 1 / / WRITE READ / RZXDIR 0 2 / / THEREFORE, / / "INDEX" 0 => SINGLE DENSITY/WRITE. / 1 => DOUBLE DENSITY/WRITE. / 2 => SINGLE DENSITY/READ. / 3 => DOUBLE DENSITY/READ. / /--------------------------------------------------------------------- RZNEXT, 0 RZNXTA, TAD RZBFFR / SET/RE-SET TEMPORARY BUFFER,... DCA RZBTMP / ...POINTER FOR PACK/UNPACK ROUTINES. TAD RZ50SW SNA CLA /IS IT RX50? TAD (-1 /NO INTERLEAVE 2 TAD (-1 /YES INTERLEAVE 1 DCA RZSCTR / ...SECTOR COUNT,... TAD RZXVFY /CHECK VERIFY MODE /A015 SZA CLA /A015 CLA CLL IAC RTL /=4 ADD TO TABLE FOR VERIFY MODE/A015 RZNXTB, TAD RZDENS / LOAD THE DENSITY CODE,... TAD RZXDIR / ...AND BUILD DISPATCH CODE. JMS RZDISP / LOAD THE TABLE HEAD. DXPACK / SD/8 BIT WRITE. DYWRIT / DD/12 BIT WRITE. DXUNPK / SD/8 BIT READ. DYREAD / DD/12 BIT READ. DVPACK /8BIT SD WRITE WITH VERIFY /A015 DVWRIT /12BIT DD WRITE WITH VERIFY /A015 RZVERF /8BIT SD READ VERIFY(NOT ALLWD LOGIO) /A015 DVREAD /12BIT DD READ VERIFY(ALLWD LOGIO)/A015/C024 RZDISP, 0 / TABLE ENTRY ADDRESS/DISPATCH ADDRESS. TAD RZDISP / BUILD,... DCA RZDISP / ...DISPATCH,... TAD I RZDISP / ......ADDRESS,... DCA RZDISP / .........THEN,... JMS I RZDISP / .................AND DISPATCH. ISZ RZBCNT / REQUEST COMPLETE ? /C045 JMP RZNXTA / NO - DO ANOTHER BLOCK. JMP I RZNEXT / ...AND EXIT DRIVER. /M032 SIZE= .-RZNEXT /SPACE WARS MOVE VERSION 034 / DVSETR, 0 CLA CLL IAC RAL /=2 /A015 /M034 TAD RZCMND /ADD /A015 /M034 DCA RZCMND /RESET /A015 /M034 JMP I DVSETR /A015 /M034 / EJECT KYWORD, 111 /KEYWORD TO FORMAT DENSITY /M032 KON536, 536 /MASK 9 BIT =HEAD/SCND SIDE RX50 KON7, 7 SPARE= .+177&7600-. PAGE EJECT / ** -2- ** PHYSICAL I/O PRIMITIVE **** /--------------------------------------------------------------------- / /************************ PHYSICAL I/O PRIMITIVE ********************* / /!!!!!!!!!!!!!!!!!!!!!!!! NOTA BENE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! / / THE DATA FIELD OF THIS ROUTINE IS THE SPECIFIED BUFFER FIELD. / /!!!!!!!!!!!!!!!!!!!!!!!! END NOTE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! / /--------------------------------------------------------------------- RZPHYS, 0 / ENTRY POINT TO "RZPHYS". AC0004 / SET IN THE "PHYSICAL I/O" BIT,... /M033 JMS RZLCMD / ...AND TRANSMIT COMMAND TO CONTROLLER. TAD RZSECT / LOAD THE PHYSICAL SECTOR,... JMS RZXFER / ...AND TRANSMIT IT. JMP RZCNT1 /TR DONE RETURN JMP RZEPRO /ERROR RETURN JMP RZERR3 /SHOULD NOT GET DONE RETURN RZCNT1, CLA CLL / ENSURE REGISTER CLEAR, "XDR" DOESN'T. TAD RZTRAK / LOAD THE PHYSICAL TRACK,... JMS RZXFER / ...AND TRANSMIT IT TOO. JMP RZCNT2 /TR RETURN JMP RZEPRO /ERROR RETURN JMP RZERR3 /SHOULD NOT GET DONE YET RZCNT2, JMS CHKPHY /CHECK PHYSIO SKIP ONE IF TRUE /A012 JMS RZDIVD /THEN CALCULATE THE NEXT TRACK AND SECTOR./M012 JMS RDNSWP /DO SWAP IF DONE /A026 /DONE RETURN CDFSYS / RESTORE OUR DATA FIELD,... /M033 JMP I RZPHYS / YES - RETURN TO CALLER. /M032 SIZE= .-RZPHYS EJECT / ** -2- ** CONTROLLER PRIMITIVES **** /--------------------------------------------------------------------- / /************************ CONTROLLER FUNCTION PRIMITIVE ************** / /!!!!!!!!!!!!!!!!!!!!!!!! NOTA BENE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! / / THE DATA FIELD OF THIS ROUTINE IS THE SPECIFIED BUFFER FIELD. / /!!!!!!!!!!!!!!!!!!!!!!!! END NOTE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! / /--------------------------------------------------------------------- RZLCMD, 0 / ENTRY POINT TO "RZPHYS". TAD RZCMND / LOAD THE COMMAND,... RZIO01, RXILCD / SUBMIT COMMAND, OR FIRST BYTE OF, /M033 / TO CONTROLLER,... TAD RZMODE / ...8 BIT MODE OPERATION ?,... SNA CLA JMP INCRET /NO 12 BIT TAD RZDENS /SET 2ND HALF OF WORD FOR LCD /A011 RZLCM2, JMS RZXFER / .........YES - SEND OUT SECOND BYTE,... JMP INCRET /NORMAL RETURN JMP RZERR1 /ERROR RETURN /C019 JMP RZERR1 /DONE RETURN=ERROR /C019 INCRET, /C019 CLA /CLEAR FOR 8 BIT DD TRNSFER JMP I RZLCMD / /M032 /*****RZLCM3 MUST BE LOCATED ON SAME PAGE AS RZLCM2 /A024 RZLCM3, JMS RZXFER /CONSTANT USED TO OVERLAY RZLCM2 /A024 /****************** /A024 /--------------------------------------------------------------------- / /************************ CONTROLLER READY PRIMITIVE ***************** / / THE DATA FIELD OF THIS ROUTINE IS THE SPECIFIED BUFFER FIELD. / /************************ CONTROLLER DATA TRANSFER PRIMITIVE ********* / /************************ OPERATION COMPLETE/ERROR PROCESSOR ********* / /--------------------------------------------------------------------- RZXFER, 0 /ENTRY POINT RZXRDY, /RZXRDY USED TO CHECK ASSEM REF ERRS(TEMP) RZIO02, RXISTR /TRANS READY? /M033 JMP RZDONE /NO CHECK DONE RZIO03, RXIXDR /YES TRANSFER /M033 JMP I RZXFER /TRANSFER COMPLETE RETURN /M032 RZDONE, /RZDONE TEMP TO CHECK REFERENCES RZIO04, RXISDN /OP COMPLETE /M033 JMP RZXRDY /NO CHECK TRANSFER RZIO05, RXISER /ANY ERROR /M033 JMP RZNOER //NO JMS RZTMPE / ERROR ROUTINE JMP RZERXT /YES RZNOER, CLA /A007 ISZ RZXFER /SET DONE RETURN RZERXT, ISZ RZXFER /SET ERROR RETURN JMP I RZXFER /M032 RZTMPE, 0 / ERROR ROUTINE CLA /A011 RXIXDR /GET STATUS /M033 AND M377 DCA RZSTAT /TO RZSTAT (FOR RZIDEN). /M003 TAD RZCMND /GET DEVICE NO AND KON20 TAD KON16 /ERR STATUS CODE RXILCD /TRNSFER /M033 RXISDN /M033 JMP .-1 RXIXDR /M033 AND M377 DCA RZERST /SET ERROR STATUS JMP I RZTMPE / KON20, 20 KON16, 16 RZMODE, 0 /MODE SW: 0=12(DD) BIT MODE 1=8(SD) BIT MODE / M377, 377 EJECT / ** -3- ** PAGE 3 DOCUMENTATION **** /********************************************************************* / / PAGE 3 / /********************************************************************* / / THE FOLLOWING PAGE CONTAINS ALL OF THE UTILITY ROUTINES / USED BY THE PAGE 1, AND PAGE 2 ROUTINES, PLUS THE ASSOCIATED / DATA AREAS. / / A. THE ERROR PROCESSOR. / / B. THE EXTERNAL/INTERNAL DENSITY DETERMINATION ROUTINES. / / C. THE TRACK,SECTOR AND INTERLEAVE ROUTINES. / / [D. THE OPTIONAL I/O WAIT ROUTINE-USED ONLY IF ALL ELSE FAILS.] / / E. THE PAGE 3 DATA AREA. / /********************************************************************* / ** -3- ** ERROR PROCESSOR **** /--------------------------------------------------------------------- / /************************ PROCESSES ERRORS/RE-TRY ******************** / /--------------------------------------------------------------------- RZEPRO, IFDEF CONDOR < JMS CKWPRO /CHECK IF WRITE PROTECT ERROR /A026 JMP RZERR2 /YES IT IS(DON'T) RETRY 10 TIMES/A026 > /END ENDIF CONDOR /A026 TAD I R2BPTR / ......AND THE,... DCA I R2BFFR / .........BUFFER ADDRESS. JMS RZINCR /CHECK INIT COUNT /M016 TAD RZXVFY /IS VERIFY MODE /A016 SZA CLA /A016 JMP RZERR8 /YES. /A016 TAD RZPHSW /IS PHYSIO? /A007 SZA CLA /A007 JMP RZERR6 /YES /A007 RZXPRC, TAD I R2CSEC / RE-SET THE OFFENDING,... DCA I R2LSEC / ...SECTOR NUMBER,... ISZ I R2ECTR / RETRY COUNT EXHAUSTED ? JMP I R2RTRY / NO - RE-TRY THIS OPERATION. JMP RZERR2 /PROCESS ERROR 2 / / RZERR8, TAD RZPHSW /IT IS VERIFY MODE BUTIS PHYSIO?/A016 SNA CLA /C044 /D044 JMP RZERR7 /YES /A016 /D044 JMS DVSETW /NO IT'S LOGIO WRITE WITH VERIFY/A016 JMP RZXPRC /....AFTER SETTING TOWRITE CONT../A016 / RZERR7, TAD RZCMND /CHECK COMMAND LAST PERFORMED /A016 AND KON16 SNA CLA /0=WRITE 2 =READ.... /A016 JMP RZERRR /WAS WRITE(WOULD BE FLUKE IF OCCURED)/A016 JMS DVSETW /SET TO WRITE /A016 CMA /A016 DCA RZSCTR /SET SECTOR COUNT /A016 JMS DYWRIT /WRITE IT /A016 RZERRR, JMS DVSETR /SET READ /A016 JMP RZERR6 /DO IT /A016 SIZE= .-RZEPRO EJECT / ** -2- ** PAGE 2 DATA AREA **** /--------------------------------------------------------------------- / /************************ OFF-PAGE POINTERS, DATA, ETC. ************** / /--------------------------------------------------------------------- RZERST, 0 / * ERROR-STATUS WORD. / / R2EXIT, RZEXIT / LINK TO EXIT CODE. / R2RTRY, RZRTRY / POINTER TO "RZRTRY". R2CSEC, RZCSEC / POINTER TO "RZCSEC". R2BPTR, RZBPTR / POINTER TO "RZBPTR". R2BFFR, RZBFFR / POINTER TO "RZBFFR". R2ECTR, RZECTR / POINTER TO "RZECTR". R2LSEC, RZLSEC /POINTER TO "RZLSEC" / /m 050 this routine moved here in V2.5 / / THIS ROUTINE ENTERED FOR 12 BIT LOGICAL READ AND VERIFY /M027 / DVREAD, 0 /M032 JMS DYREAD /READ AND COMPARE SILO /M032 JMP I DVREAD /M032 / / END SPACE WARS SPARE= .+177&7600-. PAGE EJECT / / /************************ INTERNAL CALL DENSITY PROCESSOR ************ / /--------------------------------------------------------------------- RZIDEN, 0 / ENTRY POINT TO "RZIDEN". IFDEF WINNIE < JMP CHKWIN /CHECK WINNIE(SPACE WARS CLUGE) /A032 > /END IFDEF WINNIE /A032 /.....NOT A WINNIE RETURN /A032 / NOWINI, DCA I R3CMND /CLEAR COMMAND TEMP DCA I R3MODE /ENSURE 12 BIT MODE FOR LOAD STATUS CMND TAD I R3UNIT /UNIT NO TAD CON12 /101X BIN READ STATUS JMS RZLCMD /EX CMMND /# "SINGLE DENSITY" /# "12 BIT MODE" / ...OPERATION. DCA RZDLCT /SET DELAY COUNT /A022 TAD KONDLY /DELAY CONSTANT 7421(SNL) /A023 DCA RZDLC2 /OUTSIDE LOOP=-APPROX 240 DEC /A023 JMP RZDELY /*********************** RZIO10, RXISDN /DONE FLAG SET? /M033 JMP RZDELY /INC TIMEOUT /A022 RZIO11, RXISER /IS THERE ANY ERROR /M033 JMP RZDNOK /NO DONE IS OK /A022 JMS RZTMPE /READ ERROR STATUS /A022 JMP RZPASS /GET STATUS /A022 RZDNOK, /A022 RZIO07, RXIXDR /READ STATUS /M033 DCA RZSTAT /SAVE STAT TEMP RZPASS, TAD RZSTAT AND (377 /CLEAR UNUSED BITS DCA RZSTAT TAD (200 /DEVICE READY? AND RZSTAT SNA CLA /IS READY? JMP RZERR5 /NO CLA IAC BSW /100=RX50 BIT /A023 AND RZSTAT / /C023 SNA CLA /IS IT A 50 JMP NOTA50 CLA CLL IAC RAL /=2 /A024 JMS RZSETX /SET TYPE /A024 TAD RZSTAT AND (1000 /2ND HEAD AVAILABLE SZA CLA IAC /SET DENS TO 3 TAD (2 /2=RX50 ONE SIDE 3=RX50 2 SIDES JMP RZSETF /SET DENSITY NOTA50, TAD RZSTAT / GET STATUS /A002 AND (10) / ISOLATE THE RX02 BIT. /A002 JMS RZSETX /SET UP FOR RX02/RX01 /A024 TAD RZSTAT /GET STATUS AND (40 /MASK DENSITY BIT SZA CLA /IS IT READY? IAC /DD RZSETF, DCA I R3DENS /SET DENSITY 0=SD 1=DD /............3=RX50 ONE SIDE /............4=RX50 TWO SIDE RZCNT3, TAD I R3DENS /GET WORKING DENSITY JMP I RZIDEN / - RETURN. /M032 RZSTAT, 0 /SAVE STATUS JUST READ /.....BIT 6 = DENSITY(0=SD) CON12, 12 RZDLCT, 0 /DELAY COUNT INITIALIZED TO 0 TO APPROX 18.4 MSEC/C022 RZDLC2, 0 /OUTSIDE LOOP (-240 APPROX.) =5SEC TOTAL/A023 SIZE= .-RZIDEN EJECT / ** -3- ** TRACK, SECTOR AND INTERLEAVE **** /--------------------------------------------------------------------- / /************************ TRACK/SECTOR-INTERLEAVE PROCESSOR ********** / / THE FOLLOWING ROUTINE IS A "ONE'S COMPLEMENT" DIVIDE / ROUTINE. / / THE QUOTIENT IS RETURNED AS THE ONE'S COMPLEMENT / OF THE TRUE QOUTIENT, WHILE THE REMAINDER IS RETURNED / AS A POSITIVE NUMBER, GREATER OR EQUAL TO ZERO, AND LESS / THAN THE DIVISOR. / / THE MAXIMUM NUMBER OF ITERATIONS THAT MAY BE EXECUTED FOR / TRACK/SECTOR CALCULATIONS IS TEN(10) DECIMAL. THUS, THE / MAXIMUM TIME THAT MAY BE SPENT WITHIN THE DIVIDE ROUTINE / PROPER FOR THE MAXIMUM BLOCK COUNT (<=1001(10)) IS ABOUT / 1.2 MILLISECONDS, FOR ALL OTHER SUCH CALCULATIONS, / PROPORTIONATELY LESS. / / ADJUSTMMENT OF THE TRACK NUMBER, IN THE ROUTINE, "RZINTL" / TO THE RANGE OF 1<=TRACK<=77, IS ACCOMPLISHED BY A "CIA" / INSTRUCTION, SIMULTANEOUSLY 1'S ORIGINING THE TRACK, AND / BUILDING A POSITIVE NUMBER. FOR A TRUE DIVIDE THE QUOTIENT / MUST BE MADE POSITIVE BY MEANS OF A "CMA" INSTRUCTION. / /--------------------------------------------------------------------- RZDIVD, 0 / ENTRY POINT TO "RZDIVD". CLA MQL / INIT. THE RESIDUE,... TAD RZ50SW /RX50 SW SNA CLA /IS IT SET TAD RZ02DV /DIVISOR FOR RX01/RX02 TAD RZ50DV /DIVISOR FOR RX50 DCA RZDVSR /SET IT UP(10 SECTORS FOR 50__26 FOR 01/02) CMA CLL CML / ...AND THE QUOTIENT,... DCA I R3TRAK / ......(THE PHYSICAL TRACK ~). TAD I R3LSEC / LOAD THE LOGICAL SECTOR #. SNA / LOGICAL SECTOR = 0 ? JMP RZINTL / YES - JUST INTERLEAVE. RZDIV0, RAL / NO - NORMALISE,... KONDLY, SNL / ...THE LOGICAL SECTOR,... /C023 JMP RZDIV0 / ......NUMBER. RZDIV1, DCA I R3SECT / SAVE THE CALCULATED PHYSICAL SECTOR. MQA / LOAD RESIDUE. RAL / SHIFT,... MQL / ...AND SAVE. MQA / RETREIVE RESIDUE. TAD RZDVSR / "SUBTRACT" DIVISOR (# SECTORS/TRACK). SMA / OVERFLOW ? MQL / NO - SAVE VALUE. CLA CML / YES - CLEAR REGISTER, FIX LINK. TAD I R3TRAK / RETREIVE QUOTIENT. RAL / SHIFT AND,... DCA I R3TRAK / ...SAVE. TAD I R3SECT / RETREIVE SECTOR,... CLL RAL / ...AND SHIFT. SZA / DONE ? JMP RZDIV1 / NO - REPEAT. / YES - TIME TO INTERLEAVE. SIZE= .-RZDIVD /--------------------------------------------------------------------- / /************************ INTERLEAVE SECTORS ************************* / /--------------------------------------------------------------------- RZINTL, MQA / RETREIVE QUOTIENT. CLL RAL / BUILD 2*Q. DCA I R3SECT / SAVE 2*Q. TAD RZ50SW / GET DENSITY INDICATOR (0=SD,1=DD). SNA CLA /RX50 INTERLEAVE 2 ELSE 3 MQA / NO - LOAD "Q". TAD I R3SECT / YES - BUILD CORRECT INTERLEAVE FACTOR. RZDIV2, DCA I R3SECT / SAVE "PHYSICAL" SECTOR #. TAD RZ50SW /A018 SZA CLA /IS A 50? /A018 TAD I R3DENS /.YES. ADJUST MODULUS FOR DENSITY TYPE/M018 TAD I R3SECT / RETREIVE "PHYSICAL" SECTOR #. TAD RZDVSR / "SUBTRACT" # SECTORS/TRACK. SMA SZA / OVERFLOW ? JMP RZDIV2 / NO - REPEAT UNTIL OVERFLOW. ISZ I R3SECT / YES - ADD 1 TO BUILD CORRECT PHYSICAL SECTOR. CLA TAD I R3TRAK / LOAD THE PHYSICAL TRACK #,... CIA / ...ADJUST TO RANGE 1<=TRK<=77.,... DCA I R3TRAK / ......AND SAVE IT FOR CALLS. ISZ I R3LSEC / UPDATE LOGICAL SECTOR. JMP I RZDIVD / RETURN TO CALLER. /M032 SIZE= .-RZINTL EJECT / ** -3- ** PAGE 3 DATA AREA **** /--------------------------------------------------------------------- / /************************ OFF-PAGE POINTERS, DATA, ETC. ************** / /--------------------------------------------------------------------- / RZDVSR, 0 / TRACK/SECTOR DIVISOR. RZ02DV, -20 /DIVISOR FOR RX01/2=-(20+12) RZ50DV, -12 /DIVISOR FOR RX50=10 DEC. / / R3DENS, RZDENS / POINTER TO "RZDENS". R3TRAK, RZTRAK / POINTER TO "RZTRAK". R3SECT, RZSECT / POINTER TO "RZSECT". R3LSEC, RZLSEC / POINTER TO "RZLSEC". R3UNIT, RZUNIT / POINTER TO "RZUNIT". R3CMND, RZCMND / POINTER TO "RXCMND". R3MODE, RZMODE /POINTER TO "RZMODE" SIZE= .-RZDVSR SPARE= .+177&7600-. PAGE EJECT /************************************************************/A026 / / THIS ROUTINE SET UP TO CHECK DONE. IT RETURNS IF DONE SET /A026 / IF ERROR OR TRANSFER FLAG SET GOES TO APPROP. ERROR ROUTINE/A026 / / RDOSWP defined in WPF1 overlayed by WPCU2 after / initialization done. allows swaping of tasks / pending read/write done being set / If error on RDOSWP ... WPF1 must change / to = address in dskhnd.... currently=6412 / / /************************************************************/A026 RDNSWP, 0 /A026 RNOSWP, RXISTR /TRNSFER READY /M033 JMP RNOXDR /NO CHECK DONE /C028 RXIXDR /CLEAR IT /M033 JMP RZERR4 /TRANSFER READY ILLEGAL /A026 RNOXDR, RXISDN /DONE? /M033 JMP RDOSWP /A032 / / /D032ROVSWP, JMP RNOSWP /CHECK TRANSFER /C028 RXISER /ERROR? /M033 JMP I RDNSWP /A026 JMP RZEPRO /PROCESS ERROR /A026 RDOSWP, CLA /OVERLAYED WITH JSWAP /C028 JMP RNOSWP /A032 /*********************************************************/A018 / / THIS ROUTINE SELECTS THE DEVICE PAIR AS SPECIFIED IN AC /A018 / IF DONE IS SET IT RETURNS ...CALL+1 / ELSE AFTER TIMEOUT / INITIALIZES DISKETTES AND TAKES ERROR RETURN / ...WITH 5777 IN AC... BIT 0=ERROR / BITS 1,2,3 =101 FOR DENSITY DEVICE NOT/A018 / .......................READY / BITS 4-11 =377 UNIQUE ERROR CODE /A018 / ..............FOR LATER USE /A018 /************************************************************/A018 SELCMD, 0 TAD RZSLDV /GET PAIR /M022 RXI00A, RXISEL /SELECT DRIVE PAIR /M033 RXISEL /SELECT DRIVE PAIR(in case drves 6-7) /M033 CLA /SET COUNT /M022 /SET UP TRANSFER FOR LOAD COMMAND. 0 FOR RX01 / SECOND TRANSFER JMS RZXFER FOR RX02(RX50) /A024 / / TAD RZDRIV /GET DRIVE # /A024 AND KON07 /MASK IT /A024 TAD TBLPTR /TABLE POINTER /A024 DCA USEPTR /SET IT UP /A024 TAD I USEPTR /GET SWITCH CODE /A024 SZA CLA /IS RX01 OR RX02(50) TYPE /A024 TAD RZLCM3 /GET JMS RZXFER FRO RX02(50) /A024 DCA RZLCM2 /SET CODE OR 0 /A024 / RXI00B, /M022 SELRPT, /M022 RXISDN /DONE /M033 NOP /M022 JMP I SELCMD /RETURN /M022 RZSLDV, 0 /DEVICE PAIR SELECTED /M022 /---------------------------------------------------------------/A016 / IF RX50 THIS ROUTINE WILL INIT DISK PRIOR TO RETRY /A022 / THEN WILL SEEK TO TR 079 TILL ERRCOUNT IS EXHAUSTED /A022 /---------------------------------------------------------------/A016 RZINCR, 0 /DO INIT AFTER 5 RETRIES /A005 JMS RZSEEK /CHECK TIME TO SEEK 079 /A022 JMP I RZINCR /RETURN W/O INIT /A022 RZIO06, RXIINI /INIT DSK /M033 RZIO00, RXISDN /WAIT DONE /M033 JMP .-1 JMS SELCMD /SELECT PAIR /A020 JMP I RZINCR /RET RZSEEK, 0 JMS RZCHKH /CHECK HALT /A026 TAD RZ50SW /IS RX50? /A022 SNA CLA /A022 JMP RZSEK1 /NO SET RETURN +1 /A022 TAD RZECTR /ERROR COUNT /A023 TAD KON10 /1ST TIME /A023 SNA /A023 JMP RZSEK1 /YES INITIALIZE /A023 TAD MIN4 /A023 SMA CLA /G.T. THAN 4 TIMES /A023 TAD KON79 /YES SEEK TRACK 79 /A023 DCA RZSEKT /IF NO SEEK TRACK 0 /A023 TAD RZCMND /LOAD COMMAND /A022 AND KON20 /MASK DRIVE BIT /A022 TAD KON406 /DENSITY AND READ /A022 RXILCD /LOAD COMMAND /M033 CLA IAC /=1 (SECTOR) /A022 RXISTR /TRANSFER READY? /M033 JMP .-1 /NO /A022 RXIXDR /YES --TRANSFER /M033 CLA /CLEAR SECTOR /A023 TAD RZSEKT /GET TRACK NO /C023 RXISTR /TRANSFER READY? /M033 JMP .-1 /NO /A022 RXIXDR /YES --TRANSFER /M033 RXISDN /DONE? /M033 JMP .-1 /NO /A022 RXISER /ERR? /M033 JMP RZSEK2 /NO /A022 RZSEK1, ISZ RZSEEK /YES INIT ANYWAY /A022 RZSEK2, CLA /A022 JMP I RZSEEK /A022 / / / SET CODE FOR RX01 OR RX02(50) TYPE DEVICE /A024 / 0=RX01 10=RX02 2=RX50 /A024 RZSETX, 0 /A024 MQL /SAVE CODE /A024 TAD RZDRIV /GET DRIVE /A024 AND KON07 /MASK NUMBER /A024 TAD TBLPTR /GET POINTER TO TABLE +OFFSET /A024 DCA USEPTR /USER POINTER /A024 MQA /GET SWITCH /A024 DCA I USEPTR /STORE IT /A024 JMP I RZSETX /A024 / / / THIS ROUTINE IS CALLED DURING THE ERROR RETRY PROCESS /A026 / IS CHECKS TO SEE IF THE DEVICE IS AN RX50 IN WRITE /A026 / PROTECT MODE. /A026 / CKWPRO, 0 /A026 TAD RZ50SW /IS A 50 /A026 SNA CLA /A026 JMP CHKRET /NO RETURN /A026 TAD RZCMND /GET FUNCTION CODE READ /A026 AND KON12 /IS=WRITE /A026 SZA CLA /A026 JMP CHKRET /NO EXIT /A026 TAD RZSTAT /GET STATUS /A026 AND KON10 /WRITE BIT /A026 SNA CLA /IS WRITE PROTECT /A026 CHKRET, ISZ CKWPRO /NO /A026 JMP I CKWPRO /RET /A026 / / / USEPTR, 0 /USED TO SAVE POINTER TO CURRENT DEVICE /A024 TBLPTR, DEVTBL /POINTER TO DEVICE TABLE /A024 / TABLE USED TO SAVE DEVICE TYPE 0=RX01 10=RX02/RX50 /A024 / ALLOWS MIX OF RX01,RX02 AND RX50'S /A024 DEVTBL, 0;0;0;0;0;0;0;0 /A024 IFDEF WINNIE < 0;0 /A032 > /END IFDEF WINNIE /A032 KON406, 406 /A022 KON79, 117 /79. /C023 KON12, 12 /A026 KON10, 10 /A023 KON07, 7 /DRIVE NUMBER MASK /A024 MIN4, -4 /A023 RZSEKT, 0 /TRACK NO. /A023 / m050 the following is moved here to get it out of the startup / m050 feild which is now overwritten by the 8 bit fallback routine IFDEF WINNIE < /RDGTST ROUTINE GETS STATUS OF LAST BLOCK READ /A042 / AND RETURNS IN WORD 1 BIT 5--1IF PHYSICAL CYLNDER 0 /A042 / BIT 6--IF WRITE FAULT LAST DSK OP /A042 / BIT 7--IF SELECTED UNIT DEFINED /A052 / BIT 8--UNDEFINED /A042 / BIT 9--IF SEEK COMPLETE /A042 / BIT10--IF UNIT 1 SELECTED /A042 / BIT11--IF UNIT 0 SELECTED /A042 / / WORD 2 =CYLINDER NUMBER /A042 / WORD 4 =SECTOR NUMBER /A042 / WORD 5 =CONTROLLER VERSION NUMBER /A042 / RDGTST, /A042 DCA RDEFSW /SET EMPTY SW /A042 TAD (WINSTA /GET STATUS FUNCTION CODE /A042 JMP RDRZXT /DO IT /A042 > /END IFDEF WINNIE /A042 PAGE EJECT / /FOLLOWING CODE MOVED HERE TO PUT AT MORE STABLE LOCATION FOR DATE/TIME /AS THE LAST LOCATION IS REFERENCED AS LOCATION THAT UNIT NUMBER IS /PASSED TO VERIFY ON ERROR AND FORCED RESTART. / /*******MOVED VER 046 ***** / / / / /GETTIM SAVTIM USED ONLY DURING STARTUP / Reference in WPF1 to SVFVFY=6600 SVFVFY=6600 /REFERENCED IN WPF1 /A046 / /CMNDBF USED FOR WINNIE / GETTIM, /LOCATION WHERE TIME IS STORED SAVTIM, / " " " " " CMNDBF=. /COMMAND BUFFER /A032 WRD1=CMNDBF /1ST WORD /A032 WRD2=WRD1+1 /2ND WORD /A032 WRD3=WRD2+1 /3RD WORD /A032 0;0;0;0;0;0;0;0;0;0;0;0 TIMLNT, SAVTIM+1+2-. /LENGTH OF TIME FIELD /A032/C046 /C047 /......LAST LOCATION NOW USED TO PASS PARAMETER /......FROM ACP TO VERIFY DURING WARM START /D046 7401 /THIS LOC=7401 NECESSARY FOR BLOCK 6 ON DOC DISKETTE /D046 0 /--------------------------------------------------------------------- / /************************ SET BUFFER DATA FIELD ********************** / /--------------------------------------------------------------------- RZSETB, 0 RZSETD, JMS RZSETA /SET ALL CDFS FOR BUFFER REFERENCES RZSETS, RZ1SET RZ2SET RZ3SET RZ4SET RZ5SET 0 /END TABLE /A032 JMP I RZSETB /RET /A032 / RZSETA, 0 RZSETL, TAD I RZSETA /GET MEMBER IN LIST SNA /END TABLE? /A032 JMP RZSETC /A032 DCA RZSETT /TEMP STORE TAD RZBCDF /BUFFER CDF POINTER DCA I RZSETT /STORE ISZ RZSETA /A032 JMP RZSETL /NO RZSETC, ISZ RZSETA /A032 JMP I RZSETA /A032 RZSETT, 0 /TEMP STOREAGE SIZE=.-RZSETB / /-------------------------------------------------------------------- / / THIS ROUTINE SETS THE VERIFY SW /A015 / AC=0 LOGIO UPON ENTRY ELSE PHYSIO /A015 / FOR LOGIO JMP IS STORED IN RZVJMP /A015 / FOR READ PHYSIO NOP IS STORED IN RZVJMP /A015 / FOR OTHER PHYSIO JMP IS STORED IN RZVJMP /A015 / /_______________________________________________________________/A015 DVSET, 0 /A015 /D032 MQL /SAVE SW /A015 CLA CLL CML RTR /=2000 /A015 AND RZXDIR /MASK VERIFY BIT /A015 DCA RZXVFY /SET VERIFY SWITCH /A015 CLA CLL CML RTR /2000 /A015 CMA /SET TO CLEAR SWITCH IN RZXDIR /A015 AND RZXDIR /A015 DCA RZXDIR /A015 TAD RZXVFY /A015 SNA CLA /VERIFY MODE? /A015 JMP DVSNOP /SET NOP /A015 TAD RZXDIR /GET CMND /A015 AND (16 /MASK FNCTION BITS /A015 CIA /A015 TAD (2 /READ FUNCTION CODE /A015 SZA CLA /IS READ? /A015 JMP DVSNOP /NO /A015 TAD (NOP /A015 SKP /STORE /A015 DVSNOP, TAD RZVSKP /SKIP VERIFY /A015 DCA RZVJMP /SET IT /A015 JMP I DVSET /A015 /********************************************************************* / /--------------------ERROR ROUTINES------------------------------------- /----------------THESE ROUTINES HANDLE ALL I/O ERRORS------------------- /---------------- WHEN CALLED THE AC CONTAINS THE ERROR----------------- /-----------------STATUS REGISTER, WHILE THE MQ CONTAINS THE------------ /-----------------GENERAL STATUS REGISTER. ERROR ROUTINES--------------- /----------------- 1 THRU 6 SET THE H/O BIT(BIT0) TO 1------------------ /----------------- AND SETS BITS 1-3 TO 001--110 FOR ------------------- /----------------- ERRORS 1-6 RESPECTIVELY.----------------------------- / /*********************************************************************** RZERR6, ISZ RZECTR /INCR ERROR STATUS JMP RZPHIO /RETRY 10 TIMES PHYSICAL I/O ISZ RZSAV1 /BITS 9-11 =6-PHYS IO ERROR RZERR5, ISZ RZSAV1 /BITS 9-11 =5-NOT READY RZERR4, ISZ RZSAV1 /BITS 9-11 =4-ILLEGAL TR RZERR3, ISZ RZSAV1 /BITS 9-11 =3-ILLEGAL DONE RZERR2, ISZ RZSAV1 /BITS 9-11 =2-ERROR RET RZERR1, ISZ RZSAV1 /BITS 9-11 =1ERR LD CMND CLA RZERR0, /M029 TAD RZSAV1 BSW /SET BITS1-3 = 000 THRU 110 CLL RTL TAD RZSTAT /GET STATUS IN L/O BITS 5-11 /C010 TAD RZ4000 /ERROR BIT DCA RZSAV2 /SAVE TEMP DCA RZSAV1 /CLEAR COUNT FOR NEXT TIME TAD RZSAV2 /GET ERR CODE JMP RZEXIT /EXIT RETURN RZ4000, 4000 RZSAV1, 0 RZSAV2, 0 EJECT /***************************************************** / CHECK FOR GOLD HALT DURING ERROR RETRY/A026 /M032 / IF SET RETURN RZERR0 WITH NO MORE RETRIES/A026 / /************************************************************** /A026 RZCHKH, 0 /A026 /M032 CDFSYS /A026 /M032 TAD I HLTFLG /GET HALT FLAG /A026 /M032 CDFSYS /A026 /M032 /M033 SNA CLA /IS SET? /A026 /M032 JMP I RZCHKH /NO...NORMAL RETURN /A026 /M032 /YES ERROR RETURN WITH 4000 BITS IN ACC AND REG STATUS IN L/O 8 BITS/A026 JMP RZERR0 /A026 /M032 / / / RZDELY, ISZ RZDLCT /DONE? /A022/M032 JMP RZIO10 /NO CHECK DONE FLAG /A022/M032 ISZ RZDLC2 /OUTSIDE LOOP TOTAL APPROX 5 SEC/A023/M032 JMP RZIO10 /NO CHECK DONE FLAG /A023/M032 JMP RZERR5 /TIME OUT ERR. DEVICE NO PRESENT/A022/M032 /*************************************************************** / /------------ SET UP POINTERS AND FIELD CDF'S / BOTH FIELDS= FIELD 0 / /**************************************************************** SETMOV, 0 /SET UP MOVE PARAMS TAD I SETMOV ISZ SETMOV DCA INBUF /FROM FIELD PTR TAD I SETMOV ISZ SETMOV DCA OUTBUF /TO FIELD PTR TAD TIMLNT /LENGTH OF TIME FIELD /A032 DCA MOVCNT /COUNTER /D032MOVDAT, 0 /MOVE DATA FROM ONE FIELD TO ANOTHER INCDF, /M032 TAD I INBUF /M032 DCA I OUTBUF /M032 ISZ INBUF /M032 ISZ OUTBUF /SET TO NEXT WORD /M032 ISZ MOVCNT /DONE? /M032 JMP INCDF /NO /M032 /D032 JMP I MOVDAT /YES /D032 JMS MOVDAT /MOVE DATA JMP I SETMOV / / INBUF, 0 /INPUT BUFFER ADDR OUTBUF, 0 /OUTPUT " " MOVCNT, 0 /WORD COUNT /SPACE WARS MOVE VERSION 034 / / /--------------------------------------------------------------------/A015/M034 / / RZVERF USED ONLY IF VERIFY BIT ADVERSILY SET /A015 /M034 / DURING LOGIO READ /A015 /M034 / MAY BE ABLE TO DELETE THIS ROUTINE /_____________________________________________________________________/A015/M034 RZVERF, 0 /NECESSARY BECAUSE OF WAY CMNDS EXEC.. DCA RZXVFY /CLEAR IF SET /A015 /M034 JMP I RZERR2 /ERROR ILLEGAL CODE EXIT DRIVER./M032/C034 / PAGE EJECT DMESS, 7401 /THIS LOC=7401 NECESSARY FOR BLOCK 6 ON DOC DISKETTE CLA;TAD I DMESSP /OUTPUT MESSAGE BSW /A034 JMS PRINTM TAD I DMESSP /SAME WORD /A034 JMS PRINTM /PRINT L/O BYTE /A034 ISZ DMESSP /A034 JMP DMESS /NEXT /A034 / PRINTM, 0 /A034 AND K77 /A034 SNA /END OF TABLE? /A034 JMP . /YES /A034 BSW /A034 SMA /SPECIAL CHAR /A034 IAC /A034 BSW /A034 TAD M77 /A034 SNA /A034 TAD K44 /A034 TAD K77 /A034 TLS /A034 PRINTN, TSF /A034 JMP PRINTN /A034 CLA /A034 JMP I PRINTM /A034 K77, 77 /A034 M77, -77 /A034 K44, 33-77 /A034 /************************************************************ / THE FOLLOWING IS THE RESULT OF THE OLD / SPACE WARS GAME /************************************************************** / / IFDEF WINNIE < / / /ENTRIES IN DRIVE TABLE = / 0 = SINGLE DENSITY OR NO ENTRY /A034 / 400 = DOUBLE DENSITY RX02 /A034 / 1400 = -------------- RX50 /A034 / 4000 = WINNIE DEVICE /A034 / 4001 = MOUNTED WINNIE /A034 / CHKWIN, CLA IAC / /A032 RDNOOP /CHECK WINNIE ON LINE /A032 SZA CLA /0=WINNIE ON LINE /A032 JMP NOWINI /NO /A032 YSWINI, TAD DENDV0 /ADDRESS OF DEV 0 IN ACP DEV TABLE /A034 TAD RZDRIV /OFFSET FOR DRIVE DCA DVPACK /TEMP LOCATION /A034 CDFACP /ACP FIELD /A034 TAD I DVPACK /GET CODE /A034 CDFDSK /DRIVER FIELD /A034 RAL /WINNIE BIT TO LINK /A034 SNL /IS WINNIE DEVICE? /A034 JMP NOWNCL /NOT A WINNIE /A034 SNA CLA /IS WINNIE MOUNTED /A034 JMP RZERR2 /NO--SET DENSITY ERROR /A034 CLA CLL IAC RTL /4=WINNIE REFERENCE /A032 JMP RZSETF /SET DENSITY /A032 NOWNCL, CLA /A034 JMP NOWINI /NOT A WINNIE /A034 > /END IFDEF WINNIE /A032 / /------------------------------------------------------------/A015 / /A015 / VERIFY ROUTINES ...CALLED WITH BIT 1 SET DURING /A015 / LOGICAL WRITE AND PHYSICAL READ /A015 / / PHYSICAL READ WITH VERIFY=COMPARE BUFFER TO SILO/A015 / (SHOULD ONLY BE USED AFTER PHYSICAL WRITE /A015 / LOGICAL WRITE WITH VERIFY=READ AFTER WRITE /A015 / WITHOUT SILO EMPTY /A015 / LOGICAL READ 12 BIT MODE =READ COMPARES BUFFER /A024 / TO SILO /A024 / /---------------------------------------------------------------/A015 / DVPACK, 0 /VERIFY LOGG WRITE 8 BIT MODE /A015 JMS DXPACK /WRITE /A015 CLA CLL CMA RTL /-3 /A015 JMS DVVFY /READ NO EMPTY SILO /A015 JMP I DVPACK /RETURN /A015 / DVVFY, 0 /A015 DCA DVBCTR /SET SECTOR COUNT /A015 TAD RZCSEC /SET LOG SECTOR /A015 DCA RZLSEC /A015 JMS DVSETR /SET READ LOGICAL SECTOR AND COMMAND/A015 JMS RZDIVD /SET SECTOR FOR I/O /A015 DVVFY2, JMS RZPHYS /DO IT /A015 ISZ DVBCTR /DONE? /A015 JMP DVVFY2 /NO /A015 JMS DVSETW /RESET CMND FOR WRITE /A015 JMP I DVVFY /A015 DVBCTR, 0 /SAVE TEMP SECTORR COUNT /A015 / DVWRIT, 0 /WRITE 12 BIT WITH VERIFY/A015 JMS DYWRIT /WRITE IT /A015 TAD RZ50SW /RX50 SET? /A018 SNA CLA /A018 TAD M1 /-1 /A018 TAD M1 /-1....-1 RX50 -2 RX01/2/A018 JMS DVVFY /A015 JMP I DVWRIT /A015 M1, -1 /CONST /A018 /******************************************************************/M032/M036 /----------------- CHECK ZERO BLK COUNT FOR LOGIO-------------------/M032/M036 /----------------- SET -1 IF TRUE-----------------------------/M032/M036 /*****************************************************************/M032/M036 BLKSET, 0 /A036 TAD RZBCTR /LOG IO = BLOCK COUNT/M032/M036 SNA /=0 /M032/M036 CMA /YES SET NEG /M032/M036 DCA RZBCNT /RESET /M032/M036/C045 /******SPACE WARS MOVE*****TO LOAD LO BLOCK NUM FOR WINNIE /A037 IFDEF WINNIE < TAD RZBLKN /GET BLOCK NUMBER /M037 DCA LOBLK /SAVE L/O /M037 > /END IFDEF WINNIE /A037 JMP I BLKSET /A036 RZBCNT, 0 /#BLOCKS TO BE PROCESSED /A045 /--------------------------------------------------------------------- / / END SPACE WARS /************************************************************ / / SET4 USED TO SET ALL REFERENCES TO 0 AS DRIVE 4 / IFDEF LOAD4 < SET4, 0 /A027 TAD RZDRIV /GET DRIVE NO SNA /IS=0 /A027 CLA CLL IAC RTL /YES SET TO 4 /A027 DCA RZDRIV /A027 CLA CLL IAC RTL /SET 4 /A027 AND RZDRIV /MASK PAIR /A027 JMP I SET4 /RETURN /A027 DMESSP, .+1 /A039 TEXT /?[2J?[5H SYS DSK IN DRV 0 AND RSTRT./ /A039 > /END IFDEF LOAD4 /A027 IFNDEF LOAD4 < DMESSP, .+1 /D034 200 /D034 ESC; "[; "H /D034 ESC; "[; "J /D034 LF;LF;LF;LF;LF /DOWN FIVE LINES IFDEF ENGLSH < TEXT /![[2J![[5HPUT SYSTEM DISKETTE IN DRIVE 0 AND RESTART/ /M051C045 > IFDEF SPANISH < TEXT /![[2J![[5HCOLOQUE EL SISTEMA DSK EN UNIDAD 0 Y ARRAN./ /M051C045 > IFDEF ITALIAN < TEXT /![[2J![[5H INSERIRE IL DISCO SISTEMA E RIPARTIRE./> IFDEF FRENCH < TEXT /?[2J?5H PLACE SYSTEM DISKETTE IN DRIVE 0 AND RESTART./ /C037 > IFDEF GERMAN < TEXT /?[2J?5H MIT SYSTEM DISKETTE IM LINKEN LAUFWERK STARTEN./ /C037 > IFDEF DUTCH < TEXT /?[2J?5H ZET SYSTEEMDISKETTE IN 0 EN OPNIEUW./ /C037 > /D037 0 / 0 SIGNIFIES END OF MESSAGE TO OUTPUT > /END IFNDEF LOAD4 /A039 PAGE EJECT IFNDEF WINNIE < ZBLOCK 400 > / LEAVE 2 PGS OF FILLER FOR NON-WINNIE /A041 / IFDEF WINNIE < / /COMMAND CODES WINMNT=CLA /0=MOUNT VOLUME WINSTB=CLA CLL IAC /1=SET BLOCK WINFIL=CLA CLL IAC RAL /2=FILL BUFFER WINWRT=CLA CLL CML IAC RAL /3=WRITE WINRD=CLA CLL IAC RTL /4=READ WINDIS=5 /5=DISMOUNT VOLUME WINUPD=CLA CLL CML IAC RTL /6=UPDATE VOLUME WINEMT=25 /EMPTY BUFFER WINSTA=26 /26=READ STATUS WINERS=27 /27=READ ERROR STATUS WINVOL=30 /30=GET VOLUME DATA WINDIR=33 /33=GET VOLUME DIRECTORY / / TRANSFER COMMAND + 1 FOR DONE FOR COUNTS / SETCNT=4 /SET BLOCK COUNT DISCNT=2 /DISMOUNT COUNT MNTCNT=12 /MOUNT COUNT /************************************************************ RDNOSW, 0 RDSC /SPACE SAVER TO HERE /A032 RNOSW, RDSR /TRNSFER READY JMP RNOXD /NO CHECK DONE JMP TRNERR /TRANSFER READY ILLEGAL RNOXD, RDSD /DONE? JMP RDOSWQ /A032 / RDSE /ERROR? JMP I RDNOSW /A026 JMP TRNERR /PROCESS ERROR RDOSWQ, CLA /OVERLAYED WITH JSWAP JMP RNOSW /A032 /********************************************************* / / /COMES HERE IF A WINNIE / ISAWIN, CLL RAL /RESET WITHOUT WINNIE BIT /A032 DCA RZXDIR /A032 JMS BLKSET /SET BLK CNT /A036 JMS DVSET /SET VERIFY BIT /A032 TAD RZBPTR DCA RDBUFO /SET BUFFER POINTER / CLA IAC BSW /100=MODE SW /A032 AND RZXDIR /A032 DCA RDMODE /SET MODE SW /A032 RDONXT, /A036 JMS RZSETA /M037 RD1SET /M037 RD2SET /M037 RD3SET RD4SET /M037 /D037 RD5SET 0 /TERMINATOR /M037 TAD RZXDIR /A032 JMS RZXJMP /JMP SUB /A032 RDWRIT /-2=WRITE A BLK /A032 RDREAD /-4=READ /A032 RDMNT /-6=MOUNT VOLUME RDSMNT /-10DISMOUNT VOLUME RDVOL /-12=GET VOLUME DATA RDDIR /-14=GET VOLUME DIRECTORY RDUPD /-16=UPDATE VOLUME /A037 RDGTST /-20=GET STATUS /A042 / / /WRITE A RECORD / RDWRIT, JMS WINSET /SET UP BLOCK AND STRT PARAMS ADDR CLA IAC DCA RDEFSW /SET FILL SW WINFIL /SET UP FILL BUF CMND JMS RDCMPT /FILL BUFFER WINWRT /SET UP WRITE JMS RDNOSW /CHECK DONE AND SWAP IF NOT /A032 TAD RZXVFY /VERIFY MODE? SNA CLA /SKIP TO RDREAD JMP RDRD1 /XIT /C036 / / /READ A RECORD / TAD RZBPTR DCA RDBUFO /SET BUFFER POINTER RDREAD, /M036 JMS WINSET /SET UP BLOCK WINRD /SET UP READ CMND JMS RDNOSW /CHECK DONE AND SWAP IF NOT /A032 DCA RDEFSW /CLEAR EMPTY SW TAD (WINEMT /SET UP EMPTY BUFFER JMS RDCMPT /FILL OR EMPTY SILO /A032 RDRD1, ISZ LOBLK /NEXT BLOCK /A036 ISZ RZBCNT /DONE? /A036 /C045 JMP RDONXT /NO DO NEXT /A036 JMP RZEXIT /YES EXIT /A036 / /************************************************************ / /READ DENSITY FOR WINNIE RETURNS -1 FOR DEVICES / 0-15 // /RDDEN, / CLA CLL IAC RTL /4RETURN 4 FOR DEV 0-15 WHEN WINNIE ON LINE / JMP RZEXIT /EXIT / / /RD LOAD FUNCTION / /RDLDCMND, 0 / TAD RDCMND /GET COMMAND / RDSC /SEND COMMAND / JMS RDXFER /CHECK DONE,TR RDY, ERROR? / JMP I RDLDCMND /TR READY RET / ISZ RDLDCMND /DONE RET / ISZ RDLDCMND /ERROR RET / JMP I RDLDCMND /RET / / / /RDXFER USED TO CHECK AND RETURN / CALL+1 = TR READY / CALL+2 = DONE / CALL+3 = ERROR / RDXFER, 0 RDXFRA, RDSR /SKIP TR READY SKP JMP I RDXFER /TR READY RDSD /SKIP IF DONE FLAG SET JMP RDXFRA /CHECK TR READY ISZ RDXFER /SET RET RDSE /SKIP ERROR JMP I RDXFER /DONE RET ISZ RDXFER /SET ERROR RET JMP I RDXFER / / /SET COMMAND / /WINCMD, 0 / TAD I WINCMD /GET CODE / ISZ WINCMD /SET RETURN / DCA RDCMND / TAD RDCMND / RDSC /SEND COMMAND / JMP I WINCMD / /MOUNT COMMAND / MOUNT VOLUME COMMAND / MOUNTS THE VOLUME REFERENCED IN RZBPTR IN DATA FIELD / REFERENCED BY RXBCDF TO DRIVE IN RZDRIV / RDMNT, JMS MOVPAR /MOVE PARAMETERS TO DRIVE FIELD TAD (-MNTCNT /WORD COUNT JMS SVSPCE /SET UP /A032 TAD WRD1 TAD (300 /ALLOW READ WRITE BITS (5&6) DCA WRD1 /INTO TABLE WINMNT /MOUNT COMMAND JMP RDTRLP /TRANSFER LOOP THEN EXIT / /DISMOUNT COMMAND / DISMOUNT VOLUME ASSOC WITH DRIVE # IN RXDRIV / RDSMNT, CLA CLL CMA RAL /-2 DISMNT COUNT JMS SVSPCE /SET UP /A032 TAD (WINDIS /DISMOUNT CODE RDTRLP, JMS TRLOOP /TRANSFER JMP RZEXIT /XIT / SVSPCE, 0 DCA RDCNT TAD (CMNDBF DCA WINPTR /SET IT TAD WINFLD DCA RD1SET /SET UP FIELD PTR TAD RZDRIV /GET DRIVE # AND (37 /L/O 4 BITS /C035 DCA WRD1 JMP I SVSPCE / /READ VOLUME DATA / RDVOL, JMS WINSET /SET BLOCK DEFAULTS TO BLOCK IN RZBLKN DCA RDEFSW /SET EMPTY SW TAD (WINVOL /COMMAND JMP RDRZXT /EMPTY AND EXIT PAGE EJECT / /UPDATE VOLUME DATA / RDUPD, /UPDATE VOLUME DATA /A037 CLA CMA /-1 /A037 DCA RDEFSW /SET SW /A037 WINUPD /6=CMND CODE /A037 JMP RDRZXT /DO IT /A037 / / /READ DISK DIRECTORIES / RDDIR, DCA RDEFSW /SET EMPTY SW TAD (WINDIR /READ DIR COMMAND RDRZXT, JMS RDCMPT /EMPTY OR FILL JMP RZEXIT / /MOVE PARAMETERS FROM DATA FIELD IN RZBCDF TO WIN FIELD / MOVPAR, 0 TAD (-10 /COUNT DCA RDCNT TAD RZBPTR DCA MVPTR2 /BUFFER POINTER TAD (CMNDBF+1 DCA MVPTR3 RD4SET, CDFSYS /M033 TAD I MVPTR2 CDFSYS /M033 DCA I MVPTR3 ISZ MVPTR2 ISZ MVPTR3 ISZ RDCNT JMP RD4SET /NOT DONE JMP I MOVPAR /DONE MVPTR2, 0 MVPTR3, 0 / / / / /SET BLOCK FUNCTION / WINSET, 0 TAD (-4 JMS SVSPCE /SET UP /A032 TAD LOBLK /LO ORDER DCA WRD2 TAD HOBLK /HI ORDER BLOCK NO DCA WRD3 WINSTB /SET BLOCK CMND JMS TRLOOP /TRANSFER JMP I WINSET / WINFLD, CDFSYS /M033 / /EMPTY BUFFER COMMAND SET UP / / / /TRLOOP WILL SEND REMAINING TRANSFERS BASED ON RDCNT TRLOOP, 0 RDSC /SEND IT TRNCHK, JMS RDXFER /CHECK DONE JMP TRANOK /TR RDY ISZ RDCNT /IS DONE--WAS LAST TR? JMP TRNERR /TRANSFER ERROR JMP I TRLOOP /OK TRANOK, RD1SET, CDFSYS /M033 TAD I WINPTR /GET WORD TO BE TRANSFERED CDFSYS /M033 RDTD /TRANSFER IT ISZ WINPTR ISZ RDCNT JMP TRNCHK /MORE TO TRANS JMP TRNERR /PREMATURE END / / /EMPTY BUFFER ROUTINE / AFTER READ / /******DON'T FORGET CDF'S********* / RDCMPT, 0 TAD RDMODE /8 OR 12 BIT MODE RDSC /SEND IT RDCNXA, JMS RDXFER JMP RDCNXT /NEXT CHAR JMP I RDCMPT /DONE JMP RDERROR RDCNXT, TAD RDEFSW /EMPTY OR FILL BUFFER SW SPA JMP RDCUPT /UPDATE SPECIAL CASE SNA CLA JMP RDDNXT /EMPTY JMS RDADDC /ADD CHAR FROM RDBUF0 /C037 RDTD /SEND DATA JMP RDCCNT /CONTINUE RDDNXT, TAD RZXVFY /VERIFY SW SNA CLA /VERIFY MODE? JMP RDENXT /NO EMPTY SILO RDTD /READ CHAR CIA /TWO'S COMP. JMS RDADDC /ADD CHAR FROM RDBUF0 /C037 SNA CLA /COMPARE = JMP RDCCNT /YES JMP TRNERR /NO****MUST SET TO CLEAR ALL TR FLAGS***** RDENXT, RDTD /RECIEVE DATA RD2SET, CDFSYS /M033 DCA I RDBUFO /GET CHAR CDFSYS RDCCNT, ISZ RDBUFO NOP /FOR WRAP AROUND BUFFER JMP RDCNXA /FOR FIELD LOOP RDCUPT, CLA IAC DCA RDEFSW /SWITCH ONLY TO TRANSFER DEVICE NUM TAD RZDRIV AND (17 RDTD /TRANSFER DEV NUM JMP RDCNXA /CONTINUE / / / RDADDC, 0 /ADD CHAR FROM RDBUF0 /A037 RD3SET, CDFSYS /M033 TAD I RDBUFO /GET CHAR CDFSYS /M033 JMP I RDADDC /RET /A037 / / RDEFSW, 0 /EMPTY/FILL SW / /FILL BUFFER ROUTINE / BEFORE WRITE / /******DON'T FORGET CDF'S********* / /RDFMPT, 0 / TAD RZBPTR /REALLY NEED THIS???? / DCA RDBUFO /RDFNXA, / JMS RDXFER / JMP RDFNXT /NEXT CHAR / JMP I RDFMPT / JMP RDERROR /RDFNXT, /RD3SET, CDFSYS /M033 / TAD I RDBUFO /GET CHAR / CDFSYS /M033 / RDTD /SEND DATA / ISZ RDBUFO / JMP RDFNXA / /RDDSTY, / JMS WINCMD / WINSTA /GET STATUS / RDTD /GET IT / JMP RZEXIT /EXIT / / / /RDERROR/WRTERROR / /RDERROR, /WRTERROR, / JMS WINCMD / WINSTA /GET ERROR STATUS / RDTD /GET IT / TAD (4000 /ADD ERROR BIT / JMP RZEXIT / /TRANSFER ERROR= DONE OR TR FLAG OUT OF SEQ /*****MUST GET ALL 4 WORDS****CHANGE WINSTA / RDERROR, WRTERROR, TRNERR, CLA CLL CMA RAL /-2 WORD COUNT+1 DCA RDCNT TAD (CMNDBF /PNTR DCA WINPTR TAD WINFLD /FIELD DCA RD1SET TAD (WINERS /GET STATUS JMS TRLOOP /GET STATUS TAD WRD1 /GET IT TAD (6000 /2 H/O BITS FOR RD ERROR SYTATUS NOTATION JMP RZEXIT / / RETRY RESET /CAN BE DELETED FOR ROOM.. NOT USED CURRENTLY.. TO BE USED IF WANT INCREASE / IN RETRY COUNT. NOT REALLY NECESSARY / / /WINRTR, 0 / CLA CLL CMA RAL /-2 / DCA RDCNT / TAD (13 / DCA RDCMND /SET COMMAND / TAD (10 / DCA WRD1 / JMP I WINRTR / HOBLK, 0 /STOREAGE OF THE H/O BLK FOR I/O LOBLK, 0 /STOREAGE OF THE L/O BLK FOR I/O WINPTR, 0 /TEMP POINTER AREA RDMODE, 0 /MODE BIT FOR WINNIE I/O RDBUFO, 0 /POINTER TO BUFFER AREA FOR WINNIE RDCNT, 0 /TRANSFER COUNT / moved here in edit /a050 DENDV0, 5601 /ADDRESS OF DENSITY SW FOR DRIVE0 (ACPLDP+1) /M033 /RDCMND, 0 /COMMAND PAGE > /END IFDEF WINNIE /A032 EJECT /***********************************************************************/a050 / WARNING ---- /a050 / V25STB defines the address of the table STBLK in WPF1 /a050 / Do not change this code without checking that this still holds/a050 / If you do change it then reassemble WPRINT as it modifies/a050 / the table. Messy isn't IT!!!! /a050 /***********************************************************************/a050 /****************************************************************** / / / THIS CODE IS USED TO LOAD FIELDS 0,1,2 / THEN MOVES PAGE 0 FIELD 2 TO PAGE 0 / THIS FIELD / IT CALLED BY THE BOOT ROUTINE IN BLOCK 0 / / IT CALLS THE RX02 HANDLER TO EXECUTE TO APPROPRIATE / IO INSTRUCTIONS THE JMPS TO 7600 IN FIELD 0 / WHICH IS THE START ADDRESS FOR THE SYSTEM / /********************************************************************* / /***************************************************************** / /------------- CHECK SEE IF WE SAVE CURRENT TIME------------------- / /******************************************************************* STLOAD, /D034 7401 /NEEDED AT BEGINNING OF BLOCK 6 /A015 DCA BTLOC /SAVE SYSTEM0 TYPE /A032 TAD STPTR /GET LIST PNTR /M032 DCA X0 /INDEX PTR /M032 TAD RDRPT /INIT JMP FOR RESTART /C028 /C032 DCA RDOSWP /SET IT /C028 /M032 IFDEF WINNIE < TAD RDRPT /INIT JMP FOR RESTART FOR WINNIE /A032 DCA RDOSWQ /SET IT /A032 > /END IFDEF WINNIE /A034 TAD TIMESW /FIRST TIME SNA CLA JMP FIRSTM /YES JMS SETMOV /SETUP MOVE AND SAVE TIME CLOCK+2 /START ADDRESS OF CLOCK /C047 SAVTIM+2 /LOCATION TO BE SAVED IN /C047 JMP STSLOP /LOAD USING DRV 0 AS PREV. DEFINED/c050 /A032 FIRSTM, TAD BTLOC /CODE 0 =RX01/RX02/RX50 4001=WININIE /A034 /....PASSED TO LOAD FROM BOOT /A034 CDFFIO /ACP FIELD /A034 DCA I DENDVA0 /NIT TABLEADDRESS OF DRIVE 0 CODE IN TABLE/A034 CDFDSK /MY FIELD /A034 TAD BTLOC /A034 SMA CLA /DRIVE 0=WINNIE? /A034 JMP FIRSTN /NO /A034 IAC /SET WINNIE BIT /A034 JMP SETCMD /SET READ /A034 FIRSTN, TAD M7 /M7=ONES COMP OF 6=GET DEN PHYSIO DCA STCMND JMS RDWTIO /DO I/O GET DENS. 0=SD 1=DD DCA SVDEN /SAVE DENSITY CLA CLL IAC RAL /2 AND SVDEN SNA CLA /=RX50 JMP PASS50 /NO TAD K1400 /YES JMP SETCMD PASS50, TAD SVDEN /GET DEN SZA CLA /DD? TAD K400 /DD SET CODE TO -400 DD/READ 12 BIT LOGIO SETCMD, TAD K2 /SD SET CODE TO READ 8 BIT LOG /M018 DCA STCMND /SAVE CMND /M018 STSLOP, /a050 JMS RDWTIO / First time through load V25 startup JMS I (V25ST) / and do it STLOOP, TAD I X0 /GET START BLOCK NO SNA JMP STDONE /DONE DCA STBLK /SAVE TAD I X0 /CDF BUFFER FLD DCA STFLD TAD I X0 /BUFFER ADDRESS DCA STLOC TAD I X0 /NEG BLOCK COUNT DCA STCNT JMS RDWTIO /READ CLA TAD INCSAV /GET PTR /C032 DCA X0 /SET JMP STLOOP /NEXT BLOCK RDWTIO, 0 /CALLS HNDLER TO LOAD BFFRS RDRPT, CLA TAD X0 DCA INCSAV /SAVE FOR LOAD /C032 TAD RETFLD /SET RETURN FLD IN AC JMS RX2SYS /CALL DRIVER 0 /DRIVE # /***********************************************************************/a050 / WARNING ---- /a050 / V25STB defines the address of the table STBLK in WPF1 /a050 / Do not change this code without checking that this still holds/a050 / If you do change it then reassemble WPRINT as it modifies/a050 / the table. Messy isn't IT!!!! /a050 /***********************************************************************/a050 V25STB, /a050 STBLK, DLCMPS /START BLOCK# STFLD, CDFSYS /CDF BUFFER FLD STLOC, V25ST /BUFFER START ADDRESS STCNT, -DSCMPS /NEG BLK CNT 0 /TRACK NO PHYSIO STCMND, 2 /RXREAD "READ" FUNCTION CODE SPA /ERRORS? JMP RDRPT /YES REREAD BLOCK JMP I RDWTIO /RETURN STPTR, STLIST-1 /PTR TO LIST-1 /________________________________________________________________ / /**************** LOAD SYSTEM FIELD 0, 0-4777 **************** / /________________________________________________________________ STLIST, /START OF PARAM LIST SET IN BLKS OF 4 /ENDING WHEN STRT BLK# = 0 AND IN /THE FOLLOWING ORDER DLFD0A /START BLOCK ON DISKETTE CDFSYS /"CDF" OF BUFFER FLD /M033 0 /BUFFER ADDRESS -DSFD0A /NEG BLK COUNT /D040 IFNDEF WINNIE < /D040/________________________________________________________________ /D040/ /D040/**************** LOAD SYSTEM FIELD 0, 7000-7777 ************* /D040/ /D040/________________________________________________________________ /D040 DLFD0B /START BLOCK ON DISKETTE /D040 CDFSYS /"CDF" OF BUFFER FLD /M033 /D040 7000 /BUFFER ADDRESS /D040 -DSFD0B /NEG BLK COUNT /D040 > /END IFNDEF WINNIE /AXXXDFB /________________________________________________________________ / /**************** LOAD SYSTEM FIELD 1, 0-7000 **************** / /________________________________________________________________ DLFD1 /START BLOCK ON DISKETTE CDFPRT /"CDF" OF BUFFER FLD /M033 PRBOTM /ADDRESS /A043 /D043 PRTOPP /ADDRESS /C038 -DSFD1 /NEG BLK COUNT /________________________________________________________________ / /**************** LOAD SYSTEM FIELD 2, 0-4777 ************* / /________________________________________________________________ DLFD2 /START BLOCK ON DISKETTE CDFMNU /"CDF" OF BUFFER FLD /M033 0 /BUFFER ADDRESS -DSFD2 /NEG BLK COUNT /----------------------------------------------------------------- / /****************** LOAD WPSFIL FIELD 7, 0-6777 ******************** / /------------------------------------------------------------------- /D049 DLFD7 /START BLOCK NO. /D049 CDFFIO /CDF BUFFER FIELD /M033 /D049 0 /BUFFER ADDRESS /D049 -DSFD7 /NEG BLK COUNT(20) /________________________________________________________________ ENDLST, 0 //END OF LIST /__-------------------------------------------------------- /---------------------------------------------------------------- / /******************* MOVE PAGE 0, FIELD 2 ************************** /******************* TO PAGE 0, FIELD 7 ************************** / /___________________________________________________________________ / /------------- RESTORE TIME TO FLD 0---------------------------- / STDONE, TAD BTLOC /A034 SPA /WINNIE? /A034 JMP STDNE2 /YES RESTORE NOW THAT TABLE IS LOADED /A034 CLA /A034 STDNE1, /A018 TAD STCMND /GET READ COMMAND /A018 AND K1400 /1400 DENSITY, RX50 /A018/C032/C034 STDNE2, /A032 CDFFIO /A034 DCA I DENDVA0 /SET SYSTEM DRIVE DENSITY IN ACP FOR LOGIO CDFSYS /MYFLD /M033 /WHILE WAITING DONE /A026 STDNE3, TAD TIMESW SNA CLA JMP SKIPIT DCA STTYPE /SET WARM STARTUP(IGNORE SET TIME) JMS SETMOV /RESTORE TIME GETTIM+2 /ADDR OF TIME /C047 CLOCK+2 /ADDR TO BE STORED /C047 SKP SKIPIT, ISZ TIMESW /SET SKIP SW CDISYS /SET TO START /M033 JMP I .+1 /START WPS 201 / / / EJECT TIMESW, 0 /FIRST TIME SW SYHDLR, RX2SYS /RX02HNDLER SVDEN, /SAVE DENSITY***CAUTION***/M026 INCSAV, 0 /SAVE /A032 K1400, 1400 K400, 400 K2, 2 M7, -7 /INES COMP OF 6=GET DENS CMND BTLOC, 0 /SYSTEM 0 DEVICE TYPE- 0=RX01/02 1=RX50 4000=RD50 DENDVA0,5601 / address of density switch for drive0 /a050 / also defined at DENDV0 in above page /a050 / modified from /m033 so that this page is redundant /a050 / after initialisation /a050 RETFLD, CIFSYS /SET RETURN THIS FLD /M033 /********************************************************************** / Be WARNED IF YOU USE THIS SPACE / You ca be overwritten at any minite by the print initialisation / which follows /********************************************************************* /a050 PAGE LF=12 /LINE FEED CR=15 /CARRIAGE RETURN EJECT / END-OF-FILE.   / WPUTIL - UTILITY BUILD PROGRAM / ******** EDIT HISTORY ******* / / 002 WCE 21-AUG-84 MAKE DICTIONARY DISKS INTO ACTIVATE DISKS / 001 WJY 04-JUN-84 SUPPORT UPDATING AMERICAN & BRITISH / DICTIONARIES. / THIS PROGRAM WAS CRATED ON 25 OCT 83 BY WILLIAM EKLE TO PROVIDE A MEANS / OF GENERATING A UTILITY COMBINATION DISKETTE FOR FUNCTIONS THAT HAVE BEEN / OFF-LOADED FROM THE WPS SYSTEM DISKETTE. / / IN ACTUAL USE, THE DEVELOPERS WILL USE THIS PROGRAM TO TRANSFER THIER / CODE FROM AN EIGHT INCH FLOPPY DISKETTE TO A FIVE INCH DISKETTE. / / THE DISKETTE THAT CONTAINS THIS PROGRAM IS A MODIFIED SYSTEM DISKETTE / THAT HAS ONLY THE MINIMUM FILES NECESSARY TO BOOT THE STANDARD SYSTEM. / / WHEN THE STANDARD SYSTEM IS BOOTED UP, IT TRANSFERS CONTROL TO THE / MODULE WPCU2. THIS PROGRAM OCCUPIES THE SLOT THAT WAS USED BY WPCU2 / TO DISLPAY THE RESET DATE AND TIME MENU. / / TO BUILD A BASIC DISKETTE, LOAD THE FOLLOWING FILES ON A BLANK DISKETTE: / / LOADB7, WPFILS, DSKHND, WPSYSA, WPUTIL / / THEN LOAD THE VARIOUS MODULES FOR SPELL, GRAPHICS, POST PROCESSING, ETC. / / CURRENTLY, THE UTILITY DISKETTE SUPPORTS FOUR KINDS OF OPERATIONS WHICH ARE: / / BUILD UTILITY COMBINATION DISKETTE / BUILD ACTIVATE FEATURE DISKETTES / UPDATE SPELLING DICTIONARY DISKETTES / BOOT AN RX-50 SYSTEM DISKETTE ON A DECMATE II / / THE KEY TO UNDERSTANDING PROGRAM OPERATION IS IN KNOWING WHAT VALUES ARE / PASSED IN THE MENU TEMP'S FROM THE USER SELECTION MENUS. / / MNTMP3 CONTAINS THE FUNCTION CODE FOR THE OPERATION / / 0 = UPDATE DICTIONARY DISKETTE / 1 = BUILD UTILITY COMBINATION DISKETTE / 2 = BUILD ACTIVATE FEATURE DISKETTE / 3 = BOOT RX-50 SYSTEM DISKETTE ON A DECMATE II / / MNTMP4 CONTAINS THE INITIALIZATION DISK DRIVE NUMBER / / MNTMP5 CONTAINS A BIT SET FOR THE ACTIVATE FEATURE DISK TO BE BUILT / / COMBIT = 1 FOR COMMUNICATIONS / LPBIT = 2 FOR LIST PROCESSING / SRBIT = 4 FOR SORT / MABIT = 10 FOR MATH / SEDBIT = 20 FOR SPELLING /*************************************************************************** /**** WRITE OUT CODE FOR WPUTIL **** /*************************************************************************** FIELD 0 / FIELD WHERE RXHAN IS LOCATED *200 / START ADDRESS USED BY OS8 "GO" COMMAND JMP I .+3 / LOCATION USED TO START UP RXHAN JMP I .+1 / LOCATION USED TO RETURN TO OS8 MONITOR 7600 / ADDRESS OF OS8 MONITOR RETURN POINT RXLOAD / ADDRESS OF START LOCATION FOR RXHAN *RXLDLS / ADDRESS WITHIN RXHAN TO OVERLAY RXEWT / WRITE FUNCTION CODE 0 RXQBLK / ADDRESS OF QUEUE BLOCK TO USE . / ADDRESS OF TABLE OF DISK COMMANDS DLUTL1; 0; CDF 20; -1 / WRITE OUT FIRST PART OF UTILITY DLUTL2; 400; CDF 20; -DSUTL2 / WRITE OUT SECOND PART OF UTILITY DLMUT1; ADMUT1; CDF 20; -DSMENU / WRITE OUT FIRST UTILITY MENU BLOCK DLMUT2; ADMUT2; CDF 20; -DSMENU / WRITE OUT SECOND UTILITY MENU BLOCK DLMUT3; ADMUT3; CDF 20; -DSMENU / WRITE OUT THIRD UTILITY MENU BLOCK 0 / END OF LIST INDICATOR /*************************************************************************** /**** PAGE ZERO LOCATIONS **** /*************************************************************************** FIELD 2 *100 / FIRST 100 LOCATIONS ARE USED FOR SYSTEM DSKBLK= .%400+DLUTL1 / DISK BLOCK WHERE PAGE IS LOADED CIFMYF= CIFBUF / DEFINE OUR FIELD. CDFMYF= CDFBUF / ... PR3= 6236 / FIRMWARE PANEL REQUEST #3 FOR DECMATE II BLDQR0, XX CIF 0 ENQUE BLDQB1 / QUEUE TO RXHAN BLDQR1, CIF 0 JWAIT / WAIT FOR DONE CLA TAD BLDQBK+RXQCOD SPA JMP BLDER / ERROR -1 VALUE SNA CLA JMP BLDQR1 JMP I BLDQR0 / DONE BLDER, CLA / HANDLE DISK DRIVE ERROR TAD BLDQBK+RXQDRV / GET THE ERROR DRIVE NUMBER AND BLDP7 / ISOLATE THE DRIVE NUMBER DCA BLDDRV / STORE THE ERROR DRIVE TAD BLDRWX / SET THE DEFAULT FUNCTION ADDRESS DCA BLDFNC / IT IS SET FOR READING TAD BLDQBK+RXQFNC / SEE IF IT IS READING AND BLDP77 / GET RID OF THE 4000 TAD BLDM2 / IF A 2 THEN IT IS A PHYSICAL WRITE SNA ISZ BLDFNC TAD BLDM2 / CHECK FOR A BLOCK WRITE SNA CLA ISZ BLDFNC CIFMNU JMS I IOACAL / THE ERROR MESSAGE 0 BLDERM 520 / POSITION ON THE SCREEN ROW 5 COL.20 BLDDRV, 0 / OUTPUT DRIVE OR DRIVE NUMBER WITH ERROR BLDFNC, 0 / READ/WRITE MESSAGE ADDRESS OR FUNCTION CODE BLDMSG, BLDBLK / DEFUALT IS BLOCK BLDNUM, BLDQBK+RXQBLK JMP I .+1 / RETURN NORMALLY BLDERN BLDP7, 7 BLDP77, 77 BLDM2, -2 BLDRWX, BLDRWM BLDMIN, 0 / THE VALUE OF THE MINUTES BLDSEC, 0 / THE TEMP VALUE THAT DETECTS A CHANGE IN TIME BLDTYP, 0 / LOCATION FOR ACTIVATE FEATURE BUILD TYPE DRVTYP, 0 / LOCATION FOR STORING DISK DRIVE TYPE / 0 = S.D. 8", 1 = D.D. 8", 2 = RX50 5.25" BLDQB1, DSKQUE;0;0 BLDQBK, 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 X=. / LOCATION OF FIRST FREE LOCATION ON PAGE /----------------------- PAGE /*************************************************************************** /**** START OF UTILITY BUILD PROGRAM **** /*************************************************************************** DSKBLK= .%400+DLUTL1 / DISK BLOCK WHERE PAGE IS LOADED / READ IN THE REST OF THE PROGRAM THAT DIDN'T GET LOADED BY THE WPCU2 OVERLAY BLDOPT, XX / ENTRY POINT FROM WP2CMF CMND CALL TO WPCU2 CLA / MAKE SURE THAT ACCUMULATOR IS CLEAR TAD (400) / GET STARTING BUFFER ADDRESS DCA BLDQBK+RXQBAD / SET UP BUFFER ADDRESS FOR TRANSFER TAD BLDMYF / GET CDF INSTRUCTION TO THIS FIELD DCA BLDQBK+RXQBFD / SET UP BUFFER FIELD FOR TRANSFER TAD (DLUTL2) / GET DISK BLOCK ADDRESS DCA BLDQBK+RXQBLK / SET UP DISK BLOCK FOR TRANSFER DCA BLDQBK+RXQDRV / SET UP SYSTEM DRIVE FOR TRANSFER TAD (-DSUTL2) / GET NEGATIVE NUMBER OF BLOCKS DCA X1 / SET UP COUNTER FOR TRANSFER TAD (RXERD+4000) / GET READ FUNCTION CODE DCA BLDQBK+RXQFNC / SET UP FOR A READ OPERATION / BEGIN LOOP TO READ IN REMAINDER OF PROGRAM CODE FROM DISK BLDLOP, JMS BLDQR0 / READ IN ONE DISK BLOCK TAD (400) / OFFSET TO NEXT MEMORY BLOCK ADDRESS TAD BLDQBK+RXQBAD / COMBINE WITH CURRENT MEMORY ADDRESS DCA BLDQBK+RXQBAD / STORE UPDATED MEMORY ADDRESS ISZ BLDQBK+RXQBLK / INCREMENT THE DISK BLOCK NUMBER ISZ X1 / INCREMENT THE DISK BLOCK COUNTER JMP BLDLOP / NOT DONE, GO TRANSFER THE NEXT BLOCK / PUT UP USER SELECTION MENU FOR BUILD OPTION AND DISK DRIVE BLDOVR, CIFMNU / SET BACK TO MENU FIELD JMS I MNUCAL / CALL OPTIONS MENU DLMUT1 / DISK BLOCK FOR MENU CDFMNU / SWITCH TO MENU FIELD TAD I (MUBUF+MNTMP3) / PICK UP TEMP 3 VALUE FROM MENU FIELD DCA BLDFNC / SAVE VALUE FOR BUILD FUNCTION CODE / FUNCTION = 0 FOR DICTIONARY UPDATE / FUNCTION = 1 FOR BUILD COMBINATION DISK / FUNCTION = 2 FOR BUILD ACTIVATE DISK / FUNCTION = 3 FOR BOOT RX-50 OPERATION TAD I (MUBUF+MNTMP4) / PICK UP TEMP 4 VALUE FROM MENU FIELD DCA BLDDRV / SAVE OUTPUT DRIVE NUMBER TAD I (MUBUF+MNTMP5) / PICK UP TEMP 5 VALUE FROM MENU FIELD DCA BLDTYP / SAVE ACTIVATE FEATURE BUILD TYPE BLDMYF, CDFMYF / SET BACK TO THIS FIELD / CHECK FOR A BOOT OPERATION AC7775 / SET UP TO CHECK FOR A BOOT OPERATION TAD BLDFNC / PICK UP BUILD FUNCTION CODE SZA CLA / DOES THE USER WANT TO BOOT THE RX-50'S ? JMP BLDSET / NO, GO SET THE DENSITY OF THE OUTPUT DISK / BOOT RX-50 DISK NUMBER ZERO ON A DECMATE II AC0000 / SET THE AC TO POINT TO DRIVE ZERO RXISEL / IOT TO SELECT DRIVE PAIR SPECIFIED BY AC11 AC0000 / CLEAR AC FOR PR3 REQUEST PR3 / ISSUE A PR3 REQUEST TO REBOOT THE SYSTEM 5 / REQUEST TYPE 7777 / TERMINATOR JMP BLDOVR / FOR DECMATE I SYSTEM ONLY (NO RX-50'S) / SET THE DENSITY OF THE OUTPUT DRIVE BLDSET, TAD (BLDBUF) / RESET POINTER TO BUFFER ADDRESS DCA BLDQBK+RXQBAD / STORE IN QUEUE BLOCK FOR TRANSFER TAD (BLDBLK) / SET UP MESSAGE FOR ... DCA BLDMSG / POSSIBLE BLOCK ERROR TAD BLDDRV / SET TO OUTPUT DRIVE DCA BLDQBK+RXQDRV / AND STORE IT DCA BLDQBK+RXQBLK / CLEAR DISK BLOCK NUMBER FOR ERROR REPORT TAD (RXEDN+4000) / GET AND SET DENSITY DCA BLDQBK+RXQFNC / FUNCTION CODE JMS BLDQR0 / DO IT .... TAD BLDQBK+RXQSPC / PICK UP AND SAVE DISK DRIVE TYPE DCA DRVTYP / 0 = S.D. 8", 1 = D.D. 8", 2 = RX50 5.25" / TEST FOR DICTIONARY UPDATE FUNCTION TAD BLDFNC / GET TYPE OF BUILD OPERATION SZA CLA / SKIP IF DICTIONARY UPDATE OPERATION JMP BLDDSK / GO BUILD OPTION DISKETTE CIFMNU / SWITCH TO THE MENU FIELD JMS I IOACAL / CALL DISPLAY ROUTINE 0 / DEFAULT OUTPUT ROUTINE BLDUSD / PRINT "UPDATING DICTIONARY DISKETTE" 0 / CURSOR POSITION TO CLEAR THE SCREEN 23 / CURSOR POSITION FOR "UPDATE" MESSAGE / READ THE HOME BLOCK OF THE DICTIONARY DISKETTE TAD (RXERD+4000) / SET UP READ FUNCTION DCA BLDQBK+RXQFNC AC0002 / SET THE BLOCK NUMBER TO TWO DCA BLDQBK+RXQBLK TAD BLDDRV / SET TO OUTPUT DRIVE DCA BLDQBK+RXQDRV JMS BLDQR0 / REQUEST THE READ / VERIFY THAT THE HOME BLOCK COMES FROM A DICTIONARY DISKETTE TAD (BLDDIC-1) / GET POINTER TO VALUES TABLE DCA X1 / SET UP AUTO INDEX REGISTER BLDVFY, TAD I X1 / PICK UP HOME BLOCK ADDRESS SNA / CHECK FOR END OF TABLE JMP BLDUPD / EVERYTHING MATCHES, GO UPDATE BLOCK TAD (BLDBUF) / GENERATE POINTER INTO BUFFER DCA T1 / STORE ADDRESS FOR INDIRECT OPERATION TAD I T1 / PICK UP CONTENTS OF HOME BLOCK LOCATION CIA / NEGATE VALUE FOR COMPARE TAD I X1 / COMBINE WITH VALUE FROM TABLE SNA / CHECK FOR A MATCH /M001 JMP BLDVFY / THIS ONE MATCHED, GO CHECK NEXT ONE TAD (-10) / THE DIFFERENCE BETWEEN AN ASCII "US" /A001 / & A "UK" IS 8 (10 OCTAL) /A001 SZA CLA / SKIP IF THE DIFFERENCE WAS 8 /A001 JMP BLDVFERR / ELSE GO REPORT ERROR /A001 TAD X1 / NOW SEE IF THAT IS WHERE WE WERE LOOKING/A001 TAD (-BLDDCX) / /A001 SNA CLA / SKIP TO ERROR REPORT, THE DIFF. WAS 8 /A001 / BUT IT WAS JUST COINCIDENTAL /A001 JMP BLDVFY / "UK" MUST HAVE BEEN IN HOME BLOCK /A001 / INSTEAD OF "US", TREAT AS MATCH /A001 / ERROR DETECTED - DISKETTE IS NOT A DICTIONARY DISKETTE BLDVFERR, /A001 CIFMNU / SWITCH TO THE MENU FIELD JMS I IOACAL / CALL THE DISPLAY ROUTINE 0 / DEFAULT OUTPUT ROUTINE BLDNSD / PRINT "NOT SPELLING DICTIONARY DISKETTE" 1423 / CURSOR POSITION FOR "ERROR" MESSAGE JMP BLDERN / GO WAIT FOR USER RESPONSE / WRITE OUT MODIFIED HOME BLOCK OF THE DICTIONARY DISKETTE BLDUPD, JMS BLDHOM / UPDATE THE BUILD DATE IN HOME BLOCK JMS BLDPTR / SET UP POINTER INTO BUILD TABLE #2 /A002 ISZ X4 / BUMP POINTER PAST ACTIVATE NAME /A002 JMS BLDACT / YES, MOVE POINTERS INTO HOME BLOCK /A002 TAD (RXEWT+4000) / WRITE OUT THE NEW VERSION DCA BLDQBK+RXQFNC JMS BLDQR0 / REQUEST THE WRITE JMP BLDERN / ALL DONE, GO WAIT FOR USER RESPONSE X=. / LOCATION OF FIRST FREE LOCATION ON PAGE /----------------------- PAGE DSKBLK= .%400+DLUTL1 / DISK BLOCK WHERE PAGE IS LOADED / BEGIN BUILDING OPTION DISKETTE BY DISPLAYING ELAPSED TIME CLOCK BLDDSK, CDFMNU / SWITCH TO THE MENU FIELD DCA I (CLKCHG) / CLEAR THE TIME COUNTER CDFMYF / SWITCH BACK TO THIS FIELD DCA BLDSEC / CLEAR THE SECOND COUNTER DCA BLDMIN / AND THE MINUTES CIFMNU / SWITCH TO THE MENU FIELD JMS I IOACAL / CALL SYSTEM OUTPUT ROUTINE 0 / USE DEFAULT OUTPUT ROUTINE BLDSFD / PRINT "BUILDING SPECIAL DISKETTE" 0 / CURSOR POSITION TO CLEAR THE SCREEN 23 / CURSOR POSITION FOR "BUILD" MESSAGE 1232 / CURSOR POSITION FOR "CLOCK" MESSAGE BLDCLK / PRINT "ELAPSED TIME CLOCK 0:00" / SET UP MAXIMUM NUMBER OF BLOCKS ON OUTPUT DRIVE JMS BLDCLR / INITIALIZE BUFFER FOR BUILD OPERATION TAD DRVTYP / PICK UP DRIVE TYPE (0, 1, OR 2) CLL RAL / MULTIPLY VALUE BY TWO TAD (BLKTAB-1) / MAKE POINTER INTO BLOCK TABLE DCA X1 / STORE POINTER FOR INDIRECT TAD I X1 / PICK UP MAXIMUM NUMBER OF BLOCKS DCA X5 / STORE FOR LATER USE TAD I X1 / GET MAXIMUM NUMBER OF ALLOC WORDS DCA ALCNUM / INITIALIZE LOCATION IN ALLOCATION TEMPLET / CHECK FOR KIND OF BUILD OPERATION AC7776 / SET UP FOR A TEST OF FUNCTION TYPE TAD BLDFNC / GET USER SPECIFIED FUNCTION SZA CLA / CHECK FOR ACTIVATE DISK BUILD JMP BLDCHB / NO, GO INITIALIZE COMBINATION HOME BLOCK / CLEAR ALL DISK BLOCKS DCA BLDQBK+RXQBLK / CLEAR THE BLOCK COUNTER REGISTER TAD (RXEWT+4000) / SET UP WRITE OUT COMMAND DCA BLDQBK+RXQFNC / STORE FUNCTION CODE IN QUEUE BLOCK BLDLP1, JMS BLDQRX / WRITE THE NEXT BLOCK ISZ BLDQBK+RXQBLK / INCREMENT THE BLOCK NUMBER TAD BLDQBK+RXQBLK / PICK UP CURRENT BLOCK COUNT TAD X5 / COMBINE WITH MAX COUNT SZA CLA / HAS IT REACHED MAX YET ? JMP BLDLP1 / NO, MORE TO DO, GO AGAIN / INITIALIZE DISKETTE NAME IN HOME BLOCK TEMPLET FOR AN ACTIVATE DISKETTE JMS BLDPTR / SET UP POINTER INTO BUILD TABLE #2 /A002 AC7777 / SET UP FOR A DECREMENT TAD BLDADD / GET POINTER INTO DIRECTORY BLOCK DCA X1 / STORE POINTER IN AUTO INDEX REGISTER TAD (1616) / VALUE FOR TEXT "--" DCA I X1 / STORE FIRST VALUE IN DIRECTORY BLOCK TAD I X4 / PICK UP VALUE FOR DISK NAME DCA I X1 / STORE SECOND VALUE IN DIRECTORY BLOCK TAD (1616) / VALUE FOR TEXT "--" DCA I X1 / STORE THIRD VALUE IN DIRECTORY BLOCK JMP BLDINI / GO INITIALIZE VALUES / INITIALIZE DISKETTE NAME IN HOME BLOCK TEMPLET FOR COMBINATION DISKETTE BLDCHB, JMS BLDMOV / PUT FULL NAME INTO TEMPLET BLDTB1 / ADDRESS TO START MOVE FROM BLDADD, BLDDIR+2 / ADDRESS TO MOVE TO 3 / NUMBER OF WORDS TO MOVE / INITIALIZE VALUES TO BE WRITTEN IN BLOCK ZERO FOR COS COMPATIBILITY BLDINI, JMS BLDMOV / PUT FULL NAME INTO BUFFER BLDDIR+2 / ADDRESS TO START MOVE FROM BLDBUF+2 / ADDRESS TO MOVE TO 3 / NUMBER OF WORDS TO MOVE / WRITE BLOCK ZERO TO OUTPUT DRIVE DCA BLDQBK+RXQBLK / CLEAR THE BLOCK COUNTER TAD BLDDRV / SET TO OUTPUT DRIVE DCA BLDQBK+RXQDRV / AND STORE IT TAD (RXEWT+4000) / NOW WRITE THE NEW VERSION DCA BLDQBK+RXQFNC JMS BLDQRX / REQUEST THE WRITE / INITIALIZE VALUES TO BE WRITTEN INTO HOME BLOCK JMS BLDCLR / CLEAR BUFFER JMS BLDMOV / MOVE PARAMETERS INTO BUFFER BLDDIR / ADDRESS TO MOVE FROM BLDBUF / ADDRESS TO MOVE TO BLDDXX / NUMBER OF WORDS TO MOVE JMS BLDHOM / UPDATE THE BUILD DATE IN HOME BLOCK AC7776 / SET UP TO CHECK FOR ACTIVATE DISK TAD BLDFNC / COMBINE WITH BUILD FUNCTION CODE SNA CLA / CHECK FOR ACTIVATE FEATURES DISKETTE /C002 JMS BLDACT / YES, MOVE POINTERS INTO HOME BLOCK /A002 / NO, GO WRITE OUT THE HOME BLOCK /C002 / WRITE THE HOME BLOCK BLDHBW, TAD (DLDIR) / GET BLOCK NUMBER TO PUT IT OUT TO DCA BLDQBK+RXQBLK JMS BLDQRX / DO THE WRTIE JMP BLDCN1 / JUMP AND CONTINUE ON NEXT PAGE / ROUTINE FOR CALCULATING POINTER INTO BUILD TABLE 2 FOR ACTIVATE WORDS /A002 BLDPTR, XX / CALCULATE POINTER INTO BUILD TABLE #2 /A002 DCA T1 / CLEAR COUNTER REGISTER TAD BLDTYP / PICK UP ACTIVATE FEATURE TYPE SNA / CHECK FOR ZERO VALUE JMP BLDALL / YES, BUILD DISK TO ACTIVATE ALL FEATURES BLDLP2, CLL RAR / MOVE LEAST SIGNIFICANT BIT TO LINK ISZ T1 / INCREMENT THE OFFSET VALUE SNL / CHECK FOR A BIT IN THE LINK JMP BLDLP2 / LINK'S CLEAR, GO CHECK AGAIN CLA / CLEAR ANY POSSIBLE TRASH IN AC TAD T1 / PICK UP OFFSET VALUE FROM COUNTER CLL RTL / MULTIPLY VALUE BY FOUR BLDALL, TAD (BLDTB2-1) / COMBINE WITH BUILD TABLE ADDRESS DCA X4 / SAVE POINTER INTO BUILD TABLE JMP I BLDPTR / RETURN TO CALLER /A002 / ROUTINE FOR MOVING THE ACTIVATE WORDS INTO THE HOME BLOCK /A002 BLDACT, XX / STORE ACTIVATE WORDS IN HOME BLOCK /A002 TAD (BLDBUF+340-1) / SET UP POINTER INTO HOME BLOCK DCA X1 / STORE POINTER FOR ACTIVE WORDS TAD I X4 / PICK UP BIT PATTERN FOR ACTIVATE PROCESS DCA I X1 / STORE FIRST ACTIVE WORD IN HOME BLOCK TAD I X4 / PICK UP FIRST VERSION NUMBER DCA I X1 / STORE SECOND ACTIVE WORD IN HOME BLOCK TAD I X4 / PICK UP SECOND VERSION NUMBER DCA I X1 / STORE THIRD ACTIVE WORD JMP I BLDACT / RETURN TO CALLER /A002 / TABLE OF VALUES TO BE USED FOR DISK OPERATIONS DECIMAL / SET DECIMAL MODE BLKTAB, -632;-80 / RX01 SINGLE DENSITY BLOCKS AND ALLOC WORDS -988;-125 / RX02 DOUBLE DENSITY BLOCKS AND ALLOC WORDS -790;-99 / RX50 BLOCKS AND ALLOC WORDS OCTAL / RESET BACK TO OCTAL MODE / TABLE OF VALUES USED TO VERIFY DICTIONARY DISKETTE BLDDIC, 2 / LOCATION OF FIRST WORD OF NAME BLDDCX, 6664 / ASCII VALUE FOR "US" /M001 3 / LOCATION OF SECOND WORD OF NAME 4552 / ASCII VALUE FOR "DI" /M001 4 / LOCATION OF THIRD WORD OF NAME 4465 / ASCII VALUE FOR "CT" /M001 11 / LOCATION FOR NUMBER OF DOCUMENTS 7777 / MINUS ONE MEANS NO DOCUMENTS 0 / END OF TABLE VALUE X=. / LOCATION OF FIRST FREE LOCATION ON PAGE /----------------------- PAGE / WRITE THE ALLOCATION BLOCK BLDCN1, JMS BLDCLR / CLEAR BUFFER JMS BLDMOV / MOVE PARAMETERS INTO BUFFER BLDALC / ADDRESS TO MOVE FROM BLDBUF / ADDRESS TO MOVE TO BLDAXX / NUMBER OF WORDS TO MOVE TAD (DLALOC) / GET BLOCK NUMBER TO PUT IT OUT TO DCA BLDQBK+RXQBLK JMS BLDQRX / REQUEST WRITE FOR ALLOC BLOCK / CHECK TO SEE IF WE ARE BUILDING A UTILITY COMBINATION DISKETTE AC7777 / SET UP FOR A MINUS ONE VALUE TAD BLDFNC / COMBINE WITH USER SPECIFIED OPTION SZA CLA / CHECK FOR BUILD COMBINATION DISKETTE JMP BLDCHK / NO, IGNORE SOFTWARE TRANSFER ROUTINE / SET UP POINTERS FOR SOFTWARE TRANSFER TO UTILITY COMBINATION DISKETTE AC0002 / SET UP FOR AN OFFSET ADJUSTMENT TAD (BLDTB1) / COMBINE WITH POINTER TO DISK NAME DCA X1 / STORE IN AUTO INDEX REGISTER TAD I X1 / PICK UP INPUT DRIVE STARTING BLOCK NUMBER DCA T1 / STORE IN INPUT BLOCK NUMBER REGISTER TAD I X1 / PICK UP OUTPUT DRIVE STARTING BLOCK NUMBER DCA T2 / STORE IN OUTPUT BLOCK NUMBER REGISTER TAD I X1 / PICK UP COUNT OF NUMBER OF BLOCKS DCA T3 / STORE IN BLOCK COUNTER REGISTER / TRANSFER UTILITY SOFTWARE TO UTILITY DISKETTE BLDXFR, DCA BLDQBK+RXQDRV / SET TO DRIVE ZERO TAD T1 / PICK UP CURRENT INPUT DRIVE BLOCK NUMBER DCA BLDQBK+RXQBLK / STORE BLOCK NUMBER IN QUEUE BLOCK TAD (RXERD+4000) / PICK UP READ COMMAND DCA BLDQBK+RXQFNC / STORE COMMAND IN QUEUE BLOCK JMS BLDQRX / REQUEST THE READ COMMAND TAD BLDDRV / PICK UP NUMBER OF OUTPUT DRIVE DCA BLDQBK+RXQDRV / SET TO OUTPUT DRIVE TAD T2 / PICK UP CURRENT OUTPUT DRIVE BLOCK NUMBER DCA BLDQBK+RXQBLK / STORE BLOCK NUMBER IN QUEUE BLOCK TAD (RXEWT+4000) / PICK UP WRITE COMMAND DCA BLDQBK+RXQFNC / STORE COMMAND IN QUEUE BLOCK JMS BLDQRX / REQUEST THE WRITE COMMAND ISZ T1 / INCREMENT INPUT DRIVE BLOCK NUMBER ISZ T2 / INCREMENT OUTPUT DRIVE BLOCK NUMBER ISZ T3 / INCREMENT BLOCK COUNT JMP BLDXFR / NOT DONE, GO AGAIN / READ ALL DISK BLOCKS TO VERIFY THIER INTEGRITY BLDCHK, DCA BLDQBK+RXQBLK / SET THE BLOCK TO ZERO TAD (RXERD+4000) / SET FOR READING DCA BLDQBK+RXQFNC BLDDV1, JMS BLDQRX / READ THE NEXT BLOCK ISZ BLDQBK+RXQBLK / INCREMENT THE BLOCK NUMBER TAD BLDQBK+RXQBLK / PICK UP CURRENT BLOCK COUNT TAD X5 / COMBINE WITH MAX COUNT SZA CLA / HAS IT REACHED MAX YET ? JMP BLDDV1 / NO, MORE TO DO, GO AGAIN BLDERN, CIFMNU / SWITCH TO MENU FIELD JMS I IOACAL / CALL DISPLAY ROUTINE 0 / DEFAULT OUTPUT ROUTINE BLDRET / ADDRESS "PRESS RETURN" MESSAGE 2332 / CURSOR POSITION TO DISPLAY MESSAGE 2700 / MOVE CURSOR TO BOTTOM OF SCREEN / THIS ROUTINE WILL WAIT FOR A GOLD MENU OR RETURN TO BE TYPED BY THE USER. / A GOLD MENU OR A RETURN WILL CAUSE A RETURN TO THE BUILD DISKETTE MENU. / ALL OTHER CHARACTERS WILL RING THE BELL. JMP BLDWFR / CHECK FOR CHARACTER FROM THE KEYBOARD CIF 0 / CHANGE TO USER FIELD ZERO JWAIT / WAIT FOR SYSTEM INTERRUPT BLDWFR, CIF 0 / CHANGE TO USER FIELD ZERO XLTIN / READ THE KEYBOARD JMP .-4 / IF NOTHING TYPED THEN WAIT TAD (-EDMENU) / CHECK FOR A GOLD MENU SZA TAD (EDMENU-EDNWLN) / NOW CHECK FOR A RETURN SNA CLA JMP BLDOVR / GOLD MENU OR RETURN WAS TYPED / GO TO BUILD MENU / THIS ROUTINE WILL RING THE BELL IN RESPONSE TO SOME USER ERROR TAD (7) / GET ASCII BELL CODE JMP .+3 / SKIP OVER WAIT COMMAND CIF 0 / CHANGE TO USER FIELD ZERO JWAIT / WAIT FOR SYSTEM INTERRUPT CIF 0 / CHANGE TO USER FIELD ZERO TTYOU / TRY TO TYPE THE CHARACTER JMP .-4 / NOT SUCCESSFUL - GO TRY AGAIN JMP BLDWFR / GO BACK FOR ANOTHER CHARACTER X=. / LOCATION OF FIRST FREE LOCATION ON PAGE /----------------------- PAGE DSKBLK= .%400+DLUTL1 / DISK BLOCK WHERE PAGE IS LOADED / ROUTINE TO CLEAR THE BUFFER BLDCLR, XX / CLEAR THE BUFFER ROUTINE TAD (-400) / SET THE COUNTER FOR THE BUFFER DCA X1 TAD (BLDBUF-1) / SET THE ADDRESS OF THE BUFFER DCA X2 TAD (COSCNT) / FIRST WORD FOR COS COMPATABILITY BLDLUP, DCA I X2 / CLEAR THE NEXT LOCATION ISZ X1 / INCREMENT THE COUNTER JMP BLDLUP JMP I BLDCLR / RETURN TO CALLER / ROUTINE TO READ AND WRITE DISK BLOCKS BLDQRX, XX / DO DISK OPERATION AND UPDATE TIME CLOCK JMS BLDQR0 / REQUEST DISK OPERATION CDFMNU / SWITCH TO THE MENU FIELD TAD I (CLKCHG) / PICK UP FLAG FOR TIME CHANGE CDFMYF / SWITCH BACK TO THIS FIELD SPA / HAS THE TIME CHANGED ? JMP BLDTM4 / NO, RETURN TO CALLER BLDTM1, ISZ BLDSEC / INCREMENT SECOND COUNT TAD (-12) / SUBTRACT OFF A SECOND'S WORTH OF CHANGE SMA / DID MORE THAN A SECOND GO BY ? JMP BLDTM1 / YES, GO INCREMENT THE SECOND COUNT CDFMNU / SWITCH TO THE MENU FIELD DCA I (CLKCHG) / STORE NEW VALUE FOR CLOCK FLAG CDFMYF / SWITCH BACK TO THIS FIELD TAD BLDSEC / COMPUTE NEW TIME - GET SECOND COUNT BLDTM2, TAD (-74) / SUBTRACT OFF A MINUTE'S WORTH OF CHANGE SPA / DID WE CROSS THE MINUTE LIMIT ? JMP BLDTM3 / NO, GO RESTORE THE SECOND COUNT ISZ BLDMIN / YES, INCREMENT THE MINUTE COUNT JMP BLDTM2 / GO CONTINUE THE CHECK BLDTM3, TAD (74) / RESTORE THE SECOND COUNT DCA BLDSEC / STORE UPDATED SECOND COUNT CIFMNU / SWITCH TO MENU FIELD JMS I IOACAL / PRINT TIME WHEN IT CHANGES 0 / USE DEFAULT OUTPUT ROUTINE BLDTMT / TIME MESSAGE 1257 / SCREEN POSITION FOR TIME BLDMIN / VALUE FOR MINUTES BLDSEC / VALUE FOR SECONDS BLDTM4, CLA / NEEDED BECAUSE OF THE "SPA - JMP" ABOVE JMP I BLDQRX / RETURN TO CALLER / ROUTINE TO MOVE A BLOCK OF MENORY WITHIN THIS FIELD / CALL IS AS FOLLOWS: / / JMS BLDMOV / CALL MOVE ROUTINE / ADDRESS OF FROM / DEFINE FROM ADDRESS / ADDRESS OF TO / DEFINE TO ADDRESS / NUMBER TO MOVE / DEFINE NUMBER OF WORDS TO MOVE / RETURN / NORMAL RETURN ADDRESS BLDMOV, XX AC7777 / SET A.C. EQUAL TO MINUS ONE TAD I BLDMOV / SUBTRACT ONE FROM THE FROM ADDRESS ISZ BLDMOV / INCREMENT RETURN ADDRESS DCA X0 / STORE VALUE IN AUTOINDEXING REGISTER AC7777 / SET A.C. EQUAL TO MINUS ONE TAD I BLDMOV / SUBTRACT ONE FROM THE TO ADDRESS ISZ BLDMOV / INCREMENT RETURN ADDRESS DCA X1 / STORE VALUE IN AUTOINDEXING REGISTER TAD I BLDMOV / GET VALUE FOR NUMBER OF WORDS ISZ BLDMOV / INCREMENT RETURN ADDRESS CIA / MAKE THE VALUE NEGATIVE DCA X2 / STORE VALUE IN AUTOINDEXING REGISTER BLDMOR, TAD I X0 / GET MEMORY VALUE FROM "FROM" ADDRESS DCA I X1 / STORE MEMORY VALUE IN "TO" ADDRESS ISZ X2 / INCREMENT NUMBER OF WORDS TO TRANSFER JMP BLDMOR / NOT DONE, GO DO SOME MORE JMP I BLDMOV / RETURN BACK TO CALLER / ROUTINE TO INITIALIZE VALUES TO BE WRITTEN INTO HOME BLOCK BLDHOM, XX / INITIALIZE HOME BLOCK VALUES CDFSYS / GET A UNIQUE VALUE FOR ... TAD I (RANDOM) / DISKETTE IDENTIFICATION CDFMYF / SWITCH BACK TO THIS FIELD DCA BLDBUF+5 / SAVE IT IN THE HOME BLOCK TAD (BLDDY^100+BLDMO) / GET DAY AND MONTH OF BUILD DCA BLDBUF+7 / SAVE IT IN THE HOME BLOCK TAD (BLDYR) / GET YEAR OF BUILD DCA BLDBUF+10 / SAVE IT IN THE HOME BLOCK JMP I BLDHOM / RETURN TO CALLER X=. / LOCATION OF FIRST FREE LOCATION ON PAGE /----------------------- PAGE DSKBLK= .%400+DLUTL1 / DISK BLOCK WHERE PAGE IS LOADED BLDTB1, 7061; 6466; 6555 / COMBINATION DISKETTE NAME - WPSUTL ... DLUTLS; DLUTLS; -DSUTLS / ...INPUT & OUTPUT DISK BLOCK & MINUS SIZE BLDTB2, 4255; 1777; 6065; 6365 / AL - 0 - 0.5 - 3.5 - ACTIVATE ALL FEATURES 6242; 0001; 6271; 6371 / QA - 1 - 2.9 - 3.9 - Q.A. TEST FUNCTION 4456; 0002; 6065; 6365 / CM - 2 - 0.5 - 3.5 - COMMUNICATIONS 5561; 0004; 6065; 6365 / LP - 3 - 0.5 - 3.5 - LIST PROCESSING 6463; 0010; 6065; 6371 / SR - 4 - 0.5 - 3.9 - MULTI KEY SORT 5642; 0020; 6065; 6371 / MA - 5 - 0.5 - 3.9 - L.P. & EDITOR MATH 6445; 0040; 6065; 6371 / SD - 6 - 0.5 - 3.9 - SPELLING CORRECTOR 7061; 0100; 6271; 6371 / WP - 7 - 2.9 - 3.9 - NOT VALID FUNCTION 7061; 0200; 6271; 6371 / WP - 8 - 2.9 - 3.9 - NOT VALID FUNCTION 7061; 0400; 6271; 6371 / WP - 9 - 2.9 - 3.9 - NOT VALID FUNCTION 7061; 1000; 6271; 6371 / WP - 10 - 2.9 - 3.9 - NOT VALID FUNCTION 7061; 2000; 6065; 6365 / WP - 11 - 0.5 - 3.5 - DEVELOPMENT OPTIONS 7061; 4000; 6271; 6371 / WP - 12 - 2.9 - 3.9 - RESERVED FOR EXTENSION BLDDIR, COSCNT / HOME BLOCK DIRECTORY 130 / VERSION 1 0 / OPTION DISKETTE NAME - WORD ONE 0 / OPTION DISKETTE NAME - WORD TWO 0 / OPTION DISKETTE NAME - WORD THREE 0 / THE UNIQUE DISKETTE NUMBER WHICH IS "RANDOM" DLALOC / BLOCK NUMBER OF ALLOC BLOCK 0;0 / CREATE DATE -1 / NUMBER OF FILES BLDDXX=.-BLDDIR / DEFINE LENGTH OF DIRECTORY TABLE BLDALC, COSCNT / BLOCK ALLOCATION DIRECTORY 40 / ALLOC BLOCK - 0 MEANS DOCUMENT DISKETTE DECIMAL 0 / NUMBER OF BLOCKS IN FILE SYSTEM 0 / NUMBER OF FREE BLOCKS TO START ALCNUM, 0 / NUMBER OF ALLOC WORDS OCTAL BLDAXX=.-BLDALC / DEFINE LENGTH OF ALLOC BLOCK TABLE / THESE ARE THE CONSTANTS AND ADDRESSES USED BY THE ERROR MESSAGE. BLDRWM, BLDRED / THE ADDRESS OF THE STRING THAT SAYS READ BLDWRT / THE ADDRESS OF THE WRITE MESSAGE STRING BLDWRT, TEXT 'WRITE' BLDRED, TEXT 'READ' BLDBLK, TEXT 'BLOCK' BLDTRK, TEXT 'TRACK' BLDTMT, TEXT '^P!D:!2D' BLDUSD, TEXT '^P!E^P-- &UPDATING &SPELLING &DICTIONARY &DISKETTE --' BLDNSD, TEXT '^P!&ERROR - &NOT &VALID &SPELLING &DICTIONARY &DISKETTE' BLDSFD, TEXT '^P!E^P-- &BUILDING &SPECIAL &FEATURE &DISKETTE --^P^S' BLDCLK, TEXT '!&ELAPSED !&TIME !&CLOCK 0:00' BLDERM, TEXT '^P&ERROR ON DRIVE ^D WHILE TRYING TO !S ^S !D!E' BLDRET, TEXT '^P&PRESS !&RETURN TO CONTINUE^P' BLDBUF, ZBLOCK 400 BLDEND=. / LAST LOCATION USED THIS FIELD /*************************************************************************** /**** FIRST MENU PAGE FOR UTILITY BUILD PROGRAM **** /*************************************************************************** RELOC / RESET RELOCATION COUNTER ADMUT1=. / MEMORY ADDRESS FOR MENU BLOCK DSKBLK=DLMUT1 / DISK BLOCK WHERE MENU IS LOADED RELOC 0 / FIRST MENU BLOCK FOR UTILITY PROBRAM UT1ST, DISP;0;TEXT '!E--^S!&SPECIAL !&FEATURE^S --';CAPBLD;CAPDSK DISP;524;TEXT '&VERSION ^A &DATED !2D-!2D-!2D' UT1LST;BLDMON;BLDDAY;BLDYER DISP;1120;TEXT '&A = ^S&ACTIVATE &FEATURE ^S';TXTBLD;TXTDSK DISP;1320;TEXT '&B = &BOOT !&RX-50 &SYSTEM ^S';TXTDSK DISP;1520;TEXT '&D = &UPDATE &SPELLING &DICTIONARY ^S';TXTDSK DISP;1720;TEXT '&U = ^S&UTILITY &COMBINATION ^S';TXTBLD;TXTDSK UT1ERR, DISP;2424;TEXT '!E&TYPE THE LETTER^S';TXTPRS CLRV;STOV;MNTMP5 / CLEAR ACCUMULATOR AND BUILD TYPE READ;MNTMP1;UT1ERR / GET A RESPONSE FROM THE USER ARG;UT1ST;MNTMP1 / CHECK FOR A NULL RESPONSE KEYWRD TEXT 'A ';UT1A / USER SELECTED ACTIVATE DISK BUILD TEXT 'B ';UT1B / USER SELECTED BOOT SYSTEM DISKETTE TEXT 'D ';UT1D / USER SELECTED DICTIONARY UPDATE TEXT 'U ';UT1U / USER SELECTED UTILITY DISK BUILD GOTO;UT1ERR / INVALID RESPONSE, HANDLE ERROR UT1B, INCV / (3) HERE FOR BOOT SYSTEM DISKETTE UT1A, INCV / (2) HERE FOR ACTIVATE DISKETTE UT1U, INCV / (1) HERE FOR COMBINATION DISKETTE UT1D, STOV;MNTMP3 / (0) HERE FOR DICTIONARY UPTATE CASE;MNTMP3;3;UT1RET / TRAP FOR BOOT OPERATION TRNSFR;UT2RD;DLMUT2 / GO CONTINUE ON NEXT PAGE UT1RET, RETURN / GO BOOT THE SYSTEM DISK UT1LST, SYSVER; ". / DISPLAY SYSTEM VERSION NUMBER SYSBAS; ". / DISPLAY SYSTEM BASE LEVEL NUMBER SYSREV; 0 / DISPLAY BASE LEVEL REVISION NUMBER BLDDAY, BLDDY / DAY SOFTWARE WAS BUILT BLDMON, BLDMO / MONTH SOFTWARE WAS BUILT BLDYER, BLDYR / YEAR SOFTWARE WAS BUILT TXTBLD=.+1 / OFFSET FOR BUILD TEXT WORD CAPBLD, TEXT ' !&BUILD ' / TEXT FOR CAPITALIZED BUILD WORD TXTDSK=.+1 / OFFSET FOR DISKETTE TEXT WORD CAPDSK, TEXT ' !&DISKETTE' / TEXT FOR CAPITALIZED DISKETTE WORD TXTPRS, TEXT ' AND PRESS !&RETURN' XTRUT1=400-. IFZERO .-401&4000 /*************************************************************************** /**** SECOND MENU PAGE FOR UTILITY BUILD PROGRAM **** /*************************************************************************** RELOC / RESET RELOCATION COUNTER ADMUT2=. / MEMORY ADDRESS FOR MENU BLOCK DSKBLK=DLMUT2 / DISK BLOCK WHERE MENU IS LOADED RELOC 0 / SECOND MENU BLOCK FOR UTILITY PROBRAM UT2RD, DISP;1110 TEXT '!E&TYPE THE NUMBER OF THE DRIVE THAT CONTAINS THE^S';UT2DSK DISP;1310;TEXT 'TO BE INITIALIZED AND PRESS !&RETURN' UT2RD1, READ;MNTMP1;UT2RTN / GET A RESPONSE FROM THE USER ARG;UT2RTN;MNTMP1 / CHECK FOR A NULL RESPONSE NUMBER;MNTMP4;UT2ERR / CHECK FOR A NUMBER RANGE;MNTMP4;1;3;UT2ERR / CHECK FOR A VALID DRIVE NUMBER CASE;MNTMP3 0;-1-UT3SED;DLMUT3 / CHECK FOR DICTIONARY UPDATE FUNCTION /A002 2;UT2BLD / CHECK FOR BUILD ACTIVATE DISK OPTION RETURN / GOT EVERYTHING, RETURN TO CALLER UT2RTN, TRNSFR;UT1ST;DLMUT1 / RETURN BACK TO MAIN UTILITY MENU UT2ERR, DISP;2715;TEXT '&VALID DRIVE NUMBERS ARE 1, 2, AND 3' GOTO;UT2RD1 UT2BLD, DISP; 500;TEXT '!E' DISP; 520;TEXT '&A = ^S- &ACTIVATE !&ALL &FEATURES -^S';UT2BUI;UT2DSK DISP; 720;TEXT '&C = ^S&COMMUNICATIONS^S';UT2BUI;UT2DSK DISP;1120;TEXT '&D = ^S&SPELLING &CORRECTOR^S';UT2BUI;UT2DSK DISP;1320;TEXT '&L = ^S&LIST &PROCESSING^S';UT2BUI;UT2DSK DISP;1520;TEXT '&M = ^S&L.&P. AND &EDITOR &MATH^S';UT2BUI;UT2DSK DISP;1720;TEXT '&S = ^S&MULTI &KEY &SORT^S';UT2BUI;UT2DSK DISP;2120;TEXT '&T = ^S&Q. &A. &TEST^S';UT2BUI;UT2DSK TRNSFR;UT3S;DLMUT3 / CONTINUE ON NEXT PAGE UT2BUI, TEXT '&BUILD ' / BUILD TEXT FOR ABOVE MESSAGES UT2DSK, TEXT ' &DISKETTE ' / DISKETTE TEXT FOR ABOVE MESSAGES XTRUT2=400-. IFZERO .-401&4000 /*************************************************************************** /**** THIRD MENU PAGE FOR UTILITY BUILD PROGRAM **** /*************************************************************************** RELOC / RESET RELOCATION COUNTER ADMUT3=. / MEMORY ADDRESS FOR MENU BLOCK DSKBLK=DLMUT3 / DISK BLOCK WHERE MENU IS LOADED RELOC 0 / THIRD MENU BLOCK FOR UTILITY PROBRAM UT3S, DISP;2505;TEXT '!E&TYPE THE &LETTER FOR THE &FEATURE TO BE BUILT' DISP;-1;TEXT ' AND &PRESS !&RETURN, OR' DISP;2605;TEXT '&JUST &PRESS !&RETURN TO RECALL THE &MAIN &MENU.' UT3RD, READ;MNTMP1;UT3RTN / READ CHARACTERS FROM KEYBOARD ARG;UT3RTN;MNTMP1 / GET POINTER TO CHARACTER & XFER IF NULL KEYWRD TEXT 'A ';UT3ALL / ALL FEATURES DISKETTE TEXT 'C ';UT3COM / COMMUNICATION DISKETTE TEXT 'D ';UT3SED / SPELLING DETECTION DISKETTE TEXT 'L ';UT3LP / LIST PROCESSING DISKETTE TEXT 'M ';UT3MA / L.P. AND EDITOR MATH DISKETTE TEXT 'S ';UT3SR / SORT DISKETTE TEXT 'T ';UT3TST / Q. A. TEST DISKETTE TEXT 'U ';UT3UD / DEVELOPMENT OPTION - UPDATE DICTIONARY GOTO; UT3S / ERROR - CHARACTER HAS NO MEANING UT3RTN, TRNSFR;UT1ST;DLMUT1 / GO BACK TO MAIN UTILITY MENU UT3ALL, SET;0;MNTMP5 / SET UP FOR ACTIVATING ALL FEATURES RETURN / RETURN TO UTILITY MODULE TO BUILD DISKETTE UT3COM, SET;COMBIT;MNTMP5 / SET UP FOR COMMUNICATIONS DISKETTE RETURN / RETURN TO UTILITY MODULE TO BUILD DISKETTE UT3SED, SET;SEDBIT;MNTMP5 / SET UP FOR SPELLING DETECTION DISKETTE RETURN / RETURN TO UTILITY MODULE TO BUILD DISKETTE UT3LP, SET;LPBIT;MNTMP5 / SET UP FOR LIST PROCESSING DISKETTE RETURN / RETURN TO UTILITY MODULE TO BUILD DISKETTE UT3MA, SET;MABIT;MNTMP5 / SET UP FOR L.P. AND EDITOR MATH DISKETTE RETURN / RETURN TO UTILITY MODULE TO BUILD DISKETTE UT3SR, SET;SRBIT;MNTMP5 / SET UP FOR SORT DISKETTE RETURN / RETURN TO UTILITY MODULE TO BUILD DISKETTE UT3TST, SET;HWDBIT;MNTMP5 / SET UP FOR Q. A. DISKETTE RETURN / RETURN TO UTILITY MODULE TO BUILD DISKETTE UT3UD, SET;DEVBIT;MNTMP5 / SET UP FOR DEVELOPMENT DISKETTE RETURN / RETURN TO UTILITY MODULE TO BUILD DISKETTE XTRUT3=400-. IFZERO .-401&4000   / DECmate II - SETUP mode / ------------------------------------------------------------------------- / E_D_I_T H_I_S_T_O_R_Y / /019 EMcD 25-Sep-85 Add Dutch and Spanish Xlations (conditional) /018 EMcD 12-Sep-85 Allow DO key (its now the UDK key and causes / problems as entry of a discrete char !) /017 EMcD 12-Sep-85 Add Nordic translations (conditionalised) /016 Mart 01-aug-85 Fix ITALIAN assembly bugs / change ITALIAN boud to baud / change NERO BIANCO to NORMALE INVERSO /015 EMcD 26-Mar-85 Two new terminal types & fix VT125 message /014 EMcD 12-Mar-85 Set term to Lvl2 8 bit /013 TCW 16-JUL-84 Expand # of terminal modes /012 JFS 19-JUN-84 DM-III changes /011 FJL 19-JAN-84 Deleted "cursor (in)visibilty" feature / Removed old edit histories / ------------------------------------------------------------------------- / *****ORDER***** ***** IMP ***** ORT ***** ANT ***** FIELD 0 *200 JMP I .+3 JMP I .+1 7600 RXLOAD *RXLDLS RXEWT=4 RXEWT 0 RXQBLK=11 RXQBLK . DLOSET; 100; CDF 30; -DSOSET 0 FIELD 3 *100 CDFMYF= CDF 30 / THIS field K0006, 6 / K0007, 7 / K0017, 17 / T4, ZBLOCK 1 / CURSOR, 0 / increments (always positive) SETUVL, 0 / THE "NON-REAL" SET-UP-VALUE / ---------------------------------------------------------------------------- / NOTE: that return from a PR3 request is with the ac=???? (unknown) / --yes it's sloppy so we must "CLA" after each PR3 sequence / PR3= 6236 / firmware "PANEL REQUEST" #3 / ---------------------------------------------------------------------------- / NOTE: "MNSECN" is not applicable for DECmate II / (because only one communications port on DECmate II) / / --------------------------------- / SET-UP-VALUE, | |H05| 6 | 7 | 8 | 9 | 10|H11| / --------------------------------- / | | | | | | | / | | | | | | SCREEN WIDTH (0=80, 1=132) / | | | | | | / | | | | | Cursor style (0=block, 1=underline) / | | | | Cursor Visibility (0=visible, 1=invis.) / | | | Scrolling (0=fast, 1=slow) / | | Screen Mode (0=Normal, 1=reverse) / | keyboard keyclick (0=ON, 1=OFF) / | / TERMINAL MODE (0=ANSI, 1=VT52) / / NOTE: that bit positions H05 and H11 are not modified within "SETUP" / because 132 column mode is a function of the EDITOR wide ruler / and terminal mode is set in the Systems Options Menu / they are only defined here to correspond to the hardware bit positions / within program location 24 of field 0 of panel memory, / / program location 25 is the printer baud rate (bits 8-11), / program location 26 is the comm baud rate (bits 8-11). SETUPV=MNSECN-MNABRV+CU4BF1 / DEFINE LOCATION FOR SET-UP-VALUES X=. / INDICATE FIRST FREE LOCATION ON PAGE /----------- PAGE / "SETUP" screen display /line1 TERMINAL CHARACTERISTIC SETUP MENU (single height/double width) /line2 /line3 /line4 Cursor Style Block Underline /line5 Cursor Visibility Visible Invisible /line6 Scrolling Jump Smooth /line7 Screen Mode Normal Reverse /line8 Keyclick ON OFF /line9 /line10 /line11 Press ADVANCE or BACKUP to step thru the selections, /line12 SEL to select a terminal characteristic, /line13 /line15 RETURN to leave this menu, using characteristice until next SETUP, /line16 ENTER to leave this menu, fixing characteristice until next ENTER, /line17 DO to use a new system diskette. /line18 /line19 Terminal Mode is set to a ?????? and may be changed in the /line20 SO (System Options) menu. /line22 The Printer is set to ???? baud. /line23 Communications is set to ???? baud. /line24 Baud rates may be changed in the SO CC (Communication Settings) menu, /line24 / ENTER here from "MAIN MENU" SETUP, XX / AC0001 / Set flag active /A018 CDFSYS / Point to System field /A018 DCA I (STUACF) / And say SETUP is active /A018 CDFMYF / now back to here /A018 / READ the "systems options" disk block (DLSVAL) / TAD (RXERD) / "READ" the systems option block (DLSVAL) JMS CU4ST / (into "CU4BF1") / / setup lines 19, 22, and 23 / / /D013 AC6000 / /D013 AND I (MNPRTB-MNABRV+CU4BF1) /D013 CLL RTL / /D013 RAL / TAD I (MNPRTB-MNABRV+CU4BF1) / FETCH PACKED WORD /A013 RTL / TM IS NOW 3 BITS /A013 RTL / /A013 AND (7) / /A013 TAD (TMTABL) / TERMINAL MODE TABLE DCA LIN19B / TAD I (MNPRTB-MNABRV+CU4BF1) AND K0017 / TAD (BAUDTB) / BAUD RATE TABLE DCA LIN22B / PRINTER BAUD RATE FROM USER "SO CC" SELECTION TAD I (MNPRIM-MNABRV+CU4BF1) AND K0017 / TAD (BAUDTB) / BAUD RATE TABLE DCA LIN23B / COMM BAUD RATE FROM USER "SO CC" SELECTION JMS INVISI / (make the cursor "INVISIBLE" for SETUP menu) CIFMNU / CHANGE TO MENU FIELD JMS I IOACAL / CALL SYSTEM ROUTINE TO DISPLAY MESSAGE 0 / USE DEFAULT OUTPUT ROUTINE SETUPC / IOA "control" string IFDEF ENGLSH < ERASE / ^A 0101 / ^P / (really 0102 because of "double width" text) LIN1X / ^A / (ESC seq makes single height/double width) LIN1 / ^S / USER SELECTIONS MENU 0410; LIN4A / ^P ^S / Cursor Style 0510; LIN6A / ^P ^S / Scrolling 0610; LIN7A / ^P ^S / Screen Mode 0710; LIN8A / ^P ^S / keyclick / --------------------------------------------------------------------------- 1202; LIN11 / ^P ^S / 'PRESS ADVANCE...ETC.' 1302; LIN12 / ^P ^S / 'SEL TO SELECT...ETC.' 1502; LIN14 / ^P ^S / 'PRESS:' 1610; LIN15 / ^P ^S / 'RETURN TO LEAVE...ETC.' 1710; LIN16 / ^P ^S / 'ENTER TO LEAVE...ETC.' 2010; LIN17 / ^P ^S / 'DO TO USE...ETC.' / --------------------------------------------------------------------------- 2202; LIN19L / ^P ^S / SETRVS / ^A / LIN19B, 0 / !S / TERMINAL MODE user selection from "SO" CLRRVS / ^A / LIN19R / ^S / 2302; LIN20 / ^P^S / / --------------------------------------------------------------------------- 2502; LIN22L / ^P ^S / SETRVS / ^A / LIN22B, 0 / !S / PRINTER BAUD RATE user selection from "SO CC" CLRRVS / ^A / LIN22R / ^S / / --------------------------------------------------------------------------- 2602; LIN23L / ^P ^S / SETRVS / ^A / LIN23B, 0 / !S / COMM BAUD RATE user selection from "SO CC" CLRRVS / ^A / LIN23R / ^S / 2702; LIN24 / ^P ^S / > IFDEF ITALIAN < ERASE / ^A 0105 / ^P / (really 0102 because of "double width" text) LIN1X / ^A / (ESC seq makes single height/double width) LIN1 / ^S / USER SELECTIONS MENU 0310; LIN3A / ^P ^S / Cursor Style 0410; LIN4A / ^P ^S / Scrolling 0510; LIN5A / ^P ^S / Screen Mode 0610; LIN6A / ^P ^S / keyclick / --------------------------------------------------------------------------- 1001; LIN8 / ^P ^S / 'PREMERE:' 1110; LIN9 / ^P ^S / 'AVANTI O INDIETRO...ETC.' 1210; LIN10 / ^P ^S / 'DESIDERATA.' 1310; LIN11 / ^P NS)MENU 0310; LIN3A / ^P ^S / Cursor Style 0410; LIN4A / ^P ^S / Scrolling 0510; LIN5A / ^P ^S / Screen Mode 0610; LIN6A / ^P ^S / keyclick / --------------------------------------------------------------------------- 1001; LIN8 / ^P ^S / 'PREMERE:' 1110; LIN9 / ^P ^S / 'AVANTI O INDIETRO...E---------- 2101; LIN17L / ^P ^S / SETRVS / ^A / LIN19B, 0 / !S / TERMINAL MODE user selection from "SO" CLRRVS / ^A / LIN17R / ^S / / --------------------------------------------------------------------------- 2201; LIN18L / ^P ^S / SETRVS / ^A / LIN22B, 0 / !S / PRINTER BAUD RATE user selection from "SO CC" CLRRVS / ^A / LIN18R / ^S / / --------------------------------------------------------------------------- 2301; LIN19L / ^P ^S / SETRVS / ^A / LIN23B, 0 / !S / COMM BAUD RATE user selection from "SO CC" CLRRVS / ^A / LIN19R / ^S / / --------------------------------------------------------------------------- 2401; LIN20 / ^P ^S / IL TIPO TERMINALE...ETC. 2501; LIN21 / ^P ^S / IS (IMPOSTAZIONE SISTEMA)...ETC. 2601; LIN22 / ^P ^S / LE AELOCITA'...ETC. 2701; LIN23 / ^P ^S / IS CS (PARAMETRI...ETC. > / -- end --order -- important --/ IFDEF V30NOR < ERASE / ^A 0101 / ^P / (really 0102 because of "double width" text) LIN1X / ^A / (ESC seq makes single height/double width) LIN1 / ^S / USER SELECTIONS MENU 0410; LIN4A / ^P ^S / Cursor Style 0510; LIN6A / ^P ^S / Scrolling 0610; LIN7A / ^P ^S / Screen Mode 0710; LIN8A / ^P ^S / keyclick / --------------------------------------------------------------------------- 1202; LIN11 / ^P ^S / 'PRESS ADVANCE...ETC.' 1302; LIN12 / ^P ^S / 'SEL TO SELECT...ETC.' 1502; LIN14 / ^P ^S / 'PRESS:' 1610; LIN15 / ^P ^S / 'RETURN TO LEAVE...ETC.' 1710; LIN16 / ^P ^S / 'ENTER TO LEAVE...ETC.' 2010; LIN17 / ^P ^S / 'DO TO USE...ETC.' / --------------------------------------------------------------------------- 2202; LIN19L / ^P ^S / SETRVS / ^A / LIN19B, 0 / !S / TERMINAL MODE user selection from "SO" CLRRVS / ^A / LIN19R / ^S / 2302; LIN20 / ^P^S / / --------------------------------------------------------------------------- 2502; LIN22L / ^P ^S / SETRVS / ^A / LIN22B, 0 / !S / PRINTER BAUD RATE user selection from "SO CC" CLRRVS / ^A / LIN22R / ^S / / --------------------------------------------------------------------------- 2602; LIN23L / ^P ^S / SETRVS / ^A / LIN23B, 0 / !S / COMM BAUD RATE user selection from "SO CC" CLRRVS / ^A / LIN23R / ^S / 2702; LIN24 / ^P ^S / > IFDEF V30SWE < ERASE / ^A 0101 / ^P / (really 0102 because of "double width" text) LIN1X / ^A / (ESC seq makes single height/double width) LIN1 / ^S / USER SELECTIONS MENU 0410; LIN4A / ^P ^S / Cursor Style 0510; LIN6A / ^P ^S / Scrolling 0610; LIN7A / ^P ^S / Screen Mode 0710; LIN8A / ^P ^S / keyclick / --------------------------------------------------------------------------- 1202; LIN11 / ^P ^S / 'PRESS ADVANCE...ETC.' 1302; LIN12 / ^P ^S / 'SEL TO SELECT...ETC.' 1502; LIN14 / ^P ^S / 'PRESS:' 1610; LIN15 / ^P ^S / 'RETURN TO LEAVE...ETC.' 1710; LIN16 / ^P ^S / 'ENTER TO LEAVE...ETC.' 2010; LIN17 / ^P ^S / 'DO TO USE...ETC.' / --------------------------------------------------------------------------- 2202; LIN19L / ^P ^S / SETRVS / ^A / LIN19B, 0 / !S / TERMINAL MODE user selection from "SO" CLRRVS / ^A / LIN19R / ^S / 2302; LIN20 / ^P^S / / --------------------------------------------------------------------------- 2502; LIN22L / ^P ^S / SETRVS / ^A / LIN22B, 0 / !S / PRINTER BAUD RATE user selection from "SO CC" CLRRVS / ^A / LIN22R / ^S / / --------------------------------------------------------------------------- 2602; LIN23L / ^P ^S / SETRVS / ^A / LIN23B, 0 / !S / COMM BAUD RATE user selection from "SO CC" CLRRVS / ^A / LIN23R / ^S / 2702; LIN24 / ^P ^S / > / END IFDEF V30SWE IFDEF SPANISH < ERASE / ^A 0101 / ^P / (really 0102 because of "double width" text) LIN1X / ^A / (ESC seq makes single height/double width) LIN1 / ^S / USER SELECTIONS MENU 0410; LIN4A / ^P ^S / Cursor Style 0510; LIN6A / ^P ^S / Scrolling 0610; LIN7A / ^P ^S / Screen Mode 0710; LIN8A / ^P ^S / keyclick / --------------------------------------------------------------------------- 1202; LIN11 / ^P ^S / 'PRESS ADVANCE...ETC.' 1302; LIN12 / ^P ^S / 'SEL TO SELECT...ETC.' 1502; LIN14 / ^P ^S / 'PRESS:' 1610; LIN15 / ^P ^S / 'RETURN TO LEAVE...ETC.' 1710; LIN16 / ^P ^S / 'ENTER TO LEAVE...ETC.' 2010; LIN17 / ^P ^S / 'DO TO USE...ETC.' / --------------------------------------------------------------------------- 2202; LIN19L / ^P ^S / SETRVS / ^A / LIN19B, 0 / !S / TERMINAL MODE user selection from "SO" CLRRVS / ^A / LIN19R / ^S / 2302; LIN20 / ^P^S / / --------------------------------------------------------------------------- 2502; LIN22L / ^P ^S / SETRVS / ^A / LIN22B, 0 / !S / PRINTER BAUD RATE user selection from "SO CC" CLRRVS / ^A / LIN22R / ^S / / --------------------------------------------------------------------------- 2602; LIN23L/ ^P ^S / SETRVS / ^A / LIN23B, 0 / !S / COMM BAUD RATE user selection from "SO CC" CLRRVS / ^A / LIN23R / ^S / 2702; LIN24 / ^P ^S / > IFDEF FRENCH < ERASE / ^A 0101 / ^P / (really 0102 because of "double width" text) LIN1X / ^A / (ESC seq makes single height/double width) LIN1 / ^S / USER SELECTIONS MENU 0410; LIN4A / ^P ^S / Cursor Style 0510; LIN6A / ^P ^S / Scrolling 0610; LIN7A / ^P ^S / Screen Mode 0710; LIN8A / ^P ^S / keyclick / --------------------------------------------------------------------------- 1202; LIN11 / ^P ^S / 'PRESS ADVANCE...ETC.' 1302; LIN12 / ^P ^S / 'SEL TO SELECT...ETC.' 1502; LIN14 / ^P ^S / 'PRESS:' 1610; LIN15 / ^P ^S / 'RETURN TO LEAVE...ETC.' 1710; LIN16 / ^P ^S / 'ENTER TO LEAVE...ETC.' 2010; LIN17 / ^P ^S / 'DO TO USE...ETC.' / --------------------------------------------------------------------------- 2202; LIN19L / ^P ^S / SETRVS / ^A / LIN19B, 0 / !S / TERMINAL MODE user selection from "SO" CLRRVS / ^A / LIN19R / ^S / 2302; LIN20 / ^P^S / / --------------------------------------------------------------------------- 2502; LIN22L / ^P ^S / SETRVS / ^A / LIN22B, 0 / !S / PRINTER BAUD RATE user selection from "SO CC" CLRRVS / ^A / LIN22R / ^S / / --------------------------------------------------------------------------- 2602; LIN23L / ^P ^S / SETRVS / ^A / LIN23B, 0 / !S / COMM BAUD RATE user selection from "SO CC" CLRRVS / ^A / LIN23R / ^S / 2702; LIN24 / ^P ^S / > IFDEF DUTCH < ERASE / ^A 0101 / ^P / (really 0102 because of "double width" text) LIN1X / ^A / (ESC seq makes single height/double width) LIN1 / ^S / USER SELECTIONS MENU 0410; LIN4A / ^P ^S / Cursor Style 0510; LIN6A / ^P ^S / Scrolling 0610; LIN7A / ^P ^S / Screen Mode 0710; LIN8A / ^P ^S / keyclick / --------------------------------------------------------------------------- 1202; LIN11 / ^P ^S / 'PRESS ADVANCE...ETC.' 1302; LIN12 / ^P ^S / 'SEL TO SELECT...ETC.' 1502; LIN14 / ^P ^S / 'PRESS:' 1610; LIN15 / ^P ^S / 'RETURN TO LEAVE...ETC.' 1710; LIN16 / ^P ^S / 'ENTER TO LEAVE...ETC.' 2010; LIN17 / ^P ^S / 'DO TO USE...ETC.' / --------------------------------------------------------------------------- 2202; LIN19L / ^P ^S / SETRVS / ^A / LIN19B, 0 / !S / TERMINAL MODE user selection from "SO" CLRRVS / ^A / LIN19R / ^S / 2302; LIN20 / ^P^S / / --------------------------------------------------------------------------- 2502; LIN22L / ^P ^S / SETRVS / ^A / LIN22B, 0 / !S / PRINTER BAUD RATE user selection from "SO CC" CLRRVS / ^A / LIN22R / ^S / / --------------------------------------------------------------------------- 2602; LIN23L / ^P ^S / SETRVS / ^A / LIN23B, 0 / !S / COMM BAUD RATE user selection from "SO CC" CLRRVS / ^A / LIN23R / ^S / 2702; LIN24 / ^P ^S / > TAD SETUPV / GET "GLOBAL" VALUE AND (7703) / SAVE BITS DCA T4 / TAD SETUPV / AND (0070) / GET "SETUP" BITS RAR / MOVE TO ALIGN WITH DISPLAY TAD T4 / RESTORE OTHER BITS DCA SETUVL / STORE FOR THIS ROUTINE "LOCAL" JMP LOOP / / E X I T terminal characteristics "SETUP" mode EXIT, CLA / Get rid of the crap /A018 CDFSYS / Point to system field /A018 DCA I (STUACF) / Clear SETUP busy flag /A018 CDIMNU / CHANGE DATA AND INSTRUCTION FIELD JMP I SETUP / BACK TO MAIN MENU X=. / INDICATE FIRST FREE LOCATION ON PAGE /----------- PAGE / Fill in the "BLANKS" of the screen display LOOP, TAD CURSOR / CMA / DCA T4 / TAD (BLANKT) / BLANK TABLE DCA BLANKP / BLANK POSSITION TAD BLANKP / IAC / DCA BLANKL / BLANK LINE NUMBER TAD SETUVL / LOCAL SET-UP-VALUES WORD DCA T1 / TAD (ENDBLA-BLANKT%4) / CIA / DCA T2 / -6 /-4 LOOPA, TAD (-2) / DCA T3 / AC0002 / AND T1 / SNA CLA / JMS SETRV / Force only "REVERSE VIDEO" attribute JMP .+5 / LOOPB, AC0002 / AND T1 / SZA CLA / JMS SETRV / Force only "REVERSE VIDEO" attribute ISZ T4 / SKP CLA / JMS SETBLI / Append "BLINK" to active cursor position CIFMNU / CHANGE TO MENU FIELD JMS I IOACAL / CALL SYSTEM DISPLAY ROUTINE 0 / USE DEFAULT OUTPUT ROUTINE BLANKC / (Control string for blank lines) BLANKP, ZBLOCK 1 / !P / ADDRESS OF "^P" POSITION BLANKL, ZBLOCK 1 / !S / "ADDRESS OF ADDRESS" OF STRING JMS CLRRV / Set video to NORMAL AC0002 / TAD BLANKP / DCA BLANKP / AC0002 / TAD BLANKL / DCA BLANKL / ISZ T3 / JMP LOOPB / JMS T1DIV2 / ISZ T2 / JMP LOOPA / JMP LOOPC / CIFSYS JWAIT / LOOPC, CIFSYS XLTIN / JMP .-4 / TAD (-EDNWLN) / SNA / JMP KEYRET / User pressed "RETURN" TAD (EDNWLN-EDUDKY) / Fixed DO key to be USK key while I was / here /M017 SNA / JMP KEYDO / User pressed "DO" TAD (EDUDKY-EDSLCT) / SNA / JMP KEYSEL / User pressed "SELECT" TAD (EDSLCT-EDENTR) / SNA / JMP KEYENT / User pressed "ENTER" TAD (EDENTR-EDADVN) / SNA / JMP .+5 / User pressed "ADVANCE" (or "right arrow") TAD (EDADVN-EDBKUP) / SZA CLA / JMP LOOPC / User pressed an unknown key AC7776 / -2 / User pressed "BACKUP" IAC / +1 / AC = +1 OR -1 now TAD CURSOR / SPA / TAD (ENDBLA-BLANKT%2) / DCA CURSOR / TAD (ENDBLA-BLANKT%2-1)/ CIA / TAD CURSOR / SMA SZA CLA / DCA CURSOR / "Cursor position" = 0 now JMP LOOP / / The user pressed key "ENTER" KEYENT, TAD (RXEWT) / "WRITE" SYSTEM OPTION BLOCK (DLSVAL) JMS CU4ST / / Put the "setupvalues" into program location "mubuf+mnsecn" / (else when the user goes into the "SO" menu it will be clobbered) / The user pressed key "RETURN" KEYRET, JMP SETTC / Set the terminal characteristics / The user typed "SELECT" / IF the cursorposition is ODD then clear left column / ELSE the cursor position is EVEN to clear right column KEYSEL, TAD CURSOR / CLL RAR / (Divide by 2 gets "line #") CMA / DCA T4 / STL / RAL / RAL / ISZ T4 / JMP .-2 / DCA T4 / TAD CURSOR / CLL RAR / (Link is used) CLA / TAD T4 / CMA / AND SETUVL / LOCAL SET-UP-VALUES SZL / TAD T4 / DCA SETUVL / JMP REMAP / / ROTATE THE CONTENTS OF PROGRAM LOCATION "T1" ONCE TO THE RIGHT T1DIV2, XX / TAD T1 / CLL RAR / DCA T1 / JMP I T1DIV2 / X=. / INDICATE FIRST FREE LOCATION ON PAGE /----------- PAGE / REMAP BITS FROM SETUPV,TO CONFORM WITH / NEW DISPLAY (NO 'CURSOR VISIBILITY') REMAP, CLL CLA / BE SURE TAD SETUVL / AND (7703) / M7703 SAVE ALL BITS BUT B7-B9 DCA T4 / STORE TAD SETUVL / AND (0034) / M0034, CAPTURE B7-B9 RAL / REPOSITION TO MATCH NEW DISPLAY TAD T4 / ADD IN UNCHANGED BITS DCA SETUPV / SAVE REMAPPED BITS IN THE "REAL" SETUPVALUE JMP LOOP / RETURN FROM 'SELECT' ROUTINE BLANKC, TEXT \!P!S\ / CONTROL STRING TO BLANK LINES BLANKT, IFDEF ITALIAN < /a016 0340; LIN3B / Block 0360; LIN3C / Underline 0440; LIN4B / Jump 0460; LIN4C / Smooth 0540; LIN5B / Normal 0560; LIN5C / Reverse 0640; LIN6B / ON 0660; LIN6C / OFF > /a016 IFDEF ENGLSH < /a016 0440; LIN4B / Block /a016 0460; LIN4C / Underline /a016 0540; LIN6B / Jump /a016 0560; LIN6C / Smooth /a016 0640; LIN7B / Normal /a016 0660; LIN7C / Reverse /a016 0740; LIN8B / ON /a016 0760; LIN8C / OFF /a016 > IFDEF V30NOR < 0440; LIN4B / Block /a016 0460; LIN4C / Underline /a016 0540; LIN6B / Jump /a016 0560; LIN6C / Smooth /a016 0640; LIN7B / Normal /a016 0660; LIN7C / Reverse /a016 0740; LIN8B / ON /a016 0760; LIN8C / OFF /a016 > IFDEF V30SWE < 0440; LIN4B / Block /a016 0460; LIN4C / Underline /a016 0540; LIN6B / Jump /a016 0560; LIN6C / Smooth /a016 0640; LIN7B / Normal /a016 0660; LIN7C / Reverse /a016 0740; LIN8B / ON /a016 0760; LIN8C / OFF /a016 > / END IFDEF V30SWE IFDEF DUTCH < 0440; LIN4B / Block /a016 0460; LIN4C / Underline /a016 0540; LIN6B / Jump /a016 0560; LIN6C / Smooth /a016 0640; LIN7B / Normal /a016 0660; LIN7C / Reverse /a016 0740; LIN8B / ON /a016 0760; LIN8C / OFF /a016 > / END IFDEF V30SWE IFDEF SPANISH < 0440; LIN4B / Block /a016 0460; LIN4C / Underline /a016 0540; LIN6B / Jump /a016 0560; LIN6C / Smooth /a016 0640; LIN7B / Normal /a016 0660; LIN7C / Reverse /a016 0740; LIN8B / ON /a016 0760; LIN8C / OFF /a016 > / END IFDEF V30SWE ENDBLA=. / END OF BLANK TABLE BAUDTB, B50; B75; B110; B134; B150; B300; B600; B1200 B1800; B2000; B2400; B3600; B4800; B7200; B9600; B19200 B50, TEXT \50\ B75, TEXT \75\ B110, TEXT \110\ B134, TEXT \134.5\ B150, TEXT \150\ B300, TEXT \300\ B600, TEXT \600\ B1200, TEXT \1200\ B1800, TEXT \1800\ B2000, TEXT \2000\ B2400, TEXT \2400\ B3600, TEXT \3600\ B4800, TEXT \4800\ B7200, TEXT \7200\ B9600, TEXT \9600\ B19200, TEXT \19200\ PAGE CU4ST, XX DCA QUQBLK+RXQFNC / SET THE FUNCTION CDFMYF TAD .-1 / SET THE DATA FIELD TO THIS FIELD DCA QUQBLK+RXQBFD DCA QUQBLK+RXQDRV / SET THE DRIVE TO ZERO TAD (DLSVAL) / SET THE BLOCK TO READ DCA QUQBLK+RXQBLK TAD (CU4BF1) / SET THE BUFFER TO READ INTO DCA QUQBLK+RXQBAD JMS QURX / GET THE BLOCK CLA JMP I CU4ST / THIS IS THE QUEUE ROUTINE TO RXHAN. THE REQUEST IS IN QUQBLK / USED BY DELETE AND SYSTEM OPTIONS QURX, XX CIFSYS / ++++ ENQUE / ++++ QUBLK CIFSYS / ++++ JWAIT TAD QUQBLK+RXQCOD SNA / ++++ JMP .-4 JMP I QURX QUBLK, DSKQUE / ++++ 0 / ++++ 0 QUQBLK, ZBLOCK 17 / This code issues a PR3 request to panel memory to set the WPS user / defined terminal characteristics into panel memory program locations / 24, 25, and 26 thereby powering up to the WPS characteristics /d016PR3= 6236 / PANEL MEMORY REQUEST SEQUENCE #3 / set the wps defined terminal characteristice into the terminal / REMEMBERING THAT SCREEN WIDTH IS FORCED TO 80 COLUMNS / AND TERMINAL MODE IS FORCED TO ANSI SETTC, TAD SETUPV / GET THE REMAPPED BITS CDFMNU DCA I (MUBUF+MNSECN) / TAD I (MUBUF+MNSECN) / Terminal characterics from "SETUP" TAD (1200) / Set to Lvl 2 , 8 bit /A014 DCA PRQBLK / TERMINAL CHARACTERISTICS TAD I (MUBUF+MNPRTB) / Printer baud rate AND K0017 / DCA PRQBLK+1 / PRINTER BAUD RATE TAD I (MUBUF+MNPRIM) / Communications baud rate AND K0017 / DCA PRQBLK+2 / COMMUNICATIONS BAUD RATE CDFMYF PRQ3 / EXECUTE PANEL REQUEST /a016 4003 / 40 (dest field 0) (src field 3) PRQBLK / Source starting address 24 / Destination starting address -3 / Three words to move 7777 / PR3 terminator CLA / (Just in case ac dirty after prq) / issue the escape sequence "ESC c" to the terminal / which will 'reset the terminal characteristics' CIFMNU / CHANGE TO MENU FIELD JMS I IOACAL / CALL SYSTEM OUTPUT ROUTINE 0 / USE DEFAULT OUTPUT ROUTINE CONTRL / RESTOR / JMP EXIT / EXIT setup mode RESTOR, ESC; "c&177; 0 / RESTORE TERMINAL CHARACTERISTIC SEQ PRQBLK, ZBLOCK 3 / The user pressed key "DO" / (Issue a PRQ3 request to the firmware to reboot the system /m016 KEYDO, AC0000; 6750 / Select diskette drive pair 0 AC0000 / PRQ3 / /m016 5 / 7777 / Terminator HLT / SHOULD NEVER HALT HERE X=. / INDICATE FIRST FREE LOCATION ON PAGE /----------- PAGE / SET REVERSE VIDEO for active cursor position SETRV, XX / CIFMNU / JMS I IOACAL / 0 / CONTRL / SETRVS / JMP I SETRV / / CONTRL, TEXT \^A\ / SETRVS, ESC; "[&177; "0&177; ";&177; "7&177; "m&177; 0 / CLEAR ALL ATTRIBUTES for active cursor position CLRRV, XX / CIFMNU / JMS I IOACAL / 0 / CONTRL / CLRRVS / JMP I CLRRV / / CLRRVS, ESC; "[&177; "0&177; "m&177; 0 / SET CURSOR INVISIBLE INVISI, XX CIFMNU JMS I IOACAL 0 CONTRL CURS0R JMP I INVISIBLE / CURS0R, ESC; "[&177; "?&177; "2&177; "5&177; "l&177; 0 / SET CURSOR VISIBLE VISIBL, XX / CIFMNU / JMS I IOACAL / 0 / CONTRL / CURS1R / JMP I VISIBLE / / CURS1R, ESC; "[&177; "?&177; "2&177; "5&177; "h&177; 0 / APPEND "BLINK" and "BOLD" attributes for the active cursor position SETBLI, XX / CIFMNU / JMS I IOACAL / 0 / CONTRL / SETSEQ / JMP I SETBLINK / / SETSEQ, / (bold) (blink) ESC; "[&177; "1&177; ";&177; "5&177; "m&177; 0 SETCHA, XX / DCA .+5 / CIFMNU / JMS I IOACAL / 0 / CONTRL / ^A / ZBLOCK 1 / JMP I SETCHA / ------ / |NOTE| - 80 COLUMN is forced cause 132 column is a function of "wide ruler" / ------ COL80S, / Screen width / 80 ESC; "[&177; "?&177; "3&177; "l&177; 0 / -------- ORDER IMPORTANT -------- / VSEQUE, / Cursor visibility / Visible ESC; "[&177; "?&177; "2&177; "5&177; "h&177; 0 / Invisible ESC; "[&177; "?&177; "2&177; "5&177; "l&177; 0 SCRLSE, / Scroll mode / Fast ESC; "[&177; "?&177; "4&177; "l&177; 0 / Slow ESC; "[&177; "?&177; "4&177; "h&177; 0 MODESE, / Video / Normal ESC; "[&177; "?&177; "5&177; "l&177; 0 / Reverse ESC; "[&177; "?&177; "5&177; "h&177; 0 / ---- END ORDER IMPORTANT ---- IFDEF ENGLSH < SETUPC, / TEXT \^A\ / CONTROL for erase screen *.-1 TEXT \^P^A^S\ / CONTROL for single H/double W *.-1 TEXT \^P^S\ / CONTROL for line 4 *.-1 TEXT \^P^S\ / CONTROL for lines 5 and 6 /D011 *.-1 TEXT \^P^S^P^S\ / CONTROL for lines 7 and 8 *.-1 TEXT \^P^S^P^S^P^S^P^S^P^S^P^S\ / CONTROL for 11,12,14,15,16,17 *.-1 TEXT \^P^S^A!S^A^S^P^S\/ CONTROL for line 19 (L and R) and 20 *.-1 TEXT \^P^S^A!S^A^S\ / CONTROL for line 22 (L AND R) *.-1 TEXT \^P^S^A!S^A^S\ / CONTROL for line 23 (L AND R) *.-1 TEXT \^P^S\ / CONTROL for line 24 ERASE, ESC; 74 / Set VT100 (ANSI) mode ESC; "[&177; "2&177; "J&177; 0 / ERASE entire screen LIN1X, ESC; "#&177; "6&177; 0 / (Text is single H/double W) LIN1, TEXT \&T&E&R&M&I&N&A&L &C&H&A&R&A&C&T&E&R&I&S&T&I&C&S &S&E&T&U&P &M&E&N&U\ LIN4A, TEXT \&CURSOR &STYLE\ LIN4B, TEXT \&BLOCK\ LIN4C, TEXT \&UNDERLINE\ LIN6A, TEXT \&SCROLLING\ LIN6B, TEXT \&JUMP\ LIN6C, TEXT \&SMOOTH\ LIN7A, TEXT \&SCREEN &BACKGROUND\ LIN7B, TEXT \&BLACK\ LIN7C, TEXT \&WHITE\ LIN8A, TEXT \&KEYCLICK\ LIN8B, TEXT \&ON\ LIN8C, TEXT \&OFF\ LIN11, TEXT \&PRESS &A&D&V&A&N&C&E OR &B&A&C&K&U&P TO\ *.-1 TEXT \ STEP THRU THE SELECTIONS, AND PRESS\ LIN12, TEXT \&S&E&L TO SELECT A TERMINAL CHARACTERISTIC.\ LIN14, TEXT \&PRESS:\ LIN15, TEXT \&R&E&T&U&R&N TO LEAVE THIS MENU \ *.-1 TEXT \(USING CHARACTERISTICS FOR THIS SESSION).\ LIN16, TEXT \&E&N&T&E&R TO LEAVE THIS MENU \ *.-1 TEXT \(STORING CHARACTERISTICS). \ LIN17, TEXT \&D&O TO USE A NEW SYSTEM DISKETTE.\ LIN19L, TEXT \&TERMINAL &MODE IS SET TO TYPE \ /M015 LIN19R, TEXT \ AND MAY BE CHANGED IN THE\ LIN20, TEXT \&S&O (&SYSTEM &OPTIONS) MENU.\ LIN22L, TEXT \&THE PRINTER IS SET TO \ LIN23R, / LIN22R, TEXT \ BAUD.\ LIN23L, TEXT \&COMMUNICATION IS SET TO \ LIN24, TEXT \&BAUD RATES MAY BE CHANGED IN THE &S&O &C&C \ *.-1 TEXT \(&COMMUNICATION &SETTINGS) &SUBMENU.\ LIN23, / replaced edit /a016 > IFDEF ITALIAN < SETUPC, / TEXT \^A\ / CONTROL for erase screen *.-1 TEXT \^P^A^S\ / CONTROL for single H/double W *.-1 TEXT \^P^S\ / CONTROL for line 1 *.-1 TEXT \^P^S\ / CONTROL for lines 3 and 4 /D011 *.-1 TEXT \^P^S^P^S\ / CONTROL for lines 5 and 6 *.-1 TEXT \^P^S^P^S^P^S^P^S^P^S^P^S\ / CONTROL for 8,9,10,11,12,13 *.-1 TEXT \^P^S^P^S\ / CONTROL for lines 14 and 15 *.-1 TEXT \^P^S^A!S^A^S\/ CONTROL for line 17 (L and R) *.-1 TEXT \^P^S^A!S^A^S\ / CONTROL for line 18 (L AND R) *.-1 TEXT \^P^S^A!S^A^S\ / CONTROL for line 19 (L AND R) *.-1 TEXT \^P^S\ / CONTROL for line 21 *.-1 TEXT \^P^S\ / CONTROL for line 22 *.-1 TEXT \^P^S^P^S\ / CONTROL for line 23,24 ERASE, ESC; 74 / Set VT100 (ANSI) mode ESC; "[&177; "2&177; "J&177; 0 / ERASE entire screen LIN1X, 0 / (Text is single H/double W) LIN1, TEXT \-- !&MENU !&DI !&IMPOSTAZIONE !&CARATTERISTICHE !&TERMINALE --\ LIN3A, TEXT \&TIPO CURSORE\ / cursor style /a016 LIN3B, TEXT \&BLOCCO\ / block /a016 LIN3C, TEXT \&TRATTINO\ / Underline /a016 LIN4A, TEXT \&SCORRIMENTO IMMAGINE\ / Scroll /a016 LIN4B, TEXT \&VELOCE\ / jump /a016 LIN4C, TEXT \&LENTO\ / smooth /a016 LIN5A, TEXT \&SFONDO VIDEO\ / screen background /a016 LIN5B, TEXT \&NORMALE\ / black/normal /a016 LIN5C, TEXT \&INVERSO\ / white/inverse /a016 LIN6A, TEXT \&RUMORE DEI TASTI\ / keyclick /a016 LIN6B, TEXT \&ABILITATO\ / on /a016 LIN6C, TEXT \&DISABILITATO\ / off /a016 LIN8, TEXT \&PREMERE:\ LIN9, TEXT /!&AVANTI O !&INDIETRO PER POSIZIONARE IL CURSORE SULLA CARATTERISTICA/ LIN10, TEXT /DESIDERATA./ LIN11, TEXT \!&SELEZ PER RENDERE EFFETTIVA LA SCELTA FATTA.\ LIN12, TEXT \!&RITORNO PER USCIRE DAL MENU, UTILIZZANDO LE CARATTERISTICHE SCELTE\ LIN13, TEXT \PER LA SESSIONE DI LAVORO CORRENTE.\ LIN14, TEXT \!&INVIO PER USCIRE DAL MENU MEMORIZZANDO LE CARATTERISTICHE SELEZIONATE.\ LIN15, TEXT \!&ESECUZIONE PER UTILIZZARE UN NUOVO DISCHETTO SISTEMA.\ LIN17L, TEXT \&TIPO &TERMINALE : \ /M015 LIN17R, TEXT \.\ LIN18L, TEXT /&VELOCIT\@ DELLA STAMPANTE: / LIN19R, / LIN18R, TEXT \ BAUD.\ /m016 LIN19L, TEXT /&VELOCIT\@ DI TRASMISSIONE: / LIN20, TEXT /&IL &TIPO &TERMINALE PU\R ESSERE MODIFICATO UTILIZZANDO L'OPZIONE / LIN21, TEXT \!&IS (&IMPOSTAZIONE &SISTEMA) DEL &MENU &PRINCIPALE.\ LIN22, TEXT /&LE VELOCIT\@ POSSONO ESSERE MODIFICATE UTILIZZANDO L'OPZIONE/ LIN23, TEXT /!&IS !&CS (&PARAMETRI DI &COMUNICAZIONE E &STAMPA)./ > IFDEF V30NOR < SETUPC, / TEXT \^A\ / CONTROL for erase screen *.-1 TEXT \^P^A^S\ / CONTROL for single H/double W *.-1 TEXT \^P^S\ / CONTROL for line 4 *.-1 TEXT \^P^S\ / CONTROL for lines 5 and 6 /D011 *.-1 TEXT \^P^S^P^S\ / CONTROL for lines 7 and 8 *.-1 TEXT \^P^S^P^S^P^S^P^S^P^S^P^S\ / CONTROL for 11,12,14,15,16,17 *.-1 TEXT \^P^S^A!S^A^S^P^S\/ CONTROL for line 19 (L and R) and 20 *.-1 TEXT \^P^S^A!S^A^S\ / CONTROL for line 22 (L AND R) *.-1 TEXT \^P^S^A!S^A^S\ / CONTROL for line 23 (L AND R) *.-1 TEXT \^P^S\ / CONTROL for line 24 ERASE, ESC; 74 / Set VT100 (ANSI) mode ESC; "[&177; "2&177; "J&177; 0 / ERASE entire screen LIN1X, ESC; "#&177; "6&177; 0 / (Text is single H/double W) LIN1, TEXT '!&TERMINAL-!&OPPSETT' LIN4A, TEXT '&MARK\XTYPE' LIN4B, TEXT '&BLOKK' LIN4C, TEXT '&UNDERSTREK' LIN6A, TEXT '&RULLING' LIN6B, TEXT '&RYKK' LIN6C, TEXT '&JEVN' LIN7A, TEXT '&BAKGRUNN' LIN7B, TEXT '&M\XRK' LIN7C, TEXT '&LYS' LIN8A, TEXT '&TASTEKLIKK' LIN8B, TEXT '&P\E' LIN8C, TEXT '&AV' LIN11, TEXT '&TRYKK P\E !&FREM EL. !&TILBAKE FOR \E' *.-1 TEXT ' FLYTTE DEG MELLOM ALTERNATIVENE. &TRYKK P\E' LIN12, TEXT '!&VELG FOR \E VELGE ET ALTERNATIV.' LIN14, TEXT '&TRYKK P\E:' LIN15, TEXT '!&RETUR FOR \E G\E UT AV MENYEN ' *.-1 TEXT '(OG BRUKE OPPSETTET MIDLERTIDIG).' LIN16, TEXT '!&LEGG !&INN FOR \E G\E UT AV MENYEN ' *.-1 TEXT '(OG LAGRE OPPSETTET). ' LIN17, TEXT '!&UTF\XR HVIS DU HARR SATT INN EN NY SYSTEMDISKETT.' LIN19L, TEXT '&TERMINALMODUS ER SATT TIL' /M015 LIN19R, TEXT ' OG KAN ENDRES I MENYN ' LIN20, TEXT '&&ENDRE SYSTEMVERDIER (!&ES).' LIN22L, TEXT '&SKRIVER: ' LIN23R, / LIN22R, TEXT ' BAUD.' LIN23L, TEXT '&KOMMUNIKASJON: ' LIN24, TEXT '&OVERF\XRINGSHASTIGHETENE KAN ENDRES MED !&ES/!&EK I' *.-1 TEXT ' MENYEN &ENDRE KOMMUNIKASJONSVERDIER.' LIN23, / replaced edit /a016 > IFDEF V30SWE < SETUPC, / TEXT \^A\ / CONTROL for erase screen *.-1 TEXT \^P^A^S\ / CONTROL for single H/double W *.-1 TEXT \^P^S\ / CONTROL for line 4 *.-1 TEXT \^P^S\ / CONTROL for lines 5 and 6 /D011 *.-1 TEXT \^P^S^P^S\ / CONTROL for lines 7 and 8 *.-1 TEXT \^P^S^P^S^P^S^P^S^P^S^P^S\ / CONTROL for 11,12,14,15,16,17 *.-1 TEXT \^P^S^A!S^A^S^P^S\/ CONTROL for line 19 (L and R) and 20 *.-1 TEXT \^P^S^A!S^A^S\ / CONTROL for line 22 (L AND R) *.-1 TEXT \^P^S^A!S^A^S\ / CONTROL for line 23 (L AND R) *.-1 TEXT \^P^S\ / CONTROL for line 24 ERASE, ESC; 74 / Set VT100 (ANSI) mode ESC; "[&177; "2&177; "J&177; 0 / ERASE entire screen LIN1X, ESC; "#&177; "6&177; 0 / (Text is single H/double W) LIN1, TEXT '- !&VAL !&AV !&TERMINALINST\DLLNING -' LIN4A, TEXT '&MARK\VRENS UTSEENDE' LIN4B, TEXT '&BLOCK' LIN4C, TEXT '&UNDERSTRYKNING' LIN6A, TEXT '&BILDRULLNING' LIN6B, TEXT '&HOPPA' LIN6C, TEXT '&J\EMN' LIN7A, TEXT '&SK\DRMBILDENS BAKGRUNDSF\DRG' LIN7B, TEXT '&SVART' LIN7C, TEXT '&VIT' LIN8A, TEXT 'TANGENTBORDSSIGNAL' LIN8B, TEXT '&P\E' LIN8C, TEXT '&AV' LIN11, TEXT '&TRYCK P\E FRAM\ET ELLER BAK\ET F\VR ATT' *.-1 TEXT 'PLACERA MARK\VREN VID VALET, TRCK SEDAN P\E' LIN12, TEXT 'MARK F\VR ATT V\DLJA INST\DLLNING' LIN14, TEXT '&TRYCK P\E' LIN15, TEXT 'RETUR F\VR ATT \ETERGE TILL MENYN ' *.-1 TEXT 'ANV\DND G\DLLANDE INST\DLLNINGAR' LIN16, TEXT 'ENTER F\VR ATT KOMMA TILLBAKA TILL F\VRRA MENYN ' *.-1 TEXT '(LAGRA INST\DLLNINGAR)' LIN17, TEXT 'UTF\VR OM DU VILL ANV\DNDA EN NY SYSTEMDISKETT' LIN19L, TEXT '&TERMINALL\DGETS INST\DLLNING \DR' /M015 LIN19R, TEXT 'OCH KAN \DNDRAS' LIN20, TEXT 'I HUVUDMENYN UNDER !&SV (SYSTEMVAL)' LIN22L, TEXT '&SKRIVARENS INST\DLLNING \DR' LIN23R, / LIN22R, TEXT ' BAUD.' LIN23L, TEXT '&KOMMUNIKTIONSINST\DLLNINGEN \DR' LIN24, TEXT '&BAUDV\DRDET KAN \DNDRAS I HUVUDMENYN UNDER !&SV - !&IK ' *.-1 TEXT '(!&SYSTEMVAL -!&KOMMUNIKATIONS/ OCH SKRIVARUTG\ENGAR)' LIN23, / replaced edit /a016 > IFDEF DUTCH < SETUPC, / TEXT \^A\ / CONTROL for erase screen *.-1 TEXT \^P^A^S\ / CONTROL for single H/double W *.-1 TEXT \^P^S\ / CONTROL for line 4 *.-1 TEXT \^P^S\ / CONTROL for lines 5 and 6 /D011 *.-1 TEXT \^P^S^P^S\ / CONTROL for lines 7 and 8 *.-1 TEXT \^P^S^P^S^P^S^P^S^P^S^P^S\ / CONTROL for 11,12,14,15,16,17 *.-1 TEXT \^P^S^A!S^A^S^P^S\/ CONTROL for line 19 (L and R) and 20 *.-1 TEXT \^P^S^A!S^A^S\ / CONTROL for line 22 (L AND R) *.-1 TEXT \^P^S^A!S^A^S\ / CONTROL for line 23 (L AND R) *.-1 TEXT \^P^S\ / CONTROL for line 24 ERASE, ESC; 74 / Set VT100 (ANSI) mode ESC; "[&177; "2&177; "J&177; 0 / ERASE entire screen LIN1X, ESC; "#&177; "6&177; 0 / (Text is single H/double W) LIN1, TEXT \!&INSTELLINGEN !&VOOR &D&E !&TERMINAL\ LIN4A, TEXT \&CURSOR\ LIN4B, TEXT \&BLOKJE\ LIN4C, TEXT \&STREEPJE\ LIN6A, TEXT \&SCROLLEN\ LIN6B, TEXT \&SPRONGSGEWIJS\ LIN6C, TEXT \&GELIJKMATIG\ LIN7A, TEXT \&SCHERM \ LIN7B, TEXT \&ZWART\ LIN7C, TEXT \&WIT\ LIN8A, TEXT \&TOETSKLIK\ LIN8B, TEXT \&AAN\ LIN8C, TEXT \&UIT\ LIN11, TEXT \&DRUK OP !&VOORUIT OF !&TERUG OM LANGS DE OPTIES TE GAAN. \ LIN12, TEXT \&DRUK OP !&SELECT OM TE SELECTEREN.\ LIN14, TEXT \&DRUK OP:\ LIN15, TEXT \!&RETURN OM DE AFGEBEELD INSTELLINGEN TE GEBRUIKEN \ LIN16, TEXT \!&VOER !&IN OM DE AFGEBEELDE INSTELLINGEN TE GEBRUIKEN.\ LIN17, TEXT \!&VOER !&OPDR !&UIT OM &D&E&CMATE OPNIEUW TE STARTEN.\ LIN19L, TEXT \&TERMINAL-INSTELLING IS \ /M015 LIN19R, TEXT \ ,DEZE KAN WORDEN GEWIJZIGD MET\ LIN20, TEXT \&T&I IN HET &OPTIE-MENU (&B&S).\ LIN22L, TEXT \&DE PRINTERSNELHEID IS \ LIN23R, / LIN22R, TEXT \.\ LIN23L, TEXT \&COMMUNICATIESNELHEID IS \ LIN24, TEXT \&SNELHEDEN KUNNEN WORDEN GEWIJZIGD MET\ *.-1 TEXT \ &B&S &W&I (&COMMUNICATIE-INSTELLINGEN).\ LIN23, > IFDEF SPANISH < SETUPC, / TEXT \^A\ / CONTROL for erase screen *.-1 TEXT \^P^A^S\ / CONTROL for single H/double W *.-1 TEXT \^P^S\ / CONTROL for line 4 *.-1 TEXT \^P^S\ / CONTROL for lines 5 and 6 /D011 *.-1 TEXT \^P^S^P^S\ / CONTROL for lines 7 and 8 *.-1 TEXT \^P^S^P^S^P^S^P^S^P^S^P^S\ / CONTROL for 11,12,14,15,16,17 *.-1 TEXT \^P^S^A!S^A^S^P^S\/ CONTROL for line 19 (L and R) and 20 *.-1 TEXT \^P^S^A!S^A^S\ / CONTROL for line 22 (L AND R) *.-1 TEXT \^P^S^A!S^A^S\ / CONTROL for line 23 (L AND R) *.-1 TEXT \^P^S\ / CONTROL for line 24 ERASE, ESC; 74 / Set VT100 (ANSI) mode ESC; "[&177; "2&177; "J&177; 0 / ERASE entire screen LIN1X, ESC; "#&177; "6&177; 0 / (Text is single H/double W) LIN1, TEXT \!&MENU !&DE !&CARACTERISTICAS !&DE !&TERMINAL\ LIN4A, TEXT \&TIPO &CURSOR \ LIN4B, TEXT \&BLOQUE\ LIN4C, TEXT \&RAYA\ LIN6A, TEXT \&DESPLAZAMIENTO\ LIN6B, TEXT \&INCREMEN.\ LIN6C, TEXT \&CONTINUO\ LIN7A, TEXT \&FONDO &PANTALLA\ LIN7B, TEXT \&NEGRO\ LIN7C, TEXT \&BLANCO\ LIN8A, TEXT \&CLIC DE TECLAS\ LIN8B, TEXT '&S\M' LIN8C, TEXT \&NO\ LIN11, TEXT \&PULSE !&ADELANTE O !&ATRAS PARA\ *.-1 TEXT \ MOVERSE ENTRE LAS OPCIONES, Y PULSE\ LIN12, TEXT '!&SEL PARA SELECCIONAR LAS CARACTER\MSTICAS DE TERMINAL.\' LIN14, TEXT \&PULSE:\ LIN15, TEXT '!&RETORNO PARA ABANDONAR ESTE MEN\Z ' *.-1 TEXT '(USANDO CARACTER\MSTICAS PARA ESTA SESI\SN).' LIN16, TEXT '!&VALIDAR PARA ABANDONAR ESTE MEN\ZMENU ' *.-1 TEXT '(ALMACENANDO LAS CARACTER\MSTICAS).' LIN17, TEXT \!&EJECUTAR PARA USAR UN DISKETTE SISTEMA NUEVO.\ LIN19L, TEXT '&EL &MODO DEL &TERMINAL EST\A ESTABLECIDO PARA UN ' /M015 LIN19R, TEXT ' Y SE PUEDE CAMBIAR EN EL MEN\Z' LIN20, TEXT \&O&S (&OPCIONES DEL SISTEMA) MENU.\ LIN22L, TEXT '&LA IMPRESORA EST\A AJUSTADA EN ' LIN23R, / LIN22R, TEXT \ BAUDIOS.\ LIN23L, TEXT '&COMUNICACIONES EST\A AJUSTADA EN \ LIN24, TEXT \&LA VELOCIDAD EN BAUDIOS SE PUEDE CAMBIAR EN &S&O &C&C\ *.-1 TEXT ' &SUBMEN\ZU (&VALORES DE &COMUNICACI\SN).' LIN23, / replaced edit /a016 > / / Moved here on edit 015 for space reasons /A015 / / TERMINAL MODE TABLE / TMTABL, VT52; VT100; DMII; VT125; VT227 ;VT228 ;VT22F /A015 /M013 VT52, TEXT \&V&T52\ VT100, TEXT \&V&T100\ DMII, TEXT \&D&E&CMATE\ VT125, TEXT \&GRAPHICS\ /M015 VT227, TEXT \&V&T227\ /A013 VT228, TEXT \&V&T228\ /A015 VT22F, TEXT \&V&T22&F\ /A015 X=. / INDICATE FIRST FREE LOCATION ON PAGE /----------- PAGE CU4BF1=. /\zblock 400