Compile dtksh on FreeBSD

dtksh can be now compiled on FreeBSD. Work in progress.

Needs a real Korn shell to bootstrap as $(KSHELL).
KSHELL is set by default to /usr/local/bin/ksh93
(generic POSIX shell may not work)

Tested on:

  FreeBSD 9.0-BETA1 #0 r224912M amd64

Known issues:

xvmstat:
* sleep does not work well (SIGSTOP is delivered)
xpong:
* xpong: line 220:  ball1x = max_x * 2.2 / 3 : arithmetic syntax error
* dtksh is rebuilt uncondtionally every time make is invoked
This commit is contained in:
Marcin Cieslak
2012-08-14 15:31:55 +02:00
committed by Jon Trulson
parent 441a25b361
commit d3206f4514
21 changed files with 54 additions and 207 deletions

View File

@@ -112,7 +112,7 @@ hashalloc __PARAM__((Hash_table_t* ref, ...), (va_alist)) __OTORP__(va_dcl)
register Hash_table_t* ret = 0;
register int internal;
int n;
va_list ap;
va_list ap, vl;
va_list va[4];
va_list* vp = va;
HASHregion region = 0;
@@ -214,27 +214,19 @@ hashalloc __PARAM__((Hash_table_t* ref, ...), (va_alist)) __OTORP__(va_dcl)
tab->flags |= HASH_STATIC;
break;
case HASH_va_list:
#ifdef __ppc
if (vp < &va[elementsof(va)])
{
__va_copy( *vp, ap );
vp++;
}
__va_copy(ap, *((va_list *) va_arg(ap, va_list)) );
#else
if (vp < &va[elementsof(va)]) *vp++ = ap;
ap = va_arg(ap, va_list);
#endif
vl = va_arg(ap, va_list);
__va_copy(ap, vl);
break;
case 0:
if (vp > va)
{
#ifdef __ppc
vp--;
__va_copy( ap, *vp );
#else
ap = *--vp;
#endif
break;
}
if (tab->flags & HASH_SCOPE)

View File

@@ -285,8 +285,6 @@ initialize __PARAM__((register Feature_t* fp, const char* path, const char* comm
if (fp->op != OP_path_resolve || !fs3d(FS3D_TEST))
{
if (fp->op == OP_universe)
ok = streq(_UNIV_DEFAULT, "att");
if (p = getenv("PATH"))
{
register int r = 1;
@@ -402,12 +400,6 @@ feature __PARAM__((const char* name, const char* path, const char* value), (name
break;
case OP_universe:
#if _lib_universe
if (getuniverse(fp->value) < 0)
strcpy(fp->value, "att");
if (value)
setuniverse(value);
#else
#ifdef UNIV_MAX
n = 0;
if (value)
@@ -417,20 +409,13 @@ feature __PARAM__((const char* name, const char* path, const char* value), (name
if (n >= univ_max)
return(0);
}
#ifdef ATT_UNIV
n = setuniverse(n + 1);
if (!value && n > 0)
setuniverse(n);
#else
n = universe(value ? n + 1 : U_GET);
#endif
if (n <= 0 || n >= univ_max)
n = 1;
strcpy(fp->value, univ_name[n - 1]);
#else
if (!synthesize(fp, path, value))
initialize(fp, path, "echo", "att", "ucb");
#endif
#endif
break;

View File

@@ -90,7 +90,6 @@
goto pop_fa; \
else elt = (etype)arge; \
}
#ifdef __ppc
#define GETARGL(elt,arge,argf,args,etype,type,fmt,t_user,n_user) \
{ if(!argf) \
__va_copy( elt, va_arg(args,type) ); \
@@ -98,7 +97,6 @@
goto pop_fa; \
else __va_copy( elt, arge ); \
}
#endif
#if __STD_C
sfvprintf(Sfio_t* f, const char* form, va_list args)
@@ -303,15 +301,9 @@ loop_fa :
GETARG(form,form,argf,args,char*,char*,'1',t_user,n_user);
if(!form)
form = "";
#ifdef __ppc
GETARGL(argsp,argsp,argf,args,va_list*,va_list*,'2',t_user,n_user);
__va_copy( fa->args, args );
__va_copy( args, argsp );
#else
GETARG(argsp,argsp,argf,args,va_list*,va_list*,'2',t_user,n_user);
memcpy((Void_t*)(&(fa->args)), (Void_t*)(&args), sizeof(va_list));
memcpy((Void_t*)(&args), (Void_t*)argsp, sizeof(va_list));
#endif
fa->argf.p = argf;
fa->extf.p = extf;
fa->next = fast;
@@ -321,12 +313,8 @@ loop_fa :
default : /* unknown directive */
if(extf)
{
#ifdef __ppc
va_list savarg; /* is this portable? Sorry .. NO. */
__va_copy( savarg, args );
#else
va_list savarg = args; /* is this portable? */
#endif
GETARG(sp,astr,argf,args,char*,char*,fmt,t_user,n_user);
astr = NIL(char*);
@@ -334,11 +322,7 @@ loop_fa :
if((sp = astr) )
goto s_format;
#ifdef __ppc
__va_copy( args, savarg ); /* extf failed, treat as if unmatched */
#else
args = savarg; /* extf failed, treat as if unmatched */
#endif
}
/* treat as text */

View File

@@ -228,11 +228,7 @@ tokscan __PARAM__((register char* s, char** nxt, const char* fmt, ...), (va_alis
if (f = prv_f)
{
prv_f = 0;
#ifdef __ppc
__va_copy( ap, prv_ap );
#else
ap = prv_ap;
#endif
continue;
}
goto done;
@@ -261,15 +257,9 @@ tokscan __PARAM__((register char* s, char** nxt, const char* fmt, ...), (va_alis
case ':':
prv_f = f;
f = va_arg(ap, char*);
#ifdef __ppc
__va_copy( prv_ap, ap );
pap = va_arg(ap, va_list*)) );
__va_copy( ap, pap );
#else
prv_ap = ap;
pap = va_arg(ap, va_list*);
memcpy(&ap, pap, sizeof(ap));
#endif
__va_copy( ap, pap );
continue;
case 'c':
p_char = va_arg(ap, char*);