*COMMAND LINE PARSING FOR DATE & TIME                   HEADER  FUPDAT  0001.000
         M.PGM     DATETIME,MPX-32,3.6.1,00                             0002.000
         SPACE                                                          0003.000
*                                                                       0004.000
************************************************************************0005.000
*                                                                      *0006.000
*                    PROPRIETARY INFORMATION                           *0007.000
*                    -----------------------                           *0008.000
*   THE INFORMATION CONTAINED HEREIN IS PROPRIETARY TO ENCORE          *0009.000
*   COMPUTER CORPORATION AND/OR ITS VENDORS, AND ITS USE, DISCLOSURE,  *0010.000
*   OR DUPLICATION IS SUBJECT TO THE RESTRICTIONS STATED IN THE        *0011.000
*   STANDARD ENCORE COMPUTER CORPORATION LICENSE TERMS AND CONDITIONS  *0012.000
*   OR THE APPROPRIATE THIRD-PARTY SUBLICENSE AGREEMENT.               *0013.000
*                                                                      *0014.000
*                       RESTRICTED RIGHTS                              *0015.000
*                       -----------------                              *0016.000
*   USE, DUPLICATION, OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT       *0017.000
*   TO RESTRICTIONS AS SET FOURTH IN SUBDIVISION (c) (1) (ii) OF       *0018.000
*   THE RIGHTS IN TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT       *0019.000
*   252.227.7013                                                       *0020.000
************************************************************************0021.000
* (C) COPYRIGHT 1989 ENCORE COMPUTER CORPORATION                       *0022.000
*     ALL RIGHTS RESERVED                                              *0023.000
************************************************************************0024.000
*-                                                                      0025.000
*+                                                                      0026.000
*        FUNCTIONAL DESCRIPTION                                         0027.000
*                                                                       0028.000
*    THIS MODULE CONTAINS ONE OF THE COMMAND PROCESSING ROUTINES        0029.000
*    FOR THE PARSING OF DATE/TIME INPUT. THIS ROUTINE ACCEPTS           0030.000
*    THE INPUT AND FILLS IN FIELDS NOT ENTERED WITH THE DEFAULT         0031.000
*    WHICH IS CURRENT OR ZERO. THEN THIS IS CONVERTED TO BINARY         0032.000
*    TIME WHICH IS A DOUBLEWORD CONTAINING A WORD OF DATE AND           0033.000
*    A WORD OF TIME. DATE IS THE NUMBER OF DAYS STARTING WITH           0034.000
*    THE FIRST OF JANUARY, 1960. TIME IS THE COUNT OF 100               0035.000
*    MICRO-SECONDS SINCE MIDNIGHT.                                      0036.000
*-                                                                      0037.000
*+                                                                      0038.000
*        ENVIRONMENT                                                    0039.000
*                                                                       0040.000
*                                                                       0041.000
*    EXTERNAL REFERENCES:                                               0042.000
*                                                                       0043.000
         SPACE                                                          0044.000
         EXT       BYBTOBIN        BYTE BINARY TO BINARY TIME           0045.000
         EXT       STACKPTR        STACK POINTER SAVE AREA              0046.000
         SPACE                                                          0047.000
*                                                                       0048.000
*    EXTERNAL DEFINITIONS                                               0049.000
*                                                                       0050.000
         SPACE                                                          0051.000
         DEF       BIN.TIME        THE RESULTANT TIME                   0052.000
         DEF       SS.BTIME        THE STATE TABLE INPUT                0053.000
         SPACE                                                          0054.000
*                                                                       0055.000
*    SYSTEM MACRO CALLS FOR DEFINITIONS AND EQUATES                     0056.000
*                                                                       0057.000
         SPACE                                                          0058.000
         M.REQS                    REGISTER EQUATES                     0059.000
         M.COMM.                   COMMUNICATION VALUES                 0060.000
         SPACE                                                          0061.000
*                                                                       0062.000
*    LOCAL DEFINITIONS                                                  0063.000
*                                                                       0064.000
         SPACE                                                          0065.000
         STINIT                    TPARSE DEFINITIONS AND INIT          0066.000
         SPACE                                                          0067.000
*                                                                       0068.000
*    LOCAL STORAGE                                                      0069.000
*                                                                       0070.000
         SPACE                                                          0071.000
         BOUND     1D                                                   0072.000
SAVENUMB EQU       $               USE THIS FOR TEMP                    0073.000
BIN.TIME REZ       1D              SPACE FOR FINAL RESULT               0074.000
DATE     EQU       $               DATE IN BYTE BINARY FORMAT           0075.000
CENTURY  REZ       1B              THE CENTURY                          0076.000
YEAR     REZ       1B              YEAR WITHIN CENTURYY                 0077.000
MOUNTH   REZ       1B              MOUNTH WITHIN YEAR                   0078.000
DAY      REZ       1B              DAY WITHIN MOUNTH                    0079.000
         SPACE                                                          0080.000
TIME     EQU       $               TIME LOCATION                        0081.000
HOUR     REZ       1B              HOUR OF THE DAY                      0082.000
MINUTE   REZ       1B              MINUTE OF THE HOUR                   0083.000
SECOND   REZ       1B              SECOND OF THE MINUTE                 0084.000
TICK     REZ       1B              TICK WITHIN SECOND                   0085.000
         SPACE                                                          0086.000
*                                                                       0087.000
*  PURE DATA                                                            0088.000
*                                                                       0089.000
         SPACE                                                          0090.000
DAYSMNTH DATAB     31,29,31,30,31,30    JAN,FEB,MAR,APRIL,MAY,JUNE      0091.000
         DATAB     31,31,30,31,30,31    JULY,AUG,SEPT,OCT,NOV,DEC       0092.000
         TITLE     DATE/TIME PARSE ROUTINE                              0093.000
*+                                                                      0094.000
* SS.BTIME - STATE SUBEXPRESSION FOR BINARY TIME                        0095.000
*                                                                       0096.000
*    THIS STATE TABLE CONTROLS THE PARSE OF TIME INPUT FOR              0097.000
*    COMMAND LINE PURPOSES AND CONVERTS THE INPUT TO ITS                0098.000
*    BINARY TIME AS USED TO TIME STAMP FILES IN THE SYSTEM.             0099.000
*-                                                                      0100.000
         SPACE                                                          0101.000
         SPACE                                                          0102.000
         CSECT                                                          0103.000
         SPACE                                                          0104.000
SS.BTIME STATE                                                          0105.000
           TRAN    LAMBDA,A.INITIM           INITIALIZE THE TIME        0106.000
         STATE                                                          0107.000
           TRAN    SUBEXP,,SS.BT30,SS.NDATE  LOOK FOR NUMERIC DATE FORMA0108.000
           TRAN    SUBEXP,,SS.BT30,SS.SDATE  ELSE SYMBOLIC DATE FORMAT  0109.000
           TRAN    LAMBDA,,SS.BT40           LOOK FOR TIME              0110.000
SS.BT30  STATE                                                          0111.000
           TRAN    COMMA,,,,NOB.M            TIME FOLLOWING DATE 2003   0112.000
           TRAN    NOBLNK,A.TIMDON,EXIT      ELSE PROCESS DATE          0113.000
SS.BT40  STATE                                                          0114.000
           TRAN    SUBEXP,A.TIMDON,EXIT,SS.TIMOD,NOB.M       TOD 2003   0115.000
           TRAN    LAMBDA,A.TIMDON,EXIT,,NOB.M                          0116.000
         STATE                                                          0117.000
         SPACE                                                          0118.000
*+                                                                      0119.000
* SS.NDATE - STATE TABLE FOR NUMERIC DATE FORMAT, THAT IS:              0120.000
*                                                                       0121.000
*    PARSE DATE WITH THE FOLLOWING SYTAX:                               0122.000
*                                                                       0123.000
*        [M]M/[D]D[/[CC]YY                                              0124.000
*-                                                                      0125.000
         SPACE                                                          0126.000
SS.NDATE STATE                                                          0127.000
           TRAN    DNUMB,A.SAVNUM        SAVE NUMBER IN CASE ITS MOUNTH 0128.000
         STATE                                                          0129.000
           TRAN    G'/'                 THE SLASH MEANS NUMERIC DATE    0130.000
         STATE                                                          0131.000
           TRAN    DNUMB,A.NMONTH       SET NUMERIC DAY & MOUNTH        0132.000
         STATE                                                          0133.000
           TRAN    G'/',,,,EXT.M        GET SLASH FOR YEAR OR EXIT      0134.000
         STATE                                                          0135.000
           TRAN    DNUMB,A.YEAR,EXIT    AND THE YEAR VALUE              0136.000
         STATE                                                          0137.000
         SPACE                                                          0138.000
*+                                                                      0139.000
* SS.SDATE - SYMBOLIC DATE FORMAT                                       0140.000
*                                                                       0141.000
*  PARSE DATE IN DAY-MOUNTH-YEAR SYNTAX                                 0142.000
*                                                                       0143.000
*-                                                                      0144.000
         SPACE                                                          0145.000
SS.SDATE STATE                                                          0146.000
           TRAN    DNUMB,A.SAVNUM       GET DAY OF THE MOUNTH           0147.000
         STATE                                                          0148.000
           TRAN    G'-'                 GET HYPHEN                      0149.000
         STATE                                                          0150.000
           TRAN    KEYWD,A.SMONTH,,K.MOUNTH LOOK FOR MOUNTH NAME        0151.000
         STATE                                                          0152.000
           TRAN    G'-',,,,EXT.M        NEXT OPTIONAL HYPHEN            0153.000
         STATE                                                          0154.000
           TRAN    DNUMB,A.YEAR,EXIT    AND OPTIONAL YEAR               0155.000
         STATE                                                          0156.000
         SPACE                                                          0157.000
*+                                                                      0158.000
* K.MOUNTH - MOUNTH NAME KEYWORD TABLE                                  0159.000
*-                                                                      0160.000
         SPACE                                                          0161.000
K.MOUNTH KEYWRD    JANUARY,,,2,1   JANUARY                     ! 32B01  0162.000
         KEYWRD    FEBRUARY,,,2,2  FEBRUARY                    ! 32B01  0163.000
         KEYWRD    MARCH,,,3,3     MARCH                       ! 32B01  0164.000
         KEYWRD    APRIL,,,2,4     APRIL                       ! 32B01  0165.000
         KEYWRD    MAY_,,,3,5      MAY                         ! 32B01  0166.000
         KEYWRD    JUNE,,,3,6      JUNE                        ! 32B01  0167.000
         KEYWRD    JULY,,,3,7      JULY                        ! 32B01  0168.000
         KEYWRD    AUGUST,,,2,8    AUGUST                      ! 32B01  0169.000
         KEYWRD    SEPTEMBER,,,2,9 SEPTEMBER          85-1084  ! 32B01  0170.000
         KEYWRD    OCTOBER,,,2,10  OCTOBER                     ! 32B01  0171.000
         KEYWRD    NOVEMBER,,,2,11 NOVEMBER                    ! 32B01  0172.000
         KEYWRD    DECEMBER,,,2,12 DECEMBER                    ! 32B01  0173.000
         DATAW     0               END OF TABLE                         0174.000
         SPACE                                                          0175.000
*+                                                                      0176.000
* SS.TIMOD - TIME OF DAY PARSE STATE TABLE                              0177.000
*-                                                                      0178.000
         SPACE                                                          0179.000
SS.TIMOD STATE                                                          0180.000
           TRAN    DNUMB,A.HOUR         HOUR OF THE DAY                 0181.000
         STATE                                                          0182.000
           TRAN    G':',,,,EXT.M        GET COLON OR EXIT               0183.000
         STATE                                                          0184.000
           TRAN    DNUMB,A.MIN          GET MINUTE                      0185.000
         STATE                                                          0186.000
           TRAN    G':',,,,EXT.M        GET COLON OR EXIT               0187.000
         STATE                                                          0188.000
           TRAN    DNUMB,A.SEC,EXIT     FINALLY SECONDS                 0189.000
         STATE                                                          0190.000
         TITLE     DATE/TIME ACTION ROUTINES                            0191.000
*+                                                                      0192.000
* A.INITIM - INITIALIZE TIME VALUES TO DEFAULT                          0193.000
*                                                                       0194.000
*    SET DATE TO TODAY AND TIME TO MIDNIGHT                             0195.000
*-                                                                      0196.000
         SPACE                                                          0197.000
A.INITIM EQU       $                                                    0198.000
         PUSHSTP                   SAVE THE STACK POINTER               0199.000
         LA        R1,DATE     2W AREA TO PUT DATE & TIME               0200.000
         ORMW      R1,=X'02000000' GET BYTE BINARY DATE/TIME            0201.000
         SVC       2,X'50'         GET DATE & TIME                      0202.000
         POPSTP                    RESTORE THE STACK POINTER            0203.000
         ZMW       TIME            SET TIME TO MIDNIGHT                 0204.000
         ZMW       BIN.TIME+1W     SET THIS TO MIDNIGHT ALSO 2003       0205.000
         LI        R7,19           GET LOW VALUE FOR CENTURY            0206.000
         CAMB      R7,CENTURY      IS VALUE OK                          0207.000
         BLE       A.IT10          BR IF OK                             0208.000
         STB       R7,CENTURY      ELSE SET IT                          0209.000
A.IT10   TRSW      R0              BACK TO TPARSE                       0210.000
         SPACE                                                          0211.000
*+                                                                      0212.000
* A.SAVNUM - SAVE NUMERIC VALUE                                         0213.000
*                                                                       0214.000
*    THIS ROUTINE IS CALLED AS AN ACTION TO SAVE A CONVERTED            0215.000
*    NUMERIC VALUE UNTIL IT CAN BE DETERMINED WHETHER IT IS             0216.000
*    A MOUNTH OR DAY VALUE DEPENDING ON THE NEXT VALUE.                 0217.000
*-                                                                      0218.000
         SPACE                                                          0219.000
A.SAVNUM STW       R7,SAVENUMB     SAVE THE VALUE FOR LATER             0220.000
         TRSW      R0              BACK TO TPARSE                       0221.000
         SPACE                                                          0222.000
*+                                                                      0223.000
* A.YEAR - ACTION FOR YEAR INPUT                                        0224.000
*                                                                       0225.000
*    YEAR MAY BE SPECIFIED WITH OR WITHOUT THE CENTURY. IF CENTURY      0226.000
*    IS GIVEN, IT MUST BE 19 OR 20. THE BASE DATE IS 1-JAN-1960,        0227.000
*    THE BEGINNING OF THE QUADYEAR INWHICH SYSTEMS WAS FOUNDED.         0228.000
*-                                                                      0229.000
         SPACE                                                          0230.000
A.YEAR   ZR        R6              ZERO HI 1/2 FOR DIVIDE               0231.000
         DVI       R6,100          SEPARATE CENTURY FROM YEAR           0232.000
         TRR       R0,R3           COPY RETURN ADDRESS FOR LATER        0233.000
         XCR       R6,R7           WAS CENTURY GIVEN                    0234.000
         BEQ       A.YR10          BR IF NO                             0235.000
         STB       R6,CENTURY      SAVE CENTURY INPUT BY USER           0236.000
         CI        R6,19           IS IT LEGAL                          0237.000
         BLT       TIME.ERR        REPORT ERROR                         0238.000
         BGT       A.YR20          BR IF ABOVE THE BASE DATE            0239.000
A.YR10   CI        R7,60           IS YEAR ABOVE THE BASE?              0240.000
         BLT       TIME.ERR        BR IF NO                             0241.000
A.YR20   BL        CK.INPUT        CHECK YEAR FOR LIMIT                 0242.000
         DATAB     99,YEAR-DATE    MAX YEAR AND INDEX TO BYTE TO STORE  0243.000
         SPACE                                                          0244.000
*-                                                                      0245.000
* A.SMONTH - SYMBOLIC MOUNTH FORMAT                                     0246.000
*                                                                       0247.000
*    THIS ROUTINE IS CALLED WHEN A SYMBOLIC MOUNTH IS FOUND. UNTIL      0248.000
*    THIS TIME, IT WAS NOT CLEAR WHAT WE HAD. NOW THE VALUE IN          0249.000
*    SAVENUMB IS KNOW TO BE A DAY OF THE MOUNTH, SO IT CAN BE           0250.000
*    VALIDATED AND STORED.                                              0251.000
*    ALSO THE MOUNTH CAN BE HANDLED.                                    0252.000
*-                                                                      0253.000
         SPACE                                                          0254.000
A.SMONTH LW        R6,SAVENUMB     GET THE DAY OF MOUNTH                0255.000
         BU        A.MOUNTH        JOIN COMMON ROUTINE                  0256.000
         SPACE                                                          0257.000
*+                                                                      0258.000
* A.NMONTH - ACTION FOR NUMERIC MOUNTH FORMAT                           0259.000
*                                                                       0260.000
*    GET SAVED DAY NUMBER AND PROCESS DAY AND MOUNTH                    0261.000
*-                                                                      0262.000
         SPACE                                                          0263.000
A.NMONTH LW        R6,SAVENUMB     GET SAVED MOUNTH                     0264.000
         XCR       R6,R7           MOUNTH TO R7 AND DAY TO R6           0265.000
*                                  JOIN A.MOUNTH                        0266.000
         SPACE                                                          0267.000
*+                                                                      0268.000
* A.MOUNTH - ACTION FOR MOUNTH NUMBER                                   0269.000
*                                                                       0270.000
* INPUTS:                                                               0271.000
*                                                                       0272.000
*        R6 = DAY WITHIN MOUNTH                                         0273.000
*        R7 = MOUNTH WITHIN YEAR                                        0274.000
*                                                                       0275.000
* OUTPUTS:                                                              0276.000
*                                                                       0277.000
*     MOUNTH AND DAY VALUES ARE SET IN THE PROPER VALUES                0278.000
*-                                                                      0279.000
         SPACE                                                          0280.000
A.MOUNTH TRR       R7,R3           PUT MOUNTH NUMBER IN INDEX REG       0281.000
         CAMB      R6,DAYSMNTH-1,R3  IS DAY WITHIN LIMITS               0282.000
         BGT       TIME.ERR        BR IF OUT OF LIMITS                  0283.000
         STB       R6,DAY          SAVE THE DAY NUMBER                  0284.000
         TRR       R0,R3           COPY TPARSE RETURN ADDRESS           0285.000
         BL        CK.INPUT        VERIFY VALUE AND STORE               0286.000
         DATAB     12,MOUNTH-DATE  MAX VALUE AND INDEX TO BYTE          0287.000
         SPACE                                                          0288.000
*+                                                                      0289.000
* A.HOUR - ACTION FOR HOUR OF THE DAY                                   0290.000
*-                                                                      0291.000
         SPACE                                                          0292.000
A.HOUR   TRR       R0,R3           COPY RETURN ADDRESS                  0293.000
         BL        CK.INPUT        VERIFY AND STORE                     0294.000
         DATAB     23,HOUR-DATE    MAX VALUE AND INDEX TO STORE         0295.000
         SPACE                                                          0296.000
*+                                                                      0297.000
* A.MIN - ACTION FOR MINUTE OF THE HOUR                                 0298.000
*-                                                                      0299.000
         SPACE                                                          0300.000
A.MIN    TRR       R0,R3           COPY RETURN                          0301.000
         BL        CK.INPUT        VERIFY AND STORE                     0302.000
         DATAB     59,MINUTE-DATE  MAX VALUE AND INDEX                  0303.000
         SPACE                                                          0304.000
*+                                                                      0305.000
* A.SEC - ACTION ROUTINE FOR SECOND OF MINUTE                           0306.000
*-                                                                      0307.000
         SPACE                                                          0308.000
A.SEC    TRR       R0,R3           COPY RETURN                          0309.000
         BL        CK.INPUT        VERIFY AND STORE                     0310.000
         DATAB     59,SECOND-DATE  MAX VALUE AND INDEX                  0311.000
         SPACE                                                          0312.000
*+                                                                      0313.000
* A.PM - ACTION FOR "PM"                                                0314.000
*-                                                                      0315.000
         SPACE                                                          0316.000
A.PM     LI        R7,12           NUMBER OF HOURS OFFSET FOR PM        0317.000
         CAMB      R7,HOUR         CHECK FOR VALID RANGE                0318.000
         BLE       TIME.ERR         PARSE ERROR                         0319.000
         ARMB      R7,HOUR         UPDATE FOR PM                        0320.000
         TRSW      R0              BACK TO TPARSE                       0321.000
         SPACE                                                          0322.000
*+                                                                      0323.000
* CK.INPUT - CHECK INPUT FOR RANGE AND STORE                            0324.000
*                                                                       0325.000
*    THIS ROUTINE IS CALLED TO VALIDATE AND STORE  A VALUE FOR A        0326.000
*    DATE FIELD.                                                        0327.000
*                                                                       0328.000
* INPUTS:                                                               0329.000
*                                                                       0330.000
*        R0=ADDRESS OF 2 BYTES WITH MAX VALUE AND INDEX TO STORE        0331.000
*        R3=RETURN ADDRESS TO TPARSE                                    0332.000
*                                                                       0333.000
* OUTPUTS:                                                              0334.000
*                                                                       0335.000
*        THE VALUE IS CHECKED TO BE BETWEEN 1 AND THE VALUE INDICATED.  0336.000
*        IF VALID IT IS STORED AT THE INDEX SPECIFIED FROM THE START    0337.000
*        OF THE BYTE BINARY DATE ARRAY.                                 0338.000
*-                                                                      0339.000
         SPACE                                                          0340.000
CK.INPUT XCR       R0,R3           RETURN TO R0, ADDRESS TO INDEX REG   0341.000
         TRR       R7,R7           CHECK FOR NEGATIVE                   0342.000
         BLT       TIME.ERR         THAT IS NO GOOD                     0343.000
         CAMB      R7,0B,R3        CHECK AGAINST MAX                    0344.000
         BGT       TIME.ERR         BR IF NO GOOD                       0345.000
         LB        R3,1B,R3        GET INDEX TO STORE WITHIN DOUBLEWORD 0346.000
         STB       R7,DATE,R3      STORE THE VALUE                      0347.000
         TRSW      R0              BACK TO THE PARSER                   0348.000
         SPACE                                                          0349.000
*+                                                                      0350.000
* A.TIMDON - ACTION WHEN DATE/TIME ARE ALL DONE                         0351.000
*                                                                       0352.000
*    THIS ROUTINE IS CALLED WHEN DATE INPUT IS COMPLETE. THE DATE       0353.000
*    IS CONVERTED FROM THE BYTE BINARY FORMAT TO FILE SYSTEM            0354.000
*    STANDARD FORMAT.                                                   0355.000
*-                                                                      0356.000
         SPACE                                                          0357.000
A.TIMDON TRR       R0,R4           SAVE RETURN ADDRESS                  0358.000
         LD        R6,DATE         GET THE BYTE BINARY FORMAT           0359.000
         BL        BYBTOBIN        CONVERT BYTE BINARY TO BINARY        0360.000
         STD       R6,BIN.TIME     STORE RESULTS IN GLOBAL LOCATION     0361.000
         TRSW      R4              RETURN TO TPARSE                     0362.000
*+                                                                      0363.000
* TIME.ERR - ROUTNE TO SIGNAL AN ERROR IN PARSE SYNTAX                  0364.000
*-                                                                      0365.000
         SPACE                                                          0366.000
TIME.ERR SBR       R0,CC1          INDICATE PARSE ERROR                 0367.000
         TRSW      R0              RETURN TO TPARSE                     0368.000
         SPACE                                                          0369.000
         END                                                            0370.000
