Fix all compiler warnings from various build systems.

Fix vsnprintf() implementation to properly handle long and long long ints.


git-svn-id: file:///fltk/svn/fltk/branches/branch-1.1@5845 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
This commit is contained in:
Michael R Sweet
2007-05-20 00:01:06 +00:00
parent 9ca173a702
commit 73d01dd659
34 changed files with 279 additions and 267 deletions
+18 -15
View File
@@ -383,11 +383,13 @@ BlockSound::play_explosion(float duration) {
if (duration <= 0.0)
return;
#if defined(__APPLE_) || defined(WIN32) || defined(HAVE_ALSA_ASOUNDLIB_H)
if (duration > 1.0)
duration = 1.0;
int samples = (int)(duration * sample_size);
short *sample_ptr = sample_data + 2 * (sample_size - samples);
#endif // __APPLE__ || WIN32 || HAVE_ALSA_ASOUNDLIB_H
#ifdef __APPLE__
// Point to the next note...
@@ -540,7 +542,7 @@ BlockWindow::_BlockWindow() {
// Bomb all blocks of a given color and return the number of affected blocks
int
BlockWindow::bomb(int color) {
int i, j;
int j, k;
int count;
Block *b;
Column *c;
@@ -548,8 +550,8 @@ BlockWindow::bomb(int color) {
if (color >= BLOCK_BLAST) return (0);
for (i = num_columns_, c = columns_, count = 1; i > 0; i --, c ++)
for (j = c->num_blocks, b = c->blocks; j > 0; j --, b ++)
for (j = num_columns_, c = columns_, count = 1; j > 0; j --, c ++)
for (k = c->num_blocks, b = c->blocks; k > 0; k --, b ++)
if (b->color == color) {
b->color = -color;
count ++;
@@ -607,7 +609,7 @@ BlockWindow::click(int col, int row) {
// Draw the block window...
void
BlockWindow::draw() {
int i, j, xx, yy;
int j, k, xx, yy;
Block *b;
Column *c;
@@ -617,8 +619,8 @@ BlockWindow::draw() {
fl_rectf(0, 0, w(), h());
// Draw the blocks...
for (i = num_columns_, c = columns_; i > 0; i --, c ++)
for (j = c->num_blocks, b = c->blocks; j > 0; j --, b ++) {
for (j = num_columns_, c = columns_; j > 0; j --, c ++)
for (k = c->num_blocks, b = c->blocks; k > 0; k --, b ++) {
xx = w() - c->x;
yy = h() - BLOCK_SIZE - b->y;
@@ -723,7 +725,7 @@ BlockWindow::draw() {
// Handle mouse clicks, etc.
int
BlockWindow::handle(int event) {
int i, j, mx, my, count;
int j, k, mx, my, count;
Block *b;
Column *c;
@@ -736,20 +738,21 @@ BlockWindow::handle(int event) {
mx = w() - Fl::event_x() + BLOCK_SIZE;
my = h() - Fl::event_y();
count = 0;
b = c->blocks;
for (i = 0, c = columns_; !count && i < num_columns_; i ++, c ++)
for (j = 0, b = c->blocks; !count && j < c->num_blocks; j ++, b ++)
for (j = 0, c = columns_; !count && j < num_columns_; j ++, c ++)
for (k = 0, b = c->blocks; !count && k < c->num_blocks; k ++, b ++)
if (mx >= c->x && mx < (c->x + BLOCK_SIZE) &&
my >= b->y && my < (b->y + BLOCK_SIZE)) {
if (b->bomb) count = bomb(b->color);
else count = click(i, j);
else count = click(j, k);
break;
}
if (count < 2) {
for (i = 0, c = columns_; i < num_columns_; i ++, c ++)
for (j = 0, b = c->blocks; j < c->num_blocks; j ++, b ++)
for (j = 0, c = columns_; j < num_columns_; j ++, c ++)
for (k = 0, b = c->blocks; k < c->num_blocks; k ++, b ++)
if (b->color < 0) b->color = -b->color;
} else {
count --;
@@ -771,8 +774,8 @@ BlockWindow::handle(int event) {
prefs_.set("high_score", high_score_);
}
for (i = 0, c = columns_; i < num_columns_; i ++, c ++)
for (j = 0, b = c->blocks; j < c->num_blocks; j ++, b ++)
for (j = 0, c = columns_; j < num_columns_; j ++, c ++)
for (k = 0, b = c->blocks; k < c->num_blocks; k ++, b ++)
if (b->color < 0) b->color = BLOCK_BLAST;
}
return (1);
@@ -784,7 +787,7 @@ BlockWindow::handle(int event) {
// Toggle the on-line help...
void
BlockWindow::help_cb(Fl_Widget *wi, BlockWindow *bw) {
BlockWindow::help_cb(Fl_Widget *, BlockWindow *bw) {
bw->paused_ = bw->help_ = !bw->help_;
bw->play_button_->label("@>");
bw->redraw();
+1 -1
View File
@@ -104,7 +104,7 @@ void show_cb(Fl_Widget *o, void *) {
browser->make_visible(line);
}
void swap_cb(Fl_Widget *o, void *) {
void swap_cb(Fl_Widget *, void *) {
int a = -1, b = -1;
for ( int t=0; t<browser->size(); t++ ) { // find two selected items
if ( browser->selected(t) ) {
+2 -2
View File
@@ -211,7 +211,7 @@ multi_callback(void)
Fl_Image * // O - Page image or NULL
pdf_check(const char *name, // I - Name of file
uchar *header, // I - Header data
int headerlen) // I - Length of header data
int) // I - Length of header data (unused)
{
const char *home; // Home directory
char preview[1024], // Preview filename
@@ -242,7 +242,7 @@ pdf_check(const char *name, // I - Name of file
Fl_Image * // O - Page image or NULL
ps_check(const char *name, // I - Name of file
uchar *header, // I - Header data
int headerlen) // I - Length of header data
int) // I - Length of header data (unused)
{
const char *home; // Home directory
char preview[1024], // Preview filename
+16 -16
View File
@@ -737,28 +737,28 @@ void MenuInit(void)
int submenu3, submenu2, submenu1;
submenu1 = glutCreateMenu(setlevel);
glutAddMenuEntry("0", 0); glutAddMenuEntry("1", 1);
glutAddMenuEntry("2", 2); glutAddMenuEntry("3", 3);
glutAddMenuEntry("4", 4); glutAddMenuEntry("5", 5);
glutAddMenuEntry("6", 6); glutAddMenuEntry("7", 7);
glutAddMenuEntry("8", 8);
glutAddMenuEntry((char *)"0", 0); glutAddMenuEntry((char *)"1", 1);
glutAddMenuEntry((char *)"2", 2); glutAddMenuEntry((char *)"3", 3);
glutAddMenuEntry((char *)"4", 4); glutAddMenuEntry((char *)"5", 5);
glutAddMenuEntry((char *)"6", 6); glutAddMenuEntry((char *)"7", 7);
glutAddMenuEntry((char *)"8", 8);
submenu2 = glutCreateMenu(choosefract);
glutAddMenuEntry("Moutain", MOUNTAIN);
glutAddMenuEntry("Tree", TREE);
glutAddMenuEntry("Island", ISLAND);
glutAddMenuEntry((char *)"Moutain", MOUNTAIN);
glutAddMenuEntry((char *)"Tree", TREE);
glutAddMenuEntry((char *)"Island", ISLAND);
submenu3 = glutCreateMenu(agvSwitchMoveMode);
glutAddMenuEntry("Flying", FLYING);
glutAddMenuEntry("Polar", POLAR);
glutAddMenuEntry((char *)"Flying", FLYING);
glutAddMenuEntry((char *)"Polar", POLAR);
glutCreateMenu(handlemenu);
glutAddSubMenu("Level", submenu1);
glutAddSubMenu("Fractal", submenu2);
glutAddSubMenu("Movement", submenu3);
glutAddMenuEntry("New Fractal", MENU_RAND);
glutAddMenuEntry("Toggle Axes", MENU_AXES);
glutAddMenuEntry("Quit", MENU_QUIT);
glutAddSubMenu((char *)"Level", submenu1);
glutAddSubMenu((char *)"Fractal", submenu2);
glutAddSubMenu((char *)"Movement", submenu3);
glutAddMenuEntry((char *)"New Fractal", MENU_RAND);
glutAddMenuEntry((char *)"Toggle Axes", MENU_AXES);
glutAddMenuEntry((char *)"Quit", MENU_QUIT);
glutAttachMenu(GLUT_RIGHT_BUTTON);
}
+2 -2
View File
@@ -91,8 +91,8 @@ void shape_window::draw() {
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(.5,.6,.7);
glBegin(GL_POLYGON);
for (int i=0; i<sides; i++) {
double ang = i*2*M_PI/sides;
for (int j = 0; j < sides; j ++) {
double ang = j*2*M_PI/sides;
glVertex3f(cos(ang),sin(ang),0);
}
glEnd();
+5 -5
View File
@@ -72,9 +72,9 @@ void shape_window::draw() {
glClear(GL_COLOR_BUFFER_BIT);
// for (int j=1; j<=1000; j++) {
glBegin(GL_POLYGON);
for (int i=0; i<sides; i++) {
double ang = i*2*M_PI/sides;
glColor3f(float(i)/sides,float(i)/sides,float(i)/sides);
for (int j=0; j<sides; j++) {
double ang = j*2*M_PI/sides;
glColor3f(float(j)/sides,float(j)/sides,float(j)/sides);
glVertex3f(cos(ang),sin(ang),0);
}
glEnd();
@@ -92,8 +92,8 @@ void shape_window::draw_overlay() {
// draw an amazing graphic:
gl_color(FL_RED);
glBegin(GL_LINE_LOOP);
for (int i=0; i<overlay_sides; i++) {
double ang = i*2*M_PI/overlay_sides;
for (int j=0; j<overlay_sides; j++) {
double ang = j*2*M_PI/overlay_sides;
glVertex3f(cos(ang),sin(ang),0);
}
glEnd();
+28 -28
View File
@@ -721,7 +721,7 @@ continueSolving(void)
}
}
}
glutSetWindowTitle("What! No change?");
glutSetWindowTitle((char *)"What! No change?");
freeSolutions();
return 0;
@@ -755,7 +755,7 @@ solvePuzzle(void)
int i;
if (solution(thePuzzle)) {
glutSetWindowTitle("Puzzle already solved!");
glutSetWindowTitle((char *)"Puzzle already solved!");
return 0;
}
addConfig(thePuzzle, NULL);
@@ -1147,12 +1147,12 @@ toggleSolve(void)
if (solving) {
freeSolutions();
solving = 0;
glutChangeToMenuEntry(1, "Solving", 1);
glutSetWindowTitle("glpuzzle");
glutChangeToMenuEntry(1, (char *)"Solving", 1);
glutSetWindowTitle((char *)"glpuzzle");
movingPiece = 0;
} else {
glutChangeToMenuEntry(1, "Stop solving", 1);
glutSetWindowTitle("Solving...");
glutChangeToMenuEntry(1, (char *)"Stop solving", 1);
glutSetWindowTitle((char *)"Solving...");
if (solvePuzzle()) {
solving = 1;
}
@@ -1166,8 +1166,8 @@ void reset(void)
if (solving) {
freeSolutions();
solving = 0;
glutChangeToMenuEntry(1, "Solving", 1);
glutSetWindowTitle("glpuzzle");
glutChangeToMenuEntry(1, (char *)"Solving", 1);
glutSetWindowTitle((char *)"glpuzzle");
movingPiece = 0;
changeState();
}
@@ -1189,8 +1189,8 @@ keyboard(unsigned char c, int x, int y)
if (solving) {
freeSolutions();
solving = 0;
glutChangeToMenuEntry(1, "Solving", 1);
glutSetWindowTitle("glpuzzle");
glutChangeToMenuEntry(1, (char *)"Solving", 1);
glutSetWindowTitle((char *)"glpuzzle");
movingPiece = 0;
changeState();
}
@@ -1264,8 +1264,8 @@ mouse(int b, int s, int x, int y)
if (solving) {
freeSolutions();
solving = 0;
glutChangeToMenuEntry(1, "Solving", 1);
glutSetWindowTitle("glpuzzle");
glutChangeToMenuEntry(1, (char *)"Solving", 1);
glutSetWindowTitle((char *)"glpuzzle");
movingPiece = 0;
}
left_mouse = GL_TRUE;
@@ -1306,8 +1306,8 @@ animate(void)
if (solving) {
if (!continueSolving()) {
solving = 0;
glutChangeToMenuEntry(1, "Solving", 1);
glutSetWindowTitle("glpuzzle");
glutChangeToMenuEntry(1, (char *)"Solving", 1);
glutSetWindowTitle((char *)"glpuzzle");
}
}
if ((!solving && !spinning) || !visible) {
@@ -1388,8 +1388,8 @@ init(void)
static void
Usage(void)
{
printf("Usage: puzzle [-s]\n");
printf(" -s: Run in single buffered mode\n");
puts("Usage: puzzle [-s]");
puts(" -s: Run in single buffered mode");
exit(-1);
}
@@ -1454,15 +1454,15 @@ main(int argc, char **argv)
glGetIntegerv(GL_VIEWPORT, viewport);
printf("\n");
printf("r Reset puzzle\n");
printf("s Solve puzzle (may take a few seconds to compute)\n");
printf("d Destroy a piece - makes the puzzle easier\n");
printf("b Toggles the depth buffer on and off\n");
printf("\n");
printf("Left mouse moves pieces\n");
printf("Middle mouse spins the puzzle\n");
printf("Right mouse has menu\n");
puts("");
puts("r Reset puzzle");
puts("s Solve puzzle (may take a few seconds to compute)");
puts("d Destroy a piece - makes the puzzle easier");
puts("b Toggles the depth buffer on and off");
puts("");
puts("Left mouse moves pieces");
puts("Middle mouse spins the puzzle");
puts("Right mouse has menu");
glutReshapeFunc(Reshape);
glutDisplayFunc(redraw);
@@ -1471,9 +1471,9 @@ main(int argc, char **argv)
glutMouseFunc(mouse);
glutVisibilityFunc(visibility);
glutCreateMenu(menu);
glutAddMenuEntry("Solve", 1);
glutAddMenuEntry("Reset", 2);
glutAddMenuEntry("Quit", 3);
glutAddMenuEntry((char *)"Solve", 1);
glutAddMenuEntry((char *)"Reset", 2);
glutAddMenuEntry((char *)"Quit", 3);
glutAttachMenu(GLUT_RIGHT_BUTTON);
glutMainLoop();
return 0; /* ANSI C requires main to return int. */
+2 -2
View File
@@ -71,7 +71,7 @@ void box_cb(Fl_Widget* o, void*) {
}
void type_cb(Fl_Widget*, void* v) {
thescroll->type((long)v);
thescroll->type((uchar)((long)v));
thescroll->redraw();
}
@@ -87,7 +87,7 @@ Fl_Menu_Item choices[] = {
};
void align_cb(Fl_Widget*, void* v) {
thescroll->scrollbar.align((long)v);
thescroll->scrollbar.align((uchar)((long)v));
thescroll->redraw();
}
+2 -2
View File
@@ -60,8 +60,8 @@ void shape_window::draw() {
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(.5,.6,.7);
glBegin(GL_POLYGON);
for (int i=0; i<sides; i++) {
double ang = i*2*M_PI/sides;
for (int j=0; j<sides; j++) {
double ang = j*2*M_PI/sides;
glVertex3f(cos(ang),sin(ang),0);
}
glEnd();
+137 -136
View File
@@ -547,7 +547,6 @@ SudokuCell::handle(int event) {
case FL_UNFOCUS :
redraw();
return 1;
break;
case FL_PUSH :
if (!readonly() && Fl::event_inside(this)) {
@@ -630,7 +629,7 @@ Fl_Preferences Sudoku::prefs_(Fl_Preferences::USER, "fltk.org", "sudoku");
Sudoku::Sudoku()
: Fl_Window(GROUP_SIZE * 3, GROUP_SIZE * 3 + MENU_OFFSET, "Sudoku")
{
int i, j;
int j, k;
Fl_Group *g;
SudokuCell *cell;
static Fl_Menu_Item items[] = {
@@ -657,8 +656,8 @@ Sudoku::Sudoku()
// Setup sound output...
prefs_.get("mute_sound", i, 0);
if (i) {
prefs_.get("mute_sound", j, 0);
if (j) {
// Mute sound?
sound_ = NULL;
items[6].flags |= FL_MENU_VALUE;
@@ -676,27 +675,27 @@ Sudoku::Sudoku()
// Create the grids...
grid_ = new Fl_Group(0, MENU_OFFSET, 3 * GROUP_SIZE, 3 * GROUP_SIZE);
for (i = 0; i < 3; i ++)
for (j = 0; j < 3; j ++) {
g = new Fl_Group(j * GROUP_SIZE, i * GROUP_SIZE + MENU_OFFSET,
for (j = 0; j < 3; j ++)
for (k = 0; k < 3; k ++) {
g = new Fl_Group(k * GROUP_SIZE, j * GROUP_SIZE + MENU_OFFSET,
GROUP_SIZE, GROUP_SIZE);
g->box(FL_BORDER_BOX);
if ((i == 1) ^ (j == 1)) g->color(FL_DARK3);
if ((int)(j == 1) ^ (int)(k == 1)) g->color(FL_DARK3);
else g->color(FL_DARK2);
g->end();
grid_groups_[i][j] = g;
grid_groups_[j][k] = g;
}
for (i = 0; i < 9; i ++)
for (j = 0; j < 9; j ++) {
cell = new SudokuCell(j * CELL_SIZE + CELL_OFFSET +
(j / 3) * (GROUP_SIZE - 3 * CELL_SIZE),
i * CELL_SIZE + CELL_OFFSET + MENU_OFFSET +
(i / 3) * (GROUP_SIZE - 3 * CELL_SIZE),
for (j = 0; j < 9; j ++)
for (k = 0; k < 9; k ++) {
cell = new SudokuCell(k * CELL_SIZE + CELL_OFFSET +
(k / 3) * (GROUP_SIZE - 3 * CELL_SIZE),
j * CELL_SIZE + CELL_OFFSET + MENU_OFFSET +
(j / 3) * (GROUP_SIZE - 3 * CELL_SIZE),
CELL_SIZE, CELL_SIZE);
cell->callback(reset_cb);
grid_cells_[i][j] = cell;
grid_cells_[j][k] = cell;
}
// Set icon for window (MacOS uses app bundle for icon...)
@@ -749,23 +748,23 @@ void
Sudoku::check_game(bool highlight) {
bool empty = false;
bool correct = true;
int i, j, k;
int j, k, m;
// Check the game for right/wrong answers...
for (i = 0; i < 9; i ++)
for (j = 0; j < 9; j ++) {
SudokuCell *cell = grid_cells_[i][j];
for (j = 0; j < 9; j ++)
for (k = 0; k < 9; k ++) {
SudokuCell *cell = grid_cells_[j][k];
int val = cell->value();
if (cell->readonly()) continue;
if (!val) empty = true;
else {
for (k = 0; k < 9; k ++)
if ((i != k && grid_cells_[k][j]->value() == val) ||
(j != k && grid_cells_[i][k]->value() == val)) break;
for (m = 0; m < 9; m ++)
if ((j != m && grid_cells_[m][k]->value() == val) ||
(k != m && grid_cells_[j][m]->value() == val)) break;
if (k < 9) {
if (m < 9) {
if (highlight) {
cell->color(FL_YELLOW);
cell->redraw();
@@ -780,28 +779,28 @@ Sudoku::check_game(bool highlight) {
}
// Check subgrids for duplicate numbers...
for (i = 0; i < 9; i += 3)
for (j = 0; j < 9; j += 3)
for (int ii = 0; ii < 3; ii ++)
for (int jj = 0; jj < 3; jj ++) {
SudokuCell *cell = grid_cells_[i + ii][j + jj];
for (j = 0; j < 9; j += 3)
for (k = 0; k < 9; k += 3)
for (int jj = 0; jj < 3; jj ++)
for (int kk = 0; kk < 3; kk ++) {
SudokuCell *cell = grid_cells_[j + jj][k + kk];
int val = cell->value();
if (cell->readonly() || !val) continue;
int iii;
int jjj;
for (iii = 0; iii < 3; iii ++) {
int jjj;
for (jjj = 0; jjj < 3; jjj ++) {
int kkk;
for (jjj = 0; jjj < 3; jjj ++)
if (ii != iii && jj != jjj &&
grid_cells_[i + iii][j + jjj]->value() == val) break;
for (kkk = 0; kkk < 3; kkk ++)
if (jj != jjj && kk != kkk &&
grid_cells_[j + jjj][k + kkk]->value() == val) break;
if (jjj < 3) break;
if (kkk < 3) break;
}
if (iii < 3) {
if (jjj < 3) {
if (highlight) {
cell->color(FL_YELLOW);
cell->redraw();
@@ -813,14 +812,14 @@ Sudoku::check_game(bool highlight) {
if (!empty && correct) {
// Success!
for (i = 0; i < 9; i ++) {
for (j = 0; j < 9; j ++) {
SudokuCell *cell = grid_cells_[i][j];
for (j = 0; j < 9; j ++) {
for (k = 0; k < 9; k ++) {
SudokuCell *cell = grid_cells_[j][k];
cell->color(FL_GREEN);
cell->readonly(1);
}
if (sound_) sound_->play('A' + grid_cells_[i][8]->value() - 1);
if (sound_) sound_->play('A' + grid_cells_[j][8]->value() - 1);
}
}
}
@@ -879,50 +878,52 @@ Sudoku::update_helpers_cb(Fl_Widget *widget, void *) {
void
Sudoku::update_helpers() {
int i, j, k;
// first we delete any entries that the user may have made
for (i=0; i<9; i++) {
for (j=0; j<9; j++) {
SudokuCell *cell = grid_cells_[i][j];
for (k = 0; k < 8; k++) {
cell->test_value(0, k);
int j, k, m;
// First we delete any entries that the user may have made
for (j = 0; j < 9; j ++) {
for (k = 0; k < 9; k ++) {
SudokuCell *cell = grid_cells_[j][k];
for (m = 0; m < 8; m ++) {
cell->test_value(0, m);
}
}
}
// now go through all cells and find out, what we can not be
for (i=0; i<81; i++) {
// Now go through all cells and find out, what we can not be
for (j = 0; j < 81; j ++) {
char taken[10] = { 0 };
// find our destination cell
int row = i/9;
int col = i%9;
// Find our destination cell
int row = j / 9;
int col = j % 9;
SudokuCell *dst_cell = grid_cells_[row][col];
if (dst_cell->value()) continue;
// find all values already taken in this row
for (j=0; j<9; j++) {
SudokuCell *cell = grid_cells_[row][j];
// Find all values already taken in this row
for (k = 0; k < 9; k ++) {
SudokuCell *cell = grid_cells_[row][k];
int v = cell->value();
if (v) taken[v] = 1;
}
// find all values already taken in this column
for (j=0; j<9; j++) {
SudokuCell *cell = grid_cells_[j][col];
// Find all values already taken in this column
for (k = 0; k < 9; k ++) {
SudokuCell *cell = grid_cells_[k][col];
int v = cell->value();
if (v) taken[v] = 1;
}
// now find all values already taken in this sqare
int ro = (row/3) * 3;
int co = (col/3) * 3;
for (j=0; j<3; j++) {
for (k=0; k<3; k++) {
SudokuCell *cell = grid_cells_[ro+j][co+k];
// Now find all values already taken in this square
int ro = (row / 3) * 3;
int co = (col / 3) * 3;
for (k = 0; k < 3; k ++) {
for (m = 0; m < 3; m ++) {
SudokuCell *cell = grid_cells_[ro + j][co + k];
int v = cell->value();
if (v) taken[v] = 1;
}
}
// transfer our findings to the markers
for (k = 1, j = 0; k <= 9; k++) {
for (m = 1, k = 0; m <= 9; m ++) {
if (!taken[k])
dst_cell->test_value(k, j++);
dst_cell->test_value(m, k ++);
}
}
}
@@ -994,27 +995,27 @@ Sudoku::load_game() {
bool solved = true;
for (int i = 0; i < 9; i ++)
for (int j = 0; j < 9; j ++) {
for (int j = 0; j < 9; j ++)
for (int k = 0; k < 9; k ++) {
char name[255];
int val;
SudokuCell *cell = grid_cells_[i][j];
SudokuCell *cell = grid_cells_[j][k];
sprintf(name, "value%d.%d", i, j);
sprintf(name, "value%d.%d", j, k);
if (!prefs_.get(name, val, 0)) {
i = 9;
j = 9;
grid_values_[0][0] = 0;
break;
}
grid_values_[i][j] = val;
grid_values_[j][k] = val;
sprintf(name, "state%d.%d", i, j);
sprintf(name, "state%d.%d", j, k);
prefs_.get(name, val, 0);
cell->value(val);
sprintf(name, "readonly%d.%d", i, j);
sprintf(name, "readonly%d.%d", j, k);
prefs_.get(name, val, 0);
cell->readonly(val);
@@ -1024,10 +1025,10 @@ Sudoku::load_game() {
solved = false;
}
for (int k = 0; k < 8; k ++) {
sprintf(name, "test%d%d.%d", k, i, j);
for (int m = 0; m < 8; m ++) {
sprintf(name, "test%d%d.%d", m, j, k);
prefs_.get(name, val, 0);
cell->test_value(val, k);
cell->test_value(val, m);
}
}
@@ -1072,7 +1073,7 @@ Sudoku::new_cb(Fl_Widget *widget, void *) {
// Create a new game...
void
Sudoku::new_game(time_t seed) {
int i, j, k, m, t, count;
int j, k, m, n, t, count;
// Generate a new (valid) Sudoku grid...
@@ -1081,36 +1082,36 @@ Sudoku::new_game(time_t seed) {
memset(grid_values_, 0, sizeof(grid_values_));
for (i = 0; i < 9; i += 3) {
for (j = 0; j < 9; j += 3) {
for (j = 0; j < 9; j += 3) {
for (k = 0; k < 9; k += 3) {
for (t = 1; t <= 9; t ++) {
for (count = 0; count < 20; count ++) {
k = i + (rand() % 3);
m = j + (rand() % 3);
if (!grid_values_[k][m]) {
int kk;
for (kk = 0; kk < k; kk ++)
if (grid_values_[kk][m] == t) break;
if (kk < k) continue;
n = k + (rand() % 3);
if (!grid_values_[m][n]) {
int mm;
for (mm = 0; mm < m; mm ++)
if (grid_values_[k][mm] == t) break;
if (grid_values_[mm][n] == t) break;
if (mm < m) continue;
grid_values_[k][m] = t;
int nn;
for (nn = 0; nn < n; nn ++)
if (grid_values_[m][nn] == t) break;
if (nn < n) continue;
grid_values_[m][n] = t;
break;
}
}
if (count == 20) {
// Unable to find a valid puzzle so far, so start over...
j = 9;
i = -3;
k = 9;
j = -3;
memset(grid_values_, 0, sizeof(grid_values_));
}
}
@@ -1120,9 +1121,9 @@ Sudoku::new_game(time_t seed) {
// Start by making all cells editable
SudokuCell *cell;
for (i = 0; i < 9; i ++)
for (j = 0; j < 9; j ++) {
cell = grid_cells_[i][j];
for (j = 0; j < 9; j ++)
for (k = 0; k < 9; k ++) {
cell = grid_cells_[j][k];
cell->value(0);
cell->readonly(0);
@@ -1134,10 +1135,10 @@ Sudoku::new_game(time_t seed) {
int numbers[9];
for (i = 0; i < 9; i ++) numbers[i] = i + 1;
for (j = 0; j < 9; j ++) numbers[j] = j + 1;
while (count > 0) {
for (i = 0; i < 20; i ++) {
for (j = 0; j < 20; j ++) {
k = rand() % 9;
m = rand() % 9;
t = numbers[k];
@@ -1145,14 +1146,14 @@ Sudoku::new_game(time_t seed) {
numbers[m] = t;
}
for (i = 0; count > 0 && i < 9; i ++) {
t = numbers[i];
for (j = 0; count > 0 && j < 9; j ++) {
t = numbers[j];
for (j = 0; count > 0 && j < 9; j ++) {
cell = grid_cells_[i][j];
for (k = 0; count > 0 && k < 9; k ++) {
cell = grid_cells_[j][k];
if (grid_values_[i][j] == t && !cell->readonly()) {
cell->value(grid_values_[i][j]);
if (grid_values_[j][k] == t && !cell->readonly()) {
cell->value(grid_values_[j][k]);
cell->readonly(1);
cell->color(FL_GRAY);
@@ -1168,33 +1169,33 @@ Sudoku::new_game(time_t seed) {
// Return the next available value for a cell...
int
Sudoku::next_value(SudokuCell *c) {
int i, j, k, m;
int j, k, m, n;
for (i = 0; i < 9; i ++) {
for (j = 0; j < 9; j ++)
if (grid_cells_[i][j] == c) break;
for (j = 0; j < 9; j ++) {
for (k = 0; k < 9; k ++)
if (grid_cells_[j][k] == c) break;
if (j < 9) break;
if (k < 9) break;
}
if (i == 9) return 1;
if (j == 9) return 1;
i -= i % 3;
j -= j % 3;
k -= k % 3;
int numbers[9];
memset(numbers, 0, sizeof(numbers));
for (k = 0; k < 3; k ++)
for (m = 0; m < 3; m ++) {
c = grid_cells_[i + k][j + m];
for (m = 0; m < 3; m ++)
for (n = 0; n < 3; n ++) {
c = grid_cells_[j + m][k + n];
if (c->value()) numbers[c->value() - 1] = 1;
}
for (i = 0; i < 9; i ++)
if (!numbers[i]) return i + 1;
for (j = 0; j < 9; j ++)
if (!numbers[j]) return j + 1;
return 1;
}
@@ -1230,9 +1231,9 @@ Sudoku::restart_cb(Fl_Widget *widget, void *) {
Sudoku *s = (Sudoku *)(widget->window());
bool solved = true;
for (int i = 0; i < 9; i ++)
for (int j = 0; j < 9; j ++) {
SudokuCell *cell = s->grid_cells_[i][j];
for (int j = 0; j < 9; j ++)
for (int k = 0; k < 9; k ++) {
SudokuCell *cell = s->grid_cells_[j][k];
if (!cell->readonly()) {
solved = false;
@@ -1251,23 +1252,23 @@ Sudoku::restart_cb(Fl_Widget *widget, void *) {
void
Sudoku::save_game() {
// Save the current values and state of each grid...
for (int i = 0; i < 9; i ++)
for (int j = 0; j < 9; j ++) {
for (int j = 0; j < 9; j ++)
for (int k = 0; k < 9; k ++) {
char name[255];
SudokuCell *cell = grid_cells_[i][j];
SudokuCell *cell = grid_cells_[j][k];
sprintf(name, "value%d.%d", i, j);
prefs_.set(name, grid_values_[i][j]);
sprintf(name, "value%d.%d", j, k);
prefs_.set(name, grid_values_[j][k]);
sprintf(name, "state%d.%d", i, j);
sprintf(name, "state%d.%d", j, k);
prefs_.set(name, cell->value());
sprintf(name, "readonly%d.%d", i, j);
sprintf(name, "readonly%d.%d", j, k);
prefs_.set(name, cell->readonly());
for (int k = 0; k < 8; k ++) {
sprintf(name, "test%d%d.%d", k, i, j);
prefs_.set(name, cell->test_value(k));
for (int m = 0; m < 8; m ++) {
sprintf(name, "test%d%d.%d", m, j, k);
prefs_.set(name, cell->test_value(m));
}
}
}
@@ -1297,18 +1298,18 @@ Sudoku::solve_cb(Fl_Widget *widget, void *) {
// Solve the puzzle...
void
Sudoku::solve_game() {
int i, j;
int j, k;
for (i = 0; i < 9; i ++) {
for (j = 0; j < 9; j ++) {
SudokuCell *cell = grid_cells_[i][j];
for (j = 0; j < 9; j ++) {
for (k = 0; k < 9; k ++) {
SudokuCell *cell = grid_cells_[j][k];
cell->value(grid_values_[i][j]);
cell->value(grid_values_[j][k]);
cell->readonly(1);
cell->color(FL_GRAY);
}
if (sound_) sound_->play('A' + grid_cells_[i][8]->value() - 1);
if (sound_) sound_->play('A' + grid_cells_[j][8]->value() - 1);
}
}
+1 -1
View File
@@ -45,7 +45,7 @@ Fl_Window *window;
Fl_Value_Slider *orientation;
Fl_Value_Slider *size;
void slider_cb(Fl_Widget *w, void *) {
void slider_cb(Fl_Widget *, void *) {
static char buf[80];
int val = (int)orientation->value();
int sze = (int)size->value();
-1
View File
@@ -108,7 +108,6 @@ void* prime_func(void* p)
Fl::unlock();
}
}
return 0;
}
int main(int argc, char **argv)
+5 -5
View File
@@ -80,7 +80,7 @@ Fl_Group *beginTestPage(const char *l) {
}
//------- test the point drawing capabilities of this implementation ----------
class PointTest : Fl_Widget {
class PointTest : public Fl_Widget {
public: PointTest(int x, int y, int w, int h) : Fl_Widget(x, y, w, h) {}
void draw() {
int a = x(), b = y();
@@ -111,7 +111,7 @@ void fl_point_test() {
}
//------- test the line drawing capabilities of this implementation ----------
class LineTest : Fl_Widget {
class LineTest : public Fl_Widget {
public: LineTest(int x, int y, int w, int h) : Fl_Widget(x, y, w, h) {}
void draw() {
int a = x(), b = y(); fl_color(FL_BLACK); fl_rect(a, b, w(), h());
@@ -148,7 +148,7 @@ void fl_line_test() {
}
//------- test the line drawing capabilities of this implementation ----------
class RectTest : Fl_Widget {
class RectTest : public Fl_Widget {
public: RectTest(int x, int y, int w, int h) : Fl_Widget(x, y, w, h) {}
void draw() {
int a = x(), b = y(); fl_color(FL_BLACK); fl_rect(a, b, w(), h());
@@ -176,7 +176,7 @@ void fl_rect_test() {
}
//------- test the line drawing capabilities of this implementation ----------
class ViewportTest : Fl_Widget {
class ViewportTest : public Fl_Widget {
int pos;
public: ViewportTest(int x, int y, int w, int h, int p) : Fl_Widget(x, y, w, h),
pos(p) {}
@@ -218,7 +218,7 @@ void fl_viewport_test() {
}
//------- test the circle drawing capabilities of this implementation ----------
class CircleTest : Fl_Widget {
class CircleTest : public Fl_Widget {
public: CircleTest(int x, int y, int w, int h) : Fl_Widget(x, y, w, h) {}
void draw() {
int a = x(), b = y(); fl_color(FL_BLACK); fl_rect(a, b, 100, 100);