(**********************************************************************

    :Program.    Time
    :Contents.   Anpassung des Module TimerSupports an mein Versionsmodule
    :Author.     Steffen Reith
    :Address.    Hessenstr. 64, D-8700 Wuerzburg
    :Copyright.  Shareware
    :Language.   Modula-2
    :Translator. M2Amiga A+L V3.32d
    :System.     $$Date: 15-06-1991  01:43:29
    :System.     $$CompilerRuns #3#
    :History.    V1.0  12-3-1991

**********************************************************************)
IMPLEMENTATION MODULE Ver;

FROM CED         IMPORT TalkCED,Fehler,Status,FehlerType,PutMsg2CED,KillString;
FROM Msg         IMPORT Request;
FROM SYSTEM      IMPORT ADDRESS,ADR;
FROM String      IMPORT Concat;
FROM Time        IMPORT TimeFeld,DateFeld,AskDate;
FROM Conversions IMPORT ValToStr;

TYPE CHARPtr=POINTER TO CHAR;

VAR Str,Str2:ARRAY[0..64] OF CHAR;

PROCEDURE DoFehler();

BEGIN
 CASE Fehler OF
  |ok:Request('Illegaler Fehler (Version) aufgetreten');
  |noReply:Request('Kein ReplyPort für Version');
  |noCED:Request('Version findet keinen CED !')
 END
END DoFehler;


PROCEDURE UpdateVersion();

TYPE StringPtr=POINTER TO ARRAY [0..1024] OF CHAR;

VAR Ptr:StringPtr;
    Zeile:ARRAY[0..80] OF CHAR;
    RunStr:ARRAY[0..10] OF CHAR;
    T:TimeFeld;
    D:DateFeld;
    Flag:BOOLEAN;
    i:INTEGER;
    Runs:LONGINT;
    err:BOOLEAN;

BEGIN

 (* Alte Position merken *)
 Flag:=PutMsg2CED("Mark Location 3");
 IF NOT(Flag) THEN DoFehler(); END;

 (* Ganz nach oben *)
 Flag:=PutMsg2CED("Jump to Byte 0");
 IF NOT(Flag) THEN DoFehler() END;

 (* An die Stelle springen *)
 Flag:=PutMsg2CED("Search FOR $$Date: ");
 IF NOT(Flag) THEN DoFehler() END;

 (* Bis zum Ende der Zeile löschen *)
 Flag:=PutMsg2CED("Delete to EOL");
 IF NOT(Flag) THEN DoFehler() END;

 (* Zeiger auf Delete-Line holen !! *)
 Flag:=TalkCED("Status 63");
 IF NOT(Flag) THEN DoFehler() END;
 Ptr:=ADDRESS(Status);

 (* Wirklich den richtigen Eintrag gefunden ? *)
 IF (Ptr^[0]="$") AND (Ptr^[1]="$") THEN
  Zeile:="";
  Concat(Zeile,'Text $$Date: ');

  AskDate(T,D);
  Concat(Zeile,D);
  Concat(Zeile,"  ");
  Concat(Zeile,T);

  Flag:=PutMsg2CED(Zeile);
  IF NOT(Flag) THEN DoFehler() END;

 ELSE
  (* Nicht geklappt wieder rückgängig machen *)
  Flag:=PutMsg2CED("Undo");
  IF NOT(Flag) THEN DoFehler() END
 END;


 (* Und noch die CompilerRuns korrigieren *)
 (* Ganz nach oben *)
 Flag:=PutMsg2CED("Jump to Byte 0");
 IF NOT(Flag) THEN DoFehler() END;

 (* An die Stelle springen *)
 Flag:=PutMsg2CED("Search FOR $$CompilerRuns #");
 IF NOT(Flag) THEN DoFehler() END;

 (* Bis zum Ende der Zeile löschen *)
 Flag:=PutMsg2CED("Delete to EOL");
 IF NOT(Flag) THEN DoFehler() END;

 (* Zeiger auf Delete-Line holen !! *)
 Flag:=TalkCED("Status 63");
 IF NOT(Flag) THEN DoFehler() END;
 Ptr:=ADDRESS(Status);

 (* Wirklich den richtigen Eintrag gefunden ? *)
 IF (Ptr^[0]="$") AND (Ptr^[1]="$") THEN
  Zeile:="";

  i:=0;
  WHILE Ptr^[i]#"#" DO INC(i) END;
  INC(i);

  Runs:=0;
  (* Umwandlung der Compilerruns *)
  WHILE (ORD(Ptr^[i])>=ORD("0")) AND (ORD(Ptr^[i])<=ORD("9")) DO
   Runs:=Runs+ORD(Ptr^[i])-ORD("0");Runs:=10*Runs;
   INC(i)
  END;
  Runs:=Runs DIV 10;

  (* Erhöhen der Compilerdurchläufe *)
  INC(Runs);

  (* Und wieder in String umwandeln *)
  ValToStr(Runs,FALSE,RunStr,10,-9,CHAR(0),err);

  Zeile:="";
  Concat(Zeile,"Text $$CompilerRuns #");
  Concat(Zeile,RunStr);
  Concat(Zeile,"#");

  Flag:=PutMsg2CED(Zeile);
  IF NOT(Flag) THEN DoFehler() END;

 ELSE
  (* Nicht geklappt wieder rückgängig machen *)
  Flag:=PutMsg2CED("Undo");
  IF NOT(Flag) THEN DoFehler() END
 END;


 (* An alte Position springen *)
 Flag:=PutMsg2CED("Jump to Mark 3");
 IF NOT(Flag) THEN DoFehler(); END;

END UpdateVersion;

BEGIN
END Ver.
