MCStack *MCDispatch::findstackname(const MCString &s) { if (s.getlength() == 0) return NULL; MCStack *tstk = stacks; if (tstk != NULL) { do { MCStack *foundstk; if ((foundstk = (MCStack *)tstk->findsubstackname(s)) != NULL) return foundstk; tstk = (MCStack *)tstk->next(); } while (tstk != stacks); } tstk = stacks; if (tstk != NULL) { do { MCStack *foundstk; if ((foundstk = (MCStack *)tstk->findstackfile(s)) != NULL) return foundstk; tstk = (MCStack *)tstk->next(); } while (tstk != stacks); } char *sname = s.clone(); if (loadfile(sname, tstk) != IO_NORMAL) { char *buffer = new char[s.getlength() + 5]; MCU_lower(buffer, s); strcpy(&buffer[s.getlength()], ".mc"); delete sname; char *sptr = buffer; while (*sptr) { if (strchr("\r\n\t *?*<>/\\()[]{}|'`\"", *sptr) != NULL) *sptr = '_'; sptr++; } if (loadfile(buffer, tstk) != IO_NORMAL) { strcpy(&buffer[s.getlength()], ".rev"); if (loadfile(buffer, tstk) != IO_NORMAL) { delete buffer; return NULL; } } delete buffer; } else delete sname; return tstk; }