diff --git a/configure.sh b/configure.sh index 4bbbbc1..c12d027 100755 --- a/configure.sh +++ b/configure.sh @@ -34,6 +34,16 @@ else gtk_libs="pkg-config --libs gtk+-2.0" fi +echo -n "Checking libsoup..." +if ! pkg-config --cflags libsoup-2.4 >/dev/null 2>&1; then + echo "no downloading games" + soup_cflags= + soup_libs= +else + soup_cflags="pkg-config --cflags libsoup-2.4" + soup_libs="pkg-config --libs libsoup-2.4" +fi + echo -n "Checking pkg-config --cflags lua[5.1]..." if ! pkg-config --cflags lua5.1 >/dev/null 2>&1; then @@ -153,6 +163,10 @@ if [[ ! -z "$gtk_cflags" ]]; then echo "EXTRA_CFLAGS+=\$(shell $gtk_cflags)" >> config.make echo "EXTRA_LDFLAGS+=\$(shell $gtk_libs)" >> config.make fi +if [[ ! -z "$soup_cflags" ]]; then + echo "EXTRA_CFLAGS+=-D_USE_HTTP \$(shell $soup_cflags)" >> config.make + echo "EXTRA_LDFLAGS+=\$(shell $soup_libs)" >> config.make +fi if [[ -z "$zlib_cflags" ]]; then echo "SUBDIRS=src/zlib" >> config.make echo "ZLIB_CFLAGS=-I../zlib" >> config.make diff --git a/games/steed-preface b/games/steed-preface index b016761..6a66be4 160000 --- a/games/steed-preface +++ b/games/steed-preface @@ -1 +1 @@ -Subproject commit b01676127e47ac7a4a6d74e0a59fba65766f2456 +Subproject commit 6a66be47220b8a6d7c61878ed654d78e18e9f4ba diff --git a/src/instead/COPYING b/src/instead/COPYING deleted file mode 100644 index d60c31a..0000000 --- a/src/instead/COPYING +++ /dev/null @@ -1,340 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program 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; either version 2 of the License, or - (at your option) any later version. - - This program 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 this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/src/instead/Makefile b/src/instead/Makefile deleted file mode 100644 index 7e0790d..0000000 --- a/src/instead/Makefile +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/make -f -include ../../Rules.make -include ../../config.make - -all: instead -instead: instead.c rline.c - $(CC) $(CFLAGS) -DSTEAD_PATH=\"${STEADPATH}/\" instead.c $(LUA_CFLAGS) rline.c $(LUA_LFLAGS) -lncurses -lreadline -o instead -clean: - $(RM) -rf *.o instead -install: - $(INSTALLD) $(BIN) - $(INSTALLB) instead $(BIN)/instead - -uninstall: - $(RM) $(BIN)/instead - diff --git a/src/instead/instead.c b/src/instead/instead.c deleted file mode 100644 index b93f7b4..0000000 --- a/src/instead/instead.c +++ /dev/null @@ -1,93 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -/* the Lua interpreter */ - -lua_State* L; - -extern char *fromgame(char *s); - -char *getstring(char *cmd) -{ - char *s; - int N; - if (luaL_dostring(L, cmd)) { - fprintf(stderr,"Error: %s\n", lua_tostring(L, -1)); - exit(1); - } - N = lua_gettop(L); - if (N <= 0) - return NULL; - s = (char*)lua_tostring(L, -N); - if (s) - s = fromgame(s); - lua_pop(L, N); - return s; -} - -int luacall(char *cmd) -{ - int rc, N; - if (luaL_dostring(L, cmd)) { - fprintf(stderr,"Error: %s\n", lua_tostring(L, -1)); - exit(1); - } - N = lua_gettop(L); - if (N <= 0) - return 0; - rc = lua_tonumber(L, -1); - lua_pop(L, N); - return rc; -} - -extern int loop(void); -extern int width; -extern int height; -int main (int argc, char *argv[]) -{ - int opt; - setlocale(LC_ALL,""); - /* initialize Lua */ - - while ((opt = getopt(argc, argv, "w:h:")) != -1) { - switch (opt) { - case 'w': - width = atoi(optarg); - break; - case 'h': - height = atoi(optarg); - break; - } - } - if (argc < 2 || argc - optind < 1) { - fprintf(stderr,"Usage: %s [-w] [-h]\n", argv[0]); - return 1; - } - if (width == 0 || height == 0) { - fprintf(stderr,"Wrong geometry.\n"); - return 1; - } - - L = lua_open(); - luaL_openlibs(L); - if (luaL_loadfile(L,STEAD_PATH"stead.lua") || lua_pcall(L, 0, 0, 0)) { - fprintf(stderr,"Error:%s\n", lua_tostring(L, -1)); - return 1; - } - - if (luaL_loadfile(L,argv[optind]) || lua_pcall(L, 0, 0, 0)) { - fprintf(stderr,"Error:%s\n", lua_tostring(L, -1)); - return 1; - } - loop(); - /* cleanup Lua */ - lua_close(L); - return 0; -} - diff --git a/src/instead/rline.c b/src/instead/rline.c deleted file mode 100644 index a1e81b7..0000000 --- a/src/instead/rline.c +++ /dev/null @@ -1,526 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#ifdef _HAVE_ICONV -#include -#include -#endif - -extern char *getstring(char *cmd); - -char *stripwhite(char *string) -{ - char *s, *t; - - for (s = string; isspace(*s); s++); - - if (*s == 0) - return (s); - - t = s + strlen(s) - 1; - while (t > s && isspace(*t)) - t--; - *++t = '\0'; - - return s; -} - -#define MAX_WORDS 255 -struct completion; -struct completion { - char *list; - char *words[MAX_WORDS + 1]; - int ids[MAX_WORDS + 1]; - int num; - int period; - int id; - int hide; - struct completion *next; -}; - -struct completion obj_comp = { .list = NULL, .id = 1,}; -struct completion way_comp = { .list = NULL, .id = 1,}; -struct completion inv_comp = { .list = NULL, .period = 1, .id = 1,}; -struct completion cmd_comp = { .list = NULL, .hide = 1,}; - -int comp_num(struct completion *c) { - int num = 0; - for (; c && !c->hide; c = c->next) { - num += c->num; - } - return num; -} - -char *comp_generator(const char *text, int state, struct completion *co) -{ - struct completion *c = co; - static int list_index; - int len; - char *name; - int i = 0, id; - int index = 0; - if (!state) { - list_index = 0; - } - len = strlen(text); - for (; c && (index != list_index);) { - for (i = 0; (index != list_index) && c->words[i]; i ++) - index ++; - if (index != list_index) - c = c->next; - } - for (;c; c = c->next) { - if (c->hide && !len) - continue; - id = (c->id)?atoi(text):0; - if (id) { - if (state) - continue; - } - for (; (name = c->words[i]); i ++) { - name = c->words[i]; - list_index ++; - if (id == c->ids[i] || strncmp(name, text, len) == 0) { - int expand = 0; - char *s = malloc(strlen(name) + 16); - if (!s) - return NULL; - *s = 0; - if ( len == 0 && !id) { - if (comp_num(co) >1 && c->id) { - expand = 1; - sprintf(s, "%02d:", c->ids[i]); - } - } - strcat(s, name); - if (c->period) { - if (expand) - strcat(s, "(*)"); - else if (c->period == 1) - strcat(s, ","); - } else - strcat(s, " "); - return s; - } - } - i = 0; - } - return NULL; -} - -void getcompletion(char *list, struct completion *c) -{ - int i; - char *p; - char *s = list; - c->num = 0; - if (c->list) - free(c->list); - c->list = list; - for (i = 0; list && i < MAX_WORDS && *s; i++) { - while (isspace(*s)) - s ++; - if (!*s) - break; - c->words[i] = s; - c->num ++; - s += strcspn(s, ",("); - c->ids[i] = -1; - if (*s == '(') { - p = s; - s ++; - c->ids[i] = atoi(s); - s += strcspn(s, ",)"); - if (*s == ')') - s ++; - *p = 0; - } - if (*s == ',') { - *s = 0; - s ++; - } - } - c->words[i] = NULL; - return; -} - -char *obj_generator(const char *text, int state) -{ - obj_comp.next = NULL; - return comp_generator(text, state, &obj_comp); -} - -char *way_generator(const char *text, int state) -{ - return comp_generator(text, state, &way_comp); -} - -char *inv_generator(const char *text, int state) -{ - inv_comp.next = NULL; - inv_comp.period = 1; - return comp_generator(text, state, &inv_comp); -} - -char *objcmd_generator(const char *text, int state) -{ - obj_comp.next = &cmd_comp; - return comp_generator(text, state, &obj_comp); -} - -char *objinv_generator(const char *text, int state) -{ - obj_comp.next = &inv_comp; - inv_comp.period = -1; - return comp_generator(text, state, &obj_comp); -} - - -char *search_word(char *text, char **words, int n, int len) -{ - int i; - char *t = strdup(text); - if (!t) - return NULL; - t[len] = 0; - while (isspace(*text)) - text ++; - for (i = 0; i < n; i++) { - if (!strncmp(text, words[i], strlen(words[i]))) { - free(t); - return words[i]; - } - } - free(t); - return NULL; -} - -char **tquest_completion(char *text, int start, int end) -{ - char **matches; - rl_attempted_completion_over = 1; - matches = (char **) NULL; - /* If this word is at the start of the line, then it is a command - to complete. Otherwise it is the name of a file in the current - directory. */ - //str = strdup(rl_line_buffer); - if (start == 0) - matches = rl_completion_matches(text, objcmd_generator); - else { - char *n = search_word(rl_line_buffer, cmd_comp.words, cmd_comp.num, rl_point); - if (!n) - return (matches); - else if (!strcmp(n, "go")) - matches = rl_completion_matches(text, way_generator); - else if (!strcmp(n, "use")) { - if (!strstr(rl_line_buffer,",")) { - matches = rl_completion_matches(text, inv_generator); - } else { - matches = rl_completion_matches(text, objinv_generator); - } - } else if (!strcmp(n, "act")) { - matches = rl_completion_matches(text, obj_generator); - } else if (!strcmp(n, "load") || !strcmp(n, "save")) { - rl_attempted_completion_over = 0; - } - } - return (matches); -} - -/* Tell the GNU Readline library how to complete. We want to try to complete - on command names if this is the first word in the line, or on filenames - if not. */ -#ifdef _HAVE_ICONV -static char curcp[64]; -static char *fromcp; -#endif -void initialize_readline(void) -{ - /* Allow conditional parsing of the ~/.inputrc file. */ - rl_readline_name = "instead"; - rl_completion_append_character=0; - rl_basic_word_break_characters = " \t,"; - rl_parse_and_bind(strdup("set show-all-if-ambiguous on")); - rl_parse_and_bind(strdup("Control-u: 'use '")); - rl_parse_and_bind(strdup("Control-a: 'act '")); - rl_parse_and_bind(strdup("Control-g: 'go '")); - /* Tell the completer that we want a crack first. */ - rl_attempted_completion_function = (CPPFunction *) tquest_completion; -#ifdef _HAVE_ICONV - strncpy(curcp, nl_langinfo(CODESET), sizeof(curcp)); - fromcp = getstring("return game.codepage;"); -#endif -} - -wchar_t *string_towc(const char *str) -{ - wchar_t *pwstr=NULL; - size_t size; - if (!str) - return NULL; - pwstr = malloc((1 + strlen(str)) * sizeof(wchar_t)); - size = mbstowcs(pwstr, str, strlen(str)); - if (size == (size_t)-1) { - free(pwstr); - return NULL; - } - pwstr[size] = 0; - return pwstr; -} - -char *string_fromwc(const wchar_t *str) -{ - char *pstr=NULL; - size_t mbs_size; - if (!str) - return NULL; - mbs_size = wcstombs(NULL, str, 0); - if (mbs_size == (size_t)-1) - return NULL; - pstr = malloc(mbs_size + 1); - pstr[ wcstombs(pstr, str, mbs_size) ] = 0; - return pstr; -} -#ifdef _HAVE_ICONV -#define CHAR_MAX_LEN 4 -static char *decode(iconv_t hiconv, const char *s) -{ - size_t s_size, chs_size, outsz, insz; - char *inbuf, *outbuf, *chs_buf; - if (!s || hiconv == (iconv_t)(-1)) - return NULL; - s_size = strlen(s); - chs_size = s_size * CHAR_MAX_LEN; - if ((chs_buf = malloc(chs_size + CHAR_MAX_LEN))==NULL) - goto exitf; - outsz = chs_size; - outbuf = chs_buf; - insz = s_size; - inbuf = (char*)s; - while (insz) { - if (iconv(hiconv, &inbuf, &insz, &outbuf, &outsz) - == (size_t)(-1)) - goto exitf; - } - *outbuf++ = 0; - return chs_buf; -exitf: - if(chs_buf) - free(chs_buf); - return NULL; -} - -char *fromgame(const char *s) -{ - iconv_t han; - char *str; - if (!s) - return NULL; - if (!fromcp) - goto out0; - han = iconv_open(curcp, fromcp); - if (han == (iconv_t)-1) - goto out0; - if (!(str = decode(han, s))) - goto out1; - iconv_close(han); - return str; -out1: - iconv_close(han); -out0: - return strdup(s); -} - -char *togame(const char *s) -{ - iconv_t han; - char *str; - if (!s) - return NULL; - if (!fromcp) - goto out0; - han = iconv_open(fromcp, curcp); - if (han == (iconv_t)-1) - goto out0; - if (!(str = decode(han, s))) - goto out1; - iconv_close(han); - return str; -out1: - iconv_close(han); -out0: - return strdup(s); -} -#else -char *fromgame(const char *s) -{ - if (!s) - return NULL; - return strdup(s); -} -char *togame(const char *s) -{ - if (!s) - return NULL; - return strdup(s); -} -#endif - -int width = 80; -int height = 25; -#define STDIN_FILENO 0 - -int getch(void) { - struct termios oldt, - newt; - int ch; - tcgetattr( STDIN_FILENO, &oldt ); - newt = oldt; - newt.c_lflag &= ~( ICANON | ECHO ); - tcsetattr( STDIN_FILENO, TCSANOW, &newt ); - ch = getchar(); - tcsetattr( STDIN_FILENO, TCSANOW, &oldt ); - return ch; -} - -void out(char *str) -{ - int lines = 0; - int i; - - wchar_t *ws, *wp, saved, *ows; - char *ms; - size_t sz = width, oldsz; - if (!str) - return; - ows = ws = string_towc(str); - if (!ws) - return; - wp = ws; - fprintf(stdout,"\n"); - for (i = 0; i < width/2 - 6; i++) - fprintf(stdout, " "); - fprintf(stdout,"* * *\n\n"); - - while (*ws && *wp) { - wp += wcscspn(wp, L" ,\t\n"); - if (*wp == ',') - wp ++; - saved = *wp; - *wp = 0; - oldsz = sz; - sz = wcslen(ws); - if (sz > width || saved == '\n') { - *wp = saved; - if (sz <= width) - oldsz = sz; - saved = ws[oldsz]; - ws[oldsz] = 0; - lines ++; - if (lines >= (height)) { - printf("-- more --"); - getch(); - printf("\r \r"); - lines = 0; - } - ms = string_fromwc(ws); - if (ms) - printf("%s\n", ms); - free(ms); - ws[oldsz] = saved; - if (saved == L' ' || saved == L'\t' || saved == L'\n') - oldsz ++; - ws += oldsz; - wp = ws; - sz = width; - continue; - } - *wp = saved; - if (saved) - wp ++; - } - if (wp != ws) { - lines ++; - if (lines > height) { - printf("-- more --"); - getch(); - printf("\r"); - lines = 0; - } - ms = string_fromwc(ws); - if (ms) - printf("%s\n", ms); - free(ms); - } - free(ows); - free(str); -} - -void execute_line(char *s) -{ - char buf[1024]; - char *p = s; - while (*p) { - if (*p == '\\' || *p == '\'' || *p == '\"' || *p == '[' || *p == ']') - return; - p ++; - } - s = togame(s); - snprintf(buf, sizeof(buf), "return iface:cmd('%s')", s); - p = getstring(buf); - free(s); - out(p); -} -extern int luacall(char *cmd); - -void loop(void) -{ - char *line, *s; - - initialize_readline(); /* Bind our completer. */ - getcompletion(strdup("act,look,go,back,use,load,save,quit,help,obj,inv,way,ls"), &cmd_comp); - out(getstring("return (par('',fmt(game:ini()),iface:cmd('look')));")); -// out(getstring("return fmt(me():look());")); - /* Loop reading and executing lines until the user quits. */ - while (1) { - luacall("me():tag();"); - getcompletion(getstring("return here():str();"), &obj_comp); - getcompletion(getstring("return me():str();"), &inv_comp); - getcompletion(getstring("return here().way:str();"), &way_comp); - line = readline("-- > "); - - if (!line) - break; - - /* Remove leading and trailing whitespace from the line. - Then, if there is anything left, add it to the history list - and execute it. */ - s = stripwhite(line); - - if (*s) { - add_history(s); - } - if (!strcmp(s, "help")) { - printf("Usage: act, look, use, go, back, load, save, quit.\n"); - } else if (!strcmp(s, "quit")) - break; - else { - execute_line(s); - } - free(line); - } - exit(0); -} - - diff --git a/src/instead/tutorial/main.lua b/src/instead/tutorial/main.lua deleted file mode 100644 index 63870ce..0000000 --- a/src/instead/tutorial/main.lua +++ /dev/null @@ -1,186 +0,0 @@ -game.codepage="UTF-8" -game.err = "Ошибка!" -game.dsc = [[Команды:^ - look(или просто ввод), act <на что> (или просто на что), use <что> [на что], go <куда>,^ - back, inv, way, obj, quit, save , load . Работает автодополнение по табуляции.^^]]; - -main = room { - nam = 'Обучение', - act = function() - return goto('r1'); - end, - dsc = [[Добро пожаловать в режим обучения instead (readline версия). -Ввод команд в игре осуществляется с клавиатуры. Каждая сцена игры представляет собой -описание статической и динамической части. Для просмотра сцены вы можете набрать look -и нажать ввод или просто нажать ввод. При наборе команд работает режим автодополнения по табуляции, -например, вы можете набрать l и нажать tab. ^^ - -Данный текст также является сценой, так что вы можете попробовать команду look прямо сейчас. - -Динамическая часть сцены состоит из объектов, персонажей и т.д. С динамической частью -игрок может взаимодействовать с помощью команды act <объект>. При этом, так как это наиболее -часто используемая команда, слово act можно пропускать. В данной сцене единственным объектом -является объект "Дальше" -- который вы видите внизу текста. Итак, для продолжения обучения вы можете: -нажать табуляцию (при этом выберется единственный объект сцены) или набрать act табуляция -- -и нажать ввод. -]], - obj = { - vobj(1, 'Дальше', '{Дальше}'), - }, -}; -apple = obj { - nam = 'яблоко', - dsc = 'На полу лежит {яблоко}.', - tak = 'Вы взяли яблоко.', - inv = function(s) - s._seen = true; - if s._knife then - inv():del('apple'); - return 'Яблоко почищено! Вы его съели.'; - end - return 'Выглядит аппетитно!'; - end, - used = function(s, w) - if w == 'knife' and not s._knife and here() == r4 then - s._knife = true; - return 'Вы чистите яблоко.'; - end - end, -}; -knife = obj { - nam = 'нож', - dsc = 'На полу лежит {нож}.', - tak = 'Вы взяли нож.', - inv = function(s) - s._seen = true; - return 'Острый нож.'; - end, -}; - -r1 = room { - enter = function() - lifeon('r1'); - end, - exit = function() - lifeoff('r1'); - end, - life = function() - if have('apple') and have('knife') then - return goto('r2'); - end - end, - nam = 'урок 1', - dsc = [[Продолжим урок. Сейчас вы находитесь в комнате. Возьмите оба предмета, которые вы видите в этой комнате. -Напомним, что для этого вы можете нажать таб и выбрать предмет по первой букве или цифре, или начать с команды act.]], - obj = { 'apple', 'knife' }, -}; - -r2 = room { - nam = 'урок 2', - enter = function() - lifeon('r2'); - end, - exit = function() - lifeoff('r2'); - end, - life = function() - if apple._seen and knife._seen then - return goto('r3'); - end - end, - dsc = [[Отлично!! Теперь у вас появились предметы, которые вы можете использовать или изучать. -Для этого используется команда use. Не забывайте про автодополнение по tab. Вы можете смотреть свой инвентарь -с помощью команды inv или просто use и табуляция. Итак, посмотрите на ножик. Начните с команды use, потом нажмите табуляцию -и выберете среди предметов нож. Затем, повторите эту операцию с яблоком.]], -}; - -tabl = obj { - nam = 'стол', - dsc = 'На этом уроке вы видите деревянный {стол}.', - act = function(s) - if s._knife then - s._seen = true; - return 'На столе стоит ваш автограф.'; - end - return 'Обычный стол, из дуба.'; - end, - used = function(s, w) - if w == 'knife' and not s._knife then - s._knife = true; - return 'Вы вырезаете что-то ножиком на столе.'; - end - end, - obj = { 'vasa' }, -}; - -vasa = obj { - nam = 'ваза', - dsc = 'На столе стоит {ваза}.'; - act = 'Ваза как ваза.'; -} - -r3 = room { - nam = 'урок 3', - enter = function() - lifeon('r3'); - end, - exit = function() - lifeoff('r3'); - end, - life = function() - if tabl._seen then - return goto('r4'); - end - end, - dsc = [[Хорошо! Как вы заметили, возле предметов инвентаря стоит символ (*). Вы можете действовать -предметами инвентаря на другие предметы сцены или инвентаря. Попробуйте использовать нож на стол. -Для этого наберите use, нажмите табуляцию и выберите нож, затем опять нажмите табуляцию и выберите стол. Затем -посмотрите на стол командой act табуляция стол или просто нажав табуляцию и выбрав стол.]], - obj = { 'tabl' }, -}; - -r4 = room { - nam = 'урок 4', - enter = function() - apple._knife = false; - lifeon('r4'); - end, - exit = function() - lifeoff('r4'); - end, - life = function() - if not have('apple') then - return goto('r5'); - end - end, - dsc = [[Ладно, а теперь -- почистите яблоко. Для этого используйте команду use. Затем съешьте яблоко.]], -}; - -r5 = room { - nam = 'урок 5', - dsc = [[Хорошо. Изучаем команду go -- идти. Наберите go и нажмите табуляцию. Идите на урок 6.]], - exit = function(s, t) - if t ~= 'r6' then - return 'Я просил идти на урок 6...', false; - end - end, - way = { 'r1', 'r2', 'r3', 'r4', 'r6'}, -}; - -r6 = room { - nam = 'урок 6', - dsc = [[Вы можете посмотреть все пути с помощью команды way или go табуляция. Идите на последний урок.]], - exit = function(s, t) - if t ~= 'theend' then - return 'Я просил идти на последний урок...', false; - end - end, - way = { 'r1', 'r2', 'r3', 'r4', 'r6', 'theend'}, -}; - -theend = room { - nam = 'последний урок', - dsc = [[Вы можете сохранять игру: save имяфайла и считывать игру: load имяфайла. Для выхода наберите quit -Вы можете нажимать control-u для use, control-a для act, control-g для go. Удачи!!!]], -}; - diff --git a/src/sdl-instead/main.c b/src/sdl-instead/main.c index 2f4b6b8..a492229 100644 --- a/src/sdl-instead/main.c +++ b/src/sdl-instead/main.c @@ -10,6 +10,10 @@ #include #endif +#ifdef _USE_HTTP +#include +#endif + #ifdef ANDROID #include "android.h" #endif @@ -46,6 +50,18 @@ static int setup_zip(const char *file, char *p) { if (!p) return -1; +#ifdef _USE_HTTP + SoupSession * soup_session = soup_session_sync_new (); + SoupMessage * msg; + int fd; + if (soup_uri_new (file)){ + msg = soup_message_new ("GET", file); + if (!SOUP_STATUS_IS_SUCCESSFUL (msg->status_code)) return -2; + sprintf(file,"%s/temp_download.zip",p); + fd = open (file, O_WRONLY | O_CREAT | O_TRUNC, 0644); + write (fd, msg->response_body, msg->response_body->length); + } +#endif fprintf(stderr,"Trying to install: %s\n", file); if (unpack(file, p)) { if (zip_game_dirname[0]) {