xref: /haiku/src/tests/add-ons/print/ppd/parser/PPDFile.h (revision 4420c1ceffd7f2246e4303d59cf02ed122980e9d)
1 /*
2  * Copyright 2008, Haiku.
3  * Distributed under the terms of the MIT license.
4  *
5  * Authors:
6  *		Michael Pfeiffer <laplace@users.sourceforge.net>
7  */
8 
9 #ifndef _PPD_FILE_H
10 #define _PPD_FILE_H
11 
12 #include <File.h>
13 #include <String.h>
14 
15 class Position {
16 public:
17 	int x;
18 	int y;
Position()19 	Position()             : x(0), y(0) {}
Position(int x,int y)20 	Position(int x, int y) : x(x), y(y) {}
21 };
22 
23 #define kReadBufferSize 1024
24 
25 class FileBuffer {
26 	BFile* fFile;
27 
28 	unsigned char fBuffer[kReadBufferSize];
29 	int           fIndex;
30 	int           fSize;
31 
32 public:
FileBuffer(BFile * file)33 	FileBuffer(BFile* file) : fFile(file), fIndex(0), fSize(0) {}
34 	int Read();
35 };
36 
37 class PPDFile {
38 private:
39 	BString  fFileName;
40 	BFile    fFile;
41 	PPDFile* fPreviousFile; // single linked list of PPD files (stack)
42 	Position fCurrentPosition;
43 	int      fCurrentChar;
44 	FileBuffer fBuffer;
45 
46 public:
47 	// Opens the file for reading. Use IsValid to check if the file could
48 	// be opened successfully.
49 	// PPDFile also maintance a single linked list. The parameter previousFile
50 	// can be used to store a reference to a previous file.
51 	PPDFile(const char* file, PPDFile* previousFile = NULL);
52 	// Closes the file.
53 	~PPDFile();
54 
55 	// Returns the status of the constructor.
56 	status_t InitCheck();
57 
58 	// Returns the current character or -1 if on EOF.
59 	int GetCurrentChar();
60 	// Reads the next character. Use GetChar to read the current
61 	void NextChar();
62 	// Returns the position of the current character.
63 	Position GetPosition();
64 	// The previous file from the constructor.
65 	PPDFile* GetPreviousFile();
66 	// Returns the file name
67 	const char* GetFileName();
68 };
69 
70 #endif
71