home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Fish 'n' More 2
/
fishmore-publicdomainlibraryvol.ii1991xetec.iso
/
disks
/
disk429.lzh
/
Timer
/
test.c
< prev
next >
Wrap
C/C++ Source or Header
|
1991-01-10
|
5KB
|
197 lines
/**************************************
* TEST.C 08/04/90
* Written by Timm Martin
* This source code is public domain.
***************************************/
#include <exec/types.h>
#include <functions.h>
#include <intuition/intuition.h>
#include <intuition/intuitionbase.h>
#include <stdio.h>
#include "timer.h"
/********************
* SHARED VARIABLES
*********************/
struct IntuitionBase *IntuitionBase = NULL;
struct Window *win = NULL;
/************************
* NEW WINDOW STRUCTURE
*************************/
struct NewWindow new_window =
{
/* SHORT LeftEdge */ 0,
/* SHORT TopEdge */ 0,
/* SHORT Width */ 640,
/* SHORT Height */ 40,
/* UBYTE DetailPen */ 0,
/* UBYTE BlockPen */ 1,
/* ULONG IDCMPFlags */ CLOSEWINDOW|MOUSEBUTTONS,
/* ULONG Flags */ ACTIVATE|NOCAREREFRESH|SIMPLE_REFRESH|WINDOWCLOSE|WINDOWDEPTH|WINDOWDRAG|WINDOWSIZING,
/* struct Gadget * FirstGadget */ NULL,
/* struct Image * CheckMark */ NULL,
/* UBYTE * Title */ (STRPTR)"Timer Test Program",
/* struct Screen * Screen */ NULL,
/* struct BitMap * BitMap */ NULL,
/* SHORT MinWidth */ 230,
/* SHORT MinHeight */ 20,
/* USHORT MaxWidth */ 640,
/* USHORT MaxHeight */ 200,
/* USHORT Type */ WBENCHSCREEN,
};
/*************
* FUNCTIONS
**************/
void main( int argc, char *argv[] );
void program_end( char *error );
void program_begin( void );
void window_input( void );
/***********
* M A I N
************/
void main( int argc, char *argv[] )
{
/* quit if not run from the CLI -- nowhere to send output */
if (argc)
{
program_begin();
window_input();
}
program_end( NULL );
}
/*****************
* PROGRAM BEGIN
******************/
/*
This procedure opens the Intuition library, the window, and the timer device.
If any of these things fail, the program ends.
*/
void program_begin( void )
{
if (!(IntuitionBase = (struct IntuitionBase *)
OpenLibrary( "intuition.library", 0L )))
program_end( "intuition" );
if (!(win = OpenWindow( &new_window )))
program_end( "window" );
if (!timer_open())
program_end( "timer" );
}
/***************
* PROGRAM END
****************/
/*
This procedure closes the timer device, the window, and the Intuition
library. It also prints an error message (if any) to the CLI.
*/
void program_end( char *error )
{
if (error) printf( "FAILED: %s\n", error );
timer_close();
if (win) CloseWindow( win );
if (IntuitionBase) CloseLibrary( IntuitionBase );
}
/****************
* WINDOW INPUT
*****************/
/*
This procedure monitors for window input. It returns when the user clicks on
the window close gadget.
*/
void window_input( void )
{
BOOL finished;
struct IntuiMessage *imessage;
BOOL winput;
printf( "\nHere's a series of syncrhonous waits:\n\n" );
printf( "Waiting for 2 seconds...\n" );
timer_wait( 2 * MICROS_PER_SEC );
printf( "Waiting for 1 second...\n" );
timer_wait( 1 * MICROS_PER_SEC );
printf( "Waiting for 5 seconds...\n" );
timer_wait( 5 * MICROS_PER_SEC );
printf( "Waiting for 1/2 second...\n" );
timer_wait( MICROS_PER_SEC / 2 );
printf( "\nAnd now for some asynchronous waits...\n" );
printf( "A message will be displayed every two seconds\n" );
printf( "if you don't click the left mouse button in the test window:\n\n" );
finished = FALSE;
while (!finished)
{
/* ask the timer to notify you in 2 seconds */
timer_start( 2 * MICROS_PER_SEC );
/* assume there is no window input */
winput = FALSE;
/* wait for input from the window and the timer device */
Wait( 1L<<win->UserPort->mp_SigBit | 1L<<timer_port->mp_SigBit );
/* for each window input message */
while (imessage = (struct IntuiMessage *)GetMsg( win->UserPort ))
{
switch (imessage->Class)
{
case CLOSEWINDOW:
/* end the program */
finished = TRUE;
break;
case MOUSEBUTTONS:
/* if clicked down the left mouse button */
if (imessage->Code == SELECTDOWN)
{
/* print a message */
printf( "Mouse Clicked!\n" );
/* And record the fact that an input occurred. Must do this
* because the timer request may elapse while we are inside
* this loop.
*/
winput = TRUE;
}
break;
}
/* reply to the message to free its memory */
ReplyMsg( (struct Message *)imessage );
}
/* did the timer request elapse? */
if (timer_test())
{
/* if 'winput' is FALSE, then the timer elapsed before there was any
* window input. If 'winput' is TRUE, then the timer elapsed after
* the window input but before it reached this test.
*/
if (!winput) printf( "2 Seconds Expired!\n" );
}
/* if the timer request didn't elapse, cancel it so we can issue another
* request
*/
else
timer_abort();
}
printf( "\nSee ya!\n\n" );
}