1193323Sed// -*- C++ -*- 2193323Sed/* Copyright (C) 1989, 1990, 1991, 1992, 2004 Free Software Foundation, Inc. 3193323Sed Written by James Clark (jjc@jclark.com) 4193323Sed 5193323SedThis file is part of groff. 6193323Sed 7193323Sedgroff is free software; you can redistribute it and/or modify it under 8193323Sedthe terms of the GNU General Public License as published by the Free 9193323SedSoftware Foundation; either version 2, or (at your option) any later 10263508Sdimversion. 11263508Sdim 12263508Sdimgroff is distributed in the hope that it will be useful, but WITHOUT ANY 13263508SdimWARRANTY; without even the implied warranty of MERCHANTABILITY or 14263508SdimFITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 15263508Sdimfor more details. 16193323Sed 17263508SdimYou should have received a copy of the GNU General Public License along 18263508Sdimwith groff; see the file COPYING. If not, write to the Free Software 19263508SdimFoundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ 20263508Sdim 21263508Sdim#include <ctype.h> 22193323Sed 23193323Sed#include "lib.h" 24193323Sed#include "cset.h" 25193323Sed#include "stringclass.h" 26193323Sed 27263508Sdimextern void change_filename(const char *); 28193323Sedextern void change_lineno(int); 29193323Sed 30193323Sedint interpret_lf_args(const char *p) 31263508Sdim{ 32263508Sdim while (*p == ' ') 33263508Sdim p++; 34263508Sdim if (!csdigit(*p)) 35263508Sdim return 0; 36193323Sed int ln = 0; 37263508Sdim do { 38193323Sed ln *= 10; 39193323Sed ln += *p++ - '0'; 40 } while (csdigit(*p)); 41 if (*p != ' ' && *p != '\n' && *p != '\0') 42 return 0; 43 while (*p == ' ') 44 p++; 45 if (*p == '\0' || *p == '\n') { 46 change_lineno(ln); 47 return 1; 48 } 49 const char *q; 50 for (q = p; 51 *q != '\0' && *q != ' ' && *q != '\n' && *q != '\\'; 52 q++) 53 ; 54 string tem(p, q - p); 55 while (*q == ' ') 56 q++; 57 if (*q != '\n' && *q != '\0') 58 return 0; 59 tem += '\0'; 60 change_filename(tem.contents()); 61 change_lineno(ln); 62 return 1; 63} 64