3GL Program Rules and Guidelines
The following rules and guidelines should be observed when coding User Defined Built-In Functions:
-
Do not prefix any variable or #define value with X_, V_ or U_.
-
Avoid using variable or #define names that conflict with any of the names and types defined in X_GLODEF.H , X_GLOUSR.H or X_BIF000.H.
-
All U_BIFnnn.DLL's must reside in the ....\x_lansa\execute directory at the time they are to be executed.
-
Use the Visual LANSA type definition variables X_SHORT, X_LONG, X_DOUBLE, X_CHAR and X_VCHAR to define working storage in your function whenever possible. You may also use X_PSHORT, X_PLONG, X_PDOUBLE, X_PCHAR and X_PVCHAR as pointer declarations to the same types.
-
Use the VISUAL LANSA variable prefixes whenever possible. For example:
s is the prefix for X_SHORT |
l is the prefix for X_LONG |
d is the prefix for X_DOUBLE |
c is the prefix for X_CHAR |
vch is the prefix for X_VCHAR |
p is the prefix for a pointer |
a is the prefix for an array |
Prefixes can accumulate, so "apsOperation" indicates that nominal variable "Operation" is an array of pointers to X_SHORTs. Similarly pvchName indicates that this is a pointer to an X_VCHAR variable that contains a "Name". |
-
Use the U_BIF macros whenever possible to retrieve and return Built-In Function argument variables. This will go a long way towards insulating your application from future changes to the VISUAL LANSA code generation techniques.
-
Use one Built-In Function per C source file and one per DLL.
This rule will making porting of your code to other platforms much easier. Multi-entry point DLLs (or shared objects) are much harder to address under some Linux systems, so avoid hitting upon this problem later when you come to port your Built-In Functions. -
Most user defined Built-In Functions reference various .H header files shipped with Visual LANSA. Do not change these files as they are replaced every time a new version of VISUAL LANSA is installed and all your changes will be lost.
-
A user defined Built-In Function has the following arguments:
struct X_IDS *pX_Ids, |
|
struct X_PRO *pX_Pro, |
|
struct X_FUN *pX_Fun, |
|
struct X_BIF *pX_Bif, |
|
struct X_FLD X_Fld[], |
|
struct X_LIST X_List[], |
|
X_SHORT sInCount, |
|
X_SHORT sInVec[], |
|
X_SHORT sRetCount, |
|
X_SHORT sRetVec[] |
|
Modification of storage pointed to by any of these arguments, other than by U_BIF macros, may result in unpredictable results and application failure. Do not modify storage outside the direct scope of your function other than by using the U_BIF macros. Failure to observe this rule may lead to loss of integrity in your application and future compatibility problems. |