'===========================================================================
' Subject: GET CURRENT DRIVE/DIRECTORY        Date: 05-26-98 (17:00)       
'  Author: Leandro Pardini                    Code: QB, QBasic, PDS        
'  Origin: lpardini@cefex.com               Packet: DOS.ABC
'===========================================================================
'==========================================================================
'CurDrv$ and CurDir$ functions for QBASIC                       05-31-1998
'==========================================================================
'
'FUNCTION CurDrv$    Returns the current drive letter, uppercased.
'
'FUNCTION CurDir$    Returns the current directory on default drive.
'
'==========================================================================
'                                         | I like mail, so contact me for
'__________   ____---____                 | any  doubt or  suggestion  you
'\_________D /-/---_----'            LL&P | have for this/another program,
'       _H__/_/           Leandro Pardini | for  get my  last routines, to
'      '-_____|(       lpardini@cefex.com | chat  about  computers  and/or
'                                         | programming or to say "Hello".
'==========================================================================

'$STATIC
DEFINT A-Z

DECLARE FUNCTION CurDir$ ()
DECLARE FUNCTION CurDrv$ ()

'***** DEMO CODE STARTS HERE *****

PRINT "Current drive and directory: "; CurDrv$ + ":\" + CurDir$

'=======================<lpardini@cefex.com>=
' Get the current directory on default drive.
'============================================
FUNCTION CurDir$

DIM AsmProc AS STRING * 14
DIM AsmBuff AS STRING * 64

MID$(AsmProc, 1, 2) = CHR$(&HB4) + CHR$(&H47)               'MOV AH,47
MID$(AsmProc, 3, 2) = CHR$(&HB2) + CHR$(0)                  'MOV DL,00
MID$(AsmProc, 5, 3) = CHR$(&H68) + MKI$(VARSEG(AsmBuff))    'PUSH S:AsmBuff
MID$(AsmProc, 8, 1) = CHR$(&H1F)                            'POP DS
MID$(AsmProc, 9, 3) = CHR$(&HBE) + MKI$(VARPTR(AsmBuff))    'MOV SI,P:AsmBuff
MID$(AsmProc, 12, 2) = CHR$(&HCD) + CHR$(&H21)              'INT 21
MID$(AsmProc, 14, 1) = CHR$(&HCB)                           'RETF

DEF SEG = VARSEG(AsmProc)
   CALL ABSOLUTE(VARPTR(AsmProc))
DEF SEG

CurDir$ = LEFT$(AsmBuff, INSTR(AsmBuff, CHR$(0)) - 1)

END FUNCTION

'========================================================<lpardini@cefex.com>=
'Returns the current drive letter.
'=============================================================================
FUNCTION CurDrv$

DIM AsmProc AS STRING * 14
DIM AsmBuff AS STRING * 1

MID$(AsmProc, 1, 2) = CHR$(&HB4) + CHR$(&H19)               'MOV AH,19
MID$(AsmProc, 3, 2) = CHR$(&HCD) + CHR$(&H21)               'INT 21
MID$(AsmProc, 5, 2) = CHR$(4) + CHR$(&H41)                  'ADD AL,41
MID$(AsmProc, 7, 3) = CHR$(&H68) + MKI$(VARSEG(AsmBuff))    'PUSH S:AsmBuff
MID$(AsmProc, 10, 1) = CHR$(&H1F)                           'POP DS
MID$(AsmProc, 11, 3) = CHR$(&HA2) + MKI$(VARPTR(AsmBuff))   'MOV [AsmBuff],AL
MID$(AsmProc, 14, 1) = CHR$(&HCB)                           'RETF

DEF SEG = VARSEG(AsmProc)
   CALL ABSOLUTE(VARPTR(AsmProc))
DEF SEG

CurDrv$ = AsmBuff

END FUNCTION
