]> granicus.if.org Git - python/commitdiff
Patch #696645: Remove VMS code with uncertain authorship.
authorMartin v. Löwis <martin@v.loewis.de>
Wed, 5 Mar 2003 14:15:21 +0000 (14:15 +0000)
committerMartin v. Löwis <martin@v.loewis.de>
Wed, 5 Mar 2003 14:15:21 +0000 (14:15 +0000)
Modules/getbuildinfo.c
Modules/main.c
Modules/posixmodule.c

index 23b57c559d95a367bca0044661ef0ac1809bdc29..ef444bf9b1494b8c5ff7a4135534c1388c4f6a49 100644 (file)
 #define BUILD 0
 #endif
 
-#ifdef __VMS
-#  ifdef __DECC
-#    pragma extern_model save
-#    pragma extern_model strict_refdef
-extern long ctl$gl_imghdrbf;
-#    pragma extern_model restore
-#  endif
-
-#  ifdef __ALPHA
-#    define EIHD$L_IMGIDOFF 24
-#    define EIHI$Q_LINKTIME  8
-#    define _IMGIDOFF EIHD$L_IMGIDOFF
-#    define _LINKTIME EIHI$Q_LINKTIME
-#  else
-#    define IHD$W_IMGIDOFF  6
-#    define IHI$Q_LINKTIME 56
-#    define _IMGIDOFF IHD$W_IMGIDOFF
-#    define _LINKTIME IHI$Q_LINKTIME
-#  endif /* __VMS */
-
-long*
-vms__get_linktime (void)
-{
-       long* al_imghdrbf;
-       unsigned short* aw_imgidoff;
-       unsigned short    w_imgidoff;
-       long* aq_linktime;
-       unsigned char* ab_ihi;
-
-       al_imghdrbf = &ctl$gl_imghdrbf;
-
-       al_imghdrbf = (long *)*al_imghdrbf;
-       al_imghdrbf = (long *)*al_imghdrbf;
-
-       aw_imgidoff = (unsigned short *)
-               ((unsigned char *)al_imghdrbf + _IMGIDOFF);
-
-       w_imgidoff = *aw_imgidoff;
-
-       ab_ihi = (unsigned char *)al_imghdrbf + w_imgidoff;
-
-       aq_linktime = (long *) (ab_ihi + _LINKTIME);
-
-       return aq_linktime;
-} /* vms__get_linktime (void) */
-extern void vms__cvt_v2u_time (long * aq_vmstime, time_t * al_unixtime);
-                           /* input            , output */
-#endif /* __VMS */
-
-
 const char *
 Py_GetBuildInfo(void)
 {
        static char buildinfo[50];
-#ifdef __VMS
-       time_t l_unixtime;
-
-       vms__cvt_v2u_time(vms__get_linktime (), &l_unixtime );
-
-       memset(buildinfo, 0, 40);
-       sprintf(buildinfo, "#%d, %.24s", BUILD, ctime (&l_unixtime));
-#else
        PyOS_snprintf(buildinfo, sizeof(buildinfo),
                      "#%d, %.20s, %.9s", BUILD, DATE, TIME);
-#endif
        return buildinfo;
 }
index ca382c69d3224b95ca114067bc2651bc5dd893a1..5f0644c727ef308cefd71e7fd7a1db4c141450cf 100644 (file)
@@ -5,8 +5,7 @@
 #include "compile.h" /* For CO_FUTURE_DIVISION */
 
 #ifdef __VMS
-extern int PyVMS_init(int* pvi_argc, char*** pvi_argv);
-extern PyObject* pyvms_gr_empty_string;
+#include <unixlib.h>
 #endif
 
 #if defined(MS_WINDOWS) || defined(__CYGWIN__)
@@ -305,7 +304,14 @@ Py_Main(int argc, char **argv)
        if (command == NULL && filename == NULL && _PyOS_optind < argc &&
            strcmp(argv[_PyOS_optind], "-") != 0)
        {
+#ifdef __VMS
+               filename = decc$translate_vms(argv[_PyOS_optind]);
+               if (filename == (char *)0 || filename == (char *)-1)
+                       filename = argv[_PyOS_optind];
+
+#else
                filename = argv[_PyOS_optind];
+#endif
                if (filename != NULL) {
                        if ((fp = fopen(filename, "r")) == NULL) {
                                fprintf(stderr, "%s: can't open file '%s'\n",
@@ -370,43 +376,12 @@ Py_Main(int argc, char **argv)
 #endif /* __VMS */
 
        Py_SetProgramName(argv[0]);
-#ifdef __VMS
-       PyVMS_init(&argc, &argv);
-#endif
        Py_Initialize();
 
-#ifdef __VMS
-       /* create an empty string object */
-       pyvms_gr_empty_string = Py_BuildValue("s#", Py_None, (unsigned int)0);
-#endif
-
        if (Py_VerboseFlag ||
            (command == NULL && filename == NULL && stdin_is_interactive))
-#ifndef __VMS
                fprintf(stderr, "Python %s on %s\n%s\n",
                        Py_GetVersion(), Py_GetPlatform(), COPYRIGHT);
-#else
-               fprintf(stderr, "Python %s on %s %s (%s_float)\n%s\n",
-                       Py_GetVersion(), Py_GetPlatform(),
-#  ifdef __ALPHA
-                       "Alpha",
-#  else
-                       "VAX",
-#  endif
-#  if __IEEE_FLOAT
-                       "T",
-#  else
-#    if __D_FLOAT
-                       "D",
-#    else
-#      if __G_FLOAT
-                       "G",
-#      endif /* __G_FLOAT */
-#    endif /* __D_FLOAT */
-#  endif /* __IEEE_FLOAT */
-                       COPYRIGHT); /* << @@ defined above in this file */
-/*                     Py_GetCopyright()); */
-#endif /* __VMS */
 
        if (command != NULL) {
                /* Backup _PyOS_optind and force sys.argv[0] = '-c' */
index 713729a8af71c0fc7f7f5e10a2e6a8da4d50746c..37a7d2640880526a87f88cd484a25dbe40c16a79 100644 (file)
 #    include <unixio.h>
 #    include <unixlib.h>
 #    include <stat.h>
-/* ----- */
-/* DECC on Alpha does redefine these already */
-#    ifndef shell$from_vms
-#        define shell$from_vms(_p1_,_p2_,_p3_) decc$from_vms(_p1_,_p2_,_p3_)
-#    endif
-#    ifndef shell$translate_vms
-#        define shell$translate_vms(_p1_) decc$translate_vms(_p1_)
-#    endif
-#    ifndef shell$to_vms
-#        define shell$to_vms(_p1_,_p2_,_p3_,_p4_,_p5_) \
-               decc$to_vms(_p1_,_p2_,_p3_,_p4_,_p5_)
-#    endif
 #    include <wait.h>                  /* define wait() */
 #endif /* defined(__VMS) */
 
@@ -147,7 +135,7 @@ corresponding Unix manual entries for more information on calls.");
 #define HAVE_SYSTEM    1
 #define HAVE_WAIT       1
 #define HAVE_TTYNAME   1
-#endif  /* PYOS_OS2 && PYCC_GCC */
+#endif  /* PYOS_OS2 && PYCC_GCC && __VMS */
 #endif  /* _MSC_VER */
 #endif  /* __BORLANDC__ */
 #endif  /* ! __WATCOMC__ || __QNX__ */
@@ -336,154 +324,53 @@ extern char **environ;
 #endif /* !_MSC_VER */
 
 #if defined(__VMS)
-static char psxmod_gt_psxpath[1026];
-
-static int 
-psxmod_from_vms_action (char *spec)
-{
-       (void)strcpy(psxmod_gt_psxpath, spec);
-       return 1;
-}
-
-/* Return a dictionary corresponding to the VMS 'environment table' */
-static char* at_home = "HOME";
-static char* at_path = "PATH";
-
-static char psxmod_t_command [] = "SYS$COMMAND";
 /* add some values to provide a similar environment like POSIX */
+static 
 void
-psmmod_add_posix_env(PyObject *d)
-{
-       /* -------------------- */
-       struct dsc$descriptor_s r_device_name;
-       long l_devbufsiz;
-       long l_tt_page;
-       long l_item_code;
-       long l_status;
+vms_add_posix_env(PyObject *d)
+{
        PyObject *o;
-       struct dsc$descriptor_s r_resultant_string;
-       char t_resultant_string[13]; /* enough space for username (12)+ '\0' */
-       char *at_resultant_string;
-       short int w_resultant_length;
-
-       /* set up string descriptor */
-       r_device_name.dsc$w_length  = strlen(psxmod_t_command);
-       r_device_name.dsc$b_dtype = DSC$K_DTYPE_T;
-       r_device_name.dsc$b_class = DSC$K_CLASS_S;
-       r_device_name.dsc$a_pointer = &psxmod_t_command[0];
-
-       /* -------------------- */
-       /* COLUMNS = $getdvi("SYS$COMMAND","DEVBUFSIZ") */
-       l_item_code = DVI$_DEVBUFSIZ;   
-       l_status = lib$getdvi(&l_item_code,
-                             0,                /* [channel]     */
-                             &r_device_name,
-                             &l_devbufsiz,     /* integer-value */
-                             0,                /* resultant_string */
-                             0);               /* resultant_length */
-       if (l_status == SS$_NORMAL) {
-               /* create a string object here to comply with POSIX */
-
-               /* set up string descriptor */
-               r_resultant_string.dsc$w_length  =
-                   (sizeof(t_resultant_string) - 1); /* ommit '\0' at end */
-               r_resultant_string.dsc$b_dtype   = DSC$K_DTYPE_T;
-               r_resultant_string.dsc$b_class   = DSC$K_CLASS_S;
-               r_resultant_string.dsc$a_pointer = &t_resultant_string[0];
-
-               /* Convert Signed Integer to Decimal Text */
-               l_status = ots$cvt_l_ti(&l_devbufsiz, &r_resultant_string, 1,
-                                       4, 0);
-               if (l_status == SS$_NORMAL) {
-                       /* terminate string for 'C'-style */
-                       t_resultant_string[sizeof(t_resultant_string)-1] = '\0';
-                       /* string appears as: '      value' -- skip ' ' */
-                       at_resultant_string = &t_resultant_string[0];
-                       while ((*at_resultant_string == ' ' ) && 
-                              (*at_resultant_string != '\0')) {
-                               at_resultant_string++;  /* skip prefix spaces */
-                       }
+       char* str;
 
-                       o = Py_BuildValue("s", at_resultant_string);
-                       if (o != NULL) {
-                               (void) PyDict_SetItemString(d, "COLUMNS", o);
-                               Py_DECREF(o);
-                       }
-               } /* (l_status = ots$cvt_l_ti() == SS$_NORMAL) */
-       } /* (l_status = lib$getdvi(DVI$_DEVBUFSIZ) == SS$_NORMAL) */
-       /* LINES = $getdvi("SYS$COMMAND","TT_PAGE") */
-       l_item_code = DVI$_TT_PAGE;
-       l_status = lib$getdvi(&l_item_code,
-                             0,                /* [channel]     */
-                             &r_device_name,
-                             &l_tt_page,       /* integer-value */
-                             0,                /* resultant_string */
-                             0);               /* resultant_length */
-       if (l_status == SS$_NORMAL) {
-               /* create a string object here to comply with POSIX */
-
-               /* set up string descriptor */
-               r_resultant_string.dsc$w_length  =
-                   (sizeof(t_resultant_string) - 1); /* ommit '\0' at end */
-               r_resultant_string.dsc$b_dtype   = DSC$K_DTYPE_T;
-               r_resultant_string.dsc$b_class   = DSC$K_CLASS_S;
-               r_resultant_string.dsc$a_pointer = &t_resultant_string[0];
-
-               /* Convert Signed Integer to Decimal Text */
-               l_status = ots$cvt_l_ti(&l_tt_page, &r_resultant_string,
-                                       1, 4, 0);
-               if (l_status == SS$_NORMAL) {
-                       /* terminate string for 'C'-style */
-                       t_resultant_string[sizeof(t_resultant_string)-1] = '\0';
-                       /* string appears as: '      value' -- skip ' ' */
-                       at_resultant_string = &t_resultant_string[0];
-                       while ((*at_resultant_string == ' ' ) && 
-                              (*at_resultant_string != '\0')) {
-                               at_resultant_string++; /* skip prefix spaces */
-                       }
+       str = getenv("LINES");
+       o = Py_BuildValue("s", str);
+       if (o != NULL) {
+               (void)PyDict_SetItemString(d, "LINES", o);
+               Py_DECREF(o);
+       }
 
-                       o = Py_BuildValue("s", at_resultant_string);
-                       if (o != NULL) {
-                               (void)PyDict_SetItemString(d, "LINES", o);
-                               Py_DECREF(o);
-                       }
-               } /* (l_status = ots$cvt_l_ti() == SS$_NORMAL) */
-       } /* (l_status = lib$getdvi(DVI$_TT_PAGE) == SS$_NORMAL) */
-       /* else -- ignore error */
-
-       /* LOGNAME = $getjpi(0,"USERNAME") */
-       l_item_code = JPI$_USERNAME;
-
-       /* set up string descriptor */
-       r_resultant_string.dsc$w_length  =
-                   (sizeof(t_resultant_string) - 1); /* ommit '\0' at end */
-       r_resultant_string.dsc$b_dtype   = DSC$K_DTYPE_T;
-       r_resultant_string.dsc$b_class   = DSC$K_CLASS_S;
-       r_resultant_string.dsc$a_pointer = &t_resultant_string[0];
-
-       l_status = lib$getjpi(&l_item_code, 0, 0, 0,
-                             &r_resultant_string, &w_resultant_length);
-       if (l_status == SS$_NORMAL){
-               t_resultant_string[w_resultant_length] = '\0';
-
-               /* remove any trailing spaces by replacing 1st one with '\0' */
-               at_resultant_string = &t_resultant_string[0];
-               while ((*at_resultant_string != ' ' ) &&
-                      (*at_resultant_string != '\0')) {
-                       /* lowercase for compatibility with POSIX */
-                       *at_resultant_string = tolower(*at_resultant_string);
-                       at_resultant_string++;  /* skip non-blank */
-               }
-               *at_resultant_string = '\0';    /* terminate */
+       str = getenv("COLUMNS");
+       o = Py_BuildValue("s", str);
+       if (o != NULL) {
+               (void)PyDict_SetItemString(d, "COLUMNS", o);
+               Py_DECREF(o);
+       }
 
-               o = Py_BuildValue("s", &t_resultant_string[0]);
-               if (o != NULL) {
-                       (void) PyDict_SetItemString(d, "LOGNAME", o);
-                       (void) PyDict_SetItemString(d, "USERNAME", o);
-                       Py_DECREF(o);
-               }
-       } /* (l_status == SS$_NORMAL) */
+       str = getenv("USER");
+       o = Py_BuildValue("s", str);
+       if (o != NULL) {
+               (void)PyDict_SetItemString(d, "USERNAME", o);
+               Py_DECREF(o);
+       }
+       o = Py_BuildValue("s", str);
+       if (o != NULL) {
+               (void)PyDict_SetItemString(d, "LOGNAME", o);
+               Py_DECREF(o);
+       }
 
+       str = getenv("HOME");
+       o = Py_BuildValue("s", str);
+       if (o != NULL) {
+               (void)PyDict_SetItemString(d, "HOME", o);
+               Py_DECREF(o);
+       }
+
+       str = getenv("PATH");
+       o = Py_BuildValue("s", str);
+       if (o != NULL) {
+               (void)PyDict_SetItemString(d, "PATH", o);
+               Py_DECREF(o);
+       }
        /* OS = "OpenVMS" */
        o = PyString_FromString ("OpenVMS");
        if (o != NULL) {
@@ -491,40 +378,6 @@ psmmod_add_posix_env(PyObject *d)
                Py_DECREF(o);
        }
 }
-
-/* @@ posix env:
-COLUMNS=80     $ write sys$output f$getdvi("SYS$COMMAND","DEVBUFSIZ")
-LINES=47       $ write sys$output f$getdvi("SYS$COMMAND","TT_PAGE")
-LOGNAME=zessin $ write sys$output f$edit(f$getjpi(0,"username"), -
-                       "collapse,lowercase")
-OS=OpenVMS
-PS1=HERE $
-
-TZ=CET-1:00CET DST,M3.5.0/2:00,M10.5.0/3:00
-               $ write sys$output f$trnlnm("POSIX$DEFAULT_TZ")
-                       "CET-1:00CET DST-2:00,M3.5.0/2:00,M10.5.0/3:00"
-               $ write sys$output f$trnlnm("UCX$TZ")
-                       "MET-1MET_DST-2,M3.5.0/2,M10.5.0/3"
-PAGER=more
-TERM=vt300_series
-SHELL=/bin/sh
-HOME=/dka100/user/zessin
-_=/bin/env
-
->>> for v in os.environ.items():
-...   print v
-...
-('HOME', '/user_here/zessin')
-('COLUMNS', '80')
-('LINES', '24')
-('PATH', '/python_disk/python/python-1_5_2/vms')
-('OS', 'OpenVMS')
-('USER', 'ZESSIN')
-('LOGNAME', 'zessin')
-('TERM', 'vt300-80')
-('USERNAME', 'zessin')
->>>
-*/
 #endif /* __VMS */
 
 static PyObject *
@@ -553,19 +406,7 @@ convertenviron(void)
                        PyErr_Clear();
                        continue;
                }
-#if defined(__VMS)
-               if ((strncmp(at_home, *e, sizeof(at_home)) == 0) ||
-                   (strncmp(at_path, *e, sizeof(at_path)) == 0)) {
-                       (void)shell$from_vms(p+1, psxmod_from_vms_action, 0);
-                       /* 0 = no wildcard expansion */
-                       v = PyString_FromString(psxmod_gt_psxpath);
-               }
-               else {
-                       v = PyString_FromString(p+1);
-               }
-#else
                v = PyString_FromString(p+1);
-#endif
                if (v == NULL) {
                        PyErr_Clear();
                        Py_DECREF(k);
@@ -579,9 +420,8 @@ convertenviron(void)
                Py_DECREF(v);
        }
 #if defined(__VMS)
-        psmmod_add_posix_env(d);
-#endif /* defined(__VMS) */
-#if defined(PYOS_OS2)
+        vms_add_posix_env(d);
+#elif defined(PYOS_OS2)
     {
         APIRET rc;
         char   buffer[1024]; /* OS/2 Provides a Documented Max of 1024 Chars */
@@ -1340,14 +1180,12 @@ posix_chdir(PyObject *self, PyObject *args)
        return posix_1str(args, "et:chdir", chdir, "U:chdir", _wchdir);
 #elif defined(PYOS_OS2) && defined(PYCC_GCC)
        return posix_1str(args, "et:chdir", _chdir2, NULL, NULL);
-#else
-#ifdef __VMS
+#elif defined(__VMS)
        return posix_1str(args, "et:chdir", (int (*)(const char *))chdir, 
                          NULL, NULL);
 #else
        return posix_1str(args, "et:chdir", chdir, NULL, NULL);
 #endif
-#endif
 }
 
 #ifdef HAVE_FCHDIR
@@ -1499,13 +1337,11 @@ posix_getcwd(PyObject *self, PyObject *noargs)
        Py_BEGIN_ALLOW_THREADS
 #if defined(PYOS_OS2) && defined(PYCC_GCC)
        res = _getcwd2(buf, sizeof buf);
-#else
-#if defined(__VMS)
+#elif defined(__VMS)
        /* 0 = force Unix-style path if in the VMS DCL environment! */
        res = getcwd(buf, sizeof buf, 0);
 #else
        res = getcwd(buf, sizeof buf);
-#endif
 #endif
        Py_END_ALLOW_THREADS
        if (res == NULL)
@@ -1540,6 +1376,9 @@ posix_getcwdu(PyObject *self, PyObject *noargs)
        Py_BEGIN_ALLOW_THREADS
 #if defined(PYOS_OS2) && defined(PYCC_GCC)
        res = _getcwd2(buf, sizeof buf);
+#elif defined(__VMS)
+       /* 0 = force Unix-style path if in the VMS DCL environment! */
+       res = getcwd(buf, sizeof buf, 0);
 #else
        res = getcwd(buf, sizeof buf);
 #endif
@@ -5338,6 +5177,10 @@ posix_fstat(PyObject *self, PyObject *args)
        int res;
        if (!PyArg_ParseTuple(args, "i:fstat", &fd))
                return NULL;
+#ifdef __VMS
+        /* on OpenVMS we must ensure that all bytes are written to the file */
+        fsync(fd);
+#endif
        Py_BEGIN_ALLOW_THREADS
        res = FSTAT(fd, &st);
        Py_END_ALLOW_THREADS