75 lines
2.0 KiB
C
75 lines
2.0 KiB
C
/****************************************************************
|
|
* *
|
|
* Copyright 2001, 2011 Fidelity Information Services, Inc *
|
|
* *
|
|
* This source code contains the intellectual property *
|
|
* of its copyright holder(s), and is made available *
|
|
* under a license. If you do not know the terms of *
|
|
* the license, please stop and do not read further. *
|
|
* *
|
|
****************************************************************/
|
|
|
|
#include "mdef.h"
|
|
|
|
#include "compiler.h"
|
|
/*
|
|
#include "opcode.h"
|
|
*/
|
|
|
|
#include "toktyp.h"
|
|
#include "job.h"
|
|
#include "advancewindow.h"
|
|
|
|
error_def (ERR_RPARENMISSING);
|
|
|
|
int jobparameters (oprtype *c)
|
|
{
|
|
char *parptr;
|
|
/* This is a workaround for the moment. The former maximum size of the
|
|
* parameter string was completely incapable of handling the variety
|
|
* of string parameters that may be passed. To further compound things,
|
|
* no checks exist to enforce upper limits on parameter string lengths.
|
|
* This new maximum was reached by calculating the maximum length of
|
|
* the job parameter string (presuming each possible qualifier is represented
|
|
* once and only once) and tacking on a safety net. This came to
|
|
* 10 255 byte strings (plus length byte), 1 longword, and 17 single byte
|
|
* identifiers for each of the job keywords. The maximum of 3000 leaves
|
|
* a little room for expansion in the future
|
|
*/
|
|
char parastr[3000];
|
|
DCL_THREADGBL_ACCESS;
|
|
|
|
SETUP_THREADGBL_ACCESS;
|
|
parptr = parastr;
|
|
if (TK_LPAREN != TREF(window_token))
|
|
{
|
|
if (TK_COLON != TREF(window_token))
|
|
{
|
|
if (!one_job_param (&parptr))
|
|
return FALSE;
|
|
}
|
|
} else
|
|
{
|
|
advancewindow ();
|
|
for (;;)
|
|
{
|
|
if (!one_job_param (&parptr))
|
|
return FALSE;
|
|
if (TK_COLON == TREF(window_token))
|
|
advancewindow ();
|
|
else if (TK_RPAREN == TREF(window_token))
|
|
{
|
|
advancewindow ();
|
|
break;
|
|
} else
|
|
{
|
|
stx_error (ERR_RPARENMISSING);
|
|
return FALSE;
|
|
}
|
|
}
|
|
}
|
|
*parptr++ = jp_eol;
|
|
*c = put_str (parastr,(mstr_len_t)(parptr - parastr));
|
|
return TRUE;
|
|
}
|