/* prf_rexx.c */ /* V1.1 10-9-92 */ #include "prf.h" #include #include #include #include #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 *CreateArgString(UBYTE *string,unsigned long length); void DeleteArgString(UBYTE *argstring); ULONG LenghtArgString(UBYTE *argstring); struct RexxMsg *CreateRexxMsg(struct MsgPort *port, UBYTE *extension,UBYTE *host); void 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_CRLF,CMD_CRLF_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_SAVEPREFS,CMD_SAVEPREFS, T_RX_STATUS,CMD_STATUS, T_RX_VERSION,CMD_VERSION, NULL,0 }; char *RexxPortName = RXPORTNAME; void 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 CloseRexx(struct prf_info *info) { if(info->rexxPort) { DeletePort(info->rexxPort); } if(RexxSysBase) CloseLibrary((struct Library *)RexxSysBase); } long 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(!strnicmp(arg1,T_RX_ON,strlen(arg1)))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_STATUS : if(info->rmsg->rm_Action & (1L << RXFB_RESULT)) { if(info->flags & FLAG_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 : strcpy(filename,arg1); if(*filename) SavePreferences(info,filename); else rc = CMD_SAVEPREFS; 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 : (c) ? (rc = CMD_PAGE_ON) : (rc = CMD_PAGE_OFF); break; case CMD_LINE_ON : (c) ? (rc = CMD_LINE_ON) : (rc = CMD_LINE_OFF); break; case CMD_NAME_ON : (c) ? (rc = CMD_NAME_ON) : (rc = CMD_NAME_OFF); break; case CMD_TIME_ON : (c) ? (rc = CMD_TIME_ON) : (rc = CMD_TIME_OFF); break; case CMD_FF_ON : (c) ? (rc = CMD_FF_ON) : (rc = CMD_FF_OFF); break; case CMD_CRLF_ON : (c) ? (rc = CMD_CRLF_ON) : (rc = CMD_CRLF_OFF); break; case CMD_DATE_ON : (c) ? (rc = CMD_DATE_ON) : (rc = CMD_DATE_OFF); 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; }