HP3000-L Archives

March 2006, Week 5

HP3000-L@RAVEN.UTC.EDU

Options: Use Monospaced Font
Show Text Part by Default
Show All Mail Headers

Message: [<< First] [< Prev] [Next >] [Last >>]
Topic: [<< First] [< Prev] [Next >] [Last >>]
Author: [<< First] [< Prev] [Next >] [Last >>]

Print Reply
Subject:
From:
Shawn Gordon <[log in to unmask]>
Reply To:
Shawn Gordon <[log in to unmask]>
Date:
Fri, 31 Mar 2006 13:16:46 -0800
Content-Type:
text/plain
Parts/Attachments:
text/plain (322 lines)
I wrote this cobol program years ago to fix problems I kept seeing 
with the hardware clock being out of sync with the software clock and 
that can cause all sorts of problems when switching your clock when 
DST comes and goes.  I also wrote a short command file to take care 
of the date change years ago, basically I had it in our MasterOp 
scheduler so it was all automatic, but you can just schedule it for 
Sundays and you're set (adjust the W#:## for your timezone offset).

!IF HPMONTH = 10 AND HPDATE > 24 THEN
!    ECHO We are going back to Standard Time
!    SETCLOCK TIMEZONE = W8:00
!ENDIF
!IF HPMONTH = 4 AND HPDATE < 8 THEN
!    ECHO Setting clock for Daylight Savings Time
!    SETCLOCK TIMEZONE = W7:00
!
!ENDIF

002000$CONTROL USLINIT, NOWARN, BOUNDS, POST85
003400 IDENTIFICATION DIVISION.
003500 PROGRAM-ID. CLOCKFIX.
003600 AUTHOR. Shawn M. Gordon.
003700 INSTALLATION. S.M.GORDON & ASSOCIATES.
003800 DATE-WRITTEN. FRI, APR 17, 1998.
003900*
004000************************************************************
004100* This program will check your system to see if you hardware
004200* and software clocks are out of sync.  If they are then
004300* we prompt for a few pieces of information.
004400*
004500* ----------- change history ---------------
004600*
004700* 1998/12/10 SMG - Added test for SM or OP cap, and gracefully
004800*                  terminate if it's not there.
004900************************************************************
005000*
005100 ENVIRONMENT DIVISION.
005200 CONFIGURATION SECTION.
005300 DATA DIVISION.
005400 WORKING-STORAGE SECTION.
005500
005600 01 ERR                PIC S9(4)   COMP VALUE 0.
005700 01 ERR-LEN            PIC S9(4)   COMP VALUE 0.
005800 01 ERR-PARM           PIC S9(4)   COMP VALUE 0.
005900 01 MSG-LEVEL          PIC S9(4)   COMP VALUE 0.
006000 01 CALC-TZ            PIC S9(1)   VALUE 0.
006100 01 HOLD-TZ            PIC 9       VALUE 0.
006200
006300 01 MY-TZ              PIC X(08)   VALUE SPACES.
006400 01 MY-INTERVAL        PIC X(08)   VALUE SPACES.
006500 01 MY-TIME            PIC X(06)   VALUE SPACES.
006600 01 MY-TIMEZONE.
006700    03 MYT-HEM         PIC X       VALUE SPACES.
006800    03 MYT-ZONE        PIC X(05)   VALUE SPACES.
006900 01 MY-BUFF            PIC X(80)   VALUE SPACES.
007000
007100
007200 01 WS-DST             PIC X       VALUE SPACES.
007300 01 WS-TZ              PIC X       VALUE SPACES.
007400 01 WS-GN              PIC X       VALUE SPACES.
007500 01 VAR-NAME           PIC X(40)   VALUE "TZ".
007600 01 VAR-STRING         PIC X(255)  VALUE SPACES.
007700*
007800 01 VAR-STATUS.
007900    03 VS-1            PIC S9(4)   COMP VALUE 0.
008000    03 VS-2            PIC S9(4)   COMP VALUE 0.
008100*
008200 01 COM-IMAGE.
008300    03 COMMAND-IMAGE   PIC X(255)  VALUE SPACES.
008400    03                 PIC X       VALUE %15.
008500 01 COMMAND-ERROR      PIC S9(4)   BINARY VALUE 0.
008600
008700 01 CAPS.
008800    03 CFULL             PIC S9(9)     COMP VALUE 0.
008900    03 CREDEF          REDEFINES CFULL.
009000       05 CWORD1         PIC S9(4)     COMP.
009100       05 CWORD2         PIC S9(4)     COMP.
009200
009300 01 NUMBYTES             PIC S9(4)     COMP VALUE 16.
009400 01 BYTEFUNC             PIC S9(4)     COMP VALUE 1.
009500 01 BYTERR               PIC S9(4)     COMP VALUE 0.
009600
009700 01 BYTEMAP.
009800    03                   PIC X         VALUE SPACE.
009900       88 SMCAP                        VALUE "1".
010000    03                   PIC X(04)     VALUE SPACES.
010100    03                   PIC X         VALUE SPACES.
010200       88 OPCAP                        VALUE "1".
010300    03                   PIC X(10)     VALUE SPACES.
010400
010500 01 FULL-CURRENT-DATE.
010600    03 F-DATE.
010700       05 F-YEAR       PIC 9(4).
010800       05 F-MONTH      PIC 99.
010900       05 F-DAY        PIC 99.
011000    03 F-TIME.
011100       05 F-HOUR       PIC 99.
011200       05 F-MINUTES    PIC 99.
011300       05 F-SECONDS    PIC 99.
011400       05 F-SEC-HUND   PIC 99.
011500    03 C-TIME-DIFF.
011600       05 C-GMT-DIR    PIC X.
011700       05 C-HOUR       PIC 99.
011800       05 C-MINUTES    PIC 99.
011900
012000 01 DATE-BUFF          PIC X(27)  VALUE SPACES.
012100 01 C-DATE             PIC X(08)  VALUE SPACES.
012200 01 C-TIME             PIC X(08)  VALUE SPACES.
012300 01 CURR-DATE          PIC X(10)  VALUE SPACES.
012400 01 HOLD-DATE          PIC X(06)  VALUE SPACES.
012500
012600 PROCEDURE DIVISION.
012700 A0000-MACROS.
012800$DEFINE %COMIMAGE=
012900      DISPLAY !1
013000        INITIALIZE COMMAND-IMAGE
013100        MOVE !1
013200               TO COMMAND-IMAGE
013300        CALL INTRINSIC 'HPCICOMMAND' USING COM-IMAGE,
013400                                       COMMAND-ERROR,
013500                                       ERR-PARM,
013600                                       MSG-LEVEL#
013700*
013800
013900 A1000-INTRO.
014000     CALL INTRINSIC "WHO" USING \\, CFULL.
014100     CALL "BITMAPCNV" USING CWORD1, @BYTEMAP, NUMBYTES,
014200                            BYTEFUNC, BYTERR.
014300     IF BYTERR <> 0
014400        DISPLAY 'Failure in BITMAPCNV ' BYTERR.
014500     IF SMCAP OR OPCAP
014600        GO TO A1000-BEGIN.
014700
014800     DISPLAY 'Must have SM or OP capability.'
014900     STOP RUN.
015000
015100 A1000-BEGIN.
015200* retrieve all the dates in all the formats.
015300     MOVE FUNCTION CURRENT-DATE TO FULL-CURRENT-DATE.
015400     DISPLAY 'Current offset from GMT: ' C-GMT-DIR C-HOUR ":"
015500             C-MINUTES.
015600     MOVE CURRENT-DATE    TO CURR-DATE.
015700     ACCEPT C-DATE FROM DATE.
015800     CALL INTRINSIC 'DATELINE' USING DATE-BUFF.
015900     ACCEPT C-TIME FROM TIME.
016000
016100* format the century into the applicable dates.
016200     MOVE C-DATE          TO HOLD-DATE.
016300     MOVE CURR-DATE(7:2)  TO CURR-DATE(9:2).
016400     MOVE DATE-BUFF(14:2) TO C-DATE(1:2)
016500                             CURR-DATE(7:2).
016600     MOVE HOLD-DATE       TO C-DATE(3:).
016700
016800* get the TZ variable.
016900     CALL INTRINSIC "HPCIGETVAR" USING VAR-NAME, VAR-STATUS,
017000                                       2, VAR-STRING,
017100                                       0.
017200     IF VS-1 = -8106 OR VAR-STRING = SPACES
017300        DISPLAY SPACES
017400        DISPLAY 'No TZ variable is set, I will '
017500                'show you the correct value,'
017600        DISPLAY 'after you answer some questions.'
017700        DISPLAY SPACES
017800        GO TO A1000-TEST
017900     ELSE
018000        DISPLAY 'Current value of TZ var: ' VAR-STRING(1:16).
018100
018200* if the date and time match then there is nothing to do.
018300     IF (F-TIME(1:4) = C-TIME(1:4)) AND (F-DATE = C-DATE)
018400        DISPLAY 'Your hardware clock is properly set'.
018500        STOP RUN.
018600
018700 A1000-TEST.
018800     IF F-TIME(1:4) <> C-TIME(1:4)
018900        DISPLAY 'WARNING: '
019000                "Hardware clock doesn't match the software clock"
019100        DISPLAY 'Hardware clock = ' F-HOUR ":" F-MINUTES
019200        DISPLAY 'Software clock = ' C-TIME(1:2) ":" C-TIME(3:2)
019300        DISPLAY SPACES.
019400
019500     IF F-DATE <> C-DATE
019600        DISPLAY "WARNING: Hardware date doesn't match the "
019700                'software date'
019800        DISPLAY 'Hardware date = ' F-DATE
019900        DISPLAY 'Software date = ' C-DATE
020000        DISPLAY SPACES.
020100
020200     DISPLAY 'Is it currently Daylight Savings Time? '
020300             NO ADVANCING.
020400     ACCEPT WS-DST FREE.
020500
020600     DISPLAY 'Please select one of the following as your '
020700             'TimeZone'.
020800 A1000-TZ.
020900     DISPLAY SPACES.
021000     DISPLAY '1.  Eastern European Time (EET-2DST)'.
021100     DISPLAY '2.  Middle European Time  (MET-1DST)'.
021200     DISPLAY '3.  Western European Time (GMT0BST)'.
021300     DISPLAY '4.  Atlantic Time (AST4ADT)'.
021400     DISPLAY '5.  Eastern Time  (EST5EDT)'.
021500     DISPLAY '6.  Central Time  (CST6CDT)'.
021600     DISPLAY '7.  Mountain Time (MST7MDT)'.
021700     DISPLAY '8.  Pacific Time  (PST8PDT)'.
021800     DISPLAY '9.  Yukon Time    (YST9YDT)'.
021900     DISPLAY SPACES.
022000     DISPLAY '    Enter Option: ' NO ADVANCING.
022100     ACCEPT WS-TZ FREE.
022200     EVALUATE WS-TZ
022300        WHEN '1' MOVE 'EET-2DST'  TO MY-TZ
022400        WHEN '2' MOVE 'MET-1DST'  TO MY-TZ
022500        WHEN '3' MOVE 'GMT0BST'   TO MY-TZ
022600        WHEN '4' MOVE 'AST4ADT'   TO MY-TZ
022700        WHEN '5' MOVE 'EST5EDT'   TO MY-TZ
022800        WHEN '6' MOVE 'CST6CDT'   TO MY-TZ
022900        WHEN '7' MOVE 'MST7MDT'   TO MY-TZ
023000        WHEN '8' MOVE 'PST8PDT'   TO MY-TZ
023100        WHEN '9' MOVE 'YST9YDT'   TO MY-TZ
023200        WHEN ' ' GO TO C9000-EOJ
023300        WHEN OTHER DISPLAY 'Invalid value' GO TO A1000-TZ
023400     END-EVALUATE.
023500
023600     DISPLAY SPACES.
023700     DISPLAY 'I am now ready to fix your hardware clock.'.
023800     DISPLAY 'Choose one of the following options'.
023900     DISPLAY '1. Gradually change the time over an hour'.
024000     DISPLAY '2. Change the time immediately.
024100     DISPLAY SPACES.
024200     DISPLAY '   Enter Option: ' NO ADVANCING.
024300     ACCEPT WS-GN FREE.
024400     IF WS-GN = '2'
024500        MOVE 'NOW'               TO MY-INTERVAL
024600     ELSE
024700        MOVE 'GRADUAL'           TO MY-INTERVAL.
024800
024900     PERFORM B1000-DO-IT       THRU B1000-EXIT.
025000     PERFORM B2000-SHOW-TZ     THRU B2000-EXIT.
025100     GO TO C9000-EOJ.
025200 A1000-EXIT.  EXIT.
025300*
025400 B1000-DO-IT.
025500     MOVE CURRENT-DATE    TO CURR-DATE.
025600     MOVE CURR-DATE(7:2)  TO CURR-DATE(9:2).
025700     CALL INTRINSIC 'DATELINE' USING DATE-BUFF.
025800     MOVE DATE-BUFF(14:2) TO CURR-DATE(7:2).
025900     MOVE TIME-OF-DAY     TO C-TIME.
026000     MOVE SPACES          TO MY-TIME.
026100     STRING C-TIME(1:2) ":" C-TIME(3:2)
026200            DELIMITED BY SIZE INTO MY-TIME.
026300
026400* Fix the timezone first - construct the offset by calculating
026500* the dst value first, and putting the right hemisphere in it
026600     IF MY-TZ(4:1) IS NUMERIC
026700        MOVE MY-TZ(4:1)   TO CALC-TZ.
026800     IF MY-TZ(5:1) IS NUMERIC
026900        MOVE MY-TZ(5:1)   TO CALC-TZ
027000        MULTIPLY -1 BY CALC-TZ.
027100
027200     MOVE SPACES          TO MY-TIMEZONE
027300     IF CALC-TZ < 0
027400        MOVE 'E'          TO MYT-HEM
027500     ELSE
027600        MOVE 'W'          TO MYT-HEM.
027700
027800     IF WS-DST = 'Y' OR 'y'
027900        SUBTRACT 1 FROM CALC-TZ.
028000
028100     MOVE CALC-TZ         TO HOLD-TZ.
028200     IF MYT-HEM = 'E'
028300        STRING "-" HOLD-TZ ":00" DELIMITED BY SIZE
028400               INTO MYT-ZONE.
028500     IF MYT-HEM = 'W'
028600        STRING HOLD-TZ ":00" DELIMITED BY SIZE
028700               INTO MYT-ZONE.
028800
028900     MOVE SPACES          TO MY-BUFF.
029000     STRING "SETCLOCK TIMEZONE=" DELIMITED BY SIZE
029100            MY-TIMEZONE DELIMITED BY SPACES
029200       INTO MY-BUFF.
029300     %COMIMAGE(MY-BUFF#).
029400
029500* Cancel the change to get an immediate timezone impact.
029600     %COMIMAGE("SETCLOCK;CANCEL"#).
029700
029800* Now set the correct date and time values.
029900     STRING "SETCLOCK DATE="
030000            CURR-DATE
030100            ";TIME="
030200            MY-TIME
030300            ";"
030400            MY-INTERVAL DELIMITED BY SIZE
030500       INTO MY-BUFF.
030600     %COMIMAGE(MY-BUFF#).
030700
030800 B1000-EXIT.  EXIT.
030900*
031000 B2000-SHOW-TZ.
031100     DISPLAY SPACES.
031200     DISPLAY 'You will want to set up the following command '
031300             'as a system logon UDC;'.
031400     DISPLAY 'SETVAR TZ,"' MY-TZ '"'.
031500     DISPLAY SPACES.
031600 B2000-EXIT.  EXIT.
031700
031800 C9000-EOJ.
031900     DISPLAY 'Normal termination at ' TIME-OF-DAY.
032000     STOP RUN.




Regards,

Shawn Gordon
President
theKompany.com
www.thekompany.com
www.mindawn.com
949-713-3276

* To join/leave the list, search archives, change list settings, *
* etc., please visit http://raven.utc.edu/archives/hp3000-l.html *

ATOM RSS1 RSS2