18
18
// You should have received a copy of the GNU General Public License
19
19
// along with this program. If not, write to the Free Software Foundation,
20
// Inc. ,59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
20
// Inc, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
22
// =============================================================================
22
24
#define _KVI_DEBUG_CHECK_RANGE_
23
#include "kvi_locale.h"
25
#define _KVI_DEBUG_CLASS_NAME_ "KviAlias"
29
#include "kvi_alias.h"
24
30
#include "kvi_debug.h"
25
#include "kvi_alias.h"
26
31
#include "kvi_defines.h"
32
#include "kvi_locale.h"
28
34
KviAliasManager::KviAliasManager()
30
m_pAliasList = new QList<KviAlias>;
36
m_pAliasList = new QPtrList<KviAlias>;
31
37
m_pAliasList->setAutoDelete(true);
34
40
KviAliasManager::~KviAliasManager()
39
KviAlias * KviAliasManager::findAlias(const char *name)
48
KviAlias *KviAliasManager::findAlias(const char *name)
42
for(KviAlias * a=m_pAliasList->first();a;a=m_pAliasList->next()){
43
r = kvi_strcmpCI(a->szName.ptr(),name);
44
if(r == 0)return a; //equal
45
if(r < 0)return 0; //found a greater one
51
for( KviAlias *a = m_pAliasList->first(); a; a = m_pAliasList->next() ) {
52
r = kvi_strcmpCI(a->szName.ptr(), name);
53
if( r == 0 ) return a; // Equal
54
if( r < 0 ) return 0; // Found a greater one
53
62
s->bLocked = false;
55
64
KviAlias *a = findAlias(s->szName.ptr());
58
debug("Attempt to change a locked alias : %s",a->szName.ptr());
59
return false; //It is locked!
67
debug("Attempt to change a locked alias : %s", a->szName.ptr());
68
return false; // It is locked!
61
70
m_pAliasList->removeRef(a);
64
for(a=m_pAliasList->first();a;a=m_pAliasList->next()){
65
if(kvi_strcmpCI(a->szName.ptr(),s->szName.ptr())<0){
67
m_pAliasList->insert(idx,s);
73
for( a = m_pAliasList->first(); a; a = m_pAliasList->next() ) {
74
if( kvi_strcmpCI(a->szName.ptr(), s->szName.ptr()) < 0 ) {
75
// Found a greater one
76
m_pAliasList->insert(idx, s);
72
// found no greater aliases
81
// Found no greater aliases
73
82
m_pAliasList->append(s);
77
86
void KviAliasManager::clearAll()
80
m_pAliasList = new QList<KviAlias>;
88
if( m_pAliasList ) delete m_pAliasList;
89
m_pAliasList = new QPtrList<KviAlias>;
81
90
m_pAliasList->setAutoDelete(true);
93
int KviAliasManager::count()
95
return m_pAliasList->count();
84
98
void KviAliasManager::removeAlias(KviAlias *s)
103
bool KviAliasManager::load(const char *filename,KviStr &error)
118
bool KviAliasManager::load(const char *filename, KviStr &error)
106
if(!kvi_loadFile(filename,buffer)){
107
error = __tr("Unable to load file");
121
if( !kvi_loadFile(filename, buffer) ) {
122
error = _i18n_("Unable to load file");
110
if(!kvi_strEqualCSN(KVI_MAGIC_STRING,buffer.ptr(),KVI_MAGIC_STRING_LENGTH)){
111
error = __tr("Invalid magic");
112
return false; //not a kvirc file
125
if( !kvi_strEqualCSN(KVI_MAGIC_STRING, buffer.ptr(), KVI_MAGIC_STRING_LENGTH) ) {
126
error = _i18n_("Invalid magic");
127
return false; // Not a KVIrc file
114
129
buffer.cutLeft(KVI_MAGIC_STRING_LENGTH);
115
buffer.stripLeftWhiteSpace(); //be flexible...allow some spaces...for manual editing by experts :)
116
if(buffer.isEmpty())return true; //done
130
buffer.stripLeftWhiteSpace(); // Be flexible... allow some spaces... for manual editing by experts :)
131
if( buffer.isEmpty() )
118
while(buffer.hasData()){
119
//[ALIAS <aliasname> bytes <numofbytes>]\n
124
if(!kvi_strEqualCIN("[ALIAS ",buffer.ptr(),7)){
125
error = __tr("Unrecognized [ALIAS] label.");
134
while( buffer.hasData() ) {
135
// [ALIAS <aliasname> bytes <numofbytes>]\n
140
if( !kvi_strEqualCIN("[ALIAS ", buffer.ptr(), 7) ) {
141
error = _i18n_("Unrecognized [ALIAS] label.");
128
144
buffer.cutLeft(7);
130
buffer.stripLeftWhiteSpace(); //be flexible...allow some spaces...for manual editing by experts :)
146
buffer.stripLeftWhiteSpace(); // Be flexible... allow some spaces... for manual editing by experts :)
132
148
KviAlias *a = new KviAlias;
134
if(!buffer.getToken(a->szName,' ')){
135
error = __tr("Syntax error in [ALIAS] label");
138
} //there must be at least another token
139
if(a->szName.isEmpty()){
140
error = __tr("Empty alias name?");
143
} //syntax error somewhere
145
buffer.stripLeftWhiteSpace(); //be flexible...allow some spaces...for manual editing by experts :)
147
if(!kvi_strEqualCIN("bytes ",buffer.ptr(),6)){
148
error = __tr("Syntax error in [ALIAS] label (alias length)");
150
if( !buffer.getToken(a->szName, ' ') ) {
151
// There must be at least another token
152
error = _i18n_("Syntax error in [ALIAS] label");
156
if( a->szName.isEmpty() ) {
157
// Syntax error somewhere
158
error = _i18n_("Empty alias name?");
163
buffer.stripLeftWhiteSpace(); // Be flexible... allow some spaces... for manual editing by experts :)
165
if( !kvi_strEqualCIN("bytes ", buffer.ptr(), 6) ) {
166
error = _i18n_("Syntax error in [ALIAS] label (alias length)");
152
170
buffer.cutLeft(6);
153
buffer.stripLeftWhiteSpace(); //be flexible...allow some spaces...for manual editing by experts :)
156
if(!isdigit(*(buffer.ptr()))){
157
error = __tr("Syntax error in [ALIAS] label (digit expected)");
171
buffer.stripLeftWhiteSpace(); // Be flexible... allow some spaces... for manual editing by experts :)
173
if( !isdigit(*(buffer.ptr())) ) {
174
error = _i18n_("Syntax error in [ALIAS] label (digit expected)");
163
if(!buffer.getToken(numBytes,']')){
164
error = __tr("Syntax error in [ALIAS] label (can not extract alias length)");
180
if( !buffer.getToken(numBytes, ']') ) {
181
error = _i18n_("Syntax error in [ALIAS] label (cannot extract alias length)");
169
186
bool bOk = false;
170
187
int bytes = numBytes.toInt(&bOk);
172
error = __tr("Unrecogized token ");
176
} //syntax error again...someone messed with the file
177
buffer.cutLeft(1); //cut the \n
178
if(buffer.len() < bytes){
179
error = __tr("Alias buffer smaller than declared length (");
185
a->szBuffer.setStr(buffer.ptr(),bytes);
189
// Syntax error again... someone messed with the file
190
error = _i18n_("Unrecogized token ");
195
buffer.cutLeft(1); // Cut the \n
196
if( buffer.len() < bytes ) {
197
error = _i18n_("Alias buffer smaller than declared length (");
203
a->szBuffer.setStr(buffer.ptr(), bytes);
186
204
buffer.cutLeft(bytes);
188
if(!kvi_strEqualCIN("\n[ENDALIAS]",buffer.ptr(),11)){
189
error = __tr("Unrecognized [ENDALIAS] label");
206
if( !kvi_strEqualCIN("\n[ENDALIAS]", buffer.ptr(), 11) ) {
207
error = _i18n_("Unrecognized [ENDALIAS] label");
193
211
buffer.cutLeft(11);
197
buffer.stripLeftWhiteSpace(); //be flexible...allow some spaces...for manual editing by experts :)
215
buffer.stripLeftWhiteSpace(); // Be flexible... Allow some spaces... For manual editing by experts :)
202
220
bool KviAliasManager::save(const char *filename)
204
222
QFile f(filename);
205
if(!f.open(IO_WriteOnly | IO_Truncate))return false;
207
f.writeBlock(KVI_MAGIC_STRING,KVI_MAGIC_STRING_LENGTH);
209
for(KviAlias *a=m_pAliasList->first();a;a=m_pAliasList->next()){
210
f.writeBlock("[ALIAS ",7);
211
f.writeBlock(a->szName.ptr(),a->szName.len());
212
f.writeBlock(" bytes ",7);
213
KviStr szNBytes(KviStr::Format,"%d",a->szBuffer.len());
214
f.writeBlock(szNBytes.ptr(),szNBytes.len());
215
f.writeBlock("]\n",2);
216
f.writeBlock(a->szBuffer.ptr(),a->szBuffer.len());
217
f.writeBlock("\n[ENDALIAS]\n",12);
223
if( !f.open(IO_WriteOnly | IO_Truncate) )
226
f.writeBlock(KVI_MAGIC_STRING, KVI_MAGIC_STRING_LENGTH);
228
for( KviAlias *a = m_pAliasList->first(); a; a = m_pAliasList->next() ) {
229
f.writeBlock("[ALIAS ", 7);
230
f.writeBlock(a->szName.ptr(), a->szName.len());
231
f.writeBlock(" bytes ", 7);
232
KviStr szNBytes(KviStr::Format, "%d", a->szBuffer.len());
233
f.writeBlock(szNBytes.ptr(), szNBytes.len());
234
f.writeBlock("]\n", 2);
235
f.writeBlock(a->szBuffer.ptr(), a->szBuffer.len());
236
f.writeBlock("\n[ENDALIAS]\n", 12);
243
QPtrList<KviAlias> *KviAliasManager::aliasList()