Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

134 lines
3.2 KiB

//+-------------------------------------------------------------------------
//
// Microsoft Windows
//
// Copyright (C) Microsoft Corporation, 1998 - 1999
//
// File: try.c
//
//--------------------------------------------------------------------------
#ifndef __STDC__
#define __STDC__ 1
#endif
#include <string.h> /* String support. */
#include <tcl.h>
// #include "tcldllUtil.h" /* Our utility service definitions. */
int
TclExt_tryCmd(
ClientData clientData,
Tcl_Interp *interp,
int argc,
char *argv[])
/*
*
* Function description:
*
* This is the main entry point for the Tcl try command.
*
*
* Arguments:
*
* ClientData - Ignored.
*
* interp - The Tcl interpreter in force.
*
* argc - The number of arguments received.
*
* argv - The array of actual arguments.
*
*
* Return value:
*
* TCL_OK - All went well
* TCL_ERROR - An error was encountered, details in the return string.
*
*
* Side effects:
*
* None.
*
*/
{
/*
* Local Variable Definitions: %local-vars%
*
Variable Description
-------- --------------------------------------------*/
char
*tryCmd, /* The command to try. */
*catchCmd, /* The command to do if tryCmd fails. */
*varName; /* The name of the variable to receive the error string, if any. */
int
status; /* Status return code. */
/*
* try <commands> catch [<varName>] <errorCommands>
*/
#ifdef CMD_TRACE
int j;
for (j = 0; j < argc; j += 1)
(void)printf("{%s} ", argv[j]);
(void)printf("\n");
breakpoint;
#endif
if ((4 > argc) || (5 < argc))
{
Tcl_AppendResult(
interp,
"wrong number of args: should be \"",
argv[0],
" <command> catch [<varName>] <errorCommand>\"",
NULL);
status = TCL_ERROR;
goto error_exit;
}
if (strcmp("catch", argv[2]))
{
Tcl_AppendResult(
interp,
"invalid args: should be \"",
argv[0],
" <command> catch [<varName>] <errorCommand>\"",
NULL);
status = TCL_ERROR;
goto error_exit;
}
/*
* Execute the first set of commands. If an error occurs, execute the
* second set of commands, with the local variable errorString set to the
* result of the first execution.
*/
if (5 == argc)
{
varName = argv[3];
catchCmd = argv[4];
}
else
{
varName = NULL;
catchCmd = argv[3];
}
tryCmd = argv[1];
if (TCL_ERROR == (status = Tcl_Eval(interp, tryCmd)))
{
if (NULL != varName)
(void)Tcl_SetVar(interp, varName, interp->result, 0);
status = Tcl_Eval(interp, catchCmd);
}
error_exit:
return status;
} /* end TclExt_tryCmd */
/* end try.c */