Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

Beispiel: Event-Exit INPUT (BS2000-Systeme)

Der INPUT-Exit forinput wird bei Eingaben im Formatmodus aufgerufen und reagiert auf die Eingaben wie folgt:

Benutzerkommandos werden abgesetzt:

  • KDCOUT: Drücken der Taste F1

  • KDCDISP: Drücken der Taste F2

  • KDCOFF: erstes Zeichen der Eingabe ist "/"; wird nur außerhalb eines Vorgangs akzeptiert.

Soll dem Benutzer zusätzlich die Eingabe von KDCLAST und KDCFOR erlaubt werden, muss das Programm entsprechend erweitert werden.

Dieser INPUT-Exit wird mit der KDCDEF-Anweisung EXIT generiert:

KDCDEF-Anweisung
EXIT PROGRAM=FORINPUT,USAGE=(INPUT,FORMMODE) 
Event-Exit INPUT
#include <string.h>
#include <kcinp.h>
#define KDCDISP 2
#define KDCOUT  1
#define NOKEY 0
#define FKEY 1
#define KDCOFF "KDCOFF  "
#define NOTAC (strncmp (param->kcicfinf, "ON", 2) != 0)
#define CV_END (strncmp (param->kcicvst, "EC", 2) == 0)
#define TAC       param->kcicvtac[0]
#define fkey      param->kcifkey
#define cmd       param->kcintac
#define nexttac   param->kcintac
#define errcode   param->kcierrcd
#define contcode  param->kciccd
#define firstchar param->kcifch[0]
#define cut       param->kcicut
static int  key( struct kc_inp * );
static void func_control( struct kc_inp * );
static void cv_continue( struct kc_inp * );
void forinput ( struct kc_inp *param )
{
  if ( key ( param ) == NOKEY)                      /* No F-Key   */
     { if ( CV_END)
          func_control ( param );
       else
          cv_continue ( param );
     }
}

/*************************************************************************/
/*               function key for checking F-key                         */
/*************************************************************************/
int key ( struct kc_inp *param )
{
  int key_value = NOKEY;
  if (fkey > 0)
     {  switch (fkey)
         {
          case KDCOUT:
              memcpy (cmd, "KDCOUT  ", 8);
              memcpy (contcode, "CD", 2);
              cut =  ́N ́;
              memset (errcode,  ́  ́, 4);
              key_value = FKEY;
              break;
          default: break;
         }
     }
  return key_value;
}
/**************************************************************************/
/*   function func_control: checking the next FUNCTION out of conversation*/
/************************************************************************ */
void func_control ( struct kc_inp * param )
{
  if (firstchar ==  ́/ ́)                      /* check the first character*/
     { memcpy (cmd, KDCOFF, 8);              /* of input:   ́/ ́ = KDCOFF  */
       memcpy (contcode, "CD", 2);
       cut =  ́N ́;
       memset (errcode,  ́  ́, 4);
     }
  else                                       /* check control field      */
     {
       if (NOTAC)                            /* no input in control field*/
          { memset (nexttac,  ́  ́, 8);
            memcpy (contcode, "ER", 2);
            cut =  ́N ́;
            memcpy (errcode, "ER01", 4);
          }
       else
          { switch (TAC)                     /* TAC for the next         */
             {                               /* conversation             */
              case  ́1 ́:
                  memcpy (nexttac, "DTAC1   ", 8);
                  memcpy (contcode, "SC", 2);
                  cut =  ́Y ́;
                  memset (errcode,  ́  ́, 4);
                  break;
              case  ́2 ́:
                  memcpy (nexttac, "DTAC3   ", 8);
                  memcpy (contcode, "SC", 2);
                  cut =  ́Y ́;
                  memset (errcode,  ́  ́, 4);
                  break;
              case  ́3 ́:
                  memcpy (nexttac, "DTAC6   ", 8);
                  memcpy (contcode, "SC", 2);
                  cut =  ́Y ́;
                  memset (errcode,  ́  ́, 4);
                  break;
              default:                       /* TAC is invalid           */
                  memset (nexttac,  ́  ́, 8);
                  memcpy (contcode, "ER", 2);
                  cut =  ́N ́;
                  memcpy (errcode, "ER02", 4);
                  break;
             }
          }
     }
}
/*************************************************************************/
/*          function cv_continue: continue the conversation              */
/*************************************************************************/
void  cv_continue ( struct kc_inp * param )
{  memset (nexttac,  ́  ́, 8);
   memcpy (contcode, "CC", 2);
   cut =  ́N ́;
   memset (errcode,  ́  ́, 4);
}