openttd updated to 1.5.0-beta2
--HG-- branch : openttd
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
# $Id: Makefile.grf.in 25205 2013-04-24 20:30:02Z frosch $
|
# $Id: Makefile.grf.in 26708 2014-07-30 17:21:42Z rubidium $
|
||||||
|
|
||||||
# This file is part of OpenTTD.
|
# This file is part of OpenTTD.
|
||||||
# OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
|
# OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
|
||||||
@@ -75,10 +75,10 @@ $(BIN_DIR)/%.obm: $(BASESET_DIR)/%.obm $(OBJS_DIR)/langfiles.tmp $(BASESET_DIR)/
|
|||||||
$(Q) awk -v langfiles='$(OBJS_DIR)/langfiles.tmp' -f $(BASESET_DIR)/translations.awk $< >$@
|
$(Q) awk -v langfiles='$(OBJS_DIR)/langfiles.tmp' -f $(BASESET_DIR)/translations.awk $< >$@
|
||||||
|
|
||||||
# Compile extra grf
|
# Compile extra grf
|
||||||
$(BIN_DIR)/openttd.grf: $(PNG_FILES) $(NFO_FILES) $(OBJS_DIR)/sprites
|
$(BIN_DIR)/openttd.grf: $(PNG_FILES) $(NFO_FILES) $(OBJS_DIR)/sprites $(GRF_DIR)/assemble_nfo.awk
|
||||||
$(E) '$(STAGE) Assembling openttd.nfo'
|
$(E) '$(STAGE) Assembling openttd.nfo'
|
||||||
$(Q)-cp $(PNG_FILES) $(OBJS_DIR)/sprites 2> /dev/null
|
$(Q)-cp $(PNG_FILES) $(OBJS_DIR)/sprites 2> /dev/null
|
||||||
$(Q) $(CC_BUILD) -nostdinc -I$(GRF_DIR) -C -E - < "$(GRF_DIR)/openttd.nfo" | sed -e '/^#/d' -e '/^$$/d' > $(OBJS_DIR)/sprites/openttd.nfo
|
$(Q) awk -f $(GRF_DIR)/assemble_nfo.awk $(GRF_DIR)/openttd.nfo > $(OBJS_DIR)/sprites/openttd.nfo
|
||||||
$(Q) $(NFORENUM) -s $(OBJS_DIR)/sprites/openttd.nfo
|
$(Q) $(NFORENUM) -s $(OBJS_DIR)/sprites/openttd.nfo
|
||||||
$(E) '$(STAGE) Compiling openttd.grf'
|
$(E) '$(STAGE) Compiling openttd.grf'
|
||||||
$(Q) $(GRFCODEC) -n -s -e -p1 $(OBJS_DIR)/openttd.grf
|
$(Q) $(GRFCODEC) -n -s -e -p1 $(OBJS_DIR)/openttd.grf
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# $Id: Makefile.lang.in 24365 2012-07-01 08:56:57Z rubidium $
|
# $Id: Makefile.lang.in 26497 2014-04-24 18:09:10Z rubidium $
|
||||||
|
|
||||||
# This file is part of OpenTTD.
|
# This file is part of OpenTTD.
|
||||||
# OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
|
# OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
|
||||||
@@ -43,23 +43,23 @@ RES := $(shell mkdir -p $(BIN_DIR)/lang )
|
|||||||
|
|
||||||
all: table/strings.h $(LANGS)
|
all: table/strings.h $(LANGS)
|
||||||
|
|
||||||
strgen_base.o: $(SRC_DIR)/strgen/strgen_base.cpp $(SRC_DIR)/strgen/strgen.h endian_host.h $(SRC_DIR)/table/control_codes.h $(SRC_DIR)/table/strgen_tables.h
|
strgen_base.o: $(SRC_DIR)/strgen/strgen_base.cpp $(SRC_DIR)/strgen/strgen.h endian_host.h $(SRC_DIR)/table/control_codes.h $(SRC_DIR)/table/strgen_tables.h $(SRC_DIR)/safeguards.h
|
||||||
$(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.cpp=%.cpp)'
|
$(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.cpp=%.cpp)'
|
||||||
$(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) -DSTRGEN -c -o $@ $<
|
$(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) -DSTRGEN -c -o $@ $<
|
||||||
|
|
||||||
strgen.o: $(SRC_DIR)/strgen/strgen.cpp $(SRC_DIR)/strgen/strgen.h endian_host.h $(SRC_DIR)/table/control_codes.h $(SRC_DIR)/table/strgen_tables.h
|
strgen.o: $(SRC_DIR)/strgen/strgen.cpp $(SRC_DIR)/strgen/strgen.h endian_host.h $(SRC_DIR)/table/control_codes.h $(SRC_DIR)/table/strgen_tables.h $(SRC_DIR)/safeguards.h
|
||||||
$(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.cpp=%.cpp)'
|
$(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.cpp=%.cpp)'
|
||||||
$(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) -DSTRGEN -c -o $@ $<
|
$(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) -DSTRGEN -c -o $@ $<
|
||||||
|
|
||||||
string.o: $(SRC_DIR)/string.cpp endian_host.h
|
string.o: $(SRC_DIR)/string.cpp endian_host.h $(SRC_DIR)/safeguards.h
|
||||||
$(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.cpp=%.cpp)'
|
$(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.cpp=%.cpp)'
|
||||||
$(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) -DSTRGEN -c -o $@ $<
|
$(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) -DSTRGEN -c -o $@ $<
|
||||||
|
|
||||||
alloc_func.o: $(SRC_DIR)/core/alloc_func.cpp endian_host.h
|
alloc_func.o: $(SRC_DIR)/core/alloc_func.cpp endian_host.h $(SRC_DIR)/safeguards.h
|
||||||
$(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.cpp=%.cpp)'
|
$(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.cpp=%.cpp)'
|
||||||
$(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) -DSTRGEN -c -o $@ $<
|
$(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) -DSTRGEN -c -o $@ $<
|
||||||
|
|
||||||
getoptdata.o: $(SRC_DIR)/misc/getoptdata.cpp $(SRC_DIR)/misc/getoptdata.h
|
getoptdata.o: $(SRC_DIR)/misc/getoptdata.cpp $(SRC_DIR)/misc/getoptdata.h $(SRC_DIR)/safeguards.h
|
||||||
$(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/misc/%.cpp=%.cpp)'
|
$(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/misc/%.cpp=%.cpp)'
|
||||||
$(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) -DSTRGEN -c -o $@ $<
|
$(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) -DSTRGEN -c -o $@ $<
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# $Id: Makefile.setting.in 24365 2012-07-01 08:56:57Z rubidium $
|
# $Id: Makefile.setting.in 26497 2014-04-24 18:09:10Z rubidium $
|
||||||
|
|
||||||
# This file is part of OpenTTD.
|
# This file is part of OpenTTD.
|
||||||
# OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
|
# OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
|
||||||
@@ -28,23 +28,23 @@ endif
|
|||||||
|
|
||||||
all: table/settings.h
|
all: table/settings.h
|
||||||
|
|
||||||
settingsgen.o: $(SRC_DIR)/settingsgen/settingsgen.cpp $(SRC_DIR)/string_func.h $(SRC_DIR)/strings_type.h $(SRC_DIR)/misc/getoptdata.h $(SRC_DIR)/ini_type.h $(SRC_DIR)/core/smallvec_type.hpp
|
settingsgen.o: $(SRC_DIR)/settingsgen/settingsgen.cpp $(SRC_DIR)/string_func.h $(SRC_DIR)/strings_type.h $(SRC_DIR)/misc/getoptdata.h $(SRC_DIR)/ini_type.h $(SRC_DIR)/core/smallvec_type.hpp $(SRC_DIR)/safeguards.h
|
||||||
$(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.cpp=%.cpp)'
|
$(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.cpp=%.cpp)'
|
||||||
$(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) -DSETTINGSGEN -c -o $@ $<
|
$(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) -DSETTINGSGEN -c -o $@ $<
|
||||||
|
|
||||||
alloc_func.o: $(SRC_DIR)/core/alloc_func.cpp endian_host.h
|
alloc_func.o: $(SRC_DIR)/core/alloc_func.cpp endian_host.h $(SRC_DIR)/safeguards.h
|
||||||
$(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.cpp=%.cpp)'
|
$(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.cpp=%.cpp)'
|
||||||
$(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) -DSETTINGSGEN -c -o $@ $<
|
$(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) -DSETTINGSGEN -c -o $@ $<
|
||||||
|
|
||||||
getoptdata.o: $(SRC_DIR)/misc/getoptdata.cpp $(SRC_DIR)/misc/getoptdata.h
|
getoptdata.o: $(SRC_DIR)/misc/getoptdata.cpp $(SRC_DIR)/misc/getoptdata.h $(SRC_DIR)/safeguards.h
|
||||||
$(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/misc/%.cpp=%.cpp)'
|
$(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/misc/%.cpp=%.cpp)'
|
||||||
$(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) -DSETTINGSGEN -c -o $@ $<
|
$(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) -DSETTINGSGEN -c -o $@ $<
|
||||||
|
|
||||||
string.o: $(SRC_DIR)/string.cpp endian_host.h
|
string.o: $(SRC_DIR)/string.cpp endian_host.h $(SRC_DIR)/safeguards.h
|
||||||
$(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.cpp=%.cpp)'
|
$(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.cpp=%.cpp)'
|
||||||
$(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) -DSETTINGSGEN -c -o $@ $<
|
$(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) -DSETTINGSGEN -c -o $@ $<
|
||||||
|
|
||||||
ini_load.o: $(SRC_DIR)/ini_load.cpp $(SRC_DIR)/core/alloc_func.hpp $(SRC_DIR)/core/mem_func.hpp $(SRC_DIR)/ini_type.h $(SRC_DIR)/string_func.h
|
ini_load.o: $(SRC_DIR)/ini_load.cpp $(SRC_DIR)/core/alloc_func.hpp $(SRC_DIR)/core/mem_func.hpp $(SRC_DIR)/ini_type.h $(SRC_DIR)/string_func.h $(SRC_DIR)/safeguards.h
|
||||||
$(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.cpp=%.cpp)'
|
$(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.cpp=%.cpp)'
|
||||||
$(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) -DSETTINGSGEN -c -o $@ $<
|
$(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) -DSETTINGSGEN -c -o $@ $<
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* $Id: compat_0.7.nut 24006 2012-03-04 16:40:06Z rubidium $ */
|
/* $Id: compat_0.7.nut 26407 2014-03-17 20:05:38Z frosch $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This file is part of OpenTTD.
|
* This file is part of OpenTTD.
|
||||||
@@ -7,7 +7,7 @@
|
|||||||
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
|
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
AILog.Info("0.7 API compatability in effect:");
|
AILog.Info("0.7 API compatibility in effect:");
|
||||||
AILog.Info(" - AITown::GetLastMonthProduction's behaviour has slightly changed.");
|
AILog.Info(" - AITown::GetLastMonthProduction's behaviour has slightly changed.");
|
||||||
AILog.Info(" - AISubsidy::GetDestination returns STATION_INVALID for awarded subsidies.");
|
AILog.Info(" - AISubsidy::GetDestination returns STATION_INVALID for awarded subsidies.");
|
||||||
AILog.Info(" - AISubsidy::GetSource returns STATION_INVALID for awarded subsidies.");
|
AILog.Info(" - AISubsidy::GetSource returns STATION_INVALID for awarded subsidies.");
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* $Id: compat_1.0.nut 24006 2012-03-04 16:40:06Z rubidium $ */
|
/* $Id: compat_1.0.nut 26407 2014-03-17 20:05:38Z frosch $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This file is part of OpenTTD.
|
* This file is part of OpenTTD.
|
||||||
@@ -7,7 +7,7 @@
|
|||||||
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
|
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
AILog.Info("1.0 API compatability in effect.");
|
AILog.Info("1.0 API compatibility in effect.");
|
||||||
|
|
||||||
AIRoad._BuildRoadStation <- AIRoad.BuildRoadStation;
|
AIRoad._BuildRoadStation <- AIRoad.BuildRoadStation;
|
||||||
AIRoad.BuildRoadStation <- function(tile, front, road_veh_type, station_id)
|
AIRoad.BuildRoadStation <- function(tile, front, road_veh_type, station_id)
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* $Id: compat_1.1.nut 24006 2012-03-04 16:40:06Z rubidium $ */
|
/* $Id: compat_1.1.nut 26407 2014-03-17 20:05:38Z frosch $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This file is part of OpenTTD.
|
* This file is part of OpenTTD.
|
||||||
@@ -7,7 +7,7 @@
|
|||||||
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
|
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
AILog.Info("1.1 API compatability in effect.");
|
AILog.Info("1.1 API compatibility in effect.");
|
||||||
|
|
||||||
AICompany.GetCompanyValue <- function(company)
|
AICompany.GetCompanyValue <- function(company)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* $Id: compat_1.2.nut 23969 2012-02-19 19:14:17Z rubidium $ */
|
/* $Id: compat_1.2.nut 26407 2014-03-17 20:05:38Z frosch $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This file is part of OpenTTD.
|
* This file is part of OpenTTD.
|
||||||
@@ -7,4 +7,4 @@
|
|||||||
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
|
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
AILog.Info("1.2 API compatability in effect.");
|
AILog.Info("1.2 API compatibility in effect.");
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* $Id: compat_1.3.nut 25001 2013-02-14 18:58:04Z rubidium $ */
|
/* $Id: compat_1.3.nut 26407 2014-03-17 20:05:38Z frosch $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This file is part of OpenTTD.
|
* This file is part of OpenTTD.
|
||||||
@@ -7,4 +7,4 @@
|
|||||||
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
|
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
AILog.Info("1.3 API compatability in effect.");
|
AILog.Info("1.3 API compatibility in effect.");
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* $Id: compat_1.3.nut 23969 2012-02-19 19:14:17Z rubidium $ */
|
/* $Id: compat_1.4.nut 26410 2014-03-17 20:28:48Z frosch $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This file is part of OpenTTD.
|
* This file is part of OpenTTD.
|
||||||
@@ -6,3 +6,5 @@
|
|||||||
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
|
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
AILog.Info("1.4 API compatibility in effect.");
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
# $Id: completeness.sh 15062 2009-01-13 16:30:24Z smatz $
|
# $Id: completeness.sh 26895 2014-09-21 16:41:03Z fonsinchen $
|
||||||
|
|
||||||
if ! [ -f ai/regression/regression.nut ]; then
|
if ! [ -f ai/regression/completeness.sh ]; then
|
||||||
echo "Make sure you are in the root of OpenTTD before starting this script."
|
echo "Make sure you are in the root of OpenTTD before starting this script."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
cat ai/regression/regression.nut | tr ';' '\n' | awk '
|
cat ai/regression/tst_*/main.nut | tr ';' '\n' | awk '
|
||||||
/^function/ {
|
/^function/ {
|
||||||
for (local in locals) {
|
for (local in locals) {
|
||||||
delete locals[local]
|
delete locals[local]
|
||||||
@@ -61,7 +61,7 @@ cat ai/regression/regression.nut | tr ';' '\n' | awk '
|
|||||||
}
|
}
|
||||||
' | sed 's/ //g' | sort | uniq > tmp.in_regression
|
' | sed 's/ //g' | sort | uniq > tmp.in_regression
|
||||||
|
|
||||||
grep 'DefSQ.*Method' ../src/ai/api/*.hpp.sq | grep -v 'AIError::' | grep -v 'AIAbstractList::Valuate' | grep -v '::GetClassName' | sed 's/^[^,]*, &//g;s/,[^,]*//g' | sort > tmp.in_api
|
grep 'DefSQ.*Method' ../src/script/api/ai/*.hpp.sq | grep -v 'AIError::' | grep -v 'AIAbstractList::Valuate' | grep -v '::GetClassName' | sed 's/^[^,]*, &//g;s/,[^,]*//g' | sort > tmp.in_api
|
||||||
|
|
||||||
diff -u tmp.in_regression tmp.in_api | grep -v '^+++' | grep '^+' | sed 's/^+//'
|
diff -u tmp.in_regression tmp.in_api | grep -v '^+++' | grep '^+' | sed 's/^+//'
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
/* $Id: regression_info.nut 23969 2012-02-19 19:14:17Z rubidium $ */
|
/* $Id: regression_info.nut 26895 2014-09-21 16:41:03Z fonsinchen $ */
|
||||||
|
|
||||||
class Regression extends AIInfo {
|
class Regression extends AIInfo {
|
||||||
function GetAuthor() { return "OpenTTD NoAI Developers Team"; }
|
function GetAuthor() { return "OpenTTD NoAI Developers Team"; }
|
||||||
function GetName() { return "Regression"; }
|
function GetName() { return "Regression"; }
|
||||||
function GetShortName() { return "REGR"; }
|
function GetShortName() { return "REGR"; }
|
||||||
function GetDescription() { return "This runs regression-tests on all commands. On the same map the result should always be the same."; }
|
function GetDescription() { return "This runs regression-tests on some commands. On the same map the result should always be the same."; }
|
||||||
function GetVersion() { return 1; }
|
function GetVersion() { return 1; }
|
||||||
function GetAPIVersion() { return "1.3"; }
|
function GetAPIVersion() { return "1.5"; }
|
||||||
function GetDate() { return "2007-03-18"; }
|
function GetDate() { return "2007-03-18"; }
|
||||||
function CreateInstance() { return "Regression"; }
|
function CreateInstance() { return "Regression"; }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,15 +1,12 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
# $Id: run.sh 23959 2012-02-16 21:08:32Z rubidium $
|
# $Id: run.sh 26898 2014-09-21 17:22:50Z rubidium $
|
||||||
|
|
||||||
if ! [ -f ai/regression/regression.nut ]; then
|
if ! [ -f ai/regression/run.sh ]; then
|
||||||
echo "Make sure you are in the root of OpenTTD before starting this script."
|
echo "Make sure you are in the root of OpenTTD before starting this script."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
cp ai/regression/regression.nut ai/regression/main.nut
|
|
||||||
cp ai/regression/regression_info.nut ai/regression/info.nut
|
|
||||||
|
|
||||||
if [ -f scripts/game_start.scr ]; then
|
if [ -f scripts/game_start.scr ]; then
|
||||||
mv scripts/game_start.scr scripts/game_start.scr.regression
|
mv scripts/game_start.scr scripts/game_start.scr.regression
|
||||||
fi
|
fi
|
||||||
@@ -22,27 +19,46 @@ fi
|
|||||||
if [ "$1" = "-g" ]; then
|
if [ "$1" = "-g" ]; then
|
||||||
gdb="gdb --ex run --args "
|
gdb="gdb --ex run --args "
|
||||||
fi
|
fi
|
||||||
if [ -n "$gdb" ]; then
|
|
||||||
$gdb ./openttd -x -c ai/regression/regression.cfg $params -g ai/regression/regression.sav
|
if [ -d "ai/regression/tst_$1" ]; then
|
||||||
|
tests="ai/regression/tst_$1"
|
||||||
|
elif [ -d "ai/regression/tst_$2" ]; then
|
||||||
|
tests="ai/regression/tst_$2"
|
||||||
else
|
else
|
||||||
./openttd -x -c ai/regression/regression.cfg $params -g ai/regression/regression.sav -d script=2 -d misc=9 2>&1 | awk '{ gsub("0x(\\(nil\\)|0+)(x0)?", "0x00000000", $0); gsub("^dbg: \\[script\\]", "", $0); gsub("^ ", "ERROR: ", $0); gsub("ERROR: \\[1\\] ", "", $0); gsub("\\[P\\] ", "", $0); print $0; }' | grep -v '^dbg: \[.*\]' > tmp.regression
|
tests=ai/regression/tst_*
|
||||||
fi
|
fi
|
||||||
|
|
||||||
ret=0
|
ret=0
|
||||||
if [ -z "$gdb" ]; then
|
for tst in $tests; do
|
||||||
res="`diff -ub ai/regression/regression.txt tmp.regression`"
|
echo -n "Running $tst... "
|
||||||
if [ -z "$res" ]; then
|
|
||||||
echo "Regression test passed!"
|
|
||||||
else
|
|
||||||
echo "Regression test failed! Difference:"
|
|
||||||
echo "$res"
|
|
||||||
ret=1
|
|
||||||
fi
|
|
||||||
echo ""
|
|
||||||
echo "Regression test done"
|
|
||||||
fi
|
|
||||||
|
|
||||||
rm -f ai/regression/main.nut ai/regression/info.nut
|
# Make sure that only one info.nut is present for each test run. Otherwise openttd gets confused.
|
||||||
|
cp ai/regression/regression_info.nut $tst/info.nut
|
||||||
|
|
||||||
|
sav=$tst/test.sav
|
||||||
|
if ! [ -f $sav ]; then
|
||||||
|
sav=ai/regression/empty.sav
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$gdb" ]; then
|
||||||
|
$gdb ./openttd -x -c ai/regression/regression.cfg $params -g $sav
|
||||||
|
else
|
||||||
|
./openttd -x -c ai/regression/regression.cfg $params -g $sav -d script=2 -d misc=9 2>&1 | awk '{ gsub("0x(\\(nil\\)|0+)(x0)?", "0x00000000", $0); gsub("^dbg: \\[script\\]", "", $0); gsub("^ ", "ERROR: ", $0); gsub("ERROR: \\[1\\] ", "", $0); gsub("\\[P\\] ", "", $0); print $0; }' | grep -v '^dbg: \[.*\]' > tmp.regression
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "$gdb" ]; then
|
||||||
|
res="`diff -ub $tst/result.txt tmp.regression`"
|
||||||
|
if [ -z "$res" ]; then
|
||||||
|
echo "passed!"
|
||||||
|
else
|
||||||
|
echo "failed! Difference:"
|
||||||
|
echo "$res"
|
||||||
|
ret=1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
rm $tst/info.nut
|
||||||
|
done
|
||||||
|
|
||||||
if [ -f scripts/game_start.scr.regression ]; then
|
if [ -f scripts/game_start.scr.regression ]; then
|
||||||
mv scripts/game_start.scr.regression scripts/game_start.scr
|
mv scripts/game_start.scr.regression scripts/game_start.scr
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
; $Id: no_music.obm 26414 2014-03-18 19:51:54Z frosch $
|
; $Id: no_music.obm 27041 2014-10-25 12:35:48Z rubidium $
|
||||||
;
|
;
|
||||||
; This represents more or less nothingness
|
; This represents more or less nothingness
|
||||||
;
|
;
|
||||||
@@ -24,6 +24,7 @@ description.es_ES = Un conjunto de música vacío.
|
|||||||
description.et_EE = Muusikakogu ilma muusikata.
|
description.et_EE = Muusikakogu ilma muusikata.
|
||||||
description.fi_FI = Musiikkipaketti, jossa ei ole musiikkia.
|
description.fi_FI = Musiikkipaketti, jossa ei ole musiikkia.
|
||||||
description.fr_FR = Un pack de musiques sans musiques.
|
description.fr_FR = Un pack de musiques sans musiques.
|
||||||
|
description.ga_IE = Pacáiste ceoil gan aon cheol iarbhír ann.
|
||||||
description.gd_GB = Pacaid ciùil anns nach eil fonn sam bith.
|
description.gd_GB = Pacaid ciùil anns nach eil fonn sam bith.
|
||||||
description.gl_ES = Un conxunto de músicas sen ningunha música.
|
description.gl_ES = Un conxunto de músicas sen ningunha música.
|
||||||
description.hr_HR = Muzički paket bez ikakve muzike.
|
description.hr_HR = Muzički paket bez ikakve muzike.
|
||||||
@@ -33,6 +34,7 @@ description.is_IS = Tónlistarpakki sem er í raun án tónlistar.
|
|||||||
description.it_IT = Un pacchetto musicale non contenente alcuna musica.
|
description.it_IT = Un pacchetto musicale non contenente alcuna musica.
|
||||||
description.ja_JP = 空の音楽パック
|
description.ja_JP = 空の音楽パック
|
||||||
description.ko_KR = 실제 음악이 없는 음악 목록입니다.
|
description.ko_KR = 실제 음악이 없는 음악 목록입니다.
|
||||||
|
description.la_VA = Sarcina musicae sine ulla musica.
|
||||||
description.lb_LU = E Musikpack ouni aktuell Musik.
|
description.lb_LU = E Musikpack ouni aktuell Musik.
|
||||||
description.lt_LT = Muzikos pakas be muzikos.
|
description.lt_LT = Muzikos pakas be muzikos.
|
||||||
description.lv_LV = Mūzikas kopa bez mūzikas
|
description.lv_LV = Mūzikas kopa bez mūzikas
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
; $Id: no_sound.obs 26414 2014-03-18 19:51:54Z frosch $
|
; $Id: no_sound.obs 27103 2015-01-01 20:51:18Z rubidium $
|
||||||
;
|
;
|
||||||
; This represents more or less nothingness
|
; This represents more or less nothingness
|
||||||
;
|
;
|
||||||
@@ -22,8 +22,10 @@ description.en_AU = A sound pack without any sounds.
|
|||||||
description.en_US = A sound pack without any sounds.
|
description.en_US = A sound pack without any sounds.
|
||||||
description.es_ES = Un conjunto de sonidos vacío.
|
description.es_ES = Un conjunto de sonidos vacío.
|
||||||
description.et_EE = Helikogu ilma helideta.
|
description.et_EE = Helikogu ilma helideta.
|
||||||
|
description.eu_ES = Soinurik gabeko soinu pakete bat
|
||||||
description.fi_FI = Äänipaketti, jossa ei ole ääniä.
|
description.fi_FI = Äänipaketti, jossa ei ole ääniä.
|
||||||
description.fr_FR = Un pack de sons sans sons.
|
description.fr_FR = Un pack de sons sans sons.
|
||||||
|
description.ga_IE = Pacáiste fuaimeanna gan aon fhuaimeanna ann.
|
||||||
description.gd_GB = Pacaid fhuaimean anns nach eil fuaim sam bith.
|
description.gd_GB = Pacaid fhuaimean anns nach eil fuaim sam bith.
|
||||||
description.gl_ES = Un conxunto de sons sen ningún son
|
description.gl_ES = Un conxunto de sons sen ningún son
|
||||||
description.hr_HR = Zvučni paket bez ikakvih zvukova.
|
description.hr_HR = Zvučni paket bez ikakvih zvukova.
|
||||||
@@ -33,7 +35,8 @@ description.is_IS = Hljóðpakki án hljóðs.
|
|||||||
description.it_IT = Un pacchetto sonoro non contenente alcun suono.
|
description.it_IT = Un pacchetto sonoro non contenente alcun suono.
|
||||||
description.ja_JP = 空の効果音パック
|
description.ja_JP = 空の効果音パック
|
||||||
description.ko_KR = 아무런 효과음도 없는 효과음 팩입니다.
|
description.ko_KR = 아무런 효과음도 없는 효과음 팩입니다.
|
||||||
description.lb_LU = En Soundpack mat all den Sounds.
|
description.la_VA = Sarcina sonorum sine ullis sonis.
|
||||||
|
description.lb_LU = E Soundpack ouni iergendee Sound.
|
||||||
description.lt_LT = Garsų pakas be jokių garsų.
|
description.lt_LT = Garsų pakas be jokių garsų.
|
||||||
description.nb_NO = En lydpakke uten noen lyder.
|
description.nb_NO = En lydpakke uten noen lyder.
|
||||||
description.nl_NL = Een geluidset zonder geluid.
|
description.nl_NL = Een geluidset zonder geluid.
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
@@ -1,4 +1,4 @@
|
|||||||
; $Id: orig_dos.obg 26414 2014-03-18 19:51:54Z frosch $
|
; $Id: orig_dos.obg 27041 2014-10-25 12:35:48Z rubidium $
|
||||||
;
|
;
|
||||||
; This represents the original graphics as on the non-German Transport
|
; This represents the original graphics as on the non-German Transport
|
||||||
; Tycoon Deluxe DOS CD.
|
; Tycoon Deluxe DOS CD.
|
||||||
@@ -25,6 +25,7 @@ description.es_ES = Gráficos originales de Transport Tycoon Deluxe versión DOS
|
|||||||
description.et_EE = Algse Transport Tycoon Deluxe DOSi versiooni graafika.
|
description.et_EE = Algse Transport Tycoon Deluxe DOSi versiooni graafika.
|
||||||
description.fi_FI = Alkuperäiset Transport Tycoon Deluxen DOS-version grafiikat.
|
description.fi_FI = Alkuperäiset Transport Tycoon Deluxen DOS-version grafiikat.
|
||||||
description.fr_FR = Graphiques originaux de Transport Tycoon Deluxe (version DOS).
|
description.fr_FR = Graphiques originaux de Transport Tycoon Deluxe (version DOS).
|
||||||
|
description.ga_IE = Grafaicí bunaidhTransport Tycoon Deluxe, eagrán DOS.
|
||||||
description.gd_GB = Grafaigeachd aig an deasachadh DOS tùsail aig Transport Tycoon Deluxe.
|
description.gd_GB = Grafaigeachd aig an deasachadh DOS tùsail aig Transport Tycoon Deluxe.
|
||||||
description.gl_ES = Graficos da edición orixinal de Transport Tycoon Deluxe para DOS.
|
description.gl_ES = Graficos da edición orixinal de Transport Tycoon Deluxe para DOS.
|
||||||
description.hr_HR = Originalna grafika za Transport Tycoon Deluxe DOS izdanje.
|
description.hr_HR = Originalna grafika za Transport Tycoon Deluxe DOS izdanje.
|
||||||
@@ -34,6 +35,7 @@ description.is_IS = Upprunalega grafíkin úr Transport Tycoon Deluxe DOS útgá
|
|||||||
description.it_IT = Grafica originale di Transport Tycoon Deluxe, edizione DOS.
|
description.it_IT = Grafica originale di Transport Tycoon Deluxe, edizione DOS.
|
||||||
description.ja_JP = Transport Tycoon Deluxe オリジナル版 グラフィック (DOS)
|
description.ja_JP = Transport Tycoon Deluxe オリジナル版 グラフィック (DOS)
|
||||||
description.ko_KR = 오리지널 트랜스포트 타이쿤 디럭스 도스 에디션의 그래픽입니다.
|
description.ko_KR = 오리지널 트랜스포트 타이쿤 디럭스 도스 에디션의 그래픽입니다.
|
||||||
|
description.la_VA = Graphica ex editione originale Transport Tycoon Deluxe DOS.
|
||||||
description.lb_LU = Original Transport Tycoon Deluxe DOS Editioun Grafik.
|
description.lb_LU = Original Transport Tycoon Deluxe DOS Editioun Grafik.
|
||||||
description.lt_LT = Originali Transport Tycoon Deluxe DOS leidimo grafika.
|
description.lt_LT = Originali Transport Tycoon Deluxe DOS leidimo grafika.
|
||||||
description.nb_NO = Original grafikk fra Transport Tycoon Deluxe for DOS.
|
description.nb_NO = Original grafikk fra Transport Tycoon Deluxe for DOS.
|
||||||
@@ -70,7 +72,7 @@ TRGI.GRF = da6a6c9dcc451eec88d79211437b76a8
|
|||||||
TRGC.GRF = ed446637e034104c5559b32c18afe78d
|
TRGC.GRF = ed446637e034104c5559b32c18afe78d
|
||||||
TRGH.GRF = ee6616fb0e6ef6b24892c58c93d86fc9
|
TRGH.GRF = ee6616fb0e6ef6b24892c58c93d86fc9
|
||||||
TRGT.GRF = e30e8a398ae86c03dc534a8ac7dfb3b6
|
TRGT.GRF = e30e8a398ae86c03dc534a8ac7dfb3b6
|
||||||
OPENTTD.GRF = 75a93cea2ed455c2fd5dcbda39e53538
|
OPENTTD.GRF = 505d96061556d3bb5cec6234096ec5bc
|
||||||
|
|
||||||
[origin]
|
[origin]
|
||||||
default = You can find it on your Transport Tycoon Deluxe CD-ROM.
|
default = You can find it on your Transport Tycoon Deluxe CD-ROM.
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
; $Id: orig_dos.obs 26414 2014-03-18 19:51:54Z frosch $
|
; $Id: orig_dos.obs 27041 2014-10-25 12:35:48Z rubidium $
|
||||||
;
|
;
|
||||||
; This represents the original sounds as on the Transport
|
; This represents the original sounds as on the Transport
|
||||||
; Tycoon Deluxe DOS CD.
|
; Tycoon Deluxe DOS CD.
|
||||||
@@ -24,6 +24,7 @@ description.es_ES = Sonidos originales de Transport Tycoon Deluxe versión DOS.
|
|||||||
description.et_EE = Algse Transport Tycoon Deluxe DOSi versiooni helid.
|
description.et_EE = Algse Transport Tycoon Deluxe DOSi versiooni helid.
|
||||||
description.fi_FI = Alkuperäiset Transport Tycoon Deluxen DOS-version äänet.
|
description.fi_FI = Alkuperäiset Transport Tycoon Deluxen DOS-version äänet.
|
||||||
description.fr_FR = Sons originaux de Transport Tycoon Deluxe (version DOS).
|
description.fr_FR = Sons originaux de Transport Tycoon Deluxe (version DOS).
|
||||||
|
description.ga_IE = Fuaimeanna bunaidh Transport Tycoon Deluxe, eagrán DOS.
|
||||||
description.gd_GB = Fuaimean aig an deasachadh DOS tùsail aig Transport Tycoon Deluxe.
|
description.gd_GB = Fuaimean aig an deasachadh DOS tùsail aig Transport Tycoon Deluxe.
|
||||||
description.gl_ES = Sons da edición orixinal de Transport Tycoon Deluxe para DOS.
|
description.gl_ES = Sons da edición orixinal de Transport Tycoon Deluxe para DOS.
|
||||||
description.hr_HR = Originalni zvukovi za Transport Tycoon Deluxe DOS izdanje.
|
description.hr_HR = Originalni zvukovi za Transport Tycoon Deluxe DOS izdanje.
|
||||||
@@ -33,6 +34,7 @@ description.is_IS = Upprunalega hljóðið úr Transport Tycoon Deluxe DOS útg
|
|||||||
description.it_IT = Suoni originali di Transport Tycoon Deluxe, edizione DOS.
|
description.it_IT = Suoni originali di Transport Tycoon Deluxe, edizione DOS.
|
||||||
description.ja_JP = Transport Tycoon Deluxe オリジナル版 効果音 (DOS)
|
description.ja_JP = Transport Tycoon Deluxe オリジナル版 効果音 (DOS)
|
||||||
description.ko_KR = 오리지널 트랜스포트 타이쿤 도스 에디션의 효과음입니다.
|
description.ko_KR = 오리지널 트랜스포트 타이쿤 도스 에디션의 효과음입니다.
|
||||||
|
description.la_VA = Soni ex editione originale Transport Tycoon Deluxe DOS.
|
||||||
description.lb_LU = Original Transport Tycoon Deluxe DOS Editioun Sound.
|
description.lb_LU = Original Transport Tycoon Deluxe DOS Editioun Sound.
|
||||||
description.lt_LT = Originalūs Transport Tycoon Deluxe DOS leidimo garsai.
|
description.lt_LT = Originalūs Transport Tycoon Deluxe DOS leidimo garsai.
|
||||||
description.nb_NO = Originale lyder fra Transport Tycoon Deluxe for DOS.
|
description.nb_NO = Originale lyder fra Transport Tycoon Deluxe for DOS.
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
; $Id: orig_dos_de.obg 26414 2014-03-18 19:51:54Z frosch $
|
; $Id: orig_dos_de.obg 27041 2014-10-25 12:35:48Z rubidium $
|
||||||
;
|
;
|
||||||
; This represents the original graphics as on the German Transport
|
; This represents the original graphics as on the German Transport
|
||||||
; Tycoon Deluxe DOS CD. It contains one broken sprite.
|
; Tycoon Deluxe DOS CD. It contains one broken sprite.
|
||||||
@@ -25,6 +25,7 @@ description.es_ES = Gráficos originales de Transport Tycoon Deluxe versión DOS
|
|||||||
description.et_EE = Algse Transport Tycoon Deluxe DOSi (Saksa) versiooni graafika.
|
description.et_EE = Algse Transport Tycoon Deluxe DOSi (Saksa) versiooni graafika.
|
||||||
description.fi_FI = Alkuperäiset Saksassa julkaistun Transport Tycoon Deluxen DOS-version grafiikat.
|
description.fi_FI = Alkuperäiset Saksassa julkaistun Transport Tycoon Deluxen DOS-version grafiikat.
|
||||||
description.fr_FR = Graphiques originaux de Transport Tycoon Deluxe (version DOS allemande).
|
description.fr_FR = Graphiques originaux de Transport Tycoon Deluxe (version DOS allemande).
|
||||||
|
description.ga_IE = Grafaicí bunaidhTransport Tycoon Deluxe, eagrán DOS (Gearmánach).
|
||||||
description.gd_GB = Grafaigeachd aig an deasachadh DOS (Gearmailteach) tùsail aig Transport Tycoon Deluxe.
|
description.gd_GB = Grafaigeachd aig an deasachadh DOS (Gearmailteach) tùsail aig Transport Tycoon Deluxe.
|
||||||
description.gl_ES = Graficos da edición orixinal (alemá) de Transport Tycoon Deluxe para DOS.
|
description.gl_ES = Graficos da edición orixinal (alemá) de Transport Tycoon Deluxe para DOS.
|
||||||
description.hr_HR = Originalna grafika za Transport Tycoon Deluxe DOS (Njemački) izdanje.
|
description.hr_HR = Originalna grafika za Transport Tycoon Deluxe DOS (Njemački) izdanje.
|
||||||
@@ -34,6 +35,7 @@ description.is_IS = Upprunalega grafíkin úr Transport Tycoon Deluxe DOS (þýs
|
|||||||
description.it_IT = Grafica originale di Transport Tycoon Deluxe (tedesco), edizione DOS.
|
description.it_IT = Grafica originale di Transport Tycoon Deluxe (tedesco), edizione DOS.
|
||||||
description.ja_JP = Transport Tycoon Deluxe オリジナル版 グラフィック (DOS・ドイツ版)
|
description.ja_JP = Transport Tycoon Deluxe オリジナル版 グラフィック (DOS・ドイツ版)
|
||||||
description.ko_KR = 오리지널 트랜스포트 타이쿤 디럭스 도스 에디션(독일)의 그래픽입니다.
|
description.ko_KR = 오리지널 트랜스포트 타이쿤 디럭스 도스 에디션(독일)의 그래픽입니다.
|
||||||
|
description.la_VA = Graphica ex editione originale Transport Tycoon Deluxe DOS (Germanica).
|
||||||
description.lb_LU = Original Transport Tycoon Deluxe DOS (Däitsch) Editioun Grafik.
|
description.lb_LU = Original Transport Tycoon Deluxe DOS (Däitsch) Editioun Grafik.
|
||||||
description.lt_LT = Originali Transport Tycoon Deluxe DOS (Vokiečių) leidimo grafika.
|
description.lt_LT = Originali Transport Tycoon Deluxe DOS (Vokiečių) leidimo grafika.
|
||||||
description.nb_NO = Original grafikk fra Transport Tycoon Deluxe for DOS (tysk).
|
description.nb_NO = Original grafikk fra Transport Tycoon Deluxe for DOS (tysk).
|
||||||
@@ -70,7 +72,7 @@ TRGI.GRF = da6a6c9dcc451eec88d79211437b76a8
|
|||||||
TRGC.GRF = ed446637e034104c5559b32c18afe78d
|
TRGC.GRF = ed446637e034104c5559b32c18afe78d
|
||||||
TRGH.GRF = ee6616fb0e6ef6b24892c58c93d86fc9
|
TRGH.GRF = ee6616fb0e6ef6b24892c58c93d86fc9
|
||||||
TRGT.GRF = fcde1d7e8a74197d72a62695884b909e
|
TRGT.GRF = fcde1d7e8a74197d72a62695884b909e
|
||||||
OPENTTD.GRF = 75a93cea2ed455c2fd5dcbda39e53538
|
OPENTTD.GRF = 505d96061556d3bb5cec6234096ec5bc
|
||||||
|
|
||||||
[origin]
|
[origin]
|
||||||
default = You can find it on your Transport Tycoon Deluxe CD-ROM.
|
default = You can find it on your Transport Tycoon Deluxe CD-ROM.
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
; $Id: orig_win.obg 26414 2014-03-18 19:51:54Z frosch $
|
; $Id: orig_win.obg 27041 2014-10-25 12:35:48Z rubidium $
|
||||||
;
|
;
|
||||||
; This represents the original graphics as on the Transport
|
; This represents the original graphics as on the Transport
|
||||||
; Tycoon Deluxe for Windows CD.
|
; Tycoon Deluxe for Windows CD.
|
||||||
@@ -25,6 +25,7 @@ description.es_ES = Gráficos originales de Transport Tycoon Deluxe versión Win
|
|||||||
description.et_EE = Algse Transport Tycoon Deluxe Windowsi versiooni graafika.
|
description.et_EE = Algse Transport Tycoon Deluxe Windowsi versiooni graafika.
|
||||||
description.fi_FI = Alkuperäiset Transport Tycoon Deluxen Windows-version grafiikat.
|
description.fi_FI = Alkuperäiset Transport Tycoon Deluxen Windows-version grafiikat.
|
||||||
description.fr_FR = Graphiques originaux de Transport Tycoon Deluxe (version Windows).
|
description.fr_FR = Graphiques originaux de Transport Tycoon Deluxe (version Windows).
|
||||||
|
description.ga_IE = Grafaicí bunaidhTransport Tycoon Deluxe, eagrán Windows.
|
||||||
description.gd_GB = Grafaigeachd aig an deasachadh Windows tùsail aig Transport Tycoon Deluxe.
|
description.gd_GB = Grafaigeachd aig an deasachadh Windows tùsail aig Transport Tycoon Deluxe.
|
||||||
description.gl_ES = Graficos da edición orixinal de Transport Tycoon Deluxe para Windows.
|
description.gl_ES = Graficos da edición orixinal de Transport Tycoon Deluxe para Windows.
|
||||||
description.hr_HR = Originalna grafika za Transport Tycoon Deluxe Windows izdanje.
|
description.hr_HR = Originalna grafika za Transport Tycoon Deluxe Windows izdanje.
|
||||||
@@ -34,6 +35,7 @@ description.is_IS = Upprunalega grafíkin úr Transport Tycoon Deluxe Windows ú
|
|||||||
description.it_IT = Grafica originale di Transport Tycoon Deluxe, edizione Windows.
|
description.it_IT = Grafica originale di Transport Tycoon Deluxe, edizione Windows.
|
||||||
description.ja_JP = Transport Tycoon Deluxe オリジナル版 グラフィック (Windows)
|
description.ja_JP = Transport Tycoon Deluxe オリジナル版 グラフィック (Windows)
|
||||||
description.ko_KR = 오리지널 트랜스포트 타이쿤 디럭스 윈도 에디션의 그래픽입니다.
|
description.ko_KR = 오리지널 트랜스포트 타이쿤 디럭스 윈도 에디션의 그래픽입니다.
|
||||||
|
description.la_VA = Graphica ex editione originale Transport Tycoon Deluxe Windows.
|
||||||
description.lb_LU = Original Transport Tycoon Deluxe Windows Editioun Grafik.
|
description.lb_LU = Original Transport Tycoon Deluxe Windows Editioun Grafik.
|
||||||
description.lt_LT = Originali Transport Tycoon Deluxe Windows leidimo grafika.
|
description.lt_LT = Originali Transport Tycoon Deluxe Windows leidimo grafika.
|
||||||
description.nb_NO = Original grafikk fra Transport Tycoon Deluxe for Windows.
|
description.nb_NO = Original grafikk fra Transport Tycoon Deluxe for Windows.
|
||||||
@@ -70,7 +72,7 @@ TRGIR.GRF = 0c2484ff6be49fc63a83be6ab5c38f32
|
|||||||
TRGCR.GRF = 3668f410c761a050b5e7095a2b14879b
|
TRGCR.GRF = 3668f410c761a050b5e7095a2b14879b
|
||||||
TRGHR.GRF = 06bf2b7a31766f048baac2ebe43457b1
|
TRGHR.GRF = 06bf2b7a31766f048baac2ebe43457b1
|
||||||
TRGTR.GRF = de53650517fe661ceaa3138c6edb0eb8
|
TRGTR.GRF = de53650517fe661ceaa3138c6edb0eb8
|
||||||
OPENTTD.GRF = 75a93cea2ed455c2fd5dcbda39e53538
|
OPENTTD.GRF = 505d96061556d3bb5cec6234096ec5bc
|
||||||
|
|
||||||
[origin]
|
[origin]
|
||||||
default = You can find it on your Transport Tycoon Deluxe CD-ROM.
|
default = You can find it on your Transport Tycoon Deluxe CD-ROM.
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
; $Id: orig_win.obm 26414 2014-03-18 19:51:54Z frosch $
|
; $Id: orig_win.obm 27041 2014-10-25 12:35:48Z rubidium $
|
||||||
;
|
;
|
||||||
; This represents the original music as on the Transport
|
; This represents the original music as on the Transport
|
||||||
; Tycoon Deluxe for Windows CD.
|
; Tycoon Deluxe for Windows CD.
|
||||||
@@ -24,6 +24,7 @@ description.es_ES = Música original de Transport Tycoon Deluxe versión Windows
|
|||||||
description.et_EE = Algse Transport Tycoon Deluxe Windowsi versiooni muusika.
|
description.et_EE = Algse Transport Tycoon Deluxe Windowsi versiooni muusika.
|
||||||
description.fi_FI = Alkuperäinen Transport Tycoon Deluxen Windows-version musiikki.
|
description.fi_FI = Alkuperäinen Transport Tycoon Deluxen Windows-version musiikki.
|
||||||
description.fr_FR = Musiques originales de Transport Tycoon Deluxe (version Windows).
|
description.fr_FR = Musiques originales de Transport Tycoon Deluxe (version Windows).
|
||||||
|
description.ga_IE = Ceol bunaidh Transport Tycoon Deluxe, eagrán Windows.
|
||||||
description.gd_GB = Ceòl aig an deasachadh Windows tùsail aig Transport Tycoon Deluxe.
|
description.gd_GB = Ceòl aig an deasachadh Windows tùsail aig Transport Tycoon Deluxe.
|
||||||
description.gl_ES = Música da edición orixinal de Transport Tycoon Deluxe para Windows.
|
description.gl_ES = Música da edición orixinal de Transport Tycoon Deluxe para Windows.
|
||||||
description.hr_HR = Originalna muzika za Transport Tycoon Deluxe Windows izdanje.
|
description.hr_HR = Originalna muzika za Transport Tycoon Deluxe Windows izdanje.
|
||||||
@@ -33,6 +34,7 @@ description.is_IS = Upprunalega tónlistin úr Transport Tycoon Deluxe Windows
|
|||||||
description.it_IT = Musica originale di Transport Tycoon Deluxe, edizione Windows.
|
description.it_IT = Musica originale di Transport Tycoon Deluxe, edizione Windows.
|
||||||
description.ja_JP = Transport Tycoon Deluxe オリジナル版 音楽 (Windows)
|
description.ja_JP = Transport Tycoon Deluxe オリジナル版 音楽 (Windows)
|
||||||
description.ko_KR = 오리지널 트랜스포트 타이쿤 디럭스 윈도 에디션의 음악입니다.
|
description.ko_KR = 오리지널 트랜스포트 타이쿤 디럭스 윈도 에디션의 음악입니다.
|
||||||
|
description.la_VA = Musica ex editione originale Transport Tycoon Deluxe Windows.
|
||||||
description.lb_LU = Original Transport Tycoon Deluxe Windows Editioun Music.
|
description.lb_LU = Original Transport Tycoon Deluxe Windows Editioun Music.
|
||||||
description.lt_LT = Originali Transport Tycoon Deluxe Windows leidimo muzika.
|
description.lt_LT = Originali Transport Tycoon Deluxe Windows leidimo muzika.
|
||||||
description.lv_LV = Oriģinālā Transport Tycoon Deluxe Windows izdevuma mūzika.
|
description.lv_LV = Oriģinālā Transport Tycoon Deluxe Windows izdevuma mūzika.
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
; $Id: orig_win.obs 26414 2014-03-18 19:51:54Z frosch $
|
; $Id: orig_win.obs 27041 2014-10-25 12:35:48Z rubidium $
|
||||||
;
|
;
|
||||||
; This represents the original sounds as on the Transport
|
; This represents the original sounds as on the Transport
|
||||||
; Tycoon Deluxe for Windows CD.
|
; Tycoon Deluxe for Windows CD.
|
||||||
@@ -24,6 +24,7 @@ description.es_ES = Sonidos originales de Transport Tycoon Deluxe versión Windo
|
|||||||
description.et_EE = Algse Transport Tycoon Deluxe Windowsi versiooni helid.
|
description.et_EE = Algse Transport Tycoon Deluxe Windowsi versiooni helid.
|
||||||
description.fi_FI = Alkuperäiset Transport Tycoon Deluxen Windows-version äänet.
|
description.fi_FI = Alkuperäiset Transport Tycoon Deluxen Windows-version äänet.
|
||||||
description.fr_FR = Sons originaux de Transport Tycoon Deluxe (version Windows).
|
description.fr_FR = Sons originaux de Transport Tycoon Deluxe (version Windows).
|
||||||
|
description.ga_IE = Fuaimeanna bunaidh Transport Tycoon Deluxe, eagrán Windows.
|
||||||
description.gd_GB = Fuaimean aig an deasachadh Windows tùsail aig Transport Tycoon Deluxe.
|
description.gd_GB = Fuaimean aig an deasachadh Windows tùsail aig Transport Tycoon Deluxe.
|
||||||
description.gl_ES = Sons da edición orixinal de Transport Tycoon Deluxe para Windows.
|
description.gl_ES = Sons da edición orixinal de Transport Tycoon Deluxe para Windows.
|
||||||
description.hr_HR = Originalni zvukovi za Transport Tycoon Deluxe Windows izdanje.
|
description.hr_HR = Originalni zvukovi za Transport Tycoon Deluxe Windows izdanje.
|
||||||
@@ -33,6 +34,7 @@ description.is_IS = Upprunalega hljóðið úr Transport Tycoon Deluxe Windows
|
|||||||
description.it_IT = Suoni originali di Transport Tycoon Deluxe, edizione Windows.
|
description.it_IT = Suoni originali di Transport Tycoon Deluxe, edizione Windows.
|
||||||
description.ja_JP = Transport Tycoon Deluxe オリジナル版 効果音 (Windows)
|
description.ja_JP = Transport Tycoon Deluxe オリジナル版 効果音 (Windows)
|
||||||
description.ko_KR = 오리지널 트랜스포트 타이쿤 디럭스 윈도 에디션의 효과음입니다.
|
description.ko_KR = 오리지널 트랜스포트 타이쿤 디럭스 윈도 에디션의 효과음입니다.
|
||||||
|
description.la_VA = Soni ex editione originale Transport Tycoon Deluxe Windows.
|
||||||
description.lb_LU = Original Transport Tycoon Deluxe Windows Editioun Sound.
|
description.lb_LU = Original Transport Tycoon Deluxe Windows Editioun Sound.
|
||||||
description.lt_LT = Originalūs Transport Tycoon Deluxe Windows leidimo garsai.
|
description.lt_LT = Originalūs Transport Tycoon Deluxe Windows leidimo garsai.
|
||||||
description.nb_NO = Originale lyder fra Transport Tycoon Deluxe for Windows.
|
description.nb_NO = Originale lyder fra Transport Tycoon Deluxe for Windows.
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* $Id: compat_1.2.nut 25967 2013-11-12 17:56:35Z frosch $ */
|
/* $Id: compat_1.2.nut 27164 2015-02-22 17:25:29Z alberth $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This file is part of OpenTTD.
|
* This file is part of OpenTTD.
|
||||||
@@ -7,7 +7,7 @@
|
|||||||
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
|
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
GSLog.Info("1.2 API compatability in effect.");
|
GSLog.Info("1.2 API compatibility in effect.");
|
||||||
|
|
||||||
GSTown._SetGrowthRate <- GSTown.SetGrowthRate;
|
GSTown._SetGrowthRate <- GSTown.SetGrowthRate;
|
||||||
GSTown.SetGrowthRate <- function(town_id, days_between_town_growth)
|
GSTown.SetGrowthRate <- function(town_id, days_between_town_growth)
|
||||||
@@ -16,3 +16,10 @@ GSTown.SetGrowthRate <- function(town_id, days_between_town_growth)
|
|||||||
if (days_between_town_growth == 0) days_between_town_growth = GSTown.TOWN_GROWTH_NORMAL;
|
if (days_between_town_growth == 0) days_between_town_growth = GSTown.TOWN_GROWTH_NORMAL;
|
||||||
return GSTown._SetGrowthRate(town_id, days_between_town_growth);
|
return GSTown._SetGrowthRate(town_id, days_between_town_growth);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* 1.5 adds a game element reference to the news. */
|
||||||
|
GSNews._Create <- GSNews.Create;
|
||||||
|
GSNews.Create <- function(type, text, company)
|
||||||
|
{
|
||||||
|
return GSNews._Create(type, text, company, GSNews.NR_NONE, 0);
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* $Id: compat_1.3.nut 25967 2013-11-12 17:56:35Z frosch $ */
|
/* $Id: compat_1.3.nut 27164 2015-02-22 17:25:29Z alberth $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This file is part of OpenTTD.
|
* This file is part of OpenTTD.
|
||||||
@@ -7,7 +7,7 @@
|
|||||||
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
|
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
GSLog.Info("1.3 API compatability in effect.");
|
GSLog.Info("1.3 API compatibility in effect.");
|
||||||
|
|
||||||
GSTown._SetGrowthRate <- GSTown.SetGrowthRate;
|
GSTown._SetGrowthRate <- GSTown.SetGrowthRate;
|
||||||
GSTown.SetGrowthRate <- function(town_id, days_between_town_growth)
|
GSTown.SetGrowthRate <- function(town_id, days_between_town_growth)
|
||||||
@@ -16,3 +16,10 @@ GSTown.SetGrowthRate <- function(town_id, days_between_town_growth)
|
|||||||
if (days_between_town_growth == 0) days_between_town_growth = GSTown.TOWN_GROWTH_NORMAL;
|
if (days_between_town_growth == 0) days_between_town_growth = GSTown.TOWN_GROWTH_NORMAL;
|
||||||
return GSTown._SetGrowthRate(town_id, days_between_town_growth);
|
return GSTown._SetGrowthRate(town_id, days_between_town_growth);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* 1.5 adds a game element reference to the news. */
|
||||||
|
GSNews._Create <- GSNews.Create;
|
||||||
|
GSNews.Create <- function(type, text, company)
|
||||||
|
{
|
||||||
|
return GSNews._Create(type, text, company, GSNews.NR_NONE, 0);
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* $Id: compat_1.3.nut 24469 2012-08-13 19:33:17Z yexo $ */
|
/* $Id: compat_1.4.nut 27164 2015-02-22 17:25:29Z alberth $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This file is part of OpenTTD.
|
* This file is part of OpenTTD.
|
||||||
@@ -6,3 +6,12 @@
|
|||||||
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
|
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
GSLog.Info("1.4 API compatibility in effect.");
|
||||||
|
|
||||||
|
/* 1.5 adds a game element reference to the news. */
|
||||||
|
GSNews._Create <- GSNews.Create;
|
||||||
|
GSNews.Create <- function(type, text, company)
|
||||||
|
{
|
||||||
|
return GSNews._Create(type, text, company, GSNews.NR_NONE, 0);
|
||||||
|
}
|
||||||
|
|||||||
199
changelog.txt
199
changelog.txt
@@ -1,3 +1,202 @@
|
|||||||
|
1.5.0-beta2 (2015-02-24)
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
- Feature: [NoGo] Game scripts can point to a location, station, industry, or town when publishing news. (r27164)
|
||||||
|
- Feature: Allow changing max heightlevel in scenario editor. (r27151)
|
||||||
|
- Feature: Make use of both rocky tile sets from the base graphics. (r27117)
|
||||||
|
- Change: Scale (non-custom) default window sizes according to GUI zoom. (r27147)
|
||||||
|
- Change: Make statusbar and chat-entry window use the same width as the toolbar. (r27146)
|
||||||
|
- Change: The chatbox-width setting now uses percent of screen width instead of pixels. (r27144)
|
||||||
|
- Change: [NewGRF] Interpret negative positions in industry layouts depending on GRF version. (r27138)
|
||||||
|
- Fix: [SDL, Windows] Right-mouse-button scrolling scrolled/jumped too far, when OpenTTD lagged during mouse event processing. (r27167)
|
||||||
|
- Fix: Toolbars were not invalidated when changing max-vehicles settings. [FS#6204] (r27163)
|
||||||
|
- Fix: Tile selection was drawn outside of map in some cases. [FS#6208] (r27162)
|
||||||
|
- Fix: Reimplement the viewport drawing algorithm. [FS#6156] [FS#6206] (r27161)
|
||||||
|
- Fix: Issues with smallmap and viewport coordinates and transformations. (r27160, r27159, r27158)
|
||||||
|
- Fix: Mark bridge middle tiles dirty when building/removing/changing bridges. (r27157)
|
||||||
|
- Fix: Rounding and unit-conversion inconsistencies in calls to MarkAllViewportsDirty. (r27148)
|
||||||
|
- Fix: Oilrig empty-tile checks were incorrect due to wrong TileIndexDiff->TileIndexDiffC conversion. (r27137)
|
||||||
|
- Fix: Misalignment in generate world window in case of small fonts. (r27135)
|
||||||
|
- Fix: Dragging of free wagons in depot failed with GUI zoom. (r27133)
|
||||||
|
- Fix: Reduce memory footprint of map array by shuffling its members. [FS#6218] (r27132, r27126)
|
||||||
|
- Fix: Dropdown- and tooltip-windows should not steal the focus. (r27131)
|
||||||
|
- Fix: [NewGRF] Action 7/9 condition 0A failed for present, but disabled, NewGRF. (r27119)
|
||||||
|
- Fix: Road vehicles could not reverse to be sent to depots when the following tile has the right type to run on, but could not be entered. [FS#6183] (r27107)
|
||||||
|
- Fix: Use the actual max speed of the vehicle in front when determining if a RV can overtake. [FS#6176] (r27106)
|
||||||
|
- Fix: grow_counter was not properly bounded by growth_rate, but by some other value used to calculate growth_rate. [FS#6195] (r27105)
|
||||||
|
- Fix: [Script] Support 64 bits integers in ScriptLists. [FS#6194] (r27104)
|
||||||
|
- Fix: [Script] Money values would end up wrong in strings when outside the bounds of a 32 bits integer. [FS#6194] (r27102)
|
||||||
|
|
||||||
|
|
||||||
|
1.5.0-beta1 (2014-12-24)
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
- Feature: Support .txt.gz and -txt.xz changelog, readme and license files in basesets, NewGRFs, etc (r27035, r27034)
|
||||||
|
- Feature: More height levels [FS#4126] (r27010)
|
||||||
|
- Feature: Latin translation (r26993)
|
||||||
|
- Feature: Add option to choose normal, double or quad-size interface (r26990)
|
||||||
|
- Feature: [Script] Swap method for script lists (r26894)
|
||||||
|
- Feature: [Script] ScriptStationList_Cargo for sorting cargo by from and via (r26893)
|
||||||
|
- Feature: [Script] API for retrieving planned flow (r26892)
|
||||||
|
- Feature: [CargoDist] Predict links for station-autorefitting vehicles (r26889)
|
||||||
|
- Feature: Setting for limiting the height of bridges (r26882)
|
||||||
|
- Feature: Make aircraft ascend/descend when they are too close to the ground or too far away (r26866)
|
||||||
|
- Feature: Allow hiding of non-interesting engines in the GUI (r26805, r26804)
|
||||||
|
- Feature: Vehicle sorting in autoreplace GUI [FS#1640] (r26800)
|
||||||
|
- Feature: [NewGRF] Advanced visual effects with multiple effect sprites independent of spawning model (r26988, r26747)
|
||||||
|
- Feature: Warn about missing industries after generating a map (r26729)
|
||||||
|
- Feature: Upgrade currently active NewGRFs to newest installed version (r26613)
|
||||||
|
- Feature: Save and load grfid and md5sum of NewGRFs in config file (r26611)
|
||||||
|
- Feature: Select an editable preset name for saving (r26610)
|
||||||
|
- Feature: Cancel cargo delivery from industries/houses to stations after about 21 months of not having picked up any of the cargo (r26582)
|
||||||
|
- Feature: Give a warning when a plane's orders tell it to use a runway which is too short for it [FS#6009] (r26566)
|
||||||
|
- Feature: [Script] Extended API for CargoDist (r26557)
|
||||||
|
- Feature: Show measured order times in timetable GUI also when not timetabled (r26550)
|
||||||
|
- Feature: Prompt for confirmation when deleting a vehicle group (r26455)
|
||||||
|
- Feature: Hierarchical vehicle subgroups (r26450)
|
||||||
|
- Feature: Allow more sound sleep for dedicated servers when there's nothing to do and nobody paying attention (r26449)
|
||||||
|
- Feature: [NewGRF] Add vehicle modflag 1 (unloading in progress) (r26430)
|
||||||
|
- Change: Improvements to the man page (r27091, r27012)
|
||||||
|
- Change: Allow to set the granularity of the tooltip hover time in milliseconds instead of seconds. New default value is 250ms (r26815)
|
||||||
|
- Change: Follow SI recommendation about spaces between numbers and units [FS#6086] (r26733)
|
||||||
|
- Change: [CargoDist] Save locations instead of distances in link graphs to reduce size (r26646)
|
||||||
|
- Change: [Squirrel] Make the internal integer for scripts always 64 bits, so scripts behave the same on 32 and 64 bit architectures and money can be represented properly (r26585, r26584)
|
||||||
|
- Change: Reshuffle advanced settings tree (r26614, r26536)
|
||||||
|
- Change: Add backend-independent config-file setting to disable 8bpp video modes, and disable 8bpp by default (r26522)
|
||||||
|
- Fix: [OS/2] Compile again [FS#6186] (r27092)
|
||||||
|
- Fix: Compilation with freetype2 version 2.5.4 and newer [FS#6185] (r27079)
|
||||||
|
- Fix: Variable 47 used the carge translation table of the wrong GRF in case of callback 1D [FS#6182] (r27075)
|
||||||
|
- Fix: Some lists did not use natural string sorting [FS#6172] (r27063)
|
||||||
|
- Fix: Mercurial version detection failed if personal presets were configured (r27059)
|
||||||
|
- Fix: [OSX] Don't require double-press from non-dead console hotkeys [FS#5812] (r27046)
|
||||||
|
- Fix: Crash when having the vehicle list opened from a buoy or oil rig when the buoy/oil rig is removed (r27030)
|
||||||
|
- Fix: Unit number was not always fully shown in depots [FS#6102] (r27014)
|
||||||
|
- Fix: [CargoDist] Reserve cargo only after unloading finished or if the vehicle has the desired cargo already [FS#6110] (r26918)
|
||||||
|
- Fix: [Squirrel] Loading a value saved as boolean caused it to be of type integer instead of boolean (r26785)
|
||||||
|
- Fix: [Squirrel] Harden string handling (r26777)
|
||||||
|
- Fix: [OSX] Implement more of the text editing API to prevent crashes and improve IME support [FS#5972] (r26758)
|
||||||
|
- Fix: Incorrect saving of order backups [FS#6066] (r26700)
|
||||||
|
- Fix: Ordering a vehicle to a competitor's rail waypoint displayed an error message. Ignore the click as is done for the other order types to competitor's stuff [FS#6059] (r26692)
|
||||||
|
- Fix: [Script] Loading/parsing of info .nuts was done in the same VM, causing e.g. constants to break the loading of info of other scripts [FS#5973] (r26617)
|
||||||
|
- Fix: [CargoDist] Improve estimation of link capacitites (r26549)
|
||||||
|
- Remove: A bunch of archaic settings from the GUI (r26528, r26526, r26525)
|
||||||
|
|
||||||
|
|
||||||
|
1.4.4 (2014-10-21)
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
(None)
|
||||||
|
|
||||||
|
|
||||||
|
1.4.4-RC1 (2014-10-08)
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
- Fix: Image widgets stored 32bit SpriteID in uint16 (r26971)
|
||||||
|
- Fix: Owner of road depot road types were not properly changed upon bankruptcy [FS#6126] (r26955)
|
||||||
|
- Fix: Compilation on HAIKU (r26922)
|
||||||
|
- Fix: Crash when enabling 'Full animation' if multiplayer chat text is on screen [FS#6096] (r26919)
|
||||||
|
- Fix: Height computation of game script text in town GUI did not consider margins [FS#6119] (r26859)
|
||||||
|
- Fix: [Squirrel] Debian lintian issues (r26853)
|
||||||
|
- Fix: Compilation of strgen on various platforms like Solaris (r26850)
|
||||||
|
- Fix: Better display of refit information for articulated vehicles [FS#6113] (r26849, r26848)
|
||||||
|
- Fix: Do not assign a next hop when returning cargo [FS#6110] (r26847)
|
||||||
|
- Fix: The ok-button in the OSK for the signs list should just close the OSK [FS#6116] (r26827)
|
||||||
|
|
||||||
|
|
||||||
|
1.4.3 (2014-09-23)
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
(None)
|
||||||
|
|
||||||
|
|
||||||
|
1.4.3-RC2 (2014-09-14)
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
- Fix: Crashes on joining a server with pending order backups [FS#6112] (r26819)
|
||||||
|
- Fix: Crashes on start due to dereferencing the -1 index of the file names array of music files (r26809)
|
||||||
|
|
||||||
|
|
||||||
|
1.4.3-RC1 (2014-09-07)
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
- Fix: TC_NO_SHADE did not work for 32bpp text rendering (r26792)
|
||||||
|
- Fix: Loading a game with order backups leaked Orders and left unreachable items in the pool (r26787)
|
||||||
|
- Fix: Buffer overrun in SQCompiler::Error (r26764)
|
||||||
|
- Fix: Desync due to not always properly restoring game state from the savegame (r26753)
|
||||||
|
- Fix: [Script] Crashes and infinite loops when using lists in item-descending order [FS#6085] (r26744)
|
||||||
|
- Fix: Incorrect CFLAGS when enabling gprof profiling (r26737, r26735)
|
||||||
|
- Fix: Do not reset the last selected airport or layout, unless it is really necessary [FS#6083] (r26732)
|
||||||
|
- Fix: Use the normal search path to look for xdg-open at Unix [FS#6077] (r26724)
|
||||||
|
- Fix: Properly check for cargo acceptance of houses [FS#5997] (r26723)
|
||||||
|
|
||||||
|
|
||||||
|
1.4.2 (2014-08-16)
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
(None)
|
||||||
|
|
||||||
|
|
||||||
|
1.4.2-RC2 (2014-08-03)
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
- Change: Use awk instead of trying to convince cpp to preprocess nfo files (r26708)
|
||||||
|
- Fix: CMD_CLEAR_ORDER_BACKUP should not be suppressed by pause modes (r26716)
|
||||||
|
- Fix: [NewGRF] Parameters to SCC_NEWGRF_PUSH_WORD and SCC_NEWGRF_UNPRINT were not skipped during drawing (r26713)
|
||||||
|
- Fix: [OSX] Compilation fails with some lzo2 versions, if __LP64__ is defined to 0 instead of checking whether it is defined [FS#6069] (r26709)
|
||||||
|
- Fix: Wrong breakdown sound was played for ships [FS#6015] (r26706)
|
||||||
|
- Fix: Integer overflows in acceleration code causing either too low acceleration or too high acceleration [FS#6067] (r26702)
|
||||||
|
- Fix: Discard incorrectly saved order backups when clients join [FS#6066] (r26700)
|
||||||
|
- Fix: Do not crash when trying to show an error about vehicle in a NewGRF and the NewGRF was not loaded at all (r26699)
|
||||||
|
- Fix: Slovak uses space as group separator in numbers [FS#6064] (r26695)
|
||||||
|
- Fix: Tighten parameter bound checks on GSCargoMonitor functions, and return -1 on out-of-bound parameters (r26685)
|
||||||
|
|
||||||
|
|
||||||
|
1.4.2-RC1 (2014-07-03)
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
- Fix: CargoPacket::SourceStation() returns a StationID (r26660)
|
||||||
|
- Fix: Days in dates are not represented by ordinal numbers in all languages [FS#6047] (r26657)
|
||||||
|
- Fix: Production cheat cannot be allowed to be active in multiplayer for desync reasons, even when activated in singleplayer previously [FS#6044] (r26656)
|
||||||
|
- Fix: Make sure an 'abs' is used that supports int64 when using 'abs' on those variables (r26651)
|
||||||
|
- Fix: Support save/load chunk lengths of up to (1 << 32) - 1 [FS#6041] (r26650)
|
||||||
|
- Fix: Incorrect usage of string commands in the base language [FS#6037] (r26642, r26640, r26639, r26632)
|
||||||
|
- Fix: Segmentation fault when encountering a .obg/.obs/.obm with empty string/zero length MD5 checksums [FS#6038] (r26637)
|
||||||
|
- Fix: The 'Load' button was not properly enabled/disabled for old savegames without NewGRF information (r26634)
|
||||||
|
- Fix: If the video driver fails to supply a list of resolutions, display an error message [FS#6012] (r26629)
|
||||||
|
|
||||||
|
|
||||||
|
1.4.1 (2014-06-02)
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
- Fix: First send packages about new company, then clients joining it to admin port [FS#6025] (r26616)
|
||||||
|
|
||||||
|
|
||||||
|
1.4.1-RC2 (2014-05-18)
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
- Fix: Save/load issues on big endian machines (r26593, r26590, r26589)
|
||||||
|
- Fix: Consider multiheaded trains in station refits [FS#5995] (r26586)
|
||||||
|
- Fix: Game script could be changed in game by double clicking [FS#5974] (r26583)
|
||||||
|
- Fix: Transfer stations also should have a cargo rating [FS#5989] (r26581, r26580)
|
||||||
|
- Fix: [Network] AIs would not reset certain network state information upon creation of their company [FS#6003] (r26578, r26576)
|
||||||
|
- Fix: [Network] Client of non-dedicated server was not correctly put into the first company for all state variables [FS#6001] (r26577)
|
||||||
|
|
||||||
|
|
||||||
|
1.4.1-RC1 (2014-05-04)
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
- Change: Remove demand calculation based on tiles (r26484)
|
||||||
|
- Change: Use pkg-config for libpng as well (r26435, r26433, r26432)
|
||||||
|
- Change: Use better distance metric for link graph [FS#5941] (r26411)
|
||||||
|
- Fix: [Windows] Crash when the operating system performs the "paint" callback during window creation [FS#5994] (r26539, r26538)
|
||||||
|
- Fix: OpenBSD compilation [FS#5992] (r26523)
|
||||||
|
- Fix: prevent from ever reading huge (or negative) amounts of data in strgen (r26521)
|
||||||
|
- Fix: Severity rating of dedicated server messages during world generation (r26518)
|
||||||
|
- Fix: Buffer overruns in handling of symbolic links inside tars (r26514)
|
||||||
|
- Fix: Incorrect usage of strecpy (r26505, r26485)
|
||||||
|
- Fix: Reading console input on dedicated server relied on unspecified behaviour (r26496)
|
||||||
|
- Fix: Allow single-vehicle consists to station-refit in a meaningful way (r26483)
|
||||||
|
- Fix: Prevent comparing to NULL when strndup could not allocate memory (r26476)
|
||||||
|
- Fix: Potentially undefined shifts in NewGRF code (r26475)
|
||||||
|
- Fix: Make sure there is no uninitialised sprite data (r26473)
|
||||||
|
- Fix: Draw text shadow for ellipses (r26467)
|
||||||
|
- Fix: Add special handling for PALETTE_CRASH to work for non-8bpp-mapped sprites (r26463)
|
||||||
|
- Fix: Avoid division by 0 when scaling flow values [FS#5970] (r26448)
|
||||||
|
- Fix: Draw links to match _settings_game.vehicle.road_side [FS#5961] (r26445)
|
||||||
|
- Fix: Load button for heightmap list was missing [FS#5953] (r26428)
|
||||||
|
- Fix: Do not crash when supplying an invalid filename without extension to cmd parameter -q (r26423)
|
||||||
|
- Fix: Some road constructions used the rail sound effect [FS#5946] (r26422)
|
||||||
|
- Fix: Goal GUI failed to shade [FS#5948] (r26420)
|
||||||
|
- Fix: Shares button state was not appropriately updated when switching setting or company [FS#5947] (r26416)
|
||||||
|
|
||||||
|
|
||||||
1.4.0 (2014-04-01)
|
1.4.0 (2014-04-01)
|
||||||
------------------------------------------------------------------------
|
------------------------------------------------------------------------
|
||||||
(None)
|
(None)
|
||||||
|
|||||||
192
config.lib
192
config.lib
@@ -1,4 +1,4 @@
|
|||||||
# $Id: config.lib 26440 2014-04-01 18:33:16Z frosch $
|
# $Id: config.lib 27059 2014-11-09 16:37:07Z planetmaker $
|
||||||
|
|
||||||
# This file is part of OpenTTD.
|
# This file is part of OpenTTD.
|
||||||
# OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
|
# OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
|
||||||
@@ -57,8 +57,8 @@ set_default() {
|
|||||||
enable_translator="0"
|
enable_translator="0"
|
||||||
enable_unicode="1"
|
enable_unicode="1"
|
||||||
enable_console="1";
|
enable_console="1";
|
||||||
enable_assert="0"
|
enable_assert="1"
|
||||||
enable_strip="1"
|
enable_strip="0"
|
||||||
enable_universal="0"
|
enable_universal="0"
|
||||||
enable_osx_g5="0"
|
enable_osx_g5="0"
|
||||||
enable_cocoa_quartz="1"
|
enable_cocoa_quartz="1"
|
||||||
@@ -862,7 +862,7 @@ check_params() {
|
|||||||
endian="PREPROCESSOR"
|
endian="PREPROCESSOR"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
log 1 "checking endianess... $endian"
|
log 1 "checking endianness... $endian"
|
||||||
|
|
||||||
# Suppress language errors when there is a version defined, indicating a release
|
# Suppress language errors when there is a version defined, indicating a release
|
||||||
# It just isn't pretty if any release produces warnings in the languages.
|
# It just isn't pretty if any release produces warnings in the languages.
|
||||||
@@ -1037,7 +1037,7 @@ check_params() {
|
|||||||
log 1 "checking revision... svn detection (tag)"
|
log 1 "checking revision... svn detection (tag)"
|
||||||
elif [ -d "$ROOT_DIR/.git" ] && [ -n "`git help 2>/dev/null`" ]; then
|
elif [ -d "$ROOT_DIR/.git" ] && [ -n "`git help 2>/dev/null`" ]; then
|
||||||
log 1 "checking revision... git detection"
|
log 1 "checking revision... git detection"
|
||||||
elif [ -d "$ROOT_DIR/.hg" ] && [ -n "`hg help 2>/dev/null`" ]; then
|
elif [ -d "$ROOT_DIR/.hg" ] && [ -n "`HGPLAIN= hg help 2>/dev/null`" ]; then
|
||||||
log 1 "checking revision... hg detection"
|
log 1 "checking revision... hg detection"
|
||||||
elif [ -f "$ROOT_DIR/.ottdrev" ]; then
|
elif [ -f "$ROOT_DIR/.ottdrev" ]; then
|
||||||
log 1 "checking revision... source tarball"
|
log 1 "checking revision... source tarball"
|
||||||
@@ -1441,6 +1441,7 @@ make_cflags_and_ldflags() {
|
|||||||
make_compiler_cflags "$cc_host" "CFLAGS" "CXXFLAGS" "LDFLAGS" "FEATURES"
|
make_compiler_cflags "$cc_host" "CFLAGS" "CXXFLAGS" "LDFLAGS" "FEATURES"
|
||||||
|
|
||||||
CFLAGS="$CFLAGS -D$os"
|
CFLAGS="$CFLAGS -D$os"
|
||||||
|
CFLAGS_BUILD="$CFLAGS_BUILD -D$os"
|
||||||
|
|
||||||
if [ "$enable_debug" = "0" ]; then
|
if [ "$enable_debug" = "0" ]; then
|
||||||
# No debug, add default stuff
|
# No debug, add default stuff
|
||||||
@@ -1450,7 +1451,11 @@ make_cflags_and_ldflags() {
|
|||||||
LDFLAGS="$LDFLAGS -noixemul"
|
LDFLAGS="$LDFLAGS -noixemul"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
CFLAGS="-O2 -fomit-frame-pointer $CFLAGS"
|
if [ "$enable_profiling" = "0" ]; then
|
||||||
|
# -fomit-frame-pointer and -pg do not go well together (gcc errors they are incompatible)
|
||||||
|
CFLAGS="-fomit-frame-pointer $CFLAGS"
|
||||||
|
fi
|
||||||
|
CFLAGS="-O2 $CFLAGS"
|
||||||
else
|
else
|
||||||
OBJS_SUBDIR="debug"
|
OBJS_SUBDIR="debug"
|
||||||
|
|
||||||
@@ -1494,7 +1499,7 @@ make_cflags_and_ldflags() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$enable_profiling" != "0" ]; then
|
if [ "$enable_profiling" != "0" ]; then
|
||||||
CFLAGS="$CFLAGS -p"
|
CFLAGS="$CFLAGS -pg"
|
||||||
LDFLAGS="$LDFLAGS -pg"
|
LDFLAGS="$LDFLAGS -pg"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -1700,17 +1705,18 @@ make_cflags_and_ldflags() {
|
|||||||
|
|
||||||
if [ -n "$png_config" ]; then
|
if [ -n "$png_config" ]; then
|
||||||
CFLAGS="$CFLAGS -DWITH_PNG"
|
CFLAGS="$CFLAGS -DWITH_PNG"
|
||||||
CFLAGS="$CFLAGS `$png_config --cppflags --I_opts | tr '\n\r' ' '`"
|
CFLAGS="$CFLAGS `$png_config --cflags | tr '\n\r' ' '`"
|
||||||
|
|
||||||
# The extra flags are unneeded for latest libpng-config, but some versions are so broken...
|
|
||||||
if [ "$enable_static" != "0" ]; then
|
if [ "$enable_static" != "0" ]; then
|
||||||
if [ "$os" = "OSX" ]; then
|
if [ "$os" = "OSX" ]; then
|
||||||
LIBS="$LIBS `$png_config --prefix`/lib/libpng.a"
|
# fontconfig_config goes via pkg-config on all systems, which doesn't know --prefix
|
||||||
|
# Also, despite the reason we link to the .a file ourself (because we can't use -static), we do need to ask pkg-config about possible other deps
|
||||||
|
LIBS="$LIBS `$png_config --variable=prefix`/lib/libpng.a `$png_config --libs --static | sed s@-lpng[0-9]*@@`"
|
||||||
else
|
else
|
||||||
LIBS="$LIBS `$png_config --static --ldflags | tr '\n\r' ' '`"
|
LIBS="$LIBS `$png_config --libs --static | tr '\n\r' ' '`"
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
LIBS="$LIBS `$png_config --ldflags | tr '\n\r' ' '`"
|
LIBS="$LIBS `$png_config --libs | tr '\n\r' ' '`"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -2715,80 +2721,64 @@ detect_libtimidity() {
|
|||||||
detect_library "$with_libtimidity" "libtimidity" "libtimidity.a" "" "timidity.h"
|
detect_library "$with_libtimidity" "libtimidity" "libtimidity.a" "" "timidity.h"
|
||||||
}
|
}
|
||||||
|
|
||||||
detect_lzma() {
|
detect_pkg_config() {
|
||||||
# 0 means no, 1 is auto-detect, 2 is force
|
# $1 - config-param ($with_lzma value)
|
||||||
if [ "$with_lzma" = "0" ]; then
|
# $2 - package name ('liblzma')
|
||||||
log 1 "checking liblzma... disabled"
|
# $3 - config name ('lzma_config', sets $lzma_config)
|
||||||
|
# $4 - minimum module version ('2.3')
|
||||||
|
|
||||||
lzma_config=""
|
# 0 means no, 1 is auto-detect, 2 is force
|
||||||
|
if [ "$1" = "0" ]; then
|
||||||
|
log 1 "checking $2... disabled"
|
||||||
|
|
||||||
|
eval "$3=\"\""
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$with_lzma" = "1" ] || [ "$with_lzma" = "" ] || [ "$with_lzma" = "2" ]; then
|
log 2 "detecting $2"
|
||||||
lzma_config="pkg-config liblzma"
|
|
||||||
|
if [ "$1" = "1" ] || [ "$1" = "" ] || [ "$1" = "2" ]; then
|
||||||
|
pkg_config_call="pkg-config $2"
|
||||||
else
|
else
|
||||||
lzma_config="$with_lzma"
|
pkg_config_call="$1"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
version=`$lzma_config --modversion 2>/dev/null`
|
version=`$pkg_config_call --modversion 2>/dev/null`
|
||||||
ret=$?
|
ret=$?
|
||||||
log 2 "executing $lzma_config --modversion"
|
check_version "$4" "$version"
|
||||||
|
version_ok=$?
|
||||||
|
log 2 "executing $pkg_config_call --modversion"
|
||||||
log 2 " returned $version"
|
log 2 " returned $version"
|
||||||
log 2 " exit code $ret"
|
log 2 " exit code $ret"
|
||||||
|
|
||||||
if [ -z "$version" ] || [ "$ret" != "0" ]; then
|
if [ -z "$version" ] || [ "$ret" != "0" ] || [ "$version_ok" != "1" ]; then
|
||||||
log 1 "checking liblzma... not found"
|
if [ -n "$version" ] && [ "$version_ok" != "1" ]; then
|
||||||
|
log 1 "checking $2... needs at least version $4, $2 NOT enabled"
|
||||||
|
else
|
||||||
|
log 1 "checking $2... not found"
|
||||||
|
fi
|
||||||
|
|
||||||
# It was forced, so it should be found.
|
# It was forced, so it should be found.
|
||||||
if [ "$with_lzma" != "1" ]; then
|
if [ "$1" != "1" ]; then
|
||||||
log 1 "configure: error: pkg-config liblzma couldn't be found"
|
log 1 "configure: error: pkg-config $2 couldn't be found"
|
||||||
log 1 "configure: error: you supplied '$with_lzma', but it seems invalid"
|
log 1 "configure: error: you supplied '$1', but it seems invalid"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
lzma_config=""
|
eval "$3=\"\""
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
log 1 "checking liblzma... found"
|
eval "$3=\"$pkg_config_call\""
|
||||||
|
log 1 "checking $2... found"
|
||||||
|
}
|
||||||
|
|
||||||
|
detect_lzma() {
|
||||||
|
detect_pkg_config "$with_lzma" "liblzma" "lzma_config" "5.0"
|
||||||
}
|
}
|
||||||
|
|
||||||
detect_xdg_basedir() {
|
detect_xdg_basedir() {
|
||||||
# 0 means no, 1 is auto-detect, 2 is force
|
detect_pkg_config "$with_xdg_basedir" "libxdg-basedir" "xdg_basedir_config" "1.2"
|
||||||
if [ "$with_xdg_basedir" = "0" ]; then
|
|
||||||
log 1 "checking libxdg_basedir... disabled"
|
|
||||||
|
|
||||||
xdg_basedir_config=""
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$with_xdg_basedir" = "1" ] || [ "$with_xdg_basedir" = "" ] || [ "$with_xdg_basedir" = "2" ]; then
|
|
||||||
xdg_basedir_config="pkg-config libxdg-basedir"
|
|
||||||
else
|
|
||||||
xdg_basedir_config="$with_xdg_basedir"
|
|
||||||
fi
|
|
||||||
|
|
||||||
version=`$xdg_basedir_config --modversion 2>/dev/null`
|
|
||||||
ret=$?
|
|
||||||
log 2 "executing $xdg_basedir_config --modversion"
|
|
||||||
log 2 " returned $version"
|
|
||||||
log 2 " exit code $ret"
|
|
||||||
|
|
||||||
if [ -z "$version" ] || [ "$ret" != "0" ]; then
|
|
||||||
log 1 "checking libxdg_basedir... not found"
|
|
||||||
|
|
||||||
# It was forced, so it should be found.
|
|
||||||
if [ "$with_xdg_basedir" != "1" ]; then
|
|
||||||
log 1 "configure: error: pkg-config libxdg_basedir couldn't be found"
|
|
||||||
log 1 "configure: error: you supplied '$with_xdg_basedir', but it seems invalid"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
xdg_basedir_config=""
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
log 1 "checking libxdg_basedir... found"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
detect_png() {
|
detect_png() {
|
||||||
@@ -2815,33 +2805,7 @@ detect_png() {
|
|||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$with_png" = "1" ] || [ "$with_png" = "" ] || [ "$with_png" = "2" ]; then
|
detect_pkg_config "$with_png" "libpng" "png_config" "1.2"
|
||||||
png_config="libpng-config"
|
|
||||||
else
|
|
||||||
png_config="$with_png"
|
|
||||||
fi
|
|
||||||
|
|
||||||
version=`$png_config --version 2>/dev/null`
|
|
||||||
ret=$?
|
|
||||||
log 2 "executing $png_config --version"
|
|
||||||
log 2 " returned $version"
|
|
||||||
log 2 " exit code $ret"
|
|
||||||
|
|
||||||
if [ -z "$version" ] || [ "$ret" != "0" ]; then
|
|
||||||
log 1 "checking libpng... not found"
|
|
||||||
|
|
||||||
# It was forced, so it should be found.
|
|
||||||
if [ "$with_png" != "1" ]; then
|
|
||||||
log 1 "configure: error: libpng-config couldn't be found"
|
|
||||||
log 1 "configure: error: you supplied '$with_png', but it seems invalid"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
png_config=""
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
log 1 "checking libpng... found"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
detect_freetype() {
|
detect_freetype() {
|
||||||
@@ -2936,39 +2900,7 @@ detect_fontconfig() {
|
|||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$with_fontconfig" = "1" ] || [ "$with_fontconfig" = "" ] || [ "$with_fontconfig" = "2" ]; then
|
detect_pkg_config "$with_fontconfig" "fontconfig" "fontconfig_config" "2.3"
|
||||||
fontconfig_config="pkg-config fontconfig"
|
|
||||||
else
|
|
||||||
fontconfig_config="$with_fontconfig"
|
|
||||||
fi
|
|
||||||
|
|
||||||
version=`$fontconfig_config --modversion 2>/dev/null`
|
|
||||||
ret=$?
|
|
||||||
check_version '2.3' "$version"
|
|
||||||
version_ok=$?
|
|
||||||
log 2 "executing $fontconfig_config --modversion"
|
|
||||||
log 2 " returned $version"
|
|
||||||
log 2 " exit code $ret"
|
|
||||||
|
|
||||||
if [ -z "$version" ] || [ "$ret" != "0" ] || [ "$version_ok" != "1" ]; then
|
|
||||||
if [ -n "$version" ] && [ "$version_ok" != "1" ]; then
|
|
||||||
log 1 "checking libfontconfig... needs at least version 2.3.0, fontconfig NOT enabled"
|
|
||||||
else
|
|
||||||
log 1 "checking libfontconfig... not found"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# It was forced, so it should be found.
|
|
||||||
if [ "$with_fontconfig" != "1" ]; then
|
|
||||||
log 1 "configure: error: fontconfig-config couldn't be found"
|
|
||||||
log 1 "configure: error: you supplied '$with_fontconfig', but it seems invalid"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
fontconfig_config=""
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
log 1 "checking libfontconfig... found"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
detect_icu() {
|
detect_icu() {
|
||||||
@@ -3251,9 +3183,9 @@ detect_grfcodec() {
|
|||||||
log 2 " returned $version"
|
log 2 " returned $version"
|
||||||
log 2 " exit code $ret"
|
log 2 " exit code $ret"
|
||||||
|
|
||||||
if [ -z "$version" ] || [ "$ret" != "0" ] || [ "$version" -lt "949" ]; then
|
if [ -z "$version" ] || [ "$ret" != "0" ] || [ "$version" -lt "985" ]; then
|
||||||
if [ -n "$version" ] && [ "$version" -lt "949" ]; then
|
if [ -n "$version" ] && [ "$version" -lt "985" ]; then
|
||||||
log 1 "checking grfcodec... needs at least version 6.0.2 (r949), disabled"
|
log 1 "checking grfcodec... needs at least version 6.0.5 (r985), disabled"
|
||||||
else
|
else
|
||||||
log 1 "checking grfcodec... not found"
|
log 1 "checking grfcodec... not found"
|
||||||
fi
|
fi
|
||||||
@@ -3293,9 +3225,9 @@ detect_nforenum() {
|
|||||||
log 2 " returned $version"
|
log 2 " returned $version"
|
||||||
log 2 " exit code $ret"
|
log 2 " exit code $ret"
|
||||||
|
|
||||||
if [ -z "$version" ] || [ "$ret" != "0" ] || [ "$version" -lt "949" ]; then
|
if [ -z "$version" ] || [ "$ret" != "0" ] || [ "$version" -lt "985" ]; then
|
||||||
if [ -n "$version" ] && [ "$version" -lt "949" ]; then
|
if [ -n "$version" ] && [ "$version" -lt "985" ]; then
|
||||||
log 1 "checking nforenum... needs at least version 6.0.2 (r949), disabled"
|
log 1 "checking nforenum... needs at least version 6.0.5 (r985), disabled"
|
||||||
else
|
else
|
||||||
log 1 "checking nforenum... not found"
|
log 1 "checking nforenum... not found"
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -106,7 +106,7 @@ Table of contents
|
|||||||
The important thing here is: The detection of the Desync is
|
The important thing here is: The detection of the Desync is
|
||||||
only an ultimate failure detection. It does not give any
|
only an ultimate failure detection. It does not give any
|
||||||
indication on when the Desync happened. The Desync may after
|
indication on when the Desync happened. The Desync may after
|
||||||
all have occured long ago, and just did not affect the checksum
|
all have occurred long ago, and just did not affect the checksum
|
||||||
up to now. The checksum may have matched 10 times or more
|
up to now. The checksum may have matched 10 times or more
|
||||||
since the Desync happend, and only now the Desync has spiraled
|
since the Desync happend, and only now the Desync has spiraled
|
||||||
enough to finally affect the checksum. (There was once a desync
|
enough to finally affect the checksum. (There was once a desync
|
||||||
@@ -194,6 +194,7 @@ Table of contents
|
|||||||
- Get the same version of OpenTTD as the original server was running.
|
- Get the same version of OpenTTD as the original server was running.
|
||||||
- Uncomment/enable the define 'DEBUG_DUMP_COMMANDS' in
|
- Uncomment/enable the define 'DEBUG_DUMP_COMMANDS' in
|
||||||
'src/network/network_func.h'.
|
'src/network/network_func.h'.
|
||||||
|
(DEBUG_FAILED_DUMP_COMMANDS is explained later)
|
||||||
- Put the 'commands-out.log' into the root save folder, and rename
|
- Put the 'commands-out.log' into the root save folder, and rename
|
||||||
it to 'commands.log'.
|
it to 'commands.log'.
|
||||||
- Run 'openttd -D -d desync=3 -g startsavegame.sav'.
|
- Run 'openttd -D -d desync=3 -g startsavegame.sav'.
|
||||||
@@ -217,6 +218,11 @@ Table of contents
|
|||||||
the last dmp_cmds that reproduces the replay and the first one
|
the last dmp_cmds that reproduces the replay and the first one
|
||||||
that fails.
|
that fails.
|
||||||
|
|
||||||
|
If the replay does not succeed without mismatch, you can check the logs
|
||||||
|
whether there were failed commands. Then you may try to replay with
|
||||||
|
DEBUG_FAILED_DUMP_COMMANDS enabled. If the replay then fails, the
|
||||||
|
command test-run of the failed command modified the game state.
|
||||||
|
|
||||||
If you have the original 'dmp_cmds_*.sav', you can also compare those
|
If you have the original 'dmp_cmds_*.sav', you can also compare those
|
||||||
savegames with your own ones from the replay. You can also comment/disable
|
savegames with your own ones from the replay. You can also comment/disable
|
||||||
the 'NOT_REACHED' mentioned above, to get another 'dmp_cmds_*.sav' from
|
the 'NOT_REACHED' mentioned above, to get another 'dmp_cmds_*.sav' from
|
||||||
|
|||||||
@@ -15,20 +15,60 @@
|
|||||||
For a graphical representation of the tile-layout have a look at
|
For a graphical representation of the tile-layout have a look at
|
||||||
<a href="landscape_grid.html">Landscape grid</a> page.
|
<a href="landscape_grid.html">Landscape grid</a> page.
|
||||||
</p>
|
</p>
|
||||||
<p>Eight attributes (counting "<span style="font-weight: bold;">type_height</span>") hold the informations about a tile.<BR>
|
<p>Nine attributes (counting "<span style="font-weight: bold;">type</span>" and
|
||||||
|
"<span style="font-weight: bold;">height</span>") hold the informations about a tile.<BR>
|
||||||
These attributes are referred to as
|
These attributes are referred to as
|
||||||
"<span style="font-weight: bold;">type_height</span>",
|
"<span style="font-weight: bold;">type</span>",
|
||||||
|
"<span style="font-weight: bold;">height</span>",
|
||||||
"<span style="font-weight: bold;">m1</span>", "<span style="font-weight: bold;">m2</span>",
|
"<span style="font-weight: bold;">m1</span>", "<span style="font-weight: bold;">m2</span>",
|
||||||
"<span style="font-weight: bold;">m3</span>", "<span style="font-weight: bold;">m4</span>",
|
"<span style="font-weight: bold;">m3</span>", "<span style="font-weight: bold;">m4</span>",
|
||||||
"<span style="font-weight: bold;">m5</span>", "<span style="font-weight: bold;">m6</span>"
|
"<span style="font-weight: bold;">m5</span>", "<span style="font-weight: bold;">m6</span>"
|
||||||
and "<span style="font-weight: bold;">m7</span>".<br>
|
and "<span style="font-weight: bold;">m7</span>".<br>
|
||||||
The most important value is the class of a tile, stored in the upper 4 bits
|
The most important value is the class of a tile, stored in the upper 4 bits
|
||||||
of the <span style="font-weight: bold;">type_height</span> attribute. The lower 4 bits are used to encode the height and
|
of the <span style="font-weight: bold;">type</span> attribute.
|
||||||
slope data.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
Frequently repeating patterns:
|
Frequently repeating patterns:
|
||||||
<ul>
|
<ul>
|
||||||
|
<li><span style="font-weight: bold;">type</span>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<a name="type"></a>
|
||||||
|
Bits 7..4:
|
||||||
|
<table border="1" style="width: 30em;">
|
||||||
|
<tr bgcolor="#CCCCCC"><td colspan="2">The tile type.</td></tr>
|
||||||
|
<tr><td style="width: 5em;"><tt>00</tt></td><td>Ground</td></tr>
|
||||||
|
<tr><td><tt>01</tt></td><td>Railway tracks</td></tr>
|
||||||
|
<tr><td><tt>02</tt></td><td>Roads</td></tr>
|
||||||
|
<tr><td><tt>03</tt></td><td>Town building</td></tr>
|
||||||
|
<tr><td><tt>04</tt></td><td>Trees</td></tr>
|
||||||
|
<tr><td><tt>05</tt></td><td>Station tiles</td></tr>
|
||||||
|
<tr><td><tt>06</tt></td><td>Water</td></tr>
|
||||||
|
<tr><td><tt>07</tt></td><td>Void</td></tr>
|
||||||
|
<tr><td><tt>08</tt></td><td>Industries</td></tr>
|
||||||
|
<tr><td><tt>09</tt></td><td>Tunnel / bridge</td></tr>
|
||||||
|
<tr><td><tt>0A</tt></td><td>Objects</td></tr>
|
||||||
|
</table>
|
||||||
|
</li>
|
||||||
|
Bits 3..2:
|
||||||
|
<table border="1" style="width: 30em;">
|
||||||
|
<tr bgcolor="#CCCCCC"><td colspan="2">Presence and direction of bridge above.</td></tr>
|
||||||
|
<tr><td style="width: 5em;"><tt>00</tt></td><td>no bridge</td></tr>
|
||||||
|
<tr><td><tt>01</tt></td><td>Axis X (North-East)</td></tr>
|
||||||
|
<tr><td><tt>02</tt></td><td>Axis Y (South-West)</td></tr>
|
||||||
|
</table>
|
||||||
|
<li>
|
||||||
|
<a name="tropic_zone"></a>
|
||||||
|
Bits 1..0:
|
||||||
|
<table border="1" style="width: 30em;">
|
||||||
|
<tr bgcolor="#CCCCCC"><td colspan="2">Only meaningfull in tropic climate. It contains the definition of the available zones</td></tr>
|
||||||
|
<tr><td style="width: 5em;"><tt>00</tt></td><td>normal</td></tr>
|
||||||
|
<tr><td><tt>01</tt></td><td>desert</td></tr>
|
||||||
|
<tr><td><tt>02</tt></td><td>rain forest</td></tr>
|
||||||
|
</table>
|
||||||
|
In any other climate these 2 bits are theoretically free of use, however using them does not seem useful.
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
<li><span style="font-weight: bold;">m1</span>
|
<li><span style="font-weight: bold;">m1</span>
|
||||||
<ul>
|
<ul>
|
||||||
<li>
|
<li>
|
||||||
@@ -58,32 +98,6 @@
|
|||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li><span style="font-weight: bold;">m6</span>
|
|
||||||
<ul>
|
|
||||||
<li>
|
|
||||||
<a name="bridge_direction"></a>
|
|
||||||
Bits 7..6:
|
|
||||||
<table border="1" style="width: 30em;">
|
|
||||||
<tr bgcolor="#CCCCCC"><td colspan="2">Presence and direction of bridge above, for tiles that support this.</td></tr>
|
|
||||||
<tr><td style="width: 5em;"><tt>00</tt></td><td>no bridge</td></tr>
|
|
||||||
<tr><td><tt>01</tt></td><td>Axis X (North-East)</td></tr>
|
|
||||||
<tr><td><tt>02</tt></td><td>Axis Y (South-West)</td></tr>
|
|
||||||
</table>
|
|
||||||
Some tiles, such as houses do not support bridges over them and use these bits for other purposes.
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a name="tropic_zone"></a>
|
|
||||||
Bits 1..0:
|
|
||||||
<table border="1" style="width: 30em;">
|
|
||||||
<tr bgcolor="#CCCCCC"><td colspan="2">Only meaningfull in tropic climate. It contains the definition of the available zones</td></tr>
|
|
||||||
<tr><td style="width: 5em;"><tt>00</tt></td><td>normal</td></tr>
|
|
||||||
<tr><td><tt>01</tt></td><td>desert</td></tr>
|
|
||||||
<tr><td><tt>02</tt></td><td>rain forest</td></tr>
|
|
||||||
</table>
|
|
||||||
In any other climate these 2 bits are theoretically free of use, however using them does not seem useful.
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
<li><span style="font-weight: bold;">m7:</span><br>
|
<li><span style="font-weight: bold;">m7:</span><br>
|
||||||
Animation frame/state. Used for houses, industries, objects and stations.
|
Animation frame/state. Used for houses, industries, objects and stations.
|
||||||
</li>
|
</li>
|
||||||
@@ -196,9 +210,7 @@
|
|||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</li>
|
</li>
|
||||||
<li>m6 bits 7..6 : Possibility of a bridge above, in the <a href="#bridge_direction">direction specified</a></li>
|
|
||||||
<li>m6 bits 4..2: type of hedge on NW border of the tile</li>
|
<li>m6 bits 4..2: type of hedge on NW border of the tile</li>
|
||||||
<li>m6 bits 1..0 : <a href="#tropic_zone">Tropic zone definition</a></li>
|
|
||||||
</ul>
|
</ul>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -510,8 +522,6 @@
|
|||||||
<li>m5 bit 4: pbs reservation state</li>
|
<li>m5 bit 4: pbs reservation state</li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li>m6 bits 7..6 : Possibility of a bridge above, in the <a href="#bridge_direction">direction specified</a></li>
|
|
||||||
<li>m6 bits 1..0 : <a href="#tropic_zone">Tropic zone definition</a></li>
|
|
||||||
</ul>
|
</ul>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -539,6 +549,7 @@
|
|||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</li>
|
</li>
|
||||||
|
<li>m3 bits 7..4: <a href="#OwnershipInfo">owner</a> of road type 1 (tram); OWNER_NONE (<tt>10</tt>) is stored as OWNER_TOWN (<tt>0F</tt>)
|
||||||
<li>m5 bits 7 clear: road or level-crossing
|
<li>m5 bits 7 clear: road or level-crossing
|
||||||
<ul>
|
<ul>
|
||||||
<li>m6 bits 5..3:
|
<li>m6 bits 5..3:
|
||||||
@@ -573,7 +584,6 @@
|
|||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</li>
|
</li>
|
||||||
<li>m3 bits 7..4: <a href="#OwnershipInfo">owner</a> of road type 1 (tram); OWNER_NONE (<tt>10</tt>) is stored as OWNER_TOWN (<tt>0F</tt>)
|
|
||||||
<li>m5 bit 6 clear: road
|
<li>m5 bit 6 clear: road
|
||||||
<ul>
|
<ul>
|
||||||
<li>m1 bits 4..0: <a href="#OwnershipInfo">owner</a> of the road type 0 (normal road)</li>
|
<li>m1 bits 4..0: <a href="#OwnershipInfo">owner</a> of the road type 0 (normal road)</li>
|
||||||
@@ -663,10 +673,9 @@
|
|||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</li>
|
</li>
|
||||||
|
<li>m7 bits 4..0: <a href="#OwnershipInfo">owner</a> of the road type 0 (normal road)</li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li>m6 bits 7..6 : Possibility of a bridge above, in the <a href="#bridge_direction">direction specified</a></li>
|
|
||||||
<li>m6 bits 1..0 : <a href="#tropic_zone">Tropic zone definition</a></li>
|
|
||||||
</ul>
|
</ul>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -713,7 +722,6 @@
|
|||||||
<li>bits 7..2 : lift position (for houses type 04 and 05)</li>
|
<li>bits 7..2 : lift position (for houses type 04 and 05)</li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li>bits 1..0 : tropic zone specifier</li>
|
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li>m7 :
|
<li>m7 :
|
||||||
@@ -835,7 +843,6 @@
|
|||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</li>
|
</li>
|
||||||
<li>m6 bits 1..0 : <a href="#tropic_zone">Tropic zone definition</a></li>
|
|
||||||
</ul>
|
</ul>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -969,7 +976,6 @@
|
|||||||
<li>m6 bits 5..3: the station type (rail, airport, truck, bus, oilrig, dock, buoy, waypoint)</li>
|
<li>m6 bits 5..3: the station type (rail, airport, truck, bus, oilrig, dock, buoy, waypoint)</li>
|
||||||
<li>m6 bit 2: pbs reservation state for railway stations/waypoints</li>
|
<li>m6 bit 2: pbs reservation state for railway stations/waypoints</li>
|
||||||
|
|
||||||
<li>m6 bits 1..0 : <a href="#tropic_zone">Tropic zone definition</a></li>
|
|
||||||
<li>m7 bits 4..0: <a href="#OwnershipInfo">owner</a> of road (road stops)</li>
|
<li>m7 bits 4..0: <a href="#OwnershipInfo">owner</a> of road (road stops)</li>
|
||||||
<li>m7 bits 7..6: present road types (road stops)</li>
|
<li>m7 bits 7..6: present road types (road stops)</li>
|
||||||
<li>m7: animation frame (railway stations/waypoints, airports)</li>
|
<li>m7: animation frame (railway stations/waypoints, airports)</li>
|
||||||
@@ -1082,8 +1088,6 @@
|
|||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</li>
|
</li>
|
||||||
<li>m6 bits 7..6 : Possibility of a bridge above, in the <a href="#bridge_direction">direction specified</a></li>
|
|
||||||
<li>m6 bits 1..0 : <a href="#tropic_zone">Tropic zone definition</a></li>
|
|
||||||
</ul>
|
</ul>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -1101,7 +1105,7 @@
|
|||||||
|
|
||||||
<tr bgcolor="#CCCCCC">
|
<tr bgcolor="#CCCCCC">
|
||||||
<td valign=top nowrap><strong><a name="Class8"><tt> 8</tt></a></strong></td>
|
<td valign=top nowrap><strong><a name="Class8"><tt> 8</tt></a></strong></td>
|
||||||
<td><strong>Industry tile </strong></td>
|
<td><strong>Industries </strong></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td valign=top nowrap> </td>
|
<td valign=top nowrap> </td>
|
||||||
@@ -1425,7 +1429,6 @@
|
|||||||
</li>
|
</li>
|
||||||
<li>m6 bits 5..3: random triggers (NewGRF)</li>
|
<li>m6 bits 5..3: random triggers (NewGRF)</li>
|
||||||
<li>m6 bit 2: bit 8 of type (see m5)</li>
|
<li>m6 bit 2: bit 8 of type (see m5)</li>
|
||||||
<li>m6 bits 1..0 : <a href="#tropic_zone">Tropic zone definition</a></li>
|
|
||||||
<li>m7: animation frame</li>
|
<li>m7: animation frame</li>
|
||||||
</ul>
|
</ul>
|
||||||
</td>
|
</td>
|
||||||
@@ -1576,8 +1579,6 @@
|
|||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</li>
|
</li>
|
||||||
<li>m6 bits 7..6 : Possibility of a bridge above, in the <a href="#bridge_direction">direction specified</a></li>
|
|
||||||
<li>m6 bits 1..0 : <a href="#tropic_zone">Tropic zone definition</a></li>
|
|
||||||
<li>m7 bits 4..0: <a href="#OwnershipInfo">owner</a> of road</li>
|
<li>m7 bits 4..0: <a href="#OwnershipInfo">owner</a> of road</li>
|
||||||
<li>m7 bit 5 set = on snow or desert</li>
|
<li>m7 bit 5 set = on snow or desert</li>
|
||||||
<li>m7 bits 7..6: present road types for road</li>
|
<li>m7 bits 7..6: present road types for road</li>
|
||||||
@@ -1598,8 +1599,6 @@
|
|||||||
<li>m2: index into the array of objects, bits 0 to 15 (upper bits in m5)</li>
|
<li>m2: index into the array of objects, bits 0 to 15 (upper bits in m5)</li>
|
||||||
<li>m3: random bits</li>
|
<li>m3: random bits</li>
|
||||||
<li>m5: index into the array of objects, bits 16 to 23 (lower bits in m2)</li>
|
<li>m5: index into the array of objects, bits 16 to 23 (lower bits in m2)</li>
|
||||||
<li>m6 bits 7..6 : Possibility of a bridge above, in the <a href="#bridge_direction">direction specified</a></li>
|
|
||||||
<li>m6 bits 1..0 : <a href="#tropic_zone">Tropic zone definition</a></li>
|
|
||||||
<li>m7: animation counter</li>
|
<li>m7: animation counter</li>
|
||||||
</ul>
|
</ul>
|
||||||
</td>
|
</td>
|
||||||
|
|||||||
@@ -28,13 +28,14 @@ the array so you can quickly see what is used and what is not.
|
|||||||
</ul>
|
</ul>
|
||||||
<p>
|
<p>
|
||||||
<ul>
|
<ul>
|
||||||
<li><span style="font-weight: bold;">type_height</span> - 8 bits in size, stores tile height (lower 4 bits) and tile class (upper 4 bits)</li>
|
<li><span style="font-weight: bold;">type</span> - 8 bits in size, tile class (bits 4..7), bridge (bits 2..3) tropic zone (bits 0..1, only valid in tropic climate)</li>
|
||||||
|
<li><span style="font-weight: bold;">height</span> - 8 bits in size, stores tile height</li>
|
||||||
<li><span style="font-weight: bold;">m1</span> - 8 bits in size, used to identify the owner of that tile (eg piece of rail, bridge, etc.)</li>
|
<li><span style="font-weight: bold;">m1</span> - 8 bits in size, used to identify the owner of that tile (eg piece of rail, bridge, etc.)</li>
|
||||||
<li><span style="font-weight: bold;">m2</span> - 16 bits in size, used to identify the index of the given tile (object) in the (object-)array</li>
|
<li><span style="font-weight: bold;">m2</span> - 16 bits in size, used to identify the index of the given tile (object) in the (object-)array</li>
|
||||||
<li><span style="font-weight: bold;">m3</span> - 8 bits in size, is used for general storage</li>
|
<li><span style="font-weight: bold;">m3</span> - 8 bits in size, is used for general storage</li>
|
||||||
<li><span style="font-weight: bold;">m4</span> - 8 bits in size, is used for general storage</li>
|
<li><span style="font-weight: bold;">m4</span> - 8 bits in size, is used for general storage</li>
|
||||||
<li><span style="font-weight: bold;">m5</span> - 8 bits in size, is used for general storage</li>
|
<li><span style="font-weight: bold;">m5</span> - 8 bits in size, is used for general storage</li>
|
||||||
<li><span style="font-weight: bold;">m6</span> - 8 bits in size, special meaning : lower 2 bits only valid in tropic climate, upper 2 bits for bridges</li>
|
<li><span style="font-weight: bold;">m6</span> - 8 bits in size, is used for general storage</li>
|
||||||
<li><span style="font-weight: bold;">m7</span> - 8 bits in size, is used for general storage</li>
|
<li><span style="font-weight: bold;">m7</span> - 8 bits in size, is used for general storage</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
@@ -42,7 +43,8 @@ the array so you can quickly see what is used and what is not.
|
|||||||
<tbody>
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<th colspan=2>class</th>
|
<th colspan=2>class</th>
|
||||||
<th>type_height (8)</th>
|
<th>type (8)</th>
|
||||||
|
<th>height (8)</th>
|
||||||
<th>m1 (8)</th>
|
<th>m1 (8)</th>
|
||||||
<th>m2 (16)</th>
|
<th>m2 (16)</th>
|
||||||
<th>m3 (8)</th>
|
<th>m3 (8)</th>
|
||||||
@@ -55,6 +57,7 @@ the array so you can quickly see what is used and what is not.
|
|||||||
<td colspan=2 class="caption">bits</td>
|
<td colspan=2 class="caption">bits</td>
|
||||||
<td class="bits">7654 3210</td>
|
<td class="bits">7654 3210</td>
|
||||||
<td class="bits">7654 3210</td>
|
<td class="bits">7654 3210</td>
|
||||||
|
<td class="bits">7654 3210</td>
|
||||||
<td class="bits">FEDC BA98 7654 3210</td>
|
<td class="bits">FEDC BA98 7654 3210</td>
|
||||||
<td class="bits">7654 3210</td>
|
<td class="bits">7654 3210</td>
|
||||||
<td class="bits">7654 3210</td>
|
<td class="bits">7654 3210</td>
|
||||||
@@ -66,69 +69,75 @@ the array so you can quickly see what is used and what is not.
|
|||||||
<td rowspan="2">0</td>
|
<td rowspan="2">0</td>
|
||||||
<td class="caption">ground</td>
|
<td class="caption">ground</td>
|
||||||
<td class="bits">XXXX XXXX</td>
|
<td class="bits">XXXX XXXX</td>
|
||||||
|
<td class="bits">XXXX XXXX</td>
|
||||||
<td class="bits"><span class="free">OOO</span><span class="option">~ ~~~~</span></td>
|
<td class="bits"><span class="free">OOO</span><span class="option">~ ~~~~</span></td>
|
||||||
<td class="bits"><span class="free">OOOO OOOO OOOO OOOO</span></td>
|
<td class="bits"><span class="free">OOOO OOOO OOOO OOOO</span></td>
|
||||||
<td class="bits">XXXX <span class="free">OOOO</span></td>
|
<td class="bits">XXXX <span class="free">OOOO</span></td>
|
||||||
<td class="bits">XXXX XX<span class="free">OO</span></td>
|
<td class="bits">XXXX XX<span class="free">OO</span></td>
|
||||||
<td class="bits">XXXX XXXX</td>
|
<td class="bits">XXXX XXXX</td>
|
||||||
<td class="bits">XX<span class="free">O</span>X XXXX</td>
|
<td class="bits"><span class="free">OOO</span>X XX<span class="free">OO</span></td>
|
||||||
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="caption">farmland</td>
|
<td class="caption">farmland</td>
|
||||||
<td class="bits">-inherit-</td>
|
<td class="bits">-inherit-</td>
|
||||||
<td class="bits">-inherit-</td>
|
<td class="bits">-inherit-</td>
|
||||||
|
<td class="bits">-inherit-</td>
|
||||||
<td class="bits">XXXX XXXX XXXX XXXX</td>
|
<td class="bits">XXXX XXXX XXXX XXXX</td>
|
||||||
<td class="bits">XXXX XXXX</td>
|
<td class="bits">XXXX XXXX</td>
|
||||||
<td class="bits">-inherit-</td>
|
<td class="bits">-inherit-</td>
|
||||||
<td class="bits">-inherit-</td>
|
<td class="bits">-inherit-</td>
|
||||||
<td class="bits">XX<span class="free">O</span>X XXXX</td>
|
<td class="bits"><span class="free">OOO</span>X XX<span class="free">OO</span></td>
|
||||||
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td rowspan=3>1</td>
|
<td rowspan=3>1</td>
|
||||||
<td class="caption">rail</td>
|
<td class="caption">rail</td>
|
||||||
<td class="bits">XXXX XXXX</td>
|
<td class="bits">XXXX XXXX</td>
|
||||||
|
<td class="bits">XXXX XXXX</td>
|
||||||
<td class="bits"><span class="free">OOO</span>X XXXX</td>
|
<td class="bits"><span class="free">OOO</span>X XXXX</td>
|
||||||
<td class="bits"><span class="free">OOOO</span> XXXX <span class="free">OOOO OOOO</span></td>
|
<td class="bits"><span class="free">OOOO</span> XXXX <span class="free">OOOO OOOO</span></td>
|
||||||
<td class="bits"><span class="free">OOOO</span> XXXX</td>
|
<td class="bits"><span class="free">OOOO</span> XXXX</td>
|
||||||
<td class="bits"><span class="free">OOOO</span> XXXX</td>
|
<td class="bits"><span class="free">OOOO</span> XXXX</td>
|
||||||
<td class="bits">XXXX XXXX</td>
|
<td class="bits">XXXX XXXX</td>
|
||||||
<td class="bits">XX<span class="free">OO OO</span>XX</td>
|
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
||||||
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="caption">rail with signals</td>
|
<td class="caption">rail with signals</td>
|
||||||
<td class="bits">-inherit-</td>
|
<td class="bits">-inherit-</td>
|
||||||
<td class="bits">-inherit-</td>
|
<td class="bits">-inherit-</td>
|
||||||
|
<td class="bits">-inherit-</td>
|
||||||
<td class="bits"><span class="free">OOOO</span> XXXX XXXX XXXX</td>
|
<td class="bits"><span class="free">OOOO</span> XXXX XXXX XXXX</td>
|
||||||
<td class="bits">XXXX XXXX</td>
|
<td class="bits">XXXX XXXX</td>
|
||||||
<td class="bits">XXXX XXXX</td>
|
<td class="bits">XXXX XXXX</td>
|
||||||
<td class="bits">-inherit-</td>
|
<td class="bits">-inherit-</td>
|
||||||
<td class="bits">XX<span class="free">OO OO</span>XX</td>
|
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
||||||
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="caption">depot</td>
|
<td class="caption">depot</td>
|
||||||
<td class="bits">-inherit-</td>
|
<td class="bits">-inherit-</td>
|
||||||
<td class="bits">-inherit-</td>
|
<td class="bits">-inherit-</td>
|
||||||
|
<td class="bits">-inherit-</td>
|
||||||
<td class="bits">XXXX XXXX XXXX XXXX</td>
|
<td class="bits">XXXX XXXX XXXX XXXX</td>
|
||||||
<td class="bits"><span class="free">OOOO</span> XXXX</td>
|
<td class="bits"><span class="free">OOOO</span> XXXX</td>
|
||||||
<td class="bits"><span class="free">OOOO</span> XXXX</td>
|
<td class="bits"><span class="free">OOOO</span> XXXX</td>
|
||||||
<td class="bits">XX<span class="free">O</span>X <span class="free">OO</span>XX</td>
|
<td class="bits">XX<span class="free">O</span>X <span class="free">OO</span>XX</td>
|
||||||
<td class="bits">XX<span class="free">OO OO</span>XX</td>
|
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
||||||
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td rowspan=3>2</td>
|
<td rowspan=3>2</td>
|
||||||
<td class="caption">road</td>
|
<td class="caption">road</td>
|
||||||
<td class="bits">XXXX XXXX</td>
|
<td class="bits">XXXX XXXX</td>
|
||||||
|
<td class="bits">XXXX XXXX</td>
|
||||||
<td class="bits"><span class="free">OOO</span>X XXXX</td>
|
<td class="bits"><span class="free">OOO</span>X XXXX</td>
|
||||||
<td class="bits">XXXX XXXX XXXX XXXX</td>
|
<td class="bits">XXXX XXXX XXXX XXXX</td>
|
||||||
<td class="bits">XXXX XXXX</td>
|
<td class="bits">XXXX XXXX</td>
|
||||||
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
||||||
<td class="bits">XXXX XXXX</td>
|
<td class="bits">XXXX XXXX</td>
|
||||||
<td class="bits">XXXX X<span class="free">O</span>XX</td>
|
<td class="bits"><span class="free">OO</span>XX X<span class="free">OOO</span></td>
|
||||||
<td class="bits">XXX<span class="free">O</span> XXXX</td>
|
<td class="bits">XXX<span class="free">O</span> XXXX</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
@@ -136,10 +145,11 @@ the array so you can quickly see what is used and what is not.
|
|||||||
<td class="bits">-inherit-</td>
|
<td class="bits">-inherit-</td>
|
||||||
<td class="bits">-inherit-</td>
|
<td class="bits">-inherit-</td>
|
||||||
<td class="bits">-inherit-</td>
|
<td class="bits">-inherit-</td>
|
||||||
|
<td class="bits">-inherit-</td>
|
||||||
<td class="bits">XXXX XXXX</td>
|
<td class="bits">XXXX XXXX</td>
|
||||||
<td class="bits">-inherit-</td>
|
<td class="bits">-inherit-</td>
|
||||||
<td class="bits">XXXX<span class="free"> OOO</span>X</td>
|
<td class="bits">XXXX<span class="free"> OOO</span>X</td>
|
||||||
<td class="bits">XXXX X<span class="free">O</span>XX</td>
|
<td class="bits"><span class="free">OO</span>XX X<span class="free">OOO</span></td>
|
||||||
<td class="bits">XXXX XXXX</td>
|
<td class="bits">XXXX XXXX</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
@@ -147,46 +157,50 @@ the array so you can quickly see what is used and what is not.
|
|||||||
<td class="bits">-inherit-</td>
|
<td class="bits">-inherit-</td>
|
||||||
<td class="bits">-inherit-</td>
|
<td class="bits">-inherit-</td>
|
||||||
<td class="bits">-inherit-</td>
|
<td class="bits">-inherit-</td>
|
||||||
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
<td class="bits">-inherit-</td>
|
||||||
|
<td class="bits">XXXX <span class="free">OOOO</span></td>
|
||||||
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
||||||
<td class="bits">XX<span class="free">OO OO</span>XX</td>
|
<td class="bits">XX<span class="free">OO OO</span>XX</td>
|
||||||
<td class="bits">XX<span class="free">OO OO</span>XX</td>
|
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
||||||
<td class="bits">XXX<span class="free">O OOOO</span></td>
|
<td class="bits">XXX<span class="free">O</span> XXXX</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>3</td>
|
<td>3</td>
|
||||||
<td class="caption">house</td>
|
<td class="caption">house</td>
|
||||||
<td class="bits">XXXX XXXX</td>
|
<td class="bits">XXXX XXXX</td>
|
||||||
<td class="bits">XXXX XXXX</td>
|
<td class="bits">XXXX XXXX</td>
|
||||||
|
<td class="bits">XXXX XXXX</td>
|
||||||
<td class="bits">XXXX XXXX XXXX XXXX</td>
|
<td class="bits">XXXX XXXX XXXX XXXX</td>
|
||||||
<td class="bits">XX<span class="free">O</span><span class="option">~ ~~</span>XX</td>
|
<td class="bits">XX<span class="free">O</span><span class="option">~ ~~</span>XX</td>
|
||||||
<td class="bits">XXXX XXXX</td>
|
<td class="bits">XXXX XXXX</td>
|
||||||
<td class="bits">XXX<span class="abuse">X XXXX</span></td>
|
<td class="bits">XXX<span class="abuse">X XXXX</span></td>
|
||||||
<td class="bits"><span class="abuse">XXXX XX</span>XX</td>
|
<td class="bits"><span class="abuse">XXXX XX</span><span class="free">OO</span></td>
|
||||||
<td class="bits">XXXX <span class="abuse">XXXX</span></td>
|
<td class="bits">XXXX <span class="abuse">XXXX</span></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>4</td>
|
<td>4</td>
|
||||||
<td class="caption">trees</td>
|
<td class="caption">trees</td>
|
||||||
<td class="bits">XXXX XXXX</td>
|
<td class="bits">XXXX XXXX</td>
|
||||||
|
<td class="bits">XXXX XXXX</td>
|
||||||
<td class="bits"><span class="free">OOO</span><span class="option">~ ~~~~</span></td>
|
<td class="bits"><span class="free">OOO</span><span class="option">~ ~~~~</span></td>
|
||||||
<td class="bits"><span class="free">OOOO OOO</span>X XXXX XXXX</td>
|
<td class="bits"><span class="free">OOOO OOO</span>X XXXX XXXX</td>
|
||||||
<td class="bits"><span class="option">~~</span>XX XXXX</td>
|
<td class="bits"><span class="option">~~</span>XX XXXX</td>
|
||||||
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
||||||
<td class="bits">XX<span class="free">OO O</span>XXX</td>
|
<td class="bits">XX<span class="free">OO O</span>XXX</td>
|
||||||
<td class="bits"><span class="free">OOOO OO</span>XX</td>
|
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
||||||
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td rowspan=7>5</td>
|
<td rowspan=7>5</td>
|
||||||
<td class="caption">rail station</td>
|
<td class="caption">rail station</td>
|
||||||
<td class="bits">XXXX XXXX</td>
|
<td class="bits">XXXX XXXX</td>
|
||||||
|
<td class="bits">XXXX XXXX</td>
|
||||||
<td class="bits"><span class="free">O</span>XXX XXXX</td>
|
<td class="bits"><span class="free">O</span>XXX XXXX</td>
|
||||||
<td class="bits">XXXX XXXX XXXX XXXX</td>
|
<td class="bits">XXXX XXXX XXXX XXXX</td>
|
||||||
<td class="bits">XXXX XXXX</td>
|
<td class="bits">XXXX XXXX</td>
|
||||||
<td class="bits">XXXX XXXX</td>
|
<td class="bits">XXXX XXXX</td>
|
||||||
<td class="bits">XXXX XXXX</td>
|
<td class="bits">XXXX XXXX</td>
|
||||||
<td class="bits"><span class="free">OO</span>XX XXXX</td>
|
<td class="bits"><span class="free">OO</span>XX XX<span class="free">OO</span></td>
|
||||||
<td class="bits">XXXX XXXX</td>
|
<td class="bits">XXXX XXXX</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
@@ -199,16 +213,18 @@ the array so you can quickly see what is used and what is not.
|
|||||||
<td class="bits">-inherit-</td>
|
<td class="bits">-inherit-</td>
|
||||||
<td class="bits">-inherit-</td>
|
<td class="bits">-inherit-</td>
|
||||||
<td class="bits">-inherit-</td>
|
<td class="bits">-inherit-</td>
|
||||||
|
<td class="bits">-inherit-</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="caption">road stop</td>
|
<td class="caption">road stop</td>
|
||||||
<td class="bits">-inherit-</td>
|
<td class="bits">-inherit-</td>
|
||||||
<td class="bits">-inherit-</td>
|
<td class="bits">-inherit-</td>
|
||||||
<td class="bits">-inherit-</td>
|
<td class="bits">-inherit-</td>
|
||||||
|
<td class="bits">-inherit-</td>
|
||||||
<td class="bits">XXXX <span class="free">OOOO</span></td>
|
<td class="bits">XXXX <span class="free">OOOO</span></td>
|
||||||
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
||||||
<td class="bits"><span class="option">~~~~ ~</span>XXX</td>
|
<td class="bits"><span class="option">~~~~ ~</span>XXX</td>
|
||||||
<td class="bits"><span class="free">OO</span>XX X<span class="free">O</span>XX</td>
|
<td class="bits"><span class="free">OO</span>XX X<span class="free">OOO</span></td>
|
||||||
<td class="bits">XX<span class="free">O</span>X XXXX</td>
|
<td class="bits">XX<span class="free">O</span>X XXXX</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
@@ -216,10 +232,11 @@ the array so you can quickly see what is used and what is not.
|
|||||||
<td class="bits">-inherit-</td>
|
<td class="bits">-inherit-</td>
|
||||||
<td class="bits">-inherit-</td>
|
<td class="bits">-inherit-</td>
|
||||||
<td class="bits">-inherit-</td>
|
<td class="bits">-inherit-</td>
|
||||||
|
<td class="bits">-inherit-</td>
|
||||||
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
||||||
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
||||||
<td class="bits"><span class="option">~~~~ ~</span>XXX</td>
|
<td class="bits"><span class="option">~~~~ ~</span>XXX</td>
|
||||||
<td class="bits"><span class="free">OO</span>XX X<span class="free">O</span>XX</td>
|
<td class="bits"><span class="free">OO</span>XX X<span class="free">OOO</span></td>
|
||||||
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
@@ -227,10 +244,11 @@ the array so you can quickly see what is used and what is not.
|
|||||||
<td class="bits">-inherit-</td>
|
<td class="bits">-inherit-</td>
|
||||||
<td class="bits">-inherit-</td>
|
<td class="bits">-inherit-</td>
|
||||||
<td class="bits">-inherit-</td>
|
<td class="bits">-inherit-</td>
|
||||||
|
<td class="bits">-inherit-</td>
|
||||||
<td class="bits">XXXX <span class="free">OOOO</span></td>
|
<td class="bits">XXXX <span class="free">OOOO</span></td>
|
||||||
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
||||||
<td class="bits">XXXX XXXX</td>
|
<td class="bits">XXXX XXXX</td>
|
||||||
<td class="bits"><span class="free">OO</span>XX X<span class="free">O</span>XX</td>
|
<td class="bits"><span class="free">OO</span>XX X<span class="free">OOO</span></td>
|
||||||
<td class="bits">XXXX XXXX</td>
|
<td class="bits">XXXX XXXX</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
@@ -238,10 +256,11 @@ the array so you can quickly see what is used and what is not.
|
|||||||
<td class="bits">-inherit-</td>
|
<td class="bits">-inherit-</td>
|
||||||
<td class="bits">-inherit-</td>
|
<td class="bits">-inherit-</td>
|
||||||
<td class="bits">-inherit-</td>
|
<td class="bits">-inherit-</td>
|
||||||
|
<td class="bits">-inherit-</td>
|
||||||
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
||||||
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
||||||
<td class="bits"><span class="option">~~~~ ~~~~</span></td>
|
<td class="bits"><span class="option">~~~~ ~~~~</span></td>
|
||||||
<td class="bits"><span class="free">OO</span>XX X<span class="free">O</span>XX</td>
|
<td class="bits"><span class="free">OO</span>XX X<span class="free">OOO</span></td>
|
||||||
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
@@ -249,68 +268,74 @@ the array so you can quickly see what is used and what is not.
|
|||||||
<td class="bits">-inherit-</td>
|
<td class="bits">-inherit-</td>
|
||||||
<td class="bits">-inherit-</td>
|
<td class="bits">-inherit-</td>
|
||||||
<td class="bits">-inherit-</td>
|
<td class="bits">-inherit-</td>
|
||||||
|
<td class="bits">-inherit-</td>
|
||||||
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
||||||
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
||||||
<td class="bits"><span class="option">~~~~ ~~~~</span></td>
|
<td class="bits"><span class="option">~~~~ ~~~~</span></td>
|
||||||
<td class="bits"><span class="free">OO</span>XX X<span class="free">O</span>XX</td>
|
<td class="bits"><span class="free">OO</span>XX X<span class="free">OOO</span></td>
|
||||||
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td rowspan=3>6</td>
|
<td rowspan=3>6</td>
|
||||||
<td class="caption">sea, shore</td>
|
<td class="caption">sea, shore</td>
|
||||||
<td class="bits">XXXX XXXX</td>
|
<td class="bits">XXXX XXXX</td>
|
||||||
|
<td class="bits">XXXX XXXX</td>
|
||||||
<td class="bits"><span class="free">O</span>XXX XXXX</td>
|
<td class="bits"><span class="free">O</span>XXX XXXX</td>
|
||||||
<td class="bits"><span class="free">OOOO OOOO OOOO OOOO</span></td>
|
<td class="bits"><span class="free">OOOO OOOO OOOO OOOO</span></td>
|
||||||
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
||||||
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
||||||
<td class="bits">X<span class="option">~~</span>X XXXX</td>
|
<td class="bits">X<span class="option">~~</span>X XXXX</td>
|
||||||
<td class="bits">XX<span class="free">OO OO</span>XX</td>
|
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
||||||
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="caption">canal, river</td>
|
<td class="caption">canal, river</td>
|
||||||
<td class="bits">-inherit-</td>
|
<td class="bits">-inherit-</td>
|
||||||
<td class="bits">-inherit-</td>
|
<td class="bits">-inherit-</td>
|
||||||
|
<td class="bits">-inherit-</td>
|
||||||
<td class="bits"><span class="free">OOOO OOOO OOOO OOOO</span></td>
|
<td class="bits"><span class="free">OOOO OOOO OOOO OOOO</span></td>
|
||||||
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
||||||
<td class="bits">XXXX XXXX</td>
|
<td class="bits">XXXX XXXX</td>
|
||||||
<td class="bits">-inherit-</td>
|
<td class="bits">-inherit-</td>
|
||||||
<td class="bits">XX<span class="free">OO OO</span>XX</td>
|
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
||||||
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="caption">shipdepot</td>
|
<td class="caption">shipdepot</td>
|
||||||
<td class="bits">-inherit-</td>
|
<td class="bits">-inherit-</td>
|
||||||
<td class="bits">-inherit-</td>
|
<td class="bits">-inherit-</td>
|
||||||
|
<td class="bits">-inherit-</td>
|
||||||
<td class="bits">XXXX XXXX XXXX XXXX</td>
|
<td class="bits">XXXX XXXX XXXX XXXX</td>
|
||||||
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
||||||
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
||||||
<td class="bits">-inherit-</td>
|
<td class="bits">-inherit-</td>
|
||||||
<td class="bits">XX<span class="free">OO OO</span>XX</td>
|
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
||||||
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>8</td>
|
<td>8</td>
|
||||||
<td class="caption">industry</td>
|
<td class="caption">industry</td>
|
||||||
<td class="bits">XXXX XXXX</td>
|
<td class="bits">XXXX XXXX</td>
|
||||||
|
<td class="bits">XXXX XXXX</td>
|
||||||
<td class="bits">XXX<span class="free">O</span> <span class="abuse">XXXX</span></td>
|
<td class="bits">XXX<span class="free">O</span> <span class="abuse">XXXX</span></td>
|
||||||
<td class="bits">XXXX XXXX XXXX XXXX</td>
|
<td class="bits">XXXX XXXX XXXX XXXX</td>
|
||||||
<td class="bits">XXXX XXXX</td>
|
<td class="bits">XXXX XXXX</td>
|
||||||
<td class="bits">XXXX XXXX</td>
|
<td class="bits">XXXX XXXX</td>
|
||||||
<td class="bits">XXXX XXXX</td>
|
<td class="bits">XXXX XXXX</td>
|
||||||
<td class="bits"><span class="free">OO</span>XX XXXX</td>
|
<td class="bits"><span class="free">OO</span>XX XX<span class="free">OO</span></td>
|
||||||
<td class="bits">XXXX XXXX</td>
|
<td class="bits">XXXX XXXX</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td rowspan=2>9</td>
|
<td rowspan=2>9</td>
|
||||||
<td class="caption">tunnel entrance</td>
|
<td class="caption">tunnel entrance</td>
|
||||||
<td class="bits">XXXX XXXX</td>
|
<td class="bits">XXXX XXXX</td>
|
||||||
|
<td class="bits">XXXX XXXX</td>
|
||||||
<td class="bits"><span class="free">OOO</span>X XXXX</td>
|
<td class="bits"><span class="free">OOO</span>X XXXX</td>
|
||||||
<td class="bits"><span class="free">OOOO OOOO OOOO OOOO</span></td>
|
<td class="bits"><span class="free">OOOO OOOO OOOO OOOO</span></td>
|
||||||
<td class="bits">XXXX XXXX</td>
|
<td class="bits">XXXX XXXX</td>
|
||||||
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
||||||
<td class="bits">X<span class="free">OO</span>X XXXX</td>
|
<td class="bits">X<span class="free">OO</span>X XXXX</td>
|
||||||
<td class="bits">XX<span class="free">OO OO</span>XX</td>
|
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
||||||
<td class="bits">XXXX XXXX</td>
|
<td class="bits">XXXX XXXX</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
@@ -321,19 +346,21 @@ the array so you can quickly see what is used and what is not.
|
|||||||
<td class="bits">-inherit-</td>
|
<td class="bits">-inherit-</td>
|
||||||
<td class="bits">-inherit-</td>
|
<td class="bits">-inherit-</td>
|
||||||
<td class="bits">-inherit-</td>
|
<td class="bits">-inherit-</td>
|
||||||
<td class="bits">XXXX XXXX</td>
|
<td class="bits">-inherit-</td>
|
||||||
|
<td class="bits"><span class="free">OO</span>XX XX<span class="free">OO</span></td>
|
||||||
<td class="bits">-inherit-</td>
|
<td class="bits">-inherit-</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td rowspan=2>A</td>
|
<td rowspan=2>A</td>
|
||||||
<td class="caption">objects</td>
|
<td class="caption">objects</td>
|
||||||
<td class="bits">XXXX XXXX</td>
|
<td class="bits">XXXX XXXX</td>
|
||||||
|
<td class="bits">XXXX XXXX</td>
|
||||||
<td class="bits"><span class="free">O</span>XXX XXXX</td>
|
<td class="bits"><span class="free">O</span>XXX XXXX</td>
|
||||||
<td class="bits">XXXX XXXX XXXX XXXX</td>
|
<td class="bits">XXXX XXXX XXXX XXXX</td>
|
||||||
<td class="bits">XXXX XXXX</td>
|
<td class="bits">XXXX XXXX</td>
|
||||||
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
||||||
<td class="bits">XXXX XXXX</td>
|
<td class="bits">XXXX XXXX</td>
|
||||||
<td class="bits">XX<span class="free">OO OO</span>XX</td>
|
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
||||||
<td class="bits">XXXX XXXX</td>
|
<td class="bits">XXXX XXXX</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
|
|||||||
150
docs/openttd.6
150
docs/openttd.6
@@ -1,112 +1,152 @@
|
|||||||
.\" Hey, EMACS: -*- nroff -*-
|
.\" Hey, EMACS: -*- nroff -*-
|
||||||
.\" Please adjust this date whenever revising the manpage.
|
.\" Please adjust this date whenever revising the manpage.
|
||||||
.Dd May 31, 2011
|
.Dd October 13, 2014
|
||||||
.Dt OPENTTD 6
|
.Dt OPENTTD 6
|
||||||
|
.Os
|
||||||
.Sh NAME
|
.Sh NAME
|
||||||
.Nm openttd
|
.Nm openttd
|
||||||
.Nd An open source clone of the Microprose game "Transport Tycoon Deluxe"
|
.Nd open source clone of the Microprose game \(lqTransport Tycoon Deluxe\(rq
|
||||||
.Sh SYNOPSIS
|
.Sh SYNOPSIS
|
||||||
.Nm
|
.Nm
|
||||||
.Op Fl efhx
|
.Op Fl efhx
|
||||||
.Op Fl b Ar blitter
|
.Op Fl b Ar blitter
|
||||||
.Op Fl c Ar config_file
|
.Op Fl c Ar config_file
|
||||||
.Op Fl d Ar [level | cat=lvl[,...]]
|
.Op Fl d Op Ar level | Ar cat Ns = Ns Ar lvl Ns Op , Ns Ar ...
|
||||||
.Op Fl D Ar [host][:port]
|
.Op Fl D Oo Ar host Oc Ns Op : Ns Ar port
|
||||||
.Op Fl g Ar [savegame]
|
.Op Fl g Op Ar savegame
|
||||||
.Op Fl G Ar seed
|
.Op Fl G Ar seed
|
||||||
.Op Fl I Ar graphicsset
|
.Op Fl I Ar graphicsset
|
||||||
.Op Fl l Ar host[:port]
|
.Op Fl l Ar host Ns Op : Ns Ar port
|
||||||
.Op Fl m Ar driver
|
.Op Fl m Ar driver
|
||||||
.Op Fl M Ar musicset
|
.Op Fl M Ar musicset
|
||||||
.Op Fl n Ar host[:port][#player]
|
.Op Fl n Ar host Ns Oo : Ns Ar port Oc Ns Op # Ns Ar player
|
||||||
.Op Fl p Ar password
|
.Op Fl p Ar password
|
||||||
.Op Fl P Ar password
|
.Op Fl P Ar password
|
||||||
.Op Fl q Ar savegame
|
.Op Fl q Ar savegame
|
||||||
.Op Fl r Ar widthxheight
|
.Op Fl r Ar width Ns x Ns Ar height
|
||||||
.Op Fl s Ar driver
|
.Op Fl s Ar driver
|
||||||
.Op Fl S Ar soundset
|
.Op Fl S Ar soundset
|
||||||
.Op Fl t Ar year
|
.Op Fl t Ar year
|
||||||
.Op Fl v Ar driver
|
.Op Fl v Ar driver
|
||||||
.Sh OPTIONS
|
.Sh OPTIONS
|
||||||
.Bl -tag -width ".Fl n Ar host[:port][#player]"
|
.Bl -tag -width "-n host[:port][#player]"
|
||||||
.It Fl b Ar blitter
|
.It Fl b Ar blitter
|
||||||
Set the blitter, see
|
Select the blitter
|
||||||
|
.Ar blitter ;
|
||||||
|
see
|
||||||
.Fl h
|
.Fl h
|
||||||
for a full list
|
for a full list.
|
||||||
.It Fl c Ar config_file
|
.It Fl c Ar config_file
|
||||||
Use 'config_file' instead of 'openttd.cfg'
|
Use
|
||||||
|
.Ar config_file
|
||||||
|
instead of
|
||||||
|
.Pa openttd.cfg .
|
||||||
.It Fl d Ar [level]
|
.It Fl d Ar [level]
|
||||||
Set debug verbosity for all categories to
|
Set debug verbosity for all categories to
|
||||||
.Ar level
|
.Ar level ,
|
||||||
or 1 if omitted
|
or 1 if omitted.
|
||||||
.It Fl d Ar cat=level[,...]
|
.It Fl d Ar cat Ns = Ns Ar lvl Ns Op , Ns Ar ...
|
||||||
Set debug verbosity for a specific category
|
Set debug verbosity to
|
||||||
.It Fl D Ar [host][:port]
|
.Ar lvl
|
||||||
Start a dedicated server. Sets network debug level to 6. If you want to change this, use
|
for a specific category
|
||||||
|
.Ar cat .
|
||||||
|
.It Fl D Oo Ar host Oc Ns Op : Ns Ar port
|
||||||
|
Start a dedicated server.
|
||||||
|
.Pp
|
||||||
|
Network debug level will be set to 6.
|
||||||
|
If you want to change this, set
|
||||||
.Fl d
|
.Fl d
|
||||||
after
|
after setting
|
||||||
.Fl D
|
.Fl D .
|
||||||
.It Fl G Ar seed
|
|
||||||
Seed the pseudo random number generator
|
|
||||||
.It Fl e
|
.It Fl e
|
||||||
Start in world editor mode
|
Start in world editor mode.
|
||||||
.It Fl f
|
.It Fl f
|
||||||
Fork into background (dedicated server only, see
|
Fork into background (dedicated server only, see
|
||||||
.Fl D )
|
.Fl D ) .
|
||||||
.It Fl g Ar [savegame]
|
.It Fl g Op Ar savegame
|
||||||
Load
|
Load
|
||||||
.Ar savegame
|
.Ar savegame
|
||||||
at start or start a new game if omitted. The
|
at start or start a new game if omitted.
|
||||||
.Ar savegame
|
.Ar savegame
|
||||||
must be either absolute or relative to the current path or one of the search paths.
|
must be either an absolute path or one relative to the current path or one of
|
||||||
|
the search paths.
|
||||||
|
.It Fl G Ar seed
|
||||||
|
Seed the pseudo random number generator with
|
||||||
|
.Ar seed .
|
||||||
.It Fl h
|
.It Fl h
|
||||||
Display a summary of all options and lists all the available AIs, blitters, sound, music and video drivers, graphics sets and sound sets.
|
Display a summary of all options and list all the available AIs, blitters,
|
||||||
|
sound, music and video drivers, graphics sets and sound sets.
|
||||||
.It Fl I Ar graphicsset
|
.It Fl I Ar graphicsset
|
||||||
Set the graphics set, see
|
Select the graphics set
|
||||||
|
.Ar graphicsset ;
|
||||||
|
see
|
||||||
.Fl h
|
.Fl h
|
||||||
for a full list
|
for a full list.
|
||||||
.It Fl l Ar host[:port]
|
.It Fl l Ar host Ns Op : Ns Ar port
|
||||||
Redirect DEBUG(), See
|
Redirect
|
||||||
.Fl D
|
.Fn DEBUG
|
||||||
|
output; see
|
||||||
|
.Fl D .
|
||||||
.It Fl m Ar driver
|
.It Fl m Ar driver
|
||||||
Set the music driver, see
|
Select the music driver
|
||||||
|
.Ar driver ;
|
||||||
|
see
|
||||||
.Fl h
|
.Fl h
|
||||||
for a full list
|
for a full list.
|
||||||
.It Fl M Ar musicset
|
.It Fl M Ar musicset
|
||||||
Set the music set, see
|
Select the music set
|
||||||
|
.Ar musicset ;
|
||||||
|
see
|
||||||
.Fl h
|
.Fl h
|
||||||
for a full list
|
for a full list.
|
||||||
.It Fl n Ar host[:port][#player]
|
.It Fl n Ar host Ns Oo : Ns Ar port Oc Ns Op # Ns Ar player
|
||||||
Join a network game, optionally specify a port to connect to and player to play as
|
Join a network game, optionally specifying a port to connect to and player to
|
||||||
|
play as.
|
||||||
.It Fl p Ar password
|
.It Fl p Ar password
|
||||||
Password used to join server. Only useful with
|
Password used to join server.
|
||||||
.Fl n
|
Only useful with
|
||||||
|
.Fl n .
|
||||||
.It Fl P Ar password
|
.It Fl P Ar password
|
||||||
Password used to join company. Only useful with
|
Password used to join company.
|
||||||
.Fl n
|
Only useful with
|
||||||
|
.Fl n .
|
||||||
.It Fl q Ar savegame
|
.It Fl q Ar savegame
|
||||||
Write some information about the savegame and exit
|
Write some information about the specified savegame and exit.
|
||||||
.It Fl r Ar widthxheight
|
.It Fl r Ar width Ns x Ns Ar height
|
||||||
Set the resolution
|
Set the resolution to
|
||||||
|
.Ar width
|
||||||
|
\(mu
|
||||||
|
.Ar height
|
||||||
|
pixels.
|
||||||
.It Fl s Ar driver
|
.It Fl s Ar driver
|
||||||
Set the sound driver, see
|
Select the sound driver
|
||||||
|
.Ar driver ;
|
||||||
|
see
|
||||||
.Fl h
|
.Fl h
|
||||||
for a full list
|
for a full list.
|
||||||
.It Fl S Ar soundset
|
.It Fl S Ar soundset
|
||||||
Set the sound set, see
|
Select the sound set
|
||||||
|
.Ar soundset ;
|
||||||
|
see
|
||||||
.Fl h
|
.Fl h
|
||||||
for a full list
|
for a full list.
|
||||||
.It Fl t Ar year
|
.It Fl t Ar year
|
||||||
Set the starting year
|
Set the starting year to
|
||||||
|
.Ar year .
|
||||||
.It Fl v Ar driver
|
.It Fl v Ar driver
|
||||||
Set the video driver, see
|
Select the video driver
|
||||||
|
.Ar driver ;
|
||||||
|
see
|
||||||
.Fl h
|
.Fl h
|
||||||
for a full list
|
for a full list.
|
||||||
.It Fl x
|
.It Fl x
|
||||||
Do not automatically save to config file on exit
|
Do not automatically save to config file on exit.
|
||||||
.El
|
.El
|
||||||
.Sh SEE ALSO
|
.Sh SEE ALSO
|
||||||
http://wiki.openttd.org/, http://www.openttd.org
|
.Lk https://wiki.openttd.org "Wiki"
|
||||||
|
(includes community maintained manual),
|
||||||
|
.Lk https://forum.openttd.org "Forum",
|
||||||
|
.Lk https://www.openttd.org "News"
|
||||||
.Sh HISTORY
|
.Sh HISTORY
|
||||||
Transport Tycoon Deluxe was written by Chris Sawyer and published by Microprose.
|
Transport Tycoon Deluxe was written by Chris Sawyer and published by Microprose.
|
||||||
.Nm
|
.Nm
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
# $Id: findversion.sh 25107 2013-03-18 06:18:06Z rubidium $
|
# $Id: findversion.sh 27079 2014-12-11 12:25:53Z planetmaker $
|
||||||
|
|
||||||
# This file is part of OpenTTD.
|
# This file is part of OpenTTD.
|
||||||
# OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
|
# OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
|
||||||
@@ -106,21 +106,21 @@ elif [ -d "$ROOT_DIR/.git" ]; then
|
|||||||
fi
|
fi
|
||||||
elif [ -d "$ROOT_DIR/.hg" ]; then
|
elif [ -d "$ROOT_DIR/.hg" ]; then
|
||||||
# We are a hg checkout
|
# We are a hg checkout
|
||||||
if [ -n "`hg status | grep -v '^?'`" ]; then
|
if [ -n "`HGPLAIN= hg status | grep -v '^?'`" ]; then
|
||||||
MODIFIED="2"
|
MODIFIED="2"
|
||||||
fi
|
fi
|
||||||
HASH=`LC_ALL=C hg id -i | cut -c1-12`
|
HASH=`LC_ALL=C HGPLAIN= hg id -i | cut -c1-12`
|
||||||
REV="h`echo $HASH | cut -c1-8`"
|
REV="h`echo $HASH | cut -c1-8`"
|
||||||
BRANCH="`hg branch | sed 's@^default$@@'`"
|
BRANCH="`HGPLAIN= hg branch | sed 's@^default$@@'`"
|
||||||
TAG="`hg id -t | grep -v 'tip$'`"
|
TAG="`HGPLAIN= hg id -t | grep -v 'tip$'`"
|
||||||
if [ -n "$TAG" ]; then
|
if [ -n "$TAG" ]; then
|
||||||
BRANCH=""
|
BRANCH=""
|
||||||
REV="$TAG"
|
REV="$TAG"
|
||||||
fi
|
fi
|
||||||
REV_NR=`LC_ALL=C hg log -f -k "(svn r" -l 1 --template "{desc|firstline}\n" | grep "^(svn r[0-9]*)" | sed "s@.*(svn r\([0-9]*\)).*@\1@"`
|
REV_NR=`LC_ALL=C HGPLAIN= hg log -f -k "(svn r" -l 1 --template "{desc|firstline}\n" | grep "^(svn r[0-9]*)" | sed "s@.*(svn r\([0-9]*\)).*@\1@"`
|
||||||
if [ -z "$REV_NR" ]; then
|
if [ -z "$REV_NR" ]; then
|
||||||
# No rev? Maybe it is a custom hgsubversion clone
|
# No rev? Maybe it is a custom hgsubversion clone
|
||||||
REV_NR=`LC_ALL=C hg parent --template="{svnrev}"`
|
REV_NR=`LC_ALL=C HGPLAIN= hg parent --template="{svnrev}"`
|
||||||
fi
|
fi
|
||||||
elif [ -f "$ROOT_DIR/.ottdrev" ]; then
|
elif [ -f "$ROOT_DIR/.ottdrev" ]; then
|
||||||
# We are an exported source bundle
|
# We are an exported source bundle
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
OpenTTD's known bugs
|
OpenTTD's known bugs
|
||||||
Last updated: 2014-04-01
|
Last updated: 2015-02-24
|
||||||
Release version: 1.4.0
|
Release version: 1.5.0-beta2
|
||||||
------------------------------------------------------------------------
|
------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
@@ -33,12 +33,13 @@ No suitable AI can be found
|
|||||||
If you have no AIs and an AI is started the so-called 'dummy' AI will
|
If you have no AIs and an AI is started the so-called 'dummy' AI will
|
||||||
be loaded. This AI does nothing but writing a message on the AI debug
|
be loaded. This AI does nothing but writing a message on the AI debug
|
||||||
window and showing a red warning. There are basically two solutions
|
window and showing a red warning. There are basically two solutions
|
||||||
for this problem: you must change the settings so no AI is started,
|
for this problem: Either you set the number of AI players to 0 so that
|
||||||
this is done in the difficulty settings window. The other solution is
|
no AI is started. You find that setting at the top of the window in the
|
||||||
acquiring (downloading) some AI. The easiest way to do this is via
|
"AI / Game Scripts Settings" window.
|
||||||
the "Check Online Content" button in the main (intro) menu or via
|
The other solution is acquiring (downloading) some AI. The easiest way
|
||||||
"AI Settings" -> "Select AI" -> "Check Online Content" which is also
|
to do this is via the "Check Online Content" button in the main (intro)
|
||||||
accessed via the main menu.
|
menu or directly in the "AI / Game Scripts Settings" dialogue via the
|
||||||
|
"Check Online Content" button.
|
||||||
|
|
||||||
After a while of playing, colours get corrupted
|
After a while of playing, colours get corrupted
|
||||||
In Windows 7 the background slideshow corrupts the colour mapping of
|
In Windows 7 the background slideshow corrupts the colour mapping of
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
// (Info version 32)
|
// (Info version 32)
|
||||||
// Format: spritenum imagefile depth xpos ypos xsize ysize xrel yrel zoom flags
|
// Format: spritenum imagefile depth xpos ypos xsize ysize xrel yrel zoom flags
|
||||||
//
|
//
|
||||||
// $Id: openttd.nfo 23993 2012-02-26 08:23:32Z rubidium $
|
// $Id: openttd.nfo 26869 2014-09-21 07:57:45Z rubidium $
|
||||||
//
|
//
|
||||||
// This file is part of OpenTTD.
|
// This file is part of OpenTTD.
|
||||||
// OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
|
// OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
|
||||||
@@ -104,3 +104,4 @@
|
|||||||
#include "rivers/tropic.nfo"
|
#include "rivers/tropic.nfo"
|
||||||
#include "rivers/toyland.nfo"
|
#include "rivers/toyland.nfo"
|
||||||
#include "tunnel_portals.nfo"
|
#include "tunnel_portals.nfo"
|
||||||
|
#include "palette.nfo"
|
||||||
|
|||||||
@@ -1,3 +1,81 @@
|
|||||||
|
openttd (1.5.0~beta2-0) unstable; urgency=low
|
||||||
|
|
||||||
|
* New upstream release 1.5.0-beta2
|
||||||
|
|
||||||
|
-- OpenTTD <info@openttd.org> Tue, 24 Feb 2015 21:00:00 +0100
|
||||||
|
|
||||||
|
openttd (1.5.0~beta1-0) unstable; urgency=low
|
||||||
|
|
||||||
|
* New upstream release 1.5.0-beta1
|
||||||
|
|
||||||
|
-- OpenTTD <info@openttd.org> Wed, 24 Dec 2014 21:00:00 +0100
|
||||||
|
|
||||||
|
openttd (1.4.4-0) unstable; urgency=low
|
||||||
|
|
||||||
|
* New upstream release 1.4.4
|
||||||
|
|
||||||
|
-- OpenTTD <info@openttd.org> Tue, 21 Oct 2014 21:00:00 +0200
|
||||||
|
|
||||||
|
openttd (1.4.4~RC1-0) unstable; urgency=low
|
||||||
|
|
||||||
|
* New upstream release 1.4.4-RC1
|
||||||
|
|
||||||
|
-- OpenTTD <info@openttd.org> Wed, 08 Oct 2014 19:00:00 +0200
|
||||||
|
|
||||||
|
openttd (1.4.3-0) unstable; urgency=low
|
||||||
|
|
||||||
|
* New upstream release 1.4.3
|
||||||
|
|
||||||
|
-- OpenTTD <info@openttd.org> Tue, 23 Sep 2014 21:00:00 +0200
|
||||||
|
|
||||||
|
openttd (1.4.3~RC2-0) unstable; urgency=low
|
||||||
|
|
||||||
|
* New upstream release 1.4.3-RC2
|
||||||
|
|
||||||
|
-- OpenTTD <info@openttd.org> Sun, 14 Sep 2014 19:00:00 +0200
|
||||||
|
|
||||||
|
openttd (1.4.3~RC1-0) unstable; urgency=low
|
||||||
|
|
||||||
|
* New upstream release 1.4.3-RC1
|
||||||
|
|
||||||
|
-- OpenTTD <info@openttd.org> Sun, 07 Sep 2014 19:00:00 +0200
|
||||||
|
|
||||||
|
openttd (1.4.2-0) unstable; urgency=low
|
||||||
|
|
||||||
|
* New upstream release 1.4.2
|
||||||
|
|
||||||
|
-- OpenTTD <info@openttd.org> Sat, 16 Aug 2014 21:00:00 +0200
|
||||||
|
|
||||||
|
openttd (1.4.2~RC2-0) unstable; urgency=low
|
||||||
|
|
||||||
|
* New upstream release 1.4.2-RC2
|
||||||
|
|
||||||
|
-- OpenTTD <info@openttd.org> Sun, 03 Aug 2014 18:00:00 +0200
|
||||||
|
|
||||||
|
openttd (1.4.2~RC1-0) unstable; urgency=low
|
||||||
|
|
||||||
|
* New upstream release 1.4.2-RC1
|
||||||
|
|
||||||
|
-- OpenTTD <info@openttd.org> Thu, 03 Jul 2014 21:00:00 +0200
|
||||||
|
|
||||||
|
openttd (1.4.1-0) unstable; urgency=low
|
||||||
|
|
||||||
|
* New upstream release 1.4.1
|
||||||
|
|
||||||
|
-- OpenTTD <info@openttd.org> Mon, 02 Jun 2014 21:00:00 +0200
|
||||||
|
|
||||||
|
openttd (1.4.1~RC2-0) unstable; urgency=low
|
||||||
|
|
||||||
|
* New upstream release 1.4.1-RC2
|
||||||
|
|
||||||
|
-- OpenTTD <info@openttd.org> Sun, 18 May 2014 21:00:00 +0200
|
||||||
|
|
||||||
|
openttd (1.4.1~RC1-0) unstable; urgency=low
|
||||||
|
|
||||||
|
* New upstream release 1.4.1-RC1
|
||||||
|
|
||||||
|
-- OpenTTD <info@openttd.org> Sun, 04 May 2014 21:00:00 +0200
|
||||||
|
|
||||||
openttd (1.4.0-0) unstable; urgency=low
|
openttd (1.4.0-0) unstable; urgency=low
|
||||||
|
|
||||||
* New upstream release 1.4.0
|
* New upstream release 1.4.0
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
@echo off
|
@echo off
|
||||||
|
|
||||||
set OPENTTD_VERSION=1.4.0
|
set OPENTTD_VERSION=1.5.0
|
||||||
set OPENSFX_VERSION=0.8.0
|
set OPENSFX_VERSION=0.8.0
|
||||||
set NOSOUND_VERSION=0.8.0
|
set NOSOUND_VERSION=0.8.0
|
||||||
set OPENGFX_VERSION=1.2.0
|
set OPENGFX_VERSION=1.2.0
|
||||||
|
|||||||
@@ -17,9 +17,9 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
Name: openttd
|
Name: openttd
|
||||||
Version: 1.3.beta2
|
Version: 1.5.beta1
|
||||||
Release: 0
|
Release: 0
|
||||||
%define srcver 1.3.0-beta2
|
%define srcver 1.5.0-beta1
|
||||||
Summary: An open source reimplementation of Chris Sawyer's Transport Tycoon Deluxe
|
Summary: An open source reimplementation of Chris Sawyer's Transport Tycoon Deluxe
|
||||||
License: GPL-2.0
|
License: GPL-2.0
|
||||||
Group: Amusements/Games/Strategy/Other
|
Group: Amusements/Games/Strategy/Other
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
# Version numbers to update
|
# Version numbers to update
|
||||||
!define APPV_MAJOR 1
|
!define APPV_MAJOR 1
|
||||||
!define APPV_MINOR 4
|
!define APPV_MINOR 5
|
||||||
!define APPV_MAINT 0
|
!define APPV_MAINT 0
|
||||||
!define APPV_BUILD 6
|
!define APPV_BUILD 1
|
||||||
!define APPV_EXTRA ""
|
!define APPV_EXTRA "-beta2"
|
||||||
|
|
||||||
!define APPNAME "OpenTTD" ; Define application name
|
!define APPNAME "OpenTTD" ; Define application name
|
||||||
!define APPVERSION "${APPV_MAJOR}.${APPV_MINOR}.${APPV_MAINT}${APPV_EXTRA}" ; Define application version
|
!define APPVERSION "${APPV_MAJOR}.${APPV_MINOR}.${APPV_MAINT}${APPV_EXTRA}" ; Define application version
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# $Id: generate 23409 2011-12-03 22:34:15Z glx $
|
# $Id: generate 27152 2015-02-15 14:56:21Z frosch $
|
||||||
|
|
||||||
# This file is part of OpenTTD.
|
# This file is part of OpenTTD.
|
||||||
# OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
|
# OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
|
||||||
@@ -77,7 +77,7 @@ safety_check() {
|
|||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
grep '\.h' "$ROOT_DIR/source.list" | grep -v '../objs/langs/table/strings.h\|../objs/settings/table/settings.h' | sed 's/ //' | sort > tmp.headers.source.list
|
grep '\.h' "$ROOT_DIR/source.list" | grep -v '../objs/langs/table/strings.h\|../objs/settings/table/settings.h' | sed 's/ //g' | sort > tmp.headers.source.list
|
||||||
find "$ROOT_DIR/src" \( -iname "*.h" -or -iname "*.hpp" \) -and -not -ipath "*/.svn/*" | sed "s~$ROOT_DIR/src/~~" | sort > tmp.headers.src
|
find "$ROOT_DIR/src" \( -iname "*.h" -or -iname "*.hpp" \) -and -not -ipath "*/.svn/*" | sed "s~$ROOT_DIR/src/~~" | sort > tmp.headers.src
|
||||||
if [ -n "`diff tmp.headers.source.list tmp.headers.src`" ]; then
|
if [ -n "`diff tmp.headers.source.list tmp.headers.src`" ]; then
|
||||||
echo "The following headers are missing in source.list and not in /src/ or vice versa."
|
echo "The following headers are missing in source.list and not in /src/ or vice versa."
|
||||||
|
|||||||
@@ -227,6 +227,12 @@
|
|||||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)</AdditionalInputs>
|
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)</AdditionalInputs>
|
||||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\bin\lang\korean.lng;%(Outputs)</Outputs>
|
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\bin\lang\korean.lng;%(Outputs)</Outputs>
|
||||||
</CustomBuild>
|
</CustomBuild>
|
||||||
|
<CustomBuild Include="..\src\lang\latin.txt">
|
||||||
|
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Generating latin language file</Message>
|
||||||
|
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"</Command>
|
||||||
|
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)</AdditionalInputs>
|
||||||
|
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\bin\lang\latin.lng;%(Outputs)</Outputs>
|
||||||
|
</CustomBuild>
|
||||||
<CustomBuild Include="..\src\lang\latvian.txt">
|
<CustomBuild Include="..\src\lang\latvian.txt">
|
||||||
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Generating latvian language file</Message>
|
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Generating latvian language file</Message>
|
||||||
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"</Command>
|
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)"</Command>
|
||||||
|
|||||||
@@ -97,6 +97,9 @@
|
|||||||
<CustomBuild Include="..\src\lang\korean.txt">
|
<CustomBuild Include="..\src\lang\korean.txt">
|
||||||
<Filter>Translations</Filter>
|
<Filter>Translations</Filter>
|
||||||
</CustomBuild>
|
</CustomBuild>
|
||||||
|
<CustomBuild Include="..\src\lang\latin.txt">
|
||||||
|
<Filter>Translations</Filter>
|
||||||
|
</CustomBuild>
|
||||||
<CustomBuild Include="..\src\lang\latvian.txt">
|
<CustomBuild Include="..\src\lang\latvian.txt">
|
||||||
<Filter>Translations</Filter>
|
<Filter>Translations</Filter>
|
||||||
</CustomBuild>
|
</CustomBuild>
|
||||||
|
|||||||
@@ -513,6 +513,21 @@
|
|||||||
/>
|
/>
|
||||||
</FileConfiguration>
|
</FileConfiguration>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\src\lang\latin.txt"
|
||||||
|
>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Debug|Win32"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
Description="Generating latin language file"
|
||||||
|
CommandLine="..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "$(InputPath)"
exit 0
"
|
||||||
|
AdditionalDependencies="..\src\lang\english.txt;..\objs\strgen\strgen.exe"
|
||||||
|
Outputs="..\bin\lang\latin.lng"
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\src\lang\latvian.txt"
|
RelativePath="..\src\lang\latvian.txt"
|
||||||
>
|
>
|
||||||
|
|||||||
@@ -514,6 +514,21 @@
|
|||||||
/>
|
/>
|
||||||
</FileConfiguration>
|
</FileConfiguration>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\src\lang\latin.txt"
|
||||||
|
>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Debug|Win32"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
Description="Generating latin language file"
|
||||||
|
CommandLine="..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "$(InputPath)"
exit 0
"
|
||||||
|
AdditionalDependencies="..\src\lang\english.txt;..\objs\strgen\strgen.exe"
|
||||||
|
Outputs="..\bin\lang\latin.lng"
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\src\lang\latvian.txt"
|
RelativePath="..\src\lang\latvian.txt"
|
||||||
>
|
>
|
||||||
|
|||||||
@@ -102,7 +102,7 @@
|
|||||||
<FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
|
<FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
|
||||||
<OmitFramePointers>true</OmitFramePointers>
|
<OmitFramePointers>true</OmitFramePointers>
|
||||||
<AdditionalIncludeDirectories>..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<StringPooling>true</StringPooling>
|
<StringPooling>true</StringPooling>
|
||||||
<ExceptionHandling>Sync</ExceptionHandling>
|
<ExceptionHandling>Sync</ExceptionHandling>
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
@@ -204,7 +204,7 @@
|
|||||||
<FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
|
<FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
|
||||||
<OmitFramePointers>true</OmitFramePointers>
|
<OmitFramePointers>true</OmitFramePointers>
|
||||||
<AdditionalIncludeDirectories>..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<StringPooling>true</StringPooling>
|
<StringPooling>true</StringPooling>
|
||||||
<ExceptionHandling>Sync</ExceptionHandling>
|
<ExceptionHandling>Sync</ExceptionHandling>
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
@@ -311,6 +311,7 @@
|
|||||||
<ClCompile Include="..\src\debug.cpp" />
|
<ClCompile Include="..\src\debug.cpp" />
|
||||||
<ClCompile Include="..\src\dedicated.cpp" />
|
<ClCompile Include="..\src\dedicated.cpp" />
|
||||||
<ClCompile Include="..\src\depot.cpp" />
|
<ClCompile Include="..\src\depot.cpp" />
|
||||||
|
<ClCompile Include="..\src\disaster_vehicle.cpp" />
|
||||||
<ClCompile Include="..\src\driver.cpp" />
|
<ClCompile Include="..\src\driver.cpp" />
|
||||||
<ClCompile Include="..\src\economy.cpp" />
|
<ClCompile Include="..\src\economy.cpp" />
|
||||||
<ClCompile Include="..\src\effectvehicle.cpp" />
|
<ClCompile Include="..\src\effectvehicle.cpp" />
|
||||||
@@ -437,6 +438,7 @@
|
|||||||
<ClInclude Include="..\src\depot_type.h" />
|
<ClInclude Include="..\src\depot_type.h" />
|
||||||
<ClInclude Include="..\src\direction_func.h" />
|
<ClInclude Include="..\src\direction_func.h" />
|
||||||
<ClInclude Include="..\src\direction_type.h" />
|
<ClInclude Include="..\src\direction_type.h" />
|
||||||
|
<ClInclude Include="..\src\disaster_vehicle.h" />
|
||||||
<ClInclude Include="..\src\music\dmusic.h" />
|
<ClInclude Include="..\src\music\dmusic.h" />
|
||||||
<ClInclude Include="..\src\driver.h" />
|
<ClInclude Include="..\src\driver.h" />
|
||||||
<ClInclude Include="..\src\economy_base.h" />
|
<ClInclude Include="..\src\economy_base.h" />
|
||||||
@@ -568,6 +570,7 @@
|
|||||||
<ClInclude Include="..\src\road_type.h" />
|
<ClInclude Include="..\src\road_type.h" />
|
||||||
<ClInclude Include="..\src\roadstop_base.h" />
|
<ClInclude Include="..\src\roadstop_base.h" />
|
||||||
<ClInclude Include="..\src\roadveh.h" />
|
<ClInclude Include="..\src\roadveh.h" />
|
||||||
|
<ClInclude Include="..\src\safeguards.h" />
|
||||||
<ClInclude Include="..\src\screenshot.h" />
|
<ClInclude Include="..\src\screenshot.h" />
|
||||||
<ClInclude Include="..\src\sdl.h" />
|
<ClInclude Include="..\src\sdl.h" />
|
||||||
<ClInclude Include="..\src\sound\sdl_s.h" />
|
<ClInclude Include="..\src\sound\sdl_s.h" />
|
||||||
@@ -804,7 +807,6 @@
|
|||||||
<ClCompile Include="..\src\clear_cmd.cpp" />
|
<ClCompile Include="..\src\clear_cmd.cpp" />
|
||||||
<ClCompile Include="..\src\company_cmd.cpp" />
|
<ClCompile Include="..\src\company_cmd.cpp" />
|
||||||
<ClCompile Include="..\src\depot_cmd.cpp" />
|
<ClCompile Include="..\src\depot_cmd.cpp" />
|
||||||
<ClCompile Include="..\src\disaster_cmd.cpp" />
|
|
||||||
<ClCompile Include="..\src\group_cmd.cpp" />
|
<ClCompile Include="..\src\group_cmd.cpp" />
|
||||||
<ClCompile Include="..\src\industry_cmd.cpp" />
|
<ClCompile Include="..\src\industry_cmd.cpp" />
|
||||||
<ClCompile Include="..\src\misc_cmd.cpp" />
|
<ClCompile Include="..\src\misc_cmd.cpp" />
|
||||||
@@ -881,6 +883,7 @@
|
|||||||
<ClInclude Include="..\src\table\elrail_data.h" />
|
<ClInclude Include="..\src\table\elrail_data.h" />
|
||||||
<ClInclude Include="..\src\table\engines.h" />
|
<ClInclude Include="..\src\table\engines.h" />
|
||||||
<ClInclude Include="..\src\table\genland.h" />
|
<ClInclude Include="..\src\table\genland.h" />
|
||||||
|
<ClInclude Include="..\src\table\heightmap_colours.h" />
|
||||||
<ClInclude Include="..\src\table\industry_land.h" />
|
<ClInclude Include="..\src\table\industry_land.h" />
|
||||||
<ClInclude Include="..\src\table\landscape_sprite.h" />
|
<ClInclude Include="..\src\table\landscape_sprite.h" />
|
||||||
<ClInclude Include="..\src\table\newgrf_debug_data.h" />
|
<ClInclude Include="..\src\table\newgrf_debug_data.h" />
|
||||||
@@ -950,13 +953,8 @@
|
|||||||
<ClInclude Include="..\src\3rdparty\squirrel\squirrel\sqpcheader.h" />
|
<ClInclude Include="..\src\3rdparty\squirrel\squirrel\sqpcheader.h" />
|
||||||
<ClInclude Include="..\src\3rdparty\squirrel\squirrel\sqstate.h" />
|
<ClInclude Include="..\src\3rdparty\squirrel\squirrel\sqstate.h" />
|
||||||
<ClInclude Include="..\src\3rdparty\squirrel\include\sqstdaux.h" />
|
<ClInclude Include="..\src\3rdparty\squirrel\include\sqstdaux.h" />
|
||||||
<ClInclude Include="..\src\3rdparty\squirrel\include\sqstdblob.h" />
|
|
||||||
<ClInclude Include="..\src\3rdparty\squirrel\sqstdlib\sqstdblobimpl.h" />
|
|
||||||
<ClInclude Include="..\src\3rdparty\squirrel\include\sqstdio.h" />
|
|
||||||
<ClInclude Include="..\src\3rdparty\squirrel\include\sqstdmath.h" />
|
<ClInclude Include="..\src\3rdparty\squirrel\include\sqstdmath.h" />
|
||||||
<ClInclude Include="..\src\3rdparty\squirrel\sqstdlib\sqstdstream.h" />
|
|
||||||
<ClInclude Include="..\src\3rdparty\squirrel\include\sqstdstring.h" />
|
<ClInclude Include="..\src\3rdparty\squirrel\include\sqstdstring.h" />
|
||||||
<ClInclude Include="..\src\3rdparty\squirrel\include\sqstdsystem.h" />
|
|
||||||
<ClInclude Include="..\src\3rdparty\squirrel\squirrel\sqstring.h" />
|
<ClInclude Include="..\src\3rdparty\squirrel\squirrel\sqstring.h" />
|
||||||
<ClInclude Include="..\src\3rdparty\squirrel\squirrel\sqtable.h" />
|
<ClInclude Include="..\src\3rdparty\squirrel\squirrel\sqtable.h" />
|
||||||
<ClInclude Include="..\src\3rdparty\squirrel\include\squirrel.h" />
|
<ClInclude Include="..\src\3rdparty\squirrel\include\squirrel.h" />
|
||||||
|
|||||||
@@ -162,6 +162,9 @@
|
|||||||
<ClCompile Include="..\src\depot.cpp">
|
<ClCompile Include="..\src\depot.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\disaster_vehicle.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
<ClCompile Include="..\src\driver.cpp">
|
<ClCompile Include="..\src\driver.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
@@ -540,6 +543,9 @@
|
|||||||
<ClInclude Include="..\src\direction_type.h">
|
<ClInclude Include="..\src\direction_type.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\src\disaster_vehicle.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
<ClInclude Include="..\src\music\dmusic.h">
|
<ClInclude Include="..\src\music\dmusic.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
@@ -933,6 +939,9 @@
|
|||||||
<ClInclude Include="..\src\roadveh.h">
|
<ClInclude Include="..\src\roadveh.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\src\safeguards.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
<ClInclude Include="..\src\screenshot.h">
|
<ClInclude Include="..\src\screenshot.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
@@ -1641,9 +1650,6 @@
|
|||||||
<ClCompile Include="..\src\depot_cmd.cpp">
|
<ClCompile Include="..\src\depot_cmd.cpp">
|
||||||
<Filter>Command handlers</Filter>
|
<Filter>Command handlers</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\src\disaster_cmd.cpp">
|
|
||||||
<Filter>Command handlers</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\src\group_cmd.cpp">
|
<ClCompile Include="..\src\group_cmd.cpp">
|
||||||
<Filter>Command handlers</Filter>
|
<Filter>Command handlers</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
@@ -1872,6 +1878,9 @@
|
|||||||
<ClInclude Include="..\src\table\genland.h">
|
<ClInclude Include="..\src\table\genland.h">
|
||||||
<Filter>Tables</Filter>
|
<Filter>Tables</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\src\table\heightmap_colours.h">
|
||||||
|
<Filter>Tables</Filter>
|
||||||
|
</ClInclude>
|
||||||
<ClInclude Include="..\src\table\industry_land.h">
|
<ClInclude Include="..\src\table\industry_land.h">
|
||||||
<Filter>Tables</Filter>
|
<Filter>Tables</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
@@ -2079,27 +2088,12 @@
|
|||||||
<ClInclude Include="..\src\3rdparty\squirrel\include\sqstdaux.h">
|
<ClInclude Include="..\src\3rdparty\squirrel\include\sqstdaux.h">
|
||||||
<Filter>Squirrel headers</Filter>
|
<Filter>Squirrel headers</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\src\3rdparty\squirrel\include\sqstdblob.h">
|
|
||||||
<Filter>Squirrel headers</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\src\3rdparty\squirrel\sqstdlib\sqstdblobimpl.h">
|
|
||||||
<Filter>Squirrel headers</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\src\3rdparty\squirrel\include\sqstdio.h">
|
|
||||||
<Filter>Squirrel headers</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\src\3rdparty\squirrel\include\sqstdmath.h">
|
<ClInclude Include="..\src\3rdparty\squirrel\include\sqstdmath.h">
|
||||||
<Filter>Squirrel headers</Filter>
|
<Filter>Squirrel headers</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\src\3rdparty\squirrel\sqstdlib\sqstdstream.h">
|
|
||||||
<Filter>Squirrel headers</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\src\3rdparty\squirrel\include\sqstdstring.h">
|
<ClInclude Include="..\src\3rdparty\squirrel\include\sqstdstring.h">
|
||||||
<Filter>Squirrel headers</Filter>
|
<Filter>Squirrel headers</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\src\3rdparty\squirrel\include\sqstdsystem.h">
|
|
||||||
<Filter>Squirrel headers</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\src\3rdparty\squirrel\squirrel\sqstring.h">
|
<ClInclude Include="..\src\3rdparty\squirrel\squirrel\sqstring.h">
|
||||||
<Filter>Squirrel headers</Filter>
|
<Filter>Squirrel headers</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
|||||||
@@ -102,7 +102,7 @@
|
|||||||
<FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
|
<FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
|
||||||
<OmitFramePointers>true</OmitFramePointers>
|
<OmitFramePointers>true</OmitFramePointers>
|
||||||
<AdditionalIncludeDirectories>..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<StringPooling>true</StringPooling>
|
<StringPooling>true</StringPooling>
|
||||||
<ExceptionHandling>Sync</ExceptionHandling>
|
<ExceptionHandling>Sync</ExceptionHandling>
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
@@ -204,7 +204,7 @@
|
|||||||
<FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
|
<FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
|
||||||
<OmitFramePointers>true</OmitFramePointers>
|
<OmitFramePointers>true</OmitFramePointers>
|
||||||
<AdditionalIncludeDirectories>..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<StringPooling>true</StringPooling>
|
<StringPooling>true</StringPooling>
|
||||||
<ExceptionHandling>Sync</ExceptionHandling>
|
<ExceptionHandling>Sync</ExceptionHandling>
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
|
|||||||
@@ -52,7 +52,7 @@
|
|||||||
FavorSizeOrSpeed="2"
|
FavorSizeOrSpeed="2"
|
||||||
OmitFramePointers="true"
|
OmitFramePointers="true"
|
||||||
AdditionalIncludeDirectories="..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include"
|
AdditionalIncludeDirectories="..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include"
|
||||||
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\""
|
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\";WITH_ASSERT"
|
||||||
StringPooling="true"
|
StringPooling="true"
|
||||||
ExceptionHandling="1"
|
ExceptionHandling="1"
|
||||||
RuntimeLibrary="0"
|
RuntimeLibrary="0"
|
||||||
@@ -257,7 +257,7 @@
|
|||||||
FavorSizeOrSpeed="2"
|
FavorSizeOrSpeed="2"
|
||||||
OmitFramePointers="true"
|
OmitFramePointers="true"
|
||||||
AdditionalIncludeDirectories="..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include"
|
AdditionalIncludeDirectories="..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include"
|
||||||
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\";_SQ64"
|
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\";_SQ64;WITH_ASSERT"
|
||||||
StringPooling="true"
|
StringPooling="true"
|
||||||
ExceptionHandling="1"
|
ExceptionHandling="1"
|
||||||
RuntimeLibrary="0"
|
RuntimeLibrary="0"
|
||||||
@@ -514,6 +514,10 @@
|
|||||||
RelativePath=".\..\src\depot.cpp"
|
RelativePath=".\..\src\depot.cpp"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\..\src\disaster_vehicle.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\..\src\driver.cpp"
|
RelativePath=".\..\src\driver.cpp"
|
||||||
>
|
>
|
||||||
@@ -1022,6 +1026,10 @@
|
|||||||
RelativePath=".\..\src\direction_type.h"
|
RelativePath=".\..\src\direction_type.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\..\src\disaster_vehicle.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\..\src\music\dmusic.h"
|
RelativePath=".\..\src\music\dmusic.h"
|
||||||
>
|
>
|
||||||
@@ -1546,6 +1554,10 @@
|
|||||||
RelativePath=".\..\src\roadveh.h"
|
RelativePath=".\..\src\roadveh.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\..\src\safeguards.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\..\src\screenshot.h"
|
RelativePath=".\..\src\screenshot.h"
|
||||||
>
|
>
|
||||||
@@ -2506,10 +2518,6 @@
|
|||||||
RelativePath=".\..\src\depot_cmd.cpp"
|
RelativePath=".\..\src\depot_cmd.cpp"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
|
||||||
RelativePath=".\..\src\disaster_cmd.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
<File
|
||||||
RelativePath=".\..\src\group_cmd.cpp"
|
RelativePath=".\..\src\group_cmd.cpp"
|
||||||
>
|
>
|
||||||
@@ -2822,6 +2830,10 @@
|
|||||||
RelativePath=".\..\src\table\genland.h"
|
RelativePath=".\..\src\table\genland.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\..\src\table\heightmap_colours.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\..\src\table\industry_land.h"
|
RelativePath=".\..\src\table\industry_land.h"
|
||||||
>
|
>
|
||||||
@@ -3114,34 +3126,14 @@
|
|||||||
RelativePath=".\..\src\3rdparty\squirrel\include\sqstdaux.h"
|
RelativePath=".\..\src\3rdparty\squirrel\include\sqstdaux.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
|
||||||
RelativePath=".\..\src\3rdparty\squirrel\include\sqstdblob.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\..\src\3rdparty\squirrel\sqstdlib\sqstdblobimpl.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\..\src\3rdparty\squirrel\include\sqstdio.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
<File
|
||||||
RelativePath=".\..\src\3rdparty\squirrel\include\sqstdmath.h"
|
RelativePath=".\..\src\3rdparty\squirrel\include\sqstdmath.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
|
||||||
RelativePath=".\..\src\3rdparty\squirrel\sqstdlib\sqstdstream.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
<File
|
||||||
RelativePath=".\..\src\3rdparty\squirrel\include\sqstdstring.h"
|
RelativePath=".\..\src\3rdparty\squirrel\include\sqstdstring.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
|
||||||
RelativePath=".\..\src\3rdparty\squirrel\include\sqstdsystem.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
<File
|
||||||
RelativePath=".\..\src\3rdparty\squirrel\squirrel\sqstring.h"
|
RelativePath=".\..\src\3rdparty\squirrel\squirrel\sqstring.h"
|
||||||
>
|
>
|
||||||
|
|||||||
@@ -52,7 +52,7 @@
|
|||||||
FavorSizeOrSpeed="2"
|
FavorSizeOrSpeed="2"
|
||||||
OmitFramePointers="true"
|
OmitFramePointers="true"
|
||||||
AdditionalIncludeDirectories="..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include"
|
AdditionalIncludeDirectories="..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include"
|
||||||
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\""
|
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\";WITH_ASSERT"
|
||||||
StringPooling="true"
|
StringPooling="true"
|
||||||
ExceptionHandling="1"
|
ExceptionHandling="1"
|
||||||
RuntimeLibrary="0"
|
RuntimeLibrary="0"
|
||||||
@@ -257,7 +257,7 @@
|
|||||||
FavorSizeOrSpeed="2"
|
FavorSizeOrSpeed="2"
|
||||||
OmitFramePointers="true"
|
OmitFramePointers="true"
|
||||||
AdditionalIncludeDirectories="..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include"
|
AdditionalIncludeDirectories="..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include"
|
||||||
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\";_SQ64"
|
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\";_SQ64;WITH_ASSERT"
|
||||||
StringPooling="true"
|
StringPooling="true"
|
||||||
ExceptionHandling="1"
|
ExceptionHandling="1"
|
||||||
RuntimeLibrary="0"
|
RuntimeLibrary="0"
|
||||||
|
|||||||
@@ -53,7 +53,7 @@
|
|||||||
FavorSizeOrSpeed="2"
|
FavorSizeOrSpeed="2"
|
||||||
OmitFramePointers="true"
|
OmitFramePointers="true"
|
||||||
AdditionalIncludeDirectories="..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include"
|
AdditionalIncludeDirectories="..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include"
|
||||||
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\""
|
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\";WITH_ASSERT"
|
||||||
StringPooling="true"
|
StringPooling="true"
|
||||||
ExceptionHandling="1"
|
ExceptionHandling="1"
|
||||||
RuntimeLibrary="0"
|
RuntimeLibrary="0"
|
||||||
@@ -255,7 +255,7 @@
|
|||||||
FavorSizeOrSpeed="2"
|
FavorSizeOrSpeed="2"
|
||||||
OmitFramePointers="true"
|
OmitFramePointers="true"
|
||||||
AdditionalIncludeDirectories="..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include"
|
AdditionalIncludeDirectories="..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include"
|
||||||
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\";_SQ64"
|
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\";_SQ64;WITH_ASSERT"
|
||||||
StringPooling="true"
|
StringPooling="true"
|
||||||
ExceptionHandling="1"
|
ExceptionHandling="1"
|
||||||
RuntimeLibrary="0"
|
RuntimeLibrary="0"
|
||||||
@@ -511,6 +511,10 @@
|
|||||||
RelativePath=".\..\src\depot.cpp"
|
RelativePath=".\..\src\depot.cpp"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\..\src\disaster_vehicle.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\..\src\driver.cpp"
|
RelativePath=".\..\src\driver.cpp"
|
||||||
>
|
>
|
||||||
@@ -1019,6 +1023,10 @@
|
|||||||
RelativePath=".\..\src\direction_type.h"
|
RelativePath=".\..\src\direction_type.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\..\src\disaster_vehicle.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\..\src\music\dmusic.h"
|
RelativePath=".\..\src\music\dmusic.h"
|
||||||
>
|
>
|
||||||
@@ -1543,6 +1551,10 @@
|
|||||||
RelativePath=".\..\src\roadveh.h"
|
RelativePath=".\..\src\roadveh.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\..\src\safeguards.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\..\src\screenshot.h"
|
RelativePath=".\..\src\screenshot.h"
|
||||||
>
|
>
|
||||||
@@ -2503,10 +2515,6 @@
|
|||||||
RelativePath=".\..\src\depot_cmd.cpp"
|
RelativePath=".\..\src\depot_cmd.cpp"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
|
||||||
RelativePath=".\..\src\disaster_cmd.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
<File
|
||||||
RelativePath=".\..\src\group_cmd.cpp"
|
RelativePath=".\..\src\group_cmd.cpp"
|
||||||
>
|
>
|
||||||
@@ -2819,6 +2827,10 @@
|
|||||||
RelativePath=".\..\src\table\genland.h"
|
RelativePath=".\..\src\table\genland.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\..\src\table\heightmap_colours.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\..\src\table\industry_land.h"
|
RelativePath=".\..\src\table\industry_land.h"
|
||||||
>
|
>
|
||||||
@@ -3111,34 +3123,14 @@
|
|||||||
RelativePath=".\..\src\3rdparty\squirrel\include\sqstdaux.h"
|
RelativePath=".\..\src\3rdparty\squirrel\include\sqstdaux.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
|
||||||
RelativePath=".\..\src\3rdparty\squirrel\include\sqstdblob.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\..\src\3rdparty\squirrel\sqstdlib\sqstdblobimpl.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\..\src\3rdparty\squirrel\include\sqstdio.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
<File
|
||||||
RelativePath=".\..\src\3rdparty\squirrel\include\sqstdmath.h"
|
RelativePath=".\..\src\3rdparty\squirrel\include\sqstdmath.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
|
||||||
RelativePath=".\..\src\3rdparty\squirrel\sqstdlib\sqstdstream.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
<File
|
||||||
RelativePath=".\..\src\3rdparty\squirrel\include\sqstdstring.h"
|
RelativePath=".\..\src\3rdparty\squirrel\include\sqstdstring.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
|
||||||
RelativePath=".\..\src\3rdparty\squirrel\include\sqstdsystem.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
<File
|
||||||
RelativePath=".\..\src\3rdparty\squirrel\squirrel\sqstring.h"
|
RelativePath=".\..\src\3rdparty\squirrel\squirrel\sqstring.h"
|
||||||
>
|
>
|
||||||
|
|||||||
@@ -53,7 +53,7 @@
|
|||||||
FavorSizeOrSpeed="2"
|
FavorSizeOrSpeed="2"
|
||||||
OmitFramePointers="true"
|
OmitFramePointers="true"
|
||||||
AdditionalIncludeDirectories="..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include"
|
AdditionalIncludeDirectories="..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include"
|
||||||
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\""
|
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\";WITH_ASSERT"
|
||||||
StringPooling="true"
|
StringPooling="true"
|
||||||
ExceptionHandling="1"
|
ExceptionHandling="1"
|
||||||
RuntimeLibrary="0"
|
RuntimeLibrary="0"
|
||||||
@@ -255,7 +255,7 @@
|
|||||||
FavorSizeOrSpeed="2"
|
FavorSizeOrSpeed="2"
|
||||||
OmitFramePointers="true"
|
OmitFramePointers="true"
|
||||||
AdditionalIncludeDirectories="..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include"
|
AdditionalIncludeDirectories="..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include"
|
||||||
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\";_SQ64"
|
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\";_SQ64;WITH_ASSERT"
|
||||||
StringPooling="true"
|
StringPooling="true"
|
||||||
ExceptionHandling="1"
|
ExceptionHandling="1"
|
||||||
RuntimeLibrary="0"
|
RuntimeLibrary="0"
|
||||||
|
|||||||
72
readme.txt
72
readme.txt
@@ -1,5 +1,5 @@
|
|||||||
Last updated: 2014-04-01
|
Last updated: 2015-02-24
|
||||||
Release version: 1.4.0
|
Release version: 1.5.0-beta2
|
||||||
------------------------------------------------------------------------
|
------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
@@ -661,6 +661,12 @@ The md5 implementation in src/3rdparty/md5 is licensed under the Zlib
|
|||||||
license. See the comments in the source files in src/3rdparty/md5 for
|
license. See the comments in the source files in src/3rdparty/md5 for
|
||||||
the complete license text.
|
the complete license text.
|
||||||
|
|
||||||
|
The implementations of Posix getaddrinfo and getnameinfo for OS/2 in
|
||||||
|
src/3rdparty/os2 are distributed partly under the GNU Lesser General Public
|
||||||
|
License 2.1, and partly under the (3-clause) BSD license. The exact licensing
|
||||||
|
terms can be found in src/3rdparty/os2/getaddrinfo.c resp.
|
||||||
|
src/3rdparty/os2/getnameinfo.c.
|
||||||
|
|
||||||
The exe2coff implementation in os/dos/exe2coff is available under the
|
The exe2coff implementation in os/dos/exe2coff is available under the
|
||||||
GPL, with a number of additional terms. See os/dos/exe2coff/copying and
|
GPL, with a number of additional terms. See os/dos/exe2coff/copying and
|
||||||
os/dos/exe2coff/copying.dj for the exact licensing terms.
|
os/dos/exe2coff/copying.dj for the exact licensing terms.
|
||||||
@@ -674,46 +680,47 @@ http://homer.rice.edu/~sandmann/cwsdpmi/csdpmi5s.zip
|
|||||||
X.X) Credits
|
X.X) Credits
|
||||||
---- -------
|
---- -------
|
||||||
The OpenTTD team (in alphabetical order):
|
The OpenTTD team (in alphabetical order):
|
||||||
Albert Hofkamp (Alberth) - GUI expert
|
Albert Hofkamp (Alberth) - GUI expert (since 0.7)
|
||||||
Jean-François Claeys (Belugas) - GUI, newindustries and more
|
Matthijs Kooijman (blathijs) - Pathfinder-guru, Debian port (since 0.3)
|
||||||
Matthijs Kooijman (blathijs) - Pathfinder-guru, pool rework
|
Ulf Hermann (fonsinchen) - Cargo Distribution (since 1.3)
|
||||||
Ulf Hermann (fonsinchen) - Cargo Distribution
|
Christoph Elsenhans (frosch) - General coding (since 0.6)
|
||||||
Christoph Elsenhans (frosch) - General coding
|
Loïc Guilloux (glx) - Windows Expert (since 0.4.5)
|
||||||
Loïc Guilloux (glx) - Windows Expert
|
Michael Lutz (michi_cc) - Path based signals (since 0.7)
|
||||||
Michael Lutz (michi_cc) - Path based signals
|
Owen Rudge (orudge) - Forum host, OS/2 port (since 0.1)
|
||||||
Owen Rudge (orudge) - Forum host, OS/2 port
|
Peter Nelson (peter1138) - Spiritual descendant from newGRF gods (since 0.4.5)
|
||||||
Peter Nelson (peter1138) - Spiritual descendant from newGRF gods
|
Ingo von Borstel (planetmaker) - General coding, Support (since 1.1)
|
||||||
Ingo von Borstel (planetmaker) - Support
|
Remko Bijker (Rubidium) - Lead coder and way more (since 0.4.5)
|
||||||
Remko Bijker (Rubidium) - Lead coder and way more
|
José Soler (Terkhen) - General coding (since 1.0)
|
||||||
Zdeněk Sojka (SmatZ) - Bug finder and fixer
|
Leif Linse (Zuu) - AI/Game Script (since 1.2)
|
||||||
José Soler (Terkhen) - General coding
|
|
||||||
Thijs Marinussen (Yexo) - AI Framework
|
|
||||||
Leif Linse (Zuu) - AI/Game Script
|
|
||||||
|
|
||||||
Inactive Developers:
|
Inactive Developers:
|
||||||
Bjarni Corfitzen (Bjarni) - MacOSX port, coder and vehicles
|
Jean-François Claeys (Belugas) - GUI, newindustries and more (0.4.5 - 1.0)
|
||||||
Victor Fischer (Celestar) - Programming everywhere you need him to
|
Bjarni Corfitzen (Bjarni) - MacOSX port, coder and vehicles (0.3 - 0.7)
|
||||||
Tamás Faragó (Darkvater) - Ex-Lead coder
|
Victor Fischer (Celestar) - Programming everywhere you need him to (0.3 - 0.6)
|
||||||
Jaroslav Mazanec (KUDr) - YAPG (Yet Another Pathfinder God) ;)
|
Jaroslav Mazanec (KUDr) - YAPG (Yet Another Pathfinder God) ;) (0.4.5 - 0.6)
|
||||||
Jonathan Coome (Maedhros) - High priest of the NewGRF Temple
|
Jonathan Coome (Maedhros) - High priest of the NewGRF Temple (0.5 - 0.6)
|
||||||
Attila Bán (MiHaMiX) - WebTranslator 1 and 2
|
Attila Bán (MiHaMiX) - WebTranslator 1 and 2 (0.3 - 0.5)
|
||||||
Christoph Mallon (Tron) - Programmer, code correctness police
|
Zdeněk Sojka (SmatZ) - Bug finder and fixer (0.6 - 1.3)
|
||||||
|
Christoph Mallon (Tron) - Programmer, code correctness police (0.3 - 0.5)
|
||||||
|
Patric Stout (TrueBrain) - NoProgrammer (0.3 - 1.2), sys op (active)
|
||||||
|
Thijs Marinussen (Yexo) - AI Framework, General (0.6 - 1.3)
|
||||||
|
|
||||||
Retired Developers:
|
Retired Developers:
|
||||||
Ludvig Strigeus (ludde) - OpenTTD author, main coder (0.1 - 0.3.3)
|
Tamás Faragó (Darkvater) - Ex-Lead coder (0.3 - 0.5)
|
||||||
Serge Paquet (vurlix) - Assistant project manager, coder (0.1 - 0.3.3)
|
Dominik Scherer (dominik81) - Lead programmer, GUI expert (0.3 - 0.3)
|
||||||
Dominik Scherer (dominik81) - Lead programmer, GUI expert (0.3.0 - 0.3.6)
|
Emil Djupfeld (egladil) - MacOSX port (0.4 - 0.6)
|
||||||
Benedikt Brüggemeier (skidd13) - Bug fixer and code reworker
|
Simon Sasburg (HackyKid) - Bug fixer (0.4 - 0.4.5)
|
||||||
Patric Stout (TrueBrain) - NoProgrammer (0.3 - 1.2), sys op (active)
|
Ludvig Strigeus (ludde) - Original author of OpenTTD, main coder (0.1 - 0.3)
|
||||||
|
Cian Duffy (MYOB) - BeOS port / manual writing (0.1 - 0.3)
|
||||||
|
Petr Baudiš (pasky) - Many patches, newgrf support, etc. (0.3 - 0.3)
|
||||||
|
Benedikt Brüggemeier (skidd13) - Bug fixer and code reworker (0.6 - 0.7)
|
||||||
|
Serge Paquet (vurlix) - 2nd contributor after ludde (0.1 - 0.3)
|
||||||
|
|
||||||
Thanks to:
|
Thanks to:
|
||||||
Josef Drexler - For his great work on TTDPatch.
|
Josef Drexler - For his great work on TTDPatch.
|
||||||
Marcin Grzegorczyk - For his TTDPatch work and documentation of Transport Tycoon Deluxe internals and track foundations
|
Marcin Grzegorczyk - For his TTDPatch work and documentation of Transport Tycoon Deluxe internals and track foundations
|
||||||
Petr Baudiš (pasky) - Many patches, newgrf support, etc.
|
|
||||||
Simon Sasburg (HackyKid) - For the many bugfixes he has blessed us with
|
|
||||||
Stefan Meißner (sign_de) - For his work on the console
|
Stefan Meißner (sign_de) - For his work on the console
|
||||||
Mike Ragsdale - OpenTTD installer
|
Mike Ragsdale - OpenTTD installer
|
||||||
Cian Duffy (MYOB) - BeOS port / manual writing
|
|
||||||
Christian Rosentreter (tokai) - MorphOS / AmigaOS port
|
Christian Rosentreter (tokai) - MorphOS / AmigaOS port
|
||||||
Richard Kempton (RichK67) - Additional airports, initial TGP implementation
|
Richard Kempton (RichK67) - Additional airports, initial TGP implementation
|
||||||
Alberto Demichelis - Squirrel scripting language
|
Alberto Demichelis - Squirrel scripting language
|
||||||
@@ -722,7 +729,6 @@ Thanks to:
|
|||||||
George - Canal graphics
|
George - Canal graphics
|
||||||
Andrew Parkhouse (andythenorth) - River graphics
|
Andrew Parkhouse (andythenorth) - River graphics
|
||||||
David Dallaston (Pikka) - Tram tracks
|
David Dallaston (Pikka) - Tram tracks
|
||||||
Fleashosio - Titlegame
|
|
||||||
All Translators - For their support to make OpenTTD a truly international game
|
All Translators - For their support to make OpenTTD a truly international game
|
||||||
Bug Reporters - Thanks for all bug reports
|
Bug Reporters - Thanks for all bug reports
|
||||||
Chris Sawyer - For an amazing game!
|
Chris Sawyer - For an amazing game!
|
||||||
|
|||||||
19
source.list
19
source.list
@@ -19,6 +19,7 @@ date.cpp
|
|||||||
debug.cpp
|
debug.cpp
|
||||||
dedicated.cpp
|
dedicated.cpp
|
||||||
depot.cpp
|
depot.cpp
|
||||||
|
disaster_vehicle.cpp
|
||||||
driver.cpp
|
driver.cpp
|
||||||
economy.cpp
|
economy.cpp
|
||||||
effectvehicle.cpp
|
effectvehicle.cpp
|
||||||
@@ -98,6 +99,10 @@ townname.cpp
|
|||||||
#else
|
#else
|
||||||
#if OS2
|
#if OS2
|
||||||
os/os2/os2.cpp
|
os/os2/os2.cpp
|
||||||
|
3rdparty/os2/getaddrinfo.c
|
||||||
|
3rdparty/os2/getaddrinfo.h
|
||||||
|
3rdparty/os2/getnameinfo.c
|
||||||
|
3rdparty/os2/getnameinfo.h
|
||||||
#else
|
#else
|
||||||
#if OSX
|
#if OSX
|
||||||
os/macosx/crashlog_osx.cpp
|
os/macosx/crashlog_osx.cpp
|
||||||
@@ -172,6 +177,7 @@ depot_map.h
|
|||||||
depot_type.h
|
depot_type.h
|
||||||
direction_func.h
|
direction_func.h
|
||||||
direction_type.h
|
direction_type.h
|
||||||
|
disaster_vehicle.h
|
||||||
music/dmusic.h
|
music/dmusic.h
|
||||||
driver.h
|
driver.h
|
||||||
economy_base.h
|
economy_base.h
|
||||||
@@ -303,6 +309,7 @@ road_internal.h
|
|||||||
road_type.h
|
road_type.h
|
||||||
roadstop_base.h
|
roadstop_base.h
|
||||||
roadveh.h
|
roadveh.h
|
||||||
|
safeguards.h
|
||||||
screenshot.h
|
screenshot.h
|
||||||
sdl.h
|
sdl.h
|
||||||
sound/sdl_s.h
|
sound/sdl_s.h
|
||||||
@@ -562,7 +569,6 @@ autoreplace_cmd.cpp
|
|||||||
clear_cmd.cpp
|
clear_cmd.cpp
|
||||||
company_cmd.cpp
|
company_cmd.cpp
|
||||||
depot_cmd.cpp
|
depot_cmd.cpp
|
||||||
disaster_cmd.cpp
|
|
||||||
group_cmd.cpp
|
group_cmd.cpp
|
||||||
industry_cmd.cpp
|
industry_cmd.cpp
|
||||||
misc_cmd.cpp
|
misc_cmd.cpp
|
||||||
@@ -643,6 +649,7 @@ table/control_codes.h
|
|||||||
table/elrail_data.h
|
table/elrail_data.h
|
||||||
table/engines.h
|
table/engines.h
|
||||||
table/genland.h
|
table/genland.h
|
||||||
|
table/heightmap_colours.h
|
||||||
table/industry_land.h
|
table/industry_land.h
|
||||||
table/landscape_sprite.h
|
table/landscape_sprite.h
|
||||||
table/newgrf_debug_data.h
|
table/newgrf_debug_data.h
|
||||||
@@ -720,13 +727,8 @@ script/squirrel_std.hpp
|
|||||||
3rdparty/squirrel/squirrel/sqpcheader.h
|
3rdparty/squirrel/squirrel/sqpcheader.h
|
||||||
3rdparty/squirrel/squirrel/sqstate.h
|
3rdparty/squirrel/squirrel/sqstate.h
|
||||||
3rdparty/squirrel/include/sqstdaux.h
|
3rdparty/squirrel/include/sqstdaux.h
|
||||||
3rdparty/squirrel/include/sqstdblob.h
|
|
||||||
3rdparty/squirrel/sqstdlib/sqstdblobimpl.h
|
|
||||||
3rdparty/squirrel/include/sqstdio.h
|
|
||||||
3rdparty/squirrel/include/sqstdmath.h
|
3rdparty/squirrel/include/sqstdmath.h
|
||||||
3rdparty/squirrel/sqstdlib/sqstdstream.h
|
|
||||||
3rdparty/squirrel/include/sqstdstring.h
|
3rdparty/squirrel/include/sqstdstring.h
|
||||||
3rdparty/squirrel/include/sqstdsystem.h
|
|
||||||
3rdparty/squirrel/squirrel/sqstring.h
|
3rdparty/squirrel/squirrel/sqstring.h
|
||||||
3rdparty/squirrel/squirrel/sqtable.h
|
3rdparty/squirrel/squirrel/sqtable.h
|
||||||
3rdparty/squirrel/include/squirrel.h
|
3rdparty/squirrel/include/squirrel.h
|
||||||
@@ -1108,7 +1110,10 @@ music/null_m.cpp
|
|||||||
#else
|
#else
|
||||||
#if DOS
|
#if DOS
|
||||||
#else
|
#else
|
||||||
music/extmidi.cpp
|
#if MORPHOS
|
||||||
|
#else
|
||||||
|
music/extmidi.cpp
|
||||||
|
#end
|
||||||
#end
|
#end
|
||||||
#end
|
#end
|
||||||
#end
|
#end
|
||||||
|
|||||||
4
src/3rdparty/md5/md5.cpp
vendored
4
src/3rdparty/md5/md5.cpp
vendored
@@ -1,4 +1,4 @@
|
|||||||
/* $Id: md5.cpp 17883 2009-10-26 23:03:03Z smatz $ */
|
/* $Id: md5.cpp 26482 2014-04-23 20:13:33Z rubidium $ */
|
||||||
|
|
||||||
/** @file md5.cpp Creating MD5 checksums of files. */
|
/** @file md5.cpp Creating MD5 checksums of files. */
|
||||||
|
|
||||||
@@ -60,6 +60,8 @@
|
|||||||
#include "../../core/endian_func.hpp"
|
#include "../../core/endian_func.hpp"
|
||||||
#include "md5.h"
|
#include "md5.h"
|
||||||
|
|
||||||
|
#include "../../safeguards.h"
|
||||||
|
|
||||||
#define T_MASK ((uint32)~0)
|
#define T_MASK ((uint32)~0)
|
||||||
#define T1 /* 0xd76aa478 */ (T_MASK ^ 0x28955b87)
|
#define T1 /* 0xd76aa478 */ (T_MASK ^ 0x28955b87)
|
||||||
#define T2 /* 0xe8c7b756 */ (T_MASK ^ 0x173848a9)
|
#define T2 /* 0xe8c7b756 */ (T_MASK ^ 0x173848a9)
|
||||||
|
|||||||
12
src/3rdparty/squirrel/include/sqstdaux.h
vendored
12
src/3rdparty/squirrel/include/sqstdaux.h
vendored
@@ -2,15 +2,7 @@
|
|||||||
#ifndef _SQSTD_AUXLIB_H_
|
#ifndef _SQSTD_AUXLIB_H_
|
||||||
#define _SQSTD_AUXLIB_H_
|
#define _SQSTD_AUXLIB_H_
|
||||||
|
|
||||||
#ifdef __cplusplus
|
void sqstd_seterrorhandlers(HSQUIRRELVM v);
|
||||||
extern "C" {
|
void sqstd_printcallstack(HSQUIRRELVM v);
|
||||||
#endif
|
|
||||||
|
|
||||||
SQUIRREL_API void sqstd_seterrorhandlers(HSQUIRRELVM v);
|
|
||||||
SQUIRREL_API void sqstd_printcallstack(HSQUIRRELVM v);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
} /*extern "C"*/
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* _SQSTD_AUXLIB_H_ */
|
#endif /* _SQSTD_AUXLIB_H_ */
|
||||||
|
|||||||
10
src/3rdparty/squirrel/include/sqstdmath.h
vendored
10
src/3rdparty/squirrel/include/sqstdmath.h
vendored
@@ -2,14 +2,6 @@
|
|||||||
#ifndef _SQSTD_MATH_H_
|
#ifndef _SQSTD_MATH_H_
|
||||||
#define _SQSTD_MATH_H_
|
#define _SQSTD_MATH_H_
|
||||||
|
|
||||||
#ifdef __cplusplus
|
SQRESULT sqstd_register_mathlib(HSQUIRRELVM v);
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
SQUIRREL_API SQRESULT sqstd_register_mathlib(HSQUIRRELVM v);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
} /*extern "C"*/
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /*_SQSTD_MATH_H_*/
|
#endif /*_SQSTD_MATH_H_*/
|
||||||
|
|||||||
26
src/3rdparty/squirrel/include/sqstdstring.h
vendored
26
src/3rdparty/squirrel/include/sqstdstring.h
vendored
@@ -2,10 +2,6 @@
|
|||||||
#ifndef _SQSTD_STRING_H_
|
#ifndef _SQSTD_STRING_H_
|
||||||
#define _SQSTD_STRING_H_
|
#define _SQSTD_STRING_H_
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
typedef unsigned int SQRexBool;
|
typedef unsigned int SQRexBool;
|
||||||
typedef struct SQRex SQRex;
|
typedef struct SQRex SQRex;
|
||||||
|
|
||||||
@@ -14,20 +10,16 @@ typedef struct {
|
|||||||
SQInteger len;
|
SQInteger len;
|
||||||
} SQRexMatch;
|
} SQRexMatch;
|
||||||
|
|
||||||
SQUIRREL_API SQRex *sqstd_rex_compile(const SQChar *pattern,const SQChar **error);
|
SQRex *sqstd_rex_compile(const SQChar *pattern,const SQChar **error);
|
||||||
SQUIRREL_API void sqstd_rex_free(SQRex *exp);
|
void sqstd_rex_free(SQRex *exp);
|
||||||
SQUIRREL_API SQBool sqstd_rex_match(SQRex* exp,const SQChar* text);
|
SQBool sqstd_rex_match(SQRex* exp,const SQChar* text);
|
||||||
SQUIRREL_API SQBool sqstd_rex_search(SQRex* exp,const SQChar* text, const SQChar** out_begin, const SQChar** out_end);
|
SQBool sqstd_rex_search(SQRex* exp,const SQChar* text, const SQChar** out_begin, const SQChar** out_end);
|
||||||
SQUIRREL_API SQBool sqstd_rex_searchrange(SQRex* exp,const SQChar* text_begin,const SQChar* text_end,const SQChar** out_begin, const SQChar** out_end);
|
SQBool sqstd_rex_searchrange(SQRex* exp,const SQChar* text_begin,const SQChar* text_end,const SQChar** out_begin, const SQChar** out_end);
|
||||||
SQUIRREL_API SQInteger sqstd_rex_getsubexpcount(SQRex* exp);
|
SQInteger sqstd_rex_getsubexpcount(SQRex* exp);
|
||||||
SQUIRREL_API SQBool sqstd_rex_getsubexp(SQRex* exp, SQInteger n, SQRexMatch *subexp);
|
SQBool sqstd_rex_getsubexp(SQRex* exp, SQInteger n, SQRexMatch *subexp);
|
||||||
|
|
||||||
SQUIRREL_API SQRESULT sqstd_format(HSQUIRRELVM v,SQInteger nformatstringidx,SQInteger *outlen,SQChar **output);
|
SQRESULT sqstd_format(HSQUIRRELVM v,SQInteger nformatstringidx,SQInteger *outlen,SQChar **output);
|
||||||
|
|
||||||
SQUIRREL_API SQRESULT sqstd_register_stringlib(HSQUIRRELVM v);
|
SQRESULT sqstd_register_stringlib(HSQUIRRELVM v);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
} /*extern "C"*/
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /*_SQSTD_STRING_H_*/
|
#endif /*_SQSTD_STRING_H_*/
|
||||||
|
|||||||
427
src/3rdparty/squirrel/include/squirrel.h
vendored
427
src/3rdparty/squirrel/include/squirrel.h
vendored
@@ -1,81 +1,41 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2003-2011 Alberto Demichelis
|
* Copyright (c) 2003-2011 Alberto Demichelis
|
||||||
|
*
|
||||||
This software is provided 'as-is', without any
|
* This software is provided 'as-is', without any
|
||||||
express or implied warranty. In no event will the
|
* express or implied warranty. In no event will the
|
||||||
authors be held liable for any damages arising from
|
* authors be held liable for any damages arising from
|
||||||
the use of this software.
|
* the use of this software.
|
||||||
|
*
|
||||||
Permission is granted to anyone to use this software
|
* Permission is granted to anyone to use this software
|
||||||
for any purpose, including commercial applications,
|
* for any purpose, including commercial applications,
|
||||||
and to alter it and redistribute it freely, subject
|
* and to alter it and redistribute it freely, subject
|
||||||
to the following restrictions:
|
* to the following restrictions:
|
||||||
|
*
|
||||||
1. The origin of this software must not be
|
* 1. The origin of this software must not be
|
||||||
misrepresented; you must not claim that
|
* misrepresented; you must not claim that
|
||||||
you wrote the original software. If you
|
* you wrote the original software. If you
|
||||||
use this software in a product, an
|
* use this software in a product, an
|
||||||
acknowledgment in the product
|
* acknowledgment in the product
|
||||||
documentation would be appreciated but is
|
* documentation would be appreciated but is
|
||||||
not required.
|
* not required.
|
||||||
|
*
|
||||||
2. Altered source versions must be plainly
|
* 2. Altered source versions must be plainly
|
||||||
marked as such, and must not be
|
* marked as such, and must not be
|
||||||
misrepresented as being the original
|
* misrepresented as being the original
|
||||||
software.
|
* software.
|
||||||
|
*
|
||||||
3. This notice may not be removed or
|
* 3. This notice may not be removed or
|
||||||
altered from any source distribution.
|
* altered from any source distribution.
|
||||||
|
*/
|
||||||
*/
|
|
||||||
#ifndef _SQUIRREL_H_
|
#ifndef _SQUIRREL_H_
|
||||||
#define _SQUIRREL_H_
|
#define _SQUIRREL_H_
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#include "../../../string_type.h"
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(_MSC_VER)
|
|
||||||
# define inline __forceinline
|
|
||||||
#endif /* _MSC_VER */
|
|
||||||
|
|
||||||
#if defined(_MSC_VER) && _MSC_VER >= 1400 // MSVC 2005 safety checks
|
|
||||||
# pragma warning(disable: 4996) // '_wfopen' was declared deprecated
|
|
||||||
# define _CRT_SECURE_NO_DEPRECATE // all deprecated 'unsafe string functions
|
|
||||||
# define _CRT_NON_CONFORMING_SWPRINTFS // another deprecated stuff
|
|
||||||
#endif /* _MSC_VER >= 1400 */
|
|
||||||
|
|
||||||
#ifndef SQUIRREL_API
|
|
||||||
#define SQUIRREL_API extern
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if (defined(_WIN64) || defined(_LP64))
|
|
||||||
#ifndef _SQ64
|
|
||||||
#define _SQ64
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef _SQ64
|
|
||||||
#ifdef _MSC_VER
|
|
||||||
typedef __int64 SQInteger;
|
typedef __int64 SQInteger;
|
||||||
typedef unsigned __int64 SQUnsignedInteger;
|
typedef unsigned __int64 SQUnsignedInteger;
|
||||||
typedef unsigned __int64 SQHash; /*should be the same size of a pointer*/
|
typedef unsigned __int64 SQHash; /*should be the same size of a pointer*/
|
||||||
#elif defined(_WIN32)
|
|
||||||
typedef long long SQInteger;
|
|
||||||
typedef unsigned long long SQUnsignedInteger;
|
|
||||||
typedef unsigned long long SQHash; /*should be the same size of a pointer*/
|
|
||||||
#else
|
|
||||||
typedef long SQInteger;
|
|
||||||
typedef unsigned long SQUnsignedInteger;
|
|
||||||
typedef unsigned long SQHash; /*should be the same size of a pointer*/
|
|
||||||
#endif
|
|
||||||
typedef int SQInt32;
|
typedef int SQInt32;
|
||||||
#else
|
|
||||||
typedef int SQInteger;
|
|
||||||
typedef int SQInt32; /*must be 32 bits(also on 64bits processors)*/
|
|
||||||
typedef unsigned int SQUnsignedInteger;
|
|
||||||
typedef unsigned int SQHash; /*should be the same size of a pointer*/
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef SQUSEDOUBLE
|
#ifdef SQUSEDOUBLE
|
||||||
@@ -84,17 +44,8 @@ typedef double SQFloat;
|
|||||||
typedef float SQFloat;
|
typedef float SQFloat;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(SQUSEDOUBLE) && !defined(_SQ64) || !defined(SQUSEDOUBLE) && defined(_SQ64)
|
|
||||||
#ifdef _MSC_VER
|
|
||||||
typedef __int64 SQRawObjectVal; //must be 64bits
|
typedef __int64 SQRawObjectVal; //must be 64bits
|
||||||
#else
|
|
||||||
typedef long long SQRawObjectVal; //must be 64bits
|
|
||||||
#endif
|
|
||||||
#define SQ_OBJECT_RAWINIT() { _unVal.raw = 0; }
|
#define SQ_OBJECT_RAWINIT() { _unVal.raw = 0; }
|
||||||
#else
|
|
||||||
typedef SQUnsignedInteger SQRawObjectVal; //is 32 bits on 32 bits builds and 64 bits otherwise
|
|
||||||
#define SQ_OBJECT_RAWINIT()
|
|
||||||
#endif
|
|
||||||
|
|
||||||
typedef void* SQUserPointer;
|
typedef void* SQUserPointer;
|
||||||
typedef SQUnsignedInteger SQBool;
|
typedef SQUnsignedInteger SQBool;
|
||||||
@@ -117,78 +68,12 @@ struct SQClass;
|
|||||||
struct SQInstance;
|
struct SQInstance;
|
||||||
struct SQDelegable;
|
struct SQDelegable;
|
||||||
|
|
||||||
#ifdef _UNICODE
|
|
||||||
#define SQUNICODE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef SQUNICODE
|
|
||||||
#if (defined(_MSC_VER) && _MSC_VER >= 1400) // 1400 = VS8
|
|
||||||
|
|
||||||
#ifndef _WCHAR_T_DEFINED //this is if the compiler considers wchar_t as native type
|
|
||||||
typedef unsigned short wchar_t;
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
typedef wchar_t SQChar;
|
|
||||||
#define _SC(a) L##a
|
|
||||||
#define scstrcmp wcscmp
|
|
||||||
#define scsprintf swprintf
|
|
||||||
#define scsnprintf _snwprintf
|
|
||||||
#define scstrlen wcslen
|
|
||||||
#define scstrtod wcstod
|
|
||||||
#define scstrtol wcstol
|
|
||||||
#define scatoi _wtoi
|
|
||||||
#define scstrtoul wcstoul
|
|
||||||
#define scvsprintf vswprintf
|
|
||||||
#define scstrstr wcsstr
|
|
||||||
#define scisspace iswspace
|
|
||||||
#define scisdigit iswdigit
|
|
||||||
#define scisxdigit iswxdigit
|
|
||||||
#define scisalpha iswalpha
|
|
||||||
#define sciscntrl iswcntrl
|
|
||||||
#define scisalnum iswalnum
|
|
||||||
#define scprintf wprintf
|
|
||||||
#define scfprintf fwprintf
|
|
||||||
#define scvprintf vwprintf
|
|
||||||
#define scvfprintf vfwprintf
|
|
||||||
#define scvsnprintf _vsnwprintf
|
|
||||||
#define scstrdup _wcsdup
|
|
||||||
#define scstrrchr wcsrchr
|
|
||||||
#define scstrcat wcscat
|
|
||||||
#define MAX_CHAR 0xFFFF
|
|
||||||
#else
|
|
||||||
typedef char SQChar;
|
typedef char SQChar;
|
||||||
#define _SC(a) a
|
|
||||||
#define scstrcmp strcmp
|
|
||||||
#define scsprintf sprintf
|
|
||||||
#define scsnprintf snprintf
|
|
||||||
#define scstrlen strlen
|
|
||||||
#define scstrtod strtod
|
|
||||||
#define scstrtol strtol
|
|
||||||
#define scatoi atoi
|
|
||||||
#define scstrtoul strtoul
|
|
||||||
#define scvsprintf vsprintf
|
|
||||||
#define scstrstr strstr
|
|
||||||
#define scisspace isspace
|
|
||||||
#define scisdigit isdigit
|
|
||||||
#define scisxdigit isxdigit
|
|
||||||
#define sciscntrl iscntrl
|
|
||||||
#define scisalpha isalpha
|
|
||||||
#define scisalnum isalnum
|
|
||||||
#define scprintf printf
|
|
||||||
#define scfprintf fprintf
|
|
||||||
#define scvprintf vprintf
|
|
||||||
#define scvfprintf vfprintf
|
|
||||||
#define scvsnprintf vsnprintf
|
|
||||||
#define scstrdup strdup
|
|
||||||
#define scstrrchr strrchr
|
|
||||||
#define scstrcat strcat
|
|
||||||
#define MAX_CHAR 0xFFFF
|
#define MAX_CHAR 0xFFFF
|
||||||
#endif
|
|
||||||
|
|
||||||
#define SQUIRREL_VERSION _SC("Squirrel 2.2.5 stable - With custom OpenTTD modifications")
|
#define SQUIRREL_VERSION "Squirrel 2.2.5 stable - With custom OpenTTD modifications"
|
||||||
#define SQUIRREL_COPYRIGHT _SC("Copyright (C) 2003-2010 Alberto Demichelis")
|
#define SQUIRREL_COPYRIGHT "Copyright (C) 2003-2010 Alberto Demichelis"
|
||||||
#define SQUIRREL_AUTHOR _SC("Alberto Demichelis")
|
#define SQUIRREL_AUTHOR "Alberto Demichelis"
|
||||||
#define SQUIRREL_VERSION_NUMBER 225
|
#define SQUIRREL_VERSION_NUMBER 225
|
||||||
|
|
||||||
#define SQ_VMSTATE_IDLE 0
|
#define SQ_VMSTATE_IDLE 0
|
||||||
@@ -294,7 +179,7 @@ typedef void (*SQPRINTFUNCTION)(HSQUIRRELVM,const SQChar * ,...);
|
|||||||
typedef SQInteger (*SQWRITEFUNC)(SQUserPointer,SQUserPointer,SQInteger);
|
typedef SQInteger (*SQWRITEFUNC)(SQUserPointer,SQUserPointer,SQInteger);
|
||||||
typedef SQInteger (*SQREADFUNC)(SQUserPointer,SQUserPointer,SQInteger);
|
typedef SQInteger (*SQREADFUNC)(SQUserPointer,SQUserPointer,SQInteger);
|
||||||
|
|
||||||
typedef SQInteger (*SQLEXREADFUNC)(SQUserPointer);
|
typedef WChar (*SQLEXREADFUNC)(SQUserPointer);
|
||||||
|
|
||||||
typedef struct tagSQRegFunction{
|
typedef struct tagSQRegFunction{
|
||||||
const SQChar *name;
|
const SQChar *name;
|
||||||
@@ -311,147 +196,147 @@ typedef struct tagSQFunctionInfo {
|
|||||||
|
|
||||||
|
|
||||||
/*vm*/
|
/*vm*/
|
||||||
SQUIRREL_API bool sq_can_suspend(HSQUIRRELVM v);
|
bool sq_can_suspend(HSQUIRRELVM v);
|
||||||
SQUIRREL_API HSQUIRRELVM sq_open(SQInteger initialstacksize);
|
HSQUIRRELVM sq_open(SQInteger initialstacksize);
|
||||||
SQUIRREL_API HSQUIRRELVM sq_newthread(HSQUIRRELVM friendvm, SQInteger initialstacksize);
|
HSQUIRRELVM sq_newthread(HSQUIRRELVM friendvm, SQInteger initialstacksize);
|
||||||
SQUIRREL_API void sq_seterrorhandler(HSQUIRRELVM v);
|
void sq_seterrorhandler(HSQUIRRELVM v);
|
||||||
SQUIRREL_API void sq_close(HSQUIRRELVM v);
|
void sq_close(HSQUIRRELVM v);
|
||||||
SQUIRREL_API void sq_setforeignptr(HSQUIRRELVM v,SQUserPointer p);
|
void sq_setforeignptr(HSQUIRRELVM v,SQUserPointer p);
|
||||||
SQUIRREL_API SQUserPointer sq_getforeignptr(HSQUIRRELVM v);
|
SQUserPointer sq_getforeignptr(HSQUIRRELVM v);
|
||||||
SQUIRREL_API void sq_setprintfunc(HSQUIRRELVM v, SQPRINTFUNCTION printfunc);
|
void sq_setprintfunc(HSQUIRRELVM v, SQPRINTFUNCTION printfunc);
|
||||||
SQUIRREL_API SQPRINTFUNCTION sq_getprintfunc(HSQUIRRELVM v);
|
SQPRINTFUNCTION sq_getprintfunc(HSQUIRRELVM v);
|
||||||
SQUIRREL_API SQRESULT sq_suspendvm(HSQUIRRELVM v);
|
SQRESULT sq_suspendvm(HSQUIRRELVM v);
|
||||||
SQUIRREL_API bool sq_resumecatch(HSQUIRRELVM v, int suspend = -1);
|
bool sq_resumecatch(HSQUIRRELVM v, int suspend = -1);
|
||||||
SQUIRREL_API bool sq_resumeerror(HSQUIRRELVM v);
|
bool sq_resumeerror(HSQUIRRELVM v);
|
||||||
SQUIRREL_API SQRESULT sq_wakeupvm(HSQUIRRELVM v,SQBool resumedret,SQBool retval,SQBool raiseerror,SQBool throwerror);
|
SQRESULT sq_wakeupvm(HSQUIRRELVM v,SQBool resumedret,SQBool retval,SQBool raiseerror,SQBool throwerror);
|
||||||
SQUIRREL_API SQInteger sq_getvmstate(HSQUIRRELVM v);
|
SQInteger sq_getvmstate(HSQUIRRELVM v);
|
||||||
SQUIRREL_API void sq_decreaseops(HSQUIRRELVM v, int amount);
|
void sq_decreaseops(HSQUIRRELVM v, int amount);
|
||||||
|
|
||||||
/*compiler*/
|
/*compiler*/
|
||||||
SQUIRREL_API SQRESULT sq_compile(HSQUIRRELVM v,SQLEXREADFUNC read,SQUserPointer p,const SQChar *sourcename,SQBool raiseerror);
|
SQRESULT sq_compile(HSQUIRRELVM v,SQLEXREADFUNC read,SQUserPointer p,const SQChar *sourcename,SQBool raiseerror);
|
||||||
SQUIRREL_API SQRESULT sq_compilebuffer(HSQUIRRELVM v,const SQChar *s,SQInteger size,const SQChar *sourcename,SQBool raiseerror);
|
SQRESULT sq_compilebuffer(HSQUIRRELVM v,const SQChar *s,SQInteger size,const SQChar *sourcename,SQBool raiseerror);
|
||||||
SQUIRREL_API void sq_enabledebuginfo(HSQUIRRELVM v, SQBool enable);
|
void sq_enabledebuginfo(HSQUIRRELVM v, SQBool enable);
|
||||||
SQUIRREL_API void sq_notifyallexceptions(HSQUIRRELVM v, SQBool enable);
|
void sq_notifyallexceptions(HSQUIRRELVM v, SQBool enable);
|
||||||
SQUIRREL_API void sq_setcompilererrorhandler(HSQUIRRELVM v,SQCOMPILERERROR f);
|
void sq_setcompilererrorhandler(HSQUIRRELVM v,SQCOMPILERERROR f);
|
||||||
|
|
||||||
/*stack operations*/
|
/*stack operations*/
|
||||||
SQUIRREL_API void sq_push(HSQUIRRELVM v,SQInteger idx);
|
void sq_push(HSQUIRRELVM v,SQInteger idx);
|
||||||
SQUIRREL_API void sq_pop(HSQUIRRELVM v,SQInteger nelemstopop);
|
void sq_pop(HSQUIRRELVM v,SQInteger nelemstopop);
|
||||||
SQUIRREL_API void sq_poptop(HSQUIRRELVM v);
|
void sq_poptop(HSQUIRRELVM v);
|
||||||
SQUIRREL_API void sq_remove(HSQUIRRELVM v,SQInteger idx);
|
void sq_remove(HSQUIRRELVM v,SQInteger idx);
|
||||||
SQUIRREL_API SQInteger sq_gettop(HSQUIRRELVM v);
|
SQInteger sq_gettop(HSQUIRRELVM v);
|
||||||
SQUIRREL_API void sq_settop(HSQUIRRELVM v,SQInteger newtop);
|
void sq_settop(HSQUIRRELVM v,SQInteger newtop);
|
||||||
SQUIRREL_API void sq_reservestack(HSQUIRRELVM v,SQInteger nsize);
|
void sq_reservestack(HSQUIRRELVM v,SQInteger nsize);
|
||||||
SQUIRREL_API SQInteger sq_cmp(HSQUIRRELVM v);
|
SQInteger sq_cmp(HSQUIRRELVM v);
|
||||||
SQUIRREL_API void sq_move(HSQUIRRELVM dest,HSQUIRRELVM src,SQInteger idx);
|
void sq_move(HSQUIRRELVM dest,HSQUIRRELVM src,SQInteger idx);
|
||||||
|
|
||||||
/*object creation handling*/
|
/*object creation handling*/
|
||||||
SQUIRREL_API SQUserPointer sq_newuserdata(HSQUIRRELVM v,SQUnsignedInteger size);
|
SQUserPointer sq_newuserdata(HSQUIRRELVM v,SQUnsignedInteger size);
|
||||||
SQUIRREL_API void sq_newtable(HSQUIRRELVM v);
|
void sq_newtable(HSQUIRRELVM v);
|
||||||
SQUIRREL_API void sq_newarray(HSQUIRRELVM v,SQInteger size);
|
void sq_newarray(HSQUIRRELVM v,SQInteger size);
|
||||||
SQUIRREL_API void sq_newclosure(HSQUIRRELVM v,SQFUNCTION func,SQUnsignedInteger nfreevars);
|
void sq_newclosure(HSQUIRRELVM v,SQFUNCTION func,SQUnsignedInteger nfreevars);
|
||||||
SQUIRREL_API SQRESULT sq_setparamscheck(HSQUIRRELVM v,SQInteger nparamscheck,const SQChar *typemask);
|
SQRESULT sq_setparamscheck(HSQUIRRELVM v,SQInteger nparamscheck,const SQChar *typemask);
|
||||||
SQUIRREL_API SQRESULT sq_bindenv(HSQUIRRELVM v,SQInteger idx);
|
SQRESULT sq_bindenv(HSQUIRRELVM v,SQInteger idx);
|
||||||
SQUIRREL_API void sq_pushstring(HSQUIRRELVM v,const SQChar *s,SQInteger len);
|
void sq_pushstring(HSQUIRRELVM v,const SQChar *s,SQInteger len);
|
||||||
SQUIRREL_API void sq_pushfloat(HSQUIRRELVM v,SQFloat f);
|
void sq_pushfloat(HSQUIRRELVM v,SQFloat f);
|
||||||
SQUIRREL_API void sq_pushinteger(HSQUIRRELVM v,SQInteger n);
|
void sq_pushinteger(HSQUIRRELVM v,SQInteger n);
|
||||||
SQUIRREL_API void sq_pushbool(HSQUIRRELVM v,SQBool b);
|
void sq_pushbool(HSQUIRRELVM v,SQBool b);
|
||||||
SQUIRREL_API void sq_pushuserpointer(HSQUIRRELVM v,SQUserPointer p);
|
void sq_pushuserpointer(HSQUIRRELVM v,SQUserPointer p);
|
||||||
SQUIRREL_API void sq_pushnull(HSQUIRRELVM v);
|
void sq_pushnull(HSQUIRRELVM v);
|
||||||
SQUIRREL_API SQObjectType sq_gettype(HSQUIRRELVM v,SQInteger idx);
|
SQObjectType sq_gettype(HSQUIRRELVM v,SQInteger idx);
|
||||||
SQUIRREL_API SQInteger sq_getsize(HSQUIRRELVM v,SQInteger idx);
|
SQInteger sq_getsize(HSQUIRRELVM v,SQInteger idx);
|
||||||
SQUIRREL_API SQRESULT sq_getbase(HSQUIRRELVM v,SQInteger idx);
|
SQRESULT sq_getbase(HSQUIRRELVM v,SQInteger idx);
|
||||||
SQUIRREL_API SQBool sq_instanceof(HSQUIRRELVM v);
|
SQBool sq_instanceof(HSQUIRRELVM v);
|
||||||
SQUIRREL_API void sq_tostring(HSQUIRRELVM v,SQInteger idx);
|
void sq_tostring(HSQUIRRELVM v,SQInteger idx);
|
||||||
SQUIRREL_API void sq_tobool(HSQUIRRELVM v, SQInteger idx, SQBool *b);
|
void sq_tobool(HSQUIRRELVM v, SQInteger idx, SQBool *b);
|
||||||
SQUIRREL_API SQRESULT sq_getstring(HSQUIRRELVM v,SQInteger idx,const SQChar **c);
|
SQRESULT sq_getstring(HSQUIRRELVM v,SQInteger idx,const SQChar **c);
|
||||||
SQUIRREL_API SQRESULT sq_getinteger(HSQUIRRELVM v,SQInteger idx,SQInteger *i);
|
SQRESULT sq_getinteger(HSQUIRRELVM v,SQInteger idx,SQInteger *i);
|
||||||
SQUIRREL_API SQRESULT sq_getfloat(HSQUIRRELVM v,SQInteger idx,SQFloat *f);
|
SQRESULT sq_getfloat(HSQUIRRELVM v,SQInteger idx,SQFloat *f);
|
||||||
SQUIRREL_API SQRESULT sq_getbool(HSQUIRRELVM v,SQInteger idx,SQBool *b);
|
SQRESULT sq_getbool(HSQUIRRELVM v,SQInteger idx,SQBool *b);
|
||||||
SQUIRREL_API SQRESULT sq_getthread(HSQUIRRELVM v,SQInteger idx,HSQUIRRELVM *thread);
|
SQRESULT sq_getthread(HSQUIRRELVM v,SQInteger idx,HSQUIRRELVM *thread);
|
||||||
SQUIRREL_API SQRESULT sq_getuserpointer(HSQUIRRELVM v,SQInteger idx,SQUserPointer *p);
|
SQRESULT sq_getuserpointer(HSQUIRRELVM v,SQInteger idx,SQUserPointer *p);
|
||||||
SQUIRREL_API SQRESULT sq_getuserdata(HSQUIRRELVM v,SQInteger idx,SQUserPointer *p,SQUserPointer *typetag);
|
SQRESULT sq_getuserdata(HSQUIRRELVM v,SQInteger idx,SQUserPointer *p,SQUserPointer *typetag);
|
||||||
SQUIRREL_API SQRESULT sq_settypetag(HSQUIRRELVM v,SQInteger idx,SQUserPointer typetag);
|
SQRESULT sq_settypetag(HSQUIRRELVM v,SQInteger idx,SQUserPointer typetag);
|
||||||
SQUIRREL_API SQRESULT sq_gettypetag(HSQUIRRELVM v,SQInteger idx,SQUserPointer *typetag);
|
SQRESULT sq_gettypetag(HSQUIRRELVM v,SQInteger idx,SQUserPointer *typetag);
|
||||||
SQUIRREL_API void sq_setreleasehook(HSQUIRRELVM v,SQInteger idx,SQRELEASEHOOK hook);
|
void sq_setreleasehook(HSQUIRRELVM v,SQInteger idx,SQRELEASEHOOK hook);
|
||||||
SQUIRREL_API SQChar *sq_getscratchpad(HSQUIRRELVM v,SQInteger minsize);
|
SQChar *sq_getscratchpad(HSQUIRRELVM v,SQInteger minsize);
|
||||||
SQUIRREL_API SQRESULT sq_getfunctioninfo(HSQUIRRELVM v,SQInteger idx,SQFunctionInfo *fi);
|
SQRESULT sq_getfunctioninfo(HSQUIRRELVM v,SQInteger idx,SQFunctionInfo *fi);
|
||||||
SQUIRREL_API SQRESULT sq_getclosureinfo(HSQUIRRELVM v,SQInteger idx,SQUnsignedInteger *nparams,SQUnsignedInteger *nfreevars);
|
SQRESULT sq_getclosureinfo(HSQUIRRELVM v,SQInteger idx,SQUnsignedInteger *nparams,SQUnsignedInteger *nfreevars);
|
||||||
SQUIRREL_API SQRESULT sq_setnativeclosurename(HSQUIRRELVM v,SQInteger idx,const SQChar *name);
|
SQRESULT sq_setnativeclosurename(HSQUIRRELVM v,SQInteger idx,const SQChar *name);
|
||||||
SQUIRREL_API SQRESULT sq_setinstanceup(HSQUIRRELVM v, SQInteger idx, SQUserPointer p);
|
SQRESULT sq_setinstanceup(HSQUIRRELVM v, SQInteger idx, SQUserPointer p);
|
||||||
SQUIRREL_API SQRESULT sq_getinstanceup(HSQUIRRELVM v, SQInteger idx, SQUserPointer *p,SQUserPointer typetag);
|
SQRESULT sq_getinstanceup(HSQUIRRELVM v, SQInteger idx, SQUserPointer *p,SQUserPointer typetag);
|
||||||
SQUIRREL_API SQRESULT sq_setclassudsize(HSQUIRRELVM v, SQInteger idx, SQInteger udsize);
|
SQRESULT sq_setclassudsize(HSQUIRRELVM v, SQInteger idx, SQInteger udsize);
|
||||||
SQUIRREL_API SQRESULT sq_newclass(HSQUIRRELVM v,SQBool hasbase);
|
SQRESULT sq_newclass(HSQUIRRELVM v,SQBool hasbase);
|
||||||
SQUIRREL_API SQRESULT sq_createinstance(HSQUIRRELVM v,SQInteger idx);
|
SQRESULT sq_createinstance(HSQUIRRELVM v,SQInteger idx);
|
||||||
SQUIRREL_API SQRESULT sq_setattributes(HSQUIRRELVM v,SQInteger idx);
|
SQRESULT sq_setattributes(HSQUIRRELVM v,SQInteger idx);
|
||||||
SQUIRREL_API SQRESULT sq_getattributes(HSQUIRRELVM v,SQInteger idx);
|
SQRESULT sq_getattributes(HSQUIRRELVM v,SQInteger idx);
|
||||||
SQUIRREL_API SQRESULT sq_getclass(HSQUIRRELVM v,SQInteger idx);
|
SQRESULT sq_getclass(HSQUIRRELVM v,SQInteger idx);
|
||||||
SQUIRREL_API void sq_weakref(HSQUIRRELVM v,SQInteger idx);
|
void sq_weakref(HSQUIRRELVM v,SQInteger idx);
|
||||||
SQUIRREL_API SQRESULT sq_getdefaultdelegate(HSQUIRRELVM v,SQObjectType t);
|
SQRESULT sq_getdefaultdelegate(HSQUIRRELVM v,SQObjectType t);
|
||||||
|
|
||||||
/*object manipulation*/
|
/*object manipulation*/
|
||||||
SQUIRREL_API void sq_pushroottable(HSQUIRRELVM v);
|
void sq_pushroottable(HSQUIRRELVM v);
|
||||||
SQUIRREL_API void sq_pushregistrytable(HSQUIRRELVM v);
|
void sq_pushregistrytable(HSQUIRRELVM v);
|
||||||
SQUIRREL_API void sq_pushconsttable(HSQUIRRELVM v);
|
void sq_pushconsttable(HSQUIRRELVM v);
|
||||||
SQUIRREL_API SQRESULT sq_setroottable(HSQUIRRELVM v);
|
SQRESULT sq_setroottable(HSQUIRRELVM v);
|
||||||
SQUIRREL_API SQRESULT sq_setconsttable(HSQUIRRELVM v);
|
SQRESULT sq_setconsttable(HSQUIRRELVM v);
|
||||||
SQUIRREL_API SQRESULT sq_newslot(HSQUIRRELVM v, SQInteger idx, SQBool bstatic);
|
SQRESULT sq_newslot(HSQUIRRELVM v, SQInteger idx, SQBool bstatic);
|
||||||
SQUIRREL_API SQRESULT sq_deleteslot(HSQUIRRELVM v,SQInteger idx,SQBool pushval);
|
SQRESULT sq_deleteslot(HSQUIRRELVM v,SQInteger idx,SQBool pushval);
|
||||||
SQUIRREL_API SQRESULT sq_set(HSQUIRRELVM v,SQInteger idx);
|
SQRESULT sq_set(HSQUIRRELVM v,SQInteger idx);
|
||||||
SQUIRREL_API SQRESULT sq_get(HSQUIRRELVM v,SQInteger idx);
|
SQRESULT sq_get(HSQUIRRELVM v,SQInteger idx);
|
||||||
SQUIRREL_API SQRESULT sq_rawget(HSQUIRRELVM v,SQInteger idx);
|
SQRESULT sq_rawget(HSQUIRRELVM v,SQInteger idx);
|
||||||
SQUIRREL_API SQRESULT sq_rawset(HSQUIRRELVM v,SQInteger idx);
|
SQRESULT sq_rawset(HSQUIRRELVM v,SQInteger idx);
|
||||||
SQUIRREL_API SQRESULT sq_rawdeleteslot(HSQUIRRELVM v,SQInteger idx,SQBool pushval);
|
SQRESULT sq_rawdeleteslot(HSQUIRRELVM v,SQInteger idx,SQBool pushval);
|
||||||
SQUIRREL_API SQRESULT sq_arrayappend(HSQUIRRELVM v,SQInteger idx);
|
SQRESULT sq_arrayappend(HSQUIRRELVM v,SQInteger idx);
|
||||||
SQUIRREL_API SQRESULT sq_arraypop(HSQUIRRELVM v,SQInteger idx,SQBool pushval);
|
SQRESULT sq_arraypop(HSQUIRRELVM v,SQInteger idx,SQBool pushval);
|
||||||
SQUIRREL_API SQRESULT sq_arrayresize(HSQUIRRELVM v,SQInteger idx,SQInteger newsize);
|
SQRESULT sq_arrayresize(HSQUIRRELVM v,SQInteger idx,SQInteger newsize);
|
||||||
SQUIRREL_API SQRESULT sq_arrayreverse(HSQUIRRELVM v,SQInteger idx);
|
SQRESULT sq_arrayreverse(HSQUIRRELVM v,SQInteger idx);
|
||||||
SQUIRREL_API SQRESULT sq_arrayremove(HSQUIRRELVM v,SQInteger idx,SQInteger itemidx);
|
SQRESULT sq_arrayremove(HSQUIRRELVM v,SQInteger idx,SQInteger itemidx);
|
||||||
SQUIRREL_API SQRESULT sq_arrayinsert(HSQUIRRELVM v,SQInteger idx,SQInteger destpos);
|
SQRESULT sq_arrayinsert(HSQUIRRELVM v,SQInteger idx,SQInteger destpos);
|
||||||
SQUIRREL_API SQRESULT sq_setdelegate(HSQUIRRELVM v,SQInteger idx);
|
SQRESULT sq_setdelegate(HSQUIRRELVM v,SQInteger idx);
|
||||||
SQUIRREL_API SQRESULT sq_getdelegate(HSQUIRRELVM v,SQInteger idx);
|
SQRESULT sq_getdelegate(HSQUIRRELVM v,SQInteger idx);
|
||||||
SQUIRREL_API SQRESULT sq_clone(HSQUIRRELVM v,SQInteger idx);
|
SQRESULT sq_clone(HSQUIRRELVM v,SQInteger idx);
|
||||||
SQUIRREL_API SQRESULT sq_setfreevariable(HSQUIRRELVM v,SQInteger idx,SQUnsignedInteger nval);
|
SQRESULT sq_setfreevariable(HSQUIRRELVM v,SQInteger idx,SQUnsignedInteger nval);
|
||||||
SQUIRREL_API SQRESULT sq_next(HSQUIRRELVM v,SQInteger idx);
|
SQRESULT sq_next(HSQUIRRELVM v,SQInteger idx);
|
||||||
SQUIRREL_API SQRESULT sq_getweakrefval(HSQUIRRELVM v,SQInteger idx);
|
SQRESULT sq_getweakrefval(HSQUIRRELVM v,SQInteger idx);
|
||||||
SQUIRREL_API SQRESULT sq_clear(HSQUIRRELVM v,SQInteger idx);
|
SQRESULT sq_clear(HSQUIRRELVM v,SQInteger idx);
|
||||||
|
|
||||||
/*calls*/
|
/*calls*/
|
||||||
SQUIRREL_API SQRESULT sq_call(HSQUIRRELVM v,SQInteger params,SQBool retval,SQBool raiseerror, int suspend = -1);
|
SQRESULT sq_call(HSQUIRRELVM v,SQInteger params,SQBool retval,SQBool raiseerror, int suspend = -1);
|
||||||
SQUIRREL_API SQRESULT sq_resume(HSQUIRRELVM v,SQBool retval,SQBool raiseerror);
|
SQRESULT sq_resume(HSQUIRRELVM v,SQBool retval,SQBool raiseerror);
|
||||||
SQUIRREL_API const SQChar *sq_getlocal(HSQUIRRELVM v,SQUnsignedInteger level,SQUnsignedInteger idx);
|
const SQChar *sq_getlocal(HSQUIRRELVM v,SQUnsignedInteger level,SQUnsignedInteger idx);
|
||||||
SQUIRREL_API const SQChar *sq_getfreevariable(HSQUIRRELVM v,SQInteger idx,SQUnsignedInteger nval);
|
const SQChar *sq_getfreevariable(HSQUIRRELVM v,SQInteger idx,SQUnsignedInteger nval);
|
||||||
SQUIRREL_API SQRESULT sq_throwerror(HSQUIRRELVM v,const SQChar *err);
|
SQRESULT sq_throwerror(HSQUIRRELVM v,const SQChar *err);
|
||||||
SQUIRREL_API void sq_reseterror(HSQUIRRELVM v);
|
void sq_reseterror(HSQUIRRELVM v);
|
||||||
SQUIRREL_API void sq_getlasterror(HSQUIRRELVM v);
|
void sq_getlasterror(HSQUIRRELVM v);
|
||||||
|
|
||||||
/*raw object handling*/
|
/*raw object handling*/
|
||||||
SQUIRREL_API SQRESULT sq_getstackobj(HSQUIRRELVM v,SQInteger idx,HSQOBJECT *po);
|
SQRESULT sq_getstackobj(HSQUIRRELVM v,SQInteger idx,HSQOBJECT *po);
|
||||||
SQUIRREL_API void sq_pushobject(HSQUIRRELVM v,HSQOBJECT obj);
|
void sq_pushobject(HSQUIRRELVM v,HSQOBJECT obj);
|
||||||
SQUIRREL_API void sq_addref(HSQUIRRELVM v,HSQOBJECT *po);
|
void sq_addref(HSQUIRRELVM v,HSQOBJECT *po);
|
||||||
SQUIRREL_API SQBool sq_release(HSQUIRRELVM v,HSQOBJECT *po);
|
SQBool sq_release(HSQUIRRELVM v,HSQOBJECT *po);
|
||||||
SQUIRREL_API void sq_resetobject(HSQOBJECT *po);
|
void sq_resetobject(HSQOBJECT *po);
|
||||||
SQUIRREL_API const SQChar *sq_objtostring(HSQOBJECT *o);
|
const SQChar *sq_objtostring(HSQOBJECT *o);
|
||||||
SQUIRREL_API SQBool sq_objtobool(HSQOBJECT *o);
|
SQBool sq_objtobool(HSQOBJECT *o);
|
||||||
SQUIRREL_API SQInteger sq_objtointeger(HSQOBJECT *o);
|
SQInteger sq_objtointeger(HSQOBJECT *o);
|
||||||
SQUIRREL_API SQFloat sq_objtofloat(HSQOBJECT *o);
|
SQFloat sq_objtofloat(HSQOBJECT *o);
|
||||||
SQUIRREL_API SQRESULT sq_getobjtypetag(HSQOBJECT *o,SQUserPointer * typetag);
|
SQRESULT sq_getobjtypetag(HSQOBJECT *o,SQUserPointer * typetag);
|
||||||
|
|
||||||
/*GC*/
|
/*GC*/
|
||||||
SQUIRREL_API SQInteger sq_collectgarbage(HSQUIRRELVM v);
|
SQInteger sq_collectgarbage(HSQUIRRELVM v);
|
||||||
|
|
||||||
/*serialization*/
|
/*serialization*/
|
||||||
SQUIRREL_API SQRESULT sq_writeclosure(HSQUIRRELVM vm,SQWRITEFUNC writef,SQUserPointer up);
|
SQRESULT sq_writeclosure(HSQUIRRELVM vm,SQWRITEFUNC writef,SQUserPointer up);
|
||||||
SQUIRREL_API SQRESULT sq_readclosure(HSQUIRRELVM vm,SQREADFUNC readf,SQUserPointer up);
|
SQRESULT sq_readclosure(HSQUIRRELVM vm,SQREADFUNC readf,SQUserPointer up);
|
||||||
|
|
||||||
/*mem allocation*/
|
/*mem allocation*/
|
||||||
SQUIRREL_API void *sq_malloc(SQUnsignedInteger size);
|
void *sq_malloc(SQUnsignedInteger size);
|
||||||
SQUIRREL_API void *sq_realloc(void* p,SQUnsignedInteger oldsize,SQUnsignedInteger newsize);
|
void *sq_realloc(void* p,SQUnsignedInteger oldsize,SQUnsignedInteger newsize);
|
||||||
SQUIRREL_API void sq_free(void *p,SQUnsignedInteger size);
|
void sq_free(void *p,SQUnsignedInteger size);
|
||||||
|
|
||||||
/*debug*/
|
/*debug*/
|
||||||
SQUIRREL_API SQRESULT sq_stackinfos(HSQUIRRELVM v,SQInteger level,SQStackInfos *si);
|
SQRESULT sq_stackinfos(HSQUIRRELVM v,SQInteger level,SQStackInfos *si);
|
||||||
SQUIRREL_API void sq_setdebughook(HSQUIRRELVM v);
|
void sq_setdebughook(HSQUIRRELVM v);
|
||||||
|
|
||||||
/*UTILITY MACRO*/
|
/*UTILITY MACRO*/
|
||||||
#define sq_isnumeric(o) ((o)._type&SQOBJECT_NUMERIC)
|
#define sq_isnumeric(o) ((o)._type&SQOBJECT_NUMERIC)
|
||||||
@@ -483,8 +368,4 @@ SQUIRREL_API void sq_setdebughook(HSQUIRRELVM v);
|
|||||||
#define SQ_FAILED(res) (res<0)
|
#define SQ_FAILED(res) (res<0)
|
||||||
#define SQ_SUCCEEDED(res) (res>=0)
|
#define SQ_SUCCEEDED(res) (res>=0)
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
} /*extern "C"*/
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /*_SQUIRREL_H_*/
|
#endif /*_SQUIRREL_H_*/
|
||||||
|
|||||||
59
src/3rdparty/squirrel/sqstdlib/sqstdaux.cpp
vendored
59
src/3rdparty/squirrel/sqstdlib/sqstdaux.cpp
vendored
@@ -1,8 +1,11 @@
|
|||||||
/* see copyright notice in squirrel.h */
|
/* see copyright notice in squirrel.h */
|
||||||
|
|
||||||
|
#include "../../../stdafx.h"
|
||||||
|
|
||||||
#include <squirrel.h>
|
#include <squirrel.h>
|
||||||
#include <sqstdaux.h>
|
#include <sqstdaux.h>
|
||||||
#include <assert.h>
|
|
||||||
#include <string.h>
|
#include "../../../safeguards.h"
|
||||||
|
|
||||||
void sqstd_printcallstack(HSQUIRRELVM v)
|
void sqstd_printcallstack(HSQUIRRELVM v)
|
||||||
{
|
{
|
||||||
@@ -16,30 +19,30 @@ void sqstd_printcallstack(HSQUIRRELVM v)
|
|||||||
SQInteger level=1; //1 is to skip this function that is level 0
|
SQInteger level=1; //1 is to skip this function that is level 0
|
||||||
const SQChar *name=0;
|
const SQChar *name=0;
|
||||||
SQInteger seq=0;
|
SQInteger seq=0;
|
||||||
pf(v,_SC("\nCALLSTACK\n"));
|
pf(v,"\nCALLSTACK\n");
|
||||||
while(SQ_SUCCEEDED(sq_stackinfos(v,level,&si)))
|
while(SQ_SUCCEEDED(sq_stackinfos(v,level,&si)))
|
||||||
{
|
{
|
||||||
const SQChar *fn=_SC("unknown");
|
const SQChar *fn="unknown";
|
||||||
const SQChar *src=_SC("unknown");
|
const SQChar *src="unknown";
|
||||||
if(si.funcname)fn=si.funcname;
|
if(si.funcname)fn=si.funcname;
|
||||||
if(si.source) {
|
if(si.source) {
|
||||||
/* We don't want to bother users with absolute paths to all AI files.
|
/* We don't want to bother users with absolute paths to all AI files.
|
||||||
* Since the path only reaches NoAI code in a formatted string we have
|
* Since the path only reaches NoAI code in a formatted string we have
|
||||||
* to strip it here. Let's hope nobody installs openttd in a subdirectory
|
* to strip it here. Let's hope nobody installs openttd in a subdirectory
|
||||||
* of a directory named /ai/. */
|
* of a directory named /ai/. */
|
||||||
src = scstrstr(si.source, _SC("\\ai\\"));
|
src = strstr(si.source, "\\ai\\");
|
||||||
if (!src) src = scstrstr(si.source, _SC("/ai/"));
|
if (!src) src = strstr(si.source, "/ai/");
|
||||||
if (src) {
|
if (src) {
|
||||||
src += 4;
|
src += 4;
|
||||||
} else {
|
} else {
|
||||||
src = si.source;
|
src = si.source;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pf(v,_SC("*FUNCTION [%s()] %s line [%d]\n"),fn,src,si.line);
|
pf(v,"*FUNCTION [%s()] %s line [%d]\n",fn,src,si.line);
|
||||||
level++;
|
level++;
|
||||||
}
|
}
|
||||||
level=0;
|
level=0;
|
||||||
pf(v,_SC("\nLOCALS\n"));
|
pf(v,"\nLOCALS\n");
|
||||||
|
|
||||||
for(level=0;level<10;level++){
|
for(level=0;level<10;level++){
|
||||||
seq=0;
|
seq=0;
|
||||||
@@ -49,56 +52,56 @@ void sqstd_printcallstack(HSQUIRRELVM v)
|
|||||||
switch(sq_gettype(v,-1))
|
switch(sq_gettype(v,-1))
|
||||||
{
|
{
|
||||||
case OT_NULL:
|
case OT_NULL:
|
||||||
pf(v,_SC("[%s] NULL\n"),name);
|
pf(v,"[%s] NULL\n",name);
|
||||||
break;
|
break;
|
||||||
case OT_INTEGER:
|
case OT_INTEGER:
|
||||||
sq_getinteger(v,-1,&i);
|
sq_getinteger(v,-1,&i);
|
||||||
pf(v,_SC("[%s] %d\n"),name,i);
|
pf(v,"[%s] %d\n",name,i);
|
||||||
break;
|
break;
|
||||||
case OT_FLOAT:
|
case OT_FLOAT:
|
||||||
sq_getfloat(v,-1,&f);
|
sq_getfloat(v,-1,&f);
|
||||||
pf(v,_SC("[%s] %.14g\n"),name,f);
|
pf(v,"[%s] %.14g\n",name,f);
|
||||||
break;
|
break;
|
||||||
case OT_USERPOINTER:
|
case OT_USERPOINTER:
|
||||||
pf(v,_SC("[%s] USERPOINTER\n"),name);
|
pf(v,"[%s] USERPOINTER\n",name);
|
||||||
break;
|
break;
|
||||||
case OT_STRING:
|
case OT_STRING:
|
||||||
sq_getstring(v,-1,&s);
|
sq_getstring(v,-1,&s);
|
||||||
pf(v,_SC("[%s] \"%s\"\n"),name,s);
|
pf(v,"[%s] \"%s\"\n",name,s);
|
||||||
break;
|
break;
|
||||||
case OT_TABLE:
|
case OT_TABLE:
|
||||||
pf(v,_SC("[%s] TABLE\n"),name);
|
pf(v,"[%s] TABLE\n",name);
|
||||||
break;
|
break;
|
||||||
case OT_ARRAY:
|
case OT_ARRAY:
|
||||||
pf(v,_SC("[%s] ARRAY\n"),name);
|
pf(v,"[%s] ARRAY\n",name);
|
||||||
break;
|
break;
|
||||||
case OT_CLOSURE:
|
case OT_CLOSURE:
|
||||||
pf(v,_SC("[%s] CLOSURE\n"),name);
|
pf(v,"[%s] CLOSURE\n",name);
|
||||||
break;
|
break;
|
||||||
case OT_NATIVECLOSURE:
|
case OT_NATIVECLOSURE:
|
||||||
pf(v,_SC("[%s] NATIVECLOSURE\n"),name);
|
pf(v,"[%s] NATIVECLOSURE\n",name);
|
||||||
break;
|
break;
|
||||||
case OT_GENERATOR:
|
case OT_GENERATOR:
|
||||||
pf(v,_SC("[%s] GENERATOR\n"),name);
|
pf(v,"[%s] GENERATOR\n",name);
|
||||||
break;
|
break;
|
||||||
case OT_USERDATA:
|
case OT_USERDATA:
|
||||||
pf(v,_SC("[%s] USERDATA\n"),name);
|
pf(v,"[%s] USERDATA\n",name);
|
||||||
break;
|
break;
|
||||||
case OT_THREAD:
|
case OT_THREAD:
|
||||||
pf(v,_SC("[%s] THREAD\n"),name);
|
pf(v,"[%s] THREAD\n",name);
|
||||||
break;
|
break;
|
||||||
case OT_CLASS:
|
case OT_CLASS:
|
||||||
pf(v,_SC("[%s] CLASS\n"),name);
|
pf(v,"[%s] CLASS\n",name);
|
||||||
break;
|
break;
|
||||||
case OT_INSTANCE:
|
case OT_INSTANCE:
|
||||||
pf(v,_SC("[%s] INSTANCE\n"),name);
|
pf(v,"[%s] INSTANCE\n",name);
|
||||||
break;
|
break;
|
||||||
case OT_WEAKREF:
|
case OT_WEAKREF:
|
||||||
pf(v,_SC("[%s] WEAKREF\n"),name);
|
pf(v,"[%s] WEAKREF\n",name);
|
||||||
break;
|
break;
|
||||||
case OT_BOOL:{
|
case OT_BOOL:{
|
||||||
sq_getbool(v,-1,&b);
|
sq_getbool(v,-1,&b);
|
||||||
pf(v,_SC("[%s] %s\n"),name,b?_SC("true"):_SC("false"));
|
pf(v,"[%s] %s\n",name,b?"true":"false");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default: assert(0); break;
|
default: assert(0); break;
|
||||||
@@ -116,10 +119,10 @@ static SQInteger _sqstd_aux_printerror(HSQUIRRELVM v)
|
|||||||
const SQChar *sErr = 0;
|
const SQChar *sErr = 0;
|
||||||
if(sq_gettop(v)>=1) {
|
if(sq_gettop(v)>=1) {
|
||||||
if(SQ_SUCCEEDED(sq_getstring(v,2,&sErr))) {
|
if(SQ_SUCCEEDED(sq_getstring(v,2,&sErr))) {
|
||||||
pf(v,_SC("\nAN ERROR HAS OCCURED [%s]\n"),sErr);
|
pf(v,"\nAN ERROR HAS OCCURED [%s]\n",sErr);
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
pf(v,_SC("\nAN ERROR HAS OCCURED [unknown]\n"));
|
pf(v,"\nAN ERROR HAS OCCURED [unknown]\n");
|
||||||
}
|
}
|
||||||
sqstd_printcallstack(v);
|
sqstd_printcallstack(v);
|
||||||
}
|
}
|
||||||
@@ -131,7 +134,7 @@ void _sqstd_compiler_error(HSQUIRRELVM v,const SQChar *sErr,const SQChar *sSourc
|
|||||||
{
|
{
|
||||||
SQPRINTFUNCTION pf = sq_getprintfunc(v);
|
SQPRINTFUNCTION pf = sq_getprintfunc(v);
|
||||||
if(pf) {
|
if(pf) {
|
||||||
pf(v,_SC("%s line = (%d) column = (%d) : error %s\n"),sSource,line,column,sErr);
|
pf(v,"%s line = (%d) column = (%d) : error %s\n",sSource,line,column,sErr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
48
src/3rdparty/squirrel/sqstdlib/sqstdmath.cpp
vendored
48
src/3rdparty/squirrel/sqstdlib/sqstdmath.cpp
vendored
@@ -1,9 +1,13 @@
|
|||||||
/* see copyright notice in squirrel.h */
|
/* see copyright notice in squirrel.h */
|
||||||
|
|
||||||
|
#include "../../../stdafx.h"
|
||||||
|
|
||||||
#include <squirrel.h>
|
#include <squirrel.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <stdlib.h>
|
|
||||||
#include <sqstdmath.h>
|
#include <sqstdmath.h>
|
||||||
|
|
||||||
|
#include "../../../safeguards.h"
|
||||||
|
|
||||||
#define SINGLE_ARG_FUNC(_funcname, num_ops) static SQInteger math_##_funcname(HSQUIRRELVM v){ \
|
#define SINGLE_ARG_FUNC(_funcname, num_ops) static SQInteger math_##_funcname(HSQUIRRELVM v){ \
|
||||||
SQFloat f; \
|
SQFloat f; \
|
||||||
sq_decreaseops(v,num_ops); \
|
sq_decreaseops(v,num_ops); \
|
||||||
@@ -26,7 +30,7 @@ static SQInteger math_srand(HSQUIRRELVM v)
|
|||||||
{
|
{
|
||||||
SQInteger i;
|
SQInteger i;
|
||||||
if(SQ_FAILED(sq_getinteger(v,2,&i)))
|
if(SQ_FAILED(sq_getinteger(v,2,&i)))
|
||||||
return sq_throwerror(v,_SC("invalid param"));
|
return sq_throwerror(v,"invalid param");
|
||||||
srand((unsigned int)i);
|
srand((unsigned int)i);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -62,28 +66,28 @@ SINGLE_ARG_FUNC(floor, 1)
|
|||||||
SINGLE_ARG_FUNC(ceil, 1)
|
SINGLE_ARG_FUNC(ceil, 1)
|
||||||
SINGLE_ARG_FUNC(exp, 100)
|
SINGLE_ARG_FUNC(exp, 100)
|
||||||
|
|
||||||
#define _DECL_FUNC(name,nparams,tycheck) {_SC(#name),math_##name,nparams,tycheck}
|
#define _DECL_FUNC(name,nparams,tycheck) {#name,math_##name,nparams,tycheck}
|
||||||
static SQRegFunction mathlib_funcs[] = {
|
static SQRegFunction mathlib_funcs[] = {
|
||||||
_DECL_FUNC(sqrt,2,_SC(".n")),
|
_DECL_FUNC(sqrt,2,".n"),
|
||||||
_DECL_FUNC(sin,2,_SC(".n")),
|
_DECL_FUNC(sin,2,".n"),
|
||||||
_DECL_FUNC(cos,2,_SC(".n")),
|
_DECL_FUNC(cos,2,".n"),
|
||||||
_DECL_FUNC(asin,2,_SC(".n")),
|
_DECL_FUNC(asin,2,".n"),
|
||||||
_DECL_FUNC(acos,2,_SC(".n")),
|
_DECL_FUNC(acos,2,".n"),
|
||||||
_DECL_FUNC(log,2,_SC(".n")),
|
_DECL_FUNC(log,2,".n"),
|
||||||
_DECL_FUNC(log10,2,_SC(".n")),
|
_DECL_FUNC(log10,2,".n"),
|
||||||
_DECL_FUNC(tan,2,_SC(".n")),
|
_DECL_FUNC(tan,2,".n"),
|
||||||
_DECL_FUNC(atan,2,_SC(".n")),
|
_DECL_FUNC(atan,2,".n"),
|
||||||
_DECL_FUNC(atan2,3,_SC(".nn")),
|
_DECL_FUNC(atan2,3,".nn"),
|
||||||
_DECL_FUNC(pow,3,_SC(".nn")),
|
_DECL_FUNC(pow,3,".nn"),
|
||||||
_DECL_FUNC(floor,2,_SC(".n")),
|
_DECL_FUNC(floor,2,".n"),
|
||||||
_DECL_FUNC(ceil,2,_SC(".n")),
|
_DECL_FUNC(ceil,2,".n"),
|
||||||
_DECL_FUNC(exp,2,_SC(".n")),
|
_DECL_FUNC(exp,2,".n"),
|
||||||
#ifdef EXPORT_DEFAULT_SQUIRREL_FUNCTIONS
|
#ifdef EXPORT_DEFAULT_SQUIRREL_FUNCTIONS
|
||||||
_DECL_FUNC(srand,2,_SC(".n")),
|
_DECL_FUNC(srand,2,".n"),
|
||||||
_DECL_FUNC(rand,1,NULL),
|
_DECL_FUNC(rand,1,NULL),
|
||||||
#endif /* EXPORT_DEFAULT_SQUIRREL_FUNCTIONS */
|
#endif /* EXPORT_DEFAULT_SQUIRREL_FUNCTIONS */
|
||||||
_DECL_FUNC(fabs,2,_SC(".n")),
|
_DECL_FUNC(fabs,2,".n"),
|
||||||
_DECL_FUNC(abs,2,_SC(".n")),
|
_DECL_FUNC(abs,2,".n"),
|
||||||
{0,0,0,0},
|
{0,0,0,0},
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -103,11 +107,11 @@ SQRESULT sqstd_register_mathlib(HSQUIRRELVM v)
|
|||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
#ifdef EXPORT_DEFAULT_SQUIRREL_FUNCTIONS
|
#ifdef EXPORT_DEFAULT_SQUIRREL_FUNCTIONS
|
||||||
sq_pushstring(v,_SC("RAND_MAX"),-1);
|
sq_pushstring(v,"RAND_MAX",-1);
|
||||||
sq_pushinteger(v,RAND_MAX);
|
sq_pushinteger(v,RAND_MAX);
|
||||||
sq_createslot(v,-3);
|
sq_createslot(v,-3);
|
||||||
#endif /* EXPORT_DEFAULT_SQUIRREL_FUNCTIONS */
|
#endif /* EXPORT_DEFAULT_SQUIRREL_FUNCTIONS */
|
||||||
sq_pushstring(v,_SC("PI"),-1);
|
sq_pushstring(v,"PI",-1);
|
||||||
sq_pushfloat(v,(SQFloat)M_PI);
|
sq_pushfloat(v,(SQFloat)M_PI);
|
||||||
sq_createslot(v,-3);
|
sq_createslot(v,-3);
|
||||||
return SQ_OK;
|
return SQ_OK;
|
||||||
|
|||||||
57
src/3rdparty/squirrel/sqstdlib/sqstdrex.cpp
vendored
57
src/3rdparty/squirrel/sqstdlib/sqstdrex.cpp
vendored
@@ -1,7 +1,5 @@
|
|||||||
/* see copyright notice in squirrel.h */
|
/* see copyright notice in squirrel.h */
|
||||||
#include <squirrel.h>
|
#include <squirrel.h>
|
||||||
#include <string.h>
|
|
||||||
#include <ctype.h>
|
|
||||||
#include <exception>
|
#include <exception>
|
||||||
#include "sqstdstring.h"
|
#include "sqstdstring.h"
|
||||||
|
|
||||||
@@ -12,14 +10,13 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
static const SQChar *g_nnames[] =
|
static const SQChar *g_nnames[] =
|
||||||
{
|
{
|
||||||
_SC("NONE"),_SC("OP_GREEDY"), _SC("OP_OR"),
|
"NONE","OP_GREEDY", "OP_OR",
|
||||||
_SC("OP_EXPR"),_SC("OP_NOCAPEXPR"),_SC("OP_DOT"), _SC("OP_CLASS"),
|
"OP_EXPR","OP_NOCAPEXPR","OP_DOT", "OP_CLASS",
|
||||||
_SC("OP_CCLASS"),_SC("OP_NCLASS"),_SC("OP_RANGE"),_SC("OP_CHAR"),
|
"OP_CCLASS","OP_NCLASS","OP_RANGE","OP_CHAR",
|
||||||
_SC("OP_EOL"),_SC("OP_BOL"),_SC("OP_WB")
|
"OP_EOL","OP_BOL","OP_WB"
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -99,7 +96,7 @@ static void sqstd_rex_error(SQRex *exp,const SQChar *error)
|
|||||||
|
|
||||||
static void sqstd_rex_expect(SQRex *exp, SQChar n){
|
static void sqstd_rex_expect(SQRex *exp, SQChar n){
|
||||||
if((*exp->_p) != n)
|
if((*exp->_p) != n)
|
||||||
sqstd_rex_error(exp, _SC("expected paren"));
|
sqstd_rex_error(exp, "expected paren");
|
||||||
exp->_p++;
|
exp->_p++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -115,7 +112,7 @@ static SQChar sqstd_rex_escapechar(SQRex *exp)
|
|||||||
case 'f': exp->_p++; return '\f';
|
case 'f': exp->_p++; return '\f';
|
||||||
default: return (*exp->_p++);
|
default: return (*exp->_p++);
|
||||||
}
|
}
|
||||||
} else if(!scisprint(*exp->_p)) sqstd_rex_error(exp,_SC("letter expected"));
|
} else if(!scisprint(*exp->_p)) sqstd_rex_error(exp,"letter expected");
|
||||||
return (*exp->_p++);
|
return (*exp->_p++);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -159,7 +156,7 @@ static SQInteger sqstd_rex_charnode(SQRex *exp,SQBool isclass)
|
|||||||
}
|
}
|
||||||
else if(!scisprint(*exp->_p)) {
|
else if(!scisprint(*exp->_p)) {
|
||||||
|
|
||||||
sqstd_rex_error(exp,_SC("letter expected"));
|
sqstd_rex_error(exp,"letter expected");
|
||||||
}
|
}
|
||||||
t = *exp->_p; exp->_p++;
|
t = *exp->_p; exp->_p++;
|
||||||
return sqstd_rex_newnode(exp,t);
|
return sqstd_rex_newnode(exp,t);
|
||||||
@@ -173,15 +170,15 @@ static SQInteger sqstd_rex_class(SQRex *exp)
|
|||||||
exp->_p++;
|
exp->_p++;
|
||||||
}else ret = sqstd_rex_newnode(exp,OP_CLASS);
|
}else ret = sqstd_rex_newnode(exp,OP_CLASS);
|
||||||
|
|
||||||
if(*exp->_p == ']') sqstd_rex_error(exp,_SC("empty class"));
|
if(*exp->_p == ']') sqstd_rex_error(exp,"empty class");
|
||||||
chain = ret;
|
chain = ret;
|
||||||
while(*exp->_p != ']' && exp->_p != exp->_eol) {
|
while(*exp->_p != ']' && exp->_p != exp->_eol) {
|
||||||
if(*exp->_p == '-' && first != -1){
|
if(*exp->_p == '-' && first != -1){
|
||||||
SQInteger r;
|
SQInteger r;
|
||||||
if(*exp->_p++ == ']') sqstd_rex_error(exp,_SC("unfinished range"));
|
if(*exp->_p++ == ']') sqstd_rex_error(exp,"unfinished range");
|
||||||
r = sqstd_rex_newnode(exp,OP_RANGE);
|
r = sqstd_rex_newnode(exp,OP_RANGE);
|
||||||
if(exp->_nodes[first].type>*exp->_p) sqstd_rex_error(exp,_SC("invalid range"));
|
if(exp->_nodes[first].type>*exp->_p) sqstd_rex_error(exp,"invalid range");
|
||||||
if(exp->_nodes[first].type == OP_CCLASS) sqstd_rex_error(exp,_SC("cannot use character classes in ranges"));
|
if(exp->_nodes[first].type == OP_CCLASS) sqstd_rex_error(exp,"cannot use character classes in ranges");
|
||||||
exp->_nodes[r].left = exp->_nodes[first].type;
|
exp->_nodes[r].left = exp->_nodes[first].type;
|
||||||
SQInteger t = sqstd_rex_escapechar(exp);
|
SQInteger t = sqstd_rex_escapechar(exp);
|
||||||
exp->_nodes[r].right = t;
|
exp->_nodes[r].right = t;
|
||||||
@@ -220,7 +217,7 @@ static SQInteger sqstd_rex_parsenumber(SQRex *exp)
|
|||||||
exp->_p++;
|
exp->_p++;
|
||||||
while(isdigit(*exp->_p)) {
|
while(isdigit(*exp->_p)) {
|
||||||
ret = ret*10+(*exp->_p++-'0');
|
ret = ret*10+(*exp->_p++-'0');
|
||||||
if(positions==1000000000) sqstd_rex_error(exp,_SC("overflow in numeric constant"));
|
if(positions==1000000000) sqstd_rex_error(exp,"overflow in numeric constant");
|
||||||
positions *= 10;
|
positions *= 10;
|
||||||
};
|
};
|
||||||
return ret;
|
return ret;
|
||||||
@@ -238,7 +235,7 @@ static SQInteger sqstd_rex_element(SQRex *exp)
|
|||||||
|
|
||||||
if(*exp->_p =='?') {
|
if(*exp->_p =='?') {
|
||||||
exp->_p++;
|
exp->_p++;
|
||||||
sqstd_rex_expect(exp,_SC(':'));
|
sqstd_rex_expect(exp,':');
|
||||||
expr = sqstd_rex_newnode(exp,OP_NOCAPEXPR);
|
expr = sqstd_rex_newnode(exp,OP_NOCAPEXPR);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -246,13 +243,13 @@ static SQInteger sqstd_rex_element(SQRex *exp)
|
|||||||
SQInteger newn = sqstd_rex_list(exp);
|
SQInteger newn = sqstd_rex_list(exp);
|
||||||
exp->_nodes[expr].left = newn;
|
exp->_nodes[expr].left = newn;
|
||||||
ret = expr;
|
ret = expr;
|
||||||
sqstd_rex_expect(exp,_SC(')'));
|
sqstd_rex_expect(exp,')');
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case '[':
|
case '[':
|
||||||
exp->_p++;
|
exp->_p++;
|
||||||
ret = sqstd_rex_class(exp);
|
ret = sqstd_rex_class(exp);
|
||||||
sqstd_rex_expect(exp,_SC(']'));
|
sqstd_rex_expect(exp,']');
|
||||||
break;
|
break;
|
||||||
case SQREX_SYMBOL_END_OF_STRING: exp->_p++; ret = sqstd_rex_newnode(exp,OP_EOL);break;
|
case SQREX_SYMBOL_END_OF_STRING: exp->_p++; ret = sqstd_rex_newnode(exp,OP_EOL);break;
|
||||||
case SQREX_SYMBOL_ANY_CHAR: exp->_p++; ret = sqstd_rex_newnode(exp,OP_DOT);break;
|
case SQREX_SYMBOL_ANY_CHAR: exp->_p++; ret = sqstd_rex_newnode(exp,OP_DOT);break;
|
||||||
@@ -271,7 +268,7 @@ static SQInteger sqstd_rex_element(SQRex *exp)
|
|||||||
case SQREX_SYMBOL_GREEDY_ZERO_OR_ONE: p0 = 0; p1 = 1; exp->_p++; isgreedy = SQTrue; break;
|
case SQREX_SYMBOL_GREEDY_ZERO_OR_ONE: p0 = 0; p1 = 1; exp->_p++; isgreedy = SQTrue; break;
|
||||||
case '{':
|
case '{':
|
||||||
exp->_p++;
|
exp->_p++;
|
||||||
if(!isdigit(*exp->_p)) sqstd_rex_error(exp,_SC("number expected"));
|
if(!isdigit(*exp->_p)) sqstd_rex_error(exp,"number expected");
|
||||||
p0 = (unsigned short)sqstd_rex_parsenumber(exp);
|
p0 = (unsigned short)sqstd_rex_parsenumber(exp);
|
||||||
/*******************************/
|
/*******************************/
|
||||||
switch(*exp->_p) {
|
switch(*exp->_p) {
|
||||||
@@ -284,10 +281,10 @@ static SQInteger sqstd_rex_element(SQRex *exp)
|
|||||||
if(isdigit(*exp->_p)){
|
if(isdigit(*exp->_p)){
|
||||||
p1 = (unsigned short)sqstd_rex_parsenumber(exp);
|
p1 = (unsigned short)sqstd_rex_parsenumber(exp);
|
||||||
}
|
}
|
||||||
sqstd_rex_expect(exp,_SC('}'));
|
sqstd_rex_expect(exp,'}');
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
sqstd_rex_error(exp,_SC(", or } expected"));
|
sqstd_rex_error(exp,", or } expected");
|
||||||
}
|
}
|
||||||
/*******************************/
|
/*******************************/
|
||||||
isgreedy = SQTrue;
|
isgreedy = SQTrue;
|
||||||
@@ -526,7 +523,7 @@ SQRex *sqstd_rex_compile(const SQChar *pattern,const SQChar **error)
|
|||||||
SQRex *exp = (SQRex *)sq_malloc(sizeof(SQRex));
|
SQRex *exp = (SQRex *)sq_malloc(sizeof(SQRex));
|
||||||
exp->_eol = exp->_bol = NULL;
|
exp->_eol = exp->_bol = NULL;
|
||||||
exp->_p = pattern;
|
exp->_p = pattern;
|
||||||
exp->_nallocated = (SQInteger)scstrlen(pattern) * sizeof(SQChar);
|
exp->_nallocated = (SQInteger)strlen(pattern) * sizeof(SQChar);
|
||||||
exp->_nodes = (SQRexNode *)sq_malloc(exp->_nallocated * sizeof(SQRexNode));
|
exp->_nodes = (SQRexNode *)sq_malloc(exp->_nallocated * sizeof(SQRexNode));
|
||||||
exp->_nsize = 0;
|
exp->_nsize = 0;
|
||||||
exp->_matches = 0;
|
exp->_matches = 0;
|
||||||
@@ -537,23 +534,23 @@ SQRex *sqstd_rex_compile(const SQChar *pattern,const SQChar **error)
|
|||||||
SQInteger res = sqstd_rex_list(exp);
|
SQInteger res = sqstd_rex_list(exp);
|
||||||
exp->_nodes[exp->_first].left = res;
|
exp->_nodes[exp->_first].left = res;
|
||||||
if(*exp->_p!='\0')
|
if(*exp->_p!='\0')
|
||||||
sqstd_rex_error(exp,_SC("unexpected character"));
|
sqstd_rex_error(exp,"unexpected character");
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
{
|
{
|
||||||
SQInteger nsize,i;
|
SQInteger nsize,i;
|
||||||
SQRexNode *t;
|
SQRexNode *t;
|
||||||
nsize = exp->_nsize;
|
nsize = exp->_nsize;
|
||||||
t = &exp->_nodes[0];
|
t = &exp->_nodes[0];
|
||||||
scprintf(_SC("\n"));
|
printf("\n");
|
||||||
/* XXX -- The (int) casts are needed to silent warnings on 64bit systems (SQInteger is 64bit, %d assumes 32bit, (int) is 32bit) */
|
/* XXX -- The (int) casts are needed to silent warnings on 64bit systems (SQInteger is 64bit, %d assumes 32bit, (int) is 32bit) */
|
||||||
for(i = 0;i < nsize; i++) {
|
for(i = 0;i < nsize; i++) {
|
||||||
if(exp->_nodes[i].type>MAX_CHAR)
|
if(exp->_nodes[i].type>MAX_CHAR)
|
||||||
scprintf(_SC("[%02d] %10s "),(int)i,g_nnames[exp->_nodes[i].type-MAX_CHAR]);
|
printf("[%02d] %10s ",(int)i,g_nnames[exp->_nodes[i].type-MAX_CHAR]);
|
||||||
else
|
else
|
||||||
scprintf(_SC("[%02d] %10c "),(int)i,exp->_nodes[i].type);
|
printf("[%02d] %10c ",(int)i,exp->_nodes[i].type);
|
||||||
scprintf(_SC("left %02d right %02d next %02d\n"),(int)exp->_nodes[i].left,(int)exp->_nodes[i].right,(int)exp->_nodes[i].next);
|
printf("left %02d right %02d next %02d\n",(int)exp->_nodes[i].left,(int)exp->_nodes[i].right,(int)exp->_nodes[i].next);
|
||||||
}
|
}
|
||||||
scprintf(_SC("\n"));
|
printf("\n");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
exp->_matches = (SQRexMatch *) sq_malloc(exp->_nsubexpr * sizeof(SQRexMatch));
|
exp->_matches = (SQRexMatch *) sq_malloc(exp->_nsubexpr * sizeof(SQRexMatch));
|
||||||
@@ -579,7 +576,7 @@ SQBool sqstd_rex_match(SQRex* exp,const SQChar* text)
|
|||||||
{
|
{
|
||||||
const SQChar* res = NULL;
|
const SQChar* res = NULL;
|
||||||
exp->_bol = text;
|
exp->_bol = text;
|
||||||
exp->_eol = text + scstrlen(text);
|
exp->_eol = text + strlen(text);
|
||||||
exp->_currsubexp = 0;
|
exp->_currsubexp = 0;
|
||||||
res = sqstd_rex_matchnode(exp,exp->_nodes,text,NULL);
|
res = sqstd_rex_matchnode(exp,exp->_nodes,text,NULL);
|
||||||
if(res == NULL || res != exp->_eol)
|
if(res == NULL || res != exp->_eol)
|
||||||
@@ -618,7 +615,7 @@ SQBool sqstd_rex_searchrange(SQRex* exp,const SQChar* text_begin,const SQChar* t
|
|||||||
|
|
||||||
SQBool sqstd_rex_search(SQRex* exp,const SQChar* text, const SQChar** out_begin, const SQChar** out_end)
|
SQBool sqstd_rex_search(SQRex* exp,const SQChar* text, const SQChar** out_begin, const SQChar** out_end)
|
||||||
{
|
{
|
||||||
return sqstd_rex_searchrange(exp,text,text + scstrlen(text),out_begin,out_end);
|
return sqstd_rex_searchrange(exp,text,text + strlen(text),out_begin,out_end);
|
||||||
}
|
}
|
||||||
|
|
||||||
SQInteger sqstd_rex_getsubexpcount(SQRex* exp)
|
SQInteger sqstd_rex_getsubexpcount(SQRex* exp)
|
||||||
|
|||||||
79
src/3rdparty/squirrel/sqstdlib/sqstdstring.cpp
vendored
79
src/3rdparty/squirrel/sqstdlib/sqstdstring.cpp
vendored
@@ -1,22 +1,11 @@
|
|||||||
/* see copyright notice in squirrel.h */
|
/* see copyright notice in squirrel.h */
|
||||||
#include <squirrel.h>
|
#include <squirrel.h>
|
||||||
#include <sqstdstring.h>
|
#include <sqstdstring.h>
|
||||||
#include <string.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <ctype.h>
|
|
||||||
#include <assert.h>
|
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
|
||||||
#ifdef SQUNICODE
|
|
||||||
#define scstrchr wcschr
|
|
||||||
#define scatoi _wtoi
|
|
||||||
#define scstrtok wcstok
|
|
||||||
#else
|
|
||||||
#define scstrchr strchr
|
#define scstrchr strchr
|
||||||
#define scatoi atoi
|
#define scatoi atoi
|
||||||
#define scstrtok strtok
|
#define scstrtok strtok
|
||||||
#endif
|
|
||||||
#define MAX_FORMAT_LEN 20
|
#define MAX_FORMAT_LEN 20
|
||||||
#define MAX_WFORMAT_LEN 3
|
#define MAX_WFORMAT_LEN 3
|
||||||
#define ADDITIONAL_FORMAT_SPACE (100*sizeof(SQChar))
|
#define ADDITIONAL_FORMAT_SPACE (100*sizeof(SQChar))
|
||||||
@@ -27,17 +16,17 @@ static SQInteger validate_format(HSQUIRRELVM v, SQChar *fmt, const SQChar *src,
|
|||||||
SQInteger wc = 0;
|
SQInteger wc = 0;
|
||||||
SQInteger start = n;
|
SQInteger start = n;
|
||||||
fmt[0] = '%';
|
fmt[0] = '%';
|
||||||
while (scstrchr(_SC("-+ #0"), src[n])) n++;
|
while (scstrchr("-+ #0", src[n])) n++;
|
||||||
while (scisdigit(src[n])) {
|
while (isdigit(src[n])) {
|
||||||
swidth[wc] = src[n];
|
swidth[wc] = src[n];
|
||||||
n++;
|
n++;
|
||||||
wc++;
|
wc++;
|
||||||
if(wc>=MAX_WFORMAT_LEN)
|
if(wc>=MAX_WFORMAT_LEN)
|
||||||
return sq_throwerror(v,_SC("width format too long"));
|
return sq_throwerror(v,"width format too long");
|
||||||
}
|
}
|
||||||
swidth[wc] = '\0';
|
swidth[wc] = '\0';
|
||||||
if(wc > 0) {
|
if(wc > 0) {
|
||||||
width = scatoi(swidth);
|
width = atoi(swidth);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
width = 0;
|
width = 0;
|
||||||
@@ -45,20 +34,20 @@ static SQInteger validate_format(HSQUIRRELVM v, SQChar *fmt, const SQChar *src,
|
|||||||
n++;
|
n++;
|
||||||
|
|
||||||
wc = 0;
|
wc = 0;
|
||||||
while (scisdigit(src[n])) {
|
while (isdigit(src[n])) {
|
||||||
swidth[wc] = src[n];
|
swidth[wc] = src[n];
|
||||||
n++;
|
n++;
|
||||||
wc++;
|
wc++;
|
||||||
if(wc>=MAX_WFORMAT_LEN)
|
if(wc>=MAX_WFORMAT_LEN)
|
||||||
return sq_throwerror(v,_SC("precision format too long"));
|
return sq_throwerror(v,"precision format too long");
|
||||||
}
|
}
|
||||||
swidth[wc] = '\0';
|
swidth[wc] = '\0';
|
||||||
if(wc > 0) {
|
if(wc > 0) {
|
||||||
width += scatoi(swidth);
|
width += atoi(swidth);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (n-start > MAX_FORMAT_LEN )
|
if (n-start > MAX_FORMAT_LEN )
|
||||||
return sq_throwerror(v,_SC("format too long"));
|
return sq_throwerror(v,"format too long");
|
||||||
memcpy(&fmt[1],&src[start],((n-start)+1)*sizeof(SQChar));
|
memcpy(&fmt[1],&src[start],((n-start)+1)*sizeof(SQChar));
|
||||||
fmt[(n-start)+2] = '\0';
|
fmt[(n-start)+2] = '\0';
|
||||||
return n;
|
return n;
|
||||||
@@ -75,7 +64,7 @@ static void _append_string(SQInteger &i, SQChar *dest, SQInteger allocated, cons
|
|||||||
{
|
{
|
||||||
va_list va;
|
va_list va;
|
||||||
va_start(va, fmt);
|
va_start(va, fmt);
|
||||||
i += scvsnprintf(&dest[i],allocated-i,fmt,va);
|
i += vsnprintf(&dest[i],allocated-i,fmt,va);
|
||||||
va_end(va);
|
va_end(va);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -102,7 +91,7 @@ SQRESULT sqstd_format(HSQUIRRELVM v,SQInteger nformatstringidx,SQInteger *outlen
|
|||||||
else {
|
else {
|
||||||
n++;
|
n++;
|
||||||
if( nparam > sq_gettop(v) )
|
if( nparam > sq_gettop(v) )
|
||||||
return sq_throwerror(v,_SC("not enough paramters for the given format string"));
|
return sq_throwerror(v,"not enough paramters for the given format string");
|
||||||
n = validate_format(v,fmt,format,n,w);
|
n = validate_format(v,fmt,format,n,w);
|
||||||
if(n < 0) return -1;
|
if(n < 0) return -1;
|
||||||
SQInteger addlen = 0;
|
SQInteger addlen = 0;
|
||||||
@@ -113,24 +102,24 @@ SQRESULT sqstd_format(HSQUIRRELVM v,SQInteger nformatstringidx,SQInteger *outlen
|
|||||||
switch(format[n]) {
|
switch(format[n]) {
|
||||||
case 's':
|
case 's':
|
||||||
if(SQ_FAILED(sq_getstring(v,nparam,&ts)))
|
if(SQ_FAILED(sq_getstring(v,nparam,&ts)))
|
||||||
return sq_throwerror(v,_SC("string expected for the specified format"));
|
return sq_throwerror(v,"string expected for the specified format");
|
||||||
addlen = (sq_getsize(v,nparam)*sizeof(SQChar))+((w+1)*sizeof(SQChar));
|
addlen = (sq_getsize(v,nparam)*sizeof(SQChar))+((w+1)*sizeof(SQChar));
|
||||||
valtype = 's';
|
valtype = 's';
|
||||||
break;
|
break;
|
||||||
case 'i': case 'd': case 'c':case 'o': case 'u': case 'x': case 'X':
|
case 'i': case 'd': case 'c':case 'o': case 'u': case 'x': case 'X':
|
||||||
if(SQ_FAILED(sq_getinteger(v,nparam,&ti)))
|
if(SQ_FAILED(sq_getinteger(v,nparam,&ti)))
|
||||||
return sq_throwerror(v,_SC("integer expected for the specified format"));
|
return sq_throwerror(v,"integer expected for the specified format");
|
||||||
addlen = (ADDITIONAL_FORMAT_SPACE)+((w+1)*sizeof(SQChar));
|
addlen = (ADDITIONAL_FORMAT_SPACE)+((w+1)*sizeof(SQChar));
|
||||||
valtype = 'i';
|
valtype = 'i';
|
||||||
break;
|
break;
|
||||||
case 'f': case 'g': case 'G': case 'e': case 'E':
|
case 'f': case 'g': case 'G': case 'e': case 'E':
|
||||||
if(SQ_FAILED(sq_getfloat(v,nparam,&tf)))
|
if(SQ_FAILED(sq_getfloat(v,nparam,&tf)))
|
||||||
return sq_throwerror(v,_SC("float expected for the specified format"));
|
return sq_throwerror(v,"float expected for the specified format");
|
||||||
addlen = (ADDITIONAL_FORMAT_SPACE)+((w+1)*sizeof(SQChar));
|
addlen = (ADDITIONAL_FORMAT_SPACE)+((w+1)*sizeof(SQChar));
|
||||||
valtype = 'f';
|
valtype = 'f';
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return sq_throwerror(v,_SC("invalid format"));
|
return sq_throwerror(v,"invalid format");
|
||||||
}
|
}
|
||||||
n++;
|
n++;
|
||||||
allocated += addlen + sizeof(SQChar);
|
allocated += addlen + sizeof(SQChar);
|
||||||
@@ -162,7 +151,7 @@ static SQInteger _string_format(HSQUIRRELVM v)
|
|||||||
static void __strip_l(const SQChar *str,const SQChar **start)
|
static void __strip_l(const SQChar *str,const SQChar **start)
|
||||||
{
|
{
|
||||||
const SQChar *t = str;
|
const SQChar *t = str;
|
||||||
while(((*t) != '\0') && scisspace(*t)){ t++; }
|
while(((*t) != '\0') && isspace(*t)){ t++; }
|
||||||
*start = t;
|
*start = t;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -173,7 +162,7 @@ static void __strip_r(const SQChar *str,SQInteger len,const SQChar **end)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const SQChar *t = &str[len-1];
|
const SQChar *t = &str[len-1];
|
||||||
while(t != str && scisspace(*t)) { t--; }
|
while(t != str && isspace(*t)) { t--; }
|
||||||
*end = t+1;
|
*end = t+1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -213,7 +202,7 @@ static SQInteger _string_split(HSQUIRRELVM v)
|
|||||||
SQChar *stemp,*tok;
|
SQChar *stemp,*tok;
|
||||||
sq_getstring(v,2,&str);
|
sq_getstring(v,2,&str);
|
||||||
sq_getstring(v,3,&seps);
|
sq_getstring(v,3,&seps);
|
||||||
if(sq_getsize(v,3) == 0) return sq_throwerror(v,_SC("empty separators string"));
|
if(sq_getsize(v,3) == 0) return sq_throwerror(v,"empty separators string");
|
||||||
SQInteger memsize = (sq_getsize(v,2)+1)*sizeof(SQChar);
|
SQInteger memsize = (sq_getsize(v,2)+1)*sizeof(SQChar);
|
||||||
stemp = sq_getscratchpad(v,memsize);
|
stemp = sq_getscratchpad(v,memsize);
|
||||||
memcpy(stemp,str,memsize);
|
memcpy(stemp,str,memsize);
|
||||||
@@ -255,10 +244,10 @@ static SQInteger _regexp_match(HSQUIRRELVM v)
|
|||||||
static void _addrexmatch(HSQUIRRELVM v,const SQChar *str,const SQChar *begin,const SQChar *end)
|
static void _addrexmatch(HSQUIRRELVM v,const SQChar *str,const SQChar *begin,const SQChar *end)
|
||||||
{
|
{
|
||||||
sq_newtable(v);
|
sq_newtable(v);
|
||||||
sq_pushstring(v,_SC("begin"),-1);
|
sq_pushstring(v,"begin",-1);
|
||||||
sq_pushinteger(v,begin - str);
|
sq_pushinteger(v,begin - str);
|
||||||
sq_rawset(v,-3);
|
sq_rawset(v,-3);
|
||||||
sq_pushstring(v,_SC("end"),-1);
|
sq_pushstring(v,"end",-1);
|
||||||
sq_pushinteger(v,end - str);
|
sq_pushinteger(v,end - str);
|
||||||
sq_rawset(v,-3);
|
sq_rawset(v,-3);
|
||||||
}
|
}
|
||||||
@@ -321,35 +310,35 @@ static SQInteger _regexp_constructor(HSQUIRRELVM v)
|
|||||||
|
|
||||||
static SQInteger _regexp__typeof(HSQUIRRELVM v)
|
static SQInteger _regexp__typeof(HSQUIRRELVM v)
|
||||||
{
|
{
|
||||||
sq_pushstring(v,_SC("regexp"),-1);
|
sq_pushstring(v,"regexp",-1);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define _DECL_REX_FUNC(name,nparams,pmask) {_SC(#name),_regexp_##name,nparams,pmask}
|
#define _DECL_REX_FUNC(name,nparams,pmask) {#name,_regexp_##name,nparams,pmask}
|
||||||
static SQRegFunction rexobj_funcs[]={
|
static SQRegFunction rexobj_funcs[]={
|
||||||
_DECL_REX_FUNC(constructor,2,_SC(".s")),
|
_DECL_REX_FUNC(constructor,2,".s"),
|
||||||
_DECL_REX_FUNC(search,-2,_SC("xsn")),
|
_DECL_REX_FUNC(search,-2,"xsn"),
|
||||||
_DECL_REX_FUNC(match,2,_SC("xs")),
|
_DECL_REX_FUNC(match,2,"xs"),
|
||||||
_DECL_REX_FUNC(capture,-2,_SC("xsn")),
|
_DECL_REX_FUNC(capture,-2,"xsn"),
|
||||||
_DECL_REX_FUNC(subexpcount,1,_SC("x")),
|
_DECL_REX_FUNC(subexpcount,1,"x"),
|
||||||
_DECL_REX_FUNC(_typeof,1,_SC("x")),
|
_DECL_REX_FUNC(_typeof,1,"x"),
|
||||||
{0,0,0,0}
|
{0,0,0,0}
|
||||||
};
|
};
|
||||||
|
|
||||||
#define _DECL_FUNC(name,nparams,pmask) {_SC(#name),_string_##name,nparams,pmask}
|
#define _DECL_FUNC(name,nparams,pmask) {#name,_string_##name,nparams,pmask}
|
||||||
static SQRegFunction stringlib_funcs[]={
|
static SQRegFunction stringlib_funcs[]={
|
||||||
_DECL_FUNC(format,-2,_SC(".s")),
|
_DECL_FUNC(format,-2,".s"),
|
||||||
_DECL_FUNC(strip,2,_SC(".s")),
|
_DECL_FUNC(strip,2,".s"),
|
||||||
_DECL_FUNC(lstrip,2,_SC(".s")),
|
_DECL_FUNC(lstrip,2,".s"),
|
||||||
_DECL_FUNC(rstrip,2,_SC(".s")),
|
_DECL_FUNC(rstrip,2,".s"),
|
||||||
_DECL_FUNC(split,3,_SC(".ss")),
|
_DECL_FUNC(split,3,".ss"),
|
||||||
{0,0,0,0}
|
{0,0,0,0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
SQInteger sqstd_register_stringlib(HSQUIRRELVM v)
|
SQInteger sqstd_register_stringlib(HSQUIRRELVM v)
|
||||||
{
|
{
|
||||||
sq_pushstring(v,_SC("regexp"),-1);
|
sq_pushstring(v,"regexp",-1);
|
||||||
sq_newclass(v,SQFalse);
|
sq_newclass(v,SQFalse);
|
||||||
SQInteger i = 0;
|
SQInteger i = 0;
|
||||||
while(rexobj_funcs[i].name != 0) {
|
while(rexobj_funcs[i].name != 0) {
|
||||||
|
|||||||
113
src/3rdparty/squirrel/squirrel/sqapi.cpp
vendored
113
src/3rdparty/squirrel/squirrel/sqapi.cpp
vendored
@@ -1,6 +1,9 @@
|
|||||||
/*
|
/*
|
||||||
see copyright notice in squirrel.h
|
* see copyright notice in squirrel.h
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "../../../stdafx.h"
|
||||||
|
|
||||||
#include <squirrel.h>
|
#include <squirrel.h>
|
||||||
#include "sqpcheader.h"
|
#include "sqpcheader.h"
|
||||||
#include "sqvm.h"
|
#include "sqvm.h"
|
||||||
@@ -14,12 +17,16 @@
|
|||||||
#include "sqfuncstate.h"
|
#include "sqfuncstate.h"
|
||||||
#include "sqclass.h"
|
#include "sqclass.h"
|
||||||
|
|
||||||
|
#include "../../../string_func.h"
|
||||||
|
|
||||||
|
#include "../../../safeguards.h"
|
||||||
|
|
||||||
bool sq_aux_gettypedarg(HSQUIRRELVM v,SQInteger idx,SQObjectType type,SQObjectPtr **o)
|
bool sq_aux_gettypedarg(HSQUIRRELVM v,SQInteger idx,SQObjectType type,SQObjectPtr **o)
|
||||||
{
|
{
|
||||||
*o = &stack_get(v,idx);
|
*o = &stack_get(v,idx);
|
||||||
if(type(**o) != type){
|
if(type(**o) != type){
|
||||||
SQObjectPtr oval = v->PrintObjVal(**o);
|
SQObjectPtr oval = v->PrintObjVal(**o);
|
||||||
v->Raise_Error(_SC("wrong argument type, expected '%s' got '%.50s'"),IdType2Name(type),_stringval(oval));
|
v->Raise_Error("wrong argument type, expected '%s' got '%.50s'",IdType2Name(type),_stringval(oval));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@@ -29,7 +36,7 @@ bool sq_aux_gettypedarg(HSQUIRRELVM v,SQInteger idx,SQObjectType type,SQObjectPt
|
|||||||
|
|
||||||
#define sq_aux_paramscheck(v,count) \
|
#define sq_aux_paramscheck(v,count) \
|
||||||
{ \
|
{ \
|
||||||
if(sq_gettop(v) < count){ v->Raise_Error(_SC("not enough params in the stack")); return SQ_ERROR; }\
|
if(sq_gettop(v) < count){ v->Raise_Error("not enough params in the stack"); return SQ_ERROR; }\
|
||||||
}
|
}
|
||||||
|
|
||||||
SQInteger sq_aux_throwobject(HSQUIRRELVM v,SQObjectPtr &e)
|
SQInteger sq_aux_throwobject(HSQUIRRELVM v,SQObjectPtr &e)
|
||||||
@@ -40,8 +47,9 @@ SQInteger sq_aux_throwobject(HSQUIRRELVM v,SQObjectPtr &e)
|
|||||||
|
|
||||||
SQInteger sq_aux_invalidtype(HSQUIRRELVM v,SQObjectType type)
|
SQInteger sq_aux_invalidtype(HSQUIRRELVM v,SQObjectType type)
|
||||||
{
|
{
|
||||||
scsprintf(_ss(v)->GetScratchPad(100), _SC("unexpected type %s"), IdType2Name(type));
|
char buf[100];
|
||||||
return sq_throwerror(v, _ss(v)->GetScratchPad(-1));
|
seprintf(buf, lastof(buf), "unexpected type %s", IdType2Name(type));
|
||||||
|
return sq_throwerror(v, buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
HSQUIRRELVM sq_open(SQInteger initialstacksize)
|
HSQUIRRELVM sq_open(SQInteger initialstacksize)
|
||||||
@@ -49,7 +57,6 @@ HSQUIRRELVM sq_open(SQInteger initialstacksize)
|
|||||||
SQSharedState *ss;
|
SQSharedState *ss;
|
||||||
SQVM *v;
|
SQVM *v;
|
||||||
sq_new(ss, SQSharedState);
|
sq_new(ss, SQSharedState);
|
||||||
ss->Init();
|
|
||||||
v = (SQVM *)SQ_MALLOC(sizeof(SQVM));
|
v = (SQVM *)SQ_MALLOC(sizeof(SQVM));
|
||||||
new (v) SQVM(ss);
|
new (v) SQVM(ss);
|
||||||
ss->_root_vm = v;
|
ss->_root_vm = v;
|
||||||
@@ -253,7 +260,7 @@ SQRESULT sq_newclass(HSQUIRRELVM v,SQBool hasbase)
|
|||||||
if(hasbase) {
|
if(hasbase) {
|
||||||
SQObjectPtr &base = stack_get(v,-1);
|
SQObjectPtr &base = stack_get(v,-1);
|
||||||
if(type(base) != OT_CLASS)
|
if(type(base) != OT_CLASS)
|
||||||
return sq_throwerror(v,_SC("invalid base type"));
|
return sq_throwerror(v,"invalid base type");
|
||||||
baseclass = _class(base);
|
baseclass = _class(base);
|
||||||
}
|
}
|
||||||
SQClass *newclass = SQClass::Create(_ss(v), baseclass);
|
SQClass *newclass = SQClass::Create(_ss(v), baseclass);
|
||||||
@@ -267,7 +274,7 @@ SQBool sq_instanceof(HSQUIRRELVM v)
|
|||||||
SQObjectPtr &inst = stack_get(v,-1);
|
SQObjectPtr &inst = stack_get(v,-1);
|
||||||
SQObjectPtr &cl = stack_get(v,-2);
|
SQObjectPtr &cl = stack_get(v,-2);
|
||||||
if(type(inst) != OT_INSTANCE || type(cl) != OT_CLASS)
|
if(type(inst) != OT_INSTANCE || type(cl) != OT_CLASS)
|
||||||
return sq_throwerror(v,_SC("invalid param type"));
|
return sq_throwerror(v,"invalid param type");
|
||||||
return _instance(inst)->InstanceOf(_class(cl))?SQTrue:SQFalse;
|
return _instance(inst)->InstanceOf(_class(cl))?SQTrue:SQFalse;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -291,7 +298,7 @@ SQRESULT sq_arraypop(HSQUIRRELVM v,SQInteger idx,SQBool pushval)
|
|||||||
_array(*arr)->Pop();
|
_array(*arr)->Pop();
|
||||||
return SQ_OK;
|
return SQ_OK;
|
||||||
}
|
}
|
||||||
return sq_throwerror(v, _SC("empty array"));
|
return sq_throwerror(v, "empty array");
|
||||||
}
|
}
|
||||||
|
|
||||||
SQRESULT sq_arrayresize(HSQUIRRELVM v,SQInteger idx,SQInteger newsize)
|
SQRESULT sq_arrayresize(HSQUIRRELVM v,SQInteger idx,SQInteger newsize)
|
||||||
@@ -303,7 +310,7 @@ SQRESULT sq_arrayresize(HSQUIRRELVM v,SQInteger idx,SQInteger newsize)
|
|||||||
_array(*arr)->Resize(newsize);
|
_array(*arr)->Resize(newsize);
|
||||||
return SQ_OK;
|
return SQ_OK;
|
||||||
}
|
}
|
||||||
return sq_throwerror(v,_SC("negative size"));
|
return sq_throwerror(v,"negative size");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -332,7 +339,7 @@ SQRESULT sq_arrayremove(HSQUIRRELVM v,SQInteger idx,SQInteger itemidx)
|
|||||||
sq_aux_paramscheck(v, 1);
|
sq_aux_paramscheck(v, 1);
|
||||||
SQObjectPtr *arr;
|
SQObjectPtr *arr;
|
||||||
_GETSAFE_OBJ(v, idx, OT_ARRAY,arr);
|
_GETSAFE_OBJ(v, idx, OT_ARRAY,arr);
|
||||||
return _array(*arr)->Remove(itemidx) ? SQ_OK : sq_throwerror(v,_SC("index out of range"));
|
return _array(*arr)->Remove(itemidx) ? SQ_OK : sq_throwerror(v,"index out of range");
|
||||||
}
|
}
|
||||||
|
|
||||||
SQRESULT sq_arrayinsert(HSQUIRRELVM v,SQInteger idx,SQInteger destpos)
|
SQRESULT sq_arrayinsert(HSQUIRRELVM v,SQInteger idx,SQInteger destpos)
|
||||||
@@ -340,7 +347,7 @@ SQRESULT sq_arrayinsert(HSQUIRRELVM v,SQInteger idx,SQInteger destpos)
|
|||||||
sq_aux_paramscheck(v, 1);
|
sq_aux_paramscheck(v, 1);
|
||||||
SQObjectPtr *arr;
|
SQObjectPtr *arr;
|
||||||
_GETSAFE_OBJ(v, idx, OT_ARRAY,arr);
|
_GETSAFE_OBJ(v, idx, OT_ARRAY,arr);
|
||||||
SQRESULT ret = _array(*arr)->Insert(destpos, v->GetUp(-1)) ? SQ_OK : sq_throwerror(v,_SC("index out of range"));
|
SQRESULT ret = _array(*arr)->Insert(destpos, v->GetUp(-1)) ? SQ_OK : sq_throwerror(v,"index out of range");
|
||||||
v->Pop();
|
v->Pop();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@@ -349,7 +356,6 @@ SQRESULT sq_arrayinsert(HSQUIRRELVM v,SQInteger idx,SQInteger destpos)
|
|||||||
void sq_newclosure(HSQUIRRELVM v,SQFUNCTION func,SQUnsignedInteger nfreevars)
|
void sq_newclosure(HSQUIRRELVM v,SQFUNCTION func,SQUnsignedInteger nfreevars)
|
||||||
{
|
{
|
||||||
SQNativeClosure *nc = SQNativeClosure::Create(_ss(v), func);
|
SQNativeClosure *nc = SQNativeClosure::Create(_ss(v), func);
|
||||||
nc->_nparamscheck = 0;
|
|
||||||
for(SQUnsignedInteger i = 0; i < nfreevars; i++) {
|
for(SQUnsignedInteger i = 0; i < nfreevars; i++) {
|
||||||
nc->_outervalues.push_back(v->Top());
|
nc->_outervalues.push_back(v->Top());
|
||||||
v->Pop();
|
v->Pop();
|
||||||
@@ -367,7 +373,7 @@ SQRESULT sq_getclosureinfo(HSQUIRRELVM v,SQInteger idx,SQUnsignedInteger *nparam
|
|||||||
*nfreevars = (SQUnsignedInteger)c->_outervalues.size();
|
*nfreevars = (SQUnsignedInteger)c->_outervalues.size();
|
||||||
return SQ_OK;
|
return SQ_OK;
|
||||||
}
|
}
|
||||||
return sq_throwerror(v,_SC("the object is not a closure"));
|
return sq_throwerror(v,"the object is not a closure");
|
||||||
}
|
}
|
||||||
|
|
||||||
SQRESULT sq_setnativeclosurename(HSQUIRRELVM v,SQInteger idx,const SQChar *name)
|
SQRESULT sq_setnativeclosurename(HSQUIRRELVM v,SQInteger idx,const SQChar *name)
|
||||||
@@ -378,20 +384,20 @@ SQRESULT sq_setnativeclosurename(HSQUIRRELVM v,SQInteger idx,const SQChar *name)
|
|||||||
nc->_name = SQString::Create(_ss(v),name);
|
nc->_name = SQString::Create(_ss(v),name);
|
||||||
return SQ_OK;
|
return SQ_OK;
|
||||||
}
|
}
|
||||||
return sq_throwerror(v,_SC("the object is not a nativeclosure"));
|
return sq_throwerror(v,"the object is not a nativeclosure");
|
||||||
}
|
}
|
||||||
|
|
||||||
SQRESULT sq_setparamscheck(HSQUIRRELVM v,SQInteger nparamscheck,const SQChar *typemask)
|
SQRESULT sq_setparamscheck(HSQUIRRELVM v,SQInteger nparamscheck,const SQChar *typemask)
|
||||||
{
|
{
|
||||||
SQObject o = stack_get(v, -1);
|
SQObject o = stack_get(v, -1);
|
||||||
if(!sq_isnativeclosure(o))
|
if(!sq_isnativeclosure(o))
|
||||||
return sq_throwerror(v, _SC("native closure expected"));
|
return sq_throwerror(v, "native closure expected");
|
||||||
SQNativeClosure *nc = _nativeclosure(o);
|
SQNativeClosure *nc = _nativeclosure(o);
|
||||||
nc->_nparamscheck = nparamscheck;
|
nc->_nparamscheck = nparamscheck;
|
||||||
if(typemask) {
|
if(typemask) {
|
||||||
SQIntVec res;
|
SQIntVec res;
|
||||||
if(!CompileTypemask(res, typemask))
|
if(!CompileTypemask(res, typemask))
|
||||||
return sq_throwerror(v, _SC("invalid typemask"));
|
return sq_throwerror(v, "invalid typemask");
|
||||||
nc->_typecheck.copy(res);
|
nc->_typecheck.copy(res);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -408,12 +414,12 @@ SQRESULT sq_bindenv(HSQUIRRELVM v,SQInteger idx)
|
|||||||
SQObjectPtr &o = stack_get(v,idx);
|
SQObjectPtr &o = stack_get(v,idx);
|
||||||
if(!sq_isnativeclosure(o) &&
|
if(!sq_isnativeclosure(o) &&
|
||||||
!sq_isclosure(o))
|
!sq_isclosure(o))
|
||||||
return sq_throwerror(v,_SC("the target is not a closure"));
|
return sq_throwerror(v,"the target is not a closure");
|
||||||
SQObjectPtr &env = stack_get(v,-1);
|
SQObjectPtr &env = stack_get(v,-1);
|
||||||
if(!sq_istable(env) &&
|
if(!sq_istable(env) &&
|
||||||
!sq_isclass(env) &&
|
!sq_isclass(env) &&
|
||||||
!sq_isinstance(env))
|
!sq_isinstance(env))
|
||||||
return sq_throwerror(v,_SC("invalid environment"));
|
return sq_throwerror(v,"invalid environment");
|
||||||
SQObjectPtr w = _refcounted(env)->GetWeakRef(type(env));
|
SQObjectPtr w = _refcounted(env)->GetWeakRef(type(env));
|
||||||
SQObjectPtr ret;
|
SQObjectPtr ret;
|
||||||
if(sq_isclosure(o)) {
|
if(sq_isclosure(o)) {
|
||||||
@@ -438,7 +444,7 @@ SQRESULT sq_clear(HSQUIRRELVM v,SQInteger idx)
|
|||||||
case OT_TABLE: _table(o)->Clear(); break;
|
case OT_TABLE: _table(o)->Clear(); break;
|
||||||
case OT_ARRAY: _array(o)->Resize(0); break;
|
case OT_ARRAY: _array(o)->Resize(0); break;
|
||||||
default:
|
default:
|
||||||
return sq_throwerror(v, _SC("clear only works on table and array"));
|
return sq_throwerror(v, "clear only works on table and array");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -468,7 +474,7 @@ SQRESULT sq_setroottable(HSQUIRRELVM v)
|
|||||||
v->Pop();
|
v->Pop();
|
||||||
return SQ_OK;
|
return SQ_OK;
|
||||||
}
|
}
|
||||||
return sq_throwerror(v, _SC("ivalid type"));
|
return sq_throwerror(v, "ivalid type");
|
||||||
}
|
}
|
||||||
|
|
||||||
SQRESULT sq_setconsttable(HSQUIRRELVM v)
|
SQRESULT sq_setconsttable(HSQUIRRELVM v)
|
||||||
@@ -479,7 +485,7 @@ SQRESULT sq_setconsttable(HSQUIRRELVM v)
|
|||||||
v->Pop();
|
v->Pop();
|
||||||
return SQ_OK;
|
return SQ_OK;
|
||||||
}
|
}
|
||||||
return sq_throwerror(v, _SC("ivalid type, expected table"));
|
return sq_throwerror(v, "ivalid type, expected table");
|
||||||
}
|
}
|
||||||
|
|
||||||
void sq_setforeignptr(HSQUIRRELVM v,SQUserPointer p)
|
void sq_setforeignptr(HSQUIRRELVM v,SQUserPointer p)
|
||||||
@@ -605,7 +611,7 @@ SQRESULT sq_settypetag(HSQUIRRELVM v,SQInteger idx,SQUserPointer typetag)
|
|||||||
switch(type(o)) {
|
switch(type(o)) {
|
||||||
case OT_USERDATA: _userdata(o)->_typetag = typetag; break;
|
case OT_USERDATA: _userdata(o)->_typetag = typetag; break;
|
||||||
case OT_CLASS: _class(o)->_typetag = typetag; break;
|
case OT_CLASS: _class(o)->_typetag = typetag; break;
|
||||||
default: return sq_throwerror(v,_SC("invalid object type"));
|
default: return sq_throwerror(v,"invalid object type");
|
||||||
}
|
}
|
||||||
return SQ_OK;
|
return SQ_OK;
|
||||||
}
|
}
|
||||||
@@ -625,7 +631,7 @@ SQRESULT sq_gettypetag(HSQUIRRELVM v,SQInteger idx,SQUserPointer *typetag)
|
|||||||
{
|
{
|
||||||
SQObjectPtr &o = stack_get(v,idx);
|
SQObjectPtr &o = stack_get(v,idx);
|
||||||
if(SQ_FAILED(sq_getobjtypetag(&o,typetag)))
|
if(SQ_FAILED(sq_getobjtypetag(&o,typetag)))
|
||||||
return sq_throwerror(v,_SC("invalid object type"));
|
return sq_throwerror(v,"invalid object type");
|
||||||
return SQ_OK;
|
return SQ_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -640,7 +646,7 @@ SQRESULT sq_getuserpointer(HSQUIRRELVM v, SQInteger idx, SQUserPointer *p)
|
|||||||
SQRESULT sq_setinstanceup(HSQUIRRELVM v, SQInteger idx, SQUserPointer p)
|
SQRESULT sq_setinstanceup(HSQUIRRELVM v, SQInteger idx, SQUserPointer p)
|
||||||
{
|
{
|
||||||
SQObjectPtr &o = stack_get(v,idx);
|
SQObjectPtr &o = stack_get(v,idx);
|
||||||
if(type(o) != OT_INSTANCE) return sq_throwerror(v,_SC("the object is not a class instance"));
|
if(type(o) != OT_INSTANCE) return sq_throwerror(v,"the object is not a class instance");
|
||||||
_instance(o)->_userpointer = p;
|
_instance(o)->_userpointer = p;
|
||||||
return SQ_OK;
|
return SQ_OK;
|
||||||
}
|
}
|
||||||
@@ -648,8 +654,8 @@ SQRESULT sq_setinstanceup(HSQUIRRELVM v, SQInteger idx, SQUserPointer p)
|
|||||||
SQRESULT sq_setclassudsize(HSQUIRRELVM v, SQInteger idx, SQInteger udsize)
|
SQRESULT sq_setclassudsize(HSQUIRRELVM v, SQInteger idx, SQInteger udsize)
|
||||||
{
|
{
|
||||||
SQObjectPtr &o = stack_get(v,idx);
|
SQObjectPtr &o = stack_get(v,idx);
|
||||||
if(type(o) != OT_CLASS) return sq_throwerror(v,_SC("the object is not a class"));
|
if(type(o) != OT_CLASS) return sq_throwerror(v,"the object is not a class");
|
||||||
if(_class(o)->_locked) return sq_throwerror(v,_SC("the class is locked"));
|
if(_class(o)->_locked) return sq_throwerror(v,"the class is locked");
|
||||||
_class(o)->_udsize = udsize;
|
_class(o)->_udsize = udsize;
|
||||||
return SQ_OK;
|
return SQ_OK;
|
||||||
}
|
}
|
||||||
@@ -658,7 +664,7 @@ SQRESULT sq_setclassudsize(HSQUIRRELVM v, SQInteger idx, SQInteger udsize)
|
|||||||
SQRESULT sq_getinstanceup(HSQUIRRELVM v, SQInteger idx, SQUserPointer *p,SQUserPointer typetag)
|
SQRESULT sq_getinstanceup(HSQUIRRELVM v, SQInteger idx, SQUserPointer *p,SQUserPointer typetag)
|
||||||
{
|
{
|
||||||
SQObjectPtr &o = stack_get(v,idx);
|
SQObjectPtr &o = stack_get(v,idx);
|
||||||
if(type(o) != OT_INSTANCE) return sq_throwerror(v,_SC("the object is not a class instance"));
|
if(type(o) != OT_INSTANCE) return sq_throwerror(v,"the object is not a class instance");
|
||||||
(*p) = _instance(o)->_userpointer;
|
(*p) = _instance(o)->_userpointer;
|
||||||
if(typetag != 0) {
|
if(typetag != 0) {
|
||||||
SQClass *cl = _instance(o)->_class;
|
SQClass *cl = _instance(o)->_class;
|
||||||
@@ -667,7 +673,7 @@ SQRESULT sq_getinstanceup(HSQUIRRELVM v, SQInteger idx, SQUserPointer *p,SQUserP
|
|||||||
return SQ_OK;
|
return SQ_OK;
|
||||||
cl = cl->_base;
|
cl = cl->_base;
|
||||||
}while(cl != NULL);
|
}while(cl != NULL);
|
||||||
return sq_throwerror(v,_SC("invalid type tag"));
|
return sq_throwerror(v,"invalid type tag");
|
||||||
}
|
}
|
||||||
return SQ_OK;
|
return SQ_OK;
|
||||||
}
|
}
|
||||||
@@ -717,7 +723,7 @@ SQRESULT sq_newslot(HSQUIRRELVM v, SQInteger idx, SQBool bstatic)
|
|||||||
SQObjectPtr &self = stack_get(v, idx);
|
SQObjectPtr &self = stack_get(v, idx);
|
||||||
if(type(self) == OT_TABLE || type(self) == OT_CLASS) {
|
if(type(self) == OT_TABLE || type(self) == OT_CLASS) {
|
||||||
SQObjectPtr &key = v->GetUp(-2);
|
SQObjectPtr &key = v->GetUp(-2);
|
||||||
if(type(key) == OT_NULL) return sq_throwerror(v, _SC("null is not a valid key"));
|
if(type(key) == OT_NULL) return sq_throwerror(v, "null is not a valid key");
|
||||||
v->NewSlot(self, key, v->GetUp(-1),bstatic?true:false);
|
v->NewSlot(self, key, v->GetUp(-1),bstatic?true:false);
|
||||||
v->Pop(2);
|
v->Pop(2);
|
||||||
}
|
}
|
||||||
@@ -730,7 +736,7 @@ SQRESULT sq_deleteslot(HSQUIRRELVM v,SQInteger idx,SQBool pushval)
|
|||||||
SQObjectPtr *self;
|
SQObjectPtr *self;
|
||||||
_GETSAFE_OBJ(v, idx, OT_TABLE,self);
|
_GETSAFE_OBJ(v, idx, OT_TABLE,self);
|
||||||
SQObjectPtr &key = v->GetUp(-1);
|
SQObjectPtr &key = v->GetUp(-1);
|
||||||
if(type(key) == OT_NULL) return sq_throwerror(v, _SC("null is not a valid key"));
|
if(type(key) == OT_NULL) return sq_throwerror(v, "null is not a valid key");
|
||||||
SQObjectPtr res;
|
SQObjectPtr res;
|
||||||
if(!v->DeleteSlot(*self, key, res)){
|
if(!v->DeleteSlot(*self, key, res)){
|
||||||
return SQ_ERROR;
|
return SQ_ERROR;
|
||||||
@@ -753,7 +759,7 @@ SQRESULT sq_set(HSQUIRRELVM v,SQInteger idx)
|
|||||||
SQRESULT sq_rawset(HSQUIRRELVM v,SQInteger idx)
|
SQRESULT sq_rawset(HSQUIRRELVM v,SQInteger idx)
|
||||||
{
|
{
|
||||||
SQObjectPtr &self = stack_get(v, idx);
|
SQObjectPtr &self = stack_get(v, idx);
|
||||||
if(type(v->GetUp(-2)) == OT_NULL) return sq_throwerror(v, _SC("null key"));
|
if(type(v->GetUp(-2)) == OT_NULL) return sq_throwerror(v, "null key");
|
||||||
switch(type(self)) {
|
switch(type(self)) {
|
||||||
case OT_TABLE:
|
case OT_TABLE:
|
||||||
_table(self)->NewSlot(v->GetUp(-2), v->GetUp(-1));
|
_table(self)->NewSlot(v->GetUp(-2), v->GetUp(-1));
|
||||||
@@ -779,7 +785,7 @@ SQRESULT sq_rawset(HSQUIRRELVM v,SQInteger idx)
|
|||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
v->Pop(2);
|
v->Pop(2);
|
||||||
return sq_throwerror(v, _SC("rawset works only on array/table/class and instance"));
|
return sq_throwerror(v, "rawset works only on array/table/class and instance");
|
||||||
}
|
}
|
||||||
v->Raise_IdxError(v->GetUp(-2));return SQ_ERROR;
|
v->Raise_IdxError(v->GetUp(-2));return SQ_ERROR;
|
||||||
}
|
}
|
||||||
@@ -792,7 +798,7 @@ SQRESULT sq_setdelegate(HSQUIRRELVM v,SQInteger idx)
|
|||||||
switch(type) {
|
switch(type) {
|
||||||
case OT_TABLE:
|
case OT_TABLE:
|
||||||
if(type(mt) == OT_TABLE) {
|
if(type(mt) == OT_TABLE) {
|
||||||
if(!_table(self)->SetDelegate(_table(mt))) return sq_throwerror(v, _SC("delagate cycle")); v->Pop();}
|
if(!_table(self)->SetDelegate(_table(mt))) return sq_throwerror(v, "delagate cycle"); v->Pop();}
|
||||||
else if(type(mt)==OT_NULL) {
|
else if(type(mt)==OT_NULL) {
|
||||||
_table(self)->SetDelegate(NULL); v->Pop(); }
|
_table(self)->SetDelegate(NULL); v->Pop(); }
|
||||||
else return sq_aux_invalidtype(v,type);
|
else return sq_aux_invalidtype(v,type);
|
||||||
@@ -841,7 +847,7 @@ SQRESULT sq_getdelegate(HSQUIRRELVM v,SQInteger idx)
|
|||||||
}
|
}
|
||||||
v->Push(SQObjectPtr(_delegable(self)->_delegate));
|
v->Push(SQObjectPtr(_delegable(self)->_delegate));
|
||||||
break;
|
break;
|
||||||
default: return sq_throwerror(v,_SC("wrong type")); break;
|
default: return sq_throwerror(v,"wrong type"); break;
|
||||||
}
|
}
|
||||||
return SQ_OK;
|
return SQ_OK;
|
||||||
|
|
||||||
@@ -853,7 +859,7 @@ SQRESULT sq_get(HSQUIRRELVM v,SQInteger idx)
|
|||||||
if(v->Get(self,v->GetUp(-1),v->GetUp(-1),false,false))
|
if(v->Get(self,v->GetUp(-1),v->GetUp(-1),false,false))
|
||||||
return SQ_OK;
|
return SQ_OK;
|
||||||
v->Pop(1);
|
v->Pop(1);
|
||||||
return sq_throwerror(v,_SC("the index doesn't exist"));
|
return sq_throwerror(v,"the index doesn't exist");
|
||||||
}
|
}
|
||||||
|
|
||||||
SQRESULT sq_rawget(HSQUIRRELVM v,SQInteger idx)
|
SQRESULT sq_rawget(HSQUIRRELVM v,SQInteger idx)
|
||||||
@@ -878,10 +884,10 @@ SQRESULT sq_rawget(HSQUIRRELVM v,SQInteger idx)
|
|||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
v->Pop(1);
|
v->Pop(1);
|
||||||
return sq_throwerror(v,_SC("rawget works only on array/table/instance and class"));
|
return sq_throwerror(v,"rawget works only on array/table/instance and class");
|
||||||
}
|
}
|
||||||
v->Pop(1);
|
v->Pop(1);
|
||||||
return sq_throwerror(v,_SC("the index doesn't exist"));
|
return sq_throwerror(v,"the index doesn't exist");
|
||||||
}
|
}
|
||||||
|
|
||||||
SQRESULT sq_getstackobj(HSQUIRRELVM v,SQInteger idx,HSQOBJECT *po)
|
SQRESULT sq_getstackobj(HSQUIRRELVM v,SQInteger idx,HSQOBJECT *po)
|
||||||
@@ -959,7 +965,7 @@ SQRESULT sq_resume(HSQUIRRELVM v,SQBool retval,SQBool raiseerror)
|
|||||||
v->Pop();
|
v->Pop();
|
||||||
return SQ_OK;
|
return SQ_OK;
|
||||||
}
|
}
|
||||||
return sq_throwerror(v,_SC("only generators can be resumed"));
|
return sq_throwerror(v,"only generators can be resumed");
|
||||||
}
|
}
|
||||||
|
|
||||||
SQRESULT sq_call(HSQUIRRELVM v,SQInteger params,SQBool retval,SQBool raiseerror, int suspend)
|
SQRESULT sq_call(HSQUIRRELVM v,SQInteger params,SQBool retval,SQBool raiseerror, int suspend)
|
||||||
@@ -981,9 +987,6 @@ SQRESULT sq_call(HSQUIRRELVM v,SQInteger params,SQBool retval,SQBool raiseerror,
|
|||||||
v->Pop(params);
|
v->Pop(params);
|
||||||
return SQ_ERROR;
|
return SQ_ERROR;
|
||||||
}
|
}
|
||||||
if(!v->_suspended)
|
|
||||||
v->Pop(params);
|
|
||||||
return sq_throwerror(v,_SC("call failed"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
SQRESULT sq_suspendvm(HSQUIRRELVM v)
|
SQRESULT sq_suspendvm(HSQUIRRELVM v)
|
||||||
@@ -995,7 +998,7 @@ SQRESULT sq_wakeupvm(HSQUIRRELVM v,SQBool wakeupret,SQBool retval,SQBool raiseer
|
|||||||
{
|
{
|
||||||
SQObjectPtr ret;
|
SQObjectPtr ret;
|
||||||
if(!v->_suspended)
|
if(!v->_suspended)
|
||||||
return sq_throwerror(v,_SC("cannot resume a vm that is not running any code"));
|
return sq_throwerror(v,"cannot resume a vm that is not running any code");
|
||||||
if(wakeupret) {
|
if(wakeupret) {
|
||||||
v->GetAt(v->_stackbase+v->_suspended_target)=v->GetUp(-1); //retval
|
v->GetAt(v->_stackbase+v->_suspended_target)=v->GetUp(-1); //retval
|
||||||
v->Pop();
|
v->Pop();
|
||||||
@@ -1051,7 +1054,7 @@ SQRESULT sq_writeclosure(HSQUIRRELVM v,SQWRITEFUNC w,SQUserPointer up)
|
|||||||
_GETSAFE_OBJ(v, -1, OT_CLOSURE,o);
|
_GETSAFE_OBJ(v, -1, OT_CLOSURE,o);
|
||||||
unsigned short tag = SQ_BYTECODE_STREAM_TAG;
|
unsigned short tag = SQ_BYTECODE_STREAM_TAG;
|
||||||
if(w(up,&tag,2) != 2)
|
if(w(up,&tag,2) != 2)
|
||||||
return sq_throwerror(v,_SC("io error"));
|
return sq_throwerror(v,"io error");
|
||||||
if(!_closure(*o)->Save(v,up,w))
|
if(!_closure(*o)->Save(v,up,w))
|
||||||
return SQ_ERROR;
|
return SQ_ERROR;
|
||||||
return SQ_OK;
|
return SQ_OK;
|
||||||
@@ -1063,9 +1066,9 @@ SQRESULT sq_readclosure(HSQUIRRELVM v,SQREADFUNC r,SQUserPointer up)
|
|||||||
|
|
||||||
unsigned short tag;
|
unsigned short tag;
|
||||||
if(r(up,&tag,2) != 2)
|
if(r(up,&tag,2) != 2)
|
||||||
return sq_throwerror(v,_SC("io error"));
|
return sq_throwerror(v,"io error");
|
||||||
if(tag != SQ_BYTECODE_STREAM_TAG)
|
if(tag != SQ_BYTECODE_STREAM_TAG)
|
||||||
return sq_throwerror(v,_SC("invalid stream"));
|
return sq_throwerror(v,"invalid stream");
|
||||||
if(!SQClosure::Load(v,up,r,closure))
|
if(!SQClosure::Load(v,up,r,closure))
|
||||||
return SQ_ERROR;
|
return SQ_ERROR;
|
||||||
v->Push(closure);
|
v->Push(closure);
|
||||||
@@ -1110,13 +1113,13 @@ SQRESULT sq_setfreevariable(HSQUIRRELVM v,SQInteger idx,SQUnsignedInteger nval)
|
|||||||
if(_closure(self)->_outervalues.size()>nval){
|
if(_closure(self)->_outervalues.size()>nval){
|
||||||
_closure(self)->_outervalues[nval]=stack_get(v,-1);
|
_closure(self)->_outervalues[nval]=stack_get(v,-1);
|
||||||
}
|
}
|
||||||
else return sq_throwerror(v,_SC("invalid free var index"));
|
else return sq_throwerror(v,"invalid free var index");
|
||||||
break;
|
break;
|
||||||
case OT_NATIVECLOSURE:
|
case OT_NATIVECLOSURE:
|
||||||
if(_nativeclosure(self)->_outervalues.size()>nval){
|
if(_nativeclosure(self)->_outervalues.size()>nval){
|
||||||
_nativeclosure(self)->_outervalues[nval]=stack_get(v,-1);
|
_nativeclosure(self)->_outervalues[nval]=stack_get(v,-1);
|
||||||
}
|
}
|
||||||
else return sq_throwerror(v,_SC("invalid free var index"));
|
else return sq_throwerror(v,"invalid free var index");
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return sq_aux_invalidtype(v,type(self));
|
return sq_aux_invalidtype(v,type(self));
|
||||||
@@ -1144,7 +1147,7 @@ SQRESULT sq_setattributes(HSQUIRRELVM v,SQInteger idx)
|
|||||||
v->Push(attrs);
|
v->Push(attrs);
|
||||||
return SQ_OK;
|
return SQ_OK;
|
||||||
}
|
}
|
||||||
return sq_throwerror(v,_SC("wrong index"));
|
return sq_throwerror(v,"wrong index");
|
||||||
}
|
}
|
||||||
|
|
||||||
SQRESULT sq_getattributes(HSQUIRRELVM v,SQInteger idx)
|
SQRESULT sq_getattributes(HSQUIRRELVM v,SQInteger idx)
|
||||||
@@ -1164,7 +1167,7 @@ SQRESULT sq_getattributes(HSQUIRRELVM v,SQInteger idx)
|
|||||||
v->Push(attrs);
|
v->Push(attrs);
|
||||||
return SQ_OK;
|
return SQ_OK;
|
||||||
}
|
}
|
||||||
return sq_throwerror(v,_SC("wrong index"));
|
return sq_throwerror(v,"wrong index");
|
||||||
}
|
}
|
||||||
|
|
||||||
SQRESULT sq_getbase(HSQUIRRELVM v,SQInteger idx)
|
SQRESULT sq_getbase(HSQUIRRELVM v,SQInteger idx)
|
||||||
@@ -1208,7 +1211,7 @@ SQRESULT sq_getweakrefval(HSQUIRRELVM v,SQInteger idx)
|
|||||||
{
|
{
|
||||||
SQObjectPtr &o = stack_get(v,idx);
|
SQObjectPtr &o = stack_get(v,idx);
|
||||||
if(type(o) != OT_WEAKREF) {
|
if(type(o) != OT_WEAKREF) {
|
||||||
return sq_throwerror(v,_SC("the object must be a weakref"));
|
return sq_throwerror(v,"the object must be a weakref");
|
||||||
}
|
}
|
||||||
v->Push(_weakref(o)->_obj);
|
v->Push(_weakref(o)->_obj);
|
||||||
return SQ_OK;
|
return SQ_OK;
|
||||||
@@ -1228,7 +1231,7 @@ SQRESULT sq_getdefaultdelegate(HSQUIRRELVM v,SQObjectType t)
|
|||||||
case OT_CLASS: v->Push(ss->_class_default_delegate); break;
|
case OT_CLASS: v->Push(ss->_class_default_delegate); break;
|
||||||
case OT_INSTANCE: v->Push(ss->_instance_default_delegate); break;
|
case OT_INSTANCE: v->Push(ss->_instance_default_delegate); break;
|
||||||
case OT_WEAKREF: v->Push(ss->_weakref_default_delegate); break;
|
case OT_WEAKREF: v->Push(ss->_weakref_default_delegate); break;
|
||||||
default: return sq_throwerror(v,_SC("the type doesn't have a default delegate"));
|
default: return sq_throwerror(v,"the type doesn't have a default delegate");
|
||||||
}
|
}
|
||||||
return SQ_OK;
|
return SQ_OK;
|
||||||
}
|
}
|
||||||
@@ -1237,7 +1240,7 @@ SQRESULT sq_next(HSQUIRRELVM v,SQInteger idx)
|
|||||||
{
|
{
|
||||||
SQObjectPtr o=stack_get(v,idx),&refpos = stack_get(v,-1),realkey,val;
|
SQObjectPtr o=stack_get(v,idx),&refpos = stack_get(v,-1),realkey,val;
|
||||||
if(type(o) == OT_GENERATOR) {
|
if(type(o) == OT_GENERATOR) {
|
||||||
return sq_throwerror(v,_SC("cannot iterate a generator"));
|
return sq_throwerror(v,"cannot iterate a generator");
|
||||||
}
|
}
|
||||||
int faketojump;
|
int faketojump;
|
||||||
if(!v->FOREACH_OP(o,realkey,val,refpos,0,666,faketojump))
|
if(!v->FOREACH_OP(o,realkey,val,refpos,0,666,faketojump))
|
||||||
@@ -1256,7 +1259,7 @@ struct BufState{
|
|||||||
SQInteger size;
|
SQInteger size;
|
||||||
};
|
};
|
||||||
|
|
||||||
SQInteger buf_lexfeed(SQUserPointer file)
|
WChar buf_lexfeed(SQUserPointer file)
|
||||||
{
|
{
|
||||||
BufState *buf=(BufState*)file;
|
BufState *buf=(BufState*)file;
|
||||||
if(buf->size<(buf->ptr+1))
|
if(buf->size<(buf->ptr+1))
|
||||||
|
|||||||
292
src/3rdparty/squirrel/squirrel/sqbaselib.cpp
vendored
292
src/3rdparty/squirrel/squirrel/sqbaselib.cpp
vendored
@@ -1,8 +1,13 @@
|
|||||||
/*
|
/*
|
||||||
see copyright notice in squirrel.h
|
* see copyright notice in squirrel.h
|
||||||
*/
|
*/
|
||||||
/* Needs to be first due to a squirrel header defining type() and type()
|
/*
|
||||||
* being used in some versions of the headers included by algorithm. */
|
* Needs to be first due to a squirrel header defining type() and type()
|
||||||
|
* being used in some versions of the headers included by algorithm.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "../../../stdafx.h"
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include "sqpcheader.h"
|
#include "sqpcheader.h"
|
||||||
#include "sqvm.h"
|
#include "sqvm.h"
|
||||||
@@ -12,21 +17,22 @@
|
|||||||
#include "sqfuncproto.h"
|
#include "sqfuncproto.h"
|
||||||
#include "sqclosure.h"
|
#include "sqclosure.h"
|
||||||
#include "sqclass.h"
|
#include "sqclass.h"
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
|
|
||||||
|
#include "../../../safeguards.h"
|
||||||
|
|
||||||
bool str2num(const SQChar *s,SQObjectPtr &res)
|
bool str2num(const SQChar *s,SQObjectPtr &res)
|
||||||
{
|
{
|
||||||
SQChar *end;
|
SQChar *end;
|
||||||
if(scstrstr(s,_SC("."))){
|
if(strstr(s,".")){
|
||||||
SQFloat r = SQFloat(scstrtod(s,&end));
|
SQFloat r = SQFloat(strtod(s,&end));
|
||||||
if(s == end) return false;
|
if(s == end) return false;
|
||||||
res = r;
|
res = r;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
SQInteger r = SQInteger(scstrtol(s,&end,10));
|
SQInteger r = SQInteger(strtol(s,&end,10));
|
||||||
if(s == end) return false;
|
if(s == end) return false;
|
||||||
res = r;
|
res = r;
|
||||||
return true;
|
return true;
|
||||||
@@ -104,21 +110,21 @@ static SQInteger base_getstackinfos(HSQUIRRELVM v)
|
|||||||
sq_getinteger(v, -1, &level);
|
sq_getinteger(v, -1, &level);
|
||||||
if (SQ_SUCCEEDED(sq_stackinfos(v, level, &si)))
|
if (SQ_SUCCEEDED(sq_stackinfos(v, level, &si)))
|
||||||
{
|
{
|
||||||
const SQChar *fn = _SC("unknown");
|
const SQChar *fn = "unknown";
|
||||||
const SQChar *src = _SC("unknown");
|
const SQChar *src = "unknown";
|
||||||
if(si.funcname)fn = si.funcname;
|
if(si.funcname)fn = si.funcname;
|
||||||
if(si.source)src = si.source;
|
if(si.source)src = si.source;
|
||||||
sq_newtable(v);
|
sq_newtable(v);
|
||||||
sq_pushstring(v, _SC("func"), -1);
|
sq_pushstring(v, "func", -1);
|
||||||
sq_pushstring(v, fn, -1);
|
sq_pushstring(v, fn, -1);
|
||||||
sq_createslot(v, -3);
|
sq_createslot(v, -3);
|
||||||
sq_pushstring(v, _SC("src"), -1);
|
sq_pushstring(v, "src", -1);
|
||||||
sq_pushstring(v, src, -1);
|
sq_pushstring(v, src, -1);
|
||||||
sq_createslot(v, -3);
|
sq_createslot(v, -3);
|
||||||
sq_pushstring(v, _SC("line"), -1);
|
sq_pushstring(v, "line", -1);
|
||||||
sq_pushinteger(v, si.line);
|
sq_pushinteger(v, si.line);
|
||||||
sq_createslot(v, -3);
|
sq_createslot(v, -3);
|
||||||
sq_pushstring(v, _SC("locals"), -1);
|
sq_pushstring(v, "locals", -1);
|
||||||
sq_newtable(v);
|
sq_newtable(v);
|
||||||
seq=0;
|
seq=0;
|
||||||
while ((name = sq_getlocal(v, level, seq))) {
|
while ((name = sq_getlocal(v, level, seq))) {
|
||||||
@@ -139,7 +145,7 @@ static SQInteger base_getstackinfos(HSQUIRRELVM v)
|
|||||||
static SQInteger base_assert(HSQUIRRELVM v)
|
static SQInteger base_assert(HSQUIRRELVM v)
|
||||||
{
|
{
|
||||||
if(v->IsFalse(stack_get(v,2))){
|
if(v->IsFalse(stack_get(v,2))){
|
||||||
return sq_throwerror(v,_SC("assertion failed"));
|
return sq_throwerror(v,"assertion failed");
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -171,7 +177,7 @@ static SQInteger base_print(HSQUIRRELVM v)
|
|||||||
const SQChar *str;
|
const SQChar *str;
|
||||||
sq_tostring(v,2);
|
sq_tostring(v,2);
|
||||||
sq_getstring(v,-1,&str);
|
sq_getstring(v,-1,&str);
|
||||||
if(_ss(v)->_printfunc) _ss(v)->_printfunc(v,_SC("%s"),str);
|
if(_ss(v)->_printfunc) _ss(v)->_printfunc(v,"%s",str);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -179,7 +185,7 @@ static SQInteger base_print(HSQUIRRELVM v)
|
|||||||
static SQInteger base_compilestring(HSQUIRRELVM v)
|
static SQInteger base_compilestring(HSQUIRRELVM v)
|
||||||
{
|
{
|
||||||
SQInteger nargs=sq_gettop(v);
|
SQInteger nargs=sq_gettop(v);
|
||||||
const SQChar *src=NULL,*name=_SC("unnamedbuffer");
|
const SQChar *src=NULL,*name="unnamedbuffer";
|
||||||
SQInteger size;
|
SQInteger size;
|
||||||
sq_getstring(v,2,&src);
|
sq_getstring(v,2,&src);
|
||||||
size=sq_getsize(v,2);
|
size=sq_getsize(v,2);
|
||||||
@@ -213,7 +219,7 @@ static SQInteger base_array(HSQUIRRELVM v)
|
|||||||
SQInteger nInitialSize = tointeger(stack_get(v,2));
|
SQInteger nInitialSize = tointeger(stack_get(v,2));
|
||||||
SQInteger ret = 1;
|
SQInteger ret = 1;
|
||||||
if (nInitialSize < 0) {
|
if (nInitialSize < 0) {
|
||||||
v->Raise_Error(_SC("can't create/resize array with/to size %d"), nInitialSize);
|
v->Raise_Error("can't create/resize array with/to size %d", nInitialSize);
|
||||||
nInitialSize = 0;
|
nInitialSize = 0;
|
||||||
ret = -1;
|
ret = -1;
|
||||||
}
|
}
|
||||||
@@ -238,28 +244,28 @@ static SQInteger base_type(HSQUIRRELVM v)
|
|||||||
static SQRegFunction base_funcs[]={
|
static SQRegFunction base_funcs[]={
|
||||||
//generic
|
//generic
|
||||||
#ifdef EXPORT_DEFAULT_SQUIRREL_FUNCTIONS
|
#ifdef EXPORT_DEFAULT_SQUIRREL_FUNCTIONS
|
||||||
{_SC("seterrorhandler"),base_seterrorhandler,2, NULL},
|
{"seterrorhandler",base_seterrorhandler,2, NULL},
|
||||||
{_SC("setdebughook"),base_setdebughook,2, NULL},
|
{"setdebughook",base_setdebughook,2, NULL},
|
||||||
{_SC("enabledebuginfo"),base_enabledebuginfo,2, NULL},
|
{"enabledebuginfo",base_enabledebuginfo,2, NULL},
|
||||||
{_SC("getstackinfos"),base_getstackinfos,2, _SC(".n")},
|
{"getstackinfos",base_getstackinfos,2, ".n"},
|
||||||
{_SC("getroottable"),base_getroottable,1, NULL},
|
{"getroottable",base_getroottable,1, NULL},
|
||||||
{_SC("setroottable"),base_setroottable,2, NULL},
|
{"setroottable",base_setroottable,2, NULL},
|
||||||
{_SC("getconsttable"),base_getconsttable,1, NULL},
|
{"getconsttable",base_getconsttable,1, NULL},
|
||||||
{_SC("setconsttable"),base_setconsttable,2, NULL},
|
{"setconsttable",base_setconsttable,2, NULL},
|
||||||
#endif
|
#endif
|
||||||
{_SC("assert"),base_assert,2, NULL},
|
{"assert",base_assert,2, NULL},
|
||||||
{_SC("print"),base_print,2, NULL},
|
{"print",base_print,2, NULL},
|
||||||
#ifdef EXPORT_DEFAULT_SQUIRREL_FUNCTIONS
|
#ifdef EXPORT_DEFAULT_SQUIRREL_FUNCTIONS
|
||||||
{_SC("compilestring"),base_compilestring,-2, _SC(".ss")},
|
{"compilestring",base_compilestring,-2, ".ss"},
|
||||||
{_SC("newthread"),base_newthread,2, _SC(".c")},
|
{"newthread",base_newthread,2, ".c"},
|
||||||
{_SC("suspend"),base_suspend,-1, NULL},
|
{"suspend",base_suspend,-1, NULL},
|
||||||
#endif
|
#endif
|
||||||
{_SC("array"),base_array,-2, _SC(".n")},
|
{"array",base_array,-2, ".n"},
|
||||||
{_SC("type"),base_type,2, NULL},
|
{"type",base_type,2, NULL},
|
||||||
#ifdef EXPORT_DEFAULT_SQUIRREL_FUNCTIONS
|
#ifdef EXPORT_DEFAULT_SQUIRREL_FUNCTIONS
|
||||||
{_SC("dummy"),base_dummy,0,NULL},
|
{"dummy",base_dummy,0,NULL},
|
||||||
#ifndef NO_GARBAGE_COLLECTOR
|
#ifndef NO_GARBAGE_COLLECTOR
|
||||||
{_SC("collectgarbage"),base_collectgarbage,1, _SC("t")},
|
{"collectgarbage",base_collectgarbage,1, "t"},
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
{0,0,0,0}
|
{0,0,0,0}
|
||||||
@@ -277,16 +283,16 @@ void sq_base_register(HSQUIRRELVM v)
|
|||||||
sq_createslot(v,-3);
|
sq_createslot(v,-3);
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
sq_pushstring(v,_SC("_version_"),-1);
|
sq_pushstring(v,"_version_",-1);
|
||||||
sq_pushstring(v,SQUIRREL_VERSION,-1);
|
sq_pushstring(v,SQUIRREL_VERSION,-1);
|
||||||
sq_createslot(v,-3);
|
sq_createslot(v,-3);
|
||||||
sq_pushstring(v,_SC("_charsize_"),-1);
|
sq_pushstring(v,"_charsize_",-1);
|
||||||
sq_pushinteger(v,sizeof(SQChar));
|
sq_pushinteger(v,sizeof(SQChar));
|
||||||
sq_createslot(v,-3);
|
sq_createslot(v,-3);
|
||||||
sq_pushstring(v,_SC("_intsize_"),-1);
|
sq_pushstring(v,"_intsize_",-1);
|
||||||
sq_pushinteger(v,sizeof(SQInteger));
|
sq_pushinteger(v,sizeof(SQInteger));
|
||||||
sq_createslot(v,-3);
|
sq_createslot(v,-3);
|
||||||
sq_pushstring(v,_SC("_floatsize_"),-1);
|
sq_pushstring(v,"_floatsize_",-1);
|
||||||
sq_pushinteger(v,sizeof(SQFloat));
|
sq_pushinteger(v,sizeof(SQFloat));
|
||||||
sq_createslot(v,-3);
|
sq_createslot(v,-3);
|
||||||
sq_pop(v,1);
|
sq_pop(v,1);
|
||||||
@@ -308,7 +314,7 @@ static SQInteger default_delegate_tofloat(HSQUIRRELVM v)
|
|||||||
v->Push(SQObjectPtr(tofloat(res)));
|
v->Push(SQObjectPtr(tofloat(res)));
|
||||||
break;
|
break;
|
||||||
}}
|
}}
|
||||||
return sq_throwerror(v, _SC("cannot convert the string"));
|
return sq_throwerror(v, "cannot convert the string");
|
||||||
break;
|
break;
|
||||||
case OT_INTEGER:case OT_FLOAT:
|
case OT_INTEGER:case OT_FLOAT:
|
||||||
v->Push(SQObjectPtr(tofloat(o)));
|
v->Push(SQObjectPtr(tofloat(o)));
|
||||||
@@ -333,7 +339,7 @@ static SQInteger default_delegate_tointeger(HSQUIRRELVM v)
|
|||||||
v->Push(SQObjectPtr(tointeger(res)));
|
v->Push(SQObjectPtr(tointeger(res)));
|
||||||
break;
|
break;
|
||||||
}}
|
}}
|
||||||
return sq_throwerror(v, _SC("cannot convert the string"));
|
return sq_throwerror(v, "cannot convert the string");
|
||||||
break;
|
break;
|
||||||
case OT_INTEGER:case OT_FLOAT:
|
case OT_INTEGER:case OT_FLOAT:
|
||||||
v->Push(SQObjectPtr(tointeger(o)));
|
v->Push(SQObjectPtr(tointeger(o)));
|
||||||
@@ -409,14 +415,14 @@ static SQInteger table_rawget(HSQUIRRELVM v)
|
|||||||
|
|
||||||
|
|
||||||
SQRegFunction SQSharedState::_table_default_delegate_funcz[]={
|
SQRegFunction SQSharedState::_table_default_delegate_funcz[]={
|
||||||
{_SC("len"),default_delegate_len,1, _SC("t")},
|
{"len",default_delegate_len,1, "t"},
|
||||||
{_SC("rawget"),table_rawget,2, _SC("t")},
|
{"rawget",table_rawget,2, "t"},
|
||||||
{_SC("rawset"),table_rawset,3, _SC("t")},
|
{"rawset",table_rawset,3, "t"},
|
||||||
{_SC("rawdelete"),table_rawdelete,2, _SC("t")},
|
{"rawdelete",table_rawdelete,2, "t"},
|
||||||
{_SC("rawin"),container_rawexists,2, _SC("t")},
|
{"rawin",container_rawexists,2, "t"},
|
||||||
{_SC("weakref"),obj_delegate_weakref,1, NULL },
|
{"weakref",obj_delegate_weakref,1, NULL },
|
||||||
{_SC("tostring"),default_delegate_tostring,1, _SC(".")},
|
{"tostring",default_delegate_tostring,1, "."},
|
||||||
{_SC("clear"),obj_clear,1, _SC(".")},
|
{"clear",obj_clear,1, "."},
|
||||||
{0,0,0,0}
|
{0,0,0,0}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -450,7 +456,7 @@ static SQInteger array_top(HSQUIRRELVM v)
|
|||||||
v->Push(_array(o)->Top());
|
v->Push(_array(o)->Top());
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
else return sq_throwerror(v,_SC("top() on a empty array"));
|
else return sq_throwerror(v,"top() on a empty array");
|
||||||
}
|
}
|
||||||
|
|
||||||
static SQInteger array_insert(HSQUIRRELVM v)
|
static SQInteger array_insert(HSQUIRRELVM v)
|
||||||
@@ -459,7 +465,7 @@ static SQInteger array_insert(HSQUIRRELVM v)
|
|||||||
SQObject &idx=stack_get(v,2);
|
SQObject &idx=stack_get(v,2);
|
||||||
SQObject &val=stack_get(v,3);
|
SQObject &val=stack_get(v,3);
|
||||||
if(!_array(o)->Insert(tointeger(idx),val))
|
if(!_array(o)->Insert(tointeger(idx),val))
|
||||||
return sq_throwerror(v,_SC("index out of range"));
|
return sq_throwerror(v,"index out of range");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -467,14 +473,14 @@ static SQInteger array_remove(HSQUIRRELVM v)
|
|||||||
{
|
{
|
||||||
SQObject &o = stack_get(v, 1);
|
SQObject &o = stack_get(v, 1);
|
||||||
SQObject &idx = stack_get(v, 2);
|
SQObject &idx = stack_get(v, 2);
|
||||||
if(!sq_isnumeric(idx)) return sq_throwerror(v, _SC("wrong type"));
|
if(!sq_isnumeric(idx)) return sq_throwerror(v, "wrong type");
|
||||||
SQObjectPtr val;
|
SQObjectPtr val;
|
||||||
if(_array(o)->Get(tointeger(idx), val)) {
|
if(_array(o)->Get(tointeger(idx), val)) {
|
||||||
_array(o)->Remove(tointeger(idx));
|
_array(o)->Remove(tointeger(idx));
|
||||||
v->Push(val);
|
v->Push(val);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
return sq_throwerror(v, _SC("idx out of range"));
|
return sq_throwerror(v, "idx out of range");
|
||||||
}
|
}
|
||||||
|
|
||||||
static SQInteger array_resize(HSQUIRRELVM v)
|
static SQInteger array_resize(HSQUIRRELVM v)
|
||||||
@@ -488,7 +494,7 @@ static SQInteger array_resize(HSQUIRRELVM v)
|
|||||||
_array(o)->Resize(tointeger(nsize),fill);
|
_array(o)->Resize(tointeger(nsize),fill);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return sq_throwerror(v, _SC("size must be a number"));
|
return sq_throwerror(v, "size must be a number");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -505,11 +511,11 @@ bool _sort_compare(HSQUIRRELVM v,SQObjectPtr &a,SQObjectPtr &b,SQInteger func,SQ
|
|||||||
v->Push(b);
|
v->Push(b);
|
||||||
if(SQ_FAILED(sq_call(v, 3, SQTrue, SQFalse))) {
|
if(SQ_FAILED(sq_call(v, 3, SQTrue, SQFalse))) {
|
||||||
if(!sq_isstring( v->_lasterror))
|
if(!sq_isstring( v->_lasterror))
|
||||||
v->Raise_Error(_SC("compare func failed"));
|
v->Raise_Error("compare func failed");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if(SQ_FAILED(sq_getinteger(v, -1, &ret))) {
|
if(SQ_FAILED(sq_getinteger(v, -1, &ret))) {
|
||||||
v->Raise_Error(_SC("numeric value expected as return value of the compare function"));
|
v->Raise_Error("numeric value expected as return value of the compare function");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
sq_settop(v, top);
|
sq_settop(v, top);
|
||||||
@@ -545,7 +551,7 @@ bool _hsort_sift_down(HSQUIRRELVM v,SQArray *arr, SQInteger root, SQInteger bott
|
|||||||
return false;
|
return false;
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
if (root == maxChild) {
|
if (root == maxChild) {
|
||||||
v->Raise_Error(_SC("inconsistent compare function"));
|
v->Raise_Error("inconsistent compare function");
|
||||||
return false; // We'd be swapping ourselve. The compare function is incorrect
|
return false; // We'd be swapping ourselve. The compare function is incorrect
|
||||||
}
|
}
|
||||||
_Swap(arr->_values[root],arr->_values[maxChild]);
|
_Swap(arr->_values[root],arr->_values[maxChild]);
|
||||||
@@ -596,8 +602,8 @@ static SQInteger array_slice(HSQUIRRELVM v)
|
|||||||
SQInteger alen = _array(o)->Size();
|
SQInteger alen = _array(o)->Size();
|
||||||
if(sidx < 0)sidx = alen + sidx;
|
if(sidx < 0)sidx = alen + sidx;
|
||||||
if(eidx < 0)eidx = alen + eidx;
|
if(eidx < 0)eidx = alen + eidx;
|
||||||
if(eidx < sidx)return sq_throwerror(v,_SC("wrong indexes"));
|
if(eidx < sidx)return sq_throwerror(v,"wrong indexes");
|
||||||
if(eidx > alen)return sq_throwerror(v,_SC("slice out of range"));
|
if(eidx > alen)return sq_throwerror(v,"slice out of range");
|
||||||
SQArray *arr=SQArray::Create(_ss(v),eidx-sidx);
|
SQArray *arr=SQArray::Create(_ss(v),eidx-sidx);
|
||||||
SQObjectPtr t;
|
SQObjectPtr t;
|
||||||
SQInteger count=0;
|
SQInteger count=0;
|
||||||
@@ -611,21 +617,21 @@ static SQInteger array_slice(HSQUIRRELVM v)
|
|||||||
}
|
}
|
||||||
|
|
||||||
SQRegFunction SQSharedState::_array_default_delegate_funcz[]={
|
SQRegFunction SQSharedState::_array_default_delegate_funcz[]={
|
||||||
{_SC("len"),default_delegate_len,1, _SC("a")},
|
{"len",default_delegate_len,1, "a"},
|
||||||
{_SC("append"),array_append,2, _SC("a")},
|
{"append",array_append,2, "a"},
|
||||||
{_SC("extend"),array_extend,2, _SC("aa")},
|
{"extend",array_extend,2, "aa"},
|
||||||
{_SC("push"),array_append,2, _SC("a")},
|
{"push",array_append,2, "a"},
|
||||||
{_SC("pop"),array_pop,1, _SC("a")},
|
{"pop",array_pop,1, "a"},
|
||||||
{_SC("top"),array_top,1, _SC("a")},
|
{"top",array_top,1, "a"},
|
||||||
{_SC("insert"),array_insert,3, _SC("an")},
|
{"insert",array_insert,3, "an"},
|
||||||
{_SC("remove"),array_remove,2, _SC("an")},
|
{"remove",array_remove,2, "an"},
|
||||||
{_SC("resize"),array_resize,-2, _SC("an")},
|
{"resize",array_resize,-2, "an"},
|
||||||
{_SC("reverse"),array_reverse,1, _SC("a")},
|
{"reverse",array_reverse,1, "a"},
|
||||||
{_SC("sort"),array_sort,-1, _SC("ac")},
|
{"sort",array_sort,-1, "ac"},
|
||||||
{_SC("slice"),array_slice,-1, _SC("ann")},
|
{"slice",array_slice,-1, "ann"},
|
||||||
{_SC("weakref"),obj_delegate_weakref,1, NULL },
|
{"weakref",obj_delegate_weakref,1, NULL },
|
||||||
{_SC("tostring"),default_delegate_tostring,1, _SC(".")},
|
{"tostring",default_delegate_tostring,1, "."},
|
||||||
{_SC("clear"),obj_clear,1, _SC(".")},
|
{"clear",obj_clear,1, "."},
|
||||||
{0,0,0,0}
|
{0,0,0,0}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -638,8 +644,8 @@ static SQInteger string_slice(HSQUIRRELVM v)
|
|||||||
SQInteger slen = _string(o)->_len;
|
SQInteger slen = _string(o)->_len;
|
||||||
if(sidx < 0)sidx = slen + sidx;
|
if(sidx < 0)sidx = slen + sidx;
|
||||||
if(eidx < 0)eidx = slen + eidx;
|
if(eidx < 0)eidx = slen + eidx;
|
||||||
if(eidx < sidx) return sq_throwerror(v,_SC("wrong indexes"));
|
if(eidx < sidx) return sq_throwerror(v,"wrong indexes");
|
||||||
if(eidx > slen) return sq_throwerror(v,_SC("slice out of range"));
|
if(eidx > slen) return sq_throwerror(v,"slice out of range");
|
||||||
v->Push(SQString::Create(_ss(v),&_stringval(o)[sidx],eidx-sidx));
|
v->Push(SQString::Create(_ss(v),&_stringval(o)[sidx],eidx-sidx));
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@@ -651,7 +657,7 @@ static SQInteger string_find(HSQUIRRELVM v)
|
|||||||
if(((top=sq_gettop(v))>1) && SQ_SUCCEEDED(sq_getstring(v,1,&str)) && SQ_SUCCEEDED(sq_getstring(v,2,&substr))){
|
if(((top=sq_gettop(v))>1) && SQ_SUCCEEDED(sq_getstring(v,1,&str)) && SQ_SUCCEEDED(sq_getstring(v,2,&substr))){
|
||||||
if(top>2)sq_getinteger(v,3,&start_idx);
|
if(top>2)sq_getinteger(v,3,&start_idx);
|
||||||
if((sq_getsize(v,1)>start_idx) && (start_idx>=0)){
|
if((sq_getsize(v,1)>start_idx) && (start_idx>=0)){
|
||||||
ret=scstrstr(&str[start_idx],substr);
|
ret=strstr(&str[start_idx],substr);
|
||||||
if(ret){
|
if(ret){
|
||||||
sq_pushinteger(v,(SQInteger)(ret-str));
|
sq_pushinteger(v,(SQInteger)(ret-str));
|
||||||
return 1;
|
return 1;
|
||||||
@@ -659,7 +665,7 @@ static SQInteger string_find(HSQUIRRELVM v)
|
|||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return sq_throwerror(v,_SC("invalid param"));
|
return sq_throwerror(v,"invalid param");
|
||||||
}
|
}
|
||||||
|
|
||||||
#define STRING_TOFUNCZ(func) static SQInteger string_##func(HSQUIRRELVM v) \
|
#define STRING_TOFUNCZ(func) static SQInteger string_##func(HSQUIRRELVM v) \
|
||||||
@@ -667,7 +673,7 @@ static SQInteger string_find(HSQUIRRELVM v)
|
|||||||
SQObject str=stack_get(v,1); \
|
SQObject str=stack_get(v,1); \
|
||||||
SQInteger len=_string(str)->_len; \
|
SQInteger len=_string(str)->_len; \
|
||||||
const SQChar *sThis=_stringval(str); \
|
const SQChar *sThis=_stringval(str); \
|
||||||
SQChar *sNew=(_ss(v)->GetScratchPad(rsl(len))); \
|
SQChar *sNew=(_ss(v)->GetScratchPad(len)); \
|
||||||
for(SQInteger i=0;i<len;i++) sNew[i]=func(sThis[i]); \
|
for(SQInteger i=0;i<len;i++) sNew[i]=func(sThis[i]); \
|
||||||
v->Push(SQString::Create(_ss(v),sNew,len)); \
|
v->Push(SQString::Create(_ss(v),sNew,len)); \
|
||||||
return 1; \
|
return 1; \
|
||||||
@@ -678,25 +684,25 @@ STRING_TOFUNCZ(tolower)
|
|||||||
STRING_TOFUNCZ(toupper)
|
STRING_TOFUNCZ(toupper)
|
||||||
|
|
||||||
SQRegFunction SQSharedState::_string_default_delegate_funcz[]={
|
SQRegFunction SQSharedState::_string_default_delegate_funcz[]={
|
||||||
{_SC("len"),default_delegate_len,1, _SC("s")},
|
{"len",default_delegate_len,1, "s"},
|
||||||
{_SC("tointeger"),default_delegate_tointeger,1, _SC("s")},
|
{"tointeger",default_delegate_tointeger,1, "s"},
|
||||||
{_SC("tofloat"),default_delegate_tofloat,1, _SC("s")},
|
{"tofloat",default_delegate_tofloat,1, "s"},
|
||||||
{_SC("tostring"),default_delegate_tostring,1, _SC(".")},
|
{"tostring",default_delegate_tostring,1, "."},
|
||||||
{_SC("slice"),string_slice,-1, _SC(" s n n")},
|
{"slice",string_slice,-1, " s n n"},
|
||||||
{_SC("find"),string_find,-2, _SC("s s n ")},
|
{"find",string_find,-2, "s s n "},
|
||||||
{_SC("tolower"),string_tolower,1, _SC("s")},
|
{"tolower",string_tolower,1, "s"},
|
||||||
{_SC("toupper"),string_toupper,1, _SC("s")},
|
{"toupper",string_toupper,1, "s"},
|
||||||
{_SC("weakref"),obj_delegate_weakref,1, NULL },
|
{"weakref",obj_delegate_weakref,1, NULL },
|
||||||
{0,0,0,0}
|
{0,0,0,0}
|
||||||
};
|
};
|
||||||
|
|
||||||
//INTEGER DEFAULT DELEGATE//////////////////////////
|
//INTEGER DEFAULT DELEGATE//////////////////////////
|
||||||
SQRegFunction SQSharedState::_number_default_delegate_funcz[]={
|
SQRegFunction SQSharedState::_number_default_delegate_funcz[]={
|
||||||
{_SC("tointeger"),default_delegate_tointeger,1, _SC("n|b")},
|
{"tointeger",default_delegate_tointeger,1, "n|b"},
|
||||||
{_SC("tofloat"),default_delegate_tofloat,1, _SC("n|b")},
|
{"tofloat",default_delegate_tofloat,1, "n|b"},
|
||||||
{_SC("tostring"),default_delegate_tostring,1, _SC(".")},
|
{"tostring",default_delegate_tostring,1, "."},
|
||||||
{_SC("tochar"),number_delegate_tochar,1, _SC("n|b")},
|
{"tochar",number_delegate_tochar,1, "n|b"},
|
||||||
{_SC("weakref"),obj_delegate_weakref,1, NULL },
|
{"weakref",obj_delegate_weakref,1, NULL },
|
||||||
{0,0,0,0}
|
{0,0,0,0}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -748,19 +754,19 @@ static SQInteger closure_getinfos(HSQUIRRELVM v) {
|
|||||||
_array(params)->Set((SQInteger)n,f->_parameters[n]);
|
_array(params)->Set((SQInteger)n,f->_parameters[n]);
|
||||||
}
|
}
|
||||||
if(f->_varparams) {
|
if(f->_varparams) {
|
||||||
_array(params)->Set(nparams-1,SQString::Create(_ss(v),_SC("..."),-1));
|
_array(params)->Set(nparams-1,SQString::Create(_ss(v),"...",-1));
|
||||||
}
|
}
|
||||||
res->NewSlot(SQString::Create(_ss(v),_SC("native"),-1),false);
|
res->NewSlot(SQString::Create(_ss(v),"native",-1),false);
|
||||||
res->NewSlot(SQString::Create(_ss(v),_SC("name"),-1),f->_name);
|
res->NewSlot(SQString::Create(_ss(v),"name",-1),f->_name);
|
||||||
res->NewSlot(SQString::Create(_ss(v),_SC("src"),-1),f->_sourcename);
|
res->NewSlot(SQString::Create(_ss(v),"src",-1),f->_sourcename);
|
||||||
res->NewSlot(SQString::Create(_ss(v),_SC("parameters"),-1),params);
|
res->NewSlot(SQString::Create(_ss(v),"parameters",-1),params);
|
||||||
res->NewSlot(SQString::Create(_ss(v),_SC("varargs"),-1),f->_varparams);
|
res->NewSlot(SQString::Create(_ss(v),"varargs",-1),f->_varparams);
|
||||||
}
|
}
|
||||||
else { //OT_NATIVECLOSURE
|
else { //OT_NATIVECLOSURE
|
||||||
SQNativeClosure *nc = _nativeclosure(o);
|
SQNativeClosure *nc = _nativeclosure(o);
|
||||||
res->NewSlot(SQString::Create(_ss(v),_SC("native"),-1),true);
|
res->NewSlot(SQString::Create(_ss(v),"native",-1),true);
|
||||||
res->NewSlot(SQString::Create(_ss(v),_SC("name"),-1),nc->_name);
|
res->NewSlot(SQString::Create(_ss(v),"name",-1),nc->_name);
|
||||||
res->NewSlot(SQString::Create(_ss(v),_SC("paramscheck"),-1),nc->_nparamscheck);
|
res->NewSlot(SQString::Create(_ss(v),"paramscheck",-1),nc->_nparamscheck);
|
||||||
SQObjectPtr typecheck;
|
SQObjectPtr typecheck;
|
||||||
if(nc->_typecheck.size() > 0) {
|
if(nc->_typecheck.size() > 0) {
|
||||||
typecheck =
|
typecheck =
|
||||||
@@ -769,7 +775,7 @@ static SQInteger closure_getinfos(HSQUIRRELVM v) {
|
|||||||
_array(typecheck)->Set((SQInteger)n,nc->_typecheck[n]);
|
_array(typecheck)->Set((SQInteger)n,nc->_typecheck[n]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
res->NewSlot(SQString::Create(_ss(v),_SC("typecheck"),-1),typecheck);
|
res->NewSlot(SQString::Create(_ss(v),"typecheck",-1),typecheck);
|
||||||
}
|
}
|
||||||
v->Push(res);
|
v->Push(res);
|
||||||
return 1;
|
return 1;
|
||||||
@@ -777,14 +783,14 @@ static SQInteger closure_getinfos(HSQUIRRELVM v) {
|
|||||||
|
|
||||||
|
|
||||||
SQRegFunction SQSharedState::_closure_default_delegate_funcz[]={
|
SQRegFunction SQSharedState::_closure_default_delegate_funcz[]={
|
||||||
{_SC("call"),closure_call,-1, _SC("c")},
|
{"call",closure_call,-1, "c"},
|
||||||
{_SC("pcall"),closure_pcall,-1, _SC("c")},
|
{"pcall",closure_pcall,-1, "c"},
|
||||||
{_SC("acall"),closure_acall,2, _SC("ca")},
|
{"acall",closure_acall,2, "ca"},
|
||||||
{_SC("pacall"),closure_pacall,2, _SC("ca")},
|
{"pacall",closure_pacall,2, "ca"},
|
||||||
{_SC("weakref"),obj_delegate_weakref,1, NULL },
|
{"weakref",obj_delegate_weakref,1, NULL },
|
||||||
{_SC("tostring"),default_delegate_tostring,1, _SC(".")},
|
{"tostring",default_delegate_tostring,1, "."},
|
||||||
{_SC("bindenv"),closure_bindenv,2, _SC("c x|y|t")},
|
{"bindenv",closure_bindenv,2, "c x|y|t"},
|
||||||
{_SC("getinfos"),closure_getinfos,1, _SC("c")},
|
{"getinfos",closure_getinfos,1, "c"},
|
||||||
{0,0,0,0}
|
{0,0,0,0}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -793,17 +799,17 @@ static SQInteger generator_getstatus(HSQUIRRELVM v)
|
|||||||
{
|
{
|
||||||
SQObject &o=stack_get(v,1);
|
SQObject &o=stack_get(v,1);
|
||||||
switch(_generator(o)->_state){
|
switch(_generator(o)->_state){
|
||||||
case SQGenerator::eSuspended:v->Push(SQString::Create(_ss(v),_SC("suspended")));break;
|
case SQGenerator::eSuspended:v->Push(SQString::Create(_ss(v),"suspended"));break;
|
||||||
case SQGenerator::eRunning:v->Push(SQString::Create(_ss(v),_SC("running")));break;
|
case SQGenerator::eRunning:v->Push(SQString::Create(_ss(v),"running"));break;
|
||||||
case SQGenerator::eDead:v->Push(SQString::Create(_ss(v),_SC("dead")));break;
|
case SQGenerator::eDead:v->Push(SQString::Create(_ss(v),"dead"));break;
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
SQRegFunction SQSharedState::_generator_default_delegate_funcz[]={
|
SQRegFunction SQSharedState::_generator_default_delegate_funcz[]={
|
||||||
{_SC("getstatus"),generator_getstatus,1, _SC("g")},
|
{"getstatus",generator_getstatus,1, "g"},
|
||||||
{_SC("weakref"),obj_delegate_weakref,1, NULL },
|
{"weakref",obj_delegate_weakref,1, NULL },
|
||||||
{_SC("tostring"),default_delegate_tostring,1, _SC(".")},
|
{"tostring",default_delegate_tostring,1, "."},
|
||||||
{0,0,0,0}
|
{0,0,0,0}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -826,7 +832,7 @@ static SQInteger thread_call(HSQUIRRELVM v)
|
|||||||
v->_lasterror = _thread(o)->_lasterror;
|
v->_lasterror = _thread(o)->_lasterror;
|
||||||
return SQ_ERROR;
|
return SQ_ERROR;
|
||||||
}
|
}
|
||||||
return sq_throwerror(v,_SC("wrong parameter"));
|
return sq_throwerror(v,"wrong parameter");
|
||||||
}
|
}
|
||||||
|
|
||||||
static SQInteger thread_wakeup(HSQUIRRELVM v)
|
static SQInteger thread_wakeup(HSQUIRRELVM v)
|
||||||
@@ -838,10 +844,10 @@ static SQInteger thread_wakeup(HSQUIRRELVM v)
|
|||||||
if(state != SQ_VMSTATE_SUSPENDED) {
|
if(state != SQ_VMSTATE_SUSPENDED) {
|
||||||
switch(state) {
|
switch(state) {
|
||||||
case SQ_VMSTATE_IDLE:
|
case SQ_VMSTATE_IDLE:
|
||||||
return sq_throwerror(v,_SC("cannot wakeup a idle thread"));
|
return sq_throwerror(v,"cannot wakeup a idle thread");
|
||||||
break;
|
break;
|
||||||
case SQ_VMSTATE_RUNNING:
|
case SQ_VMSTATE_RUNNING:
|
||||||
return sq_throwerror(v,_SC("cannot wakeup a running thread"));
|
return sq_throwerror(v,"cannot wakeup a running thread");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -862,7 +868,7 @@ static SQInteger thread_wakeup(HSQUIRRELVM v)
|
|||||||
v->_lasterror = thread->_lasterror;
|
v->_lasterror = thread->_lasterror;
|
||||||
return SQ_ERROR;
|
return SQ_ERROR;
|
||||||
}
|
}
|
||||||
return sq_throwerror(v,_SC("wrong parameter"));
|
return sq_throwerror(v,"wrong parameter");
|
||||||
}
|
}
|
||||||
|
|
||||||
static SQInteger thread_getstatus(HSQUIRRELVM v)
|
static SQInteger thread_getstatus(HSQUIRRELVM v)
|
||||||
@@ -870,26 +876,26 @@ static SQInteger thread_getstatus(HSQUIRRELVM v)
|
|||||||
SQObjectPtr &o = stack_get(v,1);
|
SQObjectPtr &o = stack_get(v,1);
|
||||||
switch(sq_getvmstate(_thread(o))) {
|
switch(sq_getvmstate(_thread(o))) {
|
||||||
case SQ_VMSTATE_IDLE:
|
case SQ_VMSTATE_IDLE:
|
||||||
sq_pushstring(v,_SC("idle"),-1);
|
sq_pushstring(v,"idle",-1);
|
||||||
break;
|
break;
|
||||||
case SQ_VMSTATE_RUNNING:
|
case SQ_VMSTATE_RUNNING:
|
||||||
sq_pushstring(v,_SC("running"),-1);
|
sq_pushstring(v,"running",-1);
|
||||||
break;
|
break;
|
||||||
case SQ_VMSTATE_SUSPENDED:
|
case SQ_VMSTATE_SUSPENDED:
|
||||||
sq_pushstring(v,_SC("suspended"),-1);
|
sq_pushstring(v,"suspended",-1);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return sq_throwerror(v,_SC("internal VM error"));
|
return sq_throwerror(v,"internal VM error");
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
SQRegFunction SQSharedState::_thread_default_delegate_funcz[] = {
|
SQRegFunction SQSharedState::_thread_default_delegate_funcz[] = {
|
||||||
{_SC("call"), thread_call, -1, _SC("v")},
|
{"call", thread_call, -1, "v"},
|
||||||
{_SC("wakeup"), thread_wakeup, -1, _SC("v")},
|
{"wakeup", thread_wakeup, -1, "v"},
|
||||||
{_SC("getstatus"), thread_getstatus, 1, _SC("v")},
|
{"getstatus", thread_getstatus, 1, "v"},
|
||||||
{_SC("weakref"),obj_delegate_weakref,1, NULL },
|
{"weakref",obj_delegate_weakref,1, NULL },
|
||||||
{_SC("tostring"),default_delegate_tostring,1, _SC(".")},
|
{"tostring",default_delegate_tostring,1, "."},
|
||||||
{0,0,0,0},
|
{0,0,0,0},
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -915,12 +921,12 @@ static SQInteger class_instance(HSQUIRRELVM v)
|
|||||||
}
|
}
|
||||||
|
|
||||||
SQRegFunction SQSharedState::_class_default_delegate_funcz[] = {
|
SQRegFunction SQSharedState::_class_default_delegate_funcz[] = {
|
||||||
{_SC("getattributes"), class_getattributes, 2, _SC("y.")},
|
{"getattributes", class_getattributes, 2, "y."},
|
||||||
{_SC("setattributes"), class_setattributes, 3, _SC("y..")},
|
{"setattributes", class_setattributes, 3, "y.."},
|
||||||
{_SC("rawin"),container_rawexists,2, _SC("y")},
|
{"rawin",container_rawexists,2, "y"},
|
||||||
{_SC("weakref"),obj_delegate_weakref,1, NULL },
|
{"weakref",obj_delegate_weakref,1, NULL },
|
||||||
{_SC("tostring"),default_delegate_tostring,1, _SC(".")},
|
{"tostring",default_delegate_tostring,1, "."},
|
||||||
{_SC("instance"),class_instance,1, _SC("y")},
|
{"instance",class_instance,1, "y"},
|
||||||
{0,0,0,0}
|
{0,0,0,0}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -932,10 +938,10 @@ static SQInteger instance_getclass(HSQUIRRELVM v)
|
|||||||
}
|
}
|
||||||
|
|
||||||
SQRegFunction SQSharedState::_instance_default_delegate_funcz[] = {
|
SQRegFunction SQSharedState::_instance_default_delegate_funcz[] = {
|
||||||
{_SC("getclass"), instance_getclass, 1, _SC("x")},
|
{"getclass", instance_getclass, 1, "x"},
|
||||||
{_SC("rawin"),container_rawexists,2, _SC("x")},
|
{"rawin",container_rawexists,2, "x"},
|
||||||
{_SC("weakref"),obj_delegate_weakref,1, NULL },
|
{"weakref",obj_delegate_weakref,1, NULL },
|
||||||
{_SC("tostring"),default_delegate_tostring,1, _SC(".")},
|
{"tostring",default_delegate_tostring,1, "."},
|
||||||
{0,0,0,0}
|
{0,0,0,0}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -947,9 +953,9 @@ static SQInteger weakref_ref(HSQUIRRELVM v)
|
|||||||
}
|
}
|
||||||
|
|
||||||
SQRegFunction SQSharedState::_weakref_default_delegate_funcz[] = {
|
SQRegFunction SQSharedState::_weakref_default_delegate_funcz[] = {
|
||||||
{_SC("ref"),weakref_ref,1, _SC("r")},
|
{"ref",weakref_ref,1, "r"},
|
||||||
{_SC("weakref"),obj_delegate_weakref,1, NULL },
|
{"weakref",obj_delegate_weakref,1, NULL },
|
||||||
{_SC("tostring"),default_delegate_tostring,1, _SC(".")},
|
{"tostring",default_delegate_tostring,1, "."},
|
||||||
{0,0,0,0}
|
{0,0,0,0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
9
src/3rdparty/squirrel/squirrel/sqclass.cpp
vendored
9
src/3rdparty/squirrel/squirrel/sqclass.cpp
vendored
@@ -1,12 +1,17 @@
|
|||||||
/*
|
/*
|
||||||
see copyright notice in squirrel.h
|
* see copyright notice in squirrel.h
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "../../../stdafx.h"
|
||||||
|
|
||||||
#include "sqpcheader.h"
|
#include "sqpcheader.h"
|
||||||
#include "sqvm.h"
|
#include "sqvm.h"
|
||||||
#include "sqtable.h"
|
#include "sqtable.h"
|
||||||
#include "sqclass.h"
|
#include "sqclass.h"
|
||||||
#include "sqclosure.h"
|
#include "sqclosure.h"
|
||||||
|
|
||||||
|
#include "../../../safeguards.h"
|
||||||
|
|
||||||
SQClass::SQClass(SQSharedState *ss,SQClass *base)
|
SQClass::SQClass(SQSharedState *ss,SQClass *base)
|
||||||
{
|
{
|
||||||
_base = base;
|
_base = base;
|
||||||
|
|||||||
2
src/3rdparty/squirrel/squirrel/sqclosure.h
vendored
2
src/3rdparty/squirrel/squirrel/sqclosure.h
vendored
@@ -80,7 +80,7 @@ public:
|
|||||||
struct SQNativeClosure : public CHAINABLE_OBJ
|
struct SQNativeClosure : public CHAINABLE_OBJ
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
SQNativeClosure(SQSharedState *ss,SQFUNCTION func){_function=func;INIT_CHAIN();ADD_TO_CHAIN(&_ss(this)->_gc_chain,this); }
|
SQNativeClosure(SQSharedState *ss,SQFUNCTION func) : _nparamscheck(0) {_function=func;INIT_CHAIN();ADD_TO_CHAIN(&_ss(this)->_gc_chain,this); }
|
||||||
public:
|
public:
|
||||||
static SQNativeClosure *Create(SQSharedState *ss,SQFUNCTION func)
|
static SQNativeClosure *Create(SQSharedState *ss,SQFUNCTION func)
|
||||||
{
|
{
|
||||||
|
|||||||
277
src/3rdparty/squirrel/squirrel/sqcompiler.cpp
vendored
277
src/3rdparty/squirrel/squirrel/sqcompiler.cpp
vendored
@@ -1,6 +1,9 @@
|
|||||||
/*
|
/*
|
||||||
see copyright notice in squirrel.h
|
* see copyright notice in squirrel.h
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "../../../stdafx.h"
|
||||||
|
|
||||||
#include <squirrel.h>
|
#include <squirrel.h>
|
||||||
#include "sqpcheader.h"
|
#include "sqpcheader.h"
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
@@ -13,6 +16,10 @@
|
|||||||
#include "sqvm.h"
|
#include "sqvm.h"
|
||||||
#include "sqtable.h"
|
#include "sqtable.h"
|
||||||
|
|
||||||
|
#include "../../../string_func.h"
|
||||||
|
|
||||||
|
#include "../../../safeguards.h"
|
||||||
|
|
||||||
#define DEREF_NO_DEREF -1
|
#define DEREF_NO_DEREF -1
|
||||||
#define DEREF_FIELD -2
|
#define DEREF_FIELD -2
|
||||||
|
|
||||||
@@ -50,23 +57,22 @@ typedef sqvector<ExpState> ExpStateVec;
|
|||||||
class SQCompiler
|
class SQCompiler
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
SQCompiler(SQVM *v, SQLEXREADFUNC rg, SQUserPointer up, const SQChar* sourcename, bool raiseerror, bool lineinfo)
|
SQCompiler(SQVM *v, SQLEXREADFUNC rg, SQUserPointer up, const SQChar* sourcename, bool raiseerror, bool lineinfo) : _lex(_ss(v), rg, up,ThrowError,this)
|
||||||
{
|
{
|
||||||
_vm=v;
|
_vm=v;
|
||||||
_lex.Init(_ss(v), rg, up,ThrowError,this);
|
|
||||||
_sourcename = SQString::Create(_ss(v), sourcename);
|
_sourcename = SQString::Create(_ss(v), sourcename);
|
||||||
_lineinfo = lineinfo;_raiseerror = raiseerror;
|
_lineinfo = lineinfo;_raiseerror = raiseerror;
|
||||||
}
|
}
|
||||||
static void ThrowError(void *ud, const SQChar *s) {
|
NORETURN static void ThrowError(void *ud, const SQChar *s) {
|
||||||
SQCompiler *c = (SQCompiler *)ud;
|
SQCompiler *c = (SQCompiler *)ud;
|
||||||
c->Error(s);
|
c->Error(s);
|
||||||
}
|
}
|
||||||
void Error(const SQChar *s, ...)
|
NORETURN void Error(const SQChar *s, ...)
|
||||||
{
|
{
|
||||||
static SQChar temp[256];
|
static SQChar temp[256];
|
||||||
va_list vl;
|
va_list vl;
|
||||||
va_start(vl, s);
|
va_start(vl, s);
|
||||||
scvsprintf(temp, s, vl);
|
vseprintf(temp, lastof(temp), s, vl);
|
||||||
va_end(vl);
|
va_end(vl);
|
||||||
throw temp;
|
throw temp;
|
||||||
}
|
}
|
||||||
@@ -75,7 +81,7 @@ public:
|
|||||||
bool IsDerefToken(SQInteger tok)
|
bool IsDerefToken(SQInteger tok)
|
||||||
{
|
{
|
||||||
switch(tok){
|
switch(tok){
|
||||||
case _SC('='): case _SC('('): case TK_NEWSLOT:
|
case '=': case '(': case TK_NEWSLOT:
|
||||||
case TK_MODEQ: case TK_MULEQ: case TK_DIVEQ: case TK_MINUSEQ: case TK_PLUSEQ: case TK_PLUSPLUS: case TK_MINUSMINUS: return true;
|
case TK_MODEQ: case TK_MULEQ: case TK_DIVEQ: case TK_MINUSEQ: case TK_PLUSEQ: case TK_PLUSPLUS: case TK_MINUSMINUS: return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@@ -91,7 +97,7 @@ public:
|
|||||||
|
|
||||||
if(_token != tok) {
|
if(_token != tok) {
|
||||||
if(_token == TK_CONSTRUCTOR && tok == TK_IDENTIFIER) {
|
if(_token == TK_CONSTRUCTOR && tok == TK_IDENTIFIER) {
|
||||||
//ret = SQString::Create(_ss(_vm),_SC("constructor"));
|
//ret = SQString::Create(_ss(_vm),"constructor");
|
||||||
//do nothing
|
//do nothing
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -100,23 +106,23 @@ public:
|
|||||||
switch(tok)
|
switch(tok)
|
||||||
{
|
{
|
||||||
case TK_IDENTIFIER:
|
case TK_IDENTIFIER:
|
||||||
etypename = _SC("IDENTIFIER");
|
etypename = "IDENTIFIER";
|
||||||
break;
|
break;
|
||||||
case TK_STRING_LITERAL:
|
case TK_STRING_LITERAL:
|
||||||
etypename = _SC("STRING_LITERAL");
|
etypename = "STRING_LITERAL";
|
||||||
break;
|
break;
|
||||||
case TK_INTEGER:
|
case TK_INTEGER:
|
||||||
etypename = _SC("INTEGER");
|
etypename = "INTEGER";
|
||||||
break;
|
break;
|
||||||
case TK_FLOAT:
|
case TK_FLOAT:
|
||||||
etypename = _SC("FLOAT");
|
etypename = "FLOAT";
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
etypename = _lex.Tok2Str(tok);
|
etypename = _lex.Tok2Str(tok);
|
||||||
}
|
}
|
||||||
Error(_SC("expected '%s'"), etypename);
|
Error("expected '%s'", etypename);
|
||||||
}
|
}
|
||||||
Error(_SC("expected '%c'"), tok);
|
Error("expected '%c'", tok);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
SQObjectPtr ret;
|
SQObjectPtr ret;
|
||||||
@@ -138,12 +144,12 @@ public:
|
|||||||
Lex();
|
Lex();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
bool IsEndOfStatement() { return ((_lex._prevtoken == _SC('\n')) || (_token == SQUIRREL_EOB) || (_token == _SC('}')) || (_token == _SC(';'))); }
|
bool IsEndOfStatement() { return ((_lex._prevtoken == '\n') || (_token == SQUIRREL_EOB) || (_token == '}') || (_token == ';')); }
|
||||||
void OptionalSemicolon()
|
void OptionalSemicolon()
|
||||||
{
|
{
|
||||||
if(_token == _SC(';')) { Lex(); return; }
|
if(_token == ';') { Lex(); return; }
|
||||||
if(!IsEndOfStatement()) {
|
if(!IsEndOfStatement()) {
|
||||||
Error(_SC("end of statement expected (; or lf)"));
|
Error("end of statement expected (; or lf)");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void MoveIfCurrentTargetIsLocal() {
|
void MoveIfCurrentTargetIsLocal() {
|
||||||
@@ -159,16 +165,16 @@ public:
|
|||||||
_debugop = 0;
|
_debugop = 0;
|
||||||
|
|
||||||
SQFuncState funcstate(_ss(_vm), NULL,ThrowError,this);
|
SQFuncState funcstate(_ss(_vm), NULL,ThrowError,this);
|
||||||
funcstate._name = SQString::Create(_ss(_vm), _SC("main"));
|
funcstate._name = SQString::Create(_ss(_vm), "main");
|
||||||
_fs = &funcstate;
|
_fs = &funcstate;
|
||||||
_fs->AddParameter(_fs->CreateString(_SC("this")));
|
_fs->AddParameter(_fs->CreateString("this"));
|
||||||
_fs->_sourcename = _sourcename;
|
_fs->_sourcename = _sourcename;
|
||||||
SQInteger stacksize = _fs->GetStackSize();
|
SQInteger stacksize = _fs->GetStackSize();
|
||||||
try {
|
try {
|
||||||
Lex();
|
Lex();
|
||||||
while(_token > 0){
|
while(_token > 0){
|
||||||
Statement();
|
Statement();
|
||||||
if(_lex._prevtoken != _SC('}')) OptionalSemicolon();
|
if(_lex._prevtoken != '}') OptionalSemicolon();
|
||||||
}
|
}
|
||||||
CleanStack(stacksize);
|
CleanStack(stacksize);
|
||||||
_fs->AddLineInfos(_lex._currentline, _lineinfo, true);
|
_fs->AddLineInfos(_lex._currentline, _lineinfo, true);
|
||||||
@@ -182,7 +188,7 @@ public:
|
|||||||
}
|
}
|
||||||
catch (SQChar *compilererror) {
|
catch (SQChar *compilererror) {
|
||||||
if(_raiseerror && _ss(_vm)->_compilererrorhandler) {
|
if(_raiseerror && _ss(_vm)->_compilererrorhandler) {
|
||||||
_ss(_vm)->_compilererrorhandler(_vm, compilererror, type(_sourcename) == OT_STRING?_stringval(_sourcename):_SC("unknown"),
|
_ss(_vm)->_compilererrorhandler(_vm, compilererror, type(_sourcename) == OT_STRING?_stringval(_sourcename):"unknown",
|
||||||
_lex._currentline, _lex._currentcolumn);
|
_lex._currentline, _lex._currentcolumn);
|
||||||
}
|
}
|
||||||
_vm->_lasterror = SQString::Create(_ss(_vm), compilererror, -1);
|
_vm->_lasterror = SQString::Create(_ss(_vm), compilererror, -1);
|
||||||
@@ -191,16 +197,16 @@ public:
|
|||||||
}
|
}
|
||||||
void Statements()
|
void Statements()
|
||||||
{
|
{
|
||||||
while(_token != _SC('}') && _token != TK_DEFAULT && _token != TK_CASE) {
|
while(_token != '}' && _token != TK_DEFAULT && _token != TK_CASE) {
|
||||||
Statement();
|
Statement();
|
||||||
if(_lex._prevtoken != _SC('}') && _lex._prevtoken != _SC(';')) OptionalSemicolon();
|
if(_lex._prevtoken != '}' && _lex._prevtoken != ';') OptionalSemicolon();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void Statement()
|
void Statement()
|
||||||
{
|
{
|
||||||
_fs->AddLineInfos(_lex._currentline, _lineinfo);
|
_fs->AddLineInfos(_lex._currentline, _lineinfo);
|
||||||
switch(_token){
|
switch(_token){
|
||||||
case _SC(';'): Lex(); break;
|
case ';': Lex(); break;
|
||||||
case TK_IF: IfStatement(); break;
|
case TK_IF: IfStatement(); break;
|
||||||
case TK_WHILE: WhileStatement(); break;
|
case TK_WHILE: WhileStatement(); break;
|
||||||
case TK_DO: DoWhileStatement(); break;
|
case TK_DO: DoWhileStatement(); break;
|
||||||
@@ -236,7 +242,7 @@ public:
|
|||||||
}
|
}
|
||||||
break;}
|
break;}
|
||||||
case TK_BREAK:
|
case TK_BREAK:
|
||||||
if(_fs->_breaktargets.size() <= 0)Error(_SC("'break' has to be in a loop block"));
|
if(_fs->_breaktargets.size() <= 0)Error("'break' has to be in a loop block");
|
||||||
if(_fs->_breaktargets.top() > 0){
|
if(_fs->_breaktargets.top() > 0){
|
||||||
_fs->AddInstruction(_OP_POPTRAP, _fs->_breaktargets.top(), 0);
|
_fs->AddInstruction(_OP_POPTRAP, _fs->_breaktargets.top(), 0);
|
||||||
}
|
}
|
||||||
@@ -246,7 +252,7 @@ public:
|
|||||||
Lex();
|
Lex();
|
||||||
break;
|
break;
|
||||||
case TK_CONTINUE:
|
case TK_CONTINUE:
|
||||||
if(_fs->_continuetargets.size() <= 0)Error(_SC("'continue' has to be in a loop block"));
|
if(_fs->_continuetargets.size() <= 0)Error("'continue' has to be in a loop block");
|
||||||
if(_fs->_continuetargets.top() > 0) {
|
if(_fs->_continuetargets.top() > 0) {
|
||||||
_fs->AddInstruction(_OP_POPTRAP, _fs->_continuetargets.top(), 0);
|
_fs->AddInstruction(_OP_POPTRAP, _fs->_continuetargets.top(), 0);
|
||||||
}
|
}
|
||||||
@@ -264,11 +270,11 @@ public:
|
|||||||
case TK_ENUM:
|
case TK_ENUM:
|
||||||
EnumStatement();
|
EnumStatement();
|
||||||
break;
|
break;
|
||||||
case _SC('{'):{
|
case '{':{
|
||||||
SQInteger stacksize = _fs->GetStackSize();
|
SQInteger stacksize = _fs->GetStackSize();
|
||||||
Lex();
|
Lex();
|
||||||
Statements();
|
Statements();
|
||||||
Expect(_SC('}'));
|
Expect('}');
|
||||||
_fs->AddInstruction(_OP_SCOPE_END, stacksize, _fs->GetStackSize());
|
_fs->AddInstruction(_OP_SCOPE_END, stacksize, _fs->GetStackSize());
|
||||||
_fs->SetStackSize(stacksize);
|
_fs->SetStackSize(stacksize);
|
||||||
}
|
}
|
||||||
@@ -348,7 +354,7 @@ public:
|
|||||||
_exst._funcarg = funcarg;
|
_exst._funcarg = funcarg;
|
||||||
LogicalOrExp();
|
LogicalOrExp();
|
||||||
switch(_token) {
|
switch(_token) {
|
||||||
case _SC('='):
|
case '=':
|
||||||
case TK_NEWSLOT:
|
case TK_NEWSLOT:
|
||||||
case TK_MINUSEQ:
|
case TK_MINUSEQ:
|
||||||
case TK_PLUSEQ:
|
case TK_PLUSEQ:
|
||||||
@@ -359,19 +365,19 @@ public:
|
|||||||
SQInteger op = _token;
|
SQInteger op = _token;
|
||||||
SQInteger ds = _exst._deref;
|
SQInteger ds = _exst._deref;
|
||||||
bool freevar = _exst._freevar;
|
bool freevar = _exst._freevar;
|
||||||
if(ds == DEREF_NO_DEREF) Error(_SC("can't assign expression"));
|
if(ds == DEREF_NO_DEREF) Error("can't assign expression");
|
||||||
Lex(); Expression();
|
Lex(); Expression();
|
||||||
|
|
||||||
switch(op){
|
switch(op){
|
||||||
case TK_NEWSLOT:
|
case TK_NEWSLOT:
|
||||||
if(freevar) Error(_SC("free variables cannot be modified"));
|
if(freevar) Error("free variables cannot be modified");
|
||||||
if(ds == DEREF_FIELD)
|
if(ds == DEREF_FIELD)
|
||||||
EmitDerefOp(_OP_NEWSLOT);
|
EmitDerefOp(_OP_NEWSLOT);
|
||||||
else //if _derefstate != DEREF_NO_DEREF && DEREF_FIELD so is the index of a local
|
else //if _derefstate != DEREF_NO_DEREF && DEREF_FIELD so is the index of a local
|
||||||
Error(_SC("can't 'create' a local slot"));
|
Error("can't 'create' a local slot");
|
||||||
break;
|
break;
|
||||||
case _SC('='): //ASSIGN
|
case '=': //ASSIGN
|
||||||
if(freevar) Error(_SC("free variables cannot be modified"));
|
if(freevar) Error("free variables cannot be modified");
|
||||||
if(ds == DEREF_FIELD)
|
if(ds == DEREF_FIELD)
|
||||||
EmitDerefOp(_OP_SET);
|
EmitDerefOp(_OP_SET);
|
||||||
else {//if _derefstate != DEREF_NO_DEREF && DEREF_FIELD so is the index of a local
|
else {//if _derefstate != DEREF_NO_DEREF && DEREF_FIELD so is the index of a local
|
||||||
@@ -390,7 +396,7 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case _SC('?'): {
|
case '?': {
|
||||||
Lex();
|
Lex();
|
||||||
_fs->AddInstruction(_OP_JZ, _fs->PopTarget());
|
_fs->AddInstruction(_OP_JZ, _fs->PopTarget());
|
||||||
SQInteger jzpos = _fs->GetCurrentPos();
|
SQInteger jzpos = _fs->GetCurrentPos();
|
||||||
@@ -400,7 +406,7 @@ public:
|
|||||||
if(trg != first_exp) _fs->AddInstruction(_OP_MOVE, trg, first_exp);
|
if(trg != first_exp) _fs->AddInstruction(_OP_MOVE, trg, first_exp);
|
||||||
SQInteger endfirstexp = _fs->GetCurrentPos();
|
SQInteger endfirstexp = _fs->GetCurrentPos();
|
||||||
_fs->AddInstruction(_OP_JMP, 0, 0);
|
_fs->AddInstruction(_OP_JMP, 0, 0);
|
||||||
Expect(_SC(':'));
|
Expect(':');
|
||||||
SQInteger jmppos = _fs->GetCurrentPos();
|
SQInteger jmppos = _fs->GetCurrentPos();
|
||||||
Expression();
|
Expression();
|
||||||
SQInteger second_exp = _fs->PopTarget();
|
SQInteger second_exp = _fs->PopTarget();
|
||||||
@@ -422,7 +428,7 @@ public:
|
|||||||
void LogicalOrExp()
|
void LogicalOrExp()
|
||||||
{
|
{
|
||||||
LogicalAndExp();
|
LogicalAndExp();
|
||||||
for(;;) if(_token == TK_OR) {
|
if(_token == TK_OR) {
|
||||||
SQInteger first_exp = _fs->PopTarget();
|
SQInteger first_exp = _fs->PopTarget();
|
||||||
SQInteger trg = _fs->PushTarget();
|
SQInteger trg = _fs->PushTarget();
|
||||||
_fs->AddInstruction(_OP_OR, trg, 0, first_exp, 0);
|
_fs->AddInstruction(_OP_OR, trg, 0, first_exp, 0);
|
||||||
@@ -434,8 +440,7 @@ public:
|
|||||||
if(trg != second_exp) _fs->AddInstruction(_OP_MOVE, trg, second_exp);
|
if(trg != second_exp) _fs->AddInstruction(_OP_MOVE, trg, second_exp);
|
||||||
_fs->SnoozeOpt();
|
_fs->SnoozeOpt();
|
||||||
_fs->SetIntructionParam(jpos, 1, (_fs->GetCurrentPos() - jpos));
|
_fs->SetIntructionParam(jpos, 1, (_fs->GetCurrentPos() - jpos));
|
||||||
break;
|
}
|
||||||
}else return;
|
|
||||||
}
|
}
|
||||||
void LogicalAndExp()
|
void LogicalAndExp()
|
||||||
{
|
{
|
||||||
@@ -464,21 +469,21 @@ public:
|
|||||||
void BitwiseOrExp()
|
void BitwiseOrExp()
|
||||||
{
|
{
|
||||||
BitwiseXorExp();
|
BitwiseXorExp();
|
||||||
for(;;) if(_token == _SC('|'))
|
for(;;) if(_token == '|')
|
||||||
{BIN_EXP(_OP_BITW, &SQCompiler::BitwiseXorExp,BW_OR);
|
{BIN_EXP(_OP_BITW, &SQCompiler::BitwiseXorExp,BW_OR);
|
||||||
}else return;
|
}else return;
|
||||||
}
|
}
|
||||||
void BitwiseXorExp()
|
void BitwiseXorExp()
|
||||||
{
|
{
|
||||||
BitwiseAndExp();
|
BitwiseAndExp();
|
||||||
for(;;) if(_token == _SC('^'))
|
for(;;) if(_token == '^')
|
||||||
{BIN_EXP(_OP_BITW, &SQCompiler::BitwiseAndExp,BW_XOR);
|
{BIN_EXP(_OP_BITW, &SQCompiler::BitwiseAndExp,BW_XOR);
|
||||||
}else return;
|
}else return;
|
||||||
}
|
}
|
||||||
void BitwiseAndExp()
|
void BitwiseAndExp()
|
||||||
{
|
{
|
||||||
CompExp();
|
CompExp();
|
||||||
for(;;) if(_token == _SC('&'))
|
for(;;) if(_token == '&')
|
||||||
{BIN_EXP(_OP_BITW, &SQCompiler::CompExp,BW_AND);
|
{BIN_EXP(_OP_BITW, &SQCompiler::CompExp,BW_AND);
|
||||||
}else return;
|
}else return;
|
||||||
}
|
}
|
||||||
@@ -487,8 +492,8 @@ public:
|
|||||||
ShiftExp();
|
ShiftExp();
|
||||||
for(;;) switch(_token) {
|
for(;;) switch(_token) {
|
||||||
case TK_EQ: BIN_EXP(_OP_EQ, &SQCompiler::ShiftExp); break;
|
case TK_EQ: BIN_EXP(_OP_EQ, &SQCompiler::ShiftExp); break;
|
||||||
case _SC('>'): BIN_EXP(_OP_CMP, &SQCompiler::ShiftExp,CMP_G); break;
|
case '>': BIN_EXP(_OP_CMP, &SQCompiler::ShiftExp,CMP_G); break;
|
||||||
case _SC('<'): BIN_EXP(_OP_CMP, &SQCompiler::ShiftExp,CMP_L); break;
|
case '<': BIN_EXP(_OP_CMP, &SQCompiler::ShiftExp,CMP_L); break;
|
||||||
case TK_GE: BIN_EXP(_OP_CMP, &SQCompiler::ShiftExp,CMP_GE); break;
|
case TK_GE: BIN_EXP(_OP_CMP, &SQCompiler::ShiftExp,CMP_GE); break;
|
||||||
case TK_LE: BIN_EXP(_OP_CMP, &SQCompiler::ShiftExp,CMP_LE); break;
|
case TK_LE: BIN_EXP(_OP_CMP, &SQCompiler::ShiftExp,CMP_LE); break;
|
||||||
case TK_NE: BIN_EXP(_OP_NE, &SQCompiler::ShiftExp); break;
|
case TK_NE: BIN_EXP(_OP_NE, &SQCompiler::ShiftExp); break;
|
||||||
@@ -509,7 +514,7 @@ public:
|
|||||||
{
|
{
|
||||||
MultExp();
|
MultExp();
|
||||||
for(;;) switch(_token) {
|
for(;;) switch(_token) {
|
||||||
case _SC('+'): case _SC('-'):
|
case '+': case '-':
|
||||||
BIN_EXP(_OP_ARITH, &SQCompiler::MultExp,_token); break;
|
BIN_EXP(_OP_ARITH, &SQCompiler::MultExp,_token); break;
|
||||||
default: return;
|
default: return;
|
||||||
}
|
}
|
||||||
@@ -519,7 +524,7 @@ public:
|
|||||||
{
|
{
|
||||||
PrefixedExpr();
|
PrefixedExpr();
|
||||||
for(;;) switch(_token) {
|
for(;;) switch(_token) {
|
||||||
case _SC('*'): case _SC('/'): case _SC('%'):
|
case '*': case '/': case '%':
|
||||||
BIN_EXP(_OP_ARITH, &SQCompiler::PrefixedExpr,_token); break;
|
BIN_EXP(_OP_ARITH, &SQCompiler::PrefixedExpr,_token); break;
|
||||||
default: return;
|
default: return;
|
||||||
}
|
}
|
||||||
@@ -531,13 +536,13 @@ public:
|
|||||||
|
|
||||||
for(;;) {
|
for(;;) {
|
||||||
switch(_token) {
|
switch(_token) {
|
||||||
case _SC('.'): {
|
case '.': {
|
||||||
pos = -1;
|
pos = -1;
|
||||||
Lex();
|
Lex();
|
||||||
if(_token == TK_PARENT) {
|
if(_token == TK_PARENT) {
|
||||||
Lex();
|
Lex();
|
||||||
if(!NeedGet())
|
if(!NeedGet())
|
||||||
Error(_SC("parent cannot be set"));
|
Error("parent cannot be set");
|
||||||
SQInteger src = _fs->PopTarget();
|
SQInteger src = _fs->PopTarget();
|
||||||
_fs->AddInstruction(_OP_GETPARENT, _fs->PushTarget(), src);
|
_fs->AddInstruction(_OP_GETPARENT, _fs->PushTarget(), src);
|
||||||
}
|
}
|
||||||
@@ -549,9 +554,9 @@ public:
|
|||||||
_exst._freevar = false;
|
_exst._freevar = false;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case _SC('['):
|
case '[':
|
||||||
if(_lex._prevtoken == _SC('\n')) Error(_SC("cannot brake deref/or comma needed after [exp]=exp slot declaration"));
|
if(_lex._prevtoken == '\n') Error("cannot brake deref/or comma needed after [exp]=exp slot declaration");
|
||||||
Lex(); Expression(); Expect(_SC(']'));
|
Lex(); Expression(); Expect(']');
|
||||||
pos = -1;
|
pos = -1;
|
||||||
if(NeedGet()) Emit2ArgsOP(_OP_GET);
|
if(NeedGet()) Emit2ArgsOP(_OP_GET);
|
||||||
_exst._deref = DEREF_FIELD;
|
_exst._deref = DEREF_FIELD;
|
||||||
@@ -571,7 +576,7 @@ public:
|
|||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
break;
|
break;
|
||||||
case _SC('('):
|
case '(':
|
||||||
{
|
{
|
||||||
if(_exst._deref != DEREF_NO_DEREF) {
|
if(_exst._deref != DEREF_NO_DEREF) {
|
||||||
if(pos<0) {
|
if(pos<0) {
|
||||||
@@ -609,9 +614,9 @@ public:
|
|||||||
break;
|
break;
|
||||||
case TK_VARGC: Lex(); _fs->AddInstruction(_OP_VARGC, _fs->PushTarget()); break;
|
case TK_VARGC: Lex(); _fs->AddInstruction(_OP_VARGC, _fs->PushTarget()); break;
|
||||||
case TK_VARGV: { Lex();
|
case TK_VARGV: { Lex();
|
||||||
Expect(_SC('['));
|
Expect('[');
|
||||||
Expression();
|
Expression();
|
||||||
Expect(_SC(']'));
|
Expect(']');
|
||||||
SQInteger src = _fs->PopTarget();
|
SQInteger src = _fs->PopTarget();
|
||||||
_fs->AddInstruction(_OP_GETVARGV, _fs->PushTarget(), src);
|
_fs->AddInstruction(_OP_GETVARGV, _fs->PushTarget(), src);
|
||||||
}
|
}
|
||||||
@@ -624,8 +629,8 @@ public:
|
|||||||
SQObject constant;
|
SQObject constant;
|
||||||
switch(_token) {
|
switch(_token) {
|
||||||
case TK_IDENTIFIER: id = _fs->CreateString(_lex._svalue); break;
|
case TK_IDENTIFIER: id = _fs->CreateString(_lex._svalue); break;
|
||||||
case TK_THIS: id = _fs->CreateString(_SC("this")); break;
|
case TK_THIS: id = _fs->CreateString("this"); break;
|
||||||
case TK_CONSTRUCTOR: id = _fs->CreateString(_SC("constructor")); break;
|
case TK_CONSTRUCTOR: id = _fs->CreateString("constructor"); break;
|
||||||
}
|
}
|
||||||
SQInteger pos = -1;
|
SQInteger pos = -1;
|
||||||
Lex();
|
Lex();
|
||||||
@@ -643,7 +648,7 @@ public:
|
|||||||
Expect('.'); constid = Expect(TK_IDENTIFIER);
|
Expect('.'); constid = Expect(TK_IDENTIFIER);
|
||||||
if(!_table(constant)->Get(constid,constval)) {
|
if(!_table(constant)->Get(constid,constval)) {
|
||||||
constval.Null();
|
constval.Null();
|
||||||
Error(_SC("invalid constant [%s.%s]"), _stringval(id),_stringval(constid));
|
Error("invalid constant [%s.%s]", _stringval(id),_stringval(constid));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -683,7 +688,7 @@ public:
|
|||||||
case TK_DOUBLE_COLON: // "::"
|
case TK_DOUBLE_COLON: // "::"
|
||||||
_fs->AddInstruction(_OP_LOADROOTTABLE, _fs->PushTarget());
|
_fs->AddInstruction(_OP_LOADROOTTABLE, _fs->PushTarget());
|
||||||
_exst._deref = DEREF_FIELD;
|
_exst._deref = DEREF_FIELD;
|
||||||
_token = _SC('.'); //hack
|
_token = '.'; //hack
|
||||||
return -1;
|
return -1;
|
||||||
break;
|
break;
|
||||||
case TK_NULL:
|
case TK_NULL:
|
||||||
@@ -713,13 +718,13 @@ public:
|
|||||||
_fs->AddInstruction(_OP_LOADBOOL, _fs->PushTarget(),_token == TK_TRUE?1:0);
|
_fs->AddInstruction(_OP_LOADBOOL, _fs->PushTarget(),_token == TK_TRUE?1:0);
|
||||||
Lex();
|
Lex();
|
||||||
break;
|
break;
|
||||||
case _SC('['): {
|
case '[': {
|
||||||
_fs->AddInstruction(_OP_NEWARRAY, _fs->PushTarget());
|
_fs->AddInstruction(_OP_NEWARRAY, _fs->PushTarget());
|
||||||
SQInteger apos = _fs->GetCurrentPos(),key = 0;
|
SQInteger apos = _fs->GetCurrentPos(),key = 0;
|
||||||
Lex();
|
Lex();
|
||||||
while(_token != _SC(']')) {
|
while(_token != ']') {
|
||||||
Expression();
|
Expression();
|
||||||
if(_token == _SC(',')) Lex();
|
if(_token == ',') Lex();
|
||||||
SQInteger val = _fs->PopTarget();
|
SQInteger val = _fs->PopTarget();
|
||||||
SQInteger array = _fs->TopTarget();
|
SQInteger array = _fs->TopTarget();
|
||||||
_fs->AddInstruction(_OP_APPENDARRAY, array, val);
|
_fs->AddInstruction(_OP_APPENDARRAY, array, val);
|
||||||
@@ -729,16 +734,16 @@ public:
|
|||||||
Lex();
|
Lex();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case _SC('{'):{
|
case '{':{
|
||||||
_fs->AddInstruction(_OP_NEWTABLE, _fs->PushTarget());
|
_fs->AddInstruction(_OP_NEWTABLE, _fs->PushTarget());
|
||||||
Lex();ParseTableOrClass(_SC(','));
|
Lex();ParseTableOrClass(',');
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case TK_FUNCTION: FunctionExp(_token);break;
|
case TK_FUNCTION: FunctionExp(_token);break;
|
||||||
case TK_CLASS: Lex(); ClassExp();break;
|
case TK_CLASS: Lex(); ClassExp();break;
|
||||||
case _SC('-'): UnaryOP(_OP_NEG); break;
|
case '-': UnaryOP(_OP_NEG); break;
|
||||||
case _SC('!'): UnaryOP(_OP_NOT); break;
|
case '!': UnaryOP(_OP_NOT); break;
|
||||||
case _SC('~'): UnaryOP(_OP_BWNOT); break;
|
case '~': UnaryOP(_OP_BWNOT); break;
|
||||||
case TK_TYPEOF : UnaryOP(_OP_TYPEOF); break;
|
case TK_TYPEOF : UnaryOP(_OP_TYPEOF); break;
|
||||||
case TK_RESUME : UnaryOP(_OP_RESUME); break;
|
case TK_RESUME : UnaryOP(_OP_RESUME); break;
|
||||||
case TK_CLONE : UnaryOP(_OP_CLONE); break;
|
case TK_CLONE : UnaryOP(_OP_CLONE); break;
|
||||||
@@ -746,9 +751,9 @@ public:
|
|||||||
case TK_PLUSPLUS :PrefixIncDec(_token); break;
|
case TK_PLUSPLUS :PrefixIncDec(_token); break;
|
||||||
case TK_DELETE : DeleteExpr(); break;
|
case TK_DELETE : DeleteExpr(); break;
|
||||||
case TK_DELEGATE : DelegateExpr(); break;
|
case TK_DELEGATE : DelegateExpr(); break;
|
||||||
case _SC('('): Lex(); CommaExpr(); Expect(_SC(')'));
|
case '(': Lex(); CommaExpr(); Expect(')');
|
||||||
break;
|
break;
|
||||||
default: Error(_SC("expression expected"));
|
default: Error("expression expected");
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@@ -761,23 +766,23 @@ public:
|
|||||||
bool NeedGet()
|
bool NeedGet()
|
||||||
{
|
{
|
||||||
switch(_token) {
|
switch(_token) {
|
||||||
case _SC('='): case _SC('('): case TK_NEWSLOT: case TK_PLUSPLUS: case TK_MINUSMINUS:
|
case '=': case '(': case TK_NEWSLOT: case TK_PLUSPLUS: case TK_MINUSMINUS:
|
||||||
case TK_PLUSEQ: case TK_MINUSEQ: case TK_MULEQ: case TK_DIVEQ: case TK_MODEQ:
|
case TK_PLUSEQ: case TK_MINUSEQ: case TK_MULEQ: case TK_DIVEQ: case TK_MODEQ:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return (!_exst._class_or_delete) || (_exst._class_or_delete && (_token == _SC('.') || _token == _SC('[')));
|
return (!_exst._class_or_delete) || (_exst._class_or_delete && (_token == '.' || _token == '['));
|
||||||
}
|
}
|
||||||
|
|
||||||
void FunctionCallArgs()
|
void FunctionCallArgs()
|
||||||
{
|
{
|
||||||
SQInteger nargs = 1;//this
|
SQInteger nargs = 1;//this
|
||||||
while(_token != _SC(')')) {
|
while(_token != ')') {
|
||||||
Expression(true);
|
Expression(true);
|
||||||
MoveIfCurrentTargetIsLocal();
|
MoveIfCurrentTargetIsLocal();
|
||||||
nargs++;
|
nargs++;
|
||||||
if(_token == _SC(',')){
|
if(_token == ','){
|
||||||
Lex();
|
Lex();
|
||||||
if(_token == ')') Error(_SC("expression expected, found ')'"));
|
if(_token == ')') Error("expression expected, found ')'");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Lex();
|
Lex();
|
||||||
@@ -810,20 +815,20 @@ public:
|
|||||||
case TK_CONSTRUCTOR:{
|
case TK_CONSTRUCTOR:{
|
||||||
SQInteger tk = _token;
|
SQInteger tk = _token;
|
||||||
Lex();
|
Lex();
|
||||||
SQObject id = tk == TK_FUNCTION ? Expect(TK_IDENTIFIER) : _fs->CreateString(_SC("constructor"));
|
SQObject id = tk == TK_FUNCTION ? Expect(TK_IDENTIFIER) : _fs->CreateString("constructor");
|
||||||
Expect(_SC('('));
|
Expect('(');
|
||||||
_fs->AddInstruction(_OP_LOAD, _fs->PushTarget(), _fs->GetConstant(id));
|
_fs->AddInstruction(_OP_LOAD, _fs->PushTarget(), _fs->GetConstant(id));
|
||||||
CreateFunction(id);
|
CreateFunction(id);
|
||||||
_fs->AddInstruction(_OP_CLOSURE, _fs->PushTarget(), _fs->_functions.size() - 1, 0);
|
_fs->AddInstruction(_OP_CLOSURE, _fs->PushTarget(), _fs->_functions.size() - 1, 0);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case _SC('['):
|
case '[':
|
||||||
Lex(); CommaExpr(); Expect(_SC(']'));
|
Lex(); CommaExpr(); Expect(']');
|
||||||
Expect(_SC('=')); Expression();
|
Expect('='); Expression();
|
||||||
break;
|
break;
|
||||||
default :
|
default :
|
||||||
_fs->AddInstruction(_OP_LOAD, _fs->PushTarget(), _fs->GetConstant(Expect(TK_IDENTIFIER)));
|
_fs->AddInstruction(_OP_LOAD, _fs->PushTarget(), _fs->GetConstant(Expect(TK_IDENTIFIER)));
|
||||||
Expect(_SC('=')); Expression();
|
Expect('='); Expression();
|
||||||
}
|
}
|
||||||
|
|
||||||
if(_token == separator) Lex();//optional comma/semicolon
|
if(_token == separator) Lex();//optional comma/semicolon
|
||||||
@@ -837,7 +842,7 @@ public:
|
|||||||
_fs->AddInstruction(_OP_NEWSLOTA, flags, table, key, val);
|
_fs->AddInstruction(_OP_NEWSLOTA, flags, table, key, val);
|
||||||
//_fs->PopTarget();
|
//_fs->PopTarget();
|
||||||
}
|
}
|
||||||
if(separator == _SC(',')) //hack recognizes a table from the separator
|
if(separator == ',') //hack recognizes a table from the separator
|
||||||
_fs->SetIntructionParam(tpos, 1, nkeys);
|
_fs->SetIntructionParam(tpos, 1, nkeys);
|
||||||
Lex();
|
Lex();
|
||||||
}
|
}
|
||||||
@@ -846,7 +851,7 @@ public:
|
|||||||
SQObject varname;
|
SQObject varname;
|
||||||
do {
|
do {
|
||||||
Lex(); varname = Expect(TK_IDENTIFIER);
|
Lex(); varname = Expect(TK_IDENTIFIER);
|
||||||
if(_token == _SC('=')) {
|
if(_token == '=') {
|
||||||
Lex(); Expression();
|
Lex(); Expression();
|
||||||
SQInteger src = _fs->PopTarget();
|
SQInteger src = _fs->PopTarget();
|
||||||
SQInteger dest = _fs->PushTarget();
|
SQInteger dest = _fs->PushTarget();
|
||||||
@@ -858,20 +863,20 @@ public:
|
|||||||
_fs->PopTarget();
|
_fs->PopTarget();
|
||||||
_fs->PushLocalVariable(varname);
|
_fs->PushLocalVariable(varname);
|
||||||
|
|
||||||
} while(_token == _SC(','));
|
} while(_token == ',');
|
||||||
}
|
}
|
||||||
void IfStatement()
|
void IfStatement()
|
||||||
{
|
{
|
||||||
SQInteger jmppos;
|
SQInteger jmppos;
|
||||||
bool haselse = false;
|
bool haselse = false;
|
||||||
Lex(); Expect(_SC('(')); CommaExpr(); Expect(_SC(')'));
|
Lex(); Expect('('); CommaExpr(); Expect(')');
|
||||||
_fs->AddInstruction(_OP_JZ, _fs->PopTarget());
|
_fs->AddInstruction(_OP_JZ, _fs->PopTarget());
|
||||||
SQInteger jnepos = _fs->GetCurrentPos();
|
SQInteger jnepos = _fs->GetCurrentPos();
|
||||||
SQInteger stacksize = _fs->GetStackSize();
|
SQInteger stacksize = _fs->GetStackSize();
|
||||||
|
|
||||||
Statement();
|
Statement();
|
||||||
//
|
//
|
||||||
if(_token != _SC('}') && _token != TK_ELSE) OptionalSemicolon();
|
if(_token != '}' && _token != TK_ELSE) OptionalSemicolon();
|
||||||
|
|
||||||
CleanStack(stacksize);
|
CleanStack(stacksize);
|
||||||
SQInteger endifblock = _fs->GetCurrentPos();
|
SQInteger endifblock = _fs->GetCurrentPos();
|
||||||
@@ -892,7 +897,7 @@ public:
|
|||||||
SQInteger jzpos, jmppos;
|
SQInteger jzpos, jmppos;
|
||||||
SQInteger stacksize = _fs->GetStackSize();
|
SQInteger stacksize = _fs->GetStackSize();
|
||||||
jmppos = _fs->GetCurrentPos();
|
jmppos = _fs->GetCurrentPos();
|
||||||
Lex(); Expect(_SC('(')); CommaExpr(); Expect(_SC(')'));
|
Lex(); Expect('('); CommaExpr(); Expect(')');
|
||||||
|
|
||||||
BEGIN_BREAKBLE_BLOCK();
|
BEGIN_BREAKBLE_BLOCK();
|
||||||
_fs->AddInstruction(_OP_JZ, _fs->PopTarget());
|
_fs->AddInstruction(_OP_JZ, _fs->PopTarget());
|
||||||
@@ -920,7 +925,7 @@ public:
|
|||||||
_fs->AddLineInfos(_lex._currentline, _lineinfo, true);
|
_fs->AddLineInfos(_lex._currentline, _lineinfo, true);
|
||||||
Expect(TK_WHILE);
|
Expect(TK_WHILE);
|
||||||
SQInteger continuetrg = _fs->GetCurrentPos();
|
SQInteger continuetrg = _fs->GetCurrentPos();
|
||||||
Expect(_SC('(')); CommaExpr(); Expect(_SC(')'));
|
Expect('('); CommaExpr(); Expect(')');
|
||||||
_fs->AddInstruction(_OP_JNZ, _fs->PopTarget(), jzpos - _fs->GetCurrentPos() - 1);
|
_fs->AddInstruction(_OP_JNZ, _fs->PopTarget(), jzpos - _fs->GetCurrentPos() - 1);
|
||||||
END_BREAKBLE_BLOCK(continuetrg);
|
END_BREAKBLE_BLOCK(continuetrg);
|
||||||
}
|
}
|
||||||
@@ -928,25 +933,25 @@ public:
|
|||||||
{
|
{
|
||||||
Lex();
|
Lex();
|
||||||
SQInteger stacksize = _fs->GetStackSize();
|
SQInteger stacksize = _fs->GetStackSize();
|
||||||
Expect(_SC('('));
|
Expect('(');
|
||||||
if(_token == TK_LOCAL) LocalDeclStatement();
|
if(_token == TK_LOCAL) LocalDeclStatement();
|
||||||
else if(_token != _SC(';')){
|
else if(_token != ';'){
|
||||||
CommaExpr();
|
CommaExpr();
|
||||||
_fs->PopTarget();
|
_fs->PopTarget();
|
||||||
}
|
}
|
||||||
Expect(_SC(';'));
|
Expect(';');
|
||||||
_fs->SnoozeOpt();
|
_fs->SnoozeOpt();
|
||||||
SQInteger jmppos = _fs->GetCurrentPos();
|
SQInteger jmppos = _fs->GetCurrentPos();
|
||||||
SQInteger jzpos = -1;
|
SQInteger jzpos = -1;
|
||||||
if(_token != _SC(';')) { CommaExpr(); _fs->AddInstruction(_OP_JZ, _fs->PopTarget()); jzpos = _fs->GetCurrentPos(); }
|
if(_token != ';') { CommaExpr(); _fs->AddInstruction(_OP_JZ, _fs->PopTarget()); jzpos = _fs->GetCurrentPos(); }
|
||||||
Expect(_SC(';'));
|
Expect(';');
|
||||||
_fs->SnoozeOpt();
|
_fs->SnoozeOpt();
|
||||||
SQInteger expstart = _fs->GetCurrentPos() + 1;
|
SQInteger expstart = _fs->GetCurrentPos() + 1;
|
||||||
if(_token != _SC(')')) {
|
if(_token != ')') {
|
||||||
CommaExpr();
|
CommaExpr();
|
||||||
_fs->PopTarget();
|
_fs->PopTarget();
|
||||||
}
|
}
|
||||||
Expect(_SC(')'));
|
Expect(')');
|
||||||
_fs->SnoozeOpt();
|
_fs->SnoozeOpt();
|
||||||
SQInteger expend = _fs->GetCurrentPos();
|
SQInteger expend = _fs->GetCurrentPos();
|
||||||
SQInteger expsize = (expend - expstart) + 1;
|
SQInteger expsize = (expend - expstart) + 1;
|
||||||
@@ -973,20 +978,20 @@ public:
|
|||||||
void ForEachStatement()
|
void ForEachStatement()
|
||||||
{
|
{
|
||||||
SQObject idxname, valname;
|
SQObject idxname, valname;
|
||||||
Lex(); Expect(_SC('(')); valname = Expect(TK_IDENTIFIER);
|
Lex(); Expect('('); valname = Expect(TK_IDENTIFIER);
|
||||||
if(_token == _SC(',')) {
|
if(_token == ',') {
|
||||||
idxname = valname;
|
idxname = valname;
|
||||||
Lex(); valname = Expect(TK_IDENTIFIER);
|
Lex(); valname = Expect(TK_IDENTIFIER);
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
idxname = _fs->CreateString(_SC("@INDEX@"));
|
idxname = _fs->CreateString("@INDEX@");
|
||||||
}
|
}
|
||||||
Expect(TK_IN);
|
Expect(TK_IN);
|
||||||
|
|
||||||
//save the stack size
|
//save the stack size
|
||||||
SQInteger stacksize = _fs->GetStackSize();
|
SQInteger stacksize = _fs->GetStackSize();
|
||||||
//put the table in the stack(evaluate the table expression)
|
//put the table in the stack(evaluate the table expression)
|
||||||
Expression(); Expect(_SC(')'));
|
Expression(); Expect(')');
|
||||||
SQInteger container = _fs->TopTarget();
|
SQInteger container = _fs->TopTarget();
|
||||||
//push the index local var
|
//push the index local var
|
||||||
SQInteger indexpos = _fs->PushLocalVariable(idxname);
|
SQInteger indexpos = _fs->PushLocalVariable(idxname);
|
||||||
@@ -995,7 +1000,7 @@ public:
|
|||||||
SQInteger valuepos = _fs->PushLocalVariable(valname);
|
SQInteger valuepos = _fs->PushLocalVariable(valname);
|
||||||
_fs->AddInstruction(_OP_LOADNULLS, valuepos,1);
|
_fs->AddInstruction(_OP_LOADNULLS, valuepos,1);
|
||||||
//push reference index
|
//push reference index
|
||||||
SQInteger itrpos = _fs->PushLocalVariable(_fs->CreateString(_SC("@ITERATOR@"))); //use invalid id to make it inaccessible
|
SQInteger itrpos = _fs->PushLocalVariable(_fs->CreateString("@ITERATOR@")); //use invalid id to make it inaccessible
|
||||||
_fs->AddInstruction(_OP_LOADNULLS, itrpos,1);
|
_fs->AddInstruction(_OP_LOADNULLS, itrpos,1);
|
||||||
SQInteger jmppos = _fs->GetCurrentPos();
|
SQInteger jmppos = _fs->GetCurrentPos();
|
||||||
_fs->AddInstruction(_OP_FOREACH, container, 0, indexpos);
|
_fs->AddInstruction(_OP_FOREACH, container, 0, indexpos);
|
||||||
@@ -1014,8 +1019,8 @@ public:
|
|||||||
}
|
}
|
||||||
void SwitchStatement()
|
void SwitchStatement()
|
||||||
{
|
{
|
||||||
Lex(); Expect(_SC('(')); CommaExpr(); Expect(_SC(')'));
|
Lex(); Expect('('); CommaExpr(); Expect(')');
|
||||||
Expect(_SC('{'));
|
Expect('{');
|
||||||
SQInteger expr = _fs->TopTarget();
|
SQInteger expr = _fs->TopTarget();
|
||||||
bool bfirst = true;
|
bool bfirst = true;
|
||||||
SQInteger tonextcondjmp = -1;
|
SQInteger tonextcondjmp = -1;
|
||||||
@@ -1030,7 +1035,7 @@ public:
|
|||||||
_fs->SetIntructionParam(tonextcondjmp, 1, _fs->GetCurrentPos() - tonextcondjmp);
|
_fs->SetIntructionParam(tonextcondjmp, 1, _fs->GetCurrentPos() - tonextcondjmp);
|
||||||
}
|
}
|
||||||
//condition
|
//condition
|
||||||
Lex(); Expression(); Expect(_SC(':'));
|
Lex(); Expression(); Expect(':');
|
||||||
SQInteger trg = _fs->PopTarget();
|
SQInteger trg = _fs->PopTarget();
|
||||||
_fs->AddInstruction(_OP_EQ, trg, trg, expr);
|
_fs->AddInstruction(_OP_EQ, trg, trg, expr);
|
||||||
_fs->AddInstruction(_OP_JZ, trg, 0);
|
_fs->AddInstruction(_OP_JZ, trg, 0);
|
||||||
@@ -1049,13 +1054,13 @@ public:
|
|||||||
_fs->SetIntructionParam(tonextcondjmp, 1, _fs->GetCurrentPos() - tonextcondjmp);
|
_fs->SetIntructionParam(tonextcondjmp, 1, _fs->GetCurrentPos() - tonextcondjmp);
|
||||||
if(_token == TK_DEFAULT) {
|
if(_token == TK_DEFAULT) {
|
||||||
// _fs->AddLineInfos(_lex._currentline, _lineinfo);
|
// _fs->AddLineInfos(_lex._currentline, _lineinfo);
|
||||||
Lex(); Expect(_SC(':'));
|
Lex(); Expect(':');
|
||||||
SQInteger stacksize = _fs->GetStackSize();
|
SQInteger stacksize = _fs->GetStackSize();
|
||||||
_last_stacksize = _fs->GetStackSize();
|
_last_stacksize = _fs->GetStackSize();
|
||||||
Statements();
|
Statements();
|
||||||
_fs->SetStackSize(stacksize);
|
_fs->SetStackSize(stacksize);
|
||||||
}
|
}
|
||||||
Expect(_SC('}'));
|
Expect('}');
|
||||||
_fs->PopTarget();
|
_fs->PopTarget();
|
||||||
__nbreaks__ = _fs->_unresolvedbreaks.size() - __nbreaks__;
|
__nbreaks__ = _fs->_unresolvedbreaks.size() - __nbreaks__;
|
||||||
if(__nbreaks__ > 0)ResolveBreaks(_fs, __nbreaks__);
|
if(__nbreaks__ > 0)ResolveBreaks(_fs, __nbreaks__);
|
||||||
@@ -1076,7 +1081,7 @@ public:
|
|||||||
_fs->AddInstruction(_OP_LOAD, _fs->PushTarget(), _fs->GetConstant(id));
|
_fs->AddInstruction(_OP_LOAD, _fs->PushTarget(), _fs->GetConstant(id));
|
||||||
if(_token == TK_DOUBLE_COLON) Emit2ArgsOP(_OP_GET);
|
if(_token == TK_DOUBLE_COLON) Emit2ArgsOP(_OP_GET);
|
||||||
}
|
}
|
||||||
Expect(_SC('('));
|
Expect('(');
|
||||||
CreateFunction(id);
|
CreateFunction(id);
|
||||||
_fs->AddInstruction(_OP_CLOSURE, _fs->PushTarget(), _fs->_functions.size() - 1, 0);
|
_fs->AddInstruction(_OP_CLOSURE, _fs->PushTarget(), _fs->_functions.size() - 1, 0);
|
||||||
EmitDerefOp(_OP_NEWSLOT);
|
EmitDerefOp(_OP_NEWSLOT);
|
||||||
@@ -1090,13 +1095,13 @@ public:
|
|||||||
_exst._funcarg = false;
|
_exst._funcarg = false;
|
||||||
PrefixedExpr();
|
PrefixedExpr();
|
||||||
es = PopExpState();
|
es = PopExpState();
|
||||||
if(es._deref == DEREF_NO_DEREF) Error(_SC("invalid class name"));
|
if(es._deref == DEREF_NO_DEREF) Error("invalid class name");
|
||||||
if(es._deref == DEREF_FIELD) {
|
if(es._deref == DEREF_FIELD) {
|
||||||
ClassExp();
|
ClassExp();
|
||||||
EmitDerefOp(_OP_NEWSLOT);
|
EmitDerefOp(_OP_NEWSLOT);
|
||||||
_fs->PopTarget();
|
_fs->PopTarget();
|
||||||
}
|
}
|
||||||
else Error(_SC("cannot create a class in a local with the syntax(class <local>)"));
|
else Error("cannot create a class in a local with the syntax(class <local>)");
|
||||||
}
|
}
|
||||||
SQObject ExpectScalar()
|
SQObject ExpectScalar()
|
||||||
{
|
{
|
||||||
@@ -1126,12 +1131,12 @@ public:
|
|||||||
val._unVal.fFloat = -_lex._fvalue;
|
val._unVal.fFloat = -_lex._fvalue;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
Error(_SC("scalar expected : integer,float"));
|
Error("scalar expected : integer,float");
|
||||||
val._type = OT_NULL; // Silent compile-warning
|
val._type = OT_NULL; // Silent compile-warning
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
Error(_SC("scalar expected : integer,float or string"));
|
Error("scalar expected : integer,float or string");
|
||||||
val._type = OT_NULL; // Silent compile-warning
|
val._type = OT_NULL; // Silent compile-warning
|
||||||
}
|
}
|
||||||
Lex();
|
Lex();
|
||||||
@@ -1142,14 +1147,14 @@ public:
|
|||||||
|
|
||||||
Lex();
|
Lex();
|
||||||
SQObject id = Expect(TK_IDENTIFIER);
|
SQObject id = Expect(TK_IDENTIFIER);
|
||||||
Expect(_SC('{'));
|
Expect('{');
|
||||||
|
|
||||||
SQObject table = _fs->CreateTable();
|
SQObject table = _fs->CreateTable();
|
||||||
SQInteger nval = 0;
|
SQInteger nval = 0;
|
||||||
while(_token != _SC('}')) {
|
while(_token != '}') {
|
||||||
SQObject key = Expect(TK_IDENTIFIER);
|
SQObject key = Expect(TK_IDENTIFIER);
|
||||||
SQObject val;
|
SQObject val;
|
||||||
if(_token == _SC('=')) {
|
if(_token == '=') {
|
||||||
Lex();
|
Lex();
|
||||||
val = ExpectScalar();
|
val = ExpectScalar();
|
||||||
}
|
}
|
||||||
@@ -1165,7 +1170,7 @@ public:
|
|||||||
/*SQObjectPtr dummy;
|
/*SQObjectPtr dummy;
|
||||||
if(enums->Get(strongid,dummy)) {
|
if(enums->Get(strongid,dummy)) {
|
||||||
dummy.Null(); strongid.Null();
|
dummy.Null(); strongid.Null();
|
||||||
Error(_SC("enumeration already exists"));
|
Error("enumeration already exists");
|
||||||
}*/
|
}*/
|
||||||
enums->NewSlot(SQObjectPtr(strongid),SQObjectPtr(table));
|
enums->NewSlot(SQObjectPtr(strongid),SQObjectPtr(table));
|
||||||
strongid.Null();
|
strongid.Null();
|
||||||
@@ -1189,7 +1194,7 @@ public:
|
|||||||
_fs->AddInstruction(_OP_JMP, 0, 0);
|
_fs->AddInstruction(_OP_JMP, 0, 0);
|
||||||
SQInteger jmppos = _fs->GetCurrentPos();
|
SQInteger jmppos = _fs->GetCurrentPos();
|
||||||
_fs->SetIntructionParam(trappos, 1, (_fs->GetCurrentPos() - trappos));
|
_fs->SetIntructionParam(trappos, 1, (_fs->GetCurrentPos() - trappos));
|
||||||
Expect(TK_CATCH); Expect(_SC('(')); exid = Expect(TK_IDENTIFIER); Expect(_SC(')'));
|
Expect(TK_CATCH); Expect('('); exid = Expect(TK_IDENTIFIER); Expect(')');
|
||||||
SQInteger stacksize = _fs->GetStackSize();
|
SQInteger stacksize = _fs->GetStackSize();
|
||||||
SQInteger ex_target = _fs->PushLocalVariable(exid);
|
SQInteger ex_target = _fs->PushLocalVariable(exid);
|
||||||
_fs->SetIntructionParam(trappos, 0, ex_target);
|
_fs->SetIntructionParam(trappos, 0, ex_target);
|
||||||
@@ -1199,7 +1204,7 @@ public:
|
|||||||
}
|
}
|
||||||
void FunctionExp(SQInteger ftype)
|
void FunctionExp(SQInteger ftype)
|
||||||
{
|
{
|
||||||
Lex(); Expect(_SC('('));
|
Lex(); Expect('(');
|
||||||
CreateFunction(_null_);
|
CreateFunction(_null_);
|
||||||
_fs->AddInstruction(_OP_CLOSURE, _fs->PushTarget(), _fs->_functions.size() - 1, ftype == TK_FUNCTION?0:1);
|
_fs->AddInstruction(_OP_CLOSURE, _fs->PushTarget(), _fs->_functions.size() - 1, ftype == TK_FUNCTION?0:1);
|
||||||
}
|
}
|
||||||
@@ -1214,19 +1219,19 @@ public:
|
|||||||
if(_token == TK_ATTR_OPEN) {
|
if(_token == TK_ATTR_OPEN) {
|
||||||
Lex();
|
Lex();
|
||||||
_fs->AddInstruction(_OP_NEWTABLE, _fs->PushTarget());
|
_fs->AddInstruction(_OP_NEWTABLE, _fs->PushTarget());
|
||||||
ParseTableOrClass(_SC(','),TK_ATTR_CLOSE);
|
ParseTableOrClass(',',TK_ATTR_CLOSE);
|
||||||
attrs = _fs->TopTarget();
|
attrs = _fs->TopTarget();
|
||||||
}
|
}
|
||||||
Expect(_SC('{'));
|
Expect('{');
|
||||||
if(attrs != -1) _fs->PopTarget();
|
if(attrs != -1) _fs->PopTarget();
|
||||||
if(base != -1) _fs->PopTarget();
|
if(base != -1) _fs->PopTarget();
|
||||||
_fs->AddInstruction(_OP_CLASS, _fs->PushTarget(), base, attrs);
|
_fs->AddInstruction(_OP_CLASS, _fs->PushTarget(), base, attrs);
|
||||||
ParseTableOrClass(_SC(';'));
|
ParseTableOrClass(';');
|
||||||
}
|
}
|
||||||
void DelegateExpr()
|
void DelegateExpr()
|
||||||
{
|
{
|
||||||
Lex(); CommaExpr();
|
Lex(); CommaExpr();
|
||||||
Expect(_SC(':'));
|
Expect(':');
|
||||||
CommaExpr();
|
CommaExpr();
|
||||||
SQInteger table = _fs->PopTarget(), delegate = _fs->PopTarget();
|
SQInteger table = _fs->PopTarget(), delegate = _fs->PopTarget();
|
||||||
_fs->AddInstruction(_OP_DELEGATE, _fs->PushTarget(), table, delegate);
|
_fs->AddInstruction(_OP_DELEGATE, _fs->PushTarget(), table, delegate);
|
||||||
@@ -1239,9 +1244,9 @@ public:
|
|||||||
_exst._funcarg = false;
|
_exst._funcarg = false;
|
||||||
PrefixedExpr();
|
PrefixedExpr();
|
||||||
es = PopExpState();
|
es = PopExpState();
|
||||||
if(es._deref == DEREF_NO_DEREF) Error(_SC("can't delete an expression"));
|
if(es._deref == DEREF_NO_DEREF) Error("can't delete an expression");
|
||||||
if(es._deref == DEREF_FIELD) Emit2ArgsOP(_OP_DELETE);
|
if(es._deref == DEREF_FIELD) Emit2ArgsOP(_OP_DELETE);
|
||||||
else Error(_SC("cannot delete a local"));
|
else Error("cannot delete a local");
|
||||||
}
|
}
|
||||||
void PrefixIncDec(SQInteger token)
|
void PrefixIncDec(SQInteger token)
|
||||||
{
|
{
|
||||||
@@ -1263,46 +1268,46 @@ public:
|
|||||||
SQFuncState *funcstate = _fs->PushChildState(_ss(_vm));
|
SQFuncState *funcstate = _fs->PushChildState(_ss(_vm));
|
||||||
funcstate->_name = name;
|
funcstate->_name = name;
|
||||||
SQObject paramname;
|
SQObject paramname;
|
||||||
funcstate->AddParameter(_fs->CreateString(_SC("this")));
|
funcstate->AddParameter(_fs->CreateString("this"));
|
||||||
funcstate->_sourcename = _sourcename;
|
funcstate->_sourcename = _sourcename;
|
||||||
SQInteger defparams = 0;
|
SQInteger defparams = 0;
|
||||||
while(_token!=_SC(')')) {
|
while(_token!=')') {
|
||||||
if(_token == TK_VARPARAMS) {
|
if(_token == TK_VARPARAMS) {
|
||||||
if(defparams > 0) Error(_SC("function with default parameters cannot have variable number of parameters"));
|
if(defparams > 0) Error("function with default parameters cannot have variable number of parameters");
|
||||||
funcstate->_varparams = true;
|
funcstate->_varparams = true;
|
||||||
Lex();
|
Lex();
|
||||||
if(_token != _SC(')')) Error(_SC("expected ')'"));
|
if(_token != ')') Error("expected ')'");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
paramname = Expect(TK_IDENTIFIER);
|
paramname = Expect(TK_IDENTIFIER);
|
||||||
funcstate->AddParameter(paramname);
|
funcstate->AddParameter(paramname);
|
||||||
if(_token == _SC('=')) {
|
if(_token == '=') {
|
||||||
Lex();
|
Lex();
|
||||||
Expression();
|
Expression();
|
||||||
funcstate->AddDefaultParam(_fs->TopTarget());
|
funcstate->AddDefaultParam(_fs->TopTarget());
|
||||||
defparams++;
|
defparams++;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if(defparams > 0) Error(_SC("expected '='"));
|
if(defparams > 0) Error("expected '='");
|
||||||
}
|
}
|
||||||
if(_token == _SC(',')) Lex();
|
if(_token == ',') Lex();
|
||||||
else if(_token != _SC(')')) Error(_SC("expected ')' or ','"));
|
else if(_token != ')') Error("expected ')' or ','");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Expect(_SC(')'));
|
Expect(')');
|
||||||
for(SQInteger n = 0; n < defparams; n++) {
|
for(SQInteger n = 0; n < defparams; n++) {
|
||||||
_fs->PopTarget();
|
_fs->PopTarget();
|
||||||
}
|
}
|
||||||
//outer values
|
//outer values
|
||||||
if(_token == _SC(':')) {
|
if(_token == ':') {
|
||||||
Lex(); Expect(_SC('('));
|
Lex(); Expect('(');
|
||||||
while(_token != _SC(')')) {
|
while(_token != ')') {
|
||||||
paramname = Expect(TK_IDENTIFIER);
|
paramname = Expect(TK_IDENTIFIER);
|
||||||
//outers are treated as implicit local variables
|
//outers are treated as implicit local variables
|
||||||
funcstate->AddOuterValue(paramname);
|
funcstate->AddOuterValue(paramname);
|
||||||
if(_token == _SC(',')) Lex();
|
if(_token == ',') Lex();
|
||||||
else if(_token != _SC(')')) Error(_SC("expected ')' or ','"));
|
else if(_token != ')') Error("expected ')' or ','");
|
||||||
}
|
}
|
||||||
Lex();
|
Lex();
|
||||||
}
|
}
|
||||||
@@ -1310,7 +1315,7 @@ public:
|
|||||||
SQFuncState *currchunk = _fs;
|
SQFuncState *currchunk = _fs;
|
||||||
_fs = funcstate;
|
_fs = funcstate;
|
||||||
Statement();
|
Statement();
|
||||||
funcstate->AddLineInfos(_lex._prevtoken == _SC('\n')?_lex._lasttokenline:_lex._currentline, _lineinfo, true);
|
funcstate->AddLineInfos(_lex._prevtoken == '\n'?_lex._lasttokenline:_lex._currentline, _lineinfo, true);
|
||||||
funcstate->AddInstruction(_OP_RETURN, -1);
|
funcstate->AddInstruction(_OP_RETURN, -1);
|
||||||
funcstate->SetStackSize(0);
|
funcstate->SetStackSize(0);
|
||||||
//_fs->->_stacksize = _fs->_stacksize;
|
//_fs->->_stacksize = _fs->_stacksize;
|
||||||
|
|||||||
7
src/3rdparty/squirrel/squirrel/sqcompiler.h
vendored
7
src/3rdparty/squirrel/squirrel/sqcompiler.h
vendored
@@ -71,7 +71,12 @@ struct SQVM;
|
|||||||
#define TK_ENUM 323
|
#define TK_ENUM 323
|
||||||
#define TK_CONST 324
|
#define TK_CONST 324
|
||||||
|
|
||||||
|
/* MSVC doesn't like NORETURN for function prototypes, but we kinda need it for GCC. */
|
||||||
|
#if defined(_MSC_VER)
|
||||||
typedef void(*CompilerErrorFunc)(void *ud, const SQChar *s);
|
typedef void(*CompilerErrorFunc)(void *ud, const SQChar *s);
|
||||||
|
#else
|
||||||
|
typedef NORETURN void(*CompilerErrorFunc)(void *ud, const SQChar *s);
|
||||||
|
#endif
|
||||||
|
|
||||||
bool Compile(SQVM *vm, SQLEXREADFUNC rg, SQUserPointer up, const SQChar *sourcename, SQObjectPtr &out, bool raiseerror, bool lineinfo);
|
bool Compile(SQVM *vm, SQLEXREADFUNC rg, SQUserPointer up, const SQChar *sourcename, SQObjectPtr &out, bool raiseerror, bool lineinfo);
|
||||||
#endif //_SQCOMPILER_H_
|
#endif //_SQCOMPILER_H_
|
||||||
|
|||||||
55
src/3rdparty/squirrel/squirrel/sqdebug.cpp
vendored
55
src/3rdparty/squirrel/squirrel/sqdebug.cpp
vendored
@@ -1,14 +1,21 @@
|
|||||||
/*
|
/*
|
||||||
see copyright notice in squirrel.h
|
* see copyright notice in squirrel.h
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "../../../stdafx.h"
|
||||||
|
|
||||||
#include <squirrel.h>
|
#include <squirrel.h>
|
||||||
#include "sqpcheader.h"
|
#include "sqpcheader.h"
|
||||||
#include <stdarg.h>
|
|
||||||
#include "sqvm.h"
|
#include "sqvm.h"
|
||||||
#include "sqfuncproto.h"
|
#include "sqfuncproto.h"
|
||||||
#include "sqclosure.h"
|
#include "sqclosure.h"
|
||||||
#include "sqstring.h"
|
#include "sqstring.h"
|
||||||
|
|
||||||
|
#include "../../../core/alloc_func.hpp"
|
||||||
|
#include "../../../string_func.h"
|
||||||
|
|
||||||
|
#include "../../../safeguards.h"
|
||||||
|
|
||||||
SQRESULT sq_getfunctioninfo(HSQUIRRELVM v,SQInteger level,SQFunctionInfo *fi)
|
SQRESULT sq_getfunctioninfo(HSQUIRRELVM v,SQInteger level,SQFunctionInfo *fi)
|
||||||
{
|
{
|
||||||
SQInteger cssize = v->_callsstacksize;
|
SQInteger cssize = v->_callsstacksize;
|
||||||
@@ -18,12 +25,12 @@ SQRESULT sq_getfunctioninfo(HSQUIRRELVM v,SQInteger level,SQFunctionInfo *fi)
|
|||||||
SQClosure *c = _closure(ci._closure);
|
SQClosure *c = _closure(ci._closure);
|
||||||
SQFunctionProto *proto = _funcproto(c->_function);
|
SQFunctionProto *proto = _funcproto(c->_function);
|
||||||
fi->funcid = proto;
|
fi->funcid = proto;
|
||||||
fi->name = type(proto->_name) == OT_STRING?_stringval(proto->_name):_SC("unknown");
|
fi->name = type(proto->_name) == OT_STRING?_stringval(proto->_name):"unknown";
|
||||||
fi->source = type(proto->_name) == OT_STRING?_stringval(proto->_sourcename):_SC("unknown");
|
fi->source = type(proto->_name) == OT_STRING?_stringval(proto->_sourcename):"unknown";
|
||||||
return SQ_OK;
|
return SQ_OK;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return sq_throwerror(v,_SC("the object is not a closure"));
|
return sq_throwerror(v,"the object is not a closure");
|
||||||
}
|
}
|
||||||
|
|
||||||
SQRESULT sq_stackinfos(HSQUIRRELVM v, SQInteger level, SQStackInfos *si)
|
SQRESULT sq_stackinfos(HSQUIRRELVM v, SQInteger level, SQStackInfos *si)
|
||||||
@@ -43,8 +50,8 @@ SQRESULT sq_stackinfos(HSQUIRRELVM v, SQInteger level, SQStackInfos *si)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case OT_NATIVECLOSURE:
|
case OT_NATIVECLOSURE:
|
||||||
si->source = _SC("NATIVE");
|
si->source = "NATIVE";
|
||||||
si->funcname = _SC("unknown");
|
si->funcname = "unknown";
|
||||||
if(type(_nativeclosure(ci._closure)->_name) == OT_STRING)
|
if(type(_nativeclosure(ci._closure)->_name) == OT_STRING)
|
||||||
si->funcname = _stringval(_nativeclosure(ci._closure)->_name);
|
si->funcname = _stringval(_nativeclosure(ci._closure)->_name);
|
||||||
si->line = -1;
|
si->line = -1;
|
||||||
@@ -60,9 +67,12 @@ void SQVM::Raise_Error(const SQChar *s, ...)
|
|||||||
{
|
{
|
||||||
va_list vl;
|
va_list vl;
|
||||||
va_start(vl, s);
|
va_start(vl, s);
|
||||||
scvsprintf(_sp(rsl((SQInteger)scstrlen(s)+(NUMBER_MAX_CHAR*2))), s, vl);
|
size_t len = strlen(s)+(NUMBER_MAX_CHAR*2);
|
||||||
|
char *buffer = MallocT<char>(len + 1);
|
||||||
|
vseprintf(buffer, buffer + len, s, vl);
|
||||||
va_end(vl);
|
va_end(vl);
|
||||||
_lasterror = SQString::Create(_ss(this),_spval,-1);
|
_lasterror = SQString::Create(_ss(this),buffer,-1);
|
||||||
|
free(buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SQVM::Raise_Error(SQObjectPtr &desc)
|
void SQVM::Raise_Error(SQObjectPtr &desc)
|
||||||
@@ -72,20 +82,15 @@ void SQVM::Raise_Error(SQObjectPtr &desc)
|
|||||||
|
|
||||||
SQString *SQVM::PrintObjVal(const SQObject &o)
|
SQString *SQVM::PrintObjVal(const SQObject &o)
|
||||||
{
|
{
|
||||||
|
char buf[NUMBER_MAX_CHAR+1];
|
||||||
switch(type(o)) {
|
switch(type(o)) {
|
||||||
case OT_STRING: return _string(o);
|
case OT_STRING: return _string(o);
|
||||||
case OT_INTEGER:
|
case OT_INTEGER:
|
||||||
#if defined(_SQ64)
|
seprintf(buf, lastof(buf), OTTD_PRINTF64, _integer(o));
|
||||||
scsprintf(_sp(rsl(NUMBER_MAX_CHAR+1)), _SC("%ld"), _integer(o));
|
return SQString::Create(_ss(this), buf);
|
||||||
#else
|
|
||||||
scsprintf(_sp(rsl(NUMBER_MAX_CHAR+1)), _SC("%d"), _integer(o));
|
|
||||||
#endif
|
|
||||||
return SQString::Create(_ss(this), _spval);
|
|
||||||
break;
|
|
||||||
case OT_FLOAT:
|
case OT_FLOAT:
|
||||||
scsprintf(_sp(rsl(NUMBER_MAX_CHAR+1)), _SC("%.14g"), _float(o));
|
seprintf(buf, lastof(buf), "%.14g", _float(o));
|
||||||
return SQString::Create(_ss(this), _spval);
|
return SQString::Create(_ss(this), buf);
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
return SQString::Create(_ss(this), GetTypeName(o));
|
return SQString::Create(_ss(this), GetTypeName(o));
|
||||||
}
|
}
|
||||||
@@ -94,28 +99,28 @@ SQString *SQVM::PrintObjVal(const SQObject &o)
|
|||||||
void SQVM::Raise_IdxError(const SQObject &o)
|
void SQVM::Raise_IdxError(const SQObject &o)
|
||||||
{
|
{
|
||||||
SQObjectPtr oval = PrintObjVal(o);
|
SQObjectPtr oval = PrintObjVal(o);
|
||||||
Raise_Error(_SC("the index '%.50s' does not exist"), _stringval(oval));
|
Raise_Error("the index '%.50s' does not exist", _stringval(oval));
|
||||||
}
|
}
|
||||||
|
|
||||||
void SQVM::Raise_CompareError(const SQObject &o1, const SQObject &o2)
|
void SQVM::Raise_CompareError(const SQObject &o1, const SQObject &o2)
|
||||||
{
|
{
|
||||||
SQObjectPtr oval1 = PrintObjVal(o1), oval2 = PrintObjVal(o2);
|
SQObjectPtr oval1 = PrintObjVal(o1), oval2 = PrintObjVal(o2);
|
||||||
Raise_Error(_SC("comparsion between '%.50s' and '%.50s'"), _stringval(oval1), _stringval(oval2));
|
Raise_Error("comparsion between '%.50s' and '%.50s'", _stringval(oval1), _stringval(oval2));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void SQVM::Raise_ParamTypeError(SQInteger nparam,SQInteger typemask,SQInteger type)
|
void SQVM::Raise_ParamTypeError(SQInteger nparam,SQInteger typemask,SQInteger type)
|
||||||
{
|
{
|
||||||
SQObjectPtr exptypes = SQString::Create(_ss(this), _SC(""), -1);
|
SQObjectPtr exptypes = SQString::Create(_ss(this), "", -1);
|
||||||
SQInteger found = 0;
|
SQInteger found = 0;
|
||||||
for(SQInteger i=0; i<16; i++)
|
for(SQInteger i=0; i<16; i++)
|
||||||
{
|
{
|
||||||
SQInteger mask = 0x00000001 << i;
|
SQInteger mask = 0x00000001 << i;
|
||||||
if(typemask & (mask)) {
|
if(typemask & (mask)) {
|
||||||
if(found>0) StringCat(exptypes,SQString::Create(_ss(this), _SC("|"), -1), exptypes);
|
if(found>0) StringCat(exptypes,SQString::Create(_ss(this), "|", -1), exptypes);
|
||||||
found ++;
|
found ++;
|
||||||
StringCat(exptypes,SQString::Create(_ss(this), IdType2Name((SQObjectType)mask), -1), exptypes);
|
StringCat(exptypes,SQString::Create(_ss(this), IdType2Name((SQObjectType)mask), -1), exptypes);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Raise_Error(_SC("parameter %d has an invalid type '%s' ; expected: '%s'"), nparam, IdType2Name((SQObjectType)type), _stringval(exptypes));
|
Raise_Error("parameter %d has an invalid type '%s' ; expected: '%s'", nparam, IdType2Name((SQObjectType)type), _stringval(exptypes));
|
||||||
}
|
}
|
||||||
|
|||||||
64
src/3rdparty/squirrel/squirrel/sqfuncproto.h
vendored
64
src/3rdparty/squirrel/squirrel/sqfuncproto.h
vendored
@@ -7,13 +7,13 @@
|
|||||||
enum SQOuterType {
|
enum SQOuterType {
|
||||||
otLOCAL = 0,
|
otLOCAL = 0,
|
||||||
otSYMBOL = 1,
|
otSYMBOL = 1,
|
||||||
otOUTER = 2
|
otOUTER = 2,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct SQOuterVar
|
struct SQOuterVar
|
||||||
{
|
{
|
||||||
|
|
||||||
SQOuterVar(){}
|
SQOuterVar() : _type(otLOCAL) {}
|
||||||
SQOuterVar(const SQObjectPtr &name,const SQObjectPtr &src,SQOuterType t)
|
SQOuterVar(const SQObjectPtr &name,const SQObjectPtr &src,SQOuterType t)
|
||||||
{
|
{
|
||||||
_name = name;
|
_name = name;
|
||||||
@@ -33,7 +33,7 @@ struct SQOuterVar
|
|||||||
|
|
||||||
struct SQLocalVarInfo
|
struct SQLocalVarInfo
|
||||||
{
|
{
|
||||||
SQLocalVarInfo():_start_op(0),_end_op(0){}
|
SQLocalVarInfo():_start_op(0),_end_op(0), _pos(0){}
|
||||||
SQLocalVarInfo(const SQLocalVarInfo &lvi)
|
SQLocalVarInfo(const SQLocalVarInfo &lvi)
|
||||||
{
|
{
|
||||||
_name=lvi._name;
|
_name=lvi._name;
|
||||||
@@ -73,9 +73,37 @@ typedef sqvector<SQLineInfo> SQLineInfoVec;
|
|||||||
struct SQFunctionProto : public SQRefCounted
|
struct SQFunctionProto : public SQRefCounted
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
SQFunctionProto(){
|
SQFunctionProto(SQInteger ninstructions,
|
||||||
_stacksize=0;
|
SQInteger nliterals,SQInteger nparameters,
|
||||||
_bgenerator=false;}
|
SQInteger nfunctions,SQInteger noutervalues,
|
||||||
|
SQInteger nlineinfos,SQInteger nlocalvarinfos,SQInteger ndefaultparams)
|
||||||
|
{
|
||||||
|
_stacksize=0;
|
||||||
|
_bgenerator=false;
|
||||||
|
_varparams = false;
|
||||||
|
_ninstructions = ninstructions;
|
||||||
|
_literals = (SQObjectPtr*)&_instructions[ninstructions];
|
||||||
|
_nliterals = nliterals;
|
||||||
|
_parameters = (SQObjectPtr*)&_literals[nliterals];
|
||||||
|
_nparameters = nparameters;
|
||||||
|
_functions = (SQObjectPtr*)&_parameters[nparameters];
|
||||||
|
_nfunctions = nfunctions;
|
||||||
|
_outervalues = (SQOuterVar*)&_functions[nfunctions];
|
||||||
|
_noutervalues = noutervalues;
|
||||||
|
_lineinfos = (SQLineInfo *)&_outervalues[noutervalues];
|
||||||
|
_nlineinfos = nlineinfos;
|
||||||
|
_localvarinfos = (SQLocalVarInfo *)&_lineinfos[nlineinfos];
|
||||||
|
_nlocalvarinfos = nlocalvarinfos;
|
||||||
|
_defaultparams = (SQInteger *)&_localvarinfos[nlocalvarinfos];
|
||||||
|
_ndefaultparams = ndefaultparams;
|
||||||
|
|
||||||
|
_CONSTRUCT_VECTOR(SQObjectPtr,_nliterals,_literals);
|
||||||
|
_CONSTRUCT_VECTOR(SQObjectPtr,_nparameters,_parameters);
|
||||||
|
_CONSTRUCT_VECTOR(SQObjectPtr,_nfunctions,_functions);
|
||||||
|
_CONSTRUCT_VECTOR(SQOuterVar,_noutervalues,_outervalues);
|
||||||
|
//_CONSTRUCT_VECTOR(SQLineInfo,_nlineinfos,_lineinfos); //not required are 2 integers
|
||||||
|
_CONSTRUCT_VECTOR(SQLocalVarInfo,_nlocalvarinfos,_localvarinfos);
|
||||||
|
}
|
||||||
public:
|
public:
|
||||||
static SQFunctionProto *Create(SQInteger ninstructions,
|
static SQFunctionProto *Create(SQInteger ninstructions,
|
||||||
SQInteger nliterals,SQInteger nparameters,
|
SQInteger nliterals,SQInteger nparameters,
|
||||||
@@ -85,29 +113,7 @@ public:
|
|||||||
SQFunctionProto *f;
|
SQFunctionProto *f;
|
||||||
//I compact the whole class and members in a single memory allocation
|
//I compact the whole class and members in a single memory allocation
|
||||||
f = (SQFunctionProto *)sq_vm_malloc(_FUNC_SIZE(ninstructions,nliterals,nparameters,nfunctions,noutervalues,nlineinfos,nlocalvarinfos,ndefaultparams));
|
f = (SQFunctionProto *)sq_vm_malloc(_FUNC_SIZE(ninstructions,nliterals,nparameters,nfunctions,noutervalues,nlineinfos,nlocalvarinfos,ndefaultparams));
|
||||||
new (f) SQFunctionProto;
|
new (f) SQFunctionProto(ninstructions, nliterals, nparameters, nfunctions, noutervalues, nlineinfos, nlocalvarinfos, ndefaultparams);
|
||||||
f->_ninstructions = ninstructions;
|
|
||||||
f->_literals = (SQObjectPtr*)&f->_instructions[ninstructions];
|
|
||||||
f->_nliterals = nliterals;
|
|
||||||
f->_parameters = (SQObjectPtr*)&f->_literals[nliterals];
|
|
||||||
f->_nparameters = nparameters;
|
|
||||||
f->_functions = (SQObjectPtr*)&f->_parameters[nparameters];
|
|
||||||
f->_nfunctions = nfunctions;
|
|
||||||
f->_outervalues = (SQOuterVar*)&f->_functions[nfunctions];
|
|
||||||
f->_noutervalues = noutervalues;
|
|
||||||
f->_lineinfos = (SQLineInfo *)&f->_outervalues[noutervalues];
|
|
||||||
f->_nlineinfos = nlineinfos;
|
|
||||||
f->_localvarinfos = (SQLocalVarInfo *)&f->_lineinfos[nlineinfos];
|
|
||||||
f->_nlocalvarinfos = nlocalvarinfos;
|
|
||||||
f->_defaultparams = (SQInteger *)&f->_localvarinfos[nlocalvarinfos];
|
|
||||||
f->_ndefaultparams = ndefaultparams;
|
|
||||||
|
|
||||||
_CONSTRUCT_VECTOR(SQObjectPtr,f->_nliterals,f->_literals);
|
|
||||||
_CONSTRUCT_VECTOR(SQObjectPtr,f->_nparameters,f->_parameters);
|
|
||||||
_CONSTRUCT_VECTOR(SQObjectPtr,f->_nfunctions,f->_functions);
|
|
||||||
_CONSTRUCT_VECTOR(SQOuterVar,f->_noutervalues,f->_outervalues);
|
|
||||||
//_CONSTRUCT_VECTOR(SQLineInfo,f->_nlineinfos,f->_lineinfos); //not required are 2 integers
|
|
||||||
_CONSTRUCT_VECTOR(SQLocalVarInfo,f->_nlocalvarinfos,f->_localvarinfos);
|
|
||||||
return f;
|
return f;
|
||||||
}
|
}
|
||||||
void Release(){
|
void Release(){
|
||||||
|
|||||||
213
src/3rdparty/squirrel/squirrel/sqfuncstate.cpp
vendored
213
src/3rdparty/squirrel/squirrel/sqfuncstate.cpp
vendored
@@ -1,6 +1,9 @@
|
|||||||
/*
|
/*
|
||||||
see copyright notice in squirrel.h
|
* see copyright notice in squirrel.h
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "../../../stdafx.h"
|
||||||
|
|
||||||
#include "sqpcheader.h"
|
#include "sqpcheader.h"
|
||||||
#include "sqcompiler.h"
|
#include "sqcompiler.h"
|
||||||
#include "sqfuncproto.h"
|
#include "sqfuncproto.h"
|
||||||
@@ -9,84 +12,82 @@
|
|||||||
#include "sqopcodes.h"
|
#include "sqopcodes.h"
|
||||||
#include "sqfuncstate.h"
|
#include "sqfuncstate.h"
|
||||||
|
|
||||||
|
#include "../../../safeguards.h"
|
||||||
|
|
||||||
#ifdef _DEBUG_DUMP
|
#ifdef _DEBUG_DUMP
|
||||||
SQInstructionDesc g_InstrDesc[]={
|
SQInstructionDesc g_InstrDesc[]={
|
||||||
{_SC("_OP_LINE")},
|
{"_OP_LINE"},
|
||||||
{_SC("_OP_LOAD")},
|
{"_OP_LOAD"},
|
||||||
{_SC("_OP_LOADINT")},
|
{"_OP_LOADINT"},
|
||||||
{_SC("_OP_LOADFLOAT")},
|
{"_OP_LOADFLOAT"},
|
||||||
{_SC("_OP_DLOAD")},
|
{"_OP_DLOAD"},
|
||||||
{_SC("_OP_TAILCALL")},
|
{"_OP_TAILCALL"},
|
||||||
{_SC("_OP_CALL")},
|
{"_OP_CALL"},
|
||||||
{_SC("_OP_PREPCALL")},
|
{"_OP_PREPCALL"},
|
||||||
{_SC("_OP_PREPCALLK")},
|
{"_OP_PREPCALLK"},
|
||||||
{_SC("_OP_GETK")},
|
{"_OP_GETK"},
|
||||||
{_SC("_OP_MOVE")},
|
{"_OP_MOVE"},
|
||||||
{_SC("_OP_NEWSLOT")},
|
{"_OP_NEWSLOT"},
|
||||||
{_SC("_OP_DELETE")},
|
{"_OP_DELETE"},
|
||||||
{_SC("_OP_SET")},
|
{"_OP_SET"},
|
||||||
{_SC("_OP_GET")},
|
{"_OP_GET"},
|
||||||
{_SC("_OP_EQ")},
|
{"_OP_EQ"},
|
||||||
{_SC("_OP_NE")},
|
{"_OP_NE"},
|
||||||
{_SC("_OP_ARITH")},
|
{"_OP_ARITH"},
|
||||||
{_SC("_OP_BITW")},
|
{"_OP_BITW"},
|
||||||
{_SC("_OP_RETURN")},
|
{"_OP_RETURN"},
|
||||||
{_SC("_OP_LOADNULLS")},
|
{"_OP_LOADNULLS"},
|
||||||
{_SC("_OP_LOADROOTTABLE")},
|
{"_OP_LOADROOTTABLE"},
|
||||||
{_SC("_OP_LOADBOOL")},
|
{"_OP_LOADBOOL"},
|
||||||
{_SC("_OP_DMOVE")},
|
{"_OP_DMOVE"},
|
||||||
{_SC("_OP_JMP")},
|
{"_OP_JMP"},
|
||||||
{_SC("_OP_JNZ")},
|
{"_OP_JNZ"},
|
||||||
{_SC("_OP_JZ")},
|
{"_OP_JZ"},
|
||||||
{_SC("_OP_LOADFREEVAR")},
|
{"_OP_LOADFREEVAR"},
|
||||||
{_SC("_OP_VARGC")},
|
{"_OP_VARGC"},
|
||||||
{_SC("_OP_GETVARGV")},
|
{"_OP_GETVARGV"},
|
||||||
{_SC("_OP_NEWTABLE")},
|
{"_OP_NEWTABLE"},
|
||||||
{_SC("_OP_NEWARRAY")},
|
{"_OP_NEWARRAY"},
|
||||||
{_SC("_OP_APPENDARRAY")},
|
{"_OP_APPENDARRAY"},
|
||||||
{_SC("_OP_GETPARENT")},
|
{"_OP_GETPARENT"},
|
||||||
{_SC("_OP_COMPARITH")},
|
{"_OP_COMPARITH"},
|
||||||
{_SC("_OP_COMPARITHL")},
|
{"_OP_COMPARITHL"},
|
||||||
{_SC("_OP_INC")},
|
{"_OP_INC"},
|
||||||
{_SC("_OP_INCL")},
|
{"_OP_INCL"},
|
||||||
{_SC("_OP_PINC")},
|
{"_OP_PINC"},
|
||||||
{_SC("_OP_PINCL")},
|
{"_OP_PINCL"},
|
||||||
{_SC("_OP_CMP")},
|
{"_OP_CMP"},
|
||||||
{_SC("_OP_EXISTS")},
|
{"_OP_EXISTS"},
|
||||||
{_SC("_OP_INSTANCEOF")},
|
{"_OP_INSTANCEOF"},
|
||||||
{_SC("_OP_AND")},
|
{"_OP_AND"},
|
||||||
{_SC("_OP_OR")},
|
{"_OP_OR"},
|
||||||
{_SC("_OP_NEG")},
|
{"_OP_NEG"},
|
||||||
{_SC("_OP_NOT")},
|
{"_OP_NOT"},
|
||||||
{_SC("_OP_BWNOT")},
|
{"_OP_BWNOT"},
|
||||||
{_SC("_OP_CLOSURE")},
|
{"_OP_CLOSURE"},
|
||||||
{_SC("_OP_YIELD")},
|
{"_OP_YIELD"},
|
||||||
{_SC("_OP_RESUME")},
|
{"_OP_RESUME"},
|
||||||
{_SC("_OP_FOREACH")},
|
{"_OP_FOREACH"},
|
||||||
{_SC("_OP_POSTFOREACH")},
|
{"_OP_POSTFOREACH"},
|
||||||
{_SC("_OP_DELEGATE")},
|
{"_OP_DELEGATE"},
|
||||||
{_SC("_OP_CLONE")},
|
{"_OP_CLONE"},
|
||||||
{_SC("_OP_TYPEOF")},
|
{"_OP_TYPEOF"},
|
||||||
{_SC("_OP_PUSHTRAP")},
|
{"_OP_PUSHTRAP"},
|
||||||
{_SC("_OP_POPTRAP")},
|
{"_OP_POPTRAP"},
|
||||||
{_SC("_OP_THROW")},
|
{"_OP_THROW"},
|
||||||
{_SC("_OP_CLASS")},
|
{"_OP_CLASS"},
|
||||||
{_SC("_OP_NEWSLOTA")},
|
{"_OP_NEWSLOTA"},
|
||||||
{_SC("_OP_SCOPE_END")}
|
{"_OP_SCOPE_END"}
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
void DumpLiteral(SQObjectPtr &o)
|
void DumpLiteral(SQObjectPtr &o)
|
||||||
{
|
{
|
||||||
switch(type(o)){
|
switch(type(o)){
|
||||||
case OT_STRING: scprintf(_SC("\"%s\""),_stringval(o));break;
|
case OT_STRING: printf("\"%s\"",_stringval(o));break;
|
||||||
case OT_FLOAT: scprintf(_SC("{%f}"),_float(o));break;
|
case OT_FLOAT: printf("{%f}",_float(o));break;
|
||||||
#if defined(_SQ64)
|
case OT_INTEGER: printf("{" OTTD_PRINTF64 "}",_integer(o));break;
|
||||||
case OT_INTEGER: scprintf(_SC("{%ld}"),_integer(o));break;
|
case OT_BOOL: printf("%s",_integer(o)?"true":"false");break;
|
||||||
#else
|
default: printf("(%s %p)",GetTypeName(o),(void*)_rawval(o));break; break; //shut up compiler
|
||||||
case OT_INTEGER: scprintf(_SC("{%d}"),_integer(o));break;
|
|
||||||
#endif
|
|
||||||
case OT_BOOL: scprintf(_SC("%s"),_integer(o)?_SC("true"):_SC("false"));break;
|
|
||||||
default: scprintf(_SC("(%s %p)"),GetTypeName(o),(void*)_rawval(o));break; break; //shut up compiler
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -119,11 +120,11 @@ void SQFuncState::Dump(SQFunctionProto *func)
|
|||||||
{
|
{
|
||||||
SQUnsignedInteger n=0,i;
|
SQUnsignedInteger n=0,i;
|
||||||
SQInteger si;
|
SQInteger si;
|
||||||
scprintf(_SC("SQInstruction sizeof %d\n"),sizeof(SQInstruction));
|
printf("SQInstruction sizeof %d\n",sizeof(SQInstruction));
|
||||||
scprintf(_SC("SQObject sizeof %d\n"),sizeof(SQObject));
|
printf("SQObject sizeof %d\n",sizeof(SQObject));
|
||||||
scprintf(_SC("--------------------------------------------------------------------\n"));
|
printf("--------------------------------------------------------------------\n");
|
||||||
scprintf(_SC("*****FUNCTION [%s]\n"),type(func->_name)==OT_STRING?_stringval(func->_name):_SC("unknown"));
|
printf("*****FUNCTION [%s]\n",type(func->_name)==OT_STRING?_stringval(func->_name):"unknown");
|
||||||
scprintf(_SC("-----LITERALS\n"));
|
printf("-----LITERALS\n");
|
||||||
SQObjectPtr refidx,key,val;
|
SQObjectPtr refidx,key,val;
|
||||||
SQInteger idx;
|
SQInteger idx;
|
||||||
SQObjectPtrVec templiterals;
|
SQObjectPtrVec templiterals;
|
||||||
@@ -133,43 +134,43 @@ void SQFuncState::Dump(SQFunctionProto *func)
|
|||||||
templiterals[_integer(val)]=key;
|
templiterals[_integer(val)]=key;
|
||||||
}
|
}
|
||||||
for(i=0;i<templiterals.size();i++){
|
for(i=0;i<templiterals.size();i++){
|
||||||
scprintf(_SC("[%d] "),n);
|
printf("[%d] ",n);
|
||||||
DumpLiteral(templiterals[i]);
|
DumpLiteral(templiterals[i]);
|
||||||
scprintf(_SC("\n"));
|
printf("\n");
|
||||||
n++;
|
n++;
|
||||||
}
|
}
|
||||||
scprintf(_SC("-----PARAMS\n"));
|
printf("-----PARAMS\n");
|
||||||
if(_varparams)
|
if(_varparams)
|
||||||
scprintf(_SC("<<VARPARAMS>>\n"));
|
printf("<<VARPARAMS>>\n");
|
||||||
n=0;
|
n=0;
|
||||||
for(i=0;i<_parameters.size();i++){
|
for(i=0;i<_parameters.size();i++){
|
||||||
scprintf(_SC("[%d] "),n);
|
printf("[%d] ",n);
|
||||||
DumpLiteral(_parameters[i]);
|
DumpLiteral(_parameters[i]);
|
||||||
scprintf(_SC("\n"));
|
printf("\n");
|
||||||
n++;
|
n++;
|
||||||
}
|
}
|
||||||
scprintf(_SC("-----LOCALS\n"));
|
printf("-----LOCALS\n");
|
||||||
for(si=0;si<func->_nlocalvarinfos;si++){
|
for(si=0;si<func->_nlocalvarinfos;si++){
|
||||||
SQLocalVarInfo lvi=func->_localvarinfos[si];
|
SQLocalVarInfo lvi=func->_localvarinfos[si];
|
||||||
scprintf(_SC("[%d] %s \t%d %d\n"),lvi._pos,_stringval(lvi._name),lvi._start_op,lvi._end_op);
|
printf("[%d] %s \t%d %d\n",lvi._pos,_stringval(lvi._name),lvi._start_op,lvi._end_op);
|
||||||
n++;
|
n++;
|
||||||
}
|
}
|
||||||
scprintf(_SC("-----LINE INFO\n"));
|
printf("-----LINE INFO\n");
|
||||||
for(i=0;i<_lineinfos.size();i++){
|
for(i=0;i<_lineinfos.size();i++){
|
||||||
SQLineInfo li=_lineinfos[i];
|
SQLineInfo li=_lineinfos[i];
|
||||||
scprintf(_SC("op [%d] line [%d] \n"),li._op,li._line);
|
printf("op [%d] line [%d] \n",li._op,li._line);
|
||||||
n++;
|
n++;
|
||||||
}
|
}
|
||||||
scprintf(_SC("-----dump\n"));
|
printf("-----dump\n");
|
||||||
n=0;
|
n=0;
|
||||||
for(i=0;i<_instructions.size();i++){
|
for(i=0;i<_instructions.size();i++){
|
||||||
SQInstruction &inst=_instructions[i];
|
SQInstruction &inst=_instructions[i];
|
||||||
if(inst.op==_OP_LOAD || inst.op==_OP_DLOAD || inst.op==_OP_PREPCALLK || inst.op==_OP_GETK ){
|
if(inst.op==_OP_LOAD || inst.op==_OP_DLOAD || inst.op==_OP_PREPCALLK || inst.op==_OP_GETK ){
|
||||||
|
|
||||||
SQInteger lidx = inst._arg1;
|
SQInteger lidx = inst._arg1;
|
||||||
scprintf(_SC("[%03d] %15s %d "),n,g_InstrDesc[inst.op].name,inst._arg0);
|
printf("[%03d] %15s %d ",n,g_InstrDesc[inst.op].name,inst._arg0);
|
||||||
if(lidx >= 0xFFFFFFFF)
|
if(lidx >= 0xFFFFFFFF)
|
||||||
scprintf(_SC("null"));
|
printf("null");
|
||||||
else {
|
else {
|
||||||
SQInteger refidx;
|
SQInteger refidx;
|
||||||
SQObjectPtr val,key,refo;
|
SQObjectPtr val,key,refo;
|
||||||
@@ -179,13 +180,13 @@ void SQFuncState::Dump(SQFunctionProto *func)
|
|||||||
DumpLiteral(key);
|
DumpLiteral(key);
|
||||||
}
|
}
|
||||||
if(inst.op != _OP_DLOAD) {
|
if(inst.op != _OP_DLOAD) {
|
||||||
scprintf(_SC(" %d %d \n"),inst._arg2,inst._arg3);
|
printf(" %d %d \n",inst._arg2,inst._arg3);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
scprintf(_SC(" %d "),inst._arg2);
|
printf(" %d ",inst._arg2);
|
||||||
lidx = inst._arg3;
|
lidx = inst._arg3;
|
||||||
if(lidx >= 0xFFFFFFFF)
|
if(lidx >= 0xFFFFFFFF)
|
||||||
scprintf(_SC("null"));
|
printf("null");
|
||||||
else {
|
else {
|
||||||
SQInteger refidx;
|
SQInteger refidx;
|
||||||
SQObjectPtr val,key,refo;
|
SQObjectPtr val,key,refo;
|
||||||
@@ -193,23 +194,23 @@ void SQFuncState::Dump(SQFunctionProto *func)
|
|||||||
refo = refidx;
|
refo = refidx;
|
||||||
}
|
}
|
||||||
DumpLiteral(key);
|
DumpLiteral(key);
|
||||||
scprintf(_SC("\n"));
|
printf("\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(inst.op==_OP_LOADFLOAT) {
|
else if(inst.op==_OP_LOADFLOAT) {
|
||||||
scprintf(_SC("[%03d] %15s %d %f %d %d\n"),n,g_InstrDesc[inst.op].name,inst._arg0,*((SQFloat*)&inst._arg1),inst._arg2,inst._arg3);
|
printf("[%03d] %15s %d %f %d %d\n",n,g_InstrDesc[inst.op].name,inst._arg0,*((SQFloat*)&inst._arg1),inst._arg2,inst._arg3);
|
||||||
}
|
}
|
||||||
else if(inst.op==_OP_ARITH){
|
else if(inst.op==_OP_ARITH){
|
||||||
scprintf(_SC("[%03d] %15s %d %d %d %c\n"),n,g_InstrDesc[inst.op].name,inst._arg0,inst._arg1,inst._arg2,inst._arg3);
|
printf("[%03d] %15s %d %d %d %c\n",n,g_InstrDesc[inst.op].name,inst._arg0,inst._arg1,inst._arg2,inst._arg3);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
scprintf(_SC("[%03d] %15s %d %d %d %d\n"),n,g_InstrDesc[inst.op].name,inst._arg0,inst._arg1,inst._arg2,inst._arg3);
|
printf("[%03d] %15s %d %d %d %d\n",n,g_InstrDesc[inst.op].name,inst._arg0,inst._arg1,inst._arg2,inst._arg3);
|
||||||
n++;
|
n++;
|
||||||
}
|
}
|
||||||
scprintf(_SC("-----\n"));
|
printf("-----\n");
|
||||||
scprintf(_SC("stack size[%d]\n"),func->_stacksize);
|
printf("stack size[%d]\n",func->_stacksize);
|
||||||
scprintf(_SC("--------------------------------------------------------------------\n\n"));
|
printf("--------------------------------------------------------------------\n\n");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -233,7 +234,7 @@ SQInteger SQFuncState::GetConstant(const SQObject &cons)
|
|||||||
_nliterals++;
|
_nliterals++;
|
||||||
if(_nliterals > MAX_LITERALS) {
|
if(_nliterals > MAX_LITERALS) {
|
||||||
val.Null();
|
val.Null();
|
||||||
Error(_SC("internal compiler error: too many literals"));
|
Error("internal compiler error: too many literals");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return _integer(val);
|
return _integer(val);
|
||||||
@@ -262,7 +263,7 @@ SQInteger SQFuncState::AllocStackPos()
|
|||||||
SQInteger npos=_vlocals.size();
|
SQInteger npos=_vlocals.size();
|
||||||
_vlocals.push_back(SQLocalVarInfo());
|
_vlocals.push_back(SQLocalVarInfo());
|
||||||
if(_vlocals.size()>((SQUnsignedInteger)_stacksize)) {
|
if(_vlocals.size()>((SQUnsignedInteger)_stacksize)) {
|
||||||
if(_stacksize>MAX_FUNC_STACKSIZE) Error(_SC("internal compiler error: too many locals"));
|
if(_stacksize>MAX_FUNC_STACKSIZE) Error("internal compiler error: too many locals");
|
||||||
_stacksize=_vlocals.size();
|
_stacksize=_vlocals.size();
|
||||||
}
|
}
|
||||||
return npos;
|
return npos;
|
||||||
@@ -418,7 +419,6 @@ void SQFuncState::AddInstruction(SQInstruction &i)
|
|||||||
break;
|
break;
|
||||||
case _OP_GET:
|
case _OP_GET:
|
||||||
if( pi.op == _OP_LOAD && pi._arg0 == i._arg2 && (!IsLocal(pi._arg0))){
|
if( pi.op == _OP_LOAD && pi._arg0 == i._arg2 && (!IsLocal(pi._arg0))){
|
||||||
pi._arg1 = pi._arg1;
|
|
||||||
pi._arg2 = (unsigned char)i._arg1;
|
pi._arg2 = (unsigned char)i._arg1;
|
||||||
pi.op = _OP_GETK;
|
pi.op = _OP_GETK;
|
||||||
pi._arg0 = i._arg0;
|
pi._arg0 = i._arg0;
|
||||||
@@ -430,7 +430,6 @@ void SQFuncState::AddInstruction(SQInstruction &i)
|
|||||||
if( pi.op == _OP_LOAD && pi._arg0 == i._arg1 && (!IsLocal(pi._arg0))){
|
if( pi.op == _OP_LOAD && pi._arg0 == i._arg1 && (!IsLocal(pi._arg0))){
|
||||||
pi.op = _OP_PREPCALLK;
|
pi.op = _OP_PREPCALLK;
|
||||||
pi._arg0 = i._arg0;
|
pi._arg0 = i._arg0;
|
||||||
pi._arg1 = pi._arg1;
|
|
||||||
pi._arg2 = i._arg2;
|
pi._arg2 = i._arg2;
|
||||||
pi._arg3 = i._arg3;
|
pi._arg3 = i._arg3;
|
||||||
return;
|
return;
|
||||||
@@ -440,7 +439,6 @@ void SQFuncState::AddInstruction(SQInstruction &i)
|
|||||||
if(pi.op == _OP_LOAD && pi._arg0 == i._arg1 && (!IsLocal(pi._arg0))){
|
if(pi.op == _OP_LOAD && pi._arg0 == i._arg1 && (!IsLocal(pi._arg0))){
|
||||||
pi.op = _OP_APPENDARRAY;
|
pi.op = _OP_APPENDARRAY;
|
||||||
pi._arg0 = i._arg0;
|
pi._arg0 = i._arg0;
|
||||||
pi._arg1 = pi._arg1;
|
|
||||||
pi._arg2 = MAX_FUNC_STACKSIZE;
|
pi._arg2 = MAX_FUNC_STACKSIZE;
|
||||||
pi._arg3 = MAX_FUNC_STACKSIZE;
|
pi._arg3 = MAX_FUNC_STACKSIZE;
|
||||||
return;
|
return;
|
||||||
@@ -475,7 +473,6 @@ void SQFuncState::AddInstruction(SQInstruction &i)
|
|||||||
{
|
{
|
||||||
pi.op = i.op;
|
pi.op = i.op;
|
||||||
pi._arg0 = i._arg0;
|
pi._arg0 = i._arg0;
|
||||||
pi._arg1 = pi._arg1;
|
|
||||||
pi._arg2 = i._arg2;
|
pi._arg2 = i._arg2;
|
||||||
pi._arg3 = MAX_FUNC_STACKSIZE;
|
pi._arg3 = MAX_FUNC_STACKSIZE;
|
||||||
return;
|
return;
|
||||||
@@ -541,7 +538,7 @@ SQFunctionProto *SQFuncState::BuildProto()
|
|||||||
for(SQUnsignedInteger no = 0; no < _lineinfos.size(); no++) f->_lineinfos[no] = _lineinfos[no];
|
for(SQUnsignedInteger no = 0; no < _lineinfos.size(); no++) f->_lineinfos[no] = _lineinfos[no];
|
||||||
for(SQUnsignedInteger no = 0; no < _defaultparams.size(); no++) f->_defaultparams[no] = _defaultparams[no];
|
for(SQUnsignedInteger no = 0; no < _defaultparams.size(); no++) f->_defaultparams[no] = _defaultparams[no];
|
||||||
|
|
||||||
memcpy(f->_instructions,&_instructions[0],_instructions.size()*sizeof(SQInstruction));
|
memcpy(f->_instructions,&_instructions[0],(size_t)_instructions.size()*sizeof(SQInstruction));
|
||||||
|
|
||||||
f->_varparams = _varparams;
|
f->_varparams = _varparams;
|
||||||
|
|
||||||
|
|||||||
231
src/3rdparty/squirrel/squirrel/sqlexer.cpp
vendored
231
src/3rdparty/squirrel/squirrel/sqlexer.cpp
vendored
@@ -1,30 +1,41 @@
|
|||||||
/*
|
/*
|
||||||
see copyright notice in squirrel.h
|
* see copyright notice in squirrel.h
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "../../../stdafx.h"
|
||||||
|
|
||||||
#include "sqpcheader.h"
|
#include "sqpcheader.h"
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <stdlib.h>
|
|
||||||
#include "sqtable.h"
|
#include "sqtable.h"
|
||||||
#include "sqstring.h"
|
#include "sqstring.h"
|
||||||
#include "sqcompiler.h"
|
#include "sqcompiler.h"
|
||||||
#include "sqlexer.h"
|
#include "sqlexer.h"
|
||||||
|
|
||||||
|
#include "../../../string_func.h"
|
||||||
|
|
||||||
|
#include "../../../safeguards.h"
|
||||||
|
|
||||||
#define CUR_CHAR (_currdata)
|
#define CUR_CHAR (_currdata)
|
||||||
#define RETURN_TOKEN(t) { _prevtoken = _curtoken; _curtoken = t; return t;}
|
#define RETURN_TOKEN(t) { _prevtoken = _curtoken; _curtoken = t; return t;}
|
||||||
#define IS_EOB() (CUR_CHAR <= SQUIRREL_EOB)
|
#define IS_EOB() (CUR_CHAR <= SQUIRREL_EOB)
|
||||||
#define NEXT() {Next();_currentcolumn++;}
|
#define NEXT() {Next();_currentcolumn++;}
|
||||||
#define INIT_TEMP_STRING() { _longstr.resize(0);}
|
#define ADD_KEYWORD(key,id) _keywords->NewSlot( SQString::Create(ss, #key) ,SQInteger(id))
|
||||||
#define APPEND_CHAR(c) { _longstr.push_back(c);}
|
|
||||||
#define TERMINATE_BUFFER() {_longstr.push_back(_SC('\0'));}
|
|
||||||
#define ADD_KEYWORD(key,id) _keywords->NewSlot( SQString::Create(ss, _SC(#key)) ,SQInteger(id))
|
|
||||||
|
|
||||||
SQLexer::SQLexer(){}
|
|
||||||
SQLexer::~SQLexer()
|
SQLexer::~SQLexer()
|
||||||
{
|
{
|
||||||
_keywords->Release();
|
_keywords->Release();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SQLexer::Init(SQSharedState *ss, SQLEXREADFUNC rg, SQUserPointer up,CompilerErrorFunc efunc,void *ed)
|
void SQLexer::APPEND_CHAR(WChar c)
|
||||||
|
{
|
||||||
|
char buf[4];
|
||||||
|
size_t chars = Utf8Encode(buf, c);
|
||||||
|
for (size_t i = 0; i < chars; i++) {
|
||||||
|
_longstr.push_back(buf[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SQLexer::SQLexer(SQSharedState *ss, SQLEXREADFUNC rg, SQUserPointer up,CompilerErrorFunc efunc,void *ed)
|
||||||
{
|
{
|
||||||
_errfunc = efunc;
|
_errfunc = efunc;
|
||||||
_errtarget = ed;
|
_errtarget = ed;
|
||||||
@@ -74,20 +85,26 @@ void SQLexer::Init(SQSharedState *ss, SQLEXREADFUNC rg, SQUserPointer up,Compile
|
|||||||
_lasttokenline = _currentline = 1;
|
_lasttokenline = _currentline = 1;
|
||||||
_currentcolumn = 0;
|
_currentcolumn = 0;
|
||||||
_prevtoken = -1;
|
_prevtoken = -1;
|
||||||
|
_curtoken = -1;
|
||||||
|
|
||||||
|
_svalue = NULL;
|
||||||
|
_nvalue = 0;
|
||||||
|
_fvalue = 0;
|
||||||
|
|
||||||
Next();
|
Next();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SQLexer::Error(const SQChar *err)
|
NORETURN void SQLexer::Error(const SQChar *err)
|
||||||
{
|
{
|
||||||
_errfunc(_errtarget,err);
|
_errfunc(_errtarget,err);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SQLexer::Next()
|
void SQLexer::Next()
|
||||||
{
|
{
|
||||||
SQInteger t = _readf(_up);
|
WChar t = _readf(_up);
|
||||||
if(t > MAX_CHAR) Error(_SC("Invalid character"));
|
if(t > MAX_CHAR) Error("Invalid character");
|
||||||
if(t != 0) {
|
if(t != 0) {
|
||||||
_currdata = (LexChar)t;
|
_currdata = t;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
_currdata = SQUIRREL_EOB;
|
_currdata = SQUIRREL_EOB;
|
||||||
@@ -110,9 +127,9 @@ void SQLexer::LexBlockComment()
|
|||||||
bool done = false;
|
bool done = false;
|
||||||
while(!done) {
|
while(!done) {
|
||||||
switch(CUR_CHAR) {
|
switch(CUR_CHAR) {
|
||||||
case _SC('*'): { NEXT(); if(CUR_CHAR == _SC('/')) { done = true; NEXT(); }}; continue;
|
case '*': { NEXT(); if(CUR_CHAR == '/') { done = true; NEXT(); }}; continue;
|
||||||
case _SC('\n'): _currentline++; NEXT(); continue;
|
case '\n': _currentline++; NEXT(); continue;
|
||||||
case SQUIRREL_EOB: Error(_SC("missing \"*/\" in comment"));
|
case SQUIRREL_EOB: Error("missing \"*/\" in comment");
|
||||||
default: NEXT();
|
default: NEXT();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -123,136 +140,134 @@ SQInteger SQLexer::Lex()
|
|||||||
_lasttokenline = _currentline;
|
_lasttokenline = _currentline;
|
||||||
while(CUR_CHAR != SQUIRREL_EOB) {
|
while(CUR_CHAR != SQUIRREL_EOB) {
|
||||||
switch(CUR_CHAR){
|
switch(CUR_CHAR){
|
||||||
case _SC('\t'): case _SC('\r'): case _SC(' '): NEXT(); continue;
|
case '\t': case '\r': case ' ': NEXT(); continue;
|
||||||
case _SC('\n'):
|
case '\n':
|
||||||
_currentline++;
|
_currentline++;
|
||||||
_prevtoken=_curtoken;
|
_prevtoken=_curtoken;
|
||||||
_curtoken=_SC('\n');
|
_curtoken='\n';
|
||||||
NEXT();
|
NEXT();
|
||||||
_currentcolumn=1;
|
_currentcolumn=1;
|
||||||
continue;
|
continue;
|
||||||
case _SC('/'):
|
case '/':
|
||||||
NEXT();
|
NEXT();
|
||||||
switch(CUR_CHAR){
|
switch(CUR_CHAR){
|
||||||
case _SC('*'):
|
case '*':
|
||||||
NEXT();
|
NEXT();
|
||||||
LexBlockComment();
|
LexBlockComment();
|
||||||
continue;
|
continue;
|
||||||
case _SC('/'):
|
case '/':
|
||||||
do { NEXT(); } while (CUR_CHAR != _SC('\n') && (!IS_EOB()));
|
do { NEXT(); } while (CUR_CHAR != '\n' && (!IS_EOB()));
|
||||||
continue;
|
continue;
|
||||||
case _SC('='):
|
case '=':
|
||||||
NEXT();
|
NEXT();
|
||||||
RETURN_TOKEN(TK_DIVEQ);
|
RETURN_TOKEN(TK_DIVEQ);
|
||||||
continue;
|
case '>':
|
||||||
case _SC('>'):
|
|
||||||
NEXT();
|
NEXT();
|
||||||
RETURN_TOKEN(TK_ATTR_CLOSE);
|
RETURN_TOKEN(TK_ATTR_CLOSE);
|
||||||
continue;
|
|
||||||
default:
|
default:
|
||||||
RETURN_TOKEN('/');
|
RETURN_TOKEN('/');
|
||||||
}
|
}
|
||||||
case _SC('='):
|
case '=':
|
||||||
NEXT();
|
NEXT();
|
||||||
if (CUR_CHAR != _SC('=')){ RETURN_TOKEN('=') }
|
if (CUR_CHAR != '='){ RETURN_TOKEN('=') }
|
||||||
else { NEXT(); RETURN_TOKEN(TK_EQ); }
|
else { NEXT(); RETURN_TOKEN(TK_EQ); }
|
||||||
case _SC('<'):
|
case '<':
|
||||||
NEXT();
|
NEXT();
|
||||||
if ( CUR_CHAR == _SC('=') ) { NEXT(); RETURN_TOKEN(TK_LE) }
|
if ( CUR_CHAR == '=' ) { NEXT(); RETURN_TOKEN(TK_LE) }
|
||||||
else if ( CUR_CHAR == _SC('-') ) { NEXT(); RETURN_TOKEN(TK_NEWSLOT); }
|
else if ( CUR_CHAR == '-' ) { NEXT(); RETURN_TOKEN(TK_NEWSLOT); }
|
||||||
else if ( CUR_CHAR == _SC('<') ) { NEXT(); RETURN_TOKEN(TK_SHIFTL); }
|
else if ( CUR_CHAR == '<' ) { NEXT(); RETURN_TOKEN(TK_SHIFTL); }
|
||||||
else if ( CUR_CHAR == _SC('/') ) { NEXT(); RETURN_TOKEN(TK_ATTR_OPEN); }
|
else if ( CUR_CHAR == '/' ) { NEXT(); RETURN_TOKEN(TK_ATTR_OPEN); }
|
||||||
//else if ( CUR_CHAR == _SC('[') ) { NEXT(); ReadMultilineString(); RETURN_TOKEN(TK_STRING_LITERAL); }
|
//else if ( CUR_CHAR == '[' ) { NEXT(); ReadMultilineString(); RETURN_TOKEN(TK_STRING_LITERAL); }
|
||||||
else { RETURN_TOKEN('<') }
|
else { RETURN_TOKEN('<') }
|
||||||
case _SC('>'):
|
case '>':
|
||||||
NEXT();
|
NEXT();
|
||||||
if (CUR_CHAR == _SC('=')){ NEXT(); RETURN_TOKEN(TK_GE);}
|
if (CUR_CHAR == '='){ NEXT(); RETURN_TOKEN(TK_GE);}
|
||||||
else if(CUR_CHAR == _SC('>')){
|
else if(CUR_CHAR == '>'){
|
||||||
NEXT();
|
NEXT();
|
||||||
if(CUR_CHAR == _SC('>')){
|
if(CUR_CHAR == '>'){
|
||||||
NEXT();
|
NEXT();
|
||||||
RETURN_TOKEN(TK_USHIFTR);
|
RETURN_TOKEN(TK_USHIFTR);
|
||||||
}
|
}
|
||||||
RETURN_TOKEN(TK_SHIFTR);
|
RETURN_TOKEN(TK_SHIFTR);
|
||||||
}
|
}
|
||||||
else { RETURN_TOKEN('>') }
|
else { RETURN_TOKEN('>') }
|
||||||
case _SC('!'):
|
case '!':
|
||||||
NEXT();
|
NEXT();
|
||||||
if (CUR_CHAR != _SC('=')){ RETURN_TOKEN('!')}
|
if (CUR_CHAR != '='){ RETURN_TOKEN('!')}
|
||||||
else { NEXT(); RETURN_TOKEN(TK_NE); }
|
else { NEXT(); RETURN_TOKEN(TK_NE); }
|
||||||
case _SC('@'): {
|
case '@': {
|
||||||
SQInteger stype;
|
SQInteger stype;
|
||||||
NEXT();
|
NEXT();
|
||||||
if(CUR_CHAR != _SC('"'))
|
if(CUR_CHAR != '"')
|
||||||
Error(_SC("string expected"));
|
Error("string expected");
|
||||||
if((stype=ReadString(_SC('"'),true))!=-1) {
|
if((stype=ReadString('"',true))!=-1) {
|
||||||
RETURN_TOKEN(stype);
|
RETURN_TOKEN(stype);
|
||||||
}
|
}
|
||||||
Error(_SC("error parsing the string"));
|
Error("error parsing the string");
|
||||||
}
|
}
|
||||||
case _SC('"'):
|
case '"':
|
||||||
case _SC('\''): {
|
case '\'': {
|
||||||
SQInteger stype;
|
SQInteger stype;
|
||||||
if((stype=ReadString(CUR_CHAR,false))!=-1){
|
if((stype=ReadString(CUR_CHAR,false))!=-1){
|
||||||
RETURN_TOKEN(stype);
|
RETURN_TOKEN(stype);
|
||||||
}
|
}
|
||||||
Error(_SC("error parsing the string"));
|
Error("error parsing the string");
|
||||||
}
|
}
|
||||||
case _SC('{'): case _SC('}'): case _SC('('): case _SC(')'): case _SC('['): case _SC(']'):
|
case '{': case '}': case '(': case ')': case '[': case ']':
|
||||||
case _SC(';'): case _SC(','): case _SC('?'): case _SC('^'): case _SC('~'):
|
case ';': case ',': case '?': case '^': case '~':
|
||||||
{SQInteger ret = CUR_CHAR;
|
{SQInteger ret = CUR_CHAR;
|
||||||
NEXT(); RETURN_TOKEN(ret); }
|
NEXT(); RETURN_TOKEN(ret); }
|
||||||
case _SC('.'):
|
case '.':
|
||||||
NEXT();
|
NEXT();
|
||||||
if (CUR_CHAR != _SC('.')){ RETURN_TOKEN('.') }
|
if (CUR_CHAR != '.'){ RETURN_TOKEN('.') }
|
||||||
NEXT();
|
NEXT();
|
||||||
if (CUR_CHAR != _SC('.')){ Error(_SC("invalid token '..'")); }
|
if (CUR_CHAR != '.'){ Error("invalid token '..'"); }
|
||||||
NEXT();
|
NEXT();
|
||||||
RETURN_TOKEN(TK_VARPARAMS);
|
RETURN_TOKEN(TK_VARPARAMS);
|
||||||
case _SC('&'):
|
case '&':
|
||||||
NEXT();
|
NEXT();
|
||||||
if (CUR_CHAR != _SC('&')){ RETURN_TOKEN('&') }
|
if (CUR_CHAR != '&'){ RETURN_TOKEN('&') }
|
||||||
else { NEXT(); RETURN_TOKEN(TK_AND); }
|
else { NEXT(); RETURN_TOKEN(TK_AND); }
|
||||||
case _SC('|'):
|
case '|':
|
||||||
NEXT();
|
NEXT();
|
||||||
if (CUR_CHAR != _SC('|')){ RETURN_TOKEN('|') }
|
if (CUR_CHAR != '|'){ RETURN_TOKEN('|') }
|
||||||
else { NEXT(); RETURN_TOKEN(TK_OR); }
|
else { NEXT(); RETURN_TOKEN(TK_OR); }
|
||||||
case _SC(':'):
|
case ':':
|
||||||
NEXT();
|
NEXT();
|
||||||
if (CUR_CHAR != _SC(':')){ RETURN_TOKEN(':') }
|
if (CUR_CHAR != ':'){ RETURN_TOKEN(':') }
|
||||||
else { NEXT(); RETURN_TOKEN(TK_DOUBLE_COLON); }
|
else { NEXT(); RETURN_TOKEN(TK_DOUBLE_COLON); }
|
||||||
case _SC('*'):
|
case '*':
|
||||||
NEXT();
|
NEXT();
|
||||||
if (CUR_CHAR == _SC('=')){ NEXT(); RETURN_TOKEN(TK_MULEQ);}
|
if (CUR_CHAR == '='){ NEXT(); RETURN_TOKEN(TK_MULEQ);}
|
||||||
else RETURN_TOKEN('*');
|
else RETURN_TOKEN('*');
|
||||||
case _SC('%'):
|
case '%':
|
||||||
NEXT();
|
NEXT();
|
||||||
if (CUR_CHAR == _SC('=')){ NEXT(); RETURN_TOKEN(TK_MODEQ);}
|
if (CUR_CHAR == '='){ NEXT(); RETURN_TOKEN(TK_MODEQ);}
|
||||||
else RETURN_TOKEN('%');
|
else RETURN_TOKEN('%');
|
||||||
case _SC('-'):
|
case '-':
|
||||||
NEXT();
|
NEXT();
|
||||||
if (CUR_CHAR == _SC('=')){ NEXT(); RETURN_TOKEN(TK_MINUSEQ);}
|
if (CUR_CHAR == '='){ NEXT(); RETURN_TOKEN(TK_MINUSEQ);}
|
||||||
else if (CUR_CHAR == _SC('-')){ NEXT(); RETURN_TOKEN(TK_MINUSMINUS);}
|
else if (CUR_CHAR == '-'){ NEXT(); RETURN_TOKEN(TK_MINUSMINUS);}
|
||||||
else RETURN_TOKEN('-');
|
else RETURN_TOKEN('-');
|
||||||
case _SC('+'):
|
case '+':
|
||||||
NEXT();
|
NEXT();
|
||||||
if (CUR_CHAR == _SC('=')){ NEXT(); RETURN_TOKEN(TK_PLUSEQ);}
|
if (CUR_CHAR == '='){ NEXT(); RETURN_TOKEN(TK_PLUSEQ);}
|
||||||
else if (CUR_CHAR == _SC('+')){ NEXT(); RETURN_TOKEN(TK_PLUSPLUS);}
|
else if (CUR_CHAR == '+'){ NEXT(); RETURN_TOKEN(TK_PLUSPLUS);}
|
||||||
else RETURN_TOKEN('+');
|
else RETURN_TOKEN('+');
|
||||||
case SQUIRREL_EOB:
|
case SQUIRREL_EOB:
|
||||||
return 0;
|
return 0;
|
||||||
default:{
|
default:{
|
||||||
if (scisdigit(CUR_CHAR)) {
|
if (isdigit(CUR_CHAR)) {
|
||||||
SQInteger ret = ReadNumber();
|
SQInteger ret = ReadNumber();
|
||||||
RETURN_TOKEN(ret);
|
RETURN_TOKEN(ret);
|
||||||
}
|
}
|
||||||
else if (scisalpha(CUR_CHAR) || CUR_CHAR == _SC('_')) {
|
else if (isalpha(CUR_CHAR) || CUR_CHAR == '_') {
|
||||||
SQInteger t = ReadID();
|
SQInteger t = ReadID();
|
||||||
RETURN_TOKEN(t);
|
RETURN_TOKEN(t);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
SQInteger c = CUR_CHAR;
|
SQInteger c = CUR_CHAR;
|
||||||
if (sciscntrl((int)c)) Error(_SC("unexpected character(control)"));
|
if (iscntrl((int)c)) Error("unexpected character(control)");
|
||||||
NEXT();
|
NEXT();
|
||||||
RETURN_TOKEN(c);
|
RETURN_TOKEN(c);
|
||||||
}
|
}
|
||||||
@@ -273,7 +288,7 @@ SQInteger SQLexer::GetIDType(SQChar *s)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
SQInteger SQLexer::ReadString(SQChar ndelim,bool verbatim)
|
SQInteger SQLexer::ReadString(WChar ndelim,bool verbatim)
|
||||||
{
|
{
|
||||||
INIT_TEMP_STRING();
|
INIT_TEMP_STRING();
|
||||||
NEXT();
|
NEXT();
|
||||||
@@ -282,22 +297,22 @@ SQInteger SQLexer::ReadString(SQChar ndelim,bool verbatim)
|
|||||||
while(CUR_CHAR != ndelim) {
|
while(CUR_CHAR != ndelim) {
|
||||||
switch(CUR_CHAR) {
|
switch(CUR_CHAR) {
|
||||||
case SQUIRREL_EOB:
|
case SQUIRREL_EOB:
|
||||||
Error(_SC("unfinished string"));
|
Error("unfinished string");
|
||||||
return -1;
|
return -1;
|
||||||
case _SC('\n'):
|
case '\n':
|
||||||
if(!verbatim) Error(_SC("newline in a constant"));
|
if(!verbatim) Error("newline in a constant");
|
||||||
APPEND_CHAR(CUR_CHAR); NEXT();
|
APPEND_CHAR(CUR_CHAR); NEXT();
|
||||||
_currentline++;
|
_currentline++;
|
||||||
break;
|
break;
|
||||||
case _SC('\\'):
|
case '\\':
|
||||||
if(verbatim) {
|
if(verbatim) {
|
||||||
APPEND_CHAR('\\'); NEXT();
|
APPEND_CHAR('\\'); NEXT();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
NEXT();
|
NEXT();
|
||||||
switch(CUR_CHAR) {
|
switch(CUR_CHAR) {
|
||||||
case _SC('x'): NEXT(); {
|
case 'x': NEXT(); {
|
||||||
if(!isxdigit(CUR_CHAR)) Error(_SC("hexadecimal number expected"));
|
if(!isxdigit(CUR_CHAR)) Error("hexadecimal number expected");
|
||||||
const SQInteger maxdigits = 4;
|
const SQInteger maxdigits = 4;
|
||||||
SQChar temp[maxdigits+1];
|
SQChar temp[maxdigits+1];
|
||||||
SQInteger n = 0;
|
SQInteger n = 0;
|
||||||
@@ -308,22 +323,22 @@ SQInteger SQLexer::ReadString(SQChar ndelim,bool verbatim)
|
|||||||
}
|
}
|
||||||
temp[n] = 0;
|
temp[n] = 0;
|
||||||
SQChar *sTemp;
|
SQChar *sTemp;
|
||||||
APPEND_CHAR((SQChar)scstrtoul(temp,&sTemp,16));
|
APPEND_CHAR((SQChar)strtoul(temp,&sTemp,16));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case _SC('t'): APPEND_CHAR(_SC('\t')); NEXT(); break;
|
case 't': APPEND_CHAR('\t'); NEXT(); break;
|
||||||
case _SC('a'): APPEND_CHAR(_SC('\a')); NEXT(); break;
|
case 'a': APPEND_CHAR('\a'); NEXT(); break;
|
||||||
case _SC('b'): APPEND_CHAR(_SC('\b')); NEXT(); break;
|
case 'b': APPEND_CHAR('\b'); NEXT(); break;
|
||||||
case _SC('n'): APPEND_CHAR(_SC('\n')); NEXT(); break;
|
case 'n': APPEND_CHAR('\n'); NEXT(); break;
|
||||||
case _SC('r'): APPEND_CHAR(_SC('\r')); NEXT(); break;
|
case 'r': APPEND_CHAR('\r'); NEXT(); break;
|
||||||
case _SC('v'): APPEND_CHAR(_SC('\v')); NEXT(); break;
|
case 'v': APPEND_CHAR('\v'); NEXT(); break;
|
||||||
case _SC('f'): APPEND_CHAR(_SC('\f')); NEXT(); break;
|
case 'f': APPEND_CHAR('\f'); NEXT(); break;
|
||||||
case _SC('0'): APPEND_CHAR(_SC('\0')); NEXT(); break;
|
case '0': APPEND_CHAR('\0'); NEXT(); break;
|
||||||
case _SC('\\'): APPEND_CHAR(_SC('\\')); NEXT(); break;
|
case '\\': APPEND_CHAR('\\'); NEXT(); break;
|
||||||
case _SC('"'): APPEND_CHAR(_SC('"')); NEXT(); break;
|
case '"': APPEND_CHAR('"'); NEXT(); break;
|
||||||
case _SC('\''): APPEND_CHAR(_SC('\'')); NEXT(); break;
|
case '\'': APPEND_CHAR('\''); NEXT(); break;
|
||||||
default:
|
default:
|
||||||
Error(_SC("unrecognised escaper char"));
|
Error("unrecognised escaper char");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -344,9 +359,9 @@ SQInteger SQLexer::ReadString(SQChar ndelim,bool verbatim)
|
|||||||
}
|
}
|
||||||
TERMINATE_BUFFER();
|
TERMINATE_BUFFER();
|
||||||
SQInteger len = _longstr.size()-1;
|
SQInteger len = _longstr.size()-1;
|
||||||
if(ndelim == _SC('\'')) {
|
if(ndelim == '\'') {
|
||||||
if(len == 0) Error(_SC("empty constant"));
|
if(len == 0) Error("empty constant");
|
||||||
if(len > 1) Error(_SC("constant too long"));
|
if(len > 1) Error("constant too long");
|
||||||
_nvalue = _longstr[0];
|
_nvalue = _longstr[0];
|
||||||
return TK_INTEGER;
|
return TK_INTEGER;
|
||||||
}
|
}
|
||||||
@@ -359,8 +374,8 @@ void LexHexadecimal(const SQChar *s,SQUnsignedInteger *res)
|
|||||||
*res = 0;
|
*res = 0;
|
||||||
while(*s != 0)
|
while(*s != 0)
|
||||||
{
|
{
|
||||||
if(scisdigit(*s)) *res = (*res)*16+((*s++)-'0');
|
if(isdigit(*s)) *res = (*res)*16+((*s++)-'0');
|
||||||
else if(scisxdigit(*s)) *res = (*res)*16+(toupper(*s++)-'A'+10);
|
else if(isxdigit(*s)) *res = (*res)*16+(toupper(*s++)-'A'+10);
|
||||||
else { assert(0); }
|
else { assert(0); }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -374,7 +389,7 @@ void LexInteger(const SQChar *s,SQUnsignedInteger *res)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SQInteger scisodigit(SQChar c) { return c >= _SC('0') && c <= _SC('7'); }
|
SQInteger scisodigit(SQChar c) { return c >= '0' && c <= '7'; }
|
||||||
|
|
||||||
void LexOctal(const SQChar *s,SQUnsignedInteger *res)
|
void LexOctal(const SQChar *s,SQUnsignedInteger *res)
|
||||||
{
|
{
|
||||||
@@ -401,14 +416,14 @@ SQInteger SQLexer::ReadNumber()
|
|||||||
SQChar *sTemp;
|
SQChar *sTemp;
|
||||||
INIT_TEMP_STRING();
|
INIT_TEMP_STRING();
|
||||||
NEXT();
|
NEXT();
|
||||||
if(firstchar == _SC('0') && (toupper(CUR_CHAR) == _SC('X') || scisodigit(CUR_CHAR)) ) {
|
if(firstchar == '0' && (toupper(CUR_CHAR) == 'X' || scisodigit(CUR_CHAR)) ) {
|
||||||
if(scisodigit(CUR_CHAR)) {
|
if(scisodigit(CUR_CHAR)) {
|
||||||
type = TOCTAL;
|
type = TOCTAL;
|
||||||
while(scisodigit(CUR_CHAR)) {
|
while(scisodigit(CUR_CHAR)) {
|
||||||
APPEND_CHAR(CUR_CHAR);
|
APPEND_CHAR(CUR_CHAR);
|
||||||
NEXT();
|
NEXT();
|
||||||
}
|
}
|
||||||
if(scisdigit(CUR_CHAR)) Error(_SC("invalid octal number"));
|
if(isdigit(CUR_CHAR)) Error("invalid octal number");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
NEXT();
|
NEXT();
|
||||||
@@ -417,15 +432,15 @@ SQInteger SQLexer::ReadNumber()
|
|||||||
APPEND_CHAR(CUR_CHAR);
|
APPEND_CHAR(CUR_CHAR);
|
||||||
NEXT();
|
NEXT();
|
||||||
}
|
}
|
||||||
if(_longstr.size() > MAX_HEX_DIGITS) Error(_SC("too many digits for an Hex number"));
|
if(_longstr.size() > MAX_HEX_DIGITS) Error("too many digits for an Hex number");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
APPEND_CHAR((int)firstchar);
|
APPEND_CHAR((int)firstchar);
|
||||||
while (CUR_CHAR == _SC('.') || scisdigit(CUR_CHAR) || isexponent(CUR_CHAR)) {
|
while (CUR_CHAR == '.' || isdigit(CUR_CHAR) || isexponent(CUR_CHAR)) {
|
||||||
if(CUR_CHAR == _SC('.') || isexponent(CUR_CHAR)) type = TFLOAT;
|
if(CUR_CHAR == '.' || isexponent(CUR_CHAR)) type = TFLOAT;
|
||||||
if(isexponent(CUR_CHAR)) {
|
if(isexponent(CUR_CHAR)) {
|
||||||
if(type != TFLOAT) Error(_SC("invalid numeric format"));
|
if(type != TFLOAT) Error("invalid numeric format");
|
||||||
type = TSCIENTIFIC;
|
type = TSCIENTIFIC;
|
||||||
APPEND_CHAR(CUR_CHAR);
|
APPEND_CHAR(CUR_CHAR);
|
||||||
NEXT();
|
NEXT();
|
||||||
@@ -433,7 +448,7 @@ SQInteger SQLexer::ReadNumber()
|
|||||||
APPEND_CHAR(CUR_CHAR);
|
APPEND_CHAR(CUR_CHAR);
|
||||||
NEXT();
|
NEXT();
|
||||||
}
|
}
|
||||||
if(!scisdigit(CUR_CHAR)) Error(_SC("exponent expected"));
|
if(!isdigit(CUR_CHAR)) Error("exponent expected");
|
||||||
}
|
}
|
||||||
|
|
||||||
APPEND_CHAR(CUR_CHAR);
|
APPEND_CHAR(CUR_CHAR);
|
||||||
@@ -444,7 +459,7 @@ SQInteger SQLexer::ReadNumber()
|
|||||||
switch(type) {
|
switch(type) {
|
||||||
case TSCIENTIFIC:
|
case TSCIENTIFIC:
|
||||||
case TFLOAT:
|
case TFLOAT:
|
||||||
_fvalue = (SQFloat)scstrtod(&_longstr[0],&sTemp);
|
_fvalue = (SQFloat)strtod(&_longstr[0],&sTemp);
|
||||||
return TK_FLOAT;
|
return TK_FLOAT;
|
||||||
case TINT:
|
case TINT:
|
||||||
LexInteger(&_longstr[0],(SQUnsignedInteger *)&_nvalue);
|
LexInteger(&_longstr[0],(SQUnsignedInteger *)&_nvalue);
|
||||||
@@ -466,7 +481,7 @@ SQInteger SQLexer::ReadID()
|
|||||||
do {
|
do {
|
||||||
APPEND_CHAR(CUR_CHAR);
|
APPEND_CHAR(CUR_CHAR);
|
||||||
NEXT();
|
NEXT();
|
||||||
} while(scisalnum(CUR_CHAR) || CUR_CHAR == _SC('_'));
|
} while(isalnum(CUR_CHAR) || CUR_CHAR == '_');
|
||||||
TERMINATE_BUFFER();
|
TERMINATE_BUFFER();
|
||||||
res = GetIDType(&_longstr[0]);
|
res = GetIDType(&_longstr[0]);
|
||||||
if(res == TK_IDENTIFIER || res == TK_CONSTRUCTOR) {
|
if(res == TK_IDENTIFIER || res == TK_CONSTRUCTOR) {
|
||||||
|
|||||||
15
src/3rdparty/squirrel/squirrel/sqlexer.h
vendored
15
src/3rdparty/squirrel/squirrel/sqlexer.h
vendored
@@ -2,25 +2,26 @@
|
|||||||
#ifndef _SQLEXER_H_
|
#ifndef _SQLEXER_H_
|
||||||
#define _SQLEXER_H_
|
#define _SQLEXER_H_
|
||||||
|
|
||||||
typedef unsigned short LexChar;
|
|
||||||
|
|
||||||
struct SQLexer
|
struct SQLexer
|
||||||
{
|
{
|
||||||
SQLexer();
|
|
||||||
~SQLexer();
|
~SQLexer();
|
||||||
void Init(SQSharedState *ss,SQLEXREADFUNC rg,SQUserPointer up,CompilerErrorFunc efunc,void *ed);
|
SQLexer(SQSharedState *ss,SQLEXREADFUNC rg,SQUserPointer up,CompilerErrorFunc efunc,void *ed);
|
||||||
void Error(const SQChar *err);
|
NORETURN void Error(const SQChar *err);
|
||||||
SQInteger Lex();
|
SQInteger Lex();
|
||||||
const SQChar *Tok2Str(SQInteger tok);
|
const SQChar *Tok2Str(SQInteger tok);
|
||||||
private:
|
private:
|
||||||
SQInteger GetIDType(SQChar *s);
|
SQInteger GetIDType(SQChar *s);
|
||||||
SQInteger ReadString(SQChar ndelim,bool verbatim);
|
SQInteger ReadString(WChar ndelim,bool verbatim);
|
||||||
SQInteger ReadNumber();
|
SQInteger ReadNumber();
|
||||||
void LexBlockComment();
|
void LexBlockComment();
|
||||||
SQInteger ReadID();
|
SQInteger ReadID();
|
||||||
void Next();
|
void Next();
|
||||||
SQInteger _curtoken;
|
SQInteger _curtoken;
|
||||||
SQTable *_keywords;
|
SQTable *_keywords;
|
||||||
|
void INIT_TEMP_STRING() { _longstr.resize(0); }
|
||||||
|
void APPEND_CHAR(WChar c);
|
||||||
|
void TERMINATE_BUFFER() { _longstr.push_back('\0'); }
|
||||||
|
|
||||||
public:
|
public:
|
||||||
SQInteger _prevtoken;
|
SQInteger _prevtoken;
|
||||||
SQInteger _currentline;
|
SQInteger _currentline;
|
||||||
@@ -31,7 +32,7 @@ public:
|
|||||||
SQFloat _fvalue;
|
SQFloat _fvalue;
|
||||||
SQLEXREADFUNC _readf;
|
SQLEXREADFUNC _readf;
|
||||||
SQUserPointer _up;
|
SQUserPointer _up;
|
||||||
LexChar _currdata;
|
WChar _currdata;
|
||||||
SQSharedState *_sharedstate;
|
SQSharedState *_sharedstate;
|
||||||
sqvector<SQChar> _longstr;
|
sqvector<SQChar> _longstr;
|
||||||
CompilerErrorFunc _errfunc;
|
CompilerErrorFunc _errfunc;
|
||||||
|
|||||||
17
src/3rdparty/squirrel/squirrel/sqmem.cpp
vendored
17
src/3rdparty/squirrel/squirrel/sqmem.cpp
vendored
@@ -1,9 +1,16 @@
|
|||||||
/*
|
/*
|
||||||
see copyright notice in squirrel.h
|
* see copyright notice in squirrel.h
|
||||||
*/
|
*/
|
||||||
#include "sqpcheader.h"
|
|
||||||
void *sq_vm_malloc(SQUnsignedInteger size){ return malloc(size); }
|
|
||||||
|
|
||||||
void *sq_vm_realloc(void *p, SQUnsignedInteger oldsize, SQUnsignedInteger size){ return realloc(p, size); }
|
#include "../../../stdafx.h"
|
||||||
|
|
||||||
|
#include "sqpcheader.h"
|
||||||
|
|
||||||
|
#include "../../../core/alloc_func.hpp"
|
||||||
|
#include "../../../safeguards.h"
|
||||||
|
|
||||||
|
void *sq_vm_malloc(SQUnsignedInteger size){ return MallocT<char>((size_t)size); }
|
||||||
|
|
||||||
|
void *sq_vm_realloc(void *p, SQUnsignedInteger oldsize, SQUnsignedInteger size){ return ReallocT<char>(static_cast<char*>(p), (size_t)size); }
|
||||||
|
|
||||||
void sq_vm_free(void *p, SQUnsignedInteger size){ free(p); }
|
void sq_vm_free(void *p, SQUnsignedInteger size){ free(p); }
|
||||||
|
|||||||
63
src/3rdparty/squirrel/squirrel/sqobject.cpp
vendored
63
src/3rdparty/squirrel/squirrel/sqobject.cpp
vendored
@@ -1,6 +1,9 @@
|
|||||||
/*
|
/*
|
||||||
see copyright notice in squirrel.h
|
* see copyright notice in squirrel.h
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "../../../stdafx.h"
|
||||||
|
|
||||||
#include "sqpcheader.h"
|
#include "sqpcheader.h"
|
||||||
#include "sqvm.h"
|
#include "sqvm.h"
|
||||||
#include "sqstring.h"
|
#include "sqstring.h"
|
||||||
@@ -11,30 +14,32 @@
|
|||||||
#include "sqclass.h"
|
#include "sqclass.h"
|
||||||
#include "sqclosure.h"
|
#include "sqclosure.h"
|
||||||
|
|
||||||
|
#include "../../../safeguards.h"
|
||||||
|
|
||||||
|
|
||||||
const SQChar *IdType2Name(SQObjectType type)
|
const SQChar *IdType2Name(SQObjectType type)
|
||||||
{
|
{
|
||||||
switch(_RAW_TYPE(type))
|
switch(_RAW_TYPE(type))
|
||||||
{
|
{
|
||||||
case _RT_NULL:return _SC("null");
|
case _RT_NULL:return "null";
|
||||||
case _RT_INTEGER:return _SC("integer");
|
case _RT_INTEGER:return "integer";
|
||||||
case _RT_FLOAT:return _SC("float");
|
case _RT_FLOAT:return "float";
|
||||||
case _RT_BOOL:return _SC("bool");
|
case _RT_BOOL:return "bool";
|
||||||
case _RT_STRING:return _SC("string");
|
case _RT_STRING:return "string";
|
||||||
case _RT_TABLE:return _SC("table");
|
case _RT_TABLE:return "table";
|
||||||
case _RT_ARRAY:return _SC("array");
|
case _RT_ARRAY:return "array";
|
||||||
case _RT_GENERATOR:return _SC("generator");
|
case _RT_GENERATOR:return "generator";
|
||||||
case _RT_CLOSURE:
|
case _RT_CLOSURE:
|
||||||
case _RT_NATIVECLOSURE:
|
case _RT_NATIVECLOSURE:
|
||||||
return _SC("function");
|
return "function";
|
||||||
case _RT_USERDATA:
|
case _RT_USERDATA:
|
||||||
case _RT_USERPOINTER:
|
case _RT_USERPOINTER:
|
||||||
return _SC("userdata");
|
return "userdata";
|
||||||
case _RT_THREAD: return _SC("thread");
|
case _RT_THREAD: return "thread";
|
||||||
case _RT_FUNCPROTO: return _SC("function");
|
case _RT_FUNCPROTO: return "function";
|
||||||
case _RT_CLASS: return _SC("class");
|
case _RT_CLASS: return "class";
|
||||||
case _RT_INSTANCE: return _SC("instance");
|
case _RT_INSTANCE: return "instance";
|
||||||
case _RT_WEAKREF: return _SC("weakref");
|
case _RT_WEAKREF: return "weakref";
|
||||||
default:
|
default:
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@@ -130,8 +135,8 @@ bool SQDelegable::SetDelegate(SQTable *mt)
|
|||||||
|
|
||||||
bool SQGenerator::Yield(SQVM *v)
|
bool SQGenerator::Yield(SQVM *v)
|
||||||
{
|
{
|
||||||
if(_state==eSuspended) { v->Raise_Error(_SC("internal vm error, yielding dead generator")); return false;}
|
if(_state==eSuspended) { v->Raise_Error("internal vm error, yielding dead generator"); return false;}
|
||||||
if(_state==eDead) { v->Raise_Error(_SC("internal vm error, yielding a dead generator")); return false; }
|
if(_state==eDead) { v->Raise_Error("internal vm error, yielding a dead generator"); return false; }
|
||||||
SQInteger size = v->_top-v->_stackbase;
|
SQInteger size = v->_top-v->_stackbase;
|
||||||
_ci=*v->ci;
|
_ci=*v->ci;
|
||||||
_stack.resize(size);
|
_stack.resize(size);
|
||||||
@@ -156,8 +161,8 @@ bool SQGenerator::Yield(SQVM *v)
|
|||||||
bool SQGenerator::Resume(SQVM *v,SQInteger target)
|
bool SQGenerator::Resume(SQVM *v,SQInteger target)
|
||||||
{
|
{
|
||||||
SQInteger size=_stack.size();
|
SQInteger size=_stack.size();
|
||||||
if(_state==eDead){ v->Raise_Error(_SC("resuming dead generator")); return false; }
|
if(_state==eDead){ v->Raise_Error("resuming dead generator"); return false; }
|
||||||
if(_state==eRunning){ v->Raise_Error(_SC("resuming active generator")); return false; }
|
if(_state==eRunning){ v->Raise_Error("resuming active generator"); return false; }
|
||||||
SQInteger prevtop=v->_top-v->_stackbase;
|
SQInteger prevtop=v->_top-v->_stackbase;
|
||||||
PUSH_CALLINFO(v,_ci);
|
PUSH_CALLINFO(v,_ci);
|
||||||
SQInteger oldstackbase=v->_stackbase;
|
SQInteger oldstackbase=v->_stackbase;
|
||||||
@@ -184,7 +189,7 @@ bool SQGenerator::Resume(SQVM *v,SQInteger target)
|
|||||||
v->ci->_prevstkbase = (SQInt32)(v->_stackbase - oldstackbase);
|
v->ci->_prevstkbase = (SQInt32)(v->_stackbase - oldstackbase);
|
||||||
_state=eRunning;
|
_state=eRunning;
|
||||||
if (type(v->_debughook) != OT_NULL && _rawval(v->_debughook) != _rawval(v->ci->_closure))
|
if (type(v->_debughook) != OT_NULL && _rawval(v->_debughook) != _rawval(v->ci->_closure))
|
||||||
v->CallDebugHook(_SC('c'));
|
v->CallDebugHook('c');
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -232,7 +237,7 @@ SQInteger SQFunctionProto::GetLine(SQInstruction *curr)
|
|||||||
bool SafeWrite(HSQUIRRELVM v,SQWRITEFUNC write,SQUserPointer up,SQUserPointer dest,SQInteger size)
|
bool SafeWrite(HSQUIRRELVM v,SQWRITEFUNC write,SQUserPointer up,SQUserPointer dest,SQInteger size)
|
||||||
{
|
{
|
||||||
if(write(up,dest,size) != size) {
|
if(write(up,dest,size) != size) {
|
||||||
v->Raise_Error(_SC("io error (write function failure)"));
|
v->Raise_Error("io error (write function failure)");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@@ -241,7 +246,7 @@ bool SafeWrite(HSQUIRRELVM v,SQWRITEFUNC write,SQUserPointer up,SQUserPointer de
|
|||||||
bool SafeRead(HSQUIRRELVM v,SQWRITEFUNC read,SQUserPointer up,SQUserPointer dest,SQInteger size)
|
bool SafeRead(HSQUIRRELVM v,SQWRITEFUNC read,SQUserPointer up,SQUserPointer dest,SQInteger size)
|
||||||
{
|
{
|
||||||
if(size && read(up,dest,size) != size) {
|
if(size && read(up,dest,size) != size) {
|
||||||
v->Raise_Error(_SC("io error, read function failure, the origin stream could be corrupted/trucated"));
|
v->Raise_Error("io error, read function failure, the origin stream could be corrupted/trucated");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@@ -257,7 +262,7 @@ bool CheckTag(HSQUIRRELVM v,SQWRITEFUNC read,SQUserPointer up,SQInteger tag)
|
|||||||
SQInteger t;
|
SQInteger t;
|
||||||
_CHECK_IO(SafeRead(v,read,up,&t,sizeof(t)));
|
_CHECK_IO(SafeRead(v,read,up,&t,sizeof(t)));
|
||||||
if(t != tag){
|
if(t != tag){
|
||||||
v->Raise_Error(_SC("invalid or corrupted closure stream"));
|
v->Raise_Error("invalid or corrupted closure stream");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@@ -269,7 +274,7 @@ bool WriteObject(HSQUIRRELVM v,SQUserPointer up,SQWRITEFUNC write,SQObjectPtr &o
|
|||||||
switch(type(o)){
|
switch(type(o)){
|
||||||
case OT_STRING:
|
case OT_STRING:
|
||||||
_CHECK_IO(SafeWrite(v,write,up,&_string(o)->_len,sizeof(SQInteger)));
|
_CHECK_IO(SafeWrite(v,write,up,&_string(o)->_len,sizeof(SQInteger)));
|
||||||
_CHECK_IO(SafeWrite(v,write,up,_stringval(o),rsl(_string(o)->_len)));
|
_CHECK_IO(SafeWrite(v,write,up,_stringval(o),_string(o)->_len));
|
||||||
break;
|
break;
|
||||||
case OT_INTEGER:
|
case OT_INTEGER:
|
||||||
_CHECK_IO(SafeWrite(v,write,up,&_integer(o),sizeof(SQInteger)));break;
|
_CHECK_IO(SafeWrite(v,write,up,&_integer(o),sizeof(SQInteger)));break;
|
||||||
@@ -278,7 +283,7 @@ bool WriteObject(HSQUIRRELVM v,SQUserPointer up,SQWRITEFUNC write,SQObjectPtr &o
|
|||||||
case OT_NULL:
|
case OT_NULL:
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
v->Raise_Error(_SC("cannot serialize a %s"),GetTypeName(o));
|
v->Raise_Error("cannot serialize a %s",GetTypeName(o));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@@ -292,7 +297,7 @@ bool ReadObject(HSQUIRRELVM v,SQUserPointer up,SQREADFUNC read,SQObjectPtr &o)
|
|||||||
case OT_STRING:{
|
case OT_STRING:{
|
||||||
SQInteger len;
|
SQInteger len;
|
||||||
_CHECK_IO(SafeRead(v,read,up,&len,sizeof(SQInteger)));
|
_CHECK_IO(SafeRead(v,read,up,&len,sizeof(SQInteger)));
|
||||||
_CHECK_IO(SafeRead(v,read,up,_ss(v)->GetScratchPad(rsl(len)),rsl(len)));
|
_CHECK_IO(SafeRead(v,read,up,_ss(v)->GetScratchPad(len),len));
|
||||||
o=SQString::Create(_ss(v),_ss(v)->GetScratchPad(-1),len);
|
o=SQString::Create(_ss(v),_ss(v)->GetScratchPad(-1),len);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -308,7 +313,7 @@ bool ReadObject(HSQUIRRELVM v,SQUserPointer up,SQREADFUNC read,SQObjectPtr &o)
|
|||||||
o=_null_;
|
o=_null_;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
v->Raise_Error(_SC("cannot serialize a %s"),IdType2Name(t));
|
v->Raise_Error("cannot serialize a %s",IdType2Name(t));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
36
src/3rdparty/squirrel/squirrel/sqobject.h
vendored
36
src/3rdparty/squirrel/squirrel/sqobject.h
vendored
@@ -32,24 +32,24 @@ enum SQMetaMethod{
|
|||||||
MT_LAST = 18
|
MT_LAST = 18
|
||||||
};
|
};
|
||||||
|
|
||||||
#define MM_ADD _SC("_add")
|
#define MM_ADD "_add"
|
||||||
#define MM_SUB _SC("_sub")
|
#define MM_SUB "_sub"
|
||||||
#define MM_MUL _SC("_mul")
|
#define MM_MUL "_mul"
|
||||||
#define MM_DIV _SC("_div")
|
#define MM_DIV "_div"
|
||||||
#define MM_UNM _SC("_unm")
|
#define MM_UNM "_unm"
|
||||||
#define MM_MODULO _SC("_modulo")
|
#define MM_MODULO "_modulo"
|
||||||
#define MM_SET _SC("_set")
|
#define MM_SET "_set"
|
||||||
#define MM_GET _SC("_get")
|
#define MM_GET "_get"
|
||||||
#define MM_TYPEOF _SC("_typeof")
|
#define MM_TYPEOF "_typeof"
|
||||||
#define MM_NEXTI _SC("_nexti")
|
#define MM_NEXTI "_nexti"
|
||||||
#define MM_CMP _SC("_cmp")
|
#define MM_CMP "_cmp"
|
||||||
#define MM_CALL _SC("_call")
|
#define MM_CALL "_call"
|
||||||
#define MM_CLONED _SC("_cloned")
|
#define MM_CLONED "_cloned"
|
||||||
#define MM_NEWSLOT _SC("_newslot")
|
#define MM_NEWSLOT "_newslot"
|
||||||
#define MM_DELSLOT _SC("_delslot")
|
#define MM_DELSLOT "_delslot"
|
||||||
#define MM_TOSTRING _SC("_tostring")
|
#define MM_TOSTRING "_tostring"
|
||||||
#define MM_NEWMEMBER _SC("_newmember")
|
#define MM_NEWMEMBER "_newmember"
|
||||||
#define MM_INHERITED _SC("_inherited")
|
#define MM_INHERITED "_inherited"
|
||||||
|
|
||||||
#define MINPOWER2 4
|
#define MINPOWER2 4
|
||||||
|
|
||||||
|
|||||||
3
src/3rdparty/squirrel/squirrel/sqopcodes.h
vendored
3
src/3rdparty/squirrel/squirrel/sqopcodes.h
vendored
@@ -92,8 +92,7 @@ struct SQInstructionDesc {
|
|||||||
|
|
||||||
struct SQInstruction
|
struct SQInstruction
|
||||||
{
|
{
|
||||||
SQInstruction(){};
|
SQInstruction(SQOpcode _op=_OP_SCOPE_END,SQInteger a0=0,SQInteger a1=0,SQInteger a2=0,SQInteger a3=0)
|
||||||
SQInstruction(SQOpcode _op,SQInteger a0=0,SQInteger a1=0,SQInteger a2=0,SQInteger a3=0)
|
|
||||||
{ op = _op;
|
{ op = _op;
|
||||||
_arg0 = (unsigned char)a0;_arg1 = (SQInt32)a1;
|
_arg0 = (unsigned char)a0;_arg1 = (SQInt32)a1;
|
||||||
_arg2 = (unsigned char)a2;_arg3 = (unsigned char)a3;
|
_arg2 = (unsigned char)a2;_arg3 = (unsigned char)a3;
|
||||||
|
|||||||
4
src/3rdparty/squirrel/squirrel/sqpcheader.h
vendored
4
src/3rdparty/squirrel/squirrel/sqpcheader.h
vendored
@@ -6,10 +6,6 @@
|
|||||||
#include <crtdbg.h>
|
#include <crtdbg.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <assert.h>
|
|
||||||
#include <new>
|
#include <new>
|
||||||
//squirrel stuff
|
//squirrel stuff
|
||||||
#include <squirrel.h>
|
#include <squirrel.h>
|
||||||
|
|||||||
91
src/3rdparty/squirrel/squirrel/sqstate.cpp
vendored
91
src/3rdparty/squirrel/squirrel/sqstate.cpp
vendored
@@ -1,6 +1,9 @@
|
|||||||
/*
|
/*
|
||||||
see copyright notice in squirrel.h
|
* see copyright notice in squirrel.h
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "../../../stdafx.h"
|
||||||
|
|
||||||
#include "sqpcheader.h"
|
#include "sqpcheader.h"
|
||||||
#include "sqopcodes.h"
|
#include "sqopcodes.h"
|
||||||
#include "sqvm.h"
|
#include "sqvm.h"
|
||||||
@@ -12,20 +15,14 @@
|
|||||||
#include "squserdata.h"
|
#include "squserdata.h"
|
||||||
#include "sqclass.h"
|
#include "sqclass.h"
|
||||||
|
|
||||||
|
#include "../../../safeguards.h"
|
||||||
|
|
||||||
SQObjectPtr _null_;
|
SQObjectPtr _null_;
|
||||||
SQObjectPtr _true_(true);
|
SQObjectPtr _true_(true);
|
||||||
SQObjectPtr _false_(false);
|
SQObjectPtr _false_(false);
|
||||||
SQObjectPtr _one_((SQInteger)1);
|
SQObjectPtr _one_((SQInteger)1);
|
||||||
SQObjectPtr _minusone_((SQInteger)-1);
|
SQObjectPtr _minusone_((SQInteger)-1);
|
||||||
|
|
||||||
SQSharedState::SQSharedState()
|
|
||||||
{
|
|
||||||
_compilererrorhandler = NULL;
|
|
||||||
_printfunc = NULL;
|
|
||||||
_debuginfo = false;
|
|
||||||
_notifyallexceptions = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
#define newsysstring(s) { \
|
#define newsysstring(s) { \
|
||||||
_systemstrings->push_back(SQString::Create(this,s)); \
|
_systemstrings->push_back(SQString::Create(this,s)); \
|
||||||
}
|
}
|
||||||
@@ -94,8 +91,12 @@ SQTable *CreateDefaultDelegate(SQSharedState *ss,SQRegFunction *funcz)
|
|||||||
return t;
|
return t;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SQSharedState::Init()
|
SQSharedState::SQSharedState()
|
||||||
{
|
{
|
||||||
|
_compilererrorhandler = NULL;
|
||||||
|
_printfunc = NULL;
|
||||||
|
_debuginfo = false;
|
||||||
|
_notifyallexceptions = false;
|
||||||
_scratchpad=NULL;
|
_scratchpad=NULL;
|
||||||
_scratchpadsize=0;
|
_scratchpadsize=0;
|
||||||
#ifndef NO_GARBAGE_COLLECTOR
|
#ifndef NO_GARBAGE_COLLECTOR
|
||||||
@@ -108,21 +109,21 @@ void SQSharedState::Init()
|
|||||||
_metamethodsmap = SQTable::Create(this,MT_LAST-1);
|
_metamethodsmap = SQTable::Create(this,MT_LAST-1);
|
||||||
//adding type strings to avoid memory trashing
|
//adding type strings to avoid memory trashing
|
||||||
//types names
|
//types names
|
||||||
newsysstring(_SC("null"));
|
newsysstring("null");
|
||||||
newsysstring(_SC("table"));
|
newsysstring("table");
|
||||||
newsysstring(_SC("array"));
|
newsysstring("array");
|
||||||
newsysstring(_SC("closure"));
|
newsysstring("closure");
|
||||||
newsysstring(_SC("string"));
|
newsysstring("string");
|
||||||
newsysstring(_SC("userdata"));
|
newsysstring("userdata");
|
||||||
newsysstring(_SC("integer"));
|
newsysstring("integer");
|
||||||
newsysstring(_SC("float"));
|
newsysstring("float");
|
||||||
newsysstring(_SC("userpointer"));
|
newsysstring("userpointer");
|
||||||
newsysstring(_SC("function"));
|
newsysstring("function");
|
||||||
newsysstring(_SC("generator"));
|
newsysstring("generator");
|
||||||
newsysstring(_SC("thread"));
|
newsysstring("thread");
|
||||||
newsysstring(_SC("class"));
|
newsysstring("class");
|
||||||
newsysstring(_SC("instance"));
|
newsysstring("instance");
|
||||||
newsysstring(_SC("bool"));
|
newsysstring("bool");
|
||||||
//meta methods
|
//meta methods
|
||||||
newmetamethod(MM_ADD);
|
newmetamethod(MM_ADD);
|
||||||
newmetamethod(MM_SUB);
|
newmetamethod(MM_SUB);
|
||||||
@@ -143,7 +144,7 @@ void SQSharedState::Init()
|
|||||||
newmetamethod(MM_NEWMEMBER);
|
newmetamethod(MM_NEWMEMBER);
|
||||||
newmetamethod(MM_INHERITED);
|
newmetamethod(MM_INHERITED);
|
||||||
|
|
||||||
_constructoridx = SQString::Create(this,_SC("constructor"));
|
_constructoridx = SQString::Create(this,"constructor");
|
||||||
_registry = SQTable::Create(this,0);
|
_registry = SQTable::Create(this,0);
|
||||||
_consts = SQTable::Create(this,0);
|
_consts = SQTable::Create(this,0);
|
||||||
_table_default_delegate = CreateDefaultDelegate(this,_table_default_delegate_funcz);
|
_table_default_delegate = CreateDefaultDelegate(this,_table_default_delegate_funcz);
|
||||||
@@ -486,10 +487,10 @@ void RefTable::AllocNodes(SQUnsignedInteger size)
|
|||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
//SQStringTable
|
//SQStringTable
|
||||||
/*
|
/*
|
||||||
* The following code is based on Lua 4.0 (Copyright 1994-2002 Tecgraf, PUC-Rio.)
|
* The following code is based on Lua 4.0 (Copyright 1994-2002 Tecgraf, PUC-Rio.)
|
||||||
* http://www.lua.org/copyright.html#4
|
* http://www.lua.org/copyright.html#4
|
||||||
* http://www.lua.org/source/4.0.1/src_lstring.c.html
|
* http://www.lua.org/source/4.0.1/src_lstring.c.html
|
||||||
*/
|
*/
|
||||||
|
|
||||||
SQStringTable::SQStringTable()
|
SQStringTable::SQStringTable()
|
||||||
{
|
{
|
||||||
@@ -507,26 +508,22 @@ void SQStringTable::AllocNodes(SQInteger size)
|
|||||||
{
|
{
|
||||||
_numofslots = size;
|
_numofslots = size;
|
||||||
_strings = (SQString**)SQ_MALLOC(sizeof(SQString*)*_numofslots);
|
_strings = (SQString**)SQ_MALLOC(sizeof(SQString*)*_numofslots);
|
||||||
memset(_strings,0,sizeof(SQString*)*_numofslots);
|
memset(_strings,0,sizeof(SQString*)*(size_t)_numofslots);
|
||||||
}
|
}
|
||||||
|
|
||||||
SQString *SQStringTable::Add(const SQChar *news,SQInteger len)
|
SQString *SQStringTable::Add(const SQChar *news,SQInteger len)
|
||||||
{
|
{
|
||||||
if(len<0)
|
if(len<0)
|
||||||
len = (SQInteger)scstrlen(news);
|
len = (SQInteger)strlen(news);
|
||||||
SQHash h = ::_hashstr(news,len)&(_numofslots-1);
|
SQHash h = ::_hashstr(news,(size_t)len)&(_numofslots-1);
|
||||||
SQString *s;
|
SQString *s;
|
||||||
for (s = _strings[h]; s; s = s->_next){
|
for (s = _strings[h]; s; s = s->_next){
|
||||||
if(s->_len == len && (!memcmp(news,s->_val,rsl(len))))
|
if(s->_len == len && (!memcmp(news,s->_val,(size_t)len)))
|
||||||
return s; //found
|
return s; //found
|
||||||
}
|
}
|
||||||
|
|
||||||
SQString *t=(SQString *)SQ_MALLOC(rsl(len)+sizeof(SQString));
|
SQString *t=(SQString *)SQ_MALLOC(len+sizeof(SQString));
|
||||||
new (t) SQString;
|
new (t) SQString(news, len);
|
||||||
memcpy(t->_val,news,rsl(len));
|
|
||||||
t->_val[len] = _SC('\0');
|
|
||||||
t->_len = len;
|
|
||||||
t->_hash = ::_hashstr(news,len);
|
|
||||||
t->_next = _strings[h];
|
t->_next = _strings[h];
|
||||||
_strings[h] = t;
|
_strings[h] = t;
|
||||||
_slotused++;
|
_slotused++;
|
||||||
@@ -535,6 +532,16 @@ SQString *SQStringTable::Add(const SQChar *news,SQInteger len)
|
|||||||
return t;
|
return t;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SQString::SQString(const SQChar *news, SQInteger len)
|
||||||
|
{
|
||||||
|
memcpy(_val,news,(size_t)len);
|
||||||
|
_val[len] = '\0';
|
||||||
|
_len = len;
|
||||||
|
_hash = ::_hashstr(news,(size_t)len);
|
||||||
|
_next = NULL;
|
||||||
|
_sharedstate = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
void SQStringTable::Resize(SQInteger size)
|
void SQStringTable::Resize(SQInteger size)
|
||||||
{
|
{
|
||||||
SQInteger oldsize=_numofslots;
|
SQInteger oldsize=_numofslots;
|
||||||
@@ -568,7 +575,7 @@ void SQStringTable::Remove(SQString *bs)
|
|||||||
_slotused--;
|
_slotused--;
|
||||||
SQInteger slen = s->_len;
|
SQInteger slen = s->_len;
|
||||||
s->~SQString();
|
s->~SQString();
|
||||||
SQ_FREE(s,sizeof(SQString) + rsl(slen));
|
SQ_FREE(s,sizeof(SQString) + slen);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
prev = s;
|
prev = s;
|
||||||
|
|||||||
7
src/3rdparty/squirrel/squirrel/sqstate.h
vendored
7
src/3rdparty/squirrel/squirrel/sqstate.h
vendored
@@ -58,7 +58,6 @@ struct SQSharedState
|
|||||||
{
|
{
|
||||||
SQSharedState();
|
SQSharedState();
|
||||||
~SQSharedState();
|
~SQSharedState();
|
||||||
void Init();
|
|
||||||
public:
|
public:
|
||||||
SQChar* GetScratchPad(SQInteger size);
|
SQChar* GetScratchPad(SQInteger size);
|
||||||
SQInteger GetMetaMethodIdxByName(const SQObjectPtr &name);
|
SQInteger GetMetaMethodIdxByName(const SQObjectPtr &name);
|
||||||
@@ -123,12 +122,6 @@ private:
|
|||||||
#define _instance_ddel _table(_sharedstate->_instance_default_delegate)
|
#define _instance_ddel _table(_sharedstate->_instance_default_delegate)
|
||||||
#define _weakref_ddel _table(_sharedstate->_weakref_default_delegate)
|
#define _weakref_ddel _table(_sharedstate->_weakref_default_delegate)
|
||||||
|
|
||||||
#ifdef SQUNICODE //rsl REAL STRING LEN
|
|
||||||
#define rsl(l) ((l)<<1)
|
|
||||||
#else
|
|
||||||
#define rsl(l) (l)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
extern SQObjectPtr _null_;
|
extern SQObjectPtr _null_;
|
||||||
extern SQObjectPtr _true_;
|
extern SQObjectPtr _true_;
|
||||||
extern SQObjectPtr _false_;
|
extern SQObjectPtr _false_;
|
||||||
|
|||||||
2
src/3rdparty/squirrel/squirrel/sqstring.h
vendored
2
src/3rdparty/squirrel/squirrel/sqstring.h
vendored
@@ -13,7 +13,7 @@ inline SQHash _hashstr (const SQChar *s, size_t l)
|
|||||||
|
|
||||||
struct SQString : public SQRefCounted
|
struct SQString : public SQRefCounted
|
||||||
{
|
{
|
||||||
SQString(){}
|
SQString(const SQChar *news, SQInteger len);
|
||||||
~SQString(){}
|
~SQString(){}
|
||||||
public:
|
public:
|
||||||
static SQString *Create(SQSharedState *ss, const SQChar *, SQInteger len = -1 );
|
static SQString *Create(SQSharedState *ss, const SQChar *, SQInteger len = -1 );
|
||||||
|
|||||||
9
src/3rdparty/squirrel/squirrel/sqtable.cpp
vendored
9
src/3rdparty/squirrel/squirrel/sqtable.cpp
vendored
@@ -1,12 +1,17 @@
|
|||||||
/*
|
/*
|
||||||
see copyright notice in squirrel.h
|
* see copyright notice in squirrel.h
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "../../../stdafx.h"
|
||||||
|
|
||||||
#include "sqpcheader.h"
|
#include "sqpcheader.h"
|
||||||
#include "sqvm.h"
|
#include "sqvm.h"
|
||||||
#include "sqtable.h"
|
#include "sqtable.h"
|
||||||
#include "sqfuncproto.h"
|
#include "sqfuncproto.h"
|
||||||
#include "sqclosure.h"
|
#include "sqclosure.h"
|
||||||
|
|
||||||
|
#include "../../../safeguards.h"
|
||||||
|
|
||||||
SQTable::SQTable(SQSharedState *ss,SQInteger nInitialSize)
|
SQTable::SQTable(SQSharedState *ss,SQInteger nInitialSize)
|
||||||
{
|
{
|
||||||
SQInteger pow2size=MINPOWER2;
|
SQInteger pow2size=MINPOWER2;
|
||||||
|
|||||||
8
src/3rdparty/squirrel/squirrel/sqtable.h
vendored
8
src/3rdparty/squirrel/squirrel/sqtable.h
vendored
@@ -2,10 +2,10 @@
|
|||||||
#ifndef _SQTABLE_H_
|
#ifndef _SQTABLE_H_
|
||||||
#define _SQTABLE_H_
|
#define _SQTABLE_H_
|
||||||
/*
|
/*
|
||||||
* The following code is based on Lua 4.0 (Copyright 1994-2002 Tecgraf, PUC-Rio.)
|
* The following code is based on Lua 4.0 (Copyright 1994-2002 Tecgraf, PUC-Rio.)
|
||||||
* http://www.lua.org/copyright.html#4
|
* http://www.lua.org/copyright.html#4
|
||||||
* http://www.lua.org/source/4.0.1/src_ltable.c.html
|
* http://www.lua.org/source/4.0.1/src_ltable.c.html
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "sqstring.h"
|
#include "sqstring.h"
|
||||||
|
|
||||||
|
|||||||
7
src/3rdparty/squirrel/squirrel/squserdata.h
vendored
7
src/3rdparty/squirrel/squirrel/squserdata.h
vendored
@@ -4,7 +4,8 @@
|
|||||||
|
|
||||||
struct SQUserData : SQDelegable
|
struct SQUserData : SQDelegable
|
||||||
{
|
{
|
||||||
SQUserData(SQSharedState *ss){ _delegate = 0; _hook = NULL; INIT_CHAIN(); ADD_TO_CHAIN(&_ss(this)->_gc_chain, this); }
|
SQUserData(SQSharedState *ss, SQInteger size){ _delegate = 0; _hook = NULL; INIT_CHAIN(); ADD_TO_CHAIN(&_ss(this)->_gc_chain, this); _size = size; _typetag = 0;
|
||||||
|
}
|
||||||
~SQUserData()
|
~SQUserData()
|
||||||
{
|
{
|
||||||
REMOVE_FROM_CHAIN(&_ss(this)->_gc_chain, this);
|
REMOVE_FROM_CHAIN(&_ss(this)->_gc_chain, this);
|
||||||
@@ -13,9 +14,7 @@ struct SQUserData : SQDelegable
|
|||||||
static SQUserData* Create(SQSharedState *ss, SQInteger size)
|
static SQUserData* Create(SQSharedState *ss, SQInteger size)
|
||||||
{
|
{
|
||||||
SQUserData* ud = (SQUserData*)SQ_MALLOC(sizeof(SQUserData)+(size-1));
|
SQUserData* ud = (SQUserData*)SQ_MALLOC(sizeof(SQUserData)+(size-1));
|
||||||
new (ud) SQUserData(ss);
|
new (ud) SQUserData(ss, size);
|
||||||
ud->_size = size;
|
|
||||||
ud->_typetag = 0;
|
|
||||||
return ud;
|
return ud;
|
||||||
}
|
}
|
||||||
#ifndef NO_GARBAGE_COLLECTOR
|
#ifndef NO_GARBAGE_COLLECTOR
|
||||||
|
|||||||
12
src/3rdparty/squirrel/squirrel/squtils.h
vendored
12
src/3rdparty/squirrel/squirrel/squtils.h
vendored
@@ -41,7 +41,7 @@ public:
|
|||||||
size_t allocated_size = _allocated * sizeof(T);
|
size_t allocated_size = _allocated * sizeof(T);
|
||||||
_allocated = 0;
|
_allocated = 0;
|
||||||
|
|
||||||
for(SQUnsignedInteger i = 0; i < _size; i++)
|
for(size_t i = 0; i < _size; i++)
|
||||||
_vals[i].~T();
|
_vals[i].~T();
|
||||||
SQ_FREE(_vals, allocated_size);
|
SQ_FREE(_vals, allocated_size);
|
||||||
}
|
}
|
||||||
@@ -61,7 +61,7 @@ public:
|
|||||||
for(SQUnsignedInteger i = newsize; i < _size; i++) {
|
for(SQUnsignedInteger i = newsize; i < _size; i++) {
|
||||||
_vals[i].~T();
|
_vals[i].~T();
|
||||||
}
|
}
|
||||||
_size = newsize;
|
_size = (size_t)newsize;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void shrinktofit() { if(_size > 4) { _realloc(_size); } }
|
void shrinktofit() { if(_size > 4) { _realloc(_size); } }
|
||||||
@@ -90,7 +90,7 @@ public:
|
|||||||
{
|
{
|
||||||
_vals[idx].~T();
|
_vals[idx].~T();
|
||||||
if(idx < (_size - 1)) {
|
if(idx < (_size - 1)) {
|
||||||
memmove(&_vals[idx], &_vals[idx+1], sizeof(T) * (_size - idx - 1));
|
memmove(&_vals[idx], &_vals[idx+1], sizeof(T) * (_size - (size_t)idx - 1));
|
||||||
}
|
}
|
||||||
_size--;
|
_size--;
|
||||||
}
|
}
|
||||||
@@ -103,10 +103,10 @@ private:
|
|||||||
{
|
{
|
||||||
newsize = (newsize > 0)?newsize:4;
|
newsize = (newsize > 0)?newsize:4;
|
||||||
_vals = (T*)SQ_REALLOC(_vals, _allocated * sizeof(T), newsize * sizeof(T));
|
_vals = (T*)SQ_REALLOC(_vals, _allocated * sizeof(T), newsize * sizeof(T));
|
||||||
_allocated = newsize;
|
_allocated = (size_t)newsize;
|
||||||
}
|
}
|
||||||
SQUnsignedInteger _size;
|
size_t _size;
|
||||||
SQUnsignedInteger _allocated;
|
size_t _allocated;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif //_SQUTILS_H_
|
#endif //_SQUTILS_H_
|
||||||
|
|||||||
190
src/3rdparty/squirrel/squirrel/sqvm.cpp
vendored
190
src/3rdparty/squirrel/squirrel/sqvm.cpp
vendored
@@ -1,10 +1,12 @@
|
|||||||
/*
|
/*
|
||||||
see copyright notice in squirrel.h
|
* see copyright notice in squirrel.h
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "../../../stdafx.h"
|
||||||
|
|
||||||
#include <squirrel.h>
|
#include <squirrel.h>
|
||||||
#include "sqpcheader.h"
|
#include "sqpcheader.h"
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <stdlib.h>
|
|
||||||
#include "sqopcodes.h"
|
#include "sqopcodes.h"
|
||||||
#include "sqfuncproto.h"
|
#include "sqfuncproto.h"
|
||||||
#include "sqvm.h"
|
#include "sqvm.h"
|
||||||
@@ -15,6 +17,10 @@
|
|||||||
#include "sqarray.h"
|
#include "sqarray.h"
|
||||||
#include "sqclass.h"
|
#include "sqclass.h"
|
||||||
|
|
||||||
|
#include "../../../string_func.h"
|
||||||
|
|
||||||
|
#include "../../../safeguards.h"
|
||||||
|
|
||||||
#define TOP() (_stack._vals[_top-1])
|
#define TOP() (_stack._vals[_top-1])
|
||||||
|
|
||||||
#define CLEARSTACK(_last_top) { if((_last_top) >= _top) ClearStack(_last_top); }
|
#define CLEARSTACK(_last_top) { if((_last_top) >= _top) ClearStack(_last_top); }
|
||||||
@@ -45,10 +51,10 @@ bool SQVM::BW_OP(SQUnsignedInteger op,SQObjectPtr &trg,const SQObjectPtr &o1,con
|
|||||||
case BW_SHIFTL: res = i1 << i2; break;
|
case BW_SHIFTL: res = i1 << i2; break;
|
||||||
case BW_SHIFTR: res = i1 >> i2; break;
|
case BW_SHIFTR: res = i1 >> i2; break;
|
||||||
case BW_USHIFTR:res = (SQInteger)(*((SQUnsignedInteger*)&i1) >> i2); break;
|
case BW_USHIFTR:res = (SQInteger)(*((SQUnsignedInteger*)&i1) >> i2); break;
|
||||||
default: { Raise_Error(_SC("internal vm error bitwise op failed")); return false; }
|
default: { Raise_Error("internal vm error bitwise op failed"); return false; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else { Raise_Error(_SC("bitwise op between '%s' and '%s'"),GetTypeName(o1),GetTypeName(o2)); return false;}
|
else { Raise_Error("bitwise op between '%s' and '%s'",GetTypeName(o1),GetTypeName(o2)); return false;}
|
||||||
trg = res;
|
trg = res;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -61,11 +67,11 @@ bool SQVM::ARITH_OP(SQUnsignedInteger op,SQObjectPtr &trg,const SQObjectPtr &o1,
|
|||||||
switch(op) {
|
switch(op) {
|
||||||
case '+': res = i1 + i2; break;
|
case '+': res = i1 + i2; break;
|
||||||
case '-': res = i1 - i2; break;
|
case '-': res = i1 - i2; break;
|
||||||
case '/': if(i2 == 0) { Raise_Error(_SC("division by zero")); return false; }
|
case '/': if(i2 == 0) { Raise_Error("division by zero"); return false; }
|
||||||
res = i1 / i2;
|
res = i1 / i2;
|
||||||
break;
|
break;
|
||||||
case '*': res = i1 * i2; break;
|
case '*': res = i1 * i2; break;
|
||||||
case '%': if(i2 == 0) { Raise_Error(_SC("modulo by zero")); return false; }
|
case '%': if(i2 == 0) { Raise_Error("modulo by zero"); return false; }
|
||||||
res = i1 % i2;
|
res = i1 % i2;
|
||||||
break;
|
break;
|
||||||
default: res = 0xDEADBEEF;
|
default: res = 0xDEADBEEF;
|
||||||
@@ -88,7 +94,7 @@ bool SQVM::ARITH_OP(SQUnsignedInteger op,SQObjectPtr &trg,const SQObjectPtr &o1,
|
|||||||
if(!StringCat(o1, o2, trg)) return false;
|
if(!StringCat(o1, o2, trg)) return false;
|
||||||
}
|
}
|
||||||
else if(!ArithMetaMethod(op,o1,o2,trg)) {
|
else if(!ArithMetaMethod(op,o1,o2,trg)) {
|
||||||
Raise_Error(_SC("arith op %c on between '%s' and '%s'"),op,GetTypeName(o1),GetTypeName(o2)); return false;
|
Raise_Error("arith op %c on between '%s' and '%s'",op,GetTypeName(o1),GetTypeName(o2)); return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@@ -109,6 +115,11 @@ SQVM::SQVM(SQSharedState *ss)
|
|||||||
_can_suspend = false;
|
_can_suspend = false;
|
||||||
_in_stackoverflow = false;
|
_in_stackoverflow = false;
|
||||||
_ops_till_suspend = 0;
|
_ops_till_suspend = 0;
|
||||||
|
_callsstack = NULL;
|
||||||
|
_callsstacksize = 0;
|
||||||
|
_alloccallsstacksize = 0;
|
||||||
|
_top = 0;
|
||||||
|
_stackbase = 0;
|
||||||
ci = NULL;
|
ci = NULL;
|
||||||
INIT_CHAIN();ADD_TO_CHAIN(&_ss(this)->_gc_chain,this);
|
INIT_CHAIN();ADD_TO_CHAIN(&_ss(this)->_gc_chain,this);
|
||||||
}
|
}
|
||||||
@@ -137,11 +148,11 @@ bool SQVM::ArithMetaMethod(SQInteger op,const SQObjectPtr &o1,const SQObjectPtr
|
|||||||
{
|
{
|
||||||
SQMetaMethod mm;
|
SQMetaMethod mm;
|
||||||
switch(op){
|
switch(op){
|
||||||
case _SC('+'): mm=MT_ADD; break;
|
case '+': mm=MT_ADD; break;
|
||||||
case _SC('-'): mm=MT_SUB; break;
|
case '-': mm=MT_SUB; break;
|
||||||
case _SC('/'): mm=MT_DIV; break;
|
case '/': mm=MT_DIV; break;
|
||||||
case _SC('*'): mm=MT_MUL; break;
|
case '*': mm=MT_MUL; break;
|
||||||
case _SC('%'): mm=MT_MODULO; break;
|
case '%': mm=MT_MODULO; break;
|
||||||
default: mm = MT_ADD; assert(0); break; //shutup compiler
|
default: mm = MT_ADD; assert(0); break; //shutup compiler
|
||||||
}
|
}
|
||||||
if(is_delegable(o1) && _delegable(o1)->_delegate) {
|
if(is_delegable(o1) && _delegable(o1)->_delegate) {
|
||||||
@@ -173,7 +184,7 @@ bool SQVM::NEG_OP(SQObjectPtr &trg,const SQObjectPtr &o)
|
|||||||
}
|
}
|
||||||
default:break; //shutup compiler
|
default:break; //shutup compiler
|
||||||
}
|
}
|
||||||
Raise_Error(_SC("attempt to negate a %s"), GetTypeName(o));
|
Raise_Error("attempt to negate a %s", GetTypeName(o));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -185,7 +196,7 @@ bool SQVM::ObjCmp(const SQObjectPtr &o1,const SQObjectPtr &o2,SQInteger &result)
|
|||||||
SQObjectPtr res;
|
SQObjectPtr res;
|
||||||
switch(type(o1)){
|
switch(type(o1)){
|
||||||
case OT_STRING:
|
case OT_STRING:
|
||||||
_RET_SUCCEED(scstrcmp(_stringval(o1),_stringval(o2)));
|
_RET_SUCCEED(strcmp(_stringval(o1),_stringval(o2)));
|
||||||
case OT_INTEGER:
|
case OT_INTEGER:
|
||||||
/* FS#3954: wrong integer comparison */
|
/* FS#3954: wrong integer comparison */
|
||||||
_RET_SUCCEED((_integer(o1)<_integer(o2))?-1:(_integer(o1)==_integer(o2))?0:1);
|
_RET_SUCCEED((_integer(o1)<_integer(o2))?-1:(_integer(o1)==_integer(o2))?0:1);
|
||||||
@@ -198,7 +209,7 @@ bool SQVM::ObjCmp(const SQObjectPtr &o1,const SQObjectPtr &o2,SQInteger &result)
|
|||||||
Push(o1);Push(o2);
|
Push(o1);Push(o2);
|
||||||
if(CallMetaMethod(_delegable(o1),MT_CMP,2,res)) {
|
if(CallMetaMethod(_delegable(o1),MT_CMP,2,res)) {
|
||||||
if(type(res) != OT_INTEGER) {
|
if(type(res) != OT_INTEGER) {
|
||||||
Raise_Error(_SC("_cmp must return an integer"));
|
Raise_Error("_cmp must return an integer");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
_RET_SUCCEED(_integer(res))
|
_RET_SUCCEED(_integer(res))
|
||||||
@@ -251,22 +262,19 @@ bool SQVM::CMP_OP(CmpOP op, const SQObjectPtr &o1,const SQObjectPtr &o2,SQObject
|
|||||||
|
|
||||||
void SQVM::ToString(const SQObjectPtr &o,SQObjectPtr &res)
|
void SQVM::ToString(const SQObjectPtr &o,SQObjectPtr &res)
|
||||||
{
|
{
|
||||||
|
char buf[64];
|
||||||
switch(type(o)) {
|
switch(type(o)) {
|
||||||
case OT_STRING:
|
case OT_STRING:
|
||||||
res = o;
|
res = o;
|
||||||
return;
|
return;
|
||||||
case OT_FLOAT:
|
case OT_FLOAT:
|
||||||
scsprintf(_sp(rsl(NUMBER_MAX_CHAR+1)),_SC("%g"),_float(o));
|
seprintf(buf, lastof(buf),"%g",_float(o));
|
||||||
break;
|
break;
|
||||||
case OT_INTEGER:
|
case OT_INTEGER:
|
||||||
#if defined(_SQ64)
|
seprintf(buf, lastof(buf),OTTD_PRINTF64,_integer(o));
|
||||||
scsprintf(_sp(rsl(NUMBER_MAX_CHAR+1)),_SC("%ld"),_integer(o));
|
|
||||||
#else
|
|
||||||
scsprintf(_sp(rsl(NUMBER_MAX_CHAR+1)),_SC("%d"),_integer(o));
|
|
||||||
#endif
|
|
||||||
break;
|
break;
|
||||||
case OT_BOOL:
|
case OT_BOOL:
|
||||||
scsprintf(_sp(rsl(6)),_integer(o)?_SC("true"):_SC("false"));
|
seprintf(buf, lastof(buf),_integer(o)?"true":"false");
|
||||||
break;
|
break;
|
||||||
case OT_TABLE:
|
case OT_TABLE:
|
||||||
case OT_USERDATA:
|
case OT_USERDATA:
|
||||||
@@ -280,9 +288,9 @@ void SQVM::ToString(const SQObjectPtr &o,SQObjectPtr &res)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
scsprintf(_sp(rsl(sizeof(void*)+20)),_SC("(%s : 0x%p)"),GetTypeName(o),(void*)_rawval(o));
|
seprintf(buf, lastof(buf),"(%s : 0x%p)",GetTypeName(o),(void*)_rawval(o));
|
||||||
}
|
}
|
||||||
res = SQString::Create(_ss(this),_spval);
|
res = SQString::Create(_ss(this),buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -292,9 +300,9 @@ bool SQVM::StringCat(const SQObjectPtr &str,const SQObjectPtr &obj,SQObjectPtr &
|
|||||||
ToString(str, a);
|
ToString(str, a);
|
||||||
ToString(obj, b);
|
ToString(obj, b);
|
||||||
SQInteger l = _string(a)->_len , ol = _string(b)->_len;
|
SQInteger l = _string(a)->_len , ol = _string(b)->_len;
|
||||||
SQChar *s = _sp(rsl(l + ol + 1));
|
SQChar *s = _sp(l + ol + 1);
|
||||||
memcpy(s, _stringval(a), rsl(l));
|
memcpy(s, _stringval(a), (size_t)l);
|
||||||
memcpy(s + l, _stringval(b), rsl(ol));
|
memcpy(s + l, _stringval(b), (size_t)ol);
|
||||||
dest = SQString::Create(_ss(this), _spval, l + ol);
|
dest = SQString::Create(_ss(this), _spval, l + ol);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -350,7 +358,7 @@ bool SQVM::StartCall(SQClosure *closure,SQInteger target,SQInteger args,SQIntege
|
|||||||
else if(func->_varparams)
|
else if(func->_varparams)
|
||||||
{
|
{
|
||||||
if (nargs < paramssize) {
|
if (nargs < paramssize) {
|
||||||
Raise_Error(_SC("wrong number of parameters"));
|
Raise_Error("wrong number of parameters");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
for(SQInteger n = 0; n < nargs - paramssize; n++) {
|
for(SQInteger n = 0; n < nargs - paramssize; n++) {
|
||||||
@@ -359,7 +367,7 @@ bool SQVM::StartCall(SQClosure *closure,SQInteger target,SQInteger args,SQIntege
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Raise_Error(_SC("wrong number of parameters"));
|
Raise_Error("wrong number of parameters");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -396,7 +404,7 @@ bool SQVM::StartCall(SQClosure *closure,SQInteger target,SQInteger args,SQIntege
|
|||||||
_top = newtop;
|
_top = newtop;
|
||||||
_stackbase = stackbase;
|
_stackbase = stackbase;
|
||||||
if (type(_debughook) != OT_NULL && _rawval(_debughook) != _rawval(ci->_closure))
|
if (type(_debughook) != OT_NULL && _rawval(_debughook) != _rawval(ci->_closure))
|
||||||
CallDebugHook(_SC('c'));
|
CallDebugHook('c');
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -404,7 +412,7 @@ bool SQVM::Return(SQInteger _arg0, SQInteger _arg1, SQObjectPtr &retval)
|
|||||||
{
|
{
|
||||||
if (type(_debughook) != OT_NULL && _rawval(_debughook) != _rawval(ci->_closure))
|
if (type(_debughook) != OT_NULL && _rawval(_debughook) != _rawval(ci->_closure))
|
||||||
for(SQInteger i=0;i<ci->_ncalls;i++)
|
for(SQInteger i=0;i<ci->_ncalls;i++)
|
||||||
CallDebugHook(_SC('r'));
|
CallDebugHook('r');
|
||||||
|
|
||||||
SQBool broot = ci->_root;
|
SQBool broot = ci->_root;
|
||||||
SQInteger last_top = _top;
|
SQInteger last_top = _top;
|
||||||
@@ -470,9 +478,9 @@ bool SQVM::DerefInc(SQInteger op,SQObjectPtr &target, SQObjectPtr &self, SQObjec
|
|||||||
SQRESULT SQVM::Suspend()
|
SQRESULT SQVM::Suspend()
|
||||||
{
|
{
|
||||||
if (_suspended)
|
if (_suspended)
|
||||||
return sq_throwerror(this, _SC("cannot suspend an already suspended vm"));
|
return sq_throwerror(this, "cannot suspend an already suspended vm");
|
||||||
if (_nnativecalls!=2)
|
if (_nnativecalls!=2)
|
||||||
return sq_throwerror(this, _SC("cannot suspend through native calls/metamethods"));
|
return sq_throwerror(this, "cannot suspend through native calls/metamethods");
|
||||||
return SQ_SUSPEND_FLAG;
|
return SQ_SUSPEND_FLAG;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -510,12 +518,12 @@ bool SQVM::FOREACH_OP(SQObjectPtr &o1,SQObjectPtr &o2,SQObjectPtr
|
|||||||
o4 = o2 = itr;
|
o4 = o2 = itr;
|
||||||
if(type(itr) == OT_NULL) _FINISH(exitpos);
|
if(type(itr) == OT_NULL) _FINISH(exitpos);
|
||||||
if(!Get(o1, itr, o3, false,false)) {
|
if(!Get(o1, itr, o3, false,false)) {
|
||||||
Raise_Error(_SC("_nexti returned an invalid idx"));
|
Raise_Error("_nexti returned an invalid idx");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
_FINISH(1);
|
_FINISH(1);
|
||||||
}
|
}
|
||||||
Raise_Error(_SC("_nexti failed"));
|
Raise_Error("_nexti failed");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -531,19 +539,20 @@ bool SQVM::FOREACH_OP(SQObjectPtr &o1,SQObjectPtr &o2,SQObjectPtr
|
|||||||
_generator(o1)->Resume(this, arg_2+1);
|
_generator(o1)->Resume(this, arg_2+1);
|
||||||
_FINISH(0);
|
_FINISH(0);
|
||||||
}
|
}
|
||||||
|
/* FALL THROUGH */
|
||||||
default:
|
default:
|
||||||
Raise_Error(_SC("cannot iterate %s"), GetTypeName(o1));
|
Raise_Error("cannot iterate %s", GetTypeName(o1));
|
||||||
}
|
}
|
||||||
return false; //cannot be hit(just to avoid warnings)
|
return false; //cannot be hit(just to avoid warnings)
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SQVM::DELEGATE_OP(SQObjectPtr &trg,SQObjectPtr &o1,SQObjectPtr &o2)
|
bool SQVM::DELEGATE_OP(SQObjectPtr &trg,SQObjectPtr &o1,SQObjectPtr &o2)
|
||||||
{
|
{
|
||||||
if(type(o1) != OT_TABLE) { Raise_Error(_SC("delegating a '%s'"), GetTypeName(o1)); return false; }
|
if(type(o1) != OT_TABLE) { Raise_Error("delegating a '%s'", GetTypeName(o1)); return false; }
|
||||||
switch(type(o2)) {
|
switch(type(o2)) {
|
||||||
case OT_TABLE:
|
case OT_TABLE:
|
||||||
if(!_table(o1)->SetDelegate(_table(o2))){
|
if(!_table(o1)->SetDelegate(_table(o2))){
|
||||||
Raise_Error(_SC("delegate cycle detected"));
|
Raise_Error("delegate cycle detected");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -551,7 +560,7 @@ bool SQVM::DELEGATE_OP(SQObjectPtr &trg,SQObjectPtr &o1,SQObjectPtr &o2)
|
|||||||
_table(o1)->SetDelegate(NULL);
|
_table(o1)->SetDelegate(NULL);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
Raise_Error(_SC("using '%s' as delegate"), GetTypeName(o2));
|
Raise_Error("using '%s' as delegate", GetTypeName(o2));
|
||||||
return false;
|
return false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -603,15 +612,15 @@ bool SQVM::CLOSURE_OP(SQObjectPtr &target, SQFunctionProto *func)
|
|||||||
bool SQVM::GETVARGV_OP(SQObjectPtr &target,SQObjectPtr &index,CallInfo *ci)
|
bool SQVM::GETVARGV_OP(SQObjectPtr &target,SQObjectPtr &index,CallInfo *ci)
|
||||||
{
|
{
|
||||||
if(ci->_vargs.size == 0) {
|
if(ci->_vargs.size == 0) {
|
||||||
Raise_Error(_SC("the function doesn't have var args"));
|
Raise_Error("the function doesn't have var args");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if(!sq_isnumeric(index)){
|
if(!sq_isnumeric(index)){
|
||||||
Raise_Error(_SC("indexing 'vargv' with %s"),GetTypeName(index));
|
Raise_Error("indexing 'vargv' with %s",GetTypeName(index));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
SQInteger idx = tointeger(index);
|
SQInteger idx = tointeger(index);
|
||||||
if(idx < 0 || idx >= ci->_vargs.size){ Raise_Error(_SC("vargv index out of range")); return false; }
|
if(idx < 0 || idx >= ci->_vargs.size){ Raise_Error("vargv index out of range"); return false; }
|
||||||
target = _vargsstack[ci->_vargs.base+idx];
|
target = _vargsstack[ci->_vargs.base+idx];
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -621,7 +630,7 @@ bool SQVM::CLASS_OP(SQObjectPtr &target,SQInteger baseclass,SQInteger attributes
|
|||||||
SQClass *base = NULL;
|
SQClass *base = NULL;
|
||||||
SQObjectPtr attrs;
|
SQObjectPtr attrs;
|
||||||
if(baseclass != -1) {
|
if(baseclass != -1) {
|
||||||
if(type(_stack._vals[_stackbase+baseclass]) != OT_CLASS) { Raise_Error(_SC("trying to inherit from a %s"),GetTypeName(_stack._vals[_stackbase+baseclass])); return false; }
|
if(type(_stack._vals[_stackbase+baseclass]) != OT_CLASS) { Raise_Error("trying to inherit from a %s",GetTypeName(_stack._vals[_stackbase+baseclass])); return false; }
|
||||||
base = _class(_stack._vals[_stackbase + baseclass]);
|
base = _class(_stack._vals[_stackbase + baseclass]);
|
||||||
}
|
}
|
||||||
if(attributes != MAX_FUNC_STACKSIZE) {
|
if(attributes != MAX_FUNC_STACKSIZE) {
|
||||||
@@ -676,7 +685,7 @@ bool SQVM::GETPARENT_OP(SQObjectPtr &o,SQObjectPtr &target)
|
|||||||
case OT_CLASS: target = _class(o)->_base?_class(o)->_base:_null_;
|
case OT_CLASS: target = _class(o)->_base?_class(o)->_base:_null_;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
Raise_Error(_SC("the %s type doesn't have a parent slot"), GetTypeName(o));
|
Raise_Error("the %s type doesn't have a parent slot", GetTypeName(o));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@@ -684,7 +693,7 @@ bool SQVM::GETPARENT_OP(SQObjectPtr &o,SQObjectPtr &target)
|
|||||||
|
|
||||||
bool SQVM::Execute(SQObjectPtr &closure, SQInteger target, SQInteger nargs, SQInteger stackbase,SQObjectPtr &outres, SQBool raiseerror,ExecutionType et)
|
bool SQVM::Execute(SQObjectPtr &closure, SQInteger target, SQInteger nargs, SQInteger stackbase,SQObjectPtr &outres, SQBool raiseerror,ExecutionType et)
|
||||||
{
|
{
|
||||||
if ((_nnativecalls + 1) > MAX_NATIVE_CALLS) { Raise_Error(_SC("Native stack overflow")); return false; }
|
if ((_nnativecalls + 1) > MAX_NATIVE_CALLS) { Raise_Error("Native stack overflow"); return false; }
|
||||||
_nnativecalls++;
|
_nnativecalls++;
|
||||||
AutoDec ad(&_nnativecalls);
|
AutoDec ad(&_nnativecalls);
|
||||||
SQInteger traps = 0;
|
SQInteger traps = 0;
|
||||||
@@ -739,12 +748,12 @@ exception_restore:
|
|||||||
|
|
||||||
const SQInstruction &_i_ = *ci->_ip++;
|
const SQInstruction &_i_ = *ci->_ip++;
|
||||||
//dumpstack(_stackbase);
|
//dumpstack(_stackbase);
|
||||||
//scprintf("%s %d %d %d %d\n",g_InstrDesc[_i_.op].name,arg0,arg1,arg2,arg3);
|
//printf("%s %d %d %d %d\n",g_InstrDesc[_i_.op].name,arg0,arg1,arg2,arg3);
|
||||||
switch(_i_.op)
|
switch(_i_.op)
|
||||||
{
|
{
|
||||||
case _OP_LINE:
|
case _OP_LINE:
|
||||||
if(type(_debughook) != OT_NULL && _rawval(_debughook) != _rawval(ci->_closure))
|
if(type(_debughook) != OT_NULL && _rawval(_debughook) != _rawval(ci->_closure))
|
||||||
CallDebugHook(_SC('l'),arg1);
|
CallDebugHook('l',arg1);
|
||||||
continue;
|
continue;
|
||||||
case _OP_LOAD: TARGET = ci->_literals[arg1]; continue;
|
case _OP_LOAD: TARGET = ci->_literals[arg1]; continue;
|
||||||
case _OP_LOADINT: TARGET = (SQInteger)arg1; continue;
|
case _OP_LOADINT: TARGET = (SQInteger)arg1; continue;
|
||||||
@@ -760,6 +769,7 @@ exception_restore:
|
|||||||
ct_stackbase = _stackbase;
|
ct_stackbase = _stackbase;
|
||||||
goto common_call;
|
goto common_call;
|
||||||
}
|
}
|
||||||
|
/* FALL THROUGH */
|
||||||
case _OP_CALL: {
|
case _OP_CALL: {
|
||||||
ct_tailcall = false;
|
ct_tailcall = false;
|
||||||
ct_target = arg0;
|
ct_target = arg0;
|
||||||
@@ -829,11 +839,11 @@ common_call:
|
|||||||
STK(ct_target) = clo;
|
STK(ct_target) = clo;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
Raise_Error(_SC("attempt to call '%s'"), GetTypeName(clo));
|
Raise_Error("attempt to call '%s'", GetTypeName(clo));
|
||||||
SQ_THROW();
|
SQ_THROW();
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
Raise_Error(_SC("attempt to call '%s'"), GetTypeName(clo));
|
Raise_Error("attempt to call '%s'", GetTypeName(clo));
|
||||||
SQ_THROW();
|
SQ_THROW();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -935,7 +945,7 @@ common_call:
|
|||||||
case _OP_EXISTS: TARGET = Get(STK(arg1), STK(arg2), temp_reg, true,false)?_true_:_false_;continue;
|
case _OP_EXISTS: TARGET = Get(STK(arg1), STK(arg2), temp_reg, true,false)?_true_:_false_;continue;
|
||||||
case _OP_INSTANCEOF:
|
case _OP_INSTANCEOF:
|
||||||
if(type(STK(arg1)) != OT_CLASS || type(STK(arg2)) != OT_INSTANCE)
|
if(type(STK(arg1)) != OT_CLASS || type(STK(arg2)) != OT_INSTANCE)
|
||||||
{Raise_Error(_SC("cannot apply instanceof between a %s and a %s"),GetTypeName(STK(arg1)),GetTypeName(STK(arg2))); SQ_THROW();}
|
{Raise_Error("cannot apply instanceof between a %s and a %s",GetTypeName(STK(arg1)),GetTypeName(STK(arg2))); SQ_THROW();}
|
||||||
TARGET = _instance(STK(arg2))->InstanceOf(_class(STK(arg1)))?_true_:_false_;
|
TARGET = _instance(STK(arg2))->InstanceOf(_class(STK(arg1)))?_true_:_false_;
|
||||||
continue;
|
continue;
|
||||||
case _OP_AND:
|
case _OP_AND:
|
||||||
@@ -958,7 +968,7 @@ common_call:
|
|||||||
TARGET = SQInteger(~t);
|
TARGET = SQInteger(~t);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
Raise_Error(_SC("attempt to perform a bitwise op on a %s"), GetTypeName(STK(arg1)));
|
Raise_Error("attempt to perform a bitwise op on a %s", GetTypeName(STK(arg1)));
|
||||||
SQ_THROW();
|
SQ_THROW();
|
||||||
case _OP_CLOSURE: {
|
case _OP_CLOSURE: {
|
||||||
SQClosure *c = ci->_closure._unVal.pClosure;
|
SQClosure *c = ci->_closure._unVal.pClosure;
|
||||||
@@ -973,7 +983,7 @@ common_call:
|
|||||||
traps -= ci->_etraps;
|
traps -= ci->_etraps;
|
||||||
if(sarg1 != MAX_FUNC_STACKSIZE) STK(arg1) = temp_reg;
|
if(sarg1 != MAX_FUNC_STACKSIZE) STK(arg1) = temp_reg;
|
||||||
}
|
}
|
||||||
else { Raise_Error(_SC("trying to yield a '%s',only genenerator can be yielded"), GetTypeName(ci->_closure)); SQ_THROW();}
|
else { Raise_Error("trying to yield a '%s',only genenerator can be yielded", GetTypeName(ci->_closure)); SQ_THROW();}
|
||||||
if(Return(arg0, arg1, temp_reg)){
|
if(Return(arg0, arg1, temp_reg)){
|
||||||
assert(traps == 0);
|
assert(traps == 0);
|
||||||
outres = temp_reg;
|
outres = temp_reg;
|
||||||
@@ -983,7 +993,7 @@ common_call:
|
|||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
case _OP_RESUME:
|
case _OP_RESUME:
|
||||||
if(type(STK(arg1)) != OT_GENERATOR){ Raise_Error(_SC("trying to resume a '%s',only genenerator can be resumed"), GetTypeName(STK(arg1))); SQ_THROW();}
|
if(type(STK(arg1)) != OT_GENERATOR){ Raise_Error("trying to resume a '%s',only genenerator can be resumed", GetTypeName(STK(arg1))); SQ_THROW();}
|
||||||
_GUARD(_generator(STK(arg1))->Resume(this, arg0));
|
_GUARD(_generator(STK(arg1))->Resume(this, arg0));
|
||||||
traps += ci->_etraps;
|
traps += ci->_etraps;
|
||||||
continue;
|
continue;
|
||||||
@@ -999,7 +1009,7 @@ common_call:
|
|||||||
case _OP_DELEGATE: _GUARD(DELEGATE_OP(TARGET,STK(arg1),STK(arg2))); continue;
|
case _OP_DELEGATE: _GUARD(DELEGATE_OP(TARGET,STK(arg1),STK(arg2))); continue;
|
||||||
case _OP_CLONE:
|
case _OP_CLONE:
|
||||||
if(!Clone(STK(arg1), TARGET))
|
if(!Clone(STK(arg1), TARGET))
|
||||||
{ Raise_Error(_SC("cloning a %s"), GetTypeName(STK(arg1))); SQ_THROW();}
|
{ Raise_Error("cloning a %s", GetTypeName(STK(arg1))); SQ_THROW();}
|
||||||
continue;
|
continue;
|
||||||
case _OP_TYPEOF: TypeOf(STK(arg1), TARGET); continue;
|
case _OP_TYPEOF: TypeOf(STK(arg1), TARGET); continue;
|
||||||
case _OP_PUSHTRAP:{
|
case _OP_PUSHTRAP:{
|
||||||
@@ -1015,7 +1025,7 @@ common_call:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
case _OP_THROW: Raise_Error(TARGET); SQ_THROW(); continue;
|
case _OP_THROW: Raise_Error(TARGET); SQ_THROW();
|
||||||
case _OP_CLASS: _GUARD(CLASS_OP(TARGET,arg1,arg2)); continue;
|
case _OP_CLASS: _GUARD(CLASS_OP(TARGET,arg1,arg2)); continue;
|
||||||
case _OP_NEWSLOTA:
|
case _OP_NEWSLOTA:
|
||||||
bool bstatic = (arg0&NEW_SLOT_STATIC_FLAG)?true:false;
|
bool bstatic = (arg0&NEW_SLOT_STATIC_FLAG)?true:false;
|
||||||
@@ -1125,11 +1135,11 @@ void SQVM::CallDebugHook(SQInteger type,SQInteger forcedline)
|
|||||||
|
|
||||||
bool SQVM::CallNative(SQNativeClosure *nclosure,SQInteger nargs,SQInteger stackbase,SQObjectPtr &retval,bool &suspend)
|
bool SQVM::CallNative(SQNativeClosure *nclosure,SQInteger nargs,SQInteger stackbase,SQObjectPtr &retval,bool &suspend)
|
||||||
{
|
{
|
||||||
if (_nnativecalls + 1 > MAX_NATIVE_CALLS) { Raise_Error(_SC("Native stack overflow")); return false; }
|
if (_nnativecalls + 1 > MAX_NATIVE_CALLS) { Raise_Error("Native stack overflow"); return false; }
|
||||||
SQInteger nparamscheck = nclosure->_nparamscheck;
|
SQInteger nparamscheck = nclosure->_nparamscheck;
|
||||||
if(((nparamscheck > 0) && (nparamscheck != nargs))
|
if(((nparamscheck > 0) && (nparamscheck != nargs))
|
||||||
|| ((nparamscheck < 0) && (nargs < (-nparamscheck)))) {
|
|| ((nparamscheck < 0) && (nargs < (-nparamscheck)))) {
|
||||||
Raise_Error(_SC("wrong number of parameters"));
|
Raise_Error("wrong number of parameters");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1337,10 +1347,10 @@ bool SQVM::Set(const SQObjectPtr &self,const SQObjectPtr &key,const SQObjectPtr
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case OT_ARRAY:
|
case OT_ARRAY:
|
||||||
if(!sq_isnumeric(key)) {Raise_Error(_SC("indexing %s with %s"),GetTypeName(self),GetTypeName(key)); return false; }
|
if(!sq_isnumeric(key)) {Raise_Error("indexing %s with %s",GetTypeName(self),GetTypeName(key)); return false; }
|
||||||
return _array(self)->Set(tointeger(key),val);
|
return _array(self)->Set(tointeger(key),val);
|
||||||
default:
|
default:
|
||||||
Raise_Error(_SC("trying to set '%s'"),GetTypeName(self));
|
Raise_Error("trying to set '%s'",GetTypeName(self));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if(fetchroot) {
|
if(fetchroot) {
|
||||||
@@ -1379,7 +1389,7 @@ cloned_mt:
|
|||||||
|
|
||||||
bool SQVM::NewSlot(const SQObjectPtr &self,const SQObjectPtr &key,const SQObjectPtr &val,bool bstatic)
|
bool SQVM::NewSlot(const SQObjectPtr &self,const SQObjectPtr &key,const SQObjectPtr &val,bool bstatic)
|
||||||
{
|
{
|
||||||
if(type(key) == OT_NULL) { Raise_Error(_SC("null cannot be used as index")); return false; }
|
if(type(key) == OT_NULL) { Raise_Error("null cannot be used as index"); return false; }
|
||||||
switch(type(self)) {
|
switch(type(self)) {
|
||||||
case OT_TABLE: {
|
case OT_TABLE: {
|
||||||
bool rawcall = true;
|
bool rawcall = true;
|
||||||
@@ -1397,25 +1407,25 @@ bool SQVM::NewSlot(const SQObjectPtr &self,const SQObjectPtr &key,const SQObject
|
|||||||
SQObjectPtr res;
|
SQObjectPtr res;
|
||||||
Push(self);Push(key);Push(val);
|
Push(self);Push(key);Push(val);
|
||||||
if(!CallMetaMethod(_instance(self),MT_NEWSLOT,3,res)) {
|
if(!CallMetaMethod(_instance(self),MT_NEWSLOT,3,res)) {
|
||||||
Raise_Error(_SC("class instances do not support the new slot operator"));
|
Raise_Error("class instances do not support the new slot operator");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
break;}
|
break;}
|
||||||
case OT_CLASS:
|
case OT_CLASS:
|
||||||
if(!_class(self)->NewSlot(_ss(this),key,val,bstatic)) {
|
if(!_class(self)->NewSlot(_ss(this),key,val,bstatic)) {
|
||||||
if(_class(self)->_locked) {
|
if(_class(self)->_locked) {
|
||||||
Raise_Error(_SC("trying to modify a class that has already been instantiated"));
|
Raise_Error("trying to modify a class that has already been instantiated");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
SQObjectPtr oval = PrintObjVal(key);
|
SQObjectPtr oval = PrintObjVal(key);
|
||||||
Raise_Error(_SC("the property '%s' already exists"),_stringval(oval));
|
Raise_Error("the property '%s' already exists",_stringval(oval));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
Raise_Error(_SC("indexing %s with %s"),GetTypeName(self),GetTypeName(key));
|
Raise_Error("indexing %s with %s",GetTypeName(self),GetTypeName(key));
|
||||||
return false;
|
return false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -1446,7 +1456,7 @@ bool SQVM::DeleteSlot(const SQObjectPtr &self,const SQObjectPtr &key,SQObjectPtr
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Raise_Error(_SC("cannot delete a slot from %s"),GetTypeName(self));
|
Raise_Error("cannot delete a slot from %s",GetTypeName(self));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1454,7 +1464,7 @@ bool SQVM::DeleteSlot(const SQObjectPtr &self,const SQObjectPtr &key,SQObjectPtr
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
Raise_Error(_SC("attempt to delete a slot from a %s"),GetTypeName(self));
|
Raise_Error("attempt to delete a slot from a %s",GetTypeName(self));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@@ -1558,37 +1568,37 @@ void SQVM::dumpstack(SQInteger stackbase,bool dumpall)
|
|||||||
{
|
{
|
||||||
SQInteger size=dumpall?_stack.size():_top;
|
SQInteger size=dumpall?_stack.size():_top;
|
||||||
SQInteger n=0;
|
SQInteger n=0;
|
||||||
scprintf(_SC("\n>>>>stack dump<<<<\n"));
|
printf("\n>>>>stack dump<<<<\n");
|
||||||
CallInfo &ci=_callsstack[_callsstacksize-1];
|
CallInfo &ci=_callsstack[_callsstacksize-1];
|
||||||
scprintf(_SC("IP: %p\n"),ci._ip);
|
printf("IP: %p\n",ci._ip);
|
||||||
scprintf(_SC("prev stack base: %d\n"),ci._prevstkbase);
|
printf("prev stack base: %d\n",ci._prevstkbase);
|
||||||
scprintf(_SC("prev top: %d\n"),ci._prevtop);
|
printf("prev top: %d\n",ci._prevtop);
|
||||||
for(SQInteger i=0;i<size;i++){
|
for(SQInteger i=0;i<size;i++){
|
||||||
SQObjectPtr &obj=_stack[i];
|
SQObjectPtr &obj=_stack[i];
|
||||||
if(stackbase==i)scprintf(_SC(">"));else scprintf(_SC(" "));
|
if(stackbase==i)printf(">");else printf(" ");
|
||||||
scprintf(_SC("[%d]:"),n);
|
printf("[%d]:",n);
|
||||||
switch(type(obj)){
|
switch(type(obj)){
|
||||||
case OT_FLOAT: scprintf(_SC("FLOAT %.3f"),_float(obj));break;
|
case OT_FLOAT: printf("FLOAT %.3f",_float(obj));break;
|
||||||
case OT_INTEGER: scprintf(_SC("INTEGER %d"),_integer(obj));break;
|
case OT_INTEGER: printf("INTEGER %d",_integer(obj));break;
|
||||||
case OT_BOOL: scprintf(_SC("BOOL %s"),_integer(obj)?"true":"false");break;
|
case OT_BOOL: printf("BOOL %s",_integer(obj)?"true":"false");break;
|
||||||
case OT_STRING: scprintf(_SC("STRING %s"),_stringval(obj));break;
|
case OT_STRING: printf("STRING %s",_stringval(obj));break;
|
||||||
case OT_NULL: scprintf(_SC("NULL")); break;
|
case OT_NULL: printf("NULL"); break;
|
||||||
case OT_TABLE: scprintf(_SC("TABLE %p[%p]"),_table(obj),_table(obj)->_delegate);break;
|
case OT_TABLE: printf("TABLE %p[%p]",_table(obj),_table(obj)->_delegate);break;
|
||||||
case OT_ARRAY: scprintf(_SC("ARRAY %p"),_array(obj));break;
|
case OT_ARRAY: printf("ARRAY %p",_array(obj));break;
|
||||||
case OT_CLOSURE: scprintf(_SC("CLOSURE [%p]"),_closure(obj));break;
|
case OT_CLOSURE: printf("CLOSURE [%p]",_closure(obj));break;
|
||||||
case OT_NATIVECLOSURE: scprintf(_SC("NATIVECLOSURE"));break;
|
case OT_NATIVECLOSURE: printf("NATIVECLOSURE");break;
|
||||||
case OT_USERDATA: scprintf(_SC("USERDATA %p[%p]"),_userdataval(obj),_userdata(obj)->_delegate);break;
|
case OT_USERDATA: printf("USERDATA %p[%p]",_userdataval(obj),_userdata(obj)->_delegate);break;
|
||||||
case OT_GENERATOR: scprintf(_SC("GENERATOR %p"),_generator(obj));break;
|
case OT_GENERATOR: printf("GENERATOR %p",_generator(obj));break;
|
||||||
case OT_THREAD: scprintf(_SC("THREAD [%p]"),_thread(obj));break;
|
case OT_THREAD: printf("THREAD [%p]",_thread(obj));break;
|
||||||
case OT_USERPOINTER: scprintf(_SC("USERPOINTER %p"),_userpointer(obj));break;
|
case OT_USERPOINTER: printf("USERPOINTER %p",_userpointer(obj));break;
|
||||||
case OT_CLASS: scprintf(_SC("CLASS %p"),_class(obj));break;
|
case OT_CLASS: printf("CLASS %p",_class(obj));break;
|
||||||
case OT_INSTANCE: scprintf(_SC("INSTANCE %p"),_instance(obj));break;
|
case OT_INSTANCE: printf("INSTANCE %p",_instance(obj));break;
|
||||||
case OT_WEAKREF: scprintf(_SC("WEAKERF %p"),_weakref(obj));break;
|
case OT_WEAKREF: printf("WEAKERF %p",_weakref(obj));break;
|
||||||
default:
|
default:
|
||||||
assert(0);
|
assert(0);
|
||||||
break;
|
break;
|
||||||
};
|
};
|
||||||
scprintf(_SC("\n"));
|
printf("\n");
|
||||||
++n;
|
++n;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
2
src/3rdparty/squirrel/squirrel/sqvm.h
vendored
2
src/3rdparty/squirrel/squirrel/sqvm.h
vendored
@@ -203,7 +203,7 @@ inline SQObjectPtr &stack_get(HSQUIRRELVM v,SQInteger idx){return ((idx>=0)?(v->
|
|||||||
if(v->_callsstacksize == v->_alloccallsstacksize) { \
|
if(v->_callsstacksize == v->_alloccallsstacksize) { \
|
||||||
if (v->_callsstacksize > 65535 && !v->_in_stackoverflow) {\
|
if (v->_callsstacksize > 65535 && !v->_in_stackoverflow) {\
|
||||||
v->_in_stackoverflow = true; \
|
v->_in_stackoverflow = true; \
|
||||||
v->Raise_Error(_SC("stack overflow"));\
|
v->Raise_Error("stack overflow");\
|
||||||
v->CallErrorHandler(v->_lasterror);\
|
v->CallErrorHandler(v->_lasterror);\
|
||||||
return false;\
|
return false;\
|
||||||
}\
|
}\
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* $Id: ai_config.cpp 24789 2012-12-05 19:36:04Z frosch $ */
|
/* $Id: ai_config.cpp 26509 2014-04-25 15:40:32Z rubidium $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This file is part of OpenTTD.
|
* This file is part of OpenTTD.
|
||||||
@@ -11,10 +11,13 @@
|
|||||||
|
|
||||||
#include "../stdafx.h"
|
#include "../stdafx.h"
|
||||||
#include "../settings_type.h"
|
#include "../settings_type.h"
|
||||||
|
#include "../string_func.h"
|
||||||
#include "ai.hpp"
|
#include "ai.hpp"
|
||||||
#include "ai_config.hpp"
|
#include "ai_config.hpp"
|
||||||
#include "ai_info.hpp"
|
#include "ai_info.hpp"
|
||||||
|
|
||||||
|
#include "../safeguards.h"
|
||||||
|
|
||||||
/** Configuration for AI start date, every AI has this setting. */
|
/** Configuration for AI start date, every AI has this setting. */
|
||||||
ScriptConfigItem _start_date_config = {
|
ScriptConfigItem _start_date_config = {
|
||||||
"start_date",
|
"start_date",
|
||||||
@@ -107,7 +110,7 @@ void AIConfig::SetSetting(const char *name, int value)
|
|||||||
if (it != this->settings.end()) {
|
if (it != this->settings.end()) {
|
||||||
(*it).second = value;
|
(*it).second = value;
|
||||||
} else {
|
} else {
|
||||||
this->settings[strdup(name)] = value;
|
this->settings[stredup(name)] = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* $Id: ai_core.cpp 25592 2013-07-12 18:54:27Z rubidium $ */
|
/* $Id: ai_core.cpp 26482 2014-04-23 20:13:33Z rubidium $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This file is part of OpenTTD.
|
* This file is part of OpenTTD.
|
||||||
@@ -22,6 +22,8 @@
|
|||||||
#include "ai_info.hpp"
|
#include "ai_info.hpp"
|
||||||
#include "ai.hpp"
|
#include "ai.hpp"
|
||||||
|
|
||||||
|
#include "../safeguards.h"
|
||||||
|
|
||||||
/* static */ uint AI::frame_counter = 0;
|
/* static */ uint AI::frame_counter = 0;
|
||||||
/* static */ AIScannerInfo *AI::scanner_info = NULL;
|
/* static */ AIScannerInfo *AI::scanner_info = NULL;
|
||||||
/* static */ AIScannerLibrary *AI::scanner_library = NULL;
|
/* static */ AIScannerLibrary *AI::scanner_library = NULL;
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* $Id: ai_gui.cpp 26086 2013-11-24 14:46:26Z rubidium $ */
|
/* $Id: ai_gui.cpp 26954 2014-10-04 18:19:22Z peter1138 $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This file is part of OpenTTD.
|
* This file is part of OpenTTD.
|
||||||
@@ -40,11 +40,12 @@
|
|||||||
#include "../game/game_info.hpp"
|
#include "../game/game_info.hpp"
|
||||||
#include "../game/game_instance.hpp"
|
#include "../game/game_instance.hpp"
|
||||||
|
|
||||||
|
|
||||||
#include "table/strings.h"
|
#include "table/strings.h"
|
||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
#include "../safeguards.h"
|
||||||
|
|
||||||
static ScriptConfig *GetConfig(CompanyID slot)
|
static ScriptConfig *GetConfig(CompanyID slot)
|
||||||
{
|
{
|
||||||
if (slot == OWNER_DEITY) return GameConfig::GetConfig();
|
if (slot == OWNER_DEITY) return GameConfig::GetConfig();
|
||||||
@@ -345,7 +346,7 @@ struct AISettingsWindow : public Window {
|
|||||||
virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize)
|
virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize)
|
||||||
{
|
{
|
||||||
if (widget == WID_AIS_BACKGROUND) {
|
if (widget == WID_AIS_BACKGROUND) {
|
||||||
this->line_height = FONT_HEIGHT_NORMAL + WD_MATRIX_TOP + WD_MATRIX_BOTTOM;
|
this->line_height = max(SETTING_BUTTON_HEIGHT, FONT_HEIGHT_NORMAL) + WD_MATRIX_TOP + WD_MATRIX_BOTTOM;
|
||||||
|
|
||||||
resize->width = 1;
|
resize->width = 1;
|
||||||
resize->height = this->line_height;
|
resize->height = this->line_height;
|
||||||
@@ -370,6 +371,7 @@ struct AISettingsWindow : public Window {
|
|||||||
|
|
||||||
int y = r.top;
|
int y = r.top;
|
||||||
int button_y_offset = (this->line_height - SETTING_BUTTON_HEIGHT) / 2;
|
int button_y_offset = (this->line_height - SETTING_BUTTON_HEIGHT) / 2;
|
||||||
|
int text_y_offset = (this->line_height - FONT_HEIGHT_NORMAL) / 2;
|
||||||
for (; this->vscroll->IsVisible(i) && it != visible_settings.end(); i++, it++) {
|
for (; this->vscroll->IsVisible(i) && it != visible_settings.end(); i++, it++) {
|
||||||
const ScriptConfigItem &config_item = **it;
|
const ScriptConfigItem &config_item = **it;
|
||||||
int current_value = config->GetSetting((config_item).name);
|
int current_value = config->GetSetting((config_item).name);
|
||||||
@@ -411,7 +413,7 @@ struct AISettingsWindow : public Window {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
DrawString(text_left, text_right, y + WD_MATRIX_TOP, str, colour);
|
DrawString(text_left, text_right, y + text_y_offset, str, colour);
|
||||||
y += this->line_height;
|
y += this->line_height;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -853,7 +855,7 @@ struct AIConfigWindow : public Window {
|
|||||||
case WID_AIC_GAMELIST: {
|
case WID_AIC_GAMELIST: {
|
||||||
this->selected_slot = OWNER_DEITY;
|
this->selected_slot = OWNER_DEITY;
|
||||||
this->InvalidateData();
|
this->InvalidateData();
|
||||||
if (click_count > 1 && this->selected_slot != INVALID_COMPANY) ShowAIListWindow((CompanyID)this->selected_slot);
|
if (click_count > 1 && this->selected_slot != INVALID_COMPANY && _game_mode != GM_NORMAL) ShowAIListWindow((CompanyID)this->selected_slot);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* $Id: ai_info.cpp 25001 2013-02-14 18:58:04Z rubidium $ */
|
/* $Id: ai_info.cpp 26774 2014-09-06 17:46:56Z rubidium $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This file is part of OpenTTD.
|
* This file is part of OpenTTD.
|
||||||
@@ -15,15 +15,20 @@
|
|||||||
#include "ai_info.hpp"
|
#include "ai_info.hpp"
|
||||||
#include "ai_scanner.hpp"
|
#include "ai_scanner.hpp"
|
||||||
#include "../debug.h"
|
#include "../debug.h"
|
||||||
|
#include "../string_func.h"
|
||||||
#include "../rev.h"
|
#include "../rev.h"
|
||||||
|
|
||||||
|
#include "../safeguards.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if the API version provided by the AI is supported.
|
* Check if the API version provided by the AI is supported.
|
||||||
* @param api_version The API version as provided by the AI.
|
* @param api_version The API version as provided by the AI.
|
||||||
*/
|
*/
|
||||||
static bool CheckAPIVersion(const char *api_version)
|
static bool CheckAPIVersion(const char *api_version)
|
||||||
{
|
{
|
||||||
return strcmp(api_version, "0.7") == 0 || strcmp(api_version, "1.0") == 0 || strcmp(api_version, "1.1") == 0 || strcmp(api_version, "1.2") == 0 || strcmp(api_version, "1.3") == 0 || strcmp(api_version, "1.4") == 0;
|
return strcmp(api_version, "0.7") == 0 || strcmp(api_version, "1.0") == 0 || strcmp(api_version, "1.1") == 0 ||
|
||||||
|
strcmp(api_version, "1.2") == 0 || strcmp(api_version, "1.3") == 0 || strcmp(api_version, "1.4") == 0 ||
|
||||||
|
strcmp(api_version, "1.5") == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(WIN32)
|
#if defined(WIN32)
|
||||||
@@ -60,15 +65,15 @@ template <> const char *GetClassName<AIInfo, ST_AI>() { return "AIInfo"; }
|
|||||||
{
|
{
|
||||||
/* Get the AIInfo */
|
/* Get the AIInfo */
|
||||||
SQUserPointer instance = NULL;
|
SQUserPointer instance = NULL;
|
||||||
if (SQ_FAILED(sq_getinstanceup(vm, 2, &instance, 0)) || instance == NULL) return sq_throwerror(vm, _SC("Pass an instance of a child class of AIInfo to RegisterAI"));
|
if (SQ_FAILED(sq_getinstanceup(vm, 2, &instance, 0)) || instance == NULL) return sq_throwerror(vm, "Pass an instance of a child class of AIInfo to RegisterAI");
|
||||||
AIInfo *info = (AIInfo *)instance;
|
AIInfo *info = (AIInfo *)instance;
|
||||||
|
|
||||||
SQInteger res = ScriptInfo::Constructor(vm, info);
|
SQInteger res = ScriptInfo::Constructor(vm, info);
|
||||||
if (res != 0) return res;
|
if (res != 0) return res;
|
||||||
|
|
||||||
ScriptConfigItem config = _start_date_config;
|
ScriptConfigItem config = _start_date_config;
|
||||||
config.name = strdup(config.name);
|
config.name = stredup(config.name);
|
||||||
config.description = strdup(config.description);
|
config.description = stredup(config.description);
|
||||||
info->config_list.push_front(config);
|
info->config_list.push_front(config);
|
||||||
|
|
||||||
if (info->engine->MethodExists(*info->SQ_instance, "MinVersionToLoad")) {
|
if (info->engine->MethodExists(*info->SQ_instance, "MinVersionToLoad")) {
|
||||||
@@ -90,7 +95,7 @@ template <> const char *GetClassName<AIInfo, ST_AI>() { return "AIInfo"; }
|
|||||||
return SQ_ERROR;
|
return SQ_ERROR;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
info->api_version = strdup("0.7");
|
info->api_version = stredup("0.7");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Remove the link to the real instance, else it might get deleted by RegisterAI() */
|
/* Remove the link to the real instance, else it might get deleted by RegisterAI() */
|
||||||
@@ -113,7 +118,7 @@ template <> const char *GetClassName<AIInfo, ST_AI>() { return "AIInfo"; }
|
|||||||
|
|
||||||
char buf[8];
|
char buf[8];
|
||||||
seprintf(buf, lastof(buf), "%d.%d", GB(_openttd_newgrf_version, 28, 4), GB(_openttd_newgrf_version, 24, 4));
|
seprintf(buf, lastof(buf), "%d.%d", GB(_openttd_newgrf_version, 28, 4), GB(_openttd_newgrf_version, 24, 4));
|
||||||
info->api_version = strdup(buf);
|
info->api_version = stredup(buf);
|
||||||
|
|
||||||
/* Remove the link to the real instance, else it might get deleted by RegisterAI() */
|
/* Remove the link to the real instance, else it might get deleted by RegisterAI() */
|
||||||
sq_setinstanceup(vm, 2, NULL);
|
sq_setinstanceup(vm, 2, NULL);
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* $Id: ai_instance.cpp 25236 2013-05-12 13:12:55Z rubidium $ */
|
/* $Id: ai_instance.cpp 26893 2014-09-21 16:20:48Z fonsinchen $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This file is part of OpenTTD.
|
* This file is part of OpenTTD.
|
||||||
@@ -82,6 +82,8 @@
|
|||||||
#include "../company_base.h"
|
#include "../company_base.h"
|
||||||
#include "../company_func.h"
|
#include "../company_func.h"
|
||||||
|
|
||||||
|
#include "../safeguards.h"
|
||||||
|
|
||||||
AIInstance::AIInstance() :
|
AIInstance::AIInstance() :
|
||||||
ScriptInstance("AI")
|
ScriptInstance("AI")
|
||||||
{}
|
{}
|
||||||
@@ -169,6 +171,17 @@ void AIInstance::RegisterAPI()
|
|||||||
SQAISignList_Register(this->engine);
|
SQAISignList_Register(this->engine);
|
||||||
SQAIStation_Register(this->engine);
|
SQAIStation_Register(this->engine);
|
||||||
SQAIStationList_Register(this->engine);
|
SQAIStationList_Register(this->engine);
|
||||||
|
SQAIStationList_Cargo_Register(this->engine);
|
||||||
|
SQAIStationList_CargoPlanned_Register(this->engine);
|
||||||
|
SQAIStationList_CargoPlannedByFrom_Register(this->engine);
|
||||||
|
SQAIStationList_CargoPlannedByVia_Register(this->engine);
|
||||||
|
SQAIStationList_CargoPlannedFromByVia_Register(this->engine);
|
||||||
|
SQAIStationList_CargoPlannedViaByFrom_Register(this->engine);
|
||||||
|
SQAIStationList_CargoWaiting_Register(this->engine);
|
||||||
|
SQAIStationList_CargoWaitingByFrom_Register(this->engine);
|
||||||
|
SQAIStationList_CargoWaitingByVia_Register(this->engine);
|
||||||
|
SQAIStationList_CargoWaitingFromByVia_Register(this->engine);
|
||||||
|
SQAIStationList_CargoWaitingViaByFrom_Register(this->engine);
|
||||||
SQAIStationList_Vehicle_Register(this->engine);
|
SQAIStationList_Vehicle_Register(this->engine);
|
||||||
SQAISubsidy_Register(this->engine);
|
SQAISubsidy_Register(this->engine);
|
||||||
SQAISubsidyList_Register(this->engine);
|
SQAISubsidyList_Register(this->engine);
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* $Id: ai_scanner.cpp 23740 2012-01-03 21:32:51Z rubidium $ */
|
/* $Id: ai_scanner.cpp 26509 2014-04-25 15:40:32Z rubidium $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This file is part of OpenTTD.
|
* This file is part of OpenTTD.
|
||||||
@@ -18,6 +18,8 @@
|
|||||||
#include "ai_info.hpp"
|
#include "ai_info.hpp"
|
||||||
#include "ai_scanner.hpp"
|
#include "ai_scanner.hpp"
|
||||||
|
|
||||||
|
#include "../safeguards.h"
|
||||||
|
|
||||||
|
|
||||||
AIScannerInfo::AIScannerInfo() :
|
AIScannerInfo::AIScannerInfo() :
|
||||||
ScriptScanner(),
|
ScriptScanner(),
|
||||||
@@ -31,7 +33,7 @@ void AIScannerInfo::Initialize()
|
|||||||
|
|
||||||
/* Create the dummy AI */
|
/* Create the dummy AI */
|
||||||
free(this->main_script);
|
free(this->main_script);
|
||||||
this->main_script = strdup("%_dummy");
|
this->main_script = stredup("%_dummy");
|
||||||
extern void Script_CreateDummyInfo(HSQUIRRELVM vm, const char *type, const char *dir);
|
extern void Script_CreateDummyInfo(HSQUIRRELVM vm, const char *type, const char *dir);
|
||||||
Script_CreateDummyInfo(this->engine->GetVM(), "AI", "ai");
|
Script_CreateDummyInfo(this->engine->GetVM(), "AI", "ai");
|
||||||
}
|
}
|
||||||
@@ -46,9 +48,9 @@ AIScannerInfo::~AIScannerInfo()
|
|||||||
delete this->info_dummy;
|
delete this->info_dummy;
|
||||||
}
|
}
|
||||||
|
|
||||||
void AIScannerInfo::GetScriptName(ScriptInfo *info, char *name, int len)
|
void AIScannerInfo::GetScriptName(ScriptInfo *info, char *name, const char *last)
|
||||||
{
|
{
|
||||||
snprintf(name, len, "%s", info->GetName());
|
seprintf(name, last, "%s", info->GetName());
|
||||||
}
|
}
|
||||||
|
|
||||||
void AIScannerInfo::RegisterAPI(class Squirrel *engine)
|
void AIScannerInfo::RegisterAPI(class Squirrel *engine)
|
||||||
@@ -96,7 +98,7 @@ AIInfo *AIScannerInfo::FindInfo(const char *nameParam, int versionParam, bool fo
|
|||||||
if (nameParam == NULL) return NULL;
|
if (nameParam == NULL) return NULL;
|
||||||
|
|
||||||
char ai_name[1024];
|
char ai_name[1024];
|
||||||
ttd_strlcpy(ai_name, nameParam, sizeof(ai_name));
|
strecpy(ai_name, nameParam, lastof(ai_name));
|
||||||
strtolower(ai_name);
|
strtolower(ai_name);
|
||||||
|
|
||||||
AIInfo *info = NULL;
|
AIInfo *info = NULL;
|
||||||
@@ -118,7 +120,7 @@ AIInfo *AIScannerInfo::FindInfo(const char *nameParam, int versionParam, bool fo
|
|||||||
if (force_exact_match) {
|
if (force_exact_match) {
|
||||||
/* Try to find a direct 'name.version' match */
|
/* Try to find a direct 'name.version' match */
|
||||||
char ai_name_tmp[1024];
|
char ai_name_tmp[1024];
|
||||||
snprintf(ai_name_tmp, sizeof(ai_name_tmp), "%s.%d", ai_name, versionParam);
|
seprintf(ai_name_tmp, lastof(ai_name_tmp), "%s.%d", ai_name, versionParam);
|
||||||
strtolower(ai_name_tmp);
|
strtolower(ai_name_tmp);
|
||||||
if (this->info_list.find(ai_name_tmp) != this->info_list.end()) return static_cast<AIInfo *>(this->info_list[ai_name_tmp]);
|
if (this->info_list.find(ai_name_tmp) != this->info_list.end()) return static_cast<AIInfo *>(this->info_list[ai_name_tmp]);
|
||||||
}
|
}
|
||||||
@@ -143,10 +145,10 @@ void AIScannerLibrary::Initialize()
|
|||||||
ScriptScanner::Initialize("AIScanner");
|
ScriptScanner::Initialize("AIScanner");
|
||||||
}
|
}
|
||||||
|
|
||||||
void AIScannerLibrary::GetScriptName(ScriptInfo *info, char *name, int len)
|
void AIScannerLibrary::GetScriptName(ScriptInfo *info, char *name, const char *last)
|
||||||
{
|
{
|
||||||
AILibrary *library = static_cast<AILibrary *>(info);
|
AILibrary *library = static_cast<AILibrary *>(info);
|
||||||
snprintf(name, len, "%s.%s", library->GetCategory(), library->GetInstanceName());
|
seprintf(name, last, "%s.%s", library->GetCategory(), library->GetInstanceName());
|
||||||
}
|
}
|
||||||
|
|
||||||
void AIScannerLibrary::RegisterAPI(class Squirrel *engine)
|
void AIScannerLibrary::RegisterAPI(class Squirrel *engine)
|
||||||
@@ -158,7 +160,7 @@ AILibrary *AIScannerLibrary::FindLibrary(const char *library, int version)
|
|||||||
{
|
{
|
||||||
/* Internally we store libraries as 'library.version' */
|
/* Internally we store libraries as 'library.version' */
|
||||||
char library_name[1024];
|
char library_name[1024];
|
||||||
snprintf(library_name, sizeof(library_name), "%s.%d", library, version);
|
seprintf(library_name, lastof(library_name), "%s.%d", library, version);
|
||||||
strtolower(library_name);
|
strtolower(library_name);
|
||||||
|
|
||||||
/* Check if the library + version exists */
|
/* Check if the library + version exists */
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* $Id: ai_scanner.hpp 24900 2013-01-08 22:46:42Z planetmaker $ */
|
/* $Id: ai_scanner.hpp 26487 2014-04-23 21:16:58Z rubidium $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This file is part of OpenTTD.
|
* This file is part of OpenTTD.
|
||||||
@@ -42,7 +42,7 @@ public:
|
|||||||
void SetDummyAI(class AIInfo *info);
|
void SetDummyAI(class AIInfo *info);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
/* virtual */ void GetScriptName(ScriptInfo *info, char *name, int len);
|
/* virtual */ void GetScriptName(ScriptInfo *info, char *name, const char *last);
|
||||||
/* virtual */ const char *GetFileName() const { return PATHSEP "info.nut"; }
|
/* virtual */ const char *GetFileName() const { return PATHSEP "info.nut"; }
|
||||||
/* virtual */ Subdirectory GetDirectory() const { return AI_DIR; }
|
/* virtual */ Subdirectory GetDirectory() const { return AI_DIR; }
|
||||||
/* virtual */ const char *GetScannerName() const { return "AIs"; }
|
/* virtual */ const char *GetScannerName() const { return "AIs"; }
|
||||||
@@ -65,7 +65,7 @@ public:
|
|||||||
class AILibrary *FindLibrary(const char *library, int version);
|
class AILibrary *FindLibrary(const char *library, int version);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
/* virtual */ void GetScriptName(ScriptInfo *info, char *name, int len);
|
/* virtual */ void GetScriptName(ScriptInfo *info, char *name, const char *last);
|
||||||
/* virtual */ const char *GetFileName() const { return PATHSEP "library.nut"; }
|
/* virtual */ const char *GetFileName() const { return PATHSEP "library.nut"; }
|
||||||
/* virtual */ Subdirectory GetDirectory() const { return AI_LIBRARY_DIR; }
|
/* virtual */ Subdirectory GetDirectory() const { return AI_LIBRARY_DIR; }
|
||||||
/* virtual */ const char *GetScannerName() const { return "AI Libraries"; }
|
/* virtual */ const char *GetScannerName() const { return "AI Libraries"; }
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* $Id: aircraft.h 24839 2012-12-23 01:00:25Z michi_cc $ */
|
/* $Id: aircraft.h 26866 2014-09-21 06:35:34Z rubidium $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This file is part of OpenTTD.
|
* This file is part of OpenTTD.
|
||||||
@@ -15,6 +15,17 @@
|
|||||||
#include "station_map.h"
|
#include "station_map.h"
|
||||||
#include "vehicle_base.h"
|
#include "vehicle_base.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Base values for flight levels above ground level for 'normal' flight and holding patterns.
|
||||||
|
* Due to speed and direction, the actual flight level may be higher.
|
||||||
|
*/
|
||||||
|
enum AircraftFlyingAltitude {
|
||||||
|
AIRCRAFT_MIN_FLYING_ALTITUDE = 120, ///< Minimum flying altitude above tile.
|
||||||
|
AIRCRAFT_MAX_FLYING_ALTITUDE = 360, ///< Maximum flying altitude above tile.
|
||||||
|
PLANE_HOLD_MAX_FLYING_ALTITUDE = 150, ///< holding flying altitude above tile of planes.
|
||||||
|
HELICOPTER_HOLD_MAX_FLYING_ALTITUDE = 184 ///< holding flying altitude above tile of helicopters.
|
||||||
|
};
|
||||||
|
|
||||||
struct Aircraft;
|
struct Aircraft;
|
||||||
|
|
||||||
/** An aircraft can be one of those types. */
|
/** An aircraft can be one of those types. */
|
||||||
@@ -25,11 +36,18 @@ enum AircraftSubType {
|
|||||||
AIR_ROTOR = 6, ///< rotor of an helicopter
|
AIR_ROTOR = 6, ///< rotor of an helicopter
|
||||||
};
|
};
|
||||||
|
|
||||||
/** Aircraft flags. */
|
/** Flags for air vehicles; shared with disaster vehicles. */
|
||||||
enum VehicleAirFlags {
|
enum AirVehicleFlags {
|
||||||
VAF_DEST_TOO_FAR = 0, ///< Next destination is too far away.
|
VAF_DEST_TOO_FAR = 0, ///< Next destination is too far away.
|
||||||
|
|
||||||
|
/* The next two flags are to prevent stair climbing of the aircraft. The idea is that the aircraft
|
||||||
|
* will ascend or descend multiple flight levels at a time instead of following the contours of the
|
||||||
|
* landscape at a fixed altitude. This only has effect when there are more than 15 height levels. */
|
||||||
|
VAF_IN_MAX_HEIGHT_CORRECTION = 1, ///< The vehicle is currently lowering its altitude because it hit the upper bound.
|
||||||
|
VAF_IN_MIN_HEIGHT_CORRECTION = 2, ///< The vehicle is currently raising its altitude because it hit the lower bound.
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const int ROTOR_Z_OFFSET = 5; ///< Z Offset between helicopter- and rotorsprite.
|
||||||
|
|
||||||
void HandleAircraftEnterHangar(Aircraft *v);
|
void HandleAircraftEnterHangar(Aircraft *v);
|
||||||
void GetAircraftSpriteSize(EngineID engine, uint &width, uint &height, int &xoffs, int &yoffs, EngineImageType image_type);
|
void GetAircraftSpriteSize(EngineID engine, uint &width, uint &height, int &xoffs, int &yoffs, EngineImageType image_type);
|
||||||
@@ -39,7 +57,10 @@ void UpdateAircraftCache(Aircraft *v, bool update_range = false);
|
|||||||
void AircraftLeaveHangar(Aircraft *v, Direction exit_dir);
|
void AircraftLeaveHangar(Aircraft *v, Direction exit_dir);
|
||||||
void AircraftNextAirportPos_and_Order(Aircraft *v);
|
void AircraftNextAirportPos_and_Order(Aircraft *v);
|
||||||
void SetAircraftPosition(Aircraft *v, int x, int y, int z);
|
void SetAircraftPosition(Aircraft *v, int x, int y, int z);
|
||||||
int GetAircraftFlyingAltitude(const Aircraft *v);
|
|
||||||
|
void GetAircraftFlightLevelBounds(const Vehicle *v, int *min, int *max);
|
||||||
|
template <class T>
|
||||||
|
int GetAircraftFlightLevel(T *v, bool takeoff = false);
|
||||||
|
|
||||||
/** Variables that are cached to improve performance and such. */
|
/** Variables that are cached to improve performance and such. */
|
||||||
struct AircraftCache {
|
struct AircraftCache {
|
||||||
@@ -59,7 +80,7 @@ struct Aircraft FINAL : public SpecializedVehicle<Aircraft, VEH_AIRCRAFT> {
|
|||||||
DirectionByte last_direction;
|
DirectionByte last_direction;
|
||||||
byte number_consecutive_turns; ///< Protection to prevent the aircraft of making a lot of turns in order to reach a specific point.
|
byte number_consecutive_turns; ///< Protection to prevent the aircraft of making a lot of turns in order to reach a specific point.
|
||||||
byte turn_counter; ///< Ticks between each turn to prevent > 45 degree turns.
|
byte turn_counter; ///< Ticks between each turn to prevent > 45 degree turns.
|
||||||
byte flags; ///< Aircraft flags. @see VehicleAirFlags
|
byte flags; ///< Aircraft flags. @see AirVehicleFlags
|
||||||
|
|
||||||
AircraftCache acache;
|
AircraftCache acache;
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* $Id: aircraft_cmd.cpp 26134 2013-11-28 19:37:24Z rubidium $ */
|
/* $Id: aircraft_cmd.cpp 27134 2015-02-01 20:54:24Z frosch $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This file is part of OpenTTD.
|
* This file is part of OpenTTD.
|
||||||
@@ -36,14 +36,11 @@
|
|||||||
#include "core/random_func.hpp"
|
#include "core/random_func.hpp"
|
||||||
#include "core/backup_type.hpp"
|
#include "core/backup_type.hpp"
|
||||||
#include "zoom_func.h"
|
#include "zoom_func.h"
|
||||||
|
#include "disaster_vehicle.h"
|
||||||
|
|
||||||
#include "table/strings.h"
|
#include "table/strings.h"
|
||||||
|
|
||||||
static const int ROTOR_Z_OFFSET = 5; ///< Z Offset between helicopter- and rotorsprite.
|
#include "safeguards.h"
|
||||||
|
|
||||||
static const int PLANE_HOLDING_ALTITUDE = 150; ///< Altitude of planes in holding pattern (= lowest flight altitude).
|
|
||||||
static const int HELI_FLIGHT_ALTITUDE = 184; ///< Normal flight altitude of helicopters.
|
|
||||||
|
|
||||||
|
|
||||||
void Aircraft::UpdateDeltaXY(Direction direction)
|
void Aircraft::UpdateDeltaXY(Direction direction)
|
||||||
{
|
{
|
||||||
@@ -204,13 +201,15 @@ void DrawAircraftEngine(int left, int right, int preferred_x, int y, EngineID en
|
|||||||
{
|
{
|
||||||
SpriteID sprite = GetAircraftIcon(engine, image_type);
|
SpriteID sprite = GetAircraftIcon(engine, image_type);
|
||||||
const Sprite *real_sprite = GetSprite(sprite, ST_NORMAL);
|
const Sprite *real_sprite = GetSprite(sprite, ST_NORMAL);
|
||||||
preferred_x = Clamp(preferred_x, left - UnScaleByZoom(real_sprite->x_offs, ZOOM_LVL_GUI), right - UnScaleByZoom(real_sprite->width, ZOOM_LVL_GUI) - UnScaleByZoom(real_sprite->x_offs, ZOOM_LVL_GUI));
|
preferred_x = Clamp(preferred_x,
|
||||||
|
left - UnScaleGUI(real_sprite->x_offs),
|
||||||
|
right - UnScaleGUI(real_sprite->width) - UnScaleGUI(real_sprite->x_offs));
|
||||||
DrawSprite(sprite, pal, preferred_x, y);
|
DrawSprite(sprite, pal, preferred_x, y);
|
||||||
|
|
||||||
if (!(AircraftVehInfo(engine)->subtype & AIR_CTOL)) {
|
if (!(AircraftVehInfo(engine)->subtype & AIR_CTOL)) {
|
||||||
SpriteID rotor_sprite = GetCustomRotorIcon(engine, image_type);
|
SpriteID rotor_sprite = GetCustomRotorIcon(engine, image_type);
|
||||||
if (rotor_sprite == 0) rotor_sprite = SPR_ROTOR_STOPPED;
|
if (rotor_sprite == 0) rotor_sprite = SPR_ROTOR_STOPPED;
|
||||||
DrawSprite(rotor_sprite, PAL_NONE, preferred_x, y - 5);
|
DrawSprite(rotor_sprite, PAL_NONE, preferred_x, y - ScaleGUITrad(5));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -227,10 +226,10 @@ void GetAircraftSpriteSize(EngineID engine, uint &width, uint &height, int &xoff
|
|||||||
{
|
{
|
||||||
const Sprite *spr = GetSprite(GetAircraftIcon(engine, image_type), ST_NORMAL);
|
const Sprite *spr = GetSprite(GetAircraftIcon(engine, image_type), ST_NORMAL);
|
||||||
|
|
||||||
width = UnScaleByZoom(spr->width, ZOOM_LVL_GUI);
|
width = UnScaleGUI(spr->width);
|
||||||
height = UnScaleByZoom(spr->height, ZOOM_LVL_GUI);
|
height = UnScaleGUI(spr->height);
|
||||||
xoffs = UnScaleByZoom(spr->x_offs, ZOOM_LVL_GUI);
|
xoffs = UnScaleGUI(spr->x_offs);
|
||||||
yoffs = UnScaleByZoom(spr->y_offs, ZOOM_LVL_GUI);
|
yoffs = UnScaleGUI(spr->y_offs);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -335,8 +334,8 @@ CommandCost CmdBuildAircraft(TileIndex tile, DoCommandFlag flags, const Engine *
|
|||||||
|
|
||||||
UpdateAircraftCache(v, true);
|
UpdateAircraftCache(v, true);
|
||||||
|
|
||||||
VehicleUpdatePosition(v);
|
v->UpdatePosition();
|
||||||
VehicleUpdatePosition(u);
|
u->UpdatePosition();
|
||||||
|
|
||||||
/* Aircraft with 3 vehicles (chopper)? */
|
/* Aircraft with 3 vehicles (chopper)? */
|
||||||
if (v->subtype == AIR_HELICOPTER) {
|
if (v->subtype == AIR_HELICOPTER) {
|
||||||
@@ -357,7 +356,7 @@ CommandCost CmdBuildAircraft(TileIndex tile, DoCommandFlag flags, const Engine *
|
|||||||
w->UpdateDeltaXY(INVALID_DIR);
|
w->UpdateDeltaXY(INVALID_DIR);
|
||||||
|
|
||||||
u->SetNext(w);
|
u->SetNext(w);
|
||||||
VehicleUpdatePosition(w);
|
w->UpdatePosition();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -485,7 +484,7 @@ static void HelicopterTickHandler(Aircraft *v)
|
|||||||
|
|
||||||
u->cur_image = img;
|
u->cur_image = img;
|
||||||
|
|
||||||
VehicleUpdatePositionAndViewport(u);
|
u->UpdatePositionAndViewport();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -501,7 +500,7 @@ void SetAircraftPosition(Aircraft *v, int x, int y, int z)
|
|||||||
v->y_pos = y;
|
v->y_pos = y;
|
||||||
v->z_pos = z;
|
v->z_pos = z;
|
||||||
|
|
||||||
VehicleUpdatePosition(v);
|
v->UpdatePosition();
|
||||||
v->UpdateViewport(true, false);
|
v->UpdateViewport(true, false);
|
||||||
if (v->subtype == AIR_HELICOPTER) v->Next()->Next()->cur_image = GetRotorImage(v, EIT_ON_MAP);
|
if (v->subtype == AIR_HELICOPTER) v->Next()->Next()->cur_image = GetRotorImage(v, EIT_ON_MAP);
|
||||||
|
|
||||||
@@ -516,7 +515,7 @@ void SetAircraftPosition(Aircraft *v, int x, int y, int z)
|
|||||||
u->z_pos = GetSlopePixelZ(safe_x, safe_y);
|
u->z_pos = GetSlopePixelZ(safe_x, safe_y);
|
||||||
u->cur_image = v->cur_image;
|
u->cur_image = v->cur_image;
|
||||||
|
|
||||||
VehicleUpdatePositionAndViewport(u);
|
u->UpdatePositionAndViewport();
|
||||||
|
|
||||||
u = u->Next();
|
u = u->Next();
|
||||||
if (u != NULL) {
|
if (u != NULL) {
|
||||||
@@ -524,7 +523,7 @@ void SetAircraftPosition(Aircraft *v, int x, int y, int z)
|
|||||||
u->y_pos = y;
|
u->y_pos = y;
|
||||||
u->z_pos = z + ROTOR_Z_OFFSET;
|
u->z_pos = z + ROTOR_Z_OFFSET;
|
||||||
|
|
||||||
VehicleUpdatePositionAndViewport(u);
|
u->UpdatePositionAndViewport();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -663,20 +662,35 @@ static int UpdateAircraftSpeed(Aircraft *v, uint speed_limit = SPEED_LIMIT_NONE,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the cruise altitude of an aircraft.
|
* Get the tile height below the aircraft.
|
||||||
* The cruise altitude is determined by the velocity of the vehicle
|
* This function is needed because aircraft can leave the mapborders.
|
||||||
* and the direction it is moving
|
*
|
||||||
* @param v The vehicle. Should be an aircraft
|
* @param v The vehicle to get the height for.
|
||||||
* @returns Altitude in pixel units
|
* @return The height in pixels from 'z_pos' 0.
|
||||||
*/
|
*/
|
||||||
int GetAircraftFlyingAltitude(const Aircraft *v)
|
int GetTileHeightBelowAircraft(const Vehicle *v)
|
||||||
{
|
{
|
||||||
if (v->subtype == AIR_HELICOPTER) return HELI_FLIGHT_ALTITUDE;
|
int safe_x = Clamp(v->x_pos, 0, MapMaxX() * TILE_SIZE);
|
||||||
|
int safe_y = Clamp(v->y_pos, 0, MapMaxY() * TILE_SIZE);
|
||||||
|
return TileHeight(TileVirtXY(safe_x, safe_y)) * TILE_HEIGHT;
|
||||||
|
}
|
||||||
|
|
||||||
/* Make sure Aircraft fly no lower so that they don't conduct
|
/**
|
||||||
* CFITs (controlled flight into terrain)
|
* Get the 'flight level' bounds, in pixels from 'z_pos' 0 for a particular
|
||||||
*/
|
* vehicle for normal flight situation.
|
||||||
int base_altitude = PLANE_HOLDING_ALTITUDE;
|
* When the maximum is reached the vehicle should consider descending.
|
||||||
|
* When the minimum is reached the vehicle should consider ascending.
|
||||||
|
*
|
||||||
|
* @param v The vehicle to get the flight levels for.
|
||||||
|
* @param [out] min_level The minimum bounds for flight level.
|
||||||
|
* @param [out] max_level The maximum bounds for flight level.
|
||||||
|
*/
|
||||||
|
void GetAircraftFlightLevelBounds(const Vehicle *v, int *min_level, int *max_level)
|
||||||
|
{
|
||||||
|
int base_altitude = GetTileHeightBelowAircraft(v);
|
||||||
|
if (v->type == VEH_AIRCRAFT && Aircraft::From(v)->subtype == AIR_HELICOPTER) {
|
||||||
|
base_altitude += HELICOPTER_HOLD_MAX_FLYING_ALTITUDE - PLANE_HOLD_MAX_FLYING_ALTITUDE;
|
||||||
|
}
|
||||||
|
|
||||||
/* Make sure eastbound and westbound planes do not "crash" into each
|
/* Make sure eastbound and westbound planes do not "crash" into each
|
||||||
* other by providing them with vertical separation
|
* other by providing them with vertical separation
|
||||||
@@ -693,11 +707,67 @@ int GetAircraftFlyingAltitude(const Aircraft *v)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Make faster planes fly higher so that they can overtake slower ones */
|
/* Make faster planes fly higher so that they can overtake slower ones */
|
||||||
base_altitude += min(20 * (v->vcache.cached_max_speed / 200), 90);
|
base_altitude += min(20 * (v->vcache.cached_max_speed / 200) - 90, 0);
|
||||||
|
|
||||||
return base_altitude;
|
if (min_level != NULL) *min_level = base_altitude + AIRCRAFT_MIN_FLYING_ALTITUDE;
|
||||||
|
if (max_level != NULL) *max_level = base_altitude + AIRCRAFT_MAX_FLYING_ALTITUDE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the maximum 'flight level' for the holding pattern of the aircraft,
|
||||||
|
* in pixels 'z_pos' 0, depending on terrain below..
|
||||||
|
*
|
||||||
|
* @param v The aircraft that may or may not need to decrease its altitude.
|
||||||
|
* @return Maximal aircraft holding altitude, while in normal flight, in pixels.
|
||||||
|
*/
|
||||||
|
int GetAircraftHoldMaxAltitude(const Aircraft *v)
|
||||||
|
{
|
||||||
|
int tile_height = GetTileHeightBelowAircraft(v);
|
||||||
|
|
||||||
|
return tile_height + ((v->subtype == AIR_HELICOPTER) ? HELICOPTER_HOLD_MAX_FLYING_ALTITUDE : PLANE_HOLD_MAX_FLYING_ALTITUDE);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class T>
|
||||||
|
int GetAircraftFlightLevel(T *v, bool takeoff)
|
||||||
|
{
|
||||||
|
/* Aircraft is in flight. We want to enforce it being somewhere
|
||||||
|
* between the minimum and the maximum allowed altitude. */
|
||||||
|
int aircraft_min_altitude;
|
||||||
|
int aircraft_max_altitude;
|
||||||
|
GetAircraftFlightLevelBounds(v, &aircraft_min_altitude, &aircraft_max_altitude);
|
||||||
|
int aircraft_middle_altitude = (aircraft_min_altitude + aircraft_max_altitude) / 2;
|
||||||
|
|
||||||
|
/* If those assumptions would be violated, aircrafts would behave fairly strange. */
|
||||||
|
assert(aircraft_min_altitude < aircraft_middle_altitude);
|
||||||
|
assert(aircraft_middle_altitude < aircraft_max_altitude);
|
||||||
|
|
||||||
|
int z = v->z_pos;
|
||||||
|
if (z < aircraft_min_altitude ||
|
||||||
|
(HasBit(v->flags, VAF_IN_MIN_HEIGHT_CORRECTION) && z < aircraft_middle_altitude)) {
|
||||||
|
/* Ascend. And don't fly into that mountain right ahead.
|
||||||
|
* And avoid our aircraft become a stairclimber, so if we start
|
||||||
|
* correcting altitude, then we stop correction not too early. */
|
||||||
|
SetBit(v->flags, VAF_IN_MIN_HEIGHT_CORRECTION);
|
||||||
|
z += takeoff ? 2 : 1;
|
||||||
|
} else if (!takeoff && (z > aircraft_max_altitude ||
|
||||||
|
(HasBit(v->flags, VAF_IN_MAX_HEIGHT_CORRECTION) && z > aircraft_middle_altitude))) {
|
||||||
|
/* Descend lower. You are an aircraft, not an space ship.
|
||||||
|
* And again, don't stop correcting altitude too early. */
|
||||||
|
SetBit(v->flags, VAF_IN_MAX_HEIGHT_CORRECTION);
|
||||||
|
z--;
|
||||||
|
} else if (HasBit(v->flags, VAF_IN_MIN_HEIGHT_CORRECTION) && z >= aircraft_middle_altitude) {
|
||||||
|
/* Now, we have corrected altitude enough. */
|
||||||
|
ClrBit(v->flags, VAF_IN_MIN_HEIGHT_CORRECTION);
|
||||||
|
} else if (HasBit(v->flags, VAF_IN_MAX_HEIGHT_CORRECTION) && z <= aircraft_middle_altitude) {
|
||||||
|
/* Now, we have corrected altitude enough. */
|
||||||
|
ClrBit(v->flags, VAF_IN_MAX_HEIGHT_CORRECTION);
|
||||||
|
}
|
||||||
|
|
||||||
|
return z;
|
||||||
|
}
|
||||||
|
|
||||||
|
template int GetAircraftFlightLevel(DisasterVehicle *v, bool takeoff);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Find the entry point to an airport depending on direction which
|
* Find the entry point to an airport depending on direction which
|
||||||
* the airport is being approached from. Each airport can have up to
|
* the airport is being approached from. Each airport can have up to
|
||||||
@@ -710,7 +780,7 @@ int GetAircraftFlyingAltitude(const Aircraft *v)
|
|||||||
* @param v The vehicle that is approaching the airport
|
* @param v The vehicle that is approaching the airport
|
||||||
* @param apc The Airport Class being approached.
|
* @param apc The Airport Class being approached.
|
||||||
* @param rotation The rotation of the airport.
|
* @param rotation The rotation of the airport.
|
||||||
* @returns The index of the entry point
|
* @return The index of the entry point
|
||||||
*/
|
*/
|
||||||
static byte AircraftGetEntryPoint(const Aircraft *v, const AirportFTAClass *apc, Direction rotation)
|
static byte AircraftGetEntryPoint(const Aircraft *v, const AirportFTAClass *apc, Direction rotation)
|
||||||
{
|
{
|
||||||
@@ -787,7 +857,7 @@ static bool AircraftController(Aircraft *v)
|
|||||||
UpdateAircraftCache(v);
|
UpdateAircraftCache(v);
|
||||||
AircraftNextAirportPos_and_Order(v);
|
AircraftNextAirportPos_and_Order(v);
|
||||||
/* get aircraft back on running altitude */
|
/* get aircraft back on running altitude */
|
||||||
SetAircraftPosition(v, v->x_pos, v->y_pos, GetAircraftFlyingAltitude(v));
|
SetAircraftPosition(v, v->x_pos, v->y_pos, GetAircraftFlightLevel(v));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -815,7 +885,9 @@ static bool AircraftController(Aircraft *v)
|
|||||||
count = UpdateAircraftSpeed(v);
|
count = UpdateAircraftSpeed(v);
|
||||||
if (count > 0) {
|
if (count > 0) {
|
||||||
v->tile = 0;
|
v->tile = 0;
|
||||||
int z_dest = GetAircraftFlyingAltitude(v);
|
|
||||||
|
int z_dest;
|
||||||
|
GetAircraftFlightLevelBounds(v, &z_dest, NULL);
|
||||||
|
|
||||||
/* Reached altitude? */
|
/* Reached altitude? */
|
||||||
if (v->z_pos >= z_dest) {
|
if (v->z_pos >= z_dest) {
|
||||||
@@ -972,12 +1044,14 @@ static bool AircraftController(Aircraft *v)
|
|||||||
int z = v->z_pos;
|
int z = v->z_pos;
|
||||||
|
|
||||||
if (amd.flag & AMED_TAKEOFF) {
|
if (amd.flag & AMED_TAKEOFF) {
|
||||||
z = min(z + 2, GetAircraftFlyingAltitude(v));
|
z = GetAircraftFlightLevel(v, true);
|
||||||
|
} else if (amd.flag & AMED_HOLD) {
|
||||||
|
/* Let the plane drop from normal flight altitude to holding pattern altitude */
|
||||||
|
if (z > GetAircraftHoldMaxAltitude(v)) z--;
|
||||||
|
} else if ((amd.flag & AMED_SLOWTURN) && (amd.flag & AMED_NOSPDCLAMP)) {
|
||||||
|
z = GetAircraftFlightLevel(v);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Let the plane drop from normal flight altitude to holding pattern altitude */
|
|
||||||
if ((amd.flag & AMED_HOLD) && (z > PLANE_HOLDING_ALTITUDE)) z--;
|
|
||||||
|
|
||||||
if (amd.flag & AMED_LAND) {
|
if (amd.flag & AMED_LAND) {
|
||||||
if (st->airport.tile == INVALID_TILE) {
|
if (st->airport.tile == INVALID_TILE) {
|
||||||
/* Airport has been removed, abort the landing procedure */
|
/* Airport has been removed, abort the landing procedure */
|
||||||
@@ -985,7 +1059,7 @@ static bool AircraftController(Aircraft *v)
|
|||||||
UpdateAircraftCache(v);
|
UpdateAircraftCache(v);
|
||||||
AircraftNextAirportPos_and_Order(v);
|
AircraftNextAirportPos_and_Order(v);
|
||||||
/* get aircraft back on running altitude */
|
/* get aircraft back on running altitude */
|
||||||
SetAircraftPosition(v, gp.x, gp.y, GetAircraftFlyingAltitude(v));
|
SetAircraftPosition(v, gp.x, gp.y, GetAircraftFlightLevel(v));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* $Id: aircraft_gui.cpp 25454 2013-06-24 18:39:19Z rubidium $ */
|
/* $Id: aircraft_gui.cpp 27134 2015-02-01 20:54:24Z frosch $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This file is part of OpenTTD.
|
* This file is part of OpenTTD.
|
||||||
@@ -21,6 +21,8 @@
|
|||||||
|
|
||||||
#include "table/strings.h"
|
#include "table/strings.h"
|
||||||
|
|
||||||
|
#include "safeguards.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Draw the details for the given vehicle at the given position
|
* Draw the details for the given vehicle at the given position
|
||||||
*
|
*
|
||||||
@@ -84,22 +86,26 @@ void DrawAircraftImage(const Vehicle *v, int left, int right, int y, VehicleID s
|
|||||||
SpriteID sprite = v->GetImage(rtl ? DIR_E : DIR_W, image_type);
|
SpriteID sprite = v->GetImage(rtl ? DIR_E : DIR_W, image_type);
|
||||||
const Sprite *real_sprite = GetSprite(sprite, ST_NORMAL);
|
const Sprite *real_sprite = GetSprite(sprite, ST_NORMAL);
|
||||||
|
|
||||||
int width = UnScaleByZoom(real_sprite->width, ZOOM_LVL_GUI);
|
int width = UnScaleGUI(real_sprite->width);
|
||||||
int x_offs = UnScaleByZoom(real_sprite->x_offs, ZOOM_LVL_GUI);
|
int x_offs = UnScaleGUI(real_sprite->x_offs);
|
||||||
int x = rtl ? right - width - x_offs : left - x_offs;
|
int x = rtl ? right - width - x_offs : left - x_offs;
|
||||||
bool helicopter = v->subtype == AIR_HELICOPTER;
|
bool helicopter = v->subtype == AIR_HELICOPTER;
|
||||||
|
|
||||||
|
int y_offs = ScaleGUITrad(10);
|
||||||
|
int heli_offs = 0;
|
||||||
|
|
||||||
PaletteID pal = (v->vehstatus & VS_CRASHED) ? PALETTE_CRASH : GetVehiclePalette(v);
|
PaletteID pal = (v->vehstatus & VS_CRASHED) ? PALETTE_CRASH : GetVehiclePalette(v);
|
||||||
DrawSprite(sprite, pal, x, y + 10);
|
DrawSprite(sprite, pal, x, y + y_offs);
|
||||||
if (helicopter) {
|
if (helicopter) {
|
||||||
const Aircraft *a = Aircraft::From(v);
|
const Aircraft *a = Aircraft::From(v);
|
||||||
SpriteID rotor_sprite = GetCustomRotorSprite(a, true, image_type);
|
SpriteID rotor_sprite = GetCustomRotorSprite(a, true, image_type);
|
||||||
if (rotor_sprite == 0) rotor_sprite = SPR_ROTOR_STOPPED;
|
if (rotor_sprite == 0) rotor_sprite = SPR_ROTOR_STOPPED;
|
||||||
DrawSprite(rotor_sprite, PAL_NONE, x, y + 5);
|
heli_offs = ScaleGUITrad(5);
|
||||||
|
DrawSprite(rotor_sprite, PAL_NONE, x, y + y_offs - heli_offs);
|
||||||
}
|
}
|
||||||
if (v->index == selection) {
|
if (v->index == selection) {
|
||||||
x += x_offs;
|
x += x_offs;
|
||||||
y += UnScaleByZoom(real_sprite->y_offs, ZOOM_LVL_GUI) + 10 - (helicopter ? 5 : 0);
|
y += UnScaleGUI(real_sprite->y_offs) + y_offs - heli_offs;
|
||||||
DrawFrameRect(x - 1, y - 1, x + width + 1, y + UnScaleByZoom(real_sprite->height, ZOOM_LVL_GUI) + (helicopter ? 5 : 0) + 1, COLOUR_WHITE, FR_BORDERONLY);
|
DrawFrameRect(x - 1, y - 1, x + width + 1, y + UnScaleGUI(real_sprite->height) + heli_offs + 1, COLOUR_WHITE, FR_BORDERONLY);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* $Id: airport.cpp 24900 2013-01-08 22:46:42Z planetmaker $ */
|
/* $Id: airport.cpp 26482 2014-04-23 20:13:33Z rubidium $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This file is part of OpenTTD.
|
* This file is part of OpenTTD.
|
||||||
@@ -15,6 +15,8 @@
|
|||||||
#include "table/airport_movement.h"
|
#include "table/airport_movement.h"
|
||||||
#include "table/airporttile_ids.h"
|
#include "table/airporttile_ids.h"
|
||||||
|
|
||||||
|
#include "safeguards.h"
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Define a generic airport.
|
* Define a generic airport.
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* $Id: airport_gui.cpp 26165 2013-12-18 18:23:30Z frosch $ */
|
/* $Id: airport_gui.cpp 27163 2015-02-22 15:26:27Z frosch $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This file is part of OpenTTD.
|
* This file is part of OpenTTD.
|
||||||
@@ -31,6 +31,8 @@
|
|||||||
|
|
||||||
#include "widgets/airport_widget.h"
|
#include "widgets/airport_widget.h"
|
||||||
|
|
||||||
|
#include "safeguards.h"
|
||||||
|
|
||||||
|
|
||||||
static AirportClassID _selected_airport_class; ///< the currently visible airport class
|
static AirportClassID _selected_airport_class; ///< the currently visible airport class
|
||||||
static int _selected_airport_index; ///< the index of the selected airport in the current class or -1
|
static int _selected_airport_index; ///< the index of the selected airport in the current class or -1
|
||||||
@@ -44,7 +46,7 @@ void CcBuildAirport(const CommandCost &result, TileIndex tile, uint32 p1, uint32
|
|||||||
{
|
{
|
||||||
if (result.Failed()) return;
|
if (result.Failed()) return;
|
||||||
|
|
||||||
if (_settings_client.sound.confirm) SndPlayTileFx(SND_1F_SPLAT, tile);
|
if (_settings_client.sound.confirm) SndPlayTileFx(SND_1F_SPLAT_OTHER, tile);
|
||||||
if (!_settings_client.gui.persistent_buildingtools) ResetObjectToPlace();
|
if (!_settings_client.gui.persistent_buildingtools) ResetObjectToPlace();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -80,6 +82,18 @@ struct BuildAirToolbarWindow : Window {
|
|||||||
if (_settings_client.gui.link_terraform_toolbar) DeleteWindowById(WC_SCEN_LAND_GEN, 0, false);
|
if (_settings_client.gui.link_terraform_toolbar) DeleteWindowById(WC_SCEN_LAND_GEN, 0, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Some data on this window has become invalid.
|
||||||
|
* @param data Information about the changed data.
|
||||||
|
* @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details.
|
||||||
|
*/
|
||||||
|
virtual void OnInvalidateData(int data = 0, bool gui_scope = true)
|
||||||
|
{
|
||||||
|
if (!gui_scope) return;
|
||||||
|
|
||||||
|
if (!CanBuildVehicleInfrastructure(VEH_AIRCRAFT)) delete this;
|
||||||
|
}
|
||||||
|
|
||||||
virtual void OnClick(Point pt, int widget, int click_count)
|
virtual void OnClick(Point pt, int widget, int click_count)
|
||||||
{
|
{
|
||||||
switch (widget) {
|
switch (widget) {
|
||||||
@@ -226,8 +240,27 @@ public:
|
|||||||
this->SetWidgetLoweredState(WID_AP_BTN_DOHILIGHT, _settings_client.gui.station_show_coverage);
|
this->SetWidgetLoweredState(WID_AP_BTN_DOHILIGHT, _settings_client.gui.station_show_coverage);
|
||||||
this->OnInvalidateData();
|
this->OnInvalidateData();
|
||||||
|
|
||||||
this->vscroll->SetCount(AirportClass::Get(_selected_airport_class)->GetSpecCount());
|
/* Ensure airport class is valid (changing NewGRFs). */
|
||||||
this->SelectFirstAvailableAirport(true);
|
_selected_airport_class = Clamp(_selected_airport_class, APC_BEGIN, (AirportClassID)(AirportClass::GetClassCount() - 1));
|
||||||
|
const AirportClass *ac = AirportClass::Get(_selected_airport_class);
|
||||||
|
this->vscroll->SetCount(ac->GetSpecCount());
|
||||||
|
|
||||||
|
/* Ensure the airport index is valid for this class (changing NewGRFs). */
|
||||||
|
_selected_airport_index = Clamp(_selected_airport_index, -1, ac->GetSpecCount() - 1);
|
||||||
|
|
||||||
|
/* Only when no valid airport was selected, we want to select the first airport. */
|
||||||
|
bool selectFirstAirport = true;
|
||||||
|
if (_selected_airport_index != -1) {
|
||||||
|
const AirportSpec *as = ac->GetSpec(_selected_airport_index);
|
||||||
|
if (as->IsAvailable()) {
|
||||||
|
/* Ensure the airport layout is valid. */
|
||||||
|
_selected_airport_layout = Clamp(_selected_airport_layout, 0, as->num_table - 1);
|
||||||
|
selectFirstAirport = false;
|
||||||
|
this->UpdateSelectSize();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (selectFirstAirport) this->SelectFirstAvailableAirport(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual ~BuildAirportWindow()
|
virtual ~BuildAirportWindow()
|
||||||
@@ -392,7 +425,7 @@ public:
|
|||||||
* Never make the window smaller to avoid oscillating if the size change affects the acceptance.
|
* Never make the window smaller to avoid oscillating if the size change affects the acceptance.
|
||||||
* (This is the case, if making the window bigger moves the mouse into the window.) */
|
* (This is the case, if making the window bigger moves the mouse into the window.) */
|
||||||
if (top > bottom) {
|
if (top > bottom) {
|
||||||
ResizeWindow(this, 0, top - bottom);
|
ResizeWindow(this, 0, top - bottom, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* $Id: animated_tile.cpp 22017 2011-02-07 22:29:47Z rubidium $ */
|
/* $Id: animated_tile.cpp 26482 2014-04-23 20:13:33Z rubidium $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This file is part of OpenTTD.
|
* This file is part of OpenTTD.
|
||||||
@@ -14,6 +14,8 @@
|
|||||||
#include "tile_cmd.h"
|
#include "tile_cmd.h"
|
||||||
#include "viewport_func.h"
|
#include "viewport_func.h"
|
||||||
|
|
||||||
|
#include "safeguards.h"
|
||||||
|
|
||||||
/** The table/list with animated tiles. */
|
/** The table/list with animated tiles. */
|
||||||
TileIndex *_animated_tile_list = NULL;
|
TileIndex *_animated_tile_list = NULL;
|
||||||
/** The number of animated tiles in the current state. */
|
/** The number of animated tiles in the current state. */
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* $Id: articulated_vehicles.cpp 25259 2013-05-19 14:22:04Z rubidium $ */
|
/* $Id: articulated_vehicles.cpp 26863 2014-09-20 15:31:26Z rubidium $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This file is part of OpenTTD.
|
* This file is part of OpenTTD.
|
||||||
@@ -19,6 +19,8 @@
|
|||||||
|
|
||||||
#include "table/strings.h"
|
#include "table/strings.h"
|
||||||
|
|
||||||
|
#include "safeguards.h"
|
||||||
|
|
||||||
static const uint MAX_ARTICULATED_PARTS = 100; ///< Maximum of articulated parts per vehicle, i.e. when to abort calling the articulated vehicle callback.
|
static const uint MAX_ARTICULATED_PARTS = 100; ///< Maximum of articulated parts per vehicle, i.e. when to abort calling the articulated vehicle callback.
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -160,6 +162,41 @@ CargoArray GetCapacityOfArticulatedParts(EngineID engine)
|
|||||||
return capacity;
|
return capacity;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the default cargoes and refits of an articulated vehicle.
|
||||||
|
* The refits are linked to a cargo rather than an articulated part to prevent a long list of parts.
|
||||||
|
* @param engine Model to investigate.
|
||||||
|
* @param[out] cargoes Total amount of units that can be transported, summed by cargo.
|
||||||
|
* @param[out] refits Whether a (possibly partial) refit for each cargo is possible.
|
||||||
|
*/
|
||||||
|
void GetArticulatedVehicleCargoesAndRefits(EngineID engine, CargoArray *cargoes, uint32 *refits)
|
||||||
|
{
|
||||||
|
cargoes->Clear();
|
||||||
|
*refits = 0;
|
||||||
|
|
||||||
|
const Engine *e = Engine::Get(engine);
|
||||||
|
|
||||||
|
CargoID cargo_type;
|
||||||
|
uint16 cargo_capacity = GetVehicleDefaultCapacity(engine, &cargo_type);
|
||||||
|
if (cargo_type < NUM_CARGO && cargo_capacity > 0) {
|
||||||
|
(*cargoes)[cargo_type] += cargo_capacity;
|
||||||
|
if (IsEngineRefittable(engine)) SetBit(*refits, cargo_type);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!e->IsGroundVehicle() || !HasBit(e->info.callback_mask, CBM_VEHICLE_ARTIC_ENGINE)) return;
|
||||||
|
|
||||||
|
for (uint i = 1; i < MAX_ARTICULATED_PARTS; i++) {
|
||||||
|
EngineID artic_engine = GetNextArticulatedPart(i, engine);
|
||||||
|
if (artic_engine == INVALID_ENGINE) break;
|
||||||
|
|
||||||
|
cargo_capacity = GetVehicleDefaultCapacity(artic_engine, &cargo_type);
|
||||||
|
if (cargo_type < NUM_CARGO && cargo_capacity > 0) {
|
||||||
|
(*cargoes)[cargo_type] += cargo_capacity;
|
||||||
|
if (IsEngineRefittable(artic_engine)) SetBit(*refits, cargo_type);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks whether any of the articulated parts is refittable
|
* Checks whether any of the articulated parts is refittable
|
||||||
* @param engine the first part
|
* @param engine the first part
|
||||||
@@ -408,6 +445,6 @@ void AddArticulatedParts(Vehicle *first)
|
|||||||
|
|
||||||
if (flip_image) v->spritenum++;
|
if (flip_image) v->spritenum++;
|
||||||
|
|
||||||
VehicleUpdatePosition(v);
|
v->UpdatePosition();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user