erose@hydro.Stanford.EDU (Eric Rose) (06/28/91)
I seem to have found a problem storing a pointer with a Panel using XV_KEY_DATA. The manual does not explicitly state that this is possible for all xview objects, but then again is does not give any reason why this is not possible. I am running xview 2.0 (I think) under openwin 2.0 on a Sparc 2, SunOS 4.1.1 The code prints the string correctly while in main, but in the button callback prints garbage for the string. ------------------------------------------------------------------------------- #include <xview/xview.h> #include <xview/frame.h> #include <xview/panel.h> #include <stdio.h> Frame frame; Panel panel; char *string = "Hello World"; void button_cb(); main(argc,argv) int argc; char *argv[]; { xv_init(XV_INIT_ARGC_PTR_ARGV,&argc,argv,NULL); frame = (Frame)xv_create(NULL, FRAME, FRAME_LABEL, "Test", XV_WIDTH, 200, XV_HEIGHT, 100, NULL); printf("The string is: \"%s\"\n",string); panel = (Panel)xv_create(frame, PANEL, XV_KEY_DATA, 1, string, NULL); printf("The string still is: \"%s\"\n",string); xv_create(panel, PANEL_BUTTON, PANEL_LABEL_STRING, "Verify & Quit", PANEL_NOTIFY_PROC, button_cb, NULL); xv_main_loop(frame); exit(0); } void button_cb(item,event) Panel_item item; Event *event; { printf("The string now is \"%s\"\n",(char*)xv_get(panel,XV_KEY_DATA,1)); xv_destroy_safe(frame); } -------------------------------------------------------------------------------
naftaly@dazixco.ingr.com (Naftaly Stramer) (06/28/91)
In article <1991Jun27.221718.18172@leland.Stanford.EDU>, erose@hydro.Stanford.EDU (Eric Rose) writes: |> |> |> I seem to have found a problem storing a pointer with a Panel using |> XV_KEY_DATA. The manual does not explicitly state that this is possible |> for all xview objects, but then again is does not give any reason why |> this is not possible. |> |> I am running xview 2.0 (I think) under openwin 2.0 on a Sparc 2, SunOS 4.1.1 |> |> The code prints the string correctly while in main, but in the button callback |> prints garbage for the string. |> |> ------------------------------------------------------------------------------- If you attach the XV_KEY_DATA to the button it will work. panel = (Panel)xv_create(frame, PANEL, NULL); printf("The string still is: \"%s\"\n",string); xv_create(panel, PANEL_BUTTON, PANEL_LABEL_STRING, "Verify & Quit", PANEL_NOTIFY_PROC, button_cb, XV_KEY_DATA, 1, string, NULL); xv_main_loop(frame); exit(0); } void button_cb(item,event) Panel_item item; Event *event; { printf("The string now is \"%s\"\n",(char*)xv_get(item,XV_KEY_DATA,1)); xv_destroy_safe(frame); } -- Naftaly Stramer (303)581-1477 DAZIX, An Intergraph Company Internet: naftaly@dazixco.ingr.com 6285 Lookout Road UUCP: ..uunet!ingr!dazixco!naftaly Boulder, CO 80301 Please excuse my english -- Naftaly Stramer (303)581-1477 DAZIX, An Intergraph Company Internet: naftaly@dazixco.ingr.com 6285 Lookout Road UUCP: ..uunet!ingr!dazixco!naftaly Boulder, CO 80301 Please excuse my english
helvie@EBay.Sun.COM (Fred Helvie) (06/28/91)
when applying XV_KEY_DATA, the key specified should be a unique number. A number >= 100 should be safe. The reason for this is that the toolkit utilizes some of the lower keys internally. So try: #define MY_KEY 100 panel = (Panel)xv_create(frame, PANEL, XV_KEY_DATA, MY_KEY, string, NULL); printf("The string now is \"%s\"\n",(char*)xv_get(panel,XV_KEY_DATA,MY_KEY)); Fred Helvie Sun Education - Milpitas, CA.
chuck@pluto.Harris-ATD.com (Chuck Musciano) (06/29/91)
In article <1991Jun27.221718.18172@leland.Stanford.EDU>, erose@hydro.Stanford.EDU (Eric Rose) writes: > I seem to have found a problem storing a pointer with a Panel using > XV_KEY_DATA. The manual does not explicitly state that this is possible > for all xview objects, but then again is does not give any reason why > this is not possible. > > I am running xview 2.0 (I think) under openwin 2.0 on a Sparc 2, SunOS 4.1.1 > > The code prints the string correctly while in main, but in the button callback > prints garbage for the string. > > panel = (Panel)xv_create(frame, PANEL, > XV_KEY_DATA, 1, string, > NULL); It is not a good idea to use arbitrary key values with XV_KEY_DATA. I think the toolkit uses a few keys for its own use, and you may be hitting those keys. A better way to do this: Attr_attribute THE_STRING; THE_STRING = xv_unique_key(); panel = (Panel)xv_create(frame, PANEL, XV_KEY_DATA, THE_STRING, string, NULL); and then later printf("The string is %s\n", xv_get(panel, XV_KEY_DATA, THE_STRING)); -- Chuck Musciano ARPA : chuck@trantor.harris-atd.com Harris Corporation Usenet: ...!uunet!x102a!trantor!chuck PO Box 37, MS 3A/1912 AT&T : (407) 727-6131 Melbourne, FL 32902 FAX : (407) 729-3363 A good newspaper is never good enough, but a lousy newspaper is a joy forever. -- Garrison Keillor