home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 2 / FFMCD02.bin / new / amigalibdisks / disk944 / blocked / blocked.c < prev    next >
C/C++ Source or Header  |  1993-12-21  |  29KB  |  1,212 lines

  1. /*
  2.  *    Copyright (C) 1989 Andrew Kemmis
  3.  *
  4.  *    All Rights Reserved
  5.  *
  6.  *    Date:    Mar 1989
  7.  */
  8. #define  AK___CRYPT
  9.  
  10. #include <ak/stdak.h>
  11.  
  12. char    Program_name[]    = "BlockEd";
  13. int    Version     = CRYPTNUM(1);
  14. int    MinorVer    = CRYPTNUM(4);
  15. char    Date[]        = "Oct 1993";
  16. char    CRDate[]    = "1989-93";
  17.  
  18. #include <ak/err.h>
  19. #include <ak/err_num.h>
  20. #include <ak/pool.h>
  21. #include <ak/dev.h>
  22. #include <ak/dos.h>
  23. #include <ak/menu.h>
  24. #include <ak/gad.h>
  25. #include <ak/filesystem.h>
  26. #include <ak/rawkey.h>
  27. #include <intuition/intuition.h>
  28. #include <graphics/gfxbase.h>
  29. #include <ctype.h>
  30.  
  31. #include "blocked.qi"
  32.  
  33. #define STRINGJUST    (Hex ? STRINGCENTER : (Left ? 0L : STRINGRIGHT))
  34.  
  35. #define INTUITION_MESSAGE    (1L<<MyWin->UserPort->mp_SigBit)
  36.  
  37. extern    char    *strchr();
  38. extern    char    *strrchr();
  39. extern    struct    Window    *OpenWindow();
  40. extern    struct    Screen    *OpenScreen();
  41. extern    struct    IntuiMessage    *GetMsg();
  42. extern    struct    MenuItem    *ItemAddress();
  43. extern    struct    TextFont    *OpenDiskFont();
  44. extern    LONG    Wait();
  45. extern    void    *AllocMem();
  46.  
  47. int    cli;
  48.  
  49. struct    IBASE    *IBASE = (struct IBASE *)NULL;
  50. struct    GfxBase *GfxBase = (struct GfxBase *)NULL;
  51. struct    Library *DiskfontBase = (struct Library *)NULL;
  52.  
  53. Static    struct    AkMenu    AkMenu = AKMENUINIT;
  54. Static    struct    TextFont    *Opal = (struct TextFont *)NULL;
  55. Static    struct    TextAttr    OpalAttr = { (STRPTR)NULL, 0, 0, 0 };   /* Setup in main */
  56. Static    UWORD    FXSize;
  57. Static    UWORD    FYSize;
  58. Static    UWORD    FYBase;
  59. Static    int    Inhibited = 0;
  60. Static    struct    AkGad    AkGad = AKGADINIT;
  61. Static    struct    Gadget    *BlkGad;
  62. Static    struct    Gadget    *DirGad;
  63. Static    struct    Gadget    *NumGad;
  64.  
  65. Static    char    *Device;
  66.  
  67. Static    struct    AkDevStuff    Stuff = DEVSTUFFINIT;
  68. Static    ulong    TheBlock;
  69. Static    char    TheBlockBuf[10+1];
  70. Static    ulong    CurBlock = 0;
  71. Static    ulong    *Buffer;
  72. Static    ulong    *Buffer2;
  73. Static    uchar    *BufPtr;
  74. Static    long    Dev = -1;
  75. Static    int    LongPos = 0;
  76. Static    int    BytePos = 0;
  77. Static    struct    Menu    *ProjectMenu;
  78. Static    struct    MenuItem    *RestoreItem;
  79. Static    struct    RastPort    *rp;
  80. Static    char    DirBuf[FILENAMELENGTH+1];
  81. Static    char    NumBuf[10+1];
  82.  
  83. #define EDIT_NO     0
  84. #define EDIT_YES    1
  85.  
  86. Static    int    Edit = EDIT_NO;
  87.  
  88. #define MENUFLAGS    (USHORT)MENUENABLED
  89.  
  90. #define ITEMFLAGS    (USHORT)(ITEMTEXT | COMMSEQ | HIGHBOX)
  91. #define MOREITEMFLAGS    (USHORT)(ITEMENABLED | ITEMFLAGS)
  92. #define EXTRAITEMFLAGS    (USHORT)(CHECKIT | MENUTOGGLE | MOREITEMFLAGS)
  93.  
  94. Static    struct    PoolKey GenPoolKey;
  95.  
  96. Static    struct    Screen    *MyScreen = (struct Screen *)NULL;
  97. Static    struct    NewScreen    MyNewScreen =
  98. {
  99.     0,    0,    640,    330,    2,
  100.     0,    1,
  101.     LACE | SPRITES | HIRES,
  102.     CUSTOMSCREEN | SCREENBEHIND | BEEPING,
  103.     &OpalAttr,
  104.     (UBYTE *)Program_name,
  105.     (struct Gadget *)NULL,
  106.     (struct BitMap *)NULL
  107. };
  108.  
  109. Static    struct    Window    *MyWin = (struct Window *)NULL;
  110. Static    struct    NewWindow    MyNewWin =
  111. {
  112.     0, 7,
  113.     640, 323,
  114.     -1, -1,
  115.     MENUVERIFY | MOUSEBUTTONS | GADGETDOWN | GADGETUP | MENUPICK | CLOSEWINDOW | RAWKEY,
  116.     WINDOWCLOSE | SMART_REFRESH | REPORTMOUSE | NOCAREREFRESH | ACTIVATE,
  117.     (struct Gadget *)NULL,
  118.     (struct Image *)NULL,
  119.     (UBYTE *)Program_name,
  120.     (struct Screen *)NULL,
  121.     (struct BitMap *)NULL,
  122.     0, 0, 0, 0,
  123.     CUSTOMSCREEN
  124. };
  125.  
  126. #define MoveTo(x, y)    Move(rp, (long)(x), (long)(y))
  127. #define TextTo(s, n)    Text(rp, (s), (long)(n))
  128.  
  129. Static send(str, x, y, len)
  130. REG    char    *str;
  131. REG    int    x;
  132. REG    int    y;
  133. REG    int    len;
  134. {
  135.     MoveTo(x, y);
  136.     TextTo(str, len);
  137. }
  138.  
  139. #define DSP_BIG     1
  140. #define DSP_MEDIUM    2
  141. #define DSP_TINY    4
  142.  
  143. Static display_num(x, y, num, size, buf)
  144. REG    int    x;
  145. REG    int    y;
  146. REG    ulong    num;
  147. int    size;
  148. char    *buf;
  149. {
  150.     static    char    Str[11];
  151.     REG    int    hex;
  152.     REG    int    dec;
  153.  
  154.     switch (size)
  155.     {
  156.     case DSP_BIG:
  157.         hex = 8;
  158.         dec = 10;
  159.         break;
  160.     case DSP_MEDIUM:
  161.         hex = 4;
  162.         dec = 6;
  163.         break;
  164.     case DSP_TINY:
  165.         hex = 2;
  166.         dec = 4;
  167.         break;
  168.     }
  169.  
  170.     if (!buf)
  171.     {    if (Hex)
  172.             sprintf(Str, " %0*lx ", hex, num);
  173.         else
  174.             if (Left)
  175.                 sprintf(Str, "%-*lu", dec, num);
  176.             else
  177.                 sprintf(Str, "%*lu", dec, num);
  178.  
  179.         send(Str, x, y, dec);
  180.     }
  181.     else
  182.     {    if (Hex)
  183.             sprintf(buf, "%0*lx", hex, num);
  184.         else
  185.             sprintf(buf, "%lu", num);
  186.     }
  187. }
  188.  
  189. #define NXTIMES ((FXSize * 10) + 4)
  190. #define NYTIMES FYSize
  191. #define AXTIMES FXSize
  192. #define AYTIMES FYSize
  193. #define NXPLUS    7
  194. #define NYPLUS    (FYSize * 4)
  195. #define AXPLUS    ((FXSize * 42) + 6)
  196. #define AYPLUS    (FYSize * 4)
  197.  
  198. #define ACTIVE    1
  199. #define BACKGR    0
  200.  
  201. Static display_pos(pos, active)
  202. REG    int    pos;
  203. REG    int    active;
  204. {
  205.     REG    int    xn;
  206.     REG    int    xs;
  207.     REG    int    y;
  208.     REG    uchar    ptr[4];
  209.     int    i;
  210.  
  211.     for (i = (ByteMove ? 0 : 3); i >= 0; i--)
  212.         if (isprint(BufPtr[i+pos]))
  213.             ptr[i] = BufPtr[i+pos];
  214.         else
  215.             ptr[i] = NullChar;
  216.  
  217.     xn = (pos / 4) % 4;
  218.     xs = pos % 16;
  219.     y = pos / 16;
  220.  
  221.     if (active == ACTIVE)
  222.     {    SetAPen(rp, SelectPen);
  223.         SetBPen(rp, OtherPen);
  224.     }
  225.     else
  226.     {    SetAPen(rp, DataPen);
  227.         SetBPen(rp, BackPen);
  228.     }
  229.  
  230.     display_num(xn * NXTIMES + NXPLUS, y * NYTIMES + NYPLUS, Buffer[pos/4], DSP_BIG, NULL);
  231.  
  232.     send(ptr, xs * AXTIMES + AXPLUS, y * AYTIMES + AYPLUS, ByteMove ? 1 : 4);
  233. }
  234.  
  235. #define PT_STR    0
  236. #define PT_NUM    1
  237. #define PT_BUF    2
  238. #define PT_PTR    3
  239. #define PT_NPT    4
  240. #define PT_DEV    5
  241. #define PT_LON    6
  242. #define PT_BYT    7
  243. #define PT_SAV    8
  244. #define PT_END    9
  245.  
  246. #define DRAW_ONCE_ONLY        1
  247. #define DRAW_EACH_BLOCK     2
  248. #define DRAW_EACH_CHECKSUM    4
  249. #define DRAW_EACH_MOVE        8
  250. #define DRAW_MARK_EDIT        16
  251. #define DRAW_UNMARK_EDIT    32
  252.  
  253. #define BLKGAD_SAV    0L
  254. #define DIRGAD_SAV    1L
  255. #define MAX_SAV     1L
  256.  
  257. Static    struct
  258. {    int    x;
  259.     int    y;
  260. } saves[MAX_SAV+1];
  261.  
  262. Static draw_page(often)
  263. REG    int    often;
  264. {
  265.     static struct ScrDat
  266.     {    char    *str;
  267.         int    often;
  268.         int    reset;
  269.         int    xt;
  270.         int    xa;
  271.         int    yt;
  272.         int    ya;
  273.         int    type;
  274.         long    *pen;
  275.     } Page[] =
  276.     {
  277.     "Offset",               1,      1,      1,      2,      2,      4,      PT_STR, &DataPen,
  278.     "O",                    1,      0,      0,      0,      0,      0,      PT_STR, &SelectPen,
  279.     (char *)BLKGAD_SAV,     1,      0,      7,      0,      0,      0,      PT_SAV, NULL,
  280.  
  281.     "Long",                 1,      0,      16,     0,      0,      0,      PT_STR, &DataPen,
  282.     (char *)&LongPos,       10,     0,      5,      0,      0,      0,      PT_LON, &SelectPen,
  283.  
  284.     "Byte",                 1,      0,      11,     0,      0,      0,      PT_STR, &DataPen,
  285.     (char *)&BytePos,       10,     0,      5,      0,      0,      0,      PT_BYT, &SelectPen,
  286.  
  287.     "Root",                 1,      0,      14,     4,      0,      0,      PT_STR, &OtherPen,
  288.     "R",                    1,      0,      0,      0,      0,      0,      PT_STR, &SelectPen,
  289.     (char *)&Stuff.Info.Root, 3,    0,      10,     -4,     0,      0,      PT_NUM, &DataPen,
  290.  
  291.     "Parent",               1,      0,      -10,    4,      1,      4,      PT_STR, &OtherPen,
  292.     "P",                    1,      0,      0,      0,      0,      0,      PT_STR, &SelectPen,
  293.     (char *)POS_PAR,        3,      0,      10,     -4,     0,      0,      PT_BUF, &DataPen,
  294.     "Key",                  1,      0,      -10,    4,      1,      0,      PT_STR, &OtherPen,
  295.     "K",                    1,      0,      0,      0,      0,      0,      PT_STR, &SelectPen,
  296.     (char *)POS_KEY,        3,      0,      10,     -4,     0,      0,      PT_BUF, &DataPen,
  297.     "HashChain",            1,      0,      -10,    4,      1,      0,      PT_STR, &OtherPen,
  298.     "H",                    1,      0,      0,      0,      0,      0,      PT_STR, &SelectPen,
  299.     (char *)POS_HASH_CH,    3,      0,      10,     -4,     0,      0,      PT_BUF, &DataPen,
  300.     "Extension",            1,      0,      -10,    4,      1,      0,      PT_STR, &OtherPen,
  301.     "E",                    1,      0,      0,      0,      0,      0,      PT_STR, &SelectPen,
  302.     (char *)POS_EXT,        3,      0,      10,     -4,     0,      0,      PT_BUF, &DataPen,
  303.     "FirstData",            1,      0,      -10,    4,      1,      0,      PT_STR, &OtherPen,
  304.     "F",                    1,      0,      0,      0,      0,      0,      PT_STR, &SelectPen,
  305.     (char *)POS_FST_DAT,    3,      0,      10,     -4,     0,      0,      PT_BUF, &DataPen,
  306.     "NextData",             1,      0,      -10,    4,      1,      0,      PT_STR, &OtherPen,
  307.     "N",                    1,      0,      0,      0,      0,      0,      PT_STR, &SelectPen,
  308.     (char *)POS_D_NXT_DAT,  3,      0,      10,     -4,     0,      0,      PT_BUF, &DataPen,
  309.     "CheckSum",             1,      0,      -10,    4,      1,      0,      PT_STR, &OtherPen,
  310.     "C",                    1,      0,      0,      0,      0,      0,      PT_STR, &SelectPen,
  311.     (char *)POS_CHKSUM,