ASMB,R,L,C,N
      HED SWTCH - TRANSFERS FILE CONTAINING RTE SYSTEM GENERATED ON-LINE. 
      NAM SWTCH,3,10 92060-16038 REV.1826 780510
      SPC 1 
******************************************************************
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978.  ALL RIGHTS     *
*  * RESERVED.  NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED,      *
*  * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT*
*  * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY.       *
******************************************************************
      SPC 2 
****************************************
* 
*     NAME:       SWTCH 
*     SOURCE:     92060-18038 
*     BINARY:     92060-16038 
*     WRITTEN BY: KFH 
* 
****************************************
      SPC 2 
* 
* TURN - ON SEQUENCE: 
* 
*  RU,SWTCH,FLNAME:SC:LB,CHANNEL,SUBCHANNEL/UNIT,AUTO,FILES,TYPE6 
* 
*  WHERE: 
* 
*  FLNAME:SC:LB  IS THE ABSOLUTE FILE NAME OF THE SYSTEM
*  CHANNEL       IS THE OCTAL TARGET CHANNEL, WITH A "B" APPENDED 
*  SUBCHANNEL    IS THE TARGET 7900 SUBCHANNEL
*                OR 
*  UNIT          IS THE TARGET 7905/7920 UNIT 
*  AUTO          IS Y/N, FOR AUTO BOOT-UP 
*  FILES         IS Y/N, FOR SAVING THE TARGET FILE SYSTEM
*  TYPE6         IS Y/N, FOR PURGING THE TYPE 6 FILES AT THE TARGET 
     SPC 2
* 
* 
* THE ON-LINE RTE GENERATOR PRODUCES AN FMP FILE CONTAINING 
* A COMPLETE RTE-II OR RTE-III SYSTEM FOR A SPECIFIC CONFIGURATION. 
* SWTCH COPIES THE FILE ONTO THAT CHANNEL AND SUBCHANNEL(UNIT), OR
* TO A USER-SPECIFIED 'TEMPORARY' CHANNEL AND SUBCHANNEL(UNIT). 
* AND BEFORE THE TRANSFER BEGINS, THE FILE IS CHECKED FOR VALIDITY, 
* THE OPERATOR IS NOTIFIED OF THE DESTINATION CONFIGURATION,
* INCLUDING THE SUBCHANNEL DEFINITION.
* 
* IF THE NEW RTE SYSTEM OVERLAYS THE CURRENT SYSTEM, A NEW
* FMP SETUP (INITIALIZED) CODE WORD IS COMPUTED AND WRITTEN 
* INTO THE FMP CARTRIDGE DIRECTORY SO THAT ON BOOTUP, FMP 
* WILL REMAIN INTACT (INITIALIZED). 
      SKP 
*  ENTRY POINTS 
* 
      ENT SWTCH 
* 
      ENT MAINR 
      ENT DFTR,DNHD,DNSU,DNSP,DNTR,DSBCH
      ENT TUNIT,TCH,TSBCH 
      ENT INITF,LNGTH 
      ENT BUFAD,XOUT,DSTAD
      ENT CNVAS,CLEN,DSPLY,LINBL
      ENT BOOTF 
* 
*  EXTERNAL ENTRY POINTS
* 
      EXT RMPAR,EXEC,$LIBR
      EXT OPEN,READF,LOCF,CLOSE 
      EXT $LIBR,$LIBX 
* 
      EXT DISK0,DISK5 
      EXT INP0,INP5 
      EXT INIT0,INIT5 
      EXT STDS0,STDS5 
      EXT CNUMD,GETST 
      EXT FLGTR 
      SPC 2 
A     EQU 0 
B     EQU 1 
      SUP 
      SKP 
*                HEADER RECORD FORMAT 
* 
*        ------------------------------------ 
*        !       SYSTEM SUBCHANNEL #        ! 
*        ------------------------------------ 
*        !       SYSTEM EQT #               ! 
*        ------------------------------------ 
*        !       NUMBER OF EQT'S            ! 
*        ------------------------------------ 
*        !       PRIV. INT. CHANNEL         ! 
*        ------------------------------------ 
*        !       TBG CHANNEL                ! 
*        ------------------------------------ 
*        !       TTY CHANNEL                ! 
*        ------------------------------------ 
*        !   CHANNEL #    !   EQT TYPE      !        FOR EQT #1 
*        ------------------------------------ 
*        !   CHANNEL #    !   EQT TYPE      !        FOR EQT #2 
*        ------------------------------------ 
*                         .                               . 
*                         .                               . 
*                         .                               . 
*        ------------------------------------ 
*        !    CHANNEL #   !   EQT TYPE      !        FOR EQT #N 
*        ------------------------------------        -
*        !       FIRST CYLINDER #           !        SYSTEM 
*        ------------------------------------ 
*        !            # TRACKS              !        SUBCHANNEL 
*        ------------------------------------ 
*        !            # SPARES              !        DEFINITION 
*        ------------------------------------ 
*        !            # SURFACES            !        FOR
*        ------------------------------------ 
*        !         STARTING HEAD #          !        A
*        ------------------------------------ 
*        !             UNIT #               !        7905/7920
*        ------------------------------------        -
* 
*                        OR                          OR 
* 
*        ------------------------------------        -
*        !          FIRST TRACK             !        FOR A
*        ------------------------------------ 
*        !           # TRACKS               !        7900 
*        ------------------------------------        -
      SKP 
      SPC 4 
*------------------------------------------------------------------------ 
* 
*              THE FOLLOWING 6144 WORDS WILL BE OVERLAID
*              ONCE THE TRANSFER PROCESS BEGINS. BUFR 
*              WILL CONTAIN ONE TRACK'S WORTH OF INFO.
* 
*------------------------------------------------------------------------ 
      SPC 4 
BUFR  BSS 128       BUFFER FOR 1 FULL TRACK (6144 WORDS)
* 
* 
MES1  DEF *+1 
      ASC 22,              ******  W A R N I N G  ******
MES2  DEF *+1 
      ASC 23,ALL ACTIVITY MUST BE TERMINATED BEFORE SYSTEM
      ASC 9,TRANSFER PROCESS. 
      SPC 2 
      BSS 256+BUFR-*  NEED TO READ 2 RECORDS AT VERF1 
      SPC 2 
MES3  DEF *+1 
      ASC 14,FILE NAME OF NEW RTE SYSTEM? 
MES4  DEF *+1 
      ASC 9,ILLEGAL FILE NAME 
MES5  DEF *+1 
      ASC 15,NEW SYSTEM I/O CONFIGURATION:
MES6  DEF *+1 
      ASC 16,CHANNEL XX PRIVILEGED INTERRUPT
MES6A DEF MES6+5
MES7  DEF *+1 
      ASC 7,CHANNEL XX TBG
MES7A DEF MES7+5
MES8  DEF *+1 
      ASC 9,CHANNEL XX TYPE=XX
MES8A DEF MES8+5
MES8B DEF MES8+9
MES9  DEF *+1 
      ASC 22,NEW SYSTEM (LU2) CHANNEL= XX  SUBCHANNEL= XX 
MES9A DEF MES9+14 
MES9B DEF MES9+22 
MES10 DEF *+1 
      ASC 20,7900 LOGICAL SUBCHANNEL X  FIRST TRACK#
MS10A ASC 9,XXXX  #TRACKS XXXX
MS10C DEF MS10A 
MS10D DEF MS10A+7 
MES11 DEF *+1 
      ASC 23,7905/  HEAD# X   #TRACKS    XXXX   #SURFACES X 
MS11C DEF *+1 
      ASC 23,7920   UNIT# X   FIRST CYL# XXXX   #SPARES   X 
MS11A DEF MES11+15
MS11B DEF MS11C+15
MES12 DEF *+1 
      ASC 23,TARGET CHANNEL FOR NEW SYSTEM?   (XX OR " "CR) 
MES13 DEF *+1 
      ASC 20,TARGET SUBCHANNEL(LOGICAL)/UNIT FOR NEW
      ASC 11,SYSTEM?   (X OR " "CR) 
      SPC 2 
      BSS 512+BUFR-*    NEED TO READ IN 512 WORDS AT F$T0 
      SPC 2 
MES14 DEF *+1 
      ASC 20,NEW SYSTEM WILL OVERWRITE FILE  XXXXXX.
MES16 DEF *+1 
      ASC 23,NOW IS THE TIME TO INSERT CORRECT CARTRIDGE IN 
MES17 DEF *+1 
      ASC 23,TARGET SUBCHANNEL/UNIT.   (" "CR TO CONTINUE)
MES18 DEF *+1 
      ASC 16,SAVE FILES AT TARGET?   (Y OR N) 
MES19 DEF *+1 
      ASC 19,NEW SYSTEM WILL DESTROY SOME FMP FILES 
MES20 DEF *+1 
      ASC 12,OK TO PROCEED? (Y OR N)
MES22 DEF *+1 
      ASC 15,PURGE TYPE 6 FILES?   (Y OR N) 
MES23 DEF *+1 
      ASC 20,INFORMATION STORED ON SUBCHANNEL/UNIT XX 
      ASC 12, OF TARGET CHANNEL  XX 
MS23B DEF *+1 
      ASC 9,WILL BE DESTROYED 
MS23A DEF MES23+31
MES24 DEF *+1 
      ASC 12,AUTO BOOT-UP?   (Y OR N) 
MES25 DEF *+1 
      ASC 25,PRESENT CONFIGURATION DOESN'T PERMIT AUTO BOOT-UP. 
MES26 DEF *+1 
      ASC 22,SYSTEM WILL HALT AFTER TRANSFER COMPLETION.
MES32 DEF *+1 
      ASC 17,READY TO TRANSFER. OK TO PROCEED?
* 
SWAP0 DEF *+1 
      ASC 3,DSEG0   7900 DISK DRIVER SEGMENT
SWAP5 DEF *+1 
      ASC 3,DSEG5   7905/7920 DISK DRIVER SEGMENT 
      SKP 
*  CONSTANTS
* 
B17   OCT 17
B177  OCT 177 
B777  OCT 777 
B1774 OCT 177400
B2060 OCT 20060 
* 
N6    DEC -6
N7    DEC -7
N31   DEC -31 
N64   DEC -64 
N89   DEC -89 
N512  DEC -512
* 
P12   DEC 12
P14   DEC 14
P17   DEC 17
P28   DEC 28
P29   DEC 29
P64   DEC 64
P98   DEC 98
P512  DEC 512 
* 
      SKP 
* 
* 
*  F$TB  SEARCHES THE RESIDENT LIBRARY ENTRY POINT
*        LIST FOR THE APPROPRIATE TRACK MAP TABLE,
*        $TB31 OR $TB32 (DEPENDENT UPON THE SOURCE
*        DISK TYPE), AND RETURNS IT IN BUFR.
* 
*  CALLING SEQUENCE:  JSB F$TB
*                     DEF .1 OR .2
* 
F$TB  NOP 
      LDA #LEP      GET # OF LIBRARY ENTRY POINTS 
      MPY P4        4 WORDS PER ENTRY 
      STA LEPL      SAVE SIZE OF L.E.P. LIST
* 
      LDA ALEP      GET DISK ADDRESS OF LEP LIST
      LDB A 
      ALF,ALF 
      RAL 
      AND B777
      STA LTRK      SAVE THE TRACK
      LDA B 
      AND B177
F$T3  STA LSEC      AND SECTOR
      ADA N89       DETERMINE IF THE SECTOR RESULTS IN
      SSA           LESS THAN 512 WORDS LEFT ON TRACK 
      JMP F$T1      <89 
      INA           SEE HOW MANY SECTORS LESS 
      MPY P64 
      CMA,INA       AND SUBTRACT FROM 
      ADA P512      512 MAX 
      STA LLEN      LENGTH OF READ
      JMP F$T0
F$T1  LDA LEPL
      JSB GTLEN     GET READ LENGTH 
F$T0  JSB READD     READ IT 
* 
      CLB 
      LDA LLEN
      DIV P4        GET THE # OF ENTRIES READ IN
      CMA,INA       NEGATE
      STA LCNT      LOOP COUNTER
      LDB BUFAD 
F$T2  STB BPTR
* 
      LDA $T
      CPA B,I       A "$T"? 
      INB,RSS 
      JMP NOTIT     NO
      LDA B3
      CPA B,I       A "B3"? 
      INB,RSS 
      JMP NOTIT     NO
      LDA F$TB,I
      LDA A,I       GET "1" OR "2"
      XOR B,I 
      AND B1774 
      SZA,RSS       A MATCH?
      JMP F$T7      YES!! 
* 
NOTIT ISZ LCNT      DONE WITH CURRENT BUFFER? 
      RSS 
      JMP F$T4      YES 
      LDB BPTR
      ADB P4
      JMP F$T2
* 
F$T4  LDA LLEN      SEE IF ALL WERE SEARCHED
      CMA 
      ADA LEPL
      SSA           IF WE'VE GONE THRU THE ENTIRE LEP 
      JMP ABF$       THEN ITS NOT THERE, SO ABORT SWTCH 
      INA 
      STA LEPL      NEW # LEFT
* 
      LDB LSEC      DETERMINE IF TRACK CROSSING 
      ADB N89       IF >= 88 THEN THERE WILL BE 
      INB 
      SSB 
      JMP F$T5      NOPE
* 
      ISZ LTRK      YES, INCREMENT TO NEXT TRACK
      CLB 
      STB LSEC      SET NEXT SECTOR TO 0
      JMP F$T1      SET LENGTH OF READ
* 
F$T5  LDA LSEC      INCREMENT TO NEXT STARTING
      ADA P8        SECTOR
      JMP F$T3      SET LENGTH OF READ
* 
F$T7  STB LCNT      TEMPORARY SAVE
      LDB P17       DETERMINE IF WE'RE TO READ
      LDA SEQT       IN A $TB31 (17 WORDS), OR
      SLA,RSS        A $TB32 (98 WORDS) 
      LDB P98 
      STB LLEN
* 
      LDB LCNT      RESTORE ENTRY POINTER 
      LDA B,I       DETERMINE IF ENTRY IS AT A
      INB 
      AND P1        MEMORY ADDRESS, OR A DISK 
      SZA           BY CHECKING BIT 0 OF WORD 3 
      JMP F$T9      DISK ADDR 
* 
      LDA B,I       GET THE MEMORY ADDRESS
      LDB SEQT      DETERMINE IF USER-DEFINED TMT 
      SLB,RSS       DIFFERENT CHECKS FOR 7900-7905/7920 
      JMP F$T10     7905/7920 
      LDB A,I       GET WORD 1
      SSB           IF NEGATIVE, THERE'S AN EXTRA WORD
      INA 
* 
F$T11 LDB LLEN      # WORDS TO GET
      CMB,INB 
      STB LCNT      LOOP COUNTER
      LDB BUFAD 
      STB BPTR      BUFFER POINTER
      RSS 
F$T8  ISZ BPTR      NEXT LOCATION 
      LDB A,I 
      STB BPTR,I    STORE WORD
      INA           INCRMENT MEMORY ADDRESS 
      ISZ LCNT      DONE? 
      JMP F$T8      NO
      LDA BUFAD 
      STA BPTR
      ISZ F$TB
      JMP F$TB,I
* 
F$T10 LDB A,I       CHECK WORD 1
      SSB,RSS       IF POSITIVE,THERE'S AN EXTRA WORD 
      INA 
      JMP F$T11 
* 
F$T9  LDA B,I       TRANSLATE THE DISK
      ALF,ALF        ADDRESS TO 
      RAL 
      AND B377
      STA LTRK       TRACK AND
      LDA B,I 
      AND B177
      STA LSEC       SECTOR 
* 
      JSB READD     READ IT 
      LDA BUFAD 
      INA           SKIP EXTRA WORD 
      STA BPTR
      ISZ F$TB
      JMP F$TB,I
* 
ABF$  LDA P28 
      LDB MES30 
      JSB DSPLY 
      JMP XOUT      TERMINATE SWTCH 
      SPC 3 
#LEP  EQU 1762B     # OF LIBRARY ENTRY POINTS IN LIST 
ALEP  EQU 1761B     ADDR    "      "     "    LIST
LEPL  NOP           LENGTH  "      "     "     "
LCNT  NOP           COUNTER 
$T    ASC 1,$T
B3    ASC 1,B3
.1    ASC 1,1 
.2    ASC 1,2 
MES30 DEF *+1 
      ASC 28,SOURCE SUBCHANNEL NOT FOUND ON A SYSTEM TRACK MAP TABLE
      SKP 
* 
*  GTLEN  COMPUTES LLEN FOR READING THE 
*         LIBRARY ENTRY POINTS LIST INTO
*         BUFR
* 
*  CALLING SEQUENCE: (A)=REMAINING SIZE OF L.E.P. 
*                    JSB GTLEN
* 
GTLEN NOP 
      LDB P512      THE NORMAL BUFFER SIZE
      CMA,INA       IF MORE THAN THE REMAINING
      ADA P512       LEP SIZE, THEN USE THE SIZE
      SSA,RSS       IN (A)
      LDB LEPL
      STB LLEN
      JMP GTLEN,I 
      SPC 5 
* 
*  READD  READS LLEN WORDS AT TRACK LTRK, AND 
*         SECTOR LSEC 
* 
READD NOP 
     JSB EXEC 
     DEF *+7
     DEF P1 
     DEF P2 
     DEF BUFR 
     DEF LLEN 
     DEF LTRK 
     DEF LSEC 
* 
     JMP READD,I
* 
* 
LTRK  NOP 
LSEC  NOP 
      SKP 
* 
*   VERIFIES THE EXISTENCE OF A SYSTEM SUBCHANNEL MATCH 
*   AT THE TARGET CHANNEL AND SUBCHANNEL. THE FOLLOWING 
*   CHECKS ARE MADE:
* 
*      VERIFY THAT A CARTRIDGE DIRECTORY EXISTS ON THE
*             LAST SYSTEM TRACK (AS DEFINED BY THE NEW
*             SYSTEM) 
*      VERIFY THAT A FILE DIRECTORY SPECIFICATION ENTRY 
*             EXISTS ON THIS TRACK
*      VERIFY THAT A TRACK 0 SECTOR 0 BOOTSTRAP EXISTS
*             AT THE FIRST PHYSICAL TRACK/CYLINDER OF 
*             DESTINATION SYSTEM
* 
* 
*      RETURN: (P+1) CAN'T SAVE THE FILE STRUCTURE
*              (P+2) CAN SAVE IT
* 
VFYSY NOP 
      CLA 
      STA INITF     CLEAR INIT WORD FOR DISKD 
* 
      LDA N128
      STA LNGTH     READ 128 WORDS
      CCE           HOPEFULLY THEY WILL CONTAIN 
      LDB BUFAD     THE CARTRIDGE DIRECTORY AT
      STB BPTR      TARGET SUBCHANNEL 
      LDA DNTR      DESTINATION SYSTEM LAST(LOGICAL)
      ADA N1         TRACK, LESS 1
      ALF,ALF 
      RAR 
      JSB DISKD 
* 
* 
* VERIFY THE EXISTENCE OF A CARTRIDGE DIRECTORY 
* 
      LDA N31       MAX # CARTRIDGE ENTRIES 
      STA TEMP1 
CHCD0 LDA BPTR,I    GET WORD 0 OF ENTRY 
      SSA 
      JMP NOTFS     LU WORD < 0 
      LDB N64 
      ADB A 
      SSB,RSS 
      JMP NOTFS     LU > 77(8)
* 
      CPA P0        END OF LU'S ? 
      JMP CHCD3     YES 
      CPA P2        LU 2 (SYSTEM) ? 
      RSS           YES 
      JMP CHCD1     CHECK WORDS 1-3 IN ENTRY
* 
      LDB BPTR      GET WORD #1 OF THE (POSSIBLY) 
      INB           SYSTEM LU 2 ENTRY 
      LDA B,I 
      SSA 
      JMP NOTFS     LAST FMP TRACK WORD < 0 
      STA D.LT      SAVE FOR LATER CHECKS 
* 
CHCD1 LDA N3
      STA TEMP2 
* 
CHCD2 ISZ BPTR      CHECK WORDS 1,2,&3
      LDA BPTR,I    OF ENTRY FOR VALUES 
      SSA           >= 0
      JMP NOTFS     INVALID 
      ISZ TEMP2 
      JMP CHCD2     CHECK NEXT WORD 
      ISZ BPTR      NEXT ENTRY WORD 0 
      ISZ TEMP1     LAST ENTRY (31)?
      JMP CHCD0     NO,CONTINUE 
* 
CHCD3 LDA D.LT      (WAS INITIALLY -1)
      SSA 
      JMP NOTFS     NEVER SET BY A LU 2 
      LDA BF124 
      SZA 
      JMP NOTFS     WORD 124 OF CD MUST = 0 
* 
* 
*  LOOKED LIKE A CARTRIDGE DIRECTORY.  NOW TRY FOR A
*  FILE DIRECTORY IN THE NEXT BLOCK.
* 
      LDA DNTR      DETERMINE DISK ADDRESS OF NEXT
      ADA N1         BLOCK CONTAINING THE 
      ALF,ALF        FILE SPEC ENTRY
      RAR 
      IOR P14       READ 128 WORDS, HOPEFULLY THE 
      LDB BUFAD      SPEC ENTRY 
      STB BPTR
      CCE 
      JSB DISKD 
* 
      LDA BPTR,I    TESTS FOR A VALID FILE DIRECTORY ENTRY: 
      SSA,RSS 
      JMP NOTFS     WORD 0 MUST BE < 0
* 
      LDA N7        WORDS 1-7,9-15 IN SPEC MUST BE >= 0 
      STA TEMP2 
CHFD1 ISZ BPTR
      LDA BPTR,I
      SSA 
      JMP NOTFS     < 0, THEREFORE INVALID
      ISZ TEMP2 
      JMP CHFD1 
* 
      ISZ BPTR      WORD 8 MUST BE < 0
      LDA BPTR,I
      SSA,RSS 
      JMP NOTFS 
      LDA N6        NOW CHECK WORDS 9-15
      STA TEMP2 
CHFD2 ISZ BPTR
      LDA BPTR,I
      SSA 
      JMP NOTFS 
      ISZ TEMP2 
      JMP CHFD2 
* 
      LDA BF6       WORD 6 (#SECTORS/TRACK) MUST BE 
      LDB BF5         >= WORD 5 (NEXT AVAILABLE SECTOR) 
      CMB,INB 
      ADA B 
      SSA 
      JMP NOTFS     INVALID 
* 
      LDA BF7        LOWEST DIRECTORY TRACK(LOGICAL)
      LDB BF8         MINUS THE NEGATIVE # DIRECTORY
      STB D.#         TRACKS, 
      CMB             MINUS 1 
      ADA B         GIVES LAST FMP TRACK
      CPA D.LT      MUST = LAST FMP TRACK INDICATED 
      RSS            IN CD FOR LU 2 
      JMP NOTFS     INVALID 
* 
      LDB DNTR      DOES  THE LOGICAL DIRECTORY TRACK # 
      ADB N1         AT TARGET = LOGICAL DIRECTORY TRACK #
      CPA B          FOR DESTINATION (THE LAST LOGICAL TRACK FOR
      RSS            SYSTEM LU) ? 
      JMP NOTFS     NO
      LDA BF4       SAVE THE FIRST FMP TRACK FOR
      STA FFMP       FUTURE CHECKS
* 
* 
*  VERIFY THAT A TRACK 0 SECTOR 0 BOOTSTRAP EXISTS AT THE 
*  DESTINATION SYSTEM'S PHYSICAL LOCATION OF LOGICAL TRACK 0
*  SECTOR 0 
* 
      LDB BUFAD     READ(HOPEFULLY) THE TRACK 0,SECTOR 0
      STB BPTR       BOOTSTRAP
      CCE 
      CLA 
      JSB DISKD 
* 
      JSB VT0S0     VERIFY ITS EXISTENCE
      JMP NOTFS     NO GOOD 
* 
      LDA BF99        TBASE (WORD 100 OF BOOTSTRAP) IS THE
      CPA DFTR        PHYSICAL LOCATION (TRACK OR CYLINDER) OF
      RSS              TRACK 0 AT THE TARGET - MUST BE EQUAL
      JMP NOTFS        TO THAT OF DESTINATION TRACK 0 
* 
      LDA DEQT      FURTHER CHECKS FOR A 7905/7920 SYSTEM 
      SLA            REPLACEMENT
      JMP VOUT
* 
      LDA BF97        GET NUMBER OF SURFACES
      CPA DNSU      SAME AS DESTINATION?
      RSS 
      JMP NOTFS     NO
      LDA BF98        GET STARTING HEAD # 
      CPA DNHD      SAME AS DESTINATION?
      RSS 
      JMP NOTFS     NO
* 
VOUT  ISZ VFYSY     LOOKS VALID 
      JMP VFYSY,I 
      SPC 2 
* 
*  ONE OF THE ABOVE TESTS FAILED, THEREFORE NOT ALLOWING THE
*  TARGET FILE STRUCTURE TO BE SAVED
* 
NOTFS LDA TSBCH 
      LDB DEQT
      SLB,RSS 
      LDA TUNIT 
      ADA B2060 
      STA MES23+20
      LDA P1        SET FO CNVAS
      STA CLEN
      LDA TCH 
      LDB MS23A 
      JSB CNVAS 
      LDA P32 
      LDB MES23     "INFORMATION STORED ON SUBCHANNEL UNIT XX OF
      JSB DSPLY      TARGET CHANNEL YY WILL BE DESTROYED" 
      LDA P9
      LDB MS23B 
      JSB DSPLY 
* 
      JSB OK?       CHECK ANSWER
* 
      CLA 
      STA SAVE      DON'T SAVE FILES
      STA TYP6      "     "   PURGE TYPE 6'S
      JMP VFYSY,I 
* 
BF4   EQU BUFR+4
BF5   EQU BUFR+5
BF6   EQU BUFR+6
BF7   EQU BUFR+7
BF8   EQU BUFR+8
BF97  EQU BUFR+97 
BF98  EQU BUFR+98 
BF99  EQU BUFR+99 
BF124 EQU BUFR+124
      SKP 
* 
*  VERIFIES THE EXISTENCE OF A TRACK 0, SECTOR 0 BOOTSTRAP
* 
* 
*  RETURN: (P+1)  NOT A BOOTSTRAP 
*          (P+2)  YES, ONE EXISTS 
* 
VT0S0 NOP 
      LDB BPTR      CHECK MATCH ON WORDS 3,4,5(ALL SAME),6,7
      ADB P2
      LDA B,I        12,13,14,15,16 
      CPA WD345     WORD 3
      INB,RSS 
      JMP VT0S0,I   NO
      LDA B,I 
      CPA WD345     WORD 4
      INB,RSS 
      JMP VT0S0,I   NO
      LDA B,I 
      CPA WD345     WORD 5
      INB,RSS 
      JMP VT0S0,I   NO
      LDA B,I 
      CPA WD6       WORD 6
      INB,RSS 
      JMP VT0S0,I   NO
      LDA B,I 
      CPA WD7       WORD 7
      RSS 
      JMP VT0S0,I   NO
      ADB P5
      LDA B,I 
      CPA WD12      WORD 12 
      INB,RSS 
      JMP VT0S0,I   NO
      LDA B,I 
      CPA WD13      WORD 13 
      INB,RSS 
      JMP VT0S0,I   NO
      LDA B,I 
      CPA WD14      WORD 14 
      INB,RSS 
      JMP VT0S0,I   NO
      LDA B,I 
      CPA WD15      WORD 15 
      INB,RSS 
      JMP VT0S0,I   NO
      LDA B,I 
      CPA WD16      WORD 16 
      RSS 
      JMP VT0S0,I   NO
      ISZ VT0S0 
      JMP VT0S0,I   OK!!!!! 
      SPC 2 
WD345 OCT 017506    BOOTSTRAP WORDS 3,4,& 5 
WD6   OCT 124003        "     WORD 6
WD7   OCT 002011        "     WORD 7
WD12  OCT 003304        "     WORD 12 
WD13  OCT 040001        "     WORD 13 
WD14  OCT 005225        "     WORD 14 
WD15  OCT 106702        "     WORD 15 
WD16  OCT 106602        "     WORD 16 
      SKP 
* 
*    STDSK CONTROLS THE CALL TO CONFIGURE THE 
*    DISK DRIVER (EITHER DISK0 FOR 7900 OR DISK5
*    FOR 7905/7920), VIA A CALL TO STDS0 OR STDS5 
* 
STDSK NOP 
      LDA DEQT
      SLA 
      JMP STDS1 
      JSB STDS5     CONFIGURE THE 7905/7920 DRIVER
      JMP STDSK,I 
* 
STDS1 JSB STDS0     CONFIGURE THE 7900 DRIVER 
      JMP STDSK,I 
      SKP 
*     OK? QUERIES THE USER WITH:
*         "OK TO PROCEED? (Y OR N)" 
*     AND TRANSFERS TO XOUT ON A "N" RESPONSE,
*     DOING A SIMPLE RETURN ON A "Y" RESPONSE.
* 
OK?   NOP 
      LDA P12 
      LDB MES20 
      JSB DSPLY 
      JSB YE?NO     DECIPHER ANSWER 
      JMP OK?+1     INVALID REPLY 
      JMP XOUT      NO,TERMINATE SWTCH
      JMP OK?,I 
      SPC 4 
*    YE?NO READS THE OPERATOR ANSWER ( Y OR N ) 
*    RETURNS TO (P+1) IF INVALID ANSWER 
*               (P+2) IF NO 
*               (P+3) IF YES
* 
YE?NO NOP 
      JSB EXEC      RETRIEVE ANSWER 
      DEF *+5 
      DEF P1
      DEF OPLU
      DEF BUFR
      DEF N2
      SZB,RSS 
      JMP YE?NO+1   TRY AGAIN FOR A RESPONSE
* 
      CLE           CHECK HIGH HALF FIRST 
      LDA BUFR
YENO  ALF,ALF 
      AND B377
      CPA "N" 
      JMP NOUT
      CPA "Y" 
      JMP YOUT
* 
      SEZ           CHECK THE LOW HALF? 
      JMP YE?NO,I   ALREADY DID - NEITHER MATCHES 
      LDA BUFR      SWITCH EM 
      ALF,ALF 
      CCE 
      JMP YENO      CHECK THE LOW HALF
* 
YOUT  ISZ YE?NO 
NOUT  ISZ YE?NO 
      JMP YE?NO,I 
* 
"N"   OCT 116 
"Y"   OCT 131 
      SKP 
* 
*   CHECKS FOR A SPACE (PSEUDO CARRIAGE RETURN) FROM
*   THE OPERATOR. (B) IS THE LENGTH OF INPUT IN CHARACTERS
*       RETURN: (P+1)  NOT A SPACE
*               (P+2)  A SPACE (SO MAY USE DEFAULT VALUES)
* 
                                                                              