Path: utzoo!utgpu!jarvis.csri.toronto.edu!mailrus!ames!apple!sun-barr!texsun!texbell!attctc!bobc From: bobc@attctc.Dallas.TX.US (Bob Calbridge) Newsgroups: comp.lang.c Subject: function pointer help needed (again) Keywords: declarations Message-ID: <8695@attctc.Dallas.TX.US> Date: 18 Jul 89 01:19:58 GMT Distribution: na Organization: The Unix(R) Connection, Dallas, Texas Lines: 118 Well, here I am again. Stuck in that twilight zone where I know just enough to get me into trouble. What seems obvious isn't. I should mention that I am using Turbo C for this. Here's the problem. I'm attempting to use the windowing functions of a library called CXL to design a utility program. The function I'm having problems with are is called "wmenuitem". Its declaration is: int _Cdecl wmenuitem(int wrow,int wcol,char *str,int schar,int tagid, int fmask,void (_Cdecl *select)(void), unsigned hotkey,int help); Following is an extract of the components of the function: ------------------------------------------------------------------------ NAME wmenuitem DESCRIPTION Defines a menu item. This is one of the 4 functions that are required to process a menu. SYNOPSIS #include "cxlwin.h" int wmenuitem(int wrow,int wcol,char *str,int schar,int tagid, int fmask,void (*select)(void),unsigned hotkey, int help); INPUTS wrow - window row wcol - window column str - address of menu item string schar - quick selection character tagid - unique tag identifier of this particular menu item. This is the value that wmenuget() returns upon its selection. fmask - feature mask. Allows you to define one or more additional features for this menu item. Valid features are: M_HASPD - has a pull-down menu attached M_NOSEL - menu item is not selectable M_CLOSE - close this menu when item is selected M_CLALL - close all menus when item is selected More than one feature can be specified by using the C bitwise OR operator '|'. For example, if this item has a pull-down menu attached and it is not selectable, you would specify (M_HASPD|M_NOSEL). Specify 0 if you don't want to define an fmask for this item. select - address of the function to call upon selection of this menu item. Specify NULL if you don't want to define a select function. hotkey - keycode of the key, which when pressed, will select this menu item's function from anywhere within the menu structure. This allows the user to call this menu item's select function even if not currently processing its menu. See Appendix B for a list of keycodes that you can use. Specify 0 if you don't want to define a hotkey. help - help category number to be associated with this item. Specify 0 is you don't want to define a help category for this item. RETURN VALUE W_NOERROR - no error W_NOMNUBEG - no begin of menu specified. See wmenubeg(). W_ALLOCERR - memory allocation error EXAMPLE wmenuitem(0,0,"Load F3",'L',1,M_CLOSE,load_file,0x3d00,0); ------------------------------------------------------------------------ Now, here's a piece from my program: wmenubeg (27,9,53,20,5,0,_BLUE|WHITE,NULL); wmenuitem (1,2,"Build a configuration",'B',1,0,build_config(),0,0); wmenuitem (2,2,"Change a configuration",'C',2,0,change_config(),0,0); wmenuitem (3,2,"Convert a file",'F',3,0,conv_file(),0,0); wmenuend (1, M_VERT|M_PD|M_SAVE, 0, 0, _BLUE+WHITE, RED, LGREY, YELLOW); wmenuget (); There are several problems that arise from my code depending on what tact I take. In the form above the compiler reports "Non-portable pointer conversion". This is more of a warning than an error. The cursor positions itself after the final '0' in the parameters. If, per the example, I leave the '()'s off the function in the select parameter it says "Undefined symbol 'build_config'". In this case the cursor is positioned following the function name "build_config". In other instances, which I have been unable to reproduce after having fiddled with the code, produce error messages that specify that the error was produced in "select" and another message that demands a memory address. The structure of the code above is intended to produce a bar menu which acts upon the menuitems when selected. In the code segment above, with the non-portable pointer conversion, the first menu item is initiated without producing a window. Can anyone tell me (1) in what way my code differs from the example, that I need to put the "()"s after the function name and (2) what the problem is with the non-portable pointer conversion, does it cause the code to run improperly and should I worry about it. Sorry for the band width but I'm still learning. Thanks. Bob the -- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- = I know it's petty.......... = - But I have to justify my salary! - =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=