source: trunk/stdcode/globrexx.c

Last change on this file was 3, checked in by erdmann, 8 years ago

fixing 2 bugs in mmi_customdll.c, unpacking STDCODE.RAR into its own directory, removing all binaries (.obj, .exe) from repo

  • Property svn:eol-style set to native
File size: 3.7 KB
Line 
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
13BOOL 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
27BOOL REXX_SetVariableViaPSZ (PSZ VarName, PSZ PSZPtr) {
28 ULONG PSZLength = strlen(PSZPtr);
29 return REXX_SetVariable (VarName, PSZPtr, PSZLength);
30 }
31
32BOOL REXX_SetVariableViaULONG (PSZ VarName, ULONG Value) {
33 CHAR TempBuffer[12];
34 ultoa (Value, TempBuffer, 10);
35 return REXX_SetVariableViaPSZ (VarName, TempBuffer);
36 }
37
38BOOL REXX_SetVariableViaULONGHex (PSZ VarName, ULONG Value) {
39 CHAR TempBuffer[12];
40 ultoa (Value, TempBuffer, 16);
41 return REXX_SetVariableViaPSZ (VarName, TempBuffer);
42 }
43
44LONG 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
76BOOL 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
101BOOL REXX_SetStemVariableViaPSZ (PSZ VarNameBase, USHORT VarNameID, PSZ PSZPtr) {
102 ULONG PSZLength = strlen(PSZPtr);
103 return REXX_SetStemVariable (VarNameBase, VarNameID, PSZPtr, PSZLength);
104 }
Note: See TracBrowser for help on using the repository browser.