/*###################################################################################
#
#   Embperl - Copyright (c) 1997-2008 Gerald Richter / ecos gmbh  www.ecos.de
#   Embperl - Copyright (c) 2008-2015 Gerald Richter
#   Embperl - Copyright (c) 2015-2023 actevy.io
#
#   You may distribute under the terms of either the GNU General Public
#   License or the Artistic License, as specified in the Perl README file.
#   For use with Apache httpd and mod_perl, see also Apache copyright.
#
#   THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
#   IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
#   WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
#
###################################################################################*/



/*
    Errors and Return Codes
*/

enum tRc
    {
    ok = 0,
    rcStackOverflow,
    rcStackUnderflow,
    rcEndifWithoutIf,
    rcElseWithoutIf,
    rcEndwhileWithoutWhile,
    rcEndtableWithoutTable,
    rcCmdNotFound,
    rcOutOfMemory,
    rcPerlVarError,
    rcHashError,
    rcArrayError,
    rcFileOpenErr,    
    rcMissingRight,
    rcNoRetFifo,
    rcMagicError,
    rcWriteErr,
    rcUnknownNameSpace,
    rcInputNotSupported,
    rcCannotUsedRecursive,
    rcEndtableWithoutTablerow,
    rcTablerowOutsideOfTable, 
    rcEndtextareaWithoutTextarea,
    rcArgStackOverflow,
    rcEvalErr,
    rcNotCompiledForModPerl,
    rcLogFileOpenErr,
    rcExecCGIMissing,
    rcIsDir,
    rcXNotSet,
    rcDummy,
    rcUnknownVarType,
    rcPerlWarn,
    rcVirtLogNotSet,
    rcMissingInput,
    rcExit,
    rcUntilWithoutDo, 
    rcEndforeachWithoutForeach, 
    rcMissingArgs,
    rcNotAnArray,
    rcCallInputFuncFailed,
    rcCallOutputFuncFailed,
    rcSubNotFound,
    rcImportStashErr,
    rcCGIError,
    rcUnclosedHtml,
    rcUnclosedCmd,
    rcNotAllowed,
    rcNotHashRef,
    rcTagMismatch,
    rcCleanupErr,
    rcCryptoWrongHeader,
    rcCryptoWrongSyntax,
    rcCryptoNotSupported,
    rcCryptoBufferOverflow,
    rcCryptoErr,
    rcUnknownProvider,
    rcXalanError,
    rcLibXSLTError,
    rcMissingParam,
    rcNotCodeRef,
    rcUnknownRecipe,
    rcTypeMismatch,
    rcChdirError,
    rcUnknownSyntax,
    rcCannotCheckUri,
    rcSetupSessionErr,
    rcRefcntNotOne,
    rcApacheErr,
    rcTooDeepNested,
    rcUnknownOption,
    rcTimeFormatErr,
    rcSubCallNotRequest,
    rcTokenNotFound,  
    rcNotScalarRef,
    rcFormDataTruncated,
    rcForbidden = 403,
    rcNotFound  = 404,
    rcDecline   = -1
    } ;


/*
    Debug Flags
*/

enum dbg
    {
    dbgNone	    = 0,
    dbgStd          = 1,
    dbgMem          = 2,
    dbgEval         = 4,
    dbgCmd          = 8,
    dbgEnv          = 16,
    dbgForm         = 32,
    dbgTab          = 64,
    dbgInput        = 128,
    dbgFlushOutput  = 256,
    dbgFlushLog     = 512,
    dbgAllCmds      = 1024,
    dbgSource       = 2048,
    dbgFunc         = 4096,
    dbgLogLink      = 8192,
    dbgDefEval      = 16384,
    dbgOutput           = 0x08000,
    dbgDOM              = 0x10000,
    dbgRun              = 0x20000,
    dbgHeadersIn        = 0x40000,
    dbgShowCleanup      = 0x80000,
    dbgProfile          = 0x100000,
    dbgSession          = 0x200000,
    dbgImport		= 0x400000,
    dbgBuildToken       = 0x800000,
    dbgParse            = 0x1000000,
    dbgObjectSearch     = 0x2000000,
    dbgCache            = 0x4000000,
    dbgCompile          = 0x8000000,
    dbgXML              = 0x10000000,
    dbgXSLT             = 0x20000000,
    dbgCheckpoint       = 0x40000000,
    
    dbgAll  = -1
    } ;

/*
    Option Flags
*/

enum opt
    {
    optDisableVarCleanup       = 1,
    optDisableEmbperlErrorPage = 2,
    optSafeNamespace           = 4,
    optOpcodeMask              = 8,
    optRawInput                = 16,
    optSendHttpHeader          = 32,
    optEarlyHttpHeader         = 64,
    optDisableChdir            = 128,
    optDisableFormData         = 256,
    optDisableHtmlScan         = 512,
    optDisableInputScan        = 1024,
    optDisableTableScan        = 2048,
    optDisableMetaScan         = 4096,
    optAllFormData             = 8192,
    optRedirectStdout          = 16384,
    optUndefToEmptyValue       = 32768,
    optNoHiddenEmptyValue      = 65536,
    optAllowZeroFilesize       = 0x20000, 
    optReturnError             = 0x40000, 
    optKeepSrcInMemory         = 0x80000,
    optKeepSpaces	       = 0x100000,
    optOpenLogEarly            = 0x200000,
    optNoUncloseWarn	       = 0x400000,
    optDisableSelectScan       = 0x800000,
    optEnableChdir             = 0x1000000,
    optFormDataNoUtf8          = 0x2000000,
    optShowBacktrace           = 0x8000000,
    optChdirToSource           = 0x10000000
    } ;

/* --- output escaping --- */

enum tEscMode
    {
    escNone     = 0,
    escHtml     = 1,
    escUrl      = 2,
    escEscape   = 4,
    escXML      = 8,

    escStd      = 7,
    
    escHtmlUtf8 = 128
    } ;

/* --- output mode --- */

enum tOutputMode
    {
    omodeHtml   = 0,
    omodeXml    = 1,
    } ;

/* --- output esc charset --- */

enum tOutputEscChareset
    {
    ocharsetUtf8  = 0,
    ocharsetLatin1  = 1,
    ocharsetLatin2  = 2,
    } ;

/* --- input escaping --- */

enum tInputEscMode
    {
    iescNone        = 0,
    iescHtml        = 1,
    iescUrl         = 2,
    iescRemoveTags  = 4,
    } ;


/* --- session handling --- */

enum tSessionMode
    {
    smodeNone       = 0,
    smodeUDatCookie = 1,
    smodeUDatParam  = 2,
    smodeUDatUrl    = 4,

    smodeSDatParam  = 0x20
    } ;

#define smodeStd smodeUDatCookie 

/* --- misc --- */

#if !defined (pid_t) && defined (WIN32)
#define pid_t int
#endif

extern pid_t nPid ;

#ifdef WIN32
#define PATH_SEPARATOR_CHAR '\\' 
#define PATH_SEPARATOR_STR  "\\"
#else
#define PATH_SEPARATOR_CHAR '/' 
#define PATH_SEPARATOR_STR  "/"
#endif