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