home *** CD-ROM | disk | FTP | other *** search
/ HAM Radio 1 / HamRadio.cdr / cw / kam-car / kam-rcv.pas < prev    next >
Pascal/Delphi Source File  |  1989-06-10  |  6KB  |  241 lines

  1. procedure capture_on;
  2. begin
  3.   check_if_in_help;
  4.   prompt_color;
  5.   capture_file_name := 'CAPTURE.TMP';
  6.   Set_PickWindow_To(10,5,25,22,SingleLine,'Files');
  7.   SayGet(20,status_line,'Capture File (or ?) ',capture_file_name,_S,24,1);
  8.   WatchKeys := ['?'];
  9.   ReadGets;
  10.   if LastKey = '?' then capture_file_name := PickFile('*.*');
  11.   if (capture_file_name <> '')
  12.   then
  13.   begin
  14.     assign(capture_file,capture_file_name);
  15.     {$I-}
  16.     rewrite(capture_file);
  17.     if (IOresult <> 0)
  18.     then begin
  19.            gotoxy(20,status_line); status_color;
  20.            write('Unable to open ',capture_file_name,^G^G^G);
  21.            delay(1000);
  22.            close(capture_file);
  23.          end;
  24.     capture := TRUE;
  25.     sho_status;
  26.     capture_pointer := 0;
  27.   end;
  28. end;
  29.  
  30. procedure write_capture_block;
  31. var i : integer;
  32. begin
  33.   for i := 0 to 2047 do
  34.     write(capture_file,capture_buffer[i]);
  35.   capture_pointer := 0;
  36. end;
  37.  
  38. procedure capture_off;
  39. begin
  40.   capture_buffer[capture_pointer] := ^Z;
  41.   write_capture_block;
  42.   close(capture_file);
  43.   capture := FALSE;
  44.   sho_status;
  45. end;
  46.  
  47. procedure capture_char(c : char);
  48. begin
  49.   capture_buffer[capture_pointer] := c;
  50.   capture_pointer := capture_pointer + 1;
  51.   if capture_pointer > 2047 then
  52.     write_capture_block;
  53. end;
  54.  
  55. procedure init_rcv_buffers;
  56. var i : integer;
  57. begin
  58.   for i := 0 to max_rcv_buffers do
  59.     rcv_buffer[i]^[0] := chr(0);
  60.   rcv_cnt := 1;
  61. end;
  62.  
  63. procedure update_buffer(c : char);
  64. var i : integer;
  65. begin
  66.   if c <> #13 then
  67.   begin
  68.     rcv_buffer[max_rcv_buffers]^[rcv_cnt] := c;
  69.     rcv_buffer[max_rcv_buffers]^[0] := chr(rcv_cnt);
  70.     inc(rcv_cnt);
  71.   end;
  72.   if (rcv_cnt = 81) OR (c = #13) then
  73.   begin
  74.     for i := 0 to max_rcv_buffers - 1 do
  75.       rcv_buffer[i]^ := rcv_buffer[i+1]^;
  76.     rcv_cnt := 1;
  77.     rcv_buffer[max_rcv_buffers]^[0] := chr(0);
  78.   end;
  79. end;
  80.  
  81. procedure next_line;
  82. begin
  83.   if yin = inp_end_line
  84.     then begin
  85.            window(1, inp_start_line, 80, inp_end_line );
  86.            gotoxy(1,1); DelLine;
  87.            full_window;
  88.            xin := 1;
  89.            gotoxy(xin,yin);
  90.          end
  91.     else begin
  92.            yin := yin + 1;
  93.            xin := 1;
  94.            gotoxy(xin,yin);
  95.          end;
  96. end;
  97.  
  98. procedure show_inp(st: char);
  99. var i,n,p: integer;
  100. begin
  101.   if st = #00 then exit;
  102.   receive_color;
  103.   if (xin > scrn_width) then
  104.   case st of
  105.     '!'..'z': begin
  106.                 n := 0;
  107.                 p := rcv_cnt;
  108.                 repeat
  109.                         n := n + 1;
  110.                   p := (p-1);
  111.                 until (rcv_buffer[max_rcv_buffers]^[p] = ' ') OR
  112.                       (p = 0);
  113.                 p := p + 1;
  114.                 n := n - 1;
  115.                 if n in [1..10]
  116.                 then
  117.                   begin
  118.                     tmpstr := '';
  119.                     gotoxy(xin - n, yin);
  120.                     ClrEol;
  121.                     next_line;
  122.                     while (n > 0) do
  123.                     begin
  124.                       rcv_buffer[max_rcv_buffers]^[0] := chr(rcv_cnt - n);
  125.                       tmpstr := tmpstr + rcv_buffer[max_rcv_buffers]^[p];
  126.                       write(rcv_buffer[max_rcv_buffers]^[p]);
  127.                       inc(p);
  128.                       dec(n);
  129.                       inc(xin);
  130.                     end;
  131.                     update_buffer(#13);
  132.                     for i := 1 to length(tmpstr) do
  133.                       update_buffer(tmpstr[i]);
  134.                   end
  135.                 else
  136.                   begin
  137.                     next_line;
  138.                     update_buffer(#13);
  139.                   end;
  140.               end;
  141.     ' ' : begin
  142.             next_line;
  143.             update_buffer(#13);
  144.           end;
  145.   end;
  146.   gotoxy(xin,yin);
  147.   case st of
  148.     #13 : begin
  149.             update_buffer(#13);
  150.             next_line;
  151.             if (capture = TRUE) then
  152.             begin
  153.               capture_char(#13);
  154.               capture_char(#10);
  155.             end;
  156.           end;
  157.     #10 : ;
  158.     else begin
  159.            write(st);
  160.            xin := xin + 1;
  161.            update_buffer(st);
  162.            if (capture = TRUE) then capture_char(st);
  163.          end;
  164.   end;
  165.   if (st = #32) AND (mode = CW)
  166.   then begin
  167.          rcv_stat;
  168.          disp_rcv_wpm;
  169.        end;
  170. end;
  171.  
  172. procedure rcvg;
  173. begin
  174.   if char_ready then show_inp(kam_in);
  175. end;
  176.  
  177. procedure show_page;
  178. begin
  179.   clrscr;
  180.   if show_line < first then show_line := first;
  181.   line_count := 1;
  182.   repeat
  183.     write(rcv_buffer[show_line]^);
  184.     if (length(rcv_buffer[show_line]^) < 80) AND
  185.        (line_count < (nlines))
  186.       then writeln;
  187.     inc(show_line);
  188.     inc(line_count);
  189.   until (line_count = nlines) OR (show_line > max_rcv_buffers);
  190. end;
  191.  
  192. procedure review_rcv_buffer;
  193. var i : integer;
  194.     OldVideo : array[1..2000] of word;
  195.     RevKey : char;
  196. begin
  197.   nlines := inp_end_line - inp_start_line + 1;
  198.   first := -1;
  199.   repeat
  200.     inc(first);
  201.   until (length(rcv_buffer[first]^) > 0) OR (first = max_rcv_buffers);
  202.   if (first = max_rcv_buffers) AND (rcv_cnt = 1) then exit;
  203.   FillPage(@OldVideo);
  204.   gotoxy(1,status_line);
  205.   status_color;
  206.   ClrEol;
  207.   write('             <HOME> beginning   <END> end   <PgUp>   <PgDwn>  <ESC>ape');
  208.   window(1,inp_start_line,80,inp_end_line);
  209.   receive_color;
  210.   show_line := first;
  211.   show_page;
  212.   repeat
  213.     repeat
  214.       RevKey := readkey;
  215.     until RevKey in [#0,#27];
  216.     if RevKey = #0 then  RevKey := readkey;
  217.     case RevKey of
  218.       #71 : begin            { HOME }
  219.               show_line := first;
  220.               show_page;
  221.             end;
  222.       #79 : begin            { END }
  223.               show_line := max_rcv_buffers - nlines + 1;
  224.               show_page;
  225.             end;
  226.       #73 : begin            { PGUP }
  227.               show_line := show_line - 2*(nlines) - 1;
  228.               show_page;
  229.             end;
  230.       #81 : begin            { PGDWN }
  231.               if show_line > (max_rcv_buffers - nlines + 1) then
  232.                  show_line := max_rcv_buffers - nlines + 1;
  233.               show_page;
  234.             end;
  235.     end;
  236.   until RevKey = #27;
  237.   DisPlayPage(@OldVideo);
  238.   window(1,1,80,25);
  239. end;
  240.  
  241.