home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.barnyard.co.uk
/
2015.02.ftp.barnyard.co.uk.tar
/
ftp.barnyard.co.uk
/
cpm
/
walnut-creek-CDROM
/
CPM
/
TURBOPAS
/
TKERMIT.LBR
/
KINIT.PQS
/
KINIT.PAS
Wrap
Pascal/Delphi Source File
|
2000-06-30
|
5KB
|
135 lines
type
string1 = string[1];
string3 = string[3];
string80 = string[80];
string15 = string[15];
string100 = string[150];
state_vars = (send_init, send_file_header, send_file, send_eof,
send_break, receive_init, receive_header, receive_file,
send_bye, get_file);
state_type = array[state_vars] of string[30];
file_param = (ascii, binary);
file_type = array[file_param] of string[10];
parity_param = (no_parity, mark_parity, space_parity, even_parity,
odd_parity);
parity_type = array[parity_param] of string[10];
port_param = (console, comm, uc1);
port_type = array[port_param] of string[20];
packet_param = (break_pack, data_pack, error_pack, header_pack,
nak_pack, send_pack, reserved_pack, ack_pack,
end_pack, unknown);
f_modes = (read_open, write_open);
character = char;
const
version = 1.1; (* current version number *)
buffersize = 128; (* program is not set up for any other size right now *)
file_str : file_type = ('ASCII', 'Binary');
parity_str : parity_type = ('None', 'Mark', 'Space', 'Even', 'Odd');
port_str : port_type = ('Console', 'Reader/Punch', 'User Console');
state_str : state_type = ('send init', 'send file header', 'send file',
'send eof', 'send break', 'receive init',
'receive header', 'receive file', 'send bye',
'get file');
escape_char = $1c; (* ^\ control-backslash *)
bell = ^G;
init_packet_size = 40; (* use a small packet for testing *)
var
option, bs, cr, lf : char;
count : integer; (* general purpose count variable *)
line_command, arg1, arg2, arg3 : string[25]; (* more space for filename *)
line_buffer : string[80];
port : integer; (* port value to and/or with iobyte for port setting *)
done : boolean; (* dummy variable for main proc loop *)
file_type_var : file_param;
parity_type_var : parity_param;
port_type_var : port_param;
packet_type : packet_param;
state : state_vars; (* state variable for state switchers *)
packet_size, timeout, npad, end_of_line : integer;
pad, quote_char, quote_8, chk_type, repeat_char : char;
packet_buffer, packet_buffer_data, rec_packet : string[150];
packet_ok, ack_ok, open_ok, file_done, abort : boolean;
packet_num, rec_packet_num, packets_sent, packets_bad : integer;
outfile : file; (* untyped file for read or write *)
file_open : boolean;
file_mode : f_modes;
received_data : string[100];
quoting : boolean;
repeating : boolean;
printing : boolean;
print_mode : string[3];
my_pad_char, his_ctl_quote, his_quote_char : char;
my_pad_num, send_eol : integer;
debug : boolean;
debug_mode : string[3];
iobyte : byte absolute $0003; (* CP/M standard iobyte location *)
base_iobyte : byte; (* starting iobyte *)
port_iobyte : byte; (* iobyte for kermit comm port *)
retry : boolean; (* if you want to force a retry on send or receive packet *)
maxtry : integer;
fcb : array[1..36] of byte; (* fcb for dir command *)
dma : array[1..128] of byte; (* dma buffer for dir command *)
filebuffer : array[1..buffersize] of char; (* file record read *)
file_records : integer; (* number of 128 byte records in disk file *)
filepointer : integer; (* where we are in the record *)
buffer_num : integer; (* how many 128 byte records have we read or written *)
receive_done : boolean; (* signals the end of receive command *)
function tab(spaces : integer) : string80;
(* This function generates a string of spaces for formatting printing *)
var count : integer;
temp : string[80];
begin (* tab *)
temp := '';
for count := 1 to spaces do
temp := temp + ' ';
tab := temp;
end; (* tab *)
function ctl(character : char) : char;
(* This function transforms a character to/from a control character *)
begin
ctl := chr(ord(character) xor $40);
end;
function char40(number : integer) : char;
(* add 40 octal to a number for conversion to printable character *)
begin
char40 := chr(number + 32);
end;
function unchar(character : char) : integer;
(* subtract 40 octal from character for conversion back to a number *)
begin
unchar := ord(character) - 32;
end;
procedure ltrim(var line : string80);
(* removes leading spaces from a line for parsing the command line *)
begin (* ltrim *)
while line[1] = ' ' do
delete(line,1,1);
end; (* ltrim *)
procedure rtrim(var line: string80);
(* removes trailing spaces from a string to parse the command line *)
begin (* rtrim *)
while line[length(line)] = ' ' do
delete(line,length(line),1);
end; (* rtrim *)