Example #1
0
Tile::Tile(std::string in) :
	img(""), sprite("none"), slowness(1,1),
	jumping(false), solid(true), shading(false)
{
	raw = in;
	std::vector<std::string> toks = split(raw,';');
	for (unsigned int i = 0; i < toks.size(); i++)
	{
		std::vector<std::string> kv = split(stripspaces(toks[i]),':',2);
		if (kv.size() != 2) continue;
		std::string key = kv[0], value = kv[1];
		if (key == "img") img = value;
		if (key == "sprite") sprite = value;
		if (key == "slowness"){
			std::vector<std::string> toks = split(value,',');
			if (toks.size() != 2) continue;
			slowness = vec2(toint(toks[0]),toint(toks[1]));
		}
		if (key == "jumping") jumping = tobool(value);
		if (key == "solid") solid = tobool(value);
		if (key == "shading") shading = tobool(value);
		if (startswith(key,"on_")) scripts[key] = value;
	}
	updateImage();
}
Example #2
0
double GetWindowTextValue(UI::Control* hWnd, bool* bTrans)
{
	ASSERT(0);
#if 0
	TCHAR buf[64];
	GetWindowText(hWnd, buf, sizeof(buf));
#endif
	System::StringW* bstr;// = _bstr_t(buf);
	bstr = stripspaces(bstr);

	if (bstr->Length() > 0)
	{
		int unitType;
		double specifiedValue = Web::ParseValueUnitString(bstr->c_str(), &unitType);
		if (unitType != 0)
		{
			if (bTrans) *bTrans = true;
			return Web::ConvertSpecifiedValueToUserUnit(unitType, specifiedValue);
		}
	}

	if (bTrans) *bTrans = false;
	return 0;
}
Example #3
0
/******** HOOK ********/
char *
mesg_parse(int descr, dbref player, dbref what, dbref perms,
    const char *inbuf, char *outbuf, int maxchars, int mesgtyp)
{
	char wbuf[BUFFER_LEN];
	char buf[BUFFER_LEN];
	char buf2[BUFFER_LEN];
	char dbuf[BUFFER_LEN];
	char ebuf[BUFFER_LEN];
	char cmdbuf[MAX_MFUN_NAME_LEN + 1];
	const char *ptr;
	char *dptr;
	int p, q, s;
	int i;
	char *argv[10] = {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL};
	int argc = 0;
	int showtextflag = 0;
	int literalflag = 0;

	mesg_rec_cnt++;
	if (mesg_rec_cnt > 26) {
		char *zptr = get_mvar("how");
		snprintf(dbuf, sizeof(dbuf), "%s Recursion limit exceeded.", zptr);
		notify_nolisten(player, dbuf, 1);
		mesg_rec_cnt--;
		outbuf[0] = '\0';
		return NULL;
	}
	if (Typeof(player) == TYPE_GARBAGE) {
		mesg_rec_cnt--;
		outbuf[0] = '\0';
		return NULL;
	}
	if (Typeof(what) == TYPE_GARBAGE) {
		notify_nolisten(player, "MPI Error: Garbage trigger.", 1);
		mesg_rec_cnt--;
		outbuf[0] = '\0';
		return NULL;
	}
	strcpyn(wbuf, sizeof(wbuf), inbuf);
	for (p = q = 0; wbuf[p] && (p < maxchars - 1) && q < (maxchars - 1); p++) {
		if (wbuf[p] == '\\') {
			p++;
			showtextflag = 1;
			if (wbuf[p] == 'r') {
				outbuf[q++] = '\r';
			} else if (wbuf[p] == '[') {
				outbuf[q++] = ESCAPE_CHAR;
			} else {
				outbuf[q++] = wbuf[p];
			}
		} else if (wbuf[p] == MFUN_LITCHAR) {
			literalflag = (!literalflag);
		} else if (!literalflag && wbuf[p] == MFUN_LEADCHAR) {
			if (wbuf[p + 1] == MFUN_LEADCHAR) {
				showtextflag = 1;
				outbuf[q++] = wbuf[p++];
				ptr = "";
			} else {
				ptr = wbuf + (++p);
				s = 0;
				while (wbuf[p] && wbuf[p] != MFUN_LEADCHAR &&
					   !isspace(wbuf[p]) && wbuf[p] != MFUN_ARGSTART &&
					   wbuf[p] != MFUN_ARGEND && s < MAX_MFUN_NAME_LEN) {
					p++;
					s++;
				}
				if (s < MAX_MFUN_NAME_LEN &&
					(wbuf[p] == MFUN_ARGSTART || wbuf[p] == MFUN_ARGEND)) {
					int varflag;

					strncpy(cmdbuf, ptr, s);
					cmdbuf[s] = '\0';

					varflag = 0;
					if (*cmdbuf == '&') {
						s = find_mfn("sublist");
						varflag = 1;
					} else if (*cmdbuf) {
						s = find_mfn(cmdbuf);
					} else {
						s = 0;
					}
					if (s) {
						s--;
						if (++mesg_instr_cnt > tp_mpi_max_commands) {
							char *zptr = get_mvar("how");

							snprintf(dbuf, sizeof(dbuf), "%s %c%s%c: Instruction limit exceeded.",
									zptr, MFUN_LEADCHAR,
									(varflag ? cmdbuf : mfun_list[s].name), MFUN_ARGEND);
							notify_nolisten(player, dbuf, 1);
							mesg_rec_cnt--;
							outbuf[0] = '\0';
							return NULL;
						}
						for (i = 0; i < argc; i++) {
							free(argv[i]);
							argv[i] = NULL;
						}
						if (wbuf[p] == MFUN_ARGEND) {
							argc = 0;
						} else {
							argc = mfun_list[s].maxargs;
							if (argc < 0) {
								argc = mesg_args((wbuf + p + 1), (sizeof(wbuf) - p - 1),
												 &argv[(varflag ? 1 : 0)],
												 MFUN_LEADCHAR, MFUN_ARGSEP,
												 MFUN_ARGEND, MFUN_LITCHAR,
												 (-argc) + (varflag ? 1 : 0));
							} else {
								argc = mesg_args((wbuf + p + 1), (sizeof(wbuf) - p - 1),
												 &argv[(varflag ? 1 : 0)],
												 MFUN_LEADCHAR, MFUN_ARGSEP,
												 MFUN_ARGEND, MFUN_LITCHAR, (varflag ? 8 : 9));
							}
							if (argc == -1) {
								char *zptr = get_mvar("how");

								snprintf(ebuf, sizeof(ebuf), "%s %c%s%c: End brace not found.",
										zptr, MFUN_LEADCHAR, cmdbuf, MFUN_ARGEND);
								notify_nolisten(player, ebuf, 1);
								for (i = 0; i < argc; i++) {
									free(argv[i + (varflag? 1 : 0)]);
								}
								mesg_rec_cnt--;
								outbuf[0] = '\0';
								return NULL;
							}
						}
						if (varflag) {
							char *zptr;

							zptr = get_mvar(cmdbuf + 1);
							if (!zptr) {
								zptr = get_mvar("how");
								snprintf(ebuf, sizeof(ebuf), "%s %c%s%c: Unrecognized variable.",
										zptr, MFUN_LEADCHAR, cmdbuf, MFUN_ARGEND);
								notify_nolisten(player, ebuf, 1);
								for (i = 0; i < argc; i++) {
									if (argv[i + (varflag? 1 : 0)]) {
										free(argv[i + (varflag? 1 : 0)]);
									}
								}
								mesg_rec_cnt--;
								outbuf[0] = '\0';
								return NULL;
							}
							if (argv[0]) {
								free(argv[0]);
								argv[0] = NULL;
							}
							argv[0] = string_dup(zptr);
							argc++;
						}
						if (mesgtyp & MPI_ISDEBUG) {
							char *zptr = get_mvar("how");

							snprintf(dbuf, sizeof(dbuf), "%s %*s%c%s%c", zptr,
									(mesg_rec_cnt * 2 - 4), "", MFUN_LEADCHAR,
									(varflag ? cmdbuf : mfun_list[s].name), MFUN_ARGSTART);
							for (i = (varflag ? 1 : 0); i < argc; i++) {
								if (i) {
									const char tbuf[] = { MFUN_ARGSEP, '\0' };
									strcatn(dbuf, sizeof(dbuf), tbuf);
								}
								cr2slash(ebuf, sizeof(ebuf)/8, argv[i]);
								strcatn(dbuf, sizeof(dbuf), "`");
								strcatn(dbuf, sizeof(dbuf), ebuf);
								if (strlen(ebuf) >= (sizeof(ebuf)/8)-2) {
									strcatn(dbuf, sizeof(dbuf), "...");
								}
								strcatn(dbuf, sizeof(dbuf), "`");
							}
							{
								const char tbuf[] = { MFUN_ARGEND, '\0' };
								strcatn(dbuf, sizeof(dbuf), tbuf);
							}
							notify_nolisten(player, dbuf, 1);
						}
						if (mfun_list[s].stripp) {
							for (i = (varflag ? 1 : 0); i < argc; i++) {
								stripspaces(buf, sizeof(buf), argv[i]);
								/*
								 * stripspaces() can only shorten a string.
								 * The argv[i] buffer will therefore always
								 * be large enough.
								 */
								strcpyn(argv[i], strlen(buf)+1, buf);
							}
						}
						if (mfun_list[s].parsep) {
							for (i = (varflag ? 1 : 0); i < argc; i++) {
								ptr = MesgParse(argv[i], buf, sizeof(buf));
								if (!ptr) {
									char *zptr = get_mvar("how");

									snprintf(dbuf, sizeof(dbuf), "%s %c%s%c (arg %d)", zptr,
											MFUN_LEADCHAR,
											(varflag ? cmdbuf : mfun_list[s].name),
											MFUN_ARGEND, i + 1);
									notify_nolisten(player, dbuf, 1);
									for (i = 0; i < argc; i++) {
										free(argv[i]);
									}
									mesg_rec_cnt--;
									outbuf[0] = '\0';
									return NULL;
								}
								argv[i] = (char*)realloc(argv[i], strlen(buf) + 1);
								strcpyn(argv[i], strlen(buf)+1, buf);
							}
						}
						if (mesgtyp & MPI_ISDEBUG) {
							char *zptr = get_mvar("how");

							snprintf(dbuf, sizeof(dbuf), "%.512s %*s%c%.512s%c", zptr,
									(mesg_rec_cnt * 2 - 4), "", MFUN_LEADCHAR,
									(varflag ? cmdbuf : mfun_list[s].name), MFUN_ARGSTART);
							for (i = (varflag ? 1 : 0); i < argc; i++) {
								if (i) {
									const char tbuf[] = { MFUN_ARGSEP, '\0' };
									strcatn(dbuf, sizeof(dbuf), tbuf);
								}
								cr2slash(ebuf, sizeof(ebuf)/8, argv[i]);
								strcatn(dbuf, sizeof(dbuf), "`");
								strcatn(dbuf, sizeof(dbuf), ebuf);
								if (strlen(ebuf) >= (sizeof(ebuf)/8)-2) {
									strcatn(dbuf, sizeof(dbuf), "...");
								}
								strcatn(dbuf, sizeof(dbuf), "`");
							}
							{
								const char tbuf[] = { MFUN_ARGEND, '\0' };
								strcatn(dbuf, sizeof(dbuf), tbuf);
							}
						}
						if (argc < mfun_list[s].minargs) {
							char *zptr = get_mvar("how");

							snprintf(ebuf, sizeof(ebuf), "%s %c%s%c: Too few arguments",
									zptr, MFUN_LEADCHAR,
									(varflag ? cmdbuf : mfun_list[s].name), MFUN_ARGEND);
							notify_nolisten(player, ebuf, 1);
							for (i = 0; i < argc; i++) {
								free(argv[i]);
							}
							mesg_rec_cnt--;
							outbuf[0] = '\0';
							return NULL;
						} else if (mfun_list[s].maxargs > 0 && argc > mfun_list[s].maxargs) {
							char *zptr = get_mvar("how");

							snprintf(ebuf, sizeof(ebuf), "%s %c%s%c: Too many arguments",
									zptr, MFUN_LEADCHAR,
									(varflag ? cmdbuf : mfun_list[s].name), MFUN_ARGEND);
							notify_nolisten(player, ebuf, 1);
							for (i = 0; i < argc; i++) {
								free(argv[i]);
							}
							mesg_rec_cnt--;
							outbuf[0] = '\0';
							return NULL;
						} else {
							ptr = mfun_list[s].mfn(descr, player, what, perms,
							    argc, argv, buf, sizeof(buf), mesgtyp);
							if (!ptr) {
								outbuf[q] = '\0';
								for (i = 0; i < argc; i++) {
									free(argv[i]);
								}
								mesg_rec_cnt--;
								outbuf[0] = '\0';
								return NULL;
							}
							if (mfun_list[s].postp) {
								dptr = MesgParse(ptr, buf, sizeof(buf));
								if (!dptr) {
									char *zptr = get_mvar("how");

									snprintf(ebuf, sizeof(ebuf), "%s %c%s%c (returned string)",
											zptr, MFUN_LEADCHAR,
											(varflag ? cmdbuf : mfun_list[s].name),
											MFUN_ARGEND);
									notify_nolisten(player, ebuf, 1);
									for (i = 0; i < argc; i++) {
										free(argv[i]);
									}
									mesg_rec_cnt--;
									outbuf[0] = '\0';
									return NULL;
								}
								ptr = dptr;
							}
						}
						if (mesgtyp & MPI_ISDEBUG) {
							strcatn(dbuf, sizeof(dbuf), " = `");
							cr2slash(ebuf, sizeof(ebuf)/8, ptr);
							strcatn(dbuf, sizeof(dbuf), ebuf);
							if (strlen(ebuf) >= (sizeof(ebuf)/8)-2) {
								strcatn(dbuf, sizeof(dbuf), "...");
							}
							strcatn(dbuf, sizeof(dbuf), "`");
							notify_nolisten(player, dbuf, 1);
						}
					} else if (msg_is_macro(player, what, perms, cmdbuf, mesgtyp)) {
						for (i = 0; i < argc; i++) {
							free(argv[i]);
							argv[i] = NULL;
						}
						if (wbuf[p] == MFUN_ARGEND) {
							argc = 0;
							p++;
						} else {
							p++;
							argc = mesg_args(wbuf + p, (sizeof(wbuf) - p), argv, MFUN_LEADCHAR,
											 MFUN_ARGSEP, MFUN_ARGEND, MFUN_LITCHAR, 9);
							if (argc == -1) {
								char *zptr = get_mvar("how");

								snprintf(ebuf, sizeof(ebuf), "%s %c%s%c: End brace not found.",
										zptr, MFUN_LEADCHAR, cmdbuf, MFUN_ARGEND);
								notify_nolisten(player, ebuf, 1);
								for (i = 0; i < argc; i++) {
									free(argv[i]);
								}
								mesg_rec_cnt--;
								outbuf[0] = '\0';
								return NULL;
							}
						}
						msg_unparse_macro(player, what, perms, cmdbuf, argc,
										  argv, (wbuf + p), (BUFFER_LEN - p),
										  mesgtyp);
						p--;
						ptr = NULL;
					} else {
						/* unknown function */
						char *zptr = get_mvar("how");

						snprintf(ebuf, sizeof(ebuf), "%s %c%s%c: Unrecognized function.",
								zptr, MFUN_LEADCHAR, cmdbuf, MFUN_ARGEND);
						notify_nolisten(player, ebuf, 1);
						for (i = 0; i < argc; i++) {
							free(argv[i]);
						}
						mesg_rec_cnt--;
						outbuf[0] = '\0';
						return NULL;
					}
				} else {
					showtextflag = 1;
					ptr--;
					i = s + 1;
					while (ptr && *ptr && i-- && q < (maxchars - 1)) {
						outbuf[q++] = *(ptr++);
					}
					outbuf[q] = '\0';
					p = (int) (ptr - wbuf) - 1;
					ptr = "";	/* unknown substitution type */
				}
				while (ptr && *ptr && q < (maxchars - 1)) {
					outbuf[q++] = *(ptr++);
				}
			}
		} else {
			outbuf[q++] = wbuf[p];
			showtextflag = 1;
		}
	}
	outbuf[q] = '\0';
	if ((mesgtyp & MPI_ISDEBUG) && showtextflag) {
		char *zptr = get_mvar("how");

		snprintf(dbuf, sizeof(dbuf), "%s %*s`%.512s`",
		        zptr, (mesg_rec_cnt * 2 - 4), "",
				cr2slash(buf2, sizeof(buf2), outbuf));
		notify_nolisten(player, dbuf, 1);
	}
	for (i = 0; i < argc; i++) {
		free(argv[i]);
	}
	mesg_rec_cnt--;
	outbuf[maxchars - 1] = '\0';
	return (outbuf);
}
/******** HOOK ********/
char   *
mesg_parse(dbref player, dbref what, dbref perms, const char *inbuf, char *outbuf, int maxchars, int mesgtyp)
{
    char    wbuf[BUFFER_LEN];
    char    buf[BUFFER_LEN];
    char    buf2[BUFFER_LEN];
    char    dbuf[BUFFER_LEN];
    char    ebuf[BUFFER_LEN];
    char    cmdbuf[MAX_MFUN_NAME_LEN + 1];
    const char *ptr;
    char    *dptr;
    int     p, q, s;
    int     i;
    char    argv[9][BUFFER_LEN];
    int     argc;
    int showtextflag = 0;
    int literalflag = 0;

    mesg_rec_cnt++;
    if (mesg_rec_cnt > 26) {
        mesg_rec_cnt--;
        strncpy(outbuf, inbuf, maxchars);
        outbuf[maxchars - 1] = '\0';
        return outbuf;
    }
    if (Typeof(player) == TYPE_GARBAGE) {
	return NULL;
    }
    if (Typeof(what) == TYPE_GARBAGE) {
	notify_nolisten(player, "MPI Error: Garbage trigger.", 1);
	return NULL;
    }
    strcpy(wbuf, inbuf);
    for (p = q = 0; wbuf[p] && (p < maxchars - 1) && q < (maxchars - 1); p++) {
        if (wbuf[p] == '\\') {
            p++;
            showtextflag = 1;
            if (wbuf[p] == 'r') {
                outbuf[q++] = '\r';
            } else {
                outbuf[q++] = wbuf[p];
            }
        } else if (wbuf[p] == MFUN_LITCHAR) {
            literalflag = (!literalflag);
        } else if (!literalflag && wbuf[p] == MFUN_LEADCHAR) {
            if (wbuf[p + 1] == MFUN_LEADCHAR) {
                showtextflag = 1;
                outbuf[q++] = wbuf[p++];
		ptr = "";
            } else {
                ptr = wbuf + (++p);
                s = 0;
                while (wbuf[p] && wbuf[p] != MFUN_LEADCHAR &&
                        !isspace(wbuf[p]) && wbuf[p] != MFUN_ARGSTART &&
                        wbuf[p] != MFUN_ARGEND && s < MAX_MFUN_NAME_LEN) {
                    p++; s++;
                }
                if (s < MAX_MFUN_NAME_LEN &&
                        (wbuf[p] == MFUN_ARGSTART || wbuf[p] == MFUN_ARGEND)) {
                    int varflag;

                    strncpy(cmdbuf,ptr,s);
                    cmdbuf[s] = '\0';

		    varflag = 0;
                    if (*cmdbuf == '&') {
			s = find_mfn("sublist");
			varflag = 1;
                    } else if (*cmdbuf) {
			s = find_mfn(cmdbuf);
                    } else {
                        s = 0;
                    }
                    if (s) {
			s--;
			if (++mesg_instr_cnt > tp_mpi_max_commands) {
			    char *zptr = get_mvar("how");
			    sprintf(dbuf, "%s %c%s%c: Instruction limit exceeded.",
				    zptr, MFUN_LEADCHAR,
				    (varflag? cmdbuf : mfun_list[s].name),
				    MFUN_ARGEND);
			    notify_nolisten(player, dbuf, 1);
			    return NULL;
			}
                        if (wbuf[p] == MFUN_ARGEND) {
                            argc = 0;
                        } else {
			    argc = mfun_list[s].maxargs;
			    if (argc < 0) {
				argc = mesg_args((wbuf+p+1),
				        &argv[(varflag? 1 : 0)],
					MFUN_LEADCHAR, MFUN_ARGSEP,
					MFUN_ARGEND, MFUN_LITCHAR,
					(-argc) + (varflag? 1 : 0));
			    } else {
				argc = mesg_args((wbuf+p+1),
				        &argv[(varflag? 1 : 0)],
					MFUN_LEADCHAR, MFUN_ARGSEP,
					MFUN_ARGEND, MFUN_LITCHAR,
					(varflag? 8 : 9));
			    }
			    if (argc == -1) {
				char *zptr = get_mvar("how");
				sprintf(ebuf, "%s %c%s%c: End brace not found.",
					zptr, MFUN_LEADCHAR, cmdbuf,
					MFUN_ARGEND);
				notify_nolisten(player, ebuf, 1);
				return NULL;
			    }
                        }
                        if (varflag) {
			    char *zptr;

			    argc++;
			    zptr = get_mvar(cmdbuf + 1);
			    if (!zptr) {
				zptr = get_mvar("how");
				sprintf(ebuf, "%s %c%s%c: Unrecognized variable.",
					zptr, MFUN_LEADCHAR, cmdbuf, MFUN_ARGEND);
				notify_nolisten(player, ebuf, 1);
				return NULL;
			    }
			    strcpy(argv[0], zptr);
                        }
                        if (mesgtyp & MPI_ISDEBUG) {
                            char *zptr = get_mvar("how");
                            sprintf(dbuf, "%s %*s%c%s%c", zptr,
                                    (mesg_rec_cnt*2-4), "", MFUN_LEADCHAR,
                                    (varflag? cmdbuf : mfun_list[s].name),
                                    MFUN_ARGSTART);
                            for (i = (varflag? 1 : 0); i < argc; i++) {
                                if (i) {
                                    sprintf(dbuf, "%.512s%c ", dbuf,
                                            MFUN_ARGSEP);
                                }
                                cr2slash(ebuf, argv[i]);
                                if (strlen(ebuf) > 512) {
                                    sprintf(dbuf, "%.512s\"%.512s...\"",
                                            dbuf, ebuf);
                                } else {
                                    sprintf(dbuf, "%.512s\"%s\"", dbuf, ebuf);
                                }
                            }
                            sprintf(dbuf, "%.512s%c", dbuf, MFUN_ARGEND);
                            notify_nolisten(player, dbuf, 1);
                        }
                        if (mfun_list[s].stripp) {
                            for (i = (varflag? 1 : 0); i < argc; i++) {
                                strcpy(argv[i], stripspaces(buf, argv[i]));
                            }
                        }
                        if (mfun_list[s].parsep) {
                            for (i = (varflag? 1 : 0); i < argc; i++) {
                                ptr = MesgParse(argv[i], argv[i]);
                                if (!ptr) {
                                    char *zptr = get_mvar("how");
                                    sprintf(dbuf, "%s %c%s%c (arg %d)", zptr,
                                            MFUN_LEADCHAR,
                                            (varflag?cmdbuf:mfun_list[s].name),
                                            MFUN_ARGEND, i+1);
                                    notify_nolisten(player, dbuf, 1);
                                    return NULL;
                                }
                            }
                        }
                        if (mesgtyp & MPI_ISDEBUG) {
                            char *zptr = get_mvar("how");
                            sprintf(dbuf, "%.512s %*s%c%.512s%c", zptr,
                                    (mesg_rec_cnt*2-4), "", MFUN_LEADCHAR,
                                    (varflag? cmdbuf : mfun_list[s].name),
                                    MFUN_ARGSTART);
                            for (i = (varflag? 1 : 0); i < argc; i++) {
                                if (i) {
                                    sprintf(dbuf, "%.512s%c ", dbuf,
                                            MFUN_ARGSEP);
                                }
                                cr2slash(ebuf, argv[i]);
                                if (strlen(ebuf) > 128) {
                                    sprintf(dbuf, "%.512s\"%.128s...\"",
                                            dbuf, ebuf);
                                } else {
                                    sprintf(dbuf, "%.512s\"%s\"", dbuf, ebuf);
                                }
                            }
                            sprintf(dbuf, "%s%c", dbuf, MFUN_ARGEND);
                        }
                        if (argc < mfun_list[s].minargs) {
                            char *zptr = get_mvar("how");
                            sprintf(ebuf, "%s %c%s%c: Too few arguments",
                                    zptr, MFUN_LEADCHAR,
                                    (varflag? cmdbuf : mfun_list[s].name),
                                    MFUN_ARGEND);
                            notify_nolisten(player, ebuf, 1);
                            return NULL;
                        } else if (mfun_list[s].maxargs > 0 &&
				    argc > mfun_list[s].maxargs) {
                            char *zptr = get_mvar("how");
                            sprintf(ebuf, "%s %c%s%c: Too many arguments",
                                    zptr, MFUN_LEADCHAR,
                                    (varflag? cmdbuf : mfun_list[s].name),
                                    MFUN_ARGEND);
                            notify_nolisten(player, ebuf, 1);
                            return NULL;
                        } else {
                            ptr = mfun_list[s].mfn(player, what, perms, argc,
                                                   argv, buf, mesgtyp);
			    if (!ptr) {
				outbuf[q] = '\0';
				return NULL;
			    }
                            if (mfun_list[s].postp) {
                                dptr = MesgParse(ptr, buf);
                                if (!dptr) {
                                    char *zptr = get_mvar("how");
                                    sprintf(ebuf, "%s %c%s%c (returned string)",
                                            zptr, MFUN_LEADCHAR,
                                            (varflag?cmdbuf:mfun_list[s].name),
                                            MFUN_ARGEND);
                                    notify_nolisten(player, ebuf, 1);
                                    return NULL;
                                }
				ptr = dptr;
                            }
                        }
                        if (mesgtyp & MPI_ISDEBUG) {
                            sprintf(dbuf, "%.512s = \"%.512s\"", dbuf,
                                    cr2slash(ebuf, ptr));
                            notify_nolisten(player, dbuf, 1);
                        }
                    } else if (msg_is_macro(player, what, perms, cmdbuf)) {
                        if (wbuf[p] == MFUN_ARGEND) {
                            argc = 0;
			    p++;
                        } else {
			    p++;
                            argc = mesg_args(wbuf+p, argv, MFUN_LEADCHAR,
				 MFUN_ARGSEP, MFUN_ARGEND, MFUN_LITCHAR, 9);
			    if (argc == -1) {
				char *zptr = get_mvar("how");
				sprintf(ebuf, "%s %c%s%c: End brace not found.",
					zptr, MFUN_LEADCHAR, cmdbuf,
					MFUN_ARGEND);
				notify_nolisten(player, ebuf, 1);
				return NULL;
			    }
                        }
                        msg_unparse_macro(player, what, perms, cmdbuf, argc,
					    argv, (wbuf+p), (BUFFER_LEN - p));
			p--;
                        ptr = NULL;
                    } else {
			/* unknown function */
			char *zptr = get_mvar("how");
			sprintf(ebuf, "%s %c%s%c: Unrecognized function.",
				zptr, MFUN_LEADCHAR, cmdbuf, MFUN_ARGEND);
			notify_nolisten(player, ebuf, 1);
			return NULL;
                    }
                } else {
                    showtextflag = 1;
                    p = (int) (ptr - wbuf);
                    if (q < (maxchars - 1))
                        outbuf[q++] = MFUN_LEADCHAR;
                    ptr = "";   /* unknown substitution type */
                }
                while (ptr && *ptr && q < (maxchars -1))
                    outbuf[q++] = *(ptr++);
            }
        } else {
            outbuf[q++] = wbuf[p];
            showtextflag = 1;
        }
    }
    outbuf[q] = '\0';
    if ((mesgtyp & MPI_ISDEBUG) && showtextflag) {
        char *zptr = get_mvar("how");
        sprintf(dbuf, "%s %*s\"%.512s\"", zptr, (mesg_rec_cnt*2-4), "",
                cr2slash(buf2, outbuf));
        notify_nolisten(player, dbuf, 1);
    }
    mesg_rec_cnt--;
    return (outbuf);
}
Example #5
0
static int _mwrite_one(Stream_t *Dir,
		       char *argname,
		       char *shortname,
		       write_data_callback *cb,
		       void *arg,
		       ClashHandling_t *ch)
{
	char longname[VBUFSIZE];
	const char *dstname;
	dos_name_t dosname;
	int expanded;
	struct scan_state scan;
	clash_action ret;
	doscp_t *cp = GET_DOSCONVERT(Dir);

	expanded = 0;

	if(isSpecial(argname)) {
		fprintf(stderr, "Cannot create entry named . or ..\n");
		return -1;
	}

	if(ch->name_converter == dos_name) {
		if(shortname)
			stripspaces(shortname);
		if(argname)
			stripspaces(argname);
	}

	if(shortname){
		convert_to_shortname(cp, ch, shortname, &dosname);
		if(ch->use_longname & 1){
			/* short name mangled, treat it as a long name */
			argname = shortname;
			shortname = 0;
		}
	}

	if (argname[0] && (argname[1] == ':')) {
		/* Skip drive letter */
		dstname = argname + 2;
	} else {
		dstname = argname;
	}

	/* Copy original argument dstname to working value longname */
	strncpy(longname, dstname, VBUFSIZE-1);

	if(shortname) {
		ch->use_longname =
			convert_to_shortname(cp, ch, shortname, &dosname);
		if(strcmp(shortname, longname))
			ch->use_longname |= 1;
	} else {
		ch->use_longname =
			convert_to_shortname(cp, ch, longname, &dosname);
	}

	ch->action[0] = ch->namematch_default[0];
	ch->action[1] = ch->namematch_default[1];

	while (1) {
		switch((ret=get_slots(Dir, &dosname, longname, &scan, ch))){
			case NAMEMATCH_ERROR:
				return -1;	/* Non-file-specific error,
						 * quit */
				
			case NAMEMATCH_SKIP:
				return -1;	/* Skip file (user request or
						 * error) */

			case NAMEMATCH_PRENAME:
				ch->use_longname =
					convert_to_shortname(cp, ch,
							     longname,
							     &dosname);
				continue;
			case NAMEMATCH_RENAME:
				continue;	/* Renamed file, loop again */

			case NAMEMATCH_GREW:
				/* No collision, and not enough slots.
				 * Try to grow the directory
				 */
				if (expanded) {	/* Already tried this
						 * once, no good */
					fprintf(stderr,
						"%s: No directory slots\n",
						progname);
					return -1;
				}
				expanded = 1;
				
				if (dir_grow(Dir, scan.max_entry))
					return -1;
				continue;
			case NAMEMATCH_OVERWRITE:
			case NAMEMATCH_SUCCESS:
				return write_slots(Dir, &dosname, longname,
						   &scan, cb, arg,
						   ch->use_longname);
			default:
				fprintf(stderr,
					"Internal error: clash_action=%d\n",
					ret);
				return -1;
		}

	}
}
Example #6
0
void DoBoxes(LPDFLib::IPDFEText* pText, CPDFEFont* pFont, /*ASFixedMatrix* mat,*/ CBox* pBox, IPDMatrix* matpdf, RectD pageRect)
{
#if 0
	if (pBox->m_type == 3)	// Element Box
	{
		CPDFEFont* pFont = new CPDFEFont;
		PDEFontAttrs fattrs;
	//	fattrs.name = "Times-Roman";
		fattrs.name = (char*)stripspaces(pBox->m_pElement->m_fontFamily);
		fattrs.type = "TrueType";
		pFont->Create(&fattrs);

		for (int i = 0; i < pBox->m_children.GetSize(); i++)
		{
			DoBoxes(pText, pFont, /*mat,*/ pBox->m_children[i], matpdf, pageRect);
		}
	}
	/*
	else if (pBox->m_type == 2)	// Line Box
	{
		Gdiplus::RectF rc = pBox->GetAbsInnerRect();

		ASFixedMatrix mat;
		mat.a = 1;					mat.b = 0;
		mat.c = 0;					mat.d = 1;
		mat.h = rc.X*65536.0;	mat.v = rc.Y*65536.0;

		for (int i = 0; i < pBox->m_children.GetSize(); i++)
		{
			DoBoxes(pText, pFont, mat, pBox->m_children[i]);
		}
	}
	*/
	else if (pBox->m_type == 10)	// Word
	{
		CWordBox* pWord = (CWordBox*)pBox;
		Gdiplus::RectF rc = pBox->GetAbsInnerRect();

		ASFixedMatrix mat;
		mat.a = 1;				mat.b = 0;
		mat.c = 0;				mat.d = 1;
		mat.h = rc.X;
//		mat.v = (pageHeight-rc.GetBottom())*65536.0;

		CLineBox* pLine = (CLineBox*)pBox->m_parent->m_parent;
		Gdiplus::RectF linebox = pLine->GetAbsInnerRect();
		mat.v = (pageRect.Height-(linebox.Y+pLine->m_maxascent));

		PDETextState tstate;
		tstate.fontSize = ConvertSpecifiedValueToUserUnit(UNIT_PT, pBox->m_parent->m_pElement->m_fontSize)*65536.0;

		pText->Add(0, 0, pWord->m_text, pWord->m_text.length(), pFont, NULL, &tstate, &mat, NULL);
	}
	else
	{
		for (int i = 0; i < pBox->m_children.GetSize(); i++)
		{
			DoBoxes(pText, pFont, /*mat,*/ pBox->m_children[i], matpdf, pageRect);
		}
	}
#endif
}
Example #7
0
ErrorCode CDispLRegFilter::BuildRegFilter(XmlData::Element* element)
{
	m_Name = element->getAttribute(WSTR("name"));
	m_Src = element->getAttribute(WSTR("src"));

	XmlData::Node* node = element->get_firstChild();
	while (node)
	{
		XmlData::Element* element = dynamic_cast<XmlData::Element*>(node);
		if (element)
		{
			String tagName = element->get_tagName();

			if (tagName == L"inputpin" ||
				tagName == L"outputpin")
			{
				CLRegPin* pRegPin = new CLRegPin;

				if (tagName == L"inputpin")
				{
					pRegPin->m_dir = PINDIR_INPUT;
				}
				else// if (!wcscmp(tagName, L"outputpin"))
				{
					pRegPin->m_dir = PINDIR_OUTPUT;
				}

				String minOccurs = element->getAttribute(WSTR("minOccurs"));
				String maxOccurs = element->getAttribute(WSTR("maxOccurs"));

				pRegPin->m_name = element->getAttribute(WSTR("name"));

				XmlData::Element* mediaTypes = GetElementByTagNameNS(element, NULL, WSTR("mediatypes"), false);
				if (mediaTypes)
				{
					XmlData::Node* node = mediaTypes->get_firstChild();
					while (node)
					{
						XmlData::Element* element = dynamic_cast<XmlData::Element*>(node);
						if (element)
						{
							String tagName = element->get_tagName();
							if (tagName == "mediatype")
							{
								CLRegMediaType* pRegMediaType = new CLRegMediaType;

								String majortype = element->getAttribute(WSTR("majortype"));
								if (majortype.Compare(WSTR("stream")) == 0)
								{
									pRegMediaType->m_majortype = LMEDIATYPE_Stream;

									XmlData::Element* streamcontent = GetElementByTagNameNS(element, NULL, WSTR("streamcontent"), false);
									if (streamcontent)
									{
										XmlData::Node* node = streamcontent->get_firstChild();
										while (node)
										{
											XmlData::Element* element = dynamic_cast<XmlData::Element*>(node);
											if (element)
											{
												String tagName = element->get_tagName();

												if (tagName == "match")
												{
													CMatch match;

													XmlData::Node* node = element->get_firstChild();
													while (node)
													{
														XmlData::Element* element = dynamic_cast<XmlData::Element*>(node);
														if (element)
														{
															String tagName = element->get_tagName();

															if (tagName == "pattern")
															{
																String value = element->getAttribute(WSTR("value"));
																if (value != NULL)
																{
																	BytePattern pattern;
																	
																	String offset = element->getAttribute(WSTR("offset"));
																	if (offset != NULL)
																		//pattern.m_offset = _wtoi64(offset.c_str());
																		pattern.m_offset = str2int(CString(offset));
																	else
																		pattern.m_offset = 0;

																	String v = stripspaces(value);
																	pattern.m_length = v.GetLength()/2;
																	pattern.m_value = new uint8[pattern.m_length];

																	HexStringToBytes(CStringw(v), pattern.m_value, pattern.m_length);

																	pattern.m_mask = new uint8[pattern.m_length];

																	String mask = element->getAttribute(WSTR("mask"));

																	int masklen;
																	if (mask != NULL)
																	{
																		v = stripspaces(mask);
																		masklen = MIN(v.GetLength()/2, pattern.m_length);
																		HexStringToBytes(CStringw(v), pattern.m_mask, masklen);
																	}
																	else
																		masklen = 0;

																	while (masklen < pattern.m_length)	// Fill rest with 0xFF
																	{
																		pattern.m_mask[masklen++] = 0xFF;
																	}

																	match.m_patterns.Add(pattern);
																}
															}
														}

														node = node->get_nextSibling();
													}

													pRegMediaType->m_streamcontent.m_matches.Add(match);
												}
											}

											node = node->get_nextSibling();
										}
									}
								}
								else if (majortype.Compare(WSTR("video")) == 0)
								{
									pRegMediaType->m_majortype = LMEDIATYPE_Video;
								}
								else if (majortype.Compare(WSTR("audio")) == 0)
								{
									pRegMediaType->m_majortype = LMEDIATYPE_Audio;
								}
								else if (majortype.Compare(WSTR("scene")) == 0)
								{
									pRegMediaType->m_majortype = LMEDIATYPE_Scene;
								}
								else
								{
									// TODO
									ASSERT(0);
								}

								pRegPin->m_mediaTypes.Add(pRegMediaType);
							}
						}

						node = node->get_nextSibling();
					}
				}

				m_RegPins.Add(pRegPin);
			}
		}

		node = node->get_nextSibling();
	}

	return 0;
}
Example #8
0
std::vector<std::string> Parser::parse(std::string unparsed, bool &failed)
{
    failed = false;

    std::vector<std::string> parsed;

    std::string buffer;

    // Strip spaces from unparsed
    unparsed = stripspaces(unparsed);
    std::string returnment;
    if(!isvalidated(unparsed, returnment))
    {
        failed = true;
        // Ugly
        parsed = {returnment};
        return parsed;
    }

    for(unsigned i = 0; i < unparsed.length(); i++)
    {
        std::string current_char(1, unparsed[i]);

        // If current char is a digit
        if(isdigit(unparsed[i]) || (i == 0 && current_char == "-"))
        {
            buffer += current_char;
        }

        else if(buffer.length() > 0 && current_char == ".")
        {
            buffer += current_char;
        }

        else if(buffer.length() == 0 &&
                current_char == "-" &&
                isdigit(unparsed[i + 1]) &&
                !isdigit(unparsed[i - 1]) &&
                unparsed[i - 1] != ')')
        {

                buffer += current_char;

        }

        // Is not number
        else
        {

            // If first char is operator; exit
            if(i == 0 && isoperator(unparsed[i]))
            {
                failed = true;

                parsed = {"Operator mismatch"};
                return parsed;
            }

            // If two operators after eachother
            if(isoperator(unparsed[i]) && isoperator(unparsed[i+1]) && unparsed[i +1] != '-')
            {
                failed = true;

                parsed = {"Operator mismatch"};
                return parsed;
            }


            // add numbers to parsed
            if(buffer.size() != 0)
            {
                parsed.push_back(buffer);
                buffer.clear();
            }

            parsed.push_back(current_char);
        }

    }
    if(buffer.empty() && parsed.back() != ")")
    {
        failed = true;

        parsed = {"Operator mismatch"};
        return parsed;
    }
    if(!buffer.empty())
    {
        parsed.push_back(buffer);
    }

    return parsed;



}
/*****
* Display a file selection dialog box to allow the
* user to select files he wishes to scan
*****/
static void
get_fortran_files(HWND hDlg)
{
	OPENFILENAME ofn;
	char szDirName[128];
	static char szFile[1024];
	UINT  i, cbString;
	char  chReplace;	/* string separator for szFilter */
	char  szFilter[256];
	i = 0;

	/* clear szFile buffer */
	memset(szFile, '\0', 1024);

	/* initial directory appearing in the fileselectiondialog. */
	strcpy(szDirName, initial_dir);

	/*
	* Load string needed for the possible filters used by the fileselection
	* dialog.
	*/
	memset(szFilter, '\0', sizeof(szFilter));
	if ((cbString = LoadString(hInst, IDS_FILTERSTRING, szFilter,
		sizeof(szFilter))) == 0)
	{
		ErrHandler(hDlg, R_ERROR, RB_OK1, "Internal Error: failed to "
			"get resource");
		return;
	}
	/* retrieve filter wildcard */
	chReplace = szFilter[cbString - 1];
	for (i = 0; szFilter[i] != '\0'; i++)
	{
		if (szFilter[i] == chReplace)
		szFilter[i] = '\0';
	}

	/* Set all structure members to zero. */
	memset(&ofn, 0, sizeof(OPENFILENAME));
	/* Fill appropriate fields */
	ofn.lStructSize = sizeof(OPENFILENAME);
	ofn.hwndOwner = hDlg;
	/* filter string */
	ofn.lpstrFilter = szFilter;
	/* default filter to use */
	ofn.nFilterIndex = 1;
	/* this string will contain selected files upon return */
	ofn.lpstrFile= szFile;
	ofn.nMaxFile = sizeof(szFile);
	/* initial directory to use */
	ofn.lpstrInitialDir = szDirName;
	/* title for this fileselection dialog box */
	ofn.lpstrTitle = "Select Files to Scan";
	/* fileselection dialog configuration flags */
	ofn.Flags = OFN_PATHMUSTEXIST|OFN_FILEMUSTEXIST|OFN_ALLOWMULTISELECT;

	/* display fileselection dialog box */
	if(GetOpenFileName(&ofn))
	{
		/* zero out initial_dir */
		memset(initial_dir, '\0', sizeof(initial_dir));
		/* save original dir.*/
		strncpy(initial_dir, ofn.lpstrFile, ofn.nFileOffset);
		/* cut off a trailing slash */
		if(initial_dir[strlen(initial_dir) - 1] == '\\')
			initial_dir[strlen(initial_dir) - 1] = '\0';
		/* remove trailing spaces, if any */
		stripspaces(initial_dir);
		/* make it lower case */
		downcase(initial_dir);
		/* file the file listbox in the main window */
		fill_file_listbox(hDlg, ofn.lpstrFile, ofn.nFileOffset,
			initial_dir);
	}
}