Category : Pascal Source Code
Archive   : INTRFC61.ZIP
Filename : SRCFILES.PAS
interface
uses dos,globals,util,dump,loader,head;
type
src_file_ptr = ^src_file_rec;
src_file_rec = record
filetype : byte;
w1 : word;
packed_date : longint;
filename : string;
end;
src_line_ptr = ^src_line_rec;
src_line_rec = record
owner_ofs,
src_ofs,
entry,startline,numlines : word;
end;
procedure print_src_files;
procedure print_src_lines;
implementation
function tf(w:word):string; { Time format of a number }
var
result : string[3]; { Use length 3 in to show errors }
begin
str(w,result);
if length(result) = 1 then
tf := '0'+result
else
tf := result;
end;
procedure print_src_files;
const
monthname : array[1..12] of string[9] = ('January','February',
'March','April','May',
'June','July','August',
'September','October',
'November','December');
var
thisfile : src_file_ptr;
ofs : word;
dt : datetime;
begin
writeln;
writeln('Source File Records');
ofs := header^.ofs_src_name;
while ofs < header^.ofs_line_lengths do
begin
thisfile := add_offset(buffer,ofs);
with thisfile^ do
begin
case filetype of
3 : write('Includes ');
4 : write('Main src ');
5 : write('Links to ');
else
write('Unknown file type ',filetype,' ');
end;
write(filename);
if packed_date <> 0 then
begin
unpacktime(packed_date,dt);
with dt do
write(' ':(15-length(filename)),tf(hour),':',tf(min),':',tf(sec),' ',monthname[month],' ',day,', ',year);
end;
if w1 <> 0 then
write(' w1 = ',w1);
writeln;
inc(ofs,sizeof(src_file_rec)-255+length(filename));
end;
end;
end;
procedure print_src_lines;
var
ofs : word;
line,i,codeofs : word;
thisrec : src_line_ptr;
obj : obj_ptr;
bytes_per_line : byte_array_ptr;
name : string;
src_file : src_file_ptr;
column : byte;
begin
writeln;
writeln('Source Line Numbers');
writeln;
column := 1;
ofs := header^.ofs_line_lengths;
if ofs = header^.sym_size then
writeln('(none)')
else
while ofs < header^.sym_size do
begin
thisrec := add_offset(buffer,ofs);
with thisrec^ do
begin
if owner_ofs <> 0 then
begin
obj := add_offset(buffer,owner_ofs);
name := obj^.name;
end
else
name := 'initialization code';
src_file := add_offset(buffer,header^.ofs_src_name+src_ofs);
writeln('Line number offsets for ',name,' in ',src_file^.filename);
bytes_per_line := add_offset(thisrec,sizeof(src_line_rec));
line := 0;
i := 0;
column := 0;
codeofs := entry;
while line < numlines do
begin
if bytes_per_line^[i] > 0 then
begin
write(startline+line:6,':',hexword(codeofs):4);
inc(column);
if column = 7 then
begin
column := 0;
writeln;
end;
if bytes_per_line^[i] >= $80 then
begin
inc(codeofs,$100*(bytes_per_line^[i]-$80)
+bytes_per_line^[i+1]);
inc(i);
end
else
inc(codeofs,bytes_per_line^[i]);
end;
inc(line);
inc(i);
end;
inc(ofs,sizeof(thisrec^)+i);
end;
if column <> 0 then
writeln;
end;
end;
end.
Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!
This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.
But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/