Ejemplo n.º 1
0
static VALUE *eval5(void)
{
	VALUE *l, *r, *v;

	l = eval6();
	while (nextarg(":")) {
		G.args++;
		r = eval6();
		v = docolon(l, r);
		freev(l);
		freev(r);
		l = v;
	}
	return l;
}
Ejemplo n.º 2
0
static VALUE *eval(void)
{
	VALUE *l, *r;

	l = eval1();
	while (nextarg("|")) {
		G.args++;
		r = eval1();
		if (null(l)) {
			freev(l);
			l = r;
		} else
			freev(r);
	}
	return l;
}
Ejemplo n.º 3
0
static VALUE *eval1(void)
{
	VALUE *l, *r;

	l = eval2();
	while (nextarg("&")) {
		G.args++;
		r = eval2();
		if (null(l) || null(r)) {
			freev(l);
			freev(r);
			l = int_value(0);
		} else
			freev(r);
	}
	return l;
}
Ejemplo n.º 4
0
static VALUE *eval3(void)
{
	VALUE *l, *r;
	int op;
	arith_t val;

	l = eval4();
	while (1) {
		op = nextarg("+");
		if (!op) {
			op = nextarg("-");
			if (!op) return l;
		}
		G.args++;
		r = eval4();
		val = arithmetic_common(l, r, op);
		freev(l);
		freev(r);
		l = int_value(val);
	}
}
Ejemplo n.º 5
0
static void
search_whatis(char *whatpath, char *word)
{
	FILE		*fp;
	char		*line = NULL;
	size_t		linecap = 0;
	char		*pkwd;
	regex_t		preg;
	char		**ss = NULL;
	char		s[MAXNAMELEN];
	int		i;

	if ((fp = fopen(whatpath, "r")) == NULL) {
		perror(whatpath);
		return;
	}

	DPRINTF("-- Found %s: %s\n", WHATIS, whatpath);

	/* Build keyword regex */
	if (asprintf(&pkwd, "%s%s%s", (whatis) ? "\\<" : "",
	    word, (whatis) ? "\\>" : "") == -1)
		err(1, "asprintf");

	if (regcomp(&preg, pkwd, REG_BASIC | REG_ICASE | REG_NOSUB) != 0)
		err(1, "regcomp");

	if (sargs)
		ss = split(mansec, ',');

	while (getline(&line, &linecap, fp) > 0) {
		if (regexec(&preg, line, 0, NULL, 0) == 0) {
			if (sargs) {
				/* Section-restricted search */
				for (i = 0; ss[i] != NULL; i++) {
					(void) snprintf(s, sizeof (s), "(%s)",
					    ss[i]);
					if (strstr(line, s) != NULL) {
						(void) printf("%s", line);
						break;
					}
				}
			} else {
				(void) printf("%s", line);
			}
		}
	}

	if (ss != NULL)
		freev(ss);
	free(pkwd);
	(void) fclose(fp);
}
Ejemplo n.º 6
0
vector data_get_intensive_derivative(SimpleGraphData * data)
{
    if (data->b_derivative_intensive_norm == 0)
    {
        vector intensive = data_get_intensive_norm(data);
        vector derivative_intensive = derivativev(intensive);
        data->d_derivative_intensive_norm = normalizev(derivative_intensive, MASK_MIN, MASK_MAX);
        freev(derivative_intensive);

        data->b_derivative_intensive_norm == 1;
    }
    return data->d_derivative_intensive_norm;
}
Ejemplo n.º 7
0
vector data_get_intensive_cutted(SimpleGraphData * data)
{
    if (data->b_intensive_cutted == 0)
    {
        vector intensive = data_get_intensive(data);
        vector pitch_log = data_get_pitch_log(data);
        vector resized_pitch_log = vector_resize(pitch_log, intensive.x);
        data->d_intensive_cutted = vector_cut_by_mask(intensive, resized_pitch_log);
        freev(resized_pitch_log);

        data->b_intensive_cutted = 1;
    }
    return data->d_intensive_cutted;
}
Ejemplo n.º 8
0
static VALUE *eval6(void)
{
	static const char keywords[] ALIGN1 =
		"quote\0""length\0""match\0""index\0""substr\0";

	VALUE *r, *i1, *i2;
	static VALUE *l = NULL;
	static VALUE *v = NULL;
	int key = *G.args ? index_in_strings(keywords, *G.args) + 1 : 0;

	if (key == 0) /* not a keyword */
		return eval7();
	G.args++; /* We have a valid token, so get the next argument.  */
	if (key == 1) { /* quote */
		if (!*G.args)
			bb_error_msg_and_die("syntax error");
		return str_value(*G.args++);
	}
	if (key == 2) { /* length */
		r = eval6();
		tostring(r);
		v = int_value(strlen(r->u.s));
		freev(r);
	} else
		l = eval6();

	if (key == 3) { /* match */
		r = eval6();
		v = docolon(l, r);
		freev(l);
		freev(r);
	}
	if (key == 4) { /* index */
		r = eval6();
		tostring(l);
		tostring(r);
		v = int_value(strcspn(l->u.s, r->u.s) + 1);
		if (v->u.i == (arith_t) strlen(l->u.s) + 1)
			v->u.i = 0;
		freev(l);
		freev(r);
	}
	if (key == 5) { /* substr */
		i1 = eval6();
		i2 = eval6();
		tostring(l);
		if (!toarith(i1) || !toarith(i2)
		 || i1->u.i > (arith_t) strlen(l->u.s)
		 || i1->u.i <= 0 || i2->u.i <= 0)
			v = str_value("");
		else {
			v = xmalloc(sizeof(VALUE));
			v->type = STRING;
			v->u.s = xstrndup(l->u.s + i1->u.i - 1, i2->u.i);
		}
		freev(l);
		freev(i1);
		freev(i2);
	}
	return v;
}
Ejemplo n.º 9
0
void freeSimpleGraphData(SimpleGraphData * data)
{
    freev(data->d_full_wave);
    freev(data->d_pitch_original);
    if (data->b_pitch == 1) freev(data->d_pitch);
    if (data->b_pitch_norm == 1) freev(data->d_pitch_norm);
    if (data->b_pitch_log == 1) freev(data->d_pitch_log);
    if (data->b_pitch_derivative == 1) freev(data->d_pitch_derivative);
    freev(data->d_intensive_original);
    if (data->b_intensive == 1) freev(data->d_intensive);
    if (data->b_intensive_cutted == 1) freev(data->d_intensive_cutted);
    if (data->b_intensive_norm == 1) freev(data->d_intensive_norm);
    if (data->b_intensive_smooth == 1) freev(data->d_intensive_smooth);
    if (data->b_derivative_intensive_norm == 1) freev(data->d_derivative_intensive_norm);
    freev(data->d_spec_proc);
    if (data->b_spec == 1) freev(data->d_spec);
    if (data->b_spec_norm == 1) freev(data->d_spec_norm);
    if (data->b_cepstrum == 1) freev(data->d_cepstrum);
    if (data->b_cepstrum_norm == 1) freev(data->d_cepstrum_norm);
    freev(data->d_mask);

    freeiv(data->md_p.pointsFrom);
    freeiv(data->md_p.pointsLength);
    freeiv(data->md_t.pointsFrom);
    freeiv(data->md_t.pointsLength);
    freeiv(data->md_n.pointsFrom);
    freeiv(data->md_n.pointsLength);

    if (data->file_data)
    {
        waveCloseFile(data->file_data);
    }
}
Ejemplo n.º 10
0
void freeGraphData(GraphData * data)
{
    freev(data->d_intensive_original);
    freev(data->d_intensive);
    freev(data->d_pitch_original);
    freev(data->d_pitch);
    freev(data->d_pitch_log);
    freev(data->d_spec);
    freev(data->d_spec_proc);
    freev(data->d_wave);
    freev(data->d_full_wave);
    freev(data->d_mask);
    freev(data->d_p_wave);
    freev(data->d_t_wave);
    freev(data->d_n_wave);
    freev(data->p_mask);
    freev(data->n_mask);
    freev(data->t_mask);
    freev(data->pnt_mask);
}
Ejemplo n.º 11
0
SimpleGraphData * SimpleProcWave2Data(QString fname, bool keepWaveData)
{
    qDebug() << "::SimpleProcWave2Data" << LOG_DATA;
    SPTK_SETTINGS * sptk_settings = SettingsDialog::getSPTKsettings();

    SimpleGraphData * data = new SimpleGraphData();
    data->b_pitch = 0;
    data->b_pitch_log = 0;
    data->b_pitch_derivative = 0;
    data->b_intensive = 0;
    data->b_intensive_cutted = 0;
    data->b_intensive_norm = 0;
    data->b_intensive_smooth = 0;
    data->b_derivative_intensive_norm = 0;
    data->b_spec = 0;
    data->b_cepstrum = 0;
    data->b_pitch_norm = 0;

    QFile file(fname);
    qDebug() << "::SimpleProcWave2Data QFile" << fname << LOG_DATA;
    file.open(QIODevice::ReadOnly);
    qDebug() << "::SimpleProcWave2Data file.open " << file.isOpen() << LOG_DATA;
    WaveFile * waveFile = waveOpenHFile(file.handle());
    qDebug() << "::SimpleProcWave2Data waveOpenFile" << LOG_DATA;
    data->file_data = waveFile;

    int size = littleEndianBytesToUInt32(waveFile->dataChunk->chunkDataSize);
    qDebug() << "::SimpleProcWave2Data chunkDataSize " << size << LOG_DATA;
    short int bits = littleEndianBytesToUInt16(waveFile->formatChunk->significantBitsPerSample);
    qDebug() << "::SimpleProcWave2Data significantBitsPerSample " << bits << LOG_DATA;

    double seconds = 1.0 * size / RECORD_FREQ / bits * CHAR_BIT;
    qDebug() << "::SimpleProcWave2Data seconds=" << seconds << LOG_DATA;
    data->seconds = seconds;

    vector wave = sptk_v2v(waveFile->dataChunk->waveformData, size, bits);
    qDebug() << "::SimpleProcWave2Data wave" << LOG_DATA;

    vector norm_wave = normalizev(wave, 0.0, 1.0);
    qDebug() << "::SimpleProcWave2Data norm_wave" << LOG_DATA;
    data->d_full_wave = norm_wave;

    vector frame = sptk_frame(wave, sptk_settings->frame);
    qDebug() << "::SimpleProcWave2Data frame" << LOG_DATA;

    vector intensive = vector_intensive(wave, sptk_settings->frame->leng, sptk_settings->frame->shift);
    qDebug() << "::SimpleProcWave2Data intensive" << LOG_DATA;
    data->d_intensive_original = intensive;

    vector window = sptk_window(frame, sptk_settings->window);
    qDebug() << "::SimpleProcWave2Data window" << LOG_DATA;

    vector lpc = sptk_lpc(frame, sptk_settings->lpc);
    qDebug() << "::SimpleProcWave2Data lpc " << lpc.x << LOG_DATA;

    vector lpc2c = sptk_lpc2c(lpc, sptk_settings->lpc);
    qDebug() << "::SimpleProcWave2Data lpc2c " << lpc2c.x;
    data->d_cepstrum = lpc2c;
    data->b_cepstrum = 1;

    vector spec = sptk_spec(lpc, sptk_settings->spec);
    qDebug() << "::SimpleProcWave2Data spec " << maxv(spec) << LOG_DATA;
    data->d_spec = spec;
    data->b_spec = 1;

    vector spec_proc;
    if (sptk_settings->spec->proc == 0){
        spec_proc = vector_pow_log(spec, sptk_settings->spec->factor, sptk_settings->spec->min);
        qDebug() << "::SimpleProcWave2Data spec_log" << LOG_DATA;
    } else if (sptk_settings->spec->proc == 1){
        spec_proc = vector_pow_exp(spec, sptk_settings->spec->factor, sptk_settings->spec->min);
        qDebug() << "::SimpleProcWave2Data spec_exp" << LOG_DATA;
    }
    qDebug() << "::SimpleProcWave2Data spec_proc " << maxv(spec_proc) << LOG_DATA;
    data->d_spec_proc = spec_proc;

    vector smooth_wave = vector_smooth_lin(wave, sptk_settings->dp->smooth_frame);

    vector pitch = processZeros(sptk_pitch_spec(smooth_wave, sptk_settings->pitch, intensive.x));
    qDebug() << "::SimpleProcWave2Data pitch" << LOG_DATA;
    data->d_pitch_original = pitch;

    int otype = sptk_settings->pitch->OTYPE;
    sptk_settings->pitch->OTYPE = 2;
    vector pitch_log = sptk_pitch_spec(smooth_wave, sptk_settings->pitch, intensive.x);
    sptk_settings->pitch->OTYPE = otype;
    vector pitch_log_norm = normalizev(pitch_log, MASK_MIN, MASK_MAX);
    qDebug() << "::SimpleProcWave2Data pitch_log" << LOG_DATA;
    data->d_pitch_log = pitch_log_norm;
    data->b_pitch_log = 1;

    data->d_intensive = data_get_intensive(data);

    data->d_intensive_norm = data_get_intensive_norm(data);

    vector file_mask;
    WaveFile * procFile = waveFile;
    if (sptk_settings->dp->auto_marking)
    {
        procFile = selectMarkoutAlgorithm(data);
    }
    file_mask = getFileMask(procFile, wave, pitch.x);
    data->md_p = getLabelsFromFile(procFile, MARK_PRE_NUCLEUS);
    data->md_n = getLabelsFromFile(procFile, MARK_NUCLEUS);
    data->md_t = getLabelsFromFile(procFile, MARK_POST_NUCLEUS);
    if (sptk_settings->dp->auto_marking)
    {
        waveCloseFile(procFile);
    }
    qDebug() << "::SimpleProcWave2Data file_mask" << LOG_DATA;

    vector mask_and = vector_mask_and(pitch_log_norm, file_mask);
    vector mask = vector_smooth_mid(mask_and, 10);
    qDebug() << "::SimpleProcWave2Data mask" << LOG_DATA;
    data->d_mask = mask;

    vector inverted_mask = vector_invert_mask(mask);
    qDebug() << "::SimpleProcWave2Data inverted_mask" << LOG_DATA;

    vector pitch_interpolate = vector_interpolate_by_mask(
                pitch,
                inverted_mask,
                0,
                sptk_settings->plotF0->interpolation_type
                );
    qDebug() << "::SimpleProcWave2Data pitch_interpolate" << LOG_DATA;

    vector pitch_mid = vector_smooth_mid(pitch_interpolate, sptk_settings->plotF0->frame);
    qDebug() << "::SimpleProcWave2Data pitch_mid" << LOG_DATA;
    data->d_pitch = pitch_mid;
    data->b_pitch = 1;

    data->d_derivative_intensive_norm = data_get_intensive_derivative(data);

    freev(frame);
    freev(window);
    freev(lpc);
    freev(wave);
    freev(pitch_interpolate);
    freev(inverted_mask);
    freev(smooth_wave);
    freev(pitch_log);
    freev(file_mask);
    freev(mask_and);
    qDebug() << "::SimpleProcWave2Data freev" << LOG_DATA;

    file.close();
    qDebug() << "::SimpleProcWave2Data file.close" << LOG_DATA;

    if (keepWaveData)
    {
        waveFile->file = NULL;
    } else {
        data->file_data = NULL;
        waveCloseFile(waveFile);
        qDebug() << "::SimpleProcWave2Data waveCloseFile" << LOG_DATA;
    }

    return data;
}
Ejemplo n.º 12
0
GraphData * ProcWave2Data(QString fname)
{
    SPTK_SETTINGS * sptk_settings = SettingsDialog::getSPTKsettings();

    QFile file(fname);
    file.open(QIODevice::ReadOnly);
    WaveFile * waveFile = waveOpenHFile(file.handle());
    qDebug() << "waveOpenFile" << LOG_DATA;

    int size = littleEndianBytesToUInt32(waveFile->dataChunk->chunkDataSize);
    qDebug() << "chunkDataSize" << LOG_DATA;
    short int bits = littleEndianBytesToUInt16(waveFile->formatChunk->significantBitsPerSample);
    qDebug() << "significantBitsPerSample" << LOG_DATA;

    vector wave = sptk_v2v(waveFile->dataChunk->waveformData, size, bits);
    qDebug() << "wave" << LOG_DATA;

    vector frame = sptk_frame(wave, sptk_settings->frame);
    qDebug() << "frame" << LOG_DATA;

    vector intensive = vector_intensive(frame, sptk_settings->frame->leng, sptk_settings->frame->shift);
    qDebug() << "intensive" << LOG_DATA;

    vector window = sptk_window(frame, sptk_settings->window);
    qDebug() << "window" << LOG_DATA;

    vector lpc = sptk_lpc(frame, sptk_settings->lpc);
    qDebug() << "lpc" << LOG_DATA;

    vector spec = sptk_spec(lpc, sptk_settings->spec);
    qDebug() << "spec " << maxv(spec) << LOG_DATA;

    vector spec_proc;
    if (sptk_settings->spec->proc == 0){
        spec_proc = vector_pow_log(spec, sptk_settings->spec->factor, sptk_settings->spec->min);
        qDebug() << "spec_log" << LOG_DATA;
    } else if (sptk_settings->spec->proc == 1){
        spec_proc = vector_pow_exp(spec, sptk_settings->spec->factor, sptk_settings->spec->min);
        qDebug() << "spec_exp" << LOG_DATA;
    }
    qDebug() << "spec_proc " << maxv(spec_proc) << LOG_DATA;

    vector pitch = processZeros(sptk_pitch_spec(wave, sptk_settings->pitch, intensive.x));
    qDebug() << "pitch" << LOG_DATA;

    vector mask = getFileMask(waveFile, wave, pitch.x);
    qDebug() << "mask" << LOG_DATA;

    vector pitch_cutted = processZeros(vector_cut_by_mask(pitch, mask));
    qDebug() << "pitch_cutted" << LOG_DATA;
    double pitch_min = getv(pitch_cutted, minv(pitch_cutted));
    double pitch_max = getv(pitch_cutted, maxv(pitch_cutted));

    vector intensive_cutted = vector_cut_by_mask(intensive, mask);
    qDebug() << "intensive_cutted" << LOG_DATA;

    vector inverted_mask = vector_invert_mask(mask);
    qDebug() << "inverted_mask" << LOG_DATA;

    vector pitch_interpolate = vector_interpolate_by_mask(
                pitch_cutted,
                inverted_mask,
                0,
                sptk_settings->plotF0->interpolation_type
                );
    qDebug() << "pitch_interpolate" << LOG_DATA;

    vector intensive_interpolate = vector_interpolate_by_mask(
                intensive_cutted,
                inverted_mask,
                0,
                sptk_settings->plotEnergy->interpolation_type
                );
    qDebug() << "intensive_interpolate" << LOG_DATA;

    vector pitch_mid = vector_smooth_mid(pitch_interpolate, sptk_settings->plotF0->frame);
    qDebug() << "pitch_mid" << LOG_DATA;

    vector intensive_mid = vector_smooth_lin(intensive_interpolate, sptk_settings->plotEnergy->frame);
    qDebug() << "intensive_mid" << LOG_DATA;

    vector norm_wave = normalizev(wave, 0.0, 1.0);

    MaskData md_p = getLabelsFromFile(waveFile, MARK_PRE_NUCLEUS);
    MaskData md_n = getLabelsFromFile(waveFile, MARK_NUCLEUS);
    MaskData md_t = getLabelsFromFile(waveFile, MARK_POST_NUCLEUS);

    vector p_mask = readMaskFromFile(waveFile, wave.x, MARK_PRE_NUCLEUS);
    qDebug() << "p_mask" << LOG_DATA;

    vector n_mask = readMaskFromFile(waveFile, wave.x, MARK_NUCLEUS);
    qDebug() << "n_mask" << LOG_DATA;

    vector t_mask = readMaskFromFile(waveFile, wave.x, MARK_POST_NUCLEUS);
    qDebug() << "t_mask" << LOG_DATA;

    vector p_wave = zero_to_nan(vector_cut_by_mask(norm_wave, p_mask));
    qDebug() << "p_mask" << LOG_DATA;

    vector n_wave = zero_to_nan(vector_cut_by_mask(norm_wave, n_mask));
    qDebug() << "n_mask" << LOG_DATA;

    vector t_wave = zero_to_nan(vector_cut_by_mask(norm_wave, t_mask));
    qDebug() << "t_mask" << LOG_DATA;

    vector pnt_mask = onesv(norm_wave.x);
    for (int i=0; i<p_mask.x && i<n_mask.x && i<t_mask.x && i<norm_wave.x; i++) {
        if (getv(p_mask, i) == 1 || getv(n_mask, i) == 1 || getv(t_mask, i) == 1)
        {
            setv(pnt_mask, i, 0);
        } else {
            setv(pnt_mask, i, 1);
        }
    }

    vector display_wave = zero_to_nan(vector_cut_by_mask(norm_wave, pnt_mask));

    freev(frame);
    freev(window);
    freev(lpc);
    freev(pitch_cutted);
    freev(intensive_cutted);
    freev(inverted_mask);
    freev(pitch_interpolate);
    freev(intensive_interpolate);
    freev(wave);
    qDebug() << "freev" << LOG_DATA;

    file.close();
    waveCloseFile(waveFile);
    qDebug() << "waveCloseFile" << LOG_DATA;

    GraphData * data = new GraphData();

    data->d_full_wave = norm_wave;
    data->d_wave = display_wave;
    data->d_p_wave = p_wave;
    data->d_n_wave = n_wave;
    data->d_t_wave = t_wave;
    data->d_pitch_original = pitch;
    data->d_pitch = pitch_mid;
    data->pitch_max = pitch_max;
    data->pitch_min = pitch_min;
    data->d_intensive_original = intensive;
    data->d_intensive = intensive_mid;
    data->d_spec_proc = spec_proc;
    data->d_spec = spec;
    data->d_mask = mask;
    data->p_mask = p_mask;
    data->n_mask = n_mask;
    data->t_mask = t_mask;
    data->pnt_mask = pnt_mask;

    data->md_p = md_p;
    data->md_t = md_t;
    data->md_n = md_n;

    return data;
}
Ejemplo n.º 13
0
/*
 * This routine builds the manpage structure from MANPATH or PATH,
 * depending on flags.  See BMP_* definitions above for valid
 * flags.
 */
static struct man_node *
build_manpath(char **pathv, int flags)
{
	struct man_node *manpage = NULL;
	struct man_node *currp = NULL;
	struct man_node *lastp = NULL;
	char		**p;
	char		**q;
	char		*mand = NULL;
	char		*mandir = DEFMANDIR;
	int		s;
	struct dupnode	*didup = NULL;
	struct stat	sb;

	s = sizeof (struct man_node);
	for (p = pathv; *p != NULL; ) {
		if (flags & BMP_ISPATH) {
			if ((mand = path_to_manpath(*p)) == NULL)
				goto next;
			free(*p);
			*p = mand;
		}
		q = split(*p, ',');
		if (stat(q[0], &sb) != 0 || (sb.st_mode & S_IFDIR) == 0) {
			freev(q);
			goto next;
		}

		if (access(q[0], R_OK | X_OK) == 0) {
			/*
			 * Some element exists.  Do not append DEFMANDIR as a
			 * fallback.
			 */
			flags &= ~BMP_FALLBACK_DEFMANDIR;

			if ((currp = (struct man_node *)calloc(1, s)) == NULL)
				err(1, "calloc");

			currp->frompath = (flags & BMP_ISPATH);

			if (manpage == NULL)
				lastp = manpage = currp;

			getpath(currp, p);
			getsect(currp, p);

			/*
			 * If there are no new elements in this path,
			 * do not add it to the manpage list.
			 */
			if (dupcheck(currp, &didup) != 0) {
				freev(currp->secv);
				free(currp);
			} else {
				currp->next = NULL;
				if (currp != manpage)
					lastp->next = currp;
				lastp = currp;
			}
		}
		freev(q);
next:
		/*
		 * Special handling of appending DEFMANDIR. After all pathv
		 * elements have been processed, append DEFMANDIR if needed.
		 */
		if (p == &mandir)
			break;
		p++;
		if (*p != NULL)
			continue;
		if (flags & (BMP_APPEND_DEFMANDIR | BMP_FALLBACK_DEFMANDIR)) {
			p = &mandir;
			flags &= ~BMP_ISPATH;
		}
	}

	free_dupnode(didup);

	return (manpage);
}
Ejemplo n.º 14
0
int
main(int argc, char **argv)
{
	int		c, i;
	char		**pathv;
	char		*manpath = NULL;
	static struct man_node *mandirs = NULL;
	int		bmp_flags = 0;
	int		ret = 0;
	char		*opts;
	char		*mwstr;
	int		catman = 0;

	(void) setlocale(LC_ALL, "");
	(void) strcpy(language, setlocale(LC_MESSAGES, (char *)NULL));
	if (strcmp("C", language) != 0)
		(void) strlcpy(localedir, language, MAXPATHLEN);

#if !defined(TEXT_DOMAIN)
#define	TEXT_DOMAIN "SYS_TEST"
#endif
	(void) textdomain(TEXT_DOMAIN);

	if (strcmp(__progname, "apropos") == 0) {
		apropos++;
		opts = "M:ds:";
	} else if (strcmp(__progname, "whatis") == 0) {
		apropos++;
		whatis++;
		opts = "M:ds:";
	} else if (strcmp(__progname, "catman") == 0) {
		catman++;
		makewhatis++;
		opts = "P:M:w";
	} else if (strcmp(__progname, "makewhatis") == 0) {
		makewhatis++;
		makewhatishere++;
		manpath = ".";
		opts = "";
	} else {
		opts = "FM:P:T:adfklprs:tw";
		if (argc > 1 && strcmp(argv[1], "-") == 0) {
			pager = "cat";
			optind++;
		}
	}

	opterr = 0;
	while ((c = getopt(argc, argv, opts)) != -1) {
		switch (c) {
		case 'M':	/* Respecify path for man pages */
			manpath = optarg;
			break;
		case 'a':
			all++;
			break;
		case 'd':
			debug++;
			break;
		case 'f':
			whatis++;
			/*FALLTHROUGH*/
		case 'k':
			apropos++;
			break;
		case 'l':
			list++;
			all++;
			break;
		case 'p':
			printmp++;
			break;
		case 's':
			mansec = optarg;
			sargs++;
			break;
		case 'r':
			lintout++;
			break;
		case 't':
			psoutput++;
			break;
		case 'T':
		case 'P':
		case 'F':
			/* legacy options, compatibility only and ignored */
			break;
		case 'w':
			makewhatis++;
			break;
		case '?':
		default:
			if (apropos)
				usage_whatapro();
			else if (catman)
				usage_catman();
			else if (makewhatishere)
				usage_makewhatis();
			else
				usage_man();
		}
	}
	argc -= optind;
	argv += optind;

	if (argc == 0) {
		if (apropos) {
			(void) fprintf(stderr, gettext("%s what?\n"),
			    __progname);
			exit(1);
		} else if (!printmp && !makewhatis) {
			(void) fprintf(stderr,
			    gettext("What manual page do you want?\n"));
			exit(1);
		}
	}

	init_bintoman();
	if (manpath == NULL && (manpath = getenv("MANPATH")) == NULL) {
		if ((manpath = getenv("PATH")) != NULL)
			bmp_flags = BMP_ISPATH | BMP_APPEND_DEFMANDIR;
		else
			manpath = DEFMANDIR;
	}
	pathv = split(manpath, ':');
	mandirs = build_manpath(pathv, bmp_flags);
	freev(pathv);
	fullpaths(&mandirs);

	if (makewhatis) {
		do_makewhatis(mandirs);
		exit(0);
	}

	if (printmp) {
		print_manpath(mandirs);
		exit(0);
	}

	/* Collect environment information */
	if (isatty(STDOUT_FILENO) && (mwstr = getenv("MANWIDTH")) != NULL &&
	    *mwstr != '\0') {
		if (strcasecmp(mwstr, "tty") == 0) {
			struct winsize	ws;

			if (ioctl(0, TIOCGWINSZ, &ws) != 0)
				warn("TIOCGWINSZ");
			else
				manwidth = ws.ws_col;
		} else {
			manwidth = (int)strtol(mwstr, (char **)NULL, 10);
			if (manwidth < 0)
				manwidth = 0;
		}
	}
	if (manwidth != 0) {
		DPRINTF("-- Using non-standard page width: %d\n", manwidth);
	}

	if (pager == NULL) {
		if ((pager = getenv("PAGER")) == NULL || *pager == '\0')
			pager = PAGER;
	}
	DPRINTF("-- Using pager: %s\n", pager);

	for (i = 0; i < argc; i++) {
		char		*cmd;
		static struct man_node *mp;
		char		*pv[2];

		/*
		 * If full path to command specified, customize
		 * the manpath accordingly.
		 */
		if ((cmd = strrchr(argv[i], '/')) != NULL) {
			*cmd = '\0';
			if ((pv[0] = strdup(argv[i])) == NULL)
				err(1, "strdup");
			pv[1] = NULL;
			*cmd = '/';
			mp = build_manpath(pv,
			    BMP_ISPATH | BMP_FALLBACK_DEFMANDIR);
		} else {
			mp = mandirs;
		}

		if (apropos)
			whatapro(mp, argv[i]);
		else
			ret += manual(mp, argv[i]);

		if (mp != NULL && mp != mandirs) {
			free(pv[0]);
			free_manp(mp);
		}
	}

	return (ret == 0 ? 0 : 1);
}