[openfirmware] [commit] r2830 - in forth: lib wrapper

repository service svn at openfirmware.info
Mon Jan 16 22:05:26 CET 2012


Author: wmb
Date: Mon Jan 16 22:05:26 2012
New Revision: 2830
URL: http://tracker.coreboot.org/trac/openfirmware/changeset/2830

Log:
Big cleanup of wrapper to conform to modern C declaration rules.  Minor argument change to the wrapper gettimeofday function.

Modified:
   forth/lib/wrtime.fth
   forth/wrapper/logger.c
   forth/wrapper/wrapper.c

Modified: forth/lib/wrtime.fth
==============================================================================
--- forth/lib/wrtime.fth	Mon Jan 16 22:05:22 2012	(r2829)
+++ forth/lib/wrtime.fth	Mon Jan 16 22:05:26 2012	(r2830)
@@ -1,7 +1,12 @@
 purpose: Timing using wrapper calls
 
+\ We may need to pass a static buffer to the wrapper to hold the
+\ results of gettimeofday().
+0 value timeval
+
 : get-usecs  ( -- d.usec )
-   d# 348 syscall retval 2@  ( usec sec )
+   timeval d# 348 syscall               ( timeval )
+   ?dup 0=  if  retval  then  2@        ( usec sec )
    d# 1,000,000 um*  rot 0  d+
 ;
 

Modified: forth/wrapper/logger.c
==============================================================================
--- forth/wrapper/logger.c	Mon Jan 16 22:05:22 2012	(r2829)
+++ forth/wrapper/logger.c	Mon Jan 16 22:05:26 2012	(r2830)
@@ -6,6 +6,10 @@
  * file depends.
  */
 
+#ifdef __MACH__
+#define __unix__ 1
+#endif
+
 #ifdef WIN32
 #include <windows.h>
 #endif
@@ -30,7 +34,11 @@
 #define MAXLINE 256
 char info[MAXLINE];		/* A place to create log records */
 
+/* Fend off unused argument warnings */
+#define UNUSED_ARGUMENT(x) (void)x
+
 /* Returns the portion of filename after the directories and volume names */
+char *basename(char *filename);
 char *basename(char *filename)
 {
     char c, *p;
@@ -45,6 +53,7 @@
  * Returns the portion of 'filename' up to the last ".xxx" extension.
  * The returned string may be overwritten by subsequent calls to rootname.
  */
+char *rootname(char *filename);
 char *rootname(char *filename)
 {
     static char name[MAXPATHLEN];
@@ -71,6 +80,7 @@
 list misc    = { NULL, NULL };	/* List of log records for other things */
 
 /* Adds the current info record to the end of 'list' */
+void record(list *list);
 void record(list *list)
 {
     node *new;
@@ -85,6 +95,7 @@
 }
 
 /* Finds a specific node in the list */
+node *findnode(list *list, char *s);
 node *findnode(list *list, char *s)
 {
     node *n;
@@ -99,6 +110,7 @@
 }
 
 /* Writes the data from each node of 'list' to the 'logfile' */
+void fputlist(list *list, FILE *logfile);
 void fputlist(list *list, FILE *logfile)
 {
     node *n;
@@ -112,6 +124,7 @@
  * of the log file is derived from filename by replacing its
  * extension with ".log".
  */
+void log_output(char *filename, long size);
 void log_output(char *filename, long size)
 {
     FILE *logfile;
@@ -149,6 +162,7 @@
  * The record is of the form:
  *   in: file-name file-modification-date file-size
  */
+void log_input(char *filename, int fd);
 void log_input(char *filename, int fd)
 {
 #ifdef USE_STDIO
@@ -184,6 +198,7 @@
  * enclosed in " characters, with any embedded " characters escaped with \.
  * Otherwise return 'str' verbatim.
  */
+char *quotestr(char *str);
 char *quotestr(char *str)
 {
     char *p, *o;
@@ -222,12 +237,10 @@
 }
 
 /* Create log records telling the hostname, build time, and command line */
-void log_command_line(char *cmd, char *dictfile, int fd, int argc, char *argv[])
+void log_command_line(int argc, char *argv[]);
+void log_command_line(int argc, char *argv[])
 {
     int i;
-#ifdef notdef
-    struct stat stbuf;
-#endif
     char cwdbuf[MAXPATHLEN*2];
 
 #ifdef __unix__
@@ -249,26 +262,11 @@
     (void) GetComputerName(hostname, &hostnamelen);
 #endif
 
-#ifdef MACOS
-    char *hostname = "some_Macintosh";
-#endif
 
 #ifdef USE_STDIO
     char *hostname = "some_machine";
 #endif
 
-
-#ifdef notdef
-    sprintf(info, "command: %s\n", cmd);
-    record(&misc);
-
-    fstat(fd,&stbuf);
-    /* ctime automatically appends a newline */
-    sprintf(info, "dictionary: %s  %ld  %lx  %s",
-	    dictfile, stbuf.st_size, stbuf.st_mtime, ctime(&stbuf.st_mtime));
-    record(&misc);
-#endif
-
     strcpy(info, "command:");
     for(i = 0; i < argc; i++) {
         strcat(info, " ");
@@ -290,6 +288,7 @@
  * already exists. The record is of the form:
  *   env: name value
  */
+void log_env(char *name, char *value);
 void log_env(char *name, char *value)
 {
     char matchbuf[40];

Modified: forth/wrapper/wrapper.c
==============================================================================
--- forth/wrapper/wrapper.c	Mon Jan 16 22:05:22 2012	(r2829)
+++ forth/wrapper/wrapper.c	Mon Jan 16 22:05:26 2012	(r2830)
@@ -55,6 +55,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <unistd.h>
 
 /* 
  * The following #includes and externs fix GCC warnings when compiled with
@@ -72,6 +73,10 @@
 #define SYS5 1
 #endif
 
+#ifdef __MACH__
+#define __unix__ 1
+#endif
+
 #ifdef WIN32
 #define ENV_DELIM  ';'
 #define HOST_LITTLE_ENDIAN
@@ -81,20 +86,11 @@
 #define ENV_DELIM  ':'
 #endif
 
-#ifdef MACOS
-#define DEF_FPATH ""
-#define DEF_PATH  ""
-#else
 #define DEF_FPATH ".:/usr/lib:/usr/local/lib/forth"
 #define DEF_PATH  ".:/usr/bin:/usr/local/bin"
 #define DEF_DIC   "builder.dic"		/* Default Forth image file */
 #define DEF_DICT  (512*1024L)		/* Default dictionary growth space */
-#endif
 
-#ifdef MACOS
-char *host_os = "macos";
-char *host_cpu = "powerpc";
-#endif
 
 #ifdef M68K
 char *host_cpu = "m68k";
@@ -105,6 +101,7 @@
 #if defined(__APPLE__)
 char *host_os = "Darwin";
 #define BSD 1
+#include <libkern/OSCacheControl.h>
 #endif
 
 #ifdef MIPS
@@ -165,11 +162,13 @@
 
 #ifdef TARGET_POWERPC
 char *target_cpu = "powerpc";
-#ifndef LinuxPOWERPC
-#define TOCCALL
-#endif
 #define CPU_MAGIC 0x48000020
 #define START_OFFSET 8
+# ifdef LinuxPOWERPC
+#  define NOGLUE
+# else
+   extern   void	glue();
+# endif
 #endif
 
 #ifdef ARM
@@ -197,6 +196,13 @@
 # endif
 #endif
 
+#ifdef __x86_64__
+char *host_cpu = "x86";
+# ifndef CKERNEL
+#  define HOST_LITTLE_ENDIAN
+# endif
+#endif
+
 #ifdef TARGET_X86
 char *target_cpu = "x86";
 #define CPU_MAGIC 0x4d503400
@@ -216,7 +222,7 @@
 
 #ifdef __unix__
 # include <sys/mman.h>
-# include <limits.h>    /* for PAGESIZE */
+# include <limits.h>	/* for PAGESIZE */
 # ifndef PAGESIZE
 #  define PAGESIZE 4096
 # endif
@@ -229,11 +235,6 @@
 # include <sys/param.h>
 #endif
 
-#ifdef MACOS
-# include <events.h>
-# include <files.h>
-# include <console.h>
-#endif
 
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -281,23 +282,15 @@
 
 #include <signal.h>
 
-#ifdef TARGET_POWERPC
-# ifdef LinuxPOWERPC
-#  define NOGLUE
-# else
-   extern   void	glue();
-# endif
-#endif
-
 #ifdef AIX
   extern   void	_sync_cache_range(char *, long);
 #endif
 
 #ifdef __unix__
-  INTERNAL void	exit_handler();
+  void	exit_handler();
 # ifdef BSD
-   INTERNAL void	cont_handler();
-   INTERNAL void	stop_handler();
+  INTERNAL void	cont_handler();
+  INTERNAL void	stop_handler();
 # endif
 #endif
 
@@ -325,12 +318,12 @@
 #endif
 
 /* externs from logger.c */
-extern char *rootname();
-extern char *basename();
-extern void log_output();
-extern void log_input();
-extern void log_command_line();
-extern void log_env();
+extern char *rootname(char *);
+extern char *basename(char *);
+extern void log_output(char *, long);
+extern void log_input(char *, int);
+extern void log_command_line(int, char **);
+extern void log_env(char *, char *);
 
 #if !defined(LinuxPOWERPC) && !defined(__APPLE__)
   extern int	read(), write();
@@ -339,7 +332,9 @@
 INTERNAL char *	substr();
 INTERNAL long	path_open();
 INTERNAL void	keymode();
+#ifdef SYS5
 INTERNAL void	keyqmode();
+#endif
 
 INTERNAL long 	f_open(), f_creat();
 INTERNAL long	f_close(), f_read(), f_write();
@@ -349,10 +344,11 @@
 
 #if defined(PPCSIM) || defined (ARMSIM)
   /* These are not INTERNAL because the simulators use then */
-           long	c_key();
-           long	s_bye();
-           void	simulate();
-           void	restoremode();
+  long c_key();
+  long s_bye();
+  void restoremode();
+  void simulate(char *, char *, char *, long (**)(), char *, int, char **);
+  long find(long, int, long, char *);
 #else
   INTERNAL long	c_key();
   INTERNAL long	s_bye();
@@ -416,13 +412,17 @@
 INTERNAL long c_getattr(), c_drain();
 #endif
 
+/* Fend off unused argument warnings */
+#define UNUSED_ARGUMENT(x) (void)x
+
+long nop(void);
 long
-nop()
+nop(void)
 {
 	return(0L);
 }
 
-long ( (*functions[])()) = {
+long (*functions[])() = {
 /*	0	4	*/
 	c_key,	c_emit,
 
@@ -430,7 +430,7 @@
 	f_open,	f_creat,f_close,f_read,	f_write,f_ioctl,c_keyques,
 
 /*	36	40	44		48		*/
-        s_bye,	f_lseek,f_unlink,	fileques,
+	s_bye,	f_lseek,f_unlink,	fileques,
 
 /*	52	56		60	*/
 	c_type,	c_expect,	syserror,
@@ -504,37 +504,37 @@
 #include "win32fun.c"
 #include "jtagfun.c"
 #else
-	  /* Windows socket stuff 204 .. 264 */
-	  0, 0, 0, 0,  0, 0, 0, 0,  0, 0, 0, 0,  0, 0, 0, 0,
+	/* Windows socket stuff 204 .. 264 */
+	0, 0, 0, 0,  0, 0, 0, 0,  0, 0, 0, 0,  0, 0, 0, 0,
 #endif
 
 #ifdef JTAG
 #include "jtagfun.c"
 #else
-	  /* 268 .. 344 */
-	  0, 0, 0, 0,  0, 0, 0, 0,  0, 0, 0, 0,  0, 0, 0, 0,  0, 0, 0, 0,
+	/* 268 .. 344 */
+	0, 0, 0, 0,  0, 0, 0, 0,  0, 0, 0, 0,  0, 0, 0, 0,  0, 0, 0, 0,
 #endif
 
 #if defined(BSD) || defined(__linux__)
-	  /* 348 */
-	  s_timeofday,
+	/* 348 */
+	s_timeofday,
 #else
-	  0,
+	0,
 #endif
 
 #if defined(USE_TERMIOS)
-	  /* 352       356        360          364        368      372*/
-	  c_setraw, c_setbaud, c_setparity, c_getattr, c_setattr,  c_drain,
+	/* 352    356        360          364        368         372*/
+	c_setraw, c_setbaud, c_setparity, c_getattr, c_setattr,  c_drain,
 #else
-	  0,        0,         0,           0,         0,          0,
+	0,        0,         0,           0,         0,          0,
 #endif
 
-          /* 376       380      384		388 */
-          m_inflate,   m_map,   m_unmap,	s_ioperm,
+	/* 376       380      384	388 */
+	m_inflate,   m_map,   m_unmap,	s_ioperm,
 
 #ifdef USE_XCB
-          /* 392       396           400       404 */
-          open_window, close_window, rgbcolor, fill_rectangle,
+	/* 392       396           400       404 */
+	open_window, close_window, rgbcolor, fill_rectangle,
 #endif
 };
 /*
@@ -592,7 +592,7 @@
 extern char *emacs_main();
 char *fake_argv[] = { "micro-emacs" , "dontexit" , 0 };
 INTERNAL long
-emacs()
+emacs(void)
 {
 #ifdef EMACS
 	char *eret;
@@ -605,55 +605,57 @@
 }
 
 #if defined(HOST_LITTLE_ENDIAN)
+long lbflip(long n);
 long
 lbflip(long n)
 {
-     long o;
-     o = (n>>24) &0xff;
-     o |= ((n>>16) & 0xff) << 8;
-     o |= ((n>>8) & 0xff) << 16;
-     o |= (n & 0xff) << 24;
-     return(o);
+	long o;
+	o = (n>>24) &0xff;
+	o |= ((n>>16) & 0xff) << 8;
+	o |= ((n>>8) & 0xff) << 16;
+	o |= (n & 0xff) << 24;
+	return(o);
 }
+void lbflips(long *adr, int len);
 void
 lbflips(long *adr, int len)
 {
-     while ((len -= sizeof(long)) >= 0) {
-	*adr = lbflip(*adr);
-	adr++;
-     }
+	while ((len -= sizeof(long)) >= 0) {
+		*adr = lbflip(*adr);
+		adr++;
+	}
 }
-
+void qlbflips(long *adr, char *bitmap, int len);
 void
 qlbflips(long *adr, char *bitmap, int len)
 {
-     int nbits = 0;
-     unsigned char residbits = 0;
+	int nbits = 0;
+	unsigned char residbits = 0;
 
-     while ((len -= sizeof(long)) >= 0) {
-	if (nbits == 0) {
-		nbits = 8;
-		residbits = *bitmap++;
+	while ((len -= sizeof(long)) >= 0) {
+		if (nbits == 0) {
+			nbits = 8;
+			residbits = *bitmap++;
+		}
+		if ((residbits & 0x80) == 0)
+			*adr = lbflip(*adr);
+		residbits <<= 1;
+		nbits -= 1;
+		adr++;
 	}
-	if ((residbits & 0x80) == 0)
-		*adr = lbflip(*adr);
-	residbits <<= 1;
-	nbits -= 1;
-	adr++;
-     }
 }
 #endif
 
 #ifdef TARGET_X86
 int bittest(char *table, int index) 
 {
-    int quot, remain ;
-    unsigned char pattern = 128 ;
+	int quot, remain ;
+	unsigned char pattern = 128 ;
 
-    quot = index /8 ;
-    remain = index %8 ;
+	quot = index /8 ;
+	remain = index %8 ;
 
-    return( ( table[quot] & (pattern>>remain) ) !=0 ) ;
+	return( ( table[quot] & (pattern>>remain) ) !=0 ) ;
 }
 
 	/* Header for PharLap flat 32-bit executable file */
@@ -695,66 +697,45 @@
 char bpval[MAXPATHLEN];
 char hostdirval[MAXPATHLEN];
 
-char *
-remove_tail(s, p)
-	char *s, *p;
-{
-	if (p == s)
-		return(s);
-	--p;
-	*p = '\0';
-	while (p != s) {
-		--p;
-		if (*p == '\\' || *p == '/')
-			return(p+1);
-	}
-	return (s);
-}
-
+void set_bp(void);
 void
-set_bp()
+set_bp(void)
 {
-	char *p;
+	char here[MAXPATHLEN];
+	getcwd(here, MAXPATHLEN);
 	getcwd(bpval, MAXPATHLEN);
-	for (p = bpval + strlen(bpval); p != bpval; p = remove_tail(bpval,p)) {
-            if (strcmp(p, host_cpu) == 0) {
-                strcpy(hostdirval, bpval);
-                strcat(hostdirval, "/");
-                strcat(hostdirval, host_os);
-            }
-            if (strcmp(p, "forth") == 0
-                ||  strcmp(p, "cpu") == 0
-                ||  strcmp(p, "dev") == 0
-                ||  strcmp(p, "ofw") == 0) {
-                (void)remove_tail(bpval, p);
-                break;
-            }
+	while (access("ofw", F_OK)) {
+		chdir("..");
+		getcwd(bpval, MAXPATHLEN);
+		if (strcmp(bpval, "/") == 0) {
+			bpval[0] = '\0';
+			break;
+		}
 	}
+	chdir(here);
 }
 
-struct options {  char *dashopt; char *forthopt; } options[] =
-{
-	"-c",  "clean ",
-	"-d",  "prolix ",
-	"-q",  "quiet ",
-	"-v",  "verbose ",
-	"",    "",
+struct woptions {  char *dashopt; char *forthopt; } woptions[] =
+{
+	{ "-c",  "clean " },
+	{ "-d",  "prolix " },
+	{ "-q",  "quiet " },
+	{ "-v",  "verbose " },
+	{ "",    "" },
 };
 
+int modify_command_line(int argc, char *argv[], char *targv[]);
 int
-modify_command_line(argc, argv, targv)
-	int argc;
-	char *argv[];
-	char *targv[];
+modify_command_line(int argc, char *argv[], char *targv[])
 {
 	int argn = 1;
 	static char dictname[MAXPATHLEN];
 	static char command[100];
-	struct options *o;
+	struct woptions *o;
 
 	*command = '\0';
 
-	for (o = options; *o->dashopt != '\0'; o++)
+	for (o = woptions; *o->dashopt != '\0'; o++)
 		if (argn < argc && strcmp(argv[argn], o->dashopt) == 0) {
 			strcat(command, o->forthopt);
 			++argn;
@@ -762,19 +743,19 @@
 
 	strcpy(dictname, "${HOSTDIR}/../build/builder.dic");
 
-        if (argn < argc && strcmp(argv[argn], "-t") == 0) {
-            ++argn;
-            strcat(command, "tag ");
-        } else {
-            strcat(command, "build ");
-        }
-
-        if (argn < argc) {
-            strcat(command, argv[argn]);
-        } else {
-            printf("No target name specified; executing builder in interactive mode\n");
-            strcpy(command, "interact");
-        }
+	if (argn < argc && strcmp(argv[argn], "-t") == 0) {
+		++argn;
+		strcat(command, "tag ");
+	} else {
+		strcat(command, "build ");
+	}
+
+	if (argn < argc) {
+		strcat(command, argv[argn]);
+	} else {
+		printf("No target name specified; executing builder in interactive mode\n");
+		strcpy(command, "interact");
+	}
 
 	targv[0] = argv[0];
 	targv[1] = dictname;
@@ -784,9 +765,9 @@
 	return(4);
 }
 
+char *strlower(char *str);
 char *
-strlower(str)
-	char *str;
+strlower(char *str)
 {
 	char c, *s;
 	for (s = str; (c = *s) != '\0'; s++)
@@ -797,9 +778,11 @@
 }
 
 int
-main(argc, argv, envp)
-	int argc;
-	char **argv, *envp;
+main(int argc, char **argv
+#ifdef EMACS
+     , char **envp
+#endif
+	)
 {
 	char * loadaddr;
 	long f;
@@ -810,12 +793,7 @@
 #ifdef TARGET_X86
 	char *reloc_table ;
 	int delta_org, old_org, code_size ;
-	int code_wsize, cold_code, i ;
-#endif
-
-#ifdef MACOS
-	t_init();
-   	argc = ccommand(&argv);
+	int code_wsize, i ;
 #endif
 
 	/*
@@ -833,8 +811,7 @@
 	}
 
 	progname = argv[0];
-
-	log_command_line(progname, dictfile, f, argc, argv);
+	log_command_line(argc, argv);
 
 	set_bp();
 	if (strcmp(strlower(rootname(basename(progname))), "build") == 0) {
@@ -866,9 +843,9 @@
 	/* If there is no command line argument, use the default .exe file */
 	if( argc >= 1  &&
 	    (  (strcmp(substr(*argv,-4,4),".exe") == 0)
-	    || (strcmp(substr(*argv,-4,4),".dic") == 0)
-	    || (strcmp(substr(*argv,-4,4),".EXE") == 0)
-	    || (strcmp(substr(*argv,-4,4),".DIC") == 0) ) ) {
+	       || (strcmp(substr(*argv,-4,4),".dic") == 0)
+	       || (strcmp(substr(*argv,-4,4),".EXE") == 0)
+	       || (strcmp(substr(*argv,-4,4),".DIC") == 0) ) ) {
 		dictfile = *argv++;
 		argc--;
 	} else {
@@ -935,22 +912,22 @@
 	/* dictsize is the total amount of dictionary memory to allocate */
 
 	dictsize = imagesize +  extrasize; 
-        relsize  = (dictsize + 15) /16;     /* Space for relocation map */
+	relsize  = (dictsize + 15) /16;    /* Space for relocation map */
 
-        memsize = dictsize + relsize + PAGESIZE - 1;
+	memsize = dictsize + relsize + PAGESIZE - 1;
 
 	loadaddr = (char *)m_alloc(memsize);
 	if ((loadaddr == (char *) -1) || (loadaddr == (char *) 0)) {
 		error("forth: Can't get memory","");
 		exit(1);
 	}
-        loadaddr = (char *)(((long)loadaddr + (PAGESIZE-1)) & ~(PAGESIZE-1));
+	loadaddr = (char *)(((long)loadaddr + (PAGESIZE-1)) & ~(PAGESIZE-1));
 
-        // Make the dictionary memory executable
-        if (mprotect(loadaddr, dictsize + relsize, PROT_READ | PROT_WRITE | PROT_EXEC) != 0) {
-            perror("forth: mprotect");
-            exit(1);
-        }
+	// Make the dictionary memory executable
+	if (mprotect(loadaddr, dictsize + relsize, PROT_READ | PROT_WRITE | PROT_EXEC) != 0) {
+		perror("forth: mprotect");
+		exit(1);
+	}
 
 	if( f_read(f, loadaddr, dictsize) <= 0) {
 		error("forth: Error reading dictionary file","");
@@ -974,21 +951,20 @@
 		memcpy(&loadaddr[dictsize], reloc_table, (code_size+15)/16);
 	}
 
-#else 
+#else  // TARGET_X86	
 
 # if defined(TARGET_POWERPC) && defined(HOST_LITTLE_ENDIAN)
 	lbflips((long *)&header, sizeof(header));
 # endif
 
-	if (header.h_magic != CPU_MAGIC) {
+	if ((unsigned int) header.h_magic != CPU_MAGIC) {
 		error("forth: Incorrect dictionary file header in ", dictfile);
-/* XXX */ printf("%x %x\n", CPU_MAGIC, (unsigned int) header.h_magic);
 		exit(1);
 	}
 
 	/* imagesize is the number of bytes to read from the file */
 	imagesize = header.h_tlen  + header.h_dlen
-	          + header.h_trlen + header.h_drlen;
+		+ header.h_trlen + header.h_drlen;
 
 	/*
 	 * Determine the dictionary growth size.
@@ -1005,6 +981,7 @@
 
 	dictsize = sizeof(header) + imagesize +  extrasize ; 
 	dictsize += 16;		/* Allow for alignment */
+	memsize = roundup(dictsize, PAGESIZE);
 
 # ifdef VERBOSE
 #  ifdef PPCSIM
@@ -1017,13 +994,16 @@
 #  endif
 # endif
 
-	loadaddr = (char *)m_alloc(dictsize);
+	loadaddr = (char *)m_alloc(memsize);
 	if ((loadaddr == (char *) -1) || (loadaddr == (char *) 0)) {
 		error("forth: Can't get memory","");
 		exit(1);
 	}
-
-        loadaddr = (char *)(((long)loadaddr + 15) & ~15);
+	if (((long)loadaddr & 15) != 0) {
+		printf("Why isn't loadaddr (%p) aligned?\n", loadaddr);
+		loadaddr = (char *)(((long)loadaddr + 15) & ~15);
+	}
+	memsize -= 16;  // Leave room for initial stack pointer
 	(void)memcpy(loadaddr, (char *)&header, sizeof(header));
 
 	if( f_read(f, loadaddr+sizeof(header), imagesize) != imagesize ) {
@@ -1037,10 +1017,10 @@
 	lbflips((long *)(loadaddr + sizeof(header) + header.h_tlen),
 		header.h_dlen);
 	qlbflips((long *)(loadaddr + sizeof(header)),
-	    loadaddr + sizeof(header) + header.h_tlen + header.h_dlen,
-	    header.h_tlen);
+		 loadaddr + sizeof(header) + header.h_tlen + header.h_dlen,
+		 header.h_tlen);
 # endif
-#endif
+#endif  // TARGET_X86	
 
 	keymode();
 
@@ -1066,62 +1046,80 @@
 	/*
 	 * Call the Forth interpreter as a subroutine.  If it returns,
 	 * exit with its return value as the status code.
+	 *
+	 * Each of the blocks below selects one form of target execution,
+	 * and each terminates the entire wrapper run upon completion.
+	 * Hence there should be no "else" or "elif" clauses after
+	 * this point.
 	 */
 
 #if defined(PPCSIM)
 	simulate(0L, loadaddr+sizeof(header)+START_OFFSET,
-		 loadaddr, functions, ((long)loadaddr+dictsize - 16) & ~15,
+		 loadaddr, functions, (char *)loadaddr + memsize,
 		 argc, argv, 1 /* 0=POWER, 1=PowerPC */);
-#elif defined(ARMSIM)
+	s_bye(0L);
+#endif
+
+#ifdef ARMSIM
 	simulate(0L, loadaddr, loadaddr, functions,
-         ((long)loadaddr+dictsize - 16) & ~15, argc, argv);
-#else
+		 (char *)loadaddr + memsize, argc, argv);
+	s_bye(0L);
+#endif
+	/*
+	 * Not a simulator.
+	 */
 	s_flushcache(loadaddr, dictsize);  /* We're about to execute data! */
-# ifdef TARGET_X86
+
+#ifdef TARGET_X86
 	{
 	int (*codep)();
 	/* There is a pointer to the startup code at offset 0x18 */
 	codep = (int (*)()) *(int *)(&loadaddr[0x18]);
 	if (old_org == -1)
 		codep = (int (*)())((int)codep + (int)loadaddr);
-	*(void **)(loadaddr+0x6) = fsyscall;    
+	*(void **)(loadaddr+0x6) = fsyscall;
 	*(short *)(&loadaddr[0x0a]) = 0;
-	*(long *)(&loadaddr[0x10]) = argc;                        
+	*(long *)(&loadaddr[0x10]) = argc;
 	*(char ***)(&loadaddr[0x14]) = (char **)((char *)&argv[0]); 
 	/* Far call to Forth */
 	(void)codep(0, &(loadaddr[dictsize]));
 	codep = (int (*)())(loadaddr + *(int *)(&loadaddr[0x0]));
 	s_bye(codep(0, 1, 2));
 	}
-# elif !defined(TOCCALL)
+#endif
 
-#  ifdef TARGET_POWERPC
-	s_bye((*(long (*) ())(loadaddr+sizeof(header)+START_OFFSET))
-		(loadaddr, ((char *)functions)+1, ((long)loadaddr+dictsize - 16) & ~15,
-		 argc, argv, 1));
-#  else
-	s_bye((*(long (*) ())(loadaddr+sizeof(header)+START_OFFSET))
-		(loadaddr, functions, ((long)loadaddr+dictsize - 16) & ~15,
-		 argc, argv));
-#  endif
+#ifdef TARGET_POWERPC
+# ifdef NOGLUE
+	{ long toc_entry[2]; int c;
+		toc_entry[1] = 0;
+		toc_entry[0] = ((long)loadaddr)+sizeof(header)+START_OFFSET;
 
-# elif defined(NOGLUE)
-	{ long toc_entry[2]; int c;        
-	    toc_entry[1] = 0;
-	    toc_entry[0] = ((long)loadaddr)+sizeof(header)+START_OFFSET;
-
-	    (*(void (*) ())toc_entry) (loadaddr, functions,
-		(long)loadaddr+dictsize, argc, argv, 0, 0);
-	    s_bye(0L);
+		(*(void (*) ())toc_entry) (loadaddr, functions,
+					   (long)loadaddr+memsize, argc, argv, 0, 0);
+		s_bye(0L);
 	}
 # else
-
-	glue(loadaddr, functions, (long)loadaddr+dictsize, argc, argv,
+	glue(loadaddr, functions, (long)loadaddr+memsize, argc, argv,
 		loadaddr+sizeof(header)+START_OFFSET);
 	s_bye(0L);
 # endif
 #endif
-    restoremode();
+
+	{
+	/*
+	 * XCode specific behavior: if your function has a prototype, the compiler
+	 * passes arguments in registers. Otherwise it pushes them on the stack.
+	 */
+	long (*func)(char *, long (*[])(), long, int, char **);
+	func = (*(long (*) ())(loadaddr+sizeof(header)+START_OFFSET));
+	printf("func %p (%p %p %lx %d %p)\n", func,
+	       (char *)-1, functions, (long)loadaddr + memsize, argc, argv);
+	fflush(stdout);
+	s_bye(func((char *)-1, functions, (long)loadaddr + memsize, argc, argv));
+	}
+
+	restoremode();
+	return 0;
 }
 
 /*
@@ -1129,8 +1127,7 @@
  * number represented by that digit string.  Otherwise returns -1.
  */
 int
-getnum(s)
-	register char *s;
+getnum(char *s)
 {
 	register int digit, n;
 
@@ -1145,24 +1142,21 @@
 
 #ifdef BSD
 INTERNAL void
-stop_handler()
+stop_handler(void)
 {
 	restoremode();
 	kill(0,SIGSTOP);
 }
 INTERNAL void
-cont_handler()
+cont_handler(void)
 {
 	keymode();
 }
 #endif
 
 #ifdef AIX
-INTERNAL void
-exit_handler(sig, code, SCP)
-	int sig;
-	int code;
-	struct sigcontext *SCP;
+void
+exit_handler(int sig, int code, struct sigcontext *SCP)
 {
 	struct mstsave *state = &SCP->sc_jmpbuf.jmp_context;
 	int i, j;
@@ -1176,7 +1170,7 @@
 		 * Dump state for debugging
 		 */
 		printf("iar %08x instruction %08x\n", state->iar,
-		    *((int *)state->iar));
+		       *((int *)state->iar));
 		printf("msr %08x\t", state->msr);
 		printf("cr  %08x\t", state->cr);
 		printf("lr  %08x\t", state->lr);
@@ -1191,9 +1185,9 @@
 	kill(0,SIGQUIT);
 }
 #else
-INTERNAL void
-exit_handler(sig)
-	int sig;
+void exit_handler(int sig);
+void
+exit_handler(int sig)
 {
 #ifdef HAVE_PSIGNAL
 	psignal(sig, "forth");
@@ -1241,6 +1235,10 @@
 #if defined(__linux__) && defined(__i386__)
   return (long)ioperm(from, num, (int)on);
 #else
+  UNUSED_ARGUMENT(from);
+  UNUSED_ARGUMENT(num);
+  UNUSED_ARGUMENT(on);
+
   return -1L;
 #endif
 }
@@ -1250,17 +1248,11 @@
  * call to c_key().
  */
 INTERNAL long
-c_keyques()
+c_keyques(void)
 {
-#ifdef MACOS
-	EventRecord theEvent;
-
-	if (!isatty(fileno(stdin)))
-		return(0L);
-	fflush(stdout);
-	return((long) EventAvail( 0x0008, &theEvent ) );
-#else
-        unsigned char c[1];		/* place to read the character */
+#if defined(__unix__) && defined(SYS5) && (defined(__linux__) || !defined(IRIS))
+	unsigned char c[1];		/* place to read the character */
+#endif /* c is used in a couple of configurations */
 	int nchars = 0;
 
 	fflush(stdout);
@@ -1287,10 +1279,9 @@
 		ioctl(0, FIONREAD, &nchars);
 #   endif
 #  endif
-# else
+# else  // Windows?
 	nchars = (long) (kbhit() ? 1 : 0);
 # endif
-#endif
 	return ((long)nchars);
 }
 
@@ -1314,19 +1305,18 @@
 
 #if defined(WIN32) || defined(DOS)
 struct keymap { char scancode; char esc_char; } keymap[] = {
-    'H', 'A',  /* Up */
-    'P', 'B',  /* Down */
-    'G', 'H',  /* Home */
-    'O', 'K',  /* End */
-    'K', 'D',  /* Left */
-    'M', 'C',  /* Right */
-    'S', 'P',  /* Delete */
-    0, 0,
+	{ 'H', 'A'},  /* Up */
+	{ 'P', 'B'},  /* Down */
+	{ 'G', 'H'},  /* Home */
+	{ 'O', 'K'},  /* End */
+	{ 'K', 'D'},  /* Left */
+	{ 'M', 'C'},  /* Right */
+	{ 'S', 'P'},  /* Delete */
+	{ 0, 0},
 };
 
 INTERNAL unsigned char
-mapkeys(c)
-	register int c;
+mapkeys(int c)
 {
 	register struct keymap *p;
 
@@ -1339,8 +1329,9 @@
 #endif
 
 /* Not INTERNAL because the PowerPC simulator uses it */
+long c_key(void);
 long
-c_key()
+c_key(void)
 {
 	register int c;
 
@@ -1360,7 +1351,7 @@
 	keymode();
 
 	fflush(stdout);
-	if ((c = getc(stdin)) != EOF)
+	if ((c = getchar()) != EOF)
 		return(c);
 	
 	s_bye(0L);
@@ -1372,11 +1363,10 @@
  * Send the character c to the output stream.
  */
 INTERNAL long
-c_emit(c)
-	long c;
+c_emit(long c)
 {
 	putchar((int)c);
-	fflush(stdout);
+	return (long) fflush(stdout);
 }
 
 /*
@@ -1387,17 +1377,16 @@
  * where input cannot be redirected away from the terminal, just return 0L.
  */
 INTERNAL long
-fileques()
+fileques(void)
 {
 #ifdef USE_STDIO
-#ifdef DEMON
+# ifdef DEMON
 	return(!fisatty(stdin));
-#else
+# else
 	return((long)0);
+# endif
 #endif
-#else
 	return(!isatty(fileno(stdin)));
-#endif
 }
 
 #ifdef USE_TERMIOS
@@ -1420,16 +1409,16 @@
 #define M_KEY  1
 #define M_LINE 2
 #define M_KEYQ 3
-static lmode = M_ORIG;
+static int lmode = M_ORIG;
 
 INTERNAL void
-initline() {
+initline(void) {
 	if (lmode != M_ORIG)
 		return;
 #ifdef USE_TERMIOS
-	tcgetattr(0, &ostate);              /* save old state        */
+	tcgetattr(0, &ostate);                  /* save old state        */
 
-	tcgetattr(0, &lstate);              /* base of line state    */
+	tcgetattr(0, &lstate);                  /* base of line state    */
 	lstate.c_iflag |= IXON|IXANY|IXOFF;     /* XON/XOFF              */
 	lstate.c_iflag |= ICRNL;                /* CR/NL munging         */
 
@@ -1486,7 +1475,7 @@
 #endif
 }
 
-INTERNAL linemode()
+INTERNAL void linemode(void)
 {
 	initline();
 	if (lmode != M_LINE) {
@@ -1496,17 +1485,13 @@
 #ifdef USE_TERMIOS
 		tcsetattr(0, TCSANOW, &lstate);
 #endif
-#ifdef MACOS
-		csetmode(C_ECHO, stdin);
-#endif
-
 		lmode = M_LINE;
 	}
 }
 
 #ifdef SYS5
 INTERNAL void
-keyqmode()
+keyqmode(void)
 {
 	initline();
 	if (lmode != M_KEYQ) {
@@ -1517,25 +1502,23 @@
 #endif
 
 INTERNAL void
-keymode()
+keymode(void)
 {
 	initline();
 	if (lmode != M_KEY) {
 #ifdef USE_STTY
-	        ioctl(0, TCSETA, &kstate);
+		ioctl(0, TCSETA, &kstate);
 #endif
 #ifdef USE_TERMIOS
 		tcsetattr(0, TCSANOW, &kstate);
 #endif
-#ifdef MACOS
-		csetmode(C_RAW, stdin);
-#endif
 		lmode = M_KEY;
 	}
 }
 
+void restoremode(void);
 void
-restoremode()
+restoremode(void)
 {
 	initline();
 	if (lmode != M_ORIG) {
@@ -1587,91 +1570,90 @@
   sstate.c_cc[VMIN] = 0;		/* Poll for character	 */
   sstate.c_cc[VTIME] = 0;               /* No input delay        */
 
-  tcsetattr((int)fd, TCSANOW, &sstate);
+  return (long) tcsetattr((int)fd, TCSANOW, &sstate);
 }
 
 struct { int baud; int code; } baudcodes[] =
-{       0,        B0,       50,       B50,       75,       B75,
-      110,      B110,      134,      B134,      150,      B150,
-      200,      B200,      300,      B300,      600,      B600,
-     1200,     B1200,     1800,     B1800,     2400,     B2400,
-     4800,     B4800,     9600,     B9600,    19200,    B19200,
-    38400,    B38400,    57600,    B57600,   115200,   B115200,
+{ {      0,        B0}, {       50,       B50}, {       75,       B75},
+  {    110,      B110}, {      134,      B134}, {      150,      B150},
+  {    200,      B200}, {      300,      B300}, {      600,      B600},
+  {   1200,     B1200}, {     1800,     B1800}, {     2400,     B2400},
+  {   4800,     B4800}, {     9600,     B9600}, {    19200,    B19200},
+  {  38400,    B38400}, {    57600,    B57600}, {   115200,   B115200},
 #ifdef B230400
-   230400,   B230400,
+  { 230400,   B230400},
 
 #ifdef B4000000
-   460800,   B460800,   500000,   B500000,
-   576000,   B576000,   921600,   B921600,  1000000,  B1000000,
-  1152000,  B1152000,  1500000,  B1500000,  2000000,  B2000000,
-  2500000,  B2500000,  3000000,  B3000000,  3500000,  B3500000,
-  4000000,  B4000000,
+  { 460800,   B460800}, {   500000,   B500000},
+  { 576000,   B576000}, {   921600,   B921600}, {  1000000,  B1000000},
+  {1152000,  B1152000}, {  1500000,  B1500000}, {  2000000,  B2000000},
+  {2500000,  B2500000}, {  3000000,  B3000000}, {  3500000,  B3500000},
+  {4000000,  B4000000},
 #endif
 #endif
-       -1,        -1, 
+  {     -1,        -1}, 
 };
 
-
 INTERNAL long
 c_setbaud(long fd, long baud)
 {
-  struct termios sstate;
-  int i;
-  int baudcode;
+	struct termios sstate;
+	int i;
+	int baudcode;
 
-  baudcode = -1;
-  for (i = 0; baudcodes[i].baud != -1; i++) {
-    if (baudcodes[i].baud == baud) {
-      baudcode = baudcodes[i].code;
-      break;
-    }
-  }
-  if (baudcode == -1)
-    return -1L;
+	baudcode = -1;
+	for (i = 0; baudcodes[i].baud != -1; i++) {
+		if (baudcodes[i].baud == baud) {
+			baudcode = baudcodes[i].code;
+			break;
+		}
+	}
+	if (baudcode == -1)
+		return -1L;
 
-  tcgetattr((int)fd, &sstate);	        /* base of key state     */
-  cfsetospeed(&sstate, baudcode);
-  cfsetispeed(&sstate, baudcode);
+	tcgetattr((int)fd, &sstate);	        /* base of key state     */
+	cfsetospeed(&sstate, baudcode);
+	cfsetispeed(&sstate, baudcode);
 
-  return (long)tcsetattr((int)fd, TCSADRAIN, &sstate);
+	return (long)tcsetattr((int)fd, TCSADRAIN, &sstate);
 }
 
 INTERNAL long
 c_setparity(long fd, long odd)
 {
-  struct termios sstate;
+	struct termios sstate;
 
-  tcgetattr((int)fd, &sstate);	        /* base of key state     */
+	tcgetattr((int)fd, &sstate);	        /* base of key state     */
 
-  if (odd)
-    sstate.c_cflag |= PARODD;
-  else
-    sstate.c_cflag &= ~PARODD;
+	if (odd)
+		sstate.c_cflag |= PARODD;
+	else
+		sstate.c_cflag &= ~PARODD;
 
-  return (long)tcsetattr((int)fd, TCSADRAIN, &sstate);
+	return (long)tcsetattr((int)fd, TCSADRAIN, &sstate);
 }
 INTERNAL long
 c_getattr(long fd)
 {
-  static struct termios sstate;
+	static struct termios sstate;
 
-  if (tcgetattr((int)fd, &sstate) < 0)
-    return (-1L);
+	if (tcgetattr((int)fd, &sstate) < 0)
+		return (-1L);
 
-  return((long)&sstate);
+	return((long)&sstate);
 }
 
 INTERNAL long
 c_setattr(long fd, long sstate)
 {
-  return (long)tcsetattr((int)fd, TCSADRAIN, (struct termios *)sstate);
+	return (long)tcsetattr((int)fd, TCSADRAIN, (struct termios *)sstate);
 }
 
 INTERNAL long
 c_drain(long fd)
 {
-  tcdrain((int)fd);
-  return 0L;
+	tcdrain((int)fd);
+	return 0L;
 }
 #endif
 
@@ -1681,26 +1663,19 @@
  * The line terminator character is not stored in the buffer.
  */
 INTERNAL long
-c_expect(max, buffer)
-	register long max;
-	char * buffer;
+c_expect(long max, char *buffer)
 {
-	register int c = 0;
+	int c = 0;
 	register char *p = buffer;
 
 	linemode();
 
 	fflush(stdout);
-#ifdef MACOS
-	while (max  &&  (c = getc(stdin)) != '\n' ) {
-		if (c == EOF)  continue;
+	read(0, &c, 1);
+	while (max--  &&  c != '\n'  &&  c != EOF ) {
 		*p++ = c;
-		max--;
+		read(0, &c, 1);
 	}
-#else
-	while (max--  &&  (c = getc(stdin)) != '\n'  &&  c != EOF )
-		*p++ = c;
-#endif
 	keymode();
 	return ( (long)(p - buffer) );
 }
@@ -1709,21 +1684,20 @@
  * Send len characters from the buffer at addr to the output stream.
  */
 INTERNAL long
-c_type(len, addr)
-	long len;
-	register char * addr;
+c_type(long len, char *addr)
 {
 	while(len--)
 		putchar(*addr++);
+	return 0L;
 }
 
 /*
  * Sends an end-of-line sequence to the output stream.
  */
 INTERNAL long
-c_cr()
+c_cr(void)
 {
-	putchar('\n');
+	return (long) putchar('\n');
 }
 
 /*
@@ -1731,15 +1705,15 @@
  * a packed (leading count byte) string.
  */
 INTERNAL long
-f_crstr()
+f_crstr(void)
 {
 	return((long)"\1\n");
 }
 
 /* Not INTERNAL because the PowerPC simulator uses it */
+long s_bye(long code);
 long
-s_bye(code)
-	long code;
+s_bye(long code)
 {
 	restoremode();
 	fflush(stdout);
@@ -1751,8 +1725,7 @@
  * stream.
  */
 void
-error(str1,str2)
-	char *str1, *str2;
+error(char *str1, char *str2)
 {
 	write(2,str1,strlen(str1));
 	write(2,str2,strlen(str2));
@@ -1762,7 +1735,7 @@
 
 /* Find the error code returned by the last failing system call. */
 INTERNAL long
-syserror()
+syserror(void)
 {
 #ifndef __unix__
 	extern int errno;
@@ -1774,8 +1747,7 @@
 /* Display an error message */
 
 INTERNAL long
-pr_error(errnum)
-	long errnum;
+pr_error(long errnum)
 {
 #ifndef __unix__
 	extern int errno;
@@ -1783,6 +1755,7 @@
 	
 	errno = errnum;
 	perror("");
+	return 0L;
 }
 
 INTERNAL char *expand_name();
@@ -1807,9 +1780,7 @@
 #endif
 
 INTERNAL long
-f_open(name, flag, mode)
-	char *name;
-	long flag, mode;
+f_open(char *name, long flag, long mode)
 {
 	char *expand_name();
 	char *sccs_get();
@@ -1840,9 +1811,7 @@
 #include <sys/file.h>
 #endif
 INTERNAL long
-f_creat(name, mode)
-	char *name;
-	long mode;
+f_creat(char *name, long mode)
 {
 	int result;
 
@@ -1867,8 +1836,7 @@
 }
 
 INTERNAL long
-f_mkdir(name)
-	char *name;
+f_mkdir(char *name)
 {
 #ifdef DEMON
 	return(-1);	/* XXX fixme */
@@ -1882,8 +1850,7 @@
 }
 
 INTERNAL long
-f_rmdir(name)
-	char *name;
+f_rmdir(char *name)
 {
 #ifdef DEMON
 	return(-1);	/* XXX fixme */
@@ -1893,9 +1860,7 @@
 }
 
 INTERNAL long
-f_read(fd, buf, cnt)
-	long fd, cnt;
-	char *buf;
+f_read(long fd, char *buf, long cnt)
 {
 #ifdef USE_STDIO
 	return((long)fread(buf, 1, cnt, (FILE *)fd));
@@ -1905,9 +1870,7 @@
 }
 
 INTERNAL long
-f_write(fd, buf, cnt)
-	long fd, cnt;
-	char *buf;
+f_write(long fd, char *buf, long cnt)
 {
 #ifdef USE_STDIO
 	return((long)fwrite(buf, 1, cnt, (FILE *)fd));
@@ -1917,8 +1880,7 @@
 }
 
 INTERNAL long
-f_close(fd)
-	long fd;
+f_close(long fd)
 {
 	long size;
 
@@ -1940,8 +1902,7 @@
 }
 
 INTERNAL long
-f_unlink(name)
-	char *name;
+f_unlink(char *name)
 {
 #ifdef DEMON
 	return((long)remove(expand_name(name)));
@@ -1951,8 +1912,7 @@
 }
 
 INTERNAL long
-f_lseek(fd, offset, flag)
-	long fd, offset, flag;
+f_lseek(long fd, long offset, long flag)
 {
 #ifdef USE_STDIO
 	return(fseek((FILE *)fd, offset, (int)flag));
@@ -1962,33 +1922,36 @@
 }
 
 INTERNAL long
-f_ioctl(fd, code, buf)
-	long fd, code;
-	char *buf;
+f_ioctl(long fd, long code, char *buf)
 {
 #ifdef __unix__
 	return((long)ioctl((int)fd, (int)code, buf));
 #else
+	UNUSED_ARGUMENT(fd);
+	UNUSED_ARGUMENT(code);
+	UNUSED_ARGUMENT(buf);
+
 	return((long)-1);
 #endif
 }
 
 INTERNAL long
-s_signal(signo, adr)
-	long signo;
-	void (*adr)();
+s_signal(long signo, void (*adr)())
 {
 #ifndef WIN32
 	return((long)signal((int)signo, adr));
 #else
+	UNUSED_ARGUMENT(signo);
+	UNUSED_ARGUMENT(adr);
+
 	return(0L);
 #endif
 }
 
 /* Within the first blank-delimited field, translate / to \ */
+#if defined(WIN32) || defined(DOS)
 INTERNAL char *
-backslash(cmd)
-	char *cmd;
+backslash(char *cmd)
 {
 	static char cmdbuf[256];
 	char c, *newp;
@@ -2006,15 +1969,15 @@
 	} while(c != '\0');
 	return(cmdbuf);
 }
+#endif /* WIN32 || DOS */
 
 INTERNAL long
-s_system(str)
-	char *str;
+s_system(char *str)
 {
 	int i;
 	char *cmd;
 
-        fflush(stdout);
+	fflush(stdout);
 	linemode();
 #if defined(WIN32) || defined(DOS)
 	/*
@@ -2038,9 +2001,9 @@
  * this on strings that are known to be in temporary storage.
  * For now, this is only used on the result from backslash().
  */
+#if defined(WIN32) || defined(DOS)
 INTERNAL char *
-clean_dir(name)
-	char *name;
+clean_dir(char *name)
 {
 	int namelen;
 
@@ -2049,34 +2012,12 @@
 		name[namelen - 1] = '\0';
 	return(name);
 }
+#endif /* WIN32 || DOS */
 
-#ifdef MACOS
-INTERNAL StringPtr
-pstr(str)
-    register char *str;
-{
-    static Str255 outstr;
-    register unsigned char *p;
-
-    for (p = &outstr[1]; *str; )
-        *p++ = *str++;
-    *outstr = p - outstr - 1;
-    return ((StringPtr)outstr);
-}
-#endif
 
 INTERNAL long
-s_chdir(str)
-	char *str;
+s_chdir(char *str)
 {
-#ifdef MACOS
-	WDPBRec pb;
-
-	pb.ioNamePtr = pstr(expand_name(str));
-	pb.ioVRefNum = 0;
-	pb.ioWDDirID = 0;
-	return( PBHSetVol(&pb, 0) );
-#else
 	char *name;
 #if defined(WIN32) || defined(DOS)
 	name = clean_dir(backslash(expand_name(str)));
@@ -2084,112 +2025,29 @@
 	name = expand_name(str);
 #endif
 	return((long)chdir(name));
-#endif
-}
-
-#ifdef MACOS
-void
-prepend(a, b)
-    Str255 a;
-    char *b;
-{
-    char *p, *q;
-    int len;
-    
-    len = a[0];
-    for(p = b + strlen(b) + 1, q = p + len; p > b; )
-        *--q = *--p;
-    memcpy(b, &a[1], a[0]);
-}
-
-Str255 fname;
-long
-s_getwd(buf)
-    char *buf;
-{
-    static char wd_buf[256];
-    int volume, dirid;
-    WDPBRec pb;
-    CInfoPBRec cpb;
-    
-    wd_buf[0] = ':';
-    wd_buf[1] = '\0';
-    
-    /* Save the current working directory so we can get back */
-    pb.ioNamePtr = (StringPtr)fname;
-    PBHGetVol(&pb, 0);
-    dirid = pb.ioWDDirID;
-    volume = pb.ioWDVRefNum;
-
-    while (1) {
-        /* Get the working directory ID */
-        pb.ioNamePtr = (StringPtr)fname;
-        PBHGetVol(&pb, 0);
-
-        /* Find its name */
-        cpb.dirInfo.ioNamePtr = (StringPtr)fname;
-        cpb.dirInfo.ioDrDirID = pb.ioWDDirID;
-        cpb.dirInfo.ioVRefNum = pb.ioWDVRefNum;
-        cpb.dirInfo.ioFDirIndex = -1;
-        PBGetCatInfo(&cpb, 0);
-
-        prepend(fname, wd_buf);
-
-        /* cd to the parent directory */
-        pb.ioWDDirID = 0;
-        pb.ioVRefNum = 0;
-        pb.ioNamePtr = (StringPtr)"\p::";
-        if (PBHSetVol(&pb, 0) != noErr) /* Bail out when we reach the root */
-            break;
-
-        prepend("\p:", wd_buf);
-    }
-
-    /* Restore previous working directory */
-    pb.ioVRefNum = volume;
-    pb.ioWDDirID = dirid;
-    pb.ioNamePtr = 0;
-    PBHSetVol(&pb, 0);
-
-    return((long)wd_buf);
 }
 
 INTERNAL long
-s_getwd0()
-{
-    return(s_getwd((char *)0));
-}
-#else
-INTERNAL long
-s_getwd(buf)
-	char *buf;
+s_getwd(char *buf)
 {
 	return ((long)getcwd(buf, MAXPATHLEN));
 }
 
 INTERNAL long
-s_getwd0()
+s_getwd0(void)
 {
 	static char tmpbuf[MAXPATHLEN];
 
 	return ((long)getcwd(tmpbuf, MAXPATHLEN));
 }
-#endif
 
 INTERNAL long
-m_alloc(size)
-	long size;
+m_alloc(long size)
 {
 	char *mem;
 
 	size = (size+7) & ~7;
-/* XXX is this needed? */
-size += 0x80;
-#ifdef MACOS
-	mem = (char *)NewPtrSys(size);
-#else
 	mem = (char *)malloc((size_t)size);
-#endif
 	if (mem != NULL)
 		memset(mem, '\0', size);
 
@@ -2198,21 +2056,15 @@
 
 /* ARGSUSED */
 INTERNAL long
-m_free(size, adr)
-	long size;
-	char *adr;
+m_free(long size, char *adr)
 {
-#ifdef MACOS
-	DisposPtr(adr);
-#else
+	UNUSED_ARGUMENT(size);
 	free(adr);
-#endif
+	return 0L;
 }
 
 INTERNAL long
-m_realloc(size, adr)
-	long size;
-	char *adr;
+m_realloc(long size, char *adr)
 {
 	char *mem;
 
@@ -2223,16 +2075,14 @@
 
 #ifdef __unix__
 INTERNAL long
-m_sbrk(size)
-	long size;
+m_sbrk(long size)
 {
 	return((long)sbrk(size));
 }
 #endif
 
 INTERNAL long
-c_getenv(str)
-	char *str;
+c_getenv(char *str)
 {
 	return((long)getenv(str));
 }
@@ -2244,7 +2094,7 @@
 #endif
 #endif
 INTERNAL long
-today()
+today(void)
 {
 	long tadd;
 	time(&tadd);
@@ -2252,7 +2102,7 @@
 }
 
 INTERNAL long
-timez()
+timez(void)
 {
 #if defined(BSD)
 	static struct timeval t;
@@ -2283,20 +2133,22 @@
 
 #if defined(BSD) || defined(__linux__)
 INTERNAL long
-s_timeofday()
+s_timeofday(struct timeval *tvp)
 {
 	static struct timeval t;
 	static struct timezone tz;
 	extern int gettimeofday();
 
-	gettimeofday(&t, &tz);
-	return((long)&t);
+	if (tvp == 0)
+		tvp = &t;
+	gettimeofday(tvp, &tz);
+	return((long)tvp);
 }
 #endif
 
 /* Return a string representing the name of the time zone */
 INTERNAL long
-timezstr()
+timezstr(void)
 {
 	return((long)"");	/* Regulus doesn't seem to have this */
 }
@@ -2310,17 +2162,23 @@
 #endif
 
 INTERNAL long
-s_flushcache(adr, len)
-     char *adr;
-     long len;
+s_flushcache(char *adr, long len)
 {
+	UNUSED_ARGUMENT(adr);
+	UNUSED_ARGUMENT(len);
+
+#ifdef __APPLE__
+	sys_icache_invalidate((void *)adr, (size_t)len);
+	return 0L;
+#endif
 #if defined(__linux__) && defined(ARM) 
 	__clear_cache(adr, adr+len);
+	return 0L;
 #endif
-
 #if defined(__linux__) && defined(MIPS) 
-       extern int cacheflush(char *addr, int nbytes, int cache);
-       (void) cacheflush(adr, len, BCACHE);
+	extern int cacheflush(char *addr, int nbytes, int cache);
+	(void) cacheflush(adr, len, BCACHE);
+	return 0L;
 #endif
 #if defined(NetBSD) && defined(ARM)
 	struct arm32_sync_icache_args { void *addr; long len; } sysarch_args;
@@ -2328,18 +2186,23 @@
 	sysarch_args.addr = (void *)adr;
 	sysarch_args.len = len;
 	sysarch(0, &sysarch_args);
+	return 0L;
 #endif
 #if defined(NetBSD) && defined(M68K)
 	m68k_sync_icache(adr, len);
+	return 0L;
 #endif
 #ifdef NeXT
 	asm("trap #2");
+	return 0L;
 #endif
 #ifdef WINNT
 	FlushInstructionCache(GetCurrentProcess(), adr, len);
+	return 0L;
 #endif
 #ifdef AIX
 	_sync_cache_range(adr, len);
+	return 0L;
 #endif
 #ifdef LinuxPOWERPC
 /*
@@ -2349,84 +2212,77 @@
  */
 #define CACHEBLOCKSIZE 0x20
 #define CACHEALIGN(adr)  (void *)((long)(adr) & ~(CACHEBLOCKSIZE-1))
-    register void *block, *end;
-    
-    block = CACHEALIGN(adr);
-    end = CACHEALIGN(adr + len + (CACHEBLOCKSIZE-1));
-    while (block < end) {
-        asm("dcbst 0,%0; sync" : : "r" (block));
-        asm("icbi  0,%0; sync" : : "r" (block));
-        block += CACHEBLOCKSIZE;
-    }
+	register void *block, *end;
+	block = CACHEALIGN(adr);
+	end = CACHEALIGN(adr + len + (CACHEBLOCKSIZE-1));
+	while (block < end) {
+		asm("dcbst 0,%0; sync" : : "r" (block));
+		asm("icbi  0,%0; sync" : : "r" (block));
+		block += CACHEBLOCKSIZE;
+	}
 #endif
+	return 0L;
 }
 
 INTERNAL long
-m_deflate(outlen, outadr, inlen, inadr)
-     long outlen;
-     long outadr;
-     long inlen;
-     long inadr;
-{
-     /*
-      * Zlib compress() returns a buffer in zlib format (see RFC1950).
-      * The buffer is formatted as
-      *   Header[2]  Compressed_data[outlen-6] Adler32[4]
-      * Our inflate() routine expects gzip format (RFC1952):
-      *   Header[10] Compressed_data[outlen-6] CRC32[4] inlen[4]
-      * The conversion is simple so let's just do it here.
-      * Note the CRC32 and inlen fields are little-endian by spec.
-      * Note the overlapping copy requires memmove() or equivalent.
-      * Is the outbuf big enough to handle pathological cases?
-      */
-     unsigned char *outbuf = (unsigned char *)outadr;  /* type convenience */
-     unsigned long datalen;
-     unsigned char gzip_hdr[] = {
-        0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03
-     };
-     unsigned long crc = crc32(0, inadr, inlen);
-     int err = compress(outbuf, &outlen, (void *)inadr, inlen);
-     if (err) return 0;
-
-     datalen = outlen - 6;
-     memmove(&outbuf[10], &outbuf[2], datalen);
-     memmove(&outbuf[0], gzip_hdr, 10);
+m_deflate(long outlen, long outadr, long inlen, long inadr)
+{
+	/*
+	 * Zlib compress() returns a buffer in zlib format (see RFC1950).
+	 * The buffer is formatted as
+	 *   Header[2]  Compressed_data[outlen-6] Adler32[4]
+	 * Our inflate() routine expects gzip format (RFC1952):
+	 *   Header[10] Compressed_data[outlen-6] CRC32[4] inlen[4]
+	 * The conversion is simple so let's just do it here.
+	 * Note the CRC32 and inlen fields are little-endian by spec.
+	 * Note the overlapping copy requires memmove() or equivalent.
+	 * Is the outbuf big enough to handle pathological cases?
+	 */
+	unsigned char *outbuf = (unsigned char *)outadr;  /* type convenience */
+	unsigned long datalen;
+	unsigned char gzip_hdr[] = {
+		0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03
+	};
+	unsigned long crc = crc32(0, inadr, inlen);
+	int err = compress(outbuf, &outlen, (void *)inadr, inlen);
+	if (err) return 0;
+
+	datalen = outlen - 6;
+	memmove(&outbuf[10], &outbuf[2], datalen);
+	memmove(&outbuf[0], gzip_hdr, 10);
 #ifndef HOST_LITTLE_ENDIAN
-     crc = lbflip(crc);
-     inlen = lbflip(inlen);
+	crc = lbflip(crc);
+	inlen = lbflip(inlen);
 #endif
-     /* The CRC and input length are little-endian, not necessarily aligned */
-     outbuf[10 + datalen] = crc & 0xff;
-     outbuf[11 + datalen] = (crc>>8) & 0xff;
-     outbuf[12 + datalen] = (crc>>16) & 0xff;
-     outbuf[13 + datalen] = (crc>>24) & 0xff;
-     outbuf[14 + datalen] = inlen & 0xff;
-     outbuf[15 + datalen] = (inlen>>8) & 0xff;
-     outbuf[16 + datalen] = (inlen>>16) & 0xff;
-     outbuf[17 + datalen] = (inlen>>24) & 0xff;
-     return (18 + datalen);
+	/* The CRC and input length are little-endian, not necessarily aligned */
+	outbuf[10 + datalen] = crc & 0xff;
+	outbuf[11 + datalen] = (crc>>8) & 0xff;
+	outbuf[12 + datalen] = (crc>>16) & 0xff;
+	outbuf[13 + datalen] = (crc>>24) & 0xff;
+	outbuf[14 + datalen] = inlen & 0xff;
+	outbuf[15 + datalen] = (inlen>>8) & 0xff;
+	outbuf[16 + datalen] = (inlen>>16) & 0xff;
+	outbuf[17 + datalen] = (inlen>>24) & 0xff;
+	return (18 + datalen);
 }
 
 INTERNAL long
-m_inflate(nohdr, outadr, inadr)
-     long nohdr;
-     long outadr;
-     long inadr;
+m_inflate(long nohdr, long outadr, long inadr)
 {
-     static char workspace[0x10000];
-     return((long)inflate(workspace, nohdr, (void *)outadr, (void *)inadr));
+	static char workspace[0x10000];
+	return((long)inflate(workspace, nohdr, (void *)outadr, (void *)inadr));
 }
 
 INTERNAL long
 m_map(long fd, long len, long off)
 {
-    return (long)mmap((void *)0, (size_t)len, PROT_READ|PROT_WRITE, MAP_SHARED, (int)fd, (off_t)off);
+	return (long)mmap((void *)0, (size_t)len, PROT_READ|PROT_WRITE, MAP_SHARED, (int)fd, (off_t)off);
 }
 
 INTERNAL long
 m_unmap(long len, long addr)
 {
-    return (long)munmap((void *)addr, (size_t)len);
+	return (long)munmap((void *)addr, (size_t)len);
 }
 
 /*
@@ -2434,127 +2290,106 @@
  * search path specified by the environment variable FTHPATH.
  * Returns file descriptor or -1 if not found
  */
-char    fnb[MAXPATHLEN];
+char fnb[MAXPATHLEN];
 INTERNAL long
-path_open(fn)
-register char *fn;
+path_open(char *fn)
 {
-    static char *path;
-    register char *dp;
-    int     fd;
-    register char  *lpath;
+	static char *path;
+	register char *dp;
+	int fd;
+	register char  *lpath;
 
-    if (fn == (char *)0)
-	return -1;
-    if (path == (char *)0) {
-	if (((path = getenv ("FTHPATH")) == (char *)0)
-	&&  ((path = getenv ("FPATH")) == (char *)0))	/* ksh uses FPATH ! */
-	    path = DEF_FPATH;
-    }
-
-    lpath = path;
-
-    /*
-     * Don't apply search path to filenames beginning
-     * with either a drive specification or a slash.
-     */
-    if ((strlen(fn) >= 2) && (fn[1] == ':'))
-	lpath = "";
-    if (*fn == '/' || *fn == '\\')
-	lpath = "";
-    do {
-	dp = fnb;
-	while (*lpath && *lpath != ENV_DELIM)
-	    *dp++ = *lpath++;
-	if (dp != fnb)
-	    *dp++ = '/';
-	strcpy (dp, fn);
-	if ((fd = open (fnb, _O_BINARY, 0)) >= 0)
-	    return(fd);
-    } while (*lpath++);
-    if ((fd = open (fn, _O_BINARY, 0)) >= 0)
-       return(fd);
-    return -1;
-}
+	if (fn == (char *)0)
+		return -1;
+	if (path == (char *)0) {
+		if (((path = getenv ("FTHPATH")) == (char *)0)
+		    &&  ((path = getenv ("FPATH")) == (char *)0))	/* ksh uses FPATH ! */
+			path = DEF_FPATH;
+	}
 
-#ifdef MACOS
-INTERNAL int
-executable(filename)	/* True if file is executable */
-    char *filename;
-{
+	lpath = path;
+
+	/*
+	 * Don't apply search path to filenames beginning
+	 * with either a drive specification or a slash.
+	 */
+	if ((strlen(fn) >= 2) && (fn[1] == ':'))
+		lpath = "";
+	if (*fn == '/' || *fn == '\\')
+		lpath = "";
+	do {
+		dp = fnb;
+		while (*lpath && *lpath != ENV_DELIM)
+			*dp++ = *lpath++;
+		if (dp != fnb)
+			*dp++ = '/';
+		strcpy (dp, fn);
+		if ((fd = open (fnb, _O_BINARY, 0)) >= 0)
+			return(fd);
+	} while (*lpath++);
+	if ((fd = open (fn, _O_BINARY, 0)) >= 0)
+		return(fd);
 	return -1;
 }
 
-INTERNAL long
-f_modtime(filename)	
-    long filename;
-{
-	return 0L;
-}
-#else
 INTERNAL int
-executable(filename)	/* True if file is executable */
-    char *filename;
+executable(char *filename)	/* True if file is executable */
 {
 #ifdef WIN32
-    return(1);
+	return(1);
 #else
-    struct stat stbuf;
+	struct stat stbuf;
 
-    return(   stat(expand_name(filename),&stbuf) == 0
-          && (stbuf.st_mode&S_IFMT) == S_IFREG
-	  &&  access(filename,1) == 0
-	  );
+	return(   stat(expand_name(filename),&stbuf) == 0
+		  && (stbuf.st_mode&S_IFMT) == S_IFREG
+		  &&  access(filename,1) == 0
+		);
 #endif
 }
 
 INTERNAL long
-f_modtime(filename)	/* True if file is executable */
-    long filename;
+f_modtime(long filename)	/* True if file is executable */
 {
-    struct stat stbuf;
+	struct stat stbuf;
 
-    if (stat(expand_name((char *)filename),&stbuf) != 0)
-	    return (0L);
-    return ((long)stbuf.st_mtime);
+	if (stat(expand_name((char *)filename),&stbuf) != 0)
+		return (0L);
+	return ((long)stbuf.st_mtime);
 }
-#endif
 
 /* Find fname for symbol table  */
 INTERNAL long
-pathname()
+pathname(void)
 {   
-    static char buf[256];
-    register char *cp, *cp2;
-    char *getenv();
-
-    cp = getenv("PATH");
-    if(cp == NULL) cp=DEF_PATH;
-    if(*cp == ':' || *progname == '/') {
-        cp++;
-        if(executable(progname)) {
-            strcpy(buf, progname);
-            return((long)buf);
-        }
-    }
-    for(;*cp;) {
-            /* copy over current directory and then append progname */
-        for(cp2 = buf; (*cp) != '\0' && (*cp) != ':';)
-            *cp2++ = *cp++;
-        *cp2++ = '/';
-        strcpy(cp2, progname);
-        if(*cp) cp++;
-        if(!executable(buf)) continue;
-        return((long)buf);
-    }
-    strcpy(buf, progname);
-    return((long)buf);
+	static char buf[256];
+	register char *cp, *cp2;
+	char *getenv();
+
+	cp = getenv("PATH");
+	if(cp == NULL) cp=DEF_PATH;
+	if(*cp == ':' || *progname == '/') {
+		cp++;
+		if(executable(progname)) {
+			strcpy(buf, progname);
+			return((long)buf);
+		}
+	}
+	for(;*cp;) {
+		/* copy over current directory and then append progname */
+		for(cp2 = buf; (*cp) != '\0' && (*cp) != ':';)
+			*cp2++ = *cp++;
+		*cp2++ = '/';
+		strcpy(cp2, progname);
+		if(*cp) cp++;
+		if(!executable(buf)) continue;
+		return((long)buf);
+	}
+	strcpy(buf, progname);
+	return((long)buf);
 }
 
 INTERNAL char *
-substr(str, pos, n)
-	char *str;
-	int pos, n;
+substr(char *str, int pos, int n)
 {
 	register int len = strlen(str);
 	static char outstr[128];
@@ -2568,7 +2403,7 @@
 	if (pos + n - 1 > len) {
 		n = len + 1  - pos;
 		if (n < 0)
-		    n = 0;
+			n = 0;
 	}
 	strncpy(outstr, str + pos - 1, n);
 	outstr[n] = '\0';
@@ -2578,8 +2413,7 @@
 #ifdef SCCS
 
 INTERNAL char *
-sccs_name(name)
-	char *name;
+sccs_name(char *name)
 {
 	static char sccsname[512];
 	char *p;
@@ -2611,8 +2445,7 @@
  *    N   |  N   |    Error      (-1)
  */
 INTERNAL int
-isobsolete(name)
-	char *name;
+isobsolete(char *name)
 {
 	struct stat status, sccsstatus;
 	int file, sccsfile;
@@ -2634,8 +2467,7 @@
 }
 
 INTERNAL char *
-sccs_get(name)
-	char *name;
+sccs_get(char *name)
 {
 	static char str[512];
 
@@ -2648,9 +2480,9 @@
 
 #endif
 
+char *fetchenv(char *name);
 char *
-fetchenv(name)
-	char *name;
+fetchenv(char *name)
 {
 	if (*bpval != '\0' && strcmp(name, "BP") == 0)
 		return (bpval);
@@ -2659,117 +2491,59 @@
 	return (getenv(name));
 }
 
-#ifdef MACOS
-INTERNAL char *
-expand_name(name)
-	char *name;
-{
-	char *fnamep;
-	char namebuf[256];
-
-	fnamep = name;
-
-	if (*fnamep == '$') {
-		/* See if the Envname is {BP} */
-		strcpy( namebuf, name );
-		namebuf[5] = '\0';
-		
-		if (strcmp( namebuf, "${BP}" ) != 0) {
-			printf("Environment Variables other than \"BP\" are not supported for MacOS.\n");
-			goto exit;
-		}
-
-		if (strlen( BP_path ) == 0) {
-			printf("Command line BP path was not set.\n");
-			goto exit;
-		}
-			
-		/* Prepend the path taken from the commandline in place of the environment variable spec */
-		strcpy(namebuf, BP_path);
-		strcat(namebuf, (const char *)&fnamep[5]);
-			
-		/* replace UNIX / with Mac :  and replace UNIX .. with Mac :: */
-		fnamep = namebuf;
-		while (*fnamep != '\0') {
-			if (*fnamep == '/')
-				*fnamep = ENV_DELIM;
-			fnamep++;
-		}
-		
-		/* Copy the expanded name back original string. */
-		strcpy(name, namebuf);
-	}
-	
-exit:
-	return (name);
-}
-#else
 INTERNAL char *
-expand_name(name)
-	char *name;
+expand_name(char *name)
 {
 	char envvar[64], *fnamep, *envp, paren, *fullp;
 	static char fullname[MAXPATHLEN];
 	int ndx = 0;
 
-        fullp = fullname;
+	fullp = fullname;
 	fullname[0] = '\0';
 
 	fnamep = name;
 
-        while (*fnamep) {
-            if (*fnamep == '$') {
-		fnamep++;
-		if (*fnamep == '{' || *fnamep == '(') {	// multi char env var
-                    if (*fnamep == '{')
-                        paren = '}';
-                    else
-                        paren = ')';
-                    fnamep++;
-
-                    envvar[ndx++] = *(fnamep++);
-
-                    while (*fnamep != paren && ndx < MAXPATHLEN && *fnamep != '\0') {
-                        envvar[ndx++] = *(fnamep++);
-                    }
-                    if (*fnamep == paren) {
-                        fnamep++;
-                    } else {
-                        ndx = 0;
-                        fnamep = name;
-                    }
-		} else		/* single char env. var. */
-                    envvar[ndx++] = *(fnamep++);
-		envvar[ndx] = '\0';
-
-		if (ndx > 0 && (envp = fetchenv(envvar)) != NULL) {
-                    log_env(envvar, envp);
-                    strcpy(fullp, envp);
-                    fullp += strlen(envp);
+	while (*fnamep) {
+		if (*fnamep == '$') {
+			fnamep++;
+			if (*fnamep == '{' || *fnamep == '(') {	// multi char env var
+				if (*fnamep == '{')
+					paren = '}';
+				else
+					paren = ')';
+				fnamep++;
+
+				envvar[ndx++] = *(fnamep++);
+
+				while (*fnamep != paren && ndx < MAXPATHLEN && *fnamep != '\0') {
+					envvar[ndx++] = *(fnamep++);
+				}
+				if (*fnamep == paren) {
+					fnamep++;
+				} else {
+					ndx = 0;
+					fnamep = name;
+				}
+			} else		/* single char env. var. */
+				envvar[ndx++] = *(fnamep++);
+			envvar[ndx] = '\0';
+
+			if (ndx > 0 && (envp = fetchenv(envvar)) != NULL) {
+				log_env(envvar, envp);
+				strcpy(fullp, envp);
+				fullp += strlen(envp);
+			} else {
+				printf("Can't find environment variable %s in %s\n", envvar,name);
+			}
+			ndx = 0;
 		} else {
-                    printf("Can't find environment variable %s in %s\n", envvar,name);
+			*fullp++ = *fnamep++;
 		}
-                ndx = 0;
-            } else {
-                *fullp++ = *fnamep++;
-            }
-        }
-        *fullp = '\0';
-        return (fullname);
-}
-#endif
-
-#ifdef MACOS
-long
-t_init() {
-	if (isatty(fileno(stdin))) {
-		console_options.pause_atexit = 0;
-		console_options.title = "\pForthmacs";
-		csetmode(C_RAW, stdin);
 	}
-    return (0);
+	*fullp = '\0';
+	return (fullname);
 }
-#endif
+
 
 // LICENSE_BEGIN
 // Copyright (c) 2006 FirmWorks



More information about the openfirmware mailing list