home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / mbug / mbug141.arc / CONVERT.LBR / CONVERT.PAS < prev   
Pascal/Delphi Source File  |  1979-12-31  |  4KB  |  153 lines

  1. program convert_from_ed_to_asc_and_back;
  2.  
  3. const
  4.      cr=^M^J;
  5.  
  6. var
  7.    filename: file;
  8.    choice: char;
  9.  
  10. procedure ed_asc;
  11.  
  12. type
  13.     buffer = array[1..128] of byte;
  14.  
  15. var
  16.    ed, asc : file;
  17.    edbuf, ascbuf : buffer;
  18.    edpoint, ascpoint, linelen : byte;
  19.    temp1, i, linenum : integer;
  20.    temp2, edname, ascname :string[15];
  21.  
  22. function getnextch : integer;
  23. begin
  24.      if edpoint=129 then
  25.         begin
  26.              blockread(ed,edbuf,1);
  27.              edpoint:=1;
  28.         end;
  29.      getnextch:=edbuf[edpoint];
  30.      edpoint:=edpoint+1
  31. end;
  32.  
  33. procedure send(charout:byte);
  34. begin
  35.      if ascpoint=129 then
  36.         begin
  37.              blockwrite(asc,ascbuf,1);
  38.              ascpoint:=1;
  39.         end;
  40.      ascbuf[ascpoint]:=charout;
  41.      ascpoint:=ascpoint+1;
  42. end;
  43.  
  44. begin
  45.      ascpoint:=1;
  46.      edpoint:=129;
  47.      Writeln('Enter name of EDASM source file');
  48.      writeln('(without extension: must be type .edt)',cr);
  49.      write('==>>>');
  50.      readln(temp2);                 {collect file name}
  51.      ascname:=temp2+'.ASM';          {add approriate extension}
  52.      edname:=temp2+'.EDT';
  53.      assign(ed,edname);
  54.      assign(asc,ascname);
  55.      reset(ed);           {open source file}
  56.      rewrite(asc);        {open object file}
  57.                                     {both files now open & ready to go}
  58.      linenum:=getnextch+getnextch*256;
  59.      while linenum <> $FFFF do         {test for EOF}
  60.            begin
  61.                 linelen:=getnextch;
  62.                 for i:=1 to linelen do   {send the line of code}
  63.                     send(getnextch);
  64.                 send($0D);              {send a cr/lf pair}
  65.                 send($0A);
  66.                 linenum:=getnextch+getnextch*256;
  67.            end;
  68.      send($1A);                         {send EOF marker}
  69.      blockwrite(asc,ascbuf,1);
  70.      writeln(cr,cr,'Translation complete.',cr,cr);
  71.      close(ed);
  72.      close(asc);
  73. end;
  74.  
  75.  
  76. procedure asc_ed;
  77.  
  78. type
  79.     buffer = array[1..128] of byte;
  80.  
  81. var
  82.    edbuf : buffer;
  83.    ascbuf : string[128];
  84.    edpoint, linelen, linenumhi : byte;
  85.    ed : file;
  86.    asc : text;
  87.    i, linenum: integer;
  88.    edname, ascname : string[15];
  89.  
  90. procedure send(charout:byte);
  91. begin
  92.      if edpoint=129 then
  93.         begin
  94.              blockwrite(ed,edbuf,1);
  95.              edpoint:=1;
  96.         end;
  97.      edbuf[edpoint]:=charout;
  98.      edpoint:=edpoint+1;
  99. end;
  100.  
  101. begin
  102.      edpoint:=1;
  103.      linenum:=100;       {changing this alters the no. of the first line}
  104.      writeln('Enter name of ascii file for translation:');
  105.      writeln('without extension: must be type .asm',cr,cr);
  106.      write('==>>>');
  107.      readln(ascname);
  108.      edname:=ascname+'.edt';
  109.      ascname:=ascname+'.asm';
  110.      assign(ed,edname);
  111.      assign(asc,ascname);
  112.      rewrite(ed);
  113.      reset(asc);
  114.      while not eof(asc) and (linenumhi < 255) do  
  115.                   {end when eof(asc) is found or if .edt file becomes too long}
  116.            begin
  117.                 readln(asc,ascbuf);
  118.                 linelen:=length(ascbuf);
  119.                 linenumhi:=linenum div 256;
  120.                 send(linenum-linenumhi*256);
  121.                 send(linenumhi);
  122.                 linenum:=linenum+10;  {calculate no. of next line; change to a
  123.                          smaller increment if needed - i.e. when .edt file 
  124.                          becomes too long}
  125.                 send(linelen);
  126.                 for i:=1 to linelen do
  127.                     send(ord(ascbuf[i]));
  128.            end;
  129.      send($FF);
  130.      send($FF);
  131.      blockwrite(ed,edbuf,1);
  132.      close(asc);
  133.      close(ed);
  134.      writeln(cr,cr,'Translation complete.',cr,cr);
  135. end;
  136.  
  137. begin
  138.      writeln('Editor/assembler to Ascii conversion utility V1.0');
  139.      writeln(^I^I^I,'By Russell Butler',cr,cr);
  140.      writeln('1. Edasm to Ascii');
  141.      writeln('2. Ascii to Edasm',cr);
  142.      choice:=' ';
  143.      while (choice <> '1') and (choice <> '2') do
  144.      begin
  145.           write('Enter number of required option:');
  146.           readln(choice);
  147.      end;
  148.      if choice='1' then ed_asc
  149.         else asc_ed;
  150. end.
  151.  
  152.  
  153.