; ; Program: PWD ; Author: Richard Conn ; Version: 1.0 ; Date: 5 Mar 84 ; version equ 10 ; ; The purpose of PWD is to display the names of the named directories. ; If the option PASS (P) is given, then the passwords to the directories will ; be displayed as well IF the Wheel Byte is Available and Set. If the Wheel ; Byte is not available, the passwords will be displayed without question. ; ; ; Basic Equates ; z3env SET 0f400h ;address of ZCPR3 Environment fcb equ 5ch cr equ 0dh lf equ 0ah ; ; External References ; ext z3init ext cout,crlf,print,padc ext qprint,qcrlf ext getndr,getwhl ; ; 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 ; ; Print Banner ; call qprint ;check quiet flag db 'PWD, Version ' db (version/10)+'0','.',(version mod 10)+'0' db cr,lf,0 ; ; Check for options ; lxi h,fcb+1 ;pt to option char mov a,m ;get option char cpi '/' ;help? jz prhelp cpi ' ' ;no option? jz namedir cpi 'P' ;passwords? jnz invopt ;bad option if not ; ; Prepare to process passwords - check for authorization ; call getwhl ;get wheel byte jnz namedir ;permission granted call print db ' Password Request Denied - Not Wheel',cr,lf,0 mvi m,' ' ;clear option ; ; Print Named Directory Info ; namedir: call getndr ;get location of directory jnz ndir1 call print db ' Named Directory Buffer Not Available',0 ret ; ; Print Names of Directory Elements ; ndir1: lda fcb+1 ;see if passwords included cpi 'P' jz ndir1p ; ; Print Header if Not Quiet for Non-Password Entries ; mvi b,4 ;4 times ndir1a: call qprint ;print banner (optional) db ' DU : DIR Name ',0 dcr b ;count down jnz ndir1a call qcrlf ;new line mvi b,4 ;4 more times ndir1b: call qprint db '---- -------- ',0 dcr b ;count down jnz ndir1b call qcrlf ;new line jmp ndir1z ; ; Print Header if Not Quiet for Password Entries ; ndir1p: mvi b,2 ;2 times ndir1c: call qprint db ' DU : DIR Name - Password ',0 dcr b ;count down jnz ndir1c call qcrlf mvi b,2 ndir1d: call qprint db '---- -------- -------- ',0 dcr b ;count down jnz ndir1d call qcrlf ; ; Begin Output Processing ; ndir1z: mvi c,0 ;set entry count mvi b,1 ;set disk 1 ; ; Print Each Resident Command Name ; ndir2: mov a,m ;get table entry ora a ;end of table? rz ;exit cmp b ;same disk? jz ndir3 ; ; Advance to Next Set of Entries for New Disk ; mov b,a ;set new disk mov a,c ;get count ani 3 ;see if newline already given cnz crlf ;complete current line call crlf ;1 additional line mvi c,0 ;reset count ndir3: push b ;save counters ; ; Print DU: ; mov a,m ;get disk adi '@' ;convert to letter (A to P) call cout inx h ;pt to user mov a,m ;get user call padc ;print user number call print ;print separator db ': ',0 inx h ;pt to name ; ; Print DIR ; call prname ;print name of directory lda fcb+1 ;check for password option cpi 'P' jnz ndir4 call print db ' - ',0 call prname ;print name of password pop b ;get counters inr c ;another entry push b ;save counters jmp ndir5 ; ; Advance to Next and Print Separator ; ndir4: lxi b,8 ;skip over password dad b ; ; Print Separator ; ndir5: call print ;print separator db ' ',0 pop b ;get counters ; ; New Line Counter ; inr c ;increment entry counter mov a,c ;check for done ani 3 ;every 4 cz crlf ;new line jmp ndir2 ; ; Print 8-char name (directory or password) and advance ptr ; prname: mvi b,8 ;print name prn1: mov a,m ;get char call cout inx h ;pt to next dcr b ;count down jnz prn1 ret ; ; Print Invalid Option and then Help Messages ; invopt: call print db cr,lf,'Invalid Option',cr,lf,0 ;fall thru to PRHELP ; ; Print Help Message ; prhelp: call print db cr,lf,'PWD - Print Working Directories',cr,lf db cr,lf,'PWD Syntax:' db cr,lf,' PWD or PWD P' db cr,lf db cr,lf,'where just "PWD" prints the names of the directories' db cr,lf,'and "PWD P" (for PWD PASSWORD) prints the names and' db cr,lf,'passwords of the directories if the user has Wheel' db cr,lf,'Powers',0 ret end