home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 11 Util
/
11-Util.zip
/
kbstuf.zip
/
STUFFER
/
STUFFER.C
< prev
next >
Wrap
C/C++ Source or Header
|
1993-08-22
|
9KB
|
260 lines
/*******************************************************************************
File Name : STUFFER.C
Job Name : KbStuffer
Program Name : Stuffer.exe
Date Created : February 15, 1993
Description : Sample File To Stuff KeyStokes Into The Keyboard Buffer Via
KbStuffer.
In Order To Send Information To KbStuffer:
1 - Attach To Shared Memory And Semaphores
2 - Put Data Into Shared Memory
To Attach To Shared Memory:
1 - Open The Shared Memory InUse Semaphore
2 - Open The Shared Memory DataWaiting Semaphore
3 - Wait For InUse Semaphore To Clear Signaling Shared
Memory Has Been Created.
4 - Get The Address Of KbStuffer's Shared Memory
5 - Turn Shared Memory's Address Into A Pointer
To Place Data Into KbStuffer's Shared Memory:
1 - Get Id Of Keyboard Buffer Session To Stuff
2 - Wait For Shared Memory To Be Cleared
- In Use Semaphore
3 - Place Data Into KbStuffer Shared Memory
4 - Clear InUse Semaphore
KbStuffer's Shared Memory In Use Semaphore
"/Sem/WLM/KbStuff/InUseSem."
KbStuffer's Shared Memory Data Waiting Semaphore
"/Sem/WLM/KbStuff/DataWaitSem."
KbStuffer's Shared Memory
"/ShareMem/WLM/KbStuff/Buffer."
Routines : main() - Place Command Line KeyStroke Codes Into Keyboard Buffer
SetupSharedMem() - Attach To KbStuffer Shared Memory And Semaphores
StuffShrMemory() - Place Passed KeyStroke Codes Into KbStuffer's Shared Memory
*******************************************************************************/
#define INCL_DOSINFOSEG
#define INCL_DOSMEMMGR
#define INCL_DOSSEMAPHORES
#include "os2.h"
#include "string.h"
#include "stdlib.h"
#include "stdio.h"
#include "Stuffer.h"
/*******************************************************************************
Routine Name : main()
Date Prepared : February 15, 1993
Prepared By : William L. Moussiaux
Inputs : KeyStroke Codes To Stuff In Keyboard Buffer
Outputs : TRUE/FALSE
Globals :
Description : Place Command Line KeyStroke Codes Into Keyboard Buffer
*******************************************************************************/
int main (int argc, char *argv[])
{
USHORT Result;
char chTmp[10];
CHAR *chShrMemData;
int ArgVar, i;
ScreenGroup = -1; /* -1 = Use Current OS/2 Session */
ArgVar = 1; /* KeyStroke Data Is 1st Passed Parameter */
if (argc > 1) /* Get Passed Arguments To Stuff To KeyBoard Buffer */
{
if (argv[1][0] == '/' || argv[1][0] == '-')
{ /* Get OS/2 Session To Stuff Data To */
i = 0;
do {
chTmp[i] = argv[1][i + 1];
i ++;
} while (argv[1][i] != ' ' && argv[1][i] != '\0');
ScreenGroup = atoi (chTmp);
ArgVar = 2; /* KeyStroke Data Is 2nd Passed Parameter */
}
chShrMemData = (char *)malloc (SHARED_MEM_SIZE + 1);
if (chShrMemData == NULL)
{
printf ("ERROR - Allocating Memory For chShrMemData\n");
return (FALSE);
}
strcpy (chShrMemData, argv[ArgVar]); /* Get KeyStroke Data */
}
else
{
printf ("Must Pass Characters To Send To Keyboard Buffer\n");
return (FALSE);
}
/*----------------------------------------------------------------------------*/
Result = SetupSharedMem(); /* Open Semaphores And Shared Memory */
if (Result == FALSE)
{
free (chShrMemData); /* Free Memory */
return (FALSE);
}
StuffShrMemory (chShrMemData); /* Place Data Into Shared Memory */
free (chShrMemData); /* Free Memory */
return (TRUE);
}
/*******************************************************************************
Routine Name : SetupSharedMem()
Date Prepared : February 15, 1993
Prepared By : William L. Moussiaux
Inputs : None
Outputs : TRUE/FALSE
Globals : CHAR FAR *SharedMemPtr
HSEM semDataWaiting, semInUse
Description : Attach To KbStuffer Shared Memory And Semaphores
*******************************************************************************/
USHORT SetupSharedMem()
{
USHORT Result;
SEL SharedMem;
/* Open Shared Memory InUse Semaphore */
Result = DosOpenSem (&semInUse, SEM_INUSE_NAME);
if (Result != 0)
{
printf ("ERROR - Opening Shared Memory Semaphore %d\n", Result);
if (Result == 187)
printf ("KbStuffer May Not Be Running\n");
return (FALSE);
}
/* Open Shared Memory DataWaiting Semaphore */
Result = DosOpenSem (&semDataWaiting, SEM_WAIT_NAME);
if (Result != 0)
{
printf ("ERROR - Opening Data Waiting Semaphore %d\n", Result);
return (FALSE);
}
/* Wait For Shared Memory To Be Created */
Result = DosSemWait (semInUse, SEM_WAIT_TIME);
if (Result != 0)
{
printf ("ERROR - Waiting For Shared Memory Semaphore %d\n", Result);
return (FALSE);
}
/* Get Shared Memory Address */
Result = DosGetShrSeg (SHARED_MEM_NAME, &SharedMem);
if (Result != 0)
{
printf ("ERROR - Getting Shared Memory Address %d\n", Result);
return (FALSE);
}
/* Turn Shared Memory Address Into A Pointer */
SharedMemPtr = (char far *)MAKEP (SharedMem, 0L);
return (TRUE);
}
/*******************************************************************************
Routine Name : StuffShrMemory()
Date Prepared : February 15, 1993
Prepared By : William L. Moussiaux
Inputs : char * - Data To Be Placed In KbStuffer's Shared Memory
Outputs : TRUE/FALSE
Globals : CHAR FAR *SharedMemPtr
HSEM semDataWaiting, semInUse
Description : Place Passed KeyStroke Codes Into KbStuffer's Shared Memory
*******************************************************************************/
USHORT StuffShrMemory (char *chShrMemData)
{
USHORT Result;
CHAR *chBuffer, *TmpPtr;
unsigned int GlobalSeg, LocalSeg;
LINFOSEG far *lInfo;
chBuffer = (char *)malloc (SHARED_MEM_SIZE + 1);
if (chBuffer == NULL)
{
printf ("ERROR - Allocating Memory For chBuffer\n");
return (FALSE);
}
/*----------------------------------------------------------------------------*/
if (ScreenGroup == -1)
{ /* OS/2 Session To Stuff Data To Not Passed, Use Current Session */
DosGetInfoSeg (&GlobalSeg, &LocalSeg); /* Get Foreground Session Id */
lInfo = MAKEP (LocalSeg, 0);
ScreenGroup = lInfo->sgCurrent;
}
/* Put Session Id And Keys To Stuff Into Shared Memory */
sprintf (chBuffer, "%u %s", ScreenGroup, chShrMemData);
printf (chBuffer);
/*----------------------------------------------------------------------------*/
/* Wait For KeyBoard Monitor To Clear Shared Memory */
Result = DosSemRequest (semInUse, SEM_WAIT_TIME);
if (Result != 0)
{
printf ("ERROR - Requesting Shared Memory Semaphore %d\n", Result);
free (chBuffer); /* Free Memory */
return (FALSE);
}
/*----------------------------------------------------------------------------*/
TmpPtr = chBuffer;
while (*TmpPtr) /* Copy Data To Shared Memory Buffer */
*SharedMemPtr ++ = *TmpPtr ++;
*SharedMemPtr = '\0'; /* Null Terminate Data */
/*----------------------------------------------------------------------------*/
Result = DosSemClear (semInUse); /* Clear Shared Memory In Use Semaphore */
if (Result != 0)
{
printf ("ERROR - Clearing InUse Semaphore %d\n", Result);
free (chBuffer); /* Free Memory */
return (FALSE);
}
Result = DosSemClear (semDataWaiting); /* Tell KeyBoard Monitor Data Waiting */
if (Result != 0)
{
printf ("ERROR - Clearing Data Waiting Semaphore %d\n", Result);
free (chBuffer); /* Free Memory */
return (FALSE);
}
free (chBuffer); /* Free Memory */
return (TRUE);
}