[comp.sys.amiga.programmer] Problems with Menu, MenuItem and IntuiText structure declarations

emcphers@manu.cs.vt.edu (Frank McPherson) (06/08/91)

I'm attempting to add a menu to a program I'm in the process of writing. 
I have run into a problem.  I can't get my initializations of those
structures past the compiler for some reason.  Here's what the 
declarations look like:

struct IntuiText quit_text =                              
   {                                                      
   0,1,                    /* FrontPen, BackPen */        
   JAM1,                   /* DrawMode */                 
   0,1,                    /* LeftEdge, TopEdge */        
   NULL,                   /* ITextFont */                
   (UBYTE *) "Quit",       /* IText */                    
   NULL                    /* NextText */                 
   };                                                     
struct MenuItem quit_item =                               
   {                                                      
   NULL,                   /* NextItem */                 
   0,0,                    /* LeftEdge, TopEdge */        
   150,10,                 /* Width, Height */            
   (ITEMTEXT|               /* Flags */                   
   ITEMENABLED|                                           
   HIGHNONE),                                             
   0L,                     /* MutualExclude */            
   (APTR) &quit_text,      /* ItemFill */                
   NULL,                   /* SelectFill */               
   NULL,                   /* Command (keyboard equiv.) */
   NULL,                   /* SubItem */                  
   0                       /* NextSelect */               
   };                                                     
struct Menu project_menu =                                
   {                                                      
   NULL,                   /* NextMenu */                 
   0,0,                    /* LeftEdge, TopEdge */        
   70,10,                  /* Width, Height */            
   MENUENABLED,            /* Flags */                    
   (UBYTE *) "Project",    /* MenuName */                 
   (APTR) &quit_item       /* FirstItem */                
   };

I'm trying to declare a menustrip with only one menu (called Project)
and a single selection (called Quit).  Both lines which have (APTR)
type casts give me the following error with SAS/C 5.10A:
Error 20: invalid constant expression

I'm stuck.  Any help will be appreciated.  Please reply via email to
avoid wasting bandwidth with what is probably a silly misake on my
part.  If you need more of the code in order to help, please ask me
for it.  

Thanks in advance for your help!

-- Frank McPherson		INTERNET: emcphers@manu.cs.vt.edu --

steve@wildcat.UUCP (Steve Holland) (06/16/91)

>In article <28728@know.pws.bull.com> emcphers@manu.cs.vt.edu (Frank McPherson) writes:
>
>I'm attempting to add a menu to a program I'm in the process of writing. 
>I have run into a problem.  I can't get my initializations of those
>structures past the compiler for some reason.  Here's what the 
>declarations look like:
>
>struct IntuiText quit_text =                              
>   {                                                      
>   0,1,                    /* FrontPen, BackPen */        
>   JAM1,                   /* DrawMode */                 
>   0,1,                    /* LeftEdge, TopEdge */        
>   NULL,                   /* ITextFont */                
>   (UBYTE *) "Quit",       /* IText */                    
>   NULL                    /* NextText */                 
>   };                                                     
>struct MenuItem quit_item =                               
>   {                                                      
>   NULL,                   /* NextItem */                 
>   0,0,                    /* LeftEdge, TopEdge */        
>   150,10,                 /* Width, Height */            
>   (ITEMTEXT|               /* Flags */                   
>   ITEMENABLED|                                           
>   HIGHNONE),                                             
>   0L,                     /* MutualExclude */            
>   (APTR) &quit_text,      /* ItemFill */                
            ^^^^^^^^^
>   NULL,                   /* SelectFill */               
>   NULL,                   /* Command (keyboard equiv.) */
>   NULL,                   /* SubItem */                  
>   0                       /* NextSelect */               
>   };                                                     
>struct Menu project_menu =                                
>   {                                                      
>   NULL,                   /* NextMenu */                 
>   0,0,                    /* LeftEdge, TopEdge */        
>   70,10,                  /* Width, Height */            
>   MENUENABLED,            /* Flags */                    
>   (UBYTE *) "Project",    /* MenuName */                 
>   (APTR) &quit_item       /* FirstItem */                
            ^^^^^^^^^
>   };
>
>I'm trying to declare a menustrip with only one menu (called Project)
>and a single selection (called Quit).  Both lines which have (APTR)
>type casts give me the following error with SAS/C 5.10A:
>Error 20: invalid constant expression
  You can't initialize to a variable in C. Rather, initialize it as NULL
and fill it in later.

>I'm stuck.  Any help will be appreciated.  Please reply via email to
>avoid wasting bandwidth with what is probably a silly misake on my
>part.  If you need more of the code in order to help, please ask me
>for it.  
>
>Thanks in advance for your help!
>
>-- Frank McPherson		INTERNET: emcphers@manu.cs.vt.edu --

--
 ----------->Steve Holland<-----------
 Internet: wildcat!steve@alphalpha.com| "I never let my schooling get in the
 USENET:  ...!alphalpha!wildcat!steve | way of my education" -Mark Twain

jleonard@pica.army.mil (06/20/91)

 

>In article <steve.4732@wildcat.UUCP> Steve Holland <wildcat!steve> writes:
>>In article <28728@know.pws.bull.com> emcphers@manu.cs.vt.edu (Frank McPherson) writes:
>>struct IntuiText quit_text =                              
>>   {                                                      
>>   0,1,                    /* FrontPen, BackPen */        
>>   JAM1,                   /* DrawMode */                 
>>   0,1,                    /* LeftEdge, TopEdge */        
>>   NULL,                   /* ITextFont */                
>>   (UBYTE *) "Quit",       /* IText */
               +++++++
This is your problem, try initialising an array of UBYTE to "QUIT"
and then assigning IText to the address of the UBYTE array.
                    
>>   NULL                    /* NextText */                 
>>   };                                                     
>>struct MenuItem quit_item =                               
>>   {                                                      
>>   NULL,                   /* NextItem */                 
>>   0,0,                    /* LeftEdge, TopEdge */        
>>   150,10,                 /* Width, Height */            
>>   (ITEMTEXT|               /* Flags */                   
>>   ITEMENABLED|                                           
>>   HIGHNONE),                                             
>>   0L,                     /* MutualExclude */            
>>   (APTR) &quit_text,      /* ItemFill */                
>           ^^^^^^^^^
>>   NULL,                   /* SelectFill */               
>>   NULL,                   /* Command (keyboard equiv.) */
>>   NULL,                   /* SubItem */                  
>>   0                       /* NextSelect */               
>>   };                                                     
>>struct Menu project_menu =                                
>>   {                                                      
>>   NULL,                   /* NextMenu */                 
>>   0,0,                    /* LeftEdge, TopEdge */        
>>   70,10,                  /* Width, Height */            
>>   MENUENABLED,            /* Flags */                    
>>   (UBYTE *) "Project",    /* MenuName */                 
              +++++++++++
Same as above
>>   (APTR) &quit_item       /* FirstItem */                
>            ^^^^^^^^^
>>   };
>>
>>I'm trying to declare a menustrip with only one menu (called Project)
>>and a single selection (called Quit).  Both lines which have (APTR)
>>type casts give me the following error with SAS/C 5.10A:
>>Error 20: invalid constant expression

This is complaining about you trying to stuff "Quit" and "Project" (which
are arrays of UBYTE) into a UBYTE *.

>  You can't initialize to a variable in C. Rather, initialize it as NULL
>and fill it in later.

You can initialise globals to anything that is known or prototyped at the time 
the variable/structure is initialised. This includes function pointers, 
constant expressions (provided type is correct) and pointers to 
variables/structures.

>>-- Frank McPherson		INTERNET: emcphers@manu.cs.vt.edu --

>--
> ----------->Steve Holland<-----------
> Internet: wildcat!steve@alphalpha.com| "I never let my schooling get in the
> USENET:  ...!alphalpha!wildcat!steve | way of my education" -Mark Twain

___________________________________________________________________________
|Jeff Leonard                              Usenet: jleonard@pica.army.mil |
|     My strength is as the strength of ten because my code is pure.      |
---------------------------------------------------------------------------