Reference Section
_exit_overflow {
char buffer[20];
...
_put_str(_i_to_dec(_get_numtasks(), buffer));
/* display number of tasks */
...
}
#include <inline.h>
{
char buffer[20];
...
get_numtasks();/* get number of tasks being scheduled */
lea si,buffer /* SI -> buffer */
i_to_dec(); /* int -> "string" */
put_str(); /* display number of tasks */
...
}
Source file _TKGNUMT.ASM ASM equiv.GET_NUMTASKS
{
unsigned char priority, skip;
...
if(_get_tpriority(-1, &priority, &skip) != 0)
_put_str("Error getting priority/skip of task 1");
...
}
#include <inline.h>
{
unsigned char priority, skip;
...
mov bx,-1 /* BX = handle of active task */
get_tpriority();/* successful? */
jc label_010/* n: invalid handle */
mov priority,al/* set priority variable */
mov skip,ah /* set skip variable */
...
label_010:
...
}
Source file _TKGPRTY.ASM ASM equiv GET_TPRIORITY
{
char buffer[sizeof(satask)];
...
if(_get_tspec(-1, (char *)buffer) != 0)
_put_str("Invalid handle.\n\r");
...
}
#include <inline.h>
{
char buffer [sizeof(satask)];
char *str;
...
lea si,buffer/* SI -> buffer */
mov bx,-1 /* BX = handle of active task */
get_tspec() /* copy current task's specs */
jnclabel_010
str = "Invalid handle.\n\r";
mov si,str /* SI -> string */
put_str(); /* display error message */
label_010:
...
}
Source file _TKGSPEC.ASM ASM equiv GET_TSPEC
#include<mtask.h>
{
...
if(_get_tstatus(0, T_SUSPEND+T_SLEEP))
_put_str("Unable to yield default task.\n\r");
else
_task_yieldto(0);
...
}
#include <inline.h>
{
...
mov bx,-1 /* BX = handle of task to check
(default task) */
mov al,T_SUSPEND+T_SLEEP /* AL = status to check */
task_tstatus(); /* get status of default task */
je label_010/* y: don't yield to it */
task_yieldto(); /* n: yield to it */
label_010:
...
}
Source file _TKGSTAT.ASM ASM equiv GET_TSTATUS
...
if (_set_tpriority(-1, 10, 0) == -1) /* set priority = 10, */
/* skip count = 0 for active task */
_put_str("Invalid handle on set priority\n\r.");
...
#include <inline.h>
{
char *str;
...
mov bx,-1 /* BX = active task handle */
mov al,10 /* AL = priority of 10 */
xor ah,ah /* AH = skip count of zero */
set_tpriority();/* set task priority */
jnclabel_010
str = "Invalid handle on set priority.\n\r";
mov si,str /* SI-> string */
put_str(); /* display error message */
label_010:
...
}
Source file _TKSPRTY.ASM ASM equiv SET_TPRIORITY
{
static char stack1[250];
static satask task0 = TASK_DEFAULT;
static satask task1 = TASK_DEFAULT;
int handle;
...
task0.t_addr = task_0;
task1.t_statbyte = T_AUTO_REMOVE;
task1.t_stkaddr = stack1;
task1.t_addr = task_1;
_tasking_init(&task0); /* initialize multitasking */
if ((handle = _task_add(&task1)) == -1)
_put_str("Error adding task 1.\n\r");
else
task_0();
...
}
void task_0(void)
{
...
_task_yield();/* start multitasking */
...
}
void task_1(void)
{
...
}
#include <inline.h>
{
static char stack1[250];
static satask task0 = TASK_DEFAULT;
static satask task1 = TASK_DEFAULT;
task0.t_addr = task_0;
task1.t_statbyte = T_AUTO_REMOVE;
task1.t_stkaddr = stack1;
task1.t_addr = task_1;
...
mov si,offset task0
/* SI = offset of default task descriptor */
tasking_init(); /* initialize multitasking */
mov si,offset task1/* SI = offset of task 1 desc */
task_add(); /* add task 1 to tasking list */
jc label_010/* if error, return */
task_0();
label_010:
...
}
void task_0(void)
{
...
_task_yield();/* start multitasking */
...
}
void task_1(void)
{
...
}
Source file _TKADD.ASM ASM equiv TASK_ADD
{
static satask task0 = TASK_DEFAULT;
...
_tasking_init(&task0); /* turn on multitasking */
task_0: /* since no task address has been
specified for the default task,
this label is the beginning address
of the default task */
...
_task_yield()/* multitasking begins */
...
}
#include <inline.h>
{
static satask task0 = TASK_DEFAULT;
...
mov si,offset task0
/* SI = offset of default task descriptor */
tasking_init();/* initialize multitasking */
task_0: /* since no task address has been
specified for the default task,
this label is the beginning address
of the default task */
...
task_yield();/* multitasking begins */
...
}
Source file _TKINIT.ASM ASM equiv TASKING_INIT
{
char far *stkaddr;
...
if ((stkaddr = (char far *)_task_remove(-1)) == NULL)
_put_str("Error removing current task.\n\r");
if (_tstack_free((char far *)stkaddr) != 0)
_put_str("Error freeing task's stack space.");
...
}
#include <inline.h>
{
char *str;
...
mov bx,-1/* BX = handle of current task */
task_remove();/* remove task, ES:DI -> stack blk */
jc label_020 /* if error, go give error message */
tstack_free();/* free task's stack mem */
jnclabel_020 /* if error, give error message */
str = "Error removing current task.\n\r";
mov si,str
put_str();/* display error message */
label_020:
...
}
Source file _TKRMOVE.ASM ASM equiv TASK_REMOVE
...
if (_task_resume(handle) != 0) /* resume task */
_put_str("Invalid handle");
...
#include <inline.h>
{
char str[] = "Invalid handle";
...
mov bx,-1/* BX = handle of active task */
task_resume();/* resume task 1 */
jnelabel_010
lea str
put_str();/* display error message */
label_010:
...
Source file _TKRSUME.ASM ASM equiv TASK_RESUME
{
std_time tskslp;
...
tskslp.hours = 0;
tskslp.minutes = 0;
tskslp.seconds = 5;
tskslp.hseconds = 0;
_task_sleep(-1,&tskslp);
/* current task sleeping for 5 seconds */
_task_yield();/* sleep assignment takes affect now */
...
}
#include <inline.h>
{
...
xor dx,dx
mov al,dl
mov ah,5 /* DX;AX = time (5 seconds) */
mov bx,-1 /* BX = handle of current task */
task_sleep(); /* sleep this task */
task_yield(); /* yield, sleep takes effect */
...
}
Source file _TKSLP.ASM ASM equiv TASK_SLEEP
{
std_time tskslp;
...
tskslp.hours = 5;
tskslp.minutes = 30;
_task_sleeptime(-1,&tskslp);
/* current task wake up a 5:30 am */
_task_yield();/* sleep assignment takes effect */
...
}
#include <inline.h>
{
...
mov bx,-1/* BX = handle of current task */
mov dh,5
mov dl,30/* DX = hour:minute to wake up */
task_sleeptime(); /* current task wake up at 5:30 am */
task_yield();/* default task begins sleeping */
...
}
Source file _TKSLPTM.ASM ASM equiv TASK_SLEEPTIME
...
if (_task_suspend(-1) != 0)/* suspend active task */
_put_str("Invalid handle.\n\r");
_task_yield(); /* task becomes suspended now */
...
#include <inline.h>
{
...
mov bx,-1 /* BX = handle of current task */
task_suspend(); /* suspend active task */
task_yield(); /* task becomes suspended now */
...
}
Source file _TKSPND.ASM ASM equiv TASK_SUSPEND
{
static satask task0 = TASK_DEFAULT;
...
task0.t_addr = task_0;
_tasking_init(&task0); /* turn on multitasking on */
... /* add additional tasks */
task_0();/* call default task */
...
}
void task_0(void)
{
...
_task_yield();/* tasking begins */
...
}
#include <inline.h>
{
static satask task0 = TASK_DEFAULT;
task0.t_addr = task_0;
...
mov si,offset task0
/* SI = offset of default task descriptor */
tasking_init();/* initialize multitasking */
... /* add additional tasks */
task_0();/* call default task */
...
}
void task_0(void)
{
...
_task_yield();/* tasking begins */
...
}
Source file TKYIELD.ASM ASM equiv TASK_YIELD
...
if (!_get_tstatus(0, T_SUSPEND+T_SLEEP))
_task_yieldto(0);
else
_put_str("Unable to yield default task.\n\r")
#include <inline.h>
...
xor bx,bx /* BX = task to yield to */
mov al,T_SUSPEND+T_SLEEP
get_tstatus(); /* get status of default task */
je label_010/* if match, don't yield */
task_yieldto(); /* yield to default task */
label_010:
...
Source file _TKYLDTO.ASM ASM equiv TASK_YIELDTO
#include <mtask.h>
{
char buffer[40];
...
_i_to_dec(_tstack_avail(), buffer);
_put_str(buffer); /* display remaining stack space */
...
}
#include <inline.h>
{
char buffer[40];
...
lea si,buffer/* SI -> buffer */
tstack_avail(); /* AX = remaining stack space */
i_to_dec(); /* int -> "string" */
put_str(); /* display result */
...
}
Source file _TKSAVL.ASM ASM equiv TSTACK_AVAIL
{
char far *stkaddr;
...
if ((stkaddr = (char far *)_task_remove(-1)) == NULL)
_put_str("Error removing current task.\n\r");
if (_tstack_free((char far *)stkaddr) != 0)
_put_str("Error freeing task's stack space.");
...
}
#include <inline.h>
{
char *str;
...
mov bx,-1 /* BX = handle of current task */
task_remove(); /* remove task, ES:DI- stk blk */
jc label_020/* if error, go give message */
tstack_free(); /* free task's stack mem */
jc label_020/* if error, go give message */
...
label_020:
str = "Error removing current task.\n\r";
mov si,str
put_str(); /* display error message */
...
}
Source file _TKSFREE.ASM ASM equiv TSTACK_FREE
satask task0 = TASK_DEFAULT;
satask task1 = TASK_DEFAULT;
void main(void)
{
segaddr tstkseg;
tstkseg = _ptr_to_seg(malloc(1600));
_tstack_initc(1600,tstkseg);
...
task1.t_addr = task_1;
_tasking_init(&task0);/* initialize multitasking */
_tstack_malloc(&task1);/* alloc 256 byte stk for task 1*/
_task_add(&task1);/* add task 1 to tasking list */
_task_yield();
...
}
void task_1(void)
{
_put_str("Task 1.\n\r");
_task_yield();
...
}
#include <inline.h>
satask task0 = TASK_DEFAULT;
satask task1 = TASK_DEFAULT;
void main ()
{
#if __SMALL_DATA__
segaddr tstkseg;
tstkseg = _ptr_to_seg(malloc(1600));
mov dx,tstkseg
#else
mov ax,100
dos_malloc ();
#endif
task1.t_addr = task_1;
...
mov ax,1600 /* AX = size of heap in bytes */
tstack_initc(); /* initialize stack heap */
mov si,offset task0
/* SI = offset of default task descriptor */
tasking_init(); /* initialize multitasking */
mov si,offset task1
/* SI = offset of task 1 descriptor */
tstack_malloc();/* alloc 256 byte stack, task 1 */
task_add(); /* add task 1 to tasking list */
...
}
void task_1(void)
{
_put_str("Task 1.\n\r");
_task_yield();
...
}
Source file _TKSINTC.ASM ASM equiv TSTACK_INITC
satask task0 = TASK_DEFAULT;
satask task1 = TASK_DEFAULT;
void main(void)
{
segaddr *tstkseg;
...
#if __SMALL_DATA__
tstkseg = _ptr_to_seg(malloc(1600));
_tstack_initc(1600,tstkseg);
#else
tstkseg = _dos_malloc(100);
_tstack_initc(1600, tstkseg);
#endif
...
task1.t_addr = task_1;
_tasking_init(&task0); /* initialize multitasking */
_tstack_malloc(&task1);/* alloc 256 byte stack for task 1 */
_task_add(&task1); /* add task 1 to task list */
_task_yield();
...
}
void task_1(void)
{
_put_str("Task 1.\n\r");
_task_yield();
...
}
#include <inline.h>
satask task0 = TASK_DEFAULT;
satask task1 = TASK_DEFAULT;
void main()
{
#if __SMALL_DATA__
segaddr tstkseg;
tstkseg = _ptr_to_seg(malloc(1600));
mov dx,tstkseg
#else
mov ax,100;
dos_malloc();
#endif
mov ax,1600 /* AX = size of heap in bytes */
tstack_initc(); /* initialize stack heap */
task1.t_addr = task_1;
mov si,offset task0
/* SI = offset of default task descriptor */
tasking_init(); /* initialize multitasking */
mov si,offset task1/* SI = offset of task 1 desc */
tstack_malloc();/* alloc 256 byte task 1 stack */
task_add(); /* add task 1 to tasking list */
...
}
void task_1(void)
{
_put_str("Task 1.\n\r");
_task_yield();
...
}
Source file _TKSMALC.ASM ASM equiv TSTACK_MALLOC
{
char buffer[40];
...
_i_to_dec(_tstack_max(), buffer);
_put_str(buffer); /* display largest available block size */
...
}
#include <inline.h>
{
char buffer[40];
...
lea si,buffer/* SI -> buffer */
tstack_max();/* AX = largest available block size */
i_to_dec();/* int -> "string" */
put_str();/* display largest available blk size */
...
}
Source file TKSMAX.ASM ASM equiv TSTACK_MAX
{
char rset0 = 0;
/* individual bits are set for resources in use */
...
if (rset0 == 0)/* resources in set 0 available? */
_yield_suspend();/* y:suspend multitasking */
...
_yield_resume();/* resume multitasking */
...
}
#include <inline.h>
{
char rset0 = 0;
/* individual bits are set for resources in use */
...
testrset0,0 /* set 0 resources available? */
jnzlabel_010/* n: keep multitasking on */
yield_suspend();/* y: suspend multitasking */
label_010:
...
yield_resume(); /* resume multitasking */
...
}
Source file _TKYRSME.ASM ASM equiv.YIELD_RESUME
{
char rset0 = 0;
/* individual bits are set for resources in use */
...
if (rset0 == 0)/* if all resources in set 0 available */
_yield_suspend();/* suspend multitasking */
...
_yield_resume();/* resume multitasking */
...
}
#include <inline.h>
{
char rset0 = 0;
/* individual bits are set for resources in use */
...
testrset0,0 /* set 0 resources available? */
jnzlabel_010/* n: keep multitasking on */
yield_suspend();/* y: suspend multitasking */
label_010:...
...
yield_resume(); /* resume multitasking */
...
}
Source file _TKYSPND.ASM ASM equiv.YIELD_SUSPEND