summaryrefslogtreecommitdiff
path: root/dviware/beebe/src/getpgtab.h
blob: 84a6372fbb73a95b7e863f30ecd9d687cfd8a5f5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
/* -*-C-*- getpgtab.h */
/*-->getpgtab*/
/**********************************************************************/
/****************************** getpgtab ******************************/
/**********************************************************************/

void
getpgtab(lastpageptr)
long lastpageptr;

{
    register long p;
    register INT16 i,k;

    (void) FSEEK (dvifp,lastpageptr,0);
    p = lastpageptr;

    for (k = 0; (p != (-1)) && (k < MAXPAGE); ++k)
    {
        page_ptr[MAXPAGE-1-k] = p;
        (void) FSEEK (dvifp,(long) p, 0);

        if ((BYTE)nosignex(dvifp,(BYTE)1) != BOP)
            (void)fatal(
		"getpgtab():  Invalid BOP (beginning-of-page) back chain");

        for (i = 0; i <= 9; ++i)
            (void) nosignex(dvifp,(BYTE)4);   /* discard count0..count9 */
        p = (long)signex(dvifp,(BYTE)4);
    }
    page_count = k;
    if (k >= MAXPAGE)
        (void)warning("getpgtab():  Page table full...rebuild driver with \
larger MAXPAGE");
    else	/* move pointer table to front of array */
        for (k = 0; k < page_count; ++k)
	    page_ptr[k] = page_ptr[MAXPAGE-page_count+k];
}