Subversion Repositories wimsdev

Rev

Rev 6786 | Rev 6788 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 6786 Rev 6787
Line 1073... Line 1073...
1073
     char *trimstr;
1073
     char *trimstr;
1074
{
1074
{
1075
  char numstr[256];
1075
  char numstr[256];
1076
  char auxstr[256];
1076
  char auxstr[256];
1077
  int auxint = 0;
1077
  int auxint = 0;
1078
 /* int code;*/
-
 
1079
  char STR1[256];
1078
  char STR1[256];
1080
 
1079
 
1081
  strcpy (numstr, "-+0123456789");
1080
  strcpy (numstr, "-+0123456789");
1082
  *auxstr = '\0';
1081
  *auxstr = '\0';
1083
  while (*trimstr != '\0' && (trimstr[0] == ' ' || trimstr[0] == TAB))
1082
  while (*trimstr != '\0' && (trimstr[0] == ' ' || trimstr[0] == TAB))
Line 1086... Line 1085...
1086
         (strpos2 (numstr, (sprintf (STR1, "%c", trimstr[0]), STR1), 1) > 0))
1085
         (strpos2 (numstr, (sprintf (STR1, "%c", trimstr[0]), STR1), 1) > 0))
1087
    {
1086
    {
1088
      sprintf (auxstr + strlen (auxstr), "%c", trimstr[0]);
1087
      sprintf (auxstr + strlen (auxstr), "%c", trimstr[0]);
1089
      strdelete (trimstr, 1, 1);
1088
      strdelete (trimstr, 1, 1);
1090
    }
1089
    }
1091
 /* code = (sscanf (auxstr, "%d", &auxint) == 0);*/
-
 
1092
  return auxint;
1090
  return auxint;
1093
}
1091
}
1094
 
1092
 
1095
static int
1093
static int
1096
path_pos (int id, int *a_path)
1094
path_pos (int id, int *a_path)
Line 2673... Line 2671...
2673
static void
2671
static void
2674
read_molfile (mfilename)
2672
read_molfile (mfilename)
2675
     char *mfilename;
2673
     char *mfilename;
2676
{
2674
{
2677
  /* reads ALCHEMY mol files */
2675
  /* reads ALCHEMY mol files */
2678
  int n, code;
2676
  int n;
2679
  char rline[256], tmpstr[256];
2677
  char rline[256], tmpstr[256];
2680
  char xstr[256], ystr[256], zstr[256], chgstr[256];
2678
  char xstr[256], ystr[256], zstr[256], chgstr[256];
2681
  float xval, yval, zval, chgval;
2679
  float xval, yval, zval, chgval;
2682
  char a1str[256], a2str[256], elemstr[256];
2680
  char a1str[256], a2str[256], elemstr[256];
2683
  int a1val, a2val, ri;
2681
  int a1val, a2val, ri;
Line 2689... Line 2687...
2689
  if (n_atoms > 0)
2687
  if (n_atoms > 0)
2690
    zap_molecule ();
2688
    zap_molecule ();
2691
  ri = li;
2689
  ri = li;
2692
  strcpy (rline, molbuf[ri - 1]);
2690
  strcpy (rline, molbuf[ri - 1]);
2693
  sprintf (tmpstr, "%.5s", rline);
2691
  sprintf (tmpstr, "%.5s", rline);
2694
  code = (sscanf (tmpstr, "%d", &n_atoms) == 0);
2692
  (void)sscanf (tmpstr, "%d", &n_atoms);
2695
  strsub (tmpstr, rline, 14, 5);
2693
  strsub (tmpstr, rline, 14, 5);
2696
  code = (sscanf (tmpstr, "%d", &n_bonds) == 0);
2694
  (void)sscanf (tmpstr, "%d", &n_bonds);
2697
  strsub (molname, rline, 42, (int) (strlen (rline) - 42L));
2695
  strsub (molname, rline, 42, (int) (strlen (rline) - 42L));
2698
  /* try */
2696
  /* try */
2699
  atom = safe_calloc (n_atoms, sizeof (atom_rec));
2697
  atom = safe_calloc (n_atoms, sizeof (atom_rec));
2700
  bond = safe_calloc (n_bonds, sizeof (bond_rec));
2698
  bond = safe_calloc (n_bonds, sizeof (bond_rec));
2701
  ring = safe_calloc (1, sizeof (ringlist));
2699
  ring = safe_calloc (1, sizeof (ringlist));
Line 2730... Line 2728...
2730
      convert_type (newatomtype, atomtype);
2728
      convert_type (newatomtype, atomtype);
2731
      strsub (xstr, rline, 14, 7);
2729
      strsub (xstr, rline, 14, 7);
2732
      strsub (ystr, rline, 23, 7);
2730
      strsub (ystr, rline, 23, 7);
2733
      strsub (zstr, rline, 32, 7);
2731
      strsub (zstr, rline, 32, 7);
2734
      strsub (chgstr, rline, 43, 7);
2732
      strsub (chgstr, rline, 43, 7);
2735
      code = (sscanf (xstr, "%g", &xval) == 0);
2733
      (void)sscanf (xstr, "%g", &xval);
2736
      code = (sscanf (ystr, "%g", &yval) == 0);
2734
      (void)sscanf (ystr, "%g", &yval);
2737
      code = (sscanf (zstr, "%g", &zval) == 0);
2735
      (void)sscanf (zstr, "%g", &zval);
2738
      code = (sscanf (chgstr, "%g", &chgval) == 0);
2736
      (void)sscanf (chgstr, "%g", &chgval);
2739
      WITH = &atom[n - 1];
2737
      WITH = &atom[n - 1];
2740
      strcpy (WITH->element, elemstr);
2738
      strcpy (WITH->element, elemstr);
2741
      strcpy (WITH->atype, newatomtype);
2739
      strcpy (WITH->atype, newatomtype);
2742
      WITH->x = xval;
2740
      WITH->x = xval;
2743
      WITH->y = yval;
2741
      WITH->y = yval;
2744
      WITH->z = zval;
2742
      WITH->z = zval;
2745
      WITH->real_charge = chgval;
2743
      WITH->real_charge = chgval;
2746
      if (is_heavyatom (n))
2744
      if (is_heavyatom (n))
2747
        {
2745
        {
2748
          n_heavyatoms++;
2746
          n_heavyatoms++;
2749
          WITH->heavy = true;
2747
          WITH->heavy = true;
2750
          if (is_metal (n))
2748
          if (is_metal (n))
2751
            WITH->metal = true;
2749
            WITH->metal = true;
2752
        }
2750
        }
2753
      WITH->nvalences = get_nvalences (WITH->element);  /* v0.3m   */
2751
      WITH->nvalences = get_nvalences (WITH->element);  /* v0.3m   */
2754
    }
2752
    }
2755
  /*
2753
  /*
2756
     with atom^[n] do
2754
     with atom^[n] do
2757
     begin
2755
     begin
2758
     x := 0; y := 0; z := 0;  (* v0.3g
2756
     x := 0; y := 0; z := 0;  (* v0.3g
2759
     formal_charge  := 0;
2757
     formal_charge  := 0;
Line 2774... Line 2772...
2774
    {
2772
    {
2775
      ri++;
2773
      ri++;
2776
      strcpy (rline, molbuf[ri - 1]);
2774
      strcpy (rline, molbuf[ri - 1]);
2777
      strsub (a1str, rline, 9, 3);
2775
      strsub (a1str, rline, 9, 3);
2778
      strsub (a2str, rline, 15, 3);
2776
      strsub (a2str, rline, 15, 3);
2779
      code = (sscanf (a1str, "%d", &a1val) == 0);
2777
      (void)sscanf(a1str, "%d", &a1val);
2780
      /* if code <> 0 then beep; */
-
 
2781
      code = (sscanf (a2str, "%d", &a2val) == 0);
2778
      (void)sscanf(a2str, "%d", &a2val);
2782
      /* if code <> 0 then beep; */
-
 
2783
      WITH1 = &bond[n];
2779
      WITH1 = &bond[n];
2784
      WITH1->a1 = a1val;
2780
      WITH1->a1 = a1val;
2785
      WITH1->a2 = a2val;
2781
      WITH1->a2 = a2val;
2786
      WITH1->btype = rline[19];
2782
      WITH1->btype = rline[19];
2787
      WITH1->ring_count = 0;
2783
      WITH1->ring_count = 0;
Line 2821... Line 2817...
2821
  if (n_atoms > 0)
2817
  if (n_atoms > 0)
2822
    zap_molecule ();
2818
    zap_molecule ();
2823
  *rline = '\0';
2819
  *rline = '\0';
2824
  ri = li - 1;
2820
  ri = li - 1;
2825
  while ((ri < molbufindex) && (strpos2 (rline, "@<TRIPOS>MOLECULE", 1) == 0))
2821
  while ((ri < molbufindex) && (strpos2 (rline, "@<TRIPOS>MOLECULE", 1) == 0))
2826
    {
2822
    {
2827
      ri++;
2823
      ri++;
2828
      strcpy (rline, molbuf[ri - 1]);
2824
      strcpy (rline, molbuf[ri - 1]);
2829
    }
2825
    }
2830
  if (ri < molbufindex)
2826
  if (ri < molbufindex)
2831
    {
2827
    {
2832
      ri++;
2828
      ri++;
2833
      strcpy (molname, molbuf[ri - 1]);
2829
      strcpy (molname, molbuf[ri - 1]);
Line 2836... Line 2832...
2836
    {
2832
    {
2837
      ri++;
2833
      ri++;
2838
      strcpy (rline, molbuf[ri - 1]);
2834
      strcpy (rline, molbuf[ri - 1]);
2839
    }
2835
    }
2840
  sprintf (tmpstr, "%.5s", rline);
2836
  sprintf (tmpstr, "%.5s", rline);
2841
  sscanf (tmpstr, "%d", &n_atoms);
2837
  (void)sscanf (tmpstr, "%d", &n_atoms);
2842
/* p2c: checkmol.pas: Note: Eliminated unused assignment statement [338] */
2838
/* p2c: checkmol.pas: Note: Eliminated unused assignment statement [338] */
2843
  strsub (tmpstr, rline, 7, 5);
2839
  strsub (tmpstr, rline, 7, 5);
2844
  sscanf (tmpstr, "%d", &n_bonds);
2840
  (void)sscanf (tmpstr, "%d", &n_bonds);
2845
  /* try */
2841
  /* try */
2846
/* p2c: checkmol.pas: Note: Eliminated unused assignment statement [338] */
2842
/* p2c: checkmol.pas: Note: Eliminated unused assignment statement [338] */
2847
  atom = safe_calloc (n_atoms, sizeof (atom_rec));
2843
  atom = safe_calloc (n_atoms, sizeof (atom_rec));
2848
  bond = safe_calloc (n_bonds, sizeof (bond_rec));
2844
  bond = safe_calloc (n_bonds, sizeof (bond_rec));
2849
  ring = safe_calloc (1, sizeof (ringlist));
2845
  ring = safe_calloc (1, sizeof (ringlist));
Line 2901... Line 2897...
2901
      convert_sybtype (newatomtype, sybatomtype);
2897
      convert_sybtype (newatomtype, sybatomtype);
2902
      strsub (xstr, rline, 18, 9);
2898
      strsub (xstr, rline, 18, 9);
2903
      strsub (ystr, rline, 28, 9);
2899
      strsub (ystr, rline, 28, 9);
2904
      strsub (zstr, rline, 38, 9);
2900
      strsub (zstr, rline, 38, 9);
2905
      strsub (chgstr, rline, 70, 9);
2901
      strsub (chgstr, rline, 70, 9);
2906
/* p2c: checkmol.pas: Note: Eliminated unused assignment statement [338] */
-
 
2907
/* p2c: checkmol.pas: Note: Eliminated unused assignment statement [338] */
-
 
2908
      sscanf (xstr, "%g", &xval);
2902
      (void)sscanf (xstr, "%g", &xval);
2909
      sscanf (ystr, "%g", &yval);
2903
      (void)sscanf (ystr, "%g", &yval);
2910
      sscanf (zstr, "%g", &zval);
2904
      (void)sscanf (zstr, "%g", &zval);
2911
      sscanf (chgstr, "%g", &chgval);
2905
      (void)sscanf (chgstr, "%g", &chgval);
2912
/* p2c: checkmol.pas: Note: Eliminated unused assignment statement [338] */
-
 
2913
/* p2c: checkmol.pas: Note: Eliminated unused assignment statement [338] */
-
 
2914
      WITH = &atom[n - 1];
2906
      WITH = &atom[n - 1];
2915
      strcpy (WITH->element, elemstr);
2907
      strcpy (WITH->element, elemstr);
2916
      strcpy (WITH->atype, newatomtype);
2908
      strcpy (WITH->atype, newatomtype);
2917
      WITH->x = xval;
2909
      WITH->x = xval;
2918
      WITH->y = yval;
2910
      WITH->y = yval;
2919
      WITH->z = zval;
2911
      WITH->z = zval;
2920
      WITH->real_charge = chgval;
2912
      WITH->real_charge = chgval;
2921
      if (is_heavyatom (n))
2913
      if (is_heavyatom (n))
2922
        {
2914
        {
2923
          n_heavyatoms++;
2915
          n_heavyatoms++;
2924
          WITH->heavy = true;
2916
          WITH->heavy = true;
2925
          if (is_metal (n))
2917
          if (is_metal (n))
2926
            WITH->metal = true;
2918
            WITH->metal = true;
2927
        }
2919
        }
Line 2941... Line 2933...
2941
          strcpy (rline, molbuf[ri - 1]);
2933
          strcpy (rline, molbuf[ri - 1]);
2942
        }
2934
        }
2943
      strsub (a1str, rline, 9, 3);
2935
      strsub (a1str, rline, 9, 3);
2944
      strsub (a2str, rline, 14, 3);
2936
      strsub (a2str, rline, 14, 3);
2945
      code = (sscanf (a1str, "%d", &a1val) == 0);
2937
      code = (sscanf (a1str, "%d", &a1val) == 0);
2946
      if (code != 0)
2938
      if (code != 0)
2947
        printf ("%s\007\n", rline);
2939
        printf ("%s\007\n", rline);
2948
      code = (sscanf (a2str, "%d", &a2val) == 0);
2940
      code = (sscanf (a2str, "%d", &a2val) == 0);
2949
      if (code != 0)
2941
      if (code != 0)
2950
        printf ("%s\007\n", rline);
2942
        printf ("%s\007\n", rline);
2951
      WITH1 = &bond[n];
2943
      WITH1 = &bond[n];
Line 2973... Line 2965...
2973
      ringprop[n].size = 0;
2965
      ringprop[n].size = 0;
2974
      ringprop[n].arom = false;
2966
      ringprop[n].arom = false;
2975
      ringprop[n].envelope = false;
2967
      ringprop[n].envelope = false;
2976
    }
2968
    }
2977
  li = ri + 1;
2969
  li = ri + 1;
2978
}
2970
}
2979
 
2971
 
2980
 
2972
 
2981
static void
2973
static void
2982
read_charges (chgstring_)
2974
read_charges (chgstring_)
2983
     char *chgstring_;
2975
     char *chgstring_;
Line 3149... Line 3141...
3149
  strcpy (molcomment, rline);
3141
  strcpy (molcomment, rline);
3150
  if (ri < molbufindex)         /* line 4 */
3142
  if (ri < molbufindex)         /* line 4 */
3151
    ri++;
3143
    ri++;
3152
  strcpy (rline, molbuf[ri - 1]);
3144
  strcpy (rline, molbuf[ri - 1]);
3153
  sprintf (tmpstr, "%.3s", rline);
3145
  sprintf (tmpstr, "%.3s", rline);
3154
  sscanf (tmpstr, "%d", &n_atoms);
3146
  (void)sscanf (tmpstr, "%d", &n_atoms);
3155
/* p2c: checkmol.pas: Note: Eliminated unused assignment statement [338] */
-
 
3156
  strsub (tmpstr, rline, 4, 3);
3147
  strsub (tmpstr, rline, 4, 3);
3157
  sscanf (tmpstr, "%d", &n_bonds);
3148
  (void)sscanf (tmpstr, "%d", &n_bonds);
3158
/* p2c: checkmol.pas: Note: Eliminated unused assignment statement [338] */
-
 
3159
  strsub (tmpstr, rline, 10, 3);
3149
  strsub (tmpstr, rline, 10, 3);
3160
  /* if it is a CheckMol-tweaked molfile, this is the number of rings */
3150
  /* if it is a CheckMol-tweaked molfile, this is the number of rings */
3161
  n_cmrings = 0;
3151
  n_cmrings = 0;
3162
  code = (sscanf (tmpstr, "%d", &n_cmrings) == 0);
3152
  code = (sscanf (tmpstr, "%d", &n_cmrings) == 0);
3163
  if (code != 0)
3153
  if (code != 0)
Line 3247... Line 3237...
3247
          strsub (xstr, rline, 1, 10);  /* fixed in v0.3k (was: 2,9 etc.) */
3237
          strsub (xstr, rline, 1, 10);  /* fixed in v0.3k (was: 2,9 etc.) */
3248
          strsub (ystr, rline, 11, 10);
3238
          strsub (ystr, rline, 11, 10);
3249
          strsub (zstr, rline, 21, 10);
3239
          strsub (zstr, rline, 21, 10);
3250
          /*chgstr := '0'; */
3240
          /*chgstr := '0'; */
3251
          strsub (chgstr, rline, 37, 3);        /* new in v0.3j */
3241
          strsub (chgstr, rline, 37, 3);        /* new in v0.3j */
3252
          sscanf (chgstr, "%f", &chgval);
3242
          (void)sscanf (chgstr, "%f", &chgval);
3253
/* p2c: checkmol.pas: Note: Eliminated unused assignment statement [338] */
-
 
3254
          if (chgval != 0)
3243
          if (chgval != 0)
3255
            {
3244
            {
3256
              if (chgval >= 1 && chgval <= 7)
3245
              if (chgval >= 1 && chgval <= 7)
3257
                chgval = 4.0 - chgval;
3246
                chgval = 4.0 - chgval;
3258
              else
3247
              else
3259
                {
3248
                {
3260
                  chgval = 0.0;
3249
                  chgval = 0.0;
3261
/* p2c: checkmol.pas: Note: Eliminated unused assignment statement [338] */
-
 
3262
                }
3250
                }
3263
            }                   /* end (v0.3j) */
3251
            }                   /* end (v0.3j) */
3264
          sscanf (xstr, "%f", &xval);
3252
          (void)sscanf (xstr, "%f", &xval);
3265
          sscanf (ystr, "%f", &yval);
3253
          (void)sscanf (ystr, "%f", &yval);
3266
          sscanf (zstr, "%f", &zval);
3254
          (void)sscanf (zstr, "%f", &zval);
3267
          /* v0.3k: removed superfluous val(chgstr,chgval,code) */
3255
          /* v0.3k: removed superfluous val(chgstr,chgval,code) */
3268
/* p2c: checkmol.pas: Note: Eliminated unused assignment statement [338] */
-
 
3269
/* p2c: checkmol.pas: Note: Eliminated unused assignment statement [338] */
-
 
3270
          WITH = &atom[v - 1];
3256
          WITH = &atom[v - 1];
3271
          strcpy (WITH->element, elemstr);
3257
          strcpy (WITH->element, elemstr);
3272
          if (!strcmp (elemstr, "A ") || !strcmp (elemstr, "Q ") ||
3258
          if (!strcmp (elemstr, "A ") || !strcmp (elemstr, "Q ") ||
3273
              !strcmp (elemstr, "X "))
3259
              !strcmp (elemstr, "X "))
3274
            /* 'X ' added in v0.3n */
3260
            /* 'X ' added in v0.3n */
Line 3421... Line 3407...
3421
            WITH1->stereo = bstereo_either;     /* 0.3x */
3407
            WITH1->stereo = bstereo_either;     /* 0.3x */
3422
          if (WITH1->btype == 'D' && strlen (rline) > 11 && rline[11] == '3')
3408
          if (WITH1->btype == 'D' && strlen (rline) > 11 && rline[11] == '3')
3423
            WITH1->stereo = bstereo_double_either;      /* 0.3x */
3409
            WITH1->stereo = bstereo_double_either;      /* 0.3x */
3424
          strsub (tmpstr, rline, 10, 3);
3410
          strsub (tmpstr, rline, 10, 3);
3425
          /* new in v0.3n: save original bond stereo specification; */
3411
          /* new in v0.3n: save original bond stereo specification; */
3426
          sscanf (tmpstr, "%d", &bs);
3412
          (void)sscanf (tmpstr, "%d", &bs);
3427
          /* v0.3n */
3413
          /* v0.3n */
3428
/* p2c: checkmol.pas: Note: Eliminated unused assignment statement [338] */
3414
/* p2c: checkmol.pas: Note: Eliminated unused assignment statement [338] */
3429
          WITH1->mdl_stereo = bs;       /* v0.3n */
3415
          WITH1->mdl_stereo = bs;       /* v0.3n */
3430
          if (atom[a1val - 1].heavy && atom[a2val - 1].heavy)
3416
          if (atom[a1val - 1].heavy && atom[a2val - 1].heavy)
3431
            n_heavybonds++;
3417
            n_heavybonds++;