Пример #1
0
// Error saving requester
short error_saving(short err,struct Window *window,long txt,long retry)
{
	char buf[80],error_text[140];

	// Build requester text
	Fault(err,"",buf,80);
	lsprintf(error_text,"%s\n%s %ld%s",
		(IPTR)GetString(&locale,txt),
		(IPTR)GetString(&locale,MSG_DOS_ERROR),
		err,
		(IPTR)buf);

	// Display requester
	return super_request_args(
		window,
		error_text,
		NULL,
		(retry)?GetString(&locale,MSG_RETRY):GetString(&locale,MSG_OKAY),
		(retry)?GetString(&locale,MSG_CANCEL):0,0);
}
Пример #2
0
short error_request_a(
	struct Window *window,
	short flags,
	char **text)
{
	short code;
	char *buffer,*ptr;
	BOOL quote_flag=0;

	// Get error code
	code=IoErr();

	// Allocate memory for error
	if (!(buffer=AllocVec(1024,MEMF_CLEAR)))
		return 0;

	// Build error string
	if (*text)
	{
		strcpy(buffer,GetString(&locale,MSG_AN_ERROR_OCCURED));
		while (*text)
		{
			// -1 indicates next item is to be quoted
			if (*text==(char *)-1)
			{
				quote_flag=1;
				++text;
			}

			// Otherwise, add item to string
			else
			{
				if (quote_flag) strcat(buffer,"'");
				strcat(buffer,*text);
				if (quote_flag) strcat(buffer,"'");

				// If next item is valid, add space
				++text;
				if (*text) strcat(buffer," ");
				quote_flag=0;
			}
		}
	}
	else
	{
		strcpy(buffer,GetString(&locale,MSG_ERROR));
	}

	// Get fault text
	Fault(code,"",buffer+944,80);

	// Get start of text
	if (ptr=strchr(buffer+944,':')) ++ptr;
	else ptr=buffer+944;

	// Valid text?
	if (*ptr)
	{
		// Add LF if needed
		if (*text) strcat(buffer,"\n");

		// Add error text
		strcat(buffer,ptr);
	}

	// Async?
	if (flags&ERF_ASYNC) global_requester(buffer);

	// Display error
	else
	code=super_request_args(
		window,
		buffer,
		(flags&ERF_MOUSE)?SRF_MOUSE_POS:0,
		GetString(&locale,MSG_RETRY),
		GetString(&locale,MSG_CANCEL),0);

	// Free buffer
	FreeVec(buffer);
	return code;
}
Пример #3
0
// Show about requester
void show_about(struct Screen *screen,IPCData *ipc)
{
	char buf[80],*buffer;
	struct Library *ModuleBase;
	Att_List *list;
	Att_Node *node;

	// Create list of text
	if (!(list=Att_NewList(0)))
		return;

	// Build lines
	lsprintf(buf,"%s %ld.%ld %s",dopus_name,5,version_num,version_string);
	Att_NewNode(list,buf,2,0);
	Att_NewNode(list,about_1,2,0);
	Att_NewNode(list,about_2,2,0);

	// Name of the translator
	Att_NewNode(list,GetString(&locale,MSG_TRANSLATION_BY_YOUR_NAME),3,0);

	// Registered?
	if (GUI->rego.name[0] &&
		GUI->rego.serial_number[0] &&
		atoi(GUI->rego.serial_number)!=(ULONG)GUI->backdrop)
	{
		Att_NewNode(list,GetString(&locale,MSG_REGISTERED_TO),1,0);
		Att_NewNode(list,"",1,0);
		Att_NewNode(list,GUI->rego.name,1,0);
		if (GUI->rego.company[0]) Att_NewNode(list,GUI->rego.company,1,0);
		if (GUI->rego.address1[0]) Att_NewNode(list,GUI->rego.address1,1,0);
		if (GUI->rego.address2[0]) Att_NewNode(list,GUI->rego.address2,1,0);
		if (GUI->rego.address3[0]) Att_NewNode(list,GUI->rego.address3,1,0);
		Att_NewNode(list,"",1,0);
		strcpy(buf,GetString(&locale,MSG_SERIAL_NUMBER));
		strcat(buf,GUI->rego.serial_number);
		Att_NewNode(list,buf,0,0);
	}

	// Unregistered
	else
	{
		Att_NewNode(list,"",1,0);
		Att_NewNode(list,GetString(&locale,MSG_UNREGISTERED),1,0);
		Att_NewNode(list,"",0,0);
	}

	// Try for external about library
	if ((ModuleBase=OpenLibrary("dopus5:modules/about.module",0)))
	{
		short ret;

		// Show about
		ret=Module_Entry((struct List *)list,screen,ipc,&main_ipc,0,0);
		CloseLibrary(ModuleBase);

		// If it displayed ok, return
		if (ret)
		{
			Att_RemList(list,0);
			return;
		}
	}

	// Allocate buffer
	if (buffer=AllocVec(512,0))
	{
		// Clear buffer
		buffer[0]=0;

		// Build about text
		for (node=(Att_Node *)list->list.lh_Head;
			node->node.ln_Succ;
			node=(Att_Node *)node->node.ln_Succ)
		{
			// Skip?
			if (node->data==3) continue;

			// Add to string
			strcat(buffer,node->node.ln_Name);
			if (node->data>0)
			{
				strcat(buffer,(node->data==2)?"\n\n":"\n");
			}
		}

		// Display about text
		super_request_args(
			screen,
			buffer,
			SRF_SCREEN_PARENT|SRF_IPC,
			ipc,
			GetString(&locale,MSG_OKAY),0);

		// Free buffer
		FreeVec(buffer);
	}

	// Free list
	Att_RemList(list,0);
}
Пример #4
0
void desktop_delete(IPCData *ipc,BackdropInfo *info,BackdropObject *only_one)
{
	short groupcount=0,filecount=0,assigncount=0,othercount=0,dircount=0;
	BackdropObject *object=0;
	Att_List *list;
	Att_Node *node;
	char buf[100];

	// Create list
	if (!(list=Att_NewList(LISTF_POOL)))
		return;

	// Lock backdrop list
	lock_listlock(&info->objects,0);

	// Go through backdrop list
	while ((object=backdrop_next_object(info,object,only_one)))
	{
		// Group?
		if (object->type==BDO_GROUP) ++groupcount;

		// Assign?
		else
		if (object->flags&BDOF_ASSIGN) ++assigncount;

		// Group object?
		else
		if (object->type==BDO_LEFT_OUT && info->flags&BDIF_GROUP) ++filecount;

		// Desktop object?
		else
		if (object->type==BDO_LEFT_OUT && object->flags&BDOF_DESKTOP_FOLDER)
		{
			++othercount;
			if (object->icon->do_Type==WBDRAWER) ++dircount;
		}

		// Something else
		else continue;

		// Add to list
		Att_NewNode(list,0,(ULONG)object,0);
	}

	// Unlock backdrop list
	unlock_listlock(&info->objects);

	// Nothing to delete?
	if (IsListEmpty((struct List *)list))
	{
		Att_RemList(list,0);
		return;
	}

	// Build message; start with query
	strcpy(info->buffer,GetString(&locale,MSG_DESKTOP_REALLY_DELETE));

	// Any groups?
	if (groupcount>0)
	{
		lsprintf(buf,GetString(&locale,MSG_DESKTOP_DELETE_GROUPS),groupcount);
		strcat(info->buffer,buf);
	}

	// Or assigns?
	else
	if (assigncount>0)
	{
		lsprintf(buf,GetString(&locale,MSG_DESKTOP_DELETE_ASSIGNS),assigncount);
		strcat(info->buffer,buf);
	}

	// Any group files?
	else
	if (filecount>0)
	{
		// Add file count
		lsprintf(buf,GetString(&locale,MSG_DESKTOP_DELETE_GROUP_OBJECTS),filecount);
		strcat(info->buffer,buf);
	}

	// Desktop objects?
	if (othercount>0)
	{
		BOOL cr=0;

		// Add CR?
		if (groupcount>0 || assigncount>0 || filecount>0) cr=1;

		// Add files
		if (othercount>dircount)
		{
			lsprintf(buf,GetString(&locale,MSG_DESKTOP_DELETE_DESKTOP_FILES),othercount-dircount);
			if (cr) strcat(info->buffer,"\n");
			strcat(info->buffer,buf);
			cr=1;
		}

		// Add dirs
		if (dircount>0)
		{
			lsprintf(buf,GetString(&locale,MSG_DESKTOP_DELETE_DESKTOP_DIRS),dircount);
			if (cr) strcat(info->buffer,"\n");
			strcat(info->buffer,buf);
		}
	}
			
	// Add question mark
	strcat(info->buffer,"?");

	// Display requester
	if (!(super_request_args(
		GUI->screen_pointer,
		info->buffer,
		SRF_IPC|SRF_SCREEN_PARENT,
		ipc,
		GetString(&locale,MSG_DELETE),
		GetString(&locale,MSG_CANCEL),0)))
	{
		Att_RemList(list,0);
		return;
	}

	// Check owner for refresh
	if (info->lister)
		IPC_Command(info->lister->ipc,LISTER_CHECK_REFRESH,0,0,0,REPLY_NO_PORT);

	// Group objects?
	if (info->flags&BDIF_GROUP)
	{
		// Send command to group
		IPC_Command(info->ipc,GROUP_DELETE,0,only_one,0,0);
	}

	// Otherwise
	else
	{
		// Go through the list
		for (node=(Att_Node *)list->list.lh_Head;
			node->node.ln_Succ;
			node=(Att_Node *)node->node.ln_Succ)
		{
			// Lock backdrop list
			lock_listlock(&info->objects,1);

			// Get object
			if ((object=find_backdrop_object(info,(BackdropObject *)node->data)))
			{
				// Group?
				if (object->type==BDO_GROUP)
				{
					// Delete this group
					backdrop_delete_group(info,object);
				}

				// Assign?
				else
				if (object->flags&BDOF_ASSIGN)
				{
					// Copy name, strip trailing colon
					strcpy(info->buffer+2,object->name);
					info->buffer[strlen(info->buffer+2)+1]=0;

					// Delete assign
					if (AssignLock(info->buffer+2,0))
					{
						// Erase object
						backdrop_erase_icon(info,object,0);

						// Remove object
						backdrop_remove_object(info,object);
					}
				}
			}

			// Unlock backdrop list
			unlock_listlock(&info->objects);
		}
	}

	// Free list
	Att_RemList(list,0);

	// Recalc backdrop objects
	backdrop_calc_virtual(info);

	// Delete other things?
	if (othercount>0)
	{
		// Run delete function
		icon_function(info,0,0,def_function_delete_quiet,0);
	}
}
Пример #5
0
// Rename some objects
void icon_rename(IPCData *ipc,BackdropInfo *info,BackdropObject *icon)
{
	Att_List *list;
	Att_Node *node;
	BackdropObject *object;
	BOOL save_pos=0;
	BPTR lock=0,old=0;

	// Group?
	if (info->flags&BDIF_GROUP)
	{
		GroupData *group;

		// Get group pointer
		group=(GroupData *)IPCDATA(info->ipc);

		// Build directory name
		lsprintf(info->buffer,"dopus5:groups/%s",group->name);

		// Lock directory
		if (!(lock=Lock(info->buffer,ACCESS_READ)))
			return;

		// Change directory
		old=CurrentDir(lock);
	}

	// Create list
	if (!(list=Att_NewList(0)))
	{
		if (lock) UnLock(CurrentDir(old));
		return;
	}

	// Lock backdrop list
	lock_listlock(&info->objects,0);

	// Go through backdrop list (backwards, just for the hell of it)
	for (object=(BackdropObject *)info->objects.list.lh_TailPred;
		object->node.ln_Pred;
		object=(BackdropObject *)object->node.ln_Pred)
	{
		// Correct type?
		if (object->type!=BDO_APP_ICON && object->type!=BDO_BAD_DISK && !(object->flags&BDOF_CACHE))
		{
			// Selected or supplied?
			if ((!icon && object->state) || icon==object)
			{
				// Add object to list
				Att_NewNode(
					list,
					(object->flags&BDOF_CUSTOM_LABEL)?object->device_name:object->name,
					(ULONG)object,
					0);
				if (icon) break;
			}
		}
	}

	// Unlock backdrop list
	unlock_listlock(&info->objects);

	// Go through list of objects
	for (node=(Att_Node *)list->list.lh_Head;
		node->node.ln_Succ;
		node=(Att_Node *)node->node.ln_Succ)
	{
		char *name,*origname;
		BackdropObject *object;
		short ret,copy=1;
		BOOL retry,fail=0;

		if (!(name=AllocVec(512,0)))
			break;
		origname=name+256;

		// Loop on retries
		do
		{
			// Clear retry flag
			retry=0;

			// Copy name
			strcpy(name,node->node.ln_Name);

			// Build message
			lsprintf(info->buffer,GetString(&locale,MSG_RENAME_DISK),name);

			// Strip trailing colon for assigns
			if (name[(ret=(strlen(name)-1))]==':') name[ret]=0;

			// Copy original name
			strcpy(origname,name);

			// Ask for new name
			if (!(ret=super_request_args(
				info->window,
				info->buffer,
				SRF_BUFFER|SRF_IPC|SRF_PATH_FILTER|SRF_MOUSE_POS,
				name,255,
				ipc,
				GetString(&locale,MSG_OKAY),
				GetString(&locale,(node->node.ln_Succ->ln_Succ)?MSG_SKIP:MSG_CANCEL),
				(node->node.ln_Succ->ln_Succ)?GetString(&locale,MSG_CANCEL):0,0)))
			{
				// Cancel
				fail=1;
				break;
			}

			// Ok to rename?
			else
			if (ret!=2)
			{
				// Lock backdrop list
				lock_listlock(&info->objects,0);

				// Is object still valid?>
				if ((object=find_backdrop_object(info,(BackdropObject *)node->data)))
				{
					// Object in a group?
					if (info->flags&BDIF_GROUP)
					{
						// Must have custom label
						if (object->flags&BDOF_CUSTOM_LABEL)
						{
							// Try to rename object
							if (Rename(object->device_name,name))
							{
								// Store new name
								strcpy(object->device_name,name);
								ret=1;
								copy=0;
							}
						}
					}

					// Assign?
					else
					if (object->flags&BDOF_ASSIGN)
					{
						BPTR lock;

						// Lock the assign
						if ((lock=Lock(object->name,ACCESS_READ)))
						{
							// Assign the new name to it
							while (!(ret=AssignLock(name,lock)))
							{
								// Failed, display requester
								if (!(error_request(
									info->window,
									ERF_MOUSE,
									GetString(&locale,MSG_RENAMING),
									-1,
									object->name,
									":",
									0))) break;
							}

							// Success?
							if (ret)
							{
								// Delete the old assignment
								AssignLock(origname,0);
							}

							// Otherwise free the lock
							else UnLock(lock);
						}
					}

					// Disk?
					else
					if (object->type==BDO_DISK)
					{
						// Try to relabel
						while (!(ret=OriginalRelabel(object->device_name,name)))
						{
							// Failed, display requester
							if (!(error_request(
								info->window,
								ERF_MOUSE,
								GetString(&locale,MSG_RENAMING),
								-1,
								object->name,
								":",
								0))) break;
						}

						// Success?
						if (ret)
						{
							// Pass name change through to things
							notify_disk_name_change(info,object->device_name,name);
						}
					}

					// Group, desktop folder
					else
					if (object->type==BDO_GROUP ||
						(object->type==BDO_LEFT_OUT && object->flags&BDOF_DESKTOP_FOLDER))	
					{
						BPTR old=0,lock;

						// Change directory
						if ((lock=Lock(object->path,ACCESS_READ)))
							old=CurrentDir(lock);

						// Rename file
						if (!(ret=Rename(object->name,name)))
						{
							// Show error requester
							if (error_request(
									info->window,
									ERF_MOUSE,
									GetString(&locale,MSG_RENAMING),
									-1,
									object->name,
									":",
									0))
							{
								// Set flag to retry
								retry=1;
							}
						}

						// Success?
						if (ret)
						{
							GroupData *group;

							// Add .infos on
							strcpy(info->buffer,object->name);
							strcat(info->buffer,".info");
							strcpy(info->buffer+300,name);
							strcat(info->buffer+300,".info");

							// Rename icon
							Rename(info->buffer,info->buffer+300);

							// Group?
							if (object->type==BDO_GROUP)
							{
								// Lock process list
								lock_listlock(&GUI->group_list,0);

								// See if group is open
								if ((group=backdrop_find_group(object)))
								{
									char *name_copy;
		
									// Get a copy of the name
									if ((name_copy=AllocVec(strlen(name)+1,0)))
									{
										// Signal it to update its name
										strcpy(name_copy,name);
										IPC_Command(group->ipc,GROUP_NEW_NAME,0,0,name_copy,0);
									}
								}

								// Unlock process list
								unlock_listlock(&GUI->group_list);
							}
						}

						// Restore directory
						if (lock) UnLock(CurrentDir(old));
					}

					// Left-out
					else
					if (object->type==BDO_LEFT_OUT)
					{
						leftout_record *left;

						// Lock position list
						lock_listlock(&GUI->positions,0);

						// Look for entry for icon
						for (left=(leftout_record *)&GUI->positions.list.lh_Head;
							left->node.ln_Succ;
							left=(leftout_record *)left->node.ln_Succ)
						{
							// Leftout?
							if (left->node.ln_Type==PTYPE_LEFTOUT)
							{
								// Match this icon?
								if (object->misc_data==(ULONG)left)
								{
									// Store new label
									stccpy(left->icon_label,name,sizeof(left->icon_label));
									save_pos=1;
									break;
								}
							}
						}

						// Unlock position list
						unlock_listlock(&GUI->positions);

						// Store name in icon
						if (object->flags&BDOF_CUSTOM_LABEL)
						{
							strcpy(object->device_name,name);
							ret=1;
							copy=0;
						}
					}

					// Successful?
					if (ret)
					{
						// Erase object
						backdrop_erase_icon(info,object,0);

						// Store new name
						if (copy)
						{
							strcpy(object->name,name);
							if (object->flags&BDOF_ASSIGN) strcat(object->name,":");
						}

						// Show new object
						backdrop_render_object(info,object,BRENDERF_CLIP);
					}
				}

				// Unlock backdrop list
				unlock_listlock(&info->objects);
			}
		} while (retry);

		// Abort?
		FreeVec(name);
		if (fail) break;
	}

	// Free list
	Att_RemList(list,0);

	// Lock backdrop list
	lock_listlock(&info->objects,0);

	// Save any left-outs
	if (save_pos)
	{
		// Lock list
		lock_listlock(&GUI->positions,0);

		// Save list
		SavePositions(&GUI->positions.list,GUI->position_name);

		// Unlock list
		unlock_listlock(&GUI->positions);
	}

	// Unlock backdrop list
	unlock_listlock(&info->objects);

	// Restore CD
	if (lock) UnLock(CurrentDir(old));
}