1 /***********************************
2 * ftusrstr.c
3 *
4 * All processing of User Error String handled in this file
5 *
6 * $Log: ftusrstr.c,v $
7 * Revision 6.3 1998/03/19 16:46:44 bazhin
8 * Removed memory leak in "flat2asn_install_accession_user_string()".
9 *
10 * Revision 6.2 1998/03/09 21:39:12 tatiana
11 * flat2asn_install_accession_user_string() changed
12 *
13 * Revision 6.1 1998/02/19 01:54:53 ostell
14 * added use of Thread Local Storage to make functions thread safe
15 *
16 * Revision 6.0 1997/08/25 18:05:42 madden
17 * Revision changed to 6.0
18 *
19 * Revision 5.1 1997/06/19 18:37:44 vakatov
20 * [WIN32,MSVC++] Adopted for the "NCBIOBJ.LIB" DLL'ization
21 *
22 * Revision 5.0 1996/05/28 13:23:23 ostell
23 * Set to revision 5.0
24 *
25 * Revision 4.2 1996/05/01 22:05:46 tatiana
26 * flat2asn_init_user_string() added
27 *
28 * Revision 1.6 1995/05/15 21:46:05 ostell
29 * added Log line
30 *
31 *
32 *
33 ********************************/
34 #include <ncbi.h>
35 #include "ftusrstr.h"
36 #include <ncbithr.h>
37
38 typedef struct ftuserstruct {
39 Uint1 Last_magic_locus_cookie,
40 Last_magic_accession_cookie,
41 Last_magic_feature_cookie;
42 } FtuserStruct, PNTR FtuserStructPtr;
43
44 static TNlmTls ftuserstr_tls = NULL;
45
FtuserCleanup(TNlmTls tls,VoidPtr ptr)46 static void FtuserCleanup (TNlmTls tls, VoidPtr ptr)
47 {
48 MemFree(ptr); /* easy */
49 return;
50 }
51
GetFtuserStruct(void)52 static FtuserStruct PNTR NEAR GetFtuserStruct ( void )
53 {
54 FtuserStructPtr fup = NULL;
55
56 if (NlmTlsGetValue(ftuserstr_tls, (VoidPtr *)(&fup)))
57 {
58 if (fup == NULL)
59 {
60 fup = MemNew(sizeof(FtuserStruct));
61 NlmTlsSetValue(&ftuserstr_tls, fup, FtuserCleanup);
62 }
63 }
64 return fup;
65 }
66
67
68 /*-------flat2asn_init_user_string()-------*/
69
70 NLM_EXTERN void
flat2asn_init_user_string(void)71 flat2asn_init_user_string (void)
72 {
73 FtuserStructPtr fup;
74
75 fup = GetFtuserStruct();
76
77 fup->Last_magic_locus_cookie=0;
78 fup->Last_magic_accession_cookie=0;
79 fup->Last_magic_feature_cookie=0;
80 }
81
82 /*-------flat2asn_install_locus_user_string()-------*/
83
84 NLM_EXTERN void
flat2asn_install_locus_user_string(CharPtr locus)85 flat2asn_install_locus_user_string (CharPtr locus)
86 {
87 char buf[30];
88 FtuserStructPtr fup;
89
90 fup = GetFtuserStruct();
91
92 StringNCpy(buf,locus, sizeof (buf) - 3);
93 StringCat(buf,":");
94 buf[29]='\0';
95 fup->Last_magic_locus_cookie =
96 Nlm_ErrUserInstall ( buf, fup->Last_magic_locus_cookie);
97 }
98
99 /*------flat2asn_delete_locus_user_string()---*/
100
101 NLM_EXTERN void
flat2asn_delete_locus_user_string(void)102 flat2asn_delete_locus_user_string(void)
103 {
104 FtuserStructPtr fup;
105
106 fup = GetFtuserStruct();
107
108 Nlm_ErrUserDelete(fup->Last_magic_locus_cookie);
109 fup->Last_magic_locus_cookie = 0;
110 }
111
112
113 /*-------flat2asn_install_accession_user_string()-------*/
114
115 NLM_EXTERN void
flat2asn_install_accession_user_string(CharPtr accession)116 flat2asn_install_accession_user_string (CharPtr accession)
117 {
118 CharPtr buf;
119 Int2 buflen;
120 FtuserStructPtr fup;
121
122 fup = GetFtuserStruct();
123
124 buflen = StringLen(accession)+2;
125 buf = MemNew(buflen);
126 sprintf(buf,"%s:", accession);
127
128 fup->Last_magic_accession_cookie =
129 Nlm_ErrUserInstall ( buf, fup->Last_magic_accession_cookie);
130 MemFree(buf);
131 }
132
133 /*------flat2asn_delete_accession_user_string()---*/
134
135 NLM_EXTERN void
flat2asn_delete_accession_user_string(void)136 flat2asn_delete_accession_user_string(void)
137 {
138 FtuserStructPtr fup;
139
140 fup = GetFtuserStruct();
141
142 Nlm_ErrUserDelete(fup->Last_magic_accession_cookie);
143 fup->Last_magic_accession_cookie = 0;
144 }
145
146 /*-------flat2asn_install_feature_user_string()-------*/
147
148 NLM_EXTERN void
flat2asn_install_feature_user_string(CharPtr key,CharPtr location)149 flat2asn_install_feature_user_string (CharPtr key, CharPtr location)
150 {
151 char buf[130];
152 char install[160];
153 CharPtr temp = install;
154 FtuserStructPtr fup;
155
156 fup = GetFtuserStruct();
157
158 temp = StringMove(temp,"FEAT=");
159 StringNCpy(buf,key, 20);
160 buf[19]='\0';
161 temp = StringMove(temp,buf);
162 temp = StringMove(temp,"[");
163 StringNCpy(buf,location,sizeof (buf) - 3);
164 buf[127]='\0';
165 temp = StringMove(temp,buf);
166 temp = StringMove(temp,"]");
167
168 fup->Last_magic_feature_cookie =
169 Nlm_ErrUserInstall ( install, fup->Last_magic_feature_cookie);
170 }
171
172 /*------flat2asn_delete_feature_user_string()---*/
173
174 NLM_EXTERN void
flat2asn_delete_feature_user_string(void)175 flat2asn_delete_feature_user_string(void)
176 {
177 FtuserStructPtr fup;
178
179 fup = GetFtuserStruct();
180
181 Nlm_ErrUserDelete(fup->Last_magic_feature_cookie);
182 fup->Last_magic_feature_cookie = 0;
183 }
184