nis-util
1.0.D108
|
00001 // 00002 // nis-util - NIS Administration Utilities 00003 // Copyright (C) 2012 Peter Miller 00004 // 00005 // This program is free software; you can redistribute it and/or modify 00006 // it under the terms of the GNU General Public License as published by 00007 // the Free Software Foundation; either version 2 of the License, or (at 00008 // your option) any later version. 00009 // 00010 // This program is distributed in the hope that it will be useful, 00011 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00013 // General Public License for more details. 00014 // 00015 // You should have received a copy of the GNU General Public License along 00016 // with this program. If not, see <http://www.gnu.org/licenses/>. 00017 // 00018 00019 #include <lib/arglex/source/file.h> 00020 #include <lib/input/file.h> 00021 #include <lib/rcstring/accumulator.h> 00022 00023 00024 arglex_source_file::~arglex_source_file() 00025 { 00026 } 00027 00028 00029 arglex_source_file::arglex_source_file(const rcstring &filename) : 00030 ip(input_file::create(filename)) 00031 { 00032 // ip = input_remove_escaped_newlines::create(ip); 00033 // ip = input_remove_comments::create(ip); 00034 } 00035 00036 00037 arglex_source_file::pointer 00038 arglex_source_file::create(const rcstring &filename) 00039 { 00040 return pointer(new arglex_source_file(filename)); 00041 } 00042 00043 00044 bool 00045 arglex_source_file::next(source_location &locn, rcstring &result) 00046 { 00047 for (;;) 00048 { 00049 locn = ip->get_source_location(); 00050 int c = ip->get(); 00051 if (c == input::eof) 00052 return false; 00053 if (isspace(c)) 00054 continue; 00055 // Each argument is separated by white space. 00056 // There is no quoting mechanism. 00057 rcstring_accumulator acc; 00058 for (;;) 00059 { 00060 acc.push_back((unsigned char)c); 00061 c = ip->get(); 00062 if (c == input::eof) 00063 break; 00064 if (isspace(c)) 00065 break; 00066 } 00067 result = acc.mkstr(); 00068 return true; 00069 } 00070 } 00071 00072 00073 // vim: set ts=8 sw=4 et :