/* prf_saveprefs.c */
/* V091 9-3-92 */

#include "prf.h"

UWORD chip saveprefsiconI1Data[] =
{
/* Plane 0 */
    0x0000,0x0000,0x0000,0x7FFF,0xFFFF,0xFFFC,0x7FE0,0x0000,
    0x07FC,0x7FE4,0x4688,0x07FC,0x7FE0,0x0000,0x07FC,0x7FE7,
    0xF580,0x07FC,0x7FE0,0x0000,0x07FC,0x7FE7,0xFFFD,0x87FC,
    0x7FE6,0x0000,0x07FC,0x7FE3,0x7F00,0x07FC,0x7FFF,0xFFFF,
    0xFFFC,0x7000,0x0000,0x000C,0x77FF,0xFFFF,0xFFEC,0x77FF,
    0xFFFF,0xB6EC,0x77FF,0xFFFF,0xFFEC,0x77FF,0xFFFF,0xFFEC,
    0x7000,0x0000,0x000C,0x7FFF,0xFFFF,0xFFFC,0x7FF0,0x3FFE,
    0x7FFC,0x7FFB,0x9FFD,0xFFFC,0x7FFB,0xDFFD,0xFFFC,0x7FFB,
    0x8998,0xC7FC,0x7FF8,0x336D,0xB7FC,0x7FFB,0xF70D,0x9FFC,
    0x7FFB,0xF77D,0xE7FC,0x7FFB,0xF735,0xB7FC,0x7FF1,0xE38D,
    0x8FFC,0x7FFF,0xFFFF,0xFFFC,0x0000,0x0000,0x0000,
/* Plane 1 */
    0xFFFF,0xFFFF,0xFFFE,0xFFFF,0xFFFF,0xFFFE,0xFFFF,0xFFFF,
    0xFFFE,0xFFFB,0xB977,0xFFFE,0xFFFF,0xFFFF,0xFFFE,0xFFF8,
    0x0A7F,0xFFFE,0xFFFF,0xFFFF,0xFFFE,0xFFF8,0x0002,0x7FFE,
    0xFFF9,0xFFFF,0xFFFE,0xFFFC,0x80FF,0xFFFE,0xFFE0,0x0000,
    0x03FE,0xFFFF,0xFFFF,0xFFFE,0xF800,0x0000,0x001E,0xF800,
    0x0000,0x491E,0xF800,0x0000,0x001E,0xF800,0x0000,0x001E,
    0xFFFF,0xFFFF,0xFFFE,0xFFFF,0xFFFF,0xFFFE,0xFFFF,0xFFFF,
    0xFFFE,0xFFFF,0xFFFF,0xFFFE,0xFFFF,0xFFFF,0xFFFE,0xFFFF,
    0xFFFF,0xFFFE,0xFFFF,0xFFFF,0xFFFE,0xFFFF,0xFFFF,0xFFFE,
    0xFFFF,0xFFFF,0xFFFE,0xFFFF,0xFFFF,0xFFFE,0xFFFF,0xFFFF,
    0xFFFE,0xFFFF,0xFFFF,0xFFFE,0xFFFF,0xFFFF,0xFFFE,
};

struct Image saveprefsiconI1 =
{
    0, 0,                       /* Upper left corner */
    47, 29, 2,                  /* Width, Height, Depth */
    saveprefsiconI1Data,                /* Image data */
    0x0003, 0x0000,             /* PlanePick, PlaneOnOff */
    NULL                        /* Next image */
};

UBYTE *saveprefsimageTools[] =
{
    "CONSOLE=con:0/0/100/100/PrintFiles/AUTO",
    "DONOTWAIT",
    NULL
};

struct DiskObject saveprefsicon =
{
    WB_DISKMAGIC,               /* Magic Number */
    WB_DISKVERSION,             /* Version */
    {                           /* Embedded Gadget Structure */
        NULL,                   /* Next Gadget Pointer */
        0, 0, 47, 30,           /* Left,Top,Width,Height */
        GADGIMAGE | GADGBACKFILL,       /* Flags */
        RELVERIFY,              /* Activation Flags */
        BOOLGADGET,             /* Gadget Type */
        (APTR)&saveprefsiconI1, /* Render Image */
        NULL,                   /* Select Image */
        NULL,                   /* Gadget Text */
        NULL,                   /* Mutual Exclude */
        NULL,                   /* Special Info */
        0,                      /* Gadget ID */
        NULL,                   /* User Data */
    },
    WBPROJECT,                  /* Icon Type */
    (char *)"SYS:rexxc/rx",     /* Default Tool */
    saveprefsimageTools,        /* Tool Type Array */
    NO_ICON_POSITION,           /* Current X */
    NO_ICON_POSITION,           /* Current Y */
    NULL,                       /* Drawer Structure */
    NULL,                       /* Tool Window */
    0                           /* Stack Size */
};


struct st
       {
        UBYTE *line;
        UBYTE *comment;
       };

static struct st start_text[] =
       {
        START_L1,COMMENT_L1,
        START_L2,COMMENT_L2,
        START_L3,COMMENT_L3,
        START_L4,COMMENT_L4,
        START_L5,COMMENT_L5,
        START_L6,COMMENT_L6,
        NULL,NULL,
       };

void  __regargs SavePreferences(struct prf_info *info,UBYTE *name)
{
 FILE *prefs;
 UBYTE filename[STR_SIZE];
 UBYTE *sp = "             ";
 struct FileNameNode *n;
 strcpy(sp,"-CFWSRPIL");
 if(name) strcpy(filename,name);
  else Prf_SavePrefs(info,filename);
 if(info->Swd)
 {
  SwdTags[0].ti_Data = (ULONG)info->Swd->LeftEdge;
  SwdTags[1].ti_Data = (ULONG)info->Swd->TopEdge;
 }
 if(*filename)
 {
  if(prefs = fopen(filename,"w"))
  {
   fprintf(prefs,T_PREFSHEADER);
   if(info->flags.sp_start)
   {
    long i = 0L;
    fprintf(prefs,("\n"));
    while(start_text[i].line)
    {
     fprintf(prefs,"%s ",start_text[i].line);
     if(info->flags.sp_comment)
       fprintf(prefs,"%s ",start_text[i].comment);
     fprintf(prefs,("\n"));
     i++;
    }
    fprintf(prefs,("\n"));
   }
   else fprintf(prefs,T_PREFSHEADER1);
   fprintf(prefs,T_PREFSHEADER2);
   if(info->flags.sp_reset)
    if(info->flags.sp_comment)
            fprintf(prefs, T_RX_RESET RT_RX_RESET"\n");
    else    fprintf(prefs, T_RX_RESET "\n");
   if(info->flags.cpi == 1)
    if(info->flags.sp_comment)
           fprintf(prefs, T_RX_10CPI RT_RX_10CPI"\n");
    else   fprintf(prefs, T_RX_10CPI "\n");
   if(info->flags.cpi == 2)
    if(info->flags.sp_comment)
           fprintf(prefs, T_RX_12CPI RT_RX_12CPI "\n");
    else   fprintf(prefs, T_RX_12CPI  "\n");
   if(info->flags.cpi == 3)
    if(info->flags.sp_comment)
           fprintf(prefs, T_RX_15CPI RT_RX_15CPI "\n");
    else   fprintf(prefs, T_RX_15CPI  "\n");
   if(info->flags.draft)
     if(info->flags.sp_comment)
           fprintf(prefs, T_RX_DRAFT RT_RX_DRAFT "\n");
     else  fprintf(prefs, T_RX_DRAFT  "\n");
   if(info->flags.lq)
    if(info->flags.sp_comment)
           fprintf(prefs, T_RX_LQ RT_RX_LQ "\n");
    else   fprintf(prefs, T_RX_LQ "\n");
   if(info->flags.page)
   {
    if(info->flags.sp_comment)
           fprintf(prefs, T_RX_PAGE " " T_RX_ON " " RT_RX_PAGE "\n");
    else   fprintf(prefs, T_RX_PAGE " " T_RX_ON "\n");
   }
   else
   {
    if(info->flags.sp_comment)
           fprintf(prefs, T_RX_PAGE " " T_RX_OFF " " RT_RX_PAGE "\n");
    else   fprintf(prefs, T_RX_PAGE " " T_RX_OFF "\n");
   }
   if(info->flags.time)
   {
    if(info->flags.sp_comment)
          fprintf(prefs, T_RX_TIME " " T_RX_ON " " RT_RX_TIME "\n");
    else  fprintf(prefs, T_RX_TIME " " T_RX_ON "\n");
   }
   else
   {
    if(info->flags.sp_comment)
          fprintf(prefs, T_RX_TIME " " T_RX_OFF " " RT_RX_TIME "\n");
    else  fprintf(prefs, T_RX_TIME " " T_RX_OFF "\n");
   }
   if(info->flags.file)
   {
    if(info->flags.sp_comment)
           fprintf(prefs, T_RX_FILE " " T_RX_ON " " RT_RX_FILE "\n");
    else   fprintf(prefs, T_RX_FILE " " T_RX_ON "\n");
   }
   else
   {
    if(info->flags.sp_comment)
           fprintf(prefs, T_RX_FILE " " T_RX_OFF " " RT_RX_FILE "\n");
    else   fprintf(prefs, T_RX_FILE " " T_RX_OFF "\n");
   }
   if(info->flags.line)
   {
    if(info->flags.sp_comment)
           fprintf(prefs, T_RX_LINE " " T_RX_ON " " RT_RX_LINE "\n");
    else   fprintf(prefs, T_RX_LINE " " T_RX_ON  "\n");
   }
   else
   {
    if(info->flags.sp_comment)
           fprintf(prefs, T_RX_LINE " " T_RX_OFF " " RT_RX_LINE "\n");
    else   fprintf(prefs, T_RX_LINE " " T_RX_OFF "\n");
   }
   if(info->flags.date)
   {
    if(info->flags.sp_comment)
           fprintf(prefs, T_RX_DATE " " T_RX_ON " " RT_RX_DATE "\n");
    else   fprintf(prefs, T_RX_DATE " " T_RX_ON "\n");
   }
   else
   {
    if(info->flags.sp_comment)
           fprintf(prefs, T_RX_DATE " " T_RX_OFF " " RT_RX_DATE "\n");
    else   fprintf(prefs, T_RX_DATE " " T_RX_OFF "\n");
   }
   if(info->flags.pitch == 1)
    if(info->flags.sp_comment)
           fprintf(prefs, T_RX_PITCH6 RT_RX_PITCH6 "\n");
    else   fprintf(prefs, T_RX_PITCH6 "\n");
   if(info->flags.pitch == 2)
    if(info->flags.sp_comment)
           fprintf(prefs, T_RX_PITCH8 RT_RX_PITCH8 "\n");
    else   fprintf(prefs, T_RX_PITCH8 "\n");
   if(info->flags.ff)
   {
    if(info->flags.sp_comment)
           fprintf(prefs, T_RX_FF " " T_RX_ON " " RT_RX_FF "\n");
   else    fprintf(prefs, T_RX_FF " " T_RX_ON "\n");
   }
   else
   {
    if(info->flags.sp_comment)
           fprintf(prefs, T_RX_FF " " T_RX_OFF " " RT_RX_FF "\n");
   else    fprintf(prefs, T_RX_FF " " T_RX_OFF "\n");
   }
   if(info->flags.ffpage)
   {
    if(info->flags.sp_comment)
           fprintf(prefs, T_RX_FFPAGE " " T_RX_ON " " RT_RX_FFPAGE "\n");
    else   fprintf(prefs, T_RX_FFPAGE " " T_RX_ON "\n");
   }
   else
   {
    if(info->flags.sp_comment)
           fprintf(prefs, T_RX_FFPAGE " " T_RX_OFF " " RT_RX_FFPAGE "\n");
    else   fprintf(prefs, T_RX_FFPAGE " " T_RX_OFF "\n");
   }
    if(info->flags.sp_lines)
    {
     if(info->flags.sp_comment)
            fprintf(prefs, "%s '%s'" RT_RX_HEAD "\n", T_RX_HEAD,info->Headline);
     else   fprintf(prefs, "%s '%s'"  "\n", T_RX_HEAD,info->Headline);
     if(info->flags.sp_comment)
            fprintf(prefs, "%s '%s'" RT_RX_FOOT "\n", T_RX_FOOT,info->Footline);
     else   fprintf(prefs, "%s '%s'" "\n", T_RX_FOOT,info->Footline);
    }
    if(info->flags.sp_comment)
           fprintf(prefs, "%s %ld" RT_RX_LMARGIN "\n",T_RX_LMARGIN,info->Lmargin);
    else   fprintf(prefs, "%s %ld" "\n",T_RX_LMARGIN,info->Lmargin);
    if(info->flags.sp_comment)
           fprintf(prefs, "%s %ld" RT_RX_RMARGIN "\n",T_RX_RMARGIN,info->Rmargin);
    else   fprintf(prefs, "%s %ld"  "\n",T_RX_RMARGIN,info->Rmargin);
    if(info->flags.sp_comment)
           fprintf(prefs, "%s %ld" RT_RX_LINES "\n",T_RX_LINES,info->Lines);
    else   fprintf(prefs, "%s %ld"  "\n",T_RX_LINES,info->Lines);
    if(info->flags.sp_files)
    {
     n = (struct FileNameNode *)info->FileList.lh_Head;
     while(n && (n != (struct FileNameNode *)info->FileList.lh_Tail))
     {
      if(*(n->fnn_Name))
      {
       if(info->flags.sp_comment)
          fprintf(prefs,  "%s '%s'" RT_RX_INSFILE "\n", T_RX_INSFILE,n->fnn_Name);
       else fprintf(prefs,  "%s '%s'"  "\n", T_RX_INSFILE,n->fnn_Name);
      }
      n = (struct FileNameNode *)n->fnn_Node.ln_Succ;
     }
    }
   if(info->flags.sp_window)
   {
    if(info->flags.sp_comment)
    {
     fprintf(prefs, T_RX_OPENWINDOW " " T_RX_CONTROL " %ld %ld " RT_RX_OPENWINDOW "\n",SwdTags[0].ti_Data,SwdTags[1].ti_Data);
     fprintf(prefs, T_RX_OPENWINDOW " " T_RX_PREFS " %ld %ld " RT_RX_OPEN_P_WINDOW "\n",PwdTags[0].ti_Data,PwdTags[1].ti_Data);
    }
    else
    {
     fprintf(prefs, T_RX_OPENWINDOW " " T_RX_CONTROL " %ld %ld \n",SwdTags[0].ti_Data,SwdTags[1].ti_Data);
     fprintf(prefs, T_RX_OPENWINDOW " " T_RX_PREFS " %ld %ld \n",PwdTags[0].ti_Data,PwdTags[1].ti_Data);
    }
   }
   fprintf(prefs, T_RX_SAVEPREFS );
   if(info->flags.sp_comment)*(sp + 1) = tolower(*(sp+1));
   if(info->flags.sp_files)  *(sp + 2) = tolower(*(sp+2));
   if(info->flags.sp_window) *(sp + 3) = tolower(*(sp+3));
   if(info->flags.sp_start)  *(sp + 4) = tolower(*(sp+4));
   if(info->flags.sp_reset)  *(sp + 5) = tolower(*(sp+5));
   if(info->flags.sp_print)  *(sp + 6) = tolower(*(sp+6));
   if(info->flags.sp_icon)   *(sp + 7) = tolower(*(sp+7));
   if(info->flags.sp_lines)  *(sp + 8) = tolower(*(sp+8));
   fprintf(prefs," '%s' ",sp);
   if(info->flags.sp_comment)
   {
    fprintf(prefs," " RT_RX_SAVEPREFS "\n");
    if(*(sp + 1) == 'c') fprintf(prefs, RT_RX_SP_ON " " RT_RX_SP_COMMENT "\n");
     else fprintf(prefs,RT_RX_SP_OFF " " RT_RX_SP_COMMENT "\n");
    if(*(sp + 2) == 'f') fprintf(prefs, RT_RX_SP_ON " " RT_RX_SP_FILES "\n");
     else fprintf(prefs,RT_RX_SP_OFF " " RT_RX_SP_FILES "\n");
    if(*(sp + 3) == 'w') fprintf(prefs, RT_RX_SP_ON " " RT_RX_SP_WINDOW "\n");
     else fprintf(prefs,RT_RX_SP_OFF " " RT_RX_SP_WINDOW "\n");
    if(*(sp + 4) == 's') fprintf(prefs, RT_RX_SP_ON " " RT_RX_SP_START "\n");
     else fprintf(prefs,RT_RX_SP_OFF " " RT_RX_SP_START "\n");
    if(*(sp + 5) == 'r') fprintf(prefs, RT_RX_SP_ON " " RT_RX_SP_RESET "\n");
     else fprintf(prefs,RT_RX_SP_OFF " " RT_RX_SP_RESET "\n");
    if(*(sp + 6) == 'p') fprintf(prefs, RT_RX_SP_ON " " RT_RX_SP_PRINT "\n");
     else fprintf(prefs,RT_RX_SP_OFF " " RT_RX_SP_PRINT "\n");
    if(*(sp + 7) == 'i') fprintf(prefs, RT_RX_SP_ON " " RT_RX_SP_ICON "\n");
     else fprintf(prefs,RT_RX_SP_OFF " "  RT_RX_SP_ICON "\n");
    if(*(sp + 8) == 'l') fprintf(prefs, RT_RX_SP_ON " " RT_RX_SP_LINES "\n");
     else fprintf(prefs,RT_RX_SP_OFF " "  RT_RX_SP_LINES "\n");
   }
   else fprintf(prefs,"\n");
   fprintf(prefs, T_RX_ICON " ");
   switch(info->flags.icon)
   {
    case 0: if(info->flags.sp_comment)
            fprintf(prefs,T_RX_IGNORE " " RT_RX_ICON_NONE "\n");
             else
              fprintf(prefs,T_RX_IGNORE "\n");
            break;
    case 1: if(info->flags.sp_comment)
            fprintf(prefs,T_RX_CGFX " " RT_RX_ICON_IMAGE "\n");
             else
              fprintf(prefs,T_RX_CGFX "\n");
            break;
    case 2: if(info->flags.sp_comment)
            fprintf(prefs,T_RX_INFO " " RT_RX_ICON_TEXT "\n");
             else
              fprintf(prefs,T_RX_INFO "\n");
            break;
    case 3: if(info->flags.sp_comment)
            fprintf(prefs,T_RX_ALL " " RT_RX_ICON_ALL "\n");
             else
              fprintf(prefs,T_RX_ALL "\n");
            break;
   }
   fprintf(prefs, T_RX_PROG " ");
   switch(info->flags.prog)
   {
    case 0: if(info->flags.sp_comment)
            fprintf(prefs,T_RX_IGNORE " " RT_RX_PROG_NONE "\n");
             else
              fprintf(prefs,T_RX_IGNORE "\n");
            break;
    case 1: if(info->flags.sp_comment)
            fprintf(prefs,T_RX_INFO " " RT_RX_PROG_TEXT "\n");
             else
              fprintf(prefs,T_RX_INFO "\n");
            break;
    case 2: if(info->flags.sp_comment)
            fprintf(prefs,T_RX_GFX " " RT_RX_PROG_ICON "\n");
             else
              fprintf(prefs,T_RX_GFX "\n");
            break;
    case 3: if(info->flags.sp_comment)
            fprintf(prefs,T_RX_ALL " " RT_RX_PROG_ALL "\n");
             else
              fprintf(prefs,T_RX_ALL "\n");
            break;
   }
   if(info->flags.sp_print)
   {
    if(info->flags.sp_comment)
          fprintf(prefs, T_RX_PRINT RT_RX_PRINT "\n");
    else  fprintf(prefs, T_RX_PRINT  "\n");
   }
   fclose(prefs);
  }
 }
 if(info->flags.sp_icon)
 {
  if(*filename)PutDiskObject(filename,&saveprefsicon);
 }
}



