Need A Routine

 BBS: Inland Empire Archive
Date: 03-28-93 (12:05)             Number: 37
From: TOM HAMMOND                  Refer#: NONE
  To: SEAN SULLIVAN                 Recvd: NO  
Subj: Need A Routine                 Conf: (2) Quik_Bas
SS>I know I've seen a routine for determining the directory from which a
   program was launched, but can't remember where.  Anyone have this
   info?

Found this on the echo quite a while ago.  Hope it's (close to) that
which you seek.

Tom Hammond


' *************************************************************
' **                                                         **
' **  This program will read the TRUE program name from the  **
' **  Environment.  If you are executing a program called    **
' **  HELLO.EXE, and only typed HELLO at the command line,   **
' **  It would return the ENTIRE PATH of where HELLO.EXE is  **
' **  located.  If HELLO.EXE is in C:\DOS\BASIC\QB, the      **
' **  line returned from this program would be               **
' **  c:\dos\basic\qb\HELLO.EXE instead of just HELLO        **
' **                                                         **
' **  This program is basically a reprint from a very early  **
' **  Cobb Inside Microsoft Basic Journal, but can be used   **
' **  freely.  It is in the Public Domain.  No credit or     **
' **  other compensation is necessary or expected.           **
' **                                                         **
' **  This program should work with BOTH QuickBasic 4.5 and  **
' **  the Basic Professional Development System 7.xx         **
' **                                                         **
' *************************************************************

' ****  Below is the main program module  ************

DECLARE FUNCTION ProgramName$ ()
DEFINT A-Z

CONST FALSE = 0
CONST TRUE = -1

'PDS users should change the next line to include the QBX.BI file
'$INCLUDE: 'QB.BI'

CLS
PRINT "Program name = "; ProgramName$
END

' ****  Below is a FUNCTION that should be parsed by the QB ***
' ****  or QBX Environments.  *********************************

'=================== Function ProgramName$ ======================
'== INPUT: None                                                ==
'== RETURNS: Name of currently executing program               ==
'================================================================
'
FUNCTION ProgramName$

DIM Regs AS RegType

'Get PSP address

   Regs.ax = &H6200
   CALL Interrupt(&H21, Regs, Regs)
   PSPSegment = Regs.bx

'Find environment address from PSP

   DEF SEG = PSPSegment
   EnvSegment = PEEK(&H2D) * 256 + PEEK(&H2C)

'Find the filename

   DEF SEG = EnvSegment
   EOT = FALSE                 'Set end of environment table flag
   Offset = 0

   WHILE NOT EOT
      Byte = PEEK(Offset)       'Get table character
      IF Byte = 0 THEN          'End of environment string?
'        PRINT                   'Uncomment to print environment
         Offset = Offset + 1
         Byte = PEEK(Offset)
         IF Byte = 0 THEN        'End of environment?
           Offset = Offset + 3 'Yes - Skip over nulls & tbl info
           C% = PEEK(Offset)
           WHILE C% <> 0               'Assemble filename string
              FileN$ = FileN$ + CHR$(C%)    '  from individual
              Offset = Offset + 1           '  characters
              C% = PEEK(Offset)
           WEND
           EOT = TRUE              'Set flag to exit while/wend loop
         END IF
      ELSE                        'No-Read more environment string
'        PRINT CHR$(Byte);         'Uncomment to print environment
         Offset = Offset + 1
      END IF
   WEND
   ProgramName$ = FileN$
   DEF SEG
END FUNCTION

---
 * Origin: Night Shift BBS (314)635-7588 HST 14.4 (1:289/15)
Outer Court
Echo Basic Postings

Books at Amazon:

Back to BASIC: The History, Corruption, and Future of the Language

Hackers: Heroes of the Computer Revolution (including Tiny BASIC)

Go to: The Story of the Math Majors, Bridge Players, Engineers, Chess Wizards, Scientists and Iconoclasts who were the Hero Programmers of the Software Revolution

The Advent of the Algorithm: The Idea that Rules the World

Moths in the Machine: The Power and Perils of Programming

Mastering Visual Basic .NET