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
XCOMM some of these cannot be built on linux yet.
XCOMM dtksh dtinfo
-#if defined(LinuxArchitecture) || defined(OpenBSDArchitecture) || defined(FreeBSDArchitecture)
+#if defined(LinuxArchitecture) || defined(OpenBSDArchitecture)
DTKSHDIR =
DTINFODIR =
+#elif defined(FreeBSDArchitecture)
+DTKSHDIR = dtksh
+DTINFODIR =
#else
DTKSHDIR = dtksh
DTINFODIR = dtinfo
clean::
@echo " Cleaning ksh directories"
- ./MakeClean
+ $(SHELL) MakeClean
#include "xmwidgets.h"
#include "msgs.h"
-#if defined(SYSV) || defined(SVR4_0) || defined(SVR4) || defined(DEC)
+#if defined(SYSV) || defined(SVR4_0) || defined(SVR4) || defined(DEC) \
+ || defined(CSRG_BASED) || defined(linux)
#define lsprintf sprintf
#endif
cb = (XtCallbackList)XtMalloc(sizeof(XtCallbackRec)*2);
cb[0].callback = (XtCallbackProc)stdCB;
- cdata = GetNewCBData((String)fval->addr, w, DTKSHConversionResource, NULL);
+ cdata = GetNewCBData((String)fval->addr, w, DTKSHConversionResource, None);
cb[0].closure = (caddr_t)cdata;
cb[1].callback = NULL;
{"PropertyChangeMask", PropertyChangeMask},
{"ColormapChangeMask", ColormapChangeMask},
{"OwnerGrabButtonMask", OwnerGrabButtonMask},
- {NULL, NULL},
+ {NULL, NoEventMask},
};
{"MWM_DECOR_MENU", MWM_DECOR_MENU},
{"MWM_DECOR_MINIMIZE", MWM_DECOR_MINIMIZE},
{"MWM_DECOR_MAXIMIZE", MWM_DECOR_MAXIMIZE},
- {NULL, NULL},
+ {NULL, 0},
};
static MWMTable mwmFunctions[] = {
{"MWM_FUNC_MINIMIZE", MWM_FUNC_MINIMIZE},
{"MWM_FUNC_MAXIMIZE", MWM_FUNC_MAXIMIZE},
{"MWM_FUNC_CLOSE", MWM_FUNC_CLOSE},
- {NULL, NULL},
+ {NULL, 0},
};
static void
.NO_PARALLEL:
#endif /* SunArchitecture */
-FORCE_SHIP = -E
+FORCE_SHIP = -F
MALLOCOBJ =
OBJS = $(KSH_OBJS) $(KSH_LIBS)
+KSHELL?= /usr/local/bin/ksh93
SUIDEXECDEFINES = \
-DPROFILEPATH=\"$(CDE_CONFIGURATION_TOP)/config/profile\" \
ksh93src:
$(RM) $(SHIP_DIR)/$(ALL_SUBS)/$(ALL_SUBS)/BUILT; \
- if [ -f /bin/ksh ]; \
- then \
- SHELL=/bin/ksh CC=$(CC) CCFLAGS="$(CCFLAGS)" /bin/ksh ship/shipin $(FORCE_SHIP); \
- elif [ -f /bin/sh ]; \
- then \
- SHELL=/bin/sh CC=$(CC) CCFLAGS="$(CCFLAGS)" /bin/sh ship/shipin $(FORCE_SHIP); \
- else \
- SHELL="" CC=$(CC) CCFLAGS="$(CCFLAGS)" ship/shipin $(FORCE_SHIP); \
- fi
+ SHELL=$(KSHELL) CC=$(CC) CCFLAGS="$(CCFLAGS)" $(KSHELL) ship/shipin $(FORCE_SHIP)
ksh93.o: $(OBJS)
$(LD) -r -o $@ $(OBJS)
esac
trap 'exit 2' 1 2
-#
-# check if we can use pax -- punt to cpio
-#
-
-AR_DELTA=
-NEED_pax=
-_cpio_=
-_cpio_local=
-_pax_=
-_pax_local=
-for p in $_path_
-do case $AR_DELTA in
- "") for f in $p/pax $p/pax.save
- do if ($f -f /dev/null -z /dev/null) >/dev/null 2>&1
- then _pax_=$p/pax
- c=pax; eval new=$_stamp_
- if test "$new" -ge "$OLDEST_pax"
- then case $f in
- $BIN/pax) if test ! -f $f.save
- then $_trace_ cp $f $f.save
- fi
- ;;
- esac
- AR_DELTA=$f
- break 2
- fi
- fi
- done
- ;;
- esac
- case $_cpio_ in
- "") if test -f $p/cpio
- then case $p in
- $BIN) _cpio_local=$p/cpio
- ;;
- *) _cpio_=$p/cpio
- case $AR_DELTA in
- ?*) break ;;
- esac
- ;;
- esac
- fi
- ;;
- esac
- case $_pax_ in
- "") if test -f $p/pax
- then case $p in
- $BIN) _pax_local=$p/pax
- ;;
- *) _pax_=$p/pax
- case $AR_DELTA in
- ?*) break ;;
- esac
- ;;
- esac
- fi
- ;;
- esac
-done
-case $_cpio_ in
-"") _cpio_=$_cpio_local ;;
-esac
-case $_pax_ in
-"") _pax_=$_pax_local ;;
-esac
-case $_pax_ in
-?*) AR_PATH=$_pax_
- case $AR_DELTA in
- "") AR_LIST="$AR_PATH" ;;
- *) AR_LIST="$AR_PATH -x ignore" ;;
- esac
- AR_READ="$AR_PATH -r"
- AR_WRITE="$AR_PATH -w"
- ;;
-*) AAR_PATH=tar
- AAR_LIST="$AAR_PATH t"
- AAR_READ="$AAR_PATH x"
- AAR_WRITE="$AAR_PATH c"
- case $_cpio_ in
- ?*) AR_PATH=$_cpio_
- AR_LIST="$AR_PATH -ict"
- AR_READ="$AR_PATH -icdmu"
- AR_WRITE="$AR_PATH -oc"
- ;;
- *) AR_PATH=$AAR_PATH
- AR_LIST=$AAR_LIST
- AR_READ=$AAR_READ
- AR_WRITE=$AAR_WRITE
- AAR_PATH=
- AAR_LIST=
- AAR_READ=
- AAR_WRITE=
- ;;
- esac
-esac
-case $AR_PATH in
-"") echo $_command_: must have pax, cpio, or tar to uncrate >&2; exit 1 ;;
-esac
-OAR_PATH=$AR_PATH
-OAR_LIST=$AR_LIST
-OAR_READ=$AR_READ
-OAR_WRITE=$AR_WRITE
-OAR_DELTA=$AR_DELTA
-
#
# check if we can use nmake from the start
# if so then limit proto to notices only
# include <sys/types.h>
# include <sys/stat.h>
+# include <string.h>
# undef ctime
extern __MANGLE__ int access __PROTO__((const char*, int));
-extern __MANGLE__ __V_* calloc __PROTO__((int, int));
+extern __MANGLE__ __V_* calloc __PROTO__((size_t, size_t));
extern __MANGLE__ int close __PROTO__((int));
extern __MANGLE__ int creat __PROTO__((const char*, int));
extern __MANGLE__ char* ctime __PROTO__((time_t*));
tp->next = item;
}
tp = item;
- tp->timeout = (__V_*)timeradd(tp->milli,tp->flags&R_FLAG,trap_timeout,(__V_*)tp);
+ tp->timeout = (__V_*)kshtimeradd(tp->milli,tp->flags&R_FLAG,trap_timeout,(__V_*)tp);
return(list);
}
jmpval = sigsetjmp(buff.buff,0);
if(jmpval)
goto done;
- timeslot = (__V_*)timeradd(timeout,0,timedout,(__V_*)iop);
+ timeslot = (__V_*)kshtimeradd(timeout,0,timedout,(__V_*)iop);
}
if(!(cp = (unsigned char*)sfgetr(iop,delim,0)))
cp = (unsigned char*)sfgetr(iop,delim,-1);
__V_ *tp;
expired = 0;
sh.lastsig = 0;
- tp = (__V_*)timeradd(1000*sec, 0, completed, (__V_*)0);
+ tp = (__V_*)kshtimeradd(1000*sec, 0, completed, (__V_*)0);
do
{
pause();
#ifdef KSHELL
(HISTCUR)->nvalue.lp = (&hp->histind);
#endif /* KSHELL */
- timeradd(1000L*(HIST_RECENT-30), 1, hist_touch, (__V_*)hp->histname);
+ kshtimeradd(1000L*(HIST_RECENT-30), 1, hist_touch, (__V_*)hp->histname);
#ifdef SHOPT_ACCTFILE
if(sh_isstate(SH_INTERACTIVE))
acctinit();
#define MAXCHAR MAXLINE-2 /* max char per line */
-#undef isblank
#ifdef SHOPT_MULTIBYTE
static int bigvi;
# define gencpy(a,b) ed_gencpy(a,b)
# define is_print(c) ((c&~STRIP) || isprint(c))
static int isalph __PROTO__((int));
static int ismetach __PROTO__((int));
- static int isblank __PROTO__((int));
+ static int kshisblank __PROTO__((int));
# include "lexstates.h"
#else
# define gencpy(a,b) strcpy((char*)(a),(char*)(b))
# define genncpy(a,b,n) strncpy((char*)(a),(char*)(b),n)
# define genlen(str) strlen(str)
# define isalph(v) ((_c=virtual[v])=='_'||isalnum(_c))
-# define isblank(v) isspace(virtual[v])
+# define kshisblank(v) isspace(virtual[v])
# define ismetach(v) ismeta(virtual[v])
# define digit(c) isdigit(c)
# define is_print(c) isprint(c)
#ifdef FIORDCHK
static clock_t typeahead; /* typeahead occurred */
- extern __MANGLE__ int ioctl __PROTO__((int, int, ...));
+ extern __MANGLE__ int ioctl __PROTO__((int, unsigned long, ...));
#else
static int typeahead; /* typeahead occurred */
#endif /* FIORDCHK */
register int tcur_virt = cur_virt;
while( nwords-- && tcur_virt > first_virt )
{
- if( !isblank(tcur_virt) && isblank(tcur_virt-1)
+ if( !kshisblank(tcur_virt) && kshisblank(tcur_virt-1)
&& tcur_virt>first_virt )
--tcur_virt;
else if(cmd != 'B')
if((!cur && last) || (cur && !last))
--tcur_virt;
}
- while( isblank(tcur_virt) && tcur_virt>=first_virt )
+ while( kshisblank(tcur_virt) && tcur_virt>=first_virt )
--tcur_virt;
if( cmd == 'B' )
{
- while( !isblank(tcur_virt) && tcur_virt>=first_virt )
+ while( !kshisblank(tcur_virt) && tcur_virt>=first_virt )
--tcur_virt;
}
else
while( isalph(tcur_virt) && tcur_virt>=first_virt )
--tcur_virt;
else
- while( !isalph(tcur_virt) && !isblank(tcur_virt)
+ while( !isalph(tcur_virt) && !kshisblank(tcur_virt)
&& tcur_virt>=first_virt )
--tcur_virt;
}
{
/*** called by change operation, user really expects ***/
/* the effect of the eE commands, so back up to end of word */
- while( end>begin && isblank(end-1) )
+ while( end>begin && kshisblank(end-1) )
--end;
if( end == begin )
++end;
register int tcur_virt = cur_virt;
while( nwords-- )
{
- if( !isblank(tcur_virt) && tcur_virt<=last_virt )
+ if( !kshisblank(tcur_virt) && tcur_virt<=last_virt )
++tcur_virt;
- while( isblank(tcur_virt) && tcur_virt<=last_virt )
+ while( kshisblank(tcur_virt) && tcur_virt<=last_virt )
++tcur_virt;
if( cmd == 'E' )
{
- while( !isblank(tcur_virt) && tcur_virt<=last_virt )
+ while( !kshisblank(tcur_virt) && tcur_virt<=last_virt )
++tcur_virt;
}
else
while( isalph(tcur_virt) && tcur_virt<=last_virt )
++tcur_virt;
else
- while( !isalph(tcur_virt) && !isblank(tcur_virt)
+ while( !isalph(tcur_virt) && !kshisblank(tcur_virt)
&& tcur_virt<=last_virt )
++tcur_virt;
}
{
if( cmd == 'W' )
{
- while( !isblank(tcur_virt) && tcur_virt < last_virt )
+ while( !kshisblank(tcur_virt) && tcur_virt < last_virt )
++tcur_virt;
}
else
}
else
{
- while( !isalph(tcur_virt) && !isblank(tcur_virt)
+ while( !isalph(tcur_virt) && !kshisblank(tcur_virt)
&& tcur_virt < last_virt )
++tcur_virt;
}
}
- while( isblank(tcur_virt) && tcur_virt < last_virt )
+ while( kshisblank(tcur_virt) && tcur_virt < last_virt )
++tcur_virt;
}
cur_virt = tcur_virt;
}
- static int isblank __PARAM__((register int c), (c)) __OTORP__(register int c;){
+ static int kshisblank __PARAM__((register int c), (c)) __OTORP__(register int c;){
register int v = virtual[c];
return((v&~STRIP)==0 && isspace(v));
}
extern __MANGLE__ void sh_sigtrap __PROTO__((int));
extern __MANGLE__ void sh_sigreset __PROTO__((int));
extern __MANGLE__ void sh_timetraps __PROTO__((void));
-extern __MANGLE__ __V_ *timeradd __PROTO__((unsigned long,int ,void (*)(__V_*),__V_*));
+extern __MANGLE__ __V_ *kshtimeradd __PROTO__((unsigned long,int ,void (*)(__V_*),__V_*));
extern __MANGLE__ void timerdel __PROTO__((__V_*));
extern __MANGLE__ const char e_alarm[];
if(io_prompt(sh.nextprompt)<0 && errno==EIO)
return(0);
if(sh.timeout)
- timeout = (__V_*)timeradd(sh_isstate(SH_GRACE)?1000L*TGRACE:1000L*sh.timeout,0,time_grace,NIL(__V_*));
+ timeout = (__V_*)kshtimeradd(sh_isstate(SH_GRACE)?1000L*TGRACE:1000L*sh.timeout,0,time_grace,NIL(__V_*));
# ifdef SHOPT_ESH
if(sh_isoption(SH_EMACS|SH_GMACS))
readf = ed_emacsread;
(*fn)(SIGALRM);
}
-__V_ *timeradd __PARAM__((unsigned long msec,int flags,void (*action)(__V_*),__V_ *handle), (msec, flags, action, handle)) __OTORP__(unsigned long msec;int flags;void (*action)();__V_ *handle;){
+__V_ *kshtimeradd __PARAM__((unsigned long msec,int flags,void (*action)(__V_*),__V_ *handle), (msec, flags, action, handle)) __OTORP__(unsigned long msec;int flags;void (*action)();__V_ *handle;){
register Timer_t *tp;
double t;
Handler_t fn;
if(hp)
{
*hp = fn;
- timeradd((long)(1000*t), 0, oldalrm, (__V_*)hp);
+ kshtimeradd((long)(1000*t), 0, oldalrm, (__V_*)hp);
}
}
tp = tptop;
error(ERROR_system(ERROR_NOEXEC),e_nofork);
}
sh_sigcheck();
- timeout = (__V_*)timeradd(forkcnt, 0, timed_out, NIL(__V_*));
+ timeout = (__V_*)kshtimeradd(forkcnt, 0, timed_out, NIL(__V_*));
job_wait((pid_t)-1);
if(timeout)
{
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;
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)
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;
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)
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;
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) ); \
goto pop_fa; \
else __va_copy( elt, arge ); \
}
-#endif
#if __STD_C
sfvprintf(Sfio_t* f, const char* form, va_list args)
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;
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*);
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 */
if (f = prv_f)
{
prv_f = 0;
-#ifdef __ppc
__va_copy( ap, prv_ap );
-#else
- ap = prv_ap;
-#endif
continue;
}
goto done;
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*);
int argc,
char *argv[]) ;
static int Text_VarAndWidget(
- int (*func)(),
+ int (*func)(Widget w),
Boolean varIsString,
int argc,
char *argv[]) ;
static int Text_WidgetAndBoolean(
- void (*func)(),
+ void (*func)(Widget w, int b),
int argc,
char *argv[]) ;
static int Text_WidgetAndOneParam(
char * ptr;
nl_catd nlmsg_fd = (nl_catd)-1;
char * errmsg;
-#if defined(SVR4) || defined (_AIX) || defined(sco) || defined(DEC)
+#if defined(SVR4) || defined (_AIX) || defined(sco) || defined(DEC) || \
+ defined(CSRG_BASED) || defined(linux)
char * nextMatch;
#endif
*/
altCatName = XtMalloc(strlen(catName) + 10);
-#if defined(SVR4) || defined (_AIX) || defined(sco) || defined(DEC)
+#if defined(SVR4) || defined (_AIX) || defined(sco) || defined(DEC) || \
+ defined(CSRG_BASED) || defined(linux)
/* These platforms don't have strrstr() */
ptr = NULL;
nextMatch = catName;
static int
Text_VarAndWidget(
- int (*func)(),
+ int (*func)(Widget w),
Boolean varIsString,
int argc,
char *argv[] )
static int
Text_WidgetAndBoolean(
- void (*func)(),
+ void (*func)(Widget w, int b),
int argc,
char *argv[] )
{
#ifndef _Dtksh_xmdtksym_h
#define _Dtksh_xmdtksym_h
+#include "exksh.h"
extern struct symarray Symarray[];
extern int Symsize;