mirror of
https://github.com/Interlisp/maiko.git
synced 2026-03-05 18:49:09 +00:00
Replaces #defined LispStringToCString with static procedure, reformats code
This commit is contained in:
105
inc/locfile.h
105
inc/locfile.h
@@ -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) : \
|
||||
|
||||
Reference in New Issue
Block a user