home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Best of Select: Games Special 11
/
CD_1.iso
/
wingames
/
corewar
/
demowar.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1995-08-01
|
2KB
|
84 lines
Program DemoWar;
{$A+,B-,D+,F-,G+,I+,K+,L+,N-,P+,Q+,R+,S+,T+,V+,W+,X+,Y+}
{$M 16384,8192}
{(C) Barbara Tikart Polarwolf Hard & Software, Erlenbach am Main}
Uses WinTypes, WinProcs, WinCrt, Strings, UseMars;
Var IP1, IP2, TMP: Integer;
IPCount: LongInt;
VM, H: TMarsHandle;
PRG1Name, PRG2Name, T: Array [0..255] Of Char;
Label ERROR, SIEG1, SIEG2, ENDE;
Begin
CmdShow := sw_ShowMaximized;
WriteLn ('*** CoreWar *** Demo der Schnittstelle zu MARS 1.0 *** (C) Polarwolf ***');
WriteLn;
Write ('Datei-Name von Programm 1:');
ReadLn (PRG1Name);
Write ('Datei-Name von Programm 2:');
ReadLn (PRG2Name);
VM := CreateMarsVM (8000);
Randomize;
If StrScan (PRG1Name, '.') = Nil Then StrCat (PRG1Name, '.RED');
LoadMarsObjCode (PRG1Name, H);
If H = 0 Then Goto ERROR;
IP1 := 0;
TMP := IP1;
LinkMarsPRG (VM, H, TMP); {Endadresse des Programms wird nicht ben÷tigt}
If TMP = IP1 Then Goto ERROR;
StrCopy (T, 'NAME');
If FindAttrInMarsObjCode (H, T, 254) Then StrCopy (PRG1Name, T);
DiscardMarsObjCode (H);
If StrScan (PRG2Name, '.') = Nil Then StrCat (PRG2Name, '.RED');
LoadMarsObjCode (PRG2Name, H);
If H = 0 Then Goto ERROR;
IP2 := Random (6000) +1000;
TMP := IP2;
LinkMarsPRG (VM, H, TMP); {Endadresse des Programms wird nicht ben÷tigt}
If TMP = IP2 Then Goto ERROR;
StrCopy (T, 'NAME');
If FindAttrInMarsObjCode (H, T, 254) Then StrCopy (PRG2Name, T);
DiscardMarsObjCode (H);
WriteLn ;
WriteLn ('Es tritt an: ', PRG1Name, ' gegen ', PRG2Name);
IPCount := 0;
Repeat
ExecMarsCmd (VM, IP1, TMP); {Adresse der modifizierten Speicherstelle wird nicht ben÷tigt}
If IP1 = -1 Then Goto SIEG2;
ExecMarsCmd (VM, IP2, TMP); {s.o.}
If IP2 = -1 Then Goto SIEG1;
Inc (IPCount);
If IPCount Mod 1024 = 0 Then Write ('.'); {Damit der Benutzer nicht einschlΣft}
Until IPCount = 100000; {1 1/4 Zeilen Punkte.... Das mu▀ reichen}
WriteLn;
WriteLn ('Der Kampf endet unentschieden.');
Goto ENDE;
SIEG1: WriteLn;
WriteLn (PRG1Name, ' hat den Kampf gewonnen.');
Goto ENDE;
SIEG2: WriteLn;
WriteLn (PRG2Name, ' hat den Kampf gewonnen.');
Goto ENDE;
ERROR: WriteLn;
WriteLn ('Leider ist ein Fehler aufgetreten.');
ENDE: DestroyMarsVM (VM)
End.