
 This contains the routines for eight bit quoting 

(* ---------------------------------------------------- *)

procedure Bbufemp(* var buffer : pakettype;
                      Len    : integer  *);
 procedure to empty the buffe into a file 

var
  r      : char;
  i      : integer;

begin
i := 0;

while i < Len do { while not at the end of packet do }
  begin
  r := buffer[i];
  if (r = myquote) then { if myquote the a control char ? }
    begin{get quoted character}
    i := i + 1;
    r := buffer[i];
    if (aand(ord(r),127) <> ord(myquote)) and
       (aand(ord(r),127) <> ord(mybquote)) then
      r := ctl(r) { controlify the character }
    end
   else
     if (r = myBquote) then { if mybquote then eight bit should be set }
       begin{get the binary character}
       i := i + 1;
       r := buffer[i];
       if (aand(ord(r),127) = ord(myquote)) then { is a control char }
         begin
         i := i + 1;
         r := buffer[i];
         if (aand(ord(r),127) <> ord(myquote)) and
            (aand(ord(r),127) <> ord(mybquote)) then
           r := ctl(chr(aand(ord(r),127)));
         end;
       r := chr(aand(ord(r),127) + 128) { add in eight bit }
       end
      else
        begin{get the normal character}
        r := chr(aand(ord(r),127))
        end;
  i := i + 1;
  FileBuf[BuffPosn] := r; { put in the file buffer }
  BuffPosn := BuffPosn + 1;
  if BuffPosn > BufEnd then { if file buffer full then save it }
    SaveBuff(FileBuf,BuffPosn,False)
  end{while}
 
end{Bbufemp};

(* ---------------------------------------------------- *)

function Bbufill(*var buffer: packettype): integer*);
 This fills a packet from the file 

var i,j,k : integer;
    r     : char;
    OK    : boolean;

begin
OK := ((not eof(f)) and (TranState <> ImgFile)) or
      ((not EOI) and (TranState = ImgFile));

i := 0;
(* while file has some data & packet has some room we'll keep going *)
while ((buffposn <= bufend) or OK) and (i < spsiz-8) do
  begin
  ReadBuff(FileBuf,BuffPosn);(* while *)
  if (buffposn <= bufend) then     (* if we're within buffer bounds *)
    begin
    r := filebuf[buffposn];      (* get a character *)
    buffposn := buffposn + 1;         (* increase buffer pointer *)
    if ord(r) > 127 then
      begin{we have the eight bit set }
      buffer[i] := bquote;
      i := i + 1;
      r := chr(aand(ord(r),127));{ convert to 7 bit }
      if (r in ctlset) then
        begin
        buffer[i] := quote;
        i := i + 1;
        if (r <> quote) and (r <> bquote) then
          r := ctl(r);
        end
      end
     else
       if (r in ctlset) then     (* if a control char *)
         begin
         buffer[i] := quote;      (* put the quote in buffer *)
         i := i + 1;
         if (r <> quote) and (r <> bquote) then
             r := ctl(r);   (* and un-controllify char *)
         end;
    buffer[i] := r; { update the buffer }
    i := i + 1;
    end;
  OK := ((not eof(f)) and (TranState <> ImgFile)) or
        ((not EOI) and (TranState = ImgFile));
  end{while};
if (i = 0) then                         (* if we're at end of file, *)
  Bbufill := (at_eof)                    (* indicate it *)
 else                                    (* else *)
   Bbufill := i                           (* return # of chars in packet *)
end; (* Bbufill *)

(* ---------------------------------------------------- *)

