/*
    OS Scheduler Simulator

** 連絡先: 琉球大学情報工学科 河野 真治  
** (E-Mail Address: kono@ie.u-ryukyu.ac.jp)
**
**    このソースのいかなる複写,改変,修正も許諾します。ただし、
**    その際には、誰が貢献したを示すこの部分を残すこと。
**    再配布や雑誌の付録などの問い合わせも必要ありません。
**    営利利用も上記に反しない範囲で許可します。
**    バイナリの配布の際にはversion messageを保存することを条件とします。
**    このプログラムについては特に何の保証もしない、悪しからず。
**
**    Everyone is permitted to do anything on this program 
**    including copying, modifying, improving,
**    as long as you don't try to pretend that you wrote it.
**    i.e., the above copyright notice has to appear in all copies.  
**    Binary distribution requires original version messages.
**    You don't have to ask before copying, redistribution or publishing.
**    THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE.

  Process Queue Structure
  
 */

typedef
struct queue {
    struct queue *next;
    int priority;
    int length;
    char *name;
    int invoke;       /* invoke time of the task */
    int waiting;      /* total waiting time */
    int start;        /* first execution time */
    int end;          /* time of job end */
    int prev_end;     /* previous suspension time */
    int type;         /* n non-periodic, p periodic */
    int period;
    int next_time;
    int task_length;
} Queue, *QueuePtr;

extern int queue_errno;

extern int init_queue(int num);
extern void destory_queue();
extern QueuePtr new_queue(char *name, int length, int priority);
extern void free_queue(QueuePtr q);
extern QueuePtr insert_queue(QueuePtr list,QueuePtr q);
extern QueuePtr append_queue(QueuePtr list,QueuePtr q);
extern QueuePtr remove_queue(QueuePtr list,QueuePtr q);
extern QueuePtr dequeue(QueuePtr list,QueuePtr *q);
extern QueuePtr sort_queue(QueuePtr q,int (*comp)());

/* end */