macro grep_run {
/*******************************************************************************
																MULTI-EDIT MACRO

Name:					GREP_RUN

Description: 	Dialog UI to Borland (& perhaps other) GREP utility

							(C) Copyright 1991 by OzmoSys.
*******************************************************************************/

	int
					original_window = cur_window,    /* remember where we were */
					T_Int1,                          /* temp integer variables */
					T_Int2,
					T_Int3,
					T_Int4,
					T_Int5,
					T_Int6,
					T_Int7,
					T_Int8,
					T_Int9,
					T_Int10,
					T_Int11,
					T_Radio,
					Error,
					win_id,
					menu = menu_create              /* create menu data structure */
					;
	str
					T_Str1,                         /*  temp string variable  */
					T_Str2,
					T_Str3,
					Run_Str, fn, wn, Tmp_Path
					;

	refresh = FALSE;                 				/*  turn off screen updating  */
	win_id = WINDOW_ID;

	switch_window( window_count );    			/*  go to the end of the window list  */

	menu_set_item(menu, 1,"Files to Search: ","","/QK=1/L=1/C=1/W=20/ML=50/HISTORY=FILES",0,0,0);
	menu_set_item(menu, 2,"Text to find   : ","","/QK=1/L=2/C=1/W=20/ML=50/HISTORY=EXAMPLE",0,0,0);
	menu_set_item(menu,14,"Word Search Options: ","[0-9A-Z_]","/QK=1/L=16/C=1/W=16/ML=50/HISTORY=WORD SEARCH",0,0,0);

	menu_set_item(menu,3, "GREP options:","","/QK=1/L=4/C=1",10,0,0);
	menu_set_item(menu,4, "Regular expression search ","","/L=5/C=2",13, 1 ,0);
	menu_set_item(menu,5, "Match Count only          ","","/L=6/C=2",13, 0 ,0);
	menu_set_item(menu,6, "Non-matching lines only   ","","/L=7/C=2",13, 0 ,0);
	menu_set_item(menu,7, "Search subdirectories     ","","/L=8/C=2",13, 1 ,0);
	menu_set_item(menu,8, "UNIX output format        ","","/L=9/C=2",13, 0 ,0);
	menu_set_item(menu,9, "File names only           ","","/L=10/C=2",13, 0 ,0);
	menu_set_item(menu,10,"Line numbers              ","","/L=11/C=2",13, 1 ,0);
	menu_set_item(menu,11,"Ignore case               ","","/L=12/C=2",13, 1 ,0);
	menu_set_item(menu,12,"Verbose                   ","","/L=13/C=2",13, 0 ,0);
	menu_set_item(menu,13,"Word search               ","","/L=14/C=2",13, 0 ,0);

	menu_set_item(menu,15,"Output Options:","","/QK=1/L=18/C=1",10,0,0);
	menu_set_item(menu,16,"View ","","/L=19/C=2/G=@RADIO@/R=1",12, 1 ,0);
	menu_set_item(menu,17,"Print ","","/L=19/C=20/G=@RADIO@/R=2",12, 0 ,0);

	Return_Int = menu;
	RM("USERIN^DATA_IN /HN=1/PRE=EX/#=17/T= GREP DIALOG BOX /H=DATABOX");

	// Retrieve the user's input

	T_Str1 = menu_item_str(menu,1,2);   /* Files to search 			*/
	T_Str2 = menu_item_str(menu,2,2);   /* Text to find    			*/
	T_Str3 = menu_item_str(menu,14,2);  /* Word search options 	*/

	T_Int1  = menu_item_int(menu,4,2);  /* Regular expression search         */
	T_Int2  = menu_item_int(menu,5,2);  /* Match Count only                  */
	T_Int3  = menu_item_int(menu,6,2);  /* Non-matching lines only           */
	T_Int4  = menu_item_int(menu,7,2);  /* Search subdirectories             */
	T_Int6  = menu_item_int(menu,8,2);  /* UNIX output format                */
	T_Int7  = menu_item_int(menu,9, 2); /* File names only                   */
	T_Int8  = menu_item_int(menu,10,2); /* Line numbers                      */
	T_Int9  = menu_item_int(menu,11,2); /* Ignore case                       */
	T_Int10 = menu_item_int(menu,12,2); /* Verbose                           */
	T_Int11 = menu_item_int(menu,13,2); /* Word search                       */

	T_Radio = Global_Int("@RADIO@");    /*  Radio button group */


	Run_Str = "GREP ";
	if( T_Int1 )
		Run_Str = Run_Str + "-r+ ";
	else
		Run_Str = Run_Str + "-r- ";

	if( T_Int2 )
		Run_Str = Run_Str + "-c+ ";
	else
		Run_Str = Run_Str + "-c- ";

	if( T_Int3 )
		Run_Str = Run_Str + "-v+ ";
	else
		Run_Str = Run_Str + "-v- ";

	if( T_Int4 )
		Run_Str = Run_Str + "-d+ ";
	else
		Run_Str = Run_Str + "-d- ";

	if( T_Int6 )
		Run_Str = Run_Str + "-o+ ";
	else
		Run_Str = Run_Str + "-o- ";

	if( T_Int7 )
		Run_Str = Run_Str + "-l+ ";
	else
		Run_Str = Run_Str + "-l- ";

	if( T_Int8 )
		Run_Str = Run_Str + "-n+ ";
	else
		Run_Str = Run_Str + "-n- ";

	if( T_Int9 )
		Run_Str = Run_Str + "-i+ ";
	else
		Run_Str = Run_Str + "-i- ";

	if( T_Int10 )
		Run_Str = Run_Str + "-z+ ";
	else
		Run_Str = Run_Str + "-z- ";

	if( T_Int11 )
		Run_Str = Run_Str + "-w+ " + T_Str3 + " ";
	else
		Run_Str = Run_Str + "-w- ";

	if ( Return_Int )
	{
			Tmp_Path = TEMP_PATH;

			Run_Str = Run_Str + T_Str2 + " " + T_Str1 + " > " + Tmp_Path + "GREP.TMP";

			working;

			shell_to_dos( Run_Str, TRUE );

			redraw;

			Error = EXIT_CODE;

			if ( Error == 0 )
			{

				fn = fexpand( Tmp_Path + 'GREP.TMP' );
				Error = switch_file( fn );
				if ( Error != FALSE )
				{
					delete_window;
				}
				switch_window( window_count );    /*  go to the end of the window list  */
				create_window;
				load_file( fn );
				WINDOW_NAME = "GREP";
				Error = switch_file( fn );
				read_only = TRUE;
 				if ( T_Radio == 2 )
				{
					RM( 'print' );
				}
			}
			else
			{
				RM( 'MEERROR' );
			}
	}
	else
	{
		switch_win_id( win_id );
	}
	menu_delete(menu);            /* get rid of the menu data structure */
}

