[alt.sources.wanted] Converting UN*X filesnames to VMS --responses

pac@cathedral.cerc.wvu.wvnet.edu (Michael A. Packer) (08/22/90)

here are some of the responses i got:

    You apparently only get documentation with DEC/Shell but
there are routines in the C RTL that comes with VMS that do
what you want.

SHELL$FROM_VMS (vms-filespec, action-routine, wild-flag)
SHELL$TO_VMS (unix-filespec, action-routine, wild-flag)

The filespec parameters are null terminated strings. The
second parameter is a function called with each matching
name. Wild-flag is 0 or 1. If 0, wild cards in the name
are not expanded.

For SHELL$FROM_VMS, the action routine takes a single
argument, the translated name. With SHELL$TO_VMS, there
are two arguments: the VMS file name and a type which
indicates whether the name is a directory, a file, or
specifies a DECnet link that is unavailable. In both
cases translation continues until the action routine
fails to return a success status.

There is one other rotutine:

unix-filespec = SHELL$TRANSLATE_VMS (vms-filespec)

Hope this helps.


--
----
Bruce A. Hudson                 | HUDSON@AC.DAL.CA
UCIS, Facilities and Operations | HUDSON@DALAC  (Bitnet)
Dalhousie University            | HUDSON@DALCS  (UUCP)
Halifax, Nova Scotia, Canada    |


==============================================================================


Path: cerc.wvu.wvnet.edu!cs.wvu.wvnet.edu!haven!udel!wuarchive!uunet!cs.utexas.edu!news-server.csri.toronto.edu!utgpu!watadm1!ria!rrivax.rri.uwo.ca!lrb
From: lrb@rrivax.rri.uwo.ca (Lance R. Bailey)
Newsgroups: alt.sources.wanted
Subject: Re: converting UN*X filenames to VMS ?
Message-ID: <896@ria.ccs.uwo.ca>
Date: 20 Aug 90 11:29:36 GMT
References: <693@babcock.cerc.wvu.wvnet.edu>
Sender: news@ria.ccs.uwo.ca
Reply-To: lrb@rrivax.rri.uwo.ca
Followup-To: alt.sources.wanted
Organization: Robarts Research Institute -- London Canada Earth
Lines: 126
News-Software: VAX/VMS VNEWS 1.3-4

In article <693@babcock.cerc.wvu.wvnet.edu>, pac@cathedral.cerc.wvu.wvnet.edu (Michael A. Packer) writes...
>Does anyone have a routine or know of a place where I can find
>a routine that will convert a unix file specification to 
>a VMS specification?

here:

#include <stdio.h>
#include <string.h>

/*
 * uucp work files are written in terms of unix file specifications.
 * FTP uses the actual machine's file specification. This means that
 * files referenced in the workfiles that are to be transmitted with FTP
 * should be re-worked from unix style to the machines style.
 *
 * most c compilers are nice enough to allow fopen() etcetera to use
 * unix specifications in the code and thus calls to fopen() etcetera
 * do not need to be reworked.
 * 
 */


char *
filefix(str,FILECODE)
    char *str;
{   char device[100];
    char filename[100];
    char directory[100];
    static char result[300];
    static char temp[300];

    char *ptr1, *ptr2, *ptr3;

    if (!*str) return NULL;

    strcpy(temp,str);
    switch (FILECODE)
    {   case 0:
            strcpy(result,str);
        return result;

        case 1:       /* unix 2 VMS */
            ptr1 = strchr(temp,'/');
            if (!ptr1)
            {   strcpy(result,temp);
                return result;
            }

            ptr2 = strchr(ptr1+1,'/');
            if (!ptr2)
            {   if (!*(ptr1+1))
                     strcpy(result,"dua0:[000000]");
                                                   /* / ---> dua0:[000000]  */
                else
                    sprintf(result,"%s:[000000]",ptr1+1);
                                                   /* /foo ---> foo:[000000]  */
                return result;
            }

            ptr3 = strchr(ptr2+1,'/');
            if (!ptr3)
            {   *ptr2=0;
                sprintf(result,"%s:[%s]",ptr1+1,ptr2+1);
                                                 /* /foo/bar ---> foo:[bar]  */
                return result;
            }

            /* /foo/bar/fubar ---> foo:[bar]fubar  */
            *ptr2=0;
            sprintf(result,"%s:",ptr1+1);
            *ptr2='[';
            ptr1=strrchr(temp,'/');  /* find last */
            *ptr1=']';
            ptr1=strrchr(ptr2,'/');
            while (ptr1)
            {   *ptr1='.';
                ptr1=strrchr(ptr2,'/');
            }

            strcat(result,ptr2);
        return result;

/*
 * foo:[bar]  --->  /foo/bar
 * foo:[bar.fubar]  --->  /foo/bar/fubar
 */
        case 2:  /* vms 2 unix */
           ptr3=strrchr(temp,']');
           if (!ptr3) return NULL;
           *ptr3=0;

           ptr1=strchr(temp,':');
           if (!ptr1) return NULL;

           *(ptr1++)=0;
           ptr2=strchr(ptr1,'[');
           if (!ptr2) return NULL;

           *(ptr2++)=0;
           for (ptr3=strchr(ptr2,'.');ptr3;ptr3=strchr(ptr3,'.'))   *ptr3='/';

           sprintf(result,"/%s/%s",temp,ptr2);
        return result;

    }

/*
 * shouldn't _really_ get here
 */
    fprintf(stderr,"unknown filecode translation %d\n",FILECODE);
    return NULL;
}


/*
 * EOF
 */

>thanks in advance...
welcome
_________________________________
Lance R. Bailey, Systems Manager | Robarts Research Institute
email: lrb@rri.uwo.ca            | Clinical Trials Resources Group
  vox: 519-663-3787 ext. 4108    | P.O. Box 5015, 100 Perth Dr.
  fax: 519-663-3789              | London, Canada N6A 5K8




==============================================================================

thanks again for all of the help
pac
--
USMAIL:	Drawer 2000, Concurrent Eng. Res. Center, WVU, Morgantown, WV 26506
PHONE:	304 293-7226
INTERNET : pac@cerc.wvu.wvnet.edu