windows/rxsubcom.cpp
Go to the documentation of this file.
1 /*----------------------------------------------------------------------------*/
2 /* */
3 /* Copyright (c) 1995, 2004 IBM Corporation. All rights reserved. */
4 /* Copyright (c) 2005-2009 Rexx Language Association. All rights reserved. */
5 /* */
6 /* This program and the accompanying materials are made available under */
7 /* the terms of the Common Public License v1.0 which accompanies this */
8 /* distribution. A copy is also available at the following address: */
9 /* http://www.oorexx.org/license.html */
10 /* */
11 /* Redistribution and use in source and binary forms, with or */
12 /* without modification, are permitted provided that the following */
13 /* conditions are met: */
14 /* */
15 /* Redistributions of source code must retain the above copyright */
16 /* notice, this list of conditions and the following disclaimer. */
17 /* Redistributions in binary form must reproduce the above copyright */
18 /* notice, this list of conditions and the following disclaimer in */
19 /* the documentation and/or other materials provided with the distribution. */
20 /* */
21 /* Neither the name of Rexx Language Association nor the names */
22 /* of its contributors may be used to endorse or promote products */
23 /* derived from this software without specific prior written permission. */
24 /* */
25 /* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */
26 /* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */
27 /* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */
28 /* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT */
29 /* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */
30 /* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */
31 /* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */
32 /* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */
33 /* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */
34 /* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */
35 /* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
36 /* */
37 /*----------------------------------------------------------------------------*/
38 /*********************************************************************/
39 /* */
40 /* Program Name: WINRXCMD.C */
41 /* */
42 /* Descriptive Name: Windows Command Line Program for Subcommand */
43 /* Interface. */
44 /* */
45 /*********************************************************************/
46 #include <string.h> /* Include string functions */
47 #include <stdio.h>
48 #include "rexx.h" /* for REXX functionality */
49 #include "RexxInternalApis.h" /* Get private REXXAPI API's */
50 #include "RexxErrorCodes.h" /* error constants */
51 
52 #define BUFFERLEN 256 /* Length of message bufs used*/
53 #define DLLNAME "rexx.dll"
54  /* Macro for argv[1] compares */
55 #define CASE(x) if(!_stricmp(x,argv[1]))
56 
57 
58 void parmerr(int);
59 
60 int __cdecl main( int argc, char *argv[ ], char *envp[ ] )
61 { /* */
62  /* Must be at lease 1 argument*/
63  if (argc<2)
64  {
66  }
67 
68  CASE("REGISTER")
69  { /* Registration check */
70  /* requires 4 parameters */
71  if (argc<5)
72  {
74  }
75  /* Go register the environment*/
76  return RexxRegisterSubcomDll(argv[2], argv[3], argv[4], NULL, RXSUBCOM_DROPPABLE);
77  } /* */
78  CASE("QUERY")
79  { /* Query Check */
80  /* requires 3 parameters */
81  if (argc<3)
82  {
84  }
85  /* if only 3 passed, dummy 4 */
86  if (argc<4)
87  {
88  argv[3]="";
89  }
90  unsigned short flags;
91  return RexxQuerySubcom(argv[2], argv[3], &flags, NULL);
92  } /* */
93  CASE("DROP")
94  { /* Drop Check */
95  /* Must pass at least 3 args*/
96  if (argc<3)
97  {
99  }
100  /* if only 3 passed, dummy 4 */
101  if (argc<4)
102  {
103  argv[3]="";
104  }
105  return RexxDeregisterSubcom(argv[2], argv[3]);
106  }
107  CASE("LOAD")
108  {
109  if (argc<3)
110  {
112  }
113  if (argc<4)
114  {
115  argv[3]=""; /* if only 3 passed, dummy 4 */
116  }
117  return RexxLoadSubcom(argv[2], argv[3]);
118  }
119  parmerr(Error_RXSUBC_general); /* Otherwise, must be a error */
120  return 0; /* dummy return */
121 }
122 
123 
124 void parmerr(int arg )
125 {
126  char dataarea[BUFFERLEN]; /* buf addr to return message */
127  size_t msglen = 0; /* length of returned message */
128  HINSTANCE hDll=NULL;
129 
130  memset(dataarea,0,BUFFERLEN);
131 
132  hDll = LoadLibrary(DLLNAME);
133  if (hDll)
134  {
135  if (!LoadString(hDll, arg, dataarea, BUFFERLEN))
136  {
137  strcpy(dataarea,"Error, but no error message available.");
138  }
139  }
140  else
141  {
142  strcpy(dataarea,"Error, but no error message available because REXX.DLL not loaded.");
143  }
144 
145  printf("REX%d: %s",arg, dataarea);
146  FreeLibrary(hDll);
147  exit(-1);
148 }
#define Error_RXSUBC_general
#define Error_RXSUBC_load
#define Error_RXSUBC_register
#define Error_RXSUBC_drop
#define Error_RXSUBC_query
RexxReturnCode REXXENTRY RexxLoadSubcom(const char *, const char *)
RexxReturnCode REXXENTRY RexxQuerySubcom(CONSTANT_STRING, CONSTANT_STRING, unsigned short *, char *)
RexxReturnCode REXXENTRY RexxDeregisterSubcom(CONSTANT_STRING, CONSTANT_STRING)
RexxReturnCode REXXENTRY RexxRegisterSubcomDll(CONSTANT_STRING, CONSTANT_STRING, CONSTANT_STRING, CONSTANT_STRING, size_t)
#define RXSUBCOM_DROPPABLE
Definition: rexxapidefs.h:72
#define BUFFERLEN
#define CASE(x)
#define DLLNAME
int __cdecl main(int argc, char *argv[], char *envp[])
void parmerr(int)