diff options
Diffstat (limited to 'dvi/dvilib/dl-dvi-file.cc')
-rwxr-xr-x | dvi/dvilib/dl-dvi-file.cc | 50 |
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; +} |