예제 #1
0
void sh_regress(unsigned int index, const char* intercept, const char* info, unsigned int line, const char* file)
{
	char*	name;
	char	buf[16];

	if (index >= 1 && index <= elementsof(regress_options))
		name = (char*)regress_options[index];
	else
		sfsprintf(name = buf, sizeof(buf), "%u", index);
	sfprintf(sfstderr, REGRESS_HEADER "%s:%s:%s\n", name, intercept, fmtesc(info));
}
예제 #2
0
파일: color.c 프로젝트: S010/misc
static int
color(char *color, const char *pattern)
{
	regmatch_t	 match;
	regex_t		 re;
	char		*line;
	size_t		 linesz;
	size_t		 len;
	const char	*esccolor;
	const char	 escreset[] = "\e[0m";
	int		 fg;
	int		 bg;
	int		 rc;
	regoff_t	 off;

	line = NULL;
	linesz = 0;

	parsecolor(color, &fg, &bg);
	esccolor = fmtesc(fg, bg, bflag);

	rc = regcomp(&re, pattern, REG_EXTENDED | (iflag ? REG_ICASE : 0));
	if (rc != 0)
		errx(EXIT_FAILURE, "``%s'': %s", pattern, strregerror(rc));

	errno = 0;
	while (getline(&line, &linesz, stdin) != -1) {
		for (off = 0; (rc = regexec(&re, line + off, 1, &match, 0)) != REG_NOMATCH; /* empty */ ) {
			if (rc != 0)
				errx(EXIT_FAILURE, "regexec: %s", strregerror(rc));
			match.rm_eo += ins(&line, &linesz, esccolor, match.rm_so + off);
			off += ins(&line, &linesz, escreset, match.rm_eo + off);
			off += match.rm_eo;
		}
		len = strlen(line);
		if (write(STDOUT_FILENO, line, len) != len)
			err(EXIT_FAILURE, "write");
		errno = 0;
	}
	if (errno != 0)
		err(EXIT_FAILURE, "getline");
	regfree(&re);
	free(line);

	return EXIT_SUCCESS;
}
예제 #3
0
파일: ed.c 프로젝트: ISLEcode/kornshell
static void
putrec(register char* s)
{
	register int	n;
	register char*	t;

	if ((ed.print & REG_SUB_LIST) && (t = fmtesc(s))) {
		s = t;
		n = strlen(s);
		while (n > BREAK_LINE) {
			n -= BREAK_LINE;
			sfprintf(ed.msg, "%-*.*s\\\n", BREAK_LINE, BREAK_LINE, s);
			s += BREAK_LINE;
		}
		sfprintf(ed.msg, "%s$\n", s);
	}
	else
		sfputr(ed.msg, s, '\n');
}
예제 #4
0
파일: extoken.c 프로젝트: aosm/graphviz
static void
trace(Expr_t* ex, int lev, char* op, int c)
{
	char*	s = 0;
	char*	t;
	char	buf[16];
    void*   x = 0;

    if (!traceLex) return;
	t = "";
	switch (c)
	{
	case 0:
		s = " EOF";
		break;
	case '=':
		s = t = buf;
		*t++ = ' ';
		if (!lev && exlval.op != c)
			*t++ = exlval.op;
		*t++ = c;
		*t = 0;
		break;
	case AND:
		s = " AND ";
		t = "&&";
		break;
	case DEC:
		s = " DEC ";
		t = "--";
		break;
	case DECLARE:
		s = " DECLARE ";
		t = exlval.id->name;
		break;
	case PROCEDURE:
		s = " PROCEDURE ";
		t = exlval.id->name;
		break;
	case DYNAMIC:
		s = " DYNAMIC ";
		t = exlval.id->name;
        x = (void*)(exlval.id);
		break;
	case EQ:
		s = " EQ ";
		t = "==";
		break;
	case FLOATING:
		s = " FLOATING ";
		sfsprintf(t = buf, sizeof(buf), "%f", exlval.floating);
		break;
	case GE:
		s = " GE ";
		t = ">=";
		break;
	case ID:
		s = " ID ";
		t = exlval.id->name;
		break;
	case INC:
		s = "INC ";
		t = "++";
		break;
	case INTEGER:
		s = " INTEGER ";
		sfsprintf(t = buf, sizeof(buf), "%I*d", sizeof(exlval.integer), exlval.integer);
		break;
	case LABEL:
		s = " LABEL ";
		t = exlval.id->name;
		break;
	case LE:
		s = " LE ";
		t = "<=";
		break;
	case LS:
		s = " LS ";
		t = "<<";
		break;
	case NAME:
		s = " NAME ";
		t = exlval.id->name;
        x = (void*)(exlval.id);
		break;
	case NE:
		s = " NE ";
		t = "!=";
		break;
	case OR:
		s = " OR ";
		t = "||";
		break;
	case RS:
		s = " RS ";
		t = ">>";
		break;
	case STRING:
		s = " STRING ";
		t = fmtesc(exlval.string);
		break;
	case UNSIGNED:
		s = " UNSIGNED ";
		sfsprintf(t = buf, sizeof(buf), "%I*u", sizeof(exlval.integer), exlval.integer);
		break;
	case BREAK:
		s = " break";
		break;
	case CASE:
		s = " case";
		break;
	case CONTINUE:
		s = " continue";
		break;
	case DEFAULT:
		s = " default";
		break;
	case ELSE:
		s = " else";
		break;
	case EXIT:
		s = " exit";
		break;
	case FOR:
		s = " for";
		break;
	case GSUB:
		s = " gsub";
		break;
	case IF:
		s = " if";
		break;
	case PRAGMA:
		s = " pragma";
		break;
	case PRINT:
		s = " print";
		break;
	case PRINTF:
		s = " printf";
		break;
	case QUERY:
		s = " query";
		break;
	case RAND:
		s = " rand";
		break;
	case RETURN:
		s = " return";
		break;
	case SPRINTF:
		s = " sprintf";
		break;
	case SRAND:
		s = " srand";
		break;
	case SUB:
		s = " sub";
		break;
	case SUBSTR:
		s = " substr";
		break;
	case SWITCH:
		s = " switch";
		break;
	case WHILE:
		s = " while";
		break;
	default:
		if (c < 0177)
		{
			s = buf;
			*s++ = c;
			*s = 0;
			t = fmtesc(buf);
			s = " ";
		}
		break;
	}
    if (x)
	  error(TRACE_lex + lev, "%s: [%d] %04d%s%s (%x)", 
        op, ex->input->nesting, c, s, t, x);
    else
	  error(TRACE_lex + lev, "%s: [%d] %04d%s%s", 
        op, ex->input->nesting, c, s, t);
}