minloc1.m4: Update copyright year and ajust headers order.
[platform/upstream/gcc.git] / libgfortran / io / list_read.c
1 /* Copyright (C) 2002, 2003, 2004, 2005, 2007 Free Software Foundation, Inc.
2    Contributed by Andy Vaught
3    Namelist input contributed by Paul Thomas
4
5 This file is part of the GNU Fortran 95 runtime library (libgfortran).
6
7 Libgfortran is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
10 any later version.
11
12 In addition to the permissions in the GNU General Public License, the
13 Free Software Foundation gives you unlimited permission to link the
14 compiled version of this file into combinations with other programs,
15 and to distribute those combinations without any restriction coming
16 from the use of this file.  (The General Public License restrictions
17 do apply in other respects; for example, they cover modification of
18 the file, and distribution when not linked into a combine
19 executable.)
20
21 Libgfortran is distributed in the hope that it will be useful,
22 but WITHOUT ANY WARRANTY; without even the implied warranty of
23 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
24 GNU General Public License for more details.
25
26 You should have received a copy of the GNU General Public License
27 along with Libgfortran; see the file COPYING.  If not, write to
28 the Free Software Foundation, 51 Franklin Street, Fifth Floor,
29 Boston, MA 02110-1301, USA.  */
30
31
32 #include "io.h"
33 #include <string.h>
34 #include <ctype.h>
35
36
37 /* List directed input.  Several parsing subroutines are practically
38    reimplemented from formatted input, the reason being that there are
39    all kinds of small differences between formatted and list directed
40    parsing.  */
41
42
43 /* Subroutines for reading characters from the input.  Because a
44    repeat count is ambiguous with an integer, we have to read the
45    whole digit string before seeing if there is a '*' which signals
46    the repeat count.  Since we can have a lot of potential leading
47    zeros, we have to be able to back up by arbitrary amount.  Because
48    the input might not be seekable, we have to buffer the data
49    ourselves.  */
50
51 #define CASE_DIGITS   case '0': case '1': case '2': case '3': case '4': \
52                       case '5': case '6': case '7': case '8': case '9'
53
54 #define CASE_SEPARATORS  case ' ': case ',': case '/': case '\n': case '\t': \
55                          case '\r'
56
57 /* This macro assumes that we're operating on a variable.  */
58
59 #define is_separator(c) (c == '/' ||  c == ',' || c == '\n' || c == ' ' \
60                          || c == '\t' || c == '\r')
61
62 /* Maximum repeat count.  Less than ten times the maximum signed int32.  */
63
64 #define MAX_REPEAT 200000000
65
66
67 /* Save a character to a string buffer, enlarging it as necessary.  */
68
69 static void
70 push_char (st_parameter_dt *dtp, char c)
71 {
72   char *new;
73
74   if (dtp->u.p.saved_string == NULL)
75     {
76       if (dtp->u.p.scratch == NULL)
77         dtp->u.p.scratch = get_mem (SCRATCH_SIZE);
78       dtp->u.p.saved_string = dtp->u.p.scratch;
79       memset (dtp->u.p.saved_string, 0, SCRATCH_SIZE);
80       dtp->u.p.saved_length = SCRATCH_SIZE;
81       dtp->u.p.saved_used = 0;
82     }
83
84   if (dtp->u.p.saved_used >= dtp->u.p.saved_length)
85     {
86       dtp->u.p.saved_length = 2 * dtp->u.p.saved_length;
87       new = get_mem (2 * dtp->u.p.saved_length);
88
89       memset (new, 0, 2 * dtp->u.p.saved_length);
90
91       memcpy (new, dtp->u.p.saved_string, dtp->u.p.saved_used);
92       if (dtp->u.p.saved_string != dtp->u.p.scratch)
93         free_mem (dtp->u.p.saved_string);
94
95       dtp->u.p.saved_string = new;
96     }
97
98   dtp->u.p.saved_string[dtp->u.p.saved_used++] = c;
99 }
100
101
102 /* Free the input buffer if necessary.  */
103
104 static void
105 free_saved (st_parameter_dt *dtp)
106 {
107   if (dtp->u.p.saved_string == NULL)
108     return;
109
110   if (dtp->u.p.saved_string != dtp->u.p.scratch)
111     free_mem (dtp->u.p.saved_string);
112
113   dtp->u.p.saved_string = NULL;
114   dtp->u.p.saved_used = 0;
115 }
116
117
118 /* Free the line buffer if necessary.  */
119
120 static void
121 free_line (st_parameter_dt *dtp)
122 {
123   if (dtp->u.p.line_buffer == NULL)
124     return;
125
126   free_mem (dtp->u.p.line_buffer);
127   dtp->u.p.line_buffer = NULL;
128 }
129
130
131 static char
132 next_char (st_parameter_dt *dtp)
133 {
134   int length;
135   gfc_offset record;
136   char c, *p;
137
138   if (dtp->u.p.last_char != '\0')
139     {
140       dtp->u.p.at_eol = 0;
141       c = dtp->u.p.last_char;
142       dtp->u.p.last_char = '\0';
143       goto done;
144     }
145
146   /* Read from line_buffer if enabled.  */
147
148   if (dtp->u.p.line_buffer_enabled)
149     {
150       dtp->u.p.at_eol = 0;
151
152       c = dtp->u.p.line_buffer[dtp->u.p.item_count];
153       if (c != '\0' && dtp->u.p.item_count < 64)
154         {
155           dtp->u.p.line_buffer[dtp->u.p.item_count] = '\0';
156           dtp->u.p.item_count++;
157           goto done;
158         }
159
160         dtp->u.p.item_count = 0;
161         dtp->u.p.line_buffer_enabled = 0;
162     }    
163
164   /* Handle the end-of-record and end-of-file conditions for
165      internal array unit.  */
166   if (is_array_io (dtp))
167     {
168       if (dtp->u.p.at_eof)
169         longjmp (*dtp->u.p.eof_jump, 1);
170
171       /* Check for "end-of-record" condition.  */
172       if (dtp->u.p.current_unit->bytes_left == 0)
173         {
174           c = '\n';
175           record = next_array_record (dtp, dtp->u.p.current_unit->ls);
176
177           /* Check for "end-of-file" condition.  */      
178           if (record == 0)
179             {
180               dtp->u.p.at_eof = 1;
181               goto done;
182             }
183
184           record *= dtp->u.p.current_unit->recl;
185           if (sseek (dtp->u.p.current_unit->s, record) == FAILURE)
186             longjmp (*dtp->u.p.eof_jump, 1);
187
188           dtp->u.p.current_unit->bytes_left = dtp->u.p.current_unit->recl;
189           goto done;
190         }
191     }
192
193   /* Get the next character and handle end-of-record conditions.  */
194
195   length = 1;
196
197   p = salloc_r (dtp->u.p.current_unit->s, &length);
198   
199   if (is_stream_io (dtp))
200     dtp->u.p.current_unit->strm_pos++;
201
202   if (is_internal_unit (dtp))
203     {
204       if (is_array_io (dtp))
205         {
206           /* End of record is handled in the next pass through, above.  The
207              check for NULL here is cautionary.  */
208           if (p == NULL)
209             {
210               generate_error (&dtp->common, ERROR_INTERNAL_UNIT, NULL);
211               return '\0';
212             }
213
214           dtp->u.p.current_unit->bytes_left--;
215           c = *p;
216         }
217       else
218         {
219           if (p == NULL)
220             longjmp (*dtp->u.p.eof_jump, 1);
221           if (length == 0)
222             c = '\n';
223           else
224             c = *p;
225         }
226     }
227   else
228     {
229       if (p == NULL)
230         {
231           generate_error (&dtp->common, ERROR_OS, NULL);
232           return '\0';
233         }
234       if (length == 0)
235         longjmp (*dtp->u.p.eof_jump, 1);
236       c = *p;
237     }
238 done:
239   dtp->u.p.at_eol = (c == '\n' || c == '\r');
240   return c;
241 }
242
243
244 /* Push a character back onto the input.  */
245
246 static void
247 unget_char (st_parameter_dt *dtp, char c)
248 {
249   dtp->u.p.last_char = c;
250 }
251
252
253 /* Skip over spaces in the input.  Returns the nonspace character that
254    terminated the eating and also places it back on the input.  */
255
256 static char
257 eat_spaces (st_parameter_dt *dtp)
258 {
259   char c;
260
261   do
262     {
263       c = next_char (dtp);
264     }
265   while (c == ' ' || c == '\t');
266
267   unget_char (dtp, c);
268   return c;
269 }
270
271
272 /* Skip over a separator.  Technically, we don't always eat the whole
273    separator.  This is because if we've processed the last input item,
274    then a separator is unnecessary.  Plus the fact that operating
275    systems usually deliver console input on a line basis.
276
277    The upshot is that if we see a newline as part of reading a
278    separator, we stop reading.  If there are more input items, we
279    continue reading the separator with finish_separator() which takes
280    care of the fact that we may or may not have seen a comma as part
281    of the separator.  */
282
283 static void
284 eat_separator (st_parameter_dt *dtp)
285 {
286   char c, n;
287
288   eat_spaces (dtp);
289   dtp->u.p.comma_flag = 0;
290
291   c = next_char (dtp);
292   switch (c)
293     {
294     case ',':
295       dtp->u.p.comma_flag = 1;
296       eat_spaces (dtp);
297       break;
298
299     case '/':
300       dtp->u.p.input_complete = 1;
301       break;
302
303     case '\r':
304       n = next_char(dtp);
305       if (n == '\n')
306         dtp->u.p.at_eol = 1;
307       else
308         unget_char (dtp, n);
309       break;
310
311     case '\n':
312       dtp->u.p.at_eol = 1;
313       break;
314
315     case '!':
316       if (dtp->u.p.namelist_mode)
317         {                       /* Eat a namelist comment.  */
318           do
319             c = next_char (dtp);
320           while (c != '\n');
321
322           break;
323         }
324
325       /* Fall Through...  */
326
327     default:
328       unget_char (dtp, c);
329       break;
330     }
331 }
332
333
334 /* Finish processing a separator that was interrupted by a newline.
335    If we're here, then another data item is present, so we finish what
336    we started on the previous line.  */
337
338 static void
339 finish_separator (st_parameter_dt *dtp)
340 {
341   char c;
342
343  restart:
344   eat_spaces (dtp);
345
346   c = next_char (dtp);
347   switch (c)
348     {
349     case ',':
350       if (dtp->u.p.comma_flag)
351         unget_char (dtp, c);
352       else
353         {
354           c = eat_spaces (dtp);
355           if (c == '\n' || c == '\r')
356             goto restart;
357         }
358
359       break;
360
361     case '/':
362       dtp->u.p.input_complete = 1;
363       if (!dtp->u.p.namelist_mode)
364         return;
365       break;
366
367     case '\n':
368     case '\r':
369       goto restart;
370
371     case '!':
372       if (dtp->u.p.namelist_mode)
373         {
374           do
375             c = next_char (dtp);
376           while (c != '\n');
377
378           goto restart;
379         }
380
381     default:
382       unget_char (dtp, c);
383       break;
384     }
385 }
386
387
388 /* This function reads characters through to the end of the current line and
389    just ignores them.  */
390
391 static void
392 eat_line (st_parameter_dt *dtp)
393 {
394   char c;
395   if (!is_internal_unit (dtp))
396     do
397       c = next_char (dtp);
398     while (c != '\n');
399 }
400
401
402 /* This function is needed to catch bad conversions so that namelist can
403    attempt to see if dtp->u.p.saved_string contains a new object name rather
404    than a bad value.  */
405
406 static int
407 nml_bad_return (st_parameter_dt *dtp, char c)
408 {
409   if (dtp->u.p.namelist_mode)
410     {
411       dtp->u.p.nml_read_error = 1;
412       unget_char (dtp, c);
413       return 1;
414     }
415   return 0;
416 }
417
418 /* Convert an unsigned string to an integer.  The length value is -1
419    if we are working on a repeat count.  Returns nonzero if we have a
420    range problem.  As a side effect, frees the dtp->u.p.saved_string.  */
421
422 static int
423 convert_integer (st_parameter_dt *dtp, int length, int negative)
424 {
425   char c, *buffer, message[100];
426   int m;
427   GFC_INTEGER_LARGEST v, max, max10;
428
429   buffer = dtp->u.p.saved_string;
430   v = 0;
431
432   max = (length == -1) ? MAX_REPEAT : max_value (length, 1);
433   max10 = max / 10;
434
435   for (;;)
436     {
437       c = *buffer++;
438       if (c == '\0')
439         break;
440       c -= '0';
441
442       if (v > max10)
443         goto overflow;
444       v = 10 * v;
445
446       if (v > max - c)
447         goto overflow;
448       v += c;
449     }
450
451   m = 0;
452
453   if (length != -1)
454     {
455       if (negative)
456         v = -v;
457       set_integer (dtp->u.p.value, v, length);
458     }
459   else
460     {
461       dtp->u.p.repeat_count = v;
462
463       if (dtp->u.p.repeat_count == 0)
464         {
465           sprintf (message, "Zero repeat count in item %d of list input",
466                    dtp->u.p.item_count);
467
468           generate_error (&dtp->common, ERROR_READ_VALUE, message);
469           m = 1;
470         }
471     }
472
473   free_saved (dtp);
474   return m;
475
476  overflow:
477   if (length == -1)
478     sprintf (message, "Repeat count overflow in item %d of list input",
479              dtp->u.p.item_count);
480   else
481     sprintf (message, "Integer overflow while reading item %d",
482              dtp->u.p.item_count);
483
484   free_saved (dtp);
485   generate_error (&dtp->common, ERROR_READ_VALUE, message);
486
487   return 1;
488 }
489
490
491 /* Parse a repeat count for logical and complex values which cannot
492    begin with a digit.  Returns nonzero if we are done, zero if we
493    should continue on.  */
494
495 static int
496 parse_repeat (st_parameter_dt *dtp)
497 {
498   char c, message[100];
499   int repeat;
500
501   c = next_char (dtp);
502   switch (c)
503     {
504     CASE_DIGITS:
505       repeat = c - '0';
506       break;
507
508     CASE_SEPARATORS:
509       unget_char (dtp, c);
510       eat_separator (dtp);
511       return 1;
512
513     default:
514       unget_char (dtp, c);
515       return 0;
516     }
517
518   for (;;)
519     {
520       c = next_char (dtp);
521       switch (c)
522         {
523         CASE_DIGITS:
524           repeat = 10 * repeat + c - '0';
525
526           if (repeat > MAX_REPEAT)
527             {
528               sprintf (message,
529                        "Repeat count overflow in item %d of list input",
530                        dtp->u.p.item_count);
531
532               generate_error (&dtp->common, ERROR_READ_VALUE, message);
533               return 1;
534             }
535
536           break;
537
538         case '*':
539           if (repeat == 0)
540             {
541               sprintf (message,
542                        "Zero repeat count in item %d of list input",
543                        dtp->u.p.item_count);
544
545               generate_error (&dtp->common, ERROR_READ_VALUE, message);
546               return 1;
547             }
548
549           goto done;
550
551         default:
552           goto bad_repeat;
553         }
554     }
555
556  done:
557   dtp->u.p.repeat_count = repeat;
558   return 0;
559
560  bad_repeat:
561
562   eat_line (dtp);
563   free_saved (dtp);
564   sprintf (message, "Bad repeat count in item %d of list input",
565            dtp->u.p.item_count);
566   generate_error (&dtp->common, ERROR_READ_VALUE, message);
567   return 1;
568 }
569
570
571 /* To read a logical we have to look ahead in the input stream to make sure
572     there is not an equal sign indicating a variable name.  To do this we use 
573     line_buffer to point to a temporary buffer, pushing characters there for
574     possible later reading. */
575
576 static void
577 l_push_char (st_parameter_dt *dtp, char c)
578 {
579   if (dtp->u.p.line_buffer == NULL)
580     {
581       dtp->u.p.line_buffer = get_mem (SCRATCH_SIZE);
582       memset (dtp->u.p.line_buffer, 0, SCRATCH_SIZE);
583     }
584
585   dtp->u.p.line_buffer[dtp->u.p.item_count++] = c;
586 }
587
588
589 /* Read a logical character on the input.  */
590
591 static void
592 read_logical (st_parameter_dt *dtp, int length)
593 {
594   char c, message[100];
595   int i, v;
596
597   if (parse_repeat (dtp))
598     return;
599
600   c = tolower (next_char (dtp));
601   l_push_char (dtp, c);
602   switch (c)
603     {
604     case 't':
605       v = 1;
606       c = next_char (dtp);
607       l_push_char (dtp, c);
608
609       if (!is_separator(c))
610         goto possible_name;
611
612       unget_char (dtp, c);
613       break;
614     case 'f':
615       v = 0;
616       c = next_char (dtp);
617       l_push_char (dtp, c);
618
619       if (!is_separator(c))
620         goto possible_name;
621
622       unget_char (dtp, c);
623       break;
624     case '.':
625       c = tolower (next_char (dtp));
626       switch (c)
627         {
628           case 't':
629             v = 1;
630             break;
631           case 'f':
632             v = 0;
633             break;
634           default:
635             goto bad_logical;
636         }
637
638       break;
639
640     CASE_SEPARATORS:
641       unget_char (dtp, c);
642       eat_separator (dtp);
643       return;                   /* Null value.  */
644
645     default:
646       goto bad_logical;
647     }
648
649   dtp->u.p.saved_type = BT_LOGICAL;
650   dtp->u.p.saved_length = length;
651
652   /* Eat trailing garbage.  */
653   do
654     {
655       c = next_char (dtp);
656     }
657   while (!is_separator (c));
658
659   unget_char (dtp, c);
660   eat_separator (dtp);
661   dtp->u.p.item_count = 0;
662   dtp->u.p.line_buffer_enabled = 0;
663   set_integer ((int *) dtp->u.p.value, v, length);
664   free_line (dtp);
665
666   return;
667
668  possible_name:
669
670   for(i = 0; i < 63; i++)
671     {
672       c = next_char (dtp);
673       if (is_separator(c))
674         {
675           /* All done if this is not a namelist read.  */
676           if (!dtp->u.p.namelist_mode)
677             goto logical_done;
678
679           unget_char (dtp, c);
680           eat_separator (dtp);
681           c = next_char (dtp);
682           if (c != '=')
683             {
684               unget_char (dtp, c);
685               goto logical_done;
686             }
687         }
688  
689       l_push_char (dtp, c);
690       if (c == '=')
691         {
692           dtp->u.p.nml_read_error = 1;
693           dtp->u.p.line_buffer_enabled = 1;
694           dtp->u.p.item_count = 0;
695           return;
696         }
697       
698     }
699
700  bad_logical:
701
702   free_line (dtp);
703
704   if (nml_bad_return (dtp, c))
705     return;
706
707   eat_line (dtp);
708   free_saved (dtp);
709   sprintf (message, "Bad logical value while reading item %d",
710               dtp->u.p.item_count);
711   generate_error (&dtp->common, ERROR_READ_VALUE, message);
712   return;
713
714  logical_done:
715
716   dtp->u.p.item_count = 0;
717   dtp->u.p.line_buffer_enabled = 0;
718   dtp->u.p.saved_type = BT_LOGICAL;
719   dtp->u.p.saved_length = length;
720   set_integer ((int *) dtp->u.p.value, v, length);
721   free_saved (dtp);
722   free_line (dtp);
723 }
724
725
726 /* Reading integers is tricky because we can actually be reading a
727    repeat count.  We have to store the characters in a buffer because
728    we could be reading an integer that is larger than the default int
729    used for repeat counts.  */
730
731 static void
732 read_integer (st_parameter_dt *dtp, int length)
733 {
734   char c, message[100];
735   int negative;
736
737   negative = 0;
738
739   c = next_char (dtp);
740   switch (c)
741     {
742     case '-':
743       negative = 1;
744       /* Fall through...  */
745
746     case '+':
747       c = next_char (dtp);
748       goto get_integer;
749
750     CASE_SEPARATORS:            /* Single null.  */
751       unget_char (dtp, c);
752       eat_separator (dtp);
753       return;
754
755     CASE_DIGITS:
756       push_char (dtp, c);
757       break;
758
759     default:
760       goto bad_integer;
761     }
762
763   /* Take care of what may be a repeat count.  */
764
765   for (;;)
766     {
767       c = next_char (dtp);
768       switch (c)
769         {
770         CASE_DIGITS:
771           push_char (dtp, c);
772           break;
773
774         case '*':
775           push_char (dtp, '\0');
776           goto repeat;
777
778         CASE_SEPARATORS:        /* Not a repeat count.  */
779           goto done;
780
781         default:
782           goto bad_integer;
783         }
784     }
785
786  repeat:
787   if (convert_integer (dtp, -1, 0))
788     return;
789
790   /* Get the real integer.  */
791
792   c = next_char (dtp);
793   switch (c)
794     {
795     CASE_DIGITS:
796       break;
797
798     CASE_SEPARATORS:
799       unget_char (dtp, c);
800       eat_separator (dtp);
801       return;
802
803     case '-':
804       negative = 1;
805       /* Fall through...  */
806
807     case '+':
808       c = next_char (dtp);
809       break;
810     }
811
812  get_integer:
813   if (!isdigit (c))
814     goto bad_integer;
815   push_char (dtp, c);
816
817   for (;;)
818     {
819       c = next_char (dtp);
820       switch (c)
821         {
822         CASE_DIGITS:
823           push_char (dtp, c);
824           break;
825
826         CASE_SEPARATORS:
827           goto done;
828
829         default:
830           goto bad_integer;
831         }
832     }
833
834  bad_integer:
835
836   if (nml_bad_return (dtp, c))
837     return;
838   
839   eat_line (dtp);
840   free_saved (dtp);
841   sprintf (message, "Bad integer for item %d in list input",
842               dtp->u.p.item_count);
843   generate_error (&dtp->common, ERROR_READ_VALUE, message);
844
845   return;
846
847  done:
848   unget_char (dtp, c);
849   eat_separator (dtp);
850
851   push_char (dtp, '\0');
852   if (convert_integer (dtp, length, negative))
853     {
854        free_saved (dtp);
855        return;
856     }
857
858   free_saved (dtp);
859   dtp->u.p.saved_type = BT_INTEGER;
860 }
861
862
863 /* Read a character variable.  */
864
865 static void
866 read_character (st_parameter_dt *dtp, int length __attribute__ ((unused)))
867 {
868   char c, quote, message[100];
869
870   quote = ' ';                  /* Space means no quote character.  */
871
872   c = next_char (dtp);
873   switch (c)
874     {
875     CASE_DIGITS:
876       push_char (dtp, c);
877       break;
878
879     CASE_SEPARATORS:
880       unget_char (dtp, c);              /* NULL value.  */
881       eat_separator (dtp);
882       return;
883
884     case '"':
885     case '\'':
886       quote = c;
887       goto get_string;
888
889     default:
890       if (dtp->u.p.namelist_mode)
891         {
892           unget_char (dtp,c);
893           return;
894         }
895       push_char (dtp, c);
896       goto get_string;
897     }
898
899   /* Deal with a possible repeat count.  */
900
901   for (;;)
902     {
903       c = next_char (dtp);
904       switch (c)
905         {
906         CASE_DIGITS:
907           push_char (dtp, c);
908           break;
909
910         CASE_SEPARATORS:
911           unget_char (dtp, c);
912           goto done;            /* String was only digits!  */
913
914         case '*':
915           push_char (dtp, '\0');
916           goto got_repeat;
917
918         default:
919           push_char (dtp, c);
920           goto get_string;      /* Not a repeat count after all.  */
921         }
922     }
923
924  got_repeat:
925   if (convert_integer (dtp, -1, 0))
926     return;
927
928   /* Now get the real string.  */
929
930   c = next_char (dtp);
931   switch (c)
932     {
933     CASE_SEPARATORS:
934       unget_char (dtp, c);              /* Repeated NULL values.  */
935       eat_separator (dtp);
936       return;
937
938     case '"':
939     case '\'':
940       quote = c;
941       break;
942
943     default:
944       push_char (dtp, c);
945       break;
946     }
947
948  get_string:
949   for (;;)
950     {
951       c = next_char (dtp);
952       switch (c)
953         {
954         case '"':
955         case '\'':
956           if (c != quote)
957             {
958               push_char (dtp, c);
959               break;
960             }
961
962           /* See if we have a doubled quote character or the end of
963              the string.  */
964
965           c = next_char (dtp);
966           if (c == quote)
967             {
968               push_char (dtp, quote);
969               break;
970             }
971
972           unget_char (dtp, c);
973           goto done;
974
975         CASE_SEPARATORS:
976           if (quote == ' ')
977             {
978               unget_char (dtp, c);
979               goto done;
980             }
981
982           if (c != '\n' && c != '\r')
983             push_char (dtp, c);
984           break;
985
986         default:
987           push_char (dtp, c);
988           break;
989         }
990     }
991
992   /* At this point, we have to have a separator, or else the string is
993      invalid.  */
994  done:
995   c = next_char (dtp);
996   if (is_separator (c))
997     {
998       unget_char (dtp, c);
999       eat_separator (dtp);
1000       dtp->u.p.saved_type = BT_CHARACTER;
1001     }
1002   else
1003     {
1004       free_saved (dtp);
1005       sprintf (message, "Invalid string input in item %d",
1006                   dtp->u.p.item_count);
1007       generate_error (&dtp->common, ERROR_READ_VALUE, message);
1008     }
1009 }
1010
1011
1012 /* Parse a component of a complex constant or a real number that we
1013    are sure is already there.  This is a straight real number parser.  */
1014
1015 static int
1016 parse_real (st_parameter_dt *dtp, void *buffer, int length)
1017 {
1018   char c, message[100];
1019   int m, seen_dp;
1020
1021   c = next_char (dtp);
1022   if (c == '-' || c == '+')
1023     {
1024       push_char (dtp, c);
1025       c = next_char (dtp);
1026     }
1027
1028   if (!isdigit (c) && c != '.')
1029     goto bad;
1030
1031   push_char (dtp, c);
1032
1033   seen_dp = (c == '.') ? 1 : 0;
1034
1035   for (;;)
1036     {
1037       c = next_char (dtp);
1038       switch (c)
1039         {
1040         CASE_DIGITS:
1041           push_char (dtp, c);
1042           break;
1043
1044         case '.':
1045           if (seen_dp)
1046             goto bad;
1047
1048           seen_dp = 1;
1049           push_char (dtp, c);
1050           break;
1051
1052         case 'e':
1053         case 'E':
1054         case 'd':
1055         case 'D':
1056           push_char (dtp, 'e');
1057           goto exp1;
1058
1059         case '-':
1060         case '+':
1061           push_char (dtp, 'e');
1062           push_char (dtp, c);
1063           c = next_char (dtp);
1064           goto exp2;
1065
1066         CASE_SEPARATORS:
1067           unget_char (dtp, c);
1068           goto done;
1069
1070         default:
1071           goto done;
1072         }
1073     }
1074
1075  exp1:
1076   c = next_char (dtp);
1077   if (c != '-' && c != '+')
1078     push_char (dtp, '+');
1079   else
1080     {
1081       push_char (dtp, c);
1082       c = next_char (dtp);
1083     }
1084
1085  exp2:
1086   if (!isdigit (c))
1087     goto bad;
1088   push_char (dtp, c);
1089
1090   for (;;)
1091     {
1092       c = next_char (dtp);
1093       switch (c)
1094         {
1095         CASE_DIGITS:
1096           push_char (dtp, c);
1097           break;
1098
1099         CASE_SEPARATORS:
1100           unget_char (dtp, c);
1101           goto done;
1102
1103         default:
1104           goto done;
1105         }
1106     }
1107
1108  done:
1109   unget_char (dtp, c);
1110   push_char (dtp, '\0');
1111
1112   m = convert_real (dtp, buffer, dtp->u.p.saved_string, length);
1113   free_saved (dtp);
1114
1115   return m;
1116
1117  bad:
1118
1119   if (nml_bad_return (dtp, c))
1120     return 0;
1121
1122   eat_line (dtp);
1123   free_saved (dtp);
1124   sprintf (message, "Bad floating point number for item %d",
1125               dtp->u.p.item_count);
1126   generate_error (&dtp->common, ERROR_READ_VALUE, message);
1127
1128   return 1;
1129 }
1130
1131
1132 /* Reading a complex number is straightforward because we can tell
1133    what it is right away.  */
1134
1135 static void
1136 read_complex (st_parameter_dt *dtp, int kind, size_t size)
1137 {
1138   char message[100];
1139   char c;
1140
1141   if (parse_repeat (dtp))
1142     return;
1143
1144   c = next_char (dtp);
1145   switch (c)
1146     {
1147     case '(':
1148       break;
1149
1150     CASE_SEPARATORS:
1151       unget_char (dtp, c);
1152       eat_separator (dtp);
1153       return;
1154
1155     default:
1156       goto bad_complex;
1157     }
1158
1159   eat_spaces (dtp);
1160   if (parse_real (dtp, dtp->u.p.value, kind))
1161     return;
1162
1163 eol_1:
1164   eat_spaces (dtp);
1165   c = next_char (dtp);
1166   if (c == '\n' || c== '\r')
1167     goto eol_1;
1168   else
1169     unget_char (dtp, c);
1170
1171   if (next_char (dtp) != ',')
1172     goto bad_complex;
1173
1174 eol_2:
1175   eat_spaces (dtp);
1176   c = next_char (dtp);
1177   if (c == '\n' || c== '\r')
1178     goto eol_2;
1179   else
1180     unget_char (dtp, c);
1181
1182   if (parse_real (dtp, dtp->u.p.value + size / 2, kind))
1183     return;
1184
1185   eat_spaces (dtp);
1186   if (next_char (dtp) != ')')
1187     goto bad_complex;
1188
1189   c = next_char (dtp);
1190   if (!is_separator (c))
1191     goto bad_complex;
1192
1193   unget_char (dtp, c);
1194   eat_separator (dtp);
1195
1196   free_saved (dtp);
1197   dtp->u.p.saved_type = BT_COMPLEX;
1198   return;
1199
1200  bad_complex:
1201
1202   if (nml_bad_return (dtp, c))
1203     return;
1204
1205   eat_line (dtp);
1206   free_saved (dtp);
1207   sprintf (message, "Bad complex value in item %d of list input",
1208               dtp->u.p.item_count);
1209   generate_error (&dtp->common, ERROR_READ_VALUE, message);
1210 }
1211
1212
1213 /* Parse a real number with a possible repeat count.  */
1214
1215 static void
1216 read_real (st_parameter_dt *dtp, int length)
1217 {
1218   char c, message[100];
1219   int seen_dp;
1220
1221   seen_dp = 0;
1222
1223   c = next_char (dtp);
1224   switch (c)
1225     {
1226     CASE_DIGITS:
1227       push_char (dtp, c);
1228       break;
1229
1230     case '.':
1231       push_char (dtp, c);
1232       seen_dp = 1;
1233       break;
1234
1235     case '+':
1236     case '-':
1237       goto got_sign;
1238
1239     CASE_SEPARATORS:
1240       unget_char (dtp, c);              /* Single null.  */
1241       eat_separator (dtp);
1242       return;
1243
1244     default:
1245       goto bad_real;
1246     }
1247
1248   /* Get the digit string that might be a repeat count.  */
1249
1250   for (;;)
1251     {
1252       c = next_char (dtp);
1253       switch (c)
1254         {
1255         CASE_DIGITS:
1256           push_char (dtp, c);
1257           break;
1258
1259         case '.':
1260           if (seen_dp)
1261             goto bad_real;
1262
1263           seen_dp = 1;
1264           push_char (dtp, c);
1265           goto real_loop;
1266
1267         case 'E':
1268         case 'e':
1269         case 'D':
1270         case 'd':
1271           goto exp1;
1272
1273         case '+':
1274         case '-':
1275           push_char (dtp, 'e');
1276           push_char (dtp, c);
1277           c = next_char (dtp);
1278           goto exp2;
1279
1280         case '*':
1281           push_char (dtp, '\0');
1282           goto got_repeat;
1283
1284         CASE_SEPARATORS:
1285           if (c != '\n' &&  c != ',' && c != '\r')
1286             unget_char (dtp, c);
1287           goto done;
1288
1289         default:
1290           goto bad_real;
1291         }
1292     }
1293
1294  got_repeat:
1295   if (convert_integer (dtp, -1, 0))
1296     return;
1297
1298   /* Now get the number itself.  */
1299
1300   c = next_char (dtp);
1301   if (is_separator (c))
1302     {                           /* Repeated null value.  */
1303       unget_char (dtp, c);
1304       eat_separator (dtp);
1305       return;
1306     }
1307
1308   if (c != '-' && c != '+')
1309     push_char (dtp, '+');
1310   else
1311     {
1312     got_sign:
1313       push_char (dtp, c);
1314       c = next_char (dtp);
1315     }
1316
1317   if (!isdigit (c) && c != '.')
1318     goto bad_real;
1319
1320   if (c == '.')
1321     {
1322       if (seen_dp)
1323         goto bad_real;
1324       else
1325         seen_dp = 1;
1326     }
1327
1328   push_char (dtp, c);
1329
1330  real_loop:
1331   for (;;)
1332     {
1333       c = next_char (dtp);
1334       switch (c)
1335         {
1336         CASE_DIGITS:
1337           push_char (dtp, c);
1338           break;
1339
1340         CASE_SEPARATORS:
1341           goto done;
1342
1343         case '.':
1344           if (seen_dp)
1345             goto bad_real;
1346
1347           seen_dp = 1;
1348           push_char (dtp, c);
1349           break;
1350
1351         case 'E':
1352         case 'e':
1353         case 'D':
1354         case 'd':
1355           goto exp1;
1356
1357         case '+':
1358         case '-':
1359           push_char (dtp, 'e');
1360           push_char (dtp, c);
1361           c = next_char (dtp);
1362           goto exp2;
1363
1364         default:
1365           goto bad_real;
1366         }
1367     }
1368
1369  exp1:
1370   push_char (dtp, 'e');
1371
1372   c = next_char (dtp);
1373   if (c != '+' && c != '-')
1374     push_char (dtp, '+');
1375   else
1376     {
1377       push_char (dtp, c);
1378       c = next_char (dtp);
1379     }
1380
1381  exp2:
1382   if (!isdigit (c))
1383     goto bad_real;
1384   push_char (dtp, c);
1385
1386   for (;;)
1387     {
1388       c = next_char (dtp);
1389
1390       switch (c)
1391         {
1392         CASE_DIGITS:
1393           push_char (dtp, c);
1394           break;
1395
1396         CASE_SEPARATORS:
1397           goto done;
1398
1399         default:
1400           goto bad_real;
1401         }
1402     }
1403
1404  done:
1405   unget_char (dtp, c);
1406   eat_separator (dtp);
1407   push_char (dtp, '\0');
1408   if (convert_real (dtp, dtp->u.p.value, dtp->u.p.saved_string, length))
1409     return;
1410
1411   free_saved (dtp);
1412   dtp->u.p.saved_type = BT_REAL;
1413   return;
1414
1415  bad_real:
1416
1417   if (nml_bad_return (dtp, c))
1418     return;
1419
1420   eat_line (dtp);
1421   free_saved (dtp);
1422   sprintf (message, "Bad real number in item %d of list input",
1423               dtp->u.p.item_count);
1424   generate_error (&dtp->common, ERROR_READ_VALUE, message);
1425 }
1426
1427
1428 /* Check the current type against the saved type to make sure they are
1429    compatible.  Returns nonzero if incompatible.  */
1430
1431 static int
1432 check_type (st_parameter_dt *dtp, bt type, int len)
1433 {
1434   char message[100];
1435
1436   if (dtp->u.p.saved_type != BT_NULL && dtp->u.p.saved_type != type)
1437     {
1438       sprintf (message, "Read type %s where %s was expected for item %d",
1439                   type_name (dtp->u.p.saved_type), type_name (type),
1440                   dtp->u.p.item_count);
1441
1442       generate_error (&dtp->common, ERROR_READ_VALUE, message);
1443       return 1;
1444     }
1445
1446   if (dtp->u.p.saved_type == BT_NULL || dtp->u.p.saved_type == BT_CHARACTER)
1447     return 0;
1448
1449   if (dtp->u.p.saved_length != len)
1450     {
1451       sprintf (message,
1452                   "Read kind %d %s where kind %d is required for item %d",
1453                   dtp->u.p.saved_length, type_name (dtp->u.p.saved_type), len,
1454                   dtp->u.p.item_count);
1455       generate_error (&dtp->common, ERROR_READ_VALUE, message);
1456       return 1;
1457     }
1458
1459   return 0;
1460 }
1461
1462
1463 /* Top level data transfer subroutine for list reads.  Because we have
1464    to deal with repeat counts, the data item is always saved after
1465    reading, usually in the dtp->u.p.value[] array.  If a repeat count is
1466    greater than one, we copy the data item multiple times.  */
1467
1468 static void
1469 list_formatted_read_scalar (st_parameter_dt *dtp, bt type, void *p, int kind,
1470                             size_t size)
1471 {
1472   char c;
1473   int m;
1474   jmp_buf eof_jump;
1475
1476   dtp->u.p.namelist_mode = 0;
1477
1478   dtp->u.p.eof_jump = &eof_jump;
1479   if (setjmp (eof_jump))
1480     {
1481       generate_error (&dtp->common, ERROR_END, NULL);
1482       goto cleanup;
1483     }
1484
1485   if (dtp->u.p.first_item)
1486     {
1487       dtp->u.p.first_item = 0;
1488       dtp->u.p.input_complete = 0;
1489       dtp->u.p.repeat_count = 1;
1490       dtp->u.p.at_eol = 0;
1491
1492       c = eat_spaces (dtp);
1493       if (is_separator (c))
1494         {
1495           /* Found a null value.  */
1496           eat_separator (dtp);
1497           dtp->u.p.repeat_count = 0;
1498
1499           /* eat_separator sets this flag if the separator was a comma.  */
1500           if (dtp->u.p.comma_flag)
1501             goto cleanup;
1502
1503           /* eat_separator sets this flag if the separator was a \n or \r.  */
1504           if (dtp->u.p.at_eol)
1505             finish_separator (dtp);
1506           else
1507             goto cleanup;
1508         }
1509
1510     }
1511   else
1512     {
1513       if (dtp->u.p.input_complete)
1514         goto cleanup;
1515
1516       if (dtp->u.p.repeat_count > 0)
1517         {
1518           if (check_type (dtp, type, kind))
1519             return;
1520           goto set_value;
1521         }
1522
1523       if (dtp->u.p.at_eol)
1524         finish_separator (dtp);
1525       else
1526         {
1527           eat_spaces (dtp);
1528           /* Trailing spaces prior to end of line.  */
1529           if (dtp->u.p.at_eol)
1530             finish_separator (dtp);
1531         }
1532
1533       dtp->u.p.saved_type = BT_NULL;
1534       dtp->u.p.repeat_count = 1;
1535     }
1536
1537   switch (type)
1538     {
1539     case BT_INTEGER:
1540       read_integer (dtp, kind);
1541       break;
1542     case BT_LOGICAL:
1543       read_logical (dtp, kind);
1544       break;
1545     case BT_CHARACTER:
1546       read_character (dtp, kind);
1547       break;
1548     case BT_REAL:
1549       read_real (dtp, kind);
1550       break;
1551     case BT_COMPLEX:
1552       read_complex (dtp, kind, size);
1553       break;
1554     default:
1555       internal_error (&dtp->common, "Bad type for list read");
1556     }
1557
1558   if (dtp->u.p.saved_type != BT_CHARACTER && dtp->u.p.saved_type != BT_NULL)
1559     dtp->u.p.saved_length = size;
1560
1561   if ((dtp->common.flags & IOPARM_LIBRETURN_MASK) != IOPARM_LIBRETURN_OK)
1562     goto cleanup;
1563
1564  set_value:
1565   switch (dtp->u.p.saved_type)
1566     {
1567     case BT_COMPLEX:
1568     case BT_INTEGER:
1569     case BT_REAL:
1570     case BT_LOGICAL:
1571       memcpy (p, dtp->u.p.value, size);
1572       break;
1573
1574     case BT_CHARACTER:
1575       if (dtp->u.p.saved_string)
1576        {
1577           m = ((int) size < dtp->u.p.saved_used)
1578               ? (int) size : dtp->u.p.saved_used;
1579           memcpy (p, dtp->u.p.saved_string, m);
1580        }
1581       else
1582         /* Just delimiters encountered, nothing to copy but SPACE.  */
1583         m = 0;
1584
1585       if (m < (int) size)
1586         memset (((char *) p) + m, ' ', size - m);
1587       break;
1588
1589     case BT_NULL:
1590       break;
1591     }
1592
1593   if (--dtp->u.p.repeat_count <= 0)
1594     free_saved (dtp);
1595
1596 cleanup:
1597   dtp->u.p.eof_jump = NULL;
1598 }
1599
1600
1601 void
1602 list_formatted_read (st_parameter_dt *dtp, bt type, void *p, int kind,
1603                      size_t size, size_t nelems)
1604 {
1605   size_t elem;
1606   char *tmp;
1607
1608   tmp = (char *) p;
1609
1610   /* Big loop over all the elements.  */
1611   for (elem = 0; elem < nelems; elem++)
1612     {
1613       dtp->u.p.item_count++;
1614       list_formatted_read_scalar (dtp, type, tmp + size*elem, kind, size);
1615     }
1616 }
1617
1618
1619 /* Finish a list read.  */
1620
1621 void
1622 finish_list_read (st_parameter_dt *dtp)
1623 {
1624   char c;
1625
1626   free_saved (dtp);
1627
1628   if (dtp->u.p.at_eol)
1629     {
1630       dtp->u.p.at_eol = 0;
1631       return;
1632     }
1633
1634   do
1635     {
1636       c = next_char (dtp);
1637     }
1638   while (c != '\n');
1639 }
1640
1641 /*                      NAMELIST INPUT
1642
1643 void namelist_read (st_parameter_dt *dtp)
1644 calls:
1645    static void nml_match_name (char *name, int len)
1646    static int nml_query (st_parameter_dt *dtp)
1647    static int nml_get_obj_data (st_parameter_dt *dtp,
1648                                 namelist_info **prev_nl, char *)
1649 calls:
1650       static void nml_untouch_nodes (st_parameter_dt *dtp)
1651       static namelist_info * find_nml_node (st_parameter_dt *dtp,
1652                                             char * var_name)
1653       static int nml_parse_qualifier(descriptor_dimension * ad,
1654                                      array_loop_spec * ls, int rank, char *)
1655       static void nml_touch_nodes (namelist_info * nl)
1656       static int nml_read_obj (namelist_info *nl, index_type offset,
1657                                namelist_info **prev_nl, char *,
1658                                index_type clow, index_type chigh)
1659 calls:
1660       -itself-  */
1661
1662 /* Inputs a rank-dimensional qualifier, which can contain
1663    singlets, doublets, triplets or ':' with the standard meanings.  */
1664
1665 static try
1666 nml_parse_qualifier (st_parameter_dt *dtp, descriptor_dimension *ad,
1667                      array_loop_spec *ls, int rank, char *parse_err_msg)
1668 {
1669   int dim;
1670   int indx;
1671   int neg;
1672   int null_flag;
1673   int is_array_section;
1674   char c;
1675
1676   is_array_section = 0;
1677   dtp->u.p.expanded_read = 0;
1678
1679   /* The next character in the stream should be the '('.  */
1680
1681   c = next_char (dtp);
1682
1683   /* Process the qualifier, by dimension and triplet.  */
1684
1685   for (dim=0; dim < rank; dim++ )
1686     {
1687       for (indx=0; indx<3; indx++)
1688         {
1689           free_saved (dtp);
1690           eat_spaces (dtp);
1691           neg = 0;
1692
1693           /* Process a potential sign.  */
1694           c = next_char (dtp);
1695           switch (c)
1696             {
1697             case '-':
1698               neg = 1;
1699               break;
1700
1701             case '+':
1702               break;
1703
1704             default:
1705               unget_char (dtp, c);
1706               break;
1707             }
1708
1709           /* Process characters up to the next ':' , ',' or ')'.  */
1710           for (;;)
1711             {
1712               c = next_char (dtp);
1713
1714               switch (c)
1715                 {
1716                 case ':':
1717                   is_array_section = 1;
1718                   break;
1719
1720                 case ',': case ')':
1721                   if ((c==',' && dim == rank -1)
1722                       || (c==')' && dim < rank -1))
1723                     {
1724                       sprintf (parse_err_msg,
1725                                "Bad number of index fields");
1726                       goto err_ret;
1727                     }
1728                   break;
1729
1730                 CASE_DIGITS:
1731                   push_char (dtp, c);
1732                   continue;
1733
1734                 case ' ': case '\t':
1735                   eat_spaces (dtp);
1736                   c = next_char (dtp);
1737                   break;
1738
1739                 default:
1740                   sprintf (parse_err_msg, "Bad character in index");
1741                   goto err_ret;
1742                 }
1743
1744               if ((c == ',' || c == ')') && indx == 0
1745                   && dtp->u.p.saved_string == 0)
1746                 {
1747                   sprintf (parse_err_msg, "Null index field");
1748                   goto err_ret;
1749                 }
1750
1751               if ((c == ':' && indx == 1 && dtp->u.p.saved_string == 0)
1752                   || (indx == 2 && dtp->u.p.saved_string == 0))
1753                 {
1754                   sprintf(parse_err_msg, "Bad index triplet");
1755                   goto err_ret;
1756                 }
1757
1758               /* If '( : ? )' or '( ? : )' break and flag read failure.  */
1759               null_flag = 0;
1760               if ((c == ':' && indx == 0 && dtp->u.p.saved_string == 0)
1761                   || (indx==1 && dtp->u.p.saved_string == 0))
1762                 {
1763                   null_flag = 1;
1764                   break;
1765                 }
1766
1767               /* Now read the index.  */
1768               if (convert_integer (dtp, sizeof(ssize_t), neg))
1769                 {
1770                   sprintf (parse_err_msg, "Bad integer in index");
1771                   goto err_ret;
1772                 }
1773               break;
1774             }
1775
1776           /* Feed the index values to the triplet arrays.  */
1777           if (!null_flag)
1778             {
1779               if (indx == 0)
1780                 memcpy (&ls[dim].start, dtp->u.p.value, sizeof(ssize_t));
1781               if (indx == 1)
1782                 memcpy (&ls[dim].end, dtp->u.p.value, sizeof(ssize_t));
1783               if (indx == 2)
1784                 memcpy (&ls[dim].step, dtp->u.p.value, sizeof(ssize_t));
1785             }
1786
1787           /* Singlet or doublet indices.  */
1788           if (c==',' || c==')')
1789             {
1790               if (indx == 0)
1791                 {
1792                   memcpy (&ls[dim].start, dtp->u.p.value, sizeof(ssize_t));
1793
1794                   /*  If -std=f95/2003 or an array section is specified,
1795                       do not allow excess data to be processed.  */
1796                   if (is_array_section == 1
1797                       || compile_options.allow_std < GFC_STD_GNU)
1798                     ls[dim].end = ls[dim].start;
1799                   else
1800                     dtp->u.p.expanded_read = 1;
1801                 }
1802               break;
1803             }
1804         }
1805
1806       /* Check the values of the triplet indices.  */
1807       if ((ls[dim].start > (ssize_t)ad[dim].ubound)
1808           || (ls[dim].start < (ssize_t)ad[dim].lbound)
1809           || (ls[dim].end > (ssize_t)ad[dim].ubound)
1810           || (ls[dim].end < (ssize_t)ad[dim].lbound))
1811         {
1812           sprintf (parse_err_msg, "Index %d out of range", dim + 1);
1813           goto err_ret;
1814         }
1815       if (((ls[dim].end - ls[dim].start ) * ls[dim].step < 0)
1816           || (ls[dim].step == 0))
1817         {
1818           sprintf (parse_err_msg, "Bad range in index %d", dim + 1);
1819           goto err_ret;
1820         }
1821
1822       /* Initialise the loop index counter.  */
1823       ls[dim].idx = ls[dim].start;
1824     }
1825   eat_spaces (dtp);
1826   return SUCCESS;
1827
1828 err_ret:
1829
1830   return FAILURE;
1831 }
1832
1833 static namelist_info *
1834 find_nml_node (st_parameter_dt *dtp, char * var_name)
1835 {
1836   namelist_info * t = dtp->u.p.ionml;
1837   while (t != NULL)
1838     {
1839       if (strcmp (var_name, t->var_name) == 0)
1840         {
1841           t->touched = 1;
1842           return t;
1843         }
1844       t = t->next;
1845     }
1846   return NULL;
1847 }
1848
1849 /* Visits all the components of a derived type that have
1850    not explicitly been identified in the namelist input.
1851    touched is set and the loop specification initialised
1852    to default values  */
1853
1854 static void
1855 nml_touch_nodes (namelist_info * nl)
1856 {
1857   index_type len = strlen (nl->var_name) + 1;
1858   int dim;
1859   char * ext_name = (char*)get_mem (len + 1);
1860   memcpy (ext_name, nl->var_name, len-1);
1861   memcpy (ext_name + len - 1, "%", 2);
1862   for (nl = nl->next; nl; nl = nl->next)
1863     {
1864       if (strncmp (nl->var_name, ext_name, len) == 0)
1865         {
1866           nl->touched = 1;
1867           for (dim=0; dim < nl->var_rank; dim++)
1868             {
1869               nl->ls[dim].step = 1;
1870               nl->ls[dim].end = nl->dim[dim].ubound;
1871               nl->ls[dim].start = nl->dim[dim].lbound;
1872               nl->ls[dim].idx = nl->ls[dim].start;
1873             }
1874         }
1875       else
1876         break;
1877     }
1878   free_mem (ext_name);
1879   return;
1880 }
1881
1882 /* Resets touched for the entire list of nml_nodes, ready for a
1883    new object.  */
1884
1885 static void
1886 nml_untouch_nodes (st_parameter_dt *dtp)
1887 {
1888   namelist_info * t;
1889   for (t = dtp->u.p.ionml; t; t = t->next)
1890     t->touched = 0;
1891   return;
1892 }
1893
1894 /* Attempts to input name to namelist name.  Returns
1895    dtp->u.p.nml_read_error = 1 on no match.  */
1896
1897 static void
1898 nml_match_name (st_parameter_dt *dtp, const char *name, index_type len)
1899 {
1900   index_type i;
1901   char c;
1902   dtp->u.p.nml_read_error = 0;
1903   for (i = 0; i < len; i++)
1904     {
1905       c = next_char (dtp);
1906       if (tolower (c) != tolower (name[i]))
1907         {
1908           dtp->u.p.nml_read_error = 1;
1909           break;
1910         }
1911     }
1912 }
1913
1914 /* If the namelist read is from stdin, output the current state of the
1915    namelist to stdout.  This is used to implement the non-standard query
1916    features, ? and =?. If c == '=' the full namelist is printed. Otherwise
1917    the names alone are printed.  */
1918
1919 static void
1920 nml_query (st_parameter_dt *dtp, char c)
1921 {
1922   gfc_unit * temp_unit;
1923   namelist_info * nl;
1924   index_type len;
1925   char * p;
1926
1927   if (dtp->u.p.current_unit->unit_number != options.stdin_unit)
1928     return;
1929
1930   /* Store the current unit and transfer to stdout.  */
1931
1932   temp_unit = dtp->u.p.current_unit;
1933   dtp->u.p.current_unit = find_unit (options.stdout_unit);
1934
1935   if (dtp->u.p.current_unit)
1936     {
1937       dtp->u.p.mode = WRITING;
1938       next_record (dtp, 0);
1939
1940       /* Write the namelist in its entirety.  */
1941
1942       if (c == '=')
1943         namelist_write (dtp);
1944
1945       /* Or write the list of names.  */
1946
1947       else
1948         {
1949
1950           /* "&namelist_name\n"  */
1951
1952           len = dtp->namelist_name_len;
1953 #ifdef HAVE_CRLF
1954           p = write_block (dtp, len + 3);
1955 #else
1956           p = write_block (dtp, len + 2);
1957 #endif
1958           if (!p)
1959             goto query_return;
1960           memcpy (p, "&", 1);
1961           memcpy ((char*)(p + 1), dtp->namelist_name, len);
1962 #ifdef HAVE_CRLF
1963           memcpy ((char*)(p + len + 1), "\r\n", 2);
1964 #else
1965           memcpy ((char*)(p + len + 1), "\n", 1);
1966 #endif
1967           for (nl = dtp->u.p.ionml; nl; nl = nl->next)
1968             {
1969
1970               /* " var_name\n"  */
1971
1972               len = strlen (nl->var_name);
1973 #ifdef HAVE_CRLF
1974               p = write_block (dtp, len + 3);
1975 #else
1976               p = write_block (dtp, len + 2);
1977 #endif
1978               if (!p)
1979                 goto query_return;
1980               memcpy (p, " ", 1);
1981               memcpy ((char*)(p + 1), nl->var_name, len);
1982 #ifdef HAVE_CRLF
1983               memcpy ((char*)(p + len + 1), "\r\n", 2);
1984 #else
1985               memcpy ((char*)(p + len + 1), "\n", 1);
1986 #endif
1987             }
1988
1989           /* "&end\n"  */
1990
1991 #ifdef HAVE_CRLF
1992           p = write_block (dtp, 6);
1993 #else
1994           p = write_block (dtp, 5);
1995 #endif
1996           if (!p)
1997             goto query_return;
1998 #ifdef HAVE_CRLF
1999           memcpy (p, "&end\r\n", 6);
2000 #else
2001           memcpy (p, "&end\n", 5);
2002 #endif
2003         }
2004
2005       /* Flush the stream to force immediate output.  */
2006
2007       flush (dtp->u.p.current_unit->s);
2008       unlock_unit (dtp->u.p.current_unit);
2009     }
2010
2011 query_return:
2012
2013   /* Restore the current unit.  */
2014
2015   dtp->u.p.current_unit = temp_unit;
2016   dtp->u.p.mode = READING;
2017   return;
2018 }
2019
2020 /* Reads and stores the input for the namelist object nl.  For an array,
2021    the function loops over the ranges defined by the loop specification.
2022    This default to all the data or to the specification from a qualifier.
2023    nml_read_obj recursively calls itself to read derived types. It visits
2024    all its own components but only reads data for those that were touched
2025    when the name was parsed.  If a read error is encountered, an attempt is
2026    made to return to read a new object name because the standard allows too
2027    little data to be available.  On the other hand, too much data is an
2028    error.  */
2029
2030 static try
2031 nml_read_obj (st_parameter_dt *dtp, namelist_info * nl, index_type offset,
2032               namelist_info **pprev_nl, char *nml_err_msg,
2033               index_type clow, index_type chigh)
2034 {
2035
2036   namelist_info * cmp;
2037   char * obj_name;
2038   int nml_carry;
2039   int len;
2040   int dim;
2041   index_type dlen;
2042   index_type m;
2043   index_type obj_name_len;
2044   void * pdata;
2045
2046   /* This object not touched in name parsing.  */
2047
2048   if (!nl->touched)
2049     return SUCCESS;
2050
2051   dtp->u.p.repeat_count = 0;
2052   eat_spaces (dtp);
2053
2054   len = nl->len;
2055   switch (nl->type)
2056   {
2057
2058     case GFC_DTYPE_INTEGER:
2059     case GFC_DTYPE_LOGICAL:
2060       dlen = len;
2061       break;
2062
2063     case GFC_DTYPE_REAL:
2064       dlen = size_from_real_kind (len);
2065       break;
2066
2067     case GFC_DTYPE_COMPLEX:
2068       dlen = size_from_complex_kind (len);
2069       break;
2070
2071     case GFC_DTYPE_CHARACTER:
2072       dlen = chigh ? (chigh - clow + 1) : nl->string_length;
2073       break;
2074
2075     default:
2076       dlen = 0;
2077     }
2078
2079   do
2080     {
2081
2082       /* Update the pointer to the data, using the current index vector  */
2083
2084       pdata = (void*)(nl->mem_pos + offset);
2085       for (dim = 0; dim < nl->var_rank; dim++)
2086         pdata = (void*)(pdata + (nl->ls[dim].idx - nl->dim[dim].lbound) *
2087                  nl->dim[dim].stride * nl->size);
2088
2089       /* Reset the error flag and try to read next value, if
2090          dtp->u.p.repeat_count=0  */
2091
2092       dtp->u.p.nml_read_error = 0;
2093       nml_carry = 0;
2094       if (--dtp->u.p.repeat_count <= 0)
2095         {
2096           if (dtp->u.p.input_complete)
2097             return SUCCESS;
2098           if (dtp->u.p.at_eol)
2099             finish_separator (dtp);
2100           if (dtp->u.p.input_complete)
2101             return SUCCESS;
2102
2103           /* GFC_TYPE_UNKNOWN through for nulls and is detected
2104              after the switch block.  */
2105
2106           dtp->u.p.saved_type = GFC_DTYPE_UNKNOWN;
2107           free_saved (dtp);
2108
2109           switch (nl->type)
2110           {
2111           case GFC_DTYPE_INTEGER:
2112               read_integer (dtp, len);
2113               break;
2114
2115           case GFC_DTYPE_LOGICAL:
2116               read_logical (dtp, len);
2117               break;
2118
2119           case GFC_DTYPE_CHARACTER:
2120               read_character (dtp, len);
2121               break;
2122
2123           case GFC_DTYPE_REAL:
2124               read_real (dtp, len);
2125               break;
2126
2127           case GFC_DTYPE_COMPLEX:
2128               read_complex (dtp, len, dlen);
2129               break;
2130
2131           case GFC_DTYPE_DERIVED:
2132             obj_name_len = strlen (nl->var_name) + 1;
2133             obj_name = get_mem (obj_name_len+1);
2134             memcpy (obj_name, nl->var_name, obj_name_len-1);
2135             memcpy (obj_name + obj_name_len - 1, "%", 2);
2136
2137             /* If reading a derived type, disable the expanded read warning
2138                since a single object can have multiple reads.  */
2139             dtp->u.p.expanded_read = 0;
2140
2141             /* Now loop over the components. Update the component pointer
2142                with the return value from nml_write_obj.  This loop jumps
2143                past nested derived types by testing if the potential
2144                component name contains '%'.  */
2145
2146             for (cmp = nl->next;
2147                  cmp &&
2148                    !strncmp (cmp->var_name, obj_name, obj_name_len) &&
2149                    !strchr (cmp->var_name + obj_name_len, '%');
2150                  cmp = cmp->next)
2151               {
2152
2153                 if (nml_read_obj (dtp, cmp, (index_type)(pdata - nl->mem_pos),
2154                                   pprev_nl, nml_err_msg, clow, chigh)
2155                     == FAILURE)
2156                   {
2157                     free_mem (obj_name);
2158                     return FAILURE;
2159                   }
2160
2161                 if (dtp->u.p.input_complete)
2162                   {
2163                     free_mem (obj_name);
2164                     return SUCCESS;
2165                   }
2166               }
2167
2168             free_mem (obj_name);
2169             goto incr_idx;
2170
2171           default:
2172             sprintf (nml_err_msg, "Bad type for namelist object %s",
2173                         nl->var_name);
2174             internal_error (&dtp->common, nml_err_msg);
2175             goto nml_err_ret;
2176           }
2177         }
2178
2179       /* The standard permits array data to stop short of the number of
2180          elements specified in the loop specification.  In this case, we
2181          should be here with dtp->u.p.nml_read_error != 0.  Control returns to
2182          nml_get_obj_data and an attempt is made to read object name.  */
2183
2184       *pprev_nl = nl;
2185       if (dtp->u.p.nml_read_error)
2186         {
2187           dtp->u.p.expanded_read = 0;
2188           return SUCCESS;
2189         }
2190
2191       if (dtp->u.p.saved_type == GFC_DTYPE_UNKNOWN)
2192         {
2193           dtp->u.p.expanded_read = 0;
2194           goto incr_idx;
2195         }
2196
2197       /* Note the switch from GFC_DTYPE_type to BT_type at this point.
2198          This comes about because the read functions return BT_types.  */
2199
2200       switch (dtp->u.p.saved_type)
2201       {
2202
2203         case BT_COMPLEX:
2204         case BT_REAL:
2205         case BT_INTEGER:
2206         case BT_LOGICAL:
2207           memcpy (pdata, dtp->u.p.value, dlen);
2208           break;
2209
2210         case BT_CHARACTER:
2211           m = (dlen < dtp->u.p.saved_used) ? dlen : dtp->u.p.saved_used;
2212           pdata = (void*)( pdata + clow - 1 );
2213           memcpy (pdata, dtp->u.p.saved_string, m);
2214           if (m < dlen)
2215             memset ((void*)( pdata + m ), ' ', dlen - m);
2216           break;
2217
2218         default:
2219           break;
2220       }
2221
2222       /* Warn if a non-standard expanded read occurs. A single read of a
2223          single object is acceptable.  If a second read occurs, issue a warning
2224          and set the flag to zero to prevent further warnings.  */
2225       if (dtp->u.p.expanded_read == 2)
2226         {
2227           notify_std (&dtp->common, GFC_STD_GNU, "Non-standard expanded namelist read.");
2228           dtp->u.p.expanded_read = 0;
2229         }
2230
2231       /* If the expanded read warning flag is set, increment it,
2232          indicating that a single read has occurred.  */
2233       if (dtp->u.p.expanded_read >= 1)
2234         dtp->u.p.expanded_read++;
2235
2236       /* Break out of loop if scalar.  */
2237       if (!nl->var_rank)
2238         break;
2239
2240       /* Now increment the index vector.  */
2241
2242 incr_idx:
2243
2244       nml_carry = 1;
2245       for (dim = 0; dim < nl->var_rank; dim++)
2246         {
2247           nl->ls[dim].idx += nml_carry * nl->ls[dim].step;
2248           nml_carry = 0;
2249           if (((nl->ls[dim].step > 0) && (nl->ls[dim].idx > nl->ls[dim].end))
2250               ||
2251               ((nl->ls[dim].step < 0) && (nl->ls[dim].idx < nl->ls[dim].end)))
2252             {
2253               nl->ls[dim].idx = nl->ls[dim].start;
2254               nml_carry = 1;
2255             }
2256         }
2257     } while (!nml_carry);
2258
2259   if (dtp->u.p.repeat_count > 1)
2260     {
2261        sprintf (nml_err_msg, "Repeat count too large for namelist object %s" ,
2262                    nl->var_name );
2263        goto nml_err_ret;
2264     }
2265   return SUCCESS;
2266
2267 nml_err_ret:
2268
2269   return FAILURE;
2270 }
2271
2272 /* Parses the object name, including array and substring qualifiers.  It
2273    iterates over derived type components, touching those components and
2274    setting their loop specifications, if there is a qualifier.  If the
2275    object is itself a derived type, its components and subcomponents are
2276    touched.  nml_read_obj is called at the end and this reads the data in
2277    the manner specified by the object name.  */
2278
2279 static try
2280 nml_get_obj_data (st_parameter_dt *dtp, namelist_info **pprev_nl,
2281                   char *nml_err_msg)
2282 {
2283   char c;
2284   namelist_info * nl;
2285   namelist_info * first_nl = NULL;
2286   namelist_info * root_nl = NULL;
2287   int dim;
2288   int component_flag;
2289   char parse_err_msg[30];
2290   index_type clow, chigh;
2291
2292   /* Look for end of input or object name.  If '?' or '=?' are encountered
2293      in stdin, print the node names or the namelist to stdout.  */
2294
2295   eat_separator (dtp);
2296   if (dtp->u.p.input_complete)
2297     return SUCCESS;
2298
2299   if (dtp->u.p.at_eol)
2300     finish_separator (dtp);
2301   if (dtp->u.p.input_complete)
2302     return SUCCESS;
2303
2304   c = next_char (dtp);
2305   switch (c)
2306     {
2307     case '=':
2308       c = next_char (dtp);
2309       if (c != '?')
2310         {
2311           sprintf (nml_err_msg, "namelist read: misplaced = sign");
2312           goto nml_err_ret;
2313         }
2314       nml_query (dtp, '=');
2315       return SUCCESS;
2316
2317     case '?':
2318       nml_query (dtp, '?');
2319       return SUCCESS;
2320
2321     case '$':
2322     case '&':
2323       nml_match_name (dtp, "end", 3);
2324       if (dtp->u.p.nml_read_error)
2325         {
2326           sprintf (nml_err_msg, "namelist not terminated with / or &end");
2327           goto nml_err_ret;
2328         }
2329     case '/':
2330       dtp->u.p.input_complete = 1;
2331       return SUCCESS;
2332
2333     default :
2334       break;
2335     }
2336
2337   /* Untouch all nodes of the namelist and reset the flag that is set for
2338      derived type components.  */
2339
2340   nml_untouch_nodes (dtp);
2341   component_flag = 0;
2342
2343   /* Get the object name - should '!' and '\n' be permitted separators?  */
2344
2345 get_name:
2346
2347   free_saved (dtp);
2348
2349   do
2350     {
2351       push_char (dtp, tolower(c));
2352       c = next_char (dtp);
2353     } while (!( c=='=' || c==' ' || c=='\t' || c =='(' || c =='%' ));
2354
2355   unget_char (dtp, c);
2356
2357   /* Check that the name is in the namelist and get pointer to object.
2358      Three error conditions exist: (i) An attempt is being made to
2359      identify a non-existent object, following a failed data read or
2360      (ii) The object name does not exist or (iii) Too many data items
2361      are present for an object.  (iii) gives the same error message
2362      as (i)  */
2363
2364   push_char (dtp, '\0');
2365
2366   if (component_flag)
2367     {
2368       size_t var_len = strlen (root_nl->var_name);
2369       size_t saved_len
2370         = dtp->u.p.saved_string ? strlen (dtp->u.p.saved_string) : 0;
2371       char ext_name[var_len + saved_len + 1];
2372
2373       memcpy (ext_name, root_nl->var_name, var_len);
2374       if (dtp->u.p.saved_string)
2375         memcpy (ext_name + var_len, dtp->u.p.saved_string, saved_len);
2376       ext_name[var_len + saved_len] = '\0';
2377       nl = find_nml_node (dtp, ext_name);
2378     }
2379   else
2380     nl = find_nml_node (dtp, dtp->u.p.saved_string);
2381
2382   if (nl == NULL)
2383     {
2384       if (dtp->u.p.nml_read_error && *pprev_nl)
2385         sprintf (nml_err_msg, "Bad data for namelist object %s",
2386                     (*pprev_nl)->var_name);
2387
2388       else
2389         sprintf (nml_err_msg, "Cannot match namelist object name %s",
2390                     dtp->u.p.saved_string);
2391
2392       goto nml_err_ret;
2393     }
2394
2395   /* Get the length, data length, base pointer and rank of the variable.
2396      Set the default loop specification first.  */
2397
2398   for (dim=0; dim < nl->var_rank; dim++)
2399     {
2400       nl->ls[dim].step = 1;
2401       nl->ls[dim].end = nl->dim[dim].ubound;
2402       nl->ls[dim].start = nl->dim[dim].lbound;
2403       nl->ls[dim].idx = nl->ls[dim].start;
2404     }
2405
2406 /* Check to see if there is a qualifier: if so, parse it.*/
2407
2408   if (c == '(' && nl->var_rank)
2409     {
2410       if (nml_parse_qualifier (dtp, nl->dim, nl->ls, nl->var_rank,
2411                                parse_err_msg) == FAILURE)
2412         {
2413           sprintf (nml_err_msg, "%s for namelist variable %s",
2414                       parse_err_msg, nl->var_name);
2415           goto nml_err_ret;
2416         }
2417       c = next_char (dtp);
2418       unget_char (dtp, c);
2419     }
2420
2421   /* Now parse a derived type component. The root namelist_info address
2422      is backed up, as is the previous component level.  The  component flag
2423      is set and the iteration is made by jumping back to get_name.  */
2424
2425   if (c == '%')
2426     {
2427
2428       if (nl->type != GFC_DTYPE_DERIVED)
2429         {
2430           sprintf (nml_err_msg, "Attempt to get derived component for %s",
2431                       nl->var_name);
2432           goto nml_err_ret;
2433         }
2434
2435       if (!component_flag)
2436         first_nl = nl;
2437
2438       root_nl = nl;
2439       component_flag = 1;
2440       c = next_char (dtp);
2441       goto get_name;
2442
2443     }
2444
2445   /* Parse a character qualifier, if present.  chigh = 0 is a default
2446      that signals that the string length = string_length.  */
2447
2448   clow = 1;
2449   chigh = 0;
2450
2451   if (c == '(' && nl->type == GFC_DTYPE_CHARACTER)
2452     {
2453       descriptor_dimension chd[1] = { {1, clow, nl->string_length} };
2454       array_loop_spec ind[1] = { {1, clow, nl->string_length, 1} };
2455
2456       if (nml_parse_qualifier (dtp, chd, ind, 1, parse_err_msg) == FAILURE)
2457         {
2458           sprintf (nml_err_msg, "%s for namelist variable %s",
2459                       parse_err_msg, nl->var_name);
2460           goto nml_err_ret;
2461         }
2462
2463       clow = ind[0].start;
2464       chigh = ind[0].end;
2465
2466       if (ind[0].step != 1)
2467         {
2468           sprintf (nml_err_msg,
2469                       "Bad step in substring for namelist object %s",
2470                       nl->var_name);
2471           goto nml_err_ret;
2472         }
2473
2474       c = next_char (dtp);
2475       unget_char (dtp, c);
2476     }
2477
2478   /* If a derived type touch its components and restore the root
2479      namelist_info if we have parsed a qualified derived type
2480      component.  */
2481
2482   if (nl->type == GFC_DTYPE_DERIVED)
2483     nml_touch_nodes (nl);
2484   if (component_flag)
2485     nl = first_nl;
2486
2487   /*make sure no extraneous qualifiers are there.*/
2488
2489   if (c == '(')
2490     {
2491       sprintf (nml_err_msg, "Qualifier for a scalar or non-character"
2492                   " namelist object %s", nl->var_name);
2493       goto nml_err_ret;
2494     }
2495
2496 /* According to the standard, an equal sign MUST follow an object name. The
2497    following is possibly lax - it allows comments, blank lines and so on to
2498    intervene.  eat_spaces (dtp); c = next_char (dtp); would be compliant*/
2499
2500   free_saved (dtp);
2501
2502   eat_separator (dtp);
2503   if (dtp->u.p.input_complete)
2504     return SUCCESS;
2505
2506   if (dtp->u.p.at_eol)
2507     finish_separator (dtp);
2508   if (dtp->u.p.input_complete)
2509     return SUCCESS;
2510
2511   c = next_char (dtp);
2512
2513   if (c != '=')
2514     {
2515       sprintf (nml_err_msg, "Equal sign must follow namelist object name %s",
2516                   nl->var_name);
2517       goto nml_err_ret;
2518     }
2519
2520   if (nml_read_obj (dtp, nl, 0, pprev_nl, nml_err_msg, clow, chigh) == FAILURE)
2521     goto nml_err_ret;
2522
2523   return SUCCESS;
2524
2525 nml_err_ret:
2526
2527   return FAILURE;
2528 }
2529
2530 /* Entry point for namelist input.  Goes through input until namelist name
2531   is matched.  Then cycles through nml_get_obj_data until the input is
2532   completed or there is an error.  */
2533
2534 void
2535 namelist_read (st_parameter_dt *dtp)
2536 {
2537   char c;
2538   jmp_buf eof_jump;
2539   char nml_err_msg[100];
2540   /* Pointer to the previously read object, in case attempt is made to read
2541      new object name.  Should this fail, error message can give previous
2542      name.  */
2543   namelist_info *prev_nl = NULL;
2544
2545   dtp->u.p.namelist_mode = 1;
2546   dtp->u.p.input_complete = 0;
2547   dtp->u.p.expanded_read = 0;
2548
2549   dtp->u.p.eof_jump = &eof_jump;
2550   if (setjmp (eof_jump))
2551     {
2552       dtp->u.p.eof_jump = NULL;
2553       generate_error (&dtp->common, ERROR_END, NULL);
2554       return;
2555     }
2556
2557   /* Look for &namelist_name .  Skip all characters, testing for $nmlname.
2558      Exit on success or EOF. If '?' or '=?' encountered in stdin, print
2559      node names or namelist on stdout.  */
2560
2561 find_nml_name:
2562   switch (c = next_char (dtp))
2563     {
2564     case '$':
2565     case '&':
2566           break;
2567
2568     case '!':
2569       eat_line (dtp);
2570       goto find_nml_name;
2571
2572     case '=':
2573       c = next_char (dtp);
2574       if (c == '?')
2575         nml_query (dtp, '=');
2576       else
2577         unget_char (dtp, c);
2578       goto find_nml_name;
2579
2580     case '?':
2581       nml_query (dtp, '?');
2582
2583     default:
2584       goto find_nml_name;
2585     }
2586
2587   /* Match the name of the namelist.  */
2588
2589   nml_match_name (dtp, dtp->namelist_name, dtp->namelist_name_len);
2590
2591   if (dtp->u.p.nml_read_error)
2592     goto find_nml_name;
2593
2594   /* A trailing space is required, we give a little lattitude here, 10.9.1.  */ 
2595   c = next_char (dtp);
2596   if (!is_separator(c))
2597     {
2598       unget_char (dtp, c);
2599       goto find_nml_name;
2600     }
2601
2602   /* Ready to read namelist objects.  If there is an error in input
2603      from stdin, output the error message and continue.  */
2604
2605   while (!dtp->u.p.input_complete)
2606     {
2607       if (nml_get_obj_data (dtp, &prev_nl, nml_err_msg) == FAILURE)
2608         {
2609           gfc_unit *u;
2610
2611           if (dtp->u.p.current_unit->unit_number != options.stdin_unit)
2612             goto nml_err_ret;
2613
2614           u = find_unit (options.stderr_unit);
2615           st_printf ("%s\n", nml_err_msg);
2616           if (u != NULL)
2617             {
2618               flush (u->s);
2619               unlock_unit (u);
2620             }
2621         }
2622
2623    }
2624
2625   dtp->u.p.eof_jump = NULL;
2626   free_saved (dtp);
2627   free_line (dtp);
2628   return;
2629
2630   /* All namelist error calls return from here */
2631
2632 nml_err_ret:
2633
2634   dtp->u.p.eof_jump = NULL;
2635   free_saved (dtp);
2636   free_line (dtp);
2637   generate_error (&dtp->common, ERROR_READ_VALUE, nml_err_msg);
2638   return;
2639 }