*DECK     COMPPCS 
          IDENT  PAS.CAL
          LIST   F
          SYSCOM B1 
          ENTRY  PASCAL 
          ENTRY  CSOPT
          ENTRY  FILENAM
 PASCAL   SPACE  4,10 
 PASCAL   TITLE  PASCAL-6000 CONTROL STATEMENT ROUTINES.
          COMMENT  PASCAL-6000 CONTROL STATEMENT ROUTINES.
          COMMENT  COPYRIGHT (C) UNIVERSITY OF MINNESOTA - 1982.
 PASCAL   SPACE  4,10 
***       PASCAL - CONTROL STATEMENT ROUTINES.
*         D. J. BIANCHI.     82/09/08.
 PASCAL   SPACE  4,10 
***       THE PASCAL-6000 CONTROL STATEMENT ROUTINES PROCESS A
*         CONTROL STATEMENT SIMILAR TO OTHER CDC LANGUAGE PROCESSORS. 
* 
*         TWO RELATED ROUTINES ARE USED TO PROCESS CONTROL STATEMENTS.
* 
*         1. THE MAIN PROGRAM *PASCAL* WHICH IS THE NEW ENTRY POINT 
*            FOR THE PASCAL COMPILER.  THIS ROUTINE TAKES A CONTROL 
*            STATEMENT OF THE FORM
* 
*             PASCAL(I=SFN,L=LFN,B=BFN,GO,PD=D,PS=N,PL=X/OPTS)
* 
*            AND CONVERTS THE ARGUMENTS PRECEDING THE */* INTO A FORM 
*            WHICH IS EXPECTED BY THE COMPILER. 
* 
*         2. THE COMPILER ROUTINE *CSOPT* WHICH IS CALLED DURING
*            COMPILER INITIALIZATION TO SET ANY OPTIONS WHICH ARE 
*            PROCESSED BY THE MAIN PROGRAM *PASCAL*.
 PASCAL   SPACE  4,10 
**        ASSEMBLY CONSTANTS. 
  
  
          LIST   X
*CALL     COMSPAS 
 PASCAL   SPACE  4,10 
          LIST   *
  
*         PRINT PARAMETER BLOCK.
  
 GPP      BSS    0           PAGE PARAMETER BLOCK 
 DEFPD    BSS    1           JOB DEFAULT PRINT DENSITY *PD* 
 DEFPS    BSS    1           JOB DEFAULT PAGE SIZE *PS* 
* 
 CONSTS   SPACE  4,10 
  
*         PAGE SIZE CONSTANTS.
  
 DEFPS6   EQU    63          DEFAULT PAGE SIZE AT 6 LPI 
 DEFPS8   EQU    84          DEFAULT PAGE SIZE AT 8 LPI 
 MAXPS    EQU    -1          MAXIMUM PAGE SIZE (MAXINT) 
  
  
*         LINE LIMIT CONSTANTS. 
  
 DEFLL    EQU    2000        DEFAULT LINE LIMIT 
 MAXLL    EQU    -1          MAXIMUM LINE LIMIT (MAXINT)
 PASCAL   TITLE  MACROS AND MICROS. 
 MACROS   SPACE  4,10 
**        MACROS. 
 PARAM    SPACE  4,10 
**        PARAM - GENERATE OPTION TABLE ENTRY.
* 
* KW      PARAM  TE,ALT,ADDR
* 
*         ENTRY  *KW*   = KEYWORD OF OPTION.
*                *TE*   = TYPE OF EQUIVALENCES ALLOWED. 
*                       = *EQ* IF OPTION -MUST- BE EQUIVALENCED.
*                       = *NE* IF OPTION -MUST NOT- BE EQUIVALENCED.
*                       = BLANK, BOTH TYPES ARE ALLOWED.
*                *ALT*  = ADDRESS OF ALTERNATE DEFAULT. 
*                *ADDR* = ADDRESS TO PLACE EQUIVALENCE. 
* 
*         CALLS  NONE.
  
  
          PURGMAC PARAM 
  
          MACRO  PARAM,KW,TE,ALT,ADDR 
          LOCAL  EQN
 EQN      SET    3
          IFC    EQ,$TE$EQ$,1 
 EQN      SET    EQN-1
          IFC    EQ,$TE$NE$,1 
 EQN      SET    EQN-2
 OP.KW    VFD    18/0L_KW,6/EQN,18/ALT,18/ADDR
          ENDM
 PASCAL   SPACE  4,10 
**        MICROS. 
 MICROS   SPACE  4,10 
**        EMSG - ERROR DAYFILE MESSAGE OPTION.
  
 EMSG     MICRO  1,,*3*      ERROR MESSAGES TO USER DAYFILE 
 PASCAL   TITLE  GLOBAL VARIABLES.
 GLOBAL   SPACE  4,10 
**        GLOBAL - GLOBAL VARIABLES.
  
  
*         FILE NAME PARAMETERS. 
  
 IFILE    CON    0LINPUT+1   DEFAULT SOURCE FILE NAME 
 LFILE    CON    0LOUTPUT+1  DEFAULT LISTING FILE NAME
 BFILE    CON    0LLGO+17B   DEFAULT BINARY FILE NAME 
  
  
*         BOOLEAN PARAMETERS. 
  
 USEDGO   DATA   0           SET IF *GO* OPTION PRESENT 
 USEDL0   DATA   0           SET IF *L=0* USED
 USEDPD   DATA   0           SET IF *PD* OPTION PRESENT 
  
  
*         NUMERIC PARAMETERS. 
  
 PAGDEN   DATA   0           PAGE DENSITY OPTION
 PAGSIZ   DATA   0           PAGE SIZE OPTION 
 LINLIM   DATA   0           LINE LIMIT OPTION
  
  
*         ALTERNATE DEFAULT FILE NAMES. 
  
 COMPILE  CON    0LCOMPILE   ALTERNATE DEFAULT SOURCE FILE NAME 
 OUTPUT   CON    0LOUTPUT    LISTING FILE NAME IF *L=0* 
 PASCAL   TITLE  TABLES.
 TABLES   SPACE  4,10 
**        TABLES. 
 TCSP     SPACE  4,10 
**        TCSP - TABLE OF CONTROL STATEMENT PARAMETERS. 
* 
*         THIS TABLE CONTAINS CONTROL STATEMENT PARAMETERS. 
  
  
 TCSP     BSS    0
  
 I        PARAM  ,COMPILE,IFILE 
 L        PARAM  ,,LFILE
 B        PARAM  ,,BFILE
 GO       PARAM  NE,,USEDGO 
 PD       PARAM  ,,PAGDEN 
 PS       PARAM  EQ,,PAGSIZ 
 PL       PARAM  ,,LINLIM 
  
 TCSPX    DATA   0
 PASCAL   TITLE  MAIN PROGRAM.
 PASCAL   SPACE  4,10 
***       PASCAL - PASCAL-6000 CONTROL STATEMENT PREPROCESSOR.
*         D. J. BIANCHI.     1982-09-15.
* 
*         *PASCAL* TAKES A CONTROL STATEMENT OF THE FORM
* 
*         PASCAL(I=SFN,L=LFN,B=BFN,GO,PD=D,PS=N,PL=X/OPTS)
* 
*         AND CONVERTS THE ARGUMENTS PRECEDING THE */* INTO THE 
*         FORM THAT THE COMPILER EXPECTS. 
* 
* 
*         CONTROL STATEMENT PARAMETERS: 
* 
*         I=SFN  INPUT FILE OF PROGRAM SOURCE.
*                I ALONE GIVES FILE NAME *COMPILE*. 
*                DEFAULT IF OMITTED - INPUT.
* 
*         L=LFN  COMPILER LISTING IS WRITTEN TO LFN.
*                L=0 TURNS OFF THE COMPILER LISTING.
*                DEFAULT IF OMITTED - OUTPUT. 
* 
*         B=BFN  RELOCATABLE BINARY OUTPUT FILE.
*                DEFAULT IF OMITTED - LGO.
* 
*         GO     SELECT AUTOMATIC LOAD AND EXECUTE. 
*                DEFAULT IF OMITTED - NO EXECUTE. 
* 
*         PD=D   SELECT PRINT DENSITY OF D LINES PER INCH.
*                PD=6 SELECTS 6 LINES PER INCH, PD=8 SELECTS 8. 
*                PD ALONE SELECTS THE ALTERNATE DEFAULT PAGE DENSITY. 
*                IF THE PS PARAMETER IS NOT PRESENT, THEN PD SETS 
*                THE PAGE SIZE:  PD=6 - 63, PD=8 - 84.
*                DEFAULT IF OMITTED: SYSTEM/JOB DEFAULT SET IN *GETPAGE*
* 
*         PL=X   SELECT PRINT LIMIT OF PROGRAM RESULTS AS X LINES.
*                PL OR PL=0 SELECTS INFINITE PRINT LIMIT (MAXINT).
*                DEFAULT IF OMITTED - 2000. 
* 
*         PS=N   SELECT A PAGE SIZE OF N LINES. 
*                IF (N = 0) OR (N > 1000), PAGE SIZE IS SET TO MAXINT.
*                IF N < 20, THEN PAGE SIZE IS SET TO 20.
*                DEFAULT IF OMITTED - SYSTEM/JOB DEFAULT SET IN *GETPAGE* 
* 
*         OPTS   PASCAL COMPILER OPTIONS. 
*                SWITCH OR NUMERIC OPTIONS AS PROCESSED BY
*                PASCAL PROCEDURE *OPTION*. 
 PASCAL   SPACE  4,10 
**       MAIN PROGRAM.
  
  
 PASCAL   SB1    1
          SB4    TCSP        START OF OPTION TABLE
          SB5    TCSPX       END OF OPTION TABLE
* 
*         INITIALIZE PAGE SIZE PARAMETER BLOCK GPP
* 
          GETPAGE GPP        GET PAGE PARAMETER 
          SA1    GPP
          MX0    -8 
          AX1    12+8        SKIP *PW* AND POSTION ON *PS*
          BX6    -X0*X1      RETRIEVE *PS* JOB DEFAULT
          SA6    DEFPS       SET PARAMETER *PS* 
          MX0    -4 
          AX1    8           POSITION ON *PD* 
          BX6    -X0*X1      RETRIEVE *PD* JOB DEFAULT
          SA6    DEFPD       SET PARAMETER *PD* 
* 
          RJ     PCS         PROCESS CONTROL STATEMENT
  
          MX0    42 
          NZ     X1,PAS9     IF ERRORS IN PARSING 
  
*         REPLACE FILE NAMES IN LOW CORE. 
  
          SA1    IFILE       SOURCE FILE NAME 
          SX4    1R0
          BX6    X1 
          SA2    A1+1        LISTING FILE NAME
          BX5    -X0*X2 
          SA6    ARGR        SET SOURCE FILE NAME 
          BX6    X2 
          LX4    54 
          BX2    X0*X2       COMPARE ONLY SEVEN CHARS 
          BX4    X2-X4
          NZ     X4,PAS1     IF NOT L=0 
          SA1    OUTPUT 
          SX7    B1 
          BX6    X1+X5
          SA7    USEDL0      SET USEDL0 TO TRUE 
 PAS1     SA6    A6+B1       SET LISTING FILE NAME
          MX7    0
          SA1    A2+B1       BINARY FILE NAME 
          BX6    X1 
          SA6    A6+B1       SET BINARY FILE NAME 
          SA7    A6+B1       SET ZERO WORD AFTER PARAMETERS 
  
*         CHECK OTHER OPTIONS.
  
          SA1    OP.GO
          SX6    1
          NZ     X1,PAS2     IF GO PARAM NOT USED 
          SA6    USEDGO      SET USEDGO TO TRUE 
  
 PAS2     SA1    PAGSIZ 
          ZR     X1,PAS3     IF PS NOT SELECTED 
          BX1    X0*X1
          RJ     DTB         CONVERT DISPLAY CODE TO BINARY 
          SX3    3RPS=
          SA4    A1+
          NZ     X5,PAS10    IF CONVERSION ERROR
          NZ     X6,PAS2.5   IF NOT PS=0
          SX6    MAXPS       SET MAXIMUM PAGE SIZE
 PAS2.5   SA6    A1+         SET PAGSIZ TO SPECIFIED VALUE
  
 PAS3     SA1    OP.PD
          NZ     X1,PAS5     IF PD NOT SELECTED 
          SA1    PAGDEN 
          SA2    DEFPD
          SX3    6+8
          IX6    X3-X2       SET ALTERNATE PD VALUE 
          ZR     X1,PAS4     IF PD NOT EQUIVALENCED 
          BX1    X0*X1
          RJ     DTB         CONVERT DISPLAY CODE TO BINARY 
          SX3    3RPD=
          SA4    A1+
          NZ     X5,PAS10    IF CONVERSION ERROR
          SB4    X6-6 
          SB5    X6-8 
          ZR     B4,PAS4     IF PD=6
          NZ     B5,PAS10    IF NOT (PD=6 OR PD=8)
 PAS4     SX7    B1 
          SA6    A1          SET PAGDEN TO SPECIFIED VALUE
          SA7    USEDPD      SET USEDPD TO TRUE 
  
 PAS5     SA1    OP.PL
          NZ     X1,PAS8     IF PL NOT SELECTED 
          SA1    LINLIM 
          ZR     X1,PAS6     IF *PL* SPECIFIED
          BX1    X0*X1
          RJ     DTB         CONVERT DISPLAY CODE TO BINARY 
          SX3    3RPL=
          SA4    A1+
          NZ     X5,PAS10    IF CONVERSION ERROR
          NZ     X6,PAS7     IF NOT *PL=0*
 PAS6     SX6    MAXLL       SET INFINITE LINE LIMIT
 PAS7     SA6    A1+         SET LINLIM TO SPECIFIED VALUE
  
*         RESET ACTR. 
  
 PAS8     SA1    ACTR        ENSURE UPPER BITS UNCHANGED
          BX6    X0*X1
          SX2    3           THREE ARGUMENTS IN LOW CORE
          BX6    X6+X2
          SA6    A1          ACTR := 3
          EQ     =XP6.MAIN   TO COMPILER
  
 PAS9     BX1    X0*X1
          EQ     PAS11       ABORT
  
 PAS10    BX4    X0*X4       REASSEMBLE ARGUMENT
          BX1    X3+X4
          LX1    42 
  
 PAS11    SA4    PASA-1      FWA-1 OF MESSAGE 
          SB7    1R+
          RJ     =XP.SNM     SET NAME IN MESSAGE
  
          MESSAGE  PASA,"EMSG"  ISSUE ERROR MESSAGE 
          ABORT 
  
 PASA     DATA   C* ERROR IN PASCAL ARGUMENTS - ++++++++++.*
 PASCAL   TITLE  PASCAL COMPILER ROUTINES.
 CSOPT    SPACE  4,10 
***       CSOPT - RETURN PARSED OPTIONS.
* 
*         TYPE OPTIONBLOCK =
*                RECORD 
*                  LOADANDGO : BOOLEAN;  (* LOAD AND EXECUTE BINARY *)
*                  LISTOFF   : BOOLEAN;  (* LISTING IS TURNED OFF *)
*                  USEDPD    : BOOLEAN;  (* SPECIFIED PD PARAMETER *) 
*                  EIGHTLPI  : BOOLEAN;  (* EIGHT LPI PAGE DENSITY *) 
*                  PAGESIZE  : INTEGER;  (* LISTING PAGE SIZE *)
*                  LINELIMIT : INTEGER;  (* OUTPUT FILE LINE LIMIT *) 
*                END; 
*         PROCEDURE CSOPT(VAR OPTS : OPTIONBLOCK);
* 
* 
*         ENTRY  (B1) = 1.
*                (X0) = ADDRESS OF OPTIONS BLOCK. 
* 
*         EXIT   OPTIONS RETURNED.
* 
*         USES   X - 3, 4, 5, 6, 7. 
*                A - 4, 5, 6, 7.
  
  
 CSOPT    PS                 ENTRY/EXIT 
          SA4    USEDGO 
          SA5    USEDL0 
          BX6    X4 
          BX7    X5 
          SA6    X0          SET LOADANDGO
          SA7    A6+B1       SET LISTOFF
  
          SA4    USEDPD 
          SA5    DEFPD       JOB DEFAULT *PD* GROM GETPAGE
          ZR     X4,OPT1     IF PD NOT SELECTED 
          SA5    PAGDEN 
 OPT1     BX6    X4 
          AX5    1
          SX7    X5-3 
          SA6    A7+B1       SET USEDPD 
          SA7    A6+B1       SET EIGHTLPI 
  
          SA4    PAGSIZ 
          NZ     X4,OPT2     IF PS SPECIFIED
          SA4    DEFPS       JOB DEFAULT *PS* FROM GETPAGE
          ZR     X6,OPT2     IF PD NOT SPECIFIED
          SX4    DEFPS6 
          ZR     X7,OPT2     IF NOT EIGHTLPI
          SX4    DEFPS8 
 OPT2     BX6    X4 
          SA6    A7+B1       SET PAGESIZE 
  
          SA5    LINLIM 
          NZ     X5,OPT3     IF PL SPECIFIED
          SX5    DEFLL       SET DEFAULT LINE LIMIT 
 OPT3     BX7    X5 
          SA7    A6+B1       SET LINELIMIT
          EQ     CSOPT       RETURN 
 FILENAM  SPACE  4,10 
***       FILENAM - RETURN NAME OF INPUT FILE.
* 
*         PROCEDURE FILENAME(VAR NAME: ALFA); 
* 
* 
*         ENTRY  (B1) = 1.
*                (X0) = ADDRESS TO STORE NAME OF INPUT FILE.
* 
*         EXIT   NAME OF INPUT FILE RETURNED. 
* 
*         CALLS  SFN=.
* 
*         MACROS NONE.
  
  
 FILENAM  PS                 ENTRY/EXIT 
          SA1    IFILE       NAME OF INPUT FILE 
          MX7    42 
          BX1    X7*X1       ISOLATE FILE NAME
          RJ     =XSFN=      SPACE FILL FILE NAME 
          SA6    X0          SET INPUT FILE NAME
          EQ     FILENAM     RETURN 
 PASCAL   TITLE  SUBROUTINES. 
 PCS      SPACE  4,10 
**        PCS - PROCESS CONTROL STATEMENT.
*         MARK S. RANSOM.    1976-06-23.
* 
*         ADAPTED FOR USE BY PASCAL-6000 BY 
*         D. J. BIANCHI.     1982-09-15.
* 
*         PCS PROCESSES THE PASCAL CONTROL STATEMENT PARAMETERS 
*         FROM RA+2 TO RA+62 ACCORDING TO A TABLE OF OPTIONS. 
* 
*         CONTROL STATEMENT FORMAT: 
* 
*               PASCAL(I=INPUT,L=OUTPUT,B=LGO,GO,PD=D,PS=N,PL=X/OPTS) 
* 
*         THE OPTION TABLE CONTAINS OPTION NAMES AND ADDRESSES FOR
*         KEYWORD TYPE OPTIONS.  WHEN AN OPTION IS SELECTED, ITS ENTRY
*         IN THE TABLE IS ZEROED.  THIS CAN BE USED LATER TO TELL IF
*         THE OPTION WAS SELECTED.
* 
*         ENTRIES IN THE OPTION TABLE ARE IN THE FOLLOWING FORMAT:  
* ENTRY   18/ KEYWORD,6/ EQ,18/ ALTERN,18/ ADDRESS
* 
*         KEYWORD = THE KEYWORD TO CHECK FOR ON THE CONTROL CARD. 
*         IF EQ = 1, AN EQUIVALENCED OPTION IS FLAGGED ILLEGAL. 
*         IF EQ = 2, A NON-EQUIVALENCED OPTION IS FLAGGED ILLEGAL.
*         IF EQ = 3, EITHER FORM IS LEGAL.
*         ALTERN  = THE ADDRESS TO GET THE ALTERNATE DEFAULT FROM (THE
*                   DEFAULT USED IF ONLY THE KEYWORD ITSELF WAS GIVEN). 
*                   IF ZERO, NO ALTERNATE DEFAULT WILL BE USED. 
*         ADDRESS = THE ADDRESS TO PUT THE EQUIVALENCED WORD.  IF ZERO, 
*                   NO REPLACEMENT WILL BE MADE.
* 
* 
*         ENTRY  (B1) = 1.
*                (B4) = STARTING ADDRESS OF OPTION TABLE. 
*                (B5) = ENDING ADDRESS + 1 OF THE OPTION TABLE. 
* 
*         EXIT   (X1) = 0 IF NO ERRORS WERE ENCOUNTERED.
*                (X1) = OFFENDING OPTION + SEPARATOR IF AN ERROR WAS
*                       FOUND.
*                (X6) = EQUIVALENCE OF OFFENDING OPTION.
* 
*         USES   X - 1, 2, 3, 4, 6, 7.
*                B - 2, 3.
*                A - 1, 2, 3, 4, 6, 7.
* 
*         CALLS  NONE.
* 
*         MACROS NONE.
  
  
 PCS      PS                 ENTRY/EXIT 
          SA1    ARGR-1      SET FOR FIRST ARGUMENT - 1 
          SX6    0
          SA3    ACTR        (X3) = 42/,18/NO OF PARAMS 
          SA6    X3+ARGR     ENSURE ZERO WORD AT END OF PARAMS
  
 PCS1     SB2    B4          START OF OPTION TABLE
          SB3    B5          END OF OPTION TABLE + 1
          SA1    A1+1        GET NEXT ARGUMENT
          ZR     X1,PCS      IF ARGUMENTS EXHAUSTED 
          MX2    42 
          BX6    X2*X1
          ZR     X6,PCS      IF NULL OPTION FOUND 
          MX7    18 
 PCS2     SA3    B2          GET OPTION FROM TABLE
          BX3    X7*X3
          BX3    X6-X3
          ZR     X3,PCS3
          SB2    B2+B1       GET SET FOR NEXT OPTION FROM TABLE 
          NE     B2,B3,PCS2 
          MX6    0           SET ERROR CONDITION
          EQ     PCS
  
 PCS3     BX3    -X2*X1      GET SEPARATOR
          MX6    0
          SX3    X3-1R= 
          ZR     X3,PCS4     IF SEPARATOR IS *=*
          SX3    X3+1R=-2B   CHECK SCOPE CODE *=* 
          NZ     X3,PCS5     IF NOT *=* 
 PCS4     BX3    X1 
          SA1    A1+B1       GET NEXT WORD
          BX6    X2*X1
          ZR     X6,PCS      IF NULL ARGUMENT FOUND, ABORT
          BX7    -X2*X1 
          BX1    X3 
 PCS5     SA3    B2          GET OPTION AND ADDRESS 
          BX4    X3          CHECK EQ 
          LX4    59-36       CHECK BIT 0 (NON-EQUIV)
          NG     X4,PCS6     IF BIT SET 
          ZR     X6,PCS      IF NO ARGUMENT, ABORT
  
 PCS6     LX4    36-37       CHECK BIT 1 (EQUIV)
          NG     X4,PCS7     IF BIT SET 
          NZ     X6,PCS      IF ARGUMENT NOT BLANK, ABORT 
  
 PCS7     LX4    37-59-18    GET ALTERN 
          SX4    X4 
          ZR     X4,PCS8     IF NONE
          NZ     X6,PCS8     IF ALREADY PARAMETER 
          SA4    X4          GET ALTERNATE DEFAULT
          BX6    X2*X4
  
 PCS8     BX3    -X2*X3      GET ADDRESS
          ZR     X6,PCS9     IF NOTHING TO REPLACE
          SA4    X3          MERGE WORD WITH ARGUMENT 
          BX4    -X2*X4 
          BX6    X6+X4
          SA6    X3          REPLACE
  
 PCS9     MX7    0           REMOVE OPTION FROM TABLE 
          SA7    B2 
  
          SA3    A1          CURRENT ARGUMENT 
          BX3    -X2*X3      GET SEPARATOR
          MX1    0
          SX3    X3-1R/ 
          ZR     X3,PCS      IF SEPARATOR IS */*
          SX3    X3+1R/-3B   CHECK SCOPE CODE */* 
          NZ     X3,PCS1     IF NOT SCOPE */* 
  
          EQ     PCS         RETURN 
 DTB      SPACE  4,10 
**        DTB - CONVERT DISPLAY CODE INTEGER TO BINARY. 
*         D. J. BIANCHI.     1982-09-16.
* 
*         DTB CONVERTS A DISPLAY CODE INTEGER TO BINARY.  THE INTEGER 
*         MAY NOT BE AN OCTAL CONSTANT (WITH SUFFIX *B*). 
* 
*         ENTRY  (B1) = 1.
*                (X1) = DISPLAY CODE CHARS, LEFT JUSTIFIED, ZERO FILLED.
*                       ASSUMES <= 7 CHARS REPRESENTING INTEGER.
* 
*         EXIT   (X6) = BINARY REPRESENTATION OF INTEGER. 
*                (X5) = 0, IF NO CONVERSION ERRORS. 
*                (X5) = 1, OTHERWISE. 
* 
*         USES   X - 1, 2, 3, 4, 5, 6, 7. 
*                A - NONE.
*                B - 2. 
* 
*         CALLS  NONE.
* 
*         MACROS NONE.
  
  
 DTB1     SX5    1           SET ERROR
  
 DTB      PS                 ENTRY/EXIT 
          SX6    B0          CLEAR NUMBER 
          MX7    -6          CHARACTER MASK 
          SB2    B1+B1       (B2) = 2 
          SX5    B0          CLEAR ERROR
  
 DTB2     LX1    6           NEXT CHARACTER 
          BX2    -X7*X1 
          ZR     X2,DTB      IF ZERO CHARACTER
          SX3    X2-1R0      DIGIT
          SX4    X2-1R9-1 
          BX2    -X4+X3 
          NG     X2,DTB1     IF NOT DIGIT 
          LX4    X6,B2       NUMBER * 4 
          IX4    X4+X6       NUMBER * 5 
          LX4    1           NUMBER * 10
          IX6    X4+X3       NUMBER * 10 + DIGIT
          EQ     DTB2        LOOP 
 PASCAL   SPACE  4,10 
          END    PASCAL 
