Beispiel #1
0
static int
_pop_queue(ttyQueue *queue)
{
    if (_is_empty_queue(queue)) return -1;
    int ret = queue->tq_buf[queue->tq_tail];
    if (++queue->tq_tail == QUEUE_LEN)
        queue->tq_tail = 0;
    return ret;
}
Beispiel #2
0
static int
_backspace_queue(ttyQueue *queue)
{
    if (_is_empty_queue(queue)) return -1;
    int prehead = queue->tq_head - 1;
    if (prehead == -1)
        prehead = QUEUE_LEN - 1;
    char lc = queue->tq_buf[prehead];
    if (lc == '\r') return -1;

    queue->tq_head = prehead;
    return 0;
}
Beispiel #3
0
int
tty_read(char *buf, int cnt)
{
    int i = 0;
    if (_is_empty_queue(&console_tty.td_read_q)) {
        console_tty.td_read_q.tq_wait_task = current_task();
        sleep(console_tty.td_read_q.tq_wait_task);
    }

    while(i < cnt) {
        if (_is_empty_queue(&console_tty.td_read_q)) {
            console_tty.td_read_q.tq_wait_task = current_task();
            sleep(console_tty.td_read_q.tq_wait_task);
        }

        buf[i] = (char)_pop_queue(&console_tty.td_read_q);
        if (buf[i] == '\r')
            break;
        ++i;
    }
    return i + 1;
}
HuffMan * creat_huffman_tree(Queue * head){
    HuffMan * right;
    HuffMan * left;
    HuffMan * current;

    while ( !_is_empty_queue(head) ) {
        left = delete_Queue(head);
        right = delete_Queue(head);
        current = (HuffMan *)malloc(sizeof(HuffMan));
        current -> weight = left -> weight + right -> weight;
        current -> left_child = left;
        current -> right_child = right;
        order_Enter_Queue(head, current);
    }
    return head -> front -> next -> data;
}