; ; PROGRAM: WHEEL ; VERSION: 3.0 ; AUTHOR: RICHARD CONN ; DATE: 8 MAR 84 ; PREVIOUS VERSIONS: 1.1 (24 JAN 83), 1.0 (14 Jan 83) ; vers equ 30 ; ; WHEEL is used to set and clear the WHEEL byte. It is invoked by ; one of the following forms: ; ; WHEEL // <-- Print Help ; WHEEL <-- Print Wheel Status ; WHEEL password SET <-- Set Wheel Byte ; WHEEL password <-- Set Wheel Byte ; WHEEL password RESET <-- Reset (Clear) Wheel Byte ; WHEEL /S or WHEEL /R <-- Set or Reset Wheel Byte ; (Type Password Later Sans Echo) ; ; ; CP/M Constants ; cpm equ 0 z3env SET 0f400h ; Environment Descriptor bdose equ cpm+5 pass equ cpm+5dh ; 1st FCB is password cmnd equ cpm+6dh ; 2nd FCB is command tbuff equ cpm+80h ctrlz equ 'Z'-'@' cr equ 0dh lf equ 0ah ; ; SYSLIB Routines ; ext print,caps,codend,inline,z3init,getwhl,putwhl,qprint ; ; Environment Definition ; if z3env ne 0 ; ; External ZCPR3 Environment Descriptor ; jmp start db 'Z3ENV' ;This is a ZCPR3 Utility db 1 ;External Environment Descriptor z3eadr: dw z3env start: lhld z3eadr ;pt to ZCPR3 environment ; else ; ; Internal ZCPR3 Environment Descriptor ; MACLIB Z3BASE.LIB MACLIB SYSENV.LIB z3eadr: jmp start SYSENV start: lxi h,z3eadr ;pt to ZCPR3 environment endif ; ; Start of Program -- Initialize ZCPR3 Environment ; call z3init ;initialize the ZCPR3 Env and the VLIB Env jmp start0 ; ; ** Wheel Password ** ; db ctrlz ;prevents reading via TYPE ppass: db 'SYSTEM ' ;Wheel Password (8 Chars) ; ; Print Banner ; start0: call qprint db 'WHEEL, Version ' db vers/10+'0','.',(vers mod 10)+'0',cr,lf,0 ; ; Begin Processing ; lda pass ; get password cpi ' ' ; help? jz pwhlstat cpi '/' jnz start1 lda pass+1 ; get option sta cmnd ; store command cpi 'R' ; reset? jz inpass cpi 'S' ; Set? jz inpass ; ; Print Help Message ; help: call print db cr,lf,' WHEEL is used to Set and Reset (Clear) the Wheel' db cr,lf,'Byte in order to enable (Wheel Byte is Set) or disable' db cr,lf,'(Wheel Byte is Reset) certain commands within ZCPR2.' db cr,lf db cr,lf,'The forms of the WHEEL command are:' db cr,lf,' WHEEL // <-- Print Help' db cr,lf,' WHEEL <-- Print Wheel Byte Setting' db cr,lf,' WHEEL password SET <-- Set Wheel Byte' db cr,lf,' WHEEL password <-- Set Wheel Byte' db cr,lf,' WHEEL password RESET <-- Reset (Clear) Wheel Byte' db cr,lf,' WHEEL /S or WHEEL /R <-- Set or Reset Wheel Byte' db cr,lf,' but allow user to type' db ' in password' db cr,lf,' without echo' db cr,lf,0 ret ; ; Print Wheel Byte Setting ; pwhlstat: call print db ' Wheel Byte is ',0 call getwhl ;get wheel byte pronoff: ora a ;0=off jz proff call print db 'ON',0 ret proff: call print db 'OFF',0 ret ; ; Input Password without echo and then process it ; inpass: call print db ' Wheel Password? ',0 call codend ; pt to scratch area xra a ; no echo call inline ; get line from user push h ; save ptr to first char mvi b,8 ; 8 chars inp1: mov a,m ; capitalize input call caps mov m,a inx h ; pt to next ora a ; done? jz inp2 dcr b ;count down jnz inp1 jmp inp4 inp2: dcx h ;pt to null mvi a,' ' ;space fill inp3: mov m,a ;store space inx h dcr b jnz inp3 inp4: pop h ; get ptr to first char jmp start2 ; ; Process Password ; start1: lxi h,pass ; pt to user password start2: lxi d,ppass ; pt to WHEEL password mvi b,8 ; 8 chars max passlp: ldax d ; get WHEEL password cmp m ; match? jnz nopass inx h ; pt to next inx d dcr b ; count down jnz passlp ; ; Password Approved ; lda cmnd ; check command cpi 'R' ; reset? jz reset ; ; Set Wheel Byte ; mvi a,0ffh ;set wheel byte call putwhl jmp pwhlstat ;print status ; ; Reset Wheel Byte ; reset: xra a ;reset wheel byte call putwhl jmp pwhlstat ;print status ; ; Password Not Approved ; nopass: call print db cr,lf,' Invalid Password',0 ret end