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 >
C/C++ Source or Header  |  1992-06-16  |  11KB  |  245 lines

  1. /* prf_rexx.c  */
  2. /* v091 28-5-92 */
  3.  
  4. #include "prf.h"
  5. #include <rexx/rexxio.h>
  6. #include <rexx/rxslib.h>
  7. #include <rexx/errors.h>
  8. #include <rexx/storage.h>
  9.  
  10. #pragma libcall RexxSysBase CreateArgString 7e 0802
  11. #pragma libcall RexxSysBase DeleteArgString 84 801
  12. #pragma libcall RexxSysBase LengthArgString 8a 801
  13. #pragma libcall RexxSysBase CreateRexxMsg   90 09803
  14. #pragma libcall RexxSysBase DeleteRexxMsg   96 801
  15.  
  16. UBYTE          __regargs *CreateArgString(UBYTE *string,unsigned long length);
  17. void           __regargs  DeleteArgString(UBYTE *argstring);
  18. ULONG          __regargs  LenghtArgString(UBYTE *argstring);
  19. struct RexxMsg __regargs *CreateRexxMsg(struct MsgPort *port, UBYTE *extension,UBYTE *host);
  20. void           __regargs  DeleteRexxMsg(struct RexxMsg *packet);
  21.  
  22. struct rexx_Cmd
  23.        {
  24.         UBYTE *rx_cmd;
  25.         ULONG  rx_code;
  26.        };
  27.  
  28. struct rexx_Cmd rexxCmd[] =
  29.        {
  30.         T_RX_RESET,CMD_RESETALL,
  31.         T_RX_CLEAR,CMD_CLEARLIST,
  32.         T_RX_OPENWINDOW,CMD_OPENWD,
  33.         T_RX_CLOSEWINDOW,CMD_CLOSEWD,
  34.         T_RX_INSFILE,CMD_STR_INSERT,
  35.         T_RX_REMFILE,CMD_REMOVE,
  36.         T_RX_PAGE,CMD_PAGE_ON,
  37.         T_RX_TIME,CMD_TIME_ON,
  38.         T_RX_FILE,CMD_NAME_ON,
  39.         T_RX_FF,CMD_FF_ON,
  40.         T_RX_FFPAGE,CMD_FFPAGE_ON,
  41.         T_RX_FOOT,CMD_FOOT,
  42.         T_RX_HEAD,CMD_HEAD,
  43.         T_RX_QUIT,CMD_RXQUIT,
  44.         T_RX_DATE,CMD_DATE_ON,
  45.         T_RX_LINE,CMD_LINE_ON,
  46.         T_RX_LINES,CMD_LINES,
  47.         T_RX_RMARGIN,CMD_RMARGIN,
  48.         T_RX_LMARGIN,CMD_LMARGIN,
  49.         T_RX_DRAFT,CMD_DRAFT,
  50.         T_RX_LQ,CMD_LQ,
  51.         T_RX_PITCH6,CMD_PITCH6,
  52.         T_RX_PITCH8,CMD_PITCH8,
  53.         T_RX_10CPI,CMD_10CPI,
  54.         T_RX_12CPI,CMD_12CPI,
  55.         T_RX_15CPI,CMD_15CPI,
  56.         T_RX_PRINT,CMD_PRINT,
  57.         T_RX_ICON,CMD_ICONINFO,
  58.         T_RX_PROG,CMD_PROGINFO,
  59.         T_RX_SAVEPREFS,CMD_SAVEPREFS,
  60.         T_RX_STATUS,CMD_STATUS,
  61.         T_RX_VERSION,CMD_VERSION,
  62.         NULL,0
  63.        };
  64.  
  65. char *RexxPortName   = RXPORTNAME;
  66.  
  67. void __regargs AttemptOpenRexx(struct prf_info *info)
  68. {
  69.  if(RexxSysBase = (struct RxsLib *)OpenLibrary(RXSNAME,0L))
  70.  {
  71.   Forbid();
  72.   if(FindPort(RexxPortName))
  73.   {
  74.    Permit();
  75.   }
  76.   else
  77.   {
  78.    if(info->rexxPort = CreatePort(RexxPortName,0L))Permit();
  79.   }
  80.  }
  81. }
  82.  
  83. void __regargs CloseRexx(struct prf_info *info)
  84. {
  85.  if(info->rexxPort)
  86.  {
  87.   DeletePort(info->rexxPort);
  88.  }
  89.  if(RexxSysBase) CloseLibrary((struct Library *)RexxSysBase);
  90. }
  91.  
  92. long __regargs HandleRexxMsg(struct prf_info *info)
  93. {
  94.  UBYTE     filename[STR_SIZE];
  95.  long rc = CMD_NEUTRAL;
  96.  long numarg;
  97.  long i,found,c;
  98.  UBYTE cmd_string[STR_SIZE],arg1[STR_SIZE],arg2[STR_SIZE],arg3[STR_SIZE];
  99.  numarg  =  (long)sscanf(info->rmsg->rm_Args[0],"%s %s %s %s",cmd_string,arg1,arg2,arg3);
  100.  c = RX_CMD_NEUTRAL;
  101.  if(!stricmp(arg1,T_RX_ON))c = RX_CMD_ON;
  102.  found = FALSE;i = 0L;
  103.  while(!found)
  104.  {
  105.   if(rexxCmd[i].rx_cmd == NULL){found = TRUE; i = -1L;}
  106.   else
  107.   {
  108.    if(!strnicmp(rexxCmd[i].rx_cmd,cmd_string,strlen(cmd_string)))
  109.    {
  110.     found = TRUE;
  111.     i=rexxCmd[i].rx_code;
  112.    }
  113.    else i++;
  114.   }
  115.  }
  116.  if(i != -1L)
  117.  {
  118.   switch(i)
  119.   {
  120.    case CMD_ICONINFO    : if(!stricmp(arg1,T_RX_ALL))rc = CMD_ICONALL;
  121.                            else if(!stricmp(arg1,T_RX_INFO))rc = CMD_ICONINFO;
  122.                             else if(!stricmp(arg1,T_RX_CGFX))rc = CMD_ICONGFX;
  123.                              else rc = CMD_ICONNONE;
  124.                           break;
  125.    case CMD_PROGINFO    : if(!stricmp(arg1,T_RX_ALL))rc = CMD_PROGALL;
  126.                            else if(!stricmp(arg1,T_RX_INFO))rc = CMD_PROGINFO;
  127.                             else if(!stricmp(arg1,T_RX_GFX))rc = CMD_PROGICON;
  128.                              else rc = CMD_PROGNONE;
  129.                           break;
  130.  
  131.    case CMD_STATUS      : if(info->rmsg->rm_Action & (1L << RXFB_RESULT))
  132.                           {
  133.                            if(info->flags.print)
  134.                             info->rmsg->rm_Result2 = (long)CreateArgString(T_RX_PMSG,strlen(T_RX_PMSG));
  135.                            else
  136.                             info->rmsg->rm_Result2 = (long)CreateArgString(T_RX_WMSG,strlen(T_RX_WMSG));
  137.                           }
  138.                           break;
  139.    case CMD_VERSION     : if(info->rmsg->rm_Action & (1L << RXFB_RESULT))
  140.                           {
  141.                            info->rmsg->rm_Result2 = (long)CreateArgString(RX_VERSION_STR,strlen(RX_VERSION_STR));
  142.                           }
  143.                           break;
  144.  
  145.    case CMD_SAVEPREFS   : if(*arg1 && *arg1 == '-')strcpy(arg2,arg1);
  146.                           strcpy(filename,arg1);
  147.                           if(*arg2 && *arg2 == '-')
  148.                           {
  149.                            if(strchr(arg2,'f'))info->flags.sp_files   = 1;
  150.                            if(strchr(arg2,'c'))info->flags.sp_comment = 1;
  151.                            if(strchr(arg2,'r'))info->flags.sp_reset   = 1;
  152.                            if(strchr(arg2,'w'))info->flags.sp_window  = 1;
  153.                            if(strchr(arg2,'p'))info->flags.sp_print   = 1;
  154.                            if(strchr(arg2,'s'))info->flags.sp_start   = 1;
  155.                            if(strchr(arg2,'i'))info->flags.sp_icon    = 1;
  156.                            if(strchr(arg2,'l'))info->flags.sp_lines   = 1;
  157.                            if(strchr(arg2,'F'))info->flags.sp_files   = 0;
  158.                            if(strchr(arg2,'C'))info->flags.sp_comment = 0;
  159.                            if(strchr(arg2,'R'))info->flags.sp_reset   = 0;
  160.                            if(strchr(arg2,'W'))info->flags.sp_window  = 0;
  161.                            if(strchr(arg2,'P'))info->flags.sp_print   = 0;
  162.                            if(strchr(arg2,'S'))info->flags.sp_start   = 0;
  163.                            if(strchr(arg2,'I'))info->flags.sp_icon    = 0;
  164.                            if(strchr(arg2,'L'))info->flags.sp_lines   = 0;
  165.                            if(info->Pwd)RefreshPwd(info);
  166.                           }
  167.                           if(*filename && *filename != '-') SavePreferences(info,filename);
  168.                           break;
  169.    case CMD_FOOT        : strcpy(info->Footline,info->rmsg->rm_Args[0]+1+strlen(T_RX_FOOT));
  170.                           if(info->Swd)GT_SetGadgetAttrs(info->SGadgets[GD_Footline],info->Swd,NULL,GTST_String,info->Footline,TAG_DONE);
  171.                           break;
  172.    case CMD_HEAD        : strcpy(info->Headline,info->rmsg->rm_Args[0]+1+strlen(T_RX_HEAD));
  173.                           if(info->Swd)GT_SetGadgetAttrs(info->SGadgets[GD_Headline],info->Swd,NULL,GTST_String,info->Headline,TAG_DONE);
  174.                           break;
  175.    case CMD_OPENWD      : if(!stricmp(arg1,T_RX_CONTROL))
  176.                           {
  177.                            if(*arg2)SwdTags[0].ti_Data = atol(arg2);
  178.                            if(*arg3)SwdTags[1].ti_Data = atol(arg3);
  179.                            if(SwdTags[0].ti_Data > (info->PubScr->Width  - SwdTags[2].ti_Data))
  180.                               SwdTags[0].ti_Data = info->PubScr->Width   - SwdTags[2].ti_Data;
  181.                            if(SwdTags[1].ti_Data > (info->PubScr->Height - SwdTags[3].ti_Data))
  182.                               SwdTags[1].ti_Data = info->PubScr->Height  - SwdTags[3].ti_Data;
  183.                            rc = CMD_OPENWD;
  184.                           }
  185.                           else
  186.                           if(!stricmp(arg1,T_RX_PREFS))
  187.                           {
  188.                            if(*arg2)PwdTags[0].ti_Data = atol(arg2);
  189.                            if(*arg3)PwdTags[1].ti_Data = atol(arg3);
  190.                            if(PwdTags[0].ti_Data > (info->PubScr->Width  - PwdTags[2].ti_Data))
  191.                               PwdTags[0].ti_Data = info->PubScr->Width   - PwdTags[2].ti_Data;
  192.                            if(PwdTags[1].ti_Data > (info->PubScr->Height - PwdTags[3].ti_Data))
  193.                               PwdTags[1].ti_Data = info->PubScr->Height  - PwdTags[3].ti_Data;
  194.                            rc = CMD_OPENPWD;
  195.                           }
  196.                           break;
  197.    case CMD_CLOSEWD     : if(!stricmp(arg1,T_RX_CONTROL)) rc = CMD_CLOSEWD;
  198.                            else if(!stricmp(arg1,T_RX_PREFS)) rc = CMD_CLOSEPWD;
  199.                           break;
  200.    case CMD_STR_INSERT  : if(*arg1)
  201.                           {
  202.                            long cmd = CMD_INSERTTAIL;
  203.                            info->Special1 = (APTR)arg1;
  204.                            info->Special2 = (APTR)&cmd;
  205.                            InsertName(info);
  206.                            info->Special1 = NULL;
  207.                            info->Special2 = NULL;
  208.                           }
  209.                           break;
  210.    case CMD_REMOVE      : info->Special1 = (APTR)arg1;
  211.                           RemoveName(info);
  212.                           info->Special1 = NULL;
  213.                           break;
  214.    case CMD_RMARGIN     : if(*arg1)info->Rmargin = atol(arg1);
  215.                           if(info->Pwd)GT_SetGadgetAttrs(info->PGadgets[GD_Rmargin - PGD],info->Pwd,NULL,GTIN_Number,info->Rmargin,TAG_DONE);
  216.                           break;
  217.    case CMD_LMARGIN     : if(*arg1)info->Lmargin = atol(arg1);
  218.                           if(info->Pwd)GT_SetGadgetAttrs(info->PGadgets[GD_Lmargin - PGD],info->Pwd,NULL,GTIN_Number,info->Lmargin,TAG_DONE);
  219.                           break;
  220.    case CMD_LINES       : if(*arg1)info->Lines = atol(arg1);
  221.                           if(info->Pwd)GT_SetGadgetAttrs(info->PGadgets[GD_Linesperpage - PGD],info->Pwd,NULL,GTIN_Number,info->Lines,TAG_DONE);
  222.                           break;
  223.    case CMD_PAGE_ON     : if(c == RX_CMD_ON) DoCommand(info,CMD_PAGE_ON) ; else DoCommand(info,CMD_PAGE_OFF); rc  = CMD_NEUTRAL; break;
  224.    case CMD_LINE_ON     : if(c == RX_CMD_ON) DoCommand(info,CMD_LINE_ON) ; else DoCommand(info,CMD_LINE_OFF); rc  = CMD_NEUTRAL; break;
  225.    case CMD_NAME_ON     : if(c == RX_CMD_ON) DoCommand(info,CMD_NAME_ON) ; else DoCommand(info,CMD_NAME_OFF); rc  = CMD_NEUTRAL; break;
  226.    case CMD_TIME_ON     : if(c == RX_CMD_ON) DoCommand(info,CMD_TIME_ON) ; else DoCommand(info,CMD_TIME_OFF); rc  = CMD_NEUTRAL; break;
  227.    case CMD_FF_ON       : if(c == RX_CMD_ON) DoCommand(info,CMD_FF_ON)   ; else DoCommand(info,CMD_FF_OFF); rc  = CMD_NEUTRAL; break;
  228.    case CMD_FFPAGE_ON   : if(c == RX_CMD_ON) DoCommand(info,CMD_FFPAGE_ON) ; else DoCommand(info,CMD_FFPAGE_OFF); rc  = CMD_NEUTRAL; break;
  229.    case CMD_DATE_ON     : if(c == RX_CMD_ON) DoCommand(info,CMD_DATE_ON) ; else DoCommand(info,CMD_DATE_OFF); rc  = CMD_NEUTRAL; break;
  230.    default              : rc = i;
  231.                           break;
  232.   }
  233.  }
  234.  else
  235.  {
  236.   rc = CMD_NEUTRAL;
  237.   if(info->rmsg->rm_Action & (1L << RXFB_RESULT))
  238.   {
  239.    info->rmsg->rm_Result2 = (long)CreateArgString(T_RX_ERROR,strlen(T_RX_ERROR));
  240.    info->rmsg->rm_Result1 = RX_ERRORLEVEL;
  241.   }
  242.  }
  243.  return rc;
  244. }
  245.