Category : A Collection of Games for DOS and Windows
Archive   : EMPIREU.ZIP
Filename : ALLMAPS.PAS
Output of file : ALLMAPS.PAS contained in archive : EMPIREU.ZIP
{ Decode all maps in an EMPIRE EMSAVE.DAT }
var
EMSAVE : file of CHAR ;
MAPS : TEXT ;
const
BLANK = chr(32) ;
FF = chr(12) ;
MIN_COL = 1 ;
MAX_COL = 100 ;
MIN_ROW = 0 ;
MAX_ROW = 59 ;
WIDTH_ROW_LABEL = 3 ;
var
DID_ONE : BOOLEAN ;
DAY, HOUR, MINUTE, MONTH, ROUND, SECOND, YEAR : INTEGER ;
TOTAL_BYTES_READ : INTEGER ;
procedure ENSURE_ADDRESS( DESIRED_ADDRESS : INTEGER ) ;
var C : CHAR ;
begin
while TOTAL_BYTES_READ <> DESIRED_ADDRESS do
begin ;
READ(EMSAVE,C) ;
TOTAL_BYTES_READ := TOTAL_BYTES_READ + 1
end ;
end ;
procedure GET_1_CHAR( var C : CHAR ) ;
begin
READ(EMSAVE,C) ;
TOTAL_BYTES_READ := TOTAL_BYTES_READ + 1
end ;
procedure GET_1B_INT( DESIRED_ADDRESS : INTEGER ; var INT : INTEGER ) ;
var C : CHAR ;
begin
ENSURE_ADDRESS(DESIRED_ADDRESS) ;
GET_1_CHAR(C) ;
INT := ord(C)
end ;
procedure GET_2B_INT( DESIRED_ADDRESS : INTEGER ; var INT : INTEGER ) ;
var C : CHAR ;
LOW : INTEGER ;
begin
GET_1B_INT(DESIRED_ADDRESS,LOW) ;
GET_1_CHAR(C) ;
INT := ord(C)*256 + LOW
end ;
procedure LABEL_COLUMNS ;
var COL : INTEGER ;
begin
WRITE(MAPS,BLANK:WIDTH_ROW_LABEL) ;
COL := 10 ;
while COL <= MAX_COL do
begin
WRITE(MAPS,COL:10) ;
COL := COL + 10 ;
end ;
WRITELN(MAPS) ;
end ;
procedure DECODE_MAP( BASE_ADDRESS : INTEGER ;
ENCODED : BOOLEAN ;
const TITLE : LSTRING ) ;
var C : CHAR ;
COL, ROW : INTEGER ;
begin
ENSURE_ADDRESS(BASE_ADDRESS) ;
if DID_ONE then WRITE(MAPS,FF) ;
WRITELN(MAPS) ;
WRITELN(MAPS,TITLE,' from ', MONTH:1, '/', DAY:1, '/', YEAR:1,
' ', HOUR:2, ':', MINUTE:2, ':', SECOND:2, ', Round # ', ROUND:1) ;
WRITELN(MAPS) ;
LABEL_COLUMNS ;
for ROW := MIN_ROW to MAX_ROW do
begin
if ROW mod 10 = 0 then
WRITE(MAPS,ROW:2,BLANK)
else WRITE(MAPS,BLANK:WIDTH_ROW_LABEL) ;
for COL := MIN_COL to MAX_COL do
begin
READ(EMSAVE,C) ;
TOTAL_BYTES_READ := TOTAL_BYTES_READ + 1 ;
if ENCODED then
if COL <> 100 then C := chr( ord(C) + COL ) ;
WRITE(MAPS,C) ;
end ;
if ROW mod 10 = 0 then WRITE(MAPS,ROW:WIDTH_ROW_LABEL) ;
WRITELN(MAPS) ;
end ;
LABEL_COLUMNS ;
DID_ONE := TRUE ;
end ;
procedure OFFER_TO_DECODE_MAP( BASE_ADDRESS : INTEGER ;
ENCODED : BOOLEAN ;
const TITLE : LSTRING ) ;
var C : CHAR ;
begin
WRITE('Decode ',TITLE,'? ') ;
READLN(C) ;
if (C='y') or (C='Y') then DECODE_MAP(BASE_ADDRESS,ENCODED,TITLE) ;
end ;
begin
RESET(EMSAVE) ;
REWRITE(MAPS) ;
TOTAL_BYTES_READ := 0 ;
GET_2B_INT(#0022,ROUND ) ;
GET_2B_INT(#0026,YEAR ) ;
GET_1B_INT(#0028,DAY ) ;
GET_1B_INT(#0029,MONTH ) ;
GET_1B_INT(#002A,MINUTE) ;
GET_1B_INT(#002B,HOUR ) ;
GET_1B_INT(#002D,SECOND) ;
WRITELN(' Processing save file from ', MONTH:1, '/', DAY:1, '/', YEAR:1,
' ', HOUR:2, ':', MINUTE:2, ':', SECOND:2, ', Round # ', ROUND:1) ;
DID_ONE := FALSE ;
OFFER_TO_DECODE_MAP(#002F,TRUE ,'Computer''s Map') ;
OFFER_TO_DECODE_MAP(#17A0,TRUE ,'True Map') ;
OFFER_TO_DECODE_MAP(#2F11,FALSE,'Player''s Map') ;
OFFER_TO_DECODE_MAP(#4682,TRUE ,'Original Map') ;
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/