PROGRAM Portmaker; {written by Frank Riemenschneider Postfach 730309 3000 Hannover 71} {$I-} {$M 4000,2000,2000} USES dos,crt; VAR zaehler : longint; f : file; high : word; low : word; name : string; dummy : byte; frage : char; CONST fullstern : string[80] = '**********************************************'+ '**********************************'; randstern : string[1] = '*'; {--- Texteingabe : Bildschirmeingabe eines Textes ---} {--- Eingabe: StringVARiable, Koordinatenpaar ---} {--- x,y (0..79,0..24), maximale L„nge, ---} {--- Ausgabe : Texteingabe ---} FUNCTION Eingabe(x,y,maxlaenge : byte) : string; VAR taste,laenge,i : byte; ss : string; BEGIN GotoXY(x,y); ss := ''; laenge := 0; REPEAT taste := Ord(ReadKey); {ASCII-Code holen} CASE taste of 32..255 : BEGIN IF laenge < maxlaenge THEN BEGIN inc(x); inc(laenge); write(chr(taste)); ss := ss + chr(taste); END; END; {Hier BEGINnen, wenn Backspace gedrckt.} 8 : BEGIN IF laenge > 0 THEN BEGIN dec(x); dec(laenge); GotoXY(x,y); {Letztes Zeichen l”schen} write(' '); GotoXY(x,y); ss := copy(ss,1,Length(ss)-1); END; END; END; UNTIL taste = 13; {Abschluá mit RETURN} Eingabe := ss; writeln; END; {--- Standardbild : Bildschirm aufbauen ---} {--- Eingabe : keine Ausgabe : Keine ---} PROCEDURE Standardbild; VAR i : byte; BEGIN ClrScr; write(fullstern); GotoXY(1,3); write('************************** M & T P O R T M A K E R ***************************'); GotoXY(1,5); write('************ (C)opyright 1990 by Markt & Technik Aktiengesellschaft ************'); GotoXY(1,7); write('****************** written 1989,1990 by Frank Riemenschneider ******************'); GotoXY(1,9); write(fullstern); GotoXY(0,0); For i := 1 to 22 DO BEGIN GotoXY(1,i); write(randstern); GotoXY(80,i); write(randstern); END; write(fullstern); GotoXY(4,11); write('PORTMAKER macht Turbo-Programme (Pascal 4.0, 5.0 und 5.5, C 2.0 und C++,'); GOTOXY(4,13); write('Assembler 1.X und 2.0) auf dem Portfolio lauff„hig, indem die wirkliche'); GOTOXY(4,15); write('Programml„nge in den Kopf der .EXE-Datei eingetragen wird.'); GOTOXY(4,17); write('Bitte geben Sie Pfad- und Dateiname der zu korrigierenden Datei ein :'); END; {------------ Hauptprogramm ------------------------} BEGIN Standardbild; REPEAT GOTOXY(4,19); write('Dateiname : < >'); name := Eingabe(17,19,50); {Falls das Suffix '.exe' nicht mit eingegeben wurde, wird dies angeh„ngt } IF Copy(name,length(name)-3,1) <> '.'THEN name := name + '.EXE'; GotoXY(4,21); Randomize; Assign(f,name); Reset(f,1); IF IOResult = 0 THEN BEGIN zaehler := 0; WHILE ((not EOF(f)) and (IOResult = 0)) DO BEGIN blockread(f,dummy,1); {Datenbytes z„hlen,alle 500 Bytes eine Meldung ausgeben} inc(zaehler); IF Trunc(zaehler/500) = (zaehler/500) THEN BEGIN GotoXY(4,21); write(' '); GotoXY(4+Trunc(Random*50),21); write('Arbeite...'); GotoXY(4,21); END; END; IF EOF(f) THEN BEGIN {Eintrag fr Kopf der Datei berechnen und hineinschreiben} high := Trunc(zaehler/512); low := zaehler - high*512; Seek(f,2); IF IOResult = 0 THEN blockwrite(f,low,2); IF IOResult = 0 THEN blockwrite(f,high,2); IF IOResult = 0 THEN BEGIN write('Die Datei wurde korrigiert. Weitere Dateien umwandeln (J/N) ?'); END ELSE BEGIN write('Beim Schreiben trat ein Fehler auf. Weitere Dateien umwandeln (J/N) ?'); END; END ELSE BEGIN write('Beim Lesen trat ein Fehler auf. Weitere Dateien umwandeln (J/N) ?'); END; close(f); END ELSE BEGIN write('Fehler beim ™ffnen der Datei. Weitere Dateien umwandeln (J/N) ?'); END; REPEAT frage := UpCase(ReadKey); UNTIL ((frage = 'J') or (frage = 'N')); GotoXY(4,21); write(' '); UNTIL (frage = 'N'); ClrScr; END.