home *** CD-ROM | disk | FTP | other *** search
- (*-------------------------------------------------------------------------*)
- (* 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 *)
-