pixel ppm_parsecolor(const char * const colorname, pixval const maxval) { return ppm_parsecolor2(colorname, maxval, TRUE); }
static void executeScript(struct script * const scriptP, pixel ** const pixels, unsigned int const cols, unsigned int const rows, pixval const maxval) { struct drawState drawState; unsigned int seq; /* Sequence number of current command (0 = first, etc.) */ struct commandListElt * p; /* Pointer to current element in command list */ initDrawState(&drawState, maxval); for (p = scriptP->commandListHeadP, seq = 0; p; p = p->nextP, ++seq) { const struct drawCommand * const commandP = p->commandP; if (verbose) pm_message("Command %u: %u", seq, commandP->verb); switch (commandP->verb) { case VERB_SETPOS: drawState.currentPos.x = commandP->u.setposArg.x; drawState.currentPos.y = commandP->u.setposArg.y; break; case VERB_SETLINETYPE: ppmd_setlinetype(commandP->u.setlinetypeArg.type); break; case VERB_SETLINECLIP: ppmd_setlineclip(commandP->u.setlineclipArg.clip); break; case VERB_SETCOLOR: drawState.color = ppm_parsecolor2(commandP->u.setcolorArg.colorName, maxval, TRUE); break; case VERB_SETFONT: { FILE * ifP; const struct ppmd_font * fontP; ifP = pm_openr(commandP->u.setfontArg.fontFileName); ppmd_read_font(ifP, &fontP); ppmd_set_font(fontP); pm_close(ifP); } break; case VERB_LINE: ppmd_line(pixels, cols, rows, maxval, commandP->u.lineArg.x0, commandP->u.lineArg.y0, commandP->u.lineArg.x1, commandP->u.lineArg.y1, PPMD_NULLDRAWPROC, &drawState.color); break; case VERB_LINE_HERE: { struct pos endPos; endPos.x = drawState.currentPos.x + commandP->u.lineHereArg.right; endPos.y = drawState.currentPos.y + commandP->u.lineHereArg.down; ppmd_line(pixels, cols, rows, maxval, drawState.currentPos.x, drawState.currentPos.y, endPos.x, endPos.y, PPMD_NULLDRAWPROC, &drawState.color); drawState.currentPos = endPos; } break; case VERB_SPLINE3: ppmd_spline3(pixels, cols, rows, maxval, commandP->u.spline3Arg.x0, commandP->u.spline3Arg.y0, commandP->u.spline3Arg.x1, commandP->u.spline3Arg.y1, commandP->u.spline3Arg.x2, commandP->u.spline3Arg.y2, PPMD_NULLDRAWPROC, &drawState.color); break; case VERB_CIRCLE: ppmd_circle(pixels, cols, rows, maxval, commandP->u.circleArg.cx, commandP->u.circleArg.cy, commandP->u.circleArg.radius, PPMD_NULLDRAWPROC, &drawState.color); break; case VERB_FILLEDCIRCLE: doFilledCircle(pixels, cols, rows, maxval, commandP, &drawState); break; case VERB_FILLEDRECTANGLE: ppmd_filledrectangle(pixels, cols, rows, maxval, commandP->u.filledrectangleArg.x, commandP->u.filledrectangleArg.y, commandP->u.filledrectangleArg.width, commandP->u.filledrectangleArg.height, PPMD_NULLDRAWPROC, &drawState.color); break; case VERB_TEXT: ppmd_text(pixels, cols, rows, maxval, commandP->u.textArg.xpos, commandP->u.textArg.ypos, commandP->u.textArg.height, commandP->u.textArg.angle, commandP->u.textArg.text, PPMD_NULLDRAWPROC, &drawState.color); break; case VERB_TEXT_HERE: doTextHere(pixels, cols, rows, maxval, commandP, &drawState); break; } } }