home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 11 Util
/
11-Util.zip
/
tktools.zip
/
nice
/
nice.c
< prev
next >
Wrap
C/C++ Source or Header
|
1992-03-20
|
7KB
|
166 lines
/******************************************************************
NICE.C : This program allows you to run an OS/2 program in the idle
time priority. Invoking:
NICE /switches MYPROG.EXE program_parameters
Like:
NICE SEARCH "keyword" readme.doc > keyword.out
NICE switches:
/C : runs program in time-critical priority instead of idle priority.
/S : runs program synchronously with NICE.EXE.
/D : runs program detached from NICE.EXE (no console I/O possible)
Can be compiled under IBM C/SET 2 compiler.
Programmer can be reached via BITNET: <TURGUT@FRORS12.BITNET>
or <TURGUT@TREARN.BITNET>
*******************************************************************/
char *copyright = "NICE V1.0 (C)1992 T.Kalfaoglu, 1378 Sok. 8/10, Alsancak,Izmir,Turkey\n";
#define INCL_DOSPROCESS
#include <os2.h>
#include <stdio.h>
#include <conio.h>
#define BUFLEN 512L
/* defining flags for the DosExecPgm call: */
#define SYNCH 0L
#define ASYNCH 2L
#define DETACH 4L
/* flags for DosSetPriority call: */
#define IDLE 1L
#define CRITICAL 3L
void helper(void);
main(int argc, char *argv[])
{
RESULTCODES result;
unsigned int i, startfrom = 1;
ULONG prt=IDLE, rc, dflag = ASYNCH, termPID;
LONG delta=-31L, childID;
char buffer[BUFLEN], flag, args[BUFLEN], cmdline[BUFLEN], out[128];
fputs(copyright,stderr);
if (argc<2) helper();
if (*argv[1] == '/' || *argv[1] == '-') { /* parsing run-time options */
startfrom = 2;
flag='?';
for (i=1;flag;i++) {
flag = toupper(*(argv[1]+i));
switch (flag) {
case 'C' : prt = CRITICAL;
delta = 31L;
break;
case 'S' : dflag = SYNCH;
break;
case 'D' : dflag = DETACH;
break;
case 0 : break;
default :
sprintf(out,"Parameter '%c' is not recognised.\n",flag);
fputs(out,stderr);
exit(1);
}
}
}
strcpy(args,"/C \""); /* parameter to CMD.EXE */
for (i=startfrom;i < argc;i++) {
strcat(args,argv[i]);
strcat(args," ");
}
strcat(args,"\"");
strcpy(cmdline,"CMD.EXE");
strcat(cmdline+8,args); /* we need to have a \0 after CMD.EXE */
rc = DosExecPgm(buffer,BUFLEN,dflag,cmdline,0L,&result,"CMD.EXE");
if (rc) {
sprintf(out,"Error %lu starting CMD.EXE with these parameters\n",rc);
fputs(out,stderr);
fputs(cmdline,stderr);
fputs("\nReport buffer contents: ",stderr);
fputs(buffer,stderr);
fputs("\n",stderr);
}
if (dflag == SYNCH) {
sprintf(out,"DosExecPgm invocation rc=%lu\n",rc);
fputs(out,stderr);
sprintf(out,"Termination code: %lu\n",result.codeTerminate);
fputs(out,stderr);
sprintf(out,"Result (exit) code: %lu\n",result.codeResult);
fputs(out,stderr);
}
else { /* if asynch.. */
childID = result.codeTerminate;
rc = DosSetPriority(1L,prt,delta,childID);
if (rc) { /* set priority failed */
sprintf(out,"DosSetPriority call failed with rc=%lu\n",rc);
fputs(out,stderr);
fputs("Process execution continues at standard priority level\n",stderr);
}
else /* success */
sprintf(out,"Process %lu started with %s priority\n",result.codeTerminate,
(prt == 1 ? "idle" : "time-critical"));
fputs(out,stderr);
}
/* If asynch, collect results, and reset priority for new decendants */
if (dflag == ASYNCH)
while (DosCwait(0L,1L,&result,&termPID, childID) == 129) {
rc = DosSetPriority(1L,prt,delta,childID);
if (rc) { /* set priority failed */
sprintf(out,"DosSetPriority call failed with rc=%lu\n",rc);
fputs(out,stderr);
fputs("Process execution continues at previous priority level\n",stderr);
}
DosSleep(3000);
}
DosExit(0,rc);
}
void helper() {
int i;
printf("\nThis program allows you to run an OS/2 program either in idle\n");
printf("time priority, or time-critical priority levels by invoking a\n");
printf("command processor (CMD.EXE) with the parameters you specify, \n");
printf("and then modifying the priority of that CMD.EXE. It periodically\n");
printf("re-sets the priority of all subprocess of CMD.EXE\n\n");
printf("Usage:\n");
printf(" NICE /switches MYPROG.EXE program_parameters \n\n");
printf("Examples:\n");
printf(" NICE /cs SEARCH \"keyword\" *.doc *.txt > keyword.out\n");
printf(" DETACH NICE ICC /c /Ti+ myfile.c\n");
printf(" DETACH NICE CL /c /AL myfile.c > compiler_says.out\n\n");
printf("Optional Switches:\n");
printf(" /C : runs program in time-critical priority instead of idle priority.\n");
printf(" /S : runs program synchronously with NICE.\n");
printf(" /D : runs program detached from NICE (no console I/O possible)\n\n");
printf("--Hit ENTER for the second page---\n");
i = getchar();
printf("Note 1: Due to a limitation, if NICE is invoked without the /D switch,\n");
printf(" the command prompt will not appear until the execution is completed.\n");
printf(" To get the command prompt right away, start your command with the DETACH\n");
printf(" keyword.\n");
printf("Note 2: If /D is specified, the program is run in the normal-priority mode\n\n");
printf(" NICE is written in C language with IBM C/SET 2 32-bit compiler and\n");
printf(" OS/2 2.0 beta 6.177 toolkit.\n\n");
printf("Things to try: \n");
printf(" - Open two OS/2 Windows in the workshell.\n");
printf(" - At one window, type COUNTER to run counter.cmd\n");
printf(" - At the other window, type: NICE COUNTER so that it runs in idle priority\n");
printf(" - Let them run for a while. Notice the difference in speed!\n");
printf(" - Try again by giving one of them time-critical priority:\n");
printf(" you may lose control of the workshell, until the counter hits 4000\n\n");
printf("User-Supported Software:\n");
printf(" A donation of $10 is required if you decide to keep this program.\n");
printf(" Please send payment to the above address. Thank you!\n");
exit(1);
}