home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / slfinsta.zip / packinst / packinst.c < prev    next >
C/C++ Source or Header  |  2000-03-26  |  6KB  |  191 lines

  1. /* $Id: packinst.c,v 1.1 2000/03/27 04:53:09 ktk Exp $ */
  2.  
  3. /*
  4.  * include.c (c) 1998,1999 Brian Smith
  5.  */
  6.  
  7. #include <stdlib.h>
  8. #include <stdio.h>
  9. #include <conio.h>
  10. #include <io.h>
  11. #include <sys/types.h>
  12. #include <sys/stat.h>
  13. #include <string.h>
  14.  
  15. extern int files;
  16.  
  17. FILE *cfgfile, *installfile;
  18. char *INSTALLER_APPLICATION;
  19. char *INSTALLER_VERSION;
  20. char *INSTALLER_TITLE;
  21. char *INSTALLER_PATH;
  22. char *INSTALLER_FOLDER;
  23. char *INSTALLER_PROGRAM;
  24. char *INSTALLER_SHADOW;
  25. char *INSTALLER_OBJECT;
  26. char *INSTALLER_SETS;
  27. char *INSTALLER_SYSVAR;
  28. char *INSTALLER_SYSLINE;
  29. char *INSTALLER_PACKAGES[20];
  30. char *INSTALLER_CONFIRM_WPS;
  31. char *INSTALLER_CONFIRM_CONFIGSYS;
  32. char *INSTALLER_CONFIRM_OVERWRITE;
  33. int INSTALLER_BITMAP_WIDTH;
  34. int INSTALLER_BITMAP_HEIGHT;
  35. int INSTALLER_PACKAGE_COUNT=0;
  36.  
  37. int packagefiles[20];
  38. char *packagefilename[20];
  39.  
  40. void resetglobals(void);
  41.  
  42. int include_unpack(char *aname);
  43.  
  44. void append_file(char *filename)
  45. {
  46.    FILE *appendfile;
  47.    int amnt;
  48.    char buffer[512];
  49.  
  50.    if((appendfile = fopen(filename, "rb"))==NULL)
  51.       {
  52.          printf("Error opening %s for reading!\n", filename);
  53.          exit(3);
  54.       }
  55.    while(!feof(appendfile))
  56.       {
  57.          amnt = fread(buffer, 1, 512, appendfile);
  58.          fwrite(buffer, 1, amnt, installfile);
  59.       }
  60.    fclose(appendfile);
  61. }
  62.  
  63. void getline(FILE *f, char *entry, char *entrydata)
  64. {
  65. char in[4096];
  66. int z;
  67.  
  68.     memset(in, 0, 4096);
  69.     fgets(in, 4095, f);
  70.  
  71.     if(in[strlen(in)-1] == '\n')
  72.        in[strlen(in)-1] = 0;
  73.  
  74.     if(in[0] != '#')
  75.        {
  76.        for(z=0;z<strlen(in);z++)
  77.            {
  78.               if(in[z] == '=')
  79.                  {
  80.                     in[z] = 0;
  81.                     strcpy(entry, in);
  82.                     strcpy(entrydata, &in[z+1]);
  83.                     return;
  84.                  }
  85.            }
  86.       }
  87.    strcpy(entry, "");
  88.    strcpy(entrydata, "");
  89. }
  90.  
  91. int main(int argc, char *argv[])
  92. {
  93.    char entry[8096], entrydata[8096];
  94.    int z;
  95.  
  96.    printf("Packinst- version 2.0 (c) 1999 DBSoft\n\n");
  97.    if(argc!=2)
  98.       {
  99.          printf("Usage: Packinst <filename.cfg>\n");
  100.          exit(1);
  101.       }
  102.    if((cfgfile = fopen(argv[1], "r"))==NULL)
  103.       {
  104.          printf("Error opening config file \"%s\"!\n", argv[1]);
  105.          exit(2);
  106.       }
  107.    if((installfile = fopen("install.exe", "wb"))==NULL)
  108.       {
  109.          printf("Error opening install.exe for writing!\n");
  110.          exit(3);
  111.       }
  112. #if 0
  113.    printf("Adding resources to sfx.exe...\n");
  114.    system("rc install.rc sfx.exe > NUL");
  115. #endif
  116.    printf("Creating installer...\n");
  117.    append_file("sfx.exe");
  118.    fwrite("DBSOFT-HEADER", 1, 13, installfile);
  119.    while(!feof(cfgfile))
  120.       {
  121.         getline(cfgfile, entry, entrydata);
  122.         if(stricmp(entry, "INSTALLER_APPLICATION") == 0)
  123.            INSTALLER_APPLICATION = (char *)strdup(entrydata);
  124.         if(stricmp(entry, "INSTALLER_VERSION") == 0)
  125.            INSTALLER_VERSION = (char *)strdup(entrydata);
  126.         if(stricmp(entry, "INSTALLER_TITLE") == 0)
  127.            INSTALLER_TITLE = (char *)strdup(entrydata);
  128.         if(stricmp(entry, "INSTALLER_PATH") == 0)
  129.            INSTALLER_PATH = (char *)strdup(entrydata);
  130.         if(stricmp(entry, "INSTALLER_FOLDER") == 0)
  131.            INSTALLER_FOLDER = (char *)strdup(entrydata);
  132.         if(stricmp(entry, "INSTALLER_PROGRAM") == 0)
  133.            INSTALLER_PROGRAM = (char *)strdup(entrydata);
  134.         if(stricmp(entry, "INSTALLER_SHADOW") == 0)
  135.            INSTALLER_SHADOW = (char *)strdup(entrydata);
  136.         if(stricmp(entry, "INSTALLER_OBJECT") == 0)
  137.            INSTALLER_OBJECT = (char *)strdup(entrydata);
  138.         if(stricmp(entry, "INSTALLER_SETS") == 0)
  139.            INSTALLER_SETS = (char *)strdup(entrydata);
  140.         if(stricmp(entry, "INSTALLER_SYSVAR") == 0)
  141.            INSTALLER_SYSVAR = (char *)strdup(entrydata);
  142.         if(stricmp(entry, "INSTALLER_SYSLINE") == 0)
  143.            INSTALLER_SYSLINE = (char *)strdup(entrydata);
  144.         if(stricmp(entry, "INSTALLER_CONFIRM_WPS") == 0)
  145.            INSTALLER_CONFIRM_WPS = (char *)strdup(entrydata);
  146.         if(stricmp(entry, "INSTALLER_CONFIRM_CONFIGSYS") == 0)
  147.            INSTALLER_CONFIRM_CONFIGSYS = (char *)strdup(entrydata);
  148.         if(stricmp(entry, "INSTALLER_CONFIRM_OVERWRITE") == 0)
  149.            INSTALLER_CONFIRM_OVERWRITE = (char *)strdup(entrydata);
  150.         if(stricmp(entry, "INSTALLER_PACKAGE") == 0)
  151.            {
  152.               for(z=0;z<strlen(entrydata);z++)
  153.                  {
  154.                     if(entrydata[z] == ',')
  155.                        {
  156.                           entrydata[z] = 0;
  157.                           packagefilename[INSTALLER_PACKAGE_COUNT] = (char *)strdup(entrydata);
  158.                           INSTALLER_PACKAGES[INSTALLER_PACKAGE_COUNT] = (char *)strdup(&entrydata[z+1]);
  159.                        }
  160.                  }
  161.               resetglobals();
  162.               files=0;
  163.               include_unpack(packagefilename[INSTALLER_PACKAGE_COUNT]);
  164.               packagefiles[INSTALLER_PACKAGE_COUNT] = files;
  165.               INSTALLER_PACKAGE_COUNT++;
  166.            }
  167.       }
  168.    fclose(cfgfile);
  169.    fprintf(installfile, "%s-%s-%s-%s-%s-%s-%s-%s-%s-%s-%s-%s-%s-%s-%d",
  170.            INSTALLER_APPLICATION, INSTALLER_VERSION, INSTALLER_TITLE,
  171.            INSTALLER_PATH, INSTALLER_FOLDER, INSTALLER_PROGRAM,
  172.            INSTALLER_SHADOW, INSTALLER_OBJECT, INSTALLER_SETS, INSTALLER_SYSVAR,
  173.            INSTALLER_SYSLINE, INSTALLER_CONFIRM_WPS, INSTALLER_CONFIRM_CONFIGSYS,
  174.            INSTALLER_CONFIRM_OVERWRITE, INSTALLER_PACKAGE_COUNT);
  175.    for(z=0;z<INSTALLER_PACKAGE_COUNT;z++)
  176.       fprintf(installfile, "-%s", INSTALLER_PACKAGES[z]);
  177.    fwrite("~", 1, 1, installfile);
  178.    for(z=0;z<INSTALLER_PACKAGE_COUNT;z++)
  179.       {
  180.          struct stat blah;
  181.  
  182.          stat(packagefilename[z], &blah);
  183.          fprintf(installfile, "DBSOFT-ACE%d%d-%lu~", z, packagefiles[z], blah.st_size);
  184.          append_file(packagefilename[z]);
  185.          printf("Package: %s - %d files in %s (%lu bytes).\n", INSTALLER_PACKAGES[z], packagefiles[z], packagefilename[z], blah.st_size);
  186.       }
  187.    fclose(installfile);
  188.    fclose(cfgfile);
  189.    return 0;
  190.    }
  191.