📄 setprty.c
字号:
/*
* SETPRTY.C - Set the priority of a starting process to specified value.
*
* PROGRAMMER: Martti Ylikoski
* CREATED: 30.6.1991
* VERSION: 1.0
* Note ! Not working
*/
#include <stdio.h>
#include <process.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <param.h>
#include <paramstd.h>
#define INCL_DOS
#include <os2.h>
typedef struct {
char cmdopt[20] ;
int flag ;
} TABLE_ENTRY ;
TABLE_ENTRY prtyflags[] = {
"IDLE", PRTYC_IDLETIME,
"I", PRTYC_IDLETIME,
"REGULAR", PRTYC_REGULAR,
"R", PRTYC_REGULAR,
"TIMECRITICAL", PRTYC_TIMECRITICAL,
"T", PRTYC_TIMECRITICAL,
"NOCHANGE", PRTYC_NOCHANGE,
"N", PRTYC_NOCHANGE,
"FOREGROUND", PRTYC_FOREGROUNDSERVER,
"F", PRTYC_FOREGROUNDSERVER
} ;
static char *progname, *fname ;
extern unsigned long pflags ;
ParamEntry pentry[12] = {
"P", &ParamSetPause, 0,
"F", &ParamSetFold, 0,
"V", &ParamSetVerbose, 0,
"R", &ParamSetReport, 0,
"S", &ParamSetSubDirs, 0,
"?", &ParamSetHelp, 1,
"H", &ParamSetHelp, 1,
"NOD", &ParamSetNoDefault, 0,
"TEST", &ParamSetTest, 0,
"Y", &ParamSetYes, 0,
"N", &ParamSetTest, 0,
"\0", NULL, 0
} ;
ParamBlock params = {
"/-", IGNORECASE | NOPRIORITY | NOTRIGGERSALLOWED ,
pentry
} ;
int main(int argc, char *argv[])
{
int i, j , nargc, found ;
ULONG size ;
USHORT ret ;
DATETIME dt1, dt2 ;
CHAR achFailName[128], buf[512];
RESULTCODES rescResults;
PIDINFO pidinfo ;
USHORT prtyflag, priority, prlevel, prclass ;
SHORT prtychange ;
progname = argv[0] ;
ParamHandle(¶ms, &argc, argv) ;
if (argc == 1 || pflags & PA_HELP)
{
puts("SETPRTY - set the priority of a starting process to specified value.") ;
puts("Copyright (C) Martti Ylikoski, 1991.") ;
puts("Usage: SETPRTY prtyclass prtychange command argument(s)") ;
puts("Allowed prtyclasses are:") ;
puts(" /I(DLE) /R(EGULAR)") ;
puts(" /T(IMECRITICAL) /N(OCHANGE)") ;
puts(" /F(OREGROUNDSERVER)\n") ;
puts("Allowed values for prtychange are:") ;
puts(" /MA(XIMUM) /MI(NIMUM") ;
puts(" numbers in range -31 to +31\n" ) ;
if ( (ret = DosGetPrty(PRTYS_PROCESS, &priority, 0x000)) == 0)
{
prlevel = priority & 0x00FF ;
prclass = priority & 0xFF00 ;
prclass >>= 8 ;
printf("Priority class of current process is:") ;
if (prclass == PRTYC_IDLETIME)
printf("IDLE\n") ;
if (prclass == PRTYC_REGULAR)
printf("REGULAR\n") ;
if (prclass == PRTYC_TIMECRITICAL)
printf("TIMECRITICAL\n") ;
printf("Priority level is %d (allowed values 0-31)\n", prlevel) ;
}
return( 0 ) ;
}
if ( (ret = DosGetPID( &pidinfo )) != 0)
{
printf("%s: error in DosGetPID\n", progname) ;
return( 1 ) ;
}
prtyflag = PRTYC_IDLETIME ;
prtychange = PRTYD_MINIMUM ;
found = FALSE ;
for(i = 1 ; i < argc && found == FALSE ; i ++)
{
if (argv[i][0] == '-' || argv[i][0] == '/' )
for (j = 0 ; j < (int) (sizeof(prtyflags)/sizeof(TABLE_ENTRY)) ; j++)
{
if (strcmpi(prtyflags[j].cmdopt, &argv[i][1]) == 0)
{
prtyflag = prtyflags[j].flag ;
found = TRUE ;
argv[i] = NULL ;
if (i+1 < argc )
{
if( strnicmp(argv[i+1], "/MA", (size_t) 3) == 0 ||
strnicmp(argv[i+1], "-MA", (size_t) 3) == 0)
{
prtychange = PRTYD_MAXIMUM ;
argv[i+1] = NULL ;
}
else if (strnicmp(argv[i+1], "/MI", (size_t) 3) == 0 ||
strnicmp(argv[i+1], "-MI", (size_t) 3) == 0)
{
prtychange = PRTYD_MINIMUM ;
argv[i+1] = NULL ;
}
else if (argv[i+1][0] == '+' || argv[i+1][0] == '-' ||
isdigit(argv[i+1][0]) )
{
prtychange = atoi(argv[i+1]) ;
argv[i+1] = NULL ;
}
}
break ; /* out of inner for */
}
}
}
if (( ret = DosSetPrty(PRTYS_PROCESSTREE,
prtyflag, prtychange, pidinfo.pid)) != 0)
{
printf("%s: error in DosSetPrty\n", progname) ;
return(1) ;
}
nargc = argc ;
for(i = 1 ; i < nargc ; i ++)
{
while( i <= nargc-1 && argv[i] == NULL)
{
for(j=i ; j <nargc - 1 ; j++)
argv[j] = argv[j+1] ;
nargc -- ;
}
}
if (nargc == 1 )
{
printf("No command specified!\n") ;
return( 1 ) ;
}
strcpy(buf, argv[1] ) ;
for ( i = 2 ; i < nargc ; i++)
{
strcat(buf, " ") ;
strcat(buf, argv[i]) ;
}
buf[strlen(buf)+1] = '\0' ;
if (strstr(argv[1], ".exe") != NULL)
{
ret = DosExecPgm(achFailName, /* object-name buffer */
sizeof(achFailName), /* length of buffer */
EXEC_SYNC, /* sync flag */
buf, /* argument string */
0, /* environment string */
&rescResults, /* address of result */
argv[1]); /* name of program */
}
else
{
system( buf ) ;
}
return( 0 ) ;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -