1
0
mirror of https://github.com/Interlisp/maiko.git synced 2026-03-06 02:59:14 +00:00

Replaces #defined LispStringToCString with static procedure, reformats code

This commit is contained in:
Nick Briggs
2025-07-26 17:46:13 -07:00
parent afe40004b8
commit cfbd78007a

View File

@@ -12,6 +12,7 @@
#include <limits.h> /* for NAME_MAX */
#include <dirent.h> /* for MAXNAMLEN */
#include "lispemul.h" /* for DLword */
#include "commondefs.h" /* for error */
#define FDEV_PAGE_SIZE 512 /* 1 page == 512 byte */
@@ -63,6 +64,10 @@
else {return(NIL);}} while (0)
#ifndef min
#define min(a, b) (((a) <= (b))?(a):(b))
#endif /* min */
/************************************************************************/
/* */
/* L i s p S t r i n g T o C S t r i n g */
@@ -78,58 +83,52 @@
/* */
/************************************************************************/
#ifndef BYTESWAP
#define LispStringToCString(Lisp, C, MaxLen) \
do { \
OneDArray *lf_arrayp; \
char *lf_base, *lf_dp; \
short *lf_sbase; \
size_t lf_length; \
lf_arrayp = (OneDArray *)NativeAligned4FromLAddr(Lisp); \
lf_length = min(MaxLen - 1, lf_arrayp->fillpointer); \
lf_dp = (C); \
switch (lf_arrayp->typenumber) { \
case THIN_CHAR_TYPENUMBER: \
lf_base = \
((char *)(NativeAligned2FromLAddr(lf_arrayp->base))) + ((int)(lf_arrayp->offset)); \
strncpy(lf_dp, lf_base, lf_length); \
lf_dp[lf_length] = '\0'; \
break; \
\
case FAT_CHAR_TYPENUMBER: \
lf_sbase = \
((short *)(NativeAligned2FromLAddr(lf_arrayp->base))) + ((int)(lf_arrayp->offset)); \
for (size_t lf_i = 0; lf_i < (lf_length); lf_i++) *lf_dp++ = (char)(*lf_sbase++); \
*lf_dp = '\0'; \
break; \
default: error("LispStringToCString: Not a character array.\n"); \
} \
} while (0)
static void LispStringToCString(LispPTR Lisp, char *C, size_t MaxLen) {
OneDArray *lf_arrayp;
char *lf_base, *lf_dp;
short *lf_sbase;
size_t lf_length;
lf_arrayp = (OneDArray *)NativeAligned4FromLAddr(Lisp);
lf_length = min(MaxLen - 1, lf_arrayp->fillpointer);
lf_dp = (C);
switch (lf_arrayp->typenumber) {
case THIN_CHAR_TYPENUMBER:
lf_base = ((char *)(NativeAligned2FromLAddr(lf_arrayp->base))) + ((int)(lf_arrayp->offset));
strncpy(lf_dp, lf_base, lf_length);
lf_dp[lf_length] = '\0';
break;
case FAT_CHAR_TYPENUMBER:
lf_sbase = ((short *)(NativeAligned2FromLAddr(lf_arrayp->base))) + ((int)(lf_arrayp->offset));
for (size_t lf_i = 0; lf_i < (lf_length); lf_i++) *lf_dp++ = (char)(*lf_sbase++);
*lf_dp = '\0';
break;
default: error("LispStringToCString: Not a character array.\n");
}
}
#else /* BYTESWAP == T CHANGED-BY-TAKE */
#define LispStringToCString(Lisp, C, MaxLen) \
do { \
OneDArray *lf_arrayp; \
char *lf_base, *lf_dp; \
short *lf_sbase; \
size_t lf_length; \
lf_arrayp = (OneDArray *)(NativeAligned4FromLAddr(Lisp)); \
lf_length = min(MaxLen - 1, lf_arrayp->fillpointer); \
lf_dp = (C); \
switch (lf_arrayp->typenumber) { \
case THIN_CHAR_TYPENUMBER: \
lf_base = \
((char *)(NativeAligned2FromLAddr(lf_arrayp->base))) + ((int)(lf_arrayp->offset)); \
for (size_t lf_i = 0; lf_i < lf_length; lf_i++) *lf_dp++ = GETBYTE(lf_base++); \
break; \
\
case FAT_CHAR_TYPENUMBER: \
lf_sbase = \
((short *)(NativeAligned2FromLAddr(lf_arrayp->base))) + ((int)(lf_arrayp->offset)); \
for (size_t lf_ii = 0; lf_ii < lf_length; lf_ii++) *lf_dp++ = (char)(GETWORD(lf_sbase++)); \
break; \
default: error("LispStringToCString: Not a character array.\n"); \
} \
*lf_dp = '\0'; \
} while (0)
static void LispStringToCString(LispPTR Lisp, char *C, size_t MaxLen) {
OneDArray *lf_arrayp;
char *lf_base, *lf_dp;
short *lf_sbase;
size_t lf_length;
lf_arrayp = (OneDArray *)(NativeAligned4FromLAddr(Lisp));
lf_length = min(MaxLen - 1, lf_arrayp->fillpointer);
lf_dp = (C);
switch (lf_arrayp->typenumber) {
case THIN_CHAR_TYPENUMBER:
lf_base = ((char *)(NativeAligned2FromLAddr(lf_arrayp->base))) + ((int)(lf_arrayp->offset));
for (size_t lf_i = 0; lf_i < lf_length; lf_i++) *lf_dp++ = GETBYTE(lf_base++);
break;
case FAT_CHAR_TYPENUMBER:
lf_sbase = ((short *)(NativeAligned2FromLAddr(lf_arrayp->base))) + ((int)(lf_arrayp->offset));
for (size_t lf_ii = 0; lf_ii < lf_length; lf_ii++) *lf_dp++ = (char)(GETWORD(lf_sbase++));
break;
default: error("LispStringToCString: Not a character array.\n");
}
*lf_dp = '\0';
}
#endif /* BYTESWAP */
@@ -181,10 +180,6 @@ do { \
(cstringp) = (char *)(NativeAligned2FromLAddr(((OneDArray *)lf_naddress)->base)); \
} while (0)
#ifndef min
#define min(a, b) (((a) <= (b))?(a):(b))
#endif /* min */
#define LispNumToCInt(Lisp) \
( (((Lisp) & SEGMASK) == S_POSITIVE) ? ((Lisp) & 0xFFFF) : \
(((Lisp) & SEGMASK) == S_NEGATIVE) ? ((Lisp) | 0xFFFF0000) : \