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 |
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 |
|
2692 | (void)sscanf (tmpstr, "%d", &n_atoms); |
2695 | strsub (tmpstr, rline, 14, 5); |
2693 | strsub (tmpstr, rline, 14, 5); |
2696 |
|
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 |
|
2733 | (void)sscanf (xstr, "%g", &xval); |
2736 |
|
2734 | (void)sscanf (ystr, "%g", &yval); |
2737 |
|
2735 | (void)sscanf (zstr, "%g", &zval); |
2738 |
|
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 |
|
2777 | (void)sscanf(a1str, "%d", &a1val); |
2780 | /* if code <> 0 then beep; */ |
- | |
2781 |
|
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++; |