; ; PROGRAM: WHEEL ; VERSION: 1.1 ; AUTHOR: RICHARD CONN ; DATE: 24 JAN 83 ; PREVIOUS VERSIONS: 1.0 (14 Jan 83) ; vers equ 11 ; ; WHEEL is used to set and clear the WHEEL byte. It is invoked by ; one of the following forms: ; ; WHEEL or WHEEL // <-- Print Help ; 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 bdose equ cpm+5 pass equ cpm+5dh ; 1st FCB is password cmnd equ cpm+6dh ; 2nd FCB is command tbuff equ cpm+80h cr equ 0dh lf equ 0ah ; ; SYSLIB Routines ; ext print,caps,codend,inline ; ; This program is Copyright (c) 1982, 1983 by Richard Conn ; All Rights Reserved ; ; ZCPR2 and its utilities, including this one, are released ; to the public domain. Anyone who wishes to USE them may do so with ; no strings attached. The author assumes no responsibility or ; liability for the use of ZCPR2 and its utilities. ; ; The author, Richard Conn, has sole rights to this program. ; ZCPR2 and its utilities may not be sold without the express, ; written permission of the author. ; ; ; Branch to Start of Program ; jmp start ; ;****************************************************************** ; ; SINSFORM -- ZCPR2 Utility Standard General Purpose Initialization Format ; ; This data block precisely defines the data format for ; initial features of a ZCPR2 system which are required for proper ; initialization of the ZCPR2-Specific Routines in SYSLIB. ; ; ; EXTERNAL PATH DATA ; EPAVAIL: DB 0FFH ; IS EXTERNAL PATH AVAILABLE? (0=NO, 0FFH=YES) EPADR: DW 40H ; ADDRESS OF EXTERNAL PATH IF AVAILABLE ; ; INTERNAL PATH DATA ; INTPATH: DB 0,0 ; DISK, USER FOR FIRST PATH ELEMENT ; DISK = 1 FOR A, '$' FOR CURRENT ; USER = NUMBER, '$' FOR CURRENT DB 0,0 DB 0,0 DB 0,0 DB 0,0 DB 0,0 DB 0,0 DB 0,0 ; DISK, USER FOR 8TH PATH ELEMENT DB 0 ; END OF PATH ; ; MULTIPLE COMMAND LINE BUFFER DATA ; MCAVAIL: DB 0FFH ; IS MULTIPLE COMMAND LINE BUFFER AVAILABLE? MCADR: DW 0FF00H ; ADDRESS OF MULTIPLE COMMAND LINE BUFFER IF AVAILABLE ; ; DISK/USER LIMITS ; MDISK: DB 4 ; MAXIMUM NUMBER OF DISKS MUSER: DB 31 ; MAXIMUM USER NUMBER ; ; FLAGS TO PERMIT LOG IN FOR DIFFERENT USER AREA OR DISK ; DOK: DB 0FFH ; ALLOW DISK CHANGE? (0=NO, 0FFH=YES) UOK: DB 0FFH ; ALLOW USER CHANGE? (0=NO, 0FFH=YES) ; ; PRIVILEGED USER DATA ; PUSER: DB 10 ; BEGINNING OF PRIVILEGED USER AREAS PPASS: DB 'chdir',0 ; PASSWORD FOR MOVING INTO PRIV USER AREAS DS 41-($-PPASS) ; 40 CHARS MAX IN BUFFER + 1 for ending NULL ; ; CURRENT USER/DISK INDICATOR ; CINDIC: DB '$' ; USUAL VALUE (FOR PATH EXPRESSIONS) ; ; DMA ADDRESS FOR DISK TRANSFERS ; DMADR: DW 80H ; TBUFF AREA ; ; NAMED DIRECTORY INFORMATION ; NDRADR: DW 00000H ; ADDRESS OF MEMORY-RESIDENT NAMED DIRECTORY NDNAMES: DB 64 ; MAX NUMBER OF DIRECTORY NAMES DNFILE: DB 'NAMES ' ; NAME OF DISK NAME FILE DB 'DIR' ; TYPE OF DISK NAME FILE ; ; REQUIREMENTS FLAGS ; EPREQD: DB 000H ; EXTERNAL PATH? MCREQD: DB 000H ; MULTIPLE COMMAND LINE? MXREQD: DB 000H ; MAX USER/DISK? UDREQD: DB 000H ; ALLOW USER/DISK CHANGE? PUREQD: DB 0FFH ; PRIVILEGED USER? CDREQD: DB 000H ; CURRENT INDIC AND DMA? NDREQD: DB 000H ; NAMED DIRECTORIES? Z2CLASS: DB 8 ; CLASS 8 DB 'ZCPR2' DS 10 ; RESERVED ; ; END OF SINSFORM -- STANDARD DEFAULT PARAMETER DATA ; ;****************************************************************** ; ; ; Special Value ; WHLADR: DW 0 ; ADDRESS OF WHEEL BYTE ; ; Start of Program ; start: call print db 'WHEEL Version ' db vers/10+'0','.',(vers mod 10)+'0',0 lda pass ; get password cpi ' ' ; help? jz help cpi '/' jnz start1 lda pass+1 ; get option sta cmnd ; store command cpi 'R' ; reset? jz inpass cpi 'S' ; Set? jz inpass 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 or WHEEL // <-- Print Help' 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 ; ; Input Password without echo and then process it ; inpass: call print db cr,lf,'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 inp1: mov a,m ; capitalize input call caps mov m,a inx h ; pt to next ora a ; done? jnz inp1 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 ora a ; done? jz passtst call caps ; capitalize cmp m ; match? jnz nopass inx h ; pt to next inx d dcr b ; count down jnz passlp jmp passit passtst: mov a,m ; must be space or null ora a ; null? jz passit cpi ' ' jnz nopass passit: lhld whladr ; get address of wheel byte lda cmnd ; check command cpi 'R' ; reset? jz reset mvi m,0ffh ; set wheel byte call print db cr,lf,'WHEEL Byte Set',0 ret reset: mvi m,0 ; reset wheel byte call print db cr,lf,'WHEEL Byte Reset',0 ret nopass: call print db cr,lf,'Invalid Password',0 ret end