Пример #1
0
/*--- 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();
        }
    }
}
Пример #2
0
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;
}
Пример #3
0
/**
 * 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;
}
Пример #4
0
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);
}
Пример #5
0
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);
        }
}
Пример #6
0
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;
}
Пример #7
0
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 );
}
Пример #8
0
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;
}
Пример #9
0
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;
    }
  }
}
Пример #10
0
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;
}
Пример #11
0
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;
}
Пример #12
0
// 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);
}
Пример #13
0
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);
}
Пример #14
0
/*--- 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);
}
Пример #15
0
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);

}
Пример #16
0
// 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);
}
Пример #17
0
// 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");
	}
}
Пример #18
0
char *filename_from_path(char *path)
{
	return strdup(FilePart(path));
}
Пример #19
0
// 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;
}
Пример #20
0
// 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);
		}
	}
}
Пример #21
0
// 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);
}
Пример #22
0
// 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;
}
Пример #23
0
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;
}
Пример #24
0
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;
}
Пример #25
0
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);
}
Пример #26
0
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);
}
Пример #27
0
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);
}
Пример #28
0
/* 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);
}
Пример #29
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);
}
Пример #30
0
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;
}