home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 11 Util / 11-Util.zip / BACKRE.ZIP / BACKUP.C < prev    next >
C/C++ Source or Header  |  1990-09-11  |  12KB  |  363 lines

  1. /******************************************************************************
  2.  
  3.   OCO SOURCE MATERIALS: IBM CONFIDENTIAL (IBM CONFIDENTIAL-RESTRICTED WHEN
  4.                         COMBINED WITH THE AGGREGATED OCO SOURCE MODULES FOR
  5.                         THIS PROGRAM)
  6.  
  7.   MODULE NAME: Backup
  8.  
  9.   COMPONENT NAME: BASE SUPPORT UTILITIES
  10.  
  11.   LPP NAME: Database Manager
  12.  
  13.   DESCRIPTIVE NAME: This BACKUP.EXE intercepts the call from DBM and then runs
  14.                     SQLDBACK.CMD which in turns calls OS/2 Backup.exe or this
  15.                     command file can be modified to call whatever the user
  16.                     wants to support.
  17.  
  18.   COPYRIGHT: (C) COPYRIGHT IBM CORPORATION 1990, 1991
  19.              LICENSED MATERIAL - PROGRAM PROPERTY OF IBM
  20.              REFER TO COPYRIGHT INSTRUCTIONS FORM NO. G120-2083
  21.  
  22.   STATUS: RELEASE R310, COMPONENT BSU, VERSION 00.00
  23.  
  24.   FUNCTION: This function allows for an alternative database backup.
  25.  
  26.   DEPENDENCIES: This function must be placed in the path before the OS/2
  27.                 Backup.exe in order for the alternate solution to work.
  28.  
  29.   RESTRICTIONS: None.
  30.  
  31.   OPERATING SYSTEM: OS\2 E.E. Release 1.2
  32.  
  33.   COMPILER OPTIONS: Use the following for codeview debugging
  34.  
  35.                     "CL -ALfu -c -Zd -Zi -Gs -Zp -W3 -Od -DLINT_ARGS"
  36.  
  37.                     Also, -DSQLDEBUG if want to debug during DBM execution.
  38.  
  39.   INPUT:
  40.  
  41.          parameter 1 - d:\path\*.* number of the database directory to be
  42.                        back up. If omitted, then error will be returned.
  43.  
  44.          parameter 2 - d: where the backup files are to be placed.
  45.                        if omitted, then error will be returned.
  46.  
  47.          parameter 3 - /S</M/A> the backup options to be used with backup.exe
  48.                        if omitted, then error will be returned.
  49.  
  50.   OUTPUT:
  51.  
  52.     NORMAL RETURN:
  53.  
  54.       DOSEXIT with 0.
  55.  
  56.     ERROR RETURN:
  57.  
  58.       DOSEXIT as defined by BACKUP.EXE (4 - Terminated due to error)
  59.  
  60.   EXTERNAL REFERENCES:
  61.  
  62.      ROUTINES:
  63.  
  64.        printf   - print to the application window
  65.        strcpy   - String copy c library function
  66.        strcat   - String catn c library function
  67.  
  68.      DATA AREAS:
  69.  
  70.  
  71.   CHANGE ACTIVITY:
  72.  
  73.    REL  VER    DATE      PTR      DESCRIPTION
  74.    ---  -----  --------  -------  ---------------------------------------------
  75.    310  00.00  06/19/90  xxxxxxx  Initial design for Bank of America Problem.
  76.                                   Designed by Raymond Hernandez.
  77.  
  78. ****************************-END-OF-SPECIFICATIONS-***************************/
  79.  
  80. /*********************************-PSEUDOCODE-********************************/
  81. /*+  PROC (BACKUP)                                                           */
  82. /*+ 1. SET UP LOCAL VARIABLES                                                */
  83. /*+ 1. SET RETURN CODE TO OK                                                 */
  84. /*+ 1. IF THE NUMBER OF INPUT PARAMETERS EQUAL TO ONE (FUNCTION NAME ONLY), 
  85. ;&       THEN SET ERROR AND RETURN                                           */
  86. /*+ 1. ENDIF (WAS THERE ONLY ONE PARAMETER?)                                 */
  87. /*+ 1. HANDLE THE DB DIRECTORY PARAMETER                                     */
  88. /*+ 1. IF TWO OR MORE PARAMETERS, THEN DB DIRECTORY WAS PASSED IN            */
  89. /*+ 2. . SET LOCAL VARIABLE DB DIR TO WHAT WAS PASSED IN                     */
  90. /*+ 1. ELSE (NO DATABASE DIRECTORY PASSED IN)                                */
  91. /*+ 2. . SET RETURN CODE TO ERROR                                            */
  92. /*+ 1. ENDIF (WAS THERE A COUNT PARAMETER?)                                  */
  93. /*+ 1. IF THREE OR MORE PARAMETERS AND RC NOT SET THEN, DRIVE WAS PASSED IN  */
  94. /*+ 2. . SET DRIVE PASSED IN                                                 */
  95. /*+ 1. ELSE (DRIVE NOT SENT IN)                                              */
  96. /*+ 2. . SET TO DEFAULT DIR,                                                 */
  97. /*+ 1. ENDIF (WAS THERE A DRIVE PARAMETER?)                                  */
  98. /*+ 1. IF FOUR OR MORE PARAMETERS AND RC NOT SET THEN, OPTION 1 WAS PASSED 
  99. ;&       IN                                                                  */
  100. /*+ 2. . SET OPTION 1 PASSED IN                                              */
  101. /*+ 1. ELSE (OPTION 1 NOT SENT IN)                                           */
  102. /*+ 2. . SET ERROR AND RETURN                                                */
  103. /*+ 1. ENDIF (WAS THERE AN OPTION 1 PARAMETER?)                              */
  104. /*+ 1. IF FIVE OR MORE PARAMETERS AND RC NOT SET THEN, OPTION 2 WAS PASSED 
  105. ;&       IN                                                                  */
  106. /*+ 2. . SET OPTION 2 PASSED IN                                              */
  107. /*+ 1. ELSE (OPTION 2 NOT SENT IN)                                           */
  108. /*+ 2. . PARAMETER NOT USED, SET TO NULL                                     */
  109. /*+ 1. ENDIF (WAS THERE AN OPTION 2 PARAMETER?)                              */
  110. /*+ 1. EXECUTE THE SQL DBM BACKUP COMMAND FILE                               */
  111. /*+ 1. IF NO ERRORS, THEN CONTINUE                                           */
  112. /*+ 1. ENDIF (NO ERROR)                                                      */
  113. /*+ 1. RETURN RC                                                             */
  114. /*+  ENDPROC (BACKUP)                                                        */
  115. /******************************-END PSEUDOCODE-*******************************/
  116.  
  117. /********************************-INCLUDE FILES-******************************/
  118. #include  <stdlib.h>
  119. #include  <stdio.h>
  120. #include  <string.h>
  121. #include  <memory.h>
  122. #include  <time.h>
  123. #include  "doscalls.h"
  124.  
  125. /*********************************-PROTOTYPES-********************************/
  126.  
  127. /********************************-GLOBAL VARIABLES-***************************/
  128.  
  129. /*********************************-PROCEDURE-*********************************/
  130. /*                                PROC (BACKUP)                              */
  131. int  main ( argc, argv )
  132. int argc;                              /* Number of argv's plus one          */
  133. char *argv[];                          /* Pointer to arguments, ends with Null
  134.                                           Pointer                            */
  135. {
  136.  
  137. /*                               1. SET UP LOCAL VARIABLES                   */
  138.  
  139.    int  rc,rc2;
  140.    unsigned char dbdir[20];
  141.    unsigned char drive[20];
  142.    unsigned char option1[20];
  143.    unsigned char option2[20];
  144.    unsigned char command2[300];
  145.  
  146. /*                               1. SET RETURN CODE TO OK                    */
  147.  
  148.    rc = 0;
  149.  
  150. /*                               1. IF THE NUMBER OF INPUT PARAMETERS EQUAL 
  151. ;&                                    TO ONE (FUNCTION NAME ONLY), THEN SET 
  152. ;&                                    ERROR AND RETURN                       */
  153.  
  154.    if (argc == 1)
  155.    {
  156.  
  157. #if defined (SQLDEBUG)
  158.       printf("\nError, no parameters provided\n");
  159. #endif
  160.  
  161.       rc = 4;
  162.  
  163. /*                               1. ENDIF (WAS THERE ONLY ONE PARAMETER?)    */
  164.  
  165.    }
  166.  
  167. /*                               1. HANDLE THE DB DIRECTORY PARAMETER        */
  168.  
  169. #if defined (SQLDEBUG)
  170.    printf("\nNumber of parameters provided = %d\n", argc);
  171. #endif
  172.  
  173. /*                               1. IF TWO OR MORE PARAMETERS, THEN DB 
  174. ;&                                    DIRECTORY WAS PASSED IN                */
  175.  
  176.    if ((argc >= 2) && !(rc))
  177.    {
  178.  
  179. /*                               2. . SET LOCAL VARIABLE DB DIR TO WHAT WAS 
  180. ;&                                      PASSED IN                            */
  181.  
  182.       strcpy (dbdir, argv[1]);
  183.  
  184. #if defined (SQLDEBUG)
  185.       printf ("\nDatabase Directory provided = %s\n", dbdir);
  186. #endif
  187.  
  188. /*                               1. ELSE (NO DATABASE DIRECTORY PASSED IN)   */
  189.  
  190.    }
  191.    else
  192.    {
  193.  
  194. /*                               2. . SET RETURN CODE TO ERROR               */
  195.  
  196. #if defined (SQLDEBUG)
  197.       printf("\nError, no database directory parameter provided\n");
  198. #endif
  199.  
  200.       rc = 4;
  201.  
  202. /*                               1. ENDIF (WAS THERE A COUNT PARAMETER?)     */
  203.  
  204.    }
  205.  
  206. /*                               1. IF THREE OR MORE PARAMETERS AND RC NOT 
  207. ;&                                    SET THEN, DRIVE WAS PASSED IN          */
  208.  
  209.    if ( (argc >= 3) && !(rc) )
  210.    {
  211.  
  212. /*                               2. . SET DRIVE PASSED IN                    */
  213.  
  214.       strcpy (drive, argv[2]);
  215.  
  216. #if defined (SQLDEBUG)
  217.       printf ("\nBackup Drive provided = %s\n", drive);
  218. #endif
  219.  
  220. /*                               1. ELSE (DRIVE NOT SENT IN)                 */
  221.  
  222.    }
  223.    else
  224.    {
  225.  
  226. /*                               2. . SET TO DEFAULT DIR,                    */
  227.  
  228. #if defined (SQLDEBUG)
  229.       printf("\nError, drive parameter not provided\n");
  230. #endif
  231.  
  232.       rc = 4;
  233.  
  234. /*                               1. ENDIF (WAS THERE A DRIVE PARAMETER?)     */
  235.  
  236.    }
  237.  
  238. /*                               1. IF FOUR OR MORE PARAMETERS AND RC NOT 
  239. ;&                                    SET THEN, OPTION 1 WAS PASSED IN       */
  240.  
  241.    if ((argc >= 4) && !(rc))
  242.    {
  243.  
  244. /*                               2. . SET OPTION 1 PASSED IN                 */
  245.  
  246.       strcpy (option1, argv[3]);
  247.  
  248. #if defined (SQLDEBUG)
  249.       printf ("\nBackup Optional Parameter 1 = %s\n", option1);
  250. #endif
  251.  
  252. /*                               1. ELSE (OPTION 1 NOT SENT IN)              */
  253.  
  254.    }
  255.    else
  256.    {
  257.  
  258. /*                               2. . SET ERROR AND RETURN                   */
  259.  
  260. #if defined (SQLDEBUG)
  261.       printf("\nError, no backup optional parameter 1 provided\n");
  262. #endif
  263.  
  264.       rc = 4;
  265.  
  266. /*                               1. ENDIF (WAS THERE AN OPTION 1 PARAMETER?) */
  267.  
  268.    }
  269.  
  270. /*                               1. IF FIVE OR MORE PARAMETERS AND RC NOT 
  271. ;&                                    SET THEN, OPTION 2 WAS PASSED IN       */
  272.  
  273.    if ((argc >= 5) && !(rc))
  274.    {
  275.  
  276. /*                               2. . SET OPTION 2 PASSED IN                 */
  277.  
  278.       strcpy (option2, argv[4]);
  279.  
  280. #if defined (SQLDEBUG)
  281.       printf ("\nBackup Optional Parameter 2 = %s\n", option2);
  282. #endif
  283.  
  284. /*                               1. ELSE (OPTION 2 NOT SENT IN)              */
  285.  
  286.    }
  287.    else
  288.    {
  289.  
  290. /*                               2. . PARAMETER NOT USED, SET TO NULL        */
  291.  
  292.       option2[0] = '\0';
  293.  
  294. #if defined (SQLDEBUG)
  295.       printf("\nNote, no backup optional parameter 2 provided\n");
  296. #endif
  297.  
  298. /*                               1. ENDIF (WAS THERE AN OPTION 2 PARAMETER?) */
  299.  
  300.    }
  301.  
  302. /*                               1. EXECUTE THE SQL DBM BACKUP COMMAND FILE  */
  303.  
  304. /*                               1. IF NO ERRORS, THEN CONTINUE              */
  305.  
  306.    if (!(rc))
  307.    {
  308.  
  309.       unsigned char progn[13];
  310.       unsigned char outp[255];
  311.       strcpy (progn, "SQLDBACK.CMD");
  312.       _searchenv(progn, "PATH", outp);
  313.       strcpy (command2, outp);
  314.       strcat (command2, " ");
  315.       strcat (command2, dbdir);
  316.       strcat (command2, " ");
  317.       strcat (command2, drive);
  318.       strcat (command2, " ");
  319.       strcat (command2, option1);
  320.       if (option2[0] != '\0')
  321.       {
  322.          strcat (command2, " ");
  323.          strcat (command2, option2);
  324.       }
  325.  
  326. #if defined (SQLDEBUG)
  327.       printf ("\nCommand 2 to be executed = \n%.80s\n", command2);
  328. #endif
  329.  
  330.       rc2 = strlen(command2);
  331.  
  332. #if defined (SQLDEBUG)
  333.       printf ("\nlength of command 2 = %d\n", rc2);
  334. #endif
  335.  
  336.       rc=system(command2);
  337.  
  338. #if defined (SQLDEBUG)
  339.       printf ("\nreturn code of command2 = %d\n", rc);
  340. #endif
  341.  
  342. /*                               1. ENDIF (NO ERROR)                         */
  343.  
  344.    }
  345.  
  346. #if defined (SQLDEBUG)
  347.    {
  348.       unsigned char line[80];
  349.       printf("\nPress Enter to Continue. ");
  350.       gets(line);
  351.    }
  352. #endif
  353.  
  354. /*                               1. RETURN RC                                */
  355.  
  356.    return (rc);
  357.  
  358. /*                                ENDPROC (BACKUP)                           */
  359.  
  360. }
  361.  
  362. /*******************************-END PROCEDURE-******************************/
  363.