home *** CD-ROM | disk | FTP | other *** search
/ GEMini Atari / GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso / zip / gnu / gemlib27.lzh / GEMLIB27 / WINPROC.C < prev    next >
C/C++ Source or Header  |  1993-07-30  |  3KB  |  136 lines

  1. /*
  2.  * This file contains subroutines which deal with other processes
  3.  */
  4. #ifdef __GNUC__
  5. #  include <gemfast.h>
  6. #  include <aesbind.h>
  7. #  include <vdibind.h>
  8. #  include <process.h>
  9. #else
  10. #  include <obdefs.h>
  11. #  include <gemdefs.h>
  12. #  include <xbios.h>
  13. #endif
  14. #include <stdio.h>
  15. #include <osbind.h>
  16. #include "wind.h"
  17. #include "uw.h"
  18. #include "windefs.h"
  19.  
  20. extern    char * environ;
  21.  
  22. extern struct wi_str w[];
  23. extern int fast;
  24. extern int    scr_x, scr_y, scr_w, scr_h;    /* size of screen */
  25. extern OBJECT    *menubar;
  26.  
  27. char cmdpath[40] = "e:\\bin\\*.*";
  28.                     /* Path for command execution */
  29. char cmdname[40] = "msh.prg";        /* Name of command to run */
  30. char cmdargs[40] = " ";            /* Arguments for command */
  31.  
  32. /*
  33.  * Exec process from dialog.
  34.  */
  35. int do_exec()
  36. {
  37.   int status = 0;
  38.   int confbutt;
  39.  
  40.   fsel_input(cmdpath, cmdname, &confbutt);
  41.   if (confbutt) {
  42.     extern char * rindex();
  43.     char cmdstr[80];
  44.     char cmdargv[40];
  45.     char *argv[20];
  46.     char * ind;
  47.     OBJECT *obj_tmp;
  48.     TEDINFO *ted_tmp;
  49.     int cx, cy, cw, ch, tmp;
  50.  
  51.     strcpy(cmdstr, cmdpath);
  52.       ind = rindex(cmdstr, '\\');
  53.       if (ind) * ++ind = '\0';
  54.     strcat(cmdstr, cmdname);
  55.     form_dial(FMD_START, 0, 0, 0, 0, scr_x, scr_y, scr_w, scr_h);
  56.                     /* save screen */
  57.  
  58.     rsrc_gaddr(R_TREE, PARAM, &obj_tmp);
  59.     ted_tmp = (TEDINFO *) obj_tmp[PARAMSTR].ob_spec;
  60.     strcpy(ted_tmp->te_ptext, cmdargs);
  61.     form_center(obj_tmp, &cx, &cy, &cw, &ch);
  62.     if (!fast) form_dial(FMD_GROW, 0, 0, 20, 10, cx, cy, cw, ch);
  63.     objc_draw(obj_tmp, 0, 5, cx, cy, cw, ch);
  64.     tmp = form_do(obj_tmp, PARAMSTR);
  65.     if (!fast) form_dial(FMD_SHRINK, 0, 0, 20, 10, cx, cy, cw, ch);
  66.     objc_change(obj_tmp, tmp, 0, cx, cy, cw, ch, NONE, 0);
  67.     if (tmp != OKEXEC) {
  68.       form_dial(FMD_FINISH, 0, 0, 0, 0, scr_x, scr_y, scr_w, scr_h);
  69.       return(0);
  70.     }
  71.     strcpy(cmdargs, ted_tmp->te_ptext);
  72.     strcpy(cmdargv, cmdargs);
  73.  
  74.     graf_mouse(M_OFF, NULL);    /* turn mouse off */
  75.     menu_bar(menubar, 0);     /* menu bar off */
  76.     Cconws("\033E\033e");    /* clear screen, cursor on */
  77.     ind = cmdargv;
  78.     argv[0] = cmdname;
  79.     tmp = 1;
  80.     while (*ind != '\0') {
  81.       while (*ind == ' ' && *ind != '\0'){
  82.         *ind = '\0';
  83.         ++ind;
  84.       }
  85.       argv[tmp++] = ind;
  86.       while (*ind != ' ' && *ind != '\0')
  87.         ++ind;
  88.     }
  89.     argv[tmp] = NULL;
  90.     status = execve(cmdstr, argv, environ);
  91.     sleep(1);
  92.     Cconws("\033E\033f");    /* clear screen, cursor off */
  93.     form_dial(FMD_FINISH, 0, 0, 0, 0, scr_x, scr_y, scr_w, scr_h);
  94.     menu_bar(menubar, 1);     /* menu bar on */
  95.     graf_mouse(M_ON, NULL);    /* turn mouse on */
  96.   }
  97.   return(status);
  98. }
  99.  
  100. /*
  101.  * Set current path with dialog.
  102.  */
  103. int do_path()
  104. {
  105.   int status = 0;
  106.   int confbutt;
  107.   char curpath[80];
  108.   char ignore[40] = "";
  109.   int drv;
  110.  
  111.   curpath[0] = Dgetdrv() + 'a';
  112.   curpath[1] = ':';
  113.   Dgetpath(curpath+2, 0);
  114.   strcat(curpath, "\\*.*");
  115.   fsel_input(curpath, ignore, &confbutt);
  116.   if (confbutt) {
  117.     extern char * index(), *rindex();
  118.     char * ind;
  119.     ind = index(curpath, ':');
  120.     if (ind) {
  121.       drv = *(ind - 1);
  122.       if (drv > '\\')
  123.         drv -= 'a';
  124.       else
  125.     drv -= 'A';
  126.       if (drv >= 0 && drv <= 15)
  127.         Dsetdrv(drv);
  128.     }
  129.     else
  130.       ind = curpath;
  131.     *rindex(ind, '\\') = 0;
  132.     status = Dsetpath(++ind);
  133.   }
  134.   return(status);
  135. }
  136.