home *** CD-ROM | disk | FTP | other *** search
/ Amiga Elysian Archive / AmigaElysianArchive.iso / prog / c / dicepj11.lha / diceproject / project.c < prev    next >
C/C++ Source or Header  |  1993-03-12  |  32KB  |  1,129 lines

  1. /*
  2.  *  Source machine generated by GadToolsBox V1.4
  3.  *  which is (c) Copyright 1991,92 Jaba Development
  4.  */
  5.  
  6. #include <exec/types.h>
  7. #include <intuition/intuition.h>
  8. #include <intuition/classes.h>
  9. #include <intuition/classusr.h>
  10. #include <intuition/imageclass.h>
  11. #include <intuition/gadgetclass.h>
  12. #include <libraries/gadtools.h>
  13. #include <graphics/displayinfo.h>
  14. #include <graphics/gfxbase.h>
  15. #include <clib/exec_protos.h>
  16. #include <clib/dos_protos.h>
  17. #include <clib/intuition_protos.h>
  18. #include <clib/gadtools_protos.h>
  19. #include <clib/graphics_protos.h>
  20. #include <clib/utility_protos.h>
  21. #include <clib/diskfont_protos.h>
  22. #include <string.h>
  23. #include <stdlib.h>
  24.  
  25. #include "project.h"
  26.  
  27. UWORD ProjectLeft = 0;
  28. UWORD ProjectTop = 409;
  29. UWORD ProjectWidth = 728;
  30. UWORD ProjectHeight = 144;
  31.  
  32. UWORD               CompilerOptLeft = 111;
  33. UWORD               CompilerOptTop = 190;
  34. UWORD               CompilerOptWidth = 411;
  35. UWORD               CompilerOptHeight = 203;
  36.  
  37. UWORD MessLeft = 0;
  38. UWORD MessTop = 426;
  39. UWORD MessWidth = 728;
  40. UWORD MessHeight = 127;
  41.  
  42. struct Screen          *Scr = NULL;
  43. APTR               VisualInfo = NULL;
  44. struct Window          *ProjectWnd = NULL;
  45. struct Window          *MessWnd = NULL;
  46. struct Window          *CListeWnd = NULL;
  47. struct Window          *DirSetWnd = NULL;
  48. struct Window          *CompileWnd = NULL;
  49. struct Window          *CompilerOptWnd = NULL;
  50. struct Gadget          *ProjectGList = NULL;
  51. struct Gadget          *MessGList = NULL;
  52. struct Gadget          *CListeGList = NULL;
  53. struct Gadget          *DirSetGList = NULL;
  54. struct Gadget          *CompileGList = NULL;
  55. struct Gadget          *CompilerOptGList = NULL;
  56. struct Menu          *ProjectMenus = NULL;
  57. struct IntuiMessage    ProjectMsg;
  58. struct IntuiMessage    MessMsg;
  59. struct IntuiMessage    DirSetMsg;
  60. struct IntuiMessage    CompileMsg;
  61. struct IntuiMessage    CompilerOptMsg;
  62. struct TextFont       *NFont       = NULL;
  63. struct Gadget          *ProjectGadgets[1];
  64. struct Gadget          *MessGadgets[1];
  65. struct Gadget          *CListeGadgets[1];
  66. struct Gadget          *DirSetGadgets[12];
  67. struct Gadget          *CompileGadgets[2];
  68. struct Gadget          *CompilerOptGadgets[13];
  69. UBYTE              *ProjectWdt = (UBYTE *)"DICE Project Handler : No Name";
  70. UBYTE              *DirSetWdt = (UBYTE *)"Directory current settings :";
  71. UBYTE              *CompilerOptWdt = (UBYTE *)"Project Handler : Compiler Options";
  72. struct TextAttr       *Font, Attr;
  73. UWORD               FontX, FontY;
  74. UWORD               OffX, OffY;
  75.  
  76. UBYTE *CPU4Labels[] = {
  77.     (UBYTE *)"680_00/010",
  78.     (UBYTE *)"680_20",
  79.     (UBYTE *)"680_30",
  80.     NULL };
  81.  
  82. UBYTE *FPU4Labels[] = {
  83.     (UBYTE *)"None",
  84.     (UBYTE *)"6888_1",
  85.     (UBYTE *)"_68882",
  86.     NULL };
  87.  
  88. UBYTE *Data4Labels[] = {
  89.     (UBYTE *)"Sm_all",
  90.     (UBYTE *)"Larg_e",
  91.     NULL };
  92.  
  93. UBYTE *Code4Labels[] = {
  94.     (UBYTE *)"S_mall",
  95.     (UBYTE *)"Lar_ge",
  96.     NULL };
  97.  
  98. UBYTE *Calls4Labels[] = {
  99.     (UBYTE *)"Registeri_zed",
  100.     (UBYTE *)"_Trough Stack",
  101.     NULL };
  102.  
  103. UBYTE *Hunk4Labels[] = {
  104.     (UBYTE *)"_Only constant objects",
  105.     (UBYTE *)"_Both Constant and String ",
  106.     (UBYTE *)"Const, String and _PC-Relative",
  107.     NULL };
  108.  
  109. struct TextAttr times13 = {
  110.     ( STRPTR )"times.font", 13, 0x00, 0x20 };
  111.  
  112. struct IntuiText ProjectIText[] = {
  113.     1, 0, JAM1,121, 9, ×13, (UBYTE *)"Source Object  C Module Name", NULL };
  114.  
  115. #define Project_TNUM 1
  116.  
  117. struct IntuiText CompileIText[] = {
  118.     1, 0, JAM2,148, 0, ×13, NULL, NULL,
  119.     2, 0, JAM1,147, 65535, ×13, NULL, NULL };
  120.  
  121. #define Compile_TNUM 2
  122.  
  123. struct IntuiText CompilerOptIText[] = {
  124.     2, 0, JAM2,124, 119, ×13, (UBYTE *)" Strange Options ", &CompilerOptIText[1],
  125.     2, 0, JAM2,44, 3, ×13, (UBYTE *)" Code Generation ", &CompilerOptIText[2],
  126.     2, 0, JAM2,14, 70, ×13, (UBYTE *)" Data Models ", &CompilerOptIText[3],
  127.     2, 0, JAM2,104, 70, ×13, (UBYTE *)" Code Models ", &CompilerOptIText[4],
  128.     2, 0, JAM2,245, 70, ×13, (UBYTE *)" Procedure Calls ", &CompilerOptIText[5],
  129.     2, 0, JAM2,234, 3, ×13, (UBYTE *)" Constant Hunk Code ", NULL
  130. };
  131.  
  132. struct NewMenu ProjectNewMenu[] = {
  133.     NM_TITLE, (STRPTR)MENU_PROJECT, NULL, 0, NULL, NULL,
  134.     NM_ITEM, (STRPTR)MENU_NEW, (STRPTR)"N", 0, 0L, (APTR)ProjectNew,
  135.     NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
  136.     NM_ITEM, (STRPTR)MENU_OPEN, (STRPTR)"O", 0, 0L, (APTR)ProjectOpen,
  137.     NM_ITEM, (STRPTR)MENU_SAVE, (STRPTR)"S", 0, 0L, (APTR)ProjectSave,
  138.     NM_ITEM, (STRPTR)MENU_SAVEAS, NULL, 0, 0L, (APTR)ProjectSaveas,
  139.     NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
  140.     NM_ITEM, (STRPTR)MENU_ICONIFY, (STRPTR)"I", NM_ITEMDISABLED, 0L, (APTR)ProjectIcon,
  141.     NM_ITEM, (STRPTR)MENU_ABOUT, NULL, 0, 0L, (APTR)ProjectAbout,
  142.     NM_ITEM, (STRPTR)MENU_QUIT, (STRPTR)"Q", 0, 0L, (APTR)ProjectQuit,
  143.     NM_TITLE, (STRPTR)MENU_MODULE, NULL, 0, NULL, NULL,
  144.     NM_ITEM, (STRPTR)MENU_EDIT, (STRPTR)"E", 0, 0L, (APTR)ProjectEdit,
  145.     NM_ITEM, (STRPTR)MENU_INCLUDEFILE, NULL, 0, 0L, (APTR)ProjectInclude,
  146.     NM_ITEM, (STRPTR)MENU_COMMENT, NULL , 0 , 0L , NULL,
  147.     NM_SUB , (STRPTR)MENU_COMMENT_VIEW,NULL , 0 , 0L , (APTR)ProjectComment,
  148.     NM_SUB , (STRPTR)MENU_COMMENT_KILL,NULL , 0 , 0L , (APTR)ProjectCommentKill,
  149.     NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
  150.     NM_ITEM, (STRPTR)MENU_ADDMODULE, (STRPTR)"A", 0, 0L, (APTR)ProjectAdd,
  151.     NM_ITEM, (STRPTR)MENU_REMMODULE, (STRPTR)"R", 0, 0L, (APTR)ProjectRem,
  152.     NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
  153.     NM_ITEM, (STRPTR)MENU_OPENEXT, NULL, 0, 0L, (APTR)ProjectOther,
  154.     NM_TITLE, (STRPTR)MENU_CODE, NULL, 0, NULL, NULL,
  155.     NM_ITEM, (STRPTR)MENU_GENERATE, (STRPTR)"G", 0, 0L, (APTR)ProjectGenerate,
  156.     NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
  157.     NM_ITEM, (STRPTR)MENU_MAKEPRG , (STRPTR)"P" , 0 , 0L , (APTR)ProjectMake,
  158.     NM_ITEM, (STRPTR)MENU_MAKELIB , (STRPTR)"L", 0 , 0L , (APTR)ProjectLibrary,
  159.     NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
  160.     NM_ITEM, (STRPTR)MENU_COMPILE, NULL, 0, 0L, (APTR)ProjectCompile,
  161.     NM_ITEM, (STRPTR)MENU_LINK, NULL, 0, 0L, (APTR)ProjectLink,
  162.     NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
  163.     NM_ITEM, (STRPTR)MENU_LAUNCH , NULL , 0 , 0L , NULL ,
  164.     NM_SUB ,(STRPTR)MENU_LAUNCH_CLI , NULL , 0 , 0L , (APTR)ProjectLaunch,
  165.     NM_SUB, (STRPTR)MENU_LAUNCH_WB , NULL , NM_ITEMDISABLED , 0L , (APTR)ProjectLaunchWB,
  166.     NM_ITEM, (STRPTR)MENU_INFOCODE, NULL, 0, 0L, (APTR)ProjectCodeInfo,
  167.     NM_TITLE, (STRPTR)MENU_OPTIONS, NULL, 0, NULL, NULL,
  168.     NM_ITEM, (STRPTR)MENU_COMPILER_OPT, NULL, 0, 0L, (APTR)ProjectCompilerOpt,
  169.     NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
  170.     NM_ITEM, (STRPTR)MENU_DIR_OPT, NULL, 0, 0L, (APTR)ProjectDirectory,
  171.     NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
  172.     NM_ITEM, (STRPTR)MENU_SCREEN_OPT, NULL, 0, 0L, (APTR)ProjectScreenOpt,
  173.     NM_ITEM, (STRPTR)MENU_SAVE_OPT , NULL,0,0L,(APTR)SavePrefs,
  174.     NM_END, NULL, NULL, 0, 0L, NULL };
  175.  
  176. UWORD ProjectGTypes[] = {
  177.     LISTVIEW_KIND
  178. };
  179.  
  180. UWORD MessGTypes[] = {
  181.     LISTVIEW_KIND
  182. };
  183.  
  184. UWORD CListeGTypes[] = {
  185.     LISTVIEW_KIND
  186. };
  187.  
  188. UWORD DirSetGTypes[] = {
  189.     BUTTON_KIND,
  190.     BUTTON_KIND,
  191.     BUTTON_KIND,
  192.     BUTTON_KIND,
  193.     BUTTON_KIND,
  194.     BUTTON_KIND,
  195.     TEXT_KIND,
  196.     TEXT_KIND,
  197.     TEXT_KIND,
  198.     TEXT_KIND,
  199.     TEXT_KIND,
  200.     TEXT_KIND
  201. };
  202.  
  203. UWORD CompileGTypes[] = {
  204.     TEXT_KIND,
  205.     BUTTON_KIND
  206. };
  207.  
  208. UWORD CompilerOptGTypes[] = {
  209.     CHECKBOX_KIND,
  210.     CHECKBOX_KIND,
  211.     CHECKBOX_KIND,
  212.     CHECKBOX_KIND,
  213.     CHECKBOX_KIND,
  214.     CHECKBOX_KIND,
  215.     MX_KIND,
  216.     MX_KIND,
  217.     MX_KIND,
  218.     MX_KIND,
  219.     MX_KIND,
  220.     CHECKBOX_KIND,
  221.     MX_KIND
  222. };
  223.  
  224. struct NewGadget ProjectNGad[] = {
  225.     3, 15, -6, -25, NULL, NULL, GD_ModuleList, 0, NULL, (APTR)ModuleListClicked
  226. };
  227.  
  228. struct NewGadget MessNGad[] = {
  229.     3, 3, -6, -14, NULL, NULL, GD_ModuleList, 0, NULL, (APTR)MessListClicked
  230. };
  231.  
  232. struct NewGadget CListeNGad[] = {
  233.     3, 3, 267, 160, NULL, NULL, GD_ScreenList, 0, NULL, NULL
  234. };
  235.  
  236. struct NewGadget DirSetNGad[] = {
  237.     5, 4, 101, 15, (UBYTE *)"_Source", NULL, GD_Source, PLACETEXT_IN, NULL, (APTR)SourceClicked,
  238.     5, 26, 101, 15, (UBYTE *)"D_estination", NULL, GD_Dest, PLACETEXT_IN, NULL, (APTR)DestClicked,
  239.     5, 48, 101, 15, (UBYTE *)"_Includes", NULL, GD_Include, PLACETEXT_IN, NULL, (APTR)IncludeClicked,
  240.     5, 70, 101, 15, (UBYTE *)"_Libraries", NULL, GD_Lib, PLACETEXT_IN, NULL, (APTR)LibClicked,
  241.     5, 92, 101, 15, (UBYTE *)"_Objects", NULL, GD_Obj, PLACETEXT_IN, NULL, (APTR)ObjClicked,
  242.     5, 114, 101, 15, (UBYTE *)"_DICE", NULL, GD_Prg, PLACETEXT_IN, NULL, (APTR)PrgClicked,
  243.     113, 4, 206, 15, NULL, NULL, GD_SourceString, 0, NULL, NULL,
  244.     113, 26, 206, 15, NULL, NULL, GD_DestString, 0, NULL, NULL,
  245.     113, 48, 206, 15, NULL, NULL, GD_IncludeString, 0, NULL, NULL,
  246.     113, 70, 206, 15, NULL, NULL, GD_LibString, 0, NULL, NULL,
  247.     113, 92, 206, 15, NULL, NULL, GD_ObjString, 0, NULL, NULL
  248.     113, 114, 206, 15, NULL, NULL, GD_PrgString, 0, NULL, NULL
  249. };
  250.  
  251. struct NewGadget CompileNGad[] = {
  252.     5, 7, 284, 12, NULL, NULL, GD_CompileName, 0, NULL, NULL,
  253.     63, 25, 164, 12, (UBYTE *)TXT_ABORT_PROCESS, NULL, GD_Gadget13, PLACETEXT_IN, NULL, NULL
  254. };
  255.  
  256. struct NewGadget CompilerOptNGad[] = {
  257.     218, 135, 26, 11, (UBYTE *)"Relocation _Hunks", NULL, GD_Reloc, PLACETEXT_RIGHT, NULL, (APTR)RelocClicked,
  258.     17, 135, 26, 11, (UBYTE *)"Executable _Residentable", NULL, GD_Resident, PLACETEXT_RIGHT, NULL, (APTR)ResidentClicked,
  259.     218, 156, 26, 11, (UBYTE *)"Include _Debug Information", NULL, GD_DInfo, PLACETEXT_RIGHT, NULL, (APTR)DInfoClicked,
  260.     218, 177, 26, 11, (UBYTE *)"Debug _Level 1", NULL, GD_DLevel, PLACETEXT_RIGHT, NULL, (APTR)DLevelClicked,
  261.     17, 156, 26, 11, (UBYTE *)"Generate Dynamic _Stack", NULL, GD_Stack, PLACETEXT_RIGHT, NULL, (APTR)StackClicked,
  262.     17, 177, 26, 11, (UBYTE *)"Force code in _Chip", NULL, GD_Chip, PLACETEXT_RIGHT, NULL, (APTR)ChipClicked,
  263.     21, 20, 17, 9, NULL, NULL, GD_CPU, PLACETEXT_RIGHT, NULL, (APTR)CPUClicked,
  264.     115, 20, 17, 9, NULL, NULL, GD_FPU, PLACETEXT_RIGHT, NULL, (APTR)FPUClicked,
  265.     19, 86, 17, 9, NULL, NULL, GD_Data, PLACETEXT_RIGHT, NULL, (APTR)DataClicked,
  266.     112, 86, 17, 9, NULL, NULL, GD_Code, PLACETEXT_RIGHT, NULL, (APTR)CodeClicked,
  267.     199, 86, 17, 9, NULL, NULL, GD_Calls, PLACETEXT_RIGHT, NULL, (APTR)CallsClicked,
  268.     366, 92, 26, 11, (UBYTE *)"_Inline Calls", NULL, GD_Inline, PLACETEXT_LEFT, NULL, (APTR)InlineClicked,
  269.     205, 20, 17, 9, NULL, NULL, GD_Hunk, PLACETEXT_RIGHT, NULL, (APTR)HunkClicked
  270. };
  271.  
  272. ULONG ProjectGTags[] = {
  273.     (GTLV_ShowSelected), NULL, (TAG_DONE)
  274. };
  275.  
  276. ULONG MessGTags[] = {
  277.     (TAG_DONE)
  278. };
  279.  
  280. ULONG CListeGTags[] = {
  281.     (TAG_DONE)
  282. };
  283.  
  284. ULONG DirSetGTags[] = {
  285.     (GT_Underscore), '_', (TAG_DONE),
  286.     (GT_Underscore), '_', (TAG_DONE),
  287.     (GT_Underscore), '_', (TAG_DONE),
  288.     (GT_Underscore), '_', (TAG_DONE),
  289.     (GT_Underscore), '_', (TAG_DONE),
  290.     (GT_Underscore), '_', (TAG_DONE),
  291.     (GTTX_Border), TRUE, (TAG_DONE),
  292.     (GTTX_Border), TRUE, (TAG_DONE),
  293.     (GTTX_Border), TRUE, (TAG_DONE),
  294.     (GTTX_Border), TRUE, (TAG_DONE),
  295.     (GTTX_Border), TRUE, (TAG_DONE),
  296.     (GTTX_Border), TRUE, (TAG_DONE)
  297. };
  298.  
  299. ULONG CompileGTags[] = {
  300.     (GTTX_Border), TRUE, (TAG_DONE),
  301.     (TAG_DONE)
  302. };
  303.  
  304. ULONG CompilerOptGTags[] = {
  305.     (GT_Underscore), '_', (TAG_DONE),
  306.     (GT_Underscore), '_', (TAG_DONE),
  307.     (GT_Underscore), '_', (TAG_DONE),
  308.     (GT_Underscore), '_', (TAG_DONE),
  309.     (GT_Underscore), '_', (TAG_DONE),
  310.     (GT_Underscore), '_', (TAG_DONE),
  311.     (GT_Underscore), '_', (GTMX_Labels), (ULONG)&CPU4Labels[ 0 ], (GT_Underscore), '_', (TAG_DONE),
  312.     (GT_Underscore), '_', (GTMX_Labels), (ULONG)&FPU4Labels[ 0 ], (GT_Underscore), '_', (TAG_DONE),
  313.     (GT_Underscore), '_', (GTMX_Labels), (ULONG)&Data4Labels[ 0 ], (GT_Underscore), '_', (TAG_DONE),
  314.     (GT_Underscore), '_', (GTMX_Labels), (ULONG)&Code4Labels[ 0 ], (GT_Underscore), '_', (TAG_DONE),
  315.     (GT_Underscore), '_', (GTMX_Labels), (ULONG)&Calls4Labels[ 0 ], (GT_Underscore), '_', (TAG_DONE),
  316.     (GT_Underscore), '_', (TAG_DONE),
  317.     (GT_Underscore), '_', (GTMX_Labels), (ULONG)&Hunk4Labels[ 0 ], (GT_Underscore), '_', (TAG_DONE)
  318. };
  319.  
  320. struct ColorSpec ScreenColors[] = {
  321.      0, 0x0C, 0x0B, 0x09,
  322.      1, 0x00, 0x00, 0x00,
  323.      2, 0x0F, 0x0F, 0x0F,
  324.      3, 0x08, 0x06, 0x05,
  325.      4, 0x00, 0x00, 0x0F,
  326.      5, 0x0F, 0x00, 0x00,
  327.      6, 0x00, 0x0F, 0x00,
  328.      7, 0x0F, 0x0F, 0x00,
  329.      8, 0x06, 0x02, 0x00,
  330.      9, 0x0A, 0x06, 0x04,
  331.     10, 0x0E, 0x0A, 0x08,
  332.     11, 0x00, 0x0A, 0x00,
  333.     12, 0x08, 0x0F, 0x0A,
  334.     13, 0x08, 0x08, 0x08,
  335.     14, 0x06, 0x06, 0x06,
  336.     15, 0x0C, 0x0C, 0x0C,
  337.     ~0, 0x00, 0x00, 0x00 };
  338.  
  339. UWORD DriPens[] = {
  340.     0,1,1,2,1,3,1,0,2,~0 };
  341.  
  342. static UWORD ComputeX( UWORD value )
  343. {
  344.     return(( UWORD )((( FontX * value ) + 4 ) / 8 ));
  345. }
  346.  
  347. static UWORD ComputeY( UWORD value )
  348. {
  349.     return(( UWORD )((( FontY * value ) + 4 ) / 8 ));
  350. }
  351.  
  352. static UWORD IComputeX( UWORD value )
  353. {
  354.     return(( UWORD )((( 8 * value ) - 4 ) / FontX ));
  355. }
  356.  
  357. static UWORD IComputeY( UWORD value )
  358. {
  359.     return(( UWORD )((( 8 * value ) - 4 ) / FontY ));
  360. }
  361.  
  362. static void ComputeFont( UWORD width, UWORD height )
  363. {
  364.     Font = &Attr;
  365.     Font->ta_Name = (STRPTR)GfxBase->DefaultFont->tf_Message.mn_Node.ln_Name;
  366.     Font->ta_YSize = FontY = GfxBase->DefaultFont->tf_YSize;
  367.     FontX = GfxBase->DefaultFont->tf_XSize;
  368.  
  369.     OffX = Scr->WBorLeft;
  370.     OffY = Scr->RastPort.TxHeight + Scr->WBorTop + 1;
  371.  
  372.     if ( width && height ) {
  373.         if (( ComputeX( width ) + OffX + Scr->WBorRight ) > Scr->Width )
  374.             goto UseTopaz;
  375.         if (( ComputeY( height ) + OffY + Scr->WBorBottom ) > Scr->Height )
  376.             goto UseTopaz;
  377.     }
  378.     return;
  379.  
  380. UseTopaz:
  381.     Font->ta_Name = (STRPTR)"topaz.font";
  382.     FontX = FontY = Font->ta_YSize = 8;
  383. }
  384.  
  385. char PubName[20] = "DICE_Project";
  386.  
  387. int SetupScreen( void )
  388. {
  389.   LONG PubNum = 1;
  390.   ULONG ErrorCode=OSERR_PUBNOTUNIQUE;
  391.  
  392.     if ( ! ( NFont = OpenDiskFont( ×13 )))
  393.         return( 5L );
  394.  
  395.     while( ErrorCode == OSERR_PUBNOTUNIQUE || ErrorCode == OSERR_NOMONITOR ) {
  396.     ErrorCode = 0;
  397.     Scr = OpenScreenTags( NULL, SA_Left,   0,
  398.                     SA_Top,        0,
  399.                     SA_Width,        STDSCREENWIDTH,
  400.                     SA_Height,        STDSCREENHEIGHT,
  401.                     SA_Depth,        2,
  402.                     SA_Colors,        &ScreenColors[0],
  403.                     SA_Type,        PUBLICSCREEN,
  404.                     SA_DisplayID,   DisplayScreen,
  405.                     SA_Pens,        &DriPens[0],
  406.                     SA_Title,        "DICE Project Handler Screen v1.1 by Cedric Counotte",
  407.                     SA_PubName,     PubName,
  408.                     SA_SysFont,     1,
  409.                     SA_ErrorCode , &ErrorCode,
  410.                     TAG_DONE );
  411.     if ( ErrorCode == OSERR_PUBNOTUNIQUE ) {
  412.         strcpy( PubName , "DICE_Project." );
  413.         ltoa( &PubName[13] , PubNum++ );
  414.     }
  415.     if ( ErrorCode == OSERR_NOMONITOR )
  416.         DisplayScreen = HIRESLACE_KEY;
  417.     }
  418.  
  419.     ComputeFont( 0, 0 );
  420.  
  421.     if ( ! ( VisualInfo = GetVisualInfoA( Scr, 0 )))
  422.     return( 2L );
  423.     PubScreenStatus( Scr , ~PSNF_PRIVATE );
  424.     SetPubScreenModes( SHANGHAI|POPPUBSCREEN );
  425.  
  426.     return( 0L );
  427. }
  428.  
  429. int CloseDownScreen( void )
  430. {
  431.   struct EasyStruct es = {
  432.     sizeof(struct EasyStruct),
  433.     0,
  434.     "Project request",
  435.     "Please close every window on the screen !",
  436.     "Continue",
  437.   };
  438.   struct Window *wnd;
  439.  
  440.     if ( VisualInfo ) {
  441.     FreeVisualInfo( VisualInfo );
  442.     VisualInfo = NULL;
  443.     }
  444.  
  445.     if ( Scr ) {
  446.     while ( Scr->FirstWindow ) {
  447.         wnd = BuildEasyRequestArgs( ProjectWnd , &es , NULL , NULL );
  448.         while( Scr->FirstWindow != wnd || Scr->FirstWindow->NextWindow );
  449.         FreeSysRequest( wnd );
  450.     }
  451.     CloseScreen( Scr );
  452.     }
  453.     if ( NFont         ) {
  454.     CloseFont( NFont );
  455.     NFont = NULL;
  456.     }
  457. }
  458.  
  459. void ProjectRender( void )
  460. {
  461.     struct IntuiText    it;
  462.     UWORD            cnt;
  463.  
  464.     ComputeFont( ProjectWidth, ProjectHeight );
  465.  
  466.  
  467.     for ( cnt = 0; cnt < Project_TNUM; cnt++ ) {
  468.         CopyMem(( char * )&ProjectIText[ cnt ], ( char * )&it, (long)sizeof( struct IntuiText ));
  469.         it.ITextFont = Font;
  470.         it.LeftEdge  = OffX + ComputeX( it.LeftEdge ) - ( IntuiTextLength( &it ) >> 1 );
  471.         it.TopEdge   = OffY + ComputeY( it.TopEdge ) - ( Font->ta_YSize >> 1 );
  472.         PrintIText( ProjectWnd->RPort, &it, 0, 0 );
  473.     }
  474. }
  475.  
  476. int HandleProjectIDCMP( void )
  477. {
  478.     struct IntuiMessage    *m;
  479.     struct MenuItem     *n;
  480.     int            (*func)(void);
  481.     BOOL            running = TRUE;
  482.  
  483.     while( m = GT_GetIMsg( ProjectWnd->UserPort )) {
  484.  
  485.         CopyMem(( char * )m, ( char * )&ProjectMsg, (long)sizeof( struct IntuiMessage ));
  486.  
  487.         GT_ReplyIMsg( m );
  488.  
  489.         switch ( ProjectMsg.Class ) {
  490.  
  491.             case    IDCMP_REFRESHWINDOW:
  492.                 GT_BeginRefresh( ProjectWnd );
  493.                 GT_EndRefresh( ProjectWnd, TRUE );
  494.                 break;
  495.  
  496.             case    IDCMP_CLOSEWINDOW:
  497.                 return( ProjectCloseWindow() );
  498.                 break;
  499.  
  500.             case    IDCMP_NEWSIZE:
  501.                 running = ProjectNewSize();
  502.                 break;
  503.  
  504.             case    IDCMP_GADGETUP:
  505.                 func = ( void * )(( struct Gadget * )ProjectMsg.IAddress )->UserData;
  506.                 running = func();
  507.                 break;
  508.  
  509.             case    IDCMP_MENUPICK:
  510.                 while( ProjectMsg.Code != MENUNULL ) {
  511.                     n = ItemAddress( ProjectMenus, ProjectMsg.Code );
  512.                     func = (void *)(GTMENUITEM_USERDATA( n ));
  513.                     running = func();
  514.                     if ( (APTR)func == (APTR)&ProjectScreenOpt ||
  515.                         (APTR)func == (APTR)&ProjectNewSize ||
  516.                         (APTR)func == (APTR)&ProjectOpen )
  517.                         break;
  518.                     ProjectMsg.Code = n->NextSelect;
  519.                 }
  520.                 break;
  521.         }
  522.     }
  523.     return( running );
  524. }
  525.  
  526. int OpenProjectWindow( void )
  527. {
  528.     struct NewGadget    ng;
  529.     struct Gadget    *g;
  530.     UWORD        lc, tc;
  531.     UWORD        wleft = ProjectLeft, wtop = ProjectTop, ww, wh;
  532.     struct TagItem menut[] = { GTMN_TextAttr, ×13, TAG_DONE };
  533.  
  534.  
  535.     ComputeFont( ProjectWidth, ProjectHeight );
  536.  
  537.     ww = ComputeX( ProjectWidth );
  538.     wh = ComputeY( ProjectHeight );
  539.  
  540.     if (( wleft + ww + OffX + Scr->WBorRight ) > Scr->Width ) wleft = Scr->Width - ww;
  541.     if (( wtop + wh + OffY + Scr->WBorBottom ) > Scr->Height ) wtop = Scr->Height - wh;
  542.  
  543.     if (( wleft + ww ) > Scr->Width ) ww = Scr->Width - OffX - Scr->WBorRight;
  544.     if (( wtop + wh ) > Scr->Height ) wh = Scr->Height - OffY - Scr->WBorBottom ;
  545.  
  546.     if ( ! ( g = CreateContext( &ProjectGList )))
  547.         return( 1L );
  548.  
  549.     for( lc = 0, tc = 0; lc < Project_CNT; lc++ ) {
  550.  
  551.         CopyMem((char * )&ProjectNGad[ lc ], (char * )&ng, (long)sizeof( struct NewGadget ));
  552.  
  553.         ng.ng_VisualInfo = VisualInfo;
  554.         ng.ng_TextAttr     = Font;
  555.         ng.ng_LeftEdge = OffX + ComputeX( ng.ng_LeftEdge );
  556.         ng.ng_TopEdge = OffY + ComputeY( ng.ng_TopEdge );
  557.         ng.ng_Width = IComputeX( ww ) + ng.ng_Width;
  558.         ng.ng_Height = IComputeY( wh ) + ng.ng_Height;
  559.         ng.ng_Width = ComputeX( ng.ng_Width );
  560.         ng.ng_Height = ComputeY( ng.ng_Height);
  561.  
  562.         ProjectGadgets[ lc ] = g = CreateGadgetA((ULONG)ProjectGTypes[ lc ], g, &ng, ( struct TagItem * )&ProjectGTags[ tc ] );
  563.  
  564.         while( ProjectGTags[ tc ] ) tc += 2;
  565.         tc++;
  566.  
  567.         if ( NOT g )
  568.             return( 2L );
  569.     }
  570.  
  571.     if ( ! ( ProjectMenus = CreateMenusA( ProjectNewMenu, 0L )))
  572.         return( 3L );
  573.  
  574.     LayoutMenusA( ProjectMenus, VisualInfo, menut );
  575.  
  576.     if ( ! ( ProjectWnd = OpenWindowTags( NULL,
  577.                 WA_Left,    wleft,
  578.                 WA_Top,     wtop,
  579.                 WA_Width,    ww + OffX + Scr->WBorRight,
  580.                 WA_Height,    wh + OffY + Scr->WBorBottom,
  581.                 WA_IDCMP,    IDCMP_NEWSIZE|LISTVIEWIDCMP|IDCMP_MENUPICK|IDCMP_CLOSEWINDOW|IDCMP_REFRESHWINDOW,
  582.                 WA_Flags,    WFLG_SIZEGADGET|WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_CLOSEGADGET|WFLG_SIZEBBOTTOM|WFLG_SMART_REFRESH,
  583.                 WA_Gadgets,    ProjectGList,
  584.                 WA_Title,    ProjectWdt,
  585.                 WA_CustomScreen,    Scr,
  586.                 WA_Activate ,    TRUE,
  587.                 WA_MinWidth,    360,
  588.                 WA_MinHeight,    100,
  589.                 WA_MaxWidth,    ~0,
  590.                 WA_MaxHeight,    ~0,
  591.                 TAG_DONE )))
  592.     return( 4L );
  593.  
  594.     SetMenuStrip( ProjectWnd, ProjectMenus );
  595.     GT_RefreshWindow( ProjectWnd, NULL );
  596.  
  597.     ProjectRender();
  598.  
  599.     return( 0L );
  600. }
  601.  
  602. void CloseProjectWindow( void )
  603. {
  604.     ComputeFont( ProjectWidth, ProjectHeight );
  605.  
  606.     ProjectTop = ProjectWnd->TopEdge;
  607.     ProjectLeft = ProjectWnd->LeftEdge;
  608.  
  609.     ProjectWidth = IComputeX( ProjectWnd->Width - OffX - Scr->WBorRight + 1 );
  610.     ProjectHeight = IComputeY( ProjectWnd->Height - OffY - Scr->WBorBottom + 1 );
  611.  
  612.     if ( ProjectMenus      ) {
  613.         ClearMenuStrip( ProjectWnd );
  614.         FreeMenus( ProjectMenus );
  615.         ProjectMenus = NULL;    }
  616.  
  617.     if ( ProjectWnd        ) {
  618.         CloseWindow( ProjectWnd );
  619.         ProjectWnd = NULL;
  620.     }
  621.  
  622.     if ( ProjectGList      ) {
  623.         FreeGadgets( ProjectGList );
  624.         ProjectGList = NULL;
  625.     }
  626. }
  627.  
  628. int HandleMessIDCMP( void )
  629. {
  630.     struct IntuiMessage    *m;
  631.     struct MenuItem     *n;
  632.     int            (*func)(void);
  633.     BOOL            running = TRUE;
  634.  
  635.     while( m = GT_GetIMsg( MessWnd->UserPort )) {
  636.  
  637.         CopyMem(( char * )m, ( char * )&MessMsg, (long)sizeof( struct IntuiMessage ));
  638.  
  639.         GT_ReplyIMsg( m );
  640.  
  641.         switch ( MessMsg.Class ) {
  642.  
  643.             case    IDCMP_REFRESHWINDOW:
  644.                 GT_BeginRefresh( MessWnd );
  645.                 GT_EndRefresh( MessWnd, TRUE );
  646.                 break;
  647.  
  648.             case    IDCMP_CLOSEWINDOW:
  649.                 running = MessCloseWindow();
  650.                 return( running );
  651.                 break;
  652.  
  653.             case    IDCMP_NEWSIZE:
  654.                 running = MessNewSize();
  655.                 break;
  656.  
  657.             case    IDCMP_GADGETUP:
  658.                 func = ( void * )(( struct Gadget * )MessMsg.IAddress )->UserData;
  659.                 running = func();
  660.                 break;
  661.  
  662.             case    IDCMP_MENUPICK:
  663.                 while( MessMsg.Code != MENUNULL ) {
  664.                     n = ItemAddress( ProjectMenus, MessMsg.Code );
  665.                     func = (void *)(GTMENUITEM_USERDATA( n ));
  666.                     running = func();
  667.                     MessMsg.Code = n->NextSelect;
  668.                 }
  669.                 break;
  670.         }
  671.     }
  672.     return( running );
  673. }
  674.  
  675. int OpenMessWindow( void )
  676. {
  677.     struct NewGadget    ng;
  678.     struct Gadget    *g;
  679.     UWORD        lc, tc;
  680.     UWORD        wleft = MessLeft, wtop = MessTop, ww, wh;
  681.  
  682.     ComputeFont( MessWidth, MessHeight );
  683.  
  684.     ww = ComputeX( MessWidth );
  685.     wh = ComputeY( MessHeight );
  686.  
  687.     if (( wleft + ww + OffX + Scr->WBorRight ) > Scr->Width ) wleft = Scr->Width - ww;
  688.     if (( wtop + wh + OffY + Scr->WBorBottom ) > Scr->Height ) wtop = Scr->Height - wh;
  689.  
  690.     if ( ! ( g = CreateContext( &MessGList )))
  691.         return( 1L );
  692.  
  693.     for( lc = 0, tc = 0; lc < Project_CNT; lc++ ) {
  694.  
  695.         CopyMem((char * )&MessNGad[ lc ], (char * )&ng, (long)sizeof( struct NewGadget ));
  696.  
  697.         ng.ng_VisualInfo = VisualInfo;
  698.         ng.ng_TextAttr     = Font;
  699.         ng.ng_LeftEdge     = OffX + ComputeX( ng.ng_LeftEdge );
  700.         ng.ng_TopEdge     = OffY + ComputeY( ng.ng_TopEdge );
  701.         ng.ng_Width     = ComputeX( MessWidth + ng.ng_Width );
  702.         ng.ng_Height     = ComputeY( MessHeight + ng.ng_Height);
  703.  
  704.         MessGadgets[ lc ] = g = CreateGadgetA((ULONG)MessGTypes[ lc ], g, &ng, ( struct TagItem * )&MessGTags[ tc ] );
  705.  
  706.         while( MessGTags[ tc ] ) tc += 2;
  707.         tc++;
  708.  
  709.         if ( NOT g )
  710.             return( 2L );
  711.     }
  712.  
  713.     if ( ! ( MessWnd = OpenWindowTags( NULL,
  714.                 WA_Left,    wleft,
  715.                 WA_Top,     wtop,
  716.                 WA_Width,    ww + OffX + Scr->WBorRight,
  717.                 WA_Height,    wh + OffY + Scr->WBorBottom,
  718.                 WA_IDCMP,    IDCMP_NEWSIZE|LISTVIEWIDCMP|IDCMP_MENUPICK|IDCMP_CLOSEWINDOW|IDCMP_REFRESHWINDOW,
  719.                 WA_Flags,    WFLG_SIZEGADGET|WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_CLOSEGADGET|WFLG_SIZEBBOTTOM|WFLG_SMART_REFRESH,
  720.                 WA_Gadgets,    MessGList,
  721.                 WA_Title,    "Project Handler : Messages",
  722.                 WA_CustomScreen,    Scr,
  723.                 WA_MinWidth,    360,
  724.                 WA_MinHeight,    70,
  725.                 WA_MaxWidth,    ~0,
  726.                 WA_MaxHeight,    ~0,
  727.                 TAG_DONE )))
  728.     return( 4L );
  729.  
  730.     SetMenuStrip( MessWnd, ProjectMenus );
  731.     GT_RefreshWindow( MessWnd, NULL );
  732.  
  733.     return( 0L );
  734. }
  735.  
  736. void CloseMessWindow( void )
  737. {
  738.     ComputeFont( MessWidth, MessHeight );
  739.  
  740.     MessTop = MessWnd->TopEdge;
  741.     MessLeft = MessWnd->LeftEdge;
  742.  
  743.     MessWidth = IComputeX( MessWnd->Width - OffX - Scr->WBorRight + 1 );
  744.     MessHeight = IComputeY( MessWnd->Height - OffY - Scr->WBorBottom + 1);
  745.  
  746.     if ( ProjectMenus      )
  747.         ClearMenuStrip( MessWnd );
  748.  
  749.     if ( MessWnd        ) {
  750.         CloseWindow( MessWnd );
  751.         MessWnd = NULL;
  752.     }
  753.  
  754.     if ( MessGList        ) {
  755.         FreeGadgets( MessGList );
  756.         MessGList = NULL;
  757.     }
  758. }
  759.  
  760. int OpenCListeWindow( char *title )
  761. {
  762.     struct NewGadget    ng;
  763.     struct Gadget    *g;
  764.     UWORD        lc, tc;
  765.     UWORD        wleft = 205, wtop = 140, ww, wh;
  766.  
  767.     ComputeFont( 274, 165 );
  768.  
  769.     ww = ComputeX( 274 );
  770.     wh = ComputeY( 165 );
  771.  
  772.     if (( wleft + ww + OffX + Scr->WBorRight ) > Scr->Width ) wleft = Scr->Width - ww;
  773.     if (( wtop + wh + OffY + Scr->WBorBottom ) > Scr->Height ) wtop = Scr->Height - wh;
  774.  
  775.     if ( ! ( g = CreateContext( &CListeGList )))
  776.         return( 1L );
  777.  
  778.     for( lc = 0, tc = 0; lc < Scr_CNT; lc++ ) {
  779.  
  780.         CopyMem((char * )&CListeNGad[ lc ], (char * )&ng, (long)sizeof( struct NewGadget ));
  781.  
  782.         ng.ng_VisualInfo = VisualInfo;
  783.         ng.ng_TextAttr     = ×13;
  784.         ng.ng_LeftEdge     = OffX + ComputeX( ng.ng_LeftEdge );
  785.         ng.ng_TopEdge     = OffY + ComputeY( ng.ng_TopEdge );
  786.         ng.ng_Width     = ComputeX( ng.ng_Width );
  787.         ng.ng_Height     = ComputeY( ng.ng_Height);
  788.  
  789.         CListeGadgets[ lc ] = g = CreateGadgetA((ULONG)CListeGTypes[ lc ], g, &ng, ( struct TagItem * )&CListeGTags[ tc ] );
  790.  
  791.         while( CListeGTags[ tc ] ) tc += 2;
  792.         tc++;
  793.  
  794.         if ( NOT g )
  795.             return( 2L );
  796.     }
  797.  
  798.     if ( ! ( CListeWnd = OpenWindowTags( NULL,
  799.                 WA_Left,    wleft,
  800.                 WA_Top,     wtop,
  801.                 WA_Width,    ww + OffX + Scr->WBorRight,
  802.                 WA_Height,    wh + OffY + Scr->WBorBottom,
  803.                 WA_IDCMP,    LISTVIEWIDCMP|IDCMP_CLOSEWINDOW|IDCMP_REFRESHWINDOW,
  804.                 WA_Flags,    WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_CLOSEGADGET|WFLG_SMART_REFRESH,
  805.                 WA_Gadgets,    CListeGList,
  806.                 WA_Title,    title,
  807.                 WA_CustomScreen,    Scr,
  808.                 TAG_DONE )))
  809.     return( 4L );
  810.  
  811.     GT_RefreshWindow( CListeWnd, NULL );
  812.  
  813.     return( 0L );
  814. }
  815.  
  816. void CloseCListeWindow( void )
  817. {
  818.     if ( CListeWnd          ) {
  819.         CloseWindow( CListeWnd );
  820.         CListeWnd = NULL;
  821.     }
  822.  
  823.     if ( CListeGList      ) {
  824.         FreeGadgets( CListeGList );
  825.         CListeGList = NULL;
  826.     }
  827. }
  828. int HandleDirSetIDCMP( void )
  829. {
  830.     struct IntuiMessage    *m;
  831.     int            (*func)(void);
  832.     BOOL            running = TRUE;
  833.  
  834.     while( m = GT_GetIMsg( DirSetWnd->UserPort )) {
  835.  
  836.         CopyMem(( char * )m, ( char * )&DirSetMsg, (long)sizeof( struct IntuiMessage ));
  837.  
  838.         GT_ReplyIMsg( m );
  839.  
  840.         switch ( DirSetMsg.Class ) {
  841.  
  842.             case    IDCMP_CLOSEWINDOW:
  843.                 running = DirSetCloseWindow();
  844.                 break;
  845.  
  846.             case    IDCMP_GADGETUP:
  847.                 func = ( void * )(( struct Gadget * )DirSetMsg.IAddress )->UserData;
  848.                 running = func();
  849.                 break;
  850.  
  851.                 break;
  852.         }
  853.     }
  854.     return( running );
  855. }
  856.  
  857. int OpenDirSetWindow( void )
  858. {
  859.     struct NewGadget    ng;
  860.     struct Gadget    *g;
  861.     UWORD        lc, tc;
  862.     UWORD        wleft = 182, wtop = 200, ww, wh;
  863.  
  864.     ComputeFont( 325, 135 );
  865.  
  866.     ww = ComputeX( 325 );
  867.     wh = ComputeY( 135 );
  868.  
  869.     if (( wleft + ww + OffX + Scr->WBorRight ) > Scr->Width ) wleft = Scr->Width - ww;
  870.     if (( wtop + wh + OffY + Scr->WBorBottom ) > Scr->Height ) wtop = Scr->Height - wh;
  871.  
  872.     if ( ! ( g = CreateContext( &DirSetGList )))
  873.         return( 1L );
  874.  
  875.     for( lc = 0, tc = 0; lc < DirSet_CNT; lc++ ) {
  876.  
  877.         CopyMem((char * )&DirSetNGad[ lc ], (char * )&ng, (long)sizeof( struct NewGadget ));
  878.  
  879.         ng.ng_VisualInfo = VisualInfo;
  880.         ng.ng_TextAttr     = ×13;
  881.         ng.ng_LeftEdge     = OffX + ComputeX( ng.ng_LeftEdge );
  882.         ng.ng_TopEdge     = OffY + ComputeY( ng.ng_TopEdge );
  883.         ng.ng_Width     = ComputeX( ng.ng_Width );
  884.         ng.ng_Height     = ComputeY( ng.ng_Height);
  885.  
  886.         DirSetGadgets[ lc ] = g = CreateGadgetA((ULONG)DirSetGTypes[ lc ], g, &ng, ( struct TagItem * )&DirSetGTags[ tc ] );
  887.  
  888.         while( DirSetGTags[ tc ] ) tc += 2;
  889.         tc++;
  890.  
  891.         if ( NOT g )
  892.             return( 2L );
  893.     }
  894.  
  895.     if ( ! ( DirSetWnd = OpenWindowTags( NULL,
  896.                 WA_Left,    wleft,
  897.                 WA_Top,     wtop,
  898.                 WA_Width,    ww + OffX + Scr->WBorRight,
  899.                 WA_Height,    wh + OffY + Scr->WBorBottom,
  900.                 WA_IDCMP,    BUTTONIDCMP|TEXTIDCMP|IDCMP_CLOSEWINDOW|IDCMP_REFRESHWINDOW,
  901.                 WA_Flags,    WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_CLOSEGADGET|WFLG_SMART_REFRESH|WFLG_RMBTRAP,
  902.                 WA_Gadgets,    DirSetGList,
  903.                 WA_Title,    DirSetWdt,
  904.                 WA_Activate ,    TRUE,
  905.                 WA_CustomScreen,    Scr,
  906.                 TAG_DONE )))
  907.     return( 4L );
  908.  
  909.     GT_RefreshWindow( DirSetWnd, NULL );
  910.  
  911.     return( 0L );
  912. }
  913.  
  914. void CloseDirSetWindow( void )
  915. {
  916.     if ( DirSetWnd          ) {
  917.         CloseWindow( DirSetWnd );
  918.         DirSetWnd = NULL;
  919.     }
  920.  
  921.     if ( DirSetGList      ) {
  922.         FreeGadgets( DirSetGList );
  923.         DirSetGList = NULL;
  924.     }
  925. }
  926.  
  927. void CompileRender( char *title )
  928. {
  929.     struct IntuiText    it;
  930.     UWORD            cnt;
  931.  
  932.     ComputeFont( 293,44 );
  933.  
  934.     SetAPen( CompileWnd->RPort , 0 );
  935.     RectFill( CompileWnd->RPort , 5 , 5 , ComputeX( 288 ) , Font->ta_YSize + 5 );
  936.     for ( cnt = 0; cnt < Compile_TNUM; cnt++ ) {
  937.         CopyMem(( char * )&CompileIText[ cnt ], ( char * )&it, (long)sizeof( struct IntuiText ));
  938.         it.IText = title;
  939.         it.ITextFont = Font;
  940.         it.LeftEdge  = OffX + ComputeX( it.LeftEdge ) - ( IntuiTextLength( &it ) >> 1 );
  941.         it.TopEdge   = OffY + ComputeY( it.TopEdge ) - ( Font->ta_YSize >> 1 );
  942.         PrintIText( CompileWnd->RPort, &it, 0, 0 );
  943.     }
  944. }
  945.  
  946. int OpenCompileWindow( char *title )
  947. {
  948.     struct NewGadget    ng;
  949.     struct Gadget    *g;
  950.     UWORD        lc, tc;
  951.     UWORD        wleft = ProjectWnd->LeftEdge + (ProjectWnd->Width>>1) - 146, wtop = ProjectWnd->TopEdge + (ProjectWnd->Height>>1) - 22, ww, wh;
  952.  
  953.     ComputeFont( 293, 44 );
  954.  
  955.     ww = ComputeX( 293 );
  956.     wh = ComputeY( 44 );
  957.  
  958.     if (( wleft + ww + OffX + Scr->WBorRight ) > Scr->Width ) wleft = Scr->Width - ww;
  959.     if (( wtop + wh + OffY + Scr->WBorBottom ) > Scr->Height ) wtop = Scr->Height - wh;
  960.  
  961.     if ( ! ( g = CreateContext( &CompileGList )))
  962.         return( 1L );
  963.  
  964.     for( lc = 0, tc = 0; lc < Compile_CNT; lc++ ) {
  965.  
  966.         CopyMem((char * )&CompileNGad[ lc ], (char * )&ng, (long)sizeof( struct NewGadget ));
  967.  
  968.         ng.ng_VisualInfo = VisualInfo;
  969.         ng.ng_TextAttr     = Font;
  970.         ng.ng_LeftEdge     = OffX + ComputeX( ng.ng_LeftEdge );
  971.         ng.ng_TopEdge     = OffY + ComputeY( ng.ng_TopEdge );
  972.         ng.ng_Width     = ComputeX( ng.ng_Width );
  973.         ng.ng_Height     = ComputeY( ng.ng_Height);
  974.  
  975.         CompileGadgets[ lc ] = g = CreateGadgetA((ULONG)CompileGTypes[ lc ], g, &ng, ( struct TagItem * )&CompileGTags[ tc ] );
  976.  
  977.         while( CompileGTags[ tc ] ) tc += 2;
  978.         tc++;
  979.  
  980.         if ( NOT g )
  981.             return( 2L );
  982.     }
  983.  
  984.     if ( ! ( CompileWnd = OpenWindowTags( NULL,
  985.                 WA_Left,    wleft,
  986.                 WA_Top,     wtop,
  987.                 WA_Width,    ww + OffX + Scr->WBorRight,
  988.                 WA_Height,    wh + OffY + Scr->WBorBottom,
  989.                 WA_IDCMP,    TEXTIDCMP|BUTTONIDCMP|IDCMP_REFRESHWINDOW,
  990.                 WA_Flags,    WFLG_SMART_REFRESH,
  991.                 WA_Gadgets,    CompileGList,
  992.                 WA_CustomScreen,    Scr,
  993.                 TAG_DONE )))
  994.     return( 4L );
  995.  
  996.     GT_RefreshWindow( CompileWnd, NULL );
  997.  
  998.     CompileRender( title );
  999.     return( 0L );
  1000. }
  1001.  
  1002. void CloseCompileWindow( void )
  1003. {
  1004.     if ( CompileWnd        ) {
  1005.         CloseWindow( CompileWnd );
  1006.         CompileWnd = NULL;
  1007.     }
  1008.  
  1009.     if ( CompileGList      ) {
  1010.         FreeGadgets( CompileGList );
  1011.         CompileGList = NULL;
  1012.     }
  1013. }
  1014.  
  1015. void CompilerOptRender( void )
  1016. {
  1017.     UWORD        offx, offy;
  1018.     struct TagItem bevelt[] = { GT_VisualInfo , VisualInfo , TAG_DONE };
  1019.     offx = CompilerOptWnd->BorderLeft;
  1020.     offy = CompilerOptWnd->BorderTop;
  1021.  
  1022.  
  1023.     DrawBevelBoxA( CompilerOptWnd->RPort, offx + 97, offy + 76, 91, 41, bevelt );
  1024.     DrawBevelBoxA( CompilerOptWnd->RPort, offx + 4, offy + 76, 91, 41, bevelt );
  1025.     DrawBevelBoxA( CompilerOptWnd->RPort, offx + 191, offy + 76, 209, 41, bevelt );
  1026.     DrawBevelBoxA( CompilerOptWnd->RPort, offx + 3, offy + 9, 185, 59, bevelt );
  1027.     DrawBevelBoxA( CompilerOptWnd->RPort, offx + 191, offy + 9, 209, 59, bevelt );
  1028.     DrawBevelBoxA( CompilerOptWnd->RPort, offx + 4, offy + 125, 396, 73, bevelt );
  1029.     PrintIText( CompilerOptWnd->RPort, CompilerOptIText, offx, offy );
  1030. }
  1031.  
  1032. int HandleCompilerOptIDCMP( void )
  1033. {
  1034.     struct IntuiMessage    *m;
  1035.     int            (*func)(void);
  1036.     BOOL            running = TRUE;
  1037.  
  1038.     while( m = GT_GetIMsg( CompilerOptWnd->UserPort )) {
  1039.  
  1040.         CopyMem(( char * )m, ( char * )&CompilerOptMsg, (long)sizeof( struct IntuiMessage ));
  1041.  
  1042.         GT_ReplyIMsg( m );
  1043.  
  1044.         switch ( CompilerOptMsg.Class ) {
  1045.  
  1046.             case    IDCMP_REFRESHWINDOW:
  1047.                 GT_BeginRefresh( CompilerOptWnd );
  1048.                 CompilerOptRender();
  1049.                 GT_EndRefresh( CompilerOptWnd, TRUE );
  1050.                 break;
  1051.  
  1052.             case    IDCMP_CLOSEWINDOW:
  1053.                 running = CompilerOptCloseWindow();
  1054.                 break;
  1055.  
  1056.             case    IDCMP_GADGETUP:
  1057.             case    IDCMP_GADGETDOWN:
  1058.                 func = ( void * )(( struct Gadget * )CompilerOptMsg.IAddress )->UserData;
  1059.                 running = func();
  1060.                 break;
  1061.  
  1062.                 break;
  1063.         }
  1064.     }
  1065.     return( running );
  1066. }
  1067.  
  1068. int OpenCompilerOptWindow( void )
  1069. {
  1070.     struct NewGadget    ng;
  1071.     struct Gadget    *g;
  1072.     UWORD        lc, tc;
  1073.     UWORD        offx = Scr->WBorLeft, offy = Scr->WBorTop + Scr->RastPort.TxHeight + 1;
  1074.  
  1075.     if ( ! ( g = CreateContext( &CompilerOptGList )))
  1076.         return( 1L );
  1077.  
  1078.     for( lc = 0, tc = 0; lc < CompilerOpt_CNT; lc++ ) {
  1079.  
  1080.         CopyMem((char * )&CompilerOptNGad[ lc ], (char * )&ng, (long)sizeof( struct NewGadget ));
  1081.  
  1082.         ng.ng_VisualInfo = VisualInfo;
  1083.         ng.ng_TextAttr     = ×13;
  1084.         ng.ng_LeftEdge    += offx;
  1085.         ng.ng_TopEdge    += offy;
  1086.  
  1087.         CompilerOptGadgets[ lc ] = g = CreateGadgetA((ULONG)CompilerOptGTypes[ lc ], g, &ng, ( struct TagItem * )&CompilerOptGTags[ tc ] );
  1088.  
  1089.         while( CompilerOptGTags[ tc ] ) tc += 2;
  1090.         tc++;
  1091.  
  1092.         if ( NOT g )
  1093.             return( 2L );
  1094.     }
  1095.  
  1096.     if ( ! ( CompilerOptWnd = OpenWindowTags( NULL,
  1097.                 WA_Left,    CompilerOptLeft,
  1098.                 WA_Top,     CompilerOptTop,
  1099.                 WA_Width,    CompilerOptWidth,
  1100.                 WA_Height,    CompilerOptHeight + offy,
  1101.                 WA_IDCMP,    CHECKBOXIDCMP|MXIDCMP|IDCMP_CLOSEWINDOW|IDCMP_REFRESHWINDOW,
  1102.                 WA_Flags,    WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_CLOSEGADGET|WFLG_SMART_REFRESH,
  1103.                 WA_Gadgets,    CompilerOptGList,
  1104.                 WA_Title,    CompilerOptWdt,
  1105.                 WA_CustomScreen,    Scr,
  1106.                 TAG_DONE )))
  1107.     return( 4L );
  1108.  
  1109.     GT_RefreshWindow( CompilerOptWnd, NULL );
  1110.  
  1111.     CompilerOptRender();
  1112.  
  1113.     return( 0L );
  1114. }
  1115.  
  1116. void CloseCompilerOptWindow( void )
  1117. {
  1118.     if ( CompilerOptWnd       ) {
  1119.         CloseWindow( CompilerOptWnd );
  1120.         CompilerOptWnd = NULL;
  1121.     }
  1122.  
  1123.     if ( CompilerOptGList       ) {
  1124.         FreeGadgets( CompilerOptGList );
  1125.         CompilerOptGList = NULL;
  1126.     }
  1127. }
  1128.  
  1129.