program dasmasci;

{ versieht einen .PRN-File des DASM-Dissassemblers mit ASCII-Zeichen.
  Die  Hex-Codes ab Position 6 in den Programmzeilen werden als
  ASCII-Zeichen ab der 6. Tabulator-Position angefuegt.
  Fuer nicht-darstellbare Codes steht ein Punkt (".").
  A.Herrmann 24.02.86 }

const tab:    char=^I;
      cr:     char=#$0D;
      blank:  char=#$0A;
      del:    char=#$7F;
      dot:    char='.';
      codpos: integer=7;
      ascpos: integer=48;

var ch: char;
    name1,name2: string[14];
    datei1,datei2: text;
    azeile,nzeile: string[255];
    code: string[10];
    hex: string[3];
    zz: integer;
    lg,printlg: integer;
    i,ii,j,jj,k,kk: integer;
    tabflg: boolean;

begin { dasmasci }

writeln; write('Name der Quelldatei = '); readln(name1);
assign(datei1,name1);
{$I-} reset(datei1) {$I+};
if Ioresult<>0 then writeln('Datei ',name1,' nicht gefunden.')
else
    begin
    write('Name der Zieldatei  = ');
    readln(name2);
    assign(datei2,name2);
    rewrite(datei2);
    zz:=0;    { Zeilenzaehler }
    repeat
        readln(datei1,azeile);
        nzeile:=azeile;
        lg:=length(azeile);
        if lg>0 then
            begin
            printlg:=0;
            for i:=1 to lg do
                begin
                printlg:=printlg+1;
                if azeile[i]=tab then
                    while printlg mod 8 <> 0 do
                        printlg:=printlg+1;
                end;
            k:=pos(tab,copy(azeile,codpos,lg))-1;
            if k>0 then
                begin
                repeat
                    nzeile:=nzeile+tab;
                    printlg:=printlg+1;
                    while printlg mod 8 <> 0 do
                        printlg:=printlg+1;
                until printlg>=ascpos;
                code:=copy(azeile,codpos,k);
                for i:=1 to k do
                    begin
                    if odd(i) then
                        begin
                        hex:='$'+copy(code,i,2);
                        Val(hex,j,jj);
                        if (j<$20) or (j>=$7F) then
                            nzeile:=nzeile+dot
                        else
                            nzeile:=nzeile+Chr(j);
                        end;
                    end;
                end;
            end;
        writeln(datei2,nzeile);
        zz:=zz+1;
        write(cr,zz,'.Zeile');
    until eof(datei1);
    end;
close(datei2);
end. { dasmasci }

