Many MPE/iX operating system procedures and intrinsic functions rely on the
CALENDAR Intrinsic and the internal binary format of the CALENDAR date argument
return. The CALENDAR intrinsic returns a 16 bit value, allowing 9 bits for day
of year and 7 bits for the year. The base year is presumed to be 1900, limiting
the maximum year to 2027 since the largest number represented by 7 bits is 127.
Several different MPE/iX Intrinsic functions (such as but not limited to:
FMTCALENDAR, HPFMTCALENDAR, ALMANAC, and DATELINE) extract the CALENDAR
returned value and subsequently format the year based on 1900.
CALENDAR
NM and CM callable.
Returns the calendar date, including the day of year and the year
since 1900.
Syntax
U16
date := CALENDAR;
Functional Returndate16-bit unsigned integer (assigned functional return)
Returns the calendar date in the following format:
Bits Value/Meaning
7:9 Day of year
0:7 Year since 1900
Binary 9 bits: 111111111 = 511 Maximum value.
Enough for up to 366 days in a year
Binary 7 bits: 1111111 = 127 Maximum value.
Allows for year 1900 + 127 = 2027
Solution
Patches developed by Beechglen address this issue by altering the base year to
2028 for CALENDAR year return values < 10. This effectively extends the
CALENDAR range to 12/31/2037. Beyond 1/13/2038 would require more extensive
patching as the internal hardware and software time is kept as the number of
seconds since 00:00:00 1/1/1970.
Application Considerations
Each system applying these patches should be evaluated for customer and third
party code that calls the CALENDAR intrinsic directly. For example, MANMAN
calls CALENDAR to calculate an internal date. This instance was easily patched
and integrated into the MANMAN application. In other applications, the object
and source code that calls CALENDAR will need simple modifications.
Native Mode Programs (NMPRG) can be examined for NM CALENDAR CALLS using the
LINKEDIT LISTPROG command. Compatibility Mode programs (PROG) can be examined
using the LISTPROG utility. At the time of this publication Beechglen is in the
process of evaluating third party applications on a case-by case basis. A
vendor compatibility matrix can be found in Chapter 3 of this document. Thus
far, Adager has been certified to function normally to 12/31/2037.
Who Should Consider Applying 2028 Patches?
Anyone who plans to run their HP3000 system beyond
12/31/2027
Anyone using future dates in applications. Examples include shop
floor calendars and patient scheduling.
Expiration dates for labeled tapes are kept in CALENDAR format and
already are already exhibiting problems for customers with 10 year
retention dates on tapes.
NOTE: The Year >2027 patches have been developed as enhancements
under the Beechglen Development Inc. MPE/iX Source Code Agreement with
Hewlett-Packard. As provided in this agreement, these patches can only be
provided as enhancements to MPE/iX systems covered under a support agreement
from Beechglen Development Inc.
Illustration of a Beechglen patched MPE System
System START
ISL> start norecovery
MPE/iX launch facility
...
DATE (M/D/Y)? 12/13/2028
TIME (H:M:S)? 13:37
*******************************
Year > 2027 Patches Copyright
Beechglen Development Inc. 2017
All Rights Reserved
WWW.BEECHGLEN.COM
*******************************
WED, DEC 13, 2028, 1:37:00 PM (y/n)? y
:SETCLOCK/:SHOWCLOCK
:setclock date=12/31/2037;time=23:30;now
Year>2027 Patches Copyright
Beechglen Development Inc. 2017
All Rights Reserved www.Beechglen.com
:showclock
SYSTEM TIME: THU, DEC 31, 2037, 11:30:12 PM
CURRENT TIME CORRECTION: 0 SECONDS
TIME ZONE: 5 HOURS 0 MINUTES WESTERN HEMISPHERE
:LISTF,3
:listf purgeme,3
FILE: PURGEME.Y2028.SYS
FILE CODE : 0 FOPTIONS: BINARY,FIXED,NOCCTL,STD
BLK FACTOR: 1 CREATOR : **
REC SIZE: 256(BYTES) LOCKWORD: **
BLK SIZE: 256(BYTES) SECURITY--READ : ANY
EXT SIZE: 0(SECT) WRITE : ANY
NUM REC: 0 APPEND : ANY
NUM SEC: 0 LOCK : ANY
NUM EXT: 0 EXECUTE : ANY
MAX REC: 1023 **SECURITY IS ON
FLAGS : NO ACCESSORS
NUM LABELS: 0 CREATED : WED, DEC 13, 2028, 1:53 PM
MAX LABELS: 0 MODIFIED: WED, DEC 13, 2028, 1:53 PM
DISC DEV #: 2 ACCESSED: WED, DEC 13, 2028, 1:53 PM
SEC OFFSET: 0 LABEL ADDR: **
VOLCLASS : MPEXL_SYSTEM_VOLUME_SET:DISC