/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\ * |_o_o|\\ Copyright (c) 1989 The Software Distillery. * * |. o.| || All Rights Reserved * * | . | || Written by John Toebes and Doug Walker * * | o | || The Software Distillery * * | . |// 235 Trillingham Lane * * ====== Cary, NC 27513 * * BBS:(919)-471-6436 * \* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "pickpack.h" #include "struct.h" #include "viewgen.h" static struct IntuiText IText = { 1,0,JAM2, /* front and back text pens, drawmode and fill byte */ 0,0, /* XY origin relative to container TopLeft */ &TOPAZ80, /* font pointer or NULL for default */ NULL, /* pointer to text */ NULL /* next IntuiText structure */ }; void stviewnew(nw, it, stnode) struct NewWindow **nw; struct IntuiText **it; struct STNODE *stnode; { *nw = &NewWindowStructure1; stnode->d.bdata->Gadget1 = Gadget1; stnode->d.bdata->Gadget3 = Gadget2; stnode->d.bdata->Gadget3 = Gadget3; stnode->d.bdata->Gadget1SInfo = Gadget1SInfo; stnode->d.bdata->Gadget2.NextGadget = &stnode->d.bdata->Gadget1; stnode->d.bdata->Gadget3.NextGadget = &stnode->d.bdata->Gadget2; stnode->d.bdata->Gadget1.SpecialInfo = (APTR)&stnode->d.bdata->Gadget1SInfo; stnode->d.bdata->pos = 0; NewWindowStructure1.FirstGadget = &stnode->d.bdata->Gadget1; *it = NULL; return; } #define HEXASC 44 /* Display the struct FileHandle */ int stviewdisp(n) struct STNODE *n; { return(stviewmove(n, 0)); } /* Display the struct FileHandle */ int stviewmove(n, adj) struct STNODE *n; int adj; { char data[100]; char *p; int i, off, len; int dlines, wlines; int hpot, hbody; INITTEXT(14) BUG(1, ("stviewdisp: Entry, stnode 0x%08x window 0x%08x\n", n, n->w)) IText.IText = (UBYTE *)data; wlines = (n->w->Height - 13)/9; dlines = n->d.vdata->lines; if (wlines >= dlines) { off = 0; hpot = 0; hbody = -1; } else { if (n->d.bdata->Gadget1SInfo.VertPot == 0xffff) off = dlines-wlines+adj; else off = ((n->d.bdata->Gadget1SInfo.VertPot*(dlines-wlines)+32000) >> 16)+adj; if (off >= dlines-wlines) { hpot = -1; off = dlines-wlines; } else if (off <= 0) { off = 0; hpot = 0; } else hpot = (off<<16)/(dlines-wlines); hbody = (wlines<<16)/dlines; dlines = wlines; } /* Off is the line number I expect to go to */ /* n->d.vdata->pos is the current line number */ /* n->d.vdata->posptr is the pointer to the current line */ /* wlines is the number of lines on the screen */ /* dlines is the number of data lines to be displayed */ BUG(3,("hpot=%d hbody=%d dlines=%d wlines=%d\n",hpot,hbody,dlines,wlines)) ModifyProp(&n->d.bdata->Gadget1, n->w, NULL, AUTOKNOB+FREEVERT, -1, hpot, -1, hbody); /* Now get our pointer to the correct line */ if (off <= n->d.vdata->pos) { p = n->d.vdata->buf; n->d.vdata->pos = off; } else { p = n->d.vdata->posptr; if (p == NULL) p = n->d.vdata->buf; off -= n->d.vdata->pos; n->d.vdata->pos += off; } while(off--) p += strlen(p)+1; /* We are pointing at the first line of the page */ n->d.vdata->posptr = p; for(i = 0; i 95) len = 95; memcpy(data, p, len); data[95] = 0; p += strlen(p)+1; SHOWTEXT } memset(data, ' ', 95); data[95] = 0; while(i++ < wlines) { SHOWTEXT } BUG(1, ("stviewdisp: Exit\n")) return(RC_OK); }