home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 15 / AACD15.ISO / AACD / Programming / Python2 / Python20_source / Modules / environment.c < prev    next >
Encoding:
C/C++ Source or Header  |  2000-10-25  |  4.0 KB  |  185 lines

  1. /*
  2. # Extended Environment module.
  3. #
  4. # Intended for use on the Amiga. Made by Irmen de Jong.
  5. #
  6. # This module contains all sorts of functions that operate on the global
  7. # or local environment of Python. Global environment = ENV: -vars,
  8. # local environment = the local shell variables.
  9. #
  10. #  11-Apr-96:    Rewrite. This module does not have to be posix compliant
  11. #                or portable, so...
  12. #  12-Jun-96:    Fixed zero-length var bugs. Renamed to new symbolnames.
  13. #  18-jan-98:    Updated for Python1.5
  14. */
  15.  
  16. #include "Python.h"
  17. #include "protos.h"
  18. #include <stdlib.h>
  19. #include <string.h>
  20.  
  21. /* protos */
  22. static PyObject *put_environ Py_PROTO((PyObject *self, PyObject *args));
  23. static PyObject *get_environ Py_PROTO((PyObject *self, PyObject *args));
  24. static PyObject *set_environ Py_PROTO((PyObject *self, PyObject *args));
  25. static PyObject *unset_environ Py_PROTO((PyObject *self, PyObject *args));
  26. static PyObject *get_var Py_PROTO((PyObject *self, PyObject *args));
  27. static PyObject *set_var Py_PROTO((PyObject *self, PyObject *args));
  28. static PyObject *unset_var Py_PROTO((PyObject *self, PyObject *args));
  29.  
  30.  
  31. static struct PyMethodDef environment_methods[] = {
  32.         {"putenv", put_environ,1},
  33.         {"setenv", set_environ,1},
  34.         {"getenv", get_environ,1},
  35.         {"unsetenv", unset_environ,1},
  36. #ifdef _AMIGA
  37.         {"setvar", set_var,1},
  38.         {"getvar", get_var,1},
  39.         {"unsetvar", unset_var,1},
  40. #endif
  41.         {NULL, NULL}
  42. };
  43.  
  44.  
  45. void initenvironment Py_PROTO((void))
  46. {
  47.     (void)Py_InitModule("environment", environment_methods);
  48. }
  49.    
  50. /*
  51. **  putenv("name=value")    -- this is putenv(3)
  52. */
  53. static PyObject *put_environ(PyObject *self, PyObject *args)
  54. {
  55.     char *string;
  56.     if(PyArg_ParseTuple(args,"s",&string))
  57.     {
  58.         if ( putenv( string ) )
  59.         {
  60.             PyErr_SetString(PyExc_SystemError, "Error in system putenv call");
  61.             return NULL;
  62.         }
  63.         Py_INCREF(Py_None); return Py_None;
  64.     }
  65.     return NULL;
  66. }
  67.  
  68. /*
  69. ** setenv("name","value",overwrite?)
  70. */
  71. static PyObject *set_environ(PyObject *self, PyObject *args)
  72. {
  73.     char *name, *value;
  74.     int overwrite;
  75.  
  76.     if(PyArg_ParseTuple(args,"ssi",&name,&value,&overwrite))
  77.     {
  78.         if ( setenv(name,value,overwrite) )
  79.         {
  80.             PyErr_SetString(PyExc_SystemError, "Error in system setenv call");
  81.             return NULL;
  82.         }
  83.         Py_INCREF(Py_None); return Py_None;
  84.     }
  85.     return NULL;
  86. }
  87.  
  88. /*
  89. ** value = getenv("name")
  90. */
  91. static PyObject *get_environ(PyObject *self, PyObject *args)
  92. {
  93.     char *name, *val;
  94.     if(PyArg_ParseTuple(args,"s",&name))
  95.     {
  96.         if(val=getenv(name))
  97.         {
  98.             PyObject *s = PyString_FromString(val);
  99.             free(val);
  100.             return s; /* ok if s=NULL */
  101.         }
  102.         Py_INCREF(Py_None); return Py_None; /* var not found in env. */
  103.     }
  104.     return NULL;
  105. }
  106.  
  107. /*
  108. ** unsetenv("name")
  109. */
  110. static PyObject *unset_environ(PyObject *self, PyObject *args)
  111. {
  112.     char *string;
  113.     if(PyArg_ParseTuple(args,"s",&string))
  114.     {
  115.         unsetenv(string);
  116.         Py_INCREF(Py_None); return Py_None;
  117.     }
  118.     return NULL;
  119. }
  120.  
  121. #ifdef _AMIGA
  122. #include <proto/dos.h>
  123. #include <dos/var.h>
  124.  
  125. /*
  126. ** setvar("name","value",overwrite?)
  127. */
  128. static PyObject *set_var(PyObject *self, PyObject *args)
  129. {
  130.     char *name, *value;
  131.     int overwrite;
  132.  
  133.     if(PyArg_ParseTuple(args,"ssi",&name,&value,&overwrite))
  134.     {
  135.         if(!overwrite && FindVar(name,GVF_LOCAL_ONLY))
  136.         {
  137.             Py_INCREF(Py_None); return Py_None;
  138.         }
  139.  
  140.         if(SetVar(name,value,-1,GVF_LOCAL_ONLY))
  141.         {
  142.             Py_INCREF(Py_None); return Py_None;
  143.         }        
  144.         PyErr_SetString(PyExc_SystemError, "Error in dos SetVar call");
  145.         return NULL;
  146.     }
  147.     return NULL;
  148. }
  149.  
  150. /*
  151. ** value = getvar("name")
  152. */
  153. static PyObject *get_var(PyObject *self, PyObject *args)
  154. {
  155.     char *name;
  156.     char buf[200];
  157.  
  158.     if(PyArg_ParseTuple(args,"s",&name))
  159.     {
  160.         if(GetVar(name,buf,200,GVF_LOCAL_ONLY)>=0)
  161.         {
  162.             PyObject *s = PyString_FromString(buf);
  163.             return s; /* ok if s=NULL */
  164.         }
  165.         Py_INCREF(Py_None); return Py_None; /* var not found */
  166.     }
  167.     return NULL;
  168. }
  169.  
  170. /*
  171. ** unsetvar("name")
  172. */
  173. static PyObject *unset_var(PyObject *self, PyObject *args)
  174. {
  175.     char *string;
  176.     if(PyArg_ParseTuple(args,"s",&string))
  177.     {
  178.         DeleteVar(string,GVF_LOCAL_ONLY);
  179.         Py_INCREF(Py_None); return Py_None;
  180.     }
  181.     return NULL;
  182. }
  183.  
  184. #endif
  185.