home *** CD-ROM | disk | FTP | other *** search
/ ST-Computer Leser 2002 January / STC_CD_01_2002.iso / UTILS / LIBERTY / DOKU / LIBERTY.TXT < prev   
Text File  |  2000-09-07  |  59KB  |  1,347 lines

  1.                                Liberty
  2.  
  3.                     Dokumentation zur Version 1.35
  4.                               06.09.2000
  5.  
  6.                                  von
  7.  
  8.                            Christian Krüger
  9.                            Sophienstr. 10a
  10.                              12203 Berlin
  11.  
  12.  
  13.  
  14. Inhaltsverzeichnis
  15. ==================
  16.  
  17.  1  Rechtliches / Copyright
  18.     1.1  Haftungsausschlu₧
  19.     1.2  Warenzeichen
  20.     1.3  Spenden
  21.  
  22.  2  Installation
  23.     2.1  Bootreihenfolge
  24.  
  25.  3  Was ist Liberty?
  26.  
  27.  4  Was bietet Liberty?
  28.     4.1  CJar-Erweiterung
  29.     4.2  Soundfunktionen
  30.     4.3  Vektorgrafikfunktionen
  31.          4.3.1  Der Konvertierer GM2CKVDI
  32.  
  33.  5  An die programmierenden Zunft
  34.     5.1  Allgemeines
  35.          5.1.1  Parameterübergabe
  36.     5.2  Der Liberty-Cookie & XBIOS-Erweiterung
  37.     5.3  Die Liberty-Struktur
  38.     5.4  Die Utility-Funktionen
  39.          5.4.1  Init_Liberty();
  40.          5.4.2  lock_Sema();
  41.          5.4.3  release_Sema();
  42.          5.4.4  memcpy();
  43.          5.4.5  memset();
  44.     5.5  Die 'GEMDOS-Erweiterungen'
  45.          5.5.1  CK_init_meminfo()
  46.          5.5.2  CK_malloc()
  47.          5.5.3  CK_realloc()
  48.          5.5.4  CK_free()
  49.          5.5.5  CK_load_buffer()
  50.     5.6  Die 'VDI-Erweiterungen'
  51.     5.7  Die 'AES-Unterstützung'
  52.     5.8  Die Sound-Funktionen
  53.     5.9  Programmbeispiel
  54.  
  55.  6  Ausblick
  56.  
  57.  7  Changes
  58.  
  59.  8  Kontaktadresse
  60.  
  61.  
  62.  
  63. 1  Rechtliches / Copyright
  64. **************************
  65.  
  66. Das Copyright  an Liberty und dieser Dokumentation liegt bei Christian
  67. Krüger, Berlin. Die Weitergabe des Programms  ist  Grundsätzlich  frei
  68. (Stichwort FREEWARE), dennoch sind folgende Punkte zu beachten:
  69.  
  70.    ∙ Das  Programm  darf  nur  mit  allen  zugehörigen  Dateien und in
  71.      *unveränderter* Form weitergegeben werden.  Entweder  unkomprimiert
  72.      oder als 'Zip'-Archiv. Folgende Dateien müssen folglich im Archiv
  73.      enthalten sein (-> = Ordner):
  74.  
  75.  
  76.  
  77.            LIBERTY -> AUTO        -> LIBERTY.PRG
  78.                       DEVELOP     -> IBMR.H
  79.                                      VDICODES.H
  80.                       DOKU        -> HTML         -> LIBERTY.HTM
  81.                                                      LIBERTY.GIF
  82.                                                      MYSELF.GIF
  83.                                                      UDO_LF.GIF
  84.                                                      UDO_RG.GIF
  85.                                                      UDO_UP.GIF
  86.                                      LIBERTY.TXT
  87.                                      LIBERTY.H
  88.                                      LIBERTY.HYP
  89.                       MCSNDPAT    -> MACSND.DFY
  90.                                      PATCHY.TTP
  91.                       SIZEJAR.TTP
  92.                       GM2CKVDI.TTP
  93.  
  94.  
  95.    ∙ Das Programm darf generell nur  kostenlos  weitergegeben  werden.
  96.      Der  Upload  in gebührenfreie Mailboxen und auf nichtkommerzielle
  97.      FTP-Server ist erlaubt und erwünscht.
  98.  
  99.    ∙ Dem Archiv dürfen  keine  weiteren  Dateien  hinzugefügt  werden,
  100.      insbesondere  keine  Mailboxwerbung  und  keine  Werbung  für PD-
  101.      Serien.  Die  Umbenennung  oder  das  Umpacken  des  Archivs  ist
  102.      unerwünscht.
  103.  
  104.    ∙ Das  Programm darf anderen Programme beigelegt werden - unter der
  105.      Voraussetzung,   da₧   ich   *vor   der   Veröffentlichung* darüber
  106.      informiert  werde  und  ein eindeutiger Hinweis auf die Versions-
  107.      nummer   der   beigefügten    Liberty-Version    erfolgt    (z.B.
  108.      hervorgehoben im 'README').
  109.      Auch hier gilt obiges 'Vollständigkeitsprinzip'!
  110.  
  111.    ∙ Für  die  Weitergabe auf Disketten im Rahmen einer Public-Domain-
  112.      Serie dürfen keine Gebühren verlangt werden, die einen Betrag von
  113.      10 DM (exklusive Versandkosten) überschreiten.
  114.  
  115.    ∙ Die  Weitergabe  via  CD-ROM  darf  nur  dann  ohne  schriftliche
  116.      Genehmigung erfolgen,  wenn  der  Preis  der  CD  pro  bespieltem
  117.      MegaByte 0.1 DM nicht übersteigt!
  118.  
  119.  
  120. 1.1  Haftungsausschlu₧
  121. ======================
  122.  
  123. Trotz sorgfältiger  Entwicklung  und  umfangreichen  Tests  kann keine
  124. Gewährleistung für die Richtigkeit des  Inhalts  dieser  Dokumentation
  125. und die einwandfreie Funktion von "Liberty" übernommen werden.
  126.  
  127. Der Autor kann keine Haftung für irgendwelche direkten oder indirekten
  128. Schäden - einschlie₧lich aber nicht  beschränkt  auf  materielle  oder
  129. finanzielle  -  übernehmen, die durch die Benutzung von "Liberty" oder
  130. dessen Untauglichkeit für einen bestimmten Zweck entstehen.
  131.  
  132.  
  133. 1.2  Warenzeichen
  134. =================
  135.  
  136. Innerhalb dieser Dokumentation wird auf Warenzeichen  Bezug  genommen,
  137. die  nicht  explizit als solche ausgewiesen sind. Aus dem Fehlen einer
  138. Kennzeichnung kann nicht geschlossen werden, da₧ ein Name frei von den
  139. Rechten Dritter ist.
  140.  
  141.  
  142. 1.3  Spenden
  143. ============
  144.  
  145. Wie schon   erwähnt  ist  Liberty  Freeware.  Ich  habe  aber  selbst-
  146. verständlich nichts gegen TOS-Programmentwicklungsstützungskäufe  ;-).
  147. Wer mit also eine motivationssteigernde Spende zukommen lassen möchte,
  148. kann das über die Kontaktadresse tun.
  149. Wer keine Lust hat etwas zu  spenden  und  trotzdem  meine  Motivation
  150. steigern  möchte,  der sollte sich 'Freedom2' kaufen. Dann bekommt man
  151. wenigstens etwas für's Geld ;-) ...
  152.  
  153.  
  154.  
  155. 2  Installation
  156. ***************
  157.  
  158. *(Bitte dieses Kapitel komplett _vor_ der Installation durchlesen!)*
  159.  
  160. Kopieren Sie einfach 'LIBERTY.PRG'  in  den  AUTO-Ordner  ihres  Boot-
  161. Laufwerkes.
  162.  
  163. Nach dem  Kopieren  von  'LIBERTY.PRG'  und  dem folgenden Systemstart
  164. installiert sich dann die Library automatisch.
  165.  
  166.  
  167. 2.1  Bootreihenfolge
  168. ====================
  169.  
  170. 'LIBERTY.PRG' sollte  physikalisch  möglichst  früh   im   AUTO-Ordner
  171. stehen,  auf  jeden  Fall vor (wenn Sie es denn einsetzen) MiNT! Viele
  172. Bootselektoren   (z.B.   XBOOT)   erlauben   es,    konfortabel    die
  173. Bootreihenfolge  der  AUTO-Ordner  Programme zu verändern. Sollten Sie
  174. nicht in Besitz eines solchen Programms sein hilft folgendes:
  175. Betrachten Sie sich  ihren  AUTO-Ordner  im  Desktop  in  unsortierter
  176. Ausgabeart. Hier sollte 'LIBERTY.PRG' möglichst weit vorne stehen. Ein
  177. Ändern  der  Bootreihenfolge  erreichen  Sie  durch  Verschieben   des
  178. kompletten   AUTO-Ordners   in   ein   anderes   Verzeichnis  und  dem
  179. Zurückverschieben   aller   AUTO-Ordner-Programme    in    gewünschter
  180. Reihenfolge  in  den  AUTO-Ordner. (Wer absolut nicht versteht was ich
  181. meine,  kann  mich  unter  später  genannter  Adresse   kontaktieren.)
  182. MagiCMac  Benutzer  müssen  den Umweg über Umbenennen der Dateien oder
  183. Bootreihenfolgedatei (wie in der MagiCMac  Dokumentation  beschrieben)
  184. gehen  um  Liberty  möglichst  früh  zu  initalisieren (MiNT wird wohl
  185. keiner auf Macs benutzen ;-) ).
  186.  
  187.  
  188.  
  189. 3  Was ist Liberty?
  190. *******************
  191.  
  192. Liberty ist eine residente Systemerweiterung. Das bedeutet,  da₧  eine
  193. Vielzahl  von  Funktionen  die  in  Liberty  vorhanden  sind,  anderen
  194. Programmen angeboten  werden.  Das  blo₧e  Vorhandensein  von  Liberty
  195. ändert  nicht viel an Ihrem System, sondern die Funktionen der Library
  196. (oder auch Systemerweiterung, folgend Lib genannt) müssen von  anderen
  197. Programmen  genutzt  werden.  Freedom2  ist z.B. ein solches Programm.
  198. Freedom2 benutzt viele der Liberty-Funktionen, so da₧  es  ohne  diese
  199. Lib nicht lauffähig ist.
  200.  
  201. Nun gibt  es  (oft  zurecht) viele Gegner solcher Systemerweiterungen.
  202. Die Argumente gegen den  Einsatz  einer  residenten  Erweiterung  sind
  203. meistens folgende:
  204.  
  205.    ∙ residente  Systemerweiterungen schlucken permanent Speicher, auch
  206.      wenn sie nicht benötigt werden
  207.  
  208.    ∙ residente Systemerweiterungen  werden  oftmals  nur  von  wenigen
  209.      Programmen  unterstützt  und  viele  Funktionen  der  Erweiterung
  210.      werden nicht benötigt, was dann  ebenfalls  Speicherverschwendung
  211.      bedeutet
  212.  
  213.    ∙ residente  Systemerweiterungen  sind gro₧, klobig und unflexibel;
  214.      bei  Zugriff  von  mehreren  Programmen  auf  eine  Funktion  der
  215.      Erweiterungen   gibt  es  oft  Probleme  oder  der  Rechner  wird
  216.      'gebremst' (Experten mögen mir verzeihen, da₧ ich hier nicht  von
  217.      Semaphoren spreche :-) )
  218.  
  219. Die Vorteile solcher Erweiterungen:
  220.  
  221.    ∙ das  'Rad'  mu₧  nicht  tausendmal neu erfunden werden; Programme
  222.      können die angebotenen Funktionen einfach benutzen ohne zu wissen
  223.      was  sie  (die  Funktionen  ;-))  genau machen (daraus folgt eine
  224.      wesentlich kürzere Entwicklungszeit und (hoffentlich)  mehr  Spa₧
  225.      am  Programmieren,  da  man  sich  auf  die  programmspezifischen
  226.      Probleme konzentrieren kann)
  227.  
  228.    ∙ benutzen viele Programme  die  Systemerweiterung  gibt  es  einen
  229.      Speicherspareffekt: die von vielen Programmen benötigten Routinen
  230.      der Systemerweiterung sind nur einmal im Speicher  und  nicht  in
  231.      jedem der Programme extra vorhanden.
  232.  
  233. Liberty hat  natürlich  diese  Vorteile  und entkräftet zusätzlich mit
  234. seiner Art des Aufbaus die Nachteile:
  235.  
  236.    ∙ Liberty verbraucht weniger als  30kB  Speicher!  (ist  also  kein
  237.      'grober  Klotz'  wie  andere  Libs  die gleich 300kB oder mehr an
  238.      Speicher verschlingen)
  239.  
  240.    ∙ Liberty konzentriert  sich  auf  die  wesentlichsten  Mankos  des
  241.      Betriebsystems  und  beseitigt  sie;  es ist keine GEM-Interface-
  242.      Library! (wäre wohl  auch  sinnlos  zu  versuchen  alle  GEM-Lib-
  243.      Programmier- Süppchen zu einem Standard zu vereinigen ;-) )
  244.  
  245.    ∙ fast  alle  Funktionen  der  Lib werden von Freedom2 benutzt (wer
  246.      kommt schon ohne aus? ;-) ); von Speicherverschwendung  kann  bei
  247.      Einsatz  von  Freedom2 folglich nicht gesprochen werden (bei 30kB
  248.      ist dieses ohnehin schon  ziemlich  unglaubwürdig);  bereits  bei
  249.      Einsatz  eines  zweiten  Programms welches Liberty benutzt, tritt
  250.      der gewünschte Speicherspareffekt ein
  251.  
  252.    ∙ Liberty besteht zu 90%  aus  hochoptimierten  Assembler-Routinen;
  253.      nur  so  konnte  die  Kürze  und  Geschwindigkeit der Erweiterung
  254.      erreicht werden
  255.  
  256.    ∙ alle Funktionen von Liberty sind reentrant und 90% der Funktionen
  257.      sind   'Multi-Threading'-fähig  (d.h.  mehrere  Programme  können
  258.      gleichzeitig eine Funktion von Liberty benutzen ohne  sich  dabei
  259.      gegenseitig zu stören oder zu blockieren)
  260.  
  261. Überzeugt?
  262.  
  263.  
  264.  
  265. 4  Was bietet Liberty?
  266. **********************
  267.  
  268. Liberty setzt   sich   aus   Funktionen  mit  den  unterschiedlichsten
  269. Aufgabengebieten   zusammen.   Obwohl   daher   das   Funktionsangebot
  270. vielleicht  etwas  zusammengewürfelt  scheint,  ist  dem nicht so. Wie
  271. schon  erwähnt  versucht  Liberty   die   nervensten   Schwächen   des
  272. Betriebsystems    auszugleichen:    Funktionen,   die   immer   wieder
  273. programmiert oder eingebunden werden müssen und  die  viele  Programme
  274. benötigen.  Das diese Schwächen nicht konzentriert an einer Stelle des
  275. Betriebssystems auftreten ist logisch. So besteht die Lib  intern  aus
  276. folgenden Teilen:
  277.  
  278.      XBIOS-Erweiterung bzw. Nutzung:
  279.  
  280.         ∙ CJar-kompatibele    XBIOS    Erweiterung,    die    auf
  281.           komfortabele Weise das Erzeugen, Abfragen  und  Löschen
  282.           von 'Cookies' ermöglicht
  283.  
  284.         ∙ Soundfunktionen    welche    eine    rechnerunabhängige
  285.           Tonausgabe garantieren
  286.  
  287.      Erweiterungen mit GEMDOS-Charakteristik:
  288.  
  289.         ∙ eine sehr effiziente und  schnelle  Speicherverwaltung,
  290.           die   privaten,  globalen,  normalen  und  alternativen
  291.           Speicher  (wenn  nötig)  unterscheidet   und   kleinere
  292.           Speicherblöcke  in  grö₧eren  verwaltet  sowie  für ein
  293.           dauerhaftes, sicheres 'malloc' für ACCs unter SingleTOS
  294.           sorgt
  295.  
  296.         ∙ eine  Routine  zum  Laden  einer  Datei in einen Puffer
  297.           (sollte die Datei mit ATOMIK 3.5 gepackt sein, so  wird
  298.           diese automatisch ausgepackt!)
  299.  
  300.      Erweiterungen mit VDI-Charakteristik:
  301.  
  302.         ∙ eine Vielzahl von sehr schnellen Rastergrafikfunktionen
  303.           (Laden von XIMG/GIF, Skalieren etc.)
  304.  
  305.         ∙ Vektorgrafikfunktionen     (Translation,      Rotation,
  306.           Skalierung,  ...) - damit sind endlich auf einfache und
  307.           komfortabele Weise Vektoricons realisierbar
  308.  
  309.      AES-Unterstützung:
  310.  
  311.         ∙ Funktionen zum einfachen Einhängen  von  Funktionen  in
  312.           einzelne AES- Calls (mit Applikationszustandslisten!)
  313.  
  314.         ∙ LIBERTY  ist  in  der  Lage  (auch  wenn  kein Programm
  315.           Liberty    benutzt)    defekte     AES-Calls     (nicht
  316.           initalisiertes  Global-Field) zu reparieren! Damit wird
  317.           u.a. erreicht, da₧ z.B. der Dateiselektor Freedom  auch
  318.           von ('Schweine'-)Programmen aufgerufen werden kann, bei
  319.           denen  sonst  die  normale  Dateiauswahlbox  erscheinen
  320.           würde!
  321.  
  322.  
  323. 4.1  CJar-Erweiterung
  324. =====================
  325.  
  326. Liberty legt  beim Start im AUTO-Ordner automatisch einen 'Cookie-Jar'
  327. an. Programme die dieses sonst  übernommen  haben  ('CJARxxx.*'  etc.)
  328. sind  damit  überflüssig! Ebenfalls, das für den MiNT Aufsatz 'Geneva'
  329. benötigte 'JARxxx.PRG' ist unnötig. In Liberty  sind  die  Fähigkeiten
  330. dieses  Programms  enthalten! (JARxxx wurde getestet, für gut befunden
  331. und die Funktionalität (erweitert) aufgenommen.)
  332.  
  333. Die Grö₧e  des  'Cookie-Jar'  kann  mit   dem   beigefügten   Programm
  334. 'SIZEJAR.TTP'  verändert  werden.  In  der  Grundeinstellung wird beim
  335. Start  von  Liberty  für  32  zusätzliche  'Kekse'  (zu  den   aktuell
  336. vorhandenen  Systemcookies)  Platz  geschaffen.  Diesen  Wert kann man
  337. wiefolgt ändern:
  338.  
  339.   1. Man kopiert 'SIZEJAR.TTP' in das Verzeichnis in dem 'LIBERTY.PRG'
  340.      steht (also normalerweise in den AUTO-Ordner).
  341.  
  342.   2. Man  startet  das  Programm  durch  Doppelklick und gibt dann die
  343.      gewünschte Anzahl an Keksen als Zahl in den erscheinenden  Dialog
  344.      ein.
  345.  
  346.   3. Nach  Beendigung  des  Programms mu₧ man 'SIZEJAR.TTP' wieder aus
  347.      dem AUTO-Ordner entfernen.
  348.  
  349.   4. Beim  Neustart  des  Systems  berücksichtigt  dann  Liberty   die
  350.      angegebene Anzahl. Fertig!
  351.  
  352. In der  Regel  sollte  dieses  Vorgehen  jedoch  unnötig  sein,  da 32
  353. (zusätzliche)    Kekse    ausreichen    und    auch    keine     gro₧e
  354. Speicherverschwendung darstellen.
  355.  
  356.  
  357. 4.2  Soundfunktionen
  358. ====================
  359.  
  360. Liberty bietet  eine  komfortable  und  *einheitliche* Schnittstelle zur
  361. Soundausgabe. Mit Hilfe dieser Erweiterung können (bald) alle Benutzer
  362. von  Atari-Kompatiblen  in  den  Genu₧  eines  klangvollen Erlebnisses
  363. kommen. Die Zeiten bei denen Programme die Soundausgabe auf  bestimmte
  364. Systeme   einschränken,   oder  diese  nur  mit  /käuflichen/ Programmen
  365. garantieren, sollten damit für immer vorbei sein.
  366.  
  367. Realisiert wurde die Soundausgabe  schon  für  Rechner  mit  DMA-Sound
  368. ((Mega)STE/TT),  FalconO3O  sowie  für  Apple-Rechner  mit 'MacSound'.
  369. Rechner mit PSG-(Emulation) folgen demnächst.
  370. Bisher hatte ich noch keinen Kontakt zu Medusen oder dem Hades,  halte
  371. hier  aber  eine  Anpassung für die exisiterende Soundkarte ebenso wie
  372. für PC's mit XBIOS-Treiber möglich (...legt  STARTRACK  ein  McSn-Keks
  373. an?  -  Dann  funktioniert  auch  mit  dieser  Karte  schon die Sound-
  374. Ausgabe...).
  375.  
  376. Wichtig ist nur, da₧ sich  ein  Anwenderprogrammierer  keine  Gedanken
  377. mehr   um   evt.   Soundfähigkeiten   des  Rechners  machen  mu₧.  Das
  378. Vorhandensein   von   Liberty   garantiert    ein    Ansprechen    der
  379. Soundfunktionen, auch wenn diese ohne Treiber funktionslos bleiben.
  380.  
  381. _*Zum Patchprogramm für MacSound (nur für Apple-Rechner):*_
  382. MacSound  (ein Autoordnerprogramm welches MagiCMac beiliegt und XBIOS-
  383. Soundfunktionen zur Verfügung stellt) ist leider nicht so mächtig  wie
  384. es anderen Programmen gegenüber vorgibt. Um korrektes Funktionieren zu
  385. gewährleisten, ist es daher nötig MacSound zu patchen. Eine Patchdatei
  386. mit   dem   entsprechenden   Patchprogramm  befindet  sich  im  Ornder
  387. 'MCSNDPAT'.
  388.  
  389. Um MacSound zu patchen, mu₧ man folgenderma₧en vorgehen:
  390.  
  391.    ∙ Zunächst  'MACSND.PRG'  (mü₧te  im  Auto-Ordner  liegen)  in  das
  392.      'MCSNDPAT'-Verzeichnis verschieben.
  393.  
  394.    ∙ Nun  die  Datei  'MACSND.DFY'  auf  das  Programm 'PATCHY.TTP' im
  395.      gleichen Verzeichnis ziehen und fallenlassen (Drag&Drop).
  396.  
  397.    ∙ Anschlie₧end das Programm  'MACSND.PRG'  aus  diesem  Verzeichnis
  398.      (welches   nun   angepasst   ist)   wieder   in  den  Auto-Ordner
  399.      verfrachten. MagiCMac neustarten, fertig!
  400.  
  401. Falls irgendwelche Fehler auftreten  sollten,  handelt  es  sich  wohl
  402. nicht  um  die  Version  1.0  von  MacSound  (nur  diese kann gepatcht
  403. werden)! Sollte man eine ältere Version haben,  unbedingt  die  neuere
  404. besorgen.  Ob eine neuere Version als die 1.0 existiert (wenn ja bitte
  405. melden!), kann ich nicht sagen, mir ist jedenfalls keine bekannt.  Der
  406. Patch setzt die Versionsnummer übrigens auf 1.01 herauf!
  407. /Bei  Fragen  oder  Hinweisen  zu diesem Thema bitte die Kontaktadresse/
  408. /benutzen!/
  409.  
  410. Nach dem Patchen  wurde  im  Verzeichnis  'MCSNDPAT'  das  Verzeichnis
  411. 'PATCHED' angelegt, welches die Ursprungsversion von MacSound enthält.
  412. Eine Sicherungskopie der Originals wird also automatisch erzeugt.
  413.  
  414. /An dieser Stelle Dank an  Christian  Wempe  &  Holger  Weets  für  ihr/
  415. /Patchprogramm  'DIFFY'  bzw.  'PATCHY'.  Ich  hoffe es ist Ok, da₧ ich/
  416. /'PATCHY'  einfach  so  (einzeln  -  um  Verwirrung  zu   vermeiden...)/
  417. /beigefügt  habe  (in  eurer Doku steht zu diesem Thema leider nichts),/
  418. /schlie₧lich ist Liberty ja auch  Freeware.  Das  komplette  Archiv  zu/
  419. /'Diffy 2' sollte man in jeder guten 'Maus / ftp-site' finden./
  420.  
  421. Ein kleiner Soundtest der Liberty-Funktionen gefällig?
  422. Den Info-Dialog von Freedom2 aufrufen (Klick mit der rechten Maustaste
  423. auf das Freedom2-Logo bei *installiertem* Konfig.CPX)  und  anschlie₧end
  424. das gro₧e Freedom2-Logo im Info-Dialog anklicken...
  425. Wenn  sie  einen  (Mega)STE/TT/FalconO3O  oder MagiCMac mit gepatchtem
  426. MacSound benutzen, dann mü₧ten sie was 'Nettes' gehört haben...
  427.  
  428.  
  429. 4.3  Vektorgrafikfunktionen
  430. ===========================
  431.  
  432. Vektorzeichensätze und Bezierkurven sollten  heutzutage  eine  Selbst-
  433. verständlichkeit   sein.   So   werden  diese  Befehle  auch  von  den
  434. Vektorgrafikfunktionen in Liberty  ordnungsgemä₧  verarbeitet.  Leider
  435. ist  das  Original-VDI (der Betriebssystemteil der für die Ausgabe von
  436. Grafiken verantwortlich ist)  nicht  in  der  Lage  diese  Befehle  zu
  437. verarbeiten und ignoriert sie völlig.
  438. Das  bedeutet,  da₧  wenn  ein  Programm die Vektorgrafikdarstellungs-
  439. funktionen  von  Liberty  benutzt  und   die   darzustellende   Grafik
  440. Bezierkurven und/oder Vektorzeichensätze enthält, das Ergebnis auf dem
  441. Bildschirm nicht der Originalgrafik  entspricht.  Dieses  trifft  aber
  442. selbstverständlich nur für VDIs zu, die diese Befehle nicht verstehen!
  443. Wie  alle  Funktionen von Liberty sind auch die Vektorgrafikfunktionen
  444. auf Geschwingidkeit getrimmt. Bei der Vektorgrafikausgabe  wurde  z.B.
  445. ein  gro₧er  Geschwindigkeitsvorteil dadurch erreicht, da₧ die Ausgabe
  446. _direkt_ an das VDI geleitet wird und die Befehle nicht erst durch einen
  447. TRAP  geschickt werden! Das dabei verwendete Verfahren ist keinenfalls
  448. 'schweinisch' sondern bekannt! (Für die Experten: Man läd das Register
  449. D0  mit -1 und macht einen TRAP #2 Aufruf. Als Ergebnis erhält man die
  450. Einsprungsadresse des VDI-Dispatchers.)
  451. VDI-Erweiterungen,   die   das    VDI    hinsichtlich    z.B.    einer
  452. Bezierkurvenausgabe  erweitern,  müssen  dieses Verfahren unterstützen
  453. (Profibuch, 10. Auflage, Seite 298 unten)!
  454.  
  455. 'NVDI' (da sauber) hat damit keine  Probleme  und  in  Verbindung  mit
  456. diesem  VDI  klappt  die  Ausgabe  obiger Befehle wunderbar (auch wenn
  457. 'NVDI' nur  als  GDOS  eingesetzt  wird)!  Leider  kann  man  das  vom
  458. 'SpeedoGDOS'   nicht  behaupten.  Diese  VDI-Erweiterung  versäumt  es
  459. offensichtlich obiges Verfahren zu unterstützen und somit  ist  dieses
  460. Ausgabesystem   für   Liberty   praktisch   nicht   vorhanden   (keine
  461. Bezierkurven und keine Vektorzeichensätze!!!).
  462.  
  463. Ich wei₧,  da₧  diese  Tatsache  sicherlich  einige   Leute   ziemlich
  464. verärgert und möchte deshalb hier Forderungen nach 'konformer' Ausgabe
  465. über den TRAP vorbeugen:
  466.  
  467.    ∙ die oben beschriebene Vorgehensweise ist konform, da sie  bekannt
  468.      ist  und  es  offensichtlich  auch ein Ausgabesystem gibt (NVDI),
  469.      welches  damit  keine  Probleme   hat;   Liberty   ist   folglich
  470.      unschuldig,  das Problem liegt beim unvollständigem Ausgabesystem
  471.      (SpeedoGDOS)
  472.  
  473.    ∙ ein Abändern der Liberty-Vektorgrafikausgabe brächte  unzumutbare
  474.      Geschwindigkeitseinbu₧en     für     Benutzer    mit    konformen
  475.      Ausgabesystemen
  476.  
  477.    ∙ ich  habe   wenig   Lust   die   Fehler   anderer   Programmierer
  478.      auszubügeln...
  479.  
  480. Meine Empfehlung an SpeedoGDOS-Fanatiker die programmieren können:
  481. Programmiert  ein  Utility  welches  sich in den TRAP #2 hängt, die -1
  482. abfängt und die Adresse des SpeedoGDOS-Dispatchers zurückliefert. Dann
  483. klappt's auch mit Liberty... ;-)
  484.  
  485.  
  486. 4.3.1  Der Konvertierer GM2CKVDI
  487. --------------------------------
  488.  
  489. Um GEM-Metafiles  in  das  Liberty-Vektorformat  umzuwandeln  ist  ein
  490. Konvertierer beigefügt (GM2CKVDI.TTP). Das  Liberty-Vektorgrafikformat
  491. kann  mehrere  einzelne  Grafiken enthalten, welche es interessant für
  492. Vektoricons machen.
  493.  
  494. Da GEM-Metafiles oft sehr 'gro₧zügig' und  unpräzise  erzeugt  werden,
  495. ist  es nicht ausgeschlossen, da₧ der Konvertierer bei einigen Dateien
  496. ziemlich komische Ergebnisse erzeugt. Dieses ist abhängig vom Programm
  497. mit  dem die Dateien erzeugt wurden. Ausgerichtet ist der Konvertierer
  498. auf Dateien die mit 'Kandinsky (2.01)' kreiert wurden. Hiermit  werden
  499. korrekte Ergebnisse erzielt.
  500.  
  501. _Der Aufruf:_
  502. GM2CKVDI -[cpnswm16h?] metafilename
  503.  
  504. Die übergebene  Datei  _mu₧_ mit  '.GEM'  enden.  Die  Zieldatei wird im
  505. Verzeichnis der Quelldatei erzeugt  und  erhält  je  nach  angegebenem
  506. Zieltyp die Dateiendung '.CVD' oder '.C'.
  507.  
  508. _Die Optionen:_
  509. Für den Übersetzungsvorgang existieren einige Optionen:
  510.  
  511.  -h,-help,-?  zeigt eine kurze Hilfe mit Erläuterung der Optionen an
  512.  
  513.  -n           setzt im Header der Zieldatei den Namen der Grafik.
  514.               Dieser   Name   kann  auch  über  die  Grafik  darselbst
  515.               definiert sein, indem die Grafik mit dem speziellen Text
  516.               '((CN))/NAME/' versehen wird. Dieser Textbefehl wird _nicht_
  517.               übersetzt   und   dient   lediglich   zum   Setzen   des
  518.               Vektorgrafiknamens im Zieldateikopf.
  519.  
  520.  -s #         setzt   den  Grö₧enma₧stab.  Dieser  legt  die  maximale
  521.               Ausdehnung der zu erzeugenden  Datei  fest.  Mit  diesem
  522.               Wert   wird   natürlich   auch   die  Quantisierung  der
  523.               Grafikkoordinaten  in  der   Zieldatei   bestimmt.   Der
  524.               Defaultwert ist 255. Der übergebene Wert darf zwischen 1
  525.               und 32000 liegen.
  526.  
  527.  -c           die Zieldatei wird nicht als Binärfile  sondern  als  C-
  528.               Quellcode  abgelegt.  Besonders dann praktisch, wenn man
  529.               die Vektordaten in ein Programm mit einbinden möchte. Um
  530.               die  Vektordaten  einbinden  zu können, benötigt man die
  531.               '.h'-Dateien im Ordner 'DEVELOP'.  Die  Dateiendung  der
  532.               Zieldatei ist in diesem Modus '.C'.
  533.  
  534.  -m           die  angegebene Quelldatei enthält mehrer Vektorgrafiken
  535.               die    umgewandelt    werden    sollen     (z.B.     bei
  536.               Vektoricondateien).   Der   Konvertierer   erkennt   die
  537.               einzelnen Vektorgrafiken in einer solchen  Datei  daran,
  538.               da₧  die  diversen  Vektorgrafikobjekte  als 'Top-Level-
  539.               'Gruppe definiert worden sind  (Kandinsky:  Gruppieren).
  540.               Als  'Top-Level'  bezeichne ich alle Gruppen die direkt,
  541.               ohne  weitere  Gruppenauflösung  in   der   Vektorgrafik
  542.               erreichbar   sind.   Diese   'Top-Level-Gruppen'  dürfen
  543.               folglich problemlos in ihrer (internen) Struktur weitere
  544.               Objektgruppen  enthalten.  Top-Level-Gruppen werden dann
  545.               jeweils   in    der    Zieldatei    als    eigenständige
  546.               Vektorgrafiken   verkettet.  Da  es  sinnvoll  ist,  den
  547.               Grafiken eigene Namen zu verleihen und über  die  Option
  548.               -n  nur ein Name gesetzt werden kann, solte man in jeder
  549.               Gruppe  den  Spezialtext  '((CN))/NAME/'  ablegen  um  die
  550.               einzelne Grafik später identifizieren zu können.
  551.               /Die  Vorhergehensweise  wird  klarer, wenn man eine GEM-/
  552. /              Meta-Datei  des   Dateiselektors   Freedom2   untersucht/
  553. /              (liegen   in   der   Freedom2-Distribution   im   Ordner/
  554. /              'VICON\SRC\')./
  555.  
  556.  -16          Farbfixierung nur  mit  den  ersten  16  (Standard-)VDI-
  557.               Farben  vornehmen.  Beim  Umwandlungsvorgang  werden die
  558.               Farben  der  GEM-Metadatei  die  noch  als   Farbanteile
  559.               beschrieben  sind  in  absolute VDI-Indizes umgewandelt.
  560.               Dieses geschieht nach dem Verfahren 'Best-Fit'  mit  der
  561.               aktuellen  Farbpalette.  Da  es nun nicht ausgeschlossen
  562.               ist, da₧ die benutzten Farben der  GEM-Metadatei  leicht
  563.               von  den  16  unteren  Systemfarben  abweichen  und  als
  564.               bestpassenste Farben Farben mit einem Index >16 gefunden
  565.               werden,  kann man die Suche auf die ersten 16 Farben mit
  566.               diesem Schalter beschränken. Da die ersten 16 Farben von
  567.               DR festgeschrieben sind, kann man so eine 'farbportable'
  568.               CVD-Datei erzeugen.
  569.  
  570.  -w           Anzeige  des  Konvertierungsvorgangs.  Alle  Übersetzten
  571.               VDI-Befehle werden auf dem Bildschirm ausgegeben.
  572.  
  573. Hauptsächtlich ist  der  Konvertierer (wie man vielleicht festgestellt
  574. haben wird) für ambitionierte Anwender und Programmierer interessant.
  575.  
  576.  
  577.  
  578. 5  An die programmierenden Zunft
  579. ********************************
  580.  
  581. Sie sind Programmierer, die Featureliste von Liberty  hat  Sie  locker
  582. vom  Hocker  geworfen und Sie sagen sich:"Eine tolle Library, die will
  583. ich auch unterstützen!"
  584.  
  585. /Kein Problem!/
  586.  
  587. Einzige Voraussetzung um die Library benutzen zu dürfen:  Ich  erhalte
  588. ein  kostenloses  Exemplar  des Programms welches die Library benutzt!
  589. Software die den Status 'Public Domain',  'Freeware'  oder  'Fairware'
  590. hat, ist davon natürlich ausgenommen ;-).
  591.  
  592. In der  letzten  Doku  zu  Liberty  habe  ich noch von einer seperaten
  593. Dokumentation für  Programmierer  gesprochen.  Da  die  Resonanz  aber
  594. unerwartet  gro₧  war  und  ich mir die Arbeit zwei Dokumentationen zu
  595. pflegen ersparen möchte, wird die Beschreibung der  Liberty-Funktionen
  596. *schrittweise* in diese Doku eingeflechtet.
  597.  
  598. /Was sie folgend als Beschreibung finden ist *keineswegs* vollständig!!!/
  599.  
  600. Man kann  aber  schon damit beginnen seine Programme anzupassen, um so
  601. in den Genu₧ der Liberty-Funktionen zu  gelangen.  Alles  was  folgend
  602. dokumentiert  ist,  wird  sich  *nicht* mehr  ändern und kann demzufolge
  603. problemlos verwendet werden.
  604.  
  605.  
  606. 5.1  Allgemeines
  607. ================
  608.  
  609. Ich möchte an dieser Stelle nicht alles wiederholen was  bereits  oben
  610. beschrieben  wurde.  Daher nur nochmal ein Kurzüberblick über das, was
  611. Programmierer wissen müssen:
  612.  
  613.    ∙ Alle Liberty-Funktionen sind reentrant! Man braucht sich folglich
  614.      *keine* Gedanken darüber machen, ob eine Funktion schon von anderen
  615.      Programmen/Threads benutzt wird!
  616.  
  617.    ∙ Bevor man eine  Liberty-Funktion  aufruft  sollte  man  lediglich
  618.      sicherstellen, da₧ die Funktion genügend Stack zur Verfügung hat.
  619.      Genügend hei₧t dabei *1k*! Mehr ist auf keinen Fall  nötig,  dieser
  620.      Platz sollte aber bereitgestellt werden.
  621.  
  622.    ∙ Liberty verändert keine Registerwerte in einer Funktion.
  623.  
  624.    ∙ Wenn  eine  Liberty-Funktion  einen  Rückgabewert liefert, sollte
  625.      dieser auch geprüft  werden,  um  die  korrekte  Abarbeitung  der
  626.      Funktion festzustellen.
  627.  
  628.    ∙ AUF  JEDEN  FALL  nur  dokumentierte Funktionen und Eigenschaften
  629.      nutzen!
  630.  
  631.    ∙ Jeden Hinweis auf Umgang mit Funktionen *genaustens* beachten.
  632.      Wenn eine Variable als 'Read-Only' gekennzeichnet  wurde,  sollte
  633.      man sie auch nicht überschreiben!
  634.  
  635.    ∙ Um  Doppeldeutungen  zu  vermeiden:  Ein Programm welches Liberty
  636.      benutzt wird folgend  immer  als  'Applikation'  bezeichnet.  Das
  637.      sollte man im Hinterkopf behalten...
  638.  
  639.  
  640. 5.1.1  Parameterübergabe
  641. ------------------------
  642.  
  643. Für die Parameterübergabe gelten die Regeln von Turbo C / Pure C:
  644. _Parameterübergabe Pure C (Auszug aus der Online Hilfe von PureC)_
  645.  
  646.    ∙ Die  ersten  drei Variablen vom Typ char, int oder long werden in
  647.      den Registern D0, D1, D2 übergeben.
  648.  
  649.    ∙ Die ersten zwei Adressparameter (Pointer) werden in den Registern
  650.      A0 und A1 übergeben.
  651.  
  652.    ∙ Weitere Parameter, die keinen Platz mehr in den Registern D0, D1,
  653.      D2, A0 A1 finden werden über den Stack übergeben.
  654.  
  655.    ∙ Parameter  werden  in  der  Reihenfolge  von  rechts  nach  links
  656.      übergeben.
  657.  
  658. _Beispiel:_
  659.  
  660.  
  661. extern void lbf(int x1, int y1, int x2, int y2, int *l, int *b, int *f);
  662. main()
  663. {
  664.     int x1 = 10, y1 = 10, x2 = 20, y2 = 20, l, b, f;
  665.     lbf(x1, y1, x2, y2, &l, &b, &f);
  666. }
  667.  
  668. Da mehr  Werte-,  als  auch  Adress-Parameter  an  die  Funktion "lbf"
  669. übergeben werden, als Register zur  Verfügung  stehen,  benötigen  wir
  670. also  in  jedem Fall den Stack. Der vierte Werte-Parameter mu₧ auf dem
  671. Stack abgelegt  werden.  Ebenso  findet  der  dritte  Adress-Parameter
  672. keinen  Platz  in  den  Registern,  so  da₧  auch dieser auf dem Stack
  673. abgelegt werden mu₧.
  674.  
  675. In den Registern befinden sich:
  676.  
  677.      D0: x1 (Wert von x1)
  678.      D1: y1 (Wert von y1)
  679.      D2: x2 (Wert von x2)
  680.      A0: &l (Adresse der Variablen l)
  681.      A1: &b (Adresse der Variablen b)
  682.  
  683.  
  684. Auf dem Stack befinden sich:
  685.  
  686.      &f (hi) (höchstwertiges Wort im Stack)
  687.      &f (lo)
  688.      y2 (Wert von y2)
  689.      Return- (Rücksprungadresse)
  690.      Adresse (Stackpointer zeigt hierauf)
  691.  
  692.  
  693. Der Adress-Parameter f wird  nach  der  Regel  "von-rechts-nach-links"
  694. zuerst  auf  den  Stack  gelegt.  Danach kommt der Wert von y2 auf den
  695. Stack.   Bitte   beachten   Sie,   da₧   die   Rücksprungadresse   des
  696. Unterprogrammes  als letzter "Parameter" auf den Stack gelegt wird, so
  697. da₧ die Parameter im Stack ab dem Offset 4 anfangen. y2 (Offset 4), &f
  698. (Offset 6)!
  699.  
  700. In C  räumt  die  aufrufende  Funktion  nach  dem Aufruf die Parameter
  701. selbst vom Stack (z.B. mit ADDQ.W #8,A7", nach einem Aufruf  mit  zwei
  702. Adressparametern).  Dies  erübrigt sich natürlich, wenn alle Parameter
  703. in Registern übergeben wurden.
  704.  
  705.  
  706. 5.2  Der Liberty-Cookie & XBIOS-Erweiterung
  707. ===========================================
  708.  
  709. Liberty legt beim Start im Auto-Ordner einen Cookie-Jar an und erzeugt
  710. einen  Keks  namens  'Lity' dessen Inhalt auf eine Struktur weist, die
  711. dem  beigefügten  '.h'-File  und  dem  entsprechendem   Kapitel   (Die
  712. Liberty-Struktur) entnommen werden kann.
  713.  
  714. Da Liberty   XBIOS-Funktionen   installiert,  die  einen  komfortablen
  715. Zugriff auf den Cookie-Jar ermöglichen, kann auf sehr einfache Art und
  716. Weise das Vorhandensein von Liberty festgestellt werden.
  717.  
  718. Dazu ein Ausschnitt aus dem '.h'-File:
  719.  
  720.  
  721. #define CJar_xbios      0x434A            /* "CJ" */
  722. #define CJar_OK         0x6172            /* "ar" */
  723. #define COOKIE_LIBERTY  0x4C697479L       /* "Lity" */
  724. #define CJar( mode, cookie, value )   xbios(CJar_xbios,mode,cookie,value)
  725.  
  726.  
  727. Folgendes 'Programm'  prüft  somit, ob die Systemerweiterung vorhanden
  728. ist:
  729.  
  730. Liberty_Cookie *libfuncs;
  731.  
  732. if (CJar(0, COOKIE_LIBERTY, &libfuncs)==CJar_OK)
  733. {
  734.     printf("LIBERTY vorhanden!!!");
  735. }
  736. else
  737. {
  738.     printf("LIBERTY nicht vorhanden!!!");
  739. }
  740.  
  741.  
  742. Bevor ein Programm Liberty benutzt, sollte auf jeden Fall durch obiges
  743. Verfahren  festgestellt werden ob Liberty überhaupt vorhanden ist! Ist
  744. dies nicht der Fall mu₧ das Programm gegebenenfalls terminiert werden.
  745.  
  746. _Zu den verschiedenen Modi:_ Der erste Parameter der  dem  Makro  'CJar'
  747. übergeben  wird,  bestimmt  den Modus der Cookie-Aufrufs. Im Gegensatz
  748. zum Original 'Cookie Jar Manager' von Dan Wilga (Liberty ist voll  zum
  749. 'JARXX' kompatibel, man benötigt es also nicht mehr), existieren sogar
  750. 3 Modi zur Keks-Manipulation:
  751.  
  752.    ∙ Modus 0:
  753.      Ermittelt den Wert des Kekses und  legt  in  an  der  angegebenen
  754.      Adresse  ab. Übergibt man für 'value' einen NULL Pointer, so wird
  755.      lediglich die Existenz des Kekses überprüft.
  756.      Bei erfolgreicher  Ermittlung  des  Kekses,  liefert  der  Aufruf
  757.      0x6172 (="CJar_OK") zurück sonst einen anderen Wert.
  758.  
  759.  
  760.    ∙ Modus 1:
  761.      Erzeugt einen neuen Keks (cookie). Value *zeigt* auf einen Wert der
  762.      in den Jar eingetragen  wird.  WICHTIG!  Es  wird  nicht  'value'
  763.      eingetragen  sondern  der  Wert  auf  den  'value'  weist!!!  Bei
  764.      Übergabe eines NULL-Pointers wird 0 als Kekswert eingetragen.
  765.      Existiert  der  Keks  bereits,  so   wird   sein   alter   Inhalt
  766.      überschrieben!
  767.      Die  Funktion  liefert "CJar_OK" bei erfolgreicher Eintragung. -1
  768.      wird für den Fall geliefert, da₧ der Cookie-Jar voll ist!
  769.  
  770.    ∙ Modus 2:
  771.      Entfernt den Keks 'cookie' aus dem Jar. Der Wert von 'value'  ist
  772.      egal.  Liefert bei erfolgreicher Entfernung "CJar_OK" sonst einen
  773.      anderen Wert.
  774.  
  775.  
  776. 5.3  Die Liberty-Struktur
  777. =========================
  778.  
  779. Der Inhalt des Liberty-Cookies weist auf folgende Struktur:
  780.  
  781. typedef struct
  782. {
  783.         WORD            version;        /* Hexadezimale Version. (0x0100 = 1.0)  */
  784.         WORD            gdriver;        /* Unterstützes Grafiksystem (READ_ONLY!):
  785.                                                  * 0 = keins -> Standardformat (SLOW!!!)
  786.                                                  * 1 = ATARI Grafiksystem (IBPs)
  787.                                                  * 2 = NOVA Grafikkarten (Intel-Zahlenformat)
  788.                                                  * 3 = andere Grafikkarten/Mac? (Motorola)
  789.                                                      * Wert ist bis zur Version 1.5 ungültig!!! */                                               */
  790.         Lity_Utils  *misc_funcs;/* Zeiger auf diverse Routinen */
  791.         Lity_GDExt      *gd_funcs;      /* Zeiger auf die 'GEMDOS'-Erweiterungen */
  792.         Lity_VDIExt     *vdi_funcs; /* Zeiger auf die 'VDI'-Erweiterungen    */
  793.         Lity_AESExt *aes_funcs; /* Zeiger auf die 'AES'-Erweiterungen    */
  794.         Lity_SNDExt *snd_funcs; /* Zeiger auf Sound-Funktionen */
  795.  
  796. } Liberty_Cookie;
  797.  
  798. Neben der  Versionsnummer  und   dem   Code   für   das   unterstützte
  799. Grafiksystem  findet  man  hier fünf weitere Zeiger auf Strukturen die
  800. folgend erläutert werden.
  801.  
  802.  
  803. 5.4  Die Utility-Funktionen
  804. ===========================
  805.  
  806. Die Funktionen  die  man  hier  vorfindet  lassen  sich  nicht   einer
  807. bestimmten  Kategorie  unterordnen.  Die  Struktur  enthält  mehr oder
  808. weniger 'zusammengewürfelte' Funktionszeiger:
  809.  
  810. typedef struct
  811. {
  812.         LONG     (*Init_Liberty)(WORD g_handle);
  813.         void     (*lock_Sema)(BYTE *semaphore);
  814.         void     (*release_Sema)(BYTE *semaphore);
  815.         void     (*memcpy)(void *dest, void *src, ULONG len);
  816.         void     (*memset)(void *dest, int val, ULONG len);
  817. } Lity_Utils;
  818.  
  819.  
  820. 5.4.1  Init_Liberty();
  821. ----------------------
  822.  
  823. bekommt als  Eingabeparameter  das  Handle  der  physikalischen   VDI-
  824. Workstation, in der Form wie es vom AES-Call 'graf_handle()' geliefert
  825. wird. Der Rückgabewert ist reserviert.
  826. *Diese Funktion ist vor  allen  anderen  Liberty-Funktionen  aufzurufen*
  827. *(abgesehen von der XBIOS-CJar-Erweiterung)!*
  828. Da  der  Aufruf  von graf_handle() unbedingt _nach_ einem appl_init() zu
  829. erfolgen hat (Stichwort: korrekte Applikationsprogrammierung), mu₧ der
  830. appl_init()-Aufruf logischerweise vor dem graf_handle()-Aufruf erfolgt
  831. sein.  Die  Reihenfolge  der  Initalisierung   kann   man   auch   dem
  832. Programmbeispiel entnehmen.
  833.  
  834.  
  835. 5.4.2  lock_Sema();
  836. -------------------
  837.  
  838. Setzt (z.B.  für  Prozesskommunikation) eine Semaphore, dessen Adresse
  839. übergeben wird. Wer mit dem Begriff 'Semaphore' nichts anfangen  kann,
  840. wird diese Funktion wahrscheinlich auch nicht benötigen.
  841.  
  842.  
  843. 5.4.3  release_Sema();
  844. ----------------------
  845.  
  846. Gibt eine 'gelockte'-Semaphore wieder frei.
  847.  
  848.  
  849. 5.4.4  memcpy();
  850. ----------------
  851.  
  852. Bei dieser  Funktion handelt es sich um das altbekannte 'memcpy' jeder
  853. 'string.h'-C-Biblothek,  welches  einen  Speicherbereich  vorgegebener
  854. Länge kopiert.
  855. Warum dieser Funktion in Liberty aufgenommen wurde?
  856. Weil  viele  Programme (inkl. Liberty selbst) diese Funktion benötigen
  857. und das Benutzen der Funktion  via  Liberty  ein  wenig  Speicher  bei
  858. Applikation  einspart.  (Vorausgesetzt  man verwendet wirklich *nur* das
  859. Liberty 'memcpy()'!)
  860.  
  861.  
  862. 5.4.5  memset();
  863. ----------------
  864.  
  865. Für 'memset()' (ebenfalls eine  Standard-C  Funktionalität)  gilt  das
  866. gleiche  wie  schon bei 'memcpy()' beschrieben. Nur das diese Funktion
  867. zum Setzen eines Speicherbereiches auf einen bestimmten Wert verwendet
  868. wird.
  869.  
  870.  
  871. 5.5  Die 'GEMDOS-Erweiterungen'
  872. ===============================
  873.  
  874. Die Struktur  'Lity_GDExt'  enhält  fünf Funktionen die alle 'GEMDOS'-
  875. charakteristisch  sind.  Hauptsächlich  dienen  die   Funktionen   der
  876. Kontrolle über die Liberty Speicherverwaltung:
  877.  
  878. typedef struct
  879. {
  880.         Meminfo *       (*CK_init_meminfo)(Meminfo *info, BOOLEAN app);
  881.         void *          (*CK_malloc)(Meminfo *info, const long size, const WORD type);
  882.         void *          (*CK_realloc)(Meminfo *info, const void *block, const LONG newsize);
  883.         void            (*CK_free)(const Meminfo *info, const void *ptr);
  884.         void            *reserved;
  885.         void *          (*CK_load_buffer)(char *filename, Meminfo *info, WORD type, LONG addmem, LONG *buflen);
  886.  
  887. } Lity_GDExt;
  888.  
  889. /Die Form  der  'Meminfo'-Struktur  entnimmt  man der beigefügten '.h'-/
  890. /Datei./
  891.  
  892.  
  893. 5.5.1  CK_init_meminfo()
  894. ------------------------
  895.  
  896. Eine Applikation die die Liberty-Speicherverwaltung nutzen will,  muss
  897. bevor sie Speicher via Liberty anfordern kann drei Dinge tun:
  898.  
  899.   1. Eine globale Variable des Typs 'Meminfo' bereitstellen...
  900.  
  901.   2. Eine  globale  Variable  der  Typs  'Meminfo*'  (Zeiger  auf eine
  902.      'Meminfo'-Struktur' anlegen
  903.  
  904.   3. und  diese  durch  Zuweisung  des  Rückgabewertes  der   Funktion
  905.      'CK_init_meminfo()' initalisieren.
  906.  
  907. Als ersten  Parameter muss man dabei die Adresse der globalen Meminfo-
  908. Variablen übergeben (siehem auch Programmbeispiel).
  909.  
  910. /Was ist der Sinn dieser Aktion?/
  911. Liberty untersucht je nach Betriebssystem und Startmodus (ACC/APP)  ob
  912. es die Meminfoblöcke verschiedener Liberty-Applikationen zusammenlegen
  913. kann, um eine effizientere Speicherverwaltung zu ermöglichen.
  914. Folglich muss  der  Zeiger  den  man  als  Rückgabewert  erhält  nicht
  915. identisch  mit  der  Adresse des eigenen 'Meminfo'-Blocks sein. *Dieser*
  916. *Zeiger  (Rückgabewert)  ist  aber   der   einzige,   der   bei   allen*
  917. *nachfolgenden  Liberty-Funktionsaufrufen die nach einem entsprechenden*
  918. *Typ verlangen übergeben werden darf.*
  919.  
  920. _Au₧erdem:_
  921. Jeglicher Inhalt  der  'Meminfo'  (Struktur-)Variablen  darf  von  der
  922. Applikation   *nicht* angetastet   werden!   Liberty  obligt  die  volle
  923. Kontrolle dieser Struktur! Ein Verändern der  'Meminfo'-Inhalte  führt
  924. unweigerlich   zur   totalen  Verwirrung  der  Speicherverwaltung  und
  925. Systeminstabilität ist die Folge!
  926.  
  927. Der zweite Parameter des 'CK_init_meminfo()'-Calls  (app)  besagt,  ob
  928. die  Applikation  als eine solche (1) oder als Accessory (0) gestartet
  929. wurde. Zur Ermittlung dieses  Wertes  verwendet  man  das  landläufige
  930. Verfahren  welches  im  Profibuch  (10. Auflage) Seite 541 beschrieben
  931. ist.
  932.  
  933. /Im Falle der Verwendung von PureC kann man auch  gleich  die  Variable/
  934. /des    PureC-Startup-Codes    '_app'    benutzen    (wie    auch    im/
  935. /Programmbeispiel), oder man setzt den Parameter, für den Fall da₧  die/
  936. /Applikation  nur  als  eine  solche  und nicht als Accessory gestarted/
  937. /werden darf, gleich statisch auf 'TRUE'./
  938.  
  939. Noch etwas:
  940. Natürlich sollte man in seiner Applikation nur /eine/ Speicherverwaltung
  941. nutzen.  Die Vermischung von Speicheranforderungen via z.B. GEMDOS, C-
  942. Library und Liberty führen zwar  nicht  zur  Applikationsinstabilität,
  943. aber   sind   alles   andere  als  guter  Programmierstil,  da  schwer
  944. kontrollierbar (welchen Block mu₧ ich wie freigeben) und ineffizient.
  945. Die Verwendung  der  Liberty-Speicherverwaltung  sollte  ohnehin  alle
  946. Speicheranforderungsbedürfnisse des Programmierers befriedigen und ein
  947. Mischen von Aufrufen unnötig machen.
  948.  
  949.  
  950. 5.5.2  CK_malloc()
  951. ------------------
  952.  
  953. Diese Funktion fordert Speicher vom System an. Im Gegensatz zum GEMDOS
  954. werden  aber  kleinere Speicherblöcke automatisch in grösseren Blöcken
  955. gehalten  um  evt.  Betriebssystembeschränkungen   zu   umgehen.   Die
  956. Verwaltung  der  Blöcke  ist äu₧erst effizient, schnell und sollte auf
  957. jedem Fall andern Speicheranforderungsmechanismen  vorgezogen  werden,
  958. da  auch  noch  andere  Argumente  für  die  Verwendung  der  Liberty-
  959. Speicherverwaltung sprechen:
  960.  
  961.    ∙ Liberty sorgt auch bei  Accessories  unter  Single  TOS  für  ein
  962.      'festes'  Malloc. Normalerweise gehört Speicher, der nachträglich
  963.      von Accessories unter Single TOS angefordert wird  der  aktuellen
  964.      Hauptapplikation  und /nicht/ dem Accessory. Das führt beim Beenden
  965.      der Hauptapplikation zu ungewolltem Speicherverlust  seitens  des
  966.      Accs und ist eine häufige Fehlerquelle.
  967.      Dieses    Problem   existiert   bei   Verwendung   der   Liberty-
  968.      Speicherverwaltung nicht mehr!
  969.  
  970.    ∙ Liberty ermöglicht eine optimale  Verwaltung  von  Speicher  auch
  971.      unter Systemen mit Speicherschutz ('Memory-Protection').
  972.      Bei  der  Anforderung  von  Speicher  via  'CK_malloc()' kann die
  973.      gewünschte Speicherart übergeben werden (Parameter 'type'):
  974.  
  975.       MM_STGLOBAL   bei Übergabe dieses Speichertyps  fordert  Liberty
  976.                     globales   (ungeschütztes)  ST-RAM  an  (z.B.  für
  977.                     'Message-Puffer')
  978.  
  979.       MM_STPRIVATE  Liberty fordert privates (geschütztes) ST-RAM an
  980.  
  981.       MM_TTGLOBAL   hier   fordert    Liberty    *vorzugsweise* globales
  982.                     (ungeschütztes)  TT-RAM  an.  Steht nicht genügend
  983.                     TT-RAM (wird auch als 'Fast-RAM'  bezeichnet)  zur
  984.                     Verfügung,   wird  automatisch  (globales)  ST-RAM
  985.                     angefordert.
  986.  
  987.       MM_TTPRIVATE  Liberty versucht privates (geschütztes) TT-RAM  zu
  988.                     reservieren.   Steht  nicht  genügend  TT-RAM  zur
  989.                     Verfügung,  wird  automatisch  (privates)   ST-RAM
  990.                     angefordert.  Dieses  ist  wohl  der am häufigsten
  991.                     verwendete Typ der Speicheranforderung ('schnell &
  992.                     sicher').
  993.  
  994.      Das Besondere  der  Speicheranforderungen seitens Liberty besteht
  995.      nun  darin,  dass  die   Speicherblöcke   je   nach   tatsächlich
  996.      vorhandener  Speicherart  optimiert  gehalten werden. Mit anderen
  997.      Worten:  Exisitiert  nur  globaler  Speicher   (weil   z.B.   die
  998.      Applikation  unter  einem  Betriebssystem gestartet wurde welches
  999.      nur  'nicht   privaten   Speicher'   unterstützt)   werden   alle
  1000.      Anforderungen von privatem Speicher in Anforderungen von globalem
  1001.      Speicher umgesetzt. Dieses Verfahren spart dadurch sogar z.T. das
  1002.      Anfordern von neuen GEMDOS-Systemblöcken und damit Speicherplatz.
  1003.  
  1004.    ∙ Die  Speicherverwaltung von Liberty prüft einige Kriterien ob der
  1005.      von ihr verwaltete Speicher durch  eine  Applikation  korrumpiert
  1006.      wurde.  In  diesem  Fall erhält man entsprechende Fehlermeldungen
  1007.      auf dem Bildschirm. So wird man auf  Applikationsfehler  bei  der
  1008.      Verendung  von  Speicher hingewiesen, was bei der Entwicklung von
  1009.      Programmen kein unwesentlicher Punkt ist.
  1010.  
  1011. Doch zurück zum 'CK_malloc()':
  1012. Neben der Übergabe des  zuvor  beschriebenen  'Meminfo'-Pointers  wird
  1013. noch  die  anzuforderne  Blockgrösse  in  Byte  sowie  der  oben schon
  1014. beschriebene Speichertyp  mit  übergeben.  Der  Rückgabewert  ist  ein
  1015. Zeiger  auf  den  Block oder 'NULL' falls entsprechener Speicher nicht
  1016. angefordert werden konnte (Speicherknappheit).
  1017.  
  1018.  
  1019. 5.5.3  CK_realloc()
  1020. -------------------
  1021.  
  1022. Diese Liberty-Routine  arbeitet  analog  zum  C-'realloc()'  und   dem
  1023. Liberty-'CK_malloc()'.
  1024. / Eine Speichertypänderung ist *nicht* möglich!/
  1025.  
  1026.  
  1027. 5.5.4  CK_free()
  1028. ----------------
  1029.  
  1030. ist die Implementierung des C-'free()' der Liberty-Speicherverwaltung.
  1031.  
  1032.  
  1033. 5.5.5  CK_load_buffer()
  1034. -----------------------
  1035.  
  1036. Wie oft  kommt es vor das ein Programmierer eine Datei in einen Puffer
  1037. laden mu₧ und  jedesmal  die  gleiche  Sequenz  von  Funktionsaufrufen
  1038. getätigt wird...
  1039.  
  1040. Damit sollte  nun Schluss sein. Die Parameter der Liberty-Buffer-Lade-
  1041. Funktion sollten eigentlich selbsterklärend sein, hier  aber  trotzdem
  1042. die Übersicht:
  1043.  
  1044.  filename  Dateiname der zu ladenen Datei
  1045.  
  1046.  info      der schon bekannte Meminfo-Pointer
  1047.  
  1048.  type      anzuforderne Speicherart
  1049.  
  1050.  addmem    Anzahl  der  Bytes  die  zusätzlich anzufordern sind. Diese
  1051.            sind nach dem Laden der  Datei  am  Ende  des  Buffers  und
  1052.            unbelegt.
  1053.  
  1054. Die Funktion  liefert einen Zeiger auf den angeforderten und geladenen
  1055. Buffer oder 'NULL' falls ein  Fehler  aufgetreten  ist  (Datei  konnte
  1056. nicht geladen werden, zu wenig Speicher vorhanden etc.).
  1057.  
  1058. Jetzt kommt's:  Als  besonderes Schmankerl kann die Buffer-Laderoutine
  1059. aber noch mehr: Dateien die mit  dem  'ATOMIK'-Packer  gepackt  wurden
  1060. (ein  äu₧erst  effzienter  Packer  dessen Dateien zusätzlich auch noch
  1061. flink zu dekodieren sind) werden automatisch ausgepackt!
  1062.  
  1063. Das Packen ist z.B. sinnvoll bei MOD-Files, bestimmten Grafikformaten,
  1064. archivierten  Texten  oder  sonstigen  einteiligen, gro₧en Dateien die
  1065. nicht oder sehr selten angetastet werden.
  1066.  
  1067.  
  1068. 5.6  Die 'VDI-Erweiterungen'
  1069. ============================
  1070.  
  1071. Hier kommt noch etwas hin...
  1072.  
  1073.  
  1074. 5.7  Die 'AES-Unterstützung'
  1075. ============================
  1076.  
  1077. Hier kommt noch etwas hin...
  1078.  
  1079.  
  1080. 5.8  Die Sound-Funktionen
  1081. =========================
  1082.  
  1083. Hier kommt noch etwas hin...
  1084.  
  1085.  
  1086. 5.9  Programmbeispiel
  1087. =====================
  1088.  
  1089. Das Programmbeispiel geht davon aus, da₧ die '.h'-Dateien  'LIBERTY.H'
  1090. und  'IBMR.H'  in Standard-Include-Verzeichnis des C-Compilers liegen.
  1091. Das hier gezeigte Beispiel demonstriert die Initalisierung der Library
  1092. und Speicherverwaltung unter PureC:
  1093.  
  1094. #include <liberty.h>
  1095. #include <stdio.h>
  1096. #include <stdlib.h>
  1097. #include <stddef.h>
  1098. #include <aes.h>
  1099. #include <vdi.h>
  1100. #include <tos.h>
  1101.  
  1102. Meminfo         minfo, *mi;                     /* Applikations Meminfo-Block und Zeiger */
  1103.  
  1104. void main(void)                 /* Dieses Programm macht nix... */
  1105. {
  1106.         Liberty_Cookie  *libstruct;
  1107.         Lity_GDExt              *gdfuncs;
  1108.         int                     d1, d2, d3, d4, grhandle;
  1109.  
  1110.         appl_init();                            /* ...obwohl es einige Programmierer noch
  1111.                                                                    nicht begriffen haben: DAS GEHÖRT SICH SO! */
  1112.  
  1113.         if (CJar(0,COOKIE_LIBERTY,&libstruct) != CJar_OK)
  1114.         {
  1115.                 form_alert(1,"[3][This Application needs LIBERTY to run...][Exit!]");
  1116.                 appl_exit();
  1117.                 return;
  1118.         }
  1119.  
  1120.         vh = graf_handle(&d1, &d2, &d3, &d4);
  1121.  
  1122.         libstruct->misc_funcs->Init_Liberty(grhandle);  /* Liberty initalisieren */
  1123.  
  1124.         gdfuncs = libstruct->gd_funcs;                                  /* ...trägt nur zur
  1125.                                                                                                            Lesbarkeit bei... */
  1126.  
  1127.         mi = gdfuncs->CK_init_meminfo(&minfo,_app);     /* Speicherverwaltungsinit */
  1128.  
  1129. /* HIER STEHT DAS EIGENTLICHE PROGRAMM ! */
  1130. /* ...für Meminfos wird jetzt immer 'mi' übergeben !!! */
  1131.  
  1132.         if (_app)                                       /* Applikation ? */
  1133.                 appl_exit();                                /* raus... (MT-OS Behandlung
  1134.                                                                                                            der Einfachheit wegen
  1135.                                                                                                            weggelassen) */
  1136.         else
  1137.                 for (;;)                                    /* Beim Acc sporadisch */
  1138.                         evnt_timer(0,32000);                                    /* beenden             */
  1139. }
  1140.  
  1141.  
  1142.  
  1143. 6  Ausblick
  1144. ***********
  1145.  
  1146. Zum Zeitpunkt  dieser  Veröffentlichung von 'Liberty' sind die Raster-
  1147. grafikfunktionen leider alles andere als komplett. Damit  aber  andere
  1148. schon  jetzt  zumindest in den Genu₧ der restlichen Liberty Funktionen
  1149. kommen, habe ich mich dennoch für die Herausgabe der Library im  nicht
  1150. vollständigem Zustand entschieden.
  1151. Erste  Erweiterung  wird folglich darin bestehen, den Rastergrafikteil
  1152. vollständig auszubauen. Aber  auch  im  Vektorgrafikteil  fehlen  noch
  1153. einige wünschenswerte Zusatzfunktionen.
  1154.  
  1155. Wie danach   die  Weiterentwicklung  verläuft  ist  schwer  zu  sagen.
  1156. Hauptsächlich hängt das von meinen eigenen  Bedürfnissen  ab.  Selbst-
  1157. verständlich  können  auch  Wünsche  anderer Programmierer die Liberty
  1158. nutzen (wollen) den Funktionsumfang erweitern. Jedoch werde ich strikt
  1159. darauf  achten,  da₧  Liberty  nie  mehr als 50k Speicher schluckt und
  1160. nicht zum schon beschriebenen 'Klotz' wird.
  1161.  
  1162. Welche Funktionen  Liberty  bietet  kann  dem   'einfachen'   Anwender
  1163. eigentlich  egal  sein.  Er  kommt  meist  unbemerkt  in den Genu₧ der
  1164. Funktion, sobald ein Programm sie  benutzt.  Das  einzige  worauf  ein
  1165. Anwender  achten  sollte  ist,  da₧  er  möglichst  immer  die  neuste
  1166. Liberty-Version installiert hat.  Da  Liberty  benutzenden  Programmen
  1167. beigefügt werden darf, dürfte diese Forderung leicht zu erfüllen sein.
  1168.  
  1169.  
  1170.  
  1171. 7  Changes
  1172. **********
  1173.  
  1174. *Änderungen Version 1.35*
  1175.  
  1176.    ∙ Sag' niemals nie - die Schweinerprogrammbehandlungsroutine wieder
  1177.      angefasst: Liberty verwaltet nun keinen  eigenen  Stack  für  die
  1178.      Korrektur  unsauberer  AES-Aufrufe  mehr  sondern  verlässt  sich
  1179.      darauf, dass die unsaubere Applikation selbst genügend Stack  zur
  1180.      Verfügung  stellt.  Das  scheint  mit vielen Programmen besser zu
  1181.      klappen     -      weniger/keine      Abstürze      mehr      bei
  1182.      'Problemkindprogrammen'.  So  funktionieren auch die noch älteren
  1183.      (und unsauberen) 'Magic-Configurator' Versionen jetzt mit Liberty
  1184.      (die neueren sowieso).
  1185.  
  1186.    ∙ Die  Installation  des Cookie-Jars ist für Betreiber älterer TOS-
  1187.      Versionen (ohne OS-Cookie-Jar) verbessert  worden:  Liberty  legt
  1188.      jetzt  selbsttätig  eine  Keksdose  an  und trägt auch schon vier
  1189.      Standard-Kekse ein: PSG-Audio, ST-Video  Hardware,  Maschine:  ST
  1190.      und Prozessor '68000'er.
  1191.  
  1192.    ∙ PSG-Soundunterstützung  eingebaut.  Auch Besitzer eines ST's oder
  1193.      Hades sollten jetzt in den Genuss der möglichen Soundausgabe  via
  1194.      XBIOS   kommen.   Leider  gibt  es  noch  ein  Problem:  Ist  der
  1195.      Tastenklick angeschalten und 'kollidiert' die  Sampleausgabe  mit
  1196.      der  Tastenklicktonausgabe, kann es zu einem 'stehenden' Pfeifton
  1197.      kommen. Welcher kluge Kopf  kann  mir  bei  der  Bewältigung  des
  1198.      Problems helfen?
  1199.      Übrigens:   Durch   die   (jetzt   tatsächlich  vorhandene)  PSG-
  1200.      Unterstützung sollte es auch keine  Probleme  mehr  mit  GEM-Jing
  1201.      geben! (...das Schweigen im Walde auf STs...)
  1202.  
  1203. *Änderungen Version 1.31*
  1204.  
  1205.    ∙ Einen  Fehler  in der Speicherverwaltung von Liberty behoben, der
  1206.      dafür verantwortlich war, da₧ unter 'Single TOS' mit alternativem
  1207.      Speicher  bei  Anforderung  von  ST-RAM trotzdem alternatives RAM
  1208.      angefordert wurde. Dadurch blieb z.B. die Soundausgabe bei obiger
  1209.      Konfiguration stumm.
  1210.  
  1211.    ∙ Das  Problem  der  Applikations-ID-Vergabe  unter NAES gemildert:
  1212.      Liberty kann nun AES-Calls bis zur  AP-ID  128  verarbeiten  (war
  1213.      64).  Dennoch:  Dadurch  das NAES immer die AP-ID seiner Prozesse
  1214.      hochzählt und unbenutze IDs  nicht  neu  vergibt,  ist  nach  128
  1215.      Applikationsstarts  Schlu₧  mit den AES-Features von Liberty. Die
  1216.      Auswirkung: Freedom2 kann nicht mehr von  Applikationen  mit  IDs
  1217.      jenseits  von  128  aufgerufen  werden.  Das Problem lä₧t sich in
  1218.      Liberty nicht auf einfache Art lösen, eine weitere Steigerung des
  1219.      ID-Raumes  würde  viel  zusätzlichen  Speicher verschlingen. NAES
  1220.      verhält sich in  diesem  Punkt  anders,  als  alle  anderen  TOS-
  1221.      kompatiblen  Betriebssysteme.  Ich hoffe also das sich in NAES da
  1222.      noch etwas tut ;-).
  1223.  
  1224.    ∙ ...viel, viel zu tun...
  1225.  
  1226. *Änderungen Version 1.30*
  1227.  
  1228.    ∙ Ich kann's  nicht  fassen.  Unsaubere  Applikation  bringen  mich
  1229.      irgendwann  einmal  noch  um den Verstand. In dieser Version habe
  1230.      ich      DEFINITIV       die       letzte       Änderung       am
  1231.      Schweineprogrammbehandlungsteil         vorgenommen.         Eine
  1232.      Sonderbehandlung  für  MTOS/NAES  und  MagiC  soll  nun  maximale
  1233.      Kompatibilität  auch  bei  unsauberen  Programmen  bringen.  U.a.
  1234.      profitieren dadurch auch ältere Versionen von MGCOPY,MGVIEW etc.,
  1235.      die, was die Sauberkeit der Systemanbindung anging, noch nicht so
  1236.      prall waren. Die jetzige  Schweineprogrammbehandlungsroutine  ist
  1237.      *definitiv* der Weisheit letzter Schluss!
  1238.      Da   OAESis  nicht  ein  vernünftiges  appl_find(NULL)  anbietet,
  1239.      sondern  ziemlichen  Blödsinn  macht,  kann  ich   OAESis   *nicht*
  1240.      empfehlen.
  1241.      Liberty    es    ist    praktisch    unmöglich   Liberty&Freedom2
  1242.      unproblematisch unter OAESis zum Laufen zu bringen. Aussagen über
  1243.      GENEVA und XAES kann ich nicht treffen.
  1244.      _WICHTIG:_ Damit  Liberty  ordnungsgemä₧  unter MagiC arbeitet, ist
  1245.      eine MagiC-Version >= 3.x unabdingbar!!!
  1246.  
  1247.    ∙ Besitzer von Rechnern mit DMA-Sound ((Mega)STE,  TT)  kommen  nun
  1248.      endlich auch in den Genu₧ der Liberty-Soundfunktionen. Neben Macs
  1249.      mit 'MACSOUND' und Falcons kommt bei  diesen  Rechnern  nun  also
  1250.      auch  Freude  auf, wenn man im Freedom2 Info-Dialog auf das gro₧e
  1251.      'Freedom-Logo' klickt... (wenn die Software  der  Startrack-Karte
  1252.      für  den  HADES auch einen 'McSn'-Cookie anlegt (tut sie das? wer
  1253.      sagt's mir?), bekommen die HADES-User auch was zu hören...)
  1254.  
  1255.    ∙ Weitere Beschreibungen von Liberty für Programmierer in die  Doku
  1256.      integriert.
  1257.  
  1258. *Änderungen Version 1.20*
  1259.  
  1260.    ∙ Endlich  arbeitet  Liberty mit NAES korrekt zusammen. Was war die
  1261.      Ursache? Na ? - Die Schweineprogrammbehandlung.
  1262.      Ohne einen Anruf von Rainer Mannigel (NAES-Entwickler)  wäre  das
  1263.      wohl  nie  etwas  geworden.  Durch  ihn  habe  ich von einer NAES
  1264.      internen Sache erfahren und das ermöglichte  mir  Liberty  darauf
  1265.      abzustimmen.
  1266.      Ich  hoffe  den  Schweineprogrammbehandlungsteil  nun  nicht mehr
  1267.      anfassen zu müssen... ;-)
  1268.  
  1269. *Änderungen Version 1.15*
  1270.  
  1271.    ∙ Liberty  ist   jetzt   /noch/ rücksichtsvoller   Schweineprogrammen
  1272.      gegenüber  und  billigt  ihnen  mehr  SV-Stack zu. (Das kostet 5k
  1273.      mehr... :-()
  1274.      Dadurch läuft jetzt Liberty mit dem VT52 Emulator in der  Version
  1275.      1.3 zusammen was einem Benutzer ;-) besonders wichtig war...
  1276.  
  1277.    ∙ Das  'free' der Speicherverwaltung von Liberty erlaubte nicht das
  1278.      Freigeben eines NULL-Pointers, was  aber  offiziell  dokumentiert
  1279.      ist.
  1280.  
  1281. *Änderungen Version 1.1*
  1282.  
  1283.    ∙ Liberty  benutzt jetzt ein anderes Verfahren um schweinische AES-
  1284.      Calls zu 'reparieren'. Damit sollten (hoffentlich)  die  Probleme
  1285.      die  im  Zusammenhang mit 'Calamus96' auftreten der Vergangenheit
  1286.      angehören. Ich möchte ausdrücklich betonen, da₧ die Probleme  von
  1287.      'Calamus96'-Modulen   ausgehen   und   Liberty   jetzt  nur  /noch/
  1288.      rücksichtsvoller mit unsauberen Programmen umgeht.
  1289.      Gleiches gilt auch für 'OverPaint' (getestet mit der Demo-Version
  1290.      1.5s).
  1291.      Ich  weise  in  diesem  Zusammenhang  darauf  hin,  da₧  das neue
  1292.      Verfahren mehr Zeit  benötigt  und  es  dadurch  zu  (merklichen)
  1293.      Performance-Verlusten  bei  unsauberen  Programmen  kommen  kann!
  1294.      (...aber lieber ein langsam ablaufendes Schweineprogramm als  ein
  1295.      abstürzendes... - oder?)
  1296.      Nochmals  meine  Bitte  an  alle  Programmierer:  Achtet bei AES-
  1297.      Aufrufen  darauf,  da₧  ihr  einen   *korrekten/initialiserten* und
  1298.      *vollständigen* AES-Parameterblock verwendet!!!
  1299.  
  1300.    ∙ Es  liegt  ein  Patchfile  für  MacSnd  dabei.  Das entsprechende
  1301.      Kapitel beachten!
  1302.  
  1303.    ∙ Die ersten Beschreibungen von Liberty für  Programmierer  in  die
  1304.      Doku integriert.
  1305.  
  1306. ...to be continued
  1307.  
  1308.  
  1309.  
  1310. 8  Kontaktadresse
  1311. *****************
  1312.  
  1313. Falls Sie irgendwelche Fragen, Probleme oder Wünsche bezüglich Liberty
  1314. haben sollten, können Sie mich unter folgender Adresse erreichen:
  1315.  
  1316. Christian Krüger
  1317. Sophienstr. 10a
  1318. 12203 Berlin
  1319.  
  1320. Internet email: chris@pace.de
  1321.  
  1322. *Wichtig:* Wer Kontakt via Sackpost zu mir aufnehmen  will,  der  sollte
  1323. (wenn  er  eine  Antwort  erwartet)  einen  an  sich  adressierten und
  1324. ausreichend frankierten Rückumschlag beifügen!
  1325.  
  1326. Von privaten Besuchen bitte ich  abzusehen,  die  Erfolgschancen  mich
  1327. anzutreffen sind ohnehin ziemlich gering.
  1328. Au₧erdem  bitte  ich alle Anwender der Library nur dann zu mir Kontakt
  1329. aufzunehmen, wenn unlösbare Probleme oder gravierende Mängel  bei  der
  1330. Installation  der  Library  auftreten!  (Ich verstehe darunter das man
  1331. sich mindestens 2x die Liberty-  Dokumentation  durchgelesen  hat  und
  1332. immernoch nicht schlauer ist!!!)
  1333. Zeit die ich mit der Beantwortung von Fragen verbringe steht mir nicht
  1334. mehr zum Programmieren zur Verfügung...  (Ein  gutes  und  hilfreiches
  1335. Forum  um solche Fragen evt. zu klären stellt die "Hotline der Share-/
  1336. Freeware", das Maus-Netz, Gruppe 'atari.soft' dar.  Wären  hier  nicht
  1337. viele  hilfsbereite und kompetente Menschen zugegen, die bei Fragen zu
  1338. Programmen   durch   ihre   Beantwortung   für   die   Programmautoren
  1339. einspringen,  wer wei₧ ob Liberty hätte jemals entstehen können... Ich
  1340. widme daher diese Library  allen  Atari-Enthusiasten  im  Maus-Netz  -
  1341. *Danke!* :-) )
  1342.  
  1343. /Rächtzszeibunsfälör by Zeitmangel und Portfolio-Tastatur!/
  1344.  
  1345.  
  1346.  
  1347.