Nп/п : 5 из 100
От : FAQServer 2:5020/181 20 мар 25 07:37:06
К : All 20 мар 25 07:44:02
Тема : PRG29 - Rexx subcommand handler - пpимеp
----------------------------------------------------------------------------------
@MSGID: 2:5020/181 dd5ee83a
@RFC-Message-ID: 1@mhm.com.lan>
@TZUTC: 0300
[Q]: Rexx subcommand handler - пpимеp
[A]: Dmitry Zavalishin (2:5020/32)
/************************ U1 ***************************
*
* Copyright (C) 1991-1995 by Infinity Soft
*
* Module : Rexx subcommand handler
*
* $Log: RexxScom.c $
* Revision 1.2 1995/11/05 13:52:48 dz
* current.
*
* Revision 1.1 1995/05/08 16:04:26 dz
* Initial revision
*
*
**/
#define INCL_RXFUNC
#define INCL_RXSUBCOM
#define INCL_RXSHV
#define INCL_REXXSAA
#include /* needed for RexxStart() */
#include /* needed for printf() */
#include /* needed for strlen() */
#include /* needed for strlen() */
APIRET EXPENTRY U1_Command(PRXSTRING cmd, PUSHORT flags, PRXSTRING ret );
bool
Register_Rexx_Subcommand_Handler( void )
{
RexxRegisterSubcomExe("U1", (PFN)U1_Command, NULL);
return Ok;
}
#define TEST( v, s ) ( strncmp( v, s, sizeof( s ) - 1 ) == 0 )
#defineSC_SUCCESS{ strcpy(ret->strptr, "0"); ret->strlength = 1; return 0; }
#defineSC_FAILURE(code){ *flags = RXSUBCOM_FAILURE; strcpy(ret->strptr,
code); ret->strlength = 1; return 0; }
#defineSC_ERROR(code){ *flags = RXSUBCOM_ERROR; strcpy(ret->strptr,
code); ret->strlength = 1; return 0; }
#define CMD( tail ){ if( (rc = sc_##tail( cmd )) != 0 ) {
sprintf( rcs, "%d", rc ); SC_ERROR(rcs); } }
static sc_log( string & );
static sc_warning( string & );
static sc_error( string & );
static sc_fatal( string & );
APIRET EXPENTRY
U1_Command(PRXSTRING r_cmd, PUSHORT flags, PRXSTRING ret )
{
string cmd( r_cmd->strptr );
const char *p1, *p2;
const maxv = 25;
char verb[maxv];
// for CMD macro
intrc;
charrcs[10];
p1 = cmd.c_str();
p2 = strpbrk( p1, " \t" );
strncpy( verb, p1, min( maxv, p2-p1 ) );
verb[min( maxv, p2-p1 )] = `\0`;
strlwr( verb );
while( *p2 == ` ` || *p2 == `\t` )
p2++;
cmd = p2;
debug( "Rexx cmd got verb `%s` and tail `%s`", verb, cmd.c_str() );
if( TEST( verb, "log" ) )CMD( log )else
if( TEST( verb, "warning" ) )CMD( warning )else
if( TEST( verb, "error" ) )CMD( error )else
if( TEST( verb, "fatal" ) )CMD( fatal )else
{
error( EI_None, "Rexx subcommand: unknown verb `%s`", verb );
SC_FAILURE("33");
}
SC_SUCCESS;
}
static int
sc_log( string &s )
{
log( "x#", "%s", s.c_str() );
return 0;
}
static int
sc_warning( string &s )
{
warning( EI_None, "%s", s.c_str() );
return 0;
}
static int
sc_error( string &s )
{
error( EI_None, "%s", s.c_str() );
return 0;
}
static int
sc_fatal( string &s )
{
fatal( EC_Dunno, EI_None, "%s", s.c_str() );
return 0;
}
--- INN 2.7.3 (20250201 prerelease)
* Origin: This echo is READ-ONLY. Send %HELP to FAQSERVER at (2:5020/181)
SEEN-BY: 4500/1 5001/100 5019/40 5020/77 81 101
181 545 848 1042 1941 1955
SEEN-BY: 5020/4441 8086 12000 5030/1081 1900
5060/900 5097/31 6090/1
@PATH: 5020/181 12000 4441