konto_check 6.02.0 → 6.13.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,5 +1,6 @@
1
1
  /* vim: ft=c:set si:set fileencoding=iso-8859-1
2
2
  */
3
+ #line 9 "konto_check_h.lx"
3
4
 
4
5
  /*
5
6
  * ##########################################################################
@@ -9,7 +10,7 @@
9
10
  * # Verwendung in anderen Programmen bzw. Programmiersprachen benutzt #
10
11
  * # werden. #
11
12
  * # #
12
- * # Copyright (C) 2002-2017 Michael Plugge <m.plugge@hs-mannheim.de> #
13
+ * # Copyright (C) 2002-2020 Michael Plugge <m.plugge@hs-mannheim.de> #
13
14
  * # #
14
15
  * # Dieses Programm ist freie Software; Sie d�rfen es unter den #
15
16
  * # Bedingungen der GNU Lesser General Public License, wie von der Free #
@@ -167,17 +168,19 @@
167
168
 
168
169
  #if _WIN32>0 || _WIN64>0
169
170
  # if USE_CDECL
170
- # if BUILD_DLL /* DLL kompilieren */
171
- # define DLL_EXPORT __declspec (dllexport)
172
- # define DLL_EXPORT_V __declspec (dllexport)
173
- # elif USE_DLL /* DLL in einem anderen Programm benutzen */
174
- # define DLL_EXPORT __declspec (dllimport)
175
- # define DLL_EXPORT_V __declspec (dllimport)
176
- # else /* kein DLL-Krempel erforderlich */
177
- # define DLL_EXPORT
178
- # define DLL_EXPORT_V
179
- # endif
171
+ # define STDCALL
172
+ # if BUILD_DLL /* DLL kompilieren */
173
+ # define DLL_EXPORT __declspec (dllexport)
174
+ # define DLL_EXPORT_V __declspec (dllexport)
175
+ # elif USE_DLL /* DLL in einem anderen Programm benutzen */
176
+ # define DLL_EXPORT __declspec (dllimport)
177
+ # define DLL_EXPORT_V __declspec (dllimport)
178
+ # else /* kein DLL-Krempel erforderlich */
179
+ # define DLL_EXPORT
180
+ # define DLL_EXPORT_V
181
+ # endif
180
182
  # else
183
+ # define STDCALL __stdcall
181
184
  # if BUILD_DLL /* DLL kompilieren */
182
185
  # define DLL_EXPORT __declspec (dllexport) __stdcall
183
186
  # define DLL_EXPORT_V __declspec (dllexport)
@@ -185,12 +188,13 @@
185
188
  # define DLL_EXPORT __declspec (dllimport) __stdcall
186
189
  # define DLL_EXPORT_V __declspec (dllimport)
187
190
  # else /* kein DLL-Krempel erforderlich */
188
- # define DLL_EXPORT
191
+ # define DLL_EXPORT __stdcall
189
192
  # define DLL_EXPORT_V
190
193
  # endif
191
194
  # endif
192
195
  # define localtime_r(timep,result) localtime(timep)
193
196
  #else
197
+ # define STDCALL
194
198
  # define DLL_EXPORT
195
199
  # define DLL_EXPORT_V
196
200
  #endif
@@ -286,6 +290,10 @@
286
290
  #define LUT2_IBAN_REGEL 25
287
291
  #define LUT2_IBAN_REGEL_SORT 26
288
292
  #define LUT2_BIC_H_SORT 27
293
+ #define LUT2_SCL_INFO 28
294
+ #define LUT2_SCL_BIC 29
295
+ #define LUT2_SCL_NAME 30
296
+ #define LUT2_SCL_FLAGS 31
289
297
 
290
298
  #define LUT2_2_BLZ 101
291
299
  #define LUT2_2_FILIALEN 102
@@ -314,6 +322,10 @@
314
322
  #define LUT2_2_IBAN_REGEL 125
315
323
  #define LUT2_2_IBAN_REGEL_SORT 126
316
324
  #define LUT2_2_BIC_H_SORT 127
325
+ #define LUT2_2_SCL_INFO 128
326
+ #define LUT2_2_SCL_BIC 129
327
+ #define LUT2_2_SCL_NAME 130
328
+ #define LUT2_2_SCL_FLAGS 131
317
329
 
318
330
  #define LUT2_DEFAULT 501
319
331
 
@@ -330,6 +342,12 @@ extern const char *lut2_feld_namen[256];
330
342
  */
331
343
 
332
344
  #undef FALSE
345
+ #define NO_SCL_BLOCKS_LOADED -158
346
+ #define NO_SCL_INFO_BLOCK -157
347
+ #define SCL_BIC_NOT_FOUND -156
348
+ #define INVALID_SCL_INFO_BLOCK -155
349
+ #define NO_SCL_BLOCKS -154
350
+ #define SCL_INPUT_FORMAT_ERROR -153
333
351
  #define INVALID_REGULAR_EXPRESSION_CNT -152
334
352
  #define INVALID_REGULAR_EXPRESSION -151
335
353
  #define INVALID_HANDLE -150
@@ -483,6 +501,9 @@ extern const char *lut2_feld_namen[256];
483
501
  #define OK_KTO_REPLACED_NO_PZ 24
484
502
  #define OK_UNTERKONTO_ATTACHED 25
485
503
  #define OK_SHORT_BIC_USED 26
504
+ #define OK_SCL_EXTENSION_BIC_USED 27
505
+ #define OK_SCL_WILDCARD_BIC_USED 28
506
+ #line 282 "konto_check_h.lx"
486
507
 
487
508
  #define MAX_BLZ_CNT 30000 /* maximale Anzahl BLZ's in generate_lut() */
488
509
 
@@ -856,6 +877,7 @@ DLL_EXPORT int lut_info_id(char *lut_name,int *info1,int *info2,int *valid1,int
856
877
  DLL_EXPORT const char *current_lutfile_name(int *set,int *level,int *retval);
857
878
  DLL_EXPORT int current_lutfile_name_id(int *set,int *level,int *retval);
858
879
  DLL_EXPORT int lut_valid(void);
880
+ DLL_EXPORT int lut_valid_date(char *lut_name,int *v11,int *v12,int *v21,int *v22);
859
881
  DLL_EXPORT int get_lut_info2(char *lut_name,int *version_p,char **prolog_p,char **info_p,char **user_info_p);
860
882
  DLL_EXPORT int get_lut_info_b(char **info,char *lutname);
861
883
  DLL_EXPORT int get_lut_info2_b(char *lutname,int *version,char **prolog_p,char **info_p,char **user_info_p);
@@ -1090,6 +1112,24 @@ DLL_EXPORT int iban_name_id(char *iban,int filiale,int*retval);
1090
1112
  DLL_EXPORT int iban_name_kurz_id(char *iban,int filiale,int*retval);
1091
1113
  DLL_EXPORT int iban_ort_id(char *iban,int filiale,int*retval);
1092
1114
 
1115
+ /* Funktionen f�r das SCL-Verzeichnis */
1116
+ DLL_EXPORT int lut_scl_init(char *lut_name);
1117
+ DLL_EXPORT int lut_scl_info(char *lutfile,int *cnt,const char **gueltigkeit,const char **gueltigkeit_iso);
1118
+ DLL_EXPORT int lut_write_scl_blocks(char *inputfile,char *lutfile);
1119
+ DLL_EXPORT int lut_scl_multi(char *bic,const char **scl_flags,const char **used_bic,const char **scl_name);
1120
+ DLL_EXPORT int lut_scl_multi_blz(char *blz,const char **scl_flags,const char **used_bic,const char **scl_name);
1121
+ DLL_EXPORT int lut_scl_multi_blz_i(int blz,const char **scl_flags,const char **used_bic,const char **scl_name);
1122
+ DLL_EXPORT int lut_scl_sct(char *bic,int *retval);
1123
+ DLL_EXPORT int lut_scl_sdd(char *bic,int *retval);
1124
+ DLL_EXPORT int lut_scl_cor1(char *bic,int *retval);
1125
+ DLL_EXPORT int lut_scl_b2b(char *bic,int *retval);
1126
+ DLL_EXPORT int lut_scl_scc(char *bic,int *retval);
1127
+ DLL_EXPORT int lut_scl_sct_blz(char *blz,int *retval,const char **used_bic);
1128
+ DLL_EXPORT int lut_scl_sdd_blz(char *blz,int *retval,const char **used_bic);
1129
+ DLL_EXPORT int lut_scl_cor1_blz(char *blz,int *retval,const char **used_bic);
1130
+ DLL_EXPORT int lut_scl_b2b_blz(char *blz,int *retval,const char **used_bic);
1131
+ DLL_EXPORT int lut_scl_scc_blz(char *blz,int *retval,const char **used_bic);
1132
+
1093
1133
  /*
1094
1134
  * ######################################################################
1095
1135
  * # globale Variablen #
@@ -48,6 +48,7 @@ vim: ft=c:set si:set fileencoding=utf-8
48
48
  #include "ruby.h"
49
49
  #include <stdio.h>
50
50
  #include "konto_check.h"
51
+ #line 64 "konto_check_raw_ruby.lxx"
51
52
 
52
53
  /* Ruby 1.8/1.9 compatibility definitions */
53
54
  #ifndef RSTRING_PTR
@@ -285,6 +286,38 @@ static void get_params_int(int argc,VALUE* argv,int *arg1,int *arg2,int *uniq_p)
285
286
  if(uniq_p)*uniq_p=uniq;
286
287
  }
287
288
 
289
+
290
+ /**
291
+ * get_params_scl()
292
+ *
293
+ * get one string parameter from argc/argv
294
+ */
295
+ static void get_params_scl(int argc,VALUE* argv,char *arg1s,int maxlen)
296
+ {
297
+ int len;
298
+ VALUE arg1_rb;
299
+
300
+ rb_scan_args(argc,argv,"10",&arg1_rb);
301
+ if(maxlen==8)switch(TYPE(arg1_rb)){
302
+ case RUBY_T_STRING:
303
+ break;
304
+ case RUBY_T_FLOAT:
305
+ case RUBY_T_FIXNUM:
306
+ case RUBY_T_BIGNUM:
307
+ snprintf(arg1s,9,"%08d",FIX2INT(arg1_rb));
308
+ return;
309
+ default:
310
+ rb_raise(rb_eTypeError,"%s","argument must be a string");
311
+ }
312
+ if(TYPE(arg1_rb)==RUBY_T_STRING){
313
+ if((len=RSTRING_LEN(arg1_rb))>maxlen)len=maxlen;
314
+ strncpy(arg1s,RSTRING_PTR(arg1_rb),len);
315
+ *(arg1s+len)=0;
316
+ }
317
+ else
318
+ rb_raise(rb_eTypeError,"%s","argument must be a string");
319
+ }
320
+
288
321
  /**
289
322
  * get_params()
290
323
  *
@@ -811,7 +844,7 @@ static VALUE lut_blocks_rb(int argc,VALUE* argv,VALUE self)
811
844
  */
812
845
  static VALUE lut_blocks1_rb(int argc,VALUE* argv,VALUE self)
813
846
  {
814
- rb_scan_args(argc,argv,"0",NULL);
847
+ // rb_scan_args(argc,argv,"0",NULL);
815
848
  return INT2FIX(lut_blocks(0,NULL,NULL,NULL));
816
849
  }
817
850
 
@@ -4289,7 +4322,7 @@ static VALUE bank_suche_volltext(int argc,VALUE* argv,VALUE self)
4289
4322
  * ====Mögliche Statuscodes:
4290
4323
  * * -70 (LUT1_FILE_USED) "Es wurde eine LUT-Datei im Format 1.0/1.1 geladen"
4291
4324
  * * -48 (LUT2_NAME_KURZ_NOT_INITIALIZED) "Das Feld Kurzname wurde nicht initialisiert"
4292
- * * -40 (LUT2_NOT_INITIALIZED) "die Programmbibliothek wurde noch nicht initialisiert"
4325
+ * * -40 (LUT2_NOT_INITIALIZED) "die Programmbibliothek wurde noch nicht initialisiert"
4293
4326
  * * -9 (ERROR_MALLOC) "kann keinen Speicher allokieren"
4294
4327
  * * 1 (OK) "ok"
4295
4328
  * * 14 (SOME_KEYS_NOT_FOUND) "ok; ein(ige) Schlüssel wurden nicht gefunden"
@@ -4317,6 +4350,485 @@ static VALUE bank_suche_multiple(int argc,VALUE* argv,VALUE self)
4317
4350
  }
4318
4351
 
4319
4352
 
4353
+ /**
4354
+ * ===KontoCheckRaw::scl_init([lutname})
4355
+ * =====KontoCheck::scl_init([lutname])
4356
+ * Mit den scl_* Funktionen können für einen gegebenen BIC oder eine BLZ die
4357
+ * Einträge des SCL-Verzeichnisses bestimmt werden. Falls die _blz() Version der
4358
+ * Funktionen verwendet wird, muß die Bibliothek mittels KontoCheck::init *und*
4359
+ * KontoCheck::scl_init initialisiert werden, um sowohl die Kontodaten als auch die
4360
+ * Daten des SCL-Verzeichnisses einzulesen.
4361
+ *
4362
+ * Die Funktion scl_init liest die SCL-Blocks aus einer LUT-Datei und initialisiert
4363
+ * die zugehörigen internen Datenstrukturen.initialisiert SCL-Datenstrukturen.
4364
+ * Falls der Parameter lut_name nicht angegeben ist, wird die LUT-Datei benutzt,
4365
+ * mit der die Bibliothek mittels KontoCheck::init initialisiert wurde.
4366
+ *
4367
+ * ====Aufruf:
4368
+ * * ret=KontoCheckRaw::scl_init([lutname])
4369
+ *
4370
+ * ====Rückgabe:
4371
+ * Es wird ein skalarer Statuscode zurückgegeben, der Auskunft über die Initialisierung bzw.
4372
+ * aufgetretene Fehler gibt.
4373
+ *
4374
+ * ====Mögliche Statuscodes:
4375
+ * * -155 (INVALID_SCL_INFO_BLOCK) "(Ungültiger SCL-Info-Block in der LUT-Datei"
4376
+ * * -154 (NO_SCL_BLOCKS) "Ungültige Eingabewerte in der SCL-Datei"
4377
+ * * -40 (LUT2_NOT_INITIALIZED) "die Programmbibliothek wurde noch nicht initialisiert"
4378
+ * * -10 (FILE_READ_ERROR) "kann Datei nicht lesen"
4379
+ * * 1 (OK) "ok"
4380
+ */
4381
+ static VALUE scl_init_rb(int argc,VALUE* argv,VALUE self)
4382
+ {
4383
+ char lut_name[FILENAME_MAX+1];
4384
+ const char *l_name;
4385
+ int retval;
4386
+
4387
+ get_params_file(argc,argv,lut_name,NULL,NULL,3);
4388
+ if(!*lut_name){
4389
+ l_name=current_lutfile_name(NULL,NULL,&retval);
4390
+ if(l_name && retval>0){
4391
+ strcpy(lut_name,l_name);
4392
+ }
4393
+ else
4394
+ return INT2FIX(retval);
4395
+ }
4396
+ retval=lut_scl_init(lut_name);
4397
+ return INT2FIX(retval);
4398
+ }
4399
+
4400
+ /**
4401
+ * ===KontoCheckRaw::scl_multi(bic)
4402
+ * =====KontoCheck::scl_multi(bic)
4403
+ * Diese Funktion bestimmt alle Werte des BIC-Verzeichnisses zu einem gegebenen BIC.
4404
+ * Im Fehlerfall wird nil zurückgegeben und die Variable retval auf den
4405
+ * entsprechende Fehlercode (<0) gesetzt.
4406
+ *
4407
+ * ====Aufruf:
4408
+ * * ret=KontoCheckRaw::scl_multi(bic)
4409
+ *
4410
+ * ====Rückgabe:
4411
+ * Die Rückgabe ist ein Array mit vier Elementen:
4412
+ *
4413
+ * * Das erste Element ist der Statuscode (s.u.)
4414
+ * * Das zweite Element sind die SCL Flags (als String)
4415
+ * * das dritte Element ist der benutzte BIC
4416
+ * * das vierte Element ist der Institutsname aus dem BIC-Verzeichnis
4417
+ *
4418
+ * ====Mögliche Statuscodes:
4419
+ * * -158 (NO_SCL_BLOCKS_LOADED) "die SCL-Blocks wurden noch nicht eingelesen"
4420
+ * * -156 (SCL_BIC_NOT_FOUND) "Der BIC wurde im SCL-Verzeichnis nicht gefunden"
4421
+ * * -139 (LUT2_NOT_ALL_IBAN_BLOCKS_LOADED) "es konnten nicht alle Datenblocks die für die IBAN-Berechnung notwendig sind geladen werden"
4422
+ * * 1 (OK) "ok"
4423
+ * * 27 (OK_SCL_EXTENSION_BIC_USED) "ok, für den BIC wurde die Extension XXX angehängt"
4424
+ * * 28 (OK_SCL_WILDCARD_BIC_USED) "ok, für den BIC wurde die Wildcard-Version (8stellig) benutzt"
4425
+ */
4426
+ static VALUE scl_multi(int argc,VALUE* argv,VALUE self)
4427
+ {
4428
+ char bic[12];
4429
+ const char *scl_flags,*used_bic,*scl_name;
4430
+ int retval;
4431
+
4432
+ get_params_scl(argc,argv,bic,11);
4433
+ retval=lut_scl_multi(bic,&scl_flags,&used_bic,&scl_name);
4434
+ if(retval>0)
4435
+ return rb_ary_new3(4,INT2FIX(retval),rb_str_new2(scl_flags),rb_str_new2(used_bic),rb_str_new2(scl_name));
4436
+ else
4437
+ return rb_ary_new3(4,INT2FIX(retval),Qnil,Qnil,Qnil);
4438
+ }
4439
+
4440
+ /**
4441
+ * ===KontoCheckRaw::scl_sct(bic)
4442
+ * =====KontoCheck::scl_sct(bic)
4443
+ * =====KontoCheckRaw::scl_sct_blz(blz)
4444
+ * Diese Funktion bestimmt das Flag SCT (SEPA Credit Transfer) des SCL-
4445
+ * Verzeichnisses und gibt das Flag (0 bzw. 1) zurück.
4446
+ * Im Fehlerfall wird nil zurückgegeben und die Variable retval auf den
4447
+ * entsprechende Fehlercode (<0) gesetzt.
4448
+ *
4449
+ * ====Aufruf:
4450
+ * * ret=KontoCheckRaw::scl_sct(bic)
4451
+ *
4452
+ * ====Rückgabe:
4453
+ * Die Rückgabe ist ein Array mit zwei Elementen:
4454
+ *
4455
+ * * Das erste Element ist das Flag SCT aus dem SEPA-Directory
4456
+ * * Das zweite Element ist der Statuscode (s.u.)
4457
+ *
4458
+ * ====Mögliche Statuscodes:
4459
+ * * -158 (NO_SCL_BLOCKS_LOADED) "die SCL-Blocks wurden noch nicht eingelesen"
4460
+ * * -156 (SCL_BIC_NOT_FOUND) "Der BIC wurde im SCL-Verzeichnis nicht gefunden"
4461
+ * * 1 (OK) "ok"
4462
+ * * 27 (OK_SCL_EXTENSION_BIC_USED) "ok, für den BIC wurde die Extension XXX angehängt"
4463
+ * * 28 (OK_SCL_WILDCARD_BIC_USED) "ok, für den BIC wurde die Wildcard-Version (8stellig) benutzt"
4464
+ *
4465
+ */
4466
+ static VALUE scl_sct(int argc,VALUE* argv,VALUE self)
4467
+ {
4468
+ char bic[12];
4469
+ int rv,retval;
4470
+
4471
+ get_params_scl(argc,argv,bic,11);
4472
+ rv=lut_scl_sct(bic,&retval);
4473
+ return rb_ary_new3(2,retval>0?INT2FIX(rv):Qnil,INT2FIX(retval));
4474
+ }
4475
+
4476
+ /**
4477
+ * ===KontoCheckRaw::scl_sct_blz(blz)
4478
+ * =====KontoCheck::scl_sct_blz(blz)
4479
+ * =====KontoCheckRaw::scl_sct(bic)
4480
+ * Diese Funktion bestimmt das Flag SCT (SEPA Credit Transfer) des SCL-
4481
+ * Verzeichnisses und gibt das Flag (0 bzw. 1) zurück.
4482
+ * Im Fehlerfall wird nil zurückgegeben und die Variable retval auf den
4483
+ * entsprechende Fehlercode (<0) gesetzt.
4484
+ *
4485
+ * ====Aufruf:
4486
+ * * ret=KontoCheckRaw::scl_sct_blz(blz)
4487
+ *
4488
+ * ====Rückgabe:
4489
+ * Die Rückgabe ist ein Array mit drei Elementen:
4490
+ *
4491
+ * * Das erste Element ist das Flag SCT aus dem SEPA-Directory
4492
+ * * Das zweite Element ist der Statuscode (s.u.)
4493
+ * * Das dritte Element ist der benutzte BIC
4494
+ *
4495
+ * ====Mögliche Statuscodes:
4496
+ * * -158 (NO_SCL_BLOCKS_LOADED) "die SCL-Blocks wurden noch nicht eingelesen"
4497
+ * * -156 (SCL_BIC_NOT_FOUND) "Der BIC wurde im SCL-Verzeichnis nicht gefunden"
4498
+ * * -139 (LUT2_NOT_ALL_IBAN_BLOCKS_LOADED) "es konnten nicht alle Datenblocks die für die IBAN-Berechnung notwendig sind geladen werden"
4499
+ * * -5 (INVALID_BLZ_LENGTH) "die Bankleitzahl ist nicht achtstellig"
4500
+ * * -4 (INVALID_BLZ) "die Bankleitzahl ist ungültig"
4501
+ * * 1 (OK) "ok"
4502
+ * * 27 (OK_SCL_EXTENSION_BIC_USED) "ok, für den BIC wurde die Extension XXX angehängt"
4503
+ * * 28 (OK_SCL_WILDCARD_BIC_USED) "ok, für den BIC wurde die Wildcard-Version (8stellig) benutzt"
4504
+ */
4505
+ static VALUE scl_sct_blz(int argc,VALUE* argv,VALUE self)
4506
+ {
4507
+ char blz[12];
4508
+ const char *used_bic;
4509
+ int rv,retval;
4510
+
4511
+ get_params_scl(argc,argv,blz,8);
4512
+ rv=lut_scl_sct_blz(blz,&retval,&used_bic);
4513
+ if(retval>0)
4514
+ return rb_ary_new3(3,INT2FIX(rv),INT2FIX(retval),rb_str_new2(used_bic));
4515
+ else
4516
+ return rb_ary_new3(3,Qnil,INT2FIX(retval),Qnil);
4517
+ }
4518
+
4519
+ /**
4520
+ * ===KontoCheckRaw::scl_sdd(bic)
4521
+ * =====KontoCheck::scl_sdd(bic)
4522
+ * =====KontoCheckRaw::scl_sdd_blz(blz)
4523
+ * Diese Funktion bestimmt das Flag SDD (SEPA CORE Direct Debit (SEPA-Basislastschrift)
4524
+ * des SCL- Verzeichnisses und gibt das Flag (0 bzw. 1) zurück.
4525
+ * Im Fehlerfall wird nil zurückgegeben und die Variable retval auf den
4526
+ * entsprechende Fehlercode (<0) gesetzt.
4527
+ *
4528
+ * ====Aufruf:
4529
+ * * ret=KontoCheckRaw::scl_sdd(bic)
4530
+ *
4531
+ * ====Rückgabe:
4532
+ * Die Rückgabe ist ein Array mit zwei Elementen:
4533
+ *
4534
+ * * Das erste Element ist das Flag SDD aus dem SEPA-Directory
4535
+ * * Das zweite Element ist der Statuscode (s.u.)
4536
+ *
4537
+ * ====Mögliche Statuscodes:
4538
+ * * -158 (NO_SCL_BLOCKS_LOADED) "die SCL-Blocks wurden noch nicht eingelesen"
4539
+ * * -156 (SCL_BIC_NOT_FOUND) "Der BIC wurde im SCL-Verzeichnis nicht gefunden"
4540
+ * * 1 (OK) "ok"
4541
+ * * 27 (OK_SCL_EXTENSION_BIC_USED) "ok, für den BIC wurde die Extension XXX angehängt"
4542
+ * * 28 (OK_SCL_WILDCARD_BIC_USED) "ok, für den BIC wurde die Wildcard-Version (8stellig) benutzt"
4543
+ */
4544
+ static VALUE scl_sdd(int argc,VALUE* argv,VALUE self)
4545
+ {
4546
+ char bic[12];
4547
+ int rv,retval;
4548
+
4549
+ get_params_scl(argc,argv,bic,11);
4550
+ rv=lut_scl_sdd(bic,&retval);
4551
+ return rb_ary_new3(2,retval>0?INT2FIX(rv):Qnil,INT2FIX(retval));
4552
+ }
4553
+
4554
+ /**
4555
+ * ===KontoCheckRaw::scl_sdd_blz(blz)
4556
+ * =====KontoCheck::scl_sdd(bic)
4557
+ * =====KontoCheckRaw::scl_sdd(blz)
4558
+ * Diese Funktion bestimmt das Flag SDD (SEPA CORE Direct Debit (SEPA-Basislastschrift)
4559
+ * des SCL- Verzeichnisses und gibt das Flag (0 bzw. 1) zurück.
4560
+ * Im Fehlerfall wird nil zurückgegeben und die Variable retval auf den
4561
+ * entsprechende Fehlercode (<0) gesetzt.
4562
+ *
4563
+ * ====Aufruf:
4564
+ * * ret=KontoCheckRaw::scl_sdd_blz(blz)
4565
+ *
4566
+ * ====Rückgabe:
4567
+ * Die Rückgabe ist ein Array mit drei Elementen:
4568
+ *
4569
+ * * Das erste Element ist das Flag SDD aus dem SEPA-Directory
4570
+ * * Das zweite Element ist der Statuscode (s.u.)
4571
+ * * Das dritte Element (nur bei scl_sdd_blz()) ist der benutzte BIC
4572
+ *
4573
+ * ====Mögliche Statuscodes:
4574
+ * * -158 (NO_SCL_BLOCKS_LOADED) "die SCL-Blocks wurden noch nicht eingelesen"
4575
+ * * -156 (SCL_BIC_NOT_FOUND) "Der BIC wurde im SCL-Verzeichnis nicht gefunden"
4576
+ * * -139 (LUT2_NOT_ALL_IBAN_BLOCKS_LOADED) "es konnten nicht alle Datenblocks die für die IBAN-Berechnung notwendig sind geladen werden"
4577
+ * * -5 (INVALID_BLZ_LENGTH) "die Bankleitzahl ist nicht achtstellig"
4578
+ * * -4 (INVALID_BLZ) "die Bankleitzahl ist ungültig"
4579
+ * * 1 (OK) "ok"
4580
+ * * 27 (OK_SCL_EXTENSION_BIC_USED) "ok, für den BIC wurde die Extension XXX angehängt"
4581
+ * * 28 (OK_SCL_WILDCARD_BIC_USED) "ok, für den BIC wurde die Wildcard-Version (8stellig) benutzt"
4582
+ */
4583
+ static VALUE scl_sdd_blz(int argc,VALUE* argv,VALUE self)
4584
+ {
4585
+ char blz[12];
4586
+ const char *used_bic;
4587
+ int rv,retval;
4588
+
4589
+ get_params_scl(argc,argv,blz,8);
4590
+ rv=lut_scl_sdd_blz(blz,&retval,&used_bic);
4591
+ if(retval>0)
4592
+ return rb_ary_new3(3,INT2FIX(rv),INT2FIX(retval),rb_str_new2(used_bic));
4593
+ else
4594
+ return rb_ary_new3(3,Qnil,INT2FIX(retval),Qnil);
4595
+ }
4596
+
4597
+ /**
4598
+ * ===KontoCheckRaw::scl_cor1(bic)
4599
+ * =====KontoCheck::scl_cor1(bic)
4600
+ * =====KontoCheck::scl_cor1_blz(blz)
4601
+ * Diese Funktion bestimmt das Flag COR1 (SEPA COR1 Direct Debit (SEPA-Basislastschrift
4602
+ * mit verkürzter Vorlagefrist) des SCL-Verzeichnisses und gibt das Flag (0 bzw. 1) zurück.
4603
+ * Im Fehlerfall wird nil zurückgegeben und die Variable retval auf den
4604
+ * entsprechende Fehlercode (<0) gesetzt.
4605
+ *
4606
+ * ====Aufruf:
4607
+ * * ret=KontoCheckRaw::scl_cor1(bic)
4608
+ *
4609
+ * ====Rückgabe:
4610
+ * Die Rückgabe ist ein Array mit zwei Elementen:
4611
+ *
4612
+ * * Das erste Element ist das Flag SDD aus dem SEPA-Directory
4613
+ * * Das zweite Element ist der Statuscode (s.u.)
4614
+ *
4615
+ * ====Mögliche Statuscodes:
4616
+ * * -158 (NO_SCL_BLOCKS_LOADED) "die SCL-Blocks wurden noch nicht eingelesen"
4617
+ * * -156 (SCL_BIC_NOT_FOUND) "Der BIC wurde im SCL-Verzeichnis nicht gefunden"
4618
+ * * 1 (OK) "ok"
4619
+ * * 27 (OK_SCL_EXTENSION_BIC_USED) "ok, für den BIC wurde die Extension XXX angehängt"
4620
+ * * 28 (OK_SCL_WILDCARD_BIC_USED) "ok, für den BIC wurde die Wildcard-Version (8stellig) benutzt"
4621
+ */
4622
+ static VALUE scl_cor1(int argc,VALUE* argv,VALUE self)
4623
+ {
4624
+ char bic[12];
4625
+ int rv,retval;
4626
+
4627
+ get_params_scl(argc,argv,bic,11);
4628
+ rv=lut_scl_cor1(bic,&retval);
4629
+ return rb_ary_new3(2,retval>0?INT2FIX(rv):Qnil,INT2FIX(retval));
4630
+ }
4631
+
4632
+ /**
4633
+ * ===KontoCheckRaw::scl_cor1_blz(blz)
4634
+ * =====KontoCheck::scl_cor1(bic)
4635
+ * =====KontoCheckRaw::scl_cor1(blz)
4636
+ * Diese Funktion bestimmt das Flag COR1 (SEPA COR1 Direct Debit (SEPA-Basislastschrift
4637
+ * mit verkürzter Vorlagefrist) des SCL-Verzeichnisses und gibt das Flag (0 bzw. 1) zurück.
4638
+ * Im Fehlerfall wird nil zurückgegeben und die Variable retval auf den
4639
+ * entsprechende Fehlercode (<0) gesetzt.
4640
+ *
4641
+ * ====Aufruf:
4642
+ * * ret=KontoCheckRaw::scl_cor1_blz(blz)
4643
+ *
4644
+ * ====Rückgabe:
4645
+ * Die Rückgabe ist ein Array mit drei Elementen:
4646
+ *
4647
+ * * Das erste Element ist das Flag SDD aus dem SEPA-Directory
4648
+ * * Das zweite Element ist der Statuscode (s.u.)
4649
+ * * Das dritte Element (nur bei scl_cor1_blz()) ist der benutzte BIC
4650
+ *
4651
+ * ====Mögliche Statuscodes:
4652
+ * * -158 (NO_SCL_BLOCKS_LOADED) "die SCL-Blocks wurden noch nicht eingelesen"
4653
+ * * -156 (SCL_BIC_NOT_FOUND) "Der BIC wurde im SCL-Verzeichnis nicht gefunden"
4654
+ * * -139 (LUT2_NOT_ALL_IBAN_BLOCKS_LOADED) "es konnten nicht alle Datenblocks die für die IBAN-Berechnung notwendig sind geladen werden"
4655
+ * * -5 (INVALID_BLZ_LENGTH) "die Bankleitzahl ist nicht achtstellig"
4656
+ * * -4 (INVALID_BLZ) "die Bankleitzahl ist ungültig"
4657
+ * * 1 (OK) "ok"
4658
+ * * 27 (OK_SCL_EXTENSION_BIC_USED) "ok, für den BIC wurde die Extension XXX angehängt"
4659
+ * * 28 (OK_SCL_WILDCARD_BIC_USED) "ok, für den BIC wurde die Wildcard-Version (8stellig) benutzt"
4660
+ */
4661
+ static VALUE scl_cor1_blz(int argc,VALUE* argv,VALUE self)
4662
+ {
4663
+ char blz[12];
4664
+ const char *used_bic;
4665
+ int rv,retval;
4666
+
4667
+ get_params_scl(argc,argv,blz,8);
4668
+ rv=lut_scl_cor1_blz(blz,&retval,&used_bic);
4669
+ if(retval>0)
4670
+ return rb_ary_new3(3,INT2FIX(rv),INT2FIX(retval),rb_str_new2(used_bic));
4671
+ else
4672
+ return rb_ary_new3(3,Qnil,INT2FIX(retval),Qnil);
4673
+ }
4674
+
4675
+ /**
4676
+ * ===KontoCheckRaw::scl_b2b(bic)
4677
+ * =====KontoCheck::scl_b2b(bic)
4678
+ * =====KontoCheckRaw::scl_b2b_blz(blz)
4679
+ * Diese Funktion bestimmt das Flag B2B (SEPA B2B Direct Debit, Sepa-Firmelastschrift)
4680
+ * des SCL-Verzeichnisses und gibt das Flag (0 bzw. 1) zurück.
4681
+ * Im Fehlerfall wird nil zurückgegeben und die Variable retval auf den
4682
+ * entsprechende Fehlercode (<0) gesetzt.
4683
+ *
4684
+ * ====Aufruf:
4685
+ * * ret=KontoCheckRaw::scl_b2b(bic)
4686
+ *
4687
+ * ====Rückgabe:
4688
+ * Die Rückgabe ist ein Array mit zwei Elementen:
4689
+ *
4690
+ * * Das erste Element ist das Flag B2B aus dem SEPA-Directory
4691
+ * * Das zweite Element ist der Statuscode (s.u.)
4692
+ *
4693
+ * ====Mögliche Statuscodes:
4694
+ * * -158 (NO_SCL_BLOCKS_LOADED) "die SCL-Blocks wurden noch nicht eingelesen"
4695
+ * * -156 (SCL_BIC_NOT_FOUND) "Der BIC wurde im SCL-Verzeichnis nicht gefunden"
4696
+ * * 1 (OK) "ok"
4697
+ * * 27 (OK_SCL_EXTENSION_BIC_USED) "ok, für den BIC wurde die Extension XXX angehängt"
4698
+ * * 28 (OK_SCL_WILDCARD_BIC_USED) "ok, für den BIC wurde die Wildcard-Version (8stellig) benutzt"
4699
+ */
4700
+ static VALUE scl_b2b(int argc,VALUE* argv,VALUE self)
4701
+ {
4702
+ char bic[12];
4703
+ int rv,retval;
4704
+
4705
+ get_params_scl(argc,argv,bic,11);
4706
+ rv=lut_scl_b2b(bic,&retval);
4707
+ return rb_ary_new3(2,retval>0?INT2FIX(rv):Qnil,INT2FIX(retval));
4708
+ }
4709
+
4710
+ /**
4711
+ * ===KontoCheckRaw::scl_b2b_blz(blz)
4712
+ * =====KontoCheck::scl_b2b_blz(blz)
4713
+ * =====KontoCheckRaw::scl_b2b(bic)
4714
+ * Diese Funktion bestimmt das Flag B2B (SEPA B2B Direct Debit, Sepa-Firmelastschrift)
4715
+ * des SCL-Verzeichnisses und gibt das Flag (0 bzw. 1) zurück.
4716
+ * Im Fehlerfall wird nil zurückgegeben und die Variable retval auf den
4717
+ * entsprechende Fehlercode (<0) gesetzt.
4718
+ *
4719
+ * ====Aufruf:
4720
+ * * ret=KontoCheckRaw::scl_b2b_blz(blz)
4721
+ *
4722
+ * ====Rückgabe:
4723
+ * Die Rückgabe ist ein Array mit drei Elementen:
4724
+ *
4725
+ * * Das erste Element ist das Flag B2B aus dem SEPA-Directory
4726
+ * * Das zweite Element ist der Statuscode (s.u.)
4727
+ * * Das dritte Element (nur bei scl_b2b_blz()) ist der benutzte BIC
4728
+ *
4729
+ * ====Mögliche Statuscodes:
4730
+ * * -158 (NO_SCL_BLOCKS_LOADED) "die SCL-Blocks wurden noch nicht eingelesen"
4731
+ * * -156 (SCL_BIC_NOT_FOUND) "Der BIC wurde im SCL-Verzeichnis nicht gefunden"
4732
+ * * -139 (LUT2_NOT_ALL_IBAN_BLOCKS_LOADED) "es konnten nicht alle Datenblocks die für die IBAN-Berechnung notwendig sind geladen werden"
4733
+ * * -5 (INVALID_BLZ_LENGTH) "die Bankleitzahl ist nicht achtstellig"
4734
+ * * -4 (INVALID_BLZ) "die Bankleitzahl ist ungültig"
4735
+ * * 1 (OK) "ok"
4736
+ * * 27 (OK_SCL_EXTENSION_BIC_USED) "ok, für den BIC wurde die Extension XXX angehängt"
4737
+ * * 28 (OK_SCL_WILDCARD_BIC_USED) "ok, für den BIC wurde die Wildcard-Version (8stellig) benutzt"
4738
+ */
4739
+ static VALUE scl_b2b_blz(int argc,VALUE* argv,VALUE self)
4740
+ {
4741
+ char blz[12];
4742
+ const char *used_bic;
4743
+ int rv,retval;
4744
+
4745
+ get_params_scl(argc,argv,blz,8);
4746
+ rv=lut_scl_b2b_blz(blz,&retval,&used_bic);
4747
+ if(retval>0)
4748
+ return rb_ary_new3(3,INT2FIX(rv),INT2FIX(retval),rb_str_new2(used_bic));
4749
+ else
4750
+ return rb_ary_new3(3,Qnil,INT2FIX(retval),Qnil);
4751
+
4752
+ }
4753
+
4754
+ /**
4755
+ * ===KontoCheckRaw::scl_scc(bic)
4756
+ * =====KontoCheck::scl_scc(bic)
4757
+ * =====KontoCheckRaw::scl_scc_blz(blz)
4758
+ * Diese Funktion bestimmt das Flag SCC (SEPA Card Clearing, SCC Karteneinzüge)
4759
+ * des SCL-Verzeichnisses und gibt das Flag (0 bzw. 1) zurück.
4760
+ * Im Fehlerfall wird nil zurückgegeben und die Variable retval auf den
4761
+ * entsprechende Fehlercode (<0) gesetzt.
4762
+ *
4763
+ * ====Aufruf:
4764
+ * * ret=KontoCheckRaw::scl_scc(bic)
4765
+ *
4766
+ * ====Rückgabe:
4767
+ * Die Rückgabe ist ein Array mit zwei Elementen:
4768
+ *
4769
+ * * Das erste Element ist das Flag SDD aus dem SEPA-Directory
4770
+ * * Das zweite Element ist der Statuscode (s.u.)
4771
+ *
4772
+ * ====Mögliche Statuscodes:
4773
+ * * -158 (NO_SCL_BLOCKS_LOADED) "die SCL-Blocks wurden noch nicht eingelesen"
4774
+ * * -156 (SCL_BIC_NOT_FOUND) "Der BIC wurde im SCL-Verzeichnis nicht gefunden"
4775
+ * * 1 (OK) "ok"
4776
+ * * 27 (OK_SCL_EXTENSION_BIC_USED) "ok, für den BIC wurde die Extension XXX angehängt"
4777
+ * * 28 (OK_SCL_WILDCARD_BIC_USED) "ok, für den BIC wurde die Wildcard-Version (8stellig) benutzt"
4778
+ */
4779
+ static VALUE scl_scc(int argc,VALUE* argv,VALUE self)
4780
+ {
4781
+ char bic[12];
4782
+ int rv,retval;
4783
+
4784
+ get_params_scl(argc,argv,bic,11);
4785
+ rv=lut_scl_scc(bic,&retval);
4786
+ return rb_ary_new3(2,retval>0?INT2FIX(rv):Qnil,INT2FIX(retval));
4787
+ }
4788
+
4789
+ /**
4790
+ * ===KontoCheckRaw::scl_scc_blz(blz)
4791
+ * =====KontoCheck::scl_scc(bic)
4792
+ * =====KontoCheckRaw::scl_scc(bic)
4793
+ * Diese Funktion bestimmt das Flag SCC (SEPA Card Clearing, SCC Karteneinzüge)
4794
+ * des SCL-Verzeichnisses und gibt das Flag (0 bzw. 1) zurück.
4795
+ * Im Fehlerfall wird nil zurückgegeben und die Variable retval auf den
4796
+ * entsprechende Fehlercode (<0) gesetzt.
4797
+ *
4798
+ * ====Aufruf:
4799
+ * * ret=KontoCheckRaw::scl_scc_blz(blz)
4800
+ *
4801
+ * ====Rückgabe:
4802
+ * Die Rückgabe ist ein Array mit drei Elementen:
4803
+ *
4804
+ * * Das erste Element ist das Flag SDD aus dem SEPA-Directory
4805
+ * * Das zweite Element ist der Statuscode (s.u.)
4806
+ * * Das dritte Element (nur bei scl_scc_blz()) ist der benutzte BIC
4807
+ *
4808
+ * ====Mögliche Statuscodes:
4809
+ * * -158 (NO_SCL_BLOCKS_LOADED) "die SCL-Blocks wurden noch nicht eingelesen"
4810
+ * * -156 (SCL_BIC_NOT_FOUND) "Der BIC wurde im SCL-Verzeichnis nicht gefunden"
4811
+ * * -139 (LUT2_NOT_ALL_IBAN_BLOCKS_LOADED) "es konnten nicht alle Datenblocks die für die IBAN-Berechnung notwendig sind geladen werden"
4812
+ * * -5 (INVALID_BLZ_LENGTH) "die Bankleitzahl ist nicht achtstellig"
4813
+ * * -4 (INVALID_BLZ) "die Bankleitzahl ist ungültig"
4814
+ * * 1 (OK) "ok"
4815
+ * * 27 (OK_SCL_EXTENSION_BIC_USED) "ok, für den BIC wurde die Extension XXX angehängt"
4816
+ * * 28 (OK_SCL_WILDCARD_BIC_USED) "ok, für den BIC wurde die Wildcard-Version (8stellig) benutzt"
4817
+ */
4818
+ static VALUE scl_scc_blz(int argc,VALUE* argv,VALUE self)
4819
+ {
4820
+ char blz[12];
4821
+ const char *used_bic;
4822
+ int rv,retval;
4823
+
4824
+ get_params_scl(argc,argv,blz,8);
4825
+ rv=lut_scl_scc_blz(blz,&retval,&used_bic);
4826
+ if(retval>0)
4827
+ return rb_ary_new3(3,INT2FIX(rv),INT2FIX(retval),rb_str_new2(used_bic));
4828
+ else
4829
+ return rb_ary_new3(3,Qnil,INT2FIX(retval),Qnil);
4830
+ }
4831
+
4320
4832
  /**
4321
4833
  * ===KontoCheckRaw::version( [mode] )
4322
4834
  * =====KontoCheck::version( [mode] )
@@ -4358,7 +4870,7 @@ void Init_konto_check_raw()
4358
4870
  *
4359
4871
  * <b>ATTENTION:</b> There are a few important changes in the API between
4360
4872
  * version 0.0.2 (version by Peter Horn/Provideal), version 0.0.6 (jeanmartin)
4361
- * and this version (V. 6.02 from 2017-11-26):
4873
+ * and this version (V. 6.13 from 2020-12-16):
4362
4874
  *
4363
4875
  * * The function KontoCheck::load_bank_data() is no longer used; it is
4364
4876
  * replaced by KontoCheck::init() and KontoCheck::generate_lutfile().
@@ -4536,10 +5048,36 @@ void Init_konto_check_raw()
4536
5048
  rb_define_module_function(KontoCheck,"bank_suche_regel",bank_suche_regel,-1);
4537
5049
  rb_define_module_function(KontoCheck,"bank_suche_volltext",bank_suche_volltext,-1);
4538
5050
  rb_define_module_function(KontoCheck,"bank_suche_multiple",bank_suche_multiple,-1);
5051
+
5052
+ rb_define_module_function(KontoCheck,"scl_init",scl_init_rb,-1);
5053
+ rb_define_module_function(KontoCheck,"scl_multi",scl_multi,-1);
5054
+ rb_define_module_function(KontoCheck,"scl_sct",scl_sct,-1);
5055
+ rb_define_module_function(KontoCheck,"scl_sdd",scl_sdd,-1);
5056
+ rb_define_module_function(KontoCheck,"scl_cor1",scl_cor1,-1);
5057
+ rb_define_module_function(KontoCheck,"scl_b2b",scl_b2b,-1);
5058
+ rb_define_module_function(KontoCheck,"scl_scc_blz",scl_scc,-1);
5059
+ rb_define_module_function(KontoCheck,"scl_sct_blz",scl_sct_blz,-1);
5060
+ rb_define_module_function(KontoCheck,"scl_sdd_blz",scl_sdd_blz,-1);
5061
+ rb_define_module_function(KontoCheck,"scl_cor1_blz",scl_cor1_blz,-1);
5062
+ rb_define_module_function(KontoCheck,"scl_b2b_blz",scl_b2b_blz,-1);
5063
+ rb_define_module_function(KontoCheck,"scl_scc_blz",scl_scc_blz,-1);
5064
+
4539
5065
  rb_define_module_function(KontoCheck,"version",version_rb,-1);
4540
5066
  rb_define_module_function(KontoCheck,"load_bank_data",load_bank_data,1);
4541
5067
 
4542
5068
  /* Rückgabewerte der konto_check Bibliothek */
5069
+ /* (-158) die SCL-Blocks wurden noch nicht eingelesen */
5070
+ rb_define_const(KontoCheck,"NO_SCL_BLOCKS_LOADED",INT2FIX(NO_SCL_BLOCKS_LOADED));
5071
+ /* (-157) Der Info-Block des SCL-Verzeichnisses wurde noch nicht eingelesen */
5072
+ rb_define_const(KontoCheck,"NO_SCL_INFO_BLOCK",INT2FIX(NO_SCL_INFO_BLOCK));
5073
+ /* (-156) Der BIC wurde im SCL-Verzeichnis nicht gefunden */
5074
+ rb_define_const(KontoCheck,"SCL_BIC_NOT_FOUND",INT2FIX(SCL_BIC_NOT_FOUND));
5075
+ /* (-155) Ungültiger SCL-Info-Block in der LUT-Datei */
5076
+ rb_define_const(KontoCheck,"INVALID_SCL_INFO_BLOCK",INT2FIX(INVALID_SCL_INFO_BLOCK));
5077
+ /* (-154) Keine SCL-Blocks in der LUT-Datei enthalten */
5078
+ rb_define_const(KontoCheck,"NO_SCL_BLOCKS",INT2FIX(NO_SCL_BLOCKS));
5079
+ /* (-153) Ungültige Eingabewerte in der SCL-Datei */
5080
+ rb_define_const(KontoCheck,"SCL_INPUT_FORMAT_ERROR",INT2FIX(SCL_INPUT_FORMAT_ERROR));
4543
5081
  /* (-152) Ungültiger Zähler in regulärem Ausdruck (innerhalb von {}) */
4544
5082
  rb_define_const(KontoCheck,"INVALID_REGULAR_EXPRESSION_CNT",INT2FIX(INVALID_REGULAR_EXPRESSION_CNT));
4545
5083
  /* (-151) Ungültiger regulärer Ausdruck (enthält zwei Zeichen aus [+?*] nacheinander) */
@@ -4846,4 +5384,8 @@ void Init_konto_check_raw()
4846
5384
  rb_define_const(KontoCheck,"OK_UNTERKONTO_ATTACHED",INT2FIX(OK_UNTERKONTO_ATTACHED));
4847
5385
  /* (26) ok, für den BIC wurde die Zweigstellennummer allerdings durch XXX ersetzt */
4848
5386
  rb_define_const(KontoCheck,"OK_SHORT_BIC_USED",INT2FIX(OK_SHORT_BIC_USED));
5387
+ /* (27) ok, für den BIC wurde die Extension XXX angehängt */
5388
+ rb_define_const(KontoCheck,"OK_SCL_EXTENSION_BIC_USED",INT2FIX(OK_SCL_EXTENSION_BIC_USED));
5389
+ /* (28) ok, für den BIC wurde die Wildcard-Version (8stellig) benutzt */
5390
+ rb_define_const(KontoCheck,"OK_SCL_WILDCARD_BIC_USED",INT2FIX(OK_SCL_WILDCARD_BIC_USED));
4849
5391
  }