home *** CD-ROM | disk | FTP | other *** search
/ Programming Tool Box / SIMS_2.iso / bp_6_93 / vbdos / formdes / fd.bas < prev    next >
BASIC Source File  |  1993-01-05  |  2KB  |  71 lines

  1. OPTION EXPLICIT
  2. REM $INCLUDE: 'VBDOS.BI'
  3.  
  4. DIM Regs AS RegTypeX, Dummy AS INTEGER, ProgName AS STRING
  5. DIM Puffer AS STRING, Handle AS INTEGER, Nul AS INTEGER
  6. DIM DateiName AS STRING
  7.  
  8. ProgName = "FDEXE.EXE" + CHR$(0)
  9.  
  10. ' Datenübergabe für EXEC-Aufruf (INT 21) vorbereiten
  11. ' (ES und BX enthalten eigentlich die Adresse eines
  12. ' ganzen Parameterblocks, hier reicht aber die Adresse
  13. ' einer leeren INTEGER-Variablen aus)
  14. Regs.AX = &H4B00
  15. Regs.DS = SSEG(ProgName): Regs.DX = SADD(ProgName)
  16. Regs.ES = VARSEG(Dummy): Regs.BX = VARPTR(Dummy)
  17.  
  18. ' Far Heap freigeben, sonst klappt's nicht
  19. Dummy = SETMEM(-SETMEM(0)): Dummy = 0
  20.  
  21. ' Form-Designer aufrufen und Far Heap wieder reservieren
  22. InterruptX &H21, Regs, Regs: Dummy = SETMEM(SETMEM(0))
  23.  
  24. IF Regs.Flags AND 1 THEN ' Fehler!
  25.    SELECT CASE Regs.AX
  26.    CASE 2: PRINT ProgName; " nicht gefunden"
  27.    CASE 5: PRINT "Zugriff verweigert"
  28.    CASE 8: PRINT "Speicher zu knapp"
  29.    CASE ELSE: PRINT "Fehler beim Aufruf von "; ProgName; "."
  30.    END SELECT
  31.    PRINT "Drücken Sie eine Taste zum Fortfahren."; INPUT$(1)
  32.    SYSTEM
  33. END IF
  34.  
  35. ' Form-Designer ordnungsgemäß beendet. Jetzt herausfinden,
  36. ' welche Form bearbeitet wurde. VBDOS schreibt Handle
  37. ' einer geöffneten temporären Datei in Umgebungsvariable.
  38. Handle = VAL(ENVIRON$("_FD10_FH"))
  39.  
  40. ' Dateizeiger zurücksetzen...
  41. Regs.AX = &H4200: Regs.BX = Handle: Regs.CX = 0: Regs.DX = 4
  42. InterruptX &H21, Regs, Regs
  43.  
  44. ' ...und gesamte Datei (max 1000 Byte) ab Pos. 5 einlesen:
  45. Regs.AX = &H3F00: Regs.BX = Handle
  46. Regs.CX = 1000: Puffer = SPACE$(1000)
  47. Regs.DS = SSEG(Puffer): Regs.DX = SADD(Puffer)
  48. InterruptX &H21, Regs, Regs
  49.  
  50. IF Regs.Flags AND 1 THEN
  51.    PRINT "Fehler beim Einlesen der temporären Datei."
  52.    PRINT "Drücken Sie eine Taste zum Fortfahren."; INPUT$(1)
  53.    SYSTEM
  54. END IF
  55.  
  56. ' Datei enthält u.U. MAK- und FRM-Namen. FRM herausfiltern...
  57. Puffer = LEFT$(Puffer, Regs.AX)
  58. DO
  59.    Nul = INSTR(Puffer, CHR$(0))
  60.    IF Nul = 0 THEN
  61.       PRINT "Unbekanntes Format in temporärer Datei."
  62.       PRINT "Drücken Sie eine Taste zum Fortfahren."; INPUT$(1)
  63.       SYSTEM
  64.    END IF
  65.    DateiName = LEFT$(Puffer, Nul-1): Puffer = MID$(Puffer, Nul+1)
  66. LOOP UNTIL INSTR(DateiName, ".FRM")
  67.  
  68. ' ... schließlich FDMOD aufrufen. Hier kann SHELL verwendet
  69. ' werden, im Gegensatz zum empfindlichen FD-Aufruf oben.
  70. SHELL "FDMOD " + DateiName
  71.