home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Programming Tool Box
/
SIMS_2.iso
/
bp_6_93
/
vbdos
/
formdes
/
fd.bas
< prev
next >
Wrap
BASIC Source File
|
1993-01-05
|
2KB
|
71 lines
OPTION EXPLICIT
REM $INCLUDE: 'VBDOS.BI'
DIM Regs AS RegTypeX, Dummy AS INTEGER, ProgName AS STRING
DIM Puffer AS STRING, Handle AS INTEGER, Nul AS INTEGER
DIM DateiName AS STRING
ProgName = "FDEXE.EXE" + CHR$(0)
' Datenübergabe für EXEC-Aufruf (INT 21) vorbereiten
' (ES und BX enthalten eigentlich die Adresse eines
' ganzen Parameterblocks, hier reicht aber die Adresse
' einer leeren INTEGER-Variablen aus)
Regs.AX = &H4B00
Regs.DS = SSEG(ProgName): Regs.DX = SADD(ProgName)
Regs.ES = VARSEG(Dummy): Regs.BX = VARPTR(Dummy)
' Far Heap freigeben, sonst klappt's nicht
Dummy = SETMEM(-SETMEM(0)): Dummy = 0
' Form-Designer aufrufen und Far Heap wieder reservieren
InterruptX &H21, Regs, Regs: Dummy = SETMEM(SETMEM(0))
IF Regs.Flags AND 1 THEN ' Fehler!
SELECT CASE Regs.AX
CASE 2: PRINT ProgName; " nicht gefunden"
CASE 5: PRINT "Zugriff verweigert"
CASE 8: PRINT "Speicher zu knapp"
CASE ELSE: PRINT "Fehler beim Aufruf von "; ProgName; "."
END SELECT
PRINT "Drücken Sie eine Taste zum Fortfahren."; INPUT$(1)
SYSTEM
END IF
' Form-Designer ordnungsgemäß beendet. Jetzt herausfinden,
' welche Form bearbeitet wurde. VBDOS schreibt Handle
' einer geöffneten temporären Datei in Umgebungsvariable.
Handle = VAL(ENVIRON$("_FD10_FH"))
' Dateizeiger zurücksetzen...
Regs.AX = &H4200: Regs.BX = Handle: Regs.CX = 0: Regs.DX = 4
InterruptX &H21, Regs, Regs
' ...und gesamte Datei (max 1000 Byte) ab Pos. 5 einlesen:
Regs.AX = &H3F00: Regs.BX = Handle
Regs.CX = 1000: Puffer = SPACE$(1000)
Regs.DS = SSEG(Puffer): Regs.DX = SADD(Puffer)
InterruptX &H21, Regs, Regs
IF Regs.Flags AND 1 THEN
PRINT "Fehler beim Einlesen der temporären Datei."
PRINT "Drücken Sie eine Taste zum Fortfahren."; INPUT$(1)
SYSTEM
END IF
' Datei enthält u.U. MAK- und FRM-Namen. FRM herausfiltern...
Puffer = LEFT$(Puffer, Regs.AX)
DO
Nul = INSTR(Puffer, CHR$(0))
IF Nul = 0 THEN
PRINT "Unbekanntes Format in temporärer Datei."
PRINT "Drücken Sie eine Taste zum Fortfahren."; INPUT$(1)
SYSTEM
END IF
DateiName = LEFT$(Puffer, Nul-1): Puffer = MID$(Puffer, Nul+1)
LOOP UNTIL INSTR(DateiName, ".FRM")
' ... schließlich FDMOD aufrufen. Hier kann SHELL verwendet
' werden, im Gegensatz zum empfindlichen FD-Aufruf oben.
SHELL "FDMOD " + DateiName