/* prf_imsghandler.c */
/* V1.1 9-3-92 */

#include "prf.h"

long HandleImsg(struct prf_info *info)
{
 struct Gadget *gp;
 long rc = CMD_NEUTRAL;
 switch(info->imsg->Class)
 {
  case IDCMP_VANILLAKEY      :
       switch(info->imsg->Code)
       {
        case KEY_ABOUT_L     :
        case KEY_ABOUT_U     : rc = CMD_ABOUT;
                               break;
        case KEY_HEADL_L     :
        case KEY_HEADL_U     : rc = CMD_HEAD;
                               break;
        case KEY_FOOTL_L     :
        case KEY_FOOTL_U     : rc = CMD_FOOT;
                               break;
        case KEY_DATE_L      :
        case KEY_DATE_U      : (info->flags & FLAG_DATE) ?
                               (rc = CMD_DATE_OFF) : (rc = CMD_DATE_ON);
                               break;
        case KEY_TIME_L      :
        case KEY_TIME_U      : (info->flags & FLAG_TIME) ?
                               (rc = CMD_TIME_OFF) : (rc = CMD_TIME_ON);
                               break;
        case KEY_NAME_L      :
        case KEY_NAME_U      : (info->flags & FLAG_FILE) ?
                               (rc = CMD_NAME_OFF) : (rc = CMD_NAME_ON);
                               break;
        case KEY_PAGE_L      :
        case KEY_PAGE_U      : (info->flags & FLAG_PAGE) ?
                               (rc = CMD_PAGE_OFF) : (rc = CMD_PAGE_ON);
                               break;
        case KEY_LINE_L      :
        case KEY_LINE_U      : (info->flags & FLAG_LINE) ?
                               (rc = CMD_LINE_OFF) : (rc = CMD_LINE_ON);
                               break;
        case KEY_CRLF_L      :
        case KEY_CRLF_U      : (info->flags & FLAG_CRLF) ?
                               (rc = CMD_CRLF_OFF) : (rc = CMD_CRLF_ON);
                               break;
        case KEY_FF_L        :
        case KEY_FF_U        : (info->flags & FLAG_FF) ?
                               (rc = CMD_FF_OFF) : (rc = CMD_FF_ON);
                               break;
        case KEY_PRINT_L     :
        case KEY_PRINT_U     : rc = CMD_PRINT;
                               break;
        case KEY_PITCH6      : rc = CMD_PITCH6;
                               break;
        case KEY_PITCH8      : rc = CMD_PITCH8;
                               break;
        case KEY_CPI10       : rc = CMD_10CPI;
                               break;
        case KEY_CPI12       : rc = CMD_12CPI;
                               break;
        case KEY_CPI15       : rc = CMD_15CPI;
                               break;
        case KEY_OPENPWD_L   :
        case KEY_OPENPWD_U   : rc = CMD_OPENPWD;
                               break;
        case KEY_QUIT_L      :
        case KEY_QUIT_U      : rc = CMD_QUIT;
                               break;
        case KEY_FILEREQ_L   :
        case KEY_FILEREQ_U   : rc = CMD_FILEREQ;
                               break;
        case KEY_REMOVE_L    :
        case KEY_REMOVE_U    : rc = CMD_REMOVE;
                               break;

        default              : break;
       }
       break;
  case IDCMP_CLOSEWINDOW     : if(info->imsg->IDCMPWindow == info->Pwd)
                                 rc = CMD_CLOSEPWD;
                               else
                                 rc = CMD_QUIT;
                               break;

  case IDCMP_GADGETDOWN      :
       gp = (struct Gadget *)info->imsg->IAddress;
       switch(gp->GadgetID)
       {
        case GD_Quality      :
             rc = (info->imsg->Code == 0) ? CMD_DRAFT : CMD_LQ;
             break;
        case GD_Pitch      :
             rc = (info->imsg->Code == 0) ? CMD_PITCH6 : CMD_PITCH8;
             break;
        case GD_cpi      :
             rc = (info->imsg->Code == 0) ? CMD_10CPI :
                  (info->imsg->Code == 1) ? CMD_12CPI : CMD_15CPI;
        default: break;
       }
       break;
  case IDCMP_GADGETUP        :
       gp = (struct Gadget *)info->imsg->IAddress;
       switch(gp->GadgetID)
       {
        case GD_Saveprefs    : rc = CMD_SAVEPREFS;
                               break;
        case GD_Linesperpage : rc = CMD_LINES;
                               break;
        case GD_Rmargin      : rc = CMD_RMARGIN;
                               break;
        case GD_Lmargin      : rc = CMD_LMARGIN;
                               break;
        case GD_PwdButton    : rc = CMD_OPENPWD;
                               break;
        case GD_quit         : rc = CMD_QUIT;
                               break;
        case GD_Gadget11     : rc = CMD_STR_INSERT;
                               break;
        case GD_Filereq      : rc = CMD_FILEREQ;
                               break;
        case GD_Remove       : rc = CMD_REMOVE;
                               break;
        case GD_About        : rc = CMD_ABOUT ;
                               break;
        case GD_Headline     : rc = CMD_HEADL ;
                               break;
        case GD_Footline     : rc = CMD_FOOTL ;
                               break;
        case GD_Date         : (info->flags & FLAG_DATE) ?
                               (rc = CMD_DATE_OFF) : (rc = CMD_DATE_ON);
                               break;
        case GD_Time         : (info->flags & FLAG_TIME) ?
                               (rc = CMD_TIME_OFF) : (rc = CMD_TIME_ON);
                               break;
        case GD_Filename     : (info->flags & FLAG_FILE) ?
                               (rc = CMD_NAME_OFF) : (rc = CMD_NAME_ON);
                               break;
        case GD_Pagenumber   : (info->flags & FLAG_PAGE) ?
                               (rc = CMD_PAGE_OFF) : (rc = CMD_PAGE_ON);
                               break;
        case GD_Linenumber   : (info->flags & FLAG_LINE) ?
                               (rc = CMD_LINE_OFF) : (rc = CMD_LINE_ON);
                               break;
        case GD_CRLF         : (info->flags & FLAG_CRLF) ?
                               (rc = CMD_CRLF_OFF) : (rc = CMD_CRLF_ON);
                               break;
        case GD_FF           : (info->flags & FLAG_FF) ?
                               (rc = CMD_FF_OFF) : (rc = CMD_FF_ON);
                               break;
        case GD_PPrint       :
        case GD_Print        : rc = CMD_PRINT;
                               break;
        default              : break;
       }
       break;
  default                    : break;
 }
 return (rc);
}

