ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/gen/xform.c
(Generate patch)

Comparing ray/src/gen/xform.c (file contents):
Revision 2.12 by greg, Wed Jun 12 11:55:27 1996 UTC vs.
Revision 2.13 by greg, Tue Jun 18 21:12:51 1996 UTC

# Line 31 | Line 31 | int  reverse;                          /* boolean true if scene mirrored */
31  
32   int  invert = 0;                        /* boolean true to invert surfaces */
33  
34 < int  expand = 0;                        /* boolean true to expand commands */
34 > int  expand = 1;                        /* boolean true to expand commands */
35  
36   char  *newmod = NULL;                   /* new modifier for surfaces */
37  
# Line 81 | Line 81 | char  *argv[];
81                                          break;
82                                  idprefix = argv[++a];
83                                  continue;
84 +                        case 'c':
85 +                                if (argv[a][2])
86 +                                        break;
87 +                                expand = 0;
88 +                                continue;
89                          case 'e':
90                                  if (argv[a][2])
91                                          break;
# Line 227 | Line 232 | FILE  *fin;
232          } else {
233                  printf("\n%s", buf);
234                  if (xac > 1) {
235 <                        printf(" | %s -e", xav[0]);
235 >                        printf(" | %s", xav[0]);
236                          for (i = 1; i < xac; i++)
237                                  printf(" %s", xav[i]);
238                  }
# Line 764 | Line 769 | char  *fname;
769          extern FILE  *tmpfile();
770          extern char  *getlibpath(), *getpath();
771          static char  origdir[MAXPATH];
772 <        static char  curdir[MAXPATH];
773 <        char  newdir[MAXPATH], *cp;
772 >        static char  curfn[MAXPATH];
773 >        static int  diffdir;
774 >        register char  *fpath;
775  
776          if (fname == NULL) {                    /* standard input */
777                  if (mainfp == NULL) {
# Line 789 | Line 795 | char  *fname;
795                  rewind(mainfp);                 /* rewind copy */
796                  return;
797          }
792                                                /* get full path */
793        if ((cp = getpath(fname, getlibpath(), R_OK)) == NULL) {
794                fprintf(stderr, "%s: cannot find file \"%s\"\n",
795                                progname, fname);
796                exit(1);
797        }
798        if (cp[0] == '.' && ISDIRSEP(cp[1]))    /* remove leading ./ */
799                cp += 2;
798          if (mainfp == NULL) {                   /* first call, initialize */
799                  getwd(origdir);
800 <                strcpy(curdir, origdir);
803 <        } else if (!strcmp(cp, mainfn)) {       /* just need to rewind? */
800 >        } else if (!strcmp(fname, curfn)) {     /* just need to rewind? */
801                  rewind(mainfp);
802                  return;
803 <        } else                                  /* else close old stream */
803 >        } else {                                /* else close old stream */
804                  fclose(mainfp);
805 +                if (diffdir) {
806 +                        chdir(origdir);
807 +                        diffdir = 0;
808 +                }
809 +        }
810 +        strcpy(curfn, fname);                   /* remember file name */
811 +                                                /* get full path */
812 +        if ((fpath = getpath(fname, getlibpath(), R_OK)) == NULL) {
813 +                fprintf(stderr, "%s: cannot find file \"%s\"\n",
814 +                                progname, fname);
815 +                exit(1);
816 +        }
817 +        if (fpath[0] == '.' && ISDIRSEP(fpath[1]))      /* remove leading ./ */
818 +                fpath += 2;
819                                                  /* record path name */
820 <        strcpy(mainfn, cp);
821 <        if (expand) {                           /* get directory component */
822 <                if (ISDIRSEP(cp[0]))
823 <                        strcpy(newdir, cp);
824 <                else
825 <                        sprintf(newdir, "%s%c%s", origdir, DIRSEP, cp);
826 <                for (cp = newdir+strlen(newdir); !ISDIRSEP(cp[-1]); cp--)
827 <                        ;
820 >        strcpy(mainfn, fpath);
821 >        if (expand) {                           /* change to local directory */
822 >                register char  *cp = fpath + strlen(fpath);     /* get dir. */
823 >                while (cp > fpath) {
824 >                        cp--;
825 >                        if (ISDIRSEP(*cp)) {
826 >                                if (cp == fpath)
827 >                                        cp++;   /* root special case */
828 >                                break;
829 >                        }
830 >                }
831                  *cp = '\0';
832 <                if (strcmp(newdir, curdir)) {   /* change to new directory? */
833 <                        if (chdir(newdir) < 0) {
832 >                if (fpath[0]) {                 /* change to new directory? */
833 >                        if (chdir(fpath) < 0) {
834                                  fprintf(stderr,
835                                  "%s: cannot change directory to \"%s\"\n",
836 <                                                progname, newdir);
836 >                                                progname, fpath);
837                                  exit(1);
838                          }
839 <                        strcpy(curdir, newdir);
839 >                        diffdir++;
840                  }
841                                                  /* get final path component */
842 <                for (cp = fname+strlen(fname);
843 <                                cp > fname && !ISDIRSEP(cp[-1]); cp--)
842 >                for (fpath = fname+strlen(fname);
843 >                                fpath > fname && !ISDIRSEP(fpath[-1]); fpath--)
844                          ;
845          }
846                                                  /* open the file */
847 <        if ((mainfp = fopen(cp, "r")) == NULL) {
847 >        if ((mainfp = fopen(fpath, "r")) == NULL) {
848                  fprintf(stderr, "%s: cannot open file \"%s\"\n",
849                                  progname, mainfn);
850                  exit(1);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines