a2b.PAS

{* BTOA в двоичный файл *}

Unit A2B;
Interface
Implementation
Begin
 writeln('Преобразует аттачмент из текста письма в формате BTOA в двоичный файл ');
End.

Program a2b;

Uses a2b.pas; {* Эту строку можно удалить *}
{ Автор: George C. [CoGeN@makro.ryazan.su]  { Прог преобразует из текста письма в формате BTOA в двоичный файл.}
{$R-, S-, F-}
{ Хоть чуточку побыстрее }
Var {* Объявление переменных *}
  S   : String;
  sum : longint;
  f   : text;
  fo  : text;
  cnt : byte;
  i   : byte;
  c   : byte;
  j   : byte;
Begin
  Writeln; {* Пустая строка *}
  If ParamCount  2 Then
  Begin
    Writeln('Prog
    For letter - BTOA - TEXT - > BIN conversion'
);
      Writeln('Use:   a2b in_text.ext out_bin.ext');
    Writeln('Good luck!  CoGeN''95');
    Halt
  End;
  cnt := 0;
  Writeln('Start');
  Assign(f, ParamStr(1)); {* Привязка переменной f к файлу ParamStr(1 *}
  Reset(f); {* Чтение из файла через переменную f *}
  Assign(fo, ParamStr(2)); {* Привязка переменной fo к файлу ParamStr(2 *}
  Rewrite(fo); {* Подготовка переменной fo для записи в файл *}
  While Not EOF(f) Do {* Если в файле ещё есть данные, то продолжаем *}
  Begin
    Readln(f, S);
    If S[1] = 'x' { управл.строка } Then
      Writeln(S)
    Else { просто печатаем ее }
    Begin
      For i := 1 To Length(S) Do {* Увеличиваем i от 1 до Length(S) с шагом 1 *}
      Begin
        c := ord(S[i]) - ord('!');
        If c = 89 Then
          Write(fo,#0#0#0#0)  { z=00000000h }
        Else Case cnt Of                  0:
        Begin
          sum := c;
          inc(cnt) {* Прибавим к cnt единицу *}
        End;
        4:
        Begin
          sum := sum * longint(85) + c;
          cnt := 0;
          For j := 3 Downto 0 Do
            Write(fo, chr($FF And (sum Shr (j Shl 3)))); { может проще простым повтором или вычитанием ?}
        End;
        Else Begin
          sum := sum * longint(85) + c;
        inc(cnt) {* cnt++ *}
      End;
      
    End;
    
  End;
  
End;

  End;
  Close(fo); {* Закрыть файл fo *}
  Close(f); {* Закрыть файл f *}
  End....