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; }
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; }
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; }