/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\ * |_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 "bufgen.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 */ }; static struct IntuiText NameText = { 3,0,JAM2, /* front and back text pens, drawmode and fill byte */ 98,13, /* XY origin relative to container TopLeft */ &TOPAZ80, /* font pointer or NULL for default */ NULL, /* pointer to text */ NULL /* next IntuiText structure */ }; void stbufnew(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 = &IText1; return; } #define HEXASC 44 /* Display the struct FileHandle */ int stbufdisp(n) struct STNODE *n; { return(stbufmove(n, 0)); } /* Display the struct FileHandle */ int stbufmove(n, adj) struct STNODE *n; int adj; { char data[100]; char *dpos, *p; int cyc, c; int bytes; int i, off; int dlines, wlines; int hpot, hbody; INITTEXT(13) BUG(1, ("stbufdisp: Entry, stnode 0x%08x window 0x%08x\n", n, n->w)) wlines = (n->w->Height - 13)/9; dlines = (n->d.bdata->size+15) >> 4; if (wlines >= dlines) { off = 0; hpot = 0; hbody = -1; bytes = n->d.bdata->size; dpos = n->d.bdata->buf; } 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; bytes = n->d.bdata->size-(off*16); if (bytes > wlines*16) bytes = wlines*16; dpos = &n->d.bdata->buf[off*16]; } BUG(3,("bytes=%d hpot=%d hbody=%d dlines=%d wlines=%d\n",bytes,hpot,hbody,dlines,wlines)) ModifyProp(&n->d.bdata->Gadget1, n->w, NULL, AUTOKNOB+FREEVERT, -1, hpot, -1, hbody); /* Now go through and display the data */ off <<= 4; i = 0; while(bytes--) { c = *dpos++ & 0xff; cyc = off&15; if (!cyc) { /* Time to init the output buffer */ sprintf(data, /* 0000: 00000000 00000000 00000000 00000000 *................* */ "%04x: * *", off); } /* - - - - - - - - - - - - - - - - - - - - - - - - */ /* Now fill in the current character slot */ /* - - - - - - - - - - - - - - - - - - - - - - - - */ p = data+6+(cyc<<1)+(cyc>>2); *p++ = "0123456789ABCDEF"[c>>4]; *p++ = "0123456789ABCDEF"[c&15]; /* - - - - - - - - - - - - - - - - - - - - - - - - */ /* Translate all non printing characters to a '.' */ /* This includes the range 0-1F, 7F, 80-9F, FF */ /* - - - - - - - - - - - - - - - - - - - - - - - - */ if (((c+1)&0x7f) <= ' ') c = '.'; data[HEXASC+cyc] = c; off++; if (bytes == 0 || cyc == 15) { /* Display it on the screen */ SHOWTEXT } } strcpy(data, " "); while(i++ < wlines) SHOWTEXT BUG(1, ("stbufdisp: Exit\n")) return(RC_OK); }