2015-10-15 21:39:42 +02:00

127 lines
3.5 KiB
C

/*
* [ ctwm ]
*
* Copyright 1992 Claude Lecommandeur.
*
* Permission to use, copy, modify and distribute this software [ctwm] and
* its documentation for any purpose is hereby granted without fee, provided
* that the above copyright notice appear in all copies and that both that
* copyright notice and this permission notice appear in supporting documen-
* tation, and that the name of Claude Lecommandeur not be used in adverti-
* sing or publicity pertaining to distribution of the software without
* specific, written prior permission. Claude Lecommandeur make no represen-
* tations about the suitability of this software for any purpose. It is
* provided "as is" without express or implied warranty.
*
* Claude Lecommandeur DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO
* EVENT SHALL Claude Lecommandeur BE LIABLE FOR ANY SPECIAL, INDIRECT OR
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
* USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE.
*
* Author: Claude Lecommandeur [ lecom@sic.epfl.ch ][ April 1992 ]
*/
/*
* Tranlate (VMS) logical name from "in" to "out".
*/
#include <string.h>
#include <starlet.h>
#include <lnmdef.h>
#include <descrip.h>
static struct dsc$descriptor_s create_descriptor (string)
char *string;
{
struct dsc$descriptor_s descrip_string;
/* build it */
descrip_string.dsc$b_dtype = DSC$K_DTYPE_T;
descrip_string.dsc$b_class = DSC$K_CLASS_S;
descrip_string.dsc$w_length = strlen(string);
descrip_string.dsc$a_pointer = string;
/* return it */
return (descrip_string);
}
int GetLogical(Logical_Name, outbuf)
char *Logical_Name, *outbuf;
{
static short len;
int istatus;
int i;
static char retbuf[256];
char *rptr;
struct dsc$descriptor_s search_list = create_descriptor("LNM$FILE_DEV");
struct dsc$descriptor_s logical_name = create_descriptor(Logical_Name);
struct {
short len;
short code;
char *buf;
short *retlen;
} ItmLst[] = { {255, LNM$_STRING, retbuf, &len},
{0, 0, (char *)0, 0}
};
static long attr=LNM$M_CASE_BLIND;
istatus = sys$trnlnm(&attr,
&search_list,
&logical_name,
0,
ItmLst);
if (!(istatus&1)) {
return(istatus);
} else {
retbuf[len] = '\0';
rptr = retbuf;
if (*rptr == 27) /* process permanent file */
rptr += 4; /* skip past it the iff */
strcpy (outbuf, rptr);
return(1);
}
}
CreateLogical(name,table,definition, accmode)
char *name, *table, *definition;
int accmode;
{
struct dsc$descriptor_s table_name = create_descriptor (table);
struct dsc$descriptor_s logical_name = create_descriptor (name);
struct {
short len;
short item;
char *buffer;
short *buflen;
} itmlst[2];
itmlst[0].len = strlen(definition);
itmlst[0].item = LNM$_STRING;
itmlst[0].buffer = definition;
itmlst[0].buflen = 0;
itmlst[1].len = itmlst[1].item = 0;
(void) sys$crelnm(0, &table_name,
&logical_name,
&accmode, itmlst);
}
/*
* Routine to delete logical names
*/
DeleteLogical(name,table)
char *name, *table;
{
struct dsc$descriptor_s table_name = create_descriptor (table);
struct dsc$descriptor_s logical_name = create_descriptor (name);
(void) sys$dellnm(&table_name,
&logical_name,
0);
}