home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turbo Toolbox
/
Turbo_Toolbox.iso
/
sonderh1
/
dfunload.inc
< prev
next >
Wrap
Text File
|
1987-06-10
|
3KB
|
96 lines
(*-------------------------------------------------------------------------*)
(* DFUNLOAD.INC *)
(* COM-Files in das Intel-Hex-Format konvertieren *)
OVERLAY PROCEDURE Unload;
VAR DateiName, Zeile : String255;
Offset, i, j,
PruefSum, Zahl,
AktBlock, PSum : INTEGER;
Block : ARRAY[1..128] OF CHAR;
IOFehlerFlag : BOOLEAN;
Datei1 : TEXT;
Datei2 : FILE;
(* Typenfreie Datei. Erlaeuterungen zu *)
(* BlockRead/-Write finden Sie in der *)
(* Pascal 6/87 bei der zweiten Folge zum *)
(* DFUE-Programm. *)
BEGIN
ClrScr; (* Bildschirm loeschen *)
IOFehlerFlag := FALSE;
Offset := 256; (* Adresse an die COM-Files geladen werden *)
WriteLn(Inv_Ein,'UNLOAD',Inv_Aus);
WriteLn;
(* Dateien oeffnen *)
REPEAT
Write('Eingabedatei ? ');
ReadLn(DateiName);
WriteLn;
Assign(Datei2,DateiName);
IF Length(DateiName) > 0 THEN BEGIN
(*$I-*)
ReSet(Datei2);
(*$I+*)
IOFehlerFlag := IOFehler
END
ELSE
IOFehlerFlag := TRUE
UNTIL (NOT IOFehlerFlag) OR (Length(DateiName) = 0);
IF NOT IOFehlerFlag THEN
REPEAT
Write ('Ausgabedatei ? ');
ReadLn(DateiName);
Assign(Datei1,DateiName);
IF Length(DateiName) > 0 THEN BEGIN
(*$I-*)
ReWrite(Datei1);
(*$I+*)
IOFehlerFlag := IOFehler
END
ELSE
IOFehlerFlag := TRUE
UNTIL NOT(IOFehlerFlag) OR (Length(DateiName) = 0);
(* Wenn kein Fehler bei der Dateioeffnung --> uebertragen *)
IF NOT IOFehlerFlag THEN BEGIN
(* Bloecke durchzaehlen *)
FOR AktBlock := 1 TO FileSize(Datei2) DO BEGIN
BlockRead(Datei2,Block,1);
(* Aus 128 Byte acht Zeilen a 16 Hexzahlen generieren *)
FOR i := 0 TO 7 DO BEGIN
(* Zeilenanfang *)
Zeile := ':' + hexb(16) + hexi(Offset) + '00';
(* Pruefsumme initialisieren *)
PruefSum := 16 + Hi(Offset) + Lo(Offset);
(* 16 Hex-Zahlen schreiben *)
FOR j := 1 TO 16 DO BEGIN
Zeile := Zeile + hexb(Ord(Block[(i*16)+j]));
(* Pruefsumme aktualisieren *)
PruefSum := PruefSum + Ord(Block[(i*16)+j])
END;
(* Offset aktualisieren *)
Offset := Offset + 16;
(* Pruefsumme invertieren *)
PSum := 256 - Lo(PruefSum);
Zeile := Zeile + hexb(PSum);
(* Und schreiben *)
WriteLn(Datei1,Zeile);
WriteLn(Zeile)
END
END;
(* Ende und Aus *)
Zeile := ':00000000';
WriteLn(Datei1,Zeile);
WriteLn(Zeile);
Close(Datei2);
Close(Datei1);
IOFehlerFlag := IOFEHLER (* Close ist hoffentlich gutgegangen *)
END
END;
(*-------------------------------------------------------------------------*)
(* Ende DFUNLOAD.INC *)