Commit 3ef629da authored by ROOL's avatar ROOL 🤖
Browse files

Extra menu comments

Admin:
  Part of submission from Martin Avison. Not tagged.
parent 865c7c4a
...@@ -51,10 +51,10 @@ ...@@ -51,10 +51,10 @@
typedef struct menu__str { typedef struct menu__str {
wimp_menuhdr *m; /* the wimp-level menu that we've built. */ wimp_menuhdr *m; /* the wimp-level menu that we've built. */
int nitems; int nitems; /* items in menu */
void *entryspace; /* for sub-menus, and entries with >12 chars */ void *entryspace; /* for sub-menus, and entries with >12 chars */
int nbytes; int nbytes; /* bytes used in entryspace */
int maxentrywidth; int maxentrywidth; /* used to set menu width */
} menu__str; } menu__str;
/* concrete representation of abstract menu object */ /* concrete representation of abstract menu object */
...@@ -80,7 +80,7 @@ into the allocation of store and then the copying of data, so that the copy ...@@ -80,7 +80,7 @@ into the allocation of store and then the copying of data, so that the copy
into the larger buffer can share the latter half of the operation. */ into the larger buffer can share the latter half of the operation. */
static void menu__disposespace(menu m) static void menu__disposespace(menu m)
{ { /* Free two areas (header+icons & indirect data) for a complete menu */
if (m->m != 0) { if (m->m != 0) {
free(m->m); free(m->m);
m->m = 0; m->m = 0;
...@@ -173,7 +173,7 @@ static void menu__copyworkarea(menu__workarea *w /*in*/, menu m /*out*/) ...@@ -173,7 +173,7 @@ static void menu__copyworkarea(menu__workarea *w /*in*/, menu m /*out*/)
/* -------- Creating menu descriptions. -------- */ /* -------- Creating menu descriptions. -------- */
static void menu__initmenu(char *name, menu m /*out*/) static void menu__initmenu(char *name, menu m /*out*/)
{ { /* Create and initialise menu structure, block and entryspace */
int i; int i;
for (i=0; i<12; i++) { for (i=0; i<12; i++) {
m->m->title[i] = name[i]; m->m->title[i] = name[i];
...@@ -193,6 +193,7 @@ static int menu__max(int a, int b) ...@@ -193,6 +193,7 @@ static int menu__max(int a, int b)
static wimp_menuitem *menu__additem( static wimp_menuitem *menu__additem(
menu__workarea *w /*out*/, char *name, int length) menu__workarea *w /*out*/, char *name, int length)
/* Add an item to the end of a menu */
/* The returned pointer can be used to set flags, etc. */ /* The returned pointer can be used to set flags, etc. */
{ {
wimp_menuitem *ptr; wimp_menuitem *ptr;
...@@ -207,6 +208,7 @@ static wimp_menuitem *menu__additem( ...@@ -207,6 +208,7 @@ static wimp_menuitem *menu__additem(
/* in OS units, 16 per char. */ /* in OS units, 16 per char. */
} }
if (length <= 12) { if (length <= 12) {
/* item can be directly in the icon, so copy to icon block. */
int i; int i;
for (i=0; i<length; i++) {ptr->data.text[i] = name[i];} for (i=0; i<length; i++) {ptr->data.text[i] = name[i];}
if (length < 12) {ptr->data.text[length] = 0;} if (length < 12) {ptr->data.text[length] = 0;}
...@@ -214,10 +216,12 @@ static wimp_menuitem *menu__additem( ...@@ -214,10 +216,12 @@ static wimp_menuitem *menu__additem(
/* no room for the text: unlikely */ /* no room for the text: unlikely */
ptr = menu__itemptr(&w->m, w->m.nitems-1); /* fudge */ ptr = menu__itemptr(&w->m, w->m.nitems-1); /* fudge */
} else { } else {
/* space for length, so set up icon block to be indirect */
ptr->iconflags += wimp_INDIRECT; ptr->iconflags += wimp_INDIRECT;
ptr->data.indirecttext.buffer = ((char*)w->m.entryspace) + w->m.nbytes; ptr->data.indirecttext.buffer = ((char*)w->m.entryspace) + w->m.nbytes;
ptr->data.indirecttext.validstring = (char*) -1; ptr->data.indirecttext.validstring = (char*) -1;
ptr->data.indirecttext.bufflen = 100; ptr->data.indirecttext.bufflen = 100;
/* copy name into entryspace */
(void) memmove(((char*)w->m.entryspace) + w->m.nbytes, name, length); (void) memmove(((char*)w->m.entryspace) + w->m.nbytes, name, length);
w->m.nbytes += length + 1; w->m.nbytes += length + 1;
((char*)w->m.entryspace)[w->m.nbytes-1] = 0; /* terminate the string. */ ((char*)w->m.entryspace)[w->m.nbytes-1] = 0; /* terminate the string. */
...@@ -275,7 +279,6 @@ static void menu__getopt(parser *p) ...@@ -275,7 +279,6 @@ static void menu__getopt(parser *p)
} }
static void menu__getname (parser *p) static void menu__getname (parser *p)
{ /*Skip leading spaces*/ { /*Skip leading spaces*/
while (p->ch == ' ') while (p->ch == ' ')
p->ch = *p->s++; p->ch = *p->s++;
...@@ -407,7 +410,7 @@ static void menu__doextend(menu__workarea *w, char *descr) ...@@ -407,7 +410,7 @@ static void menu__doextend(menu__workarea *w, char *descr)
/* -------- Entrypoints. -------- */ /* -------- Entrypoints. -------- */
menu menu_new(char *name, char *descr) menu menu_new(char *name, char *descr)
{ { /* Create a new menu from the list of entries in descr */
menu m; menu m;
menu__workarea menu__w; menu__workarea menu__w;
wimp_menuitem *ptr; wimp_menuitem *ptr;
...@@ -431,7 +434,7 @@ menu menu_new(char *name, char *descr) ...@@ -431,7 +434,7 @@ menu menu_new(char *name, char *descr)
} }
void menu_dispose(menu *m, int recursive) void menu_dispose(menu *m, int recursive)
{ { /* Free the storage associated with a menu - and optionally submenus. */
if (recursive != 0) { if (recursive != 0) {
menu *a = (menu*) ((*m)->entryspace); menu *a = (menu*) ((*m)->entryspace);
while (1) { while (1) {
...@@ -445,7 +448,7 @@ void menu_dispose(menu *m, int recursive) ...@@ -445,7 +448,7 @@ void menu_dispose(menu *m, int recursive)
} }
void menu_extend(menu m, char *descr) void menu_extend(menu m, char *descr)
{ { /* Add one (or more) items from descr to existing menu. */
menu__workarea menu__w; menu__workarea menu__w;
menu__copytoworkarea(m, &menu__w); menu__copytoworkarea(m, &menu__w);
menu__doextend(&menu__w, descr); menu__doextend(&menu__w, descr);
...@@ -453,7 +456,7 @@ void menu_extend(menu m, char *descr) ...@@ -453,7 +456,7 @@ void menu_extend(menu m, char *descr)
} }
void menu_setflags(menu m, int entry, int tick, int fade) void menu_setflags(menu m, int entry, int tick, int fade)
{ { /* Set/Unset tick and fade flags on specific menu entry */
wimp_menuitem *p; wimp_menuitem *p;
if (entry == 0) {return;} if (entry == 0) {return;}
if (entry > m->nitems) {return;} if (entry > m->nitems) {return;}
...@@ -515,7 +518,7 @@ void menu_make_sprite(menu m, int entry, char *spritename) ...@@ -515,7 +518,7 @@ void menu_make_sprite(menu m, int entry, char *spritename)
void menu_submenu(menu m, int place, menu submenu) void menu_submenu(menu m, int place, menu submenu)
{ { /* Link a submenu to an entry in a parent menu */
int i; int i;
wimp_menuitem *p = menu__itemptr(m, place-1); wimp_menuitem *p = menu__itemptr(m, place-1);
menu__workarea menu__w; menu__workarea menu__w;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment