home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 11 Util
/
11-Util.zip
/
BACKRE.ZIP
/
BACKUP.C
< prev
next >
Wrap
C/C++ Source or Header
|
1990-09-11
|
12KB
|
363 lines
/******************************************************************************
OCO SOURCE MATERIALS: IBM CONFIDENTIAL (IBM CONFIDENTIAL-RESTRICTED WHEN
COMBINED WITH THE AGGREGATED OCO SOURCE MODULES FOR
THIS PROGRAM)
MODULE NAME: Backup
COMPONENT NAME: BASE SUPPORT UTILITIES
LPP NAME: Database Manager
DESCRIPTIVE NAME: This BACKUP.EXE intercepts the call from DBM and then runs
SQLDBACK.CMD which in turns calls OS/2 Backup.exe or this
command file can be modified to call whatever the user
wants to support.
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 backup.
DEPENDENCIES: This function must be placed in the path before the OS/2
Backup.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 want to debug during DBM execution.
INPUT:
parameter 1 - d:\path\*.* number of the database directory to be
back up. If omitted, then error will be returned.
parameter 2 - d: where the backup files are to be placed.
if omitted, then error will be returned.
parameter 3 - /S</M/A> the backup options to be used with backup.exe
if omitted, then error will be returned.
OUTPUT:
NORMAL RETURN:
DOSEXIT with 0.
ERROR RETURN:
DOSEXIT as defined by BACKUP.EXE (4 - Terminated due to error)
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 (BACKUP) */
/*+ 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 (NO ERROR) */
/*+ 1. RETURN RC */
/*+ ENDPROC (BACKUP) */
/******************************-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 (BACKUP) */
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,rc2;
unsigned char dbdir[20];
unsigned char drive[20];
unsigned char option1[20];
unsigned char option2[20];
unsigned char command2[300];
/* 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 ("\nBackup Drive provided = %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 ("\nBackup 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 backup 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 ("\nBackup 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 backup 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, "SQLDBACK.CMD");
_searchenv(progn, "PATH", outp);
strcpy (command2, outp);
strcat (command2, " ");
strcat (command2, dbdir);
strcat (command2, " ");
strcat (command2, drive);
strcat (command2, " ");
strcat (command2, option1);
if (option2[0] != '\0')
{
strcat (command2, " ");
strcat (command2, option2);
}
#if defined (SQLDEBUG)
printf ("\nCommand 2 to be executed = \n%.80s\n", command2);
#endif
rc2 = strlen(command2);
#if defined (SQLDEBUG)
printf ("\nlength of command 2 = %d\n", rc2);
#endif
rc=system(command2);
#if defined (SQLDEBUG)
printf ("\nreturn code of command2 = %d\n", rc);
#endif
/* 1. ENDIF (NO ERROR) */
}
#if defined (SQLDEBUG)
{
unsigned char line[80];
printf("\nPress Enter to Continue. ");
gets(line);
}
#endif
/* 1. RETURN RC */
return (rc);
/* ENDPROC (BACKUP) */
}
/*******************************-END PROCEDURE-******************************/