int SetCatalog(char *localeName, char *catName) { int r = -1; struct TagItem tags[3] = { OC_Language, localeName, OC_BuiltInLanguage, "none", TAG_DONE, NULL }; if (localeName == NULL) tags[0].ti_Tag = TAG_IGNORE; ILocaleExit(); if (LocaleBase) { if (Catalog = OpenCatalogA(NULL, catName, tags)) { long *al; r = 0; for (al = _AutoLocale + 1; *al; al += 2) { /* printf("%s ->", (char *)*al); */ printf("GetCat: %d %08lx\n", al[1], GetCatalogStr(Catalog, al[1], NULL)); *al = GetCatalogStr(Catalog, al[1], (char *)al[0]); /* printf("%s\n", (char *)*al); */ } } } return(r); }
/*** Localise all strings of the program ***/ void InitLocale(void) { if( (catalog = (APTR) OpenCatalogA(NULL, "System/Tools/Editor.catalog", NULL)) ) { WORD n; /* Translate menu strings */ { register struct NewMenu * nm; register STRPTR str; extern struct NewMenu newmenu[]; for(nm = newmenu, n = MSG_PROJECTTITLE; nm->nm_Type != NM_END; nm++) { if (nm->nm_Label != NM_BARLABEL) { str = (STRPTR) GetCatalogStr( catalog, n++, nm->nm_Label ); /* Change shortcut to user prefered one */ if (*str == 127) { nm->nm_CommKey = str+1; str += 2; nm->nm_Flags &= ~NM_COMMANDSTRING; } nm->nm_Label = str; } } } /* Translate all other messages */ { register STRPTR * str; for(n = 0, str = JanoMessages; n < sizeof(JanoMessages)/sizeof(STRPTR); n++, str++) if (*str != NULL) *str = (STRPTR) GetCatalogStr( catalog, n + ERR_BADOS, *str ); } } }
void openCatalog(char *name) { static struct TagItem tags[3] = { OC_Language,"english", OC_BuiltInLanguage,"none", TAG_DONE, NULL}; if(LocaleBase)Catalog = OpenCatalogA(NULL,name,tags); }
struct Catalog * OpenCatalog ( /* SYNOPSIS */ const struct Locale * locale, CONST_STRPTR name, Tag tag1, ... ) /* FUNCTION This is the varargs version of the locale.library OpenCatalogA(). For information see locale.library/OpenCatalog() INPUTS locale - The locale describing the language the user wants. name - Name of the catalog file. tag1 - TagList of extra arguments. RESULT Either a pointer to a Catalog, or NULL. Although the function may have returned NULL, that does not necessarily meant there is an error. If dos/IoErr() returns 0, then there was no error, but the language of the built in strings is the same as that of a catalog. If IoErr() != 0, then there was an error however. NOTES EXAMPLE BUGS SEE ALSO locale.library/OpenCatalogA(), locale.library/CloseCatalog(), locale.library/GetCatalogStr() INTERNALS *****************************************************************************/ { AROS_SLOWSTACKTAGS_PRE(tag1) retval = OpenCatalogA(locale, name, AROS_SLOWSTACKTAGS_ARG(tag1)); AROS_SLOWSTACKTAGS_POST } /* OpenCatalog */
int main(int argc,char **argv) { font_data *data; // Need dopus library if (!(DOpusBase=OpenLibrary("dopus5.library",LIB_VERSION))) if (!(DOpusBase=OpenLibrary("dopus5:libs/dopus5.library",55))) return(10); #ifdef __amigaos4__ if (!(IDOpus = (struct DOpusIFace *)GetInterface(DOpusBase, "main", 1, NULL))) { CloseLibrary(DOpusBase); return(10); } #endif // Allocate data if (!(data=AllocVec(sizeof(font_data),MEMF_CLEAR))) { font_free(0); return(5); } // Parse arguments data->args= ReadArgs( "FONT,SIZE/N,B=BOLD/S,I=ITALIC/S,U=ULINE/S,PUBSCREEN/K", (APTR)data->arg_array, NULL); // Default to topaz 8 #ifdef __AROS__ strcpy(data->font_name,"ttcourier.font"); #else strcpy(data->font_name,"topaz.font"); #endif data->font_size=8; // Got font name? if (data->arg_array[ARG_FONT]) font_get_name(data,(char *)data->arg_array[ARG_FONT]); // Got a font size? if (data->arg_array[ARG_SIZE] && *((long *)data->arg_array[ARG_SIZE])) { data->font_size=*((long *)data->arg_array[ARG_SIZE]); data->first=TRUE; } // Initialise locale init_locale_data(&data->locale); // Got locale library? if (LocaleBase) { BPTR lock; // Change PROGDIR: to dopus5: if ((lock=Lock("dopus5:",ACCESS_READ))) #ifdef __AROS__ // the lock returned here is the initial PROGDIR: which belongs to the system, // so it's not a very good idea to just UnLock it SetProgramDir(lock); #else UnLock(SetProgramDir(lock)); #endif // Initialise data->locale.li_LocaleBase=LocaleBase; data->locale.li_Catalog=OpenCatalogA(0,"viewfont.catalog",0); data->locale.li_Locale=OpenLocale(0); } // Create message port data->appport=CreateMsgPort(); // Open window if (!(font_open(data))) { font_free(data); return(5); } // Initial gadget settings if (data->arg_array[ARG_BOLD]) SetGadgetValue(data->list,GAD_FONT_BOLD,1); if (data->arg_array[ARG_ITALIC]) SetGadgetValue(data->list,GAD_FONT_ITALIC,1); if (data->arg_array[ARG_ULINE]) SetGadgetValue(data->list,GAD_FONT_ULINE,1); // Show font font_show_font(data,FALSE); // Initialise refresh hook data->refresh_hook.h_Entry=(ULONG (*)())font_refresh; data->refresh_hook.h_Data=data; // Event loop FOREVER { struct IntuiMessage *msg; BOOL quit_flag=FALSE; // AppWindow? if (data->appwindow) { struct AppMessage *amsg; // Get messages while ((amsg=(struct AppMessage *)GetMsg(data->appport))) { // Got file? if (amsg->am_NumArgs>0) { char buf[256]; // Get name DevNameFromLockDopus(amsg->am_ArgList[0].wa_Lock,buf,256); if (amsg->am_ArgList[0].wa_Name && *amsg->am_ArgList[0].wa_Name) AddPart(buf,amsg->am_ArgList[0].wa_Name,256); // Get font name font_get_name(data,buf); // Get new font font_get_font(data); font_show_font(data,FALSE); } // Reply to message ReplyMsg((struct Message *)amsg); } } // Requester? if (data->about) { // Handle requester if (SysReqHandler(data->about,0,0)>=0) { // Close requester FreeSysRequest(data->about); data->about=NULL; } } // Intuition messages if (data->window) { while ((msg=GetWindowMsg(data->window->UserPort))) { struct IntuiMessage msg_copy; UWORD id=0; // Copy message and reply msg_copy=*msg; ReplyWindowMsg(msg); // Get gadget ID if (msg_copy.Class==IDCMP_GADGETUP) id=((struct Gadget *)msg_copy.IAddress)->GadgetID; // Look at message switch (msg_copy.Class) { // Close window case IDCMP_CLOSEWINDOW: quit_flag=TRUE; break; // New size case IDCMP_NEWSIZE: // Redraw font font_show_font(data,FALSE); // Set flag to say we resized data->resized=TRUE; break; // Menu case IDCMP_MENUPICK: { struct MenuItem *item; // Get item if (!(item=ItemAddress(data->window->MenuStrip,msg_copy.Code))) break; // Get ID id=GTMENUITEM_USERDATA(item); // Fall through } // Gadget case IDCMP_GADGETUP: switch (id) { // Show requester case GAD_FONT_FONT_POPUP: case MENU_OPEN_FONT: // Ask for name font_ask_name(data); break; // Font name typed case GAD_FONT_FONT: // Get name font_get_name(data,(char *)GetGadgetValue(data->list,GAD_FONT_FONT)); // Get new font font_get_font(data); font_show_font(data,FALSE); break; // Font size up/down case GAD_FONT_UP: case GAD_FONT_DOWN: { short size; // Get next size size=font_get_size(data,(id==GAD_FONT_UP)?1:-1); // No change? if (size==data->font_size) break; // Use this size data->font_size=size; SetGadgetValue(data->list,GAD_FONT_SIZE,size); } // Font size given case GAD_FONT_CYCLE: // Check id if (id==GAD_FONT_CYCLE) { short size; // Get size if (!(size=atoi(data->size_labels[msg_copy.Code]))) break; // Refresh gadget data->font_size=size; SetGadgetValue(data->list,GAD_FONT_SIZE,data->font_size); } // Font size case GAD_FONT_SIZE: // Entered size if (id==GAD_FONT_SIZE) { // Bounds check gadget data->font_size= BoundsCheckGadget( data->list, GAD_FONT_SIZE, 4, 255); } // Get new font font_get_font(data); font_show_font(data,FALSE); break; // Styles changed case GAD_FONT_BOLD: case GAD_FONT_ITALIC: case GAD_FONT_ULINE: // Redraw font font_show_font(data,FALSE); break; // Save settings case MENU_SAVE_SETTINGS: font_save_settings(data); break; // Quit case MENU_QUIT: quit_flag=TRUE; break; // About case MENU_ABOUT: font_show_about(data); break; } break; // Rawkey case IDCMP_RAWKEY: // Help? if (msg_copy.Code==0x5f) font_show_about(data); // Key case IDCMP_VANILLAKEY: // Escape does quit if (msg_copy.Code==0x1b) quit_flag=TRUE; break; // Refresh case IDCMP_REFRESHWINDOW: // Have we just resized? if (data->resized) { // Don't need to refresh BeginRefresh(data->window); EndRefresh(data->window,TRUE); data->resized=FALSE; break; } // Refresh font display font_show_font(data,TRUE); break; } // Check window is still valid if (!data->window) break; } } if (quit_flag) break; // Wait for signal (ctrl-c breaks) if ((Wait(SIGBREAKF_CTRL_C| ((data->window)?(1<<data->window->UserPort->mp_SigBit):0)| ((data->about)?(1<<data->about->UserPort->mp_SigBit):0)| ((data->appwindow)?(1<<data->appport->mp_SigBit):0)))&SIGBREAKF_CTRL_C) break; } // Free stuff font_free(data); return(0); }
struct Catalog *OpenCatalog(struct Locale *locale, STRPTR name, Tag tag1, ...) { return OpenCatalogA(locale, name, (struct TagItem *)&tag1); }
/*** Methods ****************************************************************/ Object *AboutWindow__OM_NEW ( Class *CLASS, Object *self, struct opSet *message ) { struct AboutWindow_DATA *data = NULL; const struct TagItem *tstate = message->ops_AttrList; struct TagItem *tag = NULL, *authorsTags = NULL, *sponsorsTags = NULL; struct Catalog *catalog = NULL; APTR pool; Object *rootGroup = NULL, *imageGroup = NULL, *imageObject = NULL, *versionObject = NULL, *copyrightObject = NULL, *descriptionGroup = NULL, *descriptionObject = NULL, *authorsList = NULL, *sponsorsList = NULL; STRPTR title = NULL, versionNumber = NULL, versionDate = NULL, versionExtra = NULL, description = NULL, copyright = NULL; CONST_STRPTR pages[] = { NULL, NULL, NULL }; UBYTE nextPage = 0; /* Allocate memory pool ------------------------------------------------*/ pool = CreatePool(MEMF_ANY, 4096, 4096); if (pool == NULL) return NULL; /* Initialize locale ---------------------------------------------------*/ catalog = OpenCatalogA ( NULL, "System/Classes/Zune/AboutWindow.catalog", NULL ); /* Parse initial attributes --------------------------------------------*/ while ((tag = NextTagItem(&tstate)) != NULL) { switch (tag->ti_Tag) { case MUIA_AboutWindow_Image: imageObject = (Object *) tag->ti_Data; break; case MUIA_AboutWindow_Title: title = StrDup((STRPTR) tag->ti_Data); if (title == NULL) title = IGNORE; break; case MUIA_AboutWindow_Version_Number: versionNumber = StrDup((STRPTR) tag->ti_Data); if (versionNumber == NULL) versionNumber = IGNORE; break; case MUIA_AboutWindow_Version_Date: versionDate = StrDup((STRPTR) tag->ti_Data); if (versionDate == NULL) versionDate = IGNORE; break; case MUIA_AboutWindow_Version_Extra: versionExtra = StrDup((STRPTR) tag->ti_Data); if (versionExtra == NULL) versionExtra = IGNORE; break; case MUIA_AboutWindow_Copyright: copyright = StrDup((STRPTR) tag->ti_Data); if (copyright == NULL) copyright = IGNORE; break; case MUIA_AboutWindow_Description: description = StrDup((STRPTR) tag->ti_Data); if (description == NULL) description = IGNORE; break; case MUIA_AboutWindow_Authors: authorsTags = (struct TagItem *) tag->ti_Data; break; case MUIA_AboutWindow_Sponsors: sponsorsTags = (struct TagItem *) tag->ti_Data; break; default: continue; /* Don't supress non-processed tags */ } tag->ti_Tag = TAG_IGNORE; } /* Setup image ---------------------------------------------------------*/ if (imageObject == NULL) { TEXT path[512], program[1024]; path[0] = '\0'; program[0] = '\0'; if (GetProgramName(program, 1024)) { strlcat(path, "PROGDIR:", 512); strlcat(path, FilePart(program), 512); imageObject = (Object *)IconImageObject, MUIA_IconImage_File, (IPTR) path, End; } if (imageObject == NULL) { imageObject = HVSpace; } } /* Setup pages ---------------------------------------------------------*/ if (authorsTags != NULL) { pages[nextPage] = _(MSG_AUTHORS); nextPage++; } if (sponsorsTags != NULL) { pages[nextPage] = _(MSG_SPONSORS); nextPage++; } self = (Object *) DoSuperNewTags ( CLASS, self, NULL, MUIA_Window_Activate, TRUE, MUIA_Window_NoMenus, TRUE, MUIA_Window_Height, MUIV_Window_Height_Visible(25), MUIA_Window_Width, MUIV_Window_Width_Visible(25), WindowContents, (IPTR) VGroup, GroupSpacing(6), Child, (IPTR) (imageGroup = (Object *)HGroup, MUIA_Weight, 0, Child, (IPTR) HVSpace, Child, (IPTR) imageObject, Child, (IPTR) HVSpace, End), Child, (IPTR) (versionObject = (Object *)TextObject, MUIA_Text_PreParse, (IPTR) MUIX_C, MUIA_Text_Contents, (IPTR) NULL, End), Child, (IPTR) (copyrightObject = (Object *)TextObject, MUIA_Text_PreParse, (IPTR) MUIX_C, MUIA_Text_Contents, (IPTR) NULL, End), Child, (IPTR) (descriptionGroup = (Object *)VGroup, Child, (IPTR) VSpace(6), Child, (IPTR) (descriptionObject = (Object *)TextObject, MUIA_Text_PreParse, (IPTR) MUIX_I MUIX_C, MUIA_Text_Contents, (IPTR) NULL, End), End), Child, (IPTR) VSpace(6), Child, (IPTR) RegisterGroup(pages), Child, (IPTR) ListviewObject, MUIA_Listview_List, (IPTR) (authorsList = (Object *)ListObject, ReadListFrame, End), End, Child, (IPTR) ListviewObject, MUIA_Listview_List, (IPTR) (sponsorsList = (Object *)ListObject, ReadListFrame, End), End, End, End, TAG_MORE, (IPTR) message->ops_AttrList ); if (self == NULL) goto error; data = INST_DATA(CLASS, self); data->awd_Catalog = catalog; data->awd_Pool = pool; data->awd_RootGroup = rootGroup; data->awd_ImageGroup = imageGroup; data->awd_ImageObject = imageObject; data->awd_VersionObject = versionObject; data->awd_CopyrightObject = copyrightObject; data->awd_DescriptionGroup = descriptionGroup; data->awd_DescriptionObject = descriptionObject; data->awd_Title = title; data->awd_VersionNumber = versionNumber; data->awd_VersionDate = versionDate; data->awd_VersionExtra = versionExtra; data->awd_Copyright = copyright; data->awd_Description = description; if (authorsTags != NULL) NamesToList(authorsList, authorsTags, data); if (sponsorsTags != NULL) NamesToList(sponsorsList, sponsorsTags, data); /* Setup notifications */ DoMethod ( self, MUIM_Notify, MUIA_Window_CloseRequest, TRUE, (IPTR) self, 2, MUIA_Window_Open, FALSE ); return self; error: if (catalog != NULL) CloseCatalog(catalog); return NULL; }