1//
2// "$Id: ppdc-file.cxx 3757 2012-03-30 06:13:47Z msweet $"
3//
4//   File class for the CUPS PPD Compiler.
5//
6//   Copyright 2007-2010 by Apple Inc.
7//   Copyright 2002-2005 by Easy Software Products.
8//
9//   These coded instructions, statements, and computer programs are the
10//   property of Apple Inc. and are protected by Federal copyright
11//   law.  Distribution and use rights are outlined in the file "LICENSE.txt"
12//   which should have been included with this file.  If this file is
13//   file is missing or damaged, see the license at "http://www.cups.org/".
14//
15// Contents:
16//
17//   ppdcFile::ppdcFile()  - Create (open) a file.
18//   ppdcFile::~ppdcFile() - Delete (close) a file.
19//   ppdcFile::get()       - Get a character from a file.
20//   ppdcFile::peek()      - Look at the next character from a file.
21//
22
23//
24// Include necessary headers...
25//
26
27#include "ppdc-private.h"
28
29
30//
31// 'ppdcFile::ppdcFile()' - Create (open) a file.
32//
33
34ppdcFile::ppdcFile(const char  *f,		// I - File to open
35                   cups_file_t *ffp)		// I - File pointer to use
36{
37  if (ffp)
38  {
39    fp = ffp;
40    cupsFileRewind(fp);
41  }
42  else
43    fp = cupsFileOpen(f, "r");
44
45  close_on_delete = !ffp;
46  filename        = f;
47  line            = 1;
48
49  if (!fp)
50    _cupsLangPrintf(stderr, _("ppdc: Unable to open %s: %s"), f,
51                    strerror(errno));
52}
53
54
55//
56// 'ppdcFile::~ppdcFile()' - Delete (close) a file.
57//
58
59ppdcFile::~ppdcFile()
60{
61  if (close_on_delete && fp)
62    cupsFileClose(fp);
63}
64
65
66//
67// 'ppdcFile::get()' - Get a character from a file.
68//
69
70int
71ppdcFile::get()
72{
73  int	ch;					// Character from file
74
75
76  // Return EOF if there is no open file...
77  if (!fp)
78    return (EOF);
79
80  // Get the character...
81  ch = cupsFileGetChar(fp);
82
83  // Update the line number as needed...
84  if (ch == '\n')
85    line ++;
86
87  // Return the character...
88  return (ch);
89}
90
91
92//
93// 'ppdcFile::peek()' - Look at the next character from a file.
94//
95
96int					// O - Next character in file
97ppdcFile::peek()
98{
99  // Return immediaely if there is no open file...
100  if (!fp)
101    return (EOF);
102
103  // Otherwise return the next character without advancing...
104  return (cupsFilePeekChar(fp));
105}
106
107
108//
109// End of "$Id: ppdc-file.cxx 3757 2012-03-30 06:13:47Z msweet $".
110//
111