OS/2 FAQ


OS/2 Programming FAQ - пpогpаммиpование. Статья 028

Q Как пристегивать свои функции к рекс-интерпретатору
A
(DZ FAQ) dz

Живой пример из U1. После выполнения Register_Rexx_Function_Handlers() любая рекс-процедкра, работающая в контексте вашей программы, сможет использовать рекс-функцию MatchAKA.

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







LONG   EXPENTRY MatchAKA(
PSZ        name,                     /* function name              */
LONG       argc,                     /* count of arguments         */
PRXSTRING  argv,                     /* argument RXSTRINGs         */
PSZ        queue,                    /* current Rexx queue         */
PRXSTRING  retstr );                 /* returned string value      */


extern "SYSTEM" void
DeRegister_Rexx_Function_Handlers( void )
{
RexxDeregisterFunction("MatchAKA");
}


bool
Register_Rexx_Function_Handlers( void )
{

atexit( DeRegister_Rexx_Function_Handlers );

RexxRegisterFunctionExe("MatchAKA", (PFN)MatchAKA );

return Ok;
}



/*********************************************************************/
/*                                                                   */
/* MatchAKA - External Rexx function                                 */
/*                                                                   */
/*********************************************************************/


LONG   EXPENTRY MatchAKA(
PSZ        name,                     /* function name              */
LONG       argc,                     /* count of arguments         */
PRXSTRING  argv,                     /* argument RXSTRINGs         */
PSZ        queue,                    /* current Rexx queue         */
PRXSTRING  retstr )                  /* returned string value      */
{

fido_addr       a;
ftn_def         def;

const char *in = RXSTRPTR(argv[0]);
a.aparse( in );

ftn::match( def, a ); // Это моя C++-ная функция, которая, собственно,
// матчит акашки. То есть выполняет саму работу.

const char *res = ((string)def.fido_a).c_str();

strcpy(RXSTRPTR(*retstr), res);  // copy over current precision

retstr->strlength = strlen(res); // set new length
return 0;                              // completed successfully
}

Текст файла RexxFunc.c можно взять здесь

К предыдущей статье | К оглавлению раздела | К следующей статье

Вернуться к списку разделов FAQ.

Если у вас есть вопросы или пожелания, пишите, мы будем рады.

Данный FAQ cоставили Ivan Borovicov и Viatcheslav Odintsov (2:5020/181) на основе OS/2 FAQ Дмитрия Завалишина (dz) и материалов переписки в группе эхоконференций su.os2.*. Оформление статей: Николай Королев. Программирование JSP для RU/2: Евгений Кулешов. Благодарности: Дмитрию Максимовичу (MaximDim) за громадную помощь на первых этапах и Дмитрию Бану (banshee) за его помощь при проверке текста.



Интересные ссылки:
Комментариев к странице: 0 | Добавить комментарий
Домой | Проект ядро Core/2 | Проект OS/4 Download | Новости | Гостевая книга | Подробно обо всем | Нужные программы | Проекты | OS/2 FAQ | Всячина | За и Против | Металлолом | #OS2Russian | RDM/2 | Весёлые картинки | Наша галерея | Доска объявлений | Карта сайта | ПОИСК | ФОРУМ