home *** CD-ROM | disk | FTP | other *** search
- (****************************************************************************)
- (* COMMUNICATIONS PROBLEMS !!! *)
- (****************************************************************************)
- procedure
- ask_operator(var ch : char);
- begin
- mkwin(60,18,80,22,'');
- error_count := 0;
- writeln;
- write(' Continue? y/n ');
- readln(yes_no);
- yes_no := upcase(yes_no[1]);
- if yes_no[1] = 'Y' then
- ch := NAK
- else begin
- ch := CAN;
- continue_transfer := false;
- end;
- rmwin;
- end;
-
- (****************************************************************************)
- (* SEND BLOCK *)
- (****************************************************************************)
- procedure
- xmit_data(data_block : strtype);
- var
- i : integer;
- begin
- i := 0;
- while ( i < length(data_block) ) and continue_transfer do begin
- i := succ( i );
- store_sout_buffer(data_block[i]);
- if keypressed then begin
- read(kbd,kbd_char);
- ask_operator(kbd_char);
- end;
- end;
- flush_sin_buff;
- end;
-
- (****************************************************************************)
- (* RECEIVE BLOCK *)
- (****************************************************************************)
- procedure
- recv_data(var data_block : strtype; char_cnt, wait_cnt : integer);
- var
- cnt : integer;
- time : integer;
- max_loop : integer;
- begin
- data_block := '';
- cnt := 0;
- time := wait_increment;
- max_loop := wait_cnt;
- repeat
- if cnt > 0 then
- delay(time);
- if sin_store_ptr <> sin_read_ptr then begin
- data_block := data_block + read_sin_buffer;
- cnt := 0;
- time := sync_time;
- max_loop := 5;
- end
- else
- cnt := succ(cnt);
- if keypressed then begin
- read(kbd,kbd_char);
- ask_operator(kbd_char);
- end;
- until ( cnt > max_loop )
- or ( char_cnt = length(data_block) )
- or ( not continue_transfer );
- end;
-
- (****************************************************************************)
- (* SYNC WITH REMOTE *)
- (****************************************************************************)
- procedure
- sync_with_remote;
- begin
- sout_read_ptr := sout_store_ptr;
- delay(sync_time);
- while sin_read_ptr <> sin_store_ptr do begin
- flush_sin_buff;
- delay(sync_time);
- delay(sync_time);
- end;
- end;
-
- procedure
- sync_NAK;
- var
- i : integer;
- begin
- for i:=1 to 20 do sync_with_remote;
- end;
-
- (****************************************************************************)
- (* CALCULATE: CHECK DIGIT OR CRC *)
- (****************************************************************************)
- procedure (***************************)
- ccitt_crc_calc; (* X^16 + X^12 + X^5 + 1 *)
- (***************************)
- begin
- inline( $8B/$1E/crc_register ); { mov bx,crc_register }
- inline( $B9/>$08 ); { mov cx,8 }
- inline( $A1/crc_input ); { mov ax,crc_input }
- inline( $D0/$D0 ); { u1: rcl al,1 }
- inline( $D1/$D3 ); { rcl bx,1 }
- inline( $73/$04 ); { jnc u2 }
- inline( $81/$F3/$1021 ); { xor bx,1021h }
- inline( $E2/$F4 ); { u2: loop u1 }
- inline( $89/$1E/crc_register ); { mov crc_register,bx }
- end;
-
- procedure
- calc_chk;
- begin
- if crc_mode then
- ccitt_crc_calc
- else
- crc_register := lo( crc_register + crc_input );
- end;
-
- procedure
- finalize_crc_calc( si : strtype );
- begin
- crc_input := 0;
- calc_chk;
- calc_chk;
- crc_input := ord( si[132] );
- if crc_mode then
- crc_input := swap( crc_input ) or ord( si[133] );
- end;
-
- (****************************************************************************)
- (* PROCESS XMODEM INPUT BUFFER *)
- (****************************************************************************)
- procedure
- block_write_buffer;
- begin
- recv_file_size := int( recv_file_size - 127.9 );
- xmodem_buf_cnt := succ(xmodem_buf_cnt);
- if xmodem_buf_cnt = max_xmodem_buffers then begin
- blockwrite(recv_file,xmodem_table_ptr^,max_xmodem_buffers);
- xmodem_buf_cnt := 0;
- end;
- end;
-
- procedure
- write_final_buffers;
- var
- i : integer;
- handle : integer;
- tbuffer : array[1..127] of char;
- begin
- blockwrite(recv_file,xmodem_table_ptr^,xmodem_buf_cnt);
- close( recv_file );
-
- { open file }
- filename[length(filename)+1] := chr( 0 );
- regs.DS := seg( filename );
- regs.DX := ofs( filename ) + 1;
- regs.AX := $3D02;
- msdos( regs );
- handle := regs.AX;
-
- { move pointer to end of file }
- regs.AX := $4202;
- regs.BX := handle;
- regs.CX := 0;
- regs.DX := 1;
- msdos( regs );
-
- xmodem_buf_cnt := succ( xmodem_buf_cnt );
- for i:=1 to trunc( recv_file_size ) do
- tbuffer[i] := xmodem_table_ptr^[xmodem_buf_cnt,i];
-
- { write tail to the file }
- regs.BX := handle;
- regs.CX := trunc( recv_file_size );
- regs.DS := seg( tbuffer );
- regs.DX := ofs( tbuffer );
- regs.AX := $4000;
- msdos( regs );
-
- { change files create time }
- if recv_date_time[1] <> 0 then begin
- regs.AX := $5701;
- regs.BX := handle;
- regs.DX := recv_date_time[2];
- regs.CX := recv_date_time[1];
- msdos( regs );
- end;
-
- { close the file }
- regs.AX := $3E00;
- regs.BX := handle;
- msdos( regs );
-
- xmodem_buf_cnt := 0;
- recv_file_size := 0.0;
- end;
-
- function
- send_nak : char;
- var
- rsp : char;
- begin
- error_count := succ(error_count);
- if error_count > 30 then
- ask_operator(rsp)
- else
- rsp := NAK;
- send_nak := rsp;
- sync_NAK;
- end;
-
- procedure
- process_xmodem_buffer(var pbuf; var resp : char);
- var
- i : integer;
- xcnt : integer;
- xbuf : strtype absolute pbuf;
- tbuf : telink_header absolute pbuf;
- hold_mode : boolean;
- begin
- if (ord(xbuf[2]) <> ( ord(xbuf[3]) xor $FF) ) then begin
- resp:=send_nak;
- exit;
- end;
- case xbuf[1] of
- SOH : begin
- if lo( block_count ) = ord(xbuf[2]) then begin
- resp := ACK;
- exit;
- end;
- if (lo( succ( block_count )) <> ord(xbuf[2]))
- or ( length( xbuf ) <> xblocksize )
- then begin
- resp:=send_nak;
- exit;
- end;
- crc_register := 0;
- xcnt := succ(xmodem_buf_cnt);
- for i:=4 to 131 do begin
- crc_input := ord( xbuf[i] );
- xmodem_table_ptr^[xcnt,i-3] := chr( crc_input );
- calc_chk;
- end;
- finalize_crc_calc( xbuf );
- if crc_register <> crc_input then begin
- resp:=send_nak;
- exit;
- end;
- block_count := succ(block_count);
- if recv_file_size > 128.0 then
- block_write_buffer
- else
- write_final_buffers;
- resp := ACK;
- exit;
- end;
- SYN : begin
- if ( block_count > 0 ) or ( ord(xbuf[2]) > 0 ) then begin
- resp:=send_nak;
- exit;
- end;
- hold_mode := crc_mode;
- if length( xbuf ) = 132 then
- crc_mode := false;
- crc_register := 0;
- for i:=4 to 131 do begin
- crc_input := ord( xbuf[i] );
- calc_chk;
- end;
- finalize_crc_calc( xbuf );
- crc_mode := hold_mode;
- if crc_register <> crc_input then begin
- resp:=send_nak;
- exit;
- end;
- for i:=1 to 4 do
- recv_create_time[i] := tbuf.telink_create_time[i];
- recv_file_size := 0.0;
- for i:=4 downto 1 do
- recv_file_size := recv_file_size * 256.0 + tbuf.telink_file_size[i];
- recv_file_size := int( recv_file_size + 0.1 );
- resp := ACK;
- exit;
- end;
- end;
- resp:=send_nak;
- end;
-
- (****************************************************************************)
- (* RECEIVE FILE *)
- (****************************************************************************)
- procedure
- display_headings( y : integer );
- begin
- gotoxy(1,y);
- clreol;
- writeln;
- writeln(' Block Count Error Count Time');
- writeln(' ----------- ----------- --------');
- gotoxy(1,y+4);
- clreol;
- end;
-
- procedure
- display_counts( y : integer );
- begin
- curr_time := time;
- gotoxy(8,y);
- write(block_count:4);
- gotoxy(24,y);
- write(error_count:2);
- gotoxy(34,y);
- curr_time := time;
- writeln(delta_time(start_time,curr_time));
- end;
-
- procedure
- setup_crc_mode( yln : integer );
- begin
- xblocksize := 133;
- crc_mode := true;
- gotoxy(1,yln);
- write(' CRC Mode.');
- end;
-
- procedure
- xmodem_file_recv;
- var
- buf : strtype;
- response : char;
- cnt : byte;
- begin
- assign(recv_file,filename);
- rewrite(recv_file);
- xmodem_buf_cnt := 0;
- error_count := 0;
- block_count := 0;
- continue_transfer := true;
- display_headings( 2 );
- start_time := time + ' ';
- sync_with_remote;
- cnt := 0;
- buf := ' ';
- repeat
- store_sout_buffer( 'C' );
- recv_data(buf,133,9);
- cnt := succ(cnt);
- until ( buf[1] <> ' ' )
- or ( cnt = 2 );
- recv_file_size := 999999999.0;
- case buf[1] of
- SYN : begin
- setup_crc_mode( 7 );
- write(' Telink Mode ->',filename);
- end;
- SOH : begin
- setup_crc_mode( 7 );
- if batch_mode then write(' Modem7 Mode ->',filename);
- end;
- else
- xblocksize := 132;
- crc_mode := false;
- store_sout_buffer( NAK );
- recv_data(buf,132,40);
- end;
- while ( buf <> CAN )
- and ( buf <> EOT )
- and ( continue_transfer )
- do begin
- process_xmodem_buffer(buf,response);
- if continue_transfer then begin
- display_counts( 5 );
- sync_with_remote;
- store_sout_buffer( response );
- recv_data(buf,xblocksize,40);
- end;
- end;
- sync_with_remote;
- if not continue_transfer then begin
- store_sout_buffer( CAN );
- buf := CAN;
- end;
- if xmodem_buf_cnt > 0 then
- blockwrite(recv_file,xmodem_table_ptr^,xmodem_buf_cnt);
- if recv_file_size > 128.0 then
- close(recv_file);
- if buf = CAN then
- writeln(' File transfer canceled!')
- else begin
- store_sout_buffer( ACK );
- writeln(' File transfer complete.');
- end;
- gotoxy(1,7);
- clreol;
- end;
-
- (****************************************************************************)
- (* GET MODEM7 STYLE FILENAMES *)
- (****************************************************************************)
- procedure
- get_fname( var fbuf : string20; var st : char );
- var
- cnt : integer;
- chk : integer;
- c : char;
- outerloop : integer;
- m7d : integer;
- begin
- outerloop := 0;
- fbuf := '';
- cnt := 0;
- chk := ord( SUB );
- m7d := sync_time div 4;
- if m7d < 4 then m7d:=4;
- sync_with_remote;
- store_sout_buffer( NAK );
- repeat
- repeat
- cnt:=succ(cnt);
- if sin_store_ptr <> sin_read_ptr then begin
- c := read_sin_buffer;
- cnt := maxint;
- end
- else
- delay( m7d );
- until (cnt > 500);
- if cnt < maxint then begin
- st := CAN;
- exit;
- end;
- case c of
- ACK : begin
- if outerloop > 0 then begin
- st:=ACK;
- exit;
- end;
- end;
- EOT : begin
- st:=CAN;
- exit;
- end;
- CAN : begin
- st:=CAN;
- exit;
- end;
- BADNAME
- : begin
- st:=NAK;
- exit;
- end;
- SUB : store_sout_buffer( chr( lo( chk ) ) );
- else
- store_sout_buffer( ACK );
- fbuf := fbuf + c;
- chk := chk + ord( c );
- end;
- outerloop := succ(outerloop);
- until outerloop > 20;
- st:=CAN;
- end;
-
- procedure
- parse( s,l : integer; var f,t : strtype );
- var
- cnt : integer;
- lim : integer;
- begin
- cnt := s;
- lim := s+l;
- while ( cnt < lim ) and ( f[cnt] <> ' ' ) do begin
- t := t + f[cnt];
- cnt := succ(cnt);
- end;
- end;
-
- procedure
- recv_filename( var fn : strtype );
- var
- fbuf : string20;
- stat : char;
- cnt : byte;
- begin
- if length(fn) > 1 then
- fn := fn[1] + ':'
- else
- fn := '';
- cnt := 0;
- repeat
- cnt := succ(cnt);
- if cnt > 5 then
- stat := CAN
- else
- get_fname( fbuf, stat );
- until (stat = ACK) or (stat = CAN);
- if stat=CAN then
- fn := ''
- else begin
- parse(1,8,fbuf,fn);
- fn:=fn+'.';
- parse(9,3,fbuf,fn);
- if fn[length(fn)]='.' then fn[0]:= chr( ord(fn[0]) - 1 );
- end;
- end;
-
- (****************************************************************************)
- (* RECEIVE FILE EXECUTIVE *)
- (****************************************************************************)
- procedure
- receive_file;
- var
- hld_name : string40;
- begin
- mkwin(15,4,62,12,'Receive Xmodem');
- write(' Enter Filename to Receive: ');
- readln(filename);
- hld_name := filename;
- setserial(baud,stopbits,8,0);
- if filename[length(filename)] = '*' then begin
- batch_mode := true;
- recv_filename( filename );
- while length( filename ) > 0 do begin
- xmodem_file_recv;
- filename := hld_name;
- recv_filename( filename );
- end;
- end
- else begin
- if length( filename ) = 0 then begin
- rmwin;
- exit;
- end;
- batch_mode := false;
- xmodem_file_recv;
- end;
- setserial(baud,stopbits,databits,par);
- wait_for_key;
- rmwin;
- end;
-
- (****************************************************************************)
- (* ALLOCATE BUFFERS *)
- (****************************************************************************)
- procedure
- get_buffer;
- begin
- if xmodem_buf_cnt = 0 then begin
- xmodem_rd := 1;
- while ( xmodem_buf_cnt < max_xmodem_buffers ) and ( xmodem_rd <> 0 )
- do begin
- xmodem_buf_cnt := succ(xmodem_buf_cnt);
- blockread(xmit_file,xmodem_table_ptr^[xmodem_buf_cnt],1,xmodem_rd);
- end;
- xmodem_ptr := 0;
- end;
- xmodem_ptr := succ(xmodem_ptr);
- xmodem_buf_cnt := pred(xmodem_buf_cnt);
- end;
-
- (****************************************************************************)
- (* FORMAT XMODEM OUTPUT BUFFER *)
- (****************************************************************************)
- procedure
- build_xmodem_buffer(var xbuf : strtype );
- var
- i : integer;
- begin
- get_buffer;
- xbuf := SOH + chr(lo(block_count)) + chr(lo(block_count) xor $FF);
- crc_register := 0;
- for i:=1 to 128 do begin
- crc_input := ord( xmodem_table_ptr^[xmodem_ptr,i] );
- xbuf := xbuf + chr( crc_input );
- calc_chk;
- end;
- crc_input := 0;
- calc_chk;
- calc_chk;
- if crc_mode then
- xbuf := xbuf + chr( hi( crc_register ) );
- xbuf := xbuf + chr( lo( crc_register ) );
- end;
-
- (****************************************************************************)
- (* GET REMOTE RESPONSE *)
- (****************************************************************************)
- procedure
- get_response(var resp : char);
- var
- cnt : integer;
- answer_back : string10;
- begin
- cnt := 0;
- repeat
- recv_data(answer_back,1,40);
- cnt := succ(cnt);
- until ( cnt = 3 ) or ( answer_back <> '' );
- if ( answer_back[1] = CAN ) or ( answer_back = '' ) then begin
- continue_transfer := false;
- resp := CAN;
- end
- else
- resp := answer_back[1];
- end;
-
- (****************************************************************************)
- (* TRANSMIT FILE *)
- (****************************************************************************)
- procedure
- xmodem_file_xmit;
- var
- buf : strtype;
- response : char;
- cnt : integer;
- file_chars : real;
- file_blks : real;
- begin
- error_count := 0;
- setserial(baud,stopbits,8,0);
- file_chars := longfilesize( size_file );
- file_blks := file_chars / 128.0;
- xfilesize := trunc( file_blks + 0.001 );
- if frac( file_blks ) > 0.005 then
- xfilesize := succ( xfilesize );
- writeln(' File Size is ',xfilesize,' Blocks.');
- close( size_file );
- assign( xmit_file, filename );
- reset( xmit_file );
- xmodem_buf_cnt := 0;
- block_count := 1;
- continue_transfer := true;
- start_time := time;
- xmit_data('Holding for start of transfer...'+CRLF);
- writeln(' Waiting for start... ');
- writeln;
- cnt := 0;
- repeat
- get_response( response );
- cnt := succ( cnt );
- until ( response = NAK )
- or ( response = 'C' )
- or ( cnt = 3 );
- if response = 'C' then
- setup_crc_mode( 8 )
- else
- crc_mode := false;
- build_xmodem_buffer( buf );
- if response <> CAN then begin
- sync_with_remote;
- xmit_data( buf );
- get_response( response );
- gotoxy(1,3);
- display_headings( 3 );
- display_counts( 6 );
- end;
- while ( response <> EOT )
- and ( response <> CAN )
- and ( continue_transfer )
- do begin
- sync_with_remote;
- case response of
- NAK : begin
- error_count := succ(error_count);
- if error_count > 30 then
- ask_operator(response);
- sync_NAK;
- if continue_transfer then begin
- xmit_data( buf );
- get_response( response );
- end;
- end;
- ACK : begin
- if block_count = xfilesize then
- response := EOT
- else begin
- block_count := succ(block_count);
- build_xmodem_buffer( buf );
- xmit_data(buf);
- get_response( response );
- end;
- end;
- else
- response := NAK;
- error_count := succ(error_count);
- end;
- display_counts( 6 );
- end;
- sync_with_remote;
- if not continue_transfer then begin
- store_sout_buffer( CAN );
- response := CAN;
- end
- else begin
- cnt := 0;
- repeat
- store_sout_buffer( EOT );
- get_response( response );
- cnt := succ(cnt);
- until ( response = ACK ) or ( response = CAN ) or ( cnt = 5 );
- end;
- close(xmit_file);
- setserial(baud,stopbits,databits,par);
- if response = CAN then
- writeln(' File transfer canceled!')
- else
- writeln(' File transmission complete.');
- end;
-
- procedure
- transmit_file;
- begin
- mkwin(15,4,62,13,'Transmit Xmodem');
- repeat
- write(' Enter Filename to Transmit: ');
- readln(filename);
- if length(filename)=0 then begin
- rmwin;
- exit;
- end;
- assign(size_file,filename);
- {$I-}
- reset(size_file);
- {$I+}
- ok := (ioresult = 0);
- if not ok then
- writeln(' Cannot find file: ',filename);
- until ok;
- xmodem_file_xmit;
- wait_for_key;
- rmwin;
- end;
-
- (****************************************************************************)
- (* H E L P *)
- (****************************************************************************)
- procedure
- give_help;
- begin
- mkwin(31,1,75,24,'Commands List');
- writeln(' With Alt:');
- writeln(' T = Terminate and return to DOS.');
- writeln(' R = Receive using XMODEM protocol.');
- writeln(' X = Transmit using XMODEM protocol.');
- writeln(' A = Transmit using ASCII XON/XOFF.');
- writeln(' C = Toggle capture mode ON/OFF.');
- writeln(' L = Display the disk directory.');
- writeln(' N = New directory and/or drive.');
- writeln(' V = View file. K = Kill file.');
- writeln(' Y = Copy file. M = Macro key defs.');
- writeln(' P = Print file. I = Change config.');
- writeln(' U = Used time. F = Fix time.');
- writeln(' D = Dialing. O = Sort phone #s.');
- writeln(' G = Redial the previous number.');
- writeln(' S = Switch communication parameters.');
- writeln(' E = Toggle between FULL/HALF duplex.');
- writeln(' Q = Hang up. B = Set line BREAK.');
- writeln(' H = Help menu. W = Wipe the screen.');
- writeln(' With Ctrl:');
- writeln(' PrtSc = Toggle the printer.');
- writeln;
- wait_for_key;
- rmwin;
- end;
-
- (****************************************************************************)
- (* RECONFIGURE SYSTEM DEFAULTS *)
- (****************************************************************************)
- procedure
- change_defaults;
- begin
- default_chg := false;
- a_second := round( 3.003004 * wait_increment );
- if emulation_mode[1]<>'F' then silent_mode:=true;
- FG := FGcolor;
- BG := BGcolor;
- textcolor( FG );
- textbackground( BG );
- initwin;
- if split_screen <> old_screen then begin
- if split_screen[1]='T' then
- setup_split
- else
- clrscr;
- end;
- port[int_enable_reg] := 0; { Turn off modem and reset }
- port[modem_control_reg] := 0; { vectors. }
- port[$21] := port[$21] or turn_IRQ_off;
- memw[$0000:IRQ_vector_ofs] := hold_vector_ofs;
- memw[$0000:IRQ_vector_seg] := hold_vector_seg;
- init_com_port;
- if max_xmodem_buffers <> old_max then begin
- freemem( xmodem_table_ptr, old_max * 128 );
- getmem( xmodem_table_ptr, max_xmodem_buffers * 128 );
- end;
- end;
-
- procedure
- change_default( k : integer );
- var
- i,j : byte;
- ss : string10;
- begin
- i := 30;
- j := k+1;
- if k>19 then begin
- i := i + 39;
- j := j - 19;
- end;
- gotoxy(i,j);
- case k of
- 1 : num_input(com_port);
- 2 : num_input(default_stopbits);
- 3 : num_input(default_databits);
- 4 : begin
- str_input(parity_ch);
- parity_ch := upcase( parity_ch[1] );
- case parity_ch of
- 'N' : default_parity := 0;
- 'E' : default_parity := 1;
- 'O' : default_parity := 2;
- end;
- end;
- 5 : num_input(default_baud);
- 6 : num_input(wait_increment);
- 7 : str_input(dial_pre_str);
- 8 : str_input(dial_post_str);
- 9 : str_input(modem_init_str);
- 10 : str_input(speaker_on);
- 11 : str_input(speaker_off);
- 12 : num_input(redial_time);
- 13 : str_input(forced_carrier);
- 14 : num_input(carrier_timeout);
- 15 : begin
- str_input(dial_PATH);
- if dial_PATH[length(dial_PATH)] <> '\' then
- dial_PATH := dial_PATH + '\';
- end;
- 16 : num_input(XON);
- 17 : num_input(XOFF);
- 18 : str_input(emulation_mode);
- 19 : str_input(auto_LF);
- 20 : num_input(FGcolor);
- 21 : num_input(BGcolor);
- 22 : begin
- ss := comment_ch;
- str_input(ss);
- comment_ch := ss[1];
- end;
- 23 : str_input(split_screen);
- 24 : num_input(max_xmodem_buffers);
- end;
- end;
-
- procedure
- reconfigure_defaults;
- var
- i : integer;
- ds : string10;
- begin
- old_max := max_xmodem_buffers;
- old_screen := split_screen;
- default_chg := false;
- mkwin(1,1,80,24,'Reconfigure. Use: | for CR, ~ for delay.');
- writeln;
- writeln(' 1. COM Port Number ...... ',com_port);
- writeln(' 2. Number of Stopbits ... ',default_stopbits);
- writeln(' 3. Number of Databits ... ',default_databits);
- write (' 4. Parity Type .......... ');
- case default_parity of
- 0 : parity_ch := 'N';
- 1 : parity_ch := 'E';
- 2 : parity_ch := 'O';
- end;
- writeln(parity_ch);
- writeln(' 5. Baud Rate ............ ',default_baud);
- writeln(' 6. Time Base ............ ',wait_increment);
- writeln(' 7. Dial Pre-String ...... ',dial_pre_str);
- writeln(' 8. Dial Post-String ..... ',dial_post_str);
- writeln(' 9. Modem Init String .... ',modem_init_str);
- writeln(' 10. Speaker-On String .... ',speaker_on);
- writeln(' 11. Speaker-Off String ... ',speaker_off);
- writeln(' 12. Time Until Redial .... ',redial_time);
- writeln(' 13. Forced Carrier ....... ',forced_carrier);
- writeln(' 14. Carrier Timeout ...... ',carrier_timeout);
- writeln(' 15. Directory PATH ....... ',dial_PATH);
- writeln(' 16. XON char, decimal .... ',XON);
- writeln(' 17. XOFF char, decimal ... ',XOFF);
- writeln(' 18. Emulation Mode ....... ',emulation_mode);
- writeln(' 19. Auto Linefeed ........ ',auto_LF);
- gotoxy(42,2);
- write ('20. Foreground Color ..... ',FGcolor);
- gotoxy(42,3);
- write ('21. Background Color ..... ',BGcolor);
- gotoxy(42,4);
- write ('22. Comment Character .... ',comment_ch);
- gotoxy(42,5);
- write ('23. Split Screen Mode .... ',split_screen);
- gotoxy(42,6);
- write ('24. Xmodem Buffers ....... ',max_xmodem_buffers);
- gotoxy(2,22);
- write ('Enter the number to change or RETURN to exit: ');
- repeat
- gotoxy(48,22);
- clreol;
- read(ds);
- i:=bval(ds+' ');
- if i in [ 1..24 ] then begin
- default_chg := true;
- change_default(i);
- end
- else
- i:=0;
- until i=0;
- rmwin;
- if default_chg then begin
- upstring(forced_carrier);
- upstring(dial_PATH);
- upstring(speaker_on);
- upstring(speaker_off);
- upstring(dial_pre_str);
- upstring(dial_post_str);
- upstring(modem_init_str);
- upstring(emulation_mode);
- upstring(auto_LF);
- upstring(split_screen);
- if not ( max_xmodem_buffers in [ 4..255 ] ) then
- max_xmodem_buffers := 64;
- assign(textfile,cnf_PATH+'TMODEM.CNF');
- rewrite_config_file;
- close(textfile);
- end;
- end;