home *** CD-ROM | disk | FTP | other *** search
/ swCHIP 1991 January / swCHIP_95-1.bin / utility / gs333w32 / gs3.33 / readme.w32 < prev   
Text File  |  1995-12-09  |  37KB  |  1,140 lines

  1. To run Aladdin Ghostscript 3.33 you also need gs333ini.zip
  2. obtained from the same place as this zip file
  3.  
  4. This EXE is for Win32s.
  5.  
  6. This is Aladdin Ghostscript 3.33 with the following patches.
  7. The patches are:
  8. 1. Add mswinpr2 device for Win16 and Win32.  This is a new driver -
  9.    please report any problems to rjl@aladdin.com.
  10. 2. Turn on optimiser for OS/2
  11. 3. Add PDF support to Win32 and OS/2
  12. 4. Add more device support for Win32 and OS/2
  13. 5. Fix bug in laserjet family devices.
  14. 6. Avoid BC++ 4.5 compiler objection to gdevlbp8.c
  15. 7. Fix printing under Windows 95
  16. 8. Fix resize lockup problem under Windows 95.
  17.  
  18. Compilation has been with BC++ 4.5 for Win16 and Win32,
  19. and with GCC/EMX 0.9a for OS/2.
  20.  
  21. rjl 1995-05-23
  22.  
  23.  
  24. diff -cr ./bcwin.mak ../bcwin.mak
  25. *** ./bcwin.mak    Mon Mar 27 01:44:24 1995
  26. --- ../bcwin.mak    Sat Apr 29 08:41:04 1995
  27. ***************
  28. *** 194,200 ****
  29.   LCT=/v
  30.   !else
  31.   CT=-y
  32. ! LCT=/m /l
  33.   !endif
  34.   
  35.   GENOPT=$(CP) $(CS) $(CD) $(CT)
  36. --- 194,200 ----
  37.   LCT=/v
  38.   !else
  39.   CT=-y
  40. ! LCT=/m /l /s
  41.   !endif
  42.   
  43.   GENOPT=$(CP) $(CS) $(CD) $(CT)
  44. ***************
  45. *** 230,238 ****
  46.   # Choose the device(s) to include.  See devs.mak for details.
  47.   
  48.   !if $(GSDLL)
  49. ! DEVICE_DEVS=mswindll.dev mswin.dev mswinprn.dev
  50.   !else
  51. ! DEVICE_DEVS=mswin.dev mswinprn.dev
  52.   !endif
  53.   DEVICE_DEVS3=deskjet.dev djet500.dev laserjet.dev ljetplus.dev ljet2p.dev ljet3.dev ljet4.dev
  54.   DEVICE_DEVS4=cdeskjet.dev cdjcolor.dev cdjmono.dev cdj550.dev pj.dev pjxl.dev pjxl300.dev
  55. --- 230,238 ----
  56.   # Choose the device(s) to include.  See devs.mak for details.
  57.   
  58.   !if $(GSDLL)
  59. ! DEVICE_DEVS=mswindll.dev mswin.dev mswinprn.dev mswinpr2.dev
  60.   !else
  61. ! DEVICE_DEVS=mswin.dev mswinprn.dev mswinpr2.dev
  62.   !endif
  63.   DEVICE_DEVS3=deskjet.dev djet500.dev laserjet.dev ljetplus.dev ljet2p.dev ljet3.dev ljet4.dev
  64.   DEVICE_DEVS4=cdeskjet.dev cdjcolor.dev cdjmono.dev cdj550.dev pj.dev pjxl.dev pjxl300.dev
  65. diff -cr ./bcwin32.mak ../bcwin32.mak
  66. *** ./bcwin32.mak    Sat Mar 18 16:27:54 1995
  67. --- ../bcwin32.mak    Tue May 16 07:55:16 1995
  68. ***************
  69. *** 207,228 ****
  70.   
  71.   # Choose the language feature(s) to include.  See gs.mak for details.
  72.   # Since we only support running in enhanced mode, which provides
  73. ! # virtual memory, we include a fair number of drivers, but we still can't
  74. ! # exceed 64K of static data.
  75.   
  76. ! FEATURE_DEVS=level2.dev
  77.   
  78.   # Choose the device(s) to include.  See devs.mak for details.
  79.   
  80.   !if $(GSDLL)
  81. ! DEVICE_DEVS=mswindll.dev mswin.dev mswinprn.dev
  82.   !else
  83. ! DEVICE_DEVS=mswin.dev mswinprn.dev
  84.   !endif
  85.   DEVICE_DEVS3=deskjet.dev djet500.dev laserjet.dev ljetplus.dev ljet2p.dev ljet3.dev ljet4.dev
  86.   DEVICE_DEVS4=cdeskjet.dev cdjcolor.dev cdjmono.dev cdj550.dev pj.dev pjxl.dev pjxl300.dev
  87. ! DEVICE_DEVS6=epson.dev eps9high.dev ibmpro.dev st800.dev bj10e.dev bj200.dev
  88. ! DEVICE_DEVS8=bmpmono.dev bmp16.dev bmp256.dev bmp16m.dev pcxmono.dev pcx16.dev pcx256.dev
  89.   DEVICE_DEVS9=psmono.dev bit.dev bitrgb.dev bitcmyk.dev
  90.   DEVICE_DEVS10=tiffcrle.dev tiffg3.dev tiffg32d.dev tiffg4.dev tifflzw.dev tiffpack.dev
  91.   !include "gs.mak"
  92. --- 207,230 ----
  93.   
  94.   # Choose the language feature(s) to include.  See gs.mak for details.
  95.   # Since we only support running in enhanced mode, which provides
  96. ! # virtual memory, we include a fair number of drivers, 
  97.   
  98. ! FEATURE_DEVS=level2.dev pdf.dev
  99.   
  100.   # Choose the device(s) to include.  See devs.mak for details.
  101.   
  102.   !if $(GSDLL)
  103. ! DEVICE_DEVS=mswindll.dev mswin.dev mswinprn.dev mswinpr2.dev
  104.   !else
  105. ! DEVICE_DEVS=mswin.dev mswinprn.dev mswinpr2.dev
  106.   !endif
  107. + DEVICE_DEVS2=epson.dev eps9high.dev eps9mid.dev epsonc.dev ibmpro.dev
  108.   DEVICE_DEVS3=deskjet.dev djet500.dev laserjet.dev ljetplus.dev ljet2p.dev ljet3.dev ljet4.dev
  109.   DEVICE_DEVS4=cdeskjet.dev cdjcolor.dev cdjmono.dev cdj550.dev pj.dev pjxl.dev pjxl300.dev
  110. ! DEVICE_DEVS5=djet500c.dev declj250.dev lj250.dev jetp3852.dev r4081.dev lbp8.dev
  111. ! DEVICE_DEVS6=st800.dev stcolor.dev bj10e.dev bj200.dev m8510.dev necp6.dev
  112. ! DEVICE_DEVS7=t4693d2.dev t4693d4.dev t4693d8.dev tek4696.dev
  113. ! DEVICE_DEVS8=bmpmono.dev bmp16.dev bmp256.dev bmp16m.dev pcxmono.dev pcxgray.dev pcx16.dev pcx256.dev pcx24b.dev
  114.   DEVICE_DEVS9=psmono.dev bit.dev bitrgb.dev bitcmyk.dev
  115.   DEVICE_DEVS10=tiffcrle.dev tiffg3.dev tiffg32d.dev tiffg4.dev tifflzw.dev tiffpack.dev
  116.   !include "gs.mak"
  117. diff -cr ./devs.mak ../devs.mak
  118. *** ./devs.mak    Fri Mar 31 15:01:32 1995
  119. --- ../devs.mak    Sat Apr 29 08:35:48 1995
  120. ***************
  121. *** 45,51 ****
  122.   #   MS Windows:
  123.   #    mswin    Microsoft Windows 3.0, 3.1   [MS Windows only]
  124.   #    mswindll  Microsoft Windows 3.1 DLL    [MS Windows only]
  125. ! #    mswinprn  Microsoft Windows 3.0, 3.1 printer   [MS Windows only]
  126.   #   OS/2:
  127.   # *    os2pm    OS/2 Presentation Manager   [OS/2 only]
  128.   # *    os2dll    OS/2 DLL bitmap             [OS/2 only]
  129. --- 45,52 ----
  130.   #   MS Windows:
  131.   #    mswin    Microsoft Windows 3.0, 3.1   [MS Windows only]
  132.   #    mswindll  Microsoft Windows 3.1 DLL    [MS Windows only]
  133. ! #    mswinprn  Microsoft Windows 3.0, 3.1 DDB printer   [MS Windows only]
  134. ! #    mswinpr2  Microsoft Windows 3.0, 3.1 DIB printer [MS Windows only]
  135.   #   OS/2:
  136.   # *    os2pm    OS/2 Presentation Manager   [OS/2 only]
  137.   # *    os2dll    OS/2 DLL bitmap             [OS/2 only]
  138. ***************
  139. *** 399,411 ****
  140.   mswindll.dev: $(mswindll_)
  141.       $(SETDEV) mswindll $(mswindll_)
  142.   
  143. ! ### -------------------- The MS-Windows 3.n printer --------------------- ###
  144.   
  145.   mswinprn_=gdevwprn.$(OBJ) gdevmsxf.$(OBJ)
  146.   mswinprn.dev: $(mswinprn_)
  147.       $(SETDEV) mswinprn $(mswinprn_)
  148.   
  149.   gdevwprn.$(OBJ): gdevwprn.c $(gdevmswn_h) $(gp_h)
  150.   
  151.   ### ------------------ OS/2 Presentation Manager device ----------------- ###
  152.   
  153. --- 400,420 ----
  154.   mswindll.dev: $(mswindll_)
  155.       $(SETDEV) mswindll $(mswindll_)
  156.   
  157. ! ### -------------------- The MS-Windows DDB 3.n printer ----------------- ###
  158.   
  159.   mswinprn_=gdevwprn.$(OBJ) gdevmsxf.$(OBJ)
  160.   mswinprn.dev: $(mswinprn_)
  161.       $(SETDEV) mswinprn $(mswinprn_)
  162.   
  163.   gdevwprn.$(OBJ): gdevwprn.c $(gdevmswn_h) $(gp_h)
  164. + ### -------------------- The MS-Windows DIB 3.n printer ----------------- ###
  165. + mswinpr2_=gdevwpr2.$(OBJ) gdevprn.$(OBJ)
  166. + mswinpr2.dev: $(mswinpr2_)
  167. +     $(SETDEV) mswinpr2 $(mswinpr2_)
  168. + gdevwpr2.$(OBJ): gdevwpr2.c $(gdevmswn_h) $(gp_h)
  169.   
  170.   ### ------------------ OS/2 Presentation Manager device ----------------- ###
  171.   
  172. diff -cr ./gdevdjet.c ../gdevdjet.c
  173. *** ./gdevdjet.c    Thu Feb 09 14:43:42 1995
  174. --- ../gdevdjet.c    Fri Apr 28 07:32:08 1995
  175. ***************
  176. *** 285,296 ****
  177.   /* hpjet_close is only here to eject odd numbered pages in duplex mode. */
  178.   private int
  179.   hpjet_close(gx_device *pdev)
  180. ! {    if ( pdev->Duplex_set >= 0 && pdev->Duplex )
  181. !       {    gdev_prn_open_printer(pdev, 1);
  182. !         fputs("\033&l0H", ppdev->file) ;
  183. !         return gdev_prn_close_printer(pdev);
  184. !       }
  185. !     return 0;
  186.   }
  187.   
  188.   #undef ppdev
  189. --- 285,295 ----
  190.   /* hpjet_close is only here to eject odd numbered pages in duplex mode. */
  191.   private int
  192.   hpjet_close(gx_device *pdev)
  193. ! {       if ( pdev->Duplex_set >= 0 && pdev->Duplex )
  194. !           {     gdev_prn_open_printer(pdev, 1);
  195. !                 fputs("\033&l0H", ppdev->file) ;
  196. !           }
  197. !         return gdev_prn_close(pdev);
  198.   }
  199.   
  200.   #undef ppdev
  201. diff -cr ./gdevlbp8.c ../gdevlbp8.c
  202. *** ./gdevlbp8.c    Thu Apr 27 19:20:48 1995
  203. --- ../gdevlbp8.c    Thu Apr 27 19:25:44 1995
  204. ***************
  205. *** 58,65 ****
  206.     CSI, '7', ' ', 'I',    /* select unit size (300dpi)*/
  207.   };
  208.   
  209. ! static const char lbp8_end[] = {
  210. ! };
  211.   
  212.   static const char lips3_init[] = {
  213.     ESC, '<', /* soft reset */
  214. --- 58,64 ----
  215.     CSI, '7', ' ', 'I',    /* select unit size (300dpi)*/
  216.   };
  217.   
  218. ! static const char *lbp8_end = NULL;
  219.   
  220.   static const char lips3_init[] = {
  221.     ESC, '<', /* soft reset */
  222. ***************
  223. *** 137,143 ****
  224.       fprintf(prn_stream, "%c=", ESC);
  225.   
  226.       /* terminate */
  227. !     fwrite(end, end_size, 1, prn_stream);
  228.   
  229.       return 0;
  230.   }
  231. --- 136,143 ----
  232.       fprintf(prn_stream, "%c=", ESC);
  233.   
  234.       /* terminate */
  235. !     if (end != NULL)
  236. !         fwrite(end, end_size, 1, prn_stream);
  237.   
  238.       return 0;
  239.   }
  240. diff -cr ./gdevmswn.c ../gdevmswn.c
  241. *** ./gdevmswn.c    Tue May 16 19:27:46 1995
  242. --- ../gdevmswn.c    Tue May 16 21:51:02 1995
  243. ***************
  244. *** 911,916 ****
  245. --- 911,928 ----
  246.                   DragAcceptFiles(hwnd, FALSE);
  247.               break;
  248.   #endif
  249. +         case WM_NCHITTEST:
  250. +             if (gsview) {
  251. +                 LRESULT lresult;
  252. +                 lresult = DefWindowProc(hwnd, message, wParam, lParam);
  253. +                 /* Under Windows 95, the bottom right of client window */
  254. +                 /* is classed as a resizing border */
  255. +                 /* Disable this to avoid lockups */
  256. +                 if (lresult == HTBOTTOMRIGHT)
  257. +                 return HTNOWHERE;
  258. +                 return lresult;
  259. +             }
  260. +             break;
  261.       }
  262.   
  263.   not_ours:
  264. diff -cr ./gdevwpr2.c ../gdevwpr2.c
  265. *** ./gdevwpr2.c    Sat Apr 29 12:13:46 1995
  266. --- ../gdevwpr2.c    Sat Apr 29 09:07:00 1995
  267. ***************
  268. *** 0 ****
  269. --- 1,439 ----
  270. + /* Copyright (C) 1989, 1995 Aladdin Enterprises.  All rights reserved.
  271. +   
  272. +   This file is part of Aladdin Ghostscript.
  273. +   
  274. +   Aladdin Ghostscript is distributed with NO WARRANTY OF ANY KIND.  No author
  275. +   or distributor accepts any responsibility for the consequences of using it,
  276. +   or for whether it serves any particular purpose or works at all, unless he
  277. +   or she says so in writing.  Refer to the Aladdin Ghostscript Free Public
  278. +   License (the "License") for full details.
  279. +   
  280. +   Every copy of Aladdin Ghostscript must include a copy of the License,
  281. +   normally in a plain ASCII text file named PUBLIC.  The License grants you
  282. +   the right to copy, modify and redistribute Aladdin Ghostscript, but only
  283. +   under certain conditions described in the License.  Among other things, the
  284. +   License requires that the copyright notice and this notice be preserved on
  285. +   all copies.
  286. + */
  287. + /* gdevwpr2.c */
  288. + /*
  289. +  * Microsoft Windows 3.n printer driver for Ghostscript.
  290. +  * Original version by Russell Lang and
  291. +  * L. Peter Deutsch, Aladdin Enterprises.
  292. +  * Modified by rjl 1995-03-29 to use BMP printer code
  293. +  */
  294. + #include "gdevprn.h"
  295. + #include "gdevpccm.h"
  296. + #include "windows_.h"
  297. + #include <shellapi.h>
  298. + #include "gp_mswin.h"
  299. + #include "gp.h"
  300. + #include "commdlg.h"
  301. + /* Make sure we cast to the correct structure type. */
  302. + typedef struct gx_device_win_pr2_s gx_device_win_pr2;
  303. + #undef wdev
  304. + #define wdev ((gx_device_win_pr2 *)dev)
  305. + /* Device procedures */
  306. + /* See gxdevice.h for the definitions of the procedures. */
  307. + private dev_proc_open_device(win_pr2_open);
  308. + private dev_proc_close_device(win_pr2_close);
  309. + private dev_proc_print_page(win_pr2_print_page);
  310. + private dev_proc_map_rgb_color(win_pr2_map_rgb_color);
  311. + private dev_proc_map_color_rgb(win_pr2_map_color_rgb);
  312. + private dev_proc_put_params(win_pr2_put_params);
  313. + private void win_pr2_set_bpp(gx_device *dev, int depth);
  314. + private gx_device_procs win_pr2_procs =
  315. +   prn_color_params_procs(win_pr2_open, gdev_prn_output_page, win_pr2_close,
  316. +    win_pr2_map_rgb_color, win_pr2_map_color_rgb, 
  317. +    gdev_prn_get_params, win_pr2_put_params);
  318. + /* The device descriptor */
  319. + typedef struct gx_device_win_pr2_s gx_device_win_pr2;
  320. + struct gx_device_win_pr2_s {
  321. +     gx_device_common;
  322. +     gx_prn_device_common;
  323. +     HDC hdcprn;
  324. +     DLGPROC lpfnAbortProc;
  325. +     DLGPROC lpfnCancelProc;
  326. + };
  327. + gx_device_win_pr2 far_data gs_mswinpr2_device = {
  328. +   prn_device_std_body(gx_device_printer, win_pr2_procs, "mswinpr2",
  329. +   DEFAULT_WIDTH_10THS, DEFAULT_HEIGHT_10THS, 72, 72,
  330. +   0, 0, 0, 0,
  331. +   0, win_pr2_print_page), /* depth = 0 */
  332. +   0,    /* hdcprn */
  333. +   NULL    /* lpfnAbortProc */
  334. + };
  335. + /* Open the win_pr2 driver */
  336. + private int
  337. + win_pr2_open(gx_device *dev)
  338. + {    int code;
  339. +     int depth;
  340. +     PRINTDLG pd;
  341. +     POINT offset;
  342. +     POINT size;
  343. +     float m[4];
  344. +     FILE *pfile;
  345. +     if (hDlgModeless) {
  346. +         /* device cannot opened twice since only one hDlgModeless */
  347. +         return gs_error_limitcheck;
  348. +     }
  349. +     /* get a HDC for the printer */
  350. +     memset(&pd, 0, sizeof(PRINTDLG));
  351. +     pd.lStructSize = sizeof(PRINTDLG);
  352. +     pd.hwndOwner = hwndtext;
  353. +     pd.Flags = PD_PRINTSETUP | PD_RETURNDC;
  354. +     if (!PrintDlg(&pd)) {
  355. +         /* device not opened - exit ghostscript */
  356. +         return gs_error_limitcheck;
  357. +     }
  358. +     GlobalFree(pd.hDevMode);
  359. +     GlobalFree(pd.hDevNames);
  360. +     pd.hDevMode = pd.hDevNames = NULL;
  361. +     wdev->hdcprn = pd.hDC;
  362. +     if (!(GetDeviceCaps(wdev->hdcprn, RASTERCAPS) != RC_BITBLT)) {
  363. +         DeleteDC(wdev->hdcprn);
  364. +         return gs_error_limitcheck;
  365. +     }
  366. +     /* initialise printer, install abort proc */
  367. + #ifdef __WIN32__
  368. +     wdev->lpfnAbortProc = (DLGPROC)AbortProc;
  369. + #else
  370. + #ifdef __DLL__
  371. +     wdev->lpfnAbortProc = (DLGPROC)GetProcAddress(phInstance, "AbortProc");
  372. + #else
  373. +     wdev->lpfnAbortProc = (DLGPROC)MakeProcInstance((FARPROC)AbortProc,phInstance);
  374. + #endif
  375. + #endif
  376. +     Escape(wdev->hdcprn,SETABORTPROC,0,(LPSTR)wdev->lpfnAbortProc,NULL);  
  377. +     if (Escape(wdev->hdcprn, STARTDOC, lstrlen(szAppName), szAppName, NULL) <= 0) {
  378. +         FreeProcInstance((FARPROC)wdev->lpfnAbortProc);
  379. +         DeleteDC(wdev->hdcprn);
  380. +         return gs_error_limitcheck;
  381. +     }
  382. +     dev->x_pixels_per_inch = GetDeviceCaps(wdev->hdcprn, LOGPIXELSX);
  383. +     dev->y_pixels_per_inch = GetDeviceCaps(wdev->hdcprn, LOGPIXELSY);
  384. +     Escape(wdev->hdcprn, GETPHYSPAGESIZE, NULL, NULL, (LPPOINT)&size);
  385. +     dev->width = size.x;
  386. +     dev->height = size.y;
  387. +     Escape(wdev->hdcprn, GETPRINTINGOFFSET, NULL, NULL, (LPPOINT)&offset);
  388. +     /* m[] gives margins in inches */
  389. +     m[0] /*left*/ = offset.x / dev->x_pixels_per_inch;
  390. +     m[3] /*top*/ = offset.y / dev->y_pixels_per_inch;
  391. +     m[2] /*right*/ =
  392. +         (size.x - offset.x - GetDeviceCaps(wdev->hdcprn, HORZRES))
  393. +          / dev->x_pixels_per_inch;
  394. +     m[1] /*bottom*/ =
  395. +         (size.y - offset.y - GetDeviceCaps(wdev->hdcprn, VERTRES))
  396. +          / dev->y_pixels_per_inch
  397. +         + 0.15;  /* hack to add a bit more margin for deskjet printer */
  398. +     gx_device_set_margins(dev, m, true);
  399. +     depth = dev->color_info.depth;
  400. +     if (depth == 0) {
  401. +         /* Set parameters that were unknown before opening device */
  402. +         /* Find out if the device supports color */
  403. +         /* We recognize 1, 3, 8 and 24 bit color devices */
  404. +         depth = GetDeviceCaps(wdev->hdcprn,PLANES) * GetDeviceCaps(wdev->hdcprn,BITSPIXEL);
  405. +     }
  406. +     win_pr2_set_bpp(dev, depth);
  407. +     /* gdev_prn_open opens a temporary file which we don't want */
  408. +     /* so we specify the name now so we can delete it later */
  409. +     pfile = gp_open_scratch_file(gp_scratch_file_name_prefix, 
  410. +         wdev->fname, "wb");
  411. +     fclose(pfile);
  412. +     code = gdev_prn_open(dev);
  413. +     /* inform user of progress with dialog box and allow cancel */
  414. + #ifdef __WIN32__
  415. +     wdev->lpfnCancelProc = (DLGPROC)CancelDlgProc;
  416. + #else
  417. + #ifdef __DLL__
  418. +     wdev->lpfnCancelProc = (DLGPROC)GetProcAddress(phInstance, "CancelDlgProc");
  419. + #else
  420. +     wdev->lpfnCancelProc = (DLGPROC)MakeProcInstance((FARPROC)CancelDlgProc, phInstance);
  421. + #endif
  422. + #endif
  423. +     hDlgModeless = CreateDialog(phInstance, "CancelDlgBox", hwndtext, wdev->lpfnCancelProc);
  424. +     ShowWindow(hDlgModeless, SW_HIDE);
  425. +     return code;
  426. + };
  427. + /* Close the win_pr2 driver */
  428. + private int
  429. + win_pr2_close(gx_device *dev)
  430. + {    int code;
  431. +     int aborted = FALSE;
  432. +     /* Free resources */
  433. +     if (!hDlgModeless)
  434. +         aborted = TRUE;
  435. +     DestroyWindow(hDlgModeless);
  436. +     hDlgModeless = 0;
  437. + #ifndef __DLL__
  438. +     FreeProcInstance((FARPROC)wdev->lpfnCancelProc);
  439. + #endif
  440. +     if (aborted)
  441. +         Escape(wdev->hdcprn,ABORTDOC,0,NULL,NULL);
  442. +     else
  443. +         Escape(wdev->hdcprn,ENDDOC,0,NULL,NULL);
  444. +     FreeProcInstance((FARPROC)wdev->lpfnAbortProc);
  445. +     DeleteDC(wdev->hdcprn);
  446. +     code = gdev_prn_close(dev);
  447. +     /* delete unwanted temporary file */
  448. +     unlink(wdev->fname);
  449. +     return code;
  450. + }
  451. + /* ------ Internal routines ------ */
  452. + #undef wdev
  453. + #define wdev ((gx_device_win_pr2 *)pdev)
  454. + /************************************************/
  455. + /* ------ Private definitions ------ */
  456. + /* new win_pr2_print_page routine */
  457. + /* Write BMP header to memory, then send bitmap to printer */
  458. + /* one scan line at a time */
  459. + private int
  460. + win_pr2_print_page(gx_device_printer *pdev, FILE *file)
  461. + {    int raster = gdev_prn_raster(pdev);
  462. +     /* BMP scan lines are padded to 32 bits. */
  463. +     ulong bmp_raster = raster + (-raster & 3);
  464. +     int height = pdev->height;
  465. +     int depth = pdev->color_info.depth;
  466. +     byte *row = (byte *)gs_malloc(bmp_raster, 1, "bmp file buffer");
  467. +     int y;
  468. +     int code = 0;            /* return code */
  469. +     MSG msg;
  470. +     char dlgtext[32];
  471. +     struct bmi_s {
  472. +         BITMAPINFOHEADER h;
  473. +         RGBQUAD pal[256];
  474. +     } bmi;
  475. +     if ( row == 0 )            /* can't allocate row buffer */
  476. +         return_error(gs_error_VMerror);
  477. +     /* Write the info header. */
  478. +     bmi.h.biSize = sizeof(bmi.h);
  479. +     bmi.h.biWidth = pdev->width;  /* wdev->mdev.width; */
  480. +     bmi.h.biHeight = height;
  481. +     bmi.h.biPlanes = 1;
  482. +     bmi.h.biBitCount = pdev->color_info.depth;
  483. +     bmi.h.biCompression = 0;
  484. +     bmi.h.biSizeImage = 0;            /* default */
  485. +     bmi.h.biXPelsPerMeter = 0;        /* default */
  486. +     bmi.h.biYPelsPerMeter = 0;        /* default */
  487. +     /* Write the palette. */
  488. +     if ( depth <= 8 )
  489. +     {    int i;
  490. +         gx_color_value rgb[3];
  491. +         LPRGBQUAD pq;
  492. +         bmi.h.biClrUsed = 1 << depth;
  493. +         bmi.h.biClrImportant = 1 << depth;
  494. +         for ( i = 0; i != 1 << depth; i++ )
  495. +         {    (*dev_proc(pdev, map_color_rgb))((gx_device *)pdev,
  496. +                 (gx_color_index)i, rgb);
  497. +             pq = &bmi.pal[i];
  498. +             pq->rgbRed   = gx_color_value_to_byte(rgb[0]);
  499. +             pq->rgbGreen = gx_color_value_to_byte(rgb[1]);
  500. +             pq->rgbBlue  = gx_color_value_to_byte(rgb[2]);
  501. +             pq->rgbReserved = 0;
  502. +         }
  503. +     }
  504. +     else {
  505. +         bmi.h.biClrUsed = 0;
  506. +         bmi.h.biClrImportant = 0;
  507. +     }
  508. +     sprintf(dlgtext, "Printing page %d", (int)(pdev->PageCount)+1);
  509. +     SetWindowText(GetDlgItem(hDlgModeless, CANCEL_PRINTING), dlgtext);
  510. +     ShowWindow(hDlgModeless, SW_SHOW);
  511. +     /* write the bits */
  512. +     for ( y = 0; y < height; y++) {
  513. +         gdev_prn_copy_scan_lines(pdev, y, row, raster);
  514. +         /* write top first, since most printers output this way, and */
  515. +             /* so less buffering is required by printer and printer driver */
  516. +         SetDIBitsToDevice(wdev->hdcprn, 0, y, pdev->width, 1,
  517. +         0, 0, 0, 1,
  518. +         row,
  519. +         (BITMAPINFO FAR *)&bmi, DIB_RGB_COLORS);
  520. +         if ((y & 15) == 0) {
  521. +             /* inform user of progress */
  522. +         sprintf(dlgtext, "%d%% done", (int)(y * 100L / height));
  523. +         SetWindowText(GetDlgItem(hDlgModeless, CANCEL_PCDONE), dlgtext);
  524. +         /* process message loop */
  525. +         while (PeekMessage(&msg, hDlgModeless, 0, 0, PM_REMOVE)) {
  526. +             if ((hDlgModeless == 0) || !IsDialogMessage(hDlgModeless, &msg)) {
  527. +             TranslateMessage(&msg);
  528. +             DispatchMessage(&msg);
  529. +             }
  530. +         }
  531. +         }
  532. +         if (hDlgModeless == 0) {
  533. +             /* user pressed cancel button */
  534. +         break;
  535. +         }
  536. +     }
  537. +     if (hDlgModeless == 0)
  538. +         code = gs_error_unknownerror;
  539. +     else {
  540. +         /* push out the page */
  541. +         SetWindowText(GetDlgItem(hDlgModeless, CANCEL_PCDONE), "Ejecting page...");
  542. +         Escape(wdev->hdcprn,NEWFRAME,0,NULL,NULL);
  543. +         ShowWindow(hDlgModeless, SW_HIDE);
  544. +     }
  545. + bmp_done:
  546. +     gs_free((char *)row, bmp_raster, 1, "bmp file buffer");
  547. +     return code;
  548. + }
  549. + /* combined color mappers */
  550. + /* 24-bit color mappers (taken from gdevmem2.c). */
  551. + /* Note that Windows expects RGB values in the order B,G,R. */
  552. + /* Map a r-g-b color to a color index. */
  553. + private gx_color_index
  554. + win_pr2_map_rgb_color(gx_device *dev, gx_color_value r, gx_color_value g,
  555. +   gx_color_value b)
  556. + {
  557. +     switch(dev->color_info.depth) {
  558. +       case 1:
  559. +     return gdev_prn_map_rgb_color(dev, r, g, b);
  560. +       case 4:
  561. +     /* use only 8 colors */
  562. +     return  (r > (gx_max_color_value / 2 + 1) ? 4 : 0) +
  563. +              (g > (gx_max_color_value / 2 + 1) ? 2 : 0) +
  564. +              (b > (gx_max_color_value / 2 + 1) ? 1 : 0) ;
  565. +       case 8:
  566. +     return pc_8bit_map_rgb_color(dev, r, g, b);
  567. +       case 24:
  568. +     return gx_color_value_to_byte(r) +
  569. +            ((uint)gx_color_value_to_byte(g) << 8) +
  570. +            ((ulong)gx_color_value_to_byte(b) << 16);
  571. +     }
  572. +     return 0; /* error */
  573. + }
  574. + /* Map a color index to a r-g-b color. */
  575. + private int
  576. + win_pr2_map_color_rgb(gx_device *dev, gx_color_index color,
  577. +   gx_color_value prgb[3])
  578. + {
  579. +     switch(dev->color_info.depth) {
  580. +       case 1:
  581. +     gdev_prn_map_color_rgb(dev, color, prgb);
  582. +     break;
  583. +       case 4:
  584. +     /* use only 8 colors */
  585. +     prgb[0] = (color & 4) ? gx_max_color_value : 0;
  586. +     prgb[1] = (color & 2) ? gx_max_color_value : 0;
  587. +     prgb[2] = (color & 1) ? gx_max_color_value : 0;
  588. +     break;
  589. +       case 8:
  590. +     pc_8bit_map_color_rgb(dev, color, prgb);
  591. +     break;
  592. +       case 24:
  593. +     prgb[2] = gx_color_value_from_byte(color >> 16);
  594. +     prgb[1] = gx_color_value_from_byte((color >> 8) & 0xff);
  595. +     prgb[0] = gx_color_value_from_byte(color & 0xff);
  596. +     break;
  597. +     }
  598. +     return 0;
  599. + }
  600. + void
  601. + win_pr2_set_bpp(gx_device *dev, int depth)
  602. + {
  603. +     if (depth > 8) {
  604. +         static const gx_device_color_info win_pr2_24color = dci_std_color(24);
  605. +         dev->color_info = win_pr2_24color;
  606. +     }
  607. +     else if ( depth >= 8 ) {
  608. +         /* 8-bit (SuperVGA-style) color. */
  609. +         /* (Uses a fixed palette of 3,3,2 bits.) */
  610. +         static const gx_device_color_info win_pr2_8color = dci_pc_8bit;
  611. +         dev->color_info = win_pr2_8color;
  612. +     }
  613. +     else if ( depth >= 3) {
  614. +         /* 3 plane printer */
  615. +         /* suitable for impact dot matrix CMYK printers */
  616. +         /* create 4-bit bitmap, but only use 8 colors */
  617. +         static const gx_device_color_info win_pr2_4color = {3, 4, 1, 1, 2, 2};
  618. +         dev->color_info = win_pr2_4color;
  619. +     }
  620. +     else {   /* default is black_and_white */
  621. +         static const gx_device_color_info win_pr2_1color = dci_std_color(1);
  622. +         dev->color_info = win_pr2_1color;
  623. +     }
  624. + }
  625. + /* We implement this ourselves so that we can change BitsPerPixel */
  626. + /* before the device is opened */
  627. + int
  628. + win_pr2_put_params(gx_device *dev, gs_param_list *plist)
  629. + {    int ecode = 0, code;
  630. +     int old_bpp = dev->color_info.depth;
  631. +     int bpp = old_bpp;
  632. +     switch ( code = param_read_int(plist, "BitsPerPixel", &bpp) )
  633. +     {
  634. +     case 0:
  635. +         if ( dev->is_open )
  636. +           ecode = gs_error_rangecheck;
  637. +         else
  638. +           {    /* change dev->color_info is valid before device is opened */
  639. +             win_pr2_set_bpp(dev, bpp);
  640. +             break;
  641. +           }
  642. +         goto bppe;
  643. +     default:
  644. +         ecode = code;
  645. + bppe:        param_signal_error(plist, "BitsPerPixel", ecode);
  646. +     case 1:
  647. +         break;
  648. +     }
  649. +     if ( ecode >= 0 )
  650. +         ecode = gdev_prn_put_params(dev, plist);
  651. +     return ecode;
  652. + }
  653. diff -cr ./gp_mswin.c ../gp_mswin.c
  654. *** ./gp_mswin.c    Sat Feb 04 20:30:28 1995
  655. --- ../gp_mswin.c    Tue May 23 15:05:04 1995
  656. ***************
  657. *** 348,375 ****
  658.       unlink(win_prntmp);
  659.   }
  660.   
  661. ! #ifndef __WIN32__
  662. ! /* Windows does not provide API's in the SDK for writing directly to a */
  663. ! /* printer.  Instead you are supposed to use the Windows printer drivers. */
  664. ! /* Ghostscript has its own printer drivers, so we need to use some API's */
  665. ! /* that are documented only in the Device Driver Adaptation Guide */
  666. ! /* that comes with the DDK.  Prototypes taken from DDK <print.h> */
  667. ! DECLARE_HANDLE(HPJOB);
  668. ! HPJOB    WINAPI OpenJob(LPSTR, LPSTR, HPJOB);
  669. ! int    WINAPI StartSpoolPage(HPJOB);
  670. ! int    WINAPI EndSpoolPage(HPJOB);
  671. ! int    WINAPI WriteSpool(HPJOB, LPSTR, int);
  672. ! int    WINAPI CloseJob(HPJOB);
  673. ! int    WINAPI DeleteJob(HPJOB, int);
  674. ! int    WINAPI WriteDialog(HPJOB, LPSTR, int);
  675. ! int    WINAPI DeleteSpoolPage(HPJOB);
  676. ! #endif        /* WIN32 */
  677.   
  678.   HWND hDlgModeless;
  679.   
  680.   /* Modeless dialog box - Cancel printing */
  681.   BOOL CALLBACK _export
  682.   CancelDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
  683. --- 348,371 ----
  684.       unlink(win_prntmp);
  685.   }
  686.   
  687. ! /* Printer abort procedure and progress/cancel dialog box */
  688. ! /* Used by Win32 and mswinprn device */
  689.   
  690.   HWND hDlgModeless;
  691.   
  692. + BOOL CALLBACK _export
  693. + PrintAbortProc(HDC hdcPrn, int code)
  694. + {
  695. +     MSG msg;
  696. +     while (hDlgModeless && PeekMessage(&msg, 0, 0, 0, PM_REMOVE)) {
  697. +     if (hDlgModeless || !IsDialogMessage(hDlgModeless,&msg)) {
  698. +             TranslateMessage(&msg);
  699. +             DispatchMessage(&msg);
  700. +     }
  701. +     }
  702. +     return(hDlgModeless!=0);
  703. + }
  704.   /* Modeless dialog box - Cancel printing */
  705.   BOOL CALLBACK _export
  706.   CancelDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
  707. ***************
  708. *** 390,395 ****
  709. --- 386,411 ----
  710.       return FALSE;
  711.   }
  712.   
  713. + #ifndef __WIN32__
  714. + /* Windows does not provide API's in the SDK for writing directly to a */
  715. + /* printer.  Instead you are supposed to use the Windows printer drivers. */
  716. + /* Ghostscript has its own printer drivers, so we need to use some API's */
  717. + /* that are documented only in the Device Driver Adaptation Guide */
  718. + /* that comes with the DDK.  Prototypes taken from DDK <print.h> */
  719. + DECLARE_HANDLE(HPJOB);
  720. + HPJOB    WINAPI OpenJob(LPSTR, LPSTR, HPJOB);
  721. + int    WINAPI StartSpoolPage(HPJOB);
  722. + int    WINAPI EndSpoolPage(HPJOB);
  723. + int    WINAPI WriteSpool(HPJOB, LPSTR, int);
  724. + int    WINAPI CloseJob(HPJOB);
  725. + int    WINAPI DeleteJob(HPJOB, int);
  726. + int    WINAPI WriteDialog(HPJOB, LPSTR, int);
  727. + int    WINAPI DeleteSpoolPage(HPJOB);
  728. + #endif        /* WIN32 */
  729.   /* Dialog box to select printer port */
  730.   BOOL CALLBACK _export
  731.   SpoolDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
  732. ***************
  733. *** 431,452 ****
  734.   
  735.   /* Win32s can't get access to OpenJob etc., so we try to sneak the */
  736.   /* data through the Windows printer driver unchanged */
  737. - BOOL CALLBACK _export
  738. - PrintAbortProc(HDC hdcPrn, int code)
  739. - {
  740. -     MSG msg;
  741. -     while (hDlgModeless && PeekMessage(&msg, 0, 0, 0, PM_REMOVE)) {
  742. -     if (hDlgModeless || !IsDialogMessage(hDlgModeless,&msg)) {
  743. -             TranslateMessage(&msg);
  744. -             DispatchMessage(&msg);
  745. -     }
  746. -     }
  747. -     return(hDlgModeless!=0);
  748. - }
  749.   
  750.   /* Print File */
  751.   private int
  752. ! gp_printfile(char *filename, const char *pmport)
  753.   {
  754.   HDC printer;
  755.   PRINTDLG pd;
  756. --- 447,456 ----
  757.   
  758.   /* Win32s can't get access to OpenJob etc., so we try to sneak the */
  759.   /* data through the Windows printer driver unchanged */
  760.   
  761.   /* Print File */
  762.   private int
  763. ! gp_printfile_win32s(char *filename, const char *pmport)
  764.   {
  765.   HDC printer;
  766.   PRINTDLG pd;
  767. ***************
  768. *** 513,518 ****
  769. --- 517,617 ----
  770.       return !error;
  771.   }
  772.   
  773. + /* Print File */
  774. + private int
  775. + gp_printfile_win95(char *filename, const char *pmport)
  776. + {
  777. + /* Get printer port from win.ini, then copy to \\.\port */
  778. + #define PRINT_BUF_SIZE 1048
  779. + char *buffer;
  780. + char *portname;
  781. + int i, port;
  782. + FILE *f;
  783. + WORD count;
  784. + int error = FALSE;
  785. + long lsize;
  786. + long ldone;
  787. + char pcdone[20];
  788. + MSG msg;
  789. + FILE *outfile;
  790. +     /* get list of ports */
  791. +     if ((buffer = malloc(PRINT_BUF_SIZE)) == (char *)NULL)
  792. +         return FALSE;
  793. +     if ( (strlen(pmport)==0) || (strcmp(pmport, "PRN")==0) ) {
  794. +         GetProfileString("ports", NULL, "", buffer, PRINT_BUF_SIZE);
  795. +         /* select a port */
  796. +         port = DialogBoxParam(phInstance, "SpoolDlgBox", hwndtext, SpoolDlgProc, (LPARAM)buffer);
  797. +         if (!port) {
  798. +             free(buffer);
  799. +             return FALSE;
  800. +         }
  801. +         portname = buffer;
  802. +         for (i=1; i<port && strlen(portname)!=0; i++)
  803. +             portname += lstrlen(portname)+1;
  804. +     }
  805. +     else
  806. +         portname = (char *)pmport;    /* Print Manager port name already supplied */
  807. +     if ((f = fopen(filename, "rb")) == (FILE *)NULL) {
  808. +         free(buffer);
  809. +         return FALSE;
  810. +     }
  811. +     fseek(f, 0L, SEEK_END);
  812. +     lsize = ftell(f);
  813. +     if (lsize <= 0)
  814. +         lsize = 1;
  815. +     fseek(f, 0L, SEEK_SET);
  816. +     
  817. +     outfile = fopen(portname, "wb");
  818. +     if (outfile == (FILE *)NULL) {
  819. +         fclose(f);
  820. +         free(buffer);
  821. +         return FALSE;
  822. +     }
  823. +     hDlgModeless = CreateDialog(phInstance, "CancelDlgBox", hwndtext, CancelDlgProc);
  824. +     ldone = 0;
  825. +     while (!error && hDlgModeless 
  826. +       && (count = fread(buffer, 1, PRINT_BUF_SIZE, f)) != 0 ) {
  827. +         if (fwrite(buffer, 1, count, outfile) < count)
  828. +         error = TRUE;
  829. +         ldone += count;
  830. +         sprintf(pcdone, "%d %%done", (int)(ldone * 100 / lsize));
  831. +         SetWindowText(GetDlgItem(hDlgModeless, CANCEL_PCDONE), pcdone);
  832. +         while (PeekMessage(&msg, hDlgModeless, 0, 0, PM_REMOVE)) {
  833. +         if ((hDlgModeless == 0) || !IsDialogMessage(hDlgModeless, &msg)) {
  834. +             TranslateMessage(&msg);
  835. +             DispatchMessage(&msg);
  836. +           }
  837. +           }
  838. +       }
  839. +     free(buffer);
  840. +     fclose(f);
  841. +     if (!hDlgModeless)
  842. +         error=TRUE;
  843. +     DestroyWindow(hDlgModeless);
  844. +     hDlgModeless = 0;
  845. +     fclose(outfile);
  846. +     return !error;
  847. + }
  848. + /* Print File */
  849. + private int
  850. + gp_printfile(char *filename, const char *pmport)
  851. + {
  852. +     DWORD version = GetVersion();
  853. +     /* treat Win95 differently */
  854. +     if (((LOBYTE(LOWORD(version))<<8) | HIBYTE(LOWORD(version))) >= 0x400)
  855. +         gp_printfile_win95(filename, pmport);
  856. +     else
  857. +         gp_printfile_win32s(filename, pmport);
  858. + }
  859.   #else                /* ******** !WIN32 ******** */
  860.   
  861.   /* Print File to port */
  862. ***************
  863. *** 541,549 ****
  864. --- 640,654 ----
  865.       if ( (strlen(pmport)==0) || (strcmp(pmport, "PRN")==0) ) {
  866.           GetProfileString("ports", NULL, "", buffer, PRINT_BUF_SIZE);
  867.           /* select a port */
  868. + #ifdef __DLL__
  869. +         lpfnSpoolProc = (DLGPROC)GetProcAddress(phInstance, "SpoolDlgProc");
  870. + #else
  871.           lpfnSpoolProc = (DLGPROC)MakeProcInstance((FARPROC)SpoolDlgProc, phInstance);
  872. + #endif
  873.           port = DialogBoxParam(phInstance, "SpoolDlgBox", hwndtext, lpfnSpoolProc, (LPARAM)buffer);
  874. + #ifndef __DLL__
  875.           FreeProcInstance((FARPROC)lpfnSpoolProc);
  876. + #endif
  877.           if (!port) {
  878.               free(buffer);
  879.               return FALSE;
  880. ***************
  881. *** 579,585 ****
  882. --- 684,694 ----
  883.       if (StartSpoolPage(hJob) < 0)
  884.           error = TRUE;
  885.   
  886. + #ifdef __DLL__
  887. +     lpfnCancelProc = (DLGPROC)GetProcAddress(phInstance, "CancelDlgProc");
  888. + #else
  889.       lpfnCancelProc = (DLGPROC)MakeProcInstance((FARPROC)CancelDlgProc, phInstance);
  890. + #endif
  891.       hDlgModeless = CreateDialog(phInstance, "CancelDlgBox", hwndtext, lpfnCancelProc);
  892.       ldone = 0;
  893.   
  894. ***************
  895. *** 604,610 ****
  896. --- 713,721 ----
  897.           error=TRUE;
  898.       DestroyWindow(hDlgModeless);
  899.       hDlgModeless = 0;
  900. + #ifndef __DLL__
  901.       FreeProcInstance((FARPROC)lpfnCancelProc);
  902. + #endif
  903.       EndSpoolPage(hJob);
  904.       if (error)
  905.           DeleteJob(hJob, 0);
  906. diff -cr ./gp_mswin.h ../gp_mswin.h
  907. *** ./gp_mswin.h    Wed Nov 02 14:00:08 1994
  908. --- ../gp_mswin.h    Mon Mar 27 21:59:56 1995
  909. ***************
  910. *** 24,29 ****
  911. --- 24,30 ----
  912.   #define IMAGE_ICON    51
  913.   #define SPOOL_PORT    100
  914.   #define CANCEL_PCDONE    101
  915. + #define CANCEL_PRINTING    102
  916.   
  917.   #ifndef RC_INVOKED        /* NOTA BENE */
  918.   
  919. ***************
  920. *** 40,51 ****
  921. --- 41,54 ----
  922.   #endif
  923.   
  924.   extern HWND hwndtext;
  925. + extern HWND hDlgModeless;
  926.   extern HINSTANCE phInstance;
  927.   extern const LPSTR szAppName;
  928.   extern const LPSTR szImgName;
  929.   extern BOOL is_win31;
  930.   extern BOOL is_winnt;
  931.   extern BOOL CALLBACK _export AbortProc(HDC, int);
  932. + extern BOOL CALLBACK _export CancelDlgProc(HWND, UINT, WPARAM, LPARAM);
  933.   /* imitation pipes */
  934.   extern HGLOBAL pipe_hglobal;
  935.   extern LPBYTE pipe_lpbyte;
  936. diff -cr ./gswin.rc ../gswin.rc
  937. *** ./gswin.rc    Wed Jul 27 15:40:24 1994
  938. --- ../gswin.rc    Mon Mar 27 21:48:04 1995
  939. ***************
  940. *** 16,22 ****
  941.   CancelDlgBox DIALOG 32, 40, 120, 48
  942.   STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE
  943.   BEGIN
  944. !     CTEXT "Printing", -1, 8, 4, 104, 8, WS_CHILD | WS_VISIBLE | WS_GROUP
  945.       CTEXT "", CANCEL_PCDONE, 8, 16, 104, 8, WS_CHILD | WS_VISIBLE | WS_GROUP
  946.       CONTROL "&Cancel", IDCANCEL, "button", BS_PUSHBUTTON | WS_GROUP | WS_TABSTOP | WS_CHILD, 44, 30, 32, 14
  947.   END
  948. --- 16,22 ----
  949.   CancelDlgBox DIALOG 32, 40, 120, 48
  950.   STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE
  951.   BEGIN
  952. !     CTEXT "Printing", CANCEL_PRINTING, 8, 4, 104, 8, WS_CHILD | WS_VISIBLE | WS_GROUP
  953.       CTEXT "", CANCEL_PCDONE, 8, 16, 104, 8, WS_CHILD | WS_VISIBLE | WS_GROUP
  954.       CONTROL "&Cancel", IDCANCEL, "button", BS_PUSHBUTTON | WS_GROUP | WS_TABSTOP | WS_CHILD, 44, 30, 32, 14
  955.   END
  956. diff -cr ./gswin32.rc ../gswin32.rc
  957. *** ./gswin32.rc    Wed Jul 27 15:40:24 1994
  958. --- ../gswin32.rc    Mon Mar 27 21:48:04 1995
  959. ***************
  960. *** 16,22 ****
  961.   CancelDlgBox DIALOG 32, 40, 120, 48
  962.   STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE
  963.   BEGIN
  964. !     CTEXT "Printing", -1, 8, 4, 104, 8, WS_CHILD | WS_VISIBLE | WS_GROUP
  965.       CTEXT "", CANCEL_PCDONE, 8, 16, 104, 8, WS_CHILD | WS_VISIBLE | WS_GROUP
  966.       CONTROL "&Cancel", IDCANCEL, "button", BS_PUSHBUTTON | WS_GROUP | WS_TABSTOP | WS_CHILD, 44, 30, 32, 14
  967.   END
  968. --- 16,22 ----
  969.   CancelDlgBox DIALOG 32, 40, 120, 48
  970.   STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE
  971.   BEGIN
  972. !     CTEXT "Printing", CANCEL_PRINTING, 8, 4, 104, 8, WS_CHILD | WS_VISIBLE | WS_GROUP
  973.       CTEXT "", CANCEL_PCDONE, 8, 16, 104, 8, WS_CHILD | WS_VISIBLE | WS_GROUP
  974.       CONTROL "&Cancel", IDCANCEL, "button", BS_PUSHBUTTON | WS_GROUP | WS_TABSTOP | WS_CHILD, 44, 30, 32, 14
  975.   END
  976. diff -cr ./os2.mak ../os2.mak
  977. *** ./os2.mak    Sat Mar 18 16:29:40 1995
  978. --- ../os2.mak    Sat Apr 29 12:17:30 1995
  979. ***************
  980. *** 280,286 ****
  981.   CDLL=
  982.   !endif
  983.   
  984. ! GENOPT=$(CP) $(CD) $(CGDB) $(CDLL)
  985.   
  986.   CCFLAGS0=$(GENOPT) $(PLATOPT)
  987.   CCFLAGS=$(CCFLAGS0) 
  988. --- 280,286 ----
  989.   CDLL=
  990.   !endif
  991.   
  992. ! GENOPT=$(CP) $(CD) $(CGDB) $(CDLL) $(CO)
  993.   
  994.   CCFLAGS0=$(GENOPT) $(PLATOPT)
  995.   CCFLAGS=$(CCFLAGS0) 
  996. ***************
  997. *** 299,305 ****
  998.   # Choose the language feature(s) to include.  See gs.mak for details.
  999.   # Since we have a large address space, we include some optional features.
  1000.   
  1001. ! FEATURE_DEVS=level2.dev dps.dev
  1002.   
  1003.   # Choose the device(s) to include.  See devs.mak for details.
  1004.   
  1005. --- 299,305 ----
  1006.   # Choose the language feature(s) to include.  See gs.mak for details.
  1007.   # Since we have a large address space, we include some optional features.
  1008.   
  1009. ! FEATURE_DEVS=level2.dev dps.dev pdf.dev
  1010.   
  1011.   # Choose the device(s) to include.  See devs.mak for details.
  1012.   
  1013. ***************
  1014. *** 308,317 ****
  1015.   !else
  1016.   DEVICE_DEVS=os2pm.dev
  1017.   !endif
  1018.   DEVICE_DEVS3=deskjet.dev djet500.dev laserjet.dev ljetplus.dev ljet2p.dev ljet3.dev ljet4.dev
  1019.   DEVICE_DEVS4=cdeskjet.dev cdjcolor.dev cdjmono.dev cdj550.dev pj.dev pjxl.dev pjxl300.dev
  1020.   DEVICE_DEVS5=djet500c.dev declj250.dev lj250.dev jetp3852.dev r4081.dev t4693d2.dev t4693d4.dev t4693d8.dev tek4696.dev lbp8.dev
  1021. ! DEVICE_DEVS6=epson.dev eps9high.dev eps9mid.dev epsonc.dev ibmpro.dev st800.dev bj10e.dev bj200.dev m8510.dev necp6.dev
  1022.   DEVICE_DEVS7=dfaxhigh.dev dfaxlow.dev
  1023.   DEVICE_DEVS8=bmpmono.dev bmp16.dev bmp256.dev bmp16m.dev pcxmono.dev pcxgray.dev pcx16.dev pcx256.dev pcx24b.dev
  1024.   DEVICE_DEVS9=psmono.dev bit.dev bitrgb.dev bitcmyk.dev
  1025. --- 308,318 ----
  1026.   !else
  1027.   DEVICE_DEVS=os2pm.dev
  1028.   !endif
  1029. + DEVICE_DEVS2=epson.dev eps9high.dev eps9mid.dev epsonc.dev ibmpro.dev
  1030.   DEVICE_DEVS3=deskjet.dev djet500.dev laserjet.dev ljetplus.dev ljet2p.dev ljet3.dev ljet4.dev
  1031.   DEVICE_DEVS4=cdeskjet.dev cdjcolor.dev cdjmono.dev cdj550.dev pj.dev pjxl.dev pjxl300.dev
  1032.   DEVICE_DEVS5=djet500c.dev declj250.dev lj250.dev jetp3852.dev r4081.dev t4693d2.dev t4693d4.dev t4693d8.dev tek4696.dev lbp8.dev
  1033. ! DEVICE_DEVS6=st800.dev stcolor.dev bj10e.dev bj200.dev m8510.dev necp6.dev
  1034.   DEVICE_DEVS7=dfaxhigh.dev dfaxlow.dev
  1035.   DEVICE_DEVS8=bmpmono.dev bmp16.dev bmp256.dev bmp16m.dev pcxmono.dev pcxgray.dev pcx16.dev pcx256.dev pcx24b.dev
  1036.   DEVICE_DEVS9=psmono.dev bit.dev bitrgb.dev bitcmyk.dev
  1037. ***************
  1038. *** 388,399 ****
  1039.   # PM driver program
  1040.   
  1041.   gspmdrv.o: gspmdrv.c gspmdrv.h
  1042. !     $(COMPDIR)\gcc $(CGDB) -c $*.c
  1043.   
  1044.   gspmdrv.res: gspmdrv.rc gspmdrv.h gspmdrv.ico
  1045.       rc -i $(COMPBASE)\include -r $*.rc
  1046.   
  1047.   gspmdrv.exe: gspmdrv.o gspmdrv.res gspmdrv.def
  1048. !     $(COMPDIR)\gcc $(CGDB) -o $* $*.o
  1049.       $(COMPDIR)\emxbind -p -r$*.res -d$*.def $(COMPDIR)\emxl.exe $* $*.exe
  1050.       del $*
  1051. --- 389,400 ----
  1052.   # PM driver program
  1053.   
  1054.   gspmdrv.o: gspmdrv.c gspmdrv.h
  1055. !     $(COMPDIR)\gcc $(CGDB) $(CO) -c $*.c
  1056.   
  1057.   gspmdrv.res: gspmdrv.rc gspmdrv.h gspmdrv.ico
  1058.       rc -i $(COMPBASE)\include -r $*.rc
  1059.   
  1060.   gspmdrv.exe: gspmdrv.o gspmdrv.res gspmdrv.def
  1061. !     $(COMPDIR)\gcc $(CGDB) $(CO) -o $* $*.o
  1062.       $(COMPDIR)\emxbind -p -r$*.res -d$*.def $(COMPDIR)\emxl.exe $* $*.exe
  1063.       del $*
  1064.