diff -r 90585aba87ad -r 249adefa9c1c hedgewars/uConsole.pas --- 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.