diff --git a/src/include/86box/prt_papersizes.h b/src/include/86box/prt_papersizes.h index e468abb35..f0c9e626a 100644 --- a/src/include/86box/prt_papersizes.h +++ b/src/include/86box/prt_papersizes.h @@ -28,27 +28,27 @@ #define LEDGER_PAGE_HEIGHT 17.0 /* Standard A0 */ -#define A0_PAGE_WIDTH 33.125 -#define A0_PAGE_HEIGHT 46.75 +#define A0_PAGE_WIDTH 33.110236 +#define A0_PAGE_HEIGHT 46.811023 /* Standard A1 */ -#define A1_PAGE_WIDTH 23.375 -#define A1_PAGE_HEIGHT 33.125 +#define A1_PAGE_WIDTH 23.385826 +#define A1_PAGE_HEIGHT 33.110236 /* Standard A2 */ -#define A2_PAGE_WIDTH 16.5 -#define A2_PAGE_HEIGHT 23.375 +#define A2_PAGE_WIDTH 16.535433 +#define A2_PAGE_HEIGHT 23.385826 /* Standard A3 */ -#define A3_PAGE_WIDTH 11.75 -#define A3_PAGE_HEIGHT 16.5 +#define A3_PAGE_WIDTH 11.692913 +#define A3_PAGE_HEIGHT 16.535433 /* Standard A4 */ -#define A4_PAGE_WIDTH 8.25 -#define A4_PAGE_HEIGHT 11.75 +#define A4_PAGE_WIDTH 8.267716 +#define A4_PAGE_HEIGHT 11.692913 /* Standard B4 */ -#define B4_PAGE_WIDTH 9.875 -#define B4_PAGE_HEIGHT 13.875 +#define B4_PAGE_WIDTH 9.8425197 +#define B4_PAGE_HEIGHT 13.897637 #endif /*EMU_PLAT_FALLTHROUGH_H*/ diff --git a/src/printer/prt_escp.c b/src/printer/prt_escp.c index e8ccb74f9..7164ec835 100644 --- a/src/printer/prt_escp.c +++ b/src/printer/prt_escp.c @@ -265,6 +265,8 @@ typedef struct escp_t { uint8_t ctrl; PALETTE palcol; + + uint8_t auto_lf; } escp_t; /* Codepage table, needed for ESC t ( */ @@ -540,7 +542,7 @@ init_codepage(escp_t *dev, uint16_t num) static void reset_printer(escp_t *dev) { - dev->top_margin = dev->left_margin = 0.0; + dev->top_margin = dev->left_margin = 1.0 / 36.0; dev->right_margin = dev->page_width; switch (dev->paper_size) { case PAPER_A4: @@ -556,7 +558,7 @@ reset_printer(escp_t *dev) default: dev->page_height = LETTER_PAGE_HEIGHT; } - dev->bottom_margin = dev->page_height; + dev->bottom_margin = dev->page_height - 1.0 / 36.0; /* TODO: these should be configurable. */ dev->color = COLOR_BLACK; dev->curr_x = dev->curr_y = 0.0; @@ -1749,7 +1751,7 @@ process_char(escp_t *dev, uint8_t ch) case 0x0d: /* Carriage Return (CR) */ dev->curr_x = dev->left_margin; - if (!dev->autofeed) + if (!dev->autofeed && !dev->auto_lf) return 1; fallthrough; @@ -2214,7 +2216,9 @@ escp_init(const device_t *info) dev->page_height = LETTER_PAGE_HEIGHT; } - dev->dpi = dev->lang >= LANG_ESCP ? 360 : 240; + dev->auto_lf = device_get_config_int("auto_lf"); + + dev->dpi = dev->lang >= LANG_ESCP ? 360 : 240; /* Create 8-bit grayscale buffer for the page. */ dev->page = (psurface_t *) malloc(sizeof(psurface_t)); @@ -2328,6 +2332,17 @@ static const device_config_t lpt_prt_escp_config[] = { }, .bios = { { 0 } } }, + { + .name = "auto_lf", + .description = "Auto LF", + .type = CONFIG_BINARY, + .default_string = NULL, + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { { 0 } } + }, { .name = "", .description = "", .type = CONFIG_END } }; // clang-format on