1 #include <stdio.h> // fprintf
5 KSEQ_INIT(gzFile
, zng_gzread
)
8 void fqReader_init(void) {
10 const char *pattern
= "R[0-9]{3}(:)?C[0-9]{3}";
11 if ((rc
= regcomp(&Parameters
.regex
, pattern
, REG_EXTENDED
)) != 0) {
12 regerror(rc
, &Parameters
.regex
, Parameters
.buffer
, PARAMETERS_BUFFER_SIZE
);
13 printf("[x]=%d=regcomp(\"%s\") failed with '%s'.\n", rc
, pattern
, Parameters
.buffer
);
16 Parameters
.ksfp
= zng_gzopen(Parameters
.inFastqFilename
, "r");
17 if (unlikely(Parameters
.ksfp
== NULL
)) {
18 fprintf(stderr
, "[x]gzopen error on opening [%s]: %s.\n", Parameters
.inFastqFilename
, strerror(errno
));
21 rc
= zng_gzbuffer(Parameters
.ksfp
, GZBUFSIZE
);
22 if (unlikely(rc
!= 0)) {
23 fprintf(stderr
, "[x]gzbuffer error: %s.\n", strerror(errno
));
26 Parameters
.kseq
= kseq_init(Parameters
.ksfp
);
29 void fqReader_destroy(void) {
30 regfree(&Parameters
.regex
);
31 kseq_destroy(Parameters
.kseq
);
32 zng_gzclose(Parameters
.ksfp
);
35 void fill_worker(int_least16_t worker_id
) {
36 kseq_t
*seq
= Parameters
.kseq
;
37 workerArray_t
*worker
= &Parameters
.workerArray
[worker_id
];
39 regmatch_t matches
[2];
41 for (uint64_t index
= 0; index
< JOBITEMSIZE
; index
++) {
42 fstBCdata_t
*fstBCdata_p
= &worker
->input_array
[index
];
43 if (kseq_read(seq
) >= MINBARCODELEN
) {
44 // strncpy((char *)fstBCdata_p->name, seq->name.s, sizeof(fstBCdata_p->name));
45 STRcpyARRAY(fstBCdata_p
->name
, seq
->name
.s
);
46 /* seq->comment.s is discarded */
47 STRcpyARRAY(fstBCdata_p
->seq
, seq
->seq
.s
);
48 STRcpyARRAY(fstBCdata_p
->qual
, seq
->qual
.s
);
49 if (unlikely(seq
->comment
.l
> 0)) {
50 if (likely(fstBCdata_p
->comment
!= NULL
)) {
51 size_t oldSize
= MALLOCSIZE(fstBCdata_p
->comment
);
52 if (unlikely(1 + seq
->comment
.l
> oldSize
)) {
53 free(fstBCdata_p
->comment
);
54 fstBCdata_p
->comment
= strdup(seq
->comment
.s
);
56 STRcpySTR(fstBCdata_p
->comment
, seq
->comment
.s
);
60 if (unlikely(fstBCdata_p
->comment
!= NULL
)) {
61 free(fstBCdata_p
->comment
);
62 fstBCdata_p
->comment
= NULL
;
66 fprintf(stderr
, "- %llu -\n", index
);
67 ARRAYcpySTR(Parameters
.buffer
, fstBCdata_p
->name
);
68 // snprintf(Parameters.buffer, 1 + sizeof(fstBCdata_p->name), "%s", fstBCdata_p->name);
69 fprintf(stderr
, "->Name:[%s]\n", Parameters
.buffer
);
70 ARRAYcpySTR(Parameters
.buffer
, fstBCdata_p
->seq
);
71 fprintf(stderr
, "->Sequ:[%s]\n", Parameters
.buffer
);
72 ARRAYcpySTR(Parameters
.buffer
, fstBCdata_p
->qual
);
73 fprintf(stderr
, "->Qual:[%s]\n", Parameters
.buffer
);
76 fstBCdata_p
->name
[0] = '\0';
77 fstBCdata_p
->seq
[0] = '\0';
78 fstBCdata_p
->qual
[0] = '\0';
82 // Update the worker's flag to indicate the processing is complete
83 atomic_store(&worker
->flag
, 1);