/*--- Received when a download has ended ---*/ void Downloader::FileFinished(QNetworkReply* mreply) { qDebug() << "Downloader::FileFinished"; disconnect(reply, SIGNAL(readyRead()), this, SLOT(FilePart())); disconnect(reply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(FileError(QNetworkReply::NetworkError))); mreply->deleteLater(); lastDownloadedSize = 0; downloadedSize = 0; if (bDownloading) { bDownloading = false; timeoutTimer->stop(); currentFile->close(); delete currentFile; if (currentFtpFile == FTP_RELEASE_NOTES_FILE) { emit Stage1(); DownloadFile(FTP_MANIFEST_ROOT, FTP_MANIFEST_FILE); } else if (currentFtpFile == FTP_MANIFEST_FILE) { emit Stage2(); } else { emit FileDownloaded(); } } }
EFFECTGETARGS(frame,tags,PPTBase,EffectBase) { struct convargs args = {0}, *saved; PERROR res; ULONG *rxargs; STRPTR buffer; SetDefaults(&args); if( saved = GetOptions(MYNAME) ) { args = *saved; } buffer = (STRPTR) TagData( PPTX_ArgBuffer, tags ); rxargs = (ULONG *)TagData( PPTX_RexxArgs, tags ); if(rxargs) { if( (res = LoadConvFilter( PPTBase, (UBYTE *)rxargs[0], &args )) != PERR_OK ) { SetErrorMsg(frame,"Couldn't open the specified convolution file"); return PERR_FILEREAD; } strncpy( args.name, FilePart( (UBYTE *)rxargs[0] ), 40 ); } if( (res = GetConvArgs( frame, tags, PPTBase, &args )) == PERR_OK ) { SaveConvFilter( PPTBase, TEMPFILENAME, &args ); SPrintF( buffer, "FILE %s", TEMPFILENAME ); } return res; }
/** * Get the basename of a file using posix path handling. * * This gets the last element of a path and returns it. * * @param[in] path The path to extract the name from. * @param[in,out] str Pointer to string pointer if this is NULL enough * storage will be allocated for the path element. * @param[in,out] size The size of the space available if \a * str not NULL on input and set to the total * output length on output. * @return NSERROR_OK and the complete path is written to str * or error code on faliure. */ static nserror amiga_basename(const char *path, char **str, size_t *size) { const char *leafname; char *fname; if (path == NULL) { return NSERROR_BAD_PARAMETER; } leafname = FilePart(path); if (leafname == NULL) { return NSERROR_BAD_PARAMETER; } fname = strdup(leafname); if (fname == NULL) { return NSERROR_NOMEM; } *str = fname; if (size != NULL) { *size = strlen(fname); } return NSERROR_OK; }
INLINE STRPTR Executable(struct Task *task) { STRPTR ename = NULL; GLOBAL struct DosLibrary * DOSBase; // ENTER(); DBG_ASSERT(G->mTask == FindTask(NULL)); DBG_ASSERT(IsTaskRunning(task)==TRUE); if((ename = Malloc(1025))) { struct Process * pr = ((struct Process *)task); STRPTR tn = GetTaskName(task, NULL); if(task->tc_Node.ln_Type != NT_TASK && pr->pr_HomeDir) { NameFromLock( pr->pr_HomeDir, ename, 1024); } if(tn != NULL) { AddPart( ename, FilePart(tn), 1024); Free(tn); } } // DBG_STRING(ename); // RETURN(ename); return(ename); }
void rexxrecbinfile(struct RexxMsg *mess) { char buf[1024]; struct TransferFiles *tf; Servermem->action[nodnr] = UPLOAD; Servermem->varmote[nodnr] = 0; Servermem->vilkastr[nodnr] = NULL; if(recbinfile(hittaefter(mess->rm_Args[0]))) strcpy(buf,"0"); else { buf[0] = NULL; for(tf=(struct TransferFiles *)tf_list.mlh_Head;tf->node.mln_Succ;tf=(struct TransferFiles *)tf->node.mln_Succ) { strcat(buf,FilePart(tf->Filnamn)); strcat(buf,(char *)" "); } buf[strlen(buf)-1] = NULL; } while(tf=(struct TransferFiles *)RemHead((struct List *)&tf_list)) FreeMem(tf,sizeof(struct TransferFiles)); if(mess->rm_Action & 1L<<RXFB_RESULT) { if(!(mess->rm_Result2=(long)CreateArgstring(buf,strlen(buf)))) puttekn("\r\n\nKunde inte allokera en Argstring!\r\n\n",-1); } }
nserror gui_window_save_link(struct gui_window *g, nsurl *url, const char *title) { char fname[1024]; STRPTR openurlstring,linkname; struct DiskObject *dobj = NULL; linkname = ASPrintf("Link_to_%s",FilePart(nsurl_access(url))); if(AslRequestTags(savereq, ASLFR_Window, g->shared->win, ASLFR_SleepWindow, TRUE, ASLFR_TitleText,messages_get("NetSurf"), ASLFR_Screen,scrn, ASLFR_InitialFile,linkname, TAG_DONE)) { strlcpy(fname, savereq->fr_Drawer, 1024); AddPart(fname,savereq->fr_File,1024); ami_set_pointer(g->shared, GUI_POINTER_WAIT, false); if(ami_download_check_overwrite(fname, g->shared->win, 0)) { BPTR fh; if((fh = FOpen(fname,MODE_NEWFILE,0))) { /* \todo Should be URLOpen on OS4.1 */ openurlstring = ASPrintf("openurl \"%s\"\n",nsurl_access(url)); FWrite(fh,openurlstring,1,strlen(openurlstring)); FClose(fh); FreeVec(openurlstring); SetComment(fname, nsurl_access(url)); dobj = GetIconTags(NULL,ICONGETA_GetDefaultName,"url", ICONGETA_GetDefaultType,WBPROJECT, TAG_DONE); dobj->do_DefaultTool = "IconX"; PutIconTags(fname,dobj, ICONPUTA_NotifyWorkbench,TRUE, TAG_DONE); FreeDiskObject(dobj); } FreeVec(linkname); } ami_reset_pointer(g->shared); } return NSERROR_OK; }
void LeftListInsert( struct ClassData * data, STRPTR IndexFile ) { UBYTE tmp[128], *t=tmp, *f=FilePart(IndexFile); int maxlen = sizeof(tmp)-1; while(*f && *f != '.' && (maxlen-- > 0)) { *t++ = *f++; } *t = 0; DoMethod( data->leftlist, MUIM_NList_InsertSingle, (ULONG) tmp, MUIV_List_Insert_Sorted ); }
BlankerEntry *NewBlankerEntry( STRPTR Path, STRPTR Name, STRPTR Comment ) { BlankerEntry *New = AllocVec( sizeof( BlankerEntry ), MEMF_CLEAR ); if( New ) { strcpy( New->be_Path, Path ); AddPart( New->be_Path, Name, 128 ); New->be_Name = FilePart( New->be_Path ); New->be_Disabled = !Stricmp( Comment, "Disabled" ); New->be_Node.ln_Name = New->be_Name; } return New; }
void os_set_filenumber(char *NewName,int Size,int n) { char *file; int i; file = FilePart(NewName); for (i = strlen(file)-1; i >= 0; i--) { if (isdigit(*(file+i))) { *(file+i) = '0'+n; return; } } }
EFFECTEXEC(frame,tags,PPTBase,EffectBase) { struct Library *UtilityBase = PPTBase->lb_Utility; struct DosLibrary *DOSBase = PPTBase->lb_DOS; FRAME *newframe = NULL; struct convargs args = {0}, *saved; PERROR res; ULONG *rxargs; SetDefaults(&args); if( saved = GetOptions(MYNAME) ) { args = *saved; } rxargs = (ULONG *)TagData( PPTX_RexxArgs, tags ); if(rxargs) { if( (res = LoadConvFilter( PPTBase, (UBYTE *)rxargs[0], &args )) != PERR_OK ) { SetErrorMsg(frame,"Couldn't open the specified convolution file"); return NULL; } strncpy( args.name, FilePart( (UBYTE *)rxargs[0] ), 40 ); } else { res = GetConvArgs( frame, tags, PPTBase, &args ); } if( res == PERR_OK ) { /* * Make the actual convolution */ if(newframe = DupFrame( frame, DFF_COPYDATA )) { res = DoConvolute( frame, newframe, &args, PPTBase ); if(res != PERR_OK) { RemFrame(newframe); newframe = NULL; SetErrorCode( frame, res ); } } else { SetErrorMsg(frame,"Unable to duplicate frame"); } PutOptions(MYNAME,&args,sizeof(struct convargs)); } return newframe; }
char *archdep_program_name(void) { static char *program_name = NULL; if (program_name == NULL) { char *p, name[1024]; GetProgramName(name, 1024); p = FilePart(name); if (p != NULL) { program_name = lib_stralloc(p); } } return program_name; }
// Ask for font name void font_ask_name(font_data *data) { char file[40],path[256],*fileptr; // Copy path strcpy(path,data->font_name); // Split filename if ((fileptr=FilePart(path))) { strcpy(file,fileptr); *fileptr=0; } else file[0]=0; // Empty path? if (!path[0]) strcpy(path,"fonts:"); // Busy window SetWindowBusy(data->window); // Display requester if (AslRequestTags(((WindowData *)data->window->UserData)->request, ASLFR_Window,data->window, ASLFR_TitleText,GetString(&data->locale,MSG_FONT_SELECT), ASLFR_InitialFile,file, ASLFR_InitialDrawer,path, ASLFR_IntuiMsgFunc,&data->refresh_hook, TAG_END)) { // Get pathname strcpy(path,((WindowData *)data->window->UserData)->request->fr_Drawer); AddPart(path,((WindowData *)data->window->UserData)->request->fr_File,256); // Get font name font_get_name(data,path); // Get new font font_get_font(data); font_show_font(data,FALSE); } // Unbusy window else ClearWindowBusy(data->window); }
void ami_file_save_req(int type, struct gui_window_2 *gwin, struct hlcache_handle *object) { char *fname = AllocVecTags(1024, NULL); if(AslRequestTags(savereq, ASLFR_Window, gwin->win, ASLFR_SleepWindow, TRUE, ASLFR_TitleText, messages_get("NetSurf"), ASLFR_Screen, scrn, ASLFR_InitialFile, object ? FilePart(nsurl_access(hlcache_handle_get_url(object))) : "", TAG_DONE)) { strlcpy(fname, savereq->fr_Drawer, 1024); AddPart(fname, savereq->fr_File, 1024); ami_file_save(type, fname, gwin->win, object, gwin->bw->window->favicon, gwin->bw); } if(fname) FreeVec(fname); }
/*--- Prepare download, then issue the FTP commands ---*/ void Downloader::DownloadFile(QString dir, QString file) { qDebug() << "Downloader::DownloadFile " + dir + file; // Data QUrl fileUrl(*baseUrl); QNetworkRequest r; QDir tempDir("."); // Setup downloadedSize = 0; lastDownloadedSize = 0; currentFtpDir = dir; currentFtpFile = file; currentFile = new QFile(currentFtpDir + currentFtpFile); fileUrl.setPath(FTP_UPDATE_ROOT + currentFtpDir + currentFtpFile); r.setUrl(fileUrl); // Local file preparation if (currentFtpDir.length() > 0) { tempDir.mkpath(currentFtpDir); } if (currentFtpFile.length() > 0 && currentFile->exists()) { currentFile->remove(); } currentFile->open(QIODevice::WriteOnly); // Download command bDownloading = true; reply = ftp->get(r); reply->setReadBufferSize(FTP_PART_SIZE); connect(reply, SIGNAL(readyRead()), this, SLOT(FilePart())); connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(FileError(QNetworkReply::NetworkError))); // Timers timeoutTimer->setSingleShot(true); timeoutTimer->start(FTP_TIMEOUT); }
static BOOL do_filereq(struct Window *win,char *path,int title,ULONG flags) { BOOL ok; char *ptr=0; char file[40]; if (!win) return(FALSE); // Invalid path? if (!path[0]) strcpy(path,"DOpus5:System/"); // Get filename else if ((ptr=FilePart(path))) { strcpy(file,ptr); *ptr=0; ptr=file; } // Display file requester if ((ok=AslRequestTags(DATA(win)->request, ASLFR_Window,win, ASLFR_TitleText,GetString(locale,title), ASLFR_InitialFile,(ptr)?ptr:"", ASLFR_InitialDrawer,path, ASLFR_Flags1,FRF_PRIVATEIDCMP | flags, TAG_END))) { // Get new path strcpy(path,DATA(win)->request->fr_Drawer); AddPart(path,DATA(win)->request->fr_File,256); } return(ok); }
// Write introduction void write_theme_intro(APTR file,char *filename) { char buf[400]; lsprintf(buf, "/* D5THEME\n\n" " %s\n\n" " Directory Opus Magellan II Theme File\n" "*/\n\n", (IPTR)FilePart(filename)); WriteBuf(file,buf,-1); // Bit that gets the ARexx port WriteBuf(file, "parse arg dopus_port apply_flags\n" "if dopus_port='' then\n" "\tdopus_port='DOPUS.1'\n" "address value dopus_port\n\n", -1); WriteBuf(file, "if apply_flags='' then\n" "\tapply_flags='PFBS'\n" "else\n" "\tapply_flags=upper(apply_flags)\n\n", -1); // Set results and failat WriteBuf(file, "options results\n" "options failat 21\n\n", -1); }
// Get font name from string void font_get_name(font_data *data,char *name) { short len; // .font suffix? if ((len=strlen(name))>5 && stricmp(name+len-5,".font")==0) { // Use name as given strcpy(data->font_name,name); } // Numeric name? else if ((len=atoi(FilePart(name)))) { // Strip filename *(PathPart(name))=0; // Store name strcpy(data->font_name,name); strcat(data->font_name,".font"); // Store size data->font_size=len; data->first=TRUE; } // Name specified without .font else { // Store name strcpy(data->font_name,name); strcat(data->font_name,".font"); } }
char *filename_from_path(char *path) { return strdup(FilePart(path)); }
// Save sound event BOOL save_theme_sound(APTR file,DOpusCallbackInfo *info,char *type,struct MsgPort *reply_port,char *build_path,APTR progress) { char buf[400],buf2[340],temp[340],*ptr; BOOL ret=1; short len; // Increment progress if (progress) SetProgressWindowTags(progress,PW_FileInc,1,TAG_END); // Get settings lsprintf(buf,"dopus query sound \"%s\"",(IPTR)type); DC_CALL5(info, dc_RexxCommand, DC_REGA0, buf, DC_REGA1, buf2, DC_REGD0, sizeof(buf2), DC_REGA2, reply_port, DC_REGD1, 0); //DC_RexxCommand(info,buf,buf2,sizeof(buf2),reply_port,0); //info->dc_RexxCommand(buf,buf2,sizeof(buf2),reply_port,0); // Build command ptr=buf2; rexx_parse_word(&ptr,temp,254); if ((len=strlen(temp))>0) { // Building theme? if (*build_path && temp[len-1]!='/' && !strchr(temp,'*') && !strchr(temp,'#') && !strchr(temp,'?')) { BPTR lock; char dest[340]; // Try to create in sounds sub-directory strcpy(dest,build_path); AddPart(dest,"Sounds",340); if ((lock=CreateDir(dest)) || IoErr()==ERROR_OBJECT_EXISTS) UnLock(lock); else strcpy(dest,build_path); // Add filename AddPart(dest,FilePart(temp),340); // Try to copy file if (theme_copy_file(temp,dest)) lsprintf(temp,"D5THEMES:%s/Sounds/%s",(IPTR)FilePart(build_path),(IPTR)FilePart(dest)); else ret=0; } lsprintf(buf,"\tdopus set sound \"\'%s\'\" \"\'%s\'\"",(IPTR)type,(IPTR)temp); } else { lsprintf(buf,"\tdopus clear sound \"\'%s\'\"",(IPTR)type); ptr=0; } // Write command to rexx script WriteBuf(file,buf,-1); if (ptr) WriteBuf(file,ptr,-1); WriteBuf(file,"\n",1); return ret; }
// Display a buffer in a lister // Called from LISTER PROCESS void lister_show_buffer(Lister *lister,DirBuffer *buffer,int show,BOOL active) { // Different to current buffer? if (lister->cur_buffer!=buffer) { // End a direct edit lister_end_edit(lister,0); // Clear lock pointer in current buffer buffer_clear_lock(lister->cur_buffer,0); // Free icons backdrop_free_list(lister->backdrop_info); // Store new buffer pointer lister->cur_buffer=buffer; buffer->buf_CurrentLister=lister; // Remove buffer and add to head of list Remove(&buffer->node); AddHead(&GUI->buffer_list.list,&buffer->node); // See if buffer needs to be resorted lister_resort(lister,0); // Clear save status flag lister->flags&=~LISTERF_SAVE_STATUS; // Does new buffer have a custom handler? if (lister->cur_buffer->buf_CustomHandler[0] && active) { // Send active message buffer_active(lister->cur_buffer,0); } // Add to history list lister_add_history(lister); } // Initialise path field if (show && lister_valid_window(lister)) { // Is volume present? if (!lister->cur_buffer->buf_CustomHandler[0] && VolumePresent(buffer)) { BPTR lock; struct FileInfoBlock __aligned fib; // Lock path if (lock=Lock(buffer->buf_Path,ACCESS_READ)) { // Store full path NameFromLock(lock,buffer->buf_ExpandedPath,512); AddPart(buffer->buf_ExpandedPath,"",512); // Examine object Examine(lock,&fib); UnLock(lock); // Save object name if (fib.fib_FileName[0]) strcpy(buffer->buf_ObjectName,fib.fib_FileName); else { if (buffer->flags&DWF_ROOT) { char *ptr; stccpy(buffer->buf_ObjectName,buffer->buf_ExpandedPath,GUI->def_filename_length-1); if (ptr=strchr(buffer->buf_ObjectName,':')) *ptr=0; } else stccpy(buffer->buf_ObjectName,FilePart(buffer->buf_ExpandedPath),GUI->def_filename_length-1); } } // Failed to lock else strcpy(buffer->buf_ExpandedPath,buffer->buf_Path); // Update disk name and size lister_update_name(lister); } // No, refresh disk name from buffer else lister_show_name(lister); // Not showing icons? if (!(lister->flags&LISTERF_VIEW_ICONS) || lister->flags&LISTERF_ICON_ACTION) { // Update path field lister_update_pathfield(lister); // Refresh window lister_refresh_display(lister,REFRESHF_SLIDERS|REFRESHF_STATUS|REFRESHF_CLEAR_ICONS); // Show selection information select_show_info(lister,1); } } }
// Get font void font_get_font(font_data *data) { // Make window busy SetWindowBusy(data->window); // Existing font? if (data->font) { // Free font CloseFont(data->font); data->font=NULL; } // Has the font name changed? if (stricmp(data->font_name,data->last_font_name)) { struct FontContentsHeader *fch; BPTR lock; // Empty labels font_build_labels(data,0); // Is the name a full path? if (strchr(data->font_name,'/') || strchr(data->font_name,':')) { // Lock font if ((lock=Lock(data->font_name,ACCESS_READ))) { BPTR parent; // Get lock on parent parent=ParentDir(lock); // Unlock lock on file UnLock(lock); lock=parent; } } // Lock fonts: directory else lock=Lock("fonts:",ACCESS_READ); // Got lock? if (lock) { // Get font contents if ((fch=NewFontContents(lock,FilePart(data->font_name)))) { // Build labels font_build_labels(data,fch); // Free contents DisposeFontContents(fch); } // Unlock drawer UnLock(lock); } } // Fill out TextAttr data->attr.ta_Name=data->font_name; data->attr.ta_YSize=data->font_size; data->attr.ta_Style=0; data->attr.ta_Flags=0; // Open font data->font=OpenDiskFont(&data->attr); // Show font name and size SetGadgetValue(data->list,GAD_FONT_FONT,(ULONG)FilePart(data->font_name)); SetGadgetValue(data->list,GAD_FONT_SIZE,data->font_size); // Got font? if (data->font) { short ch,pos,hi; // First character ch=data->font->tf_LoChar; if (ch<33) ch=33; // Hi character hi=data->font->tf_HiChar; if (hi>126 && ch<127) hi=127; // Build display text for (pos=0;ch<hi;ch++,pos++) data->font_text[pos]=ch; data->font_text[pos]=0; // Got labels? if (data->size_labels) { // Find label corresponding to this size for (pos=0;data->size_labels[pos];pos++) { if (atoi(data->size_labels[pos])==data->font_size) { // Set cycle gadget SetGadgetValue(data->list,GAD_FONT_CYCLE,pos); break; } } } } // Empty labels else font_build_labels(data,0); // Copy name strcpy(data->last_font_name,data->font_name); // Clear 'first' flag data->first=FALSE; // Clear window busy ClearWindowBusy(data->window); }
// Solicit a file request_file( struct Window *parent, char *title, char *buffer, char *def, ULONG flags, char *pattern) { struct IBox coords; struct FileRequester *filereq; char *path,*file=0; int ret; // Allocate path if (!(path=AllocVec(300,MEMF_CLEAR))) return 0; // Get current path if (buffer[0]) strcpy(path,buffer); else if (def) strcpy(path,def); if (path[0]) { file=FilePart(path); if (file && file>path) { strcpy(path+256,file); *file=0; file=path+256; } } // Get current requester coordinates GetSemaphore(&GUI->req_lock,SEMF_SHARED,0); coords=GUI->req_coords; FreeSemaphore(&GUI->req_lock); // Allocate filerequester if (!(filereq=AllocAslRequestTags(ASL_FileRequest, (flags&(1<<30))?ASLFR_Screen:ASLFR_Window,parent, ASLFR_TitleText,title, (file)?ASLFR_InitialFile:TAG_IGNORE,file, (*path)?ASLFR_InitialDrawer:TAG_IGNORE,path, ASLFR_Flags1,(flags|FRF_PRIVATEIDCMP)&~((1<<31)|(1<<30)|(1<<29)), ASLFR_Flags2,(flags&(1<<31))?0:FRF_REJECTICONS, ASLFR_InitialLeftEdge,coords.Left, ASLFR_InitialTopEdge,coords.Top, ASLFR_InitialWidth,coords.Width, ASLFR_InitialHeight,coords.Height, (flags&(1<<29))?ASLFR_InitialPattern:TAG_IGNORE,pattern, TAG_END))) { FreeVec(path); return 0; } // Display requester ret=AslRequest(filereq,0); // Build path strcpy(buffer,filereq->fr_Drawer); AddPart(buffer,filereq->fr_File,256); if (!*buffer || !*filereq->fr_File) ret=0; // Save coordinates GetSemaphore(&GUI->req_lock,SEMF_EXCLUSIVE,0); GUI->req_coords=*((struct IBox *)&filereq->fr_LeftEdge); FreeSemaphore(&GUI->req_lock); // Free file requester FreeAslRequest(filereq); FreeVec(path); return ret; }
LIBFUNC ULONG SAVEDS ASM L_ProgressHook(REG(a0, struct Hook *hook), REG(a2, int skip),REG(a1, struct xadProgressInfo *xpi)) { struct xoData *data = hook->h_Data; /*struct Library *DOpusBase; struct DosLibrary *DOSBase; struct Library *UtilityBase;*/ // struct TagItem tags[] = {{PW_FileDone, 0, TAG_DONE}}; struct TagItem tags[] = {{PW_FileDone, 0}, {TAG_DONE}}; /* struct TagItem reqtags[]={AR_Window,0,AR_Message,0, AR_Button,0, AR_Button,0, AR_Button,0, AR_Button,0, AR_Button,0, AR_Button,0, TAG_DONE};*/ ULONG ret = XADPIF_OK; LONG rc; char mess[200]; DOpusCallbackInfo *infoptr = &data->hook; tags[0].ti_Data = xpi->xpi_CurrentSize; /*if(!(DOpusBase=data->DOpusBase)) return(0); if(!(DOSBase=data->DOSBase)) return(0); if(!(UtilityBase=data->UtilityBase)) return(0);*/ SetProgressWindow(data->ptr, tags); switch(xpi->xpi_Mode) { case XADPMODE_ERROR: { sprintf(data->buf,"lister request %s \"%s\" %s|%s", data->lists, xadGetErrorText(xpi->xpi_Error), DOpusGetString(data->locale, MSG_OK), DOpusGetString(data->locale, MSG_ABORT)); if (!DC_CALL4(infoptr, dc_SendCommand, DC_REGA0, IPCDATA(data->ipc), DC_REGA1, data->buf, DC_REGA2, NULL, DC_REGD0, 0)) //if(!data->hook.dc_SendCommand(IPCDATA(data->ipc), data->buf, NULL, NULL)) ret &= ~XADPIF_OK; break; } case XADPMODE_ASK: { if(xpi->xpi_Status & XADPIF_OVERWRITE) { if(data->All == TRUE) { ret |= XADPIF_OVERWRITE; break; } else if(data->All == FALSE) break; sprintf(mess, DOpusGetString(data->locale, MSG_EXISTS_FORM), FilePart(xpi->xpi_FileName)); /* reqtags[0].ti_Data = (ULONG) data->listw; reqtags[1].ti_Data = (ULONG) mess; reqtags[2].ti_Data = (ULONG) DOpusGetString(data->locale,MSG_REPLACE); reqtags[3].ti_Data = (ULONG) DOpusGetString(data->locale,MSG_REPLACE_ALL); reqtags[4].ti_Data = (ULONG) DOpusGetString(data->locale,MSG_SKIP); reqtags[5].ti_Data = (ULONG) DOpusGetString(data->locale,MSG_SKIP_ALL); reqtags[6].ti_Data = (ULONG) DOpusGetString(data->locale,MSG_ABORT); AsyncRequest(IPCDATA(data->ipc),REQTYPE_SIMPLE,NULL,NULL,NULL,reqtags); */ sprintf(data->buf, "lister request %s \"%s\" %s|%s|%s|%s|%s", data->lists, mess, DOpusGetString(data->locale, MSG_REPLACE), DOpusGetString(data->locale, MSG_REPLACE_ALL), DOpusGetString(data->locale, MSG_SKIP), DOpusGetString(data->locale, MSG_SKIP_ALL), DOpusGetString(data->locale, MSG_ABORT)); rc = DC_CALL4(infoptr, dc_SendCommand, DC_REGA0, IPCDATA(data->ipc), DC_REGA1, data->buf, DC_REGA2, NULL, DC_REGD0, 0); //rc = data->hook.dc_SendCommand(IPCDATA(data->ipc), data->buf, NULL, NULL); if(!rc) ret = 0; else { if(rc <= 2) ret |= XADPIF_OVERWRITE; if(rc == 2) data->All = TRUE; else if(rc == 4) data->All = FALSE; } } break; } } return ret; }
char *uilib_select_file_autostart(const char *title, unsigned int filterlist, unsigned int type, int style, int *autostart, char *resource_readonly) { char *name = NULL; char *initialdir = NULL; char *initialfile = NULL; // char *filter = NULL; // unsigned int filterindex; // OPENFILENAME ofn; // int result; char *ret = NULL; if (styles[style].initialdir_resource != NULL) resources_get_value(styles[style].initialdir_resource, (void *)&initialdir); initialfile = ui_file_selector_initialfile[style]; if (styles[style].file_resource != NULL) resources_get_value(styles[style].file_resource, (void *)&initialfile); #if 0 if (fontfile == NULL) { fontfile = util_concat(archdep_boot_path(), "\\fonts\\cbm-directory-charset.fon", NULL); font_loaded = 0; EnumFontFamilies(GetDC(NULL), "cbm-directory-charset/ck!", (FONTENUMPROC)EnumFontProc, (LPARAM)&font_loaded); if (font_loaded == 0) { font_loaded = AddFontResource(fontfile); } } filter = set_filter(filterlist, &filterindex); memset(&ofn, 0, sizeof(ofn)); ofn.lStructSize = sizeof(ofn); ofn.hwndOwner = hwnd; ofn.hInstance = winmain_instance; ofn.lpstrFilter = filter; ofn.lpstrCustomFilter = NULL; ofn.nMaxCustFilter = 0; ofn.nFilterIndex = filterindex; ofn.lpstrFile = st_name; ofn.nMaxFile = sizeof(st_name); ofn.lpstrFileTitle = NULL; ofn.nMaxFileTitle = 0; ofn.lpstrInitialDir = initialdir; ofn.lpstrTitle = title; ofn.Flags = OFN_EXPLORER | OFN_HIDEREADONLY | OFN_NOTESTFILECREATE | OFN_SHAREAWARE | OFN_ENABLESIZING; if (styles[style].TemplateID != 0) { ofn.Flags |= OFN_ENABLEHOOK | OFN_ENABLETEMPLATE; ofn.lpfnHook = styles[style].hook_proc; ofn.lpTemplateName = MAKEINTRESOURCE(styles[style].TemplateID); } else { ofn.lpfnHook = NULL; ofn.lpTemplateName = NULL; } if (type == UILIB_SELECTOR_TYPE_FILE_LOAD) ofn.Flags |= OFN_FILEMUSTEXIST; ofn.nFileOffset = 0; ofn.nFileExtension = 0; ofn.lpstrDefExt = NULL; read_content_func = styles[style].content_read_function; autostart_result = autostart; res_readonly = resource_readonly; vsync_suspend_speed_eval(); if (type == UILIB_SELECTOR_TYPE_FILE_SAVE) result = GetSaveFileName(&ofn); else result = GetOpenFileName(&ofn); update_filter_history(ofn.nFilterIndex); #endif name = ui_filereq(title, styles[style].TemplateID, initialdir, initialfile, styles[style].content_read_function, autostart, resource_readonly); if (name != NULL) { char newdir[1024], *ptr = PathPart(name); memcpy(newdir, name, (int)(ptr - name)); newdir[(int)(ptr - name)] = '\0'; if (ui_file_selector_initialfile[style] != NULL) lib_free(ui_file_selector_initialfile[style]); if (styles[style].file_resource != NULL) resources_set_value(styles[style].file_resource, FilePart(name)); ui_file_selector_initialfile[style] = lib_stralloc(FilePart(name)); resources_set_value(styles[style].initialdir_resource, newdir); ret = lib_stralloc(name); } // lib_free(filter); return ret; }
void file_open_with(struct Window *window,char *name,ULONG flags) { char *buffer; short len,wb=0,ok=0; struct DiskObject *icon; // Allocate buffer if (!(buffer=AllocVec(1400,MEMF_CLEAR))) return; // App already selected? if (flags&(1<<30)) { short num; struct Node *node; // Get application number in list num=flags&~(1<<30); // Lock the list lock_listlock(&GUI->open_with_list,0); // Find the node for (node=GUI->open_with_list.list.lh_Head; node->ln_Succ; node=node->ln_Succ) { // Matched? if (num--==0) break; } // Valid node? if (node->ln_Succ) { // Get the application name strcpy(buffer+1,node->ln_Name); ok=1; } // Unlock the list unlock_listlock(&GUI->open_with_list); } // Need to ask? if (!ok) { // Build title lsprintf(buffer+1024,GetString(&locale,MSG_SELECT_APP),FilePart(name)); // Ask for file if (!(request_file( window, buffer+1024, buffer+1, 0, 0,0)) || !*(buffer+1)) { FreeVec(buffer); return; } // Add App to OpenWith list add_open_with(buffer+1); } // See if app has an icon if (icon=GetDiskObject(buffer+1)) { // Is it a tool? if (icon->do_Type==WBTOOL) { // Launch as Workbench App wb=1; } // Free icon FreeDiskObject(icon); } // Fill in quotes buffer[0]='\"'; buffer[(len=strlen(buffer))]='\"'; // Add filename in quotes buffer[len+1]=' '; buffer[len+2]='\"'; strcpy(buffer+len+3,name); buffer[(len=strlen(buffer))]='\"'; buffer[len+1]=0; // Launch the function file_launch(buffer,wb,"ram:"); // Free buffer FreeVec(buffer); }
void desktop_drop(BackdropInfo *info,DOpusAppMessage *msg,UWORD qual) { BackdropObject *drop_obj; short ok=0,x,y; char *name,*source_path; short arg,action=DESKTOP_POPUP_LEFTOUT; struct ArgArray *array=0; struct ArgArrayEntry *aae; BOOL check; // Lock backdrop list lock_listlock(&info->objects,0); // See if we dropped stuff on an object if ((drop_obj=backdrop_get_object(info,msg->da_Msg.am_MouseX,msg->da_Msg.am_MouseY,0))) { // Is shift/alt down? if ((qual&(IEQUALIFIER_LSHIFT|IEQUALIFIER_LALT))==(IEQUALIFIER_LSHIFT|IEQUALIFIER_LALT)) { char pathname[256]; // Get path of first file GetWBArgPath(&msg->da_Msg.am_ArgList[0],pathname,256); // Replace the image backdrop_replace_icon_image(info,pathname,drop_obj); // Reply the message ReplyAppMessage(msg); } // Handle drop on an object else if (desktop_drop_on_object(info,&msg,drop_obj,qual)) { // Reply the message ReplyAppMessage(msg); } // Not dropped else drop_obj=0; } // Unlock backdrop list unlock_listlock(&info->objects); // Dropped on an object? if (drop_obj) return; // Get buffer if (!(name=AllocVec(1024,MEMF_CLEAR))) return; source_path=name+512; // Popup menu? if (environment->env->env_flags&ENVF_DESKTOP_FOLDER) { UWORD res; // Activate the underlying menu ActivateWindow(info->window); // Default action set? if (environment->env->desktop_popup_default>DESKTOP_POPUP_NONE && !(qual&(IEQUALIFIER_LSHIFT|IEQUALIFIER_RSHIFT))) { // Use default action action=environment->env->desktop_popup_default; } // Ask user what they want to do else if ((res=DoPopUpMenu(info->window,&GUI->desktop_menu->ph_Menu,0,SELECTDOWN))==(UWORD)-1 || res==MENU_DESKTOP_CANCEL) { // Cancelled FreeVec(name); return; } // Help? else if (res&POPUP_HELPFLAG) { // Do help help_menu_help(res&~POPUP_HELPFLAG,0); // Cancelled FreeVec(name); return; } // Get action else if (res==MENU_DESKTOP_COPY) action=DESKTOP_POPUP_COPY; else if (res==MENU_DESKTOP_MOVE) action=DESKTOP_POPUP_MOVE; } // Set busy pointer SetBusyPointer(info->window); // DOpus message? check=CheckAppMessage(msg); // Go through arguments for (arg=0;arg<msg->da_Msg.am_NumArgs;arg++) { // What operation? switch (action) { // Leave out? case DESKTOP_POPUP_LEFTOUT: // Get path name GetWBArgPath(&msg->da_Msg.am_ArgList[arg],name,512); // Ignore if it's an icon or a disk if (!(isicon(name)) && name[strlen(name)-1]!=':') { short len,perm=0; BackdropObject *icon; // Permanent? if (GUI->flags2&GUIF2_BENIFY) perm=1; // Get position x=msg->da_Msg.am_MouseX; y=msg->da_Msg.am_MouseY; // Drop from DOpus? if (check) { // Adjust position for icon offset x+=msg->da_DragOffset.x+msg->da_DropPos[arg].x; y+=msg->da_DragOffset.y+msg->da_DropPos[arg].y; } // Strip trailing / len=strlen(name)-1; if (name[len]=='/') name[len]=0; // Leave this out if ((icon=backdrop_leave_out(info,name,(perm)?BLOF_PERMANENT:0,x,y))) { // Position it backdrop_place_object(info,icon); // Save for permanent leftout if (perm) backdrop_save_leftouts(info); ok=1; } } break; // Copy/Move case DESKTOP_POPUP_COPY: case DESKTOP_POPUP_MOVE: { BOOL dir=0; // Create ArgArray if needed if (!array && !(array=NewArgArray())) break; // Get path name GetWBArgPath(&msg->da_Msg.am_ArgList[arg],name,512); // Set flag if a directory if (!msg->da_Msg.am_ArgList[arg].wa_Name || !*msg->da_Msg.am_ArgList[arg].wa_Name) dir=1; // Get source path if (!*source_path) { char *ptr; // Copy from name strcpy(source_path,name); // Strip last part if ((ptr=FilePart(source_path))) *ptr=0; } // Create argument if ((aae=NewArgArrayEntry(array,FilePart(name)))) { // Set directory flag if (dir) aae->ae_Flags|=AEF_DIR; // Set OK flag ok=1; } } break; } } // Successful? if (ok) { // Left-outs? if (action==DESKTOP_POPUP_LEFTOUT) { // Refresh backdrop_show_objects(info,BDSF_RECALC); } // Otherwise, launch function else { // Launch the function function_launch( FUNCTION_RUN_FUNCTION_EXTERNAL, (action==DESKTOP_POPUP_COPY)?def_function_copy:def_function_move, 0, FUNCF_ICONS|FUNCF_RESCAN_DESKTOP|FUNCF_DRAG_DROP|FUNCF_COPY_NO_MOVE, 0,0, source_path,environment->env->desktop_location, array, 0, (Buttons *)CopyAppMessage(msg,global_memory_pool)); } } // Otherwise, free array else FreeArgArray(array); // Free buffer FreeVec(name); // Clear busy pointer ClearPointer(info->window); // Reply the message ReplyAppMessage(msg); }
long __saveds __regargs nik_update(struct XPR_UPDATE *update) { struct TransferFiles *tf, *tmptf; int equalulfiles = 0; if(update->xpru_updatemask & XPRU_FILENAME) { sprintf(outbuffer,"\r\nFör över %s\r\n",update->xpru_filename); conputtekn(outbuffer,-1); strcpy(xprfilnamn,update->xpru_filename); if(Servermem->action[nodnr]==UPLOAD || Servermem->action[nodnr]==DOWNLOAD) Servermem->vilkastr[nodnr] = FilePart(xprfilnamn); } if(update->xpru_updatemask & XPRU_FILESIZE) { sprintf(outbuffer,"Filens längd %d\r\n",update->xpru_filesize); conputtekn(outbuffer,-1); filesize=update->xpru_filesize; } if(update->xpru_updatemask & XPRU_MSG) { conputtekn(update->xpru_msg,-1); conputtekn("\r\n",-1); } if(update->xpru_updatemask & XPRU_ERRORMSG) { conputtekn(update->xpru_errormsg,-1); conputtekn("\r\n",-1); } if(update->xpru_updatemask & XPRU_DATARATE) cps=update->xpru_datarate; if(update->xpru_updatemask & XPRU_BYTES) { sprintf(outbuffer,"\rBytes: %d (%d cps)",update->xpru_bytes,update->xpru_datarate); conputtekn(outbuffer,-1); countbytes=update->xpru_bytes; if(countbytes == filesize && Servermem->action[nodnr]==UPLOAD) { tmptf = (struct TransferFiles *)tf_list.mlh_Head; while(tmptf) { if(!stricmp(tmptf->Filnamn,xprfilnamn)) equalulfiles = 1; tmptf = (struct TransferFiles *)tmptf->node.mln_Succ; } if(!equalulfiles) { if(!(tf=(struct TransferFiles *)AllocMem(sizeof(struct TransferFiles),MEMF_CLEAR))) { puttekn("Kunde inte allokera en TransferFiles-struktur\n\r",-1); } else { if(Servermem->cfg.logmask & LOG_RECFILE) { LogEvent(USAGE_LOG, INFO, "Tog emot filen %s från %s", xprfilnamn, getusername(inloggad)); } strcpy(tf->Filnamn,xprfilnamn); tf->cps = cps; AddTail((struct List *)&tf_list,(struct Node *)tf); ulfiles++; } } } } return(0L); }
/* Parse input/output buffer specification tags before an operation */ int parsebuftags(struct XpkBuffer *xbuf, struct TagItem *tags) { struct TagItem *ti, *scan=tags; FILE *fh; void *data; #ifdef _DEBUG DebugTagList("parsebuftags", tags); #endif /* Pass 1 */ while((ti=NextTagItem(&scan))) { data=ti->ti_Data; switch(ti->ti_Tag) { case XPK_Preferences: if(!data) xbuf->xb_Flags |= XMF_NOPREFS; break; case XPK_ChunkHook: xbuf->xb_ChunkHook=(struct Hook *) data; break; case XPK_NoClobber: if(data) xbuf->xb_Flags |= XMF_NOCLOBBER; break; case XPK_FileName: xbuf->xb_Prog.xp_FileName=FilePart((char *)data); break; case XPK_GetOutLen: xbuf->xb_GetOutLen=(unsigned int *)data; break; case XPK_GetOutBufLen: xbuf->xb_GetOutBufLen=(unsigned int *)data; break; case XPK_GetError: if(data) { xbuf->xb_ErrBuf=(char *)data; *(xbuf->xb_ErrBuf)=0; } break; case XPK_GetOutBuf: xbuf->xb_Flags |= XMF_GETOUTBUF; xbuf->xb_WMsg.xmm_Flags |= XIO_GETOUTBUF; xbuf->xb_WMsg.xmm_BufOfs=0; xbuf->xb_PackParam.xsp_Flags |= XSF_PREVCHUNK; xbuf->xb_WHook=&memouthook; xbuf->xb_GetOutBuf=(char **)data; break; case XPK_PackMethod: /* first pass, because of XPK_PackMode */ xbuf->xb_Flags |= XMF_PACKING; findmethod(xbuf, (char *)data); break; case XPK_NeedSeek: if(data) xbuf->xb_Flags |= XMF_SEEK; break; } } /* may be an error in findmethod */ if(xbuf->xb_Result) return xbuf->xb_Result; /* get default preferences settings */ xbuf->xb_Flags |= XMF_EXTERNALS; /* Pass 2 */ while((ti=NextTagItem(&tags))) { data=ti->ti_Data; switch(ti->ti_Tag) { /* Ways to specify input data */ case XPK_InName: xbuf->xb_RMsg.xmm_FileName=FilePart((char *)data); if(!(data=(FILE *)fopen((char *)data, "rb"))) return (xbuf->xb_Result=XPKERR_IOERRIN); xbuf->xb_RMsg.xmm_Flags |= XMF_PRIVFH; /* no break, as following is needed too */ case XPK_InFH: xbuf->xb_RMsg.xmm_FH=(FILE *)data; xbuf->xb_RHook=&fhinhook; break; case XPK_InBuf: xbuf->xb_RMsg.xmm_Buf=(char *) data; xbuf->xb_RMsg.xmm_BufOfs=0; xbuf->xb_RHook=&meminhook; break; case XPK_InLen: xbuf->xb_InLen=xbuf->xb_RMsg.xmm_Len=(unsigned int)data; break; case XPK_InHook: xbuf->xb_RHook=(struct Hook *)data; break; /* Ways to specify output data */ case XPK_OutName: if(xbuf->xb_Flags & XMF_NOCLOBBER) if((fh=fopen((char *) data, "rb"))) { fclose(fh); return (xbuf->xb_Result=XPKERR_FILEEXISTS); } xbuf->xb_WMsg.xmm_FileName=(char *)data; if(!(data=(FILE *)fopen((char *)data, "wb"))) { xbuf->xb_WMsg.xmm_FileName=0; return (xbuf->xb_Result=XPKERR_IOERROUT); } xbuf->xb_WMsg.xmm_Flags |= XMF_PRIVFH; case XPK_OutFH: xbuf->xb_WMsg.xmm_FH=(FILE *)data; xbuf->xb_WHook=&fhouthook; break; case XPK_OutBuf: xbuf->xb_WMsg.xmm_Buf=(char *) data; xbuf->xb_WMsg.xmm_BufOfs=0; xbuf->xb_WHook=&memouthook; xbuf->xb_PackParam.xsp_Flags |= XSF_PREVCHUNK; break; case XPK_OutBufLen: xbuf->xb_WMsg.xmm_BufLen=(unsigned int)data; break; case XPK_OutHook: xbuf->xb_WHook=(struct Hook *) data; break; /* Other junk */ case XPK_Password: xbuf->xb_Password=(char *)data; break; case XPK_Key16: xbuf->xb_PassKey16=(unsigned short)data; xbuf->xb_Flags |= XMF_KEY16; break; case XPK_Key32: xbuf->xb_PassKey32=(unsigned int)data; xbuf->xb_Flags |= XMF_KEY32; break; case XPK_PassThru: if(data) xbuf->xb_Flags |= XMF_PASSTHRU; break; case XPK_UseXfdMaster: if(data) xbuf->xb_Flags |= XMF_XFD; else xbuf->xb_Flags &= ~XMF_XFD; break; /* currently not used */ case XPK_UseExternals: if(data) xbuf->xb_Flags |= XMF_EXTERNALS; else xbuf->xb_Flags &= ~XMF_EXTERNALS; break; case XPK_PassRequest: if(data) xbuf->xb_Flags |= XMF_AUTOPASSWD; else xbuf->xb_Flags &= ~XMF_AUTOPASSWD; break; case XPK_ChunkReport: if(data && !xbuf->xb_ChunkHook && !(xbuf->xb_Flags & XMF_NOPREFS)) xbuf->xb_Flags |= XMF_AUTOPRHOOK; break; case XPK_OutMemType: xbuf->xb_WMsg.xmm_MemType=(unsigned int)data; break; case XPK_ChunkSize: /* This may get adjusted later */ xbuf->xb_ChunkSize=ROUNDLONG((unsigned int)data); break; case XPK_PackMode: xbuf->xb_PackingMode=(unsigned short)data; break; case XPK_TaskPri: SetPriorityClass(GetCurrentProcess(), (DWORD)data); xbuf->xb_Flags |= XMF_OWNTASKPRI; break; case XPK_StepDown: xbuf->xb_PackParam.xsp_Flags |= XSF_STEPDOWN; break; case XPK_LossyOK: xbuf->xb_Flags |= XMF_LOSSYOK; break; case XPK_NoCRC: xbuf->xb_Flags |= XMF_NOCRC; break; } } if(xbuf->xb_Flags & XMF_PACKING) xbuf->xb_PackParam.xsp_Flags &= ~XSF_PREVCHUNK; if(xbuf->xb_Password && !*xbuf->xb_Password) xbuf->xb_Password=0; if(!xbuf->xb_Prog.xp_FileName) { xbuf->xb_Prog.xp_FileName=xbuf->xb_RMsg.xmm_FileName; if(!(xbuf->xb_Flags & XMF_PACKING) && xbuf->xb_WMsg.xmm_FileName) xbuf->xb_Prog.xp_FileName=FilePart(xbuf->xb_WMsg.xmm_FileName); } if(!xbuf->xb_Prog.xp_FileName) xbuf->xb_Prog.xp_FileName=""; return (xbuf->xb_Result=0); }
// Show help on something void help_show_help(char *thing,char *file) { IPCData *ipc; char *copy,*ptr,helpbuf[256]; CommandList *cmd; // Valid thing? if (!thing || !*thing) return; // Can't do help if we don't have the amigaguide.library if (!AmigaGuideBase) { // Flash error and return DisplayBeep(GUI->screen_pointer); return; } // Is the node name a command? ptr=thing; if (!file && (cmd=function_find_internal(&ptr,0))) { // Is this an external module that has help available? if (cmd->flags&FUNCF_EXTERNAL_FUNCTION && cmd->help_name) { // Build full path to help file strcpy(helpbuf,"dopus5:help/"); AddPart(helpbuf,FilePart(cmd->help_name),256); // Use this file for help file=helpbuf; } } // Lock process list lock_listlock(&GUI->process_list,FALSE); // Is help process running? if (!(ipc=IPC_FindProc(&GUI->process_list,"dopus_help",0,0))) { // Unlock process list unlock_listlock(&GUI->process_list); // Launch help process if (!(IPC_Launch( &GUI->process_list, &ipc, "dopus_help", (ULONG)&help_proc, STACK_DEFAULT, 0, (struct Library *)DOSBase))) { // Couldn't launch it return; } // Lock process list lock_listlock(&GUI->process_list,FALSE); } // No file given? if (!file || !*file) file="dopus5:Help/dopus5.guide"; // Copy thing if (ipc && (copy=AllocVec(strlen(thing)+1+strlen(file)+1,0))) { // Copy thing and file string strcpy(copy,thing); strcpy(copy+strlen(copy)+1,file); // Send help command IPC_Command(ipc,HELPCMD_LINK,0,0,copy,0); } // Unlock process list unlock_listlock(&GUI->process_list); }
short LIBFUNC L_DoSimpleRequest( REG(a0, struct Window *parent), REG(a1, struct DOpusSimpleRequest *simple), REG(a6, struct Library *libbase)) { APTR memory; simplereq_data *data; UWORD gadgetid=0; #ifdef __amigaos4__ libbase = (struct Library *)dopuslibbase_global; #endif // Allocate memory handle if (!(memory=L_NewMemHandle(0,0,MEMF_CLEAR))) return 1; // Allocate data if (!(data=(simplereq_data *)L_AllocMemH(memory,sizeof(simplereq_data)))) { L_FreeMemHandle(memory); return 1; } // Initialise data->simple=simple; data->parent=parent; data->string_buffer=simple->string_buffer; data->gadgets=simple->gadgets; data->libbase=(struct MyLibrary *)libbase; data->signal=-1; data->memory=memory; // Center window; over mouse? if (simple->flags&SRF_MOUSE_POS) { data->req_dims.char_dim.Left=POS_MOUSE_CENTER; data->req_dims.char_dim.Top=POS_MOUSE_CENTER; } // Over parent else { data->req_dims.char_dim.Left=POS_CENTER; data->req_dims.char_dim.Top=POS_CENTER; } // Construct requester if (!(simple_build(data))) { // Failed L_FreeMemHandle(memory); return 1; } // IPC port supplied? if (simple->flags&SRF_IPC && simple->ipc) { data->ipc=simple->ipc; data->waitbits=1<<data->ipc->command_port->mp_SigBit; } // Signal supplied? else if (simple->flags&SRF_SIGNAL) { data->signal=(short)simple->ipc; data->waitbits=1<<data->signal; } // Otherwise else { data->waitbits=IPCSIG_QUIT; SetSignal(0,IPCSIG_QUIT); } // Open requester if (_simplereq_open(data,parent)) { // Wait on requester FOREVER { struct IntuiMessage *msg; IPCMessage *imsg; short break_flag=0; ULONG waitres; // IPC message? if (data->ipc) { while ((imsg=(IPCMessage *)GetMsg(data->ipc->command_port))) { if (imsg->command==IPC_HIDE) _simplereq_close(data); else if (imsg->command==IPC_SHOW) { if (!(_simplereq_open(data,imsg->data))) break_flag=1; } else if (imsg->command==IPC_ACTIVATE) { if (data->window) { WindowToFront(data->window); ActivateWindow(data->window); } } else if (imsg->command==IPC_QUIT || imsg->command==IPC_ABORT) { break_flag=1; gadgetid=(UWORD)-1; } L_IPC_Reply(imsg); } } // Intuition message? if (data->window) { while ((msg=L_GetWindowMsg(data->window->UserPort, (APTR)libbase))) { struct IntuiMessage copy_msg; // Copy message and reply copy_msg=*msg; L_ReplyWindowMsg(msg); // Check message type if (copy_msg.Class==IDCMP_GADGETUP) { // Get gadget ID gadgetid=((struct Gadget *)copy_msg.IAddress)->GadgetID; // Checkbox? if (gadgetid==GAD_CHECK_ID) { // Store value if (simple->check_ptr) *simple->check_ptr=copy_msg.Code; } // Tab on a string gadget? else if (gadgetid==GAD_STRING2_ID || (gadgetid==GAD_STRING_ID && (copy_msg.Code==0x9 || copy_msg.Code==0x45 || copy_msg.Qualifier&(IEQUALIFIER_LSHIFT|IEQUALIFIER_RSHIFT)))) continue; // Popup gadget? else if (gadgetid==GAD_POPUP_ID) { char buf[400],file[40],*ptr; struct TagItem tags[4]; // Get initial path and file strcpy(buf,(char *)L_GetGadgetValue(data->objlist,GAD_STRING_ID,data->libbase)); if ((ptr=FilePart(buf))) { stccpy(file,ptr,40); *ptr=0; } else file[0]=0; // Initialise tags tags[0].ti_Tag=ASLFR_Window; tags[0].ti_Data=(ULONG)data->window; tags[1].ti_Tag=ASLFR_InitialFile; tags[1].ti_Data=(ULONG)file; tags[2].ti_Tag=ASLFR_InitialDrawer; tags[2].ti_Data=(ULONG)buf; tags[3].ti_Tag=TAG_END; // Show requester if (simple->filereq && AslRequest(simple->filereq,tags)) { // Build new path strcpy(buf,((struct FileRequester *)simple->filereq)->fr_Drawer); AddPart(buf,((struct FileRequester *)simple->filereq)->fr_File,400); // Show in string gadget L_SetGadgetValue(data->objlist,GAD_STRING_ID,(long)buf); L_ActivateStrGad(GADGET(L_GetObject(data->objlist,GAD_STRING_ID)),data->window); } continue; } // Set break flag else break_flag=1; } // Key press else if (copy_msg.Class==IDCMP_VANILLAKEY) { // Y = yes if (copy_msg.Code=='y' || copy_msg.Code=='Y') { gadgetid=1; break_flag=1; } // N = no else if (copy_msg.Code=='n' || copy_msg.Code=='N') { gadgetid=0; break_flag=1; } } } } // Check break flag if (break_flag) break; // Wait for a message waitres=Wait(data->waitbits| ((data->window)?(1<<data->window->UserPort->mp_SigBit):0)); // Quit? if (waitres&IPCSIG_QUIT) { gadgetid=0; break; } // Signal? else if (data->signal!=-1 && (waitres&(1<<data->signal))) { gadgetid=(UWORD)-5; break; } } } // Close requester _simplereq_close(data); // Free memory L_FreeMemHandle(memory); // Return gadget code return gadgetid; }