*DECK KAPPMOD 
USETEXT NIPDEF
USETEXT SUPMSG
USETEXT KDIS
USETEXT DISTAIL 
USETEXT AHEADER 
USETEXT PARAMS
USETEXT PT
USETEXT AT
PRGM KAPPMOD ; # HANDLES K-DISPLAY APPLICATION-MODE TYPE-INS #
STARTIMS ;
 #
*1DC  KAPPMOD 
* 
*     1. PROC NAME           AUTHOR              DATE 
*        KAPPMOD             A. BEN-ARTZI        82/03/01 
* 
*     2. FUNCTIONAL DESCRIPTION 
*        HANDLES K-DISPLAY APPLICATION MODE TYPE-INS. 
* 
*     3. METHOD USED
*        VERIFY IF INPUT ALLOWED TO APPLICATION 
*        CHECK TYPE OF INPUT
*          IF FIRST CHARACTER IS "+" OR "-" THEN FORMAT HOP/PAGE
*          ELSE FORMAT HOP/CMD AND SEND MESSAGE TO APPLICATION. 
* 
*     4. ENTRY PARAMETERS 
*        PARAMS1 - NUMBER OF CHARACTERS ON INPUT
* 
*     5. EXIT PARAMETERS
*        NONE 
* 
*     6. COMDECKS CALLED AND SYMPL TEXTS USED 
*        NIPDEF     SUPMSG     KDIS 
*        DISTAIL     AHEADER     PARAMS 
*        PT     AT
* 
*     7. ROUTINES AND OVERLAYS CALLED 
*        BLINK - LINK MESSAGE INTO DATA RING
*        MGETS - ALLOCATE BUFFER
*        OSCHAPP - SCHEDULE APPLICATION 
*        XTRACE - TRACE PROCEDURE CALL
* 
*     8. DAYFILE MESSAGES AND OTHER IMPORTANT INFORMATION 
*        THIS IS A SECONDARY OVERLAY CALLED BY KPTYPIN. 
*        W A R N I N G - THIS OVERLAY CANNOT EXCEED THE SECONDARY 
*CALL OSSIZE
 #
STOPIMS  ;
# 
      EXTERNAL VARIABLES
# 
      XREF
        BEGIN 
        PROC XTRACE ; 
        PROC MGETS  ; 
        PROC BLINK  ; 
        PROC OSCHAPP; 
        LABEL RJMAIN ;
        END 
# 
      INTERNAL VARIABLES
# 
      ITEM FIRST  C(1) ;
      ITEM KAPNO       ;
      ITEM KCHAR       ;
      ITEM BUFADDR     ;
  
      BEGIN 
      CONTROL IFEQ DEBUG,1 ;
        XTRACE("KAPPM") ; 
      CONTROL FI           ;
  
      KCHAR = PARAMS1 ; 
      FIRST = C<0>KBUF1[0] ;
  
       BEGIN
       KAPNO = KDAN[0] ;
        IF  FIRST NQ "/" AND  #   TO THE APPLICATION                   #
            FIRST NQ "-" AND  #                                        #
            FIRST NQ "+"
              AND FIRST NQ "("
                 AND FIRST NQ ")" 
         THEN 
           BEGIN
             IF KDNI[0]       # MAYBE INPUT TO APPLICATION NOT ALLOWED #
             THEN 
               BEGIN
               KREPEAT[0] = "REPEAT..";  # SIGNAL OPERATOR OF ERROR  #
               GOTO KEXIT ; 
               END
             ELSE       # APP. MODE AND INPUT ALLOWED                  #
               BEGIN
# 
               SEND THE MSG TO THE APPLICATION WITH HOP/CMD 
# 
               KGET (HOPCMD,(KCHAR+21)/10,BUFADDR) ;
               HOPDTL[0]= KCHAR ; 
               C<0,KCHAR>HOPMSG[0]=C<0,KCHAR>KBUF[0] ;
# 
               AND NO INPUT ANY MORE TILL APPLICATION ALLOWES 
# 
               KDNI[0] = TRUE ; 
# 
               AND SEND IT TO APPLICATION 
# 
               GOTO SEND ;
               END
           END
         ELSE    # APP. MODE. ONE OF FUNC (*,-,/,+) RECEIVED           #
           BEGIN
           IF FIRST EQ "+" OR FIRST EQ "-"
                OR FIRST EQ "(" 
                    OR FIRST EQ ")" 
           THEN 
               BEGIN
# 
               BUILD THE HOP/PAGE BLOCK 
# 
               KGET(HOPPAGE,LHOPAGE,BUFADDR) ;
               HOPPC[0] = FIRST ; 
# 
               AND SEND IT TO APPLICATION 
# 
               GOTO SEND ;
               END
             ELSE    # NO OTHER CHOICE. JUST "/"                       #
               BEGIN
                  IF  KDBK[0] 
                  THEN
                    BEGIN 
                    KREPEAT[0] = "REPEAT.."; # SIGNAL ERROR            #
                    GOTO KEXIT; 
                    END 
                  ELSE
                    BEGIN 
                    KDBK[0] = TRUE; 
                    KGET(HOPBRK,LHOPBRK,BUFADDR); 
                    GOTO SEND;
                    END 
               END
           END
       END
SEND:  BEGIN
       BLINK(BUFADDR,ATACBA[KAPNO]) ; 
       OSCHAPP(ATACBA[KAPNO])       ; 
       END
KEXIT: KBUF1[0] = 0 ; 
       GOTO RJMAIN  ; 
# 
   -------------------- 
# 
 PROC KGET(KCODE,KL,BUF); 
      ITEM KCODE U; 
      ITEM KL    U; 
      ITEM BUF   U; 
 BEGIN
     MGETS(KL+BLKHSIZE+ABHSIZE,BUF,TRUE); 
     P<SUPMSG>=BUF+BLKHSIZE+ABHSIZE;
     P<AHEADER> = BUF+BLKHSIZE;# BASE APPLICATION HEADER #
     PFCSFC[0] = KCODE ; # SET FUNCTION CODE #
#                                                                      #
    ABHTLC[0]=KL; # LENGTH OF MESSAGE # 
    ABHABT[0]=APPCMD;             # THIS IS A COMMAND BLOCK # 
    ABHACT[0]=CT60TRANS;          #CHARACTER TYPE           # 
    ABHABN[0]=0;
    ABHADR[0]=0;
    RETURN; 
 END
      END   # MAIN #
TERM
