DataMuseum.dk

Presents historical artifacts from the history of:

RC4000/8000/9000

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about RC4000/8000/9000

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦6c1dce992⟧ TextFile

    Length: 3840 (0xf00)
    Types: TextFile
    Names: »tstartdate«

Derivation

└─⟦667bb35d6⟧ Bits:30007480 RC8000 Dump tape fra HCØ.
    └─⟦4334b4c0b⟧ 
        └─⟦this⟧ »tstartdate« 

TextFile

startdate = algol index.no
begin
message startdate    dh 81.05.20                page ...01...;
  message    program for initializing the date and time in an 
        rc8000 according to operator input.  the program is called:
                          startdate <input file>
        it will then output the text 'initialize date: ' on the
        input file and ask for input of 6 numbers representing
        year, month, day, hour, minute, and second respectively.
        the input syntax considers any non-digit to be a delimiter,
        and requires a newline or an end-medium character as 
        terminating delimiter.
            if the 6 numbers are considered to represent a legal
        date, the clock will be initialized according to the date
        and time given.  if the syntax is violated or the date
        is considered a non-legal one, the program will ask for 
        'initialize date' again;
  comment    the implementation of the central loop in the program
        tries to read as many segments as possible into core before
        the date is input.  this may secure a short time between
        the actual input and the setting of the clock,  but it may
        make the central loop appear awkward;



integer array days(0:4), tabel(0:127), corepic(1:6);
integer relvers, j, i, month5, year, month, day, hour, minute, second;
real time; long array field instname;

for i := 1 step 1 until 126 do tabel(i) := 7 shift 12 + i;
for i := 48 step 1 until 57 do tabel(i) := 2 shift 12 + i;
tabel(10) := tabel(25) := 8 shift 12 + 25;
tabel(0) := tabel(127) := 0;
days(0) := days(2) := days(4) := 31;
days(1) := days(3) := 30;
day := -1; time := -1;
j := year := month := hour := minute := second := 6;
intable(tabel);
system(5)move_core_from:(64)to:(corepic);
relvers := corepic(1)shift(-12)*100 + corepic(1)extract 12;
system(5)move_core_from:(1188)to:(corepic);
instname := 4;
systime(1, 1.3, 1.3); <*just for fun *>
\f


message startdate    dh 81.05.20                page ...02...;

 repeat
  if j = 6 then
   begin
    if year < 100 then year := year + (if year < 69 then 2000 else 1900);
    if year <= 2030 and year >= 1969 then
     begin
      year := year - 1968;
      if month <= 12 and month >= 1 then
       begin
        if hour < 24 and minute < 60 and second < 60 then
         begin
          if month < 3 then
           begin
            month := month + 9; year := year - 1;
           end else month := month - 3;
          month5 := month mod 5;
          if day <= days(month5) and day > 0 then
           begin comment an extensive test of date in february omitted;
            day := 59 + day + month//5*153
                       + year//4*1461 + year mod 4 * 365;
            for i := month5-1 step -1 until 0 do day := day + days(i);
            time := ((hour*60 + minute)*60 + second) +
                          extend day * 86400;
           end legal day in month       else goto dateinput
         end legal hour, minute, second else goto dateinput
       end legal month in year          else goto dateinput
     end legal year                     else goto dateinput
   end legal no of parameters read      else
dateinput:
   begin
    setposition(in, 0, 0);
    writeint(in, <:monitor version: :>, <<zd.dd>, relvers);
    if corepic.instname(1) <> 0 then write(in, "sp", 4, corepic.instname);
    if corepic(1) <> 0 then 
      write(in, <:<10>date of options: :>, <<zd dd dd>,
                corepic(1), "sp", 2, corepic(2));
    write(in, <:<10>initialize date: :>); setposition(in, 0, 0);
     repeat <*this algorithm may be cheated!*>
      j := read(in, year, month, day, hour, minute, second);
      repeatchar(in);
      while readchar(in, i) = 7 do;
     until i = 25;
   end;
 until time > 0;

systime(3)set_clock:(time, 1.3);
end;
▶EOF◀