void draw_board(struct colour* (*board)[WIDTH_CELLS][HEIGHT_CELLS]) { unsigned int x,y; plot_clear(); for (y = 0; y < HEIGHT_CELLS; y++) { for (x = 0; x < WIDTH_CELLS; x++) { plot_cell(x,y, (*board)[x][y]); } } }
int PlotArea::do_plot(const char *commands, bool clear) { // Discard all commands up to `G' command, if any int discard = -1; { const char *cmds = commands; while (*cmds != '\0') { if (cmds[0] == 'G' && cmds[1] == '\n') { if (pending_plots > 0) pending_plots--; discard = (cmds - commands); } while (*cmds != '\n' && *cmds != '\0') cmds++; if (*cmds != '\0') cmds++; } } // Process commands const char *cmds = commands; if (discard >= 0) { cmds += discard; assert(cmds[0] == 'G'); assert(cmds[1] == '\n'); } #if 0 // FIXME: Not thoroughly tested yet -AZ if (discard < 0 && pending_plots > 0) return discard; #endif while (cmds[0] != '\0') { const char *command_begin = cmds; // Move CMDS to the next line while (*cmds != '\0' && *cmds != '\n') cmds++; if (*cmds == '\0') break; // Command is incomplete - don't do it assert(*cmds == '\n'); cmds++; // Copy current command to a NULL-terminated string. Otherwise, // sscanf() takes far too much time. const int len_ = cmds-command_begin-1; assert(len_ >= 0); const string command_s(command_begin,len_); const char *command = command_s.chars(); switch (command[0]) { case 'V': if (win) plot_vector(command); break; case 'M': if (win) plot_move(command); break; case 'T': if (win) plot_text(command); break; case 'J': if (win) plot_justify(command); break; case 'L': if (win) plot_linetype(command); break; case 'P': if (win) plot_point(command); break; case 'G': plot_reset(command); if (win && clear) plot_clear(command); break; case 'E': case 'R': if (win) plot_nop(command); break; default: plot_unknown(command); break; } } return discard; }