konto_check 6.02.1 → 6.05.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 75dc7ee84c05f74702fe6700572ea1582c0b5a5e
4
- data.tar.gz: 4eadd205607458f60644bd64fcbb31edf3b06cc1
2
+ SHA256:
3
+ metadata.gz: 2bbda9625a71554feb4b1834746537e6373bd980152cd99d3aa05e9f359fd0c9
4
+ data.tar.gz: 2849168f603246056457c218eba379ef13da2e9b9c5bd5dd0ff32b21acd8296b
5
5
  SHA512:
6
- metadata.gz: 30a19011a5b899feb9f39e12569e06e33ba9bf28921e61ef905d835ac6314fae4b95735f130577110b4776ab41f1af05cee50517cf75d5718a6169542c9cc13a
7
- data.tar.gz: 7eb59ddb020b91b14d81eda00df428fdbee10744e41f680b6ff587d7ec46060668cb3bcd825864aa9c9666e626e7da2b52aefac90dfcdec3c26608a9ebcf7fab
6
+ metadata.gz: 809f73dffcc5cc227c0d82615ba00ae957b4758cdff6a7189b3bc5a41270a736cc25046acb5819f4d852a65ec00002787e74784c41b23410c2c31f948eeee10b
7
+ data.tar.gz: 2e1110c99778d67592b68092be00d88dec3f70f92a805205fba931017da3c9cf1e02915172d66885e8a76fa7456ec6f5283927b03ebf8f79560960ec726db138
@@ -13,7 +13,7 @@
13
13
  * # wurden aus der aktuellen BLZ-Datei der Deutschen Bundesbank #
14
14
  * # �bernommen. #
15
15
  * # #
16
- * # Copyright (C) 2002-2017 Michael Plugge <m.plugge@hs-mannheim.de> #
16
+ * # Copyright (C) 2002-2018 Michael Plugge <m.plugge@hs-mannheim.de> #
17
17
  * # #
18
18
  * # Dieses Programm ist freie Software; Sie d�rfen es unter den #
19
19
  * # Bedingungen der GNU Lesser General Public License, wie von der Free #
@@ -45,15 +45,15 @@
45
45
  * # im Internet herunterladen. #
46
46
  * ##########################################################################
47
47
  */
48
- #line 332 "ruby/ext/konto_check_raw/konto_check.lxx"
48
+ #line 332 "konto_check.lxx"
49
49
 
50
50
  /* Definitionen und Includes */
51
51
  #ifndef VERSION
52
- #define VERSION "6.02 (final)"
52
+ #define VERSION "6.05 (final)"
53
53
  #define VERSION_MAJOR 6
54
- #define VERSION_MINOR 02
54
+ #define VERSION_MINOR 05
55
55
  #endif
56
- #define VERSION_DATE "2017-11-26"
56
+ #define VERSION_DATE "2018-09-01"
57
57
 
58
58
  #ifndef INCLUDE_KONTO_CHECK_DE
59
59
  #define INCLUDE_KONTO_CHECK_DE 1
@@ -104,8 +104,8 @@ static lzo_align_t __LZO_MMODEL wrkmem[LZO1X_1_MEM_COMPRESS];
104
104
  #define KONTO_CHECK_VARS
105
105
  #include "konto_check.h"
106
106
 
107
- /* Flag, um die �nderungen zum Dezember 2017 zu aktivieren */
108
- static int pz_aenderungen_aktivieren_2017_12;
107
+ /* Flag, um die �nderungen zum September 2018 zu aktivieren */
108
+ static int pz_aenderungen_aktivieren_2018_09;
109
109
 
110
110
  /* falls die Variable verbose_debug gesetzt wird, werden bei einigen
111
111
  * Funktionen mittels perror() zus�tzliche Debuginfos ausgegeben. Die
@@ -206,6 +206,13 @@ static int name_raw_len,name_kurz_raw_len,name_name_kurz_raw_len,ort_raw_len;
206
206
  static char **sortc_buf;
207
207
  static int *sorti_buf;
208
208
 
209
+ /* Variablen f�r das SCL-Verzeichnis */
210
+ static char *scl_info_block,*scl_bic_block,*scl_name_block,*scl_flags_block,
211
+ **scl_bic_array,**scl_name_array,**scl_flags_array,
212
+ scl_gueltigkeit[16],scl_gueltigkeit_iso[16];
213
+ static int scl_cnt;
214
+ long scl_ts;
215
+
209
216
  /* Funktionspointer auf die aktuelle Kodierung */
210
217
  DLL_EXPORT const char *(*retval_enc)(int)=NULL;
211
218
 
@@ -242,7 +249,7 @@ static int convert_encoding(char **data,UINT4 *len);
242
249
  #define free(ptr) efree(ptr)
243
250
  #endif
244
251
 
245
- #line 770 "ruby/ext/konto_check_raw/konto_check.lxx"
252
+ #line 777 "konto_check.lxx"
246
253
 
247
254
  /* Testwert zur Markierung ung�ltiger Ziffern im BLZ-String (>8 Stellen) */
248
255
  #define BLZ_FEHLER 100000000
@@ -378,7 +385,7 @@ static int convert_encoding(char **data,UINT4 *len);
378
385
  */
379
386
  #define CHECK_RETVAL(fkt) do{if((retval=fkt)!=OK)goto fini;}while(0) /* es mu� noch aufger�umt werden, daher goto */
380
387
  #define CHECK_RETURN(fkt) do{if((retval=fkt)!=OK)return retval;}while(0)
381
- #line 911 "ruby/ext/konto_check_raw/konto_check.lxx"
388
+ #line 918 "konto_check.lxx"
382
389
 
383
390
  /* einige Makros zur Umwandlung zwischen unsigned int und char */
384
391
  #define UCP (unsigned char*)
@@ -435,24 +442,24 @@ DLL_EXPORT_V int
435
442
  lut_set_1[]={LUT2_BLZ,LUT2_PZ,LUT2_AENDERUNG,LUT2_NAME_KURZ,0},
436
443
  lut_set_2[]={LUT2_BLZ,LUT2_PZ,LUT2_AENDERUNG,LUT2_NAME_KURZ,LUT2_BIC,0},
437
444
  lut_set_3[]={LUT2_BLZ,LUT2_PZ,LUT2_AENDERUNG,LUT2_NAME,LUT2_PLZ,LUT2_ORT,0},
438
- lut_set_4[]={LUT2_BLZ,LUT2_PZ,LUT2_AENDERUNG,LUT2_NAME,LUT2_PLZ,LUT2_ORT,LUT2_IBAN_REGEL,LUT2_OWN_IBAN,LUT2_BIC,0},
439
- lut_set_5[]={LUT2_BLZ,LUT2_PZ,LUT2_AENDERUNG,LUT2_NAME_NAME_KURZ,LUT2_PLZ,LUT2_ORT,LUT2_IBAN_REGEL,LUT2_OWN_IBAN,LUT2_BIC,0},
440
- lut_set_6[]={LUT2_BLZ,LUT2_PZ,LUT2_AENDERUNG,LUT2_NAME_NAME_KURZ,LUT2_PLZ,LUT2_ORT,LUT2_IBAN_REGEL,LUT2_OWN_IBAN,LUT2_BIC,LUT2_NACHFOLGE_BLZ,0},
441
- lut_set_7[]={LUT2_BLZ,LUT2_PZ,LUT2_AENDERUNG,LUT2_NAME_NAME_KURZ,LUT2_PLZ,LUT2_ORT,LUT2_IBAN_REGEL,LUT2_OWN_IBAN,LUT2_BIC,LUT2_NACHFOLGE_BLZ,LUT2_LOESCHUNG,0},
442
- lut_set_8[]={LUT2_BLZ,LUT2_PZ,LUT2_AENDERUNG,LUT2_NAME_NAME_KURZ,LUT2_PLZ,LUT2_ORT,LUT2_IBAN_REGEL,LUT2_OWN_IBAN,LUT2_BIC,LUT2_NACHFOLGE_BLZ,LUT2_LOESCHUNG,LUT2_PAN,0},
443
- lut_set_9[]={LUT2_BLZ,LUT2_PZ,LUT2_AENDERUNG,LUT2_NAME_NAME_KURZ,LUT2_PLZ,LUT2_ORT,LUT2_IBAN_REGEL,LUT2_OWN_IBAN,LUT2_BIC,LUT2_NACHFOLGE_BLZ,LUT2_LOESCHUNG,LUT2_PAN,LUT2_NR,0},
444
- lut_set_iban[]={LUT2_BLZ,LUT2_PZ,LUT2_AENDERUNG,LUT2_BLZ,LUT2_BIC,LUT2_NACHFOLGE_BLZ,LUT2_LOESCHUNG,LUT2_IBAN_REGEL,LUT2_OWN_IBAN,0}, /* notwendige Felder f�r IBAN-Bestimmung */
445
+ lut_set_4[]={LUT2_BLZ,LUT2_PZ,LUT2_AENDERUNG,LUT2_NAME,LUT2_PLZ,LUT2_ORT,LUT2_IBAN_REGEL,LUT2_BIC,0},
446
+ lut_set_5[]={LUT2_BLZ,LUT2_PZ,LUT2_AENDERUNG,LUT2_NAME_NAME_KURZ,LUT2_PLZ,LUT2_ORT,LUT2_IBAN_REGEL,LUT2_BIC,0},
447
+ lut_set_6[]={LUT2_BLZ,LUT2_PZ,LUT2_AENDERUNG,LUT2_NAME_NAME_KURZ,LUT2_PLZ,LUT2_ORT,LUT2_IBAN_REGEL,LUT2_BIC,LUT2_NACHFOLGE_BLZ,0},
448
+ lut_set_7[]={LUT2_BLZ,LUT2_PZ,LUT2_AENDERUNG,LUT2_NAME_NAME_KURZ,LUT2_PLZ,LUT2_ORT,LUT2_IBAN_REGEL,LUT2_BIC,LUT2_NACHFOLGE_BLZ,LUT2_LOESCHUNG,0},
449
+ lut_set_8[]={LUT2_BLZ,LUT2_PZ,LUT2_AENDERUNG,LUT2_NAME_NAME_KURZ,LUT2_PLZ,LUT2_ORT,LUT2_IBAN_REGEL,LUT2_BIC,LUT2_NACHFOLGE_BLZ,LUT2_LOESCHUNG,LUT2_PAN,0},
450
+ lut_set_9[]={LUT2_BLZ,LUT2_PZ,LUT2_AENDERUNG,LUT2_NAME_NAME_KURZ,LUT2_PLZ,LUT2_ORT,LUT2_IBAN_REGEL,LUT2_BIC, LUT2_NACHFOLGE_BLZ,LUT2_LOESCHUNG,LUT2_PAN,LUT2_NR,0},
451
+ lut_set_iban[]={LUT2_BLZ,LUT2_PZ,LUT2_AENDERUNG,LUT2_BLZ,LUT2_BIC,LUT2_NACHFOLGE_BLZ,LUT2_LOESCHUNG,LUT2_IBAN_REGEL,0}, /* notwendige Felder f�r IBAN-Bestimmung */
445
452
 
446
453
  lut_set_o0[]={LUT2_BLZ,LUT2_PZ,0},
447
454
  lut_set_o1[]={LUT2_BLZ,LUT2_PZ,LUT2_AENDERUNG,LUT2_NAME_KURZ,0},
448
455
  lut_set_o2[]={LUT2_BLZ,LUT2_PZ,LUT2_AENDERUNG,LUT2_NAME_KURZ,LUT2_BIC,0},
449
456
  lut_set_o3[]={LUT2_BLZ,LUT2_PZ,LUT2_AENDERUNG,LUT2_NAME,LUT2_PLZ,LUT2_ORT,0},
450
- lut_set_o4[]={LUT2_BLZ,LUT2_PZ,LUT2_AENDERUNG,LUT2_NAME,LUT2_PLZ,LUT2_ORT,LUT2_IBAN_REGEL,LUT2_OWN_IBAN,LUT2_BIC,0},
451
- lut_set_o5[]={LUT2_BLZ,LUT2_PZ,LUT2_AENDERUNG,LUT2_NAME_NAME_KURZ,LUT2_PLZ,LUT2_ORT,LUT2_IBAN_REGEL,LUT2_OWN_IBAN,LUT2_BIC,0},
452
- lut_set_o6[]={LUT2_BLZ,LUT2_PZ,LUT2_AENDERUNG,LUT2_NAME_NAME_KURZ,LUT2_PLZ,LUT2_ORT,LUT2_IBAN_REGEL,LUT2_OWN_IBAN,LUT2_BIC,LUT2_NACHFOLGE_BLZ,0},
453
- lut_set_o7[]={LUT2_BLZ,LUT2_PZ,LUT2_AENDERUNG,LUT2_NAME_NAME_KURZ,LUT2_PLZ,LUT2_ORT,LUT2_IBAN_REGEL,LUT2_OWN_IBAN,LUT2_BIC,LUT2_NACHFOLGE_BLZ,LUT2_LOESCHUNG,0},
454
- lut_set_o8[]={LUT2_BLZ,LUT2_PZ,LUT2_AENDERUNG,LUT2_NAME_NAME_KURZ,LUT2_PLZ,LUT2_ORT,LUT2_IBAN_REGEL,LUT2_OWN_IBAN,LUT2_BIC,LUT2_NACHFOLGE_BLZ,LUT2_LOESCHUNG,LUT2_PAN,0},
455
- lut_set_o9[]={LUT2_BLZ,LUT2_PZ,LUT2_AENDERUNG,LUT2_NAME_NAME_KURZ,LUT2_PLZ,LUT2_ORT,LUT2_IBAN_REGEL,LUT2_OWN_IBAN,LUT2_BIC,LUT2_NACHFOLGE_BLZ,LUT2_LOESCHUNG,LUT2_PAN,LUT2_NR,0};
457
+ lut_set_o4[]={LUT2_BLZ,LUT2_PZ,LUT2_AENDERUNG,LUT2_NAME,LUT2_PLZ,LUT2_ORT,LUT2_IBAN_REGEL,LUT2_BIC,0},
458
+ lut_set_o5[]={LUT2_BLZ,LUT2_PZ,LUT2_AENDERUNG,LUT2_NAME_NAME_KURZ,LUT2_PLZ,LUT2_ORT,LUT2_IBAN_REGEL,LUT2_BIC,0},
459
+ lut_set_o6[]={LUT2_BLZ,LUT2_PZ,LUT2_AENDERUNG,LUT2_NAME_NAME_KURZ,LUT2_PLZ,LUT2_ORT,LUT2_IBAN_REGEL,LUT2_BIC,LUT2_NACHFOLGE_BLZ,0},
460
+ lut_set_o7[]={LUT2_BLZ,LUT2_PZ,LUT2_AENDERUNG,LUT2_NAME_NAME_KURZ,LUT2_PLZ,LUT2_ORT,LUT2_IBAN_REGEL,LUT2_BIC,LUT2_NACHFOLGE_BLZ,LUT2_LOESCHUNG,0},
461
+ lut_set_o8[]={LUT2_BLZ,LUT2_PZ,LUT2_AENDERUNG,LUT2_NAME_NAME_KURZ,LUT2_PLZ,LUT2_ORT,LUT2_IBAN_REGEL,LUT2_BIC,LUT2_NACHFOLGE_BLZ,LUT2_LOESCHUNG,LUT2_PAN,0},
462
+ lut_set_o9[]={LUT2_BLZ,LUT2_PZ,LUT2_AENDERUNG,LUT2_NAME_NAME_KURZ,LUT2_PLZ,LUT2_ORT,LUT2_IBAN_REGEL,LUT2_BIC, LUT2_NACHFOLGE_BLZ,LUT2_LOESCHUNG,LUT2_PAN,LUT2_NR,0};
456
463
 
457
464
  #define COMPRESSION_DEFAULT COMPRESSION_ZLIB
458
465
 
@@ -498,7 +505,7 @@ int pz=-777;
498
505
 
499
506
  #define E_START(x)
500
507
  #define E_END(x)
501
- #line 1036 "ruby/ext/konto_check_raw/konto_check.lxx"
508
+ #line 1043 "konto_check.lxx"
502
509
 
503
510
  /* Variable f�r die Methoden 27, 29 und 69 */
504
511
  static const int m10h_digits[4][10]={
@@ -579,7 +586,7 @@ static unsigned char ee[500],*eeh,*eep,eec[]={
579
586
  0xb3,0xa2,0xf4,0x0f,0x7e,0xb5,0x0a,0xdd,0x54,0xfb,0x74,0x56,0xf5,
580
587
  0x16,0x5a,0x53,0x14,0x3d,0xd8,0xbd,0x00,0x8b,0x59,0x95,0x67,0x00
581
588
  };
582
- #define EE 27
589
+ #define EE 29
583
590
 
584
591
  /* Arrays f�r die Felder der LUT-Datei u.a. */
585
592
  static char *lut_prolog,*lut_sys_info,*lut_user_info;
@@ -947,7 +954,7 @@ static int create_lutfile_int(char *name, char *prolog, int slots,FILE **lut)
947
954
  * ###########################################################################
948
955
  */
949
956
 
950
- #line 1485 "ruby/ext/konto_check_raw/konto_check.lxx"
957
+ #line 1492 "konto_check.lxx"
951
958
  DLL_EXPORT int write_lut_block(char *lutname,UINT4 typ,UINT4 len,char *data)
952
959
  {
953
960
  char buffer[SLOT_BUFFER],*ptr;
@@ -985,7 +992,7 @@ DLL_EXPORT int write_lut_block(char *lutname,UINT4 typ,UINT4 len,char *data)
985
992
  * #############################################################################
986
993
  */
987
994
 
988
- #line 1523 "ruby/ext/konto_check_raw/konto_check.lxx"
995
+ #line 1530 "konto_check.lxx"
989
996
  static int write_lut_block_int(FILE *lut,UINT4 typ,UINT4 len,char *data)
990
997
  {
991
998
  char buffer[SLOT_BUFFER],*ptr,*cptr;
@@ -1121,7 +1128,7 @@ static int write_lut_block_int(FILE *lut,UINT4 typ,UINT4 len,char *data)
1121
1128
  * ###########################################################################
1122
1129
  */
1123
1130
 
1124
- #line 1659 "ruby/ext/konto_check_raw/konto_check.lxx"
1131
+ #line 1666 "konto_check.lxx"
1125
1132
  DLL_EXPORT int read_lut_block(char *lutname, UINT4 typ,UINT4 *blocklen,char **data)
1126
1133
  {
1127
1134
  int retval;
@@ -1144,7 +1151,7 @@ DLL_EXPORT int read_lut_block(char *lutname, UINT4 typ,UINT4 *blocklen,char **da
1144
1151
  * ###########################################################################
1145
1152
  */
1146
1153
 
1147
- #line 1683 "ruby/ext/konto_check_raw/konto_check.lxx"
1154
+ #line 1690 "konto_check.lxx"
1148
1155
  DLL_EXPORT int read_lut_slot(char *lutname,int slot,UINT4 *blocklen,char **data)
1149
1156
  {
1150
1157
  int retval;
@@ -1166,7 +1173,7 @@ DLL_EXPORT int read_lut_slot(char *lutname,int slot,UINT4 *blocklen,char **data)
1166
1173
  * ###########################################################################
1167
1174
  */
1168
1175
 
1169
- #line 1706 "ruby/ext/konto_check_raw/konto_check.lxx"
1176
+ #line 1713 "konto_check.lxx"
1170
1177
  static int read_lut_block_int(FILE *lut,int slot,int typ,UINT4 *blocklen,char **data)
1171
1178
  {
1172
1179
  char buffer[SLOT_BUFFER],*ptr,*sbuffer,*dbuffer;
@@ -1256,7 +1263,7 @@ static int read_lut_block_int(FILE *lut,int slot,int typ,UINT4 *blocklen,char **
1256
1263
  FREE(sbuffer);
1257
1264
  RETURN(ERROR_MALLOC);
1258
1265
  }
1259
- #line 1811 "ruby/ext/konto_check_raw/konto_check.lxx"
1266
+ #line 1818 "konto_check.lxx"
1260
1267
 
1261
1268
  if(fread(sbuffer,1,compressed_len,lut)<compressed_len){
1262
1269
  FREE(sbuffer);
@@ -2849,7 +2856,7 @@ DLL_EXPORT int lut_info_id(char *lut_name,int *info1,int *info2,int *valid1,int
2849
2856
  * ###########################################################################
2850
2857
  */
2851
2858
 
2852
- #line 3404 "ruby/ext/konto_check_raw/konto_check.lxx"
2859
+ #line 3411 "konto_check.lxx"
2853
2860
  DLL_EXPORT int lut_info(char *lut_name,char **info1,char **info2,int *valid1,int *valid2)
2854
2861
  {
2855
2862
  char *ptr,*ptr1,buffer[128];
@@ -2937,7 +2944,7 @@ DLL_EXPORT int lut_info(char *lut_name,char **info1,char **info2,int *valid1,int
2937
2944
 
2938
2945
  /* Infoblocks lesen: 1. Infoblock */
2939
2946
  if((ret=read_lut_block_int(in,0,LUT2_INFO,&cnt,&ptr))==OK){
2940
- #line 3493 "ruby/ext/konto_check_raw/konto_check.lxx"
2947
+ #line 3500 "konto_check.lxx"
2941
2948
  *(ptr+cnt)=0;
2942
2949
  if(valid1){
2943
2950
  for(ptr1=ptr,v1=v2=0;*ptr1 && *ptr1!='\n' && !isdigit(*ptr1);ptr1++);
@@ -2985,7 +2992,7 @@ DLL_EXPORT int lut_info(char *lut_name,char **info1,char **info2,int *valid1,int
2985
2992
 
2986
2993
  /* Infoblocks lesen: 2. Infoblock */
2987
2994
  if((ret=read_lut_block_int(in,0,LUT2_2_INFO,&cnt,&ptr))==OK){
2988
- #line 3542 "ruby/ext/konto_check_raw/konto_check.lxx"
2995
+ #line 3549 "konto_check.lxx"
2989
2996
  *(ptr+cnt)=0;
2990
2997
  if(valid2){
2991
2998
  for(ptr1=ptr,v1=v2=0;*ptr1 && *ptr1!='\n' && !isdigit(*ptr1);ptr1++);
@@ -3204,7 +3211,7 @@ DLL_EXPORT int copy_lutfile(char *old_name,char *new_name,int new_slots)
3204
3211
  qsort(slotdir,slot_cnt,sizeof(int),cmp_int);
3205
3212
  for(last_slot=-1,i=0;i<(int)slot_cnt;i++)if((typ=slotdir[i]) && typ!=(UINT4)last_slot){
3206
3213
  read_lut_block_int(lut1,0,typ,&len,&data);
3207
- #line 3762 "ruby/ext/konto_check_raw/konto_check.lxx"
3214
+ #line 3769 "konto_check.lxx"
3208
3215
  write_lut_block_int(lut2,typ,len,data);
3209
3216
  FREE(data);
3210
3217
  last_slot=typ;
@@ -3434,7 +3441,7 @@ DLL_EXPORT int lut_init(char *lut_name,int required,int set)
3434
3441
  * # Copyright (C) 2008 Michael Plugge <m.plugge@hs-mannheim.de> #
3435
3442
  * ###########################################################################
3436
3443
  */
3437
- #line 3992 "ruby/ext/konto_check_raw/konto_check.lxx"
3444
+ #line 3999 "konto_check.lxx"
3438
3445
  DLL_EXPORT int kto_check_init(char *lut_name,int *required,int **status,int set,int incremental)
3439
3446
  {
3440
3447
  char *ptr,*dptr,*data,*eptr,*prolog,*info,*user_info,*hs=NULL,*info1,*info2,*ci=NULL,name_buffer[LUT_PATH_LEN];
@@ -3662,7 +3669,7 @@ DLL_EXPORT int kto_check_init(char *lut_name,int *required,int **status,int set,
3662
3669
  typ1=typ;
3663
3670
  if(lut2_block_status[typ]==OK)continue; /* jeden Block nur einmal einlesen */
3664
3671
  retval=read_lut_block_int(lut,0,typ,&len,&data);
3665
- #line 4221 "ruby/ext/konto_check_raw/konto_check.lxx"
3672
+ #line 4228 "konto_check.lxx"
3666
3673
 
3667
3674
  switch(retval){
3668
3675
  case LUT_CRC_ERROR:
@@ -3750,7 +3757,7 @@ DLL_EXPORT int kto_check_init(char *lut_name,int *required,int **status,int set,
3750
3757
  if(typ==LUT2_2_NAME || typ==LUT2_2_NAME_KURZ){
3751
3758
  FREE(data);
3752
3759
  i=read_lut_block_int(lut,0,LUT2_2_NAME_NAME_KURZ,&len,&data);
3753
- #line 4313 "ruby/ext/konto_check_raw/konto_check.lxx"
3760
+ #line 4320 "konto_check.lxx"
3754
3761
  if(i==OK){ /* was gefunden; Typ �ndern, dann weiter wie bei OK */
3755
3762
  typ=LUT2_2_NAME_NAME_KURZ;
3756
3763
  typ1=LUT2_NAME_NAME_KURZ;
@@ -3773,10 +3780,20 @@ DLL_EXPORT int kto_check_init(char *lut_name,int *required,int **status,int set,
3773
3780
  * LUT2_OWN_IBAN nicht geladen werden konnte, wird der Block in
3774
3781
  * der Funktion lut_blocks() als nicht geladen angegeben; bei
3775
3782
  * lut_init() wird dagegen OK zur�ckgegeben.
3783
+ *
3784
+ * Die SCL-Blocks sind ebenfalls nicht immer in der LUT-Datei vorhanden.
3785
+ * und sollen daher keine Warnung erzeugen.
3776
3786
  */
3777
- if(typ!=LUT2_OWN_IBAN && typ!=LUT2_2_OWN_IBAN && typ!=LUT2_FILIALEN && typ!=LUT2_2_FILIALEN){
3778
- alles_ok=0;
3779
- lut_blocks_missing++;
3787
+ switch(typ){
3788
+ case LUT2_OWN_IBAN:
3789
+ case LUT2_2_OWN_IBAN:
3790
+ case LUT2_FILIALEN:
3791
+ case LUT2_2_FILIALEN:
3792
+ break;
3793
+ default:
3794
+ alles_ok=0;
3795
+ lut_blocks_missing++;
3796
+ break;
3780
3797
  }
3781
3798
  lut2_block_len[typ]=lut2_block_len[typ1]=0;
3782
3799
  lut2_block_data[typ]=lut2_block_data[typ1]=NULL;
@@ -4346,7 +4363,7 @@ DLL_EXPORT int lut_blocks_id(int mode,int *lut_filename,int *lut_blocks_ok,int *
4346
4363
  * ###########################################################################
4347
4364
  */
4348
4365
 
4349
- #line 4909 "ruby/ext/konto_check_raw/konto_check.lxx"
4366
+ #line 4926 "konto_check.lxx"
4350
4367
  DLL_EXPORT const char *current_lutfile_name(int *set,int *level,int *retval)
4351
4368
  {
4352
4369
  if(init_status<7 || !current_lutfile){
@@ -4754,6 +4771,7 @@ DLL_EXPORT const char *lut_bic(char *b,int zweigstelle,int *retval)
4754
4771
  if(retval)*retval=ret;
4755
4772
  return NULL;
4756
4773
  }
4774
+ memcpy(kto2,"0000000000",10); /* f�r valgrind (kto2 ist nur ein Dummy) */
4757
4775
  bic=lut_bic_int(b,zweigstelle,retval); /* BIC aus der LUT-Datei holen */
4758
4776
  regel=lut_iban_regel(b,0,&ret);
4759
4777
  if(retval && ret==OK){ /* Test nur notwendig, falls retval nicht NULL */
@@ -4761,7 +4779,6 @@ DLL_EXPORT const char *lut_bic(char *b,int zweigstelle,int *retval)
4761
4779
  *retval=OK_HYPO_REQUIRES_KTO; /* Sonderfall ehemalige Hypobank */
4762
4780
  else{
4763
4781
  strcpy(blz2,b);
4764
- strcpy(kto2,"13"); /* nur Dummy f�r Funktionsaufruf */
4765
4782
  iban_regel_cvt(blz2,kto2,&bic_neu,regel,NULL); /* R�ckgabewert egal, nur bic_neu interessiert */
4766
4783
  if(bic && bic_neu && strcasecmp(bic,bic_neu))*retval=OK_INVALID_FOR_IBAN; /* BIC wurde durch eine Regel ge�ndert */
4767
4784
  }
@@ -5101,7 +5118,7 @@ static int iban_init(void)
5101
5118
  * ###########################################################################
5102
5119
  */
5103
5120
 
5104
- #line 5664 "ruby/ext/konto_check_raw/konto_check.lxx"
5121
+ #line 5681 "konto_check.lxx"
5105
5122
  static int iban_regel_cvt(char *blz,char *kto,const char **bicp,int regel_version,RETVAL *retvals)
5106
5123
  {
5107
5124
  char tmp_buffer[16];
@@ -6168,6 +6185,10 @@ static int iban_regel_cvt(char *blz,char *kto,const char **bicp,int regel_versio
6168
6185
  /* Pommersche Volksbank eG */
6169
6186
  case 30:
6170
6187
 
6188
+
6189
+ /* ab September 2018 entf�llt die Regel 45, bleibt jedoch frei */
6190
+ if(pz_aenderungen_aktivieren_2018_09)return OK;
6191
+
6171
6192
  /* diese Bank hat gleich eine lange Reihe Konten, die trotz
6172
6193
  * fehlerhafter Pr�fziffer umzuwandeln sind. Der Einfachheit halber
6173
6194
  * werden die Kontonummern in zwei Teile aufgeteilt (die beiden
@@ -8409,135 +8430,109 @@ static int iban_regel_cvt(char *blz,char *kto,const char **bicp,int regel_versio
8409
8430
  }
8410
8431
  RETURN_OK;
8411
8432
 
8412
- /* Iban-Regel 0056.00 +���3 */
8413
- /* Iban-Regel 0056.01 (ab September 2017) +���3 */
8414
- /* Iban-Regel 0056.01 (ab Dezember 2017) BLZ 51410111 ung�ltig +���3 */
8415
-
8416
-
8433
+ /* Iban-Regel 0056.03 +���3 */
8417
8434
  /* SEB AG */
8418
8435
  case 56:
8419
- if(version<1){
8420
-
8421
- /* Spendenkonten: nur mit festgelegten IBANs -> Konto und evl. BLZ/BIC anpassen */
8422
- if(k1==0)switch(k2){
8423
- case 36: strcpy(kto,"1010240003"); if(b!=38010111){strcpy(blz,"38010111"); *bicp="ESSEDE5F380"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8424
- case 50: strcpy(kto,"1328506100"); if(b!=48010111){strcpy(blz,"48010111"); *bicp="ESSEDE5F480"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8425
- case 99: strcpy(kto,"1826063000"); if(b!=43010111){strcpy(blz,"43010111"); *bicp="ESSEDE5F430"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8426
- case 110: strcpy(kto,"1015597802"); if(b!=25010111){strcpy(blz,"25010111"); *bicp="ESSEDE5F250"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8427
- case 240: strcpy(kto,"1010240000"); if(b!=38010111){strcpy(blz,"38010111"); *bicp="ESSEDE5F380"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8428
- case 333: strcpy(kto,"1011296100"); if(b!=38010111){strcpy(blz,"38010111"); *bicp="ESSEDE5F380"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8429
- case 555: strcpy(kto,"1600220800"); if(b!=10010111){strcpy(blz,"10010111"); *bicp="ESSEDE5F100"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8430
- case 556: strcpy(kto,"1000556100"); if(b!=39010111){strcpy(blz,"39010111"); *bicp="ESSEDE5F390"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8431
- case 606: strcpy(kto,"1967153801"); if(b!=25010111){strcpy(blz,"25010111"); *bicp="ESSEDE5F250"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8432
- case 700: strcpy(kto,"1070088000"); if(b!=26510111){strcpy(blz,"26510111"); *bicp="ESSEDE5F265"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8433
- case 777: strcpy(kto,"1006015200"); if(b!=25010111){strcpy(blz,"25010111"); *bicp="ESSEDE5F250"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8434
- case 999: strcpy(kto,"1010240001"); if(b!=38010111){strcpy(blz,"38010111"); *bicp="ESSEDE5F380"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8435
- case 1234: strcpy(kto,"1369152400"); if(b!=25010111){strcpy(blz,"25010111"); *bicp="ESSEDE5F250"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8436
- case 1313: strcpy(kto,"1017500000"); if(b!=57010111){strcpy(blz,"57010111"); *bicp="ESSEDE5F570"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8437
- case 1888: strcpy(kto,"1241113000"); if(b!=37010111){strcpy(blz,"37010111"); *bicp="ESSEDE5F370"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8438
- case 1953: strcpy(kto,"1026500901"); if(b!=25010111){strcpy(blz,"25010111"); *bicp="ESSEDE5F250"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8439
- case 1998: strcpy(kto,"1547620500"); if(b!=67010111){strcpy(blz,"67010111"); *bicp="ESSEDE5F670"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8440
- case 2007: strcpy(kto,"1026500907"); if(b!=25010111){strcpy(blz,"25010111"); *bicp="ESSEDE5F250"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8441
- case 4004: strcpy(kto,"1635100100"); if(b!=37010111){strcpy(blz,"37010111"); *bicp="ESSEDE5F370"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8442
- case 4444: strcpy(kto,"1304610900"); if(b!=67010111){strcpy(blz,"67010111"); *bicp="ESSEDE5F670"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8443
- case 5000: strcpy(kto,"1395676000"); if(b!=25010111){strcpy(blz,"25010111"); *bicp="ESSEDE5F250"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8444
- case 5510: strcpy(kto,"1611754300"); if(b!=29010111){strcpy(blz,"29010111"); *bicp="ESSEDE5F290"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8445
- case 6060: strcpy(kto,"1000400200"); if(b!=50010111){strcpy(blz,"50010111"); *bicp="ESSEDE5FXXX"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8446
- case 6800: strcpy(kto,"1296401301"); if(b!=67010111){strcpy(blz,"67010111"); *bicp="ESSEDE5F670"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8447
- case 55555: strcpy(kto,"1027758200"); if(b!=38010111){strcpy(blz,"38010111"); *bicp="ESSEDE5F380"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8448
- case 60000: strcpy(kto,"1005007001"); if(b!=50010111){strcpy(blz,"50010111"); *bicp="ESSEDE5FXXX"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8449
- case 66666: strcpy(kto,"1299807801"); if(b!=20010111){strcpy(blz,"20010111"); *bicp="ESSEDE5F200"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8450
- case 102030: strcpy(kto,"1837501600"); if(b!=37010111){strcpy(blz,"37010111"); *bicp="ESSEDE5F370"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8451
- case 121212: strcpy(kto,"1249461502"); if(b!=70010111){strcpy(blz,"70010111"); *bicp="ESSEDE5F700"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8452
- case 130500: strcpy(kto,"1413482100"); if(b!=30010111){strcpy(blz,"30010111"); *bicp="ESSEDE5F300"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8453
- case 202020: strcpy(kto,"1213431002"); if(b!=37010111){strcpy(blz,"37010111"); *bicp="ESSEDE5F370"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8454
- case 414141: strcpy(kto,"1010555101"); if(b!=38010111){strcpy(blz,"38010111"); *bicp="ESSEDE5F380"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8455
- case 666666: strcpy(kto,"1798758900"); if(b!=20010111){strcpy(blz,"20010111"); *bicp="ESSEDE5F200"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8456
- case 5000000: strcpy(kto,"1403124100"); if(b!=37010111){strcpy(blz,"37010111"); *bicp="ESSEDE5F370"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8457
- }
8458
- else if(k1==5 && k2==500500){
8459
- strcpy(kto,"1045720000");
8460
- if(b!=60010111){
8461
- strcpy(blz,"60010111");
8462
- *bicp="ESSEDE5F600";
8463
- return OK_BLZ_KTO_REPLACED;
8464
- }
8465
- else
8466
- return OK_KTO_REPLACED;
8467
- }
8468
- }
8469
8436
 
8470
8437
  /* f�r die folgenden BLZs sind nur zehnstelllige Kontonummern erlaubt: */
8471
- if(pz_aenderungen_aktivieren_2017_12 && b==51410111)return INVALID_BLZ; /* die BLZ wird ab Dezember 2017 ung�ltig */
8472
- switch(b){
8473
- case 10010111:
8474
- case 13010111:
8475
- case 16010111:
8476
- case 20010111:
8477
- case 21010111:
8478
- case 21210111:
8479
- case 23010111:
8480
- case 25010111:
8481
- case 25410111:
8482
- case 25910111:
8483
- case 26010111:
8484
- case 26510111:
8485
- case 27010111:
8486
- case 28010111:
8487
- case 29010111:
8488
- case 29210111:
8489
- case 30010111:
8490
- case 31010111:
8491
- case 33010111:
8492
- case 35010111:
8493
- case 35211012:
8494
- case 36010111:
8495
- case 36210111:
8496
- case 37010111:
8497
- case 38010111:
8498
- case 39010111:
8499
- case 40010111:
8500
- case 41010111:
8501
- case 42010111:
8502
- case 42610112:
8503
- case 43010111:
8504
- case 44010111:
8505
- case 46010111:
8506
- case 48010111:
8507
- case 50010111:
8508
- case 50510111:
8509
- case 51010111:
8510
- case 51310111:
8511
- case 51410111: /* wird ab Dezember 2017 ung�ltig */
8512
- case 52010111:
8513
- case 54210111:
8514
- case 55010111:
8515
- case 57010111:
8516
- case 58510111:
8517
- case 59010111:
8518
- case 60010111:
8519
- case 63010111:
8520
- case 65310111:
8521
- case 66010111:
8522
- case 66610111:
8523
- case 67010111:
8524
- case 67210111:
8525
- case 68010111:
8526
- case 68310111:
8527
- case 69010111:
8528
- case 70010111:
8529
- case 72010111:
8530
- case 75010111:
8531
- case 76010111:
8532
- case 79010111:
8533
- case 79510111:
8534
- case 81010111:
8535
- case 82010111:
8536
- case 86010111:
8537
- if(k1<10)return INVALID_KTO;
8538
- default:
8539
- break;
8540
- }
8438
+ if(pz_aenderungen_aktivieren_2018_09)
8439
+ /* die Liste wurde zum September 2018 kr�ftig gek�rzt */
8440
+ switch(b){
8441
+ case 10010111:
8442
+ case 13010111:
8443
+ case 20010111:
8444
+ case 21010111:
8445
+ case 23010111:
8446
+ case 25010111:
8447
+ case 27010111:
8448
+ case 30010111:
8449
+ case 36010111:
8450
+ case 37010111:
8451
+ case 38010111:
8452
+ case 39010111:
8453
+ case 44010111:
8454
+ case 50010111:
8455
+ case 50510111:
8456
+ case 51010111:
8457
+ case 51310111:
8458
+ case 55010111:
8459
+ case 60010111:
8460
+ case 70010111:
8461
+ case 76010111:
8462
+ case 86010111:
8463
+ if(k1<10)return INVALID_KTO;
8464
+ default:
8465
+ break;
8466
+ }
8467
+ else
8468
+ switch(b){
8469
+ case 10010111:
8470
+ case 13010111:
8471
+ case 16010111:
8472
+ case 20010111:
8473
+ case 21010111:
8474
+ case 21210111:
8475
+ case 23010111:
8476
+ case 25010111:
8477
+ case 25410111:
8478
+ case 25910111:
8479
+ case 26010111:
8480
+ case 26510111:
8481
+ case 27010111:
8482
+ case 28010111:
8483
+ case 29010111:
8484
+ case 29210111:
8485
+ case 30010111:
8486
+ case 31010111:
8487
+ case 33010111:
8488
+ case 35010111:
8489
+ case 35211012:
8490
+ case 36010111:
8491
+ case 36210111:
8492
+ case 37010111:
8493
+ case 38010111:
8494
+ case 39010111:
8495
+ case 40010111:
8496
+ case 41010111:
8497
+ case 42010111:
8498
+ case 42610112:
8499
+ case 43010111:
8500
+ case 44010111:
8501
+ case 46010111:
8502
+ case 48010111:
8503
+ case 50010111:
8504
+ case 50510111:
8505
+ case 51010111:
8506
+ case 51310111:
8507
+ case 52010111:
8508
+ case 54210111:
8509
+ case 55010111:
8510
+ case 57010111:
8511
+ case 58510111:
8512
+ case 59010111:
8513
+ case 60010111:
8514
+ case 63010111:
8515
+ case 65310111:
8516
+ case 66010111:
8517
+ case 66610111:
8518
+ case 67010111:
8519
+ case 67210111:
8520
+ case 68010111:
8521
+ case 68310111:
8522
+ case 69010111:
8523
+ case 70010111:
8524
+ case 72010111:
8525
+ case 75010111:
8526
+ case 76010111:
8527
+ case 79010111:
8528
+ case 79510111:
8529
+ case 81010111:
8530
+ case 82010111:
8531
+ case 86010111:
8532
+ if(k1<10)return INVALID_KTO;
8533
+ default:
8534
+ break;
8535
+ }
8541
8536
  RETURN_OK;
8542
8537
 
8543
8538
  /* Iban-Regel 0057.00 +���3 */
@@ -8557,7 +8552,7 @@ static int iban_regel_cvt(char *blz,char *kto,const char **bicp,int regel_versio
8557
8552
  }
8558
8553
  }
8559
8554
 
8560
- #line 9120 "ruby/ext/konto_check_raw/konto_check.lxx"
8555
+ #line 9115 "konto_check.lxx"
8561
8556
  /* Funktion lut_multiple() +���2 */
8562
8557
  /* ###########################################################################
8563
8558
  * # lut_multiple(): Universalfunktion, um zu einer gegebenen Bankleitzahl #
@@ -8825,7 +8820,7 @@ DLL_EXPORT int lut_cleanup(void)
8825
8820
  FREE(sort_pz_f);
8826
8821
  FREE(sort_plz);
8827
8822
  FREE(sort_iban_regel);
8828
- #line 9382 "ruby/ext/konto_check_raw/konto_check.lxx"
8823
+ #line 9377 "konto_check.lxx"
8829
8824
  if(name_raw && name_data!=name_raw)
8830
8825
  FREE(name_raw);
8831
8826
  else
@@ -8885,6 +8880,14 @@ DLL_EXPORT int lut_cleanup(void)
8885
8880
  free(handle_ptr);
8886
8881
  }
8887
8882
 
8883
+ FREE(scl_info_block);
8884
+ FREE(scl_bic_array);
8885
+ FREE(scl_bic_block);
8886
+ FREE(scl_name_array);
8887
+ FREE(scl_name_block);
8888
+ FREE(scl_flags_array);
8889
+ FREE(scl_flags_block);
8890
+
8888
8891
  if(init_status&8){
8889
8892
 
8890
8893
  /* bei init_status&8 ist wohl eine Initialisierung dazwischengekommen (sollte
@@ -8894,7 +8897,7 @@ DLL_EXPORT int lut_cleanup(void)
8894
8897
  lut_cleanup(); /* neuer Versuch, aufzur�umen */
8895
8898
  RETURN(INIT_FATAL_ERROR);
8896
8899
  }
8897
- #line 9456 "ruby/ext/konto_check_raw/konto_check.lxx"
8900
+ #line 9459 "konto_check.lxx"
8898
8901
  init_status&=1;
8899
8902
  init_in_progress=0;
8900
8903
  return OK;
@@ -9067,8 +9070,8 @@ static void init_atoi_table(void)
9067
9070
  int i,ziffer;
9068
9071
  unsigned long l;
9069
9072
 
9070
- /* �nderungen zum 04.12.2017 aktivieren */
9071
- if(time(NULL)>1512342000 ||0)pz_aenderungen_aktivieren_2017_12=1;
9073
+ /* �nderungen zum 02.09.2018 aktivieren */
9074
+ if(time(NULL)>1535839200 ||0)pz_aenderungen_aktivieren_2018_09=1;
9072
9075
 
9073
9076
  /* ung�ltige Ziffern; Blanks und Tabs werden ebenfalls als ung�ltig
9074
9077
  * angesehen(!), da die Stellenzuordnung sonst nicht mehr stimmt. Ausnahme:
@@ -9194,6 +9197,14 @@ static void init_atoi_table(void)
9194
9197
  lut2_feld_namen[LUT2_2_IBAN_REGEL_SORT]="LUT2_2_IBAN_REGEL_SORT";
9195
9198
  lut2_feld_namen[LUT2_BIC_H_SORT]="LUT2_BIC_H_SORT";
9196
9199
  lut2_feld_namen[LUT2_2_BIC_H_SORT]="LUT2_2_BIC_H_SORT";
9200
+ lut2_feld_namen[LUT2_SCL_INFO]="LUT2_SCL_INFO";
9201
+ lut2_feld_namen[LUT2_2_SCL_INFO]="LUT2_2_SCL_INFO";
9202
+ lut2_feld_namen[LUT2_SCL_BIC]="LUT2_SCL_BIC";
9203
+ lut2_feld_namen[LUT2_2_SCL_BIC]="LUT2_2_SCL_BIC";
9204
+ lut2_feld_namen[LUT2_SCL_NAME]="LUT2_SCL_NAME";
9205
+ lut2_feld_namen[LUT2_2_SCL_NAME]="LUT2_2_SCL_NAME";
9206
+ lut2_feld_namen[LUT2_SCL_FLAGS]="LUT2_SCL_FLAGS";
9207
+ lut2_feld_namen[LUT2_2_SCL_FLAGS]="LUT2_2_SCL_FLAGS";
9197
9208
 
9198
9209
  lut_block_idx[1]=0;
9199
9210
  lut_block_idx[2]=0;
@@ -9222,6 +9233,10 @@ static void init_atoi_table(void)
9222
9233
  lut_block_idx[25]=0;
9223
9234
  lut_block_idx[26]=0;
9224
9235
  lut_block_idx[27]=0;
9236
+ lut_block_idx[28]=-1;
9237
+ lut_block_idx[29]=-1;
9238
+ lut_block_idx[30]=-1;
9239
+ lut_block_idx[31]=-1;
9225
9240
 
9226
9241
  lut_block_name1[1]="BLZ";
9227
9242
  lut_block_name1[2]="FILIALEN";
@@ -9250,6 +9265,10 @@ static void init_atoi_table(void)
9250
9265
  lut_block_name1[25]="IBAN_REGEL";
9251
9266
  lut_block_name1[26]="IBAN_REGEL_SORT";
9252
9267
  lut_block_name1[27]="BIC_H_SORT";
9268
+ lut_block_name1[28]="SCL_INFO";
9269
+ lut_block_name1[29]="SCL_BIC";
9270
+ lut_block_name1[30]="SCL_NAME";
9271
+ lut_block_name1[31]="SCL_FLAGS";
9253
9272
  lut_block_name1[101]="BLZ (2)";
9254
9273
  lut_block_name1[102]="FILIALEN (2)";
9255
9274
  lut_block_name1[103]="NAME (2)";
@@ -9277,6 +9296,10 @@ static void init_atoi_table(void)
9277
9296
  lut_block_name1[125]="IBAN_REGEL (2)";
9278
9297
  lut_block_name1[126]="IBAN_REGEL_SORT (2)";
9279
9298
  lut_block_name1[127]="BIC_H_SORT (2)";
9299
+ lut_block_name1[128]="SCL_INFO (2)";
9300
+ lut_block_name1[129]="SCL_BIC (2)";
9301
+ lut_block_name1[130]="SCL_NAME (2)";
9302
+ lut_block_name1[131]="SCL_FLAGS (2)";
9280
9303
 
9281
9304
  lut_block_name2[1]="1. BLZ";
9282
9305
  lut_block_name2[2]="1. Anzahl Fil.";
@@ -9305,6 +9328,10 @@ static void init_atoi_table(void)
9305
9328
  lut_block_name2[25]="1. IBAN Regel";
9306
9329
  lut_block_name2[26]="1. IBAN Regel idx";
9307
9330
  lut_block_name2[27]="1. BIC Hauptst.idx";
9331
+ lut_block_name2[28]="1. SCL Infoblock";
9332
+ lut_block_name2[29]="1. SCL BIC";
9333
+ lut_block_name2[30]="1. SCL Banknamen";
9334
+ lut_block_name2[31]="1. SCL Flags";
9308
9335
  lut_block_name2[101]="2. BLZ";
9309
9336
  lut_block_name2[102]="2. Anzahl Fil.";
9310
9337
  lut_block_name2[103]="2. Name";
@@ -9332,8 +9359,12 @@ static void init_atoi_table(void)
9332
9359
  lut_block_name2[125]="2. IBAN Regel";
9333
9360
  lut_block_name2[126]="2. IBAN Regel idx";
9334
9361
  lut_block_name2[127]="2. BIC Hauptst.idx";
9335
- lut_blocklen_max=453;
9336
- #line 9696 "ruby/ext/konto_check_raw/konto_check.lxx"
9362
+ lut_block_name2[128]="2. SCL Infoblock";
9363
+ lut_block_name2[129]="2. SCL BIC";
9364
+ lut_block_name2[130]="2. SCL Banknamen";
9365
+ lut_block_name2[131]="2. SCL Flags";
9366
+ lut_blocklen_max=521;
9367
+ #line 9699 "konto_check.lxx"
9337
9368
  init_status|=1;
9338
9369
  }
9339
9370
 
@@ -9393,7 +9424,7 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
9393
9424
 
9394
9425
  switch(pz_methode){
9395
9426
 
9396
- #line 9759 "ruby/ext/konto_check_raw/konto_check.lxx"
9427
+ #line 9762 "konto_check.lxx"
9397
9428
  /* Berechnungsmethoden 00 bis 09 +���3
9398
9429
  Berechnung nach der Methode 00 +���4 */
9399
9430
  /*
@@ -11728,7 +11759,7 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
11728
11759
  * ######################################################################
11729
11760
  */
11730
11761
 
11731
- #line 11770 "ruby/ext/konto_check_raw/konto_check.lxx"
11762
+ #line 11773 "konto_check.lxx"
11732
11763
  case 51:
11733
11764
  if(*(kto+2)=='9'){ /* Ausnahme */
11734
11765
 
@@ -11990,8 +12021,8 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
11990
12021
  else
11991
12022
  return FALSE;
11992
12023
 
11993
- #line 11984 "ruby/ext/konto_check_raw/konto_check.lxx"
11994
- #line 11986 "ruby/ext/konto_check_raw/konto_check.lxx"
12024
+ #line 11987 "konto_check.lxx"
12025
+ #line 11989 "konto_check.lxx"
11995
12026
  /* Berechnung nach der Methode 53 +���4 */
11996
12027
  /*
11997
12028
  * ######################################################################
@@ -12290,7 +12321,7 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
12290
12321
  * # bewerten. #
12291
12322
  * ######################################################################
12292
12323
  */
12293
- #line 12255 "ruby/ext/konto_check_raw/konto_check.lxx"
12324
+ #line 12258 "konto_check.lxx"
12294
12325
  case 57:
12295
12326
  #if DEBUG>0
12296
12327
  if(retvals){
@@ -12936,7 +12967,7 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
12936
12967
  * # Pr�fzifferberechnung) #
12937
12968
  * ######################################################################
12938
12969
  */
12939
- #line 12835 "ruby/ext/konto_check_raw/konto_check.lxx"
12970
+ #line 12838 "konto_check.lxx"
12940
12971
  case 66:
12941
12972
  #if DEBUG>0
12942
12973
  case 2066:
@@ -20347,7 +20378,7 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
20347
20378
  return NOT_IMPLEMENTED;
20348
20379
  }
20349
20380
  }
20350
- #line 19049 "ruby/ext/konto_check_raw/konto_check.lxx"
20381
+ #line 19052 "konto_check.lxx"
20351
20382
 
20352
20383
  /*
20353
20384
  * ######################################################################
@@ -20445,7 +20476,7 @@ DLL_EXPORT int kto_check_blz(char *blz,char *kto)
20445
20476
  #if DEBUG>0 /* es werden einige Funktionen benutzt, die nur in der Debug-Variante enthalten sind */
20446
20477
  DLL_EXPORT int kto_check_regel_dbg(char *blz,char *kto,char *blz2,char *kto2,const char **bic,int *regel,RETVAL *retvals)
20447
20478
  {
20448
- #line 19147 "ruby/ext/konto_check_raw/konto_check.lxx"
20479
+ #line 19150 "konto_check.lxx"
20449
20480
  char *blz_o,buffer[32],kto_o[16],*blz_n,*kto_n,*ptr,*dptr;
20450
20481
  const char *bicp;
20451
20482
  int ret,ret_regel,r,i;
@@ -20494,7 +20525,7 @@ DLL_EXPORT int kto_check_regel_dbg(char *blz,char *kto,char *blz2,char *kto2,con
20494
20525
  }
20495
20526
  else /* BLZ und Kto gleich */
20496
20527
  return ret;
20497
- #line 19196 "ruby/ext/konto_check_raw/konto_check.lxx"
20528
+ #line 19199 "konto_check.lxx"
20498
20529
  }
20499
20530
 
20500
20531
  #else /* !DEBUG */
@@ -20645,7 +20676,7 @@ DLL_EXPORT int kto_check_blz_dbg(char *blz,char *kto,RETVAL *retvals)
20645
20676
  * # Copyright (C) 2007 Michael Plugge <m.plugge@hs-mannheim.de> #
20646
20677
  * ###########################################################################
20647
20678
  */
20648
- #line 19347 "ruby/ext/konto_check_raw/konto_check.lxx"
20679
+ #line 19350 "konto_check.lxx"
20649
20680
  DLL_EXPORT int kto_check_pz_dbg(char *pz,char *kto,char *blz,RETVAL *retvals)
20650
20681
  {
20651
20682
  int untermethode,pz_methode;
@@ -20881,7 +20912,7 @@ DLL_EXPORT int get_lut_info2_b(char *lutname,int *version,char **prolog_p,char *
20881
20912
  }
20882
20913
  else
20883
20914
  **user_info_p=0;
20884
- #line 19568 "ruby/ext/konto_check_raw/konto_check.lxx"
20915
+ #line 19571 "konto_check.lxx"
20885
20916
  FREE(prolog);
20886
20917
  return OK;
20887
20918
  }
@@ -21016,20 +21047,20 @@ DLL_EXPORT const char *get_kto_check_version_x(int mode)
21016
21047
  case 3:
21017
21048
  return __DATE__ ", " __TIME__; /* Compilierdatum und -zeit */
21018
21049
  case 4: /* Datum der Pr�fziffermethode */
21019
- if(pz_aenderungen_aktivieren_2017_12)
21020
- return "04.12.2017";
21050
+ if(pz_aenderungen_aktivieren_2018_09)
21051
+ return "02.09.2018";
21021
21052
  else
21022
- return "04.09.2017 (Aenderungen vom 04.12.2017 enthalten aber noch nicht aktiviert)";
21053
+ return "04.06.2018 (Aenderungen vom 02.09.2018 enthalten aber noch nicht aktiviert)";
21023
21054
  case 5:
21024
- return "04.12.2017";
21055
+ return "02.09.2018";
21025
21056
  case 6:
21026
- return "26. November 2017"; /* Klartext-Datum der Bibliotheksversion */
21057
+ return "1. September 2018"; /* Klartext-Datum der Bibliotheksversion */
21027
21058
  case 7:
21028
21059
  return "final"; /* Versions-Typ der Bibliotheksversion (development, beta, final) */
21029
21060
  case 8:
21030
21061
  return "6"; /* Hauptversionszahl */
21031
21062
  case 9:
21032
- return "02"; /* Unterversionszahl */
21063
+ return "05"; /* Unterversionszahl */
21033
21064
  }
21034
21065
  }
21035
21066
 
@@ -21175,7 +21206,7 @@ DLL_EXPORT int dump_lutfile(char *outputname,UINT4 *required)
21175
21206
  default:
21176
21207
  break;
21177
21208
  }
21178
- #line 19801 "ruby/ext/konto_check_raw/konto_check.lxx"
21209
+ #line 19804 "konto_check.lxx"
21179
21210
  fputc('\n',out);
21180
21211
  while(--i)fputc('=',out);
21181
21212
  fputc('\n',out);
@@ -21500,7 +21531,7 @@ DLL_EXPORT const char *iban2bic_id(char *iban,int *retval,int *blz,int *kto)
21500
21531
  return iban2bic(iban,retval,b,k);
21501
21532
  }
21502
21533
 
21503
- #line 20126 "ruby/ext/konto_check_raw/konto_check.lxx"
21534
+ #line 20129 "konto_check.lxx"
21504
21535
  /* Funktion iban_gen(), iban_bic_gen() und iban_bic_gen1 +���1 */
21505
21536
  /* ###########################################################################
21506
21537
  * # Die Funktion iban_gen generiert aus Bankleitzahl und Kontonummer eine #
@@ -22333,7 +22364,7 @@ DLL_EXPORT int ipi_check(char *zweck)
22333
22364
  * # Copyright (C) 2009,2011 Michael Plugge <m.plugge@hs-mannheim.de> #
22334
22365
  * ###########################################################################
22335
22366
  */
22336
- #line 20959 "ruby/ext/konto_check_raw/konto_check.lxx"
22367
+ #line 20962 "konto_check.lxx"
22337
22368
 
22338
22369
  /* Funktion volltext_zeichen() +���2 */
22339
22370
  /* Diese Funktion gibt f�r Zeichen die bei der Volltextsuche g�ltig sind
@@ -23180,7 +23211,7 @@ static int qcmp_bic_h(const void *ap,const void *bp)
23180
23211
  return a-b;
23181
23212
  }
23182
23213
 
23183
- #line 21806 "ruby/ext/konto_check_raw/konto_check.lxx"
23214
+ #line 21809 "konto_check.lxx"
23184
23215
 
23185
23216
  /* Funktion qcmp_bic() +���3 */
23186
23217
  static int qcmp_bic(const void *ap,const void *bp)
@@ -23285,7 +23316,7 @@ static int qcmp_iban_regel(const void *ap,const void *bp)
23285
23316
  else
23286
23317
  return a-b;
23287
23318
  }
23288
- #line 21821 "ruby/ext/konto_check_raw/konto_check.lxx"
23319
+ #line 21824 "konto_check.lxx"
23289
23320
 
23290
23321
  /* Funktion init_blzf() +���2
23291
23322
  * Diese Funktion initialisiert das Array mit den Bankleitzahlen f�r alle
@@ -23353,7 +23384,7 @@ DLL_EXPORT int konto_check_idx2blz(int idx,int *zweigstelle,int *retval)
23353
23384
  }
23354
23385
 
23355
23386
  /* Funktion suche_int1() +���2 */
23356
- #line 21889 "ruby/ext/konto_check_raw/konto_check.lxx"
23387
+ #line 21892 "konto_check.lxx"
23357
23388
  static int suche_int1(int a1,int a2,int *anzahl,int **start_idx,int **zweigstellen_base,int **blz_base,
23358
23389
  int **base_name,int **base_sort,int(*cmp)(const void *, const void *),int cnt,int such_idx)
23359
23390
  {
@@ -23404,7 +23435,7 @@ static int suche_int1(int a1,int a2,int *anzahl,int **start_idx,int **zweigstell
23404
23435
  }
23405
23436
 
23406
23437
  /* Funktion suche_int2() +���2 */
23407
- #line 21940 "ruby/ext/konto_check_raw/konto_check.lxx"
23438
+ #line 21943 "konto_check.lxx"
23408
23439
  static int suche_int2(int a1,int a2,int *anzahl,int **start_idx,int **zweigstellen_base,int **blz_base,
23409
23440
  int **base_name,int **base_sort,int(*cmp)(const void *, const void *),int such_idx,int pz_suche)
23410
23441
  {
@@ -24019,7 +24050,7 @@ static int cmp_suche_sort(const void *ap,const void *bp)
24019
24050
  DLL_EXPORT int lut_suche_sort1(int anzahl,int *blz_base,int *zweigstellen_base,int *idx,int *anzahl_o,int **idx_op,int **cnt_op,int uniq)
24020
24051
  {
24021
24052
  int i,j,last_idx,*idx_a,*cnt_o;
24022
- #line 22556 "ruby/ext/konto_check_raw/konto_check.lxx"
24053
+ #line 22559 "konto_check.lxx"
24023
24054
 
24024
24055
  if(idx_op)*idx_op=NULL;
24025
24056
  if(cnt_op)*cnt_op=NULL;
@@ -24101,7 +24132,7 @@ DLL_EXPORT int lut_suche_sort2(int anzahl,int *blz,int *zweigstellen,int *anzahl
24101
24132
  return OK;
24102
24133
  }
24103
24134
 
24104
- #line 22639 "ruby/ext/konto_check_raw/konto_check.lxx"
24135
+ #line 22642 "konto_check.lxx"
24105
24136
  /* Funktion lut_suche_volltext() +���2 */
24106
24137
  DLL_EXPORT int lut_suche_volltext(char *such_wort,int *anzahl,int *base_name_idx,char ***base_name,
24107
24138
  int *zweigstellen_anzahl,int **start_idx,int **zweigstellen_base,int **blz_base)
@@ -24231,7 +24262,7 @@ DLL_EXPORT int lut_suche_blz(int such1,int such2,int *anzahl,int **start_idx,int
24231
24262
  return suche_int1(such1,such2,anzahl,start_idx,zweigstellen_base,blz_base,&blz_f,&sort_blz,qcmp_blz,cnt,0);
24232
24263
  }
24233
24264
 
24234
- #line 22789 "ruby/ext/konto_check_raw/konto_check.lxx"
24265
+ #line 22792 "konto_check.lxx"
24235
24266
  /* Funktion lut_suche_bic() +���2 */
24236
24267
  DLL_EXPORT int lut_suche_bic(char *such_name,int *anzahl,int **start_idx,int **zweigstellen_base,
24237
24268
  char ***base_name,int **blz_base)
@@ -24322,7 +24353,7 @@ DLL_EXPORT int lut_suche_regel(int such1,int such2,int *anzahl,int **start_idx,i
24322
24353
  return suche_int2(such1*100,such2*100+99,anzahl,start_idx,zweigstellen_base,blz_base,&iban_regel,&sort_iban_regel,qcmp_iban_regel,LUT2_IBAN_REGEL_SORT,0);
24323
24354
  }
24324
24355
 
24325
- #line 22822 "ruby/ext/konto_check_raw/konto_check.lxx"
24356
+ #line 22825 "konto_check.lxx"
24326
24357
 
24327
24358
  /* Funktion lut_suche_bic_h() +���2 */
24328
24359
  DLL_EXPORT int lut_suche_bic_h(char *such_name,int *anzahl,int **start_idx,int **zweigstellen_base,
@@ -24708,7 +24739,7 @@ DLL_EXPORT const char *iban_ort(char *iban,int filiale,int*retval)
24708
24739
  {
24709
24740
  return iban_fkt_s(iban,filiale,retval,lut_ort);
24710
24741
  }
24711
- #line 22911 "ruby/ext/konto_check_raw/konto_check.lxx"
24742
+ #line 22914 "konto_check.lxx"
24712
24743
 
24713
24744
  static int bic_fkt_c(char *bic1,int mode,int filiale,int *retval,char *base,int error)
24714
24745
  {
@@ -25997,7 +26028,7 @@ DLL_EXPORT const char *pz2str(int pz,int *ret)
25997
26028
  default: return "???";
25998
26029
  }
25999
26030
  }
26000
- #line 23866 "ruby/ext/konto_check_raw/konto_check.lxx"
26031
+ #line 23869 "konto_check.lxx"
26001
26032
 
26002
26033
  /* Funktion lut_keine_iban_berechnung() +���1 */
26003
26034
  /*
@@ -26112,7 +26143,7 @@ DLL_EXPORT int lut_keine_iban_berechnung(char *iban_blacklist,char *lutfile,int
26112
26143
  /* Funktion pz_aenderungen_enable() +���1 */
26113
26144
  /* ###########################################################################
26114
26145
  * # Die Funktion pz_aenderungen_enable() dient dazu, den Status des Flags #
26115
- * # pz_aenderungen_aktivieren_2017_12 abzufragen bzw. zu setzen. Falls die Variable #
26146
+ * # pz_aenderungen_aktivieren_2018_09 abzufragen bzw. zu setzen. Falls die Variable #
26116
26147
  * # set 1 ist, werden die �nderungen aktiviert, falls sie 0 ist, werden #
26117
26148
  * # die �nderungen deaktiviert. Bei allen anderen Werten wird das aktuelle #
26118
26149
  * # Flag nicht ver�ndert, sondern nur der Status zur�ckgegeben. #
@@ -26128,8 +26159,8 @@ DLL_EXPORT int lut_keine_iban_berechnung(char *iban_blacklist,char *lutfile,int
26128
26159
 
26129
26160
  DLL_EXPORT int pz_aenderungen_enable(int set)
26130
26161
  {
26131
- if(set==0 || set==1)pz_aenderungen_aktivieren_2017_12=set;
26132
- return pz_aenderungen_aktivieren_2017_12;
26162
+ if(set==0 || set==1)pz_aenderungen_aktivieren_2018_09=set;
26163
+ return pz_aenderungen_aktivieren_2018_09;
26133
26164
  }
26134
26165
 
26135
26166
  #if DEBUG>0
@@ -26161,7 +26192,7 @@ DLL_EXPORT char *kto_check_test_vars(char *txt,UINT4 i)
26161
26192
  #endif
26162
26193
 
26163
26194
 
26164
- #line 24030 "ruby/ext/konto_check_raw/konto_check.lxx"
26195
+ #line 24033 "konto_check.lxx"
26165
26196
  /* Funktionen *_id() +���1 */
26166
26197
  /* ###########################################################################
26167
26198
  * # Die folgenden Funktionen sind die id-Varianten von Funktionen, die #
@@ -26418,6 +26449,741 @@ DLL_EXPORT int kc_id_free(int handle)
26418
26449
  return INVALID_HANDLE;
26419
26450
  }
26420
26451
 
26452
+ /* Funktionen f�r den Zugriff auf das SCL-Verzeichnis +���1 */
26453
+ /* Hilfsfunktion f�r die SCL-Routinen +���2 */
26454
+ /* Funktion cmp_bic() +���3 */
26455
+ /* ###########################################################################
26456
+ * # cmp_bic() ist die Vergleichsfunktion f�r bic_binsearch() und #
26457
+ * # lut_write_scl_blocks() (zum Sortieren der BICs). #
26458
+ * # #
26459
+ * # Copyright (C) 2018 Michael Plugge <m.plugge@hs-mannheim.de> #
26460
+ * ###########################################################################
26461
+ */
26462
+ static int cmp_bic(const void *ap,const void *bp)
26463
+ {
26464
+ int a,b,r;
26465
+
26466
+ a=*((int *)ap);
26467
+ b=*((int *)bp);
26468
+ if((r=strcmp(scl_bic_array[a],scl_bic_array[b])))
26469
+ return r;
26470
+ else
26471
+ return a-b;
26472
+ }
26473
+
26474
+ /* Funktion bic_binsearch() +���3 */
26475
+ /* ###########################################################################
26476
+ * # Die Funktion bic_binsearch() implementiert eine bin�re Suche im #
26477
+ * # BIC-Array (rekursiv) #
26478
+ * # #
26479
+ * # Copyright (C) 2018 Michael Plugge <m.plugge@hs-mannheim.de> #
26480
+ * ###########################################################################
26481
+ */
26482
+ static int bic_binsearch(int links,int rechts,char *bic)
26483
+ {
26484
+ int cmp,mitte;
26485
+
26486
+ if(links>rechts)return -1; /* nicht gefunden */
26487
+ mitte=(rechts+links)/2;
26488
+ if(!(cmp=strcmp(scl_bic_array[mitte],bic)))return mitte; /* Element gefunden */
26489
+ if(cmp>0)
26490
+ return bic_binsearch(links,mitte-1,bic);
26491
+ else
26492
+ return bic_binsearch(mitte+1,rechts,bic);
26493
+ }
26494
+
26495
+ /* Funktion scl_idx() +���3 */
26496
+ /* ###########################################################################
26497
+ * # Die Funktion scl_idx sucht den Index zu einem BIC innerhalb der SCL- #
26498
+ * # Arrays. Der BIC wird zun�chst so gesucht wie er angegeben ist. #
26499
+ * # Falls diese Suche erfolglos ist, wird getestet, ob im BIC-Verzeichnis #
26500
+ * # ein BIC mit �bereinstimmung in den ersten 8 Stellen und XXX in den drei #
26501
+ * # letzten Stellen existiert (Extension BIC); falls dieser auch nicht #
26502
+ * # existiert, wird als Letztes ein 8-stelliger BIC gesucht (Wildcard-BIC). #
26503
+ * # #
26504
+ * # Copyright (C) 2018 Michael Plugge <m.plugge@hs-mannheim.de> #
26505
+ * ###########################################################################
26506
+ */
26507
+ static int scl_idx(const char *bic,int *retval)
26508
+ {
26509
+ char such_bic[12];
26510
+ int i,idx;
26511
+
26512
+ if(!scl_cnt || !scl_bic_array){
26513
+ if(retval)*retval=NO_SCL_BLOCKS_LOADED;
26514
+ return -1;
26515
+ }
26516
+ strcpy(such_bic,bic);
26517
+ for(i=0;i<11 && such_bic[i];i++)such_bic[i]=toupper(such_bic[i]);
26518
+
26519
+ /* zun�chst den BIC suchen wie angegeben */
26520
+ idx=bic_binsearch(0,scl_cnt,such_bic);
26521
+ if(idx>=0){
26522
+ if(retval)*retval=OK;
26523
+ return idx;
26524
+ }
26525
+ else{
26526
+ if(such_bic[8]==0){ /* Such-BIC 8-stellig angegeben; BIC mit XXX extension testen */
26527
+ such_bic[8]=such_bic[9]=such_bic[10]='X';
26528
+ such_bic[11]=0;
26529
+ idx=bic_binsearch(0,scl_cnt,such_bic);
26530
+ if(idx>=0){
26531
+ if(retval)*retval=OK_SCL_EXTENSION_BIC_USED;
26532
+ return idx;
26533
+ }
26534
+ else{
26535
+ if(retval)*retval=SCL_BIC_NOT_FOUND;
26536
+ return -1;
26537
+ }
26538
+ }
26539
+ else{
26540
+ /* Wildcard-BIC suchen */
26541
+ such_bic[8]=0;
26542
+ idx=bic_binsearch(0,scl_cnt,such_bic);
26543
+ if(idx>=0){
26544
+ if(retval)*retval=OK_SCL_WILDCARD_BIC_USED;
26545
+ return idx;
26546
+ }
26547
+ else{
26548
+ if(retval)*retval=SCL_BIC_NOT_FOUND;
26549
+ return -1;
26550
+ }
26551
+ }
26552
+ }
26553
+ }
26554
+
26555
+ /* Externe Schnittstelle f�r die SCL-Routinen +���2 */
26556
+ /* Funktion lut_write_scl_blocks() +���3 */
26557
+ /* ###########################################################################
26558
+ * # Die Funktion lut_write_scl_blocks() liest ein SCL-Verzeichnis ein und #
26559
+ * # schreibt die Daten in die angegebene LUT-Datei. #
26560
+ * # #
26561
+ * # Beschreibung und weitere Infos: #
26562
+ * # https://www.bundesbank.de/Redaktion/DE/Standardartikel/Aufgaben/Unbarer_Zahlungsverkehr/emz_scl_directory_fuer_den_sepa_clearer.html #
26563
+ * # #
26564
+ * # direkter Download-Link: #
26565
+ * # https://www.bundesbank.de/Redaktion/DE/Downloads/Aufgaben/Unbarer_Zahlungsverkehr/SEPA/verzeichnis_der_erreichbaren_zahlungsdienstleister.csv?__blob=publicationFile
26566
+ * # #
26567
+ * # Copyright (C) 2018 Michael Plugge <m.plugge@hs-mannheim.de> #
26568
+ * ###########################################################################
26569
+ */
26570
+ DLL_EXPORT int lut_write_scl_blocks(char *inputfile,char *lutfile)
26571
+ {
26572
+ char c,*ptr,buffer[512],*scl_name_block_s,*scl_bic_block_s,*scl_flags_block_s,*ptr1,*ptr2,*ptr3;
26573
+ char scl_gueltigkeit[16],scl_gueltigkeit_iso[16];
26574
+ int cnt,i,rv,j,*iptr,jahr,monat,tag;
26575
+ FILE *in,*lut;
26576
+ struct stat stat_buffer;
26577
+ struct tm z;
26578
+ time_t ts;
26579
+
26580
+ if(!(in=fopen(inputfile,"r")))RETURN(FILE_READ_ERROR);
26581
+ fgets(buffer,512,in);
26582
+ if(strncmp(buffer,"Gueltig ab / valid from ",24))return SCL_INPUT_FORMAT_ERROR;
26583
+ for(ptr=buffer;!isdigit(*ptr);ptr++);
26584
+ strncpy(scl_gueltigkeit,ptr,16);
26585
+ scl_gueltigkeit[10]=0;
26586
+ jahr=atoi(scl_gueltigkeit+6);
26587
+ monat=(scl_gueltigkeit[3]-'0')*10+scl_gueltigkeit[4]-'0';
26588
+ tag=(scl_gueltigkeit[0]-'0')*10+scl_gueltigkeit[1]-'0';
26589
+ z.tm_sec=z.tm_min=0;
26590
+ z.tm_hour=6; /* Die SCL-Datei wird um 6 Uhr morgens ver�ffentlicht */
26591
+ z.tm_mday=tag;
26592
+ z.tm_mon=monat;
26593
+ z.tm_year=jahr-1900;
26594
+ ts=mktime(&z);
26595
+ snprintf(scl_gueltigkeit_iso,16,"%4d-%02d-%02d",jahr,monat,tag);
26596
+ fgets(buffer,512,in);
26597
+ if(strncmp(buffer,"BIC;Name;Service SCT;Service SDD;Service COR1;Service B2B;Service SCC",69))RETURN(SCL_INPUT_FORMAT_ERROR);
26598
+
26599
+ stat(inputfile,&stat_buffer);
26600
+ cnt=stat_buffer.st_size/163+100; /* etwas gro�z�gig die Anzahl rechnen */
26601
+
26602
+ scl_bic_array=calloc(sizeof(char*),cnt);
26603
+ scl_name_array=calloc(sizeof(char*),cnt);
26604
+ scl_flags_array=calloc(sizeof(char*),cnt);
26605
+
26606
+ scl_bic_block=ptr1=calloc(12,cnt);
26607
+ scl_name_block=ptr2=calloc(150,cnt);
26608
+ scl_flags_block=ptr3=calloc(6,cnt);
26609
+
26610
+ /* SCL-Datei einlesen */
26611
+ for(cnt=0;fgets(buffer,512,in);){
26612
+ scl_bic_array[cnt]=ptr1;
26613
+ scl_name_array[cnt]=ptr2;
26614
+ scl_flags_array[cnt]=ptr3;
26615
+ cnt++;
26616
+ for(ptr=buffer;*ptr!=';' && !isspace(*ptr);*ptr1++=*ptr++);
26617
+ c=*ptr;
26618
+ *ptr1++=0; /* bei Leerzeichen am Ende dieses l�schen */
26619
+ *ptr++=0;
26620
+
26621
+ if(c==' ')while(*ptr++!=';' && *ptr!='\n'); /* Fehler in der Datei abfangen (fehlendes Trennzeichen) */
26622
+ while((*ptr2++=*ptr++)!=';'); /* ptr steht zu Beginn der Schleife auf dem Namen */
26623
+ ptr2-=2;
26624
+ while(isspace(*ptr2))ptr2--;
26625
+ *++ptr2=0;
26626
+ ptr2++;
26627
+
26628
+ /* ptr steht nun auf den Flags */
26629
+ *ptr3++=*ptr;
26630
+ *ptr3++=*(ptr+2);
26631
+ *ptr3++=*(ptr+4);
26632
+ *ptr3++=*(ptr+6);
26633
+ *ptr3++=*(ptr+8);
26634
+ *ptr3++=0;
26635
+ }
26636
+ fclose(in);
26637
+
26638
+ /* Sortierarray aufbauen */
26639
+ iptr=calloc(sizeof(int),cnt);
26640
+ for(i=0;i<cnt;i++)iptr[i]=i;
26641
+
26642
+ /* vor dem Abspeichern der Blocks nach BICs sortieren */
26643
+ qsort(iptr,cnt,sizeof(int),cmp_bic);
26644
+
26645
+ ptr1=scl_bic_block_s=calloc(1,ptr1-scl_bic_block+16);
26646
+ ptr2=scl_name_block_s=calloc(1,ptr2-scl_name_block+16);
26647
+ ptr3=scl_flags_block_s=calloc(1,ptr3-scl_flags_block+16);
26648
+ for(i=0;i<cnt;i++){
26649
+ j=iptr[i];
26650
+ for(ptr=scl_bic_array[j];(*ptr1++=*ptr++););
26651
+ for(ptr=scl_name_array[j];(*ptr2++=*ptr++););
26652
+ for(ptr=scl_flags_array[j];(*ptr3++=*ptr++););
26653
+ }
26654
+ free(iptr);
26655
+
26656
+ if(!(lut=fopen(lutfile,"rb+")))RETURN(FILE_WRITE_ERROR);
26657
+
26658
+ /* zun�chst mal testen ob es auch eine LUT2 Datei ist */
26659
+ if(!(ptr=fgets(buffer,SLOT_BUFFER,lut)))RETURN(FILE_READ_ERROR);
26660
+ while(*ptr && *ptr!='\n')ptr++;
26661
+ *--ptr=0;
26662
+ if(!strcmp(buffer,"BLZ Lookup Table/Format 1."))RETURN(LUT1_FILE_USED); /* alte LUT-Datei */
26663
+ if(strcmp(buffer,"BLZ Lookup Table/Format 2."))RETURN(INVALID_LUT_FILE); /* keine LUT-Datei */
26664
+
26665
+ /* nun die Blocks schreiben */
26666
+ rewind(lut);
26667
+ sprintf(buffer,"cnt: %d, TS: %ld, Gueltigkeit: %s %s",cnt,(long)ts,scl_gueltigkeit,scl_gueltigkeit_iso);
26668
+ if((rv=write_lut_block_int(lut,LUT2_SCL_INFO,strlen(buffer)+1,buffer))!=OK){
26669
+ fclose(lut);
26670
+ FREE(scl_bic_block_s);
26671
+ FREE(scl_name_block_s);
26672
+ FREE(scl_flags_block_s);
26673
+ RETURN(rv);
26674
+ }
26675
+ if((rv=write_lut_block_int(lut,LUT2_SCL_BIC,(UINT4)(ptr1-scl_bic_block_s+1),scl_bic_block_s))!=OK){
26676
+ fclose(lut);
26677
+ FREE(scl_bic_block_s);
26678
+ FREE(scl_name_block_s);
26679
+ FREE(scl_flags_block_s);
26680
+ RETURN(rv);
26681
+ }
26682
+ if((rv=write_lut_block_int(lut,LUT2_SCL_NAME,(UINT4)(ptr2-scl_name_block_s+1),scl_name_block_s))!=OK){
26683
+ fclose(lut);
26684
+ FREE(scl_bic_block_s);
26685
+ FREE(scl_name_block_s);
26686
+ FREE(scl_flags_block_s);
26687
+ RETURN(rv);
26688
+ }
26689
+ if((rv=write_lut_block_int(lut,LUT2_SCL_FLAGS,(UINT4)(ptr3-scl_flags_block_s+1),scl_flags_block_s))!=OK){
26690
+ fclose(lut);
26691
+ FREE(scl_bic_block_s);
26692
+ FREE(scl_name_block_s);
26693
+ FREE(scl_flags_block_s);
26694
+ RETURN(rv);
26695
+ }
26696
+
26697
+ fclose(lut);
26698
+ FREE(scl_bic_block_s);
26699
+ FREE(scl_name_block_s);
26700
+ FREE(scl_flags_block_s);
26701
+ RETURN(OK);
26702
+ }
26703
+
26704
+ #line 24542 "konto_check.lxx"
26705
+ /* Funktion lut_scl_init() +���3 */
26706
+ /* ###########################################################################
26707
+ * # Die Funktion lut_scl_init() liest die SCL-Blocks aus einer LUT-Datei #
26708
+ * # und initialisiert die zugeh�rigen internen Datenstrukturen. #
26709
+ * # #
26710
+ * # Copyright (C) 2018 Michael Plugge <m.plugge@hs-mannheim.de> #
26711
+ * ###########################################################################
26712
+ */
26713
+ DLL_EXPORT int lut_scl_init(char *lut_name)
26714
+ {
26715
+ char *ptr,*end;
26716
+ int i,cnt,rv;
26717
+ static UINT4 block_size_0,block_size_1,block_size_2,block_size_3;
26718
+ FILE *lut;
26719
+
26720
+ if(scl_bic_array && scl_name_array && scl_flags_array)return OK; /* schon initialisiert */
26721
+
26722
+ if(!(lut=fopen(lut_name,"rb")))RETURN(FILE_READ_ERROR);
26723
+ if((rv=read_lut_block_int(lut,0,LUT2_SCL_INFO,&block_size_0,&scl_info_block))<0){
26724
+ fclose(lut);
26725
+ if(rv==LUT2_BLOCK_NOT_IN_FILE)
26726
+ RETURN(NO_SCL_BLOCKS);
26727
+ else
26728
+ return rv;
26729
+ }
26730
+ if((rv=read_lut_block_int(lut,0,LUT2_SCL_BIC,&block_size_1,&scl_bic_block))<0){
26731
+ fclose(lut);
26732
+ if(rv==LUT2_BLOCK_NOT_IN_FILE)
26733
+ RETURN(NO_SCL_BLOCKS);
26734
+ else
26735
+ return rv;
26736
+ }
26737
+ if((rv=read_lut_block_int(lut,0,LUT2_SCL_NAME,&block_size_2,&scl_name_block))<0){
26738
+ fclose(lut);
26739
+ if(rv==LUT2_BLOCK_NOT_IN_FILE)
26740
+ RETURN(NO_SCL_BLOCKS);
26741
+ else
26742
+ return rv;
26743
+ }
26744
+ if((rv=read_lut_block_int(lut,0,LUT2_SCL_FLAGS,&block_size_3,&scl_flags_block))<0){
26745
+ fclose(lut);
26746
+ if(rv==LUT2_BLOCK_NOT_IN_FILE)
26747
+ RETURN(NO_SCL_BLOCKS);
26748
+ else
26749
+ return rv;
26750
+ }
26751
+ fclose(lut);
26752
+ if((i=sscanf(scl_info_block,"cnt: %d, TS: %ld, Gueltigkeit: %15s %15s",
26753
+ &cnt,&scl_ts,(char *)&scl_gueltigkeit,(char *)&scl_gueltigkeit_iso))!=4)RETURN(INVALID_SCL_INFO_BLOCK);
26754
+
26755
+ scl_bic_array=calloc(sizeof(char*),cnt);
26756
+ scl_name_array=calloc(sizeof(char*),cnt);
26757
+ scl_flags_array=calloc(sizeof(char*),cnt);
26758
+
26759
+ for(i=0,ptr=scl_bic_block,end=scl_bic_block+block_size_1;i<cnt && ptr<end;i++){
26760
+ scl_bic_array[i]=ptr;
26761
+ while(*ptr++ && ptr<end);
26762
+ }
26763
+
26764
+ for(i=0,ptr=scl_name_block,end=scl_name_block+block_size_2;i<cnt && ptr<end;){
26765
+ scl_name_array[i++]=ptr;
26766
+ while(*ptr++ && ptr<end);
26767
+ }
26768
+
26769
+ for(i=0,ptr=scl_flags_block,end=scl_flags_block+block_size_3;i<cnt && ptr<end;){
26770
+ scl_flags_array[i++]=ptr;
26771
+ while(*ptr++ && ptr<end);
26772
+ }
26773
+ scl_cnt=cnt;
26774
+ RETURN(OK);
26775
+ }
26776
+
26777
+ /* Funktion lut_scl_info() +���3 */
26778
+ /* ###########################################################################
26779
+ * # Die Funktion lut_scl_info() gibt Infos �ber die Anzahl der Eintr�ge im #
26780
+ * # SCL-Verzeichnis sowie das Datum, ab wann die Datei g�ltig ist. #
26781
+ * # #
26782
+ * # Copyright (C) 2018 Michael Plugge <m.plugge@hs-mannheim.de> #
26783
+ * ###########################################################################
26784
+ */
26785
+ DLL_EXPORT int lut_scl_info(char *lutfile,int *cnt,const char **gueltigkeit,const char **gueltigkeit_iso)
26786
+ {
26787
+ int s_cnt,i,rv;
26788
+ UINT4 block_size;
26789
+ FILE *lut;
26790
+
26791
+ /* falls noch nicht geschehen, den SCL-Infoblock holen */
26792
+ if(!scl_cnt){
26793
+ if(!(lut=fopen(lutfile,"rb")))RETURN(FILE_READ_ERROR);
26794
+ if((rv=read_lut_block_int(lut,0,LUT2_SCL_INFO,&block_size,&scl_info_block))<0){
26795
+ fclose(lut);
26796
+ if(rv==LUT2_BLOCK_NOT_IN_FILE)
26797
+ RETURN(NO_SCL_BLOCKS);
26798
+ else
26799
+ return rv;
26800
+ }
26801
+ if((i=sscanf(scl_info_block,"cnt: %d, TS: %ld, Gueltigkeit: %15s %15s",
26802
+ &s_cnt,&scl_ts,(char *)&scl_gueltigkeit,(char *)&scl_gueltigkeit_iso))!=4)RETURN(INVALID_SCL_INFO_BLOCK);
26803
+ }
26804
+ else
26805
+ s_cnt=scl_cnt;
26806
+
26807
+ if(s_cnt)*cnt=s_cnt;
26808
+ if(gueltigkeit)*gueltigkeit=scl_gueltigkeit;
26809
+ if(gueltigkeit_iso)*gueltigkeit_iso=scl_gueltigkeit_iso;
26810
+ return OK;
26811
+ }
26812
+
26813
+ /* Funktion lut_scl_multi() +���3 */
26814
+ /* ###########################################################################
26815
+ * # Die Funktion lut_scl_multi() gibt alle Eintr�ge des SCL-Verzeichnisses #
26816
+ * # zu einem gegebenen BIC zur�ck. #
26817
+ * # #
26818
+ * # Copyright (C) 2018 Michael Plugge <m.plugge@hs-mannheim.de> #
26819
+ * ###########################################################################
26820
+ */
26821
+ DLL_EXPORT int lut_scl_multi(char *bic,const char **scl_flags,const char **used_bic,const char **scl_name)
26822
+ {
26823
+ int i,rv;
26824
+
26825
+ i=scl_idx(bic,&rv);
26826
+ if(rv<0)return rv;
26827
+ if(scl_flags)*scl_flags=scl_flags_array[i];
26828
+ if(used_bic)*used_bic=scl_bic_array[i];
26829
+ if(scl_name)*scl_name=scl_name_array[i];
26830
+ return rv;
26831
+ }
26832
+
26833
+ /* Funktion lut_scl_sct() +���3 */
26834
+ /* ###########################################################################
26835
+ * # Die Funktion bestimmt das Flag SCT (SEPA Credit Transfer) des SCL- #
26836
+ * # Verzeichnisses und gibt das Flag (0 bzw. 1) zur�ck. #
26837
+ * # Im Fehlerfall wird -1 zur�ckgegeben und die Variable retval auf den #
26838
+ * # entsprechende Fehlercode (<0) gesetzt. #
26839
+ * # #
26840
+ * # Copyright (C) 2018 Michael Plugge <m.plugge@hs-mannheim.de> #
26841
+ * ###########################################################################
26842
+ */
26843
+ DLL_EXPORT int lut_scl_sct(char *bic,int *retval)
26844
+ {
26845
+ char *flags;
26846
+ int i,rv;
26847
+
26848
+ i=scl_idx(bic,&rv);
26849
+ if(rv<0){
26850
+ if(retval)*retval=rv;
26851
+ return -1;
26852
+ }
26853
+ else
26854
+ if(retval)*retval=OK;
26855
+ flags=scl_flags_array[i];
26856
+ return flags[0]-'0';
26857
+ }
26858
+
26859
+ /* Funktion lut_scl_sdd() +���3 */
26860
+ /* ###########################################################################
26861
+ * # Die Funktion bestimmt das Flag SDD (SEPA CORE Direct Debit (SEPA-Basis- #
26862
+ * # lastschrift) des SCL-Verzeichnisses und gibt das Flag (0 bzw. 1) zur�ck.#
26863
+ * # Im Fehlerfall wird -1 zur�ckgegeben und die Variable retval auf den #
26864
+ * # entsprechende Fehlercode (<0) gesetzt. #
26865
+ * # #
26866
+ * # Copyright (C) 2018 Michael Plugge <m.plugge@hs-mannheim.de> #
26867
+ * ###########################################################################
26868
+ */
26869
+ DLL_EXPORT int lut_scl_sdd(char *bic,int *retval)
26870
+ {
26871
+ char *flags;
26872
+ int i,rv;
26873
+
26874
+ i=scl_idx(bic,&rv);
26875
+ if(rv<0){
26876
+ if(retval)*retval=rv;
26877
+ return -1;
26878
+ }
26879
+ else
26880
+ if(retval)*retval=OK;
26881
+ flags=scl_flags_array[i];
26882
+ return flags[1]-'0';
26883
+ }
26884
+
26885
+ /* Funktion lut_scl_cor1() +���3 */
26886
+ /* ###########################################################################
26887
+ * # Die Funktion bestimmt das Flag COR1 (SEPA COR1 Direct Debit (SEPA-Basis-#
26888
+ * # lastschrift mit verk�rzter Vorlagefrist) des SCL-Verzeichnisses und #
26889
+ * # gibt das Flag (0 bzw. 1) zur�ck. #
26890
+ * # Im Fehlerfall wird -1 zur�ckgegeben und die Variable retval auf den #
26891
+ * # entsprechende Fehlercode (<0) gesetzt. #
26892
+ * # #
26893
+ * # Copyright (C) 2018 Michael Plugge <m.plugge@hs-mannheim.de> #
26894
+ * ###########################################################################
26895
+ */
26896
+ DLL_EXPORT int lut_scl_cor1(char *bic,int *retval)
26897
+ {
26898
+ char *flags;
26899
+ int i,rv;
26900
+
26901
+ i=scl_idx(bic,&rv);
26902
+ if(rv<0){
26903
+ if(retval)*retval=rv;
26904
+ return -1;
26905
+ }
26906
+ else
26907
+ if(retval)*retval=OK;
26908
+ flags=scl_flags_array[i];
26909
+ return flags[2]-'0';
26910
+ }
26911
+
26912
+ /* Funktion lut_scl_b2b() +���3 */
26913
+ /* ###########################################################################
26914
+ * # Die Funktion bestimmt das Flag BCB (SEPA B2B Direct Debit (Sepa-Firmen- #
26915
+ * # lastschrift) des SCL-Verzeichnisses und gibt das Flag (0 bzw. 1) zur�ck.#
26916
+ * # Im Fehlerfall wird -1 zur�ckgegeben und die Variable retval auf den #
26917
+ * # entsprechende Fehlercode (<0) gesetzt. #
26918
+ * # #
26919
+ * # Copyright (C) 2018 Michael Plugge <m.plugge@hs-mannheim.de> #
26920
+ * ###########################################################################
26921
+ */
26922
+ DLL_EXPORT int lut_scl_b2b(char *bic,int *retval)
26923
+ {
26924
+ char *flags;
26925
+ int i,rv;
26926
+
26927
+ i=scl_idx(bic,&rv);
26928
+ if(rv<0){
26929
+ if(retval)*retval=rv;
26930
+ return -1;
26931
+ }
26932
+ else
26933
+ if(retval)*retval=OK;
26934
+ flags=scl_flags_array[i];
26935
+ return flags[3]-'0';
26936
+ }
26937
+
26938
+ /* Funktion lut_scl_scc() +���3 */
26939
+ /* ###########################################################################
26940
+ * # Die Funktion bestimmt das Flag SCC (SEPA Card Clearing, SCC Karten- #
26941
+ * # einz�ge) des SCL-Verzeichnisses und gibt das Flag (0 bzw. 1) zur�ck. #
26942
+ * # Im Fehlerfall wird -1 zur�ckgegeben und die Variable retval auf den #
26943
+ * # entsprechende Fehlercode (<0) gesetzt. #
26944
+ * # #
26945
+ * # Copyright (C) 2018 Michael Plugge <m.plugge@hs-mannheim.de> #
26946
+ * ###########################################################################
26947
+ */
26948
+ DLL_EXPORT int lut_scl_scc(char *bic,int *retval)
26949
+ {
26950
+ char *flags;
26951
+ int i,rv;
26952
+
26953
+ i=scl_idx(bic,&rv);
26954
+ if(rv<0){
26955
+ if(retval)*retval=rv;
26956
+ return -1;
26957
+ }
26958
+ else
26959
+ if(retval)*retval=OK;
26960
+ flags=scl_flags_array[i];
26961
+ return flags[4]-'0';
26962
+ }
26963
+
26964
+ /* Funktion lut_scl_multi_blz() +���3 */
26965
+ /* ###########################################################################
26966
+ * # Die Funktion lut_scl_multi_blz() gibt alle Eintr�ge des SCL- #
26967
+ * # Verzeichnisses zu einer gegebenen BLZ zur�ck. Da die BLZ zun�chst in #
26968
+ * # einen BIC umgewandelt werden mu�, m�ssen auch die Blocks BLZ und BIC #
26969
+ * # der LUT-Datei initialisiert sein, sonst wird ein Fehler zur�ckgegeben. #
26970
+ * # #
26971
+ * # Copyright (C) 2018 Michael Plugge <m.plugge@hs-mannheim.de> #
26972
+ * ###########################################################################
26973
+ */
26974
+ DLL_EXPORT int lut_scl_multi_blz(char *blz,const char **scl_flags,const char **used_bic,const char **scl_name)
26975
+ {
26976
+ const char *bic;
26977
+ int i,rv;
26978
+
26979
+ bic=lut_bic(blz,0,&rv);
26980
+ if(rv<0)return rv;
26981
+ i=scl_idx(bic,&rv);
26982
+ if(rv<0)return rv;
26983
+ if(scl_flags)*scl_flags=scl_flags_array[i];
26984
+ if(used_bic)*used_bic=scl_bic_array[i];
26985
+ if(scl_name)*scl_name=scl_name_array[i];
26986
+ return rv;
26987
+ }
26988
+
26989
+ /* Funktion lut_scl_sct_blz() +���3 */
26990
+ /* ###########################################################################
26991
+ * # Die Funktion bestimmt das Flag SCT (SEPA Credit Transfer) des SCL- #
26992
+ * # Verzeichnisses und gibt das Flag (0 bzw. 1) zur�ck. #
26993
+ * # Im Fehlerfall wird -1 zur�ckgegeben und die Variable retval auf den #
26994
+ * # entsprechende Fehlercode (<0) gesetzt. #
26995
+ * # #
26996
+ * # Copyright (C) 2018 Michael Plugge <m.plugge@hs-mannheim.de> #
26997
+ * ###########################################################################
26998
+ */
26999
+ DLL_EXPORT int lut_scl_sct_blz(char *blz,int *retval,const char **used_bic)
27000
+ {
27001
+ char *flags;
27002
+ const char *bic;
27003
+ int i,rv;
27004
+
27005
+ bic=lut_bic(blz,0,&rv);
27006
+ if(rv<0){
27007
+ if(retval)*retval=rv;
27008
+ return -1;
27009
+ }
27010
+ else
27011
+ if(retval)*retval=OK;
27012
+ i=scl_idx(bic,&rv);
27013
+ if(rv<0){
27014
+ if(retval)*retval=rv;
27015
+ return -1;
27016
+ }
27017
+ else
27018
+ if(retval)*retval=OK;
27019
+ if(used_bic)*used_bic=scl_bic_array[i];
27020
+ flags=scl_flags_array[i];
27021
+ return flags[0]-'0';
27022
+ }
27023
+
27024
+ /* Funktion lut_scl_sdd_blz() +���3 */
27025
+ /* ###########################################################################
27026
+ * # Die Funktion bestimmt das Flag SDD (SEPA CORE Direct Debit (SEPA-Basis- #
27027
+ * # lastschrift) des SCL-Verzeichnisses und gibt das Flag (0 bzw. 1) zur�ck.#
27028
+ * # Im Fehlerfall wird -1 zur�ckgegeben und die Variable retval auf den #
27029
+ * # entsprechende Fehlercode (<0) gesetzt. #
27030
+ * # #
27031
+ * # Copyright (C) 2018 Michael Plugge <m.plugge@hs-mannheim.de> #
27032
+ * ###########################################################################
27033
+ */
27034
+ DLL_EXPORT int lut_scl_sdd_blz(char *blz,int *retval,const char **used_bic)
27035
+ {
27036
+ char *flags;
27037
+ const char *bic;
27038
+ int i,rv;
27039
+
27040
+ bic=lut_bic(blz,0,&rv);
27041
+ if(rv<0){
27042
+ if(retval)*retval=rv;
27043
+ return -1;
27044
+ }
27045
+ else
27046
+ if(retval)*retval=OK;
27047
+ i=scl_idx(bic,&rv);
27048
+ if(rv<0){
27049
+ if(retval)*retval=rv;
27050
+ return -1;
27051
+ }
27052
+ else
27053
+ if(retval)*retval=OK;
27054
+ if(used_bic)*used_bic=scl_bic_array[i];
27055
+ flags=scl_flags_array[i];
27056
+ return flags[1]-'0';
27057
+ }
27058
+
27059
+ /* Funktion lut_scl_cor1_blz() +���3 */
27060
+ /* ###########################################################################
27061
+ * # Die Funktion bestimmt das Flag COR1 (SEPA COR1 Direct Debit (SEPA-Basis-#
27062
+ * # lastschrift mit verk�rzter Vorlagefrist) des SCL-Verzeichnisses und #
27063
+ * # gibt das Flag (0 bzw. 1) zur�ck. #
27064
+ * # Im Fehlerfall wird -1 zur�ckgegeben und die Variable retval auf den #
27065
+ * # entsprechende Fehlercode (<0) gesetzt. #
27066
+ * # #
27067
+ * # Copyright (C) 2018 Michael Plugge <m.plugge@hs-mannheim.de> #
27068
+ * ###########################################################################
27069
+ */
27070
+ DLL_EXPORT int lut_scl_cor1_blz(char *blz,int *retval,const char **used_bic)
27071
+ {
27072
+ char *flags;
27073
+ const char *bic;
27074
+ int i,rv;
27075
+
27076
+ bic=lut_bic(blz,0,&rv);
27077
+ if(rv<0){
27078
+ if(retval)*retval=rv;
27079
+ return -1;
27080
+ }
27081
+ else
27082
+ if(retval)*retval=OK;
27083
+ i=scl_idx(bic,&rv);
27084
+ if(rv<0){
27085
+ if(retval)*retval=rv;
27086
+ return -1;
27087
+ }
27088
+ else
27089
+ if(retval)*retval=OK;
27090
+ if(used_bic)*used_bic=scl_bic_array[i];
27091
+ flags=scl_flags_array[i];
27092
+ return flags[2]-'0';
27093
+ }
27094
+
27095
+ /* Funktion lut_scl_b2b_blz() +���3 */
27096
+ /* ###########################################################################
27097
+ * # Die Funktion bestimmt das Flag BCB (SEPA B2B Direct Debit (Sepa-Firmen- #
27098
+ * # lastschrift) des SCL-Verzeichnisses und gibt das Flag (0 bzw. 1) zur�ck.#
27099
+ * # Im Fehlerfall wird -1 zur�ckgegeben und die Variable retval auf den #
27100
+ * # entsprechende Fehlercode (<0) gesetzt. #
27101
+ * # #
27102
+ * # Copyright (C) 2018 Michael Plugge <m.plugge@hs-mannheim.de> #
27103
+ * ###########################################################################
27104
+ */
27105
+ DLL_EXPORT int lut_scl_b2b_blz(char *blz,int *retval,const char **used_bic)
27106
+ {
27107
+ char *flags;
27108
+ const char *bic;
27109
+ int i,rv;
27110
+
27111
+ bic=lut_bic(blz,0,&rv);
27112
+ if(rv<0){
27113
+ if(retval)*retval=rv;
27114
+ return -1;
27115
+ }
27116
+ else
27117
+ if(retval)*retval=OK;
27118
+ i=scl_idx(bic,&rv);
27119
+ if(rv<0){
27120
+ if(retval)*retval=rv;
27121
+ return -1;
27122
+ }
27123
+ else
27124
+ if(retval)*retval=OK;
27125
+ if(used_bic)*used_bic=scl_bic_array[i];
27126
+ flags=scl_flags_array[i];
27127
+ return flags[3]-'0';
27128
+ }
27129
+
27130
+ /* Funktion lut_scl_scc_blz() +���3 */
27131
+ /* ###########################################################################
27132
+ * # Die Funktion bestimmt das Flag SCC (SEPA Card Clearing, SCC Karten- #
27133
+ * # einz�ge) des SCL-Verzeichnisses und gibt das Flag (0 bzw. 1) zur�ck. #
27134
+ * # Im Fehlerfall wird -1 zur�ckgegeben und die Variable retval auf den #
27135
+ * # entsprechende Fehlercode (<0) gesetzt. #
27136
+ * # #
27137
+ * # Copyright (C) 2018 Michael Plugge <m.plugge@hs-mannheim.de> #
27138
+ * ###########################################################################
27139
+ */
27140
+ DLL_EXPORT int lut_scl_scc_blz(char *blz,int *retval,const char **used_bic)
27141
+ {
27142
+ char *flags;
27143
+ const char *bic;
27144
+ int i,rv;
27145
+
27146
+ bic=lut_bic(blz,0,&rv);
27147
+ if(rv<0){
27148
+ if(retval)*retval=rv;
27149
+ return -1;
27150
+ }
27151
+ else
27152
+ if(retval)*retval=OK;
27153
+ i=scl_idx(bic,&rv);
27154
+ if(rv<0){
27155
+ if(retval)*retval=rv;
27156
+ return -1;
27157
+ }
27158
+ else
27159
+ if(retval)*retval=OK;
27160
+ if(used_bic)*used_bic=scl_bic_array[i];
27161
+ flags=scl_flags_array[i];
27162
+ return flags[4]-'0';
27163
+ }
27164
+
27165
+ /* Funktion lut_scl_multi_blz_i() +���3 */
27166
+ /* ###########################################################################
27167
+ * # Diese Funktion entspricht der Funktion lut_scl_multi_blz(), nur wird #
27168
+ * # die BLZ als Integer-Wert statt als String �bergeben. #
27169
+ * # #
27170
+ * # Copyright (C) 2018 Michael Plugge <m.plugge@hs-mannheim.de> #
27171
+ * ###########################################################################
27172
+ */
27173
+ DLL_EXPORT int lut_scl_multi_blz_i(int blz,const char **scl_flags,const char **used_bic,const char **scl_name)
27174
+ {
27175
+ const char *bic;
27176
+ int i,rv;
27177
+
27178
+ bic=lut_bic_i(blz,0,&rv);
27179
+ if(rv<0)return rv;
27180
+ i=scl_idx(bic,&rv);
27181
+ if(rv<0)return rv;
27182
+ if(scl_flags)*scl_flags=scl_flags_array[i];
27183
+ if(used_bic)*used_bic=scl_bic_array[i];
27184
+ if(scl_name)*scl_name=scl_name_array[i];
27185
+ return rv;
27186
+ }
26421
27187
 
26422
27188
  #else /* !INCLUDE_KONTO_CHECK_DE */
26423
27189
  /* Leerdefinitionen f�r !INCLUDE_KONTO_CHECK_DE +���1 */
@@ -26603,4 +27369,20 @@ XI lut_keine_iban_berechnung(char *iban_blacklist,char *lutfile,int set)EXCLUDED
26603
27369
  XI pz_aenderungen_enable(int set)EXCLUDED
26604
27370
  XC kc_id2ptr(int handle,int *retval)EXCLUDED_S
26605
27371
  XI kc_id_free(int handle)EXCLUDED
27372
+ XI lut_scl_init(char *lut_name)EXCLUDED
27373
+ XI lut_scl_info(char *lutfile,int *cnt,const char **gueltigkeit,const char **gueltigkeit_iso)EXCLUDED_V
27374
+ XI lut_write_scl_blocks(char *inputfile,char *lutfile)EXCLUDED
27375
+ XI lut_scl_multi(char *bic,const char **used_bic,const char **scl_name,const char **scl_flags)EXCLUDED
27376
+ XI lut_scl_multi_blz(char *blz,const char **used_bic,const char **scl_name,const char **scl_flags)EXCLUDED
27377
+ XI lut_scl_multi_blz_i(int blz,const char **used_bic,const char **scl_name,const char **scl_flags)EXCLUDED
27378
+ XI lut_scl_sct(char *bic)EXCLUDED
27379
+ XI lut_scl_sdd(char *bic)EXCLUDED
27380
+ XI lut_scl_cor1(char *bic)EXCLUDED
27381
+ XI lut_scl_b2b(char *bic)EXCLUDED
27382
+ XI lut_scl_scc(char *bic)EXCLUDED
27383
+ XI lut_scl_sct_blz(char *blz)EXCLUDED
27384
+ XI lut_scl_sdd_blz(char *blz)EXCLUDED
27385
+ XI lut_scl_cor1_blz(char *blz)EXCLUDED
27386
+ XI lut_scl_b2b_blz(char *blz)EXCLUDED
27387
+ XI lut_scl_scc_blz(char *blz)EXCLUDED
26606
27388
  #endif