Mercurial > hg > openttd
changeset 644:ade31604520f draft
(svn r1077) Implements scripts/autoexec.scr to get executed on game starting (sign_de)
- %! allows to merge alias parameters
- \% allows to use % in alias strings
- "alias" command now overwrites the old alias list entry
author | dominik <dominik@openttd.org> |
---|---|
date | Mon, 13 Dec 2004 22:13:02 +0000 |
parents | b9c5a3faeb2e |
children | 499c24c59bc4 |
files | console.c console.h console_cmds.c scripts/readme.txt ttd.c |
diffstat | 5 files changed, 43 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/console.c +++ b/console.c @@ -602,6 +602,7 @@ if (cmdline[i] == '%') { i++; if (cmdline[i] == '+') { + // all params seperated: "[param 1]" "[param 2]" t=1; while ((tokens[t]!=NULL) && (t<20) && ((tokentypes[t] == ICONSOLE_VAR_STRING) || (tokentypes[t] == ICONSOLE_VAR_UNKNOWN))) { @@ -617,10 +618,30 @@ x += l2+3; t++; } + } else if (cmdline[i] == '!') { + // merge the params to one: "[param 1] [param 2] [param 3...]" + t=1; + *linestream = '"'; + linestream++; + while ((tokens[t]!=NULL) && (t<20) && + ((tokentypes[t] == ICONSOLE_VAR_STRING) || (tokentypes[t] == ICONSOLE_VAR_UNKNOWN))) { + int l2 = strlen(tokens[t]); + memcpy(linestream,tokens[t],l2); + linestream += l2; + *linestream = ' '; + linestream++; + x += l2+1; + t++; + } + *linestream = '"'; + linestream++; + x += 2; } else { + // one specific parameter: %A = [param 1] %B = [param 2] ... int l2; t = ((byte)cmdline[i]) - 64; - if ((t<20) && (tokens[t]!=NULL)) { + if ((t<20) && (tokens[t]!=NULL) && + ((tokentypes[t] == ICONSOLE_VAR_STRING) || (tokentypes[t] == ICONSOLE_VAR_UNKNOWN))) { l2 = strlen(tokens[t]); *linestream = '"'; linestream++; @@ -632,6 +653,7 @@ } } } else if (cmdline[i] == '\\') { + // \\ = \ \' = ' \% = % i++; if (cmdline[i] == '\\') { *linestream = '\\'; @@ -639,11 +661,16 @@ } else if (cmdline[i] == '\'') { *linestream = '\''; linestream++; + } else if (cmdline[i] == '%') { + *linestream = '%'; + linestream++; } } else if (cmdline[i] == '\'') { + // ' = " *linestream = '"'; linestream++; } else if (cmdline[i] == ';') { + // ; = start a new line c++; *linestream = '\0'; linestream += 1024 - (x % 1024);
--- a/console.h +++ b/console.h @@ -85,6 +85,8 @@ void* _next; } _iconsole_alias; +_iconsole_alias* IConsoleAliasGet(const char* name); + // ** console parser ** // _iconsole_cmd* _iconsole_cmds; // list of registred commands
--- a/console_cmds.c +++ b/console_cmds.c @@ -367,8 +367,17 @@ DEF_CONSOLE_CMD(ConAlias) { + _iconsole_alias* alias; + if (argc < 3) return NULL; - IConsoleAliasRegister(argv[1],argv[2]); + + alias = IConsoleAliasGet(argv[1]); + if (alias == NULL) { + IConsoleAliasRegister(argv[1],argv[2]); + } else { + free(alias->cmdline); + alias->cmdline = strdup(argv[2]); + } return NULL; }
--- a/scripts/readme.txt +++ b/scripts/readme.txt @@ -8,6 +8,7 @@ - 'on_dedicated.scr' is additionally executed when you start a dedicated server - 'pre_server.scr' is executed before the server is started - 'pre_dedicated.scr' is additionally executed when you start a dedicated server + - 'autoexec.scr' is executed on gamestart [use this for custom aliases per ex.] For examples how a script can look, check the .example examples.