void __stdcall our_callback(DWORD trap_rec_ptr) { EnterCriticalSection(&crit_sec); wipe_file( (struct trap_record *) trap_rec_ptr); release_rec(trap_rec_ptr); LeaveCriticalSection(&crit_sec); }
int sor$sort_merge (long * context) { struct sor_sort_merge * sort_merge_p = &sort_merge; if (context) { sort_merge_p = *context; } int i, j; for (i = 0; i < sort_merge_p->filidx; i++) { struct dsc$descriptor * d = sort_merge_p->fil[i]; void * file = fopen (d->dsc$a_pointer, "r"); char buf[sort_merge_p->lrl]; #if 0 int rd; for ( ; ; ) { rd = read (fd, buf, 132); if (rd == 0) break; } #else while (fgets(buf, sort_merge_p->lrl, file)) { #endif struct dsc$descriptor dsc; dsc.dsc$w_length = strlen(buf) - 1; dsc.dsc$a_pointer = buf; sor$release_rec(&dsc, 0); } fclose(file); } for (i = sort_merge_p->sortidx - 1; i >= 0; i--) { for (j = 1; j <= i; j++) { if (sort_merge_p->key_buffer == 0) { int (*compare)() = my_compare; if (sort_merge_p->user_compare) compare = sort_merge_p->user_compare; if (compare (sort_merge_p->sort[j - 1], sort_merge_p->sort[j]) > 0) { myswap(&sort_merge_p->sort[j - 1], &sort_merge_p->sort[j]); } } else { int (*compare)() = my_compare_o_n; short * key_buffer = sort_merge_p->key_buffer; int num = *key_buffer++; int cmp = 0; for ( ; num && cmp == 0; num-- ) { int type = *key_buffer++; // unused int order = *key_buffer++; // unused int offset = *key_buffer++; int len = *key_buffer++; cmp = compare (sort_merge_p->sort[j - 1], sort_merge_p->sort[j], offset, len); } if (cmp > 0) myswap(&sort_merge_p->sort[j - 1], &sort_merge_p->sort[j]); } } } return SS$_NORMAL; }