[3] | 1 |
|
---|
| 2 | #define INCL_NOPMAPI
|
---|
| 3 | #define INCL_BASE
|
---|
| 4 | #define INCL_DOSMODULEMGR
|
---|
| 5 | #include <os2.h>
|
---|
| 6 | #define INCL_REXXSAA
|
---|
| 7 | #include <rexxsaa.h> /* needed for RexxStart() */
|
---|
| 8 |
|
---|
| 9 | #include <global.h>
|
---|
| 10 | #include <globstr.h>
|
---|
| 11 | #include <globrexx.h>
|
---|
| 12 |
|
---|
| 13 | BOOL REXX_SetVariable (PSZ VarName, PCHAR StringPtr, ULONG StringLen) {
|
---|
| 14 | SHVBLOCK SharedVarBlock;
|
---|
| 15 |
|
---|
| 16 | SharedVarBlock.shvnext = NULL;
|
---|
| 17 | SharedVarBlock.shvname.strptr = VarName;
|
---|
| 18 | SharedVarBlock.shvname.strlength = strlen(VarName);
|
---|
| 19 | SharedVarBlock.shvvalue.strptr = StringPtr;
|
---|
| 20 | SharedVarBlock.shvvalue.strlength = StringLen;
|
---|
| 21 | SharedVarBlock.shvcode = RXSHV_SET;
|
---|
| 22 | if ((RexxVariablePool(&SharedVarBlock)) && (SharedVarBlock.shvret==0))
|
---|
| 23 | return FALSE;
|
---|
| 24 | return TRUE;
|
---|
| 25 | }
|
---|
| 26 |
|
---|
| 27 | BOOL REXX_SetVariableViaPSZ (PSZ VarName, PSZ PSZPtr) {
|
---|
| 28 | ULONG PSZLength = strlen(PSZPtr);
|
---|
| 29 | return REXX_SetVariable (VarName, PSZPtr, PSZLength);
|
---|
| 30 | }
|
---|
| 31 |
|
---|
| 32 | BOOL REXX_SetVariableViaULONG (PSZ VarName, ULONG Value) {
|
---|
| 33 | CHAR TempBuffer[12];
|
---|
| 34 | ultoa (Value, TempBuffer, 10);
|
---|
| 35 | return REXX_SetVariableViaPSZ (VarName, TempBuffer);
|
---|
| 36 | }
|
---|
| 37 |
|
---|
| 38 | BOOL REXX_SetVariableViaULONGHex (PSZ VarName, ULONG Value) {
|
---|
| 39 | CHAR TempBuffer[12];
|
---|
| 40 | ultoa (Value, TempBuffer, 16);
|
---|
| 41 | return REXX_SetVariableViaPSZ (VarName, TempBuffer);
|
---|
| 42 | }
|
---|
| 43 |
|
---|
| 44 | LONG REXX_GetStemVariable (PCHAR DestPtr, ULONG DestMaxLength, PSZ VarNameBase, USHORT VarNameID) {
|
---|
| 45 | ULONG VarNameBaseLen = strlen(VarNameBase);
|
---|
| 46 | CHAR VarWorker[256];
|
---|
| 47 | PCHAR TmpPos = (PCHAR)((ULONG)&VarWorker+VarNameBaseLen);
|
---|
| 48 | SHVBLOCK SharedVarBlock;
|
---|
| 49 |
|
---|
| 50 | if (DestMaxLength==0)
|
---|
| 51 | return -1; // No destination space...
|
---|
| 52 |
|
---|
| 53 | *DestPtr = 0; // Set NUL-string
|
---|
| 54 |
|
---|
| 55 | if ((VarNameBaseLen==0) || (VarNameBaseLen>250))
|
---|
| 56 | return -1; // Buffer-overflow or no variable
|
---|
| 57 |
|
---|
| 58 | memcpy(&VarWorker, VarNameBase, VarNameBaseLen);
|
---|
| 59 | if (*(TmpPos-1)!=0x2E)
|
---|
| 60 | return -1; // No stem variable
|
---|
| 61 | itoa(VarNameID, TmpPos, 10);
|
---|
| 62 |
|
---|
| 63 | SharedVarBlock.shvnext = NULL;
|
---|
| 64 | SharedVarBlock.shvname.strptr = (PCHAR)&VarWorker;
|
---|
| 65 | SharedVarBlock.shvname.strlength = strlen(VarWorker);
|
---|
| 66 | SharedVarBlock.shvvalue.strptr = DestPtr;
|
---|
| 67 | SharedVarBlock.shvvalue.strlength = DestMaxLength-1;
|
---|
| 68 | SharedVarBlock.shvcode = RXSHV_FETCH;
|
---|
| 69 | if ((RexxVariablePool(&SharedVarBlock)) && (SharedVarBlock.shvret==0))
|
---|
| 70 | return -1;
|
---|
| 71 | TmpPos = DestPtr+SharedVarBlock.shvvaluelen;
|
---|
| 72 | *TmpPos = 0; // Set terminating NUL
|
---|
| 73 | return SharedVarBlock.shvvaluelen;
|
---|
| 74 | }
|
---|
| 75 |
|
---|
| 76 | BOOL REXX_SetStemVariable (PSZ VarNameBase, USHORT VarNameID, PCHAR StringPtr, ULONG StringLen) {
|
---|
| 77 | ULONG VarNameBaseLen = strlen(VarNameBase);
|
---|
| 78 | CHAR VarWorker[256];
|
---|
| 79 | PCHAR TmpPos = (PCHAR)((ULONG)&VarWorker+VarNameBaseLen);
|
---|
| 80 | SHVBLOCK SharedVarBlock;
|
---|
| 81 |
|
---|
| 82 | if ((VarNameBaseLen==0) || (VarNameBaseLen>250))
|
---|
| 83 | return FALSE; // Buffer-overflow or no variable
|
---|
| 84 |
|
---|
| 85 | memcpy(&VarWorker, VarNameBase, VarNameBaseLen);
|
---|
| 86 | if (*(TmpPos-1)!=0x2E)
|
---|
| 87 | return FALSE; // No stem variable
|
---|
| 88 | itoa(VarNameID, TmpPos, 10);
|
---|
| 89 |
|
---|
| 90 | SharedVarBlock.shvnext = NULL;
|
---|
| 91 | SharedVarBlock.shvname.strptr = (PCHAR)&VarWorker;
|
---|
| 92 | SharedVarBlock.shvname.strlength = strlen(VarWorker);
|
---|
| 93 | SharedVarBlock.shvvalue.strptr = StringPtr;
|
---|
| 94 | SharedVarBlock.shvvalue.strlength = StringLen;
|
---|
| 95 | SharedVarBlock.shvcode = RXSHV_SET;
|
---|
| 96 | if ((RexxVariablePool(&SharedVarBlock)) && (SharedVarBlock.shvret==0))
|
---|
| 97 | return FALSE;
|
---|
| 98 | return TRUE;
|
---|
| 99 | }
|
---|
| 100 |
|
---|
| 101 | BOOL REXX_SetStemVariableViaPSZ (PSZ VarNameBase, USHORT VarNameID, PSZ PSZPtr) {
|
---|
| 102 | ULONG PSZLength = strlen(PSZPtr);
|
---|
| 103 | return REXX_SetStemVariable (VarNameBase, VarNameID, PSZPtr, PSZLength);
|
---|
| 104 | }
|
---|