Пример #1
0
static void print_cmd_by_category(const struct category_description *catdesc)
{
	struct cmdname_help *cmds;
	int longest = 0;
	int i, nr = 0;
	uint32_t mask = 0;

	for (i = 0; catdesc[i].desc; i++)
		mask |= catdesc[i].category;

	extract_cmds(&cmds, mask);

	for (i = 0; cmds[i].name; i++, nr++) {
		if (longest < strlen(cmds[i].name))
			longest = strlen(cmds[i].name);
	}
	QSORT(cmds, nr, cmd_name_cmp);

	for (i = 0; catdesc[i].desc; i++) {
		uint32_t mask = catdesc[i].category;
		const char *desc = catdesc[i].desc;

		printf("\n%s\n", _(desc));
		print_command_list(cmds, mask, longest);
	}
	free(cmds);
}
int main(void)
{
    char cmd[MAX];
    int i;
    print_command_list();

    get_command(cmd, MAX);
    do {
        parse_command(cmd);
        get_command(cmd, MAX);
    } while ((strcmp(cmd, "q")) != 0);

    return 0;
}
Пример #3
0
int main(int argc, char** argv)
{
    fd_set rdset;
    char* tty_dev;
    struct termios tio;
    uint8 b = 0;

    tty_dev = default_tty_dev;

    if (argc > 1)
    {
        printf("using device: %s\n", argv[1]);
        tty_dev = argv[1];
    }

    printf("command syntax: <command>:<value>\n");
    print_command_list();

    memset(&tio, 0, sizeof(tio));
    tio.c_iflag = 0;
    tio.c_oflag = 0;
    tio.c_cflag = CS8 | CREAD | CLOCAL; /* 8n1, see termios.h for more information */
    tio.c_lflag = 0;
    tio.c_cc[VMIN] = 1;
    tio.c_cc[VTIME] = 5;

    tty_fd = open(tty_dev, O_RDWR | O_NONBLOCK);
    cfsetospeed(&tio, B9600); /* baud */
    cfsetispeed(&tio, B9600); /* baud */

    tcsetattr(tty_fd, TCSANOW, &tio);

    pthread_create(&cmd_thread, NULL, CmdThreadProc, NULL);
    pthread_create(&comm_thread, NULL, CommThreadProc, NULL);
    pthread_create(&intel_thread, NULL, IntelThreadProc, NULL);
    pthread_create(&bt_thread, NULL, BTThreadProc, NULL);
    pthread_create(&camera_thread, NULL, CameraThreadProc, NULL);

    pthread_join(cmd_thread, cmd_thread_status);
    pthread_join(comm_thread, &comm_thread_status);
    pthread_join(intel_thread, &intel_thread_status);
    pthread_join(bt_thread, &bt_thread_status);
    pthread_join(camera_thread, &camera_thread_status);

    close(tty_fd);

    return 0;
}
Пример #4
0
Файл: help.c Проект: PKRoma/git
void list_all_cmds_help(void)
{
	struct string_list others = STRING_LIST_INIT_DUP;
	struct string_list alias_list = STRING_LIST_INIT_DUP;
	struct cmdname_help *aliases;
	int i, longest;

	printf_ln(_("See 'git help <command>' to read about a specific subcommand"));
	print_cmd_by_category(main_categories, &longest);

	list_all_other_cmds(&others);
	if (others.nr)
		printf("\n%s\n", _("External commands"));
	for (i = 0; i < others.nr; i++)
		printf("   %s\n", others.items[i].string);
	string_list_clear(&others, 0);

	git_config(get_alias, &alias_list);
	string_list_sort(&alias_list);

	for (i = 0; i < alias_list.nr; i++) {
		size_t len = strlen(alias_list.items[i].string);
		if (longest < len)
			longest = len;
	}

	if (alias_list.nr) {
		printf("\n%s\n", _("Command aliases"));
		ALLOC_ARRAY(aliases, alias_list.nr + 1);
		for (i = 0; i < alias_list.nr; i++) {
			aliases[i].name = alias_list.items[i].string;
			aliases[i].help = alias_list.items[i].util;
			aliases[i].category = 1;
		}
		aliases[alias_list.nr].name = NULL;
		print_command_list(aliases, 1, longest);
		free(aliases);
	}
	string_list_clear(&alias_list, 1);
}
Пример #5
0
void* CmdThreadProc(void* data)
{
    char* p;
    uint8 state;
    uint8 val = 0;
    uint8 cmd = 0;
    char* cmd_str;
    char* val_str;
    char input[128];

    while (1)
    {
        printf("cmd: ");
        scanf("%s", input);

        p = strchr(input, ':');
        val_str = cmd_str = NULL;

        if (p != NULL)
        {
            val_str = p + 1;
            input[(p - input)] = '\0';
        }

        cmd_str = input;

        cmd = get_command_id(cmd_str);

        if (cmd == CMD_UNKNOWN)
        {
            printf("unknown command!\n");
            continue;
        }

        switch (cmd)
        {
        case CMD_TEENSY_MODE:
            state = get_state_id(val_str);

            if (state == STATE_UNKNOWN)
            {
                printf("unknown mode!\n");
                continue;
            }

            send_command(tty_fd, cmd, state);
            break;

        case CMD_CHANGE_STATE:
            state = get_state_id(val_str);

            if (state == STATE_UNKNOWN)
            {
                printf("unknown state!\n");
                continue;
            }

            send_command(tty_fd, cmd, state);
            break;

        case CMD_HARD_TURN:
            val = get_turn_id(val_str);

            if (val == TURN_UNKNOWN)
            {
                printf("unknown turn!\n");
                continue;
            }

            send_command(tty_fd, cmd, val);
            break;

        case CMD_SOFT_TURN:
            val = get_turn_id(val_str);

            if (val == TURN_UNKNOWN)
            {
                printf("unknown turn!\n");
                continue;
            }

            send_command(tty_fd, cmd, val);
            break;

        case CMD_SET_DIRECTION:
            val = get_move_id(val_str);

            if (val == MOVE_UNKNOWN)
            {
                printf("unknown move direction!\n");
                continue;
            }

            send_command(tty_fd, cmd, val);
            break;

        case CMD_DIST_CENTER:
            val = get_decimal_value(val_str);
            send_command(tty_fd, cmd, val);
            break;

        case CMD_DIST_LEFT:
            val = get_decimal_value(val_str);
            send_command(tty_fd, cmd, val);
            break;

        case CMD_DIST_RIGHT:
            val = get_decimal_value(val_str);
            send_command(tty_fd, cmd, val);
            break;

        case CMD_SPEED:
            val = get_decimal_value(val_str);
            send_command(tty_fd, cmd, val);
            break;

        case CMD_HELP:
            val = get_command_id(val_str);

            if (val == CMD_UNKNOWN)
            {
                printf("command syntax: <command>:<value>\n");
                print_command_list();
            }
            else
            {
                switch (val)
                {
                case CMD_CHANGE_STATE:
                    printf("state:<state>, where <state> is one of the following:\n");
                    printf("nothing, basic, orders, dance.\n");
                    break;

                default:
                    printf("command syntax: <command>:<value>\n");
                    print_command_list();
                    break;
                }
            }

            break;

        case CMD_QUIT:
            exit(0);
            break;
        }
    }

    pthread_exit(NULL);
}
Пример #6
0
int server(int num_clients, int port)
{
    WicServer server;
    wic_init_server(&server, port, num_clients);
    ClientData* clients = malloc(num_clients * sizeof(ClientData));
    for(int i = 0; i < num_clients; i++)
        clients[i].joined = false;
    
    Command command;
    command.created = false;
    pthread_t command_thread;
    pthread_create(&command_thread, 0, accept_command, &command);
    printf("Type commands below...\n");
    
    WicPacket recv;
    WicPacket send;
    while(true)
    {
        if(command.created == true)
        {
            if(strncmp(command.first_arg, "exit", 4) == 0)
                break;
            else if(strcmp(command.first_arg, "help") == 0)
                print_command_list();
            else if(strcmp(command.first_arg, "kick") == 0)
            {
                ClientData* client = lookup_client(clients, command.second_arg,
                                                   num_clients);
                if(client == 0)
                    printf("ERROR: Client %s does not exist\n",
                           command.second_arg);
                else
                    wic_kick_client(&server, client->client_id);
            }
            else if(strcmp(command.first_arg, "ban-client") == 0)
            {
                ClientData* client = lookup_client(clients, command.second_arg,
                                                   num_clients);
                if(client == 0)
                    printf("ERROR: Client %s does not exist\n",
                           command.second_arg);
                else
                    wic_ban_client(&server, client->client_id);
            }
            else if(strcmp(command.first_arg, "ban-address") == 0)
            {
                wic_ban_address(&server, command.second_arg);
            }
            else if(strcmp(command.first_arg, "unban-address") == 0)
            {
                wic_unban_address(&server, command.second_arg);
            }
            else if(strcmp(command.first_arg, "ls-clients") == 0)
            {
                print_clients(clients, num_clients);
            }
            else
                printf("%s '%s'. %s", "ERROR: Invalid command",
                       command.first_arg, "Type 'help' for command list\n");
            command.created = false;
            pthread_create(&command_thread, 0, accept_command, &command);
        }
        enum WicError error = wic_server_recv_packet(&server, &recv);
        if(error == WICER_NONE)
        {
            unsigned char client_id = recv.client_id;
            if(recv.type.id == WIC_PACKET_JOIN.id)
            {
                clients[client_id].joined = true;
                clients[client_id].client_id = client_id;
                init_entity_manager(&clients[client_id].manager);
                printf("client %u joined\n", client_id);
            }
            if(recv.type.id == PACKET_USERNAME_INFO.id)
            {
                memcpy(clients[client_id].username, recv.data,
                       PACKET_USERNAME_INFO.size);
                wic_send_packet_to_other_clients(&server, &recv, client_id);
                for(unsigned char id = 0; id < num_clients; id++)
                {
                    if(clients[id].joined && id != client_id)
                    {
                        send.type = PACKET_USERNAME_INFO;
                        send.client_id = id;
                        memcpy(send.data, clients[id].username,
                               sizeof(clients[id].username));
                        wic_send_packet_to_client(&server, &send, client_id);
                    }
                }
            }
            else if(recv.type.id == WIC_PACKET_LEAVE.id)
            {
                clients[client_id].joined = false;
                free_entity_manager(&clients[client_id].manager);
                printf("client %u left\n", recv.client_id);
            }
            else if(recv.type.id == PACKET_UPDT_ENTITY.id)
            {
                Entity entity;
                memcpy(&entity, recv.data, PACKET_UPDT_ENTITY.size);
                updt_entity(&clients[client_id].manager, entity);
                wic_send_packet_to_other_clients(&server, &recv, client_id);
            }
            else if(recv.type.id == PACKET_REMV_ENTITY.id)
            {
                remove_entity(&clients[client_id].manager, recv.data[0]);
                wic_send_packet_to_other_clients(&server, &recv, client_id);
            }
        }
    }
    printf("Exiting server..\n");
    wic_free_server(&server);
    return 0;
}