home *** CD-ROM | disk | FTP | other *** search
/ Dream 44 / Amiga_Dream_44.iso / Amiga / workbench / pilotes / scanners / StScan.lha / StScan / stscan.c < prev    next >
C/C++ Source or Header  |  1997-08-16  |  42KB  |  2,612 lines

  1. /*
  2. **      $VER: stscan.c 3.01D (16.8.97)
  3. **
  4. **      STScan main module
  5. **
  6. **      Written by Frank-Christian Kruegel, Henning Peters, Andreas R. Kleinert
  7. **      GNU General Public License V2
  8. */
  9.  
  10. #include "stscan.h"
  11.  
  12. #define PRG_VERSION (UBYTE *)"Version 3.01D"
  13. #define ST400ID 3
  14. #define PREFNAME "PROGDIR:StScan.pref"
  15.  
  16. const char version[]="\0$VER: StScan 3.01D ("__DATE__")\0";
  17.  
  18. char *_procname="StScan";
  19. long _BackGroundIO=0;
  20. long _stack=50000;
  21. long _priority=0;
  22.  
  23. struct Window *win;
  24. struct IOStdReq *diskreq;
  25. struct ViewPort *vp;
  26. struct RastPort *rp;
  27. ULONG memneed;
  28. UWORD memwidth, memheight;
  29. UWORD membpl; /*needed for thinning*/
  30. UBYTE memgray;
  31. UBYTE *memptr;
  32. UBYTE *bufptr;
  33. UWORD screenwidth,screenheight,viewwidth,viewheight;
  34. ULONG viewoffset,lineoffset;
  35. UBYTE numcols;
  36.  
  37. static UBYTE mf,cmp;
  38. static struct RastPort *wrp;
  39. struct IntuitionBase *IntuitionBase;
  40. struct GfxBase *GfxBase;
  41. struct DosBase *DosBase;
  42. struct ReqToolsBase *ReqToolsBase;
  43. static struct IntuiMessage *Message;
  44. static struct Screen *scr;
  45. static struct MsgPort *diskport;
  46. static long openerror;
  47. static UBYTE noscan;
  48. static UWORD *imgptrf, *imgptrz;
  49. static UWORD wx1,wy1,wx2,wy2;
  50. static UBYTE numbits_16[]={0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4};
  51. static struct DimensionInfo diminfo;
  52.  
  53. static int pal2024=0;
  54. static int laceon=0;
  55. static int screenmode=0;
  56. static char scsidevice[50];
  57. static const char defaultdevice[]="scsi.device\000";
  58.  
  59. UBYTE numbits[256];
  60.  
  61. UBYTE graystep4[]={0,12,8,4};
  62. UBYTE graystep16[]={0,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1};
  63. UBYTE pal4_2024[4][3]={  { 0, 0, 0},{15,15,15},{ 8, 0, 8},{ 0, 0, 8}};
  64. UBYTE pal16_2024[16][3]={{ 0, 0, 0},{15,15,15},{15,15,15},{15,15, 8},
  65.                          {15,15, 8},{ 8, 0, 9},{ 8, 0, 9},{ 8, 0, 8},
  66.                          { 8, 0, 8},{ 0, 8, 8},{ 0, 8, 8},{ 0, 0, 9},
  67.                          { 0, 0, 9},{ 0, 0, 8},{ 0, 0, 8},{ 0, 0, 0}};
  68. UBYTE a2024step[]={0,15,4,8};
  69. UBYTE bitval[]={128,64,32,16,8,4,2,1};
  70. UBYTE invbitval[]={127,191,223,239,247,251,253,254};
  71. UBYTE revbit[]={
  72.    0, 128,  64, 192,  32, 160,  96, 224,  16, 144,  80, 208,  48, 176, 112, 240,
  73.    8, 136,  72, 200,  40, 168, 104, 232,  24, 152,  88, 216,  56, 184, 120, 248,
  74.    4, 132,  68, 196,  36, 164, 100, 228,  20, 148,  84, 212,  52, 180, 116, 244,
  75.   12, 140,  76, 204,  44, 172, 108, 236,  28, 156,  92, 220,  60, 188, 124, 252,
  76.    2, 130,  66, 194,  34, 162,  98, 226,  18, 146,  82, 210,  50, 178, 114, 242,
  77.   10, 138,  74, 202,  42, 170, 106, 234,  26, 154,  90, 218,  58, 186, 122, 250,
  78.    6, 134,  70, 198,  38, 166, 102, 230,  22, 150,  86, 214,  54, 182, 118, 246,
  79.   14, 142,  78, 206,  46, 174, 110, 238,  30, 158,  94, 222,  62, 190, 126, 254,
  80.    1, 129,  65, 193,  33, 161,  97, 225,  17, 145,  81, 209,  49, 177, 113, 241,
  81.    9, 137,  73, 201,  41, 169, 105, 233,  25, 153,  89, 217,  57, 185, 121, 249,
  82.    5, 133,  69, 197,  37, 165, 101, 229,  21, 149,  85, 213,  53, 181, 117, 245,
  83.   13, 141,  77, 205,  45, 173, 109, 237,  29, 157,  93, 221,  61, 189, 125, 253,
  84.    3, 131,  67, 195,  35, 163,  99, 227,  19, 147,  83, 211,  51, 179, 115, 243,
  85.   11, 139,  75, 203,  43, 171, 107, 235,  27, 155,  91, 219,  59, 187, 123, 251,
  86.    7, 135,  71, 199,  39, 167, 103, 231,  23, 151,  87, 215,  55, 183, 119, 247,
  87.   15, 143,  79, 207,  47, 175, 111, 239,  31, 159,  95, 223,  63, 191, 127, 255
  88. };
  89.  
  90. static ULONG viewmodes[]=
  91. { HIRES_KEY, SUPER_KEY,
  92.   NTSC_MONITOR_ID|HIRES_KEY, NTSC_MONITOR_ID|SUPER_KEY,
  93.   PAL_MONITOR_ID|HIRES_KEY, PAL_MONITOR_ID|SUPER_KEY,
  94.   VGAPRODUCT_KEY,A2024TENHERTZ_KEY
  95. };
  96. static UBYTE modecols[]=
  97. { 16,4,
  98.   16,4,
  99.   16,4,
  100.   4,4
  101. };
  102.  
  103. struct DefWindow winpar= /*default values */
  104. {  0,0,32,      /*dummy1, dummy2, wpsize*/
  105.    1,0,         /*winnr, dummy3*/
  106.    200,200,     /*resx, resy*/
  107.    0,0,0,0,     /*cornerx, cornery, width, height*/
  108.    0,32,6,      /*dummy4, threshold, size*/
  109.    0,1,         /*halftone, bitspixel*/
  110.    0,0,0        /*dummy5,6,7*/
  111. };
  112.  
  113. UWORD imagedataf[]=
  114. { 0xfff0,
  115.   0xfff0,
  116.   0xc030,
  117.   0xdff0,
  118.   0xdff0,
  119.   0xc0f0,
  120.   0xdff0,
  121.   0xdff0,
  122.   0xdff0,
  123.   0xdff0,
  124.   0xfff0,
  125.   0xfff0,
  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.   0x0000,
  151.   0x0000,
  152.   0x0000,
  153.   0x0000,
  154.   0x0000,
  155.   0x0000,
  156.   0x0000,
  157.   0x0000,
  158.   0x0000,
  159.   0x0000,
  160.   0x0000,
  161.   0x0000,
  162.   0x0000,
  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. UWORD imagedataz[]=
  179. { 0xfff0,
  180.   0xfff0,
  181.   0xc030,
  182.   0xff70,
  183.   0xfef0,
  184.   0xfdf0,
  185.   0xfbf0,
  186.   0xf7f0,
  187.   0xeff0,
  188.   0xc030,
  189.   0xfff0,
  190.   0xfff0,
  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.   0x0000,
  216.   0x0000,
  217.   0x0000,
  218.   0x0000,
  219.   0x0000,
  220.   0x0000,
  221.   0x0000,
  222.   0x0000,
  223.   0x0000,
  224.   0x0000,
  225.   0x0000,
  226.   0x0000,
  227.   0x0000,
  228.   0x0000,
  229.   0x0000,
  230.   0x0000,
  231.   0x0000,
  232.   0x0000,
  233.   0x0000,
  234.   0x0000,
  235.   0x0000,
  236.   0x0000,
  237.   0x0000,
  238.   0x0000,
  239.   0x0000,
  240.   0x0000,
  241.   0x0000,
  242.   0x0000};
  243.  
  244. /* Struktures for Windows and Menus */
  245.  
  246. struct TextAttr textattr=
  247. { "topaz.font",
  248.    8,
  249.    FS_NORMAL,
  250.    FPF_ROMFONT
  251. };
  252.  
  253. /* Struktures for Gadgets */
  254.  
  255. WORD zvect2[]={0,0, 0,12, 12,12, 12,0, 0,0,
  256.                 -1,-1, -1,11, 11,11, 11,-1, -1,-1};
  257. WORD zvect1[]={0,0, 0,10, 10,10, 10,0, 0,0};
  258.  
  259. struct Image fullimage=
  260. { 0,0,
  261.   16,16,4,
  262.   NULL,
  263.   15,0,
  264.   NULL
  265. };
  266.  
  267. struct Image zoomimage=
  268. { 0,0,
  269.   16,16,4,
  270.   NULL,
  271.   15,0,
  272.   NULL
  273. };
  274.  
  275. struct Border vborder;
  276.  
  277. struct Border hborder;
  278.  
  279.  
  280. struct PropInfo hprop=
  281. { FREEHORIZ|AUTOKNOB,
  282.   0,0,
  283.   0xffff,0xffff,
  284.   0,0,
  285.   0,0,
  286.   0,0
  287. };
  288.  
  289. struct PropInfo vprop=
  290. { FREEVERT|AUTOKNOB,
  291.   0,0,
  292.   0xffff,0xffff,
  293.   0,0,
  294.   0,0,
  295.   0,0
  296. };
  297.  
  298. struct Gadget hgad=
  299. { NULL,
  300.   0,371, /*0,VIEWHEIGHT+13*/
  301.   624,15,/*SCREENWIDTH-16,15*/
  302.   0,
  303.   GADGIMMEDIATE|RELVERIFY,
  304.   PROPGADGET,
  305.   &hborder,
  306.   NULL,
  307.   NULL,
  308.   0,
  309.   &hprop,
  310.   2,
  311.   NULL
  312. };
  313.  
  314. struct Gadget vgad=
  315. { &hgad,
  316.   625,11, /*SCREENWIDTH-15,11*/
  317.   15,358, /*15, VIEWHEIGHT*/
  318.   0,
  319.   GADGIMMEDIATE|RELVERIFY,
  320.   PROPGADGET,
  321.   &vborder,
  322.   NULL,
  323.   NULL,
  324.   0,
  325.   &vprop,
  326.   1,
  327.   NULL
  328. };
  329.  
  330. struct Gadget zgad=
  331. { &vgad,
  332.   627,373, /*SCREENWIDTH-13,VIEWHEIGHT+15*/
  333.   12,12,
  334.   GADGHIMAGE|GADGIMAGE,
  335.   TOGGLESELECT|GADGIMMEDIATE|RELVERIFY,
  336.   BOOLGADGET,
  337.   &fullimage,
  338.   &zoomimage,
  339.   NULL,
  340.   0,
  341.   NULL,
  342.   0,
  343.   NULL
  344. };
  345.  
  346. /* Struktures for Window and Screen */
  347.  
  348. UWORD pendata16[]=
  349. {8,1,1,4,12,0,1,0,1,0xFFFF};
  350. UWORD pendata4[]=
  351. {3,1,1,2,3,0,1,0,1, 0xFFFF};
  352.  
  353. struct NewScreen ns=
  354. {
  355.   0,0,
  356.   640,400, /*SCREENHEIGHT*/
  357.   4,
  358.   8,1,
  359.   HIRES,
  360.   CUSTOMSCREEN,
  361.   &textattr,
  362.   (UBYTE *)"Siemens ST 400 Scanner Program ⌐ FChK 1991",
  363.   NULL,
  364.   NULL
  365. };
  366.  
  367. struct NewWindow nw=
  368. { 0,10,
  369.   640,388, /*SCREENHEIGHT-12*/
  370.   8,1,
  371.   CLOSEWINDOW|MENUPICK|GADGETUP|GADGETDOWN|MOUSEBUTTONS,
  372.   WINDOWCLOSE|BACKDROP|BORDERLESS|ACTIVATE|SMART_REFRESH,
  373.   &zgad,
  374.   NULL,
  375.   (UBYTE *)"",
  376.   NULL,
  377.   NULL,
  378.   0,0,
  379.   0,0,
  380.   CUSTOMSCREEN
  381. };
  382.  
  383. /* Menⁿdaten und -strukturen */
  384.  
  385.  
  386. struct IntuiText text627=
  387. { 0,1,
  388.   JAM2,
  389.   1,1,
  390.   &textattr,
  391.   (UBYTE *)"   A2024 spezial  ",
  392.   NULL
  393. };
  394.  
  395. struct IntuiText text626=
  396. { 0,1,
  397.   JAM2,
  398.   1,1,
  399.   &textattr,
  400.   (UBYTE *)"   Productivity   ",
  401.   NULL
  402. };
  403.  
  404. struct IntuiText text625=
  405. { 0,1,
  406.   JAM2,
  407.   1,1,
  408.   &textattr,
  409.   (UBYTE *)"   PAL SuperHires ",
  410.   NULL
  411. };
  412.  
  413. struct IntuiText text624=
  414. { 0,1,
  415.   JAM2,
  416.   1,1,
  417.   &textattr,
  418.   (UBYTE *)"   PAL Hires      ",
  419.   NULL
  420. };
  421.  
  422. struct IntuiText text623=
  423. { 0,1,
  424.   JAM2,
  425.   1,1,
  426.   &textattr,
  427.   (UBYTE *)"   NTSC SuperHires",
  428.   NULL
  429. };
  430.  
  431. struct IntuiText text622=
  432. { 0,1,
  433.   JAM2,
  434.   1,1,
  435.   &textattr,
  436.   (UBYTE *)"   NTSC Hires     ",
  437.   NULL
  438. };
  439.  
  440. struct IntuiText text621=
  441. { 0,1,
  442.   JAM2,
  443.   1,1,
  444.   &textattr,
  445.   (UBYTE *)"   SuperHires     ",
  446.   NULL
  447. };
  448.  
  449. struct IntuiText text620=
  450. { 0,1,
  451.   JAM2,
  452.   1,1,
  453.   &textattr,
  454.   (UBYTE *)"   Hires          ",
  455.   NULL
  456. };
  457.  
  458. struct IntuiText text611=
  459. { 0,1,
  460.   JAM2,
  461.   1,1,
  462.   &textattr,
  463.   (UBYTE *)"   aus",
  464.   NULL
  465. };
  466.  
  467. struct IntuiText text610=
  468. { 0,1,
  469.   JAM2,
  470.   1,1,
  471.   &textattr,
  472.   (UBYTE *)"   an ",
  473.   NULL
  474. };
  475.  
  476. struct IntuiText text131=
  477. { 0,1,
  478.   JAM2,
  479.   1,1,
  480.   &textattr,
  481.   (UBYTE *)"   Gepackt ",
  482.   NULL
  483. };
  484.  
  485. struct IntuiText text130=
  486. { 0,1,
  487.   JAM2,
  488.   1,1,
  489.   &textattr,
  490.   (UBYTE *)"   Entpackt",
  491.   NULL
  492. };
  493.  
  494.  
  495. struct IntuiText text23f=
  496. { 0,1,
  497.   JAM2,
  498.   1,1,
  499.   &textattr,
  500.   (UBYTE *)"   15",
  501.   NULL
  502. };
  503.  
  504. struct IntuiText text23e=
  505. { 0,1,
  506.   JAM2,
  507.   1,1,
  508.   &textattr,
  509.   (UBYTE *)"   14",
  510.   NULL
  511. };
  512.  
  513. struct IntuiText text23d=
  514. { 0,1,
  515.   JAM2,
  516.   1,1,
  517.   &textattr,
  518.   (UBYTE *)"   13",
  519.   NULL
  520. };
  521.  
  522. struct IntuiText text23c=
  523. { 0,1,
  524.   JAM2,
  525.   1,1,
  526.   &textattr,
  527.   (UBYTE *)"   12",
  528.   NULL
  529. };
  530.  
  531. struct IntuiText text23b=
  532. { 0,1,
  533.   JAM2,
  534.   1,1,
  535.   &textattr,
  536.   (UBYTE *)"   11",
  537.   NULL
  538. };
  539.  
  540. struct IntuiText text23a=
  541. { 0,1,
  542.   JAM2,
  543.   1,1,
  544.   &textattr,
  545.   (UBYTE *)"   10",
  546.   NULL
  547. };
  548.  
  549. struct IntuiText text239=
  550. { 0,1,
  551.   JAM2,
  552.   1,1,
  553.   &textattr,
  554.   (UBYTE *)"    9",
  555.   NULL
  556. };
  557.  
  558. struct IntuiText text238=
  559. { 0,1,
  560.   JAM2,
  561.   1,1,
  562.   &textattr,
  563.   (UBYTE *)"    8",
  564.   NULL
  565. };
  566.  
  567. struct IntuiText text237=
  568. { 0,1,
  569.   JAM2,
  570.   1,1,
  571.   &textattr,
  572.   (UBYTE *)"    7",
  573.   NULL
  574. };
  575.  
  576. struct IntuiText text236=
  577. { 0,1,
  578.   JAM2,
  579.   1,1,
  580.   &textattr,
  581.   (UBYTE *)"    6",
  582.   NULL
  583. };
  584.  
  585. struct IntuiText text235=
  586. { 0,1,
  587.   JAM2,
  588.   1,1,
  589.   &textattr,
  590.   (UBYTE *)"    5",
  591.   NULL
  592. };
  593.  
  594. struct IntuiText text234=
  595. { 0,1,
  596.   JAM2,
  597.   1,1,
  598.   &textattr,
  599.   (UBYTE *)"    4",
  600.   NULL
  601. };
  602.  
  603. struct IntuiText text233=
  604. { 0,1,
  605.   JAM2,
  606.   1,1,
  607.   &textattr,
  608.   (UBYTE *)"    3",
  609.   NULL
  610. };
  611.  
  612. struct IntuiText text232=
  613. { 0,1,
  614.   JAM2,
  615.   1,1,
  616.   &textattr,
  617.   (UBYTE *)"    2",
  618.   NULL
  619. };
  620.  
  621. struct IntuiText text231=
  622. { 0,1,
  623.   JAM2,
  624.   1,1,
  625.   &textattr,
  626.   (UBYTE *)"    1",
  627.   NULL
  628. };
  629.  
  630. struct IntuiText text230=
  631. { 0,1,
  632.   JAM2,
  633.   1,1,
  634.   &textattr,
  635.   (UBYTE *)"    0",
  636.   NULL
  637. };
  638.  
  639. struct IntuiText text221=
  640. { 0,1,
  641.   JAM2,
  642.   1,1,
  643.   &textattr,
  644.   (UBYTE *)"   16",
  645.   NULL
  646. };
  647.  
  648. struct IntuiText text220=
  649. { 0,1,
  650.   JAM2,
  651.   1,1,
  652.   &textattr,
  653.   (UBYTE *)"    2",
  654.   NULL
  655. };
  656.  
  657. struct IntuiText text212=
  658. { 0,1,
  659.   JAM2,
  660.   1,1,
  661.   &textattr,
  662.   (UBYTE *)"   DIN A4",
  663.   NULL
  664. };
  665.  
  666. struct IntuiText text211=
  667. { 0,1,
  668.   JAM2,
  669.   1,1,
  670.   &textattr,
  671.   (UBYTE *)"   DIN A5",
  672.   NULL
  673. };
  674.  
  675. struct IntuiText text210=
  676. { 0,1,
  677.   JAM2,
  678.   1,1,
  679.   &textattr,
  680.   (UBYTE *)"   DIN A6",
  681.   NULL
  682. };
  683.  
  684. struct IntuiText text202=
  685. { 0,1,
  686.   JAM2,
  687.   1,1,
  688.   &textattr,
  689.   (UBYTE *)"   400 DPI",
  690.   NULL
  691. };
  692.  
  693. struct IntuiText text201=
  694. { 0,1,
  695.   JAM2,
  696.   1,1,
  697.   &textattr,
  698.   (UBYTE *)"   300 DPI",
  699.   NULL
  700. };
  701.  
  702. struct IntuiText text200=
  703. { 0,1,
  704.   JAM2,
  705.   1,1,
  706.   &textattr,
  707.   (UBYTE *)"   200 DPI",
  708.   NULL
  709. };
  710.  
  711. struct IntuiText text63=
  712. { 0,1,
  713.   JAM2,
  714.   1,1,
  715.   &textattr,
  716.   (UBYTE *)"A2024 Grau ",
  717.   NULL
  718. };
  719.  
  720. struct IntuiText text62=
  721. { 0,1,
  722.   JAM2,
  723.   1,1,
  724.   &textattr,
  725.   (UBYTE *)"Grafikmodus",
  726.   NULL
  727. };
  728.  
  729. struct IntuiText text61=
  730. { 0,1,
  731.   JAM2,
  732.   1,1,
  733.   &textattr,
  734.   (UBYTE *)"Interlace  ",
  735.   NULL
  736. };
  737.  
  738. struct IntuiText text60=
  739. { 0,1,
  740.   JAM2,
  741.   1,1,
  742.   &textattr,
  743.   (UBYTE *)"SCSI Device",
  744.   NULL
  745. };
  746.  
  747. struct IntuiText text53=
  748. { 0,1,
  749.   JAM2,
  750.   1,1,
  751.   &textattr,
  752.   (UBYTE *)"Ausschneiden",
  753.   NULL
  754. };
  755.  
  756. struct IntuiText text52=
  757. { 0,1,
  758.   JAM2,
  759.   1,1,
  760.   &textattr,
  761.   (UBYTE *)"Spiegeln V",
  762.   NULL
  763. };
  764.  
  765. struct IntuiText text51=
  766. { 0,1,
  767.   JAM2,
  768.   1,1,
  769.   &textattr,
  770.   (UBYTE *)"Spiegeln H",
  771.   NULL
  772. };
  773.  
  774. struct IntuiText text50=
  775. { 0,1,
  776.   JAM2,
  777.   1,1,
  778.   &textattr,
  779.   (UBYTE *)"Invers",
  780.   NULL
  781. };
  782.  
  783. struct IntuiText text43=
  784. { 0,1,
  785.   JAM2,
  786.   1,1,
  787.   &textattr,
  788.   (UBYTE *)"Genauigkeit ",
  789.   NULL
  790. };
  791.  
  792. struct IntuiText text42=
  793. { 0,1,
  794.   JAM2,
  795.   1,1,
  796.   &textattr,
  797.   (UBYTE *)"Vectorisiere",
  798.   NULL
  799. };
  800.  
  801. struct IntuiText text41=
  802. { 0,1,
  803.   JAM2,
  804.   1,1,
  805.   &textattr,
  806.   (UBYTE *)"Ausdⁿnnen   ",
  807.   NULL
  808. };
  809.  
  810. struct IntuiText text40=
  811. { 0,1,
  812.   JAM2,
  813.   1,1,
  814.   &textattr,
  815.   (UBYTE *)"In Graustufen",
  816.   NULL
  817. };
  818.  
  819. struct IntuiText text3b=
  820. { 0,1,
  821.   JAM2,
  822.   1,1,
  823.   &textattr,
  824.   (UBYTE *)"Median",
  825.   NULL
  826. };
  827.  
  828. struct IntuiText text3a=
  829. { 0,1,
  830.   JAM2,
  831.   1,1,
  832.   &textattr,
  833.   (UBYTE *)"Maximum",
  834.   NULL
  835. };
  836.  
  837. struct IntuiText text39=
  838. { 0,1,
  839.   JAM2,
  840.   1,1,
  841.   &textattr,
  842.   (UBYTE *)"Minimum",
  843.   NULL
  844. };
  845.  
  846. struct IntuiText text38=
  847. { 0,1,
  848.   JAM2,
  849.   1,1,
  850.   &textattr,
  851.   (UBYTE *)"Relief",
  852.   NULL
  853. };
  854.  
  855. struct IntuiText text37=
  856. { 0,1,
  857.   JAM2,
  858.   1,1,
  859.   &textattr,
  860.   (UBYTE *)"Tiefpa▀ stark",
  861.   NULL
  862. };
  863.  
  864. struct IntuiText text36=
  865. { 0,1,
  866.   JAM2,
  867.   1,1,
  868.   &textattr,
  869.   (UBYTE *)"Hochpa▀",
  870.   NULL
  871. };
  872.  
  873. struct IntuiText text35=
  874. { 0,1,
  875.   JAM2,
  876.   1,1,
  877.   &textattr,
  878.   (UBYTE *)"Tiefpa▀ ",
  879.   NULL
  880. };
  881.  
  882. struct IntuiText text34=
  883. { 0,1,
  884.   JAM2,
  885.   1,1,
  886.   &textattr,
  887.   (UBYTE *)"Kontrastverst.",
  888.   NULL
  889. };
  890.  
  891. struct IntuiText text33=
  892. { 0,1,
  893.   JAM2,
  894.   1,1,
  895.   &textattr,
  896.   (UBYTE *)"Histogramm",
  897.   NULL
  898. };
  899.  
  900. struct IntuiText text32=
  901. { 0,1,
  902.   JAM2,
  903.   1,1,
  904.   &textattr,
  905.   (UBYTE *)"Binarisieren",
  906.   NULL
  907. };
  908.  
  909. struct IntuiText text31=
  910. { 0,1,
  911.   JAM2,
  912.   1,1,
  913.   &textattr,
  914.   (UBYTE *)"Dithern Ord",
  915.   NULL
  916. };
  917.  
  918. struct IntuiText text30=
  919. { 0,1,
  920.   JAM2,
  921.   1,1,
  922.   &textattr,
  923.   (UBYTE *)"Dithern F-S",
  924.   NULL
  925. };
  926.  
  927. struct IntuiText text23=
  928. { 0,1,
  929.   JAM2,
  930.   1,1,
  931.   &textattr,
  932.   (UBYTE *)"Schwellwert",
  933.   NULL
  934. };
  935.  
  936. struct IntuiText text22=
  937. { 0,1,
  938.   JAM2,
  939.   1,1,
  940.   &textattr,
  941.   (UBYTE *)"Graustufen",
  942.   NULL
  943. };
  944.  
  945. struct IntuiText text21=
  946. { 0,1,
  947.   JAM2,
  948.   1,1,
  949.   &textattr,
  950.   (UBYTE *)"Gr÷▀e",
  951.   NULL
  952. };
  953.  
  954. struct IntuiText text20=
  955. { 0,1,
  956.   JAM2,
  957.   1,1,
  958.   &textattr,
  959.   (UBYTE *)"Aufl÷sung",
  960.   NULL
  961. };
  962.  
  963. struct IntuiText text16=
  964. { 0,1,
  965.   JAM2,
  966.   1,1,
  967.   &textattr,
  968.   (UBYTE *)"Programmende",
  969.   NULL
  970. };
  971.  
  972. struct IntuiText text15=
  973. { 0,1,
  974.   JAM2,
  975.   1,1,
  976.   &textattr,
  977.   (UBYTE *)"Test Scanner",
  978.   NULL
  979. };
  980.  
  981. struct IntuiText text14=
  982. { 0,1,
  983.   JAM2,
  984.   1,1,
  985.   &textattr,
  986.   (UBYTE *)"Wie speichern?",
  987.   NULL
  988. };
  989.  
  990. struct IntuiText text13=
  991. { 0,1,
  992.   JAM2,
  993.   1,1,
  994.   &textattr,
  995.   (UBYTE *)"Speichern IFF",
  996.   NULL
  997. };
  998.  
  999. struct IntuiText text12=
  1000. { 0,1,
  1001.   JAM2,
  1002.   1,1,
  1003.   &textattr,
  1004.   (UBYTE *)"Laden IFF",
  1005.   NULL
  1006. };
  1007.  
  1008. struct IntuiText text11=
  1009. { 0,1,
  1010.   JAM2,
  1011.   1,1,
  1012.   &textattr,
  1013.   (UBYTE *)"Scan->Disk",
  1014.   NULL
  1015. };
  1016.  
  1017. struct IntuiText text10=
  1018. { 0,1,
  1019.   JAM2,
  1020.   1,1,
  1021.   &textattr,
  1022.   (UBYTE *)"Einscannen",
  1023.   NULL
  1024. };
  1025.  
  1026. struct IntuiText text03=
  1027. { 0,1,
  1028.   JAM2,
  1029.   1,1,
  1030.   &textattr,
  1031.   (UBYTE *)"Nur fⁿr privaten Gebrauch",
  1032.   NULL
  1033. };
  1034.  
  1035. struct IntuiText text02=
  1036. { 0,1,
  1037.   JAM2,
  1038.   1,1,
  1039.   &textattr,
  1040.   PRG_VERSION,
  1041.   NULL
  1042. };
  1043.  
  1044.  
  1045. struct IntuiText text01=
  1046. { 0,1,
  1047.   JAM2,
  1048.   1,1,
  1049.   &textattr,
  1050.   (UBYTE *)"Frank-Christian Krⁿgel",
  1051.   NULL
  1052. };
  1053.  
  1054. struct IntuiText text00=
  1055. { 0,1,
  1056.   JAM2,
  1057.   1,1,
  1058.   &textattr,
  1059.   (UBYTE *)"Program geschrieben von",
  1060.   NULL
  1061. };
  1062.  
  1063.  
  1064. struct MenuItem item631=
  1065. { NULL,
  1066.   -48,10,
  1067.   48,10,
  1068.   ITEMTEXT|HIGHCOMP|ITEMENABLED|CHECKIT,
  1069.   0xfffd,
  1070.   (APTR)&text611,
  1071.   NULL,
  1072.   0,
  1073.   NULL,
  1074.   0
  1075. };
  1076.  
  1077. struct MenuItem item630=
  1078. { &item631,
  1079.   -48,0,
  1080.   48,10,
  1081.   ITEMTEXT|HIGHCOMP|ITEMENABLED|CHECKIT,
  1082.   0xfffe,
  1083.   (APTR)&text610,
  1084.   NULL,
  1085.   0,
  1086.   NULL,
  1087.   0
  1088. };
  1089.  
  1090. struct MenuItem item627=
  1091. { NULL,
  1092.   -144,70,
  1093.   144,10,
  1094.   ITEMTEXT|HIGHCOMP|ITEMENABLED|CHECKIT,
  1095.   0xff7f,
  1096.   (APTR)&text627,
  1097.   NULL,
  1098.   0,
  1099.   NULL,
  1100.   0
  1101. };
  1102.  
  1103. struct MenuItem item626=
  1104. { &item627,
  1105.   -144,60,
  1106.   144,10,
  1107.   ITEMTEXT|HIGHCOMP|ITEMENABLED|CHECKIT,
  1108.   0xffbf,
  1109.   (APTR)&text626,
  1110.   NULL,
  1111.   0,
  1112.   NULL,
  1113.   0
  1114. };
  1115.  
  1116. struct MenuItem item625=
  1117. { &item626,
  1118.   -144,50,
  1119.   144,10,
  1120.   ITEMTEXT|HIGHCOMP|ITEMENABLED|CHECKIT,
  1121.   0xffdf,
  1122.   (APTR)&text625,
  1123.   NULL,
  1124.   0,
  1125.   NULL,
  1126.   0
  1127. };
  1128.  
  1129. struct MenuItem item624=
  1130. { &item625,
  1131.   -144,40,
  1132.   144,10,
  1133.   ITEMTEXT|HIGHCOMP|ITEMENABLED|CHECKIT,
  1134.   0xffef,
  1135.   (APTR)&text624,
  1136.   NULL,
  1137.   0,
  1138.   NULL,
  1139.   0
  1140. };
  1141.  
  1142. struct MenuItem item623=
  1143. { &item624,
  1144.   -144,30,
  1145.   144,10,
  1146.   ITEMTEXT|HIGHCOMP|ITEMENABLED|CHECKIT,
  1147.   0xfff7,
  1148.   (APTR)&text623,
  1149.   NULL,
  1150.   0,
  1151.   NULL,
  1152.   0
  1153. };
  1154.  
  1155. struct MenuItem item622=
  1156. { &item623,
  1157.   -144,20,
  1158.   144,10,
  1159.   ITEMTEXT|HIGHCOMP|ITEMENABLED|CHECKIT,
  1160.   0xfffb,
  1161.   (APTR)&text622,
  1162.   NULL,
  1163.   0,
  1164.   NULL,
  1165.   0
  1166. };
  1167.  
  1168. struct MenuItem item621=
  1169. { &item622,
  1170.   -144,10,
  1171.   144,10,
  1172.   ITEMTEXT|HIGHCOMP|ITEMENABLED|CHECKIT,
  1173.   0xfffd,
  1174.   (APTR)&text621,
  1175.   NULL,
  1176.   0,
  1177.   NULL,
  1178.   0
  1179. };
  1180.  
  1181. struct MenuItem item620=
  1182. { &item621,
  1183.   -144,0,
  1184.   144,10,
  1185.   ITEMTEXT|HIGHCOMP|ITEMENABLED|CHECKIT,
  1186.   0xfffe,
  1187.   (APTR)&text620,
  1188.   NULL,
  1189.   0,
  1190.   NULL,
  1191.   0
  1192. };
  1193.  
  1194. struct MenuItem item611=
  1195. { NULL,
  1196.   -48,10,
  1197.   48,10,
  1198.   ITEMTEXT|HIGHCOMP|ITEMENABLED|CHECKIT,
  1199.   0xfffd,
  1200.   (APTR)&text611,
  1201.   NULL,
  1202.   0,
  1203.   NULL,
  1204.   0
  1205. };
  1206.  
  1207. struct MenuItem item610=
  1208. { &item611,
  1209.   -48,0,
  1210.   48,10,
  1211.   ITEMTEXT|HIGHCOMP|ITEMENABLED|CHECKIT,
  1212.   0xfffe,
  1213.   (APTR)&text610,
  1214.   NULL,
  1215.   0,
  1216.   NULL,
  1217.   0
  1218. };
  1219.  
  1220. struct MenuItem item131=
  1221. { NULL,
  1222.   112,10,
  1223.   112,10,
  1224.   ITEMTEXT|HIGHCOMP|ITEMENABLED|CHECKIT,
  1225.   0xfffd,
  1226.   (APTR)&text131,
  1227.   NULL,
  1228.   0,
  1229.   NULL,
  1230.   0
  1231. };
  1232.  
  1233. struct MenuItem item130=
  1234. { &item131,
  1235.   112,0,
  1236.   112,10,
  1237.   ITEMTEXT|HIGHCOMP|ITEMENABLED|CHECKIT|CHECKED,
  1238.   0xfffe,
  1239.   (APTR)&text130,
  1240.   NULL,
  1241.   0,
  1242.   NULL,
  1243.   0
  1244. };
  1245.  
  1246. struct MenuItem item23f=
  1247. { NULL,
  1248.   120,70,
  1249.   40,10,
  1250.   ITEMTEXT|HIGHCOMP|ITEMENABLED|CHECKIT,
  1251.   0x7fff,
  1252.   (APTR)&text23f,
  1253.   NULL,
  1254.   0,
  1255.   NULL,
  1256.   0
  1257. };
  1258.  
  1259. struct MenuItem item23e=
  1260. { &item23f,
  1261.   120,60,
  1262.   40,10,
  1263.   ITEMTEXT|HIGHCOMP|ITEMENABLED|CHECKIT,
  1264.   0xbfff,
  1265.   (APTR)&text23e,
  1266.   NULL,
  1267.   0,
  1268.   NULL,
  1269.   0
  1270. };
  1271.  
  1272. struct MenuItem item23d=
  1273. { &item23e,
  1274.   120,50,
  1275.   40,10,
  1276.   ITEMTEXT|HIGHCOMP|ITEMENABLED|CHECKIT,
  1277.   0xdfff,
  1278.   (APTR)&text23d,
  1279.   NULL,
  1280.   0,
  1281.   NULL,
  1282.   0
  1283. };
  1284.  
  1285. struct MenuItem item23c=
  1286. { &item23d,
  1287.   120,40,
  1288.   40,10,
  1289.   ITEMTEXT|HIGHCOMP|ITEMENABLED|CHECKIT,
  1290.   0xefff,
  1291.   (APTR)&text23c,
  1292.   NULL,
  1293.   0,
  1294.   NULL,
  1295.   0
  1296. };
  1297.  
  1298. struct MenuItem item23b=
  1299. { &item23c,
  1300.   120,30,
  1301.   40,10,
  1302.   ITEMTEXT|HIGHCOMP|ITEMENABLED|CHECKIT,
  1303.   0xf7ff,
  1304.   (APTR)&text23b,
  1305.   NULL,
  1306.   0,
  1307.   NULL,
  1308.   0
  1309. };
  1310.  
  1311. struct MenuItem item23a=
  1312. { &item23b,
  1313.   120,20,
  1314.   40,10,
  1315.   ITEMTEXT|HIGHCOMP|ITEMENABLED|CHECKIT,
  1316.   0xfbff,
  1317.   (APTR)&text23a,
  1318.   NULL,
  1319.   0,
  1320.   NULL,
  1321.   0
  1322. };
  1323.  
  1324. struct MenuItem item239=
  1325. { &item23a,
  1326.   120,10,
  1327.   40,10,
  1328.   ITEMTEXT|HIGHCOMP|ITEMENABLED|CHECKIT,
  1329.   0xfdff,
  1330.   (APTR)&text239,
  1331.   NULL,
  1332.   0,
  1333.   NULL,
  1334.   0
  1335. };
  1336.  
  1337. struct MenuItem item238=
  1338. { &item239,
  1339.   120,0,
  1340.   40,10,
  1341.   ITEMTEXT|HIGHCOMP|ITEMENABLED|CHECKIT|CHECKED,
  1342.   0xfeff,
  1343.   (APTR)&text238,
  1344.   NULL,
  1345.   0,
  1346.   NULL,
  1347.   0
  1348. };
  1349.  
  1350. struct MenuItem item237=
  1351. { &item238,
  1352.   80,70,
  1353.   40,10,
  1354.   ITEMTEXT|HIGHCOMP|ITEMENABLED|CHECKIT,
  1355.   0xff7f,
  1356.   (APTR)&text237,
  1357.   NULL,
  1358.   0,
  1359.   NULL,
  1360.   0
  1361. };
  1362.  
  1363. struct MenuItem item236=
  1364. { &item237,
  1365.   80,60,
  1366.   40,10,
  1367.   ITEMTEXT|HIGHCOMP|ITEMENABLED|CHECKIT,
  1368.   0xffbf,
  1369.   (APTR)&text236,
  1370.   NULL,
  1371.   0,
  1372.   NULL,
  1373.   0
  1374. };
  1375.  
  1376. struct MenuItem item235=
  1377. { &item236,
  1378.   80,50,
  1379.   40,10,
  1380.   ITEMTEXT|HIGHCOMP|ITEMENABLED|CHECKIT,
  1381.   0xffdf,
  1382.   (APTR)&text235,
  1383.   NULL,
  1384.   0,
  1385.   NULL,
  1386.   0
  1387. };
  1388.  
  1389. struct MenuItem item234=
  1390. { &item235,
  1391.   80,40,
  1392.   40,10,
  1393.   ITEMTEXT|HIGHCOMP|ITEMENABLED|CHECKIT,
  1394.   0xffef,
  1395.   (APTR)&text234,
  1396.   NULL,
  1397.   0,
  1398.   NULL,
  1399.   0
  1400. };
  1401.  
  1402. struct MenuItem item233=
  1403. { &item234,
  1404.   80,30,
  1405.   40,10,
  1406.   ITEMTEXT|HIGHCOMP|ITEMENABLED|CHECKIT,
  1407.   0xfff7,
  1408.   (APTR)&text233,
  1409.   NULL,
  1410.   0,
  1411.   NULL,
  1412.   0
  1413. };
  1414.  
  1415. struct MenuItem item232=
  1416. { &item233,
  1417.   80,20,
  1418.   40,10,
  1419.   ITEMTEXT|HIGHCOMP|ITEMENABLED|CHECKIT,
  1420.   0xfffb,
  1421.   (APTR)&text232,
  1422.   NULL,
  1423.   0,
  1424.   NULL,
  1425.   0
  1426. };
  1427.  
  1428. struct MenuItem item231=
  1429. { &item232,
  1430.   80,10,
  1431.   40,10,
  1432.   ITEMTEXT|HIGHCOMP|ITEMENABLED|CHECKIT,
  1433.   0xfffd,
  1434.   (APTR)&text231,
  1435.   NULL,
  1436.   0,
  1437.   NULL,
  1438.   0
  1439. };
  1440.  
  1441. struct MenuItem item230=
  1442. { &item231,
  1443.   80,0,
  1444.   40,10,
  1445.   ITEMTEXT|HIGHCOMP|ITEMENABLED|CHECKIT,
  1446.   0xfffe,
  1447.   (APTR)&text230,
  1448.   NULL,
  1449.   0,
  1450.   NULL,
  1451.   0
  1452. };
  1453.  
  1454.  
  1455. struct MenuItem item221=
  1456. { NULL,
  1457.   80,10,
  1458.   80,10,
  1459.   ITEMTEXT|HIGHCOMP|ITEMENABLED|CHECKIT|COMMSEQ,
  1460.   0xfffd,
  1461.   (APTR)&text221,
  1462.   NULL,
  1463.   'g',
  1464.   NULL,
  1465.   0
  1466. };
  1467.  
  1468. struct MenuItem item220=
  1469. { &item221,
  1470.   80,0,
  1471.   80,10,
  1472.   ITEMTEXT|HIGHCOMP|ITEMENABLED|CHECKIT|CHECKED|COMMSEQ,
  1473.   0xfffe,
  1474.   (APTR)&text220,
  1475.   NULL,
  1476.   'z',
  1477.   NULL,
  1478.   0
  1479. };
  1480.  
  1481.  
  1482. struct MenuItem item212=
  1483. { NULL,
  1484.   80,20,
  1485.   112,10,
  1486.   ITEMTEXT|HIGHCOMP|ITEMENABLED|CHECKIT|COMMSEQ,
  1487.   0xfffb,
  1488.   (APTR)&text212,
  1489.   NULL,
  1490.   'c',
  1491.   NULL,
  1492.   0
  1493. };
  1494.  
  1495. struct MenuItem item211=
  1496. { &item212,
  1497.   80,10,
  1498.   112,10,
  1499.   ITEMTEXT|HIGHCOMP|ITEMENABLED|CHECKIT|COMMSEQ,
  1500.   0xfffd,
  1501.   (APTR)&text211,
  1502.   NULL,
  1503.   'b',
  1504.   NULL,
  1505.   0
  1506. };
  1507.  
  1508. struct MenuItem item210=
  1509. { &item211,
  1510.   80,0,
  1511.   112,10,
  1512.   ITEMTEXT|HIGHCOMP|ITEMENABLED|CHECKIT|CHECKED|COMMSEQ,
  1513.   0xfffe,
  1514.   (APTR)&text210,
  1515.   NULL,
  1516.   'a',
  1517.   NULL,
  1518.   0
  1519. };
  1520.  
  1521.  
  1522. struct MenuItem item202=
  1523. { NULL,
  1524.   80,20,
  1525.   120,10,
  1526.   ITEMTEXT|HIGHCOMP|ITEMENABLED|CHECKIT|COMMSEQ,
  1527.   0xfffb,
  1528.   (APTR)&text202,
  1529.   NULL,
  1530.   '4',
  1531.   NULL,
  1532.   0
  1533. };
  1534.  
  1535. struct MenuItem item201=
  1536. { &item202,
  1537.   80,10,
  1538.   120,10,
  1539.   ITEMTEXT|HIGHCOMP|ITEMENABLED|CHECKIT|COMMSEQ,
  1540.   0xfffd,
  1541.   (APTR)&text201,
  1542.   NULL,
  1543.   '3',
  1544.   NULL,
  1545.   0
  1546. };
  1547.  
  1548.  
  1549. struct MenuItem item200=
  1550. { &item201,
  1551.   80,0,
  1552.   120,10,
  1553.   ITEMTEXT|HIGHCOMP|ITEMENABLED|CHECKIT|CHECKED|COMMSEQ,
  1554.   0xfffe,
  1555.   (APTR)&text200,
  1556.   NULL,
  1557.   '2',
  1558.   NULL,
  1559.   0
  1560. };
  1561.  
  1562.  
  1563. struct MenuItem item63=
  1564. { NULL,
  1565.   0,30,
  1566.   88,10,
  1567.   ITEMTEXT|HIGHCOMP|ITEMENABLED,
  1568.   0,
  1569.   (APTR)&text63,
  1570.   NULL,
  1571.   0,
  1572.   &item630,
  1573.   0
  1574. };
  1575.  
  1576. struct MenuItem item62=
  1577. { &item63,
  1578.   0,20,
  1579.   88,10,
  1580.   ITEMTEXT|HIGHCOMP|ITEMENABLED,
  1581.   0,
  1582.   (APTR)&text62,
  1583.   NULL,
  1584.   0,
  1585.   &item620,
  1586.   0
  1587. };
  1588.  
  1589. struct MenuItem item61=
  1590. { &item62,
  1591.   0,10,
  1592.   88,10,
  1593.   ITEMTEXT|HIGHCOMP|ITEMENABLED,
  1594.   0,
  1595.   (APTR)&text61,
  1596.   NULL,
  1597.   0,
  1598.   &item610,
  1599.   0
  1600. };
  1601.  
  1602. struct MenuItem item60=
  1603. { &item61,
  1604.   0,0,
  1605.   88,10,
  1606.   ITEMTEXT|HIGHCOMP|ITEMENABLED,
  1607.   0,
  1608.   (APTR)&text60,
  1609.   NULL,
  1610.   0,
  1611.   NULL,
  1612.   0
  1613. };
  1614.  
  1615. struct MenuItem item53=
  1616. { NULL,
  1617.   0,30,
  1618.   104,10,
  1619.   ITEMTEXT|HIGHCOMP|ITEMENABLED,
  1620.   0,
  1621.   (APTR)&text53,
  1622.   NULL,
  1623.   0,
  1624.   NULL,
  1625.   0
  1626. };
  1627.  
  1628. struct MenuItem item52=
  1629. { &item53,
  1630.   0,20,
  1631.   104,10,
  1632.   ITEMTEXT|HIGHCOMP|ITEMENABLED,
  1633.   0,
  1634.   (APTR)&text52,
  1635.   NULL,
  1636.   0,
  1637.   NULL,
  1638.   0
  1639. };
  1640.  
  1641. struct MenuItem item51=
  1642. { &item52,
  1643.   0,10,
  1644.   104,10,
  1645.   ITEMTEXT|HIGHCOMP|ITEMENABLED,
  1646.   0,
  1647.   (APTR)&text51,
  1648.   NULL,
  1649.   0,
  1650.   NULL,
  1651.   0
  1652. };
  1653.  
  1654. struct MenuItem item50=
  1655. { &item51,
  1656.   0,0,
  1657.   104,10,
  1658.   ITEMTEXT|HIGHCOMP|ITEMENABLED,
  1659.   0,
  1660.   (APTR)&text50,
  1661.   NULL,
  1662.   0,
  1663.   NULL,
  1664.   0
  1665. };
  1666.  
  1667. struct MenuItem item43=
  1668. { NULL,
  1669.   0,30,
  1670.   104,10,
  1671.   ITEMTEXT|HIGHCOMP|ITEMENABLED,
  1672.   0,
  1673.   (APTR)&text43,
  1674.   NULL,
  1675.   0,
  1676.   NULL,
  1677.   0
  1678. };
  1679.  
  1680. struct MenuItem item42=
  1681. { &item43,
  1682.   0,20,
  1683.   104,10,
  1684.   ITEMTEXT|HIGHCOMP|ITEMENABLED,
  1685.   0,
  1686.   (APTR)&text42,
  1687.   NULL,
  1688.   0,
  1689.   NULL,
  1690.   0
  1691. };
  1692.  
  1693. struct MenuItem item41=
  1694. { &item42,
  1695.   0,10,
  1696.   104,10,
  1697.   ITEMTEXT|HIGHCOMP|ITEMENABLED,
  1698.   0,
  1699.   (APTR)&text41,
  1700.   NULL,
  1701.   0,
  1702.   NULL,
  1703.   0
  1704. };
  1705.  
  1706. struct MenuItem item40=
  1707. { &item41,
  1708.   0,0,
  1709.   104,10,
  1710.   ITEMTEXT|HIGHCOMP|ITEMENABLED,
  1711.   0,
  1712.   (APTR)&text40,
  1713.   NULL,
  1714.   0,
  1715.   NULL,
  1716.   0
  1717. };
  1718.  
  1719. struct MenuItem item3b=
  1720. { NULL,
  1721.   0,110,
  1722.   112,10,
  1723.   ITEMTEXT|HIGHCOMP|ITEMENABLED,
  1724.   0,
  1725.   (APTR)&text3b,
  1726.   NULL,
  1727.   0,
  1728.   NULL,
  1729.   0
  1730. };
  1731.  
  1732. struct MenuItem item3a=
  1733. { &item3b,
  1734.   0,100,
  1735.   112,10,
  1736.   ITEMTEXT|HIGHCOMP|ITEMENABLED,
  1737.   0,
  1738.   (APTR)&text3a,
  1739.   NULL,
  1740.   0,
  1741.   NULL,
  1742.   0
  1743. };
  1744.  
  1745. struct MenuItem item39=
  1746. { &item3a,
  1747.   0,90,
  1748.   112,10,
  1749.   ITEMTEXT|HIGHCOMP|ITEMENABLED,
  1750.   0,
  1751.   (APTR)&text39,
  1752.   NULL,
  1753.   0,
  1754.   NULL,
  1755.   0
  1756. };
  1757.  
  1758. struct MenuItem item38=
  1759. { &item39,
  1760.   0,80,
  1761.   112,10,
  1762.   ITEMTEXT|HIGHCOMP|ITEMENABLED,
  1763.   0,
  1764.   (APTR)&text38,
  1765.   NULL,
  1766.   0,
  1767.   NULL,
  1768.   0
  1769. };
  1770.  
  1771. struct MenuItem item37=
  1772. { &item38,
  1773.   0,70,
  1774.   112,10,
  1775.   ITEMTEXT|HIGHCOMP|ITEMENABLED,
  1776.   0,
  1777.   (APTR)&text37,
  1778.   NULL,
  1779.   0,
  1780.   NULL,
  1781.   0
  1782. };
  1783.  
  1784. struct MenuItem item36=
  1785. { &item37,
  1786.   0,60,
  1787.   112,10,
  1788.   ITEMTEXT|HIGHCOMP|ITEMENABLED,
  1789.   0,
  1790.   (APTR)&text36,
  1791.   NULL,
  1792.   0,
  1793.   NULL,
  1794.   0
  1795. };
  1796.  
  1797. struct MenuItem item35=
  1798. { &item36,
  1799.   0,50,
  1800.   112,10,
  1801.   ITEMTEXT|HIGHCOMP|ITEMENABLED,
  1802.   0,
  1803.   (APTR)&text35,
  1804.   NULL,
  1805.   0,
  1806.   NULL,
  1807.   0
  1808. };
  1809.  
  1810. struct MenuItem item34=
  1811. { &item35,
  1812.   0,40,
  1813.   112,10,
  1814.   ITEMTEXT|HIGHCOMP|ITEMENABLED,
  1815.   0,
  1816.   (APTR)&text34,
  1817.   NULL,
  1818.   0,
  1819.   NULL,
  1820.   0
  1821. };
  1822.  
  1823. struct MenuItem item33=
  1824. { &item34,
  1825.   0,30,
  1826.   112,10,
  1827.   ITEMTEXT|HIGHCOMP|ITEMENABLED,
  1828.   0,
  1829.   (APTR)&text33,
  1830.   NULL,
  1831.   0,
  1832.   NULL,
  1833.   0
  1834. };
  1835.  
  1836. struct MenuItem item32=
  1837. { &item33,
  1838.   0,20,
  1839.   112,10,
  1840.   ITEMTEXT|HIGHCOMP|ITEMENABLED,
  1841.   0,
  1842.   (APTR)&text32,
  1843.   NULL,
  1844.   0,
  1845.   NULL,
  1846.   0
  1847. };
  1848.  
  1849. struct MenuItem item31=
  1850. { &item32,
  1851.   0,10,
  1852.   112,10,
  1853.   ITEMTEXT|HIGHCOMP|ITEMENABLED,
  1854.   0,
  1855.   (APTR)&text31,
  1856.   NULL,
  1857.   0,
  1858.   NULL,
  1859.   0
  1860. };
  1861.  
  1862. struct MenuItem item30=
  1863. { &item31,
  1864.   0,0,
  1865.   112,10,
  1866.   ITEMTEXT|HIGHCOMP|ITEMENABLED,
  1867.   0,
  1868.   (APTR)&text30,
  1869.   NULL,
  1870.   0,
  1871.   NULL,
  1872.   0
  1873. };
  1874.  
  1875. struct MenuItem item23=
  1876. { NULL,
  1877.   0,30,
  1878.   120,10,
  1879.   ITEMTEXT|HIGHCOMP|ITEMENABLED,
  1880.   0,
  1881.   (APTR)&text23,
  1882.   NULL,
  1883.   0,
  1884.   &item230,
  1885.   0
  1886. };
  1887.  
  1888. struct MenuItem item22=
  1889. { &item23,
  1890.   0,20,
  1891.   120,10,
  1892.   ITEMTEXT|HIGHCOMP|ITEMENABLED,
  1893.   0,
  1894.   (APTR)&text22,
  1895.   NULL,
  1896.   0,
  1897.   &item220,
  1898.   0
  1899. };
  1900.  
  1901. struct MenuItem item21=
  1902. { &item22,
  1903.   0,10,
  1904.   120,10,
  1905.   ITEMTEXT|HIGHCOMP|ITEMENABLED,
  1906.   0,
  1907.   (APTR)&text21,
  1908.   NULL,
  1909.   0,
  1910.   &item210,
  1911.   0
  1912. };
  1913.  
  1914. struct MenuItem item20=
  1915. { &item21,
  1916.   0,0,
  1917.   120,10,
  1918.   ITEMTEXT|HIGHCOMP|ITEMENABLED,
  1919.   0,
  1920.   (APTR)&text20,
  1921.   NULL,
  1922.   0,
  1923.   &item200,
  1924.   0
  1925. };
  1926.  
  1927. struct MenuItem item16=
  1928. { NULL,
  1929.   0,60,
  1930.   176,10,
  1931.   ITEMTEXT|HIGHCOMP|ITEMENABLED|COMMSEQ,
  1932.   0,
  1933.   (APTR)&text16,
  1934.   NULL,
  1935.   'x',
  1936.   NULL,
  1937.   0
  1938. };
  1939.  
  1940. struct MenuItem item15=
  1941. { &item16,
  1942.   0,50,
  1943.   176,10,
  1944.   ITEMTEXT|HIGHCOMP|ITEMENABLED|COMMSEQ,
  1945.   0,
  1946.   (APTR)&text15,
  1947.   NULL,
  1948.   't',
  1949.   NULL,
  1950.   0
  1951. };
  1952.  
  1953. struct MenuItem item14=
  1954. { &item15,
  1955.   0,40,
  1956.   176,10,
  1957.   ITEMTEXT|HIGHCOMP|ITEMENABLED,
  1958.   0,
  1959.   (APTR)&text14,
  1960.   NULL,
  1961.   0,
  1962.   &item130,
  1963.   0
  1964. };
  1965.  
  1966. struct MenuItem item13=
  1967. { &item14,
  1968.   0,30,
  1969.   176,10,
  1970.   ITEMTEXT|HIGHCOMP|COMMSEQ,
  1971.   0,
  1972.   (APTR)&text13,
  1973.   NULL,
  1974.   's',
  1975.   NULL,
  1976.   0
  1977. };
  1978.  
  1979. struct MenuItem item12=
  1980. { &item13,
  1981.   0,20,
  1982.   176,20,
  1983.   ITEMTEXT|HIGHCOMP|COMMSEQ|ITEMENABLED,
  1984.   0,
  1985.   (APTR)&text12,
  1986.   NULL,
  1987.   'l',
  1988.   NULL,
  1989.   0
  1990. };
  1991.  
  1992. struct MenuItem item11=
  1993. { &item12,
  1994.   0,10,
  1995.   176,10,
  1996.   ITEMTEXT|HIGHCOMP|ITEMENABLED,
  1997.   0,
  1998.   (APTR)&text11,
  1999.   NULL,
  2000.   0,
  2001.   NULL,
  2002.   0
  2003. };
  2004.  
  2005. struct MenuItem item10=
  2006. { &item11,
  2007.   0,0,
  2008.   176,10,
  2009.   ITEMTEXT|HIGHCOMP|ITEMENABLED|COMMSEQ,
  2010.   0,
  2011.   (APTR)&text10,
  2012.   NULL,
  2013.   'r',
  2014.   NULL,
  2015.   0
  2016. };
  2017.  
  2018. struct MenuItem item03=
  2019. { NULL,
  2020.   0,30,
  2021.   160,10,
  2022.   ITEMTEXT|HIGHNONE|ITEMENABLED,
  2023.   0,
  2024.   (APTR)&text03,
  2025.   NULL,
  2026.   0,
  2027.   NULL,
  2028.   0
  2029. };
  2030.  
  2031. struct MenuItem item02=
  2032. { &item03,
  2033.   0,20,
  2034.   160,10,
  2035.   ITEMTEXT|HIGHNONE|ITEMENABLED,
  2036.   0,
  2037.   (APTR)&text02,
  2038.   NULL,
  2039.   0,
  2040.   NULL,
  2041.   0
  2042. };
  2043.  
  2044. struct MenuItem item01=
  2045. { &item02,
  2046.   0,10,
  2047.   160,10,
  2048.   ITEMTEXT|HIGHNONE|ITEMENABLED,
  2049.   0,
  2050.   (APTR)&text01,
  2051.   NULL,
  2052.   0,
  2053.   NULL,
  2054.   0
  2055. };
  2056.  
  2057. struct MenuItem item00=
  2058. { &item01,
  2059.   0,0,
  2060.   160,10,
  2061.   ITEMTEXT|HIGHNONE|ITEMENABLED,
  2062.   0,
  2063.   (APTR)&text00,
  2064.   NULL,
  2065.   0,
  2066.   NULL,
  2067.   0
  2068. };
  2069.  
  2070. struct Menu menu6=
  2071. { NULL,
  2072.   528,0,
  2073.   72,8,
  2074.   MENUENABLED,
  2075.   "Konfig.",
  2076.   &item60
  2077. };
  2078.  
  2079. struct Menu menu5=
  2080. { &menu6,
  2081.   432,0,
  2082.   80,8,
  2083.   NULL,
  2084.   "Transform",
  2085.   &item50
  2086. };
  2087.  
  2088. struct Menu menu4=
  2089. { &menu5,
  2090.   328,0,
  2091.   80,8,
  2092.   NULL,
  2093.   "SW-Proze▀",
  2094.   &item40
  2095. };
  2096.  
  2097. struct Menu menu3=
  2098. { &menu4,
  2099.   216,0,
  2100.   96,8,
  2101.   NULL,
  2102.   "Grau-Proze▀",
  2103.   &item30
  2104. };
  2105.  
  2106. struct Menu menu2=
  2107. { &menu3,
  2108.   136,0,
  2109.   72,8,
  2110.   MENUENABLED,
  2111.   "Vorgaben",
  2112.   &item20
  2113. };
  2114.  
  2115. struct Menu menu1=
  2116. { &menu2,
  2117.   56,0,
  2118.   72,8,
  2119.   MENUENABLED,
  2120.   "Programm",
  2121.   &item10
  2122. };
  2123.  
  2124. struct Menu menu0=
  2125. { &menu1,
  2126.   0,0,
  2127.   40,8,
  2128.   MENUENABLED,
  2129.   "Info",
  2130.   &item00
  2131. };
  2132.  
  2133. void ende(void);
  2134. void ende(void)
  2135. { if (memptr) free(memptr);
  2136.   if (!(noscan))
  2137.   { if((openerror==0)&&(!(diskreq))) CloseDevice((struct IORequest *)diskreq);
  2138.     if(diskport)DeletePort(diskport);
  2139.     if(diskreq)DeleteStdIO(diskreq);
  2140.   }
  2141.   if (win) { ClearMenuStrip(win); CloseWindow(win); }
  2142.   if (scr) CloseScreen(scr);
  2143.   if (bufptr) FreeMem(bufptr,32768);
  2144.   if (imgptrf) FreeMem(imgptrf,sizeof(imagedataf));
  2145.   if (imgptrz) FreeMem(imgptrz,sizeof(imagedataz));
  2146.   if (ReqToolsBase) CloseLibrary((struct Library *)ReqToolsBase);
  2147.   if (DosBase) CloseLibrary((struct Library *)DosBase);
  2148.   if (GfxBase) CloseLibrary((struct Library *)GfxBase);
  2149.   if (IntuitionBase) CloseLibrary((struct Library *)IntuitionBase);
  2150. }
  2151.  
  2152. void saveprefs(void);
  2153. void saveprefs(void)
  2154. { FILE *preffile;
  2155.   preffile=fopen(PREFNAME,"w");
  2156.   fprintf(preffile,"%s\n%d\n%d\n%d\n",scsidevice,laceon,screenmode,pal2024);
  2157.   fclose(preffile);
  2158. }
  2159.  
  2160. void redisplay(void);
  2161. void redisplay(void)
  2162. { if (memneed) view((memwidth>viewwidth)?hprop.HorizPot*(memwidth-viewwidth)/65536:0,
  2163.                     (memheight>viewheight)?vprop.VertPot*(memheight-viewheight)/65536:0,
  2164.                     (zgad.Flags&SELECTED));
  2165.   if (mf==2) drawbox(wx1,wy1,wx2,wy2,wrp);
  2166. }
  2167.  
  2168. void menu(UWORD Code);
  2169. void menu(UWORD Code)
  2170. {
  2171.   UWORD num,item,subitem;
  2172.   num=MENUNUM(Code);
  2173.   item=ITEMNUM(Code);
  2174.   subitem=SUBNUM(Code);
  2175.   switch(num)
  2176.   {  case 0: break;                    /* Info */
  2177.      case 1: switch(item)              /* Programm */
  2178.              { case 0: scan();         /* Einlesen */
  2179.                        vprop.VertBody=(zgad.Flags&SELECTED)?0xffff:((memheight>viewheight)?viewheight*65536/memheight:0xffff);
  2180.                        hprop.HorizBody=(zgad.Flags&SELECTED)?0xffff:((memwidth>viewwidth)?viewwidth*65536/memwidth:0xffff);
  2181.                        vprop.VertPot=0;
  2182.                        hprop.HorizPot=0;
  2183.                        RefreshGadgets(&zgad,win,NULL);
  2184.                        if (memneed)
  2185.                        { view(0,0,(zgad.Flags&SELECTED));
  2186.                          mf=0;
  2187.                        }
  2188.                        break;
  2189.                case 1: diskscan();
  2190.                        break;
  2191.                case 2: load();
  2192.                        vprop.VertBody=((!(memheight))||(memheight<viewheight)||(zgad.Flags&SELECTED))?0xffff:viewheight*65536/memheight;
  2193.                        hprop.HorizBody=((!(memwidth))||(memwidth<viewwidth)||(zgad.Flags&SELECTED))?0xffff:viewwidth*65536/memwidth;
  2194.                        vprop.VertPot=0;
  2195.                        hprop.HorizPot=0;
  2196.                        RefreshGadgets(&zgad,win,NULL);
  2197.                        if (memneed)
  2198.                        { view(0,0,(zgad.Flags&SELECTED));
  2199.                          mf=0;
  2200.                        }
  2201.                        break;
  2202.                case 3: save(wx1,wy1,wx2,wy2,cmp,mf); /* Speichern */
  2203.                        break;
  2204.                case 4: cmp=subitem;
  2205.                        break;
  2206.                case 5: inquiry();
  2207.                        break;
  2208.                case 6: ende();         /* Ende */
  2209.                        exit(0L);
  2210.                        break;
  2211.              }
  2212.              break;
  2213.      case 2: switch(item)
  2214.              { case 0: winpar.resx=100*(subitem+2);
  2215.                        winpar.resy=winpar.resx;
  2216.                        break;
  2217.                case 1: winpar.size=6-subitem;
  2218.                        break;
  2219.                case 2: winpar.halftone=subitem<<1;
  2220.                        winpar.bitspixel=subitem ? 8 : 1;
  2221.                        break;
  2222.                case 3: winpar.threshold=subitem<<2;
  2223.                        break;
  2224.              }
  2225.              break;
  2226.      case 3: switch(item)
  2227.              { case 0: if ((memgray)&&(memneed))
  2228.                        { floyd();
  2229.                          redisplay();
  2230.                        }
  2231.                        break;
  2232.                case 1: if ((memgray)&&(memneed))
  2233.                        { ordered();
  2234.                          redisplay();
  2235.                        }
  2236.                        break;
  2237.                case 2: if ((memgray)&&(memneed))
  2238.                        { thresh();
  2239.                          redisplay();
  2240.                        }
  2241.                        break;
  2242.                case 3: if ((memgray)&&(memneed)) viewhisto(wrp);
  2243.                        break;
  2244.                case 4: if ((memgray)&&(memneed))
  2245.                        { stretchhisto();
  2246.                          redisplay();
  2247.                        }
  2248.                        break;
  2249.                case 5: if ((memgray)&&(memneed))
  2250.                        { lowpass();
  2251.                          redisplay();
  2252.                        }
  2253.                        break;
  2254.                case 6: if ((memgray)&&(memneed))
  2255.                        { highpass();
  2256.                          redisplay();
  2257.                        }
  2258.                        break;
  2259.                case 7: if ((memgray)&&(memneed))
  2260.                        { blowpass();
  2261.                          redisplay();
  2262.                        }
  2263.                        break;
  2264.                case 8: if ((memgray)&&(memneed))
  2265.                        { relief();
  2266.                          redisplay();
  2267.                        }
  2268.                        break;
  2269.                case 9: if ((memgray)&&(memneed))
  2270.                        { minop();
  2271.                          redisplay();
  2272.                        }
  2273.                        break;
  2274.                case 10:if ((memgray)&&(memneed))
  2275.                        { maxop();
  2276.                          redisplay();
  2277.                        }
  2278.                        break;
  2279.                case 11:if ((memgray)&&(memneed))
  2280.                        { median();
  2281.                          redisplay();
  2282.                        }
  2283.                        break;
  2284.              }
  2285.              break;
  2286.      case 4: switch(item)
  2287.              { case 0: if ((!(memgray))&&(memneed))
  2288.                        { togray();
  2289.                          redisplay();
  2290.                        }
  2291.                        break;
  2292.                case 1: if ((!(memgray))&&(memneed))
  2293.                        { thin();
  2294.                          redisplay();
  2295.                        }
  2296.                        break;
  2297.                case 2: if ((!(memgray))&&(memneed))
  2298.                        { vectorize();
  2299.                          redisplay();
  2300.                        }
  2301.                        break;
  2302.                case 3: chngmaxdiff();
  2303.                        break;
  2304.              }
  2305.              break;
  2306.      case 5: switch(item)
  2307.              { case 0: if (memneed)
  2308.                        { invert();
  2309.                          redisplay();
  2310.                        }
  2311.                        break;
  2312.                case 1: if (memneed)
  2313.                        { mirrorh();
  2314.                          redisplay();
  2315.                        }
  2316.                        break;
  2317.                case 2: if (memneed)
  2318.                        { mirrorv();
  2319.                          redisplay();
  2320.                        }
  2321.                        break;
  2322.                case 3: if (memneed)
  2323.                        { cut(wx1,wy1,wx2,wy2,mf);
  2324.                          hprop.HorizPot=0;
  2325.                          vprop.VertPot=0;
  2326.                          vprop.VertBody=(zgad.Flags&SELECTED)?0xffff:((viewheight<memheight)?viewheight*65536/memheight:0xffff);
  2327.                          hprop.HorizBody=(zgad.Flags&SELECTED)?0xffff:((viewwidth<memwidth)?viewwidth*65536/memwidth:0xffff);
  2328.                          RefreshGadgets(&vgad,win,NULL);
  2329.                          if (memneed) view(0,0,(zgad.Flags&SELECTED));
  2330.                          mf=0;
  2331.                        }
  2332.                        break;
  2333.              }
  2334.              break;
  2335.      case 6: switch(item)
  2336.              { case 0: if (rtGetString(scsidevice,50,"SCSI device name",
  2337.                                         NULL, TAG_END))
  2338.                          saveprefs();
  2339.                        break;
  2340.                case 1: laceon=1-subitem;
  2341.                        saveprefs();
  2342.                        break;
  2343.                case 2: screenmode=subitem;
  2344.                        saveprefs();
  2345.                        break;
  2346.                case 3: pal2024=1-subitem;
  2347.                        saveprefs();
  2348.                        break;
  2349.              }
  2350.              break;
  2351.   }
  2352. }
  2353.  
  2354. int main(long argc, char **argv)
  2355. { static ULONG MessageClass;
  2356.   static UWORD Code;
  2357.   UWORD i;
  2358.   UWORD mx,my;
  2359.   FILE *preffile;
  2360.   ULONG display;
  2361.  
  2362.   strcpy(scsidevice,defaultdevice);
  2363.   preffile=fopen(PREFNAME,"r");
  2364.   if (preffile!=NULL)
  2365.   { fscanf(preffile,"%s",&scsidevice);
  2366.     fscanf(preffile,"%d",&laceon);
  2367.     fscanf(preffile,"%d",&screenmode);
  2368.     fscanf(preffile,"%d",&pal2024);
  2369.     fclose(preffile);
  2370.   }
  2371.   switch(laceon)
  2372.   { case 0: item611.Flags|=CHECKED;
  2373.             break;
  2374.     case 1: item610.Flags|=CHECKED;
  2375.             break;
  2376.   }
  2377.   switch(screenmode)
  2378.   { case 0: item620.Flags|=CHECKED;
  2379.             break;
  2380.     case 1: item621.Flags|=CHECKED;
  2381.             break;
  2382.     case 2: item622.Flags|=CHECKED;
  2383.             break;
  2384.     case 3: item623.Flags|=CHECKED;
  2385.             break;
  2386.     case 4: item624.Flags|=CHECKED;
  2387.             break;
  2388.     case 5: item625.Flags|=CHECKED;
  2389.             break;
  2390.     case 6: item626.Flags|=CHECKED;
  2391.             break;
  2392.     case 7: item627.Flags|=CHECKED;
  2393.             break;
  2394.   }
  2395.   switch(pal2024)
  2396.   { case 0: item631.Flags|=CHECKED;
  2397.             break;
  2398.     case 1: item630.Flags|=CHECKED;
  2399.             break;
  2400.   }
  2401.   if ((IntuitionBase = (struct IntuitionBase *)
  2402.        OpenLibrary("intuition.library",37)) == 0L)
  2403.   {    ende();
  2404.        exit(100L);
  2405.   }
  2406.   if ((GfxBase = (struct GfxBase *)
  2407.        OpenLibrary("graphics.library",37))==0L)
  2408.   {    ende();
  2409.        exit(100L);
  2410.   }
  2411.   if ((DosBase = (struct DosBase *)
  2412.        OpenLibrary("dos.library",37))==0L)
  2413.   {    ende();
  2414.        exit(100L);
  2415.   }
  2416.   if ((ReqToolsBase = (struct ReqToolsBase *)
  2417.        OpenLibrary("reqtools.library",38))==0L)
  2418.   {    ende();
  2419.        exit(100L);
  2420.   }
  2421.   if (!(imgptrf=AllocMem(sizeof(imagedataf),MEMF_CHIP)))
  2422.   {    ende();
  2423.        exit(85L);
  2424.   }
  2425.   if (!(imgptrz=AllocMem(sizeof(imagedataz),MEMF_CHIP)))
  2426.   {    ende();
  2427.        exit(85L);
  2428.   }
  2429.   if (!(bufptr=AllocMem(32768,MEMF_PUBLIC)))
  2430.   {    ende();
  2431.        exit(85L);
  2432.   }
  2433.   memneed=0;
  2434.   noscan=0;
  2435.   memcpy(imgptrf,&imagedataf,sizeof(imagedataf));
  2436.   memcpy(imgptrz,&imagedataz,sizeof(imagedataz));
  2437.   fullimage.ImageData=(UWORD *)imgptrf;
  2438.   zoomimage.ImageData=(UWORD *)imgptrz;
  2439.  
  2440.   if (IntuitionBase->LibNode.lib_Version<=35)
  2441.   { screenwidth=GfxBase->NormalDisplayColumns;
  2442.     screenheight=GfxBase->NormalDisplayRows*((laceon)?2:1);
  2443.     ns.Width=screenwidth;
  2444.     ns.Height=screenheight;
  2445.     item62.Flags&=~ITEMENABLED; /*no screenmodes in Kick 1.3*/
  2446.     ns.ViewModes=((laceon)?HIRES|LACE:HIRES);
  2447.     if (!(scr=(struct Screen*)OpenScreen(&ns)))
  2448.     {    ende();
  2449.          exit(90L);
  2450.     }
  2451.     numcols=16;
  2452.     display=0;
  2453.   }
  2454.   else
  2455.   { numcols=modecols[screenmode];
  2456.     display=viewmodes[screenmode];
  2457.     if (laceon)
  2458.     { if (display==A2024TENHERTZ_KEY)   display=A2024FIFTEENHERTZ_KEY;
  2459.       else if (display==VGAPRODUCT_KEY) display=VGAPRODUCTLACE_KEY;
  2460.       else display|=LORESLACE_KEY;
  2461.     }
  2462. /*
  2463.     if (!(GetDisplayInfoData(0,(struct DimensionInfo*)&diminfo,
  2464. */
  2465.     if (!(GetDisplayInfoData(0,(UBYTE *)&diminfo,
  2466.           sizeof(diminfo),DTAG_DIMS,display)))
  2467.        { ende();
  2468.          exit(90);
  2469.        }
  2470.     if (!(scr=(struct Screen*)OpenScreenTags(&ns,
  2471.           SA_Width,  (int)(diminfo.Nominal.MaxX-diminfo.Nominal.MinX+1),
  2472.           SA_Height, (int)(diminfo.Nominal.MaxY-diminfo.Nominal.MinY+1),
  2473.           SA_Depth, ((numcols==16)?4:2),
  2474.           SA_Pens, ((numcols==16)?pendata16:pendata4),
  2475.           SA_Font, &textattr,
  2476.           SA_DisplayID, display,
  2477.           SA_SysFont,0,
  2478.           TAG_DONE)))
  2479.     {    ende();
  2480.          exit(90L);
  2481.     }
  2482.     screenheight=scr->Height;
  2483.     screenwidth=scr->Width;
  2484.   }
  2485.  
  2486.   viewheight=screenheight-42;
  2487.   viewwidth=screenwidth-16;
  2488.   viewoffset=(ULONG)(screenwidth>>3)*21;
  2489.   lineoffset=(ULONG)(screenwidth>>3);
  2490.   hgad.TopEdge=viewheight+13;
  2491.   hgad.Width=viewwidth;
  2492.   vgad.LeftEdge=viewwidth+1;
  2493.   vgad.Height=viewheight;
  2494.   zgad.LeftEdge=viewwidth+3;
  2495.   zgad.TopEdge=viewheight+15;
  2496.  
  2497.   vp=&(scr->ViewPort);
  2498.   rp=&(scr->RastPort);
  2499.   if ((display==A2024TENHERTZ_KEY)||(display==A2024FIFTEENHERTZ_KEY))
  2500.   { for (i=0;i<4;i++)
  2501.     { SetRGB4(vp,i,graystep4[i],graystep4[i],graystep4[i]); }
  2502.   }
  2503.   else
  2504.     if (pal2024)
  2505.       if (numcols==16)
  2506.       { for (i=0;i<16;i++)
  2507.         { SetRGB4(vp,i,pal16_2024[i][0],pal16_2024[i][1],pal16_2024[i][2]); }
  2508.       }
  2509.       else
  2510.       { for (i=0;i<4;i++)
  2511.         { SetRGB4(vp,i,pal4_2024[i][0],pal4_2024[i][1],pal4_2024[i][2]); }
  2512.       }
  2513.     else
  2514.       if (numcols==16)
  2515.       { for (i=0;i<16;i++)
  2516.         { SetRGB4(vp,i,graystep16[i],graystep16[i],graystep16[i]); }
  2517.       }
  2518.       else
  2519.       { for (i=0;i<4;i++)
  2520.         { SetRGB4(vp,i,graystep4[i],graystep4[i],graystep4[i]); }
  2521.       }
  2522.   nw.Screen=scr;
  2523.   nw.Width=screenwidth;
  2524.   nw.Height=screenheight-12;
  2525.   if (!(win=(struct Window *)OpenWindow(&nw)))
  2526.   {    ende();
  2527.        exit(90L);
  2528.   }
  2529.  
  2530.   wrp=win->RPort;
  2531.   if(!(diskport=CreatePort(0L,0L)))
  2532.   {    noscan=1;
  2533.   }
  2534.   if(!(diskreq=(struct IOStdReq *)CreateStdIO(diskport)))
  2535.   {    noscan=1;
  2536.        if(diskport)DeletePort(diskport);
  2537.   }
  2538.   if(openerror=OpenDevice((char *)scsidevice,ST400ID,diskreq,0L))
  2539.   {    noscan=1;
  2540.        if(diskport)DeletePort(diskport);
  2541.        if(diskreq)DeleteStdIO(diskreq);
  2542.   }
  2543.   if (noscan)
  2544.   { item10.Flags&=(~ITEMENABLED);
  2545.     item14.Flags&=(~ITEMENABLED);
  2546.   }
  2547.   memptr=NULL;
  2548.   cmp=mf=0;
  2549.   SetMenuStrip(win,&menu0);
  2550.   for (i=0;i<256;i++) numbits[i]=numbits_16[i/16]+numbits_16[i&15];
  2551.   SetWindowTitles(win,"Kein Bereich selektiert!                  ",(UBYTE *)-1);
  2552.   for(;;)
  2553.   { Wait((long)(1L<<win->UserPort->mp_SigBit));
  2554.     while (Message=(struct IntuiMessage *)GetMsg(win->UserPort))
  2555.     {
  2556.       MessageClass=Message->Class;
  2557.       Code=Message->Code;
  2558.       ReplyMsg(Message);
  2559.       if (MessageClass==MENUPICK) menu(Code);
  2560.       if (((MessageClass==GADGETUP))&&(memneed))
  2561.       { if (!(((struct Gadget *)(Message->IAddress))->GadgetID))
  2562.         { vprop.VertBody=(zgad.Flags&SELECTED)?0xffff:((viewheight<memheight)?viewheight*65536/memheight:0xffff);
  2563.           hprop.HorizBody=(zgad.Flags&SELECTED)?0xffff:((viewwidth<memwidth)?viewwidth*65536/memwidth:0xffff);
  2564.           vprop.VertPot=0;
  2565.           hprop.HorizPot=0;
  2566.         }
  2567.         redisplay();
  2568.         RefreshGadgets(&vgad,win,NULL);
  2569.       }
  2570.       if ((MessageClass==MOUSEBUTTONS)&&(Code&128)&&(memneed))
  2571.       { mx=win->MouseX; my=win->MouseY;
  2572.         if ((mx<viewwidth)&&(my>=10)&&(my<viewheight))
  2573.         switch(mf)
  2574.         { case 0: wx1=s2px(mx)&0xfff8; wy1=s2py(my-11); mf=1; break;
  2575.           case 1: wx2=s2px(mx)&0xfff8; wy2=s2py(my-11); mf=2;
  2576.                   drawbox(wx1,wy1,wx2,wy2,wrp); break;
  2577.           case 2: mf=0; drawbox(wx1,wy1,wx2,wy2,wrp); break;
  2578.         }
  2579.       }
  2580.       if (MessageClass==CLOSEWINDOW)
  2581.       { ende();
  2582.         exit(0L);
  2583.       } /* if */
  2584.       if ((!(memgray))&&(memneed)) menu4.Flags|=MENUENABLED;
  2585.       else menu4.Flags&=(~MENUENABLED);
  2586.       if ((memgray)&&(memneed)) menu3.Flags|=MENUENABLED;
  2587.       else menu3.Flags&=(~MENUENABLED);
  2588.       if (memneed)
  2589.       { item12.Flags|=ITEMENABLED;
  2590.         menu5.Flags|=MENUENABLED;
  2591.       }
  2592.       else
  2593.       { item12.Flags&=(~ITEMENABLED);
  2594.         menu5.Flags&=(~MENUENABLED);
  2595.       }
  2596.       switch(mf)
  2597.       { case 0: SetWindowTitles(win,"Kein Bereich selektiert                   ",(UBYTE *)-1);
  2598.                 item53.Flags&=(~ITEMENABLED);
  2599.                 break;
  2600.         case 1: SetWindowTitles(win,"NΣchsten Punkt wΣhlen                     ",(UBYTE *)-1);
  2601.                 item53.Flags&=(~ITEMENABLED);
  2602.                 break;
  2603.         case 2: SetWindowTitles(win,"Bereich gewΣhlt                           ",(UBYTE *)-1);
  2604.                 item53.Flags|=ITEMENABLED;
  2605.                 break;
  2606.       }
  2607.     } /* while */
  2608.   } /* for */
  2609.   return 0;
  2610. } /* main */
  2611.  
  2612.