home *** CD-ROM | disk | FTP | other *** search
/ Fish 'n' More 2 / fishmore-publicdomainlibraryvol.ii1991xetec.iso / dirs / fileencrypt_379.lzh / FileEncrypt / FileEncrypt.c < prev    next >
C/C++ Source or Header  |  1990-10-11  |  31KB  |  700 lines

  1. /***************************************************************************
  2.  *                                       *
  3.  *                   FILEENCRYPT                     *
  4.  *                                       *
  5.  *     Encrypts & Decrypts any file, you like to hide from curiosity...    *
  6.  *                                       *
  7.  *       Public Domain, by Lorenz Wiest during 30th Jul - 7th Aug '90       *
  8.  *                                       *
  9.  ***************************************************************************/
  10.  
  11. #define TOPY 11 
  12. #define WIDTH 272
  13. #define HEIGHT 155
  14. #define ENCRYPT 0
  15. #define DECRYPT 1
  16.  
  17. #include "exec/types.h"
  18. #include "exec/memory.h"
  19. #include "intuition/intuition.h"
  20. #include "graphics/gfx.h"
  21. #include "graphics/gfxmacros.h"
  22. #include "libraries/dos.h"
  23.  
  24. struct IntuitionBase *IntuitionBase = NULL;
  25. struct GfxBase       *GfxBase       = NULL;
  26. struct IntuiMessage  *Nachricht     = NULL;
  27. struct Window        *Window        = NULL;
  28. struct Remember      *MyRememberKey = NULL;
  29. struct RastPort      *WRast         = NULL;
  30.  
  31. struct NewWindow NewWindow = { 130,30,WIDTH,HEIGHT,0,1,CLOSEWINDOW|GADGETUP,
  32.                                WINDOWDEPTH|WINDOWDRAG|WINDOWCLOSE|ACTIVATE,
  33.                                0,0," FileEncrypt ",0,0,0,0,0,0,WBENCHSCREEN };
  34. ULONG Copy2Chip();
  35.  
  36. #define INTRO 1
  37. #define MODUS 2
  38. #define READ  3
  39. #define WRITE 4
  40. #define KEYWD 5
  41. #define ERROR 6
  42.  
  43. char ReadFile[50]="DF1:\0";
  44. char WriteFile[50]="DF1:\0";
  45. char KeyWord[40]="\0";
  46. char UndoString[40];
  47. int CurrentMode = ENCRYPT;
  48. int Frame=INTRO;
  49. int NextFrame;
  50.  
  51. struct Gadget *Adr;
  52. struct Gadget *FirstGad = NULL;
  53. int            GadgetNumber= 0;
  54.  
  55. UWORD SleepD[] = { 0x0000,0x0000,0x0600,0x0600,0x0f40,0x0f40,0x3fe0,0x3fe0,
  56.                    0x7fe0,0x7fe0,0x61f0,0x7ff0,0x7bf8,0x7ff8,0xf7f8,0xfff8,
  57.                    0x61fc,0x7ffc,0x7f0c,0x7ffc,0x3fde,0x3ffe,0x7fbc,0x7ffc,
  58.                    0x3f0c,0x3ffc,0x1ff8,0x1ff8,0x07f0,0x07f0,0x01c0,0x01c0,
  59.                    0x0700,0x0700,0x0fc0,0x0fc0,0x0680,0x0680,0x0000,0x0000,
  60.                    0x00c0,0x00c0,0x00e0,0x00e0,0x0040,0x0040,0x0000,0x0000 };
  61.  
  62. UWORD Icon1D[] = { 0xE310,0x0001,0x0000,0x0000,0x0000,0x0000,0x003D,0x0017,
  63.                    0x0005,0x0003,0x0001,0x00C0,0xBFC0,0x0000,0x0000,0x0000,
  64.                    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  65.                    0x0400,0x00C4,0x5DC6,0x0001,0x8C88,0x8000,0x0000,0x8000,
  66.                    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  67.                    0x0000,0x003D,0x0017,0x0002,0x0001,0x68E8,0x0300,0x0000,
  68.                    0x0000,0x0000,0x0000,0x0000,0x0000,0x0007,0xFFFF,0xF980,
  69.                    0x0000,0x0007,0xFFFF,0xF9E0,0x0000,0x0000,0x07FF,0xF9F8,
  70.                    0x0000,0x003F,0xF07F,0xF9FE,0x0000,0x01D5,0x5E3F,0xF800,
  71.                    0x0000,0x06BF,0xEB81,0xFFFF,0x8000,0x0FFF,0xFDDC,0x0000,
  72.                    0x0000,0x181F,0xFEFF,0xFFFF,0xFF80,0x300F,0xFF60,0x0000,
  73.                    0x03E0,0x300F,0xFF7F,0xFFFF,0xFFC0,0x300F,0xFF7F,0xFFFF,
  74.                    0xFE00,0x181F,0xFEFF,0xCE47,0x3000,0x0FFF,0xFDDC,0x0000,
  75.                    0x0000,0x06BF,0xEB81,0xFFFF,0x8000,0x01D5,0x5E3F,0xFFFF,
  76.                    0x8000,0x003F,0xF0FF,0xC00F,0x8000,0x0000,0x07FF,0xFFFF,
  77.                    0x8000,0x0007,0xFFFF,0xFFFF,0x8000,0x0000,0x0000,0x0000,
  78.                    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  79.                    0x0000,0x0000,0x0000,0x0000,0x0000,0x001F,0xFFFF,0xFF80,
  80.                    0x0000,0x0018,0x0000,0x0660,0x0000,0x0018,0x0000,0x0618,
  81.                    0x0000,0x003F,0xF800,0x0606,0x0000,0x03FF,0xFF80,0x0601,
  82.                    0x8000,0x0FFF,0xFFC0,0x07FF,0xE000,0x1FFF,0xFFFE,0x0000,
  83.                    0x6000,0x3FFF,0xFFFF,0xFFFF,0xFFC0,0x7FFF,0xFFFF,0xFFFF,
  84.                    0xFFF0,0xFF7F,0xFFFF,0xFFFF,0xFFF8,0xFE3F,0xFFFF,0xFFFF,
  85.                    0xFFF0,0xFF7F,0xFFFF,0xFFFF,0xFFE0,0x7FFF,0xFFFF,0xFFFF,
  86.                    0xFF00,0x3FFF,0xFFFF,0xFFFF,0xF800,0x1FFF,0xFFFE,0x0000,
  87.                    0x6000,0x0FFF,0xFFC0,0x0000,0x6000,0x03FF,0xFF00,0x3FF0,
  88.                    0x6000,0x007F,0xF800,0x0000,0x6000,0x0018,0x0000,0x0000,
  89.                    0x6000,0x001F,0xFFFF,0xFFFF,0xE000,0x0000,0x0000,0x0000,
  90.                    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  91.                    0x0000,0x0000,0x0001,0x0000,0x0000,0x0800,0x0000,0x0100 };
  92.  
  93. UWORD Icon2D[] = { 0xE310,0x0001,0x0000,0x0000,0x0000,0x0000,0x0028,0x0016,
  94.                    0x0005,0x0003,0x0001,0x00C0,0xD5B8,0x0000,0x0000,0x0000,
  95.                    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  96.                    0x0400,0x00C8,0x7B4E,0x0001,0x7D40,0x8000,0x0000,0x8000,
  97.                    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  98.                    0x0000,0x0028,0x0016,0x0002,0x0001,0x6A58,0x0300,0x0000,
  99.                    0x0000,0x0000,0x0000,0x0000,0x3FFF,0xFFCC,0x0000,0x3FFF,
  100.                    0xFFCF,0x0000,0x3FFF,0xFFCF,0xC000,0x3803,0xFFCF,0xF000,
  101.                    0x3FFF,0xFFC0,0x0000,0x3803,0xFFFF,0xFC00,0x3FFF,0xFFFF,
  102.                    0xFC00,0x3FFF,0xFFFF,0xFC00,0x3F84,0x00C0,0x7C00,0x3FFF,
  103.                    0xFFFF,0xFC00,0x3900,0x8000,0x7C00,0x3FFF,0xFFFF,0xFC00,
  104.                    0x3800,0x0040,0x7C00,0x3FFF,0xFFFF,0xFC00,0x3FFF,0xFFFF,
  105.                    0xFC00,0x3FFF,0xFE00,0x7C00,0x3FFF,0xFFFF,0xFC00,0x3FFF,
  106.                    0xFFFF,0xFC00,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  107.                    0x0000,0x0000,0x0000,0xFFFF,0xFFFC,0x0000,0xC000,0x0033,
  108.                    0x0000,0xC000,0x0030,0xC000,0xC000,0x0030,0x3000,0xC7FC,
  109.                    0x0030,0x0C00,0xC000,0x003F,0xFF00,0xC7FC,0x0000,0x0300,
  110.                    0xC000,0x0000,0x0300,0xC000,0x0000,0x0300,0xC07B,0xFF3F,
  111.                    0x8300,0xC000,0x0000,0x0300,0xC6FF,0x7FFF,0x8300,0xC000,
  112.                    0x0000,0x0300,0xC7FF,0xFFBF,0x8300,0xC000,0x0000,0x0300,
  113.                    0xC000,0x0000,0x0300,0xC000,0x01FF,0x8300,0xC000,0x0000,
  114.                    0x0300,0xC000,0x0000,0x0300,0xFFFF,0xFFFF,0xFF00,0x0000,
  115.                    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0001,0x0000,
  116.                    0x0000,0x0800,0x0000,0x0100 };
  117.  
  118. UWORD CheckOnD[2][12][2] = {
  119.     {   0xffff,0x0fff,0xf80c,0xf3ff,0xc3e3,0xe2ff,0x9dcf,0x057f,
  120.         0x1ebc,0x2aff,0x2f72,0x55ff,0x37ee,0x2fff,0x9bdc,0x57ff,
  121.         0xc1a0,0xafff,0xf805,0x5fff,0xfeaa,0xbfff,0xffd5,0xffff },
  122.     {   0x0000,0xf000,0x07f3,0xfc00,0x3c1f,0xfd00,0x7e3f,0xfa80,
  123.         0xff7f,0xd500,0xdffd,0xaa00,0xcff1,0xd000,0x67e3,0xa800,
  124.         0x3fdf,0x5000,0x07fa,0xa000,0x0155,0x4000,0x002a,0x0000 }, };
  125.  
  126. UWORD CheckOffD[2][12][2] = {
  127.     {   0xffff,0xffff,0xf80f,0xffff,0xc3e1,0xffff,0x9ffc,0xffff,
  128.         0x3ffe,0x3fff,0x3ffe,0x5fff,0x3ffe,0x2fff,0x9ffc,0x57ff,
  129.         0xc3e0,0xafff,0xf805,0x5fff,0xfeaa,0xbfff,0xffd5,0xffff },
  130.     {   0x0000,0x0000,0x07f0,0x0000,0x3c1e,0x0000,0x6003,0x0000,
  131.         0xc001,0xc000,0xc001,0xa000,0xc001,0xd000,0x6003,0xa800,
  132.         0x3c1f,0x5000,0x07fa,0xa000,0x0155,0x4000,0x002a,0x0000 }, };
  133.  
  134. UWORD KeyDottedD[2][17][5] = {
  135.     {   0xaabf,0xffaa,0xaaaa,0xaaaa,0x8000,0x55f0,0x01f5,0x5555,
  136.         0x5555,0x0000,0xaf0f,0xfc3a,0xaaaa,0xaaaa,0x8000,0x5c75,
  137.         0x578f,0xd555,0x5555,0x0000,0xb9af,0xfae0,0x7fff,0xfffa,
  138.         0x8000,0x73ff,0xff77,0x0000,0x000f,0x0000,0xe607,0xffbf,
  139.         0xffff,0xffe3,0x8000,0xcc73,0xffd8,0x0000,0x00f9,0x8000,
  140.         0xccfb,0xffdf,0xffff,0xfff3,0x8000,0xcc73,0xffdf,0xffff,
  141.         0xff87,0x0000,0xe607,0xffbf,0xf391,0xcc3e,0x8000,0x73ff,
  142.         0xff77,0x0000,0x01f5,0x0000,0xb9af,0xfae0,0x7fff,0xffaa,
  143.         0x8000,0x5c75,0x578f,0xd555,0x5555,0x0000,0xaf0f,0xfc3a,
  144.         0xaaaa,0xaaaa,0x8000,0x55e0,0x01f5,0x5555,0x5555,0x0000,
  145.         0xaabf,0xffaa,0xaaaa,0xaaaa,0x8000 },
  146.     {   0x5540,0x0055,0x5555,0x5555,0x0000,0xaa0f,0xfe0a,0xaaaa,
  147.         0xaaaa,0x8000,0x50ff,0xffc5,0x5555,0x5555,0x0000,0xa3ff,
  148.         0xfff0,0x2aaa,0xaaaa,0x8000,0x47ff,0xffff,0x8000,0x0005,
  149.         0x0000,0x8fff,0xffff,0xffff,0xfff0,0x8000,0x1fff,0xffff,
  150.         0xffff,0xfffc,0x0000,0x3f8f,0xffff,0xffff,0xfffe,0x0000,
  151.         0x3f07,0xffff,0xffff,0xfffc,0x0000,0x3f8f,0xffff,0xffff,
  152.         0xfff8,0x8000,0x1fff,0xffff,0xffff,0xffc1,0x0000,0x8fff,
  153.         0xffff,0xffff,0xfe0a,0x8000,0x47ff,0xffff,0x8000,0x0055,
  154.         0x0000,0xa3ff,0xfff0,0x2aaa,0xaaaa,0x8000,0x50ff,0xffc5,
  155.         0x5555,0x5555,0x0000,0xaa1f,0xfe0a,0xaaaa,0xaaaa,0x8000,
  156.         0x5540,0x0055,0x5555,0x5555,0x0000 }, };
  157.  
  158. UWORD NoKeyDottedD[2][29][4] = {
  159.     {   0x5555,0x557f,0xff55,0x5555,0xaaaa,0xafc0,0x01fa,0xaaaa,
  160.         0x5555,0x783f,0xfe0f,0x5555,0xaaab,0xc7ff,0xfff1,0xeaaa,
  161.         0x5557,0x3fff,0xfffe,0x7555,0xaaac,0xffff,0xffff,0x9eaa,
  162.         0x555b,0xfff8,0x03ff,0xe755,0xabf0,0x0ffd,0xfc3f,0xfbaa,
  163.         0x570f,0xfffe,0xffc7,0xfdd5,0xac75,0x57ff,0x7ff9,0xfeea,
  164.         0x59af,0xffff,0xbffe,0xff3d,0xb3ff,0xffff,0xc000,0x000e,
  165.         0x6607,0xffff,0xefff,0xffe3,0xcc73,0xffff,0xf000,0x00f9,
  166.         0xccfb,0xffff,0xfbff,0xfff3,0xcc73,0xffdf,0xfdff,0xff86,
  167.         0x6607,0xffbf,0xfe11,0xcc3d,0xb3ff,0xff7d,0xff00,0x016a,
  168.         0x59af,0xfae0,0xffbe,0xff75,0xac75,0x578f,0x7fd9,0xfeea,
  169.         0x570f,0xfc3f,0xbfe7,0xfdd5,0xabe0,0x001f,0xdfff,0xfbaa,
  170.         0x557b,0xffe0,0x07ff,0xe755,0xaaac,0xffff,0xffff,0x9eaa,
  171.         0x5557,0x3fff,0xfffe,0x7555,0xaaab,0xc7ff,0xfff1,0xeaaa,
  172.         0x5555,0x783f,0xfe0f,0x5555,0xaaaa,0xafc0,0x01fa,0xaaaa,
  173.         0x5555,0x557f,0xff55,0x5555 },
  174.     {   0xaaaa,0xaa80,0x00aa,0xaaaa,0x5555,0x503f,0xfe05,0x5555,
  175.         0xaaaa,0x87ff,0xfff0,0xaaaa,0x5554,0x3fff,0xfffe,0x1555,
  176.         0xaaa8,0xffff,0xffff,0x8aaa,0x5553,0xffff,0xffff,0xe155,
  177.         0xaaa7,0xffff,0xffff,0xf8aa,0x540f,0xf7fe,0x03ff,0xfc55,
  178.         0xa8f0,0x03ff,0x003f,0xfe2a,0x538a,0xa9ff,0x8007,0xff15,
  179.         0xa650,0x00ff,0xc001,0xffc2,0x4c00,0x007f,0xffff,0xfff1,
  180.         0x99f8,0x003f,0xf000,0x001c,0x33fc,0x001f,0xffff,0xff06,
  181.         0x33fc,0x000f,0xfc00,0x000c,0x33fc,0x0027,0xfe00,0x0079,
  182.         0x99f8,0x0043,0xffee,0x33c2,0x4c00,0x0083,0xffff,0xff95,
  183.         0xa650,0x051f,0xffc1,0xff8a,0x538a,0xa870,0xffe7,0xff15,
  184.         0xa8f0,0x03c0,0x7fff,0xfe2a,0x541f,0xffe0,0x3fff,0xfc55,
  185.         0xaa87,0xffff,0xffff,0xf8aa,0x5553,0xffff,0xffff,0xe155,
  186.         0xaaa8,0xffff,0xffff,0x8aaa,0x5554,0x3fff,0xfffe,0x1555,
  187.         0xaaaa,0x87ff,0xfff0,0xaaaa,0x5555,0x503f,0xfe05,0x5555,
  188.         0xaaaa,0xaa80,0x00aa,0xaaaa }, };
  189.  
  190. UWORD KeyBlankD[2][15][4] = {
  191.     {   0xffc0,0x07ff,0xffff,0xfff8,0xfc3f,0xf0ff,0xffff,0xfff8,
  192.         0xf1d5,0x5e3f,0xffff,0xfff8,0xe6bf,0xeb81,0xffff,0xfff8,
  193.         0xcfff,0xfddc,0x0000,0x0038,0x981f,0xfeff,0xffff,0xff88,
  194.         0x31cf,0xff60,0x0000,0x03e0,0x33ef,0xff7f,0xffff,0xffc8,
  195.         0x31cf,0xff7f,0xffff,0xfe18,0x981f,0xfeff,0xce47,0x30f8,
  196.         0xcfff,0xfddc,0x0000,0x07f8,0xe6bf,0xeb81,0xffff,0xfff8,
  197.         0xf1d5,0x5e3f,0xffff,0xfff8,0xfc3f,0xf0ff,0xffff,0xfff8,
  198.         0xff80,0x07ff,0xffff,0xfff8 },
  199.     {   0x003f,0xf800,0x0000,0x0000,0x03ff,0xff00,0x0000,0x0000,
  200.         0x0fff,0xffc0,0x0000,0x0000,0x1fff,0xfffe,0x0000,0x0000,
  201.         0x3fff,0xffff,0xffff,0xffc0,0x7fff,0xffff,0xffff,0xfff0,
  202.         0xfe3f,0xffff,0xffff,0xfff8,0xfc1f,0xffff,0xffff,0xfff0,
  203.         0xfe3f,0xffff,0xffff,0xffe0,0x7fff,0xffff,0xffff,0xff00,
  204.         0x3fff,0xffff,0xffff,0xf800,0x1fff,0xfffe,0x0000,0x0000,
  205.         0x0fff,0xffc0,0x0000,0x0000,0x03ff,0xff00,0x0000,0x0000,
  206.         0x007f,0xf800,0x0000,0x0000 }, };
  207.  
  208. UWORD NoKeyBlankD[2][27][4] = {
  209.     {   0xffff,0xff00,0x07ff,0xfff8,0xffff,0xe0ff,0xf83f,0xfff8,
  210.         0xffff,0x1fff,0xffc7,0xfff8,0xfffc,0xffff,0xfff9,0xfff8,
  211.         0xfff3,0xffff,0xfffe,0x7ff8,0xffef,0xffe0,0x0fff,0x9ff8,
  212.         0xffc0,0x3ff7,0xf0ff,0xeff8,0xfc3f,0xfffb,0xff1f,0xf7f8,
  213.         0xf1d5,0x5ffd,0xffe7,0xfbf8,0xe6bf,0xfffe,0xfffb,0xfcf8,
  214.         0xcfff,0xffff,0x0000,0x0038,0x981f,0xffff,0xbfff,0xff88,
  215.         0x31cf,0xffff,0xc000,0x03e0,0x33ef,0xffff,0xefff,0xffc8,
  216.         0x31cf,0xff7f,0xf7ff,0xfe18,0x981f,0xfeff,0xf847,0x30f8,
  217.         0xcfff,0xfdf7,0xfc00,0x05f8,0xe6bf,0xeb83,0xfefb,0xfdf8,
  218.         0xf1d5,0x5e3d,0xff67,0xfbf8,0xfc3f,0xf0fe,0xff9f,0xf7f8,
  219.         0xff80,0x007f,0x7fff,0xeff8,0xffef,0xff80,0x1fff,0x9ff8,
  220.         0xfff3,0xffff,0xfffe,0x7ff8,0xfffc,0xffff,0xfff9,0xfff8,
  221.         0xffff,0x1fff,0xffc7,0xfff8,0xffff,0xe0ff,0xf83f,0xfff8,
  222.         0xffff,0xff00,0x07ff,0xfff8 },
  223.     {   0x0000,0x00ff,0xf800,0x0000,0x0000,0x1fff,0xffc0,0x0000,
  224.         0x0000,0xffff,0xfff8,0x0000,0x0003,0xffff,0xfffe,0x0000,
  225.         0x000f,0xffff,0xffff,0x8000,0x001f,0xffff,0xffff,0xe000,
  226.         0x003f,0xdff8,0x0fff,0xf000,0x03c0,0x0ffc,0x00ff,0xf800,
  227.         0x0e2a,0xa7fe,0x001f,0xfc00,0x1940,0x03ff,0x0007,0xff00,
  228.         0x3000,0x01ff,0xffff,0xffc0,0x67e0,0x00ff,0xc000,0x0070,
  229.         0xcff0,0x007f,0xffff,0xfc18,0xcff0,0x003f,0xf000,0x0030,
  230.         0xcff0,0x009f,0xf800,0x01e0,0x67e0,0x010f,0xffb8,0xcf00,
  231.         0x3000,0x020f,0xffff,0xfe00,0x1940,0x147f,0xff07,0xfe00,
  232.         0x0e2a,0xa1c3,0xff9f,0xfc00,0x03c0,0x0f01,0xffff,0xf800,
  233.         0x007f,0xff80,0xffff,0xf000,0x001f,0xffff,0xffff,0xe000,
  234.         0x000f,0xffff,0xffff,0x8000,0x0003,0xffff,0xfffe,0x0000,
  235.         0x0000,0xffff,0xfff8,0x0000,0x0000,0x1fff,0xffc0,0x0000,
  236.         0x0000,0x00ff,0xf800,0x0000 }, };
  237.  
  238. UWORD ObenRechtsD[2][4][1] = {
  239.       { 0x2a00,0x0400,0xc200,0xf000 },{ 0xd400,0xfa00,0x3c00,0x0e00 }, };
  240.  
  241. UWORD ObenLinksD[2][4][1] = {
  242.       { 0xa800,0x5000,0x8600,0x1e00 },{ 0x5600,0xae00,0x7800,0xe000 }, };
  243.  
  244. UWORD UntenLinksD[2][4][1] = {
  245.       { 0x9e00,0x4600,0xa000,0x5400 }, { 0x6000,0xb800,0x5e00,0xaa00 }, };
  246.  
  247. UWORD UntenRechtsD[2][4][1] = {
  248.       { 0xf200,0xc400,0x0a00,0x5400 }, { 0x0c00,0x3a00,0xf400,0xaa00 }, };
  249.  
  250. UWORD SprechZapfenD[2][9][2] = {
  251.     {   0x0001,0xffc0,0xaaa9,0xffc0,0x5551,0xffc4,0xaaa9,0xff88,
  252.         0x5553,0xfe14,0xaa87,0xf828,0x551f,0xc154,0xa878,0x0aa8,
  253.         0x0000,0x5554 },
  254.     {   0xfffe,0x003c,0x5556,0x003c,0xaaae,0x0038,0x5556,0x0074,
  255.         0xaaac,0x01e8,0x5578,0x07d4,0xaae0,0x3ea8,0x5787,0xf554,
  256.         0xffff,0xaaa8 }, };
  257.  
  258. UWORD FileEncryptLabelD[2][15][10] = {
  259.     {   0x060e,0x1e0f,0xfffc,0x183f,0xffff,0xffff,0xffff,0xffff,
  260.         0xffc7,0xc000,0x878e,0x1f0f,0xfffe,0x1e3f,0xffff,0xffff,
  261.         0xffff,0xffff,0xff87,0xc000,0x87cf,0xff0f,0xfffe,0x1f3f,
  262.         0xffff,0xffff,0xffff,0xffff,0xff87,0xc000,0x87fc,0x1f0f,
  263.         0xc61e,0x1ff0,0x61f8,0x6383,0x1c0e,0x060c,0x1e06,0x0000,
  264.         0x873e,0x1f0f,0x8f0e,0x1cf8,0x70f0,0xe1c3,0x0e1f,0x0f0f,
  265.         0x0f87,0xc000,0x863e,0x1f0f,0x0f0e,0x18f8,0x70e1,0xffc3,
  266.         0xfe1f,0x0f0f,0x8787,0xc000,0x863e,0x1f0f,0x0f0e,0x18f8,
  267.         0x70e1,0xffc3,0xff0f,0x0f0f,0x8787,0xc000,0x873e,0x1f0f,
  268.         0x0e0e,0x1cf8,0x70e1,0xffc3,0xff8f,0x0f0f,0x8787,0xc000,
  269.         0x87fe,0x1f0f,0x0ffe,0x1ff8,0x70e1,0xffc3,0xff87,0x1f0f,
  270.         0x8787,0xc000,0x87fe,0x1f0f,0x0ffe,0x1f38,0x70e1,0xf1c3,
  271.         0xffc3,0x1f0f,0x8787,0xc000,0x87fe,0x1f0f,0x8f0e,0x1e38,
  272.         0x70f0,0xe1c3,0xffe6,0x1f0f,0x0f86,0x0000,0x03fc,0x0e07,
  273.         0xc61c,0x1830,0x2078,0x6381,0xfffe,0x3f0c,0x1fc6,0x4000,
  274.         0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xff8c,0x3f0f,
  275.         0xffff,0xc000,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
  276.         0xff80,0x7f0f,0xffff,0xc000,0xffff,0xffff,0xffff,0xffff,
  277.         0xffff,0xffff,0xffc0,0xfe03,0xffff,0xc000 },
  278.     {   0xf9f1,0xe1f0,0x0003,0xe7c0,0x0000,0x0000,0x0000,0x0000,
  279.         0x0038,0x0000,0x7871,0xe0f0,0x0001,0xe1c0,0x0000,0x0000,
  280.         0x0000,0x0000,0x0078,0x0000,0x7830,0x00f0,0x0001,0xe0c0,
  281.         0x0000,0x0000,0x0000,0x0000,0x0078,0x0000,0x7803,0xe0f0,
  282.         0x39e1,0xe00f,0x9e07,0x9c7c,0xe3f1,0xf9f3,0xe1f9,0xc000,
  283.         0x78c1,0xe0f0,0x70f1,0xe307,0x8f0f,0x1e3c,0xf1e0,0xf0f0,
  284.         0xf078,0x0000,0x79c1,0xe0f0,0xf0f1,0xe707,0x8f1e,0x003c,
  285.         0x01e0,0xf0f0,0x7878,0x0000,0x79c1,0xe0f0,0xf0f1,0xe707,
  286.         0x8f1e,0x003c,0x00f0,0xf0f0,0x7878,0x0000,0x78c1,0xe0f0,
  287.         0xf1f1,0xe307,0x8f1e,0x003c,0x0070,0xf0f0,0x7878,0x0000,
  288.         0x7801,0xe0f0,0xf001,0xe007,0x8f1e,0x003c,0x0078,0xe0f0,
  289.         0x7878,0x0000,0x7801,0xe0f0,0xf001,0xe0c7,0x8f1e,0x0e3c,
  290.         0x003c,0xe0f0,0x7878,0x0000,0x7801,0xe0f0,0x70f1,0xe1c7,
  291.         0x8f0f,0x1e3c,0x0019,0xe0f0,0xf079,0xc000,0xfc03,0xf1f8,
  292.         0x39e3,0xe7cf,0xdf87,0x9c7e,0x0001,0xc0f3,0xe039,0x8000,
  293.         0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0073,0xc0f0,
  294.         0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  295.         0x007f,0x80f0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  296.         0x0000,0x0000,0x003f,0x01fc,0x0000,0x0000 }, };
  297.  
  298. struct Image CheckOn      ={0,-1,25,12,2,NULL,3,0,NULL};
  299. struct Image CheckOff     ={0,-1,25,12,2,NULL,3,0,NULL};
  300. struct Image   KeyDotted  ={0,0,65,17,2,NULL,3,0,NULL};
  301. struct Image NoKeyDotted  ={1,0,64,29,2,NULL,3,0,NULL};
  302. struct Image   KeyBlank   ={9,10,61,15,2,NULL,3,0,NULL};
  303. struct Image NoKeyBlank   ={11,4,61,27,2,NULL,3,0,NULL};
  304. struct Image FileEncryptLabel={0,0,146,15,2,NULL,3,0,NULL};
  305. struct Image SprechZapfen ={ 83,118,30,9,2,NULL,3,0,NULL};
  306. struct Image UntenRechts  ={249,115, 7,4,2,NULL,3,0,&SprechZapfen};
  307. struct Image UntenLinks   ={ 15,115, 7,4,2,NULL,3,0,&UntenRechts};
  308. struct Image ObenRechts   ={249, 19, 7,4,2,NULL,3,0,&UntenLinks};
  309. struct Image ObenLinks    ={ 15, 19, 7,4,2,NULL,3,0,&ObenRechts};
  310.  
  311. UWORD *SleepPointer;
  312.  
  313. OpenImages()
  314.  {
  315.   CheckOn.ImageData      =Copy2Chip(sizeof(CheckOnD)/2    ,&CheckOnD[0]);
  316.   CheckOff.ImageData     =Copy2Chip(sizeof(CheckOffD)/2    ,&CheckOffD[0]);
  317.   KeyDotted.ImageData    =Copy2Chip(sizeof(KeyDottedD)/2    ,&KeyDottedD[0]);
  318.   NoKeyDotted.ImageData  =Copy2Chip(sizeof(NoKeyDottedD)/2  ,&NoKeyDottedD[0]);
  319.   KeyBlank.ImageData     =Copy2Chip(sizeof(KeyBlankD)/2     ,&KeyBlankD[0]);
  320.   NoKeyBlank.ImageData   =Copy2Chip(sizeof(NoKeyBlankD)/2   ,&NoKeyBlankD[0]);
  321.   FileEncryptLabel.ImageData=Copy2Chip(sizeof(FileEncryptLabelD)/2,&FileEncryptLabelD[0]);
  322.   SprechZapfen.ImageData =Copy2Chip(sizeof(SprechZapfenD)/2 ,&SprechZapfenD[0]);
  323.   UntenRechts.ImageData  =Copy2Chip(sizeof(UntenRechtsD)/2  ,&UntenRechtsD[0]);
  324.   UntenLinks.ImageData   =Copy2Chip(sizeof(UntenLinksD)/2   ,&UntenLinksD[0]);
  325.   ObenLinks.ImageData    =Copy2Chip(sizeof(ObenLinksD)/2    ,&ObenLinksD[0]);
  326.   ObenRechts.ImageData   =Copy2Chip(sizeof(ObenRechtsD)/2   ,&ObenRechtsD[0]);
  327.   SleepPointer           =Copy2Chip(sizeof(SleepD)/2        ,&SleepD[0]);
  328.  }
  329.  
  330. #define CANCELB  0
  331. #define OKB      1
  332. #define ENCRYPTB 2
  333. #define DECRYPTB 3
  334. #define TEXTB    4
  335. #define CREATEB  5
  336.  
  337. #define ITEXT(x,y,text,n) {2,0,JAM1,(x),(y),NULL,(text),(n)}
  338. #define DEFGADGET(x,y,w,h,text,id) {0,(x),(y),(w),(h),GADGHCOMP,GADGIMMEDIATE|RELVERIFY,BOOLGADGET,0,0,(text),0,0,(id),0}
  339.  
  340. struct IntuiText OKText = ITEXT(21,2,"OK",NULL);
  341. struct Gadget OKButton  = DEFGADGET(105,100,57,11,&OKText,OKB);
  342.  
  343. struct IntuiText CANCELText = ITEXT(6,2,"Cancel",NULL);
  344. struct Gadget CANCELButton  = DEFGADGET(173,100,57,11,&CANCELText,CANCELB);
  345.  
  346. struct StringInfo TEXTInfo = {NULL, &UndoString[0], 4, 40,0, 0,0,0,0,0,0,0,0};
  347. struct Gadget TEXTButton   = {NULL, 31, 58, 208, 8, GADGHCOMP, GADGIMMEDIATE|RELVERIFY,
  348.                               STRGADGET, NULL, NULL, NULL, 0, &TEXTInfo, TEXTB, NULL};
  349.  
  350. struct IntuiText ENCRYPTText = ITEXT(11,33,"Encrypt",NULL),
  351.                  DECRYPTText = ITEXT(11,33,"Decrypt",NULL);
  352. struct Gadget DECRYPTButton  = {0,147,54,79,45,GADGIMAGE|GADGHCOMP,GADGIMMEDIATE|RELVERIFY,
  353.                                 BOOLGADGET,&NoKeyBlank,0,&DECRYPTText,0,0,DECRYPTB,0};
  354. struct Gadget ENCRYPTButton  = {0, 41,54,79,45,GADGIMAGE|GADGHCOMP,GADGIMMEDIATE|RELVERIFY,
  355.                                 BOOLGADGET,&KeyBlank,0,&ENCRYPTText,0,0,ENCRYPTB,0};
  356.  
  357. struct IntuiText CREATEText  = ITEXT(31,1,"Create Icon",NULL);
  358. struct Gadget CREATEButton   = {NULL, 77, 78, 16, 8, GADGHIMAGE|GADGIMAGE|SELECTED,
  359.                                 TOGGLESELECT|GADGIMMEDIATE|RELVERIFY,
  360.                                 BOOLGADGET, &CheckOff, &CheckOn, &CREATEText, 0, NULL, CREATEB, NULL};
  361.  
  362. Encrypt(Buffer, Length)
  363.  UBYTE *Buffer;
  364.  ULONG Length;
  365.  {
  366.   /*** TOP SECRET ***/
  367.  }
  368.  
  369. Decrypt(Buffer, Length)
  370.  UBYTE *Buffer;
  371.  ULONG Length;
  372.  {
  373.   /*** TOP SECRET ***/
  374.  }
  375.  
  376. #define ERROR_MEMORY_IS_LOW    71
  377. #define ERROR_CANT_OPEN_FILE   72 
  378. #define ERROR_CANT_CREATE_FILE 73 
  379.  
  380. struct IntuiText TextErr3 = ITEXT(38,71,NULL,NULL);
  381. struct IntuiText TextErr2 = ITEXT(37,71,NULL,&TextErr3);
  382. struct IntuiText TextErr  = ITEXT(37,43,"Sorry, an error happened:",&TextErr2);
  383.  
  384. Error(Number, Frame)
  385.  int Number, Frame;
  386.  { static char ErrMemory[] = "Not Enough Memory.\0",
  387.                ErrNoOpen[] = "Can't Open File.\0",
  388.                ErrNoCrea[] = "Can't Create File.\0",
  389.                ErrNotFou[] = "File Not Found.\0";
  390.  
  391.   NextFrame=Frame;
  392.   switch(Number)
  393.    { case ERROR_MEMORY_IS_LOW   : TextErr2.IText=TextErr3.IText=&ErrMemory[0];  break;
  394.      case ERROR_CANT_OPEN_FILE  : TextErr2.IText=TextErr3.IText=&ErrNoOpen[0];  break;
  395.      case ERROR_CANT_CREATE_FILE: TextErr2.IText=TextErr3.IText=&ErrNoCrea[0];  break;
  396.     break;
  397.    }
  398.   switch(IoErr())
  399.    { case ERROR_OBJECT_NOT_FOUND: TextErr2.IText=TextErr3.IText=&ErrNotFou[0]; break;
  400.      break;
  401.    }
  402.   SwitchToFrame(ERROR);
  403.  }
  404.  
  405. FileLoadAndSave(Mode)
  406.  int Mode;
  407.  { struct FileLock *MyLock;
  408.    struct FileInfoBlock *MyFIB;
  409.    struct FileHandle *MyReadHandle;
  410.    struct FileHandle *MyWriteHandle;
  411.    char *MyBuffer;
  412.    char IconFile[45];
  413.    register int i;
  414.    ULONG DataPtr, DataSize;
  415.  
  416.   SetPointer(Window, SleepPointer, 22, 15, 0,0);
  417.  
  418.   MyLock = Lock(&ReadFile[0], ACCESS_READ);
  419.   if(MyLock==NULL)
  420.     { Error(ERROR_OBJECT_NOT_FOUND, READ); goto LeaveIt3; }
  421.    
  422.   if((MyFIB=AllocMem(sizeof(struct FileInfoBlock), MEMF_CLEAR))==NULL)
  423.     { Error(ERROR_MEMORY_IS_LOW, MODUS); goto LeaveIt2; }
  424.   Examine(MyLock, MyFIB);
  425.  
  426.   if((MyReadHandle=Open(&ReadFile[0], MODE_OLDFILE))==NULL)
  427.     { Error(ERROR_CANT_OPEN_FILE, READ); goto LeaveIt2; }
  428.  
  429.   if((MyBuffer=AllocMem(MyFIB->fib_Size, MEMF_CLEAR))==NULL)
  430.     { Error(ERROR_MEMORY_IS_LOW, MODUS); goto LeaveIt2; } 
  431.   if((Read(MyReadHandle, MyBuffer, MyFIB->fib_Size))==-1)
  432.     { Close(MyReadHandle);
  433.       Error(ERROR_CANT_OPEN_FILE, READ);
  434.       goto LeaveIt; }
  435.   Close(MyReadHandle);
  436.  
  437.   if(Mode==ENCRYPT) Encrypt(MyBuffer, MyFIB->fib_Size);
  438.                else Decrypt(MyBuffer, MyFIB->fib_Size);
  439.  
  440.   if((MyWriteHandle=Open(&WriteFile[0], MODE_NEWFILE))==NULL)
  441.     { Error(ERROR_CANT_CREATE_FILE, WRITE); goto LeaveIt; }
  442.   if((Write(MyWriteHandle, MyBuffer, MyFIB->fib_Size))==-1)
  443.     { Close(MyWriteHandle);
  444.       DeleteFile(&WriteFile[0]);
  445.       Error(ERROR_CANT_CREATE_FILE, WRITE);
  446.       goto LeaveIt; }
  447.   Close(MyWriteHandle);
  448.  
  449.   /**** Here we create the Icon - if desired - ****/
  450.  
  451.   if(CREATEButton.Flags & SELECTED)
  452.    { for(i=0; WriteFile[i]!=0; i++) IconFile[i]=WriteFile[i];
  453.      CopyMem(".info\0",&IconFile[i],5);
  454.  
  455.      if((MyWriteHandle=Open(&IconFile[0], MODE_NEWFILE))==NULL)
  456.        { Error(ERROR_CANT_CREATE_FILE, WRITE); goto LeaveIt; }
  457.  
  458.                          DataPtr = &Icon1D[0]; DataSize = sizeof(Icon1D);
  459.      if(Mode==DECRYPT) { DataPtr = &Icon2D[0]; DataSize = sizeof(Icon2D); }
  460.  
  461.      if((Write(MyWriteHandle, DataPtr, DataSize))==-1)
  462.        { Close(MyWriteHandle);
  463.          DeleteFile(&IconFile[0]);
  464.          DeleteFile(&WriteFile[0]);
  465.          Error(ERROR_CANT_CREATE_FILE, WRITE);
  466.          goto LeaveIt; }
  467.      Close(MyWriteHandle);
  468.     }
  469.  
  470.   /**** Finish of Icon section ****/
  471.  
  472.   SwitchToFrame(MODUS);
  473. LeaveIt:
  474.   FreeMem(MyBuffer,MyFIB->fib_Size);
  475. LeaveIt2:
  476.   FreeMem(MyFIB,sizeof(struct FileInfoBlock));
  477. LeaveIt3:
  478.   UnLock(MyLock);
  479.  }
  480.  
  481.  
  482. Do_Gadget(FrameNr, Button)
  483. int FrameNr, Button;
  484.  { static struct IntuiText Text4e={2,1,JAM2,24,35,0,"  What about your Keyword ? " ,NULL};
  485.    register int i;
  486.  
  487.   switch(FrameNr)
  488.    { case INTRO : SwitchToFrame(MODUS); break;
  489.      case MODUS : CurrentMode=ENCRYPT;
  490.                   if(Button==DECRYPTB) CurrentMode=DECRYPT;
  491.                   SwitchToFrame(READ); break;
  492.      case READ  : if(Button==OKB) { for(i=0; ReadFile[i]!=0; i++)
  493.                                       WriteFile[i]=ReadFile[i];
  494.                                     CopyMem(".ENCRYPT\0",&WriteFile[i],9);
  495.                                     if(CurrentMode==DECRYPT)
  496.                                       CopyMem("DE",&WriteFile[i+1],2);
  497.                                     SwitchToFrame(KEYWD);
  498.                                   };
  499.                   if(Button==CANCELB) SwitchToFrame(MODUS);
  500.                   break;
  501.      case KEYWD : if(Button==OKB) { if(TEXTInfo.NumChars<1)
  502.                                       { PrintIText(WRast, &Text4e, 0, 0);
  503.                                         ActivateGadget(&TEXTButton, Window, NULL);
  504.                                       }
  505.                                      else SwitchToFrame(WRITE);
  506.                                   };
  507.                   if(Button==CANCELB) SwitchToFrame(READ);
  508.                   break;
  509.      case WRITE : if(Button==CANCELB) SwitchToFrame(KEYWD);
  510.                   if(Button==OKB) FileLoadAndSave(CurrentMode);
  511.                   break;
  512.      case ERROR : if(Button==OKB) SwitchToFrame(NextFrame);
  513.                   break;
  514.      break;
  515.     }
  516.  }
  517.  
  518. LinkGadgets(Nr, Gad1, Gad2, Gad3, Gad4)
  519.  int Nr;
  520.  struct Gadget *Gad1, *Gad2, *Gad3, *Gad4;
  521.  {
  522.   if(Nr>=1) AddGadget(Window, Gad1, 1);
  523.   if(Nr>=2) AddGadget(Window, Gad2, 2);
  524.   if(Nr>=3) AddGadget(Window, Gad3, 3);
  525.   if(Nr>=4) AddGadget(Window, Gad4, 4);
  526.   FirstGad=Gad1;
  527.   GadgetNumber=Nr;
  528.  }
  529.  
  530. SwitchToFrame(NewFrame)
  531. int NewFrame;
  532.  { static struct IntuiText
  533.       Text15  = {3,0,JAM1,35,82,0,"Copy me, I want to travel!",NULL},
  534.       Text14  = ITEXT(37,82,"Copy me, I want to travel!"      ,&Text15),
  535.       Text13  = ITEXT(77,67,"D-7958 Laupheim"                 ,&Text14),
  536.       Text12  = ITEXT(85,57,"R\366ntgenweg 12"                ,&Text13),
  537.       Text11  = ITEXT(87,47,"Lorenz Wiest"                    ,&Text12),
  538.       Text22  = {3,0,JAM1,186,36,0,"YOU"                      ,NULL},
  539.       Text21  = ITEXT(44,36,"What can I do for YOU ?"         ,&Text22),
  540.       Text31b = ITEXT(24,35,"Which file shall I decrypt ?"    ,0),
  541.       Text31a = ITEXT(24,35,"Which file shall I encrypt ?"    ,0),
  542.       Text41  = ITEXT(24,35,"Tell me your secret KeyWord."    ,0),
  543.       Text52b = ITEXT(24,40,"the decrypted file ?"            ,0),
  544.       Text52a = ITEXT(24,40,"the encrypted File ?"            ,0),
  545.       Text51  = ITEXT(24,29,"To which fille shall I write"    ,0);
  546.  
  547.   ClearPointer(Window);
  548.   Frame=NewFrame;
  549.   FillBox( 1,22,23,248,114);
  550.   FillBox(-1,20,120,83,148);
  551.   if(FirstGad!=NULL) RemoveGList(Window, FirstGad, GadgetNumber);
  552.   switch(Frame)
  553.    { case INTRO : DrawImage(WRast,&FileEncryptLabel,59+8,26);
  554.                   PrintIText(WRast,&Text11,0,0);
  555.                   SetUpButton(&OKButton, 1, 3);       
  556.                   LinkGadgets(1, &OKButton, 0, 0, 0);
  557.                   break;
  558.      case MODUS : CurrentMode=ENCRYPT;
  559.                   PrintIText(WRast,&Text21,0,0);
  560.                   SetUpButton(&ENCRYPTButton, 1, 2);
  561.                   SetUpButton(&DECRYPTButton, 1, 2);
  562.                   LinkGadgets(2, &ENCRYPTButton, &DECRYPTButton, 0, 0);
  563.                   break;
  564.      case READ :  if(CurrentMode==ENCRYPT) PrintIText(WRast,&Text31a,0,0);
  565.                                       else PrintIText(WRast,&Text31b,0,0);
  566.                   SetUpButton(&TEXTButton, 0, 2);
  567.                   SetUpButton(&OKButton, 1, 3);
  568.                   SetUpButton(&CANCELButton, 1, 2);
  569.                   TEXTInfo.Buffer=&ReadFile[0];
  570.                   LinkGadgets(3, &TEXTButton, &OKButton, &CANCELButton, 0);
  571.                   break;
  572.      case KEYWD : PrintIText(WRast,&Text41,0,0);
  573.                   SetUpButton(&TEXTButton, 0, 2);
  574.                   SetUpButton(&OKButton, 1, 3);
  575.                   SetUpButton(&CANCELButton, 1, 2);
  576.                   TEXTInfo.Buffer=&KeyWord[0];
  577.                   LinkGadgets(3, &TEXTButton, &OKButton, &CANCELButton, 0);
  578.                   break;
  579.      case WRITE : PrintIText(WRast, &Text51, 0, 0);
  580.                   if(CurrentMode==ENCRYPT) PrintIText(WRast,&Text52a,0,0);
  581.                                       else PrintIText(WRast,&Text52b,0,0);
  582.                   SetUpButton(&TEXTButton, 0, 2);
  583.                   SetUpButton(&OKButton, 1, 3);
  584.                   SetUpButton(&CANCELButton, 1, 2);
  585.                   TEXTInfo.Buffer=&WriteFile[0];
  586.                   LinkGadgets(4, &TEXTButton, &OKButton, &CANCELButton, &CREATEButton);
  587.                   break;
  588.      case ERROR : PrintIText(WRast,&TextErr,0,0);
  589.                   SetUpButton(&OKButton, 1, 3);
  590.                   LinkGadgets(1, &OKButton, 0, 0, 0);
  591.                   break;
  592.    break;
  593.    } /* end of switch */
  594.  
  595.   if(CurrentMode==ENCRYPT) DrawImage(WRast,&KeyDotted,20,126);
  596.                       else DrawImage(WRast,&NoKeyDotted,20,120);
  597.  
  598.   RefreshGadgets(FirstGad,Window,NULL);
  599.   if(FirstGad->GadgetType==STRGADGET) ActivateGadget(FirstGad,Window,NULL);
  600.  }
  601.  
  602. main()
  603.  { ULONG  NachArt;
  604.    USHORT Code;
  605.  
  606.   if ((IntuitionBase=(struct IntuitionBase *)
  607.               OpenLibrary("intuition.library",0))==NULL) Schluss();
  608.   if ((GfxBase=(struct GfxBase *)
  609.               OpenLibrary("graphics.library",0))==NULL)  Schluss();
  610.  
  611.   if ((Window=(struct Window *)OpenWindow(&NewWindow))==NULL) Schluss();
  612.   WRast=Window->RPort;
  613.  
  614.   OpenImages();
  615.   SketchWindow();
  616.   SwitchToFrame(INTRO);
  617.  
  618.   for (;;)
  619.    { WaitPort(Window->UserPort);
  620.      while(Nachricht=(struct IntuiMessage *)GetMsg(Window->UserPort))
  621.       { NachArt=Nachricht->Class;
  622.         Code   =Nachricht->Code;
  623.         Adr    =Nachricht->IAddress;
  624.         ReplyMsg(Nachricht);
  625.         switch(NachArt)
  626.          { case CLOSEWINDOW  : Schluss(); break;
  627.            case GADGETUP     : Do_Gadget(Frame,Adr->GadgetID);
  628.          } /* end of switch */
  629.       }  /* end of if */
  630.    }   /* end of for */
  631.  }    /* end of main */
  632.  
  633. SketchWindow()
  634.  {
  635.   FillBox( 1, 0, TOPY, WIDTH, HEIGHT-1);
  636.   FillBox( 2, 2, TOPY+1, WIDTH-3, HEIGHT-2);
  637.   FillBox(-1, 4, TOPY+2, WIDTH-5, HEIGHT-3);
  638.   FillBox( 2,15,     19,  256-1,118);
  639.   FillBox( 1,17,     20,  256-1-2,118-1); 
  640.   DrawImage(WRast,&ObenLinks,0,0);
  641.  }
  642.  
  643. SetUpButton(Gadget, AreaCol, BorderCol)
  644. struct Gadget *Gadget;
  645. int BorderCol, AreaCol;
  646.  { register int X1, Y1, X2, Y2;
  647.  
  648.   X1 = Gadget->LeftEdge;
  649.   Y1 = Gadget->TopEdge;
  650.   X2 = Gadget->LeftEdge+Gadget->Width-1;
  651.   Y2 = Gadget->TopEdge+Gadget->Height-1;
  652.   if(Gadget->GadgetType==STRGADGET) {X1-=2; Y1-=1; X2+=2; Y2+=1; };
  653.   FillBox(-1, X1+4-2, Y1+2-1, X2+4+2, Y2+2+1);   /* RasterFill as Shadow */
  654.   FillBox(AreaCol, X1, Y1, X2, Y2);              /* FrontArea is cleared */
  655.   SetAPen(WRast, BorderCol);
  656.    Move(WRast, X1+1-2, Y1-1);                    /* Draw a Button Border */
  657.    Draw(WRast, X2-1+2, Y1-1);
  658.    Draw(WRast, X2-1+2, Y2+1);
  659.    Draw(WRast, X1+1-2, Y2+1);
  660.    Draw(WRast, X1+1-2, Y1-1);
  661.    Move(WRast, X1-2,   Y1+1-1);
  662.    Draw(WRast, X1-2,   Y2-1+1);
  663.    Move(WRast, X2+2,   Y1+1-1);
  664.    Draw(WRast, X2+2,   Y2-1+1);
  665.  }
  666.  
  667. FillBox(Color, X1, Y1, X2, Y2)
  668. int Color, X1, Y1, X2, Y2;
  669.  { static UWORD Pattern[]={0xaaaa,0x5555,0x5555,0xaaaa};
  670.  
  671.   if(Color>=0)
  672.    { SetAPen(WRast, Color);
  673.      SetBPen(WRast, Color);
  674.      SetAfPt(WRast, NULL, 0); }
  675.   else
  676.    { SetAPen(WRast, 3);
  677.      SetBPen(WRast, 0);
  678.      SetAfPt(WRast, &Pattern, -1); }
  679.   RectFill(WRast, X1, Y1, X2, Y2);
  680.  }
  681.  
  682. ULONG Copy2Chip(WordCount, ArrayPnt)
  683.  int    WordCount;
  684.  UWORD *ArrayPnt;
  685.  { UWORD *Zeiger;
  686.  
  687.   Zeiger=AllocRemember(&MyRememberKey,WordCount<<1,MEMF_CHIP|MEMF_CLEAR);
  688.   CopyMem(ArrayPnt,Zeiger,WordCount<<1);
  689.   return(Zeiger);
  690.  }
  691.  
  692. Schluss()
  693.  {
  694.   FreeRemember(&MyRememberKey, TRUE);
  695.   if(Window!=NULL)        CloseWindow(Window);
  696.   if(GfxBase!=NULL)       CloseLibrary(GfxBase);
  697.   if(IntuitionBase!=NULL) CloseLibrary(IntuitionBase);
  698.   exit(0);
  699.  }
  700.