home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Fred Fish Collection 1.5
/
ffcollection-1-5-1992-11.iso
/
ff_progs
/
prt_util
/
printfls.lha
/
Source.lha
/
Source
/
prf_rexx.c
< prev
next >
Wrap
C/C++ Source or Header
|
1992-06-16
|
11KB
|
245 lines
/* prf_rexx.c */
/* v091 28-5-92 */
#include "prf.h"
#include <rexx/rexxio.h>
#include <rexx/rxslib.h>
#include <rexx/errors.h>
#include <rexx/storage.h>
#pragma libcall RexxSysBase CreateArgString 7e 0802
#pragma libcall RexxSysBase DeleteArgString 84 801
#pragma libcall RexxSysBase LengthArgString 8a 801
#pragma libcall RexxSysBase CreateRexxMsg 90 09803
#pragma libcall RexxSysBase DeleteRexxMsg 96 801
UBYTE __regargs *CreateArgString(UBYTE *string,unsigned long length);
void __regargs DeleteArgString(UBYTE *argstring);
ULONG __regargs LenghtArgString(UBYTE *argstring);
struct RexxMsg __regargs *CreateRexxMsg(struct MsgPort *port, UBYTE *extension,UBYTE *host);
void __regargs DeleteRexxMsg(struct RexxMsg *packet);
struct rexx_Cmd
{
UBYTE *rx_cmd;
ULONG rx_code;
};
struct rexx_Cmd rexxCmd[] =
{
T_RX_RESET,CMD_RESETALL,
T_RX_CLEAR,CMD_CLEARLIST,
T_RX_OPENWINDOW,CMD_OPENWD,
T_RX_CLOSEWINDOW,CMD_CLOSEWD,
T_RX_INSFILE,CMD_STR_INSERT,
T_RX_REMFILE,CMD_REMOVE,
T_RX_PAGE,CMD_PAGE_ON,
T_RX_TIME,CMD_TIME_ON,
T_RX_FILE,CMD_NAME_ON,
T_RX_FF,CMD_FF_ON,
T_RX_FFPAGE,CMD_FFPAGE_ON,
T_RX_FOOT,CMD_FOOT,
T_RX_HEAD,CMD_HEAD,
T_RX_QUIT,CMD_RXQUIT,
T_RX_DATE,CMD_DATE_ON,
T_RX_LINE,CMD_LINE_ON,
T_RX_LINES,CMD_LINES,
T_RX_RMARGIN,CMD_RMARGIN,
T_RX_LMARGIN,CMD_LMARGIN,
T_RX_DRAFT,CMD_DRAFT,
T_RX_LQ,CMD_LQ,
T_RX_PITCH6,CMD_PITCH6,
T_RX_PITCH8,CMD_PITCH8,
T_RX_10CPI,CMD_10CPI,
T_RX_12CPI,CMD_12CPI,
T_RX_15CPI,CMD_15CPI,
T_RX_PRINT,CMD_PRINT,
T_RX_ICON,CMD_ICONINFO,
T_RX_PROG,CMD_PROGINFO,
T_RX_SAVEPREFS,CMD_SAVEPREFS,
T_RX_STATUS,CMD_STATUS,
T_RX_VERSION,CMD_VERSION,
NULL,0
};
char *RexxPortName = RXPORTNAME;
void __regargs AttemptOpenRexx(struct prf_info *info)
{
if(RexxSysBase = (struct RxsLib *)OpenLibrary(RXSNAME,0L))
{
Forbid();
if(FindPort(RexxPortName))
{
Permit();
}
else
{
if(info->rexxPort = CreatePort(RexxPortName,0L))Permit();
}
}
}
void __regargs CloseRexx(struct prf_info *info)
{
if(info->rexxPort)
{
DeletePort(info->rexxPort);
}
if(RexxSysBase) CloseLibrary((struct Library *)RexxSysBase);
}
long __regargs HandleRexxMsg(struct prf_info *info)
{
UBYTE filename[STR_SIZE];
long rc = CMD_NEUTRAL;
long numarg;
long i,found,c;
UBYTE cmd_string[STR_SIZE],arg1[STR_SIZE],arg2[STR_SIZE],arg3[STR_SIZE];
numarg = (long)sscanf(info->rmsg->rm_Args[0],"%s %s %s %s",cmd_string,arg1,arg2,arg3);
c = RX_CMD_NEUTRAL;
if(!stricmp(arg1,T_RX_ON))c = RX_CMD_ON;
found = FALSE;i = 0L;
while(!found)
{
if(rexxCmd[i].rx_cmd == NULL){found = TRUE; i = -1L;}
else
{
if(!strnicmp(rexxCmd[i].rx_cmd,cmd_string,strlen(cmd_string)))
{
found = TRUE;
i=rexxCmd[i].rx_code;
}
else i++;
}
}
if(i != -1L)
{
switch(i)
{
case CMD_ICONINFO : if(!stricmp(arg1,T_RX_ALL))rc = CMD_ICONALL;
else if(!stricmp(arg1,T_RX_INFO))rc = CMD_ICONINFO;
else if(!stricmp(arg1,T_RX_CGFX))rc = CMD_ICONGFX;
else rc = CMD_ICONNONE;
break;
case CMD_PROGINFO : if(!stricmp(arg1,T_RX_ALL))rc = CMD_PROGALL;
else if(!stricmp(arg1,T_RX_INFO))rc = CMD_PROGINFO;
else if(!stricmp(arg1,T_RX_GFX))rc = CMD_PROGICON;
else rc = CMD_PROGNONE;
break;
case CMD_STATUS : if(info->rmsg->rm_Action & (1L << RXFB_RESULT))
{
if(info->flags.print)
info->rmsg->rm_Result2 = (long)CreateArgString(T_RX_PMSG,strlen(T_RX_PMSG));
else
info->rmsg->rm_Result2 = (long)CreateArgString(T_RX_WMSG,strlen(T_RX_WMSG));
}
break;
case CMD_VERSION : if(info->rmsg->rm_Action & (1L << RXFB_RESULT))
{
info->rmsg->rm_Result2 = (long)CreateArgString(RX_VERSION_STR,strlen(RX_VERSION_STR));
}
break;
case CMD_SAVEPREFS : if(*arg1 && *arg1 == '-')strcpy(arg2,arg1);
strcpy(filename,arg1);
if(*arg2 && *arg2 == '-')
{
if(strchr(arg2,'f'))info->flags.sp_files = 1;
if(strchr(arg2,'c'))info->flags.sp_comment = 1;
if(strchr(arg2,'r'))info->flags.sp_reset = 1;
if(strchr(arg2,'w'))info->flags.sp_window = 1;
if(strchr(arg2,'p'))info->flags.sp_print = 1;
if(strchr(arg2,'s'))info->flags.sp_start = 1;
if(strchr(arg2,'i'))info->flags.sp_icon = 1;
if(strchr(arg2,'l'))info->flags.sp_lines = 1;
if(strchr(arg2,'F'))info->flags.sp_files = 0;
if(strchr(arg2,'C'))info->flags.sp_comment = 0;
if(strchr(arg2,'R'))info->flags.sp_reset = 0;
if(strchr(arg2,'W'))info->flags.sp_window = 0;
if(strchr(arg2,'P'))info->flags.sp_print = 0;
if(strchr(arg2,'S'))info->flags.sp_start = 0;
if(strchr(arg2,'I'))info->flags.sp_icon = 0;
if(strchr(arg2,'L'))info->flags.sp_lines = 0;
if(info->Pwd)RefreshPwd(info);
}
if(*filename && *filename != '-') SavePreferences(info,filename);
break;
case CMD_FOOT : strcpy(info->Footline,info->rmsg->rm_Args[0]+1+strlen(T_RX_FOOT));
if(info->Swd)GT_SetGadgetAttrs(info->SGadgets[GD_Footline],info->Swd,NULL,GTST_String,info->Footline,TAG_DONE);
break;
case CMD_HEAD : strcpy(info->Headline,info->rmsg->rm_Args[0]+1+strlen(T_RX_HEAD));
if(info->Swd)GT_SetGadgetAttrs(info->SGadgets[GD_Headline],info->Swd,NULL,GTST_String,info->Headline,TAG_DONE);
break;
case CMD_OPENWD : if(!stricmp(arg1,T_RX_CONTROL))
{
if(*arg2)SwdTags[0].ti_Data = atol(arg2);
if(*arg3)SwdTags[1].ti_Data = atol(arg3);
if(SwdTags[0].ti_Data > (info->PubScr->Width - SwdTags[2].ti_Data))
SwdTags[0].ti_Data = info->PubScr->Width - SwdTags[2].ti_Data;
if(SwdTags[1].ti_Data > (info->PubScr->Height - SwdTags[3].ti_Data))
SwdTags[1].ti_Data = info->PubScr->Height - SwdTags[3].ti_Data;
rc = CMD_OPENWD;
}
else
if(!stricmp(arg1,T_RX_PREFS))
{
if(*arg2)PwdTags[0].ti_Data = atol(arg2);
if(*arg3)PwdTags[1].ti_Data = atol(arg3);
if(PwdTags[0].ti_Data > (info->PubScr->Width - PwdTags[2].ti_Data))
PwdTags[0].ti_Data = info->PubScr->Width - PwdTags[2].ti_Data;
if(PwdTags[1].ti_Data > (info->PubScr->Height - PwdTags[3].ti_Data))
PwdTags[1].ti_Data = info->PubScr->Height - PwdTags[3].ti_Data;
rc = CMD_OPENPWD;
}
break;
case CMD_CLOSEWD : if(!stricmp(arg1,T_RX_CONTROL)) rc = CMD_CLOSEWD;
else if(!stricmp(arg1,T_RX_PREFS)) rc = CMD_CLOSEPWD;
break;
case CMD_STR_INSERT : if(*arg1)
{
long cmd = CMD_INSERTTAIL;
info->Special1 = (APTR)arg1;
info->Special2 = (APTR)&cmd;
InsertName(info);
info->Special1 = NULL;
info->Special2 = NULL;
}
break;
case CMD_REMOVE : info->Special1 = (APTR)arg1;
RemoveName(info);
info->Special1 = NULL;
break;
case CMD_RMARGIN : if(*arg1)info->Rmargin = atol(arg1);
if(info->Pwd)GT_SetGadgetAttrs(info->PGadgets[GD_Rmargin - PGD],info->Pwd,NULL,GTIN_Number,info->Rmargin,TAG_DONE);
break;
case CMD_LMARGIN : if(*arg1)info->Lmargin = atol(arg1);
if(info->Pwd)GT_SetGadgetAttrs(info->PGadgets[GD_Lmargin - PGD],info->Pwd,NULL,GTIN_Number,info->Lmargin,TAG_DONE);
break;
case CMD_LINES : if(*arg1)info->Lines = atol(arg1);
if(info->Pwd)GT_SetGadgetAttrs(info->PGadgets[GD_Linesperpage - PGD],info->Pwd,NULL,GTIN_Number,info->Lines,TAG_DONE);
break;
case CMD_PAGE_ON : if(c == RX_CMD_ON) DoCommand(info,CMD_PAGE_ON) ; else DoCommand(info,CMD_PAGE_OFF); rc = CMD_NEUTRAL; break;
case CMD_LINE_ON : if(c == RX_CMD_ON) DoCommand(info,CMD_LINE_ON) ; else DoCommand(info,CMD_LINE_OFF); rc = CMD_NEUTRAL; break;
case CMD_NAME_ON : if(c == RX_CMD_ON) DoCommand(info,CMD_NAME_ON) ; else DoCommand(info,CMD_NAME_OFF); rc = CMD_NEUTRAL; break;
case CMD_TIME_ON : if(c == RX_CMD_ON) DoCommand(info,CMD_TIME_ON) ; else DoCommand(info,CMD_TIME_OFF); rc = CMD_NEUTRAL; break;
case CMD_FF_ON : if(c == RX_CMD_ON) DoCommand(info,CMD_FF_ON) ; else DoCommand(info,CMD_FF_OFF); rc = CMD_NEUTRAL; break;
case CMD_FFPAGE_ON : if(c == RX_CMD_ON) DoCommand(info,CMD_FFPAGE_ON) ; else DoCommand(info,CMD_FFPAGE_OFF); rc = CMD_NEUTRAL; break;
case CMD_DATE_ON : if(c == RX_CMD_ON) DoCommand(info,CMD_DATE_ON) ; else DoCommand(info,CMD_DATE_OFF); rc = CMD_NEUTRAL; break;
default : rc = i;
break;
}
}
else
{
rc = CMD_NEUTRAL;
if(info->rmsg->rm_Action & (1L << RXFB_RESULT))
{
info->rmsg->rm_Result2 = (long)CreateArgString(T_RX_ERROR,strlen(T_RX_ERROR));
info->rmsg->rm_Result1 = RX_ERRORLEVEL;
}
}
return rc;
}