File: parse_sec_structure.c

package info (click to toggle)
garlic 1.6-3
  • links: PTS, VCS
  • area: main
  • in suites: bullseye, buster, sid
  • size: 4,516 kB
  • sloc: ansic: 52,465; makefile: 2,254
file content (112 lines) | stat: -rw-r--r-- 2,331 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
/* Copyright (C) 2001 Damir Zucic */

/*=============================================================================

				parse_sec_structure.c

Purpose:
	Parse the string with secondary structure.

Input:
	(1) Pointer to RuntimeS structure.
	(2) Pointer to the string which contains the secondary structure.

Output:
	(1) Secondary structure stored to the secondary structure buffer.
	(2) Return value.

Return value:
	(1) Positive on success.
	(2) Negative on failure.

Notes:
	(1) Use one letter codes to define the secondary structure:
	    C = coil,
	    E = strand,
	    G = 3-10 helix,
	    H = alpha helix,
	    T = turn.

	(2) Space, comma and tab may be used as separators.


========includes:============================================================*/

#include <stdio.h>

#include <string.h>

#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/Xos.h>
#include <X11/Xatom.h>

#include "defines.h"
#include "commands.h"
#include "typedefs.h"

/*======parse string with secondary structure:===============================*/

int ParseSecondaryStructure_ (RuntimeS *runtimeSP, char *stringP)
{
int		i;
int		code;
char		*P;
int		codeI = 0;

/* Initialize the secondary structure buffer */
/* (use the code for extended conformation): */
runtimeSP->sec_structure_length = 0;
for (i = 0; i < MAXRESIDUES; i++) *(runtimeSP->sec_structureP + i) = 'E';

/* Parse input string, character by character: */
while ((code = *stringP++) != '\0')
	{
	/* Check the current code: */
	switch (code)
		{
		/* Valid codes: */
		case 'C':
		case 'E':
		case 'G':
		case 'H':
		case 'T':
			break;

		/* Separators: */
		case ' ':
		case ',':
		case '\t':
			continue;
			break;

		/* Bad codes: */
		default:
			sprintf (runtimeSP->messageA, "Bad code!");
			strcat (runtimeSP->messageA,
				" Valid codes: C E G H T;");
			strcat (runtimeSP->messageA,
				" separators: space, comma and tab.");
			runtimeSP->message_length =
				strlen (runtimeSP->messageA);
			return -1;
		}

	/* Store the secondary structure code: */
	P = runtimeSP->sec_structureP + codeI;
	*P = code;

	/* Increment the counter: */
	codeI++;
	}

/* Store the number of codes: */
runtimeSP->sec_structure_length = codeI;

/* Return positive value on success: */
return 1;
}

/*===========================================================================*/