--- a/hedgewars/uConsole.pas Sat Jan 16 17:30:37 2010 +0000
+++ b/hedgewars/uConsole.pas Mon Jan 18 05:36:08 2010 +0000
@@ -22,10 +22,12 @@
interface
uses uFloat;
-const isDeveloperMode: boolean = true;
+var isDeveloperMode: boolean;
type TVariableType = (vtCommand, vtLongInt, vthwFloat, vtBoolean);
TCommandHandler = procedure (var params: shortstring);
+procedure init_uConsole;
+procedure free_uConsole;
procedure WriteToConsole(s: shortstring);
procedure WriteLnToConsole(s: shortstring);
procedure ParseCommand(CmdStr: shortstring; TrustedSource: boolean);
@@ -55,8 +57,8 @@
end;
var ConsoleLines: array[byte] of TTextLine;
- CurrLine: LongInt = 0;
- Variables: PVariable = nil;
+ CurrLine: LongInt;
+ Variables: PVariable;
procedure SetLine(var tl: TTextLine; str: shortstring);
begin
@@ -112,37 +114,35 @@
procedure WriteToConsole(s: shortstring);
var Len: LongInt;
+ done: boolean;
begin
-{$IFDEF DEBUGFILE}AddFileLog('Console write: ' + s);{$ENDIF}
-Write(s);
-repeat
-Len:= cLineWidth - Length(ConsoleLines[CurrLine].s);
-SetLine(ConsoleLines[CurrLine], ConsoleLines[CurrLine].s + copy(s, 1, Len));
-Delete(s, 1, Len);
-if byte(ConsoleLines[CurrLine].s[0]) = cLineWidth then
- begin
- inc(CurrLine);
- if CurrLine = cLinesCount then CurrLine:= 0;
- PByte(@ConsoleLines[CurrLine].s)^:= 0
- end;
-until Length(s) = 0
+ {$IFDEF DEBUGFILE}AddFileLog('Console write: ' + s);{$ENDIF}
+ Write(s);
+ done:= false;
+
+ while not done do
+ begin
+ Len:= cLineWidth - Length(ConsoleLines[CurrLine].s);
+ SetLine(ConsoleLines[CurrLine], ConsoleLines[CurrLine].s + copy(s, 1, Len));
+ Delete(s, 1, Len);
+ if byte(ConsoleLines[CurrLine].s[0]) = cLineWidth then
+ begin
+ inc(CurrLine);
+ if CurrLine = cLinesCount then CurrLine:= 0;
+ PByte(@ConsoleLines[CurrLine].s)^:= 0
+ end;
+ done:= (Length(s) = 0);
+ end;
end;
procedure WriteLnToConsole(s: shortstring);
begin
-WriteToConsole(s);
-WriteLn;
-inc(CurrLine);
-if CurrLine = cLinesCount then CurrLine:= 0;
-PByte(@ConsoleLines[CurrLine].s)^:= 0
-end;
-
-procedure InitConsole;
-var i: LongInt;
-begin
-cLineWidth:= cScreenWidth div 10;
-if cLineWidth > 255 then cLineWidth:= 255;
-for i:= 0 to Pred(cLinesCount) do PByte(@ConsoleLines[i])^:= 0
+ WriteToConsole(s);
+ WriteLn;
+ inc(CurrLine);
+ if CurrLine = cLinesCount then
+ CurrLine:= 0;
+ PByte(@ConsoleLines[CurrLine].s)^:= 0
end;
procedure ParseCommand(CmdStr: shortstring; TrustedSource: boolean);
@@ -225,90 +225,104 @@
end;
{$INCLUDE "CCHandlers.inc"}
+procedure init_uConsole;
+var i: LongInt;
+begin
+ CurrLine:= 0;
+ Variables:= nil;
+ isDeveloperMode:= true;
+
+ // initConsole
+ cLineWidth:= cScreenWidth div 10;
+ if cLineWidth > 255 then
+ cLineWidth:= 255;
+ for i:= 0 to Pred(cLinesCount) do
+ PByte(@ConsoleLines[i])^:= 0;
+
+ RegisterVariable('proto' , vtCommand, @chCheckProto , true );
+ RegisterVariable('spectate', vtBoolean, @fastUntilLag , false);
+ RegisterVariable('capture' , vtCommand, @chCapture , true );
+ RegisterVariable('rotmask' , vtCommand, @chRotateMask , true );
+ RegisterVariable('addteam' , vtCommand, @chAddTeam , false);
+ RegisterVariable('addtrig' , vtCommand, @chAddTrigger , false);
+ RegisterVariable('rdriven' , vtCommand, @chTeamLocal , false);
+ RegisterVariable('map' , vtCommand, @chSetMap , false);
+ RegisterVariable('theme' , vtCommand, @chSetTheme , false);
+ RegisterVariable('seed' , vtCommand, @chSetSeed , false);
+ RegisterVariable('template_filter', vtLongInt, @cTemplateFilter, false);
+ RegisterVariable('delay' , vtLongInt, @cInactDelay , false);
+ RegisterVariable('casefreq', vtLongInt, @cCaseFactor , false);
+ RegisterVariable('sd_turns', vtLongInt, @cSuddenDTurns , false);
+ RegisterVariable('damagepct',vtLongInt, @cDamagePercent , false);
+ RegisterVariable('landadds', vtLongInt, @cLandAdditions , false);
+ RegisterVariable('gmflags' , vtLongInt, @GameFlags , false);
+ RegisterVariable('trflags' , vtLongInt, @TrainingFlags , false);
+ RegisterVariable('turntime', vtLongInt, @cHedgehogTurnTime, false);
+ RegisterVariable('minestime',vtLongInt, @cMinesTime , false);
+ RegisterVariable('fort' , vtCommand, @chFort , false);
+ RegisterVariable('voicepack',vtCommand, @chVoicepack , false);
+ RegisterVariable('grave' , vtCommand, @chGrave , false);
+ RegisterVariable('bind' , vtCommand, @chBind , true );
+ RegisterVariable('addhh' , vtCommand, @chAddHH , false);
+ RegisterVariable('hat' , vtCommand, @chSetHat , false);
+ RegisterVariable('hhcoords', vtCommand, @chSetHHCoords , false);
+ RegisterVariable('ammstore', vtCommand, @chAddAmmoStore , false);
+ RegisterVariable('quit' , vtCommand, @chQuit , true );
+ RegisterVariable('confirm' , vtCommand, @chConfirm , true );
+ RegisterVariable('+speedup', vtCommand, @chSpeedup_p , true );
+ RegisterVariable('-speedup', vtCommand, @chSpeedup_m , true );
+ RegisterVariable('zoomin' , vtCommand, @chZoomIn , true );
+ RegisterVariable('zoomout' , vtCommand, @chZoomOut , true );
+ RegisterVariable('zoomreset',vtCommand, @chZoomReset , true );
+ RegisterVariable('skip' , vtCommand, @chSkip , false);
+ RegisterVariable('history' , vtCommand, @chHistory , true );
+ RegisterVariable('chat' , vtCommand, @chChat , true );
+ RegisterVariable('newgrave', vtCommand, @chNewGrave , false);
+ RegisterVariable('say' , vtCommand, @chSay , true );
+ RegisterVariable('hogsay' , vtCommand, @chHogSay , true );
+ RegisterVariable('team' , vtCommand, @chTeamSay , true );
+ RegisterVariable('ammomenu', vtCommand, @chAmmoMenu , false);
+ RegisterVariable('+precise', vtCommand, @chPrecise_p , false);
+ RegisterVariable('-precise', vtCommand, @chPrecise_m , false);
+ RegisterVariable('+left' , vtCommand, @chLeft_p , false);
+ RegisterVariable('-left' , vtCommand, @chLeft_m , false);
+ RegisterVariable('+right' , vtCommand, @chRight_p , false);
+ RegisterVariable('-right' , vtCommand, @chRight_m , false);
+ RegisterVariable('+up' , vtCommand, @chUp_p , false);
+ RegisterVariable('-up' , vtCommand, @chUp_m , false);
+ RegisterVariable('+down' , vtCommand, @chDown_p , false);
+ RegisterVariable('-down' , vtCommand, @chDown_m , false);
+ RegisterVariable('+attack' , vtCommand, @chAttack_p , false);
+ RegisterVariable('-attack' , vtCommand, @chAttack_m , false);
+ RegisterVariable('switch' , vtCommand, @chSwitch , false);
+ RegisterVariable('nextturn', vtCommand, @chNextTurn , false);
+ RegisterVariable('timer' , vtCommand, @chTimer , false);
+ RegisterVariable('taunt' , vtCommand, @chTaunt , false);
+ RegisterVariable('setweap' , vtCommand, @chSetWeapon , false);
+ RegisterVariable('slot' , vtCommand, @chSlot , false);
+ RegisterVariable('put' , vtCommand, @chPut , false);
+ RegisterVariable('ljump' , vtCommand, @chLJump , false);
+ RegisterVariable('hjump' , vtCommand, @chHJump , false);
+ RegisterVariable('fullscr' , vtCommand, @chFullScr , true );
+ RegisterVariable('+volup' , vtCommand, @chVol_p , true );
+ RegisterVariable('-volup' , vtCommand, @chVol_m , true );
+ RegisterVariable('+voldown', vtCommand, @chVol_m , true );
+ RegisterVariable('-voldown', vtCommand, @chVol_p , true );
+ RegisterVariable('findhh' , vtCommand, @chFindhh , true );
+ RegisterVariable('pause' , vtCommand, @chPause , true );
+ RegisterVariable('+cur_u' , vtCommand, @chCurU_p , true );
+ RegisterVariable('-cur_u' , vtCommand, @chCurU_m , true );
+ RegisterVariable('+cur_d' , vtCommand, @chCurD_p , true );
+ RegisterVariable('-cur_d' , vtCommand, @chCurD_m , true );
+ RegisterVariable('+cur_l' , vtCommand, @chCurL_p , true );
+ RegisterVariable('-cur_l' , vtCommand, @chCurL_m , true );
+ RegisterVariable('+cur_r' , vtCommand, @chCurR_p , true );
+ RegisterVariable('-cur_r' , vtCommand, @chCurR_m , true );
+end;
-initialization
-InitConsole;
-RegisterVariable('proto' , vtCommand, @chCheckProto , true );
-RegisterVariable('spectate', vtBoolean, @fastUntilLag , false);
-RegisterVariable('capture' , vtCommand, @chCapture , true );
-RegisterVariable('rotmask' , vtCommand, @chRotateMask , true );
-RegisterVariable('addteam' , vtCommand, @chAddTeam , false);
-RegisterVariable('addtrig' , vtCommand, @chAddTrigger , false);
-RegisterVariable('rdriven' , vtCommand, @chTeamLocal , false);
-RegisterVariable('map' , vtCommand, @chSetMap , false);
-RegisterVariable('theme' , vtCommand, @chSetTheme , false);
-RegisterVariable('seed' , vtCommand, @chSetSeed , false);
-RegisterVariable('template_filter', vtLongInt, @cTemplateFilter, false);
-RegisterVariable('delay' , vtLongInt, @cInactDelay , false);
-RegisterVariable('casefreq', vtLongInt, @cCaseFactor , false);
-RegisterVariable('sd_turns', vtLongInt, @cSuddenDTurns , false);
-RegisterVariable('damagepct',vtLongInt, @cDamagePercent , false);
-RegisterVariable('landadds', vtLongInt, @cLandAdditions , false);
-RegisterVariable('gmflags' , vtLongInt, @GameFlags , false);
-RegisterVariable('trflags' , vtLongInt, @TrainingFlags , false);
-RegisterVariable('turntime', vtLongInt, @cHedgehogTurnTime, false);
-RegisterVariable('minestime',vtLongInt, @cMinesTime , false);
-RegisterVariable('fort' , vtCommand, @chFort , false);
-RegisterVariable('voicepack',vtCommand, @chVoicepack , false);
-RegisterVariable('grave' , vtCommand, @chGrave , false);
-RegisterVariable('bind' , vtCommand, @chBind , true );
-RegisterVariable('addhh' , vtCommand, @chAddHH , false);
-RegisterVariable('hat' , vtCommand, @chSetHat , false);
-RegisterVariable('hhcoords', vtCommand, @chSetHHCoords , false);
-RegisterVariable('ammstore', vtCommand, @chAddAmmoStore , false);
-RegisterVariable('quit' , vtCommand, @chQuit , true );
-RegisterVariable('confirm' , vtCommand, @chConfirm , true );
-RegisterVariable('+speedup', vtCommand, @chSpeedup_p , true );
-RegisterVariable('-speedup', vtCommand, @chSpeedup_m , true );
-RegisterVariable('zoomin' , vtCommand, @chZoomIn , true );
-RegisterVariable('zoomout' , vtCommand, @chZoomOut , true );
-RegisterVariable('zoomreset',vtCommand, @chZoomReset , true );
-RegisterVariable('skip' , vtCommand, @chSkip , false);
-RegisterVariable('history' , vtCommand, @chHistory , true );
-RegisterVariable('chat' , vtCommand, @chChat , true );
-RegisterVariable('newgrave', vtCommand, @chNewGrave , false);
-RegisterVariable('say' , vtCommand, @chSay , true );
-RegisterVariable('hogsay' , vtCommand, @chHogSay , true );
-RegisterVariable('team' , vtCommand, @chTeamSay , true );
-RegisterVariable('ammomenu', vtCommand, @chAmmoMenu , false);
-RegisterVariable('+precise', vtCommand, @chPrecise_p , false);
-RegisterVariable('-precise', vtCommand, @chPrecise_m , false);
-RegisterVariable('+left' , vtCommand, @chLeft_p , false);
-RegisterVariable('-left' , vtCommand, @chLeft_m , false);
-RegisterVariable('+right' , vtCommand, @chRight_p , false);
-RegisterVariable('-right' , vtCommand, @chRight_m , false);
-RegisterVariable('+up' , vtCommand, @chUp_p , false);
-RegisterVariable('-up' , vtCommand, @chUp_m , false);
-RegisterVariable('+down' , vtCommand, @chDown_p , false);
-RegisterVariable('-down' , vtCommand, @chDown_m , false);
-RegisterVariable('+attack' , vtCommand, @chAttack_p , false);
-RegisterVariable('-attack' , vtCommand, @chAttack_m , false);
-RegisterVariable('switch' , vtCommand, @chSwitch , false);
-RegisterVariable('nextturn', vtCommand, @chNextTurn , false);
-RegisterVariable('timer' , vtCommand, @chTimer , false);
-RegisterVariable('taunt' , vtCommand, @chTaunt , false);
-RegisterVariable('setweap' , vtCommand, @chSetWeapon , false);
-RegisterVariable('slot' , vtCommand, @chSlot , false);
-RegisterVariable('put' , vtCommand, @chPut , false);
-RegisterVariable('ljump' , vtCommand, @chLJump , false);
-RegisterVariable('hjump' , vtCommand, @chHJump , false);
-RegisterVariable('fullscr' , vtCommand, @chFullScr , true );
-RegisterVariable('+volup' , vtCommand, @chVol_p , true );
-RegisterVariable('-volup' , vtCommand, @chVol_m , true );
-RegisterVariable('+voldown', vtCommand, @chVol_m , true );
-RegisterVariable('-voldown', vtCommand, @chVol_p , true );
-RegisterVariable('findhh' , vtCommand, @chFindhh , true );
-RegisterVariable('pause' , vtCommand, @chPause , true );
-RegisterVariable('+cur_u' , vtCommand, @chCurU_p , true );
-RegisterVariable('-cur_u' , vtCommand, @chCurU_m , true );
-RegisterVariable('+cur_d' , vtCommand, @chCurD_p , true );
-RegisterVariable('-cur_d' , vtCommand, @chCurD_m , true );
-RegisterVariable('+cur_l' , vtCommand, @chCurL_p , true );
-RegisterVariable('-cur_l' , vtCommand, @chCurL_m , true );
-RegisterVariable('+cur_r' , vtCommand, @chCurR_p , true );
-RegisterVariable('-cur_r' , vtCommand, @chCurR_m , true );
-
-finalization
-FreeVariablesList
+procedure free_uConsole;
+begin
+ FreeVariablesList();
+end;
end.