X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=include%2Fgeos%2Fgstruct.h;h=9e5f0ddda0212786cd7641089b45019b1fae5ef5;hb=5d73f28a854b7561c4f7799771055853655c0497;hp=ad32290fd37706829ff3ad7803fb1af770d48411;hpb=dd6e59e1cc863b919a27259d096371efa74a402a;p=cc65 diff --git a/include/geos/gstruct.h b/include/geos/gstruct.h index ad32290fd..9e5f0ddda 100644 --- a/include/geos/gstruct.h +++ b/include/geos/gstruct.h @@ -1,142 +1,174 @@ /* GEOS structs - ported to small C on 25-27.10.1999 by Maciej 'YTM/Elysium' Witkowiak */ +/* + apart from initializing data, structures below can be used to + speed up access to data and let cc65 to generate better code + e.g. if you have menu defined as TopMenu and you want to change the number of + menu items use: + ((struct menu*)&TopMenu)->number=newNumber; + This will be translated into single lda/sta pair +*/ + #ifndef _GSTRUCT_H #define _GSTRUCT_H -struct f_date { /* date in filedesctiptor */ - char f_year; - char f_month; - char f_day; - char f_hour; - char f_minute; +typedef void (*void_func) (void); + +struct s_date { /* system date & time */ + char s_year; + char s_month; + char s_day; + char s_hour; + char s_minutes; + char s_seconds; +}; + +struct tr_se { /* track and sector */ + char track; + char sector; }; -struct s_date { /* system date & time */ - char s_year; - char s_month; - char s_day; - char s_hour; - char s_minutes; - char s_seconds; +struct fileheader { /* header block (like fileHeader) */ + struct tr_se n_block; + char icon_desc[3]; + char icon_pic[63]; + char dostype; + char type; + char structure; + unsigned load_address; + unsigned end_address; + unsigned exec_address; + char class_name[19]; + char column_flag; + char author[63]; + char note[96]; }; -struct tr_se { /* track and sector */ - char track; - char sector; +#ifdef __GEOS_CBM__ + +struct f_date { /* date in filedesctiptor */ + char f_year; + char f_month; + char f_day; + char f_hour; + char f_minute; }; -struct fileheader { /* header block (like fileHeader) */ - struct tr_se n_block; - char icon_desc[3]; - char icon_pic[63]; - char dostype; - char type; - char structure; - int load_address; - int end_address; - int exec_address; - char class_name[19]; - char column_flag; - char author[63]; - char note[96]; +struct filehandle { /* filehandle in directory sectors */ + char dostype; /* or in dirEntryBuf */ + struct tr_se n_block; + char name[16]; + struct tr_se header; + char structure; + char type; + struct f_date date; + unsigned size; }; -struct filehandle { /* filehandle in directory sectors */ - char dostype; /* or in dirEntryBuf */ - struct tr_se n_block; - char name[16]; - struct tr_se header; - char structure; - char type; - struct f_date date; - int size; +#else /* #ifdef __GEOS_CBM__ */ + +struct f_date { /* date in filedesctiptor */ + unsigned f_day:5; + unsigned f_month:4; + unsigned f_year:7; + char f_minute; + char f_hour; }; -struct pixel { /* describes point */ - int x; - char y; +struct filehandle { /* filehandle in directory sectors */ + unsigned name_len:4; /* or in dirEntryBuf */ + unsigned structure:4; + char name[15]; + char type; + struct tr_se n_block; + unsigned size; + char byte_size[3]; + struct f_date date; + char version; + char min_version; + char access; + struct tr_se header; + struct f_date mod_date; + struct tr_se dir_head; }; -struct fontdesc { /* describes font */ - char baseline; - char width; - char height; - char *index_tbl; - char *data_ptr; +#endif /* #ifdef __GEOS_CBM__ */ + +struct pixel { /* describes point */ + unsigned x; + char y; }; -struct window { /* describes screen region */ - char top; - char bot; - int left; - int right; +struct fontdesc { /* describes font */ + char baseline; + char width; + char height; + char *index_tbl; + char *data_ptr; }; -struct VLIR_info { /* VLIR information */ - char curRecord; /* currently only used in VLIR */ - char usedRecords; /* as system info (curRecord is mainly of your interest */ - char fileWritten; - int fileSize; +struct window { /* describes screen region */ + char top; + char bot; + unsigned left; + unsigned right; }; -struct process { /* process info, declare table of that type */ - int pointer; /* (like: struct process proctab[2]=... */ - int jiffies; /* last entry HAVE TO BE {0,0} */ +struct VLIR_info { /* VLIR information */ + char curRecord; /* currently only used in VLIR */ + char usedRecords; /* as system info (curRecord is mainly of your interest */ + char fileWritten; + unsigned fileSize; }; +struct process { /* process info, declare table of that type */ + unsigned pointer; /* (like: struct process proctab[2]=... */ + unsigned jiffies; /* last entry HAVE TO BE {0,0} */ +}; -struct iconpic { /* icon/encoded bitmap description */ - char *pic_ptr; /* ptr to a photo scrap (or encoded bitmap) */ - char x; /* position in cards (*8 pixels) */ - char y; - char width; /* in cards */ - char heigth; /* in lines (pixels) */ +struct iconpic { /* icon/encoded bitmap description */ + char *pic_ptr; /* ptr to a photo scrap (or encoded bitmap) */ + char x; /* position in cards (*8 pixels) */ + char y; + char width; /* in cards */ + char heigth; /* in lines (pixels) */ }; -struct icondef { /* icon definition for DoIcons */ - char *pic_ptr; /* ptr to a photo scrap (or encoded bitmap) */ - char x; /* position in cards (*8 pixels) */ - char y; - char width; /* of icon (in cards) */ - char heigth; /* of icon in lines (pixels) */ - int proc_ptr; /* pointer to function handling that icon */ +struct icondef { /* icon definition for DoIcons */ + char *pic_ptr; /* ptr to a photo scrap (or encoded bitmap) */ + char x; /* position in cards (*8 pixels) */ + char y; + char width; /* of icon (in cards) */ + char heigth; /* of icon in lines (pixels) */ + unsigned proc_ptr; /* pointer to function handling that icon */ }; struct icontab { - char number; /* number of declared icons */ - struct pixel mousepos; /* position of mouse after DoIcons */ - struct icondef *tab; /* table of size declared by icontab.number */ + char number; /* number of declared icons */ + struct pixel mousepos; /* position of mouse after DoIcons */ + struct icondef tab[]; /* table of size declared by icontab.number */ }; -/* - structures below might be used to speed up access to own menus - e.g. if you have menu defined as TopMenu and you want to change the number of - menu items use: - ((struct menu*)&TopMenu)->number=newNumber; - This will allow cc65 to emit better code. -*/ - struct menuitem { - char *name; - char type; - int rest; /* may be ptr to function, or if submenu ptr to struct menu */ + char *name; + char type; + void *rest; /* may be ptr to function, or ptr to struct menu (submenu) */ }; struct menu { - struct window size; - char number; - struct menuitem *items; + struct window size; + char number; + struct menuitem items[]; }; -struct inittab { /* use struct inittab mytab[n] for initram */ - int ptr; /* ptr to 1st byte */ - char number; /* number of following bytes */ - char *values; /* actual string of bytes */ +struct inittab { /* use struct inittab mytab[n] for initram */ + unsigned ptr; /* ptr to 1st byte */ + char number; /* number of following bytes */ + char values[]; /* actual string of bytes */ }; #endif