/MATH PREFIX FILE / MODIFIED BY: / / 024 KMD 23-Sep-85 Dutch Xlations / 023 KMD 13-Sep-85 V30 Swedish & norwegen defs / 022 KMD 06-Sep-85 Spanish specific changes / 021 RCME 07-Aug-85 Add LEXASC locations (pp. KMD) / 020 KMD 01-Aug-85 CHANGE RADIX SYMBOL FOR ITALS / 019 RCME 11-Jun-85 Add loadout for MATH hole block / /------------------ All below refer to V2.0 and earlier --------------------- / / 018 WCE 01-JUN-83 EXPANDED SYMBOL TABLE BY REMOVING MTBL / 017 DAO 25-OCT-81 ADDED RADIX CONSTANT (=".-200) / ADDED CURENCY CONSTANT (="$-200) / 016 DAO 16-OCT-81 Changed write out code for BCDASC / 015 DRH 15-OCT-81 LOCKED "MTHWRK" IN AT LOC 176,"MTHTOT" / AT 175, & "MTHTYP" AT 174 / 014 DRH 30-SEP-81 LOCKED "MTHSND" IN AT LOC 177 / 013 DRH 23-SEP-81 ADDED EDIT BEGIN/END WORK AREA FLAG / MATH CTRL BLOCK SECOND LINE FLAGS / 012 DA0 14-SEP-81 CHANGED NUMBER DEFAULT DESIGNATION / 011 DRH 14-SEP-81 ADDED EDITOR VS LP MATH MODE FLAG / 010 GDH 2-Sep-81 Changed write-out code to component pieces. / 009 JRF 11-AUG-81 Added LNEBIC definition / 008 JRF 04-AUG-81 Added symbol definition for percent character. / 007 JRF 28-JUL-81 Added CIFMNU equate / 006 DAO/DRH 23-JUL-81 ADDED ERROR FOR FORMAT ALREADY GIVEN / TO RESULT VAR. IN CTRL BLOCK / 005 JRF 23-JUL-81 Moved error equates to WPF1.PA / 004 DRH 17-JUL-81 ADDED ERROR - FORMULA FORMAT WRONG / 003 DAO 14-JUL-81 /CHANGED WRITE-OUT CODE TO WRITE OUT / /BCDASC FROM FIELD 3 / 002 DAO 14-JUN-81 /MERGED BUFFER STUFF FROM EMATH.PA / 001 DAO 14-JUN-81 /MERGED IN JOES PAGE 0 LOCATIONS FOR / /LEXIC,ASCBCD,AND RDLNBF IFNDEF DECDEV < FIELD 2 / ASSEMBLE IN FIELD 2 BECAUSE EMULATOR CAN'T > / HANDLE MORE THAN 20K IFDEF DECDEV < FIELD 5 / ASSEMBLE IN FIELD 2 BECAUSE EMULATOR CAN'T > / HANDLE MORE THAN 20K *100 /VALUES USED IN CONTROL BLOCK EVALUATION CODE LNEPTR, 0 /POINTER TO INPUT LINE BUFFER TRUNC, 0 /"TRUNCATE" FLAG /VALUES USED IN TRANSLATOR CODE OPDNXT, 0 /"OPERAND EXPECTED NEXT" FLG, IF TRUE THAN = 0,IF FALSE THAN = - NXTPRS, 0 /"NEXT INPUT PROCESSED" FLAG, IF TRUE THAN = 0,IF FALSE THAN = - NMEPTR, 0 /POINTER TO START OF INPUT OPERAND VARIABLE NAME /A001 /VLEPTR,0 / " " " " " " " VALUE /A001 /D018 MTHPTR, 0 / " " SYMBOL POINTER TABLE OUTPTR, 0 / " " OUTPUT LIST SYMPTR, 0 / " " SYMBOL TABLE RESPTR, 0 / " " RESULTS POINTER TABLE /A001 POSTSP, 0 / " " OPERATOR HANDLING STACK SYMVAR, 0 / " " "OVRAGN" FOR VARIABLE NAME IN SYM TBL TMPTR1=T3 / " " HOLD TEMPORARY POINTER TMPTR2=T2 / " " HOLD A SECOND TEMPORARY POINTER FDCLRT, / For usage, see LEXASC /a021 TKVLBP, 0 / For usage, see LEXASC /a021 NUMCC, / For usage, see LEXASC /a021 FNCHCD, / For usage, see LEXASC /a021 FUSLCT, 0 / For usage, see LEXASC /a021 TMPCTR, 0 / " " HOLD A TEMPORARY COUNTER TOKEN, 0 /USED TO STORE TOKEN PASSED FROM LEXIC RTN (SCANNER) / VALUES USED IN MATH FORMULA EXECUTION OUTEXT, EXEOUT /HOLDS THE RETURN ADDRESS OF 'OUTLST' MUST BE ON PAGE /ZERO BECAUSE THE RETURN FROM 'OUTLST' MAY BE ON A /DIFFERENT PAGE THAN THE ENTRY POINT. OUTENT, 0 /ENTRY POINT USED TO INDIRECT THRU WHEN INVOKING /FORMULA EXECUTION CODE. CONTAINS EITHER START OF /OUTPUT LIST IF CONTROL WORD = "FORMULA" OR STARTING /LOC IN OUTPUT LIST FROM WHICH TO EXECUTE FORMULA IN /A "SET" CONTROL WORD LINE. NOTE - ONCE SET LINE /FORMULA HAS BEEN EXECUTED, "OUTENT" IS DYNAMICALLY /REINITIALIZED TO CONTAIN THE START OF THE OUTPUT /LIST AGAIN. TMP1, 0 TMP2, 0 TMP3, 0 / POINTER TO SA, LA, RA, SB, LB OR RB TMP4, 0 TMP5, 0 TMP6, 0 TMP7, 0 TMP8, 0 FDCLTR, /For usage, see LEXASC /a021 FNCHRC, /For usage, see LEXASC /a021 TMP9, 0 TMP10, 0 PA, A / POINTER TO INPUT OPERAND PB, B / POINTER TO OTHER INPUT OPERAND LC, 0 / CALCULATED NUMBER OF DIGITS TO LEFT OF RESULT IF DIVISION CARRY, 0 B1, 0 / RIGHT END OF SAC B2, 0 / ADDRESS OF RIGHT END OF B B3, 0 / WIDTH OF B B4, 0 / WIDTH OF C A1, 0 / ADS (ADD DIGIT ROUTINE) OR SBS (SUBTRACT DIGIT ROUTINE) A2, 0 / POINTER TO C A3, 0 / POINTER TO B A4, 0 / COUNTER FOR B A5, 0 / COUNTER FOR C /NOTE: THE FOLLOWING 6 WORDS /MUST BE CONTIGUOUS. SA, 0 / SIGN OF A (1=NEGATIVE, 0=POSITIVE) LA, 0 / NUMBER OF DIGITS TO LEFT OF DECIMAL POINT FOR A RA, 0 / NUMBER OF DIGITS TO RIGHT OF DECIMAL POINT FOR A SB, 0 / SIGN OF B (1=NEGATIVE, 0=POSITIVE) LB, 0 / NUMBER OF DIGITS TO LEFT OF DECIMAL POINT FOR B RB, 0 / NUMBER OF DIGITS TO RIGHT OF DECIMAL POINT FOR B GOBACK, 0 / RETURN ADDRESS FOR THE MATH ROUTINES TOP, 0 / POINTER TO TOP STACK ELEMENT INIT=JMS I . / INSTRUCTION TO INITIALIZE PSUEDO-STACK MACHINE PINIT / ADDRESS OF INIT ROUTINE ADD=JMS I . / INSTRUCTION TO JMS TO ADD ROUTINE PADD / ADDRESS OF ADD ROUTINE SUB=JMS I . / INSTRUCTION TO JMS TO SUBTRACT ROUTINE PSUB / ADDRESS OF SUBTRACT ROUTINE DIV=JMS I . / INSTRUCTION TO JMS TO DIVIDE ROUTINE PDIV / ADDRESS OF DIVIDE ROUTINE MUL=JMS I . / INSTRUCTION TO JMS TO MULTIPLY ROUTINE PMUL / ADDRESS OF MULTIPLY ROUTINE MINUS=JMS I . / INSTRUCTION TO JMS TO MINUS ROUTINE PMINUS / ADDRESS OF ROUTINE TO NEGATE TOP STACKE ELEMENT EQUATE=JMS I . / INSTRUCTION TO JMS TO EQUATE ROUTINE PEQUAT / ADDRESS OF ROUTINE TO EQUATE TOP OF STACK TO PUSH=JMS I . / INSTRUCTION TO PUSH A VALUE ONTO THE STACK PPUSH / ADDRESS OF ROUTINE TO PUSH A VALUE ONTO THE STACK /THE FOLLOWING PSEUDO-OP WOULD BE NICE HERE IF COULD FIND THE SPACE ON PAGE 0 /RIGHT NOW IT IS PACKED. / GOTFLD=JMS I . / INSTRUCTION TO RTN TO MAKE CROSS FIELD CALLS /A018 GETFLD / ADDRESS OF RTN TO SAVE CALLING FIELD FOR RETURN TO CALLER / / SYMBOL DEFINITIONS FOR LEXIC AND ASCBCD ROUTINE KWHOLE= 15 / max # of char expected LEFT of radix point KFRACTION= 06 / max # of char expected RIGHT of radix point / MINUSF= 4000 / MINUS_Flag '-' PLUSF= 2000 / PLUS_Flag '+' LPMSF= 1000 / Left_Parenthesis_Minus_Sign_Flag '(' PERCEF= 200 / PERCEnt_Flag '%' /A008 QUOTEF= 100 / QUOTE_Flag '"' ASTERF= 40 / ASTERisk_Flag '*' SEPARF= 20 / SEPARator_Flag ',' DIGITF= 10 / DIGIT_Flag '#' RPAREF= 4 / Right_PAREn_Flag ')' CSYMF= 2 / Currency_SYMbol_Flag '$' RSYMF= 1 / Radix_SYMbol_Flag '.' / /FOR LEXIC AND ASCBCD routines FRMCHR, 0 / FoRMula_CHaRacter read during LEXIC routine /A001 NUMFLG, ZBLOCK 1 / - + ( X X " * , D ) $ . / NUMber_FLaGs / 1='ok to read', 0='not ok to read' / LSTCHR, ZBLOCK 1 / - + ( X X " * , D ) $ . / LaST_CHaracter_Read / 1 = 'last character type read' / SUMCHR, ZBLOCK 1 / - + ( X X " * , D ) $ . / SUMmary_of_CHARacters_read / 1 = 'this char. type has been read' / /D005 / / SYMBOL DEFINITIONS FOR THE FORMULA EXECUTION ROUTINES / LNEBIC=-MAXLNE-1 / LiNE_Buffer_Initialization_Count = -MAX_size_- /A009 / of_control_block_input_LiNE_buffer - 1 /A009 MAX=20 / NUMBER OF SIGNIFICANT DIGITS BCDRAD=17 / BCD_RADix character representation VALSIZ=6 / NUMBER OF WORDS NEEDED TO STORE A BCD NUMBER VALUE, / AT 3 BCD DIGITS TO A WORD. (see ASCBCD routine) EQUAL="=-200 /VALUE USED AS DELIMITER OF OPERATOR HANDLING STACK DFAULT=0000 /DEFAULT VALUE OF FORMAT STATEMENT OF OPERAND VARIABLE / LEADING ZERO, 11 WHOLE, 2 DECIMAL NMDFLT=0017 /DEFAULT BIT SETTING FOR OPERAND VAR NUM VALUE../M012 /..PLACED IN SYMBOL TABLE - GOES IN 1ST LOC OF NUMBER /UNINITIALIZED BIT SET /NOTE - THIS INITIALIZES THE NUMBER TO 0.0 /A012 MAXASC=23 /MAX # CHAR GENERATED BY BCD TO ASCII CONVERTOR + 2 /FOR FIELD NAME ANGLE BRACKETS IFDEF ENGLSH < RADIX=".-200 /RADIX CHARACTER, CAN BE CHANGED FOR DIFFERENT /A017 /LANGUAGES /A017 > IFDEF DUTCH < RADIX=",-200 /RADIX CHARACTER, CAN BE CHANGED FOR DIFFERENT /A024 /LANGUAGES /A024 > IFDEF ITALIAN < RADIX=",-200 /RADIX CHARACTER, CAN BE CHANGED FOR DIFFERENT /A020 /LANGUAGES /A020 > IFDEF SPANISH < RADIX=",-200 /RADIX CHARACTER, CAN BE CHANGED FOR DIFFERENT /A022 /LANGUAGES /A022 > IFDEF V30NOR < RADIX=",-200 /RADIX CHARACTER, CAN BE CHANGED FOR DIFFERENT /A023 /LANGUAGES /A023 > IFDEF V30SWE < RADIX=",-200 /RADIX CHARACTER, CAN BE CHANGED FOR DIFFERENT /A023 /LANGUAGES /A023 > IFDEF ENGLSH < CURENC="$-200 /CURENCY SYMBOL, CAN BE CHANGED FOR DIFFERENT /A017 /LANGUAGES /A017 > IFDEF DUTCH < CURENC="F-200 /CURENCY SYMBOL, CAN BE CHANGED FOR DIFFERENT /A024 /LANGUAGES /A024 > IFDEF ITALIAN < CURENC="# /CURENCY SYMBOL, CAN BE CHANGED FOR DIFFERENT /A017 /LANGUAGES /A017 > IFDEF SPANISH < CURENC="P-200 /START OF CURENCY SYMBOL, CHANGED FOR DIFFERENT /A022 /LANGUAGE /A022 CUREN2="T-200 /REST OF CURRENCY SYMBOL USED IN BCDASC /A022 CUREN3="S-200 / " /A022 > IFDEF V30NOR < CURENC="N-200 /START OF CURENCY SYMBOL, CHANGED FOR DIFFERENT /A023 /LANGUAGE /A023 CUREN2="O-200 /REST OF CURRENCY SYMBOL USED IN BCDASC /A023 CUREN3="K-200 / " /A023 > IFDEF V30SWE < CURENC="S-200 /START OF CURENCY SYMBOL, CHANGED FOR DIFFERENT /A023 /LANGUAGE /A023 CUREN2="E-200 /REST OF CURRENCY SYMBOL USED IN BCDASC /A023 CUREN3="K-200 / " /A023 > *174 /***** WARNING ***** DO NOT MOVE "MTHTYP" WITHOUT /A015 /CHANGING "WPF1.PA" ALSO - NEEDED FOR EDITOR MATH CODE /A015 MTHTYP, 0 /THIS FLAG HAS BEEN ADDED TO SERVE AS AN INDICATOR OF /A011 /TYPE OF MATH THAT IS BEING USED AT ANY PARTICULAR TIME /A011 /IF IN LP MATH THEN "MTHTYP" = 0, IF IN EDITOR MATH = 1 /A011 /THIS FLAG MUST STAY ON PAGE ZERO, IF THERE ARE ANY /A011 /QUESTIONS ABOUT IT SEE THE "TMATH" MODULE UNDER "A017" /A011 *175 /***** WARNING ***** DO NOT MOVE "MTHTOT" WITHOUT /A015 /CHANGING "WPF1.PA" ALSO - NEEDED FOR EDITOR MATH CODE /A015 MTHTOT, 0 /THE "EDITOR MATH TOTAL" FLAG. = 0 IF TOTAL NOT REQUIRED/A013 /AND = 1 IF TOTAL REQUIRED. /A013 *176 /***** WARNING ***** DO NOT MOVE "MTHWRK" WITHOUT /A015 /CHANGING "WPF1.PA" ALSO - NEEDED FOR "GO-TO-PAGE" CODE /A015 MTHWRK, 0 /"NOT IN EDIT MATH WORK AREA" FLAG,= 1 IF TRUE,= 0 IF IN/A013 /EDIT MATH WORK AREA, IT IS SET TO 0 WHEN "BEGIN" /A013 /CTRL WORD IS ENCOUNTERED, AND 1 WHEN "END" CTRL IS /A013 /FOUND, IT IS INIT TO 1 BEFORE USING MATH /A013 *177 /***** WARNING ***** DO NOT MOVE "MTHSND" WITHOUT /A014 /CHANGING "WPF1.PA" ALSO - NEEDED FOR EDITOR MATH CODE /A014 MTHSND, 0 /"NOT EDITOR MATH SECOND LINE" FLAG: THIS IS SET UP AS A/A013 /TRI-STATE FLAG. THIS FLAG = 1 IF NOT PROCESSING SECOND /A013 /LINE OF MATH CTRL BLOCK; IT = -1 IF HAVE JUST FINISHED /A013 /PROCESSING "END" CTRL WORD, AND IT = 0 IF ARE /A013 /PROCESSING SECOND LINE OF CONTROL BLOCK. IT IS USED IN /A013 /CONJUNCTION WITH THE "BEGIN" & "END" CONTROL WORDS TO /A013 /BE SURE THEY ARE IN THE RIGHT PLACE IN THE BLOCK /A013 /THE -1 SETTING IS TO CHECK THAT THERE ARE NO MORE LINES/A013 /IN THE EDITOR MATH CTRL BLOCK AFTER THE "END" CTRL WORD/A013 /IS FOUND. THEREFORE IT MUST BE SET FROM THE EDITOR MATH/A014 /WHEN THE END OF THE MATH CTRL BLOCK IS FOUND AND IS /A014 /ACCORDINGLY DEFINED IN WPF1.PA AS AT LOC 177 /A014 CDFMYF=CDFMTH MNUFLD=20 /A007 CIFMNU=CIF MNUFLD /A007 / / / FIELD 0 *200 / START WRITE OUT CODE AT 200 IN FIELD 0 JMP I .+2 JMP I .+2 RXLOAD 7600 *RXLDLS RXEWT;0;RXQBLK . IFNDEF DECDEV < DLMATH;100;CDF 20;-DSMATH/WRITE OUT MATH ROUTINES /M003 > IFDEF DECDEV < DLMATH;100;CDF 50;-DSMATH/WRITE OUT MATH ROUTINES /M003 > DLMBCD /WRITE OUT BCDASC START AT THIS DISK BLOCK /A003 BCDASC / BCDASC STARTING ADDRESS /A003/M016 CDF 30 / BCDASC ASSEMBLES IN THIS FIELD (RUNS IN 5) /A003 -DSMBCD / NUMBER OF BLOCKS TO WRITE OUT /A003 DLMTHL / Write out MATH holes. Start at this block /a019 200 / MATH hole starting address /a019 CDF 60 / MATH holes assemble in this field /a019 -DSMTHL / Number of blocks to write out /a019 0 /FIELD MTHFLD%10 / ASSEMBLE IN MATH FIELD IFNDEF DECDEV < FIELD 2 / ASSEMBLE IN FIELD 2 BECAULE EMULATOR CAN'T > / HANDLE MORE THAN 20K IFDEF DECDEV < FIELD 5 / ASSEMBLE IN FIELD 2 BECAULE EMULATOR CAN'T > / HANDLE MORE THAN 20K *100 PAGE / AT LOCATION 200 / /   /WTRLRP - WRITES OUT INITIAL PRINTER SETTINGS /001 05-NOV-84 ALLOW FOR POSSIBLE FUTURE EXPANSION TO HEADER WORDS 18, 42 *200 JMP I .+3 JMP I .+1 7600 RXLOAD *RXLDLS RXEWT=4 RXEWT 0 RXQBLK=11 RXQBLK . DLRLRP;200;CDF 20;-DSRLRP 0 FIELD 2 *200 DECIMAL 0 /POSSIBLE FUTURE SPARE--POSITION 18 /A001 1 /INIT 1 /CP 0 /PM 0 /EX 6 /TM 6 /BM 66 /PS 10 /PI 1 /FR 0 /TO 1 /IP 0 /SPARE 1 /AP 1 /SPARE 0 /SPARE 0 /SE 0 /SPARE 0 /DA 0 /TW 0 /DD 0 /CM 0 /R1 0 /R2 0 /POSSIBLE FUTURE SPARE--POSITION 42 /A001 0 /POSSIBLE FUTURE SPARE--POSITION 18 /A001 1 /INIT 1 /CP 0 /PM 0 /EX 6 /TM 6 /BM 66 /PS 10 /PI 1 /FR 0 /TO 1 /IP 0 /SPARE 1 /AP 1 /SPARE 0 /SPARE 0 /SE 0 /SPARE 0 /DA 0 /TW 0 /DD 0 /CM 0 /R1 0 /R2 0 /POSSIBLE FUTURE SPARE--POSITION 42 /A001 0 /POSSIBLE FUTURE SPARE--POSITION 18 /A001 1 /INIT 1 /CP 0 /PM 0 /EX 6 /TM 6 /BM 66 /PS 10 /PI 1 /FR 0 /TO 1 /IP 0 /SPARE 1 /AP 1 /SPARE 0 /SPARE 0 /SE 0 /SPARE 0 /DA 0 /TW 0 /DD 0 /CM 0 /R1 0 /R2 0 /POSSIBLE FUTURE SPARE--POSITION 42 /A001 0 /POSSIBLE FUTURE SPARE--POSITION 18 /A001 1 /INIT 1 /CP 0 /PM 0 /EX 6 /TM 6 /BM 66 /PS 10 /PI 1 /FR 0 /TO 1 /IP 0 /SPARE 1 /AP 1 /SPARE 0 /SPARE 0 /SE 0 /SPARE 0 /DA 0 /TW 0 /DD 0 /CM 0 /R1 0 /R2 0 /POSSIBLE FUTURE SPARE--POSITION 42 /A001 0 /POSSIBLE FUTURE SPARE--POSITION 18 /A001 1 /INIT 1 /CP 0 /PM 0 /EX 6 /TM 6 /BM 66 /PS 10 /PI 1 /FR 0 /TO 1 /IP 0 /SPARE 1 /AP 1 /SPARE 0 /SPARE 0 /SE 0 /SPARE 0 /DA 0 /TW 0 /DD 0 /CM 0 /R1 0 /R2 0 /POSSIBLE FUTURE SPARE--POSITION 42 /A001 0 /POSSIBLE FUTURE SPARE--POSITION 18 /A001 1 /INIT 1 /CP 0 /PM 0 /EX 6 /TM 6 /BM 66 /PS 10 /PI 1 /FR 0 /TO 1 /IP 0 /SPARE 1 /AP 1 /SPARE 0 /SPARE 0 /SE 0 /SPARE 0 /DA 0 /TW 0 /DD 0 /CM 0 /R1 0 /R2 0 /POSSIBLE FUTURE SPARE--POSITION 42 /A001 0 /POSSIBLE FUTURE SPARE--POSITION 18 /A001 1 /INIT 1 /CP 0 /PM 0 /EX 6 /TM 6 /BM 66 /PS 10 /PI 1 /FR 0 /TO 1 /IP 0 /SPARE 1 /AP 1 /SPARE 0 /SPARE 0 /SE 0 /SPARE 0 /DA 0 /TW 0 /DD 0 /CM 0 /R1 0 /R2 0 /POSSIBLE FUTURE SPARE--POSITION 42 /A001 0 /POSSIBLE FUTURE SPARE--POSITION 18 /A001 1 /INIT 1 /CP 0 /PM 0 /EX 6 /TM 6 /BM 66 /PS 10 /PI 1 /FR 0 /TO 1 /IP 0 /SPARE 1 /AP 1 /SPARE 0 /SPARE 0 /SE 0 /SPARE 0 /DA 0 /TW 0 /DD 0 /CM 0 /R1 0 /R2 0 /POSSIBLE FUTURE SPARE--POSITION 42 /A001 0 /POSSIBLE FUTURE SPARE--POSITION 18 /A001 1 /INIT 1 /CP 0 /PM 0 /EX 6 /TM 6 /BM 66 /PS 10 /PI 1 /FR 0 /TO 1 /IP 0 /SPARE 1 /AP 1 /SPARE 0 /SPARE 0 /SE 0 /SPARE 0 /DA 0 /TW 0 /DD 0 /CM 0 /R1 0 /R2 0 /POSSIBLE FUTURE SPARE--POSITION 42 /A001 0 /POSSIBLE FUTURE SPARE--POSITION 18 /A001 1 /INIT 1 /CP 0 /PM 0 /EX 6 /TM 6 /BM 66 /PS 10 /PI 1 /FR 0 /TO 1 /IP 0 /SPARE 1 /AP 1 /SPARE 0 /SPARE 0 /SE 0 /SPARE 0 /DA 0 /TW 0 /DD 0 /CM 0 /R1 0 /R2 0 /POSSIBLE FUTURE SPARE--POSITION 42 /A001 OCTAL   / FILE: LOAD01.PA / / ** -0- ** BOOTSTRAP WRITE-OUT ROUTINE. **** / / ********* EDIT HISTORY ******** / /008 WJY 06-FEB-84 DECmate I compatability /007 WCE 05-SEP-83 Added WINNIE conditional to correct load / problem with new WPSYSA module. /006 WCE 03-SEP-83 Change RZ IOT's to standard RX IOT's /005 WCE 20-JUL-83 Remove occurances of RETURN as an instruction /004 DFB 01-FEB-82 Reset interleave for dd to 3 /003 DFB 28-JAN-82 Set interleave for dd to 2 /002 DFB 14-DEC-81 Comment only for LDSTRT address / AFTER ANY ASSEMBLY--PLEASE NOTE FOLLOWING / LDSTRT should be equal to wpaddr / else change labels in RXPRDF. /001 DFB 10-NOV-81 INSTALL. / ** -0- ** LOCAL SYMBOLIC DEFINITIONS **** /--------------------------------------------------------------------- / /************************ LOCAL SYMBOLIC DEFINITIONS ***************** / /--------------------------------------------------------------------- LOADPT= 200 / EFFECTIVE LOADER ADDRESS. EJECT / ** -1- ** BOOTSTRAP WRITE-OUT ROUTINE **** /--------------------------------------------------------------------- / /************************ BOOTSTRAP WRITE ROUTINE ******************** / /--------------------------------------------------------------------- FIELD 0 PAGE 0 *200 JMP LOADBT / *LOADPT PAGE 10 /--------------------------------------------------------------------- / /************************ BUILD CORRECT "FILL SILO" COMMAND ********** / /--------------------------------------------------------------------- LOADBT, CLA RXIINI /INIT DISK /M006 RXISDN /DONE? /M006 JMP .-1 /NO TAD LDCON /LOAD 1 CONSTANT RXILCD /LOAD COMMAND READ STATUS UNIT #1/M006 RXISDN /DONE? /M006 JMP .-1 /NO RXIXDR /READ STATUS /M006 RXISER /CLEAR ERROR IF SET /M006 NOP DCA L1STAT /SAVE STATUS TAD L1STAT RTL;RAL /MOVE DENSITY TO BIT AC3 AND LDMASK /MASK DENSITY BIT DCA LDCMND / ......"FILL SILO",... TAD LDCMND TAD L2CON /SET COMMAND WITH UNIT#1 DCA L2CMND TAD L1ADDR / SET/RESET,... DCA LDBFFR / ...START ADDRESS. JMS LDFILL /FILL SILO CLA IAC DCA LDSECT /SET SECTOR = 1 JMS LDWRIT /WRITE 1ST SECT 1ST TRACK JMP LOAD02 /NORMAL RETURN JMP LOADBT /ERROR RETURN / THIS PROCESS IS VALID ONLY FOR CONTROLLER 0, UNIT 1. / /--------------------------------------------------------------------- LOAD02, CLA CLL IAC / INITIALIZE SECTOR #,... DCA LDSECT / ...TO UNITY. TAD L2ADDR /SET BOOT WRITE ADDRESS DCA LDBFFR SIZE= .-LOAD02 /--------------------------------------------------------------------- / /************************ DETERMINE NO. SECTORS TO WRITE ************* / /--------------------------------------------------------------------- AC7776 / SET INITIAL COUNT,... DCA LDSCTR / ...TO -2 (SD) -1 (DD). TAD LDCMND / ADJUST,... SZA CLA / ...FOR,... CLA CLL IAC / ......A DOUBLE,... TAD LDSCTR / .........DENSITY DISKETTE,... DCA LDSCTR / ............AND SAVE. /--------------------------------------------------------------------- / /************************ CALCULATE PHYSICAL SECTOR ****************** / /--------------------------------------------------------------------- LDINIT, AC0003 / INITIALISE SECTOR,... TAD LDSECT / ...COUNT,... DCA LDSECT / ......TO 4 (I.E. SD DEFAULT ). TAD LDCMND / ADJUST,... SZA CLA / ...FOR DOUBLE,... CLA CLL CMA CML / ......DENSITY,... TAD LDSECT / .........DISKETTE,... DCA LDSECT / ............OPERATIONS. JMS LDFILL /FILL SILO JMS LDWRIT /WRITE JMP LDNXT /NORMAL RETURN JMP LOAD02 /ERROR RETURN /--------------------------------------------------------------------- / /************************ COMPLETION PROCESSOR *********************** / /--------------------------------------------------------------------- LDNXT, ISZ LDSCTR / YES - ALL SECTORS WRITTEN ? JMP LDINIT / NO - CONTINUE WITH SUBSEQUENT SECTORS. RXIINI /M006 JMP I LDEXIT / YES - EXIT LOAD PROCESSOR TO OS8. /--------------------------------------------------------------------- / /************************ SILO LOAD ROUTINE ************************** / /--------------------------------------------------------------------- LDFILL, 0 CLA TAD L2CMND /LOAD COMMAND RXILCD /EXECUTE /M006 L1MORE, CLA CLL / ENSURE REGISTER CLEAR. CDFPRT / SECONDARY BOOT GOES TO FIELD 1/M006 TAD I LDBFFR / LOAD A DATUM,... CDFSYS / ...RESTORE THIS DATA FIELD,.../M006 ISZ LDBFFR / ......UPDATE ADDRESS IN SECOND BOOT. JMS LDXFER / .........TRANSFER THE DATUM,... JMP L1MORE /.......TRANSFER RETURN JMP LDFLXT /DONE EXIT JMP LOADBT /ERROR EXIT LDFLXT, CLA CMA TAD LDBFFR DCA LDBFFR /RESET -1 FOR NEXT SECTOR JMP I LDFILL /EXIT /------------------------------------------------------------------- / /************************PHYSICAL I/O PRIMITIVE************************ / /---------------------------------------------------------------------- LDWRIT, 0 CLA CLL IAC RTL / BUILD A "WRITE SECTOR",... TAD L2CMND / COMMAND,... RXILCD / AND TRANSMIT TO CONTROLLER. /M006 TAD LDSECT /LOAD SECTOR JMS LDXFER / ..."SECTOR 1",... JMP LDWRT1 /...TR RETURN JMP LDWRTE /DONE = ERROR RETURN JMP LDWRTE /ERROR RETURN LDWRT1, CLA CLL IAC JMS LDXFER / ......"TRACK 1. JMP LDWRT2 /TR DONE JMP LDWRTE /DONE SET=ERROR JMP LDWRTE /ERROR RET LDWRT2, JMS LDXFER /CHECK DONE JMP LDWRTE /TR = ERROR JMP I LDWRIT /DONE = NORMAL RETURN JMP LDWRTE /ERROR RETURN LDWRTE, ISZ LDWRIT /SET ERROR RETURN JMP I LDWRIT /M005 /--------------------------------------------------------------------- / /************************ DATA TRANSFER PRIMITIVE ******************** / /--------------------------------------------------------------------- LDXFER, 0 / ENTRY POINT TO "LDXFER". LDXRDY, RXISTR / CONTROLLER READY ? /M006 JMP LDCKDN /NO CHECK DONE RXIXDR / YES - TRANSFER A DATUM,... /M006 JMP I LDXFER / ...THEN RETURN TO CALLER. /M005 LDCKDN, RXISDN /OP COMPLETE? /M006 JMP LDXRDY /NO-CHECK AGAIN ISZ LDXFER /YES SET RETURN RXISER /ANY ERRORS /M006 JMP I LDXFER /NO RETURN DONE /M005 CLA /YES TRY AGAIN TAD L1ADDR /RESET START ADDRESS DCA LDBFFR ISZ LDXFER /SET ERROR RETURN JMP I LDXFER /ERROR RETURN /M005 /--------------------------------------------------------------------- / /************************ LOCAL DATA AREA **************************** / /--------------------------------------------------------------------- L1EXIT, 7605 / ...VIA THE RE-ENTRY ADDRESS. LDCMND, 0 / LOCAL STORAGE FOR COMMAND WORD. L2CMND, 0 /STORAGE FOR COMMAND WORD WITH UNIT #1 LDBFFR, 2 / LOAD ADDRESS OF SECONDARY BOOTSTRAP./M006 L1ADDR, 2 / BACKUP ADDRESS OF START ADDRESS. L2ADDR, W2BOOT /ADDRESS OF 2ND BOOT AREA L1STAT, 0 /STATUS READ LDCON, 12 /READ STATUS UNIT 0 L2CON, 0 /UNIT 1 CONSTANT LDMASK, 400 / MASK FOR COMMAND. LDSECT, 1 / INITIAL VALUE FOR PHYSICAL SECTOR #. LDSCTR, 0 / SECTOR COUNT. LDTIMR, 0 / SECONDARY TIMER WORD. LDEXIT, 7605 / RE-ENTRY ADDRESS FOR OS8. SIZE= .-LDCMND / FILE: BOOT01.PA XLIST / ** -0- ** DOCUMENTATION **** /********************************************************************* / / / THIS BOOTSTRAP CODE IS THE PRIMARY BOOT WHICH IS BROUGHT INTO / MEMORY BY THE INITIAL HARDWARE BOOT FUNCTION. THE SEQUENCE OF / BOOTING A WPS SYSTEM IS GENERALLY AS FOLLOWS: / / 1. THE HARDWARE BOOT PROCESS IS INITIATED BY PUSHING / THE START BUTTON OR BY DEPRESSING A CTRL-SETUP-2. / / 2. THAT PROCESS BRINGS INTO MEMORY A ROM-BASED BOOT / WHICH IS LOADED INTO LOCATIONS 0016 THRU 0061 OF / FIELD ZERO, AND INITIATED AT LOCN 0016. / / 3. THIS HARDWARE BOOT WILL BRING INTO MEMORY TRACK-1, / SECTOR-1 OF THE RX DEVICE DISKETTE WHETHER THAT / DISKETTE IS DOUBLE DENSITY OR SINGLE DENSITY. IN THE / CASE OF SINGLE DENSITY, THIS CONSTITUTES A 64(DECIMAL) / WORD TRANSFER; DOUBLE DENSITY = 128(DECIMAL) WORDS. / / 4. THIS TRACK1, SECTOR1 DATA IS READ INTO MEMORY / BEGINNING AT LOCATION 0002. OBVIOUSLY, THIS WILL / FORCE THE READ-IN PROCESS TO -OVERLAY- THE BOOTSTRAP / WHICH IS READING THE DATA IN. THIS PRESENTS SOME / INTERESTING CHALLENGES. THERE ARE TWO -CRITICAL / OVERLAY AREAS- IN THE THEN RUNNING BOOTSTRAP WHICH / MUST BE OVERLAID WITH COPIES OF THEMSELVES WITH / CERTAIN VERY LIMITED EXCEPTIONS. LOCN 0035, THE / LAST WORD OF THE 1ST CRITICAL OVERLAY AREA, IS THE / ENTRY POINT TO THE SECONDARY BOOT PROCEDURE. THUS, / WHEN THE TRACK1, SECTOR1 READ-IN IS COMPLETE, CONTROL / ENDS AT LOCN 0035 WHICH MAY HAVE BEEN OVERLAID BY A / JUMP TO THE START OF THE NEXT LEVEL BOOT, OR MAY BE / AN INSTRUCTION OF THE NEXT LEVEL BOOT. / / 5. IN THE CASE OF THE WPS-278 V2.0 SECOND LEVEL BOOT, / THERE IS A NECESSITY TO BE ABLE TO BOOT FROM EITHER / A SINGLE DENSITY OR A DOUBLE DENSITY DEVICE. SINCE THE / INITIAL HARDWARE BOOT HAS MADE THE DETERMINATION OF THE / DENSITY OF THE BOOT-DEVICE AND LEFT IT ENCODED AT LOCN / 0060, THE WPS BOOTSTRAP DOES NOT WISH TO DESTROY THAT / PIECE OF DATA. / / *** IMPORTANT PIECE OF UNDERSTANDING *** / / TO ALLOW PRESERVATION OF THIS VALUE, A TECHNIQUE IS / USED WHICH OPENS A HOLE IN THE DATA BEING BROUGHT IN / AND LAID INTO MEMORY. AS WE SAID, THE BOOT PROCESS IS / OVERLAYING ITSELF AS IT GOES. NOTICE THAT THE INSTRUCTION / AT LOCN 0050 IN THE HARDWARE BOOT IS THE ONE WHICH PUTS / THE INCOMING DATA INTO MEMORY. AT SOME POINT IN TIME, THIS / /********************************************************************* XLIST XLIST EJECT / ** -0- ** DOCUMENTATION, CON'T. **** /********************************************************************* / / 'DCA' WILL ACTUALLY LAY AN INSTRUCTION ON TOP OF ITSELF. / THE INSTRUCTION THAT COMES IN AT THAT TIME IS A 'DCA 0061'. / AS SOON AS THIS INSTR IS LAID DOWN, IT IS INCREMENTED BY THE / INSTRUCTION 'ISZ 0050' WHICH APPEARS IN LOCN 0051 SO THAT / THE FINAL 'DCA' FOR THE NEXT WORD TO COME FROM THE DISKETTE / WILL BE DEPOSITED IN LOCN 0062, THUS BYPASSING THE VARIABLE / WE WISH TO SAVE. / / 6. FOR THE ABOVE REASON, THE SECOND HALF OF THE PRIMARY BOOT / IS ASSEMBLED AS THOUGH IT WERE TO BE LOADED AT LOCN 0062 / RATHER THAN A STRAIGHT CONTINUATION AT LOCN 0051 AS ONE MIGHT / OTHERWISE EXPECT. / / D.E.C. STANDARD BOOTSTRAPS FOR FLEXIBLE DISKETTES / MUST RESIDE ON THE DISKETTE STARTING / WITH TRACK #1, SECTOR #1. / ALL BOOTSTRAPS MUST BE WRITTEN TO THE SYSTEM DISKETTE / IN "12 BIT MODE", I.E. ONE PDP8 12 BIT WORD / WILL OCCUPY TWO SEQUENTIAL EIGHT(8) BIT BYTES / ON THE DISKETTE, THE FIRST CONSISITING OF THE / LOW ORDER EIGHT BITS OF THE WORD (BITS 4-11) / AND THE SECOND CONSISTING OF BITS 0-3 OF THE / WORD PRECEEDED BY FOUR LEADING ZERO BITS. / WHEN USING A SINGLE DENSITY DISKETTE, ONE SECTOR WILL / CONTAIN 64(10), 100(8) PDP8 12 BIT WORDS. / WHEN USING A DOUBLE DENSITY DISKETTE, ONE SECTOR WILL / CONTAIN 128(10), 200(8) PDP8 12 BIT WORDS. / / THUS, IN ORDER TO BE ABLE TO BOOT BOTH TYPES OF DISKETTE, / TWO EFFECTIVE BOOTSTRAPS MUST BE EMPLOYED. / / 1.) THE PRIMARY BOOTSTRAP IS READ INTO CORE / BY THE HARDWARE BOOTSTRAP, / / 2.) WHEN THE PRIMARY BOOTSTRAP EXECUTES, IT / READS IN THE SECONDARY BOOTSTRAP, / / 3.) WHEN THE SECONDARY BOOTSTRAP EXECUTES, IT / READS IN THE SYSTEM BOOTSTRAP, WHICH / LOADS THE CRITICAL PARTS OF THE SYSTEM, / AND STARTS IT. / / THE FOLLOWING CHART SHOWS WHERE THE THE VARIOUS PIECES / OF THE VARIOUS BOOTSTRAPS RESIDE ON THE / DISKETTE. / / CONTINUED / /********************************************************************* XLIST XLIST EJECT / ** -0- ** DOCUMENTATION, CON'T. **** /********************************************************************* / / CONTINUED / / / BOOTSTRAP TYPE TRACK SECTOR(S) / __________________________________________________ / / HARDWARE (PROM) NONE NONE / / PRIMARY (SD) 1 1 (FULL) / (DD) 1 1 (FIRST HALF ONLY) / / SECONDARY (SD) 1 4,7 (BOTH FULL) / (DD) 1 3 (FULL) / / SYSTEM ---- - - / / /********************************************************************* XLIST XLIST EJECT / ** -0- ** MODEL PRIMARY BOOTSTRAP **** /----------------------------------------------------------------------------------- / / THE FOLLOWING IS A LISTING OF THE PRIMARY HARDWARE BOOTSTRAP / FOR THE RX01/RX02. NOTA BENE - THIS BOOTSTRAP WILL ATTEMPT TO / BOOT EITHER DRIVE 0 OR DRIVE 1. / / / 0002 *SCNDBT / START ADDRESS OF SECONDARY BOOT. / /--------------------------------------------------------------------- / / / /************************ SECONDARY BOOTSTRAP ENTRY POINT ************ / / / /--------------------------------------------------------------------- / 0016 *BOOT1 / START ADDRESS OF PRIMARY BOOT. / /--------------------------------------------------------------------- / / / /************************ PRIMARY BOOTSTRAP ************************** / / / /--------------------------------------------------------------------- /00016 6007 RZBOOT, CAF / INIT. BUS.-CPU. /00017 5033 JMP RZBOO3 / INITIATE THE BOOT PROCESS. /00020 1061 RZBOO1, TAD RZBOO0 / BUILD COMMAND. /00021 1046 TAD RZBOO4 / SET,... /00022 0060 AND RZBOO9 / ...UNIT AND,... /00023 3061 DCA RZBOO0 / ......DENSITY. /00024 7327 CLA CLL CML IAC RTL / BUILD A "READ SECTOR",... /00025 1061 TAD RZBOO0 / ...COMMAND. /00026 6751 RXILCD / SEND COMMAND TO CONTROLLER. /00027 7301 CLA CLL IAC / SET TO,... /00030 4053 JMS RZBOO7 / ...READ SECTOR 1,... /00031 4053 JMS RZBOO7 / ......TRACK 1. /00032 7004 RZBOO2, RAL / BUILD AN "EMPTY SILO" COMMAND. / /--------------------------------------------------------------------- / / / /************************ CRITICAL OVERLAY AREA 1 ******************** / / / /--------------------------------------------------------------------- / /********************************************************************* /00033 6755 RZBOO3, RXISDN / DONE ? /M006 /00034 5054 JMP RZBOO8 / NO - WAIT FOR READY FIRST. /00035 6754 RXISER / YES - CORRECT DENSITY CHOSEN ? / /********************************************************************* / /--------------------------------------------------------------------- / / / /************************ END CRITICAL OVERLAY AREA 1 **************** / / / /--------------------------------------------------------------------- / / CONTINUED NEXT PAGE / /------------------------------------------------------------------------------------ XLIST XLIST /------------------------------------------------------------------------------------ / / CONTINUED / / /00036 7450 SNA / NO - TRY ALTERNATIVE DRIVE/DENSITY. /00037 5020 JMP RZBOO1 / YES - TRANSFER A DATUM. /00040 1061 TAD RZBOO0 / ISSUE THE,... /00041 6751 RXILCD / ...EMPTY SILO COMMAND. /M006 /00042 1061 TAD RZBOO0 / ESTABLISH,... /00043 0046 AND RZBOO4 / ...LINKAGE TO,... /00044 1032 TAD RZBOO2 / ......THE SECONDARY,... /00045 3060 DCA RZBOO9 / .........BOOT. /00046 0360 RZBOO4, 0360 / - "MAGIC" CONSTANT - / /--------------------------------------------------------------------- / / / /************************ CRITICAL OVERLAY AREA 2 ******************** / / / /--------------------------------------------------------------------- / /********************************************************************* /00047 4053 RZBOO5, JMS RZBOO7 / TRANSFER A DATUM,... /00050 3002 RZBOO6, DCA SCNDBT / ...AND INSERT IT IN-LINE. /00051 2050 ISZ RZBOO6 / INCREMENT THE "BUFFER" POINTER. /00052 5047 JMP RZBOO5 / ...AND CONTINUE READING IN SECONDARY BOOT. /00053 0000 RZBOO7, 0 / ### ENTRY POINT TO "READ" SUBROUTINE. ### /00054 6753 RZBOO8, RXISTR / CONTROLLER READY ? /M006 /00055 5033 JMP RZBOO3 / NO - CHECK FOR DONE/CORRECT DENSITY. /00056 6752 RXIXDR / YES - LOAD A DATUM,... /M006 /00057 5453 JMP I RZBOO7 / ...AND RETURN TO CALLER. /M005 /00060 0420 RZBOO9, 0420 / LINKAGE WITH SECONDARY BOOT. /00061 0020 RZBOO0, 0020 / LINKAGE WITH ALTERNATE SECONDARY BOOT. / /********************************************************************* / /--------------------------------------------------------------------- / / / /************************ END CRITICAL OVERLAY AREA 2 **************** / / / /--------------------------------------------------------------------- / / / END OF PRIMARY BOOTSTRAP / /----------------------------------------------------------------------------------- XLIST EJECT / ** -0- ** SYMBOLIC DEFINITIONS **** /--------------------------------------------------------------------- / /************************ SPECIAL SYMBOLIC DEFINITIONS *************** / /--------------------------------------------------------------------- HACK= " -1 / DEFINITION OF THE "[H]ALF [A]SCII" [C]HARACTER [K]ONSTANT. PRBOOT= 2 / LOAD POINT FOR THE PRIMARY BOOTSTRAP. BOOT02= PRBOOT+60 / LOAD POINT FOR THE REMAINING PRIMARY BOOT. EJECT / ** -1- ** PRIMARY "WPS" BOOTSTRAP **** FIELD 1 / PRIMARY BOOTSTRAP IS ASSEMBLED IN FIELD 1. PAGE 0 *PRBOOT / LOAD ADDRESS FOR PRIMARY BOOT. /--------------------------------------------------------------------- / /************************ PRIMARY BOOTSTRAP HEADER ******************* / /--------------------------------------------------------------------- HLT /STRT ADDR OVERLAYED IN DD MODE BTRXID, "#-HACK^100+" -HACK / ...PRIMARY BTTRAK, "W-HACK^100+"P-HACK / ......BOOTSTRAP BTLSEC, "D-HACK^100+"I-HACK / .........HEADER BTSECT, "S-HACK^100+"K-HACK / ............PRECEEDS BTSCTR, "/-HACK^100+"[-HACK / ...............ACTUAL " -HACK^100+" -HACK / ..................BOOTSTRAP. 0 0 /--------------------------------------------------------------------- / /************************ SPARE AUTO-INDEX AREA ********************** / /--------------------------------------------------------------------- /D008 IFDEF WINNIE .lt. /A007 BTTBUF, RXDLDP-201 /M007 BTBFRA, RXDLDP-201 /M007 BTBFRB, RXDLDP-201 /M007 /D008 .gt. / END IFDEF WINNIE /A007 /D008 IFNDEF WINNIE .lt. /A007 /D008BTTBUF, RXDLDP-1 /D008BTBFRA, RXDLDP-1 /D008BTBFRB, RXDLDP-1 /D008 .gt. / END IFNDEF WINNIE /A007 BTBFFR, 377 /C003 MSK422, 422 /MASK FOR DENSITY,UNIT#,READ CODE /M003 /-------------------------------------------------------------------- / /************************ SPARE MEMORY AREA ************************** / /--------------------------------------------------------------------- BTCMND, 22 /BITS=DD,UNIT#,READ MSK24, 2400 /ADD TO BTCMND TO ALTERNATELY SET UNIT & DENSITY BTINC, JMP BTPTCH /ONE TIME JMP. ON SUCCESFUL READ ISZ BTXFER /SET DONE RETURN JMP I BTXFER /RETURN /--------------------------------------------------------------------- / /************************ "EMPTY SILO" OPERATION ********************* / /--------------------------------------------------------------------- BTMORE, DCA I BTBFFR / DEPOSIT DATUM IN CORE. BTEMPT, JMS BTXFER / TRANSFER A DATUM FROM SILO. JMP BTMORE / NOT DONE - REPEAT FOR ENTIRE SECTOR. /--------------------------------------------------------------------- / /************************ OPERATION COMPLETION PROCESSOR ************* / /--------------------------------------------------------------------- BTDONE, ISZ BTSCTR / DONE - ALL SECTORS READ ? JMP BTNEXT / NO - READ NEXT. JMP I BTSCND / YES - ENTER SYSTEM BOOTSTRAP CODE. /--------------------------------------------------------------------- / /************************ CRITICAL OVERLAY AREA 1 ******************** / /--------------------------------------------------------------------- BTBOO3, RXISDN / DONE ? /M006 JMP BTBOO8 / NO - WAIT FOR READY FIRST. /--------------------------------------------------------------------- / /************************ TRANSFER PRIMITIVE PART 2 - DONE *********** / /--------------------------------------------------------------------- CLA CLL / INSURE AC CLEAR FOR DONE RETURN RXISER /ERROR? /M006 JMP BTINC /NO INC RET SKP /IS ERROR BTPTCH, DCA BTINC /CLEAR JMP ON SUCCESSFUL DONE /D002 TAD MSK360 TAD MSK24 /ALTERNATE 24 & 2400 /A002 BSW /A002 DCA MSK24 /A002 TAD MSK24 /GET IT /A002 JMP BTREAD / JUMP OVER CRITICAL AREA 2 /--------------------------------------------------------------------- / /************************ CRITICAL OVERLAY AREA 2 ******************** / /--------------------------------------------------------------------- BTBOO5, JMS BTBOO7 / TRANSFER A DATUM BTBOO6, DCA BOOT02-1 / ...AND INSERT IT IN-LINE. BTOVLY=. /--------------------------------------------------------------------- / /************************ DATA TRANSFER PRIMITIVE ******************** / /--------------------------------------------------------------------- *BOOT02-7 BTXFER, / ENTRY POINT TO "BTXFER". BTBOO7, / ### ENTRY POINT TO "READ" SUBROUTINE. ### *BOOT02-6 BTBOO8, / CONTROLLER READY ? / RXISTR / CONTROLLER READY TO TRANSFER DATA ? /M006 / JMP BTBOO3 / NO - WAIT FOR IT. / RXIXDR / YES - TRANSFER A DATUM. /M006 / JMP I BTXFER / RETURN TO CALLER. /M005 /--------------------------------------------------------------------- *BOOT02-2 BTUNIT, / HARDWARE BOOTSTRAP COMMAND WORD. BTBOO9, / LINKAGE WITH SECONDARY BOOT. *BOOT02-1 BTBOO0, / LINKAGE WITH ALTERNATE SECONDARY BOOT. /--------------------------------------------------------------------- / /************************ END CRITICAL OVERLAY AREA 2 **************** / /--------------------------------------------------------------------- EJECT *BTOVLY RELOC BOOT02 /--------------------------------------------------------------------- / /************************ SET THE CORRECT SECTOR COUNT *************** / /--------------------------------------------------------------------- BTREAD, TAD BTCMND AND MSK422 /KEEP DENSITY,UNIT# AND READ CODE DCA BTCMND / ......DENSITY BIT IN COMMAND WORD TAD BTCMND / LOAD THE COMMAND RTL / ...AND ISOLATE RTL / ......DENSITY BIT IN THE LINK CLA CMA RAL / .........THEN BUILD DCA BTSCTR / ............THE CORRECT SECTOR COUNT. /--------------------------------------------------------------------- / /************************ CALCULATE CORRECT BASE SECTOR ************** / /--------------------------------------------------------------------- IAC / CALCULATE THE PROPER (SD OR DD)/D003/C004 /D004 TAD BTSCTR /SET FOR INTERLEAVE /A003 /D004 CMA /0 FOR DD 1 FOR SD /A003 DCA BTSECT / ......PHYSICAL SECTOR NUMBER. /--------------------------------------------------------------------- / /************************ PHYSICAL "READ" OPERATION ****************** / /--------------------------------------------------------------------- BTNEXT, AC0004 / SET THE PHYSICAL I/O BIT TAD BTCMND / ...AND SUBMIT COMMAND TO CONTROLLER. RXILCD /M006 AC0003 / LOAD SECTOR # TO READ TAD BTSECT / ...INCREMENT IT BY INTERLEAVE JMS BTXFER / ......SUBMIT IT TO CONTROLLER DCA BTSECT / .........AND SAVE IT AGAIN CLA CLL IAC / LOAD "BOOT" TRACK NUMBER,... JMS BTXFER / ...AND SUBMIT IT TO CONTROLLER ALSO. JMS BTXFER / WAIT FOR CONTROLLER "DONE" BTSCND, /LOC 400 = DD BIT USED TO SAVE SPACE/A003 BTDENS, 400 /D003 BTSCND, 200 / (SPARE) ADDRESS OF SECONDARY BOOT /--------------------------------------------------------------------- / /************************ LOGICAL "READ" OPERATION ******************* / /--------------------------------------------------------------------- TAD BTCMND / GET "EMPTY SILO" COMMAND RXILCD / ...AND SUBMIT IT TO CONTROLLER. /M006 JMP BTEMPT / GO EMPTY THE SILO / SPARE= 100-.+BTREAD-BTOVLY+PRBOOT RELOC / BACK TO ORIGINAL ORIGIN. EJECT / ** -0- ** SYMBOLIC DEFINITIONS **** /--------------------------------------------------------------------- / /************************ SPECIAL SYMBOLIC DEFINITIONS *************** / /--------------------------------------------------------------------- EJECT / ** -1- ** SECONDARY BOOTSTRAP **** FIELD 1 / BOOT IS ASSEMBLED IN FIELD 1. PAGE 2 / USE SCND PAGE OF FIELD. /--------------------------------------------------------------------- / /************************ PATCH TRANSFER ROUTINE FOR SECONDARY ******* / /--------------------------------------------------------------------- W2BOOT, AC0001 / JMS TTY /TYPE A=GOT IN THIS FAR TAD BTHALT / PUT A HALT INSTRUCTION AT THE END DCA BTPTCH / ...OF THE ERROR BRANCH AC0002 / JMS TTY /B=UNIT 0 OK /--------------------------------------------------------------------- / /************************ DETERMINE DISKETTE DENSITY ***************** / /--------------------------------------------------------------------- TAD BTCMND / LOAD COMMAND FROM PRIMARY BOOT. RTL / ISOLATE "SD"/"DD" RTL / ...IN REGISTER AS "0" OR "1" CLA RAL / ......AND SAVE IT. DCA BTRXID /--------------------------------------------------------------------- / /**************** DETERMINE WHETHER RX01/RX02 DRIVE ****************** / /--------------------------------------------------------------------- TAD PRX02 /DO A REQUEST FOR STATUS TAD BTCMND /ADD DENSITY RXILCD / ... /M006 RXISDN /M006 JMP .-1 / WAIT FOR DONE. RXIXDR / GET STATUS RESPONSE. /M006 AND PRX02 / ISOLATE THE RX02 BIT. SNA CLA / SKIP IF RX02 (RX28 DRIVE). DCA BTLCM2 / ZAP THE RX02 LCD 2ND XFR COMMAND. /--------------------------------------------------------------------- / /************************ ADJUST MODE (8B/12B) TO DENSITY ************ / /--------------------------------------------------------------------- /D003 TAD BTCMND / GET COMPLEMENT OF DENSITY BIT /D003 TAD BTDENS / ...FROM COMMAND WORD. /D003 AND BTDENS /D003 CLL RTR / ROTATE IT INTO 8/12 BIT OF TAD BTRXID /0=DD 1=SD /A003 SNA CLA /IS DD? /A003 IAC BSW /NO SET 8 BIT MODE /A003 TAD BTCMND / ...COMMAND WORD. DCA BTCMND /--------------------------------------------------------------------- / /************************ CALCULATE LOGICAL SECTOR NUMBER ************ / /--------------------------------------------------------------------- TAD BTRXID / LOAD THE DENSITY PARAMETER SNA CLA / ......DOUBLE DENSITY ? TAD BTBLKN / NO - MAKE IT 3*BLOCK NUM TAD BTBLKN / YES - MAKE IT 2*BLOCK NUM TAD BTBLKN DCA BTLSEC / ......AND SAVE IT. /// CDF DRVFLD EJECT / ** -1- ** RX01/RX02 SECTOR READ PROCESSOR **** /--------------------------------------------------------------------- / /************************ RX01/RX02 PROCESS DISPATCHER *************** / /--------------------------------------------------------------------- NXTBLK, TAD BTRXID / "DD" OPERATION ? SZA CLA JMP BTDBLD / YES - SKIP THE "UNPACK" PROCESS /--------------------------------------------------------------------- / /************************ SD - UNPACK FIRST SECTOR OF BLOCK ********** / /--------------------------------------------------------------------- JMS BTPHYS / EFFECT A "READ SECTOR" OPERATION. JMP BTUNPK / ENTER UNPACKING LOOP DXUNPK, MQL / SAVE DATA BYTE MQA / UNPACK FIRST NYBBLE RTR / ...ALIGN TO HO END BSW AND DXNMSK / ......ISOLATE HIGH 4 BITS DCA I BTTBUF / .........AND PUT IT AWAY MQA / UNPACK SECOND NYBBLE RTL / ...ALIGN TO HO END BSW AND DXNMSK / ......ISOLATE HIGH 4 BITS DCA I BTTBUF / .........AND PUT IT AWAY BTUNPK, JMS BTXFER / GET DATA BYTE FROM SECTOR JMP DXUNPK / (TR) ...AND GO UNPACK IT /--------------------------------------------------------------------- / /************************ READ 2 SECTORS, SD OR DD ******************* / /--------------------------------------------------------------------- BTDBLD, AC7776 / (DN) SET SECTOR COUNT DCA BTSCTR DYNEXT, JMS BTPHYS / EFFECT A "READ SECTOR" OPERATION. SKP / ENTER THE "MERGE" LOOP DYREAD, DCA I BTBFRB / SAVE WORD IN BUFFER. TAD I BTBFRA / LOAD CURRENT CONTENTS OF BUFFER. JMS BTXFER / LOAD A DATUM. /#(8 BIT MODE => INCLUSIVE OR INTO BITS 4-11) /#(12 BIT MODE => JAM XFER BITS 0-11) JMP DYREAD / (TR) CONTINUE FETCHING DATA CLA CMA /-1 TAD BTBFRA /RESET PTR TO LAST CHAR DCA BTBFRA /RESTORE ISZ BTSCTR / (DN) ALL SECTORS PROCESSED ? JMP DYNEXT / NO - PROCESS NEXT. /--------------------------------------------------------------------- / /************************ COMPLETION PROCESSOR *********************** / /--------------------------------------------------------------------- ISZ BTBCTR / YES - ALL BLOCKS PROCESSED ? JMP NXTBLK / NO - DO ANOTHER BLOCK. AC0003 / JMS TTY /C=LOADER GOT IN OK /-------------------------------------------------------------------- / /***************** CHECK DEVICE NO ************************************ / /---------------------------------------------------------------------- TAD BTCMND AND MSK20 /MASK OUT UNIT NO SZA CLA /0=UNIT 0 DOCSKP=. /RXPRDF LDNOP SHOULD BE EQUAL THIS ADDRESS/A018 JMP I PRTMSG /NOT UNIT 0 /// CIF DRVFLD JMP I WPSTRT / YES - START SYSTEM. /-------------------------------------------------------------------- / /*********** OUTPUT 1 CHAR ****************************************** / /----------------------------------------------------------------------- TTY, 0 TAD P100 / MAKE ASCII. TLS TSF /WAIT TILL DONE JMP .-1 CLA JMP I TTY /RETURN /-------------------------------------------------------------------- / /****************** WRONG UNIT*************************************** / PRINT ERROR MSG /---------------------------------------------------------------------- PRTMSG, DCSTRT /START ADDRESS OF MESSAGE /A002 /D002DRIVE1, TAD AY /D002 JMS TTY /// CMA /-1 IN AC /D002 JMP . EJECT / ** -1- ** PHYSICAL I/O AND "EMPTY" COMMAND ROUTINE **** /--------------------------------------------------------------------- / /**************** ROUTINE TO EFFECT A "READ SECTOR" OPERATION ******** / /--------------------------------------------------------------------- BTPHYS, 0 /--------------------------------------------------------------------- / /************************* CALCULATE PHYSICAL & TRACK SECTOR ********* / /--------------------------------------------------------------------- DCA BTTRAK / INITIALISE TRACK #. TAD BTLSEC / LOAD THE LOGICAL SECTOR #. BTDIV1, ISZ BTTRAK / INCREMENT THE TRACK #. DCA BTSECT / SAVE THE SECTOR #,... TAD BTSECT / ...THEN RETREIVE IT. TAD BTDVSR / "SUBTRACT" THE # OF SECTORS/TRACK. SMA / OVERFLOW ? JMP BTDIV1 / NO - CONTINUE. CLA CLL / YES - ENSURE REGISTER CLEAR /--------------------------------------------------------------------- / /************************ INTERLEAVE SECTORS ************************* / /--------------------------------------------------------------------- /D004 TAD BTRXID /DD? /A003 /D004 SNA CLA /YES 2*MQ /A003 TAD BTSECT / BUILD 3*Q. TAD BTSECT / TAD BTSECT BTDIV2, DCA BTSECT / SAVE "PHYSICAL" SECTOR #. TAD BTSECT / RETREIVE "PHYSICAL" SECTOR #. /D004 TAD BTRXID / ADJUST MODULUS FOR DENSITY TYPE. TAD BTDVSR / "SUBTRACT" # SECTORS/TRACK. P100, SMA / OVERFLOW ? JMP BTDIV2 / NO - REPEAT UNTIL OVERFLOW. ISZ BTSECT / YES - INCR TO BUILD CORRECT PHYSICAL SECTOR. /--------------------------------------------------------------------- / /************************ EMIT PHYSICAL I/O COMMANDS ***************** / /--------------------------------------------------------------------- AC0004 / SET "PHYSICAL" BIT JMS BTLCMD TAD BTSECT / () GET PHYSICAL SECTOR JMS BTXFER / () ...AND SEND IT CLA / (TR) "RXIXDR" DOESN'T CLEAR AC TAD BTTRAK / (DN) GET PHYSICAL TRACK JMS BTXFER / ...AND SEND IT JMS BTXFER / (TR) WAIT FOR CONTROLLER DONE DXNMSK, 7400 / (DN) (TR) (SPARE) /--------------------------------------------------------------------- / /************************ EMIT LOGICAL I/O COMMAND ******************* / /--------------------------------------------------------------------- JMS BTLCMD /--------------------------------------------------------------------- ISZ BTLSEC / BUMP LOGICAL SECTOR FOR NEXT TIME JMP I BTPHYS / EXIT FROM PHYSICAL I/O ROUTINE /-------------------------------------------------------------------- / /********************EMIT COMMAND PRIMITIVE*************************** / /---------------------------------------------------------------------- BTLCMD, 0 TAD BTCMND RXILCD /M006 TAD BTRXID SNA CLA BTLCM2, JMS BTXFER CLA JMP I BTLCMD /--------------------------------------------------------------------- / /************************ LOCAL STORAGE DECLARATIONS ***************** / /--------------------------------------------------------------------- BTDVSR, -32 / LOCAL STORAGE FOR THE TRACK/SECTOR CONSTANT. BTBLKN, 3 BTBCTR, -DSRXLD / LOCAL STORAGE FOR THE BLOCK COUNTER. MSK20, 20 /UNIT MASK /D002AY, "Y&77 BTHALT, HLT / THIS WILL PATCH BTPTCH /M002 WPADDR=.-200 /THIS ADDRESS SHOULD BE = LDSTRT IN RXPRDF/M004 WPSTRT, RXDRIN / ENTRY POINT TODRIVER SYSTEM INIT LOAD /M004 /D002P12, 12 /REQUEST FOR STATUS PRX02, 10 /RX02 BIT IN STATUS RESPONSE /M002 PAGE /--------------------------------------------------------------------- / /************************ END-OF-FILE ******************************** / /--------------------------------------------------------------------- $ / END-OF-FILE.   LOAD4=1 / EQUATE TO ALLOW BOOT OF SYSTEM DISK IN DRIVE 4   /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.   /DSKACP CURRENT EDIT DATE = 12/08/83 / / 035 KMD 26-Sep-85 Spanish & Dutch Xlations / 034 EMcD 11-Sep-85 Add Nordic translations / conditionalised / 033 MART 30-apr-85 Restore Startup code before execute / / ----------- all below are V2.0 mods or earlier ---------------- / / 032 DFB 21-DEC-84 FIX ALLOC BUG / 031 DFB 12-DEC-84 Fix conflict where / WPFILS and ACP use X0 / 030 DFB 17-OCT-84 Allow add. retries if error / 029 DFB 10-SEP-84 Pass unit # to VERIFY on warm start / 028 DFB 19-AUG-84 Pass unit # to VERIFY on warm start / 027 DFB 18-AUG-84 Fix to set warm start on error / 026 DFB 09-AUG-84 Fix=don't write alloc block on / .... err and force Gold Menu to verify / 025 DFB 13-MAR-84 Fix to reboot winnie after error halt / 024 DFB 21-FEB-84 Fix to winnie-clear den table / dev 1 only if sys dev rx / 023 DFB 17-JAN-84 Fix Winnie ifdefs for non winnie compatability / 022 DFB 08-DEC-83 Add winnie update function / 021 DFB 01-NOV-83 Add boot sys vol function / 020 DFB 27-SEP-83 FIXES TO WINNIE / 019 DFB 23-SEP-83 WINNIE SUPPORT / 018 WCE 03-SEP-83 Changed FIELD instructions to / standard instructions / 017 DFB 15-JUN-83 WINNIE SUPPORT / 016 DFB 07-JAN-82 Fix to write out dir/alloc blk if / return not specified for error / 015 MJS 16-JUN-82 Bugfix within 'acallo' to set the / contents of 'rxqblk'=0 if no more / blocks to allocate / 014 DFB 28-APR-82 Rx50 changes/,condor switches added / /********COPIED FROM DSKACP VER 13**** WITH RX50 ADDED************ / 013 DFB 05-APR-82 Clr err cd for write dir/alloc blk / 012 DFB 26-MAR-82 Prevent alloc block from being / written after each alloc/dealloc / 011 DFB 16-MAR-82 Set #free blocks return in spc / /created err in version 10 / 010 DFB 06-MAR-82 Set return error on get den / .......and fix return err code on get free blk / 009 DFB 01-MAR-82 Print "write" correctly for I/O err msge / 008 GDH 28-FEB-82 Changed assemble field to 2 so / that DSKACP can be written out / with WPFILS. / 007 DFB 26-FEB-82 Fix to allow gold menu after err. / 006 DFB 18-FEB-82 Fix to allow verify after write / logical and physical / 005 DFB 21-DEC-81 Fix to print corrrect drive # / on error / 004 DFB 18-DEC-81 Fix to return error code / 003 GDH 12-NOV-81 Bug fix to return the # of free / blocks on an rxeal call. / 002 DFB 11-11-81 Add error hndler/gold menu ret. / 001 DFB 10-29-81 /******************************************************************** / COPYRIGHT (C) 1983 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 ACP AND 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. / / /********************************************************************* /008 DSKACP is not written out with (and read in with) WPFILS which /008 loads from 0 to 5600 (field 7 at run time). DSKACP loads into /008 5600 to 7000 (field 7 at run time). Both modules assemble into /008 field 2 for write-out purposes. /D008; FIELD 0 /D008; *200 /D008; JMP I .+3 /WRITE BLOCK /D008; JMP I .+1 /EXIT /D008; 7600 /D008; RXLOAD /D008; /D008; *RXLDLS /D008; RXEWT /WRITE CODE /D008; 0 /DEVICE NUM /D008; RXQBLK /#BLOCKS /D008; . /LIST PNTR-1 /D008; DLACLD /BLOCK NUM /D008; ACPLDP /START ADDRESS OF ACP /D008; CDF FIELD4 /FIELD FOR WRITE IS 4 /D008; -DSACLD /BLOCK COUNT /D008; 0 /END BLOCK /********************************************************************* EJECT / **** ANCILLARY CONTROL PROCESSOR FOR WPS. **** /********************************************************************* / / DEVICE ANCILLARY CONTROL PROCESSOR / / CALLING SEQUENCE: / / AFTER PLACING THE PROPER PARAMETERS IN THE Q-BLOCK / EXECUTE THE FOLLOWING INSTRUCTIONS: / CIFSYS / CHANGE TO SYSTEM FIELD / ENQUE / ENQUEUE THE Q-BLOCK / ADDRESS OF Q-BLOCK / WAIT, CIFSYS / CHANGE TO SYSTEM FIELD AGAIN / JWAIT / WAIT FOR I-O COMPLETION / TAD Q-BLOCK+RXQCOD / IS CODE STILL 0? / SNA / IF NOT 0, THEN DONE / JMP WAIT / GO WAIT S'MORE / OTHERWISE CONTINUE PROCESSING - YOU'VE GOT WHAT YOU / ASKED FOR OR YOU'VE GOT AN ERROR PASSED BACK TO YOU. / ### / / PARAMETERS PASSED AND RETURNED: / / THE Q-BLOCK IS THE AREA IN WHICH THE USER PASSES THE INFORMATION / THAT THE ACP NEEDS IN ORDER TO PROCESS HIS REQUEST. THE Q-BLOCK / IS BIGGER THAN IT NEEDS TO BE FOR THIS APPLICATION AND THEREFORE / THERE ARE WORDS IN IT THAT ARE NOT USED BY THE ACP AND WILL BE / IGNORED HERE. THERE ARE A SET OF POINTERS THAT EXIST IN THE / PREFIX FILE WHICH CAN BE USED TO POINT TO THE VARIOUS WORDS / OF THE Q-BLOCK, AND THEY ARE DEFINED BELOW: / / POINTER MEANING / RXQCOD STATUS CODE / RXQFNC FUNCTION CODE (TELLS ACP WHAT TO DO) / RXQFNO FILE NUMBER TO BE PROCESSED / RXQSPC SPACE ON DISKETTE (RETURN ONLY) / RXQDRV DRIVE NUMBER / RXQBLK BLOCK NUMBER PASSED OR RETURNED / RXQBAD BUFFER ADDRESS / RXQBFD CDF TO BUFFER FIELD / RXQTRK TRACK OR NUMBER OF BLOCKS TO TRANSFER / RXQSEC SECTOR NUMBER / / / THE TABLE BELOW TELLS WHAT SHOULD BE PASSED (N FOR NEEDED), WHAT / WILL BE RETURNED (R), AND WHAT IS NOT USED (-) FOR EACH OF THE / FUNCTIONS. THE FUNCTION CODES ARE GIVEN UNDER THE HEADING 'FNC' / AND MUST BE PASSED AS SHOWN (IN OCTAL). THE RETURN CODE IS / ALWAYS RETURNED BY THE ACP AS SHOWN UNDER THE HEADING 'COD'. / IN GENERAL, THE HEADINGS ARE OBTAINED BY DROPPING THE 'RXQ' FROM / THE POINTER MNEMONICS. THE NUMBERS ABOVE THE HEADINGS REFER / (IN OCTAL) TO THE RELATIVE POSITION IN THE Q-BLOCK OF THE / PARAMETER AND ARE THE VALUES OF THE POINTER MNEMONICS, I.E. / RXQCOD = 0, RXQFNC = 1, ETC. / / / / OFFSETS TO WORDS IN Q-BLOCK. THESE MUST BE PREFIXED BY RXQ / FUNCTION 0 1 2 3 4 5 6 7 10 11 12 13 14 15 16 / DESCRIPTION COD FNC DN1 DN2 FNO ID1 SPC CTL DRV BLK RS1 BAD BFD TRK SEC /REWRITE DIR/ALOC BLK R 0 - - - - - - N - - - - - - /READ PHYSICAL 8BIT R 1 - - - - - - N N - N N N N /WRIT PHYSICAL 8BIT R 2 - - - - - - N N - N N N N /READ LOGICAL R 3 - - - - - - N N - N N - - /WRITE LOGICAL R 4 - - - - - - N N - N N - - /ALLOCATE A BLOCK R 5 - - - - - - N R - - - - - /DEALLOCATE A BLOCK R 6 - - - - - - N N - - - - - /GET HDR BLOCK R 7 - - N - - - N R - - - - - /SET HEADER BLOCK R 10 - - N - - - N N - - - - - /GET # FREE BLOCKS R 11 - - - - R - N - - - - - - /GET DENSITY R 12 - - - - R - N - - - - - - /READ PHYSICAL 12BIT R 13 - - - - - - N N - N N N N /WRIT PHYSICAL 12BIT R 14 - - - - - - N N - N N N N /FORMAT SD R 15 - - - - - - N - - - - - - /FORMAT DD R 16 - - - - - - N - - - - - - /MOUNT VOLUME R 17 - - - - - - N - - N N - - /DISMOUNT VOLUME R 20 - - - - - - N - - - - - - /GET VOLUME DATA R 21 - - - - - - N N - N N - - /GET DIRECTORY DATA R 22 - - - - - - N - - N N - - /MOUNT BOOT VOLUME R 23 - - - - - - N - - N N - - /UPDATE VOLUME DIR R 24 - - - - - - N - - N N - - /READ STATUS REG R 25 - - - - - - N - - N N - - / / / ERRORS REPORTED: / / THE ACP WILL RETURN ERROR STATUS IN THE USER'S Q-BLOCK / AT RXQCOD, I.E. THE FIRST WORD OF THE Q-BLOCK. AT FIRST, / THIS WORD IS SET TO ZERO, INDICATING THAT THE DRIVER IS / STILL PROCESSING THE REQUEST PREVIOUSLY MADE. THIS IS / NECESSARY BECAUSE THIS TASK OPERATES ASYNCHRONOUSLY. / WHEN I/O IS COMPLETE, EITHER THE BLOCK WAS GOTTEN OR AN / ERROR HAS OCCURRED. IF THE BLOCK WAS GOTTEN, THEN A +1 / IS PUT IN THE Q-BLOCK AT RXQCOD. IF AN ERROR HAS OCCURRED, / THEN EITHER A -1, -2 OR -3 ARE PUT IN THE Q-BLOCK AT RXQCOD. / A -1 MEANS A 'SOFT' ERROR HAS OCCURRED (CYCLIC REDUNDANCY) / A -2 MEANS A DENSITY CHANGE HAS OCCURRED (SHOULDN'T HAPPEN) / A -3 MEANS A 'HARD' ERROR I.E. DOOR OPEN, DRIVE PROBLEM ETC. / ### / / /D018 QUEFIL=CIF FIELD0 ACPBUF=INTBUF /INTERNAL BUFFER /********************************************************************* FIELD 2 /FOR WRITE DISK ONLY / FIELD 7 /ACTUAL LOAD FIELD *5600 /ACPLDP /LOAD ADDRESS FOR ACP /M018 ACENTR, JMP ACPSYS / DRIVER ENTRY POINT. /*********DENSYS MUST BE LOCATED AT ACPLDP+1*********** /************AS REFERENCED BY ACPDV0 ********************** DENSYS, /POINTER TO SYSTEM DRIVE DENSITY /------------------------------------------------------------- / /************** UNIT DENSITY TABLE ************************** /**************BIT 3 CONTAINS 0=SD************************** /************** 400=DD************************** /************** 1400=RX50************************ /************** 0001=WINNIE********************** / /------------------------------------------------------------- DRVDEN, IFDEF WINNIE < 0 /SYSTEM DRIVE IF WINNIE /A017 > /END IFDEF WINNIE IFDEF CONDOR < 0 /UNIT 1 DRIVE 0 SIDE 0 DEVICE# 0 0 /UNIT 1 DRIVE 1 SIDE 0 DEVICE# 1 0 /UNIT 2 DRIVE 0 SIDE 0 DEVICE# 2 0 /UNIT 2 DRIVE 1 SIDE 0 DEVICE# 3 0 /UNIT 1 DRIVE 0 SIDE 1 DEVICE# 4 0 /UNIT 1 DRIVE 1 SIDE 1 DEVICE# 5 0 /UNIT 2 DRIVE 0 SIDE 1 DEVICE# 6 0 /UNIT 2 DRIVE 1 SIDE 1 DEVICE# 7 0 /RX50 DEV 9 FOR VER 2.0 /A024 > /A014 / IFNDEF CONDOR < 0 /CONTROL 5 UNIT 1 0 / 5 UNIT 2 0 / 6 UNIT 1 0 / 6 UNIT 2 > /A014 / / **** PRIMARY CONTROL LOOP**** /--------------------------------------------------------------------- / / THE FOLLOWING ROUTINE IS THE MAIN PROCESSING LOOP. / WHENEVER THERE IS WORK FOR A HANDLER TO DO IT IS / ENTERED AND THE SPECIFIED OPERATION EXECUTED, ELSE / THE HANDLER IS RELEASED. / THIS ROUTINE WILL ALSO PUT A VALUE OF ZERO IN THE USER'S Q-BLOCK / TO INDICATE THAT I/O IS IN PROGRESS. WHEN I/O IS COMPLETE, EITHER / A PLUS 1 (GOOD RETURN) OR A NEGATIVE NUMBER (SOME ERROR) IS PUT / INTO THIS LOCATION TO SIGNAL THE USER WHAT HAPPENED. / THE ERROR VALUES ARE PASSED BACK HERE BY THE DRIVER. / /--------------------------------------------------------------------- ACEXIT, CIFSYS /M018 JEXIT / EXIT UNTIL AWAKENED. ACPSYS, CIFSYS /CIF QUEUE FIELD /M018 DEQUE / ANY REQUEST IN,... DSKQUE / ...IN THE DISK QUEUE ? JMP ACEXIT / NO - LET OTHERS RUN. DCA ACQCDF / YES - SAVE THE "CDF" INSTRUCTION. CDFSYS / CHANGE TO FIELD 0 /M018 TAD I RX0PTR /POINTER TO INDEX CDFFIO /CHANGE BACK TO MY FIELD /M018 IAC / X0 POINTS TO THE ONE BEFORE DCA ACQADR / SAVE USER'S Q-BLOCK ADDRESS /D026 DCA ACPALS /CLEAR ACP ALLOC WRITE SW /A016 DCA ACSAVE /CLEAR ERR RET /A013 IFDEF WINNIE < DCA WINISW /A017 > /END IFDEF WINNIE JMS ACPUTQ / SIGNAL USER I/O IN PROGRESS RXQCOD / LOCATION IN Q-BLOCK TO PUT CODE JMS ACPARG / CALL THE GET PARAM RTNE JMS SETPTR /SET DENSITY ADDRESS PTR TAD ACPFCT /LOAD FUNCTION CODE /A024 JMS ACPFUN / CALL THE FUNCTION PROCESSOR. TAD ACSAVE / GET RETURN CODE PASSED BY DRIVER SMA CLA / IF NEG FALL THRU /C030 JMP ACPOR0 / GO PROCESS NORMAL RETURN TAD ACPSVF /GET FUNCTION CODE /A017 SMA CLA /REQUEST ERROR RET? /A017 JMP NORETN /NO /A017 TAD ACSAVE /RETURN ERROR IN COD /M030 JMS ACPUTQ / GO PUT VALUE INTO USER'S Q-BLOCK/M030 RXQSPC / OFFSET TO PUT INTO Q-BLOCK /M030 TAD ACSAVE /RETURN ERROR IN COD /A004 JMP ACPPTQ / GO PUT RETURN CODE INTO Q-BLOCK ACPOR0, / IF POSITIVE, THEN RETURN INFO /D011 JMS ACPUTQ / GO PUT INFO INTO Q-BLOCK /D011 RXQSPC / OFFSET TO INFO RETURN IN Q-BLOCK ACZERO, AC0001 / SIGNAL GOOD RETURN ACPPTQ, JMS ACPUTQ / PUT CODE INTO Q-BLOCK RXQCOD / OFFSET TO CODE IN Q-BLOCK CDFSYS /SET SIGNAL FIELD /M018 DCA I SIGPTR /"SIGNAL" WAKE UP "JWAIT". CDFFIO / RESET /M018 JMP ACPSYS / LOOK FOR MORE TO DO. IFDEF WINNIE < WINISW, 0 /WINNIE SW=-#devices STORED ON WINNIE /A017 > /END IFDEF WINNIE ACQADR, 0 / HOLDS ADDRESS OF Q-BLOCK RX0PTR, X0 /POINTER TO INDEX IN OTHER FIELD SIGPTR, 3 /LOCATION OF SIGNAL / **** ROUTINE TO GET PARAMETERS PASSED BY CALLER**** /--------------------------------------------------------------------- / / THIS ROUTINE GETS THE PARAMETERS PASSED TO THE ACP / BY THE CALLER AND SAVES THOSE PARAMETERS IN THIS MODULE / FOR FUTURE USE IN CALLING THE DRIVER / /---------------------------------------------------------------------- ACPARG, 0 / RETURN ADDRESS TAD (ACPFNC-ACPGTQ) / LOAD NEGATIVE ELEMENT COUNT FOR LOOP CONTROL DCA ACPACT / SAVE NEGATIVE ARGUMENT COUNT. JMS ACPGTQ / LOAD POINTER TO Q-BLOCK ELEMENT OFFSETS ACPFNC, RXQFNC / OFFSET TO FUNCTION CODE (CALLER'S) RXQFNO / OFFSET TO FILE NUMBER RXQBAD / OFFSET TO BUFFER ADDRESS RXQBFD / OFFSET TO THE BUFFER FIELD RXQDRV / OFFSET TO DRIVE NUMBER RXQBLK / OFFSET TO STARTING BLOCK NUMBER RXQRS1 / OFFSET TO TRANSFER BLOCK COUNT RXQTRK / TRACK NO FOR PHYSICAL IO RXQSEC /ADDRESS OF SECTRO TOBE PROCESSED ACPGTQ, 0 / POINTER INTO Q-BLOCK OFFSET TABLE JMS ACPSVQ / LOAD POINTER TO TABLE OF LOCAL ADRESSES ACPFCT / ADDRESS FOR FUNCTION CODE (IN THIS MODULE) ACPFNO / ADDRESS FOR FILE NUMBER ACBADR / ADDRESS FOR BUFFER ADDRESS ACBFLD / ADDRESS FOR BUFFER FIELD ACUNIT / ADDRESS FOR DRIVE NUMBER ACBLKN / ADDRESS FOR STARTING BLOCK NUMBER RXDCNT / ADDRESS FOR TRANSFER BLOCK COUNT ACTRAK /ADDR OF TRACK TO BE PROCESSED ACSECT /ADDRESS OF SECTOR TO BE PROCESSED ACPSVQ, 0 / POINTER TO ADDRESSES OF SAVE AREAS IN THIS MODULE ACPSV1, TAD I ACPSVQ / LOAD ADDRESS OF SAVE AREA THIS MODULE DCA RXDDPB / ...AND SAVE IT. ISZ ACPSVQ / UPDATE POINTER TO NEXT SAVE AREA ADDRESS TAD I ACPGTQ / LOAD OFFSET OF ELEMENT IN Q-BLOCK TAD ACQADR / ... ADD IN ADDRESS OF Q-BLOCK,... DCA ACPPAR / ......AND SAVE IT. ISZ ACPGTQ / UPDATE POINTER INTO Q-BLOCK OFFSET TABLE. ACQCDF, CDFSYS / REACH INTO QUEUE FIELD,... /M018 TAD I ACPPAR / ...LOAD PARAMETER,... CDFFIO / ......CHANGE BACK TO CURRENT FIELD,.../M018 DCA I RXDDPB / .... AND PUT PARAMETER INTO THIS MODULE ISZ ACPACT / ALL ARGUMENTS PROCESSED? JMP ACPSV1 / NO - PROCESS NEXT ARG CLA CLL CML RTR /=2000 VERIFY BIT /A006 AND ACPFCT /ISOLATE VERIFY BIT /A006 DCA ACPVFY /SAVE /A006 TAD ACPFCT /GET FUNCTION CODE DCA ACPSVF /SAVE H/O BITS WITH F.C. TAD ACPFCT /GET FUNCTION CODE AND M377 /MASK OUT OLD FUNCTION BITS DCA ACPFCT /RESET JMP I ACPARG / ALL DONE - GOBACK / / /IO SETS UP SECTOR FOR PHYSICAL I/O FOR NON WINNIE /FOR WINNIE --PHYSIO USED ONLY FOR 8 OR 12 BIT READ BUT USES / --BLOCK NUMBER NOT TRACK SECTOR / /FOLLOWING ADDED ************** VERSION 019 *********** ACPIOL, 0 TAD ACXDIR /FUNCTION CODE SPA /IS =PHYSIO CMA /YES--SET POS CLL RAR /L/O BIT SET= WINNIE SZL CLA /IS IT WINNIE? JMP I ACPIOL /YES TAD ACSECT /NO--SET SECTOR FOR DSKHND DCA ACPSCT /=ACBLKN JMP I ACPIOL / / ACPACT, 0 / POINTER TO Q-BLOCK OFFSETS (FOR LOOP CONTROL) ACPPAR, 0 / ADDRESS OF Q-BLOCK PARAMETER (FOR INDIRECT USE) RXDDPB, 0 / INDIRECT ADDRESS FOR PARAM ADDRESSES ACPFCT, 0 / AREA TO SAVE FUNCTION PASSED BY USER ACPFNO, 0 / AREA TO SAVE FILE NUMBER ACSECT, 0 /AREA TO SAVE SECTOR ACPSVF, 0 /SAVE INPUT FUNCTION CODE M377, 377 /MASK PAGE / / ****ROUTINE TO ALLOCATE A BLOCK ON A DISKETTE**** /--------------------------------------------------------------------- / / THIS ROUTINE WILL READ IN THE ALLOCATION BLOCK, FIND THE FIRST / FREE BLOCK ON THE DISKETTE, MARK IT AS BEING IN USE (BIT OFF), / AND RETURN THE BLOCK NUMBER TO THE USER IN HIS Q-BLOCK. / THE ALLOCATION BLOCK IS THEN RE-WRITTEN TO THE DISKETTE. / /--------------------------------------------------------------------- /ACALLO - ALLOCATE A BLOCK ACALLO, 0 JMS ACUPIN / GO GET ALLOCATION BLOCK RXBALC / TELL ACUPIN WE WANT ALLOCATION BLOCK / GET NUMBER OF ALLOCATED WORDS TAD ACPBUF+4 DCA ACDAL5 / SAVE FOR COUNTING TAD (ACPBUF+5-1) / GET ADDR OF FIRST WORD DCA ACDAL7 / SAVE IT JMS ACPUTQ / SET A ZERO INTO 'RXQBLK' /a015 RXQBLK / /a015 ACDAL2, ISZ ACDAL5 / ANY MORE TO CHECK? SKP JMP I ACALLO / NO - OUT OF ROOM - FATAL ERROR ISZ ACDAL7 TAD I ACDAL7 / GET NEXT WORD SNA CLA / ANY FREE BLOCKS (1 BITS)? JMP ACDAL2 / NO - TRY NEXT WORD TAD ACDAL7 TAD (-ACPBUF-5) CLL RTL / AND MULT BY 8 CLL RAL DCA ACDAL5 / SAVE AS UPDATED COUNT TAD (ACBCON-1 / GET ADDR OF BIT MASK CONSTANTS DCA ACDFR3 / SAVE /C031 ACDAL3, ISZ ACDFR3 /INC TST BIT POINTER /A032 ISZ ACDAL5 / INCR COUNT OF BLOCK THAT IS FREE TAD I ACDAL7 / GET ALLOC INFO WORD AND I ACDFR3 / TEST THE BIT /C031 SNA JMP ACDAL3 / NOT ON - TRY NEXT BIT CMA / TURN ONLY THAT BIT OFF AND I ACDAL7 / IN ALLOC INFO WORD DCA I ACDAL7 / AND SAVE IT AC7777 / DECR COUNT TAD ACDAL5 / AND THAT'S THE BLOCK NUMBER JMS ACPUTQ / SAVE FOR USER RXQBLK AC7777 / DECR COUNT OF FREE TAD ACPBUF+3 DCA ACPBUF+3 /D012 JMS ACUPOT / GO PUT OUT UPDATED ALLOCATION BLOCK/M003 JMS ACDSP1 / SET FREE BLOCK COUNT IN QBLK /M003 JMS ACSETF /SET UPDATE SW /A012 JMP I ACALLO / RETURN ACDAL7, 0 / ****ROUTINE TO FREE UP A BLOCK ON A DISKETTE**** /-------------------------------------------------------------------- / / THIS ROUTINE WILL DE-ALLOCATE A BLOCK ON THE DISKETTE. / THE ROUTINE READS IN THE ALLOCATION BLOCK, TURNS ON THE / IN-USE BIT FOR THE BLOCK NUMBER PASSED TO IT BY THE / USER, INCREMENTS THE NUMBER OF FREE BLOCKS ON THE DISKETTE / UPDATES THAT VALUE IN THE ALLOCATION BLOCK, AND THEN / RE-WRITES THE ALLOCATION BLOCK BACK OUT ON THE DISKETTE. / /-------------------------------------------------------------------- ACDEAL, 0 TAD ACBLKN / GET BLOCK NUMBER TO DEALLOCATE DCA ACDFR3 / SAVE IT TO FREE UP AC JMS ACUPIN / GO GET ALLOCATION BLOCK RXBALC / TELL ACUPIN WE WANT ALLOCATION BLOCK TAD ACDFR3 / GET BLOCK NUMBER CLL RAR / DIV BY 8 TO GET WORD OFFSET CLL RAR CLL RAR TAD (ACPBUF+5) / MAKE INTO ADDR IN ALLOC INFO BLOCK IN MEMORY DCA ACDFR4 / SAVE TAD ACDFR3 / GET BLOCK NUMBER AGAIN AND (7) / GET LOW ORDER BITS - BIT OFFSET TO CLEAR TAD (ACBCON) / ADD TABLE ADDR DCA ACDFR3 / SAVE AS ADDR OF MASK WORD TAD I ACDFR3 / GET MASK WORD MQL / SAVE FOR "OR" TAD I ACDFR4 / ADD ALLOC WORD - THIS TURNS ON PROPER BIT MQA / BY "OR"ING WITH MASK WORD DCA I ACDFR4 / SAVE UPDATED WORD IN MEMORY ISZ ACPBUF+3 / INCR COUNT OF FREE BLOCKS JMS ACDSP1 / COPY COUNT TO QBLK /D012 JMS ACUPOT / GO PUT OUT THE ALLOCATION BLOCK JMS ACSETF /A012 JMP I ACDEAL / DONE - RETURN TO CALLER ACDFR3, 0 SVBLKN, /SAVE FIRST BLOCK NUMBER /M022 ACDAL5, /USE FOR ALLOCATE-NO CONFLICT WITH DEALLOCATE /M031 ACDFR4, 0 / ****ROUTINE TO SET THE FIRST BLOCK NUMBER OF A FILE**** /------------------------------------------------------------------ / / THIS ROUTINE WILL SET THE FIRST BLOCK (THE HEADER BLOCK) / OF A FILE. THE FILE NUMBER AND THE BLOCK NUMBER MUST / BE PASSED TO IT IN THE USER'S Q-BLOCK. / THE ROUTINE WILL READ IN THE DIRECTORY BLOCK (HOME BLOCK), / AND STUFF THE BLOCK NUMBER PASSED TO IT IN THE Q-BLOCK / INTO THE HOME BLOCK'S LIST OF POINTERS TO THE HEADER BLOCKS. / THE FILE NUMBER PASSED TO IT IN THE USER'S Q-BLOCK IS / USED TO FIND THE LOCATION IN THE HOME BLOCK TO STUFF THE / FIRST BLOCK NUMBER. THE HOME BLOCK IS THEN RE-WRITTEN TO / THE DISKETTE. / THE ENTRY POINT ADDRESS OF THIS ROUTINE IS USED BY 'ACBGET' ROUTINE / TO PUT ADDRESSES INTO IT FOR INDIRECT USE WHEN THIS ROUTINE IS NOT / BEING USED / /------------------------------------------------------------------- /ACBSET - SET BLOCKNO OF FIRST BLOCK OF FILE ACBGID, / LOCATION FOR INDIRECT ADDRESS FOR ACBGET ROUTINE ACBSET, 0 TAD ACBLKN DCA SVBLKN /SAVE TEMP JMS ACRDIR / GO GET DIRECTORY BLOCK /C024 TAD ACPFNO / GET FILE NUMBER TAD (ACPBUF+RXPDRI / ADD TO START OF DIR IN MEMORY DCA ACBSID / AND SAVE TO BE INDIRECTED THROUGH TAD SVBLKN / GET BLOCK NUMBER TO SET IT TO DCA I ACBSID / AND SET IT JMS ACSETF /SET UPDATE SW /A012 JMS ACUPOT / GO RE-WRITE DIRECTORY BLOCK JMP I ACBSET / AND RETURN / ****ROUTINE TO GET AND RETURN THE FIRST BLOCK NUMBER OF A FILE**** /--------------------------------------------------------------------------- / / THIS ROUTINE WILL GET AND RETURN THE FIRST BLOCK OF A FILE (THE / HEADER BLOCK NUMBER). THE USER MUST PASS THE FILE NUMBER TO IT / IN THE Q-BLOCK. THE ROUTINE WILL RETURN THE FIRST BLOCK NUMBER / OF THE FILE IN THE Q-BLOCK. THE ROUTINE READS THE DIRECTORY BLOCK / (I.E. THE HOME BLOCK), AND USES THE FILE NUMBER PASSED TO IT TO / FIND THE FIRST BLOCK NUMBER, STUFFS THAT NUMBER INTO THE USER'S / Q-BLOCK, AND THEN RETURNS. / THE ENTRY POINT ADDRESS OF THIS ROUTINE IS USED AS A LOCATION TO PUT / ADDRESSES FOR INDIRECT USE BY THE 'ACBSET' ROUTINE WHEN THIS ROUTINE / IS NOT IN USE. / /-------------------------------------------------------------------------- /ACBGET - GET BLOCK NO OF FIRST BLOCK OF FILE ACBSID, / LOCATION FOR INDIRECT ADDRESSES FOR ACBSET ROUTINE ACBGET, 0 JMS ACRDIR / GO GET DIRECTORY BLOCK /C024 TAD ACPFNO / GET FILE NUMBER TAD (ACPBUF+RXPDRI / ADD TO START OF DIR IN MEMORY DCA ACBGID / SAVE TAD I ACBGID / GET BLOCK NUMBER JMS ACPUTQ / AND PUT WHERE CALLER CAN GET IT RXQBLK / TELL ACPUTQ WHERE TO RETURN BLOCK # IN Q-BLOCK JMP I ACBGET / RETURN SIZE=.-ACBGET / /*****SPACE WARS MOVE AND SPLIT***** VER 017 /A017 FUNTBL, ACPDIR / ACPR08 / READ PHYSICAL FUNCTION 8BIT. ACPW08 / WRITE PHYSICAL FUNCTION 8BIT. ACREAD / READ LOGICAL. ACWRIT / WRITE LOGICAL. ACALLO / ALLOCATE A BLOCK. ACDEAL / DE-ALLOCATE A BLOCK. ACBGET / GET 1ST BLK. # OF 1ST BLK. OF FILE. ACBSET / SET 1ST BLK. # OF 1ST BLK. OF FILE. ACFREE / GET # OF FREE BLOCKS ON ACPICE. RZTYPE / GET DENSITY AND SET FOR SPECIFIED UNIT ACPR12 /READ PHYSICAL FUNCTION 12BIT. ACPW12 /WRIT PHYSICAL FUNCTION 12BIT. ACFMTS /FORMAT SD DISKETTE ACFMTD /FORMAT DD IFDEF WINNIE < ACMNT /MOUNT VOLUME /A017 ACDMNT /DISMOUNT VOLUME /A017 ACGETV /GET VOLUME DATA /A017 ACGETD /GET DIRECTORY DATA /A017 ACMNTS / MOUNT SYSTEM VOLUME /A017/C021 ACUPDD /UPDATE DIRECTORY /A022 ACGETS /GET STATUS /A024 > /END IFDEF WINNIE /A023 /*****MOVED TO HERE SPACE WARS WHEN WINNIE CODE ADDED VER. 017 ****** SPARE=.+177&7600-. PAGE / / / / *****ROUTINE TO READ HOME AND ALLOCATION BLOCKS**** / /---------------------------------------------------------------------- / / THIS ROUTINE IS USED INTERNALLY BY THE ACP ONLY. / IT SETS UP THE PROPER CALLING SEQUENCE FOR THE DRIVER / IN ORDER TO READ THE ALLOCATION OR HOME (DIRECTORY) BLOCK / INTO AN INTERNAL BUFFER. / IT IS ALSO USED IN PHYSICAL READS AND WRITES. / /---------------------------------------------------------------------- / / THIS ROUTINE CHECKS TO SEE IF BLOCK IS ALREADY IN MEMORY /A012 / IF NOT IT CALLS ACUPOT TO WRITE OUT IF NECESSARY /A012 / THEN READS IT IN. /A012 /----------------------------------------------------------------------- / ACUPIN - READ IN BLOCK INTO ACPBUF / JMS ACUPIN / BLOCK NUMBER TO BE READ / RETURN POINT ACUPIN, 0 TAD I ACUPIN / GET BLOCK NUMBER TO BE READ CIA /CHECK IS LAST BLOCK READ /A012 TAD LSTBLK /A012 SZA CLA /A012 JMP ACPIC /NO /A012 TAD ACUNIT /SAME DRIVE /A012 CIA TAD LSTDRV /LAST DRIVE READ FROM /A012 SNA CLA /A012 JMP ACPRT2 /YES BLOCK ALREADY IN BUFFER /A012 ACPIC, JMS ACUPOT /CHECK SEE IF BUFFER SHOULD BE WRITTEN OUT/A012 TAD I ACUPIN /BLK READ /A012 DCA ACBLKN / PASS BLOCK NO TO DRIVER IN CALL LIST TAD (ACPBUF) / GET ADDRESS OF INTERNAL BUFFER DCA ACBADR /PUT INTERNAL BUFFER ADDRESS INTO DRIVER CALL LIST TAD ACDFLD / GET CDF OF THIS FIELD DCA ACBFLD / PUT CDF OF THIS FIELD INTO DRIVER CALL LIST AC7777 / SET UP TRANSFER COUNT DCA RXDCNT / PUT TRANSFER COUNT INTO DRIVER CALL LIST JMS ACREAD / GO DO A READ OPERATION TAD ACSAVE /READ ERROR? /A012 SPA CLA /A012 JMP ACPRET /IGNORE REST AND RETURN FROM FUNCTION CODE/A012 TAD I ACUPIN /BLK READ /A012 DCA LSTBLK /SAVE /A012 TAD ACUNIT /UNIT TO BE READ /A012 DCA LSTDRV /LAST DRIVE READ /A012 ACPRT2, ISZ ACUPIN / BUMP UP RETURN ADDRESS JMP I ACUPIN / DONE / ACDFLD, CDFFIO /CDF ACP FIELD /M018 / ****ROUTINE TO WRITE OUT THE ALLOCATION OR HOME BLOCKS**** /------------------------------------------------------------------- / / THIS ROUTINE IS USED INTERNALLY BY THE ACP ONLY. / THE ROUTINE WILL WRITE OUT AN ALLOCATION OR HOME (DIRECTORY) / BLOCK THAT WAS PREVIOUSLY GOTTEN AND UPDATED. / IT IS ALSO USED IN PHYSICAL WRITES. /------------------------------------------------------------------- /ACUPOT - WRITE OUT ACPBUF ONTO DEVICE ACUPOT, 0 TAD ACUPDT /GET UPDATE MODE SW /A012 SNA CLA /IS IT SET /A012 JMP I ACUPOT /NO /A012 /D012 CLA CLL / CLEAR AC. TAD ACBLKN /SAVE BLOCK NUM TEMP /A012 DCA SVBLK1 /A012 TAD ACUNIT /SAVE DRIVE NO TEMP /A012 DCA SVUNI1 /A012 TAD LSTBLK /GET BLOCK NUM TO BE WRITTEN /A012 DCA ACBLKN /SET IT /A012 TAD LSTDRV /GET DRIVE BLOCK CAME FROM /A012 DCA ACUNIT /A012 TAD (ACPBUF) / GET ADDRESS OF INTERNAL BUFFER DCA ACBADR / PUT IT INTO DRIVER CALL LIST TAD ACDFLD / GET CDF TO THIS FIELD DCA ACBFLD / PUT IT INTO DRIVER CALL LIST AC7777 / SET UP TRANSFER COUNT DCA RXDCNT / PUT TRANSFER COUNT INTO DRIVER ALL LIST JMS SETPTR /SET DENSITY IN CASE DEV DIF. /A012 TAD ACPVFY /SAVE VERIFY SW..MAY NOT BE NEC /A012 DCA SAVVFY /...... /A012 CLA CLL CML RTR /2000=VERIFY BIT /A012 DCA ACPVFY /SET IT /A012 JMS ACWRIT / GO WRITE OUT THE BLOCK TAD SVBLK1 /GET BLK NUM /A012 DCA ACBLKN /RESET /A012 TAD SVUNI1 /DRIVE NUM /A012 DCA ACUNIT /RESET /A012 TAD SAVVFY /RESTORE VFY SW /A012 DCA ACPVFY /A012 TAD ACSAVE /CHECK ERROR /A012 SPA CLA /IS IT ERR? /A012 JMP ACPRET /YES EXIT /A012 DCA ACUPDT /CLEAR MODE SW FLAG USED TO DETERMINE/A012 /...WHETHER TO WRITE OUT BUFFER OR NOT/A012 /A012 JMS SETPTR /RESET DENSITY /A012 JMP I ACUPOT / DONE SVUNI1, 0 /TEMP SAVE WHILE DIR/ALLOC BLK WRITTEN /A012 SVBLK1, 0 /TEMP SAVE DRIVE /A012 SAVVFY, 0 /SAVE VERIFY SW /A012 / ****ROUTINE TO PUT VALUES INTO USER'S Q-BLOCK**** / /------------------------------------------------------------- / / THIS ROUTINE WILL PUT VALUES FROM THE AC INTO THE / Q-BLOCK THE USER PASSES TO THIS MODULE. / / CALLING SEQUENCE: / JMS ACPUTQ / OFFSET TO THE ENTRY IN QUEUE / RETURN POINT / VALUE MUST BE PASSED IN AC. / /------------------------------------------------------------- ACPUTQ, 0 DCA ACSAV1 / SAVE VALUE PASSED TO FREE AC /C010 TAD ACQADR / GET QUEUE BLOCK ADDRESS TAD I ACPUTQ / ADD IN THE OFFSET TO ELEMENT ISZ ACPUTQ / BUMP UP TO RETURN POINT DCA ACPTQ2 / STUFF ADDRESS FOR INDIRECT USE TAD ACQCDF / GET CDF INSTRUCTION OF Q-BLOCK FIELD DCA .+2 / STORE IT TO EXECUTE NEXT INSTRUCTION TAD ACSAV1 / GET VALUE PASSED*IS IN DIFF PAGE**CAUTION/C010 CDFSYS / CDF INSTRUCTION LOCATION /M018 DCA I ACPTQ2 / STUFF VALUE INTO Q-BLOCK CDFFIO / CDF BACK TO THIS FIELD /M018 JMP I ACPUTQ / RETURN TO CALLER ACPTQ2, 0 ACSAV1, 0 /SAVE TEMP /A010 / ****ROUTINE TO GET NUMBER OF FREE BLOCKS ON DISKETTE**** /------------------------------------------------------------------- / / THIS ROUTINE WILL READ IN THE ALLOCATION BLOCK, GET / THE NUMBER OF FREE BLOCKS ON THE DISKETTE AND PASS / THAT NUMBER BACK TO THE USER'S Q-BLOCK / /------------------------------------------------------------------- ACFREE, /SERVICE "# FREE BLOCKS" COMMAND 0 JMS ACUPIN / GO GET ALLOCATION BLOCK /C024 RXBALC / TELL ACUPIN WE WANT ALLOCATION BLOCK /C024 JMS ACDSP1 / COPY # TO QBLK JMP I ACFREE / RETURN /---------------- / /GET DIRECTORY BLOCK-----SPACE WARS MOVE----VER 024----- / ACRDIR, 0 /A024 JMS ACUPIN / GO GET DIRECTORY BLOCK /M024 RXBDIR / TELL ACUPIN WE WANT DIRECTORY BLOCK JMP I ACRDIR /A024 /--------------------------------------------------------------------- / / THE FOLLOWING SUBROUTINE DETERMINES THE FUNCTION TO BE / PERFORMED BY THE SPECIFIED DEVICE AND DISPATCHES TO THE / ROUTINE THAT SETS UP THE PARAMETERS AND CALLS THE / DRIVER. / /--------------------------------------------------------------------- ACPFUN, 0 / ENTRY POINT TO FUNCTION PROCESSOR. /D024 TAD ACPFCT / LOAD THE FUNCTION CODE /D017 JMS ACFNCT / ......AND THE TABLE HEAD. TAD ACFNCT / BUILD ADDRESS,... DCA ACPUTQ / ...OF CORRECT PROCESSOR,... TAD I ACPUTQ DCA ACPUTQ JMS I ACPUTQ / ......AND GO DO FUNCTION,... ACPRET, JMP I ACPFUN / RETURN TO CALLER. /C012 ACFNCT, FUNTBL /PTR TO FUNCTION TABLE /A017 /D024ACJTMP, 0 /TEMP /A017 SIZE=.-ACPFUN / /******SPACE WARS MOVE VER 024 ******* / LSTBLK, 0 /BLOCK CONTAINED IN ACP BUFFER /A012 LSTDRV, 0 /DRIVE BLOCK READ FROM /A012 /------------------------------------------------------------------- / THESE ARE THE BIT MASK CONSTANTS USED BY THE ALLOCATE AND / DE-ALLOCATE ROUTINES TO TURN THE IN-USE BITS ON OR OFF. / AN 'ON' IN-USE BIT MEANS THAT THE BLOCK IT REFERS TO IS / AVAILABLE FOR ALLOCATION (THIS IS PERVERSE---I KNOW, BUT...). / AN 'OFF' IN-USE BIT MEANS THAT THE BLOCK IT REFERS TO IS IN USE. / /--------------------------------------------------------------------- /ACBCON - BIT MASK CONSTANTS FOR ACALLO AND ACFREE ACBCON, 200 100 040 020 010 004 002 001 PAGE EJECT PGTOP=. / TOP OF THE PAGE /A035 /------------------------------------------------------------- / / THIS ROUTINE MOVES THE NUMBER OF FREE BLOCKS FROM THE / ALLOCATION BLOCK TO THE USER'S Q-BLOCK. / /--------------------------------------------------------------- ACDSP1, / COPY # FREE BLOCKS TO QBLK 0 TAD ACPBUF+3 / FROM ALLOC BLOCK JMS ACPUTQ / GO PUT VALUE INTO USER'S Q-BLOCK RXQSPC / TELL ACPUTQ WHERE IN Q-BLOCK VALUE MUST GO JMP I ACDSP1 / RETURN / **** ROUTINES TO PROCESS READ, WRITE. **** /--------------------------------------------------------------------- / / THE FOLLOWING ROUTINES PROCESS THE READ AND WRITE / FUNCTIONS. / /--------------------------------------------------------------------- ACREAD, 0 / ENTRY POINT TO "ACREAD". AC0002 / SET THE "READ" FUNCTION,... JMS ACWRIT / ...AND CALL THE COMMON IO ROUTINE. JMP I ACREAD / RETURN TO CALLER. / / / ACWRIT, 0 / ENTRY POINT TO 'ACWRIT' JMS DENADD /ADD DENSITY BIT TO IO OPERATION(AC) TAD ACPVFY /ILLEGAL FOR READ LOGICAL BUT IGNORED IN HNDLER/A006 DCA ACXDIR / PUT OPERATION INTO DRIVER CALL LIST JMS ACPIOC / GO DO THE I/O JMP I ACWRIT / RETURN TO CALLER. / ACPVFY, 0 /VERIFY BIT ILLEG.FOR READ LOGICALAND WRITE PHYSICAL BUT/A006 /......IGNORED IN HNDLER. /A006 /_____________________________________________________________________ / / PHYSICAL I/O ROUTINES / / ACPR08 READ 8 BIT MODE / ACPW08 WRITE 8 BIT MODE / ACPR12 READ 12 BIT MODE / ACPW12 WRITE 12 BIT MODE / / RXQTRK CONTAINS PHYSICAL TRACK TO BE READ / RXQSEC CONTAINS PHYSICAL SECTOR TO BE READ / / / ONLY 1 SECTOR TO BE PROCESSED AT THIS TIME / / /________________________________________________________________________ / ACPR08, 0 CLA CLL CML RTL /READ CODE = 2 TAD ACPVFY /VERIFY SW /A006 JMS ACPW08 /ADD MODE BIT AND COMPLEMENT JMP I ACPR08 /EXIT / / ACPW08, 0 TAD ACP100 /8 BIT MODE JMS DENADD /ADD DENSITY BIT TO CMND CMA /SET PHYSICAL I/O FUNCTION DCA ACXDIR /SAVE JMS ACPIOL /GET TRACK AND SECTOR JMS ACPIOC /CALL HNDLER JMP I ACPW08 /RETURN / ACP100, 100 /SD MODE BIT RZFMTD, 4 /FORMAT DISK FUNCTION CODE RZDDBT, 400 /DOUBLE DENSITY BIT / ACPR12, 0 CLA CLL CML RTL /2=READ CODE TAD ACPVFY /VERIFY BIT /A006 JMS ACPW12 /ADD MODE AND SET PHYSICAL FUNCTION JMP I ACPR12 /EXIT / ACPW12, 0 JMS DENADD /ADD DENSITY BIT TO CMND CMA DCA ACXDIR /SAVE JMS ACPIOL /GET TRACK AND SECTOR JMS ACPIOC /DO FUNCTION JMP I ACPW12 /EXIT / / /D019ACPIOL, 0 /D019 TAD ACSECT /D019 DCA ACPSCT /SAVEIN BLK NM /D019 JMP I ACPIOL / /ACFMTS FORMAT DISKETTE SD / ACFMTS, 0 CLA IAC BSW /=100 JMS ACFMTE /COMPL AND DO IT JMS SETPTR /SET DENSITY PTR DCA I DENADR /SAVE DENSITY /C042 JMP I ACFMTS /RETURN / /ACFMTD FORMAT DD / ACFMTD, 0 TAD RZDDBT /DOUBLE DENSITY JMS ACFMTE /COMPL AND DO IT JMS SETPTR /SET DD PTR CLA CLL CML RTR /SET BIT 3=1 DD RTR DCA I DENADR /SAVE DENSITY /C042 JMP I ACFMTD / ACFMTE, 0 TAD RZFMTD /ADD FUNCTION CODE CMA DCA ACXDIR /STORE FUNCTION JMS ACPIOC /DO IT JMP I ACFMTE /EXIT / /-------------------------------------------------------------- / /************** ADD DENSITY TO CURRENT CODE IN AC************** / /-------------------------------------------------------------- DENADD, 0 TAD I DENADR AND K3777 /CLEAR WINNIE MOUNTED BIT IF SET /A020 JMP I DENADD /IS HERE BECAUSE OF FULL PAGES K3777, 3777 / /-------------------------------------------------------------- / /*************** SETS THE DENSITY POINTER TO CURRENT UNIT****** / /-------------------------------------------------------------- SETPTR, 0 TAD ACUNIT /GET CURRENT UNIT NO TAD TBLPTR /ADD ADDRESS POINTER DCA DENADR /SAVE POINTER TAD DENADR /SET 2ND PTR ON DIF PAGE /A019 DCA DENPT2 /A019 JMP I SETPTR / TBLPTR, DRVDEN /POINTER TO TABLE DENADR, 0 /ADDRESS OF CURRENT UNIT DENSITY /------------------------------------------------------------------------ / / THIS CODE IS TO MAKE THE ACP COMPATIBLE WITH EXISTING CODE FOR / BASE LEVEL 1.1 ONLY. THE FORCE DIRECTORY BLOCK OUT ROUTINE / WAS NECESSARY BECAUSE THE RX HANDLER WOULD UPDATE THE / DIRECTORY/ALLOCATION BLOCKS WITHOUT WRITING THEM OUT EACH TIME / IT CHANGED THEM. IF THIS ROUTINE WASN'T CALLED, THERE WAS A DANGER / THAT THE CHANGED BLOCK WOULD NOT GET WRITTEN OUT. / THIS ROUTINE WILL GO AWAY FOR OTHER BASE LEVELS. / /-------------------------------------------------------------------------- ACPDIR, 0 / ENSURE THAT DIR/ALLOC BLOCK IS WRITTEN OUT JMS ACUPOT /WRITE OUT BLOCK IF NECESSARY /A012 DCA LSTBLK /CLEAR LAST BLOCK READ /A012 JMP I ACPDIR / GO BACK /______________________________________________________________________ / SET MODE SWITCH 1=BUFFER CONTAINS BLOCK # READ / AND DRIVE READ FROM... / KEPT IN LSTDRV, LSTBLK / /_______________________________________________________________________ ACSETF, 0 /SET MODE SW CLA CLL IAC /1 /A012 DCA ACUPDT /A012 JMP I ACSETF /RETURN /A012 / / ACUPDT, 0 /STOREAGE AREA FOR BUFFER MODE SW /A012 / /*******SPACE WARS MOVE VER 028 ******** / MSGCMD, TEXT /^P!E^P^S!D^S^S^P^S^P^S!D^P^S^P^S/ /C030 MSGRD, IFDEF ENGLSH /M030 IFDEF SPANISH IFDEF DUTCH IFDEF ITALIAN IFDEF V30NOR /A034 MSGWRT, IFDEF ENGLSH IFDEF SPANISH IFDEF DUTCH IFDEF ITALIAN /M030 IFDEF V30NOR /A034 / /*******SPACE WARS MOVE VER 024 ******** / DRVTBL, 0000 /0=SD /A017 0400 /1=DD /A017 1400 /2=RX50 SINGLE SIDE /A017 1400 /3=RX50 DBLE SIDED /A017 WINCOD, 4001 /4=WINNIE /A017 /--------------- PAGE IFNZRO .-PGTOP-200 /A035 EJECT /------------------------------------------------------------------------- / / THE ROUTINE BELOW WILL GET THE DENSITY OF THE DISKETTE OF THE / DRIVE PASSED TO IT BY THE USER IN THE Q-BLOCK / / / RETURNS 0=SD RX01/RX02 / 1=DD RX02 / 2=RX50 SINGLE SIDED / 3=RX50 DOUBLE SIDED / 4=WINNIE /A017 /----------------------------------------------------------------------- / RZTYPE, 0 / GET DENSITY OF DISK DRIVE CLA CLL CML IAC RTL /6 = READ STATUS CMA /PHYS I/O DCA ACXDIR /SET CODE JMS ACPIOC /DO IT TAD ACSAVE /GET RETURN CODE SPA CLA /IS IT ERROR? /C010 JMP I RZTYPE /YES DON'T SET DENSITY TAD ACSAVE /A010 TAD DRTPTR /DRIVE TYPE TABLE PTR /A017 DCA DRVTMP /TMP PTR /A017 TAD I DRVTMP /GET VALUE /A017 SETDNA, DCA I DENPT2 /SET TO CURRENT UNIT TAD ACSAVE /GET DENSITY /A011 JMS ACPUTQ /PUT INT SPC AT THIS POINT /A011 RXQSPC /A011 JMP I RZTYPE / GO BACK TO CALLER DENPT2, 0 /TEMP ADDR PTR DRTPTR, DRVTBL /PNTR TO DRIVER TYPE TABLE /A017 DRVTMP, 0 /TEMP POINTER /A017 /-------------------- / **** COMMON I/O REQUEST ROUTINE **** /--------------------------------------------------------------------- / / THE FOLLOWING ROUTINE IS THE COMMON I/O ROUTINE, DOING / REQUESTS AS REQUIRED BY THE Q-BLOCK ENTRIES, OR / INTERNAL ANCILLARY CONTROL PROCESSOR FUNCTIONS. / THE CALLING SEQUENCE IS: / JMS ACPIOC / THE USER MUST INITIALIZE THE CONSTANTS IMMEDIATELY / FOLLOWING THE JMS I DRIVER INSTRUCTION BEFORE ENTERING / THIS ROUTINE. (SEE BELOW). / /--------------------------------------------------------------------- ACPIOC, 0 / ENTRY POINT TO "ACPIOC". ACPCNT, /A017 TAD RETFLD /SET RETURN FLD IN AC CIFSYS /SET TO DRIVER FLD /M018 CALLDR, JMS I DRIVER / .........AND CALL DRIVER. ACUNIT, 0 / DEVICE UNIT NUMBER. ACPSCT, /SECTOR NO FOR PHYSICAL I/O ACBLKN, 0 / STARTING BLOCK NUMBER. ACBFLD, 0 / BUFFER FIELD "CDF". ACBADR, 0 / BUFFER FIELD ADDRESS. RXDCNT, 0 / DEVICE BLOCK COUNT TO TRANSFER. ACTRAK, 0 /TRACK NO PHYSICAL IO ACXDIR, 0 / CODE FOR READ/WRITE (R=2,W=0) SYSRET, /A017 DCA ACSAVE / SAVE THE AC JUST RETURNED JMP I ACPIOC / GO BACK TO CALLER ACSAVE, 0 / SPOT TO SAVE RETURN CODE DRIVER, RX2SYS / ADDRESS OF DEVICE HANDLER RETFLD, CDIFIO /RETURN FLD /M018 RX2SYS=RXDLDP /DRIVER START SIZE=.-ACPIOC EJECT / /THE FOLLOWING IS CODE TO ADDRESS THE WINNIE /A017 / IFDEF WINNIE < MNTVOL=6 /6=MOUNT VOLUME DMTVOL=10 /10=DISMOUNT VOLUME GTVOL=12 /12=GET VOLUME DATA RDDIR=14 /14=READ DIR DATA VOLUPD=16 /16=UPDATE VOLUME DATA GTDEVS=20 /20=GET DEVICE STATUS /A024 / /MOUNT WINNIE VOLUME-- / UNIT NUMBER IN ACUNIT / VOLUME NAME POINTER IN ACBADR / VOLUME NAME FLD IN ACBFLD / ACMNT, 0 CLA IAC /CHECK IF DEVICE MOUNTED /C022 AND I DENPT2 / /C022 SZA CLA /A022 JMP I ACMNT /IS MOUNTED RETURN /A019 JMS ACCHKV /YES MOUNT IT -MNTVOL /MOUNT VOLUME COMMAND WITH WINNIE BIT<11> TAD ACSAVE /ERROR? /A020 SPA CLA /A020 JMP I ACMNT /YES /A020 TAD WINCOD /NO (4001) /A020 DCA I DENPT2 /SET MOUNTED WINNIE CODE IN TABLE /A020 JMP I ACMNT /RETURN / / / /DISMOUNT COMMAND / UNIT NUMBER IN ACUNIT / ACDMNT, 0 CLA IAC /CHECK IF DEVICE MOUNTED /C022 AND I DENPT2 / /C022 SNA CLA /C022 JMP ACDMTE /NOT MOUNTED JMS ACCHKV /IS MOUNTED -DMTVOL /DISMOUNT COMMAND WITH WINNIE BIT<11> TAD ACSAVE /A020 SPA CLA /ERROR? /A020 JMP I ACDMNT /YES EXIT /A020 TAD DRVDEN /DEV 0 DEN CODE /A024 SPA CLA /IS 0=WINNIE /A024 JMP ACDMNV /YES /A024 CLA CMA /-1 TAD ACUNIT /DRIVE # SZA CLA /=DRIVE 1? ACDMNV, /A024 CLA CLL CML RAR /NO RESET WINNIE BIT(4000) DCA I DENPT2 /CLEAR MOUNT BIT JMP I ACDMNT /RETURN / ACDMTE, /C022 CLA CMA /-1 /A022 DCA ACSAVE /SET ERROR RET /A022 JMP I ACDMNT /RET / / /GET VOLUME DATA / UNIT NUMBER IN ACUNIT / ACGETV, 0 JMS ACCHKV /CHECK VOL AND EXEC COMMAND -GTVOL /GET VOLUME DATA CMND WITH WINNIE BIT<11> JMP I ACGETV / /GET DIRECTORY DATA / ACGETD, 0 JMS ACCHKV /CHECK VOL AND EXEC COMMAND -RDDIR /GET DIRECTORY DATA CMND WITH WINNIE BIT<11> JMP I ACGETD / ACUPDD, 0 /UPDATE VOLUME JMS ACCHKV /CHECK VOLUME AND UPDATE COMMAND /A022 -VOLUPD /UPDATE VOLUME /A022 JMP I ACUPDD /RET /A022 /D022 CHKMNT, 0 /CHECK VOLUME MOUNTED /D022 CLA IAC /CHECK IF DEVICE MOUNTED /D022 AND I DENPT2 / /D022 SZA CLA /D022 ISZ CHKMNT /MOUNTED /D022 JMP I CHKMNT /NOT MOUNTED / ACCHKV, 0 TAD I ACCHKV /GET COMMAND DCA ACXDIR /SET IT JMS ACPIOC /DO IT ACCHKX, ISZ ACCHKV JMP I ACCHKV /RET / /D022 ACSETE, 0 /D022 CLA CMA /-1 /D022 DCA ACSAVE /SET ERROR RET /D022 JMP I ACSETE / > /END ENDIF WINNIE /A017 / EJECT / / / /MOUNT SYSTEM BOOTABLE VOLUME / IFDEF WINNIE < ACMNTS, 0 TAD (20 /SET UNIT 0 START UP VOLUME BIT /A021 DCA ACUNIT /SET IT /A021 JMS ACMNT /DO IT /A021 JMP I ACMNTS /RET /A021 / / /RDGTST ROUTINE GETS STATUS OF LAST BLOCK READ /A024 / AND RETURNS IN WORD 1 BIT 5--1IF PHYSICAL CYLNDER 0 /A024 / BIT 6--IF WRITE FAULT LAST DSK OP /A024 / BIT 7--IF SELECTED UNIT DEFINED /A052 / BIT 8--UNDEFINED /A024 / BIT 9--IF SEEK COMPLETE /A024 / BIT10--IF UNIT 1 SELECTED /A024 / BIT11--IF UNIT 0 SELECTED /A024 / / WORD 2 =CYLINDER NUMBER /A024 / WORD 3 =HEAD NUMBER /A024 / WORD 4 =SECTOR NUMBER /A024 / WORD 5 =CONTROLLER VERSION NUMBER /A024 / ACGETS, 0 /A024 JMS ACCHKV /CHECK VOLUME AND EXEC CMND /A024 -GTDEVS /GET DEVICE STATUS /A024 JMP I ACGETS /RET /A024 > /END IFDEF WINNIE /A023 / NORETN, /A017 /M017 TAD ACUPDT /UPDATE SW(HOME OR ALLOC BLK) /A026 SNA CLA /HOME OR ALLOC BLOCK TO BE UPDATED?/A026 JMP NORET1 /NO...SET TO VERIFY DEVICE WITH ERROR/A026 TAD (LSTDRV /POINTER TO DRIVE NEEDING UPDATE/A026 SKP /A026 NORET1, TAD (ACUNIT /POINTER TO UNIT WITH ERROR /A026 DCA PTR7 /SET POINTER /A026 TAD ACXDIR /GET COMMAND /A026 SPA /IS IT PHYSICAL I/O /A026 CMA /YES -SET COMMAND BITS /A026 AND CON2 /MASK READ/WRITE /A026 SNA CLA /0=WRITE 2=READ /A026 JMP NORET3 /=WRITE /A026 TAD (MSGRD /POINTER TO READ /A026 SKP /A026 NORET3, TAD (MSGWRT /POINTER TO WRITE /A026 JMP NORET5 /CONTINUE NEXT PAGE /A026 CON2, 2 /A026 /-------------------- PAGE EJECT /***************************************************************** / /------------------ ACP ERROR HANDLER ---------------------------- /----------THIS ROUTINE CHECKS THE ERROR CODES-------------------- /----------PRINTS THE APPROPRIATE MSGS, THEN---------------------- /----------RETURNS TO THE CALLING PROGRAM IF THE ----------------- /----------BIT 0 OF THE FUNCTION CODE WAS SET--------------------- /----------ELSE IT SETS THE RETURN CODE TO 0---------------------- /----------TO PREVENT ANY MORE CALLS TO THE I/O------------------- /----------THIS ROUTINE MAY BE REPLACED BY A CALL----------------- /----------TO THE LOAD ROUTINE IN THE HANDLER -------------------- /---------- TO REBOOT THE SYSTEM TO GET BACK TO------------------- /---------- MAIN MENU. THIS IS BECAUSE MAIN--------------------- /---------- MENU CODE MAY NOT BE IN CORE WHEN I/O----------------- /------------ IS CALLED. ---------------------- / / /---------- IF ERROR PROCESSING DOES NOT CHANGE------------------- /---------- SIGNIFICANTLY FROM CURRENT STATUS ------------------- /----------- THEN THIS ROUTINE CAN HANDLE ALL ------------------- /----------- ERRORS THE SAME. IE...NO NEED FOR------------------- /----------- BITS 1-3 TO REPRESENT ERR TYPES. ------------------- /----------- CHANGES TO HANDLER COULD ALSO BE -------------------- /----------- MADE.............................-------------------- /***************************************************************** NORET5, /A017 /C026 DCA PTR4 /SET IT /A026 CIFMNU /A026 JMS I IOACAL /PRINT MESSAGE /A026 0 /A026 PTR0, MSGCMD /MESSAGE COMMAND STRING /A026 0000 /A026 1015 /LINE 10- COL 15 /C027 PTR1, MSGA /"ERROR ON UNIT #" /A026 PTR2, ACUNIT /UNIT # /A026 PTR3, MSGB /"WHILE TRYING TO " /A026 PTR4, MSGRD /READ-WRITE /A026 1215 /LINE 12- COL 15 /C027 MSGRTR /"CR TO RETRY." /A030 1415 /LINE 14- COL 15 /A030 PTR6, MSGC /"OR PRESS GOLD MENU TO VERIFY UNIT # /C030 PTR7, ACUNIT /UNIT NUMBER /A026 1725 /LINE 17- COL 25 /C030 MSGD /" WARNING /A026 2220 /LINE 22- COL 15 /C030 MSGE /FAILURE TO VERIFY WILL CAUSE DOC ERRS /A026 /d033 JMP GETGLD /GET GOLD HALT GETGLD, CIFSYS XLTIN JMP GETGLD /WAIT TAD (-EDNWLN) /IS IT CRET? /A030 SNA /A030 JMP ACPCNT /YES RETRY FUNCTION /A030 TAD (EDNWLN-EDMENU) /IS IT GOLD MENU? SZA CLA JMP GETGLD /NO CDFSYS /SET TO SYSTEM FIELD /A027 TAD I WRMSTR /GET DATE TO SAVE FOR WARM RESTART /C027 CMA / /C027 DCA I WRMSTR /SAVE IT /C027 JMS I BHOOK / jump to the blastr via BHOOK in WPFILS/a033 -FALBEN / replace startup from panel mem /a033 IOF /TURN OFF INT. FOR CALL TO WPSYS /A007 CLA CLL CML RAR /4000 /A028 CDFFIO /RESET MYFIELD /A029 TAD I PTR7 /UNIT NUMBER /C029 /d033 CDFSYS /SET TO HANDLER FIELD /A028 CDISYS /SET TO DRIVER FIELD /m033 /M018 DCA I VFYPTR /SAVE IT /A028 JMP I DRVPTR /START UP SYSTEM DRVPTR, RXDRIN+1 /START OF DRIVER LOAD-IGNORE BOOT CODE(ALREADY SET)/C025 WRMSTR, DAMNTH /SWITCH TO SET TYPE START 0=COLD 1=WARM /A027 VFYPTR, SVFVFY-CLOCK+RANDOM /SET POINTER TO LAST LOC IN STRING/A028 BHOOK, FBHOOK / link to real BHOOK in WPFILS see WPF1 /a033 / SET ERROR DRIVE NO INTO TEXT STRING /----------------AFTER AN ERROR WITH NO RET SET/A016 / / MSGA, IFDEF ENGLSH /C027 IFDEF SPANISH /C027 IFDEF DUTCH /C027 IFDEF ITALIAN IFDEF V30NOR /A034 MSGB, IFDEF ENGLSH /A026 IFDEF SPANISH IFDEF DUTCH IFDEF ITALIAN IFDEF V30NOR /A034 MSGC, IFDEF ENGLSH /C027 IFDEF SPANISH /C027 IFDEF DUTCH IFDEF ITALIAN IFDEF V30NOR /A034 MSGRTR, IFDEF ENGLSH /A030 IFDEF SPANISH IFDEF DUTCH IFDEF ITALIAN IFDEF V30NOR /A034 MSGD, IFDEF ENGLSH /A026 IFDEF SPANISH IFDEF DUTCH IFDEF ITALIAN / IFDEF V30NOR /A034 MSGE, IFDEF ENGLSH < TEXT /&FAILURE TO VERIFY WILL LEAD TO CORRUPTED DOCUMENTS/> /A026 IFDEF SPANISH < TEXT /&EL FRASCO DE LA VERIFICACI\SN = CORRUPCI\SN DE DOCS/> IFDEF DUTCH < TEXT /&NON-VERIFICATIE LEIDT TOT VERMINKTE DOCS./> /A026 IFDEF ITALIAN < TEXT /&ERRORE IN VERIFICA SIGNIFICA DOCUMENTI PERSI/ > IFDEF V30NOR < TEXT '&UTEN VERIFISERING BLIR DOK. \XDELAGT' > /A046 / PAGE INTBUF, 0 /INTERNAL BUFFER THIS PAGE / EJECT /THIS CODE WAS DELETED IN VERSION 026.... BUT TO SHOW WHAT CODE WAS /AND TO MAKE NEW CODE LEGIBLE THE CODE IS SHOWN AS FOLLOWS.. /D026/ /D026/FOLLOWING CODE DUE TO SPACE WARS***VER 017****** /D026/ /D026/ /D026ACSETD, 0 /D026 TAD ACUNIT /GET DRIVE # /D005 SZA CLA /IS IT DRIVE 0? /D005 IAC /NO IT IS DRIVE 1 /D026 TAD ACDRVC /ADD DRIVE CONSTANT /D026 DCA ACDRVT /SET DRIVE TEXT /D026 TAD ACXDIR /GET FUNCTION CODE /D026 SPA /PHYSIO? /D026 CMA /YES SET LOG /D026 AND CON2 /CHECK READ BIT /D017 SNA CLA /IS IT READ? /D017 CLA CLL IAC RTL /NO SET 4 /C009 /D026 CLL RTL /IF READ SET TO 4 ELSEIS= 0 /A017 /D026 TAD ACPRPT /YES GET READ POINTER****+3 =WRT PTR /D026 DCA X5 /SET AOUT INDEX /D026 TAD ACPIPT /PTR TO I/O CONSTANT /D026 DCA X4 /SET /D026 TAD I X5 /GET 1ST OF 3 WORDS /D026 DCA I X4 /SET /D026 TAD I X5 /D026 DCA I X4 /D026 TAD I X5 /D026 DCA I X4 /D026 JMP I ACSETD /RET /D026ACPRPT, ACRDCN-1 /PTR TO READ CONST /D026ACPIPT, ACDRIO-1 /PTR TO I/O CONST. /D026CON2, 2 /D026NORETN, /A017 /D026 JMS ACSETD /SET DRIVE NO IN TEXT /D026 TAD ACPALS /GET ACP ALLOC SW /A016 /D026 SZA CLA /WAS ERROR ON WRITE ALLOC/DIR /A016 /D026 JMP WRALER /YES ERROR ON WRITE ALLOC/DIR /A016 /D026 ISZ ACPALS /NO.. TRY TO WRITE ALLOC/DIR BLK/A016 /D026 JMS ACPDIR /A016 /D026WRALER, /A016 /D026 /D026 IOF /TURN OF INTERUPTS FOR PRINT..JWAIT SHOULD RESET /D026 TAD (MSG0 /ADDRESS CLEAR SCREENAND ERROR MSG /D026 JMS TTY /PRINT /D026 TAD (ACCRLF-1 /D026 JMS TTY /CR LF /D026 TAD (MSG1 /D026 JMS TTY /D026ACPALS, 0 /WRITE ALLOC/DIR SW. SET WHEN TRYING TO WRITE /A016 /D026TTY, 0 /D026 DCA X5 /D026ACNXT, CLA CLL CMA RAL /-2 /D026 DCA ACTMP2 /D026 TAD I X5 /GET WORD /D026 DCA ACTMP3 /D026 TAD ACTMP3 /GET WORD /D026ACLOOP, AND M7700 /D026 JMS ACCHCK /CHECK CHAR /D026 JMP ACSKIP /IS 77...GET NEXT CHAR /D026 JMP ACPRNT /PRINT CHAR AS IS /D026 SNA /D026 JMP I TTY /RETURN /D026 TAD NEG40 /SET TO ASCII /D026 SPA /D026 TAD CON100 /D026 TAD CON40 /D026ACPRNT, TLS /PRINT /D026 TSF /D026 JMP .-1 /WAIT DONE /D026ACSKIP, CLA /D026 TAD ACTMP3 /D026 BSW /D026 ISZ ACTMP2 /DONE TWICE /D026 JMP ACLOOP /NO /D026 JMP ACNXT /YES NEXT CHAR /D026/ /D026/ THIS ROUTINE DETERMINES WHETHER THE CHAR TO BE DISPLAYED IS A /D026/ 77 OR NOT. IF A 77 IS DETECTED IT IS IGNORED AND A SWITCH IS /D026/ SET TO PRINT THE NEXT CHAR IN THE BUFFER. IF UPON ENTRY THE SW /D026/ IS SET THE SW IS CLEARED AND RETURN IS MADE TO THE CALL+2 (PRINT) /D026/ IF NOT 77 AND NOT SW SET RETURN IS MADE TO CALL+3 TO CONTINUE /D026/ /D026ACCHCK, 0 /D026 DCA ACSVCH /SAVE AC /D026 TAD ACISSW /SKIP SWITCH SET TO PRINT AS IS /D026 SZA CLA /D026 JMP ACASIS /PRINT AS IS /D026 TAD ACSVCH /D026 TAD CON100 /WAS CHAR=77 /D026 SZA CLA /D026 JMP ACCONT /NO CONTINUE /D026 ISZ ACISSW /YES SET SW /D026 JMP I ACCHCK /RETURN CALL+1(SKIP-GET NEXT) /D026ACCONT, ISZ ACCHCK /SET RETURN = CALL+3 /D026ACASIS, ISZ ACCHCK /SET RETURN +2 PRINT CHAR AS IS /D026 DCA ACISSW /CLEAR SW /D026 TAD ACSVCH /GET CHAR /D026 BSW /D026 JMP I ACCHCK /RET /D026ACISSW, 0 /SW TO DETERMINE IF LAST CHAR WAS 77 /D026ACSVCH, 0 /SAVE CHAR WHILE PROCESSING /D026CON100, 100 / /D026/ ALL ERRORS PRINT SAME MESSAGES AT THIS TIME /D026/ BUT HOOKS ARE IN THERE TO PRINT DIFFERENT MESSAGES /D026/ WHEN DESIRED....... IF ONLY ONE MESSAGE /D026/ WILL BE ON FINAL VERSION CLEAN UP CAN SAVE CODE TO DO THIS /D026/ IN ORDER TO MODIFY MIDDLE OF TEXT MESSAGE /D026/ THIS MODULE IS ASSEMBLED WITH THE /F OPTION /D026/ TO ELIMINATE A 6 BIT 0 PLACED AT END OF EACH /D026/ TEXT STATEMENT......THIS IS ONLY TEMPORARY /D026/ A SUBROUTINE WILL BE WRITTEN TO PRINT SEVERAT LINES /D026/ OF TEXT THUS ELIMINATING THE NEED FOR THIS OPTION /D026// /D026MSG0=.-1 /D026/ ?=77 [=33 ?[[J=CLEAR SCREEN ?[[H=SET HOME POSITION /D026/ /D026/ TEXT /?[[J?[[M/ IS IN OCTAL TO AVOID 0 CHAR AFTER TEXT FOR 1 MSG. /D026 7733 /?[ /D026 3310 /[H /D026 7733 /?[ /D026 3312 /[J /D026ACDRVT=MSGA+12 /PTR TO DRIVE # /D026 ACDRIO=.-4 /TO OVERLAY FUNCTION /D026/ TEXT /BLOCK NO. / /D026/ACBKNO, TEXT /----/ /D026ACCRLF, 7712 /CARRIAGE RET /D026 7715 /LINE FEED /D026 0 /TERMINATOR /D026MSG1=.-1 /D026/D024ACEND, 0 /END TEXT /D026MSG2=MSG0 /D026MSG3=MSG0 /D026M7700, 7700 /D026NEG40, -40 /D026CON40, 40 /D026/D024ACTMP0, 0 /D026/D024ACTMP1, 0 /PTR TO PRINT STRING /D026ACTMP2, 0 /CHARACTER COUNT /D026ACTMP3, 0 /WORD TO BE PROCESSED /D026/D024AC3400, 3400 /D026/D024ACERSV, 0 /SAVE ERROR BITS IN L/O BITS /D026ACDRVC, 4060 /DRIVE CONSTANT=" 0"   /WPVFY - VERIFY IMAGE STRUCTURE / .TITLE Verify 3.3 / .VERSION / / / / COPYRIGHT (C) 1980 / DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASSACHUSETTS 01754 / / THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED / ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE / INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER / COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY / OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY / TRANSFERRED. / / THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE / AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT / CORPORATION. / / DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS / SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL. / /++ / FACILITY: / / ABSTRACT: / / ENVIRONMENT: / / 058 KMD 30-Sep-85 Add Dutch & Spanish / 057 mdh 19/aug/85 fix italian IFDEF bugs / PS needs more translation / *** EDIT HISTORY *** / / 056 LAD Changes to recognize newly valid format: / a valid image may be smaller than the medium on which it / resides. This situation can only be true on RX50 and RD5x / A system image must always use all of an RX01/02 and must / be at least 800 blocks on RX50 and RD5x. / 055 LAD to 10/26/84 BP problems being addressed & going into / Version 2.0. This is a continuation of the clarifying / re-write and V2.0 functionality ongoing in 054. / / 054 LAD to 8/8/84 Add logic & modify logic to recognize & / properly handle RD50 based systems. Added ^P in CRSHM2 / from 1.5 bug fix. Added logic in WPSDET to look for / possible COS images & warn the user that the media may / not be in WPS format, added message "BEWARE". FIXED A / bug in CHKCOS: it has never checked COS COUNTS correctly / due to a data field error. / / 053 LAD 07-JAN-84 Add logic: unless the medium being ver- / ified has a valid WPS Home block or Allocation block, / it is considered to be of class "utility" and structure / checking and copying will not be allowed. / / 052 WJY 06-JAN-84 Add revised logic to handle non-existent / drives. / 051 LAD 20-DEC-83 Changed VEHBLK to look for a document / count of -1 to ease Spelling Checker problem. / 050 LAD 20-DEC-83 Compress and move most code in Field 5 / to Field 3. F5 now just the IOA calling routine & text. / 049 LAD 27-NOV-83 Make prompts re-entrant. / 048 LAD 22-NOV-83 Corrected bad Drive 0 prompt. / 047 LAD 20-N0V-83 Corrected "Insert Volume .... prompt. / Changed old /A047 entries to /A0X7. / 046 WJY 20-NOV-83 Modify to return system blocks to the / free pool when recovering a system disk / 045 LAD 20-NOV-83 Modified messages and calls to reflect / "WINNY" considerations. Modified VEPRMT to handle 3 / passed arguments. Added note for Natural Languages viz / IFDEFs in arguments to IOASET. / 044 WJY 16-NOV-83 ADD CODE TO CHECK SIZE OF WINNIE VOL. / 043 WCE 30-0CT-83 CHANGE REG0-REG7 TAGS TO AIR10-AIR17 / 042 LAD 01-0CT-83 "WINNYIZE" VERIFY. / 041 BCR 28-SEP-83 GOLD HALT return to MENU only / 040 WCE 19-JUL-83 Modify label for new prefix file / 039 DFB 21-FEB-83 Fix for ifndef condor / 038 GJP 09-JAN-83 NOT PICKING UP ALLOCATED BUT UNASSIGNED / BLOCKS, FIXED TO PICK THEM UP / 037 GJP 17-DEC-82 REMOVE SUPERFLUOUS CODE / 036 GJP 16-DEC-82 FIX REPORT BAD DISK BUG / 035 GJP 16-NOV-82 REMOVE RESIDUE LINE FROM SCREEN / 034 GJP 04-NOV-82 REMOVE ERROR MESSAGE FROM SCREEN (COSMETIC) / 033 GJP 01-NOV-82 FIX SYSTEM DISKETES NOT VERIFYING / 032 GJP 26-OCT-82 FIX OVERWRITE ON NO DISKETTE IN DRIVE / 031 GJP 16-OCT-82 FIX RING BUFFER BUG / 030 GJP 14-OCT-82 COPY COSCNT NOT IN HOME BLOCK BUG / 027 GJP 27-MAY-82 ALTER TO HANDLE RX50 DRIVES / 026 PHA 09-APR-82 INSERT LOOP FOR WHEN DRIVE #1 IS LEFT / OPEN, ALLOWS CONT AND GOLD+MENU / 025 PHA 22-MAR-82 EXTRA flag for go-to page test / 024 PHA 1-MAR-82 fix baddsc data field and message / 023 PHA 28-DEC-81 increase screen hold time on err msgs / 022 PHA 11-DEC-81 make sure object disk is same density / as source before copying / 021 PHA 10-DEC-81 FIX problem when copying large files / 020 PHA 5-DEC-81 ADD routine to copy go-to-page blocks / when copying from a bad diskette / 019 PHA 18-NOV-81 ADD rapid pagination structure test to / document header test / 018 PHA 03-NOV-81 Moved write out code into verify.pa / was previously WTVFY.PA / 017 PHA 23-Oct-81 Hold screen a moment and buzz terminal / on errors other than readability / 016 PHA 22-Oct-81 Changes for double density / 015 GDH 20-OCT-81 Deimplemented LOCK/UNLOCK. / 0014 DIM 3-SEPT-81 Changed left drive 0 and right / drive to drive 1 for French 278 / 0013 GDH 27-Aug-81 WPFILS calling seq changes. / 0012 TT 07-JUL-81 Removed superfluous conditionals / 0011 AJF 22-APR-81 CHANGED LEFT DRIVE TO DRIVE 0 / AND RIGHT DRIVE TO DRIVE 1 / 0010 JM 01-APR-81 Changes for CANADA / 0009 DM,JM 15-SEPT-80 Merged Scandi and Europe/English / 0008 REG 12-AUG-80 ADDED THIS STANDARD HEADER / 0007 CMW 06-AUG-80 MADE GRAMMICAL CHANGES FOR DUTCH / 0006 DSS 09-JUL-80 MODIFIED FOR ENGLISH/FRENCH-CANADIAN / 0005 CMW 05-MAY-80 ENTERED CANADA TRANSLATIONS / 0004 DSS 17-APR-80 ENTERED DUTCH FIXES / 0003 GLT 18-Mar-80 Changed VEPRMT to use a different / / method of getting its arguments. Changed / / SETMS1,2 and 3 to reflect this change. / 0002 GLT 28-Feb-80 Changed VEPRMT to return +1 instead of / / +2 because it seems that it used to have / / a "No" branch which has been removed in a / / previous edit. (see VEPRMT) / 0001 CMW GLT 10-JAN-80 ADDED FRENCH,DUTCH,GERMAN TRANSLATIONS / / French diacritical substitutions: / / "["=L.A.E, "]"=L.G.E; "&" not used. / / German diacritical substututions: / / "["=L.U.A, "\"=L.U.O, "]"=L.U.U; "&" for U.C. / / Dutch diacritical substitution: / / "&["="ij" / 3.Y MB 11-MAY-78 FIX COS CONVERSION AGAIN / 2.7+ MB 02/28/78 TAKE CARE OF BAD SPACING IN MESSAGES / 2.7+ MB 03/15/78 FIX BAD MESSAGE AFTER VERIFY / / IT SAID DISK BAD / /WTVFY - WRITE OUT WPVFY FIELD 0 *200 JMP I .+2 JMP I .+2 RXLOAD 7605 *RXLDLS RXEWT 0 RXQBLK . DLOVFY 0 CDF 30 -DSOVFY /M027 DL3VFY 200 CDF 40 -DS3VFY 0 /-- / /WPF0,WPDL,RXDCL,WPKBDA,WTVFY,VERIFY /CONSTANTS /BUFFER DEFINITIONS: OCTAL ABLOCK=400 /256 DECIMAL WORDS IN A WPS BLOCK /A055 /FIELD 4 BUFFERS VBLKBF=0 /READ BUFFER HBLKBF=VBLKBF+ABLOCK /HOME BLOCK BUFFER /M054 HBBUF2=HBLKBF+ABLOCK /2ND HOME BLOCK BUFFER /A055 ABLKBF=HBBUF2+ABLOCK /ALLOCATION BLOCK BUFFER /M054 HDR1BF=ABLKBF+ABLOCK /FILE HEADER BUFFERS /M054 HDR2BF=HDR1BF+ABLOCK HDR3BF=HDR2BF+ABLOCK HDR4BF=HDR3BF+ABLOCK /A054 VVOLBU=HDR4BF+ABLOCK /VOLUME DATA BUFFER FOR 'VERIFY' VOLUME /C055 CVOLBU=VVOLBU+40 /VOLUME DATA BUFFER FOR 'COPY TO' VOLUME /A054 DOCLST=CVOLBU+40 /DOCUMENT ATTRIBUTE LIST. /A055 /BIT 0=NOT (TO BE) COPIED /C056 /BIT 1=MORE THAN ONE CLAIMING HEADER BLOCK /C056 /BIT 2=GO-TO-PAGE ERROR /A056 /BIT 3=A DATA BLOCK IS ANOTHER FILE'S HEADER /A056 /BIT 4=A DATA BLOCK IS A GO-TO-PAGE BLOCK ELSEWHERE /BIT 5=A DATA BLOCK IS CLAIMED AS DATA ELSEWHERE/A056 /BIT 6=A DATA BLOCK IS A AN EXTENSION HEADER ELSEWHERE /BIT 7=THE HEADER 1 IS A DATA BLOCK ELSEWHERE /A056 TOP=DOCLST+311 /A055 / /FIELD 5 BUFFER /STABUF=0 /HARD DISK READ STATUS BUFFER /A054 /CYLNO=1 /CYLINDER NUMBER /A054 /HEADNO=2 /HEAD NUMBER /A054 /SECTNO=3 /SECTOR NUMBER /A054 /CPVNO=4 /CONTROLLER PROGRAM VERSION NUMBER /A054 / /FIELD 6 BUFFERS BLKLST=0000 /2000 WORD BLOCK LIST IN FIELD 6 /A054 TYPLST=3720 /2000 WORD TYPE LIST IN FIELD 6 /A054 /BLKLST FLAGS/MASKS: ALLO FIX HOME FIX / 4000 FREE / 2000 READ FAILURE / 1000 COUNT NOT -255 / 0400 MULTIPLY USED / 0377 SYSTEM OR 'UNUSED' /A056 / 0376 A FAKE FILE # FOR BUILDING THE COPY'S ALLOCATION BLOCK /A056 / 0375 A FAKE FILE # TO INDICATE AN ILLEGAL FILE # WAS DETECTED/A056 / 0NNN 1 - 310, THE FILE # IN THE BLOCK OR THE CLAIMING FILE # /A056 / /D056/ 377 N, USED BY FILE N * / /TYPLST FLAGS/MASKS: / 4000 BAD SOMEHOW * / 2000 DATA / 1000 HEADER * / 0400 GO-TO-PAGE BLOCK /A056 / 0NNN 1 - 310, THE FILE # IN THE BLOCK; HEADERS & GO-TO-PAGE ONLY/A056 / /D056/ 400 SYSTEM * / / FIELD 3 /GLOBAL VARS CDFMYF=CDFEDT CDFLST=6261 /FIELD 6 IS THE "LIST" FIELD /A054 *10 AIR10, 0 /AUTO INDEX REGISTER 10 /M055 AIR11, 0 /AUTO INDEX REGISTER 11 /M055 AIR12, 0 /AUTO INDEX REGISTER 12 /M055 AIR13, 0 /AUTO INDEX REGISTER 13 /M055 AIR14, 0 /AUTO INDEX REGISTER 14 /M055 AIR15, 0 /AUTO INDEX REGISTER 15 /M055 AIR16, 0 /AUTO INDEX REGISTER 16 /M055 AIR17, 0 /AUTO INDEX REGISTER 17 /M055 *100 HOMEOK, 0 /FLAG BAD HOME BLOCK JMP I HOMEOK ALLOK, 0 /BAD ALLOCATION BLOCK FLAG /M054 JMP I ALLOK ERRORS, 0 /ERROR SUMARY FLAG JMP I ERRORS DSKNAM, ZBLOCK 7 /DISKETTE NAME, ASCIZ DENFLG, 0 /DENSITY FLAG... VALUES: / 0 - SINGLE /A016 / 1 - DOUBLE /A016 / 2 - RX50, SINGLE SIDED /AXXX / 3 - RX50, DOUBLE SIDED /A042 / 4 - RD50 VOLUME MOUNTED /A042 FILCNT, 0 /# CREATED FILES ON DISKETTE FILENO, 0 /CURRENT FILE # DRIVE, 0 /THE NUMBER OF THE CURRENT DRIVE OR DEVICE CPYDRV, 0 /"COPY TO" DRIVE NUMBER /M042 SVDRV, 0 /SAVE LOCATION FOR THE 'VERIFY' DEVICE NUMBER /A054 /D056VBLKPT, 0 TCOUNT, 0 /D056FLAG, 0 ERRCNT, 0 /ERRORS IN WHOLE DISKETTE VERIFY /C042 FILDLT, 0 /# FILES DELETED DUE TO ERRORS FRECNT, 0 /# FREE BLOCKS ON DISKETTE VEDBCT, 0 /BLOCK COUNT BY EXAM FILE HDR HOMPTR, 0 HOMCNT, 0 BLKOUT, 0 BLKIN, 0 HDRPTR, 0 SBLKNO, 0 /UTILITY 'CURRENT BLOCK' REGISTER /M055 SYSDSC, 0 /ADDRESS OF THE FIRST LEGAL DOCUMENT BLOCK /M055 SYSDSK, 0 /0 IF VERIFYING DOCUMENT IMAGE, 1 IF SYS IMAGE /A054 DSKSIZ, 0 /SIZE OF DISKETTE IN BLOCKS /C055 DSKIDX, 0 /-SIZE OF DISKETTE IN BLOCKS /C055 ALCCNT, 0 /# OF ALLOCATION WORDS IN ALLOCATION BLOCK /M054 RPBPTR, 0 /BUFFER POINTER FOR CPYRPB /M055 /THESE THREE WORDS MAKE COPY OF LARGE DOCUMENTS POSSIBLE EXTFLG, 0 /FLAG TO CONTROL SIZE OF HEADER BLOCKS /A024 EXTPTR, 0 /PTR TO NEXT EXTENSION HEADER BLOCK /A024 XTNFLG, 0 /FLAG TO MAKE COPY LOOP USE EXT HDR BLOCK MODE /A024 BLKNO, 0 /CURRENT BLOCK NUMBER /M042 CPDRV0, 0 /SAVES THE "COPY TO" # WHEN STARTED /A048 VMED, 0 /SOURCE MEDIUM TYPE /A049 VDEV, 0 /SOURCE DEVICE TYPE /A049 VCMED, 0 /"COPY TO" MEDIUM TYPE /A049 VCDEV, 0 /"COPY TO" DEVICE TYPE /A049 MAXDEV, 0 /HOLDS LARGEST DEVICE/DRIVE # AVAIL ON SYSTEM /A054 CLASSU, 0 /IF SET <>0 THE CLASS IS 'UTILITY' /A054 WINSYS, 0 /IF SET <>0 THERE IS A WINCHESTER PRESENT /A054 LINENO, 0 /LINE NUMBER FOR HARD DISK ERROR DISPLAY /A054 COLNO, 0 /COLUMN COUNT FOR SNDNUM & STATUS DISPLAY SUBS /A055 CHAIN, 0 /'CHAINED INTO VERIFY' FLAG /A055 DBLKCT, 0 /COUNT OF DATA BLOCKS IN A FILE /A055 IOASET, IOAOUT /POINTER FOR IOAOUT /A042 IQURX, QURX /INDIRECT FOR QURX CALLS /A054 IZERO, ZERO RX50SZ, 0 /FLAG INDICATING AN RX50 SIZE IMAGE /A056 SAVBLK, 0 /(BLKOUT) AT START OF EACH FILE COPY /A056 *175 REG10, 0 REG11, 0 REG12, 0 FNC=. /FIRST NON-CODE LOCATION /A042 PAGE VERIFY, XX /ENTRY FROM MNUFLD NOP /USE A HALT FOR TEST CLA RDF TAD CIDF0 DCA RTNCIF /GET RETURN FIELD CDFBUF AC7777 /ZERO MEM BUFFER DCA AIR17 /M043 AC7777 /MINUS 1 WILL CLEAR THE ENTIRE FIELD /A055 JMS I IZERO CDFLST /CLEAR THE LIST FIELD /A054 JMS I IZERO /WITH ARGUMENTS LEFT FROM CALL ABOVE /A054 JMS INITF5 /MOVE CONST TO FLD 5 /A039 JMS GETSYS /GO GET THE ID OF THE SYSTEM DISKET /C042 DCA SYSDID /STORE THE SYSTEM ID FOR FUTURE USE /A027 DCA CHAIN /CLEAR THE 'CHAINED INTO VERIFY FLAG /A055 DCA FILDLT /INIT GLOBAL COUNTERS DCA FILCNT DCA FRECNT /D056 DCA FLAG /RECYCLE SWITCH DCA HOMEOK /CLR IT DCA CLASSU /SET THE CLASSIFICATION TO WPS /A054 DCA RX50SZ /CLEAR THE RX50 SIZE FLAG /A055 JMS STARTM /SEND INITIAL DILOGUE /C045 JMS VEABLK /VERIFY ALLOCATION BLOCK /M054 JMS VEBLKS /VERIFY ALL BLOCKS. JMS VCHRX5 /GO ADJST NBR OF BLCKS ON RX50 DISKETEE /A027 JMS HLTCHK /CHECK FOR GOLD HALT /A041 JMP COPY6 /FOUND, CHECK SVDRV, DO GM PROMPT /C054 JMS WPSDET /GO DETERMINE IF WPS OR UTILITY IMAGE /A053 JMS VEABLK /VERIFY ALLOCATION BLOCK /M054 JMS VEHBLK /VERIFY HOME BLOCK JMS VBSTAT /SHOW DISKETTE STATISTICS JMS VEFCHK /CHECK EACH FILE'S STRUCTURE /A055 JMS I IOASET /CALL IOACAL /A042 -2 /NUMBER OF ARGUMENTS TO PASS /A042 VSCRNC /"CHECKING CONSISTENT BLOCK USAGE" /C049 -2600 /CURSOR POSITION AND ERASE /C049 /D056 JMS VEMCHK /BACK CHECK PREVIOUS FILES JMS FRECHK /CHECK FREE BLOCKS JMS VBSTAT /RE-DISPLAY STATISTICS TAD FILDLT /UPDATE FILE COUNT CIA TAD FILCNT DCA FILCNT JMS HDRCOL /FLAG ANY BLOCK MARKED BOTH HEADER AND DATA/M054 TAD HOMEOK /M026 TAD ALLOK TAD ERRORS /ANY ERRORS? SZA CLA JMP COPY1 /YES -TRY RECOVERY /M040 VER4, JMS I IOASET /CALL THE MESSAGE CALLER /A055 -2 /WITH 2 ARGUMENTS /A055 VSCRNF /'^P!E&NO ERRORS FOUND' /A055 2500 /POSITION AT LINE 25 /A055 JMP COPY6 /GO CHECK FOR SYS & PROMPT GM /A055 COPY1, JMS ERMSG /CALL ERROR NOTIFICATION MESSAGE /A042 JMS ASKNBR /GO ASK FOR THE "COPY TO" NUMBER /A050 JMS COPYFL /DO THE COPY VEMENU, RTNCIF, 0 JMP I VERIFY /RETURN TO MAIN MENU SYSDID, 0 /ID OF THE SYSTEM DISKETTE /A027 /THE FOLLOWING 2 TABLES HAVE VALUES CORRESPONDING TO DENSITY CODES /A055 SZTAB, /TABLE OF IMAGE SIZES IN OCTAL /M055 1170 /SIZE OF A SINGLE DENSITY DISKETTE; 632 DECIMAL /C055 1734 /SIZE OF A DOUBLE DENSITY DISKETTE; 988 DECIMAL /C055 1426 /SIZE OF A SINGLE SIDED RX50; 790 DECIMAL /C055 1426 /SIZE OF A SINGLE SIDED RX50. CODE'S FOR 2 SIDED/C055 1426 /SIZE OF SS RX50. CODE IS FOR MOUNTED WINNY /C055 ALTAB, /NUMBER OF ALLOCATION WORDS IN ALLOCATION BLOCK FOR DEVICES /A055 0120 /120 (OCTAL) WORDS FOR A SINGLE DENSITY DRIVE /A027 0175 /175 (OCTAL) WORDS FOR A DOUBLE DENSITY DRIVE /M042 0143 /143 (OCTAL) WORDS FOR A SINGLE SIDED RX50 DRIVE/M042 0143 /143 (OCTAL) WORDS FOR A SINGLE SIDED RX50 DRIVE/A042 0143 /143 (OCTAL) WORDS FOR A SINGLE SIDED RX50 DRIVE/A042 FNC=. /FIRST NON-CODE LOCATION /A042 PAGE /GET DENSITY - UTILITY SUBROUTINE -GDENS /A050 /BEGIN GDENS /A050 /CALL QURX. FNC=RXEDN+4000 /A050 /IF ERROR THEN /A050 / CALL NODENS - PROMPT THE USER AND AWAIT RESPONSE /A050 / LOOP TO BEGIN /A050 /ELSE /A050 / (AC)=DENSITY VALUE /A050 / RETURN /A050 /END /A050 / /A050 GDENS, XX /A050 GDENS1, CDFBUF /POINT AT THE BUFFER FIELD /A054 JMS I IQURX /QUEUE A REQUEST TO RXHAN /A050 RXEDN+4000 /FNC=GET DENSITY /A050 0 /BLOCK /A050 VBLKBF /UTILITY BUFFER ADDRESS /A050 JMP GDENER /ERROR RETURN /A050 GDENRT, TAD QUQBLK+RXQSPC /(AC)=DENSITY VALUE /A050 JMP I GDENS /RETURN TO CALLER /A050 GDENER, JMS NODENS /GO INFORM THE USER /A050 JMP GDENS1 /TRY AGAIN /A050 VEHBLK, XX /READ AND VERIFY THE HOME BLOCK /M054 CDFBUF /A054 JMS I IQURX RXERD+4000 2 HBLKBF HBLKE1, JMS RECONH /ERROR RETURN, RECONSTRUCT THE HOME BLOCK/A054 CDFBUF /CHECK HOME BLOCK CONTENTS /M054 TAD I (HBLKBF+1) /GET FLAG WORD AND (70) /MASK OUT ALL BUT BITS 6-8 /C053 TAD (-30) /ADDING -30(8) SHOULD GIVE (AC)=0 /C053 SZA CLA JMP HBLKE1 /JUMP IF WRONG FLAG /C042 TAD I (HBLKBF+11) /GET FILE COUNT TAD (310 /CHECK FOR WPS DOCUMENT COUNT /C053 SZA CLA /SKIP IF OK /C051 JMP HBLKE1 /JUMP IF WRONG FILE COUNT /C042 TAD (HBLKBF+11) DCA AIR10 /COUNT FILES DEFINED /M056 TAD (-310) DCA T1 DCA FILCNT /INIT TO ZERO HBLLP, TAD I AIR10 /GET NEXT HEADER PTR /M056 SZA CLA ISZ FILCNT /BUMP COUNT IF NOT ZERO ISZ T1 JMP HBLLP /LOOP FOR ALL 200 SLOTS /C042 CDFMYF /A054 JMP I VEHBLK /RETURN TO CALLER /A053 FNC=. /FIRST NON-CODE LOCATION /A042 PAGE VBSTAT, XX /GET DISKETTE NAME AND SHOW COUNTS /C042 CLA CLL TAD (DSKNAM-1) /GET BEGINNING ADDR OF DISPLAY AREA /A037 DCA AIR11 /PUT IT INTO INDEX REGISTER 1 /M056 TAD (HBLKBF+2) DCA T1 TAD (-6) DCA T2 VBSTA3, CDFBUF TAD I T1 /GET 2-CHAR WORD /C037 CDFMYF /A037 SNL BSW /SWAP IF ODD BYTE NEEDED AND P77 /JUST LOOK AT THE LOW BYTE /A054 SNA JMP VBSTA2 /JUMP IF NO MORE TAD (37) /UNDO COS OFFSET DCA I AIR11 /STORE CHARACTER IN DISPLAY BUFFER /M056 CML /CHANGE TO OTHER BYTE SNL ISZ T1 /BUMP TO NEXT WORD IF ODD BYTE NEXT ISZ T2 JMP VBSTA3 /LOOP IF MORE BYTES POSSIBLE VBSTA2, DCA I AIR11 /MAKE LAST CHARATER A NULL /M056 JMS I IOASET /CALL IOACAL /A042 -7 /NUMBER OF ARGUMENTS TO PASS /A042 VSCRN7 /!S "NAME" HAS # DOCUMENTS, # FREE /C049 /BLOCKS, #UNREADABLE /A049 0200 /CURSOR POSITION /C054 IFNDEF ITALIAN < VMED /"DISKETTE" OR "VOLUME" /A049 > DSKNAM /DISKETTE OR VOLUME IMAGE NAME /C049 FILCNT /NUMBER OF DOCUMENTS FRECNT /NUMBER OF FREE BLOCKS ERRCNT /NUMBER OF BAD BLOCKS JMP I VBSTAT /RETURN TO CALLER GETSYS, XX /GET THE ID # OF THE IMAGE IN D0. /M054 CDFBUF /SET THE DF BEFORE QURX CALLS /A054 JMS I IQURX /READ HOME BLOCK OF DEVICE (DRIVE) /C054 RXERD /FUNCTION OF READ /A027 RXBDIR /INDICATE TO READ DIRECTORY BLOCK /A027 HBLKBF /BUFFER TO READ INTO /A027 NOP /FAKE ERROR HANDLER /A055 CDFBUF /A027 TAD I (HBLKBF+5 /GET THE SYSTEM ID /C054 CDFMYF /POINT BACK TO THIS DATA FIELD /A054 JMP I GETSYS /C042 / SWPDRV, XX /(DRIVE)=(CPYDRV) /A055 TAD CPYDRV /GET THE 'TO' DRIVE NBR /A027 DCA DRIVE /PUT IT TO COPY TO /A027 JMP I SWPDRV /RETURN /A027 / RTDRV, XX /(DRIVE)=(SVDRV) /A055 TAD SVDRV /GET THE FORM DRIVEW NBR /A027 DCA DRIVE /RESTORE IT /A027 JMP I RTDRV /RETURN /A027 FNC=. /FIRST NON-CODE LOCATION /A042 PAGE VEPRM4, DCA DRIVE /PREPARING TO EXIT, VALIDATE D0 AS SYS /M054 CDFBUF /POINT AT THE BUFFER FIELD /A054 JMS I IQURX RXEDN+4000 0 VBLKBF JMP VEPER /ERROR RETURN, GO TELL THE USER /A050 JMS GETSYS /GO GET THE SYSID OF THE DISK /C042 CIA /COMPL IT FOR COMPARE /A027 TAD SYSDID /ADD IN THE ORIG SYSTEM ID /A027 SNA CLA /A032 JMP VEMENU /ITS THE SYSTEM DISKETTE GO TO MAIN MENU/A032 /D055 JMS CLRLNS /GO CLEAR THE SCREEN /A032 JMP COPY6L /GO ASK FOR SYSTEM DISKETTE, PROMPT GM /A054 VEPER, /D055 JMS CLRLNS /GO CLEAR SCREEN /C053 JMS NODENS /"NO MEDIA IN DEVICE" /C050 JMP COPY6L /GO ASK FOR SYS DSK & PROMPT FOR GM /A054 RNGBEL, XX TAD (7) /SEND A CONTROL G TO THE KEY BOARD TO RING BELL JMS OUTCHR JMP I RNGBEL INCHR, 0 /INPUT A CHARACTER FROM THE TERMINAL /M054 JMP INCHR2 INCHR1, CIF 0 JWAIT INCHR2, CIF 0 XLTIN JMP INCHR1 JMP I INCHR OUTCHR, 0 /Output the character in the AC to the terminal JMP OUTCH2 OUTCH1, CIF 0 JWAIT OUTCH2, CIF 0 TTYOU JMP OUTCH1 JMP I OUTCHR DLTFIL, XX /DELETE CURRENT FILE (FILENO). /UTILITY SUBROUTINE. /A054 TAD (4000 /SET 'NOT COPIED' FLAG /C056 JMS DOCSET /IN THE DOCLST. RET DF=MYF /A055 TAD FILENO /GET HEADER NUMBER /A054 TAD (HBLKBF+11) /ADD THE BASE OF THE FILE POINTER LIST /A054 DCA T2 /T2 POINTS AT THE HEADER POINTER WORD /A054 CDFBUF /HBLKBF IS IN THE BUFFER FIELD /A054 TAD I T2 /GET THE BLOCK NUMBER FROM HOME BLOCK /A054 DCA T1 /SAVE IT FOR LATER /A054 TAD T1 /GET IT BACK /A054 TAD DSKIDX /COMPARE THE MINUS MAXIMUM BLOCK # /A055 SMA SZA CLA /OK IF THE BLOCK # IS LESS OR EQUAL /A055 JMP CALLOK /ON TOO BIG, SKIP THE LIST MODIFICATIONS/A055 TAD T1 /GET BACK THE BLOCK NUMBER /A055 TAD (TYPLST) /ADD THE BASE OF THE TYPE LIST /A054 DCA T2 /THEN, USING T2 AS THE POINTER /A054 CDFLST /GET TO FIELD WITH THE LISTS /A054 DCA I T2 /CLEAR THE TYPE LIST ENTRY /A054 TAD T1 /GET THE BLOCK NUMBER BACK /A054 TAD (BLKLST) /ADD THE BLOCK LIST BASE /A054 DCA T2 /THEN, USING T2 AS THE POINTER /A054 TAD I T2 /GET THE BLOCK LIST STATUS WORD /A054 AND (5000) /CLEAR FILE #. IF SET, LEAVE THE "FREE /A054 /AND "WRONG COUNT" MARKS. /A054 /D055 RE-ENABLED THE NEXT INSTRUCTION FOR TEST DURING C056 TAD (2000) /SET THE "READ FAIL" MARK TO FORCE COPY /A054 /TO GENERATE A NEW BLOCK. /A054 DCA I T2 /WRITE BACK THE NEW BLOCK LIST STATUS WORD/A054 CALLOK, JMS ALLOK /FLAG TO RECONSTRUCT ALLOCATION BLOCK /A054 JMS HOMEOK /FLAG TO RECONSTRUCT HOME BLOCK /A054 TAD DSKIDX /GET THE NEGATIVE OF THE NUMBER OF BLOCKS/A054 DCA T1 /TO T1 FOR COUNTING /A054 TAD (BLKLST) /GET THE BASE OF THE BLOCK LIST INTO /A054 DCA T2 /T2 FOR USE AS THE POINTER /A054 DLTFLC, TAD I T2 /GET NEXT STATUS WORD FROM THE BLOCK LIST/A054 AND P377 /MASK FOR THE FILE NUMBER ONLY /A054 CIA /MAKE THE RESULT NEGATIVE /A054 TAD FILENO /WAS IT THIS FILE? /A054 SZA CLA /A054 JMP DLTNXT /IF NOT, GO TRY THE NEXT /A054 TAD I T2 /YES, GET THE STATUS WORD TO FREE IT /A054 AND (400) /IS IT A MULTI-USED BLOCK? /A054 SZA CLA /THE CLA SAYS DON'T SAVE MULTI FLAG /A054 TAD P377 /IF SO SAVE FILE # AS FLAG AND SAVE STATES/A054 TAD (7000) /ELSE JUST SAVE STATES EXCEPT MULTI-USED/A054 AND I T2 /'AND' THE STATUS WORD WITH THE MASK /A054 DCA I T2 /WRITE THE NEW STATUS WORD BACK TO BLOCK LIST/A054 DLTNXT, ISZ T2 /POINT TO THE NEXT STATUS WORD IN BLKLST/A054 ISZ T1 /DECREMENT WORDS TO GO, DONE WHEN 0 /A054 JMP DLTFLC /LOOP FOR ALL STATUS WORDS /A054 CDFMYF /A054 ISZ FILDLT /INCREMENT THE COUNT OF DELETED FILES /A054 JMP I DLTFIL /AND RETURN TO CALLER /A054 VBLKOU, XX /UPDATE SCREEN ISZ SBLKNO /FOR DISPLAY, TO SHOW BLOCK N-1 AS N /M054 JMS I IOASET /CALL IOACAL /A054 -4 /NUMBER OF ARGUMENTS TO PASS /A054 VSCRN2 /^P!D BLOCKS CHECKED, !D ERRORS DETECTED./A054 700 /CURSOR POSITION /A054 SBLKNO /NUMBER OF BLOCKS CHECKED /A054 ERRCNT /NUMBER OF ERRORS DETECTED /A054 AC7777 /ADD MINUS 1 /A055 TAD SBLKNO /TO THE DISPLAYED NUMBER TO /A055 DCA SBLKNO /RESTORE THE CORRECT COUNT /A055 JMP I VBLKOU FNC=. /FIRST NON-CODE LOCATION /A042 PAGE CPYRPB, XX /COPY RAPID PAGINATION STRUCTURE OF DOCUMENT. PART OF CPYFIL /THE FILE HEADER BLOCK IS IN HDR1BF. ENTRY DF=BUF. /M056 TAD I (HDR1BF+53 /GET THE NUMBER OF THE FIRST GTP BLOCK /A056 SNA /OK IF ITS NOT ZERO /A056 JMP CPRPER /IF ZERO, GO RESET GO-TO-PAGE /A056 JMS CCKRPB /GO VALIDATE THE GTP BLOCK /A056 TAD (HDR2BF /GET THE BUFFER ADDRESS /A056 JMS READRP /READ IN THE FIRST GO-TO-PAGE BLOCK /A056 TAD I (HDR2BF+2 /CHECK THE 1ST EXTENSION POINTER WORD /A056 SNA /NON ZERO MEANS THERE IN AN EXTENSION /A056 JMP CPYR4 /ZERO MEANS NO EXTENSIONS, GO WRITE FIRST/A056 JMS CCKRPB /GO VALIDATE THE GTP BLOCK /A056 TAD (HDR3BF /GET THE BUFFER ADDRESS /A056 JMS READRP /READ IN THE SECOND GTP BLOCK /A056 TAD I (HDR2BF+3 /IS THERE A THIRD GTP BLOCK? /A056 SNA /NON ZERO MEANS MORE GTP BLOCKS /A056 JMP CPYR3 /ZERO MEANS NO MORE, GO WRITE THE 2ND /A056 JMS CCKRPB /GO VALIDATE THE GTP BLOCK /A056 TAD (HDR4BF /GET THE BUFFER ADDRESS /A056 JMS READRP /READ IN THE 3RD GTP BLOCK /A056 TAD (HDR4BF+362 /SET UP LOOP TO CHECK EXTRA EXT BLOCKS /A056 DCA T2 /!MUST USE T2 - HOOKED TO WRTEXT /A056 TAD (-15 /13 MORE POSSIBLE POINTER WORDS /A056 DCA T3 /USE T3 AS THE WORDS TO GO COUNTER /A056 TAD (VBLKBF /READ TO & WRITE FROM VBLKBF /A056 DCA RPBPTR /RPBPTR HOLDS THE BUFFER ADDRESS /A056 CPYR1, TAD I T2 /GET THE # OF THE GTP EXTENSION BLOCK /A056 SNA /NON ZERO MEANS THERE IS A BLOCK # /A056 JMP CPYR2 /0 IS THE LIST TERMINATOR, WRITE 1,2,3. /A056 JMS CCKRPB /GO VALIDATE THE GTP BLOCK /A056 TAD RPBPTR /PASS THE BUFFER ADDRESS TO READRP /A056 JMS READRP /READ IN THE RPG BLOCK /A056 JMS WRTEXT /WRITE IT OUT TO THE COPY DEVICE.RDF=BUF/A056 ISZ T2 /POINT AT THE NEXT GTP EXTENSION POINTER/A056 ISZ T3 /UNTIL THEY ARE ALL DONE /A056 JMP CPYR1 /GO READ THE NEXT GTP EXTENSION POINTER /A056 CPYR2, CLA /BE SURE THE ACC IS CLEAR /A056 TAD (HDR2BF+3 /GET THE LOCATION OF THE 3RD GTP BLOCK #/A056 DCA T2 /PUT IT IN T2 FOR WRTEXT LINKAGE /A056 TAD (HDR4BF /GET THE BUFFER ADDRESS /A056 DCA RPBPTR /USE RPBPTR TO PASS IT TO WRTEXT /A056 JMS WRTEXT /GO WRITE OUT THE 3RD GTP BLOCK.RET DF=BUF CPYR3, CLA /BE SURE THE ACC IS CLEAR /A056 TAD (HDR2BF+2 /GET THE LOCATION OF THE 2ND GTP BLOCK #/A056 DCA T2 /PUT IT IN T2 FOR WRTEXT LINKAGE /A056 TAD (HDR3BF /GET THE BUFFER ADDRESS /A056 DCA RPBPTR /USE RPBPTR TO PASS IT TO WRTEXT /A056 JMS WRTEXT /GO WRITE OUT THE 2ND GTP BLOCK. RET DF=BUF CPYR4, CLA /BE SURE THE ACC IS CLEAR /A056 TAD (HDR1BF+53 /GET THE LOCATION FOR THE FIRST GTP BLOCK #/A056 DCA T2 /PUT IT IN T2 FOR WRTEXT LINKAGE /A056 TAD (HDR2BF /GET THE BUFFER ADDRESS /A056 DCA RPBPTR /USE RPBPTR TO PASS IT TO WRTEXT /A056 JMS WRTEXT /WRITE THE FIRST GTP BLOCK.RET DF=BUF /A056 JMP I CPYRPB /DONE GO-TO-PAGE. RETURN TO MAIN FILE COPY/A056 CCKRPB, XX /PART OF CPYRPB. VALIDATE THE GTP BLOCK TO COPY /A056 /THE GTP BLOCKS ARE MARKED IN TYPLST WITH 0400 IOR FILE#/A056 DCA SBLKNO /SAVE THE NUMBER OF THE BLOCK UNDER TEST/A056 TAD SBLKNO /GET IT BACK /A056 TAD DSKIDX /COMPARE IT THE THE LARGEST POSSIBLE # /A056 SMA SZA CLA /OK WHEN LESS OR EQUAL /A056 JMP CPRPER /ELSE, GO RESET GTP FOR THIS FILE /A056 AC7777 /MASK FOR ALL THE BITS /A056 JMS TEST2 /GET THE TYPLST STATUS WORD. RET DF=LST /A056 CIA /NEGATE IT FOR COMPARISON TO /A056 TAD FILENO /THE CURRENT FILE NUMBER /A056 TAD (0400 /WITH THE GO-TO-PAGE FLAG /A056 SZA CLA /OK IF EQUAL /A056 JMP CPRPER /ELSE, GO RESET GTP FOR THIS FILE /A056 AC7777 /MASK FOR ALL THE BITS /A056 JMS TEST1 /GET THE BLKLIST STATUS WORD /A056 CIA /NEGATE IT FOR COMPARISON TO /A056 TAD FILENO /THE CURRENT FILE NUMBER /A056 SZA CLA /OK IF ITS THE CURRENT FILE # /A056 JMP CPRPER /ELSE, GO RESET GTP FOR THIS FILE /A056 CDFBUF /GET BACK TO THE BUFFER FIELD /A056 JMP I CCKRPB /IT WAS EQUAL, RETURN /A056 CPRPER, CDFBUF /GET BACK TO THE BUFFER FIELD /A056 DCA I (HDR1BF+53 /CLEAR THE GO-TO-PAGE POINTER /A056 AC7776 /MASK FOR ALL BUT BIT 11 /A056 AND I (HDR1BF+1 /AND IN THE TYPE WORD /A056 DCA I (HDR1BF+1 /WRITE BACK THE TYPE WORD SANS GTP FLAG /A056 TAD SAVBLK /GET THE BLKOUT VALUE AT START OF THIS FILE/A056 DCA BLKOUT /RESTORE THE 'PRE-GTP' VALUE /A056 JMP I CPYRPB /TERMINATE THE GTP COPY. RETURN TO FILE COPY/A056 READRP, XX /READ TO BUFFER IN AC, BLOCK # (SBLKNO) FROM VERIFY DEVICE/A056 DCA GTPBF /PASS THE BUFFER ADDRESS TO RXHAN /A056 JMS RTDRV /GO GET THE FROM DRIVE NUMBER /A056 TAD SBLKNO /INPUT BLOCK NUMBER /A056 DCA GTPSEC /PASS THE BLOCK # TO RXHAN /A056 JMS I IQURX /CALL RXHAN /A056 RXERD+4000 /READ IN /A056 GTPSEC, 0 /THE BLOCK NUMBER /A056 GTPBF, 0 /THE BUFFER ADDRESS /A056 JMP CPRPER /ERROR RETURN. ? WAS OK @ VEBLKS /A056 CDFBUF /GET BACK TO THE BUFFER FIELD /A056 JMP I READRP /RETURN TO CALLER /A056 /D056CPYRPB, XX /COPY RAPID PAGINATION STRUCTURE OF DOCUMENT. PART OF CPYFIL /D056 /THE FILE HEADER BLOCK IS IN HDR1BF. ENTRY DF=BUF. /M056 /D056 TAD I (HDR1BF+53 /D056 SNA /D056 JMP I CPYRPB /D056 DCA BLKIN /D056 TAD (HDR2BF /D056 JMS READIN /READ 1ST RPG BLOCK INTO CORE /D056 TAD I (HDR2BF+2 /CHECK 1ST EXT PTR /D056 SNA /D056 JMP CPYR4 /NONE FOUND, GO WRITE OUT 1ST /D056 DCA BLKIN /D056 TAD (HDR3BF /D056 JMS READIN /READ 2ND RPG BLOCK INTO CORE /D056 TAD I (HDR2BF+3 /IS THERE AN EXT BLOCK #3? /D056 SNA /D056 JMP CPYR3 /NO, GO WRITE OUT 1ST RPG BLOCK /D056 DCA BLKIN /YES, READ 3RD RPG BLOCK INTO CORE /D056 TAD (HDR4BF /D056 JMS READIN /D056 /TD056 TAD (HDR4BF+363 /SET UP LOOP TO CHECK EXTRA EXT BLOCKS /TD056 DCA T2 /TD056 TAD (-14 /TD056 DCA T3 /TD056 DCA RPBPTR /TD056CPYR1, TAD I T2 /TD056 SPA /TD056 JMP CPYR2 /RETURN IF ANY PTR IS -1 /D056 /D056 TAD (HDR4BF+362 /SET UP LOOP TO CHECK EXTRA EXT BLOCKS /TA056 /D056 DCA T2 /TA056 /D056 TAD (-15 /TA056 /D056 DCA T3 /TA056 /D056 TAD (VBLKBF /TA056 /D056 DCA RPBPTR /TA056 /D056CPYR1, TAD I T2 /TA056 /D056 SNA /ZERO IS THE EXTENSION BLOCK TERMINATOR /TA056 /D056 JMP CPYR2 /RETURN ON 0 /TA056 /D056 /D056 DCA BLKIN /D056 TAD RPBPTR /D056 JMS READIN /READ IN THE RPG BLOCK /M054 /D056 JMS WRTEXT /WRITE IT OUT TO THE COPY DEVICE /M056 /D056 ISZ T2 /D056 ISZ T3 /D056 JMP CPYR1 /D056CPYR2, CLA /D056 TAD (HDR2BF+3 /D056 DCA T2 /D056 TAD (HDR4BF /D056 DCA RPBPTR /D056 JMS WRTEXT /M056 /D056CPYR3, TAD (HDR2BF+2 /D056 DCA T2 /D056 TAD (HDR3BF /D056 DCA RPBPTR /D056 JMS WRTEXT /M056 /D056CPYR4, TAD (HDR1BF+53 /D056 DCA T2 /D056 TAD (HDR2BF /D056 DCA RPBPTR /D056 JMS WRTEXT /M056 /D056 JMP I CPYRPB FNC=. /FIRST NON-CODE LOCATION /A042 PAGE VEBLKS, XX /READ AND VERIFY THE ENTIRE IMAGE. 1ST LEVEL SUBR. /M055 CLA /START WITH A CLEAR AC /A054 DCA ERRCNT /CLEAR ERROR COUNTER /A032 DCA ERRORS /CLEAR ERROR FLAG (RETURN LINK) /C054 TAD DSKIDX /A016 DCA REG12 /USE REG12 AS 'TO GO' COUNT /C055 DCA SBLKNO /START FROM BLOCK 0 /A056 TAD (-12) DCA T3 /USE T3 AS A TENS COUNTER /C055 TAD (1100 /GET STARTING LINENO -1 /A054 DCA LINENO /INITIALIZE LINENO /A054 VBLKLP, TAD SBLKNO /GET THE NUMBER OF THE BLOCK TO TEST /A056 DCA VBLKNO /INSERT IT AS AN ARGUMENT TO QURX CALL /A056 CDFBUF /POINT QURX AT THE BUFFER FIELD /A056 JMS I IQURX /CALL RXHAN VIA QURX /A056 RXERD+4000 /READ /A056 VBLKNO, 0 /THE BLOCK UNDER TEST /A056 VBLKBF /TO BUFFER VBLKBF /A056 JMP VBLKE1 /ON READ ERROR, GO REPORT /A056 CDFBUF /GET BACK INTO THE BUFFER FIELD /A056 TAD SYSDSC /GET THE LOWEST LEGAL DOCUMENT BLOCK # /A056 CIA /NEGATE IT FOR COMPARISONS /A056 TAD SBLKNO /GET THE BLOCK NUMBER BACK /A056 SPA CLA /IF LEGAL, CHECK FOR BLOCK 6 /A056 JMP ISSYS /MINUS MEANS ITS SYSTEM /A056 TAD SBLKNO /GET THE BLOCK NUMBER BACK /A056 TAD (-3 /SEE IF ITS BELOW 3 /A056 SPA /BLOCKS 0,1, & 2 /A056 JMP ISSYS /ARE ALWAYS SYSTEM /A056 TAD (-3 /SEE IF ITS BLOCK 6 /A056 SZA CLA /IF IT WASN'T, /M056 JMP COS310 /GO CHECK THE COS COUNT /A056 ISSYS, CLA /MAKE SURE THE ACC IS CLEAR /A056 TAD P377 /USE 377 TO /M056 JMS IORBLK /MARK AS UNUSED IN BLKLST /M056 TAD P377 /USE 377 TO /A056 JMS IORTYP /MARK AS UNUSED IN TYPLST /A056 JMP SYSBL2 /GO HOUSEKEEP THE END OF THE LOOP /A056 COS310, TAD I (VBLKBF+0 /GET THE ZERO WORD OF THE BLOCK /A056 TAD P377 /CHECK IT FOR COS 310 COUNT (7401) /A056 SNA CLA /NON ZERO SAYS WRONG COUNT /A056 JMP CKTYP /ON ZERO, GO CHECK TYPE /A056 TAD (1000) /MARK AS COS COUNT ERROR /A056 JMS IORBLK /IN THE BLOCK LIST STATUS WORD /A056 AC4000 /MARK AS 'BAD SOMEHOW' /A056 JMS IORTYP /OR IT INTO THE TYPE LIST STATUS WORD /A056 JMP SYSBL2 /GO HOUSEKEEP THE END OF THE LOOP /A056 CKTYP, TAD I (VBLKBF+1) /GET TYPE WORD /A056 AND (70 /CHECK THE TYPE NIBBLE /A056 MQL /SAVE IT IN THE Q REGISTER /A056 CKHDR, ACL /GET THE TYPE NIBBLE BACK /A056 TAD (-10 /CHECK FOR TYPE = HEADER 1 /A056 SZA CLA /0 MEANS ITS HEADER /A056 JMP CKGTP /ON NON ZERO, CHECK FOR GO-TO-PAGE /A056 TAD (1000 /MARK AS HEADER /A056 JMS IORTYP /OR IT INTO THE TYPE LIST STATUS WORD /A056 JMP CKFILE /GO CHECK THE FILE NUMBER /A056 CKGTP, ACL /GET BACK THE TYPE NIBBLE /A056 TAD (-70 /CHECK FOR TYPE = GO-T0-PAGE /A056 SZA CLA /0 MEANS ITS GO-TO-PAGE /A056 JMP SDATA /ELSE GO MARK IT AS DATA /A056 TAD (0400 /SET BIT 5 AS THE G0-TO-PAGE FLAG /A056 JMS IORTYP /OR IT INTO THE TYPE LIST STATUS WORD /A056 JMP SYSBL2 /GO HOUSEKEEP THE END OF THE LOOP /A056 SDATA, AC2000 /SET BIT 1 AS THE DATA FLAG /A056 JMS IORTYP /OR IT INTO THE TYPE LIST STATUS WORD /A056 JMP SYSBL2 /GO HOUSEKEEP THE END OF THE LOOP /A056 CKFILE, CDFBUF /GET BACK INTO THE BUFFER FIELD /A056 TAD I (VBLKBF+13 /GET THE WORD WITH THE FILE NUMBER /A056 SPA SNA /PLUS AND NON ZERO IS OK /A056 JMP FILERR /A FILE # OF 0 IS AN ERROR /A056 CIA /NEGATE THE FILE NUMBER WORD TO /A056 TAD (310 /CHECK FOR LEGAL FILE #S ONLY /A056 SPA CLA /1 THRU 310 ARE LEGAL /A056 JMP FILERR /OTHER FILE #S ARE ILLEGAL /A056 TAD I (VBLKBF+13 /GET BACK THE WORD WITH THE FILE # /A056 JMS IORTYP /OR THE FILE # INTO THE TYPLST WORD /A056 /D056 CDFBUF /GET BACK TO THE BUFFER FIELD /A056 /D056 TAD I (VBLKBF+13 /GET BACK THE WORD WITH THE FILE # /A056 /D056 JMS IORBLK /OR THE FILE # INTO THE BLKLST WORD /A056 JMP SYSBL2 /GO HOUSEKEEP THE END OF THE LOOP /A056 FILERR, AC4000 /SET BIT 0 AS THE 'BAD SOMEHOW' FLAG /A056 JMS IORTYP /OR THE 'BAD' FLAG INTO THE TYPLST WORD /A056 TAD (375 /USE FILE # 375 AS THE FILE ERROR FLAG /A056 JMS IORBLK /OR THE FILE ERROR FLAG INTO THE BLKLST /A056 JMS ERRORS /REPORT THAT AN ERROR WAS DETECTED /A056 SYSBL2, JMS HLTCHK /GO SEE IF HALT FLAG IS SET /M055 JMP VBLKH3 /IF IT WAS, DEPART INSTANTLY! /M055 ISZ T3 /TIME TO UPDATE SCREEN? /A055 JMP LOPTRM /A055 JMS VBLKOU /DO IT, IF SO /M055 TAD (-12) /M055 DCA T3 /AND RESET COUNTER /M055 LOPTRM, ISZ SBLKNO /INCREMENT THE BLOCK # TO CHECK /C056 ISZ REG12 /INC/DECREMENT THE BLOCKS TO GO COUNT /M056 JMP VBLKLP /LOOP FOR ALL BLOCKS VBLKH2, AC7777 /GET -1 TO COMPENSATE SBLKNO INFLATION /A056 TAD SBLKNO /ADD THE LAST BLOCK NUMBER /A056 DCA SBLKNO /WRITE LAST BLOCK -1 /A056 JMS VBLKOU /DISPLAY FINAL STATUS TAD (-1100 /GET THE -INITIALIZED VALUE FOR LINENO /A054 TAD LINENO /ADD THE CURRENT VALUE /A054 SZA CLA /IF EQUAL, JUST GET OUT /A054 JMS ASKPRT /ELSE ASK USER TO PRINT SCREEN /A054 VBLKH3, JMP I VEBLKS /AND RETURN TO CALLER FNC=. /FIRST NON-CODE LOCATION /A042 PAGE VBLKE1, /HERE ON READ ERROR JMS ERRORS /FLAG BAD BLOCK FOR A COPY ISZ ERRCNT /BUMP ERROR COUNTER JMS VBLKOU /UPDATE STATUS ON SCREEN JMS RDERR /CALL THE HARD DISK ERROR DISPLAY ROUTINE/A054 AC2000 /SET 'READ FAIL' FLAG /A054 JMS IORBLK /IN THE BLOCK LIST STATUS WORD /A055 AC4000 /SET 'BAD SOMEHOW' FLAG /A056 JMS IORTYP /OR IT INTO THE TYPLST STATUS WORD /A056 JMP SYSBL2 /GO FINISH THE PASS THRU THE LOOP /A055 /TD056VEBLKS, XX /READ AND VERIFY THE ENTIRE IMAGE. 1ST LEVEL SUBR. /M055 /TD056 CLA /START WITH A CLEAR AC /A054 /TD056 DCA ERRCNT /CLEAR ERROR COUNTER /A032 /TD056 DCA ERRORS /CLEAR ERROR FLAG (RETURN LINK) /C054 /TD056 TAD (BLKLST) /TD056 DCA VBLKPT /TD056 TAD DSKIDX /A016 /TD056 DCA REG12 /USE REG12 AS 'TO GO' COUNT /C055 /TD056 DCA VBLKNO /TD056 TAD (-12) /TD056 DCA T3 /USE T3 AS A TENS COUNTER /C055 /TD056 TAD (1100 /GET STARTING LINENO -1 /A054 /TD056 DCA LINENO /INITIALIZE LINENO /A054 /TD056VBLKLP, CDFBUF /A054 /TD056 JMS I IQURX /READ A BLOCK /TD056 RXERD+4000 /TD056VBLKNO, 0 /TD056 VBLKBF /TD056 JMP VBLKE1 /JUMP IF ERROR /TD056 CDFBUF /ELSE CHECK COUNT WORD /TD056 TAD I (VBLKBF+1) /GET TYPE WORD /TD056 DCA X2 /SAVE IT /TD056 TAD VBLKNO /SET UP FUNNY FOR OUTSIDE WORLD /A054 /TD056 DCA SBLKNO /PUT IN ZERO PAGE FOR UNIVERSAL ACCESS /A054 /TD056 TAD SBLKNO /GET THE BLOCK NUMBER BACK /A055 /TD056 CIA /NEGATE IT FOR COMPARISONS /A055 /TD056 SMA /IF NON-0 CHECK BLOCK 6 /A055 /TD056 JMP ISSYS /DON'T CHECK BLOCK 0 /A055 /TD056 TAD (6 /SEE IF ITS BLOCK 6 /A055 /TD056 SNA CLA /IF IT WASN'T, GO CHECK THE COS COUNT /A055 /TD056 JMP ISSYS /IT WAS BLOCK 6, SKIP IT /A055 /TD056 TAD I (VBLKBF) /GET THE ZERO WORD OF THE BLOCK /A027 /TD056 TAD (-COSCNT) /CHECK IT FOR COS 310 /A027 /TD056 SZA CLA /RETURN IF OK /A027 /TD056 TAD (1000) /MARK IF NOT COS 310 COMPAT /A027 /TD056 CDFLST /A054 /TD056 DCA I VBLKPT /0 IF COS310 COMPATIBLE, ELSE =1000 OCT /C054 /TD056 DCA X0 /0 TYPE REGSTER /C042 /TD056 TAD X2 /GET TYPE BACK AGAIN /TD056 AND (70) /IF TYPE =0=DATA /M054 /TD056 SZA /THEN MARK AS DATA IN THE TYPE LIST /C054 /TD056 JMP VBLKL3 /IF NOT, DON'T MARK AS DATA /M054 /TD056 AC2000 /SET DATA FLAG FOR TYPLST STATUS WORD /A054 /TD056 DCA X0 /X0 IS THE STATUS WORD REGISTER /M054 /TD056VBLKL3, TAD (-10) /HEADER TYPE VALUE IS 1 /M054 /TD056 SZA CLA /TD056 JMP VBLKL5 /NOT A HEADER, SO PRESS ON /M054 /TD056 CDFBUF /POINT AT THE BUFFER FIELD /M054 /TD056 CLL /CLEAR THE LINK FOR COMPARISON /A055 /TD056 TAD I (VBLKBF+13 /GET THE WORD WITH THE FILE NUMBER /M054 /TD056 TAD (-311 /CHECK FOR LEGAL FILE #S ONLY /A055 /TD056 CLA /CLEAR AC FOR LATER USE /A055 /TD056 SZL /OK IF THERE WAS NO CARRY INTO THE LINK /A055 /TD056 JMP VBLKL4 /ELSE GO CLEAR THE TYPE REGISTER /A055 /TD056 TAD I (VBLKBF+13 /GET THE FILE NUMBER /A055 /TD056 TAD (1000) /SET THE HEADER FLAG /A055 /TD056VBLKL4, DCA X0 /TYPE REGISTER NOW HAS HEADER AND FILE #/A055 /TD056VBLKL5, TAD SYSDSC /LOWEST DOCUMENT BLOCK POSSIBLE /C055 /TD056 CIA /TD056 TAD SBLKNO /TD056 SMA CLA /TD056 JMP SYSBL2 /LEGAL DONT TOUCH /TD056ISSYS, TAD P377 /C054 /TD056 JMS IORBLK /MARK AS UNUSED IN BLKLST /M054 /TD056 TAD REG10 /ON RETURN (REG10)=BLKLST+(SBLKNO) /M054 /TD056 TAD (TYPLST-BLKLST) /(AC)=TYPLST+(SBLKNO) /M054 /TD056 DCA REG10 /USE THAT AS POINTER INTO TYPLST /M054 /TD056 TAD P377 /0377 MEANS "UNUSED" IN TYPLST /M054 /TD056 DCA I REG10 /WRITE "UNUSED" INTO THE STATUS WORD /M054 /TD056 DCA X0 /NEUTRALIZE X0 /M054 /TD056SYSBL2, TAD X0 /(AC)=TYPE FLAG HERE /TD056 JMS IORTYP /OR IN THE TYPE TO TYPE LIST /TD056 JMS HLTCHK /GO SEE IF HALT FLAG IS SET /M055 /TD056 JMP VBLKH3 /IF IT WAS, DEPART INSTANTLY! /M055 /TD056 ISZ T3 /TIME TO UPDATE SCREEN? /A055 /TD056 JMP LOPTRM /A055 /TD056 JMS VBLKOU /DO IT, IF SO /M055 /TD056 TAD (-12) /M055 /TD056 DCA T3 /AND RESET COUNTER /M055 /TD056LOPTRM, ISZ VBLKNO /BUMP BLOCK NUMBER /TD056 ISZ VBLKPT /BUMP POINTER /TD056 ISZ REG12 /INCREMENT THE BLOCK COUNT /C055 /TD056 JMP VBLKLP /LOOP FOR ALL BLOCKS /TD056VBLKH2, JMS VBLKOU /DISPLAY FINAL STATUS /TD056 TAD (-1100 /GET THE -INITIALIZED VALUE FOR LINENO /A054 /TD056 TAD LINENO /ADD THE CURRENT VALUE /A054 /TD056 SZA CLA /IF EQUAL, JUST GET OUT /A054 /TD056 JMS ASKPRT /ELSE ASK USER TO PRINT SCREEN /A054 /TD056VBLKH3, JMP I VEBLKS /AND RETURN TO CALLER /TD056VBLKE1, /HERE ON READ ERROR /TD056 JMS ERRORS /FLAG BAD BLOCK FOR A COPY /TD056 ISZ ERRCNT /BUMP ERROR COUNTER /TD056 JMS VBLKOU /UPDATE STATUS ON SCREEN /TD056 JMS RDERR /CALL THE HARD DISK ERROR DISPLAY ROUTINE/A054 /TD056 AC2000 /SET 'READ FAIL' FLAG /A054 /TD056 JMS IORBLK /IN THE BLOCK LIST STATUS WORD /A055 /TD056 JMP SYSBL2 /GO FINISH THE PASS THRU THE LOOP /A055 RDERR, XX /HARD DISK ERROR REPORTING SUBROUTINE. PART OF VEBLKS. /A054 TAD (-4 /GET THE VALUE OF MOUNTED WINNY DENSITY /A054 TAD DENFLG /COMPARE THE 'VERIFY' DENSITY /A054 SPA /PRESS ON WITH THE MESSAGE ON 4 & MORE /A054 JMP I RDERR /IMMEDIATE RETURN ON LESSER DENSITIES /A054 CDFLP /THE READ STATUS BUFFER IS IN FIELD 5 /A054 JMS I IQURX /CALL RXHAN /A054 RDESTA /WITH A READ STATUS COMMAND FOR RD /A054 0 /FAKE BLOCK NUMBER REQUIRED BY QURX /A054 STABUF /THE BUFFER FOR OUTPUT /A054 NOP /FAKE ERROR RETURN /A054 JMS I IOASET /CALL THE DISPLAY ROUTINE /A054 -2 /WITH 2 ARGUMENTS /A054 FMTERR /ERROR #: CYLINDER #: HEAD #: SECTOR #: /A054 -1000 /POSITION TO LINE 8 COL 0 AND ERASE EOL /A054 TAD LINENO /GET THE CURRENT LINE NUMBER /A054 TAD (100 /ADD ONE LINE TO IT /A054 DCA LINENO /UPDATE THE LINE COUNT /A054 /JUSTIFY THE COLUMN. PREVENT STACK UP ON THE RIGHT TAD LINENO /GET THE CURRENT LINE NUMBER /A054 MQL /SAVE IT IN THE Q REGISTER /A054 CDFLP /GET INTO THE TEXT FIELD /A054 TAD (11 /ERROR COLUMN VALUE FOR 1 DIGIT /A054 MQA /IOR THE CURRENT LINE NUMBER /A054 DCA ERRCOL /INITIAL ERROR COLUMN VALUE /A054 TAD (26 /CYLINDER COLUMN VALUE FOR 1 DIGIT /A054 MQA /IOR THE CURRENT LINE NUMBER /A054 DCA CYLCOL /INITIAL CYLINDER COLUMN VALUE /A054 TAD (43 /HEAD COLUMN VALUE FOR 1 DIGIT /A054 MQA /IOR THE CURRENT LINE NUMBER /A054 DCA HEDCOL /INITIAL HEAD COLUMN VALUE /A054 TAD (60 /SECTOR COLUMN VALUE FOR 1 DIGIT /A054 MQA /IOR THE CURRENT LINE NUMBER /A054 DCA SECCOL /INITIAL SECTOR COLUMN VALUE /A054 TAD (-12 /SEE IF MORE THAN ONE DIGIT /A054 TAD ERRCNT /GET THE CURRENT ERROR NUMBER /A054 SMA CLA /SKIP THE COLUMN SUBTRACT ON ONE DIGIT /A054 AC7777 /SUBTRACT 1 FROM THE /A054 TAD ERRCOL /ERROR COLUMN /A054 DCA ERRCOL /RESTORE THE UPDATED ERROR COLUMN /A054 TAD (-12 /SEE IF MORE THAN ONE DIGIT /A054 TAD I (CYLNO /GET THE CURRENT CYLINDER NUMBER /A054 SMA CLA /SKIP THE COLUMN SUBTRACT ON ONE DIGIT /A054 AC7777 /SUBTRACT 1 FROM THE /A054 TAD CYLCOL /CYLINDER COLUMN /A054 DCA CYLCOL /RESTORE THE UPDATED CYLINDER COLUMN /A054 TAD (-12 /SEE IF MORE THAN ONE DIGIT /A054 TAD I (SECTNO /GET THE CURRENT SECTOR NUMBER /A054 SMA CLA /SKIP THE COLUMN SUBTRACT ON ONE DIGIT /A054 AC7777 /SUBTRACT 1 FROM THE /A054 TAD SECCOL /SECTOR COLUMN /A054 DCA SECCOL /RESTORE THE UPDATED SECTOR COLUMN /A054 TAD (-144 /SEE IF MORE THAN TWO DIGITS /A054 TAD ERRCNT /GET THE CURRENT ERROR NUMBER /A054 SMA CLA /SKIP THE COLUMN SUBTRACT ON TWO DIGITS /A054 AC7777 /SUBTRACT 1 FROM THE /A054 TAD ERRCOL /ERROR COLUMN /A054 DCA ERRCOL /RESTORE THE UPDATED ERROR COLUMN /A054 TAD (-144 /SEE IF MORE THAN TWO DIGITS /A054 TAD I (CYLNO /GET THE CURRENT CYLINDER NUMBER /A054 SMA CLA /SKIP THE COLUMN SUBTRACT ON TWO DIGITS /A054 AC7777 /SUBTRACT 1 FROM THE /A054 TAD CYLCOL /CYLINDER COLUMN /A054 DCA CYLCOL /RESTORE THE UPDATED CYLINDER COLUMN /A054 JMS I IOASET /CALL THE DISPLAY ROUTINE /A054 -5 /NUMBER OF ARGUMENTS TO PASS /A054 HDERR /^P!D^P!D /A054 ERRCOL, 0 /ERROR COLUMN WITH EMBEDDED LINE # /A054 ERRCNT /THE ERROR NUMBER /A054 CYLCOL, 0 /CYLINDER COLUMN WITH EMBEDDED LINE # /A054 CYLNO /THE CYLINDER NUMBER /A054 JMS I IOASET /CALL THE DISPLAY ROUTINE /A054 -5 /NUMBER OF ARGUMENTS TO PASS /A054 HDERR /^P!D^P!D /A054 HEDCOL, 0 /HEAD COLUMN WITH EMBEDDED LINE # /A054 HEADNO /THE HEAD NUMBER /A054 SECCOL, 0 /SECTOR COLUMN WITH EMBEDDED LINE # /A054 SECTNO /THE SECTOR NUMBER /A054 TAD LINENO /GET THE LAST LINE NUMBER USED /A054 TAD (-2300 /IF IT WAS LINE 23 THEN RESET THE COUNT /A054 SNA CLA /IF IT WASN'T THEN PRESS ON /A054 JMS ASKPRT /GO ASK FOR PRINT & RESET LINENO /A054 JMP I RDERR /RETURN TO CALLER. RETURN DF=MYF /A054 ASKPRT, XX /ASK USER TO PRINT HARD DISK ERRORS, RESET LINENO. PART OF VEBLKS JMS SETMS1 /SET UP THE 'WHEN READY....PROMPT /A054 PTRCPY /'PLEASE PRESS PRINT SCREEN TO RECORD /A054 /THE ABOVE INFORMATION. /A054 NOP /NOOP AS NULL ARGUMENT /A054 NOP /NOOP AS NULL ARGUMENT /A054 TAD (1100 /START LINE -1, COLUMN 0 /A054 DCA LINENO /RE-INITIALIZE LINENO /A054 JMS I IOASET /CALL IOACAL /A054 -2 /NUMBER OF ARGUMENTS TO PASS /A054 PSCR /'^P!E'. POSITION & ERASE TO EOS /A054 1000 /FROM LINE 8 COLUMN 0 /A054 JMP I ASKPRT /RETURN TO CALLER. RETURN DF=MYF /A054 FNC=. /FIRST NON-CODE LOCATION /A042 PAGE VEABLK, XX /READ AND VALIDATE THE ALLOCATION BLOCK. 1ST LEVEL SUB. /M054 /WILL BE CALLED TWICE. THE FIRST TIME, NOTHING ELSE HAS BEEN /DONE; THE 2ND TIME, THE BLOCK LIST WILL BE IN F6. VEABLK WILL /IOR THE FREE BIT INTO THE BLOCK LIST STATUS WORD. JMS GTALLC /GET ALLOCATION BLOCK TO ABLKBF. RET DF=BUF/M054 JMP ABLKE1 /READ ERROR, GO REPORT ERROR /C050 DCA SYSDSC /SET FIRST AVAILABLE BLOCK TO 0 FIRST. /M054 DCA ALLOK /CLEAR THE ALLOCATION FLAG/LINK /M054 TAD I (ABLKBF+1) /CHECK THE TYPE WORD /M055 AND (70) /FOR THE TYPE NIBBLE ONLY /M054 TAD (-40) /'4' IS THE ALLOCATION BLOCK TYPE /M054 SZA CLA JMP ABLKE1 /JUMP IF WRONG FLAG WORD /C042 /TD056/CHECK FOR A MOUNTED WINNY /TD056 TAD (-4 /4 IS THE DENSITY CODE FOR A MOUNTED WINNY /TD056 TAD DENFLG /GET THE CURRENT DENSITY CODE /A054 /TD056 SPA CLA /POSITIVE RESULTS ARE WINNY OR MORE /A054 /TD056 JMP TRYRX /OTHERWISE, GO TEST FOR RX50 TYPE /A054 TAD I (ABLKBF+4 /GET THE IMAGE -ALLOCATION WORD COUNT /A054 TAD ALCCNT /ADD THE RESOLVED ALLOCATION WORD COUNT /A054 SPA CLA /OK IF ITS LESS OR EQUAL /A054 JMP ABLKE1 /ELSE ITS IN ERROR /A054 TAD I (ABLKBF+4 /GET THE IMAGE -ALLOCATION WORD COUNT /A056 CIA /NEGATE IT /A056 DCA ALCCNT /MAKE THAT THE ALLOCATION WORD COUNT /A056 /TD056 JMP ALCOK /ON OK, JUST PRESS ON /A054 /TD056/IF DOING RX50'S, THE ALLOCATION WORD COUNT FOR SYSTEM=141, DOC=143 /M054 /TD056TRYRX, AC7776 /CHECK TO SEE IF IT'S AN RX50 /A027 /TD056 TAD DENFLG /IS IT? /A027 /TD056 SZA CLA /IF EQUAL, THEN ITS RX50 SIZE /C055 /TD056 JMP NOTRX /RETURN IF NOT /A054 /TD056 ISZ RX50SZ /SET THE 'RX50 SIZE' FLAG /A055 /TD056 TAD SYSDSK /SYSDSK=1 IF SYSTEM DISKETTE /A027 /TD056 SNA CLA /IF /M054 /TD056 AC0002 /NOT SYS, ADD 2 FOR 143 WITH /A054 /TD056 TAD (141 /+141 FOR SYSTEM /M054 /TD056 JMP WASRX /DON'T ADD (ALCCNT) FOR RX50S /A054 /TD056NOTRX, TAD ALCCNT /NON RX50 USES (ALCCNT) /A054 /TD056WASRX, TAD I (ABLKBF+4 /GET THE ALLOCATION WORD COUNT FROM IMAGE/A054 /TD056 SZA /SHOULD BE EQUAL /A054 /TD056 JMP ABLKE1 /JUMP IF WRONG ALLOCATION COUNT /C042 /CHECK BIT MAP ALCOK,/TD056 AC7777 /A016 TAD ALCCNT /MAKE COUNTER OF # OF ALLOCATION WORDS /A016 CIA /A016 DCA ABLKC1 /NUMBER OF ALLOCATION WORDS /M054 TAD (ABLKBF+4) DCA ABLKP1 /INITIALLY POINT TO FIRST WORD -1 /M054 TAD (BLKLST) /GET THE BASE ADDRESS OF THE BLOCK LIST /M054 DCA ABLKP2 /ABLKP2 IS THE POINTER INTO THE BLOCK LIST/M054 DCA FRECNT /INITIALIZE THE FREE BLOCK COUNTER TO 0 /M054 ABLKL1, ISZ ABLKP1 /INCREMENT THE ALLOCATION WORD POINTER /M054 TAD (-10) DCA ABLKC2 /SET SHIFT COUNTER CDFBUF /POINT AT THE BUFFER FIELD /A054 TAD I ABLKP1 /GET THE ALLOCATION WORD /M054 AND (7400) /CHECK HI BITS SZA CLA JMP ABLKE1 /ON A HI BIT ERROR, CALL ALLOK AND QUIT /A054 TAD I ABLKP1 /GET AGAIN RTL RTL /ALIGN FIRST BIT MQL /SAVE CDFLST /POINT AT THE LIST FIELD /A054 ABLKL2, CLA MQA /GET SHIFTED ALLOCATION WORD /M054 RAL MQL /GET NEXT BIT, SAVE REMAINDER SZL ISZ FRECNT RAR /0 OR 4000, THIS BLOCK'S FLAG IS IN BIT 0 SPA /0 MEANS USED, 1 MEANS FREE /A055 TAD I ABLKP2 /IOR (ADD) THE BLOCK LIST STATUS WORD /M054 SPA /COULD BE 2ND PASS THRU & FREE COULD BE SET DCA I ABLKP2 /WRITE BACK THE UPDATED STATUS WORD /M054 CLA /ASSURE (AC)=0 FOR ABLKL1 /M054 ISZ ABLKP2 /INCR THE BLOCK LIST POINTER /M054 ISZ ABLKC2 /INCR THE SHIFT COUNTER /M054 JMP ABLKL2 /LOOP FOR ALL BITS IN THIS WORD /M054 ISZ ABLKC1 /INCREMENT THE ALLOCATION WORD COUNTER /M054 JMP ABLKL1 /LOOP FOR ALL WORDS CDFBUF /POINT AT THE BUFFER FIELD FOR ABLKBF /A054 TAD I (ABLKBF+1) /GET THE TYPE WORD /C054 AND (71) /LOOK AT TYPE AND SYSTEM NIBBLES /M054 TAD (-41) /FOR TYPE IS 4 AND SYSTEM BIT TRUE /M054 SZA CLA JMP ABLKL4 /IF BOTH WEREN'T TRUE, THEN SYSDSC=0 & EXIT TAD I (ABLKBF+2) /# 0F BLOCKS IN SYSTEM /M054 TAD DSKIDX /ADD NEGATIVE OF MAXIMUM BLOCKS /M054 SMA SZA CLA /DOES THE ALLOCATION BLOCK CLAIM TOO MANY? JMP ABLKE1 /IF SO, MARK IT AS BAD & EXIT /M054 AC7776 /LOOK FOR RX50 & HIGHER DENSITY CODES /A055 TAD DENFLG /GET THE CURRENT DENSITY CODE /A054 SPA CLA /POSITIVE RESULTS ARE RX50 OR MORE /A054 JMP OLDSYS /OTHERWISE, GO DO THE LOOK UP ROUTE /A054 TAD I (ABLKBF+2 /GET THE BLOCKS AVAILABLE PER THE IMAGE /A054 TAD DSKIDX /ADD THE NEGATIVE BLOCKS AVAIL PER VOL /A054 SZA SMA /OK ON =/< /C055 JMP ABLKE1 /ELSE ITS IN ERROR /A054 CIA /MAKE IT POSITIVE FOR LATER COMPARISONS /A055 DCA SYSDSC /SYSTEM SIZE- HIGHEST SYS BLOCK /A055 TAD RX50SZ /SEE IF WERE DOING RX50 OR 800 BLOCK VOL/A055 SNA CLA /IF NOT, THEN /A055 JMP ABLKL4 /JUST PRESS ON /A055 TAD SYSDSC /ELSE GET BACK THE SYSTEM SIZE /A055 TAD (-26 /COMPENSATE FOR FIRMWARE /A055 DCA SYSDSC /SYSTEM SIZE- HIGHEST SYS BLOCK /A054 JMP ABLKL4 /ON OK, JUST PRESS ON /A054 OLDSYS, TAD DENFLG /GET THE DENSITY OF THE DISKETTE /A033 TAD (SZTAB) /POINT TO DISKETTE SIZE (WAS SIZTAB) /C055 DCA T1 /USE T1 AS POINTER /M054 TAD I (ABLKBF+2) /GET # OF BLOCKS REMAINING AFTER SYSTEM /M054 CIA /SET UP TO SUBTRACT /A033 CDFMYF /A033 TAD I T1 /ADD IN SIZE OF DISKETTE /A033 DCA SYSDSC /RESULT IS SYSTEM SIZE IN BLOCKS. /M054 JMP ABLKL4 ABLKE1, JMS ALLOK /READ, FLAG, OR ALLOCATION COUNT ERROR /M054 ABLKL4, JMP I VEABLK /RETURN TO CALLER ABLKC1, 0 /COUNT OF ALLOCATION WORDS TO GO /M054 ABLKC2, 0 /SHIFT COUNTER FOR BITS IN A WORD /M054 ABLKP1, 0 /POINTER TO ALLOCATION WORD IN ABLKBF /M054 ABLKP2, 0 /POINTER TO STATUS WORD IN BLKLST IN F6 /M054 FNC=. /FIRST NON-CODE LOCATION /A042 PAGE VEHDR, XX /VERIFY HEADER BLOCKS FOR FILE (FILENO). PART OF VEFCHK /M054 CLA TAD FILENO /GET THE NUMBER OF THIS FILE /M054 TAD (HBLKBF+11) /ADD THE BASE TO LOCATE THE POINTER WORD/M054 /IN THE HOME BLOCK BUFFER. /A054 DCA T1 /USING T1 AS THE POINTER /M054 CDFBUF /IN THE BUFFER FIELD /M054 TAD I T1 /GET THE ACTUAL HEADER BLOCK NUMBER /M054 SNA /IF ZERO, THERE'S NO SUCH FILE /M054 JMP VEHDE1 /NO SUCH FILE DCA HDR1 /SAVE THE HEADER BLOCK NUMBER /M054 TAD HDR1 /GET IT BACK TO CHECK BLOCK ATTRIBUTES /M055 JMS VEHBCH /IN BLKLST STATUS WORD. RET DF=BUF /M054 JMP CHKFLE /IF BAD ATTRIBUTES, TAKE ERROR PATH /A054 JMS I IQURX /READ THE HEADER BLOCK /M054 RXERD+4000 HDR1, 0 /FOR THIS FILE NUMBER /M054 HDR1BF /INTO THE HEADER 1 BUFFER /M054 JMP VEHDE4 /READ ERROR /C042 CDFBUF /OK, CHECK TYPE WORD TAD I (HDR1BF+1) /GET THE TYPE WORD FROM THE BUFFER /M054 AND (70) /MASK OUT ALL BUT BITS 6-8 /M054 TAD (-10) /BITS 6-8 SHOULD BE 001 /M054 SZA CLA JMP VEHDE4 /WRONG TYPE TAD I (HDR1BF+4) /CHECK "INFORMATION" WORD COUNT /M054 TAD (-50) SZA CLA JMP VEHDE4 /WRONG INFO COUNT /C042 TAD I (HDR1BF+13) /COMPARE FILE NUMBER AT HDR1BF+13 /M054 CIA TAD FILENO SZA CLA JMP VEHDE4 /WRONG FILE NUMBER /A055 AC0001 /CHECK FOR THE GO-TO-PAGE BIT /A056 AND I (HDR1BF+1 /IN THE TYPE WORD /A056 SNA CLA /NON ZERO MEANS GO-TO-PAGE IS PRESENT /A056 /D056 TAD I (HDR1BF+1 /CHECK FOR GO-TO-PAGE STRUCTURE /M054 /D056 RAR /ROTATE BIT 11 INTO THE LINK /A025 /D056 SNL CLA /IF PRESENT, GO CHECK GTP STRUCTURE /M054 JMP HDR1A /IF NOT, CONTINUE HEADER CHECKS /M054 JMS VECRPB /GO VERIFY RAPID PAGINATION BLOCKS /A019 /DON'T DELETE A FILE DUE TO ITS OWN BAD GTP STRUCTURE...C056 /D056 JMP VEHDE4 /BAD GOTOPAGE STRUCTURE /C042 /D056HDR1A, CDFBUF HDR1A, TAD I (HDR1BF+5) /GET # DATA BLOCKS IN THIS FILE /M054 TAD (-310) /COMPARE TO 200 /M054 SMA CLA /IGNORE EXTENSIONS IF LESS THAN 200 BLOCKS/M054 TAD I (HDR1BF+2) DCA HDR2 /SAVE 1ST EXT HDR NUM TAD I (HDR1BF+3) DCA HDR3 /AND 2ND ONE TAD (HDR2BF-1) DCA AIR10 /CLEAR EXT HDR BUFRS /M056 TAD (-1000) DCA T1 HDRLP, DCA I AIR10 /M056 ISZ T1 JMP HDRLP /C042 TAD HDR2 /READ EXT HDRS SNA JMP VEHDOK /QUIT IF NO MORE JMS VEHBCH JMP VEHDE4 /ERROR RETURN /C054 JMS I IQURX /READ IT RXERD+4000 HDR2, 0 HDR2BF JMP VEHDE4 /ERROR (SHOULDN'T HAPPEN) /C042 TAD HDR3 /OK RETURN /C050 SNA JMP VEHDOK /QUIT IF NO MORE JMS VEHBCH JMP VEHDE4 /CHECK, QUIT IF ERROR /C042 JMS I IQURX RXERD+4000 HDR3, 0 HDR3BF JMP VEHDE4 /ERROR (SHOULDN'T HAPPEN) /C042 VEHDOK, ISZ VEHDR JMP I VEHDR / CHKFLE, /CHANGED TO PUT THE PREVIOUSLY UNREPORTED 'OTHER' FILE IN THE /A055 /'AFFECTED' LIST, MOVED THE ORIGINAL CALL TO THE 'AFFECTED' LIST/A055 /DOWN INTO BADHDR WHERE IT NOW PUTS THE CURRENT FILENO IN BOTH /A055 /'AFFECTED' AND 'NOT COPIED' LISTS. I BELIEVE THAT THIS IS A POINT/A055 /WHERE A DECISION THAT A FILE IS BAD IS SOMETIMES BEING MADE ON /A055 /THE BASIS OF SEQUENCE RATHER THAN COMPARATIVE ANALYSYS. /A055 AND P377 /GET THE NUMBER OF THE FILE CLAIMING THE/A055 DCA REG11 /THE BLOCK AND STORE IT IN REG11 /A055 TAD FILENO /GET THE FILE NUMBER WE'RE PROCESSING /A055 DCA REG12 /AND SAVE IT IN REG12 /A055 TAD REG11 /GET BACK THE 'OTHER' FILE NUMBER /A055 DCA FILENO /PUT IT IN FILENO TEMPORARILY /A055 AC4000 /SET THE NOT COPIED BIT /C056 JMS DOCSET /GO REPORT THE 'OTHER' FILE /A055 TAD REG12 /GET BACK THE FILENO WE WERE PROCESSING /A055 DCA FILENO /PUT IT BACK FOR FURTHER PROCESSING /A055 VEHDE4, JMS BADHDR /HDR VALIDITY CHECK ERROR VEHDE1, JMP I VEHDR /RETURN TO CALL+1 /M054 VEHBCH, XX /CHECK HEADER BLOCK /M054 MQL MQA CLL TAD DSKIDX /A016 SZL CLA JMP HBCNOK /OUT OF RANGE /C054 MQA TAD (BLKLST) /CHECK ATTRIBUTES DCA T1 CDFLST /GET INTO THE LIST FIELD /A054 TAD I T1 AND (2377) /FREE,ERROR,USED SNA /KEEP THE NUMBER FOR CHKFLE /A055 ISZ VEHBCH /BUMP TO OK RETURN HBCNOK, CDFBUF /A054 JMP I VEHBCH FNC=. /FIRST NON-CODE LOCATION /A042 PAGE VEFCHK, XX /CHECK CURRENT FILE'S STRUCTURE. 1ST LEVEL SUBROUTINE. /M056 DCA FILENO /INITIALIZE FILE NUMBER /A055 VEFLP, ISZ FILENO /UPDATE THE FILE NUMBER /A055 TAD FILENO /GET IT BACK FOR TERMINATION CHECK /A055 TAD (-311 /311 IS ONE COUNT TOO MANY /A055 SMA CLA /IF ITS = OR GREATER THEN /A055 JMP I VEFCHK /ALL DONE, RETURN TO MAIN /A055 JMS VEHDR /VERIFY HEADERS FOR THIS FILE /M055 JMP VEFLP /ERROR RETURN FROM VEHDR /A055 JMS I IOASET /CALL IOACAL - GOOD RETURN FROM VEHDR /M055 -3 /NUMBER OF ARGUMENTS TO PASS /A042 VSCRN3 /"CHECKING DOCUMENT ^D" /C049 -2600 /CURSOR POSITION AND ERASE /C049 FILENO /DOCUMENT NUMBER /CHECK FILE (FILENO)S DATA BLOCKS, HEADERS ALREADY LOADED & VALIDATED /A055 DCA VEDBCT /CLEAR BLOCK COUNT TAD HDR1 /ACCOUNT HEADERS SZA JMS VEDSUB TAD HDR2 SZA JMS VEDSUB TAD HDR3 SZA JMS VEDSUB AC7776 /A024 DCA EXTFLG /SO EXT BLOCK #2 IS SHORTER /A024 TAD (HDR1BF+55) DCA VEDBP1 /SET TO FIRST BLOCK TAD (55-400) DCA VEDBC1 /# PTRS IN FIRST BLOCK TAD (-3) DCA VEDBC2 /MAX # HDRS VEDLP1, CDFBUF TAD I VEDBP1 /GET NEXT DATA BLOCK # CDFMYF SNA JMP VEDBDN /JUMP IF NO MORE JMS VEDSUB /ACCOUNT IT ISZ VEDBCT /BUMP OUR BLOCK COUNT ISZ VEDBP1 /BUMP PTR NOP /AVOIDS PROBLEM WHEN BP1 PASSES 0 /A024 ISZ VEDBC1 JMP VEDLP1 /LOOP FOR ALL IN THIS HDR ISZ XTNFLG /CHECK FOR EXTENSION MODE /A024 SKP /A024 JMP VEDXTN /A024 ISZ VEDBP1 ISZ VEDBP1 /CROSS INTER-HDR GAP ISZ EXTFLG /SEE IF THIS IS 2ND EXT BLOCK /M054 SKP /A024 TAD (16 /IF SO, LESS PTRS IN THIS ONE /A024 TAD (-376) DCA VEDBC1 /# PTRS IN THIS HDR ISZ VEDBC2 JMP VEDLP1 /LOOP FOR ALL HDRS AC7776 /BACK UP TWO SPACES /A024 TAD VEDBP1 DCA EXTPTR VEDXTN, CDFBUF /? TAD I EXTPTR CDFMYF SNA JMP VEDBDN /DONE IF NO MORE BLOCK #'S /M054 ISZ EXTPTR /POINT TO NEXT EXT HDR BLOCK /M054 DCA BLKIN TAD BLKIN JMS VEDSUB /MARK EXT HDR BLOCK IN USE /M054 TAD (HDR4BF /NOW READ EXT HDR BLOCK TO HDR4BF /M054 JMS READIN TAD (HDR4BF+2 /SET POINTER AT START OF BLOCKS /A024 DCA VEDBP1 TAD (-376 /SET PTR COUNTER AT 376 /A024 DCA VEDBC1 AC7777 /MINUS 1 /M055 DCA XTNFLG /IN XTNFLG INDICATES EXTENSION HEADER /M055 JMP VEDLP1 /PROCESS THE EXTENSION HEADER'S DATA BLOCKS/A055 VEDBHE, JMS BADHDR /TOO BIG. GO REPORT & DELETE THE FILE /A055 VEDBDN, DCA XTNFLG /ZERO XTNFLG /A055 JMP VEFLP /LOOP TO CHECK NEXT FILE /A055 VEDSUB, XX /PART OF VEDBLK. ON CALL (AC)=(HDRX) 1,2,3. PART OF VEDBLK/A055 /IF THE HEADER BLOCK # IS OUT OF RANGE THEN GOTO VEDBHE /IF IT IS MARKED FREE THEN FLAG ALLLOCATION BLOCK REBUILD /IF IT IS MARKED READ FAIL THEN FLAG THE ERROR AND RETURN /IF IT IS MARKED WRONG COUNT, MULI-USE, OR A FILE # PRESENT THEN / MARK THE BLOCK LIST STATUS WORD AS MULTI-USE, FLAG / THE ERROR AND RETURN /ELSE IOR (FILENO) INTO THE BLOCK LIST STATUS WORD & RETURN DCA SBLKNO /THIS IS THE HEADER BLOCK NUMBER /A055 TAD SBLKNO /GET IT BACK FOR COMPARISON /A055 TAD DSKIDX /ADD -MAXIMUM COUNT /A055 SMA SZA CLA /ANY NUMBER UP THRU -DSKIDX IS OK /A055 JMP VEDBHE /TOO BIG, SO EXIT VEDSUB,VEDBLK, & VEFCHK/A055 AC4000 /MASK FOR THE 'FREE' FLAG /A055 JMS TEST1 /IN THE STATUS WORD @ (BLKLST+(SBLKNO) /A055 SZA CLA /IF ITS MARKED FREE /A055 JMS ALLOK /FLAG TO REBUILD THE ALLOCATION BLOCK /A055 AC2000 /MASK FOR THE 'READ FAIL' FLAG /A055 JMS TEST1 /IN THE STATUS WORD @ (BLKLST+(SBLKNO) /A055 SZA CLA /IF ITS MARKED 'READ FAIL' /A055 JMP VEDERR /GO FLAG THE ERROR AND EXIT /A055 TAD (1777 /MASK FOR 'WRONG COUNT', MULTI-USE, AND /A055 /FILE NUMBER PRESENCE /A055 JMS TEST1 /IN THE STATUS WORD @ (BLKLST+(SBLKNO) /A055 SNA CLA /IF NONE WERE PRESENT /A055 JMP ADFIL /GO IOR THE FILE NUMBER INTO THE LIST /A055 TAD (400 /ELSE SET THE MULTIPLY USED FLAG /A055 JMS IORBLK /IN THE STATUS WORD @ (BLKLST+(SBLKNO) /A055 JMP VEDERR /GO FLAG THE ERROR AND EXIT /A055 ADFIL, TAD FILENO /GET THE NUMBER OF THIS FILE /A055 JMS IORBLK /IOR IT IN STATUS WORD @ (BLKLST+(SBLKNO)/A055 JMP VEDSBX /GO RETURN /A055 VEDERR, JMS ERRORS /FLAG THE ERROR /A055 VEDSBX, CDFMYF /GET BACK TO THIS DATA FIELD /A055 JMP I VEDSUB /RETURN TO THE CALLER /A055 VEDBP1, 0 /DATA BLOCK PTR FOR VEDBLK /A055 VEDBC1, 0 /DATA BLOCK COUNTER FOR VEDBLK /A055 VEDBC2, 0 /HDR BLOCK COUNTER FOR VEDBLK /A055 FNC=. /FIRST NON-CODE LOCATION /A042 PAGE QURX, XX CLA RDF /GET THE CURRENT DATA FIELD /A054 TAD CDF0 /ADD THE CHANGE DATA FIELD INSTRUCTION /A054 DCA DESFLD /TELL RXHAN WHICH FIELD GETS THE DATA /A054 CDFMYF /A050 TAD DRIVE /GET DRIVE/DEVICE NUMBER /C042 DCA QUQBLK+RXQDRV /IN QBLK TAD I QURX DCA QUQBLK+RXQFNC /FUNCTION CODE ISZ QURX TAD I QURX DCA QUQBLK+RXQBLK /BLOCK NUMBER ISZ QURX TAD I QURX DCA QUQBLK+RXQBAD /BUFFER ADDRESS ISZ QURX CIF 0 ENQUE QUQB QURX1, CIF 0 JWAIT TAD QUQBLK+RXQCOD /DONE YET? SNA JMP QURX1 /LOOP IF NOT SMA CLA /IF ERROR, TAKE FIRST RETURN /A050 ISZ QURX /ELSE BUMP POINTER FOR OK RETURN /A050 JMP I QURX /RETURN /C050 QUQB, DSKQUE 0 0 QUQBLK, 0 0 0 0 0 0 0 0 0 0 0 0 DESFLD, 0 /CHANGE DATA FIELD INSTRUCTION FOR RXHAN/A054 0 0 FRECHK, XX /CHECK FREE BLOCKS FOR USED OR ERROR. FIRST LEVEL SUBR /M054 JMS TAKSYS /RESERVE THE KNOWN SYSTEM BLOCKS. RET DF=LST TAD (BLKLST) /GET THE BASE OF THE BLOCK LIST /M054 DCA T2 /USE IT AS A POINTER /M054 AC7777 /CHECK FOR 1 /A056 TAD DENFLG /AS THE DENSITY CODE /A056 SNA CLA /IF NOT RX02, RECALCULATE THE BLOCK COUNT JMP ISRX02 /IF IT WAS, USE THE LOOKED UP VALUE /A056 AC7777 /GET A MINUS 1 /A056 TAD ALCCNT /GET THE CURRENT ALLOCATION WORD COUNT /A056 CLL RTL /MULTIPLY BY 4 /A056 RAL /THEN MULTIPLY BY 2 FOR 8 /A056 CIA /NEGATE THE NEW BLOCK COUNT /A056 DCA DSKIDX /MAKE THAT THE INDEX FOR FREE CHECKING /A056 ISRX02, TAD DSKIDX /GET THE NEGATIVE MAXIMUM BLOCK COUNT /M054 DCA T1 /USE IT AS THE "TO-GO" COUNT /M054 FRECH1, TAD I T2 /GET NEXT BLOCK LIST STATUS WORD /M054 SPA /IF NOT "FREE", SEE IF IT IS FREE /A054 JMP FRCHUS /IF MARKED "FREE", GO CHECK IF USED /A054 AND P377 /JUST LOOK AT THE FILE NUMBER /M054 SNA CLA /THERE SHOULD BE ONE /M054 JMS ALLOK /IF NO FILE #, FLAG TO REBUILD ALLOCATION TAD I T2 /GET THE STATUS WORD BACK /A054 AND (2400) /CHECK FOR 'READ FAIL' AND 'MULTI-USE' FLAGS SZA CLA /CLA HERE FORCES JUMP TO FRNOUS BELOW /M054 JMS ALLOK /IF EITHER WAS SET, FLAG TO REBUILD ALLOCATION FRCHUS, AND P377 /CHECK USED BY "AND"ING FILE NUMBER /M054 SNA CLA /IF THERE IS A FILE #, 'UNFREE' THE BLOCK/A054 JMP FRNOUS /IF NO FILE #, JUST PRESS ON /A054 JMS ALLOK /FLAG TO REBUILD THE ALLOCATION BLOCK /M054 AC3777 /MASK TO CLEAR THE FREE BIT /A054 AND I T2 /T2 POINTS AT THE BLOCK LIST STATUS WORD/M054 DCA I T2 /RE-WRITE THE BLOCK LIST WORD SANS "FREE"/M054 AC2000 /MASK FOR THE 'READ FAIL' FLAG IN THIS FREE BLOCK AND I T2 /GET BACK THE UPDATED BLOCK LIST STATUS WD/A054 SZA CLA /OK IF 'READ FAIL' NOT SET /A054 JMS ERRORS /ELSE MARK THE ERROR /A054 FRNOUS, ISZ T2 /INCREMENT THE BLOCK LIST POINTER /M054 ISZ T1 /DECREMENT THE "TO-GO" COUNT /M054 JMP FRECH1 /LOOP FOR ALL BLOCK LIST WORDS /M054 JMS HLTCHK /SEE IF THE USER PRESSED GOLD HALT /A054 JMP COPY6 /IF SO, GO CHECK FOR SYS & PRMPT GM /A054 JMP I FRECHK /AND RETURN TO CALLER TAKSYS, XX /CLAIM ALL KNOWN SYSTEM BLOCKS IN BLKLST CLA TAD P377 /SYSTEM FLAG, FILE #0 /C054 MQL CDFLST /POINT AT THE LIST FIELD /A054 TAD (BLKLST) /SAVE IN BLOCK 0 JMS ORLST TAD (BLKLST+1) /1 JMS ORLST TAD (BLKLST+2) /2 JMS ORLST TAD (BLKLST+6) /6 JMS ORLST TAD (BLKLST+377) /377 JMS ORLST JMP I TAKSYS ORLST, XX /MQ IS BITS,AC IS ADDR, CDF IS SET DCA REG10 TAD I REG10 MQA DCA I REG10 JMP I ORLST FNC=. /FIRST NON-CODE LOCATION /A042 PAGE /D056VEMCHK, XX /CHECK FOR MULTI-USED BLOCKS. 1ST LEVEL SUBR. /M054 /D056 /DELETE EVERY FILE CLAIMING MULTIPLY USED BLOCKS WAS THE /D056 /INTENT, IT JUST DELETES THE FILES WHOSE NUMBER IS IN THE /D056 /BLOCK MARKED MULTI-USE. DON'T BELIEVE ANY USEFUL INFO IS /D056 /LOST IF THIS ROUTINE IS NEVER EXECUTED...JUMP BY IT BUT /D056 /LEAVE IT SO IT CAN BE ENABLED. /A055 /D056/ JMP I VEMCHK /FOR TEST BYPASS /A055 /D056 CLA /D056 DCA FILENO /D056VEMCH1, ISZ FILENO /GET NEXT FILE /D056 TAD FILENO /D056 TAD (400) /ADD MULTI-USE FLAG /D056 CIA /NEGATE THE NUMBER /M054 /D056 DCA T1 /SAVE FOR COMPARE /D056 DCA T3 /CLEAR COUNTER /C054 /D056 TAD (BLKLST-1) /D056 DCA X0 /D056 TAD DSKIDX /A016 /D056 DCA T2 /D056 CDFLST /POINT AT THE LIST FIELD /A054 /D056VEMLP, TAD I X0 /GET NEXT BLOCK LIST STATUS WORD /M054 /D056 AND (777) /IGNORE ALL BUT MULTI-USE STATUS /D056 TAD T1 /D056 SNA CLA /D056 ISZ T3 /COUNT MULTI-USED BLOCKS /C054 /D056 ISZ T2 /D056 JMP VEMLP /LOOP FOR ALL STATUS WORDS /M054 /D056 CDFMYF /D056 TAD T3 /ANY MULTI-USED BLOCKS? /C054 /D056 SZA CLA /IF THERE WERE THEN /A055 /D056 JMS DLTFIL /GO DELETE THE FILE /M055 /D056 TAD FILENO /LOOKED AT ALL FILES? /D056 TAD (-310) /D056 SPA CLA /D056 JMP VEMCH1 /LOOP UNTIL WE HAVE /D056 JMP I VEMCHK /THEN RETURN TO CALLER /THE SETMS(N) SUBROUTINES LOAD ONE OF THE STANDARD PROMPT MESSAGES INTO /A054 /VEPRMT THEN PASS THE LINK TO VEPRMT, WHICH GETS THE REMAINING /A054 /ARGUMENTS AND ISSUES THE MESSAGE AND THE PROMPT. /A054 / SETMS1, XX /"When ready Press Return or Press Gold Menu .... /A054 CDFMYF CLA TAD (VSCRNE) /Get "when ready" message DCA VEPRM5 /Install it TAD (VSCRNG) /Get "or press gold menu" message DCA VEPRM6 /Install it TAD SETMS1 /GET THE LINK FOR PASSING ON /C054 JMS VEPRMT /CALL VEPRMT /C054 / SETMS2, XX /"Press Gold Menu to recall the Main Menu" /A054 CDFMYF CLA TAD (VSCRNG) /Get "Press Gold menu" message DCA VEPRM5 /Install it TAD (VSNULL) /Get null message DCA VEPRM6 /Install it TAD SETMS2 /GET THE LINK FOR PASSING ON /C054 JMS VEPRMT /CALL VEPRMT /C054 / SETMS3, XX /"To do this press RETURN or Press Gold Menu ..... /A054 CDFMYF CLA TAD (VSCRNN) /Get "to do this..." message DCA VEPRM5 /Install it TAD (VSCRNG) /Get "or press gold menu" message DCA VEPRM6 /Install it TAD SETMS3 /GET THE LINK FOR PASSING ON /C054 JMS VEPRMT /CALL VEPRMT /C054 /VEPRMT IS A LOW LEVEL SUBROUTINE WHICH IS SLAVE TO THE SETMS(N) CALLS. /C054 /THE SETMS(N) LINK IS PASSED TO VEPRMT FOR ARGUMENT PASSING AND CORRECT /C054 /LINKAGE TO THE SETMS(N) CALLER. VEPRMT DISPLAYS THE PASSED MESSAGE /C054 /FOLLOWED BY THE STANDARD LOWER SCREEN PROMPTS. THE PROMPT SET UP BY /C054 /THE CALLING SETMS(N) WILL BE SEEN. THEY ARE LISTED HERE FOR REFERENCE: /A045 / SETMS1 - "When ready press return or press Gold Menu for Main Menu. /A045 / SETMS2 - "Press Gold Menu to return to Main Menu. /A045 / SETMS3 - "To do this press return or press Gold Menu for Main Menu. /A045 / / THERE MUST ALWAYS BE THREE ARGUMENTS TO SETMS(N): THE /C054 / MESSAGE LABEL OR "VSNULL" AND ARGUMENTS TO THE MESSAGE. FOR /A045 / NULL ARGUMENTS USE THE NOP INSTRUCTION. EXAMPLE: /A045 / JMS SETMS1 /SET UP THE "WHEN READY..." PROMPT, THEN/C054 / /DISPLAY THE MESSAGE AND PROMPT. /C054 / VSNULL /THE MESSAGE LABEL /A045 / MSGARG /LABEL OF THE ARGUMENT TO THE MESSAGE /A045 / NOP /USE THE NOP INS AS NULL ARG TO VEPRMT /A045 / CODE /THE RETURN POINT /A045 / / CURSOR POSITIONING FOR THE PASSED MESSAGE IS AT LINE 26 /A045 / VEPRMT, XX /THE CALL LINK WILL BE REPLACED WITH THE CALLERS LINK /C054 DCA VEPRMT /STORE THE CALLER'S LINK /C054 TAD I VEPRMT /GET ARG STRING DCA VEPRM2 /SAVE FOR IOA ISZ VEPRMT /POINT AT MESSAGE ARGUMENT /A045 TAD I VEPRMT /GET THE ARGUMENT /A045 DCA VPMT1 /STORE IT FOR PASSING /A045 ISZ VEPRMT /POINT AT MESSAGE ARGUMENT /A045 TAD I VEPRMT /GET THE ARGUMENT /A045 DCA VPMT2 /STORE IT FOR PASSING /A045 ISZ VEPRMT /POINT VEPRMT AT THE RETURN /A045 VEPRML, JMS I IOASET /CALL IOACAL /A042 -4 /NUMBER OF ARGUMENTS TO PASS /C045 VEPRM2, 0 /Passed message address 2600 /POSITION AT LINE 26 WITHOUT ERASE /A045 VPMT1, 0 /PASSED ARGUMENT FOR MESSAGE /A045 VPMT2, 0 /PASSED ARGUMENT FOR MESSAGE /A045 IFDEF CANADA < 141> /Accented character for Canada (L.G.A) IFDEF FRENCH < 141> /Accented character for French (L.G.A) IFDEF DUTCH < 154> /Accented character for Dutch (L.U.E) JMS I IOASET /CALL IOACAL /A042 -2 /NUMBER OF ARGUMENTS TO PASS /A042 PSCR /^P!E/ POSITION AND ERASE TO EOS /A049 IFNDEF FRENCH < 2700 > /POSITION AND ERASE TO EOS /C049 IFDEF FRENCH < 2600 > /The following message is set by the SETMS routines JMS I IOASET /CALL IOACAL /A042 -1 /NUMBER OF ARGUMENTS TO PASS /A042 VEPRM5, VSCRNE /ADDRESS OF FIRST PART "PRESS RETURN" IFDEF FRENCH < JMS I IOASET /CALL IOACAL /A042 -2 /NUMBER OF ARGUMENTS TO PASS /A042 PSCR /^P!E/ POSITION AND ERASE TO EOS /A049 2700 /CURSOR POSITION /C049 > JMS I IOASET /CALL IOACAL /A042 -1 /NUMBER OF ARGUMENTS TO PASS /A042 VEPRM6, VSCRNG /ADDRESS OF SECOND PART 'OR GOLD MENU JMS INCHR /GET RESPONSE TAD (-EDMENU) /CHECK FOR GOLD-MENU SNA JMP VEPRM4 /WAS GM, GO VALIDATE D0 VIZ-A-VIZ SYSDID/M054 TAD (EDMENU-EDNWLN) /IS IT AN EOL? SNA CLA JMP VEPRM3 /YES, SKIP RETURN. JMS RNGBEL /ELSE NOT VALID SO BUZZ JMP VEPRML /RESET LINE AND SEND LINES AGAIN VEPRM3, JMS I IOASET /CALL IOACAL /A042 -2 /NUMBER OF ARGUMENTS TO PASS /A042 IOATSP /^P..POSITION ONLY /C049 -2400 /POSITION CURSOR AT 24TH LINE, ERASE /C049 JMP I VEPRMT /RETURN TO CALLER FNC=. /FIRST NON-CODE LOCATION /A042 PAGE RECONH, XX /TALLY ALL HDRS AND REBUILD HOME JMS ALLOK /FLAG TO REBUILD THE ALLOCATION BLOCK /M054 JMS HOMEOK /FLAG TO MARK PASSAGE THRU THIS CODE /M055 CDFBUF CLA TAD (HBLKBF-1) /ZERO HOME BUFFER DCA AIR17 /M043 TAD (400) /* JMS I IZERO /* TAD (HBLKBF-1) /PRESET FILL IN PTR DCA AIR17 /M043 TAD (-FIXWRD) /FILL IN WC DCA REG10 TAD (FIXLOC-1) /SOURCE ADDR JMS MOVFLD /COPY DATA UP TAD (TYPLST-1) /BASE OF TYPE LIST /M054 DCA AIR17 /M043 TAD DSKIDX /GET THE MINUS MAXIMUM COUNT /M055 DCA REG12 /USE REG12 AS THE 'TOGO' COUNT /M055 DCA SBLKNO /ZERO THE BLOCK POINTER /M054 RHLP, CDFLST /POINT AT THE LIST DATA FIELD /A054 TAD I AIR17 /GET THE TYPE LIST STATUS WORD /M054 MQL /SAVE A COPY IN THE MQ REGISTER /M054 MQA /GET IT BACK /M054 AND (1000) /IS IT A HEADER BLOCK? /M054 SNA CLA /IF IT IS, PROCESS IT /A054 JMP NXTBLK /IF NOT, CONTINUE WITH NEXT BLOCK # /A054 /PROCESS HEADER IN LIST. MQA /TYPE WORD IS IN MQ, (AC)=0 /C050 AND (4000) /IS IT BAD ALSO SZA CLA JMP NXTBLK /YES-SKIP IT /C054 MQA AND P377 /GET THE FILE NUMBER /C054 DCA FILENO /SAVE FOR A POSSIBLE 'AFFECTED' REPORT /A055 TAD FILENO /GET IT BACK FOR FURTHER PROCESSING /A055 SNA /CANT BE FILE # 0 /M055 JMP NXTBLK /WAS 0. /M055 TAD (HBLKBF+11) /ADD TO IT BASE OF THE HOME BLOCK FILE LIST DCA REG11 /USE REG11 AS THE HOME BLOCK FILE LIST PTR/A055 TAD REG11 /GET THE POINTER VALUE /M055 TAD (-HBLKBF-321) /CHECK FOR OVER RUN /C042 SMA SZA CLA JMP NXTBLK /FILE NUMBER TOO BIG /C054 JMS DOCGET /CHECK THE DOCLST ENTRY FOR THIS FILENO /A055 AND (6000 /LOOK FOR THE 'NOT TO BE COPIED' /A056 /AND 'MULTIPLE CLAIMANTS' FLAGS /A056 /CHANGE THIS LOGIC TO REFLECT A MORE COMPREHENSIVE ANALYSIS SZA CLA /OK IF ZERO /A055 JMP NXTBLK /ELSE SKIP IT /A055 CDFBUF /LOOK IN THE BUFFER FIELD AT (HBLKBF+11+(FILENO)) TAD I REG11 /IS A BLOCK NUMBER ALREADY THERE? /M054 SZA CLA /NON-ZERO MEANS THERE WAS A COLLISION /M054 JMP COLISN /SO GO MARK THE DOCLST /A055 UPDH, TAD SBLKNO /GET THE BLOCK NUMBER /M055 DCA I REG11 /STORE IT IN THE HOME BLOCK FILE LIST /M055 /AS THE HEADER BLOCK FOR THE FILE /A055 JMP NXTBLK /AND GO CONTINUE THE LOOP /A055 COLISN, DCA I REG11 /CLEAR THE HOME BLOCK FILE LIST ENTRY /A055 AC2000 /SET 'MULTIPLE CLAIMERS' FLAG /C056 JMS DOCSET /IN THIS FILE'S DOCLST ENTRY /A055 /D056 AC7777 /CLEAR ALL THE DATA /A055 /D056 JMS CLR1 /FROM THE BLOCK LIST STATUS WORD /A055 /D056 AC4000 /SET THE FREE FLAG IN THE /A055 /D056 JMS IORBLK /BLOCK LIST STATUS WORD. RETURN DF=LST. /A055 NXTBLK, ISZ SBLKNO /SET THE NEXT BLOCK NUMBER /M054 ISZ REG12 /DONE ? JMP RHLP /NO /C042 CDFMYF JMP I RECONH /EXIT MOVFLD, XX /COPIES (REG10) WORDS FROM +((AIR16))MYF TO +((AIR7))BUF/M054 DCA AIR16 /M043 MFLP, CDFMYF /C042 TAD I AIR16 /COPY FIXED MATERIAL UP /M043 CDFBUF DCA I AIR17 /M043 ISZ REG10 /DONE? JMP MFLP /NO JMP I MOVFLD /EXIT ZDATA, XX /ZERO VBLKBF & SET UP AS DATA BLOCK /M054 CDFBUF CLA TAD (VBLKBF /GET THE ADDRESS OF VBLKBF /A055 DCA AIR17 /ZERO FROM VBLKBF+1 /M055 TAD P377 /C054 JMS I IZERO TAD (VBLKBF /GET THE ADDRESS OF VBLKBF /A056 DCA REG10 /SET PTR TAD (COSCNT) DCA I REG10 JMP I ZDATA DSPMSG, XX /PUT THE CURRENT BLOCK NUMBER IN DISPLAY & CALL CPYUPD /M054 TAD SBLKNO /PICK UP THE BLOCKNUMER /A033 DCA BLKNO /PUT IT WHERE IT CAN BE DISPLAYED /A033 JMS CPYUPD /A033 CBLKNB /DISPLAY 'CHECKING BLOCK NUMBER XXX' /A033 CDFBUF /A033 JMP I DSPMSG /A033 CPYABT, JMS I IOASET /CALL IOACAL /A042 -2 /PASS 2 ARGUMENTS /M054 CPYMS2 /"..© STOPPED /M054 2500 /POSITION AT LINE 25 /A054 IFDEF CANADA < 153 > /L.CFLX.E JMP COPY6 /GO CHECK SYS DSK & PROMPT GM - EXIT /A054 FNC=. /FIRST NON-CODE LOCATION /A042 PAGE RECONA, XX /RECONSTRUCT THE ALLOCATION BLOCK. FORCE NEW IMAGE TO /M054 /BE DATA EVEN IF SOURCE WAS SYSTEM. /M054 JMS TAKSYS /BLOCKS 0,1,2,6,377 = SYSTEM FILE #377 /M054 /IN THE BLOCK LIST STATUS WORDS. DF=LST /A054 TAD (ABLKBF-1) /ZERO THE ALLOCATION BUFFER DCA AIR17 /USING AIR17 AS THE AUTO-INDEX POINTER /M054 TAD (400) /CLEAR A BLOCK SIZED AREA /M054 CDFBUF /POINT AT THE BUFFER FIELD /A054 JMS I IZERO /GO CLEAR ABLKBF+0 -> 377 /M054 JMS SWPDRV /MAKE (DRIVE)=(CPYDRV) /A054 JMS GDENS /GET THE DENSITY CODE TO AC. RET DF=MYF /A054 TAD (-4 /COMPARE TO 4 /A054 SPA CLA /OK IF 4 OR MORE /A054 JMP RXRCA /ELSE, NOT DOING RD50 /A054 CDFBUF /POINT AT THE BUFFER FIELD /A054 TAD I (CVOLBU+17 /CHECK THE HI BYTE OF BLOCK COUNT /A054 SZA CLA /OK IF 0 /A054 JMP SET2K /ELSE GO SET 2000 BLOCK MAXIMUM /A054 TAD I (CVOLBU+16 /GET THE LOW BYTE OF THE BLOCK COUNT /A054 TAD (-176 /175 IS THE MAXIMUM LEGAL VALUE FOR V2.0/A054 SMA CLA /SO MINUS RESULTS ARE GOOD /A054 JMP SET2K /ELSE GO SET 2000 BLOCK MAXIMUM /A054 TAD I (CVOLBU+16 /GET THE LOW BYTE OF THE BLOCK COUNT /A054 CLL RTL /CLEAR THE LINK & MULTIPLY BY FOUR /A054 RTL /TWICE TO GET ACTUAL BLOCK COUNT /A054 DCA DSKSIZ /THAT'S THE NEW BLOCK COUNT /A054 JMP SETCNT /GO USE IT TO SET DERIVATIVE COUNTS /A054 SET2K, TAD (3720 /GET 2000 DECIMAL - THE V2.0 MAX /A054 DCA DSKSIZ /THAT'S THE NEW BLOCK COUNT /A054 SETCNT, TAD DSKSIZ /GET THE # OF BLOCKS IN THE IMAGE /A054 TAD (-1440 /IF ITS 800 BLOCKS /A054 SZA CLA /MAKE IT LOOK LIKE AN RX50 /A054 JMP SETCB /ELSE CONTINUE SET UP AS IS /A054 TAD (1420 /MAKE IT 784 BLOCKS LIKE AN RX50 /A054 DCA DSKSIZ /MAKE THAT THE IMAGE SIZE /A054 SETCB, TAD DSKSIZ /GET THE # OF BLOCKS IN THE IMAGE /A054 CIA /NEGATE IT /A054 DCA DSKIDX /USE IT AS A COUNTER VALUE /A054 TAD DSKSIZ /GET THE # OF BLOCKS IN THE IMAGE /A054 CLL RTR /CLEAR THE LINK & DIVIDE BY 4 AND /A054 CLL RAR /DIVIDE AGAIN BY 2 FOR A TOTAL OF 8 /A054 IAC /ADD 1 FOR REVERSE COMPATABILITY /A054 DCA ALCCNT /THAT'S THE NEW ALLOCATION WORD COUNT /A054 RXRCA, CDFMYF TAD DSKSIZ /GET THE MAX BLOCK NUMBER IN THE IMAGE /M054 TAD (-5 /SUBTRACT THE 5 SYSTEM BLOCKS /M054 DCA ALODSZ /(ALODSZ)=(DSKSIZ)-5=BLOCKS AVAILABLE /M054 TAD ALCCNT /GET THE CALCULATED ALLOCATION WORD COUNT/M054 CIA /NEGATE IT TO MAKE A 'TO-GO' COUNT /M054 DCA ALOCNT /(ALOCNT)=-(ALCCNT). ALLOCATION WORD COUNT/M054 TAD (ABLKBF-1) / DCA AIR17 /AIR17 IS THE POINTER INTO ABLKBF /M054 TAD (-ALOWRD) /MOVE IN FORMAT DATA - 5 WORDS /M054 DCA REG10 /REG10 IS THE WORD COUNTER FOR MOVFLD /M054 TAD (ALODAT-1) /FROM HERE JMS MOVFLD /(AIR16)=(AC) THEN COPIES (REG10) WORDS /M054 /FROM +((AIR16)) MYF TO +((AIR17)) BUF. /M054 /RETURN DF=BUF /A054 DCA FRECNT /0 THE FREE BLOCK COUNTER /M054 TAD (BLKLST-1) DCA AIR10 /AIR10 IS THE BLOCK LIST POINTER /M054 DCA AIR12 /CLEAR AIR12 TO USE AS THE BLOCK COUNTER/M054 ALOLP2, TAD (20) /SET SHIFT MARK ALOLP1, DCA AIR11 /SAVE SHIFT REG /M043 TAD AIR12 /GET THE CURRENT BLOCK COUNT /M054 TAD DSKIDX /COMPARE IT TO THE -MAXIMUM COUNT /M054 SMA CLA /IF IT WAS EQUAL /M054 JMP ALODNE /THEN GO FINISH UP /M054 ISZ AIR12 /ELSE, INCREMENT THE BLOCK COUNT /M054 CLL /CLEAR THE FREE FLAG /M054 CDFLST /POINT AT THE LIST FIELD /A054 TAD I AIR10 /GET BLOCK STATUS WORD /M043 AND P377 /GET JUST THE FILE# /C054 SNA CLA /IF THERE'S A FILE#, THE BLOCK IS USED /M054 STL /IF NOT USED, SET THE FREE FLAG /M054 SZL /IF NOT FREE, DON'T UP THE FREE COUNT /M054 ISZ FRECNT /IF FREE, THEN COUNT THE FREE BLOCK /M054 TAD AIR11 /GET THE SHIFT REGISTER /M054 RAL /SHIFT THE LATEST FLAG INTO BIT 11 /M054 SNL /DID THE SHIFT MARK REACH US? /M054 JMP ALOLP1 /IF NOT, CONTINUE THE INNER LOOP /M054 CDFBUF /ELSE, POINT BACK AT THE BUFFER FIELD /A054 DCA I AIR17 /SAVE THE ASSEMBLED WORD IN ABLKBF /M054 JMP ALOLP2 /START A NEW ALLOCATION WORD /M054 ALODNE, CDFBUF /ALL BLOCKS DONE TAD DENFLG /GET THE VERIFY DEVICE'S DENSITY /M054 SNA CLA /IF AN RX01 /M054 JMP FREPUT /THEN GO WRITE THE FREE COUNT TO ABLKBF /M054 TAD AIR11 /ALL OTHERS, GET THE SHIFT WORD REGISTER/M054 ALDNLP, RAL /ROTATE IT /M054 SNL /--UNTIL THE MARK IS IN THE LINK /M054 JMP ALDNLP /CONTINUE THE ROTATION /M054 DCA I AIR17 /THEN STORE THE LAST ALLOCATION WORD /M054 FREPUT, TAD FRECNT /GET THE COUNT OF FREE BLOCKS /M054 DCA I (ABLKBF+3 /ENTER IT IN THE ALLOCATION BLOCK /A054 JMP I RECONA /RETURN. DF=BUF FNC=. /FIRST NON-CODE LOCATION /A042 PAGE ALOWRT, XX /WRITES OUT ALLOCATION BUFFER & FIXES BLOCK 6 TO DATA BOOT CDFBUF /POINT AT THE BUFFER DATA FIELD /A054 JMS I IQURX /WRITE OUT NEW ALLOCATION BLOCK /M054 RXEWT+4000+2000 377 ABLKBF NOP /ERROR RETURN, NO HANDLING PROVIDED /A050 BLOCK6, CDFBUF /POINT AT THE BUFFER DATA FIELD /A054 JMS I IQURX /OK RETURN, GO READ IN LAST BOOT BLOCK /C050 RXERD+4000 6 VBLKBF NOP /ERROR RETURN, NO HANDLING PROVIDED /A050 CDFBUF /POINT AT THE BUFFER DATA FIELD /A054 TAD (VBLKBF-1) /POINT TO WRD 0-1 DCA AIR17 /M043 TAD (5601) /@4400 JMP I .+1 DCA I AIR17 /M043 TAD (4600) /@4401 4600 DCA I AIR17 /MUST HAVE WANTED IT IN THE BUFFER VICE AIR17 /D054 DCA AIR17 /M043 JMS I IQURX /NOW A DATA DISC BOOT, REWRITE BOOT BLOCK /C042 RXEWT+4000+2000 6 VBLKBF NOP /ERROR RETURN, NO HANDLING PROVIDED /A050 JMP I ALOWRT /EXIT. DF=MYF /M054 ALODAT, -377 /FOR ALLO BLOCK REBUILD 40 /ALLO TYPE ALODSZ, 1163 /632(10)MAX AVAILABLE 0 ALOCNT, -120 /-80(10) WORDS USED ALOWRD=.-ALODAT IORBLK, XX /(BLKLST+(SBLKNO))=(BLKLST+(SBLKNO)) IOR (AC). UTILITY /M054 MQL /SAVE THE BITS TO IOR /M054 CDFLST /GET TO THE XXXLST FIELD /M054 TAD (BLKLST) /GET THE BLOCK LIST BASE /M054 TAD SBLKNO /ADD (SBLKNO) AS OFFSET /M054 DCA REG10 /USE REG10 AS THE POINTER /M054 TAD I REG10 /GET THE STATUS WORD /A054 MQA /OR IN THE BIT(S) /M054 DCA I REG10 /WRITE BACK THE UPDATED STATUS WORD /M054 JMP I IORBLK /DF=LST /M054 CLR1, XX /ACBAR&((SBLKNO)+BLKLST)->(BLKLST+(SBLKNO)) MQL CDFLST /POINT AT THE LIST FIELD /A054 TAD (BLKLST) TAD SBLKNO DCA REG10 MQA CMA AND I REG10 DCA I REG10 JMP I CLR1 FNC=. /FIRST NON-CODE LOCATION /A042 PAGE READIN, XX /READ TO BUFFER IN AC, BLOCK # (BLKIN) FROM VERIFY DEVICE/M054 DCA RXBF /SAVE BUFFER ADDR JMS RTDRV /GO GET THE FROM DRIVE NUMBER /A027 TAD BLKIN /INPUT BLOCK NUMBER DCA RXSEC CDFBUF /POINT AT THE BUFFER DATA FIELD /A054 JMS I IQURX RXERD+4000 RXSEC, 0 RXBF, 0 JMP CPYEX4 /ERROR RETURN, MAKE UNREADABLE /C050 CDFBUF /OK RETURN, DATA FIELD=BUF /A050 JMP I READIN WRITE0, XX /WRITE A SECTOR TO THE COPY DEVICE FROM THE BUFFER WHOSE/A055 /ADDRESS IS IN THE AC TO BLOCK # (BLKOUT) /A055 DCA WRXBF /PUT THE BUFFER ADDRESS IN RXHAN CONTROL BLOCK/M054 JMS SWPDRV /GO GET THE DRIVE NBR TO COPY TO /A027 TAD BLKOUT DCA WRXSEC /BLOCK ADDRESS /M054 CDFBUF /POINT AT THE BUFFER DATA FIELD /A054 JMS I IQURX RXEWT+6000 WRXSEC, 0 WRXBF, 0 JMS BADDSC /ERROR RETURN, BAD OUTPUT /C050 CDFBUF /OK RETURN, DATA FIELD=BUF /A050 JMP I WRITE0 /RETURN TO CALLER /C050 TEST1, XX /(BLKLST+(SBLKNO))&AC->AC IN LIST FIELD /M054 MQL CDFLST /POINT AT THE LIST DATA FIELD /A054 TAD (BLKLST) TAD SBLKNO DCA REG10 MQA AND I REG10 JMP I TEST1 TEST2, XX /(AC)=(TYPLST+(SBLKNO)) AND (AC) ON CALL /M054 MQL CDFLST /POINT AT THE LIST DATA FIELD /A054 TAD (TYPLST) TAD SBLKNO DCA REG10 MQA AND I REG10 JMP I TEST2 IORTYP, XX /OR (AC) INTO TYPLST STATUS WORD. PART OF VEBLKS /M056 MQL /(MQ)=(AC) /M056 TAD (TYPLST /GET THE BASE OF THE TYPE LIST /A056 TAD SBLKNO /GET THE NUMBER OF THE BLOCK UNDER TEST /A056 /D056 TAD VBLKPT /PTR IN LIST1 /D056 TAD (TYPLST-BLKLST) /OFFSET TO LST 2 DCA REG10 /WORKING ADDR CDFLST /POINT AT THE LIST FIELD /A054 TAD I REG10 /OLD WORD MQA /OR IN BITS DCA I REG10 /RESTORE JMP I IORTYP CPYUPD, XX /UPDATE PASSED MESSAGE EVERY TENTH CALL /M054 CDFMYF /A054 TAD I CPYUPD /GET CAPTION TO BE DISPLAYED /A033 DCA CPYUPM /PUT IT WHERE IT CAN BE DISPLAYED /A033 ISZ CPYUPD /BUMP UP TO RETURN ADDRESS /A033 ISZ AIR13 /TIME OUT /M043 JMP I CPYUPD /NO -EXIT TAD (-12) /TIMER RESET VALUE DCA AIR13 /M043 JMS I IOASET /CALL IOACAL /A042 -3 /NUMBER OF ARGUMENTS TO PASS /A042 CPYUPM, CPYMSG /^P!L !D &DOCUMENTS &COPIED /C049 2400 /CURSOR POSITION AND ERASE TO EOL /C054 BLKNO /NUMBER OF BLOCKS COPIED JMS HLTCHK /GO SEE IF HALT FLAG SET. RET DF=MYF /M054 JMP CPYABT /IT HAS BEEN SET /A027 JMP I CPYUPD /NO -EXIT FIXLOC, COSCNT 230 /VERSION /TYPE WORD /FIXED / /NAME TO BE PUT TO DISC 4752 /FI 7146 /XE 4500 /D ....ALL IN WPS CODES 143 /ASSIGN DISKETTE NUMBER "99" /C050 377 /ALLOCATION BLOCK NUMBER IS 255 /C050 0 /NO DATE 0 -310 /-200 POTENTIAL DOCUMENTS /C050 FIXWRD=.-FIXLOC FNC=. /FIRST NON-CODE LOCATION /A042 PAGE COPYMS, /RESOLVE THE "COPY TO" DEVICE TYPE FEED IT BACK TO THE USER, /A054 /PROMPT FOR ACTION. PART OF ASKNBR /A054 TAD CPYDRV /GET THE "COPY TO" NUMBER /A049 JMS RESDEV /FIND OUT THE TYPE /A049 JMP VCPDRV /ITS DISKETTE, GO SET UP FOR IT /A049 IFNDEF ITALIAN < TAD (CPYMSB /"WINNY" RETURN, SO GET CPYMSB ADDRESS /A049 DCA GODEF /AND INSERT IT AS THE POINTER IN DSPDRV /A049 TAD (ISVOL /ELSE, GET "VOLUME" LABEL /A049 DCA VCMED /STORE THE LABEL IN THE PAGE0 POINTER /A049 TAD (ISDEV /GET "DEVICE" LABEL /A049 DCA VCDEV /STORE THE LABEL IN THE PAGE0 POINTER /A049 JMP COPYGO /GO ON WITH THE COPY MESSAGES /A049 > VCPDRV, TAD (CPYMSA /DISKETTE, SO GET CPYMSA ADDRESS /A049 DCA GODEF /AND INSERT IT AS THE POINTER IN DSPDRV /A049 TAD (ISDSKT /GET "DISKETTE" LABEL /A049 DCA VCMED /STORE THE LABEL IN THE PAGE0 POINTER /A049 TAD (ISDRVE /GET "DRIVE" LABEL /A049 DCA VCDEV /STORE THE LABEL IN THE PAGE0 POINTER /A049 COPYGO, TAD CPYDRV /GET THE COPY-TO DRIVE NUMBER /M054 SZA CLA /IF 0, ASK TO REMOVE SYSTEM DISKETTE /A027 JMP ASKDRV /GO ASK FOR DRIVE ONLY /A027 JMS I IOASET /CALL IOACAL /A042 -5 /NUMBER OF ARGUMENTS TO PASS /C045 CPYMS1 /"REMOVE SYSTEM ^S FROM ^S ^D" /C049 2400 /CURSOR POSITION /A027 IFNDEF ITALIAN < ISDSKT /INSERT "DISKETTE" IN THE MESSAGE /A045 ISDRVE /INSERT "DRIVE" IN THE MESSAGE /A045 > CPYDRV /DRIVE/DEVICE TO COPY TO (ZERO HERE) /A042 ASKDRV, JMS I IOASET /CALL IOACAL /A042 -5 /NUMBER OF ARGUMENTS TO PASS /C045 GODEF, 0 /CPYMSA:"PLACE !S TO REC THE COPY IN !S !D/C049 /OR CPYMSB:"THE !S IN !S !D WILL REC THE COPY"/A049 2500 /CURSOR POSITION /C045 IFNDEF ITALIAN < VCMED /"DISKETTE" OR "VOLUME" /A049 VCDEV /"DRIVE" OR "DEVICE" /A049 > CPYDRV /DRIVE NUMBER TO BE DISPLAYED /A042 JMS SETMS1 /SET UP "WHEN READY .... PROMPT /A049 CPYMS5 /PRINT "THIS !S WILL BE OVERWRITTEN" /A049 VCMED /"DISKETTE" OR "VOLUME" /A049 NOP /NULL ARGUMENT /A049 JMS CHKINS /GO SEE IF THERE'S A DISKETTE MOUNTED /A054 CHKINS, XX /HERE TO CHECK FOR PRESENCE OF DISKETTE?????? /M054 JMS SWPDRV /GET THE COPY TO DRIVE INTO (DRIVE) /A052 CDFBUF /POINT AT THE BUFFER DATA FIELD /A054 JMS I IQURX /DO A GET DENSITY /A052 RXEDN+4000 /A052 0 /A052 VBLKBF /A052 JMP VUNAC /ERROR RETURN, GO REPORT TO USER /A054 JMP CHKIOK /ELSE OK, PRESS ON /A054 VUNAC, JMS I IOASET /CALL IOACAL /A054 -4 /NUMBER OF ARGUMENTS TO PASS /A054 CPYMS8 /"UNABLE TO ACCESS ^S IN !D /A054 1505 /A054 ISDRVE /"DRIVE" /A054 CPYDRV /DRIVE NUMBER /A054 JMS I IOASET /CALL IOACAL /A054 -6 /NUMBER OF ARGUMENTS TO PASS /A054 CPYMS9 /"CHECK THAT THE ^S EXISTS," /A054 1705 /AND A ^S IS PROPERLY INSERTED.^P^S" /A054 ISDRVE /"DRIVE" ADDRESS /A054 ISDSKT /"DISKETTE" ADDRESS /A054 2705 / /A054 TRYAGN /" TRY AGAIN." /A054 JMP REASK /GO LET 'EM TRY AGAIN /A054 /FROM INSIDE ASKNBR /A054 CHKIOK, JMS GDENS /GO GET ITS DENSITY /M054 MQL /SAVE DESTINATION DENSITY IN MQ /A042 MQA /AND COPY IT BACK TO AC /A042 CIA /NEGATE IT /M054 TAD DENFLG /COMPARE TO THE 'VERIFY' DEVICE DENSITY /M054 SNA CLA /OK WHEN DENSITIES ARE EQUAL /A042 JMP SETDR0 /IF OK, RETURN /A042 MQA /ELSE TEST FOR LEGAL COMBINATION /A042 TAD DENFLG /OF UNEQUAL DENSITY CODES /A042 TAD (-5 /COMBINATIONS OF 5 & UP ARE OK /A042 SMA CLA /SO ON LESS THAN 5 INFORM USER /A054 JMP SETDR0 /GOOD RESULT, SO GO DETERMINE DEVICE 0 /A054 JMS SETMS1 /SET UP 'WHEN READY....PROMPT /A054 CRSHM2 /'DENSITIES OF BOTH ^S MUST BE EQUAL.^S'/A054 ISDSKT /'DISKETTE' /A054 TRYAGN /' TRY AGAIN' /A054 JMP REASK /INVITE RETRY /A054 SETDR0, TAD CPYDRV /GET THE "COPY TO" DRIVE NUMBER /A048 SNA CLA /IF ITS NOT 0, MAKE CPDRV0 A 0 /A048 AC0001 /ELSE MAKE IT A 1 /A048 DCA CPDRV0 /STORE FOR LATER TEST IN NODENS /A048 JMS I IOASET /CALL IOACAL /A049 -2 /NUMBER OF ARGUMENTS TO PASS /A049 PSCR /^P!E/..POSITION AND ERASE TO EOS /A049 2000 /FROM THE START OF LINE 20 /A049 JMP ASKXIT /RETURN TO MAIN LINE IN ASKNBR /A054 ERMSG, XX /NOTIFY USER OF ERRORS & PROMPT FOR ACTION /A054 JMS SETMS3 /SET "TO DO THIS --- /C042 VSCRNM /"^P&YOUR !S HAS ERRORS, TO CORRECT /C049 /THEM YOU MUST COPY THE !S. /C049 VMED /"DISKETTE" OR "VOLUME" /A049 VMED /"DISKETTE" OR "VOLUME" /A049 /WAIT FOR RESPONSE /A054 JMS I IOASET /CLEAR THE SCREEN & PUT UP THE HEADER /M054 -4 /NUMBER OF ARGUMENTS TO PASS /A042 VSCRN1 /"VERIFY (ARG) UTILITY" /C042 0 /CURSOR POSITION FOR ERASE /C049 24 /CURSOR POSITION FOR HEADER /C049 VMED /"DISKETTE" OR "VOLUME" /A049 JMP I ERMSG /RETURN /A054 FNC=. /FIRST NON-CODE LOCATION /A042 PAGE COPYFL, XX /COPY FILES FROM SOURCE TO DESTINATION. 1ST LEVEL SUBR. /M056 JMS RECONA /REBUILD THE ALLOCATION BLOCK /C049 JMS RECONH /REBUILD THE HOME BLOCK /C049 JMS ZDATA /CLEAR VBLKBF FOR WRITING ALL 0 TO OUTPUT/A055 DCA SBLKNO /START WITH BLOCK 0 /A055 AC7777 /USE MINUS 1 TO FORCE /A055 DCA AIR13 /THE BLOCK 0 DISPLAY /A055 INOLP, TAD DSKIDX /GET THE MINUS MAX COUNT /A055 TAD SBLKNO /ADD THE CURRENT BLOCK NUMBER /A055 SMA CLA /OK WHILE RESULTS ARE MINUS OR EQUAL /A055 JMP CPINIT /WHEN IT GOES PLUS THE OUTPUT IS ALL 0 /A055 JMS DSPMSG /DISPLAY 'CHECKING BLOCK NUMBER XXX' /A055 TAD SBLKNO /GET BACK THE CURRENT BLOCK /A055 DCA BLKOUT /PASS IT AS THE BLOCK NUMBER /A055 TAD (VBLKBF /GET THE BUFFER ADDRESS TO PASS ALONG /A055 JMS WRITE0 /CALL THE WRITE SUBROUTINE. RET DF=BUF /A055 ISZ SBLKNO /UPDATE THE BLOCK UNDER TEST /A055 JMP INOLP /CONTINUE THE LOOP /A055 CPINIT, AC7777 /USE MINUS 1 /A055 DCA AIR13 /TO FORCE /A055 JMS DSPMSG /TERMINAL COUNT DISPLAY /A055 CDFBUF /WORKING IN THE BUFFER FIELD /A055 TAD (HBLKBF-1 /LOAD START OF HOME BLOCK BUFFER -1 /A055 DCA AIR17 /INTO AIR 17 /A055 TAD (HBBUF2-1 /LOAD START OF 2ND HOME BLOCK BUFFER -1 /A055 DCA AIR16 /INTO AIR 16 /A055 TAD (-377 /LOAD A BLOCK COUNT /A055 DCA T1 /INTO T1 AS THE 'TO GO' COUNT /A055 HBMOV, TAD I AIR17 /GET A HOME BLOCK WORD /A055 DCA I AIR16 /PUT IT IN THE 2ND HOME BLOCK BUFFER /A055 ISZ T1 /REDUCE & TEST THE 'TO GO' COUNT /A055 JMP HBMOV /CONTINUE THE LOOP UNTIL T1 IS ZERO /A055 TAD (HBBUF2+11 /LOAD START -1 /A055 DCA AIR17 /INTO AIR17 /A055 TAD (-310 /LOAD -200 AS THE COUNT TO GO /A055 DCA T1 /IN T1 /A055 ZHLP, DCA I AIR17 /ZERO THE FILE LIST ENTRY IN HBLKBF /A055 ISZ T1 /REDUCE THE COUNT TO GO... /A055 JMP ZHLP /UNTIL 0, CONTINUE TO ZERO THE LIST /A055 JMS SWPDRV /GO MAKE (DRIVE)=(CPYDRV) /A055 /D056 CDFBUF /POINT AT THE BUFFER DATA FIELD /A055 JMS I IQURX /WRITE OUT CLEARED HOME BLOCK /A055 RXEWT+4000+2000 /VERIFY THE WRITE /A055 2 /HOME BLOCK IS TWO /A055 HBLKBF /FROM THE HOME BLOCK BUFFER /A055 JMS BADDSC /ON WRITE ERROR, GO TELL /A055 TAD (ABLKBF+4 /LOAD THE START -1 /A055 DCA AIR17 /INTO AIR17 /A055 TAD ALOCNT /GET THE 2S COMPLEMENT ALLO WORD COUNT /A055 DCA T2 /USE T2 AS THE 'TO GO' COUNT /A055 CDFBUF /GET BACK INTO THE BUFFER FIELD /A055 INALLP, DCA I AIR17 /WRITE EACH ALLO WORD TO 'NONE FREE' /A055 ISZ T2 /DECREMENT & TEST THE COUNT TO GO /A055 JMP INALLP /UNTIL THE COUNT IS DONE, CONTINUE /A055 AC0001 /GET A ONE /A055 DCA I (ABLKBF+3 /SET THE FREE BLOCK COUNT TO ONE /A055 JMS I IQURX /WRITE OUT FILLED ALLOCATION BLOCK /A055 RXEWT+4000+2000 /VERIFY THE WRITE /A055 377 /ALLOCATION BLOCK IS 255 /A055 ABLKBF /FROM THE ALLOCATION BLOCK BUFFER /A055 JMS BADDSC /WRITE ERROR? /A055 JMS RECONH /REBUILD HOME AGAIN FOR COPYING /A055 TAD (HBLKBF+11) /SET UP POINTERS DCA HOMPTR /(HOMPTR)=HBLKBF+11 /M054 TAD (-310) DCA HOMCNT /(HOMCNT)=-310 /M054 DCA FILENO /(FILENO)=0 /M054 DCA FILCNT /(FILCNT)=0 /A054 DCA BLKOUT /(BLKOUT)=0 /A055 CPYIFN, /LOOP POINT FOR CPYEND. /M056 ISZ FILENO /COUNT IT ISZ HOMPTR /& POINT TO IT TAD BLKOUT /GET THE CURRENT OUTPUT BLOCK NUMBER /A056 DCA SAVBLK /SAVE IT FOR POSSIBLE RESTORATION /A056 /D056 JMS CKFBAD /IF MARKED BAD IN DOCLST, GO TO CPYEND /A055 /D056CKFBAD, XX /PART OF CPYIFN - NOT ENOUGH ROOM THERE RIGHT NOW /A055 JMS DOCGET /(AC)=(F4+DOCLST+(FILENO)) /A055 AND (4000 /SEE IF THIS FILE IS NOT TO BE COPIED /C056 /D056 SNA CLA /IF SO, DON'T COPY IT /M056 /D056 JMP I CKFBAD /ELSE RETURN FOR FURTHER CHECKS /A055 /D056 CDFBUF /GET BACK TO THE BUFFER FIELD /A055 /D056 DCA I HOMPTR /CLEAR THE HOME BLOCK FILE ENTRY /A055 /D056 JMP CPYEND /GO CHECK FOR MORE FILES /A055 SZA CLA /IF NOT MARKED, PRESS ON /A056 JMP CPYEX4 /ELSE, CLEAR FROM LIST, SKIP COPY /A056 CDFBUF TAD (HDR1BF-1) /CLEAR THE HEADER AREA DCA AIR17 /STARTING AT HDR1BF /M054 AC2000 /CLEAR ALL 4 HEADER BUFFERS /A055 JMS I IZERO /GO CLEAR (AC) WORDS @ +((AIR17)) IN DF SET/M054 /D056 DCA FLAG /CLEAR THE READ INHIBIT FLAG /M054 TAD I HOMPTR /GET THIS FILE'S HEADER BLOCK NUMBER /M054 SNA /IF THE NUMBER IS ZERO /M054 JMP CPYEND /GO CHECK FOR DONE /M054 /PROVE BLOCK TO BE PROPER HEADER BEFORE COPYING. DCA SBLKNO /THIS FILE'S HEADER BLOCK # IS THE OFFSET/M054 TAD (1000) /TEST FOR HEADER FLAG IN THE TYPE LIST /M054 JMS TEST2 /RETURN (AC)=1000 AND (TYPLST+(SBLKNO)). DF=LST SNA CLA /LOOKING FOR THE HEADER FLAG IN THE /M054 /TYPE LIST STATUS WORD /A054 JMP RHD2 /NOT HEADER, SO DELETE IT /M054 TAD P377 /IS HEADER, SO GET FILE NUMBER MASK /C054 JMS TEST2 /GET THE FILE # IN THE TYPE LIST /M054 CIA /COMPARE IT TO /M054 TAD FILENO /THE CURRENT HOME FILE # /M054 SNA CLA JMP RHD1 /EXIT RHD2, AC2000 /MARK AS UNREADABLE IN THE BLOCK LIST /M054 JMS IORBLK /STATUS WORD, FORCES DELETE LATER /M054 RHD1, TAD SBLKNO /RESTORE ENTRY ACC (REQUIRED) JMP CPY1 /CONTINUE ON NEXT PAGE /A055 FNC=. /FIRST NON-CODE LOCATION /A042 PAGE CPY1, JMS CHKHDR /VERIFY IT IN TYPE & BLOCK LISTS. RET DF=BUF TAD (HDR1BF) JMS READIN /READ IN HDR1. RET DF=BUF /M054 AC0001 /MASK FOR BIT 11 TO CHECK FOR /M054 AND I (HDR1BF+1) /PRESENCE OF RAPID PAGINATION /M054 SNA CLA /NO RP IF 0 /A039 DCA I (HDR1BF+53) /CLEAR THE RP POINTER TO INDICATE NOT PRESENT JMS CPYRPB /GO COPY GO TO PAGE BLOCKS IF PRESENT /M054 TAD I (HDR1BF+2 /GET THE BLOCK NUMBER OF THE FIRST /M054 /HEADER EXTENSION BLOCK /A054 SNA JMP CPYEX3 /IF 0 PASS TO NEXT PHASE JMS CHKHDR /VERIFY IT IN TYPE & BLOCK LISTS. RET DF=BUF TAD (HDR2BF) JMS READIN /READ IN THE FIRST HEADER EXTENSION BLOCK./M054 TAD I (HDR1BF+3 /GET THE BLOCK NUMBER OF THE SECOND EXTENSION. SNA /NONE PRESENT IF THE NUMBER IS ZERO /M054 JMP CPYEX3 /PASS IF 0 JMS CHKHDR /VERIFY IT IN TYPE & BLOCK LISTS. RET DF=BUF TAD (HDR3BF) / JMS READIN /READ IN THE SECOND HEADER EXTENSION BLOCK./M054 CPYEX3, AC7776 /A024 DCA EXTFLG /FIX SO EXT BLOCK #2 IS SHORTER /A024 TAD (HDR1BF+55) /POINT TO THE NUMBER OF THE FIRST DATA BLOCK DCA HDRPTR TAD (55-400) /# OF POINTERS IN FIRST BLOCK DCA T2 /USE T2 AS THE "POINTERS TO GO" COUNTER /M054 AC7775 /NUMBER OF HEADERS /A054 DCA T1 /T1 COUNTS HEADERS TO GO /M054 DCA DBLKCT /CLEAR THE DATA BLOCK COUNT FOR THIS FILE/A055 CPYHDL, CDFBUF /HEADER LOOP TO FIND ALL DATA BLOCKS TAD I HDRPTR /GET NEXT DATA BLOCK SNA JMP CPYHDN /IF 0 THE FILE IS DONE DCA SBLKNO TAD SBLKNO DCA BLKIN /SET THE INPUT ADDR AC2000 /SET A MASK TO CHECK READABILITY /A054 JMS TEST1 /PER THE BLOCK LIST STATUS WORD? RET DF=LST/M054 SZA CLA JMP CPYEX4 /IF 0 THEN OK TAD (5400) /SEE IF MARKED BAD, HEADER, OR GO-TO-PAGE./M056 JMS TEST2 /IN THE TYPE LIST STATUS WORD. RET DF=LST./M054 SNA CLA JMP CPYEX5 /IF 0 ITS OK AC7777 /ELSE, ITS ILLEGAL. SO, CLEAR ALL FLAGS /M054 JMS CLR1 /FROM THE BLOCK LIST STATUS WORD. RET DF=LST CPYEX4,/D056 ISZ FLAG /ELSE BAD, INHIBIT READ /D056 JMP CPYEX6 CPYEX6, TAD SAVBLK /GET THE SAVED BLKOUT VALUE /A056 DCA BLKOUT /RESTORE IT FOR THE NEXT FILE /A056 AC4000 /SET THE NOT COPIED BIT /C056 JMS DOCSET /IN THIS FILE'S DOCLST ENTRY /A055 CDFBUF /A055 DCA I HOMPTR /CLEAR THE HOME BLOCK ENTRY /A055 JMP CPYEND /GO LOOP OR TERMINATE /A055 CPYEX5, TAD (400) /IS IT MULTI USED JMS TEST1 /PER THE BLOCK LIST? RET DF=LST /M054 /D056 SNA CLA /D056 JMP CPYEX8 /NOT MULTI, SO PRESS ON /M054 SZA CLA /OK IF NOT MULTI /A056 JMP CPYEX4 /ON MULTI, GO REWIND AND DELETE /A056 /D056CPYEX8, AC4000 /PASS THE "FREE" FLAG TO CLR1 /M054 /D056 JMS CLR1 /CLEAR IT FROM THE BLOCK LIST STATUS WORD. DF=LST /D056 TAD FLAG /IS READ SUPRESSED? /D056 SNA CLA /IF <>0 THEN READ IS SUPPRESSED, SKIP /A054 CPYEX8, TAD (VBLKBF /PASS THE BUFFER ADDRESS TO READIN /A056 JMS READIN /ELSE, READ THE CURRENT BLOCK TO VBLKBF. RET DF=BUF JMS NXTOUT /GET THE NEXT AVAILABLE BLKOUT /A055 TAD (VBLKBF) JMS WRITE0 /PUT IT OUT. RET DF=BUF. /M054 TAD BLKOUT /GET THE BLOCK # WE JUST WROTE OUT /A055 DCA I HDRPTR /PUT IT IN THIS HEADER'S BLOCK LIST /A055 ISZ DBLKCT /INCREMENT THE DATA BLOCK COUNT /A055 ISZ HDRPTR /STEP TO NEXT DATA BLOCK IN HDR /M055 ISZ T2 JMP CPYHDL /LOOP TILL END OF BLOCK ISZ XTNFLG /CHECK FOR EXT HDR MODE /A024 SKP JMP CPYEXT ISZ HDRPTR /END OF BLOCK, STEP OVER OVERHEAD WORDS ISZ HDRPTR /A021 ISZ EXTFLG /2ND EXT BLOCK IS SHORTER DUE TO EXTRA HDR EXT PTRS /A024 SKP /A024 TAD (16 /A024 TAD (-376) DCA T2 /BLOCK POINTER COUNT RESET ISZ T1 JMP CPYHDL /LOOP TILL END OF HDRS /HERE ONLY IF NO TERMINATER IN HDR /WHICH MEANS LOOK FOR EXT HDR BLOCK /A024 JMP CP14EX /GO CHECK EXTENSION HEADERS.. NEXT PAGE /A055 FNC=. /FIRST NON-CODE LOCATION /A042 PAGE /THIS SECTION MAKES USE OF THE 14 EXT HDR BLOCK PTRS AT END OF EXT BLOCK #2 CP14EX, AC7776 TAD HDRPTR DCA EXTPTR JMP CPYXTN /DON'T WRITE YET! THIS IS FIRST EXT BLOCK CPYEXT, JMS HDRWRT /WRITE OUT LAST HEADER BLOCK. RET DF=BUF/M056 CPYXTN,/D056 CDFBUF /READ NEXT EXT BLOCK POINTER TAD I EXTPTR /READ NEXT EXT BLOCK POINTER. /M056 /D056 CDFMYF SNA /LOOK FOR TERMINATOR JMP CPYHDN /ALL DONE! NO MORE HDR BLOCKS DCA BLKIN TAD (HDR4BF /READ NEXT EXT HDR BLOCK INTO CORE JMS READIN /AT HDR4BF. RET DF=BUF /M054 TAD (HDR4BF+2 DCA HDRPTR TAD (-376 DCA T2 AC7777 DCA XTNFLG JMP CPYHDL CPYHDN, ISZ XTNFLG /IF WE ARE IN EXT HDR MODE... SKP JMS HDRWRT /WRITE OUT LAST HDR EXT BLOCK. RET DF=BUF/M056 CLA CLL DCA XTNFLG /CLEAR EXT HDR BLOCK MODE /M054 /D056 CDFBUF TAD I (HDR1BF+2 /SEE IF THERE WAS A 2ND HEADER /M056 SNA /IF NOT /M056 JMP CPWHD1 /GO WRITE OUT THE FIRST HEADER & REPORT /A055 JMS NXTOUT /GET THE NEXT AVAILABLE BLKOUT /A055 TAD BLKOUT /GET THAT BLOCK NUMBER /A056 DCA I (HDR1BF+2 /PUT IT IN THE MAIN HEADER /A056 TAD (HDR2BF) /POINT AT THE BUFFER WITH THE 2ND HEADER/M056 JMS WRITE0 /WRITE OUT THE 2ND HEADER RETURN DF=BUF /M056 TAD I (HDR1BF+3 /SEE IF THERE WAS A 3RD HEADER /M056 SNA /IF NOT /M056 JMP CPWHD1 /GO WRITE OUT THE FIRST HEADER & REPORT /A055 JMS NXTOUT /GET THE NEXT AVAILABLE BLKOUT /A055 TAD BLKOUT /GET THAT BLOCK NUMBER /A056 DCA I (HDR1BF+3 /PUT IT IN THE MAIN HEADER /A056 TAD (HDR3BF) /POINT AT THE BUFFER WITH THE 3RD HEADER/M056 JMS WRITE0 /WRITE IT OUT. RET DF=BUF /M056 CPWHD1, TAD DBLKCT /GET THE COUNT OF DATA BLOCKS /A055 DCA I (HDR1BF+5 /PUT IT IN THE HEADER BLOCK BUFFER /A055 JMS NXTOUT /GET THE NEXT AVAILABLE BLKOUT /A055 TAD (HDR1BF) JMS WRITE0 /WRITE IT OUT. RET DF=BUF /M056 TAD (HBBUF2+11 /GET THE ADDRESS OF THE FILE LIST IN BUF 2 TAD FILENO /ADD THE CURRENT FILE NUMBER /A055 DCA T3 /USE T3 AS THE INDIRECT POINTER /A055 TAD BLKOUT /GET THE HEADER BLOCK NUMBER /A055 DCA I T3 /PUT IT IN THE HOME BLOCK BUF 2 FILE LIST/A055 TAD BLKOUT /GET THE CURRENT OUTPUT BLOCK NUMBER /A055 DCA T3 /SAVE IT IN T3 FOR RESTORATION /A055 AC0002 /GET A 2 FOR THE RUNNING HOME OUTPUT /A055 DCA BLKOUT /THAT'S THE OUTPUT BLOCK NUMBER /A055 TAD (HBBUF2 /GET THE ADDRESS OF THE OUTPUT BUFFER /A055 JMS WRITE0 /WRITE OUT THE CURRENT HOME BLOCK.RET DF=BUF TAD T3 /GET BACK THE RUNNING OUTPUT BLOCK # /A055 DCA BLKOUT /RESTORE BLKOUT FOR FURTHER USE /A055 ISZ FILCNT /COUNT FILES COPYIED TAD FILCNT DCA BLKNO AC7777 /FORCE DISPLAY ON EACH CALL WITH -1 /M054 DCA AIR13 /IN AIR13 JMS CPYUPD /CALL FOR COPY UPDATE /M054 CPYMSG /"# DOCUMENTS COPIED /M054 CPYEND, ISZ HOMCNT JMP CPYIFN /LOOP TILL ALL FILES POSSIBLE ARE CHECKED JMP CONA /GO CONSTRUCT A NEW ALLOCATION BLOCK /A055 HDRWRT, XX /DF=BUF ON CALL /M055 TAD EXTPTR /WRITE OUT PREVIOUS HDR BLOCK DCA T2 TAD (HDR4BF DCA RPBPTR JMS WRTEXT /WRITE OUT THE EXTENSION. RET DF=BUF /A056 /TD056 CDFLST /POINT AT THE LIST FIELD /A054 /TD056 JMS RPGWRT /TD056 CDFMYF ISZ EXTPTR /BUMP TO NEXT EXT BLOCK JMP I HDRWRT /RETURN TO CALLER. RET DF=BUF /A055 JMP CPYHDN /HERE IF LAST BLOCK EXCEEDED /A055 FNC=. /FIRST NON-CODE LOCATION /A042 PAGE CONA, DCA SBLKNO /START AT THE BEGINNING /A055 CONALP, ISZ SBLKNO /GET THE NEXT BLOCK NUMBER /A055 TAD SBLKNO /GET IT TO COMPARE /A055 TAD DSKIDX /WITH THE MINUS MAX COUNT /A055 SMA SZA CLA /WHEN IT GOES PLUS /A055 JMP SCANDN /THEN THE ENTIRE BLOCK LIST IS DONE /A055 TAD BLKOUT /GET THE HIGHEST BUSY BLOCK /A055 CIA /NEGATE IT FOR COMPARISON /A055 TAD SBLKNO /WITH THE CURRENT BLOCK NUMBER /A055 SMA SZA CLA /WHEN ITS EXCEEDED /A055 JMP CONLPB /GO DO THE 'FREE' BLOCKS /A055 TAD (376 /GET A UNIQUE FILE NUMBER /A055 JMS IORBLK /MARK THE BLOCK LIST ENTRY /A055 JMP CONALP /CONTINUE THE LOOP /A055 CONLPB, AC7777 /SET ALL BITS TO CLEAR THEM /A055 JMS CLR1 /IN THE REMAINING BLOCK LIST ENTRIES /A055 JMP CONALP /CONTINUE THE LOOP /A055 SCANDN, JMS RECONA /REBUILD UPDATED ALLOCATION BLOCK /M054 JMS SWPDRV /GO GET DRIVE NBR WE'RE COPYING TO /A027 JMS ALOWRT /REWRITE NEW ALLOCATION BLOCK /M054 JMP DISTAT /GO DISPLAY STATISTICS & TERMINATE /A055 DISTAT, DCA LINENO /DISPLAY DOCUMENT STATUS TO THE USER /A055 /START WITH 0 AS THE OUTPUT LINE NUMBER /A055 TAD (DOCDL /"!P!EDOCUMENT #'S NOT COPIED:/ /A055 DCA STAHD /PASS IT TO THE STATMS SUBROUTINE /A055 AC4000 /SET THE 'DELETED' FLAG /C056 DCA T3 /PUT IT IN T3 FOR THE SEND NUMBER LOOP /A055 TAD (0033 /GET THE POST HEADER CURSOR POSITION /A055 DCA COLNO /PUT IT IN COLNO FOR POSITIONING /A055 JMS DISPLA /GO DISPLAY ANY & ALL DELETED FILES /A055 JMP COPY6 /GO CHECK SYS DSK & PROMPT FOR GOLD MENU/A055 / DISPLA, XX /SCAN THE DOCUMENT LIST -DOCLST- IN FIELD 4. IF ANY FILE/A055 /HAS THE PATTERN IN T3 SET, SEND THE PASSED HEADER AND ALL/A055 /MATCHING FILES. DCA TCOUNT /TCOUNT IS A FLAG FOR HEADER ENABLING /A055 AC0001 /START THE FILE CHECKING WITH A 1 /A055 DCA FILENO /FOR THE FILE NUMBER /A055 SNDLP, TAD (-311 /THIS IS THE ESCAPE LIMIT /A055 TAD FILENO /IF THE FILE NUMBER /A055 SMA CLA /IS LESS, KEEP CHECKING /A055 JMP I DISPLA /IF EQUAL OR MORE, THEN RETURN /A055 JMS DOCGET /GET THE DOCLST ENTRY FOR THIS FILENO /A055 AND T3 /CHECK AGAINST ANY BIT(S) IN T3 /A055 SNA CLA /IF ANY WAS SET GO SEND HEADER &/ NUMBER/A055 JMP NEXTNO /IF NONE WAS SET, GO TRY THE NEXT FILE# /A055 TAD TCOUNT /GET THE PASS COUNT /A055 SNA CLA /IF IT IS ZERO /A055 JMS STATMS /GO SEND THE HEADER MESSAGE /A055 JMS SNDNUM /SEND THE NUMBER IN ANY CASE /A055 NEXTNO, ISZ FILENO /BUMP TO THE NEXT FILE NUMBER /A055 JMP SNDLP /GO BACK TO THE START OF THE SEND LOOP /A055 SNDNUM, XX /SEND DECIMAL NUMBER WITH SEPARATING COMMA AS REQUIRED. /A054 TAD TCOUNT /GET THE PASS COUNTER /M055 SNA CLA /IF NOT ZERO, THEN SEND A COMMA /M054 JMP DCAPP /IF 1ST TIME NO COMMA JMS I IOASET /CALL IOACAL /A042 -1 /NUMBER OF ARGUMENTS TO PASS /A042 SNDCOM /, /..SEND A COMMA AND A SPACE /C055 ISZ COLNO /ADD THE COMMA TO THE COLUMN COUNT /A055 ISZ COLNO /UP THE COLUMN COUNT FOR THE SPACE /A055 DCAPP, ISZ TCOUNT /UPDATE THE PASS COUNTER /M054 TAD COLNO /CHECK THE COLUMN COUNT /A055 TAD (-77 /FOR 63 - IOA LIMITS THE COLUMN COUNT /A055 SPA CLA /PLUS MEANS 63 OR MORE /A055 JMP CKTC /NOT 63, GO SEND THE NUMBER /A055 TAD LINENO /GET THE CURRENT LINE NUMBER /A055 AND (7700 /MASK OUT THE COLUMN /A055 TAD (0100 /ADD A LINE /A055 DCA LINENO /THATS THE NEW CURSOR POSITION @ COL 0 /A055 DCA COLNO /0 THE COLUMN COUNT FOR THE NEW LINE /A055 CKTC, TAD LINENO /GET THE LAST CURSOR POSITION /A055 AND (7700 /MASK OUT THE COLUMN DATA /A055 TAD COLNO /GET THE NEW COLUMN DATA /A055 DCA LINENO /STORE THE UPDATED CURSOR POSITION /A055 JMS I IOASET /CALL IOACAL /A042 -3 /NUMBER OF ARGUMENTS TO PASS /A042 DECNUM /!P!D/ /C055 LINENO /LINE & COLUMN FOR CURSOR /A055 FILENO /FILENO IS WHERE THE NUMBER IS /A055 ISZ COLNO /UP THE COLUMN COUNT FOR A DIGIT /A055 TAD FILENO /GET THE NUMBER WE JUST DISPLAYED /A055 TAD (-12 /SEE IF IT WAS 10 OR MORE /A055 SMA CLA /IF LESS, SKIP THE INCREMENT /A055 ISZ COLNO /UP THE COLUMN COUNT FOR A DIGIT /A055 TAD FILENO /GET THE NUMBER WE JUST DISPLAYED /A055 TAD (-144 /SEE IF IT WAS 100 OR MORE /A055 SMA CLA /IF LESS, SKIP THE INCREMENT /A055 ISZ COLNO /UP THE COLUMN COUNT FOR A DIGIT /A055 JMP I SNDNUM /RETURN TO CALLER, RET DF=MYF /A055 STATMS, XX /SUBROUTINE TO OUTPUT THE STATUS MESSAGES WHEN THE COPY /A055 /OPERATION IS COMPLETED. PART OF DISTAT /A055 TAD LINENO /GET THE CURRENT LINE NUMBER /A055 AND (7700 /MASK OUT THE COLUMN /A055 TAD (0200 /ADD 2 LINES IN ORDER TO SKIP ONE /A055 DCA LINENO /POSITION AT THE NEW LINE & COLUMN 0 /A055 JMS I IOASET /CALL IOACAL /A055 -2 /WITH LABEL & POSITION ARGUMENTS /A055 STAHD, 0 /LABEL ADDRESS FOR THE STATUS HEADER /A055 LINENO /CURSOR POSITION /A055 JMP I STATMS /RETURN TO CALLER, DF=MYF /A055 FNC=. /FIRST NON-CODE LOCATION /A042 PAGE DOCSET, XX /SET THE ATTRIBUTE PATTERN IN THE AC INTO THE DOCUMENT /A055 /ATTRIBUTE WORD IN FIELD 4 AT DOCLST+(FILENO) /A055 /(F4+DOCLST+(FILENO))=(F4+DOCLST+(FILENO)) IOR (AC) /A055 MQL /SAVE THE BIT(S) TO SET /A055 TAD FILENO /GET THE CURRENT FILE NUMBER /A056 CIA SZA /TEST FOR FILE # 0 /A056 TAD (311 /AND AN UPPER LIMIT OF FILE # 310 /A056 SNA SPA CLA /IF 0 OR >310 /A056 JMP RDOCST /GO BACK WITHOUT MARKING ANYTHING /A056 CDFBUF /GET INTO THE BUFFER FIELD /M056 TAD (DOCLST /GET THE BASE OF THE DOCUMENT LIST /A055 TAD FILENO /ADD THE OFFSET INTO THE LIST /A055 DCA REG10 /USE REG10 AS THE POINTER INTO THE LIST /A055 TAD I REG10 /GET THE CURRENT ATTRIBUTES FOR THE FILE/A055 MQA /IOR THE NEW ATTRIBUTES /A055 DCA I REG10 /WRITE BACK THE UPDATED ATTRIBUTES /A055 CDFMYF /GET BACK TO THIS DATA FIELD /A055 RDOCST, JMP I DOCSET /RETURN TO THE CALLER. /A055 DOCGET, XX /GET THE ATTRIBUTE PATTERN IN FIELD 4 AT DOCLST+(FILENO)/A055 /(AC)=(F4+DOCLST+(FILENO)) /A055 CLA /ENSURE THAT THE AC IS CLEAR /A055 TAD FILENO /GET THE CURRENT FILE NUMBER /A056 CIA SZA /TEST FOR FILE # 0 /A056 TAD (311 /AND AN UPPER LIMIT OF FILE # 310 /A056 SNA SPA CLA /IF 0 OR >310 /A056 JMP RDOCGT /GO BACK WITHOUT GETTING ANYTHING /A056 CDFBUF /THE DATA WE WANT IS IN FIELD 4 /A055 TAD (DOCLST /GET THE BASE OF THE LIST /A055 TAD FILENO /ADD THE OFFSET INTO THE LIST /A055 DCA REG10 /USE REG10 AS THE POINTER INTO THE LIST /A055 TAD I REG10 /GET THE ATTRIBUTES FOR THE DOCUMENT /A055 CDFMYF /RETURN TO THIS DATA FIELD /A055 RDOCGT, JMP I DOCGET /RETURN TO THE CALLER /A055 VECRPB, XX /CHECK GO-TO-PAGE STRUCTURE OF DOCUMENT. PART OF VEHDR/VEFCHK /MARK THE GTP BLOCKS WITH THE CURRENT FILE #. /A056 TAD I (HDR1BF+53 /GET RPG BLOCK # IN AC /A056 DCA RPBNO /PASS THE BLOCK NUMBER TO RXHAN /A056 TAD RPBNO /GET IT BACK TO VALIDATE /A056 JMS CKRPB /VALIDATE THIS BLOCK. RET DF=BUF /A056 JMS I IQURX /CALL RXHAN /A056 RXERD+4000 /READ THE /A056 RPBNO, 0 /BLOCK UNDER TEST /A056 HDR4BF /TO BUFFER HDR4BF /A056 JMS ERRORS /READ ERROR ON THE RPG BLOCK /A056 CDFBUF /GET BACK INTO THE BUFFER FIELD /A056 TAD I (HDR4BF+2 /LOOK FOR EXTENSION BLOCKS /A056 SNA /NON ZERO MEANS THERE IS AT LEAST ONE /A056 JMP CRP3 /NONE FOUND, STOP LOOKING /A056 JMS CKRPB /VALIDATE THIS BLOCK. RET DF=BUF /A056 TAD I (HDR4BF+3 /LOOK FOR A 2ND EXTENSION BLOCK /A056 SNA /NON ZERO MEANS THERE IS ONE /A056 JMP CRP3 /NONE FOUND, SO STOP LOOKING /A056 DCA RPBNN /SAVE THE BLOCK # FOR QURX /A056 TAD RPBNN /GET THE BLOCK # BACK /A056 JMS CKRPB /VALIDATE THIS BLOCK. RET DF=BUF /A056 JMS I IQURX /CALL RXHAN /A056 RXERD+4000 /READ THE /A056 RPBNN, 0 /3RD GTP (2ND EXTENSION) BLOCK /A056 HDR4BF /TO BUFFER HDR4BF /A056 JMS ERRORS /READ ERROR ON THE GTP BLOCK /A056 CDFBUF /GET BACK TO THE BUFFER FIELD /A056 TAD (HDR4BF+361 /LOOK FOR MORE EXTENSIONS DCA AIR10 /USE AIR10 AS THE AUTO INCREMENT POINTER/A056 TAD (-16 /THERE ARE 14 POSSIBLE BLOCK POINTERS /A056 DCA T3 /USE T3 AS THE 'TO-GO' COUNTER /A056 CRP1, TAD I AIR10 /READ THE BLOCK POINTER WORD /A056 SNA /NON ZERO MEANS THERE IS A POINTER /A056 JMP CRP3 /ZERO MEANS THE LIST TERMINATED /A056 JMS CKRPB /VALIDATE THIS BLOCK. RET DF=BUF /A056 ISZ T3 /REDUCE THE 'TO-GO' COUNT /A056 JMP CRP1 /CONTINUE IN LOOP UNTIL DONE OR 0 FOUND /A056 CRP3, CDFBUF /GET BACK TO THE BUFFER FIELD /A056 JMP I VECRPB /RETURN TO VEHDR. /A056 CKRPB, XX /PART OF VECRPB. VALIDATE THE GTP BLOCK UNDER TEST. /A056 /THE GTP BLOCKS ARE MARKED IN TYPLST WITH 0400. /A056 DCA SBLKNO /SAVE THE NUMBER OF THE BLOCK UNDER TEST/A056 TAD SBLKNO /GET IT BACK /A056 TAD DSKIDX /COMPARE IT THE THE LARGEST POSSIBLE # /A056 SMA SZA CLA /OK WHEN LESS OR EQUAL /A056 JMP RPGERR /ELSE, GO REPORT AN ERROR /A056 AC7777 /MASK FOR ALL THE BITS /A056 JMS TEST2 /GET THE TYPLST STATUS WORD. RET DF=LST /A056 CIA /NEGATE IT FOR COMPARISON TO /A056 TAD (0400 /WITH THE GO-TO-PAGE FLAG /A056 SZA CLA /OK IF EQUAL /A056 JMP RPGERR /ON NON EQUALITY, GO REPORT AN ERROR /A056 AC7777 /MASK FOR ALL THE BITS /A056 JMS TEST1 /CHECK THE BLKLST STATUS WORD /A056 SZA CLA /THERE SHOULD BE NO MARKS THERE /A056 JMP RPGERR /ON NON ZERO, GO REPORT AN ERROR /A056 TAD FILENO /GET THE CURRENT FILE NUMBER /A056 JMS IORBLK /MARK THE BLKLST STATUS WD WITH FILE # /A056 TAD FILENO /GET THE CURRENT FILE NUMBER /A056 JMS IORTYP /MARK THE TYPLST STATUS WD WITH FILE # /A056 CDFBUF /GET BACK TO THE BUFFER FIELD /A056 JMP I CKRPB /IT WAS EQUAL, RETURN /A056 RPGERR, JMS ERRORS /REPORT THAT AN ERROR WAS DETECTED /A056 JMP CRP3 /TERMINATE THE GO-TO-PAGE CHECKS /A056 /D056VECRPB, XX /CHECK GO-TO-PAGE STRUCTURE OF DOCUMENT. PART OF VEHDR /M054 /D056 CDFBUF /A025 /D056 TAD I (HDR1BF+53 /GET RPG BLOCK # IN AC /A025 /D056 DCA RPBNO /D056 TAD RPBNO /D056 TAD DSKIDX /CHECK BLOCK # FOR OUT OF BOUNDS /D056 SMA SZA CLA /D056 JMS RPGERR /D056 TAD RPBNO /D056 JMS FILMRK /MARK FILE # IN BLKLST /D056 JMS I IQURX /NOW READ THE RPG BLOCK /D056 RXERD+4000 /D056RPBNO, 0 /D056 HDR4BF /D056 JMS RPGERR /READ ERROR ON RPG BLOCK /D056 JMS RPGTYP /OK RETURN, CHECK FOR TYPE=RPG /C050 /D056 CDFBUF /D056 TAD I (HDR4BF+2 /LOOK FOR EXTENSION BLOCKS /D056 SNA /D056 JMP CRP2 /NONE FOUND, STOP LOOKING /D056 JMS FILMRK /D056 TAD I (HDR4BF+3 /D056 SNA /D056 JMP CRP2 /NONE FOUND, SO STOP LOOKING /D056 DCA RPBNN /D056 TAD RPBNN /D056 JMS FILMRK /D056 JMS I IQURX /READ 2ND EXT BLOCK INTO CORE /D056 RXERD+4000 /D056RPBNN, 0 /D056 HDR4BF /D056 JMS RPGERR /READ ERROR ON BLOCK /D056 JMS RPGTYP /OK RETURN, CHECK FOR TYPE=RPG /C050 /D056 TAD (HDR4BF+361 /LOOK FOR MORE EXTENSIONS /D056 DCA X0 /D056 TAD (-16 /D056 DCA T3 /D056CRP1, TAD I X0 /D056 SNA /D056 JMP CRP2 /DONE IF ANY PTR = 0 /D056 DCA T1 /D056 TAD T1 /D056 TAD DSKIDX /D056 SMA SZA CLA /D056 JMS RPGERR /THIS BLOCK # OUT OF RANGE /D056 JMS RPGTYP /CHECK FOR TYPE=RPG /A056 /D056 TAD T1 /D056 JMS FILMRK /D056 ISZ T3 /D056 JMP CRP1 /CONTINUE IN LOOP UNTIL DONE OR 0 FOUND /D056CRP2, ISZ VECRPB /NORMAL RETURN IS TO CALL+2 /M054 /D056CRP3, CDFMYF /D056 JMP I VECRPB /D056 /D056RPGERR, XX /ALL RAPID PAGINATION STRUCTURE ERRORS LAND YOU HERE! /D056 JMP CRP3 /RESTORE THE DATA FIELD & GO /A054 /D056RPGTYP, XX /MAKE SURE THIS BLOCK IS A GO-TO-PAGE BLOCK /A019 /D056 CDFBUF /D056 TAD I (HDR4BF+1 /D056 AND (70 /D056 TAD (-70 /D056 SZA CLA /D056 JMS RPGERR /IT WASN'T AN RPG BLOCK TYPE /D056 JMP I RPGTYP /D056/ /D056FILMRK, XX /MARK FILE # IN BLKLST FOR THIS BLOCK. PART OF VECRPB /M056 /D056 TAD (BLKLST /D056 DCA T1 /D056 TAD FILENO /D056 CDFLST /POINT AT THE LIST FIELD /A054 /D056 /D056 TAD I T1 /LOOK FOR A PRIOR /A056 /D056 AND P377 /FILE # ENTRY /A056 /D056 SZA CLA /OK IF NONE THERE /A056 /D056 JMS RPGERR /IF THERE WAS ONE, TAKE THE ERROR PATH /A056 /D056 TAD FILENO /MARK THE BLKLST SW WITH THIS FILE # /A056 /D056 /D056 DCA I T1 /D056 CDFBUF /POINT AT THE BUFFER DATA FIELD /A054 /D056 JMP I FILMRK /D056 WRTEXT, XX /WRITE OUT AN EXTENSION BLOCK. PART OF COPYFL /M056 /CALLED FROM HDRWRT AND CPYRPB. /A056 JMS NXTOUT /GET THE NEXT AVAILABLE BLKOUT /A055 TAD BLKOUT /GET IT TO THE AC /A055 DCA I T2 /PUT IT IN THE EXTENSION BLOCK LIST /M056 TAD RPBPTR /GET BUFFER ADDRESS JMS WRITE0 /WRITE OUT THE BLOCK. RET DF=BUF /M056 JMP I WRTEXT /M056 FNC=. /FIRST NON-CODE LOCATION /A042 PAGE CHKHDR, XX /CHECK HDR OR EXT FOR STRUCTURE FAILURES. PART OF COPYFL/M054 DCA SBLKNO /SET THE BLOCK NUMBER TO TEST /M054 AC2000 /CHECK FOR THE UNREADABLE FLAG /M054 JMS TEST1 /IN THE BLOCK LIST STATUS WORD. RET DF=LST/M054 SZA CLA JMP CPYEX4 /GO MARK THE FILE, CLEAR FROM LIST, SKIP COPY/A056 /D056 JMP CPYFLD /IF 1 DELETE THIS FILE TAD (4400) /CHECK FOR "BAD" & "SYSTEM" FLAGS /M054 JMS TEST2 /IN THE TYPE LIST STATUS WORD. RET DF=LST/M054 SZA CLA JMP CPYEX4 /GO MARK THE FILE, CLEAR FROM LIST, SKIP COPY/A056 /D056 JMP CPYFLD TAD P377 /GET FILE # MASK /M054 JMS TEST1 /GET THE FILE # FROM THE BLOCK LIST STATUS WORD TAD (-377) /IS IT SYSTEM BLOCK? SNA CLA JMP CPYEX4 /GO MARK THE FILE, CLEAR FROM LIST, SKIP COPY/A056 /D056 JMP CPYFLD /IF SO, DELETE FILENO /M054 TAD SBLKNO /ELSE USE THE BLOCK NUMBER UNDER TEST /M054 DCA BLKIN /AS THE BLOCK NUMBER TO READ IN /M054 JMP I CHKHDR /RET DF=LST /M054 /D056CPYFLD, /XX /DELETES FILE DURING COPY. PART OF COPYFL. /M054 /D056 AC2000 /SET THE 'DELETED' BIT /A055 /D056 JMS DOCSET /IN THIS FILE'S ENTRY IN DOCLST. RET DF=MYF/A055 /D056 CDFBUF /POINT AT THE BUFFER DATA FIELD /A054 /D056 DCA I HOMPTR /ZERO THE HOME BLOCK ENTRY FOR THIS FILE #/M055 /D056 JMP CPYEND /TERMINATE THIS FILE ZERO, XX /FIELD=BUF, (AC)=WORD COUNT, AIR17=ADDRESS-1 /C050 CIA /AC=-WC NOW DCA REG10 ZEROLP, DCA I AIR17 /ZERO THIS SPACE /M043 ISZ REG10 JMP ZEROLP /C042 JMP I ZERO /EXIT NODENS, XX /THIS SUBROUTINE HANDLES A "NOT READY" RESPONSE FROM A /M054 /DRIVE OR WINNY, SOURCE OR DESTINATION. /A049 CDFMYF TAD DRIVE /ARE WE LOOKING AT DRIVE 0? /A053 SZA CLA /SKIP IF YES /A053 JMP NOT0 /GO FIND TYPE IF NOT /A053 TAD SVDRV /WAS THE VERIFY DRIVE 0? /A053 SNA CLA /SKIP IF IT WASN'T, CLA ANYWAY /A053 JMP I NODENS /ELSE, RETURN TO CALLER - NO MSG HERE /A048 TAD CPDRV0 /=1 WHEN "COPY TO" DRIVE WAS 0 /A048 SZA CLA /IF IT WAS DRIVE 0, /A048 JMP I NODENS /THEN RETURN TO CALLER - NO MSG HERE /A048 NOT0, /D055 JMS CLRLNS /GO CLEAR THE LINES FROM THE SCREEEN /C053 TAD DRIVE /GET THE NUMBER TO /A045 JMS RESDEV /GO FIND THE TYPE /A045 JMP GONOD /IS DRIVE TYPE, INSERT DRIVE ARGS /A045 TAD (ISDEV /GET "DEVICE" ADDRESS /A045 DCA CP8B /INSERT IT IN THE MESSAGE /A045 JMP GONODI /GO ISSUE THE VOL/DEV MESSAGE /A049 GONOD, TAD (ISDRVE /GET "DRIVE" ADDRESS /C049 DCA CP8B /INSERT IT IN THE MESSAGE /C049 GONODI, JMS I IOASET /CALL IOACAL /C049 -4 /NUMBER OF ARGUMENTS TO PASS /C052 CPYMS8 /"UNABLE TO ACCESS ^S IN !D /M054 1505 CP8B, 0 /"DRIVE" OR "DEVICE" /C049 DRIVE /DRIVE NUMBER /A027 TAD DRIVE /GET THE NUMBER /A047 JMS RESDEV /FIND OUT WHAT IT IS /A047 JMP NODSKT /NO DISKETTE, GO PROMPT FOR ONE /A047 JMS SETMS2 /NO VOLUME, SEND HER TO MAIN MENU /A047 IOATSP /^P /A054 NOP /NO OP AS NULL ARG /A054 NOP /NO OP AS NULL ARG /A054 JMP I NODENS /RETURN TO CALLER /C054 NODSKT, JMS I IOASET /CALL IOACAL /A042 -6 /NUMBER OF ARGUMENTS TO PASS /C042 CPYMS9 /"CHECK THAT THE ^S EXISTS," /C054 1705 /AND A ^S IS PROPERLY INSERTED.^P^S" /M054 ISDRVE /"DRIVE" ADDRESS /C049 ISDSKT /"DISKETTE" ADDRESS /A052 2700 /NEED A POSITION FOR CPYMS9 /A054 VSNULL /NO FURTHER TEXT HERE /A054 JMS SETMS1 /SET UP THE "WHEN READY ... " PROMPT /A047 IOATSP /^P /C049 NOP /NO OP AS NULL ARG /A047 NOP /NO OP AS NULL ARG /A047 JMP I NODENS /RETURN TO CALLER /A047 HLTCHK, XX /IF HALT TRUE THEN RETURN TO CALL+2, ELSE RETURN TO /M054 CLA /CALL +1. UTILITY SUBROUTINE. /M054 CDFSYS /A027 TAD I HLTFLG /GET THE HALT FLAG /A027 CDFMYF /A027 SNA CLA /IF ZERO, FLAG HASN'T BEEN SET /A027 ISZ HLTCHK /BUMP UP RETURN ADDR IF SET /A027 JMP I HLTCHK /A027 /***********************************************************************/A027 / /A027 / THIS CODE WILL ADD -26 TO THE AC IF WE'RE DOING RX50 DRIVES /A027 / TO ENABLE US TO DISPLAY AND READ ALL THE BLOCKS ON THE /A027 / DISKETTE. (INCLUDING THE FIRMAWARE BLOCKS) /A027 / /A027 /***********************************************************************/A027 VCHRX5, XX /A027 AC7776 /CHECK TO SEE IF WE ARE DOING RX50 DRIVES/A027 TAD DENFLG /GET THE DENSITY FLAG=2 IF RX50'S /A027 SPA CLA /SKIP IF RX50 SIZE /A042 JMP I VCHRX5 /A027 TAD SYSDSK /GET THE SYSTEM FLAG. 1=SYSTEM /M054 SZA CLA /IF ZERO HERE, ITS NOT SYSTEM /M054 JMP DOSYST /GO SET UP FOR SYSTEM DISKETTE /A027 TAD DSKSIZ /GET SIZE OF DISK /A027 TAD (-6) /TAKE AWAY 6 BLOCKS FROM IT /A027 DCA DSKSIZ /STORE SIZE OF DISKETTE /A027 JMP ADJIDX /GO ADJUST THE IMAGE INDEX /A055 DOSYST, TAD DSKSIZ /GET SIZE OF DISKETTE /A027 TAD (-26) /TAKE AWAY -26 (OCTAL) /A027 DCA DSKSIZ /STORE IT FOR FUTURE USE /A027 ADJIDX, TAD DSKSIZ /GET SIZE AGAIN /A027 CIA /MAKE IT NEGATIVE /A027 DCA DSKIDX /STORE FOR FUTURE USE /A027 JMP I VCHRX5 /RETURN /A027 FNC=. /FIRST NON-CODE LOCATION /A049 PAGE /A049 COPY6, /IF DRIVE 0 WAS VERIFIED OR COPIED TO, THEN ASK FOR THE SYSTEM /A054 /DISKETTE IN DRIVE 0; PROMPT FOR GOLD MENU. /A054 TAD MAXDEV /FIND THE HIGHEST DEVICE # /A054 TAD (-10 /SEE IF ITS MORE THAN 7 /A054 SMA CLA /IF SO, THE SYSTEM IS ON DEVICE 0 /A054 JMP COPY8 /SO JUST ASK FOR GOLD MENU /A054 TAD CPDRV0 /SEE IF WE COPIED TO D0 /A054 SNA CLA /IF SO, FORCE THE D0 PROMPT /A054 TAD SVDRV /SEE IF WE VERIFIED DRIVE 0 /A053 SZA CLA /SKIP IF WE DID, ELSE /A053 JMP COPY8 /IF NOT, GO DISP WITHOUT ASKING FOR SYS DSK /A027 COPY6L, JMS SETMS2 /SET UP FOR GM ONLY /C054 CPYMS6 /Replace the system ^S in ^S 0 etc /C049 ISDSKT /"DISKETTE" /A045 ISDRVE /"DRIVE" /C049 JMP COPY6L /USER HIT RETURN, GO REDISPLAY MESS /C042 COPY8, JMS SETMS2 /DISP JUST GOLD MENU /C054 PSCR /^P!E/..POSITION AND ERASE TO EOS /C049 NOP /NO OP AS NULL ARGUMENT /A045 NOP /NO OP AS NULL ARGUMENT /A045 JMP COPY8 /USER HIT RETURN, GO REDISPLAY MESS /C032 INITF5, XX /UTILITY ROUTINE. COPIES 30000-30177 TO 50000-50177 /M054 CLA /ASSURE A CLEAN AC /A054 TAD (-200 /A054 DCA T1 /A039 DCA T2 /A039 IF5A, TAD I T2 /A039 CDFLP /FIELD 5 /A039 DCA I T2 /A039 CDFMYF /A039 ISZ T2 /A039 ISZ T1 /A039 JMP IF5A /A039 JMP I INITF5 /A039 /IOAOUT - GLOBAL SUBROUTINE. LOADS THE CALLING ROUTINE'S ARGUMENTS INTO /A042 / THE IOACAL CALLING ROUTINE IN FIELD 5. THEN EXECUTES THE CALL /A042 / TO IOACAL IN FIELD FIVE AND RETURNS. THE FIRST ARGUMENT TO /A042 / IOAOUT IS THE NEGATIVE NUMBER OF SUCCEEDING ARGUMENTS. A MAXI- /A042 / MUM OF SEVEN ARGUMENTS MAY BE PASSED. AN EXAMPLE CALL: /A042 / /A042 / JMS IOAOUT /SEND A MESSAGE /A042 / -3 /THREE ARGUMENTS TO BE PASSED /A042 / MSGLAB /THE LABEL OF THE MESSAGE (IN FIELD 5) /A042 / ARG /ARGUMENT OR LABEL (IN FIELD 5) /A042 / ARG /ARGUMENT OR LABEL (IN FIELD 5) /A042 / CODE /THE RETURN POINT /A042 / /A042 /NOTE FOR NATURAL LANGUAGE OR OTHERS WHO MAY "IFDEF" PARTS OF THE /A045 /MESSAGE CALLS: IF THE NUMBER OF ARGUMENTS WILL CHANGE AS A RESULT /A045 /OF THE DEFINITION, THE -N ARGUMENT WILL HAVE TO BE INCLUDED IN THE /A045 /"IFDEF" /A045 / IOAOUT, XX /A042 JMS INITF5 /UPDATE THE ZERO PAGE /A042 CDFLP /POINT TO FIELD 5 /A042 DCA IOAARG /SET TO 0. 0=OUTPUT COMMAND /A042 CDFMYF /POINT BACK TO FIELD 3 /A042 TAD I IOAOUT /GET THE MINUS NUMBER OF CALLER ARGS /A042 DCA REG10 /REG10 HAS THE COUNT OF ARGS TO PASS /A042 TAD (-10 /GET 1 MORE THAN THE MAX ARGS /A042 DCA REG11 /REG11 IS THE TOTAL "TO GO" COUNTER /A042 TAD (IOAARG /GET THE ARGUMENT LIST MINUS 1 /A042 DCA AIR17 /AIR17 WILL AUTO-INDEX THE LIST /M043 IOALLP, ISZ IOAOUT /POINT AT THE ARGUMENT /A042 TAD I IOAOUT /GET IT TO THE ACCUMULATOR /A042 CDFLP /POINT TO FIELD 5 /A042 DCA I AIR17 /PUT THE ARGUMENT INTO THE LIST /M043 CDFMYF /COME BACK TO FIELD 3 /A042 ISZ REG11 /REDUCE THE "TO GO" COUNT. /A042 ISZ REG10 /UNTIL THE ARGUMENT LIST IS DONE, /A042 JMP IOALLP /CONTINUE LOADING ARGUMENTS. /A042 ISZ IOAOUT /HOUSEKEEP THE RETURN POINTER /A042 NOPLP, TAD NOOPS /THEN LOAD /A042 NOOPS, NOP /NO-OPS /A042 CDFLP /POINT TO FIELD 5 /A042 DCA I AIR17 /STORE NO-OPS AFTER THE ARGUMENTS /M043 CDFMYF /COME BACK TO FIELD 3 /A042 ISZ REG11 /UNTIL THE TOTAL COUNT IS DONE, /A042 JMP NOPLP /CONTINUE LOADING NO-OPS. /A042 CIF CDFLP /THEN GO TO FIELD 5 /A042 JMS I (IOAEX /EXECUTE THE IOACAL /A042 JMP I IOAOUT /RETURN TO THE CALLER /A042 RESDEV, XX /RESOLVE THE DEVICE WHOSE # IS IN THE AC TO BE VOLUME /A054 /OR DRIVE. /A054 MQL /SAVE THE # & CLEAR THE AC /A054 TAD WINSYS /IS THERE A WINNY PRESENT? /A054 SNA CLA /IF YES, WHERE IS THE RX50 /A054 JMP ISRX /IF NOT, RETURN TO CALL+1. DISKETTE /A054 TAD (-10 /THERE IS A WINNY, IS THE RX50 HIGH? /A054 TAD MAXDEV /GET THE HIGHEST # IN THE SYSTEM /A054 SPA CLA /POSITIVE RESULTS SAY RX50 IS HIGH /A054 JMP RESLO /ON NEGATIVE RESULTS, GO CHECK LOW END /A054 MQA /GET THE SAVED DEVICE # /A054 TAD (-10 /COMPARE TO RX50 NUMBERS (8 & 9) /A054 SMA CLA /POSITIVE MEANS RX50 /A054 JMP ISRX /TAKE THE DISKETTE (CALL+1) RETURN /A054 JMP ISWIN /NEGATIVE MEANS WINNY, RETURN TO CALL+2 /A054 RESLO, ACL /GET THE SAVED DEVICE # /A054 SNA CLA /CHECK FOR #0 FIRST /A054 JMP ISRX /DRIVE 0 IS DEFINITELY AN RX50 (V2.0) /A054 ACL /GET THE SAVED DEVICE # /A054 TAD (-1 /CHECK FOR #1 /A054 SZA CLA /A ZERO HERE SAYS ITS D1 /A054 JMP ISWIN /ANY OTHER NUMBER IS WINNY /A054 AC0010 /CHECK BIT 8 /A054 CDFMNU /IN MNOPTN /A054 AND I (MUBUF+MNOPTN /TO SEE IF #1 IS ASSIGNED TO WINNY /C055 CDFMYF /POINT BACK AT THIS FIELD /A054 SZA CLA /ON ZERO ITS NOT, SO TAKE CALL+1 /A054 ISWIN, ISZ RESDEV /ELSE IT IS, SO TAKE CALL+2 /A054 ISRX, JMP I RESDEV /RETURN TO CALLER /A054 FNC=. /FIRST NON-CODE LOCATION /A042 PAGE WPSDET, XX /IF THE FLAG CLASSU WASN'T SET AND /M054 /IF THE IMAGE BEING VERIFIED HAS A VALID WPS FORMATTED /A053 /HOME BLOCK OR ALLOCATION BLOCK, IT IS CONSIDERED TO BE /A053 /OF CLASS "WPS", OTHERWISE, IT IS OF CLASS "UTILITY" /A053 / /A053 /IF (CLASSU)<>0 THEN /A054 / GO REPORT UTILITY AND PROMPT FOR RETURN TO MAIN MENU /A054 /ELSE /A054 /IF THE READ OF THE HOME BLOCK IS SUCCESSFUL THEN /A053 / IF HOMEBLOCK WORD 9 = -200 THEN /A053 / IF HOMEBLOCK WORD 6 = 255 THEN /A053 / IF HOMEBLOCK WORD 1 = XX3X(8) THEN /A053 / GO PROMPT FOR PASS 2 (THIS IS A WPS IMAGE) /A053 /ELSE /A053 /IF THE READ OF THE ALLOCATION BLOCK IS SUCCESSFUL THEN /A053 / IF ALLOCATION BLOCK WORD 1 = XX4X(8) THEN /A053 / IF ALLOCATION BLOCK WORD 2 <> 0 THEN /A053 / GO PROMPT FOR PASS 2 (THIS IS A WPS IMAGE) /A053 /ELSE /A053 /GO REPORT UTILITY AND PROMPT FOR RETURN TO MAIN MENU /A053 /END /A053 / /A053 CLA /START CLEAN /A054 TAD CLASSU /SEE IF STARTM HAS SET 'UTILITY' /A054 SZA CLA /IF NOT, CHECK HOME &/ ALLOCATION BLOCKS/A054 JMP UTMED /NON-WPS RETURN, GO REPORT UTILITY DONE /A053 CDFBUF /POINT AT THE BUFFER DATA FIELD /A054 JMS I IQURX /QUEUE A REQUEST TO RXHAN /A053 RXERD+4000 /FNC=READ /A053 2 /BLOCK 2 IS THE HOMEBLOCK /A053 HBLKBF /BUFFER ADDRESS IN BUFFER FIELD /A053 JMP CKALLO /ERROR, GO CHECK THE ALLOCATION BLOCK /A053 CDFBUF /GET THE INDIRECTS FROM THE BUFFER FIELD/A053 TAD I (HBLKBF+11 /WORD 9 SHOULD HAVE -200(10) /A053 TAD (310 /ADDING 200(10) SHOULD GIVE (AC)=0 /A053 SZA CLA /IF TRUE, KEEP CHECKING /A053 JMP CKALLO /ERROR, GO CHECK THE ALLOCATION BLOCK /A053 TAD I (HBLKBF+6 /WORD 6 SHOULD HAVE 255(10) /A053 TAD (-377 /ADDING -255(10) SHOULD GIVE (AC)=0 /A053 SZA CLA /IF TRUE, KEEP CHECKING /A053 JMP CKALLO /ERROR, GO CHECK THE ALLOCATION BLOCK /A053 TAD I (HBLKBF+1 /WORD 1 SHOULD HAVE XX3X(8) /A053 AND (70 /MASK OUT ALL BUT BITS 6-8 /A053 TAD (-30 /ADDING -30(8) SHOULD GIVE (AC)=0 /A053 SNA CLA /IF NOT, KEEP CHECKING /A053 JMP ISWPS /THE HOME BLOCK IS VALID FOR WPS /A053 CKALLO, JMS GTALLC /READ ALLOCATION BLOCK TO ABLKBF. RET DF=BUF/M054 JMP UTMED /NON-WPS RETURN, GO REPORT UTILITY DONE /A053 TAD I (ABLKBF+1 /TYPEWORD SHOULD HAVE XX4X(8) /A053 AND (70 /MASK OUT ALL BUT BITS 6-8 /A053 TAD (-40 /ADDING -40(8) SHOULD GIVE (AC)=0 /A053 SZA CLA /IF TRUE, THEN KEEP CHECKING /A053 JMP UTMED /NON-WPS RETURN, GO REPORT UTILITY DONE /A053 TAD I (ABLKBF+2 /ANYTHING BUT 0 IS GOOD HERE /A053 SNA CLA /A053 JMP UTMED /NON-WPS RETURN, GO REPORT UTILITY DONE /A053 TAD I (HBLKBF+1 /THE COS TYPEWORD IS -1, SO /A054 IAC /ADD 1 TO IT. /A054 SZA CLA /IF 0 IT MIGHT BE A COS IMAGE /A054 JMP ISWPS /ELSE IT PROBABLY IS A WPS IMAGE /A054 JMS SETMS1 /PROBABLY COS, SO WARN THE USER /A055 BEWARE /"**CAUTION** THIS !S MAY NOT BE IN WPS FORMAT" VMED /"DISKETTE" OR "VOLUME" /A054 NOP /NULL ARGUMENT /A055 ISWPS, JMP I WPSDET /RETURN TO CALLER /A053 UTMED, /HERE BECAUSE THE MEDIA WAS DETERMINED TO BE OF CLASS "UTILITY" /A053 JMS I IOASET /SEND A MESSAGE /A053 -3 /WITH THREE ARGUMENTS /A053 UTMSG /"VERIFY DONE ON THIS UTILITY !S /A053 2500 /POSITION AT LINE 25 & CLEAR TO EOS /A053 VMED /TYPE OF MEDIA BEING VERIFIED /A053 JMP COPY6 /COPY6 WILL SET UP THE PROMPT /C054 BADDSC, XX /BAD DESTINATION MEDIA OR DEVICE /C049 CDFMYF /LET'S ALL COME BACK HERE! /A024 TAD CPYDRV /GET THE "COPY TO" NUMBER /A045 JMS RESDEV /GO FIND OUT WHAT IT IS /A045 JMP BADDSK /ITS A DISKETTE, GO REPORT IT /A045 JMS I IOASET /ITS A VOLUME SO REPORT THAT /A045 -4 /4 ARGUMENTS TO PASS /A045 CPYWM3 /"WRITE ERRORS. SELECT NEW .... /A045 -2400 /POSITION & ERASE /A045 ISDEV /"DEVICE" OR /A045 ISVOL /"VOLUME" /A045 JMP CPYABT /ABORT THE COPY OPERATION /A045 / BADDSK, /BAD DISKETTE OR DESTINATION DRIVE ERROR. /C049 JMS I IOASET /CALL IOACAL /A042 -3 /NUMBER OF ARGUMENTS TO PASS /C045 CPYMS3 /BAD SPOT ON NEW DISC -2400 ISDSKT /"DISKETTE" /C045 JMP CPYABT /ABORT THE COPY OPERATION /C049 / GTALLC, XX /GET THE ALLOCATION BLOCK INTO BUFFER FIELD /M054 CDFBUF /A054 JMS I IQURX /A027 RXERD+4000 /A027 377 /A027 ABLKBF /A027 JMP GTERRT /ERROR, TAKE NON-SKIP RETURN /A050 ISZ GTALLC /READ OK, TAKE SKIP RETURN /A050 GTERRT, CDFBUF /POINT AT THE BUFFER FIELD TO SEE ABLKBF/A054 JMP I GTALLC /A027 FNC=. /FIRST NON-CODE LOCATION /A042 PAGE INAREA, -STRLEN /A027 ZBLOCK STRLEN+1 /A027 FNC=. /FIRST NON-CODE LOCATION /A049 PAGE /C044 ASKNBR, XX /RESOLVE THE USABLE 'COPY-TO' DEVICE. 1ST LEVEL SUBROUTINE/M054 AC7777 /GET A MINUS 1 TO CHECK FOR 2-DRIVE SYSTEM/A027 TAD MAXDEV /GET MAXDEV BACK FOR 2 DRIVE TEST /A054 SNA CLA /IF NOT ZERO, THEN IT ISN'T A 2-DRIVE SYSTEM/A027 JMP TWDRV /GO PROCESS A 2-DRIVE SYSTEM /A027 IFNDEF ITALIAN < TAD WINSYS /IS THERE A WINNY PRESENT? /A054 SNA CLA /ADD '/DEVICE' IF WINNIE BIT WAS SET /M054 JMP ASKAGN /NOT WINNY, PRESS ON /A054 TAD (SLSDEV) /GET ADDR OF "/DEVICE" SUBSTRING /A044 DCA DRVPMT /PUT INTO IOACAL SEQ /A044 TAD (SLSDEV) /GET ADDR OF "/DEVICE" SUBSTRING /A044 DCA DRVPMA /PUT INTO IOACAL SEQ /A044 TAD (SLSVOL) /DO SAME FOR "/VOLUME" /A044 DCA DSKPMT / /A044 > ASKAGN, JMS I IOASET /CALL IOA SET UP /M054 -7 /WITH 7 ARGUMENTS /M054 VASKNB /"TYPE THE NUMBER OF THE ^S^S THAT CONTAINS 1305 /THE ^S^S ^PYOU WANT TO RECEIVE THE COPY" ISDRVE /"DRIVE" /A054 DRVPMT, VSNULL /VSNULL OR "/DEVICE" /A054 ISDSKT /"DISKETTE" /A054 DSKPMT, VSNULL /VSNULL OR "/VOLUME" /A050 1505 /A027 JMS I IOASET /CALL IOA SET UP /A050 -3 /WITH 3 ARGUMENTS /A050 VPRTGM /AND PRESS RETURN /A027 2405 /OR PRESS GOLD MENU TO RECALL MAIN MENU /M054 2605 /A027 REASK, CIFMNU /A027 JMS I INACAL /GO GET WHAT THE USER TYPED IN /A027 INAREA /A027 JMP GOLDKY /HE HIT A GOLD KEY /A027 CLA MQA /A027 SNA CLA /A027 JMP ASKAGN /GO ASK FOR IT AGAIN /A027 CIFMNU /A027 JMS I CVDCAL /A027 INAREA+1 /A027 JMP BDNBR /USER DIDN'T TYPE IN A NUMBER /A027 DCA CPYDRV /SAVE DRIVE NUMBER PUT IN BY USER /A044 TAD CPYDRV /& GET IT BACK INTO AC /A044 CIA /FOR COMPARING TO /M054 TAD MAXDEV /THE MAXIMUM DEVICE NUMBER /A054 SPA CLA /SKIP IF VALID DRIVE NUMBER /A027 JMP BDNBR /WRONG NUMBER /A027 TAD SVDRV /GET THE SAVED "VERIFY" DEVICE NUMBER /A050 CIA /SET UP FOR COMPARE /A027 TAD CPYDRV /NOW COMPARE WITH THE "COPY TO" NUMBER /A050 SNA CLA /IF ZERO, THEY ARE EQUAL /A050 JMP EQDRV /GO COMPLAIN /A050 JMP CKASGN /GO SEE IF WINNIE & ASSIGNED & BIG ENUF /C054 CKSZOK, JMS I IOASET /CALL IOA SET UP /A050 -2 /WITH 2 ARGUMENTS /A050 PSCR /^P!E/ POSITION AND ERASE TO EOS /M054 1305 /FROM LINE 13 COL 5 /M054 JMP COPYMS /GO INFORM & PROMPT USER /A054 GOLDKY, TAD (-EDMENU /USER TYPED A GOLD KEY CHECK MENU ONLY /M054 SNA CLA /A027 JMP VEPRM4 /TAKE GOLD MENU EXIT PATH /A054 JMS RNGBEL /GO RING THE BELL /A050 JMP ASKAGN /GO ASK FOR NUMBER AGAIN /A027 BDNBR, TAD (VBDNBR /GET THE MESSAGE LABEL /A054 DCA INFOMS /PUT IT IN THE IOA SEQUENCE /A054 TAD (MAXDEV /GET THE ADDRESS OF THE MAX # ALLOWED /A054 DCA NUMER /PUT IT IN THE IOA SEQUENCE /A054 JMP INFORT /GO INFORM USER & INVITE RETRY /A054 EQDRV, TAD (VUSDFD /GET THE MESSAGE LABEL /A054 DCA INFOMS /PUT IT IN THE IOA SEQUENCE /A054 TAD (CPYDRV /GET THE ADDRESS OF THE # NOT TO USE /A054 DCA NUMER /PUT IT IN THE IOA SEQUENCE /A054 INFORT, JMS I IOASET /GO INFORM USER & INVITE RETRY /A054 -6 /WITH 6 ARGUMENTS /A054 INFOMS, 0 /"^S^S NUMBERS MUST BE 0 TO !D." /A054 /"USE A ^S^S OTHER THAN !D ON OUTPUT." /M054 2717 /LINE 27, COL 17 /A054 ISDRVE /"DRIVE" /A054 DRVPMA, VSNULL /VSNULL OR "/DEVICE /A054 NUMER, VSNULL /NUMERIC ARGUMENT /A054 TRYAGN /" TRY AGAIN. /A054 JMP REASK /GO ASK FOR NUMBER AGAIN /A054 TWDRV, CDFMNU /A054 TAD I (MUBUF+MNTMP5 /GET THE DRIVE NBR TO COPY TO /C050 DCA CPYDRV /PUT IT IN CPYDRV /A054 CDFMYF /A027 JMP COPYMS /GO INFORM & PROMPT USER /A054 ASKXIT, JMP I ASKNBR /RETURN /A027 FNC=. /FIRST NON-CODE LOCATION /A049 PAGE /C044 CKASGN, TAD WINSYS /IS THIS A WINNIE SYSTEM? /A044 SNA CLA /YES, SKIP & CONTINUE CHECKING /A044 JMP CKSZOK /NO, TAKE SUCESS RETURN /A044 JMS SWPDRV /MAKE (DRIVE)=(CPYDRV) /A050 TAD CPYDRV /GET DRIVE/DEVICE # /A044 SZA CLA /CHECK FOR DEVICE 0 /C054 JMP NOT0S /IF NOT COPYING TO 0, THEN PRESS ON /A054 JMS GDENS /ELSE ITS 0, GET ITS DENSITY CODE TO AC /A054 TAD (-4 /IF ITS 4 OR MORE, ITS THE SYSTEM VOLUME/A054 SPA CLA /IN WHICH CASE, INFORM THE USER /A054 JMP NOT0S /OTHERWISE, PRESS ON /A054 JMS SETMS1 /SET UP 'WHEN READY PROMPT /A054 NOT0V /'COPY NOT PERMITTED TO THE SYSTEM ^S..'/A054 ISVOL /'VOLUME' /A054 TRYAGN /' &TRY AGAIN.' /A054 JMP ASKAGN /GO ASK FOR A NUMBER AGAIN /A054 NOT0S, CDFBUF /POINT AT THE BUFFER DATA FIELD /A054 JMS I IQURX /QUEUE A REQUEST TO RXHAN /A050 RDEGTV+4000 /FNC=GET VOLUME DATA /A050 0 /DUMMY BLOCK FOR QURX /A050 CVOLBU /'COPY-TO' VOLUME BUFFER ADDRESS /C054 JMP CKASFL /ERROR RETURN, GO SEE IF DRIVE OR UNASG /A054 /CHECK THE VOLUME SIZE CDFBUF /NOW MAKE SURE DESTINATION LARGE ENOUGH /A054 TAD I (CVOLBU+17 /GET THE HI BYTE OF THE BLOCK COUNT /A054 SZA CLA /CERTAINLY BIG ENOUGH IF ITS NOT 0 /A054 JMP CKSZOK /SO THAT'S IT HERE /A054 TAD I (CVOLBU+16 /LOOK AT THE LOW BYTE OF THE BLOCK COUNT/A054 CLL RTL /CLEAR THE LINK & MULTIPLY BY 4 /A054 RTL /TWICE TO GET ACTUAL BLOCK COUNT /A054 TAD DSKIDX /ADD THE -MAX BLOCK COUNT FROM SOURCE /A054 SZL /OK IF IT CAUSED THE CARRY /A054 JMP CKSZOK /SO PRESS ON /A054 /TELL 'EM ITS TOO SMALL CLA /GET THE GARBAGE OUT /A054 TAD (VSMALL /'THE ^S ASSIGNED TO ^S ^D IS TOO SMALL.'/A054 DCA VDMSA /INSERT IT IN THE SEQUENCE /A054 JMP VDMS /GO INFORM & INVITE RETRY /A054 COMSD, TAD (1420 /784 BLOCKS IS THE MOST IT CAN TAKE /A054 TAD DSKIDX /ADD THE -BLOCKS IN THE SOURCE IMAGE /A054 SMA CLA /MINUS RESULTS MEAN SOURCE>DESTINATION /A054 JMP CKSZOK /ELSE SOURCE =< DESTINATION ERGO OK /A054 JMS I IOASET /CALL IOA SET UP /A054 -5 /WITH 5 ARGUMENTS /A054 NORX50 /'THE IMAGE IN ^S !D IS TOO BIG FOR A ^S/A054 1305 /@LINE 13 COL 5 /A054 ISVOL /'VOLUME' /A054 SVDRV /'#' /A054 ISDSKT /'DISKETTE' /A054 JMS SETMS1 /SET UP 'WHEN READY...PROMPT /A054 NORX5A /'CHOOSE A MOUNTED ^S OF !D BLOCKS.... /A054 ISVOL /'VOLUME' /A054 DSKSIZ /'####' /A054 JMP ASKAGN /GO ASK AGAIN AFTER THE RETURN /A054 CKASFL, TAD CPYDRV /GET THE COPY-TO # /A054 JMS RESDEV /GO FIND OUT WHETHER DRIVE OR DEVICE /A054 JMP COMSD /ITS DRIVE SO GO COMPARE SOURCE & DESTINATION /TELL 'EM ITS NOT ASSIGNED TAD (VUNASG /'THERE IS NO VOLUME ASSIGNED... /A054 DCA VDMSA /INSERT IT IN THE SEQUENCE /A054 VDMS, JMS I IOASET /CALL IOA SET UP /A054 -6 /WITH 6 ARGUMENTS /A054 VDMSA, VSNULL /'THERE IS NO VOLUME ASSIGNED... /A054 /'THE ^S ASSIGNED TO ^S ^D IS TOO SMALL.'/A054 2717 /LINE & COLUMN /A054 ISVOL /"VOLUME" ADDRESS /A054 ISDEV /"DEVICE" ADDRESS /A054 CPYDRV /OUTPUT DEVICE NUMBER /A054 TRYAGN /" TRY AGAIN" /A054 CDFMYF /CHANGE BACK TO OUR FIELD B4 WE GO /A050 JMS RTDRV /MAKE (DRIVE)=(SVDRV) /A050 JMP REASK /INVITE A RETRY /A054 FNC=. /FIRST NON-CODE LOCATION /A049 PAGE /FIRST LEVEL SUBROUTINE. DETERMINE (MAXDEV) & (WINSYS). (SVDRV)=(DRIVE)=MAIN /MENU SELECTION. (CPYDRV)=0. CALL RESDEV TO DETERMINE THE TYPE OF MEDIA/M054 /AND DEVICE BEING VERIFIED, SETS THE GLOBAL CONSTANTS "VMED" AND "VDEV" /A049 /IN PAGE 0, SELECTS AND ISSUES AN INFORMATIONAL MESSAGE, ISSUES A PROMPT/A049 / STARTM, XX /A049 CDFMNU /A027 TAD I (MUBUF+MNMXDR /GET HIGHEST DEVICE NUMBER /A054 DCA MAXDEV /STORE IT FOR LATER REFERENCES /A054 AC0004 /MASK TO ISOLATE WINNIE BIT /A054 AND I (MUBUF+MNOPTN /CHECK FOR PRESENCE OF WINCHESTER /A054 SZA CLA /ZERO MEANS THERE IS NO WINNY /A054 AC0001 /ELSE, GET A ONE /A054 DCA WINSYS /SET "THIS IS A WINNIE SYSTEM FLAG" /A054 AC4000 /MASK FOR THE 'CHAINED INTO VERIFY' FLAG/A055 AND I (MUBUF+MNTMP2 /LOOK FOR BIT 0 /A055 SZA /IF IT WAS SET /A055 ISZ CHAIN /SET THE CHAINED FLAG IN PAGE 0 /A055 AC3777 /MASK TO ALLOW ALL BUT BIT 0 /A055 AND I (MUBUF+MNTMP2 /TO LEAVE THE DRIVE NUMBER AND /A055 DCA I (MUBUF+MNTMP2 /ANYTHING ELSE THAT WAS THERE /A055 TAD I (MUBUF+MNTMP2) /GET THE VERIFY DRIVE NUMBER /A027 DCA DRIVE /STORE IT /A027 TAD DRIVE /GET THE DRIVE NUMBER /A027 DCA SVDRV /SAVE IT FOR COPYING /A027 DCA CPYDRV /INITIALIZE 'COPY-TO' TO 0 /A054 DCA CPDRV0 /ININIALIZE TO 'NOT DEVICE 0' /A054 TAD DRIVE /GET THE DEVICE NUMBER JMS RESDEV /GO FIND THE DEVICE TYPE JMP STTYP /"DRIVE" RETURN, SET UP DRIVE/DISKETTE /A049 TAD (ISVOL /"WINNY" RETURN, SO GET "ISVOL" ADDRESS /A049 DCA VMED /AND INSERT IT AS THE POINTER IN PAGE0 /A049 TAD (ISDEV /"DEVICE" ADDRESS /A049 DCA VDEV /INSERT FOR PROMPTS AND MESSAGES /A049 TAD (VWSCD /GET THE "WINNY" MESSAGE ADDRESS /A049 DCA STMS /INSERT IT FOR THE TYPE & # ID CALL /A049 JMP STSND /GO SEND THE VOLUME/DEVICE MESSAGES /A049 STTYP, TAD (ISDSKT /GET "DISKETTE" ADDRESS /A049 DCA VMED /INSERT IT AS THE POINTER IN PAGE0 /A049 TAD (ISDRVE /GET "DRIVE" ADDRESS /A049 DCA VDEV /INSERT IT AS THE POINTER IN PAGE0 /A049 TAD (VSCRND /GET THE DISKETTE/DRIVE FROMAT MESSAGE /A049 DCA STMS /INSERT IT FOR THE TYPE & # ID CALL /A049 STSND, JMS I IOASET /CALL IOACAL /A049 -4 /NUMBER OF ARGUMENTS TO PASS /A049 VSCRN1 /"VERIFY !S STRUCTURE" /A049 0 /CURSOR POSITION FOR ERASE /A049 26 /CURSOR POSITION FOR HEADER /A049 VMED /"DISKETTE" OR "VOLUME" /A049 TAD CHAIN /SEE IF WE CHAINED INTO VERIFY /A055 SZA CLA /IF WE DID /A055 JMP STDENS /SKIP THE PROMPT, GO GET DENSITY /A055 JMS I IOASET /IDENTIFY VERIFY DEVICE/DRIVE /A049 -5 /PASS 5 ARGUMENTS /A049 STMS, 0 /VSCRND: "PUT DISKETTE IN DRIVE N", OR /A049 /VWSCD: "VERIFYING VOL IN DEV N" /A049 2600 /CURSOR POSITIONING FOR PROMPT /A049 VMED /"DISKETTE" OR "VOLUME" /A049 VDEV /"DRIVE" OR "DEVICE" /A049 DRIVE /THE NUMBER OF THE DRIVE/DEVICE /A049 JMS SETMS1 /SET UP "WHEN READY.." PROMPT. /A049 IOATSP /ADDRESS OF POSITIONING NULL MESSAGE /A049 NOP /NULL ARG /A049 NOP /NULL ARG /A049 STDENS, JMS GDENS /GET DENSITY CODE INTO AC. RETURN DF=MYF/M054 DCA DENFLG /AND STORE IT IN DENFLG /A016 AC0004 /4 = DENSITY CODE FOR A MOUNTED WINNY /A054 CIA /NEGATE IT TO SUBTRACT FROM /A054 TAD DENFLG /THE CURRENT DENSITY CODE /A054 SPA CLA /IF 4 OR GREATER, GET THE VOLUME DATA /A054 JMP PREV2 /ELSE GO GET DATA FROM THE TABLE /A054 CDFBUF /POINT AT THE BUFFER FIELD /A054 JMS I IQURX /CALL RXHAN /A054 RDEGTV+4000 /GET VOLUME DATA /A054 0 /DUMMY BLOCK FOR RXHAN /A054 VVOLBU /BUFFER ADDRESS /A054 NOP /MAYBE CHANGE TO LET RXHAN DO ERRORS /A054 CDFBUF /POINT BACK AT THE BUFFER FIELD /A054 TAD I (VVOLBU+17 /LOOK AT THE HIGH WORD /A054 SZA CLA /OK IF ZERO /A054 JMP TOOBIG /ELSE, GO INFORM THE USER /A054 TAD (-176 /GET THE NEGATIVE OF MAX COUNT +1 /A054 TAD I (VVOLBU+16 /COMPARE THE LOW WORD @BLOCKS/20 OCT /A054 SMA CLA /ONLY NEGATIVE NUMBERS ARE GOOD /A054 JMP TOOBIG /IF TOO BIG, GO TELL /A054 TAD (-17 /GET THE SMALLEST LEGAL COUNT /A054 TAD I (VVOLBU+16 /COMPARE THE LOW WORD @ BLOCKS/20 OCT /A054 SPA CLA /OK ON PLUS RESULTS, CLEAR THE AC /A054 AC0001 /FOR MINUS RESULTS, GET A ONE /A054 DCA CLASSU /SET/CLEAR THE 'CLASS IS UTILITY' FLAG /A054 TAD I (VVOLBU+16 /GET THE BLOCKS/20 OCT /A054 CLL RTL /CLEAR THE LINK & MULTIPLY BY FOUR /A054 RTL /TWICE TO GET THE ACTUAL BLOCK COUNT /A054 DCA DSKSIZ /THAT'S THE # OF BLOCKS IN THIS IMAGE /A054 JMP SETIDX /GO CONTINUE RESOLVING AND SETTING UP /A054 TOOBIG, JMS I IOASET /CALL IOA SET UP /A054 -2 /PASS 2 ARGUMENTS /A054 EXBLK /'^P!E&ONLY THE 1ST 2000 BLOCKS....' /A054 0300 /PUT IT IN OVER 'READABILITY... /A054 TAD (3720 /GET 2000 DECIMAL /A054 DCA DSKSIZ /THAT'S THE # OF BLOCKS IN THIS IMAGE /A054 JMP SETIDX /GO SET THE SIZE AND INDEX. IN LINE CODE/A055 /ON ANOTHER PAGE. JUMPS BACK HERE TO RETURN/A055 STARTR, JMP I STARTM /RETURN TO CALLER. USED BY OFF PAGE SECTION FNC=. /FIRST NON-CODE LOCATION /A049 PAGE SETIDX, TAD DSKSIZ /GET THE RESOLVED IMAGE SIZE /A054 TAD (-1440 /IF ITS 800 BLOCKS /A054 SNA CLA / /A054 JMP PREV1 /GO TREAT IT LIKE AN RX50 /C055 TAD DSKSIZ /ELSE, GET THE # OF BLOCKS TO WORK WITH /A054 CIA /NEGATE IT /A054 DCA DSKIDX /MAKE IT THE BASE FOR COUNTING BLOCKS /A054 TAD DSKSIZ /GET THE # OF BLOCKS TO WORK WITH /A054 CLL RTR /DIVIDE BY THE 8 BITS PER ALLOCATION /A054 RAR /WORD /A054 IAC /ADD ONE FOR REVERSE COMPATABILITY /A054 DCA ALCCNT /THAT'S THE ALLOCATION WORD COUNT /A054 JMP STCG /GO MERGE WITH THE EARLIER LINE /A054 PREV1, ISZ RX50SZ /SET THE 'RX50 SIZE' FLAG /A055 PREV2, CDFMYF /POINT BACK TO THIS FIELD FOR INDIRECTS /A054 TAD DENFLG /NOW SET UP SIZE CONSTANT /A016 TAD (SZTAB /ADD IN THE ADDRESS OF THE TABLE /C055 DCA T1 /TO INDIRECT TO /A027 TAD I T1 /GET SIZE OF DISK /A027 DCA DSKSIZ /EQUALS THE SIZE OF THIS DISKETTE /A016 TAD DSKSIZ /NOW MAKE AN INDEX OF IT TOO! /A016 CIA /A016 DCA DSKIDX /A016 TAD DENFLG /SET UP SIZE OF ALLOCATION BLOCK AREA /M054 TAD (ALTAB /ALLOCATION WORD TABLE ADDRESS /CBP2 DCA T1 /TO INDIRECT THRU /A027 TAD I T1 /GET NUMBER OF WORDS IN ALLOCATION BLOCK/M054 DCA ALCCNT /A016 /IF VERIFYING A SYSTEM THEN (SYSDSK)<>0, IF AN RX50 SIZE DEVICE, SET /A054 /THE NUMBER OF ALLOCATION WORDS TO OCT 140 (VICE 142 FOR DOC DISKETTES) /A054 STCG, DCA SYSDSK /SET DISKETTE TO 0 TO INDICATE DOCUMENT /M054 JMS GTALLC /GET ALLOCATION BLOCK INTO BUFFER. RET DF=BUF JMP CKRDMS /ERROR GETTING ALLOCATION BLOCK, PRESS ON/A054 TAD I (ABLKBF+1) /IS IT A SYSTEM DISKETTE? /A027 AND (71 /LOOK AT TYPE NIBBLE & SYSTEM BIT ONLY /A054 TAD (-41) /SYSTEM DISKETTE? /A027 SZA CLA /A027 JMP CKRDMS /IF NOT SYSTEM, THEN PRESS ON NOW /A054 ISZ SYSDSK /SIGNAL SYSTEM DISKETTE /A027 AC7776 /CHECK IF WE ARE DOING RX50'S /M055 TAD DENFLG /DENSITY FLAG=2 FOR RX50'S /M055 SNA CLA /IF NOT EQUAL THEN ITS NOT AN RX50 /C055 ISZ RX50SZ /IF IT WAS THEN SET THE 'RX50 SIZE' FLAG/A055 TAD RX50SZ /ARE WE DOING AN RX50 SIZE? /A055 SNA CLA /WE ARE IF THE FLAG ISN'T 0 /A055 JMP CKRDMS /IF NOT RX50 THEN PRESS ON NOW /A054 AC7776 /GET A -2 TO DECREMENT /C042 TAD ALCCNT /DEC ALLOCATION WORD COUNT /A027 DCA ALCCNT /RETURN IT /A027 CKRDMS, JMS I IOASET /CALL IOACAL /A049 -2 /NUMBER OF ARGUMENTS TO PASS /A049 VSCRN0 /"CHECKING FOR READABILITY" /A049 500 /CURSOR POSITION /A049 JMP STARTR /RETURN VIA STARTM /A054 NXTOUT, XX /RETURN THE NEXT AVAILABLE OUTPUT BLOCK. UTILITY SUBR. /A055 /NEVER RETURN 0,1,2,6,255. /A055 CLA CLL /START ALL CLEAR /A055 NXTONE, ISZ BLKOUT /INCREMENT THE OUTPUT BLOCK NUMBER /A055 TAD BLKOUT /GET THE CURRENT NUMBER FOR COMPARISON /A055 TAD DSKIDX /WITH THE MINUS MAX BLOCK COUNT /A055 SMA CLA /MINUS RESULTS ARE OK /A055 JMP FULLUP /ELSE GO REPORT THE OUTPUT IS FULL /A055 AC7777 /GET MINUS 1 /A055 TAD BLKOUT /COMPARE WITH CURRENT BLOCK OUT /A055 SZA /CANT ALLOW THIS ONE, TAKE THE SKIP PATH/A055 TAD (-1 /NOW MAKE IT -2 /A055 SZA /CANT ALLOW THIS ONE, TAKE THE SKIP PATH/A055 TAD (-4 /NOW MAKE IT -6 /A055 SZA /CANT ALLOW THIS ONE, TAKE THE SKIP PATH/A055 TAD (-371 /NOW MAKE IT -255 /A055 SNA CLA /CANT ALLOW THIS ONE, TAKE THE SKIP PATH/A055 JMP NXTONE /ONE OF THE FORBIDDEN ONES, TRY AGAIN /A055 JMP I NXTOUT /RETURN WITH THE NEXT OUTPUT BLOCK # /A055 FULLUP, JMS I IOASET /CALL IOACAL /A055 -3 /NUMBER OF ARGUMENTS TO PASS /A055 OPFUL /^P!E&THERE IS NOT ENOUGH FREE SPACE /A055 /ON THE !S TO FINISH. / /A055 2400 /CURSOR POSITION AND ERASE TO EOS /A055 VCMED /THE COPY MEDUIM: VOL OR DSKT /A056 JMP CPYABT /GO FINISH TERMINATION /A055 FNC=. /FIRST NON-CODE LOCATION /A042 PAGE BADHDR, XX /BAD HEADER DETECTED. UTILITY SUBROUTINE. /A054 CLA /A054 JMS DLTFIL /A054 TAD (HBLKBF+11 /GET THE START OF THE FILE LIST /A055 TAD FILENO /ADD IN THIS FILE NUMBER /A055 DCA T1 /T1 POINTS TO THE WORD IN THE LIST /A054 CDFBUF /CHANGE TO THE BUFFER FIELD /A054 DCA I T1 /ZERO THE HOME BLOCK BUFFER ENTRY /A054 CDFMYF /A027 JMP I BADHDR /THIS AREA CAN BE BEEFED UP GREATLY HDRCOL, XX /IF ANY BLOCK IS BOTH DATA & HDR, MARK IT WITH 'READ FAIL' AND /'MULTI-USE' FLAGS IN THE BLOCK LIST & FLAG HOMEOK FOR REBUILD/A054 DCA SBLKNO /CLEAR THE NUMBER OF THE BLOCK TO CHECK /A055 TAD DSKIDX /GET THE -NUMBER OF BLOCKS IN THE IMAGE /A055 IAC /ADD +1 TO REDUCE THE COUNT TO GO BY 1 /A055 DCA REG12 /USE REG12 AS THE 'TO GO' COUNTER /A055 HDRC, ISZ SBLKNO /SBLKNO IS THE OFFSET POINTER INTO LISTS/M054 TAD P377 /MASK FOR THE FILE NUMBER ONLY /M055 JMS TEST2 /IN THIS BLOCK'S TYPE LIST STATUS WORD /M055 SNA /IF NO FILE # THEN ITS NOT A HEADER /M055 JMP HRCOL3 /SO SKIP IT /M055 DCA T1 /SAVE THE # TO COMPARE TO THE BLKLST # /M055 TAD P377 /MASK FOR THE FILE NUMBER ONLY /M055 JMS TEST1 /IN THIS BLOCK'S BLOCK LIST STATUS WORD /M055 /WHAT ABOUT FILE# 0? DCA FILENO /SAVE THE BLOCK LIST FILE # /A055 TAD FILENO /GET IT BACK FOR COMPARISON /A055 CIA /NEGATE IT /A055 TAD T1 /COMPARE THE TYPE LIST # /A055 SNA CLA /IF THE FILE #S WERE THE SAME THEN /M055 JMP HRCOL3 /ITS A LEGAL HEADER /M055 /D056 TAD (0400 /SEE IF IT WAS A GO-TO-PAGE BLOCK /A056 /D056 JMS TEST2 /IN THE TYPE LIST /A056 /D056 SZA CLA /IF NOT GTP THEN GO REPORT /A056 /D056 JMP HRCOL3 /IT WAS GTP SO DON'T BOTHER /A056 /D056 AC6000 /MARK THE BLOCK LIST FILE # /A055 TAD (4400 /SET BIT 0 'THIS FILE NOT TO BE COPIED /A056 /SET BIT 3 'A DATA BLOCK CLAIMED AS OTHER HEADER JMS DOCSET /IN THE DOCUMENT LIST /A055 TAD T1 /GET THE TYPE LIST FILE # /A055 DCA FILENO /MAKE IT THE NUMBER TO MARK /A055 /D056 AC6000 /MARK AS 'AFFECTED' & 'NOT COPIED' /A055 TAD (0020 /SET BIT 7 'HEADER 1 IS A DATA BLOCK ELSEWHERE' JMS DOCSET /IN THE DOCUMENT LIST /A055 JMS HOMEOK /A CONFLICT, FLAG TO REBUILD HOME /M055 TAD (0400) /MARK THE BLOCK AS MULTIPLY USED /C055 JMS IORBLK /IN THE BLOCK LIST STATUS WORD. /M055 HRCOL3, ISZ REG12 JMP HDRC /CYCLE TILL DONE /C054 JMP I HDRCOL /RETURN DF=LST FNC=. /FIRST NON-CODE LOCATION /A049 PAGE FIELD 4 /ASSEMBLES HERE, RUNS IN FIELD 5 /A050 CDFMYF=CDFLP /A050 CDFVFD=6231 /A050 *200 /A050 STABUF, 0 /HARD DISK READ STATUS BUFFER /A054 CYLNO, 0 /CYLINDER NUMBER /A054 HEADNO, 0 /HEAD NUMBER /A054 SECTNO, 0 /SECTOR NUMBER /A054 CPVNO, 0 /CONTROLLER PROGRAM VERSION NUMBER /A054 /IOAEX - SUBORDINATE SUBROUTINE TO IOAOUT IN FIELD 3. IOAEX IS LOADED /A042 / AND CALLED BY IOAOUT. IOAEX CALLS IOACAL, THEN RETURNS. /A042 / /A042 IOAEX, XX /A042 CIFMNU /POINT TO THE MENU FIELD /A042 JMS I IOACAL /CALL IOA /A042 IOAARG, 0 /OUTPUT COMMAND /A042 0 /FIRST IOA ARGUMENT /A042 0 /IOA ARGUMENT OR NO-OP INSTRUCTION /A042 0 /IOA ARGUMENT OR NO-OP INSTRUCTION /A042 0 /IOA ARGUMENT OR NO-OP INSTRUCTION /A042 0 /IOA ARGUMENT OR NO-OP INSTRUCTION /A042 0 /IOA ARGUMENT OR NO-OP INSTRUCTION /A042 0 /IOA ARGUMENT OR NO-OP INSTRUCTION /A042 0 /IOA ARGUMENT OR NO-OP INSTRUCTION /A042 CIF CDFVFD /RETURN TO FIELD 3 /A042 JMP I IOAEX /RETURN TO CALLER /A042 IFDEF ENGLSH < VSMALL, TEXT '^P&THE ^S ASSIGNED TO ^S !D IS TOO SMALL.^S' /C054 VUNASG, TEXT '^P&THERE IS NO ^S ASSIGNED TO ^S !D.^S' /C054 SLSDEV, TEXT '/DEVICE' /A044 SLSVOL, TEXT '/VOLUME' /A044 VASKNB, TEXT '^P!E&TYPE THE NUMBER OF THE ^S^S THAT CONTAINS THE ' /C054 *.-1 /A042 TEXT '^S^S^PYOU WANT TO RECEIVE THE COPY' /C044 VPRTGM, /A027 TEXT '^P&AND PRESS &R&E&T&U&R&N ' /A027 *.-1 TEXT "^P&O&R &PRESS &GOLD &M&E&N&U TO RECALL THE &MAIN &MENU." /M045 VBDNBR, TEXT '^P!E^S^S NUMBERS MUST BE 0 TO !D.^S' /A054 VUSDFD, TEXT '^P&USE A ^S^S OTHER THAN "!D" ON OUTPUT.^S' /C054 > IFDEF SPANISH < VSMALL, TEXT '^P&EL ^S ASIGNADO AL ^S !D ES MUY PEQUE\QO.^S' VUNASG, TEXT '^P&NO HAY ^S ASIGNADO A ^S !D.^S' SLSDEV, TEXT '/DISPOSITIVO' SLSVOL, TEXT '/VOLUMEN' VASKNB, TEXT '^P!E&TECLEE EL N\ZMERO DE ^S^S QUE CONTIENE EL ' *.-1 TEXT '^S^S^PQUE DESEA RECIBIR LA COPIA' VPRTGM, TEXT '^P&Y PULSE !&RET. ' *.-1 TEXT "^P&O &PULSE &DOR. !&MENU PARA VOLVER AL &MEN\Z &PRINCIPAL." VBDNBR, TEXT '^P!ELOS NUMEROS DE ^S^S HAN DE SER DE 0 A !D.^S' VUSDFD, TEXT '^P&USE ^S^S DISTINTO DE "!D".^S' > IFDEF DUTCH < VSMALL, TEXT '^P&^S TOEGEWEZEN AAN ^S NR. !D TE KLEIN.^S' /C054 VUNASG, TEXT '^P&GEEN ^S TOEGEWEZEN ^S NR. !D.^S' /C054 SLSDEV, TEXT '' /A044 SLSVOL, TEXT 'OF -GEBIED' /A044 VASKNB, TEXT '^P!E&TYP NUMMER VAN AANDRIJVER^S^S MET BESTEMMINGSDISKETTE^S^S.^P' VPRTGM, /A027 TEXT '^P&DRUK OP &R&E&T&U&R&N.' /A027 *.-1 TEXT "^P&DRUK OP &GOUD !&MENU OM TERUG TE GAAN NAAR HET &HOOFDMENU."/M045 VBDNBR, TEXT '^P!E&NUMMER VAN AANDRIJVER^S^S MOET LIGGEN TUSSEN 0 EN !D.^S' /A054 VUSDFD, TEXT '^P&TYP ^S^SEEN ANDER NUMMER DAN "!D" ALS BESTEMMING.^S' /C054 > IFDEF ITALIAN < VSMALL, TEXT '^P&^S DEFINITO COME ^S !D TROPPO PICCOLO.^S' /C054 VUNASG, TEXT '^P&NON CI SONO ^S DEFINITI COME ^S !D.^S' /C054 SLSDEV, TEXT '/UNIT\@' /A044 SLSVOL, TEXT '/ARCHIVIO DOCUMENTI' /A044 VASKNB, TEXT /^P!E&INTRODURRE IL NUMERO DELL'^S^S CHE CONTIENE IL / /C054 *.-1 /A042 TEXT '^S^S^PDI COPIA' /C044 VPRTGM, /A027 TEXT '^P&PREMERE !&RITORNO ' /A027 *.-1 TEXT "^P&PREMERE &ORO !&MENU PER TORNARE AL &MENU &PRINCIPALE." /M045 VBDNBR, TEXT '^P!E^S^S DEVE ESSERE DA 0 A !D.^S' /A054 VUSDFD, TEXT /^P&USARE UN'^S^S DIVERSA DA "!D" IN USCITA.^S/ /C054 > PSCR, TEXT '^P!E' /A027 CPYMSG, IFDEF ENGLSH < TEXT /^P!L !D &DOCUMENTS &COPIED / > IFDEF SPANISH < TEXT /^P!L !D &DOCUMENTOS &COPIADOS / > IFDEF DUTCH < TEXT /^P!L !D &DOCUMENTEN &GEKOPIEERD./ > IFDEF ITALIAN < TEXT /^P!L !D &DOCUMENTI &COPIATI / > IFDEF CANADA < TEXT "^P!L !D &DOCUMENT(S) COPI[(S) " > IFDEF FRENCH < TEXT "^P!L !D &DOCUMENT(S) COPI[(S) " > /L.A.E IFDEF GERMAN < TEXT "^P!L !D KOPIERTE &DATEIEN " > IFDEF NORWAY < TEXT "^P!L !D DOKUMENTER KOPIERT " > IFDEF SWEDSH < TEXT "^P!L !D DOKUMENTER KOPIERAT " > IFDEF DANISH < TEXT "^P!L !D DOKUMENTER KOPIERET " > CPYMS1, /lines with *.-1 follwing them must contain an even # of chars IFDEF ENGLSH < TEXT '^P!E&REMOVE THE &SYSTEM ^S FROM ^S !D, ' /A045 CPYMSA, TEXT '^P&PLACE THE !S WHICH IS TO RECEIVE THE ' /A049 *.-1 /A049 TEXT 'COPY IN !S !D. ' /A049 > IFDEF SPANISH < TEXT '^P!E&RETIRE EL ^S &SISTEMA DEL ^S !D, ' /A045 CPYMSA, TEXT '^P&COLOQUE EL !S EN EL QUE RECIBIR\A LA ' /A049 *.-1 /A049 TEXT 'COPIA !S !D. ' /A049 > IFDEF DUTCH < TEXT '^P!E&HAAL DE SYSTEEM ^S UIT ^S !D, ' /A045 CPYMSA, TEXT '^P&ZET DE BESTEMMINGS !S IN !S !D.' /A049 > IFDEF ITALIAN < TEXT /^P!E&TOGLIERE DISCO SISTEMA DALL'UNIT\@ !D, / /A045 CPYMSA, TEXT /^P&INSERIRE IL SUPPORTO DI COPIA NELL'UNT\@ !D./ /A049 > IFDEF CANADA < TEXT "^P!E&RETIRER LA DISQUETTE-LOGICIEL DE " *.-1 TEXT "L'UNIT[ DE GAUCHE.^P&INS[RER LA DISQUETTE QUI DOIT" *.-1 TEXT " RECEVOIR LA COPIE DANS L'UNIT[ DE GAUCHE, " > IFDEF FRENCH < TEXT "^P!E&ENLEVEZ LA DISQUETTE SYST]ME DE L'UNIT[ 0^P" /M014 *.-1 TEXT "METTEZ LA DISQUETTE QUI DOIT RECEVOIR LA COPIE DANS L'UNIT[ 0, "/M014 > IFDEF GERMAN < TEXT "^P!E&DIE &SYSTEM &DISKETTE AUS DEM LI > IFDEF DANISH < TEXT "^P!E&FJERN SYSTEMDISKETTEN FRA VENSTRE STATION, " *.-1 TEXT "^P&PLACER DISKETTEN SOM SKAL MODTAGE KOPIEN I VENSTRE STATION." > CPYMSB, IFDEF ENGLSH < TEXT '^P&THE !S MOUNTED IN !S !D WILL RECEIVE THE COPY.'> /A049 IFDEF ITALIAN < TEXT '^P&THE !S MOUNTED IN !S !D WILL RECEIVE THE COPY.'> /A049 IFDEF SPANISH < TEXT '^P&EL !S MONTADO EN !S !D RECIBIR\A LA COPIA.'> /A049 IFDEF DUTCH < TEXT '^P&HET !S OP !S !D ONTVANGT DE KOPIE.'> /A049 CPYMS2, IFDEF ENGLSH < TEXT /^P!E...© &STOPPED / > /A054 IFDEF SPANISH < TEXT /^P!E...&COPIA &DETENIDA / > /A054 IFDEF DUTCH < TEXT /^P!E...&KOPIEERPROCEDURE GESTOPT. / > /A054 IFDEF ITALIAN < TEXT /^P!E...&COPIA &INTERROTTA / > /A054 IFDEF CANADA < TEXT "....ARR^ZT[(S) " > /M010 IFDEF FRENCH < TEXT "BLOQU[" > IFDEF GERMAN < TEXT "....ANGEHALTEN " > IFDEF NORWAY < TEXT "...STOPPET " > IFDEF SWEDSH < TEXT "...STOPPAT " > IFDEF DANISH < TEXT "...STOPPET " > CPYMS3, IFDEF ENGLSH < TEXT "^P!E&DISCARD THE NEW ^S, IT IS FAULTY." > /A045 IFDEF SPANISH < TEXT "^P!E&ELIMINE EL NUEVO ^S, EST\A AVERIADO." > /A045 IFDEF DUTCH < TEXT "^P!E&DE ^S IS ONBRUIKBAAR." > /A045 IFDEF ITALIAN < TEXT "^P!E&IL NOUVO ^S \H INUTILIZZABILE." > /A045 IFDEF CANADA < TEXT "^PDISQUETTE ENDOMMAGE[E, NE PLUS L'UTILISER" > /M010 IFDEF FRENCH < TEXT "^PMAUVAISE DISQUETTE, NE PLUS L'UTILISER" > IFDEF GERMAN < TEXT "^P&DISKETTE DEFEKT" > IFDEF NORWAY < TEXT "^P&DEFEKT DISKETT, M] IKKE BRUKES" /L.D.A > IFDEF SWEDSH < TEXT "^P&DEFEKT DISKETT, KAN INTE ANV[NDAS" /L.U.A > IFDEF DANISH < TEXT "^P&DEFEKT DISKETTE, KAN IKKE BRUGES" > CPYWM3, IFDEF ENGLSH < TEXT "^P!E&WRITE ERRORS. &SELECT A DIFFERENT ^S OR ^S FOR OUTPUT." >/A045 IFDEF ITALIAN < TEXT "^P!E&WRITE ERRORS. &SELECT A DIFFERENT ^S OR ^S FOR OUTPUT." >/A045 IFDEF SPANISH < TEXT "^P!E&ERRORES DE ESCRUTURA. &SELECCIONE UN ^S DIFERENTE O ^S." >/A045 IFDEF DUTCH < TEXT "^P!E&SCHRIJFFOUTEN. &KIES EEN ANDER(E) ^S OF ^S ALS BESTEMMING." >/A045 CPYMS5, IFDEF ENGLSH < TEXT /^P&THIS !S WILL BE OVERWRITTEN. / > /A049 IFDEF SPANISH < TEXT /^P&SE ESCRIBIR\A SOBRE ESTE !S. / > /A049 IFDEF DUTCH < TEXT /^P&BETREFFENDE !S ZAL WORDEN OVERSCHREVEN. / > /A049 IFDEF ITALIAN IFDEF CANADA < TEXT "ELLE SERA R[[CRITE. " > /M010 IFDEF FRENCH < TEXT "&CETTE DISQUETTE SERA R[[CRITE. " > /L.A.E, L.A.E IFDEF GERMAN < TEXT "&DIESE &DISKETTE WIRD ]BERSCHRIEBEN. " > /L.U.U. IFDEF NORWAY < TEXT "&DENNE DISKETT VIL BLI OVERSKREVET. " > IFDEF SWEDSH < TEXT "&DENNA DISKETT KOMMER ATT BLI \VERSKRIVEN. " /L.U.O > IFDEF DANISH < TEXT "&DENNE DISKETTE VIL BLIVE OVERSKREVET. " > CPYMS6, IFDEF ENGLSH < TEXT '^P&REPLACE THE &SYSTEM ^S IN ^S 0, THEN'> /A053 IFDEF ITALIAN < TEXT '^P&REPLACE THE &SYSTEM ^S IN ^S 0, THEN'> /A053 IFDEF SPANISH < TEXT '^P&CAMBIE EL ^S &SYSTEMA EN ^S 0, LUEGO'> /A053 IFDEF DUTCH < TEXT '^P&ZET DE SYSTEEM ^S IN ^S 0.'> /A053 IFDEF CANADA < TEXT "&R[INS[RER LA DISQUETTE-LOGICIEL DANS L'UNIT[ DE GAUCHE." > IFDEF FRENCH < TEXT "&REMETTEZ LA DISQUETTE SYST]ME DANS L'UNIT[ 0." > /L.G.E, L.A.E IFDEF GERMAN < TEXT "&SYSTEM &DISKETTE IM LINKEN &LAUFWERK ERSETZEN," *.-1 TEXT " UND" > IFDEF NORWAY < TEXT "&PLASSER P]NYTT SYSTEMDISKETTEN I VENSTRE " /L.D.A *.-1 TEXT "STASJON, OG RETURNER TIL &HOVEDMENYEN. " > IFDEF SWEDSH < TEXT "&L[GG TILLBAKA SYSTEMDISKETTEN I V[NSTRA " /L.U.A, L.U.A *.-1 TEXT "STATIONEN, OCH RETURNERA TIL &HUVUDMENYN. " > IFDEF DANISH < TEXT "&PLACER SYSTEMDISKETTEN IGEN I VENSTRE STATION, " *.-1 TEXT "OG RETURNER TIL &HOVEDMENUEN. " > IFDEF ENGLSH < CPYMS8, TEXT "!E^P&UNABLE TO ACCESS ^S !D." /A052 CPYMS9, TEXT "^P!E&CHECK THAT THE ^S EXISTS, " /A054 *.-1 TEXT " AND A ^S IS PROPERLY INSERTED.^P^S" /A054 CRSHM2, TEXT "^P!E&THE &DENSITIES OF BOTH ^SS &M&U&S&T BE THE &SAME.^S"/C054 > IFDEF SPANISH < CPYMS8, TEXT "!E^P&IMPOSIBLE ACCEDER A ^S !D." /A052 CPYMS9, TEXT "^P!E&COMPRUEBE QUE ^S EXISTE, " /A054 *.-1 TEXT " Y UN ^S EST\A INSERTADO CORRECTAMENTE.^P^S" /A054 CRSHM2, TEXT "^P!E&LA &DENSIDAD DE LOS DOS ^SS !&HA DE SUR LA MISMA.^S"/C054 > IFDEF DUTCH < CPYMS8, TEXT "!E^P&GEEN TOEGANG TOT ^S !D." /A052 CPYMS9, TEXT "^P!E&CONTROLEER OF DE ^S BESTAAT, " /A054 *.-1 TEXT " EN DE ^S JUIST IS INGEZET.^P^S" /A054 CRSHM2, TEXT "^P!E&DE ^SS MOETEN DEZELFDE DICHTHEID EN OMVANG HEBBEN.^S"/C054 > IFDEF ITALIAN < CPYMS8, TEXT "!E^P&IMPOSSIBLE UTILIZZARE ^S !D." /A052 CPYMS9, TEXT "^P!E&CONTROLLARE SE ^S EXISTE, " /A054 *.-1 TEXT " AND A ^S IS PROPERLY INSERTED.^P^S" /A054 CRSHM2, TEXT "^P!E&LA DENSITA DI ENTRAMBI I DISCHETTI DEVE ESSRE LA STESSA^S^S"/C054 > DECNUM, TEXT /!P!D/ /A055 / DOCDL, IFDEF ENGLSH < TEXT /!P!E&DOCUMENTS #'S NOT COPIED:/ > /A055 IFDEF SPANISH < TEXT /!P!E&DOCUMENTOS #'S NO COPIADOS:/ > /A055 IFDEF DUTCH < TEXT /!P!E&GEWISTE DOCUMENTEN:/ > /A055 IFDEF ITALIAN < TEXT /!P!E&DOCUMENTS #'S NOT COPIED:/ > /A055 IFDEF CANADA < TEXT "^P&DOCUMENTS D[TRUITS: ^P" > /L.A.E IFDEF FRENCH < TEXT "^P&DOC. D[TRUIT(S) :^P" > /L.A.E IFDEF GERMAN < TEXT "^PGEL\SCHTE &DATEIEN: ^P" > /L.U.O. IFDEF NORWAY < TEXT "^P&DOKUMENTER FJERNET: ^P" > IFDEF SWEDSH < TEXT "^P&STRYKNA DOKUMENTER: ^P" > IFDEF DANISH < TEXT "^P&DOKUMENTER FJERNET: ^P" > SNDCOM, TEXT /, / /A055 /Various prompts (and pieces of prompts) for action from the user / IOATSP, TEXT '^P' /M042 / /Various screen messages / VSCRN0, IFDEF ENGLSH < TEXT /^P!E&CHECKING FOR READABILITY.../ /A054 > IFDEF SPANISH < TEXT /^P!E&COMPROBANDO FIABILIDAD.../ /A054 > IFDEF ITALIAN < TEXT /^P!E&CHECKING FOR READABILITY.../ /A054 > IFDEF CANADA < TEXT "^P&V[RIFICATION DE LA LISIBILIT[ DE LA DISQUETTE..." > IFDEF FRENCH < /REMOVED:/ TEXT "^P&V[RIFICATION DE LA DISQUETTE COPI[E..." /L.A.E, L.A.E > IFDEF DUTCH < TEXT "^P&LEESBAARHEIDSTEST..." > IFDEF GERMAN < TEXT "^P&DISKETTE WIRD AUF &LESEFEHLER GEPR]FT" /L.U.U. > IFDEF NORWAY < TEXT "^P&KONTROLLERER DISKETTEN M.H.T. LESBARHET..." > IFDEF SWEDSH < TEXT "^P&KONTROLLERAR DISKETTEN F\R L[SBARHET..." /L.U.A > IFDEF DANISH < TEXT "^P&KONTROLLERER DISKETTEN FOR LESBARHED..." > VSCRN1, IFDEF ENGLSH < TEXT /^P!E^P&VERIFY !S &STRUCTURE / > /A049 IFDEF SPANISH < TEXT /^P!E^P&VERIFIUE &ESTRUCTURA DE !S / > /A049 IFDEF DUTCH < TEXT /^P!E^P&CONTROLE VAN DE !S-INDELING / > /A049 IFDEF ITALIAN < TEXT /^P!E^P&VERIFA &INTEGRIT\@ !S / > /A049 IFDEF CANADA < TEXT "^P!E^P&UTILITAIRE DE V[RIFICATION DE DISQUETTE " > /L.A.E IFDEF FRENCH < TEXT "^P!E^P&V[RIFICATION DE LISIBILIT[ DE LA DISQUETTE " /L.A.E > IFDEF GERMAN < TEXT "^P!E^P&DISKETTE PR]FEN " > /L.U.U. IFDEF NORWAY < TEXT "^P!E^P&KONTROLL AV DISKETTENS ANVENDBARHET " > IFDEF SWEDSH < TEXT "^P!E^P&KONTROLL AV DISKETTENS ANV[NDBARHET " > /L.U.A IFDEF DANISH < TEXT "^P!E^P&KONTROL AF DISKETTENS ANVENDBARHED " > VSCRN2, IFDEF ENGLSH < TEXT /^P!D BLOCKS CHECKED, !D ERRORS DETECTED./ > IFDEF SPANISH < TEXT /^P!D BLOQUE COMPROBADOS, !D ERRORES DETECTADOS./ > IFDEF ITALIAN < TEXT /^PCONTROLLATI !D BLOCCHI, TROVATI !D ERRORS./ > IFDEF CANADA < TEXT "^P!D BLOCS V[RIFI[S, !D ERREUR(S) D[CEL[E(S)"/L.A.E, L.A.E > IFDEF FRENCH < TEXT "^P!D &BLOC(S) V[RIFI[(S), !D &ERREUR(S) D[TECT[E(S)" /L.A.E, L.A.E, L.A.E > IFDEF DUTCH < TEXT "^P!D &BLOKKEN GETEST, !D FOUTEN GEVONDEN." > IFDEF GERMAN < TEXT "^P!D &GEPR]FTE &BL\CKE, !D ENTDECKTE &FEHLER" /L.U.U., L.U.O. > IFDEF NORWAY < TEXT "^P!D BLOKKER KONTROLLERT, !D FEIL FUNNET." > IFDEF SWEDSH < TEXT "^P!D BLOCK KONTROLLERADE, !D FEL UPPT[CKTA." > IFDEF DANISH < TEXT "^P!D BLOKKE KONTROLLERET, !D FEJL OPDAGET." > VSCRN3, IFDEF ENGLSH < TEXT /^P&CHECKING DOCUMENT !D.../ > IFDEF SPANISH < TEXT /^P&COMPROBANDO DOCUMENTO !D.../ > IFDEF DUTCH < TEXT /^P&CONTROLE VAN DOCUMENT !D.../ > IFDEF ITALIAN < TEXT /^P&CONTROLLO DOCUMENTO !D.../ > IFDEF CANADA < TEXT "^P&V[RIFICATION DU DOCUMENT !D..." > /L.A.E IFDEF FRENCH < TEXT "^P&V[RIFICATION DU DOCUMENT !D..." > /L.A.E IFDEF GERMAN < TEXT "^P&PR]FEN &DATEI !D..." > /L.U.U. IFDEF NORWAY < TEXT "^P&KONTROLLERER DOKUMENT !D..." > IFDEF SWEDSH < TEXT "^P&KONTROLLERAR DOKUMENT !D..." > IFDEF DANISH < TEXT "^P&KONTROLLERER DOKUMENT !D..." > VSCRN7, IFDEF ENGLSH < TEXT /^P!E!S "^A" HAS !D DOCUMENTS, !D FREE BLOCKS, !D / /A054 *.-1 TEXT / UNREADABLE BLOCKS./ /C045 > IFDEF SPANISH < TEXT /^P!E!S "^A" TIENE !D DOCUMENTOS, !D BLOQUES LIBRES, !D / /A054 *.-1 TEXT / BLOQUES QUE NO SE PUEDEN LEER./ /C045 > IFDEF DUTCH < TEXT /^P!E!S "^A" BEVAT !D DOCUMENTEN, !D VRIJE EN !D / /A054 *.-1 TEXT / ONLEESBARE BLOKKEN./ /C045 > IFDEF ITALIAN < TEXT /^P!E "^A" CONTIENE !D DOCUMENTI, !D BLOCCHI LIBERI, !D / /A054 *.-1 TEXT / BLOCCHI INUTILIZZABILI./ /C045 > IFDEF CANADA < TEXT '^P&LA DISQUETTE "^A" CONTIENT !D DOCUMENTS, !D BLOCS LIBRES ET !D' > IFDEF FRENCH < TEXT '^P&LA DISQUETTE "^A" A !D DOCUMENT(S),' *.-1 TEXT " !D BLOCS LIBRES, !D BLOC(S) ILLISIBLE(S)" > IFDEF GERMAN < TEXT '^P&LAUFWERK "^A" ENTH[LT !D &DATEIEN, !D' /L.U.A *.-1 TEXT " FREIE &BL\CKE, !D NICHT LESBARE &BL\CKE" /L.U.O, L.U.O > IFDEF NORWAY < TEXT '^P&DISKETT "^A" HAR !D DOKMNT, !D UBRUKTE BLOKKER, ' *.-1 TEXT "!D ULESBARE BLOKKER." > IFDEF SWEDSH < TEXT '^P&DISKETT "^A" HAR !D DOKMT, !D LEDIGA BLOCK, !D OL[SBARA BLOCK.' /L.U.A > IFDEF DANISH < TEXT '^P&DISKETTE "^A" HAR !D DOKMNT, !D LEDIGE BLOKKE, ' *.-1 TEXT "!D UL[SBARE BLOKKE." /"ae" > VSCRNC, IFDEF ENGLSH < TEXT /^P&CHECKING CONSISTENT BLOCK USAGE.../ > IFDEF SPANISH < TEXT /^P&COMPROBANDO CONSISTENCIA DE USE DE BLOQUES.../ > IFDEF ITALIAN < TEXT /^P&CHECKING CONSISTENT BLOCK USAGE.../ > IFDEF CANADA < TEXT "^P&V[RIFICATION D'UN USAGE COH[RENT DES BLOCS..." > /L.A.E, L.A.E IFDEF FRENCH < TEXT "^P&V[RIFICATION DES BLOCS UTILIS[S..." > /L.A.E, L.A.E IFDEF DUTCH < TEXT "^P&CONTROLE OP BLOKGEBRUIK..." > IFDEF GERMAN < TEXT "^P&PR]FEN AUF &BLOCKBELEGUNG..." > /L.U.U IFDEF NORWAY < TEXT "^P&KONTROLLERER BRUK AV BLOKKER..." > IFDEF SWEDSH < TEXT "^P&KONTROLLERAR BRUK AV BLOCK..." > IFDEF DANISH < TEXT "^P&KONTROLLERER BRUG AF BLOKKE..." > VSCRND, IFDEF ENGLSH < /A014 TEXT '^P!E&PUT THE !S TO BE VERIFIED IN !S !D, ' /A049 > /A014 IFDEF SPANISH < /A014 TEXT '^P!E&COLOQUE EL !S QUE VERIFICAR\A EN !S !D, ' /A049 > /A014 IFDEF DUTCH < /A014 TEXT '^P!E&ZET DE TE CONTROLEREN !S IN !S !D. ' /A049 > /A014 IFDEF ITALIAN < /A014 TEXT /^P!E&INTRODURRE !S NELL'!S !D, / /A049 > /A014 IFDEF CANADA < TEXT "!E&INS[RER LA DISQUETTE ^Z V[RIFIER DANS L'UNIT[ DE DROITE " > IFDEF FRENCH < TEXT "!E&METTEZ LA DISQUETTE ^Z V[RIFIER DANS L'UNIT[ 1, " > /L.A.E, L.G.A, L.A.E, L.A.E IFDEF GERMAN < TEXT "!E&ZU PR]FENDE &DISKETTE INS RECHTE &LAUFWERK LEGEN, " /L.U.U > IFDEF NORWAY < TEXT "!E&PLASSER DISKETTEN SOM SKAL KONTROLLERES I H\YRE STASJON. " /L.PHI > IFDEF SWEDSH < TEXT "!E&L[GG DISKETTEN SOM SKA KONTROLLERAS I H\GRA STATION. " /L.U.A,L.U.O > IFDEF DANISH < TEXT "!E&PLACER DISKETTEN SOM SKAL KONTROLLERES I H\JRE STATION. " /L.PHI > VWSCD, IFDEF ENGLSH /A049 IFDEF ITALIAN /A049 IFDEF SPANISH /A049 IFDEF DUTCH /A049 VSCRNE, IFDEF ENGLSH < TEXT /&WHEN READY PRESS &R&E&T&U&R&N &O&R / > IFDEF SPANISH < TEXT /&CUANDO EST\I LISTO PULSE !&RETORNO &O / > IFDEF DUTCH < TEXT /&DRUK OP !&RETURN. / > IFDEF ITALIAN < TEXT /E PREMERE !&RITORNO O / > IFDEF CANADA < TEXT "ET APPUYER SUR &RETOUR &O&U " / TEXT "&O&U " /HOPEFULLY ONLY THE OR IS NEEDED HERE > IFDEF FRENCH < TEXT "&SI TOUT EST CONFORME APPUYER SUR &RETOUR OU " > IFDEF GERMAN < TEXT "&RETURN DR]CKEN ODER " /L.U.U > IFDEF NORWAY < TEXT "&N]R DU ER FERDIG, TRYKK &RETUR ELLER " /L.D.A > IFDEF SWEDSH < TEXT "&N[R DU [R F[RDIG, TRYCK P] &RETUR ELLER " /L.U.A, L.U.A, L.U.A, L.D.A > IFDEF DANISH < TEXT "&N]R DU ER F[RDIG, TRYK &RETUR ELLER " /L.D.A > VSCRNF, IFDEF ENGLSH < TEXT /^P!E&NO ERRORS FOUND. / > /A045 IFDEF SPANISH < TEXT /^P!E&NO ERRORS FOUND. / > /A045 IFDEF ITALIAN < TEXT /^P!E&NO ERRORS FOUND. / > /A045 IFDEF CANADA < TEXT "!E&AUCUNE ERREUR D[CEL[E" > /L.A.E, L.A.E IFDEF FRENCH < TEXT "!E&SANS ERREUR." > IFDEF DUTCH < TEXT "!E&GEEN FOUTEN GEVONDEN. " > IFDEF GERMAN < TEXT "!E&KEINE &FEHLER GEFUNDEN. " > IFDEF NORWAY < TEXT "!E&INGEN FEIL FUNNET," > IFDEF SWEDSH < TEXT "!E&INGA FEL UPPT[CKTA," > IFDEF DANISH < TEXT "!E&INGEN FEJL FUNDET," > VSCRNG, IFDEF ENGLSH < TEXT /&PRESS &GOLD &M&E&N&U TO RECALL THE &MAIN &MENU. / > IFDEF SPANISH < TEXT /&PULSE &DOR. !&MENU PARA VOLVER AL &MEN\Z &PRINCIPAL. / > IFDEF DUTCH < TEXT /&DRUK OP &GOUD !&MENU OM TERUG TE GAAN NAAR HET MENU. / > IFDEF ITALIAN < TEXT /PREMERE &ORO !&MENU PER TORNARE AL &MENU &PRINCIPALE. / > IFDEF CANADA < TEXT "APPUYER SUR &GOLD &MENU POUR RAPPELER LE &MENU PRINCIPAL." > IFDEF FRENCH < TEXT "&TAPER &GOLD &MENU POUR RAPPELER LE &MENU PRINCIPAL" > IFDEF GERMAN < TEXT "MIT &GOLD &MEN] ZUR]CK ZUM &HAUPT &MEN]." /L.U.U, L.U.U, L.U.U > IFDEF NORWAY < TEXT "TRYKK &GUL &MENY FOR ] F] &HOVEDMENYEN. " /L.D.A, L.D.A > IFDEF SWEDSH < TEXT "TRYCK P] &GUL &MENY F\R ATT F] &HUVUDMENYN. " /L.D.A, L.U.O, L.D.A > IFDEF DANISH < TEXT "TRYK &GUL &MENU FOR AT F] &HOVEDMENUEN. " /L.D.A > OPFUL, IFDEF ENGLSH < TEXT '^P!E&THERE IS NOT ENOUGH FREE SPACE ON THE !S TO FINISH. ' /A054 > IFDEF SPANISH < TEXT '^P!E& NO HAY SUFICIENTE ESPACIO EN EL !S PARA TERMINAR. ' /A054 > IFDEF DUTCH < TEXT '^P!E&ONVOLDOENDE RUIMTE OP !S OM VERDER TE GAAN. ' /A054 > IFDEF ITALIAN < TEXT '^P!E&THERE IS NOT ENOUGH FREE SPACE ON THE !S TO FINISH. ' /A054 > IFDEF CANADA < TEXT "^P!E&PLUS D'ESPACE LIBRE SUR LA DISQUETTE POUR TERMINER." > IFDEF FRENCH < TEXT "^P!E&IL N'Y A PLUS ASSEZ DE PLACE SUR LA DISQUETTE." > IFDEF GERMAN < TEXT "^P!E&NICHT GEN]GEND FREIER &PLATZ AUF DER &DISKETTE." /L.U.U > IFDEF NORWAY < TEXT "^P!E&DET ER IKKE NOK PLASS P] DISKETTEN TIL ] BLI FERDIG." /L.D.A, L.D.A > IFDEF SWEDSH < TEXT "^P!E&DET [R INTE PLATS P] DISKETTEN F\R ATT BLIVE F[RDIG." /L.U.A, L.D.A, L.U.A, L.U.O, L.U.A > IFDEF DANISH < TEXT "^P!E&DET ER IKKE PLADS P] DISKETTEN TIL AT BLIVE F[RDIG." /L.D.A, "ae" > /D055VSCRNK, /D055IFDEF ENGLSH < TEXT /^P&REPEATING THE COPY A DIFFERENT WAY. / > /A045 /D055 /D055IFDEF ITALIAN < TEXT /^P&REPEATING THE COPY A DIFFERENT WAY. / > /A045 /D055IFDEF CANADA < TEXT "&REPRENDRE LA TRANSCRIPTION DIFF[REMMENT" > /L.A.E /D055IFDEF FRENCH < TEXT "REFAIRE LA COPIE DIFF[REMMENT" > /L.A.E. /D055IFDEF DUTCH < TEXT "NOGMAALS OP ANDERE WIJZE KOPI^ZREN " /L.U.E> /D055IFDEF GERMAN < TEXT "&DAS &KOPIEREN AUFS &NEUE VERSUCHEN " > /D055IFDEF NORWAY < TEXT "KOPIERER IGJEN P] ANNEN M]TE. " > /L.D.A, L.D.A /D055IFDEF SWEDSH < TEXT "KOPIERAR IGEN P] ANNAT S]TT. " > /L.D.A /D055IFDEF DANISH < TEXT "KOPIERER IGEN P] ANDEN M]DE. " > /L.D.A, L.D.A /D055 /D055VSCRNL, /D055IFDEF ENGLSH < /D055 TEXT /^P!E&THE COPY IS DONE, BUT YOU MUST / /D055*.-1 /D055 TEXT /REPEAT THE VERIFY ON THE NEW !S./ /A049 /D055> /D055IFDEF CANADA < /D055 TEXT "^P!E&LA TRANSCRIPTION EST FAITE, MAIS IL FAUT REPRENDRE " /D055*.-1 /D055 TEXT "LA V[RIFICATION DE LA NOUVELLE DISQUETTE." /D055> /D055IFDEF FRENCH < /D055 TEXT "^P!E&LA COPIE EST FINIE, REFAIRE LA " /D055*.-1 /D055 TEXT "V[RIFICATION DE LA NOUVELLE DISQUETTE "/L.A.E /D055> /D055IFDEF DUTCH < /D055 TEXT "^P!E&KOPI^ZREN GEREED, CONTROLEER NIEUWE DISKETTE "/L.U.E /D055> /D055IFDEF GERMAN < /D055 TEXT "^P!E&FERTIG MIT &KOPIEREN. &VERIFIZIEREN WIEDERHOLEN. " /D055> /D055IFDEF NORWAY < /D055 TEXT "^P!E&KOPIERINGEN ER FERDIG, MEN DU M] P]NYTT KONTROLLERE" /L.D.A, L.D.A /D055*.-1 /D055 TEXT " DEN NYE DISKETTEN" /D055> /D055IFDEF SWEDSH < /D055 TEXT "^P!E&KOPIERINGEN [R F[RDIG, MEN DU M]STE IGEN " /L.U.A, L.U.A, L.D.A /D055*.-1 /D055 TEXT "KONTROLLERA DEN NYA DISKETTEN" /D055> /D055IFDEF DANISH < /D055 TEXT "^P!E&KOPIERINGEN ER FERDIG, MEN DU M] IGEN KONTROLLERE" /L.D.A, L.D.A /D055*.-1 /D055 TEXT " DEN NYE DISKETTEN" /D055> VSCRNM, IFDEF ENGLSH < TEXT "^P!E&YOUR !S HAS ERRORS," /A049 *.-1 /A049 TEXT " TO CORRECT THEM YOU MUST COPY THE !S." /A049 > IFDEF SPANISH < TEXT "^P!E&YOUR !S HAS ERRORS," /A049 *.-1 /A049 TEXT " PARA CORREGIRLO SE HA DE COPIAR EL !S." /A049 > IFDEF DUTCH < TEXT "^P!E&!S HEEFT FOUTEN. &CORRIGEER DOOR VAN !S EEN KOPIE TE MAKEN." > IFDEF ITALIAN < TEXT "^P!E&YOUR !S HAS ERRORS," /A049 *.-1 /A049 TEXT " TO CORRECT THEM YOU MUST COPY THE !S." /A049 > IFDEF CANADA < TEXT "!E&VOTRE DISQUETTE CONTIENT DES ERREURS; POUR LA CORRIGER," *.-1 TEXT " APPUYER SUR &RETOUR" > IFDEF FRENCH < TEXT "!E&VOTRE DISQUETTE A DES ERREURS, " *.-1 TEXT "POUR LES ENLEVER, COPIER LA DISQUETTE" > IFDEF GERMAN < TEXT "!E&IHRE &DISKETTE IST FEHLERHAFT, " *.-1 TEXT "ZUR &KORREKTUR DIE &DISKETTE KOPIEREN." > IFDEF NORWAY < TEXT "!E&DIN DISKETT HAR FEIL," *.-1 TEXT " FOR ] RETTE DISSE M] DU KOPIERE DISKETTEN. " /L.D.A, L.D.A > IFDEF SWEDSH < TEXT "!E&DIN DISKETT HAR FEL, " *.-1 TEXT "F\R ATT KORRIGERA M]STE DU KOPIERA DISKETTEN. " /L.U.O, L.D.A > IFDEF DANISH < TEXT "!E&DIN DISKETTE HAR FEJL, " *.-1 TEXT "FOR ] KORRIGERE DISSE M] DU KOPIERE DISKETTEN. " /L.D.A, L.D.A > VSCRNN, IFDEF ENGLSH < TEXT /&TO DO THIS PRESS &R&E&T&U&R&N &O&R / > IFDEF SPANISH < TEXT /&PARA HACER ESTO, PULSE !&RETORNO &O / > IFDEF DUTCH < TEXT /&DRUK HIERVOOR OP !&RETURN. / > IFDEF ITALIAN < TEXT /&TO DO THIS PRESS &R&E&T&U&R&N &O&R / > IFDEF CANADA < TEXT "&APPUYER SUR &RETOUR AFIN DE LA RECOPIER &O&U " /M010 > IFDEF FRENCH < TEXT "EN APPUYANT SUR &RETOUR OU " > IFDEF GERMAN < TEXT "&DAZU &RETURN DR]CKEN ODER " /L.U.U. > IFDEF NORWAY < TEXT "&FOR ] GJ\RE DETTE, TRYKK &RETUR ELLER " /L.D.A, L.PHI > IFDEF SWEDSH < TEXT "&F\R ATT G\RA DETTA, TRYCK P] &RETUR ELLER" /L.U.O, L.U.O, L.D.A > IFDEF DANISH < TEXT "&FOR ] LAVE DETTE, TRYK &RETUR ELLER" /L.D.A > VSNULL, 0000 /The null text IFDEF ENGLSH < CBLKNB, TEXT '^P!L&CHECKING BLOCK NUMBER !D' /C054 ISDRVE, TEXT '&DRIVE' /A042 ISDEV, TEXT '&DEVICE' /A042 ISVOL, TEXT '&VOLUME' /A042 ISDSKT, TEXT '&DISKETTE' /A042 UTMSG, TEXT '^P!E&VERIFY COMPLETED ON THIS &UTILITY !S.' /A053 BEWARE, TEXT '^P!E**&CAUTION** &THIS !S MAY NOT BE IN &W&P&S FORMAT.'/A054 EXBLK, TEXT '^P!E&ONLY THE FIRST 2000 BLOCKS WILL BE CHECKED.' /A054 NOT0V, TEXT '^P!E© IS NOT PERMITTED TO THE SYSTEM ^S.^S' /A054 NORX50, TEXT '^P!E&THE IMAGE IN ^S !D IS TOO LARGE FOR A ^S.' /A054 NORX5A, TEXT '^P!E&USE A MOUNTED ^S YOU NO LONGER NEED WITH !D BLOCKS OR MORE.' TRYAGN, TEXT ' &TRY AGAIN.' /A054 FMTERR, TEXT '^P &ERROR &CYLINDER &HEAD &SECTOR'/A054 HDERR, TEXT '^P!D^P!D' /A054 PTRCPY, TEXT '^P&PLEASE PRESS &PRINT &SCREEN TO RECORD THE ERROR INFORMATION.' > IFDEF ITALIAN < CBLKNB, TEXT '^P!L&CHECKING BLOCK NUMBER !D' /C054 ISDRVE, TEXT 'UNIT\@' /A042 ISDEV, TEXT 'UNIT\@' /A042 ISVOL, TEXT 'SUPPORTO' /A042 ISDSKT, TEXT 'SUPPORTO' /A042 UTMSG, TEXT '^P!E&VERIFY COMPLETED ON THIS &UTILITY !S.' /A053 BEWARE, TEXT '^P!E**&CAUTION** &THIS !S MAY NOT BE IN &W&P&S FORMAT.'/A054 EXBLK, TEXT '^P!E&ONLY THE FIRST 2000 BLOCKS WILL BE CHECKED.' /A054 NOT0V, TEXT '^P!E© IS NOT PERMITTED TO THE SYSTEM ^S.^S' /A054 NORX50, TEXT '^P!E&THE IMAGE IN ^S !D IS TOO LARGE FOR A ^S.' /A054 NORX5A, TEXT '^P!E&USE A MOUNTED ^S YOU NO LONGER NEED WITH !D BLOCKS OR MORE.' TRYAGN, TEXT ' &TRY AGAIN.' /A054 FMTERR, TEXT '^P &ERROR &CYLINDER &HEAD &SECTOR'/A054 HDERR, TEXT '^P!D^P!D' /A054 PTRCPY, TEXT '^P&PLEASE PRESS &PRINT &SCREEN TO RECORD THE ERROR INFORMATION.' > IFDEF SPANISH < CBLKNB, TEXT '^P!L&COMPROBANDO BLOQUE N\ZMERO !D' ISDRVE, TEXT '&UNIDAD' ISDEV, TEXT '&DISPOSITIVO' ISVOL, TEXT '&VOLUMEN' ISDSKT, TEXT '&DISKETTE' UTMSG, TEXT '^P!E&VERIFICACION TERMINADA EN ESTE !S &UTILITY.' BEWARE, TEXT '^P!E**&PRECAUCI\SN** &ESTE !S PUEDE NO TENER FORMATO &W&P&S.' EXBLK, TEXT '^P!E&S\SLO SE COMPROBAR\AN LOS PRIMEROS 2000 BLOQUES.' NOT0V, TEXT '^P!E&LA COPIA NO EST\A PERMITIDA EN ESTE ^S SISTEMA.^S' NORX50, TEXT '^P!E&LA IMAGEN EL EL ^S !D ES MUY GRANDE PARA UN ^S.' NORX5A, TEXT '^P!E&USE UN ^S INNECESARIO CON !D BLOQUES O M\AS.' TRYAGN, TEXT ' &INT\INTELO OTRA VEZ.' FMTERR, TEXT '^P &ERROR &CILINDRO &CABEZA &SECTOR' HDERR, TEXT '^P!D^P!D' /A054 PTRCPY, TEXT '^P&PULSE &IMPRIMIR &PANTALLA PARA REGISTRAR LA ' *.-1 TEXT 'INFORMACI\SN DE ERROR.' > IFDEF DUTCH < CBLKNB, TEXT '^P!L&BLOK NUMMER !D WORDT GECONTROLEERD.' ISDRVE, TEXT 'AANDRIJVER' /A042 ISDEV, TEXT 'AANDRIJVER' /A042 ISVOL, TEXT 'GEBIED' /A042 ISDSKT, TEXT 'DISKETTE' /A042 UTMSG, TEXT '^P!E&CONTROLE OP !S VOLTOOID.' /A053 BEWARE, TEXT '^P!E--&OPGELET-- &!S MOGELIJK NIET IN &W&P&S GEFORMATTEERD.'/A054 EXBLK, TEXT '^P!E&ALLEEN DE EERSTE 2000 BLOKKEN WORDEN GECONTROLEERD.' /A054 NOT0V, TEXT '^P!E&KOPIE NAAR SYSTEEM^S NIET TOEGESTAAN.^S' /A054 NORX50, TEXT '^P!E&KOPIE IN ^S !D TE GROOT VOOR ^S.' /A054 NORX5A, TEXT '^P!E&GEBRUIK EEN ^S MET !D OF MEER BLOKKEN.' TRYAGN, TEXT ' &PROBEER OPNIEUW.' /A054 FMTERR, TEXT '^P &FOUT &CYLINDER &KOP &SECTOR'/A054 HDERR, TEXT '^P!D^P!D' /A054 PTRCPY, TEXT '^P&DRUK OP !&SCHERMAFDRUK OM DE INFORMATIE VAST TE LEGGEN.'/A054 > LUC=.-1 /LAST LOCATION USED /A049   / .TITLE CPYDSK - COPY DISKETTE / .VERSION / / / / COPYRIGHT (C) 1983 / DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASSACHUSETTS 01754 / / THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED / ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE / INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER / COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY / OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY / TRANSFERRED. / / THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE / AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT / CORPORATION. / / DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS / SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL. / /++ / FACILITY: / / ABSTRACT: / / ENVIRONMENT: / / AUTHOR: CREATION DATE: / / 086 EMCD 11-SEP-85 Include Nordic translations / conditionalised / 085 DFB 08-NOV-84 FIX TO FIX BREAK IN VER83/84(NTS) / 084 DFB 02-NOV-84 Fix to copy all tracks in backup / ....(broke in ver 083) / 083 DFB 24-OCT-84 Fix copy volume(l.t. 800 blks) to flpy / 082 WCE 19-SEP-84 Change HOME block date to BUILD date / 081 DFB 18-SEP-84 Fix drive 0 check after I/O err / 080 EJL 10-SEP-84 Fix 8"<->5" not compatable error msg / 079 DFB 01-AUG-84 Fix to rewrite when err on read verify / 078 DFB 01-AUG-84 Fix to rewrite when err on read verify / 077 WJY 31-JUL-84 Don't allow "another" copy when dest is / a volume. bug WPSV2-122 / 076 DFB 22-MAR-84 Fix to init doc and systems / 8, or 9 mounted at winnie boot / 075 DFB 28-FEB-84 Allows 2000 block docs and system / 074 DFB 03-DEC-83 Add winnie system initialize / 073 WJY 17-JAN-84 Move menu code to MN1. / 072 WJY 16-JAN-84 Change to assemble in Field 2 so that / 071 HLP 03-NOV-83 Fix bug in STDBL put in on 068 and / Rewrite STDBL to handle small numbers / of blocks remaining on system disk / 070 WJY 02-NOV-83 Change to use different DSKQUE routine / to avoid inappropriate time display. / 069 WJY 12-OCT-83 Fix MC-S bug. Left out the code in edit / 67 which adds in the SECWRP parameter when / resetting the sector # after a wrap. / 068 HLP 11-OCT-83 Fix STDBL to have correct alloc blk if / DLEND># disk blocks (no blocks avail) / 067 WJY 01-OCT-83 Modified backup to use 2 full fields as / buffers. Allows a full track to be acted / on at once. / 066 WJY 30-SEP-83 DMII V1.5 WINCHESTER SUPPORT / *NOTE* A decision was made to call areas / devices instead. Since device is / already used exstensively in the / comments I left area in the comments / and only changed the TEXT statements. / 065 WCE 06-SEP-83 Added WINNIE conditional to fix load / problem with new WPSYSA module / 064 WCE 03-SEP-83 Changed RZ IOT's to standard RX IOT's / 063 WCE 31-AUG-83 Changed limit that system initialization / uses for reading end of disk so that / larger WPDL's can be used on S.D. disks / 062 WCE 07-JUL-83 Replaced occurances of SYS+value in case / statements with standard menu definitions / 061 HLP 20-JUN-83 Delete extra "and" in "Type D for document / or S for System and And Press RETURN / Writeout changes to save 3 blocks / 060 HLP 29-APR-83 Repaint entire screen after B finds / different densities so menu title changes / (ref DM-I V2.1 bug #76) /-------RELEASED FOR DECMATE-II V1.0----------- / 059 GJP 09-DEC-82 Make the message that there was an / error while trying to format appear / on the screen. It was being overwritten. / 058 HLP 15-NOV-82 Fix "for another..." function / 057 HLP 10-NOV-82 Modify CHKID to verify name and ID / Let maintenance menu title stay on / Consolidate Error messages / 056 HLP 04-NOV-82 Install Menu to check for "COPY" / Changed all JMP CPYDS1 to JMP CPYDS2 / 055 HLP 02-NOV-82 Fix display Menu.enu. after B 4 5 / 054 HLP 27-OCT-82 2nd fix to prevent elapsed time clock flash / 053 HLP 18-OCT-82 MNTMP1=6 means display no 8" system init / Added CPDFSZ code to detect different / diameter for menu on backup / 052 HLP 08-OCT-82 No elapsed time flash if no disk in drv / 051 HLP 30-SEP-82 Minor changes to TEXT26 / 050 DFB 26-SEP-82 Fix to write out track 0 / 047 HLP 15-SEP-82 Changed RX-50 Backup interleave to 3 / 046 HLP 31-AUG-82 Made free blocks use worst case pattern / 045 HLP 27-AUG-82 Generalized RXHAN error handling / Data verify RX-50 S & D only / 044 HLP 26-AUG-82 Added read verify by compare / functions for S and D / Made Allocation block generation more / general (now able to allocate by blk #) / 043 HLP 09-AUG-82 Disable UDKs during a Backup so user / can't destroy his system disk / Read Verify Boot Sectors on S / 042 HLP 23-JUL-82 Write RX50 boot header properly / Always use CDFMYF+10 for buffer field / Handle S cases (8-8,8-5,5-5,5-8) properly / 041 HLP 22-JUL-82 Allow only D init after FS or FD in CONDOR / 040 HLP 19-JUL-82 Copy track 0 on System initialization / Copy firmware only if DRVSRC is 8" / / 039 HLP 08-JUL-82 Deleted temporary routine FMTPCH / Deleted Copyfirmware part of Sys init. / (using separate boot disk with firmware) / (kept system disk smaller than doc disk) / / 038 HLP 06-JUL-82 Added temporary routine FMTPCH to patch / DM-II system disks during development / Fixup Drive not Ready msg / JMS FMTQRX in CPYIO--wrong error message / during Backup (B) / / 037 HLP 24-JUN-82 Do not allow 8" System disks to be made / if system drive is 5" / Do not copy firmware if dest drive is 8" / Copy track zero on RX-50 S or D / / 036 HLP 16-JUN-82 Fixed up exit routines and messages / Added DCA DRV in GTDKID / Deleted DCA DRV, GETDNS in CHKID / / 035 HLP 15-JUN-82 Changed to allow different number of / blocks for System, Document, and S-D / clear/verify. / On RX-50 TO RX-50 S Command, image copy / tracks 78 and 79 (firmware). / Corrected wrong track number on RX01 / last two sector writeout & vfy / Changed RX50 interleave factor to 2 / / 034 HLP 20-MAY-82 Conditionalized Piracy Protection code / Piracy Protection Can Be re-installed / by defining PIRATE (as long as / space wars do not result) / / 033 HLP 19-MAY-82 Pick up drive numbers from MN1 / Make New Backup Copy Menus / Allow S only if drive 0 is 8 inch / Allow 5 inch Backup of only D diskettes / After format an RX01 or RX02, query / S or D only if system drive is 8 inch, / otherwise assume D and ask for NAME. / Eliminated CLSCRN routine by combining / PSCR text into TEXT11 / 032 HLP 06-MAY-82 Modifications for MAY 10th announcement of Condor / Drive number selection by the following: / S & D: Use drive 2 if drive 0 / is an RX01 or RX02 / B: Drive 1 to Drive 0 / Adding Templates for both RX01/02 / and RX50 boots. Deleted RDBOOT / New STDBL Routine / Modifying BACKUP for RX50 / RX02 Interleave FACTOR changed from 4 / to 5 to make relatively prime to 26 / 031 HLP 13-APR-82 Extensive Rewrite to Eliminate All / Templates and Have only one Buffer / New Routines: RDBOOT, WRBOOT, FMTDIR, CLABUF / Deleted all Previous /D031 Lines / Moved FMTBUF to end, after text / Moved all messages to text area / Deleted all unreferenced labels / General cleanup / 030 DFB 28-MAR-82 FIX initialize doc/sys error mssge. / 029 DFB 25-MAR-82 Change format error mssge. / 028 DFB 05-MAR-82 Fix format error mssge. / 027 DFB 23-FEB-82 Set verify read during init sys and doc / 026 GDH 22-FEB-82 Moved storage of system disk id up front / so that functions other than "copy" / will back out properly. / 025 DFB 21-FEB-82 Set verify read during backup copy / And set interleave dd=4 sd=3 for bkupcpy / 024 GJP 08-FEB-82 On backup copy, won't recognize system / diskette when copying two times / 023 DFB 01-FEB-82 Reset dble dens interleave=3 / 022 DFB 28-JAN-82 Dble dens interleave=2 / 021 DFB 14-JAN-82 Do 8 bit copy for dd(image copy) / 020 DFB 11-JAN-82 FIX TO CHECK ERR CODE BEFORE NOT RDY / Delete error recovery / 019 DFB 10-JAN-82 Fix to check device ready & d / delete error msg."print r to continue" / 018 DFB/GDH 14-DEC-81 Fix to add doc. diskette message on boot / and to eliminate partial time display / during backup message display / 017 DFB 20-NOV-81 RETURN TO MAIN MENU DURING COPY ONLY / IF LAST WORD OF SYSTEM DISK ID SAME / 016 GDH 18-NOV-81 WRITE-OUT BOOT BLOCK TO DOC DISKETTE / IN 12 BIT MODE (JUST LIKE SYS DISKETTE) / 015 DFB 04-NOV-81 DBLE DENS INTERLEAVE TO 3(SAME AS SD) / 014 GJP/DFB 29-OCT-81 DBLE DENSITY CHANGES FUNCTIONS / 013 GDH 29-OCT-81 BACKUP DISKETTE MENU CHANGES. / 012 GDH 20-OCT-81 DE-IMPLEMENTED LOCK/UNLOCK CODE. / 011 TT 07-JUL-81 REMOVED SUPERFLUOUS CONDITIONALS. / 010 AJF 22-APR-81 CHANGED LEFT DRIVE TO DRIVE 0 / AND RIGHT DRIVE TO DRIVE 1 / 009 DSS 03-DEC-80 FIXED CURSOR POSITIONING IN 'TIMMSG' / WHICH MYSTERIOUSLY VANISHED IN THE / SCANDINAVIAN/EUROPEAN MERGE. / 008 DAO 28-OCT-80 CHANGED VT278 TO WRITE OUT EVERY THIRD / SECTOR IN DOCUMENT COPY ROUTINE SINCE / IT IS SO SLOW / 007 DM,JM 15-SEPT-80 MERGED SCANDI AND EUROPE/ENGLISH / 006 REG 12-AUG-80 ADDED THIS STANDARD HEADER / 005 CMW 06-AUG-80 MADE GRAMMATICAL CHANGES FOR DUTCH / 004 DSS 09-JUL-80 MODIFIED FOR ENGLISH/FRENCH-CANADIAN / 003 CMW 05-MAY-80 ENTERED CANADA TRANSLATIONS / 002 DSS 14-APR-80 ENTERED DUTCH FIXES / 001 CMW GLT 14-JAN-80 ADD FRENCH GERMAN DUTCH CONDITIONAL CODE / / FRENCH DIACRITICAL SUBSTITUTIONS: "["=L.A.E, "]"=L.G.E; "&" NOT USED / GERMAN DIARCITICAL SUBSTITUTIONS: "["=L.U.A, "]"=L.U.U, "\"=L.U.O; "&"=U.C. / / 2.5 KEE 10/18/77 ADD UNLOCKS FOR 102 SYSTEMS / 2.G-1 MB CHANGE FOR THE MOVE OF THE INPUT BUFFER IN MENU / /-- / / .COMP CPYDSK MEDDST / PTR TO "DISKETTE" OR "VOLUME" STRING /A066 / CIFMNU JMS I IOACAL / "PLACE THE DISKETTE WHICH IS TO RECIEVE THE COPY INTO DRIVE !D." / OR "THE VOLUME NAMED..." IF WINNIE /A066 0 / DEFAULT OUTPUT ROUTINE RCVTXT, 0 / ADDRESS OF STRING /M066 1316 / CURSOR POSITION RCVID, 0 / POINTER TO DRIVE NUMBER OR VOLUME NAME/A033/A066 / IFNDEF ITALIAN < CIFMNU JMS I IOACAL / "USE A BLANK DISKETTE OR A USED DISKETTE YOU NO LONGER NEED." 0 / DEFAULT OUTPUT ROUTINE TEXT1F / ADDRESS OF STRING 1416 / CURSOR POSITION MEDDST /A066 MEDDST /A066 > / CIFMNU JMS I IOACAL / "DRIVE !D - SOURCE DRIVE - THIS DISKETTE WILL BE READ." 0 / DEFAULT OUTPUT ROUTINE TEXT1G / ADDRESS OF STRING 1704 / CURSOR POSITION DEVSRC / PTR TO "DRIVE" OR "AREA" TEXT STRING /A066 DRVSRC / POINTER TO DRIVE NUMBER /A033 IFNDEF ITALIAN < DEVSRC / /A066 > MEDSRC / PTR TO "DISKETTE" OR "VOLUME" STRING /A066 / CIFMNU JMS I IOACAL / "PLACE THE DISKETTE WHICH IS TO BE COPIED INTO DRIVE !D." / OR "THE VOLUME NAMED..." IF WINNIE /A066 0 CPYTXT, 0 /M066 2116 CPYID, 0 / POINTER TO DRIVE NUMBER OR VOLUME NAME/A033/M066 / CIFMNU JMS I IOACAL / "WHEN YOU ARE READY TYPE COPY AND PRESS RETURN" 0 TEXTG3 / GENERAL PURPOSE -- 3 SUBSTRINGS /A036 2404 TEXT1I / WHEN YOU ARE READY TYPE COPY ... /C036 / 2604 TEXT33 / "OR, " /C036 / IFNDEF ITALIAN <2610> / /C036 IFDEF ITALIAN <2604> TEXT15 / "Press Gold ... /A033 2700 / POSITION FOR CURSOR AFTER MSG /A033 / TAD (TEXT1K) / SET UP CPYCON "FOR ANOTHER COPY" /A057 DCA CPYCON / /A057 / NOW DISABLE UDKS SO USER WON'T DESTROY HIS SYSTEM DISK /A043 / Test for drive in subroutine - for space reasons /A077 /d077 TAD DRVDST / ONLY IF DESTINATION DRIVE IS DRIVE 0 /A043 /d077 SNA CLA /A043 /C075 JMS CLRUDK /DISABLE UDK IF DEST DRIVE=0 /A075 CONT3, /A043 JMS CHKCCM / SEE IF STRING "COPY" WAS ENTERED /C056 SPA CLA / SEE IF NEET TO REPAINT /A056 JMP CONT2 / YES, GO REPAINT /A056 JMS DTDEN / DETERMINE DENSITIES AND SET INTERLVE FACTOR JMP CONT / DENSITIES WERE WRONG, REPAINT /A060 JMS TIMMSG / PRINT TIME MESSAGE JMS GETTIM / INITALIZE THE TIME TAD DENSRC /SOURCE DENSITY FACTOR IN BACKUP COPY /A075 JMS DSKSZE /SIZE IT NEEDED FOR WINNIE /A074 JMS SHFDEN /SET SHIFTED DENSITY CODE /A074 JMS CKDKSZ /CHECK SRCE-DEST SIZE /A074 NOP /ERR RET IF SRC G.T. DST /A074 JMS SETPAR / SET PARAMS FOR BACKUP COPY /A021 JMS CPYTKS / GO COPY TRACKS /A035 TAD WINDST / Did we copy to a VOLUME ? /A077 SZA CLA / No: Let the user do another copy /A077 JMP CPYGMO / Yes: No point in copying again - EXIT /A077 /***********************************************************************/ / / / CPYEXT--GETTING READY TO EXIT CPYDSK / / FIRST CHECK WITH OPERATOR / / TO SEE IF "ANOTHER" IS REQUIRED / / / /***********************************************************************/ CPYEXT, JMS CPYEXA / SPACE WARS MOVE /C021 JMS WTFRRS / WAIT FOR A RESPONCE FROM THE USER JMP SCONS1 / HE TYPED RETURN, DO THE COPY AGAIN /C024 / HE TYPED GOLD MENU, GO TO CPYDS2 /A036 / CPYDS2, /A024 CPYGMO, / GOLD MENU OUT OF CPYDSK /A056 JMS CHKID / GO CHECK THE ID OF THE DISK IN DR 0 /A024 CPYDS1, XX / RETURN CIF, FILLED IN DURING EXECUTION JMP I CPYDSK /-------------------- PAGE /***********************************************************************/ / / / CPYTKS--SUBROUTINE MADE OUT OF LOOPA CODE V035 / / COPIES ENTIRE TRACKS FROM DRVSRC TO DRVDST / / READ VERIFIES WRITTEN INFO / / FIRST TRACK--FMTQBK+RXQTRK / / LAST TRACK --TRKMXK / / OTHER PARAMETERS MENTIONED IN SETPAR MUST BE SET UP / / / /-----LATER SOLUTION--SHOULD FIRMWARE TRACKS BE IGNORED WHEN /------DOING A SYSTEM INIT-----CURRENTLY IGNORES SAME----- /***********************************************************************/ CPYTKS, XX / COPY TRACKS SUBROUTINE /A035 DCA SVBLOC / CLEAR SAVED WINNIE BLOCK # /A066 /D074 AC7777 / TEST FOR MIXED MEDIA /A066 TAD WINSRC / /A066 SZA CLA /WINNIE /A074 JMP CPYTK1 /YES SKIP FIRST TRACK /ADFB /D074 AC7777 TAD WINDST / /A066 SZA CLA / WINNIE? /C074 CPYTK1, ISZ FMTQBK+RXQTRK / YES IGNORE FIRMWARE /A066 LOOPA, AC0001 / SECTOR NUMBER /A032 DCA SECTOR / INITIALIZE SECTOR NUMBER /A032 TAD CPYPSK / GET PASS COUNT KONSTANT /A032 DCA CPYCNT / AND LOAD INTO ISZ COUNTER /A032 INLOOP, /D067 JMS SECADJ / GO SEE IF MUST ADJUST SECTOR NUMBER /A032 TAD DRVSRC / GET SOURCE DRIVE NUMBER /C033 DCA FMTQBK+RXQDRV / AND STORE IT TAD CPYRD / SET THE REQUEST TO BE A PHYSICAL READ /A025 DCA FMTQBK+RXQFNC TAD SECTOR / SAVE /A025 DCA SVSECT /A025 JMS CPYIO / READ A BUFFERFULL OF SECTORS TAD DRVDST / LOAD DESTINATION DRIVE NUMBER /A033 DCA FMTQBK+RXQDRV / AND STORE IT /M025 TAD CPYWRT / REQUEST A WRITE PHYSIO OF THE DATA JUST READ JMS CPYSET / SET FNC AND WRITE /A025 CLA CLL CML RTR / 2000=VERIFY MODE /A025 TAD CPYRD / SET READ VERIFY MODE /A025 JMS CPYSET /A025 / ISZ CPYCNT / ALL PASSES COMPLETE FOR THIS TRK? /A021 JMP INLOOP / GO DO NEXT PASS /A032 / TAD SECMXK / WE HAVE DONE A "TRACK OF BLOCKS" /A066 CIA / SO BUMP UP THE BLOCK NUMBER /A066 TAD SVBLOC / AC=SAVED BLOCK # + NO. SECTOR/TRACK /A066 DCA SVBLOC / N.B.--- SECTOR=BLOCK /A066 TAD FMTQBK+RXQTRK / SEE IF ALL TRACKS WERE TRANSFERRED /M031 TAD TRKMXK / LOAD NEGATIVE MAXIMUM TRACK NUMBER /M032 SZA ISZ FMTQBK+RXQTRK / BUMP TRACK NUMBER /A032 SZA CLA / /A032 JMP LOOPA / NO, GO DO NEXT TRACK /A021 JMP I CPYTKS / RETURN /A035 /***********************************************************************/ / / / CPYSET--AC CONTAINS FUNCTION CODE ON ENTRY / / IT SETS THE CODE THEN RESETS THE SECTOR COUNT /A025 / THEN PERFORMS THAT FUNCTION ON AS MANY SECTORS THAT /A025 / IS CONTAINED IN CPYNOS /A025 / / /***********************************************************************/ CPYSET, XX /A025 DCA FMTQBK+RXQFNC / SET FUNCTION CODE /A025 TAD SVSECT / GET SAVED SECTOR NUMBER /A021 /M025 DCA SECTOR / AND DO THIS SET OF SECTORS AGAIN /A021/M025 JMS CPYIO / GO DO A PASS /A021 /M025 JMP I CPYSET / RETURN /A025 /***********************************************************************/ / / / SETPAR--SET PARAMETERS FOR BACKUP COPY: / / CPYNOS..........NUMBER OF SECTORS PER PASS / / CPYLNT..........BUFFER LENGTH / / CPYPSK..........NUMBER OF PASSES PER TRACK / / FACTOR..........SECTOR INTERLEAVE FACTOR / / FMTQBK+RXQTRK..........FIRST TRACK NUMBER / / TRKMXK..........LAST TRACK NUMBER / / SECMXK..........LAST SECTOR NUMBER FOR GTSECT / / REWRITTEN FOR TABLE STRUCTURE HLP /M032 / / SECWRP..........FACTOR ADDED TO SECTOR # AFTER A WRAP /A067 / PREVENTING REUSING A SECTOR # /A067 / NOTE: WHEN THE NUMBER OF SECTORS/TRACK AND THE INTERLEAVE HAVE /A067 / NO COMMON DIVISOR BESIDES 1 ("RELATIVE PRIMES") A WRAP /A067 / ALWAYS GIVES AN UNUSED SECTOR # SO SECWRP IS SET TO 0 /A067 / WHEN THEY ARE NOT RELATIVE PRIMES, ONE MUST BE ADDED TO /A067 / THE SECTOR # GENERATED AFTER A WRAP TO PREVENT REUSE OF /A067 / A SECTOR #, THUS SECWRP IS SET TO 1 IN THESE CASES /A067 / WHEN CHANGING THE INTERLEAVE OR ADDING A NEW DEVICE THE /A067 / APPROPRIATE ENTRY MUST BE MADE FOR THE SECWRP VALUE /A067 / / /***********************************************************************/ SETPAR, XX TAD DENSTY / DENSITY FOR COPY SAME FOR IN AND OUT R3L / MULTIPLY BY EIGHT / TABLE NOW 8 WIDE /C067 /D067 TAD DENSTY / MULTIPLY BY FIVE /D067 TAD DENSTY / MULTIPLY BY SIX /D067 TAD DENSTY / MULTIPLY BY SEVEN TAD (PARTBL-1 / ADD ADDRESS OF TABLE LESS ONE DCA X0 / SET UP INDEX REGISTER TAD I X0 / READ FIRST VALUE DCA CPYNOS / SET UP NUMBER OF SECTORS TAD I X0 / READ SECOND VALUE DCA CPYLNT / SET UP BUFFER LENGTH TAD I X0 / READ THIRD VALUE DCA CPYPSK / SET UP NUMBER OF PASSES PER TRACK TAD I X0 / READ FOURTH VALUE DCA FACTOR / SET UP INTERLEAVE FACTOR TAD I X0 / LOAD FIFTH VALUE DCA FMTQBK+RXQTRK / SAVE AS MINIMUM (FIRST) TRACK TAD I X0 / LOAD SIXTH VALUE DCA TRKMXK / LOAD AS LAST TRACK NUMBER TAD I X0 / LOAD SEVENTH VALUE DCA SECMXK / LOAD AS LAST SECTOR VALUE TAD I X0 / LOAD EIGHTH VALUE /A067 DCA SECWRP / LOAD AS SECTOR WRAP ADJUSTMENT /A067 JMP I SETPAR / EXIT / /DISABLE UDKS SO USER WON'T DESTROY SYSTEM DISK /A075 / CLRUDK, 0 /A075 TAD DRVDST / ONLY IF DESTINATION DRIVE IS DRIVE 0 /A043 SZA CLA / DO WE CONTINUE /A043 /C075 /C077 JMP I CLRUDK / ELSE : Exit routine /A077 CIFSYS / INSTRUCTION FIELD OF UDKOPS /A043 AC0001 / CODE TO DISABLE /A043 UDKOPS / CALL THE ROUTINE /A043 JMP I CLRUDK /A075 DECIMAL /TABLE CHANGE HISTORY / V035 Changed RX50 FACTOR from 7 to 2 / V066 ADDED RD50 ENTRY FOR DMII V1.5 / V067 Changed CPYNOS & CPYPSK to reflect full trk buffering / & ADD SECTOR WRAP ADJUSTMENT FACTOR ENTRY PARTBL, /CPYNOS CPYLNT CPYPSK FACTOR RXQTRK TRKMXK SECMXK SECWRP -26 ; 128 ; -1 ; 3 ; 1 ; -76 ; -26 ; 0 /RX01 -26 ; 256 ; -1 ; 5 ; 1 ; -76 ; -26 ; 0 /RX02 -10 ; 512 ; -1 ; 3 ; 0 ; -79 ; -10 ; 0 /RX50 -10 ; 512 ; -1 ; 2 ; 78; -79 ; -10 ; 1 /RX50 FIRMWARE PARTBM=.+5 /POINTER TO TRKMXK ENTRY /A074 -16 ; 512 ; -1 ; 9 ; 0 ; -49 ; -16 ; 0 /RD50 WINNIE -10 ; 512 ; -1 ; 2 ; 0 ; -0 ; -10 ; 1 /RX50 TRACK 0 OCTAL /-------------------- PAGE / THIS INITALIZES THE CONSTANTS / SCONST, TAD (TEXT1N) / SET UP CPYCON "TO RETRY INIT'Z'N /A057 DCA CPYCON / /A057 / CDFMNU / GET THE VALUE FROM MENU FOR THE CMND DCA I (CLKCHG) / CLEAR CLOCK FLAG TAD I (MUBUF+MNTMP2 / LOAD SOURCE DRIVE NUMBER /A033 DCA DRVSRC / AND SAVE IT /A033 TAD I (MUBUF+MNTMP5 / LOAD DESTINATION DRIVE NUMBER /A033 DCA DRVDST / AND SAVE IT /A033 TAD I (MUBUF+MNTMP1 / LOAD FUNCTION CODE FROM MENU /C033 /D066 CDFMYF DCA FNCODE / SAVE IT /A057 SCONS1, / RE-ENTRY POINT /A058 CDFMYF /ADFB / THE FOLLOWING 3LINES WERE MOVED FROM ABOVE /A058 JMS WINCHK / SEE IF WINNIE, (RE)SET FLAGS, ETC. /A066 DCA FMTQBK+RXQBLK / CLEAR BLOCK NUMBER /M058 DCA MIN / SET THE CLOCK /M058 DCA SEC / /M058 TAD FNCODE / RESTORE IT /A057 / THIS CODE CHECKS TO SEE WHAT ROUTINE WAS CALLED / THE COPY OR ONE OF THE INITALIZES / TAD (-6) /C053 SNA /A053 JMP FMTNOS / NO 8" SYSTEM DISK ALLOWED /A053 IAC /A053 SNA /A014 JMP FMTDBL / 5 = FORMAT DOUBLE DENSITY DISKETTE /A014 IAC /A014 SNA /A014 JMP FMTSGL / 4 = FORMAT SINGLE DENSITY DISKETTE /A014 IAC /A014 SNA / JMP FMTDSK / 3= INITALIZE DOCUMENT IAC SNA / JMP FMTSYS / 2= INITALIZE SYSTEM DISKETTE IAC SZA CLA / JMP CPYDS2 / ALL OTHERS JMP CKDFSZ / 1= REGULAR COPY /C053 FMTSGL, / FORMAT SINGLE DENSITY DISKETTE ROUTINE/A014 TAD (RXEFMS+4000) / GET FUNCTION CODE FOR SNGLE DEN FORMAT/A014 JMP FMTCLL / GO CALL THE AUX CNTL PROCESSOR /A014 FMTDBL, / FORMAT DOUBLE DENSITY DISKETTE ROUTINE/A014 CLA / CLEAR AC /A014 TAD (RXEFMD+4000) / GET FUNCTION CODE FOR DBL DEN FORMAT /A014 FMTCLL, /C028 DCA FMTCMD / SAVE FORMAT COMMAND /A028 TAD DRVDST / LOAD DESTINATION DRIVE NUMBER /C033 DCA FMTQBK+RXQDRV / SET DRIVE NUMBER IN Q-BLOCK /A032 JMS FMTDEN / GET DENSITY AND AND DRIVE READY /A028 AC7776 / LOAD MINUS TWO /A032 TAD DENSTY / SEE WHAT KIND OF DRIVE WE HAVE /A032 SNA CLA / SKIP IF NOT RX50 /A032 JMP CPYEXT / ELSE GO ABORT FORMAT /A032/C033 TAD (TEXT1L) / SET UP CPYCON "TO RETRY FORMAT" /A057 DCA CPYCON / /A057 TAD FMTCMD / RESET COMMAND /A028 DCA FMTQBK+RXQFNC / PUT IT INTO THE Q-BLOCK /A014 JMS FMTRTB /Is FORMAT PRINT 'Format in process....ect /A028 JMS FMTRXT / GO FORMAT 8 INCH DISKETTE /A014 JMP DRVPRB / ERROR--GO SEE IF DOOR WAS OPEN /A045 /IF WE HAVE DECMATE-I ALLOW TO INITIALIZE AS S OR D /A041 /IF WE HAVE DECMATE-II, ALLOW ONLY D INITIALIZATION /A041 /DETERMINE IF DECMATE-I or II BY SEEING IF SYSTEM DISK /A041 /IS 8 INCH (DM-I) or 5 INCH (DM-II) /A041 TAD DENIN /SOURCE DSK-0=RX01/02,1=RX50,2=WINNIE /C074 SZA CLA /=RX01/02? /C074 JMP FMTDCD /WINNIE DISK/ DECMATE-I: /C074 FMTASK, CLA / CHKCCM DOES NOT CLA /A056 JMS CPYASK / GO ASK WHETHER HE WANTS A SYSTEM OR /A014 / DOCUMENT DISK /A014 JMP CHKLET / GO SEE WHAT HE TYPED IN /A014 FMTDCD, AC0003 / LOAD CODE FOR DOCUMENT /A056 JMP DMNTM1 / GO JOIN CHKLET CODE /A056 FMTCMD, 0 /SAVE FORMAT COMMAND HERE /A028 GETTIM, / UPDATES LAPSED TIME CLOCK 0 CLA CDFMNU TAD I (CLKCHG) CDFMYF SPA / JMP PRTSC2 / RETURN IF NO CHANGE ISZ SEC TAD (-12) SMA / JMP .-3 CDFMNU DCA I (CLKCHG) CDFMYF TAD SEC / ELSE COMPUTE NEW TIME TAD (-74) SPA / JMP .+3 / ADJUSTING FOR MINUTE CHANGE ISZ MIN JMP .-4 TAD (74) DCA SEC / CIFMNU JMS I IOACAL / 0 / PRINT TIME WHEN IT CHANGES TEXT13 1350 MIN SEC / PRTSC2, CLA JMP I GETTIM / MIN, 0 / THE VALUE OF THE MINUTES SEC, 0 / THE TEMP VALUE THAT DETECTS A CHANGE IN TIME /-------------------- PAGE /***********************************************************************/ / / / CPYERR--PUTS OUT THE ERROR MESSAGES WHEN DIFFERENT KINDS / / OF DISKETTES ARE SPECIFIED FOR A BACKUP COPY / / CALLED FROM DTDEN. DENSTY CONTAINS DENSITY CODE OF / / DENST0 CONTAINS DENSITY OF SYSTEM DRIVE (DM-I OR DM-II) / / DESTINATION DRIVE, T1 CONTAINS DENSITY OF SOURCE DRIVE / / ROUTINE ADDED / / / MODIFIED FOR DM-I/II /V035 / / / /***********************************************************************/ CPYERR, XX / CIFMNU / JMS I IOACAL / PRINT "BACKUP ERROR MENU" / 0 TEXT17 / 0 / CURSOR POSTION 0 / TAD WINFLG / IS THIS A 'WINNIE" ?? /A066 SNA CLA / NO- PROCESS ERROR AS BEFORE /A066 JMP CPERDK / - THIS BRANCHES PAST 'WINNIE' CODE /A066 TAD WINSRC / YES- NOW IS THERE A SOURCE ERROR ?? /A066 SMA CLA / YES- GO PROCESS /A066 JMP CPERWB / NO- BRANCH TO DEST. ERROR RTNE. /A066 TAD WINSRC / WHICH TYPE OF ERROR??? /A066 /-1=NOT ASSIGNED -2=AREA TOO SMALL -3=AREA TOO LARGE /A074 JMS SETEXT /GET TEXT STRING POINTER /A066 DCA CPERWS / /A066 CIFMNU /A066 JMS I IOACAL / PRINT "SOURCE AREA IS...." /A066 0 /A066 CPERWS, 0 /A066 0705 /A066 TXTSRC /A066 DRVSRC /A066 / /A066 CPERWB, /A066 TAD WINDST / IS THERE A DESTINATION ERROR ?? /A066 SMA CLA / YES- GO PROCESS /A066 JMP CPYER2 / NO- BRANCH PAST OLD DISKETTE CODE /A066 TAD WINDST / WHICH TYPE OF ERROR??? /A066 /-1=NOT ASSIGNED -2=AREA TOO SMALL -3=AREA TOO LARGE /A074 JMS SETEXT /GET TEXT STRING POINTER /A066 DCA CPERWD / /A066 CIFMNU /A066 JMS I IOACAL / PRINT "DESTINATION AREA IS...." /A066 0 /A066 CPERWD, 0 /A066 1505 /A066 TXTDST /A066 DRVDST /A066 / /A066 JMP CPYER2 / BRANCH PAST DISKETTE CODE /A066 CPERDK, TAD DENIN /SOURCE DSK-0=RX01/02,1=RX50,2=WINNIE /C074 SNA CLA /=RX01/02? /C074 TAD (TEXT18-TEXTY / YES USE TEXT18 FOR DM-I / TAD (TEXTY / USE TEXTY FOR DM-II OR WINNIE / DCA DIFDSK / SAVE SUBSTRING POINTER / CIFMNU / JMS I IOACAL / PRINT EITHER "THE DENSITIES OF YOUR / 0 / DISKETTES ARE DIFFERENT", OR / TEXT20 / "Your diskettes are different. / 0505 / CURSOR POSTION LINE 5, COL 5 / DIFDSK, XX / SUBSTR PTR / / WE KNOW THE DENSITY CODES ARE DIFFERENT / WE WANT TO DETERMINE IF WE ARE TRYING TO COPY BETWEEN / DIFFERENT DENSITIES ON 8 INCH DRIVES. IF SO, THE SOURCE / DENSITY PLUS THE DESTINATION DENSITY WILL BE EXACTLY ONE. AC7777 / LOAD MINUS ONE / TAD DENDST / DENSITY OF DESTINATION DRIVE /C074 TAD DENSRC / DENSITY OF SOURCE DRIVE /C074 SZA CLA / SKIP IF DIAMETERS ARE EQUAL / JMP CPYDDI / DIAMETERS ARE DIFFERENT / TAD DENSRC / DENSITY OF SOURCE DRIVE--0 OR 1/C074 TAD (SDDDPT / ADD POINTER TO POINTER / DCA DENFRM TAD DENSTY / DENSTIY OF DEST. DRIVE / TAD (SDDDPT / ADD POINTER TO POINTER / CPYER1, DCA DENTO / SAVE IN COPYING TO ___ / CIFMNU / JMS I IOACAL / 0 / TEXT22 / PRINT "YOU ARE TRYING TO COPY FROM" / 1005 / LINE 10, COL 5 / DENFRM, 0 / FROM ___ DENSITY / DENTO, 0 / TO ___ DENSITY / TAD DENFRM / GET POINTER TO FROM ___ / DCA DENFR1 / AND USE AS AN ARGUMENT HERE / CIFMNU / JMS I IOACAL / PRINT "PLEASE USE A___ ... FOR..COPY / 0 / / TEXT23 / "PLEASE USE A __ ... FOR .. COPY / 1405 / LINE 14 COL 5 / DENFR1, 0 / A COPY OF DENFRM / CPYER2, /A066 CIFMNU / JMS I IOACAL / / 0 / TEXTG3 / GENERAL PURPOSE CONTROL STRING 3 / 2205 / LINE 22 COL 5 / TEXT26 / "PRESS RETURN TO CONTINUE / 2405 / LINE 24 COL 5 / TEXT33 / "OR, " / IFNDEF ITALIAN <2411> / /C051 IFDEF ITALIAN <2405> TEXT15 / "PRESS GOLD MENU TO RECALL THE / 2700 / LINE 27 COL 0--FOR OPR RESP / JMP I CPYERR / RETURN TO CALLER / SDDDPT, TEXT24 / SINGLE DENSITY / TEXT25 / DOUBLE DENSITY / S8S5PT, TEXT2B / 5 INCH / TEXT2A / 8 INCH / CPYDDI, / TRYING TO COPY FROM DIFFERENT DIAMETERS / AC0004 / A080 AND DRVSRC / SOURCE DRIVE / M080 CLL RTR / M080 TAD (S8S5PT / ADD POINTER TO POINTER / DCA DENFRM AC0004 / A080 AND DRVDST / DESTINATION DRIVE / M080 CLL RTR / M080 TAD (S8S5PT / ADD POINTER TO POINTER / JMP CPYER1 / GO PICK UP ABOVE /***********************************************************************/ / / / DSKSZE--ROUTINE WHICH LOADS THREE VARIABLES AS FOLLOWS / / DSBLKV THE NUMBER OF BLOCKS TO VERIFY AFTER A / / A SYSTEM OR DOCUMENT INITIALIZATION / / DSBLKD THE NUMBER OF BLOCKS ON A DOCUMENT DISKETTE / / DSBLKS THE NUMBER OF BLOCKS ON A SYSTEM DISKETTE / / THIS ROUTINE MODIFIED ON V035. PREVIOUS REVISIONS SET UP / / DSBLKS TO BE EITHER -632, -988, OR -784, AND DSBLKS WAS USED / / FOR ALL THREE PURPOSES / / / /***********************************************************************/ DSKSZE, 0 /A027 DCA DSKSZL /SAVE DENSITY /A075 AC0004 /A074 CIA /NEGATE /A074 TAD DSKSZL /GET IT /A075 SNA CLA /=WINNIE? /A075 JMS DSKSZF /SET SPECIAL WINNIE SIZE(MAY BE ABLE TO /A074 /......ELIMINATE RD50 ENTRY IN DSKSZT) /A074 TAD DSKSZL / GET THE DENSITY OF THE DISK /C027 /C075 TAD DSKSZL / MULTIPLE BY TWO /A035 /C075 TAD DSKSZL / MULTIPLY BY THREE /A035 /C075 TAD (DSKSZT-1 / ADD TABLE BASE /C035 DCA X1 / SAVE IN AN INDEX REGISTER /C035 TAD I X1 / READ TABLE /A035 DCA DSBLKV / /A035 TAD I X1 / READ TABLE /A035 DCA DSBLKD / /A035 TAD I X1 / READ TABLE /A035 DCA DSBLKS / /A035 JMP I DSKSZE /A027 DSKSZL, 0 /A075 /------------------ PAGE DECIMAL DSKSZT, / TABLE OF DISK BLOCKS FOR DIFFERENT MEDIA /C035 /VFY /DOC /SYS ---TYPES OF CONSTANTS /A035 /DSBLKV DSBLKD DSBLKS ---NAME OF LOCATION LOADED /A035 -632; -632; -632 / RX01 /A035 -988; -988; -988 / RX02 /A035 DSKSZU, -790; -784; -768 / RX50 /A035 -000; -000; -000 / DUMMY (RX50 DBL. SIDED) /A066 DSKSZV, -790; -784; -768 / RD50 (DMII V1.5 ONLY!!!) /A066 /.......(OVERLAYED FOR RD50 V 2.0/A074 OCTAL /***********************************************************************/M031 / / WRITE BOOT ROUTINE / WRITES BOOT FROM FMTBUF / /*********************************************************************** WRBOOT, XX / WRITE BOOTSTRAP FROM FMTBUF /A031 JMS PHYIO / WRITE BOOTSTRAP BLOCK TO DOC DISKETTE /A016 RXEW12+4000 / (IN 12 BIT MODE). /A016 JMS PHYIO / NOW READ VERIFY BOOT /A043 RXER12+6000 /A043 JMP I WRBOOT / GO HOME /A031 /********************************************************************** / /A014 / PHYIO DOES PHYSICAL IO, EITHER READING OR WRITING /A014 / THE ROUTINE IS DESIGNED TO READ AND WRITE THE BOOTSTRAP /A014 / CODE FROM A ONE DISKETTE TO ANOTHER. THE CALLING SEQUENCE IS: /A014 / JMS PHYIO /A014 / RXER12 OR RXEW12 (12 BIT) /A014 / RXEPR OR RXEPW (8 BIT) /A042 / YOU MUST SET THE DRIVE NUMBER AND THE BUFFER FIELD IN THE /A014 / Q-BLOCK BEFORE ENTERING THIS ROUTINE. THE ROUTINE WILL FIND OUT /A014 / THE DENSITY OF THE DRIVE NUMBER PASSED IN THE Q-BLOCK, AND THEN /A014 / EITHER READ INTO OR WRITE OUT FROM BUFFER "FMTBUF" /M031 / / THE BOOTSTRAP PROGRAM. /A014 / /A014 /***********************************************************************/A014 PHYIO, XX / PHYSICAL IO TO COPY BOOTSTRAP PROGRAM /A014 / ADDRESS OF READ/WRITE PARAMETER /A014 / RXER12=READ/RXEW12=WRITE /A014 JMS FMTDEN / GO GET DENSITY & INIT RXHAN /A014 TAD I PHYIO / GO GET FUNCTION CODE (READ OR WRITE) /A014 DCA FMTQBK+RXQFNC / PUT FUNCTION CODE INTO Q-BLOCK /A014 TAD (FMTBUF) / GET ADDRESS OF BUFFER /A014 DCA FMTQBK+RXQBAD / PUT IT INTO Q-BLOCK /A014 IAC / GET TRACK NUMBER=1 (WHERE BOOT IS) /A014 DCA FMTQBK+RXQTRK / PUT IT INTO Q-BLOCK /A014 IAC / GET SECTOR NUMBER=1 (WHERE BOOT IS) /A014 DCA FMTQBK+RXQSEC / PUT IT INTO Q-BLOCK /A014 DCA FMTQBK+RXQBLK / FOR WINNIE - BLOCK 0 IS BOOT /A066 ISZ PHYIO / BUMP UP TO RETURN POINT /A014 JMS FMTRXT / GO DO PHYSICAL IO /A014 JMP DRVPRB / ERROR--GO SEE IF DOOR WAS OPEN /A045 / NOTE: THE FIRST PART OF THE BOOTSTRAP PROGRAM HAS NOW EITHER BEEN /A014 / WRITTEN FROM OR READ INTO BUFFER "FMTBUF" /M031 / THE FIRST 100 (64) LOCATIONS (SINGLE DEN) /M031 / THE FIRST 200 (128) LOCATIONS (DOUBLE DEN) /M031 / (BUT ONLY THE FIRST 100 LOCS CONTAIN DATA) /M031 / THE ENTIRE 400 (256) LOCATIONS (RX50--12 BIT MODE) /A032 / THE ENTIRE 1000 (512) LOCATIONS (RX50--8 BIT MODE) /A042 AC7776 / LOAD -2 /A032 TAD DENSTY / DENSITY CODE 2=RX50 /A032 SMA CLA / SKIP IF RX01 OR RX02 /A032 JMP PHYIOX / ONLY 1 READ FOR RX50 AND WE'RE DONE /C079 TAD (FMTBUF+100) / GET ADDRESS OF SECOND BUFFER /M031 DCA FMTQBK+RXQBAD / PUT IT INTO Q-BLOCK /A014 AC0004 / GET SECTOR NBR FOR 2ND PART /M031/C004/C022 DCA FMTQBK+RXQSEC / SET SECTOR NBR IN Q-BLOCK /A014 JMS FMTRXT / GO DO THE IO /A014 JMP DRVPRB / ERROR--GO SEE IF DOOR WAS OPEN /A045 / NOTE: THE SECOND PORTION OF THE BOOTSTRAP HAS NOW BEEN READ /M031 / OR WRITTEN. /M031 / IF RX02 THE 200 WORDS OF THE SECOND HALF OVERLAY /M031 / THE BLANK PORTION OF THE FIRST HALF /M031 TAD DENSTY / 1=DOUBLE DENSITY 0=SINGLE DENSITY /A014 SZA CLA / NON-ZERO HERE MEANS IT'S DOUBLE /M031/A014 JMP PHYIOX / EXIT IF DOUBLE--WE ARE DONE /C079 TAD (7) / SGL DEN SEC NBR LST HALF 2ND PART BOOT/A014 DCA FMTQBK+RXQSEC / PUT IT INTO Q-BLOCK /A014 TAD (FMTBUF+200) / GET BUFFER ADDR LAST PORTION OF BOOT /M031 DCA FMTQBK+RXQBAD / PUT IT INTO Q-BLOCK /A014 JMS FMTRXT / GO DO THE IO /M031 JMP DRVPRB / ERROR--GO SEE IF DOOR WAS OPEN /A045 / NOTE: THE LAST THIRD OF THE RX01 BOOTSTRAP HAS NOW EITHER BEEN /A014 / WRITTEN FROM OR READ INTO THE BUFFER FIELD "FMTBUF" /A014 PHYIOX, DCA FMTQBK+RXQBAD /RESET BUFFER ADDRESS TO 0 /A079 JMP I PHYIO / ALL DONE RETURN /A014 /***********************************************************************/ / / / CHKCCM CALLS THE DLOCPM MENU PAGE (PART OF CPYDSK) / / THERE IT BRANCHES INTO TWO CHECKS: / / MNTMP3=0 MEANS TEST FOR "COPY" / / MNTMP3<>0 MEANS TEST FOR "S" OR "D" / / ROUTINE ADDED V056 / / / /***********************************************************************/ CHKCCM, XX CDFMNU DCA I (MUBUF+MNTMP3 / SAVE THE FUNCTION CODE FOR THE MENU CDFMYF CIFMNU JMS I MNUCAL / GO INTO MENU CODE DLMCPM / IN MN1 /C073 /WHEN WE RETURN, MNTMP3 WILL TELL US WHAT THE USER DID: / 0 GOLD MENU OR "NO" / 1 "COPY" / 2 "S" / 3 "D" CDFMNU TAD I (MUBUF+MNTMP3 / LOAD THE RESULT FOR OUR FRIENDLY CALLER CDFMYF SZA / SKIP IF GOLD MENU JMP I CHKCCM / AND RETURN JMP CPYGMO / GO GOLD MENU OUT OF CPYDSK FMTER, CLA JMS FMTERR / DISPLAY THE ERROR MESSAGE /D045 JMP FMTERN / RETURN NORMALLY /***********************************************************************/ / / / FMTERN--DISPLAY MESSAGE ASKING FOR GOLD MENU / / / /***********************************************************************/ FMTERN, CIFMNU JMS I IOACAL / 0 TEXTG1 / GENERAL PURPOSE--ONE SUBSTRING 2412 TEXT15 / "Press Gold ... /A033 2700 JMS WTFRGR / GO WAIT FOR GOLD RESPONSE /A056 JMP CPYDS2 / AND EXIT CPYDSK /A056 /***********************************************************************/ / / / WTFRGR--ACCEPTS ONLY GOLD MENU AND THEN EXITS CPYDSK / / / /***********************************************************************/ WTFRGR, / WAIT FOR ONLY GOLD RESPONSE / XX / /A056 WTFRG1, JMS WTFRRS / WAIT FOR A RESPONSE SKP / CARRIAGE RETURN TYPED JMP I WTFRGR / A GOLD MENU TYPED /C056 / JMS CPYWFT / HE TYPED RETURN, BLATTTTTT... JMP WTFRG1 / WAIT AGAIN / /*****SPACE WARS MOVE VER 075 ****** /A075 / CPDSET, 0 /A075 AC0002 / FORCE DENSITY TO 2 (RX50) /A066 DCA DENSTY /A066 TAD (RXMAP-1) / GET POINTER TO SECTOR TO BLOCK /A066 / TRANSLATION MAP /A066 DCA T4 / & SAVE /A066 JMP I CPDSET /RET /A075 /***********************************************************************/A014/M066 / /A014/M066 / THIS ROUTINE CHECKS TO SEE IF THE USER HAS REPLIED A "D" OR AN /A014/M066 / "S" TO AN INQUIRY AS TO WHETHER HE WANTS TO INITIALIZE THE /A014/M066 / DISKETTE HE JUST FORMATTED TO A DOCUMENT OR SYSTEM DISKETTE /A014/M066 / /A014/M066 /***********************************************************************/A014/M066 CHKLET, / CHECK REPLY D OR S /A014/M066 AC0001 / MAKE AC NON-ZERO FOR CHKCCM /A056/M066 JMS CHKCCM / SO MENU KNOWS WHAT WE WANT /A056/M066 SPA / SEE IF NEED TO REPAINT /A056/M066 JMP FMTASK / YES, GO REPAINT /A056/M066 DMNTM1, / PUT FLAG WHERE DU MENU CAN GET AT IT /A014/M066 CDFMNU / MENU FIELD /A014/M066 DCA I (MUBUF+MNTMP1) / TELL DU MENU WHAT WE'RE DOING /A014/M066 AC0001 / SET SIGNAL TO MAIN MENU THAT WE'RE DOING/A014/M066 DCA I (MUBUF+MNTMP3) / AND THEREFORE NOT TO PUT OUT THE /A014/M066 CDFMYF / MESSAGE TO PUT THE DISK IN DRIVE 1 /A014/M066 CIFMNU /A014/M066 JMS I MNUCAL / CALL DU MENU /A014/M066 DLMDU3 /A014/M066 CDFMNU /A015/M066 CLA /M066 TAD I (MUBUF+MNTMP4) / GOLD KEY SWITCH /A015/M066 CDFMYF /A015/M066 SZA CLA / RETURN DESIRED ? /A015/M066 JMP SCONST / RETURNS HERE AFTER MENU CALL...CONT /A015/M066 JMP CPYDS2 / EXIT RETURN /C056/M066 /-------------------- PAGE /***********************************************************************/ / / / FMTDSK, /INITIALIZE A DOCUMENT DISKETTE / / / /***********************************************************************/ FMTDSK, / INITIALIZE DOCUMENT DISKETTE /A032 TAD WINDST / FIRST MAKE SURE DEST. IF A WINNIE /A066 / - IS ASSIGNED & BIG ENOUGH /A066 SPA CLA / MINUS INDICATES PROBLEM /A066 JMP FMTWER / PROBLEM - GO TELL USER& GET RESPONSE /A066 JMS SHOWNM / SHOW VOLUME NAME IF WINNIE & GET RESP /A066 JMS FMTINI / GO INITIALZE DRVDST & PUT UP TIMMSG /A032 AC7777 / LOAD MINUS TWO /A032/C074 TAD DENSTY / SEE IF DSTDRV IS 8 INCH OR 5 INCH /A032 SMA SZA CLA / SKIP IF 8 INCH /A032/C066/C074 JMP FMT50W / GO DO RX50 OR WINNIE /A032 /C074 /D074 TAD (DCSTRT / GET START ADDRESS FOR A DOC DISK /A032 /D074 CDFMYF+10 / CHANGE TO BUFFER FIELD /A042 /D074 DCA I (FMTBUF+LDSTRT-12 /SAVE /A032 /D074 CDFMYF / CHANGE BACK TO THIS FIELD /A042 /D074 JMS WR50BT / GO WRITE RX50 BOOT /A042 /D074 0 / WITH DOCUMENT ID /A042 /D074 JMP FMTDCA / GO DO OTHER STUFF /A044 FMTDC8, / 8 INCH INITIALIZATION CONTINUED /D074 SMA CLA / BUT FIRST CHECK FOR WINNIE /A066 /D074 JMP FMT50W / YES IT IS- GO PROCESS /A066 TAD (DCSTRT / GET START ADDRESS FOR A DOC DISK /A032 CDFMYF+10 / CHANGE TO BUFFER FIELD /A042 DCA I (FMTBUF+LDSTRT-100 /OVERWRITE BOOT STARTING ADDR FOR MSG/C042 CDFMYF / CHANGE BACK TO THIS FIELD /A042 JMS WRBOOT / WRITE & VERIFY THE RX01/02 BOOT /A042 JMP FMTDCA / GO DO OTHER STUFF /A066 FMT50W, / WRITES RX50 OR WINNIE DOCUMENT BOOT /A066 /C074 TAD (DCSTRT) / DUPLICATE RX50 LOGIC ABOVE /A066 CDFMYF+10 / /A066 DCA I (FMTBUF+LDSTRT-12) /A066 CDFMYF / /A066 JMS WR50BT / /A066 0 / /A066 FMTDCA, /D078 TAD (RXEWT+4000 / LOAD CODE FOR LOGICAL 12 BIT WRITE /A044 /D078 JMS FMTDOC / GO DO THE WRITE PASS /A044 /D078 JMS FMTVCD / LOAD THE CODE FOR THE VERIFY PASS /A045 JMS FMTDOC / GO DO THE WRITE VERIFY PASS /C078 JMP FMTERN / GO TELL USER WE ARE DONE /A044 FMTDOC, XX / WRITE OR VERIFY DOC DISKETTE /A044 /D078 DCA CPSDFN / LOAD THE FUNCTION (WRITE OR VERIFY /A044 AC0001 / SET BLOCK # TO 1 /A016 DCA FMTQBK+RXQBLK TAD DSBLKD / NEG NO OF DOCUMENT BLOCKS /A035 DCA DSBLKC / IS NO TO CLEAR /A035 JMS CLABLK / CLEAR BLOCKS 1 TO N /M031 DCA STDBSW / SET DOC SW(0) JMS RSTBLK /RESET BLOCK COUNT AND FUNCTION /A078 TAD DSBLKD / GET NUMBER OF DOCUMENT BLOCKS /A035 CIA / POSITIVATE /A035 DCA DSBLKC / AND PASS TO STDBL /A035 JMS FMTHAB / GO DO HOME AND ALLOC BLOCKS /A045 / / NOW DO THE BOOT ERROR MESSAGE BLOCK /A044 / THE FOLLOWING LINES ARE NOT NECESSARY IF THE CAPABILITY /A037 / TO HAVE AN ERROR MESSAGE APPEAR WHEN A DOCUMENT DISKETTE IS /A037 / BOOTED IS NOT NEEDED, OR IS HANDLED BY ROMWARE OR SLUSHWARE. /A037 / BLOCK EMESBK MAY ALSO BE FREED UP IN THE ALLOCATION MAP /C044 / IF VERIFY IS CHANGED BE A LITTLE LESS CRITICAL--ALLOCATED /A044 / BLOCKS NOT BELONGING TO ANY DOCUMENT SHOULD BE IGNORED /A044 / MAP (THIS IS THE LAST HANDLER BLOCK) /C044 TAD (RXERD+4000) / SET TO READ THE LAST HANDLER BLOCK DCA FMTQBK+RXQFNC TAD (EMESBK / GET LAST HANDLER BLOCK NUMBER /C044 DCA FMTQBK+RXQBLK DCA FMTQBK+RXQDRV / SET THE DRIVE TO ZERO TAD (FMTBUF) / SET THE BUFFER DCA FMTQBK+RXQBAD JMS FMTQRX JMP FMTER / ERROR--GO DISPLAY MESSAGE; WAIT FOR GM/A045 TAD CPSDFN / LOAD FUNCTION (WRITE OR READ/VFY) /A044 DCA FMTQBK+RXQFNC TAD DRVDST / LOAD DESTINATION DRIVE NUMBER /A032 DCA FMTQBK+RXQDRV JMS FMTQRX JMP FMTER / ERROR--GO DISPLAY MESSAGE; WAIT FOR GM/A045 JMS FMTWN /IF VOLUME SET TO NON BOOTABLE DOC /A074 JMP I FMTDOC / RETURN /A044 / ********************************************************************* /A066 / / VOLNAM - INPUT: AC=0 SOURCE VOLUME NAME / AC.NE.0 DEST VOLUME NAME / READS THE VOLUME NAME ASCII TEXT INTO THE APPROP. / LOCATION, FROM THE QUEUE BUFFER / / ******************************************************************** /A066 VOLNAM, XX SZA CLA / SOURCE OR DESTINATION VOLUME?? TAD (RCVNAM-CPYNAM) / GET OFFSET OF RCVNAM FROM CPYNAM TAD (CPYNAM-1) / ADD IN ADDRESS OF CPYNAM -1 DCA X0 / & SAVE FOR AUTOINDEX AC7777 / SET AC=-1 TAD FMTQBK+RXQBAD / ADD IN QUEUE BLOCK BUFFER ADDR DCA X1 / & SAVE FOR AUTOINDEX AC0010 / VOLUME NAME IS 8 CHARACTERS CIA / SO WE NEED A COUNTER SET TO DCA T2 / -8, FOR LOOP CONTROL RDNMLP, CDFMYF+10 / CHANGE TO BUFFER FIELD TAD I X1 / AND GET NEXT CHAR INTO AC DCA T3 / & SAVE FOR A BIT CDFMYF / BACK TO OUR FIELD TAD (7740) / GET -(ASCII SPACE) INTO AC TAD T3 / ADD IN CHAR VALUE SZA CLA / IF CHARACTER WAS A SPACE WE WILL PUT / A TERMINATING NULL INTO OUR ASCII TEXT TAD T3 / ELSE ACCEPT CHARACTER DCA I X0 / & PUT INTO OUT TEXT STRING ISZ T2 / HAVE WE READ 8 CHARACTERS?? JMP RDNMLP / NO, GO READ NEXT CHAR JMP I VOLNAM / YES, EXIT /***********************************************************************/ / / / WR50BT--WRITE RX50 BOOTSTRAP (ADDED V042) / / THIS ROUTINE WRITES THE RX50 BOOTSTRAP WITH THE / / STANDARD RX50 HEADER. THE HEADER IS READ IN 8 BIT / / MODE BY ALL SYSTEMS. IT CANNOT BE WRITTEN IN 12 BIT / / MODE AS 4 OF THE BITS IN SUCESSIVE BYTES CAN NOT BE / / WRITTEN. THEREFORE, THE BOOT IS FIRST WRITTEN IN / / 12 BIT MODE TO WRITE THE PDP-8 PORTION. THE BOOT IS / / THEN READ BACK IN 8 BIT MODE, AND THE BOOT HEADER IS / / OVERLAYED IN THE BUFFER. THE DOCUMENT/SYSTEM PARAMETER / / IS THEN OVERLAYED AS PASSED BY THE CALLER, AND THE / / BOOT WITH HEADER IS WRITTEN OUT IN 8 BIT MODE / / / /***********************************************************************/ WR50BT, XX / JMS WRBOOT / GO WRITE & VERIFY BOOTSTRAP ON RX50 / JMS PHYIO / NOW READ IT BACK IN 8 BIT MODE / RXEPR+4000 / CODE FOR PHYSICAL READ 8 BIT / / BUFFER SIZE MUST BE 512 / JMS BLKMOV / NOW OVERLAY THE BOOT HEADER / R5BHDR-1 / SOURCE ADDRESS / FMTBUF-1 / DESTINATION ADDRESS / -R5BHSZ / NEG NUMBER OF CHRS / CDFMYF / SOURCE FIELD /A057 CDFMYF+10 / DESTINATION FIELD /A057 TAD I WR50BT / PICK UP DOCUMENT/SYSTEM BYTE / ISZ WR50BT / ADJUST RETURN ADDR / CDFMYF+10 / CHANGE TO BUFFER FIELD / DCA I (FMTBUF+3 / DOCUMENT/SYSTEM BYTE LOCATION / CDFMYF / CHANGE BACK TO THIS DATA FIELD / JMS PHYIO / NOW WRITE BACK WITH THE PROPER / RXEPW+4000 / BOOT HEADER / JMS PHYIO / NOW READ-VERIFY BOOTSTRAP /A043 RXEPR+6000 / 4000=RETURN ERRORS; 6000=VERIFY /A043 JMP I WR50BT / RETURN / /RESET BLOCK COUNT AND FUNCTION CODE TO WRITE VERIFY / RSTBLK, 0 DCA FMTQBK+RXQRS1 /0=1 BLOCK /A078 TAD (RXEWT+6000 /WRITE LOGICAL AND VERIFY /A078 DCA FMTQBK+RXQFNC /SET FUNCTION /A078 JMP I RSTBLK /RETURN /A078 /---------------------- PAGE /************************************************************************** / / THIS ROUTINE GETS DENSITY / QBLK CONTAINS DRIVE TO PROCESS /M032 / ONE OF THE FOLLOWING CODES IS RETURNED /A032 / IN LOCATION DENSTY: /A032 / 0 RX01/RX02 SINGLE DENSITY /A032 / 1 RX02 DOUBLE DENSITY /A032 / 2 RX50 SINGLE SIDED /A032 / 3 RX50 DOUBLE SIDED /A032 / /************************************************************************** FMTDEN, XX TAD (RXEDN+4000) / GET GET DENSITY CODE /A014 DCA FMTQBK+RXQFNC / FUNCTION TO Q-BLOCK /A014 JMS FMTRXT / GO GET DENSITY OF DRIVE /A014 JMP DRVPRB / ERROR--GO SEE IF DOOR WAS OPEN /A045 TAD FMTQBK+RXQSPC / GET DENSITY CODE /A014 DCA DENSTY / SAVE DENSITY JMP I FMTDEN / RETURN /***********************************************************************/ / / / CHKID2--ROUTINE TO TELL OPERATOR TO RE-INSTALL THE / / ORIGINAL SYSTEM DISK (HAS SAME DISK ID) / / GOLD MENU IS ONLY LEGAL CHAR ACCEPTED / / ROUTINE ADDED V036 AS CPYINS / / ACTUALLY IS PART OF CHKID ROUTINE / / / /***********************************************************************/ CHKID2, / /A057 JMS CLRSCR / CLEAR THE SCREEN CIFMNU JMS I IOACAL 0 TEXTG1 / GENERAL PURPOSE--1 SUBSTRING 1405 TEXT3 / "REPLACE THE ORIGINAL SYSTEM DISK... 3000 JMS PPG / PRINT PRESS GOLD JMS WTFRGR / WAIT FOR ONLY GOLD MENU JMP CHKID1 / AND GO CHECK ID AGAIN /A057 /***********************************************************************/A031 / /A031 / FMTDIR SETS UP THE DIRECTORY BLOCK HEADER IN FMTBUF /A031 / IT IS CUSTOMARILY CALLED AFTER THE FMTBUF HAS BEEN CLEARED AND /A031 / COSCNT HAS ALREADY BEEN SET UP /A031 / /A031 /***********************************************************************/A031 FMTDIR, XX /A031 JMS CLBUF / CLEAR THE BUFFER /A082 TAD (INIBK) / LOC TO STORE NAME IN THIS FIELD /C042 JMS CRTNM / CONVERT THE NAME AND INSERT IT TAD (FMTBUF) /A031 DCA X1 / USE X1 TO SET UP THE BEGINNING /A031 TAD (130) / ID CODE FOR DIR BLOCK /A031 JMS FMSTF1 / SAVE IN FMTBUF+1 /C042 TAD INIBK / FIRST CHR OF NAME /A031 JMS FMSTF1 / SAVE IN FMTBUF+2 /C042 TAD INIBK+1 /A031 JMS FMSTF1 / SAVE 2ND CHR IN FMTBUF+3 /C042 TAD INIBK+2 /A031 JMS FMSTF1 / SAVE 3ND CHR IN FMTBUF+4 /C042 CDFSYS TAD I (RANDOM) / GET THE UNIQUE VALUE /A031 JMS FMSTF1 / SAVE IN FMTBUF+5 /C042 TAD P377 / GET ALLOC BLOCK NUMBER /A031 JMS FMSTF1 / SAVE IN FMTBUF+6 /C042 /=========================================================================== /==== THE WPS INSTALL PROGRAM REQUIRES THE BUILD DATE ==== /==== IN THE HOME BLOCK OF THE SYSTEM DISKETTE ==== /==== ==== /==== IF THE CURRENT DATE IS DESIRED FOR THE DOCUMENT DISKETTE ==== /==== THEN UNDELETE ALL THE /*082'S BELOW ==== /=========================================================================== /*082 TAD STDBSW / PICK UP DISKETTE TYPE /A082 /*082 SZA CLA / ARE WE MAKING A SYSTEM DISKETTE /A082 /*082 JMP FMTDAY / YES, GO DO DATE FOR SYSTEM DISK /A082 /*082 CDFSYS / NO, DO DATE FOR DOCUMENT DISK /C082 /*082 TAD I (DAMNTH) / GET THE DAY CREATED /A031 /*082 BSW / /A031 /*082 TAD I (MONTH) / /A031 /*082 JMS FMSTF1 / SAVE IN FMTBUF+7 /C042 /*082 CDFSYS / /A031 /*082 TAD I (YEAR) / /A031 /*082 JMP FMTYR / GO STORE THE YEAR VALUE /A082 FMTDAY, TAD (BLDDY^100+BLDMO) / PICK UP DAY-MONTH VALUE /A082 JMS FMSTF1 / SAVE IN FMTBUF+7 /A082 TAD (BLDYR) / PICK UP YEAR VALUE /A082 FMTYR, JMS FMSTF1 / SAVE IN FMTBUF+10 /C082 TAD NODOCS / GET NUMBER OF DOCUMENTS ALLOWED /A031 JMS FMSTF1 / SAVE IN FMTBUF+11 /C042 JMP I FMTDIR /A031 DECIMAL NODOCS, -200 /A031 OCTAL /***********************************************************************/A028 / /A028 / DISPLAYS "FORMAT IN PROGRESS, PLEASE STAND BYE." /A057 / IS CALLED ONLY WHEN FORMATTING /A057 / /A028 /***********************************************************************/A028 FMTRTB, XX /A028 CIFMNU /NO..DISPLAY 'Format in progress /A028 JMS I IOACAL /A028 0 / Please stand bye.' /A028 TEXT1M /A028 0200 /CLEAR SCREEN FROM LINE 3 /A028 1525 /A028 JMP I FMTRTB /A028 FMTRXT, XX / INPUT QUEUE ROUTINE TO RXHAN FMTRX1, CIF 0 / ENQUE / QUBLK1 / QUEUE TO RXHAN / FMTQR2, / CIF 0 / JWAIT / WAIT FOR DONE CLA TAD FMTQBK+RXQCOD SPA CLA JMP I FMTRXT / RETURN WITH NO INCREMENT IF ERROR /C045 TAD FMTQBK+RXQCOD SNA CLA / CHECK FOR DONE JMP FMTQR2 ISZ FMTRXT / SUCESSFUL OPERATION--BUMP RETURN /A045 JMP I FMTRXT / AND GO THERE /A045 / / FMTQRX, 0 / CIF 0 / ENQUE / QUBLK1 / QUEUE TO RXHAN / FMTQR1, / /A018 /C074 JMS GETTIM / SEE IF CHANGE IN TIME CIF 0 / JWAIT / WAIT FOR DONE CLA TAD FMTQBK+RXQCOD SPA CLA JMP I FMTQRX / ERROR--RETURN WITH NO INCRMENT /C045 TAD FMTQBK+RXQCOD SNA CLA / JMP FMTQR1 ISZ FMTQRX / BUMP FOR SUCESSFUL RETURN /A045 JMP I FMTQRX / DONE /FOLLOWING MOVED HERE *********** VER 074 ********** FMTVCD, XX / LOAD THE FUNCTION CODE FOR THE VERIFY PASS /A045 / AS OF THIS WRITING THE HANDLER WILL READ VERIFY / LOGICAL (CODE 6003) ON RX-50 ONLY. THEREFORE, / FOR RX01/02 WE WILL JUST CHECKSUM VERIFY (CODE 4003) AC7776 / SEE IF DESTINATION DRIVE IS RX-50 OR NOT TAD DENSTY SMA CLA / SKIP IF RX01/RX02 /C066 AC2000 / SET THE VERIFY BIT TAD (RXERD+4000 / CODE FOR LOGICAL 12 BIT, RETURN ERRORS JMP I FMTVCD / RETURN THE CORRECT VALUE /-------------------- PAGE /***********************************************************************/A032 / /A032 / CPYIO--READS OR WRITES CPYNOS SECTORS INTO THE FIELD BUFFER /M032 / THESE PARAMETERS MUST BE SET UP BEFORE ENTERING: /M032 / FMTQBK+RXQDRV DRIVE NUMBER /M032 / FMTQBK+RXQFNC FUNCTION CODE /M032 / CPYNOS NUMBER OF SECTORS TO PROCESS /M032 / /M032 /***********************************************************************/A032 CPYIO, XX DCA T2 / INITIALIZE BUFFER ADDRESS TAD CPYNOS / INITALIZE THE SECTOR COUNTER /C021 DCA T1 / SAVE IN A TEMPORARY LOCATION /C032 TAD (CDFMYF+10) / RESET BUFFER FIELD /A067 DCA FMTQBK+RXQBFD / /A067 TAD SECTOR / SAVE SECTOR IN CASE 2ND PASS NECESSRY /A021 DCA SVSECT /A021 CPYLP1, JMS GETTIM /A015 /D067 TAD T2 / INSERT THE BUFFER ADDRESS /D067 TAD CPYLNT /C021 /D067 DCA T2 / STORE NEW ADDRESS TAD T2 / NOW LOAD IN REQUEST BLOCK DCA FMTQBK+RXQBAD /D067 JMS GTSECT / GO GET THE SECTOR NUMBER /A014 TAD SECTOR / /A067 DCA FMTQBK+RXQSEC TAD FMTQBK+RXQSEC / GET BACK SECTOR # /A066 TAD T4 / ADD IN POINTER TO SECT TO BLOCK MAP /A066 DCA T3 / SAVE NEW PTR /A066 JMS CKBLNM /CHECK VALID BLOCK NUMBER /A083 /THIS CHECK TO ALLOW FOR COPYING /A083 /..VOLUME SIZES LESS THAN SIZE OF FLOPPY/A083 JMP CPYSKP /ERR RET..ILLEGAL BLK NUM. SKIP THIS BLOCK/A083 /D070 JMS FMTQRX / QUEUE THE REQUEST /A038 JMS FMTRXT / QUEUE THE REQUEST W/O CHECKING TIME /A070 / AS A TIME CHECK IS DONE AT THE BEGIN /A070 / OF THE SECTOR LOOP (CPYLP1) /A070 JMP FMTER / ERROR--GO DISPLAY MESSAGE; WAIT FOR GM/A045 CPYSKP, /A083 ISZ T1 / BUMP THE SECTOR COUNTER /C032 JMP CPYBMP / BUMP UP BUFFER, SECTOR ETC. /C067 TAD (CDFMYF+10) / GET ORIGINAL CDF BACK INTO Q-BLK /A067 DCA FMTQBK+RXQBFD / SO OTHER ROUTINES WILL WORK /A067 JMP I CPYIO / NOW ITS SAFE TO LEAVE /C067 CPYBMP, JMS GTSECT / GO GET THE SECTOR NUMBER /M067 CLL CLA /A067 TAD T2 / INSERT THE BUFFER ADDRESS /M067 TAD CPYLNT /C021 /M067 DCA T2 / STORE NEW ADDRESS /M067 SNL / SKIP IF WE WRAPPED THE BUFFER /A067 JMP CPYLP1 / ELSE JUST PROCESS NEXT SECTOR /A067 TAD BMPCDF / WE MUST BUMP BUFFER FIELD UP TWO /A067 TAD FMTQBK+RXQBFD / FIELDS /A067 DCA FMTQBK+RXQBFD / & SAVE IT /A067 JMP CPYLP1 / NOW WE ARE READY TO PROCESS NEXT SECTR/A067 /D067 THIS ROUTINE NO LONGER NEEDED /D067/***********************************************************************/ /D067/ / /D067/ SECADJ--ROUTINE TO ADJUST SECTOR NUMBER. / /D067/ USED BY BACKUP COPY IF INTERLEAVE FACTOR IS EVEN. / /D067/ CALLED BETWEEN PASSES. THE CURRENT SECTOR IS / /D067/ INCREMENTED IF FACTOR IS EVEN, OTHERWISE SECTOR / /D067/ IS UNCHANGED. / /D067/ THIS ROUTINE ADDED ON REVISION /A032 / /D067/ / /D067/***********************************************************************/ /D067 /D067SECADJ, XX / SECTOR ADJUST ROUTINE /D067 TAD FACTOR / GET FACTOR /D067 RAR / PUT LSB IN LINK /D067 SNL CLA / SKIP IF FACTOR IS ODD /D067 ISZ SECTOR / INCREMENT SECTOR IF FACTOR IS EVEN /D067 JMP I SECADJ / JUST RETURN IF FACTOR IS ODD /D067/ /***********************************************************************/ / / / THIS ROUTINE WILL DETERMINE THE NEXT SECTOR NUMBER FOR /A014 / PHYSICAL READS AND WRITES. BEFORE ENTERING IT YOU MUST /A014 / INITIALIZE THE SECTOR NUMBER TO 1, AND INITIALIZE THE INTERLEAVE/A014 / FACTOR TO THE CORRECT VALUE FOR A SINGLE OR DOUBLE DENSITY /A014 / DISKETTE. THE SECTOR NUMBER SHOULD BE AT LABEL "SECTOR" AND /A014 / AND THE INTERLEAVE FACTOR SHOULD GO AT LABEL "FACTOR". /A014 / / /***********************************************************************/ GTSECT, XX / GETS THE NEXT SECTOR FOR COPY IO /A014 TAD SECTOR / GET OLD SECTOR NUMBER /A014 TAD FACTOR / ADD IN INTERLEAVE FACTOR /A014 DCA SECTOR / STORE IT FOR /A014 TAD SECMXK / DETERMINE IF SECTOR NUMBER EXCEEDED /M032 TAD SECTOR / GET THE SECTOR /A014 SNA /A025 JMP GTRTN / IS AT MAX--OK /M032 SPA / SKIP IF OVER MAX /M032 /C069 JMP GTNWRP / ELSE THERE WAS NO WRAP /A069 TAD SECWRP / ADD IN WRAP ADJUSTMENT FACTOR /A069 DCA SECTOR / RESET SECTOR MOD SECMXK + ADJ. FACTOR /A032/C069 GTNWRP, CLA / CLEAR ACCUMULATOR /A032/C069 GTRTN, TAD SECTOR / GET THE SECTOR NUMBER INTO THE AC /A014 JMP I GTSECT / GO BACK /A014 /***********************************************************************/A014 / /A014 / THIS ROUTINE WILL DISPLAY THE MESSAGES THAT ARE REQUIRED TO /A014 / FIND OUT WHAT THE USER WANTS TO DO WITH HIS DISKETTE AFTER /A014 / HE HAS FORMATTED IT. IT ASKS HIM IF HE WANTS TO INITIALIZE IT /A014 / AS A SYSTEM OR DOCUMENT DISKETTE, OR IF HE JUST WANTS TO GET /A014 / OUT BY PRESSING GOLD MENU. /A014 / NOTHING IS PASSED TO IT AND IT PASSES NOTHING BACK.... /A014 / JUST CALL IT WITH A JMS //// /A014 / /A036 / REWRITTEN TO USE GENERAL PURPOSE CONTROL STRINGS /A036 / /A014 /***********************************************************************/A014 CPYASK, XX / RETURN ADDRESS /A014 TAD (0050) / ERASE DATE & TIME BUT NOT TITLE /A057 JMS CLRSCR / GO CLEAR THE SCREEN / CIFMNU / / JMS I IOACAL / / 0 / TEXTG2 / GENERAL PURPOSE CONTROL STRING 2 /C057 1205 / LINE 12 COL 5 / TEXT30 / "PLEASE SELECT HOW THIS DISKETTE... / 1405 / LINE 14 COL 5 / TEXT31 / "TYPE D FOR DOCUMENT OR S ... / 2700 / CURSON PSN FOR OPR RESPONSE / CIFMNU / / JMS I IOACAL / / 0 / TEXTG3 / GENERAL PURPOSE CONTROL STRING 3 / 1455 / LINE 14 COL 55 (CONTINUATION POINT) / TEXT35 / "AND PRESS RETURN" ("AND" WAS "THEN") /C057 2305 / LINE 23 COL 5 / TEXT33 / "OR, " / IFNDEF ITALIAN <2312> / / IFDEF ITALIAN <2305> TEXT15 / "PRESS GOLD MENU TO RECALL THE / 2700 / LINE 27 COL 0--FOR OPR RESP / JMP I CPYASK / RETURN /A014 /***********************************************************************/A014 / /A014 / DTDEN--DETERMINE IF THE DENSITIES OF THE DISKETTES /C060 / IN THE SOURCE DRIVE (DRVSRC) AND THE DESTINATION DRIVE (DRVDST) /C033 / ARE DIFFERENT. IF SO CALL ERROR ROUTINE CPYERR. /C060 / IF NOT, GIVE A SKIP RETURN /C060 / /A014 /***********************************************************************/A014 DTDEN, XX / /A014 DTDEN0, TAD DRVSRC / LOAD SOURCE DRIVE NUMBER /C033 /C035 DCA FMTQBK+RXQDRV / SET DRIVE NUMBER IN Q-BLOCK /A032 JMS FMTDEN / GET DENSITY OF THIS DRIVE TAD DENSTY / LOAD DENSITY DCA DENSRC / SAVE /C074 IFDEF PIRATE < /A034 / NOW SEE IF THE SOURCE DISKETTE IS AN RX-50 /A032 AC7776 / LOAD MINUS TWO TAD DENSRC / ADD DENSITY OF SOURCE DISKETTE/A032 /C074 SZA CLA / SKIP IF RX-50 /A032 JMP DTDEN1 / GO ON IF NOT RX-50 JMS PHYIO / GO READ BOOTSTRAP INTO FMTBUF /A032 RXER12+4000 / CODE FOR PHYSICAL READ 12 BIT MODE /A032 TAD FMTBUF+2 / GET WORD WHICH CONTAINS 'SYSTEM' BIT /A032 AND (20 / MASK OFF ALL OTHER BITS /A032 SZA CLA / SKIP IF NOT A SYSTEM DISKETTE /A032 /C075 JMP XFMT5 / GO MAKE SURE A DISK IS MOUNTED IN DR/M075 > / END IFDEF PIRATE /A034 DTDEN1, TAD DRVDST / LOAD DESTINATION DRIVE NUMBER /A033 DCA FMTQBK+RXQDRV / SET DRIVE NUMBER IN Q-BLOCK /A032 JMS FMTDEN / GET DENSITY OF DESTINATION DRIVE TAD DENSTY / LOAD DEST. DENSITY DCA DENDST /A074 TAD DENDST /DENSITY OF SOURCE DEV /A074 CIA TAD DENSRC / COMPARE TO SOURCE DENSITY /C074 SNA CLA / IF ZERO, THEN THEY ARE EQUAL /A014 /C074 JMP DTDENX / IF NOT, THEN GO ASK HIM TO CHANGE IT /C074 / / MOVED HERE ON VERSION 074 /A028 TAD WINFLG / NO DENSITY MISMATCH ON A V1.5 WINNIE! /A066 SZA CLA / NOT A WINNIE- SKIP & REPORT ERROR /A066 JMP CPDNMX / IS A WINNIE - SET UP MIXED DENS. CPY /A066 AC7777 /A074 TAD FNCODE /IS BACKUP COPY /A075 SZA CLA /A075 JMP DTDENX /NO LET SYSTEM/DOC INIT CONTINUE /A075 JMS CPYERR / DENSITY ERROR. GO ASK FOR DIFFRENT DISKETTE JMS WTFRRS / WAIT FOR THE REPLY /A014 JMP I DTDEN / HE REPLIED RETURN. LET CALLER /A060 / DECIDE WHAT TO DO. /A060 JMP CPYDS2 / HE REPILED GOLD MENU, GO DISPLAY IT /C056 CPDNMX, /C075 JMS CPDSET /SET DENSITY(SPACE WARS MOVE /A075 DTDENX, /A066 ISZ DTDEN / TAKE THE SKIP RETURN /A060 JMP I DTDEN / RETURN /A014 XFMT5, TAD (TEXT2B / " 5 INCH " /A037 DTDEN2, /M074 DCA DTDDS / SET UP SUBSTRING POINTER /A037 CIFMNU / /A032 /M074 JMS I IOACAL / GO DISPLAY /A032 0 / /A032 TEXT50 / "^SSYSTEM DISKETTES CAN NOT BE COPIED"/A032 211 / LINE 2 COL 11 /A032 DTDDS, XX / 8 INCH OR 5 INCH SUBSTRING PTR /A037 JMP FMTERN / GO ASK FOR A GOLD MENU /A032 /-------------------- PAGE ACL=7701 / MQ OP CODE: LOAD AC FROM MQ SWP=7521 / MQ OP CODE: SWAP AC AND MQ /***********************************************************************/ / / / THESE ROUTINES SET UP THE ALLOCATION BLOCKS. / / ENTER WITH STDBSW SET=0 FOR DOC DISKETT INIT / / SET=1 FOR SYSTEM DISKETTE INIT / / WITH DENSTY SET UP FOR THE DESTINATION DRIVE DRVDST / / WITH DSBLKC SET UP FOR NUMBER OF DISK BLOCKS /A035 / USES TABLE (DKSZTB) OF DISK SIZES INDEXED BY DENSTY / / THIS ROUTINE TOTALLY REWRITTEN REVISION /A032 / / / / REV071--MODIFIED SO THAT WHEN LESS THAN EIGHT BLOCKS REMAIN / / ON A SYSTEM DISK AND THE NUMBER OF AVAILABLE BLOCKS ON A / / SYSTEM DISK IS NOT 0 MOD 8 THAT THE MAP WILL BE CORRECT / / (RX02 IS ONLY MEDIA NOT HAVING 0 MOD 8 TOTAL BLOCKS) / / / /***********************************************************************/ STDBL, XX JMS CLBUF / CLEAR THE BUFFER /D035 TAD DSBLKS; CIA; DCA T1-- DSBLKC NOW SET UP IN CALLING ROUTINES /D035 TAD (FMTBUF / GET ADDRESS POINTER / DCA X2 / SAVE ADDR PTR / TAD STDBSW / GET CODE IDENTIFYING DOC (0) OR SYS (1)/ TAD (40 / ADD CODEWHICH IDENTIFIES TYPE OF DISKETTE/ CDFMYF+10 / CHANGE TO BUFFER FIELD /A042 / THIS ROUTINE DOES NOT TAD I /A042 / THEREFORE, WE MAY LEAVE THE DATA FIELD/A042 / SET TO THE BUFFER FIELD UNTIL WE EXIT /A042 DCA I X2 / SAVE IN BUFFER / TAD STDBSW / GET SYSTEM/DOCUMENT SWITCH SZA CLA / SKIP IF DOCUMENT DISKETTE TAD (-DLEND / LOAD NEG NUMBER OF BLOCKS IN SYSTEM TAD DSBLKC / ADD NUMBER OF BLOCKS ON DISK SPA / SKIP IF POSITIVE /A068 CLA / ELSE THERE ARE NONE LEFT! /A068 DCA T2 / SAVE AS NUMBER OF AVAILABLE BLOCKS TAD T2 / GET IT BACK DCA I X2 / SAVE IN BLOCK TAD T2 / GET IT BACK AGAIN DCA I X2 / SAVE IN BLOCK AGAIN / NOW SET THE BITS IN THE ALLOC BLOCK ACCORDING TO THE NUMBER OF BLOCKS / IN THE FILE SYSTEM AND CALCULATE THE #OF ALLOCATION WORDS IN THE MAP / INCLUDING A FINAL ALL ZERO TERMINATOR WORD ISZ X2 / BUMP POINTER OVER #WORDS+1 TAD X2 DCA T3 / BUT SAVE IT ALSO AC0001 / THE EXTRA COUNT DCA T4 / PREPARE TO USE T4 TO COUNT ALLOC WORDS TAD DSBLKC / GET NUMBER OF BLOCKS CIA / MAKE NEGATIVE JMP ALOST1 / COUNT BEFORE DCA /A071 ALOSTL, CLA / NEEDED BY LOOP LOGIC TAD P377 / LOAD CONSTANT DCA I X2 / SAVE IN BLOCK ISZ T4 / COUNT NUMBER OF ALLOC WORDS ACL / GET COUNT ALOST1, /A071 TAD P10 / ADD EIGHT SWP / UPDATE MQ ACL / AND THE AC SPA SNA / SEE IF POSITIVE AND NONZERO YET /C071 JMP ALOSTL / KEEP DOING FULL WORDS CIA / MAKE THE REMAINDER NEGATIVE DCA T2 TAD P377 ALOSTR, AND P177 / TURN OFF A BIT CLL RAL / SHIFT LEFT ISZ T2 / REMAINDER TIMES JMP ALOSTR SZA / IF THE REMAINDER IS NONZERO /A071 ISZ T4 / THEN COUNT ONE MORE ALLOC WORD /A071 DCA I X2 / STORE THE REMAINDER WORD ALOTSD, TAD T4 / GET THE COUNT CIA / NEGATE DCA I T3 / SAVE AT PROPER BUFFER LOCATION / NOW CLEAR THE BITS WHICH CORRESPOND TO BLOCKS ALREADY USED TAD STDBSW / SEE IF SYSTEM OR DOCUMENT SZA CLA / SKIP IF DOCUMENT JMP ALOSYS / GO DO SYSTEM CLEARS JMS ALLOBS / ALLOCATE SPECIFIC BLOCKS /A044 DCSPBK / LIST OF BLOCKS FOR A DOCUMENT DISK JMP STDBLX / DOCUMENT EXIT /C042 ALOSYS, / SYSTEM DISKETTE / THIS ROUTINE WORKS AS LONG AS / DLEND>#ALLOCBLK (255) TAD T3 / GET POINTER TO -(#WORDS+1) DCA X2 / SET UP INDEX REGISTER TAD (-DLEND / GET NEGATIVE NUMBER OF SYSTEM BLOCKS JMP ALOSY2 / /A071 ALOSY1, CLA / CLEAR AC (NECESSARY FROM LOOP POINT) DCA I X2 / CLEAR A BLOCK ACL / GET COUNT ALOSY2, /A071 TAD P10 / ADD EIGHT SWP / UPDATE MQ ACL / AND THE AC SPA SNA / SKIP IF POSITIVE AND NONZERO /C071 JMP ALOSY1 / ELSE LOOP BACK CIA / NO, NEGATE MOD 8 # BITS TO LEAVE ON DCA T1 / SAVE IN A COUNTER ALOSY3, STL RAL / SHIFT LEFT ISZ T1 / COUNT A BIT JMP ALOSY3 / LOOP FOR NEXT BIT AND I X2 / SAVE REMAINDER WORD /C068 MQL / SAVE RESULT FOR A MOMENT /A071 AC7777 / WHILE WE BACK UP THE INDEX REG /A071 TAD X2 / /A071 DCA X2 / /A071 ACL / /A071 DCA I X2 / SAVE RESULT IN MAP /A071 STDBLX, CDFMYF / CHANGE TO THIS FIELD /A042 JMP I STDBL / WE ARE DONE /***********************************************************************/ / / / ALLOBS--ALLOCATE SPECIFIC BLOCKS (ROUTINE ADDED V044) / / THE BLOCKS TO BE ALLOCATED ARE FOUND IN A LIST /C045 / THE LIST IS LOCATED BY THE POINTER AFTER THE CALL, I.E.: /C045 / CALLING SEQUENCE JMS ALLOBS / / BDBKLS / / . / / . / / BDBKLS, BDBK1 / / BDBK2 / / ETC;ETC; / / 7777 / / A MINUS ONE TERMINATES THE LIST / / / /***********************************************************************/ ALLOBS, XX / ALLOCATE SPECIFIC BLOCKS /A044 STA / LOAD MINUS ONE FOR X2 CDFMYF TAD I ALLOBS / PICK UP POINTER TO LIST CDFMYF+10 / CHANGE BACK TO BUFFER FIELD ISZ ALLOBS / ADJUST RETURN ADDRESS DCA X2 / SAVE IN INDEX REG 2 ALLOB0, TAD (FMTBUF+5 / SET UP POINTER TO START OF ALLOCATION MAP DCA T2 CDFMYF / PICK UP NEXT BLOCK NUMBER TAD I X2 CDFMYF+10 / CHANGE BACK TO BUFFER FIELD IAC SNA / SEE IF THE TERMINATOR JMP I ALLOBS / IF SO, RETURN CMA IAC / COMPLEMENT ALLOB2, / FIND CORRECT WORD IN ALLOC BLOCK TAD P10 / ADD 10 SMA / SEE IF THIS BLOCK IS IN THIS WORD JMP ALLOB3 / YES ISZ T2 / NO, BUMP POINTER JMP ALLOB2 / AND GO CHECK NEXT WORD / NOW DETERMINE BIT IN THIS WORD / AC CONTAINS THE BIT NUMBER LESS 4 TO BE CLEARED ALLOB3, CMA DCA T3 / SAVE FOR AN ISZ STA CLL / SET ALL AC BITS & CLEAR THE LINK ALLOB5, RAL / SHIFT THE MASK ISZ T3 JMP ALLOB5 AND I T2 / DO THE WORK--TURN OFF THAT BIT! DCA I T2 / AND SAVE THIS ALLOC WORD STA / DECREMENT BOTH COUNTS TAD I (FMTBUF+2 DCA I (FMTBUF+2 TAD I (FMTBUF+2 DCA I (FMTBUF+3 JMP ALLOB0 / GO DO NEXT BLOCK STDBSW, 0 / DOC/SYS DISKETTE SW 0=DOC /------------------------ PAGE /***********************************************************************/ / / / CKDFSZ--CHECK FOR DIFFERENT DIAMETERS / / USED BY BACKUP COPY. ASSUMES THE FOLLOWING: / / DRIVE NUMBERS ARE 0 TO 7 / / DRIVES 0-3 ARE 5 INCH / / DRIVES 4-7 ARE 8 INCH / / IF DRIVES ARE OF DIFFERENT DIAMETER THEN THE USER / / IS TOLD BACKUP CANNOT BE DONE / / / /***********************************************************************/ CKDFSZ, TAD WINSRC / IS EITHER A WINNIE DEVICE-0=NON WINNIE/C074 TAD WINDST / IS EITHER WINNIE DEVICE---0=NON WINNIE/A074 SZA CLA / NO- SKIP & CONTINUE WITH OLD RTNE. /A066 JMP CKWNSZ / YES- BRANCH TO WINNIE CHECKER /A066 TAD DRVSRC /A066 AND (4) TAD DRVDST AND (4) SNA CLA JMP CONT / DRIVES ARE SAME DIAMETER CKDFER, / ERROR ENTRY POINT FOR WINNIE /A066 JMS CPYERR / CALL ROUTINE WHICH DISPLAYS MESSAGE JMS WTFRRS / WAIT FOR OPR TO TYPE JMP CKDFS2 / RETURN--GO TO A MENU PAGE JMP CPYDS2 / GOLD MENU, RETURN TO MAIN MENU CKDFS2, CIFMNU JMS I MNUCAL / GO BACK TO THE MENU DLMDU8 / AND ASK FOR DRIVE NUMBERS AGAIN / /INPUT CANNOT EXCEED 2000 BLOCKS DURING BACKUP /A074 /OUTPUT CAN BE GREATER THAN INPUT ON DISK VOLUME BUT WILL END UP /A074 /...............WITH UNUSED AREAS ON OUTPUT..... /A074 / CKWNSZ, TAD WINSRC / CHECK FOR SOURCE PROBLEMS /A066 SPA CLA / .GT.= 0 NO PROBLEMS /A066 JMP CKDFER / ERROR - GO PROCESS /A066 TAD WINDST / CHECK FOR DESTINATION PROBLEMS /A066 SMA CLA / .GT.= 0 NO PROBLEMS /A066 /C074 JMP CONT /OUTPUT= O.K. CHECK SRC-DST SIZE /A074 IAC / /A074 TAD WINDST /IS IT UNNASSIGNED /A074 SZA CLA /A074 JMP CONT /NO JUST > 2000 BLOCKS CHK SRC-DST SZE /A074 AC7777 /ERROR OR > MAX BLOCKS /A074 TAD DRVDST / /A074 SZA CLA /DRIVE #1 /A074 JMP CKDFER /NO----ERROR /A074 TAD WINFLG /BITS 9=ONLINE,8=0=WINNIE,7=1=WINNIE /A074 AND (10 /BIT 8--DRIVE 0=WINNIE(VER 2.0) /A074 SZA CLA /IF DRIVE 0=WINNIE...DRIVE 1 MUST BE /A074 JMP CKDFER / ERROR - GO PROCESS /A066 JMP CONT / NO ERRORS - CONTINUE WITH COPY /A066 / ***************************************************************** /A074 / / DSKSZF----SETS UP SIZE OF VOLUME IN TABLE DSKSZT--(DSKSZU) / FOR SPECIAL CASES... / ----AFTER DEBUGGING IT MAY BE POSSIBLE TO DELETE / ----RD50 ENTRY IN TABLE AND HANDLE ALL WINNIE ENTRIES BY DSKSZU /A074 / ***************************************************************** /A074 DSKSZF, 0 /A074 TAD WINDST /A074 TAD (-2 /A074 SZA /2=G.T. 2000 L.T. 4095 BLOCKS /A074 JMP DSKSZG /IS SET TO 2000 /A074 TAD M2000 /SET TO 2000 BLOCKS /A074 JMP DSKSZJ /A074 DSKSZG, /A074 TAD (-2 /A074 SNA CLA /4=SPECIAL CASE....800 BLOCKS /A074 JMP DSKSZM /YES SPECIAL CASE /A074 TAD DSTSZE /DESTINATION SIZE(TRACKS) /A074 CLL RTL /BLOCKS=TRACKS*16 /A074 RTL /A074 CIA /NEGATE IT /A074 DSKSZJ, /A074 DCA DSKSZV /A074 /D079 AC0006 /A074 TAD DSKSZV /A074 DCA DSKSZV+1 /A074 /D079 TAD (12 /A074 TAD DSKSZV /A074 DCA DSKSZV+2 JMP DSKSZP /A074 DSKSZM, /A074 JMS BLKMOV /MOVE PARMS TO VOLUME AREA /A074 DSKSZU-1 /PNTR TO RX50 AREA(SKIPS FIRST ENTRY O.K.)/A074 /A075 DSKSZV-1 /TO VOLUME AREA /A074 -3 /COUNT /A074 CDFMYF /SOURCE FIELD /A074 CDFMYF /DEST FIELD /A074 DSKSZP, /A074 TAD DSTSZE /A074 CIA /NEGATE IT /A074 DCA PARTBM /SET IT /A074 JMP I DSKSZF /A074 DECIMAL M2000, -2000 /A075 OCTAL / /********MOVED HERE VER 074 SPACE WARS ******* / FMSTF1, XX / STUFF AT X1 (CDFMYF+10) /A042 CDFMYF+10 / CHANGE TO BUFFER DATA FIELD DCA I X1 / STUFF IT CDFMYF / CHANGE BACK TO OUR FIELD JMP I FMSTF1 / AND RETURN / /********CLRSCR MOVED HERE VER. 074 **** GUESS WHY ***** / CLRSCA, 0 /CLEAR FROM CURPSN /A074 TAD CURPSN / POSITION TO CLEAR FROM /A056 JMS CLRSCR / CLEAR THE SCREEN /M074 JMP I CLRSCA /RET /A074 /***********************************************************************/M066 / /M066 / CLRSCR--ROUTINE TO CLEAR THE SCREEN FROM A GIVEN POSITION /M066 / AC CONTAINS THE POSTION TO CLEAR THE SCREEN FROM /M066 / /M066 /***********************************************************************/M066 CLRSCR, XX / CLEAR THE SCREEN /A036/M066 DCA CLRSCP / SET THE POSITION TO CLEAR FROM /M074/M066 CIFMNU /M074 JMS I IOACAL /M074 0 /M074 PSCR /M074 CLRSCP, 0 / POSTION TO CLEAR FROM /A056/M074 JMP I CLRSCR /M074 /SETEXT...SETS TEXT STRING POINTER /A074 /ENTERS WITH NEG CODE IN AC AND RETURNS WITH POINTER IN AC /A074 /-1=NOT ASSIGNED -2=AREA TOO SMALL -3=AREA TOO LARGE /A074 / 3=VOL SIZE G.T. OR = 256 BLKS AND L.T. 800 BLOCKS / SETEXT, 0 /A074 SMA /=NEG NUM? /A074 AC7776 /NO..SPECIAL CASE(TOO SMALL) /A074 CIA /SET POS /A074 TAD TBLPTR /POINTER /A074 DCA TBLTMP /SAVE /A074 TAD I TBLTMP /GET STRING POINTER /A074 JMP I SETEXT /A074 / /CHKDST CHECKS SIZE OF DESTINATION DEVICE..... /A074 / IF DEST DEV=RX01/RX02 RETURNS NORMAL /A074 / IF DEST VOLUME IS LESS THAN 800 BLOCKS ERROR JMP /A074 / ELSE RETURNS +1 /A074 CHKDST, 0 /A074 AC7775 /-3...3 CODE = L.T. 800 BLOCKS /A074 TAD WINDST /DEST DEV /A074 SNA CLA /3 CODE? /A074 JMP FMTWER /YES....ERROR VOL TOO SMALL /A074 TAD DENOUT /=RX01/02? /A074 SZA CLA /A074 ISZ CHKDST /NO..IS = RX50 OR WINNIE /A074 JMP I CHKDST /A074 TBLTMP, 0 /A074 TBLPTR, TBLPT1-1 / /A074 TBLPT1, TEXWS1 /AREA NOT ASSIGNED /A074 TBLPT2, TEXWS2 /AREA TOO SMALL /A074 TBLPT3, TEXWS3 /AREA TOO LARGE(NOT HANDLE G.T. 4095) /A074 / /********************TABLE MOVED HERE VER 078 *** SPACE WARS ******* / DEVPTR, DEVDRV /A066 MEDDSK /C074 MEDPTR, DEVARE /C074 MEDVOL /A066 /--------------------- /A066 PAGE /A066 /***********************************************************************/A066 WINCHK, XX / /A066 DCA WINSRC /INITIALIZE..0=NON WINNIE SOURCE /A074 DCA WINDST /INITIALIZE..0=NON WINNIE DEST /A074 DCA SRCSZE /VOLUME SIZE IF WINNIE /A074 DCA DSTSZE /VOLUME SIZE IF WINNIE /A074 JMS SHFDEN /SHIFT DENSITY CODE AND SAVE /A074 DCA WINTRK /INIT TO 0 /A074 CDFSYS / /A066 TAD (34 /WINNIE MASK BITS--BIT 9=ON LINE /C074 /----------------------8=DRV0=WINNIE /A074 /----------------------7=DRV1=WINNIE /A074 AND I RXTYPR / IS WINNIE BIT SET /A066 CDFMYF / BACK TO OUR FIELD FIRST /A066 SNA / YES- SKIP & CONTINUE PROCESS /A066 /C074 JMP WINCHX / NO- JUST EXIT /A066 /D074 AC0001 / /A066 DCA WINFLG / SET WINNIE FLAG /A066 TAD DRVSRC / GET SOURCE DEVICE # /A066 JMS CKASGN / CHECK IF WINNIE AREA & IF BIG ENOUGH /A066 DCA WINSRC / SAVE RESULTS /A066 TAD WINTRK /GET BLOCK COUNT /A074 DCA SRCSZE /SAVE IT /A074 DCA WINTRK /INIT TO 0 /A074 JMS VOLNAM / GET THE SOURCE VOLUME NAME /A066 TAD DRVDST / DO SAME FOR DESTINATION DEVICE /A066 JMS CKASGN / ... /A066 DCA WINDST / ... /A066 TAD WINTRK /GET BLOCK COUNT /A074 DCA DSTSZE /SAVE SOURCE SIZE /A074 CLA IAC /DESTINATION DRIVE /C074 JMS VOLNAM / GET DESTINATION VOLUME NAME /A066 WINCHX, / EXIT RTNE, INITIALIZE SOME PTRS /A066 TAD WINSRC / IF SOURCE IS WINNIE AC-> 'AREA' TEXT /C074 SZA CLA /SET OFFSET IN TABLE /A074 AC0002 / /A074 TAD (DEVPTR-1 / LOAD PTR TO 'DRIVE' TEXT /C074 DCA X0 / /C074 TAD I X0 / /C074 DCA DEVSRC / SAVE POINTER FOR IOACAL'S /A066 TAD I X0 / /C074 DCA MEDSRC / & SAVE PTR FOR IOACAL'S /A066 TAD WINDST / ... /A066 SZA CLA /SET OFFSET IN TABLE /A074 AC0002 /A074 TAD (DEVPTR-1 / NOW REPEAT ABOVE LOGIC FOR DEST. DEV. /C074 DCA X0 / /C074 TAD I X0 / /C074 DCA DEVDST / ... /A066 TAD I X0 / /C074 DCA MEDDST / /A066 TAD (RDMAP-1) / DEFAULT TO RD50 'SECTOR' TO BLOCK /A066 DCA T4 / TRANSLATION TABLE /A066 TAD WINDST / SET UP TEXT STRING POINTERS FOR DISPLY/A066 / OF DRIVE NUMBER VS. VOLUME NAME /A066 SZA CLA /A066 TAD (WINRCV-TEXT1E) / GET OFFSET OF WINNIE PROMPT /A066 TAD (TEXT1E) / ADD IN DRIVE PROMPT /A066 DCA RCVTXT / PUT ADDRESS OF TEXT STRING INTO IOACAL/A066 / SEQUENCE /A066 TAD WINDST /A066 SZA CLA /A066 TAD (RCVNAM-DRVDST) / GET OFFSET OF VOLUME NAME FROM DRIVE #/A066 TAD (DRVDST) / ADD IN ADDRESS OF DRIVE # /A066 DCA RCVID / PUT INTO IOACAL SEQUENCE /A066 / NOW DO THE SAME FOR THE SOURCE!! /A066 TAD WINSRC / SET UP TEXT STRING POINTERS FOR DISPLY/A066 / OF DRIVE NUMBER VS. VOLUME NAME /A066 SZA CLA /A066 TAD (WINCPY-TEXT1H) / GET OFFSET OF WINNIE PROMPT /A066 TAD (TEXT1H) / ADD IN DRIVE PROMPT /A066 DCA CPYTXT / PUT ADDRESS OF TEXT STRING INTO IOACAL/A066 / SEQUENCE /A066 TAD WINSRC /A066 SZA CLA /A066 TAD (CPYNAM-DRVSRC) / GET OFFSET OF VOLUME NAME FROM DRIVE #/A066 TAD (DRVSRC) / ADD IN ADDRESS OF DRIVE # /A066 DCA CPYID / PUT INTO IOACAL SEQUENCE /A066 JMP I WINCHK / /A066 /***********************************************************************/M066 / /M066 / TIMMSG--CLEARS THE TIME COUNTER AND PRINTS /M066 / "ELAPSED TIME CLOCK 0:00" ON SCREEN /M066 / /M066 /***********************************************************************/M066 TIMMSG, XX CLA CDFMNU / CLEAR THE TIME COUNTER DCA I (CLKCHG) CDFMYF / DCA SEC / CLEAR THE SECOND COUNTER DCA MIN / AND THE MINUTES / CIFMNU JMS I IOACAL / PRINT "ELAPSED TIME CLOCK 0:00" 0 / DEFAULT OUTPUT ROUTINE TEXT12 / ADDRESS OF STRING IFNDEF ITALIAN <0050> / CURSOR POSITION TO CLEAR FROM /C057 IFDEF ITALIAN <0053> / (LEAVE MENU NAME BUT CLEAR DATE/TM /A057 / IFDEF ENGLSH < 1323 > / CURSOR POSITION FOR ENGLISH /A009 IFDEF ITALIAN < 1327 > / CURSOR POSITION FOR ITALIAN /A009 IFDEF V30NOR <1335> IFDEF V30SWE <1335> / JMP I TIMMSG / THIS IS THE ERROR MESSAGE HANDLER /M066 / /M066 / THIS ROUTINE WILL WAIT FOR A GOLD MENU OR ACR /M066 / RESPONSE FROM THE KEYBOARD. ALL OTHER CHARACTERS WILL RING THE BELL/M066 / CALLING SEQUENCE: /A036/M066 / JMS WTFRRS /A036/M066 / HERE / RETURNS HERE IF RETURN PRESSED /A036/M066 / HERE+1 / RETURNS HERE IF GOLD-MENU PRESSED /A036/M066 / V036 CODE DELETED WHICH CHECKS SYSTEM DISK ID /A036/M066 / WTFRRS, XX / WAIT FOR RIGHT RESPONSE CLA JMP WTFRL1 / SEE IF A CHARACTER IS TYPED FROM THE KEYBOARD CIF 0 / JWAIT WTFRL1, CIF 0 / XLTIN JMP .-4 / IF NOTHING TYPED THEN WAIT / TAD (-EDMENU) / CHECK FOR A GOLD MENU SNA / JMP WTFRGM TAD (EDMENU-EDNWLN) / NOW FOF A CR SNA CLA / JMP I WTFRRS / /C017 JMS CPYWFT / BELL REPLY / /D074 CLA JMP WTFRL1 WTFRGM, / GOLD MENU WAS TYPED /D036 JMP CPYEXT / NO /A017/C033 ISZ WTFRRS / SKIP RETURN /M031 JMP I WTFRRS /M031 /-------------------- PAGE /***********************************************************************/A032 FMTINI, XX / DOC & SYS INITIALIZE ROUTINE /A032 DCA DRVSRC / MAKE SURE SOURCE DRIVE IS SYSTEM /A037 / (FOR FIRMWARE, TRACK ZERO ETC) /A037 /D074 TAD DRVDST / SET AC TO DOCUMENT DRIVE NUMBER /C032 /D074 DCA FMTQBK+RXQDRV /D074 JMS FMTDEN / GO GET DENSITY OF DESTINATION DRIVE /A032 JMS DTDEN /GET DENSITY OF SOURCE AND DEST. /A074 NOP /IGNORE DIFFERENT MESSAGE /A074 JMS TIMMSG / CLR SCREEN & PUT UP TIME MESSAGE /M052 TAD DENDST /DESTINATION FACTOR IN DOC,SYS INIT /A075 JMS DSKSZE / DETERMINE DISK BLOCK VALUES /A035 JMS SHFDEN /SET DENSITY BITS /A074 JMS CPBOOT / GO COPY BOOT TO FMTBUF /A032 JMP I FMTINI / RETURN /A032 /********* CPYWFT MOVED HERE VER 074 ****************** /***********************************************************************/A032 / CPYWFT, 0 / 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 CPYWFT / RETURN / /***********************************************************************/A032 CPBOOT, XX / COPY BOOT ROUTINE /A032 JMS CLBUF / CLEAR FMTBUF /A032 AC7777 / LOAD MINUS TWO /C075 TAD DENOUT / DETERMINE IF RX50 OR NOT /C075 SZA / SKIP IF RX50 / HOLD AC FOR WINNIE CHK /A032/C066 JMP CP0102 / GO COPY RX01/02 BOOT /A032 JMS BLKMOV / GO COPY RX50 BOOT INTO FMTBUF /A032 RX50BEG-1 / SOURCE ADDRESS--FIRST SECTION /A032 FMTBUF-1 / DESTINATION ADDR /A032 -R5LOCS / NUMBER OF CHARACTERS /A032 CDFMYF / SOURCE FIELD /A057 CDFMYF+10 / DESTINATION FIELD /A057 JMS BLKMOV / DO SECOND SECTION /A032 RX50MID-1 / SOURCE /A032 FMTBUF+166-1 / DESTINATION /A032 RX50MID-R5W2ND / NEG NUMBER OF CHARACTERS /A032 CDFMYF / SOURCE FIELD /A057 CDFMYF+10 / DESTINATION FIELD /A057 JMS BLKMOV / DO THIRD SECTION /A032 R5W2ND-1 / SOURCE /A032 FMTBUF+361-1 / DESTINATION /A032 -5 / NEG NUMBER OF CHARACTERS /A032 CDFMYF / SOURCE FIELD /A057 CDFMYF+10 / DESTINATION FIELD /A057 JMP I CPBOOT / RETURN /A032 CP0102, / COPY RX01/02 BOOT /A032 / 1ST!!- IS IT A WINNIE?? /A066 SMA CLA / NO- SKIP /A066 JMP CPWINC / YES- GO COPY RD50 BOOT /A066 JMS BLKMOV / GO COPY RX0102 BOOT INTO FMTBUF /A032 BT0102-1 / SOURCE ADDRESS--FIRST SECTION /A032 FMTBUF-1 / DESTINATION ADDR /A032 -100 / NUMBER OF CHARACTERS /A032 CDFMYF / SOURCE FIELD /A057 CDFMYF+10 / DESTINATION FIELD /A057 JMS BLKMOV / DO SECOND SECTION /A032 RX01MID-1 / SOURCE /A032 FMTBUF+100-1 / DESTINATION /A032 -175 / NEG NUMBER OF CHARACTERS /A032 CDFMYF / SOURCE FIELD /A057 CDFMYF+10 / DESTINATION FIELD /A057 JMP I CPBOOT / RETURN /A032 CPWINC, / COPY RD50 BOOT INTO FMTBUF (STUB) /A074 JMS BLKMOV / GO COPY WINNIE BOOT INTO FMTBUF /A074 WINBEG-1 / SOURCE ADDRESS--FIRST SECTION /A074 FMTBUF-1 / DESTINATION ADDR /A074 -WNLOCS / NUMBER OF CHARACTERS /A074 CDFMYF / SOURCE FIELD /A074 CDFMYF+10 / DESTINATION FIELD /A074 JMP I CPBOOT /A074 /***********************************************************************/ / / / FMTERR--ERROR ROUTINE THAT HANDLES DISK I/O ERROR MESSAGES / / CPYDSK USES THE FOLLOWING FMTQBK+RXQFNC FUNCTION CODES: /A032 / RXEPR+4000 4001 READ PHYS 8-BIT /A032 / RXEPW+4000 4002 WRIT PHYS 8-BIT /A032 / RXERD+4000 4003 READ LOGL /A032 / RXEWT+4000 4004 WRIT LOGL /A032 / RXER12+4000 4013 READ PHYS 12-BIT /A032 / RXEW12+4000 4014 WRIT PHYS 12-BIT /A032 / RXEFMS+4000 4015 FORMAT SINGLE DENSITY /A032 / RXEFMD+4000 4016 FORMAT DOUBLE DENSITY /A032 / /A032 MODIFIED TO INCLUDE DETECTING ERRORS / / OCCURRING DURING CODES 4013 AND 4014 / / / /***********************************************************************/ FMTERR, XX TAD FMTQBK+RXQDRV / GET DRIVE NUMBER /A032 DCA BDDRV1 / AND PASS TO IOACAL /A032 / TAD (FNCER) / SET THE DEFAULT FUNCTION ADDRESS /C028 DCA BDFNC / IT IS SET FOR READING TAD FMTQBK+RXQFNC / SEE IF IT IS READING AND (7 / STRIP TO ONLY 3 BITS /M032 TAD (-2) / IF A 2 THEN IT IS A WRITE /M032 SNA / JMP INCONE / GO BUMP ONCE FOR WRITE /A028 TAD (-2) / CHECK FOR A LOGICAL OR PHYS-12 WRITE /M032 SNA /C028 JMP INCONE / GO BUMP ONCE FOR WRITE /A028 SPA CLA />=0 =FORMAT /A028 JMP INCZER /NO INC FOR READ /A028 ISZ BDFNC / BUMP MESSAGE POINTER /A028 INCONE, ISZ BDFNC / BUMP MESSAGE POINTER /A028 / INCZER, TAD (DEVER) / DEFAULT DEVICE ("DRIVE") /C028/C066 DCA BDDEV / /A066 TAD FNCER / IF READ THEN ERROR ON THE SOURCE DEV /A066 CIA / ELSE ERROR ON DEST! /A066 TAD BDFNC / IF BDFNC=FNCER THEN SOURCE ERROR /A066 SZA CLA / YES- SKIP /A066 JMP TSTDST / NO- ITS A DEST. ERROR /A066 TAD WINSRC / IS SOURCE A WINNIE?? /A066 SKP / /A066 TSTDST, TAD WINDST / - OR DESTINATION A WINNIE?? /A066 SZA CLA / NO- SKIP /A066 ISZ BDDEV / YES- BUMP POINTER /A066 CIFMNU / /A066 JMS I IOACAL / 0 / THE ERROR MESSAGE FMTERM 1512 / POSITION ON THE SCREEN ROW 15 COL.12 /C059 / THIS POSITION LEAVES THE ELAPSED TIME MSG ON SCRN BDDEV, 0 / THE DEVICE /A066 BDDRV1, 0 / THE DRIVE BDFNC, 0 / THE ADDRESS OF THE MESSAGE READ/WRITE / JMP I FMTERR / RETURN FNCER, REDFNC / THE ADDRESS OF THE STRING THAT SAYS READ WTFNC / THE ADDRESS OF THE WRITE MESSAGE STRING FMTFNC / THE ADDRESS OF FORMAT MESSAGE STRING /A028 DEVER, DEVDRV / " " " STRING THAT SAYS DRIVE /A066 DEVARE / " " " " " " AREA /A066 / / SHFDEN, 0 /A074 TAD DENSRC /INPUT DENSITY /A074 CLL RAR /SHIFT OUT RX02 DD BIT IF SET /A074 DCA DENIN /INPUT DENSITY 0=RX01-02,1=RX50,2=WINNIE/A074 TAD DENDST /OUTPUT DENSITY /A074 /C075 CLL RAR /SHIFT OUT RX02 DD BIT IF SET /A074 DCA DENOUT /OUTPUT DENSITY 0=RX01-02,1=RX50,2=WINNIE/A074 JMP I SHFDEN /A074 / DENIN, 0 /INPUT DENSITY 0=RX01-02 1=RX50 2=WINNIE/A074 DENOUT, 0 /OUTPUT DENSITY 0=RX01-02 1=RX50 2=WINNIE/A074 / / /****** FOLLOWING DELETED VER 074 ******* /***********************************************************************/ / / / SKIFS5--SKIP IF DISK IS 5 OR WINNIE INCH / / SKIFD5-- " / / TYPICALLY USED AT RUN TIME TO DETERMINE IF / / RUNNING ON A DECMATE-I or DECMATE-II / /CALL = JMS SKIFS5 / / DENST0/DENSTY /POINTER TO DENSITY OF DISK CHKED/ / RET8 /RETURN IF 8" DRIVE / / RET50 /RET IF RX50 / / RETWIN /RET IF WINNIE / / / /***********************************************************************/ /D074SKIFD5, / /D074SKIFS5, XX /D074 TAD I SKIFS5 /POINTER TO DENSITY CODE /A074 /D074 DCA SKIFST /A074 /D074 ISZ SKIFS5 /RET /A074 /D074 AC7776 / LOAD MINUS TWO /D074 TAD I SKIFST /GET DENSITY /A074 /D074 SNA / SKIP IF RX01/RX02 WINNIE /C074 /D074 JMP ISAX50 /A074 /D074 SPA CLA /=WINNIE? /A052 /D074 JMP I SKIFS5 /NO.. =8" RX01/RX02 /A074 /D074 ISZ SKIFS5 / ELSE BUMP RETURN ADDRESS FOR WINNIE /A074 /D074ISAX50, ISZ SKIFS5 /WINNIE /A074 /D074 JMP I SKIFS5 / AND RETURN /D074SKIFST, 0 /TEMP /A074 /---------------------- /A066 PAGE /A066 /***********************************************************************/A032 / BLKMOV, XX / BLOCK MOVE ROUTINE /A032 / ADDED GENERAL CROSS FIELD ABILITY /A057 TAD I BLKMOV / GET SOURCE OPERAND / DCA X1 / ISZ BLKMOV / TAD I BLKMOV / GET DESTINATION ADDRESS / DCA X2 / ISZ BLKMOV TAD I BLKMOV / GET NUMBER OF WORDS TO MOVE / DCA T1 / ISZ BLKMOV TAD I BLKMOV / GET SOURCE FIELD /A057 DCA BLKMV1 / AND STUFF IT /A057 ISZ BLKMOV / /A057 TAD I BLKMOV / GET DESTINATION FIELD /A057 DCA BLKMV2 / AND STUFF IT /A057 ISZ BLKMOV / /A057 BLKMV1, XX / CDF SOURCE FIELD /C057 TAD I X1 / DO THE WORK / BLKMV2, XX / CDF DEST FIELD /C057 DCA I X2 / ISZ T1 / JMP BLKMV1 / CDFMYF / RESTORE OUR FIELD /A057 JMP I BLKMOV / RETURN / /***********************************************************************/A019 / /A019 / CONTROL IS PASSED HERE FROM FMTQRT WHENEVER THE DRIVE /C038 / DOES NOT HAVE A /C038 / DISKETTE READY TO BE READ IN THE DRIVE. THIS ROUTINE DISPLAYS /A019 / AN ERROR MESSAGE ASKING THE USER TO INSERT A DISKETTE OR /A019 / TO PRES GOLD MENU TO RETURM TO MAIN MENU /A019 / /A019 /***********************************************************************/A019 DRVPRB, /A019 TAD FMTQBK+RXQSPC / GET THE ERROR RETURN CODE /A019 AND (2400 / IF ERROR CODE BITS 1-3 =5 NOT READY ERROR/C020/C028 CIA / NEG /A028 TAD (2400 /A028 SZA CLA / 0=DRIVE NOT READY ON GET DEN/A019 /C028 JMP CPYER / MUST BE SOME OTHEER ERROR, GO GIVE MESSAGE /A019 JMS DRVERR / GO DISPLAY THE MESSAGES /A019 JMS WTFRRS / GO SEE WHAT HE TYPED IN /A019 JMP FMTRTA / HE TYPED RETURN (PUT A DISKETTE IN) /C028 JMP CPYDS2 / HE TYPED GOLD MENU /A019 CPYER, JMS FMTERR /A019 JMP CPYEXT / EXIT LIKE IT WAS COMPLETE /A019 FMTRTA, /CONTROL RETURNS HERE AFTER OPERATOR INSERTS DISKETTE /M031 /(AFTER HE FORGOT TO PUT ONE IN) /A031 / THE FOLLOWING LINE WAS CAUSING "ELAPSED TIME CLOCK 0:00" /A054 / TO FLASH ON THE SCREEN IF BOTH DOORS WERE LEFT OPEN, /A054 / TYPE COPY,...YOU NEED A DISK IN DRIVE (SOURCE), /A054 / CLOSE DOOR (SOURCE), HIT RETURN, SEE THE FLASH... /A054 / REPLACED BY "YOU NEED A DISK IN DRIVE (DEST) /A054 / ...CARL GERSTLE BUG #132 PRIORITY 5 (COSMETIC) /A054 /D054 JMS TIMMSG / GO ERASE SCREEN AND PUT TIME MESSAGE OUT /A019 JMP FMTRX1 / GO TRY TO READ AGAIN /C028 / THIS IS THE LIST OF BLOCKS TO ALLOCATE ON A DOCUMENT DISK /M066 DCSPBK, 0 / WPS LOADER /M066 1 / OS8-DIRECTORY BLOCK /M066 DLDIR / HOME BLOCK /M066 EMESBK / ERROR MESSAGE BLOCK /M066 DLALOC / ALLOCATION BLOCK /M066 7777 / TERMINATOR /M066 /***********************************************************************/A031/M066 / CLBUF, XX / ROUTINE TO WRITE COSCNT IN BEGINNING /A031/M066 / OF FMTBUF AND CLEAR THE REST /A031/M066 TAD (-400) / SET THE COUNTER FOR THE BUFFER /M066 DCA T1 /M066 TAD (FMTBUF-1) / SET THE ADDRESS OF THE BUFFER /M066 DCA X2 /M066 TAD COSKNT / GET COS310 CONSTANT /A031/M066 CDFMYF+10 / CHANGE TO BUFFER FIELD /A042/M066 CLALUP, DCA I X2 / CLEAR THE NEXT LOCATION /M066 ISZ T1 / INCREMENT THE COUNTER /M066 JMP CLALUP /M066 CDFMYF / CHANGE TO THIS FIELD /A042/M066 JMP I CLBUF /M066 /***********************************************************************//M066 / //M066 / WCBUF--WORST CASE BUFFER (ADDED V046) //M066 / ROUTINE TO FILL THE BUFFER WITH THE WORST CASE //M066 / PATTERN FOR THE DATA RECOVERY FROM THE DISK //M066 / THE MODULATION TECHNIQUE IS MFM (WD1793 F.D.C) //M066 / THE WORST CASE PATTERN IS THE FOLLOWING TRIO OF BITS //M066 / REPEATED AD INFINITUM: 001 //M066 / FOR NOW WE WRITE IN 12 BIT MODE SO LETS JUST USE //M066 / THE 12 BIT PATTERN (5111) //M066 / //M066 /***********************************************************************//M066 WCBUF, XX /M066 TAD (FMTBUF-1) / SET THE ADDRESS OF THE BUFFER /M066/M078 DCA X2 /M066/M078 TAD (-20 /SET TO DO FIELD CLEAR /A078 DCA WCOUNT /SET UP COUNT /A078 WCBUF1, TAD M377 / SET THE COUNTER /C078 DCA T1 /CLEAR FIELD /M066 /C078 TAD COSKNT / GET COS310 CONSTANT /M066 CDFMYF+10 / CHANGE TO BUFFER FIELD /M066 DCA I X2 / WRITE COSCNT INT LOC 0, 0000 IN LOC 1 /M066 WCBUF2, DCA I X2 / PUT IN BUFFER /M066 TAD (5111) / LOAD QUASI WORST PATTERN /M066 ISZ T1 / INCREMENT THE COUNTER /M066 JMP WCBUF2 / NOT DONE YET /M066 CLA / GET RID OF LAST PATTERN WORD /M079 ISZ WCOUNT /FIELD DONE /A078 JMP WCBUF1 /SET NEXT /A078 CDFMYF / DONE, CHANGE BACK TO OUR FIELD /M066 JMP I WCBUF /M066 WCOUNT, -20 /NUM BLOCKS IN FIELD /A078 /***********************************************************************//M066 / //M066 / FMTNOS--TELL USER THAT 8" SYSTEM DISKS CANNOT BE MADE //M066 / AND THAT HE MUST HIT RETURN TO RETURN TO THE //M066 / MAINTENANCE MENU //M066 / //M066 /***********************************************************************//M066 FMTNOS, /A053/M066 CIFMNU /M066 JMS I IOACAL /M066 0 /M066 TEXT50 /_S SYSTEM DISKETTES CANNOT BE MADE /M066 211 /M066 TEXT2A /8 INCH (SUSBSTRING) /M066 CIFMNU JMS I IOACAL /M066 0 /M066 TEXTG1 /_P_S_P /M066 1012 /POSITION /M066 TEXT26 /PRESS RETURN TO CONTINUE /M066 2700 /POSITION AFTER /M066 FMTNO1, JMS WTFRRS /WAIT FOR OPR TO TYPE JMP FMTNO2 /RETURN--GO RETURN TO A MENU PAGE /M066 JMP FMTNO1 /GOLD-MENU, MAKE HE/SHE TYPE RETURN /M066 FMTNO2, CIFMNU /M066 JMS I MNUCAL /RETURN TO MENU PAGE /M066 DLMDU1 /START AGAIN WITH MAINTENANCE MENU /M066 CPYNAM, ZBLOCK 11 / ASCII STRING CONTAINING SOURCE VOLUME NAME/A066 RCVNAM, ZBLOCK 11 / SAME AS ABOVE FOR DESTINATION /A066 / PUT HERE FOR SPACE REASONS /A066 /*************MOVED HERE SPACE REASONS VER 074 ********************/M074 /D078BLKADJ, XX / ADJUST BLOCK NUMBER /A044 / IF BLOCK NUMBER IS DLALOC (ALLOCATION BLOCK) /A044 / THEN SKIP IT (OTHERWISE WHEN WE VERIFY IT /A044 / WON'T MATCH THE SYSTEM DISK /A044 /D078 TAD FMTQBK+RXQBLK / GET THE BLOCK NUMBER /D078 TAD M377 /D078 SNA /D078 ISZ FMTQBK+RXQBLK / SKIP ALLOCATION BLOCK /D078 SNA CLA /D078 ISZ FMTSYC / COUNT THIS BLOCK /D078 JMP I BLKADJ / RETURN /--------------- PAGE /***********************************************************************/ / / / FMTSYS -- INITIALIZE SYSTEM DISKETTE / / THIS ROUTINE IS DESIGNED TO INITIALIZE / / SYSTEM DISKETTES FOR THE FOLLOWING CASES. / / THERE IS NO CONDITIONALIZED CODE SO THAT THE ROUTINE / / WILL RUN ON EITHER DM-I or DM-II DEPENDING WHAT IS / / DETERMINED AT RUN TIME ABOUT THE SYSTEM AND DESTINATION / / DISKETTES / / / / CASES: 8" TO 8" DECmate-I RX01/RX02 / / 5" to 5" DECmate-II RX50 / / 8" to 5" DECmate-II development--first 5" disk / / 5" to 8" DECmate-II not permitted / / / /***********************************************************************/ FMTSYS, / INITIALIZE SYSTEM DISKETTE /A032 JMS FMTINI / GO JMS TIMMSG & COPY BOOT TO FMTBUF /A032 / 8 INCH SYSTEM DISKETTES CANNOT BE MADE/A037 / FROM 5 INCH SYSTEM DISKETTES /A037 TAD DENIN /C074 SNA CLA /=RX01/02? /C082 JMP FMTSD8 / SYSTEM DISK IS 8" /A037 IFDEF PIRATE < / IF SYSTEM DRIVE IS 5" /A034 JMP XFMT5 / GO TELL OPR NO COPY CAN BE MADE /A032 > / END IFDEF PIRATE /A034 JMS CHKDST /CHECK DEST..IF L.T. 800 BLOCKS =ERROR /A074 /RETURNS HERE IF RX01/02 ELSE RET+1 /A074 JMP XFMT8 /NO FORMAT FROM 5 TO 8 /C074 FMTD50, /WINNIE OR RX50 /A074 FMTDD5, / 5" DESTINATION DISK--WRITE BOOT /A042 JMS WR50BT / GO WRITE RX50 BOOT /A042 1 / WITH DOC/SYSTEM SET TO SYSTEM /A042 DCA DRVSRC / SOURCE DRIVE IS SYSTEM DRIVE /A035 TAD DENIN /INPUT DEN /C074 SNA /=RX01/02? /C082 JMP FMTSY1 / IF 8 TO 5 DON'T COPY 0, 78, OR 79 /A044 CLL RAR /A074 SZA CLA /RX50? /A074 JMP FMTSD7 / NO -WINNIE SOURCE RET /A074 TAD DENOUT /A074 CLL RAR /A074 SZA CLA /RX50? /A074 JMP FMTSD7 / NO -WINNIE SOURCE RET /A074 / COPY FIRMARE:: /A035 AC0003 / COPY RX50 FIRMWARE /A035 DCA DENSTY / INDEX 4TH LINE OF TABLE PARTBL /A035 JMS SETPAR / SET PARAMETERS /A035 JMS CPYTKS / COPY THESE TWO TRACKS /A035 / COPY TRACK ZERO (SETUP, ETC.) /A044 ISZ DENSTY / INDEX TRACK ZERO IN SETPAR TABLE/A037 /C074 / MAKE IT 5 AS 4 IS USED BY WINNIE/A066 /C074 ISZ DENSTY /(THE 6TH LINE IN TABLE PARTBL)/A037/C066/C074 JMS SETPAR / SET UP PARAMETERS /A050 JMS CPYTKS / COPY TRACK ZERO /A037 FMTSD7, /A074 JMS FMTDEN / RESTORE DENSITY TO DENSITY OF DRVDST /A037 JMP FMTSY1 / AND CONTINUE BELOW /A042 FMTSD8, / SYSTEM DISK IS 8" /A042 TAD DENOUT /OUTPUT DEN /A074 SZA CLA /=RX01/02? /A082 JMP FMTDD5 / DESTINATION DISK IS 5" OR WINNIE /A042 FMTSD9, /A074 JMS WRBOOT / WRITE 8" BOOTSTRAP /A042 / FMTSY1, /C078 JMS FMTSY / GO DO THE WRITE PASS /A044 /D078 JMS FMTVCD / GO LOAD THE CODE FOR THE VERIFY PASS /A045 /D078 JMS FMTSY / GO DO THE VERIFY PASS /A044 TAD (200 /BOOTABLE WINNIE BIT /A074 JMS FMTWN /IF WINNIE--SET VOLUME TO BOOTABLE /A074 JMP FMTERN / GO TELL USER WE ARE DONE /A044 FMTSY, XX / WRITE OR READ/VERIFY SYSTEM DISKETTE /A044 /D078 DCA CPSDFN / LOAD THE FUNCTION (WRITE OR VERIFY /A044 AC0003 / DCA RXQBLK+FMTQBK / START WITH BLOCK 3 TAD (-7 /SET FIRST PROCESS TO ALLIGN ON TRACK BNDRY/A078 DCA FMTQBK+RXQRS1 /A078 FMTSY2, TAD (-10 /SET ERROR RETRY COUNT /A078 DCA FMTCNT /RETRY COUNT /A078 FMTSY3, /C074 /C078 TAD (RXERD+4000 / READ BLOCKS DCA FMTQBK+RXQFNC DCA FMTQBK+RXQDRV / SET TO SYSTEM DRIVE /D078 DCA FMTSYC / CLEAR COUNTER DCA FMTQBK+RXQBAD / SET BUFFER ADDRESS /C078 TAD (-DLSEND /LAST SYSTEM BLOCK TO BE COPPIED /A078 JMS FMTSET /SET BLOCK COUNT /A078 JMS FMTQRX JMP FMTER / ERROR--GO DISPLAY MESSAGE; WAIT FOR GM/A045 /D078 ISZ FMTQBK+RXQBLK / BUMP BLOCK NUMBER /D078 ISZ FMTSYC / AND COUNTER /D078 JMS BLKADJ / GO SEE IF MUST ADJUST BLOCK NO. /A044 /D078 TAD FMTQBK+RXQBLK / TEST FOR END /D078 TAD (-DLSEND) / /M063 /D078 SNA CLA / /D078 JMP FMTSY4 / JUMP IF SO /D078 TAD FMTQBK+RXQBAD / ADJUST BUFFER ADDRESS /D078 TAD (400) /D078 SZA / /D078 JMP FMTSY3 / LOOP IF NOT YET TIME FOR WRITE FMTSY4, TAD (RXEWT+4000 / LOAD CODE FOR LOGICAL BIT WRITE /A078 DCA FMTQBK+RXQFNC TAD DRVDST / SET TO DESTINATION DRIVE /C032 DCA FMTQBK+RXQDRV /D078 TAD FMTSYC / SET LOOP COUNTER /D078 CIA /D078 DCA FMTSYC /D078 TAD FMTSYC / ADJUST BLOCK NUMBER /D078 TAD FMTQBK+RXQBLK /D078 DCA FMTQBK+RXQBLK /D078 DCA FMTQBK+RXQBAD / INIT BUFFER ADDRESS FMTSY5, JMS FMTQRX JMP FMTER / ERROR--GO DISPLAY MESSAGE; WAIT FOR GM/A045 / / /D078 TAD FMTQBK+RXQBAD / ADJUST BUFFER ADDRESS /D078 TAD (400) /D078 DCA FMTQBK+RXQBAD / /D078 ISZ FMTQBK+RXQBLK / INCR BLOCK NUMBER /D078 JMS BLKADJ / GO SEE IF MUST ADJUST BLOCK NUMBER /A044 /D078 ISZ FMTSYC / TEST LOOP COUNTER /D078 JMP FMTSY5 / LOOP IF MORE TO WRITE / JMS FMTVCD / GO LOAD THE CODE FOR THE VERIFY PASS /A078 DCA FMTQBK+RXQFNC /SET READ OR READ VERIFY COMMAND /A078 JMS FMTQRX /DO IT /A078 SKP /ERROR CHECK RETRY COUNT /A078 JMP FMTSY6 /CONT /A078 FMTRTR, /RETRY ROUTINE /A078 ISZ FMTCNT /DONE? /A078 JMP FMTSY3 /NO--RETRY READ INPUT /A078 JMP FMTER /CAN'T GET PAST ERROR /A078 FMTSY6, TAD FMTQBK+RXQRS1 /GET NUM BLOCKS READ /A078 CIA /SET POS /A078 TAD FMTQBK+RXQBLK /START BLOCK NUMBER /A078 DCA FMTQBK+RXQBLK /SET NEXT BLOCK NUMBER /A078 TAD (-DLSEND /LAST BLOCK TO BE COPIED /A078 TAD FMTQBK+RXQBLK /LAST READ /A078 SPA CLA /IS IT END? /A078 JMP FMTSY3 /NO /A078 / TAD DSBLKS / NEG NO OF SYSTEM BLOCKS /A035 DCA DSBLKC / IS NO OF LAST BLOCK TO CLEAR /A035 JMS CLABLK / CLEAR REMAINING BLOCKS / JMS RSTBLK /RESET BLK CNT AND FNC CODE TO WRITE VFY/A078 AC0001 / DCA FMTQBK+RXQBLK / WRITE BLOCK ONE JMS FMTQRX JMP FMTER / ERROR--GO DISPLAY MESSAGE; WAIT FOR GM/A045 / AC0001 / SET AC TO INDICATE SYSTEM DISKETTE /M031 DCA STDBSW / AND WRITE IN THIS FLAG LOCATION /M031 TAD DSBLKS / GET NEG NO SYS BLKS /A035 CIA / POSITIVATE /A035 DCA DSBLKC / PASS TO STDBL /A035 JMS FMTHAB / GO DO DIRECTORY AND ALLOC BLOCKS /A045 JMP I FMTSY / RETURN /C044 XFMT8, TAD (TEXT2A / 8 INCH SUBSTRING POINTER /A037 /D074 DCA DTDDS / SET IT FOR FOR THE MESSAGE /A037 JMP DTDEN2 / GO PUT OUT THE MESSAGE /A037 FMTCNT, -10 /RETRY COUNT /A078 FMTSYC, 0 /-------------------- PAGE / THIS WILL CLEAR THE BUFFER FOR THE RXHAN REQUEST AND THEN IT WILL / CLEAR THE REMAINING BLOCKS ON THE DISKETTE BEING WRITTEN / CLABLK, XX JMS WCBUF / WRITE THE WORST CASE PATTERN /C046 /D078 TAD CPSDFN / LOAD FUNCTION (WRITE OR READ/VFY) /A044 CLALP1, /C078 TAD (-10 /RETRY COUNT /A078 DCA CLACNT /SET IT /A078 CLALP2, TAD (RXEWT+4000 /READ COMMAND /A078 DCA FMTQBK+RXQFNC / SET IT AS THE Q-BLOCK FUNCTION CODE /A031 /D078 TAD (FMTBUF) / PUT IT BACK TO ORIGINAL BUFFER /D078 DCA FMTQBK+RXQBAD / TAD DSBLKC /LAST BLOCK AVAILABLE /A078 JMS FMTSET /SET BLOCK COUNT /A078 JMS FMTQRX / DO THE NEXT BLOCK JMP FMTER / ERROR--GO DISPLAY MESSAGE; WAIT FOR GM/A045 /D078 ISZ FMTQBK+RXQBLK / INCREMENT THE BLOCK NUMBER /D078 AC7776 / LOAD MINUS DLDIR /A044 /D078 TAD FMTQBK+RXQBLK / ADD BLOCK NUMBER /A044 /D078 SNA / SKIP THE HOME BLOCK /A044 /D078 ISZ FMTQBK+RXQBLK / BY GIVING AN EXTRA INCREMENT /A044 /D078 TAD (-EMESBK+DLDIR / SEE IF LOADER MESSAGE BLOCK /A044 /D078 SNA / IF SO, SKIP IT /A044 /D078 ISZ FMTQBK+RXQBLK / BY GIVING AN EXTRA INCREMENT /A044 /D078 TAD (-DLALOC+EMESBK / THE ALLOC BLOCK /A044 /D078 SNA CLA / SKIP IT ALSO /A044 /D078 ISZ FMTQBK+RXQBLK / BY GIVING AN EXTRA INCREMENT /A044 JMS FMTVCD /GET READ READ VERIFY CODE /A078 DCA FMTQBK+RXQFNC /SET FUNCTION CODE /A078 JMS FMTQRX /DO IT /A078 SKP /IS AN ERROR /A078 JMP CLALP3 /CONT /A078 CLARTY, /RETRY /A078 ISZ CLACNT /A078 JMP CLALP2 /NOT DONE /A078 JMP FMTER /CAN'T DO IT /A078 CLALP3, /A078 TAD FMTQBK+RXQRS1 /LAST BLOCK START /A078 CIA /POS /A078 TAD FMTQBK+RXQBLK /START BLK NUMBER /A078 DCA FMTQBK+RXQBLK /SET NEXT BLOCK /A078 TAD DSBLKC / NEG NO DSK BLOCKS TO CLEAR /A027 /C035 TAD FMTQBK+RXQBLK / SEE IF IT HAS REACHED ITS MAX SPA CLA /C078 JMP CLALP1 TAD DENSTY / CHECK DENSITY SZA CLA / IS SINGLE DENSITY? JMP I CLABLK / NO IS DOUBLE DENSITY. DONE... / TAD (RXEPW+4000) / WRITE OUT THE LAST TWO SECTORS DCA FMTQBK+RXQFNC / USING PHYSICAL WRITE TAD (25) / SET THE SECTOR DCA FMTQBK+RXQSEC DECIMAL /A035 TRKCMT, / THE CONSTANT IN THE FOLLOWING STATEMENT APPEARS TO HAVE BEEN /A035 / INCORRECTLY SPECIFIED FROM THE TIME THIS CODE WAS WRITTEN /A035 / ORIGINALLY, THE STATEMENT WAS TAD (114) OCTAL. /A035 / THE PURPOSE OF THIS CODE APPEARS TO BE TO COMPLETE THE /A035 / INITIALIZATION OF THE TRACK WHICH CONTAINS THE LAST BLOCK, /A035 / BLOCK 632. THIS BLOCK RESIDES ON TRACK 1+IP(3*632/26) /A035 / WHERE IP MEANS INTEGER PART. SINCE 3*632/26 IS 72.92+ /A035 / THE TRACK WHICH CONTAINS THE LAST BLOCK IS TRACK 73 /A035 / TRACKS 0,74,75, AND 76 ARE NOT USED ON RX01 DISKETTES /A035 TAD (73) / LOAD TRACK NO OF LAST BLOCK /C035 OCTAL /A035 DCA FMTQBK+RXQTRK / SET THE TRACK NUMBER /M032 JMS FMTQRX JMP FMTER / ERROR--GO DISPLAY MESSAGE; WAIT FOR GM/A045 TAD (30) / GET THE LAST SECTOR WRITTEN DCA FMTQBK+RXQSEC JMS FMTQRX JMP FMTER / ERROR--GO DISPLAY MESSAGE; WAIT FOR GM/A045 TAD (RXEWT+4000) / RESET THE FUNCTION DCA FMTQBK+RXQFNC / TO LOGICAL WRITE DCA FMTQBK+RXQBLK / CLEAR THE BLOCK COUNTER JMP I CLABLK CLACNT, -10 /ERROR RETRY COUNT /A078 CPYEXA, XX /A021 CIFMNU JMS I IOACAL / 0 TEXT11 / PRESS RETURN (THIS MSG CONTINUES BELOW) 1600 / POSITION CODE FOR CLEAR /C059 /A043 2012 / POSITION CODE FOR "PRESS RETURN" CPYCON, XX / ADDRESS OF MSG: / "FOR ANOTHER COPY" OR / "TO RETRY FORMAT" OR / "TO RETRY INITIALIZATION" AC7777 / MINUS COPY CODE /A057 TAD FNCODE / GET ORIGINAL FUNCTION CODE /A057 SZA CLA /A029 JMP CPYCN1 / IF NOT COPY BYPASS /A029 JMS DRVTST / SKIP IF EITHER DRIVE IS DRIVE 0 /A033 JMP CPYCN2 / NEITHER DRIVE IS DRIVE 0 /A033 CIFMNU / TELL USER THAT WE'RE DONE JMS I IOACAL / PRINT /C036 0 / DEFAULT OUTPUT ROUTINE TEXTG2 / GENERAL PURPOSE--2 SUBSTRINGS /A036 2212 / CURSOR POSITION TEXT33 / "OR, " /A036 2216 / /A036 TEXT3 / "REPLACE THE ORIGINAL ... /C036 3000 / FINAL CURSOR PSN /A036 JMP CPYCN1 / GO PRINT GOLD WITHOUT "OR" /A033 CPYCN2, CIFMNU /A033 JMS I IOACAL 0 TEXTG2 / GENERAL PURPOSE--2 SUBSTRINGS /C036 2412 TEXT33 / "OR, " /A036 IFNDEF ITALIAN <2416> IFDEF ITALIAN <2412> TEXT15 / "Press Gold ... /A033 2700 /A036 JMP I CPYEXA / RETURN /A055 / CPYCN1, /A029 JMS PPG / PRINT PRESS GOLD /A036 JMP I CPYEXA / RETURN /A021 PPG, XX / PRINT PRESS GOLD /A036 CIFMNU JMS I IOACAL 0 TEXTG1 / GENERAL PURPOSE--1 SUBSTRING /C036 2412 TEXT15 / "Press Gold ... /A033 2700 / JMP I PPG / RETURN /A036 /***********************************************************************/A031 / / GTDKID GETS THE DISK ID OF THE SYSTEM DISK / THE ID IS THE THREE NAME WORDS AND THE "RANDOM" WORD /A057 / IT IS USED TO INSURE THAT THE SAME SYSTEM DISK IS REINSERTED / IN CASES WHERE IT MUST BE REMOVED, C.F. BACKUP COPY / /*********************************************************************** GTDKID, XX /A017 DCA GTDKIA / SAVE BUFFER ADDRESS /A057 DCA FMTQBK+RXQDRV / SET TO DRIVE 0 /A031 JMS FMTDEN / GET DENSITY OF DRIVE 0 /A033 /D074 TAD DENSTY / AND SAVE IT /A033 /D074 DCA DENST0 / FOR LATER USE /A033 TAD (DLDIR) / DIR BLOCK /A017 DCA FMTQBK+RXQBLK /A017 TAD (RXERD+4000) /A017 DCA FMTQBK+RXQFNC / FUNCTION CODE /A017 TAD (FMTBUF) / BUFFER /A017 DCA FMTQBK+RXQBAD / ADDR /A017 JMS FMTRXT / READ /A017 JMP FMTER / ERROR--GO DISPLAY MESSAGE; WAIT FOR GM/A045 JMS BLKMOV / COPY INTO IDBUF /A057 FMTBUF+2-1 / SOURCE ADDRESS /A057 GTDKIA, XX / DESTINATION ADDRESS /A057 -4 / SIZE /A057 CDFMYF+10 / SOURCE FIELD /A057 CDFMYF / DESTINATION FIELD /A057 JMP I GTDKID / RETURN /A017 /-------------------- PAGE /***********************************************************************/ / / / CHKID--CHECK TO MAKE SURE ORIGINAL SYSTEM DISKETTE IS INSTALLED / / BEFORE WE RETURN TO MENU. ALSO INSURE THAT UDK'S ARE / / ENABLED AGAIN / / / / WHEN CPYDSK IS CALLED, THE NAME AND DISK "RANDOM" ID / / ARE READ INTO IDBUF0-3. BEFORE CPYDSK IS EXITED, / / THE NAME AND "RANDOM" ID FOR THE DISK IN DRIVE 0 / / ARE READ INTO IDBUF4-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 / / / / BEFORE EXITING UDK'S ARE ENABLED AGAIN / / / /***********************************************************************/ CHKID, XX / CHECK ORIGINAL SYSTEM DISKETTE / CHKID1, TAD (CDFMYF+10 /RESET ID READ FIELD /A081 DCA FMTQBK+RXQBFD /A081 TAD (IDBUF+4-1 / LOAD COMPARE BUFFER INDEX /A057 JMS GTDKID / GO READ NAME & ID /C057 TAD (-4 / /A057 DCA T1 / SET UP COUNTER /A057 TAD (IDBUF-1 / /A057 DCA X1 / SET UP SOURCE INDEX /A057 TAD (IDBUF+4-1 / /A057 DCA X2 / SET UP COMPARE INDEX /A057 CHKIDL, TAD I X1 / READ OLD WORD /A057 CIA / TAD I X2 / COMPARE WITH NEW WORD SZA CLA / JMP CHKID2 / NO, GO ASK FOR ORIGINAL /A056 ISZ T1 / SEE IF LAST WORD /A057 JMP CHKIDL / NO, LOOP BACK /A057 CIFSYS / /A057 UDKOPS / ENABLE UDK'S AGAIN /A057 JMP I CHKID / RETURN /A024 / / / CRTNM / THIS CREATES A 3 WORD BUFFER THAT CONTAINS THE DISKETTE NAME / IT TAKES 6 ASCII CHARACTERS ANS PACKS THEM INTO 3 2-CHARACTER / 6-BIT WORDS / CALLING SEQUENCE: / TAD (PTR TO BUF ADDR TO STORE NAME) / JMS CRTNM / / CRTNM, XX DCA CRNMPT / SAVE BUF PTR DCA INIBK / CLEAR THE BUFFER FOR THE 6-CHAR NAME DCA INIBK+1 DCA INIBK+2 CDFMNU / CHECK FOR NO NAME TYPED IN TAD (MNIBUF) / THE INPUT BUFFER OFSET FROM MUBUF TAD I (MNUCAL+1) / GET THE ADDRESS OF MUBUF DCA CPYMN1 TAD I CPYMN1 CDFMYF / MAKE A CDF FOR THIS FIELD SNA CLA / JMP INLP2D / IF NO NAME SET DEFAULT NAME / AC7777 / LOAD MINUS ONE /C056 TAD CPYMN1 / TO GENERATE THE ADDRESS FOR X1 /C056 / DCA X1 DCA INBYTE / CLEAR COUNTER TAD (-6) / SET THE LOOP COUNTER DCA INLP1 TAD (INIBK-1) / GET THE STARTING ADDRESS OF THE BUFFER / THAT IT WILL BE STORED DCA INWDAR INLUP1, CDFMNU / GET THE CHARACTER (ASCII) TAD I X1 CDFMYF / MAKE A CDF FOR THIS FIELD / SNA / JMP INLPE1 / IF ZERO THEN END OF STRING JMS ININXT / INSERT THE CHAR. ISZ INLP1 / INCREMENT THE LOOP COUNTER JMP INLUP1 JMP INLP1D INLPE1, TAD (BLANK) / PAD THE REMAINING WITH BLANKS JMS ININXT / PLACE IT IN THE BUFFER ISZ INLP1 JMP INLPE1 INLP1D, TAD INIBK / SET THE NAME DCA I CRNMPT / IN THE BUFFER FOR BLOCK 0 ISZ CRNMPT /NEXT TAD INIBK+1 DCA I CRNMPT ISZ CRNMPT TAD INIBK+2 DCA I CRNMPT / JMP I CRTNM / CRNMPT, 0 / PTR TO BUFFER INLP2D, TAD (7061) / THIS IS WP DCA INIBK TAD (4552) / DI DCA INIBK+1 TAD (6454) / SK DCA INIBK+2 JMP INLP1D / INWDAR, 0 INLP1, 0 CPYMN1, 0 INIBK, ZBLOCK 3 / / THIS WILL PUT A CHARACTER THAT IS IN ASCII INTO THE PACKED STRING IN / COS-310 FORMAT. / ININXT, XX TAD (-140) / SPA / TAD (40) / MAKE ALL UPPER CASE TAD (100-OFFSET) / CONVERT TO 6 BIT SPA SNA / JMP I ININXT / IF IT IS A CHARACTER <40 SKIP IT AND P77 / GET ONLY 6 BITS MQL ISZ INBYTE / SEE IF IT IS THE FISRT OR SECOND BYTE TAD INBYTE CLL RAR SNL CLA / JMP ININXA / SECOND BYTE MQA ISZ INWDAR / INCREMENT THE ADDRESS BSW / SET FOR TOP BYTE TAD I INWDAR DCA I INWDAR JMP I ININXT / RETURN / ININXA, MQA TAD I INWDAR DCA I INWDAR JMP I ININXT / INBYTE, 0 / /GETSZE--GET NUMBER BLOCKS FOR VOLUME OR RX50 /FOR RX50 NUMBER OF BLOCKS =790 /FOR WINNIE VOLUME = NUMBER OF BLOCKS * (16) / GETSZE, 0 /A074 SNA /0=RX50 /A074 JMP GETSZ1 /IS AN RX50 /A074 CLL RTL /*4 /A074 CLL RTL /*4 /A074 SKP /A074 DECIMAL GETSZ1, TAD (800 /NUMBER BLOCKS AVAILABLE ON RX50/A074 /C075 OCTAL JMP I GETSZE /A074 /-------------------- PAGE /***********************************************************************A019 / A019 / THIS ROUTINE PRINTS A MESSAGE WHEN THE DRIVE IS NOT READY A019 / TELLING THE USER WHICH DRIVE IS NOT READY AND ASKING HIM A019 / TO PRESS GOLD MENU TO RETURN TO MAIN MENU FOR ANOTHER TRY A019 / A019 /***********************************************************************A019 DRVERR, XX CIFMNU /A019 JMS I IOACAL / "YOU NEED A DISKETTE IN DRIVE X" /A019 0 /A019 TEXT34 /A019 0050 / CLEAR FROM DATE & TIME /C057 1515 / CHANGED POINTER & DELETED SPACES /C033 FMTQBK+RXQDRV / DRIVE NUMBER NOT READY /C038 CIFMNU /A019 JMS I IOACAL /A019 0 /A019 TEXT36 / "INSERT A DISKETTE IN THE DRIVE" /A019 1715 / CURSOR LOCATION /A019 /C038 CIFMNU JMS I IOACAL / 0 TEXTG3 / GENERAL PURPOSE -- 3 SUBSTRINGS /A036 2115 /C038 TEXT35 / "AND PRESS RETURN /A036 / 2604 TEXT33 / "OR, " /C036 / IFNDEF ITALIAN <2610> / /C036 IFDEF ITALIAN <2604> TEXT15 / "Press Gold ... /A033 2700 / POSITION FOR CURSOR AFTER MSG /A033 / JMP I DRVERR /A019 / ********************************************************************* /A066 / / WININI - DISPLAYS THE VOLUME NAME THE USER IS ABOUT TO / INITIALIZE, ASKS FOR A RETURN TO CONTINUE OR / A GOLD MENU TO RETURN TO MAIN MENU W/O INITIALIZ / / ********************************************************************* /A066 WININI, XX CIFMNU JMS I IOACAL 0 WINITX / "THE VOLUME NAMED ????? WILL BE INITI.." 0050 / CLEAR FROM DATE TIME DISPLAY 1505 RCVNAM / THE VOLUME NAME (ASCII STRING) CIFMNU JMS I IOACAL 0 TEXTG3 2404 TEXT26 / "PRESS RETURN TO CONTINUE" 2604 TEXT33 / "OR, " IFNDEF ITALIAN <2610> IFDEF ITALIAN <2604> TEXT15 / "PRESS GOLD MENU TO RETURN..." 2700 JMP I WININI SHOWNM, XX TAD WINDST / NOW TELL USER THE NAME OF THE VOLUME /A066 / TO BE INITIALIZED & ALLOW EXIT /A066 SNA CLA / SKIP IF WINNIE /A066 JMP FMTDGO / ITS A DISKETTE- BYPASS /A066 JMS WININI / DISPLAY MESSAGE /A066 JMS WTFRRS / WAIT FOR ANSWER /A066 JMP FMTDGO / RETURN ENTERED- INITIALIZE IT /A066 JMP CPYDS2 / GOLD MENU- QUIT W/O INITIALIZING /A066 FMTDGO, JMP I SHOWNM /A066 / ********************************************************************* /A066 / /A066 / FMTWER-- TELL USER THAT A V1.5 WINNIE AREA DOES NOT HAVE /A066 / A VOLUME MOUNTED OR IS TOO SMALL FOR DOCUMENT INIT /A066 / /A066 / /A066 / ********************************************************************* /A066 FMTWER, TAD (0060) / CLEAR FROM TIME DISPLAY ON /A066 JMS CLRSCR /A066 TAD WINDST / WHICH TYPE OF ERROR??? /A066 /C074 /-1=VOL. NOT ASSIGNED -2=AREA TOO SMALL -3=AREA TOO LARGE. G.T. 4095 /A074 JMS SETEXT /GET TEXT STRING POINTER /A074 DCA FMTWTX / /A066 CIFMNU /A066 JMS I IOACAL / PRINT "DESTINATION AREA IS...." /A066 0 /A066 FMTWTX, 0 /A066 1505 /A066 TXTDST /A066 DRVDST /A066 / JMS FMTWTY /MADE INTO SUBRTN /A074 JMP CPYDS2 / " GOLD MENU- BACK TO MAIN MENU /C074 JMP CKDFS2 / ENTERED CR - GO BACK TO ASK FOR DRV # /C074 / FMTWTY, 0 /A074 CIFMNU /A066 JMS I IOACAL / /A066 0 /A066 TEXTG3 / GENERAL PURPOSE CONTROL STRING 3 /A066 2205 / LINE 22 COL 5 /A066 TEXT26 / "PRESS RETURN TO CONTINUE /A066 2405 / LINE 24 COL 5 /A066 TEXT33 / "OR, " /A066 IFNDEF ITALIAN <2411> / /A066 IFDEF ITALIAN <2405> TEXT15 / "PRESS GOLD MENU TO RECALL THE /A066 2700 / LINE 27 COL 0--FOR OPR RESP /A066 / JMS WTFRRS / WAIT FOR REPLY /A066 ISZ FMTWTY / ENTERED CR - GO BACK TO ASK FOR DRV # /C074 JMP I FMTWTY / " GOLD MENU- BACK TO MAIN MENU /C074 /********************************************************************/A074 /FOLLOWING MAKES SURE THAT THE SYSTEM VOLUME ON THE WINNIE IS BOOTABLE /A074 / AND THAT DOC VOLUME IS NOT /A074 / /***********************************************************************/A074 FMTWN, XX /A074 DCA BOOTBT /SAVE BOOTABLE WINNIE BIT /A074 AC7776 /A074 TAD DENSTY /A074 SPA SNA CLA /WINNIE /A074 JMP I FMTWN /NO EXIT. /A074 TAD DRVDST /DESTINATION DRIVE /A074 DCA FMTQBK+RXQDRV / PUT DRIVE # IN Q-BLK /A066 /M076 JMS FMTGTV /GET VOLUME DATA DEST DRIVE /C074 JMP FMTER /ERROR /A074 CDFMYF+10 /BUFFER FIELD /A074 TAD I BOOTLC /LOCATION OF BOOT BIT /A074 AND (7577 /CLEAR BOOT BIT /A074 TAD BOOTBT /SET BOOTABLE BIT /A074 DCA I BOOTLC /A074 CDFMYF /A074 TAD (RDEUPD /A074 DCA FMTQBK+RXQFNC /UPDATE VOLUME DATA /A074 JMS FMTRXT /A074 JMP FMTER /A074 JMP I FMTWN /RET /A074 BOOTLC, 21 /LOCATION OF BOOT WORD /A074 BOOTBT, 200 /BOOT BIT /A074 / /GET VOLUME DATA /A074 / FMTGTV, 0 /A074 TAD (RDEGTV+4000) / SET Q-BLK FOR GET VOLUME DATA CALL /A066 DCA FMTQBK+RXQFNC /A066 DCA FMTQBK+RXQBLK / BE SURE VALID BLOCK # (0 ALWAYS IS) /A066 JMS FMTRXT / QUEUE REQUEST W/O CHECKING TIME /A070 SKP /IS AN ERROR /A074 ISZ FMTGTV /NORMAL RET /A074 JMP I FMTGTV /A074 /-------------------- PAGE /D056 ERRMES, /D056 TEXT '^P &TYPING "!A" HAS NO MEANING HERE, PLEASE RETYPE.^P' / THESE ARE THE CONSTANTS AND ADDRESSES USED BY THE ERROR MESSAGE. / / FNCER, / REDFNC /THE ADDRESS OF THE STRING THAT SAYS READ / WTFNC /THE ADDRESS OF THE WRITE MESSAGE STRING / FMTFNC /THE ADDRESS OF THE FORMAT MESSAGE STRING /A028 / WTFNC, IFDEF ENGLSH < TEXT 'WRITE' > IFDEF ITALIAN < TEXT "SCRITTURA" > IFDEF V30NOR < TEXT "SKRIVE" > /A086 IFDEF V30SWE < TEXT 'SKRIV'> / REDFNC, IFDEF ENGLSH < TEXT 'READ' > IFDEF ITALIAN < TEXT "LETTURA" > IFDEF V30NOR < TEXT "LESE" > /A086 IFDEF V30SWE < TEXT 'L\DS'> / FMTFNC, IFDEF ENGLSH < TEXT 'FORMAT' > /**************************************************************/A028 / FOLLOWING MESSAGES MUST BE CHANGED TO REFLECT FORMAT /A028 /******************************************************************/A028 IFDEF ITALIAN < TEXT "FORMATO" > IFDEF V30NOR < TEXT 'FORMATERE'> /A086 IFDEF V30SWE < TEXT 'FORMATERA'> / /-------------------- / / COMMANDS / /D056 COPYST, IFDEF ENGLSH < TEXT 'COPY' > /D056 IFDEF CANADA < TEXT "COPIE" > /D056 IFDEF FRENCH < TEXT "COPIE" > /D056 IFDEF DUTCH < TEXT "KOPIE" > /D056 IFDEF GERMAN < TEXT "COPY" > /D056 IFDEF NORWAY < TEXT "KOPI" > /D056 IFDEF SWEDSH < TEXT "KOPI" > /D056 IFDEF DANISH < TEXT "KOPI" > /D056/ /D056 NOST, IFDEF ENGLSH < TEXT 'NO' > /D056 IFDEF CANADA < TEXT "NON" > /D056 IFDEF FRENCH < TEXT "NON" > /D056 IFDEF DUTCH < TEXT "NEE" > /D056 IFDEF GERMAN < TEXT "NEIN" > /D056 IFDEF NORWAY < TEXT "NEI" > /D056 IFDEF SWEDSH < TEXT "NEJ" > /D056 IFDEF DANISH < TEXT "NEJ" > /D056/ /D056 IFDEF CANADA < TEXT "POUR CONTINUER" > /D056 IFDEF FRENCH < TEXT "POUR CONTINUER" > /D056 IFDEF DUTCH < TEXT "VOOR VERVOLG" > /D056 IFDEF GERMAN < TEXT "FORTS." > /D056 IFDEF NORWAY < TEXT "FORTS" > /D056 IFDEF SWEDSH < TEXT "FORTS" > /D056 IFDEF DANISH < TEXT "FORTS" > / / MESSAGES / IFDEF ENGLSH < TEXT1A, TEXT '^P!E -- &B&A&C&K&U&P &M&E&N&U --' /C066 TEXT1B, TEXT '^P&REMOVE THE SYSTEM DISKETTE FROM DRIVE 0.' TEXT1C, TEXT '^P&PLACE THE DISKETTE(S) INTO THE FOLLOWING DRIVE(S):' /C066 TEXT1D, / THIS TEXT MUST BE AN EVEN NUMBER OF CHARACTERS FOR /A033 / FOR ALL TRANSLATIONS. THE NEXT TEXT STATEMENT IS /A033 / DESIGNED TO BE A CONTINUATION OF THIS TEXT BY /A033 / REORIGINING TO OVERLAY THE FULL ZERO WORD TERMINATOR *.-1 /A033 TEXT '^P&!S !D - &D&E&S&T&I&N&A&T&I&O&N !S - &THIS !S ' /C033/C066 *.-1 /THE FOLLOWING TEXT IS A CONTINUATION OF THE ABOVE TEXT /A033 TEXT 'WILL BE &O&V&E&R&W&R&I&T&T&E&N.' /C033 TEXT1E, TEXT '^P&PLACE THE DISKETTE WHICH IS TO &R&E&C&E&I&V&E THE COPY INTO DRIVE !D.' /C033 TEXT1F, TEXT '^P&USE A BLANK !S OR A USED !S YOU NO LONGER NEED.' TEXT1G, TEXT '^P&!S !D - &S&O&U&R&C&E !S - &THIS !S WILL BE &R&E&A&D.' /C033/C066 TEXT1H, TEXT '^P&PLACE THE DISKETTE WHICH IS TO BE &C&O&P&I&E&D INTO DRIVE !D.' /C033 TEXT1I, / DELETED POSITION COMMAND /C036 TEXT '&WHEN YOU ARE READY TYPE &C&O&P&Y AND &PRESS &R&E&T&U&R&N.' DEVDRV, TEXT 'DRIVE' / /A066 DEVARE, TEXT 'DEVICE' / /A066 MEDDSK, TEXT 'DISKETTE' / /A066 MEDVOL, TEXT 'VOLUME' / /A066 > IFDEF ITALIAN < TEXT1A, TEXT '^P!E -- !&SALVATAGGIO --' /C066 TEXT1B, TEXT "^P&TOGLIERE IL !&SISTEMA DALL'UNIT\A 0." TEXT1C, TEXT '^P&INSERIRE I DISCHETTI NELLE SEGUENTI UNIT\A:' /C066 TEXT1D, / THIS TEXT MUST BE AN EVEN NUMBER OF CHARACTERS FOR /A033 / FOR ALL TRANSLATIONS. THE NEXT TEXT STATEMENT IS /A033 / DESIGNED TO BE A CONTINUATION OF THIS TEXT BY /A033 / REORIGINING TO OVERLAY THE FULL ZERO WORD TERMINATOR *.-1 /A033 TEXT '^P&!S !D - !&COPIA - &QUESTO !S ' /C033/C066 *.-1 /THE FOLLOWING TEXT IS A CONTINUATION OF THE ABOVE TEXT /A033 TEXT 'VIENE !&SOVRASCRITTO.' /C033 TEXT1E, TEXT "^P&INSERIRE IL SUPPORTO !&COPIA NELL'UNIT\A !D." /C033 TEXT1F, /TEXT '^P&USE A BLANK !S OR A USED !S YOU NO LONGER NEED.' TEXT1G, TEXT '^P&!S !D - !&ORIGINALE - &QUESTO !S VIENE !&LETTO.' /C033/C066 TEXT1H, TEXT "^P&INSERIRE IL SUPPORTO !&ORIGINALE NELL'UNIT\A !D." /C033 TEXT1I, / DELETED POSITION COMMAND /C036 TEXT '&INTRODURRE !&COPIA E &PREMERE !&RITRNO.' DEVDRV, TEXT 'UNIT\A' / /A066 DEVARE, TEXT 'UNIT\A' / /A066 MEDDSK, TEXT 'SUPPORTO' / /A066 MEDVOL, TEXT 'SUPPORTO' / /A066 > IFDEF V30NOR < /A086 TEXT1A, TEXT '^P!E -- !&KOPERING --' /A086 TEXT1B, TEXT '^P&TA SYSTEMDISKETTEN UA AV STASJON 0.' /A086 TEXT1C, TEXT '^P&SETT DISKETTEN(E) INN I F\XLGENDE STASJON(ER):' /A086 TEXT1D, TEXT '^P&!S !D - !&MOTTAGER-!S - !S HER VIL BLI !&OVERSKREVET.' /A086 TEXT1E, TEXT '^P&DISKETTEN DU SKAL KOPIERE !&TIL, SETTES I STASJON !D.' /A086 TEXT1F, TEXT '^P&BRUKEN NY !S EL. EN GAMMEL !S DU IKKE TRENGER.' /A086 TEXT1G, TEXT '^P&!S !D - !&AVSENDER-!S - &DISKETTEN HER VIL BLI !&LEST.'/A086 TEXT1H, TEXT '^P&DISKETTEN DU SKAL KOPIERE !&FRA, SETTES I STASJON !D.' /A086 TEXT1I, TEXT '&N\ER DETTE ER GJORT, SKRIV !&KOPI OG TRYKK P\E !&RETUR.' /A086 DEVDRV, TEXT 'STASJON' /A086 DEVARE, TEXT 'ENHET' /A086 MEDDSK, TEXT 'DISKETT' /A086 MEDVOL, TEXT 'OMR\EDE' /A086 > IFDEF V30SWE < TEXT1A, TEXT '^P!E -- &S\DKERHETSKOPIERING --' /C066 TEXT1B, TEXT '^P&TA UT SYSTEMDISKETTEN I ENHET 0.' TEXT1C, TEXT '^P&S\TT DISKETT(ER) I F\VLJANDE ENHET(ER):' /C066 TEXT1D, / THIS TEXT MUST BE AN EVEN NUMBER OF CHARACTERS FOR /A033 / FOR ALL TRANSLATIONS. THE NEXT TEXT STATEMENT IS /A033 / DESIGNED TO BE A CONTINUATION OF THIS TEXT BY /A033 / REORIGINING TO OVERLAY THE FULL ZERO WORD TERMINATOR *.-1 /A033 TEXT '^P&!S !D - &DISKETTKOPIA !S - &DENNA !S ' /C033/C066 *.-1 /THE FOLLOWING TEXT IS A CONTINUATION OF THE ABOVE TEXT /A033 TEXT 'KOMMER ATT SKRIVAS \VVER. ' /C033 TEXT1E, TEXT '^P&S\DTT I DISKETTEN, SOM SKA TA EMDT KOPIAN, I ENHET !D.' /C033 TEXT1F, TEXT '^P&ANV\DND EN TOM !S ELLER EN ANV\DND !S SOM DU INTE L\DNGRE BEH\VVER.' TEXT1G, TEXT '^P&!S !D - &ORIGINAL!S - &DENNA !S KOMMER ATT L\DSAS.' /C033/C066 TEXT1H, TEXT '^P&S\DTT I ORIGINALDISKETTEN I ENHET !D.' /C033 TEXT1I, / DELETED POSITION COMMAND /C036 TEXT '&N\DR DU \DR KLAR, SKRIV KOPIERA OCH TRYCK P\E RETUR.' DEVDRV, TEXT 'ENHET' / /A066 DEVARE, TEXT 'ENHET' / /A066 MEDDSK, TEXT 'DISKETT' / /A066 MEDVOL, TEXT 'VOLYM' / /A066 > / END IFDEF V30SWE / TEXT3, /A010 /V036 CHANGED TO A SUBSTRING BY REMOVING ^P&O&R /A036 /V036 ADDED WORD "ORIGINAL" /A036 IFDEF ENGLSH < TEXT '&REPLACE THE ORIGINAL SYSTEM DISKETTE IN DRIVE 0 AND'>/A010/C036 IFDEF ITALIAN < TEXT "&INSERIRE IL DISCO SISTEMA NELL'UNIT\A 0 E"> IFDEF V30NOR < TEXT '&SETT SYSTEMDISKETTEN TILBAKE I STASJON 0 OG'> /A086 IFDEF V30SWE < TEXT '&BYT UT ORIGINALSYSTEMDISKETTEN I ENHET 0 OCH'> / TEXT11, IFDEF ENGLSH < TEXT '^P!E^P&PRESS &R&E&T&U&R&N ^S'> /C028/C033/C057 IFDEF ITALIAN < TEXT '^P!E^P&PREMERE !&RITORNO ^S'> IFDEF V30NOR < TEXT '^P!E^PTRYKK P\E !&RETUR ^S'> /A086 IFDEF V30SWE < TEXT '^P!E^PTRYCK P\E RETUR ^S'> TEXT1K, IFDEF ENGLSH < TEXT 'FOR ANOTHER COPY' > /C028 IFDEF ITALIAN < TEXT "PER UN'ALTRA COPIA"> IFDEF V30NOR < TEXT 'FOR \E F\E EN KOPI TIL'> /A086 IFDEF V30SWE < TEXT 'F\VR ATT KOPIERA'> TEXT1L, IFDEF ENGLSH < TEXT 'TO RETRY FORMAT' > /C028 IFDEF ITALIAN < TEXT 'PER RIPROVARE : FORMATO NON CORRETTO'> IFDEF V30NOR < TEXT 'FOR \E FORMATERE P\E NYTT'> /A086 IFDEF V30SWE < TEXT 'F\VR ATT FORMATERA IGEN'> / TEXT1M, IFDEF ENGLSH < TEXT '^P!E^P&FORMAT IN PROGRESS - &PLEASE STAND BY.'> /A028 IFDEF ITALIAN < TEXT "^P!E^P&FORMATTAMENTO IN CORSO - &PREGO ATTENDERE..."> IFDEF V30NOR < TEXT '^P!E^P&FORMTERING P\EG\ER. &VENT...'> /A086 IFDEF V30SWE < TEXT '^P!E^P&FORMATERING P\EG\ER - &V\DNTA'> / TEXT1N, IFDEF ENGLSH < TEXT 'TO RETRY INITIALIZATION, OR' > /A030 IFDEF ITALIAN < TEXT "PER RIPROVARE : INIZIALIZZAZIONE NON CORRETTA"> IFDEF V30NOR < TEXT 'FOR \E KLARGJ\XRE P\E NYTT EL.'> /A086 IFDEF V30SWE < TEXT 'F\VR ATT INITIERA IGEN, ELLER'> / TEXT12, IFDEF ENGLSH < TEXT '^P!E ^P&E&L&A&P&S&E&D &T&I&M&E &C&L&O&C&K 0:00' > / / THE "0:00" HAS BEEN REMOVED FROM THE FOREIGN TRANSLATIONS BECAUSE IT IS NOT / ACTUALLY NEEDED AS THE "0:00" IS NEVER ON THE SCREEN FOR MORE THAN A SECOND / AND "0:00" IS PRINTED ANYWAY BY THE TIME ROUTINE. / IFDEF ITALIAN < TEXT "^P!E^P!&TEMPO !&IMPIEGATO"> IFDEF V30NOR < TEXT '^P!E ^P!&MEDG\ETT !&TID'> /A086 IFDEF V30SWE < TEXT '^P!E ^PANV\DND TID: 0:00'> / TEXT13, TEXT '^P!D:!2D' TEXT15, IFDEF ENGLSH < TEXT '&PRESS &GOLD &M&E&N&U TO RECALL THE &MAIN &MENU.' /C033 > /A SUBSTRING--HAS NO INTERNAL PARAMETERS /A033 IFDEF ITALIAN < TEXT "&PREMERE &ORO !&MENU PER TORNARE AL &MENU &PRINCIPALE."> IFDEF V30NOR < TEXT '&TRYKK P\E &GULL !&MENY FOR \E F\E &HOVEDMENYN.'> /A086 IFDEF V30SWE < TEXT '&ANV\DND GULD MENY F\VR ATT \ETERG\E TILL HUVUDMENYN'> / FMTERM, IFDEF ENGLSH < TEXT '^P!E&ERROR ON !S ^D WHILE TRYING TO !S' /C066 > IFDEF ITALIAN < TEXT "^P!E&ERRORE SULL'!S ^D IN !S"> IFDEF V30NOR < TEXT '^P!E&FEIL P\E !S ^D VED FORS\XK P\E \E !S'>/A086 IFDEF V30SWE < TEXT '^P!E&FEL P\E !S ^D VID !S'> IFDEF ENGLSH < TEXT17, TEXT '^P!E-- &B&A&C&K&U&P &E&R&R&O&R &M&E&N&U --' /A014 TEXT18, TEXT '&THE DENSITITES OF Y' /SUBSTRING OF TEXT20 (DM-I) /A034 TEXT20, TEXT '^P^SOUR DISKETTES ARE DIFFERENT.' /A014 TEXT22, TEXT '^P&YOU ARE TRYING TO COPY FROM!S TO!S.' /A014 /C033 /C034 TEXT23, TEXT '^P&PLEASE USE A!S DISKETTE FOR THE COPY.' /A014 /C033 /C034 TEXT24, TEXT ' SINGLE DENSITY' /C033 TEXT25, TEXT ' DOUBLE DENSITY' /C033 TEXT2A, TEXT ' 8 INCH' /A033 TEXT2B, TEXT ' 5 INCH' /A033 TEXTY, TEXT '&Y' / DM-II SUBSTR FOR TEXT20 /A034 TEXT26, TEXT '&PRESS &R&E&T&U&R&N TO CONTINUE' /A014 /C051 TEXWS1, TEXT '^P!E&THERE IS NO VOLUME ASSIGNED TO ^S DEVICE !D' /C074 TEXWS2, TEXT '^P!E&VOLUME ASSIGNED TO ^S DEVICE !D IS TOO SMALL' /C074 TEXWS3, TEXT '^P!E&VOLUME ASSIGNED TO ^S DEVICE !D IS TOO LARGE' /C074 TXTSRC, TEXT 'SOURCE' /A066 TXTDST, TEXT 'DESTINATION' /A066 WINRCV, TEXT '^P&THE VOLUME NAMED ^A WILL &R&E&C&E&I&V&E THE COPY' /A066 WINCPY, TEXT '^P&THE VOLUME NAMED ^A WILL BE &C&O&P&I&E&D' /A066 WINITX, TEXT '^P!E^P!E&THE VOLUME NAMED ^A WILL BE INITIALIZED' /A066 /D057 TEXT27, TEXT '-- &F&O&R&M&A&T &D&I&S&K&E&T&T&E --' /A014 TEXT30, TEXT '&PLEASE SELECT HOW THIS DISKETTE WILL BE INITIALIZED.' /A014 TEXT31, TEXT '&TYPE &D FOR DOCUMENT OR &S FOR SYSTEM ' /A014 /C061 /D057 TEXT32, TEXT 'THEN &PRESS &R&E&T&U&R&N' /A014 TEXT33, TEXT '&O&R, ' /A014 TEXT34, TEXT '^P!E^P!E&YOU NEED A DISKETTE IN DRIVE !D' /A019 /C038 TEXT35, TEXT '&AND &PRESS &R&E&T&U&R&N' /A019 TEXT36, TEXT '^P!E&INSERT A DISKETTE IN THE DRIVE' /A019 /D057 TEXT40, TEXT '^P!E---- &B&A&C&K&U&P &D&I&S&K&E&T&T&E ----' /A019 TEXT50, TEXT '^P!E^S &SYSTEM &DISKETTES CAN NOT BE MADE' /A032 /C037 > IFDEF ITALIAN < TEXT17, TEXT '^P!E-- !&SALVATAGGIO - !&ERRORE --' /A014 TEXT18, TEXT '&LA DENSIT\A DEI' /SUBSTRING OF TEXT20 (DM-I) /A034 TEXT20, TEXT "^P^SDISCHETTI E' DIFFERENTE." /A014 TEXT22, TEXT '^P&IMPOSSIBILE COPIARE DA!S A!S.' /A014 /C033 /C034 TEXT23, TEXT '^P&USARE UN DISCHETTO A!S.' /A014 /C033 /C034 TEXT24, TEXT ' SINGOLA DENSIT\A' /C033 TEXT25, TEXT ' DOPPIA DENSIT\A' /C033 TEXT2A, TEXT ' 8 INCH' /A033 TEXT2B, TEXT ' 5 INCH' /A033 TEXTY, TEXT ' ' / DM-II SUBSTR FOR TEXT20 /A034 TEXT26, TEXT '&PREMERE !&RITORNO PER CONTINUARE' /A014 /C051 TEXWS1, TEXT '^P!E&NON CI SONO^SARCHIVI DOCUMENTI DEFINITI COME UNIT\A !D' /C074 TEXWS2, TEXT '^P!E&ARCHIVIO DOCUMENTI DEFINITO^SCOME UNIT\A !D TROPPO PICCOLO' /C074 TEXWS3, TEXT '^P!E&ARCHIVIO DOCUMENTI DEFINITO^SCOME UNIT\A !D TROPPO GRANDE' /C074 TXTSRC, TEXT ' ' /A066 TXTDST, TEXT ' ' /A066 WINRCV, TEXT '^P&ARCHIVIO DOCUMENTI !&COPIA ^A' /A066 WINCPY, TEXT '^P&ARCHIVIO DOCUMENTI !&ORIGINALE ^A' /A066 WINITX, TEXT "^P!E^P!E&L'ARCHIVIO DOCUMENTI ^A VIENE INIZIALIZZATO" /A066 /D057 TEXT27, TEXT '-- !&FORMATO !&DISCHETTO --' /A014 TEXT30, TEXT '&SCEGLIERE COME INIZIALIZZARE IL DISCHETTO.' /A014 TEXT31, TEXT '&INTRODURRE &D PER DISCO DOCUMENTI O &S PER DISCO SISTEMA ' /A014 /C061 /D057 TEXT32, TEXT 'E PREMERE !&RITORNO' /A014 TEXT33, TEXT '&OPPURE, ' /A014 TEXT34, TEXT "^P!E^P!E&NECESSITA UN DISCHETTO NELL'UNIT\A !D" /A019 /C038 TEXT35, TEXT 'E PREMERE !&RITORNO' /A019 TEXT36, TEXT "^P!E&INSERIRE UN DISCHETTO NELL'UNIT\A" /A019 /D057 TEXT40, TEXT '^P!E---- &B&A&C&K&U&P &D&I&S&K&E&T&T&E ----' /A019 TEXT50, TEXT '^P!E&IMPOSSIBILE CREARE UN &DISCO &SISTEMA^S' /A032 /C037 > IFDEF V30NOR < /A086 TEXT17, TEXT '^P!E-- !&FEIL !&VED !&SIKKERHETSKOPIERING --' /A086 TEXT18, TEXT '&DISKETTE HAR' /SUBSTRING OF TEXT20 (DM-I) /A086 TEXT20, TEXT '^P^S&FORSKJELLIG TETTHET' /A086 TEXT22, TEXT '^P&DU FORS\XKER \E KOPIERE FRA!S TIL !S.' /A086 TEXT23, TEXT '^P&BRUK EN!S DISKETT TIL KOPIEN.' /A086 TEXT24, TEXT ' ENKEL TETTHET' /A086 TEXT25, TEXT ' DOBBEL TETTHET' /A086 TEXT2A, TEXT ' 8 TOMMERS' /A086 TEXT2B, TEXT ' 5 TOMMERS' /A086 TEXTY, TEXT ' ' / DM-II SUBSTR FOR TEXT20 /A086 TEXT26, TEXT '&TRYKK P\E !&RETUR FOR \E FORTSETTE' /A086 TEXWS1, TEXT '^P!E&DET ER IKKE TILDELT NOE OMR\EDE P\E ^SENHET !D' /A086 TEXWS2, TEXT '^P!E&OMR\EDE TILDELT P\E ^SENHET !D ER FOR LITE' /A086 TEXWS3, TEXT '^P!E&OMR\EDE TILDELT P\E ^SENHET !D ER FOR STORT' /A086 TXTSRC, TEXT 'AVSENDER-' /A086 TXTDST, TEXT 'MOTTAGER-' /A086 WINRCV, TEXT '^P&DU KOPIERER !&TIL OMR\EDET KALT ^A' /A086 WINCPY, TEXT '^P&DU KOPIERER !&FRA OMR\EDET KALT ^A' /A086 WINITX, TEXT '^P!E^P!E&OMR\EDET KALT ^A VIL BLI KLARGJORT' /A086 /D057 TEXT27, TEXT '-- &F&O&R&M&A&T &D&I&S&K&E&T&T&E --' /A086 TEXT30, TEXT '&ANJI HVA DISKETTEN SKAL KLARGJ\XRES TIL.' /A086 TEXT31, TEXT '&SKRIV &D FOR DOKUMENT EL. &S FOR SYSTEM' /A086 /D057 TEXT32, TEXT 'THEN &PRESS &R&E&T&U&R&N' /A086 TEXT33, TEXT 'EL., ' /A086 TEXT34, TEXT '^P!E^P!E&DET M\E ST\E EN DISKETT I STASJON !D' /A086 TEXT35, TEXT '&OG TRYKK P\E !&RETUR' /A086 TEXT36, TEXT '^P!E&SETT EN DISKETT I STASJONEN' /A086 /D057 TEXT40, TEXT '^P!E---- &B&A&C&K&U&P &D&I&S&K&E&T&T&E ----' /A086 TEXT50, TEXT '^P!E^S&DU KAN IKKE LAGE SYSTEMDISKETTER' /A086 > IFDEF V30SWE < TEXT17, TEXT '^P!E-- &S\DKERHETSKPIERINGSFEL --' /A014 TEXT18, TEXT '&DENSITETEN P\E D' /SUBSTRING OF TEXT20 (DM-I) /A034 TEXT20, TEXT '^P^SINA DISKETTER \ER OLIKA.' /A014 TEXT22, TEXT '^P&DU F\VRS\VKER KOPIERA FR\EN !S TILL !S.' /A014 /C033 /C034 TEXT23, TEXT '^P&ANV\DEND EN !SDISKETT F\VR KOPIERINGEN.' /A014 /C033 /C034 TEXT24, TEXT ' ENKEL DENSITET' /C033 TEXT25, TEXT ' DUBBEL DENSITET' /C033 TEXT2A, TEXT ' 8 TUM' /A033 TEXT2B, TEXT ' 5 TUM' /A033 TEXTY, TEXT '&J' / DM-II SUBSTR FOR TEXT20 /A034 TEXT26, TEXT '&TRYCK P\E RETUR F\VR ATT FORTS\DTTA' /A014 /C051 TEXWS1, TEXT '^P!E&DET FINNS INGEN VOLYM TILLDELAD F\VR ATT ^S ENHET !D' /C074 TEXWS2, TEXT '^P!E&VOLYM TILLDELAD F\VR ATT ^S ENHET !D \DR F\VR LITEN' /C074 TEXWS3, TEXT '^P!E&VOLYM TILLDELAD F\VR ATT ^S ENHET !D \DR F\VR STOR' /C074 TXTSRC, TEXT 'ORIGINAL' /A066 TXTDST, TEXT 'KOPIA' /A066 WINRCV, TEXT '^P&VOLYMEN ^A KOMMER ATT TA EMOT KOPIAN' /A066 WINCPY, TEXT '^P&VOLYMEN ^A KOMMER ATT KOPIERAS' /A066 WINITX, TEXT '^P!E^P!E&VOLYMEN ^A KOMMER ATT INITIERAS' /A066 /D057 TEXT27, TEXT '-- &F&O&R&M&A&T &D&I&S&K&E&T&T&E --' /A014 TEXT30, TEXT '&V\DLJ HUR DENNA DISKETT SKA INITIERAS' /A014 TEXT31, TEXT '&SKRIV D F\VR DOKUMENT ELLER S F\VR SYSTEM ' /A014 /C061 TEXT33, TEXT '' /A014 TEXT34, TEXT '^P!E^P!E&DU BEH\VER EN DISKETT I ENHET !D' /A019 /C038 TEXT35, TEXT 'OCH TRYCK P\E RETUR' /A019 TEXT36, TEXT '^P!E&S\DTT I EN DISKETT I ENHET' /A019 /D057 TEXT40, TEXT '^P!E---- &B&A&C&K&U&P &D&I&S&K&E&T&T&E ----' /A019 TEXT50, TEXT '^P!E^S &DU KAN INTE SKAPA SYSTEMDISKETTER' /A032 /C037 > / END IFDEF V30SWE TEXTG1, TEXT '^P^S^P' / GENERAL 1 SUBSTRING CONTROL STRING /A036 TEXTG2, TEXT '^P^S^P^S^P' / GENERAL PURPOSE--2 SUBSTRINGS /A036 TEXTG3, TEXT '^P^S^P^S^P^S^P' / GENERAL 3 SUBSRING CONTROL STRING /A036 PSCR, TEXT '^P!E' /CLEAR SCREEN /M036 TEXTDK, IFDEF ENGLSH < TEXT /^P &SOURCE !S IS SHORTER THAN DESTINATION !S BY !D BLOCKS./ > IFDEF ITALIAN < TEXT /^P !S &ORIGINALE HA !D BLOCCHI IN MENO DEL !S &COPIA./ > IFDEF V30NOR < TEXT /^P &AVSENDERIS !S ER !D BLOKKER MINDRE ENN MOTTAGER !S./ > /A086 IFDEF V30SWE < TEXT /^P &ANTAL F\DRRE BLOCK I ORIGINALET !S, JFR MED KOPIAN !S: !D./ > / END IFDEF V30SWE /-------------------- /***********************************************************************/A032 / /A032 / RX01/RX02 BOOT BLOCK TEMPLATE /A032 / TAKEN FROM LOADB7.PA VERSION 004 01-FEB-82 074 /A032 / STRIPPED ALL BEFORE "HACK= " /A032 / THEN STRIPPED ALL COMMENT LINES /A032 / APPROPRIATELY DELETED *ORG STATEMENTS /A032 / AND ADDED RELOC STATEMENTS /A032 / REDEFINED DUPLICATE LABELS WHICH CAUSED PROBLEMS /A032 / /A032 /***********************************************************************/A032 HACK= " -1 / DEFINITION OF THE "[H]ALF [A]SCII" [C]HARACTER [K]ONSTANT. WPBOOT= 2 / LOAD POINT FOR THE PRIMARY BOOTSTRAP. BOOT02= WPBOOT+60 / LOAD POINT FOR THE REMAINING PRIMARY BOOT. BT0102, /BOOT TEMPLATE RX01/RX02 /A032 RELOC WPBOOT / ASSEMBLE AS THO AT WPBOOT /A032 HLT /STRT ADDR OVERLAYED IN DD MODE BTRXID, "#-HACK^100+" -HACK / ...PRIMARY BTTRAK, "W-HACK^100+"P-HACK / ......BOOTSTRAP BTLSEC, "D-HACK^100+"I-HACK / .........HEADER BTSECT, "S-HACK^100+"K-HACK / ............PRECEEDS BTSCTR, "/-HACK^100+"[-HACK / ...............ACTUAL " -HACK^100+" -HACK / ..................BOOTSTRAP. 0 0 /D074 IFDEF WINNIE L.T. /A065 BTTBUF, RXDLDP-201 /M065 BTBFRA, RXDLDP-201 /M065 BTBFRB, RXDLDP-201 /M065 /D074 G.T. / END IFDEF WINNIE /A065 /D074 IFNDEF WINNIE L.T. /A065 /D074BTTBUF, RXDLDP-1 /D074BTBFRA, RXDLDP-1 /D074BTBFRB, RXDLDP-1 /D074 G.T. / END IFNDEF WINNIE /A065 BTBFFR, 377 MSK422, 422 /MASK FOR DENSITY,UNIT#,READ CODE BTCMND, 22 /BITS=DD,UNIT#,READ MSK24, 2400 /ADD TO BTCMND TO ALTERNATELY SET UNIT & DENSITY BTINC, JMP BTPTCH /ONE TIME JMP. ON SUCCESFUL READ ISZ BTXFER /SET DONE RETURN JMP I BTXFER /RETURN BTMORE, DCA I BTBFFR / DEPOSIT DATUM IN CORE. BTEMPT, JMS BTXFER / TRANSFER A DATUM FROM SILO. JMP BTMORE / NOT DONE - REPEAT FOR ENTIRE SECTOR. ISZ BTSCTR / DONE - ALL SECTORS READ ? JMP BTNEXT / NO - READ NEXT. JMP I BTSCND / YES - ENTER SYSTEM BOOTSTRAP CODE. RXISDN / DONE ? /M064 JMP BTBOO8 / NO - WAIT FOR READY FIRST. CLA CLL / INSURE AC CLEAR FOR DONE RETURN RXISER /ERROR? /M064 JMP BTINC /NO INC RET SKP /IS ERROR BTPTCH, DCA BTINC /CLEAR JMP ON SUCCESSFUL DONE TAD MSK24 /ALTERNATE 24 & 2400 BSW DCA MSK24 TAD MSK24 /GET IT JMP BTREAD / JUMP OVER CRITICAL AREA 2 JMS BTBOO7 / TRANSFER A DATUM DCA BOOT02-1 / ...AND INSERT IT IN-LINE. RELOC / END OF SECTION /A032 RELOC BOOT02-7 /A032 BTXFER, / ENTRY POINT TO "BTXFER". BTBOO7, / ### ENTRY POINT TO "READ" SUBROUTINE. ### RELOC / END OF SECTION /A032 RELOC BOOT02-6 /A032 BTBOO8, / CONTROLLER READY ? RELOC / END OF SECTION /A032 RELOC BOOT02-2 /A032 RELOC / END OF SECTION /A032 RELOC BOOT02-1 /A032 RELOC / END OF SECTION /A032 RELOC BOOT02 BTREAD, TAD BTCMND AND MSK422 /KEEP DENSITY,UNIT# AND READ CODE DCA BTCMND / ......DENSITY BIT IN COMMAND WORD TAD BTCMND / LOAD THE COMMAND RTL / ...AND ISOLATE RTL / ......DENSITY BIT IN THE LINK CLA CMA RAL / .........THEN BUILD DCA BTSCTR / ............THE CORRECT SECTOR COUNT. IAC / CALCULATE THE PROPER (SD OR DD) DCA BTSECT / ......PHYSICAL SECTOR NUMBER. BTNEXT, AC0004 / SET THE PHYSICAL I/O BIT TAD BTCMND / ...AND SUBMIT COMMAND TO CONTROLLER. RXILCD /M064 AC0003 / LOAD SECTOR # TO READ TAD BTSECT / ...INCREMENT IT BY INTERLEAVE JMS BTXFER / ......SUBMIT IT TO CONTROLLER DCA BTSECT / .........AND SAVE IT AGAIN CLA CLL IAC / LOAD "BOOT" TRACK NUMBER,... JMS BTXFER / ...AND SUBMIT IT TO CONTROLLER ALSO. JMS BTXFER / WAIT FOR CONTROLLER "DONE" BTSCND, /LOC 400 = DD BIT USED TO SAVE SPACE 400 TAD BTCMND / GET "EMPTY SILO" COMMAND RXILCD / ...AND SUBMIT IT TO CONTROLLER. /M064 JMP BTEMPT / GO EMPTY THE SILO 0 / ADD THIS LINE TO ALL TEMPLATES /A032 / BECAUSE AN EXTRA LOCATION GETS /A032 / WRITTEN ON THE IMAGE ON THE FLOPPY /A032 / RELOC / BACK TO ORIGINAL ORIGIN. RX01MID, / LABEL FOR BLKMOV /A032 RELOC 0400 / THIS STUFF GOES AT 0400 /A032 AC0001 / JMS TTY /TYPE A=GOT IN THIS FAR TAD BTHALT / PUT A HALT INSTRUCTION AT THE END DCA BTPTCH / ...OF THE ERROR BRANCH AC0002 / JMS TTY /B=UNIT 0 OK TAD BTCMND / LOAD COMMAND FROM PRIMARY BOOT. RTL / ISOLATE "SD"/"DD" RTL / ...IN REGISTER AS "0" OR "1" CLA RAL / ......AND SAVE IT. DCA BTRXID TAD PRX02 /DO A REQUEST FOR STATUS TAD BTCMND /ADD DENSITY RXILCD / ... /M064 RXISDN /M064 JMP .-1 / WAIT FOR DONE. RXIXDR / GET STATUS RESPONSE. /M064 AND PRX02 / ISOLATE THE RX02 BIT. SNA CLA / SKIP IF RX02 (RX28 DRIVE). DCA BTLCM2 / ZAP THE RX02 LCD 2ND XFR COMMAND. TAD BTRXID /0=DD 1=SD SNA CLA /IS DD? IAC BSW /NO SET 8 BIT MODE TAD BTCMND / ...COMMAND WORD. DCA BTCMND TAD BTRXID / LOAD THE DENSITY PARAMETER SNA CLA / ......DOUBLE DENSITY ? TAD BTBLKN / NO - MAKE IT 3*BLOCK NUM TAD BTBLKN / YES - MAKE IT 2*BLOCK NUM TAD BTBLKN DCA BTLSEC / ......AND SAVE IT. EJECT NXTBLK, TAD BTRXID / "DD" OPERATION ? SZA CLA JMP BTDBLD / YES - SKIP THE "UNPACK" PROCESS JMS BTPHYS / EFFECT A "READ SECTOR" OPERATION. JMP BTUNPK / ENTER UNPACKING LOOP DXUNPK, MQL / SAVE DATA BYTE MQA / UNPACK FIRST NYBBLE RTR / ...ALIGN TO HO END BSW AND DXNMSK / ......ISOLATE HIGH 4 BITS DCA I BTTBUF / .........AND PUT IT AWAY MQA / UNPACK SECOND NYBBLE RTL / ...ALIGN TO HO END BSW AND DXNMSK / ......ISOLATE HIGH 4 BITS DCA I BTTBUF / .........AND PUT IT AWAY BTUNPK, JMS BTXFER / GET DATA BYTE FROM SECTOR JMP DXUNPK / (TR) ...AND GO UNPACK IT BTDBLD, AC7776 / (DN) SET SECTOR COUNT DCA BTSCTR DYNEXT, JMS BTPHYS / EFFECT A "READ SECTOR" OPERATION. SKP / ENTER THE "MERGE" LOOP DYREAD, DCA I BTBFRB / SAVE WORD IN BUFFER. TAD I BTBFRA / LOAD CURRENT CONTENTS OF BUFFER. JMS BTXFER / LOAD A DATUM. /#(8 BIT MODE => INCLUSIVE OR INTO BITS 4-11) /#(12 BIT MODE => JAM XFER BITS 0-11) JMP DYREAD / (TR) CONTINUE FETCHING DATA CLA CMA /-1 TAD BTBFRA /RESET PTR TO LAST CHAR DCA BTBFRA /RESTORE ISZ BTSCTR / (DN) ALL SECTORS PROCESSED ? JMP DYNEXT / NO - PROCESS NEXT. ISZ BTBCTR / YES - ALL BLOCKS PROCESSED ? JMP NXTBLK / NO - DO ANOTHER BLOCK. AC0003 / JMS TTY /C=LOADER GOT IN OK TAD BTCMND AND MSK20 /MASK OUT UNIT NO SZA CLA /0=UNIT 0 DOCSKP=. /RXPRDF LDNOP SHOULD BE EQUAL THIS ADDRESS JMP I PRTMSG /NOT UNIT 0 JMP I WPSTRT / YES - START SYSTEM. TTY, 0 TAD P100 / MAKE ASCII. TLS TSF /WAIT TILL DONE JMP .-1 CLA JMP I TTY /RETURN PRTMSG, DCSTRT /START ADDRESS OF MESSAGE EJECT BTPHYS, 0 DCA BTTRAK / INITIALISE TRACK #. TAD BTLSEC / LOAD THE LOGICAL SECTOR #. BTDIV1, ISZ BTTRAK / INCREMENT THE TRACK #. DCA BTSECT / SAVE THE SECTOR #,... TAD BTSECT / ...THEN RETREIVE IT. TAD BTDVSR / "SUBTRACT" THE # OF SECTORS/TRACK. SMA / OVERFLOW ? JMP BTDIV1 / NO - CONTINUE. CLA CLL / YES - ENSURE REGISTER CLEAR TAD BTSECT / BUILD 3*Q. TAD BTSECT / TAD BTSECT BTDIV2, DCA BTSECT / SAVE "PHYSICAL" SECTOR #. TAD BTSECT / RETREIVE "PHYSICAL" SECTOR #. TAD BTDVSR / "SUBTRACT" # SECTORS/TRACK. P100, SMA / OVERFLOW ? JMP BTDIV2 / NO - REPEAT UNTIL OVERFLOW. ISZ BTSECT / YES - INCR TO BUILD CORRECT PHYSICAL SECTOR. AC0004 / SET "PHYSICAL" BIT JMS BTLCMD TAD BTSECT / () GET PHYSICAL SECTOR JMS BTXFER / () ...AND SEND IT CLA / (TR) "RXIXDR" DOESN'T CLEAR AC /M064 TAD BTTRAK / (DN) GET PHYSICAL TRACK JMS BTXFER / ...AND SEND IT JMS BTXFER / (TR) WAIT FOR CONTROLLER DONE DXNMSK, 7400 / (DN) (TR) (SPARE) JMS BTLCMD ISZ BTLSEC / BUMP LOGICAL SECTOR FOR NEXT TIME JMP I BTPHYS / EXIT FROM PHYSICAL I/O ROUTINE BTLCMD, 0 TAD BTCMND RXILCD /M064 TAD BTRXID SNA CLA BTLCM2, JMS BTXFER CLA JMP I BTLCMD BTDVSR, -32 / LOCAL STORAGE FOR THE TRACK/SECTOR CONSTANT. BTBLKN, DLRXLD / STARTING BLK OF RXHAN BTBCTR, -DSRXLD / LOCAL STORAGE FOR THE BLOCK COUNTER. MSK20, 20 / UNIT MASK BTHALT, HLT / THIS WILL PATCH BTPTCH WPADDR=.-200 / THIS ADDRESS SHOULD BE = LDSTRT IN RXPRDF WPSTRT, RXDRIN / ENTRY POINT TODRIVER SYSTEM INIT LOAD PRX02, 10 / RX02 BIT IN STATUS RESPONSE RELOC / BACK TO NORMAL ORIGIN /***********************************************************************/A032 / /A032 / RX50 BOOT BLOCK TEMPLATE /A032 / TAKEN FROM LOADB8.PA VERSION ??? 16-APR-82 074 /A032 / STRIPPED ALL BEFORE "HACK= " /A032 / THEN STRIPPED ALL COMMENT LINES /A032 / APPROPRIATELY DELETED *ORG STATEMENTS /A032 / AND ADDED RELOC STATEMENTS /A032 / REDEFINED DUPLICATE LABELS WHICH CAUSED PROBLEMS /A032 / /A032 /***********************************************************************/A032 / /A032 / THE FIRST 8 PDP-8 WORDS OF THE BOOT ARE RESERVED FOR /A042 / FOR THE BOOT BLOCK HEADER. THE HEADER WILL BE READ IN /A042 / 8 BIT MODE BY THE ROM. SINCE THE HEADER CANNOT BE WRITTEN /A042 / OUT PROPERLY IN 8 BIT MODE THE BOOT IS FIRST WRITTEN OUT /A042 / IN 12 BIT MODE. THEN THE BOOT IS READ BACK IN IN 8 BIT MODE /A042 / THE BOOT HEADER IS COPIED, AND THE BOOT IS WRITTEN BACK IN /A042 / 8 BIT MODE /A042 / /A042 / SIMON SZETO HAS PROPOSED THE BOOT HEADER STANDARD /A042 / CURRENTLY, IT REQUIRES ONLY 12 BYTES. /A042 / THESE 12 BYTES TRANSLATE INTO ONLY 6 PDP-8 WORDS /A042 / BECAUSE OF THE WAY THE RX50 IMPLEMENTS 12 BIT MODE /A042 / SO, WE ARE PROBABLY WASTING 2 WORDS /A042 / BUT WHATS A FEW WORDS AMONG FRIENDS, EH? /A042 / (I DECIDED TO LEAVE 'EM IN FOR NOW) /A042 RX50BEG, / LABEL FOR BLKMOV /A032 RELOC WPBOOT /A032 RX50BO, / BOOT TEMPLATE, RX50 /A032 / SPACE FOR STANDARD RX50 BOOT HEADER: / THE ACTUAL HEADER MUST BE WRITTEN IN 8 BIT MODE AS /A042 / 12 BIT MODE WRITES TWO CONSECUTIVE BYTES ON THE RX-50 /A042 / 4 BITS OF WHICH ARE INACCESIBLE IN 12 BIT MODE /A042 / THESE LOCATIONS HAVE LABELS AS THEY ARE USED FOR SCRATCH BY THE BOOT 0 / 1ST 12 BIT WORD R5RXID, 0 / 2ND 12 BIT WORD R5TRAK, 0 / 3RD 12 BIT WORD R5LSEC, 0 / 4TH 12 BIT WORD R5SECT, 0 / 5TH 12 BIT WORD R5SCTR, 0 / 6TH 12 BIT WORD 0 / 7TH 12 BIT WORD 0 / 8TH 12 BIT WORD R5TSEC, 0 IFDEF WINNIE < /A065 RXDLDP-201 /M065 R5BFRA, RXDLDP-201 /M065 R5BFRB, RXDLDP-201 /M065 > / END IFDEF WINNIE /A065 IFNDEF WINNIE < /A065 RXDLDP-1 R5BFRA, RXDLDP-1 R5BFRB, RXDLDP-1 > / END IFNDEF WINNIE /A065 R5BFFR, 377 SKPPTR, R5BOOX-1 SKPPTS, BOOT02-1 /WHEN LOC 50 GETS OVERLAYED R5INC, JMP R5PTCH /ONE TIME JMP. ON SUCCESFUL READ ISZ R5XFER /SET DONE RETURN JMP I R5XFER /RETURN R5MORE, DCA I R5BFFR / DEPOSIT DATUM IN CORE. R5EMPT, JMS R5XFER / TRANSFER A DATUM FROM SILO. JMP R5MORE / NOT DONE - REPEAT FOR ENTIRE SECTOR. ISZ R5SCTR / DONE - ALL SECTORS READ ? JMP R5NEXT / NO - READ NEXT. JMP I R5SCND / YES - ENTER SYSTEM BOOTSTRAP CODE. JMPOVR, R5READ RXISDN / DONE ? /M064 JMP R5BOO8 / NO - WAIT FOR READY FIRST. CLA CLL / INSURE AC CLEAR FOR DONE RETURN RXISER /ERROR? /M064 JMP R5INC /NO INC RET SKP /IS ERROR R5PTCH, DCA R5INC /CLEAR JMP ON SUCCESSFUL DONE JMP I JMPOVR /JMP OVER CRITICAL AREA R5SWCH, TAD SKPPTS /SET TO LOC 61 DCA SKPPTR /DO IT DCA R5BOOX /NOP JMP JMP R5BOOX /CONT /REMAINDER OF SECTOR WILL BE OVERLAYED /INDIRECT TO ENABLE PAGE LOAD INTO NEXT /PAGE. FOR RX50 JMS R5BOO7 / TRANSFER A DATUM DCA I SKPPTR-1 / ...AND INSERT IT IN-LINE.1ST TIME TO NEVER NEVER LAND R5BOOX, JMP R5SWCH /INC PTR....ONE TIME THEN CLEARD R5LOCS=.-RX50BO /ACTUAL CORE SPACE USED SO FAR /A032 RELOC / RETURN TO NORMAL ADDRESSING /A032 RELOC BOOT02-7 /A032 R5XFER, / ENTRY POINT TO "R5XFER". R5BOO7, / ### ENTRY POINT TO "READ" SUBROUTINE. ### RELOC / RETURN TO NORMAL ADDRESSING /A032 RELOC BOOT02-6 /A032 R5BOO8, / CONTROLLER READY ? RELOC / RETURN TO NORMAL ADDRESSING /A032 RELOC BOOT02-1 /A032 R5BOO0, / LINKAGE WITH ALTERNATE SECONDARY BOOT. RELOC / RETURN TO NORMAL ADDRESSING /A032 RELOC BOOT02 / 200-ENREAD /A032 R5READ, CLA CLL IAC RAL /=2 SET CMND FOR READ TAD R5BOO0 /GET DISK READ DCA R5CMND / ......DENSITY BIT IN COMMAND WORD CMA /-1 RX50 SECTOR COUNT DCA R5SCTR / ............THE CORRECT SECTOR COUNT. IAC / CALCULATE THE PROPER (SD OR DD) DCA R5SECT / ......PHYSICAL SECTOR NUMBER.(1) JMP I R5SCND /RX50 BOOT IN START LOAD R5NEXT, AC0004 / SET THE PHYSICAL I/O BIT TAD R5CMND / ...AND SUBMIT COMMAND TO CONTROLLER. RXILCD /M064 AC0003 / LOAD SECTOR # TO READ TAD R5SECT / ...INCREMENT IT BY INTERLEAVE JMS R5XFER / ......SUBMIT IT TO CONTROLLER DCA R5SECT / .........AND SAVE IT AGAIN CLA CLL IAC / LOAD "BOOT" TRACK NUMBER,... JMS R5XFER / ...AND SUBMIT IT TO CONTROLLER ALSO. JMS R5XFER / WAIT FOR CONTROLLER "DONE" R5SCND, R5W2BO / R5DENS, 400 /=400 FOR RX01 USED AS DENSITY BIT ALSO TAD R5CMND / GET "EMPTY SILO" COMMAND RXILCD / ...AND SUBMIT IT TO CONTROLLER. /M064 JMP R5EMPT / GO EMPTY THE SILO R5CMND, 22 /BITS=DD,UNIT#,READ 0 /STATUS SAVED HERE R5LOCS=R5LOCS+.-R5READ /UPDATE NUMBER OF ACTUAL LOCS USED /A032 RELOC / RETURN TO NORMAL ADDRESSING /A032 RX50MID, / LABEL FOR BLKMOV /A032 RELOC 200 R5W2BO, AC0001 / JMS R5TTY /TYPE A=GOT IN THIS FAR TAD R5HALT / PUT A HALT INSTRUCTION AT THE END DCA R5PTCH / ...OF THE ERROR BRANCH AC0002 / JMS R5TTY /B=UNIT 0 OK TAD R5CMND / LOAD COMMAND FROM PRIMARY BOOT. AND R5DENS /400 SNA CLA /IS SD OR DD IAC BSW /100 =MODE BIT FOR SD DCA R5RXID /0=DD TAD PRX02R /DO A REQUEST FOR STATUS TAD R5CMND /ADD DENSITY RXILCD / ... /M064 RXISDN /M064 JMP .-1 / WAIT FOR DONE. RXIXDR / GET STATUS RESPONSE. /M064 AND PRX110 / ISOLATE THE RX02 BIT. SNA CLA / SKIP IF RX02 (RX28 DRIVE). DCA R5LCM2 / ZAP THE RX02 LCD 2ND XFR COMMAND. TAD R5RXID / 0=DD 1=SD TAD R5CMND / ...COMMAND WORD. DCA R5CMND TAD ISRX50 SZA CLA JMP ISA50 /LOG BLOCK = LOG SECTOR IF 50 TAD R5RXID / LOAD THE DENSITY PARAMETER SZA CLA / ......DOUBLE DENSITY ? TAD R5BLKN / NO - MAKE IT 3*BLOCK NUM TAD R5BLKN / YES - MAKE IT 2*BLOCK NUM ISA50, TAD R5BLKN DCA R5LSEC / ......AND SAVE IT. R5NXTB,/--------------------------------------------------------------------- CLA CLL CMA / (DN) SET SECTOR COUNT =-1 DCA R5SCTR R5DYNX, JMS R5PHYS / EFFECT A "READ SECTOR" OPERATION. SKP / ENTER THE "MERGE" LOOP R5DYRD, DCA I R5BFRB / SAVE WORD IN BUFFER. TAD I R5BFRA / LOAD CURRENT CONTENTS OF BUFFER. JMS R5XFER / LOAD A DATUM. /#(8 BIT MODE => INCLUSIVE OR INTO BITS 4-11) /#(12 BIT MODE => JAM XFER BITS 0-11) JMP R5DYRD / (TR) CONTINUE FETCHING DATA CLA CMA /-1 TAD R5BFRA /RESET PTR TO LAST CHAR DCA R5BFRA /RESTORE ISZ R5SCTR / (DN) ALL SECTORS PROCESSED ? JMP R5DYNX / NO - PROCESS NEXT. ISZ R5BCTR / YES - ALL BLOCKS PROCESSED ? JMP R5NXTB / NO - DO ANOTHER BLOCK. AC0003 / JMS R5TTY /C=LOADER GOT IN OK TAD R5CMND AND R5MSK2 /MASK OUT UNIT NO SZA CLA /0=UNIT 0 DOCSKP=. /RXPRDF LDNOP SHOULD BE EQUAL THIS ADDRESS JMP I R5DMSG /NOT UNIT 0 JMP I R5STRT / YES - START SYSTEM. R5TTY, 0 TAD R5P100 / MAKE ASCII. TLS TSF /WAIT TILL DONE JMP .-1 CLA JMP I R5TTY /RETURN R5DMSG, DCSTRT /START ADDRESS OF MESSAGE R5PHYS, 0 CLA IAC /TRACK ==1 DCA R5TRAK /SET IT TAD R5LSEC /LOGICAL SECTOR RAL /*2=INTERLEAVE FOR RX50 DCA R5TSEC /TEMP SECTOR(*2) HOLD TAD R5TSEC TAD R5DVSR /-10 SPA CLA /IS<10 JMP R5DIV1 /YES IAC /=1 TAD R5DVSR / R5DIV1, TAD R5TSEC /SET SECTOR IAC DCA R5SECT /SET IT AC0004 / SET "PHYSICAL" BIT JMS R5LCMD TAD R5SECT / () GET PHYSICAL SECTOR JMS R5XFER / () ...AND SEND IT CLA / (TR) "RXIXDR" DOESN'T CLEAR AC /M064 TAD R5TRAK / (DN) GET PHYSICAL TRACK JMS R5XFER / ...AND SEND IT JMS R5XFER / (TR) WAIT FOR CONTROLLER DONE 7400 / (DN) (TR) (SPARE) JMS R5LCMD ISZ R5LSEC / BUMP LOGICAL SECTOR FOR NEXT TIME JMP I R5PHYS / EXIT FROM PHYSICAL I/O ROUTINE R5LCMD, 0 TAD R5CMND RXILCD /M064 TAD R5RXID SZA CLA /SD SB=100 DD/RX02=0 R5LCM2, JMS R5XFER CLA JMP I R5LCMD /--------------------------------------------------------------------- R5P100, 100 R5DVSR, -12 / LOCAL STORAGE FOR THE TRACK/SECTOR CONSTANT. R5BLKN, DLRXLD / STARTING BLK OF RXHAN R5BCTR, -DSRXLD / LOCAL STORAGE FOR THE BLOCK COUNTER. R5MSK2, 20 /UNIT MASK RELOC / RETURN TO NORMAL ADDRESSING /A032 R5W2ND, / LABEL FOR BLKMOV /A032 RELOC LDSTRT WPADDR=. /THIS ADDRESS SHOULD BE = LDSTRT IN RXPRDF IFNZRO WPADDR-LDSTRT R5STRT, RXDRIN / ENTRY POINT TODRIVER SYSTEM INIT LOAD R5HALT, HLT / THIS WILL PATCH R5PTCH PRX02R, 10 /RX02 BIT IN STATUS RESPONSE PRX110, 110 /CHECK RX02 OR RX50 BIT ISRX50, 1 /SET FOR RX50 LOADER, CLEAR FOR RX01/RX02 RELOC / RETURN TO NORMAL ADDRESSING /A032 EJECT /******************************************************************* /TAKEN FROM WINNIE BOOT 11/23/83 /TITLE WINBOOT 11/23/83 / /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 WNBOOT=200 /A074 WINBEG, /A074 RELOC WNBOOT /A074 WINPTR=WNBOOT /TEMP POINTER AREA RDCNT=WINPTR+1 /TRANSFER COUNT PRTPTR=RDCNT+1 ZBLOCK 10 /BOOT ID / / /COMES HERE IF A WINNIE / WINSTR, JMS PRINT WPSLOAD /LOADING MESSAGE / / /READ A RECORD / RDREAD, TAD M4 DCA RDCNT /SET TRNSFER COUNT TAD CMDPTR DCA WINPTR WINSTB /SET BLOCK CMND JMS TRLOOP /TRANSFER WINRD /SET UP READ CMND RDSC /SEND IT RDRD1, JMS RDXFER /CHECK DONE AND SWAP IF NOT JMP TRNERR /GOT TRANSFER INSTEAD OF DONE SKP /DONE JMP TRNERR /ERROR TAD WINEPT /SET UP EMPTY BUFFER JMS RDCMPT /EMPTY OR FILL ISZ LOBLK /BLOCK NUM ISZ RZBLKN /# BLOCKS TO LOAD JMP RDREAD /DO NEXT BLOCK TAD WINCOD /4001 = WINNIE MOUNTED DRIVE 0 JMP I WNSTRT / / /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 BLOCK FUNCTION / / / /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 TAD I WINPTR /GET WORD TO BE TRANSFERED CDFSYS 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 RDSC /SEND IT RDCNXA, JMS RDXFER JMP RDCNXT /NEXT CHAR JMP I RDCMPT /DONE JMP RDERROR RDCNXT, RDENXT, RDTD /RECIEVE DATA RD2SET, CDFSYS DCA I RDBUFO /GET CHAR CDFSYS RDCCNT, ISZ RDBUFO NOP /FOR WRAP AROUND BUFFER JMP RDCNXA /FOR FIELD LOOP / /TRANSFER ERROR= DONE OR TR FLAG OUT OF SEQ /*****MUST GET ALL 4 WORDS****CHANGE WINSTA / RDERROR, WRTERROR, TRNERR, JMS PRINT ERRMES /=ERROR JMP . /HANG PRINT, 0 TAD I PRINT ISZ PRINT / DCA PRTPTR PRTA, TAD I PRTPTR SNA JMP I PRINT TLS TSF JMP .-1 CLA CLL ISZ PRTPTR JMP PRTA CR=15 LF=12 WPSLOAD, CR LF "W&177 "P&177 "S&177 " &177 "l&177 "o&177 "a&177 "d&177 "i&177 "n&177 "g&177 ".&177 0 /TERMINATOR ERRMES, CR LF "H&177 "A&177 "R&177 "D&177 " &177 "D&177 "I&177 "S&177 "K&177 " &177 "E&177 "R&177 "R&177 "O&177 "R&177 0 /TERMINATOR / / CMNDBF=. /COMMAND BUFFER START WRD1, 0 /BOOT DRIVE NUMBER(0) WRD2, LOBLK, DLRXLD /STOREAGE OF THE L/O BLK FOR I/O WRD3, HOBLK, 0 /STOREAGE OF THE H/O BLK FOR I/O RZBLKN, -DSRXLD /- COUNT OF BLOCKS TO BE READ RDBUFO, RXDLDP-200 /POINTER TO BUFFER AREA FOR WINNIE WINEPT, WINEMT /SET EMPTY BUFFER /A074 RELOC LDSTRT WPADDR=. /THIS ADDRESS SHOULD BE = LDSTRT IN RXPRDF WNSTRT, RXDRIN /START LOAD /A074 CMDPTR, CMNDBF /COMMAND BUFFER /A074 M4, -4 /A074 WINCOD, 4001 /H/O BIT=WINNIE L/O BIT=MOUNTED WNLOCS=.-WINBEG /SIZE TO BE WRITTEN OUT /A074 RELOC / RETURN TO NORMAL ADDRESSING /A074 IFDEF ITALIAN < PAGE / I DO NOT UNDERSTAND THE WAY THIS MODULE IS PUT / TOGETHER, BUT IT MEANS THAT, AS THE ITALIAN TEXT / TRANSLATION IS SHORTER THAN THE ENGLISH, A PAGE / IS REQUIRED HERE > IFDEF V30NOR < PAGE /A086 > IFDEF V30SWE < PAGE > / THIS IS THE RX50 BOOT HEADER FOR WPS IN 8 BIT FORMAT: /A042 R5BHDR, /A042 0 / BYTE 00 TYPE 2 BOOT BLOCK /A042 0 / BYTE 01 TYPE 2 BOOT BLOCK /A042 2 / BYTE 02 POINTER TO SECOND SECTION /A042 / (1/2 ACTUAL VALUE IN BYTES) /A042 1 / BYTE 03 1=SYSTEM, 0=DOCUMENT DISKETTE /A042 / SECOND SECTION: /A042 10 / BYTE 04 PDP-8 INSTRUCTION SET /A042 10 / BYTE 05 RX278 CONTROLLER /A042 10 / BYTE 06 WPS-8 OPERATING SYSTEM /A042 347 / BYTE 07 CHECKSUM SO BYTES 4,5,6,7 TOTAL 377 /A042 0 / BYTE 10 FILLER /A042 1 / BYTE 11 SINGLE SIDED, REV 1 OF BOOT STD /A042 R5BHSZ=.-R5BHDR / CALCULATE SIZE OF HEADER FOR BLKMOV /A042 RELOC DECIMAL /A066 RXMAP, 0; 5; 1; 6; 2; 7; 3; 8; 4; 9 / RX50 SECT TO RD50 BLOCK MAP /A066 RDMAP, 0; 7; 14; 5; 12; 3; 10; 1; 8; 15; 6; 13; 4; 11; 2; 9 /A066/C067 OCTAL / MAP CHANGED TO REFLECT AN INTERLEAVE /A067 / OF 7 WHICH IS THE ACTUAL WINNIE /A067 / /****DRVTST MOVED VER 075**************** /***********************************************************************/ / / / DRVTST--SKIP IF EITHER DRIVE IS DRIVE ZERO AND 0 NOT=WINNIE VOL./ / CALLING SEQUENCE: / / JMS DRVTST /SKIP IF EITHER DRIVE IS DRIVE 0 / / JMP SOMEPLACE /RETURNS HERE IF NEITHER / / ... /RETURNS HERE IF EITHER, OR 0=WINNIE / / MENU MUST CHECK THAT DRIVE NUMBERS ARE DIFFERENT / / ROUTINE ADDED V033 / / / /***********************************************************************/ DRVTST, XX TAD K20 /BIT 7=DRIVE 0=VOL /A075 CDFMNU /A075 AND I MNUPTR /PTR TO MNOPTION /A075 CDFMYF /A075 SZA CLA /DRIVE 0 = WINNIE? /A075 JMP I DRVTST /YES EXIT /A075 TAD DRVDST SNA CLA ISZ DRVTST TAD DRVSRC SNA CLA ISZ DRVTST JMP I DRVTST MNUPTR, MNOPTN+MUBUF /POINTER TO OPTION WORD /A075 K20, MNRX4X /20=7 BIT=WINNIE DRIVE 0 VOL /A075 /FMTSET--- SETS RXQSR1 TO THE NUMBER OF BLOCKS TO BE READ INTO / THE BUFFER AREA----WILL SET TO 10 BLOCKS TO FILL THE /...............FIELD IF THERE ARE ENOUGH BLOCKS REMAINING BETWEEN /...............THE END OF THE AREA AS SPECIFIED IN AC(-) UPON ENTRY /...............OR 10, WHICHEVER IS LESS / BLKCON=12 /READ FULL TRACK RX50 /A078 FMTSET, 0 /A078 TAD FMTQBK+RXQBLK /LAST BLOCK READ /A078 DCA BLKSAV /SAVE END BLOCK NUM /A078 TAD (-BLKCON /CHECK 1ST TIME /A078 TAD FMTQBK+RXQBLK /LAST BLOCK READ /A078 SPA /IS FIRST TIME? /A078 JMP FMTSE3 /YES-SET TO READ REST OF TRACK /A078 CLA /A078 TAD (BLKCON /NO BLOCKS TO FILL FIELD /A078 TAD BLKSAV /-# REMAINING TO BE PROCESSED /A078 SPA CLA /IS G.T. # REMAINING /A078 JMP FMTSE2 /NO SET TO 20 /A078 TAD BLKSAV /YES TO TO # REMAINING /A078 SKP /A078 FMTSE2, TAD (-BLKCON /A078 FMTSE3, DCA FMTQBK+RXQRS1 /SET BLOCK COUNT /A078 JMP I FMTSET /A078 BLKSAV, -BLKCON /# BLOCKS TO PROCESS NEXT /A078 OCTAL /A066 /CHECK VALID BLOCK NUMBER /A083 /THIS CHECK TO ALLOW FOR COPYING /A083 /..VOLUME SIZES LESS THAN SIZE OF FLOPPY /A083 /CODE NECESSARY TO ALLOW PARTIAL BLOCKS TO BE READ IN HARD DISK VOLUME/A083 /..PHYSIO COPIES IN BLOCKS OF 10 WHEN COPYING FROM WINNIE TO FLOPPY /A083 /...LEAVING A REMAINDER AT TIMES THAT VOLUME IS NOT MODULO 10 /A083 /... INTERLEAVE ALGORITHM WOULD THEN TRY TO READ BLOCKS GREATER THAN /A083 /....VOLUME SIZE. THIS CODE CAUSES ERROR RETURN WHEN ILLEGAL BLOCK /A083 /....REFERENCED. /A083 /-----------------------------------------------------------------------/A083 /WHEN COPYING FROM H.D. TO FLOPPPY THE RXMAP TABLE IS USED /A083 /...THIS MAP CONTAINS THE NUMBER OF TRACKS ON THE FLOPPY /A083 /....IT IS USED EVEN THOUGH THE SOURCE MAY BE VOLUME ON THE H.D. /A083 /..... THE BACKUP THEN CONTINUES TO COPY USING THIS 80 TRACK PARAMS. /A083 /...... TO TERMINATE THE BACKUP....THIS ROUTINE ALTHOUGH IT WORKS /A083 /...... WILL BE CALLED UNTILL THE NUM TRACKS ON THE FLOPPY HAVE BEEN /A083 /....... EXAUSTED.. NO PHYSICAL I/O WILL BE PERFORMED IF THE NUM OF /A083 /....... TRACKS ON THE H.D. HAS BEEN EXCEEDED... /A083 /....... DURING THE BACKUP AFTER SETPAR HAS BEEN CALLED /A083 /....... IF THE NUMBER OF TRACKS ON THE SOURCE DEVICE OVERLAYS THE NUM /A083 /....... OF TRACKS IN THE TABLE .. THE THIS SHOULD ELIMINATE THE XTRA /A083 /....... PROCESSING.. MOVE SRCSZE TO TRKMXK.... /A083 /....... THIS MOVE AT THE PRESENT TIME WILL NOT BE PUT INTO THE /A083 /....... AS WE ARE READY TO SHIP AND TESTING MAY NOT BE SUFFICIENT. /A083 / /------- THIS MESSAGE COURTESY OF DFB ---------------------------- /A083 CKBLNM, 0 /CHECK VALID BLOCK NUMBER /A083 TAD I T3 / NOW HAVE BLOCK # FOR THIS SECTOR /M083 TAD SVBLOC / ADD IN BLOCK WE STARTED AT /M083 DCA FMTQBK+RXQBLK / AND THIS IS THE BLOCK WE MUST R/W/V /M083 TAD WINSRC /CHECK SOURCE /M085 SNA CLA /IS IT WINNIE? /M085 JMP CKBLN1 /NO--CHECK NOT NECESSARY /M085 TAD FMTQBK+RXQBLK / /M083 CIA /A083 TAD SRCSZE /NUM BLOCKS IN SOURCE-NUM BLOCK TO BE READ/A083 SMA SZA CLA /IS ILLEGAL BLOCK? /A083 CKBLN1, /A083 ISZ CKBLNM /NO SKIP ERR RET /A083 JMP I CKBLNM /RET /A083 /-------------------- PAGE /+/+/ /+/+/ ____________________________________________________________ /+/+/ ALL MENU CODE WAS EDITED AND MADE A PART MN1 WITH EDIT 073 /+/+/ ------------------------------------------------------------ /+/+/ / /CKDKSZ CHECKS SIZE OF SOURCE AND DEST. DEVICES /A074 /IF SOURCE DEVICE IS G.T. DEST. DEVICE(NUMBER TRACKS) /A074 / ........ERROR RET.... /A074 / ELSE .....RET +1 /A074 / CKDKSZ, 0 /A074 TAD SRCSZE /GET SIZE OF SOURCE /A074 SNA /=RX50? /A074 DECIMAL TAD (79 /YES..SET # TRACKS TO COPY /A074 OCTAL CIA / /A074 DCA PARTBM /SET - NUM. TRACKS TO PROCESS /A074 TAD SRCSZE /IF SIZE=0 NON WINNIE /A074 JMS GETSZE /GET # BLOCKS /A074 DCA SRCSZE /A074 TAD DSTSZE /IF SIZE=0 NON WINNIE /A074 JMS GETSZE /GET # BLOCKS /A074 DCA DSTSZE /A074 CKDKS2, /A074 TAD SRCSZE /SOURCE SIZE /A074 CLL CMA CML IAC /SET NEG /C075 TAD DSTSZE /DEST SIZE /A074 SNA /ARE SOURCE AND DEST = /A074 JMP CKDKS7 /YES /A074 SNL /IS DEST G.T.SOURCE /C075 JMP CKDKS3 /YES /A074 CLA /A074 JMP FMTWER /A074 NOP /A074 CKDKS3, DCA CKDIF /A074 CIFMNU /A074 JMS I IOACAL /PRINT MESSAGE DESTG.T. SRCE /A074 0 /A074 TEXTDK /MESSAGE /A074 1305 /LINE 13 COL 05 /A074 DEVDST /PTR TO "DRIVE" "AREA" STRING /A074 IFNDEF ITALIAN < MEDDST /PTR TO "DISKETTE" "VOLUME" STRING /A074 CKDIF /PTR TO DIFFERENCE /A074 > IFDEF ITALIAN < CKDIF MEDDST > NOP /A074 NOP /A074 JMS FMTWTY /PRINT "ENTER CR OR G.M." /A074 JMP CPYDS2 /RET TO G.M. /A074 JMS TIMMSG /CLEAR AND PRINT TIME /A074 /C.R.--CONTINUE /A074 CKDKS7, /A074 ISZ CKDKSZ /SET NORMAL RET /A074 JMP I CKDKSZ /A074 / / /***********************************************************************/A066 DECIMAL /A074 MAXTRK=2000%16 /MAXIMUM TRACKS=BLKS/16 FOR WINNIE=2000/16/A074 MINTRK=800%16 /MINIMUM NUMBER WINNIE=800/16 /A074 DOCTRK=256%16 /MINIMUM NUMBER TRACKS FOR DOC INIT /A074 OCTAL /A074 /***********************************************************************/A066 /CKASGN CHECKS DEVICE NO AS SPECIFIED IN AC ON ENTRY /DETERMINES DEVICE TYPE AND SIZE IF WINNIE AND RETURNS /FOLLOWING CODES IN AC / / 0 = RX01/RX02/RX50 / 1 = VOLUME SIZE BETWEEN 800 AND 2000 BLOCKS / 2 = VOLUME SIZE BETWEEN 2000 AND 4096 BLOCKS / 3 = VOLUME SIZE BETWEEN 256 AND 800 BLOCKS / 4 = VOLUME SIZE 800 BLOCKS EXACTLY(SPECIAL CASE) / -1 = WINNIE NOT ASSIGNED / -2 = WINNIE VOLUME LESS THAN 256 BLOCKS / -3 = WINNIE VOLUME GREATER THAN THAN 4096 BLOCKS /***********************************************************************/A074 CKASGN, XX /A066 DCA FMTQBK+RXQDRV / PUT DRIVE # IN Q-BLK /A076 TAD (-10 /DEV 8 OR 9 MUST BE RX /A076 TAD FMTQBK+RXQDRV /CHECK FOR DEVICE G.T. 7 /A076 SPA CLA /SKP=8 OR 9, WINNIE BOOT CAN'T DO GET VOL/A076 JMS FMTGTV /GET VOLUME DATA DRV IN AC /C076 JMP CKASFL / UNASSIGNED - GO SEE IF DRIVE 1 /A066 TAD FMTQBK+RXQBAD / GET BUFFER ADDRESS /A066 TAD (15) / ADD IN AREA SIZE OFFSET-1 /A066 DCA X0 / SAVE FOR AUTOINDEX LOAD /A066 CDFMYF+10 / CHANGE TO BUFFER FIELD /A066 TAD I X0 /GET L/O /A074 DCA WINTRK /NUM WINNIE TRACKS IN VOLUME /A074 TAD I X0 /GET H/O /A074 SZA CLA /A074 JMP STCDM3 /VOLUME G.T. 4096 BLOCKS /A074 TAD WINTRK /A074 TAD (-DOCTRK /=256? /A074 SPA /A074 JMP STCDM2 /<256 BLOCKS /A074 TAD (DOCTRK-MINTRK /A074 SNA /=800 BLOCKS EXACTLY? /A074 JMP STCDP4 /YES /A074 SPA /A074 JMP STCDP3 /G.T 256 OR L.T. 800 BLKS /A074 TAD (MINTRK-MAXTRK /A074 SMA CLA /L.T. 2000 AND G.T. 800 BLOCKS /A074 JMP STCDP2 /NO /A074 JMP STCDP1 /YES /A074 CKASFL, TAD FMTQBK+RXQDRV / IF UNASSIGNED DEV# 1 IS A FLOPPY (V1.5/A066 TAD DENDV0 /POINTR TO START OF ACP DEV TABLE /A074 DCA DENPTR /SAVE POINTER TO DEN/DEV CODE /A074 CDFACP /SET TO ACP FIELD /A074 TAD I DENPTR /GET CODE /A074 CDFMYF /A074 SMA CLA /0 BIT SET =WINNIE /A074 JMP I CKASGN /NOT SET = RX DEVICE /A074 STCDM1, /NOT ASSIGNED /A074 AC7777 /A074 JMP CKZRET /A074 STCDM2, AC7776 /L.T. 256 BLOCKS /A074 JMP CKZRET /A074 STCDP2, AC0001 /2=G.T. 2000 /A074 STCDP1, IAC / AC=1 WINNIE AREA ASSIGNED & SIZE OK /A066 JMP CKZRET /A074 STCDP3, AC0003 /SIZE G.T. 256, L.T. 800 /A074 JMP CKZRET /A074 STCDP4, AC0004 /800 BLOCKS EXACTLY /A074 JMP CKZRET /A074 STCDM3, AC7775 /G.T. 4096 /A074 CKZRET, /A074 CDFMYF / CHANGE BACK TO OUR FIELD B4 WE GO /A066 JMP I CKASGN / /A074 / V1.5 MINIMUM SIZE =800 BLOCKS/16 BLOCK/A066 / -- ALLOCATION FACTOR = 50 /A066 DENDV0, RXSTRT+1 /POINTER TO DEV TABLE IN ACP /A074 DENPTR, 0 /TEMP PTR /A074 WINTRK, 0 /NUM TRACKS IN WINNIE VOLUME /A074 / / / CKDIF, 0 /DIF BETWEEN SOURCE AND DEST(TRACKS) /A074 /***********************************************************************/ / / / FMTHAB FORMAT THE DIRECTORY AND ALLOCATION BLOCKS / / STDBSW AND DSBLKC MUST BE SET UP BEFORE CALL / / / /***********************************************************************/ FMTHAB, XX / DO DIRECTORY AND ALLOCATION BLOCKS /A045 /D082 JMS CLBUF / CLEAR THE BUFFER /A046 JMS FMTDIR / GO SET UP DIRECTORY BLOCK HEADER /A031 AC0002 / LOAD BLOCK NUMBER FOR DIR BLOCK /A031 DCA FMTQBK+RXQBLK JMS FMTQRX / GO WRITE THE DIRECTORY BLOCK JMP FMTER / ERROR--GO DISPLAY MESSAGE; WAIT FOR GM/A045 / NOW DO THE ALLOCATION BLOCK /A044 /D082 JMS CLBUF / CLEAR FMTBUF /A031 JMS STDBL / GO SET UP ALLOC BLOCK /A014 /M031 TAD P377 / GET THE BLOCK # OF THE ALLOC BLOCK /M031 DCA FMTQBK+RXQBLK JMS FMTQRX JMP FMTER / ERROR--GO DISPLAY MESSAGE; WAIT FOR GM/A045 JMP I FMTHAB / RETURN IFZERO .&4000 FIELD CDFMYF&70+10 / BUFFER FIELD /A042 *0000 / THE WHOLE FIELD! /A042 FMTBUF, / IS THE BUFFER /A042   /CPYFIL (COPY FILE) MAINTENCE COMMAND TO COPY DOCUMENTS / .VERSION / / / / COPYRIGHT (C) 1983 / DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASSACHUSETTS 01754 / / THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED / ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE / INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER / COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY / OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY / TRANSFERRED. / / THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE / AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT / CORPORATION. / / DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS / SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL. / /++ / FACILITY: / / ABSTRACT: / / ENVIRONMENT: / / AUTHOR: GEORGE PANOS CREATION DATE: OCTOBER 31,1981 / /-- / /************************************************************************ / EDIT HISTORY /*************************************************************************** / / 046 EMcD 11-Sep-85 Add Nordic translations / conditionalised / 045 MART 02-AUG-85 FIX ITALIAN assembly bugs / 044 EJL 12-OCT-84 fix COPY ONE, COPY ALL copying / wrong file / 043 WCE 18-SEP-84 Change #'s to NUMBER in text messages / 042 DFB 24-AUG-84 Fix bug due to hard wired references / 041 WJY 07-AUG-84 Change "Not enough room..." error message / to reflect the possibility of a non-init / diskette (volume). Bug WPSV2-96. / 040 WCE 30-OCT-83 CHANGED CHRCNT TAG TO CHARCT / 039 WJY 27-SEP-83 DM II V1.5 WINCHESTER SUPPORT / *note* The term area has been replaced / by device. Since device is already used / in another context, I left the term area / in the comments & only changed TEXT statements / 038 HLP 23-SEP-83 Fix bug induced V10J when copy one by / number it thinks has no name / 037 HLP 01-SEP-83 QAR EZ-59 number over 200 in index doc / GENERAL CLEANUP & SOME RECONSTRUCTION / THRU TO SAVE SPACE FOR THE ABOVE FIXES / ADDED SCREEN FOR ILLEGAL DOCUMENT NUMBER / 19-SEP-83 REWORDED SCREEN TO SHOW THAT TYPING RETURN / TO A NUMBERED DOCUMENT ASSIGNS A NEW NUMBER / 036 HLP 07-SEP-83 Replace SOTFL with 100; VALUE, thus / eliminating the need for WPSRDF / in MASTER.INF / 035 WCE 19-JUL-83 Modify labels for new prefix file / 034 DFB 26-MAY-83 Fix copy one doc msg / 033 DFB 19-MAY-83 Fix to pass TBOE menu when input drive / =output drive. Go to "E"nter / 032 GJP 12-JAN-83 save and restore names of documents / when user types command keys when / copying docs and no room on diskette / 031 GJP 22-DEC-82 CAN'T COPY NUMBERED DOC BUG / 030 AIB 14-DEC-82 conditionalize "Rubout key" messages / 029 GJP 10-DEC-82 Clear out default drive and document / number upon returnn to Main Menu / 028 GJP 30-NOV-82 MAKE SURE WE'RE REPLACING DRIVE 0 / 027 GJP 29-NOV-82 TYPING GARGAGE HAS NO MEANING / 026 GJP 23-NOV-82 ERASE LINE FROM SCREEN ON ERROR / 025 GJP 18-NOV-82 FIX COPY ONE BY NUMBER / 024 GJP 17-NOV-82 REMOVE NOMEANING BUG (TOO LONG) / 023 GJP 12-NOV-82 FIX 'THEN PRESS RETURN' BUG / 022 GJP 10-NOV-82 CAN'T FIND DOC NAME AFTER HITTING GOLD KEYS / 021 GJP 09-NOV-82 FIX UP COSMETIC MESSAGES / 020 GJP 5-NOV-82 FIX SCREWS UP INDEX DOC ON COPY ONE / 019 GJP 26-OCT-82 FIX BUG THAT WILL NOT COPY NUMBERED DOC / 018 GJP 22-OCT-82 NO DISKETTE IN DRIVE-WRONG MESSAGE / 017 GJP 21-OCT-82 FIX UP ERROR MESSAGES / 016 GJP 21-OCT-82 REMOVE ADDITIONAL LINE ON ERROR MESS / 015 GJP 21-OCT-82 FIX ERASURE OF VALUE IN INBUF / 014 GJP 20-OCT-82 FIX WON'T OVERWRITE WITH LESS THAN 8-BLOCKS / 013 GJP 20-OCT-82 FIX ERASURE OF NAME ON WRONG INPUT / 012 GJP 10-OCT-82 FIX PRES RETURN TO RECALL MAIN MENU BUG / 011 GJP 05-OCT-82 FIX GOLD MENU RETURN / 010 AIB 29-SEP-82 changed RUB CHAR, RUB WORD to Rubout / 009 GDH 30-MAR-82 (another) fix to CREATE ordering. / 008 DFB 26-MAR-82 Write out dir block after copy / 007 GJP 22-MAR-82 Put code to display name to user / 006 GJP 19-MAR-82 Fixed no-name in index bug / 005 GDH 11-MAR-82 Fixed "create" ordering. / 004 GJP 2-MAR-82 FIX COPY ALL BAD FILE NAME BUG / 003 GJP 28-FEB-82 MAKE ROOM FOR ADDITIONAL FUNCTIONALITY / 002 GDH 08-JAN-82 Implemented "read error detection". / 001 PHA 21-JAN-82 CORRECTS LOSS OF HDR INFO DURING COPY / WRITE OUT COPY FILE UTITLITY FIELD 0 *200 JMP I .+3 JMP I .+1 7600 RXLOAD *RXLDLS RXEWT=4 RXEWT 0 RXQBLK=11 RXQBLK . DLCPFL;100;CDF 30;-17 0 / CPYFIL.PA - COPY FILE UTILITY FIELD 3 /D036 *SOTFL *100 / THE FIRST 100 LOCATIONS CONTAIN COMMON SYSTEM CONSTANTS / (E.G. P177, ETCETERA.) VALUE, 0 TABLE, 0 / AREA TO SUPPORT DECIMAL CONVERSION DPREC, 0 / DECIMAL CONVERSION PRECISION COUNT FOR DEC CONVERT DPREC1, 0 / SIGNIFICANCE STARTER FOR DECIMAL CONVERSION RTNE CDFMYF=CDFEDT / BELOW ARE A BUNCH OF SAVE AREAS USED BY THIS PROGRAM STATUS, 0 / STATUS OF THE DOCUMENT. 0=EXISTS, -1=DOESN'T EXIST CPYCHR, 0 / HOLDS THE CHARACTER BEING COPIED WHEN / CHECKING FOR GOLD HALT. OPTION, 0 / OPTION THE USER WANTS, TOP,BOTTOM,OVERWRITE / -1=OVERWRITE DOC, 0=WRITE TO TOP, 1=WRITE TO BOTTOM SVIDCN, 0 / HOLDS THE INPUT DOCUMENT NUMBER SVODCN, 0 / HOLDS THE OUTPUT DOCUMENT NUMBER SVIFNO, 0 / FILE ID OF INPUT, DRIVE + FILE NO SVOFNO, 0 / FILE ID OF OUTPUT SVISIZ, 0 / SIZE OF INPUT DOCUMENT SVOSIZ, 0 / SIZE OF OUTPUT DOCUMENT TODRV, 0 / HOLDS THE DRIVE NUMBER WE'RE COPYING TO FROMDR, 0 / HOLDS THE DRIVE NUMBER WE'RE COPYING FROM OSXTY, 60 / TO MAKE ASCII NUMBERS WITH DISKID, 0 / HOLDS THE DISK ID OF THE SYSTEM DISKETTE RSIGN, 0 / HOLDS THE SIGNAL THAT WE WANT TO COPY BY NAME ONLY COPYTP, 0 / HOLDS THE TYPE OF COPY WE'RE DOING / 1=COPY ONE, 2=COPY SOME, 3=COPY ALL SIGNL, 0 / SIGNAL TO TELL US WE'RE DOING NUMBERED DOCUMENTS DRVNBR, 0 / SAVE DRIVE NUMBER WHEN DOING COPY ONE DCNBR, 0 / SAVE THE DOCUMENT NUMBER WHEN DOING COPY ONE PERIOD, 56 / A PERIOD. SVIDCH, 0 / HOLDS THE INPUT DOCUMENT HEADER BLOCK NUMBER HBLSIG, 0 / SIGNAL THAT THE HOME BLOCK HAS BEEN READ 1=READ M44, -44 / NUMBER OF WORDS TO MOVE FROM HEADER TO NEW DOCUMENT HDR / THIS IS USED FOR LOOP CONTROL IN MOVING THE HEADER WORDS / OF DATES, TIMES, RULERS, ETC TO THE NEW DOC HEADER FOUR, 4 / WHERE TO BEGIN MOVING WORDS FROM HDR TO HDR NINE, 11 / WHERE IN HDR TO PUT THE DOCUMENT NUMBER / HDRBLK, 0 /HEADER BLOCK NUMBER OF DOCUMENT TO BE COPIED /A001 MSEVN, -7 / CONSTANT OF MINUS 7 MSPACE, -40 / SPACE TO CHECK FOR A SPACE /A004 SEVEN, 7 / CONSTANT OF 7 (USED TO ELIMINATE WORD WRAPS) INBUF2=INBUF+1 / CONSTANT OF INBUF +1 FOR CHECKING LENGTH /A006 MSTRLN, -STRLEN / NEG OF STRING LENGTH, USED FOR LOOP CONTROL PLT, LT / LEFT ANGLE BRACKET MLT, -LT / NEG OF LEFT ANGLE BRACKET, TO REVERSE WHEN CHECKING / FOR LEFT ANGLE BRACKET SFTRET, -2012 / A SOFT RETURN CHAR (TO CHECK FOR THEM) WWRAPB, 2012-2040 / A WORD WRAP BLANK (TO CHECK FOR THEM AFTER CHKING FOR / WD WRP CHAR) PWWRPB, 2040 / POS WORD WRAP BLANK FOR RESTORING CHARACTERS DCNBRS=200 / LOCATION IN BUFFER FIELD WHERE FILE NUMBERS ARE STORED/A003 FLNBRS, DCNBRS-1 / WHERE FILE NUMBERS ARE IN BUFFER (FOR INDEX) /A003 M512, -1000 / CONSTANT OF -512 (OCTAL) /A007 ONE, 1 / CONSTANT OF 1 (OCTAL) /A007 SIGNL2, 0 / SIGNAL THAT THE USER WANTS TO COPY DOC ON COPY SOME /A007 SIGNL3, 0 / SIGNAL THAT THE USER GAVE DOC A NAME ON COPY SOME /A007 DOCSIG, 0 / SIGNAL THAT ROTINE 'DTAO' ROUTINE IS USING 'READMU' /A023 /M017 MOVED HERE FOR SPACE REASONS ERSTAT, 0000 /TYPE OF CREATE ERROR MESSAGE TO DISPLAY /0 = GENERAL CANNOT CREATE /1 = DOC # OUT OF RANGE /2 = NO DOCS AVAILABLE LSTSIZ, 0 /SIZE OF INPUT FILE OVRSPCE, 0 /SIZE OF RESULT FILE 0 WHEN ADDING TO TOP OR BOTTOM TOPSC, PTOPSC / ADDED FOR SPACE REASONS /A018 MDOCFS, 0 / MINUS (NEGATIVE) NUMBER OF DOCS IN FILE SYSTEM /A037 NDOCFS, 0 / (POSITIVE) NUMBER OF DOCS IN FILE SYSTEM /A037 IDNCNT, 0 / ILLEGAL DOCUMENT NUMBER COUNT /A037 IDNTMP, 0 / ILLEGAL DOCUMENT NUMBER TEMP /A037 DSTMED, 0 / PTR. TO THE MEDIA TYPE STRING ('DISKETTE'or'VOLUME') /A039 WINSRC, 0 / FLAG INDICATING FROM DRIVE IS A WINNIE AREA /A039 / IF = 0 NOT A WINNIE, IF .GT. 0 IT IS THE WINNIE AREA #/A039 WINDST, 0 / SAME AS ABOVE FOR TO DRIVE /A039 WINONE, 0 / TRUTH FLAG INDICATING DEVICE # 1 IS A WINNIE AREA /A039 /---------------------- PAGE BELL= 7 / BACKSP= 10 / TAB= 11 / TAB CHARACTER FF= 14 / FORM FEED LT= 74 / LEFT ANGLE BRACKET LF= 12 / CR= 15 / KVTWIDTH=121 / 81(10) IS THE WIDTH OF A LINE OF THE VT SREXT=10 /ADDED TO SIZE OF LIST DOC DURING SIZING TO ALLOW 8(10) EXTRA /BLOCKS /D042 MUIOFF=MUBUF+MNSYSA+4 / LOCATION OF MENU BUFFER OFFSET /D042 MUISTR=MUBUF+MNIBUF / BUFFER ADDR OF WHERE WP2CMF'S 'READ' AND / 'FILNAM' COMMANDS READ INTO A FROM. ADRASM= 0 /THIS ASSEMBLES THE CREATE MODULE SO IT WILL NOT /TRY TO DISPLAY ERROR MESSAGES BUT SET THE AC FOR /A PARTICULAR MESSAGE SO WPSTPR DISPLAYS APPROPRIATE /MESSAGE ON CREATE ERROR /WE GET HERE AFTER HITTING MC-C-X-# WHERE X IS {A,S,O} AND /A037 /N IS THE DRIVE NUMBER THAT CONTAINS THE SOURCE DISK /A037 /THE MENU FOR THE INSTRUCTIONS TO REMOVE THE SYSTEM DISK IS DONE /A037 /WITHIN THIS MODULE. WHY? SO THAT WE ARE GUARANTEED TO HAVE /A037 /CPYFIL LOADED BY THE TIME THE USER SEES THE TEXT ON THE SCREEN /A037 /WHICH TELLS HIM THAT HE MAY REMOVE THE SYSTEM DISK /A037 /THIS MAY BE DONE MORE EFFICIENTLY IN THE FUTURE WITH A MENU CALL...HLP /A037 CPYFIL, XX /FIRST GET THE DISK ID OF THE SYSTEM DISK SO WE CAN MAKE SURE THE SAME /SYSTEM DISK IS INSERTED WHEN WE LEAVE CPYFIL TO RETURN TO MAIN MENU JMS GTDKID / GET DISK ID DCA DISKID / SAVE IT DCA IDNCNT / CLEAR THE ILLEGAL DOCUMENT NUMBER COUNT/A037 / THIS SECTION GETS ALL THE PARAMETERS PASSED INITIALLY BY THE USER / IT GETS THE TO AND FROM DRIVES AND IF NECESSARY TELLS THE USER TO REMOVE / THE SYSTEM DISKETTE AND INSERT THE DISKETTE THAT EITHER WILL RECEIVE / THE DOCUMNTS OR FROM WHICH DOCUMENTS WILL BE COPIED. / THE PARAMETERS THAT ARE PASSED ARE THE COPY TYPE WE'RE DOING (1=COPY / ONE DOCUMENT, 2=COPY SOME OF THE DOCUMENTS, 3=COPY ALL OF THE DOCUMENTS) / AND THE DRIVE NUMBERS THAT WE'RE COPYING FROM AND TO. CDFMNU TAD I (MUBUF+MNTMP1) / GET THE COPY TYPE:1=ONE, 2=SOME, 3=ALL DCA COPYTP / SAVE IT FOR FUTURE USE TAD I (MUBUF+MNTMP4) / GET THE DRIVE WE'RE COPYING FROM DCA FROMDR / SAVE IT TAD I (MUBUF+MNTMP5) / GET THE DRIVE WE'RE COPYING TO DCA TODRV / SAVE IT JMP WINCHK / GO SEE IF WE'RE ON A WINNIE SYSTEM /A039 WINRET, / WINCHK ROUTINE IS IN 2 PIECES FOR /A039 / SPACE REASONS, SO WE ARE USING JUMPS /A039 /D039 CDFMYF DCA DSTMED / CDF IS DONE IN WINCHK RTNE., ADDRESS /A039 / OF "DISKETTE" OR "VOLUME" LEFT IN AC /A039 TAD TODRV / GET THE 'TO' DRIVE SNA CLA / IF ZERO, THEN SYSTEM DRIVE IS RECEIVING DRV JMP RCVING / GO ASK HIM TO REMOVE THE SYSTEM DRIVE TAD FROMDR / GET THE DRVIE NO WE'RE COPYING FROM SZA CLA / IF NON-ZERO, THEN NOT SYSTEM DRIVE JMP GOBCK / DON'T ASK FOR SYSTEM DRIVE TAD (COPYF / GET ADDRESS OF "CONTAINS" GODISP, / GO DISPLAY MESSAGE JMS DISP1 / GO DISPLAY GOBCK, JMP CUGSP / RCVING, TAD (RECEV / GET ADDRESS OF "TO RECEIVE" JMP GODISP / GO DISPLAY IT CUGSP, / PROMPT FOR COPY DOC NAME DCA RSIGN / CLEAR 'NAME ONLY' SIGNAL /M031 AC7777 / SEE WHAT TYPE OF COPY WE'RE DOING TAD COPYTP / ARE WE DOING A COPY ONE? SZA CLA / YES, THEN PROCEED JMP CPYSAL / GO PROCESS A COPY SOME OR COPY ALL / WE ARE DOING A COPY ONE AT A TIME DCA SIGNL / CLEAR 'DOING NUMBERED DOCUMENT' SIGNAL MQL AC0002 / SIGNAL MAIN MENU NOT DO FILNAM THIS TIME JMS STTMPS / GO SET UP FOR MAIN MENU CALL /ASK THE USER THE NAME OR NUMBER OF THE DOCUMENT /HE WISHES TO COPY JMS I TOPSC / GO ERASE AND DISP '--COPY DOCUMENT--' /A018 CIFMNU JMS I IOACAL 0 TXCS2 / G. P. TWO SUBSTRINGS /A037 1505 SPRMPT / "PLEASE ENTER THE NAME OR .. NOW WISH /C037 1605 / POSITION FOR A NEW LINE /M037 NARG / NULL ARGUMENT FOR A NEW LINE JMS APRORG / "AND PRESS RETURN OR GOLD MENU /A037 JMS READMU / PROCESS INPUT FROM MENU JMP GOLDMU / RETURN TO MM CDFMYF / READMU LEAVES DATA FIELD AT MENU JMS HMBLCK / GO GET HOME BLOCK INTO MAIN MEMORY JMS CPMNOV / GO COPY INPUT FROM MENU FLD TO CHECK IT JMS CKINPT / GO SEE WHAT WAS PUT IN JMP CUGSP / HE HIT RETURN JMP NMNING / NO MEANING TO WHAT HE PUT IN CUGSP1, CLA / MEANING TAD FROMDR / GET THE FROM DRIVE NBR TAD OSXTY / MAKE IT AN ASCII NUMBER JMS FIXNAM / GO SET UP THE NAME JMS CSTUFF / SUBROUTINE INVENTED TO SAVE SPACE /A037 MQL / Store number passed / A44 CUGSP2, TAD DCNBR / If DCNBR is zero we are doing / copy one. If non zero don't use / number passed. It can return a wrong / value if the filename lookup is a / subset of an existing name. This / should be fixed at the filename lookup / routine and not here..but thats field test / for you. SNA / A44 ACL / COPY ONE. used number passed by cstuff/ A44 / UPDATE menu locations so right / document number is being used. DCA SVIDCN / SAVE IT FOR FUTURE USE TAD I (MUBUF+MNFNO) / GET THE FILE ID AND (7400 / re-building menu words / A44 TAD SVIDCN / " " " " / A44 DCA SVIFNO / SAVE IT FOR FUTURE USE TAD SVIFNO /re-building menu words DCA I (MUBUF+MNFNO / / A44 CDFMYF / GET BACK TO THIS FIELD AC7777 TAD COPYTP / ONLY IF IT'S A COPY ONE... /A001 SNA CLA JMS FIXONE / FIND ITS HEADER BLK # /A001 TAD STATUS / GET THE STATUS SMA CLA JMP CTDIN / CONTINUE IF FILE EXISTS JMS NDERR / COMPLAIN THAT IT DOESN'T EXIST INBUF+1 / WHERE FILE NAME EXISTS, ALTERRED BY 'FIXNAME RTN JMP CUGSP / GO ASK FOR ANOTHER CTDIN, TAD SIGNL / ARE WE DOING A NUMBERED FILE? SZA CLA / NO, CONTINUE... JMP CTDIN3 / YES /C037 CTDIN2, / RETURN POINT AFTER NUMBER IS SET UP FOR FILNAM JMS GTNAM / GO GET FULL NAME OF DOCUMENT IF DOING COPY ONE TAD TODRV / GET THE TO DRIVE NBR TAD OSXTY / MAKE IT AN ASCII NUMBER CDFMNU / CHANGE TO MENU FIELD DCA I (MUBUF+MNIBUF / PUT DRIVE NUMBER AT MNIBUF /C042 TAD (MUBUF+MNIBUF / GET ADDRESS OF MENU STRING /C042 DCA I (MUBUF+MNPOS / PUT ADDR OF MENU STRING INTO MENU OFFSET/C042 CDFMYF JMP CTDIN1 CTDIN3, TAD SVIDCN / GET DOCUMENT NUMBER /A037 DCA DCNBR / PUT IT WHERE ASKNM CAN DISPLAY IT /A037 JMP MVNBR / GO TELL USER DOCUMENT HAS NO NAME /A037 GOLDMU, / WHERE THINGS COME ON GOLD MENU CDFMNU /A029 DCA I (MUBUF+MNFNO) / CLEAR OUT DEFAULT DOC AND DRV NUMBER /A029 CDFMYF /A029 JMS REPLC / GO GET THE SYSTEM DISKETTE BACK UP /D035 RETURN, DCA SIGNL / CLEAR THE 'DOING NUMBERED FILES' SIGNAL CDIMNU /A037 JMP I CPYFIL /-------------------- PAGE /DOCUMENT EXISTS ALREDY ON THE OUTPUT DRIVE SO DISPLAY TAO PROMPT DTAO, XX DTAO1, /A018 AC7777 / SIGNAL READMU ROUTINE TO RETURN HERE ON /A023 DCA DOCSIG / INCORRECT INPUT BY USER /A023 JMS I TOPSC / GO ERASE AND DISP '--COPY DOCUMENT--' /A018 CIFMNU JMS I IOACAL 0 DEXTS /ADDRESS OF TEXT STRING 305 /POSITION FIRST LINE ON SECOND ROW 5 COLUMN SVODCN / OUTPUT DOCUMENT NUMBER TAD SIGNL / CHECK TO SEE IF ITS NUMBER ONLY SMA CLA JMS DONAME / THERE IS A NAME TO IT, GO DISPLAY IT CIFMNU JMS I IOACAL 0 DREST 705 1105 1305 1505 1705 2105 2305 JMS ORGOLD ORAR JMS MVCPIN / GO SAVE NAME OF DOCUMENT IN CASE OF ERROR /A012 JMS READMU /READ INPUT FROM MENU MODULE JMP GOLDMU /GOLD M SO ASK FOR SYSTEM DISKETTE CDFMYF /CHANGE DATA FIELD TO MINE SMA /IF AC NEGATIVE INAPPROPRIATE INPUT JMP STORE /IF APPROPRIATE CONTINUE IAC / LETS SEE IF WE CAME FROM RTNWT /A023 SZA CLA / IF ZERO HERE WE CAME FORM MAIN MENU /A023 JMP DTAO1 / JUST A RETURN /A023 / CPMSGA -- SAVES THE NAME OF THE DOCUMENT BEING COPIED WHEN /A012 / THE USER TYPES IN THE WRONG THING /A012 / /A012 JMS MVINPT / COPY INPUT FROM MENU FIELD /A037 JMS NOMEAN / DISPLAY TYPING '' HAS NO MEANING HERE /A037 JMS COPOVR /A012 JMP DTAO1 /ASK AGAIN STORE, DCA OPTION /STORE THE OPTION WANTED DCA DOCSIG / CLEAR SIGNAL TO RETURN HERE ON INCORRECT INPUT/A023 JMP I DTAO /RETURN /********************************************************************** / / THIS CODE HANDLES COPY SOME AND COPY ALL OPERATIONS. / IT WILL FIRST GET FILE NAMES FROM THE INDEX DOCUMENT / AND COPY THEM OVER THEN IT WILL PROCEED TO COPY OVER THE / UNNAMED DOCUMENTS. IF A COPY SOME OPERATION, IT WILL DISPLAY / THE NAME TO THE USER AND ASK HIM IF HE WANTS TO COPY IT. / /************************************************************************** CPYSAL, DCA IDNTMP / CLEAR TEMPORARY IDN COUNT /A037 JMS HMBLCK / GO GET THE HOME BLOCK IN TO MEMORY AC0004 / SIGNAL MAIN MENU WE'VE GOT THE FILE CDFMNU DCA I (MUBUF+MNTMP3) TAD (MUBUF+MNIBUF / RE-INITALIZE MUISTR FOR 'FILNAM' RTNE/C042 DCA I (MUBUF+MNPOS / INITIALIZE IT /C042 CDFMYF TAD SIGNL / GET INDEX END OF FILE SIGNAL SZA CLA / IS IT ON? JMP CPYSL3 / YES, GO PROCESS NAMELESS DOCUMENTS TAD FROMDR / GET THE DRIVE NUMBER WE'RE COPYING FROM BSW CLL RTL / SET UP DRIVE AND FILE NBR FOR OPEN IAC / INDEX FILE= FILE 1 JMS OPENRD / GO OPEN THE FILE FOR READING CPYSL1, CLA JMS GTLIST / GET A FILE NUMBER FROM INDEX FILE JMP CPYSL3 / END OF INDEX FILE TAD MDOCFS / SEE IF A LEGAL DOCUMENT NUMBER /A037 SMA SZA / /A037 JMP CPYSL6 / NOT A LEGAL DOCUMENT NUMBER /A037 TAD NDOCFS / RESTORE DOCUMENT NUMBER /A037 JMS MKNBR / GO CHECK IF FILE HAS BEEN DONE JMP CPYSL1 / YES IT HAS BEEN DONE AC7776 / CHECK WHAT SORT OF COPY WE'RE DOING TAD COPYTP / IS IT A COPY SOME? SNA CLA JMP CPYSL2 / WE ARE DOING COPY SOME JMP CUGSP1 / WE'RE DOING COPY ALL, GO COPY IT CPYSL2, TAD T2 / GET THE FILE NUMBER FOR DISPLAY JMS CPWISH / GO DISPLAY IT INBUF+1 / THE NAME OF THE FILE JMP CUGSP1 / HE PRESSED YES CPYSL6, / ILLEGAL DOCUMENT NUMBER DETECTED /A037 CLA / CLEAR ILLEGAL EXCESS /A037 TAD IDNCNT / GET COUNT OF ILLEGAL DOC NOS /A037 CIA / SO WE CAN DETERMIN IF WE HAVE /A037 TAD IDNTMP / TOLD USER ABOUT THIS INVALID /A037 SZA CLA / INDEX DOCUMENT ENTRY /A037 JMP CPYSL8 / ... WE ALREAD TOLD HIM ONCE! /A037 ISZ IDNCNT / COUNT THIS INVALID ENTRY /A037 JMS I TOPSC / CLA, ERASE AND INITALIZE SCREEN /A037 CIFMNU /A037 JMS I IOACAL /A037 0 /A037 TXTIDN / "DOCUMENT ^A HAS AN ILLEGAL DOCUMENT NUMBER 1305 / SCREEN POSITION /A037 INBUF+1 / ADDRESS OF THE NAME OF THE DOCUMENT /A037 1505 / POSITION OF SUBSTRING /A037 TXTID1 / "HAS AN ILLEGAL DOCUMENT NUMBER /A037 CPYSL7, TAD (1700) / POSITION TO ERASE FROM /A037 JMS ERASE / ERASE ANY ..YOU TYPED GARBAGE /A037 CIFMNU / /A037 JMS I IOACAL / /A037 0 /A037 TXCS1 / G. P. CONTROL STRING ONE /A037 2305 / POSITION /A037 TXPRCN / "PRESS RETURN TO CONINUE..." /A037 JMS ORGOLD / "OR PRESS GOLD MENU TO RETURN TO MM /A037 ORAR / /A037 JMS ASK / GET RESPONSE /A037 JMP GOLDMU / GOLD MENU /A037 JMP CPYSL7 / NO MEANING--REPAINT /A037 / RETURN--CONTINUE /A037 CPYSL8, ISZ IDNTMP / BUMP TEMPORARY COUNTER /A037 JMP CPYSL1 / HE HIT RETURN. GO TO NEXT DOC /A037 /----------------- PAGE / LOGIC REWRITTEN BELOW TO SAVE 2 LOCS. /A039 CRERR, AC7776 / GET -2 IN AC /A039 TAD ERSTAT / ADD IN ERSTAT /A039 SNA CLA / IF ERSTAT .NE. 2 THEN SKIP /A039 JMP NSPCMSG / ELSE WAS 2, DISPLAY NO SPACE FOR DOC MSG /A039 TAD ERSTAT / GET BACK ERROR STATUS /A039 SZA CLA / IF STATUS=0 THEN DISPLAY SHORT MESSAGE /A039 JMP WRGMSG / ELSE DISP WRONG DOC # MSG /A039 STMSG, /C017 TAD CUB1 /A017 TAD P377 /A017 SZA CLA /A017 JMP NOTINT / NON INITIALIZED DIKSETTE /A017 TAD CUB1+1 / GET HOME BLOCK ID /A017 AND (6077) / STRIP OFF VERSION NBR /A017 CIA / COMPARE IT /A017 TAD (30) / CHECK OR VALID HOME BLOCK /A017 SZA CLA /A017 JMP NOTINT / NOT INITIALIZED, GO COMPLAIN /A017 TAD (CNRG) /GET NO DISPLAY ARGUMENT JMS CREMSG /GO TO DISPLAY CREATE ERROR MESSAGE /C017 JMP PRETRN /A017 NOTINT, /A039 TAD DSTMED / PTR TO "DISKETTE" OR "VOLUME" TEXT /A039 DCA CRMED / PUT INTO IOACAL PARM LIST /A039 JMP NOTIN1 /A039 WRGMSG, TAD (WNUM) /GET WRONG DOCUMENT NUMBER ARGUMENT JMS CREMSG /GO TO DISPLAY CREATE ERROR MESSAGE /C017 JMP PRETRN /A017 NSPCMSG,TAD (NMDC-NONIN)/ GET NO DOCUMENTS AVAILABLE ARGUMENT /C037 NOTIN1, / NOT INITIALIZED /C037/C039 TAD (NONIN) / GENERATE THE CORRECT MESSAGE POINTER /A037 JMS CREMSG /GO TO DISPLAY CREATE ERROR MESSAGE /C017 PGOLD, JMS ORGOLD / ENTRY POINT FOR UNASSIGNED WINNIE ERROR RET /A017/C039 NARG /A017 JMS KBRD /A017 JMP GOLDMU /A017 CREMSG, XX /C017 DCA CRMSG /STORE APPROPRIATE MESSAGE ARGUMENT FOR DISPLAY /C017 CRMSG1, /A018 JMS I TOPSC / GO ERASE AND DISP '--COPY DOCUMENT--' /A018 JMS RBELL CIFMNU JMS I IOACAL 0 CNTCRE /DISPLAY CANNOT CREATE DOCUMENT 1505 /ON LINE 15 COLUMN 5 CIFMNU JMS I IOACAL 0 CRMSG, 0000 /DISPLAY DOC # OUT OF RANGE, OR NO MORE DOCS 1605 CRMED, NOP / WHEN ERROR IS "NOT INITIALIZED" THIS LOCATION /A039 / WILL HAVE "DISKETTE" OR "VOLUME" TEXT /A039 / FOR ALL OTHERS THE NOP WILL BE EXECUTED ON /A039 / RETURN FROM IOA /A039 JMP I CREMSG /A017 PRETRN, /A017 CIFMNU /CHANGE INSTRUCTION FIELD TO MENU JMS I IOACAL /CALL IOA 0 TARTN /DISPLAY PRESS RETURN TO TRY ANOTHER NAME 2005 /LINE TO DISPLAY JMS ORGOLD /DISPLAY PRESS GOLD M ORAR /DISPLAY OR JMS ASK / GET RESPONSE /C037 JMP GOLDMU / GOLD MENU /A037 JMP CRERR / GARBAGE--REPAINT /C037 JMP MVNBR / RETURN--REASK ABOUT NUMBERED DOC /C037 /THIS ROUTINE READS INPUT IN RESPONSE TO ERROR MESSAGES WHICH REQUEST A RETURN /WHEN RETURN IS TYPED RETURN TO USER IF NOT RING BELL AND COMPLAIN AGAIN /CALLED BY JMS RTNWT;WRONG RETURN;OK RETURN RTNWT, XX TAD INBUF / GET NEG NBR OF LENGTH OF INPUT /A023 DCA CUPBF0+STRLEN / PUT IT IN FRONT OF BUFFER AREA /A023 CIFMNU JMS I INACAL CUPBF0+STRLEN /INPUT BUFFER TO RECEIVE INPUT /C023 JMP WRNG /GOLD KEY RING BELL COMPLAIN AGAIN CLA MQA /MQ HAS # OF CHARS IF NOT 0 THEN NOT RETURN SZA CLA /SEE IF IT IS 0 JMP WRNG /IF NOT RETURN RING BELL COMPLAIN AGAIN ISZ RTNWT /MUST BE RETURN SO INCREMENT FOR OK RETURN JMP .+2 /RETURN TO CALLER /C015 WRNG, JMS RBELL /RING BELL JMP I RTNWT /RETURN TO CALLER TO COMPLAIN AGAIN /********************************************************************* / / THIS ROUTINE WILL CHECK TO SEE IF THE FILE NUMBER THAT IS / PASSED TO IT IN THE AC HAS BEEN COPIED ALREADY. IF IT HAS, / IT RETURNS TO THE NEXT SEQUENTIAL INSTRUCTION AFTER THE / RETURN ADDRESS. IF IT HASN'T, IT MARKS IT AS HAVING BEEN DONE / BUMPS UP THE RETURN ADDRESS, AND THEN RETURNS. / CALL IT SO: / JMS MKNBR / ADDRESS TO COME TO IF THE FILE HAS BEEN COPIED / ADDRESS TO RETURN TO IF THE FILE HASN'T BEEN COPIED / /*************************************************************************** MKNBR, XX DCA DCNBR / SAVE THE FILE NUMBER /C004 TAD FROMDR / GET THE DRIVE WE'RE COPYING FROM BSW / CONSTRUCT A FILE ID - DRIV-FILE NBR CLL RTR TAD DCNBR /C004 DCA SVIFNO / SAVE THE FILE ID TAD DCNBR / GET THE FILE NUMBER /C004 TAD FLNBRS / GET ADDRESS WHERE FILE NUMBERS ARE KEPT /C003 CDFBUF /A003 DCA T1 / SAVE IT TAD I T1 / GET THE FILE HEADER BLOCK NBR SNA / IF ZERO, NOT IN USE JMP MKNBRX / NOT IN USE, RETURN SPA CLA JMP GOLDMU / IF MINUS HERE, WE HIT THE END OF THE FILE NUMBER TBL AC7777 TAD I T1 / SEE IF HAS ALREADY BEEN COPIED SNA CLA / ZERO HERE MEANS IT HASN'T JMP MKNBRX / GO BACK NSI TAD I T1 /SAVE A COPY OF HDR BLK # /A001 DCA HDRBLK / SO WE CAN FIND IT LATER /A001 AC0001 / MARK FILE AS HAVING BEEN COPIED DCA I T1 / MARK IT IN TABLE ISZ MKNBR / BUMP UP TO RETURN ADDR MKNBRX, CLA / CLEAR THE AC CDFMYF /A003 JMP I MKNBR / GO BACK / ********************************************************************* /A039 / /A039 / ISWIN - INPUT: AC=DEVICE # /A039 / OUTPUT: AC=WINNIE AREA # OR 0 IF DISKETTE /A039 / /A039 / ********************************************************************* /A039 ISWIN, XX /A039 DCA T1 / SAVE DEVICE # /A039 AC7777 / GET -1 IN AC /A039 TAD T1 / ADD IN DEVICE # /A039 SZA CLA / IF DEVICE # IS 1 CHECK FURTHER /A039 JMP ISWINX / ELSE IT IS DRIVE 0 OR AREA 2,3.... /A039 TAD WINONE / GET "DEVICE ONE IS A WINNIE" FLAG /A039 SZA CLA / IT ISN'T SO RETURN A CLEARED AC /A039 ISWINX, TAD T1 / RETURN DEVICE # (=0 DRIVE,.GT.0 AREA) /A039 JMP I ISWIN /A039 /------------------- PAGE /***************************************************************************** / / ASKNM -- ASK AND GET AN ANSWER FROM THE USER AS TO WHETHER / HE WISHES TO NAME AN UNNAMED DOCUMENT, OR GIVE IT A NUMBER, OR GO ON TO / THE NEXT DOCUMENT OR TO MAIN MENU. / / JMS ASKNM / JMP FOO1 / RETURN HERE HIT GOLD MENU / JMP FOO2 / RETURN HERE, HIT JUST RETURN / TAD ETC / RETURN HERE, NAME OR NUMBER / /******************************************************************************* ASKNM, XX ASKNM1, JMS I TOPSC / GO ERASE AND DISP '--COPY DOCUMENT--' /A018 TAD DCNBR / GET THE DOC NUMBER TO DISPLAY DCA DOCNBR / PUT IT WHERE IT CAN BE DISPLAYED CIFMNU JMS I IOACAL 0 GLST 1705 DOCNBR, 0 2105 2305 JMS ORGOLD ORAR TAD INBUF / GET INITIAL STRING LENGTH FOR INACAL DCA CUPBF0 / PUT INTO BUFFER AREA CIFMNU JMS I INACAL CUPBF0 JMP GOLDK CLA MQA SNA CLA JMP ASKNM3 / HE HIT RETURN JMS CPYOVR / GO COPY IT TO JMS CKINPT / GO CHECK WHAT THE USER TYPED IN /A003 JMP ASKNM1 / IF NO ARGUMENT TYPED IN, GO ASK AGAIN /A003 JMP ASKNM4 / NO MEANING TO WHAT HE TYPED IN /A003 ISZ ASKNM / BUMP UP TO RETURN ADDRESS ASKNM3, ISZ ASKNM JMP I ASKNM ASKNM4, /A003 JMS NOMEAN / GO TELL USER HIS INPUT IS MEANINGLESS /A003 JMP ASKNM1 / GO ASK HIM FOR IT AGAIN /A003 GOLDK, JMS GMTST 2105 / ERASE FROM THIS LINE /A026 JMP I ASKNM / HE HIT GOLD MENU JMP ASKNM1 / GO DISPLAY THE MESSAGE AGAIN /***************************************************************************** / / THIS ROUTINE GETS THE DRIVE NUMBER (PASSED TO IT IN THE AC) AND / THE CDF TO THIS FIELD INTO THE Q-BLOCK, AND THEN DOES A GET DENSITY / TO ESTABLISH THE DENSITY OF THE DRIVE SO [PASSED TO IT. / /***************************************************************************** GTDENS, XX DCA DRVDSP / PUT DRIVE NUMBER WHERE IT CAN BE DISPALYED /A018 TAD DRVDSP / GET DRIVE NUMBER BACK INTO AC /A018 JMS CUPDRS / GO PUT DRIVE NBR AND CDF INTO Q-BLOCK TAD (RXEDN+4000) / GET FUNCTION CODE FOR GET DENSITY DCA QUQBLK+RXQFNC / PUT IT INTO Q-BLOCK JMS QURX / GO ESTABLISH THE DENSITY OF THE DRIVE SMA CLA / ERROR RETURN? /C018 JMP I GTDENS / RETURN JMS I TOPSC / GO ERASE AND DISP '--COPY DOCUMENT--' /A018 JMS ERRWIN / GO SEE IF ERROR ON WINNIE & DISPLAY MS/A039 / ELSE RETURN HERE /A039 CIFMNU /A018 JMS I IOACAL /A018 0 /A018 YNAD / YOU NEED A DISKETTE IN DRIVE X. PUT A DISKETE ETC /A018 1505 /A018 DRVDSP, 0 / DRIVE NUMBER TO BE DISPLAYED /A018 JMS APRORG / "AND PRESS RETURN OR GOLD MENU /A037 JMS MVCPIN /A018 JMS KBRD /A018 JMS COPOVR /A018 JMP GTDENS+2 /A018 /DISPLAYS TYPING "" HAS NO MEANING HERE /CALLED BY: / JMS NOMEAN / GO READ INPUT AGAIN NOMEAN, XX NMNDSP, JMS RBELL /RING BELL DCA INBUF+17 / CUTOFF LENGTH OF ERROR MESSAGE /A024 CIFMNU /DISPLAY TYPING "" HAS NO MEANING HERE JMS I IOACAL 0 NMEAN TWOSIX, 2605 INBUF+1 /WE NEED THE +1 TO MOVE ONE ADDRESS BEYOND /THE BUFFER SIZE IN FIRST LOCATION JMS RTNWT /WAIT FOR RETURN JMP NMNDSP /NO RETURN COMPLAIN AGAIN TAD TWOSIX /RETURN SO ERASE SCREEN JMS ERASE JMP I NOMEAN /RETURN TO CALLER TO ASK AGAIN /************************************************************************* / / A COPY ROUTINE TO COPY FILE NAMES FROM ONE AREA TO ANOTHER / /**************************************************************************** CPYOVR, XX JMS CUCOPY CUPBUF CDFMYF CUPFNM CDFMYF STRLEN-1 / LENGTH OF MOVE JMP I CPYOVR / GO BACK CTDIN1, TAD TODRV / TAD OUTPUT DRIVE NUMBER /A018 JMS GTDENS / ESTABLISH DEN AND DRIVE /A018 JMS CSTUFF / SUBROUTINE INVENTED TO SAVE SPACE /A037 DCA SVODCN / SAVE IT FOR FUTURE USE TAD I (MUBUF+MNFNO) / GET THE FILE ID DCA SVOFNO / SAVE IT FOR FUTURE USE CDFMYF / GET BACK TO THIS FIELD TAD STATUS / GET THE STATUS SMA CLA JMP CTDDIN / GO TELL USER DOC ALREADY EXISTS JMS TSTSZ / GO SEE IF THERE IS ROOM FOR THE DOCUMENT JMP TSMLL / THE OUTPUT DOESN'T HAVE ENOUGH ROOM JMS ADRCRT / CREATE THE OUTPUT DOCUMENT JMP CRERR / ERROR ON CREATE, PROCESS /D036 DCA SOTFL / STORE IN DOC NUMBER IN SOTFIL DCA VALUE / STORE IN DOC NUMBER IN VALUE TAD CUPFNO / GET THE DRV+FILE NO OF FILE JUST CREATED DCA SVOFNO / PUT IT WHERE EVERYBODY CAN GET AT IT JMP DOIO / GO COPY DOCUMENT /-------------------- PAGE /IF CALLED WITH ZER0 IN AC THIS ROUTINE CHECKS SIZE OF SPACE ON RESULT /FLOPPY AGAINST SIZE OF INPUT FLOPPY + 8 BLOCKS /OTHERWISE AC CONTAINS SIZE OF INPUT DOC TO ADD TO TOTAL SPACE NEEDED ON RESULT /FLOPPY WHEN WRITING TO TOP OR BOTTOM ON THE RESULT DRIVE /IF THERE IS ENOUGH SPACE ON RESULT FLOPPY TO ACCOMMODATE OUTPUT PROGRAM /CONTINUES. TSTSZ, XX TAD OPTION / GET THE OPTION THE USER WANTED SMA CLA / WAS IT AN OVERWRITE OPTION? JMP NOTOVR / NOT AN OVERWRITE TAD SVOFNO / WE NEED TO GEWT THE SIZE OF THE OUTPUT JMS GTFLSZ / GO GET SIZE OF TOUTPUT DOCUMENT CIA / MAKE IT NEGATIVE DCA OVRSPCE / SAVE IT JMP GTIFSZ / GO GEET THE INPUT FILE SIZE /A014 NOTOVR, TAD (SREXT) /THIS IS EXTRA SPACE REQUIRED IF DOC IS TO BE /M014 / EDITED AFTERF BEING COPIED /C014 DCA OVRSPCE /A014 GTIFSZ, /A014 TAD SVIFNO /PUT INPUT DRIVE AND DOC NUMBER INTO AC JMS GTFLSZ / GO OPEN THE FILE FOR READING TO GET FILE SIZE DCA LSTSIZ /STORE IN MY FIELD TAD TODRV /TAD OUTPUT DRIVE NUMBER JMS CUPDRS /SET DRIVE NUMBER FOR QURX TAD (RXESP /GET SPACE LEFT ON DISKETTE DCA QUQBLK+RXQFNC JMS QURX CLA /THIS ERASES ANY ERROR RETURN FROM QURX TAD OVRSPCE /ADD RESULT DOC SIZE (OR 0 FOR T, A, OR CREATE) TAD LSTSIZ /ADD THE SIZE OF INPUT DOC CIA /NEGATE TAD QUQBLK+RXQSPC /ADD FREE SPACE SPA CLA /IF RESULT IS NEGATIVE INPUT IS GREATER THAN JMP I TSTSZ /SPACE AVAILABLE ON FLOPPY ERROR RETURN ISZ TSTSZ /ELSE THERE IS ENOUGH SPACE INCREMENT FOR OK RETURN JMP I TSTSZ TSMLL, JMS TOSMAL / GO DISPLAY MESSAGE AND ASK WHAT TO DO TODRV / FILE NUMBER TO BE DISPLAYED INBUF+1 / FILE NAME JMP CUGSP / HE TYPED RETURN, GO ASK FOR NEXT ONE NMNING, / NO MEANING TO WHAT HE PUT IN JMS MVINPT / COPY INPUT FROM MENU FIELD /A037 JMS NOMEAN / TYPING "" HAS NO MEANING HERE /A037 JMP CUGSP / GO ASK AGAIN MVNBR, / THIS SETS UP A NUMBERED OUTPUT DOC FOR FILNAM TO READ JMS ASKNM / GO ASK USER IF HE WANTS TO NAME OR NUMBER DOC JMP GOLDMU / HE HIT GOLD MENU JMP MVNBR2 / HE HIT RETURN, GO SEE IF ITS A COPY SOME JMP MVNBR1 / HE ENTERED A NAME OR A NUMBER MVNBR2, / CHECK TO SEE IF WE'RE DOING A COPY SOME AC7776 / GET A MINUS 2 TAD COPYTP / GET THE COPY TYPE OPERATION SZA CLA / IF ZERO, THEN DOING SOME /C007 JMP DONBRD / NOT DOING COPY SOME, GO DO NUMBERED DOC /A007 TAD SIGNL / GET SIGNAL THAT HE WANTS TO COPY 1=YES /A007 SNA CLA / SKIP IF YES /A007 JMP CUGSP / CONTINUE TO NEXT FILE DCA SIGNL2 / TURN SIGNAL OFF FOR NEXT TIME /A007 DONBRD, /A007 JMS GTNBR / GO GET A NUMBER OFF THE OUTPUT DISKETTE MVNBR1, JMS COPOVR / GO COPY THE NUMBER TO THE INBUF AREA FOR FIXNAM TAD TODRV / GET THE NUMBER OF THE DRIVE WE'RE COPYING TO TAD OSXTY / MAKE IT AN ASCII NUMBER JMS FIXNAM / GO SET UP FOR READ JMP CTDIN2 / GO BACK AND READ IT /************************************************************************ / / THIS CODE OPENS A FILE FOR READING ONLY. / PASS IT THE DRIVE AND FILE NUMBER IN THE AC. / THE DRIVE NUMBER MUST BE IN THE HIGH ORDER 4 BITS OF THE AC. / THE FILE NUMBER MUST BE IN THE LOW ORDER 8 BITS OF THE AC. / JUST CALL IT AS FOLLOWS: / JMS OPENRD / WHEN IT RETURNS, THE FILE WILL BE OPEN FOR READING. / /*************************************************************************** OPENRD, XX CDFMYF / ENSURE DATA FIELD IS TO THIS FIELD CIFFIO / CHANGE INSTRUCTION FIELD TO IO FILEIO XRDFIN JMP I OPENRD / RETURN /**************************************************************************** / / THIS CODE WILL COPY OVER THE INFORMATION IN THE 1ST HEADER BLOCK / THAT IS RELEVANT TO THE DOCUMENT, SUCH AS THE CREATION DATE, THE / SETTINGS FOR THE DOCUMENT'S PRINT MENU, ETC. THIS CONSISTS OF THE / 35 (DECIMAL) WORDS BEGINNING AT THE SIXTH WORD OF THE HEADER / BLOCK EXCEPTING WORD ELEVEN WHICH IS THE DOCUMENT NUMBER. SINCE / IT IS UNLIKELY THAT THE DOCUMENT NUMBER WILL BE THE SAME ON THE / OUTPUT DISKETTE AS IT IS ON THE INPUT DISKETTE, THE OUTPUT / DOCUMENT NUMBER IS PUT OUT AFTER MOVING THESE 35 WORDS. / /****************************************************************************** CPHDRI, XX CLA TAD SVOFNO / GET THE FILE ID (DRV-DOC NBR) AND P377 / AND OUT THE DRIVE NUMBER TO GET ONLY DOC NBR DCA SVODCN / STORE IT IN ORDER TO RESTORE IT TAD HDRBLK / GET HDR BLK # FROM WHERE I STASHED IT DCA QUQBLK+RXQBLK / PUT IT INTO THE Q-BLOCK TAD FROMDR / GET THE INPUT DRIVE NUMBER JMS CUPDRS / GO PUT THE DRIVE NUMBER AND CDF INTO Q-BLOCK TAD (CUB1) / GET THE BUFFER ADDRESS DCA QUQBLK+RXQBAD / PUT IT INTO THE Q-BLOCK TAD (RXERD) / GET THE FUNCTION CODE (LOGICAL READ) DCA QUQBLK+RXQFNC / PUT IT INTO THE Q-BLOCK JMS QURX / GO DO THE I-O CLA / HEADER IS NOW AT CUB1 TAD (CUB1+5) / GET THE BEGINNING OF AREA TO MOVE DCA X1 / PUT THIS ADDRESS INTO INDEX 1 TAD M44 / GET A MINUS 44 (OCTAL)/36 (DECIMAL) DCA T1 / PUT IT WHERE WE CAN ISZ IT FOR LOOP CTL TAD FOUR / GET THE NUMBER FOUR (WHERE WE'RE COPYING TO IN HDR DCA T2 / PUT IT WHERE WE CAN ISZ IT CPDNXT, TAD I X1 / GET THE VALUE OF THE WORD TO BE MOVED MQL / PUT IT INTO THE MQ TAD T2 / GET THE WORD NUMBER TO PUT IT TO IN NEW HDR CIFFIO FILEIO XHDRPT ISZ T2 / BUMP UP THE WORD NUMBER WE'RE COPYING TO ISZ T1 / ARE WE ALL DON? JMP CPDNXT / GO DO THE NEXT ONE SINCE WE'RE NOT DONE CLA TAD SVODCN / GET THE OUTPUT DOCUMENT NUMBER MQL / PUT IT IN MQ SO WE CAN PUT IT OUT TO THE NEW HDR / BECAUSER WE OVERWROTE IT WITH THE INPUT DOC NBR ABOVE TAD NINE / GET THE WORD NUMBER WHERE DOC NBRS GO IN HEADER CIFFIO FILEIO XHDRPT JMP I CPHDRI / RETURN /THIS ROUTINE IS FOR "COPY ONE" TO READ THE HEADER BLOCK # OF THE DOCUMENT /ABOUT TO BE COPIED. HDR BLK # IS READ FROM THE HOME BLOCK BUFFER AT DCNBRS /THEN PLACED IN HDRBLK (PAGE 0), FOR LATER USE BY CPHDRI. / FIXONE, XX TAD FLNBRS / GET ADDRESS WHERE FILE NBRS ARE /C003 TAD SVIDCN /MAKE PTR FROM DOC # DCA T1 CDFBUF /A003 TAD I T1 /FIND HDR BLK # DCA HDRBLK CDFMYF /A003 JMP I FIXONE /------------------- PAGE /************************************************************************* / / THIS ROUTINE WILL CHECK TO SEE IF THE SYSTEM DISKETTE IS MOUNTED / AND WILL RETURN TO THE NEXT SEQUENTIAL INSTRUCTION IF IT IS. / OTHERWISE, IT WILL DIPLAY A MESSAGE TO MOUNT THE SYSTEM DISKETTE / AND PRESS RETURN,AND THEN CHECK TO SEE IF THE SYSTEM DISKETTE / IS MOUNTED, ETC, ETC. / /*************************************************************************** REPLC, XX / ROUTINE TO ASK USER TO REPLACE THE SYTEM DISKETTE REPLC1, JMS GTDKID / GO GET THE KEY-ID OF THE DISK ON DRIVE 0 CIA / SET IT UP FOR COMPARE TAD DISKID / GET KEY ID PREVIOUSLY GOTTEN SNA CLA / IF ZERO HERE, IT ISN'T THE SYSDTEM DISKETTE JMP I REPLC / RETURN, SYSTEM DISKETTE IS MOUNTED JMS I TOPSC / GO ERASE AND DISP '--COPY DOCUMENT--' /A018 CIFMNU JMS I IOACAL 0 RPLACE /ASK USER FOR NEW DISKETTE FOR RESULT DOC 1505 /DISPLAY REPLACE PROMPT ON LINE 12 COLUMN 5 JMS PRETURN / AND PRESS RETURN JMS RTNWT / GO GET A RETURN REPLY ONLY JMP REPLC1 / USER HIT SOMETHING OTHER THAN RETURN, GO DIPLAY JMP REPLC1 / USER HIT RETURN, GO SEE IF SYSTEM DISKETTE IS IN PLACE /******************************************************************************* / / THIS ROUTINE WILL GET THE FULL NAME OF THE DOCUMENT ON A COPY ONE / OPERATION. THE ROUTINE 'FILNAM' IN MAIN MENU WILL READ THE FILE NAME / FROM OUT OF THE INDEX FILE, BUT IF THE USER ONLY PUTS IN A PARTIAL / PART OF THE NAME, IT LEAVES ONLY THE PARTIAL PART OF THE NAME IN THE / BUFFER AREAS. THIS RESULTS IN COPYING THE DOCUMENT WITH ONLY THE / PARTIAL NAME ON THE OUTPUT INDEX FILE. TO GET AROUND THIS PROBLEM, / THIS ROUTINE WAS WRITTEN. HERE THE FULL NAME OF THE DOCUMENT IS READ / INTO THE BUFFER AREAS SO THAT THE ENTIRE NAME WILL BE WRITTEN OUT TO / THE OUTPUT DISKETTE'S INDEX FILE. / JUST CALL THE ROUTINE, NO PARAMETERS TO PASS... / /****************************************************************************** GTNAM, XX AC7777 / ARE WE DOING A COPY OINE? TAD COPYTP / GET THE COPY TYPE 1=COPY ONE SZA CLA / YES, GO GET FULL NAME JMP I GTNAM / RETURN TAD SVIDCN / GET THE DOCUMENT NUMBER OF INPUT FILE DCA DCNBR / PUT IT WHERE 'DTNAM' CAN GET IT TAD FROMDR / SIGNAL 'DTNAM' THAT WE'RE DOING FROM DRIVE JMS DTNAM / GO DETERMINE THE NAME OF THE FILE TAD FROMDR / GET THE FROM DRIVE NUMBER TAD OSXTY / MAKE IT AN ASCII NUMBER JMS FIXNAM / GO SET IT UP FOR WRITING IT JMP I GTNAM / RETURN /CALLED WITH POSITION OF CURSOR IN AC ERASE, XX DCA CRPOS /STORE POSITION FOR CURSOR CIFMNU JMS I IOACAL 0 PSCR /STRING TO ERASE SCREEN AND POSITION CURSOR CRPOS, 0000 /CURSOR POSITION PASSED IN AC FROM CALLER JMP I ERASE /RETURN TO CALLER /A018 ADDED FOR SPACE REASONS. THIS ROUTINE ERASES THE SCREEN AND PUTS OUT /A018 THE '---COPY DOCUMENT--' HEADER ONTHE SCREEN PTOPSC, /A018 XX /A018 CLA / ERASE WHOLE SCREEN, I.E. FROM ZERO /A018 JMS ERASE /A018 CIFMNU JMS I IOACAL / PUT OUT '--COPY DOCUMENT--' 0 CPY 0 JMP I PTOPSC /A018 /CALLED BY JMS ORGOLD / VALUE FOR FIRST WORD ARGUMENT (EITHER ORAR FOR OR PRESS GOLD / M OR NARG FOR PRESS GOLD M) ORGOLD,XX /DISPLAYS (OR) PRESS GOLD M TO RECALL MENU CLA TAD I ORGOLD DCA FWARG /STORE ARGUMENT IN FIRST WORD ARGUMENT ISZ ORGOLD /NOTE AC MUST BE 0 HERE TO ENSURE GTDKID WILL READ SYSTEM FLOPPY CIFMNU JMS I IOACAL 0 DOGM /ADDRESS OF OR TYPE GOLD M TO RECALL MENU 2505 /POSITION OF LINE FWARG, 0 /FIRST WORD OF PROMPT EITHER "OR" OR " " JMP I ORGOLD /RETURN TO CALLER /***************************************************************************** / / THE ROUTINE BELOW COPIES THE FILE CPYFLE, XX JMS CPHDRI / GO COPY OUT HDR INFO (PRINTER CTL INFO, ETC) CPYNXT, JMS RDNXCH / GO GET A CHARACTER TO COPY JMP CPFLEX / ALL DONE COPYING DCA CPYCHR / STORE THE CHARACTER JUST GOT CDFSYS TAD I HLTFLG / DID THE USER PRESS GOLD HALT? CDFMYF SZA CLA / NO HE DIDN'T JMP CPFLHT / YES HE DID, GO CLOSE AND CONTINUE TAD CPYCHR / GET CHARACTER TO COPY JMS PDXCH / GO PUT CHAR OUT JMP CPYNXT CPFLEX, ISZ CPYFLE / NORMAL RETURN CPFLHT, / GOLD HALT WAS HIT/ ABNORMAL RETURN CIFFIO / CLOSE THE FILE FILEIO XDSKCL CLA /A008 DCA QUQBLK+RXQFNC /SET 0 FNCTION CODE(WRITE DIR IF NEC./A008 JMS QURX /DO IT /A008 CLA / INSURE THAT WE'RE DOING DRIVE ZERO /M029/A028 JMP I CPYFLE / GO BACK ALL DONE /************************************************************************* / / THIS CODE IS THE LAST PART OF THE CODE THAT PROCESSES COPY SOME / AND COPY ALL. PROCESSING COMES HERE WHEN ALL THE NAMED / DOCUMENTS HAVE BEEN PROCESSED, AND NOW ALL THAT NEEDS TO BE / DONE IS TO COPY UNNAMED DOCUMENTS. FOR A COPY SOME, IT WILL / DISPLAY A MESSAGE ASKING WHETHER THE USER WISHES TO COPY / THE NUMBERED DOCUMENT. FOR A COPY ALL, IT SIMPLY GETS THE / NUMBERED DOCUMENT AND COPIES IT. / /************************************************************************** CPYSL3, JMS GTFNO / GO GET A FILE NUMBER (UNNAMED) JMP GOLDMU / NO MORE OF THEM DCA FILNBR / PUT IT WHERE IT CAN BE DISPALYED TAD FILNBR / GET THE FILE NUMBER TO SAVE IT DCA DCNBR / SAVE IT ON PAGE ZERO SO OTHERS CAN GET IT DCA SIGNL2 / TURN OFF SIGNAL THAT USER WANTS TO COPY /A007 DCA SIGNL3 / TURN OFF SIGNAL THAT USER GAVE NAME TO DOC /A007 TAD FILNBR JMS MKNBR / GO SEE IF FIEL HAS BEEN DONE JMP CPYSL3 / IT HAS, GO GET ANOTHER ONE TAD FILNBR / GET THE NUMBER IN THE AC CPYSL4, JMS DONBR / GO CONVERTY IT TO ASCII JMS COPOVR / GO COPY IT TO INBUF AC7776 / CHECK TO SEE IF WE'RE DOING A COPY SOME TAD COPYTP SZA CLA / YES WE ARE JMP CUGSP1 / NO WE AREN'T TAD FILNBR / GET THE FILE NUMBER /A037 JMS CPWISH / GO DISPLAY DO YOU WISH 0 / NO NAME ISZ SIGNL2 / SIGNAL THAT USER WANTS TO COPY /A007 JMP CUGSP1 / GO ASK FILNBR, 0 / SPOT FOR THE FILE NUMBER /M039 CODE MOVE HERE IN SPACE WAR /****************************************************************************/M039 APRORG, XX / DISPLAY "AND PRESS RETURN" /A037/M039 / "OR PRESS GOLD MENU ... /A037/M039 JMS PRETURN / /A037/M039 JMS ORGOLD / /A037/M039 ORAR / /A037/M039 JMP I APRORG / RETURN /A037/M039 /---------------------- PAGE /********************************************************************** / / THIS ROUTINE WILL CHECK TO SEE IF FILES HAVE BEEN COPIED / /************************************************************************** GTFNO, XX AC7777 / GET SIGNAL THAT WE'RE DOING NUMBERS ONLY DCA SIGNL / SIGNAL CKINPT RTNE THAT WE'RE DOING NUMBERS TAD (DCNBRS / PREPARE TO SEARCH FILE TABLE /C037 DCA X0 / PUT IT INTO INDEX 0 CDFBUF /A003 GTFNO1, TAD I X0 / GET A FILE HEADER BLOCK NBR SNA / IF ZERO HERE, DOCUMENT DOES NOT EXIST JMP GTFNO2 / NO DOCUMENT, GO GO ON TO THE NEXT TAD (-1) / CHECK TO SEE IF ITS BEEN COPIED ALREADY SNA CLA / ZERO HERE MEANS IT HAS BEEN COPIED JMP GTFNO2 / HAS BEEN COPIED TAD X0 / GET THE ADDRESS OF THE HDR BLOCK NBR TAD (-DCNBRS+1) / SUBTRACT FILE TABLE BASE /C037 ISZ GTFNO / BUMP UP GOT NUMBER RETURN ADDRESS GTFNOX, CDFMYF /A003 JMP I GTFNO / RETURN TO CALLER EOF ADDRESS GTFNO2, / DONE OR NONEXISTENT, CHECK TO SEE IF AT END OF TABLE TAD X0 / GET INDEX REGISTER TAD (-DCNBRS+1) / COMPARE TO TABLE END POINT /A037 TAD MDOCFS / AND NO OF DOCS IN FILE SYSTEM /A037 SMA CLA / SKIP IF NOT DONE /A037 JMP GTFNOX / DONE, GO EXIT WITH NO ISZ, AC=0000 /A037 JMP GTFNO1 / GO LOOK AT NEXT NUMBER /A037 /**************************************************************************** / / CONTROL IS PASSED HERE WHENEVER THERE IS NO DOCUMENT ON THE INPUT DRIVE / BY THE NAME GIVEN BY THE USER TO COPY OVER TO THE OUTPUT DRIVE. IT / ASKS THE USER TO PRESS RETURN FOR ANOTHER NAME. / /****************************************************************************** NDERR, XX JMS CPYSL5 / GO SEE IF WE'RE DOING COPY ALL /C004 TAD I NDERR /PICK UP DOC NAME DCA DCNAM /STORE IT FOR ERROR MESSAGE ISZ NDERR /INCREMENT FOR RETURN CDFMNU /CHANGE TO MENU FIELD TAD I (MUBUF+MNDRV) /PICK UP DRIVE NUMBER CDFMYF /CHANGE BACK TO MY FIELD DCA DCRV /STORE IN DRIVE NUMBER FOR ERROR MESSAGE JMS I TOPSC / GO ERASE AND DISP '--COPY DOCUMENT--' /A018 NDDSP, CIFMNU JMS I IOACAL 0 NDOC ONE303, 1305 DCDEV, 0 / PTR TO "DRIVE" OR "AREA" TEXT /A039 DCRV, 0000 DCNAM, 0000 CIFMNU JMS I IOACAL 0 TARTN 2505 JMS RTNWT /WAIT FOR RETURN JMP NDDSP /NOT RETURN COMPLAIN AGAIN TAD ONE303 /RETURN ERASE SCREEN JMS ERASE DCA SIGNL / CLEAR OUT NUMBERED DOC SIGNAL JMP I NDERR /AND CONTINUE /*************************************************************************** / / A ROUTINE TO COPY THE INPUT FROM MENU FIELD TO THIS FIELD / /**************************************************************************** CPMNOV, XX JMS CUCOPY MUBUF+MNIBUF /C042 CDFMNU CUPFNM CDFMYF STRLEN JMP I CPMNOV /************************************************************************** / / ROUTINE TO CONVERT A OCTAL NUMBER TO DECIMAL AND PUT IT AT INBUF. / ENTER THE ROUTINE WITH A JMS INSTRUCTION WITH THE VALUE OF THE / NUMBER IN THE AC. UPON RETURN, THE VALUE IN DECIMAL WILL BE AT / 'INBUF+1', RIGHT JUSTIFIED. / /**************************************************************************** DONBR, XX DCA VALUE / SAVE THER OCTAL NUMBER TO BE CONVERTED TAD DPREC / GET THE PRECISION (ALWAYS 4) TAD (TENS-1) / GET THE POWERS OF TEN TABLE DCA TABLE / PUT IT HERE TO INDIRECT THRU TAD (CUPFNM-1) / GET THE ADDR WHERE THE NUMBER WILL BE PUT DCA X1 / PUT THE ADDR INTO THE INDEX REGISTER TAD DPREC / GET THE PRECISION DCA DPREC1 / STORE IT HERE TO ISZ IT DONBR1, DCA COUNT / ZERO THE COUNTER ISZ TABLE / GET THE POWER OF TEN TAD I TABLE SNA / ARE WE DONE? JMP DONBRX / YES GO BACK CMA SNA CLA ISZ DPREC1 / TURN ON SIGNIFICANCE STARTER DONBR2, TAD VALUE / GET THE OCTAL NUMBER TAD I TABLE / SUBTRACT OUT THE POWER OF TEN SPA / STILL POSITIVE? JMP DONBR3 / NO, GO CONSTRUCT THE DIGIT DCA VALUE / YES, STORE THE DECREMENTED OCTAL FOR NEXT LOOP ISZ COUNT / INCREMENT THE DIGIT OF THE DECIMAL NBR JMP DONBR2 / GO SEE IF WE'RE THRU WITH THIS DIGIT DONBR3, CLA TAD DPREC1 / GET THE SIGNIFICANCE STARTER TAD COUNT / GET THE DECIMAL DIGIT SNA CLA / IF ZERO HERE, SIGNIFICANCE HASN'T STARTED JMP DONBR1 / GO DO NEXT DIGIT TAD OSXTY / GET AN ASCII ZERO TAD COUNT / ADD IN THE BINARY NBR FOR THE DIGIT ISZ DPREC1 / SET UP SIGNIFICANCE STARTER DCA I X1 / PUT DIGIT AT INBUF JMP DONBR1 / GO DO NEXT DIGIT DONBRX, CLA DCA I X1 / NULL END OF ASCIZ STRING JMP I DONBR / RETURN COUNT, 0 / AREA TO CREATE DECIMAL DIGIT IN OCTAL DECIMAL TENS, -1000 -100 -10 -1 0 / END OF TABLE MARKER OCTAL /***********************************************************************/A012 / /A012 / DISPLAYS MESSAGE "IF YOU DO, TYPE Y AND PRESS RETURN, OR JUST /A012 / 'PRESS RETURN TO CONTINUE TO THE NEXT DOCUMENT, /A012 / /A012 /***********************************************************************/A012 MSIYDT, /A012 XX /A012 CIFMNU /M012 JMS I IOACAL /M012 0 /M012 TXCS2 / G. P. CONTROL STRING, TWO SUBSTRINGS /A037 2105 / POSITION OF 1ST SUBSTRING /A037 TXIYD / IF YOU DO PRESS Y, OF RETURN ETC, /M012 2305 /M012 TXPRCN / "PRESS RETURN TO CONTINUE TO NEXT..." /A037 JMS ORGOLD /M012 ORAR /M012 JMP I MSIYDT /A012 /------------------------ PAGE /M039 SPACE WARS MOVE /D039/**************************************************************************** /D039 /D039APRORG, XX / DISPLAY "AND PRESS RETURN" /A037 /D039 / "OR PRESS GOLD MENU ... /A037 /D039 JMS PRETURN / /A037 /D039 JMS ORGOLD / /A037 /D039 ORAR / /A037 /D039 JMP I APRORG / RETURN /A037 /**************************************************************************** PRETURN,XX /DISPLAYS "AND PRESS RETURN" CIFMNU JMS I IOACAL 0 PRTRN 2305 JMP I PRETURN /**************************************************************************** / GOLD MENU IF GOLD MENU IS TYPED, / NO MEANING IF GARBAGE KBRD, XX / RETURN IF RETURN IS TYPED, KBRD1, /A011 CIFMNU JMS I INACAL /CALL INA TO READ INPUT INBUF /LOCATION TO RECEIVE INPUT JMP GMTEST /A011 CLA MQA /MQ CONTAINS #CHARS IN BUFFER SNA CLA /IF THIS IS 0 RETURN WAS TYPED JMP I KBRD /GO BACK TO CALLER JMS NOMEAN /ELSE MUST BE INAPPROPRIATE RESPONSE COMPLAIN JMP KBRD1 /ASK AGAIN GMTEST, /A011 JMS GMTST / GO SEE WHAT KIND OF GOLD KEY WAS HIT /A011 2205 / ERASE FROM THIS LINE FORWARD /A026 JMP GOLDMU / HE HIT GOLD MENU /A011 JMP I KBRD / HE HIT RETURN AFTER MESG NOT TO HIT GOLD KEYS /A011 /CALLED WITH 0 OR 1 IN AC TO DETERMINE FROM WHICH FLOPPY THE HOME BLOCK /WILL BE READ GTDKID, XX TAD (NOP) / LOAD A NOP INSTRUCTION INTO AC /A039 DCA CRMED / & PLACE INTO CREATE ERROR IOACAL SEQUENCE /A039 / THIS MAKES "CRERR" RE-ENTRANT /A039 JMS GTDENS / GO PUT DRV NBR AND CDF INTO Q-BLOCK AND EST DENSITY TAD (CUB1) /BUFFER ADDRESS DCA QUQBLK+RXQBAD TAD (RXBDIR) /BLOCK TO READ (HOME BLOCK) DCA QUQBLK+RXQBLK TAD (RXERD /TELL QURX TO READ DCA QUQBLK+RXQFNC JMS QURX CLA /THIS CLOBBERS ANY QURX ERROR RETURN TAD CUB1+5 /INDEX TO FIFTH WORD (DISKETTE ID#) JMP I GTDKID /EXIT WITH CURRENT DISKETTE ID IN AC TOSMAL, XX TAD I TOSMAL / GET THE DRIV NUMBER DCA DISP31 / PUT IT TO BE DISPLAYED ISZ TOSMAL / BUMP UP TO THE DOCUMENT NAME TAD I TOSMAL / GET THE DOCUMENT NAME (IF ANY) DCA DISP33 / PUT IT WHERE IT WILL BE DISPLAYED TAD I DISP31 / PICK UP THE DRIVE NUMBER DCA DISP31 / PUT IT WHERE IT WILL BE DISPLAYED TSML1, JMS I TOPSC / GO ERASE AND DISP '--COPY DOCUMENT--' /A018 CIFMNU JMS I IOACAL 0 NERD / NOT ENOUGH ROOM ETC 1505 DSTDEV, 0 / PTR TO "DRIVE" OR "AREA" TEXT /A039 DISP31, 0 /DRIVE NUMBER CLA TAD I DISP33 / CHECK FOR DOCUMENT NAME SNA CLA / IF ZERO ADDRESS THEN NO NAME FOR DOCUMENT JMP NONAM / NO NAME FOR DOCUMENT CIFMNU JMS I IOACAL 0 DCNAME 1705 DISP33, 0 / DISPLAY NAME OF DOCUMENT NONAM, CIFMNU JMS I IOACAL 0 TXCS1 / G. P. ONE SUBSTRING /A037 2405 / POSITION /A037 TXPRCN / SUBSTRING "PRESS RETURN TO CONINUE..." /A037 JMS ORGOLD ORAR JMS MVCPIN / GO SAVE THE DOCUMENT NAME IN CASE USER WRONG /A032 JMS ASK / GO SEE WHAT HE TYPED IN JMP GOLDMU / GO BACK JMP RSTNAM / GO RESTORE THE NAME OF THE DOCUMENT /A032 ISZ TOSMAL /M032 JMP I TOSMAL / HIT FINALLY HIT RETURN RSTNAM, /A032 JMS COPOVR /RESTORE THE NAME OF THE DOCUMENT /A032 JMP TSML1 / GO DISPLAY AGIAN /M032 /***********************************************************************88 / / THIS ROUTINE DETERMINES WHAT THE USER TYPED IN WHEN ASKED / WHETHER OR NOT HE WANTS TO COPY A FILE THE NAME OR NUMBER OF / WHICH WAS PREVIOUSLY DISPLAYED ON THE SCREEN DURING A COPY / SOME OPERATION. IF THE USER TYPES THA LETTER "Y" AS THE FIRST / CHARACTER, IT WILL DO THE COPY OPERATION. IF HE TYPES RETURN, / IT WILL GO GET ANOTHER FILE NAME OR NUMBER TO DISPLAY, WITHOUT / COPYING. IF HE TYPES GOLD MENU, IT GOES TO MAIN MENU. ANY THING / ELSE IT WILL TREAT AS IF HE HIT RETURN. IF HE TYPES A GOLD KEY / OTHER THAN GOLD MENU, IT WILL GIVE HIM A LONG LECTURE ABOUT THE / USE OF GOLD KEYS AND MAKE HIM HIT RETURN. / /************************************************************************ WISHIN, XX JMS MVCPIN / GO SAVE WHAT'S IN INBUF /A022 WISHN1, CIFMNU JMS I INACAL INBUF /A027 JMP GLDKY CLA MQA / ANYTHING TYPED IN? SNA CLA / IF NON ZERO HERE THEN SOMETHING HAS BEEN TYPED JMP WISHN3 / IF ZERO, THEN RETURN WAS TYPED TAD INBUF+1 /GET WHAT WAS TYPED IN /A027 IFDEF ENGLSH < TAD (-131) / A "Y"? > IFDEF ITALIAN < TAD (-123) / A "S"? > IFDEF V30NOR < TAD (-112) / a "J" > IFDEF V30SWE < TAD (-112) / A 'J' > SNA JMP WISHN2 / YES, RETURN TO SECOND ADDRESS IFDEF ENGLSH < TAD (131-171) / A "y" ? > IFDEF ITALIAN < TAD (123-163) / A "s"? > IFDEF V30NOR < TAD (112-152) / A "j" > IFDEF V30SWE < TAD (112-152) / A 'J' > SNA JMP WISHN2 / YES, RETURN TO SECOND ADDRESS JMS NOMEAN / GO TELL HIM IT HAS NO MEANING HERE /A027 JMP WISHNR / NOT A "Y", SO TREAT IT AS IF HE HIT RETURN /C027 GLDKY, JMS GMTST / GO SEE WHAT KIND OF GOLD KEY HE HIT 2105 / ERASE FROM THIS LINE FORWARD /A026 JMP WISHN4 / HE HIT GOLD MENU JMS RBELL / GO RING THE BELL JMS MSIYDT / GO DISPLAY MESSAGE /A012 JMP WISHN1 WISHN2, ISZ WISHIN WISHNR, /A027 ISZ WISHIN / NO MEANING TO WHAT HE TYPED IN TRY AGAIN /A027 WISHN3, / TYPED RETURN ISZ WISHIN WISHN4, JMP I WISHIN /---------------------- PAGE /CALLS MENU TO READ INPUT TO DOC PROMPTS, TOA AND GO PROMPTS /CALLED BY: /JMS READMU / GOLD M DATA FIELD SET TO MY FIELD / CONTINUE PROCESSING DATA FIELD SET TO MENU FIELD / EDIT 035 CHANGED SYMBOL READ TO READLP /A035 READMU, XX READLP, CDFMYF /SET DATA FIELD TO MENU /M035 CIFMNU JMS I MNUCAL;DLMDU7 /CALL MENU CDFMNU /CHANGE DATA FIELD TO MENU TAD I (MUBUF+MNTMP3) /GET AND TEST CONTENTS OF TMP3 SZA /IF 0 THEN GOLD KEY WAS PRESSED JMP RDRTN2 /NOT GOLD KEY SO RETURN AND PROCESS INPUT TAD I (MUBUF+MNSYSA) /WAS GOLD KEY TO GET IT TAD (4000) /SET FIRST BIT TO 1 BECAUSE MENU STRIPS IT OFF CDFMYF /CHANGE DATA FIELD TO MINE JMS GMTST /PROCESS GOLD KEY 2105 / ERASE FROM HERE /A026 JMP RDRTN1 /GOLD M RETURN TAD DOCSIG / DID 'DTAO' CALL THIS ROUTINE? /A023 SMA / YES, THEN RETURN TO DTAO /A023 JMP RDRTN3 / NO, NORMAL PROCESSING /A023 AC7776 / SIGNAL THAT WE'RE COMING FROM HERE /A023 JMP RDRTN2 / RETURN TO DTAO /A023 RDRTN3, /A023 JMS APRORG / "AND PRESS RETURN OR GOLD MENU /A037 JMP READLP / GOLD GARBAGE, READ INUT AGAIN /M035 RDRTN2, ISZ READMU / GOLD M EXIT RDRTN1, JMP I READMU / CONTINUE EXIT /CALLED BY JMS GMTST;GOLD M;GOLD KEY NOT GOLD M GMTST, XX / TEST TO SEE IF GOLD KEY TAD (-EDMENU) /SEE IF GOLD M SNA CLA JMP GMRTN2 /C026 GMERDSP, TAD I GMTST /C026 /C016 JMS ERASE JMS RBELL CIFMNU JMS I IOACAL 0 TRYAGN 2205 /C026 2305 2405 2605 JMS RTNWT / WAIT FOR THE RETURN JMP GMERDSP / NOT RETURN GO COMPLAIN TAD I GMTST /C026 /C016 JMS ERASE ISZ GMTST /A026 GMRTN2, ISZ GMTST GMRTN1, JMP I GMTST /GO BACK /D44 *************************************************************************** /D44 /D44 A ROUTINE THAT WILL COMPARE TWO STRINGS OF CHARACTERS TO SEE IF THEY /D44 ARE EQUAL. /D44 THE ROUTINE SHOULD BE CALLED AS FOLLOWS: /D44 JMS COMPST /D44 ADDRESS OF THE FIRST STRING OF CHAR TO BE COMPARED /D44 ADDRESS OF THE 2ND STRING TO BE COMPARED /D44 RETURN POINT IF THEY DON'T MATCH /D44 RETURN POINT IF THEY DO MATCH /D44 THE FIRST STRING IS THE CONTROLLING STRING. IT MUST HAVE AS ITS LAST /D44 WORD A NULL TO STOP THE COMPARE. IF THE 2ND STRING HAS A NULL CHARACTER /D44 BEFORE THE ROUTINE REACHES THE NULL CHARACTER IN THE FIRST STRING, /D44 IT WILL RETURN A NON-MATCHING CONDITION. IF ALL THE CHARACTERS THAT /D44 PRECEDE THE NULL CHAR IN THE FIRST STRING MATCH THE CHARACTERS OF THE /D44 SECOND STRING, THEN A MATCH CONDITION IS RETURNED. /D44 /D44 ***************************************************************************** /D44 / This routine was never called. How about that. /D44 /D44 COMPST, /D44 XX /D44 AC7777 / DECREMENT FOR INDEXING /D44 TAD I COMPST / GET THE ADDR OF THE FIRST STRING /D44 DCA X1 / INTO INDEX 1 /D44 ISZ / POITN TO THE NEXT STRING ADDRESS /D44 AC7777 / DECREMENT FOR INDEXING /D44 TAD I COMPST / GET ADDRESS OF 2ND STRING /D44 DCA X2 /SET IT UP IN INDEX 2 /D44 ISZ / BUMP UP TO NO MATCH RETURN POINT /D44 COMPS1, /D44 TAD I X1 / GET CHAR FROM 1ST STRING /D44 SNA / IF ZERO, WE'RE ALL DONE /D44 JMP COMPSX / GO BUMP UP TO MATCH RETURN AND GO BACK /D44 CIA / COMPLEMENT FOR COMPARE /D44 TAD I X2 / GET CORRESPONDING CHAR FROM 2ND STRING /D44 SZA CLA / IF ZERO, THEY MATCH /D44 JMP I COMPST / IF NOT THEY DO'T, GO BACK /D44 JMP COMPS1 / GO GET ANOTHE RCHAR AND DO IT OVER AGAIN /D44 COMPSX, /D44 ISZ / BUMP UP TO MATCH RETURN /D44 JMP I COMPST / RETURN JMP CSTUFF, XX / A SUBROUTINE OF COMMON CODE /A037 / I DON'T HAVE TIME TO FIGURE OUT /A037 / EXACTLY WHAT THIS DOES RIGHT NOW /A037 CLA IAC MQL JMS STTMPS / GO DO THE SIGALING JMS READMU / GO READ IT JMP GOLDMU DCA STATUS / STORE AC IN STATUS -1 = NONEXISTENT DOCUMENT TAD I (MUBUF+MNDOCN) / GET THE DOCUMENT NUMBER JMP I CSTUFF /A037 /*************************************************************************** / / THIS ROUTINE WILL DETERMINE WHETHER OR NOT THERE IS FILENAME IN THE / INDEX DOCUMENT FOR A DOCUMENT NUMBER THAT IS AT LOCATION 'DCNBR' / ON A DRIVE PASSED TO IT IN THE AC. IF IT DOES NOT FIND SUCH A / DOCUMENT NAME IT WILL RESTORE THE FILE NUMBER AT 'INBUF' IN ASCII. / IF IT FINDS THE NAME, IT WILL PUT IT AT 'INBUF'. / /****************************************************************************** DTNAM, XX BSW / POSITION DRVE NUMBER IN THE UPPER SIX BITS CLL RTL / SET DRIVE NUMBER IN IT'S PLACE FOR RDFINI IAC / SET TO READ FILE ONE (INDEX FILE) JMS OPENRD / GO OPEN THE FILE FOR READING DTNAM1, JMS GTLIST / GET THE NAME AND NUMBER OF A FILE ON THE INDEX JMP DTNAM2 / END OF FILE JUMP CIA / GOT A NUMBER, COMPLEMENT IT FOR COMPARE TAD DCNBR / ADD IN THE NUMBER WANTED SZA CLA / THEY'RE EQUAL WE GOT IT JMP DTNAM1 / GO SEE IF THE NEXT ONE IS WHAT WE WANT DCA SIGNL / TURN OFF SIGNAL THAT SAYS DOC HAS NO NAME JMP I DTNAM / GO BACK DTNAM2, JMS COPOVR / GO MOVE THE FILENAME TO INBUF /C013 JMP I DTNAM / ALL DONE /********************************************************************** / / THIS IS A ROUTINE THAT GETS THE SIZE OF A DOCUMENT / YOU MUST PASS THE DRIVE-FILE NUMBER IN THE AC / DRIVE NUMBER IN THE UPPER 4 BITS / FILE NUMBER IN THE BOTTOM 8 BITS / /************************************************************************* GTFLSZ, XX JMS OPENRD / GO OPEN THE DOCUMENT PASSED IN THE AC CDFFIO / CHANGE DATA TO FILE IO FIELD TAD I (RDFSIZ) / GET THE SIZE OF THE FILE CDFMYF JMP I GTFLSZ /**************************************************************************** / / HMBLCK -- GET THE HOME BLOCK OF THE INPUT DISKETTE INTO MEMORY / COPY NUMBER OF DOCUMENTS IN FILE SYSTEM TO NDOCFS / /******************************************************************************* HMBLCK, XX AC7777 / GET MINUS 1 TO SEE IF THE HOME BLOCK TAD HBLSIG / HAS BEEN READ ALREADY SNA CLA / IF NOT ZERO, THEN IT HASN'T BEEN READ JMP I HMBLCK / IT HAS BEEN READ, RETURN TAD FROMDR JMS GTHMBL / GO GET IT INTO MEMORY CUB1 / BUFFER ADDRESS ISZ HBLSIG / SET SIGNAL THAT THE HOME BLOCK HAS BEEN READ / NOW MOVE IT INTO ITS PERMANENT LOCATION TAD I (CUB1+11) / GET #BLOCKS IN FILE SYSTEM /A037 DCA MDOCFS / SAVE AS A HANDY NEGATIVE NUMBER /A037 TAD MDOCFS / /A037 CIA / /A037 DCA NDOCFS / AND AS A HANDY POSITIVE NUMBER /A037 TAD NDOCFS / AND FOR THE COPY ROUTINE /A037 DCA HMBLT1 / SAVE IN CUCOPY CALL /A037 JMS CUCOPY CUB1+12 / COPY OVER THE FILE HEADER BLOCKS CDFMYF DCNBRS / AREA WHERE IT IS CDFBUF HMBLT1, 0 / NUMBER OF BLOCKS IN FILE SYSTEM /A037 / IS THE NUMBER OF WORDS TO COPY /A037 JMP I HMBLCK / RETURN /------------------ PAGE /************************************************************************ / / ROTUINE TO DISPLAY MESSAGE TO REMOVE THE SYSTEM DISKETTE / AND REPLACE WITH THE DISKETTE TO BE COPIED TO OR FROM / /************************************************************************** DISP1, XX DCA DISP11 / PUT MESSAGE INTO CALL LIST DISP10, /A018 JMS I TOPSC / GO ERASE AND DISP '--COPY DOCUMENT--' /A018 CIFMNU JMS I IOACAL 0 SYSTM / PRINT 'PLEASE REMOVE THE SYSTME D ISKEETE FROM LEFT 1305 / CURSOR POSITION CIFMNU JMS I IOACAL 0 AITDT 1505 CIFMNU JMS I IOACAL 0 DISP11, 0 / PLACE FOR MESSAGE ADDRESS IFDEF ENGLSH <1536> IFDEF ITALIAN <1532> / CURSOR POSITION IFDEF V30NOR <1536> IFDEF V30SWE <1536> JMS APRORG / "AND PRESS RETURN OR GOLD MENU /A037 JMS ASK / GO FIND OUT WHAT HE TYPED IN JMP GOLDMU / GO BACK TO MAIN MENU JMP DISP10 / GO DISPLAY MESSAGE AGAIN JMP I DISP1 / RETURN /*********************************************************************** / / THIS ROUTINE WILL READ WHAT THE USER TYPES IN, AND / A) IF HE TYPED RETURN, IT WILL RETURN TO NSI+2 / B) IF HE TYPES GOLD MENU, IT WILL RETURN TO NSI / B) IF HE TYPES A GOLD KEY THAT IS NOT GOLD MENU IT WILL.. / 1) RING THE BELL / 2) GIVE HIM A MESSAGE TO NOT USE THOSE KEYS / 3) TELL HIM TO TRY AGAIN TIL HE GETS IT RIGHT / C) IF HE TYPES ANYTHING ELSE IT WILL... / 1) RING THE BELL / 2) DISPLAY WHAT HE TYPED AND TELL HIM IT HAS NO MEANING / 3) GO BACK AND ASK HIM TO TYPE SOMETHING AGAIN / /***************************************************************************** ASK, XX / ASK USER FOR A "CARIAGE RETURN" OR "GOLD MENU" JMS MVCPIN / SAVE THE INBUF BUFFER AT CUPFNM /A037 CDFMYF CIFMNU JMS I INACAL / READ WHAT HE TYPES IN INBUF JMP GMKEYT / HE TYPED A GOLD KEY, GO SEE IF ITS GOLD M CLA MQA / SEE IF HE TYPED ANY CHARACTERS IN SZA CLA / IF 0 CHARACTERS THEN HE TYPED RETURN JMP ASK3 / GO TELL HIM ITS GARBAGE / NICE FELLOW TYPED RETURN SO.. ISZ ASK / INCREMENT PAST THE GOLD MENU RESPONSE RETURN ASK4, ISZ ASK / INCREMENT PAST THE NO MEANING RETURN JMS COPOVR / RESTORE THE INBUF BUFFER FROM CUPFNM /A037 JMP I ASK / AND RETURN THERE. ASK3, / GO TELL HIM THAT HIS GARBAGE IS NONSENSE JMS NOMEAN / TYPING 'X' HAS NO MEANING JMP ASK4 / GO BUMP ONCE AND RETURN GMKEYT, / GO SEE WHAT SORT OF GOLD KEY HE TYPED JMS GMTST / THIS ROUTINE OUTPUTS A MESSAGE IF NOT GOLD MENU 2205 / ERASE SCREEN FROM THIS LINE ON /A026 JMP I ASK / HE HIT GOLD MENU, SO RETURN NSI JMP ASK4 / HE FINALLY HIT RETURN /***************************************************************************/ / ROUTINE TO GET FILE NAMES AND/OR NUMBERS FROM THE INDEX DOCUMENT / EACH TIME YOU ENTER IT YOU WILL GET THE NEXT NAME ON THE FILE. / SIMPLY CALL THE ROUTINE. / /***************************************************************************** GTLIST, XX GTNXT, /A004 TAD (INBUF+1 / GET ADDRESS OF INPUT BUFFER FOR NAME DCA INDBUF / PUT IT FOR INDIRECTING THRU JMS NMSRC / GO SEARCH FOR NMIBN / JMP LISTEF / END OF FILE RETURN TAD MSTRLN / GET LENGTH OF STRING DCA LISTCT / SET IT UP FOR LOOP CONTROLL GTLIS1, JMS RDNXCH / GO GET NEXT CHARACTER OF FILE JMP LISTEF / END OF FILE TAD MLT / LEFT ANGLE BRACKET? SNA JMP GTLIS2 / YES, THEN ALL DONE TAD PLT / RESTORE CHARACTER TAD SFTRET / CHECK FOR SOFT RETURN CHARACTER SNA / IF NOT ZERO, NOT A SOFT RETURN JMP GTLIS1 / GO GET NEXT CHARACTER TAD WWRAPB / CHECK TO SEE OF IT IS A WORD WRAP BLANK SNA / IF NOPT ZERO, THEN ISN'T A WORD WRAP BLANK JMP GTLIS1 / GO GET NEXT CAHRACTER TAD PWWRPB / RESTORE THE CHARACTER AND P177 / WE'RE ONLY INTERSTED IN THE LOWER 7 BITS TAD MSEVN / WORD WRAP CHARACTER? SNA / IF IT IS, BYYPASS IT JMP GTLIS1 / GO GET NEXT CHARACTER FROM FILE TAD SEVEN / RESTORE CHARACTER DCA I INDBUF / PUT IT AT INBUF ISZ INDBUF / UPDATE BUFFER POINTER ISZ LISTCT / UPDATE THE LIST COUNTER JMP GTLIS1 / GO DO NEXT CHARACTER GTLIS2, AC7777 / GET A MINUS 1 TAD INDBUF / SUBTRACT 1 FROM POINTER TO MAKE ASCIZ STRING DCA INDBUF / THIS CUTS OUT THE FINAL BLANK FROM NAME TAD I INDBUF / GET THE CHARACTER /A004 TAD MSPACE / IS IT A SPACE? /A004 SZA CLA / IF IT IS, GO MAKE IT A ZERO /A004 JMP GTNXT / IF NOT A SPACE, TREAT IT AS NOT FOUND /A004 TAD INDBUF / CHECK TO SEE IF LENGTH OF NAME IS ZERO/A006 TAD (-INBUF2 / NEG VALUE OF BEGINNING OF NAME /A006 SNA CLA / IF NOT ZERO, NAME IS GREATER THAN ZERO/A006 JMP GTNXT / GO GET NEXT NAME FROM INDEX FILE /A006 DCA I INDBUF / ASCIZ STRING FINAL 0 JMS NMSRC / GO SEARCH FOR <#> NMIBNO+1 / #> JMP LISTEF / END OF FILE JMS GTNUM / GO GET THE NUMBER JMP LISTEF / END OF FILE ISZ GTLIST / INCREMNT TO RETURN ADDR LISTEF, JMP I GTLIST / NORMAL RETURN IS THE BUMPED RETURN / WITH AC CONTAINING THE FILE NO / END OF FILE RETURN IS NOT BUMPED, AC=0 LISTCT=T3 / COUNTER FOR LOOP CONTROL INDBUF=T2 / WPRD TO INDIRECT THRU /******************************************************************* / / A ROUTINE TO MOVE A FILENAME FROM CUPFNM AREA TO INBUF AREA / /********************************************************************** MVCPIN, XX JMS CUCOPY INBUF+1 / TARGET AREA /M013 CDFMYF / SOURCE FIELD NBR CUPFNM / SOURCE FIELD /M013 CDFMYF / IN MY FIELD STRLEN / LENGTH OF MOVE JMP I MVCPIN / RETURN / ********************************************************************* /A039 / / WINCHK -ROUTINE TO CHECK IF SOURCE & DEST. DEVICES ARE WINNIE / AREAS AND SET UP APPROPRIATE FLAGS & TEXT POINTERS / CALLER HAS LEFT US IN MENU DATA FIELD!!!! / / ********************************************************************* /A039 WINCHK, AC0004 / MASK FOR WINNIE BIT IN MNOPTN AND I (MUBUF+MNOPTN) / GET WORD WITH WINNIE BIT SNA CLA / SKIP IF WINNIE BIT SET JMP WINCHX / ELSE JUST EXIT AC0010 / MASK FOR "DEV # 1 IS WINNIE" BIT AND I (MUBUF+MNOPTN) / AND IN THE WORD DCA WINONE / WILL BE NON-ZERO IF BIT WAS SET TAD TODRV / GET DESTINATION DEVICE # JMS ISWIN / & CHECK IF A WINNIE AREA DCA WINDST / NON-ZERO IF WINNIE TAD FROMDRV / REPEAT SEQUENCE FOR SOURCE JMS ISWIN DCA WINSRC WINCHX, JMP WINSTR / NOW GO SET THE TEXT POINTERS /----------------- PAGE /**************************************************************************** / / CONTROL IS PASSED HERE WHENEVER WE'RE DOING A COPY ALL AND THE / FILE NAME WE GOT FROM THE INPUT DISKETTE WAS NOT FOUND. THIS / SITUATION ARISES WHEN THERE IS A CORRUPTED INDEX FILE. COPY FILE'S / ROUTINES THAT READ THE INDEX FILE TO GET A FILE NAME ARE NOT SMART / ENOUGH TO REALLIZE THAT THE FILE IS CORRUPTED, AND THUS PASSES / GARBAGE AS THE FILE NAME. IT IS THEN NOT FOUND BY THE REGULAR / ROUTINES THAT READ THE INDEX FILE. WHEN THIS SITUATION ARISES, / NO MORE FILE NAMES WILL BE COPIED. THIS ROUTINE WILL MAKE IT AS IF / ALL THE FILE NAMES HAVE BEEN COPIED AND ONLY THE NUMBERED DOCUMENTS / ARE COPIED. / /****************************************************************************** CPYSL5, XX AC7775 / CHECK TO SEE IF THIS IS A COPY ALL TAD COPYTP / GET THE COPY TYPE WE'RE DOING SZA CLA / IS IT A COPY ALL? C004 JMP I CPYSL5 / IF NOT, RETURN IAC / CLEAR SIGNAL FOR MNTMP3 /A004 ISZ SIGNL / SIGNAL THAT WE'RE DOING ONLY NUMBERED DOCUMENTS NOW CDFMNU /C004 DCA I (MUBUF+MNTMP3) / TURN OFF BAD FILE INDICATOR /A004 TAD (MUBUF+MNIBUF / GET ADDR OF MENU STRING /C042 DCA I (MUBUF+MNPOS / PUT ADR OF MENU STRING INTO MENU OFFSET/C042 CDFMYF /C004 TAD DCNBR / GET THE DOCUMENT NUMBER WE'RE COPYING /C004 JMP CPYSL4 / GO COPY IT /***********************************************************************/ / / / DSPLNM -- DISPLAYS THE NAME OF THE DOCUMENT BEING COPIED / / IF THERE IS NO NAME IT DISPLAYS THE NUMBER / / ALSO DISPLAYS THE NEW NUMBER ASSIGNED ON THE DESTINATION DISC / / AND DISPLAYS THE 'COPYING BLOCK MESSAGE' / / / / REV HISTORY / / 007 GJP CREATED / / 037 HLP DISPLAY NEW NUMBER / / / /***********************************************************************/ DSPLNM, / XX / CLA / TAD SVIFNO / GET THE DRV-FILE NBR / AND P377 / STRIP OFF THE DRIVE NUMBER / DCA CPYNBR / PUT DOCUMENT NBR TO DISPLAY IT / JMS I TOPSC / GO ERASE AND DISP CIFMNU / '--COPY DOCUMENT--' / JMS I IOACAL / 0 / NOWCOP / "YOU ARE NOW COPYING DOCUMENT N" / 1115 / CPYNBR, 0 / DOCUMENT NUMBER / CLA / TAD SIGNL / SEE IF WE'RE DOING NUMBERED DOCUMENTS / SMA CLA / IF YES, THEN CHECK IF THERE'S A NAME / JMP DSPNM / IF NOT, GO DISPLAY THE NAME / TAD SIGNL3 / GET SIGNAL IF THERE IS A NAME / SNA CLA / IF NON ZERO HERE, THEN NO NAME / JMP DSPLN1 / NO NAME, GO DISPLAY NEW NUMBER /A037 DSPNM, / CIFMNU / JMS I IOACAL / 0 / DCNAME / 'XXXXXXXXXXXXX' / 1315 / INBUF+1 / NAME OF DOCUMENT / DSPLRT, DCA CHARCT / CLEAR THE CHARACTER COUNTER /M040 TAD ONE / GET A CONSTANT OF ONE / DCA BLKCNT / INIT BLOCK COUNTER / CIFMNU / JMS I IOACAL / 0 / COPCNT / DISPLAY COPYING BLOCK #001 / 1515 / JMP I DSPLNM / RETURN / /M039 SPACE WAR MOVE /D039DSPLN1, / NO NAME, SO DISPLAY THE NEW NUMBER /A037 /D039 / THE NEW NUMBER IS ALREADY AT INBUF+1 /A037 /D039 CIFMNU /D039 JMS I IOACAL /D039 0 /D039 NWNBRT / NEW NUMBER TEXT /D039 1315 / POSITION ON SCREEN /D039 INBUF+1 / BUFFER POINTER /D039 JMP DSPLRT / GO DISPLAY "COPYING BLOCK ..." /***********************************************************************/A007 / /A007 / BLOCK COUNT ROUTINE. THIS ROUTINE WILL DISPLAY THE COUNT OF /A007 / OF THE BLOCK OF THE DOCUMENT BEING COPIED. EACH TIME IT IS /A007 / ENTERED, IT WILL INCREMENT THE BLOCK COUNT AND DISPLAY IT. /A007 / /A007 /***********************************************************************/A007 DSPCNT, /A007 XX /A007 DCA CHARCT / CLEAR THE CHARACTER COUNTER /M040 ISZ BLKCNT / INCREMENT THE BLOCK COUNTER /A007 CIFMNU /A007 JMS I IOACAL /A007 0 /A007 BLOCKS /A007 IFDEF ENGLSH <1534> /A007 IFDEF ITALIAN<1532> IFDEF V30NOR <1523> /A046 IFDEF V30SWE <1523> BLKCNT /A007 JMP I DSPCNT /A007 CHARCT, 0 /M040 BLKCNT, 0 /A007 /***********************************************************************/M007 / /M007 / THIS ROUTINE WAS MOVED HERE TO MAKE ROOM ELSEWHERE. /M007 / IT MERELY PUTS A CHARACTER WHICH IS IN THE AC OUT TO /M007 / THE OUTPUT FILE. THE OUTPUT FILE HAVING BEEN PREVIOUSLY /M007 / OPEDNED FOR UPDATE. /M007 / IT WILL ALSO COUNT THE CHARACTERS BEING PUT OUT, AND GO TO /A007 / THE BLOCK COUNT DISPLAY ROUTINE WHENEVER THE CHARACTER COUNT /A007 / GETS TO 512(10), 1000(8), I.E. ONE BLOCK. /A007 / /M007 /***********************************************************************/M007 PDXCH, /M007 XX /M007 CDFMYF /M007 CIFFIO /M007 FILEIO /M007 XPUTST /M007 ISZ CHARCT / INCREMENT THE CHARACTER COUNT /M040 TAD CHARCT / GET THE CHAR COUNT /M040 TAD M512 / ADD IN MINUS 512(10)/100)(8) /A007 SMA CLA / IF MINUS, BLOCK STILL NOT FULL /A007 JMS DSPCNT / IF ZERO, THEN BLOCK IS FULL /A007 JMP I PDXCH /M007 /COPIES INPUT FROM MENU FIELD TO INBUF FOR NO MEANING PROMPT MVINPT, XX CLA JMS CUCOPY /GO COPY INPUT FROM MENU FIELD TO INBUF MUBUF+MNIBUF /ADDRESS OF FROM FOR CUCOPY /C042 CDFMNU /DATA FIELD OF FROM INBUF+1 /ADDRESS OF FOR FOR CUCOPY CDFMYF /CHANGE DATA FIELD TO MINE STRLEN /NUMBER OF WORDS TO COPY (STANDARD) JMP I MVINPT /RETURN TO CALLED /************************************************************************* / / THIS ROUTINE WILL INSERT THE NUMBER OF THE DRIVE PASSED TO IT IN / THE AC (IN ASCII) IN FRONT OF THE NAME OR NUMBER THAT THE USER / TYPED IN AT THE TERMINAL AND THEN SET DRIVE NUMBER WITH THE NAME / OR NUMBER OF THE FILE IN THE PROPER BUFFERS SO THAT THE ROUTINE / 'FILNAM' OF MENU CAN USE IT AND GET THE FILE WANTED. / /************************************************************************** FIXNAM, XX DCA CUB1 / GET BUFFER ADDR TAD PERIOD / GET A PERIOD ".' DCA CUB1+1 / PUT IT INTO BUFFER JMS CUCOPY / GO COPY OVER FILENAME/NBR FROMIN, INBUF+1 / FROM ADDR CDFMYF / FROM FIELD CUB1+2 / TO FIELD CDFMYF / TO FIELD STRLEN / LENGTH OF MOVE JMS CUCOPY / GO COPY IT BACK CUB1 / FILENAME/NMBR WITH DRV. IN FRONT OF IT CDFMYF / FROM FIELD MUBUF+MNIBUF / TO ADDR /C042 CDFMNU / TO FIELD STRLEN / STRING LENGTH JMP I FIXNAM / ********************************************************************* /A039 / / WINSTR - A CONTINUATION OF WINCHK, SETS UP TEXT STRING POINTERS /A039 / & PASSES CONTROL BACK TO ORIGINAL "CALLER" /A039 / / ********************************************************************* /A039 WINSTR, CDFMYF / BACK TO OUR FIELD /A039 TAD WINSRC / GET WINNIE SOURCE FLAG /A039 SZA CLA / SKIP IF NOT WINNIE /A039 TAD (TXTARE-TXTDRV) / IS WINNIE SET OFFSET OF AREA TEXT IN AC/A039 TAD (TXTDRV) / ADD IN POINTER TO DRIVE TEXT STRING /A039 DCA DCDEV / & PLUG DIRECTLY INTO IOACAL SEQUENCE /A039 TAD WINDST / GET WINNIE DESTINATION FLAG /A039 SZA CLA / SKIP IF NOT WINNIE /A039 TAD (TXTARE-TXTDRV) / IS WINNIE SET OFFSET OF AREA TEXT IN AC/A039 TAD (TXTDRV) / ADD IN POINTER TO DRIVE TEXT STRING /A039 DCA DSTDEV / & PLUG DIRECTLY INTO IOACAL SEQUENCE /A039 TAD WINDST / GET WINNIE DESTINATION FLAG /A039 SZA CLA / SKIP IF NOT WINNIE /A039 TAD (TXTVOL-TXTDSK) / IS WINNIE SET OFFSET OF VOLUME TEXT IN AC /A039 TAD (TXTDSK) / ADD IN POINTER TO DISKETTE TEXT STRING /A039 / & LEAVE IN AC TO BE SAVED BACK AT "WINRET" /A039 JMP WINRET / GO BACK TO ORIGINAL "CALLER" /A039 /----------------------- PAGE /*********************************************************************** / / THE SITUATION IS AS FOLLOWS: / THE NAME OF THE DOCUMENT TO BE COPIED IS ALREADY IN THE / INDEX FILE OF THE DISKETTE TO WHICH THE USER WANTS IT COPIED. / THIS CODE SETS UP THE SIGNALS TO THE MAIN MENU CODE TO ASK THE USER / WHAT HE WANTS TO DO. HE IS GIVEN THE FOLLOWING CHOICES: / 1. WRITE TO THE TOP OF DOCUMENT (MAIN MENU RETURNS A 6 IN AC) / 2. WRITE TO THE BOTTOM OF DOCUMENT(MAIN MENU RETURNS A 5 IN AC) / 3. OVERWRITE THE DOCUMENT (MAIN MENU RETURNS A 4 IN AC) / 4. BYPASS THE DOCUMENT (MAIN MENU RETURNS A 3 IN AC) / 5. RENAME THE DOCUMENT (MAIN MENU RETURNS A 2 IN AC) / / BEFORE GOING TO MAIN MENU, THIS ROUTINE WILL SET UP MNTMP4 AND MNTMP5 / TO 0 AND 1 RESPECTIVELY WHICH SIGNALS MAIN MENU TO DISPLAY THE / RIGHT QUESTIONS ASKING FOR THE ABOVE INFORMATION. / / THEN CONTROL IS PASSED TO SUBROUTINE 'DTAO', WHICH CALLS MAIN MENU / AND PUTS THE VALUE RETURNED IN THE AC BY MAIN MENU INTO 'OPTION', / THE VALUE TELLING US WHAT TO DO. / / PLEASE NOTE THAT THE VALUE AT 'OPTION' IS CHANGED BY THIS ROUTINE / TO THE VALUES GIVEN IN PARENTHESIS BELOW WHENEVER A WRITE-TO-TOP (0), / WRITE-TO-BOTTOM (1), OR OVERWRITE (-1) ARE REQUESTED. THESE LAST VALUES / ARE THE CODES WHICH ARE THE SIGNALS TO 'WPFILS' TO WRITE TO THE TOP, / BOTTOM, OR OVERWRITE THE DOCUMENT. / NOTE ALSO THAT THE VALUE 1, IS DEFAULTED TO BY SUBTRACTING -4 / (THE VALUE MAIN MENU PASSES FOR AN OVERWRITE) FORM 5 (THE VALUE MAIN / MENU PASSES FOR A WRITE-TO-BOTTOM) / /******************************************************************************* CTDDIN, / DOCUMENT ALREADY ON OUTPUT DISKETTE MQL AC0001 / SIGNAL MAIN MENU TO READ TBO JMS STTMPS / GO SET UP TO READ MAIN MENU / TAD TODRV /DRIVE TO COPY TO /A033 CIA /2'S COM /A033 TAD FROMDR /DRIVE TO COPY FROM /A033 SNA CLA / INPUT DRIVE=OUTPUT DRIVE? /A033 JMP RENAME /YES /A033 JMS DTAO / GO ASK WHAT IS WANTED AC0006 / GET A SIX TO CHECK FOR WRITE TO TOP CIA / COMPLEMENT IT TO COMPARE IT TAD OPTION / IS OPTION A WRITE-TO-TOP? SNA CLA / IF NOT, FALL THRU JMP ZOPTN / GO ZERO OPTION(SIGNAL FOR WRITE-TO-TOP) AC7776 / GET A MINUS 2 TO CHECK FOR RENAME OPTION TAD OPTION / GET OPTION TO CHECK IT SNA CLA / BYPASS JMP IF NOT RENAME JMP RENAME / GO RENAME THE DOCUMENT AC7775 / GET A MINUS 3 FOR CHECKING TAD OPTION / ADD IN THE OPTION SNA CLA / BYPASS JMP IF NOT RETURN JMP CUGSP / HE HIT RETURN AC0004 / GET A +4 TO CHECK FOR OVERWRITE CIA // CONVERT IT TO COMPARE TAD OPTION / GET THE VALUE OF OPTION SZA CLA / IS IT AN OVERWRITE? JMP SIZCK / NO, GO CHECK THE SIZE AC7777 / GET A -1, WPFILS OVERWRITE CODE ZOPTN, DCA OPTION / PUT IT WHERE EVERYONE CAN GET AT IT SIZCK, JMS TSTSZ / GO SEE IF THERES ROOM ENOUGH JMP NOROOM / GO TELL USER NO ROOM DOIO, / SET UP TO DO THE IO TAD SVIFNO / GET INPUT DOC AND DRV NBR JMS OPENRD / GO OPEN THE FILE FOR READ ONLY TAD SVOFNO / GET OUTPUT DOC AND DRV NBR MQL /INOT MQ FOR OPEN TAD OPTION / GET THE OPTION DESIRED CIFFIO FILEIO XDSKIN JMS DSPLNM / GO DISPLAY THE NAME TO THE USER /A007 JMS CPYFLE / GO COPY THE FILE JMP GOLDMU / HE HIT GOLD HALT JMP CUGSP / GO BACK FOR MORE / THE CODE BELOW ALLOWS THE USER TO RENAME THE DOCUMENT BECAUSE THE / OUTPUT DISKETTE ALREADY HAS A DOCUMNET OF THE NAME THAT'S ON / THE INPUT DISKETTE RENAME, JMS I TOPSC / GO ERASE AND DISP '--COPY DOCUMENT--' /A018 CIFMNU JMS I IOACAL / GET READY TO OUTPUT A MEASSAGE 0 TXCS3 / ^P^S^P^S^P /A037 1505 TXETND / ENTER A NEW NAME FOR THE DOC ETC. 1705 TXOR / "OR " 7777 TXPRCN / "PRESS RETURN TO CONTINUE TO NEXT JMS ORGOLD / OR GOLD MNU ORAR CAM / USE COMBINED MICROINST OF CLA MQL TO SAVE 1 LO/A039 AC7777 / GET SIGNAL FOR CKINPT ROUTINE TELLING IT THAT WE / WANT A NAME ONLY (NOT A NUMBER) DCA RSIGN / PUT IT WHERE CKINPT CAN GET IT AC0002 / SIGNAL MAIN MENU TO READ ONLY (DON'T DO FILNAM) JMS STTMPS / GO SET MAIN MENU SIGNALS JMS READMU / GO TO MAIN MENU TO READ WHAT USER PUT IN JMP GOLDMU / HE HIT GOLD MENU, GO GET OUTY CDFMYF JMS CPMNOV / GO COPY THE INPUT OVER FROM MENU FIELD JMS CKINPT / GO CHECK WHAT HE PUT IN JMP CUGSP / HE HIT RETURN, GO GET NEXT FILE JMP GARBAG / HE PUT IN A NUMBER, BAD, GO TELL HIM DCA RSIGN / CLEAR SIGNAL THAT WE'RE DOING A NAME ONLY FOR /A019 / FOR CKINPT ROUTINE /A019 TAD TODRV / GET DRIVE WE ARE COPYING TO TAD OSXTY / MAKE IT AN ASCII NUMBER JMS FIXNAM / GO FIX UP THE NAME JMP CTDIN1 / GO CONTINUE PROCESSING WITH NEW NAME GARBAG, / HE TYPED IN GARBAGE, TELL HIM AND ASK AGAIN JMS MVINPT / /A037 JMS NOMEAN / /A037 JMP RENAME / GO ASK AGAIN /***********************************************************************/ / / / GTNBR -- GET THE NEXT AVAILABLE FILE NUMBER FROM THE DRIVE / / THAT WE ARE COPYING TO SO THAT WE CAN COPY THE FILE WHEN THE / / USER DOESN'T WANT TO NAME THE FILE. / / / / IF THERE ARE NO MORE AVAILABLE DOCUMENT NUMBERS THEN / / / WE WILL JUMP TO NSPCMSG. THIS IS A TEMPORARY FIX /A037 / / FOR A HIGH PRIORITY BUG. WE USED TO JUMP TO NOROOM /A037 / / WHICH GIVES THE WRONG MESSAGE AND DOESN'T PROPERLY /A037 / / HANDLE ALL EXITS /A037 / / JUMPING TO NSPCMSG HAS THE DISADVANTAGE OF HAVING THE /A037 / / ONLY EXIT BE TO MAIN MENU--THE COPY CANNOT CONTINUE TO /A037 / / THE NEXT DOCUMENT (COPY SOME OR ALL) WHICH COULD BE /A037 / / COPIED IF IT EXISTED ON IN A TBO SITUATION (E ELIMINATED/A037 / / THAT'S ALL FOLKS. THERE'S ONLY SO MUCH YOU CAN DO /A037 / / WITH SHIP DATE BREATHING DOWN YOUR NECK HLP /A037 / / / /***********************************************************************/ GTNBR, XX TAD TODRV / GET THE 'TO' DRIVE NUMBER JMS GTHMBL / GET THE HOME BLOCK AND SET IT UP FOR PROCESSING CUB1 / INPUT BUFFER ADDRESS JMS GTNXAV / GO GET THE NEXT AVAILABLE FILE NUMBER CUB1+12 / WHERE THE FILE NUMBERS ARE IN BUFFER SNA / NON-ZERO HERE MEANS WE GOT ONE JMP NSPCMSG / ZERO MEANS NONE LEFT. SEE COMMENTS ABOVE /C037 JMS DONBR / GO CONVERT IT TO DECIMAL CUPFNM / ADDRESS WHERE ASCII NUMBER WILL BE PUT JMP I GTNBR / RETURN COPOVR, XX JMS CUCOPY CUPFNM CDFMYF INBUF+1 CDFMYF STRLEN-1 JMP I COPOVR /************************************************************************* / / THIS ROUTINE SETS UP 'MNTMP4' AND 'MNTMP5' TO THE VALUES PASSED / TO IT IN THE MQ AND AC. THIS IS USED PRIOR TO GOING TO MAIN MENU / TO TELL THE MAIN MENU CODE WHAT TO DO. BEFORE USING 'READMU' / YOU MUST SET MNTMP4 AND MNTMP5 SO THAT MAIN MENU KNOWS WHAT TO DO. / /************************************************************************** STTMPS, XX / SET PARAMETERS FOR MAIN MENU CDFMNU DCA I (MUBUF+MNTMP4) MQA DCA I (MUBUF+MNTMP5) CDFMYF JMP I STTMPS / GO BACK /-------------------- PAGE NOROOM, / NOT ENOUGH ROOM ON FLOPPY TO HANDLE FILE JMS TOSMALL / GO PUT THE MESSAGE TODRV / DRIVE NUMBER WE'RE CPYING TO INBUF+1 / AREA WHERE NAME OF FILE IS CIFMNU JMS I IOACAL 0 TARTN 2005 JMS ORGOLD ORAR JMS KBRD JMP CUGSP / GO ASK FOR ANOTHER NAME TO COPY / READ A CHARACTER FROM THE INPUT DOCUMENT / / JMS RDNXCH; EOF RETURNS TO HERE; OK RETURNS TO HERE / RDNXCH, .; CLA; CDFMYF; CIFFIO; FILEIO; XRDFNC SPA;CLA / Treat errors like E-O-F. /A002 SZA ISZ RDNXCH JMP I RDNXCH /************************************************************************** / / THIS ROUTINE WILL GET THE NEXT AVAILABLE FILE NUMBER ON A DISKET / IT LOOKS FOR THE FIRST ZERO WORD IN THE HOME BLOCK. AS IT LOKS AT / EACH WORD OF THE AREA OF THE HOME BLOCK THAT CONATAINS THE HEADER / BLOCK NUMBERS FOR THE FILE, IT INCREMENTS A COUNTER. WHEN IT FINDS / A ZERO IT PUTS A 1 IN THE WORD IN THE HEADER BLOCK TO INDICATE / THAT THE FILE IS IN USE, AND RETURNS. / CALLED BY: / JMS GTNXAV / ADDR OF BUFFER OF HOME BLOCK +12 (THE AREA WHERE FILE NOS ARE. / NOTE: 12 ABOVE IS OCTAL / /****************************************************************************** GTNXAV, XX TAD I GTNXAV / GET THE ADDR WHERE FILE NOS ARE ISZ GTNXAV / TO RETURN ADDRESS DCA X0 / PUT ADDR WHERE FILE NOS ARE IN INDEX IAC DCA COUNT1 / INITALIZE THE COUNT GTNXA1, ISZ COUNT1 / INCREMENT THE COUNT TAD I X0 / GET THE HEADER BLOCK FORTHE FILE SNA / IF NOT ZERO, THEN ITS THERE JMP GTTN / WE'VE GOT ONE SMA CLA / ARE WE AT END OF FILE AREA? JMP GTNXA1 / GO GET ANOTHER ONE JMP I GTNXAV / NO-SKIP RETURN GTTN, AC7777 / MINUS ONE TO DECREMENT INDEX TAD X0 / DECREMENT INDEX DCA X0 IAC / SIGNAL FILE NUMBER IN USE DCA I X0 TAD COUNT1 / GET THE FILE NUMBER JMP I GTNXAV / RETURN COUNT1=T1 / NEXT FILE NUMBER /****************************************************************************** / / THIS ROUTINE WILL GET THE HOME BLOCKS OF THE DISKETTE INTO MEMORY, / AND SET IT UP SO THE ROUTINE THAT GET NEXT FILE NUMBER WILL BE ABLE / TO FUNCTION. CALLED BY: / TAD DRIVENO /C037 / JMS GTHMBL / BUFFER ADDRESS / THE ROUTINE PUTS A MINUS ONE AT END OF THE FILE NUMBER AREA SO THAT / WE CAN KNOW WHEN WE ARE OUT OF FILE NUMBERS / /****************************************************************************** GTHMBL, XX / DRIVE NO IS IN AC AT CALL /C037 JMS GTDENS / GO GET DRIVE AND CDF INTO Q-BLOCK / ESTABLISH THE DENSITY OF THE DRIVE TAD I GTHMBL / GET THE BUFFER ADDRESS DCA QUQBLK+RXQBAD / PUT IT INTO Q-BLOCK TAD (RXBDIR) / GET BLOCK NUMBER OF HOME BLOCK DCA QUQBLK+RXQBLK TAD (RXERD) / SET THE FUNCTION TO READ DCA QUQBLK+RXQFNC / PUT IT INTO Q-BLOCK JMS QURX / GO READ THE HOME BLOCK CLA TAD I GTHMBL / GET BUFFER ADDRESS AGAIN TAD (322) / POSITITON TO THE END OF FILE NUMBERS AREA DCA TADIPL / PUT IT TO TAD THRU AC7777 DCA I TADIPL / PUT STOPPER INTO AREA ISZ GTHMBL / GET TO RETURN ADDR JMP I GTHMBL / GO BACK TADIPL=T1 / PLACE TO INDIRECT HRU /*************************************************************************** / / THIS ROTUTINE WILL SEARCH FOR A PARTICULAR SEQUENCE OF CHARACTERS / ON A FILE OPENED BY RDFILE. THE ADDRESS OF THE SEQUENCE OF / CHARACTERS TO BE SEARCHED FOR SHOULD FOLLOW THE JMS INSTRUCTION / THAT CALLS THIS ROUTINE. CALL IT AS FOLLOWS: / JMS NMSRC / ADDRESS OF STRING TO SEARCH FOR / WHERE TO GO AT EOF / RETURN POINT WHEN STRING IS GOTTEN / /*************************************************************************** NMSRC, XX NMSRC1, TAD I NMSRC / GET THE THING TO SEARCH FOR DCA NMISSP / SAVE THE STRING POINTER NMSRC2, JMS RDNXCH / GO GET A CHARACTER FOR THE FILE JMP NMSRC3 / END OF FILE CIA / COMPLEMENT THE CHAR TAD I NMISSP / IS IT EQUAL? SZA CLA JMP NMSRC1 / NO, GO RE-INITIALIZE ISZ NMISSP / BUMP UP TO NEXT CHAR OF STRING TAD I NMISSP / THIS THE END OF THE STRING? SZA CLA JMP NMSRC2 / NO, GO CHECK NEXT CHARACTER ISZ NMSRC / YES, AND WE HAVE A MATCH NMSRC3, ISZ NMSRC / END OF FILE RETURN (ONE ISZ ONLY) JMP I NMSRC / GO BACK NMISSP=T1 / CHAR STRING COUNTER / / A ROUTINE THAT WILL READ ASCII NUMBER AND CONVERT IT TO BINARY. / USED TO CONVERT FILE NUMBERS THAT EXIST ON THE INDEX FILE. / CALL IT AS FOLLOWS: / JMS GTNUM / EOF RETURN / NORMAL RETURN (GOT NUMBER) / /****************************************************************************** GTNUM, XX DCA GTNUMV / INIT BINARY TO ZERO GTNUM1, JMS RDNXCH / GO GET A FILE CHARACTER JMP I GTNUM / END OF FILE RETURN TAD (-72) / IS IT A NUMBER? SMA / IT MIGHT BE IF IT IS MINUS HERE JMP GTNUMD / ITS NOT, SO WE'RE DONE TAD (LF) / IS IT A NUMBER? SPA / IF ITS POSITIVE HERE THEN IT IS JMP GTNUMD / IF IT ISN'T, WE'RE ALL DONE DCA T1 / STORE THE NUMBER TAD GTNUMV / GET VALUE OF PREVIOUS NUMBER (IF ANY) CLL RTL / MULTIPLY BY FOUR TAD GTNUMV / ADD IN THE ORIGINAL NUMBER CLL RAL / DIVIDE BY 2 TAD T1 / ADD IN THE NEW NUMBER DCA GTNUMV / STORE IT FOR NEXT NUMBER JMP GTNUM1 / GO DO NEXT DIGIT GTNUMD, CLA TAD GTNUMV / GET THE VALUE OF THE NUMBER IN AC ISZ GTNUM / NORMAL RETURN JMP I GTNUM GTNUMV=T2 / RECONSTRUCTED BINARY OF THE DECIMAL ASCII / CODE MOVED HERE FOR SPACE REASONS /M039 DSPLN1, / NO NAME, SO DISPLAY THE NEW NUMBER /A037/M039 / THE NEW NUMBER IS ALREADY AT INBUF+1 /A037/M039 CIFMNU /M039 JMS I IOACAL /M039 0 /M039 NWNBRT / NEW NUMBER TEXT /M039 1315 / POSITION ON SCREEN /M039 INBUF+1 / BUFFER POINTER /M039 JMP DSPLRT / GO DISPLAY "COPYING BLOCK ..." /M039 NMIBN, "<-200;"N-200+40;">-200;0 / CONSTANT NMIBNO, "<-200;"#-200;">-200;0 / <#> CONSTANT /-------------------- PAGE /********************************************************************** / / THIS ROUTINE RINGS THE BELL ON THE TERMINAL AND RETURNS / /********************************************************************** RBELL, XX CIFMNU JMS I IOACAL 0 ASTRING BELTXT JMP I RBELL /*********************************************************************** / / THIS ROUTINE ASKS THE USER WHETHER OR NOT HE WANTS TO COPY / A DOCUMENT DURING A COPY SOME OPERATION. IT WILL DISPLAY / THE NUMBER AND NAME (IF ANY) THEN ASK HIM TO TYPE A "Y" / IF HE WANTS TO COPY IT, OR HIT RETURN IF HE WANTS TO GO ON / TO THE NEXT DOCUMENT WITHOUT COPYING, OR GOLD MENU IF HE / IS THROUGH COPYING. / /**************************************************************************** CPWISH, XX DCA CPWIS1 / SAVE DOCUMENT NUMBER IN DISPLAY STATEMENT TAD I CPWISH DCA CPWIS2 / PUT THE ADDRESS OF THE NAME TO BE DISPLAYED CPWISR, /A027 JMS I TOPSC / GO ERASE AND DISP '--COPY DOCUMENT--' /A018 CIFMNU JMS I IOACAL 0 DYWTC / DO YOU WISH TO COPY DOCUMNET NBR X 1115 CPWIS1, 0 / DOCUMNET NUMBER TAD I CPWISH / DOES THE NAME EXIST? SNA CLA / IF NOT DON'T DISPALY IT JMP NONAM2 CIFMNU JMS I IOACAL 0 DCNAME 1315 / CURSOR POSITION CPWIS2, 0 / NAME OF THE DOCUMENT NONAM2, JMS MSIYDT / GO DISPLAY MESSAGE /A012 JMS WISHIN / GO CHECK THE RESPONSE JMP GOLDMU / HE HIT GOLD MENU JMP CUGSP / HIT RETURN, HE DIDN'T WANT TO COPY JMP CPWIS3 / NO MEANING TO WHAT HE TYPED IN /A027 JMS COPOVR / GO COPY BACK WHAT WAS IN INBUF /A022 ISZ CPWISH / BUMP UP TO REURN ADDRESS JMP I CPWISH CPWIS3, /A027 JMS COPOVR / GO RESTORE INBUF /A027 JMP CPWISR / GO REPEAT THE QUESTION /A027 /************************************************************************** / / THIS ROUTINE CHECKS THE INITAL INPUT ON A COPY ONE OPERATION / IT WILL DISCARD ANY [, CURLY BRACKET, OR X. INPUTS. / IT WILL CHECK TO SEE IF A DOCUMENT NUMBER WAS PUT IN OR A / DOCUMENT NAME WAS PUT IN. IF ONLY A [, CURLY BRACKET OR X. WERE PUT / IN, IT ISSUES THE NOMEANING MESSAGE. IF NO ARGUMENT IS PUT IN / IT WILL RE-ISSUE THE ORIGINAL MESSAGE. / /**************************************************************************** CKINPT, XX TAD (CUPFNM) / GET ADDR WHERE INPUT COPIED TO DCA T1 / PUT IT FOR INDIRECTING THRU JMS NXACLL / GO GET THE ARGUMENT JMP NOARGT / GO HERE IF NO ARGUMENT JMS CVDCLL / GO SEE IF ITS A NUMBER JMP CURLY1 / NOT A NBR, GO CHECK CURLY BRACKET JMS NXACLL / GO GET THE NEXT ARGUMENT JMP ITSNBR / YEAH, NO ARG, ITS A NUMBERED DOC CLA / ARGUMENT GOTTEN, SEE WHAT IT IS TAD INBUF+1 / GET THE ARGUMNET CIA / COMPLEMENT FOR COMPARE TAD PERIOD / IS IT A PERIOD SZA CLA / YES. JMP CURLY2 / NO, GO SEE IF ITS A CURLY BRACKET NMNGER, /C003 JMS COPOVR / DOCUMENT NAME HAS A NBR. IN FRONT OF IT/C013 JMP NERR / GO TELL NO MEANING TO WHAT HE TYPED /C003 JMS NXACLL / GO GET NEXT ARGUMENT JMP NERR / NO MEANING ERROR JMS CVDCLL / GO SEE IF ITS A NUMBER JMP ITSOK / NOT A NUMBER, MUST BE A NAME JMP ITSNBR ITSOK, ISZ SIGNL3 / SIGNAL THAT USER GAVE DOC A NAME /A007 JMS COPOVR / GO MOVE IT OVER TO INBUF /C013 ITSOK1, ISZ CKINPT NERR, ISZ CKINPT NOARGT, JMP I CKINPT / RETURN CURLY, ACL / RELOAD CHR /A037 /C038 CURLY1, TAD (-173) / IS IT A CURLY BRACKET? SZA TAD (173-133) / IS IT A SQUARE BRACKET? SZA CLA JMP ITSOK / NEITHER, MUST BE A NAME JMP NMNGER / GO DO NO MEANING MESSAGE /C003 CURLY2, TAD INBUF+1 / REFETCH CHR /A037 JMP CURLY1 / CONTINUE /A037 ITSNBR, AC7777 / SIGNAL THAT WE'RE DOING A NUMBERED FILE DCA SIGNL TAD RSIGN / ARE WE SUPPOSED TO BE DOING A NAME ONLY? SMA CLA / YES, GO TELL HIM HIS INPUT IS GARBAGE. JMP SIG1 / NO, GO SEE IF THERE IS A NAME FOR THE DOC DCA SIGNL / CLEAR THE NUMBERED FILE FLAG DCA RSIGN / CLEAR THE SIGNAL FOR NEXT TIME JMP NERR / GO TELL HIM HIS INPUT IS GARBAGE SIG1, AC7777 / GET A MINUS 1 TO CHECK IF WE'RE DOING COPY ONE TAD COPYTP / GET THE COPY TYPE WE'RE DOING SZA CLA / IF ZERO HERE, THEN WE'RE DOING A COPY ONE JMP ITSOK / RETURN OK TAD DCNBR1 / GET DCNBR SAVED IN CVDCLL /A038 DCA DCNBR / AND PASS TO DTNAM /A038 TAD FROMDR / GET THE DRIVE NUMBER WE'RE COPYING FROM JMS DTNAM / GO GET THE NAME OF THE FILE JMS COPOVR / GO MOVE THE FILENAME TO INBUF /A025 JMP ITSOK1 / RETURN CVDCLL, XX / CHECKS FOR A NUMBER CIFMNU JMS I CVDCAL INBUF+1 JMP I CVDCLL /D037 MQA /D037 DCA DCNBR DCA DCNBR1 / SAVE MORE LOCALLY /A038 ISZ CVDCLL JMP I CVDCLL NXACLL, / GET THE NEXT ARGUMENT XX CIFMNU JMS I NXACAL T1 INBUF JMP I NXACLL / NO MORE ARGUMENTS IN LIST ISZ NXACLL / THERE IS AN ARGUMENT, AND ITS IN INBUF NOW JMP I NXACLL DCNBR1, XX /A038 /*********************************************************************** / / THIS ROUTINE WILL DISPALY THE NAME OF A DOCUMENT WHEN THE DOCUMENT / NAME ALREADY APPEARS IN THE OUTPUT DISKETTE SO THAT THE USER CAN / CHOOSE WHETHER HE WANTS TO COPY TO THE TOP OR BOTTOM, OR OVERWRITE / IT, OR RENAME IT. / /**************************************************************************** DONAME, XX CIFMNU JMS I IOACAL 0 DCNAME 505 INBUF+1 JMP I DONAME /-------------------- PAGE / ***** W A R N I N G ********** W A R N I N G ****************** /A039 / ALL LINKS ON THIS PAGE MUST BE HAND CODED !!!!! /A039 ERRWIN, XX / CHECKS IF ERROR RETURN ON A GET DENSIT/A039 / CALL WAS A WINNIE AREA /A039 TAD I DRVERR / IS THE ERROR ON THE SOURCE DRIVE?? /A039 CIA / NEGATE THE DRIVE WHERE ERROR OCCURRED /A039 TAD FROMDRV / GET SOURCE DRIVE # /A039 SNA CLA / IF AC .NE. 0 NOT A SOURCE ERROR, SKIP /A039 TAD WINSRC / WAS SOURCE ERROR, WAS IT A WINNIE? /A039 SZA / NO NOT A WINNIE SOURCE ERROR, SKIP /A039 JMP WINERR / WAS A WINNIE SOURCE ERROR, GO HANDLE /A039 TAD I DRVERR / IS THE ERROR ON THE DESTN. DRIVE?? /A039 CIA / NEGATE THE DRIVE WHERE ERROR OCCURRED /A039 TAD TODRV / GET DESTN. DRIVE # /A039 SNA CLA / IF AC .NE. 0 NOT A DESTN. ERROR, SKIP /A039 TAD WINDST / WAS DESTN. ERROR, WAS IT A WINNIE? /A039 SZA / NO NOT A WINNIE DESTN. ERROR, SKIP /A039 JMP WINERR / WAS A WINNIE DESTN. ERROR, GO HANDLE /A039 JMP I ERRWIN / NOT A WINNIE ERROR MUST BE A DISKETTE /A039 DRVERR, DRVDSP / POINTER TO DEV # WHICH FAILED GETDENS /A039 / ********************************************************************* /A039 / /A039 / WINERR - INPUT: AC=DEVICE # IN ERROR /A039 / /A039 / REPORTS UNASSIGNED WINNIE AREA # & REQUESTS USER TO /A039 / PRESS GOLD MENU ..... /A039 / *** N.B. *** IF LINKS ARE NECESSARY WRITE THEM IN BY HAND OR USE /A039 / BASE PAGE. /A039 / /A039 / ********************************************************************* /A039 WINERR, DCA WINDRV / PUT DEVICE # INTO IOACAL SEQUENCE /A039 CIFMNU /A039 JMS I IOACAL / GO DISPLAY "AREA ? DOES NOT HAVE A VOLUME..." /A039 0 WINTXT 1505 TXTARE WINDRV, 0 TXTVOL JMP I MENRET / GO ASK FOR GOLD MENU RESPONSE & RETURN TO MENU/A039 MENRET, PGOLD / LINK FOR ABOVE "JMP I" INSTRUCTION /A039 TXCS1, TEXT '^P^S' / GENERAL PURPOSE CONTROL STRING/A037 TXCS2, TEXT '^P^S^P^S' / GENERAL PURPOSE CONTROL STRING/A037 TXCS3, TEXT '^P^S^P^S^P^S' / GENERAL PURPOSE CONTROL STRING/A037 TXOR, IFDEF ENGLSH IFDEF ITALIAN /A037 IFDEF V30NOR < TEXT 'EL '> /A046 IFDEF V30SWE < TEXT ''> CPY, IFDEF ENGLSH IFDEF ITALIAN IFDEF V30NOR /A046 IFDEF V30SWE SPRMPT, IFDEF ENGLSH < TEXT '&PLEASE ENTER THE &NAME OR &NUMBER ' *.-1 TEXT ' OF THE DOCUMENT YOU NOW WISH TO COPY' /C034 > IFDEF ITALIAN < TEXT '&INTRODURRE NOME O NUMERO DEL DOCUMENTO DA COPIARE' > IFDEF V30NOR < TEXT '&SKRIV NAVN EL. NUMMER' /A046 *.-1 TEXT ' P\E DET DOKUMENTET DU VIL KOPIERE' /A046 > IFDEF V30SWE < TEXT '&SKRIV NAMNET ELLER NUMRET P\E DET' *.-1 TEXT ' DOKUMENT DU VILL KOPIERA' > TXTIDN, IFDEF ENGLSH /A037 IFDEF ITALIAN IFDEF V30NOR /A046 IFDEF V30SWE TXTID1, IFDEF ENGLSH /A037 IFDEF ITALIAN IFDEF V30NOR /A046 IFDEF V30SWE GLST, IFDEF ENGLSH < TEXT '^P&DOCUMENT NUMBER ^D HAS NO NAME ' /C043 *.-1 TEXT '^P&ENTER A NAME OR NUMBER AND &PRESS &R&E&T&U&R&N ' *.-1 TEXT '^P&OR JUST &PRESS &R&E&T&U&R&N TO ASSIGN A NEW NUMBER ' > IFDEF ITALIAN < TEXT '^P&NUMERO DOCUMENTO ^D HA NO NOME. ' *.-1 TEXT '^P&INTRODURRE NOME O NUMERO E PREMERE !&RITORNO. ' *.-1 TEXT '^P&PREMERE !&RITORNO PER ASSEGNA UN NUOVO NUMERO.' > IFDEF V30NOR < TEXT '^P&DOKUMENT NUMMER ^D HAR IKKE NOE NAVN ' /A046 *.-1 TEXT '^P&SKRIV INN ET NAVN ELLER NUMMER OG TRYKK P\E !&RETUR' /A046 *.-1 TEXT '^PEL. TRYKK P\E !&RETUR FOR \E GI DET ET NYTT NUMMER' /A046 > IFDEF V30SWE < TEXT '^P&DOKUMENT NUMMER ^D HAR IGNET NAMN' *.-1 TEXT '^P&SKRIV ETT NAMN ELLER NUMMER OCH TRYCK P\E RETUR' *.-1 TEXT '^P&F\VR ATT TILLDELA ETT NYTT NUMMER, TRYCK P\E RETUR ' > / END IFDEF V30SWE SYSTM, IFDEF ENGLSH < TEXT '^P&IF NECESSARY, REMOVE THE SYSTEM DISKETTE FROM DRIVE 0 AND THEN' > IFDEF ITALIAN < TEXT /^P&SE NECESSARIO, TOGLIERE IL DISCO SISTEMA DALL'UNIT\@ 0 \H/ > IFDEF V30NOR < TEXT '^P&TA EVT. SYSTEMDISKETTEN UT AV STASJON 0 OG'> /A046 IFDEF V30SWE < TEXT '^P&OM N\VDV\DNDIGT, TA UT SYSTEMDISKETTEN UR ENHET O OCH'> AITDT, IFDEF ENGLSH IFDEF ITALIAN IFDEF V30NOR /A046 IFDEF V30SWE RECEV, IFDEF ENGLSH IFDEF ITALIAN IFDEF V30NOR /A046 IFDEF V30SWE COPYF, IFDEF ENGLSH IFDEF ITALIAN IFDEF V30NOR /A046 IFDEF V30SWE DEXTS, IFDEF ENGLSH /C043 IFDEF ITALIAN IFDEF V30NOR /A046 IFDEF V30SWE DREST, IFDEF ENGLSH < TEXT '^P&HOW WOULD YOU LIKE THE DOCUMENT MODIFIED?' *.-1 TEXT '^P&T = &ADD TEXT TO THE TOP ' *.-1 TEXT '^P&B = &ADD TEXT TO THE BOTTOM' *.-1 TEXT '^P&O = &OVERWRITE THE DOCUMENT' *.-1 TEXT '^P&E = &ENTER A NEW NAME FOR THIS DOCUMENT' *.-1 TEXT '^P&TYPE THE LETTER AND &PRESS &R&E&T&U&R&N, OR JUST ' *.-1 TEXT '^P&PRESS &R&E&T&U&R&N TO CONTINUE TO THE NEXT DOCUMENT,' > IFDEF ITALIAN < TEXT /^P&MODALIT\@ MODIFICA: / *.-1 TEXT /^P&I = &INSERIRE IL TESTO ALL'INIZIO / *.-1 TEXT /^P&F = &INSERIRE IL TESTO ALLA FINE / *.-1 TEXT /^P&S = &SOVRASCRITTURA / *.-1 TEXT /^P&N = &NUOVO NOME PER IL DOCUMENTO / *.-1 TEXT /^P&SCEGLIERE UN'OPZIONE E PREMERE !&RITORNO, / *.-1 TEXT /^P&PREMERE !&RITORNO PER PASSARE AL DOCUMENTO SUCCESSIVO,/ > IFDEF V30NOR < /A046 TEXT '^P&HVORDAN VIL DE ENDRE DOKUMENTET? ' *.-1 TEXT '^P&T = &TILF\XYE TEKST P\E TOPPEN ' *.-1 TEXT '^P&B = &TILF\XYE TEKST P\E BUNNEN ' *.-1 TEXT '^P&O = &OVERSKRIVE DOKUMENTET' *.-1 TEXT '^P&N = &GI DETTE DOKUMENTET NYTT VAVN ' *.-1 TEXT '^P&VELG ALTERNATIV OG TRYKK P\E !&RETUR EL.' *.-1 TEXT '^P&TRYKK P\E !&RETUR FOR \E G\E TIL NESTE DOKUMENT' > IFDEF V30SWE < TEXT '^P&HUR SKA DOKUMENTEN MODIFIERAS? ' *.-1 TEXT '^P&B = &L\DGGA TILL TEXT I B\VRJAN' *.-1 TEXT '^P&S = &L\DGGA TILL TEXT I SLUTET ' *.-1 TEXT '^P&\V = &SKRIVA \VVER DOKUMENTET' *.-1 TEXT '^P&N = &SKRIV ETT NYTT DOKUMENTAMN' *.-1 TEXT '^P&SKRIV KODEN OCH TRYCK P\E RETUR' *.-1 TEXT '^P&F\VR ATT FORTS\DTTA TILL N\DSTA DOKUMENT, TRYCK P\E RETUR' > / END IFDEF V30SWE NDOC, IFDEF ENGLSH /C039 IFDEF ITALIAN IFDEF V30NOR /A046 IFDEF V30SWE DYWTC, IFDEF ENGLSH /C043 IFDEF ITALIAN IFDEF V30NOR /A046 IFDEF V30SWE DCNAME, TEXT '^P"^A"' NWNBRT, IFDEF ENGLSH < / NEW NUMBER TEXT /A037 TEXT '^P&THE NEW NUMBER IS ^A'> /A037 IFDEF ITALIAN IFDEF V30NOR /A046 IFDEF V30SWE NOWCOP, IFDEF ENGLSH /C043 IFDEF ITALIAN IFDEF V30NOR /A046 IFDEF V30SWE TXETND, IFDEF ENGLSH < TEXT '&ENTER THE NEW NAME FOR THE DOCUMENT AND THEN &PRESS &R&E&T&U&R&N,' > IFDEF ITALIAN < TEXT /&INTRODURRE IL NUOVO NOME PER IL DOCUMENTO E PREMERE !&RITORNO,/ > IFDEF V30NOR < TEXT '&ANGI NYTT NAVN FOR DETTE DOKUMENTET OG TRYKK P\E !&RETUR,'> /A046 IFDEF V30SWE < TEXT '&SKRIV DET NYA DOKUMENTNAMNET OCH TRYCK SEDAN P\E RETUR.'> TXPRCN, IFDEF ENGLSH < TEXT '&PRESS &R&E&T&U&R&N TO CONTINUE TO THE NEXT DOCUMENT,'> IFDEF ITALIAN < TEXT /PREMERE !&RITORNO PER PASSARE AL DOCUMENTO SUCCESSIVO,/ > IFDEF V30NOR < TEXT 'TRYKK P\E !&RETUR FOR \E G\E TIL NESTE DOKUMENT,'> /A046 IFDEF V30SWE < TEXT '&F\VR ATT FORTS\DTTA TILL N\DSTA DOKUMENT, TRYCK P\E RETUR,> TXIYD, IFDEF ENGLSH < TEXT '&IF YOU DO, TYPE &Y AND &PRESS &R&E&T&U&R&N, OR JUST '> IFDEF ITALIAN < TEXT /&INTRODURRE !&SI E PREMERE !&RITORNO, OPPURE/ > IFDEF V30NOR < TEXT '&HVIS DU VIL DET, SKRIV &J OG TRYKK P\E !&RETUR , EL.'> /A046 IFDEF V30SWE < TEXT '&OM DU G\VR DET, SKRIV &J OCH TRYCK P\E RETUR'> NERD, /d041 TEXT '^P&THERE IS NOT ENOUGH ROOM ON &^S ^D TO CONTAIN THE DOCUMENT' IFDEF ENGLSH < TEXT '^P&^S ^D NOT INITIALIZED !&OR DOES NOT HAVE ROOM FOR THE DOCUMENT'/A041 > IFDEF ITALIAN < TEXT /^P&^S ^D NON INIZIALIZZATA O SPAZIO INSUFFICIENTE PER IL DOCUMENTO/ > IFDEF V30NOR < TEXT '^P&^S ^D ER IKKE KLARGJORT EL. HAR IKKE PLASS TIL DOKUMENTET'>/A046 IFDEF V30SWE < TEXT '^P&^S ^D \DR INTE INTE INITIERAD ELLER HAR INTE PLATS F\VR DOKUMENTET'> TRYAGN, IFDEF ENGLSH < TEXT '^P&WHEN TYPING TO THE MENU, USE NORMAL KEYS ON THE KEYBOARD ONLY. ' /C021 *.-1 IFDEF CONDOR < /A030 TEXT '^P&THE &RUBOUT KEY CAN ALSO BE USED. &A LINE MAY CONTAIN A' /C021M030 > / END IFDEF CONDOR /A030 IFNDEF CONDOR < /A030 TEXT '^P&R&U&B &C&H&A&R AND &R&U&B &W&O&R&D CAN ALSO BE USED. ' /A030 *.-1 /A030 TEXT '&A LINE MAY CONTAIN A ' /A030 > / END IFNDEF CONDOR /A030 *.-1 /C021 TEXT '^PMAXIMUM OF 71 CHARACTERS AND MUST END WITH &R&E&T&U&R&N.' /C021 *.-1 TEXT '^P&PLEASE PRESS &R&E&T&U&R&N AND TRY AGAIN.' > IFDEF ITALIAN < TEXT /^P&PER SCEGLIERE LE OPZIONI DEL MENU UTILIZZARE SOLO I TASTI AL / *.-1 TEXT /FANUMERICI^PE SE NECESSARIO IL TASTO !AX]. &UNA RIGA PU\R CONTENRE AL //m045 *.-1 TEXT /^PMASSIMO 71 CHARATTERE E DEVE TERMINARE CON !&RITORNO. / *.-1 TEXT /^P&PREMERE !&RITORNO PER CONTINUARE./ 74;0 /a045 > IFDEF V30NOR < /A046 TEXT '^P&BRUK BARE TEGN P\E HOVEDTASTATURET N\ER DU SKRIVER EN KOMMANDO ' *.-1 TEXT '^P!&SLETT-TASTEN KAN OGS\E BRUKES. &EN LINJE KAN HA ' *.-1 TEXT '^PMAKS. 71 TEGN OG M\E AVSLUTTES MED !&RETUR' *.-1 TEXT '^P&TRYKK P\E !&RETUR OG PR\XV IGJEN.' > IFDEF V30SWE < TEXT '&ANV\DND BARA "VANLIGA" TANGENTER N\DR DU SKRIVER I MENYN ' *.-1 TEXT '&DU KAN OCKS\E ANV\DNDA RADERA. &EN RAD KAN INNEH\ELLA' *.-1 TEXT '&DU KAN OCKS\E ANV\DNDA RADERA TKN ELLER RADERA ORD.' *.-1 TEXT '&EN RAD F\ER INNEH\ELLA' *.-1 TEXT 'MAXIMALT 71 TECKEN OCH M\ESTE AVSLUTAS MED RETUR' *.-1 TEXT '&TRYCK P\E RETUR OCH FVRSVK IGEN.' > / END IFDEF V30SWE TARTN, IFDEF ENGLSH IFDEF ITALIAN IFDEF V30NOR /A046 IFDEF V30SWE CNTCRE, IFDEF ENGLSH IFDEF ITALIAN IFDEF V30NOR /A046 IFDEF V30SWE WNUM, IFDEF ENGLSH IFDEF ITALIAN< TEXT /^P&I NUMERI DEI DOCUMENTI DEVONO ESSERE DA 1 E 200/ > /a045 IFDEF V30NOR < TEXT 'DOKUMENTNUMRENE G\ER FRA 1 TIL 200.'> /A046 IFDEF V30SWE < TEXT 'DOKUMENTNUMRET M\ESTE VARA MELLAN 1 OCH 200'> NMDC, IFDEF ENGLSH IFDEF ITALIAN IFDEF V30NOR /A046 IFDEF V30SWE NONIN, IFDEF ENGLSH < /A017 TEXT '^P&YOUR ^S IS NOT INITIALIZED.'> /A017 IFDEF ITALIAN < TEXT /^P&IL DICHETTO NON \H INITIALIZZETO./ > IFDEF V30NOR < TEXT '^P&^S ER IKKE KLARGJORT.'> /A046 IFDEF V30SWE < TEXT '^P&DIN ^S \DR INTE INITIERAD.'> CNRG, TEXT '^P ' NMEAN, IFDEF ENGLSH < TEXT '^P&TYPING "^A" HAS NO MEANING HERE. &PRESS &R&E&T&U&R&N TO TRY AGAIN.' /C021 > IFDEF ITALIAN < TEXT /^P&"^A" &OPZIONE NON VALIDA/ > IFDEF V30NOR < TEXT '^P"^A" KAN IKKE BRUKES HER. &TRYKK P/E !&RETUR OG PR\XV IGJEN' > /A046 IFDEF V30SWE < TEXT '^P"^A" BETYDER INGENTING H\DR, TRYCK P\E RETUR OCH FVRSVK IGEN.'> PRTRN, IFDEF ENGLSH IFDEF ITALIAN IFDEF V30NOR /A046 IFDEF V30SWE DOGM, IFDEF ENGLSH < TEXT '^P^A&PRESS &GOLD &M&E&N&U TO RECALL THE &MAIN &MENU.'> IFDEF ITALIAN< TEXT /^P^APREMERE &ORO !&MENU PER TORNARE AL &MENU &PRINCIPALE./ > IFDEF V30NOR < TEXT '^P^A&TRYKK P\E &GULL !&MENY FOR \E F\E HOVEDMENYEN.'> /A046 IFDEF V30SWE < TEXT '^P^A&FVR ATT KOMMA TILL HUVUDMENYN, ANV\DND GULD MENY'> ORAR, IFDEF ENGLSH <"O&177;"R&177;40;0> IFDEF ITALIAN<"O&177;40;0> IFDEF V30NOR <"E&177;"L&177;40;0> IFDEF V30SWE <"E&177;"L&177;40;0> NARG, 0 RPLACE, IFDEF ENGLSH IFDEF ITALIAN IFDEF V30NOR /A046 IFDEF V30SWE YNAD, IFDEF ENGLSH < /A018 TEXT '^P&YOU NEED A DISKETTE IN DRIVE ^D. ' /A018 *.-1 /A018 TEXT '&PUT A DISKETTE IN THE DRIVE' /A018 > IFDEF ITALIAN < TEXT /^P&NECESSITA UN DISCHETTO NELL'UNIT\@ ^D. / *.-1 TEXT /&INSERIRE UN DISCHETTO NELL'UNIT\@/ > IFDEF V30NOR < TEXT '^P&DET M\E ST\E EN DISKETT I STASJON ^D. ' /A046 *.-1 TEXT '&SETT EN DISKETTE I STASJONEN' /A046 > IFDEF V30SWE < TEXT '^P&DU BEHVVER EN DISKETT I ENHET ^D.' *.-1 TEXT '&S\DTT I EN DISKETT I ENHETEN' > / END IFDEF V30SWE PSCR, TEXT '^P!E' ASTRING,TEXT '^A' BELTXT, BELL;0 COPCNT, IFDEF ENGLSH /A007 /C043 IFDEF ITALIAN IFDEF V30NOR /A046 IFDEF V30SWE BLOCKS, TEXT '^P!3D' /A007 TXTARE, IFDEF ENGLSH /A039 IFDEF ITALIAN IFDEF V30NOR /A046 IFDEF V30SWE TXTDSK, IFDEF ENGLSH /A039 IFDEF ITALIAN IFDEF V30NOR /A046 IFDEF V30SWE TXTVOL, IFDEF ENGLSH /A039 IFDEF ITALIAN IFDEF V30NOR /A046 IFDEF V30SWE TXTDRV, IFDEF ENGLSH /A039 IFDEF ITALIAN IFDEF V30NOR /A046 IFDEF V30SWE WINTXT, IFDEF ENGLSH /A039 IFDEF ITALIAN IFDEF V30NOR /A046 IFDEF V30SWE CUB1, ZBLOCK 400 INBUF, -STRLEN ZBLOCK STRLEN+1 /-------------------- PAGE   /TITLE WPCUT - COMMAND UTILITY / .VERSION / / / / COPYRIGHT (C) 1980 / DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASSACHUSETTS 01754 / / THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED / ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE / INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER / COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY / OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY / TRANSFERRED. / / THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE / AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT / CORPORATION. / / DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS / SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL. / / / 088 EMcD 12-Sep-85 Add Nordic translations (conditionalise) / 087 EMcD 12-Mar-85 Add DECDEV switch / 086 HLP 05-NOV-84 Allow for future use of header wds 18,42 / 085 HLP 13-JUL-84 Fix WPSV2-60 false nonexistent printer / 084 SBB 21-MAY-84 MAKE ROOM AND FIX SOME ERR AND GOLD RETURNS / 083 SBB 07-MAY-84 MAKE ROOM AND ADD POST-PROCESSOR STUFF / 082 GDH 14-FEB-84 rearranged some code to make source / more similar to the foreign source. / Deleted extraneous SPRJOB routine. / 081 HLP 18-JAN-84 Fix bug induced on 080 where LP to / newly created doc was printed instead / 080 EH 06-JAN-84 LP check for result doc 'in use' prior / to displaying TBO prompt / 079 HLP 04-JAN-84 ADD MISSING CDF! (DECII-158) / 078 HLP 08-DEC-83 Add SMTAB entry for mismatched controls / 077 HLP 14-NOV-83 Send current SE setting to MNTMP7 / Remove P option on SE YES / 076 HLP 17-OCT-83 Put SL on Stop Menu / Make Stop Menu use MNQINI instd MNTMP4 / since TBO uses MNTMP4 (CM1NX) / 075 HLP 13-SEP-83 Delete PRLOCK (DECmate is single user) / Delete refs to D2OGET,D2OPUT,D2OCNT / 074 HLP 10-AUG-83 LP checks doc dest in printer code / so escape sequences for quality mode / can be sent to LA50/LA100 / 073 HLP 26-JUL-83 Delete margin check on RS command / 072 HLP 02-JUN-83 New Page not to set PRSTOP so PRTRID / won't abort! / 071 HLP 23-MAY-83 Add JWAIT to CUSTOP / Simplify STOPPR routine / 070 GDH 19-MAY-83 Moved PRD error menu to PR1 / 069 HLP 18-MAY-83 Delete C option from BUSY in SMTAB / 068 HLP 16-MAY-83 Handle PRSTTS only in CUSTOP / 067 HLP 13-MAY-83 Don't re-call stop menu if PRSTT2=1 / Add C option to BUSY in SMTAB / Add code 26 comm. error in SMTAB / Delete unreferenced symbols / 066 WCE 10-MAY-83 Error message bug fixes / 065 HLP 02-MAY-83 Restore lines illegally deleted in / WS102 cleanup which broke LP / 064 HLP 27-APR-83 Move CUQMCK to end of WPCUT so it / can share a page with WPCRE and not / push CUB1 past 5400. Fixed bug where / SL would make disc not verify. / Remove WS102 conditionals / 063 HLP 18-APR-83 Move CUBs to WPCRE / Add CUQMCK to check consistency of margins / 062 HLP 01-APR-83 DELETE JSTRTs on PRJOB / 061 HLP 21-MAR-83 Only resume on doc read error / 060 HLP 18-FEB-83 LPONLN in printer field / 059 HLP 10-JAN-83 Delete STSTTS, create SPRJOB to save space / 058 HLP 10-JAN-83 Conditionalize resume on SMTAB / 057 HLP 07-JAN-83 If PRSTTS=0 then don't stop, start printer / 056 HLP 30-DEC-82 Allow resume non-existent printer / 055 DFB 15-DEC-82 Fix to return if hdr blk=0 / 054 HLP 13-DEC-82 Handle change in PRSTTS when in / stop printer menu / Deleted lock code in CUSTOP / Use PQFRST in CUSTOP rather than MN1 / 053 HLP 13-DEC-82 Add error code 25 to SMTAB / Delete N from LQP02 ASF error in SMTAB / DELETE R,P,B,T,N from paused at boot in SMTAB / 052 HLP 12-DEC-82 WAITPR to exit immediatley on resume / remove code to reset LQPSE from WAITPR / 051 HLP 07-DEC-82 WAITPR not call SQREST if draft printer / (this did NOT get into V133) / 050 EH 03-DEC-82 Fix for RL to print documents if name / is greater than 31 chars in length / 049 HLP 02-DEC-82 Add code for selective stop menu / 048 HLP 28-NOV-82 Copy PQFRST up to stop menu / 047 GDH 19-NOV-82 Removed LP setting PRSTTS to "-1". / 046 HLP 01-NOV-82 Delete automatic Resume after SL / 045 HLP 22-OCT-82 Change WAITPR routine to reset LQP02 / and added a JWAIT to let stop ov process / 044 GDH 20-OCT-82 Print menu changes re: list processing / printer validation. / 043 HLP 06-OCT-82 Use MNTMP4 for stop menu / 042 HLP 05-OCT-82 Move CURWBF / 041 HLP 05-OCT-82 Copy PRQPNT up to stop menu on DD change / 040 HLP 11-AUG-82 Changes to allow B and T after ASF error / WAITPR no longer sets LPDNFG / WAITPR issues reset via SQREST / 039 GDH 08-APR-82 Fixed call to RL code (routine CURWGN). / 038 WCE 26-FEB-82 MODIFIED ERROR CALL FOR FILE IN USE / 037 GDH 18-FEB-82 ADDED "GET DENSITY" TO PRINT COMMAND / UTILITY. / 036 GDH 08-FEB-82 ADDED "READ ERROR DETECTION". / 035 GDH 21-NOV-81 BUG FIX TO WAITPR TO NOT SET PABORT / FLAG ON RESUME COMMAND. ALSO INCREASED / THE WAITPR TIME DELAY. / 034 GDH 21-NOV-81 MADE USE OF THE PRINTER ID ROUTINE IN / THE PRINTER. / 033 AJF 19-OCT-81 MADE PRTRID ROUTINE MONITOR LPDNFG / 032 GDH 16-OCT-81 DE-IMPLEMENTED LOCK/UNLOCK CODE. / 031 AJF 12-OCT-81 CHANGED MNSLU3 TO MNPRTB / 030 AJF 09-OCT-81 FIXED ASF PROBLEM IN PRTRID / 029 AJF 15-SEP-81 REPLACED DDTABL WITH SMARTER ONE / 028 AJF 07-SEP-81 ADDED PRINTER ID ROUTINE AND DD CHECK / 027 AJF 06-SEP-81 DELETED EXTRANEOUS FIELD STUFF / FROM PAGE 0 AND UNLOCK/LOCK STUFF / TO MAKE ROOM FOR PRINTER ID ROUTINE / AND DD -LPONLN CHECK ROUTINE / 026 GDH 04-SEP-81 WPFILS CALLING SEQ CHANGES / 025 JM 01-SEP-81 FIXED DEFAULT DD IN DDTABLE / 024 TT 07-JUL-81 REMOVED SUPERFLUOUS CONDITIONALS / 023 JM 02-APR-81 CHANGES FOR CANADA / 022 JM 02-APR-81 CHANGED "TAD I (LPDNFG)" TO / "DCA I (LPDNFG)" / 021 DIM 13-MAR-81 CONDITIONALIZED PERIOD OF TIME THAT / WAITPR WAITS FOR VT278 / 020 JM 19-FEB-81 CONDITIONALIZED CODE AT STOPRT / FOR THE 278 / 017 JM 06-FEB-81 MOVED CANADIAN TEXT AT CULSBT TO / ANOTHER PAGE TO FIX A PAGE ERROR / 016 JM 06-FEB-81 MOVED DUTCH TEXT AT CULS5 TO ANOTHER / PAGE TO FIX A PAGE ERROR / 015 DAO 7-JAN-80 CHANGED PERIOD OF TIME THAT WAITPR / WAITS BEFORE IT DETERMINES THAT THE / PRINTER IS HUNG WHEN THE USE PICKS AN / OPTION FROM THE STOP PRINTER MENU. / 014 DAO 22-DEC-80 DELETED MESSAGE "ALL DOCUMENTS WAITING / TO PRINT ARE FOR THE SECOND USER" IN / THE CASE OF A VT278 / 013 DAO 18-DEC-80 CHANGED CHECKING OF IF PRINTER ON LINE / OR NOT IN LIST PROCESSING TO BE / CONSISTENT WITH THE WAY THE PRINTER / DOES IT. (MAINTAINING COMPATABILITY / WITH POSSIBLE DOCUMENT DESTINATIONS / IN TH RL BASE SYSTEMS) / 012 DAO 17-DEC-80 ADDED CHANGE TO TURN OFF FLASHING LED / AND BUZZING WHEN GOING TO STOP PRINTER / MENU / 011 DAO 4-DEC-80 DELETED EXTRA CDFMNU IN CUSL1 ROUTINE / 010 DAO 4-DEC-80 FIXED BUG WHICH HANGS SYSTEM WHEN / PRINTER HAS ERROR / 0009 DAO 18-SEP-80 MERGED WITH X3.5 / 0008 DM,JM 15-SEP-80 MERGED SCANDI AND EUROPE/ENGLISH / 0007 REG 12-AUG-80 ADDED THIS STANDARD HEADER / 0006 CMW 07-AUG-80 MADE GRAMMATICAL CHANGES FOR DUTCH / 0005 DSS 09-JUL-80 MODIFIED FOR ENGLISH/FRENCH-CANADIAN / 0004 CMW 6-MAY-80 ENTERED CANADIAN TRANSLATIONS / 0003 DSS 17-APR-80 ENTERED DUTCH FIXES / 0002 GLT 10-APR-80 CHANGED CODE SO GERMAN PART OF LP LISTS / WILL BE ABLE TO HAVE UC LETTERS. / 0001 GLT 31-MAR-80 ADD FRENCH GERMAN DUTCH CONDITIONAL CODE / DIACRITICAL SUBSTITUTIONS: / FRENCH: "]"=L.G.E, "["=L.A.E; "&" NO MAKE CAPS / GERMAN: "["=L.U.A, "\"=L.U.O, "]"=L.U.U; "&" MAKE CAPS / QA3.5 LDB 19-APR-78 FIX LP PRINTER BUGS AND LP T OPTION / III.D KEE 29-MAR-78 CLEAN UP CODE + STUFF FOR WT FILE NUMBER / REPRESENTATION / 2.7-3 KEE 1/14/78 MAKE CREATE SEPERATE SOURCE FILE / 2.7-1 LDB 11/23/77 MERGE FROM WT78 PACK / 2.5-3 RLT 11/9/77 ADD ERROR HANDLING FOR DDNAM / 2.5-2 RLT 11/4/77 DO REAL DD STRING FOR WT PRINT / 2.5.1 KEE 11/4/77 FIX SL AND RL BUGS / 2.5-1 RLT 10/21/77 MERGED FROM WT78 PACK / 2.4D-1 LDB 10/18/77 CHG PRINTER CALLS FOR 100 & WS78 PROPORTIONAL / 2.4D+ KEE 10/17/77 FIX REST OF SL CODE / 2.Q-2 LDB 9/25/77 ADD PRINTER UNLOCK CODE / 2.Q-1 RLT 9/24/77 ELIM LQUE AND R/W PQUE FOR WT78 / 2.P-4 RLT 9/23/77 FIX FOR WT ASM / 2.P-3 LDB 9/22/77 FIX LOCKS FOR CREATE & LP AND MORE RL STUFF / 2.P-2 LDB 9/19/77 MORE RL&SL / 2.P-1 LDB 9/16/77 PUT IN RL & SL CODE / 2.O MB 9/15/77 PUT IN THE 78 CHANGES / 2.N-1 LDB 9/14/77 MOVE STUFF TO WPCU2 / 2.N KEE 9/9/77 ADD LOCK CODE FOR 2.5 / 2.L-1 LDB 9/11/77 FIX LIST Q BUG / 2.J KEE 8/26/77 ADD 4-FLOPPY SUPPORT / 2.G-1 MSB 8/9/77 MOVE FROM 78 TO MASTER PACK *200 JMP I .+3 JMP I .+1 7600 RXLOAD *RXLDLS RXEWT=4 RXEWT 0 RXQBLK=11 RXQBLK . DLOCUT 100 IFNDEF DECDEV < CDF 20 > IFDEF DECDEV < CDF 40 /A087 > -DSOCUT /M026 DLPRQ 200 IFNDEF DECDEV < CDF 10 > IFDEF DECDEV < CDF 30 /A087 > -DSPRQ /M026 0 IFNDEF DECDEV < FIELD 1 > IFDEF DECDEV < FIELD 3 > *200 ZBLOCK 400 /INITIALIZE WRITEOUT OF PRINT QUEUE /THIS IS THE PATCH TO PAGE ZERO THAT WILL CONTAIN THE ROUTINES /THAT WILL TAKE CARE OF THE CDFS AND CIFS. CDIF00=CDF CIF /CONSTANT USED TO FORM A CDF CIF CALL TO CIDPAT IFNDEF DECDEV < FIELD 2 > IFDEF DECDEV < FIELD 4 > *100 /THE FIRST 100 LOCATIONS ARE USED FOR THE SYSTEM CDFMYF=CDFBUF /THIS FIELD SAME AS BUFFER FIELD CIFMYF=CIFBUF SPACTN, 0 /USER REQUESTED ACTION. /A035 TENADR, CLOCK+1 /ADDRESS OF TENTHS OF SEC (PAGE 0) /VARIABLES FOR WAITPR ROUTINE MOVED HERE REV051 COUNT, 0 /-NUMBER OF TENTHS OF SECONDS YET TO WAIT BUFCNT, 0 /ADDRESS (TAKEN FROM FIELD 0) OF HANDLER BUFFER COUNT TENTH, 0 /LAST TENTH OF A SECOND TEMP, 0 /A TEMPORARY CUQFNO, 0 CUQFLG, 0 CUSADR, 0 CUSDIF, 0 CURWBF, ZBLOCK 40 /ADD 1 WORD SO THAT ENDING ZERO WON'T CLOBBER /ANYTHING THAT FOLLOWS IFNZRO 155-.&4000 *156 /SO WE ALWAYS KNOW WHERE QBLOCK IS QUBLK, DSKQUE 0 0 QUQBLK, /QBLOCK-- SAVE LOTS OF LINKS BY MOVING HERE 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+10 /RXQBFD BUFFER FIELD CDF 0 /RXQTRK TRACK 0 /RXQSEC SECTOR /-------------------- PAGE /THIS LABEL TRIGGERS A CONDITIONAL IN WPCRE /A054 WPCUT, XX /CURWPQ - READ AND WRITE PRINTER QUEUE JMS CURWPQ CDIMNU JMP I .-3 XX /CUPP - CREATE COMMAND JMS CUPP CDIMNU JMP I .-3 XX /CUQPRT - QUEUE TO PRINTER COMMAND JMS CUQPRT CDIMNU JMP I .-3 XX /CUSTOP - STOP THE PRINTER COMMAND JMS CUSTOP CDIMNU JMP I .-3 CULP, XX /CULPCM - LIST PROCESSING COMMAND JMS CULPCM CDIMNU JMP I .-3 XX /RESUME PRINTER JMS CURPRT CDIMNU JMP I .-3 XX /NEW PAGE ON PRINTER JMS CUNPRT CDIMNU JMP I .-3 CUFF, XX /POST PROCESS /A083 JMS CPOSTP /A083 CDIMNU /A083 JMP I .-3 /A083 CUPSOL, XX /SETS UP OVERLAY CHAIN INFO AC7775 DCA T1 /SET TO COPY THREE WORDS TAD MNUCAL+1 TAD (MNONUM-1) DCA X0 /TO MENU AREA CUPSO1, TAD I CUPSOL /GET NEXT WORD FROM CALLER ISZ CUPSOL /BUMP ARG PTR CDFMNU /CHANGE TO MENU FIELD DCA I X0 /STORE NEXT WORD IN MENU AREA CDFMYF /CHANGE BACK TO MY FIELD ISZ T1 JMP CUPSO1 /LOOP FOR ALL WORDS JMP I CUPSOL /THEN RETURN TO CALLER /*********************************************************************** /CUNPRT--NEW PAGE ON PRINTER /NO LONGER SETS PRSTOP ELSE PRTRID WILL ABORT /A072 CUNPRT, XX /NEW PAGE ON PRINTER CLA CDFPRT /CDF TO PRINTER TAD I (PRSTTS) /SEE IF PRINTER NOT BUSY SZA CLA JMP CUNPR1 /BUSY, GIVE MESSAGE ISZ I (PRSTTS) /SET STATUS TO BUSY /A072 AC0001 JMS STRTPR /GIVE NEW PAGE COMMAND JMP I CUNPRT CUNPR1, CDFMYF CIFMNU JMS I MNUCAL /CALL MENU DLMPS3 /FOR BUSY MESSAGE JMP I CUNPRT /AND RETURN /CUPP - CREATE COMMAND CUPP, 0 JMS ADRCRT /DO THE CREATE JMP CUPRTR /ERROR, RETURN TO MAIN MENU CDFMNU DCA I (MUBUF+MNFNO) TAD I (MUBUF+MNFNO) AND P377 DCA I (MUBUF+MNDOCN) CDFMYF /BACK TO US TO SET RETURN ADDR ISZ 204 /SET FOR CHAIN CALL /- IS USED BY CREATE TO SEE WHICH OVERLAY TO CALL IN WHEN DONE /0 = EDITOR /1 = INDEX CDFMNU TAD I (MUBUF+MNTMP2) CDFMYF SNA CLA JMP CUPCE3 /EDITOR JMS CUPSOL 16 200 CIF CDF 20 /INDEX JMP CUPRTR CUPCE3, JMS CUPSOL 2 200 CIF 10 CUPRTR, JMP I CUPP /RETURN TO MAIN MENU /A LITTLE ROUTINE TO GET THE SYSTEM VALUE LPONLN /CALLED BY JMS GTLP RETURNS WITH LPONLN IN AC GTLP, XX CLA /CLEAR AC CDFPRT /CHANGE DATA FIELD TO PRINTER TAD I (LPONLN) /GET LPONLN CDFMYF /CHANGE DATA FIELD TO MINE JMP I GTLP /RETURN TO CALLER /ROUTINE TO READ AND WRITE THE BLOCK CONTAINING /THE NAMES OF THE FILES IN THE PRINT QUEUE. /CALLED WITH: /JMS CURDQB /ACTION FOR RXHAN (RXERD OR RXEWT) CURDQB, XX /RETURN CLA TAD I CURDQB /GET ACTION FOR RXHAN ISZ CURDQB DCA QUQBLK+RXQFNC JMS CUPDRS /SET TO SYSTEM DRIVE TAD (DLPRQ) DCA QUQBLK+RXQBLK TAD (CUB1) DCA QUQBLK+RXQBAD JMS QURX CLA JMP I CURDQB /RETURN /-------------------- PAGE /CUQPRT - QUEUE TO PRINTER COMMAND FHPSET=23 CUQPRT, 0 DCA CUQOPT CDFMNU TAD I (MUBUF+MNFNO) CDFMYF DCA CUQFNO TAD CUQFNO BSW RTR /POSITION DRIVE NUMBER JMS CUPDRS TAD (RXEDN) /GET DENSITY OF DRIVE IN QUESTION. /A037 DCA QUQBLK+RXQFNC /A037 JMS QURX /A037 CLA /CLEAR THE AC /A037 TAD CUQFNO AND P377 DCA QUQBLK+RXQFNO TAD (RXEGF) DCA QUQBLK+RXQFNC JMS CUINDX /CHECK AND READ INDEX BLK(ERR IF=0) /A055 TAD (RXERD) DCA QUQBLK+RXQFNC TAD (CUB1) DCA QUQBLK+RXQBAD /READ INTO BUFFER 1 JMS QURX AC0001 /SET COPIES TO 1, FROM 1, TO 0 DCA CUB1+FHPSET+1 AC0001 DCA CUB1+FHPSET+10 DCA CUB1+FHPSET+11 TAD QUQBLK+RXQBLK /SAVE SOME VALUES FOR USE LATER DCA CUQHBK TAD QUQBLK+RXQDRV DCA CUQHDV TAD CUB1+FHPSET /GET FIRST WORD OF OUR INFO IN HDR BLK SZA CLA JMP CUQCPS /ALREADY SET - SO COPY SETTINGS INTO MENU CUQGTS, CMA /MAKE A NEGATIVE-1 STORED SETTING # /C086 DCA CUQTMP TAD (PRSETZ+2) /ALLOW FOR FUTURE EXPANSION OF PRSETZ BY 2/C086 ISZ CUQTMP /MULTIPLY DONE? JMP .-2 /NO - CONTINUE ADDING SO HAVE OFFSET TAD (CUB2-PRSETZ-1) /ADD TO START OF BUFFER,WITH CORRECTION FACTOR / ^ /C086 DCA CUQSS1 /SAVE PTR TO SETTING FOR LATER TAD (RXERD) /SET UP TO READ THE RIGHT BLOCK DCA QUQBLK+RXQFNC TAD (CUB2) DCA QUQBLK+RXQBAD /READ INTO BUFFER 2 JMS CUPDRS /SET TO SYSTEM DRIVE TAD (DLRLRP) /GET BLOCK NUMBER DCA QUQBLK+RXQBLK JMS QURX /READ IT IN JMS CUCOPY /COPY VALUES INTO HDR CUQSS1, 0 CDFMYF CUB1+FHPSET CDFMYF PRSETZ CUQCPS, JMS CUCOPY /COPY SETTINGS FROM HDR TO MENU CUB1+FHPSET CDFMYF MUBUF+MNPROP CDFMNU PRSETZ CUQCMU, CDFMNU /CALL MENU DCA I (MUBUF+MNTMP1) /SET REASON FOR CALL CDFMYF CIFMNU JMS I MNUCAL DLMPR2 CLA /CHECK RETURNED ACTION CODE CDFMNU TAD I (MUBUF+MNTMP1) CDFMYF TAD (JMP I CUQATB-1)/GET JMP THROUGH TABLE DCA .+1 HLT /DO IT CUQATB, CUQWOQ /1- WRITE OUT VALUES TO HDR AND QUEUE CUQWON /2- WRITE OUT VALUES TO HDR AND DON'T QUEUE CUQWOB /3- WRITE OUT VALUES TO STORED SETTINGS CUQRDB /4- READ IN BLOCK OF SETTINGS TO HDR CUQCKP /5- CHECK PRINTER SETTING /A044 CUQRET, CLA JMP I CUQPRT /RETURN TO CALLER CUQTMP, 0 CUQHBK, 0 CUQHDV, 0 CUQOPT, 0 /THIS ROUTINE STICKS AN L.G.A (ACCENTED CHAR) ON THE SCREEN FOR CANADA /A023 /IF THE BOTTOM MESSAGE (L.P.) HAS BEEN DISPLAYED /A023 IFDEF CANADA < /A023 CANLGA, XX /A023 AC7777 /SET AC TO -1 /A023 TAD CULTBO /ADD CULTBO /A023 SZA CLA /IF CULTBO NE 1 /A023 JMP CULT2 /THEN CONTINUE /A023 CIFMNU /ELSE DISPLAY L.G.A /A023 JMS I IOACAL /A023 0 /A023 CULCAN /A023 1030 /CURSOR POS /A023 141 /L.G.A /A023 JMP I CANLGA /RETURN /A023 CULCAN, TEXT '^P^Z' /A023 > /END IFDEF CANADA /A023 CURLST, ZBLOCK 10 /LIST OF DOCUMENTS TO BE DELETED FROM QUEUE CUQCKP, JMS CULCKP /CHECK PRINTER DESTINATION /A044 /RETURNS 0 FOR DD OK /A044 / 1 FOR DD NON-EXISTENT /A044 / 2 FOR INCORRECT PRINTER ATCHD /A044 CUQCK1, IAC /MAP TO MENU PARAMETER VALU. /A044 JMP CUQCMU /BACK TO THE MENU. /A044 CUQRDB, CDFMNU TAD I (MUBUF+MNTMP2) CDFMYF JMP CUQGTS /NOW GO GET SETTING /-------------------- PAGE CUQWOB, JMS CUQMCK /CHECK VERTICAL MARGINS /A063 CDFMNU TAD I (MUBUF+MNTMP2) CDFMYF CMA /NEG-1 SETTINGS NUMBER /C086 DCA T1 /MAKE COUNTER TAD (PRSETZ+2) /C086 ISZ T1 JMP .-2 TAD (CUB2-PRSETZ-1) /C086 DCA CUQSS2 TAD (RXERD) /READ BLOCK IN DCA QUQBLK+RXQFNC TAD (CUB2) DCA QUQBLK+RXQBAD JMS CUPDRS /SET SYSTEM DRIVE AND BUFFER FIELD TAD (DLRLRP) DCA QUQBLK+RXQBLK JMS QURX JMS CUCOPY /COPY NEW VALUES MUBUF+MNPROP CDFMNU CUQSS2, 0 CDFMYF PRSETZ TAD (RXEWT+2000) /WRITE IT BACK OUT DCA QUQBLK+RXQFNC JMS QURX JMP CUQCMU /CALL MENU CUQWON, JMS CUQMCK /CHECK VERTICAL MARGINS /A063 AC7777 /SAY NOT TO QUEUE JMP CUQWQ1 /MERGE BELOW. /A044 CUQWOQ, JMS CUQMCK /CHECK VERTICAL MARGINS /A063 JMS CULCKP /CHECK LIST PROCESSING PRINTER. /A044 SZA /SKIP IF EXISTENT. /A044 JMP CUQCK1 /REPORT ERROR. /A044 CUQWQ1, DCA CUQFLG /SAVE WHETHER OR NOT TO QUEUE JMS CUCOPY MUBUF+MNPROP CDFMNU CUB1+FHPSET CDFMYF PRSETZ TAD CUQHBK /SET QUEUE BLOCK VALUES DCA QUQBLK+RXQBLK TAD (CUB1) DCA QUQBLK+RXQBAD TAD CUQHDV DCA QUQBLK+RXQDRV TAD (RXEWT+2000) DCA QUQBLK+RXQFNC JMS QURX /WRITE IT OUT CLA TAD CUQOPT /GET "LIST PROCESSING" FLAG. /A044 ISZ CUQFLG /ARE WE TO QUE? /A044 SZA CLA /SKIP IF NOT LIST PROCESSING. /A044 JMP CUQRET /RETURN IF LIST PROCESSING OR NOT Q-ING /A044 CDFMNU /SEE IF ANY FREE SPOTS IN THE QUEUE CLA TAD (-PQSZ) DCA T1 TAD I (PQADDR) /GET LENGTH AND FIRST ADDR DCA T2 CUQWO1, TAD I T2 /FIRST WORD (THE FILE NUMBER) FREE? SNA CLA JMP CUQWO2 /YES ISZ T2 /NO - SKIP OVER FLINK WORD TO NEXT ENTRY ISZ T2 ISZ T1 /ANY MORE? JMP CUQWO1 /YES DCA I (MUBUF+MNTMP1) /0 FOR NO MORE ROOM ERROR MESSAGE /A070 CDFMYF /NO MORE ROOM CIFMNU JMS I MNUCAL DLMPR1 /TELL USER BAD NEWS JMP CUQRET CUQWO2, TAD CUQFNO /GET FILE NUMBER TO BE QUEUED DCA I T2 /SAVE IN FIRST WORD OF QUEUE BLOCK TAD I (PQLAST) /GET ADDR OF LAST ENTRY IN QUEUE IAC /GET FLINK WORD DCA T1 /SAVE IN T1 TAD T2 /GET OUR ENTRY'S ADDR DCA I T1 /DO THE FLINKING JMP CUQWO3 /NEXT PAGE STRTPR, XX /START THE PRINTER DCA SPACTN /SAVE USER ACTION. /A035 TAD SPACTN /SEND IT TO THE PRINTER. /A035 CDFPRT /CDF TO PRINTER DCA I (PRACTN) /SET ACTION MQA DCA I (PRACTV) /AND AUX VALUE CDFMYF /BACK TO OUR FIELD. /A082 JMP I STRTPR /RETURN /-------------------- PAGE CUQWO3, TAD T2 /SET LASTP DCA I (PQLAST) ISZ T2 /ZERO OUR FLINK DCA I T2 TAD I (PQADDR) /GET ADDR OF QUEUE BLOCK START TO CALC OFFSET CDFMYF /BACK TO US CIA /NEGATE TAD T2 /SO WE GET OUR THING MINUS START CLL RTL /MULT BY 16 (ENTRY NUMBER TIMES 32.) CLL RTL AND (3740) /MAKE INTO OFFSET FROM BUFFER FOR NAME TAD (CUB1) DCA CUQWO5 /SAVE IN COPY CALL TAD (RXERD) /SET UP READ OF QUEUE NAME BLOCK DCA QUQBLK+RXQFNC TAD (DLPRQ) DCA QUQBLK+RXQBLK JMS CUPDRS /SET TO SYSTEM DRIVE JMS QURX /READ IT INTO BUF1 CLA /GET ADDR OF FILE NAME CDFMNU TAD I (FNAMSP) CDFMYF DCA CUQWO4 JMS CUCOPY /COPY NAME INTO BUFFER CUQWO4, 0 /WHERE IT COMES FROM CDFMNU CUQWO5, 0 /WHERE IT GOES CDFMYF 37 /ONLY FIRST 31. CHARS, LAST STAYS ZERO JMS CUQWO6 /MAKE SURE EVERY NAME ENDS WITH A SPACE /A050 TAD (RXEWT+2000) /NOW WRITE IT BACK OUT DCA QUQBLK+RXQFNC JMS QURX JMP CUQRET /DONE /THIS SUBROUTINE IS ENTERED WHEN THE USER HAS SELECTED AN OPTION FROM /THE STOP PRINT MENU. IT WILL POLE THE PRACTN FLAG AND EXIT WHEN IT WAS /CLEARED. IF NUMTEN/10 SECONDS OF REAL TIME PASSES AND THE NUMBER IN /BUFCNT HAS NOT CHANGED, THE PABORT FLAG IS SET (BECAUSE THE PRINTER IS /PROBABLY OFF LINE). THIS TELLS THE PRINTER CODE TO ABORT. THE PRINTER CODE /WILL THEN SET THE PRACTN FLAG AND THIS ROUTINE WILL EXIT NORMALLY. /A) THE PRINTER IS OFF LINE AND /B) THE USER HAS SELECTED AN OPTION FROM THE STOP PRINT MENU /CONSTANTS /HBCNT: IN FIELD 0, POINTS TO ADDRESS OF HANDLER BUFFER COUNT NUMTEN= -36 /NUMBER OF TENTHS OF SECONDS TO WAIT /M035 /CHANGED TO 3.0 SECS. /M035 /AND SEE IF HUNG WAITPR, XX WAITP1, /ADDED LABEL TO AVOID PROBLEMS /A040 CDFSYS /CHANGE TO SYSTEM DATA FIELD /M010 TAD I (HBCNT) /GET ADDRESS OF HANDLER BUFFER COUNT DCA TEMP /SAVE TO INDIRECT THROUGH TAD I TEMP /GET THE BUFFER COUNT CDFMYF /CDF BACK TO MY FIELD DCA BUFCNT /AND STORE IN BUFCNT TAD (NUMTEN) /NOW GET HOW MUCH TIME TO WAIT DCA COUNT /AND STORE IN COUNT WATPR, CDFPRT /CDF TO PRINTER FIELD TAD I (PRACTN) /DONE YET? CDFMYF SNA SPA CLA /SKIP IF AC GREATER THAN ZERO /C040 JMP I WAITPR /EXIT IF DONE CIFSYS JWAIT /ELSE WAIT /NOW CHECK TIME /IF THE SAVED ACTION WAS RESUME, THEN ENOUGH JWAITS /A045 /HAVE OCCURED TO LET THE STOP OVERLAY PROCESS THE ACTION /A045 /SO EXIT NOW /A045 TAD (-6) /CHECK FOR 'RESUME' ACTION /A035 TAD SPACTN /A035 SNA CLA /SKIP IF NOT RESUME. ABORT PRINTER /A035 JMP I WAITPR /JUST RETURN IF RESUME /A035 /C079 CDFSYS /CDF TO FIELD 0 TAD I TENADR /GET TENTHS OF A SECOND CDFMYF CIA TAD TENTH /IF TENTHS IS SAME SNA CLA JMP WATPR /THEN JUMP TO WATPR CDFSYS /ELSE CDF TO SYS TAD I TENADR /GET NEW TENTHS CDFMYF /CDF BACK TO MY FIELD DCA TENTH /AND STORE NEW TENTHS ISZ COUNT /INCREMENT COUNT JMP WATPR /IF TIME NOT UP THEN JUMP TO WATPR /AT THIS POINT THE TIMER HAS EXPIRED /A045 TAD BUFCNT /GET SAVED HANDLER BUF COUNT CLL CIA CDFSYS TAD I TEMP /COMPARE WITH NEW BUF COUNT SZA CLA /IF BUF COUNT HAS CHANGED /ADDED CLA /V045 JMP WAITP1 /THEN REENTER ROUTINE /AT THIS POINT THE BUFFER COUNT HAS NOT CHANGED /A045 /AND THE TIME IS UP /A045 CDFPRT TAD I (PABORT) /SEE IF ABORT FLAG IS SET /A052 SZA CLA /A052 JMP WAITP3 /YES, GO RESET HANDLER BUFFER /A052 AC0001 /SO SET THE ABORT FLAG DCA I (PABORT) CDFMYF /AND DO A JWAIT /A045 CIFSYS /A045 JWAIT /A045 JMP WAITP1 /GO TRY AGAIN /A052 /RESET THE HANDLER POINTERS /A052 WAITP3, CDFMYF /!!! *** (DECII-158) *** !!! /A079 CIFSYS /LET THE HANDLER DO IT /A075 AC7777 /BY CALLING WITH NEG. AC /A075 LPTOU /CALL HANDLER /A075 CIFSYS /A052 JWAIT /A052 JMP I WAITPR /AND RETURN /A045 /THIS ROUTINE IS HERE BECAUSE IT DOESN'T FIT WHERE IT BELONGS /A084 SAMFIL, XX /HERE TO SEE IF SOURCE AND RESULT = /A084 CDFMNU /NOW SEE WHAT CAME FROM MENU INPUT /A084 AC0004 /NEED TO RESTORE FLAG RESET BY 1ST LP2 /A084 DCA I (MUBUF+MNTMP4) /TO XFER AND RETURN TO/FROM TBO MENU /A084 TAD I (MUBUF+MNFNO) /FOR RESULT FILE NAME /A084 CIA /NEGATE IT FOR TEST /A084 CDFMTH /READ-ONLY-FILE # WAS STORED HERE /A084 TAD I (7500) /HERE TO BE SPECIFIC /A084 CDFMYF /NEED TO BE WHERE WE ARE /A084 SZA CLA /SKIP IF SAME FILE FOR SOURCE & RESULT /A084 JMP I SAMFIL /JUST LEAVE NOW. IS OK /A084 CIFMNU /GO CALL A LIST PROCESSING ERR MESSAGE /A084 JMS I MNUCAL /GO USE THIS ERROR MENU /A084 DLMCR2 /GIVES NO CHOICE BUT RETURN /A084 JMP RESRPT /GIVE ANOTHER CHANCE (OR GOLD MENU) /A084 /-------------------- PAGE /BUFFERS CUB1 AND CUB2 MOVED TO WPCRE, CONDITIONALIZED ON IFDEF WPCUT /A063 /************************************************************************ / CUSTOP--STOP THE PRINTER COMMAND / THIS ROUTINE IS CALLED WHEN THE USER HITS S FROM / MAIN MENU TO PUT UP THE STOP MENU / THE SELECTIONS ON THE STOP MENU ARE DEPENDENT ON / TWO PARAMETERS: 1) WHETHER OR NOT THE PRINT QUEUE / IS EMPTY, AND 2) THE ENTRIES IN A TABLE INDEXED / BY THE ERROR CODE. IF THE QUEUE IS EMPTY, THEN / THE ONLY OPTIONS WHICH APPEAR ON THE MENU ARE S AND L. / A071...PRSTOP IS SET FIRST. THEN WE HAVE SOME JWAITS / SO THE PRINTER CODE CAN SEE THAT WE WANT TO STOP / IF THE PRINTER CODE IS DOING AN ID IT WILL DECLARE / A NON EXISTENT PRINTER WHEN IT SEES THE STOP FLAG / AND THE STATUS WILL BE UPDATED BEFORE WE TAKE THE / SNAPSHOT FOR THE MENU. /C071 /************************************************************************ CDFQUE=CDFMNU /A048 CUSTOP, XX JMS STOPPR /STOP THE PRINTER /A071 CUSL1, CDFPRT /CDF TO PRINTER TAD I (PRSTTS) /GET STOP REASON CDFMNU DCA I (MUBUF+MNQINI) /SAVE FOR MENU /C076 CDFQUE /A048 TAD I (PQFRST) /SEE IF ANYTHING IN QUEUE /A048 CDFMNU /IF THERE IS /A048 SNA CLA /SET UP THE QUEMASK /A054 TAD (2020-7777) /2020 ALLOWS ONLY N /A054 TAD (7777) /INITIALIZE VALID ACTIONS /A058 DCA X5 /A058 TAD I (MUBUF+MNQINI) /GET STOP REASON /C076 SNA /IF PRINTER IS NOT IN USE /A057 JMP CUSL2M /BYPASS STOPPING PRINTER /A057 /WE READ SMTAB TO DETERMINE WHAT OPERATOR RESPONSES ARE ALLOWED /C068 JMS VACHK /CHECK FOR VALID ACTION /A058 CDFMNU /A049 DCA I (MUBUF+MNTMP6) /PASS VALUE TO MENU /A049 CDFPRT /A041 TAD I (PRQPNT) /PICK UP DOCUMENT DESTINATION /A041 CDFMNU /A041 DCA I (MUBUF+MNTMP3) /PASS TO MNTMP3 /A041 CDFPRT /A077 TAD I (PRQPNT-3) /PICK UP CURRENT SE SETTING /A077 CDFMNU /A077 DCA I (MUBUF+MNTMP7) /AND SEND UP TO MENU /A077 CUSL2M, CDFMYF /BYPASS JMS STOPPR /A057 CIFMNU /CALL THE MENU JMS I MNUCAL DLMPS1 /WITH PRINTER STOP MENU AS ARG /THE USER NOW RESPONDS TO THE STOP MENU /A054 CDFMNU /LOOK AT RESULTS TAD I (MUBUF+MNQINI) /FIRST, SEE IF WAS NOT IN USE /C076 SNA CLA /A057 JMP CUSNIU /WAS, GO RESET PRSTOP & EXIT /C085 TAD I (MUBUF+MNTMP5) SPA /CHECK FOR LIST QUEUE (-1) JMP CUSLQ /YES SNA JMP CUSTQT TAD (-10) /SEE IF SL /A076 SNA /A076 JMP CUSSL /YES /A076 IAC /NO, BUMP UP TO RESUME (-6) /A076 IAC /A076 SNA /SKIP IF NOT RESUME JMP CUSL3 /LET RESUME CODE PROCESS TAD (6) /NO, GET BACK AND FEED TO PRINTER MQL TAD I (MUBUF+MNTMP2) SWP JMS STRTPR /START PRINTER CUSL4, JMS WAITPR /WAIT FOR DONE CDFPRT /CDF TO PRINTER TAD I (PRSTOP) /STILL STOPPED? SZA CLA JMP CUSL1 /BACK TO MENU IF SO CUSTQT, CDFMYF /RETURN TO MAIN MENU JMP I CUSTOP /ALL DONE CUSL3, JMS CURPRT /DO A RESUME JMP CUSTQT /AND GO RETURN /A052 CUSLQ, CDFMYF /BACK TO OUR FIELD JMS CURDQB /READ QUEUE BLOCK WITH NAMES RXERD TAD (605) /INIT LINE FOR OUTPUT DCA CUSLIN CDFMNU TAD I (PQFRST) CDFMYF /GET ADDR OF FIRST ENTRY IN QUEUE SNA JMP CUSWAT /NONE - WAIT FOR RETURN JMP CUSLQ1 /GO TO ANOTHER PAGE COURTESY BUCK ROGERS CUSSL, /SL FROM STOP MENU /A076 JMS CURWPQ /CALL THE RL/SL SUBROUTINE FOR SL /A076 JMP CUSL1 /RETURN TO STOP PRINTER MENU /A076 /THIS CODED ADDED TO FIX WPWV2-60; S RETURN (THE PRINTER IS NOT IN /USE), RETURN (TO MAIN MENU), N RETURN (GAVE NEW PAGE AND /"PRINTER STOPPED" (NON EXISTENT PRINTER) CUSNIU, CDFPRT /PRINTER NOT IN USE /A085 DCA I (PRSTOP) /RESET STOP FLAG /A085 JMP CUSTQT /GO EXIT CUSTOP /A085 /*********************************************************************** /VACHK--VALID ACTION CHECK /THIS ROUTINE READS THE SMTAB AND PERFORMS A CONJUNCTION OF X5 AND THE /TABLE ENTRY. IT IS ENTERED WITH THE INDEX OF THE TABLE IN THE AC AND /THE SIX BIT CONJUNCTION RESULT IS IN THE AC UPON EXIT. /*********************************************************************** VACHK, XX /VALID ACTION CHECK /A058 CDFMYF /A054 TAD (SMTAB-1) /ADD TO TABLE BASE /A054 DCA X4 /SAVE IN AN INDEX REGISTER /A054 TAD I X4 /READ THIS ENTRY /A054 /NOW PERFORM THE CONJUNCTION /A054 AND X5 /BOTH MUST BE 1 TO BE ALLOWED /A054 DCA X5 /AND SAVE THE RESULT /A054 /NOW PICK THE CORRECT HALF OF THE WORD /A054 JMS GTLP /SEE WHAT KIND OF PRINTER IS ON LINE /C058 AND (LQPSE) /SEE IF IS LQPSE /A060 CIA /A060 TAD (LQPSE) /A060 CLL /CLEAR LINK /A060 SZA CLA /A060 STL /IF NOT LQPSE, SET THE LINK /A060 TAD X5 /GET THE TABLE ENTRY BACK /A049 SZL /SKIP IF LQPSE /A049 BSW /SWAP FOR LPQ02 OR DP /A049 AND P77 /MASK /A049 JMP I VACHK /A058 /-------------------- PAGE /CULPCM - LIST PROCESSING START COMMAND CULPCM, XX CLA CIFMNU JMS I MNUCAL DLMLP1 /PUT UP FIRST MENU DCA FORMNO /ZERO FILE NUMBERS FOR ERROR RECOVERY DCA OTFIL DCA LSTFIL DCA CULSFO CDFMNU TAD I (MUBUF+MNTMP3) CDFMYF /GET RETURNED VALUE SNA JMP CULRT1 /GOLD MENU - JUST RETURN DCA CULACT /SAVE AS ACTION DESIRED CDFMNU /GET ADDR OF FILENO TAD I (FNAMSP) CDFMYF DCA CULFNM AC7776 /SEE IF 2 (MEANING TO PRINTER) TAD CULACT SZA JMP CULPC1 /NO CDFPRT /YES, SEE IF PRINTER IDLE TAD I (PRSTTS) CDFMYF /SAVES 2 OF THESE ON NEXT PAGE /A084 SZA CLA JMP CULPSB /NO, TELL USER IT'S BUSY JMP CULPC0 CULRT1, JMP I CULPCM /RETURN TO CALLER IFDEF DUTCH < /A016 CULS5, TEXT "AFGEDRUKT" /A016 > /END IFDEF DUTCH /A016 CUSAGN, CDFMNU TAD I CUSADR CDFMYF /GET ENTRY IN QUEUE SNA JMP CUSWAT /DONE DCA T1 TAD T1 AND P377 DCA CUSFNO /SAVE FILENO FOR OUTPUTTING TAD T1 BSW RTR AND (17) DCA CUSDR2 /SAVE DRIVE NUMBER FOR OUTPUT TAD CUSADR TAD CUSDIF /CALC NAME ADDR CLL RTL CLL RTL TAD (CUB1) DCA CUSSAD CIFMNU JMS I IOACAL 0 CUSSTG /OUTPUT INFO CUSLIN, 0 CUSDR2, 0 CUSFNO, 0 CUSSAD, 0 AC0100 /INCR LINE NUMBER CLL RAL TAD CUSLIN DCA CUSLIN ISZ CUSADR /DO FLINK STUFF CDFMNU TAD I CUSADR CDFMYF SNA JMP CUSWAT /NONE - DONE DCA CUSADR /NEXT ENTRY JMP CUSAGN CUSSTG, TEXT '^P(^D.^D) ^A' CUSLQ1, DCA CUSADR /SAVE PQFRST CDFMNU TAD I (PQADDR) CDFMYF CIA /GET DIFFERENCE TO CALC POSITION DCA CUSDIF JMP CUSAGN CUSWAT, CIFMNU JMS I MNUCAL DLMPS2 /WAIT FOR RETURN JMP CUSL1 /DONE - BACK TO STOP MENU /********************************************************************** /SMTAB--SELECTIVE STOP MENU TABLE /TABLE IS INDEXED BY PRSTTS. THE ENTRIES ARE BIT PATTERN SELECTORS FOR /EACH OPTION ON THE STOP MENU, WHETHER OR NOT IT GETS DISPLAYED AND IS /THEREFORE ALLOWED ONLY ALLOWED OPTIONS ON THE MENU ARE DISPLAYED THE /TABLE IS DIVIDED IN HALF BITWISE THE LEFT HALF SERVES THE LQP02 AND /DRAFT PRINTERS THE RIGHT HALF SERVES THE LQPSE THE SIX BITS OF EACH /HALF WORD ARE ORGANIZED THUSLY: R=01 /LSB P=02 B=04 T=10 N=20 C=40 / S AND L ARE ALWAYS ALLOWED /*********************************************************************** SMTAB, /SELECTIVE STOP MENU TABLE /A049 7777 /0 -- NOT IN USE: /0 - A FULL LINE SO IF THERE IS NO 2ND ERROR /WE WILL NOT DISABLE OTHER OPTIONS R+P+B+T+N^100+R+P+B+T+N /1 - BUSY /C067 /C069 R+P+B+T+N^100+R+P+B+T+N /2 - USER REQUEST R+P+N^100+R+P+N /3 - SE FIRST R+B+T+N^100+R+B+T+N /4 - SE YES /C077 R+P+B+T+N^100+R+P+B+T+N /5 - END OF PAGE R+P+B+T+N^100+R+P+B+T+N /6 - TWO WHEEL CHANGE R^100+R /7 - NON EXISTENT PRINTER /C056 R+C^100+R+C /10 - CHANGE DOCUMENT DESTINATION 0^100+0 /11 - PAUSE ON AT PRTID R^100+R /12 - COMM BUSY 0^100+0 /13 - MALFUNCTION (HANDLER ABORT) 0^100+0 /14 - MALFUNCTION R+P+B+T+N^100+R+P+B+T+N /15 - PAUSE SWITCH ON R+P+B+T+N^100+R+P+B+T+N /16 - RIBBON OUT R+P+B+T^100+R+P+B+T /17 - LQP02 ASF ERROR R+P+B+T+N^100+R+P+B+T+N /20 - COVER OPEN R+P+B+T+N^100+R+P+B+T+N /21 - PAPER OUT R^100+R /22 - DOCUMENT READ ERROR /C061 0^100+0 /23 - SYSTEM DISK READ ERROR 0^100+B+T /24 - LQPSE ASF ERROR 0^100+0 /25 - LQPSE CANCEL RECEIVED /A053 B+T^100 /26 - COMMUNICATIONS ERROR /A067 0^100+0 /27 - MISMATCHED CONTROLS /A078 /-------------------- PAGE CULPSB, AC3777 /SET FLAG FOR BUSY MESSAGE CDFMNU DCA I (MUBUF+MNTMP2) CDFMYF CIFMNU JMS I MNUCAL /CALL MENU DLMLP4 CULRET, JMP CULRT1 /MADE INTO COMMON EXIT POINT /M083 CULPC1, IAC /SEE IF 1 (MEANING JUST DO SPEC CHECKING) SNA CLA JMP CULGSP /GET SPEC / *************** HANDLE THE LIST FILE NAME *************** /A066 CULPC0, CULPC2, AC0001 /GET LIST DOCUMENT NAME AND NUMBER JMS CULMCL /COPY NAME AND NUMBER TAD I (MUBUF+MNFNO) /GET NUMBER CDFMYF DCA LSTFIL /SAVE THE LIST FILE NUMBER TAD CULFNM /PATCH COPY COMMAND TO PICK UP STUFF DCA CULL1 JMS CUCOPY /COPY NAME TO OUR FIELD CULL1, 0 CDFMNU CULLFN CDFMYF STRLEN / *************** HANDLE THE SPEC FILE NAME *************** /A066 CULGSP, AC0002 /GET SPEC JMS CULMCL /CALL APPROPRIATE MENU TAD I (MUBUF+MNFNO) /PICK UP THE SPEC FILE NUMBER CDFMYF JMS FILCHK /CHECK TO SEE IF IT IS ALREADY IN USE /A066 JMP CULGSP /YES IT WAS, GO ASK FOR ANOTHER NAME /A066 DCA CULSFO /SAVE THE SPEC FILE NUMBER /A066 TAD CULFNM /GET POINTER TO FILE NAME BUFFER DCA CULL1A /STORE FOR COPY ROUTINE JMS CUCOPY /COPY THE NAME CULL1A, 0 CDFMNU CULSPN CDFMYF STRLEN AC7777 /CHECK IF SPEC (MEANING DONE) TAD CULACT SNA CLA JMP CULTSP /YES - JUST TEST SPEC / *************** HANDLE THE FORM FILE NAME *************** /A066 CULFOR, AC0003 /GET FORM NAME AND NUMBER /M066 JMS CULMCL TAD I (MUBUF+MNFNO) /PICK UP THE FORM FILE NUMBER CDFMYF JMS FILCHK /CHECK TO SEE IF IT IS ALREADY IN USE /A066 JMP CULFOR /YES IT WAS, GO ASK FOR ANOTHER NAME /A066 DCA FORMNO /SAVE THE FORM FILE NUMBER TAD CULFNM /GET POINTER TO FILE NAME BUFFER /A027 DCA CULL2 /STORE FOR USE OF COPY ROUTINE JMS CUCOPY CULL2, 0 CDFMNU CULFFN CDFMYF STRLEN AC7776 TAD CULACT /SEE IF TO PRINTER SZA CLA JMP CULTOD /NO - TO DOCUMENT DCA OTFIL /TELL MERGER ROUTINE AC0001 JMS CUQPRT /CALL PRINT COMMAND TAD CUQFLG SZA CLA JMP CULTTS /NO - TIME TO START? CULABT, JMP CULRET /DONE CPOSTP, XX /HERE FOR POST PROCESSING /A083 CDFMNU /NEED TO GET AT MENU FLD /A083 TAD I (MUBUF+MNFNO) /CONTAINS DRV AND FILE NO /A083 CDFMTH /MATH FLD IS SAME AS WPSFF AND WPSPEL /A083 DCA I (7500) /WPSFF WILL NEED THIS IN FLD 6 /A083 TAD I (7500) /NEED IT AGAIN /A084 CDFMYF /IF I HAD A $ FOR EACH 1 OF THESE I 4GOT/A084 CIFFIO /AM GOING TO GO TO FLD 7 /A084 FILEIO /WHERE THIS ROUTINE IS /A084 XRDFIN /OPEN FILE FOR READ ONLY /A084 CDFFIO /NOW REF RESULT OF THIS CALL /A084 TAD I (RDFSIZ) /THIS LOC HOLDS # OF FREE BLKS ON DSKET /A084 CIA /MAKE IT NEG /A084 CDFMYF /NEED TO BE WHERE WE ARE /A083 DCA CUFSIZ /SAVE FOR LATER TEST /A084 RESRPT, CIFMNU /GET READY FOR "RESULT" MENU /A083 JMS I MNUCAL /GO TO IT /A083 DLMLP2 /THERE IS STILL A 4 IN MNTMP4 /A083 JMS SAMFIL /CK THAT RESULT FILE NOT = SOURCE FILE /A084 /** WARNING** ERROR RETURN IS TO RESRPT ABOVE /A084 CDFMNU /TO PICK UP MNU RESPONSE /A083 TAD I (MUBUF+MNTMP3) /WAS -1 FOR NON-EXIST FILE /A083 CDFMYF /BACK HERE /A083 SNA /WAS 0 FOR GOLD MENU /A084 JMP POSTEX /LEADS BACK TO MAIN MENU /A084 SMA CLA /SKIP TO CREATE NEW FILE /A083 JMP CRTSKP /DONT NEED TO CREATE A NEW FILE /A083 JMS ADRCRT /GO CREATE DESIRED FILE ALLOCATION /A083 JMP CRTERR /MNTMP1 HAS BEEN SET FOR ERRORTYPE /A083 CDFMNU /I THINK THE AC CONTAINS DOC # /A083 DCA I (MUBUF+MNFNO) /PLUG IN FOR SUBSEQUENT OPEN /A083 CRTSKP, CDFMNU /NEED WHEN HERE BY JMP CRTSKP /A084 TAD I (MUBUF+MNDRV) /NEED DRIVE # FOR SPACE REMAINING TEST /A084 CDFMYF /NEVER FORGET TO COME BACK TO WHERE U R /A083 DCA CUPDRV /SIZE TEST LOOKS HERE FOR DRIVE # /A084 JMP CONTAP /CONTINUE ON A PAGE THAT HAS ROOM /A084 POSTEX, JMP I CPOSTP /NEED COMMON EXIT ON THIS PAGE(INCL.ERR /A084 IFDEF CANADA < /A017 CULSBT, TEXT "AJOUT[ LA FIN DU " /M023 > /END IFDEF CANADA /A017 /-------------------- PAGE /SUBROUTINE TO CHECK IF THE SPECIFIED FILE NUMBER HAS ALREADY /A066 /BEEN SPECIFIED AS AN INPUT FILE BY THE USER. IT CHECKS THE /A066 /FILE NUMBER AGAINST THE LIST DOCUMENT, SPEC DOCUMENT AND THE /A066 /FORM DOCUMENT NUMBER. THE CALLING CONVENTION IS AS FOLLOWS: /A066 / TAD FILE-NUMBER-TO-CHECK /A066 / JMS FILCHK /A066 / ERROR-RETURN /LOCATION FOR FILE ALREADY IN USE /A066 / NORMAL-RETURN /AC CONTAINS FILE NUMBER /A066 FILCHK, XX /CHECK IF FILE NUMBER HAS BEEN USED /A066 CIA /MAKE FILE NUMBER NEGATIVE /A066 DCA T1 /STORE NUMBER FOR CHECKS BELOW /A066 TAD LSTFIL /GET THE LIST FILE NUMBER /A066 TAD T1 /COMBINE WITH FILE NUMBER TO BE CHECKED /A066 SNA CLA /SKIP IF NUMBERS ARE DIFFERENT /A066 JMP FILERR /MATCH - GO REPORT THE ERROR /A066 TAD CULSFO /GET THE SPEC FILE NUMBER /A066 TAD T1 /COMBINE WITH FILE NUMBER TO BE CHECKED /A066 SNA CLA /SKIP IF NUMBERS ARE DIFFERENT /A066 JMP FILERR /MATCH - GO REPORT THE ERROR /A066 TAD FORMNO /GET THE FORM FILE NUMBER /A066 TAD T1 /COMBINE WITH FILE NUMBER TO BE CHECKED /A066 SNA CLA /SKIP IF NUMBERS ARE DIFFERENT /A066 JMP FILERR /MATCH - GO REPORT THE ERROR /A066 ISZ FILCHK /BUMP RETURN ADDRESS TO SUCCESS RETURN /A066 TAD T1 /GET THE FILE NUMBER TO BE CHECKED /A066 CIA /RETURN IT TO IT'S CORRECT FORM /A066 JMP I FILCHK /GO RETURN TO CALLER /A066 FILERR, CIFMNU /'THIS FILE IS ALREADY IN USE' MESSAGE /A066 JMS I MNUCAL /CALL THE MENU OUTPUT ROUTINE /A066 DLMCR2 /A066 JMP I FILCHK /ERROR RETURN TO SELECT NEW NAME /A066 / *************** HANDLE THE RESULT FILE NAME *************** /A066 CULTOD, AC0004 /GET RESULT DOCUMENT NAME AND NUMBER JMS CULMCL AC0001 /A080 TAD I (MUBUF+MNTMP3) /SEE IF SHOULD CREATE FILE /A080 SNA CLA /A080 JMP CULTD0 /CREATE THE FILE /A080 CDFMNU /M080 TAD I (MUBUF+MNFNO) /PICK UP THE OUTPUT RESULT FILE NUMBER /M080 CDFMYF /M080 JMS FILCHK /CHECK TO SEE IF IT'S ALREADY IN USE/A066/M080 JMP CULTOD /YES IT WAS, GO ASK FOR ANOTHER NAME/A066/M080 DCA OTFIL /SAVE THE OUTPUT RESULT FILE NUMBER /M080 TAD (5) /CHECK FOR TOP,BOTTOM,OVERWRITE /A080 JMS CULMCL /A080 JMP CULTD1 /DON'T CREATE THE FILE CULTD0, CDFMYF AC7777 /SET FOR OVERWRITE DCA CULTBO JMS CULCRE /CREATE THE DOCUMENT, RETURN WITH FILE NUMBER DCA OTFIL /SAVE NEW FILE INFO /A081 JMP CULTD2 /JOIN COMMON CODE CULTD1, TAD I (MUBUF+MNTMP1) /SAVE TOP, BOTTOM, OVERWRITE CDFMYF DCA CULTBO AC7776 TAD CULTBO SNA CLA /SEE IF GOLD MENU ? JMP CULTOD /YES, GIVE ANOTHER CHANCE CULTD2, TAD CULFNM /GET POINTER TO FILE NAME BUFFER DCA CULL3 /STORE FOR COPY ROUTINE JMS CUCOPY CULL3, 0 CDFMNU CULRFN CDFMYF STRLEN CULTTS, AC0001 CDFMNU DCA I (MUBUF+MNTMP2) /SET FROM-TO DCA I (MUBUF+MNTMP3) CDFMYF CULT0, TAD LSTFIL /GET FILE AND DRIVE NUMBERS AND P377 DCA CULSC1 TAD LSTFIL BSW RTR AND (17) DCA CULSC2 TAD CULSFO AND P377 DCA CULSC3 TAD CULSFO BSW RTR AND (17) DCA CULSC4 TAD FORMNO AND P377 DCA CULSC5 TAD FORMNO BSW RTR AND (17) DCA CULSC6 CIFMNU JMS I IOACAL /OUTPUT WHAT WE THINK THINGS ARE 0 CULS1 0 IFNDEF CANADA < 505 > IFDEF CANADA < 500;141 >/FRECAN WANTED 0 MARGIN CULSC2, 0 CULSC1, 0 CULLFN IFNDEF CANADA < 605 > IFDEF CANADA < 600 > /0MARGIN CULSC4, 0 CULSC3, 0 CULSPN IFNDEF CANADA < 705 > IFDEF CANADA < 700 > /0MARGIN CULSC6, 0 CULSC5, 0 CULFFN IFNDEF CANADA < 1005 > IFDEF CANADA < 1000 > /0MARGIN JMP CULTT0 /CONTINUE ON NEXT PAGE CULTBO, 0 CULSTB, CULSOV CULSTP CULSBT /-------------------- PAGE CULTT0, AC7776 /TO PRINTER? TAD CULACT SZA CLA JMP CULT1 /NO CIFMNU JMS I IOACAL /YES 0 CULS5 JMP CULT2 CULT1, AC0001 TAD CULTBO /GET CORRECT STRING FOR TOP, BOTTOM, OVERWRITE TAD (CULSTB) DCA CULT1A IFDEF GERMAN < JMS GERPHR /PRINT SPECIAL PHRASE > /END IFDEF GERMAN TAD OTFIL /BREAK OUT FILE AND DRIVE NUMBERS AND P377 DCA CULSC7 TAD OTFIL BSW RTR AND (17) DCA CULSC8 CIFMNU JMS I IOACAL 0 /DEFAULT OUTPUT ROUTINE CULS6 /'DOCUMENT: (X.Y)' CULT1A, XX CULSC8, 0 CULSC7, 0 CULRFN /IF BOTTOM MESSAGE HAS BEEN DISPLAYED MUST STICK A L.G.A ON SCREEN FOR CANADA /A023 IFDEF CANADA < JMS CANLGA > /A023 CULT2, CIFMNU JMS I MNUCAL DLMLP3 /CALL MENU FOR GO /CHECK WHAT TO DO (NOTE MENU SHOULD LEAVE AC 0) CDFMNU TAD I (MUBUF+MNTMP1) CDFMYF SNA JMP CULABT /ABORT - GOLD MENU PRESSED TAD (-1) SNA CLA JMP CULT0 /ERROR - TRY AGAIN CDFMNU TAD I (MUBUF+MNTMP2) CDFMYF DCA CULFRM /COPY FROM-TO CDFMNU TAD I (MUBUF+MNTMP3) CDFMYF DCA CULTO CULT3, TAD CULTBO /SET TO OVERWRITE RESULT, IF ANY DCA OTACT TAD (CULSFO) /ADDR OF SPECIFICATION INFO DCA SPCADR JMS CUPSOL /SET OVERLAY CHAIN 6 200 CIF 10 /FOR PARSER ISZ CULP /DO SKIP RETURN JMP CULRT1 /TO CHAIN CULTSP, DCA FORMNO /TEST SPEC ONLY JMP CULT3 /GET TO PARSER /CALL THE MENUS. AC CONTINS THE NUMBER OF THE MENU TO CALL. CULMCL, 0 /CALL MENU FOR LIST, ETC. CDFMNU DCA I (MUBUF+MNTMP4) /WHAT TO DO IS IN AC CDFMYF CIFMNU JMS I MNUCAL DLMLP2 CDFMNU /CHECK FOR GOLD MENU - MENU LEAVES AC 0 TAD I (MUBUF+MNTMP3) /LEAVES FIELD AT MNUFLD SNA CLA JMP CULRET JMP I CULMCL /CREATE THE OUTPUT FILE CULCRE, XX JMS ADRCRT /CREATE OUTPUT FILE JMP CULRET /COULDN'T DO IT /ADRCRT RETURNS WITH CUPFNO IN AC ALREADY. JMP I CULCRE IFDEF GERMAN < /GERPHR /THIS ROUTINE WILL PRINT OUT "INSERTED AT THE TOP OF/BOTTOM OF" IN GERMAN /ALLOWING UPPERCASE AND LOWERCASE CHARACTERS GERPHR, 0000 TAD I CULT1A /GET THE ACTUAL STRING POINTER INSTEAD OF TABLE LOC. DCA CULT1A /SAVE IT AS THE IOA PARAMETER CIFMNU JMS I IOACAL /PRINT THE MESSAGE DESIRED 0 /USING DEFAULT OUTPUT ROUTINE CULT1A, XX /MESSAGE STRING JMP I GERPHR /RETURN > /END IFDEF GERMAN CULSOV, IFNDEF CANADA < 0 > /NO MORE TEXT /A023 IFDEF CANADA < TEXT 'LE ' > /A023 /THE FOLLOWING THREE LOCATIONS ARE ASSUMED TO BE IN THIS ORDER BY THE /PARSER. (SEE WPSSDF.PA FOR DETAILS) CULSFO, 0 /SPECIFICATIONS FILE NUMBER WITH DRIVE NUMBER CULFRM, 0 CULTO, 0 CUFSIZ, 0 /TO STORE NEG FREE SPACE /A084 WPSCEX, ISZ CUFF /TO EXIT CORRECTLY /A083 JMS CUPSOL /SET OVERLAY STUFF /A083 21 /OVERLAY # (TO CALL NEXT) /A083 7400 /STRTUP IN DLOPPI /A083 CIF 10 /WILL RUN IN FIELD 3 RETURN TO FLD 2 /A083 JMP POSTEX /EVENTUALLY GETS TO 2CMF TO CALL WPSC /A083 CONTAP, JMS CUPCSZ /CHECK FOR ROOM IN DISK /A084 JMP CSZERR /CAUSE NOT EVEN 8 BLOCKS LEFT /A084 TAD CULTO /RETRIEVE NEG SIZE OF READ ONLY FILE /A084 TAD QUQBLK+RXQSPC /SPACE LEFT (LOADED BY CUPCSZ) /A084 SMA CLA /SKIP TO HANDLE 'TOO BIG' /A084 JMP WPSCEX /GO TO SET UP FOR NORMAL EXIT /A084 CSZERR, AC0004 /CASE FOR ERROR MENU /A084 CDIMNU /IN MENU FLD /A084 DCA I (MUBUF+MNTMP1) /FOR SPECIAL CASE IN PP2 ERROR MENU /A084 CDFMYF /THIS IS WHERE WE WANT TO COME BACK TO /A084 JMS I MNUCAL /GO PUT UP ERROR MSG /A084 DLMPP2 /ERROR MENU BLK /A084 CRTERR, CDFMNU /SEE WHAT HAPPENED THERE /A083 TAD I (MUBUF+MNTMP6) /WAS SET TO 0 IF GOLD MENU /A083 CDFMYF /RETURN TO WHERE WE ARE /A083 SNA CLA /SKIP TO GIVE ANOTHER TRY /A083 JMP POSTEX /GOES BACK TO MM /A083 JMP RESRPT /REPEAT "RESULT" PROMPT IF NO GOLDMENU /A083 /-------------------- PAGE CULACT, 0 CULFNM, 0 CULLFN, ZBLOCK STRLEN CULFFN, ZBLOCK STRLEN CULRFN, ZBLOCK STRLEN CULSTP, IFDEF ENGLSH < TEXT 'INSERTED AT THE TOP OF ' > IFDEF ITALIAN < TEXT "INSERITO ALL'INIZIO DEL "> IFDEF DUTCH < TEXT "TOEVOEGEN AAN BOVENKANT VAN " > IFDEF V30NOR < TEXT 'TILF\XYET P\E TOPPEN AV'> /A088 IFDEF V30SWE < TEXT 'INSATT I B\VRJAN AV'> CULSBT, IFDEF ENGLSH < TEXT 'ADDED TO THE BOTTOM OF ' > IFDEF ITALIAN < TEXT "INSERITO ALLA FINE DEL " > IFDEF V30NOR /A088 IFDEF V30SWE < TEXT 'INSATT I SLUTET AV'> /EACH OF THE FOLLOWING TEXT STATEMENTS MUST HAVE AN EVEN /NUMBER OF CHARACTERS IF IT IS FOLLOWED BY A *.-1 CULS1, IFDEF ENGLSH < TEXT '^P!E^P&SELECTING FROM LIST DOCUMENT: (^D.^D) ^A ' *.-1 TEXT '^P&USING SELECTION SPECIFICATION: (^D.^D) ^A ' *.-1 TEXT '^P&THE SELECTED RECORDS WILL BE MERGED WITH DOCUMENT: (^D.^D) ' *.-1 TEXT ' ^A^P&THE RESULT WILL BE ' > /END IFDEF ENGLISH IFDEF ITALIAN < TEXT '^P!E^P&DOCUMENTO LISTA: (^D.^D) ^A ' *.-1 TEXT '^P&DOCUMENTO SPECIFICA DI SELEZIONE: (^D.^D) ^A ' *.-1 TEXT '^P&DOCUMENTO MODULO: (^D.^D) ' *.-1 TEXT ' ^A^P&DOCUMENTO USCITA ' > IFDEF V30NOR < TEXT '^P!E^P&VELGER UT FRA LISTEDOKUMENT: (^D.^D) ^A ' *.-1 TEXT '^P&BRUKER UTVALGSSPESIFIKASJON: (^D.^D) ^A ' *.-1 TEXT '^P&UTVALGTE POSTER BLIR SL\ETT SAMMEN MED DOKUMENT: (^D.^D) ' *.-1 TEXT ' ^A^P&RESULTATET BLIR' > /END IFDEF V30NOR IFDEF V30SWE < TEXT '^P!E^P&V\DLJ I REGISTERDOKUMENTET: (^D.^D) ^A ' *.-1 TEXT '^P&ANV\DND URVALSSPECIFIKATIONEN: (^D.^D) ^A ' *.-1 TEXT '^P&DE VALDA POSTERNA KOMMER ATT L\DGGAS IN I DOKUMENTET: (^D.^D) ' *.-1 TEXT '^A^P&SLUTRESULTATET BLIR: ' > /END IFDEF V30SWE CULS5, IFDEF ENGLSH < TEXT 'PRINTED' > IFDEF ITALIAN < TEXT /VIENE STAMPATO/ > IFDEF V30NOR < TEXT 'SKREVET UT'> /A088 IFDEF V30SWE < TEXT 'UTSKRIVET'> CULS6, IFDEF ENGLSH < TEXT '!SDOCUMENT: (^D.^D) ^A' > IFDEF ITALIAN < TEXT /!S: (^D.^D) ^A/ > IFDEF DUTCH < TEXT "!SDOCUMENT: (^D.^D) ^A" > IFDEF V30NOR< TEXT "!SDOKUMENT: (^D.^D) ^A" > /A088 IFDEF V30SWE < TEXT 'DOKUMENT'> CULSPN, ZBLOCK STRLEN /ONE OF THE LIST PROCESSING BUFFERS CURWST, TEXT '^^A^<#>^D^<>^A' CURWBN, ZBLOCK 4 /THIS ROUTINE MAKES SURE THAT THE PRINTER TYPE SPECIFIED FOR LIST /M044 /PROCESSING IS ON LINE. THE RETURNS ARE: /M044 / AC = 0 PRINTER (OR HOST) IS ONLINE. /M044 / AC = 1 PRINTER ON LINE DOESN'T MATCH DD /M044 / AC = 2 REQUESTED PRINTER TYPE NOT ONLINE /M044 CULCKP, XX TAD CUQOPT /GET CUQPRT OPTION. SEE IF CALLED FROM LP/A044 SNA CLA /SKIP IF CALLED FROM LIST PROCESSING. /A044 JMP I CULCKP /RETURN 0 (OK RETURN) IF REGULAR QUEING A DOC /A044 /WE MUST NOW MAP THE SETTINGS WHICH ARE POSSIBLE ON THE RL BASED SYSTEMS /TO MORE APPROPRIATE SETTINGS CDFMNU AC3777 /GET DOCUMENT DESTINATION AND MASK OUT /A013 AND I (MUBUF+MNPROP+23)/SIGN BIT TO ASSURE IT IS POSITIVE /A013 CDFMYF /CHANGE DATA FIELD TO MY FIELD /A013 DCA T1 /AND STORE ID TAD T1 /AND RETRIEVE IT AGAIN TAD (DDTABL-DDEND) /USE IT AS CHECK IF OUT OF RANGE OF TABL/A013 SMA CLA /IS PRQPNT OUT OF RANGE? /M044 JMP DDCHK /JMP IF YES. USE DEFAULT VALUE. /M044 /JUMP HERE IF PRQPNT IS IN THE RANGE OF OUR TABLE TAD (DDTABL) /GET ADDRESS OF TABLE OF DOCUMENT DEST'S/A013 TAD T1 /USE CURRENT DESTINATION AS OFFSET /A013 DCA T1 /STORE ADDRESS OF NEW DESTINATION /A013 TAD I T1 /PUT NEW DESTINATION INTO AC /A013 DDCHK, TAD DDEFAU /ADD IN DEFAULT BAIS. /A044 DCA T2 /SAVE DOC'S DD. /A044 TAD T2 /SEE IF DD HOST. /A044 TAD (-DHOST) /A044 SNA CLA /SKIP IF NO. GET PRINTER ID. /A044 JMP CHKHST /DO HOST CHECKING. /A044 TAD T2 /GET DECMATE DOC DEST /A074 CDFPRT /IN THE PRINTER FIELD DCA I (PRQPNT) /SET THE DOCUMENT DESTINATION /A074 TAD I (PRTID) /GET ADDRESS OF PRINTER ID CDFMYF DCA T1 /SAVE TO CALL THRU. /A034 CIFPRT /SET UP TO DO A CALL TO IT. /A034 AC0001 /SPECIFY PRINTER ID /A034 JMS I T1 /CALL PRTRID ROUTINE /A034 SKP /SUCCESS RETURN. PRINTER IS ONLINE. /A034 JMP CULCK2 /ERROR RETURN. NON-EXISTENT PRINTER. /A034 AC0002 /SPECIFY CHECK DOCUMENT DESTINATION /A074 CIFPRT /IN THE PRINTER FIELD /A074 JMS I T1 /CALL TO CHECK DOCUMENT DESTINATION /A074 JMP CULRTN /DD OK /A074 JMP CULCK1 /WRONG DD /A074 CHKHST, CDFSYS /CMONLN IS IN SYSTEM FIELD /A060 TAD I (CMONLN) /GET THE COMM FLAG WORD /A060 CDFMYF /A060 SZA CLA /SKIP IF NO COMM HARDWARE /A060 JMP CULRTN /COMM PRESENT. RETURN TO CALLER. /A044 CULCK2, IAC /RETURN AC = 2. NON-EXISTENT PRINTER ERROR/A044 CULCK1, IAC /RETURN AC = 1. PRINTER NOT ATTACHED ERROR/A044 CULRTN, JMP I CULCKP /EXIT /CHECK FOR INDEX BLOCK=0 /IF 0 EXIT.... CAN OCCUR IF DISKETTE DOES NOT CONTAIN / DOCUMENT SPECIFIED IN DEFAULT / OCCURS IF INDEX SET AT DOC THEN DISKETTE CHANGED / AND PRINT COMMAND REQUESTEDUSING DEFAULT CUINDX, 0 /A055 JMS QURX /A055 CLA /A055 TAD QUQBLK+RXQBLK /GET HDR BLK /A055 SZA CLA /IS 0? /A055 JMP I CUINDX /NO..CONT. /A055 JMP CUQRET /YES GO TO EXIT(IGNORE) /A055 /-------------------- PAGE CURWPQ, XX /ROUTINE TO STORE AND RECALL THE PRINTER QUEUE CLA CDFMNU TAD I (MUBUF+MNFNO) /PICK UP FILE NO. FROM MENU CDFMYF DCA CURWFN /AND SAVE CDFMNU AC7776 TAD I (MUBUF+MNTMP3) /PICK UP TMP 3 TO SEE WHETHER RL OR SL COMMAND CDFMYF SZA CLA /1= RL, 2 = SL JMP CURWRL /GO DO RL STUFF CDFMNU TAD I (MUBUF+MNTMP1) /TMP1 HAS TOP, BOTTOM, OR OVERWRITE CDFMYF DCA CURWOP AC0002 /NO, TEST IF NEED TO CREATE FILE TAD CURWOP SNA CLA JMS CURWCR /YES, CREATE -- WON'T RETURN IF USER GOLD MENU'S OUT TAD CURWFN /GET FILE AND DRIVE NOS. MQL /SET UP FOR SCROLL CALL TAD CURWOP /GET TOP, BOTTOM, OVERWRITE OPTION CIFFIO /A026 FILEIO /A026 XDSKIN /OPEN FILE TAD CURWFN /STRIP OUT DRIVE NO. BSW RTR AND (17) CIA /NEGATE FOR TEST LATER DCA CURWDR JMS CURDQB /GET Q NAMES BLOCK RXERD TAD (CURLST) /SET TO START OF LIST OF DOCS TO BE DELETED DCA CURLPP /FROM THE PRINT QUEUE CDFMNU TAD I (PQFRST) CDFMYF /GET PTR TO FIRST ENTRY SNA JMP CURWCL /NOTHING THERE, CLOSE FILE DCA CURWPT /SAVE PTR CDFMNU TAD I (PQADDR) CDFMYF /GET ADDR OF FIRST POSSIBLE Q ENTRY CIA DCA CURWDF /SAVE FOR LATER JMS STOPPR /ENSURE THAT THE PRINTER IS STOPPED CURWLP, CDFMNU TAD I CURWPT CDFMYF /GET FIRST ENTRY SNA JMP CURWCL /EMPTY, CLOSE FILE DCA CURWNO /SAVE FILE NO. TAD CURWNO /PICK OUT DRIVE NO. BSW RTR AND (17) TAD CURWDR /AND COMPARE WITH DRIVE WE ARE STORING ON SZA CLA /SAME ? JMP CURMNX /NO, GET NEXT ENTRY TAD CURWNO /YES, FIRST PUT INTO LIST OF FILES TO DELETE DCA I CURLPP ISZ CURLPP TAD CURWNO /YES, JUST SAVE FILE NO. WITHOUT DRIVE AND P377 DCA CURWNO TAD CURWPT /FIND NAME IN BLOCK TAD CURWDF CLL RTL CLL RTL TAD (CUB1) DCA CURWNM /AND SAVE PTR TO IT FOR IOA CALL CIFMNU JMS I IOACAL CUPOTD /OUTPUT TO FILE CURWST CURWNM, 0 /FOR PTR TO FILE NAME CURWNO, 0 /FOR FILE NO. CURWNL, CURWLF /NEWLINE CURMNX, ISZ CURWPT /GET FLINK CDFMNU TAD I CURWPT CDFMYF SNA JMP CURWCL /END,CLOSE FILE DCA CURWPT /SAVE AS NEW PTR JMS STOPPR /ENSURE THAT PRINTER IS STOPPED JMP CURWLP /AND TRY AGAIN CURWLF, 12 0 /DELETE THE AUTOMATIC RESUME SO THAT THE USER CAN DECIDE WHAT /A046 /ACTION HE WISHES TO TAKE. HE MAY WISH TO LOOK AT THE QUEUE, /A046 /CREATE ANOTHER SL DOCUMENT ON ANOTHER DOCUMENT DISK, /A046 /OR KILL THE FIRST DOCUMENT IN THE QUEUE BECAUSE IT IS GOING /A046 /TO BE PRINTED LATER. /A046 CURWRT, CLA JMP I CURWPQ /AND RETURN /THIS IS THE TABLE OF DOCUMENT DESTINATIONS POSSIBLE ON THE RL BASED SYSTEMS /WHICH WE ARE MAINTAINING COMPATABILITY WITH, IF NEW PRINTERS ARE PUT /ONTO A SYSTEM THEN THIS TABLE CAN BE EASILY BE CHANGED OR CONDITIONALIZED /THIS TABLE IS USED IN MN1 WHEN DISLPAYING DOCUMENT DESTINATIONS AND IN /WPRTOV.PA WHEN DECIDING WHICH PRINTER TO USE. /HOWEVER, HERE WE ARE MAPPING DOCUMENT DESTINATIONS TO HANDLER TYPES WHEREAS /IN MN1.PA AND WPRTOV.PA WE ARE MAPPING DOCUMENT DESTINATIONS TO DOCUMENT /DESTINATIONS /POSSIBLE DESTINATION TYPES ARE: / LQP=0 /PARALLEL LETTER QUALITY PRINTER / DP=1 /PARALLEL DRAFT PRINTER / HOST=2 /SERIAL COMMUNICATIONS / SERIAL=3 /SERIAL LQP /POSSIBLE DOCUMENT DESTINATIONS ARE / DLPQ (PARALLEL LETTER QUALITY PRINTER) / DSQ1 (SERIAL LETTER QUALITY PRINTER) / DSQ2 (TWO HEADED SERIAL LETTER QUALITY PRINTER) / DDP (PARALLEL DRAFT PRINTER) / DDP2 (SERIAL DRAFT PRINTER) / DHOST (SERIAL COMMUNICATIONS PORT) DFLTV=DSQ1 /M044 DDTABL, DSQ1-DFLTV /0 (LQP1)ON RL SYSTEMS) /M044 DDP2-DFLTV /1 (DP1 ON RL SYSTEMS) /M044 DHOST-DFLTV /2 (HOST1 ON RL SYSTEMS) /M044 DDP2-DFLTV /3 (DP2 ON RL SYSTEMS) /M044 DSQ1-DFLTV /4 (LQP2 ON RL SYSTEMS) /M044 DSQ1-DFLTV /5 (LQP3 ON RL SYSTEMS) /M044 DSQ1-DFLTV /6 (LQP4 ON RL SYSTEMS) /M044 DHOST-DFLTV /7 (HOST2 ON RL SYSTEMS) /M044 DHOST-DFLTV /10 (HOST3 ON RL SYSTEMS) /M044 DHOST-DFLTV /11 (HOST4 ON RL SYSTEMS) /M044 DSQ1-DFLTV /12 (NULL DEVICE ON RL SYSTEMS) /M044 DDEFAU, /THIS IS THE DEFAULT. IF THE ORIGINAL DOCUMENT DESTINATION IS /OUT OF RANGE THAN THIS DESTINATION IS USED DDEND, DFLTV /13 (LQP5 ON RL SYSTEMS) /M044 /14, 15 AND 16 ALSO MAP TO SERIAL BUT SINCE THEY FALL OUT OF /RANGE OF THE TABLE THEY GET MAPPED TO THE DEFAULT (DDEFAU) /WHICH HAPPENS TO BE SERIAL ALSO /A013 CURWFN, 0 CURWOP, 0 CURWDR, 0 CURWDF, 0 CURWPT, 0 CURLPP, 0 /POINTER INTO 'CURLST' /-------------------- PAGE CURWCL, CIFFIO /A026 FILEIO /A026 XDSKCL /CLOSE DOCUMENT FILE CLA /CALCULATE NEGATIVE NUMBER OF DOCUMENTS TO DELETE JMS STOPPR /ENSURE THAT PRINTER IS STOPPED TAD CURLPP /=-(ADDRESS OF LAST ENTRY - ADDRESS OF FIRST CIA /ENTRY) TAD (CURLST) SNA /ANY TO DELETE? JMP CURWRT /NONE, GO RETURN DCA CURLEN /YES, INITIALIZE AND THEN DELETE DOCUMENT CDFMNU TAD I (PQFRST) CDFMYF DCA CURPT2 /ADDRESS OF NEXT ENTRY TO CONSIDER TAD (PQFRST) /ADDRESS TO UPDATE IF A DELETION IS DONE DCA CURDF2 IAC /SET FLAG SAYING POTENTIAL FIRST DELETE DCA CURWFL /DELETE ENTRIES FROM THE QUEUE. GET THE NEXT QUEUE ENTRY AND SEE IF /IT IS ON THE LIST BUILT EARLIER. IF SO AND 'CURWFL' IS SET TO INDICATE /THAT THE FIRST ENTRY ON OUR QUEUE IS BEING PRINTED AND THIS IS THE FIRST /PASS THRU THE LOOP ('CURWFL' = 1), SET TO -1 INDICATING THAT THE FIRST /ENTRY IS ELIGIBLE TO BE DELETED AT THE END BY THE PRINTER. OTHERWISE DELETE /ANY MATCHES DIRECTLY. CURLP1, CDFMNU TAD I CURPT2 CDFMYF CIA DCA T1 /SAVE FILE NUMBER TO COMPARE AGAINST ISZ CURPT2 /INC POINTER TO POINT TO FLINK WORD TAD CURLEN DCA T2 /COUNTER OF NUMBER OF PASSES TAD (CURLST) /POINTER TO NEXT DELETION LIST ENTRY DCA T3 /COMPARE THE Q ENTRY WITH THE LIST CURLP2, TAD I T3 TAD T1 SNA CLA /MATCH? JMP CUROUT /YES, EXIT ISZ T3 ISZ T2 /NO, GET NEXT LIST ENTRY AND CONTINUE JMP CURLP2 /IF ANY REMAIN, LOOP JMP CURNX0 /ELSE GET NEXT Q ENTRY CUROUT, AC7777 TAD CURWFL SZA /FIRST ENTRY AND OUR DOC PRINTING?? JMP CUROU2 /NO, GO DELETE ENTRY DIRECTLY AC7777 /SET FLAG TO EVICT PRINTER JOB LATER DCA CURWFL JMP CURNX0 /GO GET NEXT Q ENTRY CUROU2, AC7777 /GET POINTER TO FIRST WORD OF Q ENTRY TAD CURPT2 DCA T1 CDFMNU TAD I CURPT2 /COPY FLINK TO LAST Q ENTRY DCA I CURDF2 DCA I T1 /ZERO FIRST WORD OF Q ENTRY BEING DELETED CDFMYF JMP CURNXT /SKIP OVER CURRENT Q ENTRY CURNX0, TAD CURPT2 DCA CURDF2 /UPDATE POINTER TO FLINK TO BE MODIFIED /DURING A DELETION /PICK UP NEXT Q ENTRY. CURNXT, CDFMNU TAD I CURDF2 /GET FLINK CDFMYF DCA CURPT2 /UPDATE CURRENT ENTRY POINTER AC7777 /IF 'CURWFL' = 1 (INDICATING FIRST PASS THRU LOOP), TAD CURWFL SNA CLA DCA CURWFL /THEN RESET FLAG TO ZERO TAD CURPT2 /CHECK FOR END OF Q SZA CLA /DONE? JMP CURLP1 /NO, LOOP /CLEAN UP AND RETURN. UPDATE 'PQLAST', AND, IF INDICATED, EVICT THE JOB /CURRENTLY PRINTING. AC7777 /GET ADDRESS OF FIRST WORD OF LAST Q ENTRY FOR TAD CURDF2 /'PQLAST' CDFMNU DCA I (PQLAST) CDFMYF AC0001 TAD CURWFL SZA CLA /OUR JOB CURRENTLY PRINTING? JMP CURWRT /NO, JUST RETURN TAD (-7) /ONLY EVICT PRINTING JOB WHEN WAITING FOR NO /SUCH PRINTER CDFPRT TAD I (PRSTTS) CDFMYF SZA CLA /WAITING FOR NO SUCH PRINTER? JMP CURWRT /NO, EXIT AC0002 /EVICT PRINTING JOB JMS STRTPR JMS WAITPR JMP CURWRT /RETURN CURLEN, 0 /NEG NUMBER OF ENTRIES IN DELETE LIST CURWFL, 0 /FLAG, 1 WHEN THIS IS FIRST Q ENTRY BEING CONSIDERED /AND OUR JOB IS PRINTING /- -1 WHEN THE PRINTING JOB IS ALSO BEING SAVED /WITH THE PRINT LIST /- 0 OTHERWISE CURDF2, 0 /POINTER TO FLINK WORD OF LAST Q ENTRY CONSIDERED CURPT2, 0 /CURRENT ENTRY POINTER (SOEMTIMES POINTS TO FIRST WORD /OF ENTRY, SOMETIMES TO SECOND WORD) CURPRT, XX /RESUME PRINTER CDFPRT /CDF TO PRINTER TAD I (PRSTOP) /WAS IT STOPPED? CDFMYF SNA CLA JMP I CURPRT /JUST RETURN, IF NOT AC7777 /INITIALIZE RESULT /A058 DCA X5 /A058 CDFPRT /A058 TAD I (PRSTTS) /GET STOP REASON /A058 JMS VACHK /DO VALID ACTION CHECK /A058 AND (R) /SEE IF RESUME IS ALLOWED /A058 SNA CLA /SKIP IF SO /A058 JMP I CURPRT /ELSE JUST RETURN /A058 AC0006 /LOAD RESUME CODE JMS STRTPR /RESTART IT JMP I CURPRT /MO83 MOVED HERE TO MAKE ROOM ON CPOSTP PAGE /AO83 /STOPPR SIMPLIFIED DUE TO STANDARDIZATION ON NEW FLABUZ ROUTINE /A071 /ALSO CONTAINS JWAIT SO PRINTER CODE CAN SEE STOP FLAG BEFORE THE /A071 /REST OF THE COMMAND UTITLITY PROCESSES /A071 STOPPR, XX /STOP THE PRINTER AC0001 /SET STOP FLAG /A071 CDFPRT /IN THE PRINTER FIELD /A071 DCA I (PRSTOP) /FOR REASON GIVEN IN COMMENTS ABOVE /A071 CDFMYF /BACK TO OUR FIELD /A071 CIFSYS /AND DO A JWAIT /A071 JWAIT /A071 JMP I STOPPR /-------------------- PAGE CURWCR, XX /CREATES A FILE USING MENU INFO JMS ADRCRT /DO CREATE JMP CURWRT /ERROR CAN'T CREATE /ADRCRT RETURNS WITH CUPFNO IN AC DCA CURWFN AC7777 /SET OVERWRITE DCA CURWOP JMP I CURWCR /AND RETURN CURWRL, TAD CURWFN /GET FILE NO. CIFFIO /A026 FILEIO /A026 XRDFIN /AND OPEN IT JMS CURDQB /READ Q BLOCK NAMES RXERD TAD CURWFN /SET DRIVE NO. FOR QURX BSW RTR JMS CUPDRS CURWRR, JMS CURWGN /GET FILE NAME JMP CURWEX /EOF JMP CURWEX /ERR ("READ ERROR") RETURN. /A036 JMS CURWGF /GET FILE NO. JMP CURWEX /EOF JMP CURWRR /ERROR, TRY NEXT ENTRY DCA CURWFR /SAVE FILE NO. TAD CURWFR /SET FILE NO. DCA QUQBLK+RXQFNO TAD (RXEGF) /GET FIRST BOCK DCA QUQBLK+RXQFNC JMS QURX CLA TAD QUQBLK+RXQBLK /SEE IF FILE EXISTS SNA CLA JMP CURWRR /NO, TRY NEXT ONE TAD (RXERD) /YEX, READ HEADER DCA QUQBLK+RXQFNC TAD (CUB2) DCA QUQBLK+RXQBAD JMS QURX CLA TAD CUB2+FHPSET /SEE IF PRINTER SETTINGS INIT'ED SNA CLA JMP CURWRR /NO, TRY NEXT ONE TAD CURWFN /YES, GET FILE NO. AND (7400) /AND OUT FILE NO. TAD CURWFR /OR FILE NO. WITH DRIVE NO. DCA CURWFR /AND STASH IT CDFMNU /START TO Q TAD (-PQSZ) /SAVE SIZE DCA T1 TAD I (PQADDR) /AND PTR TO FIRST ENTRY DCA T2 CURWQ1, TAD I T2 /GET A FREE ENTRY SNA CLA JMP CURWQ2 /FOUND A FREE ONE ISZ T2 /SKIP FILE NO. ENTRY ISZ T2 /AND FLINK ISZ T1 /ANY ROOM LEFT JMP CURWQ1 /YES TRY NEXT ENTRY CDFMYF /NO, CLEAN UP AND LEAVE CURWEX, JMS CURDQB /WRITE OUT Q NAME BLOCK RXEWT+2000 JMP CURWRT /AND RETURN CURWQ2, TAD CURWFR /GET FILE NO. DCA I T2 /AND SAVE IN Q TAD I (PQLAST) IAC DCA T1 TAD T2 /MAKE US LAST ENTRY DCA I T1 TAD T2 DCA I (PQLAST) ISZ T2 DCA I T2 /CLEAR MY FLINK TAD I (PQADDR) /CALCULATE POSITION IN Q NAME BLOCK CDFMYF CIA TAD T2 CLL RTL CLL RTL AND (3740) TAD (CUB1) DCA CURWQ5 /AN SAVE IT FOR COPY CALL JMS CUCOPY /COPY TO Q NAME BLOCK CURWBF CDFMYF CURWQ5, 0 CDFMYF 37 /ONLY FIRST 31 CHARS. COUNT JMP CURWRR /GO GET NEXT ENTRY CURWFR, 0 /-------------------- PAGE /READS THE FIRST 31 CHARS OF THE NEXT FILE NAME /INTO CURWBF. /CALLED BY: /JMS CURWGN /EOF END OF FILE RETURN /ERR (READ) ERROR RETURN /A036 /REGULAR RETURN (AC=0) CURWGN, XX CLA CURWG1, JMS CURGET /GET NEXT CHAR ISZ CURWGN /ERR RETURN. /A036 JMP I CURWGN /EOF TAD (-74) SZA CLA JMP CURWG1 /NOT A LEFT ANGLE BRACKET, KEEP LOOKING JMS CURGET /NEXT CHAR ISZ CURWGN /ERR RETURN. /A036 JMP I CURWGN /EOF TAD (-"N+200) SNA JMP CURWG2 /MATCHED A N, KEEP GOING TAD ("N-200-"N+140) /TRY LOWER CASE N SZA CLA JMP CURWG1 /NO, BACK TO THE BEGINNING CURWG2, JMS CURGET /GET CHAR ISZ CURWGN /ERR RETURN. /A036 JMP I CURWGN TAD (-76) SZA CLA JMP CURWG1 /NOT A RIGHT ANGLE BRACKET, START OVER TAD (CURWBF-1) /MATCHED, SET UP FOR COPYING NAME DCA X0 TAD (-37) /ONLY COPY FIRST 31 CHARS DCA T1 CURWG3, JMS CURGET /GET NEXT CHAR ISZ CURWGN /ERR RETURN. /A036 JMP I CURWGN /EOF TAD (-74) /CHECK IF LEFT ANGLE BRACKET MEANING DONE SNA JMP CURWG4 /YES, RETURN TAD (74) /MAKE BACK TO INITIAL CHAR DCA I X0 /AND STORE IT ISZ T1 /NEED MORE ? JMP CURWG3 /YES CURWG4, CLA DCA I X0 /STORE END OF STRING ISZ CURWGN /BUMP OVER EOF RETURN. /A039 ISZ CURWGN /BUMP FOR GOOD RETURN JMP I CURWGN /GET THE NEXT CHAR FROM THE FILE. /CALLED BY: /JMS CURGET /ERR RETURN /A036 /EOF RETURN /REGULAR RETURN (AC CONTAINS CHAR) CURGET, XX CLA CIFFIO /A026 FILEIO /A026 XRDFNC SZA SMA /SKIP IF CHAR. /A036 ISZ CURGET /CHAR. /A036 SMA /SKIP IF ERROR. /A036 ISZ CURGET /EOF OR CHAR. /A036 SPA CLA /RETURN 0 FOR ERROR CHAR. /A036 AND P177 JMP I CURGET /GETS THE NEXT FILE NO. AND RETURNS IT IN THE AC. /CALLED BY: /JMS CURWGF /EOF RETURN /ERROR RETURN /REGULAR RETURN (AC=FILE NO.) CURWGF, XX TAD T1 /NEG COUNT OF WORDS LEFT IN NAME BUFFER /A050 SZA CLA /SKIP IF: BUFFER FULL /A050 /IF THE BUFFER IS FULL, THEN WE ARE /A050 /POINTING AT THE LEFT BRACKET /A050 JMP CURWH0 /MAY HAVE ALREADY FOUND INITIAL LEFT /ANGLE BRACKET SO SKIP OVER TEST /FIRST TIME THROUGH CURWH1, JMS CURGET /GET NEXT CHAR ISZ CURWGF /ERR /A036 JMP I CURWGF /EOF TAD (-74) SZA CLA JMP CURWH1 /NOT A LEFT ANGLE BRACKET, KEEP LOOKING CURWH0, JMS CURGET /NEXT CHAR ISZ CURWGF /ERR /A036 JMP I CURWGF /EOF TAD (-"#+200) SZA CLA JMP CURWH1 /NO, BACK TO THE BEGINNING CURWH2, JMS CURGET /GET CHAR ISZ CURWGF /ERR /A036 JMP I CURWGF TAD (-76) SZA CLA JMP CURWH1 /NOT A RIGHT ANGLE BRACKET, START OVER TAD (-4) DCA T1 TAD (CURWBN-1) DCA X0 CURWH3, JMS CURGET ISZ CURWGF /ERR /A036 JMP I CURWGF TAD (-74) /SEE IF LEFT ANGLE BRACKET SNA JMP CURWH4 /YES, ALL DONE TAD (74) /GET CHAR BACK DCA I X0 /AND STORE IT ISZ T1 /NO. MUST BE LESS 1000 JMP CURWH3 JMP CURWH5 CURWH4, DCA I X0 /STORE TRAILING 0 CIFMNU JMS I CVDCAL /CONVERT TO BINARY CURWBN SKP /ERROR RETURN ISZ CURWGF /CONVERTED BUMP RETURN TWICE CURWH5, ISZ CURWGF JMP I CURWGF /THIS ROUTINE CHECKS THE NAME BEING STORED IN THE DOCUMENT CONTAINING /THE PRINT QUEUE. IT MAKES SURE THAT THE LAST CHARACTER IN THE NAME /IS A SPACE (FOR DISPLAY PURPOSES). IF A NAME IS LESS THAN 30 CHAR /IN LENGTH, THEIR WILL BE A TRAILING SPACE, HOWEVER IF THE NAME IS /LONGER THAN 31 CHAR, THE NAME IS TRUNCATED AND A SPACE MUST BE /ADDED. X1 IS LEFT OVER FROM CUCOPY AND WILL BE POINTING TO THE /LAST LEGAL CHAR IN THE NAME BUFFER (WORD 37). CUQWO6, XX /RETURN ADDRESS TAD X1 /POINTER TO THE 31ST CHAR IN THE DOC NAME DCA T1 /SAVE THE POINTER TAD I T1 /GET THE CHAR TAD (-40) /COMPARE TO A SPACE SPA SNA CLA /SKIP IF: CHAR IS .GT. A SPACE JMP CUQWO7 /CHAR IS A NULL OR A SPACE TAD (40) /CHAR IS TO BE REPLACED BY A SPACE DCA I T1 CUQWO7, JMP I CUQWO6 /RETURN TO CALLER /-------------------- PAGE /***********************************************************************/ / CUQMCK--CHECK VERTICAL MARGINS / PS-TM-BM MUST BE 1 OR GREATER, OR ELSE THE PRINT SPOOLER WILL DO / NOTHING EXCEPT PRINT HEADERS AND FOOTERS AND PAGE NUMBERS, / WHICH IS VERY ALARMING /***********************************************************************/ PRQTMG=4 /TOP MARGIN OFFSET PRQBMG=5 /BOTTOM MARGIN OFFSET PAGSIZ=6 /PAGE SIZE OFFSET CUQMCK, XX CLA CDFMNU TAD I (MUBUF+MNPROP+PRQTMG) TAD I (MUBUF+MNPROP+PRQBMG) CIA TAD I (MUBUF+MNPROP+PAGSIZ) /AC=PS-TM-BM CDFMYF SMA SZA CLA /WAS PS GREATER? JMP I CUQMCK /YES, RETURN CDFMNU /MAP MENU AREA BACK. /A070 AC0001 /SET MNTMP1 TO 1 FOR ERROR MESSAGE. /A070 DCA I (MUBUF+MNTMP1) /A070 CDFMYF /BACK TO OUR FIELD. /A070 CIFMNU JMS I MNUCAL DLMPR1 /PRINT ERROR MENU CLA JMP CUQCMU /ALWAYS RETURN ONLY TO PRINT MENU / WPCU2 - COMMAND UTILITIES II FLAGGED ESCAPE SEQUENCES / 043 Mart 08-jul-85 warm restart on return from GRAPHICS / to restore PANEL etc / 042 EMcD 06-Mar-85 Save term as 8bit Lvl 2 / 041 TCW 06-SEP-84 Disable Modem if not present / 040 DFB 31-AUG-84 FIX TO AUTO CALL VERIFY AT WARM STARTUP / 039 TCW 27-AUG-84 Change to Integral Modem init. routine / 038 WCE 23-AUG-84 ADD CHECKS FOR DMI SYSTEM - NO PRQ'S / REORGANIZED WPCU2 LAYOUT / 037 WCE 20-AUG-84 CHANGES FOR NEW RD MENU VALUES / 036 DFB 18-AUG-84 FIX FIX TO AUTO CALL VERIFY / 035 DFB 08-AUG-84 FIX TO AUTO CALL VERIFY AT WARM STARTUP / 034 DFB 07-AUG-84 FIX TO DATE FOR MASTER MENU VER 1.0 / 033 JAC 05-JUL-84 FIX UP F11 FOR TECH CHARS / 032 DFB 02-JUL-84 DATE FORMAT SUPPORT FROM MASTER MENU / 031 TCW 29-JUN-84 CLOCK ADJUSTMENT FOR #030 / 030 TCW 26-JUN-84 INTEGRAL MODEM SUPPORT / 029 JAC 19-JUN-84 100 UDK DEVELOPMENT / 028 WCE 06-JUN-84 CHANGES FOR BRITISH DATE & CURRENCY / 027 TCW 02-MAR-84 INIT. COMM LINE ON WARM BOOT / / WRITES OUT WPCU2 / / ** NOTE -- WPEDIT USES THIS OVERLAY, AND KNOW ABOUT ITS LENGTH AND ENTRIES ** / *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 DLOCU2 / DISK BLOCK TO WRITE 0 / STARTING AT MEMORY ADDRESS CDF 20 / IN THIS FIELD -DSOCU2 / FOR THIS MANY DISK BLOCKS 0 / END OF LIST INDICATOR CU2FLD= 4 / CU2 FIELD (THIS FIELD) /A032 PMFLD= 6 / PANEL MEMORY FIELD=6 /A032 WRPMEM= 4000 / WRITE PANEL MEM FRM MAIN (40XY)Y=INPUT FLD /A032 RDPMEM= 5000 / READ PANEL MEM. TO MAIN (50XY)Y=INPUT FLD /A032 CDFMYF= CDFBUF / DEFINE INSTRUCTION TO RETURN TO THIS FIELD CLKSK2= 6131 / DECMATE II CLOCK IOT PRQ3= 6236 / COMMAND CODE /A032 H2DTR= 6362 / DEFINE MODEM CONTROL REG. IOT /A030 PMDATE= 7600 / PANEL MEMORY DATE LOCATION /A032 PMSIGN= PMDATE+143+6 / LOC OF SIGNATURE IN P.M. (ALLOW FOR TIME) /A032 DTLEN= -10 / -LENGTH OF DATE FIELD"MM/DD/YY" /A032 /D038 SIGNAT= -7531 / -SIGNATURE FOR MASTER MENU /A032 /D038 SLASH= 257 / ASCII SLASH /A032 /D038 PR3= 6236 / PANEL MEMORY REQUEST SEQUENCE #3 FIELD 2 / FIELD TO ASSEMBLE THIS CODE INTO *76 / LOCATION OF TEMP REGISTER NUMBER TWO (T2) CUDTMP, 0 / LOCATION FOR INTERNAL DATA VERSION /A037 0 / LOCATION FOR INTERNAL ROM VERSION /A037 *100 / FIRST 100 LOCATIONS ARE USED FOR THE SYSTEM CUDEXM, -EXPMN / SOFTWARE EXPIRATION MONTH /A038 CUDEXY, -EXPYR / SOFTWARE EXPIRATION YEAR /A038 CUDSYR, 0 CUDSMO, 0 CUDSDY, 0 CUDSMN, 0 CUDSHR, 0 F1DATE, ZBLOCK 2 / DATE FIELD 1 /A032 "/ / ASCII CODE FOR A "/" /A032 F2DATE, ZBLOCK 2 / DATE FIELD 2 /A032 "/ / ASCII CODE FOR A "/" /A032 F3DATE, ZBLOCK 2 / DATE FIELD 3 /A032 CUDFM4, MNFM4X / INTEGRAL MODEM BIT /A038 CUDC7, 7 / CONSTANT VALUE OF 7 /A038 CUDTP1, MUBUF+MNTMP1 / LOCATION OF MNTMP1 IN MENU FIELD /A038 CUDFMT, MUBUF+MNFMAT / LOCATION OF MNFMAT IN MENU FIELD /A038 CUDONL, CMONLN / LOCATION OF COM ON LINE FLAG WORD /A038 CUDDMT, DAMNTH / LOCATION OF DAY OF MONTH IN SYS FIELD /A038 CUDMTH, MONTH / LOCATION OF MONTH VALUE IN SYS FIELD /A038 CUDEAR, YEAR / LOCATION OF YEAR VALUE IN SYS FIELD /A038 CUDERD, RXERD / DISK HANDLER READ FUNCTION CODE /A038 CUDEWT, RXEWT+2000 / DISK HANDLER WRITE FUNCTION CODE /A038 CUDFOW, CUDBUF+MNOPTC-MNABRV / LOCATION OF MNOPTC FEATURE OPTION WORD/A038 VFYNUM, 14 / OVLAY NUMBER FOR VERIFY /A035 VFYADR, 200 / START ADDRESS OF VERIFY /A035 VFYFLD, CIF 10 / VERIFY FIELD -2 /A035 / ******************************* ORDER IMPORTANT *********************** PRQBLK, XSETUP, MUBUF+MNSECN XPBAUD, MUBUF+MNPRTB XCBAUD, MUBUF+MNPRIM / ******************************* END ORDER IMPORTANT ******************* QURX, XX CIFSYS / CHANGE TO SYSTEM FIELD ENQUE / CAUSE QUEUE BLOCK TO BE ENQUEUED QUBLK / ADDRESS OF QUEUE BLOCK CIFSYS / CHANGE TO SYSTEM FIELD JWAIT / WAIT FOR A SIGNIFICENT EVENT TAD QUQBLK+RXQCOD / PICK UP THE COMPLETION CODE SNA CLA / TEST AND CLEAR COMPLETION CODE /M028 JMP .-4 / IF ZERO, GO WAIT SOME MORE JMP I QURX / DONE, RETURN TO CALLER QUBLK, DSKQUE / ++++ 0 / ++++ 0 QUQBLK, ZBLOCK 17 X=. / INDICATE FIRST FREE LOCATION ON PAGE /-------------------- PAGE /*************************************************************************** /**** OVERLAY ENTRY POINT NUMBER ONE **** /*************************************************************************** CUDRST, XX / LABEL ADDED FOR WARM RESTART /A035 JMS CUDSET / CUDSET - SETS DATE/TIME CDIMNU / CIF CDF MENU FIELD JMP I .-3 /*************************************************************************** /**** OVERLAY ENTRY POINT NUMBER TWO **** /*************************************************************************** XX / CUAK - ACTIVATE UDKS (YES/NO) /D038 JMS CUAK / WS-78 FUNCTION NO LONGER EXISTS /D038 .-. /D038 JMP I .-3 HLT / NOBODY SHOULD BE CALLING THIS ENTRY /A038 JMP .-1 / DO NOT ALLOW USER TO CONTINUE /A038 JMP .-2 / USED TO PRESERVE SPACE TILL NEXT CALL /A038 /*************************************************************************** /**** OVERLAY ENTRY POINT NUMBER THREE **** /*************************************************************************** CUFINI, XX / CUFINS - FINISH COMMAND JMP CUFINS /C038 CUFINX, CDIMNU / RETUNR TO CALLER /C038 JMP I .-3 /*************************************************************************** /**** OVERLAY ENTRY POINT NUMBER FOUR **** /*************************************************************************** XX / CUWOUD - WRITE OUT SYS VALUES BLOCK /D029 JMS CUWOUD /D038 CLA / DON'T DO *ANYTHING* (WAS JMS CUWOUD) /C029 /D038 CDIMNU / CUWOUD NO LONGER EXISTS /C029 /D038 JMP I .-3 / CALL TO THIS VECTOR IS UNKNOWN /C029 HLT / NOBODY SHOULD BE CALLING THIS ENTRY /A038 JMP .-1 / DO NOT ALLOW USER TO CONTINUE /A038 / CUFINS - FINISH COMMAND CUFINS, CIFMNU / ++++ /C038 JMS I MNUCAL / CALL MENU FOR RETURN PRESSING DLMFN1 ISZ CUFINI / SET FOR CHAIN CALL JMP CUFINX / DO IT /C038 / CUDPUT - SUBROUTINE TO UPDATE THE SYSTEM OPTIONS AREA ON DISK AFTER /A028 / THE DATE AND TIME MENU. THIS ROUTINE IS ACTUALLY ONLY USED ONCE TO /A028 / SAVE THE VALUE OF MNFMAT SO THAT THE STARTUP MENU IS ONLY USED ONCE. /A028 CUDPUT, XX / SAVE THE VALUE OF MNFMAT IF NEEDED /A028 TAD (-CUDTST) / PICK UP TEST ADDRESS /A028 TAD QURX / COMBINE WITH LAST QURX CALL /A028 SZA CLA / CHECK TO SEE IF WE JUST READ IN VALUES/A028 JMP I CUDPUT / NO, THEN RETURN TO CALLER /A028 TAD CUDBUF+MNFMAT-MNABRV / PICK UP THE VALUE FROM DISK /A028 AND (3) / MASK OFF THE DATE FORMAT BITS /A028 SZA CLA / CHECK IF THEY HAVE BEEN INITIALIZED /A028 JMP I CUDPUT / YES, THEN RETURN TO CALLER /A028 JMS CUCOPY / TRANSFER SYSTEM WORDS TO BUFFER /A028 MUSYSV / START OF SYSTEM VALUES /A028 CDFMNU / FIELD WHERE THEY RESIDE /A028 CUDBUF / OUR BUFFER TO USE /A028 CDFMYF / OUR FIELD /A028 MUSYSL / LENGTH OF SYSTEM VALUES AREA /A028 TAD CUDEWT / PICK WRITE FUNCTION CODE /C038 DCA QUQBLK+RXQFNC / STORE FUNCTION CODE IN QUEUE BLOCK /A028 JMS QURX / TRANSFER VALUES TO DISK /A028 JMP I CUDPUT / RETURN TO CALLER /A028 / ROUTINE TO CHECK FOR A DECMATE I DEVELOPMENT SYSTEM /A038 DM1TST, XX / CHECK FOR DECMATE I DEVELOPMENT SYSTEM /A038 CDFSYS / CHANGE TO SYSTEM FIELD /A038 TAD I (XCLKSKP) / PICK UP THE CLOCK IOT /A038 CDFMYF / RESET BACK TO THIS FIELD /A038 TAD (-CLKSK2) / COMBINE WITH DECMATE II CLOCK IOT /A038 SZA CLA / IS THIS A DECMATE II SYSTEM ? /A038 ISZ DM1TST / NO, BUMP RETURN ADDRESS /A038 JMP I DM1TST / YES, RETURN TO CALLER /A038 IFDEF CONDOR < RSTCON, TEXT '![C' / ISSUE AN ESCAPE "c" RESET COMMAND /C038 /D038 RSTESC, ESC; "c; 0 > / END IFDEF CONDOR / INTEGRAL MODEM SUPPORT /A030 / ISSUE ENABLE - CK FOR HARDWARE PRESENT AND AUTO BAUD IF TRUE /A030 IMINIT, XX / /A030 TAD (4003) / ENABLE BITS /A030 H2DTR / IOT - TURN MODEM ON /A030 JMS IMWAIT / WAIT FOR MODEM TO INIT ITSELF /A030 LAS / SEE IF ITS PRESENT /A030 AND (4000) / MODEM PRESENT BIT /A030 SZA CLA / BIT <0> = 0 IF PRESENT /A030 JMP IMINTE / NOT PRESENT - GO DISABLE /A041 IMINTL, CIFSYS / CLEAR INPUT BUFFER /A039 HS2IN / /A039 SZA CLA / SKIP WHEN EMPTY /A039 JMP IMINTL / LOOP UNTIL EMPTY /A039 AC0002 / SEND A ^B TO AUTO-BAUD /A039 CIFSYS / /A030 HS2OU / /A030 CLA / BUFFER SHOULD HAVE ROOM /A030 JMP I IMINIT / /A030 IMINTE, AC0003 / DISABLE MODEM /A041 H2DTR / /A041 CLA / AC MUST BE CLEARED /A041 JMP I IMINIT / /A041 IMWAIT, XX / WAIT HERE 1 SEC. /A030 CLA / /A030 DCA T1 / CLEAR STORAGE /A030 CDFSYS / FETCH CLOCK VALUE /A030 TAD I (CLOCK+2) / /A031 CDFMYF / /A030 CIA / /A030 DCA T1 / SAVE /A030 IMWTLP, CDFSYS / FETCH NEW VALUE /A030 TAD I (CLOCK+2) / /A031 CDFMYF / /A030 TAD T1 / COMPARE WITH OLD VALUE /A030 SZA CLA / ANY CHANGE ? /A030 JMP I IMWAIT / YES - RETURN /A030 IMWJW, CIFSYS / NO - JWAIT HERE /A030 JWAIT / /A030 JMP IMWTLP / /A030 /D038 CUAK, XX / ACTIVATE/DEACTIVATE UDKS /D038 RDF / ++++ /D038 TAD CIDF0 / GET RETURN FIELD /D038 CDFMYF / ++++ /D038 DCA I CUAK / STORE IN CALL SEQUENCE /D038 JMP I CUAK /D038 /THIS CODE WAS PUT IN FOR FIELD TEST PURPOSES SO THAT SOFTWARE PUT OUT FOR /D038 /FIELD TEST IS NOT AROUND FOREVER. /D038 CHKDAT, CDFSYS / CHANGE TO SYSTEM FIELD /D038 TAD I (YEAR) / GET YEAR INPUT /D038 TAD (-EXPYR) / GET EXPIRATION YEAR /D038 SMA SZA / YEAR BEYOND LIMIT? /D038 JMP CHKDT2 / YES, CLOBBER DISKETTE /D038 SZA CLA / TIME OUT YEAR? /D038 JMP CHKDT1 / NO, MUST BE EARLIER, OK, EXIT /D038 TAD I (MONTH) / NO, EXPIRATION YEAR, CHECK MONTH /D038 TAD (-EXPMN) / GET EXPIRATION MONTH /D038 SPA CLA / OK? /D038 CHKDT1, JMP CUDXIT / YES, EXIT /D038 CHKDT2, CDFMYF / NO, TIME TO CLOBBER DISKETTE /D038 DCA QUQBLK+RXQBAD / SET BUFFER ADDRESS TO 0 (OR CLOSE TO IT) /D038 DCA QUQBLK+RXQDRV / SET DRIVE TO 0 /D038 TAD CDF0 /D038 DCA QUQBLK+RXQBFD / SET FIELD OF BUFFER TO 0 /D038 TAD (RXEWT+2000) /D038 DCA QUQBLK+RXQFNC / SET FUNCTION TO WRITE /D038 DCA QUQBLK+RXQBLK / SET BLOCK NUMBER TO 0 /D038 JMS QURX / CLOBBER BOOT BLOCK /D038 JMP CUDXIT / EXIT, NEXT TIME SYSTEM WILL NOT BOOT X=. / INDICATE FIRST FREE LOCATION ON PAGE /-------------------- PAGE /D038 CUDSET, XX /D037 CDFMNU /D038 JMS CUDVAL / SET UP MENU VALUES, BACK WITH DF=MENU /A037 /D038 TAD I (MUBUF+MNTMP1) / FROM START MENU? OR MAIN MENU? /D038 CDFMYF /D038 SPA CLA /D037 JMP CUDCHG / RD, JUST CHANGE TIME/DATE /D038 JMP CUDLUP / MAIN MENU, CALL TIME/DATE MENU /A037 /D038 DCA QUQBLK+RXQDRV / SET SYSTEMS DRIVE TO READ UDK'S /D038 TAD (RXERD) /D038 DCA QUQBLK+RXQFNC /D029 TAD (DLUDKS) /D029 DCA QUQBLK+RXQBLK /D029 TAD (UDKSTR) /D029 DCA QUQBLK+RXQBAD /D029 TAD (CDFMNU) /D029 DCA QUQBLK+RXQBFD /D029 JMS QURX / READ THEM IN /D029 CDFMNU /D029 DCA I (UDKPTR) / MAKE SURE UDK STACK PTR IS EMPTY /D038 CDFSYS /A029 /D038 DCA I (U1STPT) /A029 /D038 CDFMYF /D038 CIFSYS / ++++ /D038 UDKOPS / TURN ON UDK'S /D038 TAD (DLSVAL) /D038 DCA QUQBLK+RXQBLK /D038 TAD CUDBAD / PICK UP POINTER TO BUFFER AREA /M037 /D038 DCA QUQBLK+RXQBAD /D038 TAD CUDMYF / PICK UP CDF INSTRUCTION TO THIS FIELD /M028 /D038 DCA QUQBLK+RXQBFD /D038 JMS QURX / READ IN SYSTEM VALUES /D038 CUDMOV, JMS CUCOPY / TRANSFER THEM /D038 CUDBAD, CUDBUF / BUFFER ADDRESS /M037 /D038 CUDMYF, CDFMYF /M028 /D038 MUSYSV / ++++ /D038 CDFMNU /D038 MUSYSL /D038 JMS CUDOPT / SET UP UNBUNDLING OPTIONS WORD /D038 / SET JSWAP IN DSKHND LOCATION RDOSWP AFTER PROPER INITIALIZATION /D038 CDFSYS /D038 TAD (JSWAP) /D038 DCA RDOSWP /D038 IFDEF WINNIE < /D038 / SET JSWAP IN DSKHND LOCATION RDOSWQ AFTER PROPER INITIALIZATION /D038 TAD (JSWAP) /D038 DCA RDOSWQ /D038 > / END IFDEF WINNIE /D038 CDFMYF / /A027 /D038 IFDEF CONDOR < /D038 JMS DTFRMT /FORMAT DATE /A032 /D038 AC0001 /SET SLUSHWARE FOR DECmate MODE /A033 /D038 PR3 /ISSUE PANEL REQUEST TO SLUSHWARE /A033 /D038 10 /FUNCTION CODE ARGUMENT /A033 /D038 7777 /END OF LIST INDICATOR /A033 /D038 CLA /SAFETY CLEAR THE SLATE /A033 /D038 > /END IFDEF CONDOR /A032 /D038 / ****** DO THE COMM LINE INIT ON A WARM BOOT /A027 /D038 IFDEF CONDOR < /D038 CIFSYS /D038 H2INIT / NO, INIT COMM LINE AND /D038 JMS INITTC / INITIALIZE TERMINAL CHARACTERISTICS /D038 CIFMNU /D038 JMS I IOACAL / /D038 0 / /D038 RSTCON / ^A /D038 RSTESC / "ESC c" /D038 / ****** CHECK FOR INTEGRAL MODEM ENABLED /A030 /D038 /D038 CDFMNU / SEE IF ITS ENABLED IN SYS AREA /A030 /D038 TAD I (MUBUF+MNFMAT) / /A030 /D038 CDFMYF / /A030 /D038 AND (20) / INTEGRAL MODEM BIT /A030 /D038 SZA CLA / SKIP IF DISABLED /A030 /D038 JMS IMINIT / ENABLE AND AUTO-BAUD IF PRESENT /A030 /D038 > / END IFDEF CONDOR /D038 CDFSYS / SYSTEM DATA FIELD /A027 /D038 TAD I (DAMNTH) / SEE IF ANYONE SET THE DATE YET /D038 CDFMYF /D038 SZA CLA / ON ACP ERROR IS SET TO - FOR WARM START /C036 /D038 JMP CUDWRM / WARM STARTUP..CALL VERIFY /C035 /D038 CUDLUP, CIFMNU / CALL DATE/TIME MENU /D038 JMS I MNUCAL /D038 DLMSM0 /M037 /D038 JMS CUDPUT / ONCE ONLY CALL TO SAVE MNFMAT /A028 /D038 TAD (MNDTYR-1+MUBUF) / SET UP X0 TO GET YEAR, ETC. /D038 DCA X0 /D038 CDFMNU /D038 TAD I X0 / GET VALUES AND SAVE HERE /D038 DCA CUDSYR /D038 TAD I X0 /D038 DCA CUDSMO /D038 TAD I X0 /D038 DCA CUDSDY /D038 TAD I X0 /D038 DCA CUDSHR /D038 TAD I X0 /D038 DCA CUDSMN /D038 CDFMYF /D038 TAD CUDSDY /D038 SPA CLA / DON'T CHANGE IF NEGATIVE /D038 IFDEF FLDTST / IF FIELD TEST, DON'T ALLOW NO INPUT /D038 IFNDEF FLDTST / IF NOT FIELD TEST, ALLOW NO INPUT /D038 TAD CUDSDY /D038 CDFSYS /D038 DCA I (DAMNTH) /D038 TAD CUDSMO /D038 DCA I (MONTH) /D038 TAD CUDSYR /D038 DCA I (YEAR) /D038 CDFMYF /D038 JMS FIXDAT /D038 CUDSND, TAD CUDSHR / DO WE CHANGE TIME? /D038 SPA CLA /D038 JMP CUDCHK / NO - JUST RETURN /D038 CDFSYS /D038 TAD (CLOCK) / ++++ /D038 DCA X0 /D038 DCA I X0 / TENTHS /D038 DCA I X0 / SECONDS /D038 TAD CUDSMN / ++++ /D038 DCA I X0 / MINUTES /D038 TAD CUDSHR / ++++ /D038 DCA I X0 / HOURS /D038 CUDCHK, /D038 IFDEF FLDTST / CHECK DATE ENTERED IF FIELD TEST /D038 IFNDEF FLDTST / RETURN IF NOT FIELD TEST /D038 CUDXIT, JMP I CUDSET / YES, BACK TO MAIN MENU / CUDSET - SETS DATE/TIME CUDSET, XX JMS DM1TST / CHECK FOR DECMATE I DEVELOPMENT SYSTEM/A038 JMS CUDVAL / NO, SET UP DECMATE II MENU VALUES /A037 CDFMNU / SET DATA FIELD TO MENU FIELD TAD I CUDTP1 / FROM START MENU? OR MAIN MENU? /C038 CDFMYF / MAIN MENU SETS VALUE TO -1 SPA CLA / START MENU SETS VALUE TO +1 JMP CUDLUP / MAIN MENU, CALL TIME/DATE MENU /C037 JMS CUDOPT / READ SYSTEM VALUES & SET OPTIONS WORD /C038 / SET JSWAP IN DSKHND LOCATION RDOSWP AFTER PROPER INITIALIZATION CDFSYS TAD (JSWAP) DCA RDOSWP IFDEF WINNIE < / SET JSWAP IN DSKHND LOCATION RDOSWQ AFTER PROPER INITIALIZATION TAD (JSWAP) DCA RDOSWQ > / END IFDEF WINNIE CDFMYF / /A027 IFDEF CONDOR < JMS DM1TST / CHECK FOR DECMATE I DEVELOPMENT SYSTEM/A038 JMS DM2INT / NO, GO INITIALIZE DECMATE II VALUES /A037 / ****** DO THE COMM LINE INIT ON A WARM BOOT /A027 CIFSYS H2INIT / INIT COMM LINE / ****** CHECK FOR INTEGRAL MODEM ENABLED /A030 CDFMNU / SEE IF ITS ENABLED IN SYS AREA /A030 TAD I CUDFMT / PICK UP VALUE OF MNFMAT /C038 CDFMYF / /A030 AND CUDFM4 / INTEGRAL MODEM BIT /C038 SZA CLA / SKIP IF DISABLED /A030 JMS IMINIT / ENABLE AND AUTO-BAUD IF PRESENT /A030 > / END IFDEF CONDOR / CHECK FOR POSSIBLE ERROR ENTRY FROM A DISK HANDLER FAILURE /A027 CDFSYS / SYSTEM DATA FIELD /A027 TAD I CUDDMT / SEE IF ANYONE SET THE DATE YET /C038 CDFMYF SNA / ON ACP ERROR IS SET TO - FOR WARM START /C036 JMP CUDLUP / COLD STARTUP..CALL START UP MENU /C035 SMA CLA / CHECK FOR "F" COMMAND /A036 JMP I CUDSET / YES, RETURN WITH CLEAN ACCUMULATOR /A036 / NO, WARM START ERROR /A036 / WARM START ROUTINE TO SET UP OVERLAY TO CALL VERIFY /A035 CDFSYS /A036 TAD I CUDDMT / GET DAY OF WEEK VALUE /C038 CMA / WARM START SET ON ERROR IN DSKACP /A036 DCA I CUDDMT / RESET FOR DISLPAY /C038 TAD I (SVFVFY-CLOCK+RANDOM /LOCATION PARAMETER PASSED FROM /A040 SNA / test for graphics restart /a043 JMP CUDGRE / go exit /a043 CDFMNU /A035 DCA I (MUBUF+MNTMP2) /SET IT FOR VERIFY /A040 TAD (MUBUF+MNONUM-1) / START OF OVLY TABLE -1 /A035 DCA X0 /A035 TAD VFYNUM / VERIFY OVERLAY NUMBER /A035 DCA I X0 /A035 TAD VFYADR / START ADDRESS OF VERIFY /A035 DCA I X0 /A035 TAD VFYFLD / VERIFY FIELD /A035 DCA I X0 /A035 CDFMYF / RESET FIELD /A035 ISZ CUDRST / SET RETURN TO CALL OVLAY /A035 CUDGRE, CLA / make sure the acc is clear /a043 CDFMYF / RESET FIELD /A043 JMP I CUDSET / RETURN TO TRANSFER TO VERIFY /A035 / CALL THE RESET DATE AND TIME MENU CUDLUP, CIFMNU / CALL DATE/TIME MENU JMS I MNUCAL DLMSM0 /M037 JMS CUDPUT / ONCE ONLY CALL TO SAVE MNFMAT /A028 TAD (MNDTYR-1+MUBUF) / SET UP X0 TO GET YEAR, ETC. DCA X0 CDFMNU TAD I X0 / GET VALUES AND SAVE HERE DCA CUDSYR TAD I X0 DCA CUDSMO TAD I X0 DCA CUDSDY TAD I X0 DCA CUDSHR TAD I X0 DCA CUDSMN CDFMYF TAD CUDSDY SPA CLA / DON'T CHANGE IF NEGATIVE JMP CUDLUP / DON'T ALLOW NO INPUT /C038 JMS FIXDAT CUDSND, TAD CUDSHR / DO WE CHANGE TIME? SPA CLA JMP CHKDAT / NO - GO CHECK THE DATE /C038 CDFSYS TAD (CLOCK) / ++++ DCA X0 DCA I X0 / TENTHS DCA I X0 / SECONDS TAD CUDSMN / ++++ DCA I X0 / MINUTES TAD CUDSHR / ++++ DCA I X0 / HOURS / THIS CODE WAS PUT IN FOR FIELD TEST PURPOSES SO THAT SOFTWARE / PUT OUT FOR FIELD TEST IS NOT AROUND FOREVER. CHKDAT, CDFSYS / CHANGE TO SYSTEM FIELD TAD I CUDEAR / GET YEAR INPUT /C038 TAD CUDEXY / GET EXPIRATION YEAR /C038 SMA SZA / YEAR BEYOND LIMIT? JMP CHKDT1 / YES, CLOBBER DISKETTE SZA CLA / TIME OUT YEAR? JMP CUDXIT / NO, MUST BE EARLIER, OK, EXIT TAD I CUDMTH / NO, EXPIRATION YEAR, CHECK MONTH /C038 TAD CUDEXM / GET EXPIRATION MONTH /C038 CHKDT1, CDFMYF / RESET BACK TO THIS FIELD IFDEF FLDTST / POSITIVE VALUE MEANS CLOBBER BOOT BLOCK IFNDEF FLDTST / RETURN IF NOT FIELD TEST CUDXIT, JMP I CUDSET / DATE OK, BACK TO MAIN MENU / DATE BAD, TIME TO CLOBBER DISKETTE DCA QUQBLK+RXQBAD / SET BUFFER ADDRESS TO 0 DCA QUQBLK+RXQDRV / SET DRIVE TO 0 TAD CDF0 DCA QUQBLK+RXQBFD / SET FIELD OF BUFFER TO 0 TAD CUDEWT / GET DISK HANDLER WRITE FUNCTION CODE /C038 DCA QUQBLK+RXQFNC / SET FUNCTION TO WRITE DCA QUQBLK+RXQBLK / SET BLOCK NUMBER TO 0 JMS QURX / CLOBBER BOOT BLOCK JMP I CUDSET / EXIT, NEXT TIME SYSTEM WILL NOT BOOT X=. / INDICATE FIRST FREE LOCATION ON PAGE /-------------------- PAGE / ROUTINE TO READ THE SYSTEM VALUES FOR MENU FIELD CUDOPT, XX / READ THE SYSTEM VALUES DCA QUQBLK+RXQDRV / SET TO SYSTEMS DRIVE TAD CUDERD / PICK UP READ FUNCTION CODE /C038 DCA QUQBLK+RXQFNC / STORE IN QUEUE BLOCK TAD (DLSVAL) / PICK UP DISK BLOCK FOR SYSTEM VALUES DCA QUQBLK+RXQBLK / STORE IN QUEUE BLOCK TAD CUDBAD / PICK UP POINTER TO BUFFER AREA /M037 DCA QUQBLK+RXQBAD / STORE IN QUEUE BLOCK TAD CUDMYF / PICK UP CDF INSTRUCTION TO THIS FIELD /M028 DCA QUQBLK+RXQBFD / STORE IN QUEUE BLOCK JMS QURX / READ IN SYSTEM VALUES / SET THE UNBUNDLING OPTIONS WORD INTO MNOPTC / GET HARDWARE OPTIONS BIT CUDTST, CDFSYS / CHANGE TO SYSTEM FIELD DCA I (U1STPT) / CLEAR UDK STACK POINTER /A029 TAD I CUDONL / GET COM ON LINE FLAG WORD /C038 CDFMYF / RETURN TO CURRENT DATA FIELD SZA CLA / CHECK FOR PRESENCE OF HARDWARE BIT AC0001 / SET BIT IF COMM INTERFACE PRESENT DCA T1 / USE LOCATION AS TEMPORARY STORAGE AC7776 / SET UP HARDWARE BIT MASK AND I CUDFOW / CLEAR BITS BAISED ON OPTIONS WORD /C038 TAD T1 / COMBINE WITH HARDWARE BIT DCA I CUDFOW / STORE NEW FEATURE OPTIONS WORD /C038 JMS CUCOPY / TRANSFER THEM TO MENU FIELD CUDBAD, CUDBUF / BUFFER ADDRESS TO START FROM /M037 CUDMYF, CDFMYF / FIELD OF SOURCE /M028 MUSYSV / LOCATION TO MOVE TO CDFMNU / FIELD OF DESTINATION MUSYSL / NUMBER OF WORDS TO MOVE / TURN ON UDK'S CIFSYS / SET UP TO GO TO SYSTEM FIELD UDKOPS / GO TURN ON UDK'S JMP I CUDOPT / RETURN TO CALLER FIXDAT, XX CDFSYS TAD CUDSDY DCA I CUDDMT / STORE DAY OF MONTY VALUE /C038 TAD CUDSMO DCA I CUDMTH / STORE MONTH VALUE /C038 TAD CUDSYR DCA I CUDEAR / STORE YEAR VALUE /C038 TAD I CUDMTH / GET MONTH VALUE /C038 CIA / ++++ DCA T1 AC0003 / ++++ AND I CUDEAR / MASK OFF YEAR VALUE /C038 SNA CLA / ++++ IAC CDFMYF TAD (34) / ++++ DCA CUDSMT+1 / SET FEB DAYS TAD (CUDSMT-1) / ++++ DCA X0 SKP TAD I X0 / GET DAYS SO FAR THIS YEAR ISZ T1 / ++++ JMP .-2 CDFSYS TAD I CUDDMT / GET DAY OF MONTH VALUE /C038 DCA I (DAYEAR) AC7777 / ++++ TAD I CUDEAR / GET DAY OF WEEK /C038 CLL RAR CLL RAR TAD I CUDEAR /C038 TAD I (DAYEAR) TAD (-7) SMA / ++++ JMP .-2 TAD (10) / ++++ DCA I (DAWEEK) / 1-7 = SUN-SAT TAD I CUDDMT / GET DAY OF MONTH VALUE /C038 BSW / ++++ TAD I CUDMTH / GET MONTH VALUE /C038 DCA I (PAKDAT) CDFMYF JMP I FIXDAT / CUCOPY - ROUTINE TO COPY BLOCK OF MEMORY / / JMS CUCOPY / ADDR OF FROM / CDF FROM FIELD / ADDR OF TO / CDF TO FIELD / NUMBER OF WORDS TO COPY / RETURN, AC = 0 CUCOPY, XX AC7777 / GET FIRST ADDR - 1 FOR INDEX REGISTER TAD I CUCOPY ISZ CUCOPY DCA X0 TAD I CUCOPY / AND FIELD ISZ CUCOPY DCA CUCPY0 / SAVE FOR LATER USE AC7777 / DO SAME FOR TO VALUES TAD I CUCOPY ISZ CUCOPY DCA X1 TAD I CUCOPY ISZ CUCOPY DCA CUCPY1 TAD I CUCOPY ISZ CUCOPY / GET COUNT CIA / MAKE ISZ COUNT DCA T1 / AND SAVE FOR USE CUCPY0, .-. / A CDF FOR FIRST FIELD TAD I X0 / GET WORD CUCPY1, .-. / A CDF FOR THE RECEIVING FIELD DCA I X1 / STORE WORD ISZ T1 / DONE? JMP CUCPY0 / NO - DO NEXT WORD /C038 CDFMYF / YES - BACK TO OUR FIELD JMP I CUCOPY / RETURN TO CALLER / TABLE OF DAYS IN THE MONTHS, USED BY 'RD' PROCESSING DECIMAL CUDSMT, 31 / JANUARY 28 / FEBRUARY 31 / MARCH 30 / APRIL 31 / MAY 30 / JUNE 31 / JULY 31 / AUGUST 30 / SEPTEMBER 31 / OCTOBER 30 / NOVEMBER 31 / DECEMBER OCTAL /D038 IFDEF CONDOR < /D038 / NOTE:: THIS CODE IS EXECUTED ONCE AFTER POWER-UP /D038 / /D038 / This code issues a PRQ3 request to panel memory to set the WPS user /D038 / defined terminal characteristics into panel memory program locations /D038 / 24, 25, and 26 thereby powering up to the WPS characteristics /D038 INITTC, XX / /D038 JMS DM1TST / IS THIS A DECMATE I SYSTEM ? /A038 /D038 JMP I INITTC / YES, DO NOT EXECUTE PRQ REQUESTS /A038 /D038 / SET THE WPS DEFINED TERMINAL CHARACTERISTIC INTO THE TERMINAL REMEMBERING /D038 / THAT SCREEN WIDTH IS FORCED TO 80 COLUMNS & TERMINAL MODE IS FORCED TO ANSI /D038 CDFMNU /D038 TAD I XSETUP / terminal characterics from "SETUP" /D038 DCA PRQBLK / TERMINAL CHARACTERISTICS /D038 TAD I XPBAUD / printer baud rate /D038 AND (17) / /D038 DCA PRQBLK+1 / PRINTER BAUD RATE /D038 TAD I XCBAUD / communications baud rate /D038 AND (17) / /D038 DCA PRQBLK+2 / COMMUNICATIONS BAUD RATE /D038 CDFMYF /D038 PRQ3 / EXECUTE PANEL REQUEST /D038 CDFMYF&70%10+4000 / 40 (dest field 0) (src field MYF) /D038 PRQBLK / source starting address /D038 24 / destination starting address /D038 -3 / three words to move /D038 7777 / PRQ3 terminator /D038 AC7777 / Disable blanking screen /D038 PRQ3 /D038 17 / Code /D038 7777 / Terminator /D038 CLA / (just in case ac dirty after prq) /D038 / NOTE THAT A "RST" (ESC c) IS ISSUED AFTER THE RETURN FROM THIS ROUTINE. /D038 JMP I INITTC /D038 / Order important /D038 PRQBLK, /D038 XSETUP, MUBUF+MNSECN /D038 XPBAUD, MUBUF+MNPRTB /D038 XCBAUD, MUBUF+MNPRIM /D038 / End order important /D038 > / END IFDEF CONDOR X=. / INDICATE FIRST FREE LOCATION ON PAGE /-------------------- PAGE /D038 /WARM START ROUTINE TO SET UP OVERLAY TO CALL VERIFY /A035 /D038 CUDWRM, CDFSYS /A036 /D038 TAD I (DAMNTH) / RESET FOR DISPLAY /A036 /D038 SPA / CHECK FOR "F" COMMAND /A036 /D038 JMP CUDWRP / NO, WARM START ERROR /A036 /D038 CLA / RETURN WITH CLEAN ACCUMULATOR /A036 /D038 CDFMYF / HERE THROUGH "F" COMMAND /A036 /D038 JMP CUDXIT /A036 /D038 CUDWRP, CMA / WARM START SET ON ERROR IN DSKACP /A036 /D038 DCA I (DAMNTH) /A036 /D038 CDFMNU /A035 /D038 TAD (MUBUF+MNONUM-1) / START OF OVLY TABLE -1 /A035 /D038 DCA X0 /A035 /D038 TAD VFYNUM / VERIFY OVERLAY NUMBER /A035 /D038 DCA I X0 /A035 /D038 TAD VFYADR / START ADDRESS OF VERIFY /A035 /D038 DCA I X0 /A035 /D038 TAD VFYFLD / VERIFY FIELD /A035 /D038 DCA I X0 /A035 /D038 CDFMYF / RESET FIELD /A035 /D038 ISZ CUDRST / SET RETURN TO CALL OVLAY /A035 /D038 JMP CUDXIT / RETURN /A035 /D038 VFYNUM, 14 / OVLAY NUMBER /A035 /D038 VFYADR, 200 / START ADDRESS OF VERIFY /A035 /D038 VFYFLD, CIF 10 / VERIFY FIELD -2 /A035 /D038 IFDEF CONDOR < /D038 / ROUTINE TO SET VALUES INTO MENU FIELD TEMP REGISTERS FOR RD DISPLAY /A037 /D038 CUDVAL, XX / GET PANEL VALUES INTO MENU TEMPS /A037 /D038 PRQ3 / ISSUE A PANEL REQUEST /A037 /D038 5041 / 50XY - X=DEST FIELD, Y=SRC FIELD /A037 /D038 20 / SOURCE ADDRESS IN PANEL MEMORY /A037 /D038 CUDTMP / DESTINATION ADDRESS IN THIS FIELD /A037 /D038 -2 / NUMBER OF WORDS TO MOVE /A037 /D038 -1 / TERMINATOR FOR PANEL REQUEST FUNCTION /A037 /D038 TAD (MUBUF+MNTMP5-1) / GET POINTER TO MENU FIELD TEMPS /A037 /D038 DCA X0 / STORE POINTER FOR INDIRECT STORAGE /A037 /D038 CDFMNU / CHANGE TO MENU FIELD /A037 /D038 TAD CUDTMP / GET INTERNAL DATA VALUE TO BE SPLIT /A037 /D038 BSW / SWAP HIGH ORDER WITH LOW ORDER BYTE /A037 /D038 AND (7) / MASK OFF LOW ORDER BITS /A037 /D038 DCA I X0 / STORE VALUE IN MENU TEMP /A037 /D038 TAD CUDTMP / GET INTERNAL DATA VALUE TO BE SPLIT /A037 /D038 RTR;RAR / SHIFT VALUE THREE PLACES TO THE RIGHT /A037 /D038 AND (7) / MASK OFF LOW ORDER BITS /A037 /D038 DCA I X0 / STORE VALUE IN MENU TEMP /A037 /D038 TAD CUDTMP / GET INTERNAL DATA VALUE TO BE SPLIT /A037 /D038 AND (7) / MASK OFF LOW ORDER BITS /A037 /D038 DCA I X0 / STORE VALUE IN MENU TEMP /A037 /D038 TAD CUDTMP+1 / GET INTERNAL ROM VALUE TO BE SPLIT /A037 /D038 BSW / SWAP HIGH ORDER WITH LOW ORDER BYTE /A037 /D038 AND P77 / MASK OFF LOW ORDER BITS /A037 /D038 DCA I X0 / STORE VALUE IN MENU TEMP /A037 /D038 TAD CUDTMP+1 / GET INTERNAL ROM VALUE TO BE SPLIT /A037 /D038 BSW / SWAP HIGH ORDER WITH LOW ORDER BYTE /A037 /D038 AND P7700 / MASK OFF HIGH ORDER BITS /A037 /D038 DCA I X0 / STORE VALUE IN MENU TEMP /A037 /D038 JMP I CUDVAL / RETURN WITH DATA FIELD SET TO MENU /A037 /D038 / THIS ROUTINE TAKES THE DATE FROM PANEL MEMORY, WHEN CALLED FROM /D038 / MASTER MENU, AND PUTS IT INTO THE FORMAT REQUIRED BY WPS. /D038 / MASTER MENU STORES THE DATE IN THE FOLLOWING WAY: MM/DD/YY. /D038 / /D038 / WPS LOCATION "MNFMAT" DEFINES THE WAY THE DATE IS TO BE ENTERED: /D038 / CODE 0 = INVALID, 1= DD/MM/YY, 2=MM/DD/YY, 3=YY/MM/DD /D038 / /D038 DTFRMT, 0 /A032 /D038 TAD (PMDATE) / START OF DATE BUFFER /A032 /D038 DCA DTINBF / DATE INPUT BUFFER /A032 /D034 PRQ3 / READ SIGNATURE /A032 /D034 CU2FLD^10+PMFLD+RDPMEM / 50XY Y=INPUT FLD X=OUTPUT FIELD /A032 /D034 PMSIGN / LOC OF SIGNATURE IN P.M. /A032 /D034 F1DATE / TEMP USE /A032 /D034 -1 / -NUMBER WORDS TO BE READ /A032 /D034 -1 / TERMINATOR /A032 /D034 TAD (SIGNAT) / SIGNATURE=-7531 /A032 /D034 TAD F1DATE / WHAT IS SIGNATURE? /A032 /D034 SZA CLA / IS DATE IN P.M. IN FORMAT /A032 /D034 JMP DTSAME / NO DON'T WORRY ABOUT IT /A032 /D038 AC0003 / SET UP MASK FOR DATE BITS /A032 /D038 AND CUDBUF+MNFMAT-MNABRV / ISOLATE THE DATE BITS /A032 /D038 SNA / 0=INVALID /A032 /D038 JMP DTSAME / IGNORE /A032 /D038 CLL RAR / 1 INTO LINK 2 BIT TO 1 BIT /A032 /D038 SNA CLA / IS THIS CODE 1? FORMAT=DD/MM/YY /A032 /D038 JMP DTCOD1 / YES.. GO SET UP DD/MM/YY /A032 /D038 SNL / NO.. MUST BE CODE 2 OR 3 /A032 /D038 JMP DTSAME / CODE 2=MM/DD/YY (SET ALREADY) /A032 /D038 DTCOD3, JMS RDDATE / CODE 3=YY/MM/DD - READ DATE TO BUFFER /A032 /D038 F2DATE / MONTH TO 2ND DATE FIELD /A032 /D038 F3DATE / DAY TO 3RD DATE FIELD /A032 /D038 F1DATE / YEAR TI FIRST DATE FIELD /A032 /D038 0 / TERMINATOR /A032 /D038 JMP DTWRIT / CONT /A032 /D038 DTCOD1, JMS RDDATE / CODE 1 DD/MM/YY - READ DATE TO BUFFER /A032 /D038 F2DATE / MONTH TO 2ND DATE FIELD /A032 /D038 F1DATE / DAY TO FIRST DATE FIELD /A032 /D038 F3DATE / YEAR TO 3RD DATE FIELD /A032 /D038 0 / TERMINATOR /A032 /D038 DTWRIT, PRQ3 / WRITE IT OUT /A032 /D038 PMFLD^10+CU2FLD+WRPMEM / 4064- WRITE TO FIELD 6 P.M. FROM THIS /A032 /D038 F1DATE / START LOC /A032 /D038 PMDATE / PAN MEM DATE LOC /A032 /D038 DTLEN / =-8 DD/MM/YY OR OTHER FORMAT /A032 /D038 -1 / TERMINATOR /A032 /D038 DTSAME, JMP I DTFRMT / RETURN /A032 /D038 /READ DATE.... STORED IN FORMAT MM/DD/YY READ INTO PROPER FORMAT /A032 /D038 /..............2 CHARS. AT A TIME INTO LOCATION SPECIFIED BY PARAMS /A032 /D038 / /D038 RDDATE, 0 /A032 /D038 /D038 RDDAT2, TAD I RDDATE / GET ARG /A032 /D038 ISZ RDDATE / INC RET /A032 /D038 SNA / END READ? /A032 /D038 JMP I RDDATE / YES /A032 /D038 DCA DTOTBF / SET OUTPUT /A032 /D038 PRQ3 /A032 /D038 CU2FLD^10+PMFLD+RDPMEM / FROM P.M. TO CU2 BUFFER /A032 /D038 DTINBF, PMDATE / LOCATION IN P.M. DATE IS STORED /A032 /D038 DTOTBF, F1DATE / TO BE STORED /A032 /D038 -2 / #WORDS TO BE READ /A032 /D038 -1 / TERMINATOR /A032 /D038 AC0003 / LENGTH OF FLD +"/" /A032 /D038 TAD DTINBF / RESET INPUT FLD /A032 /D038 DCA DTINBF /A032 /D038 JMP RDDAT2 / NEXT /A032 /D038 > /END IFDEF CONDOR /A032 IFDEF CONDOR < / NOTE:: THIS CODE IS EXECUTED ONCE AFTER POWER-UP FOR DECMATE II SYSTEM /A038 / THIS ROUTINE TAKES THE DATE FROM PANEL MEMORY, WHEN CALLED FROM /A038 / MASTER MENU, AND PUTS IT INTO THE FORMAT REQUIRED BY WPS. /A038 / MASTER MENU STORES THE DATE IN THE FOLLOWING WAY: MM/DD/YY. /A038 / WPS LOCATION "MNFMAT" DEFINES THE WAY THE DATE IS TO BE ENTERED: /A038 / CODE 0 = INVALID, 1= DD/MM/YY, 2=MM/DD/YY, 3=YY/MM/DD /A038 DM2INT, 0 /A032 TAD (PMDATE) / START OF DATE BUFFER /A032 DCA DTINBF / DATE INPUT BUFFER /A032 AC0003 / SET UP MASK FOR DATE BITS /A032 AND CUDBUF+MNFMAT-MNABRV / ISOLATE THE DATE BITS /A032 SNA / 0=INVALID /A032 JMP DTSAME / IGNORE /A032 CLL RAR / 1 INTO LINK 2 BIT TO 1 BIT /A032 SNA CLA / IS THIS CODE 1? FORMAT=DD/MM/YY /A032 JMP DTCOD1 / YES.. GO SET UP DD/MM/YY /A032 SNL / NO.. MUST BE CODE 2 OR 3 /A032 JMP DTSAME / CODE 2=MM/DD/YY (SET ALREADY) /A032 DTCOD3, JMS RDDATE / CODE 3=YY/MM/DD - READ DATE TO BUFFER /A032 F2DATE / MONTH TO 2ND DATE FIELD /A032 F3DATE / DAY TO 3RD DATE FIELD /A032 F1DATE / YEAR TI FIRST DATE FIELD /A032 0 / TERMINATOR /A032 JMP DTWRIT / CONT /A032 DTCOD1, JMS RDDATE / CODE 1 DD/MM/YY - READ DATE TO BUFFER /A032 F2DATE / MONTH TO 2ND DATE FIELD /A032 F1DATE / DAY TO FIRST DATE FIELD /A032 F3DATE / YEAR TO 3RD DATE FIELD /A032 0 / TERMINATOR /A032 DTWRIT, PRQ3 / WRITE IT OUT /A032 PMFLD^10+CU2FLD+WRPMEM / 4064- WRITE TO FIELD 6 P.M. FROM THIS /A032 F1DATE / START LOC /A032 PMDATE / PAN MEM DATE LOC /A032 DTLEN / =-8 DD/MM/YY OR OTHER FORMAT /A032 -1 / TERMINATOR /A032 / THIS CODE ISSUES A PRQ3 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 / SET THE WPS DEFINED TERMINAL CHARACTERISTIC INTO THE TERMINAL REMEMBERING / THAT SCREEN WIDTH IS FORCED TO 80 COLUMNS & TERMINAL MODE IS FORCED TO ANSI DTSAME, CDFMNU TAD I XSETUP / TERMINAL CHARACTERICS FROM "SETUP" TAD (1200) / Set term Lvl 8 , 8 bit host /A042 DCA PRQBLK / TERMINAL CHARACTERISTICS TAD I XPBAUD / PRINTER BAUD RATE AND CUDC17 / MASK OFF LOW ORDER BITS DCA PRQBLK+1 / PRINTER BAUD RATE TAD I XCBAUD / COMMUNICATIONS BAUD RATE AND CUDC17 / MASK OFF LOW ORDER BITS DCA PRQBLK+2 / COMMUNICATIONS BAUD RATE CDFMYF PRQ3 / EXECUTE PANEL REQUEST CDFMYF&70%10+4000 / 40 (DEST FIELD 0) (SRC FIELD MYF) PRQBLK / SOURCE STARTING ADDRESS 24 / DESTINATION STARTING ADDRESS -3 / THREE WORDS TO MOVE 7777 / PRQ3 TERMINATOR AC7777 / DISABLE BLANKING SCREEN PRQ3 CUDC17, 17 / CODE 7777 / TERMINATOR CLA PRQ3 / Switch cursor on as disabled by V25st /a042 0025 / on start-up. Do this using PRQ3, #25 /a042 7777 / with AC=0 /a042 AC0001 / SET SLUSHWARE FOR DECMATE MODE /A033 PRQ3 / ISSUE PANEL REQUEST TO SLUSHWARE /A033 10 / FUNCTION CODE ARGUMENT /A033 7777 / END OF LIST INDICATOR /A033 CIFMNU / ISSUE RESET TO TERMINAL TO SET VALUES /A038 JMS I IOACAL / CALL SYSTEM DISPLAY ROUTINE /A038 0 / USE DEFAULT OUTPUT ROUTINE /A038 RSTCON / "ESC c" /A038 JMP I DM2INT / RETURN TO CALLER /A038 / SUBROUTINE TO READ DATE - STORED IN FORMAT MM/DD/YY READ INTO PROPER /A032 / FORMAT 2 CHARS. AT A TIME INTO LOCATION SPECIFIED BY PARAMS /A032 RDDATE, XX /A032 RDDAT2, TAD I RDDATE / GET ARG /A032 ISZ RDDATE / INC RET /A032 SNA / END READ? /A032 JMP I RDDATE / YES /A032 DCA DTOTBF / SET OUTPUT /A032 PRQ3 /A032 CU2FLD^10+PMFLD+RDPMEM / FROM P.M. TO CU2 BUFFER /A032 DTINBF, PMDATE / LOCATION IN P.M. DATE IS STORED /A032 DTOTBF, F1DATE / TO BE STORED /A032 -2 / #WORDS TO BE READ /A032 -1 / TERMINATOR /A032 AC0003 / LENGTH OF FLD +"/" /A032 TAD DTINBF / RESET INPUT FLD /A032 DCA DTINBF /A032 JMP RDDAT2 / NEXT /A032 / ROUTINE TO SET VALUES INTO MENU FIELD TEMP REGISTERS FOR RD DISPLAY /A037 CUDVAL, XX / GET PANEL VALUES INTO MENU TEMPS /A037 PRQ3 / ISSUE A PANEL REQUEST /A037 5041 / 50XY - X=DEST FIELD, Y=SRC FIELD /A037 20 / SOURCE ADDRESS IN PANEL MEMORY /A037 CUDTMP / DESTINATION ADDRESS IN THIS FIELD /A037 -2 / NUMBER OF WORDS TO MOVE /A037 -1 / TERMINATOR FOR PANEL REQUEST FUNCTION /A037 TAD (MUBUF+MNTMP5-1) / GET POINTER TO MENU FIELD TEMPS /A037 DCA X0 / STORE POINTER FOR INDIRECT STORAGE /A037 CDFMNU / CHANGE TO MENU FIELD /A037 TAD CUDTMP / GET INTERNAL DATA VALUE TO BE SPLIT /A037 BSW / SWAP HIGH ORDER WITH LOW ORDER BYTE /A037 AND CUDC7 / MASK OFF LOW ORDER BITS /C038 DCA I X0 / STORE VALUE IN MENU TEMP /A037 TAD CUDTMP / GET INTERNAL DATA VALUE TO BE SPLIT /A037 RTR;RAR / SHIFT VALUE THREE PLACES TO THE RIGHT /A037 AND CUDC7 / MASK OFF LOW ORDER BITS /C038 DCA I X0 / STORE VALUE IN MENU TEMP /A037 TAD CUDTMP / GET INTERNAL DATA VALUE TO BE SPLIT /A037 AND CUDC7 / MASK OFF LOW ORDER BITS /C038 DCA I X0 / STORE VALUE IN MENU TEMP /A037 TAD CUDTMP+1 / GET INTERNAL ROM VALUE TO BE SPLIT /A037 BSW / SWAP HIGH ORDER WITH LOW ORDER BYTE /A037 AND P77 / MASK OFF LOW ORDER BITS /A037 DCA I X0 / STORE VALUE IN MENU TEMP /A037 TAD CUDTMP+1 / GET INTERNAL ROM VALUE TO BE SPLIT /A037 BSW / SWAP HIGH ORDER WITH LOW ORDER BYTE /A037 AND P7700 / MASK OFF HIGH ORDER BITS /A037 DCA I X0 / STORE VALUE IN MENU TEMP /A037 JMP I CUDVAL / RETURN WITH DATA FIELD SET TO MENU /A037 X=. / INDICATE FIRST FREE LOCATION ON PAGE /-------------------- PAGE > / END IFDEF CONDOR /A032 /CUDBUF, ZBLOCK 400 / MOVED TO 7000 (DEFINED IN WPF1) /C029 / WPCU3 - COMMAND UTILITIES III / / 044 KMD 02-Oct-85 Allow MNCs in file name to be deleted. / 043 EMcD 11-Sep-85 Fix bug dispalying MCS/Tech chars / if bolded when deleting / 042 EMcD 11-Sep-85 Add Nordic translations / (conditionalised) / 041 Mart 01-aug-85 fix assembly bug in ITALIAN / 040 WCE 29-SEP-84 DISPLAY TECH CHARACTER IN DELETE TEXT / 039 DFB 27-SEP-84 Fix to prevent AD when TM=GRAPHICS / 038 DFB 17-SEP-84 FIX TO CHECK GRAPHICS BOARD FOR DMIII / 037 DFB 11-SEP-84 FIX TO PREVENT LOGON IN GRAPHICS MODE / 036 DFB 07-SEP-84 FIX TM=125 REFERENCE / 035 TCW 16-JUL-84 Expand # of terminal modes / 034 DFB 11-JUN-84 CX GRAPHICS-clear/set call to flash buz / ...TIMDSP+3 -- WP2CMF -- / ...when PRTFLD loaded/deleted / 033 DFB 16-MAY-84 Fix load parameter DSPRM1 / 032 DFB 02-MAY-84 Add addtnl fld to graphics mode(vt125) / 031 DFB 20-APR-84 Reload printer page 0(20-76) on ret VT125 / 030 DFB 17-APR-84 Fixes to VT125 graphics mode / 029 DFB 02-APR-84 Change graphics to load each time called / 028 TCW 27-MAR-84 Add PHONE capability / 027 WCE 26-MAR-84 CHANGED NAME FROM VT-125 TO WPSUTL / 026 SBB 27-DEC-83 SOME GRFX CONSTANTS CHANGED etc. / 025 SBB 12-DEC-83 PUT IN DATE CHECK FOR GRFX DISKETTE / 024 SBB 26-SEP-83 DON'T PUT BUFFER IN 5 OR 6 FOR VT125 / LOAD GRAPHICS FROM DISK AND/OR CPMEM / 023 GDH 18-APR-83 Moved Buffer from field 5 to field 6. / 022 GDH 17-APR-83 Moved Buffer defns from WPF1 to local. / 021 GDH 13-APR-83 Implemented larger COMMUNICATIONS / buffer into field 5. / ---------------------------------------- / | EDIT HISTORY BELOW IS FOR DECmate II | / ---------------------------------------- / 020 DFB 14-DEC-82 Ignore blk 0 as hdr(error) / 019 SBB 25-aug-82 changed cursor position at "DEOPEN" / from top line to row 1 / / 018 mjs 10-aug-82 Deleted "H2INIT" (communications init) / within subroutine "CU3COM". The HOST / will be init only at POWER-UP and / "CC" menu. / / --------------------------------------- / | EDIT HISTORY BELOW IS FOR DECmate I | / --------------------------------------- / 017 GDH 23-MAR-82 Implemented the "valid goto page" bit / in header pointer. / 016 GDH 15-NOV-81 Take into consideration Extn blocks. / 015 GDH 12-NOV-81 Modified DELETE to delete RPG blocks. / 014 GDH 16-OCT-81 Implemented 3rd TM option (DWORD) / 013 GDH 14-OCT-81 added clear of menu lock word for / ax/dx upon their initialization. / De-implemented LOCK/UNLOCK. / 012 GDH 2-Oct-81 Moved COMM support to sys field. / 011 GDH 29-Sep-81 Fixed bug in loading port 0 / characteristics (port 1 was / always being selected). / 010 GDH 22-Sep-81 Primary/Secondary port support. / 009 GDH 26-Aug-81 WPFILS calling seq changes. / Removed SLAVE SCREEN/EXCHANGE KBDS / command utilities. / 008 TT 07-JUL-81 Removed superfluous conditionals / 007 JM 09-APR-81 Deleted patch into H2PAT since this / location is no longer used / 006 DAO 18-SEP-80 MERGED WITH X3.5 / 005 DM,JM 15-SEPT-80 MERGED SCANDI AND EUROPE/ENGLISH / 004 DSS 09-JUL-80 MOFIDIED FOR ENGLISH/FRENCH-CANADIAN / 003 CMW 5-MAY-80 ENTERED CANADA TRANSLATIONS / 002 DSS 17-APR-80 ENTERED DUTCH FIXES / 001 GLT 24-Mar-80 Inserted French, German and Dutch translations / French diacritical substitutions: / "["-L.A.E, "]"-L.G.E; "&" unavailable / German diacritical substitutions: / "["-L.U.A, "\"-L.U.O, "]"-L.U.U; "&" usable / III.D MB 1-APR-78 PUT IN SYSTEM OPTIONS / III.D KEE 29-MAR-78 CHANGED FOR WT FILENUMBER REP. PLUS CLEANUP / 2.N-1 RLT 9/14/77 CREATED FROM WPCU2 / WRITES OUT WPCU3 / *200 JMP I .+3 JMP I .+1 7600 RXLOAD *RXLDLS RXEWT=4 RXEWT 0 RXQBLK=11 RXQBLK . DLOCU3 / ++++ 0 / ++++ CDF 20 / ++++ -DSOCU3 0 / FIELD 2 / *100 / THE FIRST 100 LOCATIONS ARE USED FOR THE SYSTEM / CIFMYF=CIFBUF / DEFINE OUR FIELD. CDFMYF=CDFBUF / ... CDFTFL=CDFSYS /A029 / ROUTINE TO GET A CHARACTER FROM THE DOCUMENT FILE /A040 CHRGET, XX / GET A CHARACTER FROM DOCUMENT /A040 CIFFIO / CHANGE TO HANDLER FIELD /A040 FILEIO / MAKE A REQUEST OF THE FILE SYSTEM /A040 XRDFNC / READ A CHARACTER FROM THE DOCUMENT /A040 SPA / CHECK FOR ANY READ ERRORS /A040 JMP DELERR / YES, GO HANDLE THE READ ERROR /A040 SNA / CHECK FOR END OF DOCUMENT /A040 JMP DELEOF / YES, GO HANDLE END OF DOCUMENT /A040 JMP MSKIT / Mask char /A043 CHRGEX, JMP I CHRGET / RETURN TO CALLER WITH CHARACTER IN AC /A040 / ROUTINE TO GET AND CHECK A CHARACTER FROM THE DOCUMENT /A040 DELCHK, XX / GET AND CHECK A DOCUMENT CHARACTER /A040 DELCK1, JMS CHRGET / GET CHARACTER FROM THE DOCUMENT /A040 JMS DELFLT / CHECK FOR A PRINTABLE CHARACTER /A040 JMP DELCK1 / NOT PRINTABLE, IGNORE IT /A040 TAD (-ECSTOV) / COMBINE WITH START DEAD KEY CODE /A040 SNA CLA / IS THIS A START OF DEAD KEY CODE ? /A040 JMP DELCK2 / YES, GO CHECK FOR A TEC CHARACTER /A040 DELXIT, TAD T2 / GET THE SAVED DOCUMENT CHARACTER /A040 ISZ DELCHK / BUMP PAST TECH CHARACTER RETURN /A040 DELTEC, ISZ DELCHK / BUMP PAST END OF FILE ERROR RETURN /A040 DELEOF, ISZ DELCHK / BUMP PAST READ ERROR RETURN /A040 DELERR, JMP I DELCHK / RETURN TO CALLER /A040 DELCK2, JMS CHRGET / GET THE NEXT CHARACTER FROM DOCUMENT /A040 TAD (-ECSPC) / COMBINE WITH SPACE CODE /A040 SZA CLA / IS THIS START OF A TEC CHARACTER ? /A040 JMP DELXIT / NO, GO RETURN TO CALLER /A040 JMS CHRGET / YES, GET NEXT CHARACTER FROM DOCUMENT /A040 TAD (-ECSPC) / COMBINE WITH SPACE CODE /A040 SNA CLA / IS THIS START OF A REQUIRED SPACE ? /A040 JMP DELXIT / YES, GO RETURN TO CALLER /A040 TAD T2 / NO, GET THE SAVED DOCUMENT CHARACTER /A040 TAD (-62) / COMBIND WITH SECOND G-SET CODE /A040 SZA / IS THIS THE SECOND G-SET ? /A040 JMP DELCK3 / NO, MUST BE FIRST OR THIRD /A040 TAD (7400) / YES, SET UP SECOND G-SET CODE /A040 JMP DELSET / GO SET UP CHARACTER SET SELECTION /A040 DELCK3, SMA CLA / IS THIS THE THIRD G-SET CODE ? /A040 TAD (7400) / YES, SET UP THIRD G-SET CODE /A040 TAD (200) / NO, SET UP FIRST G-SET CODE /A040 DELSET, DCA T1 / STORE CHARACTER SET SELECTION CODE /A040 JMS CHRGET / GET NEXT CHARACTER FROM DOCUMENT /A040 AND P177 / MASK OFF ANY HIGH ORDER BITS /A040 DCA DELMS1 / STORE CHARACTER TO BE DISPLAYED /A040 CDIMNU / CHANGE TO MENU FIELD /A040 TAD I (MUBUF+MNLANG) / PICK UP THE LANGUAGE WORD /A040 DCA T2 / STORE FOR RESET TO PROPER LANGUAGE /A040 CDFMYF / SET TO THIS FIELD FOR IOACAL RETURN /A040 JMS I IOACAL / CALL SYSTEM DISPLAY ROUTINE /A040 0 / USE DEFAULT OUTPUT ROUTINE /A040 DELMSG / CONTROL STRING TO USE /A040 T1 / CHARACTER SET SELECTION CODE /A040 DELMS1 / CHARACTER TO BE DISPLAYED /A040 T2 / RESET LANGUAGE SELECTION CODE /A040 JMP DELTEC / GO RETURN AND COUNT THE CHARACTER /A040 DELMS1, .-. / ASCII CHARACTER TO BE DISPLAYED /A040 0 / TERMINATOR FOR ASCII STRING /A040 /-------------------- PAGE /d021; CU3BF1=7400 / TEMP BUFFER THAT CAN BE USED BY ANY OF THE RROUTINES / XX / CUDELT - DELETE COMMAND JMS CUDELT CDIMNU JMP I .-3 / XX / CUSS - SLAVE SCREEN HLT / SHOULD NEVER GET HERE. /M009 CDIMNU JMP I .-3 / XX / CUXK - EXCHANGE KEYBOARDS HLT / SHOULD NEVER GET HERE. /M009 CDIMNU JMP I .-3 / CU3COX, XX JMS CU3COM / WILL CALL IN THE CORRECT COMMUNICATIONS OVERLAY AFTER CDIMNU JMP I .-3 / SETTING THE CORRECT OPTIONS FOR THE LINE / / THESE ARE CONSTANTS USED BY THE DELETE COMMAND / DELIMB=-400 / THE SIZE OF THE BLOCK BUFFER DEBUFR=5200 / STARTING ADDRESS OF THE BLOCK DEBUF=3000 / ADDRESS OF THE RECORD BUFFER /M0009 DERCAY=5600 / THE RECORD NUMBERS TO BE DELETED / TAB=11 / THE TAB VALUE LF=12 / VALUE FOR A LINE FEED CR=15 / CARRIGE RETURN BLANK=40 / ASPACE / LNCNT=-12 / THE LINE COUNTER CRCNT=-120 / NEGATIVE CHARACTER COUNT FOR A LINE RECLIM=-2577 / NEGATIVE THE LIMIT OR CHARACTERS IN A RECORD / DESTRP=1014 / THE START OF PRINTER CONTROL DENDP=1414 / END OF PRINTER CONTROL DESTRR=16 / START OF RULER DENDR=17 / END OF RULER / / / THIS IS THE DELETE COMMAND. / CUDELT, XX / CLA DCA DELERT / CLEAR THE ERROR FLAG / CDFBUF / CLEAR THE BEGINNING OF THE BUFFERS DCA I (DEBUF) / THE BUFFER FOR A RECORD WHEN CHECKING / THE INDEX DOCUMENT DCA I (DERCAY) / THE BUFFER CONTAINING THE RECORDS TO / DELETE FROM THE INDEX DOCUMENT CDFMYF / DCA DEPRNT / CLEAR THE PRINTER CONTROL FLAG DCA DERULE / CLEAR THE RULER FLAG TAD (CRCNT) / INITALIZE THE CHARACTER COUNT FOR A LINE DCA DELCTM TAD (LNCNT) / INITALIZE THE LINE COUNTER TO A NEGATIVE 10 DCA DELLTM DCA DELMT DCA DELERT / CLEAR THE ERROR CODE / CDFMNU / GET THE FILE NUMBER TO BE DELETED TAD I (MUBUF+MNFNO) CDFMYF / DCA DELFND / SAVE THE NUMBER TAD DELFND / CREATE AN ABSOLUTE FILE NUMBER AND P377 DCA DELFNO / CDFMNU / GET THE DRIVE THAT THE FILE IS ON TAD I (MUBUF+MNDRV) CDFMYF / DCA DELDRV / SAVE IT TAD DELDRV BSW / ++++ RTL CLL / POSITION DRIVE NUMBER AND INCLUDE A IAC / DOCUMENT MUNBER OF 1 DCA DELIND / BE USED FOR THE INDEX / THE FIRST 10 LINES OF THE DOCUMENT TO BE DELETED ARE DISPLAYED FOR / THE USER'S APPROVIAL / DEOPEN, JMS DEINDX / CHECK HDR BLOCK FOR 0 /A020 CIFMNU JMS I IOACAL / "Beginning of document to be deleted" 0 / default output routine DELNMS / message text address 0 / cursor position for clear screen 0100 / PUT HEADING ON 2ND LINE /A019 IFDEF CANADA < 141 / L.G.A--Accented character > IFDEF FRENCH < 141 / L.G.A--Accented character > 300 / cursor position for document text / DCA DEPRNT / CLEAR THE FLAG FOR PRINT CONTROL DCA DERULE / CLEAR THE RULER FLAG / TAD DELFND / GET THE FILE TO BE DELETED CIFFIO / FILEIO / XRDFIN / INITALIZE THE READFIL ROUTINE / DELLP1, JMS DELCHK / GET AND CHECK A DOCUMENT CHARACTER /A040 JMP DERRO2 / HANDLE READ ERROR ON FILE DETECTED JMP DEXT / HANDLE END OF DOCUMENT ENCOUNTERED JMP DELLP3 / TECH CHARACTER, GO COUNT IT /A040 AND P177 / MASK OF HIGH ORDER BITS TAD (-LF) / SEE IF A LINE FEED SNA / ++++ JMP DELRES TAD (LF-TAB) / CHECK FOR TAD CHANGE TO SPACE SNA / ++++ JMP DETAD2 TAD (TAB-40) / GET RID OF UNWANTED CONTROL CHARACTERS SPA / ++++ JMP DELLP1 TAD (40) DELLP2, JMS DELDIS / DISPLAY THE CHARACTER DELLP3, ISZ DELCTM / INCREMENT THE CHAR COUNT FOR A LINE JMP DELLP1 DELRES, TAD (CRCNT) / RESET THE CHARACTER COUNT FOR LINE OVERFLOW DCA DELCTM TAD (LF) / INSERT A LF TO THE SCREEN JMS DELDIS TAD (CR) / NOW A CR TO END THE LINE JMS DELDIS ISZ DELLTM / THE LINE COUNTER (COUNTS THE 10) JMP DELLP1 JMP DEXT / DONE WITH THE DOCUMENT DISPLAY DETAD2, TAD (BLANK) / INSERT A BLANK JMP DELLP2 DELRUT,/D013; JMS ULKSUB / UNLOCK THE DOCUMENT AND INDEX /D013; DELIND /D013; JMS ULKSUB /D013; DELFND CUEXIT, JMP I CUDELT DELFNO, 0 DELFND, 0 DELIND, 0 DELDRV, 0 DELCTM, 0 DELLTM, 0 MSKIT, AND P177 / Mask each char /A043 DCA T2 / SAVE THE CHARACTER /A040 TAD T2 / GET THE CHARACTER BACK AGAIN /A040 JMP CHRGEX / Go back now /A043 /-------------------- PAGE /D013; /D013;/ /D013;/ ULKSUB - ROUTINE TO UNLOCK A FILE /D013;/ /D013;/ CALL: JMS ULKSUB /D013;/ FNOADD ADDRESS OF THE FILE NUMBER WITH DRIVE NUMBER IN /D013;/ BITS 0-3 /D013;/ /D013;ULKSUB, XX /D013; CLA /D013; IFDEF WS102 < /D013; TAD I ULKSUB /D013; DCA ULKP1 /D013;/ /D013; CIFPRT /D013; JMS I (ULKFIL) /D013;ULKP1, 0 /D013; USERNO /D013;/ /D013; > /D013;/ /D013; ISZ ULKSUB /D013; JMP I ULKSUB / / NOW CHECK THE INDEX FILE FOR THE NAMES GIVEN TO THE FILE FOR DELETION / TO ASK THE USER IF THEY ARE CORRECT / DEXT, CLA DCA DERULE / CLEAR THE RULER FLAG DCA DEPRNT / AND THE PRINTER CONTROL / TAD DELIND / OPEN THE INDEX FILE FOR READING CIFFIO / ++++ /M0009 FILEIO / ++++ /M0009 XRDFIN CLA DCA DERCNT / CLEAR THE RECORD COUNT OF THE INDEX TAD (DERCAY) / GET THE STARTING ADDRESS OF THE ARRAY / CONTAINING THE RECORDS TO BE DELETED DCA DETARY DELKIN, ISZ DERCNT / INCREMENT THE RECORD COUNTER JMS DERDNM / READ IN A RECORD DEADR3 / THIS IS THE SEQUENCE THAT DENOTES EOR JMP DEDONE / THERE IS NO MORE RECORDS / CLA TAD (DEBUF-1) / START CHECKING FOR THE PARTS DCA X2 / THAT ARE DEFINED IN A RECORD / JMS DECKTK / CHECK FOR THE DEADR1 JMP DERRO1 / NONE FOUND / CLA TAD X2 / SAVE THE LOCATION THAT IT WAS FOUND AT DCA DETMP2 / TO COMPARE TO THE LOCATION OF THE <#> / JMS DECKTK / SEE IF ANY MORE EXIST IN THE RECORD DEADR1 JMP DEJMP1 / NONE FOUND OK JMP DERRO1 / ANOTHER FOUND ITS AN ERROR / / / NOW THE CHECK FOR THE <#> TO FIND THE FILE NUMBER RELATED TO THE / RECORD BEING EXAMINED / DEJMP1, CLA TAD (DEBUF-1) / SET THE STARTING ADDRESS OF THE SEARCH DCA X2 / JMS DECKTK / LOOK FOR A <#> DEADR2 JMP DERRO1 / NONE FOUND-AN ERROR / CLA TAD X2 / SAVE THE LOCATION THAT THE <#> IS IN TO DCA DETMP3 / CHECK THAT THE <#> IS AFTER THE / JMS DECKTK / CHECK FOR ANY MORE <#> IN THE RECORD DEADR2 SKP JMP DERRO1 / YES / CLA / CHECK FOR THE RIGHT ORDER TAD DETMP2 CIA TAD DETMP3 SPA CLA / ++++ JMP DERRO1 / TAD DETMP3 / SET THE SEACH LOCATION TO THE LOCATION DCA X2 / AFTER THE <#> TO CHECK THE FILE NO. / JMS DEFNUM / CONVERT THE NUMBER IN THE RECORD TO JMP DERRO1 / BINARY TO COMPARE TO THE FILE NO. / TO BE DELETED CIA TAD DELFNO / COMPARE THE NUMBERS SZA CLA / ++++ JMP DELKIN TAD DERCNT / SAVE THE RECORD COUNT FOR DELETING / CDFBUF DCA I DETARY ISZ DETARY DCA I DETARY CDFMYF / TAD DETMP2 / GET THE LOCATION OF THE DCA X2 / SAVE IT AS THE POINTER / TAD DELMT / SEE IF THE MESSAGE IS ALREADY UP SZA CLA / ++++ JMP DEJMP2 / IF SO DONT DO IT AGAIN ISZ DELMT / TAD DELFND AND P377 DCA DEJNO CIFMNU JMS I IOACAL / Print "Entries in document for #.# --" 0 / default output routine DEDCNM / string address 1600 / cursor position DELDRV / drive number DEJNO, 0 / document number 2000 / cursor position / CLA DEJMP2, JMS DECKDS / DISPLAY THE NAME ON THE SCREEN JMP DERRO1 / JMP DELKIN DETARY, 0 DETMP2, 0 DETMP3, 0 DELMT, 0 DEXTNL, ZBLOCK 22 / 1 FOR HEADER /A016 / 16. FOR EXTENSIONS. /A016 / 1 FOR STOPPER (ALWAYS 0). /A016 /************ /************ THE NEXT 3 LOCATIONS MUST REMAIN IN ORDER FOR THE DELT ROUTINE. /************ DEHDBK, 0 DERHBK, 0 / RAPID PAGINATION HEADER BLOCK #1. /A015 0 / HEADER STOPPER. /A016 /-------------------- PAGE / / DELETE THE RECORDS IN THE INDEX DOCUMENT IF ANY / THAT ARE FOR THE DOCUMENT TO BE DELETED / DECONT, CLA DCA DELERT / CLEAR THE ERROR FLAG TAD (DERCAY) / GET THE START ADDRESS OF THE LIST OF RECORDS DCA DEBFT / TO BE DELETED / CDFBUF TAD I DEBFT CDFMYF / SNA CLA / ++++ JMP DEDON1 / IF ZERO SKIP THE PROCESS / TAD DELIND / OPEN THE INDEX FILE TO BE MODIFIED MQL CIFFIO / ++++ /M0009 FILEIO / ++++ /M0009 XDSKIN / OPEN THE INDEX CLA DCA DERCNT / CLEAR THE RECORD COUNT DEWTIL, ISZ DERCNT / CDFBUF TAD I DEBFT / GET FIRST RECRD TO BE DELETED CDFMYF / SNA / ++++ JMP DEDON3 / IF ZERO DONE CIA / ++++ TAD DERCNT / SEE IF THE RECORD IS TO BE DELETED SZA CLA / ++++ JMP DEWTL2 / JMS DELCUR / DELETE RECORD DEADR3 JMP DERRO1 / ISZ DEBFT JMP DEWTIL DEWTL2, JMS DECOPY / COPY THE RECORD DONT DELETE DEADR3 JMP DEDON2 / JMP DEWTIL DEDON3, JMS DECOPY / DONE NOW SCROLL THROUGH THE REMAINING OF THE DEADR3 / INDEX JMP DEDON2 / JMP DEDON3 DEDON2, CIFFIO / ++++ /M0009 FILEIO / ++++ /M0009 XDSKCL / CLOSE INDEX JMP DEDON1 / CONTINUE ON THE NEXT PAGE. DEBFT, 0 DERCNT, 0 / / ROUTINE TO CHECK HDR BLOCK=0(ILLEGAL) / MAYBE CHANGED DOC DISKETTE AFTER INDEX, OR COPY / AND USED DEFAULT CONDITION TO DELETE NON-EXISTENT DOC. / DEINDX, 0 /A020 TAD (4000+RXEDN) /GET DENSITY(OPEN) /A020 JMS DESETQ /SET Q BLOCK AND DO IT /A020 SPA CLA /ERROR RET? /A020 JMP DELRUT /YES /A020 TAD (RXEGF) /SET THE FNC FOR GET FIRST /A020 DCA QUQBLK+RXQFNC /SET IT /A020 JMS QURX /DO IT /A020 CLA TAD QUQBLK+RXQBLK /GET BLOCK NO /A020 SZA CLA /IS BOOT BLK(ERR) /A020 JMP I DEINDX /NO PROCESS /A020 JMP DELRUT /YES IS ERROR /A020 / /SET IO PARAMETERS----- / SUBROUTINE TO SAVE SPACE /A020 / MOVED VER 020--- / ENTERS WITH FUNCTION CODE IN AC /A020 DESETQ, 0 /A020 DCA QUQBLK+RXQFNC TAD DELFNO / SET THE DOCUMENT HEADER BLOCK TO READ DCA QUQBLK+RXQFNO TAD (DEBUFR) / SET THE BUFFER ADDRESS DCA QUQBLK+RXQBAD TAD (CDFBUF) / MAKE CDF BUFFER. DCA QUQBLK+RXQBFD DCA QUQBLK+RXQBLK / CLEAR THE BLOCK NUMBER TAD DELDRV / SET THE DRIVE IN THE QUEUE BLOCK DCA QUQBLK+RXQDRV JMS QURX JMP I DESETQ /A020 / / THE STRINGS THAT ARE USED FOR DELIMITERS / DEADR1, "<-200 / ++++ 156 / ++++ ">-200 / ++++ 0 DEADR2, "<-200 / ++++ "#-200 / ++++ ">-200 / ++++ 0 DEADR3, "<-200 / ++++ ">-200 / ++++ 0 IFDEF VT125R < /WE MUST RELOAD THE CRITICAL VALUES ON PAGE ZERO BEFORE WE LEAVE /A031 /....MOVES LOCS 20-76 FIELD 0 TO PRINT FIELD /A031 SETPG0, 0 /RESET PAGE 0 LOCS 20-76 /A031 TAD (20-T1) / INITIALIZE 10020-10076 /A031 DCA T1 / UP TO BUT NOT INCLUDING T1! /A031 TAD (20-1 / ELSE THIS LITTLE SECTION BLOWS AWAY! /A031 DCA X0 /A031 TAD (20-1 /A031 DCA X1 /A031 WAKEU1, CDFSYS /A031 TAD I X0 /A031 CDFPRT /A031 DCA I X1 /A031 ISZ T1 /A031 JMP WAKEU1 /A031 CDFMYF /A031 TAD (CIFPRT /RESET CALL TO FLABUZ NOW THAT PRTFLD IN/A034 JMS SETFLA /SET IT /A034 JMP I SETPG0 /RET /A031 > /END IFDEF VT125R /A031 /-------------------- PAGE / / NOW THE DOCUMENT WILL BE ACTUALLY DELETED / DEDON1, CLA TAD DELFND / OPEN THE DOCUMENT FOR OVERWRITE MQL AC7777 CIFFIO / ++++ /M0009 FILEIO / ++++ /M0009 XDSKIN / CIFFIO / ++++ /M0009 FILEIO / ++++ /M0009 XDSKCL / CLOSE IT / CLA TAD (RXEGF) / SET THE FUNCTION FOR GET FIRST JMS DESETQ /SET UP Q BLK /A020 / CLA TAD QUQBLK+RXQBLK / SAVE THE BLOCK NUMBER THAT THE HEADER DCA DEHDBK / IS IN TAD DEHDBK / READ THE HEADER BLOCK INTO OUR BUFFER./A015 SNA / SKIP IF THERE IS ONE. /A015 JMP DENOHD / JMP IF NO HEADER BLOCK. /A015 DCA QUQBLK+RXQBLK / SET BLOCK TO READ. /A015 TAD (RXERD) / SET FUNCTION CODE TO READ. /A015 DCA QUQBLK+RXQFNC / ... /A015 JMS QURX / GO GET IT. /A015 / /A015 AC0001 / SEE IF "VALID GOTO PAGE STRUCTURE" BIT/A017 AND DEBUFR+1 / IS SET. IF NOT THEN IGNORE GTP PNTR. /A017 SZA CLA / SKIP IF NOT SET. IGNORE PTR. /A017 TAD DEBUFR+53 / GET RAPID-PAGINATION HEADER BLOCK #. /A015 DCA DERHBK / SAVE RPG HEADER BLK # /A015 AC7776 / 2 HEADERS TO DE-ALLOCATE. /A016 DCA T1 / ... /A016 TAD (DEHDBK-1) / GET HEADER LIST POINTER. /A016 DCA X0 / ... /A016 / /A015 DECON1, TAD (DEXTNL-1) / SAVE HEADER EXTENSION LIST PTR. /A016 DCA X1 / ... /A016 TAD I X0 / GET HEADER POINTER. /A016 DCA QUQBLK+RXQBLK / SAVE IN QUEUE BLOCK. /A016 TAD QUQBLK+RXQBLK / GET HEADER BLOCK PTR. /A016 SNA / SKIP IF THERE IS ONE (MORE) TO PROCESS/A016 JMP DENOHD / JMP WHEN DONE. /A016 DCA I X1 / SAVE IN HEADER XTN LIST. /A016 TAD (RXERD) / SET FUNCTION TO "READ". /A016 DCA QUQBLK+RXQFNC / ... /A016 JMS QURX / GO DO IT. /A016 CLA / GET EXTN PTRS 1 & 2 FROM FILE HDR. /A016 TAD DEBUFR+2 / (GET EXT #1) /A016 DCA I X1 / SAVE IT. /A016 TAD DEBUFR+3 / (GET EXT #2) /A016 DCA QUQBLK+RXQBLK / SET UP TO READ IT TO. /A016 TAD QUQBLK+RXQBLK / SAVE IT IN THE HDR LIST TOO. /A016 SNA / SKIP IF THERE IS AN EXTENSION LIST /A016 JMP DEDNLS / JMP IF DONE LIST. /A016 DCA I X1 / SAVE PTR IN LIST. /A016 JMS QURX / READ 2ND XTN BLOCK. /A016 CLA / /A016 TAD (DEBUFR+361) / SET PTR TO XTN LIST. /A016 DCA X2 / ... /A016 TAD (-16) / PICK UP 14. POINTERS. /A016 DCA T2 / SET UP FOR ISZ LOOP. /A016 DEXTL1, TAD I X2 / TRANSFER FROM HDR XTN LIST TO /A016 SNA / (SKIP IF NOT DONE. /A016 JMP DEDNLS / JMP TO SET STOPPER). /A016 DCA I X1 / OUR XTN LIST. /A016 ISZ T2 / LOOP ON THE # OF PTRS IN THE XTN LIST./A016 JMP DEXTL1 / JMP IF MORE TO DO. /A016 DEDNLS, DCA I X1 / SET STOPPER. /A016 TAD (DEXTNL-1) / GET HEADER BLOCK LIST POINTER. /A016 DCA X1 / RESET LIST POINTER. /A016 JMS DECLBF / CLEAR THE BLOCK BUFFER. /A016 DECON2, CLA / /A016 TAD I X1 / GET NEXT BLOCK IN HEADER LIST. /A016 SNA / SKIP IF THERE IS ONE. /A016 JMP DECON1 / JMP IF ALL DONE DEALLOCATING THIS HDR./A016 DCA QUQBLK+RXQBLK / SET BLOCK TO INIT & DE-ALLOCATE. /A016 TAD (RXEWT) / 1ST INIT THE BLOCK. /A016 DCA QUQBLK+RXQFNC / SET WRITE OUT ZEROED BLOCK. /A016 JMS QURX / ... /A016 CLA / NOW TO DE-ALLOCATE THE BLOCK. /A016 TAD (RXEFR) / ... /A016 DCA QUQBLK+RXQFNC / .... /A016 JMS QURX / FREE IT UP. /A016 JMP DECON2 / GO DO NEXT HDR BLOCK. /A016 / /A016 / /A015 DENOHD, TAD (RXESF) / GET RID OF THE HEADER DCA QUQBLK+RXQFNC / TAD DELFNO / SET THE FILE DCA QUQBLK+RXQFNO / DCA QUQBLK+RXQBLK / BLOCK HAS TO BE SET TO ZERO JMS QURX / / CLA JMP DELRUT / GO BACK TO CALLER /-------------------- PAGE / / THE ERROR HANDLING / TVALUE IN MNTMP2 HAS THE TYPE OF ERROR / AND IN MNTMP1 IS THE RETURN VALUE FROM THE MENU / DERRO1, CLA CDFBUF / IF INDEX IS BAD THEN DONT TOUCH IT DCA I (DERCAY) CDFMYF JMP DERR1B DERRO3, ISZ DELERT DERRO2, ISZ DELERT DERR1B, ISZ DELERT JMP DEDONR / DEDONE, CLA DCA DERULE DCA DEPRNT DCA DELERT DEDONR, CLA TAD DELERT / CDFMNU DCA I (MUBUF+MNTMP2) CDFMYF / CIFMNU JMS I MNUCAL DLMDL2 / CDFMNU TAD I (MUBUF+MNTMP1) CDFMYF / SNA CLA / ++++ JMP DELRUT JMP DECONT DELERT, 0 / / DERDNM - READ IN A RECORD FROM THE INDEX FILE TO THE BUFFER / DEBUF. / DERDNM, XX CLA TAD (RECLIM) / SET THE RECORD SIZE LIMIT DCA DERCTM TAD (DEBUF-1) / SET THE STARTING ADDRESS DCA X1 DECLFG, TAD I DERDNM / GET THE TERMINATING STRING OF A RECORD DCA DETMP1 DELUP2, CLA CIFFIO / ++++ /M0009 FILEIO / ++++ /M0009 XRDFNC / GET A CHARACTER SPA / ++++ JMP DERRO3 SNA / ++++ JMP DEOF / REACHED END OF FILE JMS DELFLT / CHECK FOR NOT PRINT THINGS JMP DELUP2 / NG / AND P177 ISZ DERCTM / INCREMENT CHARACTER COUNT SKP / ++++ JMP DERRO1 CIA TAD I DETMP1 / CHECK FOR A DELIMITER SNA / ++++ JMP DEUPDT CIA / ++++ TAD I DETMP1 / GET HTE ORIGINAL BACK / CDFBUF DCA I X1 CDFMYF / JMP DECLFG DEUPDT, CIA / ++++ TAD I DETMP1 / CDFBUF DCA I X1 CDFMYF / ISZ DETMP1 / CHECK THE NEXT CHARACTER IN THE STRING TAD I DETMP1 SZA CLA / ++++ JMP DELUP2 / FOR A ZERO / CDFBUF / END THE STRING READ IN WITH A ZERO DCA I X1 CDFMYF / ISZ DERDNM / SKIP 2 IF OK DEOF, ISZ DERDNM / SKIP 1 IF EOF JMP I DERDNM DERCTM, 0 DETMP1, 0 / / DECOPY - WILL MOVE TO THE NEXT RECORD IN THE INDEX DOCUMENT / COPYING EVERYTHING IN IT / DECOPY, XX DECOP1, CLA TAD I DECOPY / GET THE ADDRESS OF THE STRING THAT WILL DCA DECPTM / TERMINATE THE COPY DECOP2, CIFFIO / ++++ /M0009 FILEIO / ++++ /M0009 XGETET / GET THE NEXT CHARACTER SPA / ++++ JMP DERRO3 / READ ERROR WITH INDEX SNA / ++++ JMP DECOPN / IF ZERO REACHED EOF DCA DECPCR / SAVE FOR LATER TAD DECPCR CIFFIO / ++++ /M0009 FILEIO / ++++ /M0009 XPUTST / SAVE THE CHARACTER TAD DECPCR / SEE IF IT MATCHES THE DELIMITER AND P177 CIA / ++++ TAD I DECPTM / COMPARE CHARACTER TO DELIMITER SZA / ++++ JMP DECOP1 ISZ DECPTM / FOUND MATCH INCREMENT THE POINTER CLA TAD I DECPTM / GET THE NEXT CHARCATER OF THE DELIMITER SZA CLA / ++++ JMP DECOP2 / SEE IF ZERO ISZ DECOPY / YES DONE DECOPN, ISZ DECOPY JMP I DECOPY DECPTM, 0 DECPCR, 0 /-------------------- PAGE / / DELCUR - DELETES THE CURRENT RECORD / DELCUR, XX DELCR1, CLA TAD I DELCUR / GET THE ADDRES OF THE STRING TO STOP THE DELETE DCA DELCRT DELCR2, CIFFIO / ++++ /M0009 FILEIO / ++++ /M0009 XGETET / GET THE NEXT CHARACTER OF THE INDEX SPA / ++++ JMP DERRO3 / READ ERROR WITH THE INDEX SNA / ++++ JMP DELCEN JMS DELFLT / SEE IF THE CHARACTER HAS A SPECIAL MEANING JMP DELCR3 / IF SO COPY IT / CIA / ++++ TAD I DELCRT / IF NOT CHECK FOR DELIMITER SZA CLA / ++++ JMP DELCR1 ISZ DELCRT / IF A DELIMITER CHECK FOR LAST TAD I DELCRT SZA CLA / ++++ JMP DELCR2 TAD (BELL) / INSERT A BELL FOR THE EDITOR CIFFIO / ++++ /M0009 FILEIO / ++++ /M0009 XPUTST ISZ DELCUR / IF DONE INCREMENT DELCEN, ISZ DELCUR JMP I DELCUR DELCR3, CIFFIO / ++++ /M0009 FILEIO / ++++ /M0009 XPUTST / SAVE THE CHARACTER JMP DELCR2 DELCRT, 0 / / DECKDS - DISPLYS THE NAME PORTION OF THE CURRENT / RECORD TO THE SCREEN / DECKDS, XX DECKL3, CLA /D044 CDFBUF /D044 TAD I X2 /D044 CDFMYF JMS GETNXT / GET NEXT CHARACTER /A044 / SNA / ++++ JMP DECEND / ZERO MEANS EOF AND P177 TAD (-TAB) / CHECK FOR TABS AND CHANGE THEM TO SPACES SNA / ++++ JMP DETAB TAD (TAB-40) / GET RID OF CONTROL CHARS SPA / ++++ /D044 JMP DECKL3 JMP DECKST / GO CHECK FOR START-OF-DEAD /A044 TAD (40) CIA / ++++ TAD DECKDT / SEE IF A < HAS BEEN FOUND SNA / ++++ JMP DELFCR / YES CIA / ++++ TAD DECKDT / NO / DEDSOU, JMS DELDIS / DISPLAY THE CHARACTER / JMP DECKL3 DELFCR, CLA TAD (LF) / TERMINATE THE LINE JMS DELDIS TAD (CR) JMS DELDIS ISZ DECKDS / OK DECEND, JMP I DECKDS DETAB, CLA TAD (BLANK) JMP DEDSOU DECKDT, "<-200 / / GETCHR - GET A CHARACTER / GETCHR, XX CLA TAD I GETCHR DCA T1 ISZ GETCHR TAD I T1 CLL RAR TAD I GETCHR DCA T1 TAD I T1 SNL / ++++ BSW AND P77 ISZ GETCHR JMP I GETCHR / / THIS IS THE QUEUE ROUTINE TO RXHAN. THE REQUEST IS IN QUQBLK / USED BY DELETE AND SYSTEM OPTIONS / QURX, XX CIFSYS / ++++ ENQUE / ++++ QUBLK QURX1, CIFSYS / ++++ JWAIT TAD QUQBLK+RXQCOD SNA / ++++ JMP QURX1 JMP I QURX / QUBLK, DSKQUE / ++++ 0 / ++++ 0 QUQBLK, ZBLOCK 17 LOADMC, 23 / ++++ 200 / ++++ CIF 20 / MAG CARD I LOADCX, 3 / ++++ 200 / ++++ CIF 20 / CX LOADAX, LOADDX, 5 / ++++ 200 / ++++ CIF 10 / AX AND DX /-------------------- PAGE / / DELFLT - WILL CHECK FOR A RULER OR PRONTER CONTROL STRING / IF IT ISTHE CHARACTER WIL BE RETURNED ON A NON-SKIP RETURN / IF IT IS ANYTHING ELSE IT WILL RETURN THE CHARACTER IN THE AC ON / ASLIP RETURN / DELFLT, XX TAD (-DENDP) / CHECK FOR A END OF PRINTER CONTROL CHAR. SNA / ++++ JMP DELEP / CLEAR THE FLAG IF IT IS TAD (DENDP-DENDR) / CHEKC FOR END OF RULER SNA / ++++ JMP DELER / IF SO DELETE THE RULER FLAG MQL TAD DEPRNT / SEE IF THE PRINTER CONTROL FLAG IS SET TAD DERULE / CHECL THE RULER FLAG SZA CLA / ++++ JMP DELRTN MQA TAD (DENDR-DESTRP) / SEE IF IT IS A START OF SNA / ++++ JMP DELFP / PRINTER CONTROL TAD (DESTRP-DESTRR) / CHECK FOR START OF RULER SNA / ++++ JMP DELRP TAD (DESTRR) ISZ DELFLT / OK JMP I DELFLT DELFP, TAD (DESTRP) ISZ DEPRNT / SET PRINTER FLAG JMP I DELFLT DELRP, TAD (DESTRR) ISZ DERULE / SET RULER FLAG JMP I DELFLT DELEP, DCA DEPRNT TAD (DENDP) JMP I DELFLT DELER, DCA DERULE TAD (DENDR) / RETURN VALUE JMP I DELFLT DELRTN, MQA TAD (DENDR) / GET ORIGINAL VALUE JMP I DELFLT DERULE, 0 DEPRNT, 0 / / DECKTK - WILL SEARCH IN THE BUFFER FIELD STARTING WITH THE ADDRESS / IN X2 FOR THE STRING MATCH WHOSE STARTING ADDRESS IS IN THE NEXT LOCATION / AFTER THE CALL TO THIS ROUTINE / DECKTK, XX DECKL1, CLA TAD I DECKTK / GET THE ADDRESS OF THE COMPARE STRING DCA DECKTM DECKL2, CDFBUF TAD I X2 CDFMYF / AND P177 / GET ONLY 7 BITS SNA / ++++ JMP DECKEN / END OF SEARCH STRING CIA / ++++ TAD I DECKTM / COMPARETO DELIMITER STRING SZA CLA / ++++ JMP DECKL1 / IFNOT EQUAL START AGAIN ISZ DECKTM / INCREMENT THE POINTER TAD I DECKTM SZA CLA / ++++ JMP DECKL2 / RETURN IF ZERO ISZ DECKTK / SKIP 2 IF OK DECKEN, ISZ DECKTK / SKIP ONE IF END OF STRING JMP I DECKTK DECKTM, 0 / / DEFNUM - CONVERTS THE ASCII STRING STARTING AT THE ADDRESS / IN THE BUFFER FIELD IN X2 TO BINARY. / DEFNUM, XX CLA DCA DEFNM / CLEAR THE TEMP FOR THE NUMBER DEFNL1, CDFBUF TAD I X2 / GET HTE NEXT CHARACTER CDFMYF / AND P177 TAD (-72) / COMPARE IT TO A NUMBER SMA / ++++ JMP DEFNDN / IF NOT A NUMBER DONE TAD (12) SPA / ++++ JMP DEFNDN DCA DEFNMT / STORE THE VALUE TAD DEFNM / MULTIPLY BY 10 CLL RTL TAD DEFNM CLL RAL TAD DEFNMT DCA DEFNM JMP DEFNL1 DEFNDN, CLA TAD DEFNM SZA / ++++ ISZ DEFNUM / SKIP IF ANYTHING WAS FOUND JMP I DEFNUM DEFNM, 0 DEFNMT, 0 / / THE ROUTINE WILL SEND THE CHARACTER IN THE AC TO THE SCREEN / DELDIS, XX JMP DELDI2 DELDI1, CIF 0 / ++++ JWAIT DELDI2, CIF 0 / ++++ TTYOU JMP DELDI1 CLA JMP I DELDIS / / DECLBF - SETS THE BUFFER AREA DEBUFR TO ZEROS / DECLBF, XX CLA TAD (DEBUFR-1) / SET THE STARTING ADDRESS DCA X3 TAD (DELIMB) / SET THE COUNTER DCA DECLBT DELLBL, CDFBUF DCA I X3 CDFMYF ISZ DECLBT JMP DELLBL JMP I DECLBF DECLBT, 0 /-------------------- PAGE / /The following code is loaded into the start of the comm buffer. This /A021 /code is executed when comm (AX/DX/CX) is finished and returning to /A021 /Main Menu. The buffer pointers (in the sys COMM code) are reset to /A021 /their origonal values. /A021 / / THIS CODE MUST BE SELF CONTAINED AND MUST BE /A021 / ASSEMBLED AT THE START OF A PAGE.... /A021 / C3CODE, XX / The entry point. /A021 CLA / /A021 RDF / Get caller's field, make us x-field /A021 TAD CU3CDI / callable. /A021 DCA COMXXX / Set return CDI. /A021 CIF 60 / Hold interrupts. /A023 COMSYS, CDFSYS / Map sys field. /A021 TAD COMSYS / Reset buffer CDFs /A021 DCA I CU3BF1 / one, /A021 TAD COMSYS / ... /A021 DCA I CU3BF2 / two, /A021 TAD COMSYS / and /A021 DCA I CU3BF3 / three. /A021 TAD CU3BUF / Reset sys buffer pointer. /A021 DCA I CU3IGT / ... /A021 TAD CU3BUF / both of them. /A021 DCA I CU3IPT / ... /A021 DCA I CU3ICT / ZAP input buffer count. /A021 CDFTFL / Finally, Zap buffer size check./A021 /C029 TAD CU3TSZ / (check is done in the TSTFUL routine)/A021 DCA I CU3MAX / ... /A021 TAD M21 / and then reset the XOF point to 16 /A021 DCA I CU3XOF / chars from the end of the buffer. /A021 COMXXX, XX / return CIF CDF TO GO HERE. /A021 JMP I C3CODE / Now we can return to Main Menu. /A021 CU3CDI, CIF CDF 0 / CIF CDF for return. /A021 CU3BF1, CDFBF1 / Address of 1st CDF to patch. /A021 CU3BF2, CDFBF2 / Address of 2nd CDF to patch. /A021 CU3BF3, CDFBF3 / Address of 3rd CDF to patch. /A021 CU3IGT, H2IGET / Address of 1st buffer pointer. /A021 CU3IPT, H2IPUT / Address of 2nd buffer pointer. /A021 CU3BUF, H2IBUF / Address of sys buffer. /A021 CU3ICT, H2ICNT / Address of count word. /A021 CU3TSZ, -H2ISIZ / Max buffer size (for TSTFUL check). /A021 CU3MAX, H2IMAX / Loc of check word (in TSTFUL). /A021 M21, -21 / XOF point is reset to 16 chars from end/A021 CU3XOF, H2XOFP / Address of loc which holds XOF pointer/A021 BUFSTR=4000+.-C3CODE / Define start of Alternate buffer. /A021 BUFEND=7777 /Last location of buffer (ring pointer location). /A022 BUFSIZ=BUFEND-BUFSTR / max number of chars allowed into alternate buf/A022 / / MESSAGES / DEDCNM, IFDEF ENGLSH < TEXT '^P-- &ENTRIES IN THE INDEX DOCUMENT FOR !D.^D --^P' > IFDEF SPANISH < TEXT '^P-- &ANOTACIONES EN EL \MNDICE DE DOCS. PARA !D.^D --^P' > IFDEF DUTCH < TEXT '^P-- &NAAM OF NAMEN VAN DOCUMENT !D.^D IN DE INDEX --^P' > IFDEF ITALIAN < TEXT "^P-- &NOME DOCUMENTO CORRISPONDENTE ALL'INDICE !D.^D --^P" > IFDEF V30NOR < TEXT '^P-- OPPLYSNINGER OM !D.^D I DOK.-FORTEGNELSEN --^P' > IFDEF V30SWE < TEXT '^P-- &INF\VRD TEXT I INNEH\ELLSDOKUMENTET TILL !D.^D --^P' > / DELNMS, IFDEF ENGLSH < TEXT '^P!E ^P-- &BEGINNING OF THE DOCUMENT TO BE DELETED --^P' > IFDEF SPANISH < TEXT '^P!E ^P-- &COMIENZO DEL DOC. QUE SE HA DE BORRAR --^P' > IFDEF DUTCH < TEXT '^P!E ^P-- &BEGIN VAN TE WISSEN DOCUMENT --^P' > IFDEF ITALIAN < TEXT "^P!E ^P-- &INIZIO DEL DOCUMENTO DA CANCELLARE --^P" > /a041 IFDEF V30NOR < TEXT '^P!E ^P-- &BEGYNNELSEN AV DOKUMENTET SOM SKAL FJERNES --^P' > IFDEF V30SWE < TEXT '^P!E ^P-- &B\VRJAN AV DOKUMENTET SKA RADERAS --^P' > / CU3OVL, XX / SETS UP OVERLAY CHAIN INFO TAD I T1 / Get pointer to load info. DCA X1 / SAVE IN INDEX REG. AC7775 / ++++ DCA T1 / SET TO COPY THREE WORDS TAD (MUBUF+MNONUM-1)/ ++++ DCA X0 / TO MENU AREA / CUPSO1, TAD I X1 / GET NEXT WORD TO LOAD. CDFMNU / CHANGE TO MENU FIELD DCA I X0 / STORE NEXT WORD IN MENU AREA CDFMYF / CHANGE BACK TO MY FIELD / ISZ T1 / ++++ JMP CUPSO1 / LOOP FOR ALL WORDS JMP I CU3OVL / THEN RETURN TO CALLER CU3COE, CDFMNU DCA I (MUBUF+MNTMP1) / CLEAR VALUE FOR CORRECT MESSAGE CDFMYF CIFMNU JMS I MNUCAL DLMAD7 JMP CU3CMX / Then return to caller. CU3TBL, LOADAX-1 / 1 = AX /A023 LOADDX-1 / 2 = DX /A023 XX / 3 = printer. /A023 LOADCX-1 / 4 = CX /A023 LOADMC-1 / 5 = MAG-CARD /A023 LOADLO-1 / 6 = LOGIN processor. /A023 LOADPH-1 / 7 = PHONE utility /A028 /-------------------- PAGE / CU3COM - CALLS THE CORRECT OVERLAY FOR THE COMMUNICATIONS PACKAGE CALLED / IT FIRST SETS THE LINE SETTINGS BEFORE THE OVERLAY IS BROUGHT IN. / THIS ROUTINE ONLY SETS THE OPTIONS THAT CAN BE SET BY MORE THAN ONE / USER AS IN THE 102 WHICH EVER USER IS USING THE COMMUNICATIONS THE / LINE HAS TO BE CHANGED TO THEIR SPECIFICATION. IF THE CHANGES CAN / BE DONE AT THE TIME OF CHANGE LINE THOSE SPECIFIC TO THE 78 THEY ARE / DONE IN CU3OPT. / / CU3COM, XX CLA CDFSYS / SEE IF COMMUNICATIONS LINE IS IN USE. TAD I (CMADSX) CDFMYF SZA CLA / ++++ JMP CU3COE / IF NOT ZERO POST ERROR CDFMNU / LINE FREE SO TAKE IT TAD I (MUBUF+MNTMP1) / 0= CX;1 = AX;2 = DX SZA / ++++ JMP CU3CO1 AC0004 / IF 0 THEN CX BUT COULD BE STANDARD OR MAGCRD TAD I (MUBUF+MNCMTP) / 0= STANDARD;1 = MAG CARD I CU3CO1, CDFSYS / ++++ DCA I (CMADSX) / ++++ IFNDEF CONDOR < / ------------------------------------------------- /a0018 / now set the comm line to the users defined values CDFMYF /NOT SURE IF NECESSARY FOR IFNDEF CONDOR/M037 CIFSYS / /M0011 H2INIT /INIT APPROPRIATE HOST APPROPRIATELY. /M0011 / end ifndef condor ------------------------------------------------- /a0018 > CDFMNU TAD I (MUBUF+MNPRTB) / GET TM MODE FOR CX. RTL / MOVE TM MODE TO BITS 0,1 /M014 /D035 RAL / ... /M014 /D035 AND (3) / ISOLATE IT. /M014 RTL / TM IS NOW 3 BITS /A035 AND (7) / /A035 DCA I (MUBUF+CXTMOD) / IN THE MENU AREA. / ----------------------------------------------------------------------/A021 IFDEF VT125R < /TEST FOR (CMADSX=4 OR 6 AND TM =125 /A024 /TO BYPASS SETTING UP XPANDED BUFFER /A024 / /MOVED HERE VERSION 37......... / AC7775 /GET -3 /A024 TAD I (MUBUF+CXTMOD) /GET TERMINAL MODE /A024 SZA CLA /SKIP IF VT125 MODE /A024 JMP SETBUF /LOAD FLD 6 IF NOT VT125(IS FOR GRAFIX /A024 CDFSYS /A024 TAD I (CMADSX) /SEE IF CD DX ETC. /A024 TAD (-4 /CHECK FOR CX /A024 SNA /SKIP IF NOT CX /A024 JMP GINTST /FOR CX TEST IF GRFX IN CPMEM YET /A024 TAD (-2 /CHECK IF LOGON PROCESS /A024 SPA CLA /SKIP IF LOGON OR AD(PHONE) /C039 JMP SETBUF /RESUME IN LINE CODE /A024 DCA I (CMADSX) /CLEAR COMM SW /A037 AC0006 /MESSAGE NUMBER /A037 JMP CU3COE /BYPASS FOR LOGON /C037 > /END IFDEF VT125R /A024 SETBUF, TAD (BUFSTR) / Set up new larger COMM buffer /M024 DCA T1 / The new buffer resides in field 5 during CU3LP, CDF 60 / AX, DX, and CX. CU3SU1, DCA I T1 / Init buffer values to 0 ISZ T1 / The buffer is the balance of the field. JMP CU3SU1 / Loop to zap balance of the buffer. TAD (BUFSTR) / Set ring pointer at end of buffer DCA I (BUFEND) / to point to start of buffer. / TAD (COMXIT-1) / get start of buffer pointer. DCA X0 / set up to load from real buffer. TAD (C3CODE-1) / Copy exit code to start of buffer area. DCA X1 / ... TAD (4000-BUFSTR) / Get negative # of words to copy. DCA T1 / ... CU3SU2, CDFMYF / Map our field. TAD I X1 / Get word of exit routine. CDF 60 / Map buffer field. DCA I X0 / Stuff buffer. ISZ T1 / Loop on buffer size. JMP CU3SU2 / ... IOF / disable interrupts for a short while. CDFSYS / Map sys field (real buffer field). TAD I (H2ICNT) / get count of characters in current buffer. SNA / Skip if there is something to do. JMP CU3NTM / Jmp if nothing to move. CIA / compute negative of amount to move. DCA T1 / save ISZy count. TAD I (H2IGET) / get input character pointer. CU3WRP, DCA T2 / (re)init our input char pointer. CU3MVL, TAD I T2 / Get character from real ring buffer. SPA / Skip if not ring pointer. JMP CU3WRP / Jmp to wrap buffer pointer. CDF 60 / Map new buffer field. DCA I X0 / Move character to it's new buffer. ISZ T2 / Bump input pointer. CDFSYS / Back to sys field. ISZ T1 / Loop on input buffer size. JMP CU3MVL / ... CU3NTM, TAD (BUFSTR) / Get start of buffer pointer. DCA I (H2IGET) / Set 'rupt handler pointer. TAD CU3LP / Now Patch the CDF's to the buffer field. DCA I (CDFBF1) / one, TAD CU3LP / ... DCA I (CDFBF2) / two, TAD CU3LP / and DCA I (CDFBF3) / three. ISZ X0 / Get pointer to next available posn. TAD X0 / Get next avail pointer. DCA I (H2IPUT) / Set 'rupt handler for that one too. CDFTFL / Finally, inform TSTFUL routine of new size. /C029 TAD (-BUFSIZ) / ... DCA I (H2IMAX) / ... TAD (-2001) / and lastly, reset the XOF point to be DCA I (H2XOFP) / about half way into buffer. ION / Finally, we can re-enable 'rupts. / ----------------------------------------------------------------------/A021 CU3BYP, CDFMYF / WITHOUT ISZ WILL RETURN TO MAINMENU /M024 ISZ CU3COX / SET RETURN FOR CHAIN TO COMMUNICATIONS OVERLAY / -------------------------------------------------------------------------- CDFSYS / See who we reserved COMM line for... /A023 TAD I (CMADSX) / ... /A023 CDFMYF / Back to our field. /A023 TAD (CU3TBL-1) / Compute index into LOAD TABLE. /A023 DCA T1 / save pointer. /A023 JMS CU3OVL / Load OVRLAY info. /A023 CU3CMX, JMP I CU3COM /-------------------- PAGE IFDEF VT125R < /FOR VT125 /A024 /CONTROL PANEL REQUEST DEFINITIONS /A024 SKPGRB=6150 /SKIP IF GRAPHICS BOARD PRESENT(DMIII) /A038 PRQ3=6236 /A024 CP2MM=5000 /PANEL REQUEST OP CODES /A024 MM2CP=4000 /FOR BLOCK MEM TRANSFERS /A024 RCPFLD=7 /PANEL FLD FOR STORING REGIS /A024 PCPFLD=6 /PANEL FLD FOR STORING PRIM /A024 ACPFLD=5 /ALFA BITS CTRL PANEL FIELD /A024 REGFLD=6211 /REGIS FIELD /C032 PRMFLD=6251 /PRIM FIELD /C032 PRGFLD=6261 /PRIM-REGIS COMBINATION FIELD=6 /C032 /HERE IF LOADING CX IN VT125 MODE /A024 GINTST, /C038 CDFMNU /A038 AC2000 /2000 BIT = DMIII /A038 AND I (MUBUF+MNOPTN) /A038 CDFMYF /A038 SNA CLA /= DMIII? /A038 JMP GINSTU /NOT A DMIII /A038 SKPGRB /SKIP IF GRAPHICS BOARD PRESENT /A038 JMP NOBORD /NOT PRESENT /A038 CLA /IS PRESENT-SKPGRB READ STATUS /A038 JMP PRTFLD /CONTINUE /A038 GINSTU, /A038 /D038 CDFMYF /NEED TO MIND OUR OWN BUSINESS /A024 CLA OSR /WILL RETURN AC10 =0 IF GRFX HRDWR IN /A024 AND (2) /AC10= 1 IF GRFX HRDWR NOT INSTALLED /A024 SZA CLA /SKIP TO CONTINUE TEST FOR SOFTWARE IN /A024 JMP NOBORD /GRFX BOARD IS NOT PRESENT GO TO GOLD M /A024 PRTFLD, CDFPRT /PRINTER FIELD /A029 TAD I (PRSTTS) /PRINTER STATUS WORD /A029 CDFMYF /A029 SZA CLA /PRINTER IN USE /A029 JMP NOPRT /PRINTER IN USE ILEGAL IN VT125 MODE /A029 JMS CLEARQ /TEMP PATCH LOC /A029 /D037 JMP GRREAD /NO LOAD GRAPHICS /A029 /D029 TAD (PRBOTM /TEMP PATCH LOC /A029 /D029 DCA CLRPTR /TEMP PATCH LOC /A029 /D029 TAD (-2000 /TEMP PATCH LOC /A029 /D029 DCA CLRCNT /TEMP PATCH LOC /A029 /D029PRTFLD, CDFPRT /TEMP PATCH LOC /A029 /D029 DCA I CLRPTR /TEMP PATCH LOC /A029 /D029 ISZ CLRPTR /TEMP SET TO NEXT /A029 /D029 /D029 ISZ CLRCNT /TEMP PATCH LOC /A029 /D029 JMP PRTFLD+1 /TEMP PATCH LOC /A029 /D029 CDFMYF /TEMP PATCH LOC /A029 /D029 NOP /TEMP PATCH LOC /A029 /D029 NOP /TEMP PATCH LOC /A029 /D029CLRPTR, 0 /TEMP POINTER LOC /A029 /D029CLRCNT, -1000 /TEMP POINTER LOC /A029 /D029 PRQ3 /USE PANEL REQUESTS TO SEE IF GRFX IN /A024 /D029 CP2MM+40+RCPFLD /XFER TO MYFLD (4) FROM REGIS CP FLD /A024 /D029 0200 /SOURCE ADR (IN CP MEM) /A024 /D029 DEBUFR /DESTINATION ADR (IN MM) /A024 /D029 -10 /8 WORDS IS MORE THAN ENOUGH FOR POS ID /A024 /D029 7777 /TERMINATOR /A024 /D029 TAD (-3057) /IS OCT CODE AT 0200 OF REGIS /A024 /D029 TAD DEBUFR /IS LOC 0200 OF CP REGIS /A024 /D029 SZA CLA /NOT LOADED YET IF UNEQUAL /A024 /D029 JMP GRREAD /BETTER READ AND LOAD ALL 3 IF 1 NOT OK /A024 /D029 TAD (1564) /IS A NEG RDF INSTRUCTION /A024 /D029 TAD DEBUFR+2 /CORRESPONDING LOC IN READ BUFFER /A024 /D029 SZA CLA /NOT LOADED YET IF UNEQUAL /A024 /D029 JMP GRREAD /BETTER READ AND LOAD ALL 3 IF 1 NOT OK /A024 /D029 PRQ3 /PANEL REQUEST /A024 /D029 CP2MM+40+PCPFLD /TO MY FLD (4) FROM PRIM CPFLD /A024 /D029 0200 /SOURCE ADR (IN CP MEM) /A024 /D029 DEBUFR /MAY AS WELL USE THIS BUFFER /A024 /D029 -10 /NEG WORD COUNT /A024 /D029 7777 /TERMINATOR /A024 /D029 CLA CLL /NEVER TRUST A COMPUTER YOU CAN'T SEE /A024 /D029 TAD (-3066) /NEG VALUE OF INSTR. AT 201 OF PRIM CODE/A024 /D029 TAD DEBUFR+1 /CORRESPONDING LOC IN BUFFER /A024 /D029 SZA CLA /NOT LOADED YET IF UNEQUAL /A024 /D029 JMP GRREAD /BETTER READ AND LOAD ALL 3 IF 1 NOT OK /A024 /D029 TAD (-1233) /3RD INSTR OF PRIM /A024 /D029 TAD DEBUFR+3 /CORRESPONDING LOC IN BUFFER /A024 /D029 SZA CLA /NOT LOADED YET IF UNEQUAL /A024 /D029 JMP GRREAD /BETTER READ AND LOAD ALL 3 IF 1 NOT OK /A024 /D029 PRQ3 /PANEL REQUEST /A024 /D029 CP2MM+40+ACPFLD /TO MY FLD FROM ALFA BITS FLD OF CPMEM /A024 /D029 0200 /MAY AS WELL BE CONSISTENT /A024 /D029 DEBUFR /IF I CANT BE LOGICAL /A024 /D029 -10 /MINUS # OF WORDS TO MOVE /A024 /D029 7777 /TERMINATOR /A024 /D029 CLA CLL /WHO KNOWS /A024 /D029 TAD (-104) /NEG VALUE OF CHAR EXPECTED HERE /A026 /D029 TAD DEBUFR+1 /CORRESPONDING LOC IN BUFFER /A024 /D029 SZA CLA /NOT LOADED YET IF UNEQUAL /A024 /D029 JMP GRREAD /BETTER READ AND LOAD ALL 3 IF 1 NOT OK /A024 /D029 TAD (-202) /NEG VALUE OF CHAR EXPECTED HERE /A026 /D029 TAD DEBUFR+3 /CORRESPONDING LOC IN BUFFER /A024 /D029 SNA CLA /IF THIS = THEN PANEL MEM IS ALREADY IN /A024 /D029 JMP CU3BYP /RETURN TO MAINLINE CODE /A024 /HERE TO LOAD GRAPHICS CODE AND CONSTANTS INTO PANEL MEM FOR /SUSEQUENT LOAD BY CX /A024 GRREAD, CDIMNU /GET READY TO PUT UP ACTIVATION MSG /A024 DCA I (MUBUF+MNTMP2 /AC IS STILL 0 /A024 CDFMYF /NEED TO CALL FROM OWN FLD /A024 JMS I MNUCAL /GO PUT UP MSG TO ASK FOR DRIVE # /A024 DLM125 /A024 GOTNUM, CDFMNU /NEED TO GET DRIVE # ENTERED /A024 TAD I (MUBUF+MNTMP3) /WHAT IS IT /A024 MYFLD, CDFMYF /BACK HERE /A024 SPA /- IS FROM GOLD MENU /A024 JMP CU3GMX /LEAVE CU3 /A024 DCA QUQBLK+RXQDRV /PLUG IT IN /A024 DCA QUQBLK+RXQRS1 /SET BLOCK COUNT(0=1 BLOCK) /C030 TAD MYFLD /SET UP POINTER TO THIS MEM FIELD(BUFFR)/A024 DCA QUQBLK+RXQBFD /PUT IT IN QBLK /A024 TAD (DEBUFR) /GET POINTER TO BUFFER ADR /a024 DCA QUQBLK+RXQBAD /PUT IT IN QBLK /A024 TAD (4000+RXEDN /GET AND SET DENSITY /A024 DCA QUQBLK+RXQFNC /FUNCTION CODE /A024 JMS QURX /DO IT /A024 SPA CLA /+ AC MEANS NO ERROR /A024 JMP GRREAD /GO DEAL WITH DENSITY ERROR /A024 TAD (RXERD+4000) /GET READY TO READ ALLOCATION BLOCK /A024 DCA QUQBLK+RXQFNC /READ FUNCTION /A024 TAD (2) /GET HEADER BLOCK # /A024 DCA QUQBLK+RXQBLK /SET BLOCK # /A024 JMS QURX /REQUEST THE READ /A024 SPA CLA /+AC MEANS NO ERRORS /A024 JMP GRREAD /ALL I CAN THINK OF IS TO START OVER /A024 /NOW WE'RE GOING TO VERIFY THAT THE CORRECT VOLUME HAS BEEN MOUNTED /A024 TAD DEBUFR+2 /SECOND WORD STARTS ID /A024 TAD VTID1 /START OF ID CONSTANT /A024 SZA CLA /SKIP IF OK /A024 JMP INSERR /OTHERWISE PUT UP ERROR MSG /A024 TAD DEBUFR+4 /CK MORE TO EXCLUDE RANDOM BAD LUCK /A024 TAD VTID3 /3RD WORD OF ID CONSTANT /A024 SZA CLA /SKIP IF OK /M032 JMP INSERR /INSERTED WRONG VOLUME /M032 TAD DEBUFR+11 /WORD 9 MUST BE 1 FOR FEATURE DISKETTE /M032 JMP INLINE /JUST CONTINUES IN LINE ON NEXT PAGE /A024 VTID1, -7061 /NEG CONSTANT FOR WP /M027 VTID3, -6555 /NEG CONSTANT FOR TL /M027 CU3GMX, AC7775 /GET -3 /A029 CDFMNU /A029 TAD I (MUBUF+CXTMOD) /GET TERMINAL MODE /A029 CDFMYF /A029 SZA CLA /SKIP IF VT125 MODE /A029 JMP CU3GMY /IGNNORE RELOAD FOR NON 125 MODE /A029 DCA QUQBLK+RXQDRV /SET BRIVE TO SYSTEM /C030 TAD (DLFD1 /START BLOCK NUMBER /A029 DCA QUQBLK+RXQBLK /A029 TAD (-DSFD1 /BLOCK COUNT /A029 DCA QUQBLK+RXQRS1 /A029 TAD PRTFLD /PRINTER FIELD /A029 DCA QUQBLK+RXQBFD /PUT IT IN QBLK /A029 TAD (PRBOTM /START OF BUFFER /A029 DCA QUQBLK+RXQBAD /PUT IT IN QBLK /A029 TAD (RXERD /NO RETURN MUST REBOOT /A029 DCA QUQBLK+RXQFNC /FUNCTION CODE /A029 JMS QURX /DO IT /A024 SPA CLA /+ AC MEANS NO ERROR /A024 JMP CU3GMX /REPEAT /A029 JMS SETPG0 /RESTORE PAGE 0 FOR PRINTER /A031 TAD (PRJOB /STATUS BLOCK POINTER /A029 CIFSYS /A029 JSTRT /RESTART JOB /A029 CU3GMY, /A024 CDFSYS /SYSTEM FLD /A024 DCA I (CMADSX /MAKE COMM LINE AVAILABLE AGAIN /A024 CDFMYF /BACK HERE BEFORE WE GO ANYWHERE ELSE /a024 JMP CU3CMX /NOW EXIT FROM CU3 /A024 / / MOVED VER---037--- / LOADLO, 30;200;CIF 30 / Load info for LOGON processor. /A023 LOADPH, 30;202;CIF 30 / PHONE utility entry point - WPLOG /A028 /------------------- PAGE INLINE, IAC /WILL BE 0 IF WAS -1 /A024 SZA CLA /SKIP IF OK /A024 JMP INSERR /PROBABLY WAS DOC DISKETTE /A024 TAD (-BLDDY^100-BLDMO) /SYSTEM CONSTANT FOR BUILD DAY & MONTH /A025 TAD DEBUFR+7 /LOOK AT DATE ON FEATURE DISKETTE /A025 SZA CLA /SKIP IF RIGHT DATE /A025 JMP INSERR /REPEAT INSERT MSG FOR ANOTHER CHANCE /A025 TAD (-BLDYR) /SAME DEAL FOR YEAR /A025 TAD DEBUFR+10 /MUST BE RIGHT YEAR ALSO /A025 SZA CLA /SKIP IF MATCH OK /A025 JMP INSERR /PUT UP INSERT MSG AGAIN /A025 CIFMNU /GO TO MENU FLD TO /A024 JMS I IOACAL /PUT UP STANDBY MSG /A024 0 PRGMSG /'INSTALLATION IN PROGRESS etc.' /A024 0100 /POSITION TO ERASE ALL BUT TOP LINE /A024 1520 /LINE AND COL FOR DISP /A024 /NOW WE'RE GOING TO GET READY AND READ THE INSERTED VOLUME /A024 /********** /LOAD ALPHA BITS INTO FIELD 5 PANEL MEM.. /...USE REGIS FIELD 5 MAIN MEM AS TEMP AREA /*********** TAD DESADR /POINTER /A030 DCA QUQBLK+RXQBAD /SET BUFFER ADDRESS /A030 TAD (ACPFLD^10+1+MM2CP /INSTRUCTION TO LOAD FLD(PRNTR) /C030 DCA MM2CPM /PLUG IT IN /A024 TAD (DLPALF /POINTER TO BLOCK NUM /A029 DCA QUQBLK+RXQBLK /SET IT /A029 TAD (-DSPALF /BLOCK COUNT /A029 DCA QUQBLK+RXQRS1 /SET IT /A029 TAD PRTFLD /PRINT FIELD...=FIELD 1(TEMP )/A029 DCA QUQBLK+RXQBFD /SET IT /A029 JMS QURX /READ IT /A029 SPA CLA /ERROR? /A029 JMP GRREAD /YES RETRY IT /A029 TAD (-DSPALF^400 /NUMBER OF BLOCKS TIMES NUM WORDS IN BLK/A029 DCA DESCNT /SET COUNT /A029 JMS SETPAN /SET TO PANEL MEMORY /A029 /******* /LOAD REGIS TO FIELD 1 /A032 /LOAD PRIM TO FIELD 5 /A032 /LOAD REGIS /PRIM PARTIAL FIELDS TO FIELD 6 /A032 / /******** TAD (PRGFLD /REGIS/PRIM COMBO FIELD = FIELD 1 /A032 DCA QUQBLK+RXQBFD /SET IT /A032 TAD (DLPRM1 /DISK BLOCK # OF BEGINING OF GRFX STUFF /A032 DCA QUQBLK+RXQBLK /INTO Q BLOCK /A024 TAD (-DSPRM1-DSRGS1-DSPRM2 /BLOCK COUNT /A033 DCA QUQBLK+RXQRS1 /SET IT /A032 DCA QUQBLK+RXQBAD /BUFFER ADDRESS /A032 JMS QURX /READ IT /A032 SPA CLA /ERROR? /A032 JMP GRREAD /YES RETRY IT /A032 /******** /LOAD REGIS CODE /******** TAD (REGFLD /REGIS FIELD = FIELD 5 /A029 DCA QUQBLK+RXQBFD /SET IT /A029 TAD (DLORGS /DISK BLOCK # OF BEGINING OF GRFX STUFF /C029 DCA QUQBLK+RXQBLK /INTO Q BLOCK /A024 TAD (-DSORGS /BLOCK COUNT /A029 DCA QUQBLK+RXQRS1 /SET IT /A029 DCA QUQBLK+RXQBAD /BUFFER ADDRESS /A029 JMS QURX /READ IT /A029 SPA CLA /ERROR? /A029 JMP GRREAD /YES RETRY IT /A029 /******* /LOAD PRIM CODE INTO FIELD 6 MAIN MEMORY /******** TAD (DLOPRM /POINTER TO BLOCK NUM /A029 DCA QUQBLK+RXQBLK /SET IT /A029 TAD (-DSOPRM /BLOCK COUNT /A029 DCA QUQBLK+RXQRS1 /SET IT /A029 DCA QUQBLK+RXQBAD /BUFFER ADDRESS /A029 TAD (PRMFLD /PRIM FIELD...=FIELD 6 /A029 DCA QUQBLK+RXQBFD /SET IT /A029 JMS QURX /READ IT /A029 SPA CLA /ERROR? /A029 JMP GRREAD /YES RETRY IT /A029 RSKIP2, TAD QUQBLK+RXQDRV /RETRIEVE DRIVE # /A024 SZA CLA /SKIP IF JUST READ FROM DRIVE 0 /A024 JMP CU3BYP /BYPASS THE COMM BUFFER MOVE TO FLD 6 /A024 PROMPT, CIFMNU /PROMPT TO REPLACE SYSTEM DISK /A024 JMS I IOACAL /CANT USE MENU BLOCK CAUSE SYSTEM ON 0 /A024 0 SYDISK /ADR OF MSG TO REPLACE SYS IN 0 /A024 0100 /POSITION TO ERASE ALL BUT TOP LINE /A024 1105 /POSITION & LET USER KNOW WE'RE DONE /C040 1305 /POSITION FOR 2ND LINE OF PROMPT /A024 JMP SYPAP2 /MERGE BELOW /A024 SYPAP1, CIFSYS /SYS IS STILL RESIDENT /A024 JWAIT /WAIT A WHILE /A024 SYPAP2, CIFSYS /BAK TO SYS AGAIN /A024 XLTIN /GET AN INPUT CHAR /A024 JMP SYPAP1 /LOOP AND WAIT IF NONE /A024 TAD (-EDNWLN) /RETURN TYPED? /A024 SZA CLA /SKIP IF YES. /A024 JMP PROMPT /NO. BETTER TELL USER AGAIN /A024 JMP CU3BYP /CONTINUE LOADING CX /A024 INSERR, AC0001 /FLAG FOR INSERTION ERROR /A024 INSER2, CDIMNU /A024 DCA I (MUBUF+MNTMP2 /MAKE AVAIL TO MENU CODE /A024 CDFMYF /MENU NEEDS TO KNOW WHICH FLD CALLED /A024 JMS I MNUCAL /GO PUT UP MSG /A024 DLM125 /NAME OF MENU BLOCK WE'RE USING /A024 JMP GOTNUM /IF WE COME BACK HERE WE HAVE A NEW # /A024 SETPAN, 0 /SET PANEL MEM FROM MAIN /A029 PRQ3 /PANEL REQUEST #3 /A024 MM2CPM, ACPFLD^10+1+MM2CP /54 IS TO CPMEM FLD 5 FROM MM FLD 4 /C029 DESADR, /M030 0 /SOURCE ADDRESS /C029 0 /DESTINATION ADRESS IN CP MEM /C030 DESCNT, -400^DSPALF /WORD COUNT FOR MOVE /A024 7777 /TERMINATOR /A024 JMP I SETPAN /A029 /---------------------- PAGE / / SET TO MODIFY NOP TO SKIP FLABUZ CALL IN WP2CMF /A034 / /THIS ROUTINE EXECUTES TWO FUNCTIONS /A029 /THE FIRST FUNCTION CALLS THE PRINTER JOB TO PRINT A FF /A029 /THIS IS A TEMP FUNCTION USED TO EMULATE A FUNCTION NOW BEING DEVELOPED /A029 /THE REAL FUNCTION WILL BE A CALL TO THE PRINTER TO KILL ITSELF /A029 /BY CHANGING THE CODE PUT INTO PRTACT FROM A 1(FF) TO A -1(KILL SELF) /A029 /....AND DELETING THE TEMP CODE WHICH KILLS THE PRINTER JOB, THE /A029 /.....REAL CALL CAN BE TESTED.... /A029 / /BY PUTTING BOTH FUNCTIONS INTO CODE THIS WAY THE NEW GRAPHICS LOAD /A029 /...INTO THE PRINTER FIELD CAN BE TESTED WITHOUT WAITING UNTIL /A029 /...BOTH THE NEW REGIS GRAPHICS AND KILLING SELF FUNCTION CAN BE TESTED /A029 / /THIS FUNCTION WILL ACTUALLY CALL THE PRINTER JOB TO KILL ITSELF WHEN /A029 /...WHEN IN VT125 MODE.... /A029 / CLEARQ, 0 /A029 AC7777 /SET CODE TO -1=PRINTER KILL SELF /A029 /....CODE TO BE SET TO -1 FOR KILL SELF /A029 /........WHEN READY /A029 CDFPRT /SET TO PRINTER FIELD /A029 DCA I PRACTP /SET CODE /A029 CDFMYF /A029 CLEAR1, CIFSYS /NOT DONE.. SET TO SWAP OUT /A029 JSWAP /DO IT /A029 CDFPRT /PRINTER FIELD /A029 TAD I PRACTP /GET CODE /A029 CDFMYF /A029 SZA CLA /IS PRINTER DONE? /A029 JMP CLEAR1 /NO. REPEAT /A029 CLEAR4, TAD FLASKP /CX GRAPHICS BYPASS CALL FLABUZ IN WP2CMF/C034 JMS SETFLA /SET IT /A034 JMP I CLEARQ /RET /A029 FLASKP, SKP /SKIP OVER FLASH BUZ CALL /A034 PRACTP, PRACTN /POINTER TO PRINTER ACTION WORD /A029 /...SIMULATE CLOBBERING OF PREINTER FIELD/A029 /...WITH NEW REGIS CODE. /A029 /THE FOLLOWING CODE IS TEMP CODE USED TO ACTUALLY KILL PRINTER JOB /A029 /...WHEN THE FUNCTIONALITY IS PUT INTO THE PRINTER IT CAN BE DELETED /A029 /...AND THE CODE 1 CHANGED TO -1 TO EXECUTE IT(SEE CLEARQ+1) /A029 / /D029 TAD TPTR1 /LOAD POINTER TO PRJOB /A029 /D029 CDFSYS /SYS FIELD IS WHERE JOB STATUS BLOCKS LIVE/A029 /D029CLEAR6, DCA TPTR2 /SAVE IT /A029 /D029 TAD I TPTR2 /GET POINTER TO NEXT BLOCK /A029 /D029 CIA /NEGATE /A029 /D029 TAD TPTR1 /DOES IT POINT TO PRJOB /A029 /D029 SNA CLA /A029 /D029 JMP CLEAR8 /YES WE FOUND IT /A029 /D029 TAD I TPTR2 /GET PTR TO NEXT /A029 /D029 JMP CLEAR6 /REPEAT NEXT /A029 /D029CLEAR8, TAD I TPTR1 /GET POINTER IN PRJOB STATUS BLOCK /A029 /D029 DCA I TPTR2 /SET IT IN BLOCK POINTING TO PRJOB /A029 /D029 DCA I TPTR1 /CLR PNTR IN STAT BLK. (MUST FOR JSTRT) /A029 /D029 CDFMYF /A029 /D029 JMP I CLEARQ /RET /A029 SETFLA, 0 /SET/CLEAR FLASH BUZ CALL /A034 CDFMNU /WP2CMF FIELD /A034 DCA I SETLOC /SET IT /A034 CDFMYF /A034 JMP I SETFLA /RETURN /A034 SETLOC, TIMDS3 / /A034 /D029PTR1, PRJOB /TEMP POINTER1 /A029 /D029TPTR2, PRJOB /TEMP POINTER2 /A029 /------------------- NOPRT, TAD NOPPTR /LOAD POINTER TO ERR MESSAGE /A029 SKP /SET IT AND DO IT /A029 NOBORD, TAD NOBPTR /NO BOARD MESSAGE /A029 DCA PRTPTR /SET POINTER /A029 CIFMNU /NEED TO BE IN MENU FLD /A024 JMS I IOACAL /GO TO THE TTY I/O ROUTINE /A024 0 /DON'T WANT TO WRITE OWN I/O /A024 PRTMSG /CONTROL STRING TO USE FOR MESSAGE /A040 0100 /POSITION T0 2ND LINE BEFORE ERASING /A024 1505 /POSITION FOR MESSAGE /A024 PRTPTR, NOBMSG /MESSAGE THAT GRFX HARDWARE ISN'T IN /A024 1705 /PRESS RETURN AFTER READING MESSAGE /A024 RETMSG /MESSAGE PRESS RETURN TO RECALL MENU /A040 CDIMNU /MENU BLOCK IS EASIER TO WAIT IN /A024 AC0002 /FLAG FOR WHICH MENU PATH TO USE /A024 DCA I IMNTMP /PUT FLAG WHERE MENU CAN SEE IT /M026 /A024 CDFMYF /MENU NEEDS TO KNOW WHERE WE CAME FROM /A024 JMS I MNUCAL /GO TO IT /A024 DLM125 /NAME OF MENU BLOCK TO DO /A024 JMP I IU3GMX /TAKE GOLD MENU EXIT /A024 IU3GMX, CU3GMY /DONT WANT A LINK IN MIDDLE OF MSG/A024 /C029 IMNTMP, MUBUF+MNTMP2 /PUT FLAG WHERE MENU CAN SEE IT /A026 NOPPTR, PRTBSY /MESSAGE POINTER'PRINTER BUSY' /A029 NOBPTR, NOBMSG /POINTER 'NO GRAPHICS BOARD' /A029 /------------- SYDISK, IFDEF ENGLISH < TEXT '^P!E^P^CG&REPLACE THE SYSTEM DISKETTE IN DRIVE 0 '> /C040 IFDEF SPANISH < TEXT '^P!E^P^CG&COLOQUE EL DISKETTE SISTEMA EN LA UNI. 0 '> /C040 IFDEF DUTCH < TEXT '^P!E^P^CG&ZET DE SYSTEEMDISKETTE WEER IN AANDRIJVER 0 '> /C040 IFDEF ITALIAN < TEXT "^P!E^P^CG&METTERE DISCO SISTEMA NELL'UNIT\A 0 " > IFDEF V30NOR < TEXT '^P!E^P^CG&SETT SYSTEMDISKETTEN TILBAKE I STASJON 0 '> /A042 IFDEF V30SWE < TEXT '^P!E^P^CG&BYT UT SYSTEMDISKETTEN I ENHET 0'> *.-1 SYDIS2, IFDEF ENGLSH /A024 IFDEF SPANISH /A024 IFDEF DUTCH /A024 IFDEF ITALIAN IFDEF V30NOR /A042 IFDEF V30SWE PRGMSG, IFDEF ENGLSH < TEXT '^P!E^P&INSTALLATION IN PROGRESS -- &PLEASE WAIT...'> /A024 IFDEF SPANISH < TEXT '^P!E^P&INSTALACION EN CURSO -- &ESPERE...'> /A024 IFDEF DUTCH < TEXT '^P!E^P&BEZIG MET INSTELLEREN -- &EVEN GEDULD.'> /A024 IFDEF ITALIAN < TEXT "^P!E^P&INSTALLAZIONE IN CORSO -- &PREGO ATTENDERE..."> IFDEF V30NOR < TEXT '^P!E^P&INSTALLASAJON P\EG\ER -- &VENT'> IFDEF V30SWE < TEXT '^P!E^P&INSTALLATION P\EG\ER - &V\DNTA EN STUND...'> PRTMSG, TEXT '^P!E^P^S^P^S^CG' /PRINT TWO MESSAGES AND RING THE BELL /A040 PRTBSY, IFDEF ENGLSH /C040 IFDEF SPANISH < TEXT '&IMPOSIBLE USAR GR\AFICOS CUANDO SE EST\A IMPRIM.'> IFDEF DUTCH /C040 IFDEF ITALIAN < TEXT "&IMPOSSIBILE UTILIZZARE &GRAFICA DURANTE LA STAMPA"> IFDEF V30NOR /A042 IFDEF V30SWE < TEXT '&DU KAN INTE ANV\DNDA GRAFIKFUNKTIONEN N\DR UTSKRIFT P\EG\ER'> NOBMSG, IFDEF ENGLSH < TEXT '&GRAPHICS HARDWARE MUST BE PRESENT WHEN !&TM=&GRAPHICS'> /C040 IFDEF SPANISH < TEXT '&EL HARDWARE GR\AFICOS HA DE ESTAR PRESENTE CUANDO !&TM=&GR\AFICOS'> /C040 IFDEF DUTCH < TEXT '!&TI=&GRAPHICS VEREIST EEN GRAFISCHE KAART'> /C040 IFDEF ITALIAN < TEXT "&OPZIONE &GRAFICA NON PRESENTE SE !&TT=&GRAFICO"> IFDEF V30NOR < TEXT '&MASKINUTSTYR FOR GRAFIKK M\E V\FRE TILKOBLET N\ER !&TM=&GRAFIKK'> IFDEF V30SWE < TEXT' &GRAFIKKORTET M\ESTE VARA INSTALLERAT N\DR!&TM=&GRAFIK'> RETMSG, IFDEF ENGLSH < TEXT '&PRESS !&RETURN TO RECALL THE &MAIN &MENU'> /C040 IFDEF SPANISH < TEXT '&PULSE !&RET. PARA VOLVER AL &MEN\Z &PRINC.'> /C040 IFDEF DUTCH < TEXT '&DRUK OP !&RETURN OM TERUG TE GAAN NAAR HET &HOOFDMENU'> /C040 IFDEF ITALIAN < TEXT "&PREMERE !&RITORNO PER TORNARE AL &MENU &PRINCIPALE"> > /END IFDEF VT125R /A024 IFDEF V30NOR < TEXT '&TRYKK P\E !&RETUR FOR \E F\E &HOVEDMENYEN'> /A042 IFDEF V30SWE < TEXT '&TILLBAKA TILL HUVUDMENYN: TRYCK P\E RETUR'> DELMSG, TEXT '![(&^S^A![(&^S' / CONTROL STRING FOR GRAPHICS DISPLAY /A040 /A044vvvvvA044vvvvvA044vvvvvA044vvvvvA044vvvvvA044vvvvvA044vvvvvA044 / / DECKST - CHECK FOR START OF DEAD / INT8BT=62 / EIGHT BIT INTRODUCER DECKST, TAD (40-ECSTOV) / IS THIS A START-OF-DEAD CHAR SZA / SKIP IF SO JMP DECKL3 / ELSE IGNORE CONTROL CHARACTER / JMS GETNXT / IF S-O-D CHECK THE NEXT 2 CHARS FOR A / MNC. IGNORING ALL ELSE / TAD (-ECSPC) / CHECK 2ND CHAR SZA / SKIP IF ITS OK JMP DENOTS / ELSE ITS NOT AN 8 BIT CHARACTER / JMS GETNXT / TAD (-INT8BT) / CHECK FOR 8 BIT INTRODUCER SZA / SKIP IF OK JMP DENOTI / ELSE ITS NOT AN 8 BIT CHARACTER / JMS GETNXT / GET THE 8 BIT CHARACTER / TAD (200) / MAKE IT REALY 8 BIT JMP DEDSOU / AND OUTPUT IT / DENOTI, TAD (INT8BT-ECSPC) / REPLACE INTRODUCED VALUE DENOTS, TAD (ECSPC-40) / REPLACE SPACE VALUE SPA / SKIP IF PRINTABLE JMP DECKL3 / ELSE IGNORE TAD (40) JMP DEDSOU / O/P CHARACATER / GETNXT, XX CDFBUF / GET A CHARACTER TAD I X2 CDFMYF AND P177 / AND MASK OFF ATTS JMP I GETNXT /A044^^^^^A044^^^^^A044^^^^^A044^^^^^A044^^^^^A044^^^^^A044^^^^^A044 PAGE /----------------- / WPCU4 - COMMAND UTILITIES VI / / 032 EMcD 12-Sep-85 Add Nordic translations / (conditionalised) / 031 RCME 1-MAY-85 Change DBTDOC to CU4DBT for global / definition and stand-alone assembly / 030 EMcD 12-Mar-85 Save terminal as Lvl2 , 8 bit / 029 TCW 06-SEP-84 Disable Modem if not present / 028 TCW 21-AUG-84 Change Integral Modem response loop / 027 TCW 25-JUL-84 Repos. cursor after disp. of CD name / 026 TCW 16-JUL-84 Expand # of terminal modes / 025 TCW 26-JUN-84 Change Integral Modem response loop / 024 WCE 13-JUN-84 SUPPORT DIFERENT DRIVES FOR ACTIVATE / 023 TCW 01-MAY-84 Integral modem support / 022 WCE 18-JAN-84 Removed BUILD code from unbundling / 021 GDH 4-AUG-83 Conditionalized MNSECN for DM2. / 020 GDH 2-AUG-83 Fixed BC YES/NO reboot problem. / Fixed Date Bits 6/7 DM2 bug. / 019 GDH 8-APR-83 Added TM = EASYLINK to SO options. / 018 MJS 6-JAN-83 added a "PAGE" at "CU4ST" to enable / wpcu4.pa to be assembled for either / DECmate I or DECmate II / / 017 EPS 18-NOV-82 CHANGE REV LEVEL FOR EF/SD FLOPPY / / 016 MJS 13-OCT-82 Added a subroutine called by 'CU4GVL" / to "stuff" into panel memory / field 0 locations 24,25,26 / the "terminal characteristics" / the user selected in "SO" menu / (printer & communication baud rates) / / 015 DFB 06-SEP-82 Fix to set CD to correct doc. / / 014 MJS 10-AUG-82 Added code within "CU4GVL" to init / the comm line (H2INIT) if the "SO" / values change--added "ZBLOCK CXSETZ" / / 013 HLP 17-JUN-82 Added GETDNS in Build activate disk / Conditionalized for DM-II (CONDOR) / / ------------------------------------ / | EDIT HISTORY BELOW FOR DECmate I | / ------------------------------------ / 012 EH 13-JAN-82 Added GETDNS before activating features / 011 GDH 27-OCT-81 SO menu enhancements. don't erase / screen when not necessary. / 010 GDH 16-OCT-81 Added 3rd TM option (DWORD). / 009 GDH 21-Sep-81 Primary/Secondary port support. / 008 DIM 3-SPET-81 Entered French and Dutch translations / 007 GDH 27-Aug-81 Deleted old CIF/CDF subroutines. / 006 TT 07-JUL-81 Removed superfluous conditionals / 005 AJF 01-MAY-81 FIXED SO CD LOSS BUG / 004 DIM 12-MAR-81 Changed message that appears when trying / to activate sort on the WS78 / 003 JM 10-MAR-81 Added CANADIAN text / 003 JM 09-MAR-81 Added DUTCH text / 002 JM 06-MAR-81 Added FRENCH text / 001 WCE 17-N0V-80 ADDED CHANGES FOR FEATURE UNBUNDLING / X3.5 JLZ ??-???-?? Changed VT78 to VT78C / 3.0+ MB 11-AUG-78 FOR THE 3.1 THERE WAS ENOUGH ADDED TO / SUPPORT THE CD OPTION THAT ANOTHER / COMMAND UTILITY HAD TO BE CREATED FOR / TIME 2 FIELDS HAVE TO BE OVERLAYED FOR / THIS TO WORK / WRITES OUT WPCU4 / *200 JMP I .+3 JMP I .+1 7600 RXLOAD *RXLDLS RXEWT=4 RXEWT 0 RXQBLK=11 RXQBLK . DLOCU4 / ++++ 100 / ++++ CDF 20 / ++++ -DSOCU4 /A001 0 FIELD 2 / *100 / THE FIRST 100 LOCATIONS ARE USED FOR THE SYSTEM / CDFMYF= CDFBUF / DEFINE OUR FIELD. H2DTR=6362 / DEFINE MODEM CONTROL IOT /A023 / / !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! / !!!!!!!! o r d e r i m p o r t a n t !!!!!!!! / !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! / / THE FOLLOWING LOCATIONS ARE COPIED INTO THE MENU FIELD AND ARE / ASSUMED TO BE IN THE ORDER EXPECTED BY THE 'CX3' MENU. / CX0AD, 0 / DATA BITS CX0AP, 0 / PARITY CX0AS, 0 / STOP BITS CX0AB, 0 / PRIMARY LINE BAUD RATE (0-17 OCTAL) CX1AD, 0 / DATA BITS CX1AP, 0 / PARITY CX1AS, 0 / STOP BITS CX1AB, 0 / SECONDARY LINE BAUD RATE (0-17 OCTAL) CUPORT, 0 / PORT SELECT. CUBRTM, 0 / BREAK TIME. CUTMOD, 0 / TERMINAL MODE PRTBAB, 0 / PRINTER BAUD RATE. / / IF ANY ENTRIES ARE ADDED TO THIS AREA, 'CXSETZ' MUST BE ADJUSTED. / / !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! / !!! E N D o r d e r i m p o r t a n t !! / !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! IFNZRO PRTBAB-CX0AD-CXSETZ+1 SAVPRI, 0 / Saved value of MNPRIM word. /A020 SAVSEC, 0 / Saved value of MNSECN word. /A020 SAVPRT, 0 / Saved value of MNPRTB word. /A020 SAVXON, 0 / Saved value of MNXONF word. /A020 SAVMOD, 0 / Saved value of INTEGRAL MODEM BIT (MNFMAT) /A023 IFDEF CONDOR < /A014 PRQBLK, ZBLOCK 3 / /a016 > / END IFDEF CONDOR /A014 SAVDRV, 0 / Saved value of Activate Features Drive Number /A024 / AXDST - WILL READ OR WRITE THE COMMUNICATIONS SETTINGS DEPENDING ON THE / VALUE IN THE AC. THE AC CONTAINS THE FUNCTION TO EXECUTE. CU4ST, XX DCA QUQBLK+RXQFNC / SET THE FUNCTION CDFMYF TAD .-1 / SET THE BUFFER FIELD DCA QUQBLK+RXQBFD DCA QUQBLK+RXQDRV / SET TO SYSTEM DRIVE 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 UNBUNDLING AND SYSTEM OPTIONS QURX, XX / ENTER TO QUEUE A REQUEST TO RXHAN CIFSYS / CHANGE TO SYSTEM FIELD ENQUE / CAUSE REQUEST TO BE ENTERED INTO SYSTEM QUBLK / ADDRESS OF REQUEST BLOCK TO BE QUEUED CIFSYS / CHANGE TO SYSTEM FIELD JWAIT / WAIT FOR A SIGNIFICENT EVENT TAD QUQBLK+RXQCOD / GET THE COMPLETION CODE FROM REQUEST BLOCK SNA / ARE WE DONE YET ? JMP .-4 / NO, GO CHECK AGAIN JMP I QURX / YES, RETURN TO CALLER QUBLK, DSKQUE / ADDRESS OF DISK QUEUE 0 / CDF TO NEXT QUEUE ENTRY 0 / ADDRESS TO NEXT QUEUE ENTRY QUQBLK, ZBLOCK 17 / QUEUE BLOCK X=. / LOCATION OF FIRST FREE LOCATION ON PAGE /----------------------- PAGE / CU4OPT - THE SYSTEM OPTIONS ROUTINE. THE REASON THAT THERE IS A CU4 / IS THAT CU3 WAS GETTING TOO CROUDED AND THIS IS THE ONLY ROUTINE THAT / TOOK UP TWO FIELDS. SO AS NOT TO SLOW DOWN THE OTHERS THEY WERE / SEPERATED. WHAT SHOULD BE NOTICED IS THAT WPCX2 IS ASSEMBLED TOGETHER / WITH WPCU4 BUT NOT LOADED OUT WITH IT. THERE IS ONLY ONE COPY LOADED / OUT WITH WPCX. / CU4BF1=5400 / TEMP BUFFER THAT CAN BE USED BY ANY OF THE / RROUTINES IS CURRENTLY USED ONLY IN CU4OPT XX / FIRST ENTRY FROM OVERLAY PROCESSOR JMS CU4OPT / CU4OPT - SET SYSTEMS OPTIONS CDIMNU / SET UP FOR RETURN TO MENU FIELD JMP I .-3 / RETURN BACK TO CALLER IFDEF UNBUND < /A001 XX / SECOND ENTRY FROM OVERLAY PROCESSOR /A001 JMS CU4UNB / CU4UNB - FEATURE UNBUNDLING OPERATION /A001 CDIMNU / SET UP FOR RETURN TO MENU FIELD /A001 JMP I .-3 / RETURN BACK TO CALLER /A001 > / END IFDEF UNBUND /A001 / ROUTINE TO HANDLE THE OPTION UNBUNDLING OPERATIONS /A001 / CALLED BY A COMMAND CALL IN DLMDU2 IN MN1 MODULE /A001 / / CALLS ACTIVATE MENU IN DLMUB1 TO DISPLAY OPTIONS AVAILABLE /A001 / / RETURN FROM MENU WITH MNTMP3 SET UP TO DEFINE ACTIONS /A001 / / MNTMP3 VALUES ARE: /A001 / 0 = JUST RETURN TO MAIN MENU /A001 / 1 = STORE OPTION SETTINGS AND RETURN TO ACTIVATE MENU /A001 / 2 = VERIFY OPTION DISKETTE, INSTALL OPTION, AND /M022 / RETURN TO ACTIVATE MENU /A001 / IFDEF UNBUND < /A001 CU4UNB, XX /A001 CU4OVR, CIFMNU /A001 JMS I MNUCAL / CALL OPTIONS ACTIVE MENU /A001 DLMUB1 /A001 CDFMNU / MAKE CDF INSTRUCTION FOR MENU FIELD /A001 TAD I (MUBUF+MNTMP2) / GET ACTIVATE FEATURE DRIVE NUMBER /A024 DCA SAVDRV / SAVE DRIVE NUMBER FOR LATER USE /A024 AC7776 / SET A.C. EQUAL TO MINUS 2 /M022 TAD I (MUBUF+MNTMP3) / PICK UP TEMP 3 VALUE FROM MENU FIELD /A001 CDFMYF / MAKE DCF INSTRUCTION FOR MY FIELD /A001 SNA / TEST FOR VALUE OF TWO /M022 JMP INSOPT / TEST FOR OPTION DISK & INSTALL OPTION /A001 IAC / INCREMENT VALUE FOR NEXT TEST /A001 SZA CLA / TEST FOR VALUE OF ONE /A001 UNBRTN, JMP I CU4UNB / ZERO VALUE - RETURN TO MAIN MENU /A001 / UPDATE OPTIONS ON SYSTEM DISK /A001 CU4WRT, JMS CU4SET / COPY SYSTEM OPTIONS AND XFER TO DISK /A001 JMP CU4OVR / GO RETURN TO ACTIVATE MENU /A001 > / END IFDEF UNBUND /A001 / ROUTINE TO MOVE A BLOCK OF MENORY WITHIN THIS FIELD /A001 / / CALL IS A FOLLOWS: /A001 / / JMS CU4MOV / CALL MOVE ROUTINE /A001 / ADDRESS OF FROM / DEFINE FROM ADDRESS /A001 / ADDRESS OF TO / DEFINE TO ADDRESS /A001 / NUMBER TO MOVE / DEFINE NUMBER OF WORDS TO MOVE /A001 / RETURN / NORMAL RETURN ADDRESS /A001 CU4MOV, XX /A001 AC7777 / SET A.C. EQUAL TO MINUS ONE /A001 TAD I CU4MOV / SUBTRACT ONE FROM THE FROM ADDRESS /A001 ISZ CU4MOV / INCREMENT RETURN ADDRESS /A001 DCA X0 / STORE VALUE IN AUTOINDEXING REGISTER /A001 AC7777 / SET A.C. EQUAL TO MINUS ONE /A001 TAD I CU4MOV / SUBTRACT ONE FROM THE TO ADDRESS /A001 ISZ CU4MOV / INCREMENT RETURN ADDRESS /A001 DCA X1 / STORE VALUE IN AUTOINDEXING REGISTER /A001 TAD I CU4MOV / GET VALUE FOR NUMBER OF WORDS /A001 ISZ CU4MOV / INCREMENT RETURN ADDRESS /A001 CIA / MAKE THE VALUE NEGATIVE /A001 DCA X2 / STORE VALUE IN AUTOINDEXING REGISTER /A001 CU4MOR, TAD I X0 / GET MEMORY VALUE FROM "FROM" ADDRESS /A001 DCA I X1 / STORE MEMORY VALUE IN "TO" ADDRESS /A001 ISZ X2 / INCREMENT NUMBER OF WORDS TO TRANSFER /A001 JMP CU4MOR / NOT DONE, GO DO SOME MORE /A001 JMP I CU4MOV / RETURN BACK TO CALLER /A001 / CUCOPY - ROUTINE TO COPY BLOCK OF MEMORY / / JMS CUCOPY / ADDR OF FROM / CDF FROM FIELD / ADDR OF TO / CDF TO FIELD / NUMBER OF WORDS TO COPY / RETURN, AC = 0 CUCOPY, 0 AC7777 / GET FIRST ADDR - 1 FOR INDEX REGISTER TAD I CUCOPY ISZ CUCOPY DCA X0 TAD I CUCOPY / AND FIELD ISZ CUCOPY DCA CUCPY0 / SAVE FOR LATER USE AC7777 / DO SAME FOR TO VALUES TAD I CUCOPY ISZ CUCOPY DCA X1 TAD I CUCOPY ISZ CUCOPY DCA CUCPY1 TAD I CUCOPY ISZ CUCOPY / GET COUNT CIA / MAKE ISZ COUNT DCA CUCPYC / AND SAVE FOR USE CUCPYL, CUCPY0, .-. / ACDF FOR FIRST FIELD TAD I X0 / GET WORD CUCPY1, .-. / ACDF FOR THE RECEIVING FIELD DCA I X1 / STORE WORD ISZ CUCPYC / DONE? JMP CUCPYL / NO - DO NEXT WORD CDFMYF / YES - BACK TO OUR FIELD JMP I CUCOPY / RETURN TO CALLER CUCPYC, 0 IFDEF CONDOR < /A016 PR3= 6236 / panel request #3 / SET THE USER DEFINED TERMINAL CHARACTERISTICS / (printer and comm baud rates) / SELECTIONS FROM THE "SO" MENU / INTO FIRMWARE PANEL MEMORY FIELD 0 LOCATIONS 24,25,26 / THEN A "RST" (RESTORE TERMINAL CHARACTERISTICS) ESCAPE SEQUENCE (ESC c) / WON'T BLOW US UP SETTC, XX / CDFMNU TAD I (MUBUF+MNSECN) / (note that ansi mode and 80 col mode forced) TAD (1200) / Lvl 2 8 bit also /A030 DCA PRQBLK / terminal characteristics from "SETUP" mode TAD I (MUBUF+MNPRTB) / AND (17) / DCA PRQBLK+1 / printer baud rate TAD I (MUBUF+MNPRIM) / AND (17) / DCA PRQBLK+2 / communications baud rate CDFMYF PR3 / 4004 / 40 (dest field) (source field) PRQBLK / source address 24 / destination address -3 / # of words to transfer (neg) 7777 / pr3 terminator CLA / cla just in case ac is dirty from prq JMP I SETTC / EXIT > / END IFDEF CONDOR /A016 / CU4DCD - DISPAY THE CD DOCUMENT NAME CU4DCD, XX CLA CDFMNU TAD I (MUBUF+MNCXP) / SEE IF A DOCUMENT HAS BEEN DEFINED CDFMYF SNA CLA / ++++ JMP I CU4DCD CIFMNU JMS I IOACAL 0 CU4DC1 1012 CU4BF1+SOCDV CU4BF1+SOCNO CU4BF1+SOFAD 2700 / REPOS. CURSOR AT BOTTOM OF SCREEN /A027 JMP I CU4DCD CU4DC1, TEXT '^P(!D.!D) ^A^P' / /M027 X=. / LOCATION OF FIRST FREE LOCATION ON PAGE /----------------------- PAGE / CU4OPT - SYSTEM OPTIONS ROUTINE / / THIS IS THE ROUTINE THAT CHANGES THE SYSTEM VALUES. IT NOW ONLY DEALS WITH THE / COMMUNICATIONS SETTINGS OF MAGCARD, XON/XOF CONTROL IN HOST BUFFER. / / WHAT IS ASUMED IS THAT THE SETTINGS DEALING WITH THE 78 WILL BE SET RIGHT AWAY / THAT IS IF THEY ARE LEAGAL. WHAT IS NOT LEGAL IS TO SET THE SLU3 BAUD RATE IF / SET FOR A WT78. / THE OTHER VALUES WILL BE SET AT THE TIME THAT A COMMUNICATIONS PROGRAM IS / CALLED SINCE IT COULD BE A 102 SYSTEM AND EACH USER COULD HAVE DIFFERENT SE / SETTING FOR THEIR COMMUNICATIONS. / / FIRST THE CONSTANTS THAT ARE USED. / / OFFSETS USED WITH CU4BF1 WHERE THE SYSTEM OPTIONS BUFFER IS READ INTO. SOOPTC=MUSYSL / UNBUNDLING OPTIONS WORD /M001 /C015 SOCDV=SOOPTC+1 / DRIVE NUMBER IN DISPLAYABLE FORMAT /M001 SOCNO=SOCDV+1 / DOCUMENT NUMBER IN DISPLAYABLE FORMAT /M001 SOFAD=SOCNO+1 / STARTING ADDRESS OF THE DOCUMENT'S ASCII NAME STRING /M001 / HERE ARE THE VALUES RETURNED FROM THE SO MENUS CU4SO0=1 / GO TO THE MAIN SYSTEM OPTION MENU CU4GM=2 / GO BACK TO MAIN MENU CU4CD=3 / RETURNED FROM THE CD OPTION CU4CC=4 / MISC CONSTANTS CTLB=2 / DEFINE CONTROL B /A023 CR=15 / DEFINE A CHAR /A023 / THE MAIN PROGRAM CU4OPT, XX JMS CUSM / SET THE MENU VALUES FOR THE DISPLAYS JMS CU4MNU / DISPLAY THE MENUS FOR THE SO OPTION JMS CU4GVL / STORE THE MENU VALUES IN PACKED FORMAT AGAIN JMS CU4CPY / COPY OPTION SETTINGS AND XFER TO DISK /A001 CU4OPX, JMP I CU4OPT / ROUTINE TO COPY THE COMMUNICATION AND OPTION SETTINGS TO THE /A001 / TEMPORARY BUFFER AND THEN TRANSFER THEM TO THE SYSTEM DISK /A001 CU4SET, XX /A001 CLA / MAKE SURE ACCUMULATOR IS CLEAR /A001 TAD (RXERD) / READ COMMAND FOR QUEUING TO RXHAN /A001 JMS CU4ST / READ SYSTEM OPTION WORDS INTO BUFFER /A001 JMS CU4CPY / COPY OPTIONS SETTINGS AND XFER TO DISK/A005 JMP I CU4SET / EXIT CU4CPY, XX / /A001 CLA / /A001 JMS CUCOPY / COPY NEW VALUES FROM THE MENU AREA /M001 MUSYSV / ++++ /M001 CDFMNU /M001 CU4BF1 / ++++ /M001 CDFMYF /M001 MUSYSL /M001 TAD (RXEWT) / WRITE COMMAND FOR QUEUING TO RXHAN /M001 JMS CU4ST / TRANSFER THE SETTINGS TO DISK /M001 JMP I CU4CPY / RETURN TO CALLER /M005 / CUSM - SETS THE VALUES FOR THE MENU TO BE DISPLAYED / THE VALUES THAT ARE SET FOR THE MENU ARE ALL VALUES PERTAINING TO SLU2 AND 3 / IN THE VT78. ALL VALUES ARE PACKED IN A FORM THAT CAN BE BROKEN DOWN FOR DISPLAY / AND USED BY THE ACTUAL SET COMMAND EASIER BUT IT MAY NOT LOOK THAT WAY. / ALL VALUES FOR SLU2 ARE FOUND IN PACKED FORMAT IN SLU2PM. / / THE SLU3 PORT CAN ONLY HAVE THE BAUS RATE CHANGED SO THIS IS THE ONLY VALUE / IT CONTAINS. / / FORMAT: / BITS INFORMATION / / 11 - 8 THE CHARACTER SIZE ONLY COUNTING THE BITS IN THE / CHARACTER NOT PARITY OR STOP BITS / / 7,6 PARITY / / 5,4 STOP BITS / / 3-0 /BAUD / / FORMAT FOR THE MNPRTB WORD: / BITS INFORMATION / / 11-10 TERMINAL MODE (0=VT52, 1=VT278, 2=DECWORD52, 3=EASYLINK) / / 9-6 BREAK TIME (IN TENTHS OF A SECOND). / / 5 UNUSED / / 4 PORT SELECT (0=PRIMARY, 1=ALTERNATE) / / 3-0 PRINTER BAUD RATE. / / ********************************************************** / LIMITS - VALUES THAT ARE CHECKED FOR IN THE MENU / / CHARACTER SIZE - CAN BE FROM 5 - 8 / / PARITY - 2 = NO PARITY, 1 = ODD, 0 = EVEN / / STOP BITS - 1 OR 2 NOTE: IF SET FOR 5 FOR CHARACTER SIZE AND 1 FOR STOP / IT WILL AUTOMATICALLY SET FOR 1.5 STOP BITS / / AND BAUD: / / VALUE BAUD / 0 50 / 1 75 / 2 110 / 3 134.5 (MAGCARD) / 4 150 / 5 300 (DEFAULT) / 6 600 / 7 1200 / 10 1800 / 11 2000 / 12 2400 / 13 3600 / 14 4800 / 15 7200 / 16 9600 / 17 19200 / / CUSM - SETS THE VALUES FOR THE MENU TO BE DISPLAYED / FIRST THE VALUE MNPRIM, MNSECN AND MNPRTB HAVE TO BE BROKEN DOWN TO READABLE VALUES / FOR THE MENU PROGRAM THEN COPIED OVER TO MENU FIELD. THE AREA USED FOR THE / VALUES IN THE MENU FIELD IS THE SAME AS THE ARE USED FOR THE PRINTER SETTINGS CUSM, XX / DISPLAY SETTINGS, AND CHANGE THEM, IF NEC. TAD (CX0AD-1) / SET PTR TO UNPACK AREA. /A009 DCA X0 / /A009 CDFMNU TAD I (MUBUF+MNPRIM) / GET PORT 0 SETTINGS. CDFMYF DCA SAVPRI / Save for later check. /A020 TAD SAVPRI / Get primary port settings. /A020 JMS CUXUPK / UNPACK. IFNDEF CONDOR < /A023 CDFMNU / GET SECONDARY PORT SELECTIONS. TAD I (MUBUF+MNSECN) / ... CDFMYF / DCA SAVSEC / Save for later check. /A020 TAD SAVSEC / Get secondary port settings. /A020 JMS CUXUPK / UNPACK PORT 1 SETTINGS. > / END IF NDEF CONDOR /A023 CDFMNU TAD I (MUBUF+MNFMAT) / GET INTEGRAL MODEM VALUE /A023 AND (MNFM4X / MASK IM BIT /A023 DCA SAVMOD / SAVE /A023 TAD I (MUBUF+MNXONF) / Get XON/XOF value. /A020 DCA SAVXON / Save for later check. /A020 TAD I (MUBUF+MNPRTB) / SAME FOR PRINTER BAUD RATE CDFMYF DCA SAVPRT / Save for later check. /A020 / (SAVPRT)= |TM TM xx|xx BT BT|xx PS BA|BA BA BA /a016 / THIS DEF. CHANGED FOR (026), TO EXPAND # OF TERMINAL MODES /A026 / (SAVPRT)= |TM TM TM|BT BT BT|BT PS BA|BA BA BA /A026 / /a016 / TM=terminal mode, BT=break time, PS=port select, BA=baud rate /a016 / xx=don't care (or don't know) /a016 IFNDEF CONDOR < /A016 TAD SAVPRT RTR / RTR / AND (1) / > / END IFNDEF CONDOR /A016 DCA CUPORT / SAVE PORT SELECT. (always 0 for DEcmate II) TAD SAVPRT CLL RAL / SHIFT BREAK TIME OVER ONE POSITION /A026 BSW AND (17) DCA CUBRTM / SAVE BREAK TIME. TAD SAVPRT / RTL / /M010 /D026 RAL / /M010 /D026 AND (3) / /M010 RTL / TM IS 3 BITS NOW /A026 AND (7) / /A026 DCA CUTMOD / SAVE TERMINAL MODE. TAD SAVPRT AND (17) DCA PRTBAB / PRINTER BAUD RATE. JMS CUCOPY CX0AD / COPY SETTINGS TO MENU FIELD CDFMYF MUBUF+MNPROP / USE COMMON AREA FOR MENU COMMUNICATIONS. CDFMNU CXSETZ JMP I CUSM IFNDEF CONDOR < /A014 / CU4GVL - GETS THE VALUES FROM THE MENU FOR WT78 AND PUTS THEN / BACK INTO THE PACKET FORMAT. CU4GVL, XX JMS CUCOPY MUBUF+MNPROP / COPY SETTINGS FROM MENU BACK CDFMNU CX0AD CDFMYF CXSETZ TAD (CX0AD-1) / SET INDEX REG. DCA X0 / ... JMS CUPACK / PACK CX0 SETTINGS. CDFMNU DCA I (MUBUF+MNPRIM) CDFMYF JMS CUPACK / PACK CX1 SETTINGS. CDFMNU DCA I (MUBUF+MNSECN) CDFMYF TAD CUPORT /CUPORT /M010 BSW / NOW DO HI BYTE. /M010 TAD CUTMOD /TERMINAL MODE /M010 CLL RTL /M010 RTL /M010 TAD CUBRTM /CUBRTM /M010 BSW /M010 TAD PRTBAB /PRTBAB /M010 CDFMNU DCA I (MUBUF+MNPRTB) CDFMYF JMP I CU4GVL > / END IFNDEF CONDOR /A014 IFDEF CONDOR < /A014 / CU4GVL - GETS THE USER DEFINED VALUES FROM THE COMMUNICATIONS MENU CU4GVL, XX JMS CUCOPY MUBUF+MNPROP / COPY SETTINGS FROM MENU BACK CDFMNU CX0AD CDFMYF CXSETZ TAD (CX0AD-1) / SET INDEX REGISTER DCA X0 / ... JMS CUPACK / PACK CX0 SETTINGS. CDFMNU DCA I (MUBUF+MNPRIM) CDFMYF /D021; JMS CUPACK / PACK CX1 SETTINGS. /D021; CDFMNU /D021; DCA I (MUBUF+MNSECN) /D021; CDFMYF /D026 TAD CUPORT /D026 BSW / NOW DO HI BYTE. TAD CUTMOD / TERMINAL MODE / TERMINAL MODE IS NOW 3 BITS /A026 CLL RTL RTL TAD CUBRTM /D026 BSW RTL / SHIFT OVER 5 PLACES /A026 RTL / /A026 RAL / /A026 TAD PRTBAB CDFMNU DCA I (MUBUF+MNPRTB) / IF THE "CC" VALUES OF THE COMMUNICATIONS LINE REMAIN THE SAME / THEN DO NOT "H2INIT" / / THE "CC" VALUES COMPARED ARE FROM "CX0AD" THRU "CX0AD+10" INCLUSIVE TAD I (MUBUF+MNPRIM) / Get new PRIMARY port settings. /A020 CIA / compare to original setting. /A020 TAD SAVPRI / ... /A020 SZA;JMP CU4INI / Init host line if different. /A020 /D021; TAD I (MUBUF+MNSECN) / Now check SECONDARY port settings. /A020 /D021; CIA / compare to original setting. /A020 /D021; TAD SAVSEC / ... /A020 /D021; SZA;JMP CU4INI / Init host line if different. /A020 TAD I (MUBUF+MNXONF) / Check BC setting. /A020 CIA / compare to original setting. /A020 TAD SAVXON / ... /A020 SZA / /A023 JMP CU4INI / INIT IF DIFF /A023 TAD I (MUBUF+MNFMAT) / CK INTEGRAL MODEM SETTING /A023 AND (MNFM4X / MASK IM BIT /A023 CIA / /A023 TAD SAVMOD / ORIGINAL SETTING /A023 CU4INI, CDFMYF / Map back to our field. /A020 SNA / SKIP IF DIFFERENCE IN SETTINGS /M023 JMP CU4IOK / Jmp if settings are the same. /A020 DCA CU4DFF / SET FLAG FOR INTEGRAL MOD. CK /A023 CIFSYS H2INIT / COMMUNICATIONS LINE INITIALIZATION CU4IOK, JMS SETTC / SET THE CHARACTERISTICS INTO P.M. /A016 JMP I CU4GVL > / END IFDEF CONDOR /A014 X=. / LOCATION OF FIRST FREE LOCATION ON PAGE /----------------------- PAGE CUXUPK, XX DCA T1 / GET SAVED SETTINGS TAD T1 BSW / ++++ RTR AND (17) IFDEF CONDOR < / /A020 TAD (DBMAP-5) / Map 5,7,6,8 to 5,6,7,8. /A020 DCA T2 / ... /A020 TAD I T2 / Voila.. /A020 > /ENDIF CONDOR /A020 DCA I X0 / DATA BITS. TAD T1 BSW AND (3) DCA I X0 / PARITY. TAD T1 RTR / ++++ RTR AND (3) DCA I X0 / STOP BITS. TAD T1 / AND SEPARATE THEM FOR DISPLAY/MODIFY AND (17) DCA I X0 / BAUD RATE. JMP I CUXUPK / RETURN TO CALLER. CUPACK, XX / PACK CX SETTINGS INTO PACKED WORD. TAD I X0 /CXAD IFDEF CONDOR < / /A020 TAD (DBMAP-5) / Map 5,6,7,8 to 5,7,6,8. /A020 DCA T2 / ... /A020 TAD I T2 / Voila.. /A020 > /ENDIF CONDOR /A020 CLL RTL TAD I X0 /CXAP CLL RTL TAD I X0 /CXAS RTL / ++++ RTL TAD I X0 /CXAB JMP I CUPACK / RETURN TO CALLER. DBMAP, 5;7;6;10 / table to map 5,6,7,8 to 5,7,6,8 /A020 / CU4MNU - READS IN THE BUFFER WITH THE SETTINGS TO GET THE DOCUMENT NAME / FOR CD OPTION IN SO THAT IS THE CX DOCUMENT TRANSFER PROTOCOL OPTION. / IT WILL THEN DISPLAY THE APPROPRIATE MENUS WHEN CHOSEN. THE ONLY REALLY / WIERD MENU DISPLAY IS THE FIRST THAT CAN CONTAIN THE CD DOCUMENT NAME SINCE / THE MENU DOES THE MAJORITY OF THE DISPLAY BUT THE ROUTINE DISPLAYS THE NAME. CU4MNU, XX CLA TAD (RXERD) / READ COMMAND FOR THE QUEUING TO RXHAN JMS CU4ST / READ IT IN CDFMNU / MAP MENU FIELD. /A011 AC0001 / SET REFRESH FLAG TO /A011 DCA I (MUBUF+MNTMP4) / REFRESH THE SO MENU THE INITIAL TIME./A011 CDFMYF / BACK TO US. /A011 CU4MN1, CIFMNU / DISPLAY THE SO MENU EXCEPT THE CD DOCUMENT NAME IF ANY JMS I MNUCAL DLMSO0 JMS CU4DCD / DISPLAY THE NAME CIFMNU JMS I MNUCAL / HAVE MENU DO THE READ AND DISPLAY ANY SUB MENUS DLMSO1 CDFMNU / ++++ TAD I (MUBUF+MNTMP2) / ++++ CDFMYF / GET THE RETURN VALUE TAD (-CU4CC) / CK FOR "CC" MENU /A023 SNA / /A023 JMP CU4MCC / "CC" MENU IS NOW A SPECIAL CASE /A023 TAD (CU4CC-CU4CD) / CK FOR CONTROL DOCUMENT /A023 SNA / /A023 JMP CU4MCD / /A023 TAD (CU4CD-CU4GM) / GOLD:M - IS RET TO MAIN MENU /A023 SNA CLA / /A023 JMP I CU4MNU / PATH TO MAIN MENU /A023 JMP CU4MN1 / REDISPLAY "SO" MENU /A023 / TAD (-CU4GM) / SEE IF THE VALUE RETURNED IS TO RETURN TO / / MAIN MENU / SNA / ++++ / JMP I CU4MNU / TAD (CU4GM-CU4SO0) / OR GO TO THE MAIN SYSTEM OPTION MENU / SNA CLA / ++++ / JMP CU4MN1 / AC7777 / SEE IF DOCUMENT HAS NO ERRORS / / -1 MEANS THAT DBTDOC IS CALLED BY SO CU4MCD, AC7777 CIFEDT JMS I (CU4DBT) JMP CU4MN5 / ERROR SO DONT CONTINUE CDFMNU / ++++ TAD I (MUBUF+MNFNAM) / ++++ CDFMYF DCA CU4MN2 / GET ADDRESS OF THE BUFFER THAT HAS THE NAME / HERE ASSUME IT IS A SPECIAL RETURN TO SYSTEM / OPTION MENU FROM THE CD SUB MENU SO THE NAME / HAS TO BE UPDATED AND THE DOCUMENT CHECKED JMS CUCOPY CU4MN2, XX / COPY FILE NAME CDFMNU CU4BF1+SOFAD CDFMYF 121 / LENGTH OF THE MNFNAM STRING CDFMNU / ++++ TAD I (MUBUF+MNDRV) CDFMYF / ++++ DCA CU4BF1+SOCDV / GET THE DRIVE NUMBER CDFMNU / ++++ TAD I (MUBUF+MNDOCN) CDFMYF / ++++ DCA CU4BF1+SOCNO / AND DOCUMENT NUMBER JMP CU4MN1 / GO TO THE MAIN DISPLAY CU4MN5, CLA / BEFORE CONTINUING ERASE THE VALID DOCUMENT FLAG CDFMNU / ++++ DCA I (MUBUF+MNCXP) / ++++ CDFMYF JMP CU4MN1 CU4MCC, CIFMNU / MENU FIELD /A023 JMS I MNUCAL / /A023 DLMSO4 / DISPLAY "CC" MENU /A023 JMS CU4DMC / DO MODEM CHECK /A023 SZA CLA / RETURNS AC=0 IF OK /A023 JMP CU4MCC / IM WILL NOT RESPOND - REDISPLAY "CC" /A023 CDFMNU / /A023 TAD I (MUBUF+MNTMP2) / FETCH RETURN VALUE FROM MENU /A023 CDFMYF / /A023 TAD (-CU4GM) / /A023 SZA CLA / /A023 JMP CU4MN1 / DISPLAY "SO" MENU /A023 ISZ CU4MNU / SKIP THE JMS CU4GVL /A023 JMP I CU4MNU / GOLD MENU RETURN /A023 X=. / LOCATION OF FIRST FREE LOCATION ON PAGE /----------------------- PAGE / INTEGRAL MODEM SUPPORT CU4DMC, XX / /A023 DCA CU4DFF / RESET DIFFERENCE FLAG /A023 JMS CU4GVL / COPY & COMPARE VALUES /A023 TAD CU4DFF / HAVE SETTINGS CHANGED ? /A023 SNA CLA / /A023 JMP CU4DME / NO - EXIT /A023 CDFMNU / SEE IF IM IS ENABLED /A023 TAD I (MUBUF+MNFMAT) / /A023 CDFMYF / /A023 AND (MNFM4X / MASK IM BIT /A023 SNA CLA / /A023 JMP CU4DME / NO - EXIT /A023 JMS CU4DSM / YES - FIRST ISSUE A DISABLE TO RESET MODEM /A029 JMS CU4WTT / WAIT /A029 JMS CU4ENM / ISSUE ENABLE /A023 JMS CU4CMP / IS MODEM PRESENT ? /A023 SZA CLA / /A023 JMP CU4ME1 / NO - GO DISABLE & EXIT /A029 JMS CU4SCB / YES - SEND ^B /A023 JMS CU4WTT / WAIT /A023 JMS CKMRES / CK FOR "READY" RESPONSE /A023 SNA CLA / /A023 JMP CU4DME / YES - EXIT /A023 JMS CU4MER / NO - SEND ERROR MESSAGE /A023 AC0001 / SET ERROR RETURN VALUE /A023 CU4DME, JMP I CU4DMC / RETURN /A023 CU4ME1, JMS CU4DSM / DISABLE MODEM SIGNAL /A029 JMP I CU4DMC / RETURN /A029 CU4DFF, 0 / FLAG - DIFFERENCE IN COMM SETTINGS /A023 CU4MER, XX CIFMNU / DISPLAY ERROR MESSAGE /A023 JMS I IOACAL / /A023 0 / /A023 CU4MET / TEXT STRING /A023 2205 / POSITION CURSOR /A023 2305 / POSITION CURSOR /A023 CU4MEW, JMS CU4INC / WAIT FOR USER TO TYPE "RET" /A023 TAD (-CR / /A023 SZA CLA / /A023 JMP CU4MEW / TRY AGAIN /A023 JMP I CU4MER CU4INC, XX / INPUT A CHAR FROM THE KB /A023 JMP C4INC2 / /A023 C4INC1, CIFSYS / /A023 JWAIT / /A023 C4INC2, CIFSYS / /A023 TTYIN / /A023 JMP C4INC1 / NOTHING RETURN /A023 JMP I CU4INC / HAVE A CHAR - RETURN /A023 / CHECK MODEM RESPONSE /A025 / RETURNS AC = 0 IF "Dialer Ready" RESPONSE /A025 / AC NOT EQUAL 0 IF NO MATCH /A025 / CKMRES, XX / /A025 TAD (-22 / MAX COUNT TO "R" /A025 CMPLP, DCA T3 / /A025 JMS HSINPT / ASK FOR CHAR /A025 JMP CKMREE / NONE PRESENT - ERROR /A025 DCA T1 / SAVE CHAR /A029 TAD T1 / /A029 AND (3400 / CK FOR TRANSMISSION ERRORS /A029 SZA CLA / /A029 JMP CKMREE / /A029 TAD T1 / /A020 AND P177 / 7 BITS /A028 CIA / CHAR PRESENT - COMPARE /A025 TAD ("D-200 / UPPER CASE "D" /A028 SNA / /A025 JMP CMPLP1 / FOUND - CLEAR INPUT BUFFER /A029 AC0001 / NOT YET - DEC. COUNT & CK LIMIT /A025 TAD T3 / LIMIT REACHED ? /A025 SZA / /A025 JMP CMPLP / NO - CONTINUE /A025 CKMREE, AC0001 / SET ERROR FLAG /A025 JMP I CKMRES / /A025 CMPLP1, CIFSYS / EMPTY INPUT BUFFER /A029 HS2IN / /A029 SZA CLA / /A029 JMP CMPLP1 / LOOP UNTIL EMPTY /A029 JMP I CKMRES / /A029 X=. /----------------------------------------------------------------------- PAGE HSINPT, XX / INPUT FROM HOST INPUT BUFFER /A023 CIFSYS / /A023 HS2IN / /A023 JMP I HSINPT / NOTHING RETURN /A023 ISZ HSINPT / HAVE A CHAR - TAKE SKIP RETURN /A023 JMP I HSINPT / /A023 HSOUT, XX / OUTPUT CHAR TO COMM CHIP /A023 HSOUT1, CIFSYS / /A023 HS2OU / /A023 SKP / OUTPUT BUFFER FULL - WAIT /A023 JMP I HSOUT / CHAR GONE - RETURN /A023 CIFSYS / /A023 JWAIT / /A023 JMP HSOUT1 / TRY AGAIN /A023 CU4SCB, XX / SEND A ^B /A023 TAD (CTLB) / CONTROL B CHAR /A023 JMS HSOUT / /A023 JMP I CU4SCB / /A023 CU4CMP, XX / CK FOR IM PRESENT /A023 CLA / /A023 LAS / READ BITS /A023 AND (4000) / MASK MODEM BIT /A023 JMP I CU4CMP / /A023 CU4ENM, XX / ENABLE INTEGRAL MODEM /A023 AC0003 / SET BITS 10 & 11 /A023 TAD (4000) / MODEM BIT /A023 H2DTR / IM IOT /A023 CLA / /A023 JMP I CU4ENM / /A023 CU4DSM, XX / DISABLE INTEGRAL MODEM /A023 AC0003 / SET BITS 10 & 11, MODEM BIT = 0 /A023 H2DTR / IM IOT /A023 CLA / /A023 JMP I CU4DSM / /A023 CU4WTT, XX / WAIT 1 SECOND /A028 DCA T1 / CLEAR STORAGE /A028 CDFSYS / FETCH CLOCK VALUE /A028 TAD I (CLOCK+2) / /A028 CDFMYF / /A028 CIA / /A028 DCA T1 / SAVE /A028 CU4WLP, CDFSYS / FETCH NEW VALUE /A028 TAD I (CLOCK+2) / /A028 CDFMYF / /A028 TAD T1 / COMPARE WITH OLD VALUE /A028 SNA CLA / ANY CHANGE /A028 JMP CU4WJW / NO - JWAIT /A028 JMP I CU4WTT / YES - RETURN /A028 CU4WJW, CIFSYS / JWAIT HERE /A028 JWAIT / /A028 JMP CU4WLP / /A028 CU4MET, IFNDEF V30NOR < /A032 TEXT '^P!E&THE &INTEGRAL &MODEM WILL' /A023 *.-1 /A023 TEXT ' NOT RESPOND TO THESE SETTINGS. ' /A023 *.-1 /A023 TEXT '^P&PRESS !&RETURN TO CHANGE THE SETTINGS.' /A023 > IFDEF V30NOR < /A032 TEXT '^P!E&INTEGRALMODEMET GODTAR IKKE DISSE VERDIENE.' /A032 *.-1 /A032 TEXT '^P&TRYKK P\E !&RETUR FOR \E ENDRE VERDIENE.' /A032 > X=. /----------------------------------------------------------------------- PAGE IFDEF UNBUND < /A001 / ACTIVATE OPTIONAL FEATURE / ROUTINE TO READ SPECIAL FEATURE DISKETTE AND EXTRACT OPTION WORD /A001 / PUT UP ACTIVATION MESSAGE AND PERFORM INITIALIZATION OPERATIONS /A001 INSOPT, CIFMNU /MAKE CIF INSTRUCTION FOR MENU FIELD /A001 JMS I IOACAL /CALL THE IOA DISPLAY ROUTINE /A001 0 /DEFAULT OUTPUT ROUTINE /A001 INSMNU /ADDRESS OF "ACTIVATING FEATURE MENU" MESSAGE /A001 0 /CURSOR POSITION TO CLEAR THE SCREEN /A001 23 /CURSOR POSITION TO BEGIN DISPLAY /A001 /IFDEF DUTCH <160> /A003 TAD INSMYF /GET POINTER TO THIS MENORY FIELD /M022 DCA QUQBLK+RXQBFD /SET UP BUFFER FIELD IN QUEUE BLOCK /M022 TAD (BLDBUF) /GET POINTER TO BUFFER ADDRESS /A001 DCA QUQBLK+RXQBAD /SET UP BUFFER ADDRESS IN QUEUE BLOCK /M022 TAD SAVDRV /SET TO DOCUMENT DRIVE /M024 DCA QUQBLK+RXQDRV /AND STORE IT IN QUEUE BLOCK /M022 / GET THE DENSITY OF THE ACTIVATION DISKETTE /A012 TAD (4000+RXEDN) /GET AND SET DENSITY /A012 DCA QUQBLK+RXQFNC /FUNCTION CODE /M022 JMS BLDQR0 /DO IT .... /A012 / READ THE ALLOCATION BLOCK /A001 TAD (RXERD+4000) /READ THE ALLOCATION BLOCK /A001 DCA QUQBLK+RXQFNC /M022 TAD (DLALOC) /GET ALLOCATION BLOCK NUMBER /A001 DCA QUQBLK+RXQBLK /SET THE BLOCK COUNTER /M022 JMS BLDQR0 /REQUEST THE READ /A001 / PERFORM VALIDATION OF ALLOCATION BLOCK /A001 TAD I (BLDBUF+1) /GET SECOND LOCATION OF ALLOC BLOCK /A001 TAD (-40) /40 MEANS DOCUMENT DISKETTE /A001 SZA CLA /CHECK IF THIS IS A DOCUMENT DISKETTE /A001 JMP INSERR /NO - NOT A VALID OPTIONS DISKETTE /A001 TAD I (BLDBUF+2) /GET THIRD LOCATION OF ALLOC BLOCK /A001 SZA CLA /IS NUMBER OF FILE SYSTEM BLOCKS = 0 /A001 JMP INSERR /NO - NOT A VALID OPTIONS DISKETTE /A001 / READ HOME BLOCK /A001 TAD (DLDIR) /LOCATION OF HOME BLOCK /A001 DCA QUQBLK+RXQBLK /M022 JMS BLDQR0 /REQUEST THE READ /A001 / ESTABLISH COMPATIBILITY OF OPTION WITH CURRENT SYSTEM REVISION LEVEL /A001 / BY EXTRACTING THE OPTION VERSION NUMBER FROM THE ACTIVATION DISK /A001 OCTAL /SET OCTAL MODE /A001 TAD I (BLDBUF+341) /SYSTEM 278 VERSION LEVEL FOR OPTION /A001 DCA T1 /SAVE FOR CURRENT USE /A001 TAD T1 /GET THE VERSION LEVEL NUMBER /A001 BSW /SWAP BYTES IN THE ACCUMULATOR /A001 AND (77) /MASK OF THE HIGH ORDER BITS /A001 TAD (200) /CONVERT TO ASCII VALUE /A001 DCA INSVER /STORE IN LIST FOR ERROR MESSAGE /A001 TAD T1 /GET THE VERSION LEVEL NUMBER /A001 AND (77) /MASK OFF THE HIGH ORDER BITS /A001 TAD (200) /CONVERT TO ASCII VALUE /A001 DCA INSREV /STORE IN LIST FOR ERROR MESSAGE /A001 TAD (SYSVER) /GET CURRENT SYSTEM VERSION LEVEL /A001 AND (77) /MASK OFF HIGH ORDER BITS /A001 BSW /MOVE TO HIGH ORDER POSITION /A001 MQL /SAVE IN MQ FOR INCLUSIVE OR OPERATION /A001 TAD (SYSBAS) /GET CURRENT SYSTEM BASE LEVEL REVISION /A001 AND (77) /MASK OFF HIGH ORDER BITS /A001 MQA /PERFORM INCLUSIVE OR OPERATION /A001 CMA CLL /MAKE ONE'S COMPLEMENT OF VALUE FOR TEST /A001 TAD T1 /COMBINE WITH OPTION VERSION NUMBER /A001 SZL CLA /LINK SET MEANS SYSTEM VERSION IS TOO LOW /A001 JMP INSLOW /GO REPORT THE ERROR /A001 / EXTRACT OPTION WORD AND COMBINE WITH EXISTING OPTIONS /A001 TAD I (BLDBUF+340) /GET OPTION MASK WORD /A001 MQL /SAVE IN MQ FOR INCLUSIVE OR OPERATION /A001 CDFMNU /MAKE CDF INSTRUCTION FOR MENU FIELD /A001 TAD I (MUBUF+MNOPTC) /GET CURRENT OPTION WORD /A001 MQA /OR IN THE OPTION MASK WORD /A001 DCA I (MUBUF+MNOPTC) /STORE NEW OPTION WORD IN MENU FIELD /A001 INSMYF, CDFMYF /MAKE CDF INSTRUCTION FOR MY FIELD /M022 / ADD BLUFF TIME TO MAKE CUSTOMER THINK SOMETHING REALY IS ON THIS DISK /A001 CIFMNU /MAKE CIF INSTRUCTION FOR MENU FIELD /A001 JMS I IOACAL /CALL THE IOA DISPLAY ROUTINE /A001 0 /DEFAULT OUTPUT ROUTINE /A001 INSPRG /ADDRESS OF "IN PROGRESS" MESSAGE /A001 1221 /CURSOR POSITION TO BEGIN DISPLAY /A001 TAD (-20) /SET UP FOR SIXTEEN PASSES /A001 DCA T1 /USE TEMPORARY REGISTER AS COUNTER /A001 INSOVR, DCA QUQBLK+RXQDRV /SET TO SYSTEM DRIVE /M022 JMS BLDQR0 /REQUEST THE READ OPERATION /A001 ISZ QUQBLK+RXQDRV /SET TO DOCUMENT DRIVE /M022 JMS BLDQR0 /REQUEST THE READ OPERATION /A001 ISZ T1 /INCREMENT THE COUNT /A001 JMP INSOVR /NOT DONE, GO DO SOME MORE /A001 JMP CU4WRT /GO UPDATE OPTIONS WORD ON SYSTEM DISK /A001 INSERR, CIFMNU /MAKE CIF INSTRUCTION FOR MENU FIELD /A001 JMS I IOACAL /CALL THE IOA DISPLAY ROUTINE /A001 0 /DEFAULT OUTPUT ROUTINE /A001 INSVAL /ADDRESS OF "DISKETTE NOT VALID" MESSAGE /A001 1316 /CURSOR POSITION FOR ERROR MESSAGE /A001 JMP BLDERN /GO PRINT "GOLD MENU" MESSAGE & RETURN /A001 INSLOW, CIFMNU /MAKE CIF INSTRUCTION FOR MENU FIELD /A001 JMS I IOACAL /CALL THE IOA DISPLAY ROUTINE /A001 0 /DEFAULT OUTPUT ROUTINE /A001 INSMS0 /ADDRESS OF TEXT CONTROL STRING /A022 1013 /CURSOR POSITION FOR ERROR MESSAGE /M022 INSMS1 /ADDRESS OF "THE FEATURE ---" MESSAGE /M022 1213 /CURSOR POSITION FOR ERROR MESSAGE /M022 INSMS2 /ADDRESS OF "WITH THIS VERSION" MESSAGE /M022 1413 /CURSOR POSITION FOR ERROR MESSAGE /M022 INSMS3 /ADDRESS OF "REQUIRES VERSION" MESSAGE /M022 INSVER /ADDRESS OF VERSION NUMBER LIST /M022 INSMS4 /ADDRESS OF "OR LATER..." MESSAGE /A022 JMP BLDERN /GO PRINT "GOLD MENU" MESSAGE & RETURN /A001 INSMS0, TEXT '^P^S^P^S^P^S^A^S' /CONTROL STRING FOR VERSION MESSAGE /A022 INSVER, 0;". /VERSION NUMBER FOR ERROR MESSAGE /M022 INSREV, 0;0 /REVISION NUMBER FOR ERROR MESSAGE /M022 X=. / LOCATION OF FIRST FREE LOCATION ON PAGE /----------------------- PAGE /A001 /*************************************************************************** /*************************************************************************** /**** CAUTION - THE CODE ON THIS PAGE WAS WRITTEN SO THAT IT DOESN'T **** /**** GENERATE ANY LITERAL OR OFF PAGE DEFINITIONS. THIS WAS DONE **** /**** SO THAT THE MESSAGES COULD FOLLOW THE CODE AND SAVE DISK SPACE **** /*************************************************************************** /*************************************************************************** BLDBAK, UNBRTN /RETURN ADDRESS FOR TYPING GOLD MENU /A022 BLDBEL, 7 /ASCII CODE FOR RINGING THE BELL /A022 BLDC1, 1 /MASK VALUE OF 1 /A022 BLDC77, 77 /MASK VALUE OF 77 /A022 BLDFNR, BLDRED /ADDRESS OF "READ" FOR ERROR MESSAGE /A022 BLDFNW, BLDWRT /ADDRESS OF "WRITE" FOR ERROR MESSAGE /A022 BLDLIN, EDMENU-EDNWLN /CHECK VALUE FOR TESTING RETURN /A022 BLDM4, -4 /CKECK VALUE FOR TESTING BLOCK WRITE /A022 BLDMNU, -EDMENU /CHECK VALUE FOR TESTING GOLD MENU /A022 BLDOVR, CU4OVR /RETURN ADDRESS FOR TYPING RETURN /A022 BLDQR0, XX /REQUEST A DISK FUNCTION & HANDLE ERRORS/A001 JMS QURX /QUEUE THE DISK REQUEST /M022 SMA CLA /WAS THERE AN ERROR ? /M022 JMP I BLDQR0 /NO, WE ARE DONE, RETURN TO CALLER /M022 /YES, HANDLE DISK DRIVE ERROR /M022 TAD QUQBLK+RXQDRV /GET THE ERROR DRIVE NUMBER /M022 DCA BLDDRV /STORE THE ERROR DRIVE NUMBER /A001 TAD BLDFNR /GET POINTER TO READ MESSAGE /M022 DCA BLDFNC /SET UP FOR READING ERROR /A001 TAD QUQBLK+RXQFNC /CHECK TO SEE IF IT IS READING ERROR /M022 AND BLDC77 /GET RID OF THE 4000 /A001 TAD BLDM4 /CHECK FOR A BLOCK WRITE /M022 SZA CLA /M022 JMP BLDER1 /NO, IT WAS A READ /M022 TAD BLDFNW /GET POINTER TO WRITE MESSAGE /M022 DCA BLDFNC /SET UP FOR WRITTING ERROR /M022 BLDER1, CIFMNU /M022 JMS I IOACAL /THE ERROR MESSAGE /A001 0 /A001 BLDERM /A001 520 /POSITION ON THE SCREEN ROW 5 COL.20 /A001 BLDDRV, 0 /THE DRIVE /A001 BLDFNC, 0 /THE ADDRESS OF THE MESSAGE READ/WRITE /A001 QUQBLK+RXQBLK /THE BLOCK NUMBER /M022 / FALL INTO RETURN ROUTINE /M022 /*************************************************************************** /*************************************************************************** /**** CAUTION - THE CODE ON THIS PAGE WAS WRITTEN SO THAT IT DOESN'T **** /**** GENERATE ANY LITERAL OR OFF PAGE DEFINITIONS. THIS WAS DONE **** /**** SO THAT THE MESSAGES COULD FOLLOW THE CODE AND SAVE DISK SPACE **** /*************************************************************************** /*************************************************************************** BLDERN, CIFMNU /MAKE CIF INSTRUCTION FOR MENU FIELD /A001 JMS I IOACAL /CALL DISPLAY ROUTINE /A001 0 /DEFAULT OUTPUT ROUTINE /A001 BLDTXT /ADDRESS OF TEXT CONTROL STRING /M022 2315 /CURSOR POSITION TO DISPLAY MESSAGE /M022 BLDRET /ADDRESS "PRESS RETURN" MESSAGE /M022 2523 /CURSOR POSITION TO DISPLAY MESSAGE /M022 BLDGMR /ADDRESS "PRESS GOLD MENU" MESSAGE /M022 2700 /MOVE CURSOR TO BOTTOM OF SCREEN /M022 /THIS ROUTINE WILL WAIT FOR A GOLD MENU OR RETURN TO BE TYPED /A001 /BY THE USER. A GOLD MENU WILL CAUSE A RETURN TO THE MAIN MENU, /A001 /AND A RETURN WILL CAUSE A RETURN TO THE ACTIVATE FEATURES MENU. /A001 /ALL OTHER CHARACTERS WILL RING THE BELL. /A001 JMP BLDWFR /CHECK FOR CHARACTER FROM THE KEYBOARD /A001 CIF 0 /CHANGE TO USER FIELD ZERO /A001 JWAIT /WAIT FOR SYSTEM INTERRUPT /A001 BLDWFR, CIF 0 /CHANGE TO USER FIELD ZERO /A001 XLTIN /READ THE KEYBOARD /A001 JMP .-4 /IF NOTHING TYPED THEN WAIT /A001 TAD BLDMNU /CHECK FOR A GOLD MENU /M022 SNA /A001 JMP I BLDBAK /A GOLD MENU TYPED - GO TO MAIN MENU /M022 TAD BLDLIN /NOW CHECK FOR A RETURN /M022 SNA CLA /A001 JMP I BLDOVR /RETURN WAS TYPED - GO TO ACTIVATE /M022 /THIS ROUTINE WILL RING THE BELL IN RESPONSE TO SOME USER ERROR /A001 TAD BLDBEL /GET ASCII BELL CODE /M022 JMP .+3 /SKIP OVER WAIT COMMAND /A001 CIF 0 /CHANGE TO USER FIELD ZERO /A001 JWAIT /WAIT FOR SYSTEM INTERRUPT /A001 CIF 0 /CHANGE TO USER FIELD ZERO /A001 TTYOU /TRY TO TYPE THE CHARACTER /A001 JMP .-4 /NOT SUCCESSFUL - GO TRY AGAIN /A001 JMP BLDWFR /GO BACK FOR ANOTHER CHARACTER /A001 BLDTXT, TEXT '^P^S^P^S^P' /CONTROL STRING FOR RETURN MESSAGE /A022 /THESE ARE THE CONSTANTS AND ADDRESSES USED BY THE ERROR MESSAGE. /A001 IFDEF ENGLSH < /A002 BLDWRT, TEXT 'WRITE' /A001 BLDRED, TEXT 'READ' /A001 BLDRET, TEXT '&PRESS !&RETURN TO RECALL THE &ACTIVATE &FEATURES &MENU, OR' BLDGMR, TEXT '&PRESS &GOLD !&MENU TO RECALL THE &MAIN &MENU.' /M022 BLDERM, TEXT '^P&ERROR ON DRIVE ^D WHILE TRYING TO ^S BLOCK !D' /M022 INSMNU, TEXT '^P!E^P-- &ACTIVATING &SPECIAL &FEATURE &OPTION --' /A001 INSPRG, TEXT '^P&ACTIVATION IN PROGRESS, PLEASE STAND BY ...' /A001 INSVAL, TEXT '^P&DRIVE 1 DOES NOT CONTAIN A VALID !&FEATURE DISKETTE.' INSMS1, TEXT '&THE FEATURE YOU ARE TRYING TO ACTIVATE IS NOT COMPATIBLE'/M022 INSMS2, TEXT 'WITH THIS VERSION OF THE SYSTEM DISKETTE. &THIS FEATURE' /M022 INSMS3, TEXT 'REQUIRES VERSION ' /M022 INSMS4, TEXT ', OR LATER, OF THE !&WPS-8 &D&E&CMATE SOFTWARE.' /M022 > /END ENGLSH /A002 IFDEF SPANISH < /A002 BLDWRT, TEXT 'ESCRIBIR' /A001 BLDRED, TEXT 'LEER' /A001 BLDRET, TEXT '&PULSE !&RET. PARA VOLVER AL &MEN\Z DE &CHARACTER\MSTICAS,O' BLDGMR, TEXT '&PULSE &DOR. !&MENU PARA VOLVER AL &MENU &PRINC.' /M022 BLDERM, TEXT '^P&ERROR EN UNIDAD ^D MIENTRA TRATABA DE ^S BLOQUE !D' /M022 INSMNU, TEXT '^P!E^P-- &CARACTER\MSTICAS &ESPECIALES --' /A001 INSPRG, TEXT '^P&ACTIVACI\SN EN CURSO, ESPERE ...' /A001 INSVAL, TEXT '^P&LA UNI. 1 NO CONTIENE UN DISK. DE &CARACTER\MSTICA V\ALIDO' INSMS1, TEXT '&LA CARACTER\MSTICA NO ES COMPATIBLE'/M022 INSMS2, TEXT 'CON RSTA VERSI\SN DEL DISK. SISTEMA. &ESTA CARACTER\MSTICA' INSMS3, TEXT 'REQUIERE VERSI\SN ' /M022 INSMS4, TEXT ', O POSTERIOR, DEL SOFTWARE !&WPS-8 &D&E&CMATE.' /M022 > /END SPANISH /A002 IFDEF ITALIAN < BLDWRT, TEXT 'SCRITTURA' /A001 BLDRED, TEXT 'LETTURA' /A001 BLDRET, TEXT '&PREMERE !&RITORNO PER TORNARE AL &MENU DELLE &FUNZIONI &ADDIZIONALI,' BLDGMR, TEXT 'OPPURE PREMERE &ORO !&MENU PER TORNARE AL &MENU &PRINCIPALE.' /M022 BLDERM, TEXT "^P&ERRORE SULL'UNIT\A ^D IN ^S BLOCCO !D" /M022 INSMNU, TEXT '^P!E^P-- &ABILITAZIONE &FUNZIONE &ADDIZIONALE --' /A001 INSPRG, TEXT '^P&ABILITAZIONE IN CORSO, PREGO ATTENDERE...' /A001 INSVAL, TEXT "^P&L'UNIT\A 1 NON CONTIENE &FUNZIONE &ADDIZIONALE VALIDA." INSMS1, TEXT '&FUNZIONI &ADDIZIONALI NON COMPATIBILI'/M022 INSMS2, TEXT 'CON LA VERSIONE ATTUALE DEL SISTEMA. &NECESSITA' /M022 INSMS3, TEXT 'LA VERSIONE ' /M022 INSMS4, TEXT ', O UNA SUCCESSIVA, DEL SISTEMA !&WPS-8 &D&E&CMATE.' /M022 > IFDEF V30NOR < /A032 /A002 BLDWRT, TEXT 'SKRIVE' /A001 BLDRED, TEXT 'LESE' /A001 BLDRET, TEXT '&TRYKK P\E !&RETUR FOR \E F\E MENYEN !&ACTIVERE !&FUNKSJONER, EL' BLDGMR, TEXT '&TRYKK P\E &GULL !&MENY FOR \E F\E &HJOVEDMENYEN.' /M022 BLDERM, TEXT '^P&FEIL P\E STASJON ^D VED FORS\XK P\E \E ^S BLOKK !D' /M022 INSMNU, TEXT '^P!E^P-- &AKTIVERING AV &SPESIALFUNKSJON --' /A001 INSPRG, TEXT '^P&ACTIVERING P\EG\ER.&VENT...' /A001 INSVAL, TEXT '^P&STASJON 1 HAR IKKE RIKTIG DISKETT FOR SPESIALFUNKSJON.' INSMS1, TEXT '&DEN FUNKSJONEN DU FORS\XKER \E AKTIVERRE, STEMMER IKKE.' INSMS2, TEXT 'OVERENS MED VERSJONEN P\E DIN SYSTEMDISKETT. &DENNE' /M022 INSMS3, TEXT 'FUNKSJONEN FORUTSETTER VERSJON' /M022 INSMS4, TEXT ', ELLER NYERE , AV PROGRAMMET !&WPS-8 &D&E&CMATE .' /M022 > /END V30NOR /A002 IFDEF DUTCH < /A002 BLDWRT, TEXT 'SCHRIJVEN' /M003 BLDRED, TEXT 'LEZEN' /M003 BLDRET, TEXT '&DRUK !&RETURN OM TEREG TE GAAN NAAR HET MENU' /M008 BLDGMR, TEXT '&DRUK OP &GOUD !&MENU OM TERUG TE GAAN NAAR HET &HOOFDMENU.' /M008 BLDERM, TEXT '^P&FOUT OP AANDRIJVER ^D BIJ ^S VAN BLOK !D' /M003 INSMNU, TEXT '^P!E^P-- &ACTIVEREN VAN OPTIES --' /M003 INSPRG, TEXT '^P&BEZIG MET ACTIVEREN, EVEN GEDULD. ...' /M003 INSVAL, TEXT '^P&IN AANDRIJVER 1 ZIT GEEN OPTIE-DISKETTE.' /M003 INSMS1, TEXT '&DEZE OPTIE KAN NIET WORDEN GEACTIVEERD' /M003 INSMS2, TEXT 'MET DEZE VERSIE VAN DE SYSTEEMDISKETTE. &DEZE OPTIE' /M003 INSMS3, TEXT 'VEREIST VERSIE ' /M003 INSMS4, TEXT ' OF EEN LATERE VERSIE VAN !&WPS-8 &D&E&CMATE.' /M003 > /END DUTCH /A002 BLDBUF, ZBLOCK 400 /A001 BLDEND=. /LAST LOCATION USED THIS FIELD /A001 > /END IFDEF UNBUND /A001 XLIST /FMTRUL -- WRITE RULERS 0-9 TO FLOPPY 0 AND CLEAR FIRST BLOCK OF CUT-PAST AREA / ******************************************************************** / E D I T H I S T O R Y C O M M E N T S / ******************************************************************** / / 001 EJL 20-JUN-84 EXPAND RULER SIZE FORM 160 TO 238 / / ******************* END EDIT HISTORY ******************************* *RXLDLS RXEWT;0;RXQBLK . DLRLRE;200;CDF 20;-DSRLRE DLCUTB;400;CDF 0;-1 0 *200 SKP CLA JMP I (7605) TAD (177) DCA X0 / INIT PTR TAD (-12) DCA T1 / INIT RULER COUNT CDF 20 / SET DATA FIELD 2 A1, TAD (COSCNT) DCA I X0 / SET COS COUNT WORD TAD (501) DCA I X0 / SET L=1 TAD (-37) DCA T2 / SET COUNT =62 TAD (101) DCA I X0 ISZ T2 JMP .-3 / 62 NULS TAD (601) DCA I X0 / SET R=65 TAD (42-170) / M001 Fill out page DCA T2 / SET CNT TO CLEAR REST OF RULER TAD (101) DCA I X0 ISZ T2 JMP .-3 DCA I X0 / SET 0 FOR STOPPER AC0001 DCA I X0 / SET LEFT MARGIN VALUE TAD (101) DCA I X0 / SET RIGHT MARGIN VALUE TAD (173-200) / M001 DCA T2 / CLEAR REST OF STORAGE DCA I X0 ISZ T2 JMP .-2 ISZ T1 JMP A1 / LOOP FOR ALL RULERS CDF 0 / RESET DATA FIELD JMP I (RXLOAD) / JUMP TO WRITE OUT ROUTINE PAGE ZBLOCK 400 / EMPTY BLOCK FOR CUT-PAST AREA   / WP2CMF - COMMAND LOOP & OVERLAY PACKAGE WITH IOA AND MENU / EDIT HISTORY / 063 EMcD 24-Sep-85 Add Dutch and Spanish Xlations (conditionalised) / 062 Mart 19-Sep-85 Load out convert change / 061 EMcD 17-Sep-85 Nordic translations / 060 Mart 17-Sep-85 Fix printscreen/decspell bug / 059 Mart 6- aug-85 Add convert utility / /---------- All below refer to V2.5 base level and earlier ---------------- / / 058 EMcD 23-Jul-85 Fix bug caused by deleting MCS chars / 057 MART 17-JUL-85 FIX BLASTR HANGUP IN PAGSWP / 056 mart 12-jul-85 move the BLASTR TABLE / 055 EMcD 27-Jun-85 Fix 2 key strokes for Print Screen / 054 RCME 27-Jun-85 Fix bug caused by 053 in MENU DISP / 053 RCME 20-Jun-85 Fix IOA \ command to take 0 byte as a-grave / 052 RCME 05-Jun-85 Fix IOA table bug caused by being in swap area / 051 RCME 03-Jun-85 Fix Print screen hang on printer error / Insert MCS capability into MENU using '\' / Stop MENU DISP string after even or odd no / of characters / 050 Mart 28-May-85 Change printe rhole blocks / 049 Mart 7- may-85 add load out for printer fallback / 048 MART 30-APR-85 Fix bug in BLASTR / 047 rcme 26-Apr-85 Move IOA routines out of SWPBEG area / 046 rcme 18-Apr-85 Fix 041/044 interaction bug / 045 rcme 17-Apr-85 Fix OL6 (List Processing) to load BCDASC / 044 EMcD 10-Apr-85 Allow 8 bit chars in command lines / 043 Mart 04-mar-85 BLASTR modification for tables / 042 rcme 27-MAR-85 Install pink fuzzy bits in IOA / 041 rcme 18-MAR-85 Setup print screen blast hook / 040 Mart 06-MAR-85 use subroutines from panel mem (BLASTR) / /-------------------------------------V2.0 and earlier edits follow / / 039 DFB 06-SEP-84 Fix CTRL RUB/Newline hang bug / 038 DFB 21-AUG-84 CHANGES TO SYSTEM STARTUP ON DISK ERROR / REMOVED LABEL FN1ERR AT MUBUF+10. / 037 WCE 20-AUG-84 CHANGES TO SYSTEM AREA FOR TELEPHONE DIRECTORY / 036 WCE 15-AUG-84 CHANGE INA TO FIX CURSOR ON SCREEN PROBLEM / 035 WCE 07-AUG-84 CHANGE INA TO FIX TIME PROBLEM WITH EDITOR / 034 AH 11-JUL-84 RING BELL AND EXIT ON ILLEGAL KEYBD INPUT / 033 AH 09-JUL-84 CHANGE # OF BLOCKS TO SAVE/LOAD FOR UDKS / 032 JAC 02-JUL-84 AH Fine tuning of 100 UDK'S / 031 LAD 27-JUN-84 VERIFY zap field 6. / 030 JAC 22-JUN-84 Fix FINISH USING SYSTEM for non-winnie / 029 AH 20-JUN-84 Substitute F14 for GOLD U calling sequence / 028 JAC 20-JUN-84 100 UDK integration / 027 HLP 15-JUN-84 Delete initial form feed on print screen / 026 WJY 14-JUN-84 Reload editor each time Spell runs. / 025 DFB 11-JUN-84 Add NOP to be ovlayed by CX in graphics / ....mode to ignore FLABUZ. PRTFLD not loaded / 024 WCE 13-MAY-84 Changes for BRITISH date and currency symbol / 023 WCE 11-MAY-84 Made QURX a cross-field callable routine / Added MENU commands CLRBIT & SETBIT & SHFBIT / 022 WCE 07-MAY-84 Added new IOA command to output control char. / 021 WCE 30-APR-84 Added spare symbols to the user and system area / 020 WCE 23-APR-84 Added symbol CMDBLK for CMDQUX queue block loc. / 019 HLP 23-MAR-84 Change writeout code for system init code being / moved from WPSYS to WPRINT / 018 WJY 17-JAN-84 More DMI compatability (Remove deleted ifdefs) / 017 WJY 23-JAN-84 DECmate I compatability. / 016 WCE 19-JAN-84 Changed size of swap area for N.L. project / 015 WJY 03-JAN-84 Added screen status call in PRINTSCREEN to / prevent clobbering panel memory. / 014 HLP 20-DEC-83 Change writeout code to save 3 printer blks / 013 SBB 30-NOV-83 Added sixel dump & ReGis tables ovrly / 012 GDH 28-NOV-83 Changed Spell-Check load info. / 011 TCW 08-NOV-83 MOVED "FINISHED USING SYSTEM" TEXT TO MN1 / 010 WCE 31-OCT-83 Bug fix to cause DISK forget on FILNAM command / 009 GDH 25-OCT-83 Modified Spell Check load info. / 008 DFB 19-OCT-83 Finish command to dismount winnie volumes / 007 WCE 07-OCT-83 Modification to print screen for scroll areas / 006 WJY 03-OCT-83 Changed CPYDSK utility to zap field 6 lock word. / 005 GDH 30-SEP-83 Changed LOGON utility to zap field 5 lock word. / 004 GDH 22-SEP-83 Added Spelling Checker utility. / 003 DFB 15-SEP-83 NEW WINNIE UTILITY OVERLAY / 002 HLP 13-SEP-83 NEW PRINTER WRITE CODE FOR DELETION OF HNDLR / 001 WCE 31-AUG-83 CHANGES MADE FOR DECMATE 2 VERSION 1.5 / WCE 28-JUN-83 COMBINED MODULES (WPCMND, IOA, MENU, WPPSCR) / INTO ONE NEW MODULE SO THAT MAJOR CHANGES / COULD BE MADE TO FIELD TWO LAYOUT. ALL / PREVIOUS EDIT HISTORIES HAVE BEEN DELETED. /*************************************************************************** /**** FIELD TWO MEMORY LAYOUT DIAGRAM **** /*************************************************************************** / |---------|-----------------------| / | BLOCK 1 | 0 (DLFD2) | / |---------| IOA, INA | / | BLOCK 2 | OUTDIG, CVDBN | / |---------| TIME, PAGSWP | / | BLOCK 3 | PRTSCN | / |---------| PRINTQ | / | BLOCK 4 | 1777 | / |---------|-----------------------| / | BLOCK 5 | 2000 PRINT SCREEN BUF | / | | NATURAL LANGUAGE | / |---------| TRANSLATION | / | BLOCK 6 | 2777 TABLES & ROUTINES| / |---------|-----------------------| / USER SWAP AREA / |---------|-----------------------| |---------------|---------| / | BLOCK 1 | 3000 (DLFD3) | | 3000 (DLSWAP) | BLOCK 1 | / |---------| WPCMND | | |---------| / | BLOCK 2 | OLAY | | APPLICATION | BLOCK 2 | / |---------| MENU | | |---------| / | BLOCK 3 | NXTARG | | AREA | BLOCK 3 | / |---------| STRCMP | |---------------|---------| / | BLOCK 4 | | | | BLOCK 4 | / |---------| | | EDITOR |---------| / | BLOCK 5 | 5377 | | | BLOCK 5 | / |---------|-----------------------| | ROOT | | / | |---------| / |---------|-----------------------| | AREA | | / | BLOCK 1 | 5400-5777 MUXBUF | | | BLOCK 6 | / |---------|-----------------------| | |---------| / | BLOCK 2 | 6000-6377 MUBUF | | 6377 | BLOCK 7 | / |---------|-----------------------| |---------------|---------| / | BLOCK 3 | 6400-6777 MNUSRA | / |---------|-----------------------| / | BLOCK 4 | 7000-7377 UDKSTR | / |---------|-----------------------| / | BLOCK 5 | 7377-7777 RPPGDS | / |---------|-----------------------| /*************************************************************************** /**** WRITEOUT CODE FOR FIELDS 0, 1, AND 2 **** /*************************************************************************** FIELD 0 / *RXLDLS RXEWT / WRITE COMMAND 0 RXQBLK / LOCATION OF QUEUE BLOCK . DLFD0A; 0;CDF 0;-DSFD0A / SYSTEM FIELD PART ONE DLFD1 ; PRBOTM;CDF 10;-DSFD1 / PRINTER FIELD RESIDENT /C019 IFDEF DECDEV < DLFD2 ; 0;CDF 50;-DSFD2 / FIRST HALF USER FIELD (IOA, PRTSCR) / SECOND HALF USER FIELD (WPCMND, MENU) DLMFN1; MUBUF;CDF 50;-DSMFN1 / MENU BLOCK "FINISHED USING SYSTEM" > IFNDEF DECDEV < DLFD2 ; 0;CDF 20;-DSFD2 / FIRST HALF USER FIELD (IOA, PRTSCR) / SECOND HALF USER FIELD (WPCMND, MENU) DLMFN1; MUBUF;CDF 20;-DSMFN1 / MENU BLOCK "FINISHED USING SYSTEM" > DLOPRO; 0;CDF 30;-20 / FIRST SIXTEEN PRINTER OVERLAYS DLOPRO+20; 0;CDF 40;-DSOPRO+20 / REMAINING PRINTER OVERLAYS DLBLPR;400 ;CDF 60;-DSBLPR / PRINTER HOLE BLOCK /A041 DLFRHL;2000 ;CDF 60;-DSFRHL / FALLBACK ROUTINES HOLE BLOCK /A049 DL2CHL;MUXBUF;CDF 60;-DS2CHL / 2CMF HOLE BLOCK /A052 0 / END OF THE LIST *6562 7605 / SET FOR RETURN TO OS8 / AFTER WRITEOUT /*************************************************************************** /**** COMMAND FIELD ROUTINES **** /*************************************************************************** / DEFINE LOCATIONS FOR 0-77 AREA IN SYS FIELD WHICH ARE LOADED INTO ALL FIELDS *MNUCAL MNUCAL, MENU / MENU SUBROUTINE CALLING ADDRESS MUBASE, MUBUF / MENU BUFFER LOCATION FOR OFFSET CALCULATIONS TIMCAL, TIME / TIME OF DAY STRING PROCESSING ROUTINE OLAYCL, OLAY / OVERLAY PROCESSOR ADDRESS FILEIO=JMS I . / PSEUDO INSTRUCTION TO CALL WPFILS ROUTINES 200 / *** XFIELD IN WPFILS IS AT 200 ***** IOACAL, IOA / LOCATION OF SYSTEM OUTPUT ROUTINE INACAL, INA / LOCATION OF SYSTEM INPUT ROUTINE NXACAL, NXTARG / LOCATION OF NEXT ARGUEMENT ROUTINE STCCAL, STRCMP / LOCATION OF STRING COMPARE ROUTINE CVDCAL, CVDBN / LOCATION OF DECIMAL STRING CONVERSION DIGCAL, OUTDIG / LOCATION OF DECIMAL STRING OUTPUT ROUTINE PGSWAP=JMS I . / PSEUDO INSTRUCTION TO CALL SWAP ROUTINE PAGSWP / LOCATION OF PAGE SWAPING ROUTINE T3, 0 / TEMPROARY REGISTER NUMBER THREE T2, 0 / TEMPROARY REGISTER NUMBER TWO T1, 0 / TEMPROARY REGISTER NUMBER ONE *RXJOB / DEFINE RX JOB 0;RXFLD;0;RXSTRT;0 *U1JOB / DEFINE USER JOB 0;40;0;WPCMND;0 /*************************************************************************** /**** COMMAND FIELD VALUES **** /*************************************************************************** IFNDEF DECDEV < FIELD 2 / DEFINE LOCATIONS IN FIELD TWO > IFDEF DECDEV < FIELD 5 / DEFINE LOCATIONS IN FIELD FIVE > CDFMYF=CDFMNU / DEFINE CDF INSTRUCTION TO THIS FIELD *CLKCHG / INCREMENTED BY SECONDS IN FIELDS 2 AND 5 *UDKINH / TURNS OFF UDK'S WHEN NON-ZERO UDKINH, -1 / MAKE SURE UDK'S ARE INHIBITED / WHEN WE START UP / DEFINE LOCATIONS USED IN 100 - 177 AREA OF FIELD 2 *CMNNOP CMNNOP, XX JMP I .-1 DATESP, DATEST FNAMSP, FNAMBF FNUMS, MUBUF+MNFNO DRVNOP, MUBUF+MNDRV PQADDR, PRINTQ 0 PQFRST, 0 PQLAST, PQFRST-1 PAGSWX, PAGSW2 / USED FOR INDIRECT JUMP IN PAGSWP /A057 *CMDQUX / DEFINED IN WPF1 / QURX - QUEUE TO RXHAN QURX, XX JMS GETCID / GET RETURN FIELD INSTRUCTION /A023 DCA QURXIT / STORE FOR RETURN TO CALLER /A023 CIFSYS / CHANGE TO SYSTEM FIELD ENQUE / SEND QUEUE BLOCK TO QUEUING ROUTINE QUBLK / ADDRESS OF QUEUE BLOCK QURX1, CIFSYS / CHANGE TO SYSTEM FIELD JWAIT / WAIT FOR A SIGNIFICENT EVENT TAD QUQBLK+RXQCOD / PICK UP COMPLETION CODE SNA / ARE WE DONE YET ? JMP QURX1 / NO, GO WAIT SOME MORE QURXIT, XX / YES, RESET TO CALLERS FIELD /A023 JMP I QURX / RETURN TO CALLER GETCID, XX / OBTAIN RETURN CDI INSTRUCTION /A023 CLA CLL / INSURE A CLEAN ACCUMULATOR AND LINK /A023 RDF / READ THE DATA FIELD INTO BITS 6-8 /A023 TAD CIDF0 / COMBINE WITH RETURN FIELD INSTRUCTION /A023 GETMYF, CDFMYF / RESET DATA FIELD TO THIS FIELD /A023 JMP I GETCID / RETURN TO CALLER QUBLK, DSKQUE 0 0 *CMDBLK / DEFINED IN WPF1 /A020 QUQBLK, ZBLOCK 17 /*************************************************************************** /**** TEMPORARY REGISTERS FOR USE BY SWAP AREA ROUTINES **** /*************************************************************************** TEMPA, 0 / TEMPROARY SWAP AREA REGISTER A TEMPB, 0 / TEMPROARY SWAP AREA REGISTER B TEMPC, 0 / TEMPROARY SWAP AREA REGISTER C TEMPD, 0 / TEMPROARY SWAP AREA REGISTER D TEMPE, 0 / TEMPROARY SWAP AREA REGISTER E TEMPF, 0 / TEMPROARY SWAP AREA REGISTER F TEMPG, 0 / TEMPROARY SWAP AREA REGISTER G TEMPH, 0 / TEMPROARY SWAP AREA REGISTER H LINFLG, 0 / SWAP AREA LOCATION FOR STATUS MODE FLAG LINRUL, 0 / SWAP AREA LOCATION FOR RULER DETECTED FLAG LINDIF, 0 / SWAP AREA LOCATION FOR STATUS DIFFERENT FLAG LINPGL, 0 / SWAP AREA LOCATION FOR LOW PAGE NUMBERS LINPGH, 0 / SWAP AREA LOCATION FOR HIGH PAGE NUMBERS LINNUM, 0 / SWAP AREA LOCATION FOR LINE NUMBER LINUSD, 0 / SWAP AREA LOCATION FOR NUMBER OF BLOCKS USED LINFRE, 0 / SWAP AREA LOCATION FOR NUMBER OF BLOCKS FREE X=. / INDICATE FIRST FREE LOCATION ON PAGE /-------------------- PAGE /*************************************************************************** /**** IOA - INPUT AND OUTPUT FORMATING PACKAGE **** /*************************************************************************** /THE CALLING SEQUENCE IS: / JMS I IOACAL / USE PAGE ZERO REFFERENCE / ADDR OF OUTPUT ROUTINE (CHAR COMES IN AC) / ADDR OF CONTROL STRING IN TEXT FORMAT / OPTIONAL ARG1 / ARG2, ETC. / RETURN POINT / CONTROL DIRECTIVES FOLLOW THE CHARACTERS ! AND ^. THE ! MEANS INDIRECT / THROUGH THE ARG TO FIND THE VALUE, AND THE ^ MEANS DO NOT INDIRECT. / / THE CHARACTER "&" MEANS THAT THE NEXT CHARACTER IS UPPER CASE. THE "&" MAY / BE USED IN MAIN STRINGS AS WELL AS SUBSTRINGS (!S or ^S). NOTE: To make a / printable "&" use "!C& or ^C&" or use the ASCII pointer (!A or ^A) to an 046 / / The character "%" means that the next character is bold upper case. /a042 / The same restrictions and benifies apply for "%" as for "&". /a042 / / THE DIRECTIVES CURRENTLY ARE: / / !A - ^A = ASCII LIST - VALUE IS ADDR OF LIST OF ASCII IN WORDS, / LAST WORD ZERO / / !C - ^C = CONTROL CHARACTER OUTPUT - PRINT CHARACTER "AS-IS" /A022 / / !D - ^D = DECIMAL CONVERSION / !2 - ^2 = 2 DIGIT DECIMAL OUTPUT / !3 - ^3 = 3 DIGIT DECIMAL OUTPUT / !4 - ^4 = 4 DIGIT DECIMAL OUTPUT / / !E - ^E = ERASE TO END OF SCREEN (EOS) - NO ARGUMENTS / / !L - ^L = ERASE TO END OF LINE (EOL) - NO ARGUMENTS / / !P - ^P = POSITION CURSOR - LEFT BYTE IS LINE #, RIGHT BYTE IS COL # / MINUS VALUE MEANS DO ERASE TO END OF LINE AFTER POSITIONING. / VALUE OF -1 MEANS JUST DO ERASE TO END OF LINE (!L) / / !R - ^R = DO RUBOUT FUNCTION - NO ARGUMENTS / / !S - ^S = STRING - VALUE IS ADDRESS OF STRING USING TEXT PSEUDO-OP / / !X - ^X = SAVE VT100 CURSOR POSITION AND ATTRIBUTES - NO ARGUMENTS / / !Y - ^Y = RESTORE VT100 CURSOR POSITION AND ATTRIBUTES - NO ARGUMENTS / / !Z - ^Z = ASCII CHARACTER - OUTPUT CHARACTER IN VT100 ALTERNATE ROM / (USES S.O., CHAR, S.I. SEQUENCE) / / ![ - ^[ = OUTPUT AN ESCAPE CHARACTER - NO ARGUMENTS / MAY BE USED IN MAIN STRINGS AS WELL AS SUBSTRINGS (!S or ^S) / / !& - ^& = TURN ON UPPER CASE MODE UNTIL NEXT NON ALPHA CHARACTER / MAY BE USED IN MAIN STRINGS AS WELL AS SUBSTRINGS (!S or ^S) / THE FOLLOWING DEFINITIONS ARE USED HERE AND BY THE S COMMAND. /A022 /d051 SHIFT= PAGSWP / SHIFT FLAG, ZERO MEANS CONVERT TO UPPER CASE /d051 IOAUPS= PAGDSK / NON ZERO MEANS UPPER CASE UNTIL NON ALPHA / MAIN ENTRY POINT FOR OUTPUT DISPLAY FUNCTIONS. RETURN ADDRESS ALSO POINTS / TO ARGUMENT LIST. FIRST WE INITIALIZE THE VARIABLES, AND COPY ARGS. IOA, XX / ROUTINE TO HANDLE OUTPUT TO THE SCREEN JMS GETCID / GET CDI INSTRUCTION TO CALLER /A023 DCA IOAXIT / SAVE FOR RETURN TO CALLER /A023 AC7776 / SET UP FOR A DECREMENT OF TWO /A023 TAD IOAXIT / COMBINE WITH RETURN CIF/CDF INST. /A023 DCA IOACDF+1 / SAVE CDF TO CALLER DCA INDARG / CLEAR INDIRECT FLAG DCA CBYTE / ZERO OFFSET INTO STRING JMS ARGVAL / GET OUTPUT ROUTINE POINTER JMS IOASOU / USE IT TO SET OUTPUT ROUTINE JMS ARGVAL / GET CONTORL STRING POINTER DCA CSTRP / NOW WE GO INTO A LOOP READING CHARS OUT OF THE CSTRING, AND OUTPUTING / THEM BY CALLING THE OUTPUT ROUTINE (AFTER CONVERTING TO ASCII). / A CHECK IS MADE FOR ENDING ZERO, AND THE TWO COMMAND CHARACTERS. SKP CLA / FALL THROUGH FROM ABOVE, CLEAR UP-SWITCH UCOM, AC0001 / SELECT UPPER CASE MODE DCA IOAUPS / NONZERO MEANS SET UPPER CASE UNTIL NON ALPHA IOALOP, AC4000 / INITIALIZE SHIFT TO LOWER CASE UPCASE, DCA SHIFT JMS NEXTCH / GET NEXT CHARACTER FROM CONTROL STRING DCA CHAR / SAVE IT IN THE VAR CHAR TAD MCBIT / If multinational, dont bomb on zero /a053 TAD CHAR / GET THE CHARACTER SNA / IS IT ZERO? JMP DONE / YES - END OF STRING - ALL DONE JMP UPCTST / Check for upper case or multinational /a051 /d051 TAD (-46) / CHECK FOR SHIFT CHARACTER (AMPERSAND) /d051 SNA /d051 JMP UPCASE / YES, SET UPPER CASE MODE FOR NEXT CHARACTER NOUPMC, TAD CHAR / Get the chaarcter back /a051 TAD (-45) / See if it is a % sign. /a042 SNA / No, skip. /a042 JMP BLDUCS / Yes, do bold uppercase /a042 TAD (45-34) / See if it is a backslash /a051 SNA / No, skip /a051 JMP MCHAR / Yes, set the multinational char shift /a051 TAD (34-36) / SEE IF IT IS AN UP-ARROW SIGN (^) SNA JMP NOTCM / YES - A NOT COMMAND TAD (36-41) / CHECK FOR EXCLAMATION MARK COMMAND (!) SZA CLA JMP COPYCH / NO - SO MUST BE JUST A STRAIGHT COPY STA / LOAD -1 (MEANS EXCLAMATION POINT COMMAND) NOTCM, DCA INDARG / SAVE 0 OR -1 TO KNOW WHETHER OR NOT TO INDIRECT IOACLP, DCA DPREC / INITIALIZE PRECISION JMS NEXTCH / GET CHARACTER AFTER COMMAND CHARACTER DCA CHAR / SAVE IT TAD (IOACLS-2) DCA X0 / SET UP SEARCH POINTER TAD CHAR / GET THE CHARACTER TO TEST FOR IOANXT, ISZ X0 / BUMP POINTER TO NEXT ENTRY TAD I X0 / PICK UP A MATCH CHARACTER SPA / CHECK FOR A MATCH JMP IOANXT / MINUS MEANS MORE TO CHECK SZA CLA / IS THERE A MATCH ? JMP COPYCH / NO, NOT A COMMAND CHARACTER, JUST COPY IT TAD I X0 / YES, PICK UP ADDRESS OF COMMAND ROUTINE DCA T1 / STORE IN TEMPORARY REGISTER FOR INDIRECT JMP I T1 / GO PERFORM THE SPECIFIED COMMAND COPYCH, TAD CHAR / PICK UP THE CHARACTER JMS SIXOUT / CONVERT IT TO ASCII AND PRINT IT JMP IOALOP / RETURN TO MAIN LOOP FOR THE NEXT CHARACTER / COME HERE WHEN ALL DONE - ZERO CHAR DETECTED JUST OUTPUT THE ZERO TO LET / THE OUTPUT ROUTINE KNOW THAT WE ARE DONE, THEN RETURN DONE, JMS OCHAR / OUTPUT A ZERO FOR ENDING OF TEXT STRINGS JMS IOASOU / RESET IOA TO SCREEN OUTPUT MODE IOAXIT, .-. / RETURN CIF/CDF JMP I IOA / RETURN TO CALLER /d042 IOACLS, -64;P4COM / !4 OR ^4 / 4 DIGIT DECIMAL OUTPUT /d042 64-63;P3COM / !3 OR ^3 / 3 DIGIT DECIMAL OUTPUT /d042 63-62;P2COM / !2 OR ^2 / 2 DIGIT DECIMAL OUTPUT /d042 62-46;UCOM / !& OR ^& / SET UPPER CASE UNTIL NEXT NON ALPHA CHAR /d042 46-33;ESCOM / ![ OR ^[ / OUTPUT AN ESCAPE CHARACTER /A022 /d042 33-32 / !Z OR ^Z / OUTPUT ASCII CHARACTER IN VT100 ALTERNATE /d042 ZCOM / ROM (USE S.O., CHAR,S.I. SEQUENCE) /d042 /d042 32-31;YCOM / !Y OR ^Y / RESTORE CURSOR POSITION AND ATTRIBUTES /d042 /d042 31-30;XCOM / !X OR ^X / SAVE CURSOR POSITION AND ATTRIBURES /d042 /d042 30-23 / !S OR ^S / STRING - VALUE IS ADDRESS OF STRING IN /d042 SCOM / THE FORMAT OF THE TEXT PSEUDO-OP /d042 /d042 23-22;RCOM / !R OR ^R / DO RUBOUT FUNCTION - NO ARG /d042 22-20 / !P OR ^P / POSITION CURSOR - LEFT BYTE IS LINE #, /d042 PCOM / RIGHT IS COL #, MINUS VALUE MEANS DO /d042 / ERASE TO EOL AFTER POSITIONING. /d042 / VALUE OF -1 MEANS JUST DO !L /d042 /d042 20-14;LCOM / !L OR ^L / ERASE TO EOL - NO ARG /d042 14-5;ECOM / !E OR ^E / ERASE TO EOS - NO ARG /d042 5-4;DCOM / !D OR ^D / DECIMAL CONVERSION /d042 4-3;CCOM / !C OR ^C / CONTROL CHARACTER OUTPUT /A022 /d042 3-1 / !A OR ^A / ASCII LIST - VALUE IS ADDRESS OF LIST /d042 ACOM / OF ASCII IN WORDS, LAST WORD ZERO /d042 /d042 1;DONE / END OF LIST /a042 These are the pink fuzzy bits that we want in to enrichen /a042 /a042 the presentation of the menus /a042 BLDUCS, AC7777 / Execute the next character in bold & /a042 DCA BFLAG / uppercase /a042 JMS OSTRG / Output the escape sequence to set the /a042 233 / terminal to bold mode. /a042 61 / 1 /a042 4155 / m + end marker /a042 JMP UPCASE / Jump back to upper case it /a042 BOFF, XX / Routine to turn bold off again /a042 DCA MCBIT / And zero the multinational bit /a051 TAD BFLAG / Test the bold flag /a042 SNA CLA / Are we in bold mode? /a042 JMP I BOFF / No, therefore nothing to do /a042 DCA BFLAG / Yes, reset flag and turn off bold mode/a042 JMS OSTRG / Output the necessary string /a042 233 / CSI /a042 60 / 0 /a042 4155 / m + end marker /a042 JMP I BOFF / End of routine /a042 BFLAG, ZBLOCK 1 / Bold flag /a042 / THE FOLLOWING LINES PUT A VALUE (0, 1 OR 2 ) INTO THE AC WHICH THEN / GETS PUT IN DPREC TO SET THE NUMBER OF DIGITS TO BE OUTPUT. SEE THE / OUTDIG ROUTINE FURTHER DOWN FOR A DISCUSSION OF WHAT VALUE TO SET DPREC TO P2COM, IAC / JUMPS HERE TO SET 2 DIGIT PRECISION P3COM, IAC / JUMPS HERE TO SET 3 DIGIT PRECISION P4COM, JMP IOACLP / JUMPS HERE TO SET 4 DIGIT PRECISION / STORE PRECISION IN DPREC FOR CALL TO OUTDIG NEXTCH, XX / ROUTINE RETURNS NEXT CHAR FROM CSTRING IN AC JMS GETCHR / GET CHAR CBYTE / ADDR OF OFFSET CSTRP, 0 / ADDR OF STRING ISZ CBYTE / NEXT CHAR NEXT TIME JMP I NEXTCH / RETURN ARGVAL, XX / GET ADDRESS OF NEXT ARGUMENT /D022 CLA JMS IOACDF / SET TO CALLER FIELD TAD I IOA / GET ARGUMENT VALUE ISZ IOA / BUMP RETURN ADDRESS POINTER ISZ INDARG JMP .+3 / SKIP INDIRECT IF NOT NEEDED DCA T1 TAD I T1 / GET INDIRECT ARGUMENT VALUE CDFMYF / CHANGE FIELDS BACK JMP I ARGVAL / AND RETURN IOACDF, XX .-. JMP I IOACDF CBYTE, 0 CHAR, 0 INDARG, 0 IOAUPS, 0 /a051 SHIFT, 0 /a051 /*************************************************************************** /A047 A047 A047 A047 A047 A047 A047 A047 A047 A047 /*************************************************************************** / /Code moved out of SWPBEG area as causes problems with SPELL / / Moved here from NXTARG on edit 044 for space reasons / NXTABL, CLA TAD T2 / ANY CHARS GOTTEN YET? SNA CLA JMP NXTANC / NOPE - TRY ANOTHER JMP NXTAMN / Check if in Multi-Nat char /M044 /*************************************************************************** /END A047 END A047 END A047 END A047 END A047 /*************************************************************************** X=. / INDICATE FIRST FREE LOCATION ON PAGE /-------------------- PAGE /******************************************************************* /******************************************************************* /**** **** /**** OUTDIG MUST BE AT THE BEGINNING OF THIS PAGE **** /**** IF IT MOVES, CHANGE THE DECLARATION IN WPF0 **** /**** **** /******************************************************************* /******************************************************************* / THE OUTDIG ROUTINE OUTPUTS AN ASCII STRING OF DECIMAL DIGITS FORMED / FROM THE VALUE CONTAINED IN THE AC. IT HAS SINCE BECOME GENERALLY / USEFUL IN OTHER PLACES TO GENERATE PART OF THE CURSOR POSITIONING / ESCAPE SEQUENCE FOR THE VT-100. / BEFORE CALLING OUTDIG, WHICH IS CROSS FIELD CALLABLE, / SET UP DPREC TO SPECIFY THE NUMBER OF DIGITS PRECISION. / DPREC SHOULD EQUAL 4-(NUMBER OF DIGITS PRECISION) / I.E. IF DPREC=0 THEN DIGITS OUTPUT=4 / IF DPREC=1 THEN DIGITS OUTPUT=3 / IF DPREC=2 THEN DIGITS OUTPUT=2 / IF DPREC=3 THEN DIGITS OUTPUT=1 OUTDIG, XX / THIS IS THE DECIMAL CONVERSION ROUTINE DCA VALUE / SAVE THE AC. VALUE MUST STAY ON THIS PAGE / SINCE OUTDIG IS CROSS-FIELD CALLABLE. JMS GETCID / GET THE CALLER'S DATA FIELD INST. /A023 DCA OUTRTN / SAVE IT FOR RETURN TO CALLER TAD DPREC / SET PRECISION BY CHANGING TABLE STARTING ADDR TAD (TENS-1) DCA TABLE / GET ADDR OF TABLE OF POWERS OF TEN TAD DPREC / GET NUMBER DIGITS PRECISION DCA DPREC1 / STORE SO AS NOT TO DESTROY TAD VALUE / GET THE VALUE TO BE CONVERTED SMA CLA / CHECK FOR A NUMBER GREATER THAN 2048 JMP DLOOP1 / IT'S POSITIVE, SO IT IS OK TAD VALUE / GET THE VALUE TO BE CONVERTED DECIMAL / SET TO DECIMAL MODE FOR NEXT INSTRUCTION TAD (-2000) / SUBTRACT OFF AT LEAST 2000 WORTH OF VALUE OCTAL / SET BACK TO OCTAL MODE DCA VALUE / SAVE NEW VALUE AC0002 / SET UP TO START AT A COUNT OF TWO DLOOP1, DCA COUNT / ZERO COUNT ISZ TABLE / GET NEXT TABLE ENTRY TAD I TABLE SNA JMP OUTRTN / ZERO-DONE CMA SNA CLA ISZ DPREC1 / 1'S DIGIT, MAKE SURE DPREC1 IS NON-ZERO DLOOP2, TAD VALUE / COMPARE WITH VALUE TO SEE IF DONE THIS DIGIT TAD I TABLE SPA JMP DDDGT / DONE DIGIT DCA VALUE / AND SAVE IT ISZ COUNT / NOT DONE - SO INCR COUNT JMP DLOOP2 / AND DO ANOTHER TIME DDDGT, CLA TAD DPREC1 / THIS TEST IS DONE TO SEE IF DIGIT SHOULD BE TAD COUNT / OUTPUT. IT WORKS BECAUSE DPREC1 IS NOT 0 / (SMALL +) IF LESS THAN 4 DIGITS TO OUTPUT SNA CLA / OR LAST DIGIT OUTPUT; COUNT IS ALWAYS SMALL, JMP DLOOP1 / JMP IF CHARACTER IS SUPPRESSED TAD (60) / CONVERT TO ASCII BY ADDING "0" TAD COUNT JMS OCHAR / CALL OUTPUT ROUTINE ISZ DPREC1 / MARK DPREC1 TO INDICATE CHAR HAS BEEN OUTPUT JMP DLOOP1 / NOT THE END, DO ANOTHER DIGIT OUTRTN, HLT / PATCHED TO CHANGE FIELD BACK TO USER JMP I OUTDIG / RETURN TO CALLER / OUTPUT THE VALUE RETURNED BY A CALL TO ARGVAL DCOM, JMS ARGVAL / GET VALUE TO CONVERT JMS OUTDIG / OUTPUT DECIMAL DIGITS JMP IOALOP / DONE, RETURN TO MAIN LOOP TABLE, 0 / HOLDS POINTER TO LOCATION IN TABLE OF POWERS ON TEN VALUE, 0 / NUMBER TO BE OUTPUT IN DECIMAL FORM COUNT, 0 / DPREC, 0 / INDICATES NUMBER OF DIGITS TO OUTPUT (SEE EXPLANATION ABOVE) DPREC1, 0 / SAME AS DPREC1 BUT THIS COPY IS DESTOYED, DPREC IS NOT. VALUE1, 0 / IN PCOM, FIRST 6 BITS IS LINE NUMBER, LAST 6 BITS IS COLUMN COUNT1, 0 / ABSOLUTE VALUE OF VALUE1 /********************************************************* / THE ESCAPE SEQUENCE FOR DIRECT CURSOR ADDRESSING IN THE VT-100 IS: / ESC [ L1 L2 ; C1 C2 C3 H / L1 AND L2 ARE THE TWO DIGITS OF THE LINE NUMBER (IN ASCII), / C1, C2, AND C3 ARE THE THREE DIGITS OF THE COLUMN NUMBER (IN ASCII). / THE DIGITS MUST BE DECIMAL. / POSITION CURSOR DIRECTIVE PCOM, JMS ARGVAL / GET THE ARGUMENT. / HIGH ORDER BYTE REPRESENTS THE LINE NUMBER; / LOW ORDER BYTE REPRESENTS THE COLUMN NUMBER. DCA VALUE1 / SAVE THE ARGUMENT. TAD VALUE1 IAC SNA CLA / IF THE ARGUMENT IS MINUS ONE, NO POSITIONING / IS TO BE DONE. RATHER, WE ERASE TO EOL. JMP LCOM / THIS ERASES TO END OF LINE. TAD VALUE1 / RETRIEVE THE SAVED ARGUMENT. SPA / IF THE NUMBER IS NEGATIVE, MAKE IT POSITIVE. CIA AND P3777 / ELIMINATE THE UNWANTED HIGH BIT. DCA COUNT1 / SAVE THE ABSOLUTE VALUE. DCA DPREC / PUT 0 IN DPREC TO INDICATE 4 DECIMAL DIGIT / OUTPUT WANTED IN THE OUTDIG ROUTINE / NOW THE ESCAPE SEQUENCE OUTPUT BEGINS. JMS OSTRG 33 / ESCAPE "[-200+4000 / [ / PUT OUT THE LINE NUMBER TAD COUNT1 / GET THE ARGUMENT BSW AND P77 / INTERESTED IN THE HIGH ORDER BYTE. IAC / THE ADDRESSES ARE ONE TOO SMALL. JMS OUTDIG / OUTPUT IT / PUT OUT THE SEMI-COLON JMS OSTRG ";-200+4000 / ; / PUT OUT THE COLUMN NUMBER TAD COUNT1 / GET THE ARGUMENT AND P77 / INTERESTED IN THE LOW ORDER BYTE. IAC / THE ADDRESSES ARE ONE TOO SMALL. JMS OUTDIG / END THE SEQUENCE JMS OSTRG "H-200+4000 / H TAD VALUE1 / GET ORIGINAL ARG SMA CLA / CHECK IF WAS NEG /M022 JMP IOALOP / POSITIVE - DO NEXT THING, RETURN TO MAIN LOOP LCOM, JMS OSTRG / DO ERASE TO EOL FUNCTION 33 / ESC 133 / [ "K-200+4000 / K (4000 MEANS END OF STRING) JMP IOALOP / DONE, RETURN TO MAIN LOOP / This is a copy of the ACOM routine except that it does not /A044 / the dead sequence for an 8 bit char .. it outputs as is ! /A044 / Used by WPCRE /A044 / / BCOM, JMS ARGVAL / Get address of list /A044 DCA VALUE / Save it /A044 BCMLP, JMS IOACDF / Set to caller field /A044 TAD I VALUE / Indirect through Addr /A044 CDFMYF / Set to my field /A044 ISZ VALUE / Incr for next time /A044 SNA / Zero is end /A044 JMP IOALOP / Return to Main Loop /A044 JMS OCHAR / Output char /A044 JMP BCMLP / Next Char /A044 ACOM, JMS ARGVAL / GET ADDR OF LIST DCA VALUE / SAVE IT ACMLP, JMS IOACDF / SET TO CALLER FIELD TAD I VALUE / INDIRECT THROUGH ADDR CDFMYF / SET BACK TO MY FIELD ISZ VALUE / INCR FOR NEXT TIME SNA / ZERO IS END JMP IOALOP / RETURN TO MAIN LOOP JMS O8CHK / Check if its start of 8 bit char /M044 JMP ACMLP / NEXT CHAR OSTRG, XX / THIS ROUTINE OUTPUTS ASCII CHARS STORED IN THE / WORDS FOLLOWING THE CALL. LAST ENTRY SHOULD BE NEGATIVE /D022 CLA / CLEAR THE AC BEFORE STARTING OSTRGL, TAD I OSTRG / PICK UP CHAR JMS OCHAR / OUTPUT CHAR TAD I OSTRG / GET CHARACTER BACK ISZ OSTRG / BUMP FOR NEXT SPA CLA / CHECK FOR END JMP I OSTRG / END - RETURN JMP OSTRGL / DO NEXT CHAR INAPS, TEXT /^P/ / CONTROL STRING TO POSITION THE CURSOR /M007 X=. / INDICATE FIRST FREE LOCATION ON PAGE / -------------------- PAGE / CVDBN - CONVERT ASCIZ DECIMAL STRING TO BINARY / / JMS CVDBN / ADDR OF ASCIZ STRING / ERROR RETURN - CLEAR AC / NORMAL RETURN - VALUE IN AC / CVDBN, XX CLA / Get rid of rubbish /a052 RDF / Read previous data field /a052 DCA CVDRTN / Save for return /a052 CLA CLL CMA CML / SET AC = -1 AND SET THE LINK TAD I CVDBN / GET ADDR OF STRING - LINK IS NOW CLEAR ISZ CVDBN JMS BHOOK / Blast in the rest of the code /a052 CVBLST / /a052 SKP / Normal return if no error /a052 ISZ CVDBN / Skip return on error /a052 TAD CVDRTN / Get the return field /a052 TAD CIDF0 / Make return instruction /a052 DCA CVDRTN / Save the instruction /a052 TAD T2 / Get the result of the routine /a052 CVDRTN, XX / Return CDI /a052 JMP I CVDBN / Return /a052 / The rest of the routine has been blasted out /a052 /d052 DCA X0 / SAVE AS STRING ADDRESS /d052 /d052 CVDBL1, DCA T2 / SAVE ACCUMULATED VALUE /d052 TAD I X0 / GET NEXT CHAR /d052 SNA /d052 JMP CVDBDN / ZERO - END OF STRING - DONE /d052 AND P177 / ASCII PART ONLY /d052 TAD (-72) / NUMBER? /d052 SMA /d052 JMP CVDBER / NO - ERROR /d052 TAD (12) / MAKE 0-9 /d052 SPA /d052 JMP CVDBER / ERROR /d052 /d052 DCA T3 / SAVE IN TEMP /d052 /d052 TAD T2 / GET ACCUMULATED VALUE /d052 CLL RAL / MULTIPLY TIMES 2 /d052 SZL SPA / CHECK FOR TOO LARGE A NUMBER /d052 JMP CVDBER / GO TO ERROR RETURN /d052 RAL / MULTIPLY TIMES 2 FOR EFFECTIVE TIMES 4 /d052 TAD T2 / ADD VALUE TO TOTAL FOR EFFECTIVE TIMES 5 /d052 SZL SPA / CHECK FOR TOO LARGE A NUMBER /d052 JMP CVDBER / GO TO ERROR RETURN /d052 RAL / MULTIPLY TIMES 2 FOR EFFECTIVE TIMES 10 /d052 TAD T3 / ADD NEXT DIGIT /d052 SNL / CHECK FOR TOO LARGE A NUMBER /d052 JMP CVDBL1 / GO SAVE RESULT AND DO NEXT CHAR /d052 CVDBER, CLA CLL / NOT VALID NUMBER, /d052 DCA T2 / RETURN WITH CLEAR AC & LINK /d052 SKP / GO TO ERROR RETURN /d052 /d052 CVDBDN, ISZ CVDBN / SKIP RETURN IS NORMAL /d052 JMS GETCID / GET THE CALLER'S DATA FIELD INST. /A023 /d052 DCA CVDBEX / SAVE TO RESTORE TO CALLER'S FIELD /d052 TAD T2 / GET VALUE - LINK SHOULD BE CLEAR /d052 CVDBEX, .-. / CIF-CDF /d052 JMP I CVDBN / AND RETURN TO CALLER /d052 PAGSWP, XX / Hole hook for Page Swap rtns /a051 MQL / Save the AC /a051 JMS GETCID / Get the data field of the call/a051 DCA PAGEXI / Save for exit /a051 ACL / Get the AC back /a051 PAGSW1, JMS BHOOK / Call the blaster /a051 PGSWPH / Get the Page Swap Hole /a051 JMP I PAGSWX / JUMP to PAGSW2 /a057 / CODE IN NEXT PAGE TO DO /a057 / A QURX AND RETURN TO PAGSW1 /A057 / ELSE IF SKIP RETURN THEN CONTINUE /A057 PAGEXI, XX / Location for CDI instruction /a051 JMP I PAGSWP / Ret. /a051 / This next piece of code is from the IOA main loop, moved here to add /a051 / a test for multinational character mode. If the MCS flag is set, this/a051 / code exits to immediatly output the MCS character /a051 UPCTST, TAD (-46) / Test for Ampersand (&) for uppercase /a051 SNA CLA / Is this ampersand? /a051 JMP UPCASE / Yes, set upper case mode /a051 TAD MCBIT / No, now test for multinational flag /a051 SZA CLA / Is this character multinational? /a051 JMP COPYCH / Yes, just output it /a051 JMP NOUPMC / No, test for all other types of char /a051 / COME HERE TO OUTPUT AN ESCAPE CHARACTER ESCOM, TAD XESC / PICK UP THE ESCAPE CHARACTER CODE /A022 JMP CCOM1 / OUTPUT CHARACTER /A022 / COME HERE TO OUTPUT CONTROL CHARACTER - A TO Z BECOME 1 TO 32, [=33, \=34, / ]=35, ^=36, _=37, SPACE TO "?" GO OUT AS THEY ARE. IE !C& PRINTS "&". CCOM, JMS NEXTCH / GET CONTROL CHARACTER FROM STRING /A022 CCOM1, JMS OCHAR / OUTPUT CHARACTER /A022 JMP IOALOP / RETURN TO MAIN LOOP /A022 / COME HERE TO DO THE RUBOUT FUNCTION RCOM, JMS IOARUB / CALL SUBROUTINE TO RUB OUT A CHARACTER JMP IOALOP / RETURN TO MAIN LOOP IOARUB, XX / SUBROUTINE TO PERFORM THE RUBOUT FUNCTION JMS OSTRG / OUTPUT BS SPACE BS 10 40 4010 JMP I IOARUB / ALL DONE, RETURN TO CALLER XCOM, JMS OSTRG / TELL TERMINAL TO SAVE CURSOR ATTRIBUTES XESC, 33 / ASCII CODE FOR "ESCAPE" 67 / ASCII CODE FOR DIGIT "7" / TELL TERMINAL TO RESET TO ABSOLUTE MODE 33 / ASCII CODE FOR "ESCAPE" 133 / ASCII CODE FOR CHARACTER "[" 77 / ASCII CODE FOR CHARACTER "?" 66 / ASCII CODE FOR DIGIT "6" 4154 / ASCII CODE FOR CHARACTER "l" JMP IOALOP / DONE, RETURN TO MAIN LOOP YCOM, JMS OSTRG / TELL TERMINAL TO RESTORE CURSOR ATTRIBUTES 33 / ASCII CODE FOR "ESCAPE" 4070 / ASCII CODE FOR DIGIT "8" JMP IOALOP / DONE, RETURN TO MAIN LOOP / GETCHR - GET A CHARACTER OUT OF A TEXT STRING / / JMS GETCHR / OFFSET ADDR (OR ZERO MEANING IN AC ALREADY) / ADDR OF STRING / RETURN, CHAR IN AC / GETEMP= CVDBN /M022 GETCHR, XX DCA GETEMP / SAVE THE AC TAD I GETCHR / GET THE FIRST ARG ISZ GETCHR SNA / CHECK FOR ZERO JMP USEAC / YES - USE THE VALUE IN THE AC DCA GETEMP / OTHERWISE SAVE FOR INDIRECTION TAD I GETEMP / GET OFFSET GOTBBP, CLL RAR / CLEAR LINK, AND PUT LOW BIT THERE TAD I GETCHR / GET ADDR OF STRING AND ADD ISZ GETCHR DCA GETEMP / THAT IS ADDR OF WORD WITH BYTE JMS IOACDF / SET CORRECT FIELD TAD I GETEMP / GET THE WORD CDFMYF SNL / IF LINK NOT SET BSW / THEN SWAP THE BYTES AND P77 / ONLY WANT THE LOW BYTE JMP I GETCHR / DONE USEAC, TAD GETEMP / GET IT OUT OF THE AC JMP GOTBBP / JOIN OTHER CODE / CHAR IO ROUTINES INCHR, XX JMP INCHR2 / (ALLOW A CLOCK TICK ON USER INPUT) INCHR1, CIF 0 JWAIT INCHR2, CIF 0 XLTIN JMP INCHR1 JMP I INCHR IOASOU, XX SNA JMP IOASO1 DCA OROUTP AC0001 TAD IOACDF+1 SKP OROUTP, .-. DCA IOACIF JMP I IOASOU IOASO1, TAD (NOP) JMS OROUTP OUTCHR, 0 SNA / CHECK FOR A ZERO VALUE JMP I OUTCHR / YES, DON'T SEND A NULL TO THE TERMINAL JMP OUTCH2 OUTCH1, CIF 0 JWAIT OUTCH2, CIF 0 TTYOU JMP OUTCH1 JMP I OUTCHR OCHAR, XX IOACIF, .-. / PATCHED TO SOMETHING JMS I OROUTP / CALL OUTPUT ROUTINE CLA JMP I OCHAR / RETURN X=. / INDICATE FIRST FREE LOCATION ON PAGE /-------------------- PAGE /*************************************************************************** /**** DISPLAY DATE AND TIME AND PRINTER STATUS **** /*************************************************************************** / CROSS FIELD CALLABLE ROUTINE TO DISPLAY THE DATE & TIME & PRINTER STATUS / THE DISPLAY WILL BE UPDATED ONLY IF THE VALUES CHANGE. TIMDSP, XX JMS GETCID / GET THE CALLER'S DATA FIELD INST. /A023 DCA TIMXIT / SAVE THE CIF-CDF INSTRUCTION /CIFPRT..OVERLAYED IN CX GRAPHICS/A025 /....MODE... PRTFLD NOT LOADED /....REFERENCED BY TIMDSP +2.... TIMDS3, /A025 CIFPRT / CHANGE TO PRINTER FIELD JMS I (FLABUZ) / CHECK IF PRINTER HAS AN ERROR CLA / Zero before.... /a051 JMS PRSCST / Check the PRint SCreen STatus /a051 JMS TIME / HAS THE TIME CHANGED? JMP TIMXIT / NO, THEN GO RETURN TO CALLER JMS I IOACAL / USE IOA TO OUTPUT THE DATE AND TIME OUTCHR / ROUTINE TO USE FOR OUTPUT INAINS / ADDRESS OF CONTROL IOA STRING 72 / CURSOR POSITION TO USE FOR THE DISPLAY DATEST / ADDRESS OF THE TIME STRING TIMXIT, XX / CIF-CDF INSTRUCTION TO USER'S FIELD JMP I TIMDSP / RETURN TO CALLER / TIME - SET THE TIMES ASCIZ STRING TO THE CURRENT TIME / / CDFMYF / JMS TIME / RETURN IF STRING UNCHANGED (TIME THE SAME) / RETURN IF STRING CHANGED (TIME CHANGES EVERY SECOND) / TIME, XX JMS GETCID / GET THE CALLER'S DATA FIELD INST. /A023 DCA TIMEX / SAVE FOR RETURN TO CALLER CDFSYS TAD I (CLOCK+2) / TEST FOR TIME CHANGE CIA TAD TIMESE SNA CLA JMP TIMEX TAD (CLOCK+1) DCA X0 / GET NEW VALUES TAD I X0 DCA TIMESE TAD I X0 DCA TIMEMN TAD I X0 DCA TIMEHR TAD I X0 DCA TIMEDA TAD I X0 DCA TIMEMO TAD I X0 DCA TIMEYR TAD I (DAWEEK) / GET DAY OF WEEK, TOO CDFMYF CLL RAL TAD (TIMEWL) DCA TIMEWK TAD (DATEST) DCA TIMES1 / FIX THE ORDER OF THE NUMBERS OUTPUT BY THE TIME ROUTINE TAD MNFMAT+MUBUF / PICK UP THE VALUE OF THE FORMAT WORD /A024 AND (3) / MASK OFF DATE BITS /A024 TAD TIMETB / CONSTRUCT JUMP INSTRUCTION TO FUNCTION/A024 DCA TIMEJP / STORE INLINE FOR TRANSFER /A024 TIMEJP, XX / JUMP INSTRUCTION TO FUNCTION /A024 TIMETB, JMP .+1 / INSTRUCTION TO JUMP INTO TABLE /A024 JMP TIMEIT / 0 = UNINITIALIAZED, GO DO DISPLAY /A024 JMP TIMEIT / 1 = D-M-Y, ALL DONE, GO DO DISPLAY /A024 JMP TIMESW / 2 = M-D-Y, GO SWAP DAY WITH MONTH /A024 TAD TIMEDA / 3 = Y-M-D, SWAP DAY WITH YEAR /A024 DCA TIMEJP / SAVE VALUE FOR LATER /A024 TAD TIMEYR / PICK UP YEAR VALUE /A024 DCA TIMEDA / STORE IN DAY LOCATION /A024 TAD TIMEJP / PICK UP DAY VALUE /A024 DCA TIMEYR / STORE IN YEAR LOCATION /A024 JMP TIMEIT / ALL DONE, GO DO DISPLAY /A024 TIMESW, TAD TIMEDA / PICK UP THE DAY VALUE /A024 DCA TIMEJP / SAVE VALUE FOR LATER /A024 TAD TIMEMO / PICK UP MONTH VALUE /A024 DCA TIMEDA / STORE IN DAY LOCATION /A024 TAD TIMEJP / PICK UP DAY VALUE /A024 DCA TIMEMO / STORE IN MONTH LOCATION /A024 / ALL DONE, GO DO DISPLAY /A024 TIMEIT, JMS I IOACAL / CALL THE SYSTEM OUTPUT ROUTINE TIMEPT / USE A SUBROUTINE TO BUILD A STRING DATEIO / ADDRESS OF CONTROL STRING / THE FOLLOWING THREE VARIABLE LOCATIONS ARE REARRANGED BY THE ROUTINE ABOVE TIMEDA, 0 / INITIAL VALUE FOR DAY /A024 MNDSEP+MUBUF / ADDRESS OF DATE SEPARATOR /A024 TIMEMO, 0 / INITIAL VALUE FOR MONTH /A024 MNDSEP+MUBUF / ADDRESS OF DATE SEPARATOR /A024 TIMEYR, 0 / INITIAL VALUE FOR YEAR /A024 TIMEWK, 0 TIMEHR, 0 TIMEMN, 0 TIMESE, 0 ISZ TIME / SKIP RETURN TIMEX, HLT / CIDF GOES HERE JMP I TIME / RETURN TO CALLER TIMEPT, XX DCA I TIMES1 / SAVE IN STRING ISZ TIMES1 JMP I TIMEPT / RETURN TIMES1, 0 / In the following text, ^4 was added to the end of the string. This / modification resets DPREC to 0, thus allowing a 3 digit cursor position / to be output if the DATE/TIME stamp is used in wide screen mode. DATEIO, TEXT '^D^S^D^S^D &^S ^D:^2D:^2D ^4' TIMEWL, TEXT "..." IFDEF ENGLSH < TEXT "SUN" > IFDEF ITALIAN < TEXT "DOM" > IFDEF V30SWE < TEXT "S\V" > IFDEF V30NOR < TEXT "S\X" > IFDEF DUTCH < TEXT "ZON" > IFDEF SPANISH < TEXT "DOM" > IFDEF ENGLSH < TEXT "MON" > IFDEF ITALIAN < TEXT "LUN" > IFDEF V30SWE < TEXT "M\E" > IFDEF V30NOR < TEXT "MAN" > IFDEF SPANISH < TEXT "LUN" > IFDEF DUTCH < TEXT "MAA" > IFDEF ENGLSH < TEXT "TUE" > IFDEF ITALIAN < TEXT "MAR" > IFDEF V30SWE < TEXT "TI" > IFDEF V30NOR < TEXT "TIR" > IFDEF DUTCH < TEXT "DIN" > IFDEF SPANISH < TEXT "MAR" > IFDEF ENGLSH < TEXT "WED" > IFDEF ITALIAN < TEXT "MER" > IFDEF V30SWE < TEXT "ON" > IFDEF V30NOR < TEXT "ONS" > IFDEF DUTCH < TEXT "WOE" > IFDEF SPANISH < TEXT "MIE" > IFDEF ENGLSH < TEXT "THU" > IFDEF ITALIAN < TEXT "GIO" > IFDEF V30SWE < TEXT "TO" > IFDEF V30NOR < TEXT "TOR" > IFDEF DUTCH < TEXT "DON" > IFDEF SPANISH < TEXT "JUE" > IFDEF ENGLSH < TEXT "FRI" > IFDEF ITALIAN < TEXT "VEN" > IFDEF V30SWE < TEXT "FR" > IFDEF V30NOR < TEXT "FRE" > IFDEF DUTCH < TEXT "VRY" > IFDEF SPANISH < TEXT "VIE" > IFDEF ENGLSH < TEXT "SAT" > IFDEF ITALIAN < TEXT "SAB" > IFDEF V30SWE < TEXT "L\V" > IFDEF V30NOR < TEXT "L\X" > IFDEF DUTCH < TEXT "ZAT" > IFDEF SPANISH < TEXT "SAB" > X=. / INDICATE FIRST FREE LOCATION ON PAGE /-------------------- PAGE / The page swap routines have been blasted out to create space this edit/a051 /*************************************************************************** /**** PAGE SWAPING ROUTINE **** /*************************************************************************** / THIS ROUTINE WILL SELECTIVLY SAVE AND LOAD MEMORY LOCATIONS FROM SWAP AREA / IN FIELD TWO ON DISK DRIVE ZERO. THE FUNCTION PERFORMED DEPENDS UPON THE / VALUE CONTAINED IN THE AC. UPON ENTRY IF: / AC = 0 THEN SAVE MEMORY LOCATIONS IN THE DISK SWAP SAVE AREA / LOAD MEMORY LOCATIONS WITH THE MENU INTERPRETER / AC = +N THEN SAVE MEMORY LOCATIONS IN THE DISK SWAP SAVE AREA / LOAD MEMORY LOCATIONS WITH DISK BLOCK NUMBER (N) / AC = -1 THEN LOAD MEMORY LOCATIONS FROM DISK SWAP SAVE AREA / AC = -N THEN LOAD MEMORY LOCATIONS FROM DISK BLOCK NUMBER (N) /d053 PAGSWP, XX / ENTRY POINT FOR PAGE SWAPING ROUTINE /d053 DCA PAGDSK / SAVE THE CONTENTS OF THE ACCUMULATOR /d053 JMS GETCID / GET THE CALLER'S DATA FIELD INST. /A023 /d053 DCA PAGEXI / SAVE SO THAT WE CAN RETURN WHEN DONE /d053 /d053 TAD PAGDSK / RESTORE THE CONTENTS OF THE ACCUMULATOR /d053 SMA / CHECK FOR A NEGARIVE NUMBER INPUT /d053 JMP PGPLUS / NO, IT WAS POSITIVE, GO SAVE THE AREA /d053 /d053 CMA / YES, IT WAS NEGATIVE, MAKE IT POSITIVE /d053 SZA / SKIP IF VALUE WAS A MINUS ONE /d053 IAC / COMPLETE THE NEGATION PROCESS /d053 SNA / CHECK FOR A DISK BLOCK NUMBER IN AC /d053 TAD PGDLSW / NOTHING, SO PICK UP SAVE AREA NUMBER /d053 DCA PAGBLK / SAVE THE STARTING DISK BLOCK NUMBER /d053 JMP PAGRED / SKIP SAVE OPERATION, JUST DO READ OPERATION /d053 /d053 PGPLUS, SNA / CHECK FOR A DISK BLOCK NUMBER IN AC /d053 TAD (DLFD3) / NOTHING, SO PICK UP MENU INTERPRETER NUMBER /d053 DCA PAGBLK / SAVE THE STARTING DISK BLOCK NUMBER /d053 /D037 DCA MUBUF+MNBLK / CLEAR MENU BLOCK IN MEMORY INDICATOR /d053 /d053 JMS PAGDSK / WRITE OUT THE MEMORY SWAP AREA /d053 RXEWT / DISKETTE WRITE FUNCTION CODE /d053 PGDLSW, DLSWAP / BLOCK NUMBER TO START WRITTING FROM /d053 /d053 PAGRED, JMS PAGDSK / GO PERFORM DISK READ FUNCTION /d053 RXERD / DISKETTE READ FUNCTION CODE /d053 PAGBLK, 0 / BLOCK NUMBER TO START READING FROM /d053 PAGEXI, 0 / LOCATION FOR CIF-CDF RETURN FIELD COMAND /d053 JMP I PAGSWP / RETURN TO CALLER / Page swap routines balsted out to make room this edit /a053 /*************************************************************************** /**** PAGE SWAPING DISK I/O ROUTINE **** /*************************************************************************** / THIS ROUTINE WILL PERFORM THE READ/WRITE FUNCTION FOR THE SWAP AREA / UPON ENTRY, THE AC MUST BE CLEAR. THE CALL IS MADE AS FOLLOWS: / / JMS PAGDSK / ROUTINE TO DO I/O TO THE DISK / FUNCTION CODE / READ OR WRITE RX FUNCTION CODE / DISK BLOCK / BLOCK NUMBER TO START READING OR WRITTING / NORMAL RETURN / RETURN POINT, DISK ERRORS ARE NOT HANDLED /d053 PAGDSK, XX / ENTRY POINT FOR PAGE SWAPING ROUTINE /d053 TAD I PAGDSK / PICK UP THE FUNCTION CODE TO BE USED /d053 DCA QUQBLK+RXQFNC / STORE FUNCTION CODE IN QUEUE BLOCK /d053 /d053 ISZ PAGDSK / INCREMENT POINTER TO NEXT ITEM IN LIST /d053 TAD I PAGDSK / PICK UP STARTING DISK BLOCK NUMBER /d053 DCA QUQBLK+RXQBLK / STORE BLOCK NUMBER IN QUEUE BLOCK /d053 /d053 ISZ PAGDSK / INCREMENT POINTER TO RETURN ADDRESS /d053 DCA QUQBLK+RXQDRV / SELECT THE SYSTEM DRIVE, NUMBER ZERO /d053 TAD (-DSSWAP) / NEGATIVE OF NUMBER OF BLOCKS TO DO /M016 /d053 DCA X1 / STORE IN COUNTER REGISTER /d053 TAD GETMYF / PICK UP THE INSTRUCTION "CDFMYF" /d053 DCA QUQBLK+RXQBFD / STORE CHANGE FIELD INSTRUCTION IN QUEUE BLOCK /d053 /d053 TAD (SWPBEG) / PICK UP STARTING MEMORY ADDRESS /M016 /d053 DCA QUQBLK+RXQBAD / STORE MEMORY ADDRESS IN QUEUE BLOCK /d053 /d053 PAGLOP, JMS QURX / GO DO A DISK BLOCK TRANSFER /d053 CLA / IGNORE ANY ERROR INDICATION /d053 /d053 TAD (400) / OFFSET TO NEXT MEMORY BLOCK ADDRESS /d053 TAD QUQBLK+RXQBAD / COMBINE WITH CURRENT MENORY ADDRESS /d053 DCA QUQBLK+RXQBAD / STORE MEMORY ADDRESS IN QUEUE BLOCK /d053 /d053 ISZ QUQBLK+RXQBLK / INCREMENT THE QUEUE BLOCK DISK BLOCK COUNTER /d053 ISZ X1 / INCREMENT THE COUNTER, CHECK FOR DONE /d053 JMP PAGLOP / NOT DONE, GO DO IT AGAIN /d053 JMP I PAGDSK / ALL DONE, RETURN TO CALLER WITH AC=0 /a042 IOA command table moved here to make room for the pink fuzzy bits /a042 IOACLS, -64;P4COM / !4 OR ^4 / 4 DIGIT DECIMAL OUTPUT 64-63;P3COM / !3 OR ^3 / 3 DIGIT DECIMAL OUTPUT 63-62;P2COM / !2 OR ^2 / 2 DIGIT DECIMAL OUTPUT 62-46;UCOM / !& OR ^& / SET UPPER CASE UNTIL NEXT NON ALPHA CHAR 46-33;ESCOM / ![ OR ^[ / OUTPUT AN ESCAPE CHARACTER /A022 33-32 / !Z OR ^Z / OUTPUT ASCII CHARACTER IN VT100 ALTERNATE ZCOM / ROM (USE S.O., CHAR,S.I. SEQUENCE) 32-31;YCOM / !Y OR ^Y / RESTORE CURSOR POSITION AND ATTRIBUTES 31-30;XCOM / !X OR ^X / SAVE CURSOR POSITION AND ATTRIBURES 30-23 / !S OR ^S / STRING - VALUE IS ADDRESS OF STRING IN SCOM / THE FORMAT OF THE TEXT PSEUDO-OP 23-22;RCOM / !R OR ^R / DO RUBOUT FUNCTION - NO ARG 22-20 / !P OR ^P / POSITION CURSOR - LEFT BYTE IS LINE #, PCOM / RIGHT IS COL #, MINUS VALUE MEANS DO / ERASE TO EOL AFTER POSITIONING. / VALUE OF -1 MEANS JUST DO !L 20-14;LCOM / !L OR ^L / ERASE TO EOL - NO ARG 14-5;ECOM / !E OR ^E / ERASE TO EOS - NO ARG 5-4;DCOM / !D OR ^D / DECIMAL CONVERSION 4-3;CCOM / !C OR ^C / CONTROL CHARACTER OUTPUT /A022 3-2;BCOM / !B or ^B / ASCII LIST - DEAD THINGS LEFT IN /a044 2-1 / !A OR ^A / ASCII LIST - VALUE IS ADDRESS OF LIST ACOM / OF ASCII IN WORDS, LAST WORD ZERO 1;DONE / END OF LIST /*************************************************************************** /**** SUBSTRING (^S OR !S) **** /*************************************************************************** / SHIFT= PAGSWP / SHIFT FLAG, ZERO MEANS CONVERT TO UPPER CASE / IOAUPS= PAGDSK / NON ZERO MEANS UPPER CASE UNTIL NON ALPHA / UNPACK 6 BIT STRINGS AND WRITE THEM OUT, INTERPRETS & AS A SHIFT CHARACTER SCOM, JMS ARGVAL / GET ADDRESS OF STRING DCA SCMBP / PUT INTO CALL DCA I SCMVAL / INITIALIZE OFFSET TO ZERO SCMC41, DCA SCMF41 / CLEAR FLAG INDICATING EXCLAMATION POINT FOUND SCMLP, JMS GETCHR / GET NEXT CHAR SCMVAL, VALUE SCMBP, 0 ISZ I SCMVAL / INCREMENT OFFSET DCA ARGVAL / SAVE THE CHARACTER TAD MCBIT / Check the MCS flag /a050 SZA CLA / Is this an MCS character /a050 JMP SCMN34 / Yes, print all such characters, unless/a050 / ampersand found /a050 ISZ SCMF41 / CHECK THE EXCLAMATION POINT FLAG JMP SCMT41 / NONE FOUND YET, GO CHECK IF THIS IS ONE TAD ARGVAL / EXCLAMATION POINT HAS PREVIOUSLY BEEN FOUND TAD (-33) / MAYBE THIS CHARACTER MAKES UP THE "![" PAIR SNA / IS THERE A MATCH ? JMP SCMESC / YES, GO PRINT AN ESCAPE CHARACTER TAD (33-46) / MAYBE THIS CHARACTER MAKES UP THE "!&" PAIR SNA CLA / IS THERE A MATCH ? JMP SCMUPS / YES, GO SET UPPER CASE MODE TAD (41) / NO, PRINT PREVIOUS EXCLAMATION POINT JMS SIXOUT / GO AND PRINT THE CHARACTER SCMT41, TAD ARGVAL / EXCLAMATION POINT WAS NOT PREVIOUSLY FOUND TAD (-41) / CHECK TO SEE IF MAYBE THIS IS ONE SZA CLA / IS IT AN EXCLAMATION POINT ? JMP SCMN41 / NO, GO CONTINUE WITH STRING AC7777 / YES, EXCLAMATION POINT WAS FOUND, SET FLAG JMP SCMC41 / GO AND SET THE EXCLAMATION POINT FLAG SCMN41, TAD ARGVAL / IS NOT CONTROL, RESTORE ORIGINAL VALUE/m053 SNA / TEST FOR ZERO STRING TERMINATOR /m053 JMP IOALOP / ZERO TERMINATOR FOUND, RETURN TO MAIN LOOP/m053 TAD (-34) / Test for backslash (\) /m053 SZA CLA / Is this a multinational introducer? /a050 JMP SCMN34 / No, print character /m053 TAD (200) / Yes, set the MCS flag /a050 DCA MCBIT / ... /a050 JMP SCMLP / Get the next character /a050 SCMN34, TAD ARGVAL / Get the character again /a053 TAD (-46) / CHECK FOR AMPERSAND (&) /m053 SZA CLA / SKIP IF IT IS AN AMPERSAND (&) /m053 JMP SCMN46 / AMPERSAND IS NOT WITHIN A SUBSTRING DCA SHIFT / CLEARING THIS LOCATION MAKES UPPERCASE JMP SCMLP / GO GET NEXT CHARACTER SCMN46, TAD ARGVAL / Get the character back again /a053 JMS SIXOUT / CONVERT TO ASCII, SET SHIFT TO 4000 FOR L.C. JMP SCMLP / DO NEXT CHARACTER SCMUPS, ISZ IOAUPS / SET THE UPPER CASE SWITCH FLAG JMP SCMC41 / GO AND CLEAR THE EXCLAMATION POINT FLAG SCMESC, TAD ARGVAL / PICK UP THE LEFT SQUARE BRACKET CHARACTER JMS OCHAR / PRINT IT AS AN ESCAPE CHARACTER (33) JMP SCMC41 / GO AND CLEAR THE EXCLAMATION POINT FLAG / THIS ROUTINE CONVERTS SIXBIT IN THE AC TO ASCII AND OUTPUTS IT TO THE SCREEN SIXOUT, XX / OUTPUT SIXBIT CHARACTER TO SCREEN DCA OCHAR / SAVE THE CURRENT CHARACTER TAD MCBIT / Check if an 8 bit char is to be output/a051 SZA CLA / Is this an 8 bit char? /a051 TAD (33-40) / Yes, bias the next test so letters pass/a051 TAD OCHAR / GET THE CHARACTER BACK AGAIN TAD (-33) / CHECK FOR A CHARACTER GREATER THAN " "/m051 SNA / IF = 33 THEN IT'S A [, GO PRINT IT JMP SIXOT1 / MUST CLEAR THE SHIFT VALUE SMA CLA / IF ALPHA CHARACTER, THEN SKIP AROUND DCA IOAUPS / NOT ALPHA, THEN ZERO THE UP-SWITCH TAD IOAUPS / GET THE VALUE OF THE UP-SWITCH SZA CLA / IF NOT SET, THEN SKIP AROUND SIXOT1, DCA SHIFT / IT'S SET, CLEAR THE SHIFT FLAG JMS SIXXOU / Call the output translation routine /a051 JMP I SIXOUT / RETURN TO THE CALLER SCMF41, 0 / FLAG MEANING EXCLAMATION POINT WAS FOUND MCBIT, 0 / Word to shift next char to 8 bit /a051 /**************************************************************************** / some code moved here from PAGSWP due to lack of space /a057 /**************************************************************************** PAGSW2, JMS QURX / go do a disk block transfer /a057 CLA / IGNORE ANY ERROR INDICATION /A057 AC7777 / SET FLAG TO INDICATE QURX DONE/A057 DCA PAGQRX / THIS FLAG /A057 JMP PAGSW1 / GO BACK TO THE BLAST /A057 PAGQRX, 0 / flag QURX done /a057 X=. / INDICATE FIRST FREE LOCATION ON PAGE /-------------------- PAGE /*************************************************************************** /**** ROUTINE TO GET CHARACTER, UPDATE TIME & PRINTER STATUS **** /**** **** /**** NOTE: THIS ROUTINE MUST BE HERE BECAUSE OF WPF1 DEFINITION **** /*************************************************************************** INAIN, XX / ROUTINE TO GET A CHARACTER & DISPLAY THE TIME JMS GETCID / GET THE CALLER'S DATA FIELD INST. /A023 DCA INAINX / STORE SO THAT WE CAN RETURN TO THE CALLER JMP INAIN2 / SKIP AROUND THE JWAIT INSTRUCTION INAIN1, CIFSYS / CHANGE TO SYSTEM FIELD JWAIT / LET OTHERS RUN WHILE WAITING FOR INPUT INAIN2, JMS TIMDSP / CHECK FOR PRINTER ERROR AND TIME CHANGE CIFSYS / CHANGE TO SYSTEM FIELD XLTIN / CHECK FOR USER INPUT FROM THE KEYBOARD JMP INAIN1 / NONE, GO LET THE OTHER JOBS RUN FOR A WHILE INAINX, XX / YES, GOT A CHARACTER, CHANGE TO USER'S FIELD JMP I INAIN / RETURN TO CALLER WITH CHARACTER IN AC /*************************************************************************** /**** INPUT ASCII STRING ROUTINE **** /*************************************************************************** / INA - INPUT AN ASCII STRING / SET AC=0 FOR NORMAL USE (DISPLAYS TIME) / SET AC POS (=N) TO INDICATE BUFFER ALREADY HAS N CHARS / / SET AC=-1 TO AVOID TIME AND CURSOR POSITIONING / SET AC NEG (=-N) TO INDICATE BUFFER ALREADY HAS N CHARS / AND AVOID TIME AND CURSOR POSITIONING / JMS INA / ADDR OF BUFFER / ERROR RETURN - AC=0 MEANS OVERFLOW, ^=0 IS CHARACTER / NORMAL RETURN / / ON RETURN, MQ HAS NUMBER OF CHARS IN BUFFER / / BUFFER, -SIZE / ZBLOCK SIZE+1 / / THE STRING WILL END WITH A ZERO WORD INA, XX DCA INAFLG / SAVE MODE OR INITIAL COUNT OF NUMBER READ TAD I INA / GET FIRST ARGUMENT ISZ INA / BUMP RETURN ADDRESS POINTER DCA INABAD / SAVE AS BUFFER ADDRESS JMS GETCID / GET THE CALLER'S DATA FIELD INST. /A023 DCA INAEXI / STORE IN-LINE SO WE CAN RETURN AC7776 / SET UP FOR A DECREMENT OF TWO /A023 TAD INAEXI / COMBINE WITH CID INSTRUCTION /A023 DCA INACDF / STORE SO WE CAN GET TO USER'S DATA FIELD TAD INAFLG / TEST OPTION SZA / CHECK FOR ZERO POSITION ON LINE /A036 JMP INASET / NO, GO SET UP START COLUMN /A036 JMS I IOACAL / YES, REPOSITION CURSOR TO BOTTOM LINE /A036 INAOUT, OUTCHR / OUTPUT ROUTINE TO USE /A036 INAPS / ADDRESS OF THE CONTROL STRING /A036 2700 / ADDRESS OF BOTTOM LINE FOR IOA /A036 INASET, SPA / CHECK FOR THE MINUS (NO TIME DISPLAY) CASE CMA / YES, IT WAS MINUS, MAKE IT POSITIVE /M035 INACLR, DCA INANUM / SET UP START COLUMN /M035 INALOP, TAD INAFLG / GET MODE FLAG WORD SPA CLA / CHECK FOR TYPE OF TIME DISPLAY JMP INALP1 / MINUS MEANS NO TIME JMS INAIN / GET A CHARACTER, SHOWING THE TIME SKP / SKIP OVER THE OTHER TYPE OF CALL INALP1, JMS INCHR / GET A CHARACTER, NOT SHOWING THE TIME DCA INACHR / SAVE THE CHARACTER JUST ENTERED BY USER TAD INAFLG / GET MODE FLAG WORD SZA CLA / CHECK FOR NO CURSOR MOVEMENT /M035 JMP INALP2 / NONE, DO NOT ERASE BOTTOM LINE TAD INANUM / GET THE NUMBER OF CHARACTERS ENTERED SO FAR SZA CLA / CHECK TO SEE IF ANY HAVE BEEN ENTERED YET JMP INALP2 / YES, THEN DO NOT ERASE THE BOTTOM LINE JMS I IOACAL / CALL IOA TO REPOSITION THE CURSOR /A007 OUTCHR / OUTPUT ROUTINE TO USE /A007 INAPS / ADDRESS OF THE CONTROL STRING /A007 -2700 / ADDRESS OF BOTTOM LINE FOR IOA INALP2, TAD INACHR / PICK UP THE CHARACTER JUST ENTERED BY USER SMA / IF MINUS, THEN IT'S A SPECIAL CHARACTER JMP INACHK / NORMAL CHARACTER - GO CHECK FOR OVERFLOW TAD (-EDPWFL) / CHECK FOR A POWER FAIL CODE SNA / SKIP IF NO MATCH JMP INARO / IT'S A POWER FAIL - TREAT AS RUBOUT TAD (EDPWFL-EDRBCH) / CHECK FOR A RUBOUT CHARACTER CODE SNA / SKIP IF NO MATCH JMP INARO / IT'S A RUBOUT, GO DO IT TAD (EDRBCH-EDRBWD) / CHECK FOR A RUB WORD CHARACTER CODE SNA / SKIP IF NO MATCH JMP INARW / IT'S A RUB WORD, GO DO IT TAD (EDRBWD-EDNWLN) / CHECK FOR A CARRIAGE RETURN CODE SNA CLA / SKIP IF NO MATCH JMP INACR / IT'S A CARRIAGE RETURN, GO BACK TO CALLER JMP INASPC / ERROR - UNKNOWN SPECIAL, GO BACK TO CALLER INACHK, /d044 JMS INAST1 / CHANGE TO USER FIELD, SET RESULT POINTER /d044 AC0001 / SET UP TO INCREMENT THE COUNT /d044 TAD INANUM / PICK UP THE CHARACTER COUNT /d044 TAD I INABAD / COMPARE WITH STRING LENGTH IN USER FIELD /d044 SMA CLA / TEST FOR OVERFLOW /d044 JMP INAOVR / JUMP IF OVERFLOW /d044 TAD INACHR / GET CHARACTER ENTERED BY THE USER /d044 DCA I T1 / SAVE IN USER'S BUFFER AREA /d044 CDFMYF / SWITCH BACK TO MY FIELD JMS BHOOK / Call Blaster /A044 INCHKR / IN Check routine /A044 JMP INAOVR / Overflow get out /A044 TAD INACHR / GET CHARACTER ENTERED BY THE USER JMS I INAOUT / ECHO IT TO THE SCREEN /M036 ISZ INANUM / INCREMENT THE CHARACTER COUNTER JMP INALOP / GO GET NEXT CHARACTER INARO, JMS INAROR / CALL RUBOUT ROUTINE ONCE JMP INALOP / GO GET NEXT CHARACTER INARW, JMS INAROR / DO A RUBOUT TAD INTCHR / get char back /A044 TAD (-40) / SUBTRACT VALUE FOR A SPACE SZA CLA / SITTING ON A BLANK? /C039 JMP INARW / NO - DO RUBOUT AGAIN JMS INAROR / Got a space so rub it out /A058 JMP INALOP / YES - DONE, GO GET NEXT CHARACTER INACR, ISZ INA / NORMAL SKIP RETURN INAOVR, DCA INACHR / ZERO CHARACTER FOR CLEAR AC RETURN TO CALLER INASPC, JMS INAST1 / CHANGE TO USER FIELD, SET RESULT POINTER DCA I T1 / CLEAR LAST LOCATION IN USER'S BUFFER AREA TAD INANUM / GET THE COUNT OF CHARACTERS ENTERED MQL / SAVE NUMBER OF CHARACTERS INPUT BY USER TAD INACHR / GET CHARACTER TO SHOW INAEXI, 0 / RETURN CIF-CDF JMP I INA / RETURN TO CALLER INAROR, XX / ROUTINE TO RUBOUT A CHARACTER TAD INANUM / GET THE COUNT OF CHARACTERS ENTERED SO FAR SNA / CHECK FOR A ZERO COUNT /M035 JMP INACLR / NONE, SO JUST IGNORE THE RUBOUT FUNCTION TAD MINCHSZ / DECREMENT THE COUNT /m044 /M035 DCA INANUM / STORE THE DECREMENTED COUNT OF CHARACTERS JMS IOARUB / USE IOA ROUTINE TO DO THE RUBOUT JMS INAST1 / CHANGE TO USER FIELD, SET RESULT POINTER AC7777 / MOVE POINTER BACK ONE /A058 TAD T1 / GET CHAR POINTER /A058 DCA T1 / AND RESET /A058 TAD I T1 / PICK UP PREVIOUS CHARACTER FROM BUFFER DCA INTCHR / Save it /A044 TAD INTCHR / Get it back /A044 CDFMYF / SWITCH BACK TO MY FIELD JMS BHOOK / Call Blaster /A044 INCSZR / To find character size /A044 JMP I INAROR / RETURN TO CALLER INAST1, XX / ROUTINE TO SET THE BUFFER POINTER INACDF, XX / CDF INSTRUCTION TO CHANGE TO USER FIELD AC0001 / SET THE ACCUMULATOR TO A VALUE OF ONE TAD INANUM / PICK UP THE CHARACTER COUNT TAD INABAD / ADD TO THE USER'S BUFFER ADDRESS DCA T1 / STORE POINTER TO CHARACTER IN BUFFER JMP I INAST1 / RETURN TO CALLER INACHR, 0 / LOCATION TO SAVE CHARACTER ENTERED BY USER INABAD, 0 / START OF USER'S BUFFER, POINTS TO LENGTH INANUM, 0 / COUNT OF CHARACTERS ENTERED BY THE USER INAFLG, 0 / MODE WORD USED FOR TIME DISPLAY CHOICE INCHSZ, 0 / Character size 1-7 bit , 5-8 bit /A044 MINCHSZ,0 / -Ve char size /A044 INTCHR, 0 / temp /A044 X=. / INDICATE FIRST FREE LOCATION ON PAGE /-------------------- PAGE /******* PAGE LEFT FOR HOOK TO PRINTSCREEN ************************ PSFLAG, 0 / FLAG =0 =4nnn PSPRVF, 0 / Previous value of the status flag /a051 PSSTRT, CDFPRT / The printer status is in the ptr field/a051 TAD I PSTUTS / Get the printer status before the loop/a051 PSLOOP, ISZ PSCNT / Wait for count to reach zero /a041 JMP PSLOOP / /a041 TAD I PSTUTS / Check the printer status again /a041 CDIMNU / Prevent interupts until both /a051 / Non-PRINT printer busy flag and Print /a051 / Screen status flag set, or error found/a051 SZA / Is PRINT job dormant? /a041 JMP PSEXT2 / No, abort job /m060 /a041 TAD I PSMNPU / Check the non-PRINT printer busy flag /a051/M055 SPA / Is it set? /a051 JMP PSEXT2 / Yes, abort job as CX must be using it /a051/M055 TAD (4000) / Set the flag as I'm now using it /a051 DCA I PSMNPU / Restore the flag /a051/M055 AC4000 / Set the print screen flag /a041 DCA PSFLAG / print screen in progress /a041 JMS BHOOK / Blast in the print screen routine /a041 PRTSCN / as a table (that is non-executing). /a041 CIFPRT / Change to print screen field /a046 JMS PRTSHL / The routine resides in a buffer and /a046 / therefore does not need to be replaced/a046 PSEXIT, AC3777 / Get a mask into the accumulator /a051 AND I PSMNPU / Zero the non-print printer busy flag /a051/M055 DCA I PSMNPU / And re-save it /a051/M055 PSEXT2, CLA / Zero Ac in case we jumped here directly/A055 DCA PSFLAG / Clear the status flag /a041/M055 CIFSYS / go back to sys JEXIT / JMP PSSTRT / go restart PSCNT, ZBLOCK 1 / Counter for delay loop in print screen/a041 PSTUTS, PRSTTS / Pointer to printer status byte in PRT /a041 PSMNPU, MUBUF+MNPULD / Address of the Non-PRINT printer busy /a051 / flag /a051 /**************************************************************************** / PRSCST PRint SCreen STatus reporting routine. This routine is /a051 / called every time FLABUZ is called by the routine TIMDSP/a051 / It checks if the status of the Print Screen routine has /a051 / changed, and if it has makes the appropriate report to /a051 / the user using the top status line. /a051 /**************************************************************************** PRSCST, XX / PRint SCreen STatus routine /a051 TAD PSFLAG / Get the print screen status word /a051 TAD PSPRVF / Compare it with the (-ve) previous state/a051 SNA / Are they the same? /a051 JMP I PRSCST / Yes, therefore no change so return /a051 JMS BHOOK / Blast in and run the Print screen /a051 PSCRST / status routine /a051 JMP I PRSCST / Return /a051 / MCHAR Routine used by IOA to set multinational character shift/a051 / word for SIXOUT /a051 MCHAR, TAD (200) / Store a word with the eigth bit set /a051 DCA MCBIT / in the mc shift word used in SIXOUT /a051 TAD SHIFT / Preserve the status of the shift word /a051 JMP UPCASE / when returning to the main routine /a051 / SIXXOU SIXOUT output translation routine. Moved here for space/a051 / reasons in this edit /a051 SIXXOU, XX / Begin SIXOUT output translation routine/a051 TAD OCHAR / GET THE CHARACTER BACK AGAIN TAD MCBIT / Add in the bit set if "\" preceeded char/a051 BSW / SWAP CHARACTER TO HIGH ORDER BYTE SPA / CHECK FOR ALPHA CHARACTER JMP .+3 / IT'S NOT, SO SKIP AROUND IAC / SET ASCII ALPHA BIT TAD SHIFT / NON ZERO SHIFT VALUE CONVERTS TO LOWER CASE BSW / RESET CHARACTER TO PROPPER ARRANGMENT JMS OCHAR / OUTPUT CHARACTER TO THE SCREEN AC4000 / RESET THE SHIFT FLAG TO LOWER CASE DCA SHIFT JMS BOFF / Test for bold, and turn off if on /a042 JMP I SIXXOU / Return PRINTQ, ZBLOCK PQSZ+PQSZ / Print que / / This routine belongs to OSTRG and checks the display buffer /A044 / for an embedded dead key sequence (Must be 8 bit char) /A044 / of form /A044 / <62> and outputs the appropriate char /A044 / O8CHK, XX /A044 TAD (-10) / Check for start of dead /A044 SNA / /A044 JMP OS8OUT / Display 8 bit /A044 TAD (10) / Replace char /A044 JMS OCHAR / Output it /A044 JMP I O8CHK / And Exit /A044 OS8OUT, ISZ VALUE / Past space /A044 ISZ VALUE / Point to char /A044 TAD VALUE / Get contents to indirect to /A044 DCA XVALUE / And save /A044 JMS IOACDF / Set to users buffer /A044 TAD I XVALUE / Get character /A044 CDFMYF / Now back to mine /A044 TAD (200) / Add back 8th bit /A044 JMS OCHAR / Output it /A044 ISZ VALUE / Point to End of Dead /A044 ISZ VALUE / Point to End of Dead /A044 JMP I O8CHK / Rejoin normal code /A044 /**************************************************************************** /a047 a047 a047 a047 a047 a047 a047 a047 a047 a047 /**************************************************************************** / / Moved here for space reasons / NXTABS, JMS BHOOK / Blast in code /A044 NXTDED / Routine name /A044 JMP NXTAOK / Pass start and End dead through /A044 JMP NXTABK / Not valid , treat as break /A044 / / These routines are part of the IOA loop but are here for space /A044 / THIS DOES THE SPECIAL CONVERSION FOR ASCII CHARACTERS IN ALTERNATE / GRAPHICS ROM ZCOM, JMS ARGVAL / GET ARGUMENT DCA .+3 JMS OSTRG / OUTPUT IT 16 / SHIFT OUT 0 / CHARACTER 4017 / SHIFT IN JMP IOALOP / DONE, RETURN TO MAIN LOOP ECOM, JMS OSTRG / DO ERASE TO EOS FUNCTION ESC / ESC "[ / [ "J-200+4000 / J (4000 MEANS END OF STRING) JMP IOALOP / DONE, RETURN TO MAIN LOOP /*************************************************************************** /end a047 end a047 end a047 end a047 end a047 /*************************************************************************** XVALUE, 0 / temp used to indirect to value /A044 X=. / INDICATE FIRST FREE LOCATION ON PAGE /---------------------------------- PAGE /A040 A040A040A040A040A040A040A040A040A040A040A040A040A040A040A040A040A040A040 /A040 FOLLOWING PAGE ALL INSERTED FOR THIS EDIT ( CODE HOLE BLASTER ) /************************************************************************ / BLASTER /************************************************************************ / NB the Blaster must reside here as it is defined in WPF1 / and called from many modules /************************************************************************ PR3= 6236 / panel request 3 ?***## check this PANSWAP=0 / panel swap area address /********************************************************************** / Patent Hole Blaster / / Runs a subroutine found in panel memory / 1/ saves resident code to panel memory swap area / 2/ load the subroutine into panel memory / 3/ runs the subroutine with a JMS to first location / 4/ returns the subroutine code to panel / 5/ on return restores the resident code from swap area / / Also load a table from memory (as a read only table) / 1/ saves resident code / 2/ load the table (or table section) / 3/ return to calling prog / Restores user code over table / 1/ returns the table to panel memory / 2/ restore user code from swap area / 3/ return to caller / / BLASTR is called from a BHOOK in each field / eg. JMS BHOOK / main program call to hook / TABLEENTRY / entry position in BLATBL / / table entry is negative for a table restore function / / BHOOK, 0 / hook return address / DCA BLACSV / save accumulator / RDF / read data field / TAD CDFO / make a CDF inst. / DCA BHKEXI / save for a return / CDFMYF / set tn-h/i BLASTH, BLASTR / blaster address / BLACSV, 0 / acc save / / TABLE ENTRY defines an entry position in the blaster table BLATBL / This table contains the information required to load / anurn interrupts off before / JMS I BLASTH / Calling blaster / ISZ BHOOK / skip return exit / BHKEXI, 0 / CDF inst (position after JMS important) / JMP I BHOOK / return / BLASTH, BLASTR / blaster address / BLACSV, 0 / acc save / / TABLE ENTRY defines an entry position in the blaster table BLATBL / This table contains the information required to load / and run the panel subroutine / Each entry in the table contains / 0/ Panel memory address of the subroutine / 1/ User address (the run position of the subroutine / 2/ Panel field position of the subroutine / 3/ User field (the run field of the subroutine / 4/ Length of the subroutine/area to swap / 5/ No execute flag (code=0 / tables=1) / 6/ / 7/ / /************************************************************************* / Here follows the master blaster code / SW /************************************************************************* BLASTR, 0 / blaster return address BLASTA, DCA BLATSV / save accumulator CDFMYF / set the field to this field TAD BLABSY / blaster busy ? SZA CLA / skip if not JMP BLAWAIT / go wait until blaster ready ISZ BLABSY / set busy flag TAD BLASTR / get the return address DCA BLAXOUT / put it somewhere else in case of another call ION / ok allow interrupts after next inst TAD BLATSV / get the ac temp save DCA BLACSV / save the ac / first blast the table entry into its position at BLATBL TAD (5024) / get command DCA BLARG1 / set up function argument MQA / get the table entry SPA / test for reload of table area JMP BLTBRL / negative ac so go set flag BLACONT,R3L / table entry address=entry*8 TAD (BLSTBL / blaster table starts at 7000 DCA BLARG2 / save in second argument TAD (BLATBL) / get position of table DCA BLARG3 / put in argument 3 TAD (-10) / length of table entry DCA BLARG4 / put in argument 4 JMS BLATRAN / get the table entry / SET UP THE RETURN FIELDS /A048 TAD BLATBL+3 / get the run field for the subroutine R3L / Rotate to 00x0 /043 DCA BLAR3 / save the field :Use BLAR3 as temp TAD BLAR3 / get the field back:Use BLAR3 as temp TAD CIDF0 / set up the CIF inst DCA BLARUN / store in position befor subroutine execution / now set up the return CIF-CDF instruction / get the real old data field that the original prog was happily / running in before it was so rudely interupted by a JMS to BHOOK TAD BLATBL+7 / get the field of blast hook from table TAD CIDF0 / make a CIF CDF instruction DCA BLAXIT / store in position for exit TAD BLATBL+1 / address of call the subroutine DCA BLABRA / save the call address to JMS to TAD BLATBL+7 / get the hooks field from table TAD CDF0 / make a CDF instruction DCA BLAR1 / store it BLAR1, 0 / and execute the CDF TAD BLAXOUT / get the return address IAC / increment it to get the address of DCA BLAR3 / .. the CDF instruction AND save it TAD I BLAR3 / read the CDF instruction from BHOOK code CDFMNU / OK. now back to the menu field DCA BLAR3 / save the CDF in position for subr execution TAD BLAR3 / get it back again DCA BLARE3 / save it for use on final exit / now swap out the user code to panel swap area TAD BLTBFL / get table reload flag SZA CLA / skip if flag not set JMP BLAR1A / go reload user over table TAD BLATBL+6 / get the panel swap address MQL / save it in the MQ TAD (4050 / get the function code & panel field TAD BLATBL+3 / get the address to swap JMS BLAPAN / blast out to panel / now load in the subroutine from panel memory TAD BLATBL+0 / get panel address MQL / save for use in BLAPAN TAD BLATBL+3 / get user memory field R3L / Rotate to 00x0 /043 TAD (5000) / set top bit of function TAD BLATBL+2 / get panel field JMS BLAPAN / blast subroutine in from panel / call the subroutine TAD BLATBL+5 / check whether we are dealing with a table SZA CLA / skip if not JMP BLARE4 / go return can't run a table TAD BLACSV / get the ac value BLARUN, 0 / exit CIF instruction BLAR3, 0 / put a CDF instruction here JMS I BLABRA / call the subroutine ISZ BLAXOUT / case of a normal return force a skip / return here from subroutine CDFMYF / restore field to here DCA BLACSV / save the ac / return code or table to panel in case modifiel location exist SKP / skip over this in normal case /a048 BLAR1A, ISZ BLAXOUT / force a normal return /a048 BLARE1, TAD BLATBL+0 / get panel address MQL / save for use in BLAPAN TAD BLATBL+2 / get the panel field R3L / Rotate to 00x0 /a043 TAD (4000 / set up the write function TAD BLATBL+3 / get the users field JMS BLAPAN / blast the subroutine back out / now get back the swapped out code TAD BLATBL+6 / get panel swap address MQL / save in MQ TAD BLATBL+3; / get the users field R3L / Rotate to 00x0 /a043 TAD (5005 / get function code 5 & swap field 5 JMS BLAPAN / get in from panel / now jump back to user BLARE2, /m043 IOF / just hold to clear the busy flag DCA BLTBFL / clear the table restore flag DCA BLABSY / retset busy flag BLAXIT, 0 / CIF instruction BLARE3, 0 / CDF instruction TAD BLACSV / get the ac before return ION / allow ints again JMP I BLAXOUT / RETURN BLARE4, ISZ BLAXOUT / Incrament for a normal return from BHOOK/a046 JMP BLARE2 / Go exit /a046 BLAXOUT,0 / save return address BLABRA, 0 / blastr branch address BLABSY, 0 / blaster busy flag BLACSV, 0 / accumulator save BLATSV, 0 / accumulator temp save BLTBFL, 0 / blaster table restore flag TEMPBL, 0 / temp storage X=. / INDICATE FIRST FREE LOCATION ON PAGE /---------------------------------- PAGE /A040 ABOVE PAGE ALL INSERTED FOR THIS EDIT ( CODE HOLE BLASTER ) /A040 A040A040A040A040A040A040A040A040A040A040A040A040A040A040A040A040A040A040 /A040 A040A040A040A040A040A040A040A040A040A040A040A040A040A040A040A040A040A040 /A040 FOLLOWING PAGE ALL INSERTED FOR THIS EDIT ( CODE HOLE BLASTER ) / PANEL BLASTER ROUTINE BLAPAN, 0 / RETURN ADDRESS DCA BLARG1 / put the function code in our arg list TAD BLARG1 / get it again AND (1000) / test for a 4 or 5 000 function code SZA CLA / skip if 4000 JMP BL1 / was a 5000 / have a 4000 function code - save data into panel memory MQA / get PANEL memory address DCA BLARG3 / put PANEL memory address TAD BLATBL+1 / get the user mem address from table DCA BLARG2 / panel memory address JMP BL2 / skip round the other bit / have a 5000 function code - load data from panel memory BL1, MQA / get the panel memory address DCA BLARG2 / put panel memory address TAD BLATBL+1 / get the user address from table DCA BLARG3 / put the user memory / now get the word count BL2, TAD BLATBL+4 / get the next arg - the count DCA BLACNT / save in the count field / loop round sending only 40 words at a time to allow interrupts BLOOP, TAD BLACNT / get the no. of words left TAD (-40) / subtract 40 SMA CLA / if there will be some left JMP BL4 / do less than 40 TAD BLACNT / get count of words to send again CMA IAC / negate the count (if less than 40) SKP / skip over bit for more than 40 BL4, TAD (-40) / SET UP A COUNT OF 40 DCA BLARG4 / put in arg list JMS BLATRAN / could put this in inline code TAD BLARG4 / get the count sent TAD BLACNT / get the count to send DCA BLACNT / save the new count TAD BLACNT / load the count SNA CLA / skip if all done JMP I BLAPAN / return TAD BLARG2 / increment arg2 address TAD (40) / by the size of the block sent DCA BLARG2 TAD BLARG3 / increment arg3 address TAD (40) / by the size of the block sent DCA BLARG3 JMP BLOOP / send next block / Call the PANEL FUNCTION BLATRAN, 0 PR3 BLARG1, 0 / Function code insert here BLARG2, 0 / user(4)/panel(5) memory start address BLARG3, 0 / panel(4)/user(5) memory start address BLARG4, 0 / number of words BLARG5, 7777 / end of argument list JMP I BLATRAN / return BLACNT, 0 BLATBL, ZBLOCK 10 / TABLE ENTRY OVERBLAST AREA / wait around until blaster not busy BLAWAIT, / jump here from busy test /d056 ACL / test table entry to see if restore over table /d056 SPA CLA / ?? /d056 JMP BLAW1 / go do somthing with the busy flag TAD BLATSV / restor ac from temp save ION / can allow interrupts again now CIFSYS / wait is in sys JSWAP / OPSYS wait/ swap tasks call JMP BLASTA / go see if not busy now /d056BLAW1, DCA BLABSY / must be my busy so I'll clear it /d056 JMP BLASTA / go try again BLTBRL, DCA BLTBFL / set restoring table area flag TAD BLTBFL / get it back again CIA / get the table entry proper JMP BLACONT / continue after jump /*************************************************************************** / BHOOK Blaster hook to make this easily callable from this field /*************************************************************************** BHOOK, 0 / jms return address DCA BLACS1 / save accumulator RDF / read the data field TAD CDF0 / make a data field return instruction DCA BHKEXI / save for a return CDFMYF / make sure we are in this field TAD I BHOOK / get the table entry MQL / push into MQ TAD BLACS1 / get the acc back ISZ BHOOK / increment the return over arg IOF / just hold interupts a few instructions JMS BLASTR / call the blaster ISZ BHOOK / allow for a skip return BHKEXI, 0 / make the CDF here (position important) JMP I BHOOK / RETURN BLACS1, 0 / Accumulator save /A040 ABOVE PAGE ALL INSERTED FOR THIS EDIT ( CODE HOLE BLASTER ) /A040 A040A040A040A040A040A040A040A040A040A040A040A040A040A040A040A040A040A040 /******************************************************************** / some data areas use bye TIME etc /******************************************************************** DATEST, ZBLOCK 27 / ASCII list of time and date chars DECIMAL TENS, -1000 -100 -10 -1 0 OCTAL X=. / INDICATE FIRST FREE LOCATION ON PAGE /---------------------------------- PAGE /A028 / FOLLOWING PAGE OF CHUCKLES IS MOVED INTO NAT. LANG. RES. AREA FOR /A028 / 100 UDK DEVELOPMENT / CHKUDK / UDK CODE; CHKUDK, CHUDK0, CHRDU0 / ENTRY POINTS FOR UDK DISK ACCESS, CHKUDK, CHUDK0 / CALLED FROM U1XLAT IN WPSYS / ENTRY POINTS AT PERMANENT LOCATION / SO CHANGE CAN BE MADE IN WPF1 CHRUDX, / DISK ACCESS ROUTINE, CALLED FROM WPSYS AND THIS MODULE 0 JMP CHRDU0+1 CHKUXX, / CHECK KEYSTROKE FROM UDK 0 JMP CHKUDK+1 CHKUYY, / CHECK KEYSTROKE FROM KEYBOARD 0 JMP CHUDK0+1 CHKUDK, XX / ENTRY/EXIT SET UP BELOW CDFMNU DCA CHKUDA / SAVE AC TAD CHKUXX / SAVE RETURN ADDRESS DCA CHKUDK TAD I (UDKINH / INHIBIT FLAG SZA CLA JMS CHKUD9 / FLAG SET, RETURN WITH INPUT IN AC TAD (-EDUDK0 / IS INPUT A UDK? TAD CHKUDA SPA JMS CHKUD9 / NOT A UDK; RETURN CALL+1 WITH CHAR IN AC TAD (-CUUDNM SMA CLA JMS CHKUD9 / NOT A UDK / CHARACTER IS UDK FROM A UDK. PUT UDK / ADDRESS ON STACK AND SET STACK POINTER. CDFSYS TAD I U1STPY TAD (-12 SMA CLA / IS STACK FULL? JMP CHKUD8 / YES ISZ I U1STPY / BUMP POINTER TO STACK FOR NEXT ENTRY TAD (DLUDKS / READ UDK DIRECTORY CDFMNU JMS CHRUDX TAD CHKUDA / CONVERT KEYSTROKE TO UDK NUMBER TAD (-EDUDK0 TAD (CUDBUF / ADD BUFFER START DCA T1 / NOW HAVE ADDRESS OF ADDRESS OF UDK CDFSYS TAD I U1STPY / SAVE CONTENTS OF STACK POINTER CDFMNU TAD (U1STCK-1 DCA CHKSTP / FOR DOUBLE INDIRECT TAD I T1 / GET BLOCK/WORD OF UDK CDFSYS DCA I CHKSTP / PUT UDK ADDRESS ON STACK (DOUBLE INDIR) TAD I CHKSTP / READ THE BLOCK CDFMNU AND (7400 BSW CLL RTR / NOW HAVE BLOCK IN BITS 9,10,11 TAD (DLUDKS+1 / PLUS BASE JMS CHRUDX JMS CHKUD7 / CALL+2 CHKUD8, / STACK IS FULL; CLEAR STACK ENTRY /D032 / THAT GOT THIS CHARACTER AND DECREMENT /D032 / STACK POINTER /D032 TAD I U1STPY / SAVE CONTENTS OF STACK POINTER /D032 DCA CHKSTP / FOR DOUBLE INDIRECT /D032 DCA I CHKSTP / THE DOUBLE INDIRECT /D032 CMA /D032 TAD I U1STPY DCA I U1STPY JMS CHKUD7 CHKUD7, / CALL+2 0 ISZ CHKUDK JMP CHKUD6 CHKUD9, / CALL+1, AC CONTAINS CHARACTER 0 CLA TAD CHKUDA CHKUD6, NOP CHKUD5, CDISYS JMP I CHKUDK CHKUDA, 0 CHKSTP, 0 U1STPY, U1STPT CHUD10, / GET KEYSTROKE FROM TERMINAL, TEST FOR HALT 0 CLA CDISYS / USING FIELD 0 ROUTINE JMS I XTTYIN DCA CHUDKC CDFSYS TAD I U1HLTX CDFMNU SZA CLA JMP CHUDK7 / FOUND GOLD:HALT, IGNORE UDK TAD CHUDKC TAD (-EDNWLN / TEST FOR RETURN SNA JMP CHUD12 / FOUND RETURN; C+1 TAD (EDNWLN-EDRBCH / TEST FOR RUBOUT SNA CLA JMP CHUD11 / FOUND RUBOUT; C+2 JMS CHUD20 / TEST FOR DIGIT /D034 JMP CHUD10+1 / NOT A LEGAL KEYSTROKE, TRY AGAIN JMP CHUDK3 / ILLEGAL KEYSTR., RING BELL AND AS G-HLT /A034 TAD CHUDKC / HAVE A BINARY NUMBER; C+3 ISZ CHUD10 CHUD11, ISZ CHUD10 CHUD12, JMP I CHUD10 CHUDKC, 0 U1HLTX, U1HLTF XTTYIN, CTTYIN / ADDRESS DEFINED IN WPF1 CHUD20, / TEST KEYSTROKE FOR DIGIT 0 TAD CHUDKC AND P177 TAD (-60 DCA CHUDKC / SAVE BINARY NUMBER TAD CHUDKC SPA JMP CHUD21 / NOT A DIGIT TAD (-11 SMA SZA JMP CHUD21 / NOT A DIGIT ISZ CHUD20 CHUD21, CLA JMP I CHUD20 / / Moved here on edit 44 for space reasons / INAINS, TEXT '!X^P^A!L!Y' / CONTROL STRING FOR TIME AND DATE OUTPUT PAGE /*************************************************************************** /* W A R N I N G * /* * /* THIS AREA BLASTED BY CVDBN * /*************************************************************************** / / This address is defined in WPF1 and should not be moved, as will cause error CVDHOL=. / KEYBOARD INPUT FROM U1XLAT IN FIELD 0 CHUDK0, XX CDFMNU DCA CHUDKA / SAVE TRANSLATED INPUT TAD CHKUYY / SAVE RETURN ADDRESS DCA CHUDK0 TAD I (UDKINH / TEST INHIBIT FLAG SZA CLA JMP CHUDK9 / INHIBIT SET, GET CHARACTER AND EXIT TAD CHUDKA / WAS INPUT A GOLD U? /D029 TAD (-EDGLDU TAD (-EDUDKY / WAS INPUT UDK KEY (F14) /A029 SNA CLA JMP CHUDK1 / YES, LOOK FOR NUMBERS, RETURN, GOLD HALT TAD CHUDKA TAD (-EDUDK9 SMA SZA JMP CHUDK9 / NOT A UDK TAD (11 SPA CLA JMP CHUDK9 / NOT A UDK TAD CHUDKA TAD (-EDUDK0 / MAKES THE KEYSTROKE A BINARY NUMBER DCA CHDIG2 / SAVE THE BINARY NUMBER DCA CHDIG1 / CLEAR THE HIGH ORDER DIGIT FOR LATER JMP CHUDK8 CHUDK1, CLA DCA CHDIG1 / CLEAR DIGIT HOLDERS DCA CHDIG2 JMS CHUD10 / GET INPUT AND TEST JMP CHUDK3 / RETURN SAME AS HALT HERE /C034 JMP CHUDK3 / RUBOUT SAME AS HALT HERE /C034 DCA CHDIG1 / SAVE THE DIGIT CHUDK2, DCA CHDIG2 / FOUND RUBOUT AS THIRD KEYSTROKE, / CLEAR SECOND DIGIT /D034 CHUDK3, JMS CHUD10 / LOOK FOR SECOND KEYSTROKE JMP CHUDK5 / RETURN AFTER ONE DIGIT /C028 JMP CHUDK1 / RUBOUT AS SECOND KEYSTROKE, / ERASES FIRST DIGIT DCA CHDIG2 / SECOND KEYSTROKE IS A DIGIT CHUDK4, JMS CHUD10 / LOOK FOR THIRD KKEYSTROKE JMP CHUDK8 / FOUND RETURN JMP CHUDK2 / FOUND RUBOUT, ERASE SECOND DIGIT /D034 CLA / FOUND DIGIT, NOT LEGAL HERE /D034 JMP CHUDK4 / LOOK AGAIN JMP CHUDK3 / DIGIT NOT LEGAL, BELL AND G-HLT EXIT /A034 CHUDK9, / INHIBIT OR NOT UDK; C+1; AC=CHAR CLA TAD CHUDKA JMP CHUDEX / EXIT WITH INPUT IN AC CHUDK3, / ILLEGAL KEYSTROKE /A034 CLA TAD (7 / BELL JMS OUTCHR / USE EXISTING ROUTINE CHUDK7, / HALT SET, IGNORE UDK; C+3; AC=0 ISZ CHUDK0 CHUDK6, / EXIT FOR LEGAL UDK FOUND; C+2; AC=0 ISZ CHUDK0 CHUDEX, CDISYS JMP I CHUDK0 CHUDK8, / UDK NUMBER IN CHDIG1, CHDIG2. NOW WE HAVE TO / INSERT UDK ADDRESS INTO STACK AND SET / STACK POINTER; THEN "GETUDK" CAN ACCESS / STACK POINTER AND STACK. TAD CHDIG1 / COMPUTE UDK NUMBER FROM INPUT CLL RTL / FIRST DIGIT TIMES TEN RAL TAD CHDIG1 CHUDK5, TAD CHDIG1 / ENTRY IF FIRST DIGIT IS ONLY ONE /C028 TAD CHDIG2 / PLUS SECOND DIGIT; NO EFFECT AT CHUDK5/C028 TAD CHRDUB / + START OF BUFFER DCA T1 / = CORE ADDRESS IN DIRECTORY TAD (DLUDKS / READ DIRECTORY /M028 JMS CHRUDX /M028 TAD I T1 / GET ADDRESS OF UDK FROM DIRECTORY SNA / IS A UDK DEFINED? JMP CHUDK7 / NO, NOTHING TO PUT ON STACK CDFSYS DCA I U1STCX / PUT THE ADDRESS OF THIS UDK ON STACK IAC / SET STACK POINTER TO FIRST LOC. IN STACK DCA I U1STPX TAD I U1STCX / SET UP TO READ FIRST BLOCK OF UDK AND (7400 / KEEP BLOCK NUMBER BSW CLL RTR TAD (DLUDKS+1 CDFMNU JMS CHRUDX JMP CHUDK6 / AND EXIT WITH UDK IN CORE CHUDKA, 0 CHDIG1, 0 CHDIG2, 0 U1STCX, U1STCK U1STPX, U1STPT CHRDU0, / READ UDK DIRECTORY, UDK BLOCKS 0 / ENTER WITH BLOCK TO READ IN AC DCA QUQBLK+RXQBLK / BLOCK RDF / CROSS FIELD CALLABLE, SET RETURN TAD (CIF CDF DCA CHRDU9 CDFMNU TAD CHRUDX / SAVE RETURN ADDRESS DCA CHRDU0 DCA QUQBLK+RXQDRV / DRIVE TAD CHRDUA DCA QUQBLK+RXQFNC / FUNCTION TAD CHRDUB DCA QUQBLK+RXQBAD / BUFFER ADDRESS TAD CHRDUC DCA QUQBLK+RXQBFD / BUFFER FIELD JMS QURX / DISK OPERATION CHRDU9, 0 / RETURN FIELD CLA JMP I CHRDU0 CHRDUA, RXERD CHRDUB, CUDBUF CHRDUC, CDFMNU /**************************************************************************** / MENU Moved here to create space /a051 /**************************************************************************** MENU, XX / ENTRY POINT FOR CALLING MENU DISPLAYS TAD I MENU / GET BLOCK TO READ ISZ MENU / BUMP RETURN ADDRESS DCA T1 / SAVE FOR A SECOND JMS GETCID / GET THE CALLER'S DATA FIELD INST. /A023 DCA MENUX / SAVE FOR RETURN DCA T2 / INIT PC TO ZERO TAD T1 / GET MENU BLOCK TO READ JMP MUCOVA / GET OVERLAY IN MENUX, HLT / PATCHED TO CIF CDF FIELD JMP I MENU / RETURN /*************************************************************************** /**** NATURAL LANGUAGE TRANSLATION TABLES AND ROUTINES **** /*************************************************************************** /SPACE TEMPORARILY BORROWED FOR 100 UDK INTEGRATION /A028 /D028 * PSBUF+1000 / RESERVE SPACE FOR NATURAL LANGUAGE /A016 X=. / INDICATE FIRST FREE LOCATION ON PAGE /A016 /-------------------- PAGE /*************************************************************************** /*************************************************************************** /***** D A N G E R - D O N O T M O V E ***** /***** ***** /***** C O D E I N T O O R O U T O F T H I S A R E A ***** /***** ***** /***** SWAP AREA IN CONSTANT USE BY OTHER MODULES ***** /*************************************************************************** /*************************************************************************** /*************************************************************************** /**** TRANSFER VECTOR ENTRY POINTS FOR EDITOR SWAP AREA ROUTINES **** /*************************************************************************** SWPBEG=. / GENERATE ERROR IF THIS CODE IS MOVED /A016 CALLN1, XX / ENTRY POINT FOR ROUTINE NUMBER 1 JMS CALSUB / SET UP RETURN ADDRESS AND RETURN FIELD NOP / PLACE FOR TRANSFER TO SPECIAL CODE 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 / PLACE FOR TRANSFER TO SPECIAL CODE 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 / PLACE FOR TRANSFER TO SPECIAL CODE 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 / PLACE FOR TRANSFER TO SPECIAL CODE 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 JMS GETCID / GET THE CALLER'S DATA FIELD INST. /A023 DCA CALXIT / STORE FOR RETURN TO CALLER 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 TAD T1 / PICK UP SAVED CONTENTS OF ACCUMULATOR 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 /*************************************************************************** /**** USER JOB START UP POINT **** /*************************************************************************** WPCMND, AC7777 / SET AC TO MINUS ONE TAD (MUBUF+MNUSRA) / CONBINE WITH ADDRESS OF USER AREA DCA X0 / SET UP AUTO-INDEX REG TO ZERO AREA TAD (-400) / GET NEGATIVE OF LOCATIONS TO CLEAR DCA T1 / SET UP LOOP COUNTER WPLOOP, DCA I X0 / ZERO A LOCATION IN THE USER AREA ISZ T1 / HAVE WE REACHED THE END OF THE AREA ? JMP WPLOOP / NO, GO DO IT AGAIN TAD FNAMSP / YES, PICK UP ADDRESS OF FILE NAME BUFFER DCA MUBUF+MNFNAM / STORE ADDRESS IN USER AREA TAD (-STRLEN+1) / GET LENGTH OF INPUT BUFFER DCA MUBUF+MNILEN / STORE LENGTH IN USER AREA TAD (-17) / GET LENGTH OF ARGUMENT BUFFER DCA MUBUF+MNALEN / STORE LENGTH IN USER AREA CDFSYS / CHANGE TO SYSTEM FIELD TO PICK UP VALUES AC7777 / -1 TO CONVERT TO ACTUAL DRIVE NOS. TAD I (RXONLN) MQL / SAVE # OF DRIVES IN MQ. CLEAR AC. TAD I (RXTYPE) / GET SYSTEM DRIVE TYPE. CDFMYF DCA MUBUF+MNOPTN / SET BIT 11 OF MNOPTN TO 1 FOR RX02 / OR 0 FOR RX01. INIT REST TO 0. MQA / GET SAVED # OF DRIVES. DCA MUBUF+MNMXDR CDFSYS / GET STARTUP TYPE. TAD I (STTYPE) / ... CDFMYF / .... SZA CLA / SKIP IF COLD STARTUP. IAC / SELECT WARM STARTUP TYPE. DCA MUBUF+MNTMP1 / STORE STARTUP TYPE FOR MENU. JMS MENU / CALL START-UP DISPLAY DLMFN1 / DISK ADDRESS OF START-UP MENU CMNDLP, CLA TAD MUBUF+MNONUM / GET OVERLAY NUMBER DCA CMNDOV / STORE IN CALL TO OLAY JMS OLAY / CALL OVERLAY ROUTINE CMNDOV, 0 / OVERLAY NUMBER GOES HERE CLA TAD MUBUF+MNOADR / GET ADDR TO START AT DCA CMNDOV / SAVE RDF TAD MUBUF+MNOFLD / GET CIF FIELD DCA CMNDFD / STORE INLINE FOR EXECUTION CMNDFD, HLT / CHANGE TO CORRECT INSTRUCTION FIELD JMS I CMNDOV / GO THERE AT CORRECT ADDR ON CORRECT FIELD SKP CLA / RETURN TO MAIN MENU JMP CMNDLP / OR CHAIN TO NEXT OVERLAY JMS CLRDSK / CLEAR MEMORY OF DISKETTE /A010 JMS MENU / CALL NORMAL MAIN MENU DLMMM1 JMP CMNDLP / TRANSFER TO NEXT OVERLAY CLRDSK, XX / CLEAR MEMORY OF DISKETTE /A010 TAD (RXERT) / COMMAND TO RESET THE HANDLER /A010 DCA QUQBLK+RXQFNC / STORE IN QUEUE BLOCK /A010 JMS QURX / EXECUTE THE COMMAND /A010 CLA / IGNORE RETURN CODE /A010 JMP I CLRDSK / RETURN TO CALLER /A010 X=. / INDICATE FIRST FREE LOCATION ON PAGE /-------------------- PAGE /*************************************************************************** /*************************************************************************** /***** D A N G E R - D O N O T M O V E ***** /***** ***** /***** C O D E I N T O O R O U T O F T H I S A R E A ***** /***** ***** /***** SWAP AREA IN CONSTANT USE BY OTHER MODULES ***** /*************************************************************************** /*************************************************************************** /*************************************************************************** /**** OLAY - OVERLAY PACKAGE **** /*************************************************************************** / / THIS ROUTINE IS CALLED AS FOLLOWS: / / CIFMNU / JMS I OLAYCL / OVERLAY NUMBER / RETURN POINT / / OVERLAY NUMBER MUST BE IN OVERLAY TABLE (WHICH IS PART OF THIS ROUTINE) OLAY, XX CLA / PICK UP ARG TAD I OLAY / ... ISZ OLAY TAD (OLNTAB) / GET ADDR OF TABLE DCA OLLIST / SAVE AS LIST OF OVERLAYS POINTER JMS GETCID / GET THE CALLER'S DATA FIELD INST. /A023 DCA OLDON / SAVE AT RETURN POINT DCA QUQBLK+RXQDRV / PATCH QUEUE BLOCK TO USE SYSTEM DRIVE TAD (RXERD) / DO A READ DCA QUQBLK+RXQFNC TAD I OLLIST / GET ADDR IT POINTS TO DCA OLLIST OLPBLK, TAD I OLLIST / GET POINTER TO NEXT OVERLAY BLOCK SNA / ZERO MEANS DONE JMP OLDON / SO JUST RETURN DCA OLBLK / OTHERWISE SAVE FOR INDIRECTION THROUGH TAD I OLBLK / GET FIRST WORD - THE ADDR OF LOCK WORD SNA / THIS HAS ADDR OF OVERLAY IN THERE JMP OLRD / ZERO MEANS MUST READ DCA OLLOCK / OTHERWISE SAVE FOR INDIRECTION AND TEST TAD I OLLOCK / GET THE WORD CIA / AND COMPARE TO ADDR OF OVERLAY BLOCK TAD OLBLK SNA CLA / EQUAL MEANS ... JMP OLNXT / THAT WE DON'T HAVE TO READ ANYTHING TAD OLBLK / PUT OUR ADDR IN THERE FOR NEXT TIME DCA I OLLOCK / ... OLRD, ISZ OLBLK / GET NEXT WORD IN BLOCK - DSK BLOCK NUMBER TAD I OLBLK SNA / ZERO MEANS DON'T READ JMP OLNXT / ALLOWS YOU TO CLOBBER THE LOCK WORD ON DATA DCA QUQBLK+RXQBLK / SAVE BLK NUMBER IN QUEUE BLOCK ISZ OLBLK / GET NEXT WORD - ADDR OF WHERE TO READ IT TAD I OLBLK / AND PUT IT IN QUEUE BLOCK DCA QUQBLK+RXQBAD / AT THE APPROPRIATE PLACE ISZ OLBLK / NEXT WORD IS RELATIVE FIELD RDF / GET OUT DATA FIELD (ALWAYS 2 IN 278) TAD I OLBLK / ADD RELATIVE (USER) FIELD # AND (70) / ISOLATE PROPER BITS TAD CDF0 / MAKE A CDF INSTRUCTION OUT OF IT DCA QUQBLK+RXQBFD / AND PUT INTO PLACE TAD I OLBLK AND P7700 BSW CIA SNA JMP OLRD1 / NON-ZERO MEANS DO THE READS DCA OLLOCK / SAVE AS COUNT OLRLP, JMS QURX / READ NEXT BLOCK FROM DSK CLA ISZ QUQBLK+RXQBLK / INCR BLOCK NUMBER TAD (400) / AND INCREASE ADDR TAD QUQBLK+RXQBAD DCA QUQBLK+RXQBAD ISZ OLLOCK / INCR COUNT JMP OLRLP / DO NEXT BLOCK OLRD1, TAD I OLBLK RAR SNL CLA JMP OLNXT TAD QUQBLK+RXQBFD / GET THE FIELD CHANGE WORD DCA OLPATI / AND PATCH THE CDF INSTRUCTION TAD (20) / GET ADDR DCA OLBLK / AND INIT POINTER TAD (-60) / AND INIT COUNT DCA OLLOCK OLPATL, TAD I OLBLK OLPATI, HLT / CHANGE TO TARGET FIELD DCA I OLBLK / AND DO THE STORE CDFMYF / CHANGE BACK ISZ OLBLK / INCR POINTER ISZ OLLOCK / INCR COUNTER JMP OLPATL / AND LOOP OLNXT, ISZ OLLIST / GET NEXT OVERLAY DESCRIPTOR BLOCK JMP OLPBLK OLDON, HLT / CIF CDF RETURN-FIELD JMP I OLAY / RETURN OLLIST, 0 OLBLK, 0 OLLOCK, 0 /*************************************************************************** /*************************************************************************** /***** D A N G E R - D O N O T M O V E ***** /***** ***** /***** C O D E I N T O O R O U T O F T H I S A R E A ***** /***** ***** /***** SWAP AREA IN CONSTANT USE BY OTHER MODULES ***** /*************************************************************************** /*************************************************************************** /*************************************************************************** /**** LOCATION FOR MENU COMMAND "CLRBIT" **** /*************************************************************************** / FORMAT IS CLRBIT; MASK VALUE; DESTINATION / BITS SET IN THE MASK VALUE WILL BE RESET IN THE DESTINATION MUCCBT, JMS MUPCWD / GET VALUE OF BITS TO CLEAR CMA / MAKE ONE'S COMPLEMENT FOR MASK DCA T1 / SAVE MASK VALUE JMS MULDPC / LOAD WORD PC POINTS TO AND T1 / MASK BITS WITH SAVED MASK VALUE JMP MUSTO1 / GO STORE RESULTS AND CONTINUE NEXT INST. /*************************************************************************** /**** LOCATION FOR MENU COMMAND "SETBIT" **** /*************************************************************************** / FORMAT IS SETBIT; BIT VALUE; DESTINATION / BITS SET IN THE BIT VALUE WILL BE SET IN THE DESTINATION MUCSBT, JMS MUPCWD / GET VALUE OF BITS TO SET MQL / SAVE BIT VALUE JMS MULDPC / LOAD WORD PC POINTS TO MQA / COMBINE BITS WITH MEMORY VALUE JMP MUSTO1 / GO STORE RESULTS AND CONTINUE NEXT INST. /*************************************************************************** /**** LOCATION FOR MENU COMMAND "SHFBIT" **** /*************************************************************************** / FORMAT IS SHFBIT; SHIFT VALUE (+ RIGHT, - LEFT); DESTINATION / BITS IN THE DESTINATION VALUE WILL BE SHIFTED RIGHT OR LEFT / A POSITIVE VALUE WILL SHIFT BITS TO THE RIGHT / A NEGATIVE VALUE WILL SHIFT BITS TO THE LEFT / MAX VALUES ARE -12 TO +12, ANYTHING ELSE RESULTS IN A ZERO VALUE MUCSHF, JMS MUPCWD / GET SHIFT VALUE SMA / CHECK FOR A LEFT SHIFT JMP SHFSET / NO, IT'S A SHIFT RIGHT DCA T1 / COUNT IS IN CORRECT FORM, USE IT AS IS JMS MULDPC / LOAD WORD THAT PC POINTS TO SHFLFT, CLL RAL / CLEAR LINK AND ROTATE TO THE LEFT ISZ T1 / INCREMENT THE COUNT JMP SHFLFT / NOT DONE, GO AGAIN JMP MUSTO1 / GO STORE RESULTS AND CONTINUE NEXT INST. SHFSET, CIA / MAKE COUNT NEGATIVE DCA T1 / STORE IN COUNTER JMS MULDPC / LOAD WORD THAT PC POINTS TO SHFRGT, CLL RAR / CLEAR LINK AND ROTATE TO THE RIGHT ISZ T1 / INCREMENT THE COUNT JMP SHFRGT / NOT DONE, GO AGAIN JMP MUSTO1 / GO STORE RESULTS AND CONTINUE NEXT INST. MULDPC, XX / LOAD CONTENTS OF WORD THAT PC POINTS TO JMS MUPPCW / PICK UP ADDRESS THAT PC POINTS TO TAD MUBASE / ADD IN MENU BUFFER OFFSET DCA T2 / STORE FOR INDIRECT TAD I T2 / PICK UP THE CONTENTS OF LOCATION JMP I MULDPC / RETURN TO CALLER X=. / INDICATE FIRST FREE LOCATION ON PAGE /-------------------- PAGE /*************************************************************************** /*************************************************************************** /***** D A N G E R - D O N O T M O V E ***** /***** ***** /***** C O D E I N T O O R O U T O F T H I S A R E A ***** /***** ***** /***** SWAP AREA IN CONSTANT USE BY OTHER MODULES ***** /*************************************************************************** /*************************************************************************** /*************************************************************************** /**** OVERLAY TABLE FOR OLAY ROUTINE **** /*************************************************************************** OLNTAB, OL0 / NULL OVERLAY OL1 / COMMAND UTILTIES OL2 / EDITOR OL3 / XBAR OL4 / COPY COMMAND OL5 / DOCUMENT TRANSFER OL6 / LIST PROCESSING 1 OL7 / LIST PROCESSING 2 OL10 / EDITOR MATH OL11 / LIST PROCESSING 3 OL12 / COMMAND UTILITY II OL13 / COPY DOCUMENT UTILTITY OL14 / VERIFY COMMAND OL15 / USER DEFINED KEYS OL16 / INDEX OL17 / DUMMY TO ZAP BUFFLD LOCK WORD OL20 / COMMAND UTILITY III OL21 / Spelling Checker OL22 / WT78 TD COMMAND OL23 / IBM MAG CARD I EMULATOR IN DM I / "SETUP" terminal characteristics in DM II OL24 / COMMAND UTILITY VI OL25 / FEATURE UNBUNDLING OPERATIONS OL26 / SORT - START-UP, PARSER, & SELECTOR OL27 / DUMMY TO ZAP EDIT FIELD LOCK WORD OL30 / Logon utility IFDEF WINNIE < OL31 / WINCHESTER UTILITY OVERLAY /A003 > / END IFDEF WINNIE OL32 / CONVERT STARTUP OVERLAY /A059 OL1, OLACUT OL0, 0 OL2, OLAEDT;OLAMTH;OLAMT2;OL3EDT;OLASL2 / MATH LOADS WITH THE EDITOR /M012 OL17, OLAE12;0 OL30, OLALOG;OLASL5 / Logon loads itself AND CX!!! OL3, OLACX1;OLACX2;OLA40Z;0 / /M004 OL4, OLACPY;OLAE12;OLA40Z;0 / COPY UTILITY NOW USES 2 FIELD BUFFER /C006 OL5, OLADWC;OLADW2;OLADW3;OLA40Z;0 OL6, OLAPRS;OLAPR2;OLAMTH;OLAMT2;0 / READS IN WPPARS.PA (LP PARSER)/m045 OL7, OLASL1;OLASL2;OLASL5;0 / READS IN WPSELC.PA (SP SELECTER) OL10, OL4EDT;OLASL2;0 / READS IN EDITOR MATH CODE NOT USED /M012 / DURING LIST PROCESSING OL11, OLASL3;0 OL12, OLACU2;0 OL13, OLACPF;OLAE12;OLAEFZ;0 / COPY DOCUMENT UTILITY OL14, OLAVFY;OL3VFY;OLAE12;OLA40Z;0 /VERIFY USES FIELDS 3,4,5 & 6 /C031 OL15, OLAUDK;0 OL16, OLANDX;0 OL20, OLACU3;0 IFNDEF CONDOR < /A004 OL21, / SED TRANSFER PROGRAM is gone /C017 /D017 OLAEFZ;OLAPR2;OLASL5;OLASL2;OLA40Z;0 / ZAP ALL LOCK WORDS > / END IFNDEF CONDOR /A004 IFDEF CONDOR < /A004 /d026 OL21, OLAEDT;OL3EDT;OLASL2;OLASPI;OLAE12;0 / SPELLING CORRECTOR/A004/M012 / SPELLING CORRECTOR /A026 OL21, OLAEFZ / ZAP FIELD 3 LOCK WORD TO REREAD EDITOR/A026 OLAEDT / READ IN THE FIELD 3 EDITOR /A026 OL3EDT / READ IN THE FIELD 5 EDITOR /A026 OLASL2 / ZAP FIELD 5 LOCK WORD /A026 OLASPI / READ IN SPELL CHECK INIT CODE /A026 OLAE12 / ZAP FIELD 4 LOCK WORD /A026 0 / END OF LIST INDICATOR /A026 > / END IFDEF CONDOR /A004 OL22, OL23, / MAGCARD SUPPORT IS GONE /C017 IFDEF CONDOR OL24, OLACX2 OL25, OLACU4;0 OL26, OLASPR; / READ IN SORT PARSER OLASRT; / READ IN SORT OLAE12 / ZAP FIELD 4 LOCK WORD OLASL5; / ZAP FIELD 5 LOCK WORD / (SO SORT WILL RELOAD NEXT TIME) OLA40Z / ZAP FIELD 6 LOCK WORD / (TO INDICATE MATH OVERWRITTEN) OL27, OLAEFZ;0 / ZAP FIELD 3 LOCK WORD IFDEF WINNIE < OL31, OLAWIN;OLAE12;0 /A003 > / END IFDEF WINNIE OL32, OLCNVT / LOAD IN THE STARTUP CODE /A059 OLA40Z / ZAP field 6 lock /a059 / to indicate MATH overwritten /A059 0 / TERMINATOR OF LIST /A059 /*************************************************************************** /*************************************************************************** /***** D A N G E R - D O N O T M O V E ***** /***** ***** /***** C O D E I N T O O R O U T O F T H I S A R E A ***** /***** ***** /***** SWAP AREA IN CONSTANT USE BY OTHER MODULES ***** /*************************************************************************** /*************************************************************************** / ............................................................... / FORMAT: / / / / LOCK PTR; BLK #; ADDR; CCFX / / / / CC = BLK COUNT / / F = USER FIELD # (ACUAL FIELD # - 2) / / X = 1 MEANS LOAD MEMORY LOCATIONS 20 - 77 / / (ELSE 0) / / / / ............................................................... OLACU2, OLL220;DLOCU2; 0;DSOCU2^100+21 OLACU3, OLL220;DLOCU3; 0;DSOCU3^100+21 OLACU4, OLL220;DLOCU4;100;DSOCU4^100+21 OLAUDK, OLL220;DLOUDK; 0;DSOUDK^100+21 / UDK'S /C033 OLANDX, OLL220;DLONDX;100;DSONDX^100+21 / INDEX COMMAND OLACUT, OLL220;DLOCUT;100;DSOCUT^100+21 OLAEDT, OLL110;DLOEDT; 0;DSOEDT^100+11 / EDITOR OLACX1, OLL220;DLOCX1;100;DSOCX1^100+21 / CX OLACX2, OLL110;DLOCX2;100;DSOCX2^100+11 / CX IFDEF CONDOR < OLASETUP,OLL110; DLOSETUP; 100; DSOSETUP^100+11 > / END IFDEF CONDOR OLACPY, OLL110;DLOCPY;000;DSOCPY^100+11 / COPY COMMAND OLADWC, OLL110;DLODWC;100;DSODWC^100+11 OLADW2, OLL220;DLOAX ;100; DSOAX^100+21 / AX OLAPRS, OLL110;DLOPRS;100;DSOPRS^100+11 / LP (WPARS) OLALOG, OLL301;DLOLOG;100;DSOLOG^100+31 / LOGON utility /A037 OLADW3, OLL110;DLODW2;7400;DSODW2^100+10 OLASL1, OLL301;DLOSEL; 200;DSOSEL^100+31 / LP (WPSELC) OLASL3, OLL302;DLOSOV;2200;DSOSOV^100+30 / LP (OVERLAY) OLASL5, OLL301;0 / DUMMY TO ZAP LP (WPSELC) LOCK / WORD SO LP WILL BE READ IN / EVERY TIME OLASL2, OLL302;0 / ZAP LOCK WORD OLASPR, OLL110;DLOSPR;100;DSOSPR^100+11 OLASRT, OLL301;DLOSRT;100;DSOSRT^100+31 OLAEFZ, OLL110;0 OLAPR2, OLAE12, OLL220;0 / SIMPLY ZAPS LOCK WORD OLA40Z, OLL400;0 / ZAPS FIELD 6 LOCK WORD OLAMTH, OLL400;DLMATH; 100;DSMATH^100+41 / MATH MODULE OLAMT2, OLL301;DLMBCD;5400;DSMBCD^100+31 / BCDASC MODULE OL4EDT, OLL302;DL4EDT; 200;DS4EDT^100+31 / EDITOR MATH /M012 OL3EDT, OLL302;DL3EDT;6400;DS3EDT^100+31 / GOTO PAGE & EDXVEC /M012 OLAVFY, OLL110;DLOVFY;0;DSOVFY^100+11 / VERIFY COMMAND OL3VFY, OLL301;DL3VFY;200;DS3VFY^100+31 / COS ROUTINES OLACPF, OLL110;DLCPFL;100;DSCPFL^100+11 / COPY DOCUMENT UTILITY IFDEF CONDOR < /A004 OLASPI, OLL110; DLOSPI;7400; DSOSPI^100+10 / Spell Checker init stuff/A004 > / END IFDEF CONDOR /A004 IFDEF WINNIE < OLAWIN, OLL110;DLWINI;000;DSWINI^100+11 / WINNIE UTILITY /A003 > / END IFDEF WINNIE OLCNVT, OLL400;DLCVTI;6000;DSCVTI^100+41 / load convert INIT at top/a059 / of field 6 /a059 X=. / INDICATE FIRST FREE LOCATION ON PAGE /-------------------- PAGE / Previous table extends over page /*************************************************************************** /*************************************************************************** /***** D A N G E R - D O N O T M O V E ***** /***** ***** /***** C O D E I N T O O R O U T O F T H I S A R E A ***** /***** ***** /***** SWAP AREA IN CONSTANT USE BY OTHER MODULES ***** /*************************************************************************** /*************************************************************************** /*************************************************************************** /**** MENU - TAKES CARE OF MENU MANAGING **** /*************************************************************************** / THE MAIN CALL IS: / JMS MENU / DISK BLOCK TO READ FOR FIRST MENU / RETURN POINT / THE PROGRAM STARTS INTERPRETING INSTRUCTIONS / AT RELATIVE LOCATION 0. / ALL MENU COMMAND TRANSFER LABLES CAN HAVE THE FORM: / -1-ROUTINE LABEL ; ROUTINE BLOCK NUMBER / COMMANDS ALLOWED: NOOPER= 0 / ZERO VALUE COMMAND IS A MENU NO-OPERATION READ= -1 / READ; DESTINATION OF RESULT ADDRESS; ERROR LABEL RETURN= -2 / RETURN CALL= -3 / CALL; ROUTINE LABEL; ROUTINE BLOCK NUMBER GOTO= -4 / GOTO; LABEL NUMBER= -5 / NUMBER; DESTINATION; ERROR LABEL KEYWRD= -6 / KEYWRD; TEXT; LABEL; ... DISP= -7 / DISP; POSITION; IOA CONTROL STRING; ARGP1; ARGP2; ... SET= -10 / SET; VALUE; DESTINATION ARG= -11 / ARG; NO ARGUEMENT LABEL; DEST OF WHERE STORED RANGE= -12 / RANGE; SOURCE; MINIMUM; MAXIMUM; ERROR LABEL CASE= -13 / CASE; SOURCE; VALUE; LABEL; VALUE; LABEL; ... PQUEUE= -14 / PQUEUE; IN-QUEUE-LABEL; EMPTY-QUEUE-LABEL TRNSFR= -15 / TRNSFR; LABEL; BLOCK NUMBER COPY= -16 / COPY; FROM; TO FILNAM= -17 / FILNAM; NONAME LABEL; NOT DEFINED LABEL CMND= -20 / CMND; OVERLAY NUMBER; ADDRESS; CIDF FIELD PREAD= -21 / PREAD; FLAG; RESULT ADDRESS; ERROR LABEL MXDISP= -22 / MXDISP; POSITION; TEXT STRING LABEL; BLOCK NUMBER MNHALT= -23 / MNHALT - HALT INSTRUCTION, PROGRAMMING DIAGNOSTIC AID FBREAK= -24 / FBREAK; ADDRESS OF FILE NUMBER TSTBIT= -25 / TSTBIT; SOURCE; MASK; ZERO RESULT LABEL CLRV= -26 / CLRV; INCV= -27 / INCV; STOV= -30 / STOV; DESTINATION CLRRTN= -31 / CLRRTN CLRBIT= -32 / CLRBIT; BIT MASK VALUE; DESTINATION SETBIT= -33 / SETBIT; BIT SET VALUE; DESTINATION SHFBIT= -34 / SHFBIT; SHIFT VALUE (+ RIGHT, - LEFT), DESTINATION /**************************************************************************** / MENU Moved from here to create space for the IOA table /a051 /**************************************************************************** MULOOP, JMS MUPCWD / GET WORD AT PC, INCR PC MULXEQ, TAD (MUCLST) / USE AS OFFSET TO TRANSFER VECTOR DCA MUTEMP TAD I MUTEMP DCA MUTEMP JMP I MUTEMP / DO COMMAND /*************************************************************************** /**** COMMAND TRANSFER TABLE **** /*************************************************************************** MUCSHF / SHFBIT= -34 / SHFBIT; SHIFT (+ RIGHT, - LEFT), DESTINATION MUCSBT / SETBIT= -33 / SETBIT; BIT SET VALUE; DESTINATION MUCCBT / CLRBIT= -32 / CLRBIT; BIT MASK VALUE; DESTINATION MUCLRT / CLRRTN= -31 / CLRRTN MUSTOV / STOV= -30 / STOV; DESTINATION MUINCV / INCV= -27 / INCV MUCLRV / CLRV= -26 / CLRV MUCTSB / TSTBIT= -25 / TSTBIT; SOURCE; MASK; ZERO RESULT LABEL MUCBRK / FBREAK= -24 / FBREAK; ADDRESS OF FILE NUMBER MUHALT / MNHALT= -23 / MNHALT - PROGRAMMING DIAGNOSTIC AID MUXDSP / MXDISP= -22 / MXDISP; POSITION; TEXT LABEL; BLOCK NUMBER MUCPRE / PREAD= -21 / PREAD; FLAG; RESULT ADDRESS; ERROR LABEL MUCCMD / CMND= -20 / CMND; OVERLAY NUMBER; ADDRESS; CIDF FIELD MUCFNM / FILNAM= -17 / FILNAM; NONAME LABEL; NOT DEFINED LABEL MUCCPY / COPY= -16 / COPY; FROM; TO MUCTRN / TRNSFR= -15 / TRNSFR; LABEL; BLOCK NUMBER MUCPQU / PQUEUE= -14 / PQUEUE; IN-QUEUE-LABEL; EMPTY-QUEUE-LABEL MUCCAS / CASE= -13 / CASE; SOURCE; VALUE; LABEL; VALUE; LABEL; ... MUCRNG / RANGE= -12 / RANGE; SOURCE; MINIMUM; MAXIMUM; ERROR LABEL MUCARG / ARG= -11 / ARG; NO ARGUEMENT LABEL; DEST OF WHERE STORED MUCSET / SET= -10 / SET; VALUE; DESTINATION MUCDSP / DISP= -7 / DISP; POSITION; IOA CONTROL STRING; ARGP1; ARGP2; ... MUCKYW / KEYWRD= -6 / KEYWRD; TEXT; LABEL; ... MUCNUM / NUMBER= -5 / NUMBER; DESTINATION; ERROR LABEL MUCGTO / GOTO= -4 / GOTO; LABEL MUCCAL / CALL= -3 / CALL; ROUTINE LABEL; ROUTINE BLOCK NUMBER MUCRET / RETURN= -2 / RETURN MUCRED / READ= -1 / READ; DESTINATION OF RESULT ADDRESS; ERROR LABEL MUCLST, MULOOP / NOOPER= 0 / ZERO VALUE COMMAND IS A MENU NO-OPERATION MUCRET, TAD MUBUF+MNSP / IS THERE A RETURN LABEL? SNA JMP MENUX / NO - RETURN TO REAL CALLER DCA T2 / SAVE AS IN TRNSFR INSTRUCTION DCA MUBUF+MNSP / CLEAR FOR NEXT TIME TAD MUBUF+MNSPTP / GET BLOCK NUMBER JMP MUCOVA / JOIN OVERLAY CODE MUCDSP, JMS MUPCWD / GET NEXT WORD DCA MUCDS1 / SAVE AS POSITION JMS I IOACAL / CALL IOA TO REPOSITION THE CURSOR /M009 OUTCHR / OUTPUT ROUTINE TO USE INAPS / ADDRESS OF THE CONTROL STRING /M007 MUTEMP, MUCDS1, 0 / SCREEN ADDRES TO POSITION THE CURSOR TO JMS MUPCP / GET ADDR PC POINTS TO (ADDR OF CTL STRING) DCA MUCDS5 / SAVE IN IOA CALL MUCDS2, MQL / Set the MCS introducer flag /a054 JMS MUPCWD / GET NEXT WORD SWP / Save the word /m054 MQA / Get it back again /a051 BSW / Test most significant part first /a054 AND P77 / Test the most significant byte /a051 SNA / Is it zero? /a051 JMP MUCDS7 / Yes, end of string found /a054 TAD (-34) / Is it a preceding MCS introducer? /a054 SNA CLA / .... /a054 JMP MUCDS2 / Yes, ignore rest of byte /a054 ACL / No, do other checks /a051 AND P77 / CHECK TO SEE IF END OF TEXT STRING SNA / /m054 JMP MUCDS7 / Yes, found end of string /m054 TAD (-34) / No, so test to MCS itroducer /a054 SNA CLA / Is it? /a054 AC4000 / Yes, so bias test for next byte /a054 JMP MUCDS2 MUCDS7, TAD (MUCDS6-1) / GET ADDR OF ARG LIST IN IOA CALL /M009 DCA X0 / SAVE FOR INDIRECTION /M009 MUCDS3, JMS MUPCWD / GET NEXT WORD SPA / SEE IF COMMAND (ALL COMMANDS NEG) JMP MUCDS4 / COMMAND TAD MUBASE / MAKE A REAL ADDR DCA I X0 / SAVE IN ARG LIST /M009 JMP MUCDS3 / TRY FOR NEXT ARG MUCDS4, AC7777 / DECR PC TAD MUBUF+MNPC DCA MUBUF+MNPC TAD MUJMP / /M009 DCA I X0 / AFTER LIST IS RETURN TO INTERPRET LOOP/M009 JMS I IOACAL 0 / OUTPUT STRING TO SCREEN MUCDS5, 0 / CTL STRING MUCDS6, ZBLOCK 6 / Max of 5 args plus location for JMP when done. MUCPQU, AC7777 / GET PRINTER QUEUE ADDR INTO X0 TAD PQADDR DCA X0 TAD (-10) / COUNT OF ENTRIES IN QUEUE DCA T1 DCA T2 / INIT TO SAY ZERO QUEUE ENTRIES (EMPTY) MUCPQ1, TAD I X0 / GET NEXT ENTRY SNA JMP MUCPQ3 / ZERO ENTRY CIA / COMPARE TO OUR FILENO TAD MUBUF+MNFNO MUCPQ2, SNA CLA / SAME FILENO? JMP MUCGTO / YES ISZ T2 / REMEMBER WE FOUND SOMETHING IN THE QUEUE MUCPQ3, ISZ X0 / SKIP LINK WORD ISZ T1 / INCR COUNT JMP MUCPQ1 / MORE TO DO JMS MUPSKP / SKIP IN-QUEUE LABEL TAD T2 / CHECK TO SEE IF QUEUE IS EMPTY MUCPQ4, SNA CLA JMP MUCGTO / YEP MUCPQ5, JMS MUPSKP / NO - SKIP EMPTY QUEUE LABEL MUJMP, JMP MULOOP / ALL DONE, RETURN TO MAIN LOOP X=. / INDICATE FIRST FREE LOCATION ON PAGE /-------------------- PAGE /*************************************************************************** /*************************************************************************** /***** D A N G E R - D O N O T M O V E ***** /***** ***** /***** C O D E I N T O O R O U T O F T H I S A R E A ***** /***** ***** /***** SWAP AREA IN CONSTANT USE BY OTHER MODULES ***** /*************************************************************************** /*************************************************************************** / MUPCP - RETURNS ADDRESS OF WORD PC POINTS TO MUPCP, XX CLA TAD MUBUF+MNPC TAD MUBASE JMP I MUPCP / MUPPCW - RETURNS WORD PC POINTS TO MUPPCW, XX JMS MUPCP DCA MUPCW1 TAD I MUPCW1 JMP I MUPPCW MUPCW1, 0 / MUPCWD - RETURNS WORD PC POINTS TO, AND INCREMENTS PC MUPCWD, XX JMS MUPPCW ISZ MUBUF+MNPC JMP I MUPCWD / MUPCST - DOES MUPCWD AND STORES AC WHERE IT POINTS MUPCST, XX DCA T1 JMS MUPCWD TAD MUBASE DCA T2 TAD T1 DCA I T2 JMP I MUPCST / MUPCLD - LOAD WORD PCWD POINTS TO MUPCLD, XX JMS MUPCWD TAD MUBASE DCA T1 TAD I T1 JMP I MUPCLD / MUPSKP - SKIP OVER LABEL (SHORT OR LONG FORM) MUPSKP, XX JMS MUPCWD / GET NEXT WORD AND THROW IT AWAY SPA / TEST FOR SHORT JUMP - SKIP IF YES JMS MUPCWD / GET NEXT WORD AND THROW IT AWAY CLA / INSURE CLEAR ACCUMULATOR JMP I MUPSKP / RETURN TO CALLER MUCARG, JMS I NXACAL / GET NEXT ARG FROM ISTR MUBUF+MNPOS MUBUF+MNARG-1 JMP MUCGTO / ERROR JMS MUPSKP / NO ERRORS, SKIP LABEL TAD (MUBUF+MNARG) / STORE ADDR IN NEXT WORD JMS MUPCST JMP MULOOP / ALL DONE, RETURN TO MAIN LOOP MUCKYW, JMS MUPCP / GET PC ADDR DCA MUCKY4 / SAVE AS ADDR OF TEXT STRING TO COMPARE WITH MUCKY2, JMS MUPCWD / GET NEXT WORD SMA / SEARCH TIL END OF STRING OR COMMAND JMP MUCKY3 / NOT COMMAND TAD P77 / COMMANDS ARE LESS THAN 64 SMA JMP MUCKY6 / COMMAND - DONE THIS ONE - GO TO NEXT IAC / GET LOW BYTE BACK FOR END OF STRING TEST MUCKY3, AND P77 / END OF STRING? SZA JMP MUCKY2 / NO JMS I STCCAL / COMPARE TEST WITH OUR STRING MUBUF+MNARG MUCKY4, 0 JMP MUCGTO / YES - GO TO LABEL IN NEXT WORD JMS MUPSKP / NO - SKIP TRANSFER LABEL JMP MUCKYW / AND TRY NEXT KEYWORD MUCKY6, AC7777 / DECR PC AND EXECUTE THE COMMAND WE JUST READ TAD MUBUF+MNPC DCA MUBUF+MNPC JMP MULOOP / ALL DONE, RETURN TO MAIN LOOP MUFGTO, CLA DCA MUBUF+MNFNO MUCGTO, JMS MUPCWD / GET NEXT WORD SPA JMP MUCOV1 / JUMP TO TRNSFR IF LONG JUMP DCA MUBUF+MNPC / AND GO THERE JMP MULOOP / ALL DONE, RETURN TO MAIN LOOP MUCPRE, JMS MUPCWD / GET FLAG WORD MUCRED, DCA MUBUF+MNSYSA / SAVE IT TAD (MUBUF+MNIBUF) DCA MUBUF+MNPOS / SET TO START OF STRING TAD (MUBUF+MNIBUF) / MOVE ADDR TO WORD JMS MUPCST TAD MUBUF+MNSYSA / GET FLAG WORD JMS I INACAL / INPUT LINE MUBUF+MNIBUF-1 JMP MUCRE1 / ERROR JMP MUCPQ5 / DONE, SKIP ERROR LABEL, RETURN TO MAIN LOOP MUCRE1, AND P3777 / MAKE ALWAYS POSITIVE DCA MUBUF+MNSYSA / SAVE IN LOCATION USER CAN GET TO JMP MUCGTO / GO TO ERROR LABEL MUCRNV= MUCKY4 / USE FOR TEMPORARY STORAGE MUCNUM, JMS I CVDCAL / CONVERT TO BINARY MUBUF+MNARG JMP MUCNU1 / ERROR RETURN JMS MUPCST / SAVE VALUE IN DEST JMP MUCPQ5 / DONE, SKIP ERROR LABEL, RETURN TO MAIN LOOP MUCRNG, JMS MUPCLD / GET SOURCE VALUE FOR RANGE CHECK DCA MUCRNV / SAVE IT JMS MUPCWD / GET MINIMUM RANGE VALUE CLL CIA / COMPARE TO SOURCE VALUE TAD MUCRNV SNL / SKIP IF VALUE IS NOT SMALLER THAN MINIMUM JMP MUCNU1 / ERROR - GO TO ERROR LABEL JMS MUPCWD / COMPARE WITH MAXIMUM RANGE VALUE CLL CIA TAD MUCRNV SNL / SKIP IF VALUE IS NOT SMALLER THAN MAXIMUM JMP MUCPQ5 / OK - IT IS WITHIN RANGE MUCRN0, SZA / RETURN HERE FROM BIT TEST COMMAND JMP MUCGTO / NOT EQUAL - GO TO ERROR LABEL JMP MUCPQ5 / DONE, SKIP ERROR LABEL, RETURN TO MAIN LOOP MUCNU1, JMS MUPCWD / SKIP DESTINATION ADDRESS OR SKIP MAX WORD JMP MUCGTO / AND GO TO ERROR LABEL MUCCMD, JMS MUPCWD / COPY IN VALUES DCA MUBUF+MNONUM JMS MUPCWD DCA MUBUF+MNOADR JMS MUPCWD DCA MUBUF+MNOFLD JMP MULOOP / ALL DONE, RETURN TO MAIN LOOP MUHALT, HLT X=. / INDICATE FIRST FREE LOCATION ON PAGE /-------------------- PAGE /*************************************************************************** /*************************************************************************** /***** D A N G E R - D O N O T M O V E ***** /***** ***** /***** C O D E I N T O O R O U T O F T H I S A R E A ***** /***** ***** /***** SWAP AREA IN CONSTANT USE BY OTHER MODULES ***** /*************************************************************************** /*************************************************************************** MUCCAS, JMS MUPCLD / GET SOURCE CIA DCA MUCCAV / SAVE MUCCA1, JMS MUPCWD / GET NEXT VALUE TO COMPARE WITH SPA / ***** NEGATIVE MEANS COMMAND ***** JMP MULXEQ / CAN'T COMPARE TO NEGATIVE NUMBERS TAD MUCCAV SNA JMP MUCGTO / MATCH - GO TO ASSOCIATED LABEL JMS MUPSKP / NO MATCH - SKIP OVER LABEL JMP MUCCA1 / AND TRY NEXT ELEMENT IN LIST MUCCAV, 0 MUCCAL, AC0002 TAD MUBUF+MNPC / SAVE PC AND BLOCK NUMBER FOR RETURN DCA MUBUF+MNSP / ADD 2 TO PC TO SKIP OVER TRNSFR WORDS TAD MUCBLK / PICK UP NUMBER OF MENU BLOCK IN MEMORY /M037 DCA MUBUF+MNSPTP / NOW TREAT AS IF A TRNSFR INSTRUCTION MUCTRN, JMS MUPCWD / GET JUMP LABEL MUCOV1, SPA CMA / FIX IF COMPLEMENTED DCA T2 / SAVE FOR NEW PC JMS MUPCWD / GET BLOCK NUMBER TO OVERLAY MUCOVA, DCA QUQBLK+RXQBLK / SAVE AS BLOCK NUMBER TAD T2 / SET NEW PC DCA MUBUF+MNPC TAD QUQBLK+RXQBLK / CHECK FOR BLOCK ALREADY IN CORE. CIA TAD MUCBLK / COMBINE WITH RESIDENT MENU BLOCK NUMBER /M037 SNA CLA JMP MULOOP / IF ALREADY THERE, RETURN TO MAIN LOOP TAD QUQBLK+RXQBLK / SAVE IN OUR TEMP DCA MUCBLK / UPDATE NUMBER OF RESIDENT MENU BLOCK /M037 TAD (MUBUF) / READ INTO BUFFER JMS MUQURX / READ THE DISK BLOCK JMP MULOOP / DO FIRST COMMAND, RETURN TO MAIN LOOP MUCBLK, 0 / LOCATION FOR RESIDENT MENU BLOCK NUMBER /A037 MUQURX, XX / READ A DISK BLOCK ROUTINE DCA QUQBLK+RXQBAD TAD GETMYF / SET TO OUR FIELD /M023 DCA QUQBLK+RXQBFD TAD (RXERD) / DO A READ OPERATION DCA QUQBLK+RXQFNC DCA QUQBLK+RXQDRV / MENUES ARE ON DRIVE 0 JMS QURX / SEND READ REQUEST TO DISK TASK JMP I MUQURX / RETURN TO CALLER / 'RDFNUM' LOOKS FOR THE DOCUMENT NUMBER IN A FORMAT THAT OCCURS IN / THE INDEX. IF IS NOT NECESSARY TO TEST FOR IMBEDDED WORD WRAP CARRIAGE / RETURNS, ETC. BECAUSE A BLANK PRECEDES THE CONSTRUCTION <#>NUM, SO ANY WORD / WRAPS WOULD HAVE OCCURRED AT THAT BLANK. RDFSRC, XX RDFSL1, CLA TAD I RDFSRC / GET ARG - ADDR OF STRING TO COMPARE DCA RDFSSP RDFSL2, JMS MURDC / GET NEXT CHAR FROM FILE SNA JMP RDFSNM / NO MATCH - END OF FILE JMS MUFXLU / XLAT TO UPPER CASE CIA DCA T1 / SAVE FOR COMPARE TAD I RDFSSP / GET NEXT CHAR FROM STRING JMS MUFXLU / XLAT TO UPPER CASE TAD T1 / COMPARE WITH CHAR FROM FILE SZA CLA / EQUAL? JMP RDFSL1 / NO - RE-INIT ISZ RDFSSP / GET NEXT CHAR FROM STRING TAD I RDFSSP SZA CLA / END? JMP RDFSL2 / NO - CHECK NEXT CHAR ISZ RDFSRC / SKIP RETURN RDFSNM, ISZ RDFSRC JMP I RDFSRC / RETURN RDFSSP, 0 RDFNUM, XX / READ NUMBER FROM FILE CLA DCA RDFNV / INIT VALUE RDFNL1, JMS MURDC / GET NEXT CHAR TAD (-72) / NUMERIC? SMA JMP RDFNDN / NO TAD (12) SPA JMP RDFNDN / NO DCA T1 / SAVE TAD RDFNV / MULT WHAT WE HAVE SO FAR BY 10. CLL RTL TAD RDFNV CLL RAL TAD T1 / ADD NEXT DIGIT DCA RDFNV / SAVE JMP RDFNL1 / NEXT CHAR RDFNDN, CLA TAD RDFNV / GET VALUE JMP I RDFNUM / RETURN RDFNV, 0 MURDC, XX / READ NEXT CHAR FROM INDEX FILE MURDC1, CIFFIO / MAP FILE SYSTEM. FILEIO / CALL FILE SYSTEM TO XRDFNC / GET CHAR SPA CLA / Treat "read errors" like E-O-F. TAD (-2012) / IGNORE WORD WRAP CR SZA TAD (2012-2040) / ALSO IGNORE WORD WRAP BLANKS SNA / EITHER? JMP MURDC1 / YES, GET NEXT CHARACTER TAD (2040) / RESTORE CHARACTER AND P177 / ONLY ASCII PART IS OF INTEREST TAD (-7) / CHECK FOR WORD WRAP MARKS SNA JMP MURDC1 TAD (7) JMP I MURDC / DONE X=. / INDICATE FIRST FREE LOCATION ON PAGE /-------------------- PAGE /*************************************************************************** /*************************************************************************** /***** D A N G E R - D O N O T M O V E ***** /***** ***** /***** C O D E I N T O O R O U T O F T H I S A R E A ***** /***** ***** /***** SWAP AREA IN CONSTANT USE BY OTHER MODULES ***** /*************************************************************************** /*************************************************************************** / FILNAM - Test the rest of the input string to see if it is the name / of an existing file. Syntax is as follows: / FILNAM Operation code name / Noname Label Where to go when there are no more tokens. / Notvalid Label Where to go when the string is not the name / of an existing file or there is a drive error. / Normal Return Return here if name or number is valid. MUFT11, .-. / Location of Alternate string pointer / Make a special check to see if there are any tokens on the line. This / is to prevent a user error from accidently clearing the FNAMBF locations MUCFNM, TAD MUBUF+MNPOS / Get pointer to string address DCA MUFT11 / Set up alternate string pointer location JMS I NXACAL / Pick up next token using Page 0 Reference MUFT11 / Address of string pointer MUBUF+MNARG-1 / Pointer to string length and buffer address JMP MUCGTO / ERROR - Empty line / Set up default conditions. Use Drive 1 and clear File Name Buffer AC0001 / DEFAULT DRIVE IS 1 /D037 TAD MUBUF+MNUSR2 / Pick up the USER number DCA MUBUF+MNDRV / Store DRIVE number DCA FNAMBF / Initial name is null so clear buffer pointer TAD (-STRLEN+1) / Pick up maximum buffer length DCA FNAMB1 / Store buffer length for =nxtarg= call / LOOK FOR LEADING NUMBER JMS MUFNUM / Check for a leading number JMP MUFL2 / NOT A NUMBER, GO CHECK FOR A BRACE / LOOK FOR =.= / USE ALTERNATE =NXTARG= CALL AND BUFFER AREA TO AVOID LOSING THE / CONTENTS OF THE ARGUMENT BUFFER =FNAMSP= WHEN NOTHING FOLLOWS THE / NUMBER. (THIS IS TO ACCOMODATE CREATE) JMS I NXACAL / Pick up next token using Page 0 Reference MUBUF+MNPOS / Address of string pointer MUKST2-1 / Pointer to string length and buffer address JMP MUF1NM / Empty line - Must be Document number / CLA / Not needed - NXACAL will clear the AC TAD MUKST2 / Pick up the character just returned TAD (-56) / Compare to the value for a PERIOD SZA CLA / Skip if a match JMP MUF1NM / IF NOT A =.= IGNORE THE TOKEN / LOOK FOR NUMBER OR DOCUMENT NAME TAD MUBUF+MNDOCN / Get the number that the user entered DCA MUBUF+MNDRV / Save as the dirve number JMP MUF0NM / GO TRANSFER NAME, ETC. / LOOK FOR ={NUM=, =[NUM=, ={DOC= OR =[DOC= SYNTAXES. FIRST, ={= OR =[= MUFL2, TAD FNAMBF / GET FIRST CHARACTER OF TOKEN TAD (-173) / CHECK FOR A CURLY BRACKET SZA / SKIP IF YES TAD (173-133) / CHECK FOR A SQUARE BRACKET SZA CLA / SKIP IF YES JMP MUF1NA / IF NOT ={= OR =[=, MUST BE A NAME. /D037 TAD MUBUF+MNUSR2 / Get user number DCA MUBUF+MNDRV / RESET DEFAULT DRIVE TO SYSTEM DRIVE / LOOK FOR NUMBER OR NAME MUF0NM, JMS MUFNUM / Check for a leading number JMP MUF1NA / NOT A NUMBER, GO PROCESS NAME MUF1NM, JMS MUFDRA / VALIDATE DRIVE NUMBER AND POSITION IT JMP MUFCN / Skip INDEX lookup code, DOC num is known / FINISH PROCESSING DOCUMENT NAME MUF1NA, JMS MUFDRA / VALIDATE AND POSITION FLOPPY NUMBER MUFN1, TAD (FNAMB3-1) / GET ADDR OF BUFFER DCA X0 / SAVE IN INDEX REG TAD (74) / ASCII CODE FOR LEFT BRACKET DCA I X0 / PATCH IN LEFT BRACKET TAD (156) / ASCII CODE FOR LOWER CASE "N" DCA I X0 / PATCH IN LOWER CASE "N" TAD (76) / ASCII CODE FOR RIGHT BRACKET DCA I X0 / PATCH IN RIGHT BRACKET AC7777 TAD MUBUF+MNPOS / GET ADDR AND PUT IN X1 DCA X1 MUFN2, TAD I X0 / FIND END OF LAST TOKEN, / SO WE CAN ADD REST OF NAME SZA CLA JMP MUFN2 MUFN3, AC7777 / BACK UP TAD X0 DCA X0 MUFN3A, TAD I X1 / COPY IN THE REST SNA JMP MUFN4 DCA I X0 JMP MUFN3A MUFN4, TAD (" -200) / ADD A SPACE AT THE END DCA I X0 DCA I X0 / AND MAKE ASCIZ AC0001 / GET DOCUMENT 1 FROM FLOPPY TAD MUFDR2 CIFFIO / FILEIO / XRDFIN / INIT INDEX FOR READ JMS RDFSRC / SEARCH FOR NAME FNAMB3 / FILE NAME BUFFER MINUS THREE LOCATIONS JMP MUFGTO / NOT FOUND JMS RDFSRC / NOW LOOK FOR # THING MUFNST JMP MUFGTO / NOT FOUND JMS RDFNUM / GET THE NUMBER DCA MUBUF+MNDOCN MUFCN, TAD MUBUF+MNDOCN / PUT DRIVE NUMBER INTO MENU TAD MUFDR2 DCA MUBUF+MNFNO TAD MUBUF+MNDOCN / SEE IF ZERO (ERROR) SNA CLA JMP MUFGTO / YES, IT IS ZERO, WHICH IS NOT LEGAL TAD MUBUF+MNDOCN / GET NUMBER AGAIN DCA QUQBLK+RXQFNO / SAVE AS NUMBER TAD QUQBLK+RXQFNO / CHECK RANGE TAD (-MAXDOC) SMA CLA JMP MUFGTO / BAD NUMBER - DOESN'T EXIST TAD (RXEGF+4000) / GET FIRST BLOCK NUMBER DCA QUQBLK+RXQFNC JMS QURX SPA CLA JMP MUFGTO / IF DISK ERROR RETURN AS AN ERROR TAD QUQBLK+RXQBLK / GET FIRST BLOCK NUMBER JMP MUCPQ4 / GO JOIN TESTING CODE / ZERO VALUE MEANS NOT DEFINED - ERROR / ELSE DONE, SKIP NOT DEFINED LABEL -1 / USE ONLY A 1 CHARACTER BUFFER FOR MUKST2, ZBLOCK 2 / THE =NXTARG= BUFFER USED WHEN LOOKING FOR A / PERIOD. MUFNST, "<-200;"#-200;">-200;0 X=. / INDICATE FIRST FREE LOCATION ON PAGE /-------------------- PAGE /*************************************************************************** /*************************************************************************** /***** D A N G E R - D O N O T M O V E ***** /***** ***** /***** C O D E I N T O O R O U T O F T H I S A R E A ***** /***** ***** /***** SWAP AREA IN CONSTANT USE BY OTHER MODULES ***** /*************************************************************************** /*************************************************************************** / MUFNUM WILL CHECK THE FILE NAME BUFFER FOR A LEADING NUMBER AND / THEN CHECK IT FOR A RANGE OF 0 - 999. A NUMBER GREATER THAN 999 / IS TO BE CONSIDERED THE START OF A VALID DOCUMENT NAME. / THE CALL IS AS FOLLOWS: / JMS MUFNUM / CHECK FOR A LEADING NUMBER / NOT VALID NUMBER RETURN / NORMAL RETURN / UPON RETURN, THE AC WILL BE CLEAR MUFNUM, XX JMS I NXACAL / MOVE UP TO THE NEXT TOKEN MUBUF+MNPOS / POSITION COUNTER FNAMB1 / FILE NAME BUFFER LESS ONE LOCATION JMP MUFGTO / ERROR - EMPTY LINE JMS I CVDCAL / CHECK FOR A LEADING NUMBER FNAMBF / ADDRESS OF THE FILE NAME BUFFER JMP I MUFNUM / IT'S NOT A NUMBER, BUT IT MIGHT BE A NAME TAD (-1750) / CHECK FOR A NUMBER LARGER THAN 999 SZL CLA / CLEAR LINK MEANS NUMBER IN RANGE 0-999 JMP I MUFNUM / NOT VALID NUMBER, USE AS DOCUMENT NAME TAD T2 / RECOVER NUMBER STORED IN T2 BY CVDBN ROUTINE DCA MUBUF+MNDOCN / SAVE NUMBER AS DOCUMENT NUMBER ISZ MUFNUM / INCREMENT PAST ERROR RETURN JMP I MUFNUM / RETURN TO CALLER / MUFDRA VALIDATES AND POSITIONS THE DRIVE NUMBER. IT ALSO WILL DO / A DENSITY CHECK ON THE DRIVE TO VERIFY THAT IT EXISTS. UPON RETURN, / MUFRDV CONTAINS THE DRIVE NUMBER AS AN INTEGER AND, / MUFDR2 CONTAINS THE DRIVE NUMBER POSITIONED TO BE / COMBINED WITH THE DOCUMENT NUMBER. MUFDRA, XX TAD MUBUF+MNMXDR / Get the MAXIMUM number of drives on system CIA / Negate the value for comparison TAD MUBUF+MNDRV / Combine with the USER sepcified drive number SMA SZA CLA / Check for within range JMP MUFGTO / IF OUT OF RANGE, JUMP JMS MUPSKP / SKIP =NO NAME= LABEL IN MENU TAD MUBUF+MNDRV / Pick up the DRIVE number BSW;RTL CLL / PUT INTO BITS 0-3 DCA MUFDR2 / Save for later use JMS CLRDSK / CLEAR MEMORY OF DISKETTE /A010 TAD MUBUF+MNDRV / Get the dirve number DCA QUQBLK+RXQDRV / Put in Q-block TAD (RXEDN+4000) / Pick up FUNCTION code for DENSITY check DCA QUQBLK+RXQFNC / Put is Q-block JMS QURX / Perform DENSITY check SPA CLA / IF UNABLE TO READ DISK THEN JMP MUFGTO / TREAT AS ERROR. JMP I MUFDRA / Return to caller MUFDR2, 0 / USED TO CONTAIN THE POSITIONED DRIVE NUMBER. / MUCBRK - PROCESS 'FBREAK' OPERATION. THE FOLLOWING GUIDELINES SHOULD BE / USED IN REGARDS TO THE CONTENTS OF 'MNFNO' / 1. 'FILNAM' SETS 'MNDRV' AND 'MNDOCN' WHEN DEFINING 'MNFNO'. / 2. 'FBREAK' CAN BE USED TO REDEFINE 'MNDOCN' AND 'MNDRV', BUT / ANY ROUTINES TO DO THIS SHOULD RETURN 'MNDRV' AND 'MNDOCN' / TO AGREEMENT WITH 'MNFNO'. ('FBREAK' CAN BE USED TO DO THIS) / / FBREAK; ADDRESS OF WORD CONTAINING PACKED FILE AND DRIVE NUMBERS MUCBRK, JMS MUPCLD / GET FILE NUMBER WITH DRIVE NUMBER AND P377 / MASK OFF FILE NUMBER DCA MUBUF+MNDOCN / STORE AS DOCUMENT NUMBER TAD I T1 / GET FILE NUMBER WITH DRIVE NUMBER BSW;RTR / POSITION TO ISOLATE DRIVE NUMBER AND (17) / MASK OFF DRIVE NUMBER DCA MUBUF+MNDRV / STORE DRIVE NUMBER JMP MULOOP / ALL DONE, RETURN TO MAIN LOOP MUFXLU, XX / XLAT CHAR IN AC TO UPPER CASE TAD (-140) / LOWER CASE? SPA TAD (40) / SKIP IF SO TAD (100) / GET BACK TO CORRECT CODE JMP I MUFXLU / AND RETURN /*************************************************************************** /*************************************************************************** /***** D A N G E R - D O N O T M O V E ***** /***** ***** /***** C O D E I N T O O R O U T O F T H I S A R E A ***** /***** ***** /***** SWAP AREA IN CONSTANT USE BY OTHER MODULES ***** /*************************************************************************** /*************************************************************************** /******************************************************************* /******************************************************************* /**** **** /**** NEW BIT TEST MENU COMMAND **** /**** **** /**** TRANSFER TO LABEL IF ALL SPECIFIED MASK BITS ARE CLEAR **** /**** **** /******************************************************************* /******************************************************************* / COMMAND FORMAT OF TEST BIT INSTRUCTION / ........................................ / : TSTBIT ; : NUMVAR ; : MASK ; : LABEL : / :..........:..........:........:.......: / WHERE: / TSTBIT = THE NAME OF THE TEST BIT INSTRUCTION / NUMVAR = THE ADDRESS OF THE SOURCE VALUE TO BE TESTED / MASK = THE VALUE OF THE MASK WORD TO BE USED / LABEL = THE LABEL TO TRANSFER TO IF RESULT IS ZERO MUCTSB, JMS MUPCLD / GET SOURCE VALUE DCA T1 / SAVE VALUE FOR LATER USE JMS MUPCWD / GET MASK VALUE AND T1 / CLEAR BITS WITH SOURCE VALUE / REVERSE SENSE OF MASK OPERATION SNA CLA / IF NON ZERO RESULT, MAKE IT ZERO IAC / MAKE ZERO RESULT VALUE NON ZERO JMP MUCRN0 / GOTO RANGE CODE TO PERFORM TEST /*************************************************************************** /*************************************************************************** /***** D A N G E R - D O N O T M O V E ***** /***** ***** /***** C O D E I N T O O R O U T O F T H I S A R E A ***** /***** ***** /***** SWAP AREA IN CONSTANT USE BY OTHER MODULES ***** /*************************************************************************** /*************************************************************************** /*************************************************************************** /**** CLRV,INCV,STOV ROUTINES **** /*************************************************************************** MUSTOV, TAD MUBUF+MNMUTM / STORE A VALUE COMMAND - STOV ; DESTINATION JMP MUSTO1 / COPY MNMUTM TO THE DESTINATION ADDRESS MUCLRV, DCA MUBUF+MNMUTM / CLEAR THE VALUE COMMAND JMP MULOOP / ALL DONE, RETURN TO MAIN LOOP MUINCV, ISZ MUBUF+MNMUTM / INCREMENT THE VALUE NOP / DON'T CARE FOR SKIP RETURN JMP MULOOP / ALL DONE, RETURN TO MAIN LOOP /*************************************************************************** /**** COPY AND SET ROUTINES **** /*************************************************************************** MUCCPY, JMS MUPCLD SKP MUCSET, JMS MUPCWD /GET DESTINATION MUSTO1, JMS MUPCST /STORE AC IN WHERE NEXT WORD POINTS JMP MULOOP / ALL DONE, RETURN TO MAIN LOOP /*************************************************************************** /**** **** /**** CLRRTN--CLEAR PENDING RETURN **** /**** FORM: CLRRTN /CLEAR PENDING RETURN **** /**** (NO ARGUMENTS) **** /**** THIS SINGLE WORD MENU OPERATOR IS USED TO CLEAR ANY **** /**** PENDING RETURN. ONE APPLICATION OF THIS OPERATOR IS **** /**** TO BE ABLE TO ISSUE A CMND;RETURN INSIDE A MENU **** /**** SUBROUTINE AND HAVE IT TAKE EFFECT IMMEDIATELY. **** /**** ANOTHER APPLICATION IS TO PERMIT A TRANSITION TO **** /**** ASSEMBLY LANGUAGE, RETURN TO MENU CODE VIA A **** /**** JMS I MNUCAL, DO A CLRRTN;CMND;RETURN, AND HAVE THE **** /**** CMND STATEMENT TAKE EFFECT IMMEDIATELY **** /**** **** /*************************************************************************** MUCLRT, DCA MUBUF+MNSP / CLEAR ANY PENDING RETURN TAD (CDIMNU) DCA MENUX TAD (CMNDLP) DCA MENU JMP MULOOP / ALL DONE, RETURN TO MAIN LOOP /*************************************************************************** /*************************************************************************** /***** D A N G E R - D O N O T M O V E ***** /***** ***** /***** C O D E I N T O O R O U T O F T H I S A R E A ***** /***** ***** /***** SWAP AREA IN CONSTANT USE BY OTHER MODULES ***** /*************************************************************************** /*************************************************************************** /*************************************************************************** /**** MENU INSTRUCTION "MXDISP" **** /*************************************************************************** / THIS MENU STATEMENT READS A PURE TEXT OVERLAY INTO "MUXBUF" WHICH AT THIS / WRITING IS THE PRINT SCREEN BUFFER. THE PURE TEXT OVERLAY CONTAINS "TEXT" / STATEMENTS ONLY. IT DOES NOT CONTAIN ATTRIBUTES SUCH AS "!S", OR "^A", ETC. / THE MENU CALL FROM WITHIN THE "NORMAL" MENU OVERLAYS IS: / MXDISP ; POSITION ; TEXT LABEL ; BLOCK NUMBER / POSITION IS THE LINE/COLUMN POSITION IN STANDARD IOA FORMAT: / BITS 0-5 ARE THE LINE NUMBER FROM 0 TO 23 OCTAL, AND / BITS 6-11 ARE THE COLUMN NUMBER FROM 0 TO 117 OCTAL. / (REMEMBER THAT THE SCTEEN IS 24 LINES BY 80 COLUMNS) / TEXT LABEL IS THE ADDRESS LABEL OF THE TEXT STATEMENT TO DISPLAY (0-377) / BLOCK NUMBER IS THE OVERLAY DISK BLOCK NUMBER CONTAINING THE TEXT STATEMENT MUXDSP, JMS MUPCWD / GET THE LINE/COLUMN SCREEN POSITION DCA MUXP / STORE IN IOA CALL (WILL LOOK LIKE AN ^P) JMS MUPCWD / GET THE TEXT STRING ADDRESS LABEL AND P377 / MASK OFF ANY HIGH ORDER BITS TAD (MUXBUF) / COMBINE WITH BUFFER ADDRESS DCA MUXS / STORE IN IOA CALL (WILL LOOK LIKE AN ^S) JMS MUPCWD / GET THE DISK BLOCK NUMBER TO READ IN DCA QUQBLK+RXQBLK / STORE IN QUEUE BLOCK TAD QUQBLK+RXQBLK / GET THE BLOCK NUMBER BACK AGAIN CIA / NEGATE IT TAD MUXBLK / COMBINE WITH RESIDENT OVERLAY BLOCK NUMBER SNA CLA / CHECK TO SEE IF THE BLOCK IS ALREADY LOADED JMP MUXOK / YES, WE HAVE IT IN MEMORY, DON'T READ IT AGAIN TAD QUQBLK+RXQBLK / GET THE BLOCK NUMBER BACK AGAIN DCA MUXBLK / SAVE THE BLOCK NUMBER FOR THE NEXT CALL TAD (MUXBUF) / PICK UP THE BUFFER ADDRESS FOR THE TRANSFER JMS MUQURX / READ IN THE TEXT BLOCK OVERLAY MUXOK, JMS I IOACAL / CALL THE SCREEN DISPLAY ROUTINE 0 / USE DEFAULT OUTPUT ROUTINE MUXCTL / ADDRESS OF THE TEXT CONTROL STRING MUXP, 0 / LINE/COLUMN DISPLAY POSITION (LOOKS LIKE ^P) MUXS, 0 / ADDRESS OF TEXT STRING (LOOKS LIKE ^S) JMP MULOOP / ALL DONE, RETURN TO MAIN LOOP MUXBLK, 0 / LOCATION TO STORE DISPLAY BLOCK NUMBER /A021 MUXCTL, TEXT '^P^S' / CONTROL STRING FOR DISPLAY OUTPUT ROUTINE X=. / INDICATE FIRST FREE LOCATION ON PAGE /-------------------- PAGE /*************************************************************************** /*************************************************************************** /***** D A N G E R - D O N O T M O V E ***** /***** ***** /***** C O D E I N T O O R O U T O F T H I S A R E A ***** /***** ***** /***** SWAP AREA IN CONSTANT USE BY OTHER MODULES ***** /*************************************************************************** /*************************************************************************** /*************************************************************************** /**** NXTARG - NEXT ARGUMENT ROUTINE - BREAKS ASCIZ STRING INTO TOKENS **** /*************************************************************************** / / JMS NXTARG / ADDR OF ADDR OF STRING1 (SOURCE) / ADDR OF BUFFER LIKE FOR INA (DESTINATION) / RETURN ON NO ARGS / NORMAL RETURN / / THE FIRST ARGUMENT WILL BE CHANGED SO THAT SUCCESSIVE / CALLS WILL PICK UP THE ARGUMENTS ONE AT / A TIME. / NXTARG, XX CLA RDF / SAVE RETURN FIELD TAD CIDF0 DCA NXTARX TAD I NXTARG / GET ADDR OF ADDR OF STRING ISZ NXTARG DCA T3 / SAVE AC7777 TAD I T3 / GET ADDR IT POINTS TO DCA X0 / SAVE AS S1 POINTER AC7777 TAD I NXTARG / GET NEXT ARG - ADDR OF BUFFER TO PUT IT IN ISZ NXTARG DCA X1 / SAVE AS ADDR OF S2 TAD I X1 / GET FIRST WORD - THE MAX DCA T1 / SAVE AS COUNT FOR S2 DCA T2 / INIT COUNT OF NUMBER PLACED IN S2 NXTAL1, TAD I X0 / GET NEXT CHAR MQL MQA / SAVE IT DCA MQSAV TAD MQSAV SNA JMP NXTADN / ZERO IS THE END OF THE STRING TAD (-40) / BLANK? SNA JMP NXTABL / YES - A BLANK TAD (40-60) SPA JMP NXTABS / SOME SPECIAL CHAR TAD (60-72) SPA JMP NXTAOK / OK - A NUMERIC CHAR TAD (72-101) SPA JMP NXTABK / SPECIAL CHAR TAD (101-141) SMA TAD (-40) / GET COLUMNS FROM ASCII CHART TOGETHER TAD (141-133) SMA JMP NXTABK / SPECIAL CHARS NXTAOK, ISZ T1 / ANY MORE ROOM? SKP CLA / YES JMP NXTAOV / NO ISZ T2 / INCR COUNT OF NUMBER GOTTEN SO FAR TAD MQSAV / GET CHAR AGAIN DCA I X1 / SAVE IN OUTPUT PLACE NXTANC, JMP NXTAL1 / GET NEXT ONE NXTAMN, TAD NXDINP / Are we in a dead seq ? /A044 SNA CLA / /A044 JMP NXTADN / No , space is a terminator /A044 JMP NXTAOK / Yes , its part of string /A044 NXTABK, CLA TAD T2 / ANY GOTTEN YET? SZA CLA JMP NXTADN / YES - SAVE BREAK CHAR FOR NEXT TIME ISZ T2 / ASSUME THAT IT FITS / (BUFFER MUST HOLD AT LEAST ONE) TAD MQSAV / GET CHAR DCA I X1 / SAVE IN OUTPUT BUFFER ISZ X0 / INCR ADDR FOR NEXT TIME NXTAOV, NXTADN, CLA DCA I X1 / STORE ZERO THERE (TO MAKE IT ASCIZ) TAD T2 / GET NUMBER OF CHARS IN TOKEN SZA CLA ISZ NXTARG / ZERO MEANS NON-SKIP RETURN, SKIP OTHERWIZE TAD X0 / GET UPDATED ADDR DCA I T3 / SAVE WHERE CALLER KEEPS STRING POINTER NXTARX, .-. / RETURN CIF-CDF JMP I NXTARG / RETURN TO CALLER NXDINP, 0 / Dead sequence in progress flag /A044 MQSAV, 0 / Saved MQ reg /A044 /*************************************************************************** /*************************************************************************** /***** D A N G E R - D O N O T M O V E ***** /***** ***** /***** C O D E I N T O O R O U T O F T H I S A R E A ***** /***** ***** /***** SWAP AREA IN CONSTANT USE BY OTHER MODULES ***** /*************************************************************************** /*************************************************************************** /*************************************************************************** /**** STRCMP - STRING COMPARE - COMPARES ASCIZ STRING TO TEXT STRING **** /*************************************************************************** / / JMS STRCMP / ADDR OF ASCIZ STRING / ADDR OF TEXT STRING / EQUAL RETURN, AC = 0 / NOT EQUAL RETURN, AC = 0 / / NOTE THAT CASE IS IGNORED / STRCMP, XX CLA TAD I STRCMP / GET ADDR OF S1, THE ASCIZ STRING ISZ STRCMP DCA STRCS1 / SAVE TAD I STRCMP / GET ADDR OF S2, THE TEXT STRING ISZ STRCMP DCA STRCS2 / SAVE DCA STRCOF / INIT OFFSET INTO TEXT STRING JMS GETCID / GET THE CALLER'S DATA FIELD INST. /A023 DCA STRCEQ / SAVE FOR RETURN TO CALLER /A023 AC7776 / SET UP FOR A DECREMENT OF TWO /A023 TAD STRCEQ / COMBINE WITH RETURN CDF-CIF INST. /A023 DCA IOACDF+1 / SAVE FOR GETCHR INTO CALLERS FIELD /A023 STRCL1, JMS IOACDF / SWITCH FIELDS TAD I STRCS1 / GET CHAR FROM ASCIZ STRING CDFMYF / BACK TO MY FIELD ISZ STRCS1 / INCR FOR NEXT TIME SNA / END? JMP STRCEQ / YES - STRINGS EQUAL SO FAR AND P177 / ONLY ASCII PART TAD (-140) / MAKE SIXBIT SPA TAD (140) AND P77 DCA STRCCH / SAVE AS CHAR TO COMPARE WITH JMS GETCHR / GET NEXT CHAR FROM TEXT STRING STRCOF / OFFSET ADDR STRCS2, 0 / ADDR OF TEXT STRING ISZ STRCOF / INCR OFFSET FOR NEXT TIME SNA JMP STRCEQ / DONE THIS STRING - EQUAL CIA / NEGATE TAD STRCCH / ADD OTHER CHAR SNA CLA JMP STRCL1 / EQUAL, TRY NEXT CHARS STRCNE, ISZ STRCMP / NOT EQUAL IS SKIP RETURN STRCEQ, .-. / AND DO IT JMP I STRCMP / RETURN TO CALLER STRCCH, 0 STRCS1, 0 STRCOF, 0 X=. / INDICATE FIRST FREE LOCATION ON PAGE /-------------------- PAGE /*************************************************************************** /*************************************************************************** /***** D A N G E R - D O N O T M O V E ***** /***** ***** /***** C O D E I N T O O R O U T O F T H I S A R E A ***** /***** ***** /***** SWAP AREA IN CONSTANT USE BY OTHER MODULES ***** /*************************************************************************** /*************************************************************************** /*************************************************************************** /**** MXDISP BUFFER AREA **** /*************************************************************************** MUXBUF, ZBLOCK 400 / WAS 6400 AND SHOULD NOW BE 5400 / END IFDEF CONDOR /*************************************************************************** /**** MENU OVERLAY AND VARIABLE STORAGE AREA **** /*************************************************************************** *MUBUF / WAS 5400 AND NOW SHOULD BE 6000 / THIS IS THE AREA WHERE INDIVIDUAL MENU BLOCKS ARE LOADED FOR / EXECUTION BY THE MENU INTERPRETER. THE MENU BLOCK WHICH IS / ASSEMBLED HERE IS FOR STARTUP AND FINISH USING SYSTEM. / MUBUF IS THE BASE ADDRESS USED BY ROUTINES TRYING TO GET MENU VALUES. / FOR EXAMPLE TO GET MNTMP1 USE MUBUF+MNTMP1 FOR THE ADDRESS. MUBUF, RELOC 0 CASE;MNTMP1 / CHECK FOR TYPE OF MENU ENTRY 0;FN1BG / COLD START ENTRY VALUE 1;FN1BG / WARM START ENTRY VALUE /M024 2526;FN1S / FINISH USING THE SYSTEM VALUE (WINNIE)/M024 2525;FN1S / FINISH USING SYSTEM (NON-WINNIE) /A030 / SEE ALSO MN1, TAGS MM1OK,MM1WIN,MM0F0K/A030 DISP;0;TEXT '!E ILLEGAL ENTRY INTO DLMFN1';MNHALT FN1S, TSTBIT;MNOPTN;MNRX5X;FN1RD / IS WINNIE ON LINE? /A008 IFDEF ENGLSH < DISP;2515;TEXT '&PRESS !&RETURN TO RECALL &MASTER &MENU' DISP;2615;TEXT '!&OR &GOLD !&MENU TO GO TO &MAIN &MENU' /A008 > / END IFDEF ENGLISH IFDEF ITALIAN < DISP;2505;TEXT '&PREMERE !&RITORNO PER TORNARE AL &MASTER &MENU' DISP;2605 TEXT '&OPPURE PREMERE &ORO &MENU PER RICHIAMARE IL &MENU &PRINCIPALE' > IFDEF V30SWE < DISP;2515;TEXT '&TILLBAKA TILL INLEDNINGSMENYN: TRYCK P\E RETUR' DISP;2615;TEXT '&TILLBAKA TILL HUVDMENYN: ANV\DND GULD MENY' /A008 > / END IFDEF V30SWE IFDEF V30NOR < DISP;2515;TEXT '&TRYKK P\E !&RETUR FOR \E F\E &STARTMENYEN' DISP;2615;TEXT '&EL. &GULL !&MENY FOR \E F\E &HOVEDMENYEN' > / END IFDEF V30NOR IFDEF DUTCH < DISP;2515 TEXT '&DRUK OP !&RETURN OM TERUG TE GAAN NAAR HET &MASTER &MENU' DISP;2615 TEXT '&DRUK OP &GOUD !&MENU OM TERUG TE GAAN NAAR HET &HOOFDMENU' > IFDEF SPANISH < DISP;2525 TEXT '&PULSE !&RETORNO PARA VOLVER AL &MEN\Z &PRINCIPAL' DISP;2615 TEXT '!&O &DORADA !&MENU PARA VOLVER AL &MEN\Z &PRINCIPAL'> FN1RD, READ;MNTMP1;FN1BF / WAIT FOR USER TO TYPE RETURN /C038 ARG;FN1BE;MNTMP1 / CHECK FOR BLANK LINE /A038 FN1ERR, DISP;-2700;TEXT '^CG^CG' / ERROR - RING THE BELL /A038 GOTO;FN1RD / GO BACK AND READ AGAIN /A038 FN1BE, CMND;31;204;CIF 10 / WINUTL TO BOOT WINNIE OR RX50 /C038 RETURN /A008 FN1BF, CASE;MNSYSA / USER TYPED A GOLD KEY /A038 EDMENU&3777;FN1GM / CHECK FOR GOLD MENU /A038 GOTO;FN1ERR / NOPE, GO REPORT THE ERROR /A038 FN1GM, TSTBIT;MNOPTN;MNRX4X;FN1BE / ARE WE BOOTING FROM WINNIE? /C038 / YES, FALL THROUGH /A038 FN1BG, DISP;0;TEXT '![C!E!CO' / RESIDENT STARTUP DISPLAY /M024 CASE;MNTMP1 / CHECK FOR TYPE OF MENU ENTRY /A024 1;FN1BG1 / WARM START ENTRY VALUE /A024 SET;-1;MNDTDY / CLEAR DAY REGISTER /A037 IFDEF ENGLSH < DISP;1430;TEXT "&DIGITAL &EQUIPMENT &CORPORATION" /M024 > / END IFDEF ENGLSH IFDEF ITALIAN < DISP;1430;TEXT "&DIGITAL &EQUIPMENT &CORPORATION" /M024 > / END IFDEF ITALIAN IFDEF DUTCH < DISP;1421;TEXT "&DIGITAL &EQUIPMENT &CORPORATION" /M024 > / END IFDEF DUTCH IFDEF V30SWE < DISP;1430;TEXT "&DIGITAL &EQUIPMENT &CORPORATION" /M024 > / END IFDEF V30SWE IFDEF V30NOR < DISP;1430;TEXT "&DIGITAL &EQUIPMENT &CORPORATION" /M024 > / END IFDEF V30SWE IFDEF SPANISH < DISP;1430;TEXT "&DIGITAL &EQUIPMENT &CORPORATION" > / END IFDEF SPANISH FN1BG1, SET;1;MNTMP1 CMND;12;200;CIF CDF 20 / LOAD DATE-TIME AND SYSVALS RETURN / CHAIN TO DATE-TIME OVERLAY XTRMNU=400-. IFZERO .-401&4000 ZBLOCK XTRMNU / MOVE UP TO END OF BLOCK /*************************************************************************** /**** USER AREA CONSTANTS **** /*************************************************************************** X=MUBUF+MNUSRA / LOCATION OF THE USER AREA IN FIELD TWO MNFNO, 0 / FILE NUMBER, WITH DRIVE NUMBER IN BITS 0-3 MNFNO0, 0 / "ZERO" FILE NUMBER MNFNAM, FNAMBF / ADDRESS OF FILE NAME BUFFER MNWRDT, 0 / WHERE DATE/TIME IS DISPLAYED OR ZERO MNONUM, 0 / OVERLAY NUMBER MNOADR, 0 / ADDRESS TO START AT MNOFLD, 0 / CIDF FIELD NUMBER MNDTYR, 0 / YEAR MNDTMO, 0 / MONTH MNDTDY, 0 / DAY MNDTHR, 0 / HOUR MNDTMN, 0 / MINUTE MNMMSW, 0 / SWITCH TELLING WHICH MAIN MENU TO RETURN TO MNTMP1, 0 / MENU TEMPORARY REGISTER NUMBER 1 MNTMP2, 0 / MENU TEMPORARY REGISTER NUMBER 2 MNTMP3, 0 / MENU TEMPORARY REGISTER NUMBER 3 MNTMP4, 0 / MENU TEMPORARY REGISTER NUMBER 4 MNTMP5, 0 / MENU TEMPORARY REGISTER NUMBER 5 MNTMP6, 0 / MENU TEMPORARY REGISTER NUMBER 6 MNTMP7, 0 / MENU TEMPORARY REGISTER NUMBER 7 MNTMP8, 0 / MENU TEMPORARY REGISTER NUMBER 8 MNTMP9, 0 / MENU TEMPORARY REGISTER NUMBER 9 MNMXDR, 0 / MAX NUMBER OF FLOPPYS ON THE SYSTEM - 1 /D037 MNUSER, 0 / USER NUMBER, 0 OR 1 /D037 MNUSR2, 0 / 0 OR 2, DEPENDING ON WHICH USER MNDRV, 0 / DRIVE NUMBER, WITHOUT DOCUMENT NUMBER MNDOCN, 0 / DOCUMENT NUMBER, WITHOUT DRIVE NUMBER MNMATH, 0 / 1 MEANS MATH IS ACTIVE MNLOCK, 0 / AX log doc doc #. / only valid when AX/DX is running MNOPTN, 0 / ANOTHER OPTIONS WORD MNPROP, / PRINTER OPTIONS (SEE THE FIRST PRINTER / MENU FOR DETAILS) / THIS AREA IS ALSO USED FOR A SCRATCH AREA BY / THE COMMUNICATIONS SETTINGS MENU OF CX CX0DBT, 0 / PRIMARY PORT DATA BITS. CX0PAR, 0 / "" "" PARITY. CX0SBT, 0 / "" "" STOP BITS. CX0BAU, 0 / "" "" BAUD RATE. CX1DBT, 0 / SECONDARY PORT DATA BITS. CX1PAR, 0 / "" "" PARITY. CX1SBT, 0 / "" "" STOP BITS. CX1BAU, 0 / "" "" BAUD RATE. CXPORT, 0 / PORT SELECT CXBRTM, 0 / BREAK TIME. CXTMOD, 0 / TERMINAL MODE. CXPBAU, 0 / PRINTER BAUD RATE. ZBLOCK MNSYSA-CXPBAU-1 / RESERVE SPACE TO THE SYSTEM AREA /*************************************************************************** /**** THE SYSTEM AREA **** /*************************************************************************** X=MUBUF+MNSYSA / LOCATION OF THE SYSTEM AREA IN FIELD TWO MNSYSA, 0 / CHAR THAT ENDED READ (0 MEANS TOO MANY CHARS) MNOFF, 0 / OFFSET IN INPUT STRING TO START READ MNPC, 0 / MENU PC OFFSET MNPOS, 0 / POINTER TO FIRST CHARACTER OF NEXT SYMBOL / IN THE INPUT STRING (USED BY NXTARG) MNSP, 0 / ADDRESS OF STACK POINTER, RETURN LABEL OR ZERO / ADDRESS OF TOP OF STACK AREA (USED BY / MAIN MENU TO RE-INITALIZE THE STACK POINTER) MNSPTP, 0 / RETURN BLOCK NUMBER -STRLEN+1 / -STRLEN (NEG MAX CHARS IN INPUT BUFFER) MNIBUF, ZBLOCK STRLEN+2 / START OF SCREEN INPUT BUFFER AREA -17 / -NUMBER OF CHARACTERS IN ARGUMENT AREA MNARG, ZBLOCK 20 / ARGUMENT RETURN AREA /D037 MNBLK, 0 / MENU BLOCK LOADED INTO MUBUF AREA OF MEMORY MNPULD, 0 / SOFTWARE TYPE LOADED INTO EXTERNAL PROCESSOR / BIT 11 MEANS THAT AMERICAN SPELLING IS LOADED / BIT 10 MEANS THAT BRITISH SPELLING IS LOADED / BIT 9 RESERVED FOR POST PROCESSING / BITS 0-8 ARE UNUSED AT THIS TIME MNLANG, 0 / LANGUAGE SET IDENTIFIER IN TEXT MODE FORMAT MNMUTM, 0 / ACCUMULATOR USED FOR CLRV, INCV, AND STOV MNUTFN, 0 / DRIVE & FILE NUMBER FOR UTILITY PROGRAMS /A037 MNFREE, 0 / ** UNUSED LOCATION IN MENU AREA ** /*************************************************************************** /**** START OF THE SYSTEMS OPTION AREA **** /**** THESE VALUES ARE SET BY THE SYSTEM AND SAVED ACROSS BOOTS **** /**** THEY ARE INITIALIZED BY 'WPUDKD.PA' AND SAVED IN THE SYSTEM AREA **** /*************************************************************************** X=MNABRV+MUBUF / LOCATION OF THE OPTIONS AREA IN FIELD TWO MNABRV, 0 / FILENO OF ABBREVIATION DOCUMENT MNLBRY, 0 / FILENO OF LIBRARY DOCUMENT MNPGSZ, 0 / DEFAULT PAGE SIZE FOR EDITOR MNSTAT, 0 / SWITCH FOR STATUS LINE IN EDITOR MNFMAT, 0 / FORMAT WORD FOR DATE, CURRANCY, DICTIONARY MNSDRV, 0 / USER DRIVE SELECTION FOR SPELLING / BITS 0-3 INDICATE DRIVE FOR DICTIONARY / BITS 4-7 ARE NOT USED AT THIS TIME / BITS 8-11 INDICATE DRIVE FOR UTILITY SOFTWARE MNPDFN, 0 / PERSONAL DICTIONARY DRIVE AND FILE NUMBER MNLGFN, 0 / EASY COMM DRIVE AND FILE NUMBER MNADFN, 0 / AUTODIAL DIRECTORY DRIVE & FILE NUMBER /A037 MNDSEP, 0 / DATE SEPARATOR TYPED IN BY USER /A024 MNXTRA, 0 / EXTRA WORD AVAILABLE TO BE SAVED ACROSS BOOTS /*************************************************************************** /**** THE COMMUNICATIONS PART OF THE SYSTEM OPTIONS AREA **** /*************************************************************************** MNCMTP, 0 / WHAT THE COMMUNICATIONS IS SET FOR / 0 = NORMAL CX / 1 = MAGCARD MNXONF, 0 / 0 = ENABLE XON/XOF PROCESSING / 1 = DISABLE THE XON/XOF PROCESSING IN HANDLER MNPRIM, 0 / STATUS WORD FOR PORT 0; CONTAINS CHAR SIZE, / PARITY,ECT. ALSO BAUD RATE TO FIND OUT / WHAT THE VALUES ARE SEE WPCU3/WPCU4 / WHERE IT IS DISPALYED IN CU3OPT/CU4OPT MNSECN, 0 / BAUD RATE FOR PORT 1; FOR DETAILS / ALSO LOOK AT WPCU3/WPCU4 MNPRTB, 0 / CONTAINS PRINTER BAUD INFO. ALSO CONTAINS / PORT SELECT & BREAK TIME INFO. FOR DETAILS / SEE WPCU3/WPCU4 MNCXP, 0 / THIS IS THE DOCUMENT THAT CONTAINS / THE PROTOCOL - FORMAT FOR CX TO USE / WHEN TRANSFERRING DOCUMENTS MNOPTC, 0 / UNBUNBLING OPTIONS WORD / LOADED BY RD MENU MNXDLY, 0 / VARIABLE TIMEOUT DELAY FOR DX MUSYSL=MNXDLY-MNABRV+1 / LENGTH OF SYSVAL AREA /*************************************************************************** /**** THIS IS THE END OF THE SYSTEM AREA **** /*************************************************************************** RELOC /*************************************************************************** /**** THE FOLLOWING BUFFERS ARE LOCATED HERE SO THAT THEY MAY BE **** /**** PERSERVED ACROSS A SWAP OF THE USER AREA WITH THE MENU AREA **** /*************************************************************************** / LOCK WORDS FOR THE OVERLAY ROUTINE / THERE IS ONE LOCK WORD FOR EACH REGION OF MEMORY. THE VALUE OF A / LOCKWORD WILL BE EITHER A 0, MEANING NOTHING IS CURRENTLY LOADED / INTO THAT REGION, OR A DISK BLOCK NUMBER, THAT NUMBER BEING THE / FIRST BLOCK (OF THE SYSTEM FLOPPY) OF THE MODULE CURRENTLY IN THAT / REGION OF MEMORY. OLAY WILL LOOK AT THE LOCK WORD FOR THE MODULE / BEING REQUESTED TO SEE IF IT IS ALREADY LOADED. OLL110, 0 / FIELD 3 (USER FIELD 1) VERIFY, EDITOR, / CX, MAGCARD, COPY, DX,SORT, LP (WPPARS) OLL220, 0 / FIELD 4 (USER FIELD 2) WPCU2, WPCU3, WPCU4, / UDK, INDEX, VERIFY (BUFFER SPACE), WPCUT, / CX, MAGCARD, SORT OLL301, 0 / FIELD 5 (USER FIELD 3) LP (WPSELC), SORT OLL302, 0 / FIELD 5 (USER FIELD 3) LP (OVERLAYS) OLL400, 0 / FIELD 6 (USER FIELD 4) MATH,SORT / THE FOLLOWING THREE LOCATIONS SERVE TWO PURPOSES. THEY HOLD THE '' / THAT PRECEEDS THE FILE NAME IN AN INDEX ENTRY, AND THE THIRD LOCATION / HOLDS THE NEGATIVE LENGTH (+1) OF THE INA ARGUMENT BUFFER THAT FOLLOWS. / **** CAUTION **** THESE LOCATIONS ARE LOADED BY THE FILE NAME PARSER FNAMB3, 0 / WILL CONTAIN "<-200 (LEFT BRACKET) 0 / WILL CONTAIN "N-200+40 (LOWER CASE "N") FNAMB1, 0 / WILL CONTAIN ">-200 (RIGHT BRACKET) FNAMBF, ZBLOCK STRLEN / BUFFER CONTAINING NAME OF THE CURRENT FILE X=. / INDICATE FIRST FREE LOCATION ON PAGE /-------------------- PAGE /*************************************************************************** /**** USER DEFINED KEY BUFFER AREA **** /*************************************************************************** UDKSTR, ZBLOCK 400 / WAS 5000 AND SHOULD NOW BE 7000 /*************************************************************************** /**** WPFILS GO-TO-PAGE BUFFER AREA **** /*************************************************************************** RPPGDS, ZBLOCK 400 / WAS 7400 AND SHOULD NOW BE 7400 /*************************************************************************** /**** END OF FIELD TWO BUFFER AREA **** /*************************************************************************** /TMATH.PA / MODIFICATIONS BY: / / 047 KMD 23-Sep-85 Dutch Xlations / 046 KMD 10-Sep-85 Change keywords for Spanish / 045 KMD 02-AUG-85 Allow multinational control words / 044 RCME 24-Jun-85 Allow multinational currency symbols / / ------------------------ All below refer to V2.0 and earlier ---------------- / / 043 WCE 17-AUG-83 CHANGED NUMBER LABEL TO NUMTOK FOR PREFIX / 042 WCE 19-JUL-83 CHANGED SET LABEL TO SETCMD FOR PREFIX / 041 WCE 01-JUN-83 EXPAND SYMBOL TABLE BY REMOVING MTHTBL / 040 WCE 28-APR-83 FIX BUG - KEEP ONLY ONE COPY OF NUMBER / IN SYMBOL TABLE LIST / 039 WCE 24-APR-83 FIX BUG - ALLOW SET TO CHANGE FORMAT / 038 DRH 09-FEB-82 FIX BUG - RESET COUNTER IN COM PARSER / 037 DRH 27-JAN-82 FIX BUG - CATCH TRAPPED ERR "END" NOT / ON SECOND LINE / 036 DRH 27-JAN-82 FIX BUG - TRAP ERR ON LINES AFTER "END" / REF. WPEDIT.PA EDIT HISTORY "134" / 035 DRH 26-JAN-82 FIX BUG - 2ND LINE OF NON EDITOR MATH / BLK BLOWS LINE AFTER BLOCK OUT OF H2O / FIX BUG - INVALID PROCESSING OF "END" / IN EDITOR MATH CTRL BLOCK / 034 DRH 18-DEC-81 STRIP OUT BACK-UP RELATED CODE / 033 DRH 01-DEC-81 REINSTALLED "BEGIN" CTRL WORD PROCESS- / ING IN "BEGIN" RTN. REF EDIT HISTORY / NUMBER 025 / 032 DRH 01-DEC-81 FIXED BUG IN FORMULA TRANSLATOR / 031 DRH 18-NOV-81 CHANGED "RUNCHK" FLAG SETTING / 030 DRH 16-NOV-81 ADD SYM TO "DCHAR" IF MATCH IN TABLE / 029 JRF 16-NOV-81 Modified calls to ZROTBL since it was / made cross field callable. / 028 JRF 9-NOV-81 Add code for zeroing of DCHAR table / upon detectiion of WPSMATH in cntrl. / block. / 027 DAO 6-NOV-81 ADDED CODE TO BEGIN AND END ROUTINES / TO SET FLAGS FOR 'BACKUP' CODE / 026 JRF 4-NOV-81 Add error calls for cntl. word format / and syntax errors. / 025 JRF 02-NOV-81 Temporarily commented out "BEGIN" / processing code in "BEGIN" routine. / Must be reinstalled later as soon as / Editor Math Error Reporting is / operational!! (SEE /T025). See Joe / or Dave if you have any questions. / 024 DRH 30-OCT-81 ADDED EDIT MATH ERROR LABELS & / CALLS TO CHECK FOR CHAR ON LINE / AFTER "BEGIN" & "END" CTRL WORDS / 023 DAO 28-OCT-81 MINOR CHANGE TO CALL TO CHKNME / 022 DRH 23-OCT-81 RE-INIT RESULT TBL & PTR AT START OF / EVERY EDITOR MATH BLOCK / 021 DRH 16-OCT-81 ADDED EDITOR MATH ERROR HANDLING CODE / 020 DRH 23-SEP-81 ADDED INDIVIDUAL EDITOR MATH CTRL WORD / HANDLING ROUTINES / 019 DRH 14-SEP-81 ADDED EDIT MATH CTRL WORD PROCESSING / 018 DRH 14-SEP-81 ADDED EDIT MATH CONTROL WORDS "BEGIN, / END, & TOTAL" TO MATH MODULE / 017 DRH 14-SEP-81 ADDED CODE TO INDICATE WHETHER IN LP / OR EDITOR MATH / 016 DRH 02-SEPT-81 TRAP ILLEGAL HARD RETURN WITHIN A / FORMULA OR SET STATEMENT MATH EXPRSION / 015 DRH 18-AUG-81 SET "EVFLW7" COMPATIBLE TO ERR REPORTING / 014 DRH 11-AUG-81 SET UP "LNEBFC" IN "RDLNBF" TO RETURN / CONTENTS OF FULL INPUT LINE BUF WHEN / BUF OVERFLOWED IN MATH CTRL BLOCK / 013 DRH 08-AUG-81 SEND BACK EXACT LOC OF NON-ALLOWABLE / CHAR ON CTRL WRD LNE AFTER CTRL WORD / SET UP TO BE COMPATIBLE WITH "RDLNBF" / 012 DRH 31-JUL-81 SET CODE TO NOT RE-INIT SYMBOL TBL, / SYMBOL PTR TBL, & RESULT PTR TBL / BETWEEN CTRL BLKS OF SAME LP LIST DOC / 011 DRH 28-JUL-81 TRAP OUT CTRL WORD FORMAT/SYNTAX ERRS / 010 DRH 27-JUL-81 HANDLE MATH INPUT LINE BUFFER & WORK / BUFFER OVERFLOW ERRORS - TIED IN WITH / "WPSELC" MODULE EDIT NUMBER - "024" / 009 DAO/DRH 23-JUL-81 CHECK FOR MULTIPLE FORMAT STATEMENTS / FOR SAME RESULT VAR. IN ONE CTRL BLK / 008 DRH 17-JUL-81 ADDED CODE TO TRAP INCORRECT FORMULA / FORMAT FOLLOWED BY END OF LINE (HR) / 007 DAO 15-JUL-81 /Changes to fix bug in where format / /indicator got loaded / 006 DAO 14-JUL-81 /Played space wars on first page (some- / /body installed with page errors!!! / 005 DAO 12-JUL-81 /Changed SYMTSZ and so it now outputs / / char passed in AC. Also changed so / / address following PUSH points to / / actual value rather than format word / 004 DRH 10-JUL-81 /PLACE "INIT" INTO OUTPUT LIST FOR USE / /BY FORMULA EXECUTION CODE / 003 DAO 7-JUL-81 / CHANGE SYMCHK TO RETURN POINTER INTO / / SYMBOL TABLE / 002 DAO 14-JUN-81 / MODIFICATIONS TO MERGE WITH OTHER / / MATH FILES / 001 DRH 5/6/81 /ADDED CODE FOR "RESULTS POINTER LIST" / 000 DRH 30-APR-81 /CREATED /PCBMTH.PA /D002 /THIS PART OF CODE HANDLES INTERACTION WITH LIST PROCESSING/EDITOR REGARDING /THE PARSING OF THE PRINT CONTROL BLOCK. /START WITH INITIALIZATION PROCESS WHEN FIRST ENTER PRINT /CONTROL BLOCK /WARNING: IMPORTANT TO KEEP "FSTLNE", & "RTRN1 TO 4" IN PRESENT LOCATIONS / SINCE THEY ARE DEFINED AS SUCH IN WPF1 FOR L.P. AND THE EDITOR / AS ENTRY POINTS TO THE MATH MODULE. FSTLNE, 0 /"CONTROL BLOCK FIRST LINE" FLAG RTRN1, XX /ENTRY POINT TO RTN TO INITIALIZE INPUT LINE BUF PTR JMP RTRN1A /GO TO CODE WHICH INITIALIZES THE PTR RTRN2, XX /ENTRY POINT TO RTN TO PUT CHAR IN INPUT LINE BUF JMP RTRN2A /GO TO CODE WHICH INPUTS CHAR RTRN3, XX /ENTRY POINT TO RTN TO PROCESS INPUT LINE IN BUF JMP RTRN3A /GO PROCESS INPUT CHAR STRING IN LINE BUFFER RTRN4, XX /RTN TO INITIALIZE VALUES USED IN MATH CTRL BLK CODE DCA MTHTYP /GET VALUE PASSED IN AC FROM CALLER FIELD AND /A017 /USE IT TO SET THE "MTHTYP" FLAG TO INDICATE /A017 /WHICH TYPE OF MATH IS GOING TO BE INVOKED /A017 /IF LP MATH THEN "MTHTYP" = 0, IF EDIT MATH = 1 /A017 /NOTE - THIS FLAG SETTING PROCESS IS DONE /A017 /ONCE WHEN ENTERING THE PARTICULAR MODULE WHICH /A017 /REQUIRES MATH FUNCTIONALITY AND AGAIN EACH TIME/A020 /MATH IS RE-INITIALIZED AT THE START OF A MATH /A020 /WORK AREA FROM THE "BEGIN" ROUTINE /A020 /************ BE WARNED THAT *************** /A017 /A CROSS FIELD CALL IS MADE TO "RTRN4" FROM /A017 /THE MODULE (EDIT OR LP) USING MATH THEREFORE /A017 /IF "MTHTYP" IS MOVED OFF OF PAGE ZERO THEN /A017 /THERE WILL BE THE PROBLEM OF HAVING TO INDIRECT/A017 /TO THAT LOC FROM HERE, THUS USING THE DATA /A017 /FIELD FROM THE CALLING MODULE WHICH WILL RESULT/A017 /IN AN ERROR /A017 JMP RTRN4A /GO INITIALIZE VALUES /ROUTINE TO INITIALIZE INPUT LINE BUFFER POINTER RTRN1A, GOTFLD /GET CDI INTRUCTION /M041 DCA BCKFLD /SAVE THE CONSTRUCTED CDI INSTRUCTION FOR RETURN TAD (LNEBUF /GET START OF INPUT LINE BUFFER DCA LNEPTR /USE IT TO INITIALIZE THE INPUT LINE BUFFER PTR DCA FRMCHR /INIT VAL IN LEXIC RTN BEFORE ENTRY LATER BY XLTFRM BCKFLD, 0 /LOCATION TO HOLD CDI INSTRUCTION FOR RETURN TO CALLER JMP I RTRN1 /RETURN PROGRAM CONTROL TO FIELD FROM WHICH CALL MADE /ROUTINE TO PUT INPUT CHAR INTO INPUT LINE BUFFER. RTRN2A, /D006 RDF /GET THE DATA FIELD BITS FROM WHICH THE CALL WAS MADE TAD CIDF0 /ADD TO IT THE CDF,CIF OCTAL CODE VALUE DCA OLDFLD /SAVE THE CONSTRUCTED CDI INSTRUCTION FOR RETURN TAD I RTRN2 /GET INPUT CHAR PASSED FROM OTHER FIELD CDFMTH /CHANGE THE DATA FIELD REGISTER TO MATH FIELD DCA I LNEPTR /SAVE IT IN THE INPUT LINE BUFFER /IN CASE IN EDITOR MATH, BEFORE GOING BACK FOR NEXT CHAR, CHECK /A021 /TO SEE IF LAST VALID LINE PROCESSED IN THE EDITOR MATH CONTROL /A021 /BLOCK WAS AN "END" CONTROL WORD. IF SO THEN THERE SHOULD BE NO /A021 /OTHER LINES TO PROCESS IN THE CONTROL BLOCK. IF THERE ARE LINES/A021 /AFTER THE "END" CTRL WORD THEN THE LINE IS SPOTTED AS AN ERROR /A021 TAD MTHSND /GET EDITOR MATH "SECOND LINE" FLAG /A021 SMA CLA /HAS "END" CTRL WORD BEEN PREVIOUSLY FOUND? /A021 JMP SKPDN1 / NO: THEN CONTINUE PROCESSING /A021 TAD (EVSYN6 / YES: RETURN ERR - LINES AFTER "END" WORD/A021/M024 JMP ERROR6 /SETUP TO RETURN NUMBER TO EDITOR MATH /A021 SKPDN1, JMS LNETSZ /INCREMENT LINE BUFFER PTR & CHECK FOR OVERFLOW /M021 /NOTE: RETURN FROM "LNETSZ" WITHOUT A SKIP TO CONTINUE LOADING IN CHAR / TO INPUT LINE BUFFER: WITH A SKIP RETURN IF THERE WAS AN INPUT / LINE BUFFER OVERFLOW AND IT IS NOT A MATH CONTROL BLOCK: & A / DOUBLE SKIP RETURN IF A MATH CTLR BLK LINE BUF OVFLW ERROR /A010 ISZ RTRN2 /TRIPLE INCREMENT PC FOR NORMAL RETURN TO OTHER FIELD ISZ RTRN2 /DOUBLE INCREMENT PC & RTRN TO SERVE NOT MATH BLOCK ERROR6, ISZ RTRN2 /SINGLE INCRMNT PC TO RTRN MATH CTRL BLK ERR /M021 OLDFLD, 0 /LOCATION TO HOLD CDI INSTRUCTION FOR RETURN TO CALLER JMP I RTRN2 /RETURN PROGRAM CONTROL TO FIELD FROM WHICH CALL MADE / "RTRN3" - ROUTINE TO PROCESS INPUT CHAR STRING IN LINEBUFFER / /FUNTIONAL DESCRIPTION: RTRN3 /PSEUDO-CODE DESCRIPTION: / / | SAVE DATA FIELD TO RETURN TO CALLER / | PLACE LINEBUFFER CTRL WORD INTO WORK BUFFER / | IF WORK BUFFER OVERFLOW / | | THEN IF CONTROL BLOCK FIRST LINE = TRUE / | | | THEN RETURN TO CALLER AS NOT MATH BLOCK / | | | ELSE RETURN TO CALLER WITH MATH WORK BUFF ERROR / | | | ENDIF / | | ENDIF / | IF CTRL BLOCK FIRST LINE FLAG = TRUE / | | THEN COMPARE LINEBUFFER CTRL WORD TO WPSMTH TABLE / | | IF MATCH FOUND / | | | THEN SET CTRL BLOCK FIRST LINE = FALSE / | | | IF NON-ALLOW CHAR ON SAME LNE AS & AFTER CTRL WRD / | | | | THEN RETURN TO CALLER WITH MATH ERR IN AC / | | | | ENDIF / | | | INITIALIZE TRUNCATE/ROUND FLAG = ROUND / | | | " FORMULA CTRL WORD NOT FOUND = TRUE / | | | " FRMLA EXEC CDE ENTRY PT=START O/P LST / | | | " LEAD LOC OF O/P LST = SUBRTN SETUP / | | | " O/P LIST POINTER / | | | IF IN EDITOR MATH = TRUE / | | | | THEN INITIALIZE RESULT PTR TABLE & PTR / | | | | ENDIF / | | | INITIALIZE EDIT MATH "SECOND LINE" FLAG = TRUE / | | | ELSE RETURN TO CALLER TO PROCESS AS NOT MATH BLOCK / | | | ENDIF / | | RETURN TO CALLER TO CONTINUE NORMAL PROCESSING OF MTH BLK / | | ELSE COMPARE CTRL WORD TO "CTLWRD" OR "EDTCTL" TABLE / | | IF MATCH FOUND / | | | THEN PROCESS ACCORDING TO CTRL WORD FOUND / | | | IF ERROR FOUND WHILE PROCESSING / | | | | THEN RETURN TO CALLER WITH MATH ERR IN AC / | | | | ENDIF / | | | ELSE RETURN TO CALLER WITH FORMAT/SYNTAX ERR IN AC / | | | ENDIF / | | ENDIF / /CALLING SEQUENCE: CIFMTH /CROSS FIELD CALLABLE..... / JMS RTRN3 /......SUBROUTINE - WHERE RTRN3 IS A / /......SPECIFIC ENTRY POINT INTO MATH / /......AS DEFINED IN WPF1. /INPUT PARAMETERS: NONE /IMPLICIT INPUT: LNEBUF,FSTLNE /OUTPUT PARAMETERS: NORMAL RETURN = CONTINUE PROCESSING / SKIP RETURN = WITH MATH BLOCK ERROR IN THE AC / DOUBLE SKIP RETURN = ERROR BUT NOT MATH BLOCK /IMPLICIT OUTPUT: MATH INITIALIZATION,FSTLNE /COMPLETION CODE: NONE /SIDE EFFECTS: NONE /ROUTINE TO PROCESS CONTROL WORD OF INPUTTED LINE RTRN3A, GOTFLD /GET CDI TO CALLING FIELD /M041 DCA RTNFLD /SAVE THE CONSTRUCTED CDI INSTRUCTION FOR RETURN JMS XCTRLW /GO SET UP CONTROL WORD FOR COMPARISON WITH SYM TBL /THE "XCTRLW" RTN PERFORMS A VARIETY OF GYMNASTICS BEFORE /A010 /RETURNING. IN THE CASE OF A WORK BUFFER OVERFLOW A CHECK /A010 /IS DONE TO SEE WHAT LINE OF THE CONTROL BLOCK IS BEING /A010 /PROCESSED. IF A WORK BUFFER OVERFLOW OCCURS WITH THE FIRST /A010 /LINE THEN THE BLOCK IS NOT MATH BECAUSE IF IT WERE THERE /A010 /WOULD BE NO OVERFLOW. IF IT IS NOT THE FIRST LINE THEN /A010 /THE BLOCK HAS TO BE MATH TO HAVE GOTTEN BEYOND THE FIRST LINE /A010 /THE CASES SPECIFIED ARE HANDLED VIA SKIP RETURNS FROM "XCTRLW" /A010 JMP KPPROC /RETURN HERE TO CONTINUE NORMAL PROCESSING /A010 JMP ERBCK1 /RETURN HERE TO PROCESS AS NOT MATH CTRL BLOCK /A010 JMP ERRBCK /RETURN HERE TO PROCESS MATH WORK BUFFER ERROR /A010 /....ERROR NUMBER IN AC WHEN RTRN FROM "XCTRLW" /A010 /....SET UP TO RETURN TO FIELD ACCORDINGLY /A010 /CHK IF 1ST LINE OF CONTROL BLOCK KPPROC, TAD FSTLNE /GET CONTROL BLOCK 1ST LINE FLAG /M010 SNA CLA /IS IT THE FIRST LINE OF THE CONTROL BLOCK? JMP PRFRST / YES: GO SEE IF IT'S "WPSMATH" JMP PRCTRL / NO: HANDLE ANY OF OTHER CONTROL WORDS /HANDLE FIRST LINE OF CONTROL BLOCK - SEE IF IT IS "WPSMATH" PRFRST, JMS CMDPSR /RUN COMMAND PARSER ON CONTROL WORD WRKBUF /PASS START OF INPUT STRING TO COMMAND PARSER WPSMTH /PASS START OF SYMBOL TABLE TO COMMAND PARSER SZA /IS RETURNED VALUE IN THE AC A 1? i.e. A MATCH FOUND? JMP PRFRT1 / YES: GO INITIALIZE VALUES TO PROCESS MATH CTRL BLK ERBCK1, ISZ RTRN3 / NO: SET PC FOR DOUBLE SKIP RETURN TO PROCESS /M010 ISZ RTRN3 /....NOT MATH BLOC JMP RTNFLD /AND RETURN TO CALL FIELD PRFRT1, DCA FSTLNE /SET "CONTROL BLOCK FIRST LINE" FLAG = FALSE JMS CHKLNE /CHK FOR NON-ALLOWABLE CHARS ON SAME LINE AS AND..... /....AFTER CONTROL WORD JMP ERRBCK /RETURN HERE FROM "CHKLNE" WITH ERROR NUM IN AC /A011 /.. TO PASS BACK IF NON-LEGAL CHARS FOUND ON LNE/A011 /RETURN HERE FROM "CHKLNE" IF ALL WENT WELL /M012 /AT THIS POINT DECIDED TO SAVE THE SYMBOL TABLE, SYM PTR TBL, /A012 /AND RESULT PTR TBL CONTENTS FROM ONE MATH CONTROL BLOCK TO THE /A012 /NEXT WITHIN THE SAME LP LIST DOC. IN THIS WAY THE USER CAN STILL/A012 /GET VALID TOTALS IN THE TRAILER FROM ACROSS THE WHOLE LIST, NOT /A012 /JUST THE PART COVERED BY THE LAST BLOCK, IF THE ABOVE MATH DATA /A012 /STRUCTURES WERE RE-INIT BEFORE EACH BLOCK THEN ANY PREVIOUS /A012 /CALCULATIONS DONE WITHIN THE LIST WOULD BE LOST. /A012 JMS ITLZO3 /..CALL MATH BLOCK INITIALIZATION ROUTINES /M012 /INIT TRUNCATE FLAG,"FORMULA CTRL WORD NOT FOUND"/A012 /FORMULA EXECUTION CODE ENTRY PT - "OUTENT", /A012 /OUTPUT LIST /A012 /D041 JMS ITLZO4 /AND OUTPUT LIST PTR /A012 /CONDITIONALIZE CODE TO RE-INITIALIZE RESULT TABLE & PTR AT THE /A022 /START OF EVERY MATH BLOCK IF IN EDITOR MATH. DONE THIS WAY TO /A022 /ALLOW MORE ROOM FOR RESULTS WITHIN THE CONTEXT OF ANY EDITOR /A022 /MATH WORK AREA. ALSO, NOTE THAT THIS CAN BE DONE THIS WAY IF IN /A022 /EDITOR MATH BECAUSE (UNLIKE THE L.P. MATH WHICH USES THE RESULTS/A022 /TABLE FOR POSSIBLE TRAILER TOTALS), THE EDITOR USES THE "TCHAR" /A022 /TABLE WHEN REFERENCING RESULTS VALUES FOR TOTALS AND THEREFORE /A022 /DOES NOT NEED RETENSION OF RESULTS BETWEEN BLOCKS. FOR MORE INFO/A022 /SEE ABOVE COMMENTS FOR "JMS ITLZO3". /A022 TAD MTHTYP /GET THE "MATH TYPE" FLAG /A022 SNA CLA /ARE WE IN EDITOR MATH? /M028 JMP PRFRT2 / NO: DON'T INIT. FOLLOWING TABLES /A028 /D041 JMS ITLZOL / YES: GO INITIALIZE THE RESULT TABLE & PTR /A022 TAD (RESULT /GET STARTING ADDRESS OF RESULT PTR TABLE /A041 DCA RESPTR /INITIALIZE PTR TO RESULT PTR TABLE /A041 DCA I RESPTR /INIT 1ST LOC OF RESULT PTR TABLE TO ZERO /A041 / AC0001 / ZERO DCHAR TABLE INCASE THIS WPSMATH CNTRL. /A028 / BLOCK IS TOTAL BLOCK. IF NOT A TOTAL BLOCK /A028 / BOTH DCHAR AND TCHAR TABLES WILL BE ZEROED /A028 / LATER. /A028 CIFLP / *** CAUTION *** - DF MUST EQUAL THIS FLD /M029 JMS ZROTBL /A028 / /NOTE THE EDIT MATH CTRL BLOCK "SECOND LINE" FLAG IS HERE INIT. /A020 /TO TRUE ONCE THE FIRST LINE OF THE BLOCK HAS BEEN PROCESSED /A020 /SUCCESSFULLY. THIS FLAG WILL BE NEEDED IF IN EDITOR MATH AND /A020 /IGNORED IF NOT. /A020 PRFRT2, DCA MTHSND / SET EDIT MATH "SECOND LINE" FLAG = TRUE /M028 JMP RTNFLD /GO BACK TO CALL FIELD TO PROCESS NEXT LINE OF BLOCK /RTN TO HANDLE ALL LINES (EXCEPT 1ST) OF MATH CONTROL BLOCK PRCTRL, JMS CMDPSR /CHECK CONTROL WORD FOR COMPARISON WRKBUF /PASS START OF INPUT STRING TO COMMAND PARSER SYMSTR, 0 /PASS START OF SYMBOL TABLE TO COMMAND PARSER /M019 /NOTE - THIS LOCATION IS PATCHED WITH THE RIGHT /A019 /ENTRY POINT INTO THE CTRL WORD PERMENANT SYMBOL/A019 /TABLE. THE PATCH IS MADE BY A CALL TO "SETCTL" /A019 /FROM THE INT ROUTINE "RTRN4" /A019 /THE ENTRY IS MADE AT "EDTCTL" IF EDITOR MATH /A019 /AND "CTLWRD" IF LP MATH /A019 SNA /IS RETURNED VALUE IN AC > 0 ? (i.e. IS MATCH FOUND?) JMP BCKERR / NO: PROCESS CONTROL BLOCK FORMAT/SYNTAX ERROR TAD OFFSET / YES: ADD OFFSET TO VALUE RETURNED IN THE AC /A019 /NOTE - "OFFSET" IS A VALUE PATCHED AT INIT TIME/A019 /THE SAME AS "SYMSTR" ABOVE. THE OFFSET IS USED /A019 /TO PAD THE RETURNED VALUE IN THE AC FROM /A019 /"CMDPSR" IF THE ENTRY POINT TO THE SYMBOL TABLE/A019 /STARTS AT "CTLWRD" FOR LP MATH /A019 /OTHERWISE THE RETURNED VALUE WILL NOT ADD UP /A019 /WITH "HNDCTL" TO GIVE THE RIGHT ROUTINE TO /A019 /SERVICE THAT CONTROL WORD /A019 /"OFFSET" = 3 IF LP MATH & 0 IF EDITOR MATH /A019 /TAKE TIME HERE TO CHECK TO SEE IF CONTROL WORD IS NOT "BEGIN" /A020 /IF NOT THEN GO SEE IF EDITOR MATH, IF YES THEN PROCESS EDITOR /A020 /MATH RELATED INFORMATION, IF NOT THEN JUST RETURN /A020 DCA TMPCTR /SAVE VALUE IN AC /A020 AC7777 /GET A -1 INTO THE AC /A020 TAD TMPCTR /ADD BACK VALUE TO IT /A020 SZA CLA /DOES NUM = 1? (I.E. IS THE CTRL WORD = "BEGIN")/A020 JMS RUNCHK / NO: THEN GO CHECK EDITOR MATH INFO /A020 TAD TMPCTR / YES: GET VALUE BACK INTO AC TO CONTINUE PROC /A020 /SET UP TABLE ADDR TO INDIRECT THRU TO PROCESS CTRL WORD /A020 TAD (HNDCTL-1 /ADD START OF TBL-1 TO RTRNED VALUE + OFFSET DCA HLDVAL /SAVE IT AS ADDR TO CONTROL WORD PROCESS TABLE ROUTINE TAD I HLDVAL /GET THE ROUTINE LOCATION CONTAINED IN OFFSET LOCATION DCA HLDVAL /SAVE IT TO INDIRECT THRU JMS I HLDVAL /GO PROCESS ACCORDING TO CONTROL WORD FOUND ERRBCK, ISZ RTRN3 /RETURN HERE FROM PROCESSING CTRL WORD IF THERE /M010 /....IS AN ERROR DETECTED IN THE MATH BLOCK RTNFLD, 0 /SKIP RETURN HERE FROM "JMS I HLDVAL" IF ALL /WENT OK. ( LOCATION OF CDI INSTRUCTION TO RETURN TO /CALLER FIELD ). JMP I RTRN3 /RETURN PROGRAM CONTROL TO FIELD FROM WHCH CALL MADE BCKERR, TAD (EVFLW7 /GET MATH BLK CTRL WORD FROMAT/SYNTAX ERROR NUM /M015 JMP ERRBCK /RETURN TO CALL FIELD WITH ERROR NUM IN AC /A011 OFFSET, 0 /CONTAINS OFFSET TO PERM SYM TBL FOR EDIT/LP MATH/A019 HLDVAL, 0 /KEEP ON SAME PAGE AS "PRCTRL" RTN, HOLDS INDIRECT /THRU WHICH CONTROL WORD PROCESS RTN IS CALLED /MOVED "FRMULA" RTN OFF THIS PAGE BECAUSE OF SPACE WARS. /M037 /INITIALIZATION SUBRTN CALLED FROM WPSELC.PA VIA "RTRN4" IN LOC 207. USED TO /PERFORM PRIMARY INIT OF MATH MODULE VALUES WHEN LP IS INVOKED. RTRN4A, GOTFLD /GET CDI TO CALLING FIELD /M041 DCA BAKFLD /SAVE THE CONSTRUCTED CDI INSTRUCTION FOR THE RETURN /D041 JMS ITLZOL /INIT RESULT PTR TABLE PTR & TABLE /M012 TAD (RESULT /GET STARTING ADDRESS OF RESULT PTR TABLE /A041 DCA RESPTR /INITIALIZE PTR TO RESULT PTR TABLE /A041 DCA I RESPTR /INIT 1ST LOC OF RESULT PTR TABLE TO ZERO /A041 /D041 JMS ITLZO2 /INIT SYMBOL PTR TBL PTR, SYMBOL TABLE PTR /M012 TAD (SYMTBL /GET STARTING ADDRESS OF SYMBOL TABLE /A041 DCA SYMPTR /INITIALIZE PTR TO SYMBOL TABLE /A041 JMS ITLZO3 /INIT TRUNCATE/FLAG, "FORMULA CTRL WORD NOT /A012 /FOUND" FLAG, FORMULA/EXECUTION CODE ENTRY /A012 /POINT - "OUTENT", OUTPUT LIST /A012 /D041 JMS ITLZO4 /INIT OUTPUT LIST PTR /A012 JMS SETCTL /GO INIT PATCHES TO "SYMSTR" AND "OFFSET" /A019 /TO COINCIDE WITH TYPE OF MATH TO BE USED /A019 /SEE "PRCTRL" RTN FOR EXPLANATION /A019 /ALSO, IF EDITOR MATH, THEN INIT "INCTLB" IN /A019 /LP FIELD TO 1 (I.E. IN CONTROL BLOCK = FALSE) /A019 BAKFLD, 0 /LOCATION OF CDI INSTRUCTION TO RETURN TO CALLER FIELD JMP I RTRN4 /RETURN TO FIELD CALLED FROM /TOTAL, MOVED HERE ON EDIT 041 TO MAKE SPACE /ROUTINE TO HANDLE "TOTAL" CONTROL WORD IN EDITOR MATH CONTROL BLOCK /A020 TOTAL, XX JMS CHKLNE /CHK FOR NON-ALLOWABLE CHARS ON SAME LINE AS... /A024 /....AND RIGHT AFTER CONTROL WORD /A024 JMP ERRBCK /RETURN HERE FROM "CHKLNE" WITH ERROR NUM IN AC /A026 /.. TO PASS BACK IF NON-LEGAL CHARS FOUND ON LNE/A026 AC0001 /A020 DCA MTHTOT /SET "EDIT MATH TOTAL" FLAG = TRUE /A020 AC0001 /GET 1 INTO THE AC /A037 DCA MTHSND /SET "NOT PROCESSING SECOND LINE" = TRUE /A037 ISZ TOTAL /SET UP SKIP FOR NORMAL RETURN /A020 JMP I TOTAL /A020 X=. / INDICATE FIRST FREE LOCATION /A041 / ------------------ PAGE /RTN TO CHECK FOR NON-ALLOWABLE CHARACTERS FOLLOWING THE CONTROL /WORD AND ON THE SAME LINE. USED WITH "WPSMATH", "TRUNCATE", AND /"ROUND" TO DUMP TRAILING "SPECIAL" CHARACTERS AND TRAP AS AN /ERROR ANY OTHERS. DOES A SKIP RETURN IF ALL WENT WELL AND A /A011 /REGULAR RETURN WITH THE ERROR NUM IN THE AC IF NOT. /A011 CHKLNE, XX /NOTE: FIRST CALL TO "RDLNBF" HAS TO BE TO BACK IT UP ONE CHAR /A013 /FROM WHERE IT LEFT OFF IN "XCTRLW" WHEN PUTTING THE FIRST /A013 /WORD OF THE CTRL WORD LINE INTO THE WORK BUFFER /A013 /OTHERWISE "LNEPTR" IN "RDLNBF" IS SET TO THE CHAR AFTER THE /A013 /CHAR FOLLOWING THE FIRST WORD ON THE LINE. /A013 AC7777 /SET AC TO -1 TO TELL "RDLNBF" TO BACK UP ONE /A013 /CHAR IN THE LINE BUFFER /A013 JMS RDLNBF /GO CALL "RDLNBF" TO SET UP FOR CHAR RIGHT /A013 /AFTER CONTROL WORD ON THE LINE /A013 CHKLN1, JMS RDLNBF /GET ANY CHAR TRAILING CTRL WORD OF INPUT LINE /M013 TAD (-ECNWLN /GET NEGATIVE OF HARD RETURN SNA /IS NEXT CHAR FOLLOWING CONTROL WORD A HARD RETURN? JMP LINEOK / YES: END OF LINE SET UP TO RETURN TO CALLER /M011 TAD (ECNWLN-ECSPC/ NO: RESET AC AND GET NEGATIVE OF "SPACE" CHAR SPA SNA CLA /IS NEXT CHAR FOLLOWING CTRL WORD A "SPECIAL" CHAR?/m044 /d044 JMP LNOTOK / NO: THEN CONTROL WORD LINE SYNTAX ERROR JMP CHKLN1 / YES: DUMP IT & GO PICK UP NEXT CHAR ON LINE LNOTOK, TAD (EYNR10 /GET CONTROL WORD LINE SYNTAX ERROR INTO AC /m044 SKP /AND RETURN TO CALLER WITH IT IN AC /m044 LINEOK, ISZ CHKLNE /INCREMENT PC & RETURN CAUSE ALL WENT OK /A011 SAYBYE, JMP I CHKLNE /RETURN TO CALLER /A011 /RTN TO PLACE 1ST WORD OF INPUT LINE INTO WORK BUFFER WITH FIRST WORD OF INPUT /FORMATTED TO BE COMPATIBLE WITH COMMAND PARSER FOR SYMBOL TABLE COMPARISON. CTRLSZ, 0 /SIZE OF CONTROL WORD PUT IN WORK BUFFER, KEEP ON /SAME PAGE WITH "XCTRLW" ROUTINE WRKPTR, 0 /POINTER TO WORK BUFFER, KEEP ON SAME PAGE WITH /"XCTRLW" ROUTINE XCTRLW, XX / DCA CTRLSZ /SET WRKBUF WORD SIZE CHARACTER COUNTER = 0 TAD (WRKBUF+1 /INITIALIZE BUFFER PTR & SAVE FIRST LOCATION... DCA WRKPTR /...IN BUFFER FOR SIZE OF WORD AC0001 /SET AC TO 1 JMS RDLNBF /CALL READ LINE BUFFER RTN TO INITIALIZE FOR READ CYCLE1, JMS RDLNBF /READ A CHAR FROM LINE BUF AND GET IT BACK IN AC AND P177 /MASK OUT HIGH (MODE) BITS DON'T NEED FOR COMPARISON TAD (-ECSPC /ADD TO IT NEGATIVE OF "SPACE" CHAR SPA SNA /IS THE CHAR RETURNED A SPECIAL CHARACTER JMP ENDWRD / YES: GO PROCESS END OF CONTROL BLOCK WORD TAD (ECSPC / NO: RESET AC TO ORIGINAL CHAR READ IN DCA I WRKPTR /PUT CHAR IN WORK BUFFER ISZ CTRLSZ /INCREMENT WORD SIZE COUNT JMS WRKTSZ / " WORK BUFFER PTR & CHECK FOR OVERFLOW /RETURN FROM "WRKTSZ" WITH NORMAL RETURN IF PROCESSING WENT OKAY/A010 /WITH A SKIP RETURN IF IT IS A MATH CTRL BLK WRK BUF OVERFLOW /A010 /AND WITH A DOUBLE SKIP RTRN IF AN OVERFLOW BUT NOT MATH BLOCK /A010 CNTPRC, JMP CYCLE1 /NORMAL RETURN - GO CONTINUE PROCESSING /m044 ISZ XCTRLW /RETURN HERE FOR MATH CTRL BLK WRK BUF OVERFLOW /A010 ISZ XCTRLW /RETURN HERE FOR WRK BUF OVFLW & NOT MATH BLOCK /A010 JMP I XCTRLW /RETURN TO CALLER TO PROCESS ACCORDINGLY /A010 /d044 CNTPRC, JMP CYCLE1 /GO GET NEXT CHARACTER FROM LINE BUFFER /M010 ENDWRD, AC7777 /SET AC TO A MINUS ONE TAD WRKPTR /DECREMENT WORK BUFFER PTR BACK TO LAST CHAR INPUT DCA WRKPTR /AND SAVE IT AC4000 /PUT 4000 IN AC FOR COMPATIBILITY MATCH IN SYMBOL TBLE TAD I WRKPTR /GET LAST CHARACTER ENTERED INTO WORK BUFFER DCA I WRKPTR /SAVE IT BACK AS LAST CHAR IN INPUT CONTROL WORD TAD (WRKBUF /GET START OF WORK BUFFER DCA WRKPTR /INITIAL PTR TO THAT LOCATION TAD CTRLSZ /GET LENGTH OF WORD PLACED IN WORK BUFFER DCA I WRKPTR /SAVE IT AT THE START OF THE WORD IN WORK BUFFER JMP I XCTRLW /RETURN TO CALLER /ROUTINE PERFORMS THE FOLLOWING FUNCTIONS: INCREMENTS THE INPUT LINEBUF /A010 /PTR AND CHECKS FOR AN OVERFLOW. IF NONE THEN IT DOES A NORMAL RETURN /A010 /IF THERE IS ONE THEN A CHECK IS MADE TO SEE IF IT IS THE FIRST LINE OF /A010 /THE BLOCK. IF NOT THEN MUST BE MATH CTRL BLK INPUT LINBUF OVFLW ERROR /A010 /OTHERWISE WOULD NOT HAVE GOTTEN THAT FAR. IF IT IS THE FIRST LINE THEN /A010 /MUST PUT THE FIRST WORD OF THE OVERFLOWED INPUT LINE INTO THE WORK BUF /A010 /IF THE FIRST WORD OVERFLOWS THE WORK BUFFER THEN IT IS REGARDED AS NOT /A010 /BEING A MATH CONTROL BLOCK AND IS PROCESSED ACCORDINGLY. IF THE FIRST /A010 /WORD DOES FIT INTO THE WORK BUFFER THEN IT IS CHECKED BY THE COMMAND /A010 /PARSER TO SEE IF IT IS "WPSMATH". IF IT IS NOT THEN IT IS REGARDED AS /A010 /NOT BEING A MATH CONTROL BLOCK AND IS PROCESSED ACCORDINGLY. IF IT IS /A010 /"WPSMATH" THEN IT IS CONSIDERED A MATH INPUT LINEBUF OVERFLOW ERROR /A010 LNETSZ, XX /MATH CTRL BLK INPUT LINE BUF OVFLW CHECK RTN ISZ LNEPTR /INCREMENT LINE BUFFER POINTER TAD (-UPLNE /GET UPPER LIMIT OF INPUT LINE BUFFER TAD LNEPTR /GET LATEST ADDR AVAILABLE IN INPUT LINE BUFFER SPA CLA /IS THE INPUT LINE BUFFER OVERFLOWED? JMP I LNETSZ / NO: JUST RETURN TO CALLER TAD FSTLNE / YES: GET "CONTROL BLOCK FIRST LINE" FLAG SZA CLA /IS IT THE FIRST LINE OF THE CONTROL BLOCK? JMP YESMTH / NO: SERVICE MATH CTRL BLK LINBUF OVFLW ERROR /A010 /IF 1ST LINE OF CTRL BLK & IS OVERFLOW THEN SEE IF MATH CTRL BLK/A010 JMS XCTRLW /PUT 1ST WORD OF 1ST LINE OVERFLOW INTO WORK BUF/A010 /THE "XCTRLW" RTN PERFORMS A VARIETY OF GYMNASTICS BEFORE /A010 /RETURNING. IN THE CASE OF A WORK BUFFER OVERFLOW A CHECK /A010 /IS DONE TO SEE WHAT LINE OF THE CONTROL BLOCK IS BEING /A010 /PROCESSED. IF A WORK BUFFER OVERFLOW OCCURS WITH THE FIRST /A010 /LINE THEN THE BLOCK IS NOT MATH BECAUSE IF IT WERE THERE /A010 /WOULD BE NO OVERFLOW. IF IT IS NOT THE FIRST LINE THEN /A010 /THE BLOCK HAS TO BE MATH TO HAVE GOTTEN BEYOND THE FIRST LINE /A010 /THE CASES SPECIFIED ARE HANDLED VIA SKIP RETURNS FROM "XCTRLW" /A010 JMP MTHCHK /IF WORD PUT IN WRK BUF O.K. GO SEE IF MATH BLK /A010 JMP NOTMTH /IF OVERFLOW THEN NOT MATH, SET UP TO DUMP BLOCK/A010 /NOTE: NORMALLY "XCTRLW" WILL DO A DOUBLE SKIP /A010 /RETURN WHEN THE BLOCK IS MATH AND THE WORK BUF /A010 /IS OVERFLOWED. IN THIS CONTEXT, HOWEVER, IT CAN/A010 /NEVER DOUBLE SKIP RETURN BECAUSE THIS CODE IS /A010 /USED ONLY WHEN SERVICING A INPUT LINEBUF OVFLW /A010 /ON THE 1ST LINE OF THE BLOCK. THEREFORE IF THE /A010 /WORK BUF OVERFLOWS AT THIS POINT IT IS ASSUMED /A010 /TO NOT BE A MATH CONTROL BLOCK & IS PROCESSED /A010 /AS SUCH. MTHCHK, JMS CMDPSR /CHK IS 1ST WORD OF OVRFLOWED 1ST LINE "WPSMATH"/A010 WRKBUF / PASS START OF WORK BUFFER TO "CMDPSR" /A010 WPSMTH / PASS START OF PERMANENT SYM TBL FOR COMPARISON/A010 SNA CLA /IS RETURNED AC A 1 (I.E. MATCH FOUND)? /A010 JMP NOTMTH / NO: THEN PROCESS AS NOT MATH CTRL BLOCK /A010 YESMTH, /SINCE "RDLNBF" IS USED BE THE ERROR HANDLING CODE TO PLACE THE /A014 /INPUT LINE BUFFER ERROR UP ON THE SCREEN, IT MUST BE MADE /A014 /COMPATIBLE WITH THIS OVERFLOW ERROR ENCOUNTERED, BY SETTING THE/A014 /"LNEBFC" - LINE BUFFER COUNT TO THE MAX # OF CHAR. IN THIS WAY /A014 /THE WHOLE INPUT LINE, UP TO THE OVERFLOW, CAN BE PUT UP ON THE /A014 /SCREEN WHEN THE ERROR MESSAGE IS REPORTED TO THE USER. /A014 AC7777 / YES: GET MAX SIZE OF INPUT LINE BUFFER /A014 DCA LNEBFC /SET LINE BUF CHAR COUNT IN "RDLNBF" TO MAX SIZE/A014 /DOUBLE INCREMENT "LNETSZ" TO RETURN MATH CTRL BLOCK OVFLW ERROR/A010 ISZ LNETSZ /SINCE IT IS A MATH CTRL BLOCK, PROCESS AS /A010 / MTH CTRL BLK INPUT LINE BUF OVFLW ERROR /A010 / DOUBLE INCREMENT PC TO RETURN MTH ERROR /A010 NOTMTH, ISZ LNETSZ /SINGLE INCREMENT PC TO RETURN AS NOT MATH BLOCK/A010 TAD (EVFLW6 /GET INPUT LINE BUF OVERFLOW ERROR VALUE INTO AC/A010 JMP I LNETSZ /RETURN TO CALLER /A010 /RTN TO INCREMENT PTR AND TEST FOR OVERFLOW OF WORK BUFFER. IF THE WORK /A010 /BUFFER NOT OVERFLOWED THEN A NORMAL RETURN IS MADE. IF IT IS THEN A /A010 /CHECK IS MADE TO SEE IF IT IS THE FIRST LINE OF THE CONTROL BLOCK. /A010 /IF IT IS THE FIRST LINE THEN THE RETURN IS SET TO PROCESS AS NOT BEING /A010 /A MATH CTRL BLK. IF IT IS NOT THE FIRST LINE THEN MUST BE MATH BLOCK /A010 /OTHERWISE COULD NOT HAVE GOTTEN THAT FAR SO PROCESS AS MATH CTRL BLOCK /A010 /WORK BUFFER OVERFLOW ERROR /A010 WRKTSZ, XX / ISZ WRKPTR /INCREMENT WORK BUFFER POINTER TAD (-UPWRK /GET UPPER LIMIT OF WORK BUFFER TAD WRKPTR /GET LATEST ADDR AVAILABLE IN WORK BUFFER SPA CLA /IS THE WORK BUFFER OVERFLOWED? JMP I WRKTSZ / NO: JUST RETURN TO CALLER /M010 TAD FSTLNE / YES: GET "CONTROL BLOCK 1ST LINE" FLAG /A010 SZA CLA /IS IT THE FIRST LINE OF THE BLOCK? /A010 JMP OVWKBF / NO: THEN MATH CTRL BLK WRK BUFF OVERLOW ERROR/A010 ISZ WRKTSZ / YES: DOUBLE SET PC &RTRN TO DUMP NOT MATH BLK/A010 OVWKBF, ISZ WRKTSZ /SINGLE BUMP PC TO RTRN WRK BUF OVERFLOW ERROR /A010 TAD (EVFLW7 /GET MATH WORK BUFFER OVRFLW ERROR VALUE INTO AC/A010 JMP I WRKTSZ /RETURN TO CALLER /A010 /ROUTINE TO HANDLE "BEGIN" CONTROL WORD IN EDITOR MATH CONTROL BLOCK /A020 BEGIN, XX JMS CHKLNE /CHK FOR NON-ALLOWABLE CHARS ON SAME LINE AS... /A024 /....AND RIGHT AFTER CONTROL WORD /A024 JMP ERRBCK /RETURN HERE FROM "CHKLNE" WITH ERROR NUM IN AC /A026 /.. TO PASS BACK IF NON-LEGAL CHARS FOUND ON LNE/A026 TAD MTHWRK /GET EDITOR MATH WORK AREA FLAG /M033 SNA CLA /ARE WE JUST BEGINNING AN EDITOR MATH WORK AREA?/M033 JMP ERROR3 / NO: RETURN ERROR - MATH AREA ALREADY BEGUN /M033 /THE FOLLOWING ERROR MIGHT NEVER BE REPORTED BECAUSE IT WILL /BE SUPERCEDED BY TRAPPING OUT THE PREVIOUS ERROR FIRST. HERE /FOR INSURANCE ANYWAY. TAD MTHSND / YES: GET MATH CTRL BLOCK SECOND LINE FLAG /M033 SZA CLA /ARE WE PROCESSING THE SECOND LINE? /M033 JMP ERROR4 / NO: REPORT ERROR - "BEGIN" ON WRONG LINE /M033 /DO FULL INITIALIZATION AT START OF EDIT MATH WORK AREA - BECOMES /A020 /MEANINGFUL WHEN HAVE TO BACK UP TO START OF MATH WORK AREA AND /A020 /REPROCESS EDIT MATH WORK AREA , OR IF FIND OTHER MATH WORK AREAS IN /A020 /SAME DOCUMENT /A020 AC0001 / YES: PUT 1 IN AC TO SET "MTHTYP" IN "RTRN4" /A020 JMS RTRN4 / YES: CALL MATH INITIALIZATION ROUTINES /A020 /ONCE RETURNED FROM "RTRN4" HAVE TO RESET "START OF EDIT MATH WORK AREA"/A020 /FLAG = TRUE BECAUSE NOT LIKE INITIALIZATION TIME ONCE GET THIS FAR /A020 /MEANS MUST BE IN MATH WORK AREA. ALSO MUST RESET "IN CONTROL BLOCK" /A020 /FLAG IN EDITOR MATH CODE IN LP FIELD BACK TO TRUE BECAUSE ONCE GET THIS/A020 /FAR MUST BE IN CTRL BLOCK TOO! /A020 DCA MTHWRK /RESET "START OF EDIT MATH WORK AREA"=TRUE /A020 CDFLP /CHANGE TO LP DATA FIELD /A020 DCA I (INCTLB /RESET "IN CONTROL BLOCK" = TRUE /A020 /D034 /SET BEGFLG FLAG TO TELL MTHBEG ROUTINE IN THE EDITOR TO SCROLL /A027 /D034 /BACK TO THE TOP OF THE CTRL BLOCK & INSERT THE MATH_BEGIN CODE. /A027 /D034 /THIS WILL HAPPEN NEXT TIME THE EDITOR GOES TO EINEXT ROUTINE. /A027 /D034 AC0001 / /A027 /D034 DCA I (BEGFL) /SET FLAG (IN LP FIELD) /A027 CDFMYF /RETURN TO MATH DATA FIELD ISZ BEGIN /SET UP SKIP FOR NORMAL RETURN /A027 JMP I BEGIN /RETURN TO CALLER /A027 ERROR4, TAD (EVSYN4-EVSYN3 /RTRN "BEGIN" ON WRONG LINE ERROR /M027 ERROR3, TAD (EVSYN3 /RTRN EDIT MATH WORK AREA ALREADY BEGUN ERR /M024 JMP I BEGIN /RETURN TO CALLER WITH ERROR NUMBER IN AC /A021 /**************************************************************************** / FLGCTL Moved here from location in LEXASC to create space /a044 /**************************************************************************** / FLaG_ConTroL / Enter with AC bits set to NUMFLG bits you want disabled. FLGCTL, XX CMA AND NUMFLG / AND NUMFLG with complemented bits in AC DCA NUMFLG / update NUMFLG JMP I FLGCTL X=. / INDICATE FIRST FREE LOCATION /A041 / ------------------ PAGE / /++ / "CMDPSR" - COMMAND PARSER / /FUNTIONAL DESCRIPTION: CMDPSR / /PSEUDO-CODE DESCRIPTION: / / COMMAND PARSER PSUEDO-CODE / /START PROGRAM / SAVE PASSED STARTING ADDRESS OF INPUT_WORD / SAVE " " " " SYMBOL_TABLE / INITIALIZE SYMBOL_TABLE_POINTER / INITIALIZE SYMBOL_TABLE_WORD_COUNTER = 0 / SAVE PASSED INPUT STRING CHARACTER LENGTH AS - INPUT_WORD_LENGTH / INCREMENT STARTING ADDRESS OF INPUT_WORD (TO FIRST CHAR OF INPUT STRING) / DO WHILE SEARCH NOT DONE / | INITIALIZE INPUT_STRING_POINTER / | INITIALIZE INPUT_STRING_CHARACTER_LENGTH_COUNTER = - INPUT_WORD_LENGTH / | INCREMENT SYMBOL_TABLE_WORD_COUNTER / | DO WHILE CHARACTER COMPARISON NOT DONE / | | IF INPUT_WORD_CHARACTER <> SYMBOL_TABLE_WORD_CHARACTER / | | | THEN / | | | CHARACTER COMPARISON DONE / | | | DO WHILE SYMBOL_TABLE_WORD_CHARACTER NOT NEGATIVE / | | | | INCREMENT SYMBOL_TABLE_POINTER / | | | | ENDD0 / | | | INCREMENT SYMBOL_TABLE_POINTER / | | | IF SYMBOL_TABLE_WORD_CHARACTER = 0 / | | | | THEN SEARCH DONE / | | | | ENDIF / | | | ELSE / | | | INCREMENT SYMBOL_TABLE_POINTER / | | | INCREMENT INPUT_STRING_POINTER / | | | INCREMENT INPUT_STRING_CHARACTER_COUNTER / | | | IF INPUT_STRING_CHARACTER_COUNTER = 0 / | | | | THEN SEARCH DONE / | | | | CHARACTER COMPARISON DONE / | | | | ENDIF / | | | ENDIF / | | ENDDO / | ENDDO / RETURN STATUS OF WORD COMPARED /END PROGRAM / / / /CALLING SEQUENCE: JMS CMDPSR / / /INPUT PARAMETERS: COME INTO THIS RTN WITH THE FOLLOWING / VALUES SET RIGHT AFTER THE CALL / JMS CMDPSR /THE CALL... / /...MADE TO THE COMMAND PARSER / XXXXX /#1 - THE ADDR OF THE START OF THE INPUT STRING TO BE COMPARED, / / ALONG WITH IT'S LENGTH IN THE FIRST LOC OF THAT STRING. / YYYYY /#2 - THE ADDR OF THE START OF THE SYMBOL TBLE WITH WHICH TO / / RUN THE COMPARISON. / / /IMPLICIT INPUT: RTNVAL / /OUTPUT PARAMETERS: VALUE IN THE AC / / IF THERE IS A MATCH THEN THIS ROUTINE PASSES BACK TO / THE CALLER IN THE AC THE NUMBER OF THE WORD IN THE / SYMBOL TABLE THAT HAS BEEN MATCHED. / IF THERE IS NO MATCH THEN THIS ROUTINE PASSES BACK TO / THE CALLER A ZERO VALUE IN THE AC. / /IMPLICIT OUTPUT: NONE / /COMPLETION CODE: NONE / /SIDE EFFECTS: NONE / /-- / /COMMAND PARSER ROUTINE CMDPSR, XX /MATH CONTROL BLOCK PARSER ROUTINE / CLA /CLEAR AC TAD I CMDPSR /GET LEAD ADDR OF INPUT STRING ROUTINE DCA SAVLOC /SAVE IT ISZ CMDPSR /INCREMENT PC TO SET UP FOR NEXT PARAMETER PASSED TAD I CMDPSR /GET LEAD ADDR OF SYMBOL TABLE TO BE USED DCA TEMPS4 /SAVE IT DCA RTNVAL /INITIALIZE SYMBOL TABLE WORD COUNTER TO ZERO ISZ CMDPSR /INCREMENT PC TO SET UP FOR RETURN TO CALLER TAD I SAVLOC /GET INPUT STRING CHARACTER LENGTH CIA /GET NEGATIVE AND DCA HLDSTN /SAVE AS INPUT STRING CHARACTER LENGTH ISZ SAVLOC /MOVE INPUT STRING CHARACTER POINTER TO FIRST CHAR /COMPARE INPUT WORD WITH WORD FROM SYMBOL NEXT2, TAD SAVLOC /GET START OF INPUT STRING DCA SAVTMP /INITIALIZE POINTER TO INPUT STRING TAD HLDSTN /GET INPUT STRING SIZE COUNTER /A038 DCA HLDST1 /INITIALIZE INPUT STRING CHAR COUNTER /A038 ISZ RTNVAL /INCREMENT SYMBOL TABLE WORD COUNTER NEXT3, TAD I SAVTMP /GET A CHARACTER FROM INPUT STRING AND (LOWMSK /IF CHAR IS LOWER CASE THAN STRIP AWAY LOWER CASE BIT CIA /GET IT'S NEGATIVE TAD I TEMPS4 /GET CHARACTER FROM SYMBOL TABLE SZA CLA /DO THE CHARACTERS MATCH? JMP MOVWRD / NO: GO MOVE TO START OF NEXT WORD IN SYMBOL TABLE ISZ SAVTMP / YES: INCREMENT INPUT STRING POINTER ISZ TEMPS4 /INCREMENT SYMBOL TABLE POINTER ISZ HLDST1 /IS IT THE END OF THE INPUT STRING? /M038 JMP NEXT3 / NO: GET NEXT SET OF CHARACTERS TO TRY MATCHUP / YES: THEN HANDLE INPUT WORD MATCHUP WITH SYMBOL TBL TAD RTNVAL /GET NUMBER OF SYMBOL TABLE WORD MATCHED AND BYENOW, JMP I CMDPSR /RETURN TO CALLER /SET UP SYMBOL TABLE POINTER FOR BEGINNING OF NEXT WORD MOVWRD, TAD I TEMPS4 /GET LAST CHARACTER CHECKED IN SYMBOL TABLE ISZ TEMPS4 /SET SYMBOL TABLE POINTER TO START OF NEXT WORD /A041 SMA CLA /IS IT A NEGATIVE (i.e. END OF WORD IN SYM TBL)?/A041 JMP MOVWRD / NO: THEN CHECK AGAIN UNTIL END OF WORD FOUND /A041 / YES: GO SET UP POINTER FOR NEXT WORD IN SYM TBL /D041 SPA CLA /IS IT A NEGATIVE (i.e. END OF THAT WORD IN SYM TBL)? /D041 JMP NEWRTN / YES: GO SET UP POINTER FOR NEXT WORD IN SYM TBL /D041 ISZ TEMPS4 / NO: THEN MOVE DOWN A CHARACTER....... /D041 JMP MOVWRD /......AND CHECK AGAIN UNTIL END OF WORD FOUND /D041 NEWRTN, ISZ TEMPS4 /SET SYMBOL TABLE POINTER TO START OF NEXT WORD /CHECK FOR END OF SYMBOL TABLE TAD I TEMPS4 /GET FIRST LETTER OF NEXT WORD IN SYMBOL TABLE SNA CLA /IS IT THE END OF THE SYMBOL TABLE? JMP BYENOW / YES: GO EXIT WITH ZERO IN AC FOR NO MATCH FOUND JMP NEXT2 / NO: GO COMPARE INPUT STRING TO NEXT WORD IN SYM TBL /VALUES USED IN COMMAND PARSER ROUTINE TEMPS4, 0 /POINTER TO PASSED SYMBOL TABLE SAVLOC, 0 /STORE STARTING ADDR OF INPUT STRING SAVTMP, 0 /STORE POINTER TO INPUT STRING RTNVAL, 0 /SYMBOL TABLE WORD COUNTER HLDSTN, 0 /NEGATIVE OF INPUT STRING LENGTH HLDST1, 0 /INPUT STRING CHAR COUNTER /A038 LOWMSK=4137 /MASK TO ELIMINATE BIT SIGNIFYING LOWER CASE CHARACTER /ITLZ ROUTINES MOVED TO ANOTHER PAGE FOR SPACE REASONS /D041 /BEGIN, MOVED TO ANOTHER PAGE FOR ROOM /D041 /END, MOVED TO ANOTHER PAGE FOR ROOM /D027 /TOTAL, MOVED TO ANOTHER PAGE FOR ROOM /D041 / THE FOLLOWING BUFFERS OF 123 LOCATIONS WERE MOVED TO TMATH FOR SPACE /A041 /STRING NUMBER BUFFERS USED BY LEXASC /A041 MAX=20 /DEFINE LENGTH OF MAX AREA FOR Z-BLOCK /A041 B, ZBLOCK MAX+3 /A041 C, ZBLOCK MAX+MAX /A041 SAC, ZBLOCK MAX+MAX /A041 X=. / INDICATE FIRST FREE LOCATION /A041 / ------------------ PAGE / /++ / "XLTFRM" - INFIX TO POSTFIX TRANSLATOR / /FUNTIONAL DESCRIPTION: XLTFRM / /PSEUDO-CODE DESCRIPTION: THIS PSEUDO-CODE EXPLAINS THE FORMATTING / OPERATIONS OF THE TRANSLATOR CODE WHERE / EVERYTHING TO THE LEFT OF AND INCLUDING THE / EQUAL SIGN IS PUT INTO POLISH NOTATION. / /INITIALIZE OPERATOR HANDLING STACK TO EMPTY /PUSH "=" DELIMITER ONTO STACK-MATCHES END OF FORMULA TOKEN VALUE & PRECEDENCE /SET "OPERAND EXPECTED" = TRUE /SET "NEXT INPUT PROCESSED" = TRUE /DO WHILE STACK NOT EMPTY / | IF "NEXT INPUT PROCESSED" = TRUE / | THEN INPUT NEXT INPUT / | ENDIF / | "NEXT INPUT PROCESSED" = FALSE / | IF "OPERAND EXPECTED" = TRUE / | |THEN / | | IF NEXT INPUT IS AN OPERAND / | | | THEN / | | | OUTPUT NEXT INPUT TO POLISH STRING / | | | SET "OPERAND EXPECTED" = FALSE / | | | SET "NEXT INPUT PROCESSED" = TRUE / | | | ELSE / | | | IF NEXT INPUT = "(" / | | | | THEN PUSH NEXT INPUT INTO OPERATOR STACK / | | | | ELSE / | | | | IF NEXT INPUT = UNARY OPERATOR / | | | | | THEN / | | | | | IF NO UNARY OPERATOR ON TOP OF STACK / | | | | | | THEN PUSH UNARY OPRTR & PRECEDENCE ON STK / | | | | | | ELSE OUTPUT OPERAND NOT RECEIVED ERROR / | | | | | | ENDIF / | | | | | ELSE OUTPUT OPERAND NOT RECEIVED ERROR / | | | | | ENDIF / | | | | ENDIF / | | | SET "NEXT INPUT PROCESSED" = TRUE / | | | ENDIF / | |ELSE / | | IF NEXT INPUT IS AN OPERATOR / | | | THEN / | | | CASE PRECEDENCE NEXT INPUT LESS/EQUAL/OR GREATER THAN TOP OF STK / | | | | LOWER / | | | | IF TOP OF STACK = "(" / | | | | | THEN / | | | | | OUTPUT "TOO MANY LEFT PARENTHESIS" / | | | | | ELSE / | | | | | POP STACK AND OUTPUT TO POLISH STRING / | | | | | ENDIF / | | | | EQUAL / | | | | IF TOP OF STACK = "(" / | | | | | THEN / | | | | | POP STACK / | | | | | SET "NEXT INPUT PROCESSED" = TRUE / | | | | | ELSE / | | | | | POP STACK AND OUTPUT TO POLISH STRING / | | | | | ENDIF / | | | | HIGHER / | | | | IF NEXT INPUT = ")" / | | | | | THEN / | | | | | OUTPUT "TOO MANY RIGHT PARENTHESIS" / | | | | | ELSE / | | | | | PUSH NEXT INPUT INTO OPERATOR STACK / | | | | | SET "OPERAND EXPECTED" = TRUE / | | | | | ENDIF / | | | | SET "NEXT INPUT PROCESSED" = TRUE / | | | | END CASE / | | | ELSE / | | | OUTPUT "OPERATOR NOT RECEIVED" / | | | ENDIF / | | ENDIF / | ENDDO / / /CALLING SEQUENCE: JMS XLTFRM / /INPUT PARAMETERS: NONE / /IMPLICIT INPUT: TOKVAL, / /OUTPUT PARAMETERS: MATH OVERFLOW & SYNTAX ERROR NUMBERS IN THE AC / /IMPLICIT OUTPUT: SYMTBL,MTHTBL,OUTLST,RESULT / /COMPLETION CODE: NONE / /SIDE EFFECTS: NONE / /-- / /THE FOLLOWING ROUTINE CONTAINS THE TRANSLATOR CODE FOR THE MATH PACKAGE. /IT IS CALLED FROM A HIGHER ROUTINE WHEN THERE IS A NEED TO CHANGE A MATH /CONTROL BLOCK FORMULA FROM INFIX TO POSTFIX FORMAT. IF THERE ARE ANY ERRORS /IN CONJUNCTION WITH THE SCANNING AND/OR TRANSLATION PROCESS THEY ARE RETURNED /TO THE CALLING ROUTINE AS A CODED NUMBER IN THE AC WITHOUT A SKIP JUMP RETURN XLTFRM, XX /TRANSLATION FROM INFIX TO POSTFIX ROUTINE CLA /CLEAR AC JMS INTLZE /PUT DELIMITER IN STACK, INITIALIZE PTRS, AND FLAGS /DO WHILE STACK NOT EMPTY DOWHLE, JMS EMPTY /CHECK TO SEE - IS STACK EMPTY? JMP ASGNMT / YES: GO HANDLE ASSIGNMENT VALUE JMS TSTINP / NO: GO TO INPUT AND PROCESSING ROUTINE JMS OPERND /GO PROCESS IF INPUT IS OPERAND OR OPERATOR JMP DOWHLE /LOOP BACK TO CONTINUE PROCESSING /NUMBER OF DIFFERENT ERRORS ENCOUNTERED IN THE SCANNER AND /TRANSLATOR RETURNED TO THE CALLER VIA THE AC ERRTKN, TAD TOKVAL /GET ERROR # PASSED FROM LEXIC JMP RTNERR /GO EXIT TRANSLATOR ROUTINE /SYNTAX ERRORS SYNR11, TAD (EYNR11-EYNER6 /FORMULA FORMAT SYNTAX ERROR /A008 SYNER6, TAD (EYNER6-EYNER5 /OPERAND VARIABLE EXPECTED NEXT & NOT RECEIVED SYNER5, TAD (EYNER5-EYNER4 /FORMAT OR END OF FORMULA EXPECTED & NOT REC'D SYNER4, TAD (EYNER4-EYNER3 /TOO MANY RIGHT PARENTHESIS SYNER3, TAD (EYNER3-EYNER2 /TOO MANY LEFT PARENTHESIS SYNER2, TAD (EYNER2-EYNER1 /OPERATOR EXPECTED NEXT BUT NOT RECEIVED SYNER1, TAD (EYNER1-EVFLW5 /OPERAND EXPECTED NEXT BUT NOT RECEIVED /DATA STRUCTURE OVERFLOW ERRORS OVFLW5, TAD (EVFLW5-EVFLW4 /RESULT PTR TBL OVRFLW ERROR /A001 OVFLW4, TAD (EVFLW4-EVFLW3 /OUTPUT LIST (POLISH STRING) OVERFLOW ERR OVFLW3, TAD (EVFLW3-EVFLW2 /SYMBOL TABLE OVERFLOW ERROR /NOTE: PRESENTLY (V1.2.2) ERROR "OVFLW2" CANNOT TAKE PLACE BECAUSE OF THE /RELATIVE SIZE OF THE SYMBOL TABLE TO THE SYMBOL POINTER TABLE. A SYMBOL /TABLE OVERFLOW WILL ALWAYS OCCUR BEFORE THE SYMBOL POINTER TABLE CAN /OVERFLOW. (ref. WPF1.PA & WPMN2.PA - "EVFLW2"). OVFLW2, TAD (EVFLW2-EVFLW1 /SYMBOL PTR TABLE OVRFLW ERR (SEE ABOVE NOTE) OVFLW1, TAD (EVFLW1 /STACK OVERFLOW ERROR RTNERR, JMP ERRBCK /GO EXIT TRANSLATOR ROUTINE WITH ERROR # IN AC /EXIT TRANSLATOR ROUTINE EXTXLT, ISZ XLTFRM /SKIP JMP BACK FOR NORMAL RETURN JMP I XLTFRM /RETURN TO CALLER / /++ / "ASGNMT" - ASSIGNMENT ROUTINE / /FUNTIONAL DESCRIPTION: ASGNMT / /PSEUDO-CODE DESCRIPTION: NOTE: FOLLOWING PSEUDO-CODE HANDLES EVERYTHING / TO THE RIGHT OF THE EQUAL SIGN, AND THEN ONLY / AFTER THE INFIX TO POSTFIX TRANSLATION HAS / COMPLETED ON EVERYTHING TO THE LEFT OF THE / EQUAL SIGN. / /SET "NEXT INPUT PROCESSED" FLAG = TRUE /SET "OPERAND EXPECTED NEXT" = TRUE /INPUT NEXT INPUT /IF NEXT INPUT IS AN OPERAND VARIABLE / | THEN / | OUTPUT NEXT INPUT TO POLISH STRING / | SET "NEXT INPUT PROCESSED" FLAG = TRUE / | ELSE / | OUTPUT SYNTAX ERROR "OPERAND VARIABLE EXPECTED NEXT BUT NOT RECEIVED" / | ENDIF /INPUT NEXT INPUT /IF NEXT INPUT IS A FORMAT STATEMENT / | THEN / | PROCESS FORMAT STATEMENT / | SET "NEXT INPUT PROCESSED" FLAG = TRUE / | INPUT NEXT INPUT / | ENDIF /IF NEXT INPUT IS NOT AN "END OF FORMULA" / | THEN / | OUTPUT SYNTAX ERROR "END OF FORMULA EXPECTED BUT NOT RECEIVED" / | ENDIF / / /CALLING SEQUENCE: JMP ASGNMT / /INPUT PARAMETERS: NONE / /IMPLICIT INPUT: TOKVAL,SVDFLC,DFAULT / /OUTPUT PARAMETERS: NONE / /IMPLICIT OUTPUT: SYMTBL,MTHTBL,RESULT,OUTLST,POSTFX / /COMPLETION CODE: NONE / /SIDE EFFECTS: NONE / /-- / /SENT HERE IF TRANSLATION OF LEFT SIDE OF FORMULA WENT OKAY. THE FOLLOWING /RTN IS USED TO SERVICE THE ASSIGNMENT VALUE TO THE RIGHT OF THE EQUAL SIGN ASGNMT, CLA /SET AC TO ZERO DCA NXTPRS /SET "NEXT INPUT PROCESSED" FLAG = TRUE DCA OPDNXT /SET "OPERAND EXPECTED NEXT" FLAG = TRUE JMS TSTINP /CALL LEXIC AND REQUEST NEXT INPUT /DO A CHECK HERE TO SEE IF USER PUT A HARD RETURN RIGHT AFTER /A016 /THE "=" SIGN IN THE EQUATION. IF SO IT IS TRAPPED OUT TO BE /A016 /REPORTED BACK TO THE USER TO MAKE HIM AWARE OF THIS /A016 TAD TOKEN /GET INPUT TOKEN PASSED BACK FROM LEXIC /A032 TAD (-OPERAT /GET NEGATIVE OF OPERATOR TOKEN /A032 SZA CLA /IS THE TOKEN PASSED BACK AN OPERATOR? /A032 JMP ASGNM1 / NO: THEN CONTINUE TO PROCESS INPUT /A032 TAD TOKVAL / YES: GET ASCII VALUE OF OPERATOR PASSED BACK /A016 TAD (-ECNWLN /GET NEGATIVE OF END OF LINE (HARD RETURN) /A016 SNA CLA /IS THE OPERATOR A HARD RETURN? /A016 JMP SYNR11 / YES: SYNTAX ERROR - FORMULA FORMAT INCORRECT /A016 / NO: IF HARD RETURN NOT FOUND THEN COME HERE /A016 / TO CONTINUE PROCESSING INPUT /A016 ASGNM1, TAD TOKEN /GET INPUT TOKEN PASSED BACK /M032 TAD (-OPERAN /GET NEGATIVE OF OPERAND VARIABLE TOKEN SZA CLA /IS INPUT TOKEN AN OPERAND VARIABLE? JMP SYNER6 / NO: SYNTAX ERROR "OPERAND VARIABLE NOT RECEIVED" JMS OPERND / YES: PROCESS IT & PUT VALUE ADDR IN OUTPUT LIST JMS RLTOUT /PUT ASSIGNMENT OPERAND INFO INTO RESULT PTR TBL /A001 JMS TSTINP /CALL LEXIC AND REQUEST NEXT INPUT TAD TOKEN /GET INPUT TOKEN PASSED BACK TAD (-FORMAT /GET NEGATIVE OF FORMAT STATEMENT SZA CLA /IS IT A FORMAT STATEMENT TOKEN? JMP ENDTKN / NO: SEE IF IT IS AN "END OF FORMULA" TOKEN / YES: DO FORMAT CHECK ROUTINE /A009 /IF FORMAT STATEMENT IS PART OF A "SET" COMMAND /A039 /THEN ALWAYS PROCESS THE FORMAT. IF NOT THEN /A039 /CHECK IF USER FORMAT ALREADY SPECIFIED FOR THE /A009 /ASSIGNMENT VARIABLE FROM A PREVIOUS CTRL WORD /A009 /STATEMENT. CANNOT HAVE TWO DIFFERENT USER /A009 /SPECIFIED FORMATS IN THE SAME CTRL BLOCK FOR /A009 /THE SAME RESULT VARIABLE CAUSE OF MATH ERRORS /A009 TAD I SVDFLC /GET PRESENT FORMAT SETTING OF ASSIGNMENT VAR /A009 CIA /GET IT'S NEGATIVE /A009 TAD (DFAULT /ADD TO IT DFAULT FORMAT SETTING /A009 SZA CLA /HAS THE USER ALREADY SPECIFIED A FORMAT /A009 TAD SETFLG / YES: BUT FIND OUT WHAT KIND OF COMMAND /A039 SZA CLA / IS THIS A FORMULA COMMAND /A039 JMP SKPFMT / YES: IGNORE IT - FORMAT ALREADY SPECIFIED /A009 / NO: DO FORMAT STATEMENT PROCESSING ROUTINE TAD TOKVAL /GET FORMAT STATEMENT PASSED FROM LEXIC DCA I SVDFLC /OVERWRITE IT INTO LOCATION OF DEFAULT FORMAT ..../M007 /SETTING OF ASSIGNMENT VALUE OF INPUT OPERAND VARIABLE SKPFMT, DCA NXTPRS /SET "NEXT INPUT PROCESSED" = TRUE JMS TSTINP /CALL SCANNER AND REQUEST NEXT INPUT /END OF FORMULA PROCESSING ROUTINE ENDTKN, TAD TOKVAL /GET INPUT FROM TOKVAL INTO AC TAD (-ECNWLN /GET NEGATIVE OF END OF LINE (HARD RETURN) SZA CLA /IS IT THE END OF THE FORMULA? JMP SYNER5 / NO: SYNTAX ERROR "END OF FORMULA NOT RECEIVED" /PLACE JMP I OUTEXT AT END OF OUTPUT LIST SO IT CAN BE /USED AS A SUBROUTINE BY THE EXECUTION CODE TAD (JMP I OUTEXT /GET VALUE OF JMP I OUTEXT DCA I OUTPTR /SAVE IT AT THE END OF THE OUTPUT LIST /GO SET UP TO LEAVE THE TRANSLATOR JMP EXTXLT / YES: GO EXIT XLTFRM ROUTINE (i.e. TRANSLATOR) SVDFLC, 0 /POINTER TO LOCATION OF FORMAT STATEMENT OF /A007 /LAST OPERAND PROCESSED. SET UP BY 'MATCH' /A007 /OR 'SYMADD' ROUTINES /A007 SETFLG, 0 /FLAG WORD USED TO DETERMINE IF FORMAT SHOULD /A039 /BE PROCESSED. SETFLG = 0 FOR A SET COMMAND /A039 /AND SETFLG = 1 FOR A FORMAT COMMAND. /A039 /SINCE A SET STATEMENT ABSOLUTELY CHANGES THE /A039 /VALUE OF AN OUTPUT VARIABLE, IT'S FORMAT CAN'T /A039 /AFFECT THE ACCURACY OF ANY CALCULATIONS IN /A039 /PROGRESS. CHANGING THE FORMAT OF A FORMULA /A039 /OUTPUT VARIABLE CAN CAUSE INACCURACIES BY /A039 /INTRODUCING ROUNDING ERRORS. /A039 /THIS SUBOUTINE PLACES INPUT FORMULA ASSIGNMENT OPERAND VARIABLE PTR TO /A001 /START OF NAME INTO RESULT PTR TBL AFTER CHECKING TO SEE THAT A COPY OF /A001 /IT IS NOT THERE ALREADY. IF ONE IS THEN A RETURN IS MADE TO THE /A001 /CALLER WITHOUT FURTHER ACTION. /A001 /FIRST CHECK TO SEE IF ALREADY HAVE NAME IN RESULT PTR TBL /A001 RLTOUT, XX /OUTPUT TO RESULT PTR TABLE RTN /A001 TAD (RESULT /INITIALIZE TEMPORARY POINTER TO RESULT TBL /A001 DCA TMPTR1 /AND SAVE /A001 BCKOVR, TAD TMPTR1 /GET IT BACK AND /A001 CIA /CHECK TO SEE IF IT /A001 TAD RESPTR /IS THE END OF /A001 SNA CLA /THE RESULTS PTR TBL? /A001 JMP INJECT / YES: GO HANDLE ACCORDINGLY /A001 TAD NMEPTR / NO: GET INPUT OPERAND VARIABLE NAME PTR /A001 CIA /GET IT'S NEGATIVE /A001 TAD I TMPTR1 /GET OPRND VARIABLE NAME PTR FROM RESULT PTR TBL /A001 SNA CLA /IS THE PTR ALREADY IN THE TABLE? /A001 JMP SPLIT / YES: THEN GO EXIT RTN WITHOUT DOING ANYTHING /A001 ISZ TMPTR1 / NO: SET UP FOR NEXT OPRND VARIABLE NAME PTR /A001 JMP BCKOVR /GO COMPARE INPUT WITH NEXT PTR FROM TABLE /A001 /PLACE PTR TO UNMATCHED ASSIGNMENT OPERAND NAME INTO RSLT PTR TBL/A001 INJECT, TAD NMEPTR /GET PTR TO ASSIGNMENT OPERAND VARIABLE NAME /A001 DCA I RESPTR /PLACE IT IN THE RESULT PTR TBL /A001 JMS RESTSZ /INCREMENT RESULT PTR TBL PTR & CHK FOR OVERFLOW /A001 SPLIT, JMP I RLTOUT /RETURN TO CALLER /A001 /THE FOLLOWING ROUTINE IS USED TO INCREMENT THE STACK POINTER AND PUSH /A VALUE ONTO THE OPERATOR HANDLING STACK. THE VALUE TO BE PUT ON THE STACK /IS PASSED TO THE ROUTINE VIA THE AC WHEN A CALL IS MADE TO THIS ROUTINE. /THIS ROUTINE ALSO CHECKS FOR A OPERATOR HANDLING STACK OVERFLOW ERROR. PSHSTK, XX /"PUSH ON TO THE STACK" ROUTINE ISZ POSTSP /INCREMENT STACK POINTER DCA I POSTSP /PUSH VALUE PASSED IN THE AC ON TO THE STACK TAD (-UPOPSK /GET NEGATIVE OF UPPER LIMIT OF OPERATOR STACK TAD POSTSP /GET SIZE OF STACK POINTER SNA CLA /IS THERE A STACK OVERFLOW CONDITION? JMP OVFLW1 / YES: GO PROCESS STACK OVERFLOW ERROR JMP I PSHSTK / NO: RETURN TO CONTINUE PROCESSING /THIS ROUTINE CLEARS TOP OPERATOR & IT'S PRECEDENCE OFF STACK FLSHST, XX /FLUSH TOP OF STACK ROUTINE JMS POPSTK /GET PRECEDENCE OFF STACK JMS POPSTK /GET OPERATOR OFF STACK CLA /THROW AWAY VALUE RETURNED IN AC JMP I FLSHST /RETURN TO CALLER /D041 /ROUTINE TO INCREMENT SYMBOL POINTER TABLE POINTER AND TEST FOR OVERFLOW /D041 MTHTSZ, XX /SYM PTR TBL PTR INCREMENT AND OVERFLOW TEST /D041 ISZ MTHPTR /INCREMENT SYM PTR TBL POINTER /D041 TAD (-UPMTH /GET NEGATIVE OF SYM PTR TBL UPPER LIMIT /D041 TAD MTHPTR /GET ADDRESS IN POINTER TO TABLE /D041 SNA CLA /IS THERE AN OVERFLOW? /D041 JMP OVFLW2 / YES: GO PROCESS SYMBOL PTR TABLE OVERFLOW ERROR /D041 JMP I MTHTSZ / NO: RETURN TO CONTINUE PROCESSING /SYMTSZ, MOVED HERE ON EDIT 041 FOR SPACE REASONS /ROUTINE TO OUTPUT CHAR TO SYMBOL TABLE AND INCREMENT SYMBOL TABLE /M005 /POINTER AND TEST FOR OVERFLOW SYMTSZ, XX /SYM TABLE PTR INCREMENT AND OVERFLOW TEST DCA I SYMPTR /OUTPUT CHAR PASSED IN AC TO SYMBOL TABLE /A005 ISZ SYMPTR /INCREMENT SYMBOL TABLE POINTER TAD (-UPSMTB /GET NEGATIVE OF SYM TABLE UPPER LIMIT TAD SYMPTR /GET ADDRESS IN POINTER TO TABLE SNA CLA /IS THERE AN OVERFLOW? JMP OVFLW3 / YES: GO PROCESS SYMBOL TABLE OVERFLOW ERROR JMP I SYMTSZ / NO: RETURN TO CONTINUE PROCESSING X=. / INDICATE FIRST FREE LOCATION /A041 / ------------------ PAGE /ROUTINE TO INCREMENT OUTPUT LIST POINTER AND TEST FOR OVERFLOW /SAVES VALUE PASSED TO IT IN THE AC THEN BUMPS AND TESTS POINTER OUTTSZ, XX /OUTPUT LIST PTR INCREMENT AND OVERFLOW TEST DCA I OUTPTR /PLACE PASSED VALUE IN OUTPUTLIST ISZ OUTPTR /INCREMENT OUTPUT LIST POINTER TAD (-UPOPLT /GET NEGATIVE OF OUTPUT LIST UPPER LIMIT TAD OUTPTR /GET ADDRESS IN POINTER TO TABLE SNA CLA /IS THERE AN OVERFLOW? JMP OVFLW4 / YES: GO PROCESS OUTPUT LIST OVERFLOW ERROR JMP I OUTTSZ / NO: RETURN TO CONTINUE PROCESSING /RTN INCREMENTS RESULT PTR TBLE PTR, TESTS FOR OVERFLOW, & INITS NXT LOC/A001 RESTSZ, XX /RESULT PTR TBL PTR INCREMENT AND OVERFLOW TEST /A001 ISZ RESPTR /INCREMENT RESULT POINTER TABLE POINTER /A001 TAD (-UPRES /GET NEGAIIVE OF RESULT PTR TABLE UPPER LIMIT /A001 TAD RESPTR /GET ADDRESS IN POINTER TO TABLE /A001 SNA CLA /IS THERE AN OVERFLOW? /A001 JMP OVFLW5 / YES: GO PROCESS RESULT PTR TABLE OVERFLOW /A001 DCA I RESPTR / NO: INIT NEXT LOC IN RESULT PTR TBL TO ZERO /A001 JMP I RESTSZ / NO: RETURN TO CONTINUE PROCESSING /A001 /INITIALIZE POSTFIX CONVERSION OPERATOR HANDLING STACK, POINTERS TO STACKS AND /BUFFERS OPERATION SPECIFICATION FLAGS (i.e. "NEXT INPUT PROCESSED" AND /"OPERAND EXPECTED NEXT"). ETC. INTLZE, XX /INITIALIZATION ROUTINE TAD (POSTFX-1 /GET LOCATION ONE LESS THAN OPERATOR HANDLING STACK DCA POSTSP /SET STACK POINTER TO ONE LESS THAN START OF STACK DCA OPDNXT /SET "OPERAND EXPECTED NEXT" FLAG TO TRUE DCA NXTPRS /SET "NEXT INPUT PROCESSED" FLAG TO TRUE TAD (EQUAL /GET BOTTOM DELIMITER OF STACK JMS PSHSTK /PUSH IT ONTO OPERATOR HANDLING STACK TAD EQLVAL+1 /GET PRECEDENCE OF STACK DELIMITER JMS PSHSTK /PUSH IT ONTO OPERATOR HANDLING STACK JMP I INTLZE /RETURN TO CALLER /ROUTINE TO CHECK TO SEE IF THE STACK IS EMPTY EMPTY, XX /STACK EMPTY TEST ROUTINE TAD (POSTFX /GET BASE OF STACK CIA /GET NEGATIVE TAD POSTSP /ADD TO IT ADDRESS IN STACK POINTER SMA CLA /IS STACK EMPTY? ISZ EMPTY / NO: INCREMENT PC FOR NORMAL RETURN JMP I EMPTY / YES: RETURN TO END TRANSLATOR ROUTINE /THE FOLLOWING ROUTINE IS DONE WHILE THE STACK IS NOT EMPTY. IT TESTS FOR /INPUTS AND PROCESSING STATUS AND REQUESTS THE NEXT INPUT WHEN THE CONDITIONS /ARE MET. TSTINP, XX /TEST INPUT AND PROCESSING ROUTINE TAD NXTPRS /GET "NEXT INPUT PROCESSED" FLAG SZA CLA /IS NEXT INPUT PROCESSED YET? JMP DWNOUT / NO: THEN GO SET "NEXT INPUT PROCESSED" FLAG = FALSE JMS LEXIC / YES: GO GET NEXT INPUT TOKEN DCA TOKEN /SAVE TOKEN RETURNED IN AC TAD TOKEN /GET IT BACK SNA CLA /IS AN ERROR CONDITION PASSED BACK FROM SCANNER? JMP ERRTKN / YES: GO PROCESS SCANNER ERROR AND EXIT TRANSLATOR / NO: THEN TOKEN HAS TO BE AN OPERAND OR OPERATOR /SO GET FLAG & RETURN TO HANDLE EITHER OF THEM DWNOUT, AC7777 /GET A MINUS 1 TO SET "NEXT INPUT PROCESSED" FLAG DCA NXTPRS /SET "NEXT INPUT PROCESSED" = FALSE JMP I TSTINP /RETURN TO CALLER /THIS ROUTINE CHECKS TO SEE IF AN OPERAND IS EXPECTED. IF ONE IS THEN /IF THE TOKEN VALUE IN TOKEN (JUST PICKED UP FROM INPUT ROUTINE) /IS AN OPERAND IT IS OUTPUT TO THE POLISH STRING. IF NOT THEN IT CHECKS /FOR EITHER A LEFT PARENTHESIS OR UNARY MINUS, (IN THAT ORDER). /IF EITHER IS FOUND IT IS PUSHED ON TO THE OPERATOR STACK. IF NOT THEN /A "SYNTACTICAL ERROR" IS OUTPUT. APPROPRIATE FLAGS ARE SET ACCORDINGLY. /ELSE IF AN OPERAND IS NOT EXPECTED THEN GO PROCESS AS AN OPERATOR. /ROUTINE TO PROCESS OPERAND/OPERATOR OPERND, XX /OPERAND PROCESSING ROUTINE TAD OPDNXT /GET "OPERAND EXPECTED NEXT" FLAG SZA CLA /IS OPERAND EXPECTED NEXT? JMP OPRTOR / NO: THEN GO PROCESS AS OPERATOR / YES: THEN CHECK IF INPUT IS AN OPERAND VARIABLE TAD TOKEN /GET TOKEN PASSED FROM LEXIC TAD (-OPERAN /SET AC TO NEGATIVE VALUE OF OPERAND TOKEN SNA /IS IT AN OPERAND VARIABLE? JMP OUTOP / YES: OUTPUT TO POLISH STRING, RESET FLAGS,& RETURN / NO: CHECK TO SEE IF THE OPERAND IS A NUMBER TAD (OPERAN-NUMTOK /RESET AC & GET NEGATIVE VALUE OF NUMBER TOKEN /M043 SNA CLA /IS THE OPERAND A NUMBER? JMP OPDNUM / YES: OUTPUT TO POLISH STRING, RESET FLAGS,& RETURN / NO: CONTINUE BY CHECKING FOR "(" OR UNARY OPERATOR TAD LTPVAL /GET LEFT PARENTHESIS NEGATED ASCII VALUE INTO AC TAD TOKVAL /GET ASCII VALUE OF TOKEN PASSED SNA CLA /IS THE OPERATOR A LEFT PARENTHESIS? JMP LFTPUT / YES: GO TO ROUTINE TO PUT IT ON THE STACK TAD TOKVAL / NO: GET ASCII VALUE OF TOKEN PASSED TAD SUBVAL /GET NEGATED ASCII VALUE OF "-" SIGN SNA CLA /IS THE OPERATOR A UNARY MINUS? JMP OUTUNY / YES: GO PROCESS IT TAD TOKVAL / NO: GET ASCII VALUE OF TOKEN PASSED TAD ADDVAL /GET NEGATED ASCII VALUE OF "+" SIGN SNA CLA /IS THE OPERATOR A UNARY PLUS? /M016 JMP OUTUNY / YES: GO PROCESS IT /M016 /DO A CHECK HERE TO SEE IF USER PUT A HARD RETURN IN PLACE OF AN/A016 /OPERAND IN THE LEFT SIDE OF THE EQUATION. IF SO IT IS TRAPPED /A016 /OUT TO BE REPORTED BACK TO THE USER TO MAKE HIM AWARE OF THIS /A016 TAD TOKVAL / NO: GET ASCII VALUE OF TOKEN PASSED BACK /A016 TAD (-ECNWLN /GET NEGATIVE OF END OF LINE (HARD RETURN) /A016 SNA CLA /IS THE OPERATOR A HARD RETURN? /A016 JMP SYNR11 / YES: SYNTAX ERROR - FORMULA FORMAT INCORRECT /A016 /AT THIS POINT EVEN IF A HARD RETURN HAS NOT BEEN FOUND, AN /A016 /ERROR CONDITION HAS BEEN DISCOVERED BECAUSE EITHER AN OPERAND /A016 /OR ONE OF THE ABOVE CONDITIONS SHOULD HAVE BEEN MET AT THIS /A016 /POINT IN THE MATH EXPRESSION /A016 JMP SYNER1 / NO: SYNTAX ERR PROCESS "OPERAND NOT RECEIVED"/A016 / YES: CHECK IF ALREADY HAVE UNARY OPTR ON TOP OF STK /MULTIPLY SEQUENTIAL UNARY OPERATOR INPUT CHECK RTN OUTUNY, TAD UNYMNS+1 /GET PRECEDENCE OF UNARY OPERATOR CIA /SET UP FOR COMPARISON TAD I POSTSP /GET PRECEDENCE OFF TOP OF STACK SNA CLA /IS THERE ALREADY A UNARY OPERATOR ON TOP OF THE STK? JMP SYNER1 / YES: SYNTAX ERROR, PROCESS "OPERAND NOT RECEIVED" / NO: THEN PUT UNARY OPTR & IT'S PRECEDENCE ON STK /NOTE UNARY "+" & "-" BY ADDING 1000 TO THEIR VALUE TAD TOKVAL /GET INPUTTED UNARY OPERATOR TAD (1000 /ADD 1000 TO DISTINGUISH UNARY FROM REGULAR OPERATOR JMS PSHSTK /PUT IT ON THE STACK TAD UNYMNS+1 /GET UNARY OPERATOR PRECEDENCE JMS PSHSTK /PUT IT ON THE STACK JMP FLAGST /GO SET "NEXT INPUT PROCESSED" FLAG = TRUE & EXIT /ROUTINE TO PUT LEFT PARENTHESIS & IT'S PRECEDENCE ON STACK LFTPUT, TAD TOKVAL /GET LEFT PARENTHESIS ASCII VALUE JMS PSHSTK /PUT IT ON THE STACK TAD LTPVAL+1 /GET LEFT PARENTHESIS PRECEDENCE VALUE JMS PSHSTK /PUT IT ON THE STACK JMP FLAGST /GO SET "NEXT INPUT PROCESSED" FLAG=TRUE /THE FOLLOWING CODE SETS THE FLAGS ACCORDINGLY AND THAN EXITS /THE OPERAND/OPERATOR HANDLING ROUTINE FLGFIX, AC7777 /GET NEGATIVE VALUE AND DCA OPDNXT /SET "OPERAND EXPECTED NEXT" FLAG = FALSE FLAGST, CLA /GET ZERO VALUE AND DCA NXTPRS /SET "NEXT INPUT PROCESSED" FLAG = TRUE BACKUP, JMP I OPERND /RETURN TO CALLER (i.e. EXIT OPERAND/OPERATOR... /...PROCESSING ROUTINE "OPERND"). /D041 /SUBRTN PUTS INPUT OPERAND VARIABLE VALUE ADDRESS /D041 /& "PUSH" RTN ADDRESS INTO OUTPUT LIST /D041 PUTLST, XX /RTN PUTS INPUT OPRND VAR & "PUSH" RTN INTO OUTPUT LST /D041 TAD (PUSH /GET STARTING ADDRESS OF OUTPUT "PUSH" ROUTINE /D041 JMS OUTTSZ /SAVE IT, INCREMENT OUTPUT LST PTR & TEST FOR OVERFLOW /D041 TAD SYMPTR /GET ADDR OF VALUE OF INPUT OPERAND FROM SYM PTR TABLE /D041 JMS OUTTSZ /SAVE IT, INCREMENT OUTPUT LST PTR & TEST FOR OVERFLOW /D041 JMP I PUTLST /RETURN TO CALLER PSHLST, XX /PUT INPUT OPRND VAR & "PUSH" RTN INTO OUTPUT LST /A041 DCA TMPCTR /SAVE INPUT OPERAND VARIABLE /A041 TAD (PUSH /GET STARTING ADDRESS OF OUTPUT "PUSH" ROUTINE /A041 JMS OUTTSZ /SAVE IT, INC OUTPUT LST PTR & TEST FOR OVERFLOW /A041 TAD TMPCTR /GET INPUT OPERAND VARIABLE /A041 JMS OUTTSZ /SAVE IT, INC OUTPUT LST PTR & TEST FOR OVERFLOW /A041 JMP I PSHLST /RETURN TO CALLER /A041 X=. / INDICATE FIRST FREE LOCATION /A041 / ------------------ PAGE /THIS CROSS FIELD CALLABLE ROUTINE WILL DO A SYMBOL TABLE LOOKUP /ON THE WORD IN TOKVAL. / REGULAR RETURN IF SYMBOL NOT FOUND / SKIP RETURN IF IT IS FOUND / / CALLING CONVENTION: / CDFMYF / MAKE SURE DATA FIELD IS SET TO CALLING FIELD / CIFMTH / INSTRUCTION FIELD SET TO MATH FIELD / JMS SYMCHK / RETURN HERE IF NOT FOUND WITH AC=0 / RETURN HERE IF FOUND WITH AC= ADDRESS OF VALUE IN SYMTAB SYMCHK, XX GOTFLD /GO SET UP TO SAVE CALLING FIELD FOR RETURN /M041 DCA SYMOUT / PUT CIF CDF INSTRUCTION IN PLACE /D041 TAD (MTHTBL /GET SYM POINTER TABLE STARTING ADDRESS TAD (SYMTBL /GET POINTER TO SYMBOL TABLE STARTING ADDRESS /D041 DCA TMPTR2 /SAVE IT AS TEMP PTR TO SYM PTR TABLE DCA NMEPTR /SAVE AS POINTER TO NAME IN SYMBOL TABLE /A041 /GET SYM TBL NAME FOR COMPARISON WITH INPUT STRING OVRAGN, TAD TOKVAL /GET INPUT CHARACTER STRING SIZE CIA /SET UP COUNTER FOR END OF STRING MARKER DCA TMPCTR /SAVE IT TO COUNT CHARACTERS FOR INPUT STRING COMPARE /D041 TAD MTHPTR /GET PRESENT POSITION OF SYM PTR TABLE PTR /D041 CIA /GET IT'S NEGATIVE /D041 TAD TMPTR2 /GET TEMPORARY POINTER TO SYM PTR TABLE TAD NMEPTR /GET CURRENT POSITION INTO SYMBOL TABLE /A041 CIA /MAKE IT NEGATIVE /A041 TAD SYMPTR /SUBTRACT LAST ADDRESS OF SYMBOL TABLE /A041 SPA SNA CLA /HAVE ALL SYMBOLS BEEN TRIED FOR COMPARISON? /M041 JMP SYMOUT / YES: INPUT NOT IN SYM TABLE, DO REGULAR RETURN /D041 TAD I TMPTR2 / NO: GET ADDR TO VARIABLE NAME IN SYMBOL TABLE TAD NMEPTR / NO: GET ADDR TO VARIABLE NAME IN SYMBOL TABLE /A041 DCA SYMVAR /SAVE STARTING ADDRESS TO VARIABLE NAME IN SYMBOL TABLE TAD (TOKVAL+1 /GET BEGINNING ADDRESS OF INPUT STRING DCA TMPTR1 /SAVE IT AS POINTER TO INPUT TAD I NMEPTR /GET FIRST CHARACTER OF VARIABLE NAME /A041 TAD (200-": /CHECK FOR A COLON - ALL NAMES BEGIN WITH ONE /A041 SNA CLA /IF NOT THEN WE ARE POINTING TO A NUMBER CONSTANT /A041 JMP REPEAT /IT'S A NAME SO GO CHECK FOR A MATCH /A041 JMP VALSKP /IT'S A NUMBER SO GO MOVE THE POINTER OVER IT /A041 /MOVE POINTER TO NEXT ENTRY IN THE SYMBOL TABLE /A041 NXTSTR, TAD I NMEPTR /PICK UP A CHARACTER FROM THE SYMBOL TABLE /A041 ISZ NMEPTR /BUMP UP TO NEXT LOCATION /A041 SMA CLA /CHECK FOR THE END OF THE SYMBOL NAME /A041 JMP NXTSTR /NOT YET, GO CHECK AGAIN /A041 AC0001 /GOT IT, NOW ADD IN LENGTH OF FORMAT WORD /A041 VALSKP, TAD (VALSIZ /LENGTH OF A STORED NUMBER IN THE SYMBOL TABLE /A041 TAD NMEPTR /ADD TO PRESENT POINTER LOC INTO SYMBOL TABLE /A041 DCA NMEPTR /BUMP POINTER TO NEXT TABLE ENTRY /A041 JMP OVRAGN /GO CHECK THE NEXT TABLE ENTRY /A041 /COMPARE INPUT TO SYM TABLE STRING REPEAT, TAD I SYMVAR /GET CHARACTER FROM SYMBOL TABLE ISZ SYMVAR /INCREMENT SYM TABLE ADDR TO NEXT CHARACTER /A041 CIA /GET NEGATIVE OF ASCII VALUE OF CHARACTER TAD I TMPTR1 /GET CHARACTER FROM INPUT STRING ISZ TMPTR1 /INCREMENT INPUT STRING ADDR TO NEXT CHARACTER /A041 SZA CLA /DO THE CHARACTERS MATCH? JMP NXTSTR / NO: START COMPARISON WITH NEXT NAME IN SYM TABLE ISZ TMPCTR /ARE WE THRU WITH INPUT STRING? /D041 JMP CONTNU / NO: GO COMPARE NEXT SET OF CHARACTERS JMP REPEAT / NO: GO COMPARE NEXT SET OF CHARACTERS /M041 ISZ SYMCHK / YES: WE FOUND A MATCH SO DO A SKIP RETURN ISZ SYMVAR /INCREMENT POINTER PAST FORMAT WORD /A041 TAD SYMVAR /GET POINTER TO VALUE OF SYMBOL IN TABLE /A041 /(NEEDED BY WPSELC.PA WHO CALLS SYMCHK) /A003 SYMOUT, 0 / THIS GETS STUFFED WITH A CIF CDF TO CALLING FIELD JMP I SYMCHK / RETURN /D041 ISZ TMPTR2 /SET POINTER TO VALUE OF SYMBOL /D041 TAD I TMPTR2 / AND PUT ADDRESS OF SYMTAB ENTRY INTO AC /A003 /D041 / (NEEDED BY WPSELC.PA WHO CALLS SYMCHK) /A003 /D041 IAC / INCREMENT TO GET PAST FORMAT INDICATER /A005 /D041 JMP SYMOUT / /D041 CONTNU, ISZ SYMVAR /INCREMENT SYM TABLE ADDR TO NEXT CHARACTER /D041 ISZ TMPTR1 /INCREMENT INPUT STRING ADDR TO NEXT CHARACTER /D041 JMP REPEAT /GO COMPARE NEXT CHARACTER OF BOTH STRINGS /RETURN TO GET ANOTHER SYMBOL TABLE VARIABLE NAME /D041 NXTSTR, ISZ TMPTR2 /DOUBLE INCREMENT POINTER TO SYM PTR TABLE... /D041 ISZ TMPTR2 /...TO SKIP OVER ADDRESS OF VALUE OF VARIABLE /D041 JMP OVRAGN /GO BACK AND RUN COMPARE WITH ANOTHER SYM TABLE NAME /D041 SYMOUT, 0 / THIS GETS STUFFED WITH A CIF CDF TO CALLING FIELD /D041 JMP I SYMCHK / RETURN /TAKE OPERAND VARIABLE NAME AND IT'S VALUE ADDRESS AND PUSH IT /INTO POLISH FORMATTED OUTPUT LIST. BUT BEFORE OUTPUTTING OPERAND /CHECK FOR IT'S PRESENCE ALREADY IN THE SYMBOL TABLE. / CALL THE SYMCHK ROUTINE TO LOOK UP THE WORD IN TOKVAL (OPERAND / VARIABLE NAME) TO SEE IF IT IS ALREADY IN THE SYMBOL TABLE OUTOP, JMS SYMCHK / IS THE SYMBOL NAME ALREADY IN SYMBOL TABLE? JMP SYMADD / NO, GO ADD IT TO THE SYMBOL TABLE AC7777 /DON'T NEED POINTER TO NAME WHICH SYMCHK RETURNED/A041 TAD SYMVAR /GET POINTER TO ADDRESS OF FORMAT WORD IN TABLE /A041 DCA SVDFLC /SAVE POINTER IN CASE WE GET A FORMAT LATER /A041 TAD SYMVAR /GET POINTER TO VALUE OF SYMBOL IN TABLE /A041 JMS PSHLST /PUT IT ON THE STACK /A041 JMS CHKTYP /DO SPECIAL CHECK FOR EDITOR MATH /A041 JMP FLGFIX /GO SET FLAGS AND EXIT OPERAND/OPERATOR ROUTINE /A041 /THIS ROUTINE PROVIDES A HOOK TO PROCESS THE EDITOR MATH SYMBOLS /A041 /":Dnn" & ":Tnn", IF IN EDITOR MATH THEN GO PROCESS SYMBOLS BEING /A041 /PUT IN THE TABLE. IF SYMBOL IS ONE OF THE AFOREMENTIONED THEN IT IS /A041 /SAVED IN A SPECIAL TABLE TO BE USED BY THE EXTRACTION/INSERTION /A041 /ROUTINES IN EDITOR MATH /A041 CHKTYP, XX /HANDLE SPECIAL CHECK FOR EDITOR MATH /A041 TAD MTHTYP /GET "MATH MODE" FLAG /A041 SNA CLA /ARE WE IN LIST PROCESSING MATH? /A041 JMP I CHKTYP / YES: THEN RETURN TO CALLER /A041 TAD (NMEPTR / NO: GET POINTER TO START OF VARIABLE NAME /A041 CIFLP /CHANGE TO LP INSTRUCTION FIELD /A041 JMS CHKNME /GO PROCESS EDITOR MATH SYMBOL /A041 JMP I CHKTYP /RETURN TO CALLER /A041 /D041 /\JMP MATCH / YES, FALL INTO MATCH ROUTINE /D041 /OUTPUT ADDR OF VALUE OF OPERAND VARIABLE MATCHED IN SYM TBL /D041 /THIS RTN USED FOR INPUT VAR WITH MATCHUP FOUND IN SYM TBL /D041 MATCH, CLA /DON'T NEED POINTER TO NAME WHICH SYMCHK RETURNED/A003 /D041 TAD (PUSH /GET STARTING ADDRESS OF OUTPUT "PUSH" ROUTINE /D041 JMS OUTTSZ /SAVE IT, INCREMENT OUTPUT LST PTR & TEST FOR OVERFLOW /D041 TAD I TMPTR2 /GET PTR ADDR OF VALUE OF INPUT VARIABLE /A007 /D041 DCA SVDFLC / SAVE POINTER TO FORMAT INDICATOR INCASE WE GET/A007 /D041 / ONE LATER /A005 /D041 TAD I TMPTR2 /GET PTR ADDR OF VALUE OF INPUT VARIABLE /A007 /D041 IAC / INCREMENT TO GET PAST FORMAT INDICATER /A005 /D041 JMS OUTTSZ /SAVE IT, INCREMENT OUTPUT LST PTR & TEST FOR OVERFLOW /D041 /ROUTINE TO SAVE ADDR OF LAST OPERAND VARIABLE NAME AND /A001 /D041 /VALUE FOR LATER OUTPUT TO RESULT PTR TABLE IF REQUIRED. /A001 /D041 AC7777 /GET AC TO MINUS ONE /A001 /D041 TAD TMPTR2 /DECREMENT PTR TO SYMBOL POINTER TABLE /A001 /D041 DCA TMPTR2 /SAVE IT /A001 /D041 TAD I TMPTR2 /GET ADDR OF NAME OF INPUT OPERAND VARIABLE /A001 /D041 DCA NMEPTR /SAVE IT TO BE USED IN "RLTOUT" RTN /A001 /D041/HOOK HERE TO PROCESS EDITOR MATH SYMBOLS ":Dnn" & ":Tnn", IF IN /A030 /D041/EDITOR MATH THEN GO PROCESS SYMBOLS BEING PUT IN THE TABLE. IF /A030 /D041/SYMBOL IS ONE OF THE AFOREMENTIONED THEN IT IS SAVED IN A SPECIAL /A030 /D041/TABLE TO BE USED BY THE EXTRACTION/INSERTION ROUTINES IN EDITOR MATH/A030 /D041 TAD MTHTYP /GET "MATH MODE" FLAG /A030 /D041 SNA CLA /ARE WE IN LIST PROCESSING MATH? /A030 /D041 JMP MATCH1 / YES: THEN CONTINUE TO PROCESS IT /A030 /D041 TAD TMPTR2 / NO: GET PTR TO START OF MATCHED VAR NAME /A030 /D041 CIFLP /CHANGE TO LP INSTRUCTION FIELD /A030 /D041 JMS CHKNME /GO PROCESS EDITOR MATH SYMBOL /A030 /D041MATCH1, JMP FLGFIX /GO SET FLAGS AND EXIT OPERAND/OPERATOR ROUTINE /ADD INPUT VARIABLE NAME TO SYMBOL TABLE. THIS RTN USED FOR /INPUT OPERAND VARIABLES NOT FOUND IN SYMBOL TABLE SYMADD, TAD TOKVAL /GET LENGTH OF VARIABLE NAME CIA /SET UP NEGATIVE DCA TMPCTR /SAVE NEGATIVE AS A COUNTER /SAVE ADDR OF LAST INPUT OPERAND VARIABLE NAME FOR POSSIBLE /A001 /LATER OUTPUT TO RESULT PTR TBL BY "RLTOUT" RTN /A001 TAD SYMPTR /GET ADDRESS OF NAME OF INPUT OPERAND VARIABLE /A001 DCA NMEPTR /SAVE IT TO BE USED IN "RLTOUT" RTN /A001 /PUT INPUT OPERAND VARIABLE ADDRESS AND DEFAULT FORMAT /STATEMENT VALUE INTO SYMBOL POINTER TABLE /D041 TAD SYMPTR /GET FIRST FREE LOCATION IN SYMBOL TABLE /D041 DCA I MTHPTR /SAVE ADDR OF THIS LOCATION IN SYM PTR TABLE /D041 JMS MTHTSZ /INCREMENT PTR AND CHECK FOR SYM PTR TABLE OVERFLOW TAD (TOKVAL+1 /GET START OF INPUT STRING DCA TMPTR1 /SAVE IT AS A POINTER RETRY, TAD I TMPTR1 /GET A CHARACTER FROM THE INPUT STRING JMS SYMTSZ /OUTPUT TO SYMBOL TABLE & CHECK FOR OVERFLOW /M005 ISZ TMPTR1 /SET TOKVAL PTR TO NEXT INPUT CHARACTER ISZ TMPCTR /IS IT THE END OF THE INPUT STRING? JMP RETRY / NO: GO BACK AND GET ANOTHER CHARACTER / YES: PUT INPUT OPRND VAR ADDR INTO SYM PTR TBL /D041 /PUT INPUT OPERAND VALUE ADDRESS INTO SYMBOL POINTER TABLE /D041 TAD SYMPTR /GET BEGINNING ADDRESS OF FORMAT & VALUE /D041 DCA I MTHPTR /SAVE ADDRESS IN SYMBOL POINTER TABLE /D041 JMS MTHTSZ /INCREMENT PTR AND CHECK FOR SYM PTR TABLE OVERFLOW /PUT INPUT OPERAND VALUE DEFAULT FORMAT IN SYMBOL TABLE TAD SYMPTR /GET POINTER TO PLACE FOR FORMAT WORD /A007 DCA SVDFLC /AND SAVE FOR POSSIBLE USE IF FORMAT WORD FOUND /A007 TAD (DFAULT /GET DEFAULT VALUE FOR FORMAT JMS SYMTSZ /OUTPUT TO SYMBOL TABLE & CHECK FOR OVERFLOW /M005 TAD SYMPTR /GET POINTER TO PLACE FOR SYMBOL VALUE WORDS /A041 DCA SYMVAR /SAVE POINTER TO START OF SYMBOL VALUE /A041 JMS CHKTYP /DO SPECIAL CHECK FOR EDITOR MATH /A041 /PUT OPRND VAR VALUE ADDR & "PUSH" RTN ADDR INTO OUTPUT LST TAD SYMPTR /GET POINTER ADDRESS TO VALUE IN SYMBOL TABLE /A041 JMS PSHLST /PUSH VALUES ONTO OUTPUT LIST /A041 /D041/HOOK HERE TO PROCESS EDITOR MATH SYMBOLS ":Dnn" & ":Tnn", IF IN /A030 /D041/EDITOR MATH THEN GO PROCESS SYMBOLS BEING PUT IN THE TABLE. IF /A030 /D041/SYMBOL IS ONE OF THE AFOREMENTIONED THEN IT IS SAVED IN A SPECIAL /A030 /D041/TABLE TO BE USED BY THE EXTRACTION/INSERTION ROUTINES IN EDITOR MATH/A030 /D041 TAD MTHTYP /GET "MATH MODE" FLAG /D041 SNA CLA /ARE WE IN LIST PROCESSING MATH? /D041 JMP PRSCLP / YES: THEN CONTINUE TO PROCESS IT /D041 AC7776 /THEN SET AC TO POINT TO LATEST ENTRY IN /A023 /D041 TAD MTHPTR / SYMBOL TABLE /A023 /D041 CIFLP / NO: CHANGE INSTRUCTION REGISTER TO LP FIELD /D041 JMS CHKNME /GO PROCESS AS EDITOR MATH SYMBOL /D041 /PUT OPRND VAR VALUE ADDR & "PUSH" RTN ADDR INTO OUTPUT LST /D041 PRSCLP, JMS PUTLST /M020 /ALLOW "VALSIZ" LOCATIONS IN SYM TBL FOR VALUE OF INPUT OPERND /NOTE: FIRST LOC OF VALUE TO HOLD DEFAULT BIT SETTING OF NUM. /OTHER LOCATIONS OF VALUE TO BE INITIALIZED TO ZEROES. TAD (NMDFLT /GET INPUT OPERND VALUE DEFAULT BIT SETTING JMS SYMTSZ /OUTPUT TO SYMBOL TABLE & CHECK FOR OVERFLOW /M005 TAD (VALSIZ-1 /ADD FLOATING POINT VALUE SIZE -1 IN NUM OF LOCATIONS CIA /GET NEGATIVE DCA TMPCTR /SAVE IT TO USE AS A COUNTER VALOOP, JMS SYMTSZ /OUTPUT 0 TO SYMBOL TABLE & CHECK FOR OVERFLOW /M005 ISZ TMPCTR /DONE ALLOCATING SPACE IN SYM TBL FOR THE VALUE? JMP VALOOP / NO: MOVE SYM TBL PTR DOWN ANOTHER LOCATION JMP FLGFIX / YES: GO SET FLAGS AND EXIT OPERAND/OPERATOR ROUTINE /ROUTINE TO PROCESS NUMERICAL INPUT OPERAND OPDNUM, JMS CHKNUM /GO CHECK IF NUMBER IS ALREADY IN SYMBOL TABLE /A040 TAD SYMPTR /IT'S NOT, GET POINTER TO BOTTOM OF SYMBOL TABLE /A041 JMS PSHLST /GO PUT INPUT OPRND NUM & "PUSH" RTN INTO OUTPUT LST /PUT NUMERICAL INPUT OPERAND INTO SYMBOL TABLE TAD (TOKVAL /GET STARTING ADDR OF PASSED NUMERICAL OPERAND DCA TMPTR1 /SAVE IT FOR USE AS A POINTER TAD (VALSIZ /GET FLOATING POINT NUMBER SIZE CIA /GET NEGATIVE DCA TMPCTR /SET UP COUNTER OF NUMBER OF LOCATIONS CONTAINING NUM LOOPNM, TAD I TMPTR1 /GET ONE LOCATION'S WORTH OF NUMBER PASSED JMS SYMTSZ /OUTPUT TO SYMBOL TABLE & CHECK FOR OVERFLOW /M005 ISZ TMPTR1 /MOVE PTR TO NEXT LOCATION OF INPUT NUMBER /M040 ISZ TMPCTR /IS THE NUMBER DONE BEING TRANSFERRED YET? JMP LOOPNM / NO: GET NEXT PART OF INPUT NUMERICAL OPERAND /M040 JMP FLGFIX / YES: GO SET FLAGS & EXIT /MOVED HERE ON EDIT 041 /PROCESS TABLE USED IN RELATION TO CONTROL WORD FOUND IN CONTROL BLOCK. THE /CONTROL WORD MATCHED UP IN THE SYMBOL TABLE IS GIVEN A NUMBER WHICH, WHEN /RETURNED IN THE AC, IS USED AS AN OFFSET TO JUMP INTO THE RELATED RTN HERE HNDCTL, BEGIN /ADDRESS OF "BEGIN" PROCESSING ROUTINE /A018 END / " " "END" " " /A018 TOTAL / " " "TOTAL" " " /A018 FRMULA / " " "FORMULA" " " ROUND / " " "ROUND" " " TRNCTE / " " "TRUNCATE" " " SETCMD / " " "SET" " " /M042 X=. / INDICATE FIRST FREE LOCATION /A041 / ------------------ PAGE /ROUTINE TO HANDLE INPUTED OPERATOR TOKEN, IT'S VALUE, AND PRECEDENCE /AS COMPARED TO WHAT IS PRESENTLY ON THE STACK. /NOTE: A BRANCH IS DONE TO HERE IF THE BEGINNING OF "OPERAND" ROUTINE IS NOT /AN OPERAND EXPECTED OR ONE OF SEVERAL SPECIAL CASES HANDLED THERE. ASCPTR, 0 /POINTER TO OPERATOR ASCII VALUE TABLE - KEEP ON SAME /PAGE AS "OPRTOR" ROUTINE TMPOPR, 0 /USED TO SAVE VALUE OF INPUT OPERATOR, KEEP ON SAME /PAGE AS "SKPDWN", "TYPOPR", AND "POPOUT" ROUTINES /CHECK TO SEE IF THE TOKEN PASSED IS AN OPERATOR OPRTOR, TAD (-OPERAT /SET AC TO NEGATIVE OF OPERATOR TOKEN TAD TOKEN /ADD TOKEN PASSED FROM LEXIC SZA CLA /IS THE TOKEN PASSED AN OPERATOR? JMP SYNER2 / NO: OUTPUT SYNTAX ERROR "OPERATOR NOT RECEIVED" / YES: CHECK FOR "END OF LINE" RETURNED /A008 TAD TOKVAL /GET VALUE PASSED FROM LEXIC /A008 TAD (-ECNWLN /ADD TO IT "END OF LINE" (I.E HARD RETURN) /A008 SNA CLA /IS OPERATOR PASSED BACK AN "END OF LINE"? /A008 JMP SYNR11 / YES: SYNTAX ERROR - FORMULA FORMAT INCORRECT /A008 /NOTE: ERROR "SYNR11" NOW INFORMS USER AS TO /A016 /ILLEGAL PLACEMENT OF A HARD RETURN WITHIN THE /A016 /CONTEXT OF A MATH EXPRESSION. THIS IS ONE OF /A016 /PLACES WHERE IT GETS TRAPPED OUT TO DO THIS /A016 / NO: CHECK FOR TYPE OF OPERATOR SKPDWN, TAD TOKVAL /GET VALUE OF INPUT OPERATOR FROM TOKVAL DCA TMPOPR /SAVE IT IN LOCATION WHERE CAN BE HANDLED BY "TYPOPR" JMS TYPOPR /GO FIND OUT WHICH TYPE OF OPERATOR HAS BEEN INPUT JMP FOUND /GO HANDLE OPERATOR MATCHUP FOUND /SUBROUTINE TO CHECK FOR TYPE OF OPERATOR INPUTTED /NOTE: THIS ROUTINE LEAVES THE OPERATOR NEGATIVE ASCII VALUE /TABLE POINTER POINTED TO THE NEGATIVE ASCII OPERATOR VALUE /THAT MATCHES THE INPUTTED OPERATOR! IT IS USED AS A REFERENCE /POINT FROM WHICH TO GET THE OPERATOR PRECEDENCE FOR STACK /MANIPULATIONS AND THE OPERATOR FUNCTION ROUTINE ADDRESS /WHICH MUST BE PLACED INTO THE OUTPUT LIST TYPOPR, XX /SUBROUTINE TO FIND OPERATOR MATCH IN TABLE TAD (ADDVAL /GET THE START OF OPERATOR ASCII VALUES TABLE DCA ASCPTR /SAVE IT TO USE AS POINTER BGNLOP, TAD I ASCPTR /GET NEGATIVE OF ASCII VALUE OF OPERATOR FROM TABLE TAD TMPOPR /GET ASCII VALUE OF INPUT OPERATOR TO BE FOUND SNA CLA /IS NEGATIVE ASCII VALUE OF OPERATOR FOUND? JMP I TYPOPR / YES: RETURN TO CALLER WITH PTR SET AT MATCH FOUND ISZ ASCPTR / NO: SET POINTER TO NEXT VALUE ISZ ASCPTR /DOUBLE INCREMENTED TO BYPASS PRECEDENCE IN TABLE ISZ ASCPTR /TRIPLE " TO BYPASS OPTR FUNCTION RTN ADDR IN TBL JMP BGNLOP /AND TRY AGAIN TO FIND RIGHT ASCII VALUE /RTN TO HANDLE THE TYPE OF OPERATOR FOUND BY DOING PRECEDENCE /COMPARISON OF OPERATOR ON TOP OF STACK WITH INPUT OPERATOR. FOUND, ISZ ASCPTR /MOVE TOKEN TBLE PTR TO PRECEDENCE OF OPERATOR FOUND TAD I ASCPTR /GET PRECEDENCE OF INPUT OPERATOR CIA /GET NEGATIVE TAD I POSTSP /GET PRECEDENCE OFF TOP OF OPERATOR STACK SNA /DOES THE PRECEDENCE OF NEXT INPUT=TOP OF STACK? JMP EQUALP / YES: GO HANDLE CASE OF EQUAL PRECEDENCE SPA CLA / NO: IS PRECEDENCE OF INPUT LESS THAN TOP OF STK? JMP HIGHRP / NO: THAN GO HANDLE CASE OF HIGHER PRECEDENCE / YES: THAN HANDLE CASE OF LOWER PRECEDENCE HERE /CASE OF PRECEDENCE OF NEXT INPUT IS LESS THAN THAT OF TOP OF STACK LOWERP, JMS TOPOPR /GET ASCII VALUE OF TOP OPERATOR OF STACK INTO AC TAD LTPVAL /ADD TO IT NEGATIVE ASCII VALUE OF "(" OPERATOR SNA CLA /IS THERE A LEFT PARENTHESIS ON THE TOP OF THE STACK? JMP SYNER3 / YES: SYNTAX ERROR "TOO MANY LEFT PARENTHESIS" JMS POPOUT / NO: THEN POP STACK AND OUTPUT TO POLISH STRING JMP BACKUP /GO EXIT OPERAND/OPERATOR PROCESSING ROUTINE /CASE OF PRECEDENCE OF NEXT INPUT IS EQUAL THAT OF TOP OF STACK EQUALP, JMS TOPOPR /GET ASCII VALUE OF TOP OPERATOR OF STACK INTO AC TAD LTPVAL /ADD TO IT NEGATIVE ASCII VALUE OF "(" OPERATOR SNA CLA /IS THERE A LEFT PARENTHESIS ON THE TOP OF THE STACK? JMP SVCLTP / YES: THEN GO PROCESS IT JMS POPOUT / NO: POP STACK AND PUT IN OUTPUT LIST JMP BACKUP /GO EXIT OPERAND/OPERATOR PROCESSING ROUTINE /EQUAL PRECEDENCE AND "(" ON TOP OF THE STACK SVCLTP, JMS FLSHST /GO CLEAR THE TOP OPERATOR & IT'S PRECEDENCE OFF STACK JMP FLAGST /GO SET "NEXT INPUT PROCESSED" FLAG=TRUE AND THEN EXIT /CASE OF PRECEDENCE OF NEXT INPUT IS GREATER THAN THAT OF TOP OF STACK HIGHRP, TAD TOKVAL /GET ASCII VALUE OF INPUT OPERATOR TAD RTPVAL /GET NEGATIVE ASCII VALUE OF RIGHT PARENTHESIS SNA CLA /IS NEXT INPUT A RIGHT PARENTHESIS? JMP SYNER4 / YES:PROCESS SYNTAX ERROR "TO MANY RIGHT PARENTHESIS TAD TOKVAL / NO: GET INPUT OPERATOR... JMS PSHSTK /...AND PUSH IT INTO THE STACK TAD I ASCPTR /GET INPUT OPERATOR PRECEDENCE (PTR SET IN 'FOUND'RTN) JMS PSHSTK /...AND PUSH IT INTO STACK DCA OPDNXT /SET "OPERAND EXPECTED NEXT" FLAG=TRUE JMP FLAGST /SET "NEXT INPUT PROCESSED" FLAG=TRUE AND EXIT /SUBROUTINES USED BY THE PREVIOUS OPERATOR PROCESSING CODE /THIS ROUTINE POPS THE TOP OPERATOR OFF THE STACK AND /OUTPUTS THE ADDRESS OF THE FUNCTION ROUTINE THAT /COINCIDES WITH THAT OPERATOR TO THE OUTPUT LIST. IT ALSO /ELIMINATES UNARY PLUS OPERATORS FROM BEING OUTPUT TO THE LIST POPOUT, XX /POP STACK & OUTPUT TO POLISH STRING ROUTINE JMS POPSTK /CLEAR PRECEDENCE OFF TOP OF STACK... JMS POPSTK /...AND GET TOP OPERATOR OFF OF STACK DCA TMPOPR /SAVE IT IN LOCATION TO HANDLE MATCHUP WITH TABLE JMS TYPOPR /GET POINTER TO MATCHING OPERATOR IN OPR VALUE TBL ISZ ASCPTR /DOUBLE INCREMENT POINTER TO LINE UP ON MATCHING... ISZ ASCPTR /...ROUTINE THAT PERFORMS OPERATOR FUNCTION TAD I ASCPTR /GET ADDRESS OF THAT OPERATOR FUNCTION ROUTINE SNA /IS THE TOP OPERATOR ON THE STACK A UNARY PLUS JMP I POPOUT / YES: THEN DUMP IT AND RETURN JMS OUTTSZ / NO: SAVE IT, INCREMENT O/P LST PTR & TEST FOR OVFLW JMP I POPOUT /RETURN TO CALLER /THIS ROUTINE RETURNS TO A CALLER THE ASCII VALUE OF THE TOP /OPERATOR IN THE OPERATOR STACK. IT'S ASCII VALUE IS RETURNED /TO THE CALLER IN THE AC TOPOPR, XX /GET TOP OPERATOR FROM STACK ROUTINE AC7777 /SET AC TO -1 TAD POSTSP /DECREMENT STACK POINTER 1 LOCATION TO REACH OPERATOR DCA TMPTR2 /SAVE IT TAD I TMPTR2 /GET TOP OPERATOR OFF OF STACK JMP I TOPOPR /RETURN TO CALLER WITH OPERATOR ASCII VALUE IN AC /SUBROUTINE CALLED FROM "RTRN4A" TO INITIALIZE PATCHES TO THE "PRCTRL" /A019 /ROUTINE. THIS IS DONE TO ALLOW FOR DIFFERENT ENTRY POINTS INTO THE /A019 /PERMENANT SYMBOL TABLE WHERE CTRL WORDS ARE EVALUATED FOR PROCESSING /A019 /THE CODE ENTERS AT "EDTCTL" FOR EDIT MATH & "CTLWRD" FOR LP MATH /A019 SETCTL, XX TAD MTHTYP /GET THE MATH MODE FLAG /A019 SNA CLA /IS IT EDITOR MATH THAT'S WANTED? /A019 TAD (3 / NO: GET THE OFFSET IF LP MATH /A019 DCA OFFSET / YES: PATCH IT TO USE IN MATH PROCESSING /A019 TAD MTHTYP /GET THE MATH MODE FLAG BACK /A019 SZA CLA /IS IT LP MATH THAT'S WANTED? /A019 TAD (EDTCTL-CTLWRD / NO: SET SYM TBL ENTRY FOR EDITOR MATH /A019 TAD (CTLWRD / YES: " " " " " LP " /A019 DCA SYMSTR /PATCH IT TO USE IN MATH PROCESSING /A019 TAD MTHTYP /GET THE MATH MODE FLAG /A019 SNA /IS IT EDIT MATH THAT IS WANTED? /A019 JMP I SETCTL / NO: JUST RETURN TO CALLER /A019 CDFLP / YES: SET DATA FIELD TO LP /A019 DCA I (INCTLB /INIT "IN CONTROL BLOCK" FLAG TO FALSE /A019 CDFMYF /RESET DATA FIELD TO MATH /A019 AC0001 /GET 1 IN THE AC /A020 DCA MTHWRK /SET "IN MATH WORK AREA" = FALSE /A020 AC0001 /GET 1 IN THE AC /A020 DCA MTHSND /SET "PROCESSING SECOND LINE" = FALSE /A020 DCA MTHTOT /SET "MATH TOTAL REQUIRED" = FALSE /A020 CIFLP /CHANGE PROGRAM CONTROL TO LP FIELD /M029 JMS ZROTBL /GO INIT "DCHAR" & "TCHAR" TABLES /A020 JMP I SETCTL /RETURN TO CALLER /A019 /MOVED HERE ON EDIT 041 /ROUTINE TO MAKE CDI INSTRUCTION TO CALLING FIELD AND PUT IN AC /A006 GETFLD, XX /A006 CLA /CLEAR AC /A006 RDF /GET DATA FIELD BITS FROM WHICH CALL WAS MADE /A006 TAD CIDF0 /ADD TO IT THE CDF,CIF OCTAL CODE VALUE /A006 CDFMTH /CHANGE THE DATA FIELD REGISTER TO MATH FIELD /A006 JMP I GETFLD /RETURN TO CALLER ON THIS PAGE /A006 X=. / INDICATE FIRST FREE LOCATION /A041 / ------------------ PAGE /PERMANENT SYMBOL TABLES - CONTAINS THE CONTROL WORDS WHICH MAY BE A PART /OF THE LIST PROCESSING AND/OR EDITOR MATH CONTROL BLOCK. /USED TO ANALYZE THE CONTENTS OF THE MATH CONTROL BLOCK IN LP & EDITOR MATH WPSMTH, IFDEF ENGLSH< /A045 "W-200 / W "P-200 / P "S-200 / S "M-200 / M "A-200 / A "T-200 / T "H-200+4000 / H+4000 > /A045 /A045 IFDEF DUTCH< /A047 "R-200 / W "E-200 / P "K-200 / S "E-200 / M "N-200 / A "E-200 / T "N-200+4000 / H+4000 > /A047 /A047 IFDEF ITALIAN< /A045 "W-200 / W /A045 "P-200 / P /A045 "S-200 / S /A045 "M-200 / M /A045 "A-200 / A /A045 "T-200+4000 / T+4000 /A045 > /A045 IFDEF SPANISH< /A046 "W-200 / W /A046 "P-200 / P /A046 "S-200 / S /A046 "M-200 / M /A046 "A-200 / A /A046 "T-200+4000 / T+4000 /A046 > /A046 IFDEF V30NOR< /A047 "R-200 / R /A047 "E-200 / E /A047 "G-200 / G /A047 "N-200 / N /A047 "I-200 / I /A047 "N-200 / N /A047 "G-200+4000 / G+4000 /A047 > /A047 IFDEF V30SWE< /A047 "W-200 / W /A047 "P-200 / P /A047 "S-200 / S /A047 "M-200 / M /A047 "A-200 / A /A047 "T-200+4000 / T+4000 /A047 / THE LAST BIT LOPPED OFF AS IT OVERFLOWS THE WRKBUF IN MATH. /A047 /D047 "E-200 / E /A047 / " "M-200 / M /A047 / " "A-200 / A /A047 / " "T-200 / T /A047 / " "I-200 / I /A047 /D047 "K-200+4000 / K+4000 /A047 > /A047 0 / NULL = END OF SYMBOL TABLE /START OF EDITOR MATH CONTROL BLOCK CONTROL WORDS /A005 EDTCTL, IFDEF ENGLSH< /a045 "B-200 / B /A005 "E-200 / E /A005 "G-200 / G /A005 "I-200 / I /A005 "N-200+4000 / N+4000 /A005 > /A045 IFDEF DUTCH< /a047 "B-200 / B /A047 "E-200 / E /A047 "G-200 / G /A047 "I-200 / I /A047 "N-200+4000 / N+4000 /A047 > /A047 IFDEF ITALIAN< /a045 "I-200 / I /A045 "N-200 / N /A045 "I-200 / I /A045 "Z-200 / Z /A045 "I-200 / I /A045 "O-200+4000 / O+4000 /A045 > /A045 IFDEF SPANISH< /a046 "E-200 / E /A046 "M-200 / M /A046 "P-200 / P /A046 "E-200 / E /A046 "Z-200 / Z /A046 "A-200 / A /A046 "R-200+4000 / R+4000 /A046 > /A046 IFDEF V30NOR< /a047 "B-200 / B /A047 "E-200 / E /A047 "G-200 / G /A047 "Y-200 / Y /A047 "N-200 / N /A047 "N-200+4000 / N+4000 /A047 > /A047 IFDEF V30SWE< /a047 "B-200 / B /A047 "V-200 / V /A047 "R-200 / R /A047 "J-200 / J /A047 "A-200+4000 / A+4000 /A047 > /A047 IFDEF ENGLSH< /A045 "E-200 / E /A005 "N-200 / N /A005 "D-200+4000 / D+4000 /A005 > /A045 IFDEF DUTCH< /A047 "E-200 / E /A047 "I-200 / E /A047 "N-200 / E /A047 "D-200 / N /A047 "E-200+4000 / D+4000 /A047 > /A047 IFDEF ITALIAN< /A045 "F-200 / F /A045 "I-200 / I /A045 "N-200 / N /A045 "E-200+4000 / E+4000 /A045 > /A045 IFDEF SPANISH< /A046 "F-200 / F /A046 "I-200 / I /A046 "N-200+4000 / N+4000 /A046 > /A046 IFDEF V30NOR< /A047 "S-200 / S /A047 "L-200 / L /A047 "U-200 / U /A047 "T-200 / T /A047 "T-200+4000 / T+4000 /A047 > /A047 IFDEF V30SWE< /A047 "S-200 / S /A047 "L-200 / L /A047 "U-200 / U /A047 "T-200+4000 / T+4000 /A047 > /A047 IFDEF ENGLSH< /A045 "T-200 / T /A005 "O-200 / O /A005 "T-200 / T /A005 "A-200 / A /A005 "L-200+4000 / L+4OOO /A005 > IFDEF DUTCH< /A047 "T-200 / T /A047 "O-200 / O /A047 "T-200 / T /A047 "A-200 / A /A047 "A-200 / A /A047 "L-200+4000 / L+4OOO /A047 > IFDEF ITALIAN< /a045 "T-200 / T /A045 "O-200 / O /A045 "T-200 / T /A045 "A-200 / A /A045 "L-200 / L /A045 "E-200+4000 / E+4000 /A045 > /A045 IFDEF SPANISH< /a046 "T-200 / T /A046 "O-200 / O /A046 "T-200 / T /A046 "A-200 / A /A046 "L-200+4000 / L+4000 /A046 > /A046 IFDEF V30NOR< /a047 "S-200 / S /A047 "U-200 / U /A047 "M-200+4000 / M+4000 /A047 > /A047 IFDEF V30SWE< /a047 "T-200 / T /A047 "O-200 / O /A047 "T-200 / T /A047 "A-200 / A /A047 "L-200 / L /A047 "T-200+4000 / T+4000 /A047 > /A047 /START OF LP MATH CONTROL BLOCK CONTROL WORDS CTLWRD, IFDEF ENGLSH< /A045 "F-200 / F "O-200 / O "R-200 / R "M-200 / M "U-200 / U "L-200 / L "A-200+4000 / A+4000 > /A045 IFDEF DUTCH< /A047 "F-200 / F "O-200 / O "R-200 / R "M-200 / M "U-200 / U "L-200 / L "E-200+4000 / A+4000 > /A047 IFDEF ITALIAN< /A045 "F-200 / F /A045 "O-200 / O /A045 "R-200 / R /A045 "M-200 / M /A045 "U-200 / U /A045 "L-200 / L /A045 "A-200+4000 / A+4000 /A045 > /A045 IFDEF SPANISH< /A046 "F-200 / F /A046 "O-200 / O /A046 "R-200 / R /A046 "M-200 / M /A046 "U-200 / U /A046 "L-200 / L /A046 "A-200+4000 / A+4000 /A046 > /A046 IFDEF V30NOR< /A047 "F-200 / F /A047 "O-200 / O /A047 "R-200 / R /A047 "M-200 / M /A047 "E-200 / E /A047 "L-200+4000 / L+4000 /A047 > /A047 IFDEF V30SWE< /A047 "F-200 / F /A047 "O-200 / O /A047 "R-200 / R /A047 "M-200 / M /A047 "E-200 / E /A047 "L-200+4000 / L+4000 /A047 > /A047 IFDEF ENGLSH< /A045 "R-200 / R "O-200 / O "U-200 / U "N-200 / N "D-200+4000 / D+4000 > IFDEF DUTCH< /A047 "A-200 / R "F-200 / R "R-200 / R "O-200 / O "N-200 / N "D-200 / N "E-200 / N "N-200+4000 / D+4000 > IFDEF ITALIAN< /A045 "A-200 / A /A045 "R-200 / R /A045 "R-200 / R /A045 "O-200 / O /A045 "T-200 / T /A045 "O-200 / O /A045 "N-200 / N /A045 "D-200 / D /A045 "A-200+4000 / A+4000 /A045 > /A045 IFDEF SPANISH< /A046 "R-200 / R /A046 "E-200 / E /A046 "D-200 / D /A046 "O-200 / O /A046 "N-200 / N /A046 "D-200 / D /A046 "E-200 / E /A046 "A-200 / A /A046 "R-200+4000 / R+4000 /A046 > /A046 IFDEF V30NOR< /A047 "A-200 / A /A047 "V-200 / V /A047 "R-200 / R /A047 "U-200 / U /A047 "N-200 / N /A047 "D-200+4000 / D+4000 /A047 > /A047 IFDEF V30SWE< /A047 "R-200 / R /A047 "U-200 / U /A047 "N-200 / N /A047 "T-200+4000 / T+4000 /A047 > /A047 IFDEF ENGLSH< /A045 "T-200 / T "R-200 / R "U-200 / U "N-200 / N "C-200 / C "A-200 / A "T-200 / T "E-200+4000 / E+4000 > /A045 IFDEF DUTCH< /A047 "K-200 / T "A-200 / R "P-200+4000 / E+4000 > /A047 IFDEF ITALIAN< /A045 "T-200 / T /A045 "R-200 / R /A045 "O-200 / O /A045 "N-200 / N /A045 "C-200 / C /A045 "A-200+4000 / A+4000 /A045 > /A045 IFDEF SPANISH< /A046 "T-200 / T /A046 "R-200 / R /A046 "U-200 / U /A046 "N-200 / N /A046 "C-200 / C /A046 "A-200 / A /A046 "R-200+4000 / R+4000 /A046 > /A046 IFDEF V30NOR< /A047 "K-200 / K /A047 "U-200 / U /A047 "T-200 / T /A047 "T-200+4000 / T+4000 /A047 > /A047 IFDEF V30SWE< /A047 "T-200 / T /A047 "R-200 / R /A047 "U-200 / U /A047 "N-200 / N /A047 "K-200 / K /A047 "E-200 / E /A047 "R-200 / R /A047 "A-200+4000 / A+4000 /A047 > /A047 IFDEF ENGLSH< /A045 "S-200 / S "E-200 / E "T-200+4000 / T+4000 > /A045 IFDEF DUTCH< /A047 "S-200 / S "T-200 / E "E-200 / E "L-200+4000 / T+4000 > /A047 IFDEF ITALIAN< /A045 "P-200 / P /A045 "O-200 / O /A045 "N-200 / N /A045 "I-200+4000 / I+4000 /A045 > /A045 IFDEF SPANISH< /A046 "P-200 / P /A046 "O-200 / O /A046 "N-200 / N /A046 "E-200 / E /A046 "R-200+4000 / R+4000 /A046 > /A046 IFDEF V30NOR< /A047 "S-200 / S /A047 "E-200 / E /A047 "T-200 / T /A047 "T-200+4000 / T+4000 /A047 > /A047 IFDEF V30SWE< /A047 "S-200 / S /A047 "T-200 / T /A047 "O-200 / O /A047 "L-200 / L /A047 "L-200 / L /A047 "_-200 / (underline) /A047 "I-200 / I /A047 "N-200+4000 / N+4000 /A047 > /A047 0 / NULL = END OF SYMBOL TABLE /THIS TABLE HOLDS NEGATIVE ASCII VALUES OF OPTRS FOR MATCHUP WHENEVER AN OPTR /TKN IS PASSED TO "XLTFRM" (TRANSLATOR) FROM LEXIC (SCANNER) VIA TOKVAL. /THE TBL INCLUDES PRECEDENCE OF OPTR TYPE, & ADDR OF EXECUTION ROUTINE THAT /WILL PERFORM (ON THE OUTPUT LIST) REQUIRED FUNCTIONALITY OF THAT OPERATOR. ADDVAL, -"++200;4;ADD /TWO'S COMPLIMENT OF ADDITION OPERATOR /PLUS PRECEDENCE /PLUS ADDRESS OF ROUTINE EXECUTING THIS FUNCTION SUBVAL, -"-+200;4;SUB / " " " SUBTRACTION OPERATOR / " " " / " " " MLTVAL, -"*+200;5;MUL / " " " MULTIPLICATION OPERATOR / " " " / " " " DIVVAL, -"/+200;5;DIV / " " " DIVISION OPERATOR / " " " / " " " EQLVAL, -"=+200;1;EQUATE / " " " EQUALS (OR ASSIGN) OPERATOR / " " " / " " " LTPVAL, -"(+200;2;0000 / " " " LEFT PARENTHESIS OPERATOR / " " " / PLACE ZERO HERE AS FILLER - NO LEFT PAREN RTN RTPVAL, -")+200;2;0000 / " " " RIGHT PARENTHESIS OPERATOR / " " " / PLACE ZERO HERE AS FILLER - NO RIGHT PAREN RTN UNYMNS, -"-+7000+200;6;MINUS/ " " " UNARY MINUS OPERATOR / " " " / " " " UNYPLS, -"++7000+200;6;0000 / " " " UNARY PLUS OPERATOR / " " " / " " " /"RUNCHK" IS CALLED FROM "RTRN3A". IT DETERMINES IF IN EDIT MATH, IF IN /A010 /EDITOR MATH WORK AREA, AND ACTS ACCORDINGLY. THIS RTN IS A KIND OF /A010 /CRUNCH JOB BECAUSE OF LACK OF SPACE AND TO SAVE ON EXECUTION TIME /A010 /WHILE IN THE EDITOR. RUNCHK, XX /A010 TAD MTHTYP /GET "MATH MODE" FLAG /A010 SNA CLA /ARE WE IN EDIT MATH MODE? /A010 JMP I RUNCHK / NO: JUST RETURN TO PROCESS CTRL WORD /A010 TAD MTHWRK / YES: GET "EDIT MATH WORK AREA" FLAG /A010 SNA CLA /ARE WE IN EDIT MATH WORK AREA? /M031 JMP I RUNCHK / YES: RETURN TO PROCESS CTRL WORD /A010 CDFLP / NO: CHANGE TO LP DATA FIELD /A010 AC0001 /GET 1 IN THE AC /A035 DCA MTHSND /SET "NOT MATH CTRL BLOCK SECOND LINE" = TRUE /A035 /TAKE TIME HERE TO MAKE SURE THAT THE 2ND LINE /A035 /FLAG IS SET TO SAY NOT PROCESSING THAT LINE /A035 /ANYMORE. DONE IN CASE 1ST WORD IN BLOCK WAS /A035 /"WPSMATH" & 2ND WORD (WHICH ENDS UP HERE IF /A035 /A VALID COMMAND BUT NOT "BEGIN") HAS CLEARED /A035 /THE FLAG TO SAY PROCESSING SECOND LINE /A035 /D031 DCA I (INCTLB /SET "IN CONTROL BLOCK" FLAG = FALSE /A010 DCA I (MTHCTL /SET "IN MATH CTRL BLOCK" FLAG = FALSE /A031 /D035 TAD I (CKCTRL /GET "CKCTRL" RTRN ADDR BACK TO EDIT CODE /A010 /D035 DCA RUNCHK /SET IT UP TO RTRN THRU BACK TO THE EDITOR /A010 CDILP /CHANGE PROGRAM CONTROL BACK TO LP FIELD /A010 /D035 JMP I RUNCHK /RETURN TO EDIT CODE /A010 JMP RTNMTH /THERE WAS A MAJOR BUG HERE SINCE THE CODE /A035 /CHANGE TO REFLECT SAVING AND RESTORING "CURPTR"/A035 /IN "CKCTRL" AND "EXTRACTNUMBER" FOR EDITOR MATH/A035 /ALLOWED A JMP INDIRECT THRU "RUNCHK" BACK /A035 /TO THE EDITOR TO NOW, AMONG OTHER THINGS, BLOW /A035 /THE LINE AFTER THE BLOCK RIGHT OUT OF THE WATER/A035 /UNDER THE RIGHT CONDITIONS BECAUSE A CALL WAS /A035 /NOT ADDED TO RESET "CURPTR" HERE WHEN THE CODE /A035 /WAS CHANGED EVERYWHERE ELSE! THIS FIX /A035 /TAKES THE ABOVE INTO ACCOUNT. /A035 /POPSTK, MOVED TO LEXASC TO CREATE ENOUGH ROOM FOR THE ITALIAN /A045 /TRANSLATIONS ABOVE. /A045 /SYMTSZ, MOVED TO ANOTHER PAGE FOR SPACE REASONS /D041 /D041 /SUBRTN TO INIT RESULT PTR TBL PTR, & 1ST LOC OF RES PTR TBL /M012 /D041 ITLZOL, XX /RESULT PTR TBL & RESULTS PTR INIT SUB RTN /M012 /D041 CLA /CLEAR AC /D041 TAD (RESULT /GET STARTING ADDRESS OF RESULT PTR TABLE /D041 DCA RESPTR /INITIALIZE PTR TO RESULT PTR TABLE /D041 DCA I RESPTR /INIT 1ST LOC OF RESULT PTR TABLE TO ZERO /D041 JMP I ITLZOL /RETURN TO CALLER /A012 /D041 /SUBRTN USED TO INSTALL SETUP VALUES IN BEGINNING LOCATIONS OF OUTPUT /D041 /LIST TO ENABLE OUTPUT LIST TO BE USED BY FORMULA EXECUTION CODE AS A /D041 /CALLABLE ROUTINE. /D041 ITLZO1, XX /PUT VALUES IN OUTPUT LIST /D041 TAD (INIT /GET JMP INDIRECT COMMAND TO HANDLE OUTPUT LIST /A004 /D041 JMS OUTTSZ /SAVE IT, INCREMENT PTR & TEST FOR OVERFLOW /A004 /D041 /PLACE "(JMP I OUTEXT" AT END OF OUTPUT LIST TO EXECUTE AS A ROUTINE /D041 TAD (JMP I OUTEXT /GET JMP I OUTEXT /D041 DCA I OUTPTR /PUT AT END OF OUTPUT LIST FOR USE BY EXECUTION CODE. /D041 JMP I ITLZO1 /RETURN TO CALLER /D041/SUBRTNS TO PERFORM TRANSLATOR INITIALIZATION PROCESS & /D041/INITIALIZE APPROPRIATE FLAGS /D041 ITLZO2, XX /TRANSLATOR INITIALIZATION SUBROUTINE /M012 /D041 TAD (MTHTBL /GET STARTING ADDRESS OF SYMBOL PTR TABLE /D041 DCA MTHPTR /INITIALIZE PTR TO SYMBOL PTR TABLE /D041 TAD (SYMTBL /GET STARTING ADDRESS OF SYMBOL TABLE /D041 DCA SYMPTR /INITIALIZE PTR TO SYMBOL TABLE /D041 JMP I ITLZO2 /RETURN TO CALLER ITLZO3, XX /TRANSLATOR INITIALIZATION SUBROUTINE /A012 / CLA /CLEAR AC /A012 DCA TRUNC /INITIALIZE TRUNCATION/ROUND FLAG = ROUND DCA MTHBLK /INITIALIZE "FORMULA CTRL WORD NOT FOUND" FLAG = TRUE TAD (OUTLST /GET LEAD ADDRESS OF OUTPUT LIST DCA OUTPTR /USE IT TO INIT OUTPUT LIST POINTER TAD (OUTLST /GET LEAD ADDRESS OF OUTPUT LIST DCA OUTENT /INIT FORMULA EXECUTION CODE ENTRY POINT /D041 JMS ITLZO1 /INIT LEAD LOCS OF OUTPUT LST TO SET UP AS SUBRTN TAD (INIT /GET JMP INDIRECT COMMAND TO HANDLE OUTPUT LIST /A041 JMS OUTTSZ /SAVE IT, INCREMENT PTR & TEST FOR OVERFLOW /A041 /PLACE "(JMP I OUTEXT" AT END OF OUTPUT LIST TO EXECUTE AS A ROUTINE TAD (JMP I OUTEXT /GET JMP I OUTEXT AND PUT AT END OF /A041 DCA I OUTPTR /OUTPUT LIST FOR USE BY EXECUTION CODE. /A041 TAD (OUTLST+1 /GET START ADDR OF OUTPUT LST + 1 TO SKIP "INIT"/A041 /VAL PUT AT START OF OUTPUT LIST FOR EXEC CODE /A041 DCA OUTPTR /INITIALIZE PTR TO OUTPUT LIST /A041 JMP I ITLZO3 /RETURN TO CALLER /A012 /D041 /SUBRTN TO INIT OUTPUT LIST PTR /A012 /D041 ITLZO4, XX /TRANSLATOR INIT SUBRTN /A012 /D041 TAD (OUTLST+1 /GET START ADDR OF OUTPUT LST + 1 TO SKIP "INIT"/A004 /D041 /VAL PUT AT START OF OUTPUT LIST FOR EXEC CODE /A004 /D041 DCA OUTPTR /INITIALIZE PTR TO OUTPUT LIST /D041 JMP I ITLZO4 /RETURN TO CALLER /A012 /WRKBUF, MOVED TO TMATH.PA TO MAKE ROOM FOR SYMBOL TABLE /A041 MAXWRK=12 /DEFINE LENGTH OF WORK BUFFER FOR Z-BLOCK /A041 WRKBUF, ZBLOCK MAXWRK /START ADDR OF CONTROL WORD WORK BUFFER /A041 UPWRK=. /UPPER LIMIT OF " " " " /A041 X=. / INDICATE FIRST FREE LOCATION /A041 / ------------------ PAGE /THIS ROUTINE CALLED AS AN INDIRECT THRU "HLDVAL" /ROUTINE TO PROCESS THE "FORMULA" CONTROL WORD FOUND IN A MATH CONTROL BLOCK MTHBLK, 0 /"FORMULA CONTROL WORD NOT FOUND" FLAG, KEEP ON SAME /PAGE WITH "FRMULA" ROUTINE FRMULA, XX /RTN TO HANDLE "FORMULA" CONTROL WORD TAD MTHBLK /GET "FORMULA CONTROL WORD NOT FOUND" FLAG SNA CLA /IS "FORMULA CONTROL WORD NOT FOUND" = TRUE? JMP FORM1 / YES: GO INITIALIZE TRANSLATOR DATA STRUCTURES JMP FORM2 / NO: BYPASS INITIALIZATION & SET FLAG PROCESS FORM1, ISZ MTHBLK /SET FORMULA CONTROL WORD NOT FOUND = FALSE /D041 JMS ITLZO4 /GO INITIALIZE OUTPUT LIST PTR /M012 TAD (OUTLST+1 /GET START ADDR OF OUTPUT LST + 1 TO SKIP "INIT"/A041 /VAL PUT AT START OF OUTPUT LIST FOR EXEC CODE /A041 DCA OUTPTR /INITIALIZE PTR TO OUTPUT LIST /A041 FORM2, AC0001 /SET UP TO INDICATE A FORMULA COMMAND /A039 DCA SETFLG /STORE IN FORMAT FLAG WORD /A039 JMS XLTFRM /CALL TRANSLATOR TO CONVERT FORMULA /NOTE: RETURN HERE WITH ERROR NUMBER IN THE AC IF THERE IS AN ERROR /IN THE MATH TRANSLATION PROCESSING JMP I FRMULA /RETURN HERE WITH ERROR NO. IN THE AC /NOTE: RETURN HERE IF PROCESSING WENT ALL RIGHT AC0001 /GET 1 INTO THE AC /A037 DCA MTHSND /SET "NOT PROCESSING SECOND LINE" = TRUE /A037 ISZ FRMULA /INCREMENT AC FOR NORMAL RETURN JMP I FRMULA /RETURN TO CALLER /THIS ROUTINE USED TO HANDLE A "SET" CONTROL WORD IN MATH CONTROL BLOCK SETCMD, XX /RTN TO HANDLE "SET" CONTROL WORD /M042 TAD OUTPTR /GET PRESENT POSITION OF OUTPUT LIST PTR DCA OUTENT /INIT FORMULA EXECUTION CODE ENTRY POINT DCA SETFLG /CLEAR FORMAT FLAG WORD TO INDICATE SET COMMAND /A039 /D041 JMS ITLZO1 /PUT LEAD VALUES INTO OUTPUT LIST FOR EXECUTION TAD (INIT /GET JMP INDIRECT COMMAND TO HANDLE OUTPUT LIST /A041 JMS OUTTSZ /SAVE IT, INCREMENT PTR & TEST FOR OVERFLOW /A041 /PLACE "(JMP I OUTEXT" AT END OF OUTPUT LIST TO EXECUTE AS A ROUTINE TAD (JMP I OUTEXT /GET JMP I OUTEXT AND PUT AT END OF /A041 DCA I OUTPTR /OUTPUT LIST FOR USE BY EXECUTION CODE. /A041 JMS XLTFRM /GO TRANSLATE FORMULA /NOTE: RETURN HERE WITH ERROR NUMBER IN THE AC IF THERE IS AN ERROR /IN THE MATH TRANSLATION PROCESSING JMP I SETCMD /RETURN HERE WITH ERROR NO. IN THE AC /M042 /NOTE: RETURN HERE IF PROCESSING WENT ALL RIGHT /GO INVOKE THE FORMULA EXECUTION CODE FOR THE "SET" CONTROL WORD JMS EXECUT /GO EXECUTE THE FORMULA TRANSLATED SZA /WAS AN ERROR RETURNED FROM THE EXECUTION CODE? JMP I SETCMD / YES: RETURN TO CALLER WITH ERROR NUMBER IN AC /M042 TAD OUTENT /GET ORIGINAL POSITION OF OUTPUT LIST PTR DCA OUTPTR /RESTORE IT NOW THAT THRU PROCESSING "SET" CTRL WORD /RESTORE "(JMP I OUTEXT" TO END OF LIST WHEN THRU WITH "SET" CTRL WORD TAD (JMP I OUTEXT /GET JMP I OUTEXT DCA I OUTPTR /SAVE IT AT END OF OUTPUT LIST BEFORE "SET" CTRL WORD /RESTORE FORMULA EXECUTION CODE ENTRY POINT TO START OF OUTPUT LIST TAD (OUTLST /GET START OF OUTPUT LIST DCA OUTENT /RESTORE FORMULA EXECUTION CODE ENTRY TO START OF LIST AC0001 /GET 1 INTO THE AC /A037 DCA MTHSND /SET "NOT PROCESSING SECOND LINE" = TRUE /A037 ISZ SETCMD /INCREMENT P.C. FOR NORMAL RETURN /M042 JMP I SETCMD /RETURN TO CALLER /M042 /THIS ROUTINE CALLED AS AN INDIRECT THRU "HLDVAL" /THIS ROUTINE USED TO HANDLE A "ROUND" CONTROL WORD IN MATH CONTROL BLOCK ROUND, XX /RTN TO HANDLE "ROUND" CONTROL WORD JMS CHKLNE /CHK FOR NON-ALLOWABLE CHARS ON SAME LINE AS.... /....AND RIGHT AFTER CONTROL WORD JMP ERRBCK /RETURN HERE FROM "CHKLNE" WITH ERROR NUM IN /A011 /AC TO PASS BACK IF NON-LEGAL CHARS FOUND ON LNE/A011 AC0000 /RETURN HERE FROM "CHKLNE" IF OK - SET AC TO ZERO DCA TRUNC /SET "TRUNCATE" FLAG = FALSE AC0001 /GET 1 INTO THE AC /A037 DCA MTHSND /SET "NOT PROCESSING SECOND LINE" = TRUE /A037 ISZ ROUND /SET P.C. FOR NORMAL RETURN JMP I ROUND /RETURN TO CALLER /THIS ROUTINE CALLED AS AN INDIRECT THRU "HLDVAL" /THIS ROUTINE USED TO HANDLE "TRUNCATE" CONTROL WORD IN MATH CONTROL BLOCK TRNCTE, XX /RTN TO HANDLE ":TRUNCATE" CONTROL WORD JMS CHKLNE /CHK FOR NON-ALLOWABLE CHARS ON SAME LINE AS.... /....AND RIGHT AFTER CONTROL WORD JMP ERRBCK /RETURN HERE FROM "CHKLNE" WITH ERROR NUM IN /A011 /AC TO PASS BACK IF NON-LEGAL CHARS FOUND ON LNE/A011 AC0001 /RETURN HERE FROM "CHKLNE" IF OK - SET AC TO 1 DCA TRUNC /SET "TRUNCATE" FLAG = TRUE AC0001 /GET 1 INTO THE AC /A037 DCA MTHSND /SET "NOT PROCESSING SECOND LINE" = TRUE /A037 ISZ TRNCTE /SET P.C. FOR NORMAL RETURN JMP I TRNCTE /RETURN TO CALLER /ROUTINE TO HANDLE "END" CONTROL WORD IN EDITOR MATH CONTROL BLOCK /A020 /MOVED IN FROM ANOTHER PAGE /A027 END, XX JMS CHKLNE /CHK FOR NON-ALLOWABLE CHARS ON SAME LINE AS... /A024 /....AND RIGHT AFTER CONTROL WORD /A024 JMP ERRBCK /RETURN HERE FROM "CHKLNE" WITH ERROR NUM IN AC /A026 /.. TO PASS BACK IF NON-LEGAL CHARS FOUND ON LNE/A026 TAD MTHSND /GET MATH CONTROL BLOCK "SECOND LINE" FLAG /A020 SZA CLA /ARE WE PROCESSING THE SECOND LINE? /A020 JMP ERROR5 / NO: REPORT ERROR - "END" ON WRONG LINE /A020 /D036 AC0001 / YES: GET 1 IN THE AC /A020 /D036 DCA MTHWRK /SET "START OF MATH WORK AREA" = FALSE /A020 AC7777 /GET -1 IN THE AC /A020 DCA MTHSND /SET "SECOND LINE" FLAG = "END" CTRL FOUND /A020 /D034 SETTING THIS FLAG WILL CAUSE THE MATH_END CODE TO BE INSERTED /A027 /D034 AFTER THE NEXT END_CONTROL /A027 /D034 CDFLP / FLAG IS IN LPFIELD /A027 /D034 AC0001 / /A027 /D034 DCA I (ENDFL) / SET FLAG /A027 ISZ END /SET UP SKIP FOR NORMAL RETURN /A020 JMP I END /RETURN TO CALLER /A020 ERROR5, TAD (EVSYN5 /RTRN "END" CTRL WORD ON WRONG LINE ERROR /M024 JMP I END /RETURN TO CALLER WITH ERROR NUMBER IN AC /A021 /THE FOLLOWING ROUTINE IS CALLED FROM OPDNUM TO CHECK IF THE CURRENT /A040 /NUMBER FROM LEXIC IS ALREADY IN THE SYMBOL TABLE. IF IT IS, WE DO /A040 /NOT WANT TO ADD ANOTHER COPY OF THE SAME NUMBER TO THE TABLE. /A040 / ENTER WITH AC CLEAR AND TOKVAL POINTING TO START OF NUMBER /A040 / RETURN TO CALLER IF NUMBER IS NOT IN SYMBOL TABLE /A040 / OTHERWISE, SET UP CORRECT POINTERS AND RETURN TO FLGFIX /A040 CHKNUM, XX /CHECK IF NUMBER IS IN SYMBOL TABLE /A040 TAD (SYMTBL /GET START OF SYMBOL TABLE ADDRESS /A040 DCA NUMPTR /SET UP POINTER TO POSSIBLE NUMBER LOCATION /A040 /CHECK TO SEE IF WE HAVE REACHED THE END OF THE SYMBOL TABLE YET /A040 CHKEND, TAD NUMPTR /GET CURRENT POINTER WITHIN SYMBOL TABLE /A040 CIA /MAKE IT NEGATIVE /A040 TAD SYMPTR /COMBINE WITH LAST USED LOCATION OF TABLE /A040 SPA SNA CLA /WAS NUMBER IN TABLE (HAVE WE REACHED THE END) /A040 JMP I CHKNUM /IT WASN'T, RETURN TO ADD IT TO SYMBOL TABLE /A040 /ARE WE POINTING TO A SYMBOL - ALL SYMBOLS START WITH A COLON CHARACTER /A040 TAD I NUMPTR /GET CURRENT CHARACTER POINTED TO /A040 TAD (200-": /SUBTRACT VALUE OF COLON FROM CHARACTER /A040 SZA CLA /IS IT A COLON /A040 JMP CHKVAL /NO: GO CHECK FOR NUMBER VALUE /A040 /SKIP OVER SYMBOL NAME IN TABLE /A040 CHKSYM, ISZ NUMPTR /BUMP POINTER TO NEXT LOCATION /A040 TAD I NUMPTR /GET CURRENT CHARACTER POINTER TO /A040 SMA CLA /IS IT THE LAST ONE OF THE SYMBOL NAME /A040 JMP CHKSYM /NO: GO CHECK THE NEXT ONE /A040 /SKIP OVER SYMBOL VALUE IN TABLE /A040 AC0002 /SET UP TO SKIP OVER LAST CHARACTER & FORMAT /A040 CHKNOT, TAD (VALSIZ /NUMBER OF CHARACTERS IN NUMBER VALUE /A040 TAD NUMPTR /COMBINE WITH CURRENT POINTER INTO SYM TABLE /A040 DCA NUMPTR /STORE POINTER TO NEXT TABLE ENTRY POINT /A040 JMP CHKEND /GO CHECK TO SEE IF THERE ARE ANY MORE ENTRIES /A040 /CHECK FOR NUMBER MATCH IN SYMBOL TABLE /A040 CHKVAL, TAD NUMPTR /GET POINTER TO NUMBER /A040 DCA TMPTR1 /SET UP TEMPORARY POINTER TO NUMBER /A040 TAD (TOKVAL /STARTING ADDRESS OF PASSED NUMERICAL OPERAND /A040 DCA TMPTR2 /SET UP POINTER TO NUMBER VALUE /A040 TAD (-VALSIZ /GET NEGATIVE NUMBER OF CHARACTERS TO CHECK /A040 DCA TMPCTR /SET UP COUNTER OF DIGITS TO CHECK /A040 CHKMOR, TAD I TMPTR1 /GET VALUE WORD FROM SYMBOL TABLE /A040 CIA /MAKE IT NEGATIVE /A040 TAD I TMPTR2 /COMBINE WITH VALUE WORD FROM LEXIC /A040 SZA CLA /DO THEY MATCH /A040 JMP CHKNOT /NO: GO UP THE POINTERS TO NEXT ENTRY /A040 ISZ TMPTR1 /BUMP SYMBOL TABLE POINTER /A040 ISZ TMPTR2 /BUMP LEXIC POINTER /A040 ISZ TMPCTR /BUMP COUNTER OF DIGITS LEFT TO DO /A040 JMP CHKMOR /NOT DONE, GO CHECK NEXT VALUE WORD /A040 /MATCH FOUND - NUMBER IS ALREADY IN THE SYMBOL TABLE LIST /A040 /PUT INPUT NUMBER ADDRESS AND "PUSH" RETURN ADDRESS INTO OUTPUT LIST /A040 TAD NUMPTR /GET ADDRESS OF INPUT OPERAND FROM SYMBOL TABLE /A041 JMS PSHLST /SAVE IT ON OUTPUT LIST /A041 JMP FLGFIX /GO SET FLAGS & EXIT OPERAND/OPERATOR ROUTINE /A041 /D041 TAD (PUSH /GET STARTING ADDRESS OF OUTPUT "PUSH" ROUTINE /A040 /D041 JMS OUTTSZ /SAVE IT, INCREMENT LST PTR & TEST FOR OVFLOW /A040 /D041 TAD NUMPTR /GET ADDRESS OF INPUT OPERAND FROM SYMBOL TABLE /A040 /D041 JMS OUTTSZ /SAVE IT, INCREMENT LST PTR & TEST FOR OVFLOW /A040 /D041 JMP FLGFIX /GO SET FLAGS & EXIT OPERAND/OPERATOR ROUTINE /A040 NUMPTR, 0 /PLACE TO SAVE START OF NUMBER IN SYMBOL TABLE /A040 X=. / INDICATE FIRST FREE LOCATION /A041 / ------------------ PAGE