Lines Matching defs:hndl
128 static SANE_Status do_eof(Mustek_pp_Handle *hndl);
129 static SANE_Status do_stop(Mustek_pp_Handle *hndl);
130 static int reader_process (Mustek_pp_Handle * hndl, int pipe);
133 static void init_options(Mustek_pp_Handle *hndl);
165 do_eof (Mustek_pp_Handle *hndl)
167 if (hndl->pipe >= 0) {
169 close (hndl->pipe);
170 hndl->pipe = -1;
183 do_stop(Mustek_pp_Handle *hndl)
188 do_eof (hndl);
190 if (hndl->reader > 0) {
193 kill (hndl->reader, SIGTERM);
195 while (wait (&exit_status) != hndl->reader);
200 hndl->reader = 0;
201 hndl->dev->func->stop (hndl);
207 hndl->dev->func->stop (hndl);
247 reader_process (Mustek_pp_Handle * hndl, int pipe)
261 if (!(buffer = malloc (hndl->params.bytes_per_line)))
267 fd_to_release = hndl->fd;
272 if ((status = hndl->dev->func->start (hndl)) != SANE_STATUS_GOOD)
275 size = hndl->params.bytes_per_line;
278 for (line=0; line<hndl->params.lines ; line++) {
282 hndl->dev->func->read (hndl, buffer);
290 hndl->dev->func->stop (hndl);
376 init_options(Mustek_pp_Handle *hndl)
380 memset (hndl->opt, 0, sizeof (hndl->opt));
381 memset (hndl->val, 0, sizeof (hndl->val));
385 hndl->opt[i].size = sizeof (SANE_Word);
386 hndl->opt[i].cap = SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT;
389 hndl->opt[OPT_NUM_OPTS].name = SANE_NAME_NUM_OPTIONS;
390 hndl->opt[OPT_NUM_OPTS].title = SANE_TITLE_NUM_OPTIONS;
391 hndl->opt[OPT_NUM_OPTS].desc = SANE_DESC_NUM_OPTIONS;
392 hndl->opt[OPT_NUM_OPTS].type = SANE_TYPE_INT;
393 hndl->opt[OPT_NUM_OPTS].cap = SANE_CAP_SOFT_DETECT;
394 hndl->val[OPT_NUM_OPTS].w = NUM_OPTIONS;
398 hndl->opt[OPT_MODE_GROUP].title = "Scan Mode";
399 hndl->opt[OPT_MODE_GROUP].desc = "";
400 hndl->opt[OPT_MODE_GROUP].type = SANE_TYPE_GROUP;
401 hndl->opt[OPT_MODE_GROUP].cap = 0;
402 hndl->opt[OPT_MODE_GROUP].constraint_type = SANE_CONSTRAINT_NONE;
403 hndl->opt[OPT_MODE_GROUP].size = 0;
406 hndl->opt[OPT_MODE].name = SANE_NAME_SCAN_MODE;
407 hndl->opt[OPT_MODE].title = SANE_TITLE_SCAN_MODE;
408 hndl->opt[OPT_MODE].desc = SANE_DESC_SCAN_MODE;
409 hndl->opt[OPT_MODE].type = SANE_TYPE_STRING;
410 hndl->opt[OPT_MODE].constraint_type = SANE_CONSTRAINT_STRING_LIST;
411 hndl->opt[OPT_MODE].size = mustek_pp_modes_size;
412 hndl->opt[OPT_MODE].constraint.string_list = mustek_pp_modes;
413 hndl->val[OPT_MODE].s = strdup (mustek_pp_modes[2]);
416 hndl->opt[OPT_RESOLUTION].name = SANE_NAME_SCAN_RESOLUTION;
417 hndl->opt[OPT_RESOLUTION].title = SANE_TITLE_SCAN_RESOLUTION;
418 hndl->opt[OPT_RESOLUTION].desc = SANE_DESC_SCAN_RESOLUTION;
419 hndl->opt[OPT_RESOLUTION].type = SANE_TYPE_FIXED;
420 hndl->opt[OPT_RESOLUTION].unit = SANE_UNIT_DPI;
421 hndl->opt[OPT_RESOLUTION].constraint_type = SANE_CONSTRAINT_RANGE;
422 hndl->opt[OPT_RESOLUTION].constraint.range = &hndl->dpi_range;
423 hndl->val[OPT_RESOLUTION].w = SANE_FIX (hndl->dev->minres);
424 hndl->dpi_range.min = SANE_FIX (hndl->dev->minres);
425 hndl->dpi_range.max = SANE_FIX (hndl->dev->maxres);
426 hndl->dpi_range.quant = SANE_FIX (1);
429 hndl->opt[OPT_SPEED].name = SANE_NAME_SCAN_SPEED;
430 hndl->opt[OPT_SPEED].title = SANE_TITLE_SCAN_SPEED;
431 hndl->opt[OPT_SPEED].desc = SANE_DESC_SCAN_SPEED;
432 hndl->opt[OPT_SPEED].type = SANE_TYPE_STRING;
433 hndl->opt[OPT_SPEED].size = mustek_pp_speeds_size;
434 hndl->opt[OPT_SPEED].constraint_type = SANE_CONSTRAINT_STRING_LIST;
435 hndl->opt[OPT_SPEED].constraint.string_list = mustek_pp_speeds;
436 hndl->val[OPT_SPEED].s = strdup (mustek_pp_speeds[2]);
438 if (! (hndl->dev->caps & CAP_SPEED_SELECT))
439 hndl->opt[OPT_SPEED].cap |= SANE_CAP_INACTIVE;
442 hndl->opt[OPT_PREVIEW].name = SANE_NAME_PREVIEW;
443 hndl->opt[OPT_PREVIEW].title = SANE_TITLE_PREVIEW;
444 hndl->opt[OPT_PREVIEW].desc = SANE_DESC_PREVIEW;
445 hndl->opt[OPT_PREVIEW].cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT;
446 hndl->val[OPT_PREVIEW].w = SANE_FALSE;
449 hndl->opt[OPT_GRAY_PREVIEW].name = SANE_NAME_GRAY_PREVIEW;
450 hndl->opt[OPT_GRAY_PREVIEW].title = SANE_TITLE_GRAY_PREVIEW;
451 hndl->opt[OPT_GRAY_PREVIEW].desc = SANE_DESC_GRAY_PREVIEW;
452 hndl->opt[OPT_GRAY_PREVIEW].type = SANE_TYPE_BOOL;
453 hndl->val[OPT_GRAY_PREVIEW].w = SANE_FALSE;
456 hndl->opt[OPT_DEPTH].name = SANE_NAME_BIT_DEPTH;
457 hndl->opt[OPT_DEPTH].title = SANE_TITLE_BIT_DEPTH;
458 hndl->opt[OPT_DEPTH].desc =
461 hndl->opt[OPT_DEPTH].type = SANE_TYPE_INT;
462 hndl->opt[OPT_DEPTH].constraint_type = SANE_CONSTRAINT_WORD_LIST;
463 hndl->opt[OPT_DEPTH].constraint.word_list = mustek_pp_depths;
464 hndl->opt[OPT_DEPTH].unit = SANE_UNIT_BIT;
465 hndl->opt[OPT_DEPTH].size = sizeof(SANE_Word);
466 hndl->val[OPT_DEPTH].w = 8;
468 if ( !(hndl->dev->caps & CAP_DEPTH))
469 hndl->opt[OPT_DEPTH].cap |= SANE_CAP_INACTIVE;
474 hndl->opt[OPT_GEOMETRY_GROUP].title = "Geometry";
475 hndl->opt[OPT_GEOMETRY_GROUP].desc = "";
476 hndl->opt[OPT_GEOMETRY_GROUP].type = SANE_TYPE_GROUP;
477 hndl->opt[OPT_GEOMETRY_GROUP].cap = SANE_CAP_ADVANCED;
478 hndl->opt[OPT_GEOMETRY_GROUP].constraint_type = SANE_CONSTRAINT_NONE;
479 hndl->opt[OPT_GEOMETRY_GROUP].size = 0;
482 hndl->opt[OPT_TL_X].name = SANE_NAME_SCAN_TL_X;
483 hndl->opt[OPT_TL_X].title = SANE_TITLE_SCAN_TL_X;
484 hndl->opt[OPT_TL_X].desc = SANE_DESC_SCAN_TL_X;
485 hndl->opt[OPT_TL_X].type = SANE_TYPE_FIXED;
486 hndl->opt[OPT_TL_X].unit = SANE_UNIT_MM;
487 hndl->opt[OPT_TL_X].constraint_type = SANE_CONSTRAINT_RANGE;
488 hndl->opt[OPT_TL_X].constraint.range = &hndl->x_range;
489 hndl->x_range.min = SANE_FIX (0);
490 hndl->x_range.max = SANE_FIX (PIXEL_TO_MM(hndl->dev->maxhsize,hndl->dev->maxres));
491 hndl->x_range.quant = 0;
492 hndl->val[OPT_TL_X].w = hndl->x_range.min;
495 hndl->opt[OPT_TL_Y].name = SANE_NAME_SCAN_TL_Y;
496 hndl->opt[OPT_TL_Y].title = SANE_TITLE_SCAN_TL_Y;
497 hndl->opt[OPT_TL_Y].desc = SANE_DESC_SCAN_TL_Y;
498 hndl->opt[OPT_TL_Y].type = SANE_TYPE_FIXED;
499 hndl->opt[OPT_TL_Y].unit = SANE_UNIT_MM;
500 hndl->opt[OPT_TL_Y].constraint_type = SANE_CONSTRAINT_RANGE;
501 hndl->opt[OPT_TL_Y].constraint.range = &hndl->y_range;
502 hndl->y_range.min = SANE_FIX(0);
503 hndl->y_range.max = SANE_FIX(PIXEL_TO_MM(hndl->dev->maxvsize,hndl->dev->maxres));
504 hndl->y_range.quant = 0;
505 hndl->val[OPT_TL_Y].w = hndl->y_range.min;
508 hndl->opt[OPT_BR_X].name = SANE_NAME_SCAN_BR_X;
509 hndl->opt[OPT_BR_X].title = SANE_TITLE_SCAN_BR_X;
510 hndl->opt[OPT_BR_X].desc = SANE_DESC_SCAN_BR_X;
511 hndl->opt[OPT_BR_X].type = SANE_TYPE_FIXED;
512 hndl->opt[OPT_BR_X].unit = SANE_UNIT_MM;
513 hndl->opt[OPT_BR_X].constraint_type = SANE_CONSTRAINT_RANGE;
514 hndl->opt[OPT_BR_X].constraint.range = &hndl->x_range;
515 hndl->val[OPT_BR_X].w = hndl->x_range.max;
518 hndl->opt[OPT_BR_Y].name = SANE_NAME_SCAN_BR_Y;
519 hndl->opt[OPT_BR_Y].title = SANE_TITLE_SCAN_BR_Y;
520 hndl->opt[OPT_BR_Y].desc = SANE_DESC_SCAN_BR_Y;
521 hndl->opt[OPT_BR_Y].type = SANE_TYPE_FIXED;
522 hndl->opt[OPT_BR_Y].unit = SANE_UNIT_MM;
523 hndl->opt[OPT_BR_Y].constraint_type = SANE_CONSTRAINT_RANGE;
524 hndl->opt[OPT_BR_Y].constraint.range = &hndl->y_range;
525 hndl->val[OPT_BR_Y].w = hndl->y_range.max;
529 hndl->opt[OPT_ENHANCEMENT_GROUP].title = "Enhancement";
530 hndl->opt[OPT_ENHANCEMENT_GROUP].desc = "";
531 hndl->opt[OPT_ENHANCEMENT_GROUP].type = SANE_TYPE_GROUP;
532 hndl->opt[OPT_ENHANCEMENT_GROUP].cap = 0;
533 hndl->opt[OPT_ENHANCEMENT_GROUP].constraint_type = SANE_CONSTRAINT_NONE;
534 hndl->opt[OPT_ENHANCEMENT_GROUP].size = 0;
538 hndl->opt[OPT_CUSTOM_GAMMA].name = SANE_NAME_CUSTOM_GAMMA;
539 hndl->opt[OPT_CUSTOM_GAMMA].title = SANE_TITLE_CUSTOM_GAMMA;
540 hndl->opt[OPT_CUSTOM_GAMMA].desc = SANE_DESC_CUSTOM_GAMMA;
541 hndl->opt[OPT_CUSTOM_GAMMA].type = SANE_TYPE_BOOL;
542 hndl->val[OPT_CUSTOM_GAMMA].w = SANE_FALSE;
544 if ( !(hndl->dev->caps & CAP_GAMMA_CORRECT))
545 hndl->opt[OPT_CUSTOM_GAMMA].cap |= SANE_CAP_INACTIVE;
548 hndl->opt[OPT_GAMMA_VECTOR].name = SANE_NAME_GAMMA_VECTOR;
549 hndl->opt[OPT_GAMMA_VECTOR].title = SANE_TITLE_GAMMA_VECTOR;
550 hndl->opt[OPT_GAMMA_VECTOR].desc = SANE_DESC_GAMMA_VECTOR;
551 hndl->opt[OPT_GAMMA_VECTOR].type = SANE_TYPE_INT;
552 hndl->opt[OPT_GAMMA_VECTOR].cap |= SANE_CAP_INACTIVE;
553 hndl->opt[OPT_GAMMA_VECTOR].unit = SANE_UNIT_NONE;
554 hndl->opt[OPT_GAMMA_VECTOR].size = 256 * sizeof (SANE_Word);
555 hndl->opt[OPT_GAMMA_VECTOR].constraint_type = SANE_CONSTRAINT_RANGE;
556 hndl->opt[OPT_GAMMA_VECTOR].constraint.range = &hndl->gamma_range;
557 hndl->val[OPT_GAMMA_VECTOR].wa = &hndl->gamma_table[0][0];
560 hndl->opt[OPT_GAMMA_VECTOR_R].name = SANE_NAME_GAMMA_VECTOR_R;
561 hndl->opt[OPT_GAMMA_VECTOR_R].title = SANE_TITLE_GAMMA_VECTOR_R;
562 hndl->opt[OPT_GAMMA_VECTOR_R].desc = SANE_DESC_GAMMA_VECTOR_R;
563 hndl->opt[OPT_GAMMA_VECTOR_R].type = SANE_TYPE_INT;
564 hndl->opt[OPT_GAMMA_VECTOR_R].cap |= SANE_CAP_INACTIVE;
565 hndl->opt[OPT_GAMMA_VECTOR_R].unit = SANE_UNIT_NONE;
566 hndl->opt[OPT_GAMMA_VECTOR_R].size = 256 * sizeof (SANE_Word);
567 hndl->opt[OPT_GAMMA_VECTOR_R].constraint_type = SANE_CONSTRAINT_RANGE;
568 hndl->opt[OPT_GAMMA_VECTOR_R].constraint.range = &hndl->gamma_range;
569 hndl->val[OPT_GAMMA_VECTOR_R].wa = &hndl->gamma_table[1][0];
572 hndl->opt[OPT_GAMMA_VECTOR_G].name = SANE_NAME_GAMMA_VECTOR_G;
573 hndl->opt[OPT_GAMMA_VECTOR_G].title = SANE_TITLE_GAMMA_VECTOR_G;
574 hndl->opt[OPT_GAMMA_VECTOR_G].desc = SANE_DESC_GAMMA_VECTOR_G;
575 hndl->opt[OPT_GAMMA_VECTOR_G].type = SANE_TYPE_INT;
576 hndl->opt[OPT_GAMMA_VECTOR_G].cap |= SANE_CAP_INACTIVE;
577 hndl->opt[OPT_GAMMA_VECTOR_G].unit = SANE_UNIT_NONE;
578 hndl->opt[OPT_GAMMA_VECTOR_G].size = 256 * sizeof (SANE_Word);
579 hndl->opt[OPT_GAMMA_VECTOR_G].constraint_type = SANE_CONSTRAINT_RANGE;
580 hndl->opt[OPT_GAMMA_VECTOR_G].constraint.range = &hndl->gamma_range;
581 hndl->val[OPT_GAMMA_VECTOR_G].wa = &hndl->gamma_table[2][0];
584 hndl->opt[OPT_GAMMA_VECTOR_B].name = SANE_NAME_GAMMA_VECTOR_B;
585 hndl->opt[OPT_GAMMA_VECTOR_B].title = SANE_TITLE_GAMMA_VECTOR_B;
586 hndl->opt[OPT_GAMMA_VECTOR_B].desc = SANE_DESC_GAMMA_VECTOR_B;
587 hndl->opt[OPT_GAMMA_VECTOR_B].type = SANE_TYPE_INT;
588 hndl->opt[OPT_GAMMA_VECTOR_B].cap |= SANE_CAP_INACTIVE;
589 hndl->opt[OPT_GAMMA_VECTOR_B].unit = SANE_UNIT_NONE;
590 hndl->opt[OPT_GAMMA_VECTOR_B].size = 256 * sizeof (SANE_Word);
591 hndl->opt[OPT_GAMMA_VECTOR_B].constraint_type = SANE_CONSTRAINT_RANGE;
592 hndl->opt[OPT_GAMMA_VECTOR_B].constraint.range = &hndl->gamma_range;
593 hndl->val[OPT_GAMMA_VECTOR_B].wa = &hndl->gamma_table[3][0];
595 hndl->gamma_range.min = 0;
596 hndl->gamma_range.max = 255;
597 hndl->gamma_range.quant = 1;
599 hndl->opt[OPT_INVERT].name = SANE_NAME_NEGATIVE;
600 hndl->opt[OPT_INVERT].title = SANE_TITLE_NEGATIVE;
601 hndl->opt[OPT_INVERT].desc = SANE_DESC_NEGATIVE;
602 hndl->opt[OPT_INVERT].type = SANE_TYPE_BOOL;
603 hndl->val[OPT_INVERT].w = SANE_FALSE;
605 if (! (hndl->dev->caps & CAP_INVERT))
606 hndl->opt[OPT_INVERT].cap |= SANE_CAP_INACTIVE;
995 Mustek_pp_Handle *hndl;
1003 hndl = first_hndl;
1004 sane_close (hndl);
1089 Mustek_pp_Handle *hndl;
1124 if ((hndl = malloc (sizeof (Mustek_pp_Handle))) == NULL) {
1139 hndl->next = first_hndl;
1140 hndl->dev = dev;
1141 hndl->fd = fd;
1142 hndl->state = STATE_IDLE;
1143 hndl->pipe = -1;
1145 init_options (hndl);
1147 dev->func->setup (hndl);
1154 status = dev->func->config (hndl,
1170 first_hndl = hndl;
1172 *handle = hndl;
1195 Mustek_pp_Handle *prev, *hndl;
1199 for (hndl = first_hndl; hndl; hndl = hndl->next)
1201 if (hndl == handle)
1203 prev = hndl;
1206 if (hndl == NULL)
1212 if (hndl->state == STATE_SCANNING) {
1218 prev->next = hndl->next;
1220 first_hndl = hndl->next;
1223 if (hndl->lamp_on)
1224 while (time (NULL) - hndl->lamp_on < 2)
1227 hndl->dev->func->close (hndl);
1245 Mustek_pp_Handle *hndl = handle;
1253 return hndl->opt + option;
1277 Mustek_pp_Handle *hndl = handle;
1284 if (hndl->state == STATE_SCANNING)
1296 cap = hndl->opt[option].cap;
1322 *(SANE_Word *) val = hndl->val[option].w;
1331 memcpy (val, hndl->val[option].wa, hndl->opt[option].size);
1338 strcpy (val, hndl->val[option].s);
1348 hndl->opt[option].name);
1352 status = sanei_constrain_value (hndl->opt + option, val, info);
1377 hndl->val[option].w = *(SANE_Word *) val;
1386 memcpy (hndl->val[option].wa, val, hndl->opt[option].size);
1392 if (hndl->val[option].s)
1393 free (hndl->val[option].s);
1395 hndl->val[option].s = strdup (val);
1404 if (w == hndl->val[OPT_CUSTOM_GAMMA].w)
1410 hndl->val[OPT_CUSTOM_GAMMA].w = w;
1414 const char *mode = hndl->val[OPT_MODE].s;
1417 hndl->opt[OPT_GAMMA_VECTOR].cap &= ~SANE_CAP_INACTIVE;
1420 hndl->opt[OPT_GAMMA_VECTOR].cap &= ~SANE_CAP_INACTIVE;
1421 hndl->opt[OPT_GAMMA_VECTOR_R].cap &= ~SANE_CAP_INACTIVE;
1422 hndl->opt[OPT_GAMMA_VECTOR_G].cap &= ~SANE_CAP_INACTIVE;
1423 hndl->opt[OPT_GAMMA_VECTOR_B].cap &= ~SANE_CAP_INACTIVE;
1428 hndl->opt[OPT_GAMMA_VECTOR].cap |= SANE_CAP_INACTIVE;
1429 hndl->opt[OPT_GAMMA_VECTOR_R].cap |= SANE_CAP_INACTIVE;
1430 hndl->opt[OPT_GAMMA_VECTOR_G].cap |= SANE_CAP_INACTIVE;
1431 hndl->opt[OPT_GAMMA_VECTOR_B].cap |= SANE_CAP_INACTIVE;
1438 char *old_val = hndl->val[option].s;
1451 hndl->val[option].s = strdup (val);
1453 hndl->opt[OPT_CUSTOM_GAMMA].cap |= SANE_CAP_INACTIVE;
1454 hndl->opt[OPT_GAMMA_VECTOR].cap |= SANE_CAP_INACTIVE;
1455 hndl->opt[OPT_GAMMA_VECTOR_R].cap |= SANE_CAP_INACTIVE;
1456 hndl->opt[OPT_GAMMA_VECTOR_G].cap |= SANE_CAP_INACTIVE;
1457 hndl->opt[OPT_GAMMA_VECTOR_B].cap |= SANE_CAP_INACTIVE;
1459 hndl->opt[OPT_DEPTH].cap |= SANE_CAP_INACTIVE;
1461 if ((hndl->dev->caps & CAP_DEPTH) && (strcmp(val, SANE_VALUE_SCAN_MODE_COLOR) == 0))
1462 hndl->opt[OPT_DEPTH].cap &= ~SANE_CAP_INACTIVE;
1464 if (!(hndl->dev->caps & CAP_GAMMA_CORRECT))
1468 hndl->opt[OPT_CUSTOM_GAMMA].cap &= ~SANE_CAP_INACTIVE;
1470 if (hndl->val[OPT_CUSTOM_GAMMA].w == SANE_TRUE)
1473 hndl->opt[OPT_GAMMA_VECTOR].cap &= ~SANE_CAP_INACTIVE;
1476 hndl->opt[OPT_GAMMA_VECTOR].cap &= ~SANE_CAP_INACTIVE;
1477 hndl->opt[OPT_GAMMA_VECTOR_R].cap &= ~SANE_CAP_INACTIVE;
1478 hndl->opt[OPT_GAMMA_VECTOR_G].cap &= ~SANE_CAP_INACTIVE;
1479 hndl->opt[OPT_GAMMA_VECTOR_B].cap &= ~SANE_CAP_INACTIVE;
1533 Mustek_pp_Handle *hndl = handle;
1537 if (hndl->state != STATE_SCANNING)
1541 memset (&hndl->params, 0, sizeof (hndl->params));
1544 if ((hndl->dev->caps & CAP_DEPTH) && (hndl->mode == MODE_COLOR))
1545 hndl->depth = hndl->val[OPT_DEPTH].w;
1547 hndl->depth = 8;
1549 dpi = (int) (SANE_UNFIX (hndl->val[OPT_RESOLUTION].w) + 0.5);
1551 hndl->res = dpi;
1553 if (hndl->dev->caps & CAP_INVERT)
1554 hndl->invert = hndl->val[OPT_INVERT].w;
1556 hndl->invert = SANE_FALSE;
1558 if (hndl->dev->caps & CAP_TA)
1559 hndl->use_ta = SANE_TRUE;
1561 hndl->use_ta = SANE_FALSE;
1563 if ((hndl->dev->caps & CAP_GAMMA_CORRECT) && (hndl->val[OPT_CUSTOM_GAMMA].w == SANE_TRUE))
1564 hndl->do_gamma = SANE_TRUE;
1566 hndl->do_gamma = SANE_FALSE;
1568 if (hndl->dev->caps & CAP_SPEED_SELECT) {
1571 if (strcmp(mustek_pp_speeds[ctr], hndl->val[OPT_SPEED].s) == 0)
1572 hndl->speed = ctr;
1577 hndl->speed = SPEED_NORMAL;
1579 mode = hndl->val[OPT_MODE].s;
1582 hndl->mode = MODE_BW;
1584 hndl->mode = MODE_GRAYSCALE;
1586 hndl->mode = MODE_COLOR;
1588 if (hndl->val[OPT_PREVIEW].w == SANE_TRUE)
1591 hndl->speed = SPEED_FASTEST;
1592 hndl->depth = 8;
1593 if (! hndl->use_ta)
1594 hndl->invert = SANE_FALSE;
1595 hndl->do_gamma = SANE_FALSE;
1597 if (hndl->val[OPT_GRAY_PREVIEW].w == SANE_TRUE)
1598 hndl->mode = MODE_GRAYSCALE;
1600 hndl->mode = MODE_COLOR;
1605 hndl->topX =
1607 (MM_TO_PIXEL (SANE_UNFIX(hndl->val[OPT_TL_X].w), hndl->dev->maxres) +
1608 0.5), hndl->dev->maxhsize);
1609 hndl->topY =
1611 (MM_TO_PIXEL (SANE_UNFIX(hndl->val[OPT_TL_Y].w), hndl->dev->maxres) +
1612 0.5), hndl->dev->maxvsize);
1614 hndl->bottomX =
1616 (MM_TO_PIXEL (SANE_UNFIX(hndl->val[OPT_BR_X].w), hndl->dev->maxres) +
1617 0.5), hndl->dev->maxhsize);
1618 hndl->bottomY =
1620 (MM_TO_PIXEL (SANE_UNFIX(hndl->val[OPT_BR_Y].w), hndl->dev->maxres) +
1621 0.5), hndl->dev->maxvsize);
1625 if (hndl->topX > hndl->bottomX) {
1626 SANE_Int tmp = hndl->topX;
1627 hndl->topX = hndl->bottomX;
1628 hndl->bottomX = tmp;
1630 if (hndl->topY > hndl->bottomY) {
1631 SANE_Int tmp = hndl->topY;
1632 hndl->topY = hndl->bottomY;
1633 hndl->bottomY = tmp;
1636 hndl->params.pixels_per_line = (hndl->bottomX - hndl->topX) * hndl->res
1637 / hndl->dev->maxres;
1639 hndl->params.bytes_per_line = hndl->params.pixels_per_line;
1641 switch (hndl->mode)
1645 hndl->params.bytes_per_line /= 8;
1647 if ((hndl->params.pixels_per_line % 8) != 0)
1648 hndl->params.bytes_per_line++;
1650 hndl->params.depth = 1;
1654 hndl->params.depth = 8;
1655 hndl->params.format = SANE_FRAME_GRAY;
1659 hndl->params.depth = hndl->depth;
1660 hndl->params.bytes_per_line *= 3;
1661 if (hndl->depth > 8)
1662 hndl->params.bytes_per_line *= 2;
1663 hndl->params.format = SANE_FRAME_RGB;
1668 hndl->params.last_frame = SANE_TRUE;
1670 hndl->params.lines = (hndl->bottomY - hndl->topY) * hndl->res /
1671 hndl->dev->maxres;
1677 *params = hndl->params;
1693 Mustek_pp_Handle *hndl = handle;
1696 if (hndl->state == STATE_SCANNING) {
1702 sane_get_parameters (hndl, NULL);
1710 hndl->reader = fork();
1712 if (hndl->reader == 0) {
1726 _exit (reader_process (hndl, pipeline[1]));
1732 hndl->pipe = pipeline[0];
1734 hndl->state = STATE_SCANNING;
1751 Mustek_pp_Handle *hndl = handle;
1755 if (hndl->state == STATE_CANCELLED) {
1757 do_eof (hndl);
1758 hndl->state = STATE_IDLE;
1762 if (hndl->state != STATE_SCANNING) {
1772 nread = read(hndl->pipe, buf + *len, max_len - *len);
1774 if (hndl->state == STATE_CANCELLED) {
1779 do_eof (hndl);
1780 hndl->state = STATE_IDLE;
1800 hndl->state = STATE_IDLE;
1801 do_stop(hndl);
1803 do_eof (hndl);
1818 do_stop(hndl);
1820 hndl->state = STATE_IDLE;
1822 return do_eof(hndl);
1850 Mustek_pp_Handle *hndl = handle;
1852 if (hndl->state != STATE_SCANNING)
1855 hndl->state = STATE_CANCELLED;
1857 do_stop (hndl);
1872 Mustek_pp_Handle *hndl=handle;
1874 if (hndl->state != STATE_SCANNING)
1878 if (fcntl (hndl->pipe, F_SETFL, non_blocking ? O_NONBLOCK : 0) < 0) {
1900 Mustek_pp_Handle *hndl=handle;
1902 if (hndl->state != STATE_SCANNING)
1905 *fd = hndl->pipe;