/*------------------------->  Sather - configfile  <-------------------------*/
/* Copyright (C) 2000 by K Hopper, University of Waikato, New Zealand        */
/* This file is part of the GNU Sather library. It is free software; you may */
/* redistribute  and/or modify it under the terms of the GNU Library General */
/* Public  License (LGPL)  as published  by the  Free  Software  Foundation; */
/* either version 2 of the license, or (at your option) any later version.   */
/* This  library  is distributed  in the  hope that it will  be  useful, but */
/* WITHOUT ANY WARRANTY without even the implied warranty of MERCHANTABILITY */
/* or FITNESS FOR A PARTICULAR PURPOSE. See Doc/LGPL for more details.       */
/* The license text is also available from:  Free Software Foundation, Inc., */
/* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA                     */
/*------------>  Please email comments to <bug-sather@gnu.org>  <------------*/

#ifndef FSTR_CONFIG
#define FSTR_CONFIG

#ifdef PP
#undef PP
#endif

#define PP	no_pre,no_post

--   NOTE All ACOPY macros are hard coded into the compiler. This has been done
--        in order to provide higher performance.  The macros below should not,
--        however, be deleted below since the compiler still needs some of the
--        information provided here.

FSTR_ACOPY_FSTR:		PP,reads "@0::[]" "@0::asize",writes "@0::[]" "@0::asize",
				exec "FSTRACOPYF($0,$1);",
				f_exec "if(^0 && ^1) FSTRACOPYF($0,$1); else F_FSTRACOPYF($0,$1);";

FSTR_ACOPY_STR:			PP,reads "@0::[]" "@0::asize",writes "@0::[]" "@0::asize",
				exec "FSTRACOPY($0,$1);",
				f_exec "if(^0 && ^1) FSTRACOPY($0,$1); else F_FSTRACOPY($0,$1);";

FSTR_ACOPYN_FSTR_CARD:		PP,reads "@0::[]" "@0::asize",writes "@0::[]" "@0::asize",
				exec "FSTRACOPYNF($0,$1,$2);",
				f_exec "if(^0 && ^1) FSTRACOPYNF($0,$1,$2); else F_FSTRACOPYNF($0,$1,$2);";

FSTR_ACOPYN_STR_CARD:		PP,reads "@0::[]" "@0::asize",writes "@0::[]" "@0::asize",
				exec "FSTRACOPYN($0,$1,$2);",
				f_exec "if(^0 && ^1) FSTRACOPYN($0,$1,$2); else F_FSTRACOPYN($0,$1,$2);";

FSTR_ACOPY_CARD_FSTR:		PP,reads "@0::[]" "@0::asize",writes "@0::[]" "@0::asize",
				exec "FSTRACOPYIF($0,$1,$2);",
				f_exec "if(^0 && ^2) FSTRACOPYIF($0,$1,$2); else F_FSTRACOPYIF($0,$1,$2);";

FSTR_ACOPY_CARD_STR:		PP,reads "@0::[]" "@0::asize",writes "@0::[]" "@0::asize",
				exec "FSTRACOPYIS($0,$1,$2);",
				f_exec "if(^0 && ^2) FSTRACOPYIS($0,$1,$2); else F_FSTRACOPYIS($0,$1,$2);";

FSTR_MEMCMP_FSTR_CARD:		PP,reads "@0::asize" "@0::loc" "@0::[]",var "@r $$;",
				exec "$$=STRISEQHELPER($0,$1,$2);" "$$",
				f_exec "$$=(^0&&^1)?STRISEQHELPER($0,$1,$2):F_STRISEQHELPER(@0,$0,@1,$1,$2);" "$$";
				
FSTR_MEMCMP_STR_CARD:		PP,reads "@0::asize" "@0::loc" "@0::[]",var "@r $$;",
				exec "$$=STRISEQHELPER($0,$1,$2);" "$$",
				f_exec "$$=(^0&&^1)?STRISEQHELPER($0,$1,$2):F_STRISEQHELPER(@0,$0,@1,$1,$2);" "$$";

#endif
