home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Columbia Kermit
/
kermit.zip
/
archives
/
ucsdappleii.tar.gz
/
ucsdappleii.tar
/
kerminit.text
< prev
next >
Wrap
Text File
|
1986-04-08
|
7KB
|
213 lines
(*>>>>>>>>>>>>KERMINIT>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*)
(*$I-*)
(*$R-*)
(*$S+*)
(*$V-*)
UNIT KERMINIT; INTRINSIC CODE 29;
INTERFACE
USES kermglob,
kermacia,
kermutil;
PROCEDURE initialize;
IMPLEMENTATION
PROCEDURE initialize;
reads system.miscinfo and the default parameter file kermit.data and
does other necessary initializations
PROCEDURE logo;
begin
page( output );
gotoxy(17,2); write('K E R M I T');
gotoxy(21,4); write('VERSION ', version );
gotoxy(28,5); write('for');
gotoxy(17,6); write('Apple ][(e) UCSD p-system');
gotoxy(10,17); write('Adapted from the IBM PC UCSD version by :');
gotoxy(24,19); write('P. Terpstra');
gotoxy(20,20); write('University Groningen');
gotoxy(23,21); write('Nijenborgh 16');
gotoxy(25,22); write('Groningen');
gotoxy(22,23); write('The Netherlands');
end; { logo }
PROCEDURE check_io ( io_status : integer; filename : string );
begin
if io_status <> 0 then
begin
io_error( io_status );
gotoxy( 50, error_line );
write( filename );
exit( program );
end;
end; { check_io }
PROCEDURE get_crt_info;
read system.miscinfo to get terminal independent screen operations
var byte : 0..255;
i : integer;
begin
reset( untyped_f, sys_misc_file );
check_io( ioresult, sys_misc_file );
i := blockread( untyped_f, file_buf[1], 1 );
if i <> 1 then check_io( 64, sys_misc_file );
close( untyped_f );
prefix := file_buf[63]; byte := ord( file_buf[73] );
prefixed[ sc_up ] := odd( byte ); {cursor up}
prefixed[ sc_right ] := odd( byte div 2 ); {cursor right}
prefixed[ sc_clreol ] := odd( byte div 4 ); {clear to end of line}
prefixed[ sc_clreos ] := odd( byte div 8 ); {clear to end of screen}
prefixed[ sc_home ] := odd( byte div 16 ); {cursor home}
prefixed[ sc_delchar ] := odd( byte div 32 ); {often not implemented}
prefixed[ sc_clrall ] := odd( byte div 64 ); {clear whole screen}
prefixed[ sc_clrline ] := odd( byte div 128 ); {often not implemented}
prefixed[ sc_left ] := false; {cursor left:no prefix in sys.miscinfo}
prefixed[ sc_down ] := false; {cursor down:no prefix in sys.miscinfo}
rlf := file_buf[68]; {reverse line feed: cursor up}
ndfs := file_buf[67]; {non destructive space forward: cursor right}
eraseol := file_buf[66]; {from cursor: clear to end of line}
eraseos := file_buf[65]; {from cursor: clear to end of screen}
home := file_buf[64]; {cursor to x=0, y=0}
delchar := file_buf[69]; {backspace with deleting: often same as backsp}
clrscreen := file_buf[72]; {clear whole screen}
clrline := file_buf[71]; {clear one whole line: often not possible}
backsp := chr( backspace ); {see kermglob: mostly chr(8) }
lf := chr( linefeed ); {see kermglob: mostly chr(10) }
cr := chr( eoline ); {see kermglob: mostly chr(13) }
ff := chr( formfeed ); {see kermglob: mostly chr(12) }
end; { procedure get_crt_info }
PROCEDURE read_defaults;
var temp : integer;
temp_bool : boolean;
begin
reset( def, setup_file );
check_io( ioresult, setup_file );
esc_char := chr( def^ ); get( def );
eoln_char := chr( def^ ); get( def );
my_quote := chr( def^ ); get( def );
my_pchar := chr( def^ ); get( def );
my_pad := def^ ; get( def );
soh_char := chr( def^ ); get( def );
int_key := chr( def^ ); get( def );
xon_char := chr( def^ ); get( def );
xoff_char := chr( def^ ); get( def );
xoff_w_time := def^ ; get( def );
max_pack := def^ ; get( def );
if (maxpack < 20) or (maxpack > def_maxpack) then maxpack := def_maxpack;
max_try := def^ ; get( def );
my_time := def^ ; get( def );
if my_time < 1 then my_time := 1 else if my_time > 31 then my_time := 31;
half_duplex := odd( def^ ); get( def );
debug := odd( def^ ); get( def );
fwarn := odd( def^ ); get( def );
text_file := odd( def^ ); get( def );
no_ffeed := odd( def^ ); get( def );
rejectcntrlchar := odd( def^ ); get( def );
temp_bool := odd( def^ ); get( def );
if temp_bool then bs_to_del := chr(del) else bs_to_del := backsp;
temp := def^ ; get( def );
acia_implem := unknown;
if temp = 1 then acia_implem := A6551;
if temp = 2 then acia_implem := A6850;
acia_comm_reg := def^ ; get( def );
acia_cntrl_reg := def^ ; get( def );
new_baud := def^ ; get( def );
new_dbit := def^ ; get( def );
new_stopbit := def^ ; get( def );
temp := def^ ; get( def );
new_par := no_par;
case temp of
0 : new_par := no_par;
1 : new_par := odd_par;
2 : new_par := even_par;
3 : new_par := mark_par;
4 : new_par := space_par;
end;
temp := def^ ;
if temp = 80 then begin
no_sfb_char := no_sp_char;
sfb_char := stop_flush_break_sp_char;
end
else begin
no_sfb_char := scr_40_sp_char;
sfb_char := all_sp_char;
end;
close( def );
end; { read_defaults }
PROCEDURE other_defaults;
begin
ibm := false;
emulate := false;
pr_out := false;
xdle_char := chr( xdle );
xeol_char := eoln_char;
quote := my_quote;
pad := my_pad;
pad_char := my_pchar;
xtime := my_time;
prefix_vol:= ':';
init_try := 5 * max_try;
print_enable := test_printer;
err_string := 'Error at host';
reset( p, cs_file );
ctl_set := [ chr(0)..chr(31), chr(del) ];
check_apple_char( no_sfb_char );
check_apple_char( mask_msbit_remin );
with controlword do
begin
channel := inp;
purpose := status;
reserved:= 0;
special_req := none;
filler := 0
end;
baud := new_baud;
if (acia_implem=A6551) or (acia_implem=A6850)
then begin
set_acia_parms( new_par, new_dbit, new_stopbit, new_baud );
get_acia_parms( parity, databit, stopbit, baud );
end
else begin
parity := new_par;
stopbit := new_stopbit;
databit := new_dbit;
end;
end; { other_defaults }
begin { initialize }
logo;
get_crt_info;
read_defaults;
other_defaults;
writeln;
writeln;
end; { initialize }
begin
end. { kerminit }