delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/2003/09/23/15:47:48

X-Authentication-Warning: delorie.com: mail set sender to djgpp-bounces using -f
From: degoble AT gtech (David. E. Goble)
Newsgroups: comp.os.linux.development.apps,comp.os.msdos.djgpp
Subject: help with allegro - no idea
Date: Mon, 03 Dec 2001 00:13:23 GMT
Organization: Gtech.Computing
Message-ID: <3c09dcd6.14872259@gtech>
X-Newsreader: Forte Free Agent 1.21/32.243
NNTP-Posting-Host: 203.48.5.216
X-Trace: 4 Dec 2001 12:31:58 +1050, 203.48.5.216
Lines: 220
To: djgpp AT delorie DOT com
DJ-Gateway: from newsgroup comp.os.msdos.djgpp
Reply-To: djgpp AT delorie DOT com

Hi All;

I have no idea what Iam doing, so if you could help me, please.

Why is the code not working.

What I want is the horziontal menu to be displayed until the user
selects file|quit and not to quit when the user selects @|about.

I have looked at the allegro docs, but as I said, I have no idea what
Iam doing.
 
/* test of using allegro lib 
    
	gcc foo.c -o foo.exe -lalleg 
*/

#include <stdlib.h>
#include <stdio.h>

#include "allegro.h"
#include "example.h"

#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

/* we need to load example.dat to access the big font */
DATAFILE *datafile;

/* index of the listbox object in the dialog array */
#define LISTBOX_OBJECT 4

/* 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]; 
}

int credits_proc(void)
{
char buf1[256], buf2[80], buf3[80];

/* set text lines for alert */
   sprintf(buf3, "Writtren By David. E. Goble");
   sprintf(buf2, "");
   sprintf(buf1, "Kangaroo Island Pistol Club");
/* display alert */
   alert(buf1, buf2, buf3, "OK", NULL, 0, 0);
return 999;
}

int quit_proc(void)
{   
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},
   {"&Save",                NULL,           NULL, 0, NULL},
   {"Save &As",             NULL,           NULL, 0, NULL},
   {"",                     NULL,           NULL, 0, NULL},
   {"&Quit",                quit_proc,      NULL, 0, NULL},
   {NULL,                   NULL,           NULL, 0, NULL}
};

MENU edit_menu[]=
{
   {"&Undo",                NULL,           NULL, 0, NULL},
   {"",                     NULL,           NULL, 0, NULL},
   {"Cu&t",                 NULL,           NULL, 0, NULL},
   {"&Copy",                NULL,           NULL, 0, NULL},
   {"&Paste",               NULL,           NULL, 0, NULL},
   {"De&lete",              NULL,           NULL, 0, NULL},
   {NULL,                   NULL,           NULL, 0, NULL}
};

MENU menu[]=
{
   {"@",                    NULL,           apple_menu,  0, NULL},
   {"&File",                NULL,           file_menu,   0, NULL},
   {"&Edit",                NULL,           edit_menu,   0, NULL},
   {NULL,                   NULL,           NULL,        0, NULL}
};
 
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  }
};

int main(int argc, char *argv[])
{
char buf1[256], buf2[80], buf3[80];
int ret;

/* 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;

    do
        {
        ret=do_dialog(the_dialog, -1);
        printf("in loop ret=%d\n",ret);
        }
   while(ret!=D_CLOSE);
   printf("out of loop ret=%d\n",ret);
/* set text lines for alert */
/*
   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); */
/* display alert */
/*    alert(buf1, buf2, buf3, "OK", NULL, 0, 0); */
    unload_datafile(datafile);
return 0;
}

END_OF_MAIN();

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019