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 | }
|
---|