7 register FF *fprev = &froot;
17 while (s < bufend || (rsfp && (s = sv_gets(linestr,rsfp, 0)) != Nullch)) {
19 if (in_eval && !rsfp) {
25 eol = bufend = linestr->sv_ptr + linestr->sv_cur;
27 SV *tmpstr = NEWSV(89,0);
29 sv_setpvn(tmpstr, s, eol-s);
30 av_store(GvAV(curcop->cop_filegv), (int)curcop->cop_line,tmpstr);
34 for (t = s+1; *t == ' ' || *t == '\t'; t++) ;
49 fprev->ff_next = fcmd;
51 for (t=s; t < eol && *t != '@' && *t != '^'; t++) {
61 fcmd->ff_pre = nsavestr(s, t-s);
62 fcmd->ff_presize = t-s;
66 fcmd->ff_flags |= FFf_NOBLANK;
68 fcmd->ff_flags |= FFf_REPEAT;
72 flinebeg = fcmd; /* start values here */
74 fcmd->ff_flags |= FFf_CHOP; /* for doing text filling */
77 fcmd->ff_type = FFt_LINES;
81 fcmd->ff_type = FFt_LEFT;
86 fcmd->ff_type = FFt_RIGHT;
91 fcmd->ff_type = FFt_CENTER;
97 /* Catch the special case @... and handle it as a string
99 if (*s == '.' && s[1] == '.') {
102 fcmd->ff_type = FFt_DECIMAL;
106 /* Read a run_format in the form @####.####, where either group
107 of ### may be empty, or the final .### may be missing. */
115 fcmd->ff_decimals = s-p;
116 fcmd->ff_flags |= FFf_DP;
118 fcmd->ff_decimals = 0;
124 fcmd->ff_type = FFt_LEFT;
127 if (fcmd->ff_flags & FFf_CHOP && *s == '.') {
128 fcmd->ff_flags |= FFf_MORE;
137 (!rsfp || (s = sv_gets(linestr, rsfp, 0)) == Nullch) )
140 if (in_eval && !rsfp) {
146 eol = bufend = linestr->sv_ptr + linestr->sv_cur;
148 SV *tmpstr = NEWSV(90,0);
150 sv_setpvn(tmpstr, s, eol-s);
151 av_store(GvAV(curcop->cop_filegv),
152 (int)curcop->cop_line,tmpstr);
154 if (strnEQ(s,".\n",2)) {
156 yyerror("Missing values line");
157 return froot.ff_next;
163 sv = flinebeg->ff_unparsed = NEWSV(91,eol - s);
164 sv->sv_u.sv_hv = curstash;
166 flinebeg->ff_line = curcop->cop_line;
168 if (!flinebeg->ff_next->ff_type || index(s, ',')) {
170 sv_catpvn(sv, s, eol - s - 1);
171 sv_catpvn(sv,",$$);",5);
176 while (s < eol && isSPACE(*s))
181 case ' ': case '\t': case '\n': case ';':
182 sv_catpvn(sv, t, s - t);
183 sv_catpvn(sv, "," ,1);
184 while (s < eol && (isSPACE(*s) || *s == ';'))
189 sv_catpvn(sv, t, s - t);
191 s = scan_ident(s,eol,tokenbuf,FALSE);
192 sv_catpvn(sv, t, s - t);
194 if (s < eol && *s && index("$'\"",*s))
195 sv_catpvn(sv, ",", 1);
198 sv_catpvn(sv, t, s - t);
201 while (s < eol && (*s != *t || s[-1] == '\\'))
205 sv_catpvn(sv, t, s - t);
207 if (s < eol && *s && index("$'\"",*s))
208 sv_catpvn(sv, ",", 1);
211 yyerror("Please use commas to separate fields");
214 sv_catpvn(sv,"$$);",4);
219 bufptr = SvPV(linestr);
220 yyerror("Format not terminated");
221 return froot.ff_next;