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 #include #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