1: #include "defs.h"
   2: #define BS 8
   3: #define MAXARGS 300
   4: short buf[BS];
   5: /*
   6:  *	Check for possible program to run under alternate runtime system
   7:  *	If it checks out, start the rts and pass file and args
   8:  *	Art Wetzel 3/13/80
   9:  */
  10: compat(file, argv, envp) char *file, *argv[], *envp[]; {
  11:     register int fd;
  12:     register char *rts;
  13:     register char **nargv;
  14:     char    *nargs[MAXARGS];
  15:     /* alternate rts images must be readable */
  16:     /* if not just go back and let rest of shell worry about it */
  17:     if((fd = open(file,0))<0)
  18:         return(0);
  19:     /* read first BS pdp-11 words */
  20:     if(read(fd,buf,sizeof buf) != sizeof buf) {
  21:         close(fd);
  22:         /* if can't, go back as it may be a short shell file */
  23:         return(0);
  24:     }
  25:     close(fd);
  26:     /* check type of image and set up run time system name */
  27:     if(buf[0]==0407 || buf[0]==0410 || buf[0]==0411 || buf[0]==0405) {
  28:         /* looks like UNIX a.out file */
  29:         /* RTS or default rts */
  30:         if((rts = rtsnod.namval) == 0)
  31:             rts = defrts;
  32:         /* if header unused is set to 1 force version 6 */
  33:         /* this is not a real difference between v6 and v7 a.outs */
  34:         /* rather, version 6 a.outs were patched to be identifiable */
  35:         if(buf[6] == 1)
  36:             rts = "/usr/bin/v6run";
  37:     } else if(buf[6] == 0) {
  38:         /* it looks like almost all RT-11 save images have 0 here */
  39:         rts = "/usr/bin/rtrun";
  40:     } else {
  41:         /* was not a recognizable file type */
  42:         return(0);
  43:     }
  44:     /* must make a new argv list with runtime system prefix */
  45:     nargv = &nargs[0];
  46:     *nargv++ = rts;
  47:     /* have to pass full file name to rts */
  48:     *nargv++ = file;
  49:     argv++;
  50:     while(*argv && nargv < &nargs[MAXARGS-1])
  51:         *nargv++ = *argv++;
  52:     /* force in final null */
  53:     *nargv++ = (char *)0;
  54:     /* try to start rts */
  55:     execve(nargs[0], nargs, envp);
  56:     /* if that failed, report no runtime system */
  57:     failed(nargs[0], norts);
  58: }

Defined functions

compat defined in line 10; never used

Defined variables

buf defined in line 4; used 9 times

Defined macros

BS defined in line 2; used 1 times
  • in line 4
MAXARGS defined in line 3; used 2 times
Last modified: 1982-06-09
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 686
Valid CSS Valid XHTML 1.0 Strict