home *** CD-ROM | disk | FTP | other *** search
- /* idle.c (emx+gcc) */
-
- #define INCL_DOSPROCESS
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <process.h>
- #include <os2.h>
-
- static void dump_tib (void)
- {
- PTIB ptib;
- PPIB ppib;
-
- if (DosGetInfoBlocks (&ptib, &ppib) == 0)
- {
- printf ("Stack base: %.8lx\n", (long)ptib->tib_pstack);
- printf ("Stack limit: %.8lx\n", (long)ptib->tib_pstacklimit);
- printf ("Priority: %.8lx\n", (long)ptib->tib_ptib2->tib2_ulpri);
- }
- }
-
-
- int main (int argc, char *argv[])
- {
- ULONG rc;
- int i, arg0, len, verbose;
- char *p;
-
- arg0 = 1; verbose = 0;
- if (arg0 < argc && strcmp (argv[arg0], "-v") == 0)
- {
- verbose = 1;
- ++arg0;
- }
- if (arg0 < argc && strcmp (argv[arg0], "-t") == 0)
- {
- verbose = 2;
- ++arg0;
- }
- if (arg0 >= argc)
- {
- printf ("Usage: idle <command>\n");
- return (1);
- }
- if (verbose >= 2)
- dump_tib ();
- rc = DosSetPriority (PRTYS_PROCESS, PRTYC_IDLETIME, 0, 0);
- if (verbose >= 2)
- dump_tib ();
- if (rc != 0)
- {
- fprintf (stderr, "DosSetPriority failed, rc=%lu\n", rc);
- return (2);
- }
- len = 1;
- for (i = arg0; i < argc; ++i)
- len += strlen (argv[i]) + 1;
- p = malloc (len);
- if (p == NULL)
- {
- perror ("malloc");
- return (2);
- }
- *p = 0;
- for (i = arg0; i < argc; ++i)
- {
- if (i > arg0)
- strcat (p, " ");
- strcat (p, argv[i]);
- }
- i = system (p);
- if (i < 0)
- {
- perror ("system");
- return (2);
- }
- else if (verbose >= 1)
- printf ("Return code = %d\n", i);
- return (i);
- }
-