               ORG 0100
               JMP MAIN
FILENAME       DB "SECURITY.SYS",0
FILENAME2      DB "NEWWORD.COM",0
HANDLE         DW ?                     ;for SECURITY.SYS
NUMBER         DB 08,0                  ;number of characters
NEW_WORD       DB "SeCuRiTy        ",0  ;password
MSG1           DB "Requires at least DOS 2.00$"
MSG2           DB "New PASSWORD not found.",0D,0A
               DB "Syntax:   NEWWORD [new password]"
               DB 0D,0A,"          Then Press ENTER."
               DB 0D,0A,"$"
MSG3           DB "This password has too many characters."
               DB 0D,0A,"$"
MSG4           DB "SECURITY.SYS not found in default directory."
               DB 0D,0A,"$"
MSG5           DB "SECURITY.SYS may be corrupted.",0D,0A,"$"
MSG6           DB "NEWWORD.COM is not hidden.",0D,0A,"$"
MSG6A          DB "NEWWORD.COM has been hidden.",0D,0A,"$"
MSG7           DB "The New Password has been installed.",0A
               DB 0D,0A,"Be sure that this modified SECURITY.SYS"
               DB 0D,0A,"is on the path defined in your"
               DB 0D,0A,"CONFIG.SYS file.",0D,0A,0A
               DB "Copyright 1992, by Robert Wallingford, P.E.",0D,0A
               DB "Version 2.00       2338 N. McVicker Avenue",0D,0A
               DB "                   Chicago, IL  60639-2216",0D,0A
               DB "Serial Number      318340928"
               DB 0D,0A,0A,"$"
TESTBUFF1:     DB 0FF,0FF,0FF,0FF,00,080,0A,00,015,00
TESTBUFF2:     DB 0B DUP 0
EXIT:          MOV AH,09                ;message with exit
               INT 021
               INT 020
EXT:           MOV AH,09                ;message with return
               INT 021
               RET
EXIT1:         MOV DX,OFFSET MSG1
               JMP EXIT
EXIT2:         MOV DX,OFFSET MSG2
               JMP EXIT
EXIT3:         MOV DX,OFFSET MSG3
               JMP EXIT
EXIT4:         MOV DX,OFFSET MSG4
               JMP EXIT
EXIT5:         MOV DX,OFFSET MSG5
               JMP EXIT
EXIT6:         MOV DX,OFFSET MSG6
               JMP EXT
EXIT7:         MOV DX,OFFSET MSG7
               JMP EXIT
MAIN:          CLD                      ;forward
               MOV AH,030               ;check DOS
               INT 021
               CMP AL,02
               JL EXIT1
               MOV NUMBER,0
               MOV SI,081               ;Point to command line parameter.
FIND_BYTE:     LODSB                    ;Get a byte.
               CMP AL,020
               JE FIND_BYTE             ;skip spaces before name
               CMP AL,0D                ;Carriage return marks end.
               JE EXIT2                 ;If end, done here.
               DEC SI
               PUSH SI
GET_NUMB:      LODSB                    ;count characters
               CMP AL,0D
               JE GOT_NUMB
               INC NUMBER
               CMP NUMBER,0E
               JE EXIT3
               JMP GET_NUMB
EX5:           JMP EXIT5
EX7:           JMP EXIT7
GOT_NUMB:      MOV CX,W[NUMBER]         ;move password
               POP SI                   ;from PSP
               MOV DI,OFFSET NEW_WORD   ;to offset
               REPNE MOVSB
               MOV AL,00
               STOSB
               MOV AH,03D               ;open SECURITY.SYS
               MOV AL,11000010b
               MOV DX,OFFSET FILENAME
               INT 021
               JC EXIT4
               MOV HANDLE,AX            ;save handle
               MOV AH,03F               ;check to be sure
               MOV BX,HANDLE            ;that SECURITY.SYS
               MOV CX,0A                ;is not some other
               MOV DX,OFFSET TESTBUFF2  ;file with the same
               INT 021                  ;name by reading
               MOV CX,0A                ;part of it to check
               MOV SI,OFFSET TESTBUFF1  ;for a match.
               MOV DI,OFFSET TESTBUFF2
               REPE CMPSB
               CMP CX,0
               JNE EX5
               MOV AX,04200             ;move pointer
               MOV BX,HANDLE
               MOV CX,00
               MOV DX,0102              ;to byte # 102h
               INT 021
               MOV AH,040               ;write number and
               MOV BX,HANDLE            ;password into the
               MOV CX,W[NUMBER]         ;file
               MOV DX,OFFSET NUMBER
               ADD CX,02
               INT 021
               MOV AH,03E               ;close file
               MOV BX,HANDLE
               INT 021
               MOV AX,04301             ;hide NEWWORD.COM
               MOV CX,022
               MOV DX,OFFSET FILENAME2
               INT 021
               JAE NXT1
               CALL EXIT6
               JMP NXT1A
NXT1:          MOV AH,09
               MOV DX,OFFSET MSG6A
               INT 021
NXT1A:         JMP EX7
