43 lines
1.1 KiB
Rexx
43 lines
1.1 KiB
Rexx
/*REXX pgm implements a priority queue; with insert/show/delete top task*/
|
|
n=0
|
|
task.=0 /* for the sake of task.0done.* */
|
|
say '------ inserting tasks.'; call ins_task 3 'Clear drains'
|
|
call ins_task 4 'Feed cat'
|
|
call ins_task 5 'Make tea'
|
|
call ins_task 1 'Solve RC tasks'
|
|
call ins_task 2 'Tax return'
|
|
call ins_task 6 'Relax'
|
|
call ins_task 6 'Enjoy'
|
|
say '------ Showing tasks.'; call show_tasks
|
|
say '------ Show and delete top task.'
|
|
todo=n /* tasks to be done */
|
|
do While todo>0
|
|
Say top()
|
|
End
|
|
exit
|
|
|
|
ins_task: procedure expose n task.
|
|
n=n+1
|
|
Parse Arg task.0pri.n task.0txt.n
|
|
Return
|
|
|
|
show_tasks: procedure expose task. n
|
|
do i=1 To n
|
|
Say task.0pri.i task.0txt.i
|
|
End
|
|
Return
|
|
|
|
top: procedure expose n task. todo /* get top task and mark it 'done' */
|
|
high=0
|
|
Do i=1 To n
|
|
If task.0pri.i>high &,
|
|
task.0done.i=0 Then Do
|
|
j=i
|
|
high=task.0pri.i
|
|
End
|
|
End
|
|
res=task.0pri.j task.0txt.j
|
|
task.0done.j=1
|
|
todo=todo-1
|
|
return res
|