
                     * PAG
                     **********************************************************
                     *  PROT - FILE PROTECT UTILITY                   *
                     **********************************************************
                     * OPT PAG
                     *
                     * 'PROT' UTILITY COPYRIGHT (C), 1979 BY
                     *
                     *   TECHNICAL SYSTEMS CONSULTANTS, INC.
                     *   BOX 2570
                     *   WEST LAFAYETTE, INDIANA  47906
                     *   USA
                     
                     * BY FLD ON 26-11-2011 FOR VEGAS
                     * DISASSEMBLY BY DYNAMITE OF 1.PROT.CMD
                     
                     * STANDARD PRE-NAMED LABEL EQUATES
                     
               C840  SYSFCB  EQU    $C840
               CC02  EOLCHR  EQU    $CC02
               CC11  LSTTRM  EQU    $CC11
               CD03  WARMS   EQU    $CD03
               CD27  NXTCH   EQU    $CD27
               CD2D  GETFIL  EQU    $CD2D
               CD33  SETEXT  EQU    $CD33
               CD3F  RPTERR  EQU    $CD3F
               D406  FMS     EQU    $D406
                     
                     
  C100                       ORG    $C100
                     
  C100 20   05       CMDADR  BRA    PROT1     SKIP VERSION NUMBER
  C102 01                    FCB    $01       VERSION NUMBER
  C103 00            MEM1    FCB    $00       REMOVE PROTECTION
  C104 00            MEM2    FCB    $00       SET CATALOG PROTECT
  C105 00            MEM3    FCB    $00       SET WRITE PROTECT
  C106 00            MEM4    FCB    $00       SET DELETE PROTECT
  C107 8E   C840     PROT1   LDX    #SYSFCB   GET FCB ADRESS
  C10A BD   CD2D             JSR    GETFIL    GET FILE NAME
  C10D 24   03               BCC    PROT2     JUMP IF OK
  C10F 7E   C194             JMP    PROT13    JUMP ON ERROR
  C112 86   01       PROT2   LDA    #1        CODE FOR OPEN FOR READ
  C114 A7   84               STA    0,X       SET THE FCB
  C116 BD   CD33             JSR    SETEXT    SET THE TXT EXTENSION IF MISSING
  C119 BD   C1A8             JSR    PROT17    CHECK TERMINATOR
  C11C 26   03               BNE    PROT3     JUMP IF OK
  C11E 7E   C1A1             JMP    PROT16    JUMP IF NO COMMAND IS FOLLOWING 
  C121 8E   C840     PROT3   LDX    #SYSFCB   GET FCB ADRESS
  C124 BD   D406             JSR    FMS       CALL FMS
  C127 26   72               BNE    PROT15    JUMP ON ERROR
  C129 86   04               LDA    #4        CODE FOR CLOSE FILE
  C12B A7   84               STA    0,X       SET THE FCB
  C12D BD   D406             JSR    FMS       CALL FMS
  C130 26   69               BNE    PROT15    JUMP ON ERROR
  C132 BD   CD27             JSR    NXTCH     GET CHARACTER ON THE COMMAND LINE
  C135 25   6A               BCS    PROT16    JUMP IF NO COMMAND IS FOLLOWING
  C137 84   5F               ANDA   #$5F
  C139 81   57       PROT4   CMPA   #$57      COMPARE WITH W : SET WRITE PROTECT
  C13B 26   05               BNE    PROT5     JUMP IF NOT
  C13D 7C   C105             INC    MEM3      SET MEM3
  C140 20   19               BRA    PROT8     CONTINUE TESTING THE LINE
  C142 81   44       PROT5   CMPA   #$44      COMPARE WITH D : SET DELETE PROTECT
  C144 26   05               BNE    PROT6     JUMP IF NOT
  C146 7C   C106             INC    MEM4      SET MEM4
  C149 20   10               BRA    PROT8     CONTINUE TESTING THE LINE
  C14B 81   43       PROT6   CMPA   #$43      COMPARE WITH C : SET CATALOG PROTECT
  C14D 26   05               BNE    PROT7     JUMP IF NOT
  C14F 7C   C104             INC    MEM2      SET MEM2
  C152 20   07               BRA    PROT8     CONTINUE TESTING THE LINE
  C154 81   58       PROT7   CMPA   #$58      COMPARE WITH X : REMOVE PROTECTION
  C156 26   49               BNE    PROT16    JUMP IF NO COMMAND IS FOLLOWING 
  C158 7C   C103             INC    MEM1      SET MEM1
  C15B BD   CD27     PROT8   JSR    NXTCH     CONTINUE TESTING THE LINE
  C15E 24   D9               BCC    PROT4     CHARACTER DETECTED - TRY AGAIN 
 >C160 BD   C1A8             JSR    PROT17    CHECK TERMINATOR
  C163 26   3C               BNE    PROT16    JUMP ON ERROR IF NOT A TERMINATOR
  C165 8E   C840             LDX    #SYSFCB   GET FCB ADRESS
  C168 A6   0F               LDA    15,X      GET FILE ATTRIBUTE
  C16A 7D   C103             TST    MEM1      TEST REMOVE PROTECTION
  C16D 27   02               BEQ    PROT9     CONTINUE TESTING
  C16F 84   0F               ANDA   #$0F      CLEAR BITS 4 TO 7
  C171 7D   C105     PROT9   TST    MEM3      TEST SET WRITE PROTECT
  C174 27   02               BEQ    PROT10    CONTINUE TESTING
  C176 8A   80               ORA    #$80      SET BIT 7
  C178 7D   C106     PROT10  TST    MEM4      TEST SET DELETE PROTECT
  C17B 27   02               BEQ    PROT11    CONTINUE TESTING
  C17D 8A   40               ORA    #$40      SET BIT 6
  C17F 7D   C104     PROT11  TST    MEM2      TEST SET CATALOG PROTECT
  C182 27   02               BEQ    PROT12    FINISHED
  C184 8A   10               ORA    #$10      SET BIT 4
  C186 A7   0F       PROT12  STA    15,X      STORE FILE ATTRIBUTE
  C188 86   0B               LDA    #$0B      CALL FUNCTION $0B NOT DOCUMENTED
  C18A A7   84               STA    0,X       SET THE FCB
  C18C BD   D406             JSR    FMS       CALL FMS
  C18F 26   0A               BNE    PROT15    JUMP ON ERROR
  C191 7E   CD03             JMP    WARMS     ALL DONE
                     * ERROR CODE TREATMENT
  C194 8E   C840     PROT13  LDX    #SYSFCB
  C197 C6   15               LDB    #$15
  C199 E7   01       PROT14  STB    1,X
                     * ERROR DETECTED
  C19B BD   CD3F     PROT15  JSR    RPTERR    REPORT ERROR
  C19E 7E   CD03             JMP    WARMS     EXIT
                     * SYNTAX ERROR
  C1A1 8E   C840     PROT16  LDX    #SYSFCB
  C1A4 C6   1A               LDB    #$1A      CODE FOR SYNTAX ERROR
  C1A6 20   F1               BRA    PROT14
                     * CHECK TERMINATOR
  C1A8 B6   CC11     PROT17  LDA    LSTTRM    LOAD LAST TERMINATOR
  C1AB 81   0D               CMPA   #$0D      IS IT CR
  C1AD 27   03               BEQ    PROT18    JUMP IF YES
  C1AF B1   CC02             CMPA   EOLCHR    IS IT EOL ?
  C1B2 39            PROT18  RTS              RETURN
                     
                             END    CMDADR

0 ERROR(S) DETECTED

SYMBOL TABLE:

CMDADR C100   EOLCHR CC02   FMS    D406   GETFIL CD2D   LSTTRM CC11   
MEM1   C103   MEM2   C104   MEM3   C105   MEM4   C106   NXTCH  CD27   
PROT1  C107   PROT10 C178   PROT11 C17F   PROT12 C186   PROT13 C194   
PROT14 C199   PROT15 C19B   PROT16 C1A1   PROT17 C1A8   PROT18 C1B2   
PROT2  C112   PROT3  C121   PROT4  C139   PROT5  C142   PROT6  C14B   
PROT7  C154   PROT8  C15B   PROT9  C171   RPTERR CD3F   SETEXT CD33   
SYSFCB C840   WARMS  CD03   




