*DATE & TIME PARSING ROUTINES                           HEADER  FUPTIM  0001.000
         M.PGM     TIMESUBR,MPX-32,3.6.1,00                             0002.000
         SPACE                                                          0003.000
         CSECT                                                          0004.000
         SPACE                                                          0005.000
*                                                                       0006.000
************************************************************************0007.000
*                                                                      *0008.000
*                    PROPRIETARY INFORMATION                           *0009.000
*                    -----------------------                           *0010.000
*   THE INFORMATION CONTAINED HEREIN IS PROPRIETARY TO ENCORE          *0011.000
*   COMPUTER CORPORATION AND/OR ITS VENDORS, AND ITS USE, DISCLOSURE,  *0012.000
*   OR DUPLICATION IS SUBJECT TO THE RESTRICTIONS STATED IN THE        *0013.000
*   STANDARD ENCORE COMPUTER CORPORATION LICENSE TERMS AND CONDITIONS  *0014.000
*   OR THE APPROPRIATE THIRD-PARTY SUBLICENSE AGREEMENT.               *0015.000
*                                                                      *0016.000
*                       RESTRICTED RIGHTS                              *0017.000
*                       -----------------                              *0018.000
*   USE, DUPLICATION, OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT       *0019.000
*   TO RESTRICTIONS AS SET FOURTH IN SUBDIVISION (c) (1) (ii) OF       *0020.000
*   THE RIGHTS IN TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT       *0021.000
*   252.227.7013                                                       *0022.000
************************************************************************0023.000
* (C) COPYRIGHT 1989 ENCORE COMPUTER CORPORATION                       *0024.000
*     ALL RIGHTS RESERVED                                              *0025.000
************************************************************************0026.000
*-                                                                      0027.000
*+                                                                      0028.000
*        FUNCTIONAL DESCRIPTION                                         0029.000
*                                                                       0030.000
*    THIS MODULE CONTAINS THE ROUTINES TO PERFORM CONVERSION OF         0031.000
*    OF TIME BETWEEN THE VARIOUS FORMATS. BYTE BINARY IS A              0032.000
*    DOUBLEWORD CONTAINING BYTES FOR CENTURY,YEAR,MOUNTH,DAY            0033.000
*    IN THE FIRST WORD AND HOUR, MINUTE, SECOND, AND TICK IN            0034.000
*    THE SECOND WORD. THIS FORMAT CAN BE CONVERTED TO BINARY            0035.000
*    TIME WHICH IS A DOUBLEWORD CONTAINING A WORD OF DATE AND           0036.000
*    A WORD OF TIME. DATE IS THE NUMBER OF DAYS STARTING WITH           0037.000
*    THE FIRST OF JANUARY, 1960. TIME IS THE COUNT OF 100               0038.000
*    MICRO-SECONDS SINCE MIDNIGHT. CONVERSION IN THE OTHER              0039.000
*    DIRECTION CAN BE PERFORMED AS WELL.                                0040.000
*-                                                                      0041.000
*+                                                                      0042.000
*        ENVIRONMENT                                                    0043.000
*                                                                       0044.000
*    THIS ROUTINE IS UNPRIVILEGED SOFTWARE OPERATING IN THE             0045.000
*    CONTEXT OF THE CALLING PROGRAM.                                    0046.000
*-                                                                      0047.000
*                                                                       0048.000
*    EXTERNAL REFERENCES:                                               0049.000
*                                                                       0050.000
         SPACE                                                          0051.000
*                                                                       0052.000
*    EXTERNAL DEFINITIONS                                               0053.000
*                                                                       0054.000
         SPACE                                                          0055.000
         DEF       BYBTOBIN        CONVERT BYYTE BINARY TO BINARY       0056.000
         DEF       BINTOBYB        BINARYY TO BYTE BINARY TIME          0057.000
         SPACE                                                          0058.000
*                                                                       0059.000
*    SYSTEM MACRO CALLS FOR DEFINITIONS AND EQUATES                     0060.000
*                                                                       0061.000
         SPACE                                                          0062.000
         M.REQS                    REGISTER EQUATES                     0063.000
         SPACE                                                          0064.000
*                                                                       0065.000
*    LOCAL DEFINITIONS                                                  0066.000
*                                                                       0067.000
*        THIS MODULE HAS NO LOCAL DATA AT THIS TIME.  ALL LOCATIONS ARE 0068.000
*        INCLUDED IN THE CSECT.  IF OCAL DATA IS NEEDED, THE USER MUST  0069.000
*        TAKE CARE THAT IT IS PLACED IN AN AREA OF DSECT.               0070.000
*                                                                       0071.000
*                                                                       0072.000
*    LOCAL STORAGE                                                      0073.000
*                                                                       0074.000
         SPACE                                                          0075.000
DAYSMNTH DATAB     31,28,31,30,31,30    JAN THRU JUNE                   0076.000
         DATAB     31,31,30,31,30,31    JULY THRU DEC                   0077.000
         SPACE                                                          0078.000
*+                                                                      0079.000
* BYBTOBIN - CONVERT BYTE BINARY TIME TO BINARY                         0080.000
*                                                                       0081.000
*    THIS ROUTINE IS CALLED WITH TIME IN THE BYTE BINARY FORMAT         0082.000
*    AND CONVERTS THE RESULT TO FILE SYSTEM BINARY, THAT IS:            0083.000
*    A DOUBLE WORD WITH THE FIRST WORD THE COUNT OF DAYS STARTING       0084.000
*    AT 1-JAN-60, THE BEGINNING OF THE QUADYEAR INWHICH SYSTEMS WAS     0085.000
*    FOUNDED. THE SECOND WORD IS THE COUNT IN 100 MICROSECONDS          0086.000
*    SINCE MIDNIGHT. NOTE THAT IN CONVERTING THE CENTURY, NO            0087.000
*    ADJUSTMENT IS MADE FOR 19. ADDING 10*1461 IS NECESSARY FOR         0088.000
*    20, THAT IS THE NUMBER OF DAYS FOR INCLUDED IN 1960. FOR           0089.000
*    21 AND BEYOND, 25*1461 IS ADDED. THE CONVERSION IS BASE            0090.000
*    ON A QUADYEAR INTERVAL WHICH CONTAINS 3 365 DAY AND 1 366          0091.000
*    DAY YEARS OR 1461 DAYS IN ANY QUADYEAR. THIS IS TRUE EXPCEPT       0092.000
*    FOR QUADYEARS THAT ARE CENTURYS WHICH ARE NOT EVEN MULTIPLES       0093.000
*    OF 1000, THAT IS 2100. THIS ROUTINE WILL NOT WORK CORRECTLY        0094.000
*    BEYOND 28-FEB-2100 SINCE THERE IS NO LEAP YEAR THAT YEAR.          0095.000
*                                                                       0096.000
* INPUTS:                                                               0097.000
*                                                                       0098.000
*        R1=STACK ADDRESS FOR REGISTER SAVE                             0099.000
*        R6=DATE IN BYTE BINARY FORMAT                                  0100.000
*        R7=TIME IN BYTE BINARY FORMAT                                  0101.000
*                                                                       0102.000
* OUTPUTS:                                                              0103.000
*                                                                       0104.000
*        R6=DATE IN FILE SYSTEM BINARY FORMAT                           0105.000
*        R7=TIME LIKEWISE                                               0106.000
*                                                                       0107.000
* SIDE EFFECTS:                                                         0108.000
*                                                                       0109.000
*        ALL OTHER REGISTER PRESERVED                                   0110.000
*-                                                                      0111.000
         SPACE                                                          0112.000
         BOUND     1W              ALIGN TO NICE BOUNDRY                0113.000
BYBTOBIN EQU       $               CONVERT BYTE BINARY TIME TO BINARY   0114.000
         SUI       R1,1F           ALLOCATE STACK FRAME                 0115.000
         STF       R0,0F,R1        SAVE REGISTERS                       0116.000
         ABM       26,1W,R1        RESTORE SAVED R1 TO ORIGINAL VALUE   0117.000
         LB        R7,6W+1B,R1     GET NUMBER OF YEARS WITHIN CENTURY   0118.000
         ZR        R5              INITIALIZE ACCUMULATOR               0119.000
         SRL       R6,24           ISOLATE CENTURY                      0120.000
         SUI       R6,20           ADJUST CENTURY FOR BASE YEAR         0121.000
         BLT       CBY.20          BR IF 19                             0122.000
         BEQ       CBY.10          BR HERE IF 20                        0123.000
         TRR       R6,R5           GET NUMBER OF CENTURIES OVER 20      0124.000
         MPMW      R4,=365*100+25  NUMBER OF DAYS IN A CENTURY          0125.000
CBY.10   ADI       R5,365*40+10    DAYS SINCE 1-JAN-60 TO 2000          0126.000
         BU        CBY.30          JOIN COMMON CODE                     0127.000
CBY.20   SUI       R7,60           ADJUST YEAR IN 19XX FOR BASE YEAR    0128.000
CBY.30   ZR        R6              SET FOR DIVIDE                       0129.000
         DVI       R6,4            FIND NUMBER OF QUADYEARS             0130.000
         TRR       R6,R4           SAVE REMAINDER                       0131.000
         MPI       R6,365*4+1      NUMBER OF DAYS IN QUADYEAR           0132.000
         ADR       R7,R5           ADD INTO ACCUMULATOR                 0133.000
         TRR       R4,R7           RESET REMIANDER YEAR                 0134.000
         BEQ       CBY.50          BR IF EVEN QUADYEAR COUNT            0135.000
         MPI       R6,365          NUMBER OF DAYS IN YEAR               0136.000
         ABR       R7,31           ADJUST FOR ONE LEAP YEAR             0137.000
         ADR       R7,R5           ADD DAYS TO ACCUMULATOR              0138.000
CBY.50   LB        R4,6W+2B,R1     GET MOUNTH NUMBER                    0139.000
         LA        R3,DAYSMNTH     POINT AT DAYS PER MOUNTH ARRAY       0140.000
         TBM       07,6W+1B,R1     CHECK FOR EVEN YEAR                  0141.000
         BS        CBY.60          BR IF NOT EVEN, CAN'T BE LEAP YEAR   0142.000
         TBM       06,6W+1B,R1     NOW CHECK FOR MODULO 4               0143.000
         BS        CBY.60          BR IF NOT A LEAP YEAR                0144.000
         CI        R4,2            IS MOUNTH FEB OR GREATER             0145.000
         BLE       CBY.60          BR IF NO ADJUSTMENT NEEDED           0146.000
         ADI       R5,1            ADJUST FOR LEAPYEAR THIS YEAR        0147.000
CBY.60   SUI       R4,1            COUNT DOWN NUMBER OF MOUNTHS         0148.000
         BLE       CBY.70          BR WHEN ALL DONE                     0149.000
         ADMB      R5,0B,R3        ADD MOUNTHS WORTH OF DAYS            0150.000
         ABR       R3,31           INCREMENT BYTE ADDRESS               0151.000
         BU        CBY.60          CHECK FOR MORE                       0152.000
CBY.70   ADMB      R5,6W+3B,R1     ADD IN COUNT OF DAYS PER MOUNTH      0153.000
         SUI       R5,1            ADJ DAY TO 0 RELATIVE                0154.000
         STW       R5,6W,R1        SET DAY COUNT INTO SAVED REGISTER 6  0155.000
         LB        R7,7W,R1        PICKUP HOUR COUNT                    0156.000
         MPI       R6,60           CONVERT TO MINUTES                   0157.000
         ADMB      R7,7W+1B,R1     ADD IN MINUTES                       0158.000
         MPI       R6,60           CONVERT TO SECONDS                   0159.000
         ADMB      R7,7W+2B,R1     ADD IN THE SECONDS                   0160.000
         MPI       R6,10000        CONVERT TO 100 MICROSECONDS          0161.000
         STW       R7,7W,R1        SET INTO SAVED R7                    0162.000
         LF        R0,0F,R1        RELOAD REGISTERS                     0163.000
         TRSW      R0                                                   0164.000
         SPACE                                                          0165.000
*+                                                                      0166.000
* BINTOBYB - CONVERT BINARY TIME TO BYTE BINARY                         0167.000
*                                                                       0168.000
*    THIS ROUTINE IS CALLED WITH TIME IN THE BINARY FORMAT              0169.000
*    AND CONVERTS THE RESULT TO BYTE BINARY.                            0170.000
*                                                                       0171.000
* INPUTS:                                                               0172.000
*                                                                       0173.000
*        R1=STACK ADDRESS FOR REGISTER SAVE                             0174.000
*        R6=DATE IN BINARY FORMAT                                       0175.000
*        R7=TIME IN BINARY FORMAT                                       0176.000
*                                                                       0177.000
* OUTPUTS:                                                              0178.000
*                                                                       0179.000
*        R6=DATE IN BYTE BINARY FORMAT                                  0180.000
*        R7=TIME LIKEWISE                                               0181.000
*                                                                       0182.000
* SIDE EFFECTS:                                                         0183.000
*                                                                       0184.000
*        ALL OTHER REGISTER PRESERVED                                   0185.000
*-                                                                      0186.000
         SPACE                                                          0187.000
BINTOBYB SUI       R1,1F           MAKE ROOM IN STACK                   0188.000
         STF       R0,0W,R1        SAVE REGISTERS                       0189.000
         ABM       26,1W,R1        FIX UP SAVED R1 TO OLD VALUE         0190.000
         TRR       R6,R7           COPY DAYS SINCE 1-JAN-60             0191.000
         ZR        R6              ZERO HI WORD FOR DIVIDE              0192.000
         DVI       R6,365*4+1      FIND NUMBER OF QUADYEARS             0193.000
         SLL       R7,2            MULTIPLY TIMES 4                     0194.000
         TRR       R7,R4           SAVE YEAR COUNT SO FAR               0195.000
         TRR       R6,R7           SET NUMBER OF DAYS IN QUADYEAR       0196.000
         ZR        R6              SET FOR DIVIDE                       0197.000
         CI        R7,31+29-1      CHECK AGAINST LEAPDAY                0198.000
         BGT       CBI.10          BR IF PAST LEAPDAY                   0199.000
         BLT       CBI.20          BR IF BEFORE LEAPDAY                 0200.000
         LI        R5,2            SET MOUNTH FOR LEAPDAY               0201.000
         LI        R6,29-1         AND ZERO RELATIVE DAY FOR LEAPDAY    0202.000
         BU        CBI.50          ALL DONE                             0203.000
CBI.10   SUI       R7,1            ADJUST FOR EXTRA DAY IN YEAR         0204.000
CBI.20   DVI       R6,365          FIND NUMBER OF YEARS AND DAYS        0205.000
         ADR       R7,R4           ADD IN NUMBER OF YEARS               0206.000
         LA        R3,DAYSMNTH     GET NUMBER IF DAYS PER MOUNTH ARRAY  0207.000
         ZR        R5              STARTING MOUNTH                      0208.000
CBI.30   ABR       R5,31           INCREMENT MOUNTH BY ONE              0209.000
         CAMB      R6,0B,R3        DID WE FIND THE MOUNTH               0210.000
         BLT       CBI.50          BR WHEN FOUND                        0211.000
         SUMB      R6,0B,R3        SUBRTRACT ONE MOUNTHS WORTH          0212.000
         ADI       R3,1            POINT AT NEXT MOUNTH                 0213.000
         BU        CBI.30          MOUNTH CHECK                         0214.000
         SPACE                                                          0215.000
*                                                                       0216.000
*    AT THIS POINT R4=TOTAL YEARS                                       0217.000
*                  R5=MOUNTH NUMBER                                     0218.000
*                  R6=DAY OF MOUNTH                                     0219.000
*                                                                       0220.000
         SPACE                                                          0221.000
CBI.50   ADI       R6,1            ADJ DAY OF MOUNTH TO 1 RELATIVE      0222.000
         STB       R6,6W+3B,R1     SET DAY OF THE MOUNTH                0223.000
         STB       R5,6W+2B,R1     AND MOUNTH OF THE YEAR               0224.000
         LI        R7,19           GET BASE CENTURY VALUE               0225.000
         STB       R7,6W+0B,R1     SET INTO RESULT LOACTION             0226.000
         ADI       R4,60           ADJUST YEAR TO 1900                  0227.000
CBI.60   CI        R4,100          CENTURY WORTH OF YEARS               0228.000
         BLT       CBI.70          BR IF NO - ALL SET                   0229.000
         SUI       R4,100          REMOVE ONE CENTURY                   0230.000
         ABM       07,6W+0B,R1     ADD TO THE CENTURY                   0231.000
         BU        CBI.60          TRY AGAIN                            0232.000
CBI.70   STB       R4,6W+1B,R1     SET YEAR WITHIN CENTURY              0233.000
         LW        R7,7W,R1        GET BINARY TIME OF DAY               0234.000
         ZMW       7W,R1           INIT RETURNED VALUE TO ZERO          0235.000
         ZR        R6              ZERO FOR DIVIDE                      0236.000
         DVI       R6,10000        CONVERT TO SECONDS                   0237.000
         SPACE                                                          0238.000
*                                                                       0239.000
*    R6 = COUNT OF 10000'S OF SECONDS - NOT USED NOW                    0240.000
*                                                                       0241.000
         SPACE                                                          0242.000
         ZR        R6              SET FOR DIVIDE                       0243.000
         DVI       R6,60           SEPARATE SECONDS FROM MINUTES        0244.000
         STB       R6,7W+2B,R1     SECONDS                              0245.000
         ZR        R6              FOR DIVIDE                           0246.000
         DVI       R6,60           SEPARATE HOURS AND MINUTES           0247.000
         STB       R6,7W+1B,R1     SET MINUTES                          0248.000
         STB       R7,7W+0B,R1     AND HOURS                            0249.000
         LF        R0,0W,R1        RESTORE REGISTER                     0250.000
         TRSW      R0              BACK TO CALLER                       0251.000
         SPACE                                                          0252.000
         END                                                            0253.000
