PROGRAM Receive_Amiga_Time; (* Dieses Programm empf„ngt die vom AMIGA-Programm Time_To_IBM gesendeten Daten und stellt die System-Uhr danach. Der bertragene String hat folgendes For- mat : 'Mon Apr 30 10:04:52 1984 ' Das Amiga-Programm muá zuerst gestartet werden. Wurde es mit der Option -w gestartet, muá dieses Programm innerhalb von 10 Sekunden geladen werden. Ansonsten bricht der Amiga mit einem TimeOut Error ab. Werden beide Pro- gramme beim Booten aufgerufen, ist es ratsam, das AMIGA-Programm ohne Parameter aufzurufen. Es wartet dann in jedem Fall, bis der IBM die Sendung quittiert. Dieses Programm geht davon aus, daá die Startadresse des Dual-Ported-RAMs bei $E000 liegt. Wurde dies ge„ndert (PCPrefs oder Speichererweiterung auf PC-Seite o.„., dann muá die CONSTante start_dual_ported_ram auf den korrekten Wert gelegt werden. Ansonsten werden seltsame Dinge geschehen. Aufruf : RAT Letzte Version (1.1) 12.4.1989 Tim Pietzcker Software *) USES Dos; CONST start_dual_ported_ram = $e000; offset = $2000; months: array[0..11] of string[3] = ( 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' ); VAR len,i : word; vari : byte; time : string[26]; PROCEDURE Set_System_Time; VAR day,month,year,hours,minutes,seconds:word; sub:string[4]; code:integer; BEGIN WriteLn; Write('Today is '); sub := Copy(time,4,3); (* Monatsname *) Write(sub,' '); month := 0; WHILE (months[month] <> sub) and (month < 12) DO month := month +1; month := month+1; (* Um String-Index in den Bereich 1-12 zu bringen *) sub := Copy (time,8,2); (* Tag *) Write(sub,', '); Val(sub,day,code); sub := Copy (time,20,4); (* Jahr *) WriteLn(sub); Val(sub,year,code); SetDate(year,month,day); Write('The current time is '); sub := Copy (time,11,2); (* Stunde *) Write(sub,':'); Val(sub,hours,code); sub := Copy (time,14,2); (* Minute *) Write(sub,':'); Val(sub,minutes,code); sub := Copy (time,17,2); (* Sekunde *) WriteLn(sub); Val(sub,seconds,code); SetTime(hours,minutes,seconds,0); END; BEGIN (* Receive_Amiga_Time *) WriteLn('Receive Amiga-Time (c) Apr 4, 1989 Tim Pietzcker Software'); WriteLn; len := MEM[start_dual_ported_ram:offset]*256+ MEM[start_dual_ported_ram:offset+1]; (* L„nge des Strings (26) *) IF len<>26 THEN BEGIN WriteLn('Error - Time not found !!'); HALT; END; (* Dem Amiga den Empfang signalisieren *) MEM[start_dual_ported_ram:offset] := 0; MEM[start_dual_ported_ram:offset+1] := 0; MEM[start_dual_ported_ram:offset+2] := 0; MEM[start_dual_ported_ram:offset+3] := 0; WHILE MEM[start_dual_ported_ram:offset] = 0 DO; (* Warten, bis AMIGA das erste Zeichen sendet *) FOR i := 0 TO len-1 DO (* String im Dual-Ported-RAM lesen *) BEGIN vari := MEM[start_dual_ported_ram:offset]; MEM[start_dual_ported_ram:offset] := 255 - vari; WHILE MEM[start_dual_ported_ram:offset] = 255-vari DO; time[i] := Chr(vari); END; Set_System_Time; END.