/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