home *** CD-ROM | disk | FTP | other *** search
/ Gold Fish 3 / goldfish_volume_3.bin / files / text / tex / pastex / source / driver / show / amiga / config.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-06-06  |  19.0 KB  |  811 lines

  1. /*
  2. **    This file generated by localize 2.9 (AmigaDOS 2.1) from config.c
  3. */
  4. /** config.c **/
  5.  
  6.  
  7. #include "defines.h"
  8. #include <stdio.h>
  9. #include <ctype.h>
  10.  
  11. #ifdef AMIGA
  12. # include <fcntl.h>
  13. # include <intuition/intuition.h>
  14. # include "small_arp.h"
  15. #endif
  16.  
  17. #ifdef ANSI
  18. # include <stdlib.h>
  19. # include <string.h>
  20. #endif
  21.  
  22. #ifdef AZTEC_C
  23. #  include <functions.h>
  24. #endif
  25.  
  26. #include <clib/intuition_protos.h>
  27. #include <clib/dos_protos.h>
  28. #include <clib/graphics_protos.h>
  29. #include <pragmas/graphics_pragmas.h>
  30.  
  31. #include "globals.h"
  32. #include "globvars.h"
  33. #include "version.h"
  34.  
  35. #ifdef AMIGA
  36. # include "amscreen.h"
  37. #endif
  38.  
  39. #include "config.h"
  40.  
  41. #include "amscreen.i"
  42.  
  43. #if defined(APP_WINDOW)
  44. # include "app_win.i"
  45. #else
  46. # include "app_icon.i"
  47. #endif
  48.  
  49. #include "globals.i"
  50. #include "config.i"
  51. #include "dvihand.i"
  52.  
  53. /*
  54.  * Fuer die locale-Library:
  55.  *
  56.  * Hier duerfen *nur* die MSG_#? Nummern eingebunden werden!
  57.  * Achtung:
  58.  * Es muss/sollte 'multiple-include' erlaubt sein!
  59.  */
  60. #include "local.i"
  61.  
  62. #undef  CATCOMP_ARRAY
  63. #undef  CATCOMP_BLOCK
  64. #undef  CATCOMP_STRINGS
  65. #define CATCOMP_NUMBERS
  66. #include "localstr.h"
  67.  
  68.  
  69.  
  70. /* lokale Funktionen */
  71. static FILE *open_config_file            Args((int mode));
  72. static int  parse_line                Args((char *ptr));
  73. static int  readcontents            Args((FILE *config_fp));
  74. static void writecontents            Args((FILE *config_fp));
  75. #ifdef AMIGA
  76. static short what_keyword            Args((char **line));
  77. static char  *get_on_off            Args((int flag));
  78. #endif
  79.  
  80.  
  81.  
  82. static FILE *open_config_file(int mode)
  83. {
  84.   FILE *config_fp;
  85.   int modus;
  86.  
  87.   if (mode == 0) modus = MODE_READ;             /* read */
  88.   else modus = MODE_WRITE;                 /* write */
  89.  
  90.   config_fp = OpenConfigFile(CONFIG_NAME, modus);
  91.  
  92.   if (config_fp == NULL) {
  93.       Warning(MSG_CANT_OPEN_CONFIG, CONFIG_NAME);
  94.       return(NULL);
  95.   }
  96.  
  97.   if (mode == 0) {
  98.     Logging(MSG_LOAD_CONFIG, CONFIG_NAME);
  99.   }
  100.   else {
  101.     Logging(MSG_WRITE_CONFIG, CONFIG_NAME);
  102.   }
  103.  
  104.   return(config_fp);
  105. }
  106.  
  107.  
  108.  
  109. /* bekommt Pointer auf erstes Wort der Zeile, liefert Key-Nummer und    */
  110. /* Pointer auf naechstes Wort                        */
  111. /* wenn kein korrektes Keyword->line = keyword                */
  112. static short what_keyword(char **line)
  113. {
  114.   char *keyword, *rest;
  115.   short i;
  116.  
  117.   rest = keyword = *line;
  118.  
  119.   /* skip keyword */  
  120.   while (*rest != ' ' && *rest != '\t' && *rest != '\0') {
  121.     rest++;
  122.   }
  123.   /* skip blanks */
  124.   if (*rest != '\0') {
  125.     *rest = '\0';
  126.     rest++;
  127.     while (*rest == ' ' || *rest == '\t') {        /* skip blanks */
  128.       rest++;
  129.     }
  130.   }
  131.   *line = rest;
  132.  
  133.   for (i=0; i<NKEYS && stricmp(KeyTab[i].keyword,keyword); i++);
  134.   
  135.   if (i == NKEYS) {
  136.     *line = keyword;
  137.     return NR_NO_KEYWORD;
  138.   }
  139.   else {
  140.     return KeyTab[i].keynumber;
  141.   }
  142. }
  143.  
  144.  
  145. static int parse_line(char *ptr)
  146. {
  147.   short key;
  148.   long help;
  149.   char *hptr, *keyword_start;
  150.   int ret, on, onok;
  151.  
  152.   ret = 1;
  153.  
  154.   while (*ptr == ' ' || *ptr == '\t') {        /* skip blanks */
  155.     ptr++;
  156.   }
  157.   if (*ptr == '\0') return 1;    /* empty line - ok */
  158.  
  159.   if ((ptr[0] == 'f' || ptr[0] == 'F') && ptr[1] >= '0' && ptr[1] <= '9') {
  160.     /* function key assignment */
  161.     help = ptr[1] - '0' - 1;
  162.     if (ptr[0] == 'F') {
  163.       help += 10;
  164.     }
  165.     if (ptr[1] == '1' && ptr[2] == '0') {
  166.       help += 9;
  167.     }
  168.     while (*ptr != ' ' && *ptr != '\t' && *ptr != '\0') {
  169.       ptr++;
  170.     }
  171.     while (*ptr == ' ' || *ptr == '\t') {        /* skip blanks */
  172.       ptr++;
  173.     }
  174.     if (*ptr == '\0') {
  175.       Warning(MSG_NO_AREXX_FOR_FX,help);
  176.     }
  177.     else {
  178.       show_state.ftast[help] = strdup(ptr);
  179.     }
  180.   }
  181.   else {
  182.     keyword_start = ptr;
  183.     key = what_keyword(&ptr);
  184.  
  185.     if (key & 1) {
  186.       /* on/off Zeilen */
  187.       onok = TRUE;
  188.       if (!strnicmp(ptr,STR_ON,strlen(STR_ON))) {
  189.         on = TRUE;
  190.       }
  191.       else {
  192.     if (!strnicmp(ptr,STR_OFF,strlen(STR_OFF))) {
  193.       on = FALSE;
  194.     }
  195.     else {
  196.       ret = 0;
  197.       if (*ptr == '\0') {
  198.         Warning(MSG_NO_ON_OFF);
  199.       }
  200.       else {
  201.         Warning(MSG_WRONG_ON_OFF,ptr);
  202.       }
  203.       onok = FALSE;
  204.     }
  205.       }
  206.       if (onok) {
  207.         if (on) {
  208.           switch (key) {
  209.             case NR_SCR_BAR:    set_gadg;
  210.                 break;
  211.             case NR_LACE:    set_lace;
  212.                 break;
  213.             case NR_BEEP:    set_beep;
  214.                 break;
  215.             case NR_ESCEX:    set_escex;
  216.                 break;
  217.         case NR_IMENU:    set_imenu;
  218.                 break;
  219.             case NR_BIG_MENU:    set_bmenu;
  220.                 break;
  221.             case NR_USE_PHY:    set_usephy;
  222.                 break;
  223.         case NR_APPICON:
  224.             case NR_APP_WIN:    set_appwin;
  225.                 break;
  226.             case NR_OS_MENU:    unset_osmenu;
  227.                 break;
  228.             case NR_AUTO_AGAIN:    set_autoag;
  229.                 break;
  230.         case NR_USECOL4:    set_col4;
  231.                 break;
  232.         case NR_MIDMENU:    set_midmenu;
  233.                 break;
  234.         case NR_CLWBCOL:    set_clwbcol;
  235.                 break;
  236.         case NR_QUICKQUIT:    set_quickex;
  237.                 break;
  238.         case NR_BLINE:    set_dotbord;
  239.                 break;
  240.         case NR_OWN_SCREEN:    set_ownscr;
  241.                 break;
  242.         case NR_ALWBMFAST:    set_alwbmfast;
  243.                 break;
  244.         case NR_SMARTWIN:    set_smartwin;
  245.                 break;
  246.         case NR_BACKHOOK:    set_bhook;
  247.                 break;
  248.           }
  249.         }
  250.         else {
  251.           switch (key) {
  252.             case NR_SCR_BAR:    unset_gadg;
  253.                 break;
  254.             case NR_LACE:    unset_lace;
  255.                 break;
  256.             case NR_BEEP:    unset_beep;
  257.                 break;
  258.             case NR_ESCEX:    unset_escex;
  259.                 break;
  260.         case NR_IMENU:    unset_imenu;
  261.                 break;
  262.             case NR_BIG_MENU:    unset_bmenu;
  263.                 break;
  264.             case NR_USE_PHY:    unset_usephy;
  265.                 break;
  266.         case NR_APPICON:
  267.             case NR_APP_WIN:    unset_appwin;
  268.                 break;
  269.             case NR_OS_MENU:    set_osmenu;
  270.                 break;
  271.             case NR_AUTO_AGAIN: unset_autoag;
  272.                 break;
  273.         case NR_USECOL4:    unset_col4;
  274.                 break;
  275.         case NR_MIDMENU:    unset_midmenu;
  276.                 break;
  277.         case NR_CLWBCOL:    unset_clwbcol;
  278.                 break;
  279.         case NR_QUICKQUIT:    unset_quickex;
  280.                 break;
  281.         case NR_BLINE:    unset_dotbord;
  282.                 break;
  283.         case NR_OWN_SCREEN:    unset_ownscr;
  284.                 break;
  285.         case NR_ALWBMFAST:    unset_alwbmfast;
  286.                 break;
  287.         case NR_SMARTWIN:    unset_smartwin;
  288.                 break;
  289.         case NR_BACKHOOK:    unset_bhook;
  290.                 break;
  291.           }
  292.         }
  293.       }
  294.     }
  295.     else {
  296.       long i1, i2, i3;
  297.       long numi;
  298.     
  299.       /* weg mit den Spaces am rechten Rand */
  300.       hptr = ptr + strlen(ptr)-1;
  301.       while (isspace(*hptr)) hptr--;
  302.       *(hptr+1) = '\0';
  303.  
  304.       /* auf Verdacht mal drei Int's lesen */
  305.       numi = sscanf(ptr,"%ld,%ld,%ld",&i1, &i2, &i3);
  306.  
  307.       switch (key) {
  308.     case NR_NO_KEYWORD :
  309.         Warning(MSG_UNKNOWN_KEYWORD, keyword_start);
  310.         ret = 0;
  311.         break;
  312.     case NR_SCR_MODE :
  313.         if      (strnicmp("pal",ptr,3) == 0)        set_pal;
  314.         else if (strnicmp("ntsc",ptr,4) == 0)        set_ntsc;
  315.         else if (strnicmp("productivity",ptr,12) == 0)    set_prod;
  316.         else if (strnicmp("a2024",ptr,5) == 0)        set_a2024;
  317.         else if (strnicmp("workbench",ptr,5) == 0)    set_wbmode;
  318.         else if (strnicmp("default",ptr,5) == 0)    undef_scrmode;
  319.         else if (numi == 1 || sscanf(ptr, "%lx", &i1) == 1) {
  320.           /* es *muss* noch die gueltigkeit der ID getestet werden */
  321.           if (is_os2 && !ModeNotAvailable(i1)) {
  322.             set_numeric;
  323.             show_state.DisplayID = i1;
  324.           }
  325.           else {
  326.             Warning(MSG_UNKNOWN_MODEID, i1);
  327.             ret = 0;
  328.           }
  329.         }
  330.         else ret = 0;
  331.         break;
  332.     case NR_COLOR_0 :
  333.     case NR_COLOR_1 :
  334.     case NR_COLOR_2 :
  335.     case NR_COLOR_3 :
  336.         if (numi == 3) {
  337.           const long colR = i1;
  338.           const long colG = i2;
  339.           const long colB = i3;
  340.           if (0 <= colR && colR < 16 && 0 <= colG && colG < 16
  341.             && 0 <= colB && colB < 16) {
  342.             switch (key) {
  343.                 case NR_COLOR_0:
  344.                 current_col.red_0   = colR;
  345.                 current_col.green_0 = colG;
  346.                 current_col.blue_0  = colB;
  347.                 break;
  348.             case NR_COLOR_1:
  349.                 current_col.red_1   = colR;
  350.                 current_col.green_1 = colG;
  351.                 current_col.blue_1  = colB;
  352.                 break;
  353.                 case NR_COLOR_2:
  354.                 current_col.red_2   = colR;
  355.                 current_col.green_2 = colG;
  356.                 current_col.blue_2  = colB;
  357.                 break;
  358.             case NR_COLOR_3:
  359.                 current_col.red_3   = colR;
  360.                 current_col.green_3 = colG;
  361.                 current_col.blue_3  = colB;
  362.                 break;
  363.             }
  364.           }
  365.           else {
  366.             Warning(MSG_ILLEGAL_COLOR);
  367.             ret = 0;
  368.           }
  369.         }
  370.         else {
  371.           Warning(MSG_WRONG_COLOR_PARAMS);
  372.           ret = 0;
  373.         }
  374.         break;
  375.     case NR_BASE_DPI :
  376.         if (numi == 1) {
  377.           resolution      = i1;    /* global variable */
  378.           hconvresolution = i1;
  379.           vconvresolution = i1;
  380.         }
  381.         else {
  382.           Warning(MSG_WRONG_DEF_RESO);
  383.           ret = 0;
  384.         }
  385.         break;
  386.     case NR_DPI_MENU :
  387.         help = 0;
  388.         while (help < 10 && (hptr = strchr(ptr,',')) != NULL) {
  389.           *hptr = '\0';
  390.           show_state.mres[help] = (unsigned short)atoi(ptr);
  391.           if (show_state.mres[help] == 0 || show_state.mres[help] > 2000) {
  392.             Warning(MSG_WRONG_VAL_IN_RES_MENU);
  393.             //help = 0;
  394.             return 0;
  395.           }
  396.           help++;
  397.           ptr = hptr+1;
  398.         }
  399.         if (help < 10) {
  400.           show_state.mres[help] = (unsigned short)atoi(ptr);
  401.           if (show_state.mres[help] == 0 || show_state.mres[help] > 2000) {
  402.             Warning(MSG_WRONG_VAL_IN_RES_MENU);
  403.             //help = 0;
  404.             return 0;
  405.           }
  406.           help++;
  407.         }
  408.  
  409.         if (help > 0) {
  410.           show_state.menu_res_lines = help;
  411.         }
  412.         break;
  413.     case NR_UNIT :
  414.         if (strnicmp("cm",ptr,2) == 0) {
  415.           set_unit_cm;
  416.         }
  417.         else if (strnicmp("in",ptr,2) == 0) {
  418.           set_unit_in;
  419.         }
  420.         else if (strnicmp("pt",ptr,2) == 0) {
  421.           set_unit_pt;
  422.         }
  423.         else  {
  424.           Warning(MSG_WRONG_UNITS,ptr);
  425.           ret = 0;
  426.         }
  427.         break;
  428.     case NR_APP_NAME :
  429.         if (hptr = strdup(ptr)) app_icon_name = hptr;    /* string ok, take it */
  430.         /* man haette vielleicht testen sollen, ob das Icon-File existiert */
  431.         break;
  432.     case NR_APPICONPOS :
  433.         if (numi == 2) {
  434.           show_state.AppIconX = i1;
  435.           show_state.AppIconY = i2;
  436.         }
  437.         else {
  438.           Warning(MSG_WRONG_APPICON_POS,ptr);
  439.           ret = 0;
  440.         }
  441.         break;
  442.     case NR_SCREEN_SIZE :
  443.         if (numi == 2) {
  444.           const long scr_x = i1;
  445.           const long scr_y = i2;
  446.           if (scr_x != 0 && scr_y != 0 && 
  447.               (scr_x > 5000 || scr_x > 5000 || 
  448.                scr_x < 540 || scr_y < 200)) {
  449.             Warning(MSG_WRONG_MIN_SCREEN_SIZE,ptr);
  450.             ret = 0;
  451.           }
  452.           else {
  453.             show_state.screen_size_x = scr_x;
  454.             show_state.screen_size_y = scr_y;
  455.           }
  456.         }
  457.         else {
  458.           Warning(MSG_WRONG_SCREEN_SIZE,ptr);
  459.           ret = 0;
  460.         }
  461.         break;
  462.     case NR_COMMAND :
  463.         show_state.command = strdup(ptr);
  464.         break;
  465.     case NR_AREXXSTART :
  466.         show_state.arexxstart = strdup(ptr);
  467.         break;
  468.     case NR_MONITOR_SIZE :
  469.         if (numi == 2) {
  470.           show_state.monitor_size_x = i1;
  471.           show_state.monitor_size_y = i2;
  472.         }
  473.         else {
  474.           Warning(MSG_WRONG_MONITOR_SIZE, ptr);
  475.           ret = 0;
  476.         }
  477.         break;
  478.     case NR_PUBSCR_NAME :
  479.         strncpy(PubScreenName, ptr, MAXPUBSCREENNAME);
  480.         break;
  481.     case NR_MY_PUBSCR_NAME :
  482.         strncpy(MyPubScreenName, ptr, MAXPUBSCREENNAME);
  483.         break;
  484.     case NR_WINDOW_POS :
  485.         if (numi == 2) {
  486.           show_state.window_pos_x = i1;
  487.           show_state.window_pos_y = i2;
  488.         }
  489.         else {
  490.           Warning(MSG_WRONG_WIN_POS, ptr);
  491.           ret = 0;
  492.         }
  493.         break;
  494.     case NR_WINDOW_POS_OWN_SCR :
  495.         if (numi == 2) {
  496.           show_state.window_pos_own_scr_x = i1;
  497.           show_state.window_pos_own_scr_y = i2;
  498.         }
  499.         else {
  500.           Warning(MSG_WRONG_WIN_POS, ptr);
  501.           ret = 0;
  502.         }
  503.         break;
  504.     case NR_WINDOW_SIZE :
  505.         if (numi == 2) {
  506.           show_state.window_size_x = i1;
  507.           show_state.window_size_y = i2;
  508.         }
  509.         else {
  510.           Warning(MSG_WRONG_WIN_SIZE, ptr);
  511.           ret = 0;
  512.         }
  513.         break;
  514.     case NR_MAXDVIBUF_SIZE :
  515.         if (numi == 1) {
  516.           MaxDviBufSize = i1;
  517.         }
  518.         else {
  519.           Warning(MSG_WRONG_MAX_DVIBUF_SIZE, ptr);
  520.           ret = 0;
  521.         }
  522.         break;
  523.     case NR_APEN :
  524.         if (numi == 1 && i1 >= 0 && i1 < 256) {
  525.           show_state.APen = i1;
  526.         }
  527.         else {
  528.           Warning(MSG_WRONG_PEN, ptr);
  529.           ret = 0;
  530.         }
  531.         break;
  532.     case NR_BPEN :
  533.         if (numi == 1 && i1 >= 0 && i1 < 256) {
  534.           show_state.BPen = i1;
  535.         }
  536.         else {
  537.           Warning(MSG_WRONG_PEN, ptr);
  538.           ret = 0;
  539.         }
  540.         break;
  541.       }    /* switch */
  542.     }    /* else on/off */
  543.   }    /* else F-tast */
  544.  
  545.   return ret;
  546. }
  547.  
  548.  
  549.  
  550. static int readcontents(FILE *config_fp)
  551. {
  552.   char line[150], *ptr, *p;
  553.   int ret, rret;
  554.   int i;
  555.   
  556.   /* initialize f-tast array */
  557.   for (i=0; i<20; i++) {
  558.     show_state.ftast[i] = NULL;        /* not used */
  559.   }
  560.  
  561.   rret = 1;    /* keine Probleme */
  562.  
  563.   do {
  564.     ptr = fgets(line,149,config_fp);
  565.     if (ptr != NULL) {
  566.       p = strchr(ptr,';');
  567.       if (p != NULL) {        /* cut comment */
  568.         *p = '\0';
  569.       }
  570.       else {
  571.         p = strrchr(ptr,'\n');
  572.         if (p != NULL) {
  573.           *p = '\0';
  574.         }
  575.       }
  576.       ret = parse_line(ptr);
  577.       if (ret != 1) rret = 0;    /* return-code sichern */
  578.     }
  579.   } while (ptr != NULL);
  580.  
  581.   return rret;
  582. }
  583.  
  584.  
  585. static char *get_on_off(int flag)
  586. {
  587.   if (flag) {
  588.     return STR_ON;
  589.   }
  590.   else {
  591.     return STR_OFF;
  592.   }
  593. }
  594.  
  595.  
  596. static void writecontents(FILE *config_fp)
  597. {
  598.   int i;
  599.  
  600.   fprintf(config_fp,GetTeXString(MSG_CONFIG_HEADER), SHOWDVI_VERSION);
  601.   fprintf(config_fp,"%s\t\t\t%d,%d,%d\t\t\t; %s\n",
  602.         STR_COLOR_0,current_col.red_0,current_col.green_0,current_col.blue_0,
  603.         GetTeXString(MSG_CONFIG_RGB_BACK));
  604.   fprintf(config_fp,"%s\t\t\t%d,%d,%d\t\t\t; %s\n",
  605.         STR_COLOR_1,current_col.red_1,current_col.green_1,current_col.blue_1,
  606.         GetTeXString(MSG_CONFIG_RGB_FORE));
  607.   fprintf(config_fp,"%s\t\t\t%d,%d,%d\t\t\t; %s\n",
  608.         STR_COLOR_2,current_col.red_2,current_col.green_2,current_col.blue_2,
  609.         GetTeXString(MSG_CONFIG_RGB_2));
  610.   fprintf(config_fp,"%s\t\t\t%d,%d,%d\t\t\t; %s\n",
  611.         STR_COLOR_3,current_col.red_3,current_col.green_3,current_col.blue_3,
  612.         GetTeXString(MSG_CONFIG_RGB_3));
  613.  
  614.   fprintf(config_fp,"%s\t\t%s\t\t\t; %s\n",
  615.         STR_SCR_BAR,get_on_off(is_gadg),GetTeXString(MSG_CONFIG_SCROLL_STATE));
  616.  
  617.   fprintf(config_fp,"%s\t\t%s\t\t\t; %s\n",
  618.         STR_BLINE,get_on_off(is_dotbord),GetTeXString(MSG_CONFIG_BORDER_LINE));
  619.  
  620.   fprintf(config_fp,"%s\t\t%s\t\t\t; %s\n",
  621.         STR_LACE,get_on_off(is_lace),GetTeXString(MSG_CONFIG_LACE));
  622.  
  623.   fprintf(config_fp,"%s\t\t\t%s\t\t\t; %s\n",
  624.         STR_BEEP,get_on_off(is_beep),GetTeXString(MSG_CONFIG_BEEP));
  625.  
  626.   fprintf(config_fp,"%s\t\t%s\t\t\t; %s\n",
  627.         STR_ESCEX,get_on_off(is_escex),GetTeXString(MSG_CONFIG_ESC));
  628.  
  629.   fprintf(config_fp,"%s\t\t%s\t\t\t; %s\n",
  630.         STR_QUICKQUIT,get_on_off(is_quickex),GetTeXString(MSG_CONFIG_QUICK_EXIT));
  631.  
  632.   fprintf(config_fp,"%s\t\t%s\t\t\t; %s\n",
  633.         STR_OS_MENU,get_on_off(!is_osmenu),GetTeXString(MSG_CONFIG_POPUP));
  634.  
  635.   fprintf(config_fp,"%s\t\t%s\t\t\t; %s\n",
  636.         STR_IMENU,get_on_off(is_imenu),GetTeXString(MSG_CONFIG_INT_POPUP));
  637.  
  638.   fprintf(config_fp,"%s\t\t%s\t\t\t; %s\n",
  639.         STR_BIG_MENU,get_on_off(is_bmenu),GetTeXString(MSG_CONFIG_BIG_POPUP));
  640.  
  641.   fprintf(config_fp,"%s\t\t%s\t\t\t; %s\n",
  642.         STR_MIDMENU,get_on_off(is_midmenu),GetTeXString(MSG_CONFIG_MIDDLE_POPUP));
  643.  
  644.   fprintf(config_fp,"%s\t%s\t\t\t; %s\n",
  645.         STR_USE_PHY,get_on_off(is_usephy),GetTeXString(MSG_CONFIG_USEPHY));
  646.  
  647.   fprintf(config_fp,"%s\t\t%s\t\t\t; %s\n",
  648.         STR_AUTO_AGAIN,get_on_off(is_autoag),GetTeXString(MSG_CONFIG_ACT_LOAD_AGAIN));
  649.  
  650.   fprintf(config_fp,"%s\t\t%s\t\t\t; %s\n",
  651.         STR_OWN_SCREEN,get_on_off(is_ownscr),GetTeXString(MSG_CONFIG_USE_OWN_SCR));
  652.  
  653.   fprintf(config_fp,"%s\t%s\t\t; %s\n",
  654.         STR_MY_PUBSCR_NAME,MyPubScreenName,GetTeXString(MSG_CONFIG_SHOW_PUBSCR_NAME));
  655.  
  656.   fprintf(config_fp,"%s\t%s\t\t; %s\n",
  657.         STR_PUBSCR_NAME,PubScreenName,GetTeXString(MSG_CONFIG_DEF_PUBSCR_NAME));
  658.  
  659.   fprintf(config_fp,"%s\t\t%ld, %ld\t\t\t; %s\n",
  660.         STR_WINDOW_POS, win2->LeftEdge, win2->TopEdge,
  661.         GetTeXString(MSG_CONFIG_WIN_POS));
  662.  
  663.   fprintf(config_fp,"%s\t\t%ld, %ld\t\t\t; %s\n",
  664.         STR_WINDOW_SIZE,
  665.         show_state.window_size_x,
  666.         show_state.window_size_y,
  667.         GetTeXString(MSG_CONFIG_WIN_SIZE));
  668.  
  669.   fprintf(config_fp,"%s\t%ld, %ld\t\t\t; %s\n",
  670.         STR_WINDOW_POS_OWN_SCR, show_state.window_pos_own_scr_x, show_state.window_pos_own_scr_y,
  671.         GetTeXString(MSG_CONFIG_SCR_POS));
  672.  
  673.   fprintf(config_fp,"%s\t%ld, %ld\t\t\t; %s\n",
  674.         STR_WINDOW_SIZE_OWN_SCR,
  675.         show_state.window_size_own_scr_x,
  676.         show_state.window_size_own_scr_y,
  677.         GetTeXString(MSG_CONFIG_SHOW_WIN_SIZE));
  678.  
  679.   fprintf(config_fp,"%s\t%s\t\t\t; %s\n",
  680.         STR_BACKHOOK,get_on_off(is_bhook),GetTeXString(MSG_CONFIG_BACK_HOOK));
  681.  
  682.   fprintf(config_fp,"%s\t\t%s\t\t\t; %s\n",
  683.         STR_USECOL4,get_on_off(is_col4),GetTeXString(MSG_CONFIG_4_COL_SCR));
  684.  
  685.   fprintf(config_fp,"%s\t\t%s\t\t\t; %s\n",
  686.         STR_CLWBCOL,get_on_off(is_clwbcol),GetTeXString(MSG_CONFIG_USE_WB_COLS));
  687.   
  688.   fprintf(config_fp,"%s\t\t\t%s\t\t\t; %s\n",STR_UNIT,
  689.         (is_unit_in) ? "in" : ((is_unit_cm) ? "cm" : "pt"),GetTeXString(MSG_CONFIG_UNIT));
  690.  
  691.   fprintf(config_fp,"%s\t%s\t\t\t; %s\n",
  692.         STR_APPICON,get_on_off(is_appwin),GetTeXString(MSG_CONFIG_APP_ICON));
  693.  
  694.   fprintf(config_fp,"%s\t\t%s\t; %s\n",
  695.         STR_APP_NAME,app_icon_name,GetTeXString(MSG_CONFIG_INFO_APP_ICON));
  696.  
  697.   fprintf(config_fp,"%s\t\t%d, %d\t\t\t; %s\n",
  698.         STR_APPICONPOS,show_state.AppIconX,show_state.AppIconY,
  699.         GetTeXString(MSG_CONFIG_APP_ICON_POS));
  700.  
  701.   fprintf(config_fp,"%s\t\t%s\t; %s\n",
  702.         STR_COMMAND, show_state.command, GetTeXString(MSG_CONIFG_SCRIPT_FILE));
  703.  
  704.   fprintf(config_fp,"%s\t%s\t; %s\n",
  705.         STR_AREXXSTART, show_state.arexxstart, GetTeXString(MSG_CONFIG_TEX_SERVER));
  706.  
  707.   fprintf(config_fp,"%s\t\t%d, %d\t\t\t; %s\n",
  708.         STR_SCREEN_SIZE,show_state.screen_size_x,show_state.screen_size_y,
  709.         GetTeXString(MSG_CONFIG_SCR_SIZE));
  710.  
  711.   fprintf(config_fp, "%s\t\t", STR_SCR_MODE);
  712.   if (is_numeric) {
  713.     fprintf(config_fp,"%ld", show_state.DisplayID);
  714.   }
  715.   else {
  716.     fprintf(config_fp,"%s", (is_pal) ? "pal" : ((is_ntsc) ? "ntsc" : 
  717.             ((is_prod) ? "productivity": ((is_a2024) ? "a2024" : 
  718.             ((is_wbmode) ? "workbench" : "default")))));
  719.   }
  720.   fprintf(config_fp,"\t\t\t; %s\n", GetTeXString(MSG_CONFIG_SCR_MODE));
  721.  
  722.   fprintf(config_fp,"%s\t\t%d, %d\t\t\t; %s\n",
  723.         STR_MONITOR_SIZE, show_state.monitor_size_x,  show_state.monitor_size_y, 
  724.         GetTeXString(MSG_CONFIG_MONITOR_SIZE));
  725.  
  726.   fprintf(config_fp,"%s\t%s\t\t\t; %s\n",
  727.         STR_ALWBMFAST, get_on_off(is_alwbmfast), GetTeXString(MSG_CONFIG_ALWBMFAST));
  728.  
  729.   fprintf(config_fp,"%s\t%s\t\t\t; %s\n",
  730.         STR_SMARTWIN, get_on_off(is_smartwin), GetTeXString(MSG_CONFIG_SMARTWIN));
  731.  
  732.   fprintf(config_fp,"%s\t%d\t\t\t; %s\n",
  733.         STR_MAXDVIBUF_SIZE, MaxDviBufSize,
  734.         GetTeXString(MSG_CONFIG_MAX_DVIBUF));
  735.  
  736.   fprintf(config_fp,"%s\t\t\t%d\t\t\t; %s\n",
  737.         STR_APEN, show_state.APen,
  738.         GetTeXString(MSG_CONFIG_APEN));
  739.  
  740.   fprintf(config_fp,"%s\t\t\t%d\t\t\t; %s\n",
  741.         STR_BPEN, show_state.BPen,
  742.         GetTeXString(MSG_CONFIG_BPEN));
  743.  
  744.   fprintf(config_fp,"%s\t%d\t\t\t; %s\n",
  745.         STR_BASE_DPI,resolution,GetTeXString(MSG_CONFIG_DEF_RESO));
  746.  
  747.   fprintf(config_fp,"%s\t\t",STR_DPI_MENU);
  748.   for (i=0; i<show_state.menu_res_lines-1; i++) {
  749.       fprintf(config_fp,"%d,",show_state.mres[i]);
  750.   }
  751.   fprintf(config_fp,"%d\t; %s\n",
  752.         show_state.mres[show_state.menu_res_lines-1],
  753.         GetTeXString(MSG_CONFIG_RESO_MENU));
  754.  
  755.   for (i=0; i<10; i++) {
  756.     if (show_state.ftast[i] != NULL) {
  757.       fprintf(config_fp,"f%d\t\t\t%s\n",i+1,show_state.ftast[i]);
  758.     }
  759.   }
  760.   for (i=10; i<20; i++) {
  761.     if (show_state.ftast[i] != NULL) {
  762.       fprintf(config_fp,"F%d\t\t\t%s\n",i-9,show_state.ftast[i]);
  763.     }
  764.   }
  765. }
  766.  
  767.  
  768. /****************************************************************************/
  769.  
  770. /* read the config file */
  771. int read_config_file(void)            /* return: success */
  772. {
  773.   FILE *config_fp;
  774.   int ret = 0;
  775.  
  776.   config_fp = open_config_file(0);    /* read */
  777.   if (config_fp != NULL) {
  778.     ret = readcontents(config_fp);
  779.     (void)fclose(config_fp);
  780.   }
  781.  
  782.   return ret;
  783. }
  784.  
  785.  
  786. /* write the config file */
  787. void write_config_file(void)            /* return: success */
  788. {
  789.   FILE *config_fp;
  790.  
  791. #if defined(APP_WINDOW)
  792.   if (!save_app_win_pos()) {
  793.     Warning("Can't save app-win-position!");
  794.   }
  795. #else
  796.   (void)save_app_icon_pos();    /* geht eh nicht */
  797. #endif
  798.  
  799.   config_fp = open_config_file(1);    /* write */
  800.   if (config_fp != NULL) {
  801.     writecontents(config_fp);
  802.     (void)fclose(config_fp);
  803.     Message(MSG_CONFIG_SAVED_OK);
  804.   }
  805.   else {
  806.     Warning(MSG_CANT_SAVE_CONFIG);
  807.     beep();
  808.   }
  809. }
  810.  
  811.