Dokumentation zum ICFS V1.00 06.08.1995 von Dirk Haun Europastr. 8 D-64569 Nauheim Dirk Haun @ WI2 Inhaltsverzeichnis ================== 0 ICFS - Was ist denn das schon wieder? 1 ICFS.PRG 1.1 Die Installation (ICFS) 1.2 Die Bedienung (ICFS) 1.3 Patchbereich 1.4 Copyright / Rechtliches 2 ICFS.CPX 2.1 Dokumentation zu ICFS.CPX v1.20 2.2 Die Installation (CPX) 2.3 Die Bedienung (CPX) 2.4 Schlužbemerkungen 3 ICFS-untersttzende Programme 4 Kontaktadressen 5 Entwicklerdokumentation 5.1 Beschreibung der Schnittstelle 5.2 Hinweise fr andere Programmiersprachen 5.3 Anmerkungen 5.4 ICFS-Versionen 5.5 Unterschiede der Versionen 6 Beschreibung der Funktionen 6.1 ICF_GETSIZE 6.2 ICF_GETPOS 6.3 ICF_FREEPOS 6.4 ICF_SNAP 6.5 ICF_GETBIGPOS 6.6 ICF_GETLOC 6.7 ICF_GETWPOS 6.8 ICF_FREEWPOS 6.9 ICF_SNAPW 6.10 ICF_GETBIGWPOS 6.11 ICF_GETWLOC 6.12 ICF_FREEALL 6.13 ICF_SCREEN 6.14 ICF_NEXTPOS 6.15 ICF_INFO 6.16 ICF_CONFIG 6.17 ICF_SETSIZE 6.18 ICF_SETSPACE 6.19 ICF_SETBORDER 6.20 ICF_NEXTINFO 6.21 ICF_WINOPEN 6.22 ICF_GETPATH Anhang ====== A MultiTOS-Iconify 0 ICFS - Was ist denn das schon wieder? ======================================= In der MultiTOS-Version 1.07 hat Atari ein neues Feature eingefhrt, das sogenannte Iconify. Damit kann man ein Fenster auf eine Gr”že, nur noch etwas gr”žer als ein Icon, zusammenschrumpfen lassen (daher der Name). Eine praktische Idee, kann man doch so schnell alle Fen- ster von Programmen, die man gerade nicht braucht, aus dem Weg r„u- men, ohne daž man das entsprechende Programm zu beenden br„uchte. Durch einen Klick auf ein solches verkleinertes Fenster erlangt es seine ursprngliche Gr”že und Lage zurck. Leider sind die MultiTOS-Versionen, die ber dieses Feature verfgen, nur fr Betatester erh„ltlich (und es ist sehr unwahrscheinlich, daž sie jemals fr Normalanwender erh„ltlich sein werden). Aužerdem w„re es wnschenswert, diese M”glichkeit auch unter MagiC, den alten Multi- TOS-Versionen und evtl. sogar fr SingleTOS zu haben. Nun ist es kein Problem, eine zumindest „hnliche L”sung in ein Programm einzubauen. Was jedoch zwischen verschiedenen Programmen koordiniert werden muž, ist die Lage der verkleinerten Fenster - und genau das leistet der ICFS. MagiC bietet ab der Version 3 ein MultiTOS-kompatibles Iconify an, so daž ICFS dort eigentlich nicht ben”tigt wird. Jedoch l„žt sich ICFS dort auch installieren und "berredet" MagiC dann dazu, das Iconify ber ICFS abzuwickeln. Somit kommen dann alle Programme, die ein MTOS- Iconify untersttzen, automatisch in den Genuž der ICFS-Features: ù Snapping Nach dem Verschieben eines Iconfensters rastet dieses wieder an einer Iconposition ein. Die "Kachelung" der Iconfenster auf dem Bildschirm bleibt also erhalten. ù w„hlbare Fenstergr”že Die Gr”že eines Iconfensters kann frei gew„hlt werden. Beim MultiTOS-kompatiblen Iconify hat ein Iconfenster immer eine feste Gr”že (72x72 Pixel). ù w„hlbare Startecke Es kann frei gew„hlt werden, in welcher der vier Bildschirmecken das erste Iconfenster abgelegt werden soll (MTOS: immer links unten). ù w„hlbare Belegungsrichtung Ausgehend von der gew„hlten Startecke kann auch die Richtung gew„hlt werden, in der weitere Iconpositionen angefordert wer- den, also wahlweise horizontal oder vertikal (MTOS: immer horizontal). ù Abstand der Iconfenster Auch der Abstand, der zwischen zwei nebeneinander liegenden Icon- fenstern gelassen wird, kann mit ICFS frei eingestellt werden (MTOS: kein Abstand). ù Abstand vom Bildschirmrand Schliežlich und endlich kann auch der Abstand zum Bildschirmrand eingestellt werden (MTOS: kein Rand). ICFS kann in diesen Punkten also auch noch als Anregung fr das "rich- tige" Iconify verstanden werden. Hinweis: Die Defaulteinstellungen im ICFS entsprechen denen von Multi- TOS bzw. MagiC, die ICFS-Features mssen erst mit dem ICFS.CPX einge- stellt werden. 1 ICFS.PRG ========== 1.1 Die Installation (ICFS) --------------------------- Die Installation unter SingleTOS, MagiC 1 und 2 sowie MultiTOS (Ver- kaufsversion) ist einfach: Kopieren Sie das Programm ICFS.PRG in den AUTO-Ordner und booten Sie den Rechner neu. Das ist alles. Unter MagiC!3 und MagiCMac sollten Sie ICFS.PRG dagegen in den APPS- Ordner (also den Ordner, in dem die Autostart-Applikationen stehen und dessen Pfad in der Datei MAGX.INF in der Zeile #_APP angegeben ist) kopieren und den Rechner ebenfalls neu booten. Der ICFS legt einen Cookie an, ber den Programme Positionen fr die verkleinerten Fenster anfordern k”nnen. Unter MagiC!3 bzw. MagiCMac h„ngt sich ICFS zus„tzlich in den AES-Trap (XBRA-Kennung: ICFS). 1.2 Die Bedienung (ICFS) ------------------------ Und wie benutzt man das jetzt? Mit der Maus: Ein Fenster wird ikonifiziert (als Icon abgelegt), indem man auf das Schliežfeld (Closer) eines Fensters klickt und dabei eine der folgen- den Umschalttasten gedrckt h„lt: [Alternate] - ein einzelnes Fenster verkleinern [Control] - alle Fenster in ein einziges verkleinern [Shift] - alle Fenster einzeln verkleinern Dies muž jedoch von dem jeweiligen Programm untersttzt werden! Die Control-Taste fr das Iconify aller Fenster wurde analog zum Control-Klick auf das Iconifier-Symbol beim MultiTOS-Iconify gew„hlt, kollidiert aber leider mit der Belegung der Control-Taste unter Winx. Es wird daher empfohlen, diese Funktion noch zus„tzlich ber die Kombination [Alternate][Shift] + Klick auf den Closer anzubieten. Per Tastatur: Fr das Verkleinern eines einzelnen Fensters auf Icongr”že verwenden die meisten Programme die Tastenkombination [Control][Alternate][Leertaste] Sollen gleich alle Fenster zu einem einzigen Icon verkleinert werden, so ist zus„tzlich die (linke) Shift-Taste zu drcken. Mit den gleichen Tastenkombinationen sollte sich das Icon dann auch wieder zu einem bzw. mehreren Fenstern ”ffnen lassen. Fr das Ablegen aller Fenster als einzelne Icons ist keine Tastenkombination vorge- sehen. Einige „ltere Programme verwenden noch [Control][Leertaste] (einzel- nes Fenster) bzw. [Control][Shift][Leertaste] (alle Fenster). MagiC!3/MagiCMac: Unter MagiC!3 bzw. MagiCMac werden Fenster dagegen einfach durch einen Klick auf den Smaller (auch "Iconifier" genannt), das neue Fen- sterelement in der rechten oberen Ecke, als Icons abgelegt - ganz wie gewohnt. ICFS tritt hier nicht weiter in Erscheinung, da er seine Auf- gabe "im Hintergrund" abwickelt. Das Ablegen von Fenstern mit [Control][Alternate][Leertaste] wird auch unter MagiC von immer mehr Programmen untersttzt. 1.3 Patchbereich ---------------- Die verschiedenen Einstellungen, die an ICFS vorgenommen werden k”n- nen, sind mit Defaultwerten belegt und werden im Normalfall mit dem ICFS.CPX ver„ndert. In manchen Situationen kann es aber erwnscht sein, daž ICFS andere Defaulteinstellungen annimmt, z.B. dann, wenn Sie auf den Einsatz des CPX oder des Kontrollfeldes verzichten wol- len, oder wenn Programme schon Fenster als Icons ablegen wollen, be- vor das CPX geladen wurde (was in einem Multitasking-System durchaus vorkommen kann). Daher existiert ab Version 1.00 ein Patchbereich im ICFS.PRG, in den die Defaulteinstellungen eingetragen werden k”nnen. Im Normalfall wird dies bereits vom ICFS.CPX erledigt, Sie k”nnen diese Žnderungen aber auch selbst vornehmen: Mit einem Diskmonitor oder einem „hnlichen Programm (z.B. "HexEdit" von Dirk Sabiwalsky) sucht man nach der Zeichenfolge 'PatchHere:' (ohne Hochkommata). Dahinter befindet sich eine Struktur vom Typ ICFSCONFIG (siehe ICF_INFO), in der die Defaultwerte stehen. Diese k”nnen nun nach Wunsch ver„ndert werden. Das Ende des Patchbereichs ist durch die Zeichenkette ':ereHhctaP' gekennzeichnet. Als Hexdump sieht der unver„nderte Patchbereich so aus: 50 61 74 63 68 48 65 72 65 3A PatchHere: 01 00 ICFS-Version 00 00 Konfigurationsbits 00 48 00 48 Gr”že eines Iconfensters 00 00 00 00 Abstand zwischen Iconfenstern 00 00 00 00 Abstand zum Bildschirmrand 3A 65 72 65 48 68 63 74 61 50 :ereHhctaP 1.4 Copyright / Rechtliches --------------------------- Kurzfassung: Der ICFS ist Freeware. Sie drfen dieses Programm Ihrer eigenen Soft- ware beilegen. Dies darf auch teilweise geschehen, muž dann aber neben ICFS.PRG mindestens einen Anleitungstext, also z.B. ICFS.TXT, ICFS.ENG oder ICFS.HYP/ICFS.REF umfassen. lange Fassung: Das Programm ICFS ist Freeware. Es darf beliebig kopiert und weiterge- geben, aber nicht einzeln verkauft werden. Das Programm darf ber Mailboxen oder „hnliche nichtkommerzielle Systeme (z.B. ftp) frei ver- breitet werden, solange dem Empf„nger dabei keine zus„tzlichen Kosten (aužer den ohnehin anfallenden Gebhren) entstehen. Ein Vertrieb ber PD-Disketten ist gestattet, solange der Einzelpreis einer solchen Diskette 10 DM nicht bersteigt. Das Programm darf nicht ohne Rck- sprache auf Coverdisks (oder „hnliche, an Zeitschriften gebundene Disketten) bernommen werden. Eine šbernahme auf CDs (zusammen mit anderer Software) ist dagegen gestattet. Das Programm darf zusammen mit kostenloser sowie mit kommerzieller Software vertrieben werden, solange deutlich wird, daž ICFS nicht Bestandteil dieser Software ist. In jedem Fall muž ICFS.PRG mindestens noch einer der Anleitungstexte ICFS.TXT oder ICFSKURZ.TXT oder ICFS.ENG oder ICFS.HYP/ICFS.REF beige- legt werden. Die obigen Regelungen k”nnen in Einzelf„llen aufgehoben werden, dazu ist aber unbedingt mein schriftliches Einverst„ndnis einzuholen. Wenn Sie als Anwender dieses Programms den begrndeten Verdacht ha- ben, daž gegen eine oder mehrere der obigen Bedingungen verstožen wurde, so bitte ich um entsprechende Benachrichtigung. Vielen Dank. 2 ICFS.CPX ========== 2.1 Dokumentation zu ICFS.CPX v1.20 ----------------------------------- Einen wundersch”nen guten Morgen (oder was auch immer). Dieses kleine Schreiben setzt die Kenntnis um ICFS voraus. Wer also gar nicht weiž, um was es hier geht, sollte sich erst mal die Doku zu ICFS durchlesen. Nur mal kurz zur Erinnerung: ICFS stellt ber einen Cookie eine Pro- grammierschnittstelle zur Verfgung, damit Programme das Iconifizie- ren von Fenstern (auch ohne MultiTOS oder MagiC!3) durchfhren k”n- nen. Das schafft schon Platz auf dem Bildschirm und ist recht prak- tisch, wenn viele Fenster offen sind, die man im Moment nicht braucht. Wie dem auch sei, jedenfalls gibt es die M”glichkeit, die iconifizier- ten Fenster nach Geschmack platzieren zu lassen; auch die Gr”že ist w„hlbar. Mit diesem CPX kann man diese Parameter nun komfortabel einstellen. 2.2 Die Installation (CPX) -------------------------- Die Datei ICFS.CPX wird in den Ordner kopiert, in dem auch alle ande- ren CPXe stehen. Was ein CPX ist? Hmm. Besorgen Sie sich das modulare Kontrollfeld XCONTROL.ACC von ATARI, dann wissen Sie's. Mehr is nich. Das war die Installation. Jetzt mssen Sie nur neu booten (oder die Module des XCONTROL neu laden) und schon steht Ihnen das CPX zu ICFS zur Verfgung. 2.3 Die Bedienung (CPX) ----------------------- Mein alter Lehrer wrde sagen 'Nun, was sehen wir denn, wenn wir das CPX ”ffnen?' und ich m”chte ihm hier beipflichten. Also, was sehen wir? ù Links oben einen Text "ICFS vx.xx", wobei 'x.xx' fr die Versi- onsnummer des installierten ICFS steht. ù Button 'Freigeben': Dieser Button ”ffnet als Reaktion auf das Anklicken Ihrerseits eine Alarmbox, und diese will wissen ob Sie das auch ernst mei- nen, was Sie gerade tun wollen. Sollten Sie mit 'OK' antworten werden alle Icon-Positionen wie- der freigegeben und ICFS beginnt wieder bei der eingestellten Startecke. ù Checkbox 'ICFS Snap': Nur anw„hlbar, wenn ICFS ab v1.00 installiert ist. Schaltet die Option, Icon-Fenster nur an ICFS Positionen verschieben zu k”n- nen, an bzw. aus. ù Checkbox 'Mega Icons': Sie ist nur anw„hlbar, wenn man ICFS ab Version 1.00 installiert hat, und aktiviert/deaktiviert die M”glichkeit Icons zu benut- zen, die ein Vielfaches der normalen Icongr”že haben. ù PopUp 'Gr”že': Hier kann man wunderbar ablesen, wie grož die Icons gezeichnet werden. Ein Klick auf den PopUp gengt, und man hat die Wahl zwi- schen fnf verschiedenen Gr”žen: 64 x 64 72 x 72 80 x 80 88 x 88 96 x 96 Es sollte also fr jeden etwas dabei sein. Wenn nicht, ein Klick auf den Button "Gr”že" gengt, und schon kann man sich eine eigene Gr”že eintragen. ù PopUp 'Rand': Nur anw„hlbar, wenn ICFS ab v1.00 installiert ist. Es ”ffnet sich ein PopUp, aus dem man den Abstand der ICFS-Fen- ster zum Bildschirmrand w„hlen kann. Folgende M”glichkeiten stehen zur Wahl: 0 Pixel 4 Pixel 8 Pixel 12 Pixel 16 Pixel Auch hier gilt: ber den Button "Rand" ist eine eigene Ein- stellung m”glich. ù PopUp 'Abstand': Nur anw„hlbar, wenn ICFS ab v0.11 installiert ist. Es ”ffnet sich ein PopUp, aus dem man den Abstand der ICFS Fen- ster w„hlen kann. Folgende M”glichkeiten stehen zur Wahl: 0 Pixel 4 Pixel 8 Pixel 12 Pixel 16 Pixel Mittlerweile sollte bekannt sein, was passiert, wenn man den Button "Abstand" anklickt ... ù PopUp 'Startecke': Hiermit wird bestimmt, von welcher Ecke aus die iconifizierten Fenster auf dem Desktop angeordnet werden. Sozusagen serienm„žig ist 'Links unten' eingestellt. Ein Klick auf den PopUp erm”glicht die Wahl zwischen: links unten links oben rechts unten rechts oben Wer die Icons also lieber von rechts oben angeordnet h„tte, bitte sehr. ù PopUp 'Ausrichtung': Sollte defaultm„žig auf 'Horizontal' stehen und bestimmt, in welche Richtung von der Startecke aus die Icons angeordnet wer- den. ù Button 'Sichern': Hat man seine Lieblingseinstellung gefunden, bet„tigt man 'Si- chern'. Die Parameter werden im CPX gespeichert und bei jedem Reboot des Rechners wieder so eingestellt. Auch hier gibt's erst 'ne Sicherheitsabfrage, ob Sie wirklich speichern wollen. Ab ICFS 1.00 besteht die M”glichkeit, die Einstellungen auch in ICFS.PRG zu speichern. Dazu muž das CPX allerdings wissen, wo sich ICFS.PRG befindet. Ab ICFS 1.00 exi- stiert dazu ein Mechanismus, der aber unter manchen widrigen Umst„nden (hoffentlich nicht zu oft) nicht greift. In dem Fall wird der werte Benutzer ber einen Fileselektor aufgefordert, das Programm selbst zu finden. ù Button 'OK': Der wohl meistbenutzte Button einer jeden CPX. Klick gengt, und das Modul verabschiedet sich, bis es wieder aufgerufen wird. Alle Aktionen, die man get„tigt hat, behalten ihre Gltigkeit. ù Button 'Abbruch': Der am zweitmeisten verwendete Button einer jeden CPX. Auch dieser l„sst das Modul wie von Geisterhand verschwinden, stellt aber alles wieder so ein, wie es war, bevor Sie das CPX aufgerufen haben. Nur wenn Sie Icons freigegeben haben, kann man das nicht mehr rckg„ngig machen. Aber Sie wurden ja auch gefragt, ob Sie das wirklich wollten. Ansonsten war's das. Der Vollst„ndigkeit halber will ich noch erw„h- nen, daž es (noch) keine Tastaturbedienung fr das CPX gibt. Ledig- lich ein Druck auf 'Return' l”st die Funktion des am dicksten einge- rahmten Buttons aus, aber das weiž wohl jeder ATARI-User. 2.4 Schlužbemerkungen --------------------- Zum Schluž sei noch folgendes gesagt. Ich bernehme keinerlei Haftung fr irgendwelche Sch„den, die das CPX verursacht (was immer das auch sein soll). Dafr drfen Sie das CPX auch kostenlos nutzen, sooft und viel Sie wollen. Das Copyright liegt (und bleibt) aber bei mir, was bedeutet, daž Sie das CPX, aužer mit dem Button 'Sichern' des ICFS CPX nicht ver„ndern drfen. Bemerkung am Rande: Ich bin nicht der Urheber des ICFS; ich wurde lediglich dazu verdonnert, das CPX zu schreiben. Die Idee zum ICFS stammt von Reiner Rosin, und wurde erstmals in seinem Programm 'Zeig's mir' realisiert. Der Server (ICFS.PRG im AUTO-Ordner) wurde von Dirk Haun geschrieben; somit stand ICFS allen zur Verfgung, und war nicht mehr nur auf 'Zeig's mir' begrenzt. Ein herzlicher Dank geht an Martin Osieka, der ein paar gute Bug- reports verfasst hat, und von dem die Idee stammt, auch die Versi- onsnummer des Servers anzuzeigen, obwohl im CPX kein Platz mehr war. John McLoud Viel Spaž!!! 3 ICFS-untersttzende Programme =============================== Zur Zeit untersttzen folgende Programme den ICFS (Stand 27.07.1995): Programm ab Version Typ Autor ---------------------------------------------------------------------- 800XL-Deejay 2.30 Laufwerksemulator Kolja Koischwitz ACDP 1.00 CD-Player Christian Mittendorf APP_List 0.3 Systemutility Ralf Zimmermann @ OF2 Avalon 3.72 Shell Stephan Slabihoud Avalon4Semper 3.72 Shell Stephan Slabihoud Ballerburg2 2.00 Denkspiel (o: Kolja Koischwitz Casio-SF 1.25 Transferprogramm Stephan Slabihoud Chatwin 3.01 Shell Dirk Haun @ WI2 Dialler alle Telefondatenbank Christoph Spengler @ RS DomesTOS alle Shell Christoph Spengler @ RS DWBH 1.00 GEM-Spiel Dirk Hagedorn @ MK2 gale 2.0 Dateiutility David Reitter @ WI2 EGEM-Utilities Rel. 2 11 Utility-PRGs Christian Grunenberg @ LB Freedom 0.999 Fileselektor K. Koischwitz, Ch. Krger GEM-Solitaire 1.13 GEM-Spiel Dirk Hagedorn @ MK2 Gewicht alle Gewichtskontrolle Christoph Spengler @ RS IconMan 0.63 Icon-Utility Dirk Haun @ WI2 IdeaList 3.60 ASCII-Druckprog. Christoph Bartholme @ KA2 Jedi 0.29 GAL-Assembler Ralf Zimmermann @ OF2 Kandinsky 1.69 Zeichenprogramm Ulrich Rossgoderer @ M Lazaz! 2.07 Packershell Andreas Papula @ WI2 McFli 0.5 Animationsplayer John McLoud @ WI2 MoveIt 1.01 GEM-Spiel Dirk Hagedorn @ MK2 SCANGENI 1.0 Scannertreiber Christian Mittendorf SysInfo 2.10 Systeminfo Thorsten Bergner @ B Tel-Upate alle Rufus-Tool Christoph Spengler @ RS Tricky 1.00 GEM-Spiel Dirk Hagedorn @ MK2 WinLupe 6.70 Utility Christian Grunenberg @ LB XAcc-Spy 25.03.94 XACC-Utility Thomas Much @ KA2 Yukon Rel. D Kartenspiel Dirk Haun @ WI2 zControl 0.20 Kontrollfeld Ralf Zimmermann @ OF2 Zeig's mir 0.22 Dateiviewer Reiner Rosin @ WI2 ---------------------------------------------------------------------- (e-mail-Adressen: MausNet) Folgende Bibliotheken untersttzen den ICFS, so daž sich Program- mierer viel Arbeit sparen k”nnen: Bibliothek ab Version Sprache(n) Autor ------------------------------------------------------------------ EnhancedGEM 2.00 PC, LC, GC Christian Grunenberg @ LB ObjectGEM 1.11 Pure Pascal Thomas Much @ KA2 STJ-Oberon-2 2.05 Oberon-2 Stephan Junker @ AC2 SysGEM 1.10 PC, PP Andreas Pietsch @ WI2 Windoze PL 0 Pure C Dirk Haun @ WI2 ------------------------------------------------------------------ (PC: Pure C, PP: Pure Pascal, LC: Lattice C, GC: GNU C) Autoren, die nicht ber's MausNetz erreichbar sind: Christian Mittendorf: chris@ostkupan.ct.se Kolja Koischwitz: joust@cs.tu-berlin.de Christian Krger: chrisker@cs.tu-berlin.de Stephan Slabihoud: Stephan Slabihoud @ 2:2448/2020.6 (Fido) Erg„nzungen zu dieser Liste bitte an mich (Dirk Haun) senden, Adresse siehe unter "Kontaktadressen". 4 Kontaktadressen ================= Wer ist hierfr verantwortlich? Niemand, denn auch diese Software verwenden Sie auf eigene Gefahr. Die Idee stammt jedoch von Rosin Datentechnik Reiner Rosin Peter-Spahn-Str. 4 D-65375 Oestrich-Winkel Telefon 06723 4978 Fax 7190 email Reiner Rosin @ WI2 (MausNet) / Reiner_Rosin@wi2.maus.de und die Ausfhrung (ICFS.PRG) sowie diese Dokumentation sind von Dirk Haun Europastr. 8 D-64569 Nauheim e-mail: Dirk Haun @ WI2 (MausNet) Das ICFS.CPX und seine Beschreibung sind von John McLoud Mozartstraže 1a D-65439 Fl”rsheim am Main e-mail: John Mcloud@WI2 (MausNet) 5 Entwicklerdokumentation ========================= 5.1 Beschreibung der Schnittstelle ---------------------------------- Der ICFS legt einen Cookie namens 'ICFS' an. Der Wert dieses Cookies ist die Adresse einer Funktion, ber die Programme den ICFS aufrufen k”nnen. Die folgenden Beschreibungen erfolgen in C-Syntax (genauer: Pure C). Wenn Sie mit C nicht vertraut sind, sollten Sie sich zuvor die Hin- weise fr andere Programmiersprachen durchlesen. Der aktuelle Server hat die Versionsnummer 1.00. Er kennt folgende Subfunktionsnummern (ein "0x" kennzeichnet eine Hex-Zahl): #define ICF_GETSIZE 0x0000 /* Fenstergr”že, Version abfragen */ #define ICF_GETPOS 0x0001 /* Fensterposition anfordern */ #define ICF_FREEPOS 0x0002 /* Fensterposition freigeben */ #define ICF_SNAP 0x0003 /* Fenster verschieben */ #define ICF_GETBIGPOS 0x0004 /* grožes Fenster anfordern */ #define ICF_GETLOC 0x0005 /* Fensterposition abfragen */ #define ICF_GETWPOS 0x0021 /* Fensterposition anfordern */ #define ICF_FREEWPOS 0x0022 /* Fensterposition freigeben */ #define ICF_SNAPW 0x0023 /* Fenster verschieben */ #define ICF_GETBIGWPOS 0x0024 /* grožes Fenster anfordern */ #define ICF_GETWLOC 0x0025 /* Fensterposition abfragen */ #define ICF_FREEALL 0x0100 /* alle Positionen freigeben */ #define ICF_SCREEN 0x0101 /* Bildschirmgr”že bergeben */ #define ICF_NEXTPOS 0x0102 /* n„chste freie Position erfragen */ #define ICF_INFO 0x0200 /* Einstellungen abfragen */ #define ICF_CONFIG 0x0201 /* Konfiguration „ndern */ #define ICF_SETSIZE 0x0202 /* Fenstergr”že „ndern */ #define ICF_SETSPACE 0x0203 /* Fensterabstand „ndern */ #define ICF_SETBORDER 0x0204 /* Abstand zum Bildschirmrand */ #define ICF_NEXTINFO 0x02A0 /* neue Einstellungen abfragen */ #define ICF_WINOPEN 0x02A1 /* Anzahl offener Fenster abfragen */ #define ICF_GETPATH 0x0300 /* Pfad fr ICFS.PRG erfragen */ In C definiert man am besten int cdecl (*server)(int f,...); server=get_cookie('ICFS'); Alle Funktionen geben (im Register D0) einen int als Fehlercode zu- rck. 0 bedeutet "kein Fehler", eine negative Zahl steht fr einen Fehler. Ungltige Funktionsnummern werden mit -32 (Gemdos-Fehlermel- dung EINVFN, "Invalid function number") quittiert. Die Funktionen mit Nummern ab 0x0100 sollten von einem normalen Anwen- derprogramm nicht aufgerufen werden. Hierfr existiert das ICFS.CPX von John McLoud, mit dem die Einstellungen bequem vorgenommen werden k”nnen. Ein Programm, das Iconify ohne MultiTOS untersttzen will, braucht eigentlich nur die Funktionen ICF_GETPOS und ICF_FREEPOS zu unter- sttzen, die Verwendung von ICF_SNAP wird angeraten. Alternativ k”nnen in neueren ICFS-Versionen auch die Funktionen mit einem 'W' im Namen verwendet werden (also ICF_GETWPOS, ICF_FREEWPOS und ICF_SNAPW), dazu mehr bei der Beschreibung der einzelnen Funk- tionen. 5.2 Hinweise fr andere Programmiersprachen ------------------------------------------- Dieser Text kann natrlich keine Einfhrung in die Sprache C sein. Dies ist auch nicht notwendig, da fr das Verst„ndnis nur wenige Elemente von C ben”tigt werden. Es finden (fast) ausschliežlich die Datentypen "int" bzw. "unsigned int" Verwendung. Ein "int" ist eine 16-Bit-Zahl mit Vorzeichen (Werte- bereich -32768..+32767), ein "unsigned int" entsprechend eine 16-Bit- Zahl ohne Vorzeichen (Wertebereich 0..65535). Ein "*" bzw. "&" vor einem Variablennamen kennzeichnet einen Zeiger, d.h. daž statt des Werts der Variablen deren Adresse bergeben wird. Bei einigen wenigen Funktionen werden Strukturen und Bitfelder verwen- det, dies betrifft aber nur Konfigurationsaufrufe, mit denen der Pro- grammierer im Normalfall nichts zu tun hat: Eine Struktur (struct) entspricht einem Record in anderen Sprachen und dient dazu, mehrere Variablen zu einem neuen Variablentyp zusammenzufassen. Ein Bitfeld ist eine besondere Struktur, bei der die einzelnen Bits eines Wortes mit Namen belegt werden k”nnen. Anschliežend k”nnen die Bits dann wie normale Elemente einer Struktur angesprochen werden. Wenn ihre bevorzugte Programmiersprache dies nicht bietet, so k”nnen Sie auch mittels der blichen bitweisen Operationen darauf zugreifen. Es ist jeweils angegeben, welches Bit gemeint ist. Die šbergabe der Parameter bei allen ICFS-Aufrufen geschieht ber den Stack nach C-Konvention. D.h. daž der beim Aufruf am weitesten rechts stehende Parameter zuerst auf den Stack gelegt wird und der am wei- testen links stehende Parameter zum Schluž, d.h. beim Einsprung in den ICFS, obenauf liegt. C erlaubt Funktionen, bei denen die Zahl und Art der Parameter variie- ren k”nnen, davon wird hier Gebrauch gemacht. Fr andere Sprachen muž man daher ggfs. fr jede Subfunktion ein eigenes Binding erstellen. 5.3 Anmerkungen --------------- Der ICFS kann das MultiTOS-Iconify nicht nachbilden. Dies w„re nur durch tiefe Eingriffe in die AES zu erreichen. Die einzige Aufgabe des ICFS ist, die Belegung der Iconpositionen zwischen verschiedenen Programmen abzustimmen. Fr das eigentliche Iconify ist jedes Pro- gramm selbst zust„ndig. Wenn sowohl ICFS als auch ein MultiTOS-kompatibles Iconify angeboten werden, so sollten Programme den ICFS ignorieren und das Iconify nach der MultiTOS-Methode abwickeln. Unter MagiC!3 bzw. MagiCMac l„žt sich ICFS bei Bedarf so installieren, daž er auch auf das MultiTOS-Iconify Einfluž nimmt, wodurch sich fr den Anwender eine Mischform (Ablegen als Icons ber das Smaller-Fenstersymbol, Anordnung und Gr”že der Fen- ster ber ICFS einstellbar) ergibt. In den ICFS-Versionen 0.10-0.12 bestand ein direkter Zusammenhang zwi- schen der zurckgegebenen Positionsnummer ("Handle") und der tats„ch- lichen Position des Iconfensters auf dem Bildschirm. Ab ICFS 1.00 werden die Handles anders vergeben und fortlaufend hochgez„hlt. Einschr„nkungen: Die ICFS-Versionen 0.10-0.12 konnten nur ein Feld von 32x32 Iconfenstern verwalten, was bei virtuellen Aufl”sungen u.U. nicht ausreichend war. Ab ICFS 1.00 werden maximal 1024 Iconfenster in beliebiger Anordnung verwaltet. 5.4 ICFS-Versionen ------------------ Bisher wurden folgende ICFS-Versionen ver”ffentlicht: Version Datum Anmerkung ---------------------------------------- 0.10 07.03.1994 erste Version 0.11 25.03.1994 neu: ICF_SETSPACE 0.12 18.11.1994 Bugfix: Cookie Jar 1.00 06.08.1995 14 neue Funktionen, MagiC-Untersttzung ICFS 1.00 wurde um insgesamt 14 Funktionen (ICF_SNAP, ICF_GETBIGPOS, ICF_GETLOC, ICF_GETWPOS, ICF_FREEWPOS, ICF_SNAPW, ICF_GETBIGWPOS, ICF_GETWLOC, ICF_SETBORDER, ICF_SCREEN, ICF_NEXTPOS, ICF_NEXTINFO, ICF_WINOPEN und ICF_GETPATH) sowie um die Untersttzung fr MagiC!3 und MagiCMac erweitert, daher auch der grože Sprung in der Versi- onsnummer. andere Versionen Versionen mit Nummern kleiner 0.10 haben niemals existiert. Versi- onen, die ein 'á' (gr. Beta) hinter der Versionsnummer fhren, sind Beta-Versionen, d.h. Testversionen, die u.U. noch Fehler enthalten. Sollten Sie eine solche Version besitzen, so vernichten Sie sie bitte und besorgen Sie sich eine aktuellere Version. 5.5 Unterschiede der Versionen ------------------------------ Die folgende Tabelle zeigt, welche Funktionen ab welcher ICFS-Version zur Verfgung stehen: Funktion ab Version --------------------------- ICF_CONFIG alle ICF_FREEALL alle ICF_FREEPOS alle ICF_FREEWPOS 1.00 ICF_GETBIGPOS 1.00 (siehe Anmerkung) ICF_GETBIGWPOS 1.00 (siehe Anmerkung) ICF_GETLOC 1.00 ICF_GETPATH 1.00 ICF_GETPOS alle ICF_GETSIZE alle ICF_GETWLOC 1.00 ICF_GETWPOS 1.00 ICF_INFO alle ICF_NEXTINFO 1.00 ICF_NEXTPOS 1.00 ICF_SCREEN 1.00 ICF_SETBORDER 1.00 ICF_SETSIZE alle ICF_SETSPACE 0.11 ICF_SNAP 1.00 (siehe Anmerkung) ICF_SNAPW 1.00 (siehe Anmerkung) ICF_WINOPEN 1.00 Allgemein gilt aber, daž das Vorhandensein einer Funktion nicht ber die Versionsnummer abgefragt werden sollte! Stattdessen sollte der Rckgabewert der jeweiligen Funktion ausgewertet werden, denn alle ICFS-Versionen liefern -32 (den Gemdos-Fehlercode fr "Funktion nicht vorhanden"), wenn sie mit einer unbekannten Funktionsnummer aufge- rufen werden. Von dieser M”glichkeit sollten Sie insbesondere bei den Funktionen ICF_GETBIGPOS bzw. ICF_GETBIGWPOS und ICF_SNAP bzw. ICF_SNAPW Ge- brauch machen, da diese jederzeit mit ICF_CONFIG ein- und ausgeschal- tet werden k”nnen! šbrigens werden die bergebenen Parameter nicht ver„ndert, wenn eine Funktion nicht zur Verfgung steht. Daher k”nnen Sie einen Aufruf von ICF_SNAP beispielsweise so formulieren: int ret, new_x, new_y, width, height, win_handle, ic_handle; ret=server(ICF_SNAP,ic_handle,&new_x,&new_y); if(ret==-32 || ret==0) wind_set(win_handle,WF_CURRXYWH,new_x,new_y,width,height); else bell(); /* Fehler */ Die Funktion ICF_CONFIG verh„lt sich ab ICFS 1.00 etwas anders: Die angegebenen Žnderungen werden nur dann sofort bernommen, wenn kein Iconfenster offen ist, andernfalls werden sie zwischengespeichert und erst dann gesetzt, wenn einmal keine Iconfenster mehr offen sind. Somit verh„lt sich ICF_CONFIG nun wie ICF_SETSIZE, ICF_SETSPACE und ICF_SETBORDER. 6 Beschreibung der Funktionen ============================= ICFS 1.00 bietet die folgenden Funktionen an: ICF_CONFIG ICF_GETPOS ICF_SETBORDER ICF_FREEALL ICF_GETSIZE ICF_SETSIZE ICF_FREEPOS ICF_GETWLOC ICF_SETSPACE ICF_FREEWPOS ICF_GETWPOS ICF_SNAP ICF_GETBIGPOS ICF_INFO ICF_SNAPW ICF_GETBIGWPOS ICF_NEXTINFO ICF_WINOPEN ICF_GETLOC ICF_NEXTPOS ICF_GETPATH ICF_SCREEN 6.1 ICF_GETSIZE --------------- Name ICF_GETSIZE - Gr”že der Iconfenster abfragen Nummer 0 Definition int server(ICF_GETSIZE,int *w,int *h); Beschreibung ICF_GETSIZE liefert in 'w' (Breite) und 'h' (H”he) die aktuelle Gr”že eines ikonifizierten Fensters zurck. Rckgabe Die Funktion gibt die Versionsnummer des ICFS als BCD zurck (d.h. der Wert 0x0010 entspricht der Version 0.10). 6.2 ICF_GETPOS -------------- Name ICF_GETPOS - eine Iconposition anfordern Nummer 1 Definition int server(ICF_GETPOS,int *x,int *y,int *w,int *h); Beschreibung Der Server liefert eine Fensterposition (in 'x' und 'y') und die aktuelle Gr”že eines ikonifizierten Fen- sters (in 'w' und 'h') zurck. Diese Position ist nun belegt und muž mit ICF_FREEPOS wieder freigegeben wer- den, wenn sie nicht mehr ben”tigt wird. Rckgaben >=0: die Nummer der Position, genannt "Handle" -1: Fehler (keine Position mehr frei) siehe auch ICF_FREEPOS, ICF_GETBIGPOS, ICF_SNAP 6.3 ICF_FREEPOS --------------- Name ICF_FREEPOS - eine Iconposition freigeben Nummer 2 Definition void server(ICF_FREEPOS,int posnr); Beschreibung Gibt das Fenster 'posnr' (Nummer der Fensterposition wie von ICF_GETPOS oder ICF_GETBIGPOS geliefert) wie- der frei. Rckgaben keine siehe auch ICF_GETPOS, ICF_GETBIGPOS 6.4 ICF_SNAP ------------ Name ICF_SNAP - ein Iconfenster an eine andere Position verschieben Nummer 3 Definition int server(ICF_SNAP,int handle,int *x,int *y); Beschreibung Wenn ein Iconfenster verschoben wird, ist es wnschens- wert, daž es wieder an einer Position "einrastet", die ein Vielfaches der aktuellen H”he und Breite eines Iconfensters ist. Die Funktion erwartet in 'handle' ein Icon-Handle, wie es von ICF_GETPOS oder ICF_GETBIGPOS vergeben wurde und in 'x' und 'y' die gewnschte neue Position (linke obere Ecke des Fensters). Wird eine neue Position gefunden, so wird diese in 'x' und 'y' zurckgegeben, andernfalls bleiben 'x' und 'y' unver„ndert. Rckgaben 0: neue Iconposition gefunden -1: Fehler (Handle unbekannt oder an der gewnschten Stelle ist kein Platz mehr) siehe auch ICF_GETPOS, ICF_GETBIGPOS Anmerkung Diese Funktion steht erst ab ICFS 1.00 zur Verfgung. Testen Sie aber bitte nicht die Versionsnummer ab, son- dern rufen Sie die Funktion einfach auf und berprfen Sie, ob ICF_SNAP -32 (Funktion nicht vorhanden) oder 0 bzw. -1 (s.o.) liefert! Bedenken Sie bitte auch, daž diese Funktion jederzeit abschaltbar ist (siehe ICF_CONFIG). 6.5 ICF_GETBIGPOS ----------------- Name ICF_GETBIGPOS - eine Iconposition fr ein grožes Icon- fenster anfordern Nummer 4 Definition int server(ICF_GETBIGPOS,int wf,int hf,int *x,int *y, int *w,int *h); Beschreibung Der Server liefert eine Fensterposition (in 'x' und 'y') zurck. Im Gegensatz zu ICF_GETPOS k”nnen hiermit auch Iconfenster angefordert werden, deren Breite und H”he ein Vielfaches der Gr”že eines normalen Iconfen- sters ist. 'wf' und 'hf' geben die Faktoren an, d.h. bei wf=2 und hf=1 wird ein Fenster angefordert, das doppelt so breit und genauso hoch wie ein normales Iconfenster ist. 'wf' und 'hf' k”nnen aber auch beide 1 sein, die Funktion verh„lt sich dann wie ICF_GETPOS. In 'w' und 'h' wird die tats„chliche Breite und H”he in Pixeln zurckgeliefert. Dies bercksichtigt auch einen evtl. eingestellten Abstand zwischen den Iconfen- stern. Rckgaben >=0: die Nummer der Position, genannt "Handle" -1: Fehler (keine Position mehr frei) siehe auch ICF_FREEPOS, ICF_GETPOS, ICF_CONFIG Anmerkung ICF_GETBIGPOS ist per Default deaktiviert und muž erst mit ICF_CONFIG eingeschaltet werden. Wenn die Funktion nicht vorhanden oder deaktiviert ist, wird statt eines Handles -32 zurckgegeben. 6.6 ICF_GETLOC -------------- Name ICF_GETLOC - Position eines Iconfensters abfragen Nummer 5 Definition int server(ICF_GETLOC,int handle,int *x,int *y, int *w,int *h); Beschreibung Die Funktion liefert die aktuelle Position (in 'x' und 'y') und die aktuellen Ausmaže (in 'w' und 'h') des Iconfensters mit dem Handle 'handle' zurck. Rckgaben ==0: Position wurde ermittelt und zurckgegeben -1: Fehler (Handle unbekannt oder ungltig) siehe auch ICF_GETPOS, ICF_GETBIGPOS, ICF_SNAP 6.7 ICF_GETWPOS --------------- Name ICF_GETWPOS - eine Iconposition anfordern Nummer $21 (dez. 33) Definition int server(ICF_GETWPOS,int win,int *x,int *y, int *w,int *h); Beschreibung Der Server liefert eine Fensterposition (in 'x' und 'y') und die aktuelle Gr”že eines ikonifizierten Fen- sters (in 'w' und 'h') zurck. Diese Position ist nun belegt und muž mit ICF_FREEWPOS wieder freigegeben wer- den, wenn sie nicht mehr ben”tigt wird. Im Gegensatz zu ICF_GETPOS bergibt man hier in 'win' das Handle eines bereits mit wind_create() erzeugten Fensters. Die zurckgelieferte Iconposition ist nun fr dieses Fenster reserviert. Rckgaben ==0: es wurde eine Iconposition gefunden und fr das Fenster reserviert -1: Fehler (keine Position mehr frei) siehe auch ICF_FREEWPOS, ICF_GETBIGWPOS, ICF_SNAPW 6.8 ICF_FREEWPOS ---------------- Name ICF_FREEWPOS - eine Iconposition freigeben Nummer $22 (dez. 34) Definition void server(ICF_FREEWPOS,int win); Beschreibung Gibt die Position frei, die das Fenster mit AES-Handle 'win' gerade belegt. Diese Position muž zuvor mit ICF_GETWPOS oder ICF_GETBIGWPOS angefordert worden sein. Rckgaben keine siehe auch ICF_GETWPOS, ICF_GETBIGWPOS 6.9 ICF_SNAPW ------------- Name ICF_SNAPW - ein Iconfenster an eine andere Position verschieben Nummer $23 (dez. 35) Definition int server(ICF_SNAPW,int win,int *x,int *y); Beschreibung Wenn ein Iconfenster verschoben wird, ist es wnschens- wert, daž es wieder an einer Position "einrastet", die ein Vielfaches der aktuellen H”he und Breite eines Iconfensters ist. Die Funktion erwartet in 'win' ein AES-Handle eines Fensters, das mit wind_create() angelegt und fr das bereits mit ICF_GETWPOS oder ICF_GETBIGWPOS eine Posi- tion angefordert wurde. In 'x' und 'y' wird die ge- wnschte neue Position (linke obere Ecke des Fensters) erwartet. Wird eine neue Position gefunden, so wird diese in 'x' und 'y' zurckgegeben, andernfalls bleiben 'x' und 'y' unver„ndert. Rckgaben 0: neue Iconposition gefunden -1: Fehler (Fenster unbekannt oder an der gewnschten Stelle ist kein Platz mehr) siehe auch ICF_GETWPOS, ICF_GETBIGWPOS Anmerkung Diese Funktion steht erst ab ICFS 1.00 zur Verfgung. Testen Sie aber bitte nicht die Versionsnummer ab, son- dern rufen Sie die Funktion einfach auf und berprfen Sie, ob ICF_SNAPW -32 (Funktion nicht vorhanden) oder 0 bzw. -1 (s.o.) liefert! Bedenken Sie bitte auch, daž diese Funktion jederzeit abschaltbar ist (siehe ICF_CONFIG). 6.10 ICF_GETBIGWPOS ------------------- Name ICF_GETBIGWPOS - eine Iconposition fr ein grožes Icon- fenster anfordern Nummer $24 (dez. 36) Definition int server(ICF_GETBIGWPOS,int win,int wf,int hf, int *x,int *y,int *w,int *h); Beschreibung Der Server liefert eine Fensterposition (in 'x' und 'y') fr ein Fenster zurck, dessen AES-Handle in 'win' bergeben wird. Im Gegensatz zu ICF_GETWPOS k”n- nen hiermit auch Iconfenster angefordert werden, deren Breite und H”he ein Vielfaches der Gr”že eines norma- len Iconfensters ist. 'wf' und 'hf' geben die Faktoren an, d.h. bei wf=2 und hf=1 wird ein Fenster angefordert, das doppelt so breit und genauso hoch wie ein normales Iconfenster ist. 'wf' und 'hf' k”nnen aber auch beide 1 sein, die Funktion verh„lt sich dann wie ICF_GETWPOS. In 'w' und 'h' wird die tats„chliche Breite und H”he in Pixeln zurckgeliefert. Dies bercksichtigt auch einen evtl. eingestellten Abstand zwischen den Iconfen- stern. Rckgaben ==0: es wurde eine Iconposition gefunden und fr das Fenster reserviert -1: Fehler (keine Position mehr frei) siehe auch ICF_FREEWPOS, ICF_GETWPOS, ICF_CONFIG Anmerkung ICF_GETBIGWPOS ist per Default deaktiviert und muž erst mit ICF_CONFIG eingeschaltet werden. Wenn die Funktion nicht vorhanden oder deaktiviert ist, wird -32 zurckgegeben. 6.11 ICF_GETWLOC ---------------- Name ICF_GETWLOC - Position eines Iconfensters abfragen Nummer $25 (dez. 37) Definition int server(ICF_GETWLOC,int win,int *x,int *y, int *w,int *h); Beschreibung Die Funktion liefert die aktuelle Position (in 'x' und 'y') und die aktuellen Ausmaže (in 'w' und 'h') des Iconfensters mit dem AES-Handle 'win' zurck. Rckgaben ==0: Position wurde ermittelt und zurckgegeben -1: Fehler (Fensterhandle unbekannt oder ungltig) siehe auch ICF_GETWPOS, ICF_GETBIGWPOS, ICF_SNAPW 6.12 ICF_FREEALL ---------------- Name ICF_FREEALL - alle Iconpositionen freigeben Nummer $100 (dez. 256) Definition void server(ICF_FREEALL); Beschreibung Gibt alle belegten Fensterpositionen frei. Gedacht ist dies haupts„chlich dazu, um von abgestrzten Program- men nicht mehr freigegebene Positionen und Handles wie- der nutzbar zu machen. Diese Funktion sollte nicht automatisch aufgerufen, sondern nur auf besonderen Wunsch des Anwenders ausge- l”st werden k”nnen. Rckgaben keine Anmerkung Das ICFS.CPX von John McLoud bietet diese Funktion an. 6.13 ICF_SCREEN --------------- Name ICF_SCREEN - Bildschirmgr”že bergeben Nummer $101 (dez. 257) Definition void server(ICF_SCREEN,int x,int y,int w,int h); Beschreibung Hierber kann die Gr”že des Bildschirms, d.h. die ver- fgbare Arbeitsfl„che, bergeben werden. Normalerweise berprft ICFS bei jedem Aufruf die Bild- schirmgr”že mit wind_get(0,WF_WORKXYWH,&x,&y,&w,&h); In manchen Situationen kann dieser AES-Aufruf aber un- erwnscht sein (z.B. wenn der ICFS seinerseits aus den AES heraus aufgerufen wird). In solchen F„llen muž dann die Gr”že des Arbeitsbereichs ber ICF_SCREEN bergeben werden. Achtung: Wenn ICF_SCREEN einmal aufgerufen wurde, wird der ICFS ab dann keinen wind_get(WORKXYWH)-Aufruf mehr durchfhren. Alle Žnderungen der Aufl”sung mssen also durch weitere ICF_SCREEN-Aufrufe mitgeteilt werden. Diese Funktion ist nur in ganz wenigen Spezialf„llen von Nutzen. Wer immer sie aufruft, sollte genau wis- sen, was er tut ... Unmittelbar nach ICF_SCREEN sollte nach M”glichkeit auch ICF_FREEALL aufgerufen werden. Rckgaben keine 6.14 ICF_NEXTPOS ---------------- Name ICF_NEXTPOS - n„chste freie Iconposition erfragen Nummer $102 (dez. 258) Definition int server(ICF_NEXTPOS,int *x,int *y,int *w,int *h); Beschreibung Die Funktion ermittelt die n„chste freie Iconposition, d.h. die Position, die beim n„chsten Aufruf von ICF_GETPOS oder ICF_GETWPOS vergeben wird. Man darf sich nun natrlich nicht darauf verlassen, bei einem nachfolgenden Aufruf von ICF_GETPOS auch wirklich diese Position zu bekommen, da die Position zwischenzeitlich an ein anderes Programm vergeben worden sein k”nnte. Rckgaben ==0: freie Position gefunden -1: Fehler (keine Position mehr frei) 6.15 ICF_INFO ------------- Name ICF_INFO - Informationen abfragen Nummer $200 (dez. 512) Definition int server(ICF_INFO,ICFSCONFIG *conf,int size); Beschreibung 'conf' ist ein Zeiger auf eine Struktur ICFSCONFIG, die wie folgt definiert ist: struct _conf { unsigned resvd : 11; /* unbenutzt, sollte 0 sein */ unsigned snap : 1; /* Bit 4: 1=Snapping ein */ unsigned bigics : 1; /* Bit 3: 1=grože Iconfenster */ unsigned yfirst : 1; /* Bit 2: 1=y-Richtung zuerst */ unsigned right : 1; /* Bit 1: 1=rechts anfangen */ unsigned top : 1; /* Bit 0: 1=oben anfangen */ }; typedef struct { unsigned int version; /* Versionsnummer als BCD */ struct _conf config; /* Konfigurationsbits, s.o. */ int xsize, ysize, /* Breite, H”he des Fensters */ xspace, yspace, /* Abstand zwischen Fenstern */ xborder, yborder; /* Abstand vom Bildschirmrand */ } ICFSCONFIG; In der Struktur steht als erstes die Versionsnummer als BCD (d.h. 0x0010 fr Version 0.10), dann folgt ein Bitfeld, d.h. ein 16-Bit-Wort, dessen einzelne Bits die angegebene Bedeutung haben (vgl. auch ICF_CONFIG). Anschliežend stehen noch die aktuelle Breite und H”he eines ikonifzierten Fensters, sowie der Abstand zwi- schen zwei solchen Fenstern und zum Bildschirmrand. Durch diesen Aufruf hat man Zugriff auf alle wichtigen Informationen der aktuellen Konfiguration. Beim Aufruf wird ein Zeiger auf einen Speicherbereich im Anwender- programm(!) bergeben, den der ICFS dann mit den Wer- ten fllt. In 'size' wird die Gr”že dieses Bereichs bergeben, als Rckgabewert erh„lt man (als Informati- on) die tats„chliche Gr”že der Struktur. Sp„tere ICFS- Versionen k”nnten eine gr”žere Struktur verwenden, durch den Parameter 'size' kopiert der ICFS aber immer nur soviele Daten, wie der Aufrufer kennt (tats„chlich wurde diese Struktur bereits zweimal erweitert). Da die Struktur in den Speicherbereich des Anwenderpro- gramms kopiert wird, ist ein Ver„ndern der Werte natr- lich ohne Wirkung. Dafr existieren die Funktionen ICF_CONFIG, ICF_SETSIZE, ICF_SETSPACE und ICF_SETBORDER. Rckgabe Die Gr”že der ICFSCONFIG-Struktur der installierten ICFS-Version. siehe auch ICF_CONFIG, ICF_SETSIZE, ICF_SETSPACE, ICF_SETBORDER Anmerkung Die Elemente 'xspace' und 'yspace' existieren in der Struktur erst ab ICFS 0.11, 'xborder' und 'yborder' erst ab ICFS 1.00. 6.16 ICF_CONFIG --------------- Name ICF_CONFIG - ICFS konfigurieren Nummer $201 (dez. 513) Definition int server(ICF_CONFIG,unsigned int config); Beschreibung Mit den untersten drei Bits von config kann die Art und Weise eingestellt werden, wie die Iconfenster auf dem Bildschirm plaziert werden: Bit 0: 0 = unten anfangen 1 = oben anfangen Bit 1: 0 = links anfangen 1 = rechts anfangen Bit 2: 0 = erst in x-, dann y-Richtung belegen 1 = erst in y-, dann x-Richtung Die MultiTOS-Methode (unten links beginnen, in x-Rich- tung weiter) entspricht also dem Wert 0, oben rechts beginnend in y-Richtung (nach unten) w„re der Wert 7. šber das vierte Bit k”nnen ab ICFS 1.00 Iconfenster aktiviert werden, deren Breite und H”he ein vielfaches der normalen Fenstermaže sind (siehe ICF_GETBIGPOS bzw. ICF_GETBIGWPOS): Bit 3: 0 = grože Iconfenster nicht erlaubt (default) 1 = grože Iconfenster erlaubt šber das fnfte Bit kann, ebenfalls ab Version 1.00, das Snapping aktiviert oder deaktiviert werden (die Defaulteinstellung ist "aus"): Bit 4: 0 = Snapping aus (default) 1 = Snapping ein Die restlichen Bits werden z.Z. nicht verwendet und sollten 0 sein. Rckgaben ICFS 0.10-0.12: immer 0, Konfiguration wird sofort bernommen ab ICFS 1.00: 0: Konfiguration wurde bernommen 1: Konfiguration wird bernommen, sobald keine Icon- fenster mehr offen sind siehe auch ICF_INFO, ICF_NEXTINFO, ICF_GETBIGPOS, ICF_GETBIGWPOS Anmerkung Die Werte fr die Schalter fr grože Iconfenster (Bit 3) und das Snapping (Bit 4) werden immer sofort ber- nommen, unabh„ngig davon, ob noch Fenster offen sind. 6.17 ICF_SETSIZE ---------------- Name ICF_SETSIZE - Iconfenstergr”že setzen Nummer $202 (dez. 514) Definition int server(ICF_SETSIZE,int nw,int nh); Beschreibung Setzt eine neue Breite 'nw' und H”he 'nh' fr Iconfen- ster fest. Sind noch Fensterpositionen belegt, so wird diese Angabe erst bernommen, wenn einmal alle Positi- onen frei sind (Die Aufrufe ICF_GETSIZE, ICF_GETPOS bzw. ICF_GETWPOS und ICF_GETBIGPOS bzw. ICF_GETBIGWPOS liefern solange auch noch die alten Gr”ženangaben). Rckgaben -1: ungltige Gr”ženangaben 0: Gr”ženangabe wurde bernommen 1: Gr”ženangabe wird bernommen, sobald kein Icon- fenster mehr offen ist siehe auch ICF_INFO, ICF_NEXTINFO, ICF_GETSIZE, ICF_GETPOS Anmerkung Atari empfiehlt, in ein ikonifiziertes Fenster ein Icon zu zeichnen. Geht man von einem normalgrožen Icon aus (32x32 Pixel mit Text darunter), dann erscheint eine Fenstergr”že von weniger als 64x64 Pixel nicht sinnvoll (64x64 sind die Auženmaže). 6.18 ICF_SETSPACE ----------------- Name ICF_SETSPACE - Abstand zwischen Iconfenstern setzen Nummer $203 (dez. 515) Definition int server(ICF_SETSPACE,int nx,int ny); Beschreibung Setzt den Abstand zwischen zwei ICFS-Fenstern fest, ge- trennt nach x- und y-Abstand ('nx' bzw. 'ny'). Sind noch Fensterpositionen belegt, so werden diese Angaben erst bernommen, wenn einmal alle Positionen frei sind. ICF_INFO liefert solange noch die alten Werte. Rckgaben -1: ungltige Abstandsangaben 0: Abst„nde wurden bernommen 1: Abst„nde werden bernommen, sobald kein Icon- fenster mehr offen ist siehe auch ICF_INFO, ICF_NEXTINFO Anmerkung Diese Funktion existiert erst ab ICFS 0.11 (ebenso wie die zugeh”rigen Elemente in ICFSCONFIG). Žltere Versi- onen liefern bei Aufruf von ICF_SETSPACE die Rckgabe -32. 6.19 ICF_SETBORDER ------------------ Name ICF_SETBORDER - Abstand vom Bildschirmrand einstellen Nummer $204 (dez. 516) Definition int server(ICF_SETBORDER,int bx,int by); Beschreibung Mit dieser Funktion kann ein Abstand eingestellt wer- den, den die Iconfenster vom Bildschirmrand einhalten sollen. Der Abstand kann fr die x- und y-Richtung ge- trennt angegeben werden ('bx' bzw. 'by') und gilt je- weils fr den linken und rechten bzw. oberen und unte- ren Rand, d.h. bei einem Wert von 4 fr 'bx' werden vom linken und vom rechten Rand jeweils vier Pixel Ab- stand gelassen. Sind beim Aufruf von ICF_SETBORDER noch Fensterpositi- onen belegt, so werden die Angaben erst bernommen, wenn einmal alle Positionen frei sind. ICF_INFO lie- fert solange noch die alten Werte. Rckgaben -1: ungltige Abstandsangaben 0: Abst„nde wurden bernommen 1: Abst„nde werden bernommen, sobald kein Icon- fenster mehr offen ist siehe auch ICF_INFO, ICF_NEXTINFO Anmerkung Diese Funktion existiert erst ab ICFS 1.00 (ebenso wie die zugeh”rigen Elemente in ICFSCONFIG). Žltere Versi- onen liefern bei Aufruf von ICF_SETBORDER die Rckgabe -32. 6.20 ICF_NEXTINFO ----------------- Name ICF_NEXTINFO - neue Informationen abfragen Nummer $2A0 (dez. 672) Definition int server(ICF_NEXTINFO,ICFSCONFIG *conf,int size); Beschreibung Mit dieser Funktion k”nnen die Informationen abgefragt werden, die als n„chstes eingestellt werden. Ansonsten funktioniert dieser Aufruf exakt wie ICF_INFO. Die Aufrufe ICF_CONFIG, ICF_SETSIZE, ICF_SETSPACE und ICF_SETBORDER zeigen keine Wirkung, solange noch Icon- fenster offen sind. Die neuen Werte werden aber zwi- schengespeichert und eingestellt, sobald einmal kein Iconfenster mehr offen ist. Und genau diese zwischenge- speicherten Werte k”nnen mit ICF_NEXTINFO abgefragt werden. Rckgabe Die Gr”že der ICFSCONFIG-Struktur der installierten ICFS-Version. siehe auch ICF_INFO, ICF_CONFIG, ICF_SETSIZE, ICF_SETSPACE 6.21 ICF_WINOPEN ---------------- Name ICF_WINOPEN - liefert Anzahl der offenen Iconfenster Nummer $2A1 (dez. 673) Definition int server(ICF_WINOPEN); Beschreibung šber diesen Aufruf kann abgefragt werden, ob und wie- viele Iconfenster noch offen bzw. dem ICFS bekannt sind. Diese Funktion ist nicht fr normale Anwenderprogramme gedacht, sondern fr Konfigurationsprogramme, die die ICFS-Einstellungen „ndern wollen und dazu wissen ms- sen, ob die Žnderungen gleich oder erst sp„ter ber- nommen werden. Die Funktion k”nnte auch beim Debugging behilflich sein, um festzustellen, ob Programme vergessen haben, ihre Iconfenster beim ICFS abzumelden. Rckgabe Anzahl der offenen Iconfenster 6.22 ICF_GETPATH ---------------- Name ICF_GETPATH - Pfad von ICFS.PRG erfragen Nummer $300 (dez. 768) Definition void server(ICF_GETPATH,char *path); Beschreibung Diese Funktion liefert den kompletten Pfad- und Datei- namen, unter dem ICFS.PRG gestartet wurde. Dazu ber- gibt man in 'path' einen Zeiger auf einen ausreichend grožen Speicherbereich, in dem ICFS dann den Namen als nullterminierten C-String ablegt. Achtung: Es sind F„lle denkbar, in denen ICFS seinen Pfad nicht oder nicht korrekt ermitteln kann (z.B. wenn MetaDOS unter einem Multitasking-System l„uft oder wenn ICFS im AUTO-Ordner liegt und nicht ICFS.PRG heižt). Bevor man den Pfad verwendet, sollte man also nachprfen, ob die angegebene Datei tats„chlich exi- stiert. Im Normalfall, d.h. wenn ICFS.PRG aus dem AUTO- oder unter MagiC aus dem APPS-Ordner heraus gestartet wur- de, stimmt der Pfad aber. Rckgaben keine A MultiTOS-Iconify ================== Das MultiTOS-Iconify (ab MultiTOS 1.08beta sowie unter MagiC!3 und MagiCMac) wird ausgel”st ber das neue Fensterelement "Smaller" (auch "Iconifier") genannt. Wenn der Smaller angeklickt wird, erh„lt das Programm eine Nachricht WM_ICONIFY bzw. WM_ALLICONIFY (wenn gleich- zeitig die Control-Taste gedrckt wurde). Die Nachrichten sind wie folgt aufgebaut: msg[0] = WM_ICONIFY (34) msg[1] = Application-ID des Absenders msg[2] = 0 msg[3] = Handle des Fensters, das ikonifiziert werden soll msg[4] = x-Koordinate fr das Iconfenster msg[5] = y-Koordinate fr das Iconfenster msg[6] = Breite des Iconfensters (Auženmaže) msg[7] = H”he des Iconfensters (Auženmaže) Die Nachricht WM_ALLICONIFY ist genauso aufgebaut, nur msg[0] enth„lt den Wert 36. Als Reaktion auf WM_ICONIFY sollte das Programm wind_set(msg[3],WF_ICONIFY,msg[4],msg[5],msg[6],msg[7]); aufrufen. Das Fenster wird dann als Icon abgelegt. Nach einem Doppel- klick in ein solches Fenster erh„lt das Programm dann die Nachricht WM_UNICONIFY (Nr. 35), die ebenfalls wie WM_ICONIFY aufgebaut ist, dann aber die alten Koordinaten und Maže des Fensters vor seiner Verkleinerung enth„lt. Wenn ein Programm von sich aus ein Fenster als Icon ablegen will (z.B. als Reaktion auf die Tastenkombination [Control][Alternat][Leer- taste]), dann kann es dazu wie folgt vorgehen ('win' sei das Handle des Fensters): wind_close(win); wind_set(win,WF_ICONIFY,-1,-1,-1,-1); wind_open(win,-1,-1,-1,-1); Dieser "Trick" wurde nachtr„glich fr MultiTOS dokumentiert und funk- tioniert auch unter MagiC!3 und MagiCMac (dort muž das Fenster sogar nicht extra geschlossen werden, der angegebene Aufruf von wind_set() gengt v”llig). Noch einige Anmerkungen: ù Wenn das Fenster vor wind_set(win,WF_ICONIFY,-1,-1,-1,-1) ge- schlossen wird, kann WM_UNICONIFY natrlich keine gltigen Koor- dinaten fr das alte Fenster liefern, das Programm muž sich diese dann also selbst merken. ù Als Reaktion auf WM_ALLICONIFY sollte ein Programm alle seine Fenster schliežen und stattdessen ein neues Iconfenster ”ffnen. Andere bereits als Icons abgelegte Fenster der gleichen Applika- tion sollten aber in ihrem Zustand belassen werden. Darber, ob ein Programm beim "All-Iconify" auch seine Men- leiste sperren sollte, so daž keine neuen Aktionen ausgel”st werden k”nnen ("Applikation ikonifizieren") herrscht z.Z. noch Uneinigkeit, es erscheint aber logisch: Einzel-Iconify wird normalerweise dann verwendet, wenn man ein einzelnes Fenster "aus dem Weg r„umen" m”chte. Der Wunsch, alle Fenster zu ikonifi- zieren deutet eher darauf hin, daž mit einer anderen Applikation weitergearbeitet werden soll und man zum aktuellen Programm erst sp„ter wieder zurckkehren will (dies gibt in diesem Punkt aber nur die pers”nliche Meinung des Autors dieser Zeilen wider ...). ù Durch den Aufruf von wind_set(WF_ICONIFY) mit den Koordinaten aus der WM_ICONIFY-Nachricht wird das Fenster automatisch an die neue Position versetzt. Es ist also nicht notwendig, zus„tzlich noch wind_set(WF_CURRXYWH) aufzurufen, wie es einige Programme unn”tigerweise tun. ù Atari empfiehlt, in ein als Icon abgelegtes Fenster ein Icon zu zeichnen. Wenn ein Programm mehrere Fenster hat, dann sollte aus dem Iconfenster bzw. dem darin dargestellten Icon zumindest der Typ des ursprnglichen Fensters hervorgehen (also nicht einfach in jedes Iconfenster das gleiche Icon malen). Eine andere sinnvolle Nutzung des Iconfensters besteht in einer verkleinerten oder verkrzten Darstellung des ursprnglichen Fen- sterinhalts, also z.B. einer verkleinerten Darstellung eines Bildes oder der Angabe der Anzahl der im Fenster dargestellten Objekte. ù Beim Redraw des Iconfensters sollte man m”glichst die gerade aktuellen Ausmaže (z.B. mit wind_get(WF_WORKXYWH)) abfragen. Insbesondere sollte man nicht davon ausgehen, daž das Fenster immer 72 Pixel breit und hoch ist (auch wenn dies die Default- einstellung in allen Systemen ist, die Iconify untersttzen). ù Die Ausgabe des Icons bzw. des verkleinerten Fensterinhalts sollte m”glichst zentriert erfolgen (aktuelle Ausmaže abfra- gen!). ù Das neue Fensterelement Smaller kann (und sollte) immer bei wind_create() mit angegeben werden, wenn das Fenster als Icon abgelegt werden k”nnen soll. Die Bitkombination fr den Smaller wurde von Atari extra nochmals ge„ndert, damit dieses Bit auch wirklich gefahrlos unter allen TOS-Versionen gesetzt werden kann. Infolgedessen sollte man auch immer damit rechnen, WM_ICONIFY- Nachrichten zu empfangen. Fr Betriebssystemversionen, die kein Iconify anbieten (z.B. SingleTOS), sind Zusatzprogramme denkbar (bzw. existieren sogar schon), die das Iconify dort nachrsten. Konstanten: /* new AES messages */ #define WM_ICONIFY 34 #define WM_UNICONIFY 35 #define WM_ALLICONIFY 36 /* new window defs */ #define WF_ICONIFY 26 #define WF_UNICONIFY 27 #define SMALLER 0x4000