;               U.COM - VERSION 1.0
;                       BY ROBERT FISHER
;                          November 27, 1981
;
;Select drive and user area with one command.
;
;Usage:
;       U B4
;will select drive B:, user area 4.
;
;The drive may be any valid drive letter in upper or lower case,
;and the user area may be any user area in the range 0-31.
;(But see the customization area below.)
;Either may be omitted.  If both are omitted, a usage message is printed.
;
;To be useful, this program must be accessable from all drives and
;all user areas.
;This is no problem if you are using one of the modified CCP's, but
;requires some other mechanism for a standare CCP.
;
;Check the public programs: DUPUSR21.ASM and CCPPATCH.ASM or the
;various versions of CCPZ.ASM
;
;One further note.  Your BIOS must be correctly written for this
;program to work.  Specifically, it must not reset the user area
;to zero on warm boot.  (The California Computer System BIOS
;fails in this respect.)
;
       org 100h
fcb     equ     5ch
bdos    equ     5
cdrive  equ     04
warmbt  equ     0
;
prstr   equ     9
;
tab     equ     9
lf      equ     0ah
cr      equ     0dh
;
;USER customization parameters
maxuser equ     15      ;maximum user area   (may be in range 0-31)
numdrvs equ     4       ;number of drives in your system
;
;set selected drive
       lxi     h,fcb+1
       mov     a,m
       cpi     ' '
       jz      usage   ;no parameters
       cpi     '9'+1
       jc      digit   ;no drive was specified
       ani     5fh     ;make it upper case
       sui     'A'
       jc      usage   ;illegal character
       cpi     numdrvs
       jnc     usage   ;too high a drive specified
       mov     e,a
       lda     cdrive  ;put new drive into lower nibble of cdrive
       ani     0f0h    ;zero out old drive number
       ora     e       ;slip the new drive in
       sta     cdrive  ;this sets the drive

;
;set selected user area
       inx     h
       mov     a,m
       cpi     ' '
       jz      warmbt  ;no user area specified
digit   sui     '0'
       jc      usage   ;non-digit
       cpi     10
       jnc     usage   ;non-digit
       mov     e,a     ;move it to e to preserve it
       inx     h
       mov     a,m
       cpi     ' '
       jz      setusr  ;one-digit user
       sui     '0'
       jc      usage   ;non-digit
       cpi     10
       jnc     usage   ;non-digit
       mov     c,a
       xra     a       ;clear the carry bit
       mov     a,e     ;get first digit back
       ral             ;x2
       mov     e,a
       ral             ;x4
       ral             ;x8
       add     e       ;x10
       add     c       ;add in second digit
       mov     e,a
;
setusr: mov     a,e     ;get it back if it's not there already
       cpi     maxuser+1
       jnc     usage
       cmc             ;clear the carry bit
;
;User area goes in upper nibble of cdrive.
       ral
       ral
       ral
       ral
       mov     c,a
       lda     cdrive
       ani     0fh     ;zero out old user number
       ora     c       ;slip in new user number
       sta     cdrive
;
;
       jmp     warmbt
;Print USAGE message if no parameters provided, or if parameters
;are illegal.
usage:  lxi     d,message
       mvi     c,prstr
       call    bdos
       ret

message db      'Drive and user selector: U.COM - Version 1.0',cr,lf
       db      tab,tab,tab,tab,'by Robert Fisher - November 27, 1981',cr,lf,lf
       db      'Sample usage:',cr,lf,lf
       db      tab,tab,'U B4',cr,lf,lf
       db      'selects drive B, user area 4.',cr,lf,lf
       db      tab,tab,'U 13',cr,lf,lf
       db      'selects user area 13 of the current drive.',cr,lf,lf
       db      tab,tab,'U B',cr,lf,lf
       db      'selects drive B, current user area.',cr,lf,lf
       db      'Lower case is acceptable for the drive letter.',cr,lf
       db      'The drive or the user area may be omitted.',cr,lf,lf
       db      '$'

       end