From comp.chem.msu.su!f118.n5020!f400.n5020!f144.n5020!f32.n5020!not-for-mail Wed Aug 23 17:54:41 1995
Path: comp.chem.msu.su!f118.n5020!f400.n5020!f144.n5020!f32.n5020!not-for-mail
Newsgroups: fido7.su.os2.src
Distribution: fido7
X-Comment-To: All
From: Dmitry Zavalishin <Dmitry.Zavalishin@f32.n5020.z2.fidonet.org>
Date: Wed, 23 Aug 95 12:34:42 +0400
Subject: rexx subcommand server
Message-ID: <809185013@f32.n5020.z2.ftn>
Organization: The roses are red, the violetes are blue...
X-FTN-AREA: SU.OS2.SRC
X-FTN-MSGID: 2:5020/32 303b2ef5
X-FTN-PID: GED/2 A0611 UNREG
X-FTN-Tearline: UNREG UNREG
X-FTN-Origin: The roses are red, the violetes are blue... (2:5020/32)
X-FTN-SEEN-BY: 50/128 316 319 332 502 520 461/121 464/200 466/10 469/999 4615/4
X-FTN-SEEN-BY: 4625/1 5000/31 44 5010/21 5012/4 5015/28 5020/32 35 52 62 68 69 109
X-FTN-SEEN-BY: 5020/114 118 144 157 163 190 200 204 214 225 242 251 252 269 300 310
X-FTN-SEEN-BY: 5020/400 463 603 5026/9 5031/3 5047/12 5049/1 5050/9 5051/15 5054/10
X-FTN-SEEN-BY: 5060/1 5077/3 5078/15 5080/22 5085/250 5090/3
X-FTN-PATH: 5020/32 144 400
X-FTN-PATH: 5020/118
Lines: 158

Hi,


=== Cut ===
/************************ U1 ***************************\
 *
 *  Copyright (C) 1991-1995 by Infinity Soft
 *
 *  Module  :   Rexx subcommand handler
 *
 *      $Log: RexxScom.c $
 * 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()        */

#include "rexx.h"
#include "dllinits.h"

#include <log.h>


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;
 }











=== Cut ===

dz



