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(); }
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; }
/******** 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); }
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; } } }
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 }
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; }
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); } }