home *** CD-ROM | disk | FTP | other *** search
- /*----------------------------------------------------------------------*
- GenMenus.c version 3.0 - © Copyright 1991 Jaba Development
-
- Author : Jan van den Baard
- Purpose: Generating the menu source code.
- *----------------------------------------------------------------------*/
- extern struct ge_prefs prefs;
- extern struct MyMenu *MenuStrip;
- extern struct MyMenuItem dummy;
- extern UWORD SubCount, ItemCount;
-
- extern UBYTE MenuLabel[32];
- extern UBYTE ItemLabel[32];
- extern UBYTE SubLabel[32];
-
- #define STAT (prefs.static_structures)
- #define NOFLAGS (prefs.no_flags)
-
- void WriteCIText( BPTR file, struct IntuiText *itext )
- {
- WriteFormat(file," %ld,%ld,",itext->FrontPen,itext->BackPen);
- WriteDrMd(file,itext->DrawMode,FALSE);
- WriteFormat(file,",%ld,%ld,NULL,(UBYTE *)\"%s\",NULL,\n",itext->LeftEdge,itext->TopEdge,itext->IText);
- }
-
- void WriteAsmIText( BPTR file, struct IntuiText *itext, UWORD inum, BOOL sub )
- {
- if(sub)
- WriteFormat(file,"%sText%ld:\n",&SubLabel[0],inum);
- else
- WriteFormat(file,"%sText%ld:\n",&ItemLabel[0],inum);
-
- WriteFormat(file," DC.B %ld,%ld,",itext->FrontPen,itext->BackPen);
- if(NOFLAGS)
- WriteFormat(file,"$%0.20lx,0\n",itext->DrawMode);
- else {
- WriteDrMd(file,itext->DrawMode,TRUE);
- WriteFormat(file,",0\n");
- }
-
- WriteFormat(file," DC.W %ld,%ld\n DC.L 0\n",itext->LeftEdge,itext->TopEdge,itext->IText);
-
- if(sub)
- WriteFormat(file," DC.L %sIText%ld,0\n\n",&SubLabel[0],inum);
- else
- WriteFormat(file," DC.L %sIText%ld,0\n\n",&ItemLabel[0],inum);
-
- if(sub)
- WriteFormat(file,"%sIText%ld:\n",&SubLabel[0],inum);
- else
- WriteFormat(file,"%sIText%ld:\n",&ItemLabel[0],inum);
-
- WriteFormat(file," DC.B '%s',0\n",itext->IText);
- WriteFormat(file," CNOP 0,2\n\n");
-
- }
-
- ULONG INum( struct MyMenu *menu )
- {
- struct MyMenu *tmp;
- struct MyMenuItem *it;
- ULONG inum = 0L;
-
- for(tmp = MenuStrip; tmp != menu; tmp = tmp->NextMenu) {
- for(it = tmp->FirstItem; it; it = it->NextItem)
- if(it != &dummy)
- inum++;
- }
- return(inum);
- }
-
- ULONG SNum( struct MyMenuItem *sub )
- {
- struct MyMenu *tmp;
- struct MyMenuItem *it, *sb;
- ULONG snum = 0L;
-
- for(tmp = MenuStrip; tmp; tmp = tmp->NextMenu) {
- for(it = tmp->FirstItem; it; it = it->NextItem) {
- if(it->SubItem) {
- for(sb = it->SubItem; sb; sb = sb->NextItem) {
- if(sb == sub) goto gotIt;
- snum++;
- }
- }
- }
- }
- gotIt:
- return(snum);
- }
-
- void WriteCItem( BPTR file, struct MyMenuItem *item, UWORD tnum , BOOL sub)
- {
- struct MyMenuItem *tmp;
- ULONG flags;
-
- tmp = item;
- flags = (ULONG)tmp->Flags;
-
- if(sub) {
- if(tmp->NextItem)
- WriteFormat(file," &%s[%ld],",&SubLabel[0],tnum+1);
- else
- WriteFormat(file," NULL,");
- } else {
- if(tmp->NextItem)
- WriteFormat(file," &%s[%ld],",&ItemLabel[0],tnum+1);
- else
- WriteFormat(file," NULL,");
- }
-
- WriteFormat(file,"%ld,%ld,%ld,%ld,",tmp->LeftEdge,tmp->TopEdge,tmp->Width,tmp->Height);
-
- if(TestBits(flags,ITEMENABLED))
- WriteFormat(file,"ITEMENABLED+");
- if(TestBits(flags,HIGHNONE))
- WriteFormat(file,"HIGHNONE+");
- else if(TestBits(flags,HIGHCOMP))
- WriteFormat(file,"HIGHCOMP+");
- else
- WriteFormat(file,"HIGHBOX+");
- if(TestBits(flags,CHECKIT))
- WriteFormat(file,"CHECKIT+");
- if(TestBits(flags,ITEMTEXT))
- WriteFormat(file,"ITEMTEXT+");
- if(TestBits(flags,COMMSEQ))
- WriteFormat(file,"COMMSEQ+");
- if(TestBits(flags,MENUTOGGLE))
- WriteFormat(file,"MENUTOGGLE+");
- if(TestBits(flags,CHECKED))
- WriteFormat(file,"CHECKED+");
- Seek(file,-1L,OFFSET_CURRENT);
- WriteFormat(file,",");
- WriteFormat(file,"%ld,",tmp->MutualExclude);
- if(sub)
- WriteFormat(file,"(APTR)&%sText[%ld],",&SubLabel[0],tnum);
- else
- WriteFormat(file,"(APTR)&%sText[%ld],",&ItemLabel[0],tnum);
- if(TestBits(flags,COMMSEQ))
- WriteFormat(file,"NULL,%ld,",tmp->Command);
- else
- WriteFormat(file,"NULL,0,");
- if(NOT sub AND item->SubItem)
- WriteFormat(file,"&%s[%ld],0,\n",&SubLabel[0],SNum(item->SubItem));
- else
- WriteFormat(file,"NULL,0,\n");
- }
-
- void WriteAsmItem( BPTR file, struct MyMenuItem *item, UWORD tnum , BOOL sub)
- {
- struct MyMenuItem *tmp;
- ULONG flags;
-
- tmp = item;
- flags = (ULONG)tmp->Flags;
-
- if(sub) {
- WriteFormat(file,"%s%ld:\n",&SubLabel[0],tnum);
- if(tmp->NextItem)
- WriteFormat(file," DC.L %s%ld\n",&SubLabel[0],tnum+1);
- else
- WriteFormat(file," DC.L 0\n");
- } else {
- WriteFormat(file,"%s%ld:\n",&ItemLabel[0],tnum);
- if(tmp->NextItem)
- WriteFormat(file," DC.L %s%ld\n",&ItemLabel[0],tnum+1);
- else
- WriteFormat(file," DC.L 0\n");
- }
-
- WriteFormat(file," DC.W %ld,%ld,%ld,%ld\n",tmp->LeftEdge,tmp->TopEdge,tmp->Width,tmp->Height);
- WriteFormat(file," DC.W ");
- if(NOFLAGS) {
- if(TestBits((ULONG)item->SpecialFlags,ITEMENABLED))
- WriteFormat(file,"$%0.4lx\n",item->Flags+ITEMENABLED);
- else
- WriteFormat(file,"$%0.4lx\n",item->Flags);
- } else {
- if(TestBits(flags,ITEMENABLED))
- WriteFormat(file,"ITEMENABLED+");
- if(TestBits(flags,HIGHNONE))
- WriteFormat(file,"HIGHNONE+");
- else if(TestBits(flags,HIGHCOMP))
- WriteFormat(file,"HIGHCOMP+");
- else
- WriteFormat(file,"HIGHBOX+");
- if(TestBits(flags,CHECKIT))
- WriteFormat(file,"CHECKIT+");
- if(TestBits(flags,ITEMTEXT))
- WriteFormat(file,"ITEMTEXT+");
- if(TestBits(flags,COMMSEQ))
- WriteFormat(file,"COMMSEQ+");
- if(TestBits(flags,MENUTOGGLE))
- WriteFormat(file,"MENUTOGGLE+");
- if(TestBits(flags,CHECKED))
- WriteFormat(file,"CHECKED+");
- Seek(file,-1L,OFFSET_CURRENT);
- WriteFormat(file,"\n");
- }
-
- WriteFormat(file," DC.L %ld\n",tmp->MutualExclude);
- if(sub)
- WriteFormat(file," DC.L %sText%ld,0\n",&SubLabel[0],tnum);
- else
- WriteFormat(file," DC.L %sText%ld,0\n",&ItemLabel[0],tnum);
- if(TestBits(flags,COMMSEQ))
- WriteFormat(file," DC.B %ld,0\n",tmp->Command);
- else
- WriteFormat(file," DC.B 0,0\n");
- if(NOT sub AND item->SubItem)
- WriteFormat(file," DC.L %s%ld\n DC.W 0\n\n",&SubLabel[0],SNum((struct MyMenuItem *)item->SubItem));
- else
- WriteFormat(file," DC.L 0\n DC.W 0\n\n");
- }
-
- BOOL WriteCMenus( BPTR file )
- {
- register struct MyMenu *menu;
- register struct MyMenuItem *item, *sub;
- register struct IntuiText *itext;
- register UWORD inum, snum, mnum;
-
- if(SubCount) {
- if(STAT)
- WriteFormat(file,"static ");
- WriteFormat(file,"struct IntuiText %sText[] = {\n",&SubLabel[0]);
- for(menu = MenuStrip; menu; menu = menu->NextMenu) {
- for(item = menu->FirstItem; item; item = item->NextItem) {
- if((sub = item->SubItem)) {
- while(1) {
- WriteCIText(file,(struct IntuiText *)sub->ItemFill);
- if(NOT(sub = sub->NextItem))
- break;
- }
- }
- }
- }
- Seek(file,-2L,OFFSET_CURRENT);
- WriteFormat(file," };\n\n");
- }
-
- if(ItemCount) {
- if(STAT)
- WriteFormat(file,"static ");
- WriteFormat(file,"struct IntuiText %sText[] = {\n",&ItemLabel[0]);
- for(menu = MenuStrip; menu; menu = menu->NextMenu) {
- if((item = menu->FirstItem)) {
- while(1) {
- if(item == &dummy) break;
- WriteCIText(file,(struct IntuiText *)item->ItemFill);
- if(NOT(item = item->NextItem))
- break;
- }
- }
- }
- Seek(file,-2L,OFFSET_CURRENT);
- WriteFormat(file," };\n\n");
- }
-
- snum = NULL;
-
- if(SubCount) {
- if(STAT)
- WriteFormat(file,"static ");
- WriteFormat(file,"struct MenuItem %s[] = {\n",&SubLabel[0]);
- for(menu = MenuStrip; menu; menu = menu->NextMenu) {
- for(item = menu->FirstItem; item; item = item->NextItem) {
- if((sub = item->SubItem)) {
- while(1) {
- WriteCItem(file,sub,snum++,TRUE);
- if(NOT(sub = sub->NextItem))
- break;
- }
- }
- }
- }
- Seek(file,-2L,OFFSET_CURRENT);
- WriteFormat(file," };\n\n");
- }
-
- inum = NULL;
-
- if(ItemCount) {
- if(STAT)
- WriteFormat(file,"static ");
- WriteFormat(file,"struct MenuItem %s[] = {\n",&ItemLabel[0]);
- for(menu = MenuStrip; menu; menu = menu->NextMenu) {
- if((item = menu->FirstItem)) {
- while(1) {
- if(item == &dummy) break;
- WriteCItem(file,item,inum++,FALSE);
- if(NOT(item = item->NextItem))
- break;
- }
- }
- }
- Seek(file,-2L,OFFSET_CURRENT);
- WriteFormat(file," };\n\n");
- }
-
- mnum = 1;
-
- if(STAT)
- WriteFormat(file,"static ");
- WriteFormat(file,"struct Menu %s[] = {\n",&MenuLabel[0]);
-
- for(menu = MenuStrip; menu; menu = menu->NextMenu) {
- if(menu->NextMenu)
- WriteFormat(file," &%s[%ld],",&MenuLabel[0],mnum++);
- else
- WriteFormat(file," NULL,");
-
- WriteFormat(file,"%ld,%ld,%ld,%ld,",menu->LeftEdge,menu->TopEdge,menu->Width,menu->Height);
- if(TestBits((ULONG)menu->Flags,MENUENABLED))
- WriteFormat(file,"MENUENABLED,");
- else
- WriteFormat(file,"0,");
-
- WriteFormat(file,"(BYTE *)\"%s\",",menu->MenuName);
-
- if(menu->FirstItem != &dummy)
- WriteFormat(file,"&%s[%ld],0,0,0,0,\n",&ItemLabel[0],INum(menu));
- else
- WriteFormat(file,"NULL,0,0,0,0,\n");
- }
- Seek(file,-2L,OFFSET_CURRENT);
- WriteFormat(file," };\n\n");
- }
-
- BOOL WriteAsmMenus( BPTR file )
- {
- register struct MyMenu *menu;
- register struct MyMenuItem *item, *sub;
- register struct IntuiText *itext;
- register UWORD inum, snum, mnum;
-
- inum = 0;
-
- if(SubCount) {
- for(menu = MenuStrip; menu; menu = menu->NextMenu) {
- for(item = menu->FirstItem; item; item = item->NextItem) {
- if((sub = item->SubItem)) {
- while(1) {
- WriteAsmIText(file,(struct IntuiText *)sub->ItemFill,inum++,TRUE);
- if(NOT(sub = sub->NextItem))
- break;
- }
- }
- }
- }
- }
-
- inum = 0;
-
- if(ItemCount) {
- for(menu = MenuStrip; menu; menu = menu->NextMenu) {
- if((item = menu->FirstItem)) {
- while(1) {
- if(item == &dummy) break;
- WriteAsmIText(file,(struct IntuiText *)item->ItemFill,inum++,FALSE);
- if(NOT(item = item->NextItem))
- break;
- }
- }
- }
- }
-
- snum = NULL;
-
- if(SubCount) {
- for(menu = MenuStrip; menu; menu = menu->NextMenu) {
- for(item = menu->FirstItem; item; item = item->NextItem) {
- if((sub = item->SubItem)) {
- while(1) {
- WriteAsmItem(file,sub,snum++,TRUE);
- if(NOT(sub = sub->NextItem))
- break;
- }
- }
- }
- }
- }
-
- inum = NULL;
-
- if(ItemCount) {
- for(menu = MenuStrip; menu; menu = menu->NextMenu) {
- if((item = menu->FirstItem)) {
- while(1) {
- if(item == &dummy) break;
- WriteAsmItem(file,item,inum++,FALSE);
- if(NOT(item = item->NextItem))
- break;
- }
- }
- }
- }
-
- mnum = 0;
-
- for(menu = MenuStrip; menu; menu = menu->NextMenu) {
- WriteFormat(file,"%s%ld:\n",&MenuLabel[0],mnum);
- if(menu->NextMenu)
- WriteFormat(file," DC.L %s%ld\n",&MenuLabel[0],mnum+1);
- else
- WriteFormat(file," DC.L 0\n");
-
- WriteFormat(file," DC.W %ld,%ld,%ld,%ld\n",menu->LeftEdge,menu->TopEdge,menu->Width,menu->Height);
- if(NOFLAGS) {
- if(TestBits((ULONG)menu->Flags,MENUENABLED))
- WriteFormat(file," DC.W $0001\n");
- else
- WriteFormat(file," DC.W $0000\n");
- } else {
- if(TestBits((ULONG)menu->Flags,MENUENABLED))
- WriteFormat(file," DC.W MENUENABLED\n");
- else
- WriteFormat(file," DC.W 0\n");
- }
-
- WriteFormat(file," DC.L MenuName%ld\n",mnum);
-
- if(menu->FirstItem != &dummy)
- WriteFormat(file," DC.L %s%ld\n DC.W 0,0,0,0\n\n",&ItemLabel[0],INum(menu));
- else
- WriteFormat(file," DC.L 0\n DC.W 0,0,0,0\n\n");
-
- WriteFormat(file,"MenuName%ld:\n DC.B '%s',0\n",mnum++,menu->MenuName);
- WriteFormat(file," CNOP 0,2\n\n");
- }
- }
-