'=========================================================================== ' Subject: RETURN PROGRAM PATH & FILENAME Date: 03-14-98 (10:14) ' Author: Brian McLaughlin Code: PB ' Origin: alt.lang.powerbasic Packet: PB.ABC '=========================================================================== 'The code below will retrieve the full path and name of your 'program, while it is running. This is not only useful to 'establish where your user installed your program, but also 'guards against the user renaming your program. I have used it 'to locate the CFG (configuration) file for my programs, by 'making it a rule that CFG files must be in the same directory 'as the EXE file. The CFG file then tells me where the data files 'are located. I am releasing the code to the public domain. $LIB ALL OFF DECLARE FUNCTION ProgName$ () 'Demo code --------------------------------------------------------- PRINT "The currently running program is "; ProgName$ PRINT PRINT " NOTE: When run in PB.EXE, this will print [path\] PB.EXE. " '------------------------------------------------------------------- '=================== FUNCTION ProgName$ '=================== ' This function returns the name, under which the currently running ' program was started up. Requires DOS 3.3 or better. DIM NSeg AS LOCAL WORD DIM NOff AS LOCAL WORD DIM Prog AS LOCAL STRING Prog = SPACE$(65) NSeg = STRSEG(Prog) NOff = STRPTR(Prog) ASM Push DS ASM Push SI ASM Mov AX, &H6200 ASM Int &H21 ASM Mov DS, BX ; point DS at PSP segment ASM Mov BX, &H2C ASM Mov AX, [BX] ASM Mov DS, AX ASM Xor SI, SI ; points DS:SI at first byte of environment ContinueSearch: ASM Lodsb ; get one byte from environment ASM Or AL, AL ; look for a single null char ASM Jnz ContinueSearch ; if not null, continue ASM Lodsb ; look at next char ASM Or AL, AL ; is it null, too? ASM Jnz ContinueSearch ; if not null, continue ASM Add SI, 4 ; DS:SI points at program name ASM Mov AX, NSeg ASM Mov ES, AX ASM Mov BX, NOff ; ES:BX points to Prog LoadName: ASM Lodsb ASM Or AL, AL ASM Jz NameLoaded ASM Mov Byte Ptr ES:[BX], AL ASM Inc BX ASM Jmp LoadName NameLoaded: ASM Pop SI ASM Pop DS ProgName$ = RTRIM$(Prog$) END FUNCTION