To: [email protected]
Subject: Patch 6.0ax.017
Fcc: outbox
From: Bram Moolenaar <[email protected]>
------------

Patch 6.0ax.017
Problem:    (1) The printing code was using "UL" and "f" after constants,
           these don't work with a non-ANSI compiler.
           (2) When 'printheader' includes items that can be long, could
           cause a crash.
           (3) PostScript printing: When the last line of a page is bold, the
           header of the next page would not be bold.
Solution:   (1) Use type casts instead.
           (2) Allocate more space for the resulting header.
           (3) Reset the attributes when starting a new page.
Files:      src/ex_cmds2.c


*** ../vim60ax.16/src/ex_cmds2.c        Tue Sep 18 11:14:13 2001
--- src/ex_cmds2.c      Mon Sep 24 22:44:52 2001
***************
*** 2451,2473 ****
 #ifdef FEAT_SYN_HL
 static const long_u  cterm_color_8[8] =
 {
!     0x000000UL, 0xff0000UL, 0x00ff00UL, 0xffff00UL,
!     0x0000ffUL, 0xff00ffUL, 0x00ffffUL, 0xffffffUL
 };

 static const long_u  cterm_color_16[16] =
 {
!     0x000000UL, 0x0000c0UL, 0x008000UL, 0x004080UL,
!     0xc00000UL, 0xc000c0UL, 0x808000UL, 0xc0c0c0UL,
!     0x808080UL, 0x6060ffUL, 0x00ff00UL, 0x00ffffUL,
!     0xff8080UL, 0xff40ffUL, 0xffff00UL, 0xffffffUL
 };

 static int            current_syn_id;
 #endif

! #define COLOR_BLACK   0UL
! #define COLOR_WHITE   0xFFFFFFUL

 static int    curr_italic;
 static int    curr_bold;
--- 2451,2473 ----
 #ifdef FEAT_SYN_HL
 static const long_u  cterm_color_8[8] =
 {
!     (long_u)0x000000, (long_u)0xff0000, (long_u)0x00ff00, (long_u)0xffff00,
!     (long_u)0x0000ff, (long_u)0xff00ff, (long_u)0x00ffff, (long_u)0xffffff
 };

 static const long_u  cterm_color_16[16] =
 {
!     (long_u)0x000000, (long_u)0x0000c0, (long_u)0x008000, (long_u)0x004080,
!     (long_u)0xc00000, (long_u)0xc000c0, (long_u)0x808000, (long_u)0xc0c0c0,
!     (long_u)0x808080, (long_u)0x6060ff, (long_u)0x00ff00, (long_u)0x00ffff,
!     (long_u)0xff8080, (long_u)0xff40ff, (long_u)0xffff00, (long_u)0xffffff
 };

 static int            current_syn_id;
 #endif

! #define COLOR_BLACK   (long_u)0
! #define COLOR_WHITE   (long_u)0xFFFFFF

 static int    curr_italic;
 static int    curr_bold;
***************
*** 2573,2579 ****
     char_u    tbuf[20];

     if (psettings->has_color)
!       prt_set_fg(0x808080UL);
     else
       prt_set_fg(COLOR_BLACK);
     prt_set_bg(COLOR_WHITE);
--- 2573,2579 ----
     char_u    tbuf[20];

     if (psettings->has_color)
!       prt_set_fg((long_u)0x808080);
     else
       prt_set_fg(COLOR_BLACK);
     prt_set_bg(COLOR_WHITE);
***************
*** 2673,2679 ****
     if (prt_use_number())
       width += PRINT_NUMBER_WIDTH;

!     tbuf = alloc(width + 1);
     if (tbuf == NULL)
       return;

--- 2673,2679 ----
     if (prt_use_number())
       width += PRINT_NUMBER_WIDTH;

!     tbuf = alloc(width + IOSIZE);
     if (tbuf == NULL)
       return;

***************
*** 2822,2829 ****
     }

     /* Set colors and font to normal. */
!     curr_bg = 0xffffffffUL;
!     curr_fg = 0xffffffffUL;
     curr_italic = MAYBE;
     curr_bold = MAYBE;
     curr_underline = MAYBE;
--- 2822,2829 ----
     }

     /* Set colors and font to normal. */
!     curr_bg = (long_u)0xffffffff;
!     curr_fg = (long_u)0xffffffff;
     curr_italic = MAYBE;
     curr_bold = MAYBE;
     curr_underline = MAYBE;
***************
*** 3178,3197 ****

 static struct prt_mediasize_S prt_mediasize[] =
 {
!     {"A4",            595.0f,  842.0f},
!     {"letter",                612.0f,  792.0f},
!     {"10x14",         720.0f, 1008.0f},
!     {"A3",            842.0f, 1191.0f},
!     {"A5",            420.0f,  595.0f},
!     {"B4",            729.0f, 1032.0f},
!     {"B5",            516.0f,  729.0f},
!     {"executive",     522.0f,  756.0f},
!     {"folio",         595.0f,  935.0f},
!     {"ledger",               1224.0f,  792.0f},   /* Yes, it is wider than taller! */
!     {"legal",         612.0f, 1008.0f},
!     {"quarto",                610.0f,  780.0f},
!     {"statement",     396.0f,  612.0f},
!     {"tabloid",               792.0f, 1224.0f}
 };

 /* PS font names, must be in Roman, Bold, Italic, Bold-Italic order */
--- 3178,3197 ----

 static struct prt_mediasize_S prt_mediasize[] =
 {
!     {"A4",            595.0,  842.0},
!     {"letter",                612.0,  792.0},
!     {"10x14",         720.0, 1008.0},
!     {"A3",            842.0, 1191.0},
!     {"A5",            420.0,  595.0},
!     {"B4",            729.0, 1032.0},
!     {"B5",            516.0,  729.0},
!     {"executive",     522.0,  756.0},
!     {"folio",         595.0,  935.0},
!     {"ledger",               1224.0,  792.0},   /* Yes, it is wider than taller! */
!     {"legal",         612.0, 1008.0},
!     {"quarto",                610.0,  780.0},
!     {"statement",     396.0,  612.0},
!     {"tabloid",               792.0, 1224.0}
 };

 /* PS font names, must be in Roman, Bold, Italic, Bold-Italic order */
***************
*** 3291,3298 ****
 static float prt_char_width;
 static float prt_number_width;
 static float prt_bgcol_offset;
! static float prt_pos_x_moveto = 0.0f;
! static float prt_pos_y_moveto = 0.0f;

 /*
  * Various control variables used to decide when and how to change the
--- 3291,3298 ----
 static float prt_char_width;
 static float prt_number_width;
 static float prt_bgcol_offset;
! static float prt_pos_x_moveto = 0.0;
! static float prt_pos_y_moveto = 0.0;

 /*
  * Various control variables used to decide when and how to change the
***************
*** 3434,3443 ****
     if (real < (double)integer)
         fraction = -fraction;
     for (i = 0; i < precision; i++)
!         fraction *= 10.0f;

     *pinteger = integer;
!     *pfraction = (int)(fraction + 0.5f);
 }

 /*
--- 3434,3443 ----
     if (real < (double)integer)
         fraction = -fraction;
     for (i = 0; i < precision; i++)
!         fraction *= 10.0;

     *pinteger = integer;
!     *pfraction = (int)(fraction + 0.5);
 }

 /*
***************
*** 3491,3497 ****
 }

 /* Convert size from font space to user space at current font scale */
! #define PRT_PS_FONT_TO_USER(scale, size)    ((size) * ((scale)/1000.0f))

     static void
 prt_flush_buffer()
--- 3491,3497 ----
 }

 /* Convert size from font space to user space at current font scale */
! #define PRT_PS_FONT_TO_USER(scale, size)    ((size) * ((scale)/1000.0))

     static void
 prt_flush_buffer()
***************
*** 3749,3755 ****
           ret = (float)(nr * PRT_PS_DEFAULT_DPI);
           break;
       case PRT_UNIT_MM:
!           ret = (float)(nr * PRT_PS_DEFAULT_DPI) / 25.4f;
           break;
       case PRT_UNIT_POINT:
           ret = (float)nr;
--- 3749,3755 ----
           ret = (float)(nr * PRT_PS_DEFAULT_DPI);
           break;
       case PRT_UNIT_MM:
!           ret = (float)(nr * PRT_PS_DEFAULT_DPI) / 25.4;
           break;
       case PRT_UNIT_POINT:
           ret = (float)nr;
***************
*** 3799,3805 ****
       prt_left_margin += prt_number_width;
     }
     else
!       prt_number_width = 0.0f;

     return (int)((prt_right_margin - prt_left_margin) / prt_char_width);
 }
--- 3799,3805 ----
       prt_left_margin += prt_number_width;
     }
     else
!       prt_number_width = 0.0;

     return (int)((prt_right_margin - prt_left_margin) / prt_char_width);
 }
***************
*** 3819,3828 ****
      */
     prt_bgcol_offset = PRT_PS_FONT_TO_USER(prt_line_height,
                                          prt_ps_font.bbox_min_y);
!     if ((prt_ps_font.bbox_max_y - prt_ps_font.bbox_min_y) < 1000.0f)
     {
       prt_bgcol_offset -= PRT_PS_FONT_TO_USER(prt_line_height,
!                               (1000.0f - (prt_ps_font.bbox_max_y -
                                           prt_ps_font.bbox_min_y)) / 2);
     }

--- 3819,3828 ----
      */
     prt_bgcol_offset = PRT_PS_FONT_TO_USER(prt_line_height,
                                          prt_ps_font.bbox_min_y);
!     if ((prt_ps_font.bbox_max_y - prt_ps_font.bbox_min_y) < 1000.0)
     {
       prt_bgcol_offset -= PRT_PS_FONT_TO_USER(prt_line_height,
!                               (1000.0 - (prt_ps_font.bbox_max_y -
                                           prt_ps_font.bbox_min_y)) / 2);
     }

***************
*** 4315,4320 ****
--- 4315,4325 ----

     prt_dsc_noarg("EndPageSetup");

+     /* We have reset the font attributes, force setting them again. */
+     curr_bg = (long_u)0xffffffff;
+     curr_fg = (long_u)0xffffffff;
+     curr_bold = MAYBE;
+
     return !prt_file_error;
 }

***************
*** 4461,4467 ****
     prt_pos_x += prt_char_width;

     /* The downside of fp - need a little tolerance in the right margin check */
!     need_break = (prt_pos_x + prt_char_width > (prt_right_margin + 0.01f));

     if (need_break)
       prt_flush_buffer();
--- 4466,4472 ----
     prt_pos_x += prt_char_width;

     /* The downside of fp - need a little tolerance in the right margin check */
!     need_break = (prt_pos_x + prt_char_width > (prt_right_margin + 0.01));

     if (need_break)
       prt_flush_buffer();
*** ../vim60ax.16/src/version.c Mon Sep 24 22:03:42 2001
--- src/version.c       Mon Sep 24 22:55:25 2001
***************
*** 608,609 ****
--- 608,611 ----
 {   /* Add new patch number below this line */
+ /**/
+     17,
 /**/

--
Westheimer's Discovery:
       A couple of months in the laboratory can
       frequently save a couple of hours in the library.

///  Bram Moolenaar -- [email protected] -- http://www.moolenaar.net  \\\
(((   Creator of Vim -- http://vim.sf.net -- ftp://ftp.vim.org/pub/vim   )))
\\\  Help me helping AIDS orphans in Uganda - http://iccf-holland.org  ///