[Q]: Как пристегивать свои функции к рекс-интерпретатору [A]: Dmitry Zavalishin (2:5020/32) Живой пример из 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 /* needed for RexxStart() */ #include /* needed for printf() */ #include /* needed for strlen() */ #include /* 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 }