QB:llä voi selvittää kansion nimen, mutta miten se käytännössä tapahtuu?
Minkä kansion nimi täytyy saada selville?
Sen kansion missä ohjelmaa suoritetaan
EDIT: Olen meinaan tekemässä Last Powerful Chaosiin Suojausjärjestelmää :)
Eli siis että vaikka jos ajetaan ohjelma kansiossa minkä nimi on testi nii se ohjelma tallentaa muuttujaan sen kansion nimen.
Muistaakseni CURDIR$ palauttaa valitun hakemiston, jonka pitäisi ainakin ohjelman käynnistyshetkellä olla käynnistyshakemisto. Siitä sen voisi siis napata alussa talteen. En muista, missä QB:n versioissa CURDIR$ toimii, vai toimiiko peräti kaikissa.
Curdir ilmeisesti tuli versiossa BC 7.1 mukaan kuvioihin. Sitä vanhemmissa sen saa keskeytyksellä selville. (esimerkki)
Luin ensin että haettiin hakemistoa jossa suoritettava ohjelma sijaitsee. Sen selvittäminen onnistuisi seuraavalla koodilla:
Microsoft article Q43560 kirjoitti:
DOCUMENT:Q43560 15-JAN-1991 [B_QUICKBAS]
TITLE :Getting Full EXEC Pathname from Environment Table Using PSPThis information applies to Microsoft QuickBASIC versions 4.00, 4.00b,
and 4.50, to Microsoft BASIC Compiler versions 6.00 and 6.00b for
MS-DOS, and to Microsoft BASIC Professional Development System (PDS)
versions 7.00 and 7.10.'Compile and link lines: ' BC FULLPATH; ' LINK FULLPATH,,,QB.LIB; NOTE: QBX.LIB should be used for PDS ' 7.00 or 7.10 '$INCLUDE: 'qb.bi' ' NOTE: QBX.BI should be used for PDS 7.00/7.10 DECLARE FUNCTION FullPath$ () CONST EnvOffInPSP = &H2C PRINT FullPath$ FUNCTION FullPath$ DIM inregs AS RegType, OutRegs AS RegType inregs.ax = &H6200 'Get PSP CALL INTERRUPT(&H21, inregs, OutRegs) PSPSeg% = OutRegs.bx EnvironSeg& = 0 OffSet& = 0 tmp$ = "" DEF SEG = PSPSeg% EnvironSeg& = 256 * PEEK(EnvOffInPSP + 1) + PEEK(EnvOffInPSP) DEF SEG = EnvironSeg& WHILE (PEEK(OffSet&) <> 0 OR PEEK(OffSet& + 1) <> 0) OffSet& = OffSet& + 1 WEND 'Skip extra bytes between Env Table and Fullpath OffSet& = OffSet& + 4 'Build FullPath$ (until null terminates string) WHILE PEEK(OffSet&) <> 0 tmp$ = tmp$ + CHR$(PEEK(OffSet&)) OffSet& = OffSet& + 1 WEND DEF SEG FullPath$ = tmp$ END FUNCTION
Aihe on jo aika vanha, joten et voi enää vastata siihen.