/****************************************************************
* tasks.c Version 1.0
* Created 25-aug-90
* Lists tasks/processes currently running
****************************************************************/

#include	"exec/types.h"
#include	"exec/execbase.h"
#include	"stdio.h"

struct MyMem {
	char	name[80];
	int	pri;
	ULONG	addr;
};

struct MyMem mem[80];		/* holds max 80 tasks */

extern struct ExecBase *SysBase;

void main()
{
	struct Task *ptr;
	int numtasks;
	UWORD *tmp;
	ULONG *tmp2;

	numtasks = 0;

	printf("Pri\tTask\tName\n");

	Forbid();
	ptr = (struct Task *)(SysBase->TaskReady.lh_Head);
	while(ptr->tc_Node.ln_Succ != NULL) {
		mem[numtasks].pri = (int)ptr->tc_Node.ln_Pri;
		mem[numtasks].addr = (ULONG)ptr;

		if(ptr->tc_Node.ln_Name != NULL) {
			strcpy(mem[numtasks].name,ptr->tc_Node.ln_Name);
		} else {
			strcpy(mem[numtasks].name,"<anonymous>");
		}
		numtasks++;
		ptr = (struct Task *)ptr->tc_Node.ln_Succ;
	}
	ptr = (struct Task *)(SysBase->TaskWait.lh_Head);
	while(ptr->tc_Node.ln_Succ != NULL) {
		mem[numtasks].pri = (int)ptr->tc_Node.ln_Pri;
		mem[numtasks].addr = (ULONG)ptr;

		if(ptr->tc_Node.ln_Name != NULL) {
			strcpy(mem[numtasks].name,ptr->tc_Node.ln_Name);
		} else {
			strcpy(mem[numtasks].name,"<anonymous>");
		}
		numtasks++;
		ptr = (struct Task *)ptr->tc_Node.ln_Succ;
	}
	Permit();

	while(--numtasks >= 0) {
		printf("%3d",mem[numtasks].pri);
		printf("\t%6lx\t%s\n",mem[numtasks].addr,mem[numtasks].name);
	}
}

