VOID ShowError(Object *application, Object *window, CONST_STRPTR message, BOOL useIOError) { TEXT buffer[128]; STRPTR newline = "\n", period = ".", extra = buffer; /* Never use IO error if it is 0 */ if (IoErr() == 0) useIOError = FALSE; if (useIOError) { Fault(IoErr(), NULL, buffer, sizeof(buffer)); buffer[0] = toupper(buffer[0]); } else { newline = ""; period = ""; extra = ""; } MUI_Request ( application, window, 0, _(MSG_TITLE), _(MSG_ERROR_OK), "%s:\n%s%s%s%s", _(MSG_ERROR_HEADER), message, newline, extra, period ); }
void DisplayErrorMessage(Object * obj, enum ErrorCode errorcode) { CONST_STRPTR errormessage = NULL; CONST_STRPTR additionaldata = NULL; Object * app = NULL; Object * wnd = NULL; GET(obj, MUIA_ApplicationObject, &app); GET(obj, MUIA_Window_Window, &wnd); switch(errorcode) { case(UNKNOWN_ERROR): errormessage = _(MSG_ERR_UNKNOWN_ERROR); break; case(NOT_RESTARTED_STACK): errormessage = _(MSG_ERR_NOT_RESTARTED_STACK); break; case(NOT_SAVED_PREFS_ENV): errormessage = _(MSG_ERR_NOT_SAVED_PREFS); additionaldata = PREFS_PATH_ENV; break; case(NOT_SAVED_PREFS_ENVARC): errormessage = _(MSG_ERR_NOT_SAVED_PREFS); additionaldata = PREFS_PATH_ENVARC; break; case(NOT_COPIED_FILES_ENV): errormessage = _(MSG_ERR_NOT_COPIED_FILES); additionaldata = PREFS_PATH_ENV; break; case(NOT_COPIED_FILES_ENVARC): errormessage = _(MSG_ERR_NOT_COPIED_FILES); additionaldata = PREFS_PATH_ENVARC; break; case(ALL_OK): return; } MUI_Request(app, wnd, 0, _(MSG_ERROR_TITLE), _(MSG_BUTTON_OK), errormessage, additionaldata); }
/// /// US_DelFunc // Removes a user from the user database HOOKPROTONHNONP(US_DelFunc, void) { Object *lv; int userIndex; int m; struct User *user; ENTER(); lv = G->US->GUI.LV_USERS; userIndex = xget(lv, MUIA_NList_Active); DoMethod(lv, MUIM_NList_GetEntry, userIndex, &user); if(user->MailDir[0] != '\0') { m = MUI_Request(G->App, G->US->GUI.WI, MUIF_NONE, tr(MSG_MA_ConfirmReq), tr(MSG_US_RemoveReqGads), tr(MSG_US_RemoveReq)); if(m == 1) DeleteMailDir(user->MailDir, TRUE); } else { // just remove the user, as this doesn't have an own mail directory m = 2; } if(m != 0) { DoMethod(lv, MUIM_NList_Remove, userIndex); // reactivate the Add/Del buttons set(G->US->GUI.BT_ADD, MUIA_Disabled, FALSE); set(G->US->GUI.BT_DEL, MUIA_Disabled, xget(lv, MUIA_NList_Entries) == 0); } LEAVE(); }
IPTR NetPEditor__MUIM_PrefsEditor_Save ( Class *CLASS, Object *self, Msg message ) { struct NetPEditor_DATA *data = INST_DATA(CLASS, self); enum ErrorCode errorcode = UNKNOWN_ERROR; Gadgets2NetworkPrefs(data); if ((errorcode = SaveNetworkPrefs()) == ALL_OK) { SET(self, MUIA_PrefsEditor_Changed, FALSE); SET(self, MUIA_PrefsEditor_Testing, FALSE); return TRUE; } DisplayErrorMessage(self, errorcode); /* Prefs saved to disk, but stack not restarted. Inform about restart will 'apply' changes */ if (errorcode == NOT_RESTARTED_STACK) { Object * app = NULL; Object * wnd = NULL; GET(self, MUIA_ApplicationObject, &app); GET(self, MUIA_Window_Window, &wnd); MUI_Request(app, wnd, 0, _(MSG_INFO_TITLE), _(MSG_BUTTON_OK), _(MSG_PREFS_SAVED_RESTART), PREFS_PATH_ENVARC); return TRUE; } return FALSE; }
__saveds __asm ULONG GROM_Generate (a2 Object *Win, a1 SW_IDATA **idata) { UBYTE fspec[FMSIZE]; BPTR fp = NULL; ULONG x, Cost1 = (ULONG)(idata[2]), Cost2 = (ULONG)(idata[3]); UBYTE DoneText[] = "\33c\33bDone:\33n Registration form saved to file %s\n\n" "Email to " SRK_EMAIL " or send by postal mail to:\n\n" " %s Registration\n" " 405 Pulsar St.\n" " Fort Collins, CO 80525 USA\n\n" "See the above file for more information.\n\n" "Thank you for registering %s!"; UBYTE ErrText[] = "\33c\33bError:\33n Unable to open registration file %s."; UBYTE *Prog = (UBYTE *)(idata[1]); AddPart(strcpy(fspec, "RAM:"), Prog, FMSIZE); strcat(fspec, ".Regform"); for (x=0; RG_ParseTable[x].Keyword; x++) { UBYTE *Val; get((*idata)->Gads[x], MUIA_String_Contents, &Val); if (RG_ParseTable[x].Required && (!Val || !Val[0])) { MUI_Request(Win, (*idata)->RegWin, 0,NULL, "*_Ok",(char *) "\33c\33bError:\33n No value suppled for required " "field '%s'\n", RG_ParseTable[x].Keyword, NULL); goto Done; } } if (!(fp = Open(fspec, MODE_NEWFILE))) { MUI_Request(Win, (*idata)->RegWin, 0,NULL, "*_Ok",(char *)ErrText, fspec, NULL, NULL); goto Done; } FPrintf(fp, "E-mail this form to %s with the subject line:\n" " CMD REGISTER %s\n\n" "Registration cost is US $%ld for E-Mail registration and\n" "US $%ld for postal mail registration. E-Mail registration\n" "will receive a keyfile shortly. Postal registration should\n" "allow 4 weeks and include a disk and self addressed stamped\n" "envelope. Checks can be made payable to ShadowWorks Software.\n\n" "Registration request for %s\n\n", SRK_EMAIL, Prog, Cost1, Cost2, Prog); for (x=0; RG_ParseTable[x].Keyword; x++) { UBYTE *Val; get((*idata)->Gads[x], MUIA_String_Contents, &Val); if (Val && Val[0]) FPrintf(fp, "%-10s = %s\n", RG_ParseTable[x].Keyword, Val); } Close(fp); fp = NULL; MUI_Request(Win, (*idata)->RegWin, 0,NULL, "*_Ok",(char *)DoneText, fspec, Prog, Prog); set(Win, MUIA_Window_Open, FALSE); Done: if (fp) Close(fp); return 0; }
void EventLoop(void) { while (1) { ULONG sigs = 0UL; switch(DoMethod(MUIApp, MUIM_Application_NewInput, &sigs)) { case MUIV_Application_ReturnID_Quit: return; case ACTID_OPEN: { struct FileRequester *request; request = MUI_AllocAslRequestTags(ASL_FileRequest, ASLFR_Window, xget(MUIWindow, MUIA_Window_Window), ASLFR_TitleText, msgTextProgramName, ASLFR_RejectIcons, TRUE, ASLFR_InitialDrawer, "SYS:Prefs/Presets", TAG_DONE ); if( request != NULL ) { DoMethod(MUIApp, MUIA_Application_Sleep, TRUE); if (MUI_AslRequest(request, NULL)) { char *file; DoMethod(MUIApp, MUIA_Application_Sleep, FALSE); file = AllocVec(strlen(request->fr_Drawer)+128,0); if( file != NULL ) { CopyMem(request->fr_Drawer, file, strlen(request->fr_Drawer)+1); AddPart(file, request->fr_File, 128); NewSettings(file); GUINewSettings(); FreeVec(file); } } else { DoMethod(MUIApp, MUIA_Application_Sleep, FALSE); } MUI_FreeAslRequest(request); } break; } case ACTID_SAVEAS: { struct FileRequester *request; request = MUI_AllocAslRequestTags(ASL_FileRequest, ASLFR_Window, xget(MUIWindow, MUIA_Window_Window), ASLFR_TitleText, msgTextProgramName, ASLFR_RejectIcons, TRUE, ASLFR_DoSaveMode, TRUE, ASLFR_InitialDrawer, "SYS:Prefs/Presets", TAG_DONE); if(request != NULL ) { DoMethod(MUIApp, MUIA_Application_Sleep, TRUE); FillUnit(); if (MUI_AslRequest(request, NULL)) { char *file; DoMethod(MUIApp, MUIA_Application_Sleep, FALSE); file = AllocVec(strlen(request->fr_Drawer)+128,0); if( file != NULL ) { CopyMem(request->fr_Drawer, file, strlen(request->fr_Drawer)+1); AddPart(file, request->fr_File, 128); SaveSettings(file, UnitList); if(SaveIcons) { WriteIcon(file); } FreeVec(file); } } else { DoMethod(MUIApp, MUIA_Application_Sleep, FALSE); } MUI_FreeAslRequest(request); } break; } case ACTID_ABOUT: MUI_Request(MUIApp, MUIWindow, 0, (char *) msgTextProgramName, (char*)msgButtonOK, (char*)msgTextCopyright, "\033c", (char*)msgTextProgramName, "1996-1999 Stéphane Barbaray/Martin Blom"); break; case ACTID_SAVE: FillUnit(); SaveSettings(ENVFILE, UnitList); SaveSettings(ENVARCFILE, UnitList); return; case ACTID_USE: FillUnit(); SaveSettings(ENVFILE, UnitList); return; case ACTID_QUIT: return; case ACTID_DEFAULT: NewSettings(NULL); GUINewSettings(); break; case ACTID_LASTSAVED: NewSettings(ENVARCFILE); GUINewSettings(); break; case ACTID_RESTORE: NewSettings(args.from); GUINewSettings(); break; case ACTID_ICONS: { APTR item = (APTR)DoMethod(MUIMenu,MUIM_FindUData,ACTID_ICONS); if(item) { if(xget(item, MUIA_Menuitem_Checked)) { SaveIcons = TRUE; } else { SaveIcons = FALSE; } } break; } case ACTID_HELP: DoMethod(MUIApp,MUIM_Application_ShowHelp,NULL,NULL,"AHI",0); break; case ACTID_GUIDE: DoMethod(MUIApp,MUIM_Application_ShowHelp,NULL,NULL,"MAIN",0); break; case ACTID_HELPINDEX: DoMethod(MUIApp,MUIM_Application_ShowHelp,NULL,NULL,"Concept Index",0); break; case ACTID_UNIT: FillUnit(); NewUnit(xget(MUIUnit,MUIA_Cycle_Active)); GUINewUnit(); break; case ACTID_MODE: FillUnit(); NewMode(xget(MUIList, MUIA_List_Active)); GUINewMode(); break; case ACTID_DEBUG: case ACTID_SURROUND: case ACTID_ECHO: case ACTID_CPULIMIT: case ACTID_CLIPMV: case ACTID_ACTIME: { ULONG debug = AHI_DEBUG_NONE, surround = FALSE, echo = 0, cpu = 90; ULONG clip = FALSE, actime = 0; get(MUIDebug, MUIA_Cycle_Active, &debug); get(MUISurround, MUIA_Cycle_Active, &surround); get(MUIEcho, MUIA_Cycle_Active, &echo); get(MUIClipvol, MUIA_Cycle_Active, &clip); get(MUICpu, MUIA_Numeric_Value, &cpu); get(MUIACTime, MUIA_Numeric_Value, &actime); globalprefs.ahigp_DebugLevel = debug; globalprefs.ahigp_DisableSurround = surround; globalprefs.ahigp_DisableEcho = (echo == 2); globalprefs.ahigp_FastEcho = (echo == 1); globalprefs.ahigp_MaxCPU = ((cpu << 16) + 100) / 100; globalprefs.ahigp_ClipMasterVolume = clip; globalprefs.ahigp_AntiClickTime = ((actime << 16) + 1000) / 1000; break; } default: if (sigs) { sigs = Wait(sigs | SIGBREAKF_CTRL_C); if (sigs & SIGBREAKF_CTRL_C) return; } break; } } }
static IPTR mGetPrefs(struct IClass *cl,Object *obj, struct MUIP_Win_GetPrefs *msg) { struct data *data = INST_DATA(cl,obj); struct URL_Prefs *p; struct URL_BrowserNode *bn; struct URL_MailerNode *mn; struct URL_FTPNode *fn; ULONG mode, error = 0; /* get the openurl.library prefs */ switch (msg->mode) { case MUIV_Win_GetPrefs_InUse: mode = URL_GetPrefs_Mode_InUse; break; case MUIV_Win_GetPrefs_LastSaveds: mode = URL_GetPrefs_Mode_Envarc; break; case MUIV_Win_GetPrefs_Restore: mode = URL_GetPrefs_Mode_Env; break; case MUIV_Win_GetPrefs_Defaults: mode = URL_GetPrefs_Mode_Default; break; default: return FALSE; } p = URL_GetPrefs(URL_GetPrefs_Mode,mode,TAG_DONE); if (!p) error = MSG_Err_NoPrefs; else if (p->up_Version!=PREFS_VERSION) error = MSG_Err_BadPrefs; if (error) { MUI_Request(_app(obj),NULL,0,getString(MSG_ErrReqTitle), getString(MSG_ErrReqGadget), getString(error), p ? p->up_Version : 0); if (p) URL_FreePrefsA(p,NULL); return FALSE; } /* Browsers */ set(data->browserList,MUIA_List_Quiet,TRUE); DoMethod(data->browserList,MUIM_List_Clear); for (bn = (struct URL_BrowserNode *)p->up_BrowserList.mlh_Head; bn->ubn_Node.mln_Succ; bn = (struct URL_BrowserNode *)bn->ubn_Node.mln_Succ) { DoMethod(data->browserList,MUIM_List_InsertSingle,(IPTR)bn,MUIV_List_Insert_Bottom); } set(data->browserList,MUIA_List_Quiet,FALSE); /* Mailers */ set(data->mailerList,MUIA_List_Quiet,TRUE); DoMethod(data->mailerList,MUIM_List_Clear); for (mn = (struct URL_MailerNode *)p->up_MailerList.mlh_Head; mn->umn_Node.mln_Succ; mn = (struct URL_MailerNode *)mn->umn_Node.mln_Succ) { DoMethod(data->mailerList,MUIM_List_InsertSingle,(IPTR)mn,MUIV_List_Insert_Bottom); } set(data->mailerList,MUIA_List_Quiet,FALSE); /* FTPs */ set(data->FTPList,MUIA_List_Quiet,TRUE); DoMethod(data->FTPList,MUIM_List_Clear); for (fn = (struct URL_FTPNode *)p->up_FTPList.mlh_Head; fn->ufn_Node.mln_Succ; fn = (struct URL_FTPNode *)fn->ufn_Node.mln_Succ) { DoMethod(data->FTPList,MUIM_List_InsertSingle,(IPTR)fn,MUIV_List_Insert_Bottom); } set(data->FTPList,MUIA_List_Quiet,FALSE); /* Miscellaneous */ set(data->prepend, MUIA_Selected, isFlagSet(p->up_Flags, UPF_PREPENDHTTP)); set(data->mailto, MUIA_Selected, isFlagSet(p->up_Flags, UPF_DOMAILTO)); set(data->useFTP, MUIA_Selected, isFlagSet(p->up_Flags, UPF_DOFTP)); set(data->show, MUIA_Selected, p->up_DefShow); set(data->toFront, MUIA_Selected, p->up_DefBringToFront); set(data->newWin, MUIA_Selected, p->up_DefNewWindow); set(data->launch, MUIA_Selected, p->up_DefLaunch); /* Activate the first entry */ DoSuperMethod(cl,obj,MUIM_MultiSet,MUIA_List_Active,MUIV_List_Active_Top, (IPTR)data->browserList, (IPTR)data->mailerList, (IPTR)data->FTPList, NULL); URL_FreePrefsA(p,NULL); return TRUE; }
/// /// US_SaveUserList // Initializes configuration files for new users and saves the user database static BOOL US_SaveUserList(void) { BOOL result = TRUE; int i; ENTER(); get(G->US->GUI.LV_USERS, MUIA_NList_Entries, &G->Users.Num); for(i = 0; i < G->Users.Num; i++) { struct User *user; BOOL validUser = FALSE; DoMethod(G->US->GUI.LV_USERS, MUIM_NList_GetEntry, i, &user); if(user != NULL) { memcpy(&G->Users.User[i], user, sizeof(G->Users.User[i])); if(user->Name[0] != '\0') { if(user->MailDir[0] != '\0') { enum FType type; if(ObtainFileInfo(user->MailDir, FI_TYPE, &type) == FALSE || type != FIT_DRAWER) { if(MUI_Request(G->App, G->US->GUI.WI, MUIF_NONE, tr(MSG_MA_MUsers), tr(MSG_YesNoReq), tr(MSG_US_DIRECTORY_DOESNT_EXIST), user->MailDir, user->Name)) { if(CreateDirectory(user->MailDir) == TRUE) validUser = TRUE; else ER_NewError(tr(MSG_ER_CantCreateDir), user->MailDir); } } else validUser = TRUE; } else ER_NewError(tr(MSG_ER_MissingDirectory)); } else ER_NewError(tr(MSG_ER_MissingName)); } else break; if(validUser == TRUE) { if(user->IsNew == TRUE) { if(user->Clone == TRUE) { char dest[SIZE_PATHFILE]; // clone some files for the new user AddPath(dest, user->MailDir, ".addressbook", sizeof(dest)); CopyFile(dest, NULL, G->abookFilename, NULL); AddPath(dest, user->MailDir, ".glossary", sizeof(dest)); CopyFile(dest, NULL, G->DI_Filename, NULL); AddPath(dest, user->MailDir, ".config", sizeof(dest)); CopyFile(dest, NULL, G->CO_PrefsFile, NULL); } else { char dest[SIZE_PATHFILE]; // create an empty .addressbook file AddPath(dest, user->MailDir, ".addressbook", sizeof(dest)); CreateEmptyABookFile(dest); } } } else { set(G->US->GUI.LV_USERS, MUIA_NList_Active, i); result = FALSE; // break out of the loop break; } } if(result == TRUE) US_SaveUsers(); RETURN(result); return result; }
/// /// US_Login // User login: puts up user list and waits for a selection BOOL US_Login(const char *username, const char *password, const char *maildir, const char *prefsfile) { int userIndex = -1; BOOL loggedin = FALSE; ENTER(); // Load the .users file first US_LoadUsers(); // if a username was given check if we have this username in // our loaded user list if(username != NULL) { int i; for(i = 0; i < G->Users.Num; i++) { if(stricmp(G->Users.User[i].Name, username) == 0) { userIndex = i; break; } } } // if we didn't find the specified user in our .users file or // if no username was given lets query in the splash window // for it. if(userIndex < 0) { // erase a possibly given password password = NULL; if(username != NULL) { // a user name was given at startup, but we didn't find it in our list MUI_Request(G->App, G->SplashWinObject, MUIF_NONE, tr(MSG_ER_USER_UNKNOWN_TITLE), tr(MSG_ER_USER_UNKNOWN_BUTTON), tr(MSG_ER_USER_UNKNOWN_ERROR), username); userIndex = -1; } else if(G->Users.Num >= 2) { // more than one users are available, let the user at the screen choose from these userIndex = DoMethod(G->SplashWinObject, MUIM_SplashWindow_SelectUser); } else { // no specific name was given, log in the first available user userIndex = 0; } } if(userIndex >= 0) { struct User *user = &G->Users.User[userIndex]; G->Users.CurrentID = user->ID; strlcpy(G->MA_MailDir, maildir ? maildir : user->MailDir, sizeof(G->MA_MailDir)); D(DBF_STARTUP, "user mail dir '%s'", G->MA_MailDir); if(prefsfile != NULL) strlcpy(G->CO_PrefsFile, prefsfile, sizeof(G->CO_PrefsFile)); else AddPath(G->CO_PrefsFile, G->MA_MailDir, ".config", sizeof(G->CO_PrefsFile)); D(DBF_STARTUP, "user config file '%s'", G->CO_PrefsFile); AddPath(G->abookFilename, user->UseAddr ? G->ProgDir : G->MA_MailDir, ".addressbook", sizeof(G->abookFilename)); AddPath(G->DI_Filename, user->UseDict ? G->ProgDir : G->MA_MailDir, ".glossary", sizeof(G->DI_Filename)); if(IsStrEmpty(user->Password) == FALSE) { // prompt for a password, if the given one does not match or none was given by tooltypes/command line if(IsStrEmpty(password) == FALSE) loggedin = (strcmp(password, user->Password) == 0 || strcmp(password, "\01") == 0); if(loggedin == FALSE) loggedin = DoMethod(G->SplashWinObject, MUIM_SplashWindow_PasswordRequest, user); } else { // this user has no password, so we signal success loggedin = TRUE; } } RETURN(loggedin); return loggedin; }
/* /// "ApplyDragAction()" */ BOOL ApplyDragAction(Object *obj, LONG targetentry) { struct PrefsListEntry *targetplnode = NULL; struct PrefsListEntry *sourceplnode = NULL; ULONG sourceid, targetid; IPTR sourceentry = -1; LONG result; APTR pic, spic, tpic; APTR form; get(obj, MUIA_List_Active, &sourceentry); if((((LONG) sourceentry) < 0) || (targetentry < 0)) { return(FALSE); } DoMethod(obj, MUIM_List_GetEntry, sourceentry, &sourceplnode); DoMethod(obj, MUIM_List_GetEntry, targetentry, &targetplnode); if((!(sourceplnode && targetplnode)) || (sourceplnode == targetplnode)) { return(FALSE); } sourceid = sourceplnode->chunkid; targetid = targetplnode->chunkid; switch(sourceid) { case IFFFORM_DEVICECFG: if(targetid == IFFFORM_DEVICECFG) { result = MUI_Request(_app(obj), _win(obj), 0, NULL, "Replace|Merge|Cancel", "Do you want to \33breplace\33n or \33bmerge\33n the prefs of\n" "\33b%s\33n\n" "with the contents from\n" "\33b%s\33n?", targetplnode->id, sourceplnode->id); if(result < 1) { return(FALSE); } tpic = NULL; spic = NULL; pic = psdFindCfgForm(NULL, IFFFORM_DEVICECFG); while(pic) { if(psdMatchStringChunk(pic, IFFCHNK_DEVID, targetplnode->devid)) { tpic = pic; } if(psdMatchStringChunk(pic, IFFCHNK_DEVID, sourceplnode->devid)) { spic = pic; } pic = psdNextCfgForm(pic); } if(!(tpic && spic)) { return(FALSE); } // delete old contents if(result == 1) { while((pic = psdFindCfgForm(tpic, IFFFORM_DEVCFGDATA))) { psdRemCfgForm(pic); } while((pic = psdFindCfgForm(tpic, IFFFORM_IFCFGDATA))) { psdRemCfgForm(pic); } } // copy device cfg data pic = psdFindCfgForm(spic, IFFFORM_DEVCFGDATA); while(pic) { form = psdWriteCfg(pic); if(form) { psdAddCfgEntry(tpic, form); psdFreeVec(form); } pic = psdNextCfgForm(pic); } // copy interface cfg data pic = psdFindCfgForm(spic, IFFFORM_IFCFGDATA); while(pic) { form = psdWriteCfg(pic); if(form) { psdAddCfgEntry(tpic, form); psdFreeVec(form); } pic = psdNextCfgForm(pic); } return(TRUE); } break; case IFFFORM_IFCFGDATA: case IFFFORM_DEVCFGDATA: if((targetid == IFFFORM_DEVCFGDATA) || (targetid == IFFFORM_IFCFGDATA)) { if(strcmp(sourceplnode->owner, targetplnode->owner)) { result = MUI_RequestA(_app(obj), _win(obj), 0, NULL, "Add to device|Cancel", "Sorry, but only prefs of the same owner can\n" "be replaced.\n\n" "Do you wish to add this prefs\n" "to the device instead?", NULL); if(result < 1) { return(FALSE); } targetid = IFFFORM_DEVICECFG; } else { result = MUI_Request(_app(obj), _win(obj), 0, NULL, "Replace|Cancel", "Do you want to \33breplace\33n the prefs of\n" "\33b%s\33n\n" "by those of\n" "\33b%s\33n?", targetplnode->id, sourceplnode->id); if(result < 1) { return(FALSE); } pic = psdGetUsbDevCfg(sourceplnode->owner, sourceplnode->devid, sourceplnode->ifid); if(pic) { form = psdWriteCfg(pic); if(form) { psdSetUsbDevCfg(sourceplnode->owner, targetplnode->devid, targetplnode->ifid, form); psdFreeVec(form); } } return(TRUE); } } if(targetid == IFFFORM_DEVICECFG) { pic = psdGetUsbDevCfg(sourceplnode->owner, targetplnode->devid, sourceplnode->ifid); if(pic) { result = MUI_Request(_app(obj), _win(obj), 0, NULL, "Replace|Cancel", "Do you want to \33breplace\33n the prefs of\n" "\33b%s\33n\n" "by the one in\n" "\33b%s\33n?", targetplnode->id, sourceplnode->id); } else { result = MUI_Request(_app(obj), _win(obj), 0, NULL, "Add|Cancel", "Do you want to \33badd\33n the prefs of\n" "\33b%s\33n\n" "to the device\n" "\33b%s\33n?", sourceplnode->id, targetplnode->id); } if(result < 1) { return(FALSE); } pic = psdGetUsbDevCfg(sourceplnode->owner, sourceplnode->devid, sourceplnode->ifid); if(pic) { form = psdWriteCfg(pic); if(form) { psdSetUsbDevCfg(sourceplnode->owner, targetplnode->devid, sourceplnode->ifid, form); psdFreeVec(form); } } return(TRUE); } break; case IFFCHNK_FORCEDBIND: if((targetid == IFFFORM_DEVICECFG) || (targetid == IFFFORM_DEVCFGDATA) || (targetid == IFFFORM_IFCFGDATA) || (targetid == IFFCHNK_FORCEDBIND)) { psdSetForcedBinding(sourceplnode->owner, targetplnode->devid, targetplnode->ifid); return(TRUE); } break; } return(FALSE); }