home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / btrvrx.zip / BTRVREXX.C next >
Text File  |  1993-08-21  |  3KB  |  110 lines

  1. #define _DLL
  2. #define _MT
  3. #define INCL_REXXSAA
  4. #include <stdlib.h>
  5. #include <stdio.h>
  6. #include <string.h>
  7. #include <rexxsaa.h>
  8.  
  9. RexxFunctionHandler BTRV;
  10.  
  11. extern USHORT _Far16 _Pascal BTRCALL(USHORT, PSZ, PSZ,
  12.                      PUSHORT, PSZ, BYTE, CHAR);
  13.  
  14. ULONG BTRV(
  15.      CHAR      *Name,           /* Name of the function         */
  16.      ULONG     Argc,            /* Number of arguments          */
  17.      RXSTRING  Argv[],          /* List of argument strings     */
  18.      CHAR      *Queuename,      /* Current queue name           */
  19.      RXSTRING  *Retstr)         /* Returned result string       */
  20.  
  21. /*
  22.    ARGV[0] = operation (digits)
  23.    ARGV[1] = name of posblock variable (-> 128 byte static area)
  24.    ARGV[2] = name of databuf variable
  25.    ARGV[3] = name of datalen variable (-> digits)
  26.    ARGV[4] = name of keybuf variable
  27.    ARGV[5] = keynum (digits)
  28. */
  29.  
  30. {
  31.  
  32.   USHORT operation;
  33.   CHAR posblock[128];
  34.   CHAR databuf[32000];
  35.   USHORT datalen;
  36.   CHAR keybuf[255];
  37.   CHAR keynum;
  38.   CHAR datalen_string[6];
  39.  
  40.   BYTE keylen = 255;
  41.   USHORT rcs;
  42.   ULONG rc;
  43.  
  44.   SHVBLOCK pos_var;
  45.   SHVBLOCK data_var;
  46.   SHVBLOCK len_var;
  47.   SHVBLOCK key_var;
  48.  
  49.   if (Argc != 6)
  50.         return 40;
  51.  
  52.   pos_var.shvnext = &data_var;
  53.   pos_var.shvcode = RXSHV_SYFET;
  54.   pos_var.shvret = (UCHAR)0;
  55.   MAKERXSTRING(pos_var.shvname, Argv[1].strptr, Argv[1].strlength);
  56.   MAKERXSTRING(pos_var.shvvalue, posblock, 128);
  57.   pos_var.shvvaluelen = 128;
  58.   data_var.shvnext = &len_var;
  59.   data_var.shvcode = RXSHV_SYFET;
  60.   data_var.shvret = (UCHAR)0;
  61.   MAKERXSTRING(data_var.shvname, Argv[2].strptr, Argv[2].strlength);
  62.   MAKERXSTRING(data_var.shvvalue, databuf, 32000);
  63.   data_var.shvvaluelen = 32000;
  64.   len_var.shvnext = &key_var;
  65.   len_var.shvcode = RXSHV_SYFET;
  66.   len_var.shvret = (UCHAR)0;
  67.   MAKERXSTRING(len_var.shvname, Argv[3].strptr, Argv[3].strlength);
  68.   MAKERXSTRING(len_var.shvvalue, datalen_string, 5);
  69.   len_var.shvvaluelen = 5;
  70.   key_var.shvnext = (PSHVBLOCK)0;
  71.   key_var.shvcode = RXSHV_SYFET;
  72.   key_var.shvret = (UCHAR)0;
  73.   MAKERXSTRING(key_var.shvname, Argv[4].strptr, Argv[4].strlength);
  74.   MAKERXSTRING(key_var.shvvalue, keybuf, 255);
  75.   key_var.shvvaluelen = 255;
  76.   rc = RexxVariablePool(&pos_var);
  77.   if (rc != 0)
  78.         return 40;
  79.  
  80.   operation = atoi(Argv[0].strptr);
  81.   keynum = atoi(Argv[5].strptr);
  82.   datalen = atoi(datalen_string);
  83.  
  84.   rcs = BTRCALL(operation, posblock, databuf, &datalen, keybuf,
  85.                    keylen, keynum);
  86.  
  87.   sprintf(Retstr->strptr, "%d", rcs);
  88.   Retstr->strlength = strlen(Retstr->strptr);
  89.   pos_var.shvcode = RXSHV_SYSET;
  90.   pos_var.shvret = (UCHAR)0;
  91.   MAKERXSTRING(pos_var.shvvalue, posblock, 128);
  92.   pos_var.shvvaluelen = 128;
  93.   data_var.shvcode = RXSHV_SYSET;
  94.   data_var.shvret = (UCHAR)0;
  95.   MAKERXSTRING(data_var.shvvalue, databuf, datalen);
  96.   data_var.shvvaluelen = datalen;
  97.   len_var.shvcode = RXSHV_SYSET;
  98.   len_var.shvret = (UCHAR)0;
  99.   sprintf(datalen_string, "%d", datalen);
  100.   MAKERXSTRING(len_var.shvvalue, datalen_string, strlen(datalen_string));
  101.   len_var.shvvaluelen = strlen(datalen_string);
  102.   key_var.shvcode = RXSHV_SYSET;
  103.   key_var.shvret = (UCHAR)0;
  104.   MAKERXSTRING(key_var.shvvalue, keybuf, key_var.shvvaluelen);
  105.   rc = RexxVariablePool(&pos_var);
  106.   if (rc != 0)
  107.         return 40;
  108.   return 0;
  109. }
  110.