Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Kansion nimi (QB)

Codeprofile [17.05.2007 14:34:17]

#

QB:llä voi selvittää kansion nimen, mutta miten se käytännössä tapahtuu?

Antti Laaksonen [17.05.2007 14:35:20]

#

Minkä kansion nimi täytyy saada selville?

Codeprofile [17.05.2007 14:42:06]

#

Sen kansion missä ohjelmaa suoritetaan

EDIT: Olen meinaan tekemässä Last Powerful Chaosiin Suojausjärjestelmää :)

Codeprofile [17.05.2007 18:47:29]

#

Eli siis että vaikka jos ajetaan ohjelma kansiossa minkä nimi on testi nii se ohjelma tallentaa muuttujaan sen kansion nimen.

hunajavohveli [17.05.2007 19:27:22]

#

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.

Grez [17.05.2007 19:44:25]

#

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 PSP

This 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

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta