コード例 #1
0
ファイル: mysql.c プロジェクト: nicboul/xia
struct stmt_singleton *set_res_status_init_once()
{
	journal_strace("set_res_status");

	static struct stmt_singleton stmt;
	static MYSQL_BIND in_buf[SET_RES_STATUS_MAXBUF];
	static STMT_SQL_QUERY(sql_stmt, SET_RES_STATUS);

	unsigned int i;

	if (stmt.stmt_length == sizeof(SET_RES_STATUS))
		return &stmt;

	memset(&stmt, 0, sizeof(stmt));
	init_input_buffer(&stmt, &in_buf[0], sizeof(in_buf));

	stmt.stmt = sql_stmt;
	stmt.stmt_length = sizeof(SET_RES_STATUS);

	in_buf[SET_RES_STATUS_NAME].buffer_type = MYSQL_TYPE_STRING;
	in_buf[SET_RES_STATUS_HADDR].buffer_type = MYSQL_TYPE_STRING;
	in_buf[SET_RES_STATUS_STATUS].buffer_type = MYSQL_TYPE_TINY;
	in_buf[SET_RES_STATUS_STATUS2].buffer_type = MYSQL_TYPE_TINY;

	return &stmt;
}
コード例 #2
0
ファイル: res32.c プロジェクト: bilboed/wine
/* load a Win32 .res file */
int load_res32_file( const char *name, DLLSPEC *spec )
{
    int ret;

    init_input_buffer( name );

    if ((ret = check_header()))
    {
        while (input_buffer_pos < input_buffer_size) load_next_resource( spec );
    }
    return ret;
}
コード例 #3
0
ファイル: mysql.c プロジェクト: nicboul/xia
struct stmt_singleton *unset_token_addr_mapping_init_once()
{
	journal_strace("unset_token_addr_mapping_init_once");

	static struct stmt_singleton stmt;
	static MYSQL_BIND in_buf;
	static STMT_SQL_QUERY(sql_stmt, UNSET_TOKEN_ADDR_MAPPING);

	if (stmt.stmt_length == sizeof(UNSET_TOKEN_ADDR_MAPPING))
		return &stmt;

	memset(&stmt, 0, sizeof(stmt));
	init_input_buffer(&stmt, &in_buf, sizeof(in_buf));

	stmt.stmt = sql_stmt;
	stmt.stmt_length = sizeof(UNSET_TOKEN_ADDR_MAPPING);

	in_buf.buffer_type = MYSQL_TYPE_STRING;

	return &stmt;
}
コード例 #4
0
ファイル: mysql.c プロジェクト: nicboul/xia
struct stmt_singleton *get_token_type_init_once()
{
	journal_strace("get_token_type_init_once");

	static struct stmt_singleton stmt;
	static MYSQL_BIND in_buf;
	static MYSQL_BIND out_buf;
	static STMT_SQL_QUERY(sql_stmt, GET_TOKEN_TYPE);
	
	if (stmt.stmt_length == sizeof(GET_TOKEN_TYPE))
		return &stmt;

	memset(&stmt, 0, sizeof(stmt));
	init_input_buffer(&stmt, &in_buf, sizeof(in_buf));
	init_output_buffer(&stmt, &out_buf, sizeof(out_buf));

	stmt.stmt = sql_stmt;
	stmt.stmt_length = sizeof(GET_TOKEN_TYPE);
	in_buf.buffer_type = MYSQL_TYPE_STRING;
	out_buf.buffer_type = MYSQL_TYPE_TINY;

	return &stmt;
}
コード例 #5
0
ファイル: mysql.c プロジェクト: nicboul/xia
struct stmt_singleton *get_bridge_owner_context_init_once()
{
	journal_strace("get_bridge_owner_context_init_once");

	static struct stmt_singleton stmt;
	static MYSQL_BIND in_buf;
	static MYSQL_BIND out_buf;
	static STMT_SQL_QUERY(sql_stmt, GET_BRIDGE_OWNER_CONTEXT);

	if (stmt.stmt_length == sizeof(GET_BRIDGE_OWNER_CONTEXT))
		return &stmt;

	memset(&stmt, 0, sizeof(stmt));
	init_input_buffer(&stmt, &in_buf, sizeof(in_buf));
	init_output_buffer(&stmt, &out_buf, sizeof(out_buf));

	stmt.stmt = sql_stmt;
	stmt.stmt_length = sizeof(GET_BRIDGE_OWNER_CONTEXT);
	in_buf.buffer_type = MYSQL_TYPE_STRING;
	out_buf.buffer_type = MYSQL_TYPE_SHORT;

	return &stmt;
}
コード例 #6
0
ファイル: mysql.c プロジェクト: nicboul/xia
struct stmt_singleton *get_usr_membership_init_once()
{
	journal_strace("get_usr_membership_init_once");

	static struct stmt_singleton stmt;
	static MYSQL_BIND in_buf;
	static MYSQL_BIND out_buf;
	static STMT_SQL_QUERY(sql_stmt, GET_USR_MEMBERSHIP);

	if (stmt.stmt_length == sizeof(GET_USR_MEMBERSHIP))
		return &stmt;

	memset(&stmt, 0, sizeof(stmt));
	init_input_buffer(&stmt, &in_buf, sizeof(in_buf));
	init_output_buffer(&stmt, &out_buf, sizeof(out_buf));

	stmt.stmt = sql_stmt;
	stmt.stmt_length = sizeof(GET_USR_MEMBERSHIP);
	in_buf.buffer_type = MYSQL_TYPE_STRING;
	out_buf.buffer_type = MYSQL_TYPE_LONG;

	return &stmt;
}
コード例 #7
0
ファイル: mysql.c プロジェクト: nicboul/xia
struct stmt_singleton *set_res_hostname_mapping_init_once()
{
	journal_strace("set_res_hostname_mapping_init_once");

	static struct stmt_singleton stmt;
	static MYSQL_BIND in_buf[SET_RES_HOSTNAME_MAPPING_MAXBUF];
	static STMT_SQL_QUERY(sql_stmt, SET_RES_HOSTNAME_MAPPING);

	unsigned int i;

	if (stmt.stmt_length == sizeof(SET_RES_HOSTNAME_MAPPING))
		return &stmt;

	memset(&stmt, 0, sizeof(stmt));
	init_input_buffer(&stmt, &in_buf[0], sizeof(in_buf));

	stmt.stmt = sql_stmt;
	stmt.stmt_length = sizeof(SET_RES_HOSTNAME_MAPPING);

	for (i = 0; i < SET_RES_HOSTNAME_MAPPING_MAXBUF; ++i)
		in_buf[i].buffer_type = MYSQL_TYPE_STRING;

	return &stmt;
}
コード例 #8
0
ファイル: main.c プロジェクト: SparklePigBang/dzen
int
main(int argc, char *argv[]) {
	int i, use_ewmh_dock=0;
	char *action_string = NULL;
	char *endptr, *fnpre = NULL;

	/* default values */
	dzen.title_win.name = "dzen title";
	dzen.slave_win.name = "dzen slave";
	dzen.cur_line  = 0;
	dzen.ret_val   = 0;
	dzen.title_win.x = dzen.slave_win.x = 0;
	dzen.title_win.y = 0;
	dzen.title_win.width = dzen.slave_win.width = 0;
	dzen.title_win.alignment = ALIGNCENTER;
	dzen.slave_win.alignment = ALIGNLEFT;
	dzen.fnt = FONT;
	dzen.bg  = BGCOLOR;
	dzen.fg  = FGCOLOR;
	dzen.slave_win.max_lines  = 0;
	dzen.running = True;
	dzen.xinescreen = 0;
	dzen.tsupdate = 0;
	dzen.line_height = 0;
	dzen.title_win.expand = noexpand;

	/* Connect to X server */
	x_connect();
	x_read_resources();

	/* cmdline args */
	for(i = 1; i < argc; i++)
		if(!strncmp(argv[i], "-l", 3)){
			if(++i < argc) {
				dzen.slave_win.max_lines = atoi(argv[i]);
				if(dzen.slave_win.max_lines)
					init_input_buffer();
			}
		}
		else if(!strncmp(argv[i], "-geometry", 10)) {
			if(++i < argc) {
				int t;
				int tx, ty;
				unsigned int tw, th;

				t = XParseGeometry(argv[i], &tx, &ty, &tw, &th);

				if(t & XValue)
					dzen.title_win.x = tx;
				if(t & YValue) {
					dzen.title_win.y = ty;
					if(!ty && (t & YNegative))
						/* -0 != +0 */
						dzen.title_win.y = -1;
				}
				if(t & WidthValue)
					dzen.title_win.width = (signed int) tw;
				if(t & HeightValue)
					dzen.line_height = (signed int) th;
			}
		}
		else if(!strncmp(argv[i], "-u", 3)){
			dzen.tsupdate = True;
		}
		else if(!strncmp(argv[i], "-expand", 8)){
			if(++i < argc) {
				switch(argv[i][0]){
					case 'l':
						dzen.title_win.expand = left;
						break;
					case 'c':
						dzen.title_win.expand = both;
						break;
					case 'r':
						dzen.title_win.expand = right;
						break;
					default:
						dzen.title_win.expand = noexpand;
				}
			}
		}
		else if(!strncmp(argv[i], "-p", 3)) {
			dzen.ispersistent = True;
			if (i+1 < argc) {
				dzen.timeout = strtoul(argv[i+1], &endptr, 10);
				if(*endptr)
					dzen.timeout = 0;
				else
					i++;
			}
		}
		else if(!strncmp(argv[i], "-ta", 4)) {
			if(++i < argc) dzen.title_win.alignment = alignment_from_char(argv[i][0]);
		}
		else if(!strncmp(argv[i], "-sa", 4)) {
			if(++i < argc) dzen.slave_win.alignment = alignment_from_char(argv[i][0]);
		}
		else if(!strncmp(argv[i], "-m", 3)) {
			dzen.slave_win.ismenu = True;
			if(i+1 < argc) {
				if( argv[i+1][0] == 'v') {
					++i;
					break;
				}
				dzen.slave_win.ishmenu = (argv[i+1][0] == 'h') ? ++i, True : False;
			}
		}
		else if(!strncmp(argv[i], "-fn", 4)) {
			if(++i < argc) dzen.fnt = argv[i];
		}
		else if(!strncmp(argv[i], "-e", 3)) {
			if(++i < argc) action_string = argv[i];
		}
		else if(!strncmp(argv[i], "-title-name", 12)) {
			if(++i < argc) dzen.title_win.name = argv[i];
		}
		else if(!strncmp(argv[i], "-slave-name", 12)) {
			if(++i < argc) dzen.slave_win.name = argv[i];
		}
		else if(!strncmp(argv[i], "-bg", 4)) {
			if(++i < argc) dzen.bg = argv[i];
		}
		else if(!strncmp(argv[i], "-fg", 4)) {
			if(++i < argc) dzen.fg = argv[i];
		}
		else if(!strncmp(argv[i], "-x", 3)) {
			if(++i < argc) dzen.title_win.x = dzen.slave_win.x = atoi(argv[i]);
		}
		else if(!strncmp(argv[i], "-y", 3)) {
			if(++i < argc) dzen.title_win.y = atoi(argv[i]);
		}
		else if(!strncmp(argv[i], "-w", 3)) {
			if(++i < argc) dzen.slave_win.width = atoi(argv[i]);
		}
		else if(!strncmp(argv[i], "-h", 3)) {
			if(++i < argc) dzen.line_height= atoi(argv[i]);
		}
		else if(!strncmp(argv[i], "-tw", 4)) {
			if(++i < argc) dzen.title_win.width = atoi(argv[i]);
		}
		else if(!strncmp(argv[i], "-fn-preload", 12)) {
			if(++i < argc) {
				fnpre = estrdup(argv[i]);
			}
		}
#ifdef DZEN_XINERAMA
		else if(!strncmp(argv[i], "-xs", 4)) {
			if(++i < argc) dzen.xinescreen = atoi(argv[i]);
		}
#endif
		else if(!strncmp(argv[i], "-dock", 6))
			use_ewmh_dock = 1;
		else if(!strncmp(argv[i], "-v", 3)) {
			printf("dzen-"VERSION", (C)opyright 2007-2009 Robert Manea\n");
			printf(
			"Enabled optional features: "
#ifdef DZEN_XMP
			" XPM "
#endif
#ifdef DZEN_XFT
			" XFT"
#endif
#ifdef DZEN_XINERAMA
			" XINERAMA "
#endif
			"\n"
			);
			return EXIT_SUCCESS;
		}
		else
			eprint("usage: dzen2 [-v] [-p [seconds]] [-m [v|h]] [-ta <l|c|r>] [-sa <l|c|r>]\n"
                   "             [-x <pixel>] [-y <pixel>] [-w <pixel>] [-h <pixel>] [-tw <pixel>] [-u]\n"
				   "             [-e <string>] [-l <lines>]  [-fn <font>] [-bg <color>] [-fg <color>]\n"
				   "             [-geometry <geometry string>] [-expand <left|right>] [-dock]\n"
				   "             [-title-name <string>] [-slave-name <string>]\n"
#ifdef DZEN_XINERAMA
				   "             [-xs <screen>]\n"
#endif
				  );

	if(dzen.tsupdate && !dzen.slave_win.max_lines)
		dzen.tsupdate = False;

	if(!dzen.title_win.width)
		dzen.title_win.width = dzen.slave_win.width;

	if(!setlocale(LC_ALL, "") || !XSupportsLocale())
		puts("dzen: locale not available, expect problems with fonts.\n");

	if(action_string)
		fill_ev_table(action_string);
	else {
		if(!dzen.slave_win.max_lines) {
			char edef[] = "button3=exit:13";
			fill_ev_table(edef);
		}
		else if(dzen.slave_win.ishmenu) {
			char edef[] = "enterslave=grabkeys;leaveslave=ungrabkeys;"
				"button4=scrollup;button5=scrolldown;"
				"key_Left=scrollup;key_Right=scrolldown;"
				"button1=menuexec;button3=exit:13;"
				"key_Escape=ungrabkeys,exit";
			fill_ev_table(edef);
		}
		else {
			char edef[]  = "entertitle=uncollapse,grabkeys;"
				"enterslave=grabkeys;leaveslave=collapse,ungrabkeys;"
				"button1=menuexec;button2=togglestick;button3=exit:13;"
				"button4=scrollup;button5=scrolldown;"
				"key_Up=scrollup;key_Down=scrolldown;"
				"key_Escape=ungrabkeys,exit";
			fill_ev_table(edef);
		}
	}

	if((find_event(onexit) != -1)
			&& (setup_signal(SIGTERM, catch_sigterm) == SIG_ERR))
		fprintf(stderr, "dzen: error hooking SIGTERM\n");

	if((find_event(sigusr1) != -1)
			&& (setup_signal(SIGUSR1, catch_sigusr1) == SIG_ERR))
		fprintf(stderr, "dzen: error hooking SIGUSR1\n");

	if((find_event(sigusr2) != -1)
		&& (setup_signal(SIGUSR2, catch_sigusr2) == SIG_ERR))
		fprintf(stderr, "dzen: error hooking SIGUSR2\n");

	if(setup_signal(SIGALRM, catch_alrm) == SIG_ERR)
		fprintf(stderr, "dzen: error hooking SIGALARM\n");

	if(dzen.slave_win.ishmenu &&
			!dzen.slave_win.max_lines)
		dzen.slave_win.max_lines = 1;


	x_create_windows(use_ewmh_dock);

	if(!dzen.slave_win.ishmenu)
		x_map_window(dzen.title_win.win);
	else {
		XMapRaised(dzen.dpy, dzen.slave_win.win);
		for(i=0; i < dzen.slave_win.max_lines; i++)
			XMapWindow(dzen.dpy, dzen.slave_win.line[i]);
	}

	/* Reposition the window back to where it should be */
	XMoveWindow(dzen.dpy,dzen.title_win.win,dzen.title_win.x,dzen.title_win.y);

	if( fnpre != NULL )
		font_preload(fnpre);

	do_action(onstart);

	/* main loop */
	event_loop();

	do_action(onexit);
	clean_up();

	if(dzen.ret_val)
		return dzen.ret_val;

	return EXIT_SUCCESS;
}
コード例 #9
0
ファイル: main.c プロジェクト: itdaniher/SucklessDebXO
int
main(int argc, char *argv[]) {
	int i;
	char *action_string = NULL;
	char *endptr;

	/* default values */
	dzen.cur_line  = 0;
	dzen.ret_val   = 0;
	dzen.title_win.x = dzen.slave_win.x = 0;
	dzen.title_win.y = 0;
	dzen.title_win.width = dzen.slave_win.width = 0;
	dzen.title_win.alignment = ALIGNCENTER;
	dzen.slave_win.alignment = ALIGNLEFT;
	dzen.fnt = FONT;
	dzen.bg  = BGCOLOR;
	dzen.fg  = FGCOLOR;
	dzen.slave_win.max_lines  = 0;
	dzen.running = True;
	dzen.xinescreen = 0;
	dzen.tsupdate = 0;
	dzen.line_height = 0;

	/* cmdline args */
	for(i = 1; i < argc; i++)
		if(!strncmp(argv[i], "-l", 3)){
			if(++i < argc) {
				dzen.slave_win.max_lines = atoi(argv[i]);
				init_input_buffer();
			}
		}
		else if(!strncmp(argv[i], "-u", 3)){
			dzen.tsupdate = True;
		}
		else if(!strncmp(argv[i], "-p", 3)) {
			dzen.ispersistent = True;
			if (i+1 < argc) {
				dzen.timeout = strtoul(argv[i+1], &endptr, 10);
				if(*endptr)
					dzen.timeout = 0;
				else
					i++;
			}
		}
		else if(!strncmp(argv[i], "-ta", 4)) {
			if(++i < argc) dzen.title_win.alignment = argv[i][0];
		}
		else if(!strncmp(argv[i], "-sa", 4)) {
			if(++i < argc) dzen.slave_win.alignment = argv[i][0];
		}
		else if(!strncmp(argv[i], "-m", 3)) {
			dzen.slave_win.ismenu = True;
			if(i+1 < argc) 
				dzen.slave_win.ishmenu = (argv[i+1][0] == 'h') ? ++i, True : False;
		}
		else if(!strncmp(argv[i], "-fn", 4)) {
			if(++i < argc) dzen.fnt = argv[i];
		}
		else if(!strncmp(argv[i], "-e", 3)) {
			if(++i < argc) action_string = argv[i];
		}
		else if(!strncmp(argv[i], "-bg", 4)) {
			if(++i < argc) dzen.bg = argv[i];
		}
		else if(!strncmp(argv[i], "-fg", 4)) {
			if(++i < argc) dzen.fg = argv[i];
		}
		else if(!strncmp(argv[i], "-x", 3)) {
			if(++i < argc) dzen.title_win.x = dzen.slave_win.x = atoi(argv[i]);
		}
		else if(!strncmp(argv[i], "-y", 3)) {
			if(++i < argc) dzen.title_win.y = atoi(argv[i]);
		}
		else if(!strncmp(argv[i], "-w", 3)) {
			if(++i < argc) dzen.slave_win.width = atoi(argv[i]);
		}
		else if(!strncmp(argv[i], "-h", 3)) {
			if(++i < argc) dzen.line_height= atoi(argv[i]);
		}
		else if(!strncmp(argv[i], "-tw", 4)) {
			if(++i < argc) dzen.title_win.width = atoi(argv[i]);
		}
#ifdef DZEN_XINERAMA
		else if(!strncmp(argv[i], "-xs", 4)) {
			if(++i < argc) dzen.xinescreen = atoi(argv[i]);
		}
#endif
		else if(!strncmp(argv[i], "-v", 3)) 
			eprint("dzen-"VERSION", (C)opyright 2007 Robert Manea\n");
		else
			eprint("usage: dzen2 [-v] [-p [seconds]] [-m [v|h]] [-ta <l|c|r>] [-sa <l|c|r>]\n"
                   "             [-x <pixel>] [-y <pixel>] [-w <pixel>] [-tw <pixel>] [-u] \n"
				   "             [-e <string>] [-l <lines>]  [-fn <font>] [-bg <color>] [-fg <color>]\n"
#ifdef DZEN_XINERAMA
				   "             [-xs <screen>]\n"
#endif
				  );

	if(dzen.tsupdate && !dzen.slave_win.max_lines)
		dzen.tsupdate = False;

	if(!dzen.title_win.width)
		dzen.title_win.width = dzen.slave_win.width;

	if(!setlocale(LC_ALL, "") || !XSupportsLocale())
		puts("dzen: locale not available, expect problems with fonts.\n");

	if(action_string) 
		fill_ev_table(action_string);
	else {
		if(!dzen.slave_win.max_lines) {
			char edef[] = "button3=exit:13";
			fill_ev_table(edef);
		}
		else if(dzen.slave_win.ishmenu) {
			char edef[] = "enterslave=grabkeys;leaveslave=ungrabkeys;"
				"button4=scrollup;button5=scrolldown;"
				"key_Left=scrollup;key_Right=scrolldown;"
				"button1=menuexec;button3=exit:13;"
				"key_Escape=ungrabkeys,exit";
			fill_ev_table(edef);
		}
		else {
			char edef[]  = "entertitle=uncollapse,grabkeys;"
				"enterslave=grabkeys;leaveslave=collapse,ungrabkeys;"
				"button1=menuexec;button2=togglestick;button3=exit:13;"
				"button4=scrollup;button5=scrolldown;"
				"key_Up=scrollup;key_Down=scrolldown;"
				"key_Escape=ungrabkeys,exit";
			fill_ev_table(edef);
		}
	}

	if((find_event(onexit) != -1) 
			&& (setup_signal(SIGTERM, catch_sigterm) == SIG_ERR))
		fprintf(stderr, "dzen: error hooking SIGTERM\n");

	if((find_event(sigusr1) != -1) 
			&& (setup_signal(SIGUSR1, catch_sigusr1) == SIG_ERR))
		fprintf(stderr, "dzen: error hooking SIGUSR1\n");
	
	if((find_event(sigusr2) != -1) 
		&& (setup_signal(SIGUSR2, catch_sigusr2) == SIG_ERR))
		fprintf(stderr, "dzen: error hooking SIGUSR2\n");
	
	if(setup_signal(SIGALRM, catch_alrm) == SIG_ERR)
		fprintf(stderr, "dzen: error hooking SIGALARM\n");

	set_alignment();
	
	if(dzen.slave_win.ishmenu &&
			!dzen.slave_win.max_lines)
		dzen.slave_win.max_lines = 1;

	x_create_windows();
	
	if(!dzen.slave_win.ishmenu)
		x_map_window(dzen.title_win.win);
	else {
		XMapRaised(dzen.dpy, dzen.slave_win.win);
		for(i=0; i < dzen.slave_win.max_lines; i++)
			XMapWindow(dzen.dpy, dzen.slave_win.line[i]);
	}

	do_action(onstart);

	/* main loop */
	event_loop();

	do_action(onexit);
	clean_up();

	if(dzen.ret_val)
		return dzen.ret_val;

	return EXIT_SUCCESS;
}
コード例 #10
0
int main()
{
    int input[MAX_INPUT_LENGTH];
    init_input_buffer(input);
    read_input(input);

    literal_state = NOT_IN_LITERAL;
    comment_state = NOT_IN_COMMENT;
    current_char = '\0';
    next_char = '\0';

    int line_number = 1;
    int char_number = 0;

    int num_parens = 0;
    int num_brackets = 0;
    int num_braces = 0;

    bool string_escaped = false;
    bool char_escaped = false;

    for (int i = 0; input[i] != '\0' && i < MAX_INPUT_LENGTH; ++i)
    {
        current_char = input[i];
        next_char = ((i == MAX_INPUT_LENGTH - 1) ? '\0' : input[i + 1]);

        ++char_number;

        if (current_char == '\n')
        {
            ++line_number;
            char_number = 0;
            continue;
        }

        if (in_code())
        {
            if (start_of_single_line_comment())
            {
                comment_state = IN_SINGLE_LINE_COMMENT;
            }
            else if (start_of_multi_line_comment())
            {
                comment_state = IN_MULTI_LINE_COMMENT;
            }
            else if (current_char == OPEN_PARENTHESIS)
            {
                ++num_parens;
            }
            else if (current_char == CLOSE_PARENTHESIS)
            {
                --num_parens;
                print_error_ln_if(line_number, char_number, "too many closing parentheses", num_parens < 0);
            }
            else if (current_char == OPEN_BRACE)
            {
                ++num_braces;
            }
            else if (current_char == CLOSE_BRACE)
            {
                --num_braces;
                print_error_ln_if(line_number, char_number, "too many closing braces", num_braces < 0);
            }
            else if (current_char == OPEN_BRACKET)
            {
                ++num_brackets;
            }
            else if (current_char == CLOSE_BRACKET)
            {
                --num_brackets;
                print_error_ln_if(line_number, char_number, "too many closing brackets", num_brackets < 0);
            }
            else if (current_char == '\"')
            {
                literal_state = IN_STRING;
            }
            else if (current_char == '\'')
            {
                literal_state = IN_CHARACTER;
            }
        }
        else if (in_single_line_comment())
        {
            if (current_char == '\n')
            {
                comment_state = NOT_IN_COMMENT;
            }
        }
        else if (in_multi_line_comment())
        {
            if (end_of_multi_line_comment())
            {
                comment_state = NOT_IN_COMMENT;
            }
        }
        else if (in_string())
        {
            if (current_char == '\\')
            {
                string_escaped = !string_escaped;
            }
            else if (current_char == '\"' && !string_escaped)
            {
                literal_state = NOT_IN_LITERAL;
            }
        }
        else if (in_character())
        {
            if (current_char == '\\')
            {
                char_escaped = !char_escaped;
            }
            else if (current_char == '\'' && !char_escaped)
            {
                literal_state = NOT_IN_LITERAL;
            }
        }
    }

    print_error_if("parentheses are not balanced", num_parens != 0);
    print_error_if("braces are not balanced", num_braces != 0);
    print_error_if("brackets are not balanced", num_brackets != 0);

    return 0;
}