Changeset 789 for 1.8.3/branches/autoconf
- Timestamp:
- 04/26/07 16:27:25 (2 years ago)
- Files:
-
- 1.8.3/branches/autoconf/CHANGES.182 (modified) (2 diffs)
- 1.8.3/branches/autoconf/CHANGES.183 (modified) (3 diffs)
- 1.8.3/branches/autoconf/README (modified) (4 diffs)
- 1.8.3/branches/autoconf/game/txt/hlp/penncmd.hlp (modified) (2 diffs)
- 1.8.3/branches/autoconf/game/txt/hlp/pennfunc.hlp (modified) (8 diffs)
- 1.8.3/branches/autoconf/hdrs/log.h (modified) (1 diff)
- 1.8.3/branches/autoconf/hdrs/parse.h (modified) (4 diffs)
- 1.8.3/branches/autoconf/src/bsd.c (modified) (2 diffs)
- 1.8.3/branches/autoconf/src/command.c (modified) (1 diff)
- 1.8.3/branches/autoconf/src/conf.c (modified) (1 diff)
- 1.8.3/branches/autoconf/src/function.c (modified) (2 diffs)
- 1.8.3/branches/autoconf/src/fundb.c (modified) (1 diff)
- 1.8.3/branches/autoconf/src/funstr.c (modified) (18 diffs)
- 1.8.3/branches/autoconf/src/game.c (modified) (1 diff)
- 1.8.3/branches/autoconf/src/log.c (modified) (2 diffs)
- 1.8.3/branches/autoconf/src/parse.c (modified) (1 diff)
- 1.8.3/branches/autoconf/test/PennMUSH.pm (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
1.8.3/branches/autoconf/CHANGES.182
r764 r789 17 17 Version 1.8.2 patchlevel 4 ???, 2007 18 18 19 Minor changes: 20 * speak() uses accented names. Sketch. 21 * config() no longer lists options that can't be set 22 with @config/set. Suggested by Trispis. [SW] 23 19 24 Fixes: 20 25 * You can no longer save objects slated to be destroyed … … 28 33 to the help file. Reported by Talvo. [SW] 29 34 * Memory leak in grep(). [SW] 35 * Quotes can be around the player name on the login screen 36 always, instead of just when player_name_spaces was 37 on. Suggested by Dan Widdis. [SW] 38 * '{think foo} bar' exhibited odd behavior. [GM] 39 * 'make test' wouldn't work right unless '.' was in you path. 40 Fix by Nathan Baum. 41 * stdin and stdout weren't getting closed, potentially causing 42 problems when trying to log out of a shell after starting 43 a mush. Reported by K Moon. [SW] 30 44 31 45 Version 1.8.2 patchlevel 3 March 11, 2007 1.8.3/branches/autoconf/CHANGES.183
r764 r789 21 21 now ./configure and its options have changed. See 22 22 INSTALL and ./configure --help [SW] 23 * Support for the post resql SQL server. Javelin.23 * Support for the postgresql SQL server. Javelin. 24 24 * Support for sqlite3 SQL databases. [SW] 25 25 … … 27 27 * You can no longer run a mush as root. [SW] 28 28 * @cemit/noisy. Suggested by Kimiko. [SW] 29 30 Functions: 31 * isobjid(). By Balerion. 32 * player() returns the dbref of the player connected to a given 33 port. By Nathan Baum. 29 34 * root(X,3) uses the C cbrt() function if available. [SW] 30 35 * New formats for align() that allow flowing text. Javelin. 36 * isdbref() understands objids. By Balerion. 37 31 38 Fixes: 32 39 * regmatch() broken with %q-registers. Javelin. … … 36 43 Thanks to Jake. [SW] 37 44 * Fixed a crash bug in strmatch(). [GM] 45 * wrap() of Pueblo tags didn't work very well. Fixed by 46 Sketch. 38 47 39 48 Version 1.8.3 patchlevel 1 March 11, 2007 1.8.3/branches/autoconf/README
r764 r789 14 14 II. Getting Help, Reporting Bugs 15 15 III. Getting a .pennmush.org hostname and mailing lists 16 IV. Comments 16 IV. Miscellaneous 17 V. Comments 17 18 18 19 You may also want to take a look at Javelin's Guide for PennMUSH Gods, … … 178 179 ============================================================================ 179 180 180 IV. Comments 181 182 IV.a. Amberyl's Comments 181 IV. Miscellaneous 182 183 V.a Announcing when a mush is down 184 185 If your mush is no longer running on a given port or server and 186 you want to and are able to leave a programming running listening 187 on that port, you can tell people about a new location or other news. 188 189 Run: 190 191 % make portmsg 192 193 Then start the port announcer with: 194 195 % ./src/portmsg message.txt port# 196 197 Any connections to the given port will see the contents of the message 198 file and then be disconnected after a few seconds. 199 200 V. Comments 201 202 V.a. Amberyl's Comments 183 203 184 204 These are in the first person. :) … … 213 233 "Amberyl" just about everywhere 214 234 215 IV.b. Paul/Javelin's Comments235 V.b. Paul/Javelin's Comments 216 236 217 237 And let me recognize T. Alexander Popiel, Shawn Wagner, Nick Gammon, … … 230 250 231 251 232 IV.c. Alex/Talek's Comments252 V.c. Alex/Talek's Comments 233 253 234 254 I would like to thank Ralph, Amberyl, Moonchilde, and all the others 1.8.3/branches/autoconf/game/txt/hlp/penncmd.hlp
r721 r789 147 147 also checked for an @aconnect. If one is found, it will be executed 148 148 when a player connects in that location or zone (or, in the case of 149 the master room, anywhere). 149 the master room, anywhere). This is only done if the room_connects 150 config option is enabled. 150 151 151 152 One descriptor variable is passed to @aconnect: … … 192 193 checked for an @adisconnect. If one is found, it will be executed 193 194 when a player disconnects in that location or zone (or, in the case of 194 the master room, anywhere). 195 the master room, anywhere). This is only done if the room_connects 196 config option is enabled. 195 197 196 198 Several descriptor variables are passed to @adisconnect: 1.8.3/branches/autoconf/game/txt/hlp/pennfunc.hlp
r652 r789 111 111 hidden() idle() ipaddr() lports() lwho() 112 112 lwhoid() mwho() mwhoid() nmwho() nwho() 113 p orts() pueblo() recv() sent() ssl()114 terminfo() width() xmwho() xmwhoid() xwho()115 xwho id() zmwho() zwho()113 player() ports() pueblo() recv() sent() 114 ssl() terminfo() width() xmwho() xmwhoid() 115 xwho() xwhoid() zmwho() zwho() 116 116 & Dbref functions 117 117 Dbref functions return a dbref or list of dbrefs related to some value … … 223 223 allof() ansi() atrlock() beep() checkpass() 224 224 clone() create() die() dig() firstof() 225 functions() isdbref() isint() isnum() isword() 226 localize() link() list() lnum() null() 227 numversion() objeval() open() pcreate() r-function 228 rand() s-function scan() set() setq() 229 setr() soundex() soundslike() speak() tel() 230 textentries() textfile() valid() wipe() @@() 225 functions() isdbref() isint() isnum() isobjid() 226 isword() localize() link() list() lnum() 227 null() numversion() objeval() open() pcreate() 228 r-function rand() s-function scan() set() 229 setq() setr() soundex() soundslike() speak() 230 tel() textentries() textfile() valid() wipe() 231 @@() 231 232 232 233 & @@() … … 354 355 for easy creation of book pages, newsletters, or the like. 355 356 356 <widths> is a space-separated list of column widths. '10 10 10' for 357 the widths argument specifies that there are 3 columns, each 10 358 spaces wide. You can further modify this by prefixing the number 359 with '<', '-' or '>'. A < before a number causes the field to be 360 left-aligned. A '-' causes it to be centered, and '>' makes it 361 right-aligned. No prefix defaults to left-aligned. A '.' after the 362 number implies the column is to be repeated for as long as there is 363 text remaining in a non-repeating column. 357 <widths> is a space-separated list of column widths. '10 10 10' for the 358 widths argument specifies that there are 3 columns, each 10 spaces wide. 359 < before a number causes the field to be left-aligned (the default). A 360 '-' causes it to be centered, and '>' makes it right-aligned. 361 A '.' after the number implies the column is to be repeated for as long 362 as there is text remaining in a non-repeating column. A ` (left tick) 363 after the number implies that if the column runs out of text, it should 364 merge with the next leftmost column (making that column flow around). 365 A ' (right tick) after the number implies that if the column runs out 366 of text, it should merge with the next rightmost column. 364 367 365 368 <filler> is a single character that, if given, is the character used … … 373 376 Examples: 374 377 375 > &line me=align(<5 10 20,\([left(xget(%0,sex),1)]\),name(%0),name( %L))376 > th iter(lwho(),u(line,##) )378 > &line me=align(<5 10 20,\([left(xget(%0,sex),1)]\),name(%0),name(loc(%0))) 379 > th iter(lwho(),u(line,##),%b,%r) 377 380 (M) Walker Tree 378 381 (F) Jane Doe Nowhere … … 1717 1720 isdbref(<string>) 1718 1721 1719 This function returns 1 if the string is a valid object dbref , and1720 0 if the string is not a valid object dbref.1721 1722 See also: DBREFS 1722 This function returns 1 if the string is a valid object dbref (or 1723 object id), and 0 if the string is not a valid object dbref/objid. 1724 1725 See also: DBREFS, isobjid() 1723 1726 & ISINT() 1724 1727 isint(<string>) … … 1737 1740 1738 1741 See also: isint() 1742 & ISOBJID() 1743 isobjid(<string>) 1744 1745 This function returns 1 if the string is a valid object id, and 1746 0 if the string is not a valid object id. 1747 1748 See also: DBREFS, isdbref(), objid() 1739 1749 & ISWORD() 1740 1750 isword(<string>) … … 2944 2954 2945 2955 See also: objmem() 2946 2956 & PLAYER() 2957 player(<port>) 2958 2959 Returns the dbref of the player connected to a given port. 2960 You must be see_all or otherwise privleged to use this function on 2961 ports that players besides yourself are using. 2962 2963 See also: lports(), ports() 2947 2964 & PMATCH() 2948 2965 pmatch(<string>) … … 2983 3000 get information about their own connections. See_all is needed to use 2984 3001 them to get information about other people's ports. 3002 3003 See also: player() 2985 3004 & POS() 2986 3005 pos(<string1>, <string2>) 1.8.3/branches/autoconf/hdrs/log.h
r463 r789 15 15 extern void start_all_logs(void); 16 16 extern void end_all_logs(void); 17 extern void redirect_st derr(void);17 extern void redirect_streams(void); 18 18 extern void WIN32_CDECL do_log 19 19 (int logtype, dbref player, dbref object, const char *fmt, ...) 1.8.3/branches/autoconf/hdrs/parse.h
r738 r789 50 50 51 51 52 /* The following routines all take var oius arguments, and return52 /* The following routines all take various arguments, and return 53 53 * string representations of same. The string representations 54 54 * are stored in static buffers, so the next call to each function … … 65 65 66 66 /* The following routines all take strings as arguments, and return 67 * true if fthe string is a valid representation of the appropriate type.67 * true if the string is a valid representation of the appropriate type. 68 68 */ 69 69 int is_dbref(char const *str); … … 203 203 * 204 204 * PE_FUNCTION_MANDATORY causes an error to be reported if a function call 205 * is attempted for a non-exist ant function. Otherwise, the function call205 * is attempted for a non-existent function. Otherwise, the function call 206 206 * is not evaluated, but rather treated as normal text. 207 207 * … … 230 230 * If the character corresponding to a set flag is encountered, then 231 231 * process_expression() will exit, with *str pointing at the terminating 232 * chara ter. '\0' is always a terminating character.232 * character. '\0' is always a terminating character. 233 233 * 234 234 * PT_DEFAULT, below, is provided as syntactic sugar. 1.8.3/branches/autoconf/src/bsd.c
r764 r789 2800 2800 p = (unsigned char *) user; 2801 2801 2802 if ( PLAYER_NAME_SPACES &&*msg == '\"') {2802 if (*msg == '\"') { 2803 2803 for (; *msg && ((*msg == '\"') || isspace(*msg)); msg++) ; 2804 2804 while (*msg && (*msg != '\"')) { … … 4150 4150 } 4151 4151 } 4152 } 4153 4154 /* ARGSUSED */ 4155 FUNCTION(fun_player) 4156 { 4157 /* Gets the player associated with a particular descriptor */ 4158 DESC *d = lookup_desc(executor, args[0]); 4159 if (d) 4160 safe_dbref(d->player, buff, bp); 4161 else 4162 safe_str("#-1", buff, bp); 4152 4163 } 4153 4164 1.8.3/branches/autoconf/src/command.c
r764 r789 995 995 } else { 996 996 c = command; 997 while ((*c) && (*c != '/') && (*c != ' '))997 while ((*c) && (*c != '/')) 998 998 c++; 999 999 b = *c; 1.8.3/branches/autoconf/src/conf.c
r764 r789 1586 1586 return; 1587 1587 } else { 1588 int first = 1; 1588 1589 for (cp = conftable; cp->name; cp++) { 1589 safe_str(cp->name, buff, bp); 1590 safe_chr(' ', buff, bp); 1590 if (cp->group) { 1591 if (first) 1592 first = 0; 1593 else 1594 safe_chr(' ', buff, bp); 1595 safe_str(cp->name, buff, bp); 1596 } 1591 1597 } 1592 1598 for (cp = (PENNCONF *) hash_firstentry(&local_options); cp; 1593 1599 cp = (PENNCONF *) hash_nextentry(&local_options)) { 1594 safe_str(cp->name, buff, bp); 1595 safe_chr(' ', buff, bp); 1600 if (cp->group) { 1601 if (first) 1602 first = 0; 1603 else 1604 safe_chr(' ', buff, bp); 1605 safe_str(cp->name, buff, bp); 1606 } 1596 1607 } 1597 1608 } 1.8.3/branches/autoconf/src/function.c
r764 r789 417 417 {"ISINT", fun_isint, 1, 1, FN_REG}, 418 418 {"ISNUM", fun_isnum, 1, 1, FN_REG}, 419 {"ISOBJID", fun_isobjid, 1, 1, FN_REG}, 419 420 {"ISWORD", fun_isword, 1, 1, FN_REG}, 420 421 {"ITER", fun_iter, 2, 4, FN_NOPARSE}, … … 548 549 {"PEMIT", fun_pemit, 2, -2, FN_REG}, 549 550 {"PLAYERMEM", fun_playermem, 1, 1, FN_REG}, 551 {"PLAYER", fun_player, 1, 1, FN_REG}, 550 552 {"PMATCH", fun_pmatch, 1, 1, FN_REG}, 551 553 {"POLL", fun_poll, 0, 0, FN_REG}, 1.8.3/branches/autoconf/src/fundb.c
r764 r789 2084 2084 FUNCTION(fun_isdbref) 2085 2085 { 2086 safe_boolean(parse_dbref(args[0]) != NOTHING, buff, bp); 2086 safe_boolean(parse_objid(args[0]) != NOTHING, buff, bp); 2087 } 2088 2089 /* ARGSUSED */ 2090 FUNCTION(fun_isobjid) 2091 { 2092 safe_boolean(is_objid(args[0]), buff, bp); 2087 2093 } 2088 2094 1.8.3/branches/autoconf/src/funstr.c
r764 r789 34 34 35 35 #define MAX_COLS 32 /**< Maximum number of columns for align() */ 36 static int wraplen(char *str, int maxlen);36 static int wraplen(char *str, size_t maxlen); 37 37 static int align_one_line(char *buff, char **bp, int ncols, 38 38 int cols[MAX_COLS], int calign[MAX_COLS], … … 1133 1133 dbref thing; 1134 1134 ATTR *attrib; 1135 char *ap, *lp; 1135 const char *ap; 1136 char *lp; 1136 1137 char *asave, cbuf[2]; 1137 1138 char *tptr[2]; … … 1565 1566 } 1566 1567 1567 1568 /* Returns the length of str up to the first return character, 1569 * or else the last space, or else 0. 1568 /* Returns the length of str up to the first return character, 1569 * or else the last space, or else -1. 1570 1570 */ 1571 1571 static int 1572 wraplen(char *str, int maxlen) 1573 { 1574 const int length = strlen(str); 1575 int i = 0; 1576 1577 if (length <= maxlen) { 1578 /* Find the first return char 1579 * so %r will not mess with any alignment 1580 * functions. 1581 */ 1582 while (i < length) { 1583 if ((str[i] == '\n') || (str[i] == '\r')) 1584 return i; 1585 i++; 1586 } 1587 return length; 1588 } 1589 1590 /* Find the first return char 1591 * so %r will not mess with any alignment 1592 * functions. 1593 */ 1594 while (i <= maxlen + 1) { 1572 wraplen(char *str, size_t maxlen) 1573 { 1574 size_t i, length; 1575 1576 /* If the remaining text is shorter than our chunk size (maxlen), 1577 * try to return it all. Otherwise, scan the maximum allowable size, 1578 * but account for a newline character. */ 1579 length = (strlen(str) <= maxlen) ? strlen(str) : maxlen+1; 1580 1581 /* If there's a newline in the chunk, wrap there. */ 1582 for (i = 0; i < length; i++) 1595 1583 if ((str[i] == '\n') || (str[i] == '\r')) 1596 1584 return i; 1597 i++; 1598 }1599 1600 /* No return char was found. Now1601 * find the last space in str. 1602 */1585 1586 /* No newlines, but the text we can grab will fit on one line */ 1587 if (length == strlen(str)) 1588 return length; 1589 1590 /* No return char was found, so find the last space in str. */ 1603 1591 while (str[maxlen] != ' ' && maxlen > 0) 1604 1592 maxlen--; 1605 1593 1606 return (maxlen ? maxlen : -1); 1594 if (maxlen > 0) 1595 return (int)maxlen; 1596 else 1597 return -1; 1607 1598 } 1608 1599 … … 1620 1611 } \ 1621 1612 v = parse_integer(args[a]); \ 1622 } \1613 } \ 1623 1614 while (0) 1624 1615 … … 1634 1625 ansi_string *as; 1635 1626 const char *pend; /* end of string */ 1636 int linewidth, width1st, width;1627 size_t linewidth, width1st, width; 1637 1628 int linenr = 0; 1638 1629 const char *linesep; 1639 int ansiwidth, ansilen; 1630 size_t ansiwidth; 1631 int ansilen; 1640 1632 1641 1633 if (!args[0] || !*args[0]) 1642 1634 return; 1635 1636 if (ansi_strlen(args[0]) == 0) { 1637 safe_str(args[0], buff, bp); 1638 return; 1639 } 1640 1643 1641 1644 1642 initint(1, width, 72); 1645 1643 width1st = width; 1644 1646 1645 if (nargs > 2) 1647 1646 initint(2, width1st, width); … … 1663 1662 1664 1663 linewidth = width1st; 1664 1665 1665 while (pstr < pend) { 1666 1666 if (linenr++ == 1) … … 1669 1669 safe_str(linesep, buff, bp); 1670 1670 1671 ansiwidth = ansi_strnlen(pstr, linewidth); 1671 ansiwidth = strlen(pstr); 1672 if (ansiwidth > linewidth) 1673 ansiwidth = linewidth; 1672 1674 ansilen = wraplen(pstr, ansiwidth); 1673 1675 … … 1694 1696 #define AL_CENTER 3 /**< Align center */ 1695 1697 #define AL_REPEAT 4 /**< Repeat column */ 1698 #define AL_COALESCE_LEFT 8 /**< Coalesce empty column with column to left */ 1699 #define AL_COALESCE_RIGHT 16 /**< Coalesce empty column with column to right */ 1696 1700 1697 1701 static int … … 1717 1721 cols_done = 0; 1718 1722 for (i = 0; i < ncols; i++) { 1723 /* Skip 0-width and negative columns */ 1724 if (cols[i] <= 0) { 1725 cols_done++; 1726 continue; 1727 } 1728 /* Is the next column AL_COALESCE_LEFT and has it run out of 1729 * text? If so, do the coalesce now. 1730 */ 1731 if ((i < (ncols - 1)) && 1732 (!(calign[i + 1] & AL_REPEAT) && 1733 (calign[i + 1] & AL_COALESCE_LEFT) && 1734 (!ptrs[i + 1] || !*ptrs[i + 1]))) { 1735 /* To coalesce left on this line, modify the left column's 1736 * width and set the current column width to 0 (which we can 1737 * teach it to skip). */ 1738 cols[i] += cols[i + 1] + 1; 1739 cols[i + 1] = 0; 1740 } 1719 1741 if (!ptrs[i] || !*ptrs[i]) { 1720 1742 if (calign[i] & AL_REPEAT) { 1721 1743 ptrs[i] = as[i]->text; 1744 /* To coalesce right on this line, 1745 * modify the current column's width to 0, modify the right 1746 * column's width, and continue on to processing the next 1747 * column 1748 */ 1749 } else if (calign[i] & AL_COALESCE_RIGHT) { 1750 if (i < (ncols - 1)) 1751 cols[i + 1] += cols[i] + 1; 1752 cols[i] = 0; 1753 cols_done++; 1754 continue; 1722 1755 } else { 1723 1756 lp += cols[i]; … … 1793 1826 ptrs[i]++) ; 1794 1827 } 1828 1795 1829 if (cols_done == ncols) 1796 1830 return 0; 1831 if ((lp - line) > BUFFER_LEN) 1832 lp = (line + BUFFER_LEN - 1); 1797 1833 *lp = '\0'; 1798 1834 if (linenum > 0 && lslen > 0) … … 1818 1854 char *linesep; 1819 1855 int lslen; 1856 int totallen = 0; 1820 1857 1821 1858 filler = ' '; … … 1851 1888 ptr++; 1852 1889 } 1890 if (*ptr == '`') { 1891 calign[ncols] |= AL_COALESCE_LEFT; 1892 ptr++; 1893 } 1894 if (*ptr == '\'') { 1895 calign[ncols] |= AL_COALESCE_RIGHT; 1896 ptr++; 1897 } 1853 1898 cols[ncols++] = i; 1854 1899 if (!*ptr) 1855 1900 break; 1856 1901 } 1902 1857 1903 1858 1904 for (i = 0; i < ncols; i++) { … … 1861 1907 return; 1862 1908 } 1909 if (cols[i] > BUFFER_LEN) { 1910 safe_str(T("#-1 CANNOT HAVE COLUMNS THAT LARGE"), buff, bp); 1911 return; 1912 } 1913 totallen += cols[i]; 1914 } 1915 if (totallen > BUFFER_LEN) { 1916 safe_str(T("#-1 CANNOT HAVE COLUMNS THAT LARGE"), buff, bp); 1917 return; 1863 1918 } 1864 1919 … … 1978 2033 close = args[6]; 1979 2034 2035 1980 2036 switch (*string) { 1981 2037 case ':': 1982 safe_str( Name(speaker), buff, bp);2038 safe_str(accented_name(speaker), buff, bp); 1983 2039 string++; 1984 2040 if (*string == ' ') { … … 1991 2047 case ';': 1992 2048 string++; 1993 safe_str( Name(speaker), buff, bp);2049 safe_str(accented_name(speaker), buff, bp); 1994 2050 if (*string == ' ') { 1995 2051 /* pose it instead */ … … 2013 2069 /* nice and easy */ 2014 2070 if (say) 2015 safe_format(buff, bp, "%s %s \"%s\"", Name(speaker), say_string, string); 2071 safe_format(buff, bp, "%s %s \"%s\"", accented_name(speaker), 2072 say_string, string); 2016 2073 else 2017 2074 safe_str(string, buff, bp); … … 2029 2086 } 2030 2087 if (strlen(rbuff) > 0) { 2031 safe_format(buff, bp, "%s %s %s", Name(speaker), say_string, rbuff); 2088 safe_format(buff, bp, "%s %s %s", accented_name(speaker), 2089 say_string, rbuff); 2032 2090 return; 2033 2091 } else if (null == 1) { … … 2047 2105 2048 2106 if (say) { 2049 safe_str( Name(speaker), buff, bp);2107 safe_str(accented_name(speaker), buff, bp); 2050 2108 safe_chr(' ', buff, bp); 2051 2109 safe_str(say_string, buff, bp); 1.8.3/branches/autoconf/src/game.c
r764 r789 742 742 config_file_startup(conf, 0); 743 743 start_all_logs(); 744 redirect_st derr();744 redirect_streams(); 745 745 746 746 /* Initialize the attribute chunk storage */ 1.8.3/branches/autoconf/src/log.c
r674 r789 121 121 } 122 122 123 /** Redirect stderr to a error log file .123 /** Redirect stderr to a error log file and close stdout and stdin. 124 124 * Should be called after start_all_logs(). 125 125 * \param log name of logfile to redirect stderr to. 126 126 */ 127 127 void 128 redirect_st derr(void)128 redirect_streams(void) 129 129 { 130 130 FILE *errlog_fp; … … 143 143 fclose(errlog_fp); 144 144 } 145 #ifndef DEBUG_BYTECODE 146 fclose(stdout); 147 #endif 148 fclose(stdin); 145 149 } 146 150 1.8.3/branches/autoconf/src/parse.c
r764 r789 249 249 * In regex: ^#-?\d+(:\d+)?$ 250 250 * \param str string to check. 251 * \retval 1 string is a dbref.252 * \retval 0 string is not a dbref.251 * \retval 1 string is an objid 252 * \retval 0 string is not an objid. 253 253 */ 254 254 int 1.8.3/branches/autoconf/test/PennMUSH.pm
r439 r789 64 64 } elsif (defined($child)) { 65 65 chdir("testgame"); 66 exec(" netmush", "test.cnf", "log/netmush.log");66 exec("./netmush", "test.cnf", "log/netmush.log"); 67 67 } else { 68 68 die "Could not spawn game process!\n";
