home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 22 gnu
/
22-gnu.zip
/
gnuawk.zip
/
vms
/
gawkmisc.vms
< prev
next >
Wrap
Text File
|
1996-10-20
|
3KB
|
122 lines
/*
* gawkmisc.vms --- miscellanious gawk routines that are OS specific.
*/
/*
* Copyright (C) 1986, 1988, 1989, 1991-1996 the Free Software Foundation, Inc.
*
* This file is part of GAWK, the GNU implementation of the
* AWK Progamming Language.
*
* GAWK is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* GAWK is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
char quote = '\'';
char *defpath = DEFPATH;
char envsep = ',';
/* gawk_name --- pull out the "gawk" part from how the OS called us */
char *
gawk_name(filespec)
const char *filespec;
{
char *p, *q;
/* "device:[root.][directory.subdir]GAWK.EXE;n" -> "GAWK" */
p = strrchr(filespec, ']'); /* directory punctuation */
q = strrchr(filespec, '>'); /* alternate <international> punct */
if (p == NULL || q > p)
p = q;
p = strdup(p == NULL ? filespec : (p + 1));
if ((q = strrchr(p, '.')) != NULL)
*q = '\0'; /* strip .typ;vers */
return p;
}
/* os_arg_fixup --- fixup the command line */
void
os_arg_fixup(argcp, argvp)
int *argcp;
char ***argvp;
{
(void) vms_arg_fixup(argcp, argvp);
}
/* os_devopen --- open special per-OS devices */
int
os_devopen(name, flag)
const char *name;
int flag;
{
return vms_devopen(name, flag);
}
/* optimal_bufsize --- determine optimal buffer size */
int
optimal_bufsize(fd, stb)
int fd;
struct stat *stb;
{
/* force all members to zero in case OS doesn't use all of them. */
memset(stb, '\0', sizeof(struct stat));
/*
* These values correspond with the RMS multi-block count used by
* vms_open() in vms/vms_misc.c.
*/
if (isatty(fd) > 0)
return BUFSIZ;
else if (fstat(fd, stb) < 0)
return 8*512; /* conservative in case of DECnet access */
else
return 32*512;
}
/* ispath --- return true if path has directory components */
int
ispath(file)
const char *file;
{
for (; *file; file++) {
switch (*file) {
case ':':
case ']':
case '>':
case '/':
return 1;
}
}
return 0;
}
/* isdirpunct --- return true if char is a directory separator */
int
isdirpunct(c)
int c;
{
return (strchr(":]>/", c) != NULL);
}