Mail Archives: djgpp/2001/11/15/16:34:20
From: | degoble AT gtech (David. E. Goble)
|
Newsgroups: | comp.os.msdos.djgpp
|
Subject: | help with allegro program
|
Date: | Wed, 14 Nov 2001 22:17:08 GMT
|
Organization: | Gtech.Computing
|
Message-ID: | <3bf2ed47.13317482@gtech>
|
X-Newsreader: | Forte Free Agent 1.21/32.243
|
NNTP-Posting-Host: | 203.48.5.230
|
X-Trace: | 16 Nov 2001 07:36:45 +1050, 203.48.5.230
|
Lines: | 202
|
To: | djgpp AT delorie DOT com
|
DJ-Gateway: | from newsgroup comp.os.msdos.djgpp
|
Reply-To: | djgpp AT delorie DOT com
|
Hi All;
I need some help with my allegro program. I am just experimenting with
it, learning as I go.
How do I change this program, so that it only exits thru the menu item
quit? Selecting the about menu item drops thru to the report the
results.
/* test of using allegro lib
gcc foo.c -o foo.exe -lalleg
*/
#include <stdlib.h>
#include <stdio.h>
#include "allegro.h"
#include "example.h"
void credits_proc(void)
{
char buf1[256], buf2[80], buf3[80];
/* and report the results */
sprintf(buf1, "Writtren By David. E. Goble");
sprintf(buf2, "");
sprintf(buf3, "");
alert(buf1, buf2, buf3, "OK", NULL, 0, 0);
}
int quit_proc()
{
return D_CLOSE;
}
MENU apple_menu[]=
{
{"&About", credits_proc, NULL, 0, NULL},
{"", NULL, NULL, 0, NULL},
{NULL, NULL, NULL, 0, NULL}
};
MENU file_menu[]=
{
{"&New", NULL, NULL, 0, NULL},
{"&Open", NULL, NULL, 0, NULL},
{"", NULL, NULL, 0, NULL},
{"&Quit", quit_proc, NULL, 0, NULL},
{NULL, NULL, NULL, 0, NULL}
};
MENU menu[]=
{
{"@", NULL, apple_menu, 0, NULL},
{"&File", NULL, file_menu, 0, NULL},
{"&Edit", NULL, NULL, 0, NULL},
{NULL, NULL, NULL, 0, NULL}
};
/* we need to load example.dat to access the big font */
DATAFILE *datafile;
/* for the d_edit_proc() object */
char the_string[32] = "Change Me!";
/* since we change the font, we need to store a copy of the original
one */
FONT *original_font;
/* A custom dialog procedure for the 'change font' button. This uses a
* simple form of inheritance: it calls d_button_proc() to do most of
* the work, so it behaves exactly like any other button, but when the
* button is clicked and d_button_proc() returns D_CLOSE, it
intercepts
* the message and changes the font instead.
*/
int change_font_proc(int msg, DIALOG *d, int c)
{
int ret;
/* call the parent object */
ret = d_button_proc(msg, d, c);
/* trap the close return value and change the font */
if (ret == D_CLOSE) {
if (font == original_font)
font = datafile[BIG_FONT].dat;
else
font = original_font;
return D_REDRAW;
}
/* otherwise just return */
return ret;
}
/* callback function to specify the contents of the listbox */
char *listbox_getter(int index, int *list_size)
{
static char *strings[] =
{
"Zero", "One", "Two", "Three", "Four", "Five",
"Six", "Seven", "Eight", "Nine", "Ten"
};
if (index < 0) {
*list_size = 11;
return NULL;
}
else
return strings[index];
}
#define BLUE 4
#define PINK 5
#define LT_BLUE 6
#define GREY 7
#define LT_GREY 8
#define BLACK 255
#define WHITE 0
#define FG LT_BLUE
#define BG BLUE
DIALOG the_dialog[] =
{
/* (dialog proc) (x) (y) (w) (h) (fg) (bg) (key)
(flags) (d1) (d2) (dp) (dp2) (dp3)
*/
{ d_clear_proc, 0, 0, 0, 0, FG, BG, 0, 0,
0, 0, NULL, NULL, NULL },
{ d_menu_proc, 0, 0, 0, 0, FG, BG, 0, 0,
0, 0, menu, NULL, NULL },
{ d_edit_proc, 80, 32, 512, 48, FG, BG, 0, 0,
sizeof(the_string)-1, 0, the_string, NULL, NULL },
{ d_button_proc, 80, 132, 160, 48, FG, BG, 't', 0,
0, 0, "&Toggle Me", NULL, NULL },
{ d_list_proc, 360, 100, 206, 206, FG, BG, 0, 0,
0, 0, listbox_getter, NULL, NULL },
{ change_font_proc, 80, 232, 160, 48, FG, BG, 'f',
D_EXIT, 0, 0, "Change &Font", NULL, NULL
},
{ NULL, 0, 0, 0, 0, FG, BG, 0, 0,
0, 0, NULL, NULL, NULL }
};
/* index of the listbox object in the dialog array */
#define LISTBOX_OBJECT 3
int main(int argc, char *argv[])
{
int ret;
char buf1[256], buf2[80], buf3[80];
/* initialise everything */
allegro_init();
install_keyboard();
install_mouse();
install_timer();
/* set the colors */
gui_fg_color=FG;
gui_bg_color=BG;
set_gfx_mode(GFX_AUTODETECT, 640, 480, 0, 0);
set_palette(desktop_pallete);
/* load the datafile */
replace_filename(buf1, argv[0], "example.dat", sizeof(buf1));
datafile = load_datafile(buf1);
if (!datafile) {
allegro_exit();
printf("Error loading %s!\n\n", buf1);
return 1;
}
/* store a copy of the default font */
original_font = font;
ret=do_dialog(the_dialog, -1);
/* and report the results */
sprintf(buf1, "do_dialog() returned %d", ret);
sprintf(buf2, "string is '%s'", the_string);
sprintf(buf3, "listbox selection is %d",
the_dialog[LISTBOX_OBJECT].d1);
alert(buf1, buf2, buf3, "OK", NULL, 0, 0);
unload_datafile(datafile);
return 0;
}
--Regards David. E. Goble
goble [AT] kin.net.au
http://www.kin.net.au/goble
Po Box 648 Kingscote, Kangaroo Island, SA 5223
- Raw text -