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.
- data/.document +5 -0
- data/CHANGES +16 -0
- data/LICENSE +21 -0
- data/README.textile +61 -0
- data/Rakefile +72 -0
- data/VERSION.yml +5 -0
- data/ext/konto_check_raw/extconf.rb +32 -0
- data/ext/konto_check_raw/konto_check.c +18306 -0
- data/ext/konto_check_raw/konto_check.h +831 -0
- data/ext/konto_check_raw/konto_check_raw_ruby.c +1577 -0
- data/init.rb +1 -0
- data/lib/konto_check.rb +152 -0
- data/test/helper.rb +10 -0
- data/test/test_konto_check.rb +7 -0
- metadata +95 -0
@@ -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
|
+
}
|