예제 #1
0
파일: enum.c 프로젝트: att/ast
static_fn int sh_outenum(Shell_t *shp, Sfio_t *iop, Namval_t *tp) {
    Namval_t *mp;
    Dt_t *dp = NULL;
    struct Enum *ep;
    int i;

    if (!tp) {
        mp = nv_open(NV_CLASS, shp->var_tree, NV_NOADD | NV_VARNAME);
        if (!mp) return 0;
        dp = nv_dict(mp);
        tp = (Namval_t *)dtfirst(dp);
    }
    while (tp) {
        if (!tp->nvfun) continue;
        ep = (struct Enum *)nv_hasdisc(tp, &ENUM_disc);
        if (!ep) continue;

        sfprintf(iop, "enum %s%s=(\n", (ep->iflag ? "-i " : ""), tp->nvname);
        for (i = 0; i < ep->nelem; i++) sfprintf(iop, "\t%s\n", ep->values[i]);
        sfprintf(iop, ")\n");
        if (!dp) break;
        tp = (Namval_t *)dtnext(dp, tp);
    }
    return 0;
}
예제 #2
0
파일: enum.c 프로젝트: nathanmkaya/ksh-arch
static int sh_outenum(Shell_t *shp, Sfio_t *iop, Namval_t *tp)
{
	Namval_t	*mp;
	Dt_t		*dp=0;
	char		nvtype[sizeof(NV_CLASS)];
	struct Enum	*ep;
	int		i;
	if(!tp)
	{
		strcpy(nvtype,NV_CLASS);
		if(!(mp = nv_open(nvtype, shp->var_tree,NV_NOADD|NV_VARNAME)))
			return(0);
		dp  =   nv_dict(mp);
		tp = (Namval_t*)dtfirst(dp);
	}
	while(tp)
	{
		if(!tp->nvfun || !(ep=(struct Enum *)nv_hasdisc(tp,&ENUM_disc)))
			continue;
		sfprintf(iop,"enum %s%s=(\n",(ep->iflag?"-i ":""),tp->nvname);
		for(i=0; i <ep->nelem ; i++)
			sfprintf(iop,"\t%s\n",ep->values[i]);
		sfprintf(iop,")\n");
		if(!dp)
			break;
		tp = (Namval_t*)dtnext(dp,tp);
	}
	return(0);
}