changeset 69964:321089786c7b

Don't include gnu.h. (x_io_error_quitter, x_draw_image_foreground_1): Remove prototypes. (x_sync): Move to macfns.c. [USE_CG_DRAWING] (mac_define_fringe_bitmap): Remove unused variable `mask_bits'. (mac_compute_glyph_string_overhangs): Avoid ambiguous `else'. (x_draw_image_glyph_string): Remove unused variable `pixmap'. (x_mac_to_emacs_modifiers): Remove function. (XTset_vertical_scroll_bar, mac_handle_visibility_change) (x_make_frame_visible, xlfdpat_create, mac_handle_command_event): Add explicit braces to avoid ambiguous `else'. (x_make_frame_visible): Remove unused variables `type', `original_top', and `original_left'. (mac_do_list_fonts, XTread_socket): Add parentheses around && within ||. (x_load_font): Remove unused variables `full_name', and `value'. (do_get_menus, do_init_managers, do_check_ram_size) [!MAC_OS8]: Remove functions. (do_zoom_window): Reorganize variables with respect to conditionals. (init_command_handler): Remove unused variable `err'. [MAC_OSX] (mac_check_bundle): Remove unused variable `child'.
author YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
date Wed, 12 Apr 2006 08:09:24 +0000
parents b25e279aa874
children e8a7cef5ffb5
files src/macterm.c
diffstat 1 files changed, 165 insertions(+), 309 deletions(-) [+]
line wrap: on
line diff
--- a/src/macterm.c	Wed Apr 12 08:08:30 2006 +0000
+++ b/src/macterm.c	Wed Apr 12 08:09:24 2006 +0000
@@ -77,7 +77,6 @@
 #include "termhooks.h"
 #include "termopts.h"
 #include "termchar.h"
-#include "gnu.h"
 #include "disptab.h"
 #include "buffer.h"
 #include "window.h"
@@ -215,7 +214,6 @@
 
 struct mac_display_info *mac_display_info_for_display (Display *);
 static void x_update_window_end P_ ((struct window *, int, int));
-static int x_io_error_quitter P_ ((Display *));
 int x_catch_errors P_ ((Display *));
 void x_uncatch_errors P_ ((Display *, int));
 void x_lower_frame P_ ((struct frame *));
@@ -1697,14 +1695,6 @@
 #endif
 }
 
-/* x_sync is a no-op on Mac.  */
-void
-x_sync (f)
-     void *f;
-{
-}
-
-
 /* Flush display of frame F, or of all frames if F is null.  */
 
 static void
@@ -2080,7 +2070,6 @@
      unsigned short *bits;
      int h, wd;
 {
-  unsigned short *mask_bits;
   int i;
   CGDataProviderRef provider;
 
@@ -2366,7 +2355,6 @@
 static void x_draw_image_glyph_string P_ ((struct glyph_string *));
 static void x_draw_image_relief P_ ((struct glyph_string *));
 static void x_draw_image_foreground P_ ((struct glyph_string *));
-static void x_draw_image_foreground_1 P_ ((struct glyph_string *, Pixmap));
 static void x_clear_glyph_string_rect P_ ((struct glyph_string *, int,
 					   int, int, int));
 static void x_draw_relief_rect P_ ((struct frame *, int, int, int, int,
@@ -2567,34 +2555,36 @@
 mac_compute_glyph_string_overhangs (s)
      struct glyph_string *s;
 {
-  if (s->cmp == NULL
-      && s->first_glyph->type == CHAR_GLYPH)
-    if (!s->two_byte_p
+  if (!(s->cmp == NULL
+	&& s->first_glyph->type == CHAR_GLYPH))
+    return;
+
+  if (!s->two_byte_p
 #if USE_ATSUI
-	|| s->font->mac_style
-#endif
-	)
-      {
-	XCharStruct cs;
-
-	mac_text_extents_16 (s->font, s->char2b, s->nchars, &cs);
-	s->right_overhang = cs.rbearing > cs.width ? cs.rbearing - cs.width : 0;
-	s->left_overhang = cs.lbearing < 0 ? -cs.lbearing : 0;
-      }
-    else
-      {
-	Rect r;
-	MacFontStruct *font = s->font;
-
-	TextFont (font->mac_fontnum);
-	TextSize (font->mac_fontsize);
-	TextFace (font->mac_fontface);
-
-	QDTextBounds (s->nchars * 2, (char *)s->char2b, &r);
-
-	s->right_overhang = r.right > s->width ? r.right - s->width : 0;
-	s->left_overhang = r.left < 0 ? -r.left : 0;
-      }
+      || s->font->mac_style
+#endif
+      )
+    {
+      XCharStruct cs;
+
+      mac_text_extents_16 (s->font, s->char2b, s->nchars, &cs);
+      s->right_overhang = cs.rbearing > cs.width ? cs.rbearing - cs.width : 0;
+      s->left_overhang = cs.lbearing < 0 ? -cs.lbearing : 0;
+    }
+  else
+    {
+      Rect r;
+      MacFontStruct *font = s->font;
+
+      TextFont (font->mac_fontnum);
+      TextSize (font->mac_fontsize);
+      TextFace (font->mac_fontface);
+
+      QDTextBounds (s->nchars * 2, (char *)s->char2b, &r);
+
+      s->right_overhang = r.right > s->width ? r.right - s->width : 0;
+      s->left_overhang = r.left < 0 ? -r.left : 0;
+    }
 }
 
 
@@ -3430,7 +3420,6 @@
   int box_line_hwidth = abs (s->face->box_line_width);
   int box_line_vwidth = max (s->face->box_line_width, 0);
   int height;
-  Pixmap pixmap = 0;
 
   height = s->height - 2 * box_line_vwidth;
 
@@ -4176,142 +4165,6 @@
 
 
 
-/* Keyboard processing - modifier keys, vendor-specific keysyms, etc.  */
-
-#if 0 /* MAC_TODO */
-/* Initialize mode_switch_bit and modifier_meaning.  */
-static void
-x_find_modifier_meanings (dpyinfo)
-     struct x_display_info *dpyinfo;
-{
-  int min_code, max_code;
-  KeySym *syms;
-  int syms_per_code;
-  XModifierKeymap *mods;
-
-  dpyinfo->meta_mod_mask = 0;
-  dpyinfo->shift_lock_mask = 0;
-  dpyinfo->alt_mod_mask = 0;
-  dpyinfo->super_mod_mask = 0;
-  dpyinfo->hyper_mod_mask = 0;
-
-#ifdef HAVE_X11R4
-  XDisplayKeycodes (dpyinfo->display, &min_code, &max_code);
-#else
-  min_code = dpyinfo->display->min_keycode;
-  max_code = dpyinfo->display->max_keycode;
-#endif
-
-  syms = XGetKeyboardMapping (dpyinfo->display,
-			      min_code, max_code - min_code + 1,
-			      &syms_per_code);
-  mods = XGetModifierMapping (dpyinfo->display);
-
-  /* Scan the modifier table to see which modifier bits the Meta and
-     Alt keysyms are on.  */
-  {
-    int row, col;	/* The row and column in the modifier table.  */
-
-    for (row = 3; row < 8; row++)
-      for (col = 0; col < mods->max_keypermod; col++)
-	{
-	  KeyCode code
-	    = mods->modifiermap[(row * mods->max_keypermod) + col];
-
-	  /* Zeroes are used for filler.  Skip them.  */
-	  if (code == 0)
-	    continue;
-
-	  /* Are any of this keycode's keysyms a meta key?  */
-	  {
-	    int code_col;
-
-	    for (code_col = 0; code_col < syms_per_code; code_col++)
-	      {
-		int sym = syms[((code - min_code) * syms_per_code) + code_col];
-
-		switch (sym)
-		  {
-		  case XK_Meta_L:
-		  case XK_Meta_R:
-		    dpyinfo->meta_mod_mask |= (1 << row);
-		    break;
-
-		  case XK_Alt_L:
-		  case XK_Alt_R:
-		    dpyinfo->alt_mod_mask |= (1 << row);
-		    break;
-
-		  case XK_Hyper_L:
-		  case XK_Hyper_R:
-		    dpyinfo->hyper_mod_mask |= (1 << row);
-		    break;
-
-		  case XK_Super_L:
-		  case XK_Super_R:
-		    dpyinfo->super_mod_mask |= (1 << row);
-		    break;
-
-		  case XK_Shift_Lock:
-		    /* Ignore this if it's not on the lock modifier.  */
-		    if ((1 << row) == LockMask)
-		      dpyinfo->shift_lock_mask = LockMask;
-		    break;
-		  }
-	      }
-	  }
-	}
-  }
-
-  /* If we couldn't find any meta keys, accept any alt keys as meta keys.  */
-  if (! dpyinfo->meta_mod_mask)
-    {
-      dpyinfo->meta_mod_mask = dpyinfo->alt_mod_mask;
-      dpyinfo->alt_mod_mask = 0;
-    }
-
-  /* If some keys are both alt and meta,
-     make them just meta, not alt.  */
-  if (dpyinfo->alt_mod_mask & dpyinfo->meta_mod_mask)
-    {
-      dpyinfo->alt_mod_mask &= ~dpyinfo->meta_mod_mask;
-    }
-
-  XFree ((char *) syms);
-  XFreeModifiermap (mods);
-}
-
-#endif /* MAC_TODO */
-
-/* Convert between the modifier bits X uses and the modifier bits
-   Emacs uses.  */
-
-static unsigned int
-x_mac_to_emacs_modifiers (dpyinfo, state)
-     struct x_display_info *dpyinfo;
-     unsigned short state;
-{
-  return (((state & shiftKey) ? shift_modifier : 0)
-	  | ((state & controlKey) ? ctrl_modifier : 0)
-	  | ((state & cmdKey) ? meta_modifier : 0)
-	  | ((state & optionKey) ? alt_modifier : 0));
-}
-
-#if 0 /* MAC_TODO */
-static unsigned short
-x_emacs_to_x_modifiers (dpyinfo, state)
-     struct x_display_info *dpyinfo;
-     unsigned int state;
-{
-  return (  ((state & alt_modifier)	? dpyinfo->alt_mod_mask   : 0)
-	  | ((state & super_modifier)	? dpyinfo->super_mod_mask : 0)
-	  | ((state & hyper_modifier)	? dpyinfo->hyper_mod_mask : 0)
-	  | ((state & shift_modifier)	? ShiftMask        : 0)
-	  | ((state & ctrl_modifier)	? ControlMask      : 0)
-	  | ((state & meta_modifier)	? dpyinfo->meta_mod_mask  : 0));
-}
-#endif /* MAC_TODO */
-
 /* Convert a keysym to its name.  */
 
 char *
@@ -5102,41 +4955,43 @@
 
 #ifdef USE_TOOLKIT_SCROLL_BARS
   if (NILP (bar->track_top))
-    if (sb_width >= disp_height)
-      {
-	XSETINT (bar->track_top, 0);
-	XSETINT (bar->track_height, 0);
-      }
-    else
-      {
-	ControlHandle ch = SCROLL_BAR_CONTROL_HANDLE (bar);
-	Rect r0, r1;
-
-	BLOCK_INPUT;
-
-	SetControl32BitMinimum (ch, 0);
-	SetControl32BitMaximum (ch, 1);
-	SetControlViewSize (ch, 1);
-
-	/* Move the scroll bar thumb to the top.  */
-	SetControl32BitValue (ch, 0);
-	get_control_part_bounds (ch, kControlIndicatorPart, &r0);
-
-	/* Move the scroll bar thumb to the bottom.  */
-	SetControl32BitValue (ch, 1);
-	get_control_part_bounds (ch, kControlIndicatorPart, &r1);
-
-	UnionRect (&r0, &r1, &r0);
-	XSETINT (bar->track_top, r0.top);
-	XSETINT (bar->track_height, r0.bottom - r0.top);
-
-	/* Don't show the scroll bar if its height is not enough to
-	   display the scroll bar thumb.  */
-	if (r0.bottom - r0.top > 0)
-	  ShowControl (ch);
-
-	UNBLOCK_INPUT;
-      }
+    {
+      if (sb_width >= disp_height)
+	{
+	  XSETINT (bar->track_top, 0);
+	  XSETINT (bar->track_height, 0);
+	}
+      else
+	{
+	  ControlHandle ch = SCROLL_BAR_CONTROL_HANDLE (bar);
+	  Rect r0, r1;
+
+	  BLOCK_INPUT;
+
+	  SetControl32BitMinimum (ch, 0);
+	  SetControl32BitMaximum (ch, 1);
+	  SetControlViewSize (ch, 1);
+
+	  /* Move the scroll bar thumb to the top.  */
+	  SetControl32BitValue (ch, 0);
+	  get_control_part_bounds (ch, kControlIndicatorPart, &r0);
+
+	  /* Move the scroll bar thumb to the bottom.  */
+	  SetControl32BitValue (ch, 1);
+	  get_control_part_bounds (ch, kControlIndicatorPart, &r1);
+
+	  UnionRect (&r0, &r1, &r0);
+	  XSETINT (bar->track_top, r0.top);
+	  XSETINT (bar->track_height, r0.bottom - r0.top);
+
+	  /* Don't show the scroll bar if its height is not enough to
+	     display the scroll bar thumb.  */
+	  if (r0.bottom - r0.top > 0)
+	    ShowControl (ch);
+
+	  UNBLOCK_INPUT;
+	}
+    }
 
   x_set_toolkit_scroll_bar_thumb (bar, portion, position, whole);
 #else /* not USE_TOOLKIT_SCROLL_BARS */
@@ -6205,10 +6060,12 @@
   struct input_event buf;
 
   if (IsWindowVisible (wp))
-    if (IsWindowCollapsed (wp))
-      iconified = 1;
-    else
-      visible = 1;
+    {
+      if (IsWindowCollapsed (wp))
+	iconified = 1;
+      else
+	visible = 1;
+    }
 
   if (!f->async_visible && visible)
     {
@@ -6254,9 +6111,6 @@
 x_make_frame_visible (f)
      struct frame *f;
 {
-  Lisp_Object type;
-  int original_top, original_left;
-
   BLOCK_INPUT;
 
   if (! FRAME_VISIBLE_P (f))
@@ -6267,27 +6121,29 @@
 	 before the window gets really visible.  */
       if (! FRAME_ICONIFIED_P (f)
 	  && ! f->output_data.mac->asked_for_visible)
+	{
 #if TARGET_API_MAC_CARBON
-	if (!(FRAME_SIZE_HINTS (f)->flags & (USPosition | PPosition)))
-	  {
-	    struct frame *sf = SELECTED_FRAME ();
-	    if (!FRAME_MAC_P (sf))
-	      RepositionWindow (FRAME_MAC_WINDOW (f), NULL,
-				kWindowCenterOnMainScreen);
-	    else
-	      RepositionWindow (FRAME_MAC_WINDOW (f),
-				FRAME_MAC_WINDOW (sf),
+	  if (!(FRAME_SIZE_HINTS (f)->flags & (USPosition | PPosition)))
+	    {
+	      struct frame *sf = SELECTED_FRAME ();
+	      if (!FRAME_MAC_P (sf))
+		RepositionWindow (FRAME_MAC_WINDOW (f), NULL,
+				  kWindowCenterOnMainScreen);
+	      else
+		RepositionWindow (FRAME_MAC_WINDOW (f),
+				  FRAME_MAC_WINDOW (sf),
 #if MAC_OS_X_VERSION_MAX_ALLOWED >= 1020
-				kWindowCascadeStartAtParentWindowScreen
+				  kWindowCascadeStartAtParentWindowScreen
 #else
-				kWindowCascadeOnParentWindowScreen
-#endif
-				);
-	    x_real_positions (f, &f->left_pos, &f->top_pos);
-	  }
-	else
-#endif
-	  x_set_offset (f, f->left_pos, f->top_pos, 0);
+				  kWindowCascadeOnParentWindowScreen
+#endif
+				  );
+	      x_real_positions (f, &f->left_pos, &f->top_pos);
+	    }
+	  else
+#endif
+	    x_set_offset (f, f->left_pos, f->top_pos, 0);
+	}
 
       f->output_data.mac->asked_for_visible = 1;
 
@@ -6730,15 +6586,17 @@
 	else
 	  {
 	    if (last_char == '?')
-	      if (anychar_head > pat->buf && *(anychar_head - 1) == '*')
-		/*  ...*??* -> ...*??  */
-		continue;
-	      else
-		/*  ...a??* -> ...a*??  */
-		{
-		  *anychar_head++ = '*';
-		  c = '?';
-		}
+	      {
+		if (anychar_head > pat->buf && *(anychar_head - 1) == '*')
+		  /*  ...*??* -> ...*??  */
+		  continue;
+		else
+		  /*  ...a??* -> ...a*??  */
+		  {
+		    *anychar_head++ = '*';
+		    c = '?';
+		  }
+	      }
 	    nblocks++;
 	  }
       else if (c == '?')
@@ -7569,7 +7427,7 @@
       if (xlfdpat_match (pat, font_name_table[i]))
 	{
 	  font_list = Fcons (build_string (font_name_table[i]), font_list);
-	  if (exact || maxnames > 0 && ++n_fonts >= maxnames)
+	  if (exact || (maxnames > 0 && ++n_fonts >= maxnames))
 	    break;
 	}
       else if (scl_val[XLFD_SCL_PIXEL_SIZE] > 0
@@ -7592,7 +7450,7 @@
 	    {
 	      font_list = Fcons (build_string (scaled), font_list);
 	      xfree (scaled);
-	      if (exact || maxnames > 0 && ++n_fonts >= maxnames)
+	      if (exact || (maxnames > 0 && ++n_fonts >= maxnames))
 		  break;
 	    }
 	  else
@@ -8241,10 +8099,8 @@
 
   /* Load the font and add it to the table.  */
   {
-    char *full_name;
     struct MacFontStruct *font;
     struct font_info *fontp;
-    unsigned long value;
     int i;
 
     fontname = (char *) SDATA (XCAR (font_names));
@@ -8756,6 +8612,7 @@
 
 #endif
 
+#ifdef MAC_OS8
 static void
 do_get_menus (void)
 {
@@ -8817,6 +8674,7 @@
       exit (1);
     }
 }
+#endif /* MAC_OS8 */
 
 static void
 do_window_update (WindowPtr win)
@@ -8998,42 +8856,41 @@
 static void
 do_zoom_window (WindowPtr w, int zoom_in_or_out)
 {
-  GrafPtr save_port;
   Rect zoom_rect, port_rect;
-  Point top_left;
-  int w_title_height, columns, rows, width, height;
+  int columns, rows, width, height;
   struct frame *f = mac_window_to_frame (w);
   struct mac_display_info *dpyinfo = FRAME_MAC_DISPLAY_INFO (f);
-
 #if TARGET_API_MAC_CARBON
-  {
-    Point standard_size;
-
-    standard_size.h = FRAME_TEXT_COLS_TO_PIXEL_WIDTH (f, DEFAULT_NUM_COLS);
-    standard_size.v = dpyinfo->height;
-
-    if (IsWindowInStandardState (w, &standard_size, &zoom_rect))
-      zoom_in_or_out = inZoomIn;
-    else
-      {
-	/* Adjust the standard size according to character boundaries.  */
-
-	columns = FRAME_PIXEL_WIDTH_TO_TEXT_COLS (f, zoom_rect.right - zoom_rect.left);
-	rows = FRAME_PIXEL_HEIGHT_TO_TEXT_LINES (f, zoom_rect.bottom - zoom_rect.top);
-	standard_size.h = FRAME_TEXT_COLS_TO_PIXEL_WIDTH (f, columns);
-	standard_size.v = FRAME_TEXT_LINES_TO_PIXEL_HEIGHT (f, rows);
-	GetWindowBounds (w, kWindowContentRgn, &port_rect);
-	if (IsWindowInStandardState (w, &standard_size, &zoom_rect)
-	    && port_rect.left == zoom_rect.left
-	    && port_rect.top == zoom_rect.top)
-	  zoom_in_or_out = inZoomIn;
-	else
-	  zoom_in_or_out = inZoomOut;
-      }
-
-    ZoomWindowIdeal (w, zoom_in_or_out, &standard_size);
-  }
+  Point standard_size;
+
+  standard_size.h = FRAME_TEXT_COLS_TO_PIXEL_WIDTH (f, DEFAULT_NUM_COLS);
+  standard_size.v = dpyinfo->height;
+
+  if (IsWindowInStandardState (w, &standard_size, &zoom_rect))
+    zoom_in_or_out = inZoomIn;
+  else
+    {
+      /* Adjust the standard size according to character boundaries.  */
+
+      columns = FRAME_PIXEL_WIDTH_TO_TEXT_COLS (f, zoom_rect.right - zoom_rect.left);
+      rows = FRAME_PIXEL_HEIGHT_TO_TEXT_LINES (f, zoom_rect.bottom - zoom_rect.top);
+      standard_size.h = FRAME_TEXT_COLS_TO_PIXEL_WIDTH (f, columns);
+      standard_size.v = FRAME_TEXT_LINES_TO_PIXEL_HEIGHT (f, rows);
+      GetWindowBounds (w, kWindowContentRgn, &port_rect);
+      if (IsWindowInStandardState (w, &standard_size, &zoom_rect)
+	  && port_rect.left == zoom_rect.left
+	  && port_rect.top == zoom_rect.top)
+	zoom_in_or_out = inZoomIn;
+      else
+	zoom_in_or_out = inZoomOut;
+    }
+
+  ZoomWindowIdeal (w, zoom_in_or_out, &standard_size);
 #else /* not TARGET_API_MAC_CARBON */
+  GrafPtr save_port;
+  Point top_left;
+  int w_title_height;
+
   GetPort (&save_port);
 
   SetPortWindowPort (w);
@@ -9168,26 +9025,27 @@
   mac_find_apple_event_spec (0, command.commandID,
 			     &class_key, &id_key, &binding);
   if (!NILP (binding) && !EQ (binding, Qundefined))
-    if (INTEGERP (binding))
-      return XINT (binding);
-    else
-      {
-	AppleEvent apple_event;
-	UInt32 modifiers;
-	static EventParamName names[] = {kEventParamDirectObject,
-					 kEventParamKeyModifiers};
-	static EventParamType types[] = {typeHICommand,
-					 typeUInt32};
-	err = create_apple_event_from_event_ref (event, 2, names, types,
-						 &apple_event);
-	if (err == noErr)
-	  {
-	    err = mac_store_apple_event (class_key, id_key, &apple_event);
-	    AEDisposeDesc (&apple_event);
-	  }
-	if (err == noErr)
-	  return noErr;
-      }
+    {
+      if (INTEGERP (binding))
+	return XINT (binding);
+      else
+	{
+	  AppleEvent apple_event;
+	  static EventParamName names[] = {kEventParamDirectObject,
+					   kEventParamKeyModifiers};
+	  static EventParamType types[] = {typeHICommand,
+					   typeUInt32};
+	  err = create_apple_event_from_event_ref (event, 2, names, types,
+						   &apple_event);
+	  if (err == noErr)
+	    {
+	      err = mac_store_apple_event (class_key, id_key, &apple_event);
+	      AEDisposeDesc (&apple_event);
+	    }
+	  if (err == noErr)
+	    return noErr;
+	}
+    }
 
   return eventNotHandledErr;
 }
@@ -9195,7 +9053,6 @@
 static OSErr
 init_command_handler ()
 {
-  OSErr err = noErr;
   EventTypeSpec specs[] = {{kEventClassCommand, kEventCommandProcess}};
   static EventHandlerUPP handle_command_eventUPP = NULL;
 
@@ -10071,18 +9928,18 @@
 		    XSETINT (inev.x, mouse_loc.h);
 		    XSETINT (inev.y, mouse_loc.v);
 
-		    if (dpyinfo->grabbed && tracked_scroll_bar
-			|| ch != 0
+		    if ((dpyinfo->grabbed && tracked_scroll_bar)
+			|| (ch != 0
 #ifndef USE_TOOLKIT_SCROLL_BARS
-			/* control_part_code becomes kControlNoPart if
- 			   a progress indicator is clicked.  */
-			&& control_part_code != kControlNoPart
+			    /* control_part_code becomes kControlNoPart if
+			       a progress indicator is clicked.  */
+			    && control_part_code != kControlNoPart
 #else  /* USE_TOOLKIT_SCROLL_BARS */
 #ifdef MAC_OSX
-			&& control_kind.kind == kControlKindScrollBar
+			    && control_kind.kind == kControlKindScrollBar
 #endif	/* MAC_OSX */
 #endif	/* USE_TOOLKIT_SCROLL_BARS */
-			)
+			    ))
 		      {
 			struct scroll_bar *bar;
 
@@ -10882,7 +10739,6 @@
   extern int inhibit_window_system;
   extern int noninteractive;
   CFBundleRef appsBundle;
-  pid_t child;
 
   /* No need to test if already -nw*/
   if (inhibit_window_system || noninteractive)