
PROGRAM ATIME;
{Programm zur Uebernahme von Zeit und Datum aus dem AMIGA
  in TURBO-PASCAL Version 3.0 }
CONST
DPRS=$E000; {DUAL_PORTED_RAM_SEGMENT}
OFFSET=$2000;
PRUEF_LAENGE=8;
PRUEF_WERT=$11;
SJC=1460; {Schaltjahreskonstante = 4 * 365}


TYPE
REGISTERS = RECORD
       AX,BX,CX,DX,BP,SI,DI,DS,ES,FLAGS: INTEGER;
       END;

VAR
N,TB,TAG,MONAT : BYTE;
TAGE_SEIT_78,JAHRE_SEIT_78,
RESTTAGE : INTEGER;
PARMS : REGISTERS;

PROCEDURE MONAT_UND_TAG(JAHR,TAG_DES_JAHRES : INTEGER;
                  VAR MONAT,TAG : BYTE);
CONST
 TAGE_IM_MONAT : ARRAY [FALSE..TRUE,1..12] OF BYTE = (
  (31,28,31,30,31,30,31,31,30,31,30,31),
  (31,29,31,30,31,30,31,31,30,31,30,31));
VAR
 SCHALTJAHR : BOOLEAN;
 I : BYTE;
BEGIN
 SCHALTJAHR:=(JAHR DIV 4 = 0) AND (JAHR DIV 100 <> 0) OR
 (JAHR DIV 400 = 0);
  I:=1;
  WHILE TAG_DES_JAHRES > TAGE_IM_MONAT[SCHALTJAHR,I] DO
   BEGIN
    TAG_DES_JAHRES:=TAG_DES_JAHRES-TAGE_IM_MONAT[SCHALTJAHR,I];
    I:=I+1;
   END;
MONAT:=I;
TAG:=TAG_DES_JAHRES;
END;

BEGIN
TEXTCOLOR(LightGray);
 WRITE('WARTE AUF AMIGA-DATUM, TASTE ZUM ENDE DRÜCKEN');
 REPEAT
 UNTIL ((MEM[DPRS:OFFSET]=PRUEF_WERT) AND
            (MEM[DPRS:OFFSET+1]=PRUEF_WERT)) OR KEYPRESSED;
 DelLine;
 IF MEM[DPRS:OFFSET]=PRUEF_WERT THEN
 BEGIN
 WITH PARMS DO
 BEGIN
  AX:=$2D00; { ZEIT SETZEN}
  CX:=((((MEM[DPRS:OFFSET+4] SHL 8) OR MEM[DPRS:OFFSET+5])
       DIV 60) SHL 8) OR (((MEM[DPRS:OFFSET+4] SHL 8) OR
             MEM[DPRS:OFFSET+5]) MOD 60);
    { STUNDEN IN CH , MINUTEN CL }
  DX:=(((((MEM[DPRS:OFFSET+6] SHL 8) OR MEM[DPRS:OFFSET+7])
          DIV 50)+1) SHL 8) OR 00;
  { SEKUNDEN IN DH , HUNDERTEL IN DL}
  MsDos(PARMS);
  IF LO(AX)<>0 THEN
  BEGIN
   WRITELN('FALSCHE ZEIT EMPFANGEN');
   HALT;
  END;
  AX:=$2B00; { DATUM SETZEN}
  TAGE_SEIT_78:=((MEM[DPRS:OFFSET+2] SHL 8) OR
                MEM[DPRS:OFFSET+3]);
  JAHRE_SEIT_78:=(TAGE_SEIT_78-((TAGE_SEIT_78+730) DIV SJC))
                      DIV 365;
  IF JAHRE_SEIT_78 >0 THEN
    RESTTAGE:=TAGE_SEIT_78-(JAHRE_SEIT_78* 365)-
           ((TAGE_SEIT_78+730) DIV SJC)+1
    ELSE
     RESTTAGE:=TAGE_SEIT_78;
  CX:=JAHRE_SEIT_78+1978;
  { JAHRES ZAHL }
  MONAT_UND_TAG(CX,RESTTAGE,MONAT,TAG);
  DX:=(MONAT SHL 8) OR TAG;
  { MONAT IN DH , TAGE IN DL}
  MsDos(PARMS);
  IF LO(AX)<>0 THEN
  BEGIN
   WRITELN('FALSCHES DATUM EMPFANGEN');
   HALT;
  END;
  {Spuren verwischen}
  FOR N:=0 TO PRUEF_LAENGE-1 DO
  BEGIN
   MEM[DPRS:OFFSET+N]:=0;
  END;
 END;
 END
 ELSE
  BEGIN
   WRITELN('PROGRAMM GESTOPPED');
   HALT;
  END;
END.


