2004-10-11

This patch is not submitted.  Many of these functions should be passing
a frame around rather than calling get_selected_frame, but at least it
is an improvement over deprecated_selected_frame.

Index: gdb-6.3/gdb/breakpoint.c
===================================================================
--- gdb-6.3.orig/gdb/breakpoint.c	2004-10-08 13:30:46.000000000 -0400
+++ gdb-6.3/gdb/breakpoint.c	2004-11-09 22:55:11.231620957 -0500
@@ -922,7 +922,7 @@ insert_bp_location (struct bp_location *
       /* FIXME drow/2003-09-09: It would be nice if evaluate_expression
 	 took a frame parameter, so that we didn't have to change the
 	 selected frame.  */
-      saved_frame_id = get_frame_id (deprecated_selected_frame);
+      saved_frame_id = get_frame_id (get_selected_frame ());
 
       /* Determine if the watchpoint is within scope.  */
       if (bpt->owner->exp_valid_block == NULL)
@@ -5464,14 +5464,9 @@ break_at_finish_at_depth_command_1 (char
 
       if (default_breakpoint_valid)
 	{
-	  if (deprecated_selected_frame)
-	    {
-	      selected_pc = get_frame_pc (deprecated_selected_frame);
-	      if (arg)
-		if_arg = 1;
-	    }
-	  else
-	    error ("No selected frame.");
+	  selected_pc = get_frame_pc (get_selected_frame ());
+	  if (arg)
+	    if_arg = 1;
 	}
       else
 	error ("No default breakpoint address now.");
@@ -5542,15 +5537,10 @@ break_at_finish_command_1 (char *arg, in
     {
       if (default_breakpoint_valid)
 	{
-	  if (deprecated_selected_frame)
-	    {
-	      addr_string = xstrprintf ("*0x%s",
-					paddr_nz (get_frame_pc (deprecated_selected_frame)));
-	      if (arg)
-		if_arg = 1;
-	    }
-	  else
-	    error ("No selected frame.");
+	  addr_string = xstrprintf ("*0x%s",
+				    paddr_nz (get_frame_pc (get_selected_frame ())));
+	  if (arg)
+	    if_arg = 1;
 	}
       else
 	error ("No default breakpoint address now.");
@@ -6082,7 +6072,7 @@ until_break_command (char *arg, int from
 {
   struct symtabs_and_lines sals;
   struct symtab_and_line sal;
-  struct frame_info *prev_frame = get_prev_frame (deprecated_selected_frame);
+  struct frame_info *prev_frame = get_prev_frame (get_selected_frame ());
   struct breakpoint *breakpoint;
   struct cleanup *old_chain;
   struct continuation_arg *arg1;
@@ -6119,7 +6109,7 @@ until_break_command (char *arg, int from
     /* Otherwise, specify the current frame, because we want to stop only
        at the very same frame.  */
     breakpoint = set_momentary_breakpoint (sal,
-					   get_frame_id (deprecated_selected_frame),
+					   get_frame_id (get_selected_frame ()),
 					   bp_until);
 
   if (!target_can_async_p ())
Index: gdb-6.3/gdb/cli/cli-cmds.c
===================================================================
--- gdb-6.3.orig/gdb/cli/cli-cmds.c	2004-09-11 06:24:53.000000000 -0400
+++ gdb-6.3/gdb/cli/cli-cmds.c	2004-11-09 22:51:07.323246218 -0500
@@ -845,10 +845,7 @@ disassemble_command (char *arg, int from
   name = NULL;
   if (!arg)
     {
-      if (!deprecated_selected_frame)
-	error ("No frame selected.\n");
-
-      pc = get_frame_pc (deprecated_selected_frame);
+      pc = get_frame_pc (get_selected_frame ());
       if (find_pc_partial_function (pc, &name, &low, &high) == 0)
 	error ("No function contains program counter for selected frame.\n");
 #if defined(TUI)
Index: gdb-6.3/gdb/f-valprint.c
===================================================================
--- gdb-6.3.orig/gdb/f-valprint.c	2003-10-14 02:51:14.000000000 -0400
+++ gdb-6.3/gdb/f-valprint.c	2004-11-09 22:51:07.326245632 -0500
@@ -76,7 +76,7 @@ f77_get_dynamic_lowerbound (struct type 
   switch (TYPE_ARRAY_LOWER_BOUND_TYPE (type))
     {
     case BOUND_BY_VALUE_ON_STACK:
-      current_frame_addr = get_frame_base (deprecated_selected_frame);
+      current_frame_addr = get_frame_base (get_selected_frame ());
       if (current_frame_addr > 0)
 	{
 	  *lower_bound =
@@ -100,7 +100,7 @@ f77_get_dynamic_lowerbound (struct type 
       break;
 
     case BOUND_BY_REF_ON_STACK:
-      current_frame_addr = get_frame_base (deprecated_selected_frame);
+      current_frame_addr = get_frame_base (get_selected_frame ());
       if (current_frame_addr > 0)
 	{
 	  ptr_to_lower_bound =
@@ -134,7 +134,7 @@ f77_get_dynamic_upperbound (struct type 
   switch (TYPE_ARRAY_UPPER_BOUND_TYPE (type))
     {
     case BOUND_BY_VALUE_ON_STACK:
-      current_frame_addr = get_frame_base (deprecated_selected_frame);
+      current_frame_addr = get_frame_base (get_selected_frame ());
       if (current_frame_addr > 0)
 	{
 	  *upper_bound =
@@ -163,7 +163,7 @@ f77_get_dynamic_upperbound (struct type 
       break;
 
     case BOUND_BY_REF_ON_STACK:
-      current_frame_addr = get_frame_base (deprecated_selected_frame);
+      current_frame_addr = get_frame_base (get_selected_frame ());
       if (current_frame_addr > 0)
 	{
 	  ptr_to_upper_bound =
@@ -630,10 +630,7 @@ info_common_command (char *comname, int 
      first make sure that it is visible and if so, let 
      us display its contents */
 
-  fi = deprecated_selected_frame;
-
-  if (fi == NULL)
-    error ("No frame selected");
+  fi = get_selected_frame ();
 
   /* The following is generally ripped off from stack.c's routine 
      print_frame_info() */
@@ -722,10 +719,7 @@ there_is_a_visible_common_named (char *c
   if (comname == NULL)
     error ("Cannot deal with NULL common name!");
 
-  fi = deprecated_selected_frame;
-
-  if (fi == NULL)
-    error ("No frame selected");
+  fi = get_selected_frame ();
 
   /* The following is generally ripped off from stack.c's routine 
      print_frame_info() */
Index: gdb-6.3/gdb/infcmd.c
===================================================================
--- gdb-6.3.orig/gdb/infcmd.c	2004-09-13 14:26:28.000000000 -0400
+++ gdb-6.3/gdb/infcmd.c	2004-11-09 22:57:37.274099559 -0500
@@ -1214,10 +1214,8 @@ finish_command (char *arg, int from_tty)
     error ("The \"finish\" command does not take any arguments.");
   if (!target_has_execution)
     error ("The program is not running.");
-  if (deprecated_selected_frame == NULL)
-    error ("No selected frame.");
 
-  frame = get_prev_frame (deprecated_selected_frame);
+  frame = get_prev_frame (get_selected_frame ());
   if (frame == 0)
     error ("\"finish\" not meaningful in the outermost frame.");
 
@@ -1235,7 +1233,7 @@ finish_command (char *arg, int from_tty)
 
   /* Find the function we will return from.  */
 
-  function = find_pc_function (get_frame_pc (deprecated_selected_frame));
+  function = find_pc_function (get_frame_pc (get_selected_frame ()));
 
   /* Print info on the selected frame, including level number but not
      source.  */
@@ -1600,13 +1598,11 @@ registers_info (char *addr_exp, int fpre
 
   if (!target_has_registers)
     error ("The program has no registers now.");
-  if (deprecated_selected_frame == NULL)
-    error ("No selected frame.");
 
   if (!addr_exp)
     {
       gdbarch_print_registers_info (current_gdbarch, gdb_stdout,
-				    deprecated_selected_frame, -1, fpregs);
+				    get_selected_frame (), -1, fpregs);
       return;
     }
 
@@ -1644,7 +1640,7 @@ registers_info (char *addr_exp, int fpre
 	if (regnum >= 0)
 	  {
 	    gdbarch_print_registers_info (current_gdbarch, gdb_stdout,
-					  deprecated_selected_frame, regnum, fpregs);
+					  get_selected_frame (), regnum, fpregs);
 	    continue;
 	  }
       }
@@ -1658,7 +1654,7 @@ registers_info (char *addr_exp, int fpre
 	    && regnum < NUM_REGS + NUM_PSEUDO_REGS)
 	  {
 	    gdbarch_print_registers_info (current_gdbarch, gdb_stdout,
-					  deprecated_selected_frame, regnum, fpregs);
+					  get_selected_frame (), regnum, fpregs);
 	    continue;
 	  }
       }
@@ -1684,7 +1680,7 @@ registers_info (char *addr_exp, int fpre
 		if (gdbarch_register_reggroup_p (current_gdbarch, regnum,
 						 group))
 		  gdbarch_print_registers_info (current_gdbarch,
-						gdb_stdout, deprecated_selected_frame,
+						gdb_stdout, get_selected_frame (),
 						regnum, fpregs);
 	      }
 	    continue;
@@ -1714,8 +1710,6 @@ print_vector_info (struct gdbarch *gdbar
 {
   if (!target_has_registers)
     error ("The program has no registers now.");
-  if (deprecated_selected_frame == NULL)
-    error ("No selected frame.");
 
   if (gdbarch_print_vector_info_p (gdbarch))
     gdbarch_print_vector_info (gdbarch, file, frame, args);
@@ -1740,7 +1734,7 @@ print_vector_info (struct gdbarch *gdbar
 static void
 vector_info (char *args, int from_tty)
 {
-  print_vector_info (current_gdbarch, gdb_stdout, deprecated_selected_frame, args);
+  print_vector_info (current_gdbarch, gdb_stdout, get_selected_frame (), args);
 }
 
 
@@ -1910,8 +1904,6 @@ print_float_info (struct gdbarch *gdbarc
 {
   if (!target_has_registers)
     error ("The program has no registers now.");
-  if (deprecated_selected_frame == NULL)
-    error ("No selected frame.");
 
   if (gdbarch_print_float_info_p (gdbarch))
     gdbarch_print_float_info (gdbarch, file, frame, args);
@@ -1937,7 +1929,7 @@ No floating-point info available for thi
 static void
 float_info (char *args, int from_tty)
 {
-  print_float_info (current_gdbarch, gdb_stdout, deprecated_selected_frame, args);
+  print_float_info (current_gdbarch, gdb_stdout, get_selected_frame (), args);
 }
 
 static void
Index: gdb-6.3/gdb/inflow.c
===================================================================
--- gdb-6.3.orig/gdb/inflow.c	2004-08-11 05:00:57.000000000 -0400
+++ gdb-6.3/gdb/inflow.c	2004-11-09 22:58:37.488338883 -0500
@@ -591,10 +591,7 @@ kill_command (char *arg, int from_tty)
   if (target_has_stack)
     {
       printf_filtered ("In %s,\n", target_longname);
-      if (deprecated_selected_frame == NULL)
-	fputs_filtered ("No selected stack frame.\n", gdb_stdout);
-      else
-	print_stack_frame (get_selected_frame (), 1, SRC_AND_LOC);
+      print_stack_frame (get_selected_frame (), 1, SRC_AND_LOC);
     }
   bfd_cache_close_all ();
 }
Index: gdb-6.3/gdb/infrun.c
===================================================================
--- gdb-6.3.orig/gdb/infrun.c	2004-09-27 13:58:08.000000000 -0400
+++ gdb-6.3/gdb/infrun.c	2004-11-09 22:51:07.351240752 -0500
@@ -3485,7 +3485,7 @@ save_inferior_status (int restore_stack_
 
   inf_status->registers = regcache_dup (current_regcache);
 
-  inf_status->selected_frame_id = get_frame_id (deprecated_selected_frame);
+  inf_status->selected_frame_id = get_frame_id (get_selected_frame ());
   return inf_status;
 }
 
Index: gdb-6.3/gdb/mi/mi-main.c
===================================================================
--- gdb-6.3.orig/gdb/mi/mi-main.c	2004-09-12 11:00:42.000000000 -0400
+++ gdb-6.3/gdb/mi/mi-main.c	2004-11-09 22:53:29.998389013 -0500
@@ -388,7 +388,7 @@ register_changed_p (int regnum)
 {
   char raw_buffer[MAX_REGISTER_SIZE];
 
-  if (! frame_register_read (deprecated_selected_frame, regnum, raw_buffer))
+  if (! frame_register_read (get_selected_frame (), regnum, raw_buffer))
     return -1;
 
   if (memcmp (&old_regs[DEPRECATED_REGISTER_BYTE (regnum)], raw_buffer,
@@ -509,7 +509,7 @@ get_register (int regnum, int format)
   if (format == 'N')
     format = 0;
 
-  frame_register (deprecated_selected_frame, regnum, &optim, &lval, &addr,
+  frame_register (get_selected_frame (), regnum, &optim, &lval, &addr,
 		  &realnum, buffer);
 
   if (optim)
Index: gdb-6.3/gdb/mn10300-tdep.c
===================================================================
--- gdb-6.3.orig/gdb/mn10300-tdep.c	2004-08-02 22:02:22.000000000 -0400
+++ gdb-6.3/gdb/mn10300-tdep.c	2004-11-09 22:51:07.356239776 -0500
@@ -1154,7 +1154,7 @@ mn10300_print_register (const char *name
     printf_filtered ("%s: ", name);
 
   /* Get the data */
-  if (!frame_register_read (deprecated_selected_frame, regnum, raw_buffer))
+  if (!frame_register_read (get_selected_frame (), regnum, raw_buffer))
     {
       printf_filtered ("[invalid]");
       return;
Index: gdb-6.3/gdb/stack.c
===================================================================
--- gdb-6.3.orig/gdb/stack.c	2004-08-02 20:57:26.000000000 -0400
+++ gdb-6.3/gdb/stack.c	2004-11-09 22:51:07.361238800 -0500
@@ -758,9 +758,7 @@ parse_frame_specification (char *frame_e
   switch (numargs)
     {
     case 0:
-      if (deprecated_selected_frame == NULL)
-	error ("No selected frame.");
-      return deprecated_selected_frame;
+      return get_selected_frame ();
       /* NOTREACHED */
     case 1:
       {
@@ -902,10 +900,10 @@ frame_info (char *addr_exp, int from_tty
     }
   calling_frame_info = get_prev_frame (fi);
 
-  if (!addr_exp && frame_relative_level (deprecated_selected_frame) >= 0)
+  if (!addr_exp && frame_relative_level (get_selected_frame ()) >= 0)
     {
       printf_filtered ("Stack level %d, frame at ",
-		       frame_relative_level (deprecated_selected_frame));
+		       frame_relative_level (get_selected_frame ()));
       print_address_numeric (get_frame_base (fi), 1, gdb_stdout);
       printf_filtered (":\n");
     }
@@ -1445,9 +1443,7 @@ print_frame_label_vars (struct frame_inf
 void
 locals_info (char *args, int from_tty)
 {
-  if (!deprecated_selected_frame)
-    error ("No frame selected.");
-  print_frame_local_vars (deprecated_selected_frame, 0, gdb_stdout);
+  print_frame_local_vars (get_selected_frame (), 0, gdb_stdout);
 }
 
 static void
@@ -1470,7 +1466,7 @@ catch_info (char *ignore, int from_tty)
       if (!deprecated_selected_frame)
 	error ("No frame selected.");
 
-      print_frame_label_vars (deprecated_selected_frame, 0, gdb_stdout);
+      print_frame_label_vars (get_selected_frame (), 0, gdb_stdout);
     }
 }
 
@@ -1537,9 +1533,7 @@ print_frame_arg_vars (struct frame_info 
 void
 args_info (char *ignore, int from_tty)
 {
-  if (!deprecated_selected_frame)
-    error ("No frame selected.");
-  print_frame_arg_vars (deprecated_selected_frame, gdb_stdout);
+  print_frame_arg_vars (get_selected_frame (), gdb_stdout);
 }
 
 
@@ -1724,7 +1718,7 @@ down_silently_base (char *count_exp)
   if (target_has_stack == 0 || deprecated_selected_frame == 0)
     error ("No stack.");
 
-  frame = find_relative_frame (deprecated_selected_frame, &count1);
+  frame = find_relative_frame (get_selected_frame (), &count1);
   if (count1 != 0 && count_exp == 0)
     {
 
@@ -1944,7 +1938,7 @@ func_command (char *arg, int from_tty)
 
   if (!found)
     printf_filtered ("'%s' not within current stack frame.\n", arg);
-  else if (fp != deprecated_selected_frame)
+  else if (fp != get_selected_frame ())
     select_and_print_frame (fp);
 }
 
@@ -1965,7 +1959,7 @@ get_frame_language (void)
          instruction of another function.  So we rely on
          get_frame_address_in_block(), it provides us with a PC which is
          guaranteed to be inside the frame's code block.  */
-      s = find_pc_symtab (get_frame_address_in_block (deprecated_selected_frame));
+      s = find_pc_symtab (get_frame_address_in_block (get_selected_frame ()));
       if (s)
 	flang = s->language;
       else
Index: gdb-6.3/gdb/tui/tui-disasm.c
===================================================================
--- gdb-6.3.orig/gdb/tui/tui-disasm.c	2004-02-24 20:10:01.000000000 -0500
+++ gdb-6.3/gdb/tui/tui-disasm.c	2004-11-09 22:51:07.370237044 -0500
@@ -382,7 +382,7 @@ tui_vertical_disassem_scroll (enum tui_s
 
       content = (tui_win_content) TUI_DISASM_WIN->generic.content;
       if (cursal.symtab == (struct symtab *) NULL)
-	s = find_pc_symtab (get_frame_pc (deprecated_selected_frame));
+	s = find_pc_symtab (get_frame_pc (get_selected_frame ()));
       else
 	s = cursal.symtab;
 
Index: gdb-6.3/gdb/tui/tui-source.c
===================================================================
--- gdb-6.3.orig/gdb/tui/tui-source.c	2004-02-16 16:05:09.000000000 -0500
+++ gdb-6.3/gdb/tui/tui-source.c	2004-11-09 22:51:07.370237044 -0500
@@ -326,7 +326,7 @@ tui_vertical_source_scroll (enum tui_scr
       struct symtab_and_line cursal = get_current_source_symtab_and_line ();
 
       if (cursal.symtab == (struct symtab *) NULL)
-	s = find_pc_symtab (get_frame_pc (deprecated_selected_frame));
+	s = find_pc_symtab (get_frame_pc (get_selected_frame ()));
       else
 	s = cursal.symtab;
 
Index: gdb-6.3/gdb/tui/tui-winsource.c
===================================================================
--- gdb-6.3.orig/gdb/tui/tui-winsource.c	2004-02-16 16:05:09.000000000 -0500
+++ gdb-6.3/gdb/tui/tui-winsource.c	2004-11-09 22:51:07.371236848 -0500
@@ -311,7 +311,7 @@ tui_horizontal_source_scroll (struct tui
       struct symtab_and_line cursal = get_current_source_symtab_and_line ();
 
       if (cursal.symtab == (struct symtab *) NULL)
-	s = find_pc_symtab (get_frame_pc (deprecated_selected_frame));
+	s = find_pc_symtab (get_frame_pc (get_selected_frame ()));
       else
 	s = cursal.symtab;
 
Index: gdb-6.3/gdb/valops.c
===================================================================
--- gdb-6.3.orig/gdb/valops.c	2004-09-13 23:01:48.000000000 -0400
+++ gdb-6.3/gdb/valops.c	2004-11-09 22:51:07.374236263 -0500
@@ -2663,15 +2663,10 @@ value_of_local (const char *name, int co
   struct block *b;
   struct value * ret;
 
-  if (deprecated_selected_frame == 0)
-    {
-      if (complain)
-	error ("no frame selected");
-      else
-	return 0;
-    }
+  if (!complain && deprecated_selected_frame == 0)
+    return 0;
 
-  func = get_frame_function (deprecated_selected_frame);
+  func = get_frame_function (get_selected_frame ());
   if (!func)
     {
       if (complain)
@@ -2700,7 +2695,7 @@ value_of_local (const char *name, int co
 	return NULL;
     }
 
-  ret = read_var_value (sym, deprecated_selected_frame);
+  ret = read_var_value (sym, get_selected_frame ());
   if (ret == 0 && complain)
     error ("`%s' argument unreadable", name);
   return ret;
Index: gdb-6.3/gdb/varobj.c
===================================================================
--- gdb-6.3.orig/gdb/varobj.c	2004-07-26 10:53:06.000000000 -0400
+++ gdb-6.3/gdb/varobj.c	2004-11-09 22:51:07.377235677 -0500
@@ -488,7 +488,7 @@ varobj_create (char *objname,
       if (fi != NULL)
 	{
 	  var->root->frame = get_frame_id (fi);
-	  old_fi = deprecated_selected_frame;
+	  old_fi = get_selected_frame ();
 	  select_frame (fi);
 	}
 
Index: gdb-6.3/gdb/testsuite/gdb.base/default.exp
===================================================================
--- gdb-6.3.orig/gdb/testsuite/gdb.base/default.exp	2003-03-20 09:45:50.000000000 -0500
+++ gdb-6.3/gdb/testsuite/gdb.base/default.exp	2004-11-09 22:51:07.379235287 -0500
@@ -167,7 +167,7 @@ gdb_test "disable breakpoints" "" "disab
 #test disable display
 gdb_test "disable display" "" "disable display"
 #test disassemble
-gdb_test "disassemble" "No frame selected." "disassemble"
+gdb_test "disassemble" "No (frame selected|registers)." "disassemble"
 #test display
 gdb_test "display" "" "display"
 #test do
@@ -229,9 +229,9 @@ gdb_expect {
 }
 
 #test frame "f" abbreviation
-gdb_test "f" "No stack." "frame \"f\" abbreviation"
+gdb_test "f" "No (stack|registers)." "frame \"f\" abbreviation"
 #test frame
-gdb_test "frame" "No stack." "frame"
+gdb_test "frame" "No (stack|registers)." "frame"
 #test fg
 gdb_test "fg" "The program is not being run." "fg"
 # FIXME: fg kills the udi connection
@@ -294,9 +294,9 @@ gdb_test "ignore" "Argument required .a 
 #test info address
 gdb_test "info address" "Argument required." "info address"
 #test info all-registers
-gdb_test "info all-registers" "The program has no registers now." "info all-registers"
+gdb_test "info all-registers" "(The program has no registers now|No registers)." "info all-registers"
 #test info args
-gdb_test "info args" "No frame selected." "info args"
+gdb_test "info args" "No (frame selected|registers)." "info args"
 #test info bogus-gdb-command
 gdb_test "info bogus-gdb-command" "Undefined info command: \"bogus-gdb-command\".  Try \"help info\".*" "info bogus-gdb-command"
 #test info breakpoints
@@ -320,11 +320,11 @@ gdb_test "info frame" "No stack.|No sele
 #test info files
 gdb_test "info files" "" "info files"
 #test info float
-gdb_test "info float" "The program has no registers now." "info float"
+gdb_test "info float" "(The program has no registers now|No registers)." "info float"
 #test info functions
 gdb_test "info functions" "All defined functions:" "info functions"
 #test info locals
-gdb_test "info locals" "No frame selected." "info locals"
+gdb_test "info locals" "(No frame selected|No registers)." "info locals"
 #test info program
 gdb_test "info program" "The program being debugged is not being run." "info program"
 #test info registers
@@ -352,7 +352,7 @@ gdb_test "info types" "All defined types
 #test info variables
 gdb_test "info variables" "All defined variables:" "info variables"
 #test info vector
-gdb_test "info vector" "The program has no registers now." "info vector"
+gdb_test "info vector" "(The program has no registers now|No registers)." "info vector"
 #test info warranty
 gdb_test "info warranty" "NO WARRANTY(\[^\r\n\]*\[\r\n\])+  *11.  *BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY(\[^\r\n\]*\[\r\n\])+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN(\[^\r\n\]*\[\r\n\])+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES(\[^\r\n\]*\[\r\n\])+PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED(\[^\r\n\]*\[\r\n\])+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF(\[^\r\n\]*\[\r\n\])+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS(\[^\r\n\]*\[\r\n\])+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE(\[^\r\n\]*\[\r\n\])+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,(\[^\r\n\]*\[\r\n\])+REPAIR OR CORRECTION.(\[^\r\n\]*\[\r\n\])+  *12.  *IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING(\[^\r\n\]*\[\r\n\])+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR(\[^\r\n\]*\[\r\n\])+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,(\[^\r\n\]*\[\r\n\])+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING(\[^\r\n\]*\[\r\n\])+OUT OF THE USE OR INABILITY TO USE THE PROGRAM .INCLUDING BUT NOT LIMITED(\[^\r\n\]*\[\r\n\])+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY(\[^\r\n\]*\[\r\n\])+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER(\[^\r\n\]*\[\r\n\])+PROGRAMS., EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE(\[^\r\n\]*\[\r\n\])+POSSIBILITY OF SUCH DAMAGES.*" "info warranty"
 #test info watchpoints
