Listing 4 (bankdemo.c)

#include "csim.h"
#include <bios.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void generator(void);
void tellor(void);
void ender(void);

int customers = 0;
int tellors = 1;

int main(void)
{
 clrscr();
 start_process(generator, 0x0040);

 randomize();

 start_process(tellor, 0x0040);
 start_process(tellor, 0x0040);
 start_process(tellor, 0x0040);

 if (start_kb_process(ender, 0x0040))
  exit_processing(3);
 set_time_ratio(1000.0);
 sim_start();
 return(0);
}

void generator(void)
{
 int post_id;
 post_id = init_post("Customers");
 while (1)
 {
   customers++;
   set_post(post_id, &customers);
   gotoxy(1, 1);
   printf("customers = %d time %d", customers,
    CurrentTime);
   wait_for_time((rand() % (int)(4.5_MINUTES_)));
 }
}

void tellor(void)
{
 int number;
 int post_id;
 number = tellors++;
 post_id = init_post("Customers");
 while (1)
 {
   gotoxy(2, 1 + 2 * number);
   printf("0");
   wait_post(post_id);
   if (customers)
   {
    gotoxy(2, 1 + 2 * number);
    printf("1");
    if (customers > 1)
       set_post(post_id, &customers);
    customers--;
    gotoxy(1, 1);
    printf("customers = %d time %ld", customers,
          CurrentTime);
    wait_for_time(4_MINUTES_+ rand() %
                (int)(6_MINUTES_));
    gotoxy(1, 1);
    printf("customers = %d time %ld", customers,
          CurrentTime);
  }
 }
 }

 void ender(void)
 {
  wait_for_time(8_HOURS_);
  exit_processing(0);
 }