home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / slfinsta.zip / rexx.c < prev    next >
C/C++ Source or Header  |  2000-03-26  |  26KB  |  1,002 lines

  1. /* $Id: rexx.c,v 1.1 2000/03/27 04:52:57 ktk Exp $ */
  2.  
  3. /*
  4.  *  rexx.c (C) 1999,2000 Brian Smith <dbsoft@technologist.com>
  5.  *         (C) 2000 Achim Hasenmueller <achimha@innotek.de>
  6.  */
  7.  
  8. #define INCL_WIN       /* Window Manager Functions     */
  9. #define INCL_DOS
  10. #define INCL_BASE
  11. #define INCL_RXFUNC
  12. #define INCL_RXMACRO
  13. #define INCL_RXARI
  14. #define INCL_RXSYSEXIT
  15. #define INCL_RXSUBCOM
  16. #define INCL_RXSHV
  17.  
  18. #include <os2.h>
  19. #include <stdio.h>
  20. #include <stddef.h>
  21. #include <stdlib.h>
  22. #include <stdarg.h>
  23. #include <string.h>
  24. #include <fcntl.h>
  25. #include <process.h>
  26. #include <sys/types.h>
  27. #ifndef __EMX__
  28. #include <rexxsaa.h>
  29. #endif
  30. #include "install.h"
  31. #include "instsup.h"
  32. #include "dw.h"
  33. #include "picture.h"
  34.  
  35. extern HWND hwnddir, hwndentry, hwndcombo, hwndper, mainhwnd;
  36. extern RexxCommands rexxcommands[];
  37. extern char finishedscript[], installdir[], installdir2[];
  38. extern int INSTALLER_PACKAGE_COUNT, packagesselected[], packagechosen;
  39.  
  40. RexxVar *root = NULL;
  41.  
  42. RexxVar *find_rexxvar(char *varname)
  43. {
  44.     RexxVar *tmp = root;
  45.  
  46.     while(tmp)
  47.     {
  48.         if(stricmp(tmp->varname, varname) == 0)
  49.             return tmp;
  50.         tmp = tmp->next;
  51.     }
  52.     return NULL;
  53. }
  54.  
  55. int new_rexxvar(char *varname, RXSTRING rxstring)
  56. {
  57.     RexxVar *new = find_rexxvar(varname);
  58.  
  59.     if(new)
  60.     {
  61.         free(new->rxstring.strptr);
  62.         memcpy(&new->rxstring, &rxstring, sizeof(RXSTRING));
  63.         new->rxstring.strptr = strdup(rxstring.strptr);
  64.         return TRUE;
  65.     }
  66.     else
  67.     {
  68.         new = malloc(sizeof(RexxVar));
  69.         if(new)
  70.         {
  71.             new->varname = strdup(varname);
  72.             memcpy(&new->rxstring, &rxstring, sizeof(RXSTRING));
  73.             new->rxstring.strptr = strdup(rxstring.strptr);
  74.  
  75.             new->next = NULL;
  76.  
  77.             if (!root)
  78.                 root = new;
  79.             else
  80.             {
  81.                 RexxVar *prev = NULL, *tmp = root;
  82.                 while(tmp)
  83.                 {
  84.                     prev = tmp;
  85.                     tmp = tmp->next;
  86.                 }
  87.                 if(prev)
  88.                     prev->next = new;
  89.                 else
  90.                     root = new;
  91.             }
  92.             return TRUE;
  93.         }
  94.     }
  95.     return FALSE;
  96. }
  97.  
  98. int remove_rexxvar(char *varname)
  99. {
  100.     RexxVar *prev = NULL, *tmp = root;
  101.  
  102.     while(tmp)
  103.     {
  104.         if(stricmp(tmp->varname, varname) == 0)
  105.         {
  106.             if(!prev)
  107.             {
  108.                 free(tmp->rxstring.strptr);
  109.                 free(tmp->varname);
  110.                 free(tmp);
  111.                 root = NULL;
  112.                 return 0;
  113.             }
  114.             else
  115.             {
  116.                 prev->next = tmp->next;
  117.                 free(tmp->rxstring.strptr);
  118.                 free(tmp->varname);
  119.                 free(tmp);
  120.                 return 0;
  121.             }
  122.         }
  123.         tmp = tmp->next;
  124.     }
  125.     return 0;
  126. }
  127.  
  128. ULONG EXPENTRY rexx_dw_box_pack_start(PCSZ Name, ULONG ArgCount, RXSTRING Args[], PCSZ Queuename, PRXSTRING Retstr)
  129. {
  130.     if(ArgCount < 6)
  131.         return 40;
  132.  
  133.     dw_box_pack_start((HWND)atol(Args[0].strptr),(HWND)atol(Args[1].strptr),(int)atoi(Args[2].strptr),
  134.                       (int)atoi(Args[3].strptr),(int)atoi(Args[4].strptr),(int)atoi(Args[5].strptr));
  135.  
  136.     Retstr->strlength = 0;
  137.     return 0;
  138. }
  139.  
  140. ULONG EXPENTRY rexx_dw_box_pack_end(PCSZ Name, ULONG ArgCount, RXSTRING Args[], PCSZ Queuename, PRXSTRING Retstr)
  141. {
  142.     if(ArgCount < 6)
  143.         return 40;
  144.  
  145.     dw_box_pack_end((HWND)atol(Args[0].strptr),(HWND)atol(Args[1].strptr),(int)atoi(Args[2].strptr),
  146.                       (int)atoi(Args[3].strptr),(int)atoi(Args[4].strptr),(int)atoi(Args[5].strptr));
  147.  
  148.     Retstr->strlength = 0;
  149.     return 0;
  150. }
  151.  
  152. ULONG EXPENTRY rexx_dw_box_new(PCSZ Name, ULONG ArgCount, RXSTRING Args[], PCSZ Queuename, PRXSTRING Retstr)
  153. {
  154.     HWND handle;
  155.  
  156.     if(ArgCount < 2)
  157.         return 40;
  158.  
  159.     handle = dw_box_new(atoi(Args[0].strptr),atoi(Args[1].strptr));
  160.  
  161.     sprintf(Retstr->strptr, "%lu", (ULONG)handle);
  162.  
  163.     Retstr->strlength = strlen(Retstr->strptr);
  164.     return 0;
  165. }
  166.  
  167. ULONG EXPENTRY rexx_dw_groupbox_new(PCSZ Name, ULONG ArgCount, RXSTRING Args[], PCSZ Queuename, PRXSTRING Retstr)
  168. {
  169.     HWND handle;
  170.  
  171.     if(ArgCount < 2)
  172.         return 40;
  173.  
  174.     handle = dw_groupbox_new(atoi(Args[0].strptr),atoi(Args[1].strptr));
  175.  
  176.     sprintf(Retstr->strptr, "%lu", (ULONG)handle);
  177.  
  178.     Retstr->strlength = strlen(Retstr->strptr);
  179.     return 0;
  180. }
  181.  
  182. ULONG EXPENTRY rexx_dw_window_show(PCSZ Name, ULONG ArgCount, RXSTRING Args[], PCSZ Queuename, PRXSTRING Retstr)
  183. {
  184.     int ret;
  185.  
  186.     if(ArgCount < 1)
  187.         return 40;
  188.  
  189.     ret = dw_window_show((HWND)atol(Args[0].strptr));
  190.  
  191.     sprintf(Retstr->strptr, "%d", ret);
  192.  
  193.     Retstr->strlength = strlen(Retstr->strptr);
  194.     return 0;
  195. }
  196.  
  197. ULONG EXPENTRY rexx_dw_window_hide(PCSZ Name, ULONG ArgCount, RXSTRING Args[], PCSZ Queuename, PRXSTRING Retstr)
  198. {
  199.     int ret;
  200.  
  201.     if(ArgCount < 1)
  202.         return 40;
  203.  
  204.     ret = dw_window_hide((HWND)atol(Args[0].strptr));
  205.  
  206.     sprintf(Retstr->strptr, "%d", ret);
  207.  
  208.     Retstr->strlength = strlen(Retstr->strptr);
  209.     return 0;
  210. }
  211.  
  212. ULONG EXPENTRY rexx_dw_window_destroy(PCSZ Name, ULONG ArgCount, RXSTRING Args[], PCSZ Queuename, PRXSTRING Retstr)
  213. {
  214.     int ret;
  215.  
  216.     if(ArgCount < 1)
  217.         return 40;
  218.  
  219.     ret = dw_window_destroy((HWND)atol(Args[0].strptr));
  220.  
  221.     sprintf(Retstr->strptr, "%d", ret);
  222.  
  223.     Retstr->strlength = strlen(Retstr->strptr);
  224.     return 0;
  225. }
  226.  
  227. ULONG EXPENTRY rexx_dw_window_set_font(PCSZ Name, ULONG ArgCount, RXSTRING Args[], PCSZ Queuename, PRXSTRING Retstr)
  228. {
  229.     int ret;
  230.  
  231.     if(ArgCount < 2)
  232.         return 40;
  233.  
  234.     ret = dw_window_set_font((HWND)atol(Args[0].strptr), Args[1].strptr);
  235.  
  236.     sprintf(Retstr->strptr, "%d", ret);
  237.  
  238.     Retstr->strlength = strlen(Retstr->strptr);
  239.     return 0;
  240. }
  241.  
  242. ULONG EXPENTRY rexx_dw_window_set_color(PCSZ Name, ULONG ArgCount, RXSTRING Args[], PCSZ Queuename, PRXSTRING Retstr)
  243. {
  244.     int ret;
  245.  
  246.     if(ArgCount < 3)
  247.         return 40;
  248.  
  249.     ret = dw_window_set_color((HWND)atol(Args[0].strptr), atol(Args[1].strptr), atol(Args[2].strptr));
  250.  
  251.     sprintf(Retstr->strptr, "%d", ret);
  252.  
  253.     Retstr->strlength = strlen(Retstr->strptr);
  254.     return 0;
  255. }
  256.  
  257. ULONG EXPENTRY rexx_dw_window_new(PCSZ Name, ULONG ArgCount, RXSTRING Args[], PCSZ Queuename, PRXSTRING Retstr)
  258. {
  259.     HWND handle;
  260.  
  261.     if(ArgCount < 3)
  262.         return 40;
  263.  
  264.     handle = dw_window_new((HWND)atol(Args[0].strptr), Args[1].strptr, atol(Args[2].strptr));
  265.  
  266.     sprintf(Retstr->strptr, "%lu", (ULONG)handle);
  267.  
  268.     Retstr->strlength = strlen(Retstr->strptr);
  269.     return 0;
  270. }
  271.  
  272. ULONG EXPENTRY rexx_dw_bitmap_new(PCSZ Name, ULONG ArgCount, RXSTRING Args[], PCSZ Queuename, PRXSTRING Retstr)
  273. {
  274.     HWND handle;
  275.  
  276.     if(ArgCount < 1)
  277.         return 40;
  278.  
  279.     handle = dw_bitmap_new(atol(Args[0].strptr));
  280.  
  281.     sprintf(Retstr->strptr, "%lu", (ULONG)handle);
  282.  
  283.     Retstr->strlength = strlen(Retstr->strptr);
  284.     return 0;
  285. }
  286.  
  287. ULONG EXPENTRY rexx_dw_slider_new(PCSZ Name, ULONG ArgCount, RXSTRING Args[], PCSZ Queuename, PRXSTRING Retstr)
  288. {
  289.     HWND handle;
  290.  
  291.     if(ArgCount < 1)
  292.         return 40;
  293.  
  294.     handle = dw_slider_new(atol(Args[0].strptr));
  295.  
  296.     sprintf(Retstr->strptr, "%lu", (ULONG)handle);
  297.  
  298.     Retstr->strlength = strlen(Retstr->strptr);
  299.     return 0;
  300. }
  301.  
  302. ULONG EXPENTRY rexx_dw_container_new(PCSZ Name, ULONG ArgCount, RXSTRING Args[], PCSZ Queuename, PRXSTRING Retstr)
  303. {
  304.     HWND handle;
  305.  
  306.     if(ArgCount < 1)
  307.         return 40;
  308.  
  309.     handle = dw_container_new(atol(Args[0].strptr));
  310.  
  311.     sprintf(Retstr->strptr, "%lu", (ULONG)handle);
  312.  
  313.     Retstr->strlength = strlen(Retstr->strptr);
  314.     return 0;
  315. }
  316.  
  317. ULONG EXPENTRY rexx_dw_text_new(PCSZ Name, ULONG ArgCount, RXSTRING Args[], PCSZ Queuename, PRXSTRING Retstr)
  318. {
  319.     HWND handle;
  320.  
  321.     if(ArgCount < 2)
  322.         return 40;
  323.  
  324.     handle = dw_text_new(Args[0].strptr, atol(Args[1].strptr));
  325.  
  326.     sprintf(Retstr->strptr, "%lu", (ULONG)handle);
  327.  
  328.     Retstr->strlength = strlen(Retstr->strptr);
  329.     return 0;
  330. }
  331.  
  332. ULONG EXPENTRY rexx_dw_mle_new(PCSZ Name, ULONG ArgCount, RXSTRING Args[], PCSZ Queuename, PRXSTRING Retstr)
  333. {
  334.     HWND handle;
  335.  
  336.     if(ArgCount < 1)
  337.         return 40;
  338.  
  339.     handle = dw_mle_new(atol(Args[0].strptr));
  340.  
  341.     sprintf(Retstr->strptr, "%lu", (ULONG)handle);
  342.  
  343.     Retstr->strlength = strlen(Retstr->strptr);
  344.     return 0;
  345. }
  346.  
  347. ULONG EXPENTRY rexx_dw_entryfield_new(PCSZ Name, ULONG ArgCount, RXSTRING Args[], PCSZ Queuename, PRXSTRING Retstr)
  348. {
  349.     HWND handle;
  350.  
  351.     if(ArgCount < 2)
  352.         return 40;
  353.  
  354.     handle = dw_entryfield_new(Args[0].strptr, atol(Args[1].strptr));
  355.  
  356.     sprintf(Retstr->strptr, "%lu", (ULONG)handle);
  357.  
  358.     Retstr->strlength = strlen(Retstr->strptr);
  359.     return 0;
  360. }
  361.  
  362. ULONG EXPENTRY rexx_dw_combobox_new(PCSZ Name, ULONG ArgCount, RXSTRING Args[], PCSZ Queuename, PRXSTRING Retstr)
  363. {
  364.     HWND handle;
  365.  
  366.     if(ArgCount < 2)
  367.         return 40;
  368.  
  369.     handle = dw_combobox_new(Args[0].strptr, atol(Args[1].strptr));
  370.  
  371.     sprintf(Retstr->strptr, "%lu", (ULONG)handle);
  372.  
  373.     Retstr->strlength = strlen(Retstr->strptr);
  374.     return 0;
  375. }
  376.  
  377. ULONG EXPENTRY rexx_dw_button_new(PCSZ Name, ULONG ArgCount, RXSTRING Args[], PCSZ Queuename, PRXSTRING Retstr)
  378. {
  379.     HWND handle;
  380.  
  381.     if(ArgCount < 2)
  382.         return 40;
  383.  
  384.     handle = dw_button_new(Args[0].strptr, atol(Args[1].strptr));
  385.  
  386.     sprintf(Retstr->strptr, "%lu", (ULONG)handle);
  387.  
  388.     Retstr->strlength = strlen(Retstr->strptr);
  389.     return 0;
  390. }
  391.  
  392. ULONG EXPENTRY rexx_dw_spinbutton_new(PCSZ Name, ULONG ArgCount, RXSTRING Args[], PCSZ Queuename, PRXSTRING Retstr)
  393. {
  394.     HWND handle;
  395.  
  396.     if(ArgCount < 2)
  397.         return 40;
  398.  
  399.     handle = dw_spinbutton_new(Args[0].strptr, atol(Args[1].strptr));
  400.  
  401.     sprintf(Retstr->strptr, "%lu", (ULONG)handle);
  402.  
  403.     Retstr->strlength = strlen(Retstr->strptr);
  404.     return 0;
  405. }
  406.  
  407. ULONG EXPENTRY rexx_dw_checkbox_new(PCSZ Name, ULONG ArgCount, RXSTRING Args[], PCSZ Queuename, PRXSTRING Retstr)
  408. {
  409.     HWND handle;
  410.  
  411.     if(ArgCount < 2)
  412.         return 40;
  413.  
  414.     handle = dw_checkbox_new(Args[0].strptr, atol(Args[1].strptr));
  415.  
  416.     sprintf(Retstr->strptr, "%lu", (ULONG)handle);
  417.  
  418.     Retstr->strlength = strlen(Retstr->strptr);
  419.     return 0;
  420. }
  421.  
  422. ULONG EXPENTRY rexx_dw_listbox_new(PCSZ Name, ULONG ArgCount, RXSTRING Args[], PCSZ Queuename, PRXSTRING Retstr)
  423. {
  424.     HWND handle;
  425.  
  426.     if(ArgCount < 1)
  427.         return 40;
  428.  
  429.     handle = dw_listbox_new(atol(Args[0].strptr));
  430.  
  431.     sprintf(Retstr->strptr, "%lu", (ULONG)handle);
  432.  
  433.     Retstr->strlength = strlen(Retstr->strptr);
  434.     return 0;
  435. }
  436.  
  437. ULONG EXPENTRY rexx_dw_window_set_usize(PCSZ Name, ULONG ArgCount, RXSTRING Args[], PCSZ Queuename, PRXSTRING Retstr)
  438. {
  439.     if(ArgCount < 3)
  440.         return 40;
  441.  
  442.     dw_window_set_usize((HWND)atol(Args[0].strptr),atol(Args[1].strptr),atol(Args[2].strptr));
  443.  
  444.     Retstr->strlength = 0;
  445.     return 0;
  446. }
  447.  
  448. ULONG EXPENTRY rexx_dw_window_set_pos_size(PCSZ Name, ULONG ArgCount, RXSTRING Args[], PCSZ Queuename, PRXSTRING Retstr)
  449. {
  450.     if(ArgCount < 5)
  451.         return 40;
  452.  
  453.     dw_window_set_pos_size((HWND)atol(Args[0].strptr),atol(Args[1].strptr),atol(Args[2].strptr),atol(Args[3].strptr),atol(Args[4].strptr));
  454.  
  455.     Retstr->strlength = 0;
  456.     return 0;
  457. }
  458.  
  459. ULONG EXPENTRY rexx_dw_window_set_style(PCSZ Name, ULONG ArgCount, RXSTRING Args[], PCSZ Queuename, PRXSTRING Retstr)
  460. {
  461.     if(ArgCount < 3)
  462.         return 40;
  463.  
  464.     dw_window_set_style((HWND)atol(Args[0].strptr),atol(Args[1].strptr),atol(Args[2].strptr));
  465.  
  466.     Retstr->strlength = 0;
  467.     return 0;
  468. }
  469.  
  470. ULONG EXPENTRY rexx_dw_window_set_icon(PCSZ Name, ULONG ArgCount, RXSTRING Args[], PCSZ Queuename, PRXSTRING Retstr)
  471. {
  472.     if(ArgCount < 2)
  473.         return 40;
  474.  
  475.     dw_window_set_icon((HWND)atol(Args[0].strptr),atol(Args[1].strptr));
  476.  
  477.     Retstr->strlength = 0;
  478.     return 0;
  479. }
  480.  
  481. ULONG EXPENTRY rexx_dw_window_set_bitmap(PCSZ Name, ULONG ArgCount, RXSTRING Args[], PCSZ Queuename, PRXSTRING Retstr)
  482. {
  483.     if(ArgCount < 2)
  484.         return 40;
  485.  
  486.     dw_window_set_bitmap((HWND)atol(Args[0].strptr),atol(Args[1].strptr));
  487.  
  488.     Retstr->strlength = 0;
  489.     return 0;
  490. }
  491.  
  492. ULONG EXPENTRY rexx_dw_window_set_text(PCSZ Name, ULONG ArgCount, RXSTRING Args[], PCSZ Queuename, PRXSTRING Retstr)
  493. {
  494.     if(ArgCount < 2)
  495.         return 40;
  496.  
  497.     dw_window_set_text((HWND)atol(Args[0].strptr),Args[1].strptr);
  498.  
  499.     Retstr->strlength = 0;
  500.     return 0;
  501. }
  502.  
  503. ULONG EXPENTRY rexx_dw_window_disable(PCSZ Name, ULONG ArgCount, RXSTRING Args[], PCSZ Queuename, PRXSTRING Retstr)
  504. {
  505.     if(ArgCount < 1)
  506.         return 40;
  507.  
  508.     dw_window_disable((HWND)atol(Args[0].strptr));
  509.  
  510.     Retstr->strlength = 0;
  511.     return 0;
  512. }
  513.  
  514. ULONG EXPENTRY rexx_dw_window_enable(PCSZ Name, ULONG ArgCount, RXSTRING Args[], PCSZ Queuename, PRXSTRING Retstr)
  515. {
  516.     if(ArgCount < 1)
  517.         return 40;
  518.  
  519.     dw_window_enable((HWND)atol(Args[0].strptr));
  520.  
  521.     Retstr->strlength = 0;
  522.     return 0;
  523. }
  524.  
  525. ULONG EXPENTRY rexx_dw_window_set_pos(PCSZ Name, ULONG ArgCount, RXSTRING Args[], PCSZ Queuename, PRXSTRING Retstr)
  526. {
  527.     if(ArgCount < 3)
  528.         return 40;
  529.  
  530.     dw_window_set_pos((HWND)atol(Args[0].strptr),atol(Args[1].strptr),atol(Args[2].strptr));
  531.  
  532.     Retstr->strlength = 0;
  533.     return 0;
  534. }
  535.  
  536. ULONG EXPENTRY rexx_dw_screen_width(PCSZ Name, ULONG ArgCount, RXSTRING Args[], PCSZ Queuename, PRXSTRING Retstr)
  537. {
  538.     sprintf(Retstr->strptr, "%lu", (ULONG)dw_screen_width());
  539.  
  540.     Retstr->strlength = strlen(Retstr->strptr);
  541.     return 0;
  542. }
  543.  
  544. ULONG EXPENTRY rexx_dw_screen_height(PCSZ Name, ULONG ArgCount, RXSTRING Args[], PCSZ Queuename, PRXSTRING Retstr)
  545. {
  546.     sprintf(Retstr->strptr, "%lu", (ULONG)dw_screen_height());
  547.  
  548.     Retstr->strlength = strlen(Retstr->strptr);
  549.     return 0;
  550. }
  551.  
  552. ULONG EXPENTRY rexx_bitmapfile_new(PCSZ Name, ULONG ArgCount, RXSTRING Args[], PCSZ QueueName, PRXSTRING Retstr)
  553. {
  554.     HWND handle;
  555.     if (ArgCount != 1)
  556.         return 40;
  557.     handle = dw_bitmapfile_new(atol(Args[0].strptr));
  558.     sprintf(Retstr->strptr, "%lu", (ULONG)handle);
  559.  
  560.     Retstr->strlength = strlen(Retstr->strptr);
  561.     return 0;
  562. }
  563.  
  564. ULONG EXPENTRY rexx_bitmapfile_set_bitmap(PCSZ Name, ULONG ArgCount, RXSTRING Args[], PCSZ QueueName, PRXSTRING Retstr)
  565. {
  566.     if (ArgCount != 2)
  567.         return 40;
  568.     dw_bitmapfile_set_bitmap(atol(Args[0].strptr), Args[1].strptr);
  569.     Retstr->strlength = 0;
  570.     return 0;
  571. }
  572.  
  573. ULONG EXPENTRY rexx_grabfile(PCSZ Name, ULONG ArgCount, RXSTRING Args[], PCSZ Queuename, PRXSTRING Retstr)
  574. {
  575.     if(ArgCount < 1)
  576.         return 40;
  577.  
  578.     grabfile(Args[0].strptr);
  579.  
  580.     Retstr->strlength = 0;
  581.     return 0;
  582. }
  583.  
  584. ULONG EXPENTRY rexx_viewfile(PCSZ Name, ULONG ArgCount, RXSTRING Args[], PCSZ Queuename, PRXSTRING Retstr)
  585. {
  586.     static char viewfilename[1024];
  587.  
  588.     if(ArgCount < 1)
  589.         return 40;
  590.  
  591.     strcpy(viewfilename, Args[0].strptr);
  592.     _beginthread(readme, NULL, THREAD_STACK_SIZE, (void *)viewfilename);
  593.  
  594.     Retstr->strlength = 0;
  595.     return 0;
  596. }
  597.  
  598. ULONG EXPENTRY rexx_mleview(PCSZ Name, ULONG ArgCount, RXSTRING Args[], PCSZ Queuename, PRXSTRING Retstr)
  599. {
  600.     FILE *f;
  601.     ULONG bytes, point = -1;
  602.     char buffer[1024];
  603.     HWND hwndMLE;
  604.  
  605.     if(ArgCount < 2)
  606.         return 40;
  607.  
  608.     hwndMLE = (HWND)atol(Args[1].strptr);
  609.  
  610.     grabfile(Args[0].strptr);
  611.  
  612.     if((f = fopen(Args[0].strptr, "rb"))!= NULL)
  613.     {
  614.         WinSendMsg(hwndMLE, MLM_SETIMPORTEXPORT, MPFROMP(buffer), MPFROMLONG(1024L));
  615.         while(!feof(f))
  616.         {
  617.             bytes = fread(buffer, 1, 1024, f);
  618.             WinSendMsg(hwndMLE, MLM_IMPORT, MPFROMP(&point), MPFROMLONG(bytes));
  619.         }
  620.         fclose(f);
  621.         remove(Args[0].strptr);
  622.     }
  623.     Retstr->strlength = 0;
  624.     return 0;
  625. }
  626.  
  627. ULONG EXPENTRY rexx_setwindow(PCSZ Name, ULONG ArgCount, RXSTRING Args[], PCSZ Queuename, PRXSTRING Retstr)
  628. {
  629.     if(ArgCount < 1)
  630.         return 40;
  631.  
  632.     mainhwnd = (HWND)atol(Args[0].strptr);
  633.  
  634.     return 0;
  635. }
  636.  
  637. ULONG EXPENTRY rexx_setdircontainer(PCSZ Name, ULONG ArgCount, RXSTRING Args[], PCSZ Queuename, PRXSTRING Retstr)
  638. {
  639.    int j, count = 0;
  640.    unsigned long spacefree;
  641.    char buffer[256];
  642.    extern int drivelist[26];
  643.  
  644.  
  645.     if(ArgCount < 3)
  646.         return 40;
  647.  
  648.     hwnddir = (HWND)atol(Args[0].strptr);
  649.     hwndentry = (HWND)atol(Args[1].strptr);
  650.     hwndcombo = (HWND)atol(Args[2].strptr);
  651.  
  652.     setdir(hwnddir);
  653.     populatedir(hwnddir);
  654.  
  655.     for(j=3;j<27;j++)
  656.     {
  657.         spacefree = drivefree(j);
  658.         if(spacefree > 0)
  659.         {
  660.             drivelist[count] = j;
  661.             count++;
  662.             sprintf(buffer, "Drive %c: %lu megabytes free.", ('A'+j)-1, spacefree);
  663.             WinSendMsg(hwndcombo, LM_INSERTITEM, MPFROMSHORT(LIT_END), MPFROMP(buffer));
  664.         }
  665.     }
  666.     WinSendMsg(hwndcombo, LM_SELECTITEM, MPFROMSHORT(0), MPFROMSHORT(TRUE));
  667.  
  668.     Retstr->strlength = 0;
  669.     return 0;
  670. }
  671.  
  672. ULONG EXPENTRY rexx_setslider(PCSZ Name, ULONG ArgCount, RXSTRING Args[], PCSZ Queuename, PRXSTRING Retstr)
  673. {
  674.  
  675.     if(ArgCount < 1)
  676.         return 40;
  677.  
  678.     hwndper = (HWND)atol(Args[0].strptr);
  679.  
  680.     Retstr->strlength = 0;
  681.     return 0;
  682. }
  683.  
  684. ULONG EXPENTRY rexx_setbutton(PCSZ Name, ULONG ArgCount, RXSTRING Args[], PCSZ Queuename, PRXSTRING Retstr)
  685. {
  686.     int b;
  687.  
  688.     if(ArgCount < 2)
  689.         return 40;
  690.  
  691.     for(b=0;b<COMMANDMAX;b++)
  692.     {
  693.         if(!rexxcommands[b].id)
  694.         {
  695.             rexxcommands[b].id = atoi(Args[0].strptr);
  696.             strcpy(rexxcommands[b].file, Args[1].strptr);
  697.             b = COMMANDMAX;
  698.         }
  699.     }
  700.  
  701.     Retstr->strlength = 0;
  702.     return 0;
  703. }
  704.  
  705. ULONG EXPENTRY rexx_start(PCSZ Name, ULONG ArgCount, RXSTRING Args[], PCSZ Queuename, PRXSTRING Retstr)
  706. {
  707.     if(ArgCount < 1)
  708.         return 40;
  709.  
  710.     strcpy(finishedscript, Args[0].strptr);
  711.  
  712.     _beginthread(install_thread, NULL, THREAD_STACK_SIZE, NULL);
  713.  
  714.     Retstr->strlength = 0;
  715.     return 0;
  716. }
  717.  
  718. ULONG EXPENTRY rexx_packages(PCSZ Name, ULONG ArgCount, RXSTRING Args[], PCSZ Queuename, PRXSTRING Retstr)
  719. {
  720.     if(ArgCount < 0)
  721.         return 40;
  722.  
  723.     if(INSTALLER_PACKAGE_COUNT > 2)
  724.     {
  725.         if(WinDlgBox(HWND_DESKTOP, HWND_DESKTOP, &PackageDlgProc, NULLHANDLE, DLG_PACKAGESTOINSTALL, NULL) == DID_ERROR || packagechosen == FALSE)
  726.         {
  727.             if(packagechosen == FALSE)
  728.             {
  729.                 mesg("No packages selected for installation!");
  730.             }
  731.         }
  732.     }
  733.     else
  734.         packagesselected[1] = TRUE;
  735.  
  736.     Retstr->strlength = 0;
  737.     return 0;
  738. }
  739.  
  740. ULONG EXPENTRY rexx_updateentry(PCSZ Name, ULONG ArgCount, RXSTRING Args[], PCSZ Queuename, PRXSTRING Retstr)
  741. {
  742.     if(ArgCount < 0)
  743.         return 40;
  744.  
  745.     WinQueryWindowText(hwndentry, 400, installdir2);
  746.     strcpy(installdir, installdir2);
  747.  
  748.     Retstr->strlength = 0;
  749.     return 0;
  750. }
  751.  
  752. ULONG EXPENTRY rexx_savevar(PCSZ Name, ULONG ArgCount, RXSTRING Args[], PCSZ Queuename, PRXSTRING Retstr)
  753. {
  754.     if(ArgCount < 2)
  755.         return 40;
  756.  
  757.     new_rexxvar(Args[0].strptr, Args[1]);
  758.  
  759.     Retstr->strlength = 0;
  760.     return 0;
  761. }
  762.  
  763. ULONG EXPENTRY rexx_removevar(PCSZ Name, ULONG ArgCount, RXSTRING Args[], PCSZ Queuename, PRXSTRING Retstr)
  764. {
  765.     if(ArgCount < 1)
  766.         return 40;
  767.  
  768.     remove_rexxvar(Args[0].strptr);
  769.  
  770.     Retstr->strlength = 0;
  771.     return 0;
  772. }
  773.  
  774. ULONG EXPENTRY rexx_findvar(PCSZ Name, ULONG ArgCount, RXSTRING Args[], PCSZ Queuename, PRXSTRING Retstr)
  775. {
  776.     RexxVar *tmp;
  777.  
  778.     if(ArgCount < 1)
  779.         return 40;
  780.  
  781.  
  782.     tmp = find_rexxvar(Args[0].strptr);
  783.     if(tmp)
  784.     {
  785.         Retstr->strptr = tmp->rxstring.strptr;
  786.         Retstr->strlength = tmp->rxstring.strlength;
  787.     }
  788.     else
  789.     {
  790.         Retstr->strptr = NULL;
  791.         Retstr->strlength = 0;
  792.     }
  793.  
  794.     return 0;
  795. }
  796.  
  797. ULONG EXPENTRY rexx_mesg(PCSZ Name, ULONG ArgCount, RXSTRING Args[], PCSZ Queuename, PRXSTRING Retstr)
  798. {
  799.     if(ArgCount < 1)
  800.         return 40;
  801.  
  802.     mesg(Args[0].strptr);
  803.  
  804.     Retstr->strlength = 0;
  805.     return 0;
  806. }
  807.  
  808. ULONG EXPENTRY rexx_querycheck(PCSZ Name, ULONG ArgCount, RXSTRING Args[], PCSZ Queuename, PRXSTRING Retstr)
  809. {
  810.     HWND checkbox;
  811.     extern HAB hab;
  812.  
  813.     if(ArgCount < 1)
  814.         return 40;
  815.  
  816.     checkbox  = (HWND)atol(Args[0].strptr);
  817.  
  818.     if(!WinIsWindow(hab, checkbox))
  819.     {
  820.         Retstr->strptr = strdup("-1");
  821.         Retstr->strlength = 2;
  822.         return 0;
  823.     }
  824.     if(WinSendMsg(checkbox,BM_QUERYCHECK,0,0))
  825.         Retstr->strptr = strdup("1");
  826.     else
  827.         Retstr->strptr = strdup("0");
  828.  
  829.     Retstr->strlength = 1;
  830.     return 0;
  831. }
  832.  
  833. ULONG EXPENTRY rexx_setdir(PCSZ Name, ULONG ArgCount, RXSTRING Args[], PCSZ QueueName, PRXSTRING Retstr)
  834. {
  835.     if (ArgCount != 1)
  836.         return 40;
  837.     strcpy(installdir2, Args[0].strptr);
  838.     Retstr->strptr = NULL;
  839.     Retstr->strlength = 0;
  840.     return 0;    
  841. }
  842.  
  843. ULONG EXPENTRY rexx_querytext(PCSZ Name, ULONG ArgCount, RXSTRING Args[], PCSZ QueueName, PRXSTRING Retstr)
  844. {
  845.     if (ArgCount != 1)
  846.         return 40;
  847.     WinQueryWindowText(atol(Args[0].strptr), 254, Retstr->strptr);
  848.     Retstr->strlength = strlen(Retstr->strptr);
  849.     return 0;
  850. }
  851.  
  852. void rexx_init(void)
  853. {
  854.     RexxRegisterFunctionExe("dw_box_pack_start", &rexx_dw_box_pack_start);
  855.     RexxRegisterFunctionExe("dw_box_pack_end", &rexx_dw_box_pack_end);
  856.     RexxRegisterFunctionExe("dw_box_new", &rexx_dw_box_new);
  857.     RexxRegisterFunctionExe("dw_groupbox_new", &rexx_dw_groupbox_new);
  858.     RexxRegisterFunctionExe("dw_window_hide", &rexx_dw_window_hide);
  859.     RexxRegisterFunctionExe("dw_window_show", &rexx_dw_window_show);
  860.     RexxRegisterFunctionExe("dw_window_destroy", &rexx_dw_window_destroy);
  861.     RexxRegisterFunctionExe("dw_window_set_font", &rexx_dw_window_set_font);
  862.     RexxRegisterFunctionExe("dw_window_set_color", &rexx_dw_window_set_color);
  863.     RexxRegisterFunctionExe("dw_window_new", &rexx_dw_window_new);
  864.     RexxRegisterFunctionExe("dw_bitmap_new", &rexx_dw_bitmap_new);
  865.     RexxRegisterFunctionExe("dw_container_new", &rexx_dw_container_new);
  866.     RexxRegisterFunctionExe("dw_text_new", &rexx_dw_text_new);
  867.     RexxRegisterFunctionExe("dw_mle_new", &rexx_dw_mle_new);
  868.     RexxRegisterFunctionExe("dw_entryfield_new", &rexx_dw_entryfield_new);
  869.     RexxRegisterFunctionExe("dw_combobox_new", &rexx_dw_combobox_new);
  870.     RexxRegisterFunctionExe("dw_button_new", &rexx_dw_button_new);
  871.     RexxRegisterFunctionExe("dw_spinbutton_new", &rexx_dw_spinbutton_new);
  872.     RexxRegisterFunctionExe("dw_slider_new", &rexx_dw_slider_new);
  873.     RexxRegisterFunctionExe("dw_checkbox_new", &rexx_dw_checkbox_new);
  874.     RexxRegisterFunctionExe("dw_listbox_new", &rexx_dw_listbox_new);
  875.     RexxRegisterFunctionExe("dw_window_set_pos", &rexx_dw_window_set_pos);
  876.     RexxRegisterFunctionExe("dw_window_set_usize", &rexx_dw_window_set_usize);
  877.     RexxRegisterFunctionExe("dw_window_set_pos_size", &rexx_dw_window_set_pos_size);
  878.     RexxRegisterFunctionExe("dw_window_set_style", &rexx_dw_window_set_style);
  879.     RexxRegisterFunctionExe("dw_window_set_icon", &rexx_dw_window_set_icon);
  880.     RexxRegisterFunctionExe("dw_window_set_bitmap", &rexx_dw_window_set_bitmap);
  881.     RexxRegisterFunctionExe("dw_window_set_text", &rexx_dw_window_set_text);
  882.     RexxRegisterFunctionExe("dw_window_enable", &rexx_dw_window_enable);
  883.     RexxRegisterFunctionExe("dw_window_disable", &rexx_dw_window_disable);
  884.     RexxRegisterFunctionExe("dw_screen_width", &rexx_dw_screen_width);
  885.     RexxRegisterFunctionExe("dw_screen_height", &rexx_dw_screen_height);
  886.     RexxRegisterFunctionExe("dw_bitmapfile_new", &rexx_bitmapfile_new);
  887.     RexxRegisterFunctionExe("dw_bitmapfile_set_bitmap", &rexx_bitmapfile_set_bitmap);
  888.     RexxRegisterFunctionExe("inst_grabfile", &rexx_grabfile);
  889.     RexxRegisterFunctionExe("inst_viewfile", &rexx_viewfile);
  890.     RexxRegisterFunctionExe("inst_mleview", &rexx_mleview);
  891.     RexxRegisterFunctionExe("inst_setdircontainer", &rexx_setdircontainer);
  892.     RexxRegisterFunctionExe("inst_setwindow", &rexx_setwindow);
  893.     RexxRegisterFunctionExe("inst_setbutton", &rexx_setbutton);
  894.     RexxRegisterFunctionExe("inst_setslider", &rexx_setslider);
  895.     RexxRegisterFunctionExe("inst_start", &rexx_start);
  896.     RexxRegisterFunctionExe("inst_packages", &rexx_packages);
  897.     RexxRegisterFunctionExe("inst_updateentry", &rexx_updateentry);
  898.     RexxRegisterFunctionExe("inst_savevar", &rexx_savevar);
  899.     RexxRegisterFunctionExe("inst_removevar", &rexx_removevar);
  900.     RexxRegisterFunctionExe("inst_findvar", &rexx_findvar);
  901.     RexxRegisterFunctionExe("inst_mesg", &rexx_mesg);
  902.     RexxRegisterFunctionExe("inst_querycheck", &rexx_querycheck);
  903.     RexxRegisterFunctionExe("inst_setdir", &rexx_setdir);
  904.     RexxRegisterFunctionExe("inst_querytext", &rexx_querytext);
  905. }
  906.  
  907. void rexx_deinit(void)
  908. {
  909.     RexxDeregisterFunction("dw_box_pack_start");
  910.     RexxDeregisterFunction("dw_box_pack_end");
  911.     RexxDeregisterFunction("dw_box_new");
  912.     RexxDeregisterFunction("dw_groupbox_new");
  913.     RexxDeregisterFunction("dw_window_show");
  914.     RexxDeregisterFunction("dw_window_hide");
  915.     RexxDeregisterFunction("dw_window_destroy");
  916.     RexxDeregisterFunction("dw_window_set_font");
  917.     RexxDeregisterFunction("dw_window_set_color");
  918.     RexxDeregisterFunction("dw_window_new");
  919.     RexxDeregisterFunction("dw_bitmap_new");
  920.     RexxDeregisterFunction("dw_container_new");
  921.     RexxDeregisterFunction("dw_text_new");
  922.     RexxDeregisterFunction("dw_mle_new");
  923.     RexxDeregisterFunction("dw_entryfield_new");
  924.     RexxDeregisterFunction("dw_combobox_new");
  925.     RexxDeregisterFunction("dw_button_new");
  926.     RexxDeregisterFunction("dw_spinbutton_new");
  927.     RexxDeregisterFunction("dw_slider_new");
  928.     RexxDeregisterFunction("dw_checkbox_new");
  929.     RexxDeregisterFunction("dw_listbox_new");
  930.     RexxDeregisterFunction("dw_window_set_pos");
  931.     RexxDeregisterFunction("dw_window_set_usize");
  932.     RexxDeregisterFunction("dw_window_set_pos_size");
  933.     RexxDeregisterFunction("dw_window_set_style");
  934.     RexxDeregisterFunction("dw_window_set_icon");
  935.     RexxDeregisterFunction("dw_window_set_bitmap");
  936.     RexxDeregisterFunction("dw_window_set_text");
  937.     RexxDeregisterFunction("dw_window_enable");
  938.     RexxDeregisterFunction("dw_window_disable");
  939.     RexxDeregisterFunction("dw_screen_width");
  940.     RexxDeregisterFunction("dw_screen_height");
  941.     RexxDeregisterFunction("dw_bitmapfile_new");
  942.     RexxDeregisterFunction("dw_bitmapfile_set_bitmap");
  943.     RexxDeregisterFunction("inst_grabfile");
  944.     RexxDeregisterFunction("inst_viewfile");
  945.     RexxDeregisterFunction("inst_mleview");
  946.     RexxDeregisterFunction("inst_setdircontainer");
  947.     RexxDeregisterFunction("inst_setwindow");
  948.     RexxDeregisterFunction("inst_setbutton");
  949.     RexxDeregisterFunction("inst_setslider");
  950.     RexxDeregisterFunction("inst_start");
  951.     RexxDeregisterFunction("inst_packages");
  952.     RexxDeregisterFunction("inst_updateentry");
  953.     RexxDeregisterFunction("inst_savevar");
  954.     RexxDeregisterFunction("inst_removevar");
  955.     RexxDeregisterFunction("inst_findvar");
  956.     RexxDeregisterFunction("inst_mesg");
  957.     RexxDeregisterFunction("inst_querycheck");
  958.     RexxDeregisterFunction("inst_setdir");
  959.     RexxDeregisterFunction("inst_querytext");
  960. }
  961.  
  962. int rexx_run(char *filename)
  963. {
  964.     LONG rc;
  965.     SHORT retCode;
  966.     RXSTRING rxString;
  967.     RXSTRING args[1];
  968.     char tmpbuffer[50];
  969.     int b;
  970.  
  971.     if(stricmp(filename, "exit") == 0)
  972.     {
  973.         rexx_deinit();
  974.         WinSendMsg(mainhwnd, WM_QUIT, 0, 0);
  975.         exit(0);
  976.         return 0;
  977.     }
  978.  
  979.     for(b=0;b<COMMANDMAX;b++)
  980.     {
  981.         rexxcommands[b].id = 0;
  982.         rexxcommands[b].file[0] = 0;
  983.     }
  984.  
  985.     rxString.strlength = 0;
  986.     rxString.strptr = NULL;
  987.  
  988.     sprintf(tmpbuffer, "%lu", (ULONG)mainhwnd);
  989.     args[0].strlength = strlen(tmpbuffer);
  990.     args[0].strptr = malloc(args[0].strlength+1);
  991.     strcpy(args[0].strptr, tmpbuffer);
  992.  
  993.     grabfile(filename);
  994.  
  995.     rc = RexxStart(1, args, filename, NULL, NULL, RXCOMMAND, NULL, &retCode, &rxString);
  996.  
  997.     free(args[0].strptr);
  998.  
  999.     remove(filename);
  1000.  
  1001.     return retCode;
  1002. }