From: MagerValp (MagerValp_at_cling.gu.se)
Date: 2002-12-03 18:34:05
cc65 results:
NewMenu returns: 1953
NewMenu()
menu: 1953
->visible: 0
->numitems: 0
->current: 0
->title: 0
->firstitem: 0
SetMenuTitle: 1953
title: 1785
->title: 1785
SetMenuTitle()
->visible: 0
->numitems: 0
->current: 0
->title: 1785
->firstitem: 0
Firstitem is NULL
item malloced at 1959
Firstitem is 1959
Firstitem is still 1959
after item->next firstitem is 59 <- hey now
Firstitem is still 59
Firstitem is still 59
Firstitem is still 59
Firstitem is still 59
gcc results:
NewMenu returns: a0100e0
NewMenu()
menu: a0100e0
->visible: 0
->numitems: 0
->current: 0
->title: 0
->firstitem: 0
SetMenuTitle: a0100e0
title: 4014e6
->title: 4014e6
SetMenuTitle()
menu: a0100e0
->visible: 0
->numitems: 0
->current: 0
->title: 4014e6
->firstitem: 0
Firstitem is NULL
item malloced at a0104f8
Firstitem is a0104f8
Firstitem is still a0104f8
after item->next firstitem is a0104f8
Firstitem is still a0104f8
Firstitem is still a0104f8
Firstitem is still a0104f8
Firstitem is still a0104f8
test code:
#include <stdlib.h>
#include <stdio.h>
typedef enum itemstates {
ISTATE_NORMAL,
ISTATE_INACTIVE
} ItemState;
typedef struct item {
struct item *next;
unsigned char id;
unsigned char *name;
ItemState state;
} Item;
typedef struct menu {
unsigned char visible;
unsigned char numitems;
unsigned char current;
unsigned char *title;
Item *firstitem;
} Menu;
void DebugMenu(Menu *menu, unsigned char *s);
Menu *NewMenu(void);
void SetMenuTitle(Menu *menu, unsigned char *title);
char AddMenuItem(Menu *menu, unsigned char id, ItemState state, unsigned char *name);
void DebugMenu(Menu *menu, unsigned char *s) {
printf("%s\r\n", s);
printf("menu: %x\r\n", menu);
printf("->visible: %d\r\n", menu->visible);
printf("->numitems: %d\r\n", menu->numitems);
printf("->current: %d\r\n", menu->current);
printf("->title: %x\r\n", menu->title);
printf("->firstitem: %x\r\n", menu->firstitem);
}
Menu *NewMenu(void) {
Menu *menu;
if ((menu = malloc(sizeof(menu))) == NULL) {
return(NULL);
}
menu->visible = 0;
menu->numitems = 0;
menu->current = 0;
menu->title = NULL;
menu->firstitem = NULL;
printf("NewMenu returns: %x\r\n", menu);
return(menu);
}
void SetMenuTitle(Menu *menu, unsigned char *title) {
printf("SetMenuTitle: %x\r\n", menu);
printf("title: %x\r\n", title);
menu->title = title;
printf("->title: %x\r\n", menu->title);
}
char AddMenuItem(Menu *menu, unsigned char id, ItemState state, unsigned char *name) {
Item *item;
if (menu->firstitem == NULL) {
printf("Firstitem is NULL\r\n");
if ((menu->firstitem = malloc(sizeof(item))) == NULL) {
return(-1);
}
item = menu->firstitem;
printf("item malloced at %x\r\n", item);
printf("Firstitem is %x\r\n", menu->firstitem);
} else {
printf("Firstitem is %x, finding last\r\n", menu->firstitem);
item = menu->firstitem;
while (item->next) {
item = item->next;
}
printf("Lastitem is %x\r\n", item);
if ((item->next = malloc(sizeof(item))) == NULL) {
return(-1);
}
printf("item malloced at %x\r\n", item);
item = item->next;
}
printf("Firstitem is still %x\r\n", menu->firstitem);
item->next = NULL; <- something's wrong here
printf("after item->next firstitem is %x\r\n", menu->firstitem);
item->id = id;
printf("Firstitem is still %x\r\n", menu->firstitem);
item->name = name;
printf("Firstitem is still %x\r\n", menu->firstitem);
item->state = state;
printf("Firstitem is still %x\r\n", menu->firstitem);
++(menu->numitems);
printf("Firstitem is still %x\r\n", menu->firstitem);
return(0);
}
void main(void) {
Menu *menu;
menu = NewMenu();
DebugMenu(menu, "NewMenu()");
SetMenuTitle(menu, "Main Menu");
DebugMenu(menu, "SetMenuTitle()");
AddMenuItem(menu, 13, ISTATE_NORMAL, "File Menu...");
}
--
___ . . . . . + . . o
_|___|_ + . + . + . Per Olofsson, arkadspelare
o-o . . . o + MagerValp_at_cling.gu.se
- + + . http://www.cling.gu.se/~cl3polof/
----------------------------------------------------------------------
To unsubscribe from the list send mail to majordomo_at_musoftware.de with
the string "unsubscribe cc65" in the body(!) of the mail.
This archive was generated by hypermail 2.1.3 : 2002-12-03 18:34:52 CET