Rexx subcommand handler - ਬ
dz

/************************ 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 <rexxsaa.h>                   /* needed for RexxStart()     */
#include <stdio.h>                     /* needed for printf()        */
#include <string.h>                    /* needed for strlen()        */
#include <strng.h>                    /* 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 )

#define	SC_SUCCESS		{ strcpy(ret->strptr, "0"); ret->strlength = 1; return 0; }
#define	SC_FAILURE(code)	{ *flags = RXSUBCOM_FAILURE; strcpy(ret->strptr, code); ret->strlength = 1; return 0; }
#define	SC_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
	int	rc;
	char	rcs[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;
	}











