Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

cenaco - Definition einer Contingency-Routine

&pagelevel(4)&pagelevel

Definition

#include <cont.h>

void cenaco(struct enacop *enacopar);

cenaco definiert eine Contingency-Routine (TU bzw. P1), d.h. eine vom Anwender geschriebene Routine wird damit als Contingency-Routine angemeldet.

Ausführliche Informationen zu Contingency-Routinen finden Sie im Kapitel "Contingency- und STXIT-Routinen" und im Handbuch "Makroaufrufe an den Ablaufteil“ [6].

Parameter

struct enacop *enacopar

Zeiger auf eine Struktur, die in <cont.h> wie folgt definiert ist:

struct enacop
{
  char resrv1 [7];                 /* reserved for int. use */
  char coname [54];                /* name of cont. routine */
  char resrv2 [15];                /* reserved for int. use */
  char level;                      /* priority of cont.rout. */
  int  (*econt)(struct contp);     /* start adr of cont.rout. */
  int  comess;                     /* contingency message */
  int  coidret;                    /* contingency identifier */
  errcod secind;                   /* secondary indicator */
  char resrv3 [2];                 /* reserved for int. use */
  errcod rcode1;                   /* return code */
};
#define errcod     char
#define _norm      0      /* normterm */
#define _abnorm    4      /* abnormend */
#define _enabled   4      /* codefenabled */
#define _preven    12     /* coprevenabled */
#define _parerr    16     /* coparerror */
#define _maxexc    24     /* comaxexceed */

Einige Einträge der Parameterstruktur müssen bzw. können Sie vor dem cenaco-Aufruf selbst versorgen, in anderen Einträgen legt cenaco während des Ablaufs Informationen ab.

Einträge, die vom Anwender versorgt werden:

coname

Name des Contingency-Prozesses. Der Name ist max. 54 Byte lang (ohne Nullbyte), muss in Großbuchstaben geschrieben und mit mindestens einem Leerzeichen abgeschlossen werden (ein Nullbyte unmittelbar hinter dem eigentlichen Namen wird vom System nicht als Endekriterium erkannt). Für die Versorgung von coname eignet sich z.B. die Funktion strfill (siehe auch Beispiel).
Die Versorgung ist obligatorisch.

level

Prioritätsstufe des Contingency-Prozesses. Die Versorgung ist obligatorisch.
Es sind Werte von 1 - 126 zulässig.

econt

Startadresse der Contingency-Routine. Die Versorgung ist obligatorisch.

comess

Contingency-Message. Die Versorgung ist fakultativ. Der Wert wird als Parameter an die Contingency-Routine übergeben.

Einträge, die von cenaco versorgt werden:

coidret

Kurzkennung des Contingency-Prozesses. Diese Kurzkennung muss in weiteren Makros (z.B. SOLSIG) zur Bezeichnung des Contingency-Prozesses verwendet werden.

secind

„Secondary Indicator“, wie er nach Ausführung des ENACO-Makros im höchstwertigen Byte des Register 15 abgelegt wird (Werte 4, 12, 16 oder 24).

rcode1

„Return Code“, wie er nach Ausführung des ENACO-Makros im niedrigstwertigen Byte des Register 15 abgelegt wird (Werte 0 oder 4).

Hinweis

Es können maximal 255 Contingency-Routinen definiert werden.

Beispiel

Programmausschnitt zur Definition einer Contingency-Routine.

#include <cont.h>
/* Contingency-Routine: controut */
int controut(struct contp contpar)
{
    .
    .
    .
  printf("Contingency-Message: %d\n", contpar.comess);
    .
    .
    .
}
/* main-Routine, in der die Routine controut als Contingency-Routine
   definiert wird. */
int main(void)
{
    .
    .
    .
  struct enacop enacopar;
    .
    .
    .
  enacopar.econt  = controut;
  enacopar.level  = 1;
  enacopar.comess = 100;
  strfill(enacopar.coname, "CONTPROC1 ", sizeof(enacopar.coname));
  cenaco(&enacopar);
    .
    .
    .
}

Siehe auch  cdisco, cstxt, signal, alarm, raise, sleep