lf.cpp revision 114402
1// -*- C++ -*- 2/* Copyright (C) 1989, 1990, 1991, 1992 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ 20 21#include <string.h> 22#include <ctype.h> 23#include "cset.h" 24#include "stringclass.h" 25 26extern void change_filename(const char *); 27extern void change_lineno(int); 28 29int interpret_lf_args(const char *p) 30{ 31 while (*p == ' ') 32 p++; 33 if (!csdigit(*p)) 34 return 0; 35 int ln = 0; 36 do { 37 ln *= 10; 38 ln += *p++ - '0'; 39 } while (csdigit(*p)); 40 if (*p != ' ' && *p != '\n' && *p != '\0') 41 return 0; 42 while (*p == ' ') 43 p++; 44 if (*p == '\0' || *p == '\n') { 45 change_lineno(ln); 46 return 1; 47 } 48 const char *q; 49 for (q = p; 50 *q != '\0' && *q != ' ' && *q != '\n' && *q != '\\'; 51 q++) 52 ; 53 string tem(p, q - p); 54 while (*q == ' ') 55 q++; 56 if (*q != '\n' && *q != '\0') 57 return 0; 58 tem += '\0'; 59 change_filename(tem.contents()); 60 change_lineno(ln); 61 return 1; 62} 63