*DECK DB$RIDI 
      FUNC DB$RIDI C(10); 
      BEGIN 
 #
* *   DB$RIDI - RESTART IDENTIFIER INITIALIZER   PAGE  1
* *   BOB MCALLESTER                             DATE  01/27/82 
* 
* DC  PURPOSE 
* 
*     COMPUTE A DATE/TIME DEPENDENT CHARACTER STRING TO BE USED 
*     AS THE INITIAL RESTART IDENTIFIER.
* 
* DC  ENTRY CONDITIONS
* 
*     NONE
* 
* DC  EXIT CONDITIONS 
* 
*     A FIVE CHARACTER ALPHABETIC STRING (AND FIVE BLANKS) IS RETURNED
*     AS THE FUNCTION VALUE.
* 
* DC  CALLING ROUTINES
* 
*     DB$TFIN                TRANSACTION FILE INITIALIZER 
* 
* DC  CALLED ROUTINES 
# 
      XREF PROC CLOCK;       # OBTAIN CURRENT DISPLAY CODED TIME       #
      XREF FUNC DB$CBIN I;   # CONVERT DISPLAY CODE TO INTEGER         #
      XREF PROC JDATE;       # OBTAIN SERIAL DATE FROM THE SYSTEM      #
# 
* DC  NON-LOCAL VARIABLES MODIFIED
* 
*     NONE
* 
* DC  DESCRIPTION 
* 
*     THE CURRENT DATE AND TIME ARE OBTAINED FROM THE OPERATING SYSTEM. 
*     THESE ARE USED TO COMPUTE A FIVE CHARACTER STRING.
*     THE STRING IS COMPOSED OF THE LETTERS OF THE ALPHABET.
*     IT RANGES BETWEEN AAAAA AND ZZZZZ INCREMENTING TO THE NEXT LETTER 
*     EACH SECOND.
*     THE OVERFLOW FROM ZZZZZ TO AAAAA OCCURS TWICE A YEAR ON 
*     MAY 17 AT 12.22.56 AND OCT 2 AT 00.45.52, OR ONE DAY EARLIER ON 
*     LEAP YEARS. 
 #
  
#     LOCAL VARIABLES                                                  #
  
      ITEM JULIAN I;         # OPERATING SYSTEM SERIAL DATE            #
      ITEM MODULO I;         # REMAINDER AFTER DIVISION                #
      ITEM NUM    I;         # SCRATCH WORD FOR COMPUTING ELAPSED SECS.#
      ITEM RID    I;         # RESTART IDENTIFIER                      #
      ITEM TIME   I;         # CURRENT TIME                            #
      ITEM XX     I;         # INDUCTION VARIABLE                      #
  
  
  
#     B E G I N   D B $ R I D I   E X E C U T A B L E   C O D E .      #
  
  
      JDATE(JULIAN);
      CLOCK(TIME);
  
#     COMPUTE THE NUMBER OF SECONDS ELAPSED IN THE YEAR, PLUS ONE DAY. #
#     (THE EXTRA DAY OCCURS SINCE JAN 1 IS DAY 001 INSTEAD OF 000.)    #
  
#                        H H . M M . S S .     REDUCE DIGITS TO BINARY #
      TIME = TIME - O"00333300333300333300";
  
      NUM = DB$CBIN(C<7,3>JULIAN,3,10);                    # DAYS      #
      NUM = 24 * NUM + 10 * B<06,6>TIME + B<12,6>TIME;     # HOURS     #
      NUM = 60 * NUM + 10 * B<24,6>TIME + B<30,6>TIME;     # MINUTES   #
      NUM = 60 * NUM + 10 * B<42,6>TIME + B<48,6>TIME;     # SECONDS   #
  
#     CONVERT THE NUMBER OF SECONDS TO A BASE 26 NUMBER.               #
  
      RID = 0;
      FOR XX = 1 STEP 1 UNTIL 5    # A FIVE DIGIT BASE 26 NUMBER       #
      DO
       BEGIN
       MODULO = NUM - NUM/26*26;   # REMAINDER OF 26                   #
       NUM = NUM/26;
       RID = RID / 2**6 + MODULO * 2**24; 
       END
  
#     INCREMENT FROM MODULO 26 TO DISPLAY CHARACTERS A THROUGH Z.      #
  
      RID = RID + O"101010101"; 
  
#     RETURN THE RESULTING STRING                                      #
  
      DB$RIDI = C<5,5>RID;
      END 
      TERM; 
