home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / alib / d5xx / d547 / powersource.lha / PowerSource / source.lzh / source / editgad.c < prev    next >
Text File  |  1991-09-15  |  33KB  |  955 lines

  1. /*----------------------------------------------------------------------*
  2.    editgad.c Version 3.0 - © Copyright 1990-91 by Jaba Development
  3.  
  4.    Author : Jan van den Baard
  5.    Purpose: The editing of gadgets flags e.c.t.
  6.  *----------------------------------------------------------------------*/
  7.  
  8. static UBYTE UNDOBUFFER[20];
  9.  
  10. static struct TextAttr TOPAZ60 =
  11.  { (STRPTR)"topaz.font",TOPAZ_SIXTY,FS_NORMAL,FPF_ROMFONT };
  12.  
  13. static SHORT MainPairs6[] =
  14.  { 0,0,249,0,249,32,0,32,0,0 };
  15. static SHORT MainPairs5[] =
  16.  { 0,0,148,0,148,101,0,101,0,0 };
  17. static SHORT MainPairs4[] =
  18.  { 0,0,122,0,122,84,0,84,0,0 };
  19. static SHORT MainPairs3[] =
  20.  { 0,0,123,0,123,84,0,84,0,0 };
  21. static SHORT MainPairs2[] =
  22.  { 0,0,114,0,114,118,0,118,0,0 };
  23. static SHORT MainPairs1[] =
  24.  { 0,0,106,0,106,118,0,118,0,0 };
  25.  
  26. static struct Border MainBorder6 =
  27.  { 233,97,1,0,JAM1,5,MainPairs6,NULL };
  28. static struct Border MainBorder5 =
  29.  { 486,11,1,0,JAM1,5,MainPairs5,&MainBorder6 };
  30. static struct Border MainBorder4 =
  31.  { 360,11,1,0,JAM1,5,MainPairs4,&MainBorder5 };
  32. static struct Border MainBorder3 =
  33.  { 233,11,1,0,JAM1,5,MainPairs3,&MainBorder4 };
  34. static struct Border MainBorder2 =
  35.  { 115,11,1,0,JAM1,5,MainPairs2,&MainBorder3 };
  36. static struct Border MainBorder1 =
  37.  { 5,11,1,0,JAM1,5,MainPairs1,&MainBorder2 };
  38.  
  39. static struct IntuiText MainText6 =
  40.  { 1,0,JAM1,291,100,NULL,(UBYTE *)"SOURCE LABEL NAME",NULL };
  41. static struct IntuiText MainText5 =
  42.  { 1,0,JAM1,515,13,NULL,(UBYTE *)"GADGET TYPE",&MainText6 };
  43. static struct IntuiText MainText4 =
  44.  { 1,0,JAM1,366,13,NULL,(UBYTE *)"STRING SPECIAL",&MainText5 };
  45. static struct IntuiText MainText3 =
  46.  { 1,0,JAM1,249,13,NULL,(UBYTE *)"PROP SPECIAL",&MainText4 };
  47. static struct IntuiText MainText2 =
  48.  { 1,0,JAM1,132,13,NULL,(UBYTE *)"ACTIVATION",&MainText3 };
  49. static struct IntuiText MainText1 =
  50.  { 1,0,JAM1,36,13,NULL,(UBYTE *)"FLAGS",&MainText2 };
  51.  
  52. static struct Gadget BRD =
  53.  { NULL,0,0,1,1,GADGHNONE,NULL,BOOLGADGET,
  54.    (APTR)&MainBorder1,NULL,&MainText1,NULL,NULL,NULL,NULL };
  55.  
  56. static SHORT CNPairs[] =
  57.  { 0,0,72,0,72,14,0,14,0,0 };
  58. static struct Border CNBorder =
  59.  { -1,-1,1,0,JAM1,5,CNPairs,NULL };
  60.  
  61. static struct IntuiText CNText =
  62.  { 1,0,JAM1,5,3,&TOPAZ60,(UBYTE *)"CANCEL",NULL };
  63. static struct Gadget CN =
  64.  { &BRD,563,116,71,13,NULL,RELVERIFY,BOOLGADGET,
  65.    (APTR)&CNBorder,NULL,&CNText,NULL,NULL,35,NULL };
  66.  
  67. static struct IntuiText OKIDOKIText =
  68.  { 1,0,JAM1,26,3,&TOPAZ60,(UBYTE *)"OK",NULL };
  69. static struct Gadget OKIDOKI =
  70.  { &CN,487,116,71,13,NULL,RELVERIFY,BOOLGADGET,
  71.    (APTR)&CNBorder,NULL,&OKIDOKIText,NULL,NULL,34,NULL };
  72.  
  73. static UBYTE SLBuff[MAXLABEL];
  74. static SHORT SLPairs[] =
  75.  { 0,0,239,0,239,11,0,11,0,0 };
  76. static struct Border SLBorder =
  77.  { -1,-2,1,0,JAM1,5,SLPairs,NULL };
  78. static struct StringInfo SLInfo =
  79.  { SLBuff,UNDOBUFFER,0,MAXLABEL,0,0,0,0,0,0,0,0,NULL };
  80. static struct Gadget SL =
  81.  { &OKIDOKI,239,112,237,8,NULL,RELVERIFY+STRINGCENTER,STRGADGET,
  82.    (APTR)&SLBorder,NULL,NULL,NULL,(APTR)&SLInfo,33,NULL };
  83.  
  84. static SHORT GTPairs[] =
  85.  { 0,0,140,0,140,11,0,11,0,0 };
  86. static struct Border GTBorder =
  87.  { -1,-1,1,0,JAM1,5,GTPairs,NULL };
  88.  
  89. static struct IntuiText OSText =
  90.  { 1,0,JAM1,31,1,NULL,(UBYTE *)"OS2BORDER",NULL };
  91. static struct Gadget OS =
  92.  { &SL,491,100,139,10,NULL,GADGIMMEDIATE+TOGGLESELECT,BOOLGADGET,
  93.    (APTR)>Border,NULL,&OSText,NULL,NULL,39,NULL };
  94.  
  95. static struct IntuiText NBText =
  96.  { 1,0,JAM1,35,1,NULL,(UBYTE *)"NOBORDER",NULL };
  97. static struct Gadget NB =
  98.  { &OS,491,87,139,10,NULL,GADGIMMEDIATE+TOGGLESELECT,BOOLGADGET,
  99.    (APTR)>Border,NULL,&NBText,NULL,NULL,38,NULL };
  100.  
  101. static struct IntuiText GZText =
  102.  { 1,0,JAM1,31,1,NULL,(UBYTE *)"GZZGADGET",NULL };
  103. static struct Gadget GZ =
  104.  { &NB,491,74,139,10,NULL,TOGGLESELECT,BOOLGADGET,
  105.    (APTR)>Border,NULL,&GZText,NULL,NULL,37,NULL };
  106.  
  107. static struct IntuiText BOText =
  108.  { 1,0,JAM1,27,1,NULL,(UBYTE *)"BORDERONLY",NULL };
  109. static struct Gadget BO =
  110.  { &GZ,491,61,139,10,GADGDISABLED,GADGIMMEDIATE+TOGGLESELECT,BOOLGADGET,
  111.    (APTR)>Border,NULL,&BOText,NULL,NULL,36,NULL };
  112.  
  113. static struct IntuiText STText =
  114.  { 1,0,JAM1,43,1,NULL,(UBYTE *)"STRING",NULL };
  115. static struct Gadget ST =
  116.  { &BO,491,48,139,10,NULL,GADGIMMEDIATE+TOGGLESELECT,BOOLGADGET,
  117.    (APTR)>Border,NULL,&STText,3L,NULL,32,NULL };
  118.  
  119. static struct IntuiText PRText =
  120.  { 1,0,JAM1,22,1,NULL,(UBYTE *)"PROPORTIONAL",NULL };
  121. static struct Gadget PR =
  122.  { &ST,491,35,139,10,NULL,GADGIMMEDIATE+TOGGLESELECT,BOOLGADGET,
  123.    (APTR)>Border,NULL,&PRText,5L,NULL,31,NULL };
  124.  
  125. static struct IntuiText BLText =
  126.  { 1,0,JAM1,52,1,NULL,(UBYTE *)"BOOL",NULL };
  127. static struct Gadget BL =
  128.  { &PR,491,22,139,10,NULL,GADGIMMEDIATE+TOGGLESELECT,BOOLGADGET,
  129.    (APTR)>Border,NULL,&BLText,6L,NULL,30,NULL };
  130.  
  131. static SHORT BPairs[] =
  132.  { 0,0,72,0,72,11,0,11,0,1 };
  133. static struct Border BBorder =
  134.  { -2,-2,1,0,JAM1,5,BPairs,NULL };
  135.  
  136. static UBYTE SZBuff[4] = "256";
  137. static struct StringInfo SZInfo =
  138.  { SZBuff,UNDOBUFFER,0,4,0,0,0,0,0,0,0,256L,NULL };
  139. static struct IntuiText SZText =
  140.  { 1,0,JAM1,-46,1,NULL,(UBYTE *)"SIZE",NULL };
  141. static struct Gadget SZ =
  142.  { &BL,409,84,67,8,NULL,RELVERIFY+STRINGCENTER+LONGINT,STRGADGET,
  143.    (APTR)&BBorder,NULL,&SZText,NULL,(APTR)&SZInfo,29,NULL };
  144.  
  145. static SHORT SINPairs[] =
  146.  { 0,0,115,0,115,10,0,10,0,0 };
  147. static struct Border SINBorder =
  148.  { -1,-1,1,0,JAM1,5,SINPairs,NULL };
  149.  
  150. static struct IntuiText AMText =
  151.  { 1,0,JAM1,21,1,NULL,(UBYTE *)"ALTKEYMAP",NULL };
  152. static struct Gadget AM =
  153.  { &SZ,365,70,114,9,NULL,TOGGLESELECT,BOOLGADGET,
  154.    (APTR)&SINBorder,NULL,&AMText,NULL,NULL,28,NULL };
  155.  
  156. static struct IntuiText LIText =
  157.  { 1,0,JAM1,29,1,NULL,(UBYTE *)"LONGINT",NULL };
  158. static struct Gadget LI =
  159.  { &AM,365,58,114,9,NULL,TOGGLESELECT,BOOLGADGET,
  160.    (APTR)&SINBorder,NULL,&LIText,NULL,NULL,27,NULL };
  161.  
  162. static struct IntuiText SRText =
  163.  { 1,0,JAM1,12,1,NULL,(UBYTE *)"STRINGRIGHT",NULL };
  164. static struct Gadget SR =
  165.  { &LI,365,46,114,9,NULL,GADGIMMEDIATE+TOGGLESELECT,BOOLGADGET,
  166.    (APTR)&SINBorder,NULL,&SRText,1L,NULL,26,NULL };
  167.  
  168. static struct IntuiText SCText =
  169.  { 1,0,JAM1,8,1,NULL,(UBYTE *)"STRINGCENTER",NULL };
  170. static struct Gadget SC =
  171.  { &SR,365,34,114,9,NULL,GADGIMMEDIATE+TOGGLESELECT,BOOLGADGET,
  172.    (APTR)&SINBorder,NULL,&SCText,2L,NULL,25,NULL };
  173.  
  174. static struct IntuiText UBText =
  175.  { 1,0,JAM1,16,1,NULL,(UBYTE *)"UNDOBUFFER",NULL };
  176. static struct Gadget UB =
  177.  { &SC,365,22,114,9,NULL,TOGGLESELECT,BOOLGADGET,
  178.    (APTR)&SINBorder,NULL,&UBText,NULL,NULL,24,NULL };
  179.  
  180. static UBYTE VBBuff[4] = "0";
  181. static struct StringInfo VBInfo =
  182.  { VBBuff,UNDOBUFFER,0,4,0,0,0,0,0,0,0,0,NULL };
  183. static struct IntuiText VBText =
  184.  { 1,0,JAM1,-46,1,NULL,(UBYTE *)"VBODY",NULL };
  185. static struct Gadget VB =
  186.  { &UB,282,84,67,8,NULL,RELVERIFY+STRINGCENTER+LONGINT,STRGADGET,
  187.    (APTR)&BBorder,NULL,&VBText,NULL,(APTR)&VBInfo,23,NULL };
  188.  
  189. static UBYTE HBBuff[4] = "0";
  190. static struct StringInfo HBInfo =
  191.  { HBBuff,UNDOBUFFER,0,4,0,0,0,0,0,0,0,0,NULL };
  192. static struct IntuiText HBText =
  193.  { 1,0,JAM1,-46,1,NULL,(UBYTE *)"HBODY",NULL };
  194. static struct Gadget HB =
  195.  { &VB,282,71,67,8,NULL,RELVERIFY+STRINGCENTER+LONGINT,STRGADGET,
  196.    (APTR)&BBorder,NULL,&HBText,NULL,(APTR)&HBInfo,22,NULL };
  197.  
  198. static struct IntuiText PBText =
  199.  { 1,0,JAM1,1,1,NULL,(UBYTE *)"PROPBORDERLESS",NULL };
  200. static struct Gadget PB =
  201.  { &HB,238,58,114,9,NULL,TOGGLESELECT,BOOLGADGET,
  202.    (APTR)&SINBorder,NULL,&PBText,NULL,NULL,21,NULL };
  203.  
  204. static struct IntuiText FVText =
  205.  { 1,0,JAM1,24,1,NULL,(UBYTE *)"FREEVERT",NULL };
  206. static struct Gadget FV =
  207.  { &PB,238,46,114,9,NULL,TOGGLESELECT,BOOLGADGET,
  208.    (APTR)&SINBorder,NULL,&FVText,NULL,NULL,20,NULL };
  209.  
  210. static struct IntuiText FHText =
  211.  { 1,0,JAM1,20,1,NULL,(UBYTE *)"FREEHORIZ",NULL };
  212. static struct Gadget FH =
  213.  { &FV,238,34,114,9,NULL,TOGGLESELECT,BOOLGADGET,
  214.    (APTR)&SINBorder,NULL,&FHText,NULL,NULL,19,NULL };
  215.  
  216. static struct IntuiText AKText =
  217.  { 1,0,JAM1,25,1,NULL,(UBYTE *)"AUTOKNOB",NULL };
  218. static struct Gadget AK =
  219.  { &FH,238,22,114,9,NULL,GADGIMMEDIATE+TOGGLESELECT,BOOLGADGET,
  220.    (APTR)&SINBorder,NULL,&AKText,NULL,NULL,18,NULL };
  221.  
  222. static SHORT ACTPairs[] =
  223.  { 0,0,106,0,106,10,0,10,0,0 };
  224. static struct Border ACTBorder =
  225.  { -1,-1,1,0,JAM1,5,ACTPairs,NULL };
  226.  
  227. static struct IntuiText FMText =
  228.  { 1,0,JAM1,8,1,NULL,(UBYTE *)"FOLLOWMOUSE",NULL };
  229. static struct Gadget FM =
  230.  { &AK,120,118,105,9,NULL,TOGGLESELECT,BOOLGADGET,
  231.    (APTR)&ACTBorder,NULL,&FMText,NULL,NULL,17,NULL };
  232.  
  233. static struct IntuiText EGText =
  234.  { 1,0,JAM1,15,1,NULL,(UBYTE *)"ENDGADGET",NULL };
  235. static struct Gadget EG =
  236.  { &FM,120,106,105,9,NULL,TOGGLESELECT,BOOLGADGET,
  237.    (APTR)&ACTBorder,NULL,&EGText,NULL,NULL,16,NULL };
  238.  
  239. static struct IntuiText BBText =
  240.  { 1,0,JAM1,4,1,NULL,(UBYTE *)"BOTTOMBORDER",NULL };
  241. static struct Gadget BB =
  242.  { &EG,120,94,105,9,NULL,TOGGLESELECT,BOOLGADGET,
  243.    (APTR)&ACTBorder,NULL,&BBText,NULL,NULL,15,NULL };
  244.  
  245. static struct IntuiText TBText =
  246.  { 1,0,JAM1,16,1,NULL,(UBYTE *)"TOPBORDER",NULL };
  247. static struct Gadget TB =
  248.  { &BB,120,82,105,9,NULL,TOGGLESELECT,BOOLGADGET,
  249.    (APTR)&ACTBorder,NULL,&TBText,NULL,NULL,14,NULL };
  250.  
  251. static struct IntuiText LBText =
  252.  { 1,0,JAM1,13,1,NULL,(UBYTE *)"LEFTBORDER",NULL };
  253. static struct Gadget LB =
  254.  { &TB,120,70,105,9,NULL,TOGGLESELECT,BOOLGADGET,
  255.    (APTR)&ACTBorder,NULL,&LBText,NULL,NULL,13,NULL };
  256.  
  257. static struct IntuiText RBText =
  258.  { 1,0,JAM1,9,1,NULL,(UBYTE *)"RIGHTBORDER",NULL };
  259. static struct Gadget RB =
  260.  { &LB,120,58,105,9,NULL,TOGGLESELECT,BOOLGADGET,
  261.    (APTR)&ACTBorder,NULL,&RBText,NULL,NULL,12,NULL };
  262.  
  263. static struct IntuiText GIMText =
  264.  { 1,0,JAM1,1,1,NULL,(UBYTE *)"GADGIMMEDIATE",NULL };
  265. static struct Gadget GIM =
  266.  { &RB,120,46,105,9,NULL,TOGGLESELECT,BOOLGADGET,
  267.    (APTR)&ACTBorder,NULL,&GIMText,NULL,NULL,11,NULL };
  268.  
  269. static struct IntuiText RVYText =
  270.  { 1,0,JAM1,16,1,NULL,(UBYTE *)"RELVERIFY",NULL };
  271. static struct Gadget RVY =
  272.  { &GIM,120,34,105,9,NULL,TOGGLESELECT,BOOLGADGET,
  273.    (APTR)&ACTBorder,NULL,&RVYText,NULL,NULL,10,NULL };
  274.  
  275. static struct IntuiText TGSText =
  276.  { 1,0,JAM1,4,1,NULL,(UBYTE *)"TOGGLESELECT",NULL };
  277. static struct Gadget TGS =
  278.  { &RVY,120,22,105,9,NULL,TOGGLESELECT,BOOLGADGET,
  279.    (APTR)&ACTBorder,NULL,&TGSText,NULL,NULL,9,NULL };
  280.  
  281. static SHORT FLGPairs[] =
  282.  { 0,0,98,0,98,10,0,10,0,0 };
  283. static struct Border FLGBorder =
  284.  { -1,-1,1,0,JAM1,5,FLGPairs,NULL };
  285.  
  286. static struct IntuiText GDDText =
  287.  { 1,0,JAM1,1,1,NULL,(UBYTE *)"GADGDISABLED",NULL };
  288. static struct Gadget GDD =
  289.  { &TGS,10,118,97,9,NULL,TOGGLESELECT,BOOLGADGET,
  290.    (APTR)&FLGBorder,NULL,&GDDText,NULL,NULL,8,NULL };
  291.  
  292. static struct IntuiText SLCText =
  293.  { 1,0,JAM1,17,1,NULL,(UBYTE *)"SELECTED",NULL };
  294. static struct Gadget SLC =
  295.  { &GDD,10,106,97,9,NULL,TOGGLESELECT,BOOLGADGET,
  296.    (APTR)&FLGBorder,NULL,&SLCText,NULL,NULL,7,NULL };
  297.  
  298. static struct IntuiText GRHText =
  299.  { 1,0,JAM1,9,1,NULL,(UBYTE *)"GRELHEIGHT",NULL };
  300. static struct Gadget GRH =
  301.  { &SLC,10,94,97,9,NULL,TOGGLESELECT,BOOLGADGET,
  302.    (APTR)&FLGBorder,NULL,&GRHText,NULL,NULL,6,NULL };
  303.  
  304. static struct IntuiText GRWText =
  305.  { 1,0,JAM1,12,1,NULL,(UBYTE *)"GRELWIDTH",NULL };
  306. static struct Gadget GRW =
  307.  { &GRH,10,82,97,9,NULL,TOGGLESELECT,BOOLGADGET,
  308.    (APTR)&FLGBorder,NULL,&GRWText,NULL,NULL,5,NULL };
  309.  
  310. static struct IntuiText GRRText =
  311.  { 1,0,JAM1,12,1,NULL,(UBYTE *)"GRELRIGHT",NULL };
  312. static struct Gadget GRR =
  313.  { &GRW,10,70,97,9,NULL,TOGGLESELECT,BOOLGADGET,
  314.    (APTR)&FLGBorder,NULL,&GRRText,NULL,NULL,4,NULL };
  315.  
  316. static struct IntuiText GRBText =
  317.  { 1,0,JAM1,8,1,NULL,(UBYTE *)"GRELBOTTOM",NULL };
  318. static struct Gadget GRB =
  319.  { &GRR,10,58,97,9,NULL,TOGGLESELECT,BOOLGADGET,
  320.    (APTR)&FLGBorder,NULL,&GRBText,NULL,NULL,3,NULL };
  321.  
  322. static struct IntuiText GDHBText =
  323.  { 1,0,JAM1,14,1,NULL,(UBYTE *)"GADGHBOX",NULL };
  324. static struct Gadget GDHB =
  325.  { &GRB,10,46,97,9,NULL,GADGIMMEDIATE+TOGGLESELECT,BOOLGADGET,
  326.    (APTR)&FLGBorder,NULL,&GDHBText,3L,NULL,2,NULL };
  327.  
  328. static struct IntuiText GDHCText =
  329.  { 1,0,JAM1,12,1,NULL,(UBYTE *)"GADGHCOMP",NULL };
  330. static struct Gadget GDHC =
  331.  { &GDHB,10,34,97,9,NULL,GADGIMMEDIATE+TOGGLESELECT,BOOLGADGET,
  332.    (APTR)&FLGBorder,NULL,&GDHCText,5L,NULL,1,NULL };
  333.  
  334. static struct IntuiText GDHNText =
  335.  { 1,0,JAM1,12,1,NULL,(UBYTE *)"GADGHNONE",NULL };
  336. static struct Gadget GDHN =
  337.  { &GDHC,10,22,97,9,NULL,GADGIMMEDIATE+TOGGLESELECT,BOOLGADGET,
  338.    (APTR)&FLGBorder,NULL,&GDHNText,6L,NULL,0,NULL };
  339.  
  340. #define PensTag  (1 << 31L) + 32 + 0x1A
  341. #define Extended 0x1000
  342.  
  343. struct Tags { ULONG   Tag, *Param, End; };
  344. static UWORD           dp[10] = { 0,1,1,2,1,3,1,0,1,~0 };
  345. static struct Tags     dpt = { PensTag, (ULONG *)&dp[0],0L };
  346.  
  347. static struct NewScreen ns =
  348.  { 0,0,640,132,2,0,1,HIRES,CUSTOMSCREEN|SCREENBEHIND,NULL,NULL,NULL,NULL };
  349. static struct Tags     *ext = &dpt;
  350.  
  351. static struct NewWindow nw =
  352.  { 0,0,640,132,0,1,GADGETUP|GADGETDOWN,SIMPLE_REFRESH+ACTIVATE+RMBTRAP+NOCAREREFRESH,
  353.    NULL,NULL,(UBYTE *)"Edit Gadget",NULL,NULL,0,0,0,0,CUSTOMSCREEN };
  354.  
  355. static struct Window       *w;
  356. static struct Screen       *s;
  357. static struct RastPort     *rp;
  358. static struct IntuiMessage *msg;
  359. static struct MyGadget      old;
  360. static UWORD                id;
  361. static UWORD                my_colors[4] = { 0xFFF,0x000,0xFB9,0xA44 };
  362. static UBYTE                label_buffer[MAXLABEL];
  363.  
  364. extern struct Window        *MainWindow;
  365. extern struct Screen        *MainScreen;
  366. extern struct IntuitionBase *IntuitionBase;
  367. extern struct MemoryChain    Memory;
  368. extern struct ge_prefs       prefs;
  369. extern struct Library       *SysBase;
  370. extern UWORD                 LightSide, DarkSide;
  371. extern ULONG                 WindowFlags;
  372. extern BOOL                  REQUESTER;
  373.  
  374. /*
  375.  * setup main display.
  376.  */
  377. static void backfill( void )
  378. {
  379.     register struct Gadget  *g;
  380.     register struct Border  *b;
  381.     register SHORT          *p, l, t, i;
  382.  
  383.     LoadRGB4(&s->ViewPort,&my_colors[0],4);
  384.  
  385.     g = &GDHN;
  386.     b = &MainBorder1;
  387.  
  388.     SetAPen(rp,3);
  389.     RectFill(rp,w->BorderLeft-2,w->BorderTop-1,w->Width-w->BorderRight+1,w->Height-w->BorderBottom);
  390.  
  391.     SetAPen(rp,2);
  392.  
  393.     while(1) {
  394.         p = b->XY;
  395.         l = b->LeftEdge;
  396.         t = b->TopEdge;
  397.         RectFill(rp,l+p[0],t+p[1],l+p[4],t+p[5]);
  398.         if(NOT(b = b->NextBorder)) break;
  399.     }
  400.  
  401.     SetAPen(rp,0);
  402.  
  403.     while(1) {
  404.         l = g->LeftEdge;
  405.         t = g->TopEdge;
  406.         if(g != &BRD) RectFill(rp,l,t,l + g->Width,t + g->Height);
  407.         if(NOT(g = g->NextGadget)) break;
  408.     }
  409.  
  410.     SetAPen(rp,0);
  411.     RectFill(rp,280,82,352,93);
  412.     RectFill(rp,407,82,479,93);
  413.     RectFill(rp,280,69,352,80);
  414.     RectFill(rp,239,111,477,120);
  415. }
  416.  
  417. /*
  418.  * default the gadget flags of the control window
  419.  */
  420. static VOID clear_gadgets( void )
  421. {
  422.     register struct Gadget *g;
  423.  
  424.     g = &GDHN;
  425.  
  426.     while(1) {
  427.         if((g != &HB)&&(g != &VB)&&(g != &SZ)&&
  428.            (g != &SL)&&(g != &OKIDOKI)&&(g != &CN)&&(g != &BRD))
  429.             g->Flags = NULL;
  430.         else {
  431.             if(TestBits((ULONG)g->Flags,GADGDISABLED))
  432.                 g->Flags ^= GADGDISABLED;
  433.         }
  434.         if(NOT(g = g->NextGadget)) break;
  435.     }
  436.     SLBuff[0] = 0;
  437.     strcpy((char *)HBBuff,"0");
  438.     strcpy((char *)VBBuff,"0");
  439.     strcpy((char *)SZBuff,"256");
  440.     redisplay(&SL);
  441. }
  442.  
  443. /*
  444.  * set the gadgets according to the information
  445.  * found in the MyGadget structure 'g'
  446.  */
  447. static VOID set_gadgets(g)
  448.     struct MyGadget *g;
  449. {
  450.     struct Gadget     *gadget;
  451.     struct PropInfo   *pinfo;
  452.     struct StringInfo *sinfo;
  453.     register ULONG     flags, act, type;
  454.  
  455.     gadget = &g->Gadget;
  456.     flags  = (ULONG)gadget->Flags;
  457.     act    = (ULONG)gadget->Activation;
  458.     type   = (ULONG)gadget->GadgetType;
  459.  
  460.     renumber();
  461.  
  462.     CopyMem((char *)g,(char *)&old,(ULONG)sizeof(struct MyGadget));
  463.  
  464.     strcpy((char *)&label_buffer[0],(char *)&g->GadgetLabel);
  465.  
  466.     if((TestBits(flags,GADGIMAGE)) OR (gadget->SpecialInfo) OR
  467.        (gadget->GadgetText))
  468.         GadgetOff(w,&BO,NULL);
  469.  
  470.     if(NOT TestBits(WindowFlags,GIMMEZEROZERO))
  471.         GadgetOff(w,&GZ,NULL);
  472.  
  473.     if((TestBits(flags,GADGIMAGE)) OR (TestBits(type,PROPGADGET))) {
  474.         GadgetOff(w,&NB,NULL);
  475.         GadgetOff(w,&OS,NULL);
  476.     }
  477.  
  478.     if(REQUESTER) {
  479.         OffGList(w,&GRB,NULL,4);
  480.         OffGList(w,&RB,NULL,4);
  481.     } else
  482.         GadgetOff(w,&EG,NULL);
  483.  
  484.     if(TestBits((ULONG)g->SpecialFlags,OS20HIGHBORDER)) {
  485.         DeSelectGList(w,&GDHN,NULL,3);
  486.         OffGList(w,&GDHN,NULL,3);
  487.     }
  488.  
  489.     if(TestBits(flags,GADGIMAGE))
  490.         GadgetOff(w,&AK,NULL);
  491.  
  492.     if((TestBits(flags,GADGHIMAGE)) AND (NOT TestBits(flags,GADGHBOX)))
  493.         OffGList(w,&GDHN,NULL,3);
  494.     else if((TestBits(flags,GADGHIMAGE)) AND (TestBits(flags,GADGHBOX)))
  495.         SelectGadget(w,&GDHN,NULL);
  496.     else if(TestBits(flags,GADGHBOX))
  497.         SelectGadget(w,&GDHB,NULL);
  498.     else
  499.         SelectGadget(w,&GDHC,NULL);
  500.  
  501.     if(TestBits(flags,GRELBOTTOM))      SelectGadget(w,&GRB,NULL);
  502.     if(TestBits(flags,GRELRIGHT))       SelectGadget(w,&GRR,NULL);
  503.     if(TestBits(flags,GRELWIDTH))       SelectGadget(w,&GRW,NULL);
  504.     if(TestBits(flags,GRELHEIGHT))      SelectGadget(w,&GRH,NULL);
  505.     if(TestBits(flags,SELECTED))        SelectGadget(w,&SLC,NULL);
  506.     if(TestBits((ULONG)g->SpecialFlags,GADGETOFF))
  507.                                         SelectGadget(w,&GDD,NULL);
  508.     if(TestBits(act,TOGGLESELECT))      SelectGadget(w,&TGS,NULL);
  509.  
  510.     if(NOT TestBits((ULONG)g->SpecialFlags,NOSIGNAL)) {
  511.         if(TestBits(act,RELVERIFY))         SelectGadget(w,&RVY,NULL);
  512.         if(TestBits(act,GADGIMMEDIATE))     SelectGadget(w,&GIM,NULL);
  513.     }
  514.  
  515.     if(TestBits(act,RIGHTBORDER))       SelectGadget(w,&RB,NULL);
  516.     if(TestBits(act,LEFTBORDER))        SelectGadget(w,&LB,NULL);
  517.     if(TestBits(act,TOPBORDER))         SelectGadget(w,&TB,NULL);
  518.     if(TestBits(act,BOTTOMBORDER))      SelectGadget(w,&BB,NULL);
  519.     if(TestBits(act,ENDGADGET))         SelectGadget(w,&EG,NULL);
  520.     if(TestBits(act,FOLLOWMOUSE))       SelectGadget(w,&FM,NULL);
  521.  
  522.     if(TestBits(type,PROPGADGET)) {
  523.         SelectGadget(w,&PR,NULL);
  524.  
  525.         pinfo = (struct PropInfo *)gadget->SpecialInfo;
  526.         flags = (ULONG)pinfo->Flags;
  527.  
  528.         if(TestBits(flags,AUTOKNOB))       SelectGadget(w,&AK,NULL);
  529.         if(TestBits(flags,FREEHORIZ))      SelectGadget(w,&FH,NULL);
  530.         if(TestBits(flags,FREEVERT))       SelectGadget(w,&FV,NULL);
  531.         if(TestBits(flags,PROPBORDERLESS)) SelectGadget(w,&PB,NULL);
  532.         if(pinfo->HorizBody == MAXBODY) {
  533.             strcpy((char *)HBBuff,"0");
  534.             HBInfo.LongInt = 0;
  535.         } else {
  536.             StringFormat((char *)HBBuff,"%ld",MAXBODY / pinfo->HorizBody);
  537.             HBInfo.LongInt = MAXBODY / pinfo->HorizBody;
  538.         }
  539.         if(pinfo->VertBody == MAXBODY) {
  540.             strcpy((char *)VBBuff,"0");
  541.             VBInfo.LongInt = 0;
  542.         } else {
  543.             StringFormat((char *)VBBuff,"%ld",MAXBODY / pinfo->VertBody);
  544.             VBInfo.LongInt = MAXBODY / pinfo->VertBody;
  545.         }
  546.     } else if(TestBits(type,STRGADGET)) {
  547.         SelectGadget(w,&ST,NULL);
  548.         sinfo = (struct StringInfo *)gadget->SpecialInfo;
  549.  
  550.         if(sinfo->UndoBuffer)              SelectGadget(w,&UB,NULL);
  551.         if(TestBits(act,STRINGCENTER))     SelectGadget(w,&SC,NULL);
  552.         if(TestBits(act,STRINGRIGHT))      SelectGadget(w,&SR,NULL);
  553.         if(TestBits(act,LONGINT))          SelectGadget(w,&LI,NULL);
  554.         if(TestBits(act,ALTKEYMAP))        SelectGadget(w,&AM,NULL);
  555.  
  556.         StringFormat((char *)SZBuff,"%ld",sinfo->MaxChars);
  557.         SZInfo.LongInt = sinfo->MaxChars;
  558.     } else
  559.         SelectGadget(w,&BL,NULL);
  560.  
  561.     if(TestBits((ULONG)g->SpecialFlags,NOBORDER)) {
  562.         SelectGadget(w,&NB,NULL);
  563.         DeSelectGadget(w,&BO,NULL);
  564.         GadgetOff(w,&BO,NULL);
  565.         GadgetOff(w,&OS,NULL);
  566.     } else if(TestBits((ULONG)g->SpecialFlags,BORDERONLY)) {
  567.         SelectGadget(w,&BO,NULL);
  568.         DeSelectGadget(w,&NB,NULL);
  569.         GadgetOff(w,&NB,NULL);
  570.         GadgetOff(w,&SL,NULL);
  571.     }
  572.  
  573.     if(TestBits((ULONG)g->SpecialFlags,GZZGADGET))
  574.         SelectGadget(w,&GZ,NULL);
  575.     if(TestBits((ULONG)g->SpecialFlags,OS20BORDER)) {
  576.         SelectGadget(w,&OS,NULL);
  577.         GadgetOff(w,&NB,NULL);
  578.     }
  579.  
  580.     strcpy((char *)SLBuff,(char *)g->GadgetLabel);
  581.     RefreshGList(&HB,w,NULL,2);
  582.     RefreshGList(&SZ,w,NULL,1);
  583.     RefreshGList(&SL,w,NULL,1);
  584. }
  585.  
  586. /*
  587.  * check for border change.
  588.  */
  589. long BorderCk( void )
  590. {
  591.     ULONG   ot, os;
  592.  
  593.     os = (ULONG)old.SpecialFlags;
  594.     ot = (ULONG)old.Gadget.GadgetType;
  595.  
  596.     if( TestBits(os,OS20BORDER) AND (NOT SelectTest(&OS)))
  597.         return(TRUE);
  598.     else if( (NOT TestBits(os,OS20BORDER)) AND SelectTest(&OS))
  599.         return(TRUE);
  600.  
  601.     if( TestBits(os,NOBORDER) AND (NOT SelectTest(&NB)))
  602.         return(TRUE);
  603.     else if( (NOT TestBits(os,NOBORDER)) AND SelectTest(&NB))
  604.         return(TRUE);
  605.  
  606.     if( TestBits(ot,STRGADGET) AND (NOT SelectTest(&ST)))
  607.         return(TRUE);
  608.     else if( (NOT TestBits(ot,STRGADGET)) AND SelectTest(&ST))
  609.         return(TRUE);
  610.  
  611.     if( TestBits(os,BORDERONLY) AND (NOT SelectTest(&BO)))
  612.         return(TRUE);
  613.     else if( (NOT TestBits(os,BORDERONLY)) AND SelectTest(&BO))
  614.         return(TRUE);
  615.  
  616.     if(TestBits(ot,PROPGADGET) AND (NOT SelectTest(&PR)))
  617.         return(TRUE);
  618.  
  619.     return(FALSE);
  620. }
  621.  
  622. /*
  623.  * change the gadget according to the control window
  624.  */
  625. static BOOL change_gadget(gad)
  626.     struct MyGadget *gad;
  627. {
  628.     struct Border     *b = NULL, *b1 = NULL;
  629.     struct Image      *gi, *si;
  630.     struct StringInfo *s;
  631.     struct PropInfo   *p;
  632.     struct Gadget     *g;
  633.     UWORD              bfpen, i;
  634.     BOOL               image_render = FALSE, simage_render = FALSE, was_prop = FALSE, was_bo = FALSE, was_nb = FALSE;
  635.     ULONG              size;
  636.  
  637.     g = &gad->Gadget;
  638.  
  639.     if((TestBits(g->Flags,GADGIMAGE))) {
  640.         image_render = TRUE;
  641.         gi = (struct Image *)g->GadgetRender;
  642.     } else if(NOT(TestBits(g->GadgetType,PROPGADGET))) {
  643.         if(TestBits((ULONG)gad->SpecialFlags,OS20HIGHBORDER))
  644.             b1  = (struct Border *)g->SelectRender;
  645.         b = (struct Border *)g->GadgetRender;
  646.     }
  647.  
  648.     if((TestBits(g->Flags,GADGHIMAGE)) AND (NOT TestBits(g->Flags,GADGHBOX))) {
  649.         simage_render = TRUE;
  650.         si = (struct Image *)g->SelectRender;
  651.     }
  652.  
  653.     if(TestBits((ULONG)gad->SpecialFlags,BORDERONLY))
  654.         was_bo = TRUE;
  655.  
  656.     if(TestBits((ULONG)gad->SpecialFlags,NOBORDER))
  657.         was_nb = TRUE;
  658.  
  659.     if(TestBits(g->GadgetType,PROPGADGET)) {
  660.         was_prop = TRUE;
  661.         if(image_render == FALSE)
  662.             FreeItem(&Memory,g->GadgetRender,(long)sizeof(struct Image));
  663.         FreeItem(&Memory,g->SpecialInfo,(long)sizeof(struct PropInfo));
  664.     } else if(TestBits(g->GadgetType,STRGADGET)) {
  665.         s = (struct StringInfo *)g->SpecialInfo;
  666.         if(s->Buffer)     FreeItem(&Memory,s->Buffer,s->MaxChars);
  667.         if(s->UndoBuffer) FreeItem(&Memory,s->UndoBuffer,s->MaxChars);
  668.         FreeItem(&Memory,s,(long)sizeof(struct StringInfo));
  669.     }
  670.  
  671.     g->Flags = g->Activation = g->GadgetType = gad->SpecialFlags = NULL;
  672.     g->SpecialInfo = NULL;
  673.  
  674.     if(SelectTest(&GDHN))                 g->Flags = GADGHNONE;
  675.     else if(SelectTest(&GDHB))            g->Flags = GADGHBOX;
  676.     else if(SelectTest(&GDHC))            g->Flags = GADGHCOMP;
  677.     else                                  g->Flags = GADGHIMAGE;
  678.  
  679.     if(image_render == TRUE)              g->Flags |= GADGIMAGE;
  680.  
  681.     if(SelectTest(&GRB))                  g->Flags |= GRELBOTTOM;
  682.     if(SelectTest(&GRR))                  g->Flags |= GRELRIGHT;
  683.     if(SelectTest(&GRW))                  g->Flags |= GRELWIDTH;
  684.     if(SelectTest(&GRH))                  g->Flags |= GRELHEIGHT;
  685.     if(SelectTest(&SLC))                  g->Flags |= SELECTED;
  686.  
  687.     if(SelectTest(&GDD))                  gad->SpecialFlags |= GADGETOFF;
  688.  
  689.     if(SelectTest(&TGS))                  g->Activation |= TOGGLESELECT;
  690.     if(SelectTest(&RVY))                  g->Activation |= RELVERIFY;
  691.     if(SelectTest(&GIM))                  g->Activation |= GADGIMMEDIATE;
  692.     if(SelectTest(&RB))                   g->Activation |= RIGHTBORDER;
  693.     if(SelectTest(&LB))                   g->Activation |= LEFTBORDER;
  694.     if(SelectTest(&TB))                   g->Activation |= TOPBORDER;
  695.     if(SelectTest(&BB))                   g->Activation |= BOTTOMBORDER;
  696.     if(SelectTest(&EG))                   g->Activation |= ENDGADGET;
  697.     if(SelectTest(&FM))                   g->Activation |= FOLLOWMOUSE;
  698.  
  699.     if(SelectTest(&PR)) {
  700.         if(b)   RemUser(b);
  701.         if(b1)  RemUser(b1);
  702.         g->GadgetType    = PROPGADGET;
  703.         if(NOT(p = (struct PropInfo *)Alloc(&Memory,(ULONG)sizeof(struct PropInfo))))
  704.             goto memError;
  705.         if(NOT(TestBits(g->Flags,GADGIMAGE))) {
  706.             if(NOT(g->GadgetRender = Alloc(&Memory,(ULONG)sizeof(struct Image))))
  707.                 goto memError;
  708.         }
  709.         if(SelectTest(&AK))    p->Flags |= AUTOKNOB;
  710.         if(SelectTest(&FH))    p->Flags |= FREEHORIZ;
  711.         if(SelectTest(&FV))    p->Flags |= FREEVERT;
  712.         if(SelectTest(&PB))    p->Flags |= PROPBORDERLESS;
  713.         if(HBInfo.LongInt <= NULL) p->HorizBody = MAXBODY;
  714.         else p->HorizBody = MAXBODY / HBInfo.LongInt;
  715.         if(VBInfo.LongInt <= NULL) p->VertBody  = MAXBODY;
  716.         else p->VertBody  = MAXBODY / VBInfo.LongInt;
  717.         g->SpecialInfo = (APTR)p;
  718.     } else if(SelectTest(&ST)) {
  719.         g->GadgetType    = STRGADGET;
  720.         if(SelectTest(&SC))    g->Activation |= STRINGCENTER;
  721.         if(SelectTest(&SR))    g->Activation |= STRINGRIGHT;
  722.         if(SelectTest(&LI))    g->Activation |= LONGINT;
  723.         if(SelectTest(&AM))    g->Activation |= ALTKEYMAP;
  724.         if(NOT(s = (struct StringInfo *)Alloc(&Memory,(ULONG)sizeof(struct StringInfo))))
  725.             goto memError;
  726.         size = SZInfo.LongInt;
  727.         s->MaxChars = SZInfo.LongInt;
  728.         if(NOT(s->Buffer = (UBYTE *)Alloc(&Memory,size)))
  729.             goto memError;
  730.         if(SelectTest(&UB)) {
  731.             if(NOT(s->UndoBuffer = (UBYTE *)Alloc(&Memory,size)))
  732.                 goto memError;
  733.         }
  734.         g->SpecialInfo = (APTR)s;
  735.     } else g->GadgetType                          = BOOLGADGET;
  736.  
  737.     if(NOT TestBits((ULONG)g->GadgetType,PROPGADGET)) {
  738.         if(SelectTest(&NB)) gad->SpecialFlags      |= NOBORDER;
  739.         else if(SelectTest(&BO)) {
  740.             gad->SpecialFlags |= BORDERONLY;
  741.             if(prefs.os2_hborder)
  742.                 g->Flags &= ~GADGHIMAGE;
  743.         }
  744.         if(SelectTest(&OS)) gad->SpecialFlags      |= OS20BORDER;
  745.     }
  746.  
  747.     if(SelectTest(&GZ)) gad->SpecialFlags      |= GZZGADGET;
  748.  
  749.     if((!SelectTest(&GIM)) AND (!SelectTest(&RVY))) {
  750.         g->Activation     = RELVERIFY;
  751.         gad->SpecialFlags = NOSIGNAL;
  752.     }
  753.  
  754.     if(TestBits(g->Flags,GADGHIMAGE)) g->SelectRender = (APTR)si;
  755.     if(TestBits(g->Flags,GADGIMAGE))  g->GadgetRender = (APTR)gi;
  756.     else {
  757.         if(NOT(TestBits(g->GadgetType,PROPGADGET))) {
  758.             if(BorderCk()) {
  759.                 if(b)   RemUser(b);
  760.                 if(b1)  RemUser(b1);
  761.                 if(add_border(gad) == FALSE)
  762.                     goto memError;
  763.             } else if(prefs.os2_hborder AND SelectTest(&OS)) {
  764.                 g->Flags          |= GADGHIMAGE;
  765.                 gad->SpecialFlags |= OS20HIGHBORDER;
  766.             }
  767.         }
  768.     }
  769.  
  770.     for(i=0;i<strlen((char *)SLBuff);i++) {
  771.         if(SLBuff[i] == ' ') SLBuff[i] = '_';
  772.     }
  773.  
  774.     if((strncmp((char *)&SLBuff[0],"Gadget",6)) AND (strcmp((char *)&SLBuff[0],"BorderOnly")))
  775.         gad->SpecialFlags |= USERLABEL;
  776.  
  777.     strcpy((char *)&gad->GadgetLabel,(char *)SLBuff);
  778.     return(TRUE);
  779.  
  780. memError:
  781.     enable_window();
  782.     Error("Out of memory !");
  783.     disable_window();
  784.     return(FALSE);
  785. }
  786.  
  787. VOID label(gadget, on)
  788.     struct MyGadget *gadget;
  789.     BOOL             on;
  790. {
  791.     if(on) {
  792.         strcpy((char *)&gadget->GadgetLabel[0],(char *)&label_buffer[0]);
  793.         strcpy((char *)&SLBuff[0],(char *)&label_buffer[0]);
  794.         GadgetOn(w,&SL,NULL);
  795.     } else {
  796.         strcpy((char *)&gadget->GadgetLabel[0],"BorderOnly");
  797.         strcpy((char *)&SLBuff[0],"BorderOnly");
  798.         GadgetOff(w,&SL,NULL);
  799.     }
  800. }
  801.  
  802. VOID do_typing(gad,g)
  803.     struct MyGadget *gad;
  804.     struct Gadget   *g;
  805. {
  806.     MutualExclude(w,g,&BL,NULL);
  807.  
  808.     if(SelectTest(&PR)) {
  809.         DeSelectGadget(w,&OS,NULL); GadgetOff(w,&OS,NULL);
  810.         DeSelectGadget(w,&NB,NULL); GadgetOff(w,&NB,NULL);
  811.         DeSelectGadget(w,&BO,NULL); GadgetOff(w,&BO,NULL);
  812.         if((SelectTest(&OS)) OR prefs.os2_hborder) {
  813.             OnGList(w,&GDHN,NULL,3);
  814.             SelectGadget(w,&GDHC,NULL);
  815.         }
  816.         label(gad,TRUE);
  817.     } else if(SelectTest(&ST)) {
  818.         DeSelectGadget(w,&BO,NULL); GadgetOff(w,&BO,NULL);
  819.         GadgetOn(w,&NB,NULL);
  820.         GadgetOn(w,&OS,NULL);
  821.         if((SelectTest(&OS)) AND prefs.os2_hborder) {
  822.             OffGList(w,&GDHN,NULL,3);
  823.             DeSelectGList(w,&GDHN,NULL,3);
  824.         }
  825.         label(gad,TRUE);
  826.     } else if(SelectTest(&BL)) {
  827.         GadgetOn(w,&OS,NULL);
  828.         GadgetOn(w,&NB,NULL);
  829.         GadgetOn(w,&BO,NULL);
  830.         if((SelectTest(&OS)) AND prefs.os2_hborder) {
  831.             OffGList(w,&GDHN,NULL,3);
  832.             DeSelectGList(w,&GDHN,NULL,3);
  833.         }
  834.     }
  835. }
  836.  
  837. /*
  838.  * open the gadget editor control display
  839.  */
  840. BOOL edit_gadget(gadget)
  841.     struct MyGadget *gadget;
  842. {
  843.     struct Gadget *g;
  844.  
  845.     buisy();
  846.     ns.TopEdge = IntuitionBase->ActiveScreen->Height - 132;
  847.  
  848.     if(SysBase->lib_Version >= 36)
  849.         ns.Type |= Extended;
  850.  
  851.     if(NOT(s = OpenScreen(&ns)))
  852.         goto dispError;
  853.  
  854.     clear_gadgets();
  855.     nw.Screen = s;
  856.  
  857.     if(NOT(w = OpenWindow(&nw))) {
  858.         CloseScreen(s);
  859.         goto dispError;
  860.     }
  861.  
  862.     ScreenToFront(s);
  863.     rp = w->RPort;
  864.     LoadRGB4(&s->ViewPort,&my_colors[0],4);
  865.     backfill();
  866.     AddGList(w,&GDHN,-1L,-1L,NULL);
  867.     RefreshGList(&GDHN,w,NULL,-1L);
  868.     set_gadgets(gadget);
  869.  
  870.     do {
  871.         Wait(1 << w->UserPort->mp_SigBit);
  872.         while((msg = (struct IntuiMessage *)GetMsg(w->UserPort))) {
  873.             g  = (struct Gadget *)msg->IAddress;
  874.             id = g->GadgetID;
  875.             ReplyMsg((struct Message *)msg);
  876.             switch(id) {
  877.                 case 0:
  878.                 case 1:
  879.                 case 2:  MutualExclude(w,g,&GDHN,NULL);
  880.                          SelectGadget(w,g,NULL);
  881.                          break;
  882.                 case 31: if(NOT TestBits(gadget->Gadget.Flags,GADGIMAGE))
  883.                              SelectGadget(w,&AK,NULL);
  884.                 case 32:
  885.                 case 30: SelectGadget(w,g,NULL);
  886.                          do_typing(gadget,g);
  887.                          break;
  888.                 case 18: if(SelectTest(&PR))
  889.                              SelectGadget(w,g,NULL);
  890.                          break;
  891.                 case 25:
  892.                 case 26: MutualExclude(w,g,&SC,NULL);
  893.                          break;
  894.                 case 36: if(SelectTest(g)) {
  895.                              DeSelectGadget(w,&NB,NULL);
  896.                              GadgetOff(w,&NB,NULL);
  897.                              label(gadget,FALSE);
  898.                          } else {
  899.                              if(TestBits((ULONG)gadget->SpecialFlags,BORDERONLY)) {
  900.                                  gadget->SpecialFlags ^= BORDERONLY;
  901.                                  renumber();
  902.                                  strcpy((char *)&label_buffer[0],(char *)&gadget->GadgetLabel[0]);
  903.                                  gadget->SpecialFlags |= BORDERONLY;
  904.                                  renumber();
  905.                               } else renumber();
  906.                               label(gadget,TRUE);
  907.                               GadgetOn(w,&NB,NULL);
  908.                          }
  909.                          break;
  910.                 case 38: if(SelectTest(g)) {
  911.                              DeSelectGadget(w,&BO,NULL);
  912.                              DeSelectGadget(w,&OS,NULL);
  913.                              GadgetOff(w,&BO,NULL);
  914.                              GadgetOff(w,&OS,NULL);
  915.                          } else {
  916.                              GadgetOn(w,&BO,NULL);
  917.                              GadgetOn(w,&OS,NULL);
  918.                          }
  919.                          break;
  920.                 case 39: if(SelectTest(g)) {
  921.                              if(prefs.os2_hborder) {
  922.                                  DeSelectGList(w,&GDHN,NULL,3);
  923.                                  OffGList(w,&GDHN,NULL,3);
  924.                              }
  925.                              DeSelectGadget(w,&NB,NULL);
  926.                              GadgetOff(w,&NB,NULL);
  927.                          } else {
  928.                              if(prefs.os2_hborder) {
  929.                                  OnGList(w,&GDHN,NULL,3);
  930.                                  SelectGadget(w,&GDHC,NULL);
  931.                              }
  932.                              GadgetOn(w,&NB,NULL);
  933.                          }
  934.                          break;
  935.                 case 33: strcpy((char *)&label_buffer[0],(char *)&SLBuff[0]);
  936.                          break;
  937.                 default: break;
  938.             }
  939.         }
  940.     } while(id != 34 && id != 35);
  941.     CloseWindow(w);
  942.     CloseScreen(s);
  943.     ok();
  944.     renumber();
  945.  
  946.     if(id == 34) return(change_gadget(gadget));
  947.     return(TRUE);
  948.  
  949. dispError:
  950.     enable_window();
  951.     Error("Can't open display !");
  952.     disable_window();
  953.     return(FALSE);
  954. }
  955.