| 2399 | // |
| 2400 | |
| 2401 | static void gen_event_init( const act* action) |
| 2402 | { |
| 2403 | const TEXT *pattern1 = "CALL \"%S1\" USING %S4%N1A, %S4%N1B, %N2, %S6 GIVING %S4%N1L"; |
| 2404 | const TEXT *pattern2 = "CALL \"%S2\" USING %V1, %DH, %S4%N1L, %S4%N1A, %S4%N1B"; |
| 2405 | const TEXT *pattern3 = "CALL \"%S3\" USING %S5, %S4%N1L, %S4%N1A, %S4%N1B"; |
| 2406 | |
| 2407 | const gpre_nod* init = (gpre_nod*) action->act_object; |
| 2408 | const gpre_nod* event_list = init->nod_arg[1]; |
| 2409 | |
| 2410 | const USHORT column = static_cast<USHORT>(strlen(names[COLUMN])); |
| 2411 | |
| 2412 | PAT args; |
| 2413 | args.pat_database = (gpre_dbb*) init->nod_arg[3]; |
| 2414 | args.pat_vector1 = status_vector(action); |
| 2415 | args.pat_value1 = (int) (IPTR) init->nod_arg[2]; |
| 2416 | args.pat_value2 = (int) event_list->nod_count; |
| 2417 | args.pat_string1 = ISC_EVENT_BLOCK; |
| 2418 | args.pat_string2 = ISC_EVENT_WAIT; |
| 2419 | args.pat_string3 = ISC_EVENT_COUNTS; |
| 2420 | args.pat_string4 = names[isc_a_pos]; |
| 2421 | args.pat_string5 = names[ISC_EVENTS_VECTOR]; |
| 2422 | args.pat_string6 = names[ISC_EVENT_NAMES_VECTOR]; |
| 2423 | |
| 2424 | // generate call to dynamically generate event blocks |
| 2425 | |
| 2426 | TEXT variable[MAX_REF_SIZE]; |
| 2427 | const gpre_nod *const *ptr, *const *end; |
| 2428 | SSHORT count; |
| 2429 | for (ptr = event_list->nod_arg, count = 0, end = ptr + event_list->nod_count; ptr < end; ptr++) |
| 2430 | { |
| 2431 | count++; |
| 2432 | const gpre_nod* node = *ptr; |
| 2433 | if (node->nod_type == nod_field) |
| 2434 | { |
| 2435 | const ref* reference = (ref*) node->nod_arg[0]; |
| 2436 | gen_name(variable, reference, true); |
| 2437 | printa(names[COLUMN], false, "MOVE %s TO %s(%d)", |
| 2438 | variable, names[ISC_EVENT_NAMES2], count); |
| 2439 | } |
| 2440 | else |
| 2441 | printa(names[COLUMN], false, "MOVE %s TO %s(%d)", |
| 2442 | (TEXT*) node->nod_arg[0], names[ISC_EVENT_NAMES2], count); |
| 2443 | |
| 2444 | printa(names[COLUMN], true, EVENT_MOVE_TEMPLATE, ISC_BADDRESS, |
| 2445 | names[ISC_EVENT_NAMES2], count, names[ISC_EVENT_NAMES], count); |
| 2446 | } |
| 2447 | |
| 2448 | PATTERN_expand(column, pattern1, &args); |
| 2449 | |
| 2450 | // generate actual call to event_wait |
| 2451 | |
| 2452 | PATTERN_expand(column, pattern2, &args); |
| 2453 | |
| 2454 | // get change in event counts, copying event parameter block for reuse |
| 2455 | |
| 2456 | PATTERN_expand(column, pattern3, &args); |
| 2457 | fprintf(gpreGlob.out_file, "\n"); |
| 2458 | set_sqlcode(action); |
no test coverage detected