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