home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 23 / AACD 23.iso / AACD / Programming / ExtraLib / include / rhosigma / extradefs.h < prev    next >
Encoding:
C/C++ Source or Header  |  2001-05-01  |  19.3 KB  |  424 lines

  1. /* ___________________________________________________________________________
  2. ** |*************************************************************************|
  3. ** |*|¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯|*|¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯|*|
  4. ** |*| Set TAB to 4 for best readable file layout.  |*|  C++ MaxonDev 4.0  |*|
  5. ** |*|______________________________________________|*|____________________|*|
  6. ** |*************************************************************************|
  7. ** |*|¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯|*|¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯|*|
  8. ** |*|               |*|  $Id: extradefs.h (28.04.01)                      |*|
  9. ** |*| ###### ###### |*|  RhoSigma Source based on NDK 3.1 Includes 40.15  |*|
  10. ** |*| ##  ## ##   # |*| _________________________________________________ |*|
  11. ** |*| ##  ##  ##    |*|                                                   |*|
  12. ** |*| ######   ##   |*|  The public C/C++ definitions for extra.library   |*|
  13. ** |*| ##      ##    |*|                                                   |*|
  14. ** |*| ##     ##   # |*| ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ |*|
  15. ** |*| ##     ###### |*|  Copyright © 1998-2001 RhoSigma, Roland Heyder    |*|
  16. ** |*|               |*|  All Rights Reserved.                             |*|
  17. ** |*|_______________|*|___________________________________________________|*|
  18. ** |*************************************************************************|
  19. ** ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
  20. */
  21.  
  22. #ifndef RHOSIGMA_EXTRADEFS_H
  23. #define RHOSIGMA_EXTRADEFS_H
  24.  
  25. #ifndef  EXEC_TYPES_H
  26. #include <exec/types.h>
  27. #endif
  28. #ifndef  EXEC_LIBRARIES_H
  29. #include <exec/libraries.h>
  30. #endif
  31. #ifndef  EXEC_ALERTS_H
  32. #include <exec/alerts.h>
  33. #endif
  34.  
  35. /* -------- die BufInfoBlock-Struktur von »BufInfo()« -------------------- */
  36.  
  37. struct BIBStruct {
  38.     APTR    bib_OwnerID;     /* Task, der diesen Puffer öffnete                */
  39.     ULONG    bib_MaxSize;     /* momentane Größe des Datenbereichs in Byte    */
  40.     ULONG    bib_FreeSize;     /* davon momentan noch unbenutzt                */
  41.     APTR    bib_DataStart;     /* Adresse des gegenwärtigen Datenbereichs        */
  42.     ULONG    bib_CurPos;         /* aktuelle Cursorposition (Zählbeginn=0 !!)    */
  43.     ULONG    bib_EndPos;         /* aktuelle Anfügeposition                        */
  44.     APTR    bib_LastFind;     /* Zeiger auf zuletzt gesuchte Daten od. 0-PTR    */
  45.     ULONG    bib_FindSize;     /* die Länge obiger Such-Daten oder null        */
  46.     ULONG    bib_KeyNum;         /* der Schlüssel der o.g. Such-Daten oder -1    */
  47. /* ---------------------------- neu ab v2.062                                */
  48.     ULONG    bib_DataMemType; /* Speicherflags (MEMF_...) des Datenbereichs  */
  49. };
  50.  
  51. /* -------- Modes für »SeekBuf()« ---------------------------------------- */
  52.  
  53. #define SKM_Current     0    /* Positionierung relativ zur gegenwärtigen CurPos */
  54. #define SKM_Start     1    /* Positionierung relativ zum Pufferanfang         */
  55. #define SKM_End         2    /* Positionierung relativ zum Pufferende           */
  56. #define SKM_Bookmark 3    /* »Position« = Nummer der gewünschten Bookmark    */
  57.  
  58. /* -------- die Parameter-Struktur für »UnpackByteRun1()« ---------------- */
  59.  
  60. struct UnpackParam {
  61.     APTR    up_InBuf;    /* Zeiger auf die gepackten Daten            */
  62.     LONG    up_InLen;    /* die Größe des gepackten Bereichs in Byte  */
  63.     LONG    up_Private;    /* beim ersten Aufruf unbedingt auf 0 setzen */
  64. };
  65.  
  66. /* -------- Styles, Masken u. Flags für »SpecTextPrefs()« ---------------- */
  67.  
  68. /** Styles **/
  69. #define STS_Plain      0    /* normaler Text        \                              */
  70. #define STS_Underline 1    /* unterstrichener Text |  können durch Addition oder  */
  71. #define STS_Bold      2    /* fettgedruckter Text    |  log. ODER kombiniert werden */
  72. #define STS_Italic      4    /* kursiver Text        /                              */
  73.  
  74. /** Masken **/
  75. #define STM_Normal    0x00    /* keine Umrandung, d.h. normale Textausgabe  */
  76. #define STM_Outline    0xff    /* volle Umrandung                            */
  77. #define STM_Shadow    0x1c    /* Schatten unten/rechts sichtbar             */
  78. #define STM_Ghost    0xc1    /* dies wirkt am besten, wenn Sie als »MPen«  */
  79.                             /* die selbe Farbe verwenden, wie der Hinter- */
  80.                             /* grund hat                                  */
  81.  
  82. /** Flags **/
  83. #define STB_FJAM2 0   /* Normalerweise benutzt »SpecText()« den DrawMode JAM1, */
  84. #define STF_FJAM2 1   /* mit diesem Flag wird jedoch JAM2 erzwungen.           */
  85.  
  86. #define STB_AP2MP 1   /* immer der gerade eingestellte »APen« des RastPorts */
  87. #define STF_AP2MP 2   /* soll als »MainPen« (MPen) verwendet werden         */
  88.  
  89. #define STB_BP2TL 2   /* immer der gerade eingestellte »BPen« des RastPorts */
  90. #define STF_BP2TL 4   /* soll als »TopLeftPen« (TLPen) verwendet werden     */
  91.  
  92. #define STB_OP2BR 3   /* immer der gerade eingestellte »OPen« des RastPorts */
  93. #define STF_OP2BR 8   /* soll als »BottomRightPen« (BRPen) verwendet werden */
  94.  
  95. #define STB_PSWAP 4   /* vertauscht »TLPen« u. »BRPen«, d.h. »TLPen« wird für */
  96. #define STF_PSWAP 16  /* un./re. und »BRPen« für ob./li. verwendet            */
  97.  
  98. /*
  99. ** Die folgenden Flags haben keinen Einfluß auf die Arbeitsweise der Funk-
  100. ** tion »SpecText()«. Sie dienen nur dazu, »SpecTextPrefs()« mitzuteilen,
  101. ** welche Parameter neu eingestellt werden sollen. Damit soll überflüssiges
  102. ** Register-retten verhindert werden, da Sie nicht jedem Register, welches
  103. ** von »SpecTextPrefs()« erwartet wird, zwangsläufig einen sinnvollen Wert
  104. ** zuweisen müssen. Wenn Sie z.B. mit D0-D5 irgendwelche Berechnungen machen,
  105. ** oder sie als Schleifenzähler benutzen, und wollen dann den »MPen« ver-
  106. ** ändern, dann brauchen Sie nur D0 mit diesem zu initialisieren und D5 das
  107. ** entsprechende Flag (STF_CMPEN) zuweisen, während Sie sich um D1-D4 nicht
  108. ** sorgen müssen, da diese bei jenem Aufruf vollkommen unberührt und unver-
  109. ** ändert bleiben, d.h. sie müssen weder gerettet noch initialisiert werden.
  110. **
  111. ** ACHTUNG: Wenn keines der folgenden Flags angegeben wird, dann heißt das
  112. ** ¯¯¯¯¯¯¯¯ nicht, daß KEIN Wert geändert werden soll, sondern daß ALLE Werte
  113. **          zu ändern sind !! (In diesem Falle müssen dann logischer Weise
  114. **                              auch alle Register initialisiert werden.)
  115. */
  116.  
  117. #define STB_CMPEN 10    /* Nur den »MPen« auf den angegebenen Wert ändern. */
  118. #define STF_CMPEN 1024
  119.  
  120. #define STB_TLPEN 11    /* Nur den »TLPen« auf den angegebenen Wert ändern. */
  121. #define STF_TLPEN 2048
  122.  
  123. #define STB_BRPEN 12    /* Nur den »BRPen« auf den angegebenen Wert ändern. */
  124. #define STF_BRPEN 4096
  125.  
  126. #define STB_STYLE 13    /* Nur den SoftStyle auf den angegebenen Wert ändern. */
  127. #define STF_STYLE 8162
  128.  
  129. #define STB_CMASK 14    /* Nur die Maske auf den angegebenen Wert ändern. */
  130. #define STF_CMASK 16384
  131.  
  132. #define STB_FLAGS 15    /* Nur die Flags auf den angegebenen Wert ändern. */
  133. #define STF_FLAGS 32768
  134.  
  135. /*
  136. ** Es können auch alle Kombinationen der obigen Flags angegeben werden. Die
  137. ** Funktion »SpecTextPrefs()« wird dann alles das, was Sie wünschen, ändern.
  138. */
  139.  
  140. /* -------- Fehlernummern von »LastError()« ------------------------------ */
  141.  
  142. #define NoError 0          /* bis jetzt ist kein Fehler aufgetreten */
  143.  
  144. /** DBS-Funktionen **/
  145. #define BufInvalid    10  /* die angegebene Adresse war kein BufHandle */
  146. #define NotOwner      11  /* nur der Task, der den Puffer öffnete, darf ihn auch wieder schließen */
  147. #define NoBufMemory   12  /* nicht mehr genügend Speicher frei (MEMF_ s.a. bib_DataMemType) */
  148. #define NoDOSProcess  13  /* die aufrufende Anwendung war kein DOS-Prozess */
  149. #define IoErrRequired 14  /* ein DOS-Error ist aufgetreten (»IoErr()« der dos.library aufrufen) */
  150. #define SeekBadMode   15  /* der angegebene »SeekMode« ist unbekannt */
  151. #define SeekOffsetErr 16  /* gewünschte »Position« unter-/überschreitet den Pufferanfang bzw. das Pufferende */
  152. #define NoFindMem     17  /* kein Speicher für Zwischenspeicherung der zu suchenden Daten (MEMF_PUBLIC) */
  153. #define FindTooLong   18  /* von CurPos bis EndPos bzw. Pufferanfang sind nur noch weniger Daten, als gesucht werden sollen */
  154. #define NoFindAvail   19  /* für »FindNext()/FindPrev()« ist mindestens ein »FindData()« erforderlich (gilt für jeden möglichen Schlüssel) */
  155. #define InvalidKey    20  /* ein angegebener Schlüssel liegt außerhalb des gültigen Bereichs (bei Find-Funktionen max. 8 (0-7) / bei Bookmarks max. 16 (0-15)) */
  156. #define MarkNotSet    21  /* die angegebene Bookmark ist noch nicht gesetzt */
  157. #define MarkCleared   22  /* die Daten an der angegebenen Bookmark wurden durch »Clear()« gelöscht */
  158.  
  159. /** StringToLong() **/
  160. #define ResultValid 30  /* alles in Ordnung (das Ergebnis ist gültig)        */
  161. #define InvalidChar 31  /* im String wurde ein illegales Zeichen gefunden    */
  162. #define Overflow    32  /* repräsentierte Zahl wäre größer als 32 Bit (LONG) */
  163.  
  164. /** FillMem() **/
  165. #define OddAddress 35  /* ungerade Startadresse bei WORD- oder LONG-Modus */
  166. #define NotFilled  36  /* keine Füllung wegen Abrundung (Bereich zu klein, um wenigstens 1 Wert aufzunehmen) */
  167.  
  168. /** ShowMsg() **/
  169. #define BadHeight    40  /* angegebene Höhe war größer als 200 Videozeilen        */
  170. #define NoStructMem  41  /* kein Speicher für benötigte Gfx-Strukturen (MEMF_ANY) */
  171. #define NoChipMemory 42  /* nicht genügend Speicher für die BitPlanes (MEMF_CHIP) */
  172. #define SpecTextErr  43  /* die Funktion »SpecText()« hat einen Fehler gemeldet   */
  173.  
  174. /* -------- die Basis-Struktur der extra.library ------------------------- */
  175.  
  176. struct XtraBase {
  177.     struct Library xb_LibStuff;        /* standardmäßige Library-Struktur      */
  178.     STRPTR           xb_Copyright;    /* ein einzeiliger Copyrightvermerk(+0) */
  179.     BYTE           xb_Private[54];    /* privater Datenbereich der Library    */
  180. };
  181.  
  182. /* -------- von der extra.library erzeugte Alert's ----------------------- */
  183.  
  184. #define EL_AlertD AT_DeadEnd|AN_Unknown
  185. #define EL_AlertR AT_Recovery|AN_Unknown
  186. /* Typen-Kennungen der extra.library ($B5000000=DeadEnd/$35000000=Recovery) */
  187.  
  188. #define EL_NoDfo EL_AlertD|AG_OpenLib|AO_DiskfontLib
  189. /* konnte diskfont.library V33+ (bzw. V36+ für CGX-Version) nicht öffnen ($B503800B) */
  190.  
  191. #define EL_NoDOS EL_AlertD|AG_OpenLib|AO_DOSLib
  192. /* konnte dos.library V33+ (bzw. V36+ für CGX-Version) nicht öffnen ($B5038007) */
  193.  
  194. #define EL_NoGfx EL_AlertD|AG_OpenLib|AO_GraphicsLib
  195. /* konnte graphics.library V33+ (bzw. V36+ für CGX-Version) nicht öffnen ($B5038002) */
  196.  
  197. #define EL_NoInt EL_AlertD|AG_OpenLib|AO_Intuition
  198. /* konnte intuition.library V33+ (bzw. V36+ für CGX-Version) nicht öffnen ($B5038004) */
  199.  
  200. #define EL_Trespassed EL_AlertD|AG_IOError|AO_Unknown
  201. /* Task hat Library benutzt, ohne sie vorher zu öffnen ($B5068035) */
  202.  
  203. /* -------- mit extra.library verwendbare MACROS & Funktionen ------------ */
  204.  
  205. #define SMTPOS_C -1        /* Text zentrieren   */
  206. #define SMTPOS_L -2        /* Text linksbündig  */
  207. #define SMTPOS_R -3        /* Text rechtsbündig */
  208.  
  209. /*** extra.library / SMCOLOR() ***
  210. *»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
  211. * Dieses Macro erstellt einen Farbeintrag für die optional anzugebende Farb-
  212. * tabelle der Funktion »ShowMsg()«.
  213. *-----------------------------------------------------------------------------
  214. * Definiert:    extradefs.h  (Copyright © 1998-2001 RhoSigma, Roland Heyder)
  215. *
  216. * Schablone:    Name/A, Pen/A/N, Red/A/N, Green/A/N, Blue/A/N, EndFlag/N/S
  217. *
  218. * Parameter:    Name    --> ein beliebiger Name als ID für diesen Farbeintrag
  219. *
  220. *                Pen        --> Nr. des zu ändernden Farbstiftes (3-15)
  221. *                                (0-2 sind reserviert u. werden ignoriert)
  222. *
  223. *                Red        --> Rot-Anteil der neuen Farbe (0-15)
  224. *                Green    --> Grün-Anteil der neuen Farbe (0-15)
  225. *                Blue    --> Blau-Anteil der neuen Farbe (0-15)
  226. *
  227. *                EndFlag    --> - TRUE , dann endet hier die Farbtabelle
  228. *                            - FALSE, dann MUSS noch ein weiterer Farbeintrag
  229. *                                     (Macro-Aufruf) folgen.
  230. *
  231. * Bemerkung:    Ein Beispiel für die Benutzung dieses Macros finden Sie in
  232. *                der Datei »demo/ShowMsgDemo.C«.
  233. *
  234. *   ACHTUNG:    Die einzelnen Farbeinträge, die später zu einer Farbtabelle
  235. *   ¯¯¯¯¯¯¯¯    gehören, müssen auf JEDEN FALL direkt nacheinander deklariert
  236. *                werden, während zwischen zwei kompletten Farbtabellen aber
  237. *                durchaus auch andere Deklarationen gemacht werden können.
  238. *«««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««*/
  239.  
  240. typedef struct {
  241.     UBYTE    smc_Pen;
  242.     UBYTE    smc_ColHi;
  243.     UBYTE    smc_ColLo;
  244.     UBYTE    smc_Cont;
  245. } smcolor_t;
  246.  
  247. #define SMCOLOR(Name, Pen, Red, Green, Blue, EndFlag)    \
  248. STATIC smcolor_t Name = {Pen,((Red*256)+(Green*16)+Blue)>>8,((Red*256)+(Green*16)+Blue)&255,!EndFlag};
  249.  
  250. /*** extra.library / SMTEXTP() ***
  251. *»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
  252. * Dieses Macro erstellt einen Teilstring des Parameterstrings der ExtraLib-
  253. * Routine »ShowMsg()«. Wahlweise kann der Text automatisch zentriert, oder
  254. * links- bzw. rechtsbündig ausgerichtet werden.
  255. *-----------------------------------------------------------------------------
  256. * Definiert:    extradefs.h  (Copyright © 1998-2001 RhoSigma, Roland Heyder)
  257. *
  258. * Schablone:    Name/A, xPos/A/N, yPos/A/N, MPen/A/N, TLPen/A/N, BRPen/A/N,
  259. *                Style/A/N, Mask/A/N, String/A, EndFlag/N/S
  260. *
  261. * Parameter:    Name    --> ein beliebiger Name als ID für diesen Teilstring
  262. *
  263. *                xPos    --> x-Position des Textes,
  264. *                                oder einer der oben definierten SMTPOS-Werte
  265. *
  266. *                yPos    --> y-Position des Textes,
  267. *                                Ausrichtung erfolgt an der Oberkante des Fonts
  268. *
  269. *                MPen    --> gewünschter MPen        \
  270. *                TLPen    --> gewünschter TLPen        |
  271. *                BRPen    --> gewünschter BRPen        | (s.a. »SpecTextPrefs()«
  272. *                Style    --> gewünschter SoftStyle    |
  273. *                Mask    --> gewünschte  Rand-Maske    /
  274. *
  275. *                String    --> der Text selbst aber ohne ("") Anführungszeichen
  276. *
  277. *                EndFlag    --> - TRUE , dann endet hier der Parameterstring
  278. *                            - FALSE, dann MUSS noch ein weiterer Teilstring
  279. *                                     (Macro-Aufruf) folgen.
  280. *
  281. * Bemerkung:    Leider gestattet der Macro-Aufbau sowie die Initialisierungs-
  282. *                Regeln in C/C++ und dazu noch die Macken einiger Compiler keinen
  283. *                vollständigen Aufbau des Parameterstrings (Ja, ich hasse C !!).
  284. *                Aus diesem Grunde ist es in C/C++ erforderlich, die einzelnen
  285. *                Teilstrings vor der Benutzung noch mittels der ebenfalls hier
  286. *                deklarierten Funktion »SMTJOIN()« abschließend vorzubereiten.
  287. *
  288. *                Dieses Macro sollten Sie außerdem nur dann verwenden, wenn Sie
  289. *                für diesen Teilstring neue Einstellungen für Farben etc. machen
  290. *                wollen. Wenn dieser Teilstring jedoch mit den gleichen Ein-
  291. *                stellungen ausgegeben werden soll, wie der vorhergehende bzw.
  292. *                Sie die Default-Einstellungen verwenden wollen, dann müssen
  293. *                Sie stattdessen das Macro »SMTEXT()« verwenden.
  294. *
  295. *                Ein Beispiel für die Benutzung dieses Macros finden Sie in
  296. *                der Datei »demo/ShowMsgDemo.C«.
  297. *
  298. *   ACHTUNG:    Die einzelnen Teilstrings, die später zu einem Parameterstring
  299. *   ¯¯¯¯¯¯¯¯    gehören, müssen auf JEDEN FALL direkt nacheinander deklariert
  300. *                werden, während zwischen zwei kompletten Parameterstrings aber
  301. *                durchaus auch andere Deklarationen gemacht werden können.
  302. *
  303. * Siehe auch:    »SMTEXT()«, »SMTJOIN()«
  304. *«««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««*/
  305.  
  306. #define SMTEXTP(Name, xPos, yPos, MPen, TLPen, BRPen, Style, Mask, String, EndFlag)    \
  307. typedef struct {                                                        \
  308.     WORD    smt_PosX;                                                    \
  309.     UBYTE    smt_PosY;                                                    \
  310.     UBYTE    smt_Pref;                                                    \
  311.     UBYTE    smt_MPen;                                                    \
  312.     UBYTE    smt_TLPen;                                                    \
  313.     UBYTE    smt_BRPen;                                                    \
  314.     UBYTE    smt_Style;                                                    \
  315.     UBYTE    smt_Mask;                                                    \
  316.     TEXT    smt_Text[sizeof(#String)+((5-((sizeof(#String)-1)&3))&3)];    \
  317.     UBYTE    smt_Cont;                                                    \
  318. } smtextp_##Name;                                                        \
  319. STATIC smtextp_##Name Name = {xPos,yPos,TRUE,MPen,TLPen,BRPen,Style,Mask,#String,!EndFlag};
  320.  
  321. /*** extra.library / SMTEXT() ***
  322. *»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
  323. * Dieses Macro erstellt einen Teilstring des Parameterstrings der ExtraLib-
  324. * Routine »ShowMsg()«. Wahlweise kann der Text automatisch zentriert, oder
  325. * links- bzw. rechtsbündig ausgerichtet werden.
  326. *-----------------------------------------------------------------------------
  327. * Definiert:    extradefs.h  (Copyright © 1998-2001 RhoSigma, Roland Heyder)
  328. *
  329. * Schablone:    Name/A, xPos/A/N, yPos/A/N, String/A, EndFlag/N/S
  330. *
  331. * Parameter:    Name    --> ein beliebiger Name als ID für diesen Teilstring
  332. *
  333. *                xPos    --> x-Position des Textes,
  334. *                                oder einer der oben definierten SMTPOS-Werte
  335. *
  336. *                yPos    --> y-Position des Textes,
  337. *                                Ausrichtung erfolgt an der Oberkante des Fonts
  338. *
  339. *                String    --> der Text selbst aber ohne ("") Anführungszeichen
  340. *
  341. *                EndFlag    --> - TRUE , dann endet hier der Parameterstring
  342. *                            - FALSE, dann MUSS noch ein weiterer Teilstring
  343. *                                     (Macro-Aufruf) folgen.
  344. *
  345. * Bemerkung:    Leider gestattet der Macro-Aufbau sowie die Initialisierungs-
  346. *                Regeln in C/C++ und dazu noch die Macken einiger Compiler keinen
  347. *                vollständigen Aufbau des Parameterstrings (Ja, ich hasse C !!).
  348. *                Aus diesem Grunde ist es in C/C++ erforderlich, die einzelnen
  349. *                Teilstrings vor der Benutzung noch mittels der ebenfalls hier
  350. *                deklarierten Funktion »SMTJOIN()« abschließend vorzubereiten.
  351. *
  352. *                Dieses Macro sollten Sie außerdem nur dann verwenden, wenn Sie
  353. *                für diesen Teilstring die gleichen Einstellungen wie für den
  354. *                vorhergehenden Teilstring verwenden wollen. Wenn dieser Teil-
  355. *                string jedoch neue Einstellungen für Farben etc. erhalten
  356. *                soll, dann müssen Sie stattdessen das Macro »SMTEXTP()« ver-
  357. *                wenden.
  358. *
  359. *                Ein Beispiel für die Benutzung dieses Macros finden Sie in
  360. *                der Datei »demo/ShowMsgDemo.C«.
  361. *
  362. *   ACHTUNG:    Die einzelnen Teilstrings, die später zu einem Parameterstring
  363. *   ¯¯¯¯¯¯¯¯    gehören, müssen auf JEDEN FALL direkt nacheinander deklariert
  364. *                werden, während zwischen zwei kompletten Parameterstrings aber
  365. *                durchaus auch andere Deklarationen gemacht werden können.
  366. *
  367. * Siehe auch:    »SMTEXTP()«, »SMTJOIN()«
  368. *«««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««*/
  369.  
  370. #define SMTEXT(Name, xPos, yPos, String, EndFlag)                        \
  371. typedef struct {                                                        \
  372.     WORD    smt_PosX;                                                    \
  373.     UBYTE    smt_PosY;                                                    \
  374.     UBYTE    smt_Pref;                                                    \
  375.     TEXT    smt_Text[sizeof(#String)+((6-((sizeof(#String)-1)&3))&3)];    \
  376.     UBYTE    smt_Cont;                                                    \
  377. } smtext_##Name;                                                        \
  378. STATIC smtext_##Name Name = {xPos,yPos,FALSE,#String,!EndFlag};
  379.  
  380. /*** extra.library / SMTJOIN() ***
  381. *»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
  382. * Diese Funktion dient der abschließenden Vorbereitung der mittels »SMTEXT()«
  383. * und/oder »SMTEXTP()« initialisierten Teilstrings zur Verwendung mit »ShowMsg()«.
  384. * Idealer Weise sollte man diese Funktion als erste innerhalb der Main-Funktion
  385. * aufrufen.
  386. *  Hier wird jetzt jedoch nur der Prototyp dieser Funktion deklariert, die ei-
  387. * gentliche Funktion ist Bestandteil der mitgelieferten »rhosigma.c« Source und
  388. * sollte in Ihr Projekt eingebunden werden.
  389. *-----------------------------------------------------------------------------
  390. * Synopsis:        VOID SMTJOIN (Count, ...)
  391. *
  392. * Eingaben:        Count    -->    (UWORD)  Anzahl der übergebenen Teilstrings
  393. *
  394. *                ...        --> (&ID) nacheinander die Adressen (Referenzen) der
  395. *                                  einzelnen Teilstrings
  396. *
  397. * Bemerkung:    Mehrfacher Aufruf für jeden einzelnen Teilstring ist möglich,
  398. *                aber durch die variable Argumentenliste eigentlich überflüssig,
  399. *                da man so auch alle Teilstrings auf einmal angeben kann.
  400. *
  401. *                Ein Beispiel für die Benutzung dieser Funktion finden Sie in
  402. *                der Datei »demo/ShowMsgDemo.C«.
  403. *
  404. *   ACHTUNG:    Diese Funktion muß auch dann aufgerufen werden, wenn nur ein
  405. *    ¯¯¯¯¯¯¯¯    einziger Teilstring benutzt wird, da das Macro »SMTEXT()« bzw.
  406. *                »SMTEXTP()« keine vollständige Initialisierung des gleichen
  407. *                vornimmt. Das wird alles erst durch »SMTJOIN()« erledigt !!
  408. *
  409. * Siehe auch:    »SMTEXT()«, »SMTEXTP()«
  410. *«««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««*/
  411.  
  412. #ifdef __cplusplus
  413. extern "C" {
  414. #endif
  415.  
  416. VOID SMTJOIN(UWORD Count, ...);
  417.  
  418. #ifdef __cplusplus
  419. }
  420. #endif
  421.  
  422. #endif    /* RHOSIGMA_EXTRADEFS_H */
  423.  
  424.