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

  1.  
  2. #include <exec/types.h>
  3. #include <libraries/asl.h>
  4. #include <intuition/intuition.h>
  5. #include <intuition/gadgetclass.h>
  6. #include <graphics/displayinfo.h>
  7. #include <graphics/gfxbase.h>
  8.  
  9. #include <clib/gadtools_protos.h>
  10. #include <clib/asl_protos.h>
  11. #include <clib/exec_protos.h>
  12. #include <clib/alib_protos.h>
  13. #include <clib/graphics_protos.h>
  14.  
  15. #include <stdlib.h>
  16. #include <string.h>
  17.  
  18. #include "project.h"
  19.  
  20. extern BOOL done,saved;
  21.  
  22. extern AttachList( void );
  23. extern DettachList( void );
  24.  
  25. struct CompilerOpts Config = {
  26.     CPU30,FPU82,
  27.     SMALL,SMALL,
  28.     FALSE,
  29.     FALSE,
  30.     FALSE,
  31.     FALSE,
  32.     FALSE,
  33.     FALSE,
  34.     REGARG,
  35.     FALSE,
  36.     0
  37. };
  38.  
  39. char *OptLine;
  40. char *OptFile;
  41.  
  42. char *DICEDir;
  43. char *SourceDir;
  44. char *DestDir;
  45. char *IncludeDir;
  46. char *LibDir;
  47. char *ObjDir;
  48.  
  49. ULONG DisplayScreen = PAL_MONITOR_ID|HIRESLACE_KEY;
  50.  
  51. struct CompilerOpts Config2;
  52.  
  53. void MakeOptions( void ) {
  54.   char temp[70];
  55.  
  56.     strcpy( temp , " -2.0" );
  57.     switch( Config.CPU ) {
  58.       case 1:
  59.     strcat( temp , " -020" );
  60.     break;
  61.       case 2:
  62.     strcat( temp , " -030" );
  63.     break;
  64.     }
  65.     switch( Config.FPU ) {
  66.       case 1:
  67.     strcat( temp , " -881" );
  68.     break;
  69.       case 2:
  70.     strcat( temp , " -882" );
  71.     break;
  72.     }
  73.     if ( Config.Data == SMALL )
  74.     strcat( temp , " -md" );
  75.     else
  76.     strcat( temp , " -mD" );
  77.     if ( Config.Code == SMALL )
  78.     strcat( temp , " -mc" );
  79.     else
  80.     strcat( temp , " -mC" );
  81.     if ( Config.RCalls == REGARG )
  82.     strcat( temp , " -mRR" );
  83.     if ( Config.ICalls )
  84.     strcat( temp , " -mi" );
  85.     if ( Config.Resident )
  86.     strcat( temp , " -r" );
  87.     if ( Config.DStack )
  88.     strcat( temp , " -gs" );
  89.     if ( Config.Chip )
  90.     strcat( temp , " -chip" );
  91.     if ( Config.Hunk )
  92.     strcat( temp , " -pi" );
  93.     if ( Config.DebugI )
  94.     strcat( temp , " -s" );
  95.     if ( Config.DebugL )
  96.     strcat( temp , " -d1" );
  97.     switch( Config.HunkCode ) {
  98.       case 1:
  99.     strcat( temp , " -ms" );
  100.     break;
  101.       case 2:
  102.     strcat( temp , " -ms2" );
  103.     break;
  104.     }
  105.     ReplaceChar( &OptLine , temp );
  106. }
  107.  
  108.  
  109. /****************************************************************************
  110. ***                                      ***
  111. ***    Actions des boutons de la fenêtre DirSet              ***
  112. ***                                      ***
  113. ****************************************************************************/
  114.  
  115. int SourceClicked( void )
  116. {
  117.   struct FileRequester *fr;
  118.   struct ModuleNode *wn=ModuleList->lh_Head;
  119.  
  120.     if (fr = AskDirectory( "Select sources path" , SourceDir )) {
  121.     ReplaceChar( &SourceDir , fr->rf_Dir );
  122.     FreeAslRequest(fr);
  123.     ttag[0].ti_Data = (long)SourceDir;
  124.     GT_SetGadgetAttrsA( DirSetGadgets[6] , DirSetWnd , NULL , ttag );
  125.     }
  126. }
  127.  
  128. int DestClicked( void )
  129. {
  130.   struct FileRequester *fr;
  131.  
  132.     if (fr = AskDirectory( "Select destination path" , DestDir )) {
  133.     ReplaceChar( &DestDir , fr->rf_Dir );
  134.     FreeAslRequest(fr);
  135.     ttag[0].ti_Data = (long)DestDir;
  136.     GT_SetGadgetAttrsA( DirSetGadgets[7] , DirSetWnd , NULL , ttag );
  137.     }
  138. }
  139.  
  140. int IncludeClicked( void )
  141. {
  142.   struct FileRequester *fr;
  143.  
  144.     if (fr = AskDirectory( "Select includes path" , IncludeDir )) {
  145.     ReplaceChar( &IncludeDir , fr->rf_Dir );
  146.     FreeAslRequest(fr);
  147.     ttag[0].ti_Data = (long)IncludeDir;
  148.     GT_SetGadgetAttrsA( DirSetGadgets[8] , DirSetWnd , NULL , ttag );
  149.     }
  150. }
  151.  
  152. int LibClicked( void )
  153. {
  154.   struct FileRequester *fr;
  155.  
  156.     if (fr = AskDirectory( "Select libraries path" , LibDir )) {
  157.     ReplaceChar( &LibDir , fr->rf_Dir );
  158.     FreeAslRequest(fr);
  159.     ttag[0].ti_Data = (long)LibDir;
  160.     GT_SetGadgetAttrsA( DirSetGadgets[9] , DirSetWnd , NULL , ttag );
  161.     }
  162. }
  163.  
  164. int ObjClicked( void )
  165. {
  166.   struct FileRequester *fr;
  167.  
  168.     if (fr = AskDirectory( "Select objects path" , ObjDir )) {
  169.     ReplaceChar( &ObjDir , fr->rf_Dir );
  170.     FreeAslRequest(fr);
  171.     ttag[0].ti_Data = (long)ObjDir;
  172.     GT_SetGadgetAttrsA( DirSetGadgets[10] , DirSetWnd , NULL , ttag );
  173.     }
  174. }
  175.  
  176. int PrgClicked( void )
  177. {
  178.   struct FileRequester *fr;
  179.  
  180.     if (fr = AskDirectory( "Select objects path" , DICEDir )) {
  181.     ChangeDICEDir( fr->rf_Dir );
  182.     FreeAslRequest(fr);
  183.     ttag[0].ti_Data = (long)DICEDir;
  184.     GT_SetGadgetAttrsA( DirSetGadgets[11] , DirSetWnd , NULL , ttag );
  185.     }
  186. }
  187.  
  188. /****************************************************************************
  189. ***                                      ***
  190. ***    Action des boutons de la fenêtre d'options de compilation         ***
  191. ***                                      ***
  192. ****************************************************************************/
  193.  
  194. int RelocClicked( void )
  195. {
  196.     if ( CompilerOptGadgets[0]->Flags & GFLG_SELECTED )
  197.     Config2.Hunk = TRUE;
  198.     else
  199.     Config2.Hunk = FALSE;
  200. }
  201.  
  202. int ResidentClicked( void )
  203. {
  204.     if ( CompilerOptGadgets[1]->Flags & GFLG_SELECTED )
  205.     Config2.Resident = TRUE;
  206.     else
  207.     Config2.Resident = FALSE;
  208. }
  209.  
  210. int DInfoClicked( void )
  211. {
  212.     if ( CompilerOptGadgets[2]->Flags & GFLG_SELECTED )
  213.     Config2.DebugI = TRUE;
  214.     else
  215.     Config2.DebugI = FALSE;
  216. }
  217.  
  218. int DLevelClicked( void )
  219. {
  220.     if ( CompilerOptGadgets[3]->Flags & GFLG_SELECTED )
  221.     Config2.DebugL = TRUE;
  222.     else
  223.     Config2.DebugL = FALSE;
  224. }
  225.  
  226. int StackClicked( void )
  227. {
  228.     if ( CompilerOptGadgets[4]->Flags & GFLG_SELECTED )
  229.     Config2.DStack = TRUE;
  230.     else
  231.     Config2.DStack = FALSE;
  232. }
  233.  
  234. int ChipClicked( void )
  235. {
  236.     if ( CompilerOptGadgets[5]->Flags & GFLG_SELECTED )
  237.     Config2.Chip = TRUE;
  238.     else
  239.     Config2.Chip = FALSE;
  240. }
  241.  
  242. int CPUClicked( void )
  243. {
  244.     Config2.CPU = CompilerOptMsg.Code;
  245. }
  246.  
  247. int FPUClicked( void )
  248. {
  249.     Config2.FPU = CompilerOptMsg.Code;
  250. }
  251.  
  252. int DataClicked( void )
  253. {
  254.     Config2.Data = CompilerOptMsg.Code;
  255. }
  256.  
  257. int CodeClicked( void )
  258. {
  259.     Config2.Code = CompilerOptMsg.Code;
  260. }
  261.  
  262. int CallsClicked( void )
  263. {
  264.     Config2.RCalls = CompilerOptMsg.Code;
  265. }
  266.  
  267. int InlineClicked( void )
  268. {
  269.     if ( CompilerOptGadgets[11]->Flags & GFLG_SELECTED )
  270.     Config2.ICalls = TRUE;
  271.     else
  272.     Config2.ICalls = FALSE;
  273. }
  274.  
  275. int HunkClicked( void )
  276. {
  277.     Config2.HunkCode = CompilerOptMsg.Code;
  278. }
  279.  
  280. int ProjectDirectory( void )
  281. {
  282.   char *SSource,*SDest,*SInclude,*SLib,*SObj,*SDICE;
  283.  
  284.     SSource = strdup( SourceDir );
  285.     SDest = strdup( DestDir );
  286.     SInclude = strdup( IncludeDir );
  287.     SLib = strdup( LibDir );
  288.     SObj = strdup( ObjDir );
  289.     SDICE = strdup( DICEDir );
  290.     if ( !OpenDirSetWindow( ) ) {
  291.     ttag[0].ti_Data = (long)SourceDir;
  292.     GT_SetGadgetAttrsA( DirSetGadgets[6] , DirSetWnd , NULL , ttag );
  293.     ttag[0].ti_Data = (long)DestDir;
  294.     GT_SetGadgetAttrsA( DirSetGadgets[7] , DirSetWnd , NULL , ttag );
  295.     ttag[0].ti_Data = (long)IncludeDir;
  296.     GT_SetGadgetAttrsA( DirSetGadgets[8] , DirSetWnd , NULL , ttag );
  297.     ttag[0].ti_Data = (long)LibDir;
  298.     GT_SetGadgetAttrsA( DirSetGadgets[9] , DirSetWnd , NULL , ttag );
  299.     ttag[0].ti_Data = (long)ObjDir;
  300.     GT_SetGadgetAttrsA( DirSetGadgets[10] , DirSetWnd , NULL , ttag );
  301.     ttag[0].ti_Data = (long)DICEDir;
  302.     GT_SetGadgetAttrsA( DirSetGadgets[11] , DirSetWnd , NULL , ttag );
  303.     while ( !done ) {
  304.         Wait( 1 << DirSetWnd->UserPort->mp_SigBit );
  305.         HandleDirSetIDCMP( );
  306.     }
  307.     done = FALSE;
  308.     CloseDirSetWindow( );
  309.     RemoveAssign( );
  310.     MakeAssign( );
  311.     UpdateNameList( );
  312.     if ( strcmp( SSource , SourceDir ) || strcmp( SDest , DestDir ) ||
  313.         strcmp( SInclude , IncludeDir ) || strcmp( SLib , LibDir ) ||
  314.         strcmp( SObj , ObjDir ) || strcmp( SDICE , DICEDir ) )
  315.         saved = FALSE;
  316.     }
  317.     free( SSource );
  318.     free( SDest );
  319.     free( SInclude );
  320.     free( SLib );
  321.     free( SObj );
  322.     free( SDICE );
  323. }
  324.  
  325. int ProjectCompilerOpt( void )
  326. {
  327.     struct TagItem CheckTag[] = { GTCB_Checked , 0 , TAG_DONE };
  328.     struct TagItem MXTag[] = { GTMX_Active , 0 , TAG_DONE };
  329.  
  330.     if ( !OpenCompilerOptWindow( ) ) {
  331.     memcpy( &Config2 , &Config , sizeof( struct CompilerOpts ) );
  332.     CheckTag[0].ti_Data = (long)Config2.Hunk;
  333.     GT_SetGadgetAttrsA( CompilerOptGadgets[0] , CompilerOptWnd , NULL , CheckTag );
  334.     CheckTag[0].ti_Data = (long)Config2.Resident;
  335.     GT_SetGadgetAttrsA( CompilerOptGadgets[1] , CompilerOptWnd , NULL , CheckTag );
  336.     MXTag[0].ti_Data = (long)Config2.HunkCode;
  337.     GT_SetGadgetAttrsA( CompilerOptGadgets[12] , CompilerOptWnd , NULL , MXTag );
  338.     CheckTag[0].ti_Data = (long)Config2.ICalls;
  339.     GT_SetGadgetAttrsA( CompilerOptGadgets[11] , CompilerOptWnd , NULL , CheckTag );
  340.     MXTag[0].ti_Data = (long)Config2.RCalls;
  341.     GT_SetGadgetAttrsA( CompilerOptGadgets[10] , CompilerOptWnd , NULL , MXTag );
  342.     MXTag[0].ti_Data = (long)Config2.Code;
  343.     GT_SetGadgetAttrsA( CompilerOptGadgets[9] , CompilerOptWnd , NULL , MXTag );
  344.     MXTag[0].ti_Data = (long)Config2.Data;
  345.     GT_SetGadgetAttrsA( CompilerOptGadgets[8] , CompilerOptWnd , NULL , MXTag );
  346.     MXTag[0].ti_Data = (long)Config2.FPU;
  347.     GT_SetGadgetAttrsA( CompilerOptGadgets[7] , CompilerOptWnd , NULL , MXTag );
  348.     MXTag[0].ti_Data = (long)Config2.CPU;
  349.     GT_SetGadgetAttrsA( CompilerOptGadgets[6] , CompilerOptWnd , NULL , MXTag );
  350.     CheckTag[0].ti_Data = (long)Config2.Chip;
  351.     GT_SetGadgetAttrsA( CompilerOptGadgets[5] , CompilerOptWnd , NULL , CheckTag );
  352.     CheckTag[0].ti_Data = (long)Config2.DStack;
  353.     GT_SetGadgetAttrsA( CompilerOptGadgets[4] , CompilerOptWnd , NULL , CheckTag );
  354.     CheckTag[0].ti_Data = (long)Config2.DebugL;
  355.     GT_SetGadgetAttrsA( CompilerOptGadgets[3] , CompilerOptWnd , NULL , CheckTag );
  356.     CheckTag[0].ti_Data = (long)Config2.DebugI;
  357.     GT_SetGadgetAttrsA( CompilerOptGadgets[2] , CompilerOptWnd , NULL , CheckTag );
  358.     while( !done ) {
  359.         Wait( 1 << CompilerOptWnd->UserPort->mp_SigBit );
  360.         HandleCompilerOptIDCMP( );
  361.     }
  362.     CloseCompilerOptWindow( );
  363.     done = FALSE;
  364.     if ( memcmp( &Config , &Config2 , sizeof( struct CompilerOpts ) ) )
  365.         saved = FALSE;
  366.     memcpy( &Config , &Config2 , sizeof( struct CompilerOpts ) );
  367.     MakeOptions( );
  368.     }
  369. }
  370.  
  371. struct ScreenNode {
  372.     struct Node node;
  373.     char *name;
  374.     ULONG ID;
  375. };
  376.  
  377. void FreeScrList( struct List *ScrList ) {
  378.   struct ScreenNode *mn,*on;
  379.  
  380.     if ( ScrList ) {
  381.     mn = ScrList->lh_Head;
  382.     while( on = mn->node.ln_Succ ) {
  383.         free( mn->name );
  384.         Remove( (struct Node *)mn );
  385.         free( mn );
  386.         mn = on;
  387.     }
  388.     ScrList = NULL;
  389.     }
  390. }
  391.  
  392. void AddScrList( struct List *ScrList , char *name , ULONG ID ) {
  393.   struct ScreenNode *mn = malloc( sizeof(struct ScreenNode) );
  394.  
  395.     if ( FindName( ScrList , name ) )
  396.     return;
  397.     mn->name = strdup( name );
  398.     mn->ID = ID;
  399.     mn->node.ln_Name = mn->name;
  400.     AddTail( ScrList , (struct Node *)mn );
  401. }
  402.  
  403. void UpdateScreen( void ) {
  404.         DettachList( );
  405.         MessCloseWindow( );
  406.         CloseProjectWindow( );
  407.         CloseDownScreen( );
  408.         SetupScreen( );
  409.         OpenProjectWindow( );
  410.         ChangeProjectName( ProjectPathName );
  411.         AttachList( );
  412. }
  413.  
  414. int ProjectScreenOpt( void )
  415. {
  416.   ULONG DisplayID=INVALID_ID;
  417.   struct List ScreenList;
  418.   struct ScreenNode *node;
  419.   char buf[200];
  420.   ULONG OldDispID = DisplayScreen;
  421.  
  422.     NewList( &ScreenList );
  423.     do {
  424.     DisplayID = NextDisplayInfo( DisplayID );
  425.     if ( GetDisplayInfoData( NULL , buf , 200 , DTAG_NAME , DisplayID ) )
  426.         AddScrList( &ScreenList , &buf[16] , DisplayID );
  427.     } while( DisplayID != INVALID_ID );
  428.     if ( node = ChooseInList( "Select Display Mode :" , &ScreenList ) ) {
  429.     DisplayScreen = node->ID;
  430.     if ( DisplayScreen != OldDispID ) {
  431.         UpdateScreen( );
  432.         saved = FALSE;
  433.     }
  434.     }
  435.     FreeScrList( &ScreenList );
  436. }
  437.  
  438. BOOL VerifPrj( char *prj , char *ct , FILE *in ) {
  439.   char name[200];;
  440.  
  441.     InputString( name , 200 , in );
  442.     if ( strcmp( name , ct ) ) {
  443.     strcpy( name , "File " );
  444.     strcat( name , BaseName( prj ) );
  445.     strcat( name , " is not a project file !" );
  446.     Message( ProjectWnd , name , "OK" );
  447.     return( FALSE );
  448.     }
  449.     return( TRUE );
  450. }
  451.  
  452. BOOL LoadOptions( char *pf , FILE *fin ) {
  453.   char name[201];
  454.  
  455.     if ( VerifPrj( pf , "%PROJECTFILE%" , fin ) ) {
  456.     if ( VerifPrj( pf , "%SCREEN%" , fin ) ) {
  457.         fread( &DisplayScreen , 4 , 1 , fin );
  458.         if ( VerifPrj( pf , "%OPTS%" , fin ) ) {
  459.         fread( &Config , sizeof(struct CompilerOpts) , 1 , fin );
  460.         MakeOptions( );
  461.         if ( VerifPrj( pf , "%DIRS%" , fin ) ) {
  462.             InputString( name , 200 , fin );
  463.             ChangeDICEDir( name );
  464.             InputString( name , 200 , fin );
  465.             ReplaceChar( &SourceDir , name );
  466.             InputString( name , 200 , fin );
  467.             ReplaceChar( &DestDir , name );
  468.             InputString( name , 200 , fin );
  469.             ReplaceChar( &IncludeDir , name );
  470.             InputString( name , 200 , fin );
  471.             ReplaceChar( &LibDir , name );
  472.             InputString( name , 200 , fin );
  473.             ReplaceChar( &ObjDir , name );
  474.             return( TRUE );
  475.         }
  476.         }
  477.     }
  478.     }
  479.     return( FALSE );
  480. }
  481.  
  482. void SaveOptions( FILE *fout ) {
  483.     fputs( "%PROJECTFILE%\n" , fout );
  484.     fputs( "%SCREEN%\n" , fout );
  485.     fwrite( &DisplayScreen , 4 , 1 , fout );
  486.     fputs( "%OPTS%\n" , fout );
  487.     fwrite( &Config , sizeof(struct CompilerOpts) , 1 , fout );
  488.     fputs( "%DIRS%\n" , fout );
  489.     OutputString( DICEDir , fout );
  490.     OutputString( SourceDir , fout );
  491.     OutputString( DestDir , fout );
  492.     OutputString( IncludeDir , fout );
  493.     OutputString( LibDir , fout );
  494.     OutputString( ObjDir , fout );
  495. }
  496.  
  497. void LoadPrefs( void )
  498. {
  499.   FILE *in;
  500.  
  501.     if ( in=fopen("ENV:project.prefs","r") ) {
  502.     LoadOptions( "ENV:project.prefs" , in );
  503.     fclose( in );
  504.     }
  505. }
  506.  
  507. void SavePrefs( void )
  508. {
  509.   FILE *out;
  510.  
  511.     if ( out=fopen("ENVARC:project.prefs","w") ) {
  512.     SaveOptions( out );
  513.     fclose( out );
  514.     }
  515.     if ( out=fopen("ENV:project.prefs","w") ) {
  516.     SaveOptions( out );
  517.     fclose( out );
  518.     }
  519. }
  520.  
  521.