home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS - Coast to Coast / simteldosarchivecoasttocoast2.iso / biology / gsrc208a.zip / EDMETNAM.C < prev    next >
C/C++ Source or Header  |  1992-12-06  |  9KB  |  287 lines

  1. #include "copyleft.h"
  2.  
  3. /*
  4.     GEPASI - a simulator of metabolic pathways and other dynamical systems
  5.     Copyright (C) 1989, 1992  Pedro Mendes
  6. */
  7.  
  8. /*************************************/
  9. /*                                   */
  10. /*          GWTOP - Topology         */
  11. /*        MS-WINDOWS front end       */
  12. /*                                   */
  13. /*       Metabolites dialog box      */
  14. /*                                   */
  15. /*           QuickC/WIN 1.0          */
  16. /*                                   */
  17. /*   (include here compilers that    */
  18. /*   compiled GWSIM successfully)    */
  19. /*                                   */
  20. /*************************************/
  21.  
  22.  
  23. #include <windows.h>
  24. #include <stdio.h>
  25. #include <string.h>
  26. #include "defines.h"                    /* symbols also used in .DLG files        */
  27. #include "globals.h"                    /* gepasi's own symbols                    */
  28. #include "gwtop.h"                        /* macros, function prototypes, etc.    */
  29. #include "gep1.h"                        /* gepasi's variables                    */
  30. #include "topgvar.h"                    /* global variables                        */
  31.  
  32. #pragma alloc_text( CODE5, EdMetnam )
  33.  
  34. BOOL FAR PASCAL EdMetnam(HWND hDlg, WORD Message, WORD wParam, LONG lParam)
  35. {
  36.  static int i, j, k, first, last, lots;
  37.  HWND hCtrl;
  38.  int len;
  39.  char strA[5];
  40.  static BOOL circle;
  41.  
  42.  switch(Message)
  43.    {
  44.     case WM_INITDIALOG:
  45.          /* copy metname to its mirror                                    */
  46.          _fmemcpy( (void __far *) metn,
  47.                    (void __far *) metname,
  48.                    (size_t) MAX_MET * NAME_L * sizeof( char ) );
  49.          /* copy intmet to its mirror                                    */
  50.          _fmemcpy( (void __far *) intm,
  51.                        (void __far *) intmet,
  52.                     (size_t) totmet * sizeof( int ) );
  53.  
  54.     case WM_USER+1:
  55.          /* initialize working variables                                */
  56.          if (totmet >= 10 ) last = 10;
  57.          else               last = totmet;
  58.          if (totmet > 10 )  lots = TRUE;
  59.          else               lots = FALSE;
  60.          first = 0;
  61.          circle = FALSE;
  62.  
  63.          /* initialize radio buttons                                    */
  64.          for( j=first, i=IDRB_0I; j<last; j++, i+=2 )
  65.           SendDlgItemMessage( hDlg, i, BM_SETCHECK, (WORD) intm[j], (DWORD) 0 );
  66.          for( j=first, i=IDRB_0E; j<last; j++, i+=2 )
  67.           SendDlgItemMessage( hDlg, i, BM_SETCHECK, (WORD) !intm[j], (DWORD) 0 );
  68.  
  69.          /* initialize edit boxes                                        */
  70.          for( j=first, i=IDE_M0; j<last; j++, i++ )
  71.           SetDlgItemText( hDlg, i, (LPSTR) metn[j]);
  72.  
  73.          /* show from first to last                                        */
  74.          for( j=first, i=IDRB_0E, k=IDE_M0; j<last; j++, i+=2, k++ )
  75.          {
  76.           hCtrl = GetDlgItem( hDlg, k );
  77.           ShowWindow( hCtrl, SW_SHOW );
  78.           hCtrl = GetDlgItem( hDlg, i );
  79.           ShowWindow( hCtrl, SW_SHOW );
  80.           hCtrl = GetDlgItem( hDlg, i+1 );
  81.           ShowWindow( hCtrl, SW_SHOW );
  82.          }
  83.  
  84.          /* hide from last to 9                                            */
  85.          for( j=last; j<10; j++, i+=2, k++ )
  86.          {
  87.           hCtrl = GetDlgItem( hDlg, k );
  88.           ShowWindow( hCtrl, SW_HIDE );
  89.           hCtrl = GetDlgItem( hDlg, i );
  90.           ShowWindow( hCtrl, SW_HIDE );
  91.           hCtrl = GetDlgItem( hDlg, i+1 );
  92.           ShowWindow( hCtrl, SW_HIDE );
  93.          }
  94.  
  95.          hCtrl = GetDlgItem( hDlg, ID_MORE );
  96.          if (lots) ShowWindow( hCtrl, SW_SHOW );
  97.          else      ShowWindow( hCtrl, SW_HIDE );
  98.          break;
  99.          /* End of WM_INITDIALOG                                         */
  100.  
  101.     case WM_COMMAND:
  102.          switch(wParam)
  103.          {
  104.             case IDRB_0E:
  105.                  intm[first+0] = 0;
  106.                  break;
  107.  
  108.             case IDRB_0I:
  109.                  intm[first+0] = 1;
  110.                  break;
  111.  
  112.             case IDRB_1E:
  113.                  intm[first+1] = 0;
  114.                  break;
  115.  
  116.             case IDRB_1I:
  117.                  intm[first+1] = 1;
  118.                  break;
  119.  
  120.             case IDRB_2E:
  121.                  intm[first+2] = 0;
  122.                  break;
  123.  
  124.             case IDRB_2I:
  125.                  intm[first+2] = 1;
  126.                  break;
  127.  
  128.             case IDRB_3E:
  129.                  intm[first+3] = 0;
  130.                  break;
  131.  
  132.             case IDRB_3I:
  133.                  intm[first+3] = 1;
  134.                  break;
  135.  
  136.             case IDRB_4E:
  137.                  intm[first+4] = 0;
  138.                  break;
  139.  
  140.             case IDRB_4I:
  141.                  intm[first+4] = 1;
  142.                  break;
  143.  
  144.             case IDRB_5E:
  145.                  intm[first+5] = 0;
  146.                  break;
  147.  
  148.             case IDRB_5I:
  149.                  intm[first+5] = 1;
  150.                  break;
  151.  
  152.             case IDRB_6E:
  153.                  intm[first+6] = 0;
  154.                  break;
  155.  
  156.             case IDRB_6I:
  157.                  intm[first+6] = 1;
  158.                  break;
  159.  
  160.             case IDRB_7E:
  161.                  intm[first+7] = 0;
  162.                  break;
  163.  
  164.             case IDRB_7I:
  165.                  intm[first+7] = 1;
  166.                  break;
  167.  
  168.             case IDRB_8E:
  169.                  intm[first+8] = 0;
  170.                  break;
  171.  
  172.             case IDRB_8I:
  173.                  intm[first+8] = 1;
  174.                  break;
  175.  
  176.             case IDRB_9E:
  177.                  intm[first+9] = 0;
  178.                  break;
  179.  
  180.             case IDRB_9I:
  181.                  intm[first+9] = 1;
  182.                  break;
  183.  
  184.             case IDCANCEL:
  185.                  /* Ignore data values entered into the controls        */
  186.                  /* and dismiss the dialog window returning FALSE       */
  187.                  EndDialog(hDlg, FALSE);
  188.                  break;
  189.  
  190.             case ID_MORE:
  191.                  /* save current changes                                */
  192.                  for( i=IDE_M0, j=first; j<last; i++, j++)
  193.                  {
  194.                   len = GetDlgItemText( hDlg, i, (LPSTR) metn[j], NAME_L-1 );
  195.                   if( len==0 )
  196.                   {
  197.                    wsprintf( strA, "%c%d", intm[j] ? 'S' : 'X', j+1 );
  198.                    lstrcpy( (LPSTR) metn[j], (LPSTR) strA );
  199.                   }
  200.                  }
  201.  
  202.                  /* check need for going back to begginning                */
  203.                  if ( circle )
  204.                  {
  205.                   circle = FALSE;
  206.                   SendMessage( hDlg, WM_USER+1, (WORD) 0, (DWORD) 0 );
  207.                   break;
  208.                  }
  209.  
  210.                  /* update working variables                            */
  211.                   first = last;
  212.                   last += 10;
  213.                   if ( last >= totmet )
  214.                   {
  215.                     last = totmet;
  216.                     circle = TRUE;
  217.                   }
  218.  
  219.                   /* update radio buttons                                        */
  220.                   for( j=first, i=IDRB_0I; j<last; j++, i+=2 )
  221.                     SendDlgItemMessage( hDlg, i, BM_SETCHECK, (WORD) intm[j], (DWORD) 0 );
  222.                   for( j=first, i=IDRB_0E; j<last; j++, i+=2 )
  223.                     SendDlgItemMessage( hDlg, i, BM_SETCHECK, (WORD) !intm[j], (DWORD) 0 );
  224.  
  225.                  /* update edit boxes                                            */
  226.                  for( j=first, i=IDE_M0; j<last; j++, i++ )
  227.                     SetDlgItemText( hDlg, i, (LPSTR) metn[j]);
  228.  
  229.                   /* show from first to last                                        */
  230.                     for( j=first, i=IDRB_0E, k=IDE_M0; j<last; j++, i+=2, k++ )
  231.                   {
  232.                     hCtrl = GetDlgItem( hDlg, k );
  233.                     ShowWindow( hCtrl, SW_SHOW );
  234.                     hCtrl = GetDlgItem( hDlg, i );
  235.                     ShowWindow( hCtrl, SW_SHOW );
  236.                     hCtrl = GetDlgItem( hDlg, i+1 );
  237.                     ShowWindow( hCtrl, SW_SHOW );
  238.                   }
  239.  
  240.                   /* hide from last to 9                                            */
  241.                   for( ; k<=IDE_M9; i+=2, k++ )
  242.                   {
  243.                     hCtrl = GetDlgItem( hDlg, k );
  244.                     ShowWindow( hCtrl, SW_HIDE );
  245.                     hCtrl = GetDlgItem( hDlg, i );
  246.                     ShowWindow( hCtrl, SW_HIDE );
  247.                     hCtrl = GetDlgItem( hDlg, i+1 );
  248.                     ShowWindow( hCtrl, SW_HIDE );
  249.                   }
  250.                   break;
  251.  
  252.             case IDC_HELP:                        /* Help on this Dialog Box              */
  253.                 WinHelp( hDlg, (LPSTR) szHelpFile, HELP_KEY, (DWORD) (LPSTR) "Metabolite editor" );
  254.              break;
  255.  
  256.             case IDOK:
  257.              for( i=IDE_M0, j=first; j<last; i++, j++)
  258.              {
  259.               len = GetDlgItemText( hDlg, i, (LPSTR) metn[j], NAME_L-1 );
  260.               if( len==0 )
  261.               {
  262.                wsprintf( strA, "%c%d", intm[j] ? 'S' : 'X', j );
  263.                lstrcpy( (LPSTR) metn[j], (LPSTR) strA );
  264.               }
  265.              }
  266.              /* copy metname back from its mirror                                    */
  267.              _fmemcpy( (void __far *) metname,
  268.                        (void __far *) metn,
  269.                        (size_t) MAX_MET * NAME_L * sizeof( char ) );
  270.              /* copy intmet back from its mirror                                    */
  271.              _fmemcpy( (void __far *) intmet,
  272.                              (void __far *) intm,
  273.                        (size_t) totmet * sizeof( int ) );
  274.              notsaved = 1;
  275.              EndDialog(hDlg, TRUE);
  276.              break;
  277.          }
  278.          break;    /* End of WM_COMMAND                                 */
  279.  
  280.     default:
  281.         return FALSE;
  282.    }
  283.  return TRUE;
  284. } /* End of METNAMMsgProc                                      */
  285.  
  286.  
  287.