There are few restrictions in writing ProBoard executables. For C programs there are actually only two major restriction: long math & floating point operations.
Due to the fact that all compilers generate function calls to multiply, divide and shift long integers, and that every compiler vendor uses its own array of functions, it is impossible to include these functions in the ProBoard SDK. As a result, it is not directly possible to perform these operations on long values (eg. long1 = long2 * long3). However, we did include functions to perform these operations, but you will have to call these functions explicitly (eg. long1 = l_mul(long2,long3)). People who know their compiler well, can work around this problem by extracting the long math functions from the standard library, and linking them with the PEX file. For example, the long math functions used by the Zortech compiler are in the module LMATH.OBJ, located in the library ZLC.LIB. Extracting this module is as simple as : ZORLIB ZLS *LMATH;
These are the ProBoard long math functions that you can use:
long l_mul(long1,long2) Multiply 2 long values = long1 * long2 long l_div(long1,long2) Divide 2 long values = long1 / long2 long l_mod(long1,long2) Modulo of 2 long values = long1 % long2 long l_shl(long1,int1) Left shift a long value = long1 << int1 long l_shr(long1,int1) Right shift a long value = long1 >> int1
The functions l_div(), l_mod(), l_shl() and l_shr() are also available for unsigned long values: ul_div(), ul_mod(), ul_shl() and ul_shr().
Floating point operations are NOT supported. So it is not possible to use 'double' and 'float' variables & constants.
Another major restriction only affects C++ programs that are compiled with some other compiler than Borland C/C++ 3.x or Zortech C++ 3.0. In a ProBoard C++ program that is not compiled with one of the compilers mentioned, you can't declare global variables that have constructors or destructors (ie. no static constructors & destructors). So this will compile fine, but will certainly crash your machine:
class myclass { int a; public: x() { .... some action .... } ~x() { .... some action .... } }; myclass some_global_object; main() { ... }
You can, however, use objects with constructors and destructors, as long as they are declared within a function. So this would work:
main() { myclass some_local_object; .... }