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 | Весёлые картинки | Наша галерея | Доска объявлений | Карта сайта | ПОИСК | ФОРУМ