home *** CD-ROM | disk | FTP | other *** search
- #include <exec/types.h>
- #include <exec/execbase.h>
- #include <graphics/gfxbase.h>
- #include <intuition/intuition.h>
-
- IMPORT struct ExecBase *SysBase;
-
- extern long _savsp, _stkbase;
-
- struct GfxBase *GfxBase = NULL;
- struct IntuitionBase *IntuitionBase = NULL;
- struct Window *Window = NULL;
- struct RastPort *RP;
-
- UBYTE HexDigits[] = "0123456789ABCDEF";
-
- UBYTE ASCIITop = 0;
- UBYTE InActive = 1;
- UBYTE TinyMode = 0xff;
-
- _main()
- {
- VOID Wait(), ReplyMsg(), *OpenLibrary(), *OpenWindow();
- char tst;
- struct NewWindow nw;
- struct IntuiMessage *msg, *GetMsg();
-
- _stkbase = _savsp - *((long *)_savsp+1) + 8;
- *(long *)_stkbase = 0x4d414e58L;
-
- if (!(GfxBase = OpenLibrary("graphics.library", 0L))) CleanUp();
- if (!(IntuitionBase = OpenLibrary("intuition.library", 0L))) CleanUp();
- nw.LeftEdge = 0; /* 557; */
- nw.TopEdge = 0;
- nw.Width = 83;
- nw.Height = 10;
- nw.DetailPen = -1;
- nw.BlockPen = -1;
- nw.IDCMPFlags = RAWKEY | REFRESHWINDOW | ACTIVEWINDOW | INACTIVEWINDOW;
- nw.Flags = WINDOWDRAG | WINDOWDEPTH | SIMPLE_REFRESH;
- nw.FirstGadget = NULL;
- nw.CheckMark = NULL;
- nw.Title = NULL;
- nw.Type = WBENCHSCREEN;
- if (!(Window = OpenWindow(&nw))) CleanUp();
- RP = Window->RPort;
- SetAPen(RP, 1L);
- SetDrMd(RP, JAM2);
- FOREVER {
- Wait(1L << Window->UserPort->mp_SigBit);
- while (msg = GetMsg(Window->UserPort)) {
- ULONG class;
- UWORD code;
- class = msg->Class;
- code = msg->Code;
- ReplyMsg(msg);
- switch (class) {
- case REFRESHWINDOW:
- ListASCII();
- break;
- case ACTIVEWINDOW:
- InActive = 0;
- if (TinyMode) SizeWindow(Window, 0L, 131L);
- break;
- case INACTIVEWINDOW:
- InActive = 1;
- if (TinyMode) SizeWindow(Window, 0L, -131L);
- case RAWKEY:
- tst = 1;
- switch (code) {
- case 0x45: /* ESC */
- CleanUp();
- break;
- case 0x46: /* DEL */
- TinyMode = ~TinyMode;
- break;
- case 0x4c: /* Up Arrow */
- ASCIITop--;
- break;
- case 0x4d: /* Down Arrow */
- ASCIITop++;
- break;
- case 0x4e: /* Right Arrow */
- ASCIITop += 16;
- break;
- case 0x4f: /* Left Arrow */
- ASCIITop -= 16;
- break;
- default:
- tst = 0;
- break;
- }
- if (tst) ListASCII();
- break;
- } /* switch */
- } /* while */
- } /* FOREVER */
- }
- ListASCII()
- {
- UBYTE i, j;
- UBYTE sbuff[4];
-
- if (InActive && TinyMode)
- return;
- for (i = 17, j = ASCIITop; i < 145; i += 8, j++) {
- DecToString(sbuff, j);
- Move(RP, 5L, (long)i);
- Text(RP, sbuff, 3L);
- Move(RP, 37L, (long)i);
- Text(RP, "$", 1L);
- sbuff[1] = HexDigits[j & 0x0f];
- sbuff[0] = HexDigits[j >> 4];
- Text(RP, sbuff, 2L);
- Move(RP, 69L, (long)i);
- Text(RP, &j, 1L);
- }
- }
-
- DecToString(buf, val)
- UBYTE *buf;
- UBYTE val;
- {
- UBYTE i;
- UBYTE c, hitval;
- UBYTE temp, value;
- UBYTE divider;
-
- value = val;
- i = 0;
- hitval = 0;
- divider = 100;
- while (divider != 1) {
- temp = value / divider;
- value %= divider;
- c = (UBYTE)temp + 0x30;
- if (c != 0x30)
- hitval = 1;
- if (hitval == 0 && c == 0x30)
- buf[i] = 0x20;
- else
- buf[i] = c;
- i++;
- divider /= 10;
- }
- buf[2] = (val % 10) + 0x30;
- }
-
- CleanUp()
- {
- VOID CloseWindow(), CloseLibrary();
- if (Window) CloseWindow(Window);
- if (IntuitionBase) CloseLibrary(IntuitionBase);
- if (GfxBase) CloseLibrary(GfxBase);
-
- {
- #asm
- moveq.l #0,d0
- move.l __savsp#,sp ;get back original stack pointer
- rts ;and exit
- #endasm
- }
- }
-
-