Countless imporvements to the parser and countless help to the parser in sources.
Now parser is able to parse the whole engine \o/
--- a/hedgewars/GSHandlers.inc Sun Nov 27 19:34:08 2011 +0300
+++ b/hedgewars/GSHandlers.inc Sun Nov 27 23:13:22 2011 +0300
@@ -4045,7 +4045,7 @@
continue;
end
else
- if not (Gear^.dX*ox + Gear^.dY*oy).isNegative then
+ if not ((Gear^.dX*ox + Gear^.dY*oy).isNegative) then
continue;
isbullet:= (iterator^.Kind in [gtShotgunShot, gtDEagleShot, gtSniperRifleShot, gtSineGunShot]);
@@ -4105,7 +4105,7 @@
ny := Gear^.dX;
// ... decide where the top is based on the hog's direction when firing the portal
if Gear^.Elasticity.isNegative then
- nx.isNegative := not nx.isNegative
+ nx.isNegative := (not nx.isNegative)
else
ny.isNegative := not ny.isNegative;
@@ -4137,7 +4137,7 @@
nx := conPortal^.dY;
ny := conPortal^.dX;
if conPortal^.Elasticity.isNegative then
- nx.isNegative := not nx.isNegative
+ nx.isNegative := (not nx.isNegative)
else
ny.isNegative := not ny.isNegative;
@@ -4364,7 +4364,7 @@
newPortal^.IntersectGear := nil;
if CurrentHedgehog <> nil then
- With CurrentHedgehog^ do
+ with CurrentHedgehog^ do
begin
CurWeapon:= GetAmmoEntry(CurrentHedgehog^);
// let's save the HH's dX's direction so we can decide where the "top" of the portal hole
--- a/hedgewars/HHHandlers.inc Sun Nov 27 19:34:08 2011 +0300
+++ b/hedgewars/HHHandlers.inc Sun Nov 27 23:13:22 2011 +0300
@@ -1129,7 +1129,7 @@
end;
if (Gear^.Message and (gmAllStoppable or gmLJump or gmHJump) = 0) and
(Gear^.State and (gstHHJumping or gstHHHJump or gstAttacking) = 0) and
- not Gear^.dY.isNegative and
+ (not Gear^.dY.isNegative) and
(GameTicks mod (100*LongWOrd(hwRound(cMaxWindSpeed*2/cGravity))) = 0) and
(TestCollisionYwithGear(Gear, 1) and lfIce <> 0) then
begin
--- a/hedgewars/LuaPas.pas Sun Nov 27 19:34:08 2011 +0300
+++ b/hedgewars/LuaPas.pas Sun Nov 27 23:13:22 2011 +0300
@@ -15,7 +15,7 @@
{$INCLUDE "config.inc"}
type
- size_t = type Cardinal;
+ size_t = Cardinal;
Psize_t = ^size_t;
PPointer = ^Pointer;
@@ -45,8 +45,8 @@
** ===================================================================
*)
type
- LUA_NUMBER_ = type Double; // ending underscore is needed in Pascal
- LUA_INTEGER_ = type PtrInt;
+ LUA_NUMBER_ = Double; // ending underscore is needed in Pascal
+ LUA_INTEGER_ = PtrInt;
(*
@@ LUA_IDSIZE gives the maximum size for the description of the source
@@ -115,7 +115,7 @@
LUA_AUTHORS = 'R. Ierusalimschy, L. H. de Figueiredo & W. Celes';
(* mark for precompiled code (`<esc>Lua') *)
- LUA_SIGNATURE = #27'Lua';
+ LUA_SIGNATURE = #27 + 'Lua';
(* option for multiple returns in `lua_pcall' and `lua_call' *)
LUA_MULTRET = -1;
@@ -429,8 +429,8 @@
function lua_getgccount(L : Plua_State) : LongInt;
type
- lua_Chuckreader = type lua_Reader;
- lua_Chuckwriter = type lua_Writer;
+ lua_Chuckreader = lua_Reader;
+ lua_Chuckwriter = lua_Writer;
(* ====================================================================== *)
@@ -983,7 +983,7 @@
begin
if not(B^.p < B^.buffer + LUAL_BUFFERSIZE) then
luaL_prepbuffer(B);
- B^.p^ := c;
+ (B^.p^) := c;
Inc(B^.p);
end;
--- a/hedgewars/uAIAmmoTests.pas Sun Nov 27 19:34:08 2011 +0300
+++ b/hedgewars/uAIAmmoTests.pas Sun Nov 27 23:13:22 2011 +0300
@@ -470,7 +470,7 @@
EY:= hwRound(y);
until TestCollExcludingMe(Me, EX, EY, 5) or (EY > cWaterLine);
- if (EY < cWaterLine) and not dY.isNegative then
+ if (EY < cWaterLine) and (not dY.isNegative) then
begin
value:= RateExplosion(Me, EX, EY, 91);
if (value = 0) then
--- a/hedgewars/uChat.pas Sun Nov 27 19:34:08 2011 +0300
+++ b/hedgewars/uChat.pas Sun Nov 27 23:13:22 2011 +0300
@@ -327,7 +327,7 @@
SendIPC('s' + s);
if copy(s, 1, 4) = '/me ' then
- s:= #2'* ' + UserNick + ' ' + copy(s, 5, Length(s) - 4)
+ s:= #2 + '* ' + UserNick + ' ' + copy(s, 5, Length(s) - 4)
else
s:= #1 + UserNick + ': ' + s;
--- a/hedgewars/uCollisions.pas Sun Nov 27 19:34:08 2011 +0300
+++ b/hedgewars/uCollisions.pas Sun Nov 27 23:13:22 2011 +0300
@@ -393,7 +393,7 @@
i, j, k, mx, my, li, ri, jfr, jto, tmpo : ShortInt;
tmpx, tmpy: LongWord;
dx, dy, s: hwFloat;
- offset: Array[0..7,0..1] of ShortInt;
+ offset: array[0..7,0..1] of ShortInt;
isColl: Boolean;
begin
@@ -523,7 +523,7 @@
function CalcSlopeBelowGear(Gear: PGear): hwFloat;
var dx, dy: hwFloat;
collX, i, y, x, gx, sdx, sdy: LongInt;
- isColl, succ: Boolean;
+ isColl, bSucc: Boolean;
begin
@@ -560,13 +560,13 @@
sdx:= 0;
sdy:= 0;
- succ := CalcSlopeTangent(Gear, collX, y, sdx, sdy, 255);
+ bSucc := CalcSlopeTangent(Gear, collX, y, sdx, sdy, 255);
// restore original dx/dy
Gear^.dX := dx;
Gear^.dY := dy;
- if succ and (sdx <> 0) and (sdy <> 0) then
+ if bSucc and (sdx <> 0) and (sdy <> 0) then
begin
dx := int2hwFloat(sdy) / (abs(sdx) + abs(sdy));
dx.isNegative := (sdx * sdy) < 0;
--- a/hedgewars/uCommandHandlers.pas Sun Nov 27 19:34:08 2011 +0300
+++ b/hedgewars/uCommandHandlers.pas Sun Nov 27 23:13:22 2011 +0300
@@ -214,7 +214,7 @@
if CheckNoTeamOrHH then exit;
if not CurrentTeam^.ExtDriven then SendIPC('l');
with CurrentHedgehog^.Gear^ do
- Message:= Message and not (gmLeft and InputMask);
+ Message:= Message and (not (gmLeft and InputMask));
ScriptCall('onLeftUp');
end;
@@ -235,7 +235,7 @@
if CheckNoTeamOrHH then exit;
if not CurrentTeam^.ExtDriven then SendIPC('r');
with CurrentHedgehog^.Gear^ do
- Message:= Message and not (gmRight and InputMask);
+ Message:= Message and (not (gmRight and InputMask));
ScriptCall('onRightUp');
end;
@@ -256,7 +256,7 @@
if CheckNoTeamOrHH then exit;
if not CurrentTeam^.ExtDriven then SendIPC('u');
with CurrentHedgehog^.Gear^ do
- Message:= Message and not (gmUp and InputMask);
+ Message:= Message and (not (gmUp and InputMask));
ScriptCall('onUpUp');
end;
@@ -277,7 +277,7 @@
if CheckNoTeamOrHH then exit;
if not CurrentTeam^.ExtDriven then SendIPC('d');
with CurrentHedgehog^.Gear^ do
- Message:= Message and not (gmDown and InputMask);
+ Message:= Message and (not (gmDown and InputMask));
ScriptCall('onDownUp');
end;
@@ -298,7 +298,7 @@
if CheckNoTeamOrHH then exit;
if not CurrentTeam^.ExtDriven then SendIPC('z');
with CurrentHedgehog^.Gear^ do
- Message:= Message and not (gmPrecise and InputMask);
+ Message:= Message and (not (gmPrecise and InputMask));
ScriptCall('onPreciseUp');
end;
@@ -350,7 +350,7 @@
begin
if not CurrentTeam^.ExtDriven and
((Message and gmAttack) <> 0) then SendIPC('a');
- Message:= Message and not (gmAttack and InputMask);
+ Message:= Message and (not (gmAttack and InputMask));
ScriptCall('onAttackUp');
end
end;
@@ -505,7 +505,7 @@
if bShowAmmoMenu then bShowAmmoMenu:= false
else if ((Gear^.State and (gstAttacking or gstAttacked)) <> 0) or
((MultiShootAttacks > 0) and ((Ammoz[CurAmmoType].Ammo.Propz and ammoprop_NoRoundEnd) = 0)) or
- ((Gear^.State and gstHHDriven) = 0) then else bShowAmmoMenu:= true
+ ((Gear^.State and gstHHDriven) = 0) then begin end else bShowAmmoMenu:= true
end;
end
end;
--- a/hedgewars/uGears.pas Sun Nov 27 19:34:08 2011 +0300
+++ b/hedgewars/uGears.pas Sun Nov 27 23:13:22 2011 +0300
@@ -653,7 +653,7 @@
inc(KilledHHs);
RecountTeamHealth(team);
- if (CurrentHedgehog <> nil) and CurrentHedgehog^.Effects[heResurrectable] and not Gear^.Hedgehog^.Effects[heResurrectable] then
+ if (CurrentHedgehog <> nil) and CurrentHedgehog^.Effects[heResurrectable] and (not Gear^.Hedgehog^.Effects[heResurrectable]) then
with CurrentHedgehog^ do
begin
inc(Team^.stats.AIKills);
@@ -698,9 +698,9 @@
if (Gear^.Hedgehog^.Team = CurrentTeam) and
(Gear^.Damage <> Gear^.Karma) and
- not Gear^.Hedgehog^.King and
- not Gear^.Hedgehog^.Effects[hePoisoned] and
- not SuddenDeathDmg then
+ (not Gear^.Hedgehog^.King) and
+ (not Gear^.Hedgehog^.Effects[hePoisoned]) and
+ (not SuddenDeathDmg) then
Gear^.State:= Gear^.State or gstLoser;
spawnHealthTagForHH(Gear, dmg);
@@ -863,7 +863,7 @@
stHealth: begin
if (cWaterRise <> 0) or (cHealthDecrease <> 0) then
begin
- if (TotalRounds = cSuddenDTurns) and not SuddenDeath and not isInMultiShoot then
+ if (TotalRounds = cSuddenDTurns) and (not SuddenDeath) and (not isInMultiShoot) then
begin
SuddenDeath:= true;
if cHealthDecrease <> 0 then
@@ -884,13 +884,13 @@
MusicFN:= SDMusic;
ChangeMusic
end
- else if (TotalRounds < cSuddenDTurns) and not isInMultiShoot then
+ else if (TotalRounds < cSuddenDTurns) and (not isInMultiShoot) then
begin
i:= cSuddenDTurns - TotalRounds;
s:= inttostr(i);
if i = 1 then
AddCaption(trmsg[sidRoundSD], cWhiteColor, capgrpGameState)
- else if i in [2, 5, 10, 15, 20, 25, 50, 100] then
+ else if (i = 2) or ((i > 0) and ((i mod 50 = 0) or ((i <= 25) and (i mod 5 = 0)))) then
AddCaption(Format(trmsg[sidRoundsSD], s), cWhiteColor, capgrpGameState);
end;
end;
@@ -940,14 +940,14 @@
begin
dec(delay2);
- if ((delay2 mod cInactDelay) = 0) and (CurrentHedgehog <> nil) and (CurrentHedgehog^.Gear <> nil) and not CurrentHedgehog^.Unplaced then
+ if ((delay2 mod cInactDelay) = 0) and (CurrentHedgehog <> nil) and (CurrentHedgehog^.Gear <> nil) and (not CurrentHedgehog^.Unplaced) then
begin
if (CurrentHedgehog^.Gear^.State and gstAttacked <> 0) and (Ammoz[CurrentHedgehog^.CurAmmoType].Ammo.Propz and ammoprop_NeedTarget <> 0) then
begin
CurrentHedgehog^.Gear^.State:= CurrentHedgehog^.Gear^.State or gstHHChooseTarget;
isCursorVisible := true
end;
- CurrentHedgehog^.Gear^.State:= CurrentHedgehog^.Gear^.State and not gstAttacked;
+ CurrentHedgehog^.Gear^.State:= CurrentHedgehog^.Gear^.State and (not gstAttacked);
end;
if delay2 = 0 then
begin
@@ -969,7 +969,7 @@
if TurnTimeLeft > 0 then
if CurrentHedgehog^.Gear <> nil then
if ((CurrentHedgehog^.Gear^.State and gstAttacking) = 0)
- and not isInMultiShoot then
+ and (not isInMultiShoot) then
begin
if (TurnTimeLeft = 5000)
and (cHedgehogTurnTime >= 10000)
@@ -1067,7 +1067,7 @@
t:= t^.NextGear
end;
- if ((GameFlags and gfResetWeps) <> 0) and not PlacingHogs then
+ if ((GameFlags and gfResetWeps) <> 0) and (not PlacingHogs) then
ResetWeapons;
if (GameFlags and gfResetHealth) <> 0 then
@@ -1121,7 +1121,7 @@
end;
if ((GameFlags and gfKarma) <> 0) and
((GameFlags and gfInvulnerable) = 0) and
- not CurrentHedgehog^.Gear^.Invulnerable then
+ (not CurrentHedgehog^.Gear^.Invulnerable) then
begin // this cannot just use Damage or it interrupts shotgun and gets you called stupid
inc(CurrentHedgehog^.Gear^.Karma, tmpDmg);
CurrentHedgehog^.Gear^.LastDamage := CurrentHedgehog;
@@ -1328,7 +1328,7 @@
Gear^.Active:= true;
if Gear^.Kind <> gtFlame then FollowGear:= Gear
end;
- if ((Mask and EXPLPoisoned) <> 0) and (Gear^.Kind = gtHedgehog) and not Gear^.Invulnerable then
+ if ((Mask and EXPLPoisoned) <> 0) and (Gear^.Kind = gtHedgehog) and (not Gear^.Invulnerable) then
Gear^.Hedgehog^.Effects[hePoisoned] := true;
end;
@@ -1479,7 +1479,7 @@
Gear^.State:= Gear^.State or gstWinner;
if (Gear^.Kind = gtExplosives) and (Ammo^.Kind = gtBlowtorch) then
begin
- if (Ammo^.Hedgehog^.Gear <> nil) then Ammo^.Hedgehog^.Gear^.State:= Ammo^.Hedgehog^.Gear^.State and not gstNotKickable;
+ if (Ammo^.Hedgehog^.Gear <> nil) then Ammo^.Hedgehog^.Gear^.State:= Ammo^.Hedgehog^.Gear^.State and (not gstNotKickable);
ApplyDamage(Gear, Ammo^.Hedgehog, tmpDmg * 100, dsUnknown); // crank up damage for explosives + blowtorch
end;
@@ -1964,7 +1964,7 @@
dec(Delta, 60)
until (cnt2 > 0) or (Delta < 70);
- if (cnt2 = 0) and skipProximity and not reallySkip then tryAgain:= true
+ if (cnt2 = 0) and skipProximity and (not reallySkip) then tryAgain:= true
else tryAgain:= false;
reallySkip:= true;
end;
--- a/hedgewars/uGearsRender.pas Sun Nov 27 19:34:08 2011 +0300
+++ b/hedgewars/uGearsRender.pas Sun Nov 27 23:13:22 2011 +0300
@@ -197,7 +197,7 @@
HH:= Gear^.Hedgehog;
if HH^.Unplaced then exit;
m:= 1;
- if ((Gear^.State and gstHHHJump) <> 0) and not cArtillery then m:= -1;
+ if ((Gear^.State and gstHHHJump) <> 0) and (not cArtillery) then m:= -1;
sx:= ox + 1; // this offset is very common
sy:= oy - 3;
sign:= hwSign(Gear^.dX);
@@ -542,7 +542,7 @@
begin
if (TWave(Gear^.Tag) < Low(TWave)) or (TWave(Gear^.Tag) > High(TWave)) then
begin
- Gear^.State:= Gear^.State and not gstAnimation;
+ Gear^.State:= Gear^.State and (not gstAnimation);
end
else
begin
@@ -805,7 +805,7 @@
with HH^ do
begin
- if ((Gear^.State and not gstWinner) = 0)
+ if ((Gear^.State and (not gstWinner)) = 0)
or ((Gear^.State = gstWait) and (Gear^.dY.QWordValue = 0))
or (bShowFinger and ((Gear^.State and gstHHDriven) <> 0)) then
begin
--- a/hedgewars/uIO.pas Sun Nov 27 19:34:08 2011 +0300
+++ b/hedgewars/uIO.pas Sun Nov 27 23:13:22 2011 +0300
@@ -142,8 +142,7 @@
procedure IPCCheckSock;
const ss: shortstring = '';
var i: LongInt;
- buf: array[0..255] of byte;
- s: shortstring absolute buf;
+ s: shortstring;
begin
if IPCSock = nil then
exit;
@@ -153,10 +152,10 @@
while SDLNet_CheckSockets(fds, 0) > 0 do
begin
- i:= SDLNet_TCP_Recv(IPCSock, @buf[1], 255 - Length(ss));
+ i:= SDLNet_TCP_Recv(IPCSock, @s[1], 255 - Length(ss));
if i > 0 then
begin
- buf[0]:= i;
+ s[0]:= char(i);
ss:= ss + s;
while (Length(ss) > 1) and (Length(ss) > byte(ss[1])) do
begin
@@ -171,8 +170,7 @@
var f: file;
ss: shortstring = '';
i: LongInt;
- buf: array[0..255] of byte;
- s: shortstring absolute buf;
+ s: shortstring;
begin
// set RDNLY on file open
@@ -184,12 +182,12 @@
tryDo(IOResult = 0, 'Error opening file ' + fileName, true);
i:= 0; // avoid compiler hints
-buf[0]:= 0;
+s[0]:= #0;
repeat
- BlockRead(f, buf[1], 255 - Length(ss), i);
+ BlockRead(f, s[1], 255 - Length(ss), i);
if i > 0 then
begin
- buf[0]:= i;
+ s[0]:= char(i);
ss:= ss + s;
while (Length(ss) > 1)and(Length(ss) > byte(ss[1])) do
begin
@@ -315,7 +313,7 @@
end;
'b': begin
s:= copy(headcmd^.str, 2, Pred(headcmd^.len));
- ParseCommand('chatmsg '#4 + s, true);
+ ParseCommand('chatmsg ' + #4 + s, true);
WriteLnToConsole(s)
end;
// TODO: deprecate 'F'
--- a/hedgewars/uLand.pas Sun Nov 27 19:34:08 2011 +0300
+++ b/hedgewars/uLand.pas Sun Nov 27 23:13:22 2011 +0300
@@ -38,7 +38,7 @@
uses uConsole, uStore, uRandom, uLandObjects, uIO, uLandTexture, sysutils,
uVariables, uUtils, uCommands, Adler32, uDebug, uLandPainted, uTextures;
-operator=(const a, b: direction) c: Boolean;
+operator = (const a, b: direction) c: Boolean;
begin
c := (a.x = b.x) and (a.y = b.y);
end;
@@ -685,7 +685,7 @@
if getrandom(2) = 1 then next_dir_clockwise := true
else next_dir_clockwise := false;
-while (tries < 5) and not found_cell do
+while (tries < 5) and (not found_cell) do
begin
if when_seen(x + dir.x, y + dir.y) = current_step then //we are seeing ourselves, try another direction
begin
@@ -1076,7 +1076,7 @@
else if (Land[y, x+1] = lfBasic) and (LandPixels[y, x+1] and AMask <> 0) then LandPixels[y, x]:= LandPixels[y, x+1]
else if (Land[y-1, x] = lfBasic) and (LandPixels[y-1, x] and AMask <> 0) then LandPixels[y, x]:= LandPixels[y-1, x]
else if (Land[y+1, x] = lfBasic) and (LandPixels[y+1, x] and AMask <> 0) then LandPixels[y, x]:= LandPixels[y+1, x];
- if (((LandPixels[y,x] and AMask) shr AShift) > 10) then LandPixels[y,x]:= (LandPixels[y,x] and not AMask) or (128 shl AShift)
+ if (((LandPixels[y,x] and AMask) shr AShift) > 10) then LandPixels[y,x]:= (LandPixels[y,x] and (not AMask)) or (128 shl AShift)
end;
Land[y,x]:= lfObject
end
@@ -1096,7 +1096,7 @@
else if (Land[y, x+1] = lfBasic) and (LandPixels[y,x+1] and AMask <> 0) then LandPixels[y, x]:= LandPixels[y, x+1]
else if (Land[y+1, x] = lfBasic) and (LandPixels[y+1,x] and AMask <> 0) then LandPixels[y, x]:= LandPixels[y+1, x]
else if (Land[y-1, x] = lfBasic) and (LandPixels[y-1,x] and AMask <> 0) then LandPixels[y, x]:= LandPixels[y-1, x];
- if (((LandPixels[y,x] and AMask) shr AShift) > 10) then LandPixels[y,x]:= (LandPixels[y,x] and not AMask) or (64 shl AShift)
+ if (((LandPixels[y,x] and AMask) shr AShift) > 10) then LandPixels[y,x]:= (LandPixels[y,x] and (not AMask)) or (64 shl AShift)
end;
Land[y,x]:= lfObject
end;
--- a/hedgewars/uLandGraphics.pas Sun Nov 27 19:34:08 2011 +0300
+++ b/hedgewars/uLandGraphics.pas Sun Nov 27 23:13:22 2011 +0300
@@ -298,7 +298,7 @@
begin
by:= t div 2; bx:= i div 2;
end;
- if ((Land[t, i] and lfBasic) <> 0) and (((LandPixels[by,bx] and AMask) shr AShift) = 255) and not (disableLandBack) then
+ if ((Land[t, i] and lfBasic) <> 0) and (((LandPixels[by,bx] and AMask) shr AShift) = 255) and (not disableLandBack) then
begin
inc(cnt);
LandPixels[by, bx]:= LandBackPixel(i, t)
@@ -676,7 +676,7 @@
4: for y:= 0 to Pred(h) do
begin
for x:= 0 to Pred(w) do
- if PLongword(@(p^[x * 4]))^ <> 0 then
+ if (PLongword(@(p^[x * 4]))^) <> 0 then
if ((cpY + y) <= Longint(topY)) or
((cpY + y) >= LAND_HEIGHT) or
((cpX + x) <= Longint(leftX)) or
@@ -705,7 +705,7 @@
4: for y:= 0 to Pred(h) do
begin
for x:= 0 to Pred(w) do
- if PLongword(@(p^[x * 4]))^ <> 0 then
+ if (PLongword(@(p^[x * 4]))^) <> 0 then
begin
if (cReducedQuality and rqBlurryLand) = 0 then
begin
@@ -781,7 +781,7 @@
if c < 4 then // 0-3 neighbours
begin
- if ((Land[Y, X] and lfBasic) <> 0) and not disableLandBack then
+ if ((Land[Y, X] and lfBasic) <> 0) and (not disableLandBack) then
LandPixels[yy, xx]:= LandBackPixel(X, Y)
else
LandPixels[yy, xx]:= 0;
@@ -804,7 +804,7 @@
begin
if (cReducedQuality and rqBlurryLand) = 0 then
begin
- if ((LandPixels[y,x] and AMask) shr AShift) < 10 then LandPixels[y,x]:= (cExplosionBorderColor and not AMask) or (128 shl AShift)
+ if ((LandPixels[y,x] and AMask) shr AShift) < 10 then LandPixels[y,x]:= (cExplosionBorderColor and (not AMask)) or (128 shl AShift)
else
LandPixels[y,x]:=
(((((LandPixels[y,x] and RMask shr RShift) div 2)+((cExplosionBorderColor and RMask) shr RShift) div 2) and $FF) shl RShift) or
@@ -826,7 +826,7 @@
begin
if (cReducedQuality and rqBlurryLand) = 0 then
begin
- if ((LandPixels[y,x] and AMask) shr AShift) < 10 then LandPixels[y,x]:= (cExplosionBorderColor and not AMask) or (64 shl AShift)
+ if ((LandPixels[y,x] and AMask) shr AShift) < 10 then LandPixels[y,x]:= (cExplosionBorderColor and (not AMask)) or (64 shl AShift)
else
LandPixels[y,x]:=
(((((LandPixels[y,x] and RMask shr RShift) * 3 div 4)+((cExplosionBorderColor and RMask) shr RShift) div 4) and $FF) shl RShift) or
--- a/hedgewars/uLandObjects.pas Sun Nov 27 19:34:08 2011 +0300
+++ b/hedgewars/uLandObjects.pas Sun Nov 27 23:13:22 2011 +0300
@@ -192,7 +192,7 @@
k:= CountNonZeroz(x2, y)
until (x2 >= (rightX-150)) or (k = 0) or (k = 16) or (x2 > i) or (x2 - x1 >= 768);
if (x2 < (rightX - 150)) and (k = 16) and (x2 - x1 > 250) and (x2 - x1 < 768)
- and not CheckIntersect(x1 - 32, y - 64, x2 - x1 + 64, 144) then break;
+ and (not CheckIntersect(x1 - 32, y - 64, x2 - x1 + 64, 144)) then break;
end;
x1:= 0;
until y > (LAND_HEIGHT-125);
@@ -345,7 +345,7 @@
y:= 8;
repeat
if CheckLand(r, x, y - 8, lfBasic)
- and not CheckIntersect(x, y, Width, Height) then
+ and (not CheckIntersect(x, y, Width, Height)) then
begin
ar[cnt].x:= x;
ar[cnt].y:= y;
--- a/hedgewars/uLocale.pas Sun Nov 27 19:34:08 2011 +0300
+++ b/hedgewars/uLocale.pas Sun Nov 27 23:13:22 2011 +0300
@@ -58,7 +58,7 @@
begin
readln(f, s);
if Length(s) = 0 then continue;
- if not (s[1] in ['0'..'9']) then continue;
+ if (s[1] < '0') or (s[1] > '9') then continue;
TryDo(Length(s) > 6, 'Load locale: empty string', true);
val(s[1]+s[2], a, c);
TryDo(c = 0, 'Load locale: numbers should be two-digit: ' + s, true);
--- a/hedgewars/uScript.pas Sun Nov 27 19:34:08 2011 +0300
+++ b/hedgewars/uScript.pas Sun Nov 27 23:13:22 2011 +0300
@@ -53,7 +53,7 @@
implementation
{$IFNDEF LUA_DISABLED}
-uses LuaPas in 'LuaPas.pas',
+uses LuaPas,
uConsole,
uConsts,
uVisualGears,
@@ -1715,7 +1715,7 @@
procedure ScriptCall(fname : shortstring);
begin
-if not ScriptLoaded or not ScriptExists(fname) then
+if not ScriptLoaded or (not ScriptExists(fname)) then
exit;
SetGlobals;
lua_getglobal(luaState, Str2PChar(fname));
@@ -1763,7 +1763,7 @@
function ScriptCall(fname : shortstring; par1, par2, par3, par4 : LongInt) : LongInt;
begin
-if not ScriptLoaded or not ScriptExists(fname) then
+if not ScriptLoaded or (not ScriptExists(fname)) then
exit;
SetGlobals;
lua_getglobal(luaState, Str2PChar(fname));
--- a/hedgewars/uStats.pas Sun Nov 27 19:34:08 2011 +0300
+++ b/hedgewars/uStats.pas Sun Nov 27 23:13:22 2011 +0300
@@ -130,7 +130,7 @@
else if AmmoDamagingUsed then
AddVoice(sndMissed, PreviousTeam^.voicepack)
else if (AmmoUsedCount > 0) and (not isTurnSkipped) then
- // nothing ?
+ begin end// nothing ?
else if isTurnSkipped then
begin
AddVoice(sndBoring, PreviousTeam^.voicepack);
--- a/hedgewars/uStore.pas Sun Nov 27 19:34:08 2011 +0300
+++ b/hedgewars/uStore.pas Sun Nov 27 23:13:22 2011 +0300
@@ -413,7 +413,7 @@
begin
FreeTexture(SpritesData[ii].Texture);
SpritesData[ii].Texture:= nil;
- if (SpritesData[ii].Surface <> nil) and not reload then
+ if (SpritesData[ii].Surface <> nil) and (not reload) then
begin
SDL_FreeSurface(SpritesData[ii].Surface);
SpritesData[ii].Surface:= nil
@@ -955,7 +955,7 @@
{$IFNDEF DARWIN}ico: PSDL_Surface;{$ENDIF}
{$IFDEF SDL13}x, y: LongInt;{$ENDIF}
begin
- if Length(s) = 0 then cFullScreen:= not cFullScreen
+ if Length(s) = 0 then cFullScreen:= (not cFullScreen)
else cFullScreen:= s = '1';
AddFileLog('Preparing to change video parameters...');
--- a/hedgewars/uVisualGears.pas Sun Nov 27 19:34:08 2011 +0300
+++ b/hedgewars/uVisualGears.pas Sun Nov 27 23:13:22 2011 +0300
@@ -120,11 +120,11 @@
begin
AddVisualGear:= nil;
if ((GameType = gmtSave) or (fastUntilLag and (GameType = gmtNet))) and // we are scrolling now
- ((Kind <> vgtCloud) and not Critical) then exit;
+ ((Kind <> vgtCloud) and (not Critical)) then exit;
if ((cReducedQuality and rqAntiBoom) <> 0) and
- not Critical and
- not (Kind in
+ (not Critical) and
+ (not (Kind in
[vgtTeamHealthSorter,
vgtSmallDamageTag,
vgtSpeechBubble,
@@ -133,7 +133,7 @@
vgtSmokeTrace,
vgtEvilTrace,
vgtNote,
- vgtSmoothWindBar]) then exit;
+ vgtSmoothWindBar])) then exit;
inc(VGCounter);
New(gear);
--- a/hedgewars/uWorld.pas Sun Nov 27 19:34:08 2011 +0300
+++ b/hedgewars/uWorld.pas Sun Nov 27 23:13:22 2011 +0300
@@ -1220,11 +1220,11 @@
PrevSentPointTime: LongWord = 0;
begin
{$IFNDEF MOBILE}
-if (not (CurrentTeam^.ExtDriven and isCursorVisible and not bShowAmmoMenu)) and cHasFocus and (GameState <> gsConfirm) then
+if (not (CurrentTeam^.ExtDriven and isCursorVisible and (not bShowAmmoMenu))) and cHasFocus and (GameState <> gsConfirm) then
uCursor.updatePosition();
{$ENDIF}
z:= round(200/zoom);
-if not PlacingHogs and (FollowGear <> nil) and not isCursorVisible and not bShowAmmoMenu and not fastUntilLag then
+if not PlacingHogs and (FollowGear <> nil) and (not isCursorVisible) and (not bShowAmmoMenu) and (not fastUntilLag) then
if (not autoCameraOn) or ((abs(CursorPoint.X - prevPoint.X) + abs(CursorPoint.Y - prevpoint.Y)) > 4) then
begin
FollowGear:= nil;
--- a/tools/PascalBasics.hs Sun Nov 27 19:34:08 2011 +0300
+++ b/tools/PascalBasics.hs Sun Nov 27 23:13:22 2011 +0300
@@ -8,7 +8,7 @@
import Text.Parsec.Language
import Data.Char
-builtin = ["succ", "pred", "low", "high"]
+builtin = ["succ", "pred", "low", "high", "ord"]
pascalLanguageDef
= emptyDef
--- a/tools/PascalParser.hs Sun Nov 27 19:34:08 2011 +0300
+++ b/tools/PascalParser.hs Sun Nov 27 23:13:22 2011 +0300
@@ -16,6 +16,7 @@
data PascalUnit =
Program Identifier Implementation Phrase
| Unit Identifier Interface Implementation (Maybe Initialize) (Maybe Finalize)
+ | System
deriving Show
data Interface = Interface Uses TypesAndVars
deriving Show
@@ -57,7 +58,7 @@
| ForCycle Identifier Expression Expression Phrase
| WithBlock Reference Phrase
| Phrases [Phrase]
- | SwitchCase Expression [([InitExpression], Phrase)] (Maybe Phrase)
+ | SwitchCase Expression [([InitExpression], Phrase)] (Maybe [Phrase])
| Assignment Reference Expression
| NOP
deriving Show
@@ -78,11 +79,12 @@
deriving Show
data Reference = ArrayElement [Expression] Reference
| FunCall [Expression] Reference
- | TypeCast Identifier Reference
+ | TypeCast Identifier Expression
| SimpleReference Identifier
| Dereference Reference
| RecordField Reference Reference
| Address Reference
+ | RefExpression Expression
deriving Show
data InitExpression = InitBinOp String InitExpression InitExpression
| InitPrefixOp String InitExpression
@@ -95,11 +97,14 @@
| InitString String
| InitChar String
| BuiltInFunction String [InitExpression]
- | InitSet [Identifier]
+ | InitSet [InitExpression]
+ | InitAddress InitExpression
| InitNull
+ | InitRange Range
+ | InitTypeCast Identifier InitExpression
deriving Show
-knownTypes = ["shortstring"]
+knownTypes = ["shortstring", "char", "byte"]
pascalUnit = do
comments
@@ -126,14 +131,13 @@
reference = buildExpressionParser table term <?> "reference"
where
term = comments >> choice [
- parens pas (reference >>= postfixes) >>= postfixes
- , typeCast >>= postfixes
+ parens pas (liftM RefExpression expression >>= postfixes) >>= postfixes
+ , try $ typeCast >>= postfixes
, char '@' >> liftM Address reference >>= postfixes
, liftM SimpleReference iD >>= postfixes
] <?> "simple reference"
table = [
- [Infix (try (char '.' >> notFollowedBy (char '.')) >> return RecordField) AssocLeft]
]
postfixes r = many postfix >>= return . foldl (flip ($)) r
@@ -141,13 +145,14 @@
parens pas (option [] parameters) >>= return . FunCall
, char '^' >> return Dereference
, (brackets pas) (commaSep1 pas $ expression) >>= return . ArrayElement
+ , (char '.' >> notFollowedBy (char '.')) >> liftM RecordField reference
]
typeCast = do
t <- choice $ map (\s -> try $ caseInsensitiveString s >>= \i -> notFollowedBy alphaNum >> return i) knownTypes
- r <- parens pas reference
+ e <- parens pas expression
comments
- return $ TypeCast (Identifier t) r
+ return $ TypeCast (Identifier t) e
varsDecl1 = varsParser sepEndBy1
@@ -293,6 +298,7 @@
semi pas
comments
return $ TypeDeclaration i t
+
rangeDecl = choice [
try $ rangeft
@@ -303,7 +309,7 @@
e1 <- initExpression
string ".."
e2 <- initExpression
- return $ RangeFromTo e1 e2
+ return $ RangeFromTo e1 e2
typeVarDeclaration isImpl = (liftM concat . many . choice) [
varSection,
@@ -385,8 +391,10 @@
functionDecorator = choice [
try $ string "inline;"
- , try $ string "cdecl;"
+ , try $ caseInsensitiveString "cdecl;"
, try $ string "overload;"
+ , try $ string "export;"
+ , try $ string "varargs;"
, try (string "external") >> comments >> iD >> optional (string "name" >> comments >> stringLiteral pas)>> string ";"
] >> comments
@@ -431,7 +439,7 @@
where
term = comments >> choice [
builtInFunction expression >>= \(n, e) -> return $ BuiltInFunCall e (SimpleReference (Identifier n))
- , parens pas $ expression
+ , try (parens pas $ expression >>= \e -> notFollowedBy (comments >> char '.') >> return e)
, brackets pas (commaSep pas iD) >>= return . SetExpression
, try $ natural pas >>= \i -> notFollowedBy (char '.') >> (return . NumberLiteral . show) i
, float pas >>= return . FloatLiteral . show
@@ -490,6 +498,7 @@
, forCycle
, (try $ reference >>= \r -> string ":=" >> return r) >>= \r -> expression >>= return . Assignment r
, procCall
+ , char ';' >> comments >> return NOP
]
optional $ char ';'
comments
@@ -572,7 +581,7 @@
o2 <- optionMaybe $ do
try $ string "else" >> notFollowedBy alphaNum
comments
- o <- phrase
+ o <- many phrase
comments
return o
string "end"
@@ -580,7 +589,7 @@
return $ SwitchCase e cs o2
where
aCase = do
- e <- (commaSep pas) initExpression
+ e <- (commaSep pas) $ (liftM InitRange rangeDecl <|> initExpression)
comments
char ':'
comments
@@ -617,16 +626,18 @@
where
term = comments >> choice [
liftM (uncurry BuiltInFunction) $ builtInFunction initExpression
- , try $ brackets pas (commaSep pas $ iD) >>= return . InitSet
+ , try $ brackets pas (commaSep pas $ initExpression) >>= return . InitSet
, try $ parens pas (commaSep pas $ initExpression) >>= return . InitArray
- , parens pas (semiSep pas $ recField) >>= return . InitRecord
+ , parens pas (sepEndBy recField (char ';' >> comments)) >>= return . InitRecord
, try $ integer pas >>= \i -> notFollowedBy (char '.') >> (return . InitNumber . show) i
, try $ float pas >>= return . InitFloat . show
, try $ integer pas >>= return . InitNumber . show
, stringLiteral pas >>= return . InitString
, char '#' >> many digit >>= \c -> comments >> return (InitChar c)
, char '$' >> many hexDigit >>= \h -> comments >> return (InitHexNumber h)
+ , char '@' >> initExpression >>= \c -> comments >> return (InitAddress c)
, try $ string "nil" >> return InitNull
+ , itypeCast
, iD >>= return . InitReference
]
@@ -666,6 +677,12 @@
, [Prefix (try (string "not") >> return (InitPrefixOp "not"))]
]
+ itypeCast = do
+ t <- choice $ map (\s -> try $ caseInsensitiveString s >>= \i -> notFollowedBy alphaNum >> return i) knownTypes
+ i <- parens pas initExpression
+ comments
+ return $ InitTypeCast (Identifier t) i
+
builtInFunction e = do
name <- choice $ map (\s -> try $ caseInsensitiveString s >>= \i -> notFollowedBy alphaNum >> return i) builtin
spaces
--- a/tools/PascalPreprocessor.hs Sun Nov 27 19:34:08 2011 +0300
+++ b/tools/PascalPreprocessor.hs Sun Nov 27 23:13:22 2011 +0300
@@ -58,6 +58,7 @@
s <- choice [
include
, ifdef
+ , if'
, elseSwitch
, endIf
, define
@@ -89,10 +90,20 @@
updateState $ \(m, b) ->
(m, (f $ d `Map.member` m) : b)
-
return ""
+
+ if' = do
+ s <- try (string "IF" >> notFollowedBy alphaNum)
+ manyTill anyChar (char '}')
+ --char '}'
+
+ updateState $ \(m, b) ->
+ (m, False : b)
+
+ return ""
+
elseSwitch = do
try $ string "ELSE}"
updateState $ \(m, b:bs) -> (m, (not b):bs)
--- a/tools/pas2c.hs Sun Nov 27 19:34:08 2011 +0300
+++ b/tools/pas2c.hs Sun Nov 27 23:13:22 2011 +0300
@@ -30,7 +30,9 @@
$ tryJust (guard . isDoesNotExistError)
$ hPutStr stderr ("Preprocessing '" ++ fileName ++ ".pas'... ") >> preprocess (fileName ++ ".pas")
case fc' of
- (Left a) -> printLn "doesn't exist"
+ (Left a) -> do
+ modify (Map.insert fileName System)
+ printLn "doesn't exist"
(Right fc) -> do
printLn "ok"
let ptree = parse pascalUnit fileName fc