Пример #1
0
/**
 * GETURL ARexx command
 *
 * @param rxmsg the message defining the ARexx context
 * @param args the command's arguments
 */
static void arexx_geturl(struct RexxMsg *rxmsg, STRPTR args)
{
	APTR arg_handle;

	struct	{
		STRPTR url;
		STRPTR filename;
	} geturl_arg;
	memset(&geturl_arg,0,sizeof(geturl_arg));

	if ((arg_handle = ParseTemplate("URL/A,FILENAME/A",args,&geturl_arg)))
	{
		void *buf;
		int buf_len;

		if (http_download(geturl_arg.url, &buf, &buf_len))
		{
			FILE *fh;
			if ((fh = fopen(geturl_arg.filename,"wb")))
			{
				fwrite(buf,1,buf_len,fh);
				fclose(fh);
			}
		} else rxmsg->rm_Result1 = 10;
		FreeTemplate(arg_handle);
	}
}
Пример #2
0
/**
 * Returns the version of SimpleMail.
 *
 * @param rxmsg the message defining the ARexx context
 * @param args the command's arguments
 */
static void arexx_version(struct RexxMsg *rxmsg, STRPTR args)
{
	APTR arg_handle;

	struct
	{
		ULONG date;
	} version_arg;
	char buf[24];

	memset(&version_arg,0,sizeof(version_arg));

	if ((arg_handle = ParseTemplate("DATE/S",args,&version_arg)))
	{
		if (version_arg.date)
		{
			arexx_set_result(rxmsg, SIMPLEMAIL_DATE);
		} else
		{
			sm_snprintf(buf,sizeof(buf), "%d.%d",VERSION,REVISION);
			arexx_set_result(rxmsg, buf);
		}
		FreeTemplate(arg_handle);
	}
}
Пример #3
0
/**
 * WRITEATTACH ARexx command.
 *
 * @param rxmsg the message defining the ARexx context.
 * @param args the command's arguments
 */
static void arexx_writeattach(struct RexxMsg *rxmsg, STRPTR args)
{
#if 0
	APTR arg_handle;
	ULONG window;

	struct
	{
		STRPTR file;
		STRPTR desc;
		STRPTR encmode;
		STRPTR ctype;
		ULONG *window;
	} writeattach_arg;
	memset(&writeattach_arg,0,sizeof(writeattach_arg));

	if (!(arg_handle = ParseTemplate("FILE/A,DESC,ENCMODE,CTYPE,WINDOW/N",args,&writeattach_arg)))
		return;

	if (writeattach_arg.window)
		window = *writeattach_arg.window;
	else window = -1;

	FreeTemplate(arg_handle);
#endif
}
Пример #4
0
 explicit PreprocessingTemplate(const String& templ)
 {
   const std::size_t fieldsAvg = std::count(templ.begin(), templ.end(), FIELD_START);
   FixedStrings.reserve(fieldsAvg);
   Fields.reserve(fieldsAvg);
   Entries.reserve(fieldsAvg * 2);
   ParseTemplate(templ);
 }
Пример #5
0
/**
 * MAILSETSTATUS Arexx Command
 *
 * Sets the status of a given mail (or selected mail).
 *
 * @param rxmsg the message defining the ARexx context
 * @param args the command's arguments
 */
static void arexx_mailsetstatus(struct RexxMsg *rxmsg, STRPTR args)
{
	APTR arg_handle;

	struct
	{
		STRPTR filepath;
		STRPTR status;
	} mailsetstatus_arg;
	memset(&mailsetstatus_arg,0,sizeof(mailsetstatus_arg));

	if ((arg_handle = ParseTemplate("FILENAME,STATUS/A",args,&mailsetstatus_arg)))
	{
		struct mail_info *mail;
		struct folder *f;

		if (mailsetstatus_arg.filepath)
		{
			if ((f = folder_find_by_file(mailsetstatus_arg.filepath)))
			{
				mail = folder_find_mail_by_filename(f,sm_file_part(mailsetstatus_arg.filepath));
			} else mail = NULL;
		} else
		{
			mail = main_get_active_mail();
			f = main_get_folder();
		}

		if (f && mail)
		{
			int new_status;
			switch(*mailsetstatus_arg.status)
			{
				case	'O': new_status = MAIL_STATUS_READ; break;
				case	'W': new_status = MAIL_STATUS_WAITSEND; break;
				case	'R': new_status = MAIL_STATUS_REPLIED; break;
				case	'F': new_status = MAIL_STATUS_FORWARD; break;
				case	'H': new_status = MAIL_STATUS_HOLD; break;
				case	'E': new_status = MAIL_STATUS_ERROR; break;
				case	'M': new_status = MAIL_STATUS_SPAM; break;
				case	'U': new_status = MAIL_STATUS_UNREAD; break;
				default: new_status = -1; break;
			}

			if (new_status != -1)
			{
				folder_set_mail_status(f,mail,(mail_status_t)new_status);
				main_refresh_mail(mail);
			}
		}
		FreeTemplate(arg_handle);
	}

}
Пример #6
0
/**
 * ADDRGOTO ARexx command
 *
 * @param rxmsg the message defining the ARexx context
 * @param args the command's arguments
 */
static void arexx_addrgoto(struct RexxMsg *rxmsg, STRPTR args)
{
	APTR arg_handle;

	struct	{
		STRPTR alias;
	} addrgoto_arg;
	memset(&addrgoto_arg,0,sizeof(addrgoto_arg));

	if ((arg_handle = ParseTemplate("ALIAS/A",args,&addrgoto_arg)))
	{
		addressbookwnd_set_active_alias(addrgoto_arg.alias);
		FreeTemplate(arg_handle);
	}
}
Пример #7
0
/**
 * SETMAIL ARexx command
 *
 * @param rxmsg the message defining the ARexx context.
 * @param args the command's arguments
 */
static void arexx_setmail(struct RexxMsg *rxmsg, STRPTR args)
{
	APTR arg_handle;

	struct	{
		LONG *num;
	} setmail_arg;
	memset(&setmail_arg,0,sizeof(setmail_arg));

	if ((arg_handle = ParseTemplate("NUM/N/A",args,&setmail_arg)))
	{
		callback_select_mail(*setmail_arg.num);
		FreeTemplate(arg_handle);
	}
}
Пример #8
0
/**
 * Moves the active or the specified mail to a given folder.
 *
 * @param rxmsg the message defining the ARexx context
 * @param args the command's arguments
 */
static void arexx_mailmove(struct RexxMsg *rxmsg, STRPTR args)
{
	APTR arg_handle;

	struct
	{
		STRPTR srcfolder;
		STRPTR filename;
		STRPTR destfolder;
	} mailmove_arg;

	memset(&mailmove_arg,0,sizeof(mailmove_arg));

	if ((arg_handle = ParseTemplate("SRCFOLDER,FILENAME,DESTFOLDER/A",args,&mailmove_arg)))
	{
		struct folder *src = mailmove_arg.srcfolder?folder_find_by_name(mailmove_arg.srcfolder):main_get_folder();
		struct folder *dest = folder_find_by_name(mailmove_arg.destfolder);

		if (src && dest && (src != dest))
		{
			if (src && mailmove_arg.filename)
			{
				struct mail_info *mail;

				if ((mail = folder_find_mail_by_filename(src,mailmove_arg.filename)))
					callback_move_mail(mail,src,dest);
			} else
			{
				if (!mailmove_arg.filename)
				{
					/* Only accept if source is also not given */
					void *handle = NULL;
					struct mail_info *mail;

					mail = main_get_mail_first_selected(&handle);

					while (mail)
					{
						callback_move_mail(mail,src,dest);
						mail = main_get_mail_next_selected(&handle);
					}
				}
			}
		}

		FreeTemplate(arg_handle);
	}
}
Пример #9
0
/**
 * ADDRSAVE ARexx command
 *
 * @param rxmsg the message defining the ARexx context
 * @param args the command's arguments
 */
static void arexx_addrsave(struct RexxMsg *rxmsg, STRPTR args)
{
	APTR arg_handle;

	struct	{
		STRPTR filename;
	} addrsave_arg;
	memset(&addrsave_arg,0,sizeof(addrsave_arg));

	if ((arg_handle = ParseTemplate("FILENAME",args,&addrsave_arg)))
	{
		if (addrsave_arg.filename) addressbook_save_as(addrsave_arg.filename);
		else addressbook_save();
		FreeTemplate(arg_handle);
	}
}
Пример #10
0
/**
 * SETFOLDER ARexx command
 *
 * @param rxmsg the message defining the ARexx context
 * @param args the command's arguments
 */
static void arexx_setfolder(struct RexxMsg *rxmsg, STRPTR args)
{
	APTR arg_handle;

	struct	{
		STRPTR folder;
	} setfolder_arg;
	memset(&setfolder_arg,0,sizeof(setfolder_arg));

	if ((arg_handle = ParseTemplate("FOLDER/A",args,&setfolder_arg)))
	{
		struct folder *f = folder_find_by_name(setfolder_arg.folder);
		if (f) main_set_folder_active(f);
		FreeTemplate(arg_handle);
	}
}
Пример #11
0
/**
 * MAILREAD ARexx command
 *
 * @param rxmsg the message defining the ARexx context
 * @param args the command's arguments
 */
static void arexx_mailread(struct RexxMsg *rxmsg, STRPTR args)
{
	APTR arg_handle;

	struct	{
		STRPTR var;
		STRPTR stem;
		LONG *window;
		LONG quiet;
	} mailread_arg;
	memset(&mailread_arg,0,sizeof(mailread_arg));

	if ((arg_handle = ParseTemplate("VAR/K,STEM/K,WINDOW/N,QUIET/S",args,&mailread_arg)))
	{
		if (mailread_arg.window)
		{
			read_window_activate(*mailread_arg.window);
			read_active_window = *mailread_arg.window;
		} else
		{
			int window;

			read_active_window = window = callback_read_active_mail();

			if (mailread_arg.stem)
			{
				int stem_len = strlen(mailread_arg.stem);
				char *stem_buf = (char *)malloc(stem_len+20);
				if (stem_buf)
				{
					strcpy(stem_buf,mailread_arg.stem);
					strcat(stem_buf,"WINDOW");
					arexx_set_var_int(rxmsg,stem_buf,window);
					free(stem_buf);
				}
			} else
			{
				char num_buf[24];
				sprintf(num_buf,"%d",window);
				if (mailread_arg.var) MySetRexxVarFromMsg(mailread_arg.var,num_buf,rxmsg);
				else arexx_set_result(rxmsg,num_buf);
			}
		}
		FreeTemplate(arg_handle);
	}
}
Пример #12
0
/**
 * READSAVE ARexx command
 *
 * @param rxmsg the message defining the ARexx context
 * @param args the command's arguments
 */
static void arexx_readsave(struct RexxMsg *rxmsg, STRPTR args)
{
	APTR arg_handle;

	struct	{
		LONG *part;
		STRPTR filename;
		LONG overwrite;
	} readsave_arg;
	memset(&readsave_arg,0,sizeof(readsave_arg));

	if ((arg_handle = ParseTemplate("PART/N,FILENAME/A/K,OVERWRITE/S",args,&readsave_arg)))
	{
		struct mail_complete *mail = read_window_get_displayed_mail(read_active_window);
		if (mail && readsave_arg.part)
		{
			int i;
			mail = mail_get_root(mail);
			for (i=0;i<*readsave_arg.part;i++)
				mail = mail_get_next(mail);
		}

		if (mail)
		{
			BPTR fh;
			int ok = 0;

			mail_decode(mail);

			fh = Open(readsave_arg.filename,MODE_OLDFILE);
			if (fh) Close(fh);
			else ok = 1;

			if (ok || readsave_arg.overwrite)
			{
				if ((fh = Open(readsave_arg.filename, MODE_NEWFILE)))
				{
					if (!mail->decoded_data) Write(fh,mail->text + mail->text_begin,mail->text_len);
					Write(fh,mail->decoded_data,mail->decoded_len);
					Close(fh);
				}
			}
		}
		FreeTemplate(arg_handle);
	}
}
Пример #13
0
/**
 * REQUESTFOLDER ARexx command
 *
 * @param rxmsg the message defining the ARexx context
 * @param args the command's arguments
 */
static void arexx_requestfolder(struct RexxMsg *rxmsg, STRPTR args)
{
	APTR arg_handle;

	struct	{
		STRPTR var;
		STRPTR stem;
		STRPTR body;
		ULONG excludeactive;
	} requestfolder_arg;
	memset(&requestfolder_arg,0,sizeof(requestfolder_arg));

	if ((arg_handle = ParseTemplate("VAR/K,STEM/K,BODY/A,EXCLUDEACTIVE/S",args,&requestfolder_arg)))
	{
		struct folder *exclude;
		struct folder *folder;
		if (requestfolder_arg.excludeactive) exclude = main_get_folder();
		else exclude = NULL;

		if ((folder = sm_request_folder(requestfolder_arg.body,exclude)))
		{
			if (requestfolder_arg.stem)
			{
				int stem_len = strlen(requestfolder_arg.stem);
				char *stem_buf = (char *)malloc(stem_len+20);
				if (stem_buf)
				{
					strcpy(stem_buf,requestfolder_arg.stem);
					strcat(stem_buf,"FOLDER");
					MySetRexxVarFromMsg(stem_buf,folder->name,rxmsg);
					free(stem_buf);
				}
			} else
			{
				if (requestfolder_arg.var) MySetRexxVarFromMsg(requestfolder_arg.var,folder->name,rxmsg);
				else arexx_set_result(rxmsg,folder->name);
			}
		} else
		{
			/* error so set the RC val to 1 */
			rxmsg->rm_Result1 = 1;
		}
		FreeTemplate(arg_handle);
	}
}
Пример #14
0
/**
 * SETMAILFILE ARexx command
 *
 * @param rxmsg the message defining the ARexx context.
 * @param args the command's arguments
 */
static void arexx_setmailfile(struct RexxMsg *rxmsg, STRPTR args)
{
	APTR arg_handle;

	struct	{
		STRPTR mailfile;
	} setmailfile_arg;
	memset(&setmailfile_arg,0,sizeof(setmailfile_arg));

	if ((arg_handle = ParseTemplate("MAILFILE/A",args,&setmailfile_arg)))
	{
		struct mail_info *m = folder_find_mail_by_filename(main_get_folder(),setmailfile_arg.mailfile);
		if (m)
		{
			callback_select_mail(folder_get_index_of_mail(main_get_folder(),m));
		}
		FreeTemplate(arg_handle);
	}
}
Пример #15
0
/**
 * GETMAILSTAT ARexx command
 *
 * @param rxmsg the message defining the ARexx context
 * @param args the command's arguments
 */
static void arexx_getmailstat(struct RexxMsg *rxmsg, STRPTR args)
{
	APTR arg_handle;

	struct	{
		STRPTR var;
		STRPTR stem;
	} getmailstat_arg;
	memset(&getmailstat_arg,0,sizeof(getmailstat_arg));

	if ((arg_handle = ParseTemplate("VAR/K,STEM/K",args,&getmailstat_arg)))
	{
		int total_msg,total_unread,total_new;

		folder_get_stats(&total_msg,&total_unread,&total_new);

		if (getmailstat_arg.stem)
		{
			int stem_len = strlen(getmailstat_arg.stem);
			char *stem_buf = (char *)malloc(stem_len+20);
			if (stem_buf)
			{
				strcpy(stem_buf,getmailstat_arg.stem);

				strcpy(&stem_buf[stem_len],"TOTAL");
				arexx_set_var_int(rxmsg,stem_buf,total_msg);
				strcpy(&stem_buf[stem_len],"NEW");
				arexx_set_var_int(rxmsg,stem_buf,total_new);
				strcpy(&stem_buf[stem_len],"UNREAD");
				arexx_set_var_int(rxmsg,stem_buf,total_unread);

				free(stem_buf);
			}
		} else
		{
			char num_buf[36];
			sprintf(num_buf,"%d %d %d",total_msg,total_new,total_unread);
			if (getmailstat_arg.var) MySetRexxVarFromMsg(getmailstat_arg.var,num_buf,rxmsg);
			else arexx_set_result(rxmsg,num_buf);
		}
		FreeTemplate(arg_handle);
	}
}
Пример #16
0
/**
 * REQUESTSTRING ARexx command
 *
 * @param rxmsg the message defining the ARexx context
 * @param args the command's arguments
 */
static void arexx_requeststring(struct RexxMsg *rxmsg, STRPTR args)
{
	APTR arg_handle;

	struct	{
		STRPTR var;
		STRPTR stem;
		STRPTR body;
		STRPTR string;
		ULONG secret;
	} requeststring_arg;
	memset(&requeststring_arg,0,sizeof(requeststring_arg));

	if ((arg_handle = ParseTemplate("VAR/K,STEM/K,BODY/A,STRING/K,SECRET/S",args,&requeststring_arg)))
	{
		char *result;
		if ((result = sm_request_string(NULL,requeststring_arg.body,requeststring_arg.string,requeststring_arg.secret)))
		{
			if (requeststring_arg.stem)
			{
				int stem_len = strlen(requeststring_arg.stem);
				char *stem_buf = (char *)malloc(stem_len+20);
				if (stem_buf)
				{
					strcpy(stem_buf,requeststring_arg.stem);
					strcat(stem_buf,"STRING");
					MySetRexxVarFromMsg(stem_buf,result,rxmsg);
					free(stem_buf);
				}
			} else
			{
				if (requeststring_arg.var) MySetRexxVarFromMsg(requeststring_arg.var,result,rxmsg);
				else arexx_set_result(rxmsg,result);
			}
			free(result);
		} else
		{
			/* error so set the RC val to 1 */
			rxmsg->rm_Result1 = 1;
		}
		FreeTemplate(arg_handle);
	}
}
Пример #17
0
/**
 * MAILADD Arexx Command
 *
 * Adds a mail with FILENAME into the folder. If the mail
 * (FILENAME) is already in the folder it isn't copied. Otherwise
 * it is copied. Returns the filename of the mail.
 *
 * @param rxmsg the message defining the ARexx context
 * @param args the command's arguments
 */
static void arexx_mailadd(struct RexxMsg *rxmsg, STRPTR args)
{
	APTR arg_handle;

	struct	{
		STRPTR var;
		STRPTR stem;
		STRPTR filename;
		STRPTR folder;
	} mailadd_arg;
	memset(&mailadd_arg,0,sizeof(mailadd_arg));

	if ((arg_handle = ParseTemplate("VAR/K,STEM/K,FILENAME/A,FOLDER",args,&mailadd_arg)))
	{
		struct folder *folder;
		struct mail_info *mail;
		if (mailadd_arg.folder) folder = folder_find_by_name(mailadd_arg.folder);
		else folder = main_get_folder();

		if ((mail = callback_new_mail_to_folder(mailadd_arg.filename,folder)))
		{
			if (mailadd_arg.stem)
			{
				int stem_len = strlen(mailadd_arg.stem);
				char *stem_buf = (char *)malloc(stem_len+20);
				if (stem_buf)
				{
					strcpy(stem_buf,mailadd_arg.stem);
					strcat(stem_buf,"FILENAME");
					MySetRexxVarFromMsg(stem_buf,mail->filename,rxmsg);
					free(stem_buf);
				}
			} else
			{
				if (mailadd_arg.var) MySetRexxVarFromMsg(mailadd_arg.var,mail->filename,rxmsg);
				else arexx_set_result(rxmsg,mail->filename);
			}
		}

		FreeTemplate(arg_handle);
	}
}
Пример #18
0
/**
 * ADDRLOAD ARexx command
 *
 * @param rxmsg the message defining the ARexx context
 * @param args the command's arguments
 */
static void arexx_addrload(struct RexxMsg *rxmsg, STRPTR args)
{
	APTR arg_handle;

	struct	{
		STRPTR filename;
		ULONG append;
	} addrload_arg;
	memset(&addrload_arg,0,sizeof(addrload_arg));

	if ((arg_handle = ParseTemplate("FILENAME,APPEND/S",args,&addrload_arg)))
	{
		addressbook_import_file(addrload_arg.filename,addrload_arg.append);
		main_build_addressbook();
		addressbookwnd_refresh();

		FreeTemplate(arg_handle);
	}

}
Пример #19
0
/**
 * OPENMESSAGE ARexx command
 *
 * @param rxmsg the message defining the ARexx context
 * @param args the command's arguments
 */
static void arexx_openmessage(struct RexxMsg *rxmsg, STRPTR args)
{
	APTR arg_handle;

	struct {
		STRPTR var;
		STRPTR stem;
		STRPTR filename;
		LONG *window;
	} openmessage_arg;
	memset(&openmessage_arg,0,sizeof(openmessage_arg));

	if ((arg_handle = ParseTemplate("VAR/K,STEM/K,FILENAME/A,WINDOW/N",args,&openmessage_arg)))
	{
		int window = -1;

		if (openmessage_arg.window) window = *openmessage_arg.window;

		read_active_window = window = callback_open_message(openmessage_arg.filename,window);

		if (openmessage_arg.stem)
		{
			int stem_len = strlen(openmessage_arg.stem);
			char *stem_buf = (char *)malloc(stem_len+20);
			if (stem_buf)
			{
				strcpy(stem_buf,openmessage_arg.stem);
				strcat(stem_buf,"WINDOW");
				arexx_set_var_int(rxmsg,stem_buf,window);
				free(stem_buf);
			}
		} else
		{
			char num_buf[24];
			sprintf(num_buf,"%d",window);
			if (openmessage_arg.var) MySetRexxVarFromMsg(openmessage_arg.var,num_buf,rxmsg);
			else arexx_set_result(rxmsg,num_buf);
		}
		FreeTemplate(arg_handle);
	}
}
Пример #20
0
/**
 * ADDRNEW ARexx command
 *
 * @param rxmsg the message defining the ARexx context
 * @param args the command's arguments
 */
static void arexx_addrnew(struct RexxMsg *rxmsg, STRPTR args)
{
	APTR arg_handle;

	struct	{
		STRPTR type;
		STRPTR alias;
		STRPTR name;
		STRPTR email;
	} addrnew_arg;
	memset(&addrnew_arg,0,sizeof(addrnew_arg));

	if ((arg_handle = ParseTemplate("TYPE,ALIAS,NAME,EMAIL",args,&addrnew_arg)))
	{
		if (addrnew_arg.type && (toupper((unsigned char)(*addrnew_arg.type)) == 'G'))
		{
			addressbook_add_group(addrnew_arg.alias);
		} else
		{
			struct addressbook_entry_new *entry;
			char *name;

			name = utf8create(addrnew_arg.name, user.config.default_codeset?user.config.default_codeset->name:NULL);

			if ((entry = addressbook_add_entry(name)))
			{
				entry->alias = mystrdup(addrnew_arg.alias);
				entry->email_array = array_add_string(entry->email_array,addrnew_arg.email);
			}

			free(name);
		}

		main_build_addressbook();
		addressbookwnd_refresh();

		FreeTemplate(arg_handle);
	}
}
Пример #21
0
/**
 * MAILFETCH Arexx Command
 *
 * @param rxmsg the message defining the ARexx context
 * @param args the command's arguments
 */
static void arexx_mailfetch(struct RexxMsg *rxmsg, STRPTR args)
{
	APTR arg_handle;

	struct	{
		STRPTR accountemail;
		LONG *accountnum;
	} mailfetch_arg;
	memset(&mailfetch_arg,0,sizeof(mailfetch_arg));

	if ((arg_handle = ParseTemplate("ACCOUNTEMAIL/K,ACCOUNTNUM/K/N",args,&mailfetch_arg)))
	{
		if (mailfetch_arg.accountemail)
		{
			mails_dl_single_account(account_find_by_from(mailfetch_arg.accountemail));
		} else
		if (mailfetch_arg.accountnum)
		{
			mails_dl_single_account(account_find_by_number(*mailfetch_arg.accountnum));
		} else mails_dl(0);
		FreeTemplate(arg_handle);
	}
}
Пример #22
0
/**
 * REQUEST ARexx command
 *
 * @param rxmsg the message defining the ARexx context
 * @param args the command's arguments
 */
static void arexx_request(struct RexxMsg *rxmsg, STRPTR args)
{
	APTR arg_handle;

	struct	{
		STRPTR var;
		STRPTR stem;
		STRPTR body;
		STRPTR gadgets;
	} request_arg;
	memset(&request_arg,0,sizeof(request_arg));

	if ((arg_handle = ParseTemplate("VAR/K,STEM/K,BODY/A,GADGETS/A",args,&request_arg)))
	{
		int result;
		result = sm_request(NULL,request_arg.body,request_arg.gadgets,NULL);
		if (request_arg.stem)
		{
			int stem_len = strlen(request_arg.stem);
			char *stem_buf = (char *)malloc(stem_len+20);
			if (stem_buf)
			{
				strcpy(stem_buf,request_arg.stem);
				strcat(stem_buf,"RESULT");
				arexx_set_var_int(rxmsg,stem_buf,result);
				free(stem_buf);
			}
		} else
		{
			char num_buf[24];
			sprintf(num_buf,"%d",result);
			if (request_arg.var) MySetRexxVarFromMsg(request_arg.var,num_buf,rxmsg);
			else arexx_set_result(rxmsg,num_buf);
		}
		FreeTemplate(arg_handle);
	}
}
Пример #23
0
/**
 * Moves the active or the specified mail to a given folder.
 *
 * @param rxmsg the message defining the ARexx context
 * @param args the command's arguments
 */
static void arexx_maildelete(struct RexxMsg *rxmsg, STRPTR args)
{
	APTR arg_handle;

	struct
	{
		STRPTR folder;
		STRPTR filename;
		LONG quiet;
	} maildelete_arg;

	memset(&maildelete_arg,0,sizeof(maildelete_arg));

	if ((arg_handle = ParseTemplate("FOLDER,FILENAME,QUIET/S",args,&maildelete_arg)))
	{
		struct folder *f = maildelete_arg.folder?folder_find_by_name(maildelete_arg.folder):main_get_folder();

		if (f)
		{
			if (maildelete_arg.filename)
			{
				struct mail_info *mail;

				if ((mail = folder_find_mail_by_filename(f,maildelete_arg.filename)))
					callback_delete_mail(mail);
			} else
			{
				if (maildelete_arg.quiet)
					callback_delete_mails_silent(0);
				else
					callback_delete_mails();
			}
		}

		FreeTemplate(arg_handle);
	}
}
Пример #24
0
/**
 * MAILINFO ARexx command
 *
 * @param rxmsg the message defining the ARexx context
 * @param args the command's arguments
 */
static void arexx_mailinfo(struct RexxMsg *rxmsg, STRPTR args)
{
	APTR arg_handle;

	struct	{
		STRPTR stem;
		ULONG *index;
	} mailinfo_arg;
	memset(&mailinfo_arg,0,sizeof(mailinfo_arg));

	if ((arg_handle = ParseTemplate("STEM/K,INDEX/N",args,&mailinfo_arg)))
	{
		struct mail_info *mail = NULL;
		if (mailinfo_arg.index)
		{
			struct folder *f = main_get_folder();
			if (f) mail = folder_find_mail_by_position(f, *mailinfo_arg.index);
		} else mail = main_get_active_mail();

		if (mail)
		{
			const char *mail_status;
			char *mail_from = mail_get_from_address(mail);
			char *mail_to = mail_get_to_address(mail);
			char *mail_replyto = mail_get_replyto_address(mail);
			char *mail_date = NULL;
			char mail_flags[9];
			int mail_index;

			switch (mail_get_status_type(mail))
			{
				case	MAIL_STATUS_READ: mail_status = "O";break;
				case	MAIL_STATUS_WAITSEND: mail_status = "W";break;
				case	MAIL_STATUS_SENT: mail_status = "S";break;
				case	MAIL_STATUS_REPLIED: mail_status = "R";break;
				case	MAIL_STATUS_FORWARD: mail_status = "F";break;
				case	MAIL_STATUS_REPLFORW: mail_status = "R";break;
				case	MAIL_STATUS_HOLD: mail_status = "H";break;
				case	MAIL_STATUS_ERROR: mail_status = "E";break;
				case	MAIL_STATUS_SPAM: mail_status = "M";break;
				default:
							if (mail->flags & MAIL_FLAGS_NEW) mail_status = "N";
							else mail_status = "U";
							break;
			}

			mail_index = folder_get_index_of_mail(main_get_folder(),mail);

			{
				char *date = (char *)malloc(LEN_DATSTRING);
				char *time = (char *)malloc(LEN_DATSTRING);
				struct DateTime dt;

				if (date && time)
				{
					dt.dat_Stamp.ds_Days = mail->seconds / (60*60*24);
					dt.dat_Stamp.ds_Minute = (mail->seconds % (60*60*24))/60;
					dt.dat_Stamp.ds_Tick = (mail->seconds % 60) * 50;
					dt.dat_Format = FORMAT_USA;
					dt.dat_Flags = 0;
					dt.dat_StrDate = date;
					dt.dat_StrTime = time;
					DateToStr(&dt);
					if ((mail_date = (char *)malloc(2*LEN_DATSTRING)))
					sprintf(mail_date,"%s %s",date,time);
				}
				free(date);
				free(time);
			}

			strcpy(mail_flags,"--------");
			if (mail->flags & MAIL_FLAGS_GROUP) mail_flags[0] = 'M';
			if (mail->flags & MAIL_FLAGS_ATTACH) mail_flags[1] = 'A';
			if (mail->flags & MAIL_FLAGS_CRYPT) mail_flags[3] = 'C';
			if (mail->flags & MAIL_FLAGS_SIGNED) mail_flags[4] = 'S';

			if (mailinfo_arg.stem)
			{
				int stem_len = strlen(mailinfo_arg.stem);
				char *stem_buf = (char *)malloc(stem_len+20);
				if (stem_buf)
				{
					strcpy(stem_buf,mailinfo_arg.stem);

					strcpy(&stem_buf[stem_len],"INDEX");
					arexx_set_var_int(rxmsg,stem_buf,mail_index);
					strcpy(&stem_buf[stem_len],"STATUS");
					MySetRexxVarFromMsg(stem_buf,mail_status,rxmsg);
					strcpy(&stem_buf[stem_len],"FROM");
					MySetRexxVarFromMsg(stem_buf,mail_from,rxmsg);
					strcpy(&stem_buf[stem_len],"TO");
					MySetRexxVarFromMsg(stem_buf,mail_to,rxmsg);
					strcpy(&stem_buf[stem_len],"REPLYTO");
					MySetRexxVarFromMsg(stem_buf,mail_replyto,rxmsg);
					strcpy(&stem_buf[stem_len],"SUBJECT");
					MySetRexxVarFromMsg(stem_buf,mail->subject,rxmsg);
					strcpy(&stem_buf[stem_len],"FILENAME");
					MySetRexxVarFromMsg(stem_buf,mail->filename,rxmsg);
					strcpy(&stem_buf[stem_len],"SIZE");
					arexx_set_var_int(rxmsg,stem_buf,mail->size);
					strcpy(&stem_buf[stem_len],"DATE");
					MySetRexxVarFromMsg(stem_buf,mail_date,rxmsg);
					strcpy(&stem_buf[stem_len],"FLAGS");
					MySetRexxVarFromMsg(stem_buf,mail_flags,rxmsg);
					strcpy(&stem_buf[stem_len],"FOLDER");
					MySetRexxVarFromMsg(stem_buf,main_get_folder()->name,rxmsg);
					strcpy(&stem_buf[stem_len],"MSGID");
					arexx_set_var_int(rxmsg,stem_buf,0); /* Not supported yet */

					free(stem_buf);
				}
			}
			free(mail_date);
			free(mail_replyto);
			free(mail_to);
			free(mail_from);
		}
		FreeTemplate(arg_handle);
	}
}
Пример #25
0
/**
 * REQUESTFILE ARexx command
 *
 * @param rxmsg the message defining the ARexx context
 * @param args the command's arguments
 */
static void arexx_requestfile(struct RexxMsg *rxmsg, STRPTR args)
{
	APTR arg_handle;

	struct	{
		STRPTR stem;
		STRPTR drawer;
		STRPTR file;
		STRPTR pattern;
		STRPTR title;
		STRPTR positive;
		STRPTR negative;
		STRPTR acceptpattern;
		STRPTR rejectpattern;
		ULONG savemode;
		ULONG multiselect;
		ULONG drawersonly;
		ULONG noicons;
	} requestfile_arg;
	memset(&requestfile_arg,0,sizeof(requestfile_arg));

	if ((arg_handle = ParseTemplate("STEM/K,DRAWER,FILE/K,PATTERN/K,TITLE/K,POSITIVE/K,NEGATIVE/K,ACCEPTPATTERN/K,REJECTPATTERN/K,SAVEMODE/S,MULTISELECT/S,DRAWERSONLY/S,NOICONS/S",args,&requestfile_arg)))
	{
		struct FileRequester *filereq = (struct FileRequester *)AllocAslRequest(ASL_FileRequest,NULL);
		if (filereq)
		{
			UBYTE *acceptpattern = NULL,*rejectpattern = NULL;
			int stem_len;
			char *stem_buf;
			char num_buf[32];

			if (requestfile_arg.stem)
			{
				stem_len = strlen(requestfile_arg.stem);
				if ((stem_buf = (char *)malloc(stem_len+20)))
				{
					strcpy(stem_buf,requestfile_arg.stem);
				} else stem_len = 0;
			} else
			{
				stem_buf = 0;
				stem_len = 0;
			}


			if (requestfile_arg.acceptpattern)
			{
				int len = strlen(requestfile_arg.acceptpattern)*2+3;
				if ((acceptpattern = (UBYTE*)AllocVec(len,0)))
					ParsePatternNoCase(requestfile_arg.acceptpattern,(STRPTR)acceptpattern,len);
			}

			if (requestfile_arg.rejectpattern)
			{
				int len = strlen(requestfile_arg.rejectpattern)*2+3;
				if ((rejectpattern = (UBYTE*)AllocVec(len,0)))
					ParsePatternNoCase(requestfile_arg.rejectpattern,(STRPTR)rejectpattern,len);
			}

			if (AslRequestTags(filereq,
						ASLFR_Screen, main_get_screen(),
						requestfile_arg.title?ASLFR_TitleText:TAG_IGNORE, requestfile_arg.title,
						requestfile_arg.positive?ASLFR_PositiveText:TAG_IGNORE, requestfile_arg.positive,
						requestfile_arg.negative?ASLFR_NegativeText:TAG_IGNORE, requestfile_arg.negative,
						requestfile_arg.drawer?ASLFR_InitialDrawer:TAG_IGNORE, requestfile_arg.drawer,
						requestfile_arg.file?ASLFR_InitialFile:TAG_IGNORE, requestfile_arg.file,
						requestfile_arg.pattern?ASLFR_InitialPattern:TAG_IGNORE, requestfile_arg.pattern,
						rejectpattern?ASLFR_RejectPattern:TAG_IGNORE, rejectpattern,
						acceptpattern?ASLFR_AcceptPattern:TAG_IGNORE, acceptpattern,
						ASLFR_RejectIcons, requestfile_arg.noicons,
						ASLFR_DrawersOnly, requestfile_arg.drawersonly,
						ASLFR_DoMultiSelect, requestfile_arg.multiselect,
						ASLFR_DoSaveMode, requestfile_arg.savemode,
						requestfile_arg.pattern?ASLFR_DoPatterns:TAG_IGNORE, TRUE,
						TAG_DONE))
			{
				int i;
				char *name;
				STRPTR dirname;
				BPTR dirlock;

				if (stem_buf)
				{
					strcpy(&stem_buf[stem_len],"PATH.COUNT");
					sprintf(num_buf,"%ld",filereq->fr_NumArgs);
					MySetRexxVarFromMsg(stem_buf,num_buf,rxmsg);

					for (i=0;i<filereq->fr_NumArgs;i++)
					{
						sprintf(&stem_buf[stem_len],"PATH.%d",i);
						if ((dirname = NameOfLock(filereq->fr_ArgList[i].wa_Lock)))
						{
							if ((name = mycombinepath(dirname,filereq->fr_ArgList[i].wa_Name)))
							{
								MySetRexxVarFromMsg(stem_buf,name,rxmsg);
								free(name);
							} else MySetRexxVarFromMsg(stem_buf,"",rxmsg);
							FreeVec(dirname);
						} else MySetRexxVarFromMsg(stem_buf,"",rxmsg);
					}

					strcpy(&stem_buf[stem_len],"FILE");
					MySetRexxVarFromMsg(stem_buf,filereq->fr_File,rxmsg);

					strcpy(&stem_buf[stem_len],"DRAWER");
					MySetRexxVarFromMsg(stem_buf,filereq->fr_Drawer,rxmsg);

					strcpy(&stem_buf[stem_len],"PATTERN");
					MySetRexxVarFromMsg(stem_buf,filereq->fr_Pattern,rxmsg);
				}

				if ((dirlock = Lock(filereq->fr_Drawer,ACCESS_READ)))
				{
					if ((dirname = NameOfLock(dirlock)))
					{
						if ((name = mycombinepath(dirname,filereq->fr_File)))
						{
							arexx_set_result(rxmsg,name);
							free(name);
						}
						FreeVec(dirname);
					}
					UnLock(dirlock);
				}
			} else
			{
				if (stem_buf)
				{
					strcpy(&stem_buf[stem_len],"PATH.COUNT");
					MySetRexxVarFromMsg(stem_buf,"0",rxmsg);
				}
				arexx_set_result(rxmsg,"");
			}
		}
		FreeTemplate(arg_handle);
	}
}
Пример #26
0
/**
 * FOLDERINFO ARexx command
 *
 * @param rxmsg the message defining the ARexx context
 * @param args the command's arguments
 */
static void arexx_folderinfo(struct RexxMsg *rxmsg, STRPTR args)
{
	APTR arg_handle;

	struct	{
		STRPTR var;
		STRPTR stem;
		STRPTR folder;
	} folderinfo_arg;
	memset(&folderinfo_arg,0,sizeof(folderinfo_arg));

	if ((arg_handle = ParseTemplate("VAR/K,STEM/K,FOLDER",args,&folderinfo_arg)))
	{
		struct folder *folder;

		if (folderinfo_arg.folder) folder = folder_find_by_name(folderinfo_arg.folder);
		else folder = main_get_folder();

		if (folder)
		{
			int folder_size = folder_size_of_mails(folder);
			int folder_type;

			if (folder == folder_incoming()) folder_type = 1;
			else if (folder == folder_outgoing()) folder_type = 2;
			else if (folder == folder_sent()) folder_type = 3;
			else if (folder == folder_deleted()) folder_type = 4;
			else if (folder->type == FOLDER_TYPE_SEND) folder_type = 5;
			else if (folder->type == FOLDER_TYPE_SENDRECV) folder_type = 6;
			else if (folder->special == FOLDER_SPECIAL_GROUP) folder_type = 7;
			else if (folder == folder_spam()) folder_type = 8;
			else folder_type = 0;

			if (folderinfo_arg.stem)
			{
				int stem_len = strlen(folderinfo_arg.stem);
				char *stem_buf = (char *)malloc(stem_len+20);
				if (stem_buf)
				{
					strcpy(stem_buf,folderinfo_arg.stem);

					strcpy(&stem_buf[stem_len],"NUMBER");
					arexx_set_var_int(rxmsg,stem_buf,folder_position(folder));
					strcpy(&stem_buf[stem_len],"NAME");
					MySetRexxVarFromMsg(stem_buf,folder->name,rxmsg);
					strcpy(&stem_buf[stem_len],"PATH");
					MySetRexxVarFromMsg(stem_buf,folder->path,rxmsg);
					strcpy(&stem_buf[stem_len],"TOTAL");
					arexx_set_var_int(rxmsg,stem_buf,folder->num_mails);
					strcpy(&stem_buf[stem_len],"NEW");
					arexx_set_var_int(rxmsg,stem_buf,folder->new_mails);
					strcpy(&stem_buf[stem_len],"UNREAD");
					arexx_set_var_int(rxmsg,stem_buf,folder->unread_mails);
					strcpy(&stem_buf[stem_len],"SIZE");
					arexx_set_var_int(rxmsg,stem_buf,folder_size);
					strcpy(&stem_buf[stem_len],"TYPE");
					arexx_set_var_int(rxmsg,stem_buf,folder_type);

					free(stem_buf);
				}
			} else
			{
				char *str;
				char num_buf[24];

				sprintf(num_buf,"%d",folder_position(folder));
				str = mystrdup(num_buf);
				str = stradd(str," \"");
				str = stradd(str,folder->name);
				str = stradd(str,"\" \"");
				str = stradd(str,folder->path);
				str = stradd(str,"\" ");
				sprintf(num_buf,"%d",folder->num_mails);
				str = stradd(str,num_buf);
				str = stradd(str," ");
				sprintf(num_buf,"%d",folder->new_mails);
				str = stradd(str,num_buf);
				str = stradd(str," ");
				sprintf(num_buf,"%d",folder->unread_mails);
				str = stradd(str,num_buf);
				str = stradd(str," ");
				sprintf(num_buf,"%d",folder_size);
				str = stradd(str,num_buf);
				str = stradd(str," ");
				sprintf(num_buf,"%d",folder_type);
				str = stradd(str,num_buf);

				if (folderinfo_arg.var) MySetRexxVarFromMsg(folderinfo_arg.var,str,rxmsg);
				else arexx_set_result(rxmsg,str);

				free(str);
			}
		}
		FreeTemplate(arg_handle);
	}
}
Пример #27
0
/**
 * GETSELECTED ARexx command.
 *
 * @param rxmsg the message defining the ARexx context.
 * @param args the command's arguments
 */
static void arexx_getselected(struct RexxMsg *rxmsg, STRPTR args)
{
	APTR arg_handle;

	struct	{
		STRPTR var;
		STRPTR stem;
	} getselected_arg;
	memset(&getselected_arg,0,sizeof(getselected_arg));

	if ((arg_handle = ParseTemplate("VAR/K,STEM/K",args,&getselected_arg)))
	{
		int num = 0;
		struct mail_info *mail;
		void *handle = NULL;
		struct folder *folder;

		folder = main_get_folder();
		mail = main_get_mail_first_selected(&handle);
		num = 0;

		/* Count the number of mails */
		while (mail)
		{
			num++;
			mail = main_get_mail_next_selected(&handle);
		}

		if (folder)
		{
			char num_buf[20];

			if (getselected_arg.stem)
			{
				int stem_len = strlen(getselected_arg.stem);
				char *stem_buf = (char *)malloc(stem_len+20);
				if (stem_buf)
				{
					int i = 0;

					strcpy(stem_buf,getselected_arg.stem);
					strcpy(&stem_buf[stem_len],"NUM.COUNT");
					sprintf(num_buf,"%d",num);
					MySetRexxVarFromMsg(stem_buf,num_buf,rxmsg);

					mail = main_get_mail_first_selected(&handle);
					while (mail)
					{
						sprintf(&stem_buf[stem_len],"NUM.%d",i);
						sprintf(num_buf,"%d",folder_get_index_of_mail(folder,mail));
						MySetRexxVarFromMsg(stem_buf,num_buf,rxmsg);
						i++;
						mail = main_get_mail_next_selected(&handle);
					}
					free(stem_buf);
				}
			} else
			{
				char *str;

				sprintf(num_buf,"%d",num);
				str = mystrdup(num_buf);

				mail = main_get_mail_first_selected(&handle);

				/* Count the number of mails */
				while (mail)
				{
					sprintf(num_buf, " %d", folder_get_index_of_mail(folder,mail));
					str = stradd(str,num_buf);
					mail = main_get_mail_next_selected(&handle);
				}

				if (getselected_arg.var) MySetRexxVarFromMsg(getselected_arg.var,str,rxmsg);
				else arexx_set_result(rxmsg,str);

				free(str);
			}
		}
		FreeTemplate(arg_handle);
	}
}
Пример #28
0
/**
 * READINFO ARexx command
 *
 * @param rxmsg the message defining the ARexx context
 * @param args the command's arguments
 */
static void arexx_readinfo(struct RexxMsg *rxmsg, STRPTR args)
{
	APTR arg_handle;

	struct	{
		STRPTR var;
		STRPTR stem;
	} readinfo_arg;
	memset(&readinfo_arg,0,sizeof(readinfo_arg));

	if ((arg_handle = ParseTemplate("VAR/K,STEM/K",args,&readinfo_arg)))
	{
		char num_buf[20];
		struct mail_complete *mail;

		if ((mail = read_window_get_displayed_mail(read_active_window)))
		{
			mail = mail_get_root(mail);

			if (readinfo_arg.stem)
			{
				int stem_len = strlen(readinfo_arg.stem);
				char *stem_buf = (char *)malloc(stem_len+20);
				if (stem_buf)
				{
					int i, count = 0;
					struct mail_complete *t = mail;

					while (t)
					{
						mail_decode(t);
						t = mail_get_next(t);
						count++;
					}

					strcpy(stem_buf,readinfo_arg.stem);
					strcpy(&stem_buf[stem_len],"FILENAME.COUNT");
					sprintf(num_buf,"%d",count);
					MySetRexxVarFromMsg(stem_buf,num_buf,rxmsg);

					strcpy(&stem_buf[stem_len],"FILETYPE.COUNT");
					sprintf(num_buf,"%d",count);
					MySetRexxVarFromMsg(stem_buf,num_buf,rxmsg);

					strcpy(&stem_buf[stem_len],"FILESIZE.COUNT");
					sprintf(num_buf,"%d",count);
					MySetRexxVarFromMsg(stem_buf,num_buf,rxmsg);

					i = 0;

					while (mail)
					{
						char *char_buf;
						int mail_size;

						if (mail->decoded_data) mail_size = mail->decoded_len;
						else mail_size = mail->text_len;

						sprintf(&stem_buf[stem_len],"FILENAME.%d",i);
						char_buf = mystrdup(mail->content_name);
						if (char_buf)
							MySetRexxVarFromMsg(stem_buf,char_buf,rxmsg);
						free(char_buf);
						char_buf = NULL;

						sprintf(&stem_buf[stem_len],"FILETYPE.%d",i);
						char_buf = mystrdup(mail->content_type);
						char_buf = stradd(char_buf,"/");
						char_buf = stradd(char_buf,mail->content_subtype);
						if (char_buf)
							MySetRexxVarFromMsg(stem_buf,char_buf,rxmsg);
						free(char_buf);
						char_buf = NULL;

						sprintf(&stem_buf[stem_len],"FILESIZE.%d",i);
						sprintf(num_buf,"%d",mail_size);
						MySetRexxVarFromMsg(stem_buf,num_buf,rxmsg);

						mail = mail_get_next(mail);
						i++;
					}
					free(stem_buf);
				}
			}
		}
		FreeTemplate(arg_handle);
	}
}
Пример #29
0
/**
 * MAILWRITE ARexx command.
 *
 * @param rxmsg the message defining the ARexx context.
 * @param args
 */
static void arexx_mailwrite(struct RexxMsg *rxmsg, STRPTR args)
{
	APTR arg_handle;

	struct	{
		STRPTR var;
		STRPTR stem;
		ULONG *window;
		ULONG quiet;
		STRPTR mailto;
		STRPTR subject;
		STRPTR body;
		STRPTR *attachments;
	} mailwrite_arg;
	memset(&mailwrite_arg,0,sizeof(mailwrite_arg));

	if ((arg_handle = ParseTemplate("VAR/K,STEM/K,WINDOW/N,QUIET/S,MAILTO/K,SUBJECT/K,BODY/K,ATTACHMENT/K/M",args,&mailwrite_arg)))
	{
		if (mailwrite_arg.window)
		{
			compose_window_activate(*mailwrite_arg.window);
			compose_active_window = *mailwrite_arg.window;
		} else
		{
			int window;
			char *unescaped_body = NULL;

			if (mailwrite_arg.body)
			{
				char *body;
				char *body2;

				if ((body = mystrreplace(mailwrite_arg.body, "**", "*")))
				{
					if ((body2 = mystrreplace(body, "*n", "\n")))
						unescaped_body = body2;
					free(body);
				}
			}

			compose_active_window = window = callback_write_mail_to_str_with_body(mailwrite_arg.mailto,mailwrite_arg.subject,unescaped_body);

			if (unescaped_body)
				free(unescaped_body);

			if (mailwrite_arg.attachments)
				compose_window_attach(window,mailwrite_arg.attachments);

			if (mailwrite_arg.stem)
			{
				int stem_len = strlen(mailwrite_arg.stem);
				char *stem_buf = (char *)malloc(stem_len+20);
				if (stem_buf)
				{
					strcpy(stem_buf,mailwrite_arg.stem);
					strcat(stem_buf,"WINDOW");
					arexx_set_var_int(rxmsg,stem_buf,window);
					free(stem_buf);
				}
			} else
			{
				char num_buf[24];
				sprintf(num_buf,"%d",window);
				if (mailwrite_arg.var) MySetRexxVarFromMsg(mailwrite_arg.var,num_buf,rxmsg);
				else arexx_set_result(rxmsg,num_buf);
			}
		}
		FreeTemplate(arg_handle);
	}
}
Пример #30
0
/**
 * Handle this single ARexx message.
 *
 * @param rxmsg
 * @return
 */
static int arexx_message(struct RexxMsg *rxmsg)
{
	STRPTR command_line = (STRPTR)ARG0(rxmsg);
	APTR command_handle;

	struct {
		STRPTR command;
		STRPTR args;
	} command;

	command.command = command.args = NULL;
	rxmsg->rm_Result1 = 0;
	rxmsg->rm_Result2 = 0;

	SM_DEBUGF(5,("Received ARexx command: \"%s\"\n",command_line));

	if ((command_handle = ParseTemplate("COMMAND/A,ARGS/F",command_line,(LONG*)&command)))
	{
		if (!Stricmp("MAINTOFRONT",command.command)) arexx_maintofront(rxmsg,command.args);
		else if (!Stricmp("MAILWRITE",command.command)) arexx_mailwrite(rxmsg,command.args);
		else if (!Stricmp("WRITEATTACH",command.command)) arexx_writeattach(rxmsg,command.args);
		else if (!Stricmp("WRITECLOSE",command.command)) arexx_writeclose(rxmsg,command.args);
		else if (!Stricmp("SETMAIL",command.command)) arexx_setmail(rxmsg,command.args);
		else if (!Stricmp("SETMAILFILE",command.command)) arexx_setmailfile(rxmsg,command.args);
		else if (!Stricmp("SHOW",command.command)) arexx_show(rxmsg,command.args);
		else if (!Stricmp("HIDE",command.command)) arexx_hide(rxmsg,command.args);
		else if (!Stricmp("QUIT",command.command)) arexx_quit(rxmsg,command.args);
		else if (!Stricmp("GETSELECTED",command.command)) arexx_getselected(rxmsg,command.args);
		else if (!Stricmp("GETMAILSTAT",command.command)) arexx_getmailstat(rxmsg,command.args);
		else if (!Stricmp("FOLDERINFO",command.command)) arexx_folderinfo(rxmsg,command.args);
		else if (!Stricmp("REQUEST",command.command)) arexx_request(rxmsg,command.args);
		else if (!Stricmp("REQUESTSTRING",command.command)) arexx_requeststring(rxmsg,command.args);
		else if (!Stricmp("REQUESTFILE",command.command)) arexx_requestfile(rxmsg,command.args);
		else if (!Stricmp("MAILINFO",command.command)) arexx_mailinfo(rxmsg,command.args);
		else if (!Stricmp("SETFOLDER",command.command)) arexx_setfolder(rxmsg,command.args);
		else if (!Stricmp("ADDRGOTO",command.command)) arexx_addrgoto(rxmsg,command.args);
		else if (!Stricmp("ADDRNEW",command.command)) arexx_addrnew(rxmsg,command.args);
		else if (!Stricmp("ADDRSAVE",command.command)) arexx_addrsave(rxmsg,command.args);
		else if (!Stricmp("ADDRLOAD",command.command)) arexx_addrload(rxmsg,command.args);
		else if (!Stricmp("GETURL",command.command)) arexx_geturl(rxmsg,command.args);
		else if (!Stricmp("NEWMAILFILE",command.command)) arexx_newmailfile(rxmsg,command.args);
		else if (!Stricmp("MAILREAD",command.command)) arexx_mailread(rxmsg,command.args);
		else if (!Stricmp("READCLOSE",command.command)) arexx_readclose(rxmsg,command.args);
		else if (!Stricmp("READINFO",command.command)) arexx_readinfo(rxmsg,command.args);
		else if (!Stricmp("READSAVE",command.command)) arexx_readsave(rxmsg,command.args);
		else if (!Stricmp("SCREENTOBACK",command.command)) {struct Screen *scr = (struct Screen *)main_get_screen(); if (scr) ScreenToBack(scr);}
		else if (!Stricmp("SCREENTOFRONT",command.command)) {struct Screen *scr = (struct Screen *)main_get_screen(); if (scr) ScreenToFront(scr);}
		else if (!Stricmp("REQUESTFOLDER",command.command)) arexx_requestfolder(rxmsg,command.args);
		else if (!Stricmp("MAILADD",command.command)) arexx_mailadd(rxmsg,command.args);
		else if (!Stricmp("MAILSETSTATUS",command.command)) arexx_mailsetstatus(rxmsg,command.args);
		else if (!Stricmp("MAILLISTFREEZE",command.command)) main_freeze_mail_list();
		else if (!Stricmp("MAILLISTTHAW",command.command)) main_thaw_mail_list();
		else if (!Stricmp("MAILFETCH",command.command)) arexx_mailfetch(rxmsg,command.args);
		else if (!Stricmp("OPENMESSAGE",command.command)) arexx_openmessage(rxmsg,command.args);
		else if (!Stricmp("VERSION",command.command)) arexx_version(rxmsg,command.args);
		else if (!Stricmp("MAILMOVE",command.command)) arexx_mailmove(rxmsg,command.args);
		else if (!Stricmp("MAILDELETE",command.command)) arexx_maildelete(rxmsg,command.args);
		else rxmsg->rm_Result1 = 20;

		FreeTemplate(command_handle);
	}
	return 0;
}