| # Copyright (C) 2003,2004 Free Software Foundation, Inc. |
| # Contributed by Kelley Cook, June 2004. |
| # Original code from Neil Booth, May 2003. |
| # |
| # This program is free software; you can redistribute it and/or modify it |
| # under the terms of the GNU General Public License as published by the |
| # Free Software Foundation; either version 2, or (at your option) any |
| # later version. |
| # |
| # This program 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 the |
| # 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
| |
| # Some common subroutines for use by opt[ch]-gen.awk. |
| |
| function switch_flags (flags) |
| { |
| flags = " " flags " " |
| result = "0" |
| for (j = 0; j < n_langs; j++) { |
| regex = " " langs[j] " " |
| gsub ( "\\+", "\\+", regex ) |
| if (flags ~ regex) |
| result = result " | " macros[j] |
| } |
| if (flags ~ " Common ") result = result " | CL_COMMON" |
| if (flags ~ " Joined ") result = result " | CL_JOINED" |
| if (flags ~ " JoinedOrMissing ") \ |
| result = result " | CL_JOINED | CL_MISSING_OK" |
| if (flags ~ " Separate ") result = result " | CL_SEPARATE" |
| if (flags ~ " RejectNegative ") result = result " | CL_REJECT_NEGATIVE" |
| if (flags ~ " UInteger ") result = result " | CL_UINTEGER" |
| if (flags ~ " Undocumented ") result = result " | CL_UNDOCUMENTED" |
| if (flags ~ " Report ") result = result " | CL_REPORT" |
| sub( "^0 \\| ", "", result ) |
| return result |
| } |
| |
| function var_args(flags) |
| { |
| if (flags !~ "Var\\(") |
| return "" |
| sub(".*Var\\(", "", flags) |
| sub("\\).*", "", flags) |
| |
| return flags |
| } |
| function var_name(flags) |
| { |
| s = var_args(flags) |
| if (s == "") |
| return ""; |
| sub( ",.*", "", s) |
| return s |
| } |
| function var_set(flags) |
| { |
| s = var_args(flags) |
| if (s !~ ",") |
| return "0, 0" |
| sub( "[^,]*,", "", s) |
| return "1, " s |
| } |
| function var_ref(flags) |
| { |
| name = var_name(flags) |
| if (name == "") |
| return "0" |
| else |
| return "&" name |
| } |