home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 11 Util / 11-Util.zip / SETPRI.ZIP / SP.C < prev    next >
Text File  |  1992-06-29  |  2KB  |  90 lines

  1. /* SetPriority (SP) */
  2. #define INCL_DOSPROCESS
  3. #define INCL_NOPM
  4. #include <os2.h>
  5. #include <dos.h>
  6. #include <stdlib.h>
  7. #include <stdio.h>
  8. #include <ctype.h>
  9. #include <string.h>
  10.  
  11. #define PATHLEN 120
  12.  
  13. static struct _pt
  14. {
  15.   char ch;
  16.   USHORT usClass;
  17. } pt[]=
  18. {
  19.   {'i', PRTYC_IDLETIME},
  20.   {'n', PRTYC_NOCHANGE},
  21.   {'r', PRTYC_REGULAR},
  22.   {'f', PRTYC_FOREGROUNDSERVER},
  23.   {'t', PRTYC_TIMECRITICAL},
  24.   {0,   0}
  25. };
  26.  
  27. char *prior[]={"no change in", "idle", "regular", "time critical", "foreground"};
  28.  
  29. int main(int argc, char *argv[])
  30. {
  31.   char args[255];
  32.   PIDINFO pidUs;
  33.   USHORT usClass;
  34.   USHORT rc;
  35.   SHORT sDelta;
  36.   struct _pt *ppt;
  37.   char **p;
  38.  
  39.   if (argc < 3)
  40.   {
  41.     printf("Usage:\n\n");
  42.  
  43.     printf("SP <class>[delta] <program> [args...]\n\n");
  44.  
  45.     printf("<class>:  n=no change, i=idle, r=regular, f=foreground, t=time critical\n");
  46.     printf("[delta]:  Any number from -31 to 31\n");
  47.     return 1;
  48.   }
  49.  
  50.   DosGetPID(&pidUs);
  51.  
  52.   usClass=PRTYC_NOCHANGE;
  53.   sDelta=0;
  54.  
  55.   *argv[1]=(char)tolower(*argv[1]);
  56.  
  57.   for (ppt=pt; ppt->ch; ppt++)
  58.     if (ppt->ch==*argv[1])
  59.     {
  60.       usClass=ppt->usClass;
  61.       break;
  62.     }
  63.  
  64.   sDelta=atoi(argv[1] + !!islower(*argv[1]));
  65.  
  66.   if ((rc=DosSetPrty(PRTYS_PROCESSTREE, usClass, sDelta, pidUs.pid)) != 0)
  67.     printf("DosSetPrty() rc=%u\n", rc);
  68.  
  69.   *args='\0';
  70.  
  71.   for (p=argv+2; *p; p++)
  72.   {
  73.     strcat(args, *p);
  74.     strcat(args, " ");
  75.   }
  76.  
  77.   if (args[strlen(args)-1]==' ')
  78.     args[strlen(args)-1]='\0';
  79.  
  80.   printf("SP: running %s, %s priority, delta %d\n",
  81.          argv[2], prior[usClass], sDelta);
  82.  
  83.   rc=system(args);
  84.  
  85.   if (rc != 0)
  86.     printf("SP: system() rc=%u\n", rc);
  87.  
  88.   return rc;
  89. }
  90.