*DECK DB$DSMC 
USETEXT,SCANTXT 
      PROC DB$DSMC; 
      BEGIN 
 #
* *   DB$DSMC - SEMANTICS FOR MINI-COMMANDS      PAGE  1
* *   C F RICHARDS                               DATE  11/26/78 
* 
* DC  PURPOSE 
* 
*     CONTAIN THE SEMANTIC ROUTINES FOR THE MINI OR CONVENIENCE 
*     COMMANDS (+,-,YES,NO,.). ALSO CONTAINS THE ROUTINE WHICH REQUESTS 
*     OPERATOR CONFIRMATION OF A COMMAND. 
* 
* DC  CONTAINED ROUTINES
# 
      XDEF PROC DB$DSCF;           # REQUEST OPERATOR CONFIRMATION     #
      XDEF PROC DB$DS01;           # ADVANCE DISPLAYED PAGE (+)        #
      XDEF PROC DB$DS02;           # BACK UP A DISPLAYED PAGE (-)      #
      XDEF PROC DB$DS03;           # *NO* REPLY FOR CONFIRMATION       #
      XDEF PROC DB$DS04;           # *YES* REPLY FOR CONFIRMATION      #
      XDEF PROC DB$DS05;           # CYCLE TO NEXT COMMAND/OPTION LIST #
 #                                                                     #
# 
*     LOCAL VARIABLES 
# 
      ITEM XX         I;           # INDUCTION VARIABLE                #
  
  
  
      PROC DB$DSCF; 
      BEGIN 
 #
* *   DB$DSMC                                    PAGE  1
* *   DB$DSCF - REQUEST OPERATOR CONFIRMATION 
* *   C F RICHARDS                               DATE  11/26/78 
* 
* DC  PURPOSE 
* 
*     REQUEST CONFIRMATION FROM THE OPERATOR FOR THE CURRENT COMMAND. 
*     THIS REQUEST WILL PLACE THE DISPLAY IN *SUSPEND* MODE SUCH THAT 
*     ONLY +,-,YES,NO WILL BE ACCEPTABLE COMMANDS.
* 
* DC  ENTRY CONDITIONS
* 
*     ASSUMPTIONS 
* 
*     AT LEAST ONE CDCS RESPONSE LINE IS AVAILABLE. 
*     ALL VALIDATION OF THIS COMMAND IS COMPLETE (WHEN RETURN IS MADE TO
*     THE CALLER OF THIS ROUTINE, THE FIRST DB$YES OR DN$NO CALL WILL 
*     TERMINATE SYNTAX PROCESSING.).
* 
* DC  EXIT CONDITIONS 
* 
*     WHEN CALLED BY A SEMANTIC ROUTINE, EXIT IS TO THE CALLER OF DB$STD
*     AFTER ENTERING A RESPONSE LINE ASKING FOR A YES/NO ANSWER.
*     WHEN CONFIRMATION HAS BEEN RECEIVED, THE CONFIRMATION RESPONSE
*     HANDLER WILL EXIT THROUGH THE ENTRY POINT OF THIS ROUTINE. THUS,
*     THE CALLER OF THIS ROUTINE WILL BE RESTARTED AS IF IT WERE CALLED 
*     BY THE SYNGEN SPECIFICATION INSTEAD OF THE CONFIRMATION RESPONSE
*     HANDLER.
* 
* DC  CALLING ROUTINES
* 
*     DB$DS03 - *NO* RESPONSE HANDLER. EXITS THROUGH THIS ENTRY POINT.
*     DB$DS04 - *YES* RESPONSE HANDLER. EXITS THROUGH THIS ENTRY POINT. 
*     DB$DS06 - DOWN AN OBJECT. 
*     DB$DS07 - IDLE AN OBJECT. 
*     DB$DS08 - UP AN OBJECT. 
* 
* DC  CALLED ROUTINES 
# 
      XREF PROC DB$DDIL;           # LOCK IN THE DISPLAY DRIVER OVCAP  #
      XREF PROC DB$DERL;           # ENTER CDCS RESPONSE LINE          #
      XREF PROC DB$STDR;           # RETURN TO CALLER OF DB$STD        #
# 
* DC  DESCRIPTION 
* 
*     SET FLAG FOR SUSPEND MODE. ENTER A RESPONSE TO PROMPT THE 
*     OPERATOR FOR A YES/NO COMMAND. RETURN TO CALLER OF DB$STD TO
*     TERMINATE DISPLAY COMMAND PROCESSING. 
* 
* DC  NON-LOCAL VARIABLES 
# 
      XREF ITEM DB$DMSF B;         # TRUE IF CONSOLE DISPLAY SUSPENDED #
 #                                                                     #
  
  
#     E X E C U T A B L E   C O D E   F O R   D B $ D S C F            #
  
  
      DB$DDIL;                     # LOCK IN DISPLAY DRIVER OVCAP      #
      DB$DMSF = TRUE;              # ENTER SUSPEND MODE.               #
      DB$DERL("SHOULD THIS COMMAND STILL BE FOLLOWED... ANSWER YES/NO", 
                54);
      DB$STDR;                     # RETURN TO CALLER OF DB$STD        #
  
      END 
  
  
  
      PROC DB$DS01; 
      BEGIN 
 #
* *   DB$DSMC                                    PAGE  1
* *   DB$DS01 - ADVANCE DISPLAYED PAGE
* *   C F RICHARDS                               DATE  11/26/78 
* 
* DC  PURPOSE 
* 
*     ADVANCE ONE PAGE IN A LIST OF PAGES OF DISPLAYED INFORMATION. 
* 
* DC  EXIT CONDITIONS 
* 
*     EXIT THROUGH DB$YES UNCONDITIONALLY.
* 
* DC  CALLING ROUTINES
* 
*     DB$DSTX - SYNGEN SPECIFICATION (THROUGH DB$DDIF)
* 
* DC  CALLED ROUTINES 
# 
      XREF PROC DB$DADV;           # ADVANCE TO NEXT DISPLAYED PAGE    #
      XREF FUNC DB$CBIN I;         # CONVERT DISPLAY CODE TO BINARY    #
      XREF PROC DB$YES;            # SUCCESS RETURN TO SCANNER         #
# 
* DC  DESCRIPTION 
* 
*     ASSUME THAT A PAGE COUNT HAS BEEN INCLUDED WITH THE PLUS. 
*     THE PAGE COUNT, IF PRESENT, IS PASSED AS THE NEXT TOKEN.
*     CALL DB$CBIN TO CONVERT IT TO INTEGER FORMAT. 
*     IF THE PAGE COUNT IS NOT PRESENT OR IN ERROR, DB$CBIN RETURNS A 
*     NEGATIVE VALUE.  IN THAT CASE USE A COUNT OF ONE. 
*     CALL DISPLAY MANAGER N TIMES TO ADVANCE TO THE NEXT PAGE. 
*     EXIT TO DB$YES. 
 #
  
  
#     E X E C U T A B L E   C O D E   F O R   D B $ D S 0 1            #
  
  
      XX = DB$CBIN(DB$NWRD,DB$NLNG,10); 
      IF XX LS 1
      THEN
        BEGIN 
        XX = 1; 
        END 
      FOR XX = XX STEP -1 UNTIL 1 
      DO
        BEGIN 
        DB$DADV;                   # ADVANCE TO NEXT DISPLAYED PAGE    #
        END 
      DB$YES;                      # SUCCESS RETURN TO SCANNER         #
  
      END 
  
  
  
      PROC DB$DS02; 
      BEGIN 
 #
* *   DB$DSMC                                    PAGE  1
* *   DB$DS02 - BACK UP A DISPLAYED PAGE
* *   C F RICHARDS                               DATE  11/26/78 
* 
* DC  PURPOSE 
* 
*     BACK UP ONE PAGE IN A LIST OF PAGES OF DISPLAYED INFORMATION. 
* 
* DC  EXIT CONDITIONS 
* 
*     EXIT THROUGH DB$YES UNCONDITIONALLY 
* 
* DC  CALLING ROUTINES
* 
*     DB$DSTX - SYNGEN SPECIFICATION (THROUGH DB$DDIF)
* 
* DC  CALLED ROUTINES 
# 
      XREF PROC DB$DBKU;           # BACK UP ONE DISPLAYED PAGE        #
      XREF FUNC DB$CBIN I;         # CONVERT DISPLAY CODE TO BINARY    #
      XREF PROC DB$YES;            # SUCCESS RETURN TO SCANNER         #
# 
* DC  DESCRIPTION 
* 
*     ASSUME THAT A PAGE COUNT HAS BEEN INCLUDED WITH THE MINUS.
*     THE PAGE COUNT, IF PRESENT, IS PASSED AS THE NEXT TOKEN.
*     CALL DB$CBIN TO CONVERT IT TO INTEGER FORMAT. 
*     IF THE PAGE COUNT IS NOT PRESENT OR IN ERROR, DB$CBIN RETURNS A 
*     NEGATIVE VALUE.  IN THAT CASE USE A COUNT OF ONE. 
*     CALL DISPLAY MANAGER TO DISPLAY THE PRIOR PAGE, N TIMES.
*     EXIT TO DB$YES. 
 #
  
  
#     E X E C U T A B L E   C O D E   F O R   D B $ D S 0 2            #
  
  
      XX = DB$CBIN(DB$NWRD,DB$NLNG,10); 
      IF XX LS 1
      THEN
        BEGIN 
        XX = 1; 
        END 
      FOR XX = XX STEP -1 UNTIL 1 
      DO
        BEGIN 
        DB$DBKU;                   # BACK UP ONE DISPLAYED PAGE        #
        END 
      DB$YES;                      # SUCCESS RETURN TO SCANNER         #
  
      END 
  
  
  
      PROC DB$DS03; 
      BEGIN 
 #
* *   DB$DSMC                                    PAGE  1
* *   DB$DS03 - *NO* REPLY FOR CONFIRMATION 
* *   C F RICHARDS                               DATE  11/26/78 
* 
* DC  PURPOSE 
* 
*     PROCESS A *NO* REPLY TO A CONFIRMATION REQUEST. 
* 
* DC  ENTRY CONDITIONS
* 
*     ASSUMPTIONS 
* 
*     DISPLAY IN SUSPEND MODE.
* 
* DC  EXIT CONDITIONS 
* 
*     DB$DSCY SET FALSE.
*     DISPLAY NOT IN SUSPEND MODE.
*     EXIT IS THROUGH DB$DSCF ENTRY POINT.
* 
* DC  CALLING ROUTINES
* 
*     DB$DSTX - SYNGEN SPECIFICATION (THROUGH DB$DDIF)
* 
* DC  CALLED ROUTINES 
# 
      XREF PROC DB$ODLC;           # UNLOCK THE OVCAP                  #
      XREF PROC DB$GOTO;           # CONTINUE EXECUTION AT GIVEN ADDR  #
# 
* DC  DESCRIPTION 
* 
*     THE DISPLAY IS TAKEN OUT OF SUSPEND MODE. EXIT IS MADE TO THE 
*     CALLER OF DB$DSCF TO COMPLETE PROCESSING OF THE COMMAND.
* 
* DC  NON-LOCAL VARIABLES 
# 
      XREF ITEM DB$DMSF B;         # TRUE IF CONSOLE DISPLAY SUSPENDED #
      XREF ITEM DB$DSCY B;         # TRUE IF CONFIRMATION RESPONSE YES #
 #                                                                     #
  
  
#     E X E C U T A B L E   C O D E   F O R   D B $ D S 0 3            #
  
  
      DB$ODLC;                     # UNLOCK THE OVCAP                  #
      DB$DSCY = FALSE;             # CONFIRMATION RESPONSE WAS NO      #
      DB$DMSF = FALSE;             # TAKE DISPLAY OUT OF SUSPEND MODE  #
      DB$GOTO(LOC(DB$DSCF));       # EXIT THROUGH DB$DSCF ENTRY POINT  #
  
      END 
  
  
  
      PROC DB$DS04; 
      BEGIN 
 #
* *   DB$DSMC                                    PAGE  1
* *   DB$DS04 - *YES* REPLY FOR CONFIRMATION
* *   C F RICHARDS                               DATE  11/26/78 
* 
* DC  PURPOSE 
* 
*     PROCESS A *YES* REPLY TO A CONFIRMATION REQUEST.
* 
* DC  ENTRY CONDITIONS
* 
*     ASSUMPTIONS 
* 
*     DISPLAY IS IN SUSPEND MODE. 
*     THE ENTRY POINT DB$DSCF CONTAINS THE RETURN LINKAGE TO THE
*     ROUTINE REQUESTING THIS CONFIRMATION. 
* 
* DC  EXIT CONDITIONS 
* 
*     DB$DSCY IS SET TRUE 
*     DISPLAY IS NOT IN SUSPEND MODE
*     EXIT THROUGH DB$DSCF ENTRY POINT. 
* 
* DC  CALLING ROUTINES
* 
*     DB$DSTX - SYNGEN SPECIFICATION (THROUGH DB$DDIF)
* 
* DC  CALLED ROUTINES 
# 
      XREF PROC DB$ODLC;           # UNLOCK THE OVCAP                  #
      XREF PROC DB$GOTO;           # CONTINUE EXECUTION AT GIVEN ADDR  #
# 
* DC  DESCRIPTION 
* 
*     THE DISPLAY IS TAKEN OUT OF SUSPEND MODE. EXIT IS MADE TO THE 
*     CALLER OF DB$DSCF TO COMPLETE PROCESSING OF THE COMMAND.
* 
* DC  NON-LOCAL VARIABLES 
# 
      XREF ITEM DB$DMSF B;         # TRUE IF CONSOLE DISPLAY SUSPENDED #
      XREF ITEM DB$DSCY B;         # TRUE IF CONFIRMATION RESPONSE YES #
 #                                                                     #
  
  
#     E X E C U T A B L E   C O D E   F O R   D B $ D S 0 4            #
  
  
      DB$ODLC;                     # UNLOCK THE OVCAP                  #
      DB$DSCY = TRUE;              # CONFIRMATION RESPONSE WAS YES     #
      DB$DMSF = FALSE;             # TAKE DISPLAY OUT OF SUSPEND MODE  #
      DB$GOTO(LOC(DB$DSCF));       # EXIT THROUGH DB$DSCF ENTRY POINT  #
  
      END 
  
  
  
      PROC DB$DS05; 
      BEGIN 
 #
* *   DB$DSMC                                    PAGE  1
* *   DB$DS05 - CYCLE TO NEXT COMMAND OPTION LIST 
* *   C F RICHARDS                               DATE  11/26/78 
* 
* DC  PURPOSE 
* 
*     PROVIDE THE CONSOLE WATCHER WITH THE NEXT LIST OF COMMANDS OR 
*     OPTIONS. THE SELECTION OF THIS LIST IS CIRCULAR - WHEN THE LAST 
*     LIST HAS BEEN USED, THE NEXT CALL TO THIS ROUTINE WILL YIELD THE
*     FIRST LIST. THE LISTS CURRENTLY SUPPORTED ARE - 
*         MAIN COMMANDS 
*         STATUS COMMAND OPTIONS
* 
* DC  ENTRY CONDITIONS
* 
*     ASSUMPTIONS 
* 
*     DB$DMCL CONTAINS THE NUMBER OF THE PREVIOUSLY USED LIST, OR ZERO
*     IF NO PREVIOUS LIST DEFINED.
* 
* DC  EXIT CONDITIONS 
* 
*     DB$DMCL CONTAINS THE NUMBER OF THIS LIST. 
* 
* DC  CALLING ROUTINES
* 
*     DB$DSTX - SYNGEN SPECIFICATION (THROUGH DB$DDIF)
* 
* DC  CALLED ROUTINES 
# 
      XREF PROC DB$DSL1;           # GENERATE COMMAND/OPTION LIST 1    #
      XREF PROC DB$DSL2;           # GENERATE COMMAND/OPTION LIST 2    #
      XREF PROC DB$YES;            # SUCCESS RETURN TO SCANNER         #
# 
* DC  NON-LOCAL VARIABLES 
# 
      XREF ITEM DB$DMCL I;         # NUMBER OF CURRENT COMMAND LIST    #
 #                                                                     #
  
  
#     LOCAL DEFS                                                       #
  
      DEF DFLASTLIST # 2 #;        # MAXIMUM LIST NUMBER               #
                                   #  1 - MAIN COMMANDS                #
                                   #  2 - STATUS COMMAND OPTIONS       #
  
  
#     E X E C U T A B L E   C O D E   F O R   D B $ D S 0 5            #
  
  
      DB$DMCL = DB$DMCL + 1;       # CYCLE TO NEXT LIST NUMBER         #
      IF DB$DMCL GR DFLASTLIST     # IF EXCEEDS LAST LIST NUMBER       #
      THEN
        BEGIN 
        DB$DMCL = 1;               # SELECT FIRST LIST                 #
        END 
  
      IF DB$DMCL EQ 1              # IF MAIN COMMAND LIST SELECTED     #
      THEN
        BEGIN 
        DB$DSL1;                   # LIST MAIN COMMANDS                #
        END 
  
      IF DB$DMCL EQ 2              # IF STATUS COMMAND OPTION LIST     #
      THEN
        BEGIN 
        DB$DSL2;                   # LIST STATUS COMMAND OPTIONS       #
        END 
  
      DB$YES;                      # SUCCESS RETURN TO SCANNER         #
  
      END 
  
      END 
  
      TERM
