home *** CD-ROM | disk | FTP | other *** search
/ High Voltage Shareware / high1.zip / high1 / DIR3 / EXEC33B.ZIP / LIESMICH.DOC < prev    next >
Text File  |  1993-11-29  |  23KB  |  512 lines

  1.  
  2.               Eine EXEC Funktion mit Speicherauslagerung
  3.                   Version 3.3b, Freigegeben 93-11-29
  4.       
  5.                       Public Domain Software von
  6.                             Thomas Wagner
  7.                        Ferrari electronic GmbH
  8.                 (Achtung Adressänderung, siehe unten!)
  9.  
  10.  
  11. Dieses Archiv enthält die Quellen für eine 'EXEC'-Funktion die den
  12. Aufruf externer Programme erlaubt, wobei der Programmspeicher
  13. optional auf EMS, XMS, oder Datei ausgelagert wird. Bei Auslagerung
  14. des Speichers werden nur noch wenige K des Hauptspeichers belegt
  15. während das externe Programm ausgeführt wird. Der Code/Daten-Bereich
  16. beträgt etwa 1k, der benötigte Speicherplatz ist abhängig von der
  17. Speicherfragmentierung, sowie besonders von der Größe des
  18. Umgebungsvariablenblocks. Üblicherweise werden zwischen 2K und 7K
  19. belegt.
  20.  
  21. Die Routinen sind kompatibel mit 
  22.    Turbo C (Versionen 1.x, 2.x, sowie C++ 1.0)
  23.    Borland C++ (Version 2.0 und höher),
  24.    Microsoft C (Versionen 5.1 und höher), 
  25.    Watcom C (Version 8.0), 
  26.    Turbo Pascal (Versionen 4.x bis 6.x). 
  27.  
  28. EMS (LIM 3.0 und spätere Versionen) oder XMS werden benutzt sofern
  29. ausreichend Platz zur Verfügung steht. Wenn nicht, wird eine
  30. temporäre Plattendatei angelegt. Diese Datei wird in dem durch die
  31. Umgebungsvariablen TEMP= oder TMP= gegebenen Pfad angelegt. Ist kein
  32. solcher Pfad angegeben, wird der aktuelle Pfad benutzt.
  33.  
  34. Aufruf und Parameterversorgung sind in der Datei "exec.h" (C) bzw.
  35. "exec.pas" (Pascal) detailliert dokumentiert.
  36.  
  37. Das allgemeine Format ist
  38.  
  39.    retcode = do_exec (Name des auszuführenden Programms,
  40.                       Programm-Parameter und Redirection String,
  41.                       Spawn-Optionen,
  42.                       Benötigter Speicher (0xffff lagert stets aus, 0 nie),
  43.                       Umgebungsvariablen-Zeiger/Flag)
  44.  
  45. zum Beispiel:
  46.  
  47.    rc = do_exec ("cl", "-c -Od exec.c >&errout", USE_ALL, 0xffff, NULL);
  48.  
  49. oder, für Pascal:
  50.  
  51.    rc := do_exec ('tpc', '/$D+ exec >&errout', USE_ALL, $ffff, false);
  52.  
  53. Redirection für Standard Input, Standard Output, und Standard Error
  54. wird optional behandelt indem der Parameter-String nach den folgenden
  55. Kombinationen durchsucht wird:
  56.  
  57.    stdin:   <file
  58.    stdout:  >file    oder >>file   zum Anfügen
  59.    stderr:  >&file   oder >&>file  zum Anfügen
  60.  
  61. Redirection wird standardmäßig unterstützt. Um sie auszuschalten,
  62. müssen Sie die Definitionen sowohl in spawn.asm als auch in
  63. exec.c/exec.pas ändern.
  64.  
  65. Wenn das auszuführende Kommando eine Batch-Datei ist, wird
  66. automatisch der Kommando-Prozessor aufgerufen. Der Kommandoprozessor
  67. wird auch aufgerufen wenn das Kommando leer ist. Dabei wird die
  68. COMSPEC-Umgebungsvariable benutzt um den Kommandoprozessor zu finden,
  69. zusätzliche Parameter in der COMSPEC-Zeile werden in die
  70. Kommandoparameter eingefügt.
  71.  
  72. Zum Beispiel:
  73.  
  74.    Es sei  COMSPEC=C:\DOS\COMMAND.COM /E:960
  75.            PATH=C:\DOS;C:\CMD
  76.            Datei B.BAT existiert in C:\CMD
  77.            do_exec wird aufgerufen mit ('b', 'eins zwei >out', ...)
  78.  
  79.    Dann ist das aufgerufene Kommando
  80.            C:\DOS\COMMAND.COM
  81.    mit dem Parameter-String
  82.            /E:720 /C C:\CMD\B.BAT eins zwei
  83.    und Standard Output wird umgeleitet auf die Datei 'out'.
  84.  
  85.  
  86.  
  87.                         INHALT
  88.                         ======
  89.  
  90. Dieses Archiv enthält die folgenden Dateien:
  91.  
  92.     LIESMICH.DOC    Diese Datei
  93.     README.DOC      Englische Version dieser Datei
  94.  
  95.     GETLANG.EXE     Ein Hilfsprogramm zur Extraktion einer ein-
  96.                     sprachigen Version aus der zweisprachigen
  97.                     Quelle.
  98.                     Alle C- und Assembler-Quellen (die Pascal-Quellen
  99.                     leider nur teilweise) sind sowohl in Deutsch als
  100.                     auch in Englisch dokumentiert, was die Quellen
  101.                     schwer lesbar macht. Für bessere Lesbarkeit
  102.                     können Sie mit GETLANG eine der Sprachen
  103.                     eliminieren.
  104.  
  105.          Benutzung:  GETLANG Sprache Compiler <Eingabe >Ausgabe
  106.             wobei    Sprache   'E' für Englisch oder 'D' für Deutsch
  107.                      Compiler  'C' für C Dateien, 'A' für Assembler,
  108.                                'P' für Pascal.
  109.  
  110.          Beispiele:  GETLANG d a <spawn.asm >spawnd.asm
  111.                      GETLANG d c <extest.c >extestd.c
  112.  
  113.     DEUTSCH.BAT     Batch-File zur Ausführung von GETLANG für alle
  114.                     Quelldateien, deutsche Version
  115.     ENGLISH.BAT     Batch-File zur Ausführung von GETLANG für alle
  116.                     Quelldateien, englische Version
  117.  
  118.     SPAWN.ASM       Die Hauptfunktion für exec.
  119.  
  120.         Diese Datei ist für die C und Pascal Versionen gleich.
  121.         Für Benutzung mit Turbo Pascal muß mit dem Turbo-Assembler 
  122.         assembliert werden. Die C Version kann mit TASM (geben Sie
  123.         /JMASM51 an) oder MASM 5.1 übersetzt werden.
  124.  
  125.         Assemblieren mit:
  126.             tasm /DPASCAL spawn,spawnp;     Für Turbo Pascal, near calls
  127.             tasm /DPASCAL /DFARCALL spawn,spawnp;  
  128.                                             Für Turbo Pascal, far calls
  129.             ?asm spawn;                     Für C (Default small model)
  130.             ?asm /DMODL=xxx spawn;          For C (model 'xxx')
  131.          Beispiel:
  132.             masm /DMODL=large spawn;            Large model C
  133.             tasm /DMODL=medium /JMASM51 spawn;  Medium model C
  134.  
  135.     SPAWNP.OBJ      SPAWN assembliert für Pascal, near calls
  136.     SPAWNCS.OBJ     SPAWN assembliert für C (small model)
  137.     SPAWNCL.OBJ     SPAWN assembliert für C (large model)
  138.         
  139.         Die C Dateien wurden mit dem /MX-Schalter übersetzt um
  140.         Groß-/Kleinschreibung beim Linken zu berücksichtigen.
  141.  
  142.         Hinweis für Turbo Pascal: Sie können die "near call" Version
  143.         von SPAWN auch dann nutzen wenn Sie mit "force far calls"
  144.         kompilieren, indem Sie die "external"-Definitionen von
  145.         do_spawn und prep_swap in Datei exec.pas in {$F-} und {$F+} 
  146.         einschließen.
  147.         Um Konfusion bei der Verwendung mehrerer Compiler zu
  148.         vermeiden, wurde das Pascal-Object "spawnp.obj" benannt.
  149.  
  150.     CHECKPAT.ASM   Hilfsfunktion zur Prüfung und Auflösung eines Pfades
  151.  
  152.         Diese Datei ist für die C und Pascal Versionen gleich.
  153.         Für Benutzung mit Turbo Pascal muß mit dem Turbo-Assembler 
  154.         assembliert werden. Die C Version kann mit TASM (geben Sie
  155.         /JMASM51 an) oder MASM 5.1 übersetzt werden.
  156.  
  157.         Assemblieren mit:
  158.             tasm /DPASCAL checkpat,checkpap;  Für Turbo Pascal, near calls
  159.             tasm /DPASCAL /DFARCALL checkpat,checkpap;  
  160.                                               Für Turbo Pascal, far calls
  161.             ?asm checkpat;                    Für C (Default small model)
  162.             ?asm /DMODL=xxx checkpat;         Für C (model 'xxx')
  163.          Beispiel:
  164.             masm /DMODL=large checkpat;            Large model C
  165.             tasm /DMODL=medium /JMASM51 checkpat;  Medium model C
  166.  
  167.     CHECKPAP.OBJ    CHECKPAT assembliert für Pascal, far calls
  168.     CHECKPCS.OBJ    CHECKPAT assembliert für C (small model)
  169.     CHECKPCL.OBJ    CHECKPAT assembliert für C (large model)
  170.     CHECKPAT.PAS    Einbindungs-Unit für checkpat (Nur Pascal)   
  171.  
  172.         Die C Dateien wurden mit dem /MX-Schalter übersetzt um
  173.         Groß-/Kleinschreibung beim Linken zu berücksichtigen.
  174.         Die Pascal-Version muß mit dem FARCALL-Schalter assembliert
  175.         werden wenn Sie sie mit der Einbindungs-Unit CHECKPAT.PAS
  176.         zusammen benutzen. Zumindest Turbo Pascal Version 5.5
  177.         verwendet offenbar stets einen Far Call wenn eine externe
  178.         Routine im Interface-Teil einer Unit definiert wird.
  179.  
  180.     EXEC.PAS        Interface Routinen und Dokumentation für Turbo Pascal
  181.     EXEC.C          Interface Routinen für C
  182.     EXEC.H          Interface Definitionen und Dokumentation für C
  183.     COMPAT.H        MS-C/TC Kompatibilitäts-Definitionen für C
  184.  
  185.         Diese Dateien bereiten die Parameter für die Hauptfunktion
  186.         vor und bearbeiten die Datei-Suche und Umgebungsvariablen.
  187.  
  188.     EXTEST.C        C Test-Programm für EXEC
  189.     EXTEST.PAS      Turbo Pascal Test-Programm für EXEC
  190.  
  191.         Das EXTEST Programm testet die Funktionalität der do_exec
  192.         Funktion. Es erwartet die Eingabe eines DOS-Kommandos und,
  193.         durch Komma getrennt, seiner Parameter. Die Eingabe einer
  194.         Leerzeile startet COMMAND.COM ohne Parameter.
  195.  
  196.    MAKEPAS          Make-Datei für Turbo Pascal (Borland Make) 
  197.    MAKETC           Make-Datei für Borland C++ (Borland Make) 
  198.    MAKEMS           Make-Datei für Microsoft C (MS NMAKE) 
  199.  
  200.  
  201. Die Turbo Pascal Version von EXEC.PAS enthält Ersatzfunktionen für
  202. die Umgebungsvariablen-Zugriffsfunktionen 'envcount', 'envstr', und
  203. 'getenv', sowie eine zusätzliche Funktion 'putenv'. Diese Funktion
  204. erlaubt Ihnen, zur Umgebung des gerufenen Programms Strings
  205. hinzuzufügen. Die Definition ist
  206.  
  207.         procedure putenv (envvar: string);
  208.  
  209. wobei 'envstr' einen String der Form 'ENVVAR=wert' enthält. Das '='
  210. ist notwendig. Um einen Umgebungsvariablenstring zu löschen geben Sie
  211. 'ENVVAR=' an. Bitte nutzen Sie nur die Funktionen aus der EXEC Unit,
  212. mischen Sie sie nicht mit Aufrufen der Funktionen der DOS Unit.
  213.  
  214.  
  215.                         SUPPORT
  216.                         =======
  217.  
  218. Diese Software ist "Public Domain", das heißt es gibt keinerlei
  219. Einschränkungen bezüglich ihrer Nutzung, ob privat oder in
  220. kommerziellen Produkten. Es ist weder eine Registrierungsgebühr zu
  221. zahlen, noch sind zur Nutzung irgendwelche Lizenzen erforderlich.
  222.  
  223. Dies heißt allerdings auch, daß der Autor zu keiner Leistung
  224. gegenüber dem Nutzer verpflichtet ist. Jegliche Ansprüche auf
  225. Schadenersatz bei Fehlfunktionen sind ausgeschlossen. Sie haben die
  226. Quellen, bitte prüfen Sie sie vor Nutzung.
  227.  
  228. Ich möchte auch um Verständnis bitten, daß ich nicht in der Lage bin,
  229. kostenlose Programmierberatung zu erteilen, Spezialversionen für
  230. exotische Compiler zu erstellen, oder neue Versionen dieses Programms
  231. kostenlos zu versenden. 
  232.  
  233. Fehlermeldungen, Verbesserungsvorschläge und ähnliches senden Sie
  234. bitte an meine Firmen-Adresse:
  235.  
  236.         Ferrari electronic GmbH
  237.         Ruhlsdorfer Strasse 138
  238.         D-14513 Teltow
  239.  
  240.         Tel.:  (+49 3328) 474 626
  241.         Fax:   (+49 3328) 438 04-0
  242.         BBS:   (+49 3328) 438 04-8
  243.  
  244.         Internet:    twagner@bix.com
  245.         BIX:         twagner
  246.         Compuserve:  100023,2042
  247.  
  248. Ein eingeschränkter Support ist über BIX, das Teleconferencing System
  249. von McGraw-Hill, möglich. Falls Sie Fragen oder Fehlermeldungen
  250. haben, senden sie BIXmail an 'twagner'. Details über BIX finden Sie
  251. in der Englischsprachigen Version dieser Dokumentation.
  252.  
  253. Die jeweils neueste Version finden Sie auch in unserem BBS. Dort
  254. können auch Fehlermeldungen etc. abgelegt werden. Das BBS unterstützt
  255. bis 14.400 bps, mit V.42bis und MNP5 Fehlerkorrektur und Kompression,
  256. und ist durchgehend geöffnet.
  257.  
  258.  
  259.  
  260.                         EINSCHRÄNKUNGEN
  261.                         ===============
  262.  
  263. Der "keine Rückkehr"-Modus von do_exec ist nur der Vollständigkeit
  264. halber verfügbar. Er hat einige Nachteile gegenüber den
  265. Standard-Funktionen der Compiler-Bibliotheken. Insbesondere werden
  266. offene Dateien nicht abgeschlossen, und durch die Laufzeitbibliothek
  267. belegte Interrupt-Vektoren werden nicht auf den DOS-Standardwert
  268. zurückgesetzt. Wenn möglich, benutzen Sie für diesen Modus die
  269. Standardfunktionen.
  270.  
  271. Das Assembler-Modul "spawn" darf nicht das erste Modul beim Linken
  272. sein. Fügen Sie es in eine Bibliothek ein, oder geben Sie spawn.obj
  273. als eine der letzten zu linkenden Dateien an. Das spawn-Modul
  274. überschreibt etwa 1k am Anfang des Programmspeichers. Dieser Speicher
  275. wird zwar gesichert, er darf aber nicht Teile des Moduls selbst
  276. enthalten, da der Programmcode dabei zerstört würde. Die
  277. do_exec-Funktion überprüft diese Bedingung, und kehrt mit einem
  278. entsprechenden Fehlercode zurück falls der Code in Gefahr wäre.
  279.  
  280. Bei Aufruf von do_exec dürfen keine Interrupt-Handler installiert
  281. sein. Dies schließt Handler für Control-C und Critical Errors ein.
  282. Sofern Sie Interrupts bearbeiten wollen während Ihr Programm
  283. ausgelagert ist, müssen Sie das spawn-Modul modifizieren, sodaß die
  284. Handler in den residenten Teil übernommen werden.
  285.  
  286. Offene Dateien bleiben während der do_exec-Funktion geöffnet. Dies
  287. reduziert die Zahl der möglichen offenen Dateien für das
  288. Kind-Programm. Die Umgebungsvariable "C_FILE_INFO", die von einigen
  289. C-Compilern bei Aufruf der Standard-Funktionen für spawn erzeugt
  290. wird, wird nicht unterstützt. Wenn NO_INHERIT in spawn.asm gesetzt
  291. ist (Standard), werden alle offenen Dateien außer den ersten fünf
  292. Standard-Dateien vor dem Kindprozess "versteckt" und damit nicht
  293. vererbt. Dies erlaubt dem Kindprozess, mehr Dateien zu öffnen, wobei
  294. allerdings das Systemweite Limit (FILES= in config.sys) hoch genug
  295. sein muß um alle offenen Dateien zu unterstützen.
  296.  
  297. Interne Kommandos (CD, DIR usw.) werden nicht automatisch bearbeitet.
  298. Sie können diese ausführen indem Sie den Kommandointerpreter laden
  299. (durch Übergabe eines leeren Strings für das auszuführende Programm).
  300. Zum Beispiel:
  301.  
  302. (C)     retcode = do_exec ("dir", "*.*", USE_ALL, 0xffff, environ);
  303.         if (retcode == RC_NOFILE)
  304.            retcode = do_exec ("", "/c dir *.*", USE_ALL, 0xffff, environ);
  305.  
  306. (P)     retcode := do_exec ('dir', '*.*', USE_ALL, $ffff, true);
  307.         if (retcode = RC_NOFILE)
  308.            retcode := do_exec ('', '/c dir *.*', USE_ALL, $ffff, true);
  309.  
  310.  
  311.  
  312.                         HINWEISE
  313.                         ========
  314.  
  315. Die Funktion sollte mit DOS bis herunter zu Version 2.11 kompatibel
  316. sein. Getestet wurde jedoch nur unter DOS 3.3, DOS 4.0, DOS 5.0, 
  317. DOS 6.0 und DR-DOS 5.0.
  318.  
  319. Kompatibilität zu Compiler-Versionen wurde nur getestet mit Borland
  320. C++ 3.1, Microsoft Visual C 1.0, und Turbo Pascal 5.5. Auf andere Compiler
  321. habe ich leider keinen Zugriff. Turbo Pascal 6.0 scheint nach
  322. Benutzerberichten keine Probleme mit EXEC zu haben. Eine Benutzung
  323. mit dem DOS-Extender von Turbo Pascal 7.0 (oder anderen
  324. DOS-Extendern) ist nicht möglich.
  325.  
  326. Wird ein Kommando aufgerufen das resident bleibt (TSR), zum Beispiel
  327. PRINT oder Sidekick, ist eine Rückkehr in das rufende Programm nicht
  328. möglich. Das Programm wird beendet, belegter Speicher in EMS/XMS wird
  329. freigegeben, eine Auslagerungsdatei wird gelöscht.
  330.  
  331. Wenn der Programmspeicher aus mehreren DOS-Speicherblöcken besteht,
  332. benutzt die Auslagerungsfunktion undokumentierte DOS-Interna.
  333. Insbesondere werden Speicherkontrollblöcke direkt modifiziert. Dies
  334. kann theoretisch zu Inkompatibilitäten mit späteren DOS-Versionen,
  335. oder mit DOS-Clones oder Emulatoren führen. Im praktischen Betrieb
  336. wurden bisher noch keine Probleme mit irgendwelchen DOS-Versionen,
  337. einschließlich DOS 6.0 und der DR-DOS Versionen, festgestellt.
  338.  
  339. Wenn NO_INHERIT in spawn.asm auf TRUE gesetzt ist, werden einige
  340. undokumentierte Felder im PSP benutzt und modifiziert. Auch dies
  341. sollte mit allen DOS-Versionen und Clones funktionieren. Sollten Sie
  342. jedoch Probleme befürchten, können Sie NO_INHERIT auf FALSE setzen
  343. (nicht jedoch, wenn Sie die Handle-Tabelle erweitern).
  344.  
  345.  
  346.                         Änderungsgeschichte
  347.                         ===================
  348.  
  349. Änderungen von Version 3.3a auf 3.3b:
  350.  
  351. Unter bestimmten Umständen (der erste MCB eines Programms war nicht
  352. der Environment-Block, sondern der PSP, und es folgten unallozierte
  353. Blöcke) konnte das wiederhergestellte Speicherabbild inkorrekt sein.
  354. Dieser Fehler wurde von Giorgio Angelotti entdeckt und behoben.
  355.  
  356.  
  357. Änderungen von Version 3.3 auf 3.3a:
  358.  
  359. Außer der Adressänderung ist die einzige signifikante Änderung eine
  360. verbesserte Behandlung der Redirection. Wie unter DOS kann die
  361. Redirection jetzt auch gemischt mit sonstigen Parametern angegeben
  362. werden.
  363.  
  364. In der Pascal-Version wurde die Redirection nicht korrekt behandelt,
  365. sofern mehr als eine Redirection angegeben war. Ebenso wurden
  366. Parameter in der COMSPEC-Zeile nicht erkannt. Dies wurde korrigiert.
  367.  
  368.  
  369. Änderungen von Version 3.2a auf 3.3:
  370.  
  371. Neu ist die Berücksichtigung des unbenutzten Heap-Bereichs für Turbo
  372. Pascal. Dieser Bereich wird optional nicht ausgelagert, was in vielen
  373. Fällen sowohl die Auslagerungsgeschwindigkeit erhöht, als auch den
  374. Speicherbedarf auf dem Auslagerungsmedium reduziert. Da dies
  375. Versionsabhängig ist (Turbo Pascal Version 6 hat eine andere
  376. Heap-Verwaltung als frühere Versionen), ist dieses Feature in der
  377. vorübersetzten Version nicht eingeschaltet. Bitte setzen Sie PAS_FREE
  378. in SPAWN.ASM auf TRUE, und setzen sie TPAS_6 je nach Ihrer
  379. Turbo-Pascal-Version auf TRUE oder FALSE, um es zu nutzen.
  380.  
  381. Die Pascal "putenv" Funktion war fehlerhaft. Wenn eine Variable
  382. gesetzt wurde, die bereits im Environment vorhanden war, wurde ein
  383. doppelter Eintrag erzeugt statt den alten Eintrag zu löschen.
  384. Fehlermeldung und Korrektur von A. Bailey.
  385.  
  386. Bei der Bestimmung von Programmname und Pfad wurden Programme, deren
  387. Basis-Name (ohne Extension) gleich dem Namen einer Subdirectory war,
  388. unter Umständen nicht gefunden. Die checkpath Funktion wurde
  389. modifiziert um diesen Fall korrekt zu behandeln. Fehlermeldung von H.
  390. Lembke.
  391.  
  392. Bei Auslagerung auf Datei mit NO_INHERIT true und einer erweiterten
  393. Handle-Tabelle war eine Rückkehr nicht möglich. Dies lag daran, daß
  394. der Tabellen-Zeiger im PSP wiederhergestellt wurde bevor der
  395. dazugehörige MCB-Block alloziert und wiederhergestellt war. Der
  396. PSP-Eintrag wird jetzt erst nach dem Zurückladen gesetzt.
  397. Fehlermeldung von H. Lembke.
  398.  
  399. EXEC konnte nicht auslagern wenn eine erweiterte Handle-Tabelle mit
  400. NO_INHERIT false verwendet wurde. Der MCB der die Handle-Tabelle
  401. enthält wird jetzt nicht mehr ausgelagert. Dies führt allerdings
  402. dazu, daß der Speicher fragmentiert wird, sodaß NO_INHERIT stets TRUE
  403. sein sollte wenn die Handle-Tabelle erweitert werden soll.
  404.  
  405. Die C do_exec-Funktion verarbeitet jetzt auch NULL-Zeiger auf
  406. Kommandozeile und Parameterstring korrekt.
  407.  
  408.  
  409. Änderungen von Version 3.2 auf 3.2a:
  410.  
  411. Ein Fehler in checkpat.asm, der zu nicht vollständigen Pfadangaben 
  412. führte, wurde behoben.
  413.  
  414. Ein Fehler in spawn.asm, der dazu führte, daß die Dateiumleitungs-
  415. Dateien selbst nach Programmende nicht geschlossen wurden, wurde
  416. behoben.
  417.  
  418. Änderungen von Version 3.1 auf 3.2:
  419.  
  420. Neu ist der Aufruf einer benutzerdefinierbaren Funktion (über einen
  421. Funktions-Pointer bzw. eine Prozedurvariable) aus do_exec vor
  422. Ausführung des Programmaufrufs. Diese Funktion kann z.B. Meldungen
  423. ausgeben und zusätzliche Prüfungen durchführen. Die bisher interne
  424. Struktur mit den Auslagerungs-Parametern wurde zugänglich gemacht
  425. um der Benutzerfunktion den Zugriff zu erlauben. Für Details siehe
  426. exec.h bzw. exec.pas, sowie das Beispiel in extest.c/extest.pas.
  427.  
  428. Ein Fehler in checkpat.asm, der bei Verwendung mit Turbo Pascal
  429. zu Problemen mit der "exists"-Funktion führte, wurde behoben.
  430.  
  431. Die Pascal-Version von extest wurde (endlich) auf den gleichen
  432. Stand wie die C-Version gebracht, ein Beispiel für die Nutzung
  433. der Benutzerfunktion wurde in beide Versionen eingefügt.
  434.  
  435. In exec.c wurde die Definition der internen Routinen auf "static"
  436. geändert, die Initialisierung einiger Variablen in do_exec wurde
  437. korrigiert.
  438.  
  439.  
  440. Änderungen von Version 3.0a auf 3.1:
  441.  
  442. Neu sind vor allem die automatische Behandlung von .BAT-Dateien und
  443. die Unterstützung der I/O-Dateiumleitung. Die Suchreihenfolge für
  444. Kommandos entspricht jetzt exakt der DOS-Reihenfolge, bis auf die
  445. Bearbeitung interner Kommandos (es gibt keinen sicheren Weg für die
  446. Erkennung, ob ein Kommando intern oder extern ist). Dateiumleitung
  447. ist optional. Das Interface zu do_exec hat sich nicht geändert,
  448. do_spawn benötigt drei neue Parameter wenn Redirection eingeschaltet
  449. ist.
  450.  
  451. Eine Routine (checkpat.asm) die einen Pfad prüft und auflöst sowie in
  452. seine Bestandteile aufteilt wurde hinzugefügt. Diese Routine führt
  453. einige Prüfungen des Pfades und des Dateinamens durch und behandelt
  454. Critical Errors (ungültiges Laufwerk, Laufwerk nicht bereit) ohne
  455. Benutzereingriff. Die Routine wird zur Bearbeitung des
  456. Programm-Dateinamens, des Kommandoprozessor-Dateinamens und des
  457. temporären Dateipfades verwendet. Die Routine ist unabhängig von den
  458. anderen EXEC/SPAWN-Funktionen, sie kann daher auch in anderen
  459. Applikationen nützlich sein.
  460.  
  461. Einige neue Fehlercodes erlauben eine bessere Analyse von
  462. Fehlerursachen.
  463.  
  464. Der Pfad der temporären Datei ist jetzt stets ein vollständiger Pfad.
  465. Ein Wechsel von Laufwerk oder Pfad während der Auslagerung kann daher
  466. jetzt nicht mehr zum Verlust der Auslagerungsdatei führen.
  467.  
  468. Die Prüfung auf Existenz einer Datei wurde in checkpat.asm verlagert,
  469. und von der 'find first'-Funktion auf 'get file attributes'
  470. umgestellt. Dies scheint geringfügig schneller und vermeidet
  471. Compiler-Abhängigkeiten.
  472.  
  473. Das Programm GETLANG wurde korrigiert, die Hilfs-Meldungen werden
  474. jetzt auf stderr ausgegeben.
  475.  
  476.  
  477. Änderungen von Version 3.0 auf 3.0a:
  478.  
  479. Ein kleiner Fehler in EXEC.C wurde korrigiert: ein '<' fehlte in
  480. einem deutschen Kommentar, sodaß bei GETLANG E ein großer Teil der
  481. Datei verschluckt wurde.
  482.  
  483. Ein Problem (Fehler? Feature?) bei der Turbo C/Borland C "stat"
  484. Funktion, die für Directories stets "read-only" liefern, verhinderte
  485. die Benutzung der TEMP Directory beim Auslagern. Die Schreib-
  486. Erlaubnis wird jetzt nicht mehr geprüft.
  487.  
  488. Die Präallozierung der Auslagerungsdatei, die mit Version 3.0
  489. eingeführt wurde um sicherzustellen daß das Laufwerk den kompletten
  490. Speicher fassen kann, führte zu starken Verzögerungen wenn die
  491. Auslagerungsdatei auf einem Novell-Netzwerk Laufwerk lag. Um dieses
  492. Problem zu umgehen wurden zwei neue Flags für den "method" Parameter
  493. eingeführt:
  494.  
  495.       NO_PREALLOC - Nie Präallozieren
  496.       CHECK_NET   - Nicht Präallozieren wenn Datei auf Netzwerk
  497.  
  498. Wenn die Datei nicht präalloziert wird, wird das Laufwerk nicht auf
  499. ausreichenden Platz geprüft. Die Alternative, der "get disk free
  500. space" Aufruf, dauert im allgemeinen noch wesentlich länger als ein
  501. Präallozieren. Dies ist allerdings kein großes Problem, die
  502. Auslagerung liefert lediglich den Fehlercode 0x502 wenn der
  503. Speicherplatz nicht ausreicht.
  504.  
  505.  
  506. Änderungen für Version 3.0:
  507.  
  508. Dies ist die erste Version mit Deutscher Dokumentation. Falls Sie mit
  509. früheren Versionen gearbeitet haben, können Sie die Änderungen in der
  510. Englischen Beschreibung nachlesen - denn dann können Sie doch
  511. Englisch, oder? :)
  512.