home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / alib / d9xx / d911 / gadoutline.lha / GadOutline / Examples / example2.c < prev    next >
C/C++ Source or Header  |  1993-10-03  |  24KB  |  740 lines

  1.  
  2. #include <graphics/gfxmacros.h>
  3. #include <proto/graphics.h>
  4. #include <proto/gadtools.h>
  5. #include <proto/exec.h>
  6. #include <proto/dos.h>
  7. #include <proto/intuition.h>
  8. #include <proto/utility.h>
  9. #include <proto/asl.h>
  10. #include <stdlib.h>
  11. #include <string.h>
  12.  
  13. #ifndef LINKLIB
  14.     #include "proto/gadoutline.h"
  15. #else
  16.     #include "libraries/gadoutline.h"
  17.     #include "interface.h"
  18. #endif
  19.  
  20. #ifdef DEBUGMODULE
  21.     
  22.     #include "support/debug.h"
  23.  
  24. #else
  25.  
  26.     void __stdargs kprintf(UBYTE *fmt,...);  // Serial debugging...
  27.     void __stdargs dprintf(UBYTE *fmt,...);  // Parallel debugging...
  28.  
  29.     #ifndef bug
  30.     #define bug Printf
  31.     #endif
  32.  
  33.     #ifndef DEBTIME
  34.     #define DEBTIME 0
  35.     #endif
  36.  
  37.     #ifdef DEBUG
  38.     #define D(x) (x); if(DEBTIME>0) Delay(DEBTIME);
  39.     #else
  40.     #define D(x) ;
  41.     #endif
  42.  
  43. #endif
  44.  
  45. enum {
  46.     CURSCRN_ID = 1,
  47.     SCRNMODE_ID,
  48.  
  49.     SCRNSTR_ID,
  50.     MODESTR_ID,
  51.  
  52.     SCRNPAL_ID,
  53.     PALRED_ID,
  54.     PALREDKEY_ID,
  55.     PALGREEN_ID,
  56.     PALGREENKEY_ID,
  57.     PALBLUE_ID,
  58.     PALBLUEKEY_ID,
  59.  
  60.     TITLE_ID,
  61.     SETFONT_ID,
  62.     FONTNAME_ID,
  63.     FONTSIZE_ID,
  64.  
  65.     OVERSCAN_ID,
  66.  
  67.     PENPAL_ID,
  68.     CURPEN_ID,
  69.     CURPENKEY_ID,
  70.  
  71.     RESETSCRN_ID,
  72.     UPDATESCRNS_ID,
  73.     MAKESCRN_ID,
  74.     CLOSESCRN_ID,
  75.     
  76.     BOOPSIGAD_ID,
  77.     DRAWIMG_ID,
  78.     DODISABLE_ID
  79. };
  80.  
  81. #define STRING_LEN 100
  82.  
  83. UBYTE *PenLabels[] = {
  84.     "Detail", "Block", "Text", "Shine", "Shadow", "Fill", "FillText",
  85.     "Backgrnd", "Highlight", NULL
  86. };
  87.  
  88. struct TagItem palette_tags[] =
  89. {
  90.     { GTPA_Color, 0 },
  91.     { GTPA_Depth, 2 },
  92.     { TAG_END, 0 }
  93. };
  94.  
  95. /*********************************************
  96.  **
  97.  ** Main window gadget outline
  98.  **
  99.  *********************************************/
  100.  
  101. static ULONG outline[] = {
  102.  
  103. GO_COMMANDTAGS(0,0),
  104. TAG_END,
  105. GOCT_SetHotKey, 0,
  106. TAG_END,
  107.  
  108. GO_VERTGRP(0,0,1), TAG_END,
  109.  
  110.     GO_HORIZGRP(0,0,1), TAG_END,
  111.  
  112.         GO_VERTGRP(0,0,1), TAG_END,
  113.         
  114.             GO_GTBOX(LISTVIEW_KIND, 0, CURSCRN_ID, 1, (ULONG)&"P_ublic Screens",
  115.                 PLACETEXT_ABOVE|NG_HIGHLABEL),
  116.             GOCT_SizeBodyWidth, GO_TSIZE(GOM_StdMax,1000,GOT_PercCharW),
  117.             GOCT_SizeBodyHeight, GO_TSIZE(GOM_StdMax,300,GOT_PercCharH),
  118.             GOCT_AddTagLink, GO_MAKELINK(GTLV_ShowSelected,SCRNSTR_ID),
  119.             TAG_END,
  120.             GTLV_Selected, ~0,
  121.             GTLV_Labels, NULL,
  122.             GTLV_ShowSelected, NULL,
  123.             GT_Underscore, '_',
  124.             TAG_END,
  125.  
  126.             GO_GTBOX(STRING_KIND, 0, SCRNSTR_ID, 0, NULL, 0),
  127.             GOCT_IgnoreMinDimens, TRUE, GOCT_IgnoreFinDimens, TRUE,
  128.             TAG_END,
  129.             GTST_MaxChars, STRING_LEN,
  130.             GTST_String, (ULONG)&"",
  131.             GT_Underscore, '_',
  132.             TAG_END,
  133.  
  134.         GO_ENDGRP(),
  135.  
  136.         GO_VERTGRP(0,0,1), TAG_END,
  137.         
  138.             GO_GTBOX(LISTVIEW_KIND, 0, SCRNMODE_ID, 1, (ULONG)&"Screen _Modes",
  139.                 PLACETEXT_ABOVE|NG_HIGHLABEL),
  140.             GOCT_SizeBodyWidth, GO_TSIZE(GOM_StdMax,1000,GOT_PercCharW),
  141.             GOCT_SizeBodyHeight, GO_TSIZE(GOM_StdMax,300,GOT_PercCharH),
  142.             GOCT_LinkFromTag, GTLV_ShowSelected, GOCT_LinkToStdID, MODESTR_ID,
  143.             TAG_END,
  144.             GTLV_Selected, ~0,
  145.             GTLV_Labels, NULL,
  146.             GTLV_ShowSelected, NULL,
  147.             GT_Underscore, '_',
  148.             TAG_END,
  149.  
  150.             GO_GTBOX(STRING_KIND, 0, MODESTR_ID, 0, NULL, 0),
  151.             GOCT_IgnoreMinDimens, TRUE, GOCT_IgnoreFinDimens, TRUE,
  152.             TAG_END,
  153.             GTST_MaxChars, STRING_LEN,
  154.             GTST_String, (ULONG)&"",
  155.             GT_Underscore, '_',
  156.             TAG_END,
  157.  
  158.         GO_ENDGRP(),
  159.  
  160.         GO_VERTGRP(0,0,0), TAG_END,
  161.         
  162.             GO_GTBOX(PALETTE_KIND, 0, SCRNPAL_ID, 1, (ULONG)&"_Palette",
  163.                 PLACETEXT_ABOVE|NG_HIGHLABEL),
  164.             GOCT_SizeBodyWidth, GO_TSIZE(GOM_StdMax,600,GOT_PercCharW),
  165.             GOCT_SizeBodyHeight, GO_TSIZE(GOM_StdMax,200,GOT_PercCharH),
  166.             GOCT_CopyFromTSize, GO_TSIZE(GOM_StdSet,15,GOT_Pixels),
  167.             GOCT_CopyTSizeToTag, GTPA_IndicatorHeight,
  168.             GOCT_SizeUser1, GO_TSIZE(GOM_VarSet,20,GOT_PercBodyH),
  169.             GOCT_SizeUser1, GO_TSIZE(GOM_VarMin,250,GOT_PercCharH),
  170.             GOCT_SizeUser1, GO_TSIZE(GOM_VarMax,6,GOT_Pixels),
  171.             GOCT_CopyUser1ToTag, GTPA_IndicatorHeight,
  172.             TAG_END,
  173.             GTPA_IndicatorHeight, 15,
  174.             GT_Underscore, '_',
  175.             TAG_MORE, (ULONG)&palette_tags[0],
  176.             TAG_END,
  177.  
  178.             GO_HORIZGRP(0,0,0), TAG_END,
  179.  
  180.                 GO_GTBOX(SLIDER_KIND, 0, PALRED_ID, 1, NULL, 0),
  181.                 GOCT_SizeSpaceRight, GO_TSIZE(GOM_AllSet,0,GOT_Pixels),
  182.                 TAG_END,
  183.                 GA_RelVerify, TRUE, GA_Immediate, TRUE,
  184.                 PGA_FREEDOM, LORIENT_HORIZ,
  185.                 GTSL_Min, 0, GTSL_Max, 15,
  186.                 GTSL_Level, 0, GTSL_LevelFormat, (ULONG)&"%02ld",
  187.                 GTSL_LevelPlace, PLACETEXT_LEFT, GTSL_MaxLevelLen, 2,
  188.                 GT_Underscore, '_',
  189.                 TAG_END,
  190.  
  191.                 GO_GTBOX(TEXT_KIND, 0, PALREDKEY_ID, 0, (ULONG)&"_R",
  192.                     PLACETEXT_IN|NG_HIGHLABEL),
  193.                 GOCT_SizeSpaceLeft, GO_TSIZE(GOM_AllSet,0,GOT_Pixels),
  194.                 GOCT_SetHotKeyCmd, PALRED_ID,
  195.                 TAG_END,
  196.                 GTTX_Border, TRUE, // GTTX_Text, GTTX_CopyText
  197.                 GT_Underscore, '_',
  198.                 TAG_END,
  199.  
  200.             GO_ENDGRP(),
  201.  
  202.             GO_HORIZGRP(0,0,0), TAG_END,
  203.             
  204.                 GO_GTBOX(SLIDER_KIND, 0, PALGREEN_ID, 1, NULL, 0),
  205.                 GOCT_SizeSpaceRight, GO_TSIZE(GOM_AllSet,0,GOT_Pixels),
  206.                 TAG_END,
  207.                 GA_RelVerify, TRUE, GA_Immediate, TRUE,
  208.                 PGA_FREEDOM, LORIENT_HORIZ,
  209.                 GTSL_Min, 0, GTSL_Max, 15,
  210.                 GTSL_Level, 0, GTSL_LevelFormat, (ULONG)&"%02ld",
  211.                 GTSL_LevelPlace, PLACETEXT_LEFT, GTSL_MaxLevelLen, 2,
  212.                 GT_Underscore, '_',
  213.                 TAG_END,
  214.  
  215.                 GO_GTBOX(TEXT_KIND, 0, PALGREENKEY_ID, 0, (ULONG)&"_G",
  216.                     PLACETEXT_IN|NG_HIGHLABEL),
  217.                 GOCT_SizeSpaceLeft, GO_TSIZE(GOM_AllSet,0,GOT_Pixels),
  218.                 GOCT_SetHotKeyCmd, PALGREEN_ID,
  219.                 TAG_END,
  220.                 GTTX_Border, TRUE, // GTTX_Text, GTTX_CopyText
  221.                 GT_Underscore, '_',
  222.                 TAG_END,
  223.  
  224.             GO_ENDGRP(),
  225.  
  226.             GO_HORIZGRP(0,0,0), TAG_END,
  227.             
  228.                 GO_GTBOX(SLIDER_KIND, 0, PALBLUE_ID, 1, NULL, 0),
  229.                 GOCT_SizeSpaceRight, GO_TSIZE(GOM_AllSet,0,GOT_Pixels),
  230.                 TAG_END,
  231.                 GA_RelVerify, TRUE, GA_Immediate, TRUE,
  232.                 PGA_FREEDOM, LORIENT_HORIZ,
  233.                 GTSL_Min, 0, GTSL_Max, 15,
  234.                 GTSL_Level, 0, GTSL_LevelFormat, (ULONG)&"%02ld",
  235.                 GTSL_LevelPlace, PLACETEXT_LEFT, GTSL_MaxLevelLen, 2,
  236.                 GT_Underscore, '_',
  237.                 TAG_END,
  238.  
  239.                 GO_GTBOX(TEXT_KIND, 0, PALBLUEKEY_ID, 0, (ULONG)&"_B",
  240.                     PLACETEXT_IN|NG_HIGHLABEL),
  241.                 GOCT_SizeSpaceLeft, GO_TSIZE(GOM_AllSet,0,GOT_Pixels),
  242.                 GOCT_SetHotKeyCmd, PALBLUE_ID,
  243.                 TAG_END,
  244.                 GTTX_Border, TRUE, // GTTX_Text, GTTX_CopyText
  245.                 GT_Underscore, '_',
  246.                 TAG_END,
  247.  
  248.             GO_ENDGRP(),
  249.  
  250.         GO_ENDGRP(),
  251.  
  252.     GO_ENDGRP(),
  253.  
  254.     GO_HORIZGRP(0,0,0), TAG_END,
  255.  
  256.         GO_GTBOX(STRING_KIND, 0, TITLE_ID, 1, (ULONG)&"_Title",
  257.             PLACETEXT_LEFT|NG_HIGHLABEL),
  258.         GOCT_SizeBodyWidth, GO_TSIZE(GOM_StdMax,1000,GOT_PercCharW),
  259.         TAG_END,
  260.         GTST_MaxChars, 100, GTST_String, (ULONG)&"",
  261.         GT_Underscore, '_',
  262.         TAG_END,
  263.  
  264.     GO_ENDGRP(),
  265.  
  266.     GO_HORIZGRP(0,0,0), TAG_END,
  267.  
  268.         GO_GTBOX(BUTTON_KIND, 0, SETFONT_ID, 0, (ULONG)&"S_et", PLACETEXT_IN),
  269.         TAG_END,
  270.         GT_Underscore, '_',
  271.         TAG_END,
  272.  
  273.         GO_GTBOX(STRING_KIND, 0, FONTNAME_ID, 1, (ULONG)&"_Font", PLACETEXT_LEFT|NG_HIGHLABEL),
  274.         GOCT_SizeBodyWidth, GO_TSIZE(GOM_StdMax,300,GOT_PercCharW),
  275.         TAG_END,
  276.         GTST_MaxChars, 100, GTST_String, (ULONG)&"",
  277.         GT_Underscore, '_',
  278.         TAG_END,
  279.  
  280.         GO_GTBOX(INTEGER_KIND, 0, FONTSIZE_ID, 0, (ULONG)&"_Size", PLACETEXT_LEFT|NG_HIGHLABEL),
  281.         GOCT_SizeBodyWidth, GO_TSIZE(GOM_StdMax,400,GOT_PercCharW),
  282.         TAG_END,
  283.         GTIN_MaxChars, 3, GTIN_Number, 0,
  284.         GT_Underscore, '_',
  285.         TAG_END,
  286.  
  287.     GO_ENDGRP(),
  288.  
  289.     GO_HORIZGRP(0,0,0), TAG_END,
  290.  
  291.         GO_VERTGRP(0,0,0), TAG_END,
  292.         
  293.             GO_GTBOX(TEXT_KIND, 0, CURPENKEY_ID, 0, (ULONG)&"Screen _Drawing Pens",
  294.                 PLACETEXT_IN|NG_HIGHLABEL),
  295.             GOCT_SetHotKeyCmd, CURPEN_ID,
  296.             TAG_END,
  297.             GT_Underscore, '_',
  298.             TAG_END,
  299.  
  300.             GO_HORIZGRP(0,0,0), TAG_END,
  301.         
  302.                 GO_GTBOX(MX_KIND, 0, CURPEN_ID, 0, NULL, PLACETEXT_LEFT),
  303.                 TAG_END,
  304.                 GA_Immediate, TRUE,
  305.                 GTMX_Labels, (ULONG)&PenLabels[0],
  306.                 GTMX_Active, 0,
  307.                 GT_Underscore, '_',
  308.                 TAG_END,
  309.  
  310.                 GO_GTBOX(PALETTE_KIND, 0, PENPAL_ID, 1, NULL, 0),
  311.                 GOCT_SizeBodyWidth, GO_TSIZE(GOM_StdSet,500,GOT_PercCharW),
  312.                 GOCT_CopyFromTSize, GO_TSIZE(GOM_StdSet,15,GOT_Pixels),
  313.                 GOCT_CopyTSizeToTag, GTPA_IndicatorHeight,
  314.                 GOCT_SizeUser1, GO_TSIZE(GOM_VarSet,20,GOT_PercBodyH),
  315.                 GOCT_SizeUser1, GO_TSIZE(GOM_VarMin,250,GOT_PercCharH),
  316.                 GOCT_SizeUser1, GO_TSIZE(GOM_VarMax,6,GOT_Pixels),
  317.                 GOCT_CopyUser1ToTag, GTPA_IndicatorHeight,
  318.                 GOCT_SetHotKey, 'w',
  319.                 TAG_END,
  320.                 GTPA_IndicatorHeight, 15,
  321.                 GT_Underscore, '_',
  322.                 TAG_MORE, (ULONG)&palette_tags[0],
  323.                 TAG_END,
  324.  
  325.             GO_ENDGRP(),
  326.             
  327.         GO_ENDGRP(),
  328.  
  329.         GO_VERTGRP(0,0,1), TAG_END,
  330.         
  331.             GO_HORIZGRP(0,0,1), TAG_END,
  332.             
  333.                 GO_DRAWBOX(GOSD_Button,0,0,1), TAG_END,
  334.                     
  335.                     GODT_FillRect, GO_SCLPNT(BACKGROUNDPEN,0,0,63,63),
  336.                     
  337.                     GODT_MoveTo, GO_SCLPNT(0,0,0,0,0),
  338.                     GODT_DrawTo, GO_SCLPNT(FILLPEN,63,0,0,0),
  339.                     GODT_DrawTo2, GO_SCLPNT(SHINEPEN,63,63,0,63),
  340.                     GODT_DrawTo, GO_SCLPNT(FILLPEN,0,0,0,0),
  341.                     GODT_DrawLine, GO_SCLPNT(SHINEPEN,0,0,63,63),
  342.                     GODT_DrawLine, GO_SCLPNT(FILLPEN,0,63,63,0),
  343.                     
  344.                     GODT_SetOrigin, GO_SCLPNT(0,10,10,53,53),
  345.                     GODT_MoveTo, GO_PIXPNT(0,PX2(0),PY1(0),0,0),
  346.                     GODT_DrawTo2, GO_PIXPNT(SHINEPEN,PX1(0),PY1(0),PX1(0),PY2(0)),
  347.                     GODT_DrawLine, GO_PIXPNT(SHINEPEN,PX1(1),PY1(1),PX1(1),PY2(0)),
  348.                     GODT_MoveTo, GO_PIXPNT(0,PX2(0),PY1(0),0,0),
  349.                     GODT_DrawTo2, GO_PIXPNT(SHADOWPEN,PX2(0),PY2(0),PX1(1),PY2(0)),
  350.                     GODT_DrawLine, GO_PIXPNT(SHADOWPEN,PX2(-1),PY2(0),PX2(-1),PY1(1)),
  351.     
  352.                     GODT_SetOrigin, GO_SCLPNT(0,20,20,43,43),
  353.                     GODT_DrawRect, GO_PIXPNT(SHADOWPEN,PX1(2),PY1(2),PX2(2),PY2(2)),
  354.                     GODT_DrawRect, GO_PIXPNT(FILLPEN,PX1(1),PY1(1),PX2(1),PY2(1)),
  355.                     GODT_DrawRect, GO_PIXPNT(SHINEPEN,PX1(0),PY1(0),PX2(0),PY2(0)),
  356.                     
  357.                     GODT_ResetBounds, GO_FRMBOUNDS(1,1,1,1, 5,5,5,5),
  358.                     GODT_FillRect, GO_SCLPNT(SHADOWPEN,0,0,63,31),
  359.                     GODT_FillRect, GO_SCLPNT(SHADOWPEN,0,0,31,63),
  360.                     GODT_FillRect, GO_SCLPNT(SHADOWPEN,32,0,63,63),
  361.                     GODT_FillRect, GO_SCLPNT(SHADOWPEN,0,32,63,63),
  362.                     TAG_END,
  363.             
  364.                 GO_DRAWIMAGE(GOSD_BoopsiIm,0,DRAWIMG_ID),
  365.  
  366.                     GOCT_SetBodyLeft, GO_TSIZE(GOM_Set,0,GOT_Pixels),
  367.                     GOCT_SetBodyTop, GO_TSIZE(GOM_Set,0,GOT_Pixels),
  368.                     GOCT_SetBodyWidth, GO_BSIZE(GOM_Set,BOOPSIGAD_ID,GOTB_BodyWidth),
  369.                     GOCT_SetBodyHeight, GO_BSIZE(GOM_Set,BOOPSIGAD_ID,GOTB_BodyHeight),
  370.                     TAG_END,
  371.                     
  372.                     GODT_FillRect, GO_SCLPNT(BACKGROUNDPEN,0,0,63,63),
  373.  
  374.                     GODT_MoveTo, GO_SCLPNT(0,0,0,0,0),
  375.                     GODT_DrawTo, GO_SCLPNT(FILLPEN,63,0,0,0),
  376.                     GODT_DrawTo2, GO_SCLPNT(SHINEPEN,63,63,0,63),
  377.                     GODT_DrawTo, GO_SCLPNT(FILLPEN,0,0,0,0),
  378.                     GODT_DrawLine, GO_SCLPNT(SHINEPEN,0,0,63,63),
  379.                     GODT_DrawLine, GO_SCLPNT(FILLPEN,0,63,63,0),
  380.                     
  381.                     GODT_SetOrigin, GO_SCLPNT(0,10,10,53,53),
  382.                     GODT_MoveTo, GO_PIXPNT(0,PX2(0),PY1(0),0,0),
  383.                     GODT_DrawTo2, GO_PIXPNT(SHINEPEN,PX1(0),PY1(0),PX1(0),PY2(0)),
  384.                     GODT_DrawLine, GO_PIXPNT(SHINEPEN,PX1(1),PY1(1),PX1(1),PY2(0)),
  385.                     GODT_MoveTo, GO_PIXPNT(0,PX2(0),PY1(0),0,0),
  386.                     GODT_DrawTo2, GO_PIXPNT(SHADOWPEN,PX2(0),PY2(0),PX1(1),PY2(0)),
  387.                     GODT_DrawLine, GO_PIXPNT(SHADOWPEN,PX2(-1),PY2(0),PX2(-1),PY1(1)),
  388.     
  389.                     GODT_SetOrigin, GO_SCLPNT(0,20,20,43,43),
  390.                     GODT_DrawRect, GO_PIXPNT(SHADOWPEN,PX1(2),PY1(2),PX2(2),PY2(2)),
  391.                     GODT_DrawRect, GO_PIXPNT(FILLPEN,PX1(1),PY1(1),PX2(1),PY2(1)),
  392.                     GODT_DrawRect, GO_PIXPNT(SHINEPEN,PX1(0),PY1(0),PX2(0),PY2(0)),
  393.                     TAG_END,
  394.                 
  395.                 GO_BOOPSIBOX(GOSB_AddGad,0,BOOPSIGAD_ID,1,(ULONG)&"buttongclass",NULL),
  396.                 GOCT_LinkFromTag, GA_Image, GOCT_LinkToStdID, DRAWIMG_ID,
  397.                 TAG_END,
  398.                 GA_Image, NULL,
  399.                 GA_RelVerify, TRUE,
  400.                 GA_Disabled, FALSE,
  401.                 TAG_END,
  402.                     
  403.             GO_ENDGRP(),
  404.  
  405.             GO_HORIZGRP(0,0,1), TAG_END,
  406.             
  407.                 GO_DRAWBOX(GOSD_BoopsiGad,0,DODISABLE_ID,1), TAG_END,
  408.                     
  409.                     GODT_SetCustFillPat2, 0x5555AAAA,
  410.                     GODT_ChooseBPen, SHADOWPEN,
  411.                     GODT_SetRastMode, FLGALL(JAM2),
  412.                     GODT_FillEllipse, GO_SCLPNT(BACKGROUNDPEN,0,0,63,63),
  413.                     GODT_DrawEllipse, GO_SCLPNT(SHINEPEN,20,20,43,43),
  414.     
  415.                     GODT_MoveTo, GO_SCLPNT(0,0,0,0,0),
  416.                     GODT_SetRastMode, FLGALL(JAM2 | INVERSVID),
  417.                     GODT_SetTextMode,
  418.                         FLGALL(TXTMD_LEFT | TXTMD_ENDRIGHT | TXTMD_RELTOP),
  419.                     GODT_DrawStdText, (ULONG)&"This is a single really really long test...",
  420.                     GODT_NewLine, 1,
  421.     
  422.                     GODT_SetRastMode, FLGALL(JAM2),
  423.                     GODT_DrawFillText, (ULONG)&"This is a double line really really really",
  424.                     GODT_NewLine, 1,
  425.                     GODT_DrawOldText, (ULONG)&"really really REALLY ___R_E_A_L_L_Y___ LONG TEST!!",
  426.     
  427.                     GODT_SetRastMode, FLGALL(JAM1),
  428.                     GODT_MoveTo, GO_SCLPNT(0,32,63,0,0),
  429.                     GODT_SetTextMode,
  430.                         FLGALL(TXTMD_RIGHT | TXTMD_ENDRIGHT | TXTMD_CHOPLEFT | TXTMD_RELBOTTOM),
  431.                     GODT_DrawHighText, (ULONG)&"A long kind of label text: ",
  432.                     GODT_SetRastMode, FLGALL(JAM2),
  433.                     GODT_SetTextMode, SETMD_X(TXTMD_LEFT) | FLGOFF(TXTMD_CHOPLEFT),
  434.                     GODT_DrawStdText, (ULONG)&"And long body to go with it.",
  435.                     TAG_END,
  436.                 
  437.             GO_ENDGRP(),
  438.             
  439.         GO_ENDGRP(),
  440.  
  441.     GO_ENDGRP(),
  442.  
  443.     GO_HORIZGRP(0,0,0), GOCT_EvenDistGroup, TRUE, TAG_END,
  444.  
  445.         GO_GTBOX(BUTTON_KIND, 0, RESETSCRN_ID, 1, (ULONG)&"Reset Scree_n",
  446.             PLACETEXT_IN),
  447.         TAG_END,
  448.         GT_Underscore, '_',
  449.         TAG_END,
  450.  
  451.         GO_GTBOX(BUTTON_KIND, 0, UPDATESCRNS_ID, 1, (ULONG)&"SMA_LL!!!!!!",
  452.             PLACETEXT_IN),
  453.         TAG_END,
  454.         GT_Underscore, '_',
  455.         TAG_END,
  456.  
  457.         GO_GTBOX(BUTTON_KIND, 0, MAKESCRN_ID, 1, (ULONG)&"big",
  458.             PLACETEXT_IN),
  459.         TAG_END,
  460.         GT_Underscore, '_',
  461.         TAG_END,
  462.  
  463.         GO_GTBOX(BUTTON_KIND, 0, CLOSESCRN_ID, 1, (ULONG)&"_Close Screen",
  464.             PLACETEXT_IN),
  465.         TAG_END,
  466.         GT_Underscore, '_',
  467.         TAG_END,
  468.  
  469.     GO_ENDGRP(),
  470.  
  471. GO_ENDGRP(),
  472. GO_ENDOUTLINE()
  473. };
  474.  
  475. /*********************************************
  476.  **
  477.  ** Program environment
  478.  **
  479.  *********************************************/
  480.  
  481. static struct Process *me = NULL;
  482. static struct Window *oldwin = NULL;   /* what me->pr_WindowPtr previously was */
  483.  
  484. /*********************************************
  485.  **
  486.  ** Current program state
  487.  **
  488.  *********************************************/
  489.  
  490. static struct GadOutline *gad_outline = NULL;
  491. static struct FontRequester *fr = NULL;
  492. static UBYTE *go_error;        /* Where error results are returned */
  493. static struct List scrn_list, mode_list;
  494.  
  495. /*********************************************
  496.  **
  497.  ** All library bases
  498.  **
  499.  *********************************************/
  500.  
  501. #define MIN_VERSION     37L      /* minimum version number for our libs */
  502.  
  503. long __oslibversion = MIN_VERSION;
  504.  
  505. #ifndef LINKLIB
  506. struct Library *GadOutlineBase = NULL;
  507. #endif
  508.  
  509. static void quit(UBYTE *err);
  510. static void closedisplay(void);
  511. static void closedown(void);
  512. static void opendisplay(struct GadOutline *go);
  513. static void handledisplay(struct GadOutline *go);
  514.  
  515. /*********************************************
  516.  **
  517.  ** Routines for a clean exit, with optional error display
  518.  **
  519.  *********************************************/
  520.  
  521. static struct EasyStruct error_es = {
  522.     sizeof(struct EasyStruct), 0,
  523.     "GadOutline Example2 Requester",
  524.     "Problem during startup:\n%ls",
  525.     "Quit"
  526. };
  527.  
  528. static void quit(UBYTE *err)
  529. {
  530.     closedown();
  531.  
  532.     if(err == NULL) err = go_error;
  533.     if(err != NULL) (void)EasyRequest(NULL,&error_es, NULL, err);
  534.  
  535.     _exit(0);
  536. }
  537.  
  538. static void closedown(void)
  539. {
  540.     closedisplay();
  541.  
  542.     if(gad_outline) FreeGadOutline(gad_outline);
  543.     if(fr) FreeAslRequest(fr);
  544.     if(me) me->pr_WindowPtr = (APTR)oldwin;
  545.     #ifndef LINKLIB
  546.     if(GadOutlineBase) CloseLibrary(GadOutlineBase);
  547.     #endif
  548. }
  549.  
  550. /*********************************************
  551.  **
  552.  ** Routine for opening/closing the screen, window and gadgets
  553.  **
  554.  *********************************************/
  555.  
  556. static void create_node(struct List *list,UBYTE *name)
  557. {
  558.     struct Node *nd;
  559.     
  560.     if( nd=AllocVec(sizeof(struct Node)+strlen(name)+5,MEMF_CLEAR) ) {
  561.         nd->ln_Name = (char *)(nd+1);
  562.         strcpy((UBYTE *)(nd+1),name);
  563.         AddHead(list,nd);
  564.     }
  565. }
  566.  
  567. static void free_list(struct List *list)
  568. {
  569.     struct Node *nd;
  570.     
  571.     while( nd=RemTail(list) ) {
  572.         FreeVec(nd);
  573.     }
  574. }
  575.  
  576. static void closedisplay(void)
  577. {
  578.     if(gad_outline) GO_CloseWindow(gad_outline);
  579.     free_list(&scrn_list);
  580.     free_list(&mode_list);
  581. }
  582.  
  583. static void opendisplay(struct GadOutline *go)
  584. {
  585.     closedisplay();
  586.  
  587.     GO_OpenWindow(go,
  588.                 WA_AutoAdjust,    TRUE,
  589.                 WA_IDCMP,         IDCMP_CLOSEWINDOW | IDCMP_VANILLAKEY |
  590.                                   IDCMP_REFRESHWINDOW,
  591.                 WA_Activate,      TRUE,
  592.                 WA_CloseGadget,   TRUE,
  593.                 WA_DepthGadget,   TRUE,
  594.                 WA_DragBar,       TRUE,
  595.                 WA_SizeGadget,    TRUE,
  596.                 WA_SizeBBottom,   TRUE,
  597.                 WA_ReportMouse,   TRUE,
  598.                 WA_SimpleRefresh, TRUE,
  599.                 WA_PubScreen,     NULL,
  600.                 TAG_END
  601.                 );
  602.  
  603.     if(go->go_LastReqReturn || !go->go_Window) return;
  604.  
  605.     create_node(&scrn_list,"Screen #0");
  606.     create_node(&scrn_list,"Screen #1");
  607.     create_node(&scrn_list,"Screen #2");
  608.     create_node(&scrn_list,"Screen #3");
  609.     create_node(&scrn_list,"Screen #4");
  610.     create_node(&scrn_list,"Screen #5");
  611.     create_node(&scrn_list,"Screen #6");
  612.     create_node(&scrn_list,"Screen #7");
  613.     create_node(&scrn_list,"Screen #8");
  614.     create_node(&scrn_list,"Screen #9");
  615.     create_node(&mode_list,"Display Mode #0");
  616.     create_node(&mode_list,"Display Mode #1");
  617.     create_node(&mode_list,"Display Mode #2");
  618.     create_node(&mode_list,"Display Mode #3");
  619.     create_node(&mode_list,"Display Mode #4");
  620.     create_node(&mode_list,"Display Mode #5");
  621.     create_node(&mode_list,"Display Mode #6");
  622.     create_node(&mode_list,"Display Mode #7");
  623.     create_node(&mode_list,"Display Mode #8");
  624.     create_node(&mode_list,"Display Mode #9");
  625.  
  626.     GO_SetObjAttrs(go,CURSCRN_ID,0,GTLV_Labels,&scrn_list,TAG_END);
  627.     GO_SetObjAttrs(go,SCRNMODE_ID,0,GTLV_Labels,&mode_list,TAG_END);
  628.  
  629.     me->pr_WindowPtr = (APTR)go->go_Window;
  630. }
  631.  
  632. static void handledisplay(struct GadOutline *go)
  633. {
  634.     struct GOIMsg *msg;
  635.     struct Gadget *gadget;
  636.     ULONG class;
  637.     UWORD code;
  638.     UWORD qual;
  639.  
  640.     if(go == NULL || go->go_Window == NULL) return;
  641.  
  642.     while (1)
  643.     {
  644.         Wait( (1L<<go->go_Window->UserPort->mp_SigBit) );
  645.  
  646.         while (msg = GO_GetGOIMsg(go))
  647.         {
  648.             class = msg->StdIMsg.Class;
  649.             code = msg->StdIMsg.Code;
  650.             qual = msg->StdIMsg.Qualifier;
  651.             gadget=msg->StdIMsg.IAddress;
  652.  
  653.             gadget = (struct Gadget *)msg->StdIMsg.IAddress;
  654.  
  655.             GO_ReplyGOIMsg(msg);
  656.  
  657.             switch (class) {
  658.  
  659.                 case IDCMP_CLOSEWINDOW:
  660.                     return;
  661.  
  662.                 case IDCMP_REFRESHWINDOW:
  663.                     GO_BeginRefresh(go);
  664.                     GO_EndRefresh(go, TRUE);
  665.                     break;
  666.  
  667.                 case IDCMP_GADGETUP:
  668.                 case IDCMP_GADGETDOWN:
  669.                     D(bug("A gadget of type: %ld\n",gadget->GadgetID));
  670.                     if(gadget->GadgetID == DODISABLE_ID) {
  671.                         GO_SetObjAttrs(go,BOOPSIGAD_ID,0,
  672.                             GA_Disabled,
  673.                                 !GO_GetObjAttr(go,BOOPSIGAD_ID,0,GA_Disabled,TRUE),
  674.                             TAG_END);
  675.                     } else if(gadget->GadgetID == SETFONT_ID) {
  676.  
  677.                         /* Pop up the requester */
  678.                         if (AslRequestTags(fr,
  679.                             /* Supply initial values for requester */
  680.                             ASL_FontName, (ULONG)go->go_TargetTA.tta_Name,
  681.                             ASL_FontHeight, go->go_TargetTA.tta_YSize,
  682.                             ASL_FontStyles, go->go_TargetTA.tta_Style,
  683.                             ASL_FuncFlags, FONF_STYLES,
  684.                             ASL_Window, go->go_Window,
  685.                             TAG_END)) {
  686.  
  687.                             DimenGadOutline(go,
  688.                                             GOA_TextAttr,&fr->fo_Attr,
  689.                                             TAG_END);
  690.                             GO_SetObjAttrs(go,FONTNAME_ID,0,
  691.                                 GTST_String,go->go_TargetTA.tta_Name,TAG_END);
  692.                             GO_SetObjAttrs(go,FONTSIZE_ID,0,
  693.                                 GTIN_Number,go->go_TargetTA.tta_YSize,TAG_END);
  694.                         }
  695.                     }
  696.                     break;
  697.             }
  698.         }
  699.     }
  700. }
  701.  
  702. /*********************************************
  703.  **
  704.  ** Program's main entry point
  705.  **
  706.  *********************************************/
  707.  
  708. void __regargs main(int argc,char **argv)
  709. {
  710.     NewList(&scrn_list);
  711.     NewList(&mode_list);
  712.  
  713.     if( !(me = (struct Process *)FindTask(NULL)) ) quit("Can't find    myself!");
  714.     oldwin = (struct Window *)me->pr_WindowPtr;
  715.  
  716.     if( (fr = (struct FontRequester *)
  717.         AllocAslRequestTags(ASL_FontRequest,TAG_END)) == NULL) {
  718.         quit("Can't allocate font requester!");
  719.     }
  720.             
  721. #ifndef LINKLIB
  722.     GadOutlineBase = OpenLibrary("gadoutline.library", 0);
  723.     if (!GadOutlineBase)
  724.        quit("Can't open gadoutline.library.");
  725.     D(bug("Opened the library.  Creating outline...\n",NULL));
  726. #endif
  727.     
  728.     gad_outline = AllocGadOutline(outline,
  729.            GOA_ErrorText,   &go_error,
  730.            TAG_END);
  731.     if(gad_outline == NULL) {
  732.         quit(go_error);
  733.     }
  734.  
  735.     opendisplay(gad_outline);
  736.     handledisplay(gad_outline);
  737.  
  738.     quit(NULL);
  739. }
  740.