📄 monout.c
字号:
/*
* MONOUT.C - Monitor function to play arguments as they were given from command line.
*
*
* PROGRAMMER: Martti Ylikoski
* CREATED: 16.11.1991
*/
static char *VERSION = "Version 1.0. Copyright (c) Martti Ylikoski. 1990, 1991" ;
/*
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <memory.h>
#include <monout.h>
#define INCL_DOS
#define INCL_KBD
#define INCL_VIO
#define INCL_DOSPROCESS
#define INCL_DOSMONITORS
#define INCL_DOSERRORS
#include <os2.h>
typedef struct kbdpacket
{
unsigned monflags ;
KBDKEYINFO kbdkeyinfo ;
unsigned ddflags ;
} KBDBUF ;
static KBDBUF kbdbuf ;
int MonPlayStr( char *str, int monflags )
{
HMONITOR hmon ;
USHORT ret ;
MONIN monin ;
MONOUT monout ;
SEL ginfo, linfo ;
LINFOSEG FAR *pgis ;
char *p1, *p2 ;
//GINFOSEG FAR *pgis ;
USHORT count ;
int i ;
monin.cb = sizeof(monin) ;
monout.cb = sizeof(monout) ;
if (( ret = DosMonOpen("KBD$", &hmon)) != 0)
{
printf("Error opening monitor\n") ;
return( 1 ) ;
}
if (( ret = DosGetInfoSeg(&ginfo, &linfo)) != 0)
{
printf("Error in DosGetInfoSeg\n") ;
return( 1 ) ;
}
pgis = MAKEPLINFOSEG(linfo) ;
//pgis = MAKEPGINFOSEG(ginfo) ;
if ((ret = DosMonReg(hmon, (PBYTE) &monin, (PBYTE) &monout, MONITOR_DEFAULT, pgis->sgCurrent)) != 0)
{
printf("Error registering monitor\n") ;
return( 1 ) ;
}
if ((ret = DosSetPrty(PRTYS_THREAD, PRTYC_TIMECRITICAL, PRTYD_MINIMUM+1, 0)) != 0)
{
printf("error raising priority\n") ;
return( 1 ) ;
}
count = sizeof(kbdbuf) ;
if (monflags & MON_SCAN)
{
kbdbuf.monflags=0 ;
kbdbuf.ddflags = 0 ;
/*
if (str[0] == '0')
{
kbdbuf.kbdkeyinfo.chChar = 0 ;
kbdbuf.kbdkeyinfo.chScan = (UCHAR) atoi(str) ;
}
else
{
kbdbuf.kbdkeyinfo.chChar = (UCHAR) atoi(str) ;
kbdbuf.kbdkeyinfo.chScan = 0 ;
}
*/
p1 = strtok(str, ",") ;
p2 = strtok(NULL, ",") ;
if (p2 == NULL)
{
kbdbuf.kbdkeyinfo.chChar = (UCHAR) atoi(p1) ;
kbdbuf.kbdkeyinfo.chScan = 0 ;
}
else
{
kbdbuf.kbdkeyinfo.chChar = (UCHAR) atoi(p2) ;
kbdbuf.kbdkeyinfo.chScan = (UCHAR) atoi(p1) ;
}
kbdbuf.kbdkeyinfo.fbStatus = 0 ;
kbdbuf.kbdkeyinfo.bNlsShift = 0 ;
kbdbuf.kbdkeyinfo.fsState = 0 ;
kbdbuf.kbdkeyinfo.time = 0 ;
if (( ret = DosMonWrite( (PBYTE) &monout, (PBYTE) &kbdbuf, count)) != 0)
{
printf("Error in DosMonWrite\n") ;
return( 1 ) ;
}
DosMonClose(hmon) ;
return( 0 ) ;
}
for ( i=0 ; i < strlen(str) ; i++ )
{
kbdbuf.monflags=0 ;
kbdbuf.ddflags = 0 ;
kbdbuf.kbdkeyinfo.chChar = str[i] ;
kbdbuf.kbdkeyinfo.chScan = str[i] ;
kbdbuf.kbdkeyinfo.fbStatus = 0 ;
kbdbuf.kbdkeyinfo.bNlsShift = 0 ;
kbdbuf.kbdkeyinfo.fsState = 0 ;
kbdbuf.kbdkeyinfo.time = 0 ;
if (( ret = DosMonWrite( (PBYTE) &monout, (PBYTE) &kbdbuf, count)) != 0)
{
printf("Error in DosMonWrite\n") ;
return( 1 ) ;
}
}
DosMonClose(hmon) ;
return ( 0 ) ;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -