home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1994 #1 / monster.zip / monster / PCBOARD / PCBM102.ZIP / SOURCES.ZIP / INSTALL.C next >
C/C++ Source or Header  |  1994-01-22  |  7KB  |  199 lines

  1. /*
  2.  ┌────────────────────────────────────────────────────────────────────────┐
  3.  │                                                                        │
  4.  │    ▒▒▒▒▒▒▄ ▒▒▒▒▒▒▄ ▒▒▒▒▒▒▒▄ ▒▒▒▒▒▒▒▒▄ ▒▒▒▒▒▒▄ ▒▒▄      ▒▒▄ ▒▒▒▒▒▒▄     │
  5.  │    ▒▒█▀▒▒█ ▒▒█▀▀▀▀  ▒▒█▀▒▒█ ▒▒█▒▒█▒▒█ ▒▒█▀▒▒█  ▒▒█    ▒▒█▀ ▒▒█▀▀▀▀     │
  6.  │    ▒▒▒▒▒▒█ ▒▒█      ▒▒▒▒▒█▀ ▒▒█▒▒█▒▒█ ▒▒█ ▒▒█   ▒▒█  ▒▒█▀  ▒▒▒▒▄       │
  7.  │    ▒▒█▀▀▀▀ ▒▒█      ▒▒█▀▒▒█ ▒▒█ ▀▀▒▒█ ▒▒█ ▒▒█    ▒▒█▒▒█▀   ▒▒█▀▀       │
  8.  │    ▒▒█     ▒▒▒▒▒▒▄ ▒▒▒▒▒▒▒█ ▒▒█   ▒▒█ ▒▒▒▒▒▒█     ▒▒▒█▀    ▒▒▒▒▒▒▄     │
  9.  │     ▀▀      ▀▀▀▀▀▀  ▀▀▀▀▀▀▀  ▀▀    ▀▀  ▀▀▀▀▀▀      ▀▀▀      ▀▀▀▀▀▀     │
  10.  │                                                                        │
  11.  │                                                                        │
  12.  │      Module   :   INSTALL.C (pompé à 95 % sur un soft de Réné Cougnenc)│
  13.  │                                                                        │
  14.  │      Fonction :   Programme d'installation de la configuration.        │
  15.  │                                                                        │
  16.  │                                                                        │
  17.  │                   Ce programme ne doit être lancé qu'une fois, juste   │
  18.  │                   après la compilation.                                │
  19.  │                   Il écrit la structure de configuration à la fin      │
  20.  │                   du code éxécutable, en y placant un CRC et l'heure   │
  21.  │                   de la compilation.                                   │
  22.  │                                                                        │
  23.  │                   Le CRC est uniquement sur la structure et sert à     │
  24.  │                   vérifier que celle-ci n'a pas été altérée.           │
  25.  │                                                                        │
  26.  └────────────────────────────────────────────────────────────────────────┘
  27. */
  28.  
  29. #include <time.h>
  30. #include "install.h"
  31. #include <memory.h>
  32. #include <sys/types.h>
  33. #include <stdio.h>
  34. #include <string.h>
  35. #include <sys/stat.h>
  36. #include <fcntl.h>
  37. #include <io.h>
  38.  
  39. #define SIGNATURE "■ PCBMOVE - V.Gillet 1993 - Domaine Public ■"
  40.  
  41. char *_months1_[] =
  42. {
  43.     "Jan", "Fev", "Mar", "Avr", "Mai", "Jun",
  44.     "Jui", "Aou", "Sep", "Oct", "Nov", "Dec"
  45. };
  46.  
  47. char *_months_[] =
  48. {
  49.     "Jan", "Fev", "Mar", "Avr", "Mai", "Jun",
  50.     "Jui", "Aou", "Sep", "Oct", "Nov", "Dec"
  51. };
  52.  
  53. char *_days_[] =
  54. {
  55.     "Dim", "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam"
  56. };
  57.  
  58. struct InstallType Install =
  59. {
  60.         0x00                ,      /* CrcTest                     */
  61.         STRUV               ,      /* Version of this structure   */
  62.         0L                  ,      /* Time of program compilation */
  63. } ;
  64.  
  65. /*------------------- FIN D'INIT DE LA STRUCTURE ---------------------------*/
  66.  
  67. char tampon[80];
  68.  
  69. char *frtime( long );
  70. int calcrc(char *ptr, int count);
  71.  
  72. /*---------------------------------------------------------------------------*/
  73. /*           ECRITURE DE LA CONFIGURATION DANS LE FICHIER EXECUTABLE         */
  74. /*---------------------------------------------------------------------------*/
  75. /*
  76. */
  77.  
  78. int WriteConf(char *programme)
  79. {
  80.    int fichier;                               /* handle fichier             */
  81.    int test,trech;
  82.    long taillefich;
  83.    long cptime ;
  84.  
  85.    time ( & cptime );
  86.  
  87.    printf("\n        INSTALL:Ecriture de la Config par défaut dans %s ...\n"
  88.              ,programme);
  89.  
  90.    fichier=open(programme,O_RDWR|O_BINARY,S_IREAD|S_IWRITE);
  91.    if(fichier==-1)return(0);               /* mais c'est peu probable...*/
  92.    test=lseek(fichier,0L,SEEK_END);        /* va au bout du fichier       */
  93.    if(test==-1)
  94.    {
  95.       printf(" Erreur dans Seek.\n");
  96.       exit(3);
  97.    }
  98.  
  99.    Install.CompilTime = cptime ;      /* Met la date de compilation en place */
  100.    strcpy(Install.Signature, SIGNATURE ); /* Signe le programme */
  101.  
  102.                                  /* CRC pour securiser le nom du mec */
  103.    Install.CrcTest =(int) calcrc((char *)&Install.StruVer,sizeof(Install) - 2);
  104.  
  105.  
  106.    write(fichier,(char *)&Install.CrcTest,sizeof(Install));
  107.    close(fichier);                           /* ma bonne dame !              */
  108.  
  109.    printf("        ( Taille Install : %d octets, CRC : %x )\n",
  110.                      sizeof(Install),Install.CrcTest);
  111.  
  112.    printf("         Date : %s\n", frtime(Install.CompilTime ) );
  113.  
  114.    return(1);
  115. }
  116. /*---------------------------------------------------------------------------*/
  117.  
  118. aide()
  119. {
  120. printf("INSTALL: Pour la version %d de la structure de PCBMOVE.EXE !!\n",STRUV);
  121. puts("\nSyntaxe:Install pcbmove.exe\n\n\n"
  122.        "Initialise le fichier éxécutable PCBMOVE avec une date de compilation\n"
  123.        "A utiliser UNE SEULE fois après compilation de PCBMOVE.EXE\n\n");
  124. puts("Ce programme va écrire la structure de config à la FIN du fichier \n"
  125.        "éxécutable.\n\n\n");
  126. }
  127.  
  128. /*---------------------------------------------------------------------------*/
  129.  
  130. main(int argc,char **argv)
  131. {
  132. #ifdef __TURBOC__
  133. directvideo = 1;
  134. #endif
  135.  
  136. if( argc <2)
  137.   {
  138.        aide();
  139.        return(1);
  140.   }
  141.  
  142. if( ! WriteConf(argv[1]) )
  143.   {
  144.    puts("Erreur,pas de fichier...\n");
  145.    return(2);
  146.   }
  147.  return(0);
  148. }
  149.  
  150. /* ------------------------------------------------------------------------ */
  151. char *frtime( long t )
  152. {
  153.  
  154.      struct tm *tm;
  155.  
  156.      tm = localtime( &t );
  157.  
  158.      sprintf(tampon,"%s %02d %s %d , %02d H %02d mn %02d s",
  159.              _days_[tm->tm_wday], tm->tm_mday,
  160.              _months_[tm->tm_mon],tm->tm_year + 1900,
  161.              tm->tm_hour, tm->tm_min, tm->tm_sec );
  162.  
  163.   return (tampon);
  164. }
  165.  
  166. /*-------------------------------------------------------------------------*/
  167. /*
  168.  
  169.       Calcul du crc:extrait de la documentation de Chuck Forsberg
  170.  
  171.          Figure 8.  Example of CRC Calculation written in C
  172.  
  173.  
  174.     This function calculates the CRC used by the XMODEM/CRC Protocol
  175.     The first argument is a pointer to the message block.
  176.     The second argument is the number of bytes in the message block.
  177.     The function returns an integer which contains the CRC.
  178.     The low order 16 bits are the coefficients of the CRC.
  179. */
  180.  
  181. int calcrc(char *ptr, int count)
  182.    {
  183.        int crc, i;
  184.  
  185.        crc = 0;
  186.        while(--count >= 0)
  187.            {
  188.            crc = crc ^ (int)*ptr++ << 8;
  189.            for(i = 0; i < 8; ++i)
  190.                if(crc & 0x8000)
  191.                    crc = crc << 1 ^ 0x1021;
  192.                else
  193.                    crc = crc << 1;
  194.            }
  195.        return (crc & 0xFFFF);
  196.    }
  197.  
  198. /*--------------------------------------------------------------------------*/
  199.