home *** CD-ROM | disk | FTP | other *** search
/ Crawly Crypt Collection 1 / crawlyvol1.bin / tt / vmem11 / handbuch.txt < prev    next >
Text File  |  1993-08-30  |  21KB  |  458 lines

  1. Hinweise für Programmierer:
  2. ===========================
  3.  
  4. Programme, die VMEM V1.1 verwenden, können nur dann gestartet werden, wenn
  5. VMEM.PRG installiert werden konnte. Andernfalls werden alle Funktionsaufrufe
  6. mit einem Fehlercode zurückgewiesen. Deshalb sollte man unmittelbar nach der
  7. Konfiguration den Fehlercode auf 0 abprüfen und andernfalls das Programm mit
  8. einer Fehlermeldung abbrechen.
  9.  
  10. Vor der Konfiguration des virtuellen Speichers sollten bestimmte Parameter
  11. vom Anwender erfragt werden. Dies ist vor allem bei der Wahl der Partition
  12. für die temporäre Datei, bei der Größe des Cache-Speichers sowie bei der
  13. maximalen Größe des virtuellen Speichers sinnvoll. Nach der Konfiguration
  14. sollte man es vermeiden, Dateien auf die Partition zu kopieren, auf der sich
  15. die temporäre Datei befindet, da man ansonsten während der Laufzeit einen
  16. _NULL-Zeiger bei einem VM_ALLOC-Aufruf erhalten könnte, falls nicht mehr
  17. genügend freier Platz zur Verfügung steht.
  18.  
  19. Der Speicherbedarf im Hauptspeicher berechnet sich nach folgender Formel:
  20.  
  21.     3 * maximale Anzahl Seiten im virtuellen Speicher
  22.   + 4 * Anzahl Seiten im Cache
  23.   + Größe des Caches in Bytes
  24.   + Größe einer Seite des virtuellen Speichers
  25. ----------------------------------------------------
  26.   = Größe des zusätzlichen Speicherbedarfs in Bytes
  27.  
  28. Dieser Speicher wird bei dem VM_CONFIG-Aufruf automatisch angefordert und
  29. gehört somit zum aktuellen Programm hinzu. Es ist derzeit nicht möglich,
  30. aus dem laufenden Programm heraus ein anderes, VMEM-nutzendes Programm
  31. aufzurufen. Wird dies nicht beachtet, so ist mit dem Verlust der gesamten
  32. Daten im virtuellen Speicher zu rechnen!!
  33.  
  34. Für bestimmte Parameter sind nur die in der Datei VMEM.H definierten Werte
  35. zulässig. Vor allem die Werte für READ_MODE und WRITE_MODE für die Funktion
  36. VM_ADDRESS sind unbedingt beizubehalten, da andere Werte für ein großes
  37. Chaos sorgen würden.
  38.  
  39. Beim Zugriff auf die Daten des virtuellen Speichers ist folgendes zu beachten:
  40. Wenn man mittels VM_ADDRESS einen Zeiger auf einen bestimmten Speicherbereich
  41. erhalten hat, so ist nach Aufruf einer anderen VMEM-Funktion dieser Zeiger als
  42. ungültig anzusehen, da sich der Inhalt des Caches verändert haben könnte. Des-
  43. halb sollte man vor dem nächsten Zugriff auf den Cache wieder VM_ADDRESS auf-
  44. rufen. Wenn die Cache-Verwaltung feststellt, daß sich die betreffenden Seiten
  45. immer noch im Cache befinden, so erfolgt kein Zugriff auf die Platte und man
  46. hat nur eine geringe Verzögerung. Man muß jedoch beachten, daß man einen ande-
  47. ren Zeiger bekommen kann, da die Verwaltung den Cache reorganisieren kann.
  48.  
  49. Die maximale Größe des virtuellen Speichers beträgt 65536*32768 Bytes (oder
  50. anders ausgedrückt: 2 Gigabyte !!) Da diese Datenmenge von keinem bisher er-
  51. hältlichen Programm erzeugt wird und die brauchbarste Seitengröße 4 KByte
  52. beträgt, ist die sinnvolle Obergrenze derzeit bei 256 MByte. Da eine DIN A4
  53. Seite, die mit 256 Graustufen gescannt wurde, ca. 8 MByte (ungepackt) belegt,
  54. ist eine virtuelle Speicherverwaltung trotz der langsameren Zugriffsgeschwin-
  55. digkeit von enormen Vorteil, da sie auf jedem Atari ST und TT mit Festplatte
  56. einsetzbar ist. Die einzige Voraussetzung ist etwas Platz auf der Platte, um
  57. die temporäre Datei, die den virtuellen Speicher beinhaltet, anlegen zu können.
  58.  
  59. Die Wahl der Seitengröße ist abhängig von dem gewünschten Einsatzgebiet: soll
  60. VMEM z.B. in einem Zeichenprogramm eingesetzt werden, so ist SIZE_32768 die
  61. ideale Größe, da auf die Zeichnung selbst meistens linear zugegriffen wird.
  62. Wenn man aber eine Datenbank mit VMEM aufbaut und ein Datensatz z.B. 300 Byte
  63. belegt, sollte man SIZE_1024 wählen.
  64.  
  65. Generell gilt: wenn auf Daten im virtuellen Speicher zusammenhängend zuge-
  66. griffen wird, so sind große Seiten praktischer. Für einen wahlfreien Zugriff
  67. eignen sich hingegen kleine Seiten, da besonders bei vielen Zugriffen viele
  68. Seiten aus dem Cache ausgelagert werden müssen und die geringe Größe einer
  69. Seite das Ein- und Auslagern beschleunigt.
  70.  
  71. ******************************************************************************
  72.  
  73. Funktionsübersicht (Version 1.1):
  74. =================================
  75.  
  76. Hinweis:    in der Datei VMEM.H finden sich sämtliche Definitionen
  77.  
  78.  
  79. VM_CONFIG:      int vm_config (TAB *parameter)
  80. ----------
  81.  
  82. Mit dieser Funktion wird der virtuelle Speicher sowie der für die Verwaltung
  83. nötige Hauptspeicher konfiguriert und initialisiert. Hierzu übergibt man die
  84. folgenden Informationen mit Hilfe der Struktur TAB:
  85.  
  86. TAB
  87. {
  88.     WORD    version;
  89.     WORD    count_page;
  90.     WORD    cache_size;
  91.     WORD    page_type;
  92.     int     fill_value;
  93.     int     drive_no;
  94. };
  95.  
  96. version:    enthält die Versionsnummer des TAB-Parameterblocks (derzeit 256
  97.             bzw. 0x100). Auf diese Art und Weise ist es möglich, auch in
  98.             späteren Versionen von VMEM das Programm unverändert laufen zu
  99.             lassen, da VMEM sich an der Versionsnummer orientiert. Diese
  100.             Variable sollte deshalb vorerst immer den Wert 256 erhalten.
  101.  
  102. count_page: bestimmt die maximale Anzahl an Seiten im virtuellen Speicher.
  103.             Je größer dieser Wert ist, desto größer kann auch der virtuelle
  104.             Speicher werden. Jedoch erhöht sich damit auch der zusätzliche
  105.             Speicherbedarf, da für jede Seite ein Byte belegt wird.
  106.  
  107. cache_size: bestimmt die Anzahl der Seiten, die in den Cache passen. Man
  108.             sollte diesen Wert nicht zu klein wählen, da man ansonsten keine
  109.             großen Blöcke mittels VM_ADDRESS ansprechen kann. Der Cache
  110.             sollte in der Lage sein, 10% des virtuellen Speichers aufnehmen
  111.             zu können. Das Minimum beträgt 4 Seiten.
  112.  
  113. page_type:  hiermit wählt man die Größe einer Seite aus. Je größer eine Seite
  114.             ist, desto größer kann man den virtuellen Speicher machen. Man
  115.             muß aber beachten, daß eine Seite von 32 KByte mehr Zeit benötigt
  116.             zum Ein- und Auslagern als eine 4 KByte-Seite. Diese Variable
  117.             sollte deshalb vorerst den Wert SIZE_4096 erhalten, da die anderen
  118.             Werte nur in einigen bestimmten Fällen Vorteile bieten.
  119.  
  120. fill_value: bestimmt den Füllwert einer Seite, falls das erste Mal darauf zu-
  121.             gegriffen wird. Man kann somit bestimmte Seiten mit einem Füllwert
  122.             belegen, ohne auf diese Seiten jemals einen Schreibzugriff gemacht
  123.             zu haben (praktisch z.B. für leere Stellen in einer Grafik).
  124.  
  125. drive_no:   legt das Laufwerk fest, auf dem die temporäre Datei angelegt
  126.             werden soll. Das Laufwerk A und B ungeeignet sind, beginnt die
  127.             Zählung bei 3 (= Laufwerk C). Auf diesem Laufwerk sollte noch
  128.             soviel Platz sein, um die VM_ALLOC-Aufrufe erfüllen zu können.
  129.             Man muß also nicht Platz für den gesamten virtuellen Speicher
  130.             haben, jedoch sollte man Dateien, die vom aktuellen Programm er-
  131.             stellt werden, nicht unbedingt auf die gleiche Partition speichern.
  132.             Wenn man jedoch alle VM_ALLOC-Aufrufe getätigt hat, so ist die
  133.             temporäre Datei in ihrer maximalen Größe vorhanden und der ver-
  134.             bleibende Restspeicher der Partition kann genutzt werden. Deshalb
  135.             sollte man, falls möglich, direkt nach der Konfiguration den be-
  136.             nötigten virtuellen Speicher anfordern.
  137.  
  138. Ergebnis der Funktion:
  139.  
  140. = 0:        der virtuelle Speicher und die Verwaltungsinformation konnte
  141.             konfiguriert und installiert werden, alles ist OK.
  142.  
  143. > 0:        das Programm kann nicht weitermachen, da VMEM.PRG nicht installiert
  144.             worden ist. Alle folgenden Aufrufe liefern -1 zurück.
  145.  
  146. < 0:        Falls der Code zwischen -1 und -255 liegt, so ist ein TOS-Fehler
  147.             aufgetreten. Andernfalls handelt es sich hierbei um einen in der
  148.             Datei VMEM.H näher spezifizierten Fehler.
  149.  
  150. Es gibt leider keinen allgemeingültigen Tip, wie groß man den Cache und den
  151. Hauptspeicher machen soll. So kann es sinnvoll sein, einen 1 MByte Haupt-
  152. speicher und einen 512 Kbyte Cache anzulegen, um eine möglichst geringe
  153. Anzahl an Festplattenzugriffen zu erreichen. Aber auch ein Hauptspeicher mit
  154. 2 MByte kann mit einem Cache von nur 20 Kbyte genutzt werden. Je größer der
  155. Cache ist, desto geringer wird i.A. die Anzahl der Plattenzugriffe.
  156.  
  157.  
  158. VM_INFO:        V_INFO *vm_info (void)
  159. --------
  160.  
  161. VM_INFO liefert nach einem VM_CONFIG-Aufruf einige Daten. Diese Daten stehen
  162. in der Struktur V_INFO, die in der Datei VMEM.H wie folgt definiert ist:
  163.  
  164. V_INFO
  165. {
  166.     WORD    version;
  167.     WORD    count_page;
  168.     WORD    count_blocks;
  169.     WORD    free_blocks;
  170.     int     fill_value;
  171.     long    cache_size;
  172.     WORD    cache_count;
  173.     long    page_size;
  174.     long    max_size;       /* Maximalgröße des virtuellen Speichers */
  175.     long    max_alloc;      /* Maximalgröße eines einzelnen Blocks */
  176.     int     drive_no;
  177.     long    drive_free;
  178. };
  179.  
  180. version:        Versionsnummer des installierten VMEM-Steuerprogramms. Format:
  181.                 0x100 oder 256 entspricht V1.00, 0x101 oder 257 ist V1.1 usw.
  182.                 Diese Versionsnummer dient derzeit nur zur Information.
  183.  
  184. count_page:     ist der Parameter, der bei VM_CONFIG im Feld <count_page>
  185.                 übergeben wurde.
  186.  
  187. count_blocks:   enthält die Anzahl der maximal möglichen VM_ALLOC-Aufrufe.
  188.                 Falls nach <count_blocks> Aufrufen weitere VM_ALLOC folgen,
  189.                 so werden diese mit _NULL beantwortet.
  190.                 Derzeit sind maximal 256 Aufrufe möglich, bevor mindestens
  191.                 ein VM_FREE-Aufruf erfolgen muß.
  192.  
  193. free_blocks:    gibt die Anzahl der noch möglichen Aufrufe an. Falls der Wert
  194.                 gleich 0 ist, so muß vorher mindestens ein VM_FREE-Aufruf er-
  195.                 folgen.
  196.  
  197. fill_value:     ist der bei VM_CONFIG im Feld <fill_value> übergebene Füllwert.
  198.  
  199. cache_size:     gibt die Größe des Caches in Bytes an. Man kann die Größe des
  200.                 Caches auch nach folgender Formel berechnen:
  201.                 Größe = Anzahl Cache-Seiten * Größe einer Seite in Bytes
  202.  
  203. cache_count:    ist die bei VM_CONFIG im Feld <cache_size> übergebene Anzahl
  204.                 an Seiten, die für den Cache verwendet werden sollen.
  205.  
  206. page_size:      gibt die Größe einer Seite in Bytes an.
  207.  
  208. max_size:       gibt die maximale Größe des virtuellen Speichers in Bytes an.
  209.  
  210. max_alloc:      bestimmt die maximale Größe eines Blockes, der durch VM_ALLOC
  211.                 belegt werden kann.
  212.  
  213. drive_no:       ist die Nummer des Laufwerks, auf dem die temporäre Datei an-
  214.                 gelegt wurde.
  215.  
  216. drive_free:     gibt den freien Speicher des Laufwerks in Bytes an, auf dem die
  217.                 temporäre Datei angelegt wurde.
  218.  
  219. Ergebnis der Funktion:
  220.  
  221.                 Zeiger auf eine Struktur vom Typ V_INFO
  222.  
  223. Alle in V_INFO aufgeführten Werte haben rein informativen Charakter. Wichtig
  224. für den Programmierer sind eigentlich nur die Parameter <count_blocks>,
  225. <free_blocks> und <max_alloc>.
  226.  
  227.  
  228. VM_CLOSE:       void vm_close (void)
  229. ---------
  230.  
  231. Nach Beendigung aller Arbeiten sollte man die temporäre Datei sowie den für die
  232. Verwaltungsinformation belegten Speicher freigeben. Dies erfolgt mit Aufruf der
  233. Prozedur VM_CLOSE. Nach VM_CLOSE ist nur noch VM_CONFIG zulässig.
  234.  
  235.  
  236. VM_CLRCACHE:     void vm_clrcache (void)
  237. ------------
  238.  
  239. Mit dieser Funktion wird der Cache neu initialisiert. Dabei werden Seiten, die
  240. sich noch im Cache befinden, herausgeschrieben. Ein Aufruf dieser Funktion ist
  241. dann sinnvoll, wenn z.B. in einem Zeichenprogramm ein neues Bild bearbeitet
  242. werden soll, da somit die Daten des vorherigen Bildes aus dem Cache entfernt
  243. werden. Wichtig: die im Cache befindlichen Daten werden nicht gelöscht, da sie
  244. vorher in die temporäre Datei gesichert werden. Diese Funktion sollte man nur
  245. ab und zu verwenden, da sie die eigentliche Aufgabe des Caches (Vermeidung von
  246. Plattenzugriffen) negativ beeinflußt.
  247.  
  248.  
  249. VM_ALLOC:       V_ADR vm_alloc (long size)
  250. ---------
  251.  
  252. Wenn der übergebene Parameter <size> kleiner als 0 ist, so wird die Größe des
  253. größten zusammenhängenden freien Speicherblocks bestimmt und zurückgegeben.
  254.  
  255. Ansonsten wird <size> auf volle Seiten aufgerundet. Dies bedeutet, daß eine
  256. Anforderung von 10 Byte und eine Anforderung von 2 KByte bei einer Seitengröße
  257. von 4 KByte immer eine volle Seite belegt. Danach wird versucht, einen Block
  258. der neuen Größe <size> zu allokieren. Falls dies nicht möglich ist (z.B. zu
  259. wenig Speicher), dann wird _NULL zurückgeliefert. Andernfalls erhält man eine
  260. Adresse des virtuellen Speichers, wobei kein Zeiger, sondern ein LONG (genau
  261. genommen: V_ADR) übergeben wird.
  262.  
  263.  
  264. VM_FREE:        int vm_free (V_ADR address)
  265. --------
  266.  
  267. Mit dieser Funktion kann man einen vorher mit VM_ALLOC belegten Speicherbereich
  268. wieder freigeben. Als Ergebnis erhält man OK, falls der Block freigegeben
  269. werden konnte, und NOT_OK, falls ein Block mit dieser Adresse nicht existierte.
  270.  
  271.  
  272. VM_ADDRESS:     char *vm_address (V_ADR address, long *window_size, int mode)
  273. -----------
  274.  
  275. Um ein "Fenster" zu setzen, verwendet man die Funktion VM_ADDRESS. Dabei wird
  276. versucht, einen aus <window_size> Bytes bestehenden Speicherbereich in den
  277. Cache einzulagern. Falls dies nicht möglich ist, weil entweder <address> zu
  278. nah am Ende des Speicherblocks oder <window_size> größer als der Cache ist,
  279. dann wird der Parameter <window_size> mit dem größtmöglichen Wert versorgt.
  280. Deshalb sollte man nach Aufruf von VM_ADDRESS nicht mehr als die in
  281. <window_size> übergebene Anzahl an Bytes adressieren, da ansonsten andere
  282. Daten verändert werden könnten. Normalerweise sollte der Wert von <window_size>
  283. höchstens halb so groß wie der Cache sein.
  284.  
  285. <address> gibt die Startadresse im virtuellen Speicher an, ab der man Bytes
  286. lesen oder schreiben möchte. Wenn man die Bytes nur lesen möchte, so sollte
  287. man <mode> auf READ_MODE setzen, da dies die Verwaltung des Caches informiert,
  288. daß diese Seiten nicht verändert wurden. Verändert man dennoch den Inhalt, so
  289. sind diese Seiten im weiteren Verlauf nicht mehr konsistent. Wenn man jedoch
  290. Bytes schreiben möchte, so muß man <mode> auf WRITE_MODE setzen.
  291.  
  292. Im Falle eines Fehler erhält man ILLEGAL_ADDRESS, falls auf einen nicht vor-
  293. handenen Speicherbereich zugegriffen wird, ILLEGAL_COUNT, falls die gewünschte
  294. Größe des Fensters kleiner oder gleich 0 ist, und ILLEGAL_MODE, falls für <mode>
  295. ein anderer Wert als READ_MODE oder WRITE_MODE angegeben wurde.
  296.  
  297. Wenn die Seiten ohne Probleme in den Cache eingelagert werden konnten, so wird
  298. als Ergebnis ein Zeiger auf das erste Byte im Cache, das man mit <address> spe-
  299. zifiziert hat, zurückgeliefert.
  300.  
  301. Auf keinen Fall darf man Daten adressieren, die unterhalb des als Ergebnis er-
  302. haltenen Zeigers liegen. Auch die Daten, die ab <Ergebnis> + <window_size> sich
  303. befinden, sind tabu.
  304.  
  305.  
  306. VM_FILL:        long vm_fill (V_ADR address, long count, int value)
  307. --------
  308.  
  309. Um bestimmte Stellen des virtuellen Speichers schnell mit einem bestimmten Wert
  310. zu füllen, sollte man VM_FILL verwenden. Hierzu übergibt man die Startadresse
  311. im virtuellen Speicher sowie die Anzahl der Bytes und den gewünschten Füllwert.
  312. Wenn für <count> -1 übergeben wird, so wird der Speicherbereich von <address>
  313. bis zum Ende des Speicherblocks mit <value> gefüllt. Ansonsten wird unter Be-
  314. rücksichtigung von <count> gefüllt. Sollte dabei das Ende des Speicherblocks
  315. erreicht werden, so wird an dieser Stelle abgebrochen.
  316.  
  317. Als Ergebnis erhält man entweder eine Fehlermeldung (ILLEGAL_ADDRESS für eine
  318. falsche Adresse bzw. ILLEGAL_COUNT falls <count> kleiner als -1 ist) oder man
  319. erhält die Anzahl der geschriebenen Bytes.
  320.  
  321.  
  322. VM_LOAD:        long vm_load (V_ADR source, char *destination, long count)
  323. --------
  324.  
  325. Mit der Funktion VM_LOAD kann man einen zusammenhängenden Speicherbereich aus
  326. dem virtuellen Speicher in den physikalischen Speicher kopieren. Hierbei gelten
  327. für <source> und <count> die gleichen Einschränkungen wie für <address> und
  328. <count> bei VM_FILL. Zu beachten ist noch, daß einen gültige Zieladresse über-
  329. geben wird.
  330.  
  331.  
  332. VM_SAVE:        long vm_save (char *source, V_ADR destination, long count)
  333. --------
  334.  
  335. Die Funktion VM_SAVE ist das direkt Gegenstück zu VM_LOAD. Hierbei wird ein zu-
  336. sammenhängender Speicherbereich in den virtuellen Speicher kopiert. Auch hier
  337. gelten für <destination> und <count> die gleichen Einschränkungen wie für die
  338. Parameter bei VM_FILL.
  339.  
  340. Die beiden Funktionen VM_LOAD und VM_SAVE sind besonders gut zum schnellen Aus-
  341. tausch von Daten zwischen dem physikalischen und dem virtuellen Speicher ge-
  342. eignet (z.B. beim Einsatz in einer UNDO-Funktion eines Zeichenprogrammes).
  343.  
  344.  
  345. VM_READ:        long vm_read (int handle, long count, V_ADR dest)
  346. --------
  347.  
  348. Das Einlesen von Daten aus einer Datei in den virtuellen Speicher erfolgt mit
  349. VM_READ. Hierzu muß die Datei mit der GEMDOS-Funktion Fopen geöffnet worden
  350. sein. Danach übergibt man das erhaltene Dateihandle, die Anzahl der zu lesen-
  351. den Bytes sowie die Zieladresse im virtuellen Speicheran die Funktion.
  352. Für die Parameter <count> und <dest> gelten die Einschränkungen von VM_FILL.
  353.  
  354. Als Ergebnis erhält man entweder eine VMEM-Fehlermeldung (ILLEGAL_ADDRESS oder
  355. ILLEGAL_COUNT), eine TOS-Fehlermeldung (-1 bis -255) oder die Anzahl der ge-
  356. lesenen Bytes.
  357.  
  358.  
  359. VM_WRITE:       long vm_write (int handle, long count, V_ADR source)
  360. ---------
  361.  
  362. Um einen Bereich des virtuellen Speichers in eine Datei sichern zu können, ver-
  363. wendet man VM_WRITE. Die Parameter haben hier die gleiche Bedeutung wie bei
  364. VM_READ. <handle> stammt entweder von einem Fopen oder Fcreate - Aufruf.
  365.  
  366. Als Ergebnis erhält man entweder eine VMEM-Fehlermeldung (ILLEGAL_ADDRESS oder
  367. ILLEGAL_COUNT), eine TOS-Fehlermeldung (-1 bis -255) oder die Anzahl der ge-
  368. schriebenen Bytes.
  369.  
  370. ******************************************************************************
  371.  
  372. Fehlermeldungen von VMEM:
  373. =========================
  374.  
  375. ILLEGAL_FUNCTION:
  376. Die gewünschte Funktion ist nicht vorhanden
  377.  
  378. WRONG_CACHE_SIZE:
  379. Die angegebene Cache-Größe ist nicht sinnvoll
  380.  
  381. WRONG_PAGE_TYPE:
  382. Der angegebene Seitentyp existiert nicht
  383.  
  384. OUT_OF_MEMORY:
  385. Der physikalische Speicher ist nicht groß genug, um den Cache und die Verwal-
  386. tungsinformationen aufzunehmen
  387.  
  388. FILE_ERROR:
  389. Es ist ein Fehler beim Zugriff auf die Datei aufgetreten (= TOS-Fehler -1)
  390.  
  391. NOT_ENOUGH_SPACE  bzw.  _NULL:
  392. Auf der Partition, auf der sich die temporäre Datei befindet, ist nicht mehr
  393. genügend Platz frei, um weitere VM_ALLOC-Aufrufe zu erfüllen
  394.  
  395. NOT_OK:
  396. Ein freizugebender Speicherblock mit dieser Adresse existiert nicht
  397.  
  398. ILLEGAL_ADDRESS:
  399. Die virtuelle Adresse zeigt auf einen nicht vorhandenen Speicherbereich
  400.  
  401. ILLEGAL_COUNT:
  402. Die angegebene Anzahl ist kleiner oder gleich 0
  403.  
  404. ILLEGAL_FATSIZE:
  405. Das Ziellaufwerk für die temporäre Datei verwendet eine FAT, die nicht aus
  406. 16-Bit-Einträgen besteht
  407.  
  408. ******************************************************************************
  409.  
  410. Benutzung von VMEM in eigenen Programmen:
  411. =========================================
  412.  
  413. Ein Programm, das VMEM nutzen will, sollte ungefähr folgenden Aufbau haben:
  414.  
  415.         ...
  416.         ...
  417.  Abfrage der Anwenderspezifischen VMEM-Daten (Partition, Größe, usw.)
  418.  Initialisierung des VM_CONFIG-Parameterblocks
  419.  Aufruf von VM_CONFIG
  420.  Falls der Rückgabewert ungleich 0 ist, Fehler melden und Programm beenden
  421.         ...
  422.         ...
  423.  Speicheranforderung(en) mittels VM_ALLOC
  424.  Falls der Zeiger den Wert _NULL hat, Fehler melden und Programm beenden
  425.         ...
  426.         ...
  427.  Zugriff(e) auf den virtuellen Speicher
  428.  (VM_ADDRESS, VM_FILL, VM_LOAD, VM_SAVE, VM_READ, VM_WRITE)
  429.  Rückgabewerte der Funktionen auf Fehler abprüfen und eventuell abbrechen
  430.  (VM_CLOSE nicht vergessen !!)
  431.         ...
  432.         ...
  433.  Freigeben des belegten Speichers mittels VM_FREE
  434.  (unmittelbar vor VM_CLOSE ist dies nicht notwendig)
  435.         ...
  436.         ...
  437.  Entfernen der temporären Datei sowie des belegten Hauptspeichers für die
  438.  Verwaltungsinformation mittels VM_CLOSE
  439.         ...
  440.         ...
  441.  Ab jetzt darf kein Zugriff mehr auf VMEM-Funktionen mit Ausnahme von
  442.  VM_CONFIG erfolgen !!!
  443.         ...
  444.         ...
  445.  
  446. ******************************************************************************
  447.  
  448. Linken von Programmen mit VMEM-Funktionen:
  449. ==========================================
  450.  
  451. Beim Linken von Programmen, die VMEM benutzen, muß die Datei VMEM.LIB (Pure-
  452. Format) verwendet werden. Man kann auch die Datei VMEM.S (Assembler-Source
  453. der Bibliothek) verwenden. Diese Bibliothek beinhaltet die eigentlichen Auf-
  454. rufe der VMEM-Funktionen für den Pure C - Compiler. Für andere Compiler muß
  455. man die Aufrufe wahrscheinlich umschreiben. Hinweise, was man dabei beachten
  456. muß, stehen am Anfang der Datei VMEM.S.
  457.  
  458.