kontocheck 0.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,1577 @@
1
+ /*==================================================================
2
+ *
3
+ * KontoCheck Module, C Ruby Extension
4
+ *
5
+ * Copyright (c) 2010 Provideal Systems GmbH
6
+ *
7
+ * Peter Horn, peter.horn@provideal.net
8
+ *
9
+ * some extensions by Michael Plugge, m.plugge@hs-mannheim.de
10
+ *
11
+ * ------------------------------------------------------------------
12
+ *
13
+ * ACKNOWLEDGEMENT
14
+ *
15
+ * This module is entirely based on the C library konto_check
16
+ * http://www.informatik.hs-mannheim.de/konto_check/
17
+ * http://sourceforge.net/projects/kontocheck/
18
+ * by Michael Plugge.
19
+ *
20
+ * ------------------------------------------------------------------
21
+ *
22
+ * LICENCE
23
+ *
24
+ * This program is free software: you can redistribute it and/or modify
25
+ * it under the terms of the GNU Lesser General Public License as published by
26
+ * the Free Software Foundation, either version 3 of the License, or (at your
27
+ * option) any later version.
28
+ *
29
+ * This program is distributed in the hope that it will be useful,
30
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
31
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
32
+ * GNU Lesser General Public License for more details.
33
+ *
34
+ * You should have received a copy of the GNU Lesser General Public License
35
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
36
+ */
37
+
38
+ // Include the Ruby headers and goodies
39
+ #include "ruby.h"
40
+ #include <stdio.h>
41
+ #include "konto_check.h"
42
+
43
+ /* Ruby 1.8/1.9 compatibility definitions */
44
+ #ifndef RSTRING_PTR
45
+ #define RSTRING_LEN(x) (RSTRING(x)->len)
46
+ #define RSTRING_PTR(x) (RSTRING(x)->ptr)
47
+ #endif
48
+
49
+ #ifndef RUBY_T_STRING
50
+ #define RUBY_T_STRING T_STRING
51
+ #define RUBY_T_FLOAT T_FLOAT
52
+ #define RUBY_T_FIXNUM T_FIXNUM
53
+ #define RUBY_T_BIGNUM T_BIGNUM
54
+ #define RUBY_T_ARRAY T_ARRAY
55
+ #endif
56
+
57
+ #define RUNTIME_ERROR(error) do{ \
58
+ snprintf(error_msg,511,"KontoCheck::%s, %s",kto_check_retval2txt_short(error),kto_check_retval2txt(error)); \
59
+ rb_raise(rb_eRuntimeError,error_msg); \
60
+ }while(0)
61
+
62
+ // Defining a space for information and references about the module to be stored internally
63
+ VALUE KontoCheck = Qnil;
64
+
65
+ /**
66
+ * get_params_file()
67
+ *
68
+ * extract params from argc/argv (filename and sometimes optional parameters)
69
+ */
70
+ static void get_params_file(int argc,VALUE* argv,char *arg1s,int *arg1i,int *arg2i,int opts)
71
+ {
72
+ int len;
73
+ VALUE v1_rb,v2_rb,v3_rb;
74
+
75
+ switch(opts){
76
+ case 1: /* ein Dateiname, zwei Integer; alle optional (f�r lut_init) */
77
+ rb_scan_args(argc,argv,"03",&v1_rb,&v2_rb,&v3_rb);
78
+ if(NIL_P(v2_rb)) /* Level */
79
+ *arg1i=DEFAULT_INIT_LEVEL;
80
+ else
81
+ *arg1i=NUM2INT(v2_rb);
82
+ if(NIL_P(v3_rb)) /* Set */
83
+ *arg2i=0;
84
+ else
85
+ *arg2i=NUM2INT(v3_rb);
86
+ break;
87
+
88
+ case 2: /* ein Dateiname (f�r dump_lutfile) */
89
+ rb_scan_args(argc,argv,"10",&v1_rb);
90
+ break;
91
+
92
+ case 3: /* ein optionaler Dateiname (f�r lut_info) */
93
+ rb_scan_args(argc,argv,"01",&v1_rb);
94
+ break;
95
+
96
+ default:
97
+ break;
98
+ }
99
+ if(NIL_P(v1_rb)){ /* Leerstring zur�ckgeben => Defaultwerte probieren */
100
+ *arg1s=0;
101
+ }
102
+ else if(TYPE(v1_rb)==RUBY_T_STRING){
103
+ strncpy(arg1s,RSTRING_PTR(v1_rb),FILENAME_MAX);
104
+ /* der Ruby-String ist nicht notwendig null-terminiert; manuell erledigen */
105
+ if((len=RSTRING_LEN(v1_rb))>FILENAME_MAX)len=FILENAME_MAX;
106
+ *(arg1s+len)=0;
107
+ }
108
+ else
109
+ rb_raise(rb_eRuntimeError,"Unable to convert given filename.");
110
+ }
111
+
112
+ /**
113
+ * get_params_int()
114
+ *
115
+ * extract two numeric params from argc/argv (for integer search functions)
116
+ */
117
+ static void get_params_int(int argc,VALUE* argv,int *arg1,int *arg2)
118
+ {
119
+ char buffer[16];
120
+ int len,cnt;
121
+ VALUE arg1_rb,arg2_rb,*arr_ptr;
122
+
123
+ rb_scan_args(argc,argv,"11",&arg1_rb,&arg2_rb);
124
+
125
+ /* Falls als erster Parameter ein Array �bergeben wird, wird der erste
126
+ * Wert werden als Minimal- und der zweite als Maximalwert genommen.
127
+ */
128
+ if(TYPE(arg1_rb)==RUBY_T_ARRAY){
129
+ cnt=RARRAY_LEN(arg1_rb); /* Anzahl Werte */
130
+ arr_ptr=RARRAY_PTR(arg1_rb); /* Pointer auf die Array-Daten */
131
+ switch(cnt){
132
+ case 0:
133
+ arg1_rb=arg2_rb=Qnil;
134
+ break;
135
+ case 1:
136
+ arg1_rb=*arr_ptr;
137
+ arg2_rb=Qnil;
138
+ break;
139
+ default:
140
+ arg1_rb=arr_ptr[0];
141
+ arg2_rb=arr_ptr[1];
142
+ break;
143
+ }
144
+ }
145
+
146
+ if(NIL_P(arg1_rb))
147
+ *arg1=0;
148
+ else if(TYPE(arg1_rb)==RUBY_T_STRING){
149
+ strncpy(buffer,RSTRING_PTR(arg1_rb),15);
150
+ /* der Ruby-String ist nicht notwendig null-terminiert; manuell erledigen */
151
+ if((len=RSTRING_LEN(arg1_rb))>15)len=15;
152
+ *(buffer+len)=0;
153
+ *arg1=atoi(buffer);
154
+ }
155
+ else
156
+ *arg1=NUM2INT(arg1_rb);
157
+
158
+ if(NIL_P(arg2_rb))
159
+ *arg2=*arg1;
160
+ else if(TYPE(arg2_rb)==RUBY_T_STRING){
161
+ strncpy(buffer,RSTRING_PTR(arg2_rb),15);
162
+ if((len=RSTRING_LEN(arg2_rb))>15)len=15;
163
+ *(buffer+len)=0;
164
+ *arg2=atoi(buffer);
165
+ }
166
+ else
167
+ *arg2=NUM2INT(arg2_rb);
168
+ }
169
+
170
+ /**
171
+ * get_params()
172
+ *
173
+ * extract params from argc/argv, convert&check results
174
+ */
175
+ static void get_params(int argc,VALUE* argv,char *arg1s,char *arg2s,int *argi,int optargs)
176
+ {
177
+ int len,maxlen=9;
178
+ VALUE arg1_rb,arg2_rb;
179
+
180
+ switch(optargs){
181
+ case 0: /* ein notwendiger Parameter (f�r lut_filialen) */
182
+ rb_scan_args(argc,argv,"10",&arg1_rb);
183
+ break;
184
+
185
+ case 1: /* ein notwendiger, ein optionaler Parameter (f�r viele lut-Funktionen) */
186
+ rb_scan_args(argc,argv,"11",&arg1_rb,&arg2_rb);
187
+ if(NIL_P(arg2_rb)) /* Filiale; Hauptstelle ist 0 */
188
+ *argi=0;
189
+ else
190
+ *argi=NUM2INT(arg2_rb);
191
+ break;
192
+
193
+ case 2: /* zwei notwendige Parameter (f�r konto_check) */
194
+ rb_scan_args(argc,argv,"20",&arg1_rb,&arg2_rb);
195
+ break;
196
+
197
+ case 3: /* ein notwendiger Parameter (f�r iban_check) */
198
+ rb_scan_args(argc,argv,"10",&arg1_rb);
199
+ maxlen=128;
200
+ break;
201
+
202
+ case 4: /* ein notwendiger Parameter (f�r ipi_gen) */
203
+ rb_scan_args(argc,argv,"10",&arg1_rb);
204
+ maxlen=24;
205
+ break;
206
+
207
+ default:
208
+ break;
209
+ }
210
+
211
+ switch(TYPE(arg1_rb)){
212
+ case RUBY_T_STRING:
213
+ strncpy(arg1s,RSTRING_PTR(arg1_rb),maxlen);
214
+ if((len=RSTRING_LEN(arg1_rb))>maxlen)len=maxlen;
215
+ *(arg1s+len)=0;
216
+ break;
217
+ case RUBY_T_FLOAT:
218
+ case RUBY_T_FIXNUM:
219
+ case RUBY_T_BIGNUM:
220
+ /* Zahlwerte werden zun�chst nach double umgewandelt, da der
221
+ * Zahlenbereich von 32 Bit Integers nicht gro� genug ist f�r
222
+ * z.B. Kontonummern (10 Stellen). Mit snprintf wird dann eine
223
+ * Stringversion erzeugt - nicht schnell aber einfach :-).
224
+ */
225
+ snprintf(arg1s,maxlen,"%5.0f",NUM2DBL(arg1_rb));
226
+ break;
227
+ default:
228
+ if(!optargs)
229
+ rb_raise(rb_eRuntimeError,"Unable to convert given blz.");
230
+ else
231
+ rb_raise(rb_eRuntimeError,"Unable to convert given value.");
232
+ break;
233
+ }
234
+ if(optargs==2)switch(TYPE(arg2_rb)){ /* f�r konto_check(): kto holen */
235
+ case RUBY_T_STRING:
236
+ strncpy(arg2s,RSTRING_PTR(arg2_rb),15);
237
+ if((len=RSTRING_LEN(arg2_rb))>15)len=15;
238
+ *(arg2s+len)=0;
239
+ break;
240
+ case RUBY_T_FLOAT:
241
+ case RUBY_T_FIXNUM:
242
+ case RUBY_T_BIGNUM:
243
+ snprintf(arg2s,16,"%5.0f",NUM2DBL(arg2_rb));
244
+ break;
245
+ default:
246
+ rb_raise(rb_eRuntimeError,"Unable to convert given kto.");
247
+ break;
248
+ }
249
+ }
250
+
251
+ /**
252
+ * KontoCheck::konto_check(<blz>, <kto>)
253
+ *
254
+ * check whether the given account number kto kann possibly be
255
+ * a valid number of the bank with the bic blz.
256
+ *
257
+ * possible return values (and short description):
258
+ *
259
+ * LUT2_NOT_INITIALIZED "die Programmbibliothek wurde noch nicht initialisiert"
260
+ * MISSING_PARAMETER "Bei der Kontopr�fung fehlt ein notwendiger Parameter (BLZ oder Konto)"
261
+ *
262
+ * NOT_IMPLEMENTED "die Methode wurde noch nicht implementiert"
263
+ * UNDEFINED_SUBMETHOD "Die (Unter)Methode ist nicht definiert"
264
+ * INVALID_BLZ "Die (Unter)Methode ist nicht definiert"
265
+ * INVALID_BLZ_LENGTH "die Bankleitzahl ist nicht achtstellig"
266
+ * INVALID_KTO "das Konto ist ung�ltig"
267
+ * INVALID_KTO_LENGTH "ein Konto mu� zwischen 1 und 10 Stellen haben"
268
+ * FALSE "falsch"
269
+ * NOT_DEFINED "die Methode ist nicht definiert"
270
+ * BAV_FALSE "BAV denkt, das Konto ist falsch (konto_check h�lt es f�r richtig)"
271
+ * OK "ok"
272
+ * OK_NO_CHK "ok, ohne Pr�fung"
273
+ */
274
+ static VALUE konto_check(int argc,VALUE* argv,VALUE self)
275
+ {
276
+ char kto[16],blz[16],error_msg[512];
277
+ int retval;
278
+
279
+ get_params(argc,argv,blz,kto,NULL,2);
280
+ if((retval=kto_check_blz(blz,kto))==LUT2_NOT_INITIALIZED || retval==MISSING_PARAMETER)RUNTIME_ERROR(retval);
281
+ return rb_ary_new3(2,retval>0?Qtrue:Qfalse,INT2FIX(retval));
282
+ }
283
+
284
+
285
+ /**
286
+ * KontoCheck::init([lutfile[,level[,set]]])
287
+ *
288
+ * initialize the underlying C library konto_check with the bank
289
+ * information from lutfile.
290
+ *
291
+ * possible return values (and short description):
292
+ *
293
+ * FILE_READ_ERROR "kann Datei nicht lesen"
294
+ * NO_LUT_FILE "die blz.lut Datei wurde nicht gefunden"
295
+ * INCREMENTAL_INIT_NEEDS_INFO "Ein inkrementelles Initialisieren ben�tigt einen Info-Block in der LUT-Datei"
296
+ * INCREMENTAL_INIT_FROM_DIFFERENT_FILE "Ein inkrementelles Initialisieren mit einer anderen LUT-Datei ist nicht m�glich"
297
+ * LUT2_BLOCK_NOT_IN_FILE "Der Block ist nicht in der LUT-Datei enthalten"
298
+ * INIT_FATAL_ERROR "Initialisierung fehlgeschlagen (init_wait geblockt)"
299
+ * ERROR_MALLOC "kann keinen Speicher allokieren"
300
+ * INVALID_LUT_FILE "die blz.lut Datei ist inkosistent/ung�ltig"
301
+ * LUT_CRC_ERROR "Pr�fsummenfehler in der blz.lut Datei"
302
+ * LUT2_DECOMPRESS_ERROR "Fehler beim Dekomprimieren eines LUT-Blocks"
303
+ * LUT2_FILE_CORRUPTED "Die LUT-Datei ist korrumpiert"
304
+ * LUT2_Z_DATA_ERROR "Datenfehler im komprimierten LUT-Block"
305
+ * LUT2_Z_MEM_ERROR "Memory error in den ZLIB-Routinen"
306
+ * KTO_CHECK_UNSUPPORTED_COMPRESSION "die notwendige Kompressions-Bibliothek wurden beim Kompilieren nicht eingebunden"
307
+ *
308
+ * LUT1_SET_LOADED "Die Datei ist im alten LUT-Format (1.0/1.1)"
309
+ * OK "ok"
310
+ */
311
+ static VALUE init(int argc,VALUE* argv,VALUE self)
312
+ {
313
+ char lut_name[FILENAME_MAX+1],error_msg[512];
314
+ int retval,level,set;
315
+
316
+ get_params_file(argc,argv,lut_name,&level,&set,1);
317
+ retval=lut_init(lut_name,level,set);
318
+ switch(retval){
319
+ case OK:
320
+ case LUT1_SET_LOADED:
321
+ case LUT2_PARTIAL_OK:
322
+ break;
323
+ default:
324
+ RUNTIME_ERROR(retval);
325
+ }
326
+ return INT2FIX(retval);
327
+ }
328
+
329
+ /**
330
+ * KontoCheck::free()
331
+ *
332
+ * release allocated memory of the underlying C library konto_check
333
+ * return value is always true
334
+ */
335
+ static VALUE free_rb(VALUE self)
336
+ {
337
+ lut_cleanup();
338
+ return Qtrue;
339
+ }
340
+
341
+ /**
342
+ * KontoCheck::generate_lutfile()
343
+ *
344
+ * generate a new lutfile
345
+ *
346
+ * possible return values (and short description):
347
+ * ERROR_MALLOC "kann keinen Speicher allokieren"
348
+ * FILE_READ_ERROR "kann Datei nicht lesen"
349
+ * FILE_WRITE_ERROR "kann Datei nicht schreiben"
350
+ * INVALID_BLZ_FILE "Fehler in der blz.txt Datei (falsche Zeilenl�nge)"
351
+ * INVALID_LUT_FILE "die blz.lut Datei ist inkosistent/ung�ltig"
352
+ * KTO_CHECK_UNSUPPORTED_COMPRESSION "die notwendige Kompressions-Bibliothek wurden beim Kompilieren nicht eingebunden"
353
+ * LUT2_COMPRESS_ERROR "Fehler beim Komprimieren eines LUT-Blocks"
354
+ * LUT2_FILE_CORRUPTED "Die LUT-Datei ist korrumpiert"
355
+ * LUT2_GUELTIGKEIT_SWAPPED "Im G�ltigkeitsdatum sind Anfangs- und Enddatum vertauscht"
356
+ * LUT2_INVALID_GUELTIGKEIT "Das angegebene G�ltigkeitsdatum ist ung�ltig (Soll: JJJJMMTT-JJJJMMTT)"
357
+ * LUT2_NO_SLOT_FREE "Im Inhaltsverzeichnis der LUT-Datei ist kein Slot mehr frei"
358
+ *
359
+ * LUT1_FILE_GENERATED "ok; es wurde allerdings eine LUT-Datei im alten Format (1.0/1.1) generiert"
360
+ * OK "ok"
361
+ */
362
+ static VALUE generate_lutfile_rb(int argc,VALUE* argv,VALUE self)
363
+ {
364
+ char input_name[FILENAME_MAX+1],output_name[FILENAME_MAX+1];
365
+ char user_info[256],gueltigkeit[20],buffer[16],error_msg[512];
366
+ int retval,felder,filialen,set,len;
367
+ VALUE input_name_rb,output_name_rb,user_info_rb,
368
+ gueltigkeit_rb,felder_rb,filialen_rb,set_rb;
369
+
370
+ rb_scan_args(argc,argv,"25",&input_name_rb,&output_name_rb,
371
+ &user_info_rb,&gueltigkeit_rb,&felder_rb,&filialen_rb,&set_rb);
372
+
373
+ if(TYPE(input_name_rb)==RUBY_T_STRING){
374
+ strncpy(input_name,RSTRING_PTR(input_name_rb),FILENAME_MAX);
375
+ if((len=RSTRING_LEN(input_name_rb))>FILENAME_MAX)len=FILENAME_MAX;
376
+ *(input_name+len)=0;
377
+ }
378
+ else
379
+ rb_raise(rb_eRuntimeError,"Unable to convert given input filename.");
380
+
381
+ if(TYPE(output_name_rb)==RUBY_T_STRING){
382
+ strncpy(output_name,RSTRING_PTR(output_name_rb),FILENAME_MAX);
383
+ if((len=RSTRING_LEN(output_name_rb))>FILENAME_MAX)len=FILENAME_MAX;
384
+ *(output_name+len)=0;
385
+ }
386
+ else
387
+ rb_raise(rb_eRuntimeError,"Unable to convert given output filename.");
388
+
389
+ if(NIL_P(user_info_rb)){
390
+ *user_info=0;
391
+ }
392
+ else if(TYPE(user_info_rb)==RUBY_T_STRING){
393
+ strncpy(user_info,RSTRING_PTR(user_info_rb),255);
394
+ if((len=RSTRING_LEN(user_info_rb))>255)len=255;
395
+ *(user_info+len)=0;
396
+ }
397
+ else
398
+ rb_raise(rb_eRuntimeError,"Unable to convert given user_info string.");
399
+
400
+ if(NIL_P(gueltigkeit_rb)){
401
+ *gueltigkeit=0;
402
+ }
403
+ else if(TYPE(gueltigkeit_rb)==RUBY_T_STRING){
404
+ strncpy(gueltigkeit,RSTRING_PTR(gueltigkeit_rb),19);
405
+ if((len=RSTRING_LEN(gueltigkeit_rb))>19)len=19;
406
+ *(gueltigkeit+len)=0;
407
+ }
408
+ else
409
+ rb_raise(rb_eRuntimeError,"Unable to convert given gueltigkeit string.");
410
+
411
+ if(NIL_P(felder_rb))
412
+ felder=DEFAULT_LUT_FIELDS_NUM;
413
+ else if(TYPE(felder_rb)==RUBY_T_STRING){
414
+ strncpy(buffer,RSTRING_PTR(felder_rb),15);
415
+ if((len=RSTRING_LEN(felder_rb))>15)len=15;
416
+ *(buffer+len)=0;
417
+ felder=atoi(buffer);
418
+ }
419
+ else
420
+ felder=NUM2INT(felder_rb);
421
+
422
+ if(NIL_P(filialen_rb))
423
+ filialen=0;
424
+ else if(TYPE(filialen_rb)==RUBY_T_STRING){
425
+ strncpy(buffer,RSTRING_PTR(filialen_rb),15);
426
+ if((len=RSTRING_LEN(felder_rb))>15)len=15;
427
+ *(buffer+len)=0;
428
+ filialen=atoi(buffer);
429
+ }
430
+ else
431
+ filialen=NUM2INT(filialen_rb);
432
+
433
+ if(NIL_P(set_rb))
434
+ set=0;
435
+ else if(TYPE(set_rb)==RUBY_T_STRING){
436
+ strncpy(buffer,RSTRING_PTR(set_rb),15);
437
+ if((len=RSTRING_LEN(set_rb))>15)len=15;
438
+ *(buffer+len)=0;
439
+ set=atoi(buffer);
440
+ }
441
+ else
442
+ set=NUM2INT(set_rb);
443
+
444
+ retval=generate_lut2_p(input_name,output_name,user_info,gueltigkeit,felder,filialen,0,0,set);
445
+ if(retval<0)RUNTIME_ERROR(retval);
446
+ return INT2FIX(retval);
447
+ }
448
+
449
+ /**
450
+ * KontoCheck::retval2txt(<retval>)
451
+ *
452
+ * convert a numeric retval to string in various encodings
453
+ */
454
+ static VALUE retval2txt_rb(VALUE self, VALUE retval)
455
+ {
456
+ return rb_str_new2(kto_check_retval2txt(FIX2INT(retval)));
457
+ }
458
+
459
+ static VALUE retval2dos_rb(VALUE self, VALUE retval)
460
+ {
461
+ return rb_str_new2(kto_check_retval2dos(FIX2INT(retval)));
462
+ }
463
+
464
+ static VALUE retval2html_rb(VALUE self, VALUE retval)
465
+ {
466
+ return rb_str_new2(kto_check_retval2html(FIX2INT(retval)));
467
+ }
468
+
469
+ static VALUE retval2utf8_rb(VALUE self, VALUE retval)
470
+ {
471
+ return rb_str_new2(kto_check_retval2utf8(FIX2INT(retval)));
472
+ }
473
+
474
+ /**
475
+ * KontoCheck::dump_lutfile(<lutfile>)
476
+ *
477
+ * get all infos about the contents of a lutfile
478
+ */
479
+ static VALUE dump_lutfile_rb(int argc,VALUE* argv,VALUE self)
480
+ {
481
+ char lut_name[FILENAME_MAX+1],*ptr;
482
+ int retval;
483
+ VALUE dump;
484
+
485
+ get_params_file(argc,argv,lut_name,NULL,NULL,2);
486
+ retval=lut_dir_dump_str(lut_name,&ptr);
487
+ if(retval<=0)
488
+ dump=Qnil;
489
+ else
490
+ dump=rb_str_new2(ptr);
491
+ kc_free(ptr); /* die C-Funktion allokiert Speicher, der mu� wieder freigegeben werden */
492
+ return rb_ary_new3(2,dump,INT2FIX(retval));
493
+ }
494
+
495
+ /**
496
+ * KontoCheck::lut_info([lutfile])
497
+ *
498
+ * get infos about the contents of a lutfile or the loaded blocks (call without filename)
499
+ *
500
+ * possible return values (and short description):
501
+ *
502
+ * ERROR_MALLOC "kann keinen Speicher allokieren"
503
+ * FILE_READ_ERROR "kann Datei nicht lesen"
504
+ * INVALID_LUT_FILE "die blz.lut Datei ist inkosistent/ung�ltig"
505
+ * KTO_CHECK_UNSUPPORTED_COMPRESSION "die notwendige Kompressions-Bibliothek wurden beim Kompilieren nicht eingebunden"
506
+ * LUT1_FILE_USED "Es wurde eine LUT-Datei im Format 1.0/1.1 geladen"
507
+ * LUT2_BLOCK_NOT_IN_FILE "Der Block ist nicht in der LUT-Datei enthalten"
508
+ * LUT2_FILE_CORRUPTED "Die LUT-Datei ist korrumpiert"
509
+ * LUT2_NOT_INITIALIZED "die Programmbibliothek wurde noch nicht initialisiert"
510
+ * LUT2_Z_BUF_ERROR "Buffer error in den ZLIB Routinen"
511
+ * LUT2_Z_DATA_ERROR "Datenfehler im komprimierten LUT-Block"
512
+ * LUT2_Z_MEM_ERROR "Memory error in den ZLIB-Routinen"
513
+ * LUT_CRC_ERROR "Pr�fsummenfehler in der blz.lut Datei"
514
+ * OK "ok"
515
+ *
516
+ */
517
+ static VALUE lut_info_rb(int argc,VALUE* argv,VALUE self)
518
+ {
519
+ char lut_name[FILENAME_MAX+1],*info1,*info2,error_msg[512];
520
+ int retval,valid1,valid2;
521
+ VALUE info1_rb,info2_rb;
522
+
523
+ get_params_file(argc,argv,lut_name,NULL,NULL,3);
524
+ retval=lut_info(lut_name,&info1,&info2,&valid1,&valid2);
525
+ if(!info1)
526
+ info1_rb=Qnil;
527
+ else
528
+ info1_rb=rb_str_new2(info1);
529
+ if(!info2)
530
+ info2_rb=Qnil;
531
+ else
532
+ info2_rb=rb_str_new2(info2);
533
+ kc_free(info1); /* die C-Funktion allokiert Speicher, der mu� wieder freigegeben werden */
534
+ kc_free(info2);
535
+ if(retval<0)RUNTIME_ERROR(retval);
536
+ return rb_ary_new3(5,INT2FIX(retval),INT2FIX(valid1),INT2FIX(valid2),info1_rb,info2_rb);
537
+ }
538
+
539
+ /**
540
+ * KontoCheck::load_bank_data(<datafile>)
541
+ *
542
+ * This function was the old initialization function for konto_check; it is now
543
+ * replaced by init() for initialization and generate_lutfile() for generating
544
+ * a data file with all bank informations from blz_yyyymmdd.txt from
545
+ * http://www.bundesbank.de/zahlungsverkehr/zahlungsverkehr_bankleitzahlen_download.php
546
+ *
547
+ * This function serves now only as a schibbolet to check if someone uses the
548
+ * old interface :-).
549
+ */
550
+
551
+ /****************************************************************************
552
+ ****************************************************************************
553
+ **** ****
554
+ **** WARNING - this function will be removed in near future. ****
555
+ **** Use KontoCheck::init() for initialization from a lutfile, ****
556
+ **** KontoCheck::generate_lutfile() to generate a new lutfile. ****
557
+ **** The init() function is much faster (about 7..20 times) ****
558
+ **** then this function and has some more advantages (two sets ****
559
+ **** of data, flexible level of initialization, compact format). ****
560
+ **** ****
561
+ ****************************************************************************
562
+ ****************************************************************************/
563
+
564
+ static VALUE load_bank_data(VALUE self, VALUE path_rb) {
565
+ rb_raise(rb_eRuntimeError, "Perhaps you used the old interface of konto_check.\n"
566
+ "Use KontoCheck::init() to initialize the library\n"
567
+ "and check the order of function arguments for konto_test(blz,kto)");
568
+ }
569
+
570
+ /**
571
+ * KontoCheck::iban_2bic(<blz>)
572
+ *
573
+ * determine the BIC for a given (german) IBAN
574
+ *
575
+ * possible return values for retval (and short description):
576
+ *
577
+ * IBAN2BIC_ONLY_GERMAN "Die Funktion iban2bic() arbeitet nur mit deutschen Bankleitzahlen"
578
+ * LUT2_BIC_NOT_INITIALIZED "Das Feld BIC wurde nicht initialisiert"
579
+ * LUT2_NOT_INITIALIZED "die Programmbibliothek wurde noch nicht initialisiert"
580
+ * INVALID_BLZ_LENGTH "die Bankleitzahl ist nicht achtstellig"
581
+ * INVALID_BLZ "die Bankleitzahl ist ung�ltig"
582
+ * OK "ok"
583
+ */
584
+ static VALUE iban2bic_rb(int argc,VALUE* argv,VALUE self)
585
+ {
586
+ char iban[128],error_msg[512],blz[10],kto[16],*bic;
587
+ int retval;
588
+
589
+ get_params(argc,argv,iban,NULL,NULL,3);
590
+ bic=iban2bic(iban,&retval,blz,kto);
591
+ if(retval<0 && retval!=INVALID_BLZ)RUNTIME_ERROR(retval);
592
+ return rb_ary_new3(4,rb_str_new2(bic),INT2FIX(retval),rb_str_new2(blz),rb_str_new2(kto));
593
+ }
594
+
595
+ /**
596
+ * KontoCheck::iban_check(<blz>)
597
+ *
598
+ * test an IBAN
599
+ *
600
+ * possible return values for retval (and short description):
601
+ *
602
+ * NO_GERMAN_BIC "Ein Konto kann kann nur f�r deutsche Banken gepr�ft werden"
603
+ * IBAN_OK_KTO_NOT "Die Pr�fziffer der IBAN stimmt, die der Kontonummer nicht"
604
+ * KTO_OK_IBAN_NOT "Die Pr�fziffer der Kontonummer stimmt, die der IBAN nicht"
605
+ * FALSE "falsch"
606
+ * OK "ok"
607
+ *
608
+ * possible return values for retval_kc:
609
+ * LUT2_NOT_INITIALIZED "die Programmbibliothek wurde noch nicht initialisiert"
610
+ * MISSING_PARAMETER "Bei der Kontopr�fung fehlt ein notwendiger Parameter (BLZ oder Konto)"
611
+ * NOT_IMPLEMENTED "die Methode wurde noch nicht implementiert"
612
+ * UNDEFINED_SUBMETHOD "Die (Unter)Methode ist nicht definiert"
613
+ * INVALID_BLZ "Die (Unter)Methode ist nicht definiert"
614
+ * INVALID_BLZ_LENGTH "die Bankleitzahl ist nicht achtstellig"
615
+ * INVALID_KTO "das Konto ist ung�ltig"
616
+ * INVALID_KTO_LENGTH "ein Konto mu� zwischen 1 und 10 Stellen haben"
617
+ * FALSE "falsch"
618
+ * NOT_DEFINED "die Methode ist nicht definiert"
619
+ * BAV_FALSE "BAV denkt, das Konto ist falsch (konto_check h�lt es f�r richtig)"
620
+ * OK "ok"
621
+ * OK_NO_CHK "ok, ohne Pr�fung"
622
+ */
623
+ static VALUE iban_check_rb(int argc,VALUE* argv,VALUE self)
624
+ {
625
+ char iban[128];
626
+ int retval,retval_kc;
627
+
628
+ get_params(argc,argv,iban,NULL,NULL,3);
629
+ retval=iban_check(iban,&retval_kc);
630
+ return rb_ary_new3(2,INT2FIX(retval),INT2FIX(retval_kc));
631
+ }
632
+
633
+ /**
634
+ * KontoCheck::ipi_gen(<zweck>)
635
+ *
636
+ * determine the BIC for a given (german) IBAN
637
+ *
638
+ * possible return values for retval (and short description):
639
+ *
640
+ * IPI_INVALID_LENGTH "Die L�nge des IPI-Verwendungszwecks darf maximal 18 Byte sein"
641
+ * IPI_INVALID_CHARACTER "Im strukturierten Verwendungszweck d�rfen nur alphanumerische Zeichen vorkommen"
642
+ * OK "ok"
643
+ */
644
+ static VALUE ipi_gen_rb(int argc,VALUE* argv,VALUE self)
645
+ {
646
+ char zweck[24],dst[24],papier[30];
647
+ int retval;
648
+
649
+ get_params(argc,argv,zweck,NULL,NULL,4);
650
+ retval=ipi_gen(zweck,dst,papier);
651
+ return rb_ary_new3(3,rb_str_new2(dst),INT2FIX(retval),rb_str_new2(papier));
652
+ }
653
+
654
+ /**
655
+ * KontoCheck::ipi_check(<zweck>)
656
+ *
657
+ * determine the BIC for a given (german) IBAN
658
+ *
659
+ * possible return values for retval (and short description):
660
+ *
661
+ * IPI_CHECK_INVALID_LENGTH "Der zu validierende strukturierete Verwendungszweck mu� genau 20 Zeichen enthalten"
662
+ * FALSE "falsch"
663
+ * OK "ok"
664
+ */
665
+ static VALUE ipi_check_rb(int argc,VALUE* argv,VALUE self)
666
+ {
667
+ char zweck[128];
668
+
669
+ get_params(argc,argv,zweck,NULL,NULL,3);
670
+ return INT2FIX(ipi_check(zweck));
671
+ }
672
+
673
+ /**
674
+ * KontoCheck::bank_valid(<blz> [,filiale])
675
+ *
676
+ * check if a given blz is valid
677
+ *
678
+ * possible return values (and short description):
679
+ *
680
+ * LUT2_INDEX_OUT_OF_RANGE "Der Index f�r die Filiale ist ung�ltig"
681
+ * LUT2_BLZ_NOT_INITIALIZED "Das Feld BLZ wurde nicht initialisiert"
682
+ * INVALID_BLZ_LENGTH "die Bankleitzahl ist nicht achtstellig"
683
+ * INVALID_BLZ "die Bankleitzahl ist ung�ltig"
684
+ * OK "ok"
685
+ */
686
+ static VALUE bank_valid(int argc,VALUE* argv,VALUE self)
687
+ {
688
+ char blz[16],error_msg[512];
689
+ int filiale,retval;
690
+
691
+ get_params(argc,argv,blz,NULL,&filiale,1);
692
+ retval=lut_blz(blz,filiale);
693
+ if(retval==LUT2_BLZ_NOT_INITIALIZED)RUNTIME_ERROR(retval);
694
+ return rb_ary_new3(2,retval>0?Qtrue:Qfalse,INT2FIX(retval));
695
+ }
696
+
697
+ /**
698
+ * KontoCheck::bank_filialen(<blz>)
699
+ *
700
+ * return the number of branch offices
701
+ *
702
+ * possible return values (and short description):
703
+ *
704
+ * LUT2_BLZ_NOT_INITIALIZED "Das Feld BLZ wurde nicht initialisiert"
705
+ * LUT2_FILIALEN_NOT_INITIALIZED "Das Feld Filialen wurde nicht initialisiert"
706
+ * LUT2_INDEX_OUT_OF_RANGE "Der Index f�r die Filiale ist ung�ltig"
707
+ * INVALID_BLZ_LENGTH "die Bankleitzahl ist nicht achtstellig"
708
+ * INVALID_BLZ "die Bankleitzahl ist ung�ltig"
709
+ * OK "ok"
710
+ */
711
+ static VALUE bank_filialen(int argc,VALUE* argv,VALUE self)
712
+ {
713
+ char blz[16],error_msg[512];
714
+ int retval,cnt;
715
+
716
+ get_params(argc,argv,blz,NULL,NULL,0);
717
+ cnt=lut_filialen(blz,&retval);
718
+ if(retval==LUT2_BLZ_NOT_INITIALIZED || retval==LUT2_FILIALEN_NOT_INITIALIZED)RUNTIME_ERROR(retval);
719
+ return rb_ary_new3(2,retval<=0?Qnil:INT2FIX(cnt),INT2FIX(retval));
720
+ }
721
+
722
+ /**
723
+ * KontoCheck::bank_alles(<blz> [,filiale])
724
+ *
725
+ * return all available information about a bank
726
+ *
727
+ * possible return values (and short description):
728
+ *
729
+ * LUT2_NOT_INITIALIZED "die Programmbibliothek wurde noch nicht initialisiert"
730
+ * INVALID_BLZ_LENGTH "die Bankleitzahl ist nicht achtstellig"
731
+ * INVALID_BLZ "die Bankleitzahl ist ung�ltig"
732
+ * LUT2_PARTIAL_OK "es wurden nicht alle Blocks geladen"
733
+ * OK "ok"
734
+ */
735
+
736
+ static VALUE bank_alles(int argc,VALUE* argv,VALUE self)
737
+ {
738
+ char blz[16],**p_name,**p_name_kurz,**p_ort,**p_bic,*p_aenderung,*p_loeschung,aenderung[2],loeschung[2],error_msg[512];
739
+ int retval,filiale,cnt,*p_blz,*p_plz,*p_pan,p_pz,*p_nr,*p_nachfolge_blz;
740
+
741
+ get_params(argc,argv,blz,NULL,&filiale,1);
742
+ retval=lut_multiple(blz,&cnt,&p_blz, &p_name,&p_name_kurz,&p_plz,&p_ort,&p_pan,&p_bic,&p_pz,&p_nr,
743
+ &p_aenderung,&p_loeschung,&p_nachfolge_blz,NULL,NULL,NULL);
744
+ if(retval==LUT2_BLZ_NOT_INITIALIZED)RUNTIME_ERROR(retval);
745
+ if(filiale<0 || (cnt && filiale>=cnt))return(INT2FIX(LUT2_INDEX_OUT_OF_RANGE)); /* ung�ltige Filiale */
746
+
747
+ /* Fehler, die C-Arrays d�rfen nicht dereferenziert werden */
748
+ if(retval<=0 && retval!=LUT2_PARTIAL_OK)return rb_ary_new3(2,INT2FIX(retval),Qnil);
749
+
750
+ *aenderung=p_aenderung[filiale];
751
+ *loeschung=p_loeschung[filiale];
752
+ *(aenderung+1)=*(loeschung+1)=0;
753
+
754
+ #define SV(x) *x?rb_str_new2(x):Qnil
755
+ #define IV(x) x>=0?INT2FIX(x):Qnil
756
+ return rb_ary_new3(13,INT2FIX(retval),IV(cnt),SV(p_name[filiale]),
757
+ SV(p_name_kurz[filiale]),IV(p_plz[filiale]),SV(p_ort[filiale]),
758
+ IV(p_pan[filiale]),SV(p_bic[filiale]),IV(p_pz),IV(p_nr[filiale]),
759
+ SV(aenderung),SV(loeschung),IV(p_nachfolge_blz[filiale]));
760
+ }
761
+
762
+ /**
763
+ * KontoCheck::bank_name(<blz> [,filiale])
764
+ *
765
+ * return the name of a bank
766
+ *
767
+ * possible return values (and short description):
768
+ *
769
+ * LUT2_BLZ_NOT_INITIALIZED "Das Feld BLZ wurde nicht initialisiert"
770
+ * LUT2_NAME_NOT_INITIALIZED "Das Feld Bankname wurde nicht initialisiert"
771
+ * LUT2_INDEX_OUT_OF_RANGE "Der Index f�r die Filiale ist ung�ltig"
772
+ * INVALID_BLZ_LENGTH "die Bankleitzahl ist nicht achtstellig"
773
+ * INVALID_BLZ "die Bankleitzahl ist ung�ltig"
774
+ * OK "ok"
775
+ */
776
+ static VALUE bank_name(int argc,VALUE* argv,VALUE self)
777
+ {
778
+ char blz[16],*name,error_msg[512];
779
+ int retval,filiale;
780
+
781
+ get_params(argc,argv,blz,NULL,&filiale,1);
782
+ name=lut_name(blz,filiale,&retval);
783
+ if(retval==LUT2_BLZ_NOT_INITIALIZED || retval==LUT2_NAME_NOT_INITIALIZED)RUNTIME_ERROR(retval);
784
+ return rb_ary_new3(2,retval<=0?Qnil:rb_str_new2(name),INT2FIX(retval));
785
+ }
786
+
787
+ /**
788
+ * KontoCheck::bank_name_kurz(<blz> [,filiale])
789
+ *
790
+ * return the short name of a bank
791
+ *
792
+ * possible return values (and short description):
793
+ *
794
+ * LUT2_BLZ_NOT_INITIALIZED "Das Feld BLZ wurde nicht initialisiert"
795
+ * LUT2_NAME_KURZ_NOT_INITIALIZED "Das Feld Kurzname wurde nicht initialisiert"
796
+ * LUT2_INDEX_OUT_OF_RANGE "Der Index f�r die Filiale ist ung�ltig"
797
+ * INVALID_BLZ_LENGTH "die Bankleitzahl ist nicht achtstellig"
798
+ * INVALID_BLZ "die Bankleitzahl ist ung�ltig"
799
+ * OK "ok"
800
+ */
801
+ static VALUE bank_name_kurz(int argc,VALUE* argv,VALUE self)
802
+ {
803
+ char blz[16],*name,error_msg[512];
804
+ int retval,filiale;
805
+
806
+ get_params(argc,argv,blz,NULL,&filiale,1);
807
+ name=lut_name_kurz(blz,filiale,&retval);
808
+ if(retval==LUT2_BLZ_NOT_INITIALIZED || retval==LUT2_NAME_KURZ_NOT_INITIALIZED)RUNTIME_ERROR(retval);
809
+ return rb_ary_new3(2,retval<=0?Qnil:rb_str_new2(name),INT2FIX(retval));
810
+ }
811
+
812
+ /**
813
+ * KontoCheck::bank_name_ort(<blz> [,filiale])
814
+ *
815
+ * return the location of a bank
816
+ *
817
+ * possible return values (and short description):
818
+ *
819
+ * LUT2_BLZ_NOT_INITIALIZED "Das Feld BLZ wurde nicht initialisiert"
820
+ * LUT2_ORT_NOT_INITIALIZED "Das Feld Ort wurde nicht initialisiert"
821
+ * LUT2_INDEX_OUT_OF_RANGE "Der Index f�r die Filiale ist ung�ltig"
822
+ * INVALID_BLZ_LENGTH "die Bankleitzahl ist nicht achtstellig"
823
+ * INVALID_BLZ "die Bankleitzahl ist ung�ltig"
824
+ * OK "ok"
825
+ */
826
+ static VALUE bank_ort(int argc,VALUE* argv,VALUE self)
827
+ {
828
+ char blz[16],*ort,error_msg[512];
829
+ int retval,filiale;
830
+
831
+ get_params(argc,argv,blz,NULL,&filiale,1);
832
+ ort=lut_ort(blz,filiale,&retval);
833
+ if(retval==LUT2_BLZ_NOT_INITIALIZED || retval==LUT2_ORT_NOT_INITIALIZED)RUNTIME_ERROR(retval);
834
+ return rb_ary_new3(2,retval<=0?Qnil:rb_str_new2(ort),INT2FIX(retval));
835
+ }
836
+
837
+ /**
838
+ * KontoCheck::bank_plz(<blz> [,filiale])
839
+ *
840
+ * return the plz of a bank
841
+ *
842
+ * possible return values (and short description):
843
+ *
844
+ * LUT2_BLZ_NOT_INITIALIZED "Das Feld BLZ wurde nicht initialisiert"
845
+ * LUT2_PLZ_NOT_INITIALIZED "Das Feld PLZ wurde nicht initialisiert"
846
+ * LUT2_INDEX_OUT_OF_RANGE "Der Index f�r die Filiale ist ung�ltig"
847
+ * INVALID_BLZ_LENGTH "die Bankleitzahl ist nicht achtstellig"
848
+ * INVALID_BLZ "die Bankleitzahl ist ung�ltig"
849
+ * OK "ok"
850
+ */
851
+ static VALUE bank_plz(int argc,VALUE* argv,VALUE self)
852
+ {
853
+ char blz[16],error_msg[512];
854
+ int retval,plz,filiale;
855
+
856
+ get_params(argc,argv,blz,NULL,&filiale,1);
857
+ plz=lut_plz(blz,filiale,&retval);
858
+ if(retval==LUT2_BLZ_NOT_INITIALIZED || retval==LUT2_PLZ_NOT_INITIALIZED)RUNTIME_ERROR(retval);
859
+ return rb_ary_new3(2,retval<=0?Qnil:INT2FIX(plz),INT2FIX(retval));
860
+ }
861
+
862
+ /**
863
+ * KontoCheck::bank_pz(<blz> [,filiale])
864
+ *
865
+ * return the check method of a bank
866
+ *
867
+ * possible return values (and short description):
868
+ *
869
+ * LUT2_BLZ_NOT_INITIALIZED "Das Feld BLZ wurde nicht initialisiert"
870
+ * LUT2_PZ_NOT_INITIALIZED "Das Feld Pr�fziffer wurde nicht initialisiert"
871
+ * LUT2_INDEX_OUT_OF_RANGE "Der Index f�r die Filiale ist ung�ltig"
872
+ * INVALID_BLZ_LENGTH "die Bankleitzahl ist nicht achtstellig"
873
+ * INVALID_BLZ "die Bankleitzahl ist ung�ltig"
874
+ * OK "ok"
875
+ */
876
+ static VALUE bank_pz(int argc,VALUE* argv,VALUE self)
877
+ {
878
+ char blz[16],error_msg[512];
879
+ int retval,pz,filiale;
880
+
881
+ get_params(argc,argv,blz,NULL,&filiale,1);
882
+ pz=lut_pz(blz,filiale,&retval);
883
+ if(retval==LUT2_BLZ_NOT_INITIALIZED || retval==LUT2_PZ_NOT_INITIALIZED)RUNTIME_ERROR(retval);
884
+ return rb_ary_new3(2,retval<=0?Qnil:INT2FIX(pz),INT2FIX(retval));
885
+ }
886
+
887
+ /**
888
+ * KontoCheck::bank_bic(<blz> [,filiale])
889
+ *
890
+ * return the BIC (Bank Identifier Code) of a bank
891
+ *
892
+ * possible return values (and short description):
893
+ *
894
+ * LUT2_BLZ_NOT_INITIALIZED "Das Feld BLZ wurde nicht initialisiert"
895
+ * LUT2_BIC_NOT_INITIALIZED "Das Feld BIC wurde nicht initialisiert"
896
+ * LUT2_INDEX_OUT_OF_RANGE "Der Index f�r die Filiale ist ung�ltig"
897
+ * INVALID_BLZ_LENGTH "die Bankleitzahl ist nicht achtstellig"
898
+ * INVALID_BLZ "die Bankleitzahl ist ung�ltig"
899
+ * OK "ok"
900
+ */
901
+ static VALUE bank_bic(int argc,VALUE* argv,VALUE self)
902
+ {
903
+ char blz[16],*ptr,error_msg[512];
904
+ int retval,filiale;
905
+
906
+ get_params(argc,argv,blz,NULL,&filiale,1);
907
+ ptr=lut_bic(blz,filiale,&retval);
908
+ if(retval==LUT2_BLZ_NOT_INITIALIZED || retval==LUT2_BIC_NOT_INITIALIZED)RUNTIME_ERROR(retval);
909
+ return rb_ary_new3(2,retval<=0?Qnil:rb_str_new2(ptr),INT2FIX(retval));
910
+ }
911
+
912
+ /**
913
+ * KontoCheck::bank_aenderung(<blz> [,filiale])
914
+ *
915
+ * return the '�nderung' flag of a bank (as string):
916
+ * A Addition, M Modified, U Unchanged, D Deletion.
917
+ *
918
+ * possible return values (and short description):
919
+ *
920
+ * LUT2_BLZ_NOT_INITIALIZED "Das Feld BLZ wurde nicht initialisiert"
921
+ * LUT2_AENDERUNG_NOT_INITIALIZED "Das Feld �nderung wurde nicht initialisiert"
922
+ * LUT2_INDEX_OUT_OF_RANGE "Der Index f�r die Filiale ist ung�ltig"
923
+ * INVALID_BLZ_LENGTH "die Bankleitzahl ist nicht achtstellig"
924
+ * INVALID_BLZ "die Bankleitzahl ist ung�ltig"
925
+ * OK "ok"
926
+ */
927
+ static VALUE bank_aenderung(int argc,VALUE* argv,VALUE self)
928
+ {
929
+ char blz[16],aenderung[2],error_msg[512];
930
+ int retval,filiale;
931
+
932
+ get_params(argc,argv,blz,NULL,&filiale,1);
933
+ *aenderung=lut_aenderung(blz,filiale,&retval);
934
+ aenderung[1]=0;
935
+ if(retval==LUT2_BLZ_NOT_INITIALIZED || retval==LUT2_AENDERUNG_NOT_INITIALIZED)RUNTIME_ERROR(retval);
936
+ return rb_ary_new3(2,retval<=0?Qnil:rb_str_new2(aenderung),INT2FIX(retval));
937
+ }
938
+
939
+ /**
940
+ * KontoCheck::bank_loeschung(<blz> [,filiale])
941
+ *
942
+ * return the 'L�schung' flag of a bank as int: 0 or 1
943
+ *
944
+ * possible return values (and short description):
945
+ *
946
+ * LUT2_BLZ_NOT_INITIALIZED "Das Feld BLZ wurde nicht initialisiert"
947
+ * LUT2_LOESCHUNG_NOT_INITIALIZED "Das Feld L�schung wurde nicht initialisiert"
948
+ * LUT2_INDEX_OUT_OF_RANGE "Der Index f�r die Filiale ist ung�ltig"
949
+ * INVALID_BLZ_LENGTH "die Bankleitzahl ist nicht achtstellig"
950
+ * INVALID_BLZ "die Bankleitzahl ist ung�ltig"
951
+ * OK "ok"
952
+ */
953
+ static VALUE bank_loeschung(int argc,VALUE* argv,VALUE self)
954
+ {
955
+ char blz[16],error_msg[512];
956
+ int retval,loeschung,filiale;
957
+
958
+ get_params(argc,argv,blz,NULL,&filiale,1);
959
+ loeschung=lut_loeschung(blz,filiale,&retval)-'0';
960
+ if(retval==LUT2_BLZ_NOT_INITIALIZED || retval==LUT2_LOESCHUNG_NOT_INITIALIZED)RUNTIME_ERROR(retval);
961
+ return rb_ary_new3(2,retval<=0?Qnil:INT2FIX(loeschung),INT2FIX(retval));
962
+ }
963
+
964
+ /**
965
+ * KontoCheck::bank_nachfolge_blz(<blz> [,filiale])
966
+ *
967
+ * return the successor of a bank which will be deleted ('L�schung' flag set)
968
+ *
969
+ * possible return values (and short description):
970
+ *
971
+ * LUT2_BLZ_NOT_INITIALIZED "Das Feld BLZ wurde nicht initialisiert"
972
+ * LUT2_NACHFOLGE_BLZ_NOT_INITIALIZED "Das Feld Nachfolge-BLZ wurde nicht initialisiert"
973
+ * LUT2_INDEX_OUT_OF_RANGE "Der Index f�r die Filiale ist ung�ltig"
974
+ * INVALID_BLZ_LENGTH "die Bankleitzahl ist nicht achtstellig"
975
+ * INVALID_BLZ "die Bankleitzahl ist ung�ltig"
976
+ * OK "ok"
977
+ */
978
+ static VALUE bank_nachfolge_blz(int argc,VALUE* argv,VALUE self)
979
+ {
980
+ char blz[16],error_msg[512];
981
+ int retval,n_blz,filiale;
982
+
983
+ get_params(argc,argv,blz,NULL,&filiale,1);
984
+ n_blz=lut_nachfolge_blz(blz,filiale,&retval);
985
+ if(retval==LUT2_BLZ_NOT_INITIALIZED || retval==LUT2_NACHFOLGE_BLZ_NOT_INITIALIZED)RUNTIME_ERROR(retval);
986
+ return rb_ary_new3(2,retval<=0?Qnil:INT2FIX(n_blz),INT2FIX(retval));
987
+ }
988
+
989
+ /**
990
+ * KontoCheck::bank_pan(<blz> [,filiale])
991
+ *
992
+ * return the PAN (Primary Account Number) of a bank
993
+ *
994
+ * possible return values (and short description):
995
+ *
996
+ * LUT2_BLZ_NOT_INITIALIZED "Das Feld BLZ wurde nicht initialisiert"
997
+ * LUT2_PAN_NOT_INITIALIZED "Das Feld PAN wurde nicht initialisiert"
998
+ * LUT2_INDEX_OUT_OF_RANGE "Der Index f�r die Filiale ist ung�ltig"
999
+ * INVALID_BLZ_LENGTH "die Bankleitzahl ist nicht achtstellig"
1000
+ * INVALID_BLZ "die Bankleitzahl ist ung�ltig"
1001
+ * OK "ok"
1002
+ */
1003
+ static VALUE bank_pan(int argc,VALUE* argv,VALUE self)
1004
+ {
1005
+ char blz[16],error_msg[512];
1006
+ int retval,pan,filiale;
1007
+
1008
+ get_params(argc,argv,blz,NULL,&filiale,1);
1009
+ pan=lut_pan(blz,filiale,&retval);
1010
+ if(retval==LUT2_BLZ_NOT_INITIALIZED || retval==LUT2_PAN_NOT_INITIALIZED)RUNTIME_ERROR(retval);
1011
+ return rb_ary_new3(2,retval<=0?Qnil:INT2FIX(pan),INT2FIX(retval));
1012
+ }
1013
+
1014
+ /**
1015
+ * KontoCheck::bank_nr(<blz> [,filiale])
1016
+ *
1017
+ * return the sequence number of a bank (internal field of BLZ file)
1018
+ *
1019
+ * possible return values (and short description):
1020
+ *
1021
+ * LUT2_BLZ_NOT_INITIALIZED "Das Feld BLZ wurde nicht initialisiert"
1022
+ * LUT2_NR_NOT_INITIALIZED "Das Feld NR wurde nicht initialisiert"
1023
+ * LUT2_INDEX_OUT_OF_RANGE "Der Index f�r die Filiale ist ung�ltig"
1024
+ * INVALID_BLZ_LENGTH "die Bankleitzahl ist nicht achtstellig"
1025
+ * INVALID_BLZ "die Bankleitzahl ist ung�ltig"
1026
+ * OK "ok"
1027
+ */
1028
+ static VALUE bank_nr(int argc,VALUE* argv,VALUE self)
1029
+ {
1030
+ char blz[16],error_msg[512];
1031
+ int retval,nr,filiale;
1032
+
1033
+ get_params(argc,argv,blz,NULL,&filiale,1);
1034
+ nr=lut_nr(blz,filiale,&retval);
1035
+ if(retval==LUT2_BLZ_NOT_INITIALIZED || retval==LUT2_NR_NOT_INITIALIZED)RUNTIME_ERROR(retval);
1036
+ return rb_ary_new3(2,retval<=0?Qnil:INT2FIX(nr),INT2FIX(retval));
1037
+ }
1038
+
1039
+ /**
1040
+ * Die Suchroutinen der C-Bibliothek sind eher Low-Level Routinen und ohne
1041
+ * einen Blick in die Sourcen nicht intuitiv nutzbar ;-), daher hier zun�chst
1042
+ * eine kurze Einf�hrung.
1043
+ *
1044
+ * Beim ersten Aufruf einer dieser Routinen wird zun�chst getestet, ob das
1045
+ * Array mit den Zweigstellen bereits erstellt wurde. Dieses Array
1046
+ * korrespondiert mit der Tabelle der Bankleitzahlen; es enth�lt zu jedem Index
1047
+ * die jeweilige Zweigstellennummer, wobei Hauptstellen den Wert 0 erhalten.
1048
+ * Das erste Element in diesem Array entspricht der Bundesbank.
1049
+ *
1050
+ * Als zweites wird getestet, ob das Array mit den sortierten Werten schon
1051
+ * vorhanden ist; falls nicht, wird Speicher allokiert, der entsprechende Block
1052
+ * sortiert und die Indizes in das Array eingetragen (es w�re zu testen, ob die
1053
+ * Initialisierung schneller ist, wenn man das Array in der LUT-Datei
1054
+ * speichert).
1055
+ *
1056
+ * Um einen bestimmten Wert zu finden, wird eine bin�re Suche durchgef�hrt.
1057
+ * Wird das gesuchte Element gefunden, werden die folgenden Werte zur�ckgegeben:
1058
+ *
1059
+ * - anzahl: Anzahl der gefundenen Werte, die den Suchkriterien entsprechen
1060
+ *
1061
+ * - start_idx: Pointer auf den ersten Wert im Sortierarray. Die n�chsten
1062
+ * <anzahl> Elemente ab diesem Element entsprechen den
1063
+ * Sortierkriterien. Die Werte geben dabei den Index innerhalb
1064
+ * der BLZ-Datei an, beginnend mit 0 f�r die Bundesbank.
1065
+ *
1066
+ * - zweigstelle: Dieses Array enth�lt die Zweigstellennummern der
1067
+ * jeweiligen Banken. Es umfasst jedoch den Gesamtbestand der
1068
+ * BLZ-Datei, nicht den des Sortierarrays.
1069
+ *
1070
+ * - base_name: Dies ist ein Array das die Werte der Suchfunktion (in der
1071
+ * Reihenfolge der BLZ-Datei) enth�lt.
1072
+ *
1073
+ * - blz_base: Dies ist das Array mit den Bankleitzahlen.
1074
+ *
1075
+ * Beispiel: Der Aufruf
1076
+ *
1077
+ * retval=lut_suche_ort("aa",&anzahl,&start_idx,&zweigstelle,&base_name,&blz_base);
1078
+ *
1079
+ * liefert das folgende Ergebnis (mit der LUT-Datei vom 7.3.2011; bei anderen LUT-Dateien
1080
+ * k�nnen sich die Indizes nat�rlich verschieben):
1081
+ *
1082
+ * anzahl: 38
1083
+ * i: 0, start_idx[ 0]: 9259, blz_base[ 9259]: 58550130, zweigstelle[ 9259]: 42, base_name[ 9259]: Aach b Trier
1084
+ * i: 1, start_idx[ 1]: 12862, blz_base[12862]: 69251445, zweigstelle[12862]: 1, base_name[12862]: Aach, Hegau
1085
+ * i: 2, start_idx[ 2]: 12892, blz_base[12892]: 69290000, zweigstelle[12892]: 5, base_name[12892]: Aach, Hegau
1086
+ * i: 3, start_idx[ 3]: 3946, blz_base[ 3946]: 31010833, zweigstelle[ 3946]: 13, base_name[ 3946]: Aachen
1087
+ * i: 4, start_idx[ 4]: 4497, blz_base[ 4497]: 37060590, zweigstelle[ 4497]: 3, base_name[ 4497]: Aachen
1088
+ * i: 5, start_idx[ 5]: 4830, blz_base[ 4830]: 39000000, zweigstelle[ 4830]: 0, base_name[ 4830]: Aachen
1089
+ * i: 6, start_idx[ 6]: 4831, blz_base[ 4831]: 39010111, zweigstelle[ 4831]: 0, base_name[ 4831]: Aachen
1090
+ * i: 7, start_idx[ 7]: 4833, blz_base[ 4833]: 39020000, zweigstelle[ 4833]: 0, base_name[ 4833]: Aachen
1091
+ * i: 8, start_idx[ 8]: 4834, blz_base[ 4834]: 39040013, zweigstelle[ 4834]: 0, base_name[ 4834]: Aachen
1092
+ * i: 9, start_idx[ 9]: 4841, blz_base[ 4841]: 39050000, zweigstelle[ 4841]: 0, base_name[ 4841]: Aachen
1093
+ * i: 10, start_idx[10]: 4851, blz_base[ 4851]: 39060180, zweigstelle[ 4851]: 0, base_name[ 4851]: Aachen
1094
+ * i: 11, start_idx[11]: 4857, blz_base[ 4857]: 39060180, zweigstelle[ 4857]: 6, base_name[ 4857]: Aachen
1095
+ * i: 12, start_idx[12]: 4858, blz_base[ 4858]: 39060630, zweigstelle[ 4858]: 0, base_name[ 4858]: Aachen
1096
+ * i: 13, start_idx[13]: 4861, blz_base[ 4861]: 39070020, zweigstelle[ 4861]: 0, base_name[ 4861]: Aachen
1097
+ * i: 14, start_idx[14]: 4872, blz_base[ 4872]: 39070024, zweigstelle[ 4872]: 0, base_name[ 4872]: Aachen
1098
+ * i: 15, start_idx[15]: 4883, blz_base[ 4883]: 39080005, zweigstelle[ 4883]: 0, base_name[ 4883]: Aachen
1099
+ * i: 16, start_idx[16]: 4889, blz_base[ 4889]: 39080098, zweigstelle[ 4889]: 0, base_name[ 4889]: Aachen
1100
+ * i: 17, start_idx[17]: 4890, blz_base[ 4890]: 39080099, zweigstelle[ 4890]: 0, base_name[ 4890]: Aachen
1101
+ * i: 18, start_idx[18]: 4891, blz_base[ 4891]: 39160191, zweigstelle[ 4891]: 0, base_name[ 4891]: Aachen
1102
+ * i: 19, start_idx[19]: 4892, blz_base[ 4892]: 39161490, zweigstelle[ 4892]: 0, base_name[ 4892]: Aachen
1103
+ * i: 20, start_idx[20]: 4896, blz_base[ 4896]: 39162980, zweigstelle[ 4896]: 3, base_name[ 4896]: Aachen
1104
+ * i: 21, start_idx[21]: 4906, blz_base[ 4906]: 39500000, zweigstelle[ 4906]: 0, base_name[ 4906]: Aachen
1105
+ * i: 22, start_idx[22]: 6333, blz_base[ 6333]: 50120383, zweigstelle[ 6333]: 1, base_name[ 6333]: Aachen
1106
+ * i: 23, start_idx[23]: 10348, blz_base[10348]: 60420000, zweigstelle[10348]: 18, base_name[10348]: Aachen
1107
+ * i: 24, start_idx[24]: 16183, blz_base[16183]: 76026000, zweigstelle[16183]: 1, base_name[16183]: Aachen
1108
+ * i: 25, start_idx[25]: 10001, blz_base[10001]: 60069673, zweigstelle[10001]: 1, base_name[10001]: Aalen, W�rtt
1109
+ * i: 26, start_idx[26]: 10685, blz_base[10685]: 61370024, zweigstelle[10685]: 1, base_name[10685]: Aalen, W�rtt
1110
+ * i: 27, start_idx[27]: 10695, blz_base[10695]: 61370086, zweigstelle[10695]: 3, base_name[10695]: Aalen, W�rtt
1111
+ * i: 28, start_idx[28]: 10714, blz_base[10714]: 61420086, zweigstelle[10714]: 0, base_name[10714]: Aalen, W�rtt
1112
+ * i: 29, start_idx[29]: 10715, blz_base[10715]: 61430000, zweigstelle[10715]: 0, base_name[10715]: Aalen, W�rtt
1113
+ * i: 30, start_idx[30]: 10716, blz_base[10716]: 61440086, zweigstelle[10716]: 0, base_name[10716]: Aalen, W�rtt
1114
+ * i: 31, start_idx[31]: 10717, blz_base[10717]: 61450050, zweigstelle[10717]: 0, base_name[10717]: Aalen, W�rtt
1115
+ * i: 32, start_idx[32]: 10755, blz_base[10755]: 61450191, zweigstelle[10755]: 0, base_name[10755]: Aalen, W�rtt
1116
+ * i: 33, start_idx[33]: 10756, blz_base[10756]: 61480001, zweigstelle[10756]: 0, base_name[10756]: Aalen, W�rtt
1117
+ * i: 34, start_idx[34]: 10757, blz_base[10757]: 61490150, zweigstelle[10757]: 0, base_name[10757]: Aalen, W�rtt
1118
+ * i: 35, start_idx[35]: 10766, blz_base[10766]: 61490150, zweigstelle[10766]: 9, base_name[10766]: Aalen, W�rtt
1119
+ * i: 36, start_idx[36]: 7002, blz_base[ 7002]: 51050015, zweigstelle[ 7002]: 69, base_name[ 7002]: Aarbergen
1120
+ * i: 37, start_idx[37]: 7055, blz_base[ 7055]: 51091700, zweigstelle[ 7055]: 2, base_name[ 7055]: Aarbergen
1121
+ *
1122
+ */
1123
+
1124
+ /**
1125
+ * KontoCheck::bank_suche_bic(<search_bic>)
1126
+ *
1127
+ * find all banks with a given bic
1128
+ *
1129
+ * possible return values (and short description):
1130
+ *
1131
+ * LUT1_FILE_USED "Es wurde eine LUT-Datei im Format 1.0/1.1 geladen"
1132
+ * LUT2_NOT_INITIALIZED "die Programmbibliothek wurde noch nicht initialisiert"
1133
+ * LUT2_BIC_NOT_INITIALIZED "Das Feld BIC wurde nicht initialisiert"
1134
+ * ERROR_MALLOC "kann keinen Speicher allokieren"
1135
+ * KEY_NOT_FOUND "Die Suche lieferte kein Ergebnis"
1136
+ * OK "ok"
1137
+ */
1138
+ static VALUE bank_suche_bic(int argc,VALUE* argv,VALUE self)
1139
+ {
1140
+ char such_name[128],**base_name,error_msg[512];
1141
+ int i,j,retval,anzahl,*start_idx,*zweigstelle,*blz_base;
1142
+ VALUE ret_blz,ret_idx,ret_suche;
1143
+
1144
+ get_params(argc,argv,such_name,NULL,NULL,3);
1145
+ retval=lut_suche_bic(such_name,&anzahl,&start_idx,&zweigstelle,&base_name,&blz_base);
1146
+ if(retval==KEY_NOT_FOUND)return rb_ary_new3(5,Qnil,Qnil,Qnil,INT2FIX(retval),INT2FIX(0));
1147
+ if(retval<0)RUNTIME_ERROR(retval);
1148
+ ret_suche=rb_ary_new2(anzahl);
1149
+ ret_blz=rb_ary_new2(anzahl);
1150
+ ret_idx=rb_ary_new2(anzahl);
1151
+ for(i=0;i<anzahl;i++){
1152
+ j=start_idx[i]; /* Index innerhalb der BLZ-Datei */
1153
+ rb_ary_store(ret_suche,i,rb_str_new2(base_name[j]));
1154
+ rb_ary_store(ret_blz,i,INT2FIX(blz_base[j]));
1155
+ rb_ary_store(ret_idx,i,INT2FIX(zweigstelle[j]));
1156
+ }
1157
+ return rb_ary_new3(5,ret_suche,ret_blz,ret_idx,INT2FIX(retval),INT2FIX(anzahl));
1158
+ }
1159
+
1160
+ /**
1161
+ * KontoCheck::bank_suche_namen(<name>)
1162
+ *
1163
+ * find all banks with a given name
1164
+ *
1165
+ * possible return values (and short description):
1166
+ *
1167
+ * LUT1_FILE_USED "Es wurde eine LUT-Datei im Format 1.0/1.1 geladen"
1168
+ * LUT2_NOT_INITIALIZED "die Programmbibliothek wurde noch nicht initialisiert"
1169
+ * LUT2_NAME_NOT_INITIALIZED "Das Feld Bankname wurde nicht initialisiert"
1170
+ * ERROR_MALLOC "kann keinen Speicher allokieren"
1171
+ * KEY_NOT_FOUND "Die Suche lieferte kein Ergebnis"
1172
+ * OK "ok"
1173
+ */
1174
+ static VALUE bank_suche_namen(int argc,VALUE* argv,VALUE self)
1175
+ {
1176
+ char such_name[128],**base_name,error_msg[512];
1177
+ int i,j,retval,anzahl,*start_idx,*zweigstelle,*blz_base;
1178
+ VALUE ret_blz,ret_idx,ret_suche;
1179
+
1180
+ get_params(argc,argv,such_name,NULL,NULL,3);
1181
+ retval=lut_suche_namen(such_name,&anzahl,&start_idx,&zweigstelle,&base_name,&blz_base);
1182
+ if(retval==KEY_NOT_FOUND)return rb_ary_new3(5,Qnil,Qnil,Qnil,INT2FIX(retval),INT2FIX(0));
1183
+ if(retval<0)RUNTIME_ERROR(retval);
1184
+ ret_suche=rb_ary_new2(anzahl);
1185
+ ret_blz=rb_ary_new2(anzahl);
1186
+ ret_idx=rb_ary_new2(anzahl);
1187
+ for(i=0;i<anzahl;i++){
1188
+ j=start_idx[i]; /* Index innerhalb der BLZ-Datei */
1189
+ rb_ary_store(ret_suche,i,rb_str_new2(base_name[j]));
1190
+ rb_ary_store(ret_blz,i,INT2FIX(blz_base[j]));
1191
+ rb_ary_store(ret_idx,i,INT2FIX(zweigstelle[j]));
1192
+ }
1193
+ return rb_ary_new3(5,ret_suche,ret_blz,ret_idx,INT2FIX(retval),INT2FIX(anzahl));
1194
+ }
1195
+
1196
+ /**
1197
+ * KontoCheck::bank_suche_namen_kurz(<short_name>)
1198
+ *
1199
+ * find all banks with a given short name
1200
+ *
1201
+ * possible return values (and short description):
1202
+ *
1203
+ * LUT1_FILE_USED "Es wurde eine LUT-Datei im Format 1.0/1.1 geladen"
1204
+ * LUT2_NOT_INITIALIZED "die Programmbibliothek wurde noch nicht initialisiert"
1205
+ * LUT2_NAME_KURZ_NOT_INITIALIZED "Das Feld Kurzname wurde nicht initialisiert"
1206
+ * ERROR_MALLOC "kann keinen Speicher allokieren"
1207
+ * KEY_NOT_FOUND "Die Suche lieferte kein Ergebnis"
1208
+ * OK "ok"
1209
+ */
1210
+ static VALUE bank_suche_namen_kurz(int argc,VALUE* argv,VALUE self)
1211
+ {
1212
+ char such_name[128],**base_name,error_msg[512];
1213
+ int i,j,retval,anzahl,*start_idx,*zweigstelle,*blz_base;
1214
+ VALUE ret_blz,ret_idx,ret_suche;
1215
+
1216
+ get_params(argc,argv,such_name,NULL,NULL,3);
1217
+ retval=lut_suche_namen_kurz(such_name,&anzahl,&start_idx,&zweigstelle,&base_name,&blz_base);
1218
+ if(retval==KEY_NOT_FOUND)return rb_ary_new3(5,Qnil,Qnil,Qnil,INT2FIX(retval),INT2FIX(0));
1219
+ if(retval<0)RUNTIME_ERROR(retval);
1220
+ ret_suche=rb_ary_new2(anzahl);
1221
+ ret_blz=rb_ary_new2(anzahl);
1222
+ ret_idx=rb_ary_new2(anzahl);
1223
+ for(i=0;i<anzahl;i++){
1224
+ j=start_idx[i]; /* Index innerhalb der BLZ-Datei */
1225
+ rb_ary_store(ret_suche,i,rb_str_new2(base_name[j]));
1226
+ rb_ary_store(ret_blz,i,INT2FIX(blz_base[j]));
1227
+ rb_ary_store(ret_idx,i,INT2FIX(zweigstelle[j]));
1228
+ }
1229
+ return rb_ary_new3(5,ret_suche,ret_blz,ret_idx,INT2FIX(retval),INT2FIX(anzahl));
1230
+ }
1231
+
1232
+ /**
1233
+ * KontoCheck::bank_suche_plz(<plz1>[, plz2])
1234
+ *
1235
+ * find all banks with plz between plz1 and plz2
1236
+ *
1237
+ * possible return values (and short description):
1238
+ *
1239
+ * LUT1_FILE_USED "Es wurde eine LUT-Datei im Format 1.0/1.1 geladen"
1240
+ * LUT2_NOT_INITIALIZED "die Programmbibliothek wurde noch nicht initialisiert"
1241
+ * LUT2_BLZ_NOT_INITIALIZED "Das Feld BLZ wurde nicht initialisiert"
1242
+ * ERROR_MALLOC "kann keinen Speicher allokieren"
1243
+ * KEY_NOT_FOUND "Die Suche lieferte kein Ergebnis"
1244
+ * OK "ok"
1245
+ */
1246
+ static VALUE bank_suche_plz(int argc,VALUE* argv,VALUE self)
1247
+ {
1248
+ char error_msg[512];
1249
+ int i,j,retval,such1,such2,anzahl,*start_idx,*base_name,*zweigstelle,*blz_base;
1250
+ VALUE ret_blz,ret_idx,ret_suche;
1251
+
1252
+ get_params_int(argc,argv,&such1,&such2);
1253
+ retval=lut_suche_plz(such1,such2,&anzahl,&start_idx,&zweigstelle,&base_name,&blz_base);
1254
+ if(retval==KEY_NOT_FOUND)return rb_ary_new3(5,Qnil,Qnil,Qnil,INT2FIX(retval),INT2FIX(0));
1255
+ if(retval<0)RUNTIME_ERROR(retval);
1256
+ ret_suche=rb_ary_new2(anzahl);
1257
+ ret_blz=rb_ary_new2(anzahl);
1258
+ ret_idx=rb_ary_new2(anzahl);
1259
+ for(i=0;i<anzahl;i++){
1260
+ j=start_idx[i]; /* Index innerhalb der BLZ-Datei */
1261
+ rb_ary_store(ret_suche,i,INT2FIX(base_name[j]));
1262
+ rb_ary_store(ret_blz,i,INT2FIX(blz_base[j]));
1263
+ rb_ary_store(ret_idx,i,INT2FIX(zweigstelle[j]));
1264
+ }
1265
+ return rb_ary_new3(5,ret_suche,ret_blz,ret_idx,INT2FIX(retval),INT2FIX(anzahl));
1266
+ }
1267
+
1268
+ /**
1269
+ * KontoCheck::bank_suche_pz(<pz1>[, pz2])
1270
+ *
1271
+ * find all banks with check method between pz1 and pz2
1272
+ *
1273
+ * possible return values (and short description):
1274
+ *
1275
+ * LUT1_FILE_USED "Es wurde eine LUT-Datei im Format 1.0/1.1 geladen"
1276
+ * LUT2_NOT_INITIALIZED "die Programmbibliothek wurde noch nicht initialisiert"
1277
+ * LUT2_BLZ_NOT_INITIALIZED "Das Feld BLZ wurde nicht initialisiert"
1278
+ * ERROR_MALLOC "kann keinen Speicher allokieren"
1279
+ * KEY_NOT_FOUND "Die Suche lieferte kein Ergebnis"
1280
+ * OK "ok"
1281
+ */
1282
+ static VALUE bank_suche_pz(int argc,VALUE* argv,VALUE self)
1283
+ {
1284
+ char error_msg[512];
1285
+ int i,j,retval,such1,such2,anzahl,*start_idx,*base_name,*zweigstelle,*blz_base;
1286
+ VALUE ret_blz,ret_idx,ret_suche;
1287
+
1288
+ get_params_int(argc,argv,&such1,&such2);
1289
+ retval=lut_suche_pz(such1,such2,&anzahl,&start_idx,&zweigstelle,&base_name,&blz_base);
1290
+ if(retval==KEY_NOT_FOUND)return rb_ary_new3(5,Qnil,Qnil,Qnil,INT2FIX(retval),INT2FIX(0));
1291
+ if(retval<0)RUNTIME_ERROR(retval);
1292
+ ret_suche=rb_ary_new2(anzahl);
1293
+ ret_blz=rb_ary_new2(anzahl);
1294
+ ret_idx=rb_ary_new2(anzahl);
1295
+ for(i=0;i<anzahl;i++){
1296
+ j=start_idx[i]; /* Index innerhalb der BLZ-Datei */
1297
+ rb_ary_store(ret_suche,i,INT2FIX(base_name[j]));
1298
+ rb_ary_store(ret_blz,i,INT2FIX(blz_base[j]));
1299
+ rb_ary_store(ret_idx,i,INT2FIX(zweigstelle[j]));
1300
+ }
1301
+ return rb_ary_new3(5,ret_suche,ret_blz,ret_idx,INT2FIX(retval),INT2FIX(anzahl));
1302
+ }
1303
+
1304
+ /**
1305
+ * KontoCheck::bank_suche_blz(<blz1>[, blz2])
1306
+ *
1307
+ * find all banks with bic between blz1 and blz2
1308
+ *
1309
+ * possible return values (and short description):
1310
+ *
1311
+ * LUT1_FILE_USED "Es wurde eine LUT-Datei im Format 1.0/1.1 geladen"
1312
+ * LUT2_NOT_INITIALIZED "die Programmbibliothek wurde noch nicht initialisiert"
1313
+ * LUT2_BLZ_NOT_INITIALIZED "Das Feld BLZ wurde nicht initialisiert"
1314
+ * ERROR_MALLOC "kann keinen Speicher allokieren"
1315
+ * KEY_NOT_FOUND "Die Suche lieferte kein Ergebnis"
1316
+ * OK "ok"
1317
+ */
1318
+ static VALUE bank_suche_blz(int argc,VALUE* argv,VALUE self)
1319
+ {
1320
+ char error_msg[512];
1321
+ int i,j,retval,such1,such2,anzahl,*start_idx,*base_name,*zweigstelle,*blz_base;
1322
+ VALUE ret_blz,ret_idx,ret_suche;
1323
+
1324
+ get_params_int(argc,argv,&such1,&such2);
1325
+ retval=lut_suche_blz(such1,such2,&anzahl,&start_idx,&zweigstelle,&base_name,&blz_base);
1326
+ if(retval==KEY_NOT_FOUND)return rb_ary_new3(5,Qnil,Qnil,Qnil,INT2FIX(retval),INT2FIX(0));
1327
+ if(retval<0)RUNTIME_ERROR(retval);
1328
+ ret_suche=rb_ary_new2(anzahl);
1329
+ ret_blz=rb_ary_new2(anzahl);
1330
+ ret_idx=rb_ary_new2(anzahl);
1331
+ for(i=0;i<anzahl;i++){
1332
+ j=start_idx[i]; /* Index innerhalb der BLZ-Datei */
1333
+ rb_ary_store(ret_suche,i,INT2FIX(base_name[j]));
1334
+ rb_ary_store(ret_blz,i,INT2FIX(blz_base[j]));
1335
+ rb_ary_store(ret_idx,i,INT2FIX(zweigstelle[j]));
1336
+ }
1337
+ return rb_ary_new3(5,ret_suche,ret_blz,ret_idx,INT2FIX(retval),INT2FIX(anzahl));
1338
+ }
1339
+
1340
+ /**
1341
+ * KontoCheck::bank_suche_ort(<suchort>)
1342
+ *
1343
+ * find all banks in a given location
1344
+ *
1345
+ * possible return values (and short description):
1346
+ *
1347
+ * LUT1_FILE_USED "Es wurde eine LUT-Datei im Format 1.0/1.1 geladen"
1348
+ * LUT2_NOT_INITIALIZED "die Programmbibliothek wurde noch nicht initialisiert"
1349
+ * LUT2_ORT_NOT_INITIALIZED "Das Feld Ort wurde nicht initialisiert"
1350
+ * ERROR_MALLOC "kann keinen Speicher allokieren"
1351
+ * KEY_NOT_FOUND "Die Suche lieferte kein Ergebnis"
1352
+ * OK "ok"
1353
+ */
1354
+ static VALUE bank_suche_ort(int argc,VALUE* argv,VALUE self)
1355
+ {
1356
+ char such_name[128],**base_name,error_msg[512];
1357
+ int i,j,retval,anzahl,*start_idx,*zweigstelle,*blz_base;
1358
+ VALUE ret_blz,ret_idx,ret_suche;
1359
+
1360
+ get_params(argc,argv,such_name,NULL,NULL,3);
1361
+ retval=lut_suche_ort(such_name,&anzahl,&start_idx,&zweigstelle,&base_name,&blz_base);
1362
+ if(retval==KEY_NOT_FOUND)return rb_ary_new3(5,Qnil,Qnil,Qnil,INT2FIX(retval),INT2FIX(0));
1363
+ if(retval<0)RUNTIME_ERROR(retval);
1364
+ ret_suche=rb_ary_new2(anzahl);
1365
+ ret_blz=rb_ary_new2(anzahl);
1366
+ ret_idx=rb_ary_new2(anzahl);
1367
+ for(i=0;i<anzahl;i++){
1368
+ j=start_idx[i]; /* Index innerhalb der BLZ-Datei */
1369
+ rb_ary_store(ret_suche,i,rb_str_new2(base_name[j]));
1370
+ rb_ary_store(ret_blz,i,INT2FIX(blz_base[j]));
1371
+ rb_ary_store(ret_idx,i,INT2FIX(zweigstelle[j]));
1372
+ }
1373
+ return rb_ary_new3(5,ret_suche,ret_blz,ret_idx,INT2FIX(retval),INT2FIX(anzahl));
1374
+ }
1375
+
1376
+ /**
1377
+ * The initialization method for this module
1378
+ */
1379
+ void Init_konto_check_raw()
1380
+ {
1381
+ KontoCheck = rb_define_module("KontoCheckRaw");
1382
+
1383
+ /* die Parameteranzahl -1 bei den folgenden Funktionen meint eine variable
1384
+ * Anzahl Parameter; die genaue Anzahl wird bei der Funktion rb_scan_args()
1385
+ * als 3. Parameter angegeben.
1386
+ *
1387
+ * Bei -1 erfolgt die �bergabe als C-Array, bei -2 ist die �bergabe als
1388
+ * Ruby-Array (s. http://karottenreibe.github.com/2009/10/28/ruby-c-extension-5/):
1389
+ *
1390
+ * A positive number means, your function will take just that many
1391
+ * arguments, none less, none more.
1392
+ * -1 means the function takes a variable number of arguments, passed
1393
+ * as a C array.
1394
+ * -2 means the function takes a variable number of arguments, passed
1395
+ * as a Ruby array.
1396
+ *
1397
+ * Was in ext_ruby.pdf (S.39) dazu steht, ist einfach falsch (das hat
1398
+ * mich einige Zeit gekostet):
1399
+ *
1400
+ * In some of the function definitions that follow, the parameter argc
1401
+ * specifies how many arguments a Ruby method takes. It may have the
1402
+ * following values. If the value is not negative, it specifies the
1403
+ * number of arguments the method takes. If negative, it indicates
1404
+ * that the method takes optional arguments. In this case, the
1405
+ * absolute value of argc minus one is the number of required
1406
+ * arguments (so -1 means all arguments are optional, -2 means one
1407
+ * mandatory argument followed by optional arguments, and so on).
1408
+ *
1409
+ * Es w�re zu testen, ob dieses Verhalten bei �lteren Versionen gilt;
1410
+ * dann m��te man u.U. eine entsprechende Verzweigung einbauen. Bei den
1411
+ * aktuellen Varianten (Ruby 1.8.6 und 1.9.2) funktioniert diese Variante.
1412
+ */
1413
+ rb_define_module_function(KontoCheck,"init",init,-1);
1414
+ rb_define_module_function(KontoCheck,"free",free_rb,0);
1415
+ rb_define_module_function(KontoCheck,"konto_check",konto_check,-1);
1416
+ rb_define_module_function(KontoCheck,"bank_valid",bank_valid,-1);
1417
+ rb_define_module_function(KontoCheck,"bank_filialen",bank_filialen,-1);
1418
+ rb_define_module_function(KontoCheck,"bank_alles",bank_alles,-1);
1419
+ rb_define_module_function(KontoCheck,"bank_name",bank_name,-1);
1420
+ rb_define_module_function(KontoCheck,"bank_name_kurz",bank_name_kurz,-1);
1421
+ rb_define_module_function(KontoCheck,"bank_plz",bank_plz,-1);
1422
+ rb_define_module_function(KontoCheck,"bank_ort",bank_ort,-1);
1423
+ rb_define_module_function(KontoCheck,"bank_pan",bank_pan,-1);
1424
+ rb_define_module_function(KontoCheck,"bank_bic",bank_bic,-1);
1425
+ rb_define_module_function(KontoCheck,"bank_nr",bank_nr,-1);
1426
+ rb_define_module_function(KontoCheck,"bank_pz",bank_pz,-1);
1427
+ rb_define_module_function(KontoCheck,"bank_aenderung",bank_aenderung,-1);
1428
+ rb_define_module_function(KontoCheck,"bank_loeschung",bank_loeschung,-1);
1429
+ rb_define_module_function(KontoCheck,"bank_nachfolge_blz",bank_nachfolge_blz,-1);
1430
+ rb_define_module_function(KontoCheck,"dump_lutfile",dump_lutfile_rb,-1);
1431
+ rb_define_module_function(KontoCheck,"lut_info",lut_info_rb,-1);
1432
+ rb_define_module_function(KontoCheck,"retval2txt",retval2txt_rb,1);
1433
+ rb_define_module_function(KontoCheck,"retval2dos",retval2dos_rb,1);
1434
+ rb_define_module_function(KontoCheck,"retval2html",retval2html_rb,1);
1435
+ rb_define_module_function(KontoCheck,"retval2utf8",retval2utf8_rb,1);
1436
+ rb_define_module_function(KontoCheck,"generate_lutfile",generate_lutfile_rb,-1);
1437
+ rb_define_module_function(KontoCheck,"iban_check",iban_check_rb,-1);
1438
+ rb_define_module_function(KontoCheck,"iban2bic",iban2bic_rb,-1);
1439
+ rb_define_module_function(KontoCheck,"ipi_gen",ipi_gen_rb,-1);
1440
+ rb_define_module_function(KontoCheck,"ipi_check",ipi_check_rb,-1);
1441
+ rb_define_module_function(KontoCheck,"bank_suche_bic",bank_suche_bic,-1);
1442
+ rb_define_module_function(KontoCheck,"bank_suche_namen",bank_suche_namen,-1);
1443
+ rb_define_module_function(KontoCheck,"bank_suche_namen_kurz",bank_suche_namen_kurz,-1);
1444
+ rb_define_module_function(KontoCheck,"bank_suche_ort",bank_suche_ort,-1);
1445
+ rb_define_module_function(KontoCheck,"bank_suche_blz",bank_suche_blz,-1);
1446
+ rb_define_module_function(KontoCheck,"bank_suche_plz",bank_suche_plz,-1);
1447
+ rb_define_module_function(KontoCheck,"bank_suche_pz",bank_suche_pz,-1);
1448
+ rb_define_module_function(KontoCheck,"load_bank_data",load_bank_data,1);
1449
+
1450
+ /* R�ckgabewerte der konto_check Bibliothek */
1451
+ rb_define_const(KontoCheck,"KTO_CHECK_UNSUPPORTED_COMPRESSION",INT2FIX(KTO_CHECK_UNSUPPORTED_COMPRESSION));
1452
+ rb_define_const(KontoCheck,"KTO_CHECK_INVALID_COMPRESSION_LIB",INT2FIX(KTO_CHECK_INVALID_COMPRESSION_LIB));
1453
+ rb_define_const(KontoCheck,"OK_UNTERKONTO_ATTACHED",INT2FIX(OK_UNTERKONTO_ATTACHED));
1454
+ rb_define_const(KontoCheck,"KTO_CHECK_DEFAULT_BLOCK_INVALID",INT2FIX(KTO_CHECK_DEFAULT_BLOCK_INVALID));
1455
+ rb_define_const(KontoCheck,"KTO_CHECK_DEFAULT_BLOCK_FULL",INT2FIX(KTO_CHECK_DEFAULT_BLOCK_FULL));
1456
+ rb_define_const(KontoCheck,"KTO_CHECK_NO_DEFAULT_BLOCK",INT2FIX(KTO_CHECK_NO_DEFAULT_BLOCK));
1457
+ rb_define_const(KontoCheck,"KTO_CHECK_KEY_NOT_FOUND",INT2FIX(KTO_CHECK_KEY_NOT_FOUND));
1458
+ rb_define_const(KontoCheck,"LUT2_NO_LONGER_VALID_BETTER",INT2FIX(LUT2_NO_LONGER_VALID_BETTER));
1459
+ rb_define_const(KontoCheck,"DTA_SRC_KTO_DIFFERENT",INT2FIX(DTA_SRC_KTO_DIFFERENT));
1460
+ rb_define_const(KontoCheck,"DTA_SRC_BLZ_DIFFERENT",INT2FIX(DTA_SRC_BLZ_DIFFERENT));
1461
+ rb_define_const(KontoCheck,"DTA_CR_LF_IN_FILE",INT2FIX(DTA_CR_LF_IN_FILE));
1462
+ rb_define_const(KontoCheck,"DTA_INVALID_C_EXTENSION",INT2FIX(DTA_INVALID_C_EXTENSION));
1463
+ rb_define_const(KontoCheck,"DTA_FOUND_SET_A_NOT_C",INT2FIX(DTA_FOUND_SET_A_NOT_C));
1464
+ rb_define_const(KontoCheck,"DTA_FOUND_SET_E_NOT_C",INT2FIX(DTA_FOUND_SET_E_NOT_C));
1465
+ rb_define_const(KontoCheck,"DTA_FOUND_SET_C_NOT_EXTENSION",INT2FIX(DTA_FOUND_SET_C_NOT_EXTENSION));
1466
+ rb_define_const(KontoCheck,"DTA_FOUND_SET_E_NOT_EXTENSION",INT2FIX(DTA_FOUND_SET_E_NOT_EXTENSION));
1467
+ rb_define_const(KontoCheck,"DTA_INVALID_EXTENSION_COUNT",INT2FIX(DTA_INVALID_EXTENSION_COUNT));
1468
+ rb_define_const(KontoCheck,"DTA_INVALID_NUM",INT2FIX(DTA_INVALID_NUM));
1469
+ rb_define_const(KontoCheck,"DTA_INVALID_CHARS",INT2FIX(DTA_INVALID_CHARS));
1470
+ rb_define_const(KontoCheck,"DTA_CURRENCY_NOT_EURO",INT2FIX(DTA_CURRENCY_NOT_EURO));
1471
+ rb_define_const(KontoCheck,"DTA_EMPTY_AMOUNT",INT2FIX(DTA_EMPTY_AMOUNT));
1472
+ rb_define_const(KontoCheck,"DTA_INVALID_TEXT_KEY",INT2FIX(DTA_INVALID_TEXT_KEY));
1473
+ rb_define_const(KontoCheck,"DTA_EMPTY_STRING",INT2FIX(DTA_EMPTY_STRING));
1474
+ rb_define_const(KontoCheck,"DTA_MARKER_A_NOT_FOUND",INT2FIX(DTA_MARKER_A_NOT_FOUND));
1475
+ rb_define_const(KontoCheck,"DTA_MARKER_C_NOT_FOUND",INT2FIX(DTA_MARKER_C_NOT_FOUND));
1476
+ rb_define_const(KontoCheck,"DTA_MARKER_E_NOT_FOUND",INT2FIX(DTA_MARKER_E_NOT_FOUND));
1477
+ rb_define_const(KontoCheck,"DTA_INVALID_SET_C_LEN",INT2FIX(DTA_INVALID_SET_C_LEN));
1478
+ rb_define_const(KontoCheck,"DTA_INVALID_SET_LEN",INT2FIX(DTA_INVALID_SET_LEN));
1479
+ rb_define_const(KontoCheck,"DTA_WAERUNG_NOT_EURO",INT2FIX(DTA_WAERUNG_NOT_EURO));
1480
+ rb_define_const(KontoCheck,"DTA_INVALID_ISSUE_DATE",INT2FIX(DTA_INVALID_ISSUE_DATE));
1481
+ rb_define_const(KontoCheck,"DTA_INVALID_DATE",INT2FIX(DTA_INVALID_DATE));
1482
+ rb_define_const(KontoCheck,"DTA_FORMAT_ERROR",INT2FIX(DTA_FORMAT_ERROR));
1483
+ rb_define_const(KontoCheck,"DTA_FILE_WITH_ERRORS",INT2FIX(DTA_FILE_WITH_ERRORS));
1484
+ rb_define_const(KontoCheck,"INVALID_SEARCH_RANGE",INT2FIX(INVALID_SEARCH_RANGE));
1485
+ rb_define_const(KontoCheck,"KEY_NOT_FOUND",INT2FIX(KEY_NOT_FOUND));
1486
+ rb_define_const(KontoCheck,"BAV_FALSE",INT2FIX(BAV_FALSE));
1487
+ rb_define_const(KontoCheck,"LUT2_NO_USER_BLOCK",INT2FIX(LUT2_NO_USER_BLOCK));
1488
+ rb_define_const(KontoCheck,"INVALID_SET",INT2FIX(INVALID_SET));
1489
+ rb_define_const(KontoCheck,"NO_GERMAN_BIC",INT2FIX(NO_GERMAN_BIC));
1490
+ rb_define_const(KontoCheck,"IPI_CHECK_INVALID_LENGTH",INT2FIX(IPI_CHECK_INVALID_LENGTH));
1491
+ rb_define_const(KontoCheck,"IPI_INVALID_CHARACTER",INT2FIX(IPI_INVALID_CHARACTER));
1492
+ rb_define_const(KontoCheck,"IPI_INVALID_LENGTH",INT2FIX(IPI_INVALID_LENGTH));
1493
+ rb_define_const(KontoCheck,"LUT1_FILE_USED",INT2FIX(LUT1_FILE_USED));
1494
+ rb_define_const(KontoCheck,"MISSING_PARAMETER",INT2FIX(MISSING_PARAMETER));
1495
+ rb_define_const(KontoCheck,"IBAN2BIC_ONLY_GERMAN",INT2FIX(IBAN2BIC_ONLY_GERMAN));
1496
+ rb_define_const(KontoCheck,"IBAN_OK_KTO_NOT",INT2FIX(IBAN_OK_KTO_NOT));
1497
+ rb_define_const(KontoCheck,"KTO_OK_IBAN_NOT",INT2FIX(KTO_OK_IBAN_NOT));
1498
+ rb_define_const(KontoCheck,"TOO_MANY_SLOTS",INT2FIX(TOO_MANY_SLOTS));
1499
+ rb_define_const(KontoCheck,"INIT_FATAL_ERROR",INT2FIX(INIT_FATAL_ERROR));
1500
+ rb_define_const(KontoCheck,"INCREMENTAL_INIT_NEEDS_INFO",INT2FIX(INCREMENTAL_INIT_NEEDS_INFO));
1501
+ rb_define_const(KontoCheck,"INCREMENTAL_INIT_FROM_DIFFERENT_FILE",INT2FIX(INCREMENTAL_INIT_FROM_DIFFERENT_FILE));
1502
+ rb_define_const(KontoCheck,"DEBUG_ONLY_FUNCTION",INT2FIX(DEBUG_ONLY_FUNCTION));
1503
+ rb_define_const(KontoCheck,"LUT2_INVALID",INT2FIX(LUT2_INVALID));
1504
+ rb_define_const(KontoCheck,"LUT2_NOT_YET_VALID",INT2FIX(LUT2_NOT_YET_VALID));
1505
+ rb_define_const(KontoCheck,"LUT2_NO_LONGER_VALID",INT2FIX(LUT2_NO_LONGER_VALID));
1506
+ rb_define_const(KontoCheck,"LUT2_GUELTIGKEIT_SWAPPED",INT2FIX(LUT2_GUELTIGKEIT_SWAPPED));
1507
+ rb_define_const(KontoCheck,"LUT2_INVALID_GUELTIGKEIT",INT2FIX(LUT2_INVALID_GUELTIGKEIT));
1508
+ rb_define_const(KontoCheck,"LUT2_INDEX_OUT_OF_RANGE",INT2FIX(LUT2_INDEX_OUT_OF_RANGE));
1509
+ rb_define_const(KontoCheck,"LUT2_INIT_IN_PROGRESS",INT2FIX(LUT2_INIT_IN_PROGRESS));
1510
+ rb_define_const(KontoCheck,"LUT2_BLZ_NOT_INITIALIZED",INT2FIX(LUT2_BLZ_NOT_INITIALIZED));
1511
+ rb_define_const(KontoCheck,"LUT2_FILIALEN_NOT_INITIALIZED",INT2FIX(LUT2_FILIALEN_NOT_INITIALIZED));
1512
+ rb_define_const(KontoCheck,"LUT2_NAME_NOT_INITIALIZED",INT2FIX(LUT2_NAME_NOT_INITIALIZED));
1513
+ rb_define_const(KontoCheck,"LUT2_PLZ_NOT_INITIALIZED",INT2FIX(LUT2_PLZ_NOT_INITIALIZED));
1514
+ rb_define_const(KontoCheck,"LUT2_ORT_NOT_INITIALIZED",INT2FIX(LUT2_ORT_NOT_INITIALIZED));
1515
+ rb_define_const(KontoCheck,"LUT2_NAME_KURZ_NOT_INITIALIZED",INT2FIX(LUT2_NAME_KURZ_NOT_INITIALIZED));
1516
+ rb_define_const(KontoCheck,"LUT2_PAN_NOT_INITIALIZED",INT2FIX(LUT2_PAN_NOT_INITIALIZED));
1517
+ rb_define_const(KontoCheck,"LUT2_BIC_NOT_INITIALIZED",INT2FIX(LUT2_BIC_NOT_INITIALIZED));
1518
+ rb_define_const(KontoCheck,"LUT2_PZ_NOT_INITIALIZED",INT2FIX(LUT2_PZ_NOT_INITIALIZED));
1519
+ rb_define_const(KontoCheck,"LUT2_NR_NOT_INITIALIZED",INT2FIX(LUT2_NR_NOT_INITIALIZED));
1520
+ rb_define_const(KontoCheck,"LUT2_AENDERUNG_NOT_INITIALIZED",INT2FIX(LUT2_AENDERUNG_NOT_INITIALIZED));
1521
+ rb_define_const(KontoCheck,"LUT2_LOESCHUNG_NOT_INITIALIZED",INT2FIX(LUT2_LOESCHUNG_NOT_INITIALIZED));
1522
+ rb_define_const(KontoCheck,"LUT2_NACHFOLGE_BLZ_NOT_INITIALIZED",INT2FIX(LUT2_NACHFOLGE_BLZ_NOT_INITIALIZED));
1523
+ rb_define_const(KontoCheck,"LUT2_NOT_INITIALIZED",INT2FIX(LUT2_NOT_INITIALIZED));
1524
+ rb_define_const(KontoCheck,"LUT2_FILIALEN_MISSING",INT2FIX(LUT2_FILIALEN_MISSING));
1525
+ rb_define_const(KontoCheck,"LUT2_PARTIAL_OK",INT2FIX(LUT2_PARTIAL_OK));
1526
+ rb_define_const(KontoCheck,"LUT2_Z_BUF_ERROR",INT2FIX(LUT2_Z_BUF_ERROR));
1527
+ rb_define_const(KontoCheck,"LUT2_Z_MEM_ERROR",INT2FIX(LUT2_Z_MEM_ERROR));
1528
+ rb_define_const(KontoCheck,"LUT2_Z_DATA_ERROR",INT2FIX(LUT2_Z_DATA_ERROR));
1529
+ rb_define_const(KontoCheck,"LUT2_BLOCK_NOT_IN_FILE",INT2FIX(LUT2_BLOCK_NOT_IN_FILE));
1530
+ rb_define_const(KontoCheck,"LUT2_DECOMPRESS_ERROR",INT2FIX(LUT2_DECOMPRESS_ERROR));
1531
+ rb_define_const(KontoCheck,"LUT2_COMPRESS_ERROR",INT2FIX(LUT2_COMPRESS_ERROR));
1532
+ rb_define_const(KontoCheck,"LUT2_FILE_CORRUPTED",INT2FIX(LUT2_FILE_CORRUPTED));
1533
+ rb_define_const(KontoCheck,"LUT2_NO_SLOT_FREE",INT2FIX(LUT2_NO_SLOT_FREE));
1534
+ rb_define_const(KontoCheck,"UNDEFINED_SUBMETHOD",INT2FIX(UNDEFINED_SUBMETHOD));
1535
+ rb_define_const(KontoCheck,"EXCLUDED_AT_COMPILETIME",INT2FIX(EXCLUDED_AT_COMPILETIME));
1536
+ rb_define_const(KontoCheck,"INVALID_LUT_VERSION",INT2FIX(INVALID_LUT_VERSION));
1537
+ rb_define_const(KontoCheck,"INVALID_PARAMETER_STELLE1",INT2FIX(INVALID_PARAMETER_STELLE1));
1538
+ rb_define_const(KontoCheck,"INVALID_PARAMETER_COUNT",INT2FIX(INVALID_PARAMETER_COUNT));
1539
+ rb_define_const(KontoCheck,"INVALID_PARAMETER_PRUEFZIFFER",INT2FIX(INVALID_PARAMETER_PRUEFZIFFER));
1540
+ rb_define_const(KontoCheck,"INVALID_PARAMETER_WICHTUNG",INT2FIX(INVALID_PARAMETER_WICHTUNG));
1541
+ rb_define_const(KontoCheck,"INVALID_PARAMETER_METHODE",INT2FIX(INVALID_PARAMETER_METHODE));
1542
+ rb_define_const(KontoCheck,"LIBRARY_INIT_ERROR",INT2FIX(LIBRARY_INIT_ERROR));
1543
+ rb_define_const(KontoCheck,"LUT_CRC_ERROR",INT2FIX(LUT_CRC_ERROR));
1544
+ rb_define_const(KontoCheck,"FALSE_GELOESCHT",INT2FIX(FALSE_GELOESCHT));
1545
+ rb_define_const(KontoCheck,"OK_NO_CHK_GELOESCHT",INT2FIX(OK_NO_CHK_GELOESCHT));
1546
+ rb_define_const(KontoCheck,"OK_GELOESCHT",INT2FIX(OK_GELOESCHT));
1547
+ rb_define_const(KontoCheck,"BLZ_GELOESCHT",INT2FIX(BLZ_GELOESCHT));
1548
+ rb_define_const(KontoCheck,"INVALID_BLZ_FILE",INT2FIX(INVALID_BLZ_FILE));
1549
+ rb_define_const(KontoCheck,"LIBRARY_IS_NOT_THREAD_SAFE",INT2FIX(LIBRARY_IS_NOT_THREAD_SAFE));
1550
+ rb_define_const(KontoCheck,"FATAL_ERROR",INT2FIX(FATAL_ERROR));
1551
+ rb_define_const(KontoCheck,"INVALID_KTO_LENGTH",INT2FIX(INVALID_KTO_LENGTH));
1552
+ rb_define_const(KontoCheck,"FILE_WRITE_ERROR",INT2FIX(FILE_WRITE_ERROR));
1553
+ rb_define_const(KontoCheck,"FILE_READ_ERROR",INT2FIX(FILE_READ_ERROR));
1554
+ rb_define_const(KontoCheck,"ERROR_MALLOC",INT2FIX(ERROR_MALLOC));
1555
+ rb_define_const(KontoCheck,"NO_BLZ_FILE",INT2FIX(NO_BLZ_FILE));
1556
+ rb_define_const(KontoCheck,"INVALID_LUT_FILE",INT2FIX(INVALID_LUT_FILE));
1557
+ rb_define_const(KontoCheck,"NO_LUT_FILE",INT2FIX(NO_LUT_FILE));
1558
+ rb_define_const(KontoCheck,"INVALID_BLZ_LENGTH",INT2FIX(INVALID_BLZ_LENGTH));
1559
+ rb_define_const(KontoCheck,"INVALID_BLZ",INT2FIX(INVALID_BLZ));
1560
+ rb_define_const(KontoCheck,"INVALID_KTO",INT2FIX(INVALID_KTO));
1561
+ rb_define_const(KontoCheck,"NOT_IMPLEMENTED",INT2FIX(NOT_IMPLEMENTED));
1562
+ rb_define_const(KontoCheck,"NOT_DEFINED",INT2FIX(NOT_DEFINED));
1563
+ rb_define_const(KontoCheck,"FALSE",INT2FIX(FALSE));
1564
+ rb_define_const(KontoCheck,"OK",INT2FIX(OK));
1565
+ rb_define_const(KontoCheck,"OK_NO_CHK",INT2FIX(OK_NO_CHK));
1566
+ rb_define_const(KontoCheck,"OK_TEST_BLZ_USED",INT2FIX(OK_TEST_BLZ_USED));
1567
+ rb_define_const(KontoCheck,"LUT2_VALID",INT2FIX(LUT2_VALID));
1568
+ rb_define_const(KontoCheck,"LUT2_NO_VALID_DATE",INT2FIX(LUT2_NO_VALID_DATE));
1569
+ rb_define_const(KontoCheck,"LUT1_SET_LOADED",INT2FIX(LUT1_SET_LOADED));
1570
+ rb_define_const(KontoCheck,"LUT1_FILE_GENERATED",INT2FIX(LUT1_FILE_GENERATED));
1571
+ rb_define_const(KontoCheck,"DTA_FILE_WITH_WARNINGS",INT2FIX(DTA_FILE_WITH_WARNINGS));
1572
+ rb_define_const(KontoCheck,"LUT_V2_FILE_GENERATED",INT2FIX(LUT_V2_FILE_GENERATED));
1573
+ rb_define_const(KontoCheck,"KTO_CHECK_VALUE_REPLACED",INT2FIX(KTO_CHECK_VALUE_REPLACED));
1574
+ rb_define_const(KontoCheck,"OK_UNTERKONTO_POSSIBLE",INT2FIX(OK_UNTERKONTO_POSSIBLE));
1575
+ rb_define_const(KontoCheck,"OK_UNTERKONTO_GIVEN",INT2FIX(OK_UNTERKONTO_GIVEN));
1576
+ rb_define_const(KontoCheck,"OK_SLOT_CNT_MIN_USED",INT2FIX(OK_SLOT_CNT_MIN_USED));
1577
+ }