konto_check 6.02.1 → 6.05.0

Sign up to get free protection for your applications and to get access to all the features.
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