configure.in -- decide whether to configure gdb.hp; configure -- regenerated.
[deliverable/binutils-gdb.git] / gdb / f-valprint.c
index 5d4c1eb93ee4a8660694815d38f062ada7e276ee..23331b10d348a84000833320e427410019ebd8f1 100644 (file)
@@ -1,5 +1,5 @@
 /* Support for printing Fortran values for GDB, the GNU debugger.
-   Copyright 1993, 1994 Free Software Foundation, Inc.
+   Copyright 1993, 1994, 1995 Free Software Foundation, Inc.
    Contributed by Motorola.  Adapted from the C definitions by Farooq Butt
    (fmbutt@engage.sps.mot.com), additionally worked over by Stan Shebs.
 
@@ -17,10 +17,10 @@ GNU General Public License for more details.
 
 You should have received a copy of the GNU General Public License
 along with this program; if not, write to the Free Software
-Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 #include "defs.h"
-#include <string.h>
+#include "gdb_string.h"
 #include "symtab.h"
 #include "gdbtypes.h"
 #include "expression.h"
@@ -33,11 +33,21 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #include "gdbcore.h"
 #include "command.h"
 
-extern struct obstack dont_print_obstack;
-
-extern unsigned int print_max; /* No of array elements to print */ 
-
-extern int calc_f77_array_dims PARAMS ((struct type *));
+#if 0
+static int there_is_a_visible_common_named PARAMS ((char *));
+#endif
+
+static void info_common_command PARAMS ((char *, int));
+static void list_all_visible_commons PARAMS ((char *));
+static void f77_print_array PARAMS ((struct type *, char *, CORE_ADDR,
+                                    GDB_FILE *, int, int, int,
+                                    enum val_prettyprint));
+static void f77_print_array_1 PARAMS ((int, int, struct type *, char *,
+                                      CORE_ADDR, GDB_FILE *, int, int, int,
+                                      enum val_prettyprint));
+static void f77_create_arrayprint_offset_tbl PARAMS ((struct type *,
+                                                     GDB_FILE *));
+static void f77_get_dynamic_length_of_aggregate PARAMS ((struct type *));
 
 int f77_array_offset_tbl[MAX_FORTRAN_DIMS+1][2];
 
@@ -180,7 +190,7 @@ f77_get_dynamic_upperbound (type, upper_bound)
 
 /* Obtain F77 adjustable array dimensions */ 
 
-void
+static void
 f77_get_dynamic_length_of_aggregate (type)
      struct type *type;
 {
@@ -213,16 +223,16 @@ f77_get_dynamic_length_of_aggregate (type)
   /* Patch in a valid length value. */ 
   
   TYPE_LENGTH (type) =
-    (upper_bound - lower_bound + 1) * TYPE_LENGTH (TYPE_TARGET_TYPE (type));
+    (upper_bound - lower_bound + 1) * TYPE_LENGTH (check_typedef (TYPE_TARGET_TYPE (type)));
 }       
 
 /* Function that sets up the array offset,size table for the array 
    type "type".  */ 
 
-void 
+static void 
 f77_create_arrayprint_offset_tbl (type, stream)
      struct type *type;
-     FILE *stream;
+     GDB_FILE *stream;
 {
   struct type *tmp_type;
   int eltlen;
@@ -268,15 +278,15 @@ f77_create_arrayprint_offset_tbl (type, stream)
 /* Actual function which prints out F77 arrays, Valaddr == address in 
    the superior.  Address == the address in the inferior.  */
 
-void 
+static void 
 f77_print_array_1 (nss, ndimensions, type, valaddr, address, 
                   stream, format, deref_ref, recurse, pretty)
      int nss;
      int ndimensions; 
-     char *valaddr;
      struct type *type;
+     char *valaddr;
      CORE_ADDR address;
-     FILE *stream;
+     GDB_FILE *stream;
      int format;
      int deref_ref;
      int recurse;
@@ -292,7 +302,7 @@ f77_print_array_1 (nss, ndimensions, type, valaddr, address,
          f77_print_array_1 (nss + 1, ndimensions, TYPE_TARGET_TYPE (type),
                            valaddr + i * F77_DIM_OFFSET (nss),
                            address + i * F77_DIM_OFFSET (nss), 
-                           stream, format, deref_ref, recurse, pretty, i);
+                           stream, format, deref_ref, recurse, pretty);
          fprintf_filtered (stream, ") ");
        }
     }
@@ -302,6 +312,7 @@ f77_print_array_1 (nss, ndimensions, type, valaddr, address,
        {
          val_print (TYPE_TARGET_TYPE (type),
                     valaddr + i * F77_DIM_OFFSET (ndimensions),
+                     0,
                     address + i * F77_DIM_OFFSET (ndimensions),
                     stream, format, deref_ref, recurse, pretty); 
 
@@ -317,13 +328,13 @@ f77_print_array_1 (nss, ndimensions, type, valaddr, address,
 /* This function gets called to print an F77 array, we set up some 
    stuff and then immediately call f77_print_array_1() */
 
-void 
+static void 
 f77_print_array (type, valaddr, address, stream, format, deref_ref, recurse, 
                 pretty)
      struct type *type;
      char *valaddr;
      CORE_ADDR address;
-     FILE *stream;
+     GDB_FILE *stream;
      int format;
      int deref_ref;
      int recurse;
@@ -362,30 +373,29 @@ f77_print_array (type, valaddr, address, stream, format, deref_ref, recurse,
    The PRETTY parameter controls prettyprinting.  */
 
 int
-f_val_print (type, valaddr, address, stream, format, deref_ref, recurse,
+f_val_print (type, valaddr, embedded_offset, address, stream, format, deref_ref, recurse,
             pretty)
      struct type *type;
      char *valaddr;
+     int embedded_offset;
      CORE_ADDR address;
-     FILE *stream;
+     GDB_FILE *stream;
      int format;
      int deref_ref;
      int recurse;
      enum val_prettyprint pretty;
 {
   register unsigned int i = 0;         /* Number of characters printed */
-  unsigned len;
   struct type *elttype;
   LONGEST val;
-  char *localstr;
-  char *straddr;
   CORE_ADDR addr;
   
+  CHECK_TYPEDEF (type);
   switch (TYPE_CODE (type))
     {
     case TYPE_CODE_STRING: 
       f77_get_dynamic_length_of_aggregate (type);
-      LA_PRINT_STRING (stream, valaddr, TYPE_LENGTH (type), 0);
+      LA_PRINT_STRING (stream, valaddr, TYPE_LENGTH (type), 1, 0);
       break;
       
     case TYPE_CODE_ARRAY:
@@ -408,7 +418,7 @@ f_val_print (type, valaddr, address, stream, format, deref_ref, recurse,
       else
        {
          addr = unpack_pointer (type, valaddr);
-         elttype = TYPE_TARGET_TYPE (type);
+         elttype = check_typedef (TYPE_TARGET_TYPE (type));
          
          if (TYPE_CODE (elttype) == TYPE_CODE_FUNC)
            {
@@ -427,7 +437,7 @@ f_val_print (type, valaddr, address, stream, format, deref_ref, recurse,
              && TYPE_CODE (elttype) == TYPE_CODE_INT
              && (format == 0 || format == 's')
              && addr != 0)
-           i = val_print_string (addr, 0, stream);
+           i = val_print_string (addr, -1, TYPE_LENGTH (elttype), stream);
          
          /* Return number of characters printed, plus one for the
             terminating null if we have "reached the end".  */
@@ -527,7 +537,7 @@ f_val_print (type, valaddr, address, stream, format, deref_ref, recurse,
              {
                /* Bash the type code temporarily.  */
                TYPE_CODE (type) = TYPE_CODE_INT;
-               f_val_print (type, valaddr, address, stream, format, 
+               f_val_print (type, valaddr, 0, address, stream, format, 
                             deref_ref, recurse, pretty); 
                /* Restore the type code so later uses work as intended. */
                TYPE_CODE (type) = TYPE_CODE_BOOL; 
@@ -561,11 +571,11 @@ f_val_print (type, valaddr, address, stream, format, deref_ref, recurse,
     default:
       error ("Invalid F77 type code %d in symbol table.", TYPE_CODE (type));
     }
-  fflush (stream);
+  gdb_flush (stream);
   return 0;
 }
 
-void
+static void
 list_all_visible_commons (funname)
      char *funname;
 {
@@ -684,7 +694,8 @@ info_common_command (comname, from_tty)
 /* This function is used to determine whether there is a
    F77 common block visible at the current scope called 'comname'. */ 
 
-int
+#if 0
+static int
 there_is_a_visible_common_named (comname)
      char *comname;
 {
@@ -743,10 +754,14 @@ there_is_a_visible_common_named (comname)
   
   return (the_common ? 1 : 0);
 }
+#endif
 
 void
 _initialize_f_valprint ()
 {
   add_info ("common", info_common_command,
            "Print out the values contained in a Fortran COMMON block.");
+  if (xdb_commands)
+    add_com("lc", class_info, info_common_command,
+           "Print out the values contained in a Fortran COMMON block.");
 }
This page took 0.027362 seconds and 4 git commands to generate.