lf.cpp revision 151498
1// -*- C++ -*- 2/* Copyright (C) 1989, 1990, 1991, 1992, 2004 Free Software Foundation, Inc. 3 Written by James Clark (jjc@jclark.com) 4 5This file is part of groff. 6 7groff is free software; you can redistribute it and/or modify it under 8the terms of the GNU General Public License as published by the Free 9Software Foundation; either version 2, or (at your option) any later 10version. 11 12groff is distributed in the hope that it will be useful, but WITHOUT ANY 13WARRANTY; without even the implied warranty of MERCHANTABILITY or 14FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 15for more details. 16 17You should have received a copy of the GNU General Public License along 18with groff; see the file COPYING. If not, write to the Free Software 19Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ 20 21#include <ctype.h> 22 23#include "lib.h" 24#include "cset.h" 25#include "stringclass.h" 26 27extern void change_filename(const char *); 28extern void change_lineno(int); 29 30int interpret_lf_args(const char *p) 31{ 32 while (*p == ' ') 33 p++; 34 if (!csdigit(*p)) 35 return 0; 36 int ln = 0; 37 do { 38 ln *= 10; 39 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