
UUXQT                                                           12-NOV-1988 16:25:37    VAX C      V2.3-024                 Page 1
V1.0                                                            12-NOV-1988 16:25:17    DUA1:[VMSNET.DEVEL.GNUUCP.SRC]UUXQT.C;35 (1)



    1        	/*  uuxqt.c: Lol Grant. 23rd. Sept 1987.
    2        	 *	     read uucp C.<hostname>XXXXX files and execute the
    3        	 *	     commands in them.
    4        	 *	Modified for VMS by Jamie Hanrahan, Oct 1988. 
    5        	 *
    6        	 *	UUCP runs this to process received "X" files.  
    7        	 *
    8        	 *	In the VMS version, we spawn a subprocess running a DCL command 
    9        	 *	procedure that will do the real work, and pass the pieces of the "X"
   10        	 *	files to the command procedure via a mailbox.  
   11        	 *
   12        	 *	Among other things, the command procedure is responsible for getting
   13        	 *	received mail into VMSmail, for which it needs SYSPRV and DETACH.  
   14        	 *	We must therefore run with privileges.  To do this safely, this
   15        	 *	image is installed with SETPRV; the first thing it does is create the
   16        	 *	mailbox, spawn the subprocess, and turn off SETPRV for itself.  The
   17        	 *	DCL command procedure in the subprocess turns SYSPRV and DETACH on 
   18        	 *	and off as necessary.  
   19        	 *
   20        	 *	This program should be installed with SETPRV and should have an ACL
   21        	 *	that allows the VMSnet user execute-only access, and no access to
   22        	 *	other users.  The command procedure executed in the subprocess
   23        	 *	(VMSNET_BIN:UUXQT_DCL.COM) should be protected the same way, to
   24        	 *	preclude anyone from adding commands to it which would then run in
   25        	 *	a privileged context.  The VMSnet user should have execute-only access
   26        	 *	to the VMSNET_BIN directory. 
   27        	 */
   28        	
   29        	#include "includes.h"
 2958        	#include "uucp.h"
 3044        	#ifdef VMS
 3045        	#include "clidef.h"
 3048        	#endif
 3049        	
 3050        	main(argc, argv)
 3051        	int argc;
 3052        	char **argv;
 3053        	{
 3054    1   	    int i;
 3055    1   	    char command[255], addressee[255], input[255], output[255], line[132],
 3056    1   		chkfile[255], ruser[31], rsite[31], rquser[255];
 3057    1   	    char file[NAMESIZE];
 3058    1   	    char *xfile;
 3059    1   	    char *work_next();
 3060    1   	    FILE *fd, *cfd;
 3061    1   	    int pid, status, badx;
 3062    1   	
 3063    1   	#ifdef VMS
 3064    1   	    extern short int mbchan;
 3065    1   	    int privmask[2];
 3066    1   	    char mbname[31];
 3067    1   	    $DESCRIPTOR (mbname_desc, mbname);
 3068    1   	    char dclcmd[2048];
 3069    1   	    $DESCRIPTOR (dclcmd_desc, dclcmd);
 3070    1   	    int spawn_flags;

UUXQT                                                           12-NOV-1988 16:25:37    VAX C      V2.3-024                 Page 2
V1.0                                                            12-NOV-1988 16:25:17    DUA1:[VMSNET.DEVEL.GNUUCP.SRC]UUXQT.C;35 (1)

 3071    1   	    int child_status;
 3072    1   	#define CHILD_LOG "vmsnet_log:uuxqt_dcl.log"
 3073    1   	    $DESCRIPTOR (child_log_desc, CHILD_LOG);
 3074    1   	
 3075    1   	#endif
 3076    1   	
 3077    1   	    strcpy(host_name, "uuxqt");	/* We know who this is (huh??? -- JEH) */
 3078    1   	
 3079    1   	    for (i = 1; i < argc; i++) {
 3080    2   		if (argv[i][0] != '-')
 3081    2   		    break;
 3082    2   		switch (argv[i][1]) {
 3083    3   	
 3084    3   		default:
 3085    3   		    printf("uuxqt: unknown flag ignored\n");
 3086    3   	
 3087    3   	#ifdef VMS
 3088    3   		case 's':
 3089    3   		    strcpy(host_name, &(argv[i][2]));
 3090    3   		    get_lock();
 3091    3   		    printf("uuxqt: scanning for work from system <%s>\n", host_name);
 3092    3   		    break;
 3093    3   	#endif
 3094    3   	
 3095    3   		case 'x':
 3096    3   		    debug = atoi(&argv[i][2]);
 3097    3   		    printf("uuxqt: debug level set to %d\n", debug);
 3098    3   		    break;
 3099    3   		}
 3100    2   	    }
 3101    1   	
 3102    1   	#ifdef VMS
 3103    1   	    if (strcmp(host_name,"uuxqt")==0) {
 3104    2   		printf("no -s argument\n");
 3105    2   		logit("FAILED", "no -s argument");
 3106    2   		exit(EXIT_ERR);
 3107    2   	    }
 3108    1   	#endif
 3109    1   	
 3110    1   	    cuserid(who);		/* Finger out who we are */
 3111    1   	
 3112    1   	    read_params(NULL);
 3113    1   	
 3114    1   	    if (chdir(Spool) != 0) {
 3115    2   		printf("can't change to %s\n", Spool);
 3116    2   		logit("FAILED", "can't change to Spool");
 3117    2   		exit(EXIT_ERR);
 3118    2   	    }
 3119    1   	    logit("OK", "startup");
 3120    1   	
 3121    1   	    if (!work_scan(host_name, "X")) {
 3122    2   		logit("Completed", "No Work");
 3123    2   		exit(EXIT_OK);
 3124    2   	    }
 3125    1   	
 3126    1   	#ifdef VMS
 3127    1   	    sprintf(mbname, "UUXQT_%s_MBX", host_name);

UUXQT                                                           12-NOV-1988 16:25:37    VAX C      V2.3-024                 Page 3
V1.0                                                            12-NOV-1988 16:25:17    DUA1:[VMSNET.DEVEL.GNUUCP.SRC]UUXQT.C;35 (1)

 3128    1   	
 3129    1   	    for (i=0; i<strlen(mbname); i++)
 3130    1   		mbname[i] = _toupper(mbname[i]);
 3131    1   	
 3132    1   	    mbname_desc.dsc$w_length = strlen(mbname);
 3133    1   	
 3134    1   	    if (((status = SYS$CREMBX (0, &mbchan, 0,0,0,0, &mbname_desc)) & 1) != 1) {
 3135    2   		printf("couldn't create mailbox, status %d\n", status);
 3136    2   		logit("FAILED", mbname);
 3137    2   		exit(EXIT_ERR);
 3138    2   	    }
 3139    1   	
 3140    1   	    sprintf (dclcmd, "$ @vmsnet_bin:uuxqt_dcl %s ", mbname);
 3141    1   	    dclcmd_desc.dsc$w_length = strlen(dclcmd);
 3142    1   	
 3143    1   	    spawn_flags = CLI$M_NOCLISYM | CLI$M_NOWAIT;
 3144    1   	
 3145    1   	    if (((status = LIB$SPAWN (&dclcmd_desc, 0, &child_log_desc, &spawn_flags,
 3146    1   			       0, 0, &child_status, 0, 0, 0, 0, 0)) & 1) != 1) {
 3147    2   		printf("couldn't create subprocess, status %d\n", status);
 3148    2   		logit("FAILED", "$CREPRC");
 3149    2   		exit(EXIT_ERR);
 3150    2   	    }
 3151    1   	
 3152    1   	    /* from now on we run with no privileges */
 3153    1   	
 3154    1   	    privmask[0] = -1;
 3155    1   	    privmask[1] = -1;
 3156    1   	
 3157    1   	    if (((status = SYS$SETPRV (0, privmask, 0, 0)) & 1) != 1) {
 3158    2   		printf("couldn't disable privileges, status %d\n", status);
 3159    2   		logit("FAILED", "$SETPRV");
 3160    2   		exit(EXIT_ERR);
 3161    2   	    }
 3162    1   	
 3163    1   	#endif
 3164    1   	
 3165    1   	    while ((xfile = work_next()) != NULL) {
 3166    2   		/* eliminated munge_filename call for xfile; since the filename was
 3167    2   		/* returned by the local system's RTL, there seems to be little need
 3168    2   		/* to process it into local filename form!  -- JEH 
 3169    2   		*/
 3170    2   		if ((fd = fopen(xfile, "r")) == NULL) {
 3171    3   		    logit("CAN'T READ", xfile);
 3172    3   		    remove(xfile);
 3173    3   		    continue;
 3174    3   		}
 3175    2   		logit("FILE", file); 
 3176    2   		input[0] = output[0] = NULL;
 3177    2   		badx = 0;
 3178    2   	
 3179    2   		while (fgets(line, sizeof(line), fd) != NULL) {
 3180    3   		    line[strlen(line) - 1] = '\0';
 3181    3   		    DEBUG(1, "uuxqt:  %s\n", line);
 3182    3   		    switch (line[0]) {
 3183    4   		    case 'U':
 3184    4   			sscanf(&line[2], "%s %s", ruser, rsite);

UUXQT                                                           12-NOV-1988 16:25:37    VAX C      V2.3-024                 Page 4
V1.0                                                            12-NOV-1988 16:25:17    DUA1:[VMSNET.DEVEL.GNUUCP.SRC]UUXQT.C;35 (1)

 3185    4   		        logit("ruser", ruser);
 3186    4   		        logit("rsite", rsite);
 3187    4   			break;
 3188    4   		    case 'R':
 3189    4   			sprintf(rquser, "%s", &line[2]);
 3190    4   		        logit("rquser", rquser);
 3191    4   			break;
 3192    4   		    case 'F':
 3193    4   			sprintf(chkfile, "%s", &line[2]);
 3194    4   			munge_filename(chkfile);
 3195    4   		        logit("chkfile", chkfile);
 3196    4   			if ((cfd = fopen(chkfile, "r")) == NULL) {
 3197    5   			    logit("CAN'T READ CHKFILE", chkfile);
 3198    5   			    badx++;
 3199    5   			}
 3200    4   			else
 3201    4   			    close(cfd);
 3202    4   			break;
 3203    4   		    case 'I':
 3204    4   			sprintf(input, "%s", &line[2]);
 3205    4   			munge_filename(input);
 3206    4   			DEBUG(1, "uuxqt: input %s\n", input);
 3207    4   			break;
 3208    4   		    case 'O':
 3209    4   			sprintf(output, "%s", &line[2]);
 3210    4   			munge_filename(output);
 3211    4   			DEBUG(1, "uuxqt: output %s\n", output);
 3212    4   			break;
 3213    4   		    case 'C':
 3214    4   			sscanf(&line[2], "%s %s", command, addressee);
 3215    4   			DEBUG(1, "uuxqt: command %s\n", command);
 3216    4   			DEBUG(1, "uuxqt: addressee %s\n", addressee);
 3217    4   	#ifdef VMS
 3218    4   			if (strcmp(command,"rmail")==0) {
 3219    5   				if (!rmail_addrfix(addressee, input)) { 
 3220    6   					strcpy(addressee, postmaster);
 3221    6   		    			rmail_addrfix(addressee, input);
 3222    6   				}
 3223    5   			}
 3224    4   	#endif
 3225    4   			break;
 3226    4   		    default:
 3227    4   			break;
 3228    4   		    }
 3229    3   		}
 3230    2   		close(fd);
 3231    2   	
 3232    2   		if ((i = strlen(input)) == 0)
 3233    2   		    strcpy(input, NULL_DEVICE);
 3234    2   	
 3235    2   		if ((i = strlen(output)) == 0)
 3236    2   		    strcpy(output, NULL_DEVICE);
 3237    2   	
 3238    2   		sprintf(line, "%s %s < %s > %s", command, addressee, input, output);
 3239    2   	        logit("XQT", line);
 3240    2   	
 3241    2   	#ifdef VMS

UUXQT                                                           12-NOV-1988 16:25:37    VAX C      V2.3-024                 Page 5
V1.0                                                            12-NOV-1988 16:25:17    DUA1:[VMSNET.DEVEL.GNUUCP.SRC]UUXQT.C;35 (1)

 3242    2   		if (badx)
 3243    2   		    wrtmbx("0", xfile);
 3244    2   		else {
 3245    3   		    wrtmbx("1", xfile);
 3246    3   		    wrtmbx("A", addressee);
 3247    3   		    wrtmbx("I", input);
 3248    3   		    wrtmbx("O", output);
 3249    3   		    wrtmbx("C", command);
 3250    3   		}
 3251    2   	
 3252    2   	#else
 3253   X    		if (invoke(command, addressee, input, output)) {
 3254   X    		    sprintf(line, "%s %s %s %s", command, addressee, input, output);
 3255   X    		    logit("FAILED", line);
 3256   X    		    if (invoke(command, postmaster, input, output)) {
 3257   X    			sprintf(line, "%s %s %s %s", command, postmaster, input, output);
 3258   X    			logit("FAILED", line);
 3259   X    			continue;
 3260   X    		    }
 3261   X    		}
 3262   X    	
 3263   X    		if (remove(xfile) == 0)
 3264   X    		    DEBUG(1, "deleted %s\n", file);
 3265   X    		else
 3266   X    		    DEBUG(1, "Can't delete %s\n", file);
 3267   X    	
 3268   X    		if (strcmp(input, NULL_DEVICE))
 3269   X    		    if (remove(input) == 0)
 3270   X    			DEBUG(1, "deleted %s\n", input);
 3271   X    		    else
 3272   X    			DEBUG(1, "Can't delete %s\n", input);
 3273   X    	
 3274   X    		/* why do we remove the output file, after going to all this 
 3275   X    		/* trouble to create it?  -- JEH 
 3276   X    		*/
 3277   X    	
 3278   X    		if (strcmp(output, NULL_DEVICE))
 3279   X    		    if (remove(output) == 0)
 3280   X    			DEBUG(1, "deleted %s\n", output);
 3281   X    		    else
 3282   X    			DEBUG(1, "Can't delete %s\n", output);
 3283    2   	#endif
 3284    2   	
 3285    2   	    }
 3286    1   	
 3287    1   	#ifdef VMS
 3288    1   	    wrtmbx("/", " ");
 3289    1   	#endif
 3290    1   	
 3291    1   	    work_done();
 3292    1   	
 3293    1   	    logit("OK", "finished");
 3294    1   	    exit(EXIT_OK);
 3295    1   	}
 3296        	
 3297        	
 3298        	/* Invoke the local program. Return its status (0 == ok) or -1 */

UUXQT                                                           12-NOV-1988 16:25:37    VAX C      V2.3-024                 Page 6
V1.0                                                            12-NOV-1988 16:25:17    DUA1:[VMSNET.DEVEL.GNUUCP.SRC]UUXQT.C;35 (1)

 3299        	invoke(command, addressee, input, output)
 3300        	char *command, *addressee, *input, *output;
 3301        	{
 3302    1   	    int i, pid, fdi, fdo;
 3303    1   	    char tmp[255];
 3304    1   	    STATUS status;
 3305    1   	
 3306    1   	    if ((pid = fork())) {
 3307    2   		DEBUG(1, "fork = %d", pid);
 3308    2   		while ((i = wait(&status)) != pid)	/* null */
 3309    2   		    ;
 3310    2   		if (i == -1)
 3311    2   		    return 1;
 3312    2   	#ifdef VMS
 3313    2   		DEBUG(1, "uuxqt status=%x\n", status);
 3314    2   		return (status & 1 != 1);
 3315    2   	#else
 3316   X    		DEBUG(1, "uuxqt status=%x\n", (status.w_status >> 8) & 0377);
 3317   X    		return ((status.w_status >> 8) & 0377);
 3318    2   	#endif
 3319    2   	    }
 3320    1   	#ifdef VMS
 3321    1   	    sprintf(tmp, "%s%s.exe", EXEDIR, command);
 3322    1   	#else
 3323   X    	    sprintf(tmp, "%s/%s", EXEDIR, command);
 3324    1   	#endif
 3325    1   	    DEBUG(1, "execl %s\n", tmp);
 3326    1   	
 3327    1   	    close(0);
 3328    1   	    if ((fdi = open(input, O_RDONLY)) != 0)
 3329    1   		DEBUG(1, "cannot open %s as stdin\n", input);
 3330    1   	    close(fdi);
 3331    1   	
 3332    1   	    close(1);
 3333    1   	    if ((fdo = open(output, O_WRONLY)) != 1)
 3334    1   		DEBUG(1, "cannot open %s as stdout\n", output);
 3335    1   	    close(fdo);
 3336    1   	
 3337    1   	    execl(tmp, command, addressee, 0);
 3338    1   	}


UUXQT                                                           12-NOV-1988 16:25:37    VAX C      V2.3-024                 Page 7
V1.0                                                            12-NOV-1988 16:25:17    DUA1:[VMSNET.DEVEL.GNUUCP.SRC]UUXQT.C;35 (1)

                                       +-------------+
                                       | Storage Map |
                                       +-------------+
 
 

External Declarations
---------------------

 Identifier Name                 Line    Size            Class        Type
 ---------------                 ----    ----            -----        ----

atoi                             2344                    Extern       Function returning long int
CABS_T                           1507    16 bytes                     Structure tag
 x                               1507    1 quadword                    Member (offset = 0), double
 y                               1507    1 quadword                    Member (offset = 8 bytes), double
clock_t                          2539    1 longword                   Typedef:  long int
debug                            2999    1 longword      Extern       Long int
dev_t                            2279    1 longword                   Typedef:  pointer to char
dsc$descriptor_s                 465     8 bytes                      Structure tag
 dsc$w_length                    467     1 word                        Member (offset = 0), unsigned short int
 dsc$b_dtype                     470     1 byte                        Member (offset = 2 bytes), unsigned char
 dsc$b_class                     471     1 byte                        Member (offset = 3 bytes), unsigned char
 dsc$a_pointer                   472     1 longword                    Member (offset = 4 bytes), pointer to char
exit                             2370                    Extern       Void function
fgets                            2488                    Extern       Function returning pointer to char
FILE                             2436    1 longword                   Typedef:  pointer to struct _iobuf
fopen                            2477                    Extern       Function returning pointer to pointer to struct _iobuf
host_name                        3036    20 bytes        Extern       Array [20] of char
ino_t                            2278    1 word                       Typedef:  unsigned short int
jmp_buf                          1757    15 longwords                 Typedef:  array [15] of long int
off_t                            2277    1 longword                   Typedef:  unsigned long int
port                             3023    68 bytes                     Structure tag
 portname                        3024    20 bytes                      Member (offset = 0), array [20] of char
 modemname                       3025    20 bytes                      Member (offset = 20 bytes), array [20] of char
 devname                         3026    20 bytes                      Member (offset = 40 bytes), array [20] of char
 baud                            3027    1 longword                    Member (offset = 60 bytes), long int
 chain                           3028    1 longword                    Member (offset = 64 bytes), pointer to struct port
printf                           2507                    Extern       Function returning long int
sigstack                         1823    8 bytes                      Structure tag
 ss_sp                           1825    1 longword                    Member (offset = 0), pointer to char
 ss_onstack                      1826    1 longword                    Member (offset = 4 bytes), long int
sigvec                           1807    12 bytes                     Structure tag
 sv_handler                      1809    1 longword                    Member (offset = 0), pointer to function returning long int
 sv_mask                         1810    1 longword                    Member (offset = 4 bytes), long int
 sv_onstack                      1811    1 longword                    Member (offset = 8 bytes), long int
Spool                            3033    1 longword      Extern       Pointer to char
sprintf                          2508                    Extern       Function returning long int
sscanf                           2502                    Extern       Function returning long int
strcmp                           2843                    Extern       Function returning long int
strcpy                           2835                    Extern       Function returning pointer to char
strlen                           2863                    Extern       Function returning long int
tbuffer                          2550    16 bytes                     Structure tag
 proc_user_time                  2552    1 longword                    Member (offset = 0), long int
 proc_system_time                2552    1 longword                    Member (offset = 4 bytes), long int
 child_user_time                 2553    1 longword                    Member (offset = 8 bytes), long int
 child_system_time               2553    1 longword                    Member (offset = 12 bytes), long int

UUXQT                                                           12-NOV-1988 16:25:37    VAX C      V2.3-024                 Page 8
V1.0                                                            12-NOV-1988 16:25:17    DUA1:[VMSNET.DEVEL.GNUUCP.SRC]UUXQT.C;35 (1)

 Identifier Name                 Line    Size            Class        Type
 ---------------                 ----    ----            -----        ----

tbuffer_t                        2556    16 bytes                     Typedef:  struct tbuffer
timeb                            2572    10 bytes                     Structure tag
 time                            2574    1 longword                    Member (offset = 0), long int
 millitm                         2575    1 word                        Member (offset = 4 bytes), unsigned short int
 timezone                        2576    1 word                        Member (offset = 6 bytes), short int
 dstflag                         2577    1 word                        Member (offset = 8 bytes), short int
timeb_t                          2580    10 bytes                     Typedef:  struct timeb
time_t                           2545    1 longword                   Typedef:  long int
tm                               2584    36 bytes                     Structure tag
 tm_sec                          2586    1 longword                    Member (offset = 0), long int
 tm_min                          2586    1 longword                    Member (offset = 4 bytes), long int
 tm_hour                         2586    1 longword                    Member (offset = 8 bytes), long int
 tm_mday                         2587    1 longword                    Member (offset = 12 bytes), long int
 tm_mon                          2587    1 longword                    Member (offset = 16 bytes), long int
 tm_year                         2587    1 longword                    Member (offset = 20 bytes), long int
 tm_wday                         2588    1 longword                    Member (offset = 24 bytes), long int
 tm_yday                         2588    1 longword                    Member (offset = 28 bytes), long int
 tm_isdst                        2588    1 longword                    Member (offset = 32 bytes), long int
tm_t                             2591    36 bytes                     Typedef:  struct tm
who                              3042    255 bytes       Extern       Array [255] of char
_iobuf                           2416    14 bytes                     Structure tag
 _cnt                            2418    1 longword                    Member (offset = 0), long int
 _ptr                            2419    1 longword                    Member (offset = 4 bytes), pointer to char
 _base                           2420    1 longword                    Member (offset = 8 bytes), pointer to char
 _flag                           2421    1 byte                        Member (offset = 12 bytes), char
 _file                           2432    1 byte                        Member (offset = 13 bytes), char
 
 

Function "main" defined at line 3050
------------------------------------

 Identifier Name                 Line    Size            Class        Type
 ---------------                 ----    ----            -----        ----

addressee                        3055    255 bytes       Auto         Array [255] of char
argc                             3051    1 longword                   Parameter # 1, long int
argv                             3052    1 longword                   Parameter # 2, pointer to pointer to char
badx                             3061    1 longword      Register     Long int
cfd                              3060    1 longword      Not Alloc.   Pointer to pointer to struct _iobuf
chdir                            3114                    Extern       Function returning long int
child_log_desc                   3073    8 bytes         Auto         Initialized struct dsc$descriptor_s
child_status                     3071    1 longword      Auto         Long int
chkfile                          3056    255 bytes       Auto         Array [255] of char
close                            3201                    Extern       Function returning long int
command                          3055    255 bytes       Auto         Array [255] of char
cuserid                          3110                    Extern       Function returning long int
dclcmd                           3068    2048 bytes      Auto         Array [2048] of char
dclcmd_desc                      3069    8 bytes         Auto         Initialized struct dsc$descriptor_s
delete                           3172                    Extern       Function returning long int
fd                               3060    1 longword      Register     Pointer to pointer to struct _iobuf
file                             3057    255 bytes       Auto         Array [255] of char
get_lock                         3090                    Extern       Function returning long int
i                                3054    1 longword      Register     Long int

UUXQT                                                           12-NOV-1988 16:25:37    VAX C      V2.3-024                 Page 9
V1.0                                                            12-NOV-1988 16:25:17    DUA1:[VMSNET.DEVEL.GNUUCP.SRC]UUXQT.C;35 (1)

 Identifier Name                 Line    Size            Class        Type
 ---------------                 ----    ----            -----        ----

input                            3055    255 bytes       Auto         Array [255] of char
LIB$SPAWN                        3145                    Extern       Function returning long int
line                             3055    132 bytes       Auto         Array [132] of char
logit                            3105                    Extern       Function returning long int
mbchan                           3064    1 word          Extern       Short int
mbname                           3066    31 bytes        Auto         Array [31] of char
mbname_desc                      3067    8 bytes         Auto         Initialized struct dsc$descriptor_s
munge_filename                   3194                    Extern       Function returning long int
output                           3055    255 bytes       Auto         Array [255] of char
privmask                         3065    2 longwords     Auto         Array [2] of long int
read_params                      3112                    Extern       Function returning long int
rmail_addrfix                    3219                    Extern       Function returning long int
rquser                           3056    255 bytes       Auto         Array [255] of char
rsite                            3056    31 bytes        Auto         Array [31] of char
ruser                            3056    31 bytes        Auto         Array [31] of char
spawn_flags                      3070    1 longword      Auto         Long int
status                           3061    1 longword      Not Alloc.   Long int
SYS$CREMBX                       3134                    Extern       Function returning long int
SYS$SETPRV                       3157                    Extern       Function returning long int
work_done                        3291                    Extern       Function returning long int
work_next                        3059                    Extern       Function returning pointer to char
work_scan                        3121                    Extern       Function returning long int
wrtmbx                           3243                    Extern       Function returning long int
xfile                            3058    1 longword      Auto         Pointer to char
 
 

Function "invoke" defined at line 3299
--------------------------------------

 Identifier Name                 Line    Size            Class        Type
 ---------------                 ----    ----            -----        ----

addressee                        3300    1 longword                   Parameter # 2, pointer to char
close                            3327                    Extern       Function returning long int
command                          3300    1 longword                   Parameter # 1, pointer to char
execl                            3337                    Extern       Function returning long int
fdi                              3302    1 longword      Not Alloc.   Long int
fdo                              3302    1 longword      Not Alloc.   Long int
i                                3302    1 longword      Register     Long int
input                            3300    1 longword                   Parameter # 3, pointer to char
open                             3328                    Extern       Function returning long int
output                           3300    1 longword                   Parameter # 4, pointer to char
pid                              3302    1 longword      Register     Long int
status                           3304    1 longword      Auto         Long int
tmp                              3303    255 bytes       Auto         Array [255] of char
vfork                            3306                    Extern       Function returning long int
wait                             3308                    Extern       Function returning long int
 
 

UUXQT                                                           12-NOV-1988 16:25:37    VAX C      V2.3-024                 Page 10
V1.0                                                            12-NOV-1988 16:25:17    DUA1:[VMSNET.DEVEL.GNUUCP.SRC]UUXQT.C;35 (1)


Psect Synopsis
--------------

 Psect Name                     Allocation  Attributes
 ----------                     ----------  ----------

$CODE                           2037 bytes  Position-independent, relocatable, shareable, executable, readable
_CTYPE_                         0           Position-independent, overlay, relocatable, global, shareable, readable
ERRNO                           4 bytes     Position-independent, overlay, relocatable, global, readable, writeable
VAXC$ERRNO                      4 bytes     Position-independent, overlay, relocatable, global, readable, writeable
STDIN                           4 bytes     Position-independent, overlay, relocatable, global, readable, writeable
STDOUT                          4 bytes     Position-independent, overlay, relocatable, global, readable, writeable
STDERR                          4 bytes     Position-independent, overlay, relocatable, global, readable, writeable
DEBUG                           4 bytes     Position-independent, overlay, relocatable, global, shareable, readable, writeable
PROGNAME                        20 bytes    Position-independent, overlay, relocatable, global, shareable, readable, writeable
SPOOL                           4 bytes     Position-independent, overlay, relocatable, global, shareable, readable, writeable
CONTROL                         4 bytes     Position-independent, overlay, relocatable, global, shareable, readable, writeable
MYNAME                          20 bytes    Position-independent, overlay, relocatable, global, shareable, readable, writeable
HOST_NAME                       20 bytes    Position-independent, overlay, relocatable, global, shareable, readable, writeable
OURPID                          4 bytes     Position-independent, overlay, relocatable, global, shareable, readable, writeable
SYSFILE                         4 bytes     Position-independent, overlay, relocatable, global, shareable, readable, writeable
USERFILE                        4 bytes     Position-independent, overlay, relocatable, global, shareable, readable, writeable
PUBDIR                          4 bytes     Position-independent, overlay, relocatable, global, shareable, readable, writeable
PORTS                           4 bytes     Position-independent, overlay, relocatable, global, shareable, readable, writeable
WHO                             255 bytes   Position-independent, overlay, relocatable, global, shareable, readable, writeable
LOGFD                           4 bytes     Position-independent, overlay, relocatable, global, shareable, readable, writeable
MBCHAN                          2 bytes     Position-independent, overlay, relocatable, global, shareable, readable, writeable
$CHAR_STRING_CONSTANTS          808 bytes   Position-independent, relocatable, readable, writeable
 
 

Function Definition Map
-----------------------

 Line   Name
 ----   ----

3050    main
3299    invoke
 
 
Command Line
------------
 
CC/LIST=[-.BLD]/OBJE=[-.BLD]/SHOW=(BRIEF,SOURCE,SYMBOLS)/DEFINE=LOG UUXQT

