*DECK  PCMD 
USETEXT COMCBEG 
USETEXT COMRDSD 
USETEXT COMRMEM 
PROC PCMD;
# TITLE PCMD - PROCESS COMMAND. # 
  
      BEGIN    # PCMD # 
  
# 
**    PCMD - PROCESS COMMAND
* 
*     VALIDATE AND PROCESS DSD COMMAND
* 
*     PROC PCMD 
* 
*     ENTRY      - DSD COMMAND
* 
*     EXIT       - DSD COMMAND PROCESSED
* 
*     PROCESSING -
*         CALL GETCMD 
*         IF COMMAND FOUND
*         THEN
*           DEPENDING ON COMMAND
*             CASE (CMDORD,ENABLE) CALL ENA TO DO ENABLE PROCESSING 
*             CASE (CMDORD,DISABLE) CALL DSA TO DO DISABLE PROCESSING 
*             CASE (CMDORD,IDLE) SET IDLE FLAG FOR RHF
*             CASE (CMDORD,PATHC) CALL PATHC TO DO PROCESS PATH COMMAND 
*             CASE (CMDORD,APPL) SET UP FOR APPL DISPLAY PROCESSING 
*             CASE (CMDORD,ID) SET UP FOR ID DISPLAY PROCESSING 
*             CASE (CMDORD,PATH)SET UP FOR PATH DISPLAY PROCESSING
*             CASE (CMDORD,PLUS) INCREMENT DISPLAY INDEX
*             CASE (CMDORD,MINUS) DECREMENT DISPLAY INDEX 
*           ENDCASE 
*         ELSE
*           CALL ERROR
*         RETURN
# 
  
  
# 
****  PROC PCMD XREF LIST BEGIN.
# 
      XREF
        BEGIN 
        PROC ERROR; 
        FUNC GETCMD I;
        PROC ORDCH; 
        PROC PATHC; 
        END 
  
      XREF ARRAY NUMAPLS[0:0] S(1); 
        BEGIN 
        ITEM NUM$ORD    U(00,00,60); # NUMBER OF ORDINALS # 
        END 
# 
****  PROC PCMD XREF LIST END.
# 
  
  
  
      ITEM  CMDORD I; 
      ITEM  TEMPIN I;                # TEMPORARY INDEX STORAGE #
  
      SWITCH CMDCASE ,ENABLE,DISABLE,IDLE,PATHCOMMAND,
                     APPLDISP,IDDISP,PATHDISP,PLUS,MINUS; 
CONTROL EJECT;
  
      CMDORD = GETCMD;
      IF CMDORD GE CMD"IDLE" AND
         CMDORD NE CMD"PATHCMD" AND 
         C<DSD$POS[0]-1,1>DSD$CMDC[0] EQ ","
      THEN
        BEGIN 
        CMDORD = 0; 
        END 
      ELSE
        BEGIN 
        IF CMDORD LE CMD"PATHCMD" AND 
           CMDORD NE CMD"IDLE" AND
           CMDORD NE 0 AND
           C<DSD$POS[0]-1,1>DSD$CMDC[0] EQ "."
        THEN
           BEGIN
           CMDORD = 0;
           END
        END 
      IF CMDORD NE 0
      THEN
        BEGIN 
        GOTO CMDCASE[CMDORD]; 
  
# 
*     PROCESS DSD COMMAND THRU SIMULATED CASE STATEMENT 
# 
  
ENABLE: 
      ORDCH(TRUE);
      GOTO ENDCASE; 
  
DISABLE:  
      ORDCH(FALSE); 
      GOTO ENDCASE; 
  
IDLE: 
      IDLEDWN = TRUE; 
      GOTO ENDCASE; 
  
PATHCOMMAND:  
      PATHC;
      GOTO ENDCASE; 
  
APPLDISP: 
      LBUF$CURD[0] = DISORDAP;
      GOTO ENDCASE; 
  
IDDISP: 
      LBUF$CURD[0] = DISORDID;
      GOTO ENDCASE; 
  
PATHDISP:   
      LBUF$CURD[0] = DISORDPT;
      GOTO ENDCASE; 
  
PLUS: 
      DISP$INDX[LBUF$CURD[0]] = DISP$INDX[LBUF$CURD[0]] 
                                    + DISP$INC[LBUF$CURD[0]]; 
      TEMPIN = NUM$ORD[LBUF$CURD[0]] - DISP$INC[LBUF$CURD[0]];
      IF TEMPIN LE 0
      THEN
        BEGIN 
        DISP$INDX[LBUF$CURD[0]] = 1;
        END 
  
      ELSE
        BEGIN 
        IF DISP$INDX[LBUF$CURD[0]] GT TEMPIN
        THEN
          BEGIN 
          DISP$INDX[LBUF$CURD[0]] = TEMPIN; 
          END 
  
        END 
  
      GOTO ENDCASE; 
  
MINUS:  
      IF DISP$INDX[LBUF$CURD[0]] GT DISP$INC[LBUF$CURD[0]]
      THEN
        BEGIN 
        DISP$INDX[LBUF$CURD[0]] = DISP$INDX[LBUF$CURD[0]] - 
                                      DISP$INC[LBUF$CURD[0]]; 
        END 
      ELSE
        BEGIN 
        DISP$INDX[LBUF$CURD[0]] = 1;
        END 
      GOTO ENDCASE; 
  
# 
*     END OF SIMULATED CASE STATEMENT.
# 
ENDCASE:  
        END 
      ELSE
        BEGIN 
        ERROR;
        END 
      RETURN; 
      END 
  
      TERM
