void Font::WalkString(char *buffPtr, int xpos, int ypos, int *vPort, int dir) { int x; int y = ypos; int tabs = 0; int xMax = vPort[0] + vPort[2]; int ret; tabs = GetCharHits(buffPtr, '\t'); if (!tabs) tabs = 1; else tabs *= fontTabSpace; if (dir > 0) x = xpos; else x = xpos - ysize * tabs * GetTrueLen(buffPtr); for ( ; *buffPtr; ++buffPtr) { if (x > xMax) break; switch (*buffPtr) { case '\n': y -= ysize; x = xpos; continue; break; case '\t': x += (ysize * fontTabSpace); continue; break; case TEXT_STYLE_KEYWORD: ret = SlashParser(buffPtr, &x, &y); buffPtr += ret; if (*buffPtr == '\n' || *buffPtr == '\t') { --buffPtr; continue; } if (ret) continue; break; case '^': ret = HutParser(buffPtr, &x, &y); buffPtr += ret; if (ret) continue; break; default: RenderChar((unsigned char) *buffPtr, x, y, ysize); break; } x += (int)((float)width[(int)(*buffPtr)]*ratio*scale); } }
void ClientAgent::Submit(const char* buffer, bool clear, bool fHistoryAdd) { BString cmd; if (fHistoryAdd) cmd = fHistory->Submit(buffer); else cmd = buffer; if (clear) fInput->SetText(""); if (cmd.Length() && !SlashParser(cmd.String()) && cmd[0] != '/') { BString tmp; // break strings up by 440 lens to ensure user doesn't lose data while (cmd.Length() > 0) { cmd.MoveInto(tmp, 0, Get440Len(cmd.String())); Parser(tmp.String()); tmp = ""; } } }
void text_t::WalkString(char *buffPtr, GLint xpos, GLint ypos, GLint *vPort) { GLint x = xpos; GLint y = ypos; GLint carrage = 0; GLint tabs = 0; GLint len = strlen(buffPtr); GLint xMax; xMax = vPort[0] + vPort[2]; carrage = GetCharHits(buffPtr, '\n'); tabs = GetCharHits(buffPtr, '\t'); if (!tabs) tabs = 1; else tabs *= fontTabSpace; if (region) { ScissorTextRegion(); x = regionX; y = (regionY + regionH) - size; } else ScissorNormal(xpos, ypos, tabs, carrage, size, len); /* lets draw! */ for ( ; *buffPtr; buffPtr++, x += size) { if (x > xMax) break; if (region) { if (x + size > (regionX + regionW)) { y -= size; x = regionX; } if (y < regionY) break; } switch (*buffPtr) { case '\n': y -= size; if(region) x = regionX - size; else x = xpos - size; continue; break; case '\t': x += (size * fontTabSpace); continue; break; case '\\': { int ret = SlashParser(buffPtr, &x, &y); buffPtr += ret; if (*buffPtr == '\n' || *buffPtr == '\t') { buffPtr -= 1; continue; } if (!ret) RenderChar(*buffPtr, x, y, size); } break; default: RenderChar(*buffPtr, x, y, size); break; } } }