Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP
Path: utzoo!mnetor!seismo!husc6!uwvax!rutgers!lll-crg!styx!ames!ucbcad!ucbvax!CITHEX.CALTECH.EDU!carl
From: carl@CITHEX.CALTECH.EDU
Newsgroups: mod.computers.vax
Subject: Shorter alternate to STOP/FORCE
Message-ID: <861130170724.00k@CitHex.Caltech.Edu>
Date: Sun, 30-Nov-86 20:07:24 EST
Article-I.D.: CitHex.861130170724.00k
Posted: Sun Nov 30 20:07:24 1986
Date-Received: Mon, 1-Dec-86 03:43:38 EST
Sender: daemon@ucbvax.BERKELEY.EDU
Organization: The ARPA Internet
Lines: 38
Approved: info-vax@sri-kl.arpa

I don't know what you did to make your version of a program to force exits
of other processes take thirty-odd blocks (unless you're counting the include
files that DEC supplies in your count), but here's a C program that does
basically the same thing (it doesn't use the CLI routines that yours does,
but DOES let you specify processes by name) that only takes two blocks
(actually, 766 characters):
/*------FORCEX.C--------------FILE_STARTS_HERE-------------------------------*/
#include 
#include 
#define OK(value) (((stat = (value)) & 7) == 1)
main(nargs, args)
int nargs;
char **args;
{   static char buffer[80] = { '0', 'x', '\0' };
    char temp[80];
    static $DESCRIPTOR(prcnam, buffer);
    static long stat, pid;
    extern long SYS$FORCEX();
    long *pidadr = &pid;
    struct dsc$descriptor *ptr = &prcnam;

    if (nargs == 1)
	strcat(buffer, "0");
    else if (nargs == 2) {
	strcat(buffer, *++args);
  	if (sscanf(buffer, "%x%s", &pid, temp) == 1)
		ptr = 0;
	else {
     		prcnam.dsc$a_pointer = buffer + 2;
		prcnam.dsc$w_length = strlen(prcnam.dsc$a_pointer);
		pidadr = 0;
	}
    } else {
      	puts("USAGE: FORCEX pid\n\tor\n       FORCEX prcnam");
	exit(1);
    }  exit(SYS$FORCEX(pidadr, ptr, 1));
}
/*------FORCEX.C--------------FILE_ENDS_HERE---------------------------------*/