home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / sonderh1 / dfunload.inc < prev    next >
Text File  |  1987-06-10  |  3KB  |  96 lines

  1. (*-------------------------------------------------------------------------*)
  2. (*                              DFUNLOAD.INC                               *)
  3. (*              COM-Files in das Intel-Hex-Format konvertieren             *)
  4.  
  5. OVERLAY PROCEDURE Unload;
  6.  
  7. VAR DateiName, Zeile   : String255;
  8.     Offset, i, j,
  9.     PruefSum, Zahl,
  10.     AktBlock, PSum     : INTEGER;
  11.     Block              : ARRAY[1..128] OF CHAR;
  12.     IOFehlerFlag       : BOOLEAN;
  13.     Datei1             : TEXT;
  14.     Datei2             : FILE;
  15.                          (* Typenfreie Datei. Erlaeuterungen zu    *)
  16.                          (* BlockRead/-Write finden Sie in der     *)
  17.                          (* Pascal 6/87 bei der zweiten Folge zum  *)
  18.                          (* DFUE-Programm.                         *)
  19.  
  20. BEGIN
  21.   ClrScr;                  (* Bildschirm loeschen *)
  22.   IOFehlerFlag := FALSE;
  23.   Offset := 256;           (* Adresse an die COM-Files geladen werden *)
  24.   WriteLn(Inv_Ein,'UNLOAD',Inv_Aus);
  25.   WriteLn;
  26.  
  27.   (* Dateien oeffnen *)
  28.   REPEAT
  29.     Write('Eingabedatei  ?  ');
  30.     ReadLn(DateiName);
  31.     WriteLn;
  32.     Assign(Datei2,DateiName);
  33.     IF Length(DateiName) > 0 THEN BEGIN
  34. (*$I-*)
  35.       ReSet(Datei2);
  36. (*$I+*)
  37.       IOFehlerFlag := IOFehler
  38.     END
  39.     ELSE
  40.       IOFehlerFlag := TRUE
  41.   UNTIL (NOT IOFehlerFlag)  OR (Length(DateiName) = 0);
  42.   IF NOT IOFehlerFlag THEN
  43.     REPEAT
  44.       Write ('Ausgabedatei   ?  ');
  45.       ReadLn(DateiName);
  46.       Assign(Datei1,DateiName);
  47.       IF Length(DateiName) > 0 THEN BEGIN
  48. (*$I-*)
  49.         ReWrite(Datei1);
  50. (*$I+*)
  51.         IOFehlerFlag := IOFehler
  52.       END
  53.       ELSE
  54.         IOFehlerFlag := TRUE
  55.     UNTIL NOT(IOFehlerFlag) OR (Length(DateiName) = 0);
  56.  
  57.   (* Wenn kein Fehler bei der Dateioeffnung --> uebertragen *)
  58.   IF NOT IOFehlerFlag THEN BEGIN
  59.     (* Bloecke durchzaehlen *)
  60.     FOR AktBlock := 1 TO FileSize(Datei2) DO BEGIN
  61.       BlockRead(Datei2,Block,1);
  62.       (* Aus 128 Byte acht Zeilen a 16 Hexzahlen generieren *)
  63.       FOR i := 0 TO 7 DO BEGIN
  64.         (* Zeilenanfang *)
  65.         Zeile := ':' + hexb(16) + hexi(Offset) + '00';
  66.         (* Pruefsumme initialisieren *)
  67.         PruefSum := 16 + Hi(Offset) + Lo(Offset);
  68.         (* 16 Hex-Zahlen schreiben *)
  69.         FOR j := 1 TO 16 DO BEGIN
  70.           Zeile := Zeile + hexb(Ord(Block[(i*16)+j]));
  71.           (* Pruefsumme aktualisieren *)
  72.           PruefSum := PruefSum + Ord(Block[(i*16)+j])
  73.         END;
  74.         (* Offset aktualisieren *)
  75.         Offset := Offset + 16;
  76.         (* Pruefsumme invertieren *)
  77.         PSum := 256 - Lo(PruefSum);
  78.         Zeile := Zeile + hexb(PSum);
  79.         (* Und schreiben *)
  80.         WriteLn(Datei1,Zeile);
  81.         WriteLn(Zeile)
  82.       END
  83.     END;
  84.     (* Ende und Aus *)
  85.     Zeile := ':00000000';
  86.     WriteLn(Datei1,Zeile);
  87.     WriteLn(Zeile);
  88.     Close(Datei2);
  89.     Close(Datei1);
  90.     IOFehlerFlag := IOFEHLER (* Close ist hoffentlich gutgegangen *)
  91.   END
  92. END;
  93.  
  94. (*-------------------------------------------------------------------------*)
  95. (*                            Ende DFUNLOAD.INC                            *)
  96.