diff options
Diffstat (limited to 'os2/alarm.c')
-rw-r--r-- | os2/alarm.c | 149 |
1 files changed, 0 insertions, 149 deletions
diff --git a/os2/alarm.c b/os2/alarm.c deleted file mode 100644 index 974e2380d8..0000000000 --- a/os2/alarm.c +++ /dev/null @@ -1,149 +0,0 @@ -/* - * This software is Copyright 1989 by Jack Hudler. - * - * Permission is hereby granted to copy, reproduce, redistribute or otherwise - * use this software as long as: there is no monetary profit gained - * specifically from the use or reproduction or this software, it is not - * sold, rented, traded or otherwise marketed, and this copyright notice is - * included prominently in any copy made. - * - * The author make no claims as to the fitness or correctness of this software - * for any use whatsoever, and it is provided as is. Any use of this software - * is at the user's own risk. - * - */ - -/****************************** Module Header ******************************\ -* Module Name: alarm.c -* Created : 11-08-89 -* Author : Jack Hudler [jack@csccat.lonestar.org] -* Copyright : 1988 Jack Hudler. -* Function : Unix like alarm signal simulator. -\***************************************************************************/ - -/* Tested using OS2 1.2 with Microsoft C 5.1 and 6.0. */ - -#define INCL_DOSPROCESS -#define INCL_DOSSIGNALS -#define INCL_DOS -#include <os2.h> - -#include <stdlib.h> -#include <stdio.h> -#include <signal.h> - -#include "alarm.h" - -#define ALARM_STACK 4096 /* This maybe over kill, but the page size is 4K */ - -static PBYTE pbAlarmStack; -static SEL selAlarmStack; -static TID tidAlarm; -static PID pidMain; -static BOOL bAlarmInit=FALSE; -static BOOL bAlarmRunning=FALSE; -static USHORT uTime; - -static VOID FAR alarm_thread ( VOID ) -{ - while(1) - { - if (bAlarmRunning) - { - DosSleep(1000L); - uTime--; - if (uTime==0L) - { - // send signal to the main process.. I could have put raise() here - // however that would require the use of the multithreaded library, - // and it does not contain raise()! - // I tried it with the standard library, this signaled ok, but a - // test printf in the signal would not work and even caused SEGV. - // So I signal the process through OS/2 and then the process - // signals itself. - if (bAlarmRunning) - DosFlagProcess(pidMain,FLGP_PID, PFLG_A,1); - bAlarmRunning=FALSE; - } - } - else - DosSleep(500L); - } -} - -static VOID PASCAL FAR AlarmSignal(USHORT usSigArg,USHORT usSigNum) -{ - /* - * this is not executed from the thread. The thread triggers Process - * flag A which is in the main processes scope, this inturn triggers - * (via the raise) SIGUSR1 which is defined to SIGALRM. - */ - raise(SIGUSR1); -} - -static void alarm_init(void) -{ - PFNSIGHANDLER pfnPrev; - USHORT pfAction; - PIDINFO pid; - - bAlarmInit = TRUE; - - if (!DosAllocSeg( ALARM_STACK, (PSEL) &selAlarmStack, SEG_NONSHARED )) - { - OFFSETOF(pbAlarmStack) = ALARM_STACK - 2; - SELECTOROF(pbAlarmStack) = selAlarmStack; - /* Create the thread */ - if (DosCreateThread( alarm_thread, &tidAlarm, pbAlarmStack )) - { - fprintf(stderr,"Alarm thread failed to start.\n"); - exit(1); - } - /* Setup the signal handler for Process Flag A */ - if (DosSetSigHandler(AlarmSignal,&pfnPrev,&pfAction,SIGA_ACCEPT,SIG_PFLG_A)) - { - fprintf(stderr,"SigHandler Failed to install.\n"); - exit(1); - } - /* Save main process ID, we'll need it for triggering the signal */ - DosGetPID(&pid); - pidMain = pid.pid; - } - else - exit(1); -} - -unsigned alarm(unsigned sec) -{ - if (!bAlarmInit) alarm_init(); - - if (sec) - { - uTime = sec; - bAlarmRunning = TRUE; - } - else - bAlarmRunning = FALSE; - - return 0; -} - -#ifdef TESTING -/* A simple test to see if it works */ -BOOL x; - -void timeout(void) -{ - fprintf(stderr,"ALARM TRIGGERED!!\n"); - DosBeep(1000,500); - x++; -} - -void main(void) -{ - (void) signal(SIGALRM, timeout); - (void) alarm(1L); - printf("ALARM RUNNING!!\n"); - while(!x); -} -#endif |