Category : C++ Source Code
Archive   : CPPTASK.ZIP
Filename : TEST.CPP

 
Output of file : TEST.CPP contained in archive : CPPTASK.ZIP
//
// Test program for checking basic CPPTask functions.
//


#include
#include
#include
#include
#include
#include
#include

#include "task.hpp"
#include "tsklocal.hpp"


#define STACKSIZE 2048

unsigned int _stklen = 5 * STACKSIZE; /* Four tasks + main Task Stack */

void far task1 (void);
local char stack1 [STACKSIZE];
local task tcb1((funcptr)task1, (byteptr)stack1, STACKSIZE, PRI_STD, NULL);

void far task2 (void);
local char stack2 [STACKSIZE];
local task tcb2((funcptr)task2, (byteptr)stack2, STACKSIZE, PRI_STD, NULL);

void far task3 (void);
local char stack3 [STACKSIZE];
local task tcb3((funcptr)task3, (byteptr)stack3, STACKSIZE, PRI_STD, NULL);

void far task4 (void);
local char stack4 [STACKSIZE];
local task tcb4((funcptr)task4, (byteptr)stack4, STACKSIZE, PRI_STD, NULL);

// declare all necessary data structures for inter-task communication

typedef struct {
farptr xx;
char str [20];
} message; // message structure for mailbox

byte pipbuf [10]; // buffer area for pipe
word bufbuf [40]; // buffer area for buffer

mailbox box; // create mailbox ...
message msg; // and instance of message struct
flag halt, clockflag; // create flag
pipe pip((farptr) pipbuf, sizeof(pipbuf)); // create pipe
buffer buf((farptr) bufbuf, sizeof(bufbuf)); // create buffer

int endrun;

//
// Task1 sends a mail to Task3, and waits for a response in the buffer.
// The response is then displayed.
// Task1 will stop while the halt flag is set.
//

void far task1 (void)
{
char str [20];

printf ("Task 1 started\n");
while (!endrun) // run till completion signalled
{
halt.wait_flag_clear (0L);

t_delay (5L); // delay for 5 clock ticks
printf ("Task 1 Sending Message to Task 3\n");
strcpy (msg.str, "From T1");
box.send_mail (&msg);

buf.read_buffer (str, 20, 0L);
printf("Buffer data received %s \n", str);
}
}

/*
Task2 reads the keyboard. If a character has been read, it is passed
to Task4 via a pipe. Entering 'h' will set the halt flag (stopping Task1),
entering 'c' will clear the halt flag.
'e' stops the program.
*/

void far task2 (void)
{
int ch;

printf ("Task 2 started\n");
while (!endrun)
{
ch = t_read_key () & 0xff;
switch (tolower (ch))
{
case 'h': halt.set_flag ();
break;
case 'c': halt.clear_flag ();
break;
case 'e': main_tcb.wake_task ();
break;
case 'b': sound (2000);
t_delay (2L);
nosound ();
break;
}

if (!endrun)
pip.write_pipe ((char)ch, 0L);
putch ('2');
}
}

/*
Task3 waits for mail, then sends it back through a buffer.
*/

void far task3 (void)
{
message far *m;

printf ("Task 3 started\n");
while (!endrun)
{
m = (message far *) box.wait_mail (0L);
printf ("Task 3 Msg received %s \n", m->str);
m->str [6] = '3';
buf.write_buffer (m->str, 7, 0L);
}
}


/*
Task4 waits for a character in the pipe and displays it. To make
things livelier, it uses a timeout while waiting, and will display
faces when the timeout occurred before the character.
*/

void far task4 (void)
{
int ch;

printf ("Task 4 started\n");
while (!endrun)
{
ch = pip.read_pipe (10L);
if (ch < 0)
putch (0x02);
else
printf ("Task 4 got - %c\n", ch);
}
}

// NOTE, the scheduler and a few standard tasks are create automatically
// before the start of main()

int main (void)
{
endrun = 0;

tcb1.start_task (); // start all tasks
tcb2.start_task();
tcb3.start_task ();
tcb4.start_task();

tasker.preempt_on (); // turn preemption on

t_delay (0L); // delay main task so that others can run

// if we get here something has cause the main task to run and we
// will terminate processing

endrun = 1;
puts ("******** Main Task *********");

main_tcb.set_priority (10); // lower priority to allow other tasks to
// termiate processing

tasker.schedule (); // explicit call to scheduler
tasker.preempt_off (); // turn preemption off

puts ("******** End Run *********");

return 0;
}




  3 Responses to “Category : C++ Source Code
Archive   : CPPTASK.ZIP
Filename : TEST.CPP

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/