home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 625.lha / STScan_v2.0 / stscan.c < prev    next >
C/C++ Source or Header  |  1992-02-22  |  36KB  |  2,103 lines

  1. /* ST-400 Scanner Programm */
  2. #include <exec/exec.h>
  3. #include <exec/types.h>
  4. #include <intuition/intuition.h>
  5. #include <intuition/intuitionbase.h>
  6. #include <libraries/dos.h>
  7. #include <libraries/dosextens.h>
  8. #include <graphics/rastport.h>
  9. #include <libraries/reqbase.h>
  10. #include <req_pragmas.h>
  11. #include <stdio.h>
  12. #include <string.h>
  13. #include <functions.h>
  14. #include "stscan.h"
  15.  
  16. #define PRG_VERSION (UBYTE *)"Version 2.00"
  17. #define ST400ID 3
  18. #define DEV_NAME (char*)"scsi.device" /* <- change for other SCSI controller */
  19.  
  20.  
  21. char *_procname="StScan";
  22. long _BackGroundIO=0;
  23. long _stack=50000;
  24. long _priority=0;
  25. const short asmlines=VIEWHEIGHT-1;
  26.  
  27. struct Window *win;
  28. struct IOStdReq *diskreq;
  29. struct Viewport *vp;
  30. struct RastPort *rp;
  31. ULONG memneed;
  32. UWORD memwidth, memheight;
  33. UWORD membpl; /*für Verdünnung benötigt */
  34. UBYTE memgray;
  35. UBYTE *memptr;
  36.  
  37. static UBYTE mf,cmp;
  38. static struct RastPort *wrp;
  39. static struct MsgPort *HCPort;
  40. struct IntuitionBase *IntuitionBase;
  41. struct GfxBase *GfxBase;
  42. struct DosBase *DosBase;
  43. struct ReqBase *ReqBase;
  44. static struct IntuiMessage *Message;
  45. static struct Screen *scr;
  46. static struct MsgPort *diskport;
  47. static long openerror;
  48. static UBYTE noscan;
  49. static USHORT *imgptrf, *imgptrz;
  50. static UWORD wx1,wy1,wx2,wy2;
  51. static UBYTE numbits_16[]={0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4};
  52.  
  53. UBYTE graystep[]={0,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1};
  54. UBYTE bitval[]={128,64,32,16,8,4,2,1};
  55. UBYTE invbitval[]={127,191,223,239,247,251,253,254};
  56. UBYTE revbit[]={
  57.    0, 128,  64, 192,  32, 160,  96, 224,  16, 144,  80, 208,  48, 176, 112, 240,
  58.    8, 136,  72, 200,  40, 168, 104, 232,  24, 152,  88, 216,  56, 184, 120, 248,
  59.    4, 132,  68, 196,  36, 164, 100, 228,  20, 148,  84, 212,  52, 180, 116, 244,
  60.   12, 140,  76, 204,  44, 172, 108, 236,  28, 156,  92, 220,  60, 188, 124, 252,
  61.    2, 130,  66, 194,  34, 162,  98, 226,  18, 146,  82, 210,  50, 178, 114, 242,
  62.   10, 138,  74, 202,  42, 170, 106, 234,  26, 154,  90, 218,  58, 186, 122, 250,
  63.    6, 134,  70, 198,  38, 166, 102, 230,  22, 150,  86, 214,  54, 182, 118, 246,
  64.   14, 142,  78, 206,  46, 174, 110, 238,  30, 158,  94, 222,  62, 190, 126, 254,
  65.    1, 129,  65, 193,  33, 161,  97, 225,  17, 145,  81, 209,  49, 177, 113, 241,
  66.    9, 137,  73, 201,  41, 169, 105, 233,  25, 153,  89, 217,  57, 185, 121, 249,
  67.    5, 133,  69, 197,  37, 165, 101, 229,  21, 149,  85, 213,  53, 181, 117, 245,
  68.   13, 141,  77, 205,  45, 173, 109, 237,  29, 157,  93, 221,  61, 189, 125, 253,
  69.    3, 131,  67, 195,  35, 163,  99, 227,  19, 147,  83, 211,  51, 179, 115, 243,
  70.   11, 139,  75, 203,  43, 171, 107, 235,  27, 155,  91, 219,  59, 187, 123, 251,
  71.    7, 135,  71, 199,  39, 167, 103, 231,  23, 151,  87, 215,  55, 183, 119, 247,
  72.   15, 143,  79, 207,  47, 175, 111, 239,  31, 159,  95, 223,  63, 191, 127, 255
  73. };
  74.  
  75. struct DefWindow winpar= /*default values */
  76. {  0,0,32,    /*dummy1, dummy2, wpsize*/
  77.    1,0,        /*winnr, dummy3*/
  78.    200,200,    /*resx, resy*/
  79.    0,0,0,0,    /*cornerx, cornery, width, height*/
  80.    0,32,5,    /*dummy4, threshold, size*/
  81.    0,1,        /*halftone, bitspixel*/
  82.    0,0,0    /*dummy5,6,7*/
  83. };
  84.  
  85. USHORT imagedataf[]=
  86. { 0xfff0,
  87.   0xfff0,
  88.   0xc030,
  89.   0xdff0,
  90.   0xdff0,
  91.   0xc0f0,
  92.   0xdff0,
  93.   0xdff0,
  94.   0xdff0,
  95.   0xdff0,
  96.   0xfff0,
  97.   0xfff0,
  98.   0x0000,
  99.   0x0000,
  100.   0x0000,
  101.   0x0000,
  102.   0x0000,
  103.   0x0000,
  104.   0x0000,
  105.   0x0000,
  106.   0x0000,
  107.   0x0000,
  108.   0x0000,
  109.   0x0000,
  110.   0x0000,
  111.   0x0000,
  112.   0x0000,
  113.   0x0000,
  114.   0x0000,
  115.   0x0000,
  116.   0x0000,
  117.   0x0000,
  118.   0x0000,
  119.   0x0000,
  120.   0x0000,
  121.   0x0000,
  122.   0x0000,
  123.   0x0000,
  124.   0x0000,
  125.   0x0000,
  126.   0x0000,
  127.   0x0000,
  128.   0x0000,
  129.   0x0000,
  130.   0x0000,
  131.   0x0000,
  132.   0x0000,
  133.   0x0000,
  134.   0x0000,
  135.   0x0000,
  136.   0x0000,
  137.   0x0000,
  138.   0x0000,
  139.   0x0000,
  140.   0x0000,
  141.   0x0000,
  142.   0x0000,
  143.   0x0000,
  144.   0x0000,
  145.   0x0000,
  146.   0x0000,
  147.   0x0000,
  148.   0x0000,
  149.   0x0000};
  150. USHORT imagedataz[]=
  151. { 0xfff0,
  152.   0xfff0,
  153.   0xc030,
  154.   0xff70,
  155.   0xfef0,
  156.   0xfdf0,
  157.   0xfbf0,
  158.   0xf7f0,
  159.   0xeff0,
  160.   0xc030,
  161.   0xfff0,
  162.   0xfff0,
  163.   0x0000,
  164.   0x0000,
  165.   0x0000,
  166.   0x0000,
  167.   0x0000,
  168.   0x0000,
  169.   0x0000,
  170.   0x0000,
  171.   0x0000,
  172.   0x0000,
  173.   0x0000,
  174.   0x0000,
  175.   0x0000,
  176.   0x0000,
  177.   0x0000,
  178.   0x0000,
  179.   0x0000,
  180.   0x0000,
  181.   0x0000,
  182.   0x0000,
  183.   0x0000,
  184.   0x0000,
  185.   0x0000,
  186.   0x0000,
  187.   0x0000,
  188.   0x0000,
  189.   0x0000,
  190.   0x0000,
  191.   0x0000,
  192.   0x0000,
  193.   0x0000,
  194.   0x0000,
  195.   0x0000,
  196.   0x0000,
  197.   0x0000,
  198.   0x0000,
  199.   0x0000,
  200.   0x0000,
  201.   0x0000,
  202.   0x0000,
  203.   0x0000,
  204.   0x0000,
  205.   0x0000,
  206.   0x0000,
  207.   0x0000,
  208.   0x0000,
  209.   0x0000,
  210.   0x0000,
  211.   0x0000,
  212.   0x0000,
  213.   0x0000,
  214.   0x0000};
  215.  
  216. /* Struktures for Windows and Menus */
  217.  
  218. struct TextAttr textattr=
  219. { "topaz.FONT",
  220.    8,
  221.    FS_NORMAL,
  222.    FPF_ROMFONT
  223. };
  224.  
  225. /* Struktures for Gadgets */
  226.  
  227. USHORT zvect2[]={0,0, 0,12, 12,12, 12,0, 0,0,
  228.                 -1,-1, -1,11, 11,11, 11,-1, -1,-1};
  229. USHORT zvect1[]={0,0, 0,10, 10,10, 10,0, 0,0};
  230.  
  231. struct Image fullimage=
  232. { 0,0,
  233.   16,16,4,
  234.   NULL,
  235.   15,0,
  236.   NULL
  237. };
  238.  
  239. struct Image zoomimage=
  240. { 0,0,
  241.   16,16,4,
  242.   NULL,
  243.   15,0,
  244.   NULL
  245. };
  246.  
  247. struct Border vborder;
  248.  
  249. struct Border hborder;
  250.  
  251.  
  252. struct PropInfo hprop=
  253. { FREEHORIZ|AUTOKNOB,
  254.   0,0,
  255.   0xffff,0xffff,
  256.   0,0,
  257.   0,0,
  258.   0,0
  259. };
  260.  
  261. struct PropInfo vprop=
  262. { FREEVERT|AUTOKNOB,
  263.   0,0,
  264.   0xffff,0xffff,
  265.   0,0,
  266.   0,0,
  267.   0,0
  268. };
  269.  
  270. struct Gadget hgad=
  271. { NULL,
  272.   0,VIEWHEIGHT+13,
  273.   624,15,
  274.   0,
  275.   GADGIMMEDIATE|RELVERIFY,
  276.   PROPGADGET,
  277.   &hborder,
  278.   NULL,
  279.   NULL,
  280.   0,
  281.   &hprop,
  282.   2,
  283.   NULL
  284. };
  285.  
  286. struct Gadget vgad=
  287. { &hgad,
  288.   625,11,
  289.   15,VIEWHEIGHT,
  290.   0,
  291.   GADGIMMEDIATE|RELVERIFY,
  292.   PROPGADGET,
  293.   &vborder,
  294.   NULL,
  295.   NULL,
  296.   0,
  297.   &vprop,
  298.   1,
  299.   NULL
  300. };
  301.  
  302. struct Gadget zgad=
  303. { &vgad,
  304.   627,VIEWHEIGHT+15,
  305.   12,12,
  306.   GADGHIMAGE|GADGIMAGE,
  307.   TOGGLESELECT|GADGIMMEDIATE|RELVERIFY,
  308.   BOOLGADGET,
  309.   &fullimage,
  310.   &zoomimage,
  311.   NULL,
  312.   0,
  313.   NULL,
  314.   0,
  315.   NULL
  316. };
  317.  
  318. /* Struktures for Window and Screen */
  319.  
  320. struct NewScreen ns=
  321. {
  322.   0,0,
  323.   640,SCREENHEIGHT,
  324.   4,
  325.   8,1,
  326.   HIRES|LACE,
  327.   CUSTOMSCREEN,
  328.   &textattr,
  329.   (UBYTE *)"Siemens ST 400 Scanner Program © FChK 1991",
  330.   NULL,
  331.   NULL
  332. };
  333.  
  334. struct NewWindow nw=
  335. { 0,10,
  336.   640,SCREENHEIGHT-12,
  337.   8,1,
  338.   CLOSEWINDOW|MENUPICK|GADGETUP|GADGETDOWN|MOUSEBUTTONS,
  339.   WINDOWCLOSE|BACKDROP|BORDERLESS|ACTIVATE|SMART_REFRESH,
  340.   &zgad,
  341.   NULL,
  342.   (UBYTE *)"",
  343.   NULL,
  344.   NULL,
  345.   0,0,
  346.   0,0,
  347.   CUSTOMSCREEN
  348. };
  349.  
  350. /* AHA-Requester Strukturen */
  351.  
  352. struct IntuiText text_na=
  353. { 0,1,
  354.   JAM2,
  355.   4,7,
  356.   &textattr,
  357.   (UBYTE *)"",
  358.   NULL
  359. };
  360.  
  361. struct IntuiText text_aha=
  362. { 0,1,
  363.   JAM2,
  364.   7,4,
  365.   &textattr,
  366.   (UBYTE *)"OK!",
  367.   NULL
  368. };
  369.  
  370.  
  371. /* Menüdaten und -strukturen */
  372.  
  373. struct IntuiText text131=
  374. { 0,1,
  375.   JAM2,
  376.   1,1,
  377.   &textattr,
  378.   (UBYTE *)"   Compressed",
  379.   NULL
  380. };
  381.  
  382. struct IntuiText text130=
  383. { 0,1,
  384.   JAM2,
  385.   1,1,
  386.   &textattr,
  387.   (UBYTE *)"   Raw Data",
  388.   NULL
  389. };
  390.  
  391.  
  392. struct IntuiText text23f=
  393. { 0,1,
  394.   JAM2,
  395.   1,1,
  396.   &textattr,
  397.   (UBYTE *)"   15",
  398.   NULL
  399. };
  400.  
  401. struct IntuiText text23e=
  402. { 0,1,
  403.   JAM2,
  404.   1,1,
  405.   &textattr,
  406.   (UBYTE *)"   14",
  407.   NULL
  408. };
  409.  
  410. struct IntuiText text23d=
  411. { 0,1,
  412.   JAM2,
  413.   1,1,
  414.   &textattr,
  415.   (UBYTE *)"   13",
  416.   NULL
  417. };
  418.  
  419. struct IntuiText text23c=
  420. { 0,1,
  421.   JAM2,
  422.   1,1,
  423.   &textattr,
  424.   (UBYTE *)"   12",
  425.   NULL
  426. };
  427.  
  428. struct IntuiText text23b=
  429. { 0,1,
  430.   JAM2,
  431.   1,1,
  432.   &textattr,
  433.   (UBYTE *)"   11",
  434.   NULL
  435. };
  436.  
  437. struct IntuiText text23a=
  438. { 0,1,
  439.   JAM2,
  440.   1,1,
  441.   &textattr,
  442.   (UBYTE *)"   10",
  443.   NULL
  444. };
  445.  
  446. struct IntuiText text239=
  447. { 0,1,
  448.   JAM2,
  449.   1,1,
  450.   &textattr,
  451.   (UBYTE *)"    9",
  452.   NULL
  453. };
  454.  
  455. struct IntuiText text238=
  456. { 0,1,
  457.   JAM2,
  458.   1,1,
  459.   &textattr,
  460.   (UBYTE *)"    8",
  461.   NULL
  462. };
  463.  
  464. struct IntuiText text237=
  465. { 0,1,
  466.   JAM2,
  467.   1,1,
  468.   &textattr,
  469.   (UBYTE *)"    7",
  470.   NULL
  471. };
  472.  
  473. struct IntuiText text236=
  474. { 0,1,
  475.   JAM2,
  476.   1,1,
  477.   &textattr,
  478.   (UBYTE *)"    6",
  479.   NULL
  480. };
  481.  
  482. struct IntuiText text235=
  483. { 0,1,
  484.   JAM2,
  485.   1,1,
  486.   &textattr,
  487.   (UBYTE *)"    5",
  488.   NULL
  489. };
  490.  
  491. struct IntuiText text234=
  492. { 0,1,
  493.   JAM2,
  494.   1,1,
  495.   &textattr,
  496.   (UBYTE *)"    4",
  497.   NULL
  498. };
  499.  
  500. struct IntuiText text233=
  501. { 0,1,
  502.   JAM2,
  503.   1,1,
  504.   &textattr,
  505.   (UBYTE *)"    3",
  506.   NULL
  507. };
  508.  
  509. struct IntuiText text232=
  510. { 0,1,
  511.   JAM2,
  512.   1,1,
  513.   &textattr,
  514.   (UBYTE *)"    2",
  515.   NULL
  516. };
  517.  
  518. struct IntuiText text231=
  519. { 0,1,
  520.   JAM2,
  521.   1,1,
  522.   &textattr,
  523.   (UBYTE *)"    1",
  524.   NULL
  525. };
  526.  
  527. struct IntuiText text230=
  528. { 0,1,
  529.   JAM2,
  530.   1,1,
  531.   &textattr,
  532.   (UBYTE *)"    0",
  533.   NULL
  534. };
  535.  
  536. struct IntuiText text221=
  537. { 0,1,
  538.   JAM2,
  539.   1,1,
  540.   &textattr,
  541.   (UBYTE *)"   16",
  542.   NULL
  543. };
  544.  
  545. struct IntuiText text220=
  546. { 0,1,
  547.   JAM2,
  548.   1,1,
  549.   &textattr,
  550.   (UBYTE *)"    2",
  551.   NULL
  552. };
  553.  
  554. struct IntuiText text211=
  555. { 0,1,
  556.   JAM2,
  557.   1,1,
  558.   &textattr,
  559.   (UBYTE *)"   DIN A4",
  560.   NULL
  561. };
  562.  
  563. struct IntuiText text210=
  564. { 0,1,
  565.   JAM2,
  566.   1,1,
  567.   &textattr,
  568.   (UBYTE *)"   DIN A5",
  569.   NULL
  570. };
  571.  
  572. struct IntuiText text202=
  573. { 0,1,
  574.   JAM2,
  575.   1,1,
  576.   &textattr,
  577.   (UBYTE *)"   400 DPI",
  578.   NULL
  579. };
  580.  
  581. struct IntuiText text201=
  582. { 0,1,
  583.   JAM2,
  584.   1,1,
  585.   &textattr,
  586.   (UBYTE *)"   300 DPI",
  587.   NULL
  588. };
  589.  
  590. struct IntuiText text200=
  591. { 0,1,
  592.   JAM2,
  593.   1,1,
  594.   &textattr,
  595.   (UBYTE *)"   200 DPI",
  596.   NULL
  597. };
  598.  
  599. struct IntuiText text53=
  600. { 0,1,
  601.   JAM2,
  602.   1,1,
  603.   &textattr,
  604.   (UBYTE *)"Cut",
  605.   NULL
  606. };
  607.  
  608. struct IntuiText text52=
  609. { 0,1,
  610.   JAM2,
  611.   1,1,
  612.   &textattr,
  613.   (UBYTE *)"Mirror V",
  614.   NULL
  615. };
  616.  
  617. struct IntuiText text51=
  618. { 0,1,
  619.   JAM2,
  620.   1,1,
  621.   &textattr,
  622.   (UBYTE *)"Mirror H",
  623.   NULL
  624. };
  625.  
  626. struct IntuiText text50=
  627. { 0,1,
  628.   JAM2,
  629.   1,1,
  630.   &textattr,
  631.   (UBYTE *)"Invert",
  632.   NULL
  633. };
  634.  
  635. struct IntuiText text43=
  636. { 0,1,
  637.   JAM2,
  638.   1,1,
  639.   &textattr,
  640.   (UBYTE *)"Set Accuracy",
  641.   NULL
  642. };
  643.  
  644. struct IntuiText text42=
  645. { 0,1,
  646.   JAM2,
  647.   1,1,
  648.   &textattr,
  649.   (UBYTE *)"Vectorize",
  650.   NULL
  651. };
  652.  
  653. struct IntuiText text41=
  654. { 0,1,
  655.   JAM2,
  656.   1,1,
  657.   &textattr,
  658.   (UBYTE *)"Thinning",
  659.   NULL
  660. };
  661.  
  662. struct IntuiText text40=
  663. { 0,1,
  664.   JAM2,
  665.   1,1,
  666.   &textattr,
  667.   (UBYTE *)"To Gray",
  668.   NULL
  669. };
  670.  
  671. struct IntuiText text3b=
  672. { 0,1,
  673.   JAM2,
  674.   1,1,
  675.   &textattr,
  676.   (UBYTE *)"Median",
  677.   NULL
  678. };
  679.  
  680. struct IntuiText text3a=
  681. { 0,1,
  682.   JAM2,
  683.   1,1,
  684.   &textattr,
  685.   (UBYTE *)"Maximum",
  686.   NULL
  687. };
  688.  
  689. struct IntuiText text39=
  690. { 0,1,
  691.   JAM2,
  692.   1,1,
  693.   &textattr,
  694.   (UBYTE *)"Minimum",
  695.   NULL
  696. };
  697.  
  698. struct IntuiText text38=
  699. { 0,1,
  700.   JAM2,
  701.   1,1,
  702.   &textattr,
  703.   (UBYTE *)"Relief",
  704.   NULL
  705. };
  706.  
  707. struct IntuiText text37=
  708. { 0,1,
  709.   JAM2,
  710.   1,1,
  711.   &textattr,
  712.   (UBYTE *)"VeryLow Pass",
  713.   NULL
  714. };
  715.  
  716. struct IntuiText text36=
  717. { 0,1,
  718.   JAM2,
  719.   1,1,
  720.   &textattr,
  721.   (UBYTE *)"High Pass",
  722.   NULL
  723. };
  724.  
  725. struct IntuiText text35=
  726. { 0,1,
  727.   JAM2,
  728.   1,1,
  729.   &textattr,
  730.   (UBYTE *)"Low Pass",
  731.   NULL
  732. };
  733.  
  734. struct IntuiText text34=
  735. { 0,1,
  736.   JAM2,
  737.   1,1,
  738.   &textattr,
  739.   (UBYTE *)"Stretch Histo",
  740.   NULL
  741. };
  742.  
  743. struct IntuiText text33=
  744. { 0,1,
  745.   JAM2,
  746.   1,1,
  747.   &textattr,
  748.   (UBYTE *)"View Histo",
  749.   NULL
  750. };
  751.  
  752. struct IntuiText text32=
  753. { 0,1,
  754.   JAM2,
  755.   1,1,
  756.   &textattr,
  757.   (UBYTE *)"Binarize",
  758.   NULL
  759. };
  760.  
  761. struct IntuiText text31=
  762. { 0,1,
  763.   JAM2,
  764.   1,1,
  765.   &textattr,
  766.   (UBYTE *)"Dither Ord",
  767.   NULL
  768. };
  769.  
  770. struct IntuiText text30=
  771. { 0,1,
  772.   JAM2,
  773.   1,1,
  774.   &textattr,
  775.   (UBYTE *)"Dither F-S",
  776.   NULL
  777. };
  778.  
  779. struct IntuiText text23=
  780. { 0,1,
  781.   JAM2,
  782.   1,1,
  783.   &textattr,
  784.   (UBYTE *)"Threshold",
  785.   NULL
  786. };
  787.  
  788. struct IntuiText text22=
  789. { 0,1,
  790.   JAM2,
  791.   1,1,
  792.   &textattr,
  793.   (UBYTE *)"Grayscale",
  794.   NULL
  795. };
  796.  
  797. struct IntuiText text21=
  798. { 0,1,
  799.   JAM2,
  800.   1,1,
  801.   &textattr,
  802.   (UBYTE *)"Size",
  803.   NULL
  804. };
  805.  
  806. struct IntuiText text20=
  807. { 0,1,
  808.   JAM2,
  809.   1,1,
  810.   &textattr,
  811.   (UBYTE *)"Resolution",
  812.   NULL
  813. };
  814.  
  815. struct IntuiText text15=
  816. { 0,1,
  817.   JAM2,
  818.   1,1,
  819.   &textattr,
  820.   (UBYTE *)"Exit Program",
  821.   NULL
  822. };
  823.  
  824. struct IntuiText text14=
  825. { 0,1,
  826.   JAM2,
  827.   1,1,
  828.   &textattr,
  829.   (UBYTE *)"Test Scanner",
  830.   NULL
  831. };
  832.  
  833. struct IntuiText text13=
  834. { 0,1,
  835.   JAM2,
  836.   1,1,
  837.   &textattr,
  838.   (UBYTE *)"Save Method...",
  839.   NULL
  840. };
  841.  
  842. struct IntuiText text12=
  843. { 0,1,
  844.   JAM2,
  845.   1,1,
  846.   &textattr,
  847.   (UBYTE *)"Save IFF",
  848.   NULL
  849. };
  850.  
  851. struct IntuiText text11=
  852. { 0,1,
  853.   JAM2,
  854.   1,1,
  855.   &textattr,
  856.   (UBYTE *)"Load IFF",
  857.   NULL
  858. };
  859.  
  860. struct IntuiText text10=
  861. { 0,1,
  862.   JAM2,
  863.   1,1,
  864.   &textattr,
  865.   (UBYTE *)"Read Scanner",
  866.   NULL
  867. };
  868.  
  869. struct IntuiText text03=
  870. { 0,1,
  871.   JAM2,
  872.   1,1,
  873.   &textattr,
  874.   (UBYTE *)"Not For Commercial Use",
  875.   NULL
  876. };
  877.  
  878. struct IntuiText text02=
  879. { 0,1,
  880.   JAM2,
  881.   1,1,
  882.   &textattr,
  883.   PRG_VERSION,
  884.   NULL
  885. };
  886.  
  887.  
  888. struct IntuiText text01=
  889. { 0,1,
  890.   JAM2,
  891.   1,1,
  892.   &textattr,
  893.   (UBYTE *)"Frank-Christian Krügel",
  894.   NULL
  895. };
  896.  
  897. struct IntuiText text00=
  898. { 0,1,
  899.   JAM2,
  900.   1,1,
  901.   &textattr,
  902.   (UBYTE *)"Program written by",
  903.   NULL
  904. };
  905.  
  906.  
  907. struct MenuItem item131=
  908. { NULL,
  909.   112,10,
  910.   112,10,
  911.   ITEMTEXT|HIGHCOMP|ITEMENABLED|CHECKIT,
  912.   0xfffd,
  913.   (APTR)&text131,
  914.   NULL,
  915.   0,
  916.   NULL,
  917.   0
  918. };
  919.  
  920. struct MenuItem item130=
  921. { &item131,
  922.   112,0,
  923.   112,10,
  924.   ITEMTEXT|HIGHCOMP|ITEMENABLED|CHECKIT|CHECKED,
  925.   0xfffe,
  926.   (APTR)&text130,
  927.   NULL,
  928.   0,
  929.   NULL,
  930.   0
  931. };
  932.  
  933. struct MenuItem item23f=
  934. { NULL,
  935.   120,70,
  936.   40,10,
  937.   ITEMTEXT|HIGHCOMP|ITEMENABLED|CHECKIT,
  938.   0x7fff,
  939.   (APTR)&text23f,
  940.   NULL,
  941.   0, 
  942.   NULL,
  943.   0
  944. };
  945.  
  946. struct MenuItem item23e=
  947. { &item23f,
  948.   120,60,
  949.   40,10,
  950.   ITEMTEXT|HIGHCOMP|ITEMENABLED|CHECKIT,
  951.   0xbfff,
  952.   (APTR)&text23e,
  953.   NULL,
  954.   0, 
  955.   NULL,
  956.   0
  957. };
  958.  
  959. struct MenuItem item23d=
  960. { &item23e,
  961.   120,50,
  962.   40,10,
  963.   ITEMTEXT|HIGHCOMP|ITEMENABLED|CHECKIT,
  964.   0xdfff,
  965.   (APTR)&text23d,
  966.   NULL,
  967.   0, 
  968.   NULL,
  969.   0
  970. };
  971.  
  972. struct MenuItem item23c=
  973. { &item23d,
  974.   120,40,
  975.   40,10,
  976.   ITEMTEXT|HIGHCOMP|ITEMENABLED|CHECKIT,
  977.   0xefff,
  978.   (APTR)&text23c,
  979.   NULL,
  980.   0, 
  981.   NULL,
  982.   0
  983. };
  984.  
  985. struct MenuItem item23b=
  986. { &item23c,
  987.   120,30,
  988.   40,10,
  989.   ITEMTEXT|HIGHCOMP|ITEMENABLED|CHECKIT,
  990.   0xf7ff,
  991.   (APTR)&text23b,
  992.   NULL,
  993.   0, 
  994.   NULL,
  995.   0
  996. };
  997.  
  998. struct MenuItem item23a=
  999. { &item23b,
  1000.   120,20,
  1001.   40,10,
  1002.   ITEMTEXT|HIGHCOMP|ITEMENABLED|CHECKIT,
  1003.   0xfbff,
  1004.   (APTR)&text23a,
  1005.   NULL,
  1006.   0, 
  1007.   NULL,
  1008.   0
  1009. };
  1010.  
  1011. struct MenuItem item239=
  1012. { &item23a,
  1013.   120,10,
  1014.   40,10,
  1015.   ITEMTEXT|HIGHCOMP|ITEMENABLED|CHECKIT,
  1016.   0xfdff,
  1017.   (APTR)&text239,
  1018.   NULL,
  1019.   0, 
  1020.   NULL,
  1021.   0
  1022. };
  1023.  
  1024. struct MenuItem item238=
  1025. { &item239,
  1026.   120,0,
  1027.   40,10,
  1028.   ITEMTEXT|HIGHCOMP|ITEMENABLED|CHECKIT|CHECKED,
  1029.   0xfeff,
  1030.   (APTR)&text238,
  1031.   NULL,
  1032.   0, 
  1033.   NULL,
  1034.   0
  1035. };
  1036.  
  1037. struct MenuItem item237=
  1038. { &item238,
  1039.   80,70,
  1040.   40,10,
  1041.   ITEMTEXT|HIGHCOMP|ITEMENABLED|CHECKIT,
  1042.   0xff7f,
  1043.   (APTR)&text237,
  1044.   NULL,
  1045.   0, 
  1046.   NULL,
  1047.   0
  1048. };
  1049.  
  1050. struct MenuItem item236=
  1051. { &item237,
  1052.   80,60,
  1053.   40,10,
  1054.   ITEMTEXT|HIGHCOMP|ITEMENABLED|CHECKIT,
  1055.   0xffbf,
  1056.   (APTR)&text236,
  1057.   NULL,
  1058.   0, 
  1059.   NULL,
  1060.   0
  1061. };
  1062.  
  1063. struct MenuItem item235=
  1064. { &item236,
  1065.   80,50,
  1066.   40,10,
  1067.   ITEMTEXT|HIGHCOMP|ITEMENABLED|CHECKIT,
  1068.   0xffdf,
  1069.   (APTR)&text235,
  1070.   NULL,
  1071.   0, 
  1072.   NULL,
  1073.   0
  1074. };
  1075.  
  1076. struct MenuItem item234=
  1077. { &item235,
  1078.   80,40,
  1079.   40,10,
  1080.   ITEMTEXT|HIGHCOMP|ITEMENABLED|CHECKIT,
  1081.   0xffef,
  1082.   (APTR)&text234,
  1083.   NULL,
  1084.   0, 
  1085.   NULL,
  1086.   0
  1087. };
  1088.  
  1089. struct MenuItem item233=
  1090. { &item234,
  1091.   80,30,
  1092.   40,10,
  1093.   ITEMTEXT|HIGHCOMP|ITEMENABLED|CHECKIT,
  1094.   0xfff7,
  1095.   (APTR)&text233,
  1096.   NULL,
  1097.   0,
  1098.   NULL,
  1099.   0
  1100. };
  1101.  
  1102. struct MenuItem item232=
  1103. { &item233,
  1104.   80,20,
  1105.   40,10,
  1106.   ITEMTEXT|HIGHCOMP|ITEMENABLED|CHECKIT,
  1107.   0xfffb,
  1108.   (APTR)&text232,
  1109.   NULL,
  1110.   0, 
  1111.   NULL,
  1112.   0
  1113. };
  1114.  
  1115. struct MenuItem item231=
  1116. { &item232,
  1117.   80,10,
  1118.   40,10,
  1119.   ITEMTEXT|HIGHCOMP|ITEMENABLED|CHECKIT,
  1120.   0xfffd,
  1121.   (APTR)&text231,
  1122.   NULL,
  1123.   0,
  1124.   NULL,
  1125.   0
  1126. };
  1127.  
  1128. struct MenuItem item230=
  1129. { &item231,
  1130.   80,0,
  1131.   40,10,
  1132.   ITEMTEXT|HIGHCOMP|ITEMENABLED|CHECKIT,
  1133.   0xfffe,
  1134.   (APTR)&text230,
  1135.   NULL,
  1136.   0, 
  1137.   NULL,
  1138.   0
  1139. };
  1140.  
  1141.  
  1142. struct MenuItem item221=
  1143. { NULL,
  1144.   80,10,
  1145.   80,10,
  1146.   ITEMTEXT|HIGHCOMP|ITEMENABLED|CHECKIT|COMMSEQ,
  1147.   0xfffd,
  1148.   (APTR)&text221,
  1149.   NULL,
  1150.   'g', 
  1151.   NULL,
  1152.   0
  1153. };
  1154.  
  1155. struct MenuItem item220=
  1156. { &item221,
  1157.   80,0,
  1158.   80,10,
  1159.   ITEMTEXT|HIGHCOMP|ITEMENABLED|CHECKIT|CHECKED|COMMSEQ,
  1160.   0xfffe,
  1161.   (APTR)&text220,
  1162.   NULL,
  1163.   'z', 
  1164.   NULL,
  1165.   0
  1166. };
  1167.  
  1168.  
  1169. struct MenuItem item211=
  1170. { NULL,
  1171.   80,10,
  1172.   112,10,
  1173.   ITEMTEXT|HIGHCOMP|ITEMENABLED|CHECKIT|COMMSEQ,
  1174.   0xfffd,
  1175.   (APTR)&text211,
  1176.   NULL,
  1177.   'b', 
  1178.   NULL,
  1179.   0
  1180. };
  1181.  
  1182. struct MenuItem item210=
  1183. { &item211,
  1184.   80,0,
  1185.   112,10,
  1186.   ITEMTEXT|HIGHCOMP|ITEMENABLED|CHECKIT|CHECKED|COMMSEQ,
  1187.   0xfffe,
  1188.   (APTR)&text210,
  1189.   NULL,
  1190.   'a',
  1191.   NULL,
  1192.   0
  1193. };
  1194.  
  1195.  
  1196. struct MenuItem item202=
  1197. { NULL,
  1198.   80,20,
  1199.   120,10,
  1200.   ITEMTEXT|HIGHCOMP|ITEMENABLED|CHECKIT|COMMSEQ,
  1201.   0xfffb,
  1202.   (APTR)&text202,
  1203.   NULL,
  1204.   '4', 
  1205.   NULL,
  1206.   0
  1207. };
  1208.  
  1209. struct MenuItem item201=
  1210. { &item202,
  1211.   80,10,
  1212.   120,10,
  1213.   ITEMTEXT|HIGHCOMP|ITEMENABLED|CHECKIT|COMMSEQ,
  1214.   0xfffd,
  1215.   (APTR)&text201,
  1216.   NULL,
  1217.   '3', 
  1218.   NULL,
  1219.   0
  1220. };
  1221.  
  1222.  
  1223. struct MenuItem item200=
  1224. { &item201,
  1225.   80,0,
  1226.   120,10,
  1227.   ITEMTEXT|HIGHCOMP|ITEMENABLED|CHECKIT|CHECKED|COMMSEQ,
  1228.   0xfffe,
  1229.   (APTR)&text200,
  1230.   NULL,
  1231.   '2', 
  1232.   NULL,
  1233.   0
  1234. };
  1235.  
  1236.  
  1237. struct MenuItem item53=
  1238. { NULL,
  1239.   0,30,
  1240.   88,10,
  1241.   ITEMTEXT|HIGHCOMP|ITEMENABLED,
  1242.   0,
  1243.   (APTR)&text53,
  1244.   NULL,
  1245.   0,
  1246.   NULL,
  1247.   0
  1248. };
  1249.  
  1250. struct MenuItem item52=
  1251. { &item53,
  1252.   0,20,
  1253.   88,10,
  1254.   ITEMTEXT|HIGHCOMP|ITEMENABLED,
  1255.   0,
  1256.   (APTR)&text52,
  1257.   NULL,
  1258.   0,
  1259.   NULL,
  1260.   0
  1261. };
  1262.  
  1263. struct MenuItem item51=
  1264. { &item52,
  1265.   0,10,
  1266.   88,10,
  1267.   ITEMTEXT|HIGHCOMP|ITEMENABLED,
  1268.   0,
  1269.   (APTR)&text51,
  1270.   NULL,
  1271.   0,
  1272.   NULL,
  1273.   0
  1274. };
  1275.  
  1276. struct MenuItem item50=
  1277. { &item51,
  1278.   0,0,
  1279.   88,10,
  1280.   ITEMTEXT|HIGHCOMP|ITEMENABLED,
  1281.   0,
  1282.   (APTR)&text50,
  1283.   NULL,
  1284.   0,
  1285.   NULL,
  1286.   0
  1287. };
  1288.  
  1289. struct MenuItem item43=
  1290. { NULL,
  1291.   0,30,
  1292.   96,10,
  1293.   ITEMTEXT|HIGHCOMP|ITEMENABLED,
  1294.   0,
  1295.   (APTR)&text43,
  1296.   NULL,
  1297.   0,
  1298.   NULL,
  1299.   0
  1300. };
  1301.  
  1302. struct MenuItem item42=
  1303. { &item43,
  1304.   0,20,
  1305.   96,10,
  1306.   ITEMTEXT|HIGHCOMP|ITEMENABLED,
  1307.   0,
  1308.   (APTR)&text42,
  1309.   NULL,
  1310.   0,
  1311.   NULL,
  1312.   0
  1313. };
  1314.  
  1315. struct MenuItem item41=
  1316. { &item42,
  1317.   0,10,
  1318.   96,10,
  1319.   ITEMTEXT|HIGHCOMP|ITEMENABLED,
  1320.   0,
  1321.   (APTR)&text41,
  1322.   NULL,
  1323.   0,
  1324.   NULL,
  1325.   0
  1326. };
  1327.  
  1328. struct MenuItem item40=
  1329. { &item41,
  1330.   0,0,
  1331.   96,10,
  1332.   ITEMTEXT|HIGHCOMP|ITEMENABLED,
  1333.   0,
  1334.   (APTR)&text40,
  1335.   NULL,
  1336.   0,
  1337.   NULL,
  1338.   0
  1339. };
  1340.  
  1341. struct MenuItem item3b=
  1342. { NULL,
  1343.   0,110,
  1344.   112,10,
  1345.   ITEMTEXT|HIGHCOMP|ITEMENABLED,
  1346.   0,
  1347.   (APTR)&text3b,
  1348.   NULL,
  1349.   0,
  1350.   NULL,
  1351.   0
  1352. };
  1353.  
  1354. struct MenuItem item3a=
  1355. { &item3b,
  1356.   0,100,
  1357.   112,10,
  1358.   ITEMTEXT|HIGHCOMP|ITEMENABLED,
  1359.   0,
  1360.   (APTR)&text3a,
  1361.   NULL,
  1362.   0,
  1363.   NULL,
  1364.   0
  1365. };
  1366.  
  1367. struct MenuItem item39=
  1368. { &item3a,
  1369.   0,90,
  1370.   112,10,
  1371.   ITEMTEXT|HIGHCOMP|ITEMENABLED,
  1372.   0,
  1373.   (APTR)&text39,
  1374.   NULL,
  1375.   0,
  1376.   NULL,
  1377.   0
  1378. };
  1379.  
  1380. struct MenuItem item38=
  1381. { &item39,
  1382.   0,80,
  1383.   112,10,
  1384.   ITEMTEXT|HIGHCOMP|ITEMENABLED,
  1385.   0,
  1386.   (APTR)&text38,
  1387.   NULL,
  1388.   0,
  1389.   NULL,
  1390.   0
  1391. };
  1392.  
  1393. struct MenuItem item37=
  1394. { &item38,
  1395.   0,70,
  1396.   112,10,
  1397.   ITEMTEXT|HIGHCOMP|ITEMENABLED,
  1398.   0,
  1399.   (APTR)&text37,
  1400.   NULL,
  1401.   0,
  1402.   NULL,
  1403.   0
  1404. };
  1405.  
  1406. struct MenuItem item36=
  1407. { &item37,
  1408.   0,60,
  1409.   112,10,
  1410.   ITEMTEXT|HIGHCOMP|ITEMENABLED,
  1411.   0,
  1412.   (APTR)&text36,
  1413.   NULL,
  1414.   0,
  1415.   NULL,
  1416.   0
  1417. };
  1418.  
  1419. struct MenuItem item35=
  1420. { &item36,
  1421.   0,50,
  1422.   112,10,
  1423.   ITEMTEXT|HIGHCOMP|ITEMENABLED,
  1424.   0,
  1425.   (APTR)&text35,
  1426.   NULL,
  1427.   0,
  1428.   NULL,
  1429.   0
  1430. };
  1431.  
  1432. struct MenuItem item34=
  1433. { &item35,
  1434.   0,40,
  1435.   112,10,
  1436.   ITEMTEXT|HIGHCOMP|ITEMENABLED,
  1437.   0,
  1438.   (APTR)&text34,
  1439.   NULL,
  1440.   0,
  1441.   NULL,
  1442.   0
  1443. };
  1444.  
  1445. struct MenuItem item33=
  1446. { &item34,
  1447.   0,30,
  1448.   112,10,
  1449.   ITEMTEXT|HIGHCOMP|ITEMENABLED,
  1450.   0,
  1451.   (APTR)&text33,
  1452.   NULL,
  1453.   0,
  1454.   NULL,
  1455.   0
  1456. };
  1457.  
  1458. struct MenuItem item32=
  1459. { &item33,
  1460.   0,20,
  1461.   112,10,
  1462.   ITEMTEXT|HIGHCOMP|ITEMENABLED,
  1463.   0,
  1464.   (APTR)&text32,
  1465.   NULL,
  1466.   0,
  1467.   NULL,
  1468.   0
  1469. };
  1470.  
  1471. struct MenuItem item31=
  1472. { &item32,
  1473.   0,10,
  1474.   112,10,
  1475.   ITEMTEXT|HIGHCOMP|ITEMENABLED,
  1476.   0,
  1477.   (APTR)&text31,
  1478.   NULL,
  1479.   0,
  1480.   NULL,
  1481.   0
  1482. };
  1483.  
  1484. struct MenuItem item30=
  1485. { &item31,
  1486.   0,0,
  1487.   112,10,
  1488.   ITEMTEXT|HIGHCOMP|ITEMENABLED,
  1489.   0,
  1490.   (APTR)&text30,
  1491.   NULL,
  1492.   0,
  1493.   NULL,
  1494.   0
  1495. };
  1496.  
  1497. struct MenuItem item23=
  1498. { NULL,
  1499.   0,30,
  1500.   120,10,
  1501.   ITEMTEXT|HIGHCOMP|ITEMENABLED,
  1502.   0,
  1503.   (APTR)&text23,
  1504.   NULL,
  1505.   0,
  1506.   &item230,
  1507.   0
  1508. };
  1509.  
  1510. struct MenuItem item22=
  1511. { &item23,
  1512.   0,20,
  1513.   120,10,
  1514.   ITEMTEXT|HIGHCOMP|ITEMENABLED,
  1515.   0,
  1516.   (APTR)&text22,
  1517.   NULL,
  1518.   0,
  1519.   &item220,
  1520.   0
  1521. };
  1522.  
  1523. struct MenuItem item21=
  1524. { &item22,
  1525.   0,10,
  1526.   120,10,
  1527.   ITEMTEXT|HIGHCOMP|ITEMENABLED,
  1528.   0,
  1529.   (APTR)&text21,
  1530.   NULL,
  1531.   0,
  1532.   &item210,
  1533.   0
  1534. };
  1535.  
  1536. struct MenuItem item20=
  1537. { &item21,
  1538.   0,0,
  1539.   120,10,
  1540.   ITEMTEXT|HIGHCOMP|ITEMENABLED,
  1541.   0,
  1542.   (APTR)&text20,
  1543.   NULL,
  1544.   0,
  1545.   &item200,
  1546.   0
  1547. };
  1548.  
  1549. struct MenuItem item15=
  1550. { NULL,
  1551.   0,50,
  1552.   176,10,
  1553.   ITEMTEXT|HIGHCOMP|ITEMENABLED|COMMSEQ,
  1554.   0,
  1555.   (APTR)&text15,
  1556.   NULL,
  1557.   'x',
  1558.   NULL,
  1559.   0
  1560. };
  1561.  
  1562. struct MenuItem item14=
  1563. { &item15,
  1564.   0,40,
  1565.   176,10,
  1566.   ITEMTEXT|HIGHCOMP|ITEMENABLED|COMMSEQ,
  1567.   0,
  1568.   (APTR)&text14,
  1569.   NULL,
  1570.   't',
  1571.   NULL,
  1572.   0
  1573. };
  1574.  
  1575. struct MenuItem item13=
  1576. { &item14,
  1577.   0,30,
  1578.   176,10,
  1579.   ITEMTEXT|HIGHCOMP|ITEMENABLED|COMMSEQ,
  1580.   0,
  1581.   (APTR)&text13,
  1582.   NULL,
  1583.   'c',
  1584.   &item130,
  1585.   0
  1586. };
  1587.  
  1588. struct MenuItem item12=
  1589. { &item13,
  1590.   0,20,
  1591.   176,10,
  1592.   ITEMTEXT|HIGHCOMP|COMMSEQ,
  1593.   0,
  1594.   (APTR)&text12,
  1595.   NULL,
  1596.   's',
  1597.   NULL,
  1598.   0
  1599. };
  1600.     
  1601. struct MenuItem item11=
  1602. { &item12,
  1603.   0,10,
  1604.   176,10,
  1605.   ITEMTEXT|HIGHCOMP|COMMSEQ|ITEMENABLED,
  1606.   0,
  1607.   (APTR)&text11,
  1608.   NULL,
  1609.   'l',
  1610.   NULL,
  1611.   0
  1612. };
  1613.     
  1614. struct MenuItem item10=
  1615. { &item11,
  1616.   0,0,
  1617.   176,10,
  1618.   ITEMTEXT|HIGHCOMP|ITEMENABLED|COMMSEQ,
  1619.   0,
  1620.   (APTR)&text10,
  1621.   NULL,
  1622.   'r',
  1623.   NULL,
  1624.   0
  1625. };
  1626.  
  1627. struct MenuItem item03=
  1628. { NULL,
  1629.   0,30,
  1630.   160,10,
  1631.   ITEMTEXT|HIGHNONE|ITEMENABLED,
  1632.   0,
  1633.   (APTR)&text03,
  1634.   NULL,
  1635.   0,
  1636.   NULL,
  1637.   0
  1638. };
  1639.  
  1640. struct MenuItem item02=
  1641. { &item03,
  1642.   0,20,
  1643.   160,10,
  1644.   ITEMTEXT|HIGHNONE|ITEMENABLED,
  1645.   0,
  1646.   (APTR)&text02,
  1647.   NULL,
  1648.   0,
  1649.   NULL,
  1650.   0
  1651. };
  1652.  
  1653. struct MenuItem item01=
  1654. { &item02,
  1655.   0,10,
  1656.   160,10,
  1657.   ITEMTEXT|HIGHNONE|ITEMENABLED,
  1658.   0,
  1659.   (APTR)&text01,
  1660.   NULL,
  1661.   0,
  1662.   NULL,
  1663.   0
  1664. };
  1665.  
  1666. struct MenuItem item00=
  1667. { &item01,
  1668.   0,0,
  1669.   160,10,
  1670.   ITEMTEXT|HIGHNONE|ITEMENABLED,
  1671.   0,
  1672.   (APTR)&text00,
  1673.   NULL,
  1674.   0,
  1675.   NULL,
  1676.   0
  1677. };
  1678.  
  1679. struct Menu menu5=
  1680. { NULL,
  1681.   460,0,
  1682.   80,8,
  1683.   NULL,
  1684.   "Transform",
  1685.   &item50
  1686. };
  1687.  
  1688. struct Menu menu4=
  1689. { &menu5,
  1690.   360,0,
  1691.   88,8,
  1692.   NULL,
  1693.   "BW Process",
  1694.   &item40
  1695. };
  1696.  
  1697. struct Menu menu3=
  1698. { &menu4,
  1699.   250,0,
  1700.   104,8,
  1701.   NULL,
  1702.   "Gray Process",
  1703.   &item30
  1704. };
  1705.  
  1706. struct Menu menu2=
  1707. { &menu3,
  1708.   160,0,
  1709.   72,8,
  1710.   MENUENABLED,
  1711.   "Settings",
  1712.   &item20
  1713. };
  1714.  
  1715. struct Menu menu1=
  1716. { &menu2,
  1717.   64,0,
  1718.   64,8,
  1719.   MENUENABLED,
  1720.   "Program",
  1721.   &item10
  1722. };
  1723.  
  1724. struct Menu menu0=
  1725. { &menu1,
  1726.   0,0,
  1727.   40,8,
  1728.   MENUENABLED,
  1729.   "Info",
  1730.   &item00
  1731. };
  1732.  
  1733. void ende()
  1734. { if (memptr) free(memptr);
  1735.   if (!(noscan))
  1736.   { if(openerror==0)
  1737.     { CloseDevice(diskreq);
  1738.     }
  1739.     if(diskport)DeletePort(diskport);
  1740.     if(diskreq)DeleteStdIO(diskreq);
  1741.   }
  1742.   if (win) { ClearMenuStrip(win); CloseWindow(win); }
  1743.   if (scr) CloseScreen(scr); 
  1744.   if (imgptrf) FreeMem(imgptrf,sizeof(imagedataf));
  1745.   if (imgptrz) FreeMem(imgptrz,sizeof(imagedataz));
  1746.   if (ReqBase) CloseLibrary(ReqBase);
  1747.   if (DosBase) CloseLibrary(DosBase);
  1748.   if (GfxBase) CloseLibrary(GfxBase);
  1749.   if (IntuitionBase) CloseLibrary(IntuitionBase);
  1750. }
  1751.  
  1752. void menu(USHORT Code)
  1753. {
  1754.   USHORT num,item,subitem;
  1755.   num=MENUNUM(Code);
  1756.   item=ITEMNUM(Code);
  1757.   subitem=SUBNUM(Code);
  1758.   switch(num)
  1759.   {  case 0: break;                    /* Info */
  1760.      case 1: switch(item)              /* Programm */
  1761.              { case 0: scan();         /* Einlesen */
  1762.                        vprop.VertBody=(zgad.Flags&SELECTED)?0xffff:VIEWHEIGHT*65536/memheight;
  1763.                        hprop.HorizBody=(zgad.Flags&SELECTED)?0xffff:624*65536/memwidth;
  1764.                        vprop.VertPot=0;
  1765.                        hprop.HorizPot=0;
  1766.                        RefreshGadgets(&zgad,win,NULL);
  1767.                        if (memneed)
  1768.                        { view(0,0,(zgad.Flags&SELECTED));
  1769.                          mf=0;
  1770.                        }
  1771.                        break;
  1772.                case 1: load();
  1773.                        vprop.VertBody=(!(memheight))||(zgad.Flags&SELECTED)?0xffff:VIEWHEIGHT*65536/memheight;
  1774.                        hprop.HorizBody=(!(memwidth))||(zgad.Flags&SELECTED)?0xffff:624*65536/memwidth;
  1775.                        vprop.VertPot=0;
  1776.                        hprop.HorizPot=0;
  1777.                        RefreshGadgets(&zgad,win,NULL);
  1778.                        if (memneed)
  1779.                        { view(0,0,(zgad.Flags&SELECTED));
  1780.                          mf=0;
  1781.                        }
  1782.                        break;
  1783.                case 2: save(wx1,wy1,wx2,wy2,cmp,mf); /* Speichern */
  1784.                        break;
  1785.                case 3: cmp=subitem;
  1786.                        break;
  1787.                case 4: inquiry();
  1788.                        break;
  1789.                case 5: ende();         /* Ende */
  1790.                        exit(0L);
  1791.                        break;
  1792.              }
  1793.              break;
  1794.      case 2: switch(item)
  1795.              { case 0: winpar.resx=100*(subitem+2);
  1796.                        winpar.resy=winpar.resx;
  1797.                        break;
  1798.                case 1: winpar.size=5-subitem;
  1799.                        break;
  1800.                case 2: winpar.halftone=subitem<<1;
  1801.                        winpar.bitspixel=subitem ? 8 : 1;
  1802.                        break;
  1803.                case 3: winpar.threshold=subitem<<2;
  1804.                        break;
  1805.              }
  1806.              break;
  1807.      case 3: switch(item)
  1808.              { case 0: if ((memgray)&&(memneed))
  1809.                        { floyd();
  1810.                          if (memneed) view(hprop.HorizPot*(memwidth-624)/65536,
  1811.                                            vprop.VertPot*(memheight-VIEWHEIGHT)/65536,
  1812.                                            (zgad.Flags&SELECTED));
  1813.                          if (mf==2) drawbox(wx1,wy1,wx2,wy2,wrp);
  1814.                        }
  1815.                        break;
  1816.                case 1: if ((memgray)&&(memneed))
  1817.                        { ordered();
  1818.                          if (memneed) view(hprop.HorizPot*(memwidth-624)/65536,
  1819.                                            vprop.VertPot*(memheight-VIEWHEIGHT)/65536,
  1820.                                            (zgad.Flags&SELECTED));
  1821.                          if (mf==2) drawbox(wx1,wy1,wx2,wy2,wrp);
  1822.                        }
  1823.                        break;
  1824.                case 2: if ((memgray)&&(memneed))
  1825.                        { thresh(); 
  1826.                          if (memneed) view(hprop.HorizPot*(memwidth-624)/65536,
  1827.                                            vprop.VertPot*(memheight-VIEWHEIGHT)/65536,
  1828.                                            (zgad.Flags&SELECTED));
  1829.                          if (mf==2) drawbox(wx1,wy1,wx2,wy2,wrp);
  1830.                        }
  1831.                        break;
  1832.                case 3: if ((memgray)&&(memneed)) viewhisto(wrp);
  1833.                        break;
  1834.                case 4: if ((memgray)&&(memneed))
  1835.                        { stretchhisto(); 
  1836.                          if (memneed) view(hprop.HorizPot*(memwidth-624)/65536,
  1837.                                            vprop.VertPot*(memheight-VIEWHEIGHT)/65536,
  1838.                                            (zgad.Flags&SELECTED));
  1839.                          if (mf==2) drawbox(wx1,wy1,wx2,wy2,wrp);
  1840.                        }
  1841.                        break;
  1842.                case 5: if ((memgray)&&(memneed))
  1843.                        { lowpass(); 
  1844.                          if (memneed) view(hprop.HorizPot*(memwidth-624)/65536,
  1845.                                            vprop.VertPot*(memheight-VIEWHEIGHT)/65536,
  1846.                                            (zgad.Flags&SELECTED));
  1847.                          if (mf==2) drawbox(wx1,wy1,wx2,wy2,wrp);
  1848.                        }
  1849.                        break;
  1850.                case 6: if ((memgray)&&(memneed))
  1851.                        { highpass(); 
  1852.                          if (memneed) view(hprop.HorizPot*(memwidth-624)/65536,
  1853.                                            vprop.VertPot*(memheight-VIEWHEIGHT)/65536,
  1854.                                            (zgad.Flags&SELECTED));
  1855.                          if (mf==2) drawbox(wx1,wy1,wx2,wy2,wrp);
  1856.                        }
  1857.                        break;
  1858.                case 7: if ((memgray)&&(memneed))
  1859.                        { blowpass(); 
  1860.                          if (memneed) view(hprop.HorizPot*(memwidth-624)/65536,
  1861.                                            vprop.VertPot*(memheight-VIEWHEIGHT)/65536,
  1862.                                            (zgad.Flags&SELECTED));
  1863.                          if (mf==2) drawbox(wx1,wy1,wx2,wy2,wrp);
  1864.                        }
  1865.                        break;
  1866.                case 8: if ((memgray)&&(memneed))
  1867.                        { relief(); 
  1868.                          if (memneed) view(hprop.HorizPot*(memwidth-624)/65536,
  1869.                                            vprop.VertPot*(memheight-VIEWHEIGHT)/65536,
  1870.                                            (zgad.Flags&SELECTED));
  1871.                          if (mf==2) drawbox(wx1,wy1,wx2,wy2,wrp);
  1872.                        }
  1873.                        break;
  1874.                case 9: if ((memgray)&&(memneed))
  1875.                        { minop(); 
  1876.                          if (memneed) view(hprop.HorizPot*(memwidth-624)/65536,
  1877.                                            vprop.VertPot*(memheight-VIEWHEIGHT)/65536,
  1878.                                            (zgad.Flags&SELECTED));
  1879.                          if (mf==2) drawbox(wx1,wy1,wx2,wy2,wrp);
  1880.                        }
  1881.                        break;
  1882.                case 10:if ((memgray)&&(memneed))
  1883.                        { maxop(); 
  1884.                          if (memneed) view(hprop.HorizPot*(memwidth-624)/65536,
  1885.                                            vprop.VertPot*(memheight-VIEWHEIGHT)/65536,
  1886.                                            (zgad.Flags&SELECTED));
  1887.                          if (mf==2) drawbox(wx1,wy1,wx2,wy2,wrp);
  1888.                        }
  1889.                        break;
  1890.                case 11:if ((memgray)&&(memneed))
  1891.                        { median(); 
  1892.                          if (memneed) view(hprop.HorizPot*(memwidth-624)/65536,
  1893.                                            vprop.VertPot*(memheight-VIEWHEIGHT)/65536,
  1894.                                            (zgad.Flags&SELECTED));
  1895.                          if (mf==2) drawbox(wx1,wy1,wx2,wy2,wrp);
  1896.                        }
  1897.                        break;
  1898.              }
  1899.              break;
  1900.      case 4: switch(item)
  1901.              { case 0: if ((!(memgray))&&(memneed))
  1902.                        { togray();
  1903.                          if (memneed) view(hprop.HorizPot*(memwidth-624)/65536,
  1904.                                            vprop.VertPot*(memheight-VIEWHEIGHT)/65536,
  1905.                                            (zgad.Flags&SELECTED));
  1906.                          if (mf==2) drawbox(wx1,wy1,wx2,wy2,wrp);
  1907.                        }
  1908.                        break;
  1909.                case 1: if ((!(memgray))&&(memneed))
  1910.                        { thin();
  1911.                          if (memneed) view(hprop.HorizPot*(memwidth-624)/65536,
  1912.                                            vprop.VertPot*(memheight-VIEWHEIGHT)/65536,
  1913.                                            (zgad.Flags&SELECTED));
  1914.                          if (mf==2) drawbox(wx1,wy1,wx2,wy2,wrp);
  1915.                        }
  1916.                        break;
  1917.                case 2: if ((!(memgray))&&(memneed))
  1918.                        { vectorize();
  1919.                          if (memneed) view(hprop.HorizPot*(memwidth-624)/65536,
  1920.                                            vprop.VertPot*(memheight-VIEWHEIGHT)/65536,
  1921.                                            (zgad.Flags&SELECTED));
  1922.                          if (mf==2) drawbox(wx1,wy1,wx2,wy2,wrp);
  1923.                        }
  1924.                        break;
  1925.                case 3: chngmaxdiff();
  1926.                        break;
  1927.              }
  1928.              break;
  1929.      case 5: switch(item)
  1930.              { case 0: if (memneed)
  1931.                        { invert();
  1932.                          if (memneed) view(hprop.HorizPot*(memwidth-624)/65536,
  1933.                                            vprop.VertPot*(memheight-VIEWHEIGHT)/65536,
  1934.                                            (zgad.Flags&SELECTED));
  1935.                          if (mf==2) drawbox(wx1,wy1,wx2,wy2,wrp);
  1936.                        }
  1937.                        break;
  1938.                case 1: if (memneed)
  1939.                        { mirrorh();
  1940.                          if (memneed) view(hprop.HorizPot*(memwidth-624)/65536,
  1941.                                            vprop.VertPot*(memheight-VIEWHEIGHT)/65536,
  1942.                                            (zgad.Flags&SELECTED));
  1943.                          if (mf==2) drawbox(wx1,wy1,wx2,wy2,wrp);
  1944.                        }
  1945.                        break;
  1946.                case 2: if (memneed)
  1947.                        { mirrorv();
  1948.                          if (memneed) view(hprop.HorizPot*(memwidth-624)/65536,
  1949.                                            vprop.VertPot*(memheight-VIEWHEIGHT)/65536,
  1950.                                            (zgad.Flags&SELECTED));
  1951.                          if (mf==2) drawbox(wx1,wy1,wx2,wy2,wrp);
  1952.                        }
  1953.                        break;
  1954.                case 3: if (memneed)
  1955.                        { cut(wx1,wy1,wx2,wy2,mf);
  1956.                          if (memneed) view(hprop.HorizPot*(memwidth-624)/65536,
  1957.                                            vprop.VertPot*(memheight-VIEWHEIGHT)/65536,
  1958.                                            (zgad.Flags&SELECTED));
  1959.                          mf=0;
  1960.                        }
  1961.                        break;
  1962.              }
  1963.              break;
  1964.   }
  1965. }
  1966.  
  1967. void main()
  1968. { static ULONG MessageClass;
  1969.   static USHORT Code;
  1970.   USHORT i;
  1971.   USHORT nr;
  1972.   UWORD mx,my;
  1973.  
  1974.   if ((IntuitionBase = (struct IntuitionBase *)
  1975.        OpenLibrary("intuition.library",0L)) == 0L)
  1976.   {    ende();
  1977.        exit(100L);
  1978.   }
  1979.   if ((GfxBase = (struct GfxBase *)
  1980.        OpenLibrary("graphics.library",0L))==0L)
  1981.   {    ende();
  1982.        exit(100L);
  1983.   }
  1984.   if ((DosBase = (struct DosBase *)
  1985.        OpenLibrary("dos.library",0L))==0L)
  1986.   {    ende();
  1987.        exit(100L);
  1988.   } 
  1989.   if ((ReqBase = (struct ReqBase *)
  1990.        OpenLibrary("req.library",0L))==0L)
  1991.   {    ende();
  1992.        exit(100L);
  1993.   } 
  1994.   if (!(imgptrf=AllocMem(sizeof(imagedataf),MEMF_CHIP)))
  1995.   {    ende();
  1996.        exit(85L);
  1997.   }
  1998.   if (!(imgptrz=AllocMem(sizeof(imagedataz),MEMF_CHIP)))
  1999.   {    ende();
  2000.        exit(85L);
  2001.   }
  2002.   memneed=0;
  2003.   noscan=0;
  2004.   memcpy(imgptrf,&imagedataf,sizeof(imagedataf));
  2005.   memcpy(imgptrz,&imagedataz,sizeof(imagedataz));
  2006.   fullimage.ImageData=(USHORT *)imgptrf;
  2007.   zoomimage.ImageData=(USHORT *)imgptrz;
  2008.   if (!(scr=(struct Screen*)OpenScreen(&ns)))
  2009.   {    ende();
  2010.        exit(90L);
  2011.   }
  2012.   vp=&scr->ViewPort;
  2013.   rp=&scr->RastPort;
  2014.   for (i=0;i<16;i++)
  2015.   { SetRGB4(vp,i,graystep[i],graystep[i],graystep[i]); }
  2016.   nw.Screen=scr;
  2017.   if (!(win=(struct Window *)OpenWindow(&nw)))
  2018.   {    ende();
  2019.        exit(90L);
  2020.   }
  2021.   wrp=win->RPort;
  2022.   if(!(diskport=CreatePort(0L,0L)))
  2023.   {    noscan=1;
  2024.   }
  2025.   if(!(diskreq=(struct IOStdReq *)CreateStdIO(diskport)))
  2026.   {    noscan=1;
  2027.        if(diskport)DeletePort(diskport);
  2028.   }
  2029.   if(openerror=OpenDevice(DEV_NAME,ST400ID,diskreq,0L))
  2030.   {    noscan=1;
  2031.        if(diskport)DeletePort(diskport);
  2032.        if(diskreq)DeleteStdIO(diskreq);
  2033.   }
  2034.   if (noscan)
  2035.   { item10.Flags&=(~ITEMENABLED);
  2036.     item14.Flags&=(~ITEMENABLED);
  2037.   }
  2038.   memptr=NULL; 
  2039.   cmp=mf=0;
  2040.   SetMenuStrip(win,&menu0);
  2041.   for (i=0;i<256;i++) numbits[i]=numbits_16[i/16]+numbits_16[i&15];
  2042.   SetWindowTitles(win,"No area selected                          ",(UBYTE *)-1);
  2043.   for(;;)
  2044.   { Wait((long)(1L<<win->UserPort->mp_SigBit));
  2045.     while (Message=(struct IntuiMessage *)GetMsg(win->UserPort))
  2046.     {
  2047.       MessageClass=Message->Class;
  2048.       Code=Message->Code;
  2049.       ReplyMsg(Message);
  2050.       if (MessageClass==MENUPICK) menu(Code);
  2051.       if (((MessageClass==GADGETUP))&&(memneed))
  2052.       { if (!(Message->IAddress->GadgetID))
  2053.         { vprop.VertBody=(zgad.Flags&SELECTED)?0xffff:VIEWHEIGHT*65536/memheight;
  2054.           hprop.HorizBody=(zgad.Flags&SELECTED)?0xffff:624*65536/memwidth;
  2055.           vprop.VertPot=0;
  2056.           hprop.HorizPot=0;
  2057.         }
  2058.         view(hprop.HorizPot*(memwidth-624)/65536,vprop.VertPot*(memheight-VIEWHEIGHT)/65536,(zgad.Flags&SELECTED));
  2059.         if (mf==2) drawbox(wx1,wy1,wx2,wy2,wrp);
  2060.         RefreshGadgets(&vgad,win,NULL);
  2061.       }
  2062.       if ((MessageClass==MOUSEBUTTONS)&&(Code&128)&&(memneed))
  2063.       { mx=win->MouseX; my=win->MouseY;
  2064.         if ((mx<624)&&(my>=10)&&(my<VIEWHEIGHT))
  2065.         switch(mf)
  2066.         { case 0: wx1=s2px(mx)&0xfff8; wy1=s2py(my-11); mf=1; break;
  2067.           case 1: wx2=s2px(mx)&0xfff8; wy2=s2py(my-11); mf=2; 
  2068.                   drawbox(wx1,wy1,wx2,wy2,wrp); break;
  2069.           case 2: mf=0; drawbox(wx1,wy1,wx2,wy2,wrp); break;
  2070.         }
  2071.       }
  2072.       if (MessageClass==CLOSEWINDOW)
  2073.       { ende();
  2074.         exit(0L);
  2075.       } /* if */
  2076.       if ((!(memgray))&&(memneed)) menu4.Flags|=MENUENABLED;
  2077.       else menu4.Flags&=(~MENUENABLED);
  2078.       if ((memgray)&&(memneed)) menu3.Flags|=MENUENABLED;
  2079.       else menu3.Flags&=(~MENUENABLED);
  2080.       if (memneed)
  2081.       { item12.Flags|=ITEMENABLED;
  2082.         menu5.Flags|=MENUENABLED;
  2083.       }
  2084.       else
  2085.       { item12.Flags&=(~ITEMENABLED);
  2086.         menu5.Flags&=(~MENUENABLED);
  2087.       }
  2088.       switch(mf)
  2089.       { case 0: SetWindowTitles(win,"No area selected                          ",(UBYTE *)-1);
  2090.                 item53.Flags&=(~ITEMENABLED);
  2091.                 break; 
  2092.         case 1: SetWindowTitles(win,"Select next point                         ",(UBYTE *)-1);
  2093.                 item53.Flags&=(~ITEMENABLED);
  2094.                 break; 
  2095.         case 2: SetWindowTitles(win,"Area selected                             ",(UBYTE *)-1);
  2096.                 item53.Flags|=ITEMENABLED;
  2097.                 break; 
  2098.       }
  2099.     } /* while */
  2100.   } /* for */
  2101. } /* main */
  2102.  
  2103.