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 - download

⟦a959bbd86⟧ TextFile

    Length: 2304 (0x900)
    Types: TextFile
    Names: »systidtx    «

Derivation

└─⟦110021343⟧ Bits:30007476 RC8000 Backup tape fra HT's bus-radio system
    └─⟦a957ba283⟧ 
        └─ ⟦this⟧ »systidtx    « 

TextFile

\f

message real procedure systid side 1 - 780110/cl;

real procedure systid(dato,kl);
value                 dato,kl;
integer               dato,kl;

<* proceduren konverterer dato og klokkeslet til sekunder siden
   midnat 1967.12.31. Proceduren kan opfattes som den modsatte
   til systime(4, , ). 
     kun tidspunkter mellem 680101 000000 og 991231 235959
   kan konverteres
     dato checkes for om 68<= år <= 99 og 1<= md <= 12
   dage samt klokkeslet checkes ikke, hvilket betyder at f.eks.
   781032 101735 opfattes som lovlig (= 781101 101735).

   kald:  systid(dato,kl)

   systid (retur,real)       det konverterede tidspunkt,
                             sekunder siden midnat 67.12.31.

   dato   (kald,integer)     dato på formen 
                             (år mod 100)*10000 + md*100 + dg
                             der ønskes konverteret.

   kl     (kald,integer)     klokkeslet på formen
                             time*10000 + min*100 + sek
                             der ønskes konverteret.
   fejlreaktioner:
     ved fejl returneres med systid < 0.0  (-1.0), idet alle
     lovlige tidspunkter giver systid >= 0.0

*>
\f

message real procedure systid side 2 - 790105/cl;

begin
  integer år,md,dg,time,min,sek,antal_år,antal_skudår,antal_dage;
  integer trapm;
  real å,d,t;

  å:= 31536000.0; d:= 86400.0; t:= -1.0;
  trapm:= trapmode;
  trap(slut); trapmode:= 1 shift 4 + 1 shift 7;

  år:= dato//10000; md:= (dato mod 10000)//100; dg:= dato mod 100;
  time:= kl//10000; min:= (kl  mod 10000)//100; sek:=  kl mod 100;
  if 99<år or md<1 or 12<md then
    goto slut;
  if år<68 then år:=år+100;
  antal_skudår:= -entier((68-år)/4);
  antal_år:= år-68;
  antal_dage:= dg + (case md of (0,31,59,90,120,151,181,212,243,
    273,304,334)) + (if md>2 and år mod 4 = 0 then 1 else 0) - 1;

  t:= 0.0 + å*antal_år + d*antal_skudår + d*antal_dage
    + 3600.0*time + 60.0*min + sek;
slut:
  trapmode := trapm;
  systid:= t;
end;
▶EOF◀