You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
- 02111-1307, USA. */
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301, USA. */
#include <config.h>
#include "repeat.h"
#include <stdlib.h>
#include "alloc.h"
#include "command.h"
+#include "dictionary.h"
#include "error.h"
#include "getline.h"
#include "lexer.h"
struct repeat_entry
{
int type; /* 1=variable names, 0=any other. */
- char id[9]; /* Macro identifier. */
+ char id[LONG_NAME_LEN + 1]; /* Macro identifier. */
char **replacement; /* Macro replacement. */
struct repeat_entry *next;
};
static void clean_up (void);
static int internal_cmd_do_repeat (void);
-#if DEBUGGING
-static void debug_print (void);
-static void debug_print_lines (void);
-#endif
-
int
cmd_do_repeat (void)
{
internal_cmd_do_repeat (void)
{
/* Name of first DO REPEAT macro. */
- char first_name[9];
+ char first_name[LONG_NAME_LEN + 1];
/* Current filename. */
const char *current_filename = NULL;
if (!lex_force_id ())
return 0;
for (iter = repeat_tab; iter; iter = iter->next)
- if (!strcmp (iter->id, tokid))
+ if (!strcasecmp (iter->id, tokid))
{
msg (SE, _("Identifier %s is given twice."), tokid);
return 0;
if (token == T_ID)
result = parse_ids (e);
- else if (token == T_NUM)
+ else if (lex_is_number ())
result = parse_numbers (e);
else if (token == T_STRING)
result = parse_strings (e);
}
while (token != '.');
-#if DEBUGGING
- debug_print ();
-#endif
-
/* Read all the lines inside the DO REPEAT ... END REPEAT. */
{
int nest = 1;
}
line_buf_tail->next = NULL;
- /* Show the line list. */
-#if DEBUGGING
- debug_print_lines ();
-#endif
-
/* Make new variables. */
{
struct repeat_entry *iter;
/* Collect an identifier. */
{
- char name[9];
+ char name[LONG_NAME_LEN + 1];
char *start = cp;
char *np = name;
char *substitution;
- while (CHAR_IS_IDN (*cp) && np < &name[8])
+ while (CHAR_IS_IDN (*cp) && np < &name[LONG_NAME_LEN])
*np++ = *cp++;
while (CHAR_IS_IDN (*cp))
cp++;
ds_destroy (&getl_buf);
getl_buf = output;
}
-\f
-/* Debugging code. */
-
-#if DEBUGGING
-static void
-debug_print (void)
-{
- struct repeat_entry *iter;
- int j;
-
- printf ("DO REPEAT\n");
- for (iter = repeat_tab; iter; iter = iter->next)
- {
- printf (" %s%s=", iter->id, iter->type ? "(ids)" : "");
- for (j = 0; j < count; j++)
- printf ("%s ", iter->replacement[j]);
- putc (iter->next ? '/' : '.', stdout);
- printf ("\n");
- }
-}
-
-static void
-debug_print_lines (void)
-{
- struct getl_line_list *iter;
- const char *fn = "(none)";
- int ln = 65536;
-
- printf ("---begin DO REPEAT lines---\n");
- for (iter = line_buf_head; iter; iter = iter->next)
- {
- if (iter->len < 0)
- {
- ln = -iter->len;
- fn = iter->line;
- } else {
- printf ("%s:%d: %s", fn, ln++, iter->line);
- }
- }
- printf ("---end DO REPEAT lines---\n");
-}
-#endif /* DEBUGGING */