home *** CD-ROM | disk | FTP | other *** search
/ Otherware / Otherware_1_SB_Development.iso / amiga / programm / utility / resgrep0.lzh / ResGrep / src / settings.cc < prev    next >
Encoding:
C/C++ Source or Header  |  1992-04-11  |  3.1 KB  |  136 lines

  1. //
  2. // Load and Save settings
  3. //
  4.  
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7.  
  8. #include "export.h"
  9. #include "resgrep.h"
  10. #include "utils.h"
  11.  
  12. #define MAGIC_TEXT   "ResGrepSettingsFile"
  13.  
  14. static char *SettingsFileName="ResGrep:etc/settings";
  15.  
  16. extern list *conversions;
  17.  
  18. void freeconvert(list *c)
  19. {
  20.    while( c->getfirst()->getsucc()!=NULL )
  21.       delete c->remhead();
  22.    return;
  23. }
  24.  
  25. void savesettings(void)
  26. {
  27.    FILE *out;
  28.    convert *n;
  29.  
  30.    if( (out=fopen(SettingsFileName,"w"))==NULL )
  31.    {
  32.       ResError("Can't open file to\nwrite settings to.");
  33.       return;
  34.    }
  35.    fprintf(out,"%s\n%d\n%d\n",MAGIC_TEXT,VERSION,REVISION);
  36.    for(n=(convert *)conversions->getfirst();((node *)n)->getsucc();((node *)n)=n->getsucc())
  37.       fprintf(out,"###\n%s\n%s\n%s\n%d\n%d\n%s\n%d\n%d\n",
  38.           pack2cstr(n->getpack()),n->getname(),n->command,
  39.           n->isARexx,n->sendto,n->filename,n->builtin,
  40.           n->funcnum);
  41.    fprintf(out,"!!!\n");
  42.    fclose(out);
  43.    return;
  44. }
  45.  
  46. void savesettingsas(void)
  47. {
  48.    savesettings();
  49.    return;
  50. }
  51.  
  52. void skipnewline(char *s)
  53. {
  54.    if( strlen(s)<=0 )
  55.       return;
  56.    if( s[strlen(s)-1]=='\n' )
  57.       s[strlen(s)-1]='\0';
  58.    return;
  59. }
  60.  
  61. void loadsettings(void)
  62. {
  63.    FILE *in;
  64.    list *co=new list();
  65.    convert *c;
  66.    char buffer[1024];
  67.  
  68.    if( (in=fopen(SettingsFileName,"r"))==NULL )
  69.    {
  70.       ResError("Can't open setting file.");
  71.       return;
  72.    }
  73.    fgets(buffer, 1024, in);
  74.    skipnewline(buffer);
  75.    if( strcmp(buffer,MAGIC_TEXT)!=NULL )
  76.    {
  77.       ResError("Setting file corrupted.");
  78.       return;
  79.    }
  80.    fgets(buffer, 1024, in);
  81.    if( atoi(buffer)>VERSION )
  82.    {
  83.       ResError("Version in setting file to small.");
  84.       return;
  85.    }
  86.    fgets(buffer, 1024, in);
  87.    if( atoi(buffer)>REVISION )
  88.       ResWarning("Revision in setting file to small.");
  89.    fgets(buffer, 1024, in);
  90.    skipnewline(buffer);
  91.    while( !feof(in) && strcmp(buffer,"###")==0 )
  92.    {
  93.       char Cpack[7], Cname[1024], Ccommand[1024], CisARexx[5], Csendto[5];
  94.       char Cfilename[1024], Cbuiltin[5], Cexport[7];
  95.  
  96.       fgets(Cpack, 7, in);
  97.       skipnewline(Cpack);
  98.       fgets(Cname, 1024, in);
  99.       skipnewline(Cname);
  100.       fgets(Ccommand, 1024, in);
  101.       skipnewline(Ccommand);
  102.       fgets(CisARexx, 5, in);
  103.       skipnewline(CisARexx);
  104.       fgets(Csendto, 5, in);
  105.       skipnewline(Csendto);
  106.       fgets(Cfilename, 1024, in);
  107.       skipnewline(Cfilename);
  108.       fgets(Cbuiltin, 5, in);
  109.       skipnewline(Cbuiltin);
  110.       fgets(Cexport, 7, in);
  111.       skipnewline(Cexport);
  112. /*printf("%08lx %d '%s' '%s' %d %d '%s' %d\n",
  113.          cstr2pack(Cpack), atoi(Cexport), Cname, Ccommand,
  114.          (bool)atoi(CisARexx), (send)atoi(Csendto),
  115.          Cfilename, (bool)atoi(Cbuiltin) );
  116.  
  117. */
  118.       co->addtail( new convert (
  119.          cstr2pack(Cpack), atoi(Cexport), (char *)strdup(Cname), Ccommand,
  120.          (bool)atoi(CisARexx), (send)atoi(Csendto),
  121.          Cfilename, (bool)atoi(Cbuiltin)) );
  122.       fgets(buffer, 1024, in);
  123.       skipnewline(buffer);
  124.    }
  125.    if( strcmp(buffer,"!!!")!=0 )
  126.    {
  127.       ResError("Setting file corrupted.");
  128.       freeconvert(co);
  129.       return;
  130.    }
  131.    freeconvert(conversions);
  132.    conversions = co;
  133.    fclose(in);
  134.    return;
  135. }
  136.