Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/dvi/dvilib/dl-dvi-file.cc
diff options
context:
space:
mode:
Diffstat (limited to 'dvi/dvilib/dl-dvi-file.cc')
-rwxr-xr-xdvi/dvilib/dl-dvi-file.cc50
1 files changed, 50 insertions, 0 deletions
diff --git a/dvi/dvilib/dl-dvi-file.cc b/dvi/dvilib/dl-dvi-file.cc
new file mode 100755
index 0000000..1739be9
--- /dev/null
+++ b/dvi/dvilib/dl-dvi-file.cc
@@ -0,0 +1,50 @@
+#include "dl-dvi-file.hh"
+#include "dl-dvi-parser.hh"
+
+using namespace DviLib;
+
+DviFile::DviFile (AbstractLoader& l) :
+ loader (l)
+{
+ DviParser parser (loader);
+
+ preamble = parser.parse_preamble ();
+ postamble = parser.parse_postamble ();
+
+ n_pages = 0;
+ uint page_pointer = postamble->last_page_address;
+
+ cout << page_pointer << endl;
+
+ while (page_pointer != (uint)-1)
+ {
+ loader.goto_from_start (page_pointer);
+
+ page_headers[n_pages++] =
+ parser.parse_page_header (&page_pointer);
+ }
+}
+
+DviPage *
+DviFile::get_page (uint n)
+{
+ DviPage *page = pages[n];
+
+ if (n > get_n_pages())
+ return 0;
+
+ if (page == 0)
+ {
+ DviParser parser (loader);
+ DviPageHeader *header;
+ DviProgram *program;
+
+ header = page_headers[n];
+ loader.goto_from_start (header->address + 45);
+ program = parser.parse_program ();
+
+ page = new DviPage (*header, *program);
+ }
+
+ return page;
+}