home *** CD-ROM | disk | FTP | other *** search
/ Crawly Crypt Collection 1 / crawlyvol1.bin / program / compiler / m2posx14 / src / sig.dpp < prev    next >
Encoding:
Modula Definition  |  1994-05-14  |  21.2 KB  |  426 lines

  1. DEFINITION MODULE sig;
  2. __DEF_SWITCHES__
  3. #ifdef HM2
  4. #ifdef __LONG_WHOLE__
  5. (*$!i+: Modul muss mit $i- uebersetzt werden! *)
  6. (*$!w+: Modul muss mit $w- uebersetzt werden! *)
  7. #else
  8. (*$!i-: Modul muss mit $i+ uebersetzt werden! *)
  9. (*$!w-: Modul muss mit $w+ uebersetzt werden! *)
  10. #endif
  11. #endif
  12. (*****************************************************************************)
  13. (* Signalbehandlung.                                                         *)
  14. (*                                                                           *)
  15. (* Ein Fehler ist immer dann aufgetreten, wenn bei Funktionen mit Typ INTEGER*)
  16. (* ein negativer Wert zurueckgegeben wird.                                   *)
  17. (* Die genaue Fehlerursache kann bei Bedarf ueber 'ERRNO.errno' und die      *)
  18. (* entsprechenden Konstanten ermittelt werden. Die Funktionen veraendern     *)
  19. (* 'errno' nur dann, wenn ein Fehler aufgetreten ist, bei erfolgreicher Aus- *)
  20. (* fuehrung wird 'errno' nicht veraendert.                                   *)
  21. (*                                                                           *)
  22. (* GEMDOS:                                                                   *)
  23. (* Die Eigenschaften der Funktionen unter dem ``blanken'' GEMDOS sind z.T.   *)
  24. (* stark eingeschraenkt; unter dem Stichwort GEMDOS ist deswegen immer       *)
  25. (* angegeben, in wieweit die Funktion emuliert werden kann. Ist MiNT-Unter-  *)
  26. (* stuetzung angegeben, so ist unter der Betriebssystemerweiterung MiNT      *)
  27. (* eine bessere Unterstuetzung der Funktionen zu erwarten; wie weit diese    *)
  28. (* geht, ist unter dem Stichwort MiNT angegeben.                             *)
  29. (* --------------------------------------------------------------------------*)
  30. (* 14-Mai-94, Holger Kleinschmidt                                            *)
  31. (*****************************************************************************)
  32.  
  33. FROM PORTAB IMPORT
  34. (* TYPE *) SIGNEDLONG, UNSIGNEDLONG, UNSIGNEDWORD, WORDSET;
  35.  
  36. FROM types IMPORT
  37. (* TYPE *) unsigned, int, signedlong, pidT;
  38.  
  39. (*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
  40.  
  41. (* Nicht POSIX: Das Setzen einer Variable dieses Typs ist atomar bzgl.
  42.  * Unterbrechnung durch (asynchrone) Signale.
  43.  *)
  44. TYPE
  45.   SigAtomicT = int;
  46.  
  47. CONST
  48.   SigDfl = LIC(0);
  49.   SigIgn = LIC(1);
  50.   SigErr = LIC(-1); (* Nicht POSIX *)
  51.  
  52. CONST
  53.   SIGNULL   =  0; (* Kein ``richtiges'' Signal, nicht POSIX *)
  54.   SIGHUP    =  1;
  55.   SIGINT    =  2;
  56.   SIGQUIT   =  3;
  57.   SIGILL    =  4;
  58.   SIGTRAP   =  5; (* Nicht POSIX *)
  59.   SIGABRT   =  6;
  60.   SIGIOT    = SIGABRT; (* Nicht POSIX *)
  61.   SIGPRIV   =  7; (* Nicht POSIX *)
  62.   SIGEMT    = SIGPRIV; (* Nicht POSIX *)
  63.   SIGFPE    =  8;
  64.   SIGKILL   =  9;
  65.   SIGBUS    = 10; (* Nicht POSIX *)
  66.   SIGSEGV   = 11;
  67.   SIGSYS    = 12; (* Nicht POSIX *)
  68.   SIGPIPE   = 13;
  69.   SIGALRM   = 14;
  70.   SIGTERM   = 15;
  71.   SIGURG    = 16; (* Nicht POSIX *)
  72.   SIGSTOP   = 17; (* Nur unterstuetzt, falls ``Job Control'' vorhanden *)
  73.   SIGTSTP   = 18; (* Nur unterstuetzt, falls ``Job Control'' vorhanden *)
  74.   SIGCONT   = 19; (* Nur unterstuetzt, falls ``Job Control'' vorhanden *)
  75.   SIGCHLD   = 20; (* Nur unterstuetzt, falls ``Job Control'' vorhanden *)
  76.   SIGTTIN   = 21; (* Nur unterstuetzt, falls ``Job Control'' vorhanden *)
  77.   SIGTTOU   = 22; (* Nur unterstuetzt, falls ``Job Control'' vorhanden *)
  78.   SIGIO     = 23; (* Nicht POSIX *)
  79.   SIGXCPU   = 24; (* Nicht POSIX *)
  80.   SIGXFSZ   = 25; (* Nicht POSIX *)
  81.   SIGVTALRM = 26; (* Nicht POSIX *)
  82.   SIGPROF   = 27; (* Nicht POSIX *)
  83.   SIGWINCH  = 28; (* Nicht POSIX *)
  84.   SIGUSR1   = 29;
  85.   SIGUSR2   = 30;
  86.  
  87. CONST
  88.   NSIG = 31; (* Nicht POSIX *)
  89.  
  90. (* Die folgende Konstante muss je nach Anzahl der Signale von Hand
  91.  * neu berechnet werden.
  92.  *)
  93. CONST
  94.   MAXSIGSET = 1; (* := (NSIG - 1) DIV (ORD(MAX(WORDSETRANGE))+1) *)
  95.  
  96. TYPE
  97.   SigsetRange = [0..MAXSIGSET];
  98.  
  99. TYPE
  100.   SigsetPtr = POINTER TO sigsetT;
  101.  
  102. TYPE
  103.   (* Implementierung des Typs nur zur Benutzung innerhalb dieses Moduls *)
  104.   sigsetT = ARRAY SigsetRange OF WORDSET;
  105.  
  106.  
  107. TYPE
  108. #ifdef HM2
  109. (*$K+ Signalhandler muessen mit dieser Option uebersetzt werden *)
  110. #endif
  111.   (* Die Signalnummer wird als Langwort uebergeben *)
  112.   SigHandler = PROCEDURE((* EIN/ -- ) sig : *)UNSIGNEDLONG );
  113. #ifdef HM2
  114. (*$K- Danach aber wieder zuruecksetzen *)
  115. #endif
  116.  
  117. TYPE
  118.   SignalHandler = RECORD
  119.     CASE TAG_COLON BOOLEAN OF
  120.       FALSE: proc : SigHandler;
  121.      |TRUE : long : SIGNEDLONG; (* Fuer 'SigIgn','SigDfl','SigErr' *)
  122.     END;
  123.   END;
  124.  
  125. TYPE
  126. #if reverse_set
  127.   SaFlag = (
  128.     Sa15, Sa14, Sa13, Sa12, Sa11, Sa10,
  129.     Sa9, Sa8, Sa7, Sa6, Sa5, Sa4, Sa3, Sa2, Sa1,
  130.     SaNoCldStop (* Stoppen eines Unterprozesses erzeugt kein Signal *)
  131.   );
  132. #else
  133.   SaFlag = (
  134.     SaNoCldStop, (* Stoppen eines Unterprozesses erzeugt kein Signal *)
  135.     Sa1, Sa2, Sa3, Sa4, Sa5, Sa6, Sa7, Sa8, Sa9,
  136.     Sa10, Sa11, Sa12, Sa13, Sa14, Sa15
  137.   );
  138. #endif
  139.  
  140.   SaFlags = PACKEDSET OF SaFlag;
  141.  
  142. TYPE
  143.   SigactionPtr = POINTER TO SigactionRec;
  144.  
  145.   SigactionRec = RECORD
  146.     saHandler : SignalHandler;(* Funktion fuer Signalbehandlung *)
  147.     saMask    : sigsetT;      (* Zusaetzlich blockierte Signale waehrend
  148.                                  der Abarbeitung des Signals *)
  149.     saFlags   : SaFlags;      (* Flags,die die Signalbehandlung beeinflussen *)
  150.   END;
  151.  
  152.  
  153. TYPE
  154.   SigBlockType = (
  155.     SigBlock,   (* Angegebene Signale zusaetzlich blockieren *)
  156.     SigUnBlock, (* Angegebene Signale nicht blockieren *)
  157.     SigSetMask  (* Ausschliesslich die angegebenen Signale blockieren *)
  158.   );
  159.  
  160. (*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
  161.  
  162.  PROCEDURE sigemptyset ((* -- /AUS *) VAR set : sigsetT );
  163.  
  164.  PROCEDURE sigfillset ((* -- /AUS *) VAR set : sigsetT );
  165.  
  166.  PROCEDURE sigaddset ((* EIN/AUS *) VAR set : sigsetT;
  167.                       (* EIN/ -- *)     sig : int     ): int;
  168.  
  169.  PROCEDURE sigdelset ((* EIN/AUS *) VAR set : sigsetT;
  170.                       (* EIN/ -- *)     sig : int     ): int;
  171.  
  172.  PROCEDURE sigismember ((* EIN/ -- *) set : sigsetT;
  173.                         (* EIN/ -- *) sig : int     ): int;
  174.  
  175. (*--------------------------------------------------------------------------
  176.  | Die Funktionen stellen Operationen fuer das Arbeiten mit dem Typ         |
  177.  | 'sigsetT' dar. Es MUESSEN(!) ausschliesslich diese Funktionen benutzt    |
  178.  | werden, um Variablen vom Typ 'sigsetT' zu manipulieren, da die Zuordnung |
  179.  | von Elementen zur unterliegenden Bitrepraesentation NICHT festgelegt ist!|
  180.  | Es werden nur die uebergebenen Variablen manipuliert, fuer das Aendern   |
  181.  | Signalmaske des Prozesses ist z.B. "sigprocmask()" zu verwenden!         |
  182.  | Im Original haben alle Funktionen einen Funktionswert, den ich aber nicht|
  183.  | fuer sonderlich sinnvoll halte.                                          |
  184.  |                                                                          |
  185.  | "sigemptyset": erstellt eine Signalmaske, in der kein Signal gesetzt ist.|
  186.  | "sigfillset" : erstellt eine Signalmaske, in der alle Signale gesetzt    |
  187.  |                sind.                                                     |
  188.  | "sigaddset"  : Fuegt das Signal <sig> zur Signalmaske hinzu.             |
  189.  | "sigdelset"  : Entfernt das Signal <sig> aus der Signalmaske.            |
  190.  | "sigismember": Testet, ob das Signal <sig> in der Signalmaske enthalten  |
  191.  |                ist; liefert als Funktionswert eins, falls das Signal ent-|
  192.  |                halten ist, Null sonst.                                   |
  193.  |                                                                          |
  194.  | GEMDOS: Keine Besonderheiten.                                            |
  195.  |   MiNT: -""-                                                             |
  196.   --------------------------------------------------------------------------*)
  197.  
  198.  
  199. (* Nicht POSIX: *)
  200.  PROCEDURE signal ((* EIN/ -- *)     sig     : int;
  201.                    (* EIN/ -- *)     handler : SignalHandler;
  202.                    (* -- /AUS *) VAR old     : SignalHandler ): int;
  203.  
  204. (*--------------------------------------------------------------------------
  205.  | Installiert einen Handler, der aufgerufen wird, wenn das Signal <sig>    |
  206.  | auftritt. In <old> wird der alte Handler zurueckgeliefert.               |
  207.  | Der Handler bleibt installiert bis er wieder explizit mit einem erneuten |
  208.  | "signal()" entfernt wird, und das entsprechende Signal bleibt waehrend   |
  209.  | der Ausfuehrung des Handlers blockiert; das entspricht der BSD-Funktions-|
  210.  | weise.                                                                   |
  211.  | <handler> muss auf jeden Fall reentrant sein, bzw. reentrante Funktionen |
  212.  | verwenden (Vorsicht bei Bibliotheksfunktionen)!                          |
  213.  | Wenn innerhalb von <handler> eine Funktion aufgerufen wird, die 'e.errno'|
  214.  | veraendert, sollte 'e.errno' vorher gesichert und nach einer evtl. noeti-|
  215.  | gen Fehlerbehandlung der Funktion wieder zurueckgesetzt werden.          |
  216.  |                                                                          |
  217.  | GEMDOS/MiNT: Durch den Aufruf der Funktion wird das Signal <sig> aus der |
  218.  |              Signalmaske entfernt, und so auf jeden Fall ein blockiertes |
  219.  |              Signal an den Prozess weitergereicht.                       |
  220.  | GEMDOS: Es gibt nur synchrone Signale, d.h. ein Programm kann sich nur   |
  221.  |         selbst mittels "kill()" Signale schicken.                        |
  222.  |   MiNT: Keine Besonderheiten.                                            |
  223.   --------------------------------------------------------------------------*)
  224.  
  225.  PROCEDURE sigaction ((* EIN/ -- *) sig  : int;
  226.                       (* EIN/ -- *) act  : SigactionPtr;
  227.                       (* EIN/ -- *) oact : SigactionPtr ): int;
  228.  
  229. (*--------------------------------------------------------------------------
  230.  | Mit dieser Funktion kann festgelegt werden, welche Funktion beim Auf-    |
  231.  | treten eines bestimmten Signals ausgefuehrt werden soll, und welche      |
  232.  | Signale waehrend der Ausfuehrung des ``Signalhandlers'' zusaetzlich zum  |
  233.  | ausloesenden Signal blockiert werden sollen (siehe Definition von        |
  234.  | 'SigactionRec'). In <oact>^ werden die bisherigen Werte zurueckgeliefert.|
  235.  | Falls <act> oder <oact> gleich NULL sind (nicht NIL!), werden sie igno-  |
  236.  | riert.                                                                   |
  237.  | Ansonsten gilt das schon zu "signal()" Geschriebene.                     |
  238.  |                                                                          |
  239.  | GEMDOS/MiNT: Durch den Aufruf der Funktion wird das Signal <sig> aus der |
  240.  |              Signalmaske entfernt, und so auf jeden Fall ein blockiertes |
  241.  |              Signal an den Prozess weitergereicht.                       |
  242.  | GEMDOS: Es gibt nur synchrone Signale, d.h. ein Programm kann sich nur   |
  243.  |         selbst mittels "kill()" Signale schicken.                        |
  244.  |   MiNT: Keine Besonderheiten.                                            |
  245.   --------------------------------------------------------------------------*)
  246.  
  247.  
  248.  PROCEDURE sigprocmask ((* EIN/ -- *) how  : SigBlockType;
  249.                         (* EIN/ -- *) set  : SigsetPtr;
  250.                         (* EIN/ -- *) oset : SigsetPtr    ): int;
  251.  
  252. (*--------------------------------------------------------------------------
  253.  | Mit dieser Funktion kann der aufrufende Prozess seine Signalmaske ver-   |
  254.  | aendern, d.h. festlegen, welche Signale blockiert werden sollen.         |
  255.  |                                                                          |
  256.  | <how> = SigBlock  : Die Signalmaske ist die Vereinigung der bisherigen   |
  257.  |                     Maske mit <set>.                                     |
  258.  | <how> = SigUnBlock: Die Signalmaske ist die Differenz der bisherigen     |
  259.  |                     Maske und <set>.                                     |
  260.  | <how> = SigSetMask: <set> wird zur aktuellen Signalmaske.                |
  261.  |                                                                          |
  262.  | In <oset>^ wird die bisherige Signalmaske zurueckgeliefert.              |
  263.  | Falls <set> oder <oset> gleich NULL sind (nicht NIL!), werden sie igno-  |
  264.  | riert.                                                                   |
  265.  |                                                                          |
  266.  | GEMDOS: Keine Besonderheiten.                                            |
  267.  |   MiNT: -""-                                                             |
  268.   --------------------------------------------------------------------------*)
  269.  
  270.  
  271.  PROCEDURE sigpending ((* -- /AUS *) VAR set : sigsetT ): int;
  272.  
  273. (*--------------------------------------------------------------------------
  274.  | Ermittelt, welche Signale fuer den Prozess generiert wurden, aber zur    |
  275.  | Zeit blockiert sind.                                                     |
  276.  |                                                                          |
  277.  | GEMDOS: Keine Besonderheiten.                                            |
  278.  |   MiNT: -""-                                                             |
  279.   --------------------------------------------------------------------------*)
  280.  
  281.  
  282.  PROCEDURE kill ((* EIN/ -- *) pid : pidT;
  283.                  (* EIN/ -- *) sig : int  ): int;
  284.  
  285. (*--------------------------------------------------------------------------
  286.  | Sendet das Signal <sig> an den Prozess oder die Prozessgruppe <pid>.     |
  287.  |                                                                          |
  288.  | <pid> >  0: <sig> wird an den Prozess mit der Kennung <pid> gesendet.    |
  289.  | <pid> =  0: <sig> wird an alle Prozesse gesendet, die in der gleichen    |
  290.  |             Prozessgruppe wie der aufrufende Prozess sind.               |
  291.  | <pid> = -1: systemspezifische Aktion.                                    |
  292.  | <pid> < -1: <sig> wird an alle Prozesse gesendet, die in der Prozess-    |
  293.  |             gruppe |<pid>| sind.                                         |
  294.  |                                                                          |
  295.  | GEMDOS: Ein Signal kann nur an sich selbst gesendet werden.              |
  296.  |   MiNT: Keine Besonderheiten.                                            |
  297.   --------------------------------------------------------------------------*)
  298.  
  299. (* Nicht POSIX: *)
  300.  PROCEDURE raise ((* EIN/ -- *) sig : int ): int;
  301.  
  302. (*--------------------------------------------------------------------------
  303.  | Entspricht: "kill(getpid(), sig)".                                       |
  304.   --------------------------------------------------------------------------*)
  305.  
  306. (* Nicht POSIX: *)
  307.  PROCEDURE killpg ((* EIN/ -- *) pgrp : pidT;
  308.                    (* EIN/ -- *) sig  : int  ): int;
  309.  
  310. (*--------------------------------------------------------------------------
  311.  | Entspricht (im wesentlichen): "kill(-pgrp, sig)".                        |
  312.   --------------------------------------------------------------------------*)
  313.  
  314.  
  315.  PROCEDURE pause;
  316.  
  317.  PROCEDURE sigsuspend ((* EIN/ -- *) sigmask : sigsetT );
  318.  
  319. (*--------------------------------------------------------------------------
  320.  | "pause()" suspendiert den aufrufenden Prozess bis ein Signal auftritt.   |
  321.  | Bei "sigsuspend()" kann festgelegt werden, welche Signale waehrend des   |
  322.  | Wartens blockiert sind.                                                  |
  323.  | Falls das Signal durch einen Handler abgefangen wird, der normal zurueck-|
  324.  | kehrt, kehren auch die Funktionen zurueck, sonst wird der Prozess        |
  325.  | terminiert.                                                              |
  326.  |                                                                          |
  327.  | Eigentlich haben die Funktionen bei POSIX noch einen Rueckgabewert, da   |
  328.  | dieser aber immer -1 ist, mit 'e.errno' auf 'e.EINTR' gesetzt, habe ich  |
  329.  | ihn hier eingespart; 'errno' wird aber trotzdem noch gesetzt.            |
  330.  |                                                                          |
  331.  | GEMDOS: kehren immer zurueck.                                            |
  332.  |   MiNT: Keine Besonderheiten.                                            |
  333.   --------------------------------------------------------------------------*)
  334.  
  335.  
  336.  
  337.  PROCEDURE sleep ((* EIN/ -- *) seconds : unsigned ): unsigned;
  338.  
  339. (*--------------------------------------------------------------------------
  340.  | Suspendiert den aufrufenden Prozess fuer <seconds> Sekunden oder bis     |
  341.  | ein Signal auftritt. Als Funktionswert wird Null zurueckgegeben oder, bei|
  342.  | Auftreten eines Signals, die Differenz der bisher verstrichenen Zeit zu  |
  343.  | <seconds>.                                                               |
  344.  | "sleep()" und "alarm()" sollten moeglichst nicht beide in einem Programm |
  345.  | benutzt werden, da die Funktionen durch die jeweils andere Funktion      |
  346.  | implementiert sein koennten, sodass sich Konflikte ergeben.              |
  347.  | Aus Portabilitaetsgruenden sollte <seconds> nicht groesser als 65535 sein|
  348.  |                                                                          |
  349.  | GEMDOS: Es wird ein ``Busy waiting'' durchgefuehrt.                      |
  350.  |   MiNT: Keine Besonderheiten                                             |
  351.   --------------------------------------------------------------------------*)
  352.  
  353. (* Nicht POSIX: *)
  354.  PROCEDURE usleep ((* EIN/ -- *) useconds : signedlong ): signedlong;
  355.  
  356. (*--------------------------------------------------------------------------
  357.  | Wie "sleep()", aber die Zeit ist in Mikrosekunden angegeben.             |
  358.  |                                                                          |
  359.  | GEMDOS/MiNT: Zeitaufloesung in Millisekunden.                            |
  360.  | GEMDOS: Es wird ein ``Busy waiting'' durchgefuehrt.                      |
  361.  |   MiNT: Funktioniert erst ab MiNT 1.10. Wegen der geringeren Aufloesung  |
  362.  |         kann auch ein Wert ungleich Null zurueckgeliefert werden, obwohl |
  363.  |         kein Signal aufgetreten ist.                                     |
  364.   --------------------------------------------------------------------------*)
  365.  
  366.  
  367.  PROCEDURE alarm ((* EIN/ -- *) seconds : unsigned ): unsigned;
  368.  
  369. (*--------------------------------------------------------------------------
  370.  | Sendet das Signal 'SIGALRM' nach <seconds> Sekunden an den aufrufenden   |
  371.  | Prozess. Wenn kein entsprechender Handler installiert wurde, wird der    |
  372.  | Prozess nach der angegebenen Zeit terminiert. Ist <seconds> gleich Null, |
  373.  | wird ein zuvor in Auftrag gegebener Alarm zurueckgesetzt.                |
  374.  | Als Funktionswert werden die Anzahl Sekunden bis zu einem evtl. frueher  |
  375.  | eingeplanten Alarm zurueckgeliefert.                                     |
  376.  | "sleep()" und "alarm()" sollten moeglichst nicht beide in einem Programm |
  377.  | benutzt werden, da die Funktionen durch die jeweils andere Funktion      |
  378.  | implementiert sein koennten, sodass sich Konflikte ergeben.              |
  379.  | Aus Portabilitaetsgruenden sollte <seconds> nicht groesser als 65535 sein|
  380.  |                                                                          |
  381.  | GEMDOS: Es wird Null zurueckgegeben und nichts passiert.                 |
  382.  |   MiNT: Keine Besonderheiten.                                            |
  383.   --------------------------------------------------------------------------*)
  384.  
  385.  
  386. (* Nicht POSIX: *)
  387.  PROCEDURE sigmask ((* EIN/ -- *) sig : int ): UNSIGNEDLONG;
  388.  
  389. (*--------------------------------------------------------------------------
  390.  | Die Funktion liefert eine Maske, in der das Signal <sig> gesetzt ist.    |
  391.  | Unter der Voraussetzung, dass unterschiedliche(!) Signale verwendet      |
  392.  | werden, kann mit dieser Funktion durch Addition der Ergebnisse eine      |
  393.  | Signalmaske fuer mehrere Signale gebildet werden.                        |
  394.  |                                                                          |
  395.  | Beispiel: mask := sigmask(SIGUSR1) + sigmask(SIGUSR2);                   |
  396.  |                                                                          |
  397.  | Die Signalmasken fuer "sigsetmask()", "sigblock()" und "sigpause()"      |
  398.  | MUESSEN(!) mit dieser Funktion erzeugt werden, da die Zuordnung von      |
  399.  | Signalen zur unterliegenden Bitrepraesentation NICHT festgelegt ist!     |
  400.  | Die Funktion ist unter *IX als Makro definiert, und die Ergebnisse       |
  401.  | koennen in ``C'' beliebig durch ein bitweises Oder (-> |) verknuepft     |
  402.  | werden.                                                                  |
  403.   --------------------------------------------------------------------------*)
  404.  
  405.  
  406. (* Nicht POSIX: *)
  407.  PROCEDURE sigsetmask ((* EIN/ -- *) mask : UNSIGNEDLONG ): UNSIGNEDLONG;
  408.  
  409.  PROCEDURE sigblock ((* EIN/ -- *) mask : UNSIGNEDLONG ): UNSIGNEDLONG;
  410.  
  411. (*--------------------------------------------------------------------------
  412.  | Die Funktionen entsprechen "sigprocmask()" mit den Befehlen 'SigSetMask' |
  413.  | bzw. 'SigBlock' und liefern die alte Signalmaske zurueck.                |
  414.   --------------------------------------------------------------------------*)
  415.  
  416.  
  417. (* Nicht POSIX: *)
  418.  PROCEDURE sigpause ((* EIN/ -- *) mask : UNSIGNEDLONG );
  419.  
  420. (*--------------------------------------------------------------------------
  421.  | Die Funktion entspricht "sigsuspend()".                                  |
  422.   --------------------------------------------------------------------------*)
  423.  
  424. END sig.
  425.  
  426.