1
0
mirror of https://github.com/Interlisp/maiko.git synced 2026-01-15 15:57:13 +00:00
Interlisp.maiko/inc/lispver2.h

72 lines
1.6 KiB
C
Executable File

/* $Id: lispver2.h,v 1.2 1999/01/03 02:06:09 sybalsky Exp $ (C) Copyright Venue, All Rights Reserved */
/* non-DOS version of LispVersionToUnixVersion */
#define LispVersionToUnixVersion(pathname){ \
\
register char *cp; \
register char *vp; \
register int ver; \
char ver_buf[VERSIONLEN]; \
\
cp = pathname; \
vp = NULL; \
while (*cp) { \
switch (*cp) { \
\
case ';': \
vp = cp; \
cp++; \
break; \
\
case '\'': \
if (*(cp + 1) != 0) cp += 2; \
else cp++; \
break; \
\
default: \
cp++; \
break; \
} \
} \
\
if (vp != NULL) { \
/* \
* A semicolon which is not quoted has been found. \
*/ \
if (*(vp + 1) == 0) { \
/* \
* The empty version field. \
* This is regared as a versionless file. \
*/ \
*vp = 0; \
} else { \
NumericStringP((vp + 1), YES, NO); \
YES: \
/* \
* Convert the remaining field to digit. \
*/ \
ver = atoi(vp + 1); \
if (ver == 0) { \
/* versionless */ \
*vp = 0; \
} else { \
sprintf(ver_buf, ".~%d~", ver); \
*vp = 0; \
strcat(pathname, ver_buf); \
} \
goto CONT; \
\
NO: \
strcpy(ver_buf, vp + 1); \
strcat(ver_buf, "~"); \
*vp++ = '.'; \
*vp++ = '~'; \
*vp = 0; \
strcat(pathname, ver_buf); \
CONT: \
vp--; /* Just for label */ \
} \
} \
}