Документ взят из кэша поисковой машины. Адрес оригинального документа : http://crydee.sai.msu.ru/ftproot/pub/misc/doc/rexx-example
Дата изменения: Wed Aug 23 17:54:40 1995
Дата индексирования: Sun Apr 10 04:37:06 2016
Кодировка:
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
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 /* needed for RexxStart() */
#include /* needed for printf() */
#include /* needed for strlen() */
#include /* needed for strlen() */

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

#include


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