/** * Create a nsurl from a path using amiga file handling. * * Perform the necessary operations on a path to generate a nsurl. * * @param[in] path The path to convert. * @param[out] url_out pointer to recive the nsurl, The returned url * must be unreferenced by the caller. * @return NSERROR_OK and the url is placed in \a url or error code on * faliure. */ static nserror amiga_path_to_nsurl(const char *path, struct nsurl **url_out) { char *colon = NULL; char *r = NULL; char newpath[1024 + strlen(path)]; BPTR lock = 0; nserror ret; if((lock = Lock(path, SHARED_LOCK))) { DevNameFromLock(lock, newpath, sizeof newpath, DN_FULLPATH); UnLock(lock); } else strlcpy(newpath, path, sizeof newpath); r = malloc(strlen(newpath) + SLEN("file:///") + 1); if (r == NULL) { return NSERROR_NOMEM; } if((colon = strchr(newpath, ':'))) *colon = '/'; strcpy(r, "file:///"); strcat(r, newpath); ret = nsurl_create(r, url_out); free(r); return ret; }
HOOKF(void, ami_menu_item_arexx_entries, APTR, window, struct IntuiMessage *) { char *script = hook->h_Data; char *temp; struct gui_window_2 *gwin; GetAttr(WINDOW_UserData, (Object *)window, (ULONG *)&gwin); if(script) { if((temp = AllocVecTagList(1024, NULL))) { BPTR lock; if((lock = Lock(nsoption_charp(arexx_dir), SHARED_LOCK))) { DevNameFromLock(lock, temp, 1024, DN_FULLPATH); AddPart(temp, script, 1024); ami_arexx_execute(temp); FreeVec(temp); UnLock(lock); } } } }
/********************************************************** ** ** The following function saves the variable name passed in ** 'varname' to the ENV(ARC) system so that the application ** can become AmiUpdate aware. ** **********************************************************/ void SetAmiUpdateENVVariable( CONST_STRPTR varname ) { /* AmiUpdate support code */ BPTR lock; APTR oldwin; /* obtain the lock to the home directory */ if(( lock = GetProgramDir() )) { TEXT progpath[2048]; TEXT varpath[1024] = "AppPaths"; /* get a unique name for the lock, this call uses device names, as there can be multiple volumes with the same name on the system */ if( DevNameFromLock( lock, progpath, sizeof(progpath), DN_FULLPATH )) { /* stop any "Insert volume..." type requesters */ oldwin = SetProcWindow((APTR)-1); /* finally set the variable to the path the executable was run from don't forget to supply the variable name to suit your application */ AddPart( varpath, varname, 1024); SetVar( varpath, progpath, -1, GVF_GLOBAL_ONLY|GVF_SAVE_VAR ); /* turn requesters back on */ SetProcWindow( oldwin ); } } }
char *path_to_url(const char *path) { char *colon = NULL; char *r = NULL; char newpath[1024 + strlen(path)]; BPTR lock = 0; if(lock = Lock(path, MODE_OLDFILE)) { DevNameFromLock(lock, newpath, sizeof newpath, DN_FULLPATH); UnLock(lock); } else strlcpy(newpath, path, sizeof newpath); r = malloc(strlen(newpath) + SLEN("file:///") + 1); if(colon = strchr(newpath, ':')) *colon = '/'; strcpy(r, "file:///"); strcat(r, newpath); return r; }