289 const char *filename)
292char *str_proto1, *str_proto2, *str_proto3;
293char *str_doc1, *str_doc2, *str_doc3, *str_doc4;
294char *str_def1, *str_def2, *str_proc1, *str_proc2;
295char *str_dwa1, *str_low_dt, *str_low_ds, *str_low_ts;
296char *str_low_tsp1, *str_low_dtp1;
298l_int32 i, nsels, nbytes, actstart, end, newstart;
303 return ERROR_INT(
"sela not defined", __func__, 1);
306 if ((nsels = selaGetCount(sela)) == 0)
307 return ERROR_INT(
"no sels in sela", __func__, 1);
310 if ((filestr = (
char *)l_binaryRead(TEMPLATE1, &size)) == NULL)
311 return ERROR_INT(
"filestr not made", __func__, 1);
312 sa2 = sarrayCreateLinesFromString(filestr, 1);
315 return ERROR_INT(
"sa2 not made", __func__, 1);
318 sa1 = selaGetSelnames(sela);
321 sprintf(bigbuf,
"PIX *pixMorphDwa_%d(PIX *pixd, PIX *pixs, "
322 "l_int32 operation, char *selname);", fileindex);
323 str_proto1 = stringNew(bigbuf);
324 sprintf(bigbuf,
"PIX *pixFMorphopGen_%d(PIX *pixd, PIX *pixs, "
325 "l_int32 operation, char *selname);", fileindex);
326 str_proto2 = stringNew(bigbuf);
327 sprintf(bigbuf,
"l_int32 fmorphopgen_low_%d(l_uint32 *datad, l_int32 w,\n"
328 " l_int32 h, l_int32 wpld,\n"
329 " l_uint32 *datas, l_int32 wpls,\n"
330 " l_int32 index);", fileindex);
331 str_proto3 = stringNew(bigbuf);
332 sprintf(bigbuf,
" * PIX *pixMorphDwa_%d()", fileindex);
333 str_doc1 = stringNew(bigbuf);
334 sprintf(bigbuf,
" * PIX *pixFMorphopGen_%d()", fileindex);
335 str_doc2 = stringNew(bigbuf);
336 sprintf(bigbuf,
" * \\brief pixMorphDwa_%d()", fileindex);
337 str_doc3 = stringNew(bigbuf);
338 sprintf(bigbuf,
" * \\brief pixFMorphopGen_%d()", fileindex);
339 str_doc4 = stringNew(bigbuf);
340 sprintf(bigbuf,
"pixMorphDwa_%d(PIX *pixd,", fileindex);
341 str_def1 = stringNew(bigbuf);
342 sprintf(bigbuf,
"pixFMorphopGen_%d(PIX *pixd,", fileindex);
343 str_def2 = stringNew(bigbuf);
344 sprintf(bigbuf,
" PROCNAME(\"pixMorphDwa_%d\");", fileindex);
345 str_proc1 = stringNew(bigbuf);
346 sprintf(bigbuf,
" PROCNAME(\"pixFMorphopGen_%d\");", fileindex);
347 str_proc2 = stringNew(bigbuf);
349 " pixt2 = pixFMorphopGen_%d(NULL, pixt1, operation, selname);",
351 str_dwa1 = stringNew(bigbuf);
353 " fmorphopgen_low_%d(datad, w, h, wpld, datat, wpls, index);",
355 str_low_dt = stringNew(bigbuf);
357 " fmorphopgen_low_%d(datad, w, h, wpld, datas, wpls, index);",
359 str_low_ds = stringNew(bigbuf);
361 " fmorphopgen_low_%d(datat, w, h, wpls, datas, wpls, index+1);",
363 str_low_tsp1 = stringNew(bigbuf);
365 " fmorphopgen_low_%d(datat, w, h, wpls, datas, wpls, index);",
367 str_low_ts = stringNew(bigbuf);
369 " fmorphopgen_low_%d(datad, w, h, wpld, datat, wpls, index+1);",
371 str_low_dtp1 = stringNew(bigbuf);
374 sa3 = sarrayCreate(0);
377 sarrayParseRange(sa2, 0, &actstart, &end, &newstart,
"--", 0);
378 sarrayAppendRange(sa3, sa2, actstart, end);
381 sarrayAddString(sa3, str_doc1,
L_INSERT);
382 sarrayAddString(sa3, str_doc2,
L_INSERT);
385 sarrayParseRange(sa2, newstart, &actstart, &end, &newstart,
"--", 0);
386 sarrayAppendRange(sa3, sa2, actstart, end);
389 sarrayAddString(sa3, str_proto1,
L_INSERT);
390 sarrayAddString(sa3, str_proto2,
L_INSERT);
391 sarrayAddString(sa3, str_proto3,
L_INSERT);
394 sprintf(bigbuf,
"\nstatic l_int32 NUM_SELS_GENERATED = %d;", nsels);
395 sarrayAddString(sa3, bigbuf,
L_COPY);
396 sprintf(bigbuf,
"static char SEL_NAMES[][80] = {");
397 sarrayAddString(sa3, bigbuf,
L_COPY);
398 for (i = 0; i < nsels - 1; i++) {
399 sprintf(bigbuf,
" \"%s\",",
401 sarrayAddString(sa3, bigbuf,
L_COPY);
403 sprintf(bigbuf,
" \"%s\"};",
405 sarrayAddString(sa3, bigbuf,
L_COPY);
408 sarrayParseRange(sa2, newstart, &actstart, &end, &newstart,
"--", 0);
409 sarrayAppendRange(sa3, sa2, actstart, end);
410 sarrayAddString(sa3, str_doc3,
L_INSERT);
411 sarrayParseRange(sa2, newstart, &actstart, &end, &newstart,
"--", 0);
412 sarrayAppendRange(sa3, sa2, actstart, end);
415 sarrayAddString(sa3, str_def1,
L_INSERT);
416 sarrayParseRange(sa2, newstart, &actstart, &end, &newstart,
"--", 0);
417 sarrayAppendRange(sa3, sa2, actstart, end);
418 sarrayAddString(sa3, str_proc1,
L_INSERT);
419 sarrayParseRange(sa2, newstart, &actstart, &end, &newstart,
"--", 0);
420 sarrayAppendRange(sa3, sa2, actstart, end);
421 sarrayAddString(sa3, str_dwa1,
L_INSERT);
422 sarrayParseRange(sa2, newstart, &actstart, &end, &newstart,
"--", 0);
423 sarrayAppendRange(sa3, sa2, actstart, end);
426 sarrayAddString(sa3, str_doc4,
L_INSERT);
427 sarrayParseRange(sa2, newstart, &actstart, &end, &newstart,
"--", 0);
428 sarrayAppendRange(sa3, sa2, actstart, end);
431 sarrayAddString(sa3, str_def2,
L_INSERT);
432 sarrayParseRange(sa2, newstart, &actstart, &end, &newstart,
"--", 0);
433 sarrayAppendRange(sa3, sa2, actstart, end);
434 sarrayAddString(sa3, str_proc2,
L_INSERT);
435 sarrayParseRange(sa2, newstart, &actstart, &end, &newstart,
"--", 0);
436 sarrayAppendRange(sa3, sa2, actstart, end);
437 sarrayAddString(sa3, str_low_dt,
L_COPY);
438 sarrayParseRange(sa2, newstart, &actstart, &end, &newstart,
"--", 0);
439 sarrayAppendRange(sa3, sa2, actstart, end);
440 sarrayAddString(sa3, str_low_ds,
L_INSERT);
441 sarrayParseRange(sa2, newstart, &actstart, &end, &newstart,
"--", 0);
442 sarrayAppendRange(sa3, sa2, actstart, end);
443 sarrayAddString(sa3, str_low_tsp1,
L_INSERT);
444 sarrayParseRange(sa2, newstart, &actstart, &end, &newstart,
"--", 0);
445 sarrayAppendRange(sa3, sa2, actstart, end);
446 sarrayAddString(sa3, str_low_dt,
L_INSERT);
447 sarrayParseRange(sa2, newstart, &actstart, &end, &newstart,
"--", 0);
448 sarrayAppendRange(sa3, sa2, actstart, end);
449 sarrayAddString(sa3, str_low_ts,
L_INSERT);
450 sarrayParseRange(sa2, newstart, &actstart, &end, &newstart,
"--", 0);
451 sarrayAppendRange(sa3, sa2, actstart, end);
452 sarrayAddString(sa3, str_low_dtp1,
L_INSERT);
453 sarrayParseRange(sa2, newstart, &actstart, &end, &newstart,
"--", 0);
454 sarrayAppendRange(sa3, sa2, actstart, end);
457 filestr = sarrayToString(sa3, 1);
458 nbytes = strlen(filestr);
460 snprintf(bigbuf,
L_BUF_SIZE,
"%s.%d.c", filename, fileindex);
462 sprintf(bigbuf,
"%s.%d.c", OUTROOT, fileindex);
463 l_binaryWrite(bigbuf,
"w", filestr, nbytes);