emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to emacs/src/doc.c [emacs-unicode-2]


From: Miles Bader
Subject: [Emacs-diffs] Changes to emacs/src/doc.c [emacs-unicode-2]
Date: Thu, 11 Nov 2004 22:18:51 -0500

Index: emacs/src/doc.c
diff -c emacs/src/doc.c:1.101.2.7 emacs/src/doc.c:1.101.2.8
*** emacs/src/doc.c:1.101.2.7   Fri Oct 22 10:13:37 2004
--- emacs/src/doc.c     Fri Nov 12 02:52:59 2004
***************
*** 24,29 ****
--- 24,30 ----
  
  #include <sys/types.h>
  #include <sys/file.h> /* Must be after sys/types.h for USG and BSD4_1*/
+ #include <ctype.h>
  
  #ifdef HAVE_FCNTL_H
  #include <fcntl.h>
***************
*** 51,56 ****
--- 52,60 ----
  
  Lisp_Object Qfunction_documentation;
  
+ /* A list of files used to build this Emacs binary.  */
+ static Lisp_Object Vbuild_files;
+ 
  extern Lisp_Object Voverriding_local_map;
  
  /* For VMS versions with limited file name syntax,
***************
*** 581,586 ****
--- 585,591 ----
    register char *p, *end;
    Lisp_Object sym;
    char *name;
+   int skip_file = 0;
  
    CHECK_STRING (filename);
  
***************
*** 618,623 ****
--- 623,676 ----
  #endif /* VMS4_4 */
  #endif /* VMS */
  
+   /* Vbuild_files is nil when temacs is run, and non-nil after that.  */
+   if (NILP (Vbuild_files))
+   {
+     size_t cp_size = 0;
+     size_t to_read;
+     int nr_read;
+     char *cp = NULL;
+     char *beg, *end;
+ 
+     fd = emacs_open ("buildobj.lst", O_RDONLY, 0);
+     if (fd < 0)
+       report_file_error ("Opening file buildobj.lst", Qnil);
+ 
+     filled = 0;
+     for (;;)
+       {
+         cp_size += 1024;
+         to_read = cp_size - 1 - filled;
+         cp = xrealloc (cp, cp_size);
+         nr_read = emacs_read (fd, &cp[filled], to_read);
+         filled += nr_read;
+         if (nr_read < to_read)
+           break;
+       }
+ 
+     emacs_close (fd);
+     cp[filled] = 0;
+ 
+     for (beg = cp; *beg; beg = end)
+       {
+         int len;
+ 
+         while (*beg && isspace (*beg)) ++beg;
+ 
+         for (end = beg; *end && ! isspace (*end); ++end)
+           if (*end == '/') beg = end+1;  /* skip directory part  */
+ 
+         len = end - beg;
+         if (len > 4 && end[-4] == '.' && end[-3] == 'o')
+           len -= 2;  /* Just take .o if it ends in .obj  */
+ 
+         if (len > 0)
+           Vbuild_files = Fcons (make_string (beg, len), Vbuild_files);
+       }
+ 
+     xfree (cp);
+   }
+ 
    fd = emacs_open (name, O_RDONLY, 0);
    if (fd < 0)
      report_file_error ("Opening doc string file",
***************
*** 640,649 ****
        if (p != end)
        {
          end = (char *) index (p, '\n');
          sym = oblookup (Vobarray, p + 2,
                          multibyte_chars_in_text (p + 2, end - p - 2),
                          end - p - 2);
!         if (SYMBOLP (sym))
            {
              /* Attach a docstring to a variable?  */
              if (p[1] == 'V')
--- 693,720 ----
        if (p != end)
        {
          end = (char *) index (p, '\n');
+ 
+           /* See if this is a file name, and if it is a file in build-files.  
*/
+           if (p[1] == 'S' && end - p > 4 && end[-2] == '.'
+               && (end[-1] == 'o' || end[-1] == 'c'))
+             {
+               int len = end - p - 2;
+               char *fromfile = alloca (len + 1);
+               strncpy (fromfile, &p[2], len);
+               fromfile[len] = 0;
+               if (fromfile[len-1] == 'c')
+                 fromfile[len-1] = 'o';
+ 
+               if (EQ (Fmember (build_string (fromfile), Vbuild_files), Qnil))
+                 skip_file = 1;
+               else
+                 skip_file = 0;
+             }
+ 
          sym = oblookup (Vobarray, p + 2,
                          multibyte_chars_in_text (p + 2, end - p - 2),
                          end - p - 2);
!         if (! skip_file && SYMBOLP (sym))
            {
              /* Attach a docstring to a variable?  */
              if (p[1] == 'V')
***************
*** 756,762 ****
        }
        else if (strp[0] == '\\' && strp[1] == '[')
        {
-         Lisp_Object firstkey;
          int start_idx;
  
          changed = 1;
--- 827,832 ----
***************
*** 919,924 ****
--- 989,998 ----
               doc: /* Name of file containing documentation strings of 
built-in symbols.  */);
    Vdoc_file_name = Qnil;
  
+   DEFVAR_LISP ("build-files", &Vbuild_files,
+                doc: /* A list of files used to build this Emacs binary.  */);
+   Vbuild_files = Qnil;
+ 
    defsubr (&Sdocumentation);
    defsubr (&Sdocumentation_property);
    defsubr (&Ssnarf_documentation);




reply via email to

[Prev in Thread] Current Thread [Next in Thread]