home *** CD-ROM | disk | FTP | other *** search
/ Audio 4.94 - Over 11,000 Files / audio-11000.iso / amiga / midi / obrst103.lha / OberSuite-1.03 / SourceCode / amigados.c next >
C/C++ Source or Header  |  1993-01-23  |  3KB  |  128 lines

  1. /**************************************************************************
  2. * amigados.c:    Functions for environment variables, filenames, requestors,
  3. *        and control-C checking.
  4. *        A part of OberSuite for the Commodore Amiga.
  5. *
  6. * Author:    Daniel Barrett, barrett@cs.umass.edu.
  7. * Version:    1.0.
  8. * Copyright:    None!  This program is in the Public Domain.
  9. *        Please share it with others.
  10. ***************************************************************************/
  11.  
  12. #include "decl.h"
  13.  
  14. /***************************************************************************
  15. * Functions for environment variables.
  16. ***************************************************************************/
  17.  
  18. /*
  19.  * Return the value of an ENV: environment variable "variableName", if it
  20.  * exists.
  21.  */
  22.  
  23. char *GetEnv(char *variableName)
  24. {
  25.     char *result = NULL;
  26.  
  27.     DisableRequestors();        /* In case ENV: is non-existent. */
  28.     result = getenv(variableName);
  29.     EnableRequestors();
  30.     return(result);
  31. }
  32.  
  33.  
  34. /***************************************************************************
  35. * Enable and disable system requestors.
  36. ***************************************************************************/
  37.  
  38. static APTR oldWindowPtr;        /* Pointer to current window.  */
  39. static struct Process *theProc;        /* Pointer to current process. */
  40.  
  41.  
  42. /* Turn off system requestors for this process. */
  43.  
  44. void DisableRequestors(void)
  45. {
  46.     theProc = (struct Process *)FindTask(NULL);
  47.     oldWindowPtr = theProc->pr_WindowPtr;
  48.     theProc->pr_WindowPtr = (APTR)(-1L);
  49. }
  50.  
  51.  
  52. /*
  53.  * Turn on system requestors for this process, after they have been
  54.  * turned off by DisableRequestors(), above.
  55.  */
  56.  
  57. void EnableRequestors(void)
  58. {
  59.     theProc->pr_WindowPtr = oldWindowPtr;
  60. }
  61.  
  62. /***************************************************************************
  63. * Check whether or not control-C has been pressed.
  64. ***************************************************************************/
  65.  
  66. /*
  67.  * Was control-C pressed?  Return TRUE or FALSE appropriately.
  68.  * In this program, pressing control-C once means terminate the program.
  69.  * So, we use a static variable "ctrl_c_pressed" to store whether or not
  70.  * control-C was EVER pressed, rather than calling SetSignal() repeatedly.
  71.  * (For some reason, SetSignal() seems to clear its signals after being
  72.  * called -- this is not acceptable in our program!)
  73.  */
  74.  
  75. BOOL CtrlcCheck(void)
  76. {
  77.     static BOOL ctrl_c_pressed = FALSE;
  78.  
  79.     if (!ctrl_c_pressed)
  80.         ctrl_c_pressed = SetSignal(0L, 0L) & SIGBREAKF_CTRL_C;
  81.  
  82.     return(ctrl_c_pressed);
  83. }
  84.  
  85. /***************************************************************************
  86. * Return the base name of a file.  This is a nice, generic function.
  87. ***************************************************************************/
  88.  
  89. /* BaseName(filename):    Return a pointer to the base name of the file,
  90.  * stripped of its leading directory component (if any).
  91.  * Return NULL if this can't be done.
  92.  * Works OK if:
  93.  *
  94.  *    filename == ":" or "/"        Returns NULL.
  95.  *    filename == "" or NULL        Returns NULL.
  96.  *    filename ends with ":" or '/'    Returns NULL.
  97.  */
  98.  
  99. char *BaseName(char *filename)
  100. {
  101.     char *p;
  102.  
  103.     if ((!filename) || (*filename == '\0'))
  104.         return(NULL);
  105.  
  106.    /*
  107.     * Point to the last character of the filename, and walk backwards
  108.     * until we reach a '/' or ':' or the beginning of the filename.
  109.     */
  110.  
  111.     p = filename + strlen(filename) - 1;
  112.  
  113.     while (*p  && (p >= filename))
  114.     {
  115.         if ((*p == '/') || (*p == ':'))
  116.         {
  117.             p++;
  118.             break;
  119.         }
  120.         else if (p > filename)
  121.             p--;
  122.         else
  123.             break;
  124.     }
  125.  
  126.     return(*p ? p : NULL);
  127. }
  128.