⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 setprty.c

📁 使用于OS/2下的小工具的C源程序,使用于OS/2下的小工具的C源程序
💻 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(&params, &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 + -