OS/2 FAQ
OS/2 Programming FAQ - пpогpаммиpование. Статья 028
| Как пристегивать свои функции к рекс-интерпретатору | |
|
(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 | Весёлые картинки | Наша галерея | Доска объявлений | Карта сайта | ПОИСК | ФОРУМ