#include <stdio.h>
#include <setjmp.h>
#include <io6811.h>
#include <etx.h>
#include <lcd.h>
#include <keyb.h>
/* =================== Processen ======================== */
SEMAFOOR *sid; /* semafoor nummer */
PROCES *proc1id, *proc2id, *proc3id;
int curpos = 0; /* huidige positie cursor */
monitor void toongetal(int getal, int pos)
{
static char buf[10];
char *p;
if (curpos < pos)
{
while (curpos < pos)
{
lcd_curs_shr();
curpos++;
}
}
if (curpos > pos)
{
while (curpos > pos)
{
lcd_curs_shl();
curpos--;
}
}
sprintf(buf,"%d ",getal);
p = buf;
while (*p != 0)
{
lcd_data( *p++ );
curpos++;
}
}
/* dit is een proces */
void proc1(void)
{
T_MSG msg,i;
enable_interrupt();
wait(sid); /* wacht op semafoor */
i = 0;
while (1 == 1)
{
etstart(60,0x124);
msg = receive();
toongetal(i, 0);
i++;
}
}
void proc2(void)
{
int i;
T_MSG msg;
enable_interrupt();
/* initialiseer lcd en laat dan proc1 verder lopen */
lcd_init();
signal(sid);
i = 0;
while (1 == 1)
{
etstart(50,0x123);
msg = receive();
toongetal(i, 8);
i++;
}
}
void proc3(void)
{
int teken, vorigteken;
T_MSG msg;
enable_interrupt();
/* initialiseer lcd en laat dan proc1 verder lopen */
keyb_init();
while (1 == 1)
{
etstart(10,0x125);
msg = receive();
teken = keyb_lees();
if (teken != 0 && vorigteken == 0)
{
toongetal(teken, 12);
if (teken == '0')
{
lcd_disp_shl();
}
else if (teken == '4')
{
lcd_disp_shr();
}
else if (teken == 'f')
{
teken = teken;
}
}
vorigteken = teken;
}
}
/*
*-----------------------------------------------------------
* main - start van het programma
*-----------------------------------------------------------
*/
void main(void)
{
disable_interrupt();
etx_init();
/* nu loopt de task switcher */
sid = screate(0);
proc2id = pcreate(proc2,2,"proc 2");
proc1id = pcreate(proc1,2,"proc 1");
proc3id = pcreate(proc3,1,"proc 3");
while (numproc > 1)
{
pause();
}
}