'**************************************************************************** ' ' Environment ver„ndern / Modify the environment ' fr/for PowerBASIC 3.0/3.2 ' ' Frei Kopierbar / Public Domain ' ' entwickelt von / developed by : Thomas Gohel ' Fido : Thomas Gohel@2:2410/330.1 ' InterNet: author@pbsound.snafu.de ' Homepage: http://www.snafu.de/~pbsound/ ' '**************************************************************************** $ERROR NUMERIC OFF CLS ENVIRON "PROMPT=" ' kill the old prompt AddEnviron("PROMPT=This is a demo for a new: " + CHR$(13,10) +"[PowerBASIC-SHELL] $p$g") SHELL ' demonstration END FUNCTION AddEnviron(Update$) public LOCAL PSPAdresse??, MemorySeg??, Mem16??, MemoryRest?? Carry% = 0 ' *** Adresse des PSP ermitteln / Find the PSP *** ! mov ax, &h6200 ! int &h21 ! mov PSPAdresse??, bx DEF SEG = PSPAdresse?? DEF SEG = CVI(PEEK$(&h2c,2)) ' *** Environment holen / Read environment *** FOR i% = 0 TO 1024 IF PEEK$(i%, 2) = CHR$(0,0) THEN EXIT FOR NEXT i% ' *** Environment modifizieren / modify *** OldEnv$ = PEEK$(0,i%) NewEnv$ = OldEnv$ + CHR$(0) + Update$ ' *** Holen des Programmnamen/pfad / Read Programname/path *** z% = i% Programmpath$ = "" FOR i% = z% TO 1024 IF PEEK$(i%, 4) = CHR$(0,0,1,0) THEN EXIT FOR NEXT i% WHILE PEEK(i% + 4) <> 0 Programmpath$ = Programmpath$ + CHR$(PEEK(i% + 4)) INCR i% WEND ' *** Enviroment fertigstellen / Create new environment *** NewEnv$ = NewEnv$ + CHR$(0,0,1,0) + Programmpath$ + CHR$(0) ' *** DOS-Speicher anfordern / Alloc DOS-Memory *** Mem16?? = CEIL(LEN(NewEnv$)/16) x& = SETMEM(-(Mem16??*16)-16) ! mov ax, &h4800 ! mov bx, Mem16?? ! int &h21 ! mov MemorySeg??, ax ! mov MemoryRest??, bx ! jnc MemoryOk Carry% = 1 MemoryOk: IF Carry% = 0 THEN ' *** Schreiben des Environment in den DOS-Speicher *** DEF SEG = MemorySeg?? POKE$ 0, NewEnv$ ' *** Patchen des PSP / Patch the PSP *** DEF SEG = PSPAdresse?? POKEI &h2c, MemorySeg?? DEF SEG ELSE BEEP PRINT "Ups??? nur:"; MemoryRest??*16; "Byte verfgbar" END IF END FUNCTION