home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 11 Util
/
11-Util.zip
/
BACKRE.ZIP
/
RESTORE.C
< prev
next >
Wrap
C/C++ Source or Header
|
1990-09-11
|
12KB
|
350 lines
/******************************************************************************
OCO SOURCE MATERIALS: IBM CONFIDENTIAL (IBM CONFIDENTIAL-RESTRICTED WHEN
COMBINED WITH THE AGGREGATED OCO SOURCE MODULES FOR
THIS PROGRAM)
MODULE NAME: Restore
COMPONENT NAME: Database Utilities
LPP NAME: Database Manager
DESCRIPTIVE NAME: RESTORE.EXE intercepts the DBM call to OS/2 RESTORE and
executes SQLDREST.CMD commnand file.
COPYRIGHT: (C) COPYRIGHT IBM CORPORATION 1990, 1991
LICENSED MATERIAL - PROGRAM PROPERTY OF IBM
REFER TO COPYRIGHT INSTRUCTIONS FORM NO. G120-2083
STATUS: RELEASE R310, COMPONENT BSU, VERSION 00.00
FUNCTION: This function allows for an alternative database restore.
DEPENDENCIES: This function must be placed in the path before the OS/2
restore.exe in order for the alternate solution to work.
RESTRICTIONS: None.
OPERATING SYSTEM: OS\2 E.E. Release 1.2.
COMPILER OPTIONS: Use the following for codeview debugging
"CL -ALfu -c -Zd -Zi -Gs -Zp -W3 -Od -DLINT_ARGS"
Also, -DSQLDEBUG if you want to debug during DBM execution.
INPUT:
parameter 1 - d:\path\*.* number of the database directory to be
restored. If omitted, then error will be returned.
parameter 2 - d: where the restored files are to be placed.
if omitted, then error will be returned.
parameter 3 - /S the backup options to be used with restore.exe
if omitted, then error will be returned.
OUTPUT:
NORMAL RETURN:
DOSEXIT with 0.
ERROR RETURN:
DOSEXIT as defined by restored.exe (4 - Terminated due to errors).
EXTERNAL REFERENCES:
ROUTINES:
printf - print to the application window
strcpy - String copy c library function
strcat - String catn c library function
DATA AREAS:
CHANGE ACTIVITY:
REL VER DATE PTR DESCRIPTION
--- ----- -------- ------- ---------------------------------------------
310 00.00 06/19/90 xxxxxxx Initial design for Bank of America Problem.
Designed by Raymond Hernandez.
****************************-END-OF-SPECIFICATIONS-***************************/
/*********************************-PSEUDOCODE-********************************/
/*+ PROC (RESTORE) */
/*+ 1. SET UP LOCAL VARIABLES */
/*+ 1. SET RETURN CODE TO OK */
/*+ 1. IF THE NUMBER OF INPUT PARAMETERS EQUAL TO ONE (FUNCTION NAME ONLY),
;& THEN SET ERROR AND RETURN */
/*+ 1. ENDIF (WAS THERE ONLY ONE PARAMETER?) */
/*+ 1. HANDLE THE DB DIRECTORY PARAMETER */
/*+ 1. IF TWO OR MORE PARAMETERS, THEN DB DIRECTORY WAS PASSED IN */
/*+ 2. . SET LOCAL VARIABLE DB DIR TO WHAT WAS PASSED IN */
/*+ 1. ELSE (NO DATABASE DIRECTORY PASSED IN) */
/*+ 2. . SET RETURN CODE TO ERROR */
/*+ 1. ENDIF (WAS THERE A COUNT PARAMETER?) */
/*+ 1. IF THREE OR MORE PARAMETERS AND RC NOT SET THEN, DRIVE WAS PASSED IN */
/*+ 2. . SET DRIVE PASSED IN */
/*+ 1. ELSE (DRIVE NOT SENT IN) */
/*+ 2. . SET TO DEFAULT DIR, */
/*+ 1. ENDIF (WAS THERE A DRIVE PARAMETER?) */
/*+ 1. IF FOUR OR MORE PARAMETERS AND RC NOT SET THEN, OPTION 1 WAS PASSED
;& IN */
/*+ 2. . SET OPTION 1 PASSED IN */
/*+ 1. ELSE (OPTION 1 NOT SENT IN) */
/*+ 2. . SET ERROR AND RETURN */
/*+ 1. ENDIF (WAS THERE AN OPTION 1 PARAMETER?) */
/*+ 1. IF FIVE OR MORE PARAMETERS AND RC NOT SET THEN, OPTION 2 WAS PASSED
;& IN */
/*+ 2. . SET OPTION 2 PASSED IN */
/*+ 1. ELSE (OPTION 2 NOT SENT IN) */
/*+ 2. . PARAMETER NOT USED, SET TO NULL */
/*+ 1. ENDIF (WAS THERE AN OPTION 2 PARAMETER?) */
/*+ 1. EXECUTE THE SQL DBM BACKUP COMMAND FILE */
/*+ 1. IF NO ERRORS, THEN CONTINUE */
/*+ 1. ENDIF */
/*+ 1. RETURN RC */
/*+ ENDPROC (RESTORE) */
/******************************-END PSEUDOCODE-*******************************/
/********************************-INCLUDE FILES-******************************/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <memory.h>
#include <time.h>
#include "doscalls.h"
/*********************************-PROTOTYPES-********************************/
/********************************-GLOBAL VARIABLES-***************************/
/*********************************-PROCEDURE-*********************************/
/* PROC (RESTORE) */
int main ( argc, argv )
int argc; /* Number of argv's plus one */
char *argv[]; /* Pointer to arguments, ends with Null
Pointer */
{
/* 1. SET UP LOCAL VARIABLES */
int rc;
unsigned char dbdir[255];
unsigned char drive[255];
unsigned char option1[255];
unsigned char option2[255];
unsigned char command[1000];
/* 1. SET RETURN CODE TO OK */
rc = 0;
/* 1. IF THE NUMBER OF INPUT PARAMETERS EQUAL
;& TO ONE (FUNCTION NAME ONLY), THEN SET
;& ERROR AND RETURN */
if (argc == 1)
{
#if defined (SQLDEBUG)
printf("\nError, no parameters provided\n");
#endif
rc = 4;
/* 1. ENDIF (WAS THERE ONLY ONE PARAMETER?) */
}
/* 1. HANDLE THE DB DIRECTORY PARAMETER */
#if defined (SQLDEBUG)
printf("\nNumber of parameters provided = %d\n", argc);
#endif
/* 1. IF TWO OR MORE PARAMETERS, THEN DB
;& DIRECTORY WAS PASSED IN */
if ((argc >= 2) && !(rc))
{
/* 2. . SET LOCAL VARIABLE DB DIR TO WHAT WAS
;& PASSED IN */
strcpy (dbdir, argv[1]);
#if defined (SQLDEBUG)
printf ("\nDatabase Directory provided = %s\n", dbdir);
#endif
/* 1. ELSE (NO DATABASE DIRECTORY PASSED IN) */
}
else
{
/* 2. . SET RETURN CODE TO ERROR */
#if defined (SQLDEBUG)
printf("\nError, no database directory parameter provided\n");
#endif
rc = 4;
/* 1. ENDIF (WAS THERE A COUNT PARAMETER?) */
}
/* 1. IF THREE OR MORE PARAMETERS AND RC NOT
;& SET THEN, DRIVE WAS PASSED IN */
if ( (argc >= 3) && !(rc) )
{
/* 2. . SET DRIVE PASSED IN */
strcpy (drive, argv[2]);
#if defined (SQLDEBUG)
printf ("\nRestore Drive = %s\n", drive);
#endif
/* 1. ELSE (DRIVE NOT SENT IN) */
}
else
{
/* 2. . SET TO DEFAULT DIR, */
#if defined (SQLDEBUG)
printf("\nError, drive parameter not provided\n");
#endif
rc = 4;
/* 1. ENDIF (WAS THERE A DRIVE PARAMETER?) */
}
/* 1. IF FOUR OR MORE PARAMETERS AND RC NOT
;& SET THEN, OPTION 1 WAS PASSED IN */
if ((argc >= 4) && !(rc))
{
/* 2. . SET OPTION 1 PASSED IN */
strcpy (option1, argv[3]);
#if defined (SQLDEBUG)
printf ("\nRestore Optional Parameter 1 = %s\n", option1);
#endif
/* 1. ELSE (OPTION 1 NOT SENT IN) */
}
else
{
/* 2. . SET ERROR AND RETURN */
#if defined (SQLDEBUG)
printf("\nError, no restore optional parameter 1 provided\n");
#endif
rc = 4;
/* 1. ENDIF (WAS THERE AN OPTION 1 PARAMETER?) */
}
/* 1. IF FIVE OR MORE PARAMETERS AND RC NOT
;& SET THEN, OPTION 2 WAS PASSED IN */
if ((argc >= 5) && !(rc))
{
/* 2. . SET OPTION 2 PASSED IN */
strcpy (option2, argv[4]);
#if defined (SQLDEBUG)
printf ("\nRestore Optional Parameter 2 = %s\n", option2);
#endif
/* 1. ELSE (OPTION 2 NOT SENT IN) */
}
else
{
/* 2. . PARAMETER NOT USED, SET TO NULL */
option2[0] = '\0';
#if defined (SQLDEBUG)
printf("\nNote, no restore optional parameter 2 provided\n");
#endif
/* 1. ENDIF (WAS THERE AN OPTION 2 PARAMETER?) */
}
/* 1. EXECUTE THE SQL DBM BACKUP COMMAND FILE */
/* 1. IF NO ERRORS, THEN CONTINUE */
if (!(rc))
{
unsigned char progn[13];
unsigned char outp[255];
strcpy (progn, "SQLDREST.CMD");
_searchenv(progn, "PATH", outp);
strcpy (command, outp);
strcat (command, " ");
strcat (command, dbdir);
strcat (command, " ");
strcat (command, drive);
strcat (command, " ");
strcat (command, option1);
if (option2[0] != '\0')
{
strcat (command, " ");
strcat (command, option2);
}
#if defined (SQLDEBUG)
printf ("\nCommand to be executed = %s\n", command);
#endif
rc = system (command);
/* 1. ENDIF */
}
#if defined (SQLDEBUG)
{
unsigned char line[80];
printf("\nPress Enter to Continue. ");
gets(line);
}
#endif
/* 1. RETURN RC */
return (rc);
/* ENDPROC (RESTORE) */
}
/*******************************-END PROCEDURE-******************************/