home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Programming / Misc / CLISP-1.LHA / CLISP960530-sr.lha / src / amiga2.d < prev    next >
Encoding:
Text File  |  1996-06-12  |  5.8 KB  |  172 lines

  1. # Include-File: Amiga-Spezifisches, das nur von wenigen Modulen benötigt wird
  2. # Jörg Höhle 12.6.1996
  3.  
  4.  
  5. #include <proto/alib.h>
  6.  
  7. # Die Inlines sind jetzt Macros, also können Funktionen nicht mehr deklariert werden
  8. #if !defined(GNU_INLINES)
  9.  
  10. # Verhindert Multitasking kurzzeitig.
  11. # Forbid(); ... Permit();
  12. # Aufrufe können geschachtelt werden.
  13.   extern void Forbid (void); # siehe exec.library/Forbid
  14.   extern void Permit (void); # siehe exec.library/Permit
  15. # wird verwendet von REXX
  16.  
  17.  
  18. # Öffnet eine 'shared library'.
  19. # OpenLibrary(name,version)
  20. # > name: Name als ASCIZ-String, mit .library am Schluß
  21. # > version: kleinste erwünschte Versionsnummer, 0 bedeutet "egal"
  22. # < struct Library * ergebnis: Library base Zeiger oder NULL
  23.   extern struct Library * OpenLibrary (CONST UBYTE* name, unsigned long version); # siehe exec.library/OpenLibrary
  24. # wird verwendet von REXX, FOREIGN
  25.  
  26. # Schließt eine geöffnete 'shared library'.
  27. # CloseLibrary(library)
  28. # > library: 'library base' Zeiger
  29.   extern void CloseLibrary (struct Library * library);
  30. # wird verwendet von REXX, FOREIGN
  31.  
  32.  
  33. # "Port"s sind Einheiten zum Austausch von Nachrichten ("Messages").
  34. # (Wir haben's hier nur mit den sogenannten "öffentlichen Ports".)
  35. # Sie tragen einen Namen.
  36.  
  37. # Sucht einen Port gegebenen Namens.
  38. # FindPort(name)
  39. # > name: Name des Ports
  40. # < ergebnis: Port-Pointer oder NULL falls es keinen gibt
  41. # Muß von Forbid()/Permit() umrahmt sein.
  42.   extern struct MsgPort * FindPort (CONST UBYTE* name); # siehe exec.library/FindPort
  43. # wird verwendet von REXX
  44.  
  45. # Alloziert einen neuen Port.
  46. # CreatePort(name,priority)
  47. # > name: Name des Ports
  48. # > priority: Priorität
  49. # < ergebnis: Port-Pointer
  50.   extern struct MsgPort * CreatePort (UBYTE* name, LONG priority); # siehe amiga.lib/CreatePort
  51. # wird verwendet von REXX
  52.  
  53. # Meldet einen Port ab (vor dem Freigeben nötig).
  54. # RemPort(port)
  55. # > port: Port-Pointer
  56.   extern void RemPort (struct MsgPort * port); # siehe exec.library/RemPort
  57. # wird verwendet von REXX
  58.  
  59. # Gibt einen Port wieder frei.
  60. # DeletePort(port)
  61. # > port: Port-Pointer
  62.   extern void DeletePort (struct MsgPort * port); # siehe amiga.lib/DeletePort
  63. # wird verwendet von REXX
  64.  
  65. # Holt eine Message an einem Port ab.
  66. # GetMsg(port)
  67. # > port: Port-Pointer
  68. # < ergebnis: Message-Pointer oder NULL falls gerade keine Message anliegt.
  69. # Die abgeholte Message wird aus der Warteschlange von Messages entfernt.
  70.   extern struct Message * GetMsg (struct MsgPort * port); # siehe exec.library/GetMsg
  71. # wird verwendet von REXX
  72.  
  73. # Beendet die Bearbeitung einer abgeholten Message.
  74. # ReplyMsg(message);
  75. # > message: Message-Pointer
  76.   extern void ReplyMsg (struct Message * message); # siehe exec.library/ReplyMsg
  77. # wird verwendet von REXX
  78.  
  79. # Schickt eine Message an einen Port.
  80. # PutMsg(port,message);
  81. # > port: Port-Pointer
  82. # > message: Message-Pointer
  83. # Der von der Message beanspruchte Speicher bleibt bis zu ihrer Beantwortung
  84. # reserviert!
  85.   extern void PutMsg (struct MsgPort * port, struct Message * message); # siehe exec.library/PutMsg
  86. # wird verwendet von REXX
  87.  
  88. #if 0 # Von der CLISP-Library intern benutzte Funktionen
  89. # extern struct List * NewList (struct List * list);
  90. # extern long AllocSignal (long);
  91. # extern void FreeSignal (long);
  92. #endif
  93.  
  94. #endif # GNU_INLINES
  95.  
  96.  
  97. #ifdef REXX
  98.  
  99. # ARexx (= Amiga-Rexx) ist ein auf obigen Ports aufbauendes Kommunikations-
  100. # system zwischen Applikationen.
  101.  
  102. #include <rexx/rxslib.h>
  103. #include <proto/rexxsyslib.h>
  104.  
  105. #if !defined(GNU_INLINES)
  106.  
  107. # Arexx-Messages haben ein spezielles Aussehen:
  108.  
  109. # Erzeugt eine Message-Hülle für ARexx.
  110. # CreateRexxMsg(msgport,ext,host)
  111. # > msgport: Adresse des ARexx message Ports, der die Empfangsbestätigung bekommt
  112. # > ext: (ASCIZ) Extension für aufzurufende Dateien, NULL bedeutet "REXX"
  113. # > host: Name des ARexx message Ports, der externe Kommandos abarbeitet
  114. # < ergebnis: ARexx Message oder NULL bei Fehler
  115.   extern struct RexxMsg * CreateRexxMsg (struct MsgPort* msgport, UBYTE* extension, UBYTE* hostname); # siehe rexxsyslib/CreateRexxMsg
  116. # wird verwendet von REXX
  117.  
  118. # Eine Message-Hülle hat Platz für 1 bis MAXRMARG Argument-Strings.
  119.  
  120. # Gibt die Argument-Strings in einer Message-Hülle wieder frei.
  121. # ClearRexxMsg(msg,argcount);
  122. # > msg: ARexx Message
  123. # > argcount: Anzahl Argumente
  124.   extern void ClearRexxMsg (struct RexxMsg * msg, ULONG argcount); # siehe rexxsyslib/ClearRexxMsg
  125. # wird verwendet von REXX
  126.  
  127. # Gibt eine Message-Hülle wieder frei.
  128. # DeleteRexxMsg(msg);
  129. # > msg: ARexx Message
  130.   extern void DeleteRexxMsg (struct RexxMsg * message); # siehe rexxsyslib/DeleteRexxMsg
  131. # wird verwendet von REXX
  132.  
  133. # Außerdem müssen auch Argument-Strings speziell verpackt werden:
  134.  
  135. # Erzeugt Argument-String Struktur für ARexx.
  136. # CreateArgstring(string,length)
  137. # > [string..string+length-1]: angesprochener Speicherbereich
  138. # > length: Länge, <2^16
  139. # < ergebnis: verpackter, kopierter Argument-String
  140.   extern UBYTE* CreateArgstring (UBYTE* string, ULONG length); # siehe rexxsyslib/CreateArgstring
  141. # wird verwendet von REXX
  142.  
  143. # Gibt Argument-String Struktur wieder frei.
  144. # DeleteArgstring(argstring);
  145. # > argstring: verpackter Argument-String
  146.   extern void DeleteArgstring (UBYTE* argstring); # siehe rexxsyslib/DeleteArgstring
  147. # wird verwendet von REXX
  148.  
  149. # Liefert die Länge eines verpackten Argument-Strings.
  150. # LengthArgstring(argstring)
  151. # > argstring: verpackter Argument-String
  152. # < ergebnis: Länge
  153.   extern ULONG LengthArgstring (UBYTE* argstring); # siehe rexxsyslib/LengthArgstring
  154. # wird verwendet von REXX
  155.  
  156. # Verpackt eine ganze Argumentliste.
  157. # FillRexxMsg(msg,argcount,mask)
  158. # > msg: Message-Hülle
  159. # > argcount: Anzahl Argumente (>=1, <=16)
  160. # > mask: Bitmaske für Argumenttyp in der Hülle (jeweils 0 = ASCIZ, 1 = LONG)
  161. # < ergebnis: /=0 falls OK
  162.   extern BOOL FillRexxMsg (struct RexxMsg * msg, ULONG argcount, ULONG mask); # siehe rexxsyslib.library/FillRexxMsg
  163. # wird verwendet von
  164.  
  165. #endif # GNU_INLINES
  166.  
  167. #define RXERRORIMGONE 100L
  168. #define RXADIR "AREXX"  # MsgPort für Asynchrone Bearbeitung
  169.  
  170. #endif # REXX
  171.  
  172.