home *** CD-ROM | disk | FTP | other *** search
/ rtsi.com / 2014.01.www.rtsi.com.tar / www.rtsi.com / OS9 / OSK / CMDS / pvic_10a.lzh / SRCE / locfuncs.c < prev    next >
C/C++ Source or Header  |  1998-06-09  |  4KB  |  219 lines

  1. #include <stdio.h>
  2. #include <signal.h>
  3. #include <ctype.h>
  4. #include "pvic.h"
  5. #include "locdefs.h"
  6.  
  7. #include <sgstat.h>
  8.  
  9.  
  10. /* Read one character from the terminal without echoing it. */
  11. int local_get_character()
  12. {
  13.         char c;
  14.         if(read(0,&c,1)!=1)return '\033';
  15.         else return c;
  16. }
  17.  
  18.  
  19. /* Test if there is a character to be read from the terminal. If so the
  20. return value is possitive. If not the return value is zero. If we are
  21. not able to determine whether a character is waiting or not, the return
  22. value is negative. */
  23. int local_is_input_pending()
  24. {
  25.     return _gs_rdy(0)>0?1:0;
  26. }
  27.  
  28.  
  29. /* Initialize PVIC.  If the shell name is defined in an environment 
  30. variable it replaces the default name. The tab size defaults to the 
  31. size defined in the editing terminal's path. */
  32. void local_init()
  33. {
  34.     char             *shell_ptr;
  35.     struct sgbuf     opts;
  36.  
  37.     shell_ptr = getenv(LOCAL_SHELL_ENVIRONMENT_VAR);
  38.     if (shell_ptr) 
  39.         if (strlen(shell_ptr))
  40.             shell_name = shell_ptr;
  41.  
  42.     if (_gs_opt(1,&opts) != -1)
  43.         PARAMETER_VALUE(PARAMETER_TABSTOP) = opts.sg_tabsiz;
  44.     return;
  45. }
  46.  
  47.  
  48. /* Deinitialize PVIC. */
  49. void local_deinit()
  50. {
  51.     return;
  52. }
  53.  
  54.  
  55. static struct sgbuf old_settings;
  56.  
  57. /* Initialize the terminal I/O. */
  58. void local_init_terminal_io()
  59. {
  60.         struct sgbuf new_settings;
  61.  
  62.         _gs_opt(0,&old_settings);
  63.         _gs_opt(0,&new_settings);
  64.         new_settings._sgm._sgs._sgs_pause=0;
  65.         new_settings._sgm._sgs._sgs_echo=0;
  66.         new_settings._sgm._sgs._sgs_eofch=0;
  67.         new_settings._sgm._sgs._sgs_bspch=0;
  68.         new_settings._sgm._sgs._sgs_dlnch=0;
  69.         new_settings._sgm._sgs._sgs_dulnch=0;
  70.         new_settings._sgm._sgs._sgs_psch=0;
  71.         new_settings._sgm._sgs._sgs_kbich=0;
  72.         new_settings._sgm._sgs._sgs_kbach=0;
  73.         new_settings._sgm._sgs._sgs_bsech=0;
  74.         new_settings._sgm._sgs._sgs_bellch=0;
  75.         _ss_opt(0,&new_settings);
  76.  
  77.     return;
  78. }
  79.  
  80.  
  81. /* Deinitialize the terminal I/O. */
  82. void local_deinit_terminal_io()
  83. {
  84.         _ss_opt(0,&old_settings);
  85.  
  86.     return;
  87. }
  88.  
  89.  
  90.  
  91. /* Flag which is set by local_control_c_handler if control-c is pressed. */
  92. static int control_c_pressed=0;
  93.  
  94.  
  95.  
  96. /* Function called when control-c is pressed. */
  97. void local_control_c_handler()
  98. {
  99.     control_c_pressed=1;
  100. }
  101.  
  102.  
  103.  
  104. /* Reset the control_c_pressed flag. */
  105. void local_reset_control_c_pressed()
  106. {
  107.     control_c_pressed=0;
  108. }
  109.  
  110.  
  111.  
  112. /* Get the value of the control_c_pressed flag. */
  113. int local_control_c_pressed()
  114. {
  115.     return control_c_pressed;
  116. }
  117.  
  118.  
  119. /* Rename a file */
  120. rename(old,new)
  121. char *old,*new;
  122. {
  123.         char cmd[128];
  124.         sprintf(cmd,"rename %s %s",old,new);
  125.         system(cmd);
  126. }
  127.  
  128.  
  129. /* This is a replacement for system() to be called whenever the
  130. *  environment variable array must be passed to the child process
  131. */
  132. int local_system(cmd)
  133. char *cmd;
  134. {
  135.     int    reply;
  136.     int    i;
  137.     int n;
  138.     int    find_space;
  139.     char **args;
  140.     int    argnum;
  141.  
  142.     extern int os9forkc();    char *modname;
  143.  
  144.     n = strlen(cmd);
  145.     args = (char**)malloc(sizeof(char*)*(n + 2));
  146.     if (!args)
  147.     {
  148.         printf("Can't allocate argument pointer storage\n");
  149.         return(-1);
  150.     }
  151.  
  152.     argnum = 0;
  153.     if (strcmp(shell_name, cmd) != 0)
  154.         args[argnum++] = shell_name;
  155.         
  156.     find_space = 1;
  157.     for(i=0; i<n; i++)
  158.     {
  159.         if (find_space)
  160.         {
  161.             if (!isspace(cmd[i]))
  162.             {
  163.                 args[argnum++] = &cmd[i];
  164.                 find_space = 0;
  165.             }
  166.         }
  167.         else
  168.         {
  169.             if (isspace(cmd[i]))
  170.             {
  171.                 cmd[i] = 0;
  172.                 find_space = 1;
  173.             }
  174.         }
  175.     }
  176.     
  177.     args[argnum] = 0;
  178.     printf("\n");
  179.     if ((reply = os9exec(os9forkc, shell_name, args, environ_array, 0, 0, 3))
  180.          > 0)
  181.         wait(0);
  182.     else
  183.         printf("Can't run %s\n", cmd);
  184.     free(args);
  185.     return (reply);
  186. }
  187.  
  188. /* This function handles reading and processing the local initialisation
  189. *  file. If there is no initialisation file this should be a null function.
  190. */
  191. int local_ini_file()
  192. {
  193.     FILE *ini;
  194.     char buf[128];
  195.     char *hp;
  196.     int     lth;
  197.  
  198.     if ((hp = getenv(LOCAL_HOME_ENVIRONMENT_VAR)) == NULL)
  199.         return (-1);
  200.  
  201.     sprintf(buf, "%s%s", hp, LOCAL_INI_FILE);
  202.     ini = fopen(buf, "r");
  203.     if (ini)
  204.     {
  205.         while (fgets(buf, 128, ini))
  206.         {
  207.             lth = strlen(buf) -1;
  208.             buf[lth] = NULL;
  209.             if (lth > 0)
  210.                 do_command_line(buf);
  211.         }
  212.  
  213.         fclose(ini);
  214.     }
  215.     else
  216.  
  217.     return(0);
  218. }
  219.