1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368
3369
3370
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386
3387
3388
3389
3390
3391
3392
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
3406
3407
3408
3409
3410
3411
3412
3413
3414
3415
3416
3417
3418
3419
3420
3421
3422
3423
3424
3425
3426
3427
3428
3429
3430
3431
3432
3433
3434
3435
3436
3437
3438
3439
3440
3441
3442
3443
3444
3445
3446
3447
3448
3449
3450
3451
3452
3453
3454
3455
3456
3457
3458
3459
3460
3461
3462
3463
3464
3465
3466
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478
3479
3480
3481
3482
3483
3484
3485
3486
3487
3488
3489
3490
3491
3492
3493
3494
3495
3496
3497
3498
3499
3500
3501
3502
3503
3504
3505
3506
3507
3508
3509
3510
3511
3512
3513
3514
3515
3516
3517
3518
3519
3520
3521
3522
3523
3524
3525
3526
3527
3528
3529
3530
3531
3532
3533
3534
3535
3536
3537
3538
3539
3540
3541
3542
3543
3544
3545
3546
3547
3548
3549
3550
3551
3552
3553
3554
3555
3556
3557
3558
3559
3560
3561
3562
3563
3564
3565
3566
3567
3568
3569
3570
3571
3572
3573
3574
3575
3576
3577
3578
3579
3580
3581
3582
3583
3584
3585
3586
3587
3588
3589
3590
3591
3592
3593
3594
3595
3596
3597
3598
3599
3600
3601
3602
3603
3604
3605
3606
3607
3608
3609
3610
3611
3612
3613
3614
3615
3616
3617
3618
3619
3620
3621
3622
3623
3624
3625
3626
3627
3628
3629
3630
3631
3632
3633
3634
3635
3636
3637
3638
3639
3640
3641
3642
3643
3644
3645
3646
3647
3648
3649
3650
3651
3652
3653
3654
3655
3656
3657
3658
3659
3660
3661
3662
3663
3664
3665
3666
3667
3668
3669
3670
3671
3672
3673
3674
3675
3676
3677
3678
3679
3680
3681
3682
3683
3684
3685
3686
3687
3688
3689
3690
3691
3692
3693
3694
3695
3696
3697
3698
3699
3700
3701
3702
3703
3704
3705
3706
3707
3708
3709
3710
3711
3712
3713
3714
3715
3716
3717
3718
3719
3720
3721
3722
3723
3724
3725
3726
3727
3728
3729
3730
3731
3732
3733
3734
3735
3736
3737
3738
3739
3740
3741
3742
3743
3744
3745
3746
3747
3748
3749
3750
3751
3752
3753
3754
3755
3756
3757
3758
3759
3760
3761
3762
3763
3764
3765
3766
3767
3768
3769
3770
3771
3772
3773
3774
3775
3776
3777
3778
3779
3780
3781
3782
3783
3784
3785
3786
3787
3788
3789
3790
3791
3792
3793
3794
3795
3796
3797
3798
3799
3800
3801
3802
3803
3804
3805
3806
3807
3808
3809
3810
3811
3812
3813
3814
3815
3816
3817
3818
3819
3820
3821
3822
3823
3824
3825
3826
3827
3828
3829
3830
3831
3832
3833
3834
3835
3836
3837
3838
3839
3840
3841
3842
3843
3844
3845
3846
3847
3848
3849
3850
3851
3852
3853
3854
3855
3856
3857
3858
3859
3860
3861
3862
3863
3864
3865
3866
3867
3868
3869
3870
3871
3872
3873
3874
3875
3876
3877
3878
3879
3880
3881
3882
3883
3884
3885
3886
3887
3888
3889
3890
3891
3892
3893
3894
3895
3896
3897
3898
3899
3900
3901
3902
3903
3904
3905
3906
3907
3908
3909
3910
3911
3912
3913
3914
3915
3916
3917
3918
3919
3920
3921
3922
3923
3924
3925
3926
3927
3928
3929
3930
3931
3932
3933
3934
3935
3936
3937
3938
3939
3940
3941
3942
3943
3944
3945
3946
3947
3948
3949
3950
3951
3952
3953
3954
3955
3956
3957
3958
3959
3960
3961
3962
3963
3964
3965
3966
3967
3968
3969
3970
3971
3972
3973
3974
3975
3976
3977
3978
3979
3980
3981
3982
3983
3984
3985
3986
3987
3988
3989
3990
3991
3992
3993
3994
3995
3996
3997
3998
3999
4000
4001
4002
4003
4004
4005
4006
4007
4008
4009
4010
4011
4012
4013
4014
4015
4016
4017
4018
4019
4020
4021
4022
4023
4024
4025
4026
4027
4028
4029
4030
4031
4032
4033
4034
4035
4036
4037
4038
4039
4040
4041
4042
4043
4044
4045
4046
4047
4048
4049
4050
4051
4052
4053
4054
4055
4056
4057
4058
4059
4060
4061
4062
4063
4064
4065
4066
4067
4068
4069
4070
4071
4072
4073
4074
4075
4076
4077
4078
4079
4080
4081
4082
4083
4084
4085
4086
4087
4088
4089
4090
4091
4092
4093
4094
4095
4096
4097
4098
4099
4100
4101
4102
4103
4104
4105
4106
4107
4108
4109
4110
4111
4112
4113
4114
4115
4116
4117
4118
4119
4120
4121
4122
4123
4124
4125
4126
4127
4128
4129
4130
4131
4132
4133
4134
4135
4136
4137
4138
4139
4140
4141
4142
4143
4144
4145
4146
4147
4148
4149
4150
4151
4152
4153
4154
4155
4156
4157
4158
4159
4160
4161
4162
4163
4164
4165
4166
4167
4168
4169
4170
4171
4172
4173
4174
4175
4176
4177
4178
4179
4180
4181
4182
4183
4184
4185
4186
4187
4188
4189
4190
4191
4192
4193
4194
4195
4196
4197
4198
4199
4200
4201
4202
4203
4204
4205
4206
4207
4208
4209
4210
4211
4212
4213
4214
4215
4216
4217
4218
4219
4220
4221
4222
4223
4224
4225
4226
4227
4228
4229
4230
4231
4232
4233
4234
4235
4236
4237
4238
4239
4240
4241
4242
4243
4244
4245
4246
4247
4248
4249
4250
4251
4252
4253
4254
4255
4256
4257
4258
4259
4260
4261
4262
4263
4264
4265
4266
4267
4268
4269
4270
4271
4272
4273
4274
4275
4276
4277
4278
4279
4280
4281
4282
4283
4284
4285
4286
4287
4288
4289
4290
4291
4292
4293
4294
4295
4296
4297
4298
4299
4300
4301
4302
4303
4304
4305
4306
4307
4308
4309
4310
4311
4312
4313
4314
4315
4316
4317
4318
4319
4320
4321
4322
4323
4324
4325
4326
4327
4328
4329
4330
4331
4332
4333
4334
4335
4336
4337
4338
4339
4340
4341
4342
4343
4344
4345
4346
4347
4348
4349
4350
4351
4352
4353
4354
4355
4356
4357
4358
4359
4360
4361
4362
4363
4364
4365
4366
4367
4368
4369
4370
4371
4372
4373
4374
4375
4376
4377
4378
4379
4380
4381
4382
4383
4384
4385
4386
4387
4388
4389
4390
4391
4392
4393
4394
4395
4396
4397
4398
4399
4400
4401
4402
4403
4404
4405
4406
4407
4408
4409
4410
4411
4412
4413
4414
4415
4416
4417
4418
4419
4420
4421
4422
4423
4424
4425
4426
4427
4428
4429
4430
4431
4432
4433
4434
4435
4436
4437
4438
4439
4440
4441
4442
4443
4444
4445
4446
4447
4448
4449
4450
4451
4452
4453
4454
4455
4456
4457
4458
4459
4460
4461
4462
4463
4464
4465
4466
4467
4468
4469
4470
4471
4472
4473
4474
4475
4476
4477
4478
4479
4480
4481
4482
4483
4484
4485
4486
4487
4488
4489
4490
4491
4492
4493
4494
4495
4496
4497
4498
4499
4500
4501
4502
4503
4504
4505
4506
4507
4508
4509
4510
4511
4512
4513
4514
4515
4516
4517
4518
4519
4520
4521
4522
4523
4524
4525
4526
4527
4528
4529
4530
4531
4532
4533
4534
4535
4536
4537
4538
4539
4540
4541
4542
4543
4544
4545
4546
4547
4548
4549
4550
4551
4552
4553
4554
4555
4556
4557
4558
4559
4560
4561
4562
4563
4564
4565
4566
4567
4568
4569
4570
4571
4572
4573
4574
4575
4576
4577
4578
4579
4580
4581
4582
4583
4584
4585
4586
4587
4588
4589
4590
4591
4592
4593
4594
4595
4596
4597
4598
4599
4600
4601
4602
4603
4604
4605
4606
4607
4608
4609
4610
4611
4612
4613
4614
4615
4616
4617
4618
4619
4620
4621
4622
4623
4624
4625
4626
4627
4628
4629
4630
4631
4632
4633
4634
4635
4636
4637
4638
4639
4640
4641
4642
4643
4644
4645
4646
4647
4648
4649
4650
4651
4652
4653
4654
4655
4656
4657
4658
4659
4660
4661
4662
4663
4664
4665
4666
4667
4668
4669
4670
4671
4672
4673
4674
4675
4676
4677
4678
4679
4680
4681
4682
4683
4684
4685
4686
4687
4688
4689
4690
4691
4692
4693
4694
4695
4696
4697
4698
4699
4700
4701
4702
4703
4704
4705
4706
4707
4708
4709
4710
4711
4712
4713
4714
4715
4716
4717
4718
4719
4720
4721
4722
4723
4724
4725
4726
4727
4728
4729
4730
4731
4732
4733
4734
4735
4736
4737
4738
4739
4740
4741
4742
4743
4744
4745
4746
4747
4748
4749
4750
4751
4752
4753
4754
4755
4756
4757
4758
4759
4760
4761
4762
4763
4764
4765
4766
4767
4768
4769
4770
4771
4772
4773
4774
4775
4776
4777
4778
4779
4780
4781
4782
4783
4784
4785
4786
4787
4788
4789
4790
4791
4792
4793
4794
4795
4796
4797
4798
4799
4800
4801
4802
4803
4804
4805
4806
4807
4808
4809
4810
4811
4812
4813
4814
4815
4816
4817
4818
4819
4820
4821
4822
4823
4824
4825
4826
4827
4828
4829
4830
4831
4832
4833
4834
4835
4836
4837
4838
4839
4840
4841
4842
4843
4844
4845
4846
4847
4848
4849
4850
4851
4852
4853
4854
4855
4856
4857
4858
4859
4860
4861
4862
4863
4864
4865
4866
4867
4868
4869
4870
4871
4872
4873
4874
4875
4876
4877
4878
4879
4880
4881
4882
4883
4884
4885
4886
4887
4888
4889
4890
4891
4892
4893
4894
4895
4896
4897
4898
4899
4900
4901
4902
4903
4904
4905
4906
4907
4908
4909
4910
4911
4912
4913
4914
4915
4916
4917
4918
4919
4920
4921
4922
4923
4924
4925
4926
4927
4928
4929
4930
4931
4932
4933
4934
4935
4936
4937
4938
4939
4940
4941
4942
4943
4944
4945
4946
4947
4948
4949
4950
4951
4952
4953
4954
4955
4956
4957
4958
4959
4960
4961
4962
4963
4964
4965
4966
4967
4968
4969
4970
4971
4972
4973
4974
4975
4976
4977
4978
4979
4980
4981
4982
4983
4984
4985
4986
4987
4988
4989
4990
4991
4992
4993
4994
4995
4996
4997
4998
4999
5000
5001
5002
5003
5004
5005
5006
5007
5008
5009
5010
5011
5012
5013
5014
5015
5016
5017
5018
5019
5020
5021
5022
5023
5024
5025
5026
5027
5028
5029
5030
5031
5032
5033
5034
5035
5036
5037
5038
5039
5040
5041
5042
5043
5044
5045
5046
5047
5048
5049
5050
5051
5052
5053
5054
5055
5056
5057
5058
5059
5060
5061
5062
5063
5064
5065
5066
5067
5068
5069
5070
5071
5072
5073
5074
5075
5076
5077
5078
5079
5080
5081
5082
5083
5084
5085
5086
5087
5088
5089
5090
5091
5092
5093
5094
5095
5096
5097
5098
5099
5100
5101
5102
5103
5104
5105
5106
5107
5108
5109
5110
5111
5112
5113
5114
5115
5116
5117
5118
5119
5120
5121
5122
5123
5124
5125
5126
5127
5128
5129
5130
5131
5132
5133
5134
5135
5136
5137
5138
5139
5140
5141
5142
5143
5144
5145
5146
5147
5148
5149
5150
5151
5152
5153
5154
5155
5156
5157
5158
5159
5160
5161
5162
5163
5164
5165
5166
5167
5168
5169
5170
5171
5172
5173
5174
5175
5176
5177
5178
5179
5180
5181
5182
5183
5184
5185
5186
5187
5188
5189
5190
5191
5192
5193
5194
5195
5196
5197
5198
5199
5200
5201
5202
5203
5204
5205
5206
5207
5208
5209
5210
5211
5212
5213
5214
5215
5216
5217
5218
5219
5220
5221
5222
5223
5224
5225
5226
5227
5228
5229
5230
5231
5232
5233
5234
5235
5236
5237
5238
5239
5240
5241
5242
5243
5244
5245
5246
5247
5248
5249
5250
5251
5252
5253
5254
5255
5256
5257
5258
5259
5260
5261
5262
5263
5264
5265
5266
5267
5268
5269
5270
5271
5272
5273
5274
5275
5276
5277
5278
5279
5280
5281
5282
5283
5284
5285
5286
5287
5288
5289
5290
|
Copyright (C) 1989, 1996, 1997, 1998 Aladdin Enterprises. All rights reserved.
This file is part of Aladdin Ghostscript.
Aladdin Ghostscript is distributed with NO WARRANTY OF ANY KIND. No author
or distributor accepts any responsibility for the consequences of using it,
or for whether it serves any particular purpose or works at all, unless he
or she says so in writing. Refer to the Aladdin Ghostscript Free Public
License (the "License") for full details.
Every copy of Aladdin Ghostscript must include a copy of the License,
normally in a plain ASCII text file named PUBLIC. The License grants you
the right to copy, modify and redistribute Aladdin Ghostscript, but only
under certain conditions described in the License. Among other things, the
License requires that the copyright notice and this notice be preserved on
all copies.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
This file, NEWS, describes the changes in the most recent releases of
Ghostscript. Changes in older releases are described in history*.txt.
For an overview of Ghostscript and a list of the documentation files, see
README.
Within each release, news appears in the following order: Documentation,
Procedures, Utilities, Drivers, Platforms, Fonts, Interpreter, Streams
(included under Interpreter through release 2.9.9), Library. Changes marked
with a * were made available as patches to a previous release.
Version 5.38(beta) (9/3/98)
===========================
The sole purpose of this release was to fix some obscure bugs detected by
the Genoa tests and by another Aladdin project.
Documentation
-------------
Updates the list of implemented PostScript LanguageLevel 3 features.
(current.txt)
Drivers
-------
Fixes problems:
- The PDF writer did the wrong thing for multi-source images with
more than 180 bytes of data (total) per scan line. (gdevpdfi.c)
- If one used setdistillerparams, [g]restore caused a rangecheck in
.setpagedevice. ****** DISABLED FOR DCT DICTS, SINCE THIS CAUSES A SEGV
****** (gdevpsdp.c)
Interpreter
-----------
Fixes problems:
- 0-length parameter arrays were given an arbitrary type, confusing
clients. (iparam.c)
- EOD on a write stream caused an error. (zfileio.c)
Library
-------
Fixes problems:
- 0-length parameter arrays confused clients that wanted arrays of a
particular type. (gsparam.c)
- Patterns with XStep or YStep smaller than the bounding box didn't
work properly. (gxp1fill.c)
- Resizing an object sometimes copied it unnecessarily. (gsalloc.c)
- Freeing the shared part of a graphics state didn't free its
sub-objects. (gsstate.c)
- The standard allocator didn't free its initial (self-containing)
chunk when asked to free itself. (gsalloc.c)
- The standard allocator didn't attempt to merge free blocks before
giving up. We implemented this by adding another virtual procedure to
allocators, consolidate_free. (gsmemory.h, gsmemraw.h, gsalloc.c,
gsmalloc.c, gsmemlok.c, gsmemory.c)
- The free object merging algorithm thought there were free objects
even when there weren't. (Small performance bug only.) (gsalloc.c)
Adds some more tracing to pattern filling. (gxclip2.c, gxp1fill.c)
Replaces the cs_alloc, cs_copy, and cs_undo_alloc macros with procedures.
(gxcspace.h, gscolor2.c, gscsepr.c, gscspace.c, gspcolor.c)
Moves the free-object merging code from gsnogc.c to gsalloc.c, so it can be
used even in systems that have a garbage collector. (gsalloc.h, gxalloc.h,
gsalloc.c, gsnogc.c)
Version 5.37(beta) (8/31/98)
============================
Documentation
-------------
Mentions the new cid2code utility in the documentation. (psfiles.txt)
Documents dpsnext.dev. (gs.mak)
Notes that clients of ImageType 3 images are responsible for providing the
mask data before the pixel data. (gsiparm3.h)
Procedures
----------
Fixes problems:
- The makefiles were missing a dependency of jconfig.h on arch.h.
With this fix, parallel builds (make -jN) work reliably. (jpeg.mak)
Utilities
---------
Adds a utility for creating maps from CIDs to Unicode. (unixinst.mak,
cid2code.ps)
Drivers
-------
Removes the %Fax% IODevice code, since it was only a skeleton and Adobe no
longer supports this facility. (devs.mak, gdevpfax.c [deleted])
Fonts
-----
Fixes problems:
- TrueType fonts whose first code wasn't 0 or 0xf000 didn't display
correctly. (bug introduced in 5.36) (gs_ttf.ps)
- CIDFontType 0 fonts didn't handle being redefined with another
name. (gs_cidfn.ps)
- CIDFontType 0 fonts could get local-into-global-store errors.
(gs_cidfn.ps)
- PDF files couldn't use already-defined CMap resources.
(pdf_font.ps)
- Out-of-range CIDs gave an error rather than using a notdef
character. (gs_cidfn.ps)
Interpreter
-----------
Fixes problems:
- CIDFontType 4 fonts weren't recognized as CID-keyed. (zchar2.c,
zchar32.c, zfont32.c)
- When recovering from an error in an operator procedure, the
interpreter didn't update the dictionary stack caches. (interp.c)
- The reader side of overlapped band devices was confused about its
open/closed status. (gdevprna.c)
- startjob didn't reinitialize the stacks or VM space. (gs_lev2.ps)
- Encoding filters with a Predictor always caused an error.
(zfilter2.c)
- currenttrapparams gave an error. (gs_ll3.ps)
- settrapparams had no effect, and left the dictionary on the stack.
(gs_ll3.ps)
Finishes implementing Type 32 fonts. These fonts don't actually work
directly with the cache -- they store the bitmaps in a compressed form in an
ordinary Dictionary -- but they do behave the way they are specified.
(gs_typ32.ps, zchar32.c, zfont32.c)
Cleans up formatting and macros in a few more files. (ccfont.h, icharout.h,
icstate.h, iutil.h, iutil2.h, ibnum.c, iccfont.c, iccinit0.c, ilocate.c,
isave.h, isave.c, iscannum.c, iutil.c, iutil2.c)
Removes or capitalizes a few more macros. (zcontext.c, zcssepr.c,
zusparam.c)
Interpreter (PDF)
-----------------
Fixes problems:
- Color spaces with subsidiary spaces (Indexed, Separation, DeviceN)
sometimes didn't work properly, because they were translated to PostScript
structures more than once. (pdf_draw.ps)
- Type 3 fonts didn't rebind the resource context when executing the
CharProc procedure. (pdf_font.ps)
Streams
-------
Fixes problems:
- The CCITTFax decoder signaled an error if it saw an EOB with
EndOfBlock = false. (According to e-mail from Adobe, EOBs should be
recognized even if EndOfBlock is false, even though the Red Book implies the
opposite.) (scfd.c)
Cleans up macros and formatting in a few more files. (slzwce.c, sfxfd.c,
sfxstdio.c)
Library
-------
Fixes problems:
- Landscape color images usually didn't display. (bug introduced in
5.32) (gxicolor.c)
- If gs_heap_free_object was called with ptr != 0 but bp = 0 (which
is an error), an invalid memory access would occur. (gsmalloc.c)
- The left side bearing was still being added in a second time for
the accent of a seac. (bug probably introduced in 5.20) (gxtype1.c)
- An access error occurred when rendering the very last glyph of a
TrueType font with a 2-byte loca table. (gstype42.c)
- In the fast portrait case of monochrome images, a numerical error
sometimes produced a 1-bit-wide vertical stripe of an incorrect color at the
right edge of the image. (gxifast.c)
- ImageType 3 images with InterleaveType = 3 gave memory access
errors. (gximage3.c)
- Hit detection ignored any part of the aperture that had negative X
or Y coordinates. (gdevhit.c)
- The special color mapping device didn't copy all necessary values
back from its target. (gxdevice.h, gdevbbox.c, gdevcmap.c, gsdevice.c)
- The special color mapping device didn't handle ordinary (Type 1)
images correctly. (gdevcmap.c)
- CMYK halftones complemented both the color and the halftone level:
this produced the right number of pixels turned on (only for linear spot
functions or threshold arrays), but wasn't consistent with either the Adobe
specification or the user's intentions. (gxcht.c)
- The phase of mask Patterns wasn't always set correctly.
(gxp1fill.c)
Renames Type 32 fonts from ft_bitmap to ft_CID_bitmap. (gxftype.h)
Adds some more tracing for composite font decoding. (gsfcmap.c)
Adds some more tracing for images. (gxiinit.c)
Cleans up formatting and macros in a few more files. (gxifast.c)
Moves the image*_type_data and image*_enum_procs_data definitions from
header files into more appropriate .c files. (gsiparm2.h, gsiparm3.h,
gsiparm4.h, gxiparam.h, gxiinit.c, gximage2.c, gximage3.c, gximage4.c)
Version 5.36(beta) (8/25/98)
============================
Another set of fixes. The free-standing bbox device now produces convenient
%%BoundingBox messages. This fileset also includes support for double-byte
TrueType fonts.
Documentation
-------------
Fixes problems:
- There was a minor spacing glitch in one man page. (gs.1)
- The page printed by align.ps didn't make it clear enough what to
do with the numbers it asks users to calculate. (align.ps)
- The sample code for adding gamma adjustment didn't work most of
the time. (devices.txt)
- The prolog produced by pswrite was completely uncommented.
(gdevps.c)
- The documentation didn't note that the string block freelist
(sfree) is sorted in address order. (gxalloc.h)
Notes that FirstBitLowOrder and LowBitFirst are equivalent. (slzwx.h)
Notes a change in the FTP site of the free Kanji ("Wadalab") fonts.
(fonts.txt)
Adds a pointer to the freely available Unicode CMaps. (fonts.txt)
Changes an obsolete e-mail address for Carsten Emde. (contrib.mak)
Utilities
---------
Fixes problems:
- The viewgif utility sometimes left 1-scan-line gaps when rendering
interlaced images. (viewgif.ps)
Drivers
-------
Fixes problems:
- In the PDF writer, downsampled images were always written with 8
bits per sample, not the requested depth. (gdevpsdi.c)
- The 8-to-N-bit compression filter produced an extra byte at the
end of each row, and the N-to-8-bit expansion filter skipped an input byte
at the end of each row. (gdevpsds.c)
- In the PDF writer, the size of downsampled images for changing the
pixel width was set incorrectly, leading to inconsistent image parameters in
the output. (gdevpsdi.c)
- The subsampling filters didn't take a clear position about what to
do with excess input samples beyond a multiple of the reduction factor,
leading to inconsistent image parameters. We added a Boolean to indicate
whether they should discard the samples or use them to create an additional
output sample. (gdevpsds.h, gdevpsdi.c, gdevpsds.c)
- The subsampling filters didn't provide the necessary set_defaults
procedures. (gdevpsds.h, gdevpsds.c)
- Because of a typo, pdfwrite and pswrite printed sequences of 4
decimal values wrong. (bug introduced during macro removal in 5.25)
(gdevpstr.c)
Makes the PS writer produce a %%HiResBoundingBox as well as a %%BoundingBox.
(gdevps.c)
Platforms
---------
Fixes problems:
- The Borland makefile didn't include the MT libraries. We added a
MULTITHREAD option to this makefile. (bcwin32.mak)
- The MSVC makefile didn't include the MT switches in the right
place. (msvccmd.mak)
- 'make clean' in the Windows makefiles didn't clean up quite
enough. (bcwin32.mak, msvc32.mak, msvccmd.mak)
- The OS/2 makefile had gotten slightly out of date. (os2.mak)
Cleans up some formatting. (gp_win32.c)
Fonts
-----
Fixes problems:
- Loading large TrueType fonts caused excessive garbage collection.
(gs_ttf.ps)
Finishes implementing support for turning double-byte TrueType fonts into
CIDFontType 2 fonts. (gs_ttf.ps)
Interpreter
-----------
Fixes problems:
- We thought the dictionary returned by currentuserparams should
always be allocated in local VM, but in fact the correct definition is that
it should be allocated in the current VM. The simplest way to make this
work is for setuserparams to copy any string values into global VM.
(gs_lev2.ps)
- 1-input stitching functions didn't allow k = 0. (ifunc.h,
zfunc.c)
- OtherSubrs defined in PostScript no longer worked. (bug probably
introduced when we rewrote the Type 1 code in C) (zchar1.c)
Cleans up a few compiler warnings (missing empty 'default' cases, unused
variables). (igc.c, iname.c)
Replaces some uses of RELOC_*_PTR (now deprecated) with RELOC_*_VAR.
(isave.c, iscan.c)
Interpreter (PDF)
-----------------
Fixes problems:
- Resources were re-created on each page, causing (sometimes a lot
of) unnecessary computation. We implemented most of the machinery for
avoiding this, but not the mechanism for actually storing resources in
global VM. (pdf_base.ps, pdf_main.ps)
Adds a little more debugging code. (pdf_draw.ps)
Streams
-------
Cleans up formatting in a few more files. (sbtx.h, sfilter.h, slzwx.h,
spngpx.h, srlx.h, sstring.h, seexec.c, sfilter1.c, sfilter2.c, smtf.c,
spcxd.c, srld.c, srle.c)
Replaces a couple of #defines with duplicated (small) structures. (sbtx.h,
sfilter.h, sfilter1.c, sfilter2.c)
Replaces all uses of RELOC_*_PTR (now deprecated) with RELOC_*_VAR.
(stream.c)
Library
-------
Fixes problems:
- If a garbage collection occurred during a string show operation,
memory could be corrupted. (bug introduced in 5.24) (gstext.h, gstext.c)
- A debugging check incorrectly indicated an error when
miter-checking lines with a 0 degree angle between them. (gxstroke.c)
- A structure created for bitmap/pixmap patterns was never freed.
(gspcolor.c)
- Colored halftones didn't work with 24-bit devices. (This case was
never actually used.) (gxcht.c)
- CIE colors didn't remap properly if the current color space was a
Pattern space. (gscie.c)
- In a non-garbage-collected environment, freeing a string in the
current chunk made an unnecessary test. (Minor performance impact only.)
(gsnogc.c)
Cleans up a few compiler warnings (missing empty 'default' cases, unused
variables). (gsht.c, gsht1.c, gshtscr.c, gsimage.c, gxacpath.c, gxclread.c,
gxicolor.c, gxshade4.c)
Replaces some uses of RELOC_*_PTR with RELOC_*_VAR. (gsht1.c)
Changes the printed output of the free-standing bbox device so it produces
%%BoundingBox and %%HiResBoundingBox lines that can be dropped directly into
a DSC header. (gdevbbox.c)
Speeds up the 4-bit case of copy_mono by about 30%. (gdevm4.c)
Expands some macros and cleans up formatting, for easier reading and
debugging. Speeds up the color halftone generation algorithm substantially
(up to 40%), by skipping the halftone computation for planes that are known
to be solid-color, and using copy_mono directly if only one plane is not
solid-color. (gxcht.c)
Version 5.35(beta) (8/18/98)
============================
More updates for 5.3x, specifically fixing problems with halftones on banded
CMYK devices.
Documentation
-------------
Fixes problems:
- The URLs for the third-party libraries were out of date.
(make.txt, jpeg.mak, libpng.mak, zlib.mak)
Drivers
-------
Adds an x11gray4 device for help in debugging. (devs.mak, gdevxalt.c)
Fonts
-----
Fixes problems:
- TrueType fonts with more than 64K of data before or after the
glyfs caused an error. (gs_ttf.ps)
Interpreter
-----------
Fixes problems:
- The dictionary returned by currentuserparams was allocated in the
current VM rather than always in local VM. (gs_lev2.ps)
Interpreter (PDF)
-----------------
Fixes problems:
- CID-keyed fonts caused an error, because their CDevProc was
incorrect. (pdf_font.ps)
Library
-------
Fixes problems:
- A comment was duplicated. (gxht.h)
- The main procedure of the command list reader was so large that it
couldn't be optimized by many compilers, and was very hard to read.
(gxclrast.c)
- Banding devices using multi-screen halftones could get memory
access errors because they didn't clear the halftone caches when changing
halftone parameters. (gxclrast.c)
- Banding devices using multi-screen halftones didn't set the
halftone phase correctly. (gxcht.c, gxclrast.c)
- RasterOp didn't work for 2- or 4-bit gray-scale devices. It still
doesn't work right, but it's closer. (gdevm2.c, gdevm4.c, gdevmrop.c)
- Undefined characters in CMap-based composite fonts caused errors
and possible invalid memory accesses. (gschar0.c)
Version 5.34(beta) (8/16/98)
============================
More updates for 5.3x.
Documentation
-------------
Updates all of the man pages to new versions. (gs-vms.hlp, gs.1, pdf2dsc.1,
pdf2ps.1, ps2ascii.1, ps2epsi.1, ps2pdf.1, ps2ps.1)
Procedures
----------
Fixes problems:
- The MSVC library makefile incorrectly included gp_msio.c.
(msvclib.mak, winlib.mak)
Drivers
-------
Fixes problems:
- The PDF writer unnecessarily checked for other parameters after a
failing show or pdfmark. (gdevpdfp.c)
- The device's BufferSpace parameter was ignored. (bug introduced
by async rendering code in 5.30) (gdevprn.c)
- Banding devices smashed the first 4 bytes of each scan line. (bug
introduced in 5.28) (gxdevmem.h, gdevmem.c, gxclread.c)
- The phase for colored halftones was set wrong. (We have "fixed"
this innumerable times, and it is still probably wrong.) (gxclrast.c)
Replaces the deprecated gx_device_image_xxx calls with the new gx_image_xxx
calls. (gdevpdfi.c, gdevps.c, gdevpx.c, gdevvec.c)
Interpreter
-----------
Fixes problems:
- The equality test for idiom recognition sometimes incorrectly
returned false. (zmisc3.c)
- shfill didn't take the BBox into account. (It still doesn't.)
(gxshade.c)
- The status operator could return an incorrect pages or bytes value
for files larger than 2 Gb, rather than giving an error. (zfile.c)
Library
-------
Fixes problems:
- The hint tables weren't reset after processing the base character
of a 'seac', leading to incorrect hinting and (for Type 2 CharStrings)
possible mis-parsing of the outline data. (gstype2.c)
- When processing a 'seac', the left side bearing was added in
twice, displacing characters to the right. (bug probably introduced in
5.20) (gstype1.c)
- RasterOps didn't set the size of the RasterOp texture device,
which caused filling operations involving a colored halftone to be clipped
to an empty rectangle. (gdevrops.c)
- When filling with a colored halftone, the RasterOp source was
often disregarded. (gxcht.c)
- gx_device_image[_plane]_data and gx_device_end_image took an
unused dev argument, leading to potential confusion. We deprecated the
gx_device_image_plane_data and gx_device_end_image procedures, replacing
them with macros that call their replacements gx_image_plane_data and
gx_image_end (which no longer have the spurious dev argument). (gxdevcli.h,
gxdevice.h, gxiparam.h, gdevbbox.c, gdevddrw.c, gdevdflt.c, gsimage.c,
gslib.c, gxclimag.c, gxclrast.c, gximage2.c, gximage3.c, gximage4.c)
- gs_color_adjust_count, introduced in 5.33 to address the problem
of freeing free-standing patterns, just made things worse. We are replacing
them with gs_pattern_reference, essentially the procedure introduced in 5.31
that we deleted in 5.33. (gsccolor.h, gspcolor.h, gscolor.c, gspcolor.c)
Changes hint suppression from a #define to a debugger-settable static.
(gxhint1.c)
Version 5.33(beta) (8/14/98)
============================
This is the third set of updates for 5.30. These updates have been driven
mostly by the needs of another Aladdin project, so they haven't included as
many problem fixes as we would normally make.
Platforms
---------
Fixes problems:
- The thread creation procedure for Win32 called a Windows function
rather than the proper C library function. (gp_win32.c)
- In some MS-DOS implementations, the copy command doesn't recognize
the /Y switch. (bcwin32.mak)
Fonts
-----
Fixes problems:
- TrueType fonts with *less* than 64K of glyf data stopped working.
(bug introduced in 5.31) (gs_ttf.ps)
Interpreter (PDF)
-----------------
Fixes problems:
- Using an Identity function left an extra element on the stack.
(pdf_draw.ps)
- The syntax of # in names is different in PDF 1.1 and PDF 1.2, but
the PDF 1.2 syntax was always used. (pdf_base.ps, pdf_main.ps)
Library
-------
Fixes problems:
- Color images still always caused an error. (bug introduced in
5.32) (gxicolor.c)
- Because of a typo, the implementation of image types didn't
compile. (bug introduced in 5.32) (gxiparam.h)
- Free-standing colors (specifically pattern colors) and color
spaces couldn't be freed. This required a NON-BACKWARD-COMPATIBLE change in
an internal API used for managing color and color space reference counts.
(gxcspace.h, gsccolor.h, gscdevn.c, gscolor.c, gscolor2.c, gscscie.c,
gscsepr.c, gscspace.c, gspcolor.c)
Cleans up a little more formatting. (gscspace.h)
Version 5.32(beta) (8/13/98)
============================
This is the second set of updates for 5.30.
Procedures
----------
Fixes problems:
- The OS/2 makefile accidentally omitted the OS/2-PM driver.
(os2.mak)
- The MSVC library makefile didn't work. (msvclib.mak)
- Debugging was turned on in the Borland Windows makefile.
(bcwin32.mak)
- The BEGINFILES2 list was too long in the MSVC makefile.
(msvc32.mak)
Interpreter
-----------
Fixes problems:
- .execn wouldn't accept pseudo-operators. (iref.h)
- inustroke with a matrix operand didn't work correctly. (zupath.c)
- ImageType 4 images didn't work. (bug introduced in 5.31)
(zimage3.c)
Interpreter (PDF)
-----------------
Fixes problems:
- Forms used more than once caused an invalidaccess error.
(pdf_draw.ps)
Library
-------
Fixes problems:
- Using a colored pattern with a Pattern color space that included a
base space could access uninitialized floating point values, possibly
causing an arithmetic trap. (gspcolor.c)
- RasterOp wasn't implemented for 16- and 32- bit devices.
(gdevm16.c, gdevm32.c, gdevmrop.c)
- The library test program relied on copysign, which some C
libraries lack. (gslib.c)
- The gs_free and gs_heap_free_all debugging printout were included
even if DEBUG wasn't defined. (bug introduced in 5.30) (gsmalloc.c)
- Color images always caused an error. (bug introduced in 5.30)
(gxicolor.c)
- Masked images with pis = NULL could cause an error. (gximono.c)
- In landscape orientation, masked images didn't guarantee that the
buffer of mask scan lines would be flushed to the mask clipping device
before processing the data being masked. (gxiparam.h, gxidata.c, gxifast.c,
gximage3.c)
- Images with source transparency set but CombineWithColor = false
could get an error because of trying to paint with an unloaded
color. (caused by a bug fix in 5.30) (gxdcolor.c, gxiinit.c)
Version 5.31(beta) (8/11/98)
============================
This is the first set of updates for 5.30. They fix a few minor build
problems, and some significant problems with bitmap patterns that do not
affect the PostScript or PDF interpreters.
Drivers
-------
Moves some casting macros from generic files to the few specific files that
use them. (gdev4693.c, gdevn533.c, gdevsnfb.c)
Interpreter
-----------
Changes ImageType 4 images to match the change in the library interface.
(zimage3.c)
Library
-------
Fixes bugs:
- The MaskColor elements of ImageType 4 images were defined as int
rather than uint, truncating the range by 1 bit and causing problems in
comparing the mask color against the pixel samples. (gsiparm4.h,
gximage4.c)
- A needed cast was missing from gs_malloc_memory_release.
(gsmalloc.h)
- A needed cast from byte to char was missing. (gsparams.c)
- Patterns always allocated a mask for rendering, which for large
patterns specified directly as bitmaps allocated a lot of unnecessary
memory. (gxcolor2.h, gspcolor.c, gxp1fill.c, gxpcmap.c)
- Macros simply defining casted versions of variables made the code
hard to debug. We have only removed the ones that are in generic code (not
drivers) and that cast pointers to gx_device or its subclasses: the only
ones removed from header files were prn_dev in gdevprn.h, mdev in gdevmem.h,
and ccdev, crdev, and cwdev in gxcldev.h. (gdevmem.h, gdevprn.h, gxclist.h,
gdevabuf.c, gdevm1.c, gdevm2.c, gdevm4.c, gdevm8.c, gdevm16.c, gdevm24.c,
gdevm32.c, gdevmpla.c, gdevnfwd.c, gdevprn.c, gxacpath.c, gxclimag.c,
gxclist.c, gxclpage.c, gxclpath.c, gxclread.c, gxclrect.c)
- There was no way to free a pattern instance outside the graphics
state. (gspcolor.h, gspcolor.c)
Version 5.30(beta) (8/10/98)
============================
This is the first beta candidate for the 5.50 release. It completes the
merge of the overlapped rasterizing code into the main development line.
Documentation
-------------
Fixes bugs:
- Yves Arrouye's e-mail address was out of date. (gdevbjc.h,
gdevcdj.c, contrib.mak, devices.txt, unix-lpr.txt)
Makes the warning against using SHARE_JPEG=1 even stronger. (make.txt,
dvx-gcc.mak, ugcclib.mak. unix*.mak)
Removes information about using DCL files on VMS to build Ghostscript.
(make.txt)
Updates the documentation for begin_typed_image. (drivers.txt)
Procedures
----------
Fixes bugs:
- The Unix build procedure didn't create the obj subdirectory
automatically. (unixhead.mak, unix-end.mak)
- gsdll_h wasn't defined for the OS/2 PM device. Fixing this
properly required moving the OS/2 drivers into the same makefile as the MS
Windows drivers, and renaming the file. (devs.mak, msdevs.mak => pcwin.mak,
winlib.mak)
- gsiparm4_h was used before it was defined. (lib.mak)
- Building with shared libaries still used header files in
Ghostscript's directories, not the ones in /usr/include. ****** NOT DONE
YET ******
- The makefiles all assumed they were located in the current
directory, not in the source directory. (*.mak)
Adds new 'debugclean' and 'pgclean' targets, parallel to 'debug' and 'pg',
for the Unix platforms. (unix-end.mak)
Changes the management of .dev files so that on Unix platforms, one can
really maintain standard, debugging, and profiling builds simultaneously.
This is a hack, but a fairly reliable one. (gs.mak, unixhead.mak,
unix-end.mak)
Adds a dummy thread / semaphore / monitor implementation to all platforms
other than Windows. (dvx-tail.mak, openvms.mak, os2.mak, ugcclib.mak,
unixtail.mak, watc.mak, watclib.mak)
Drivers
-------
Updates driver support to use the new write-position stream. (gdevpsdf.c)
Platforms
---------
Fixes bugs:
- The Windows Registry calls didn't deal properly with a null
pointer. (gp_wgetv.c)
Makes a small change in the platform semaphore / monitor API. (gpsync.h,
gxsync.h, gp_win32.c, gxsync.c)
Adds a dummy thread / semaphore / monitor implementation. Note that with
this implementation, async rendering WILL NOT WORK. (gp_nsync.c)
Adds pthreads thread creation and POSIX semaphores for Unix platforms. (We
still need to add System V semaphores, which is all that is available on
Solaris and BSDI.) (gp_semon.c, gp_posem.c, gp_pthr.c).
Fonts
-----
Fixes bugs:
- CIDFontType 0 fonts didn't select the proper VM space for adding
entries to font dictionaries, and for loading Subrs strings. (gs_cidfn.ps)
- TrueType fonts with an odd glyfs length didn't work. (gs_ttf.ps)
- TrueType fonts with a Format 3 'post' table didn't work.
(gs_ttf.ps)
- TrueType fonts where the encoding in the 'post' table didn't cover
the entire set of glyfs didn't work. (gs_ttf.ps)
- TrueType fonts with more than 128K of glyfs didn't work.
(gs_ttf.ps)
- TrueType cmap format 6 didn't work. (gs_ttf.ps)
- CIDFontType 0 fonts with hex data didn't skip over the > at the
end of the data. (gs_cidfn.ps)
Interpreter
-----------
Works around the fact that gs_shfill can't do a gs_setcolorspace for color
spaces that require interpreter assistance. (gs_ll3.ps)
Moves clipsave and cliprestore to C code. (gs_ll3.ps, zmisc3.c)
Updates some files to reflect the redivision of gsmemory.h and gsstruct.h.
(imemory.h, istruct.h, ialloc.c)
Streams
-------
Adds a stream that just keeps track of the write position. (stream.h,
stream.c)
Removes the compilation dependency that required all clients of the zlib
filters to be compiled with the zlib source directory in the search path.
(szlibx.h, szlibxx.h, szlib[cde].c)
Library
-------
Fixes bugs:
- ImageType 4 images with >1 input component didn't work.
(gximage4.c)
- Sampled functions didn't keep the fractional part when
interpolating, possibly leading to infinite recursion in shading.
(gsfunc0.c)
- The color error value for shadings was computed incorrectly for
CIE color spaces. (gxshade.c)
- The CharstringType 2 'roll' operator rolled the operands in the
wrong direction. (gstype2.c)
- Images with RasterOp or transparency didn't retain the current
color properly, leading to unpredictable results. (gdevmrop.h, gsropt.h,
gdevddrw.c, gdevrops.c, gxdcolor.c, gxiinit.c, gximage3.c)
- A cast to void * was needed to remove a const modifier.
(gscrdp.c)
- On 8-bit non-gray-scale devices, RasterOp values of all-0s or
all-1s produced the wrong output. (gdevmrop.c)
- The GC procedure for halftone screen enumerators was wrong,
possibly causing invalid memory access errors. This bug predates 5.10.
(gshtscr.c)
- An extra pair of string quotes confused some compilers.
(gsshade.c)
- There were several errors in the CharstringType 2 'flex'
operators. (gstype2.c)
- The structure descriptors for devices weren't initialized in
library-only configurations. (int.mak, gconf.c)
- The Pattern cache got confused if the current device when a
Pattern color was used wasn't the same as the current device when the
Pattern instance was created. (gxpcmap.c)
- The target of forwarding devices wasn't reference-counted
properly. (gsdevice.c) ****** FIXING THIS PROPERLY WILL BE A LOT OF WORK:
WE ONLY FIXED gs_setdevice_no_erase ******
- As a result of fixing a typo, the structure declaration for
gx_page_queue was private, causing clients not to compile. We left it
private and added an instance allocation procedure. (gxpageq.h, gdevprna.c,
gxpageq.c)
- The mask for ImageType 3 images was clipped (incorrectly).
(gximage3.c)
- Interpolated images with negative X->X values in the CTM were
displaced on the page. (gxiscale.c)
Finishes integrating the asynchronous rendering code. (gpsync.h, gxclist.h,
gdevprna.c, gsmemlok.c, gxclimag.c, gxclpath.c, gxclutil.c)
Updates the memory manager API for additional flexibility needed for
asynchronous rendering. (gsmalloc.h, gsmemlok.h, gsmemraw.h, gsalloc.c,
gsmalloc.c, gsmemlok.c)
Updates the standard memory manager to work with a fixed (externally
supplied) set of chunks, needed for asynchronous rendering, removing some
macros in the process. (gsalloc.h, gsalloc.c)
Updates some code to use more mnemonic variable names. (gstype2.c,
gxicolor.c)
Removes some macros for better readability. (gdevmrop.c)
Adds dummy implementations of clipsave and cliprestore. (gsclipsr.h,
gsclipsr.c)
Implements an alternative, but completely untested, parameter list
serializer based on streams. (gsparam2.c)
Moves more of the internal memory manager structures from gsmemory.h to
gsstruct.h. (gsmemory.h, gsstruct.h, gsmemory.c)
Version 5.28(limited) (8/3/98)
==============================
This fileset almost finishes merging in the code for overlapped
("asynchronous") interpretation and rasterizing that gave rise to the
side-branch versions 5.13 and 5.14; eliminates all initialized non-constant
globals from the graphics library (but not from the interpreter); and adds a
few more LanguageLevel 3 features (CIEBasedDEF[G] color spaces, CloseSource
and CloseTarget for streams, Separation base space for Indexed color
spaces).
We were not originally planning to produce another fileset until the code
merge was completed; however, the schedule demands of another Aladdin
project justify another intermediate fileset.
Documentation
-------------
Notes that the MSVC++ 5.0 compiler may lock up when compiling gxi12bit.c
with optimization. (make.txt)
Procedures
----------
Fixes bugs:
- psl3 didn't include fzlib. (int.mak)
- The Windows makefile had the wrong name for a DLL. (winint.mak)
- The Borland Windows makefile had several errors. (bcwin32.mak)
At the request of a user, changes the creation of jconfig.h so it #includes,
rather than copies, arch.h. (jpeg.mak, gsjconf.h)
Utilities
---------
Fixes bugs:
- viewpbm.ps scaled the image wrong. (viewpbm.ps)
Drivers
-------
Fixes bugs:
- clist_close was declared as an open proc rather than a close proc.
(As it happens, this didn't make any difference.) (gxclist.c)
- A comment was improperly terminated. (gxpageq.h)
- A needed #include of memory_.h was missing. (gdevpsde.c)
Integrates nearly all the rest of the code for asynchronous rendering.
(gdevprn.h, gdevprna.h, gxcldev.h, gxclist.h, gxclpath.h, gxclmem.h,
gdevbmpa.c, gdevprn.c, gdevprna.c, gxclbits.c, gxclimag.c, gxclist.c,
gxclmem.c, gxclpath.c, gxclread.c, gxclrect.c)
Changes tracing of memory-based clists to occur only if -Z: is selected,
rather than always if the code was compiled with -DDEBUG. Note that this is
a NON-BACKWARD-COMPATIBLE CHANGE (but only affects debugging). (gxclmem.c)
Implements the NumCopies parameter for all page devices, not just printers.
(gxdevcli.h, gxdevice.h, gdevprn.c, gsdparam.c)
Splits off command list writing utilities into a separate file, since
gxclist.c was getting too large. (gxclist.h, gxclist.c, gxclutil.c)
Splits command list reading into control (gxclread.c) and the actual list
interpreter (gxclrast.c), since the file was getting too large. (gxcldev.h,
gxclrast.c, gxclread.c)
Distinguishes dev_proc_* (defining a general driver procedure) from
prn_dev_proc_* (defining a printer driver procedure). Unfortunately, we
have to keep dev_proc_print_page and _print_page_copies for backward
compatibility. (gdevprn.h)
Splits out of the BMP driver the parts shared with the async version
(gdevbmp.h, gdevbmp.c, gdevbmpc.c).
Changes the band rasterizer to implement get_bits_rectangle rather than
get_bits. In some cases, this results in much less computation.
(gxclist.c, gxclread.c)
Makes the monochrome H-P printer drivers emit a printer reset when closing
the device. According to a user, this helps prevent the ink nozzles from
clogging. (gdevdjet.c)
Platforms
---------
Fixes bugs:
- The Windows DLL entry point procedure didn't return a value as it
was supposed to. (gp_mswin.c)
Removes all remaining initialized but non-constant globals, and ensures that
all non-debugging-related BSS variables in the library are explicitly set to
0 at initialization time. (gp_unix.c)
Improves an error message slightly. (dwmainc.cpp)
Interpreter
-----------
Fixes bugs:
- The tracing code for restore_resources could access an invalid
address. (isave.c)
- sizeof(procedure) is not allowed in ANSI C++. (opdef.h,
iccfont.c, interp.c, ireclaim.c)
- A variable was declared incorrectly as bin_token_type_t rather
than bin_seq_type_t. (iscanbin.c)
- The behavior of copypage didn't change in LanguageLevel 3.
(gs_init.ps)
- When grestore et al reactivated a page device, they performed an
initgraphics, which should only be performed by showpage. (gs_setpd.ps)
- The RunLengthEncode filter was broken in cases where the caller
supplied a record size. (bug introduced in 5.2x) (zfilter.c)
- A needed #include of memory_.h was missing. (zfreuse.c)
- On machines with sizeof(long) > sizeof(int), the dictionary form
of image and imagemask didn't work. (bug introduced in 5.2x) (zimage2.c)
- exitserver left a 'true' on the operand stack. (gs_lev2.ps)
Replaces the STACK_LOOP_BEGIN/END macros with procedures. (We retain the
macros for backward compatibility.) (istack.h, istack.c, zchar.c,
zcontrol.c, zdict.c, zvmem.c)
Reviews the remaining operator files for ease of reading / debugging,
including removing macros where appropriate. (z*.c)
Changes the dictionary stack printer to indicate whether the dictionary is
allocated in global or local VM. (gs_init.ps)
Redefines countexecstack and execstack as operators, solely for the sake of
the Genoa [count]execstack tests. (gs_init.ps, zcontrol.c)
Changes array/string/packedarray forall not to keep an index on the stack,
solely for the sake of the Genoa [count]execstack tests. (zgeneric.c)
Finishes implementing CIEBasedDEF[G] color spaces. (icie.h, zcie.c)
Adds a ColorSpace resource instance for sRGB. (gs_lev2.ps, gs_res.ps)
Implements CloseSource and CloseTarget for filters. ****** DOESN'T WORK IF
AN EXCEPTION OCCURS DURING A NESTED CLOSE. ****** (zfile.c)
Allows Separation and DeviceN color spaces as the base space for an Indexed
color space. (zcsdevn.c, zcsindex.c, zcssepr.c)
Interpreter (PDF)
-----------------
Fixes bugs:
- In PDF files, Indexed color spaces with a CIEBasedABC base space
gave an /undefined error. (pdf_draw.ps)
Streams
-------
Fixes bugs:
- The report_error member of the DCT streams wasn't initialized
early enough. (ifilter.h, zfdctd.c, zfdcte.c, zfile.c)
Changes the zlib filters to use the stream's allocator, rather than the
default allocator, for their private storage. Note that this requires the
stream itself to keep pointers to this storage, for garbage collection.
(szlibx.h, szlibc.c, szlibd.c, szlibe.c)
Updates some clients to use new, simpler GC structure descriptors. (sdct.h,
sfilter.h, sdctc.c, sfilter1.c)
Adds a close_strm member for the interpreter's use (CloseSource /
CloseTarget). (stream.h, stream.c)
Library
-------
Fixes bugs:
- gstate, currentgstate, and setgstate didn't handle the effective
clip path properly, possibly leading to dangling pointers. (gsstate.c)
- setrasterop, setsourcetransparent, and settexturetransparent
should all return int rather than void, since they can fail. (gsrop.h,
gsrop.c)
- FunctionType 1 functions didn't clip the output value to the
Range. (gsfunc3.c)
- A needed cast from byte * to char * was missing. (gscrdp.c)
- Some needed #includes of *_.h were missing. (gscrd.c, gscrdp.c,
gxshade6.c)
- The prototype for gx_effective_clip_path wasn't #included in a
needed place. (gsimage.c)
- RasterOp sometimes didn't work properly for devices whose
representation of white wasn't a pixel value of 0. (gxdcolor.h, gdevbbox.c,
gdevdbit.c, gdevvec.c, gslib.c, gxdcolor.c)
- The variable used to detect double declaration of
gs_get_bits_params_t was named incorrectly. (gxdevcli.h, gxgetbit.h)
- gs_[eo]clip never retained the clipping path in its original form.
These routines now retain it in the simple case (the old clipping path is a
rectangle, and the new path is completely contained within it). This
requires a small NON-BACKWARD-COMPATIBLE change in the gx_cpath_intersect
procedure: it no longer updates the new path, and it flattens the path if
needed. To avoid problems, we renamed this procedure as gx_cpath_clip.
(gsdps.c, gspath.c, gxcpath.c)
- If the image was empty, gs_image_common_init didn't free the
lower-level enumerator. (gsimage.c, gxccache.c)
Removes all remaining initialized but non-constant globals, and ensures that
all non-debugging-related BSS variables in the library are explicitly set to
0 at initialization time. (gxdevice.h, gconf.c, gsdevice.c, gshtscr.c,
gsiodev.c, gsutil.c, gxcht.c)
Finishes implementing table-driven GC descriptors. We expected it to save
considerable space at negligible time cost; it actually shrank the 1Mb
executable by only about 5K, and slowed down garbage collection by about
2%. (gsfcmap.h, gsstrtab.h [deleted], gsstruct.h, gzpath.h, gsfcmap.c,
gsmemory.c, gsstrtab.c [deleted])
Finishes implementing CIEBasedDEF[G] color spaces. (gscie.h, gscie.c)
Simplifies some code by removing or redefining macros. (gxi12bit.c)
Removes all patches made for easier retrofitting of 5.2x code into 5.1x
filesets. (gdevdrop.c, gdevmrop.c, gslib.c, gspcolor.c)
Reviews a few more files for style and readability. (gxbitfmt.h,
gxgetbit.h)
Allows Separation (and, if included, DeviceN) color spaces as the base space
of an Indexed color space. Unfortunately, this involves introducing a new
distinction in color space types, which entails NON-BACKWARD-COMPATIBLE
changes in the color space and color space type structures. (gxcspace.h,
gscdevn.c, gscolor1.c, gscolor2.c, gscpixel.c, gscscie.c, gscsepr.c,
gscspace.c, gspcolor.c)
Makes a small addition in order to fix an interpreter bug. (gxfixed.h,
gdevbbox.c)
Version 5.27(limited) (7/18/98)
===============================
This is another "in-flight" snapshot made in preparation for the 5.2x / 5.1x
code merge. It completes the driver CRD API.
Documentation
-------------
Fixes bugs:
- The reference to psview was out of date. (new-user.txt)
Adds some pointers to Aladdin Ghostscript mirror sites. (new-user.txt)
Updates the C style guide a little further. (c-style.txt)
Adds documentation on driver-supplied CRDs. (drivers.txt)
Updates the JPEG makefile to mention IJG release 6b. (jpeg.mak)
Updates documentation to reflect the devs.mak / contrib.mak split. (README,
devices.txt, drivers.txt, make.txt, new-user.txt, source.txt, use.txt)
Procedures
----------
Fixes bugs:
- sjpegerr.o was needed even when using the shared JPEG library.
(jpeg.mak)
Changes the name of the jpeg library directory from jpeg-<version> to just
jpeg, to parallel libpng and zlib. (make.txt, *.mak)
Creates a separate makefile for contributed drivers. Eventually these
drivers will go in a separate directory. (devs.mak, contrib.mak, *.mak)
Drivers
-------
Fixes bugs:
- The pkm driver was absurdly inefficient. (gdevpbm.c)
- The psfax driver (which, admittedly, doesn't come close to
working) no longer compiled. (gdevpfax.c)
- The ARCHAIC mode of the Epson driver emitted an incorrect
character ('r' instead of ^R). (gdevepsn.c)
- The X driver didn't check the calls of XInitImage for error
status. (gdevx.c)
Updates a client for the change in the names of the gb_ values. (gdevx.c)
Updates a client for the added param_request procedure. (gdevpsdf.c)
Reformats all Aladdin-maintained drivers to the new Ghostscript standard
format, using indent. We deliberately did not reformat user-contributed
drivers, since indent mangles a line once in a while and we do not want to
take responsibility for fixing others' code. (*.h, *.c)
Adds a default CRD specification to the 'bit' device, for testing.
(gdevbit.c)
Integrates a bit more of the support code for asynchronous rasterizing.
(gxband.h, gxclio.h, gxclist.h, gxclmem.h, gxclfile.c, gxclist.c, gxclmem.c,
gxclread.c, gxpageq.h, gxpageq.c)
Platforms
---------
Adds thread support to the Win32 platform. (gp_win32.c)
Interpreter
-----------
Fixes bugs:
- Composite fonts with CID-keyed descendants didn't run the
BuildGlyph procedure. (zchar.c)
- The internal representation of CMaps was built incorrectly.
(zfcmap.c)
- Category resources didn't load from files automatically.
(gs_res.ps)
Reformats all files to the new Ghostscript standard format, using indent.
(*.h, *.c)
Reviews most of the operator files for ease of reading / debugging,
including removing macros where appropriate. (z*.c)
Updates a client for the change in the names of the gb_ values. (zdevice.c)
Updates a client for the added param_request procedure. (iparam.c)
Updates clients for the completion of the CRD API. (zcie.c, zcrd.c)
Increases the initial size of systemdict a little more, to allow for -d and
-s. (iinit.c)
Interpreter (PDF)
-----------------
Fixes bugs:
- Text modes other than 0 didn't work with multiple-byte fonts.
(pdf_ops.ps)
- There were many bugs in the code for Type 0 and CIDFontType 0
fonts. (pdf_font.ps)
Library
-------
Fixes bugs:
- cshow returned a character code of -1 for composite fonts with
FMapType 9 (CMap-based). (gsfcmap.h, gschar0.c, gsfcmap.c)
- The GC procedure for enumerating show enumerators was broken.
(bug introduced in 5.24 or 5.25) (gschar.c)
- dashpath always copied the path, instead of only copying it if
needed. (gspath1.c)
- The hint replacement fix in 5.24 sometimes thought a path was
closed when it wasn't, producing gross distortions of some characters.
(gxhint3.c)
Cleans up code for debugging by expanding macros, etc. (gstext.h,
gschar0.c)
Changes the gb_ values to all caps, in line with general C convention. This
is a NON-BACKWARD-COMPATIBLE change to an as yet rarely-used API.
(gxbitfmt.h, gdevalph.c, gdevdgbr.c, gdevmem.c, gsalphac.c, gximage2.c)
Enhances the default implementation of parameter lists to allow requesting
individual parameters. This is needed for the driver CRD API. (gsparam.h,
gscparam.c, gsparam.c)
Completes the API for driver CRDs, also moving some code from gscie.c to
gscrd.c. This involves a NON-BACKWARD-COMPATIBLE change in the prototype of
the TransformPQR procedures. (gscie.h, gscrd.h, gscrdp.h, gscie.c, gscrd.c,
gscrdp.c)
Reformats all files to the new Ghostscript standard format, using indent.
(*.h, *.c)
Splits up gdevmrop.c into 3 files: gdevmrop.c (RasterOp implementation for
memory devices), gdevdrop.c (default and device-independent RasterOp
algorithms), and gdevrops.c (RasterOp-source device). (gdevmrop.h,
gdevdrop.c, gdevmrop.c, gdevrops.c)
Version 5.26(limited) (7/7/98)
==============================
The purpose of this fileset is to add an API for drivers to provide one or
more device-appropriate CIE rendering dictionaries. Like 5.25, it is a
"snapshot" fileset not made available even to beta testers.
Procedures
----------
Fixes bugs:
- An !endif was omitted. (msvc32.mak)
- A newly needed Windows library was omitted. (msvctail.mak)
- The /Za and /Ze switches were set incorrectly for MSVC.
(bcwin32.mak, msvccmd.mak, watcw32.mak, winint.mak, winlib.mak)
Drivers
-------
Fixes bugs:
- A closing bracket was omitted (in code that is ifdef'd out).
(gdevpdf.c)
Fonts
-----
Changes the font loader so that instead of pushing systemdict and a small
empty dictionary on the stack before loading a font, it pushes userdict.
This is what Adobe interpreters do, but this will probably break some
PostScript files, specifically ones that redefine 'index'. I don't see how
the Adobe interpreters can possibly do the right thing for such files.
(gs_fonts.ps, gs_type1.ps)
Interpreter
-----------
Updates clients for changes in CRD API. This involves some changes in
internal procedures. (gs_lev2.ps, icie.h, zcie.c, zcrd.c)
Library
-------
Fixes bugs:
- Pickling string, name, and array parameters tried to force
inappropriate alignment. (gsparams.c)
- Pickling dictionary parameters wrote the result in the wrong
place. (gsparams.c)
- An occurrence of dev_t should have been gx_device. The compiler
didn't catch this because there happens to be a type named dev_t in
<types.h> (!). (gxclread.c)
Adds an API for drivers to provide one or more CRDs (as device parameters).
Makes a small but NON-BACKWARD-COMPATIBLE change in the names and argument
lists of the existing CRD API (which is not used by anything in the standard
configuration). (gscie.h, gscrd.h, gscrdp.h, gscie.c, gscrd.c, gscrdp.c,
gslib.c)
Version 5.25(limited) (7/1/98)
==============================
This is a "snapshot" fileset created for the purpose of merging with a
separate development branch. While it fixes some significant bugs in 5.24,
it doesn't represent substantial additional progress.
Documentation
-------------
Completely rearranges the C style guide, updates it to reflect current
practice, and adds a 1-page summary of the most important points.
(c-style.txt)
Updates the man pages for consistency and to correct minor errors. (*.1)
Notes that the pjxl300 driver works with the H-P CopyJet. (devices.txt,
devs.mak).
Notes that in order to deal with over-zealous Solaris security checking,
additional linker switches are needed. (make.txt, unix*.mak)
Procedures
----------
Fixes bugs:
- 'make install' didn't get the executable from the right place.
unixinst.mak)
- COMPILE_INITS=1 didn't work. (int.mak, geninit.c)
- The MSVC makefile updates hadn't been applied to the MSVC-only
devices. (devs.mak)
- The other PC makefiles didn't define GLCCWIN. (bcwin32.mak,
watcw32.mak)
Adds bounding box testing to the library test program. (ugcclib.mak)
Reviews and reformats code for maintainability. (genarch.c, geninit.c)
Moves the MS Windows-specific devices to a new file. (bcwin32.mak,
devs.mak, msdevs.mak, msvc32.mak, watcw32.mak)
Platforms
---------
Reviews and reformats header files for maintainability. (vmsmath.h,
windows_.h)
Removes some no-longer-used files from the fileset. (overlay.h, gp_itbc.c)
Fonts
-----
Fixes bugs:
- Substituted fonts had their FontName set to the requested one.
There was a comment in the code saying that some files that depend on this
happening, but Adobe implementations don't do it. However, aliased fonts in
Fontmap will continue to have the FontName set to the Fontmap key.
(gs_fonts.ps)
Adds the euro symbol at position 240 (0360) in SymbolEncoding. This is a
PostScript 3 addition, but it's too much work to make it appear there only
if languagelevel >= 3. (gs_sym_e.ps)
Interpreter
-----------
Fixes bugs:
- The bbox device didn't work if its target was itself a forwarding
device. (gdevbbox.c)
- User parameters maintained at the PostScript (as opposed to VM)
level didn't work. (gs_init.ps)
- Idiom recognition didn't work. (gs_init.ps, gs_ll3.ps, zmisc3.c)
- .beginpage and .endpage could cause an error if the current device
was a page device but was installed with setdevice rather than
setpagedevice. (gs_setpd.ps)
In the interest of readability, replaces all casting macros with separate
variables, other than those used in enum_ptrs and reloc_ptrs procedures.
Note that doing this for rptr in gc_trace in igc.c will have a significant
performance cost on Intel CPUs, unless the compiler has a very good
optimizer, because it introduces another variable competing for scarce
registers in the most performance-critical section of code in the garbage
collector. (ialloc.c, igc.c, iparam.c, isave.c, istack.c, zchar42.c,
zfproc.c, zusparam.c)
Changes some macros to procedures. (igc.c, ilocate.c, zusparam.c)
Changes some macros to static quasi-constants (only variable for debugging).
(zvmem.c)
Adds #include "errors.h" to oper.h, removing it from z*.c. (oper.h, z*.c)
Reviews and reformats some header files for maintainability. This is an
ongoing project. (bfont.h, errors.h, iinit.c)
Consolidates and simplifies the reading and writing of binary tokens and
binary object sequences. (bseq.h [deleted], btoken.h, ibnum.h, ibnum.c,
iscanbin.c, zbseq.c)
Adds dummy user and system parameter entries for all the parameters listed
in Appendix C of the PostScript Red Book: even though the book clearly says
that no PostScript program should rely on the presence of any particular
parameter, PostScript files routinely assume the existence of the parameters
listed in Appendix C. (gs_init.ps, gs_lev2.ps, gs_res.ps)
Adds dummy user and system parameter entries for the new parameters listed
in the 3010 Supplement. (gs_ll3.ps)
Adds double-inclusion protection to all header files. (*.h)
Moves the creation of binary object sequence headers from C to PostScript
code. (zbseq.c, gs_btokn.ps)
Adds support for multiple FormTypes and ColorRenderingTypes. (gs_init.ps,
gs_lev2.ps, gs_res.ps, zcrd.c)
Updates structures and clients for the introduction of "raw memory"
allocators. (ialloc.h, igc.h, ialloc.c, imain.c, isave.c)
In the interest of readability and being able to use GNU indent to create
standard formatting, changes the operator tables from procedures back to
data structures. This change is backward-compatible for all operator files,
although we also edited all of Ghostscript's own operator definitions to
remove the BEGIN_OP_DEFS and END_OP_DEFS macros (which now have to generate
a little unnecessary code for backward compatibility). (opdef.h, iconf.c,
iinit.c, iutil.c, z*.c)
Splits zchar2.c into a Level 1+ part and a Level 2 part. (zcfont.c,
zchar2.c)
Interpreter (PDF)
-----------------
Adds font synthesis based on the FontDescriptor. Currently this is very
rudimentary. (pdf_font.ps)
Drivers
-------
Fixes bugs:
- The PDF writer didn't default to A4 paper size if A4 was selected
as the default in the makefile. (gdevpdf.c)
- The default implementation of the begin_image procedure always
called the image's begin_image implementation, rather than the device's
begin_typed_image implementation. (gdevddrw.c)
- The bbox device didn't initialize its reference count.
(gdevbbox.c)
- A necessary cast was omitted. (gdevpsde.c)
Changes some macros to procedures. (gdevpstr.h, gdevpstr.c)
Adds an internal device to implement the PCL5 special color mapping
algorithms. (gdevcmap.h, gxdevice.h, gdevcmap.c, gdevnfwd.c)
Adds double-inclusion protection to all header files. (*.h)
Updates drivers for the change in begin_image. (gdevbbox.c, gdevpdfi.c,
gdevvec.c, gxclimag.c)
Library
-------
Fixes bugs:
- The non-ANSI definitions of CLEAR_MARKS_PROC, ENUM_PTRS_BEGIN_PROC
and RELOC_PTRS_BEGIN were missing a parameter. (gsstruct.h)
- A few necessary casts were omitted. (gsparam.c, gxpcmap.c)
- Images or Patterns with non-default RasterOps could cause crashes.
(gdevmrop.c, gxp1fill.c)
- Exponential Interpolation functions with non-integral positive
exponents incorrectly required the lower bound of the domain to be strictly
positive rather than only non-negative. (gsfunc3.c)
- The attempt to achieve the desired color smoothness when shading
could compute (nearly) forever. (gxshade.c, gxshade1.c)
- The arc change in 5.24 caused arcs to render incorrectly.
(gspath1.c)
- The macro-reducing cleanup in 5.24 introduced a bug in handling
copy operations with negative skew. (gdevm1.c)
Adds unmasked images and bounding box testing to the library test program.
(gxdevcli.h, gslib.c)
Changes some macros to procedures. (gxfunc.h, gsfunc.c, gsfunc0.c,
gsfunc3.c)
Adds double-inclusion protection to all header files. (*.h)
Reviews and reformats header files for maintainability. (*_.h, dodebug.h
[deleted])
Changes the structure of the common part of the image enumerator to include
the device (which may be different from the original device, because of
forwarding), and to access the procedures through a pointer to a const
structure. This is a NON-BACKWARD-COMPATIBLE CHANGE for implementors of
begin_image, since they now must pass the device to
gx_image_enum_common_init. (gximage.h, gxiparam.h, gdevddrw.c, gdevdflt.c,
gxiinit.c, gximage3.c, gximage4.c)
Adds tests of the new color mapping device to the library test program.
(gslib.c)
Removes the last vestiges of segmented pointers. (genarch.c, std.h)
Introduces a "raw memory" API, primarily for managing the underlying memory
pool for embedded systems. This involves a NON-BACKWARD-COMPATIBLE-CHANGE
in the implementation (but not ordinary clients) of allocators.
(gsmemory.h, gsmemraw.h, gxalloc.h, gsalloc.c, gsmalloc.c, gsmemory.c)
Version 5.24(limited) (6/17/98)
===============================
In addition to the usual bug fixes, and a few enhancements where temptation
proved irresistible or in response to an external need, this fileset:
- Takes the first steps on a major readability cleanup
(4-space indentation instead of 2, replacement of macros by
procedures, ....)
- Implements a bit more of the DPS functionality, including view
clipping, and gstate stack copying for 'fork'.
- Starts to sketch a text API for drivers.
- Changes the Unix makefiles so that they create production binaries
in a separate directory.
Again, there are some non-backward-compatible changes required by other
architectural improvements. As always, we have tried to minimize the impact
of such changes on users' code.
Documentation
-------------
Fixes bugs:
- The -Kn switch wasn't documented. (use.txt)
- The term "Software" was used instead of "Program" in the last
paragraphs of the license. (PUBLIC)
Adds a couple of missing operators to the list at the end of ostack.h.
(ostack.h)
Documents more precisely which gstate points to which objects after various
gstate operations. (gsstate.c)
Corrects some addresses for the Free Software Foundation. (commprod.txt,
new-user.txt)
Improves the documentation for memory management of color spaces. (gscie.h,
gscolor2.h)
Updates the list of hardware available to Aladdin. (new-user.txt)
Documents ReopenPerPage. (language.txt)
Moves the documentation of image rendering procedures to a better place.
(gximage.h, gxiinit.c)
Clarifies that old slzwe.c files may not work with current Ghostscript
versions. (make.txt)
Procedures
----------
Fixes bugs:
- psl3.dev didn't include func.dev. (int.mak)
- device and device2 devices weren't sorted together, causing
devices to appear in the list out of order (including, possibly, selecting
the wrong device as default). (genconf.c)
- The mswindll module definition omitted some needed files.
(devs.mak)
Changes the optimization level for gcc from -O to -O2 for both standard and
profiling builds. (unix-gcc.mak)
Defines 3 new makefile macros for the Unix platforms,
CFLAGS_{STANDARD|DEBUG|PROFILE}, that give the additional compiler switches
for these 3 compilation options. (unixansi.mak, unix-cc.mak, unix-gcc.mak)
Changes the Unix makefiles so that by default they create the binaries in an
'obj' subdirectory of the source directory. (unixansi.mak, unix-cc.mak,
unix-gcc.mak, unix-end.mak)
Updates the MSVC++ makefiles so they allow setting any configuration
parameter from the make command line. (msvc32.mak, msvccmd.mak, msvccom.mak
[deleted], msvclib.mak, msvctail.mak)
Utilities
---------
Fixes bugs:
- ps2ascii was broken. (ps2ascii.ps)
Adds capability to gslp.ps:
- Variable-width fonts (but without automatic line breaking);
- Pair kerning (from AFM file);
- Inter-character and space width adjustment.
This project was done for a paying customer. (gslp.ps)
Drivers
-------
Fixes bugs:
- The name of the plan9bm device was wrong. (gdevpbm.c)
- The PDF writer wrote incorrect parameters for the CCITTFax filter
used to compress Type 3 font bitmaps. (bug introduced in 5.23) (gdevpdfi.c)
- The PDF writer emitted two 'endobj' lines for Type 3 bitmap fonts.
(gdevpdf.c)
Removes all remaining uses of _ds and _ss in Aladdin's drivers. (gdevprn.h,
gdevsvga.h, gdevbit.c, gdevcgm.c, gdevdjet.c, gdevmsxf.c, gdevpbm.c,
gdevpccm.c, gdevpcfb.c, gdevpdfi.c, gdevprn.c, gdevsvga.c, gdevtfax.c)
Renames a local macro named END. (gdevcgml.c)
Removes all uses of far_data other than for device (but not device2)
prototypes. (gdevbit.c, gdevdjet.c, gdevemap.c, gdevmsxf.c, gdevpbm.c,
gdevpcfb.c, gdevpcx.c, gdevpdf.c, gdevpng.c, gdevps.c, gdevpsim.c, gdevpx.c,
gdevtfax.c, gdevtfnx.c, gdevvglb.c, gdevx.c, gdevxalt.c)
Adds a psrgb driver that writes PostScript (Level 2) planar,
run-length-compressed, 24-bit RGB images. (gdevpsci.c)
Starts to define and implement a driver procedure for text. This interface
will certainly change in the future as we get more insight into the division
of responsibility and control flow between generic code, individual drivers,
and internal and external fonts. This involves a major
NON-BACKWARD-COMPATIBLE CHANGE in the gs_show_enum structure (which no
client should be accessing directly). (gdevmem.h, gdevprn.h, gstext.h,
gxchar.h, gxdevcli.h, gxdevice.h, gxtext.h, gdevbbox.c, gdevht.c,
gdevnfwd.c, gschar.c, gschar0.c, gstext.c, gxacpath.c, gxclip.c, gxclip2.c,
gxclipm.c, gxclist.c, gxpcmap.c)
Extends the parameter list printer to handle names and arrays. (gdevpsdf.c)
Implements the ability to write out a Type 1 font definition, for embedding
fonts in PDF output. Currently this code isn't called from anywhere, and it
will certainly be subject to change in the future. (gdevpsdf.h, gdevpdfi.c,
gdevpsde.c, gdevpsdf.c)
Adds the PCL XL Protocol Class 2.0 operators, attributes, and enumerated
values to the relevant header files. (gdevpxat.h, gdevpxen.h, gdevpxop.h)
Converts some additional devices to -dev2, to make them const. (devs.mak,
gdevjpeg.c)
To help in debugging, changes all uses of
#define ss ((stream_xxx_state *)st)
to
stream_xxx_state * const ss = (stream_xxx_state *)st;
(gdevpdfi.c, gdevpsdi.c, gdevpsdp.c, gdevpsds.c)
Massages mem_mono_copy_mono and mem_mono_strip_tile_rectangle to reduce the
use of macros somewhat. (gdevm1.c, gdevmem.h)
Makes a change to support the change in gs_param_list_common. (gdevpsdf.c)
Replaces all remaining uses of do { ... } while (0) with BEGIN ... END.
(gdevpdfm.c, gdevpx.c, gdevx.c, gdevxalt.c)
Adds a ReopenPerPage Boolean device parameter for printers, which causes the
output file to be closed and reopened for each page. This may be helpful in
persuading spoolers to start printing as soon as the first page is
available. (gdevprn.h, gdevprn.c)
Makes the %-format validator for output file names a procedure, even though
it's only called in one place. (gdevprn.c)
Updates some clients for the change from std_procs to procs. (gdevp2up.c,
gdevpbm.c, gdevupd.c,
Removes the use of the CleanFaxData tag (327) from TIFF output, since many
applications don't recognize it and it isn't in the TIFF 6 documentation.
(gdevtifs.h, gdevtfax.c)
Platforms
---------
Adds a new gp_setmode_binary platform procedure, to set a file into binary
mode on platforms that distinguish text and binary. (gp.h, gp_*.c)
Fonts
-----
Fixes bugs:
- The derived (Bold, Oblique, ...) Hershey fonts were broken.
(fonts/makeher.ps, fonts/h*.ps)
Interpreter
-----------
Fixes bugs:
- As always, gcc failed to report some signed/unsigned char *
mismatches. (imainarg.c)
- Some needed #includes were missing. (zcrd.c, ztype.c)
- Contexts were always allocated in global VM (should be local VM),
and were freed in the current VM (should be local VM). Fixing this required
changing some internal interfaces defined in icontext.h. (icontext.h,
icontext.c, interp.c, zcontext.c)
- restore did some unnecessary gsaves. (zvmem.c)
- Creating a new context didn't initialize the graphics state
properly, and didn't do the first gsave that grestoreall relies on.
(gs_dps.ps)
- The bookkeeping for open files didn't work with multiple contexts.
Fixing this required a substantial (simplifying) redesign of the
interpreter's bookkeeping for streams in general: this may have introduced
new bugs. (files.h, ireclaim.c, isave.c, zfile.c)
- fork didn't copy the graphics state stack. (zcontext.c)
- The space bits were set incorrectly in the array reference for the
operand stack, causing the garbage collector not to mark the operand stack
of contexts other than the current one. (interp.c)
- LanguageLevel 3 facilities weren't enabled when desired.
(gs_ll3.ps, ilevel.h, opdef.h, iinit.c, zcsdevn.c, zimage3.c, zmisc2.c,
zmisc3.c, zshade.c, ztrap.c)
- flushfile with a procedure-target stream didn't pass the buffered
data to the procedure. We tinkered with this a little, but it still isn't
fixed. (zfilter.c, zfproc.c)
- The top-level color space objects allocated by the CIE color space
setting operators were never freed (until garbage collection). (zcie.c)
- setpagedevice with a 0-size page didn't fail. (gs_setpd.ps,
zmedia2.c)
- If one or more of the matrices in a CIE color space or CRD was
singular, setcolorspace or setcolorrendering could cause a stackoverflow.
(zcie.c)
- defineuserobject didn't work. (I don't see how it could ever have
worked.) (gs_dps2.ps)
- The version string wasn't read-only. (gs_init.ps, gs_lev2.ps,
gs_ll3.ps)
- Some standard resource categories weren't defined (which they need
to be, even if they have no instances). (gs_res.ps, gs_ll3.ps)
- The Trapping ProcSet was empty. (gs_ll3.ps)
- setvmthreshold didn't accept a value of -1. (gs_lev2.ps,
gs_pdfwr.ps, zusparam.c, zvmem2.c)
- Binary tokens containing native reals with swapped byte order
didn't read in properly. (ibnum.c, iscanbin.c)
- In binary object sequences, many executable objects were
incorrectly written out as literal. (zbseq.c)
- String DataSources for shadings didn't work. (zshade.c)
- Parameter dictionaries with integer keys didn't work. (iparam.c)
- A "can't happen" condition caused massive confusion instead of a
rangecheck error. (gs_setpd.ps)
- setcachelimit and setcacheparams were broken, because they no
longer interacted correctly with setuserparams and setsystemparams.
(gs_lev2.ps)
- The source width and height of images was arbitrarily limited to
32767. (zimage2.c)
- The optional dictionary parameter for filters was the last
operand, not the first. (zfbcp.c, zfdecode.c, zfilter.c, zfilter2.c,
zfilterx.c, zfzlib.c)
- If the current color space was Indexed, Separation using the
alternative space, or DeviceN using the alternative space,
currentgray/cmykcolor/hsbcolor/rgbcolor returned 0 rather than the
underlying color. (This was a correction to the Red Book in the 3010
Language Supplement, Section D.2.4 and D.2.5.) (gscolor.c, gscolor1.c,
gxcspace.h)
Implements some additional LanguageLevel 3 stream facilities:
- CloseSource and CloseTarget (parsing only). (ilevel.h, zfilter.c)
- Dictionary argument for SubFileDecode. (zfilter.c)
- UnitSize (fully implemented) and LowBitFirst (parsing only) for
LZWDecode. (zfdecode.c)
- ReusableStreamDecode (incomplete). (gs_ll3.ps, zfreuse.c)
Removes all remaining uses of _ds and _ss. (bfont.h, errors.h, files.h,
icie.h, idict.h, idparam.h, ifunc.h, iscan.h, iutil2.h, opdef.h; iccfont.c,
idict.c, idparam.c, igc.c, iinit.c, iparam.c, iscan.c, iscannum.c, iutil2.c,
zcid.c, zcie.c, zdevice2.c, zfdecode.c, zfile.c, zfileio.c, zfont0.c,
zfont2.c, zfont42.c, zfunc.c, zht2.c, zusparam.c)
Removes the use of gs_if_debug_c. (zvmem2.c)
Updates clients for the change in color space num_components. (zcolor2.c,
zcsindex.c, zcssepr.c, zpcolor.c)
Changes the stack manager so it can ensure an unused margin above the top
element. This is needed for a possible change in the operator API.
(istack.h, istack.c)
Decouples the definition of the interpreter instance from the definition of
the exported procedures that use it, so that we can use it in more places
internally. (iminst.h, main.h)
Removes all initialization of static per-context state. (iinit.c, iscan.c,
zmath.c)
Makes the freeing of VM spaces entirely dependent on the number of contexts
referencing them, removing the special handling of interpreter termination.
(icontext.h, gsalloc.c, icontext.c, inouparm.c, interp.c, zcontext.c,
zusparam.c) ****** IN PROGRESS ******
Enables printing of time and memory usage even in non-DEBUG systems, for
benchmarking. (imain.c)
Adds a .forceundef operator to parallel .forceput. (gs_init.ps, zdict.c)
Rewrites the Form caching code to use the Pattern cache. (gs_fform.ps)
Removes all uses of far_data. (imain.c, imainarg.c, iname.c, opdef.h)
Moves responsibility for null page devices from C code to PostScript code.
(gs_setpd.ps, igstate.h, zdevice2.c, zgstate.c)
Changes the context scheduler to not store or reload the state when
switching from a context to the same context. (zcontext.c)
Moves .registerencoding from C code to PostScript code. (gs_init.ps,
zfont2.c)
Splits off inames.h (API for names and the name table) from iname.h (API for
the interpreter's name table); renames the_nt as the_gs_name_table, and
moves it to imain.c. We would like to rename iname.h as names.h, but there
are too many places that include it. (igc.h, iname.h, inamedef.h, inames.h,
imain.h, idict.c, idstack.c, igc.c, iname.c, interp.c, isave.c)
Splits off iestack.h and iostack.h from estack.h and ostack.h, as was done
for [i]dstack.h in 5.23. (estack.h, iestack.h, iostack.h, ostack.h,
interp.c)
Splits off the hit detection device from the user path code, moving it to
the library level where it belongs. (zupath.c)
Updates the interpreter for the changes in the enum_ptrs, reloc_ptrs, and
clear_marks memory management procedures. (igc.c, igcref.c, ilocate.c,
zcontext.c)
Removes all uses of 'near' from the interpreter: if short and long calls
have different formats, we rely on the compiler to generate the most
efficient one. (iccfont.c, imainarg.c, iparam.c, zdevice2.c, zdouble.c,
zdps.c, zgstate.c, zmatrix.c, zpath.c, zpath1.c, zrelbit.c, ztype.c)
Makes a couple of minor changes to support the change in
gs_param_list_common. (iparam.h, iparam.c)
Changes internaldict to an operator, and executive and findencoding to
procedures, in order to satisfy the Genoa FTS. (gs_dps.ps, gs_init.ps,
gs_res.ps)
Updates clients for the addition of device reference counting. (zpcolor.c,
zupath.c)
Replaces all remaining uses of do { ... } while (0) with BEGIN ... END.
(istruct.h, opcheck.h)
Adds a debugging operator for printing out a Type 1 font. (zfont1.c)
Updates the Type 1 font operators for the change in the procedure structure.
(zchar1.c, zfont1.c)
Updates one client for the change in the gs_show_enum structure. (zchar.c)
Removes an obsolete "hook" put in for a customer. (zchar.c)
Removes the BigStringEncode filter, which was only used by a former
customer. (zfilter.c)
Interpreter (PDF)
-----------------
Fixes bugs:
- Images defined in non-Device color spaces were broken.
(pdf_draw.ps)
Removes some vestiges of the old pdf2ps. (pdf_draw.ps, pdf_main.ps)
Adds some leftover PDF 1.2 features:
- F, FFilter, and FDecodeParms keys in stream dictionaries.
(pdf_base.ps)
- Functions, including predefined spot functions. (pdf_draw.ps)
- Name trees. (pdf_base.ps)
Adds some PDF 1.3 features. Note that these require a fair amount of
PostScript LanguageLevel 3 support. Note also that none of these have been
tested yet, because we don't have any source of test files.
- DeviceN and (stubbed) ICCBased color spaces. (pdf_draw.ps,
pdf_ops.ps)
- Additional extended graphics state parameters. (pdf_draw.ps)
- Number trees. (pdf_base.ps)
- Masked images. (pdf_draw.ps)
Works around a bug in pdfTeX, which can generate Encoding vectors containing
nulls. (pdf_font.ps)
Streams
-------
Fixes bugs:
- A needed #include of memory_.h was missing. (sdeparam.c)
- The needed input buffer size for the RunLengthEncode filter was
128, but should be 129. (srle.c)
- The ASCII85Encode and ASCIIHexEncode filters sometimes didn't
insert \n characters often enough. (sfilter2.c, sstring.c)
- In one obscure boundary case, the CCITTFaxEncode filter with K =
-1 could emit an extra, incorrect code. (scfe.c)
- The CCITTFaxDecode filter didn't default DamagedRowsBeforeError to
0. (scfx.h)
Removes all remaining uses of _ds and _ss. (sfilter.h, sbcp.c, scfe.c,
seexec.c, sfilter1.c, sstring.c)
Removes the use of do_debug. (scfd.c)
Removes all uses of far_data. (scf.h, scfdgen.c, scfdtab.c, scfetab.c,
sjpegerr.c)
Removes the save_count member of streams, which is now no longer needed.
(stream.h)
To help in debugging, changes all uses of
#define ss ((stream_xxx_state *)st)
to
stream_xxx_state * const ss = (stream_xxx_state *)st;
(sbcp.c, sbhc.c, sbwbs.c, scfd.c, scfe.c, sdctc.c, sdctd.c, sdcte.c,
seexec.c, sfilter1.c, sfilter2.c, sfxfd.c, sfxstdio.c, siscale.c, slzwc.c,
slzwce.c, slzwd.c, smtf.c, spdiff.c, spngp.c, srld.c, srle.c, sstring.c,
szlibc.c, szlibd.c, szlibe.c)
Changes all groups of statistic-gathering variables to be structure
variables named stats_*. (scfe.c)
Rewrites the CCITTFaxEncode filter to cut down one particularly large and
obnoxious macro, and to simplify the code by allocating an output buffer as
well as an input buffer. (scf.h, scfdgen.c, scfe.c, scfetab.c)
Library
-------
Fixes bugs:
- The masked image clipper sequenced through mask rows incorrectly.
(gxclipm.c)
- gx_[c]path_init_local_shared were declared as returning void, but
could actually return an error. (gxpath.h, gxcpath.c, gxpath.c)
- As always, gcc failed to report some static/non-static
inconsistencies. However, to my dismay, I find that the ANSI C standard
allows these, so I'll have to stop complaining about them. (gxclimag.c,
gxclipm.c)
- As always, gcc failed to report some signed/unsigned char *
mismatches. (gdevpdfi.c, gsparam.c)
- A loop counted on a non-existent zero value to mark the end of the
IODevice table. (gsiodev.c)
- Some needed #includes of memory_.h were missing. (gdevddrw.c,
gscolor2.c, gscrdp.c, gscspace.c, gxclipm.c, gximage3.c, gxshade4.c)
- Pattern device colors didn't have access to the original halftone
phase, making it impossible to handle non-standard X/YStep correctly.
(gsdcolor.h, gspcolor.c)
- Pattern filling disregarded the phase. THIS MAY UNDO A FIX MADE
IN 5.02. WE NEED TO RE-TEST PATTERNS CAREFULLY. (gxp1fill.c)
- restore did some unnecessary gsaves. (gsstate.h, gsstate.c)
- The reference counting macros could read from an object after
freeing it. (gsrefct.h)
- setgstate and currentgstate freed the view clipping path, which
they shouldn't do. (gsstate.c)
- If no view clipping path was set, viewclippath returned the entire
extent of the device, not the imageable area. (gxpath.h, gsdps.c, gspath.c)
- Assigning one stack-allocated path to another incorrectly wound up
sharing their segments. (gxcpath.c, gxpath.c)
- dot_length_absolute was incorrectly declared as float rather than
bool. (gxline.h)
- The test for varying-depth banded images was incorrect, causing
varying-depth images to be treated as constant-depth. (This only affected
ImageType 3 images.) (gxclimag.c)
- Failure to clamp Y values when processing banded images could
cause crashes or invalid band list data. (gxclimag.c)
- The changes in gsparam.c introduced in 5.23 made the coercion of
int arrays to float arrays fail. (gsparam.h, gsparam.c)
- Interpolated banded images could be transmitted incompletely,
causing narrow stripes to be chopped out of their rendering. (gxclimag.c)
- FunctionType 0 functions with 32-bit samples didn't read their
data correctly. (gsfunc0.c)
- Lattice-form Shadings with packed coordinates could crash or
produce incorrect results. (gxshade.c)
- Lattice-form Shadings with packed coordinates always returned an
error. (gxshade4.c)
- If the PaintProc of a Pattern or a Form, or a CharString
procedure, or a similar callback copied the current graphics state with
gstate or currentgstate, a dangling reference to the device could result.
Fixing this required adding a reference count to devices: internally created
devices initialize it to 0, externally visible devices initialize it to 1.
THIS IS A DELICATE CHANGE AND WILL PROBABLY HAVE A BUG TAIL. (gsdevice.h,
gxdevcli.h, gxdevice.h, gdevmem.c, gdevmrop.c, gdevnfwd.c, gschar.c,
gsdevice.c, gsmemory.c, gspaint.c, gsstate.c, gxacpath.c, gxccman.c,
gxclip.c, gxmclip.c, gxpcmap.c)
- The return_if_error macro referred to code rather than code_.
(gserror.h)
- Non-monotonic halftones didn't allocate enough slots in the
halftone cache. (gxht.c)
- setpagedevice with a 0-size page didn't fail. Fixing this
required making the nullpage device provide explicit InputAttributes.
(gdevnfwd.c)
- Halftone angles were often slightly off. (gshtscr.c)
- Banded fill_mask operations (used for characters) were sometimes
broken. This bug was obviously introduced since 5.10; I'm surprised that it
didn't have more serious effects. (gxclread.c)
- Partially transparent patterns didn't work with non-default
RasterOp values. (gxp1fill.c)
- The default implementation of strip_copy_rop didn't handle color
space conversion properly. (gdevmrop.c)
- Hint replacement could cause the initial moveto and final
closepath of a Type 1 outline to differ, confusing the filling code.
(gxhint3.c)
- Interpolated images were truncated at the bottom. (but probably
introduced in 5.23) (gxiscale.c)
- Using an unsigned type for the index passed to enum_ptrs
procedures caused comparisons against signed values to be incorrect.
(gsstruct.h)
Rewrites the rectangle list and mask clipping algorithms to use callback
procedures rather than macros. The rectangle list source code grew by 20%,
but the compiled code shrank from 10K to less than 4K; the mask clip source
code and compiled code both shrank. (gxclip.h, gxmclip.h, gxclip.c,
gxclip2.c, gxclipm.c, gxcpath.c)
Removes all remaining uses of _ds and _ss. (gsmemory.h, gsstruct.h, gzht.h,
stdpre.h, gp_dosfb.c, gsbitops.c, gscie.c, gsht.c, gstype1.c, gstype2.c,
gxclpath.c, gxclread.c, gxcmap.c, gxfill.c, gxi12bit.c, gxop1.h, gxpflat.c,
gxstroke.c, gxtype1.c)
Changes some GC procedures from explicit code to standard macros.
(gsstruct.h, gscscie.c, gxcht.c)
For easier debugging, changes gs_debug_c to a procedure; removes
gs_if_debug_c and do_debug. (gdebug.h, gsht1.c, gsmisc.c, gspaint.c,
gxcht.c, gxht.c, gxpcmap.c)
Changes the num_components member of the color space structure to a
procedure, which is needed because DeviceN color spaces have a variable
number of components; also makes Pattern spaces return -1 - the correct
num_components instead of -1. This is a NON-BACKWARD-COMPATIBLE CHANGE.
Also adds a base_space procedure. (gxcspace.h, gscdevn.c, gscolor1.c,
gscolor2.c, gscpixel.c, gscscie.c, gscsepr.c, gscspace.c, gspcolor.c,
gxiinit.c, gxiscale.c)
Changes all groups of statistic-gathering variables to be structure
variables named stats_*. (gxclip.c, gxclist.c, gxclpath.c, gxfill.c,
gxifast.c)
Starts to pull apart gs_makebitmap/pixmappattern to remove the dependency on
masked images. (gspcolor.c)
Splits the C heap allocator from generic allocator support. (gsmemory.c,
gsmalloc.c)
Removes all uses of far_data other than references to device (but not
device2) prototypes. (gdevmem.h, gdevmrop.h, gxdevcli.h, gconf.c,
gdevabuf.c, gdevht.c, gdevm*.c, gdevmpla.c, gdevmrop.c, gdevnfwd.c,
gsbittab.c, gsflip.c, gsroptab.c, gxcht.c)
Adds a streams member to gs_ref_memory_t. The library doesn't use this, but
it greatly simplifies the interpreter's bookkeeping. (gsalloc.h, gxalloc.h,
gsalloc.c)
Adds some more opaque types to the graphics state structure, rather than
using naked struct types. (gsccolor.h, gzstate.h)
Introduces the notion of the "effective clip path" in a graphics state.
Painting operators should now call gx_effective_clip_path rather than using
the clip_path member directly. (gxpath.h, gschar.c, gsdps1.c, gsimage.c,
gspaint.c, gspath.c, gxccache.c, gxpaint.c)
Implements view clipping. (gzstate.h, gspath.c, gsstate.c)
Starts to pare down the fit_* macros in gxdevice.h, since some people feel
strongly they are hard to follow, and also adds BEGIN/END wrapping.
(gxdevice.h, gdevabuf.c, gdevmem.c, gxclpath.c)
Refactors the structure definition macros in anticipation of moving to a
more table-driven approach. Replaces ENUM_CALL, ENUM_RETURN_CALL, and
RELOC_CALL with ENUM_USING and RELOC_USING. (gsstruct.h, gdevmem.c,
gshtscr.c, gxcpath.c, gxiinit.c)
Sketches a table-driven rather than procedural representation for GC
descriptors. We believe this will improve readability, reduce code size,
and perhaps reduce cache thrashing during garbage collection. This requires
a NON-BACKWARD-COMPATIBLE CHANGE to the enum_ptrs, reloc_ptrs, and
clear_marks procedures (to add the structure descriptor as a parameter).
This should not affect any ordinary clients, because they should already
define these procedures using the macros in gsstruct.h, which *are*
backward-compatible; however, they do affect two internal clients that use
their own type tags with unions (color spaces and device colors).
(gsstrtab.h, gsstruct.h, gsalloc.c, gsstrtab.c)
Updates color spaces for the change in enum_ptrs and reloc_ptrs.
(gxcspace.h, gscdevn.c, gscolor1.c, gscolor2.c, gscpixel.c, gscscie.c,
gscsepr.c, gscspace.c, gspcolor.c)
Updates device colors for the change in enum_ptrs and reloc_ptrs.
(gsdcolor.h, gxdcolor.h, gxpcolor.h, gspcolor.c, gxcht.c, gxcmap.c,
gxdcolor.c, gxht.c, gxp1fill.c)
Implements a hit detection device at the library level. (gserrors.h,
gdevhit.c)
Changes some configuration parameters from #defines to statics. (gschar.c)
Changes "simple" structures so they no longer have 0 for the enum_ptrs or
reloc_ptrs procedure. This is a NON-BACKWARD-COMPATIBLE CHANGE for
structure-definers that don't use the macros in gsstruct.h (of which there
shouldn't be any). (gsstruct.h, gsalloc.c)
Adds the structure type name to the debugging printout for freeing objects.
(gsalloc.c)
To help in debugging, changes all uses of
#define ss ((stream_xxx_state *)st)
to
stream_xxx_state * const ss = (stream_xxx_state *)st;
(gxclread.c)
Removes all uses of 'near' from the library: if short and long calls have
different formats, we rely on the compiler to generate the most efficient
one. (gscie.c, gscoord.c, gsimpath.c, gsstate.c, gstype2.c, gxclpath.c,
gxclread.c, gxfill.c, gxhint1.c, gxhint2.c, gxhint3.c, gxstroke.c)
Adds 'inline' to stdpre.h, defined as the empty string on compilers other
than the ones we know accept it. (stdpre.h)
Adds printout of the subrectangle to ImageType 1 tracing. (gxiinit.c)
Replaces a few uses of gs_memory_default with dev->memory. (gdevdbit.c,
gxclread.c)
Improves support for halftone objects not associated with graphics states.
This involves a minor change to the definitions of gs_spot_halftone and
gs_threshold_halftone, to define the transfer function as a closure. This
is slightly NON-BACKWARD-COMPATIBLE in that it requires clients to set
transfer_closure.proc to 0 if they also set transfer to 0. NOTE: the API
defined in gshtx.h is subject to future change. (gscsepnm.h, gshtx.h,
gxdht.h, gxfmap.h, gxht.h, gxtmap.h, gscolor.c, gsht.c, gsht1.c, gshtx.c)
Changes the Bezier approximation of arcs to cut arcs at absolute multiples
of 90 degrees rather than at intervals of 90 degrees (e.g., an arc from 45
to 105 would now be cut at 90 rather than being treated as a single
60-degree curve) in order to produce more uniform output and also to ensure
that the bounding box for arcs is more accurate (to pacify the Genoa FTS).
(gxfarith.h, gsmisc.c, gspath1.c)
Replaces all remaining uses of do { ... } while (0) with BEGIN ... END.
(gsbitops.h, gsdsrc.h, gserror.h, gsmdebug.h, gsrect.h, gxcldev.h, gxfunc.h,
gxop1.h, gxtype1.h, gsalphac.c, gsshade.c, gstype2.c, gstype42.c,
gxclread.c, gxcpath.c, gximage4.c, gxpath.c)
Adds a user-defined halftone type, to support non-monotonic halftones. We
could make any of the following structures fully object-oriented:
- Halftones (client level)
- Halftone orders (device level, but not rendered)
- Device halftones (device level, fully rendered)
The right place to do this for non-monotonic halftones, which are specified
directly by bit masks, is at the device halftone level. However, there are
too many places that know too much about the implementation of device
halftones and halftone orders right now. WE NEED TO REVISIT THIS AFTER THE
5.1x CODE BRANCH IS TERMINATED. SHOULD ALSO CONVERT UNION TO TYPED UNION
FOR GC -- CODE IS DUPLICATED IN gsht.c VS gshtx.c. (gxdht.h, gxht.h,
gxhttype.h, gshtx.h, gsht.c, gsht1.c, gshtx.c)
Moves the procedures in Type 1 font data into a structure. This is a
NON-BACKWARD-COMPATIBLE CHANGE, but an internal one. (gxfont1.h, gstype1.c,
gstype2.c, gxtype1.c)
Extends Type 1 / 2 / 4 fonts to require that they be able to enumerate the
set of glyphs that they define, to allow writing them out. We may propagate
this to all base fonts in the future. (gxfont1.h)
Provides some utilities for devices that want to define their own
InputAttributes and OutputAttributes. (gdevprn.h, gxdevice.h, gdevprn.c,
gsdparam.c)
Removes all of the text-display procedures that took null-terminated C
strings as operands. This is NON-BACKWARD-COMPATIBLE. However, since the
memory manager required that all such operands be allocated using
gs_alloc_string, the procedures were never usable with arbitrary C strings
anyway. (gschar.h, gschar.c)
Renames the gx_device procedure record from std_procs to procs, in
anticipation of more unified support for "objects". This is a
NON-BACKWARD-COMPATIBLE CHANGE for a surprisingly large number of clients
that should have been using dev_proc and set_dev_proc. (gdevbbox.h,
gxdevcli.h, gxdevice.h, gdevdflt.c, gdevdgbr.c, gdevmem.c, gdevprn.c,
gsalphac.c, gsdevice.c, gsropc.c, gxccache.c, gxifast.c)
Disallows setting of the RasterOp-related graphics state parameters when
a cache device is active. (gsrop.c)
Changes the tracing printout of path segments to provide enough accuracy to
cover all the fraction bits of a 'fixed'. (gxpath.c)
Version 5.23(limited) (5/14/98)
===============================
This fileset adds a number of PostScript LanguageLevel 3 features: library
support for ImageType 3 and 4 (masked) images, PostScript-level support for
ImageType 4, and the shfill operator for smooth shading. It also adds RCS
so that they create debugging or profiling binaries in separate directories.
This fileset includes an unusually large number of non-backward-compatible
API changes. Most of them don't affect ordinary library clients, but a few
do. These changes, and a few more to come, result from the next (large)
increment in our ongoing project to make the code completely re-entrant (no
non-idempotent writable globals in our own code). This necessarily involves
putting some things that used to be global into structures, some of which
must be added to some interfaces.
NOTE: because of a combination of hardware problems, time pressure, and
belated discovery of sloppiness by the original developers of the PC
makefiles, none of the PC makefiles in this fileset work. The Borland
makefiles probably come the closest.
Documentation
-------------
Adds documentation for:
- The changes in begin_image and related facilities. (drivers.txt)
- The addition of -Z/. (use.txt)
- The new ps2ps utility. (ps2ps.1)
- The new get_hardware_params procedure. (drivers.txt)
- The new -B<size> / -B- switch. (use.txt).
Improves the documentation for the sample_ macros. (gsbitops.h)
Adds some documentation on how the debugging/tracing flags work. (gdebug.h)
Improves the documentation of DDAs. (gxdda.h)
Documents a subtle change in the meaning of a flag in the PDF
FontDescriptor. (pdf_font.ps)
Changes the location of the authoritative site for zlib sources. (zlib.mak)
Corrects a typo. (gsht1.h)
Removes pdf_2ps.ps from the fileset. (psfiles.txt)
Adds standard file name comments to all .c and .h files that didn't already
have them. (dodebug.h, gdev3b1.c, gdev8510.c, gdevadmp.c, gdevhl7x.c,
gdevimgn.c, gdevo182.c, gdevpdfx.h, gdevpe.c gdevsco.c, gdevsj48.c,
gdevvglb.c, gsalpha.c, gscolor1.c, gscsepr.h, gsdsc.c, scfetab.c string_.h,
zfunc3.c, zmedia2.c)
Unifies the nroff styles of the various man pages a bit. (*.1)
Adds a reference to the CTAN mirror sites. (new-user.txt)
Notes that the result of rect_intersect may be anomalous. (gsrect.h)
Improves the documentation for the Distiller parameter handling code.
(gdevpdfp.c, gdevpsdp.c)
Corrects an ambiguity in the definition of the int_keys argument of
param_begin_xmit_dict. (gsparam.h)
Adds a new file that will evolve into a reasonable guide to the source code.
(README, source.txt)
Adds the convention for 'status' and 'code' to the C style guide.
(c-style.txt)
Improves the documentation for the '-' pseudo-switch. (use.txt)
Updates the problem reporting form to include the URL for known post-release
problems. (bug-form.txt)
Documents the availability of sources and binaries for Plan 9.
(new-user.txt)
Procedures
----------
Fixes bugs:
- The 'tags' target in the Unix makefiles had an incorrect directory
name. (bug probably introduced since 5.20) (unix-end.mak)
- The ld_tr and CCFLAGS macros were used in the makefiles before
they were defined, causing problems with `make' implementations that
substitute macros into definitions at definition time rather than at use
time. (*.mak)
- Recent Digital Unix versions (4.0 and later) require -std1 when
compiling. (make.txt)
- The Unix library-only makefile had gotten out of date.
(ugcclib.mak)
- pf2afm[.bat] were omitted from the fileset. (master/package.tcl)
- The Borland makefile didn't work, because the Borland compiler
requires specifying the output file name (-o) before the input file name
(-c)! This required changing the order of every compilation command in
every platform-independent makefile. The win*.mak files still need work.
(*.mak)
- None of the non-Unix makefiles specified directory names for the
auxiliary programs. (dvx-tail.mak, os2.mak, wctail.mak, winlib.mak)
- The Windows makefiles lacked build rules for gp_ntfs and gp_win32.
(msvclib.mak, winlib.mak)
Adds a new debugging switch -Z/ that prints the file name and line number on
all trace messages. (gdebug.h, std.h)
Changes the Unix 'pg' and 'debug' build targets so that they create the
binaries in a 'pgobj' or 'debugobj' subdirectory of the standard build
directory. This allows keeping all 3 configurations active. (unix-end.mak)
Adds GEN directories for jpeg, libpng, and zlib. (devs.mak, gs.mak,
jpeg.mak, lib.mak, libpng.mak, zlib.mak)
Adds a gendev.c that will eventually replace genconf.c. (gendev.c, *.mak)
Adds -Wcast-align to the gcc compilation switches. (unix-gcc.mak)
Adds support for libpng 1.0.1. (libpng.mak)
Notes the use of -R on Solaris and other SVR4 systems. (unix*.mak)
Removes pdf_2ps.ps from the fileset. (int.mak, unixinst.mak,
pdf_2ps.ps[deleted])
Ensures that every file that is copyright, maintained, and distributed by
.c and .h files, these lines currently are only comments, but they could be
converted easily to static strings later if we want to. We had to touch
almost every file in the fileset to do this, but we did *not* change the
write dates. (*)
Makes the build procedure auto-detect whether the installed version of gcc
has the 'const' code generation bug. (gs.mak, lib.mak, unix-gcc.mak)
Removes 'makefile' as a precondition for ccf32.tr. (I can't quite figure
out why it was there in the first place.) (msvccom.mak)
Replaces the -F<file> switch with a -B<buffer size> switch that forces all
files to use the run_string interfaces. -B- turns it off. (iminst.h,
imainarg.c)
Adds a new resource to genconf.c, -replace <module>. This causes <module>
*not* to be included if the module with the -replace resource *is* included.
If two modules -replace each other, either directly or indirectly through
-includes, the result is undefined. (genconf.c)
Uses -replace to implement a default roplib package. (lib.mak)
Utilities
---------
Fixes bugs:
- unprot.ps stopped working because of the stricter prohibition
against storing local-VM objects into systemdict. (unprot.ps)
Adds a new ps2ps utility, like pdf2ps, that "distills" PostScript.
(ps2ps, ps2ps.bat)
Modifies the ps2epsi utility so it can be run outside the ps2epsi script for
testing. (ps2epsi.ps)
Changes the pdf2ps utility to use the pswrite device. This gets rid of all
conversion problems, at the expense of larger and stupider output files.
(pdf2ps, pdf2ps.bat)
Drivers
-------
Fixes bugs:
- Two procedures were declared 'private' inconsistently (thank you
again, gcc). (gdevps.c)
- The author of the uniprint driver sent a fix for an
allocation-related bug and an off-by-one bug. (gdevupd.c)
- The PDF writer incorrectly converted open stroked rectangles (only
3 sides drawn) to closed (4 sides drawn). (gxpath.h, gzpath.h, gdevpdfd.c,
gxpath2.c)
- When banding, filling a character within the PaintProc of a
Pattern could produce memory access errors. (The problem was in
gx_forward_fill_mask, which might affect filling characters in other
situations as well.) (gdevnfwd.c)
- The [e]pswrite driver produced incorrect line widths for stroked
graphics. (gdevps.c)
- The [e]pswrite driver didn't invoke colorimage correctly, so
didn't handle Patterns right. (gdevps.c)
- Vector devices didn't set the color before writing trapezoids,
possibly causing incorrectly colored output. (gdevvec.c)
- Vector devices could give errors on Pattern fills. (gdevvec.c)
- The bbox device retained a pointer to the clipping path, which,
since the path was embedded in the gs_state_contents, confused the garbage
collector, causing memory access errors. We fixed this by de-embedding the
path object: see below. (gsstate.c)
- On some Linux systems, the X driver could get a memory access
error when displaying patterns. We fixed this by adding calls on XInitImage
in the necessary places when running X11R6. (gdevx.c)
- PDF output didn't check names for unusual characters, and could
produce invalid output if the input included names with those characters.
(gdevpdfx.h, gdevpdf.c, gdevpdfm.c, gdevpdfo.c)
- In the PDF writer, DEST pdfmarks with /Dest but no /Page or /View
didn't generate named destinations. (gdevpdfm.c)
- Printer devices didn't allow . in %-formats in the output file
name. (gdevprn.c)
- The x11cmyk driver didn't read bits back from the screen
correctly. (gdevxalt.c)
- The pcxmono and pcxgray drivers used colored rather than
gray-scale palettes. (gdevpcx.c)
- The PCX drivers could emit repetition counts greater than 15,
confusing some readers. (gdevpcx.c)
Removes some vestiges of the obsolete draw_line driver procedure. We also
rename the draw_line member of the driver procedure structure as
obsolete_draw_line, so that any uses of it will cause compilation errors,
but we don't remove it from the structure, so that existing driver procedure
vectors will continue to compile (although the draw_line procedure will
never be called). (gxdevcli.h, gdevbbox.c, gdevddrw.c, gdevdflt.c)
To repair a design error, and at the same time add flexibility needed for
ImageType 3:
- Removes the image_data and end_image driver procedures,
associating them with the gx_image_enum(_common)_t structure instead.
Clients should call gx_device_image_data and gx_device_end_image instead: we
set the image_data and end_image procedures in the device structures to
these procedures when filling in defaulted procedures. This is a
NON-BACKWARD-COMPATIBLE CHANGE for drivers that implement begin_image, since
they now have to fill the procedures into the enumerator structure.
(gsiparm*.h, gxdevcli.h, gxdevice.h, gxiparam.h, gdevbbox.c, gdevddrw.c,
gdevdflt.c, gdevnfwd.c, gsimage.c, gxclist.c, gxidata.c, gxifast.c,
gxiinit.c, gximage3.c, gximage4.c)
- Replaces the image_data driver procedure with a plane_data
procedure (now associated with the image enumerator, not the device) that
allows specifying the X offset and raster independently for each plane, and
(depending on the image type) may allow omitting some planes. We provide a
gx_device_image_plane_data procedure parallel to _image_data and _end_image
(see above). (gsiparm*.h, gxdevcli.h, gxiparam.h, gdevbbox.c, gdevddrw.c,
gxidata.c, gxiinit.c, gximage3.c, gximage4.c)
Updates clients for image processing changes. (gdevvec.h, gdevpdf.c,
gdevpdfi.c, gdevps.c, gdevpx.c, gdevvec.c)
Enhances [e]pswrite to detect other kinds of opportunities for producing
smaller output. This involves a change in the moveto procedure in the
'vector' interface. (gdevps.c)
Changes the bbox device so that it automatically detects whether it is being
used as a component in a device pipeline or as a free-standing device,
rather than having to select this in the makefile. (lib.mak, gdevbbox.h,
gdevbbox.c)
Moves the halftoning driver a bit closer to real usability. (gdevht.h,
gdevht.c)
Adds some tracing to the color mapping code in the X driver. (gdevx.c)
Implements setting the Dict and ACSDict parameters for pswrite and pdfwrite.
Dict is effective with the CCITTFaxEncode filter for black-and-white images;
otherwise, these parameters still don't do anything. (gdevpdfi.c,
gdevpsdp.c) ****** READING HUFFMAN TABLES IS NYI, SEE sdcparam.c; SETTING
DOESN'T WORK BECAUSE DCT_set_defaults DOESN'T DO WHAT IT SHOULD ******
Updates the PS/PDF writers to reflect the fact that the ASCIIHexEncode
filter now has a state. (gdevpsdf.c)
Modifies the X driver so that it can draw multiple platform characters at a
time rather than one character per call. (gdevx.h, gdevx.c, gdevxxf.c)
Takes advantage of the filter stream procedures now available in stream.c.
(gdevjpeg.c, gdevpdf.c, gdevpsdf.c)
Adds a get_hardware_params procedure, similar to get_params except that it
reads parameters whose values depend on hardware state that may change
without program intervention (e.g., panel switches). The default is that
there are no hardware parameters. (gdevmem.h, gdevprn.h, gsdevice.h,
gxdevcli.h, gxdevice.h, gxacpath.c, gxclip2.c, gxclipm.c, gxclist.c,
gxcpath.c, gdevbbox.c, gdevdflt.c, gdevht.c, gdevmrop.c, gdevnfwd.c,
gdevprn.c, gsdparam.c)
Updates the PS/PDF writer for the change in the parameter list API.
(gdevpsdf.c)
Makes a few more writable statics const. (gdevos2p.c, gdevpipe.c,
gdevpsim.c, gdevx.c)
Removes the rrgb sample device, since it now no longer serves any purpose.
(gdevrrgb.c[deleted])
Converts some additional devices to -dev2, to make them const. (devs.mak,
gdevbit.c, gdevpbm.c, gdevpcx.c, gdevpsim.c, gdevpng.c, gdevtfax.c,
gdevtfnx.c, gdevx.c, gdevxalt.c)
Updates a client accessing the preallocated color spaces. (gdevpsdi.c)
Renames the debugging-related statics in the X driver as X_SOMETHING.
(gdevx.c)
Platforms
---------
Makes a few minor changes to support Plan 9. (make.txt, devs.mak, stat_.h,
stdio_.h, time_.h, gdevpbm.c)
Fonts
-----
Documents the availability of a free Chinese font. (fonts.txt,
new-user.txt)
Works around a bug in the Adobe PostScript driver. We though it just output
the FontBBox for Type 42 fonts in the 2048- or 4096-unit character space
rather than a 1-unit space, but in fact it outputs garbage. (zfont42.c,
gstype42.c)
Augments the handling of Type 42 fonts to recognize the gdir /
GlyphDirectory method of outline definition in addition to the loca / glyf
method, per Adobe versions 2015 and later (undocumented!). (ifont.h,
zfont42.c)
Interpreter
-----------
Fixes bugs:
- Memory management for argument strings was wrong. (gsargs.h,
gsargs.c)
- 1 .setlanguagelevel was broken, because it didn't allow for the
possibility that values could get deleted from systemdict that existed in
level2dict. (bug introduced in 5.x, x <= 10) (zmisc2.c)
- -dFAKEFONTS was broken. (gs_fonts.ps, gs_init.ps)
- copyscanlines was broken. (bug introduced in 5.20) (gs_init.ps)
- The matrix returned by sizeimage was incorrect. (zdpnext.c)
- The implementation of .buildpattern for PatternType 2 was wrong.
(gs_ll3.ps)
- Ghostscript couldn't load TrueType fonts where the amount of data
either before or after the glyf section exceeds 64K. (gs_ttf.ps) ****** WE
BACKED OUT THIS CHANGE, BECAUSE WE HAD TO BACK OUT THE NEXT ONE. ******
- Ghostscript couldn't load TrueType fonts where the total data is
more than 64K and the offset or length of the glyfs is odd. (gs_ttf.ps)
****** WE BACKED OUT THIS CHANGE: IT BROKE THE PDF INTERPRETER, BECAUSE IT
IMPOSES A NEW REQUIREMENT THAT TTF FILES BE POSITIONABLE. ******
- Some compilers complained about arithmetic on enums. (interp.c)
- The CIE color space and CRD GC structure definitions were in the
interpreter rather than the library. (zcie.c, zcrd.c)
- NullFont was still present in FontDirectory when currentglobal was
false. (gs_init.ps)
- execform failed with Form resources, because it tried to insert
the Implementation in a read-only dictionary. (gs_fform.ps, gs_lev2.ps)
Finishes implementing ImageType 4 images, and moves closer to implementing
ImageType 3. (iimage.h, zdps.c, zimage.c, zimage2.c, zimage3.c)
Updates tracing output to use the new dlprintf macros. (idict.c, igc.c,
igcref.c, igcstr.c, iname.c, interp.c, isave.c, iscan.c, zcie.c, zcontext.c)
Implements multiproc=true for readimage. (gs_dpnxt.ps)
Does a bit more work on implementing shading with PatternType 2.
(gs_ll3.ps, zfunc.c, zshade.c)
Adds a .bitadd operator for adding integers modulo the word size.
(zarith.c)
Updates filter operators to use the new stream parameter facility.
(iparam.h, iparam.c, zfdecode.c, zfdctc.c[deleted], zfdctd.c, zfdcte.c)
Updates the implementation of parameter lists for the change from _dict to
_collection. (iparam.c, iparam.h)
Takes advantage of the filter stream procedures now available in stream.c.
(zfilter.c)
Adds get_hardware_params to one device procedure vector. (zupath.c)
Adds .gethardwareparams to parallel .getdeviceparams. (zdevice.c)
Updates the interpreter's parameter list machinery to match the change in
gsparam.h. (iparam.h, iparam.c)
Makes more writable statics const. (gs_init.ps, btoken.h, dstack.h, iref.h,
opextern.h, icontext.c, idict.c, igc.c, igcref.c, iinit.c, imainarg.c,
interp.c, iscanbin.c, iutil.c, zbseq.c, zcie.c, zcontrol.c, zdevcal.c,
zdevice2.c, zdps.c, zdps1.c, zfont2.c, zgeneric.c, zgstate.c, ziodev.c,
ziodev2.c, ztype.c)
Removes an inappropriate reference to PROGRAM_NAME. (imainarg.c)
Removes set/currentrenderalgorithm, since they are useless for the purpose
for which they were intended. (zrop.c)
Uncomments code for CIEBasedDEF[G] color spaces, even though these aren't
fully implemented yet. (zcie.c)
Reimplements StartJobPassword and SystemParamsPassword as no-access strings
in systemdict. (gs_lev2.ps, iutil2.h, iutil2.c, ziodev2.c, zusparam.c)
Splits off the context state record from icontext.h, so that places that
only need access to state variables don't need to import the
procedures. (icontext.h, icstate.h)
Updates a client for the change in gs_malloc_limit. (imainarg.c)
Updates clients for the change in the accessors for predefined color spaces.
(zcolor1.c, zimage.c, zimage2.c)
Renames the (few) debugging-related statics as I_SOMETHING. (igc.c)
Splits off idstack.h (API for dictionary stacks) from dstack.h (API for the
interpreter's dictionary stack), and idstack.c (dictionary stack
implementation) from idict.c (dictionary implementation). We should have
done this a long time ago! (dstack.h, idictdef.h, idstack.h, idict.c,
idstack.c, iinit.c, ireclaim.c)
Folds the cached currentfile pointer into the exec-stack structure.
(estack.h, interp.c)
Changes clients of gs_register_*_root to eliminate statically allocated
roots. (iinit.c, iname.c, interp.c, zbseq.c, zcontext.c, zfile.c, zfont.c,
zfont2.c, zgstate.c, ziodev.c)
Adds a ref_free_stack procedure, and reformats the implementation of stacks.
(istack.h, interp.c, istack.c)
Interpreter (PDF)
-----------------
Fixes bugs:
- Pattern colors sometimes caused errors. (gs_pdf.ps)
- A file ending with %%EOF without an EOL caused an error.
(pdf_main.ps)
- Fl wasn't recognized as an abbreviation for FlateDecode in in-line
images. (pdf_draw.ps)
Removes all code related to converting PDF to PS: it never worked reliably,
and we now support this function with the pswrite device instead.
(gs_pdf.ps => pdf_ops.ps, pdf*.ps)
Streams
-------
Updates tracing output to use the new dlprintf macros. (shc.h, scfd.c,
scfe.c, shcgen.c)
Provides the ability to read and set stream initial parameters to/from a
parameter list. This is currently needed only by the PDF/PS writers and the
filter operator, so it is implemented in modules separate from the stream
implementation per se, but it might be useful for other clients too.
(scommon.h, scfparam.c, sdcparam.c, sdct*.c, sdeparam.c, sddparam.c,
gdevpsfp.c[deleted])
Changes the ASCII85Encode filter so it never produces two %% at the
beginning of a line, which could mislead document managers or spoolers.
(sfilter2.c)
Changes the ASCIIHexEncode filter so it always produces lines of exactly 64
characters, except for the last one. THIS IS A NON-BACKWARD-COMPATIBLE
CHANGE, because this filter now needs a state structure, which it didn't
before. (sstring.h, sstring.c)
Moves filter_{read,write}_procs to stream.c, changing the names to
s_filter_{read,write}_procs. (stream.h, stream.c)
Makes creation of JPEG filters set default values for parameters that are
outside the IJG library (Picky and Relax). (sdct.h, sjpegd.c, sjpege.c)
Library
-------
Fixes bugs:
- An error in dda_step_add could theoretically produce anomalies in
images (although we don't think we've ever seen any). (gxdda.h)
- A boundary error in dda_state_next/previous/advance could
theoretically produce anomalies in images by allowing R = 0 (although we
don't think we've ever seen any). (gxdda.h)
- A rounding error in computing the size of portrait images could
produce a spurious 1-pixel-wide line at the edge of the image. (gxifast.c)
- When banding, images with singular or nearly singular CTM or
ImageMatrix could confuse things badly enough to cause memory access errors.
(gxclimag.c)
- Patterns were broken. (bug introduced in 5.21) (gxclip2.c)
- Because some image processing code retained a pointer to the
clipping path, which was embedded inside the gs_state_contents object,
garbage collection could cause crashes. (The only case where we know this
happened was the bounding box device, since we think all other image
enumerators preconstruct a clipping device, which does not retain a pointer
to the clipping path, rather than constructing one from the path on the
fly.) We fixed this by replacing gs_state_contents with individual objects:
see below.
- The *_.h files didn't have double-inclusion protection. (*_.h)
- ImageType 2 images were broken by the change in begin_typed_image.
(gximage2.c)
- Color-setting operators that "substitute the nearest legal value"
didn't substitute it in storage, only when using it. E.g., after
gs_setgray(pgs, 2.0), gs_currentgray(pgs) returned 2.0 rather than 1.0.
This bug has been there since release 1.0! (gxcspace.h, gscie.c, gscolor.c,
gscolor1.c, gscolor2.c, gscdevn.c, gscsepr.c, gscpixel.c, gspcolor.c)
- The RasterOp implementation for 2-bit, 4-bit, and non-gray 8-bit
devices didn't work. (gdevmrop.c)
- The test of whether to use copy_mono, fill_mask, or general
imaging for rendering characters sometimes used copy_mono when not
appropriate. (gxccache.c)
- The default implementation of fill_mask produced solid rectangles,
rather than properly masked output, if the logical operation didn't use its
source operand. (gdevdbit.c)
- Some more files needed double inclusion protection. (gscie.h)
- Checking for interrupts before a return always returned 0 rather
than the correct return code if there was no interrupt. (gsmisc.c)
- Characters within Pattern PaintProcs sometimes didn't get drawn.
(gxpcmap.c)
- The CIE color space and CRD GC structure definitions were in the
interpreter rather than the library. (gscie.h, gscie.c)
- Numeric overflows when setting up the character cache caused
errors rather than simply disabling caching for that character. (gschar.c)
- FORCE_STRIP_HALFTONES was accidentally left set to 1 (in 5.10!),
slowing down all uses of monobit halftones. (gshtscr.c)
Implements mask clipping, which is needed for ImageType 3 images.
(gxclip2.h, gxclipm.h, gxmclip.h, gxclip2.c, gxclipm.c, gxmclip.c)
Finishes implementing ImageType 3 and 4 images. (gsimage.h, gsiparam.h,
gsimage.c, gsiparm3.h, gximage3.c, gximage4.c)
Starts to update the banding code to handle ImageType 3 and 4 images.
(gxclist.h, gxiparam.h, gxclimag.c, gxclist.c, gxiinit.c)
Make eprintf_program_name, lprintf_file_{and_line,only}, and new
dlprintf_file_{and_line,only} always be procedures, rather than sometimes
macros and sometimes procedures. (std.h, gdebug.h, gsmisc.c)
Adds new dlprintf, dlputc, and dlputs macros that are like
dprintf/dputc/dputs but also print the source file name and line number at
the beginning of the line if the -Z/ debugging switch is set. The if_debug*
macros now use dlprintf rather than dprintf; many other places also needed
changing. Note that if any place was overlooked, no great harm is done:
printout produced there simply won't include the source file and line number
even if -Z/ is set. (std.h, gdebug.h, gsmisc.c; gdevbbox.c, gdevdbit.c,
gdevdgbr.c, gdevmrop.c, gdevrun.c, gdevsvga.c, gdevx.c, gp_unifs.c,
gsalloc.c, gschar.c, gscoord.c, gsfont.c, gshsb.c, gsht.c, gshtscr.c,
gsmemory.c, gspath.c, gstype1.c, gstype2.c, gxacpath.c, gxccache.c,
gxclimag.c, gxclist.c, gxclpath.c, gxclread.c, gxcpath.c, gxfill.c,
gxidata.c, gxpath.c, gxpcopy.c, gxpflat.c, gxstroke.c)
Simplifies storage management for graphics states by replacing
gs_state_contents with individual objects. This slows down gsave and
grestore a bit, but eliminates a class of potential obscure bugs.
(gxpath.h, gzstate.h, gsstate.c, gxcpath.c, gxpath.c)
Adds some more information to the deubgging printout for paths. (gxpath.c)
Modifies the library test program to test ImageType 3 and 4 images.
(ugcclib.mak, gslib.c)
Extends the @-file parser to be more shell-like:
- The sequence \ <newline> is ignored everywhere.
- If a # appears as the first character on a line outside quotes,
the entire line (including the terminating newline) is ignored.
(gsargs.h, gsargs.c)
Changes a stem hint tracing message so that it will print with the correct
line number. (gxhint2.c)
Moves the 'format' information for images to the image parameter structure.
This entails a NON-BACKWARD-COMPATIBLE CHANGE in the begin_typed_image
driver procedure (which was not guaranteed stable). (gsiparam.h,
gxdevcli.h, gsimage.c, gxiinit.c)
Adds an optional matrix argument to begin_typed_image, overriding the CTM in
the imager state if present. This is needed to make masks and masked images
line up precisely; this too is a NON-BACKWARD-COMPATIBLE CHANGE.
(gxdevcli.h, gdevbbox.c, gdevddrw.c, gdevnfwd.c, gdevx.c, gxclimag.c,
gxiinit.c, gximage2.c, gximage3.c, gximage4.c)
Adds a procedure for testing monotonicity of Functions over a given range.
(gsfunc.h, gsfunc0.c, gsfunc3.c)
Implements smooth shading with shfill. All documented ShadingTypes (1-7)
are implemented. (gscspace.h, gsdsrc.h, gspath.h, gsshade.h, gxshade.h,
gxshade4.h, gscolor.c, gscolor3.c, gsdsrc.c, gsfunc0.c, gsfunc3.c,
gspath1.c, gsshade.c, gxshade.c, gxshade1.c, gxshade4.c, gxshade6.c)
Changes the TrueType rasterizer to remove the assumption that the entire
loca table is stored contiguously. This may not have any practical effect,
since currently Type 42 fonts never split the loca table across segments.
(gstype42.c)
Adds a new interface for creating CIE CRDs that provides the parameters as
separate arguments. (gscrd.h, gscrd.c)
Starts to add the ability for a device to provide one or more default CIE
CRDs as (read-only) device parameters. (Not ready for use yet.) (gscie.h,
gscrdp.h, gscie.c, gscrdp.c)
Adds a multiple-bit-per-pixel analogue of gs_makebitmappattern,
gs_makepixmappattern, for use by another Aladdin project. (lib.mak,
gsbitmap.h, gsptype1.h, gxbitmap.h, gspcolor.c)
Changes the API of param_begin_write_dict so that the client can request the
creation of an array rather than a dictionary. This is a
NON-BACKWARD-COMPATIBLE CHANGE for implementors (of which there are only
2.5), but not for clients. (gsparam.h, gsparam.c)
Adds dynamically typed data to the parameter list interface, and removes the
statically typed procedures. This isn't important for any standard facility
yet. This too is a NON-BACKWARD-COMPATIBLE CHANGE for implementors of
parameter lists. (gsparam.h, gsparams.h, gsparam.c, gsparams.c)
Adds a new platform-specific API for thread creation and synchronization,
and a memory manager "wrapper" that monitor-locks each call. No code
normally included in this fileset uses any of this machinery as yet. (gp.h,
gpsync.h, gxsync.h, gsmemlok.h, gsmemlok.c, gxsync.c)
Splits off (PatternType 1) Pattern filling into a separate file, since the
file was getting too big; refactors the filling code to use procedures
rather than macros. (gxp1fill.h, gspcolor.c, gxp1fill.c)
Makes a few more writable statics const. (gscie.h, gscscie.c, gsdll.c,
gsmemory.c, gsmisc.c, gstype1.c, gstype2.c, gxclpath.c)
Adds a compile-time option, SYSTEM_CONSTANTS_ARE_WRITABLE, to choose whether
the system configuration values (buildtime, copyright, product, revision,
revisiondate, serialnumber) are const or not. By default they are now
const: THIS IS A NON-BACKWARD-COMPATIBLE CHANGE (affecting only one user).
(lib.mak, openvms.mak, os2.mak, unix-end.mak, wctail.mak, winlib.mak,
gscdefs.h, gscdef.c)
Removes the dependence of std.h on PROGRAM_NAME. (std.h, gsdll.c, gsmisc.c,
gscdef.c)
Adds a new member of the color space type structure, the size of the
smallest color space structure that will hold a color space of the given
type. Also removes the obsolete _ds modifier. (gscspace.h, gxcspace.h,
gscdevn.c, gscie.c, gscolor.c, gscolor1.c, gscolor2.c, gscpixel.c,
gscsepr.c, gspcolor.c, gxiinit.c)
Removes set/currentrenderalgorithm, since they are useless for the purpose
for which they were intended. (gsrop.h, gsropt.h, gdevmrop.c, gsrop.c)
Splits off gscspace.c from gscolor.c, and gscscie.c from gscie.c. (gscie.c,
gscolor.c, gscscie.c, gscspace.c)
Adds constructor and accessor procedures for color spaces. (gscie.h,
gscolor2.h, gscsepr.h, gscspace.h, gsptype1.h, gxcolor2.h, gxcspace.h,
gscolor.c, gscolor2.c, gscscie.c, gscsepr.c, gscspace.c, gslib.c,
gspcolor.c)
Changes the CIEBased color space structures slightly to allow implementation
of the CIEBasedDEF[G] color spaces. (gscie.h, gscie.c)
Changes gs_malloc_limit from a static to a member of the allocator
structure. This is a NON-BACKWARD-COMPATIBLE CHANGE for clients that
declared this variable as an extern. (gsmalloc.h, gsmemory.c)
In order to eliminate some statics, changes the static color space accessors
(gs_color_space_Device*) so they require a const gx_imager_state as
parameter, and changes their names as well to avoid confusion. This is a
NON-BACKWARD-COMPATIBLE CHANGE not only in these accessors, but also in
gs_image_t_init_{gray,color}. This is very unfortunate, but we see no way
to avoid it. (gscspace.h, gsiparam.h, gxistate.h, gscolor1.c, gscscie.c,
gscspace.c, gsimage.c, gspcolor.c, gsstate.c, gxclread.c, gxiinit.c,
gximage2.c, gximage3.c, gximage4.c)
Unifies the handling of const for the IODevice table. (gscdefs.h,
gxiodev.h, gconf.c, gsiodev.c)
Changes the register_root memory manager call so that a NULL as the pointer
to the root structure asks the memory manager to allocate the root structure
itself. This is a NON-BACKWARD-COMPATIBLE CHANGE for implementors of the
memory manager API (of which there are only 3). (gsmemory.h, gsstruct.h,
gsalloc.c, gsmemory.c)
Adds a new GC structure type, suffix_add0_local, which is a more efficient
form of suffix_add0 that can be used when the supertype is defined in the
same file as the subtype. (gsbitmap.h, gscie.h, gsshade.h, gsstruct.h)
Uses the new package replacement facility in the makefile to make RasterOp
optional without tinkering with statics at runtime. (lib.mak, gxdevice.h,
gxdevrop.h, gdevdbit.c, gdevdflt.c, gdevmrop.c, gdevnfwd.c, gsnorop.c,
gsropc.c)
Makes RasterOp really optional. (gdevmrop.h, gsrop.h, gdevmrop.c, gsrop.c,
gxiinit.c)
Rewrites bits_fill_rectangle to get rid of nearly all the macros.
(gxbitops.h, gsbitops.c)
Removes the obsolete _ds from gs_log_error. (gserror.h, gsmisc.c)
Version 5.22(limited) (2/19/98)
===============================
This fileset has a few more bug fixes, a major overhaul of memory management
for paths so that we can do view clipping in a reasonable way, and the
ability to build executables in a different directory from the sources.
Documentation
-------------
Designates gv as the preferred VMS and Unix previewer. (new-user.txt,
use.txt)
Adds a pointer to post-release documentation. (README)
Notes that compilation with certain platforms and compilers must turn off
optimization. (make.txt)
Improves the documentation of the fit_fill and fit_copy macros.
(gxdevice.h)
Procedures
----------
Fixes bugs:
- The ccgs script for non-ANSI compilers was no longer flexible
enough to handle all the possible command lines. (ccgs)
- The pdfwrite device was missing on the DesqView/X platform.
(dvx-gcc.mak)
- The System V build procedure was broken. (unixtail.mak)
- A Watcom makefile lacked parentheses around a macro name.
(wctail.mak)
- Some `make' programs drop trailing spaces in macro definitions: we
didn't work around this. (os2.mak, unixhead.mak, winlib.mak)
Adds support for WCVERSION=11.0 in the Watcom makefiles. (watc.mak,
wccommon.mak)
Adds a shell script for removing the 'includes' from makefiles, since a very
few Unix systems don't support this capability. (catmake)
Changes -dNOPROMPT to -dNOPAGEPROMPT, and adds -dNOPROMPT to suppress both
the end-of-page prompt and the executive prompt. (use.txt, gs_init.ps)
Adds definitions of {GL,PS}{SRC,GEN,OBJ}DIR to the top-level makefiles,
removing these definitions from gs.mak. (*.mak, gs.mak)
Adds explicit directories to more makefile rules. We can now do builds with
source, GL/PS generated files, and GL/PS object files in 5 different
directories! (*.mak, gsjconf.h)
Utilities
---------
Adds a user-contributed utility that runs dvips followed by ps2pdf.
(dvipdf, unixinst.mak)
Drivers
-------
Fixes bugs:
- A pointer was incorrectly declared const. (gdevpdfm.c)
- pdfwrite handled the Title element of ARTICLE pdfmarks
incorrectly. (gdevpdfm.c)
- pdfwrite inserted a Dest element in Link annotations even if an A
(Action) key was present. (gdevpdfm.c)
- pdfwrite didn't recognize and convert /Article actions in
pdfmarks. (gdevpdfm.c)
Replaces some open-coded accesses to path structure elements with macros, in
anticipation of a representation change. (gdevpdfd.c)
Moves pdfwrite further towards supporting Dict and ACSDict Distiller
parameters. (gdevpsdf.h, gdevpsdp.c, gdevpsfp.c)
Updates a few places for the change in the path API. (gdevpdfd.c,
gdevvec.c)
Adds recognition of named object references to the PDF writer, fixing many
bugs in the named object code in the process. (gdevpdfx.h, gdevpdfm.c,
gdevpdfo.c)
Enhances pswrite to skip fills or strokes of completely empty paths, to
recognize horizontal and vertical lines, and to abbreviate color settings
based on 8-bit fractions. This requires a NON-BACKWARD-COMPATIBLE CHANGE in
the "vector" device interface (which was, however, clearly identified as
subject to change without notice). (gdevpsdf.h, gdevvec.h, gdevps.c,
gdevpsdf.c, gdevpx.c, gdevvec.c)
Interpreter
-----------
Updates a few places for the change in the path API. (zupath.c)
Implements %statementedit properly. (iscan.h, iscan.c, ziodev.c)
Changes the initialization code so that if DELAYBIND is set, .forcedef and
.forceput remain accessible until .bindnow is called. (gs_init.ps)
Interpreter (PDF)
-----------------
Fixes bugs:
- An empty Differences array, which Acrobat Distiller 3.02 can emit,
caused a rangecheck error. (pdf_font.ps)
Streams
-------
Fixes bugs:
- The alternative LZWEncode filter didn't emit a reset code as the
first code, and waited one code too long to emit a reset. (slzwce.c)
Adds some double-inclusion protection. (scfx.h)
Library
-------
Fixes bugs:
- There was an (incorrect) assignment to a read-only structure
member. (gximage2.c)
- A formal parameter list was incorrect if __PROTOTYPES__ wasn't
defined. (gsroptab.c)
- Some images didn't get clipped properly when banding. This was a
fix for 5.03 that somehow didn't make it into 5.10. (gxclimag.c)
- When banding, dashed lines could cause an invalid memory access.
This was apparently caused by an error in a fix made in 5.04. (gsline.c)
- Images with non-zero data_x could cause an invalid memory access.
(gxiinit.c, gxidata.c)
- The band list rasterizer didn't initialize the image structure
properly, causing control to go to a random address. (gxclread.c)
Replaces some open-coded accesses to path structure elements with macros, in
anticipation of a representation change. (gxpath.h, gzpath.h, gspath1.c,
gxfill.c, gxpath2.c, gxstroke.c)
Changes the path and clipping path structures so that segments and clipping
lists are stored in separate, reference-counted structures. This finally
supports reliable freeing of path segments and clipping lists even in the
presence of off-stack gstates, and the ability to store the original
segments of a clipping path, both of which we have wanted for a long time.
Unfortunately, it requires SIGNIFICANT NON-BACKWARD-COMPATIBLE CHANGES TO
THE API FOR PATHS:
Paths:
- adds gx_path_alloc_contained;
- gx_path_init => gx_path_init_local (or nothing);
- gx_path_reset => gx_path_new;
- removes gx_path_share and gx_path_release;
- gx_path_assign => gx_path_assign_{preserve,release};
- renames gx_path_expand_dashes => gx_path_add_dash_expansion,
gx_path_flatten[_accurate] => gx_path_add_flattened[_accurate],
gx_path_monotonize => gx_path_add_monotonized;
- removes the init Boolean from gx_path_copy[_reversed].
Clipping paths:
- gx_cpath_init => gx_cpath_init_local (or nothing);
- removes gx_cpath_share and gx_cpath_release_segments;
- gx_cpath_path => gx_cpath_to_path;
- removes the mem argument from gx_cpath_from_rectangle.
We believe that we either renamed or changed the argument list of every API
function that was affected in a non-backward-compatible way, so incompatible
clients will get either compilation or linking errors. (gxpath.h,
gzcpath.h, gzpath.h, gschar.c, gsdps.c, gsdps1.c, gspaint.c, gspath.c,
gspath1.c, gsstate.c, gxacpath.c, gxccache.c, gxclpath.c, gxclread.c,
gxcpath.c, gxfill.c, gxpath.c, gxpath2.c, gxpcmap.c, gxpcopy.c, gxpdash.c,
gxstroke.c)
Reimplements view clipping bookkeeping to use reference-counted paths.
(gzstate.h, gsdps.c, gsstate.c)
Adds const in a couple more places. (gxpath2.c)
If -Z? is enabled, makes the reference counting machinery check for
reference counts going negative. (gsrefct.h)
Adds the first bit of code for rendering smooth shadings. The code is
nowhere near usable. (gsshade.h, gxshade.h, gsshade.c, gxshade.c)
Adds BEGIN ... END macros for creating compound statements that are
syntactically equivalent to single statements. (stdpre.h)
Version 5.21(limited) (1/19/98)
===============================
This is primarily a bug fix fileset for 5.20, with a little new
functionality (pdfwrite image downsampling and more complete pdfmark
processing).
Documentation
-------------
Fixes bugs:
- The build procedures still referred to tar_cat. (make.txt)
Documents some user-developed patches for using certain kinds of Japanese
fonts with Ghostscript. (new-user.txt)
Notes that on Solaris 2.x systems, it is probably not a good idea to use
Sun's fonts. (use.txt)
Documents -dSTRICT. (use.txt)
Procedures
----------
Fixes bugs:
- The definitions of MAKEFILE in several makefiles was incorrect.
(dvx-gcc.mak, unix-cc.mak, unixansi.mak)
- The build rules for the gp_*.$(OBJ) files lacked a directory name,
confusing most 'make' programs. (*.mak)
- geninit didn't work, because the syntax of psfile_() entries in
gconfig.h had changed. (geninit.c)
- Some files were created and then deleted during building,
preventing [gnu]make -j from working. (lib.mak, int.mak)
Adds an explicit directory name to more files in the makefiles. (jpeg.mak,
lib.mak) Added in this fileset:
.$(OBJ): jpeg.mak, {dvx-tail,msvclib,openvms,os2,ugcclib,unixtail,
watc,watclib,winint,winlib}.mak
.dev: jpeg.mak
Removes the default suppression of 'const' with gcc. You must now compile
with gcc 2.7.2.1 or newer, or patch the makefile. (ugcclib.mak,
unix-gcc.mak)
Removes -DPNG_USE_CONST from the command line for compiling libpng, since
this has never actually worked, and is handled in a different way starting
with libpng 0.97. (gs.mak)
Adds a -dSTRICT switch that disables some Ghostscript extensions, to be more
helpful in debugging applications that produce output for Adobe and other
RIPs. (gs_init.ps, gs_statd.ps)
Drivers
-------
Fixes bugs:
- Many occurrences of 'const' were missing or incorrect.
(gdevpdfd.c, gdevpdfi.c, gdevpdfo.c, gdevpdft.c)
- pdfmark processing was broken by changes introduced in 5.20.
(gs_pdfwr.ps)
- pdfwrite didn't convert /Color => /C or /Title => /T in ANN and
LNK pdfmarks. (gdevpdfm.c)
- pdfwrite didn't convert /Dest => /D or /File => /F in the Action
dictionary of ANN and LNK pdfmarks. (gdevpdfm.c)
- pdfwrite didn't convert a /Launch annotation to an Action with a
dictionary. (gdevpdfm.c)
- pdfwrite didn't convert \n in annotation Contents strings to \r.
(gdevpdfm.c)
- jstrm.state was used before being set. (gdevjpeg.c)
- The SVGA devices were not identified as page devices.
(gdevsvga.c)
- The SPARCPrinter driver returned the address of a local buffer
containing an error string. (gdevsppr.c)
- pdfwrite no longer compressed character bitmaps. (bug introduced
in 5.20) (gdevpdfi.c)
- pdfwrite didn't recognize_objdef syntax everywhere. (gdevpdfx.h,
gdevpdfm.c, gdevpdfo.c)
- pdfwrite didn't recognize and convert Launch and GoToR OUT
pdfmarks. (gdevpdfm.c)
- pdfwrite used a /Dest key rather than a /P key for the page number
in articles. (gdevpdfx.h, gdevpdfm.c)
- pdfwrite didn't save and write the /I dictionary for articles.
(gdevpdfx.h, gsstruct.h, gdevpdf.c, gdevpdfm.c)
Implements a parameter list "reader" that prints the parameter values on a
stream in PS/PDF syntax. (We need something like this for printing filter
parameters.) (gdevpsdf.h, gdevpdf.c, gdevpsdf.c)
Implements a write stream that just keeps track of the position. We use
this to determine how much space to allocate for data we're going to save.
(gdevpsdf.h, gdevpsdf.c)
Implements image downsampling, but not anti-aliasing, for the PDF writer.
(gdevpsdf.h, gdevpsds.h, gdevpsdi.c, gdevpsds.c)
Fonts
-----
Adds Frutiger to the built-in list of sans-serif fonts. (gs_fonts.ps)
Interpreter
-----------
Fixes bugs:
- Many occurrences of 'const' were missing. (gsargs.c, ialloc.c,
zdpnext.c, zfunc3.c, zshade.c)
- Some byte * => char * casts were missing. (imainarg.c)
- The stack limit check in .eqproc was wrong. (zmisc3.c)
- The paper sizes a4small and lettersmall weren't implemented.
(gs_statd.ps)
- setuserparams signalled errors on 64-bit systems. (zusparam.c)
Changes .image2 to track the change in the library. (zdps.c)
Some improvements were made to the (still not entirely functional) Type 32
font code. (zchar32.c)
Updates some filters to use the new procedure for transmitting collections
of parameters. (zfdecode.c)
Adds ISO paper sizes C0 through C6. (gs_statd.ps)
Trims down the list of #includes in iconf.c. (iconf.c)
Interpreter (PDF)
-----------------
Fixes bugs:
- CalGray color spaces with a Gamma value caused an error.
(gs_pdf.ps)
Library
-------
Fixes bugs:
- There was a 'const' conflict in the code for handling ImageType 2
images. Fixing this properly required a small change in the ImageType 2
structure. (gsiparm2.h, gximage2.c)
- Many occurrences of 'const' were missing. (gsfunc3.h, gstrap.h,
gxgetbit.h, gdevdgbr.c, gstrap.c, gxclist.c, gxclread.c)
- A couple of enumerations had trailing commas. (gsshade.h,
gxbitfmt.h)
- The gcst parameter was omitted in the non-ANSI version of the
ENUM_PTRS_BEGIN_PROC macro. (gsstruct.h)
- gcc missed a private / non-private discrepancy. (gxpcmap.c)
- An uninitialized variable was used by mistake
(copy_params.options). (gdevdgbr.c)
- The last statement of a procedure was unreachable. (gxclpath.c)
- If a Type 2 font was transformed so that hints were not being
used, hintmask and cntrmask didn't compute the number of following bytes
correctly. (gxtype1.h, gstype2.c, gxtype1.c)
Factors out some common code in gxclip2.c into macros. (gxclip2.c)
Starts to reimplement RasterOp using the compositing framework. (gsropc.h,
gxropc.h, gsropc.c) ****** IN PROGRESS ******
Adds an equality-testing procedure for device colors. This is used both for
color images (which previously did this adhoc) and for RasterOp compositing.
(gxdcolor.h, gximage.h, gxcht.c, gxdcolor.c, gxht.c, gspcolor.c)
Implements hintmask (but not cntrmask) for Type 2 CharString fonts. I don't
know any reasonable way to test whether it's working, though. (gxtype1.h,
gstype2.c, gxhint2.c, gxhint3.c, gxtype1.c)
Adds a more convenient interface for reading and setting sets of parameters.
(gsparam.h, gsparam.c)
Pulls the decision as to whether to halftone for a given device out into a
macro. Eventually we will do something more sophisticated about this.
(gxdevice.h, gxclist.c, gxcmap.c)
Breaks apart a macro in anticipation of future usage. (gsrefct.h)
Version 5.20(limited) (1/8/98)
==============================
This fileset provides enough of the Display PostScript capabilities to start
running real programs. It also adds the first few LanguageLevel 3 features
(none of which have been tested) and reorganizes the makefile structure
somewhat. There are many internal changes since 5.10, some of them still in
progress, so we expect more problems than usual.
This fileset is being provided for testing in two different configurations:
a full release, and a DPS-only package. The latter will be released with
the GPL when it is reasonably complete and reliable.
Documentation
-------------
Fixes bugs:
- TrueType fonts on GS_FONTPATH weren't recognized. (use.txt)
- The argument list for gstate was incorrect. (zdevice2.c)
- There were a couple of minor errors in the e-stack documentation.
(estack.h)
- fonts.txt had several errors regarding compiled fonts.
(fonts.txt)
- An out-of-date Aladdin address still appeared in documentation.
(new-user.txt)
Updates make.txt to reflect the changes in makefile structure. (make.txt)
Notes the addition of -Z' and -Z". (use.txt)
Documents the new begin_typed_image, get_bits_rectangle,
map_color_rgb_alpha, and create_compositor driver procedures. (drivers.txt)
Moves documentation for all releases before 5.0 to history4.txt. (NEWS,
history4.txt)
Documents the addition of SHARE_JPEGLIB. (make.txt)
Removes the author's name and e-mail address from the ps2ascii man page, at
his request. (ps2ascii.1)
Documents the addition of (some) image compression facilities to ps2pdf /
pdfwrite. (ps2pdf.txt)
Documents the new -dNOINTERPOLATE and -F<n> switches. (use.txt)
Adds documentation for a user-contributed port to the SMS/QDOS operating
system. (new-user.txt)
Removes documentation for BGI, which is no longer supported. (use.txt)
Documents the use of the Registry and the GS_DLL environment variable on
Windows platforms. (install.txt)
Procedures
----------
Fixes bugs:
- The OpenVMS makefile referred to EXTEND_NAME rather than
EXTEND_NAMES. (openvms.mak)
- A typo caused a spurious error message from lpr. (unix-lpr.sh)
- The PDF writer didn't include a needed dependency on zlib
compression. (devs.mak)
- The rule for the OS/2 printer device was wrong. (devs.mak)
- The -migrate switch was incorrectly removed from the command line
for pre-4.0 Digital Unix. (make.txt)
- The -r switch was ignored with -dNODISPLAY. (gs_init.ps)
Adds targets for Type 32 fonts (type32.dev) and PostScript LanguageLevel 3
(psl3.dev, psl3core.dev, psl3read.dev). (gs.mak, int.mak, lib.mak)
Changes the documented feature names for PostScript Level 1 and 2
interpreters from level1/2 to psl1/2. The old names are still recognized
for backward compatibility. (gs.mak, int.mak, *.mak)
Removes support for building with DCL under VMS. Building under VMS now
requires some version of make, preferably GNU make. THIS IS A
NON-BACKWARD-COMPATIBLE CHANGE, but there was plenty of lead time for users
(it was announced in 5.01, 6/22/97). (vms*.mak[deleted])
Starts to add an explicit directory name to every file in the makefiles, to
allow building multiple object versions (e.g., debug, profile, product) or
cross-building for multiple platforms in separate directories without any
makefile editing. (*.mak) Done so far:
(done) _h= devs.mak gs.mak int.mak jpeg.mak lib.mak
(done) .h devs.mak gs.mak int.mak lib.mak zlib.mak
openvms.mak os2.mak ugcclib.mak unix-end.mak
unixtail.mak wctail.mak winint.mak winlib.mak
.$(OBJ): devs.mak int.mak (except ccfonts)
lib.mak (except special compilations)
libpng.mak zlib.mak
.dev: libpng.mak zlib.mak
Gets rid of tar_cat. Building on Unix platforms now requires that make
recognize the include directive. THIS IS A NON-BACKWARD-COMPATIBLE CHANGE:
rather than editing the *head.mak files, users should now edit the unix*.mak
or dvx*.mak files (which they previously were instructed NOT to do). Aside
from this, we think the change won't actually affect anyone, since most Unix
make programs (include GNU make) do recognize this directive. (*.mak,
ansihead.mak[deleted], cc-head.mak[deleted], gcc-head.mak[deleted],
dgc-head.mak[deleted], tar_*cat[deleted], dvx-gcc.mak, unixansi.mak,
unix-cc.mak, unix-gcc.mak)
Includes the basic context machinery in every PostScript interpreter
configuration. (int.mak)
Removes the division between 'low-level' and 'high-level' band list
facilities: we once thought we might make the latter optional, but this no
longer seems useful. (lib.mak)
Introduces a new category of devices, identified to genconf as -dev2 and
created with SETDEV2 and SETPDEV2. For the moment, these are the same as
existing devices except that their static instance is const, but we plan to
make them quite different in the future: don't attempt to create any.
(devs.mak, gs.mak, genconf.c, gconf.c)
Removes the obsolete -includef resource from genconf. (genconf.c)
Removes support for IJG JPEG library v5* from the makefile, since we no
longer support these library versions. (jpeg.mak, lib.mak,
gsjerror.h[deleted], gsjpglib.h[deleted], gsjerror.c[deleted])
Makes the JPEG library use floating point if it is fast. (gsjmorec.h)
Adds a SHARE_JPEG option to the makefiles, with the necessary warning about
possible incompatibilities. (*.mak)
Replaces the CCC macro in the makefiles with CC_, the various CC* macros
with CC_* (except for CCA2K and CCAUX), and the O macro with O_; removes the
'begin' target and the CCBEGIN macro. THIS IS A NON-BACKWARD-COMPATIBLE
CHANGE, required for the new arrangement of files into directories. (*.mak)
Replaces all occurrences of -Idir1 -Idir2 ... -Idirn in platform-generic
makefiles with $(I_)dir1 $(II)dir2 ... $(_I)dirn, and defines these macros
in platform-specific makefiles, in order to accommodate OpenVMS command
syntax. (*.mak)
Adds -fno-common to the default gcc compilation and linking switches, to
improve checking for doubly-defined externs. (unix-gcc.mak)
Adds a -dNOINTERPOLATE switch to turn off image interpolation. (gs_init.ps)
Adds a -F<file> switch that runs files through the run_string interface with
an 1-byte buffer. (imainarg.c)
Allows specifying the name of the gconfig.h file with -DGCONFIG_H= in the
compilation command line, to support certain multi-configuration build
procedures. (int.mak, lib.mak, gconf.h, gconf.c, gscdef.c, iconf.c)
Splits off the installation targets from unix-end.mak. (unix-end.mak,
unixinst.mak, unix*.mak, ugcclib.mak)
Utilities
---------
Fixes bugs:
- A case label was misplaced. (No effect on normal operation.)
(genconf.c)
- ps2ascii had some Encoding-related problems, and a serious bug
causing the stack to grow indefinitely. (ps2ascii.ps)
Adds a new font2pcl.ps utility, for converting outline fonts to bitmapped
PCL fonts. (font2pcl.ps)
At the request of a user, modifies ansi2knr to read stdin if no input file
is supplied, and to accept an optional --filename switch to set the file
name in the #line directive. Also makes ansi2knr write the usage message on
stderr rather than stdout. (ansi2knr.c)
Adds a user-contributed Perl script that fixes compatibility problems
between MS Word output and Ghostview 1.5. (fixmswrd.pl)
Adds a new test file that produces some pretty color output. (vasarely.ps,
unix-end.mak)
Adds a user-contributed utility for producing AFM files from PFA/PFB and
optionally PFM files. (pf2afm.bat, pf2afm.ps)
Drivers
-------
Fixes bugs:
- Some 'static' declarations were missing (gcc lossage). (gdevht.c,
gdevmgr.c, gdevpcfb.c, gdevrrgb.c)
- Some 'char *' should have been 'unsigned char *'. (gdevccr.c)
- The PDF writer represented non-rectangular clipping paths in a way
that could cause Acrobat to produce incorrect output. (The fix relies on
the new clipping path enumeration facility.) (gdevpdfd.c)
- get_params for the X device didn't read the WINDOWID and
.IsPageDevice parameters. (gdevx.c)
- A superseded driver was still in the distribution.
(gdevnp6.c[deleted])
- The PDF writer's default parameters didn't quite match the default
parameters of Adobe Acrobat(TM). (gdevpsdf.h)
- A cast from const byte * to const char * was omitted.
(gdevpdft.c)
- x_map_color_rgb returned incorrect values for values in the dither
cube/ramp. (gdevx.c)
Adds user-contributed drivers for:
- the Brother HL 720/730 laser printer (gdevhl7x.c);
- the Cirrus Logic CL-GD54xx SuperVGA chipset (in gdevsvga.c).
Adds stubs or dummy implementations for the new Acrobat Distiller 3.0
pdfmark features (BP/EP/SP, _objdef/OBJ, PUT/PUTINTERVAL/CLOSE). Features
not yet implemented:
- Predefining Catalog and DocInfo.
- Writing out added Catalog and Info keys.
- Special handling for Page#, Prev/This/NextPage.
- Writing out added keys in Page objects.
- Defining objects for ANN, DEST, LNK, PS.
- Writing out added keys for ANN, BP, DEST, LNK, PS.
- Adding information to streams (PUT, CLOSE).
- Writing out streams.
(gs_pdfwr.ps, gdevpdfx.h, gdevpdf.c, gdevpdfi.c, gdevpdfm.c, gdevpdfo.c)
Removes the DoThumbnails distiller parameter, which Acrobat Distiller 3.0 no
longer supports. (gs_pdfwr.ps, gdevpdfx.h, gdevpdf.c, gdevpdfp.c)
Starts to eliminate or segregate writable globals that point to
heap-allocated data, as in the interpreter (see below); specifically, makes
all device and xfont procedure structures const in devices that Aladdin
maintains. Note that this involves a NON-BACKWARD-COMPATIBLE CHANGE in the
get_xfont_procs device procedure (to add const to the return type); this
only affects the 3 implementations of xfonts. (gdevprn.h, gdevdjet.c,
gdevm1.c, gdevpccm.c, gdevpdf.c, gdevpdfm.c, gdevpdft.c, gdevps.c,
gdevpsdf.c, gdevpx.c; gxdevice.h, gxxfont.h, gdevbgi.c, gdevbit.c,
gdevbmp.c, gdevdflt.c, gdevdjet.c, gdevlj56.c, gdevmiff.c, gdevmsxf.c,
gdevnfwd.c, gdevpbm.c, gdevpcfb.c, gdevpdf.c, gdevpng.c, gdevprn.c,
gdevps.c, gdevpx.c, gdevs3ga.c, gdevsvga.c, gdevtfax.c, gdevtfnx.c,
gdevvglb.c, gdevwddb.c, gdevwdib.c, gdevwpr2.c, gdevwprn.c, gdevx.c,
gdevxalt.c, gdevxxf.c, gxccman.c)
Makes the statically allocated device templates const in some devices, using
the new -dev2 device resource type. NOTE: the meaning of -dev2 is subject
to change without notice in future releases. (gdevdjet.c, gdevpdf.c,
gdevps.c, gdevpx.c, gdevvglb.c)
Adds a new begin_typed_image driver procedure which is called for all types
of images, not just ImageType 1. The default implementation calls
begin_image if the ImageType is 1. (gdevmem.h, gdevprn.h, gsiparam.h,
gxdevice.h, gdevbbox.c, gdevdflt.c, gdevht.c, gdevmrop.c, gdevnfwd.c,
gxacpath.c, gxclimag.c, gxclip2.c, gxclist.c, gxcpath.c, gxpcmap.c)
Adds a new get_bits_rectangle driver procedure which allows reading back an
arbitrary rectangle of bits from the device, not just a single full scan
line. The default implementation calls get_bits, being careful to avoid a
recursion loop; the default implementation of get_bits calls
get_bits_rectangle similarly. This procedure has a lot of flexibility,
almost all of which is ultimately provided by the implementation in memory
devices. (gdevmem.h, gsbitops.h, gxcindex.h, gxdevice.h, gdevbbox.c,
gdevdflt.c, gdevdgbr.c, gdevht.c, gdevm*.c, gdevmem.c, gdevmpla.c,
gdevnfwd.c, gxbitfmt.h, gxclip2.c, gxclist.c, gxclread.c, gxcpath.c,
gxgetbit.h)
Removes support for the BGI (Borland Graphics Interface) device, since we no
longer support the Borland compilers for MS-DOS. (devs.mak, dvx-head.mak,
openvms.mak, unixhead.mak, gdevbgi.c[deleted])
Speeds up x_map_color_rgb by avoiding server access in most cases.
(gdevx.h, gdevx.c, gdevxini.c)
Implements get_bits_rectangle in the X driver in place of get_bits.
(gdevx.c, gdevxalt.c)
Implements begin_typed_image for ImageType 2 images in the X driver, as an
example of how a driver can implement this function itself. (gdevx.c)
Adds a call on the DCTEncode set_defaults procedure, which is now required
(see under Streams below). (gdevjpeg.c)
Implements a substantial part of the Distiller image compression machinery.
See ps2pdf.txt for details. (gdevpdfx.h, gdevpsdf.h, gdevpdf.c, gdevpdfi.c,
gdevps.c, gdevpsdf.c, gdevpsdi.c, gdevpsdp.c, gdevpsds.c)
Adds a map_color_rgb_alpha driver procedure, complementing
map_rgb_alpha_color. (gdevmem.h, gdevprn.h, gxdevice.h,
gdevbbox.c, gdevdflt.c, gdevht.c, gdevmrop.c, gdevnfwd.c, gdevprn.c,
gxclip2.c, gxclist.c, gxcmap.c, gxcpath.c)
Splits off gxdevcli.h (client definitions) from gxdevice.h, which had gotten
very large. This doesn't do much good yet in terms of reducing dependencies
and compilation time, because every client still includes gxdevice.h, but
it's the raw material for doing so in the future. (gxdevcli.h, gxdevice.h)
Adds alpha tracking to the command list. (gxclpath.h, gxclimag.c,
gxclpath.c, gxclread.c)
Changes the 'show' pseudo-parameter for the PDF writer so that it takes
multiple additional parameters instead of a dictionary. This greatly
reduces garbage collection overhead. (gs_pdfwr.ps, gdevpdfx.h, gdevpdfp.c,
gdevpdft.c)
Adds a create_compositor driver call for handling compositing. (gdevbbox.h,
gdevmem.h, gdevprn.h, gsdevice.h, gxdevcli.h, gxdevice.h, gdevbbox.c,
gdevdflt.c, gdevht.c, gdevnfwd.c, gsdevice.c, gxclimag.c, gxclip2.c,
gxclist.c, gxcpath.c, gxpcmap.c)
Updates drivers to account for the more careful handling of file name
length. (gdevpdfx.h, gdevwprn.c)
Adds a user-contributed enhancement to make the Epson dot matrix driver work
at 180x60dpi and 240x180dpi for 24 pin printers. (gdevepsn.c)
Platforms
---------
Fixes bugs:
- The Windows platform didn't put stdin into binary mode.
(dwmainc.cpp)
Removes all remaining uses of gs_malloc and gs_free in platform-specific
code. (gp_dosfb.c, gp_vms.c)
Adds a platform-specific gp_getenv call, to allow the Windows implementation
to consult the Registry. (gp.h, gpgetenv.h, gp_getnv.c, gp_wgetv.c, *.mak,
gp_win32.c)
Separates out the declaration of popen and pclose, which may be declared
correctly in stdio.h, incorrectly in stdio.h, or not at all, depending on
the platform. (lib.mak, unixtail.mak, pipe_.h, gdevpipe.c, gp_os2.c,
gp_os9.c, gp_unix.c)
Tweaks the platform-workaround header file conditionals a little more.
(malloc_.h, memory_.h).
Makes the Windows DLL check the GS_DLL environment/registry variable for the
location of the DLL. (dwdll.cpp)
Defines the maximum length for the file name returned by
gp_open_scratch_file, and possibly by gp_open_printer. (gp.h, gp_*.c)
Fonts
-----
Fixes bugs:
- A 'flush' was missing from a debugging message. (gs_fonts.ps)
- Type 2 fonts didn't always have a PaintType entry. (gs_cff.ps)
- CIDFontType 0 fonts were broken, probably because of a recently
added validity test in the C code. (gs_cidfn.ps)
- Font types without an Encoding caused an error (in .completefont).
(gs_fonts.ps)
- composefont required the elements of the font array to be actual
fonts, rather than allowing font names. (gs_cidfn.ps)
- composefont required that all elements of the font array have
CIDSystemInfo dictionaries. (Adobe has said that their interpreters don't
check for this in some cases, but it's a bug. Unfortunately, by now it's an
established one.) (zfcmap.c)
Adds .dir to the list of file suffixes known not to be fonts. (gs_fonts.ps)
Interpreter
-----------
Fixes bugs:
- A Type 2 font that provided fewer CharStrings than charset
elements caused an error. (gs_cff.ps)
- If a context was joined before it terminated, its stack was never
copied to the joining context. (zcontext.c)
- Freeing a context didn't free most of its substructures.
(icontext.h, istack.h, icontext.c, interp.c, istack.c, zcontext.c)
- save and restore didn't save and restore the user parameters.
(gs_lev2.ps, zvmem2.c)
- %stdin and %stdout weren't defined per-context. (files.h,
icontext.h, icontext.c, ziodev.c)
- Switching contexts didn't clean up the stacks. (The current way
we do this is very inefficient: we should use a special null for filling the
untouched area, so we can use it to detect the high water mark.)
(icontext.c)
- A cast from const to non-const was missing. (zdpnext.c)
- User parameters weren't managed per-context. (The current way we
do this is inefficient.) (gs_dps.ps, gs_init.ps, gs_lev2.ps, isave.h,
icontext.c, iinit.c, isave.c, zcontext.c, zusparam.c)
- Some operand checks weren't wrapped in do { ... } while(0),
possibly leading to incorrect parsing of 'if's. (opcheck.h)
- If a context terminated with unmatched saves, the restores weren't
executed. (isave.h, isave.c, zcontext.c)
- If two or more contexts shared the same global VM, the outermost
restore (which in this case saves only local VM) checked for invalidrestore
incorrectly. (isave.c)
- resourceforall didn't remove its own temporary values from the
operand stack when calling the procedure. (gs_res.ps)
- resourceforall returned local instances even when currentglobal
was true. (gs_res.ps)
- If a context had unmatched saves, other contexts sharing the same
local VM weren't blocked from running. (zcontext.c)
- The NeXT compositing operations (Copy, etc.) weren't defined in
systemdict. (gs_dpnxt.ps)
- In the case of a stack overflow, some garbage could get left on
the stack. (istack.c)
- Stack overflow was reported prematurely -- typically when the
stack depth had reached half the specified limit. (istack.c)
- Freed ref arrays weren't filled with nulls, which could confuse
the garbage collector later. (ialloc.c)
- Certain stack overflow conditions could put a stack into an
anomalous state that confused the garbage collector. (istack.c)
- The maximum stack size could not be set to a value smaller than
the current allocated space, but the minimum value should be the number of
entries actually in use. (istack.c)
- If .buildfont* had to add any elements to the font dictionary, a
temporary pointer to the Encoding, FDepVector, or sfnts could become
invalid, causing crashes or confusion. (zfont0.c, zfont2.c, zfont42.c)
Changes exit, stop, and .stop so that if there is no matching dynamically
enclosing context (loop or stopped), the effect is a quit, like the Adobe
interpreters, and not an invalidexit. (zcontrol.c)
Adds support for ImageTypes other than 1. (gs_init.ps, gs_lev2.ps,
gs_res.ps, zimage2.c)
Adds support for LanguageLevel 3 features:
- Idiom recognition in 'bind'. (gs_init.ps, gs_dps.ps, gs_lev2.ps,
gs_ll3.ps, zmisc3.c)
- HalftoneTypes 6, 10, and 16. (gs_ll3.ps)
- FunctionType resource category. (gs_ll3.ps)
- FunctionType 2 and 3 Functions. (zfunc3.c)
- PatternType 2 and smooth shading (structures and API only, no
algorithms). (gs_init.ps, gs_ll3.ps, gs_res.ps, zshade.c)
- In-RIP trapping (structures and API only, no algorithms).
(gs_ll3.ps, ztrap.c)
- ImageType 3 and 4 (masked images) (structures and parsing only, no
algorithms). (gs_ll3.ps, gs_res.ps, iimage2.h, zimage.c, zimage2.c,
zimage3.c)
- DevicePixel color space. (gs_lev2.ps, zcolor2.c, zcspixel.c)
- DeviceN color space. (gs_lev2.ps, igstate.h, zcsdevn.c)
Adds support for Type 32 fonts. (gs_cidfn.ps, gs_init.ps, gs_typ32.ps,
zchar32.c, zfont32.c)
Adds debugging printout to the CFF loader. (gs_cff.ps)
Removes support for _ds pointers referencing the stacks, since we no longer
support 16-bit implementations. (iref.h, istack.h, interp.c, ireclaim.c,
istack.c)
Removes all #ifdef DPNEXT conditionalization. (We had intended to use this
to delimit blocks of code to be released with the GPL, but we're now
planning to release a much larger number of files.) (igstate.h, interp.h,
istruct.h, interp.c, zgstate.c)
Allows user parameters to be implemented partly in PostScript code, since
this is required for some LanguageLevel 3 features (currently only
IdiomRecognition). (gs_lev2.ps)
Removes most of the references to a global process scheduler. Completing
this will require passing an interpreter state structure to all operators in
place of the operand stack pointer, which we aren't prepared to contemplate
yet. (zcontext.c)
Adds tracing for context operations, -Z' and -Z". (zcontext.c)
Changes def so that it doesn't have a special exception for storing
references to local objects into systemdict or its subsidiary dictionaries
during initialization: such stores now must use .forceput (or .forcedef,
defined in gs_init.ps using .forceput); changes .forceput to allow storing a
local reference into any global dictionary, not only systemdict, if the save
level is 0. (gs_dps1.ps, gs_init.ps, gs_lev2.ps, gs_pdfwr.ps, gs_res.ps,
gs_statd.ps, zdict.c)
Moves all of the initialization of internaldict to PostScript code.
(gs_init.ps, iinit.c, zcontrol.c)
Moves the JobName user parameter from C to PostScript code. (gs_lev2.ps,
zusparam.c)
Adds to every dictionary a pointer to the allocator that created it. This
allows us to create and grow dictionaries without having to reference any
global variables. (idict.h, idict.c, iinit.c)
Implements the localfork operator, which creates contexts with private local
VM. (gs_dps.ps, gs_init.ps, dstack.h, gsalloc.h, ialloc.c, icontext.c,
iinit.c, interp.c, zcontext.c)
Systematizes reliable access to variables in systemdict and userdict.
(gs_dps1.ps, gs_dps2.ps, gs_fonts.ps, gs_init.ps, gs_lev2.ps, gs_statd.ps,
gs_type1.ps)
Starts to eliminate or segregate writable globals that point to
heap-allocated data. (Writable globals containing procedures,
run-time-settable switches, pointers to static data, or non-pointer values
that are initialized once and idempotently are OK.) (iconf.c, iinit.c,
imain.c, imainarg.c, interp.c, zfont1.c, zht2.c, ziodev.c, ztype.c,
zupath.c, zusparam.c)
Adds support for ImageType 2 (device source) images. (gs_dps.ps, zdps.c)
Adds begin_typed_image to internal device procedure vectors. (zupath.c)
Increases the maximum stack sizes to match the Adobe implementation more
closely. (gs_init.ps)
Adds a file_is_invalid macro to work around a bug in the Borland 5.0
compiler. (files.h, ziodev.c, zvmem.c)
Changes the character cache to be allocated in the C heap rather than global
VM. This is required because cache chunks are now allocated from the same
allocator as the cache. (zfont.c)
Implements sizeimage and readimage, including a new .getbitsrect operator.
(gs_dpnxt.ps, gs_init.ps, zdevice.c, zdpnext.c)
Resets the maximum stack sizes earlier in initialization. (gs_init.ps)
Tweaks the default CRD slightly (syntactically, not the content).
(gs_lev2.ps)
Adds support for PatternTypes other than 1. (gs_init.ps, gs_lev2.ps,
gs_res.ps, zpcolor.c)
Adds a pointer to the C heap allocator to the gs_main_instance structure,
working towards the goal of removing all references to gs_memory_default.
(iminst.h)
Removes all remaining uses of gs_malloc and gs_free from the interpreter.
(igc.h, igc.c, imain.c, zfdctd.c, zfdcte.c)
Adds an explicit #include for all remaining uses of gs_memory_default in the
interpreter. (zfdctd.c, zfdcte.c, zvmem.c)
Adds a map_color_rgb_alpha driver procedure, complementing
map_rgb_alpha_color. (zupath.c)
Removes the obsolete writeppmfile operator. (zwppm.c[deleted])
Updates the implementation of the image operators to match the change from
HasAlpha to Alpha in the image definition structure. (iimage.h, zcolor1.c,
zimage.c)
Reimplements upath in C code, since UnpaintedPath requires it. (zupath.c)
Updates interpreter code for the change in the GC interface. (imemory.h,
istruct.h, icontext.c, igc.c, igcref.c, igcstr.c, ilocate.c, iname.c,
isave.c, iscan.c, istack.c, zfproc.c)
Implements the compositing operators. (zdpnext.c, zdps.c, zupath.c)
Changes some matrix operators to pass unpacked matrices on the stack.
(zmatrix.c)
Moves the alpha-related operators to where they belong. (zcolor.c,
zdpnext.c)
Changes all calls on getenv to gp_getenv. (imainarg.c, zmisc.c)
Interpreter (PDF)
-----------------
Fixes bugs:
- PostScript pass-throughs caused an error. They are now always
executed; probably we should offer the option of not executing them, for
closer compatibility with Acrobat. (pdf_draw.ps, pdf_main.ps)
- Font resources, unlike all other types of resources, couldn't be
inherited from an ancestor Page(s) object. (pdf_font.ps)
- Resources appearing only in Form or Pattern dictionaries weren't
recognized as being present. (pdf_base.ps, pdf_draw.ps, pdf_main.ps)
Moves closer to supporting Type 0 (and CID) fonts. (pdf_font.ps)
Streams
-------
Fixes bugs:
- If the image was very narrow or very shallow, the interpolated
image scaling stream could make an invalid memory reference. (siscale.c)
Removes the last few references to gs_malloc and gs_free from stream code.
Clients now *must* call the set_defaults procedure for the DCT filters
before initializing them: THIS IS A NON-BACKWARD-COMPATIBLE CHANGE.
(sdct.h, sdctd.c, sdcte.c, sjpegc.c)
Adds an explicit #include for all remaining uses of gs_memory_default.
(sdctd.c, sdcte.c, szlibd.c, szlibe.c)
Library
-------
Fixes bugs:
- Some files that included shc.h didn't include scommon.h. (shc.h)
- A file didn't include std.h before <stdio.h>. (gslib.c)
- There was an unnecessary extern (cleanup only). (gscsepr.c)
- The uid.xvalues member of gs_client_pattern structures wasn't
traced by the GC. (gspcolor.h)
- If an Interpolated image reached the end of the input at exactly
the wrong time, an assertion could fail. (gxiscale.c)
- With non-ANSI compilers, an integer constant passed to the fmod
library function, which requires a floating point argument, could cause a
floating point exception or an incorrect result. (gsmisc.c)
- An error in computing the bounding box sometimes caused strokes to
print incorrectly (for example, some graduated fills printed incorrectly).
(gxstroke.c)
Implements an undocumented (!) feature of Type 2 CharStrings, namely that if
the endchar operator is invoked with 4 or 5 operands on the stack, it is
equivalent to the Type 1 seac operator (without the asb operand). This
required changing the implementation of seac so that it does the base
character first, rather than the accent. (gxtype1.h, gstype1.c, gstype2.c,
gxtype1.c)
Adds support for ImageTypes other than 1. (gsiparam.h, gximage.h,
gxiparam.h, gdevddrw.c, gsimage.c, gximage.c, gximage0.c)
Adds support for ImageType 2 (device source) images. Currently we only
handle the simplest case (source is not transformed). (gsimage.h,
gsiparm2.h, gsimage.c, gximage2.c)
Adds support for LanguageLevel 3 features:
- FunctionType 2 and 3 Functions. (gsfunc3.h, gsfunc3.c)
- PatternType 2 and smooth shading (structures and API only, no
algorithms). (gscolor3.h, gsptype2.h, gsshade.h, gxistate.h, gscolor3.c,
gsshade.c)
- In-RIP trapping (structures and API only, no algorithms).
(gstrap.h, gstrap.c)
- ImageType 3 (masked images) (structures and API only, no
algorithms). (gsiparm3.h, gximage3.c)
- ImageType 4 (chroma-keyed masked images). (gsiparm4.h,
gximage4.c)
- DevicePixel color space. (gscpixel.h, gscspace.h, gscpixel.c,
gximono.c)
- DeviceN color space. (gscspace.h, gscdevn.c)
Removes the #ifdef FUTURE around the code for passing multi-plane and
interpolated images through the band list (version 5.01) and for banded
filling and stroking with colored halftones (version 4.71). This code is
now part of the standard release. (gxcldev.h, gxclpath.h, gxdht.h,
gxhttype.h, gsht.c, gxclimag.c, gxclread.c, gximage.c)
Adds a _ptrs6 structure definition macro. (gsstruct.h)
Removes #ifdef DPNEXT conditionalization, as in the interpreter (see above).
(gzstate.h, gsdps.c, gsstate.c, gximage.c, gximage5.c)
Starts to eliminate or segregate writable globals that point to
heap-allocated data, as in the interpreter (see above). (gsbittab.h,
gscdefs.h, gsdcolor.h, gxclist.h, gxsample.h, gzht.h, gconf.c, gsbitops.c,
gsbittab.c, gscdef.c, gsdparam.c, gsflip.c, gsinit.c, gsmatrix.c,
gspcolor.c, gsstate.c, gxcht.c, gxclist.c, gxcmap.c, gxdcolor.c, gxdither.c,
gxht.c, gximage.c)
Removes the division between 'low-level' and 'high-level' band list
facilities. (gxcldev.h, gxclimag.c, gxclist.c, gxclpath.c)
Renames gximage*.c as gxi*.c, since these files apply only to ImageType 1
images and the use of numerical suffixes was confusing. (gximage.c =>
gxiinit.c, gximage0.c => gxidata.c, gximage1.c => gxifast.c, gximage2.c =>
gximono.c, gximage3.c => gxicolor.c, gximage4.c => gxi12bit.c, gximage5.c =>
gxiscale.c)
Provides the ability to enumerate a clipping path (based on the clipping
list) using an enumerator, in the same way as an ordinary path. (gxpath.h,
gzcpath.h, gzpath.h, gxcpath.c, gxpath2.c)
Speeds up mem_mapped4_copy_mono substantially. (gdevm4.c)
Removes all remaining uses of gs_malloc and gs_free in the library, other
than in drivers. This turned out to require changing a couple of
initialization APIs. (gsfont.h, gslib.h, gxdevice.h, gxfcache.h, gsfont.c,
gxccman.c)
Reduces the writable statics related to the default (C heap) allocator to a
single pointer. (gsmalloc.h, gsmemory.h, gsinit.c, gsmemory.c)
Adds support for PatternTypes other than 1. (gscolor2.h, gspcolor.h,
gsptype1.h, gxcolor2.h, gspcolor.c)
Adds an explicit #include for all remaining uses of gs_memory_default that
aren't covered by gxdevice.h. (gxclmem.c)
Splits off the default implementations of the bit-copying device procedures,
because the file was getting too large. (gdevdbit.c, gdevdflt.c)
Adds a procedure for calculating the difference of two rectangles, needed
for Type 2 images. (gsrect.h, gxpath.h, gsutil.c)
Extends the image machinery to allow alpha values to either precede or
follow color values in image data, replacing HasAlpha with Alpha in the
ImageType 1 image structure. (gsiparam.h, gximage.h, gsimage.c, gxclimag.c,
gxclread.c, gxicolor.c, gxiinit.c, gxiscale.c)
Extends the path enumeration API to decouple path copying from coordinate
transformation. (gspath.h, gzpath.h, gspath1.c, gxpath2.c)
Changes the garbage collector interface so that all procedures are passed
through a structure rather than being referenced as externs. This allows
programs other than the GC itself to enumerate and relocate pointers, and
also removes all static dependencies on the GC from the library. This
involves a NON-BACKWARD-COMPATIBLE CHANGE to the argument list of enum_ptrs
procedures, and to the implementation of both enum_ptrs and reloc_ptrs. (We
hope that the new macros we've introduced will avoid non-backward-compatible
changes in the future.) (gsstruct.h, gdevmem.c, gsalloc.c, gscdevn.c,
gscolor.c, gscolor2.c, gscsepr.c, gsdevice.c, gsfont.c, gshtscr.c,
gsimage.c, gsmemory.c, gspcolor.c, gsstate.c, gxcmap.c, gxcpath.c, gxht.c,
gxiinit.c)
Moves the image compositing code into the library from its inappropriate
home in the interpreter. (gsdpnext.h)
Splits up gsbitops.h into client interface and implementation support.
Removes some obsolete code at the same time. (gdevmem.h, gsbitops.h,
gxbitops.h, gsbitops.c)
Creates the concept of compositing functions and compositing devices
(compositors). (gscompt.h, gxcomp.h)
Implements the default compositor for alpha-based compositing. (gsalphac.h,
gsalphac.c)
Creates a store_alpha device that adds alpha channel storage to any other
device. (gdevalph.c)
Moves alpha channel capability into the dpsnext feature, where it should
have been all along. (gsalpha.h, gscolor.h, gsalpha.c, gscolor.c,
gsstate.c)
Implements color premultiplying by (non-unity) alpha values. Currently we
always premultiply towards white: see gxalpha.h for some comments.
(gxalpha.h, gxcmap.c)
Reduces the amount of boilerplate in the RasterOp implementation table.
(gsroptab.c)
Adds an arg_push_temp_string procedure to accommodate the new gp_getenv
call. (gsargs.h, gsargs.c)
Updates various library APIs to account for the more careful handling of
file name length. (gdevprn.h, gxclio.h, gxclist.h, gsdevice.c, gxclfile.c,
gxclmem.c)
Version 5.10 (11/23/97)
=======================
This release, not originally planned, greatly reduces the size of PDF files
produced by the pdfwrite device, fixes a number of minor problems in PDF
output, and optionally produces output compatible with Acrobat 2.x, in order
to address problems reported by NSF in processing these files as part of
their FastLane electronic proposal submission process. Aside from that, and
some localized bug fixes, it has minimal changes from 5.03.
Documentation
-------------
Fixes bugs:
- ansihead.mak referred to unix-ansi.mak, which is actually named
unixansi.mak. (ansihead.mak)
- README referred to an "If you need help" section that was moved to
new-user.txt. (README)
Updates build information for HP-UX systems. (make.txt)
Updates the information for getting Martin Lottermoser's hpdj driver.
(new-user.txt)
Improves the error message when a user tries to invoke gswin32c without
explicitly selecting a device. (dwmainc.cpp)
Removes the author's name and e-mail address from the pdf2ps man page, at
his request. (pdf2ps.1)
Improves the documentation for BandBufferSpace. (language.txt)
Procedures
----------
Changes the VMS command files so that they don't echo the commands.
(append_l.com, copy_one.com, rm_all.com, rm_one.com)
Utilities
---------
Fixes bugs:
- The "lp" command files all inappropriately set the top margin to
0.1". (lp386.bat, lp386r2.bat, lpgs, lpgs.bat, lpr2, lpr2.bat)
- The lp386[r2].bat command files inappropriately set the
LanguageLevel to 1. (lp386.bat, lp386r2.bat)
Drivers
-------
Fixes bugs:
- The PDF writer got confused about the current color if the input
contained text strings separated only by color changes. (gdevpdf.c)
- Some casts between const char * and const byte * were incorrect
(warnings only). (gdevpdft.c)
Adds a NoCancel parameter to the winpr2 device, which suppresses display of
the dialog box. (gdevwpr2.c)
Interpreter
-----------
Fixes bugs:
- An "extern" was omitted, causing a duplicate definition of
build_function_procs. (ifunc.h)
- The global pseudo-operator table was too small, causing a
limitcheck in ps2ascii. (iinit.c)
- setcolorspace with a Pattern space with no underlying space would
cause an error if the current color space was a Pattern space. (zpcolor.c)
- The Decode key was optional, not required, in the dictionary form
of image[mask]. (zimage2.c)
Adds two more PCL/PJL reset sequences to the list of sequences to ignore.
(gs_init.ps)
Library
-------
Fixes bugs:
- Multi-screen color halftones could produce "seams". (gxcht.c)
- A bug in the gcc optimizer on H-P RISC workstations caused all
curves to be output as lines. (gxpflat.c)
- If a non-standard OtherSubr was called before the [h]sbw in a Type
1 font, a crash could occur. (gxhint3.c)
- gxclist.c didn't include string_.h. (gxclist.c)
Version 5.07(limited) (10/31/97)
================================
A few more bug fixes for the 5.10 release.
Documentation
-------------
Fixes bugs:
- Some file and directory names hadn't been updated to match the new
directory structure on the primary server. (make.txt, new-user.txt)
Adds the URL for reaching URW++. (Fontmap.*)
Drivers
-------
Fixes bugs:
- Because the C % operator isn't equivalent to 'modulus' for
negative numerators, gx_default_strip_tile_rectangle could crash in some
cases. (gxdevice.h, gdevdflt.c)
- In the PDF writer, Dest values were correct (page numbers) for
GoToR actions, but were incorrect (should be page object references) for
other actions; also, Rect values were transformed, but should not be.
(gdevpdfm.c)
- In the PDF writer, articles and bookmarks could attempt to write
multiple Contents streams, which is not allowed. (gdevpdfx.h, gdevpdf.c,
gdevpdfm.c)
- The PDF writer ignored PS (PostScript pass-through) pdfmarks.
(gdevpdfm.c)
- The PDF writer didn't write out the color space parameters for
CIE-based spaces. (gdevpdfi.c)
Library
-------
Fixes bugs:
- Suffix subclass structures with 4 added pointers skipped the first
pointer in the superclass when garbage collecting, possibly causing invalid
memory accesses. (gsstruct.h)
- An argument list incompatibility in a procedure used in a static
structure initialization upset some compilers. (gsfunc.h, gsfunc0.c)
Version 5.06(limited) (10/7/97)
===============================
This fixes a few more bugs in the PDF writer, and a few other very obscure
problems. It also adds support for Functions and brings multiple contexts
closer to working, neither of which we expect actually to be used any time
soon. This is intended to be the candidate fileset for the 5.10 release,
but since we had to tinker with a delicate part of the PDF writer to fix a
problem affecting visual quality with Acrobat, there may be new bugs that
will have to be fixed in yet another candidate fileset.
Documentation
-------------
Fixes bugs:
- Jim McPherson's e-mail address was out of date. (devices.txt)
- Invoking ps2pdf with only a single file name is supported on some
versions of Windows NT and OS/2, not only on Unix. (ps2pdf.txt)
- The ps2pdf documentation didn't indicate that ps2pdf can use the
Windows "console mode" executable as well as the MS-DOS executable.
(ps2pdf.txt)
- The list of which Distiller parameters actually have an effect was
incorrect. (gdevpdfp.c)
Notes that the cdj550 driver is compatible with the H-P 660C and 660Cse.
(devs.mak, devices.txt)
Adds a note about using Acrobat Reader fonts. (install.txt, use.txt)
Notes that the LJ 5P, like the 5L, is not a PCL XL printer. (devs.mak)
Notes problems and possible problems with certain versions of the Borland
C++ compiler. (make.txt)
Notes the change in -Z:. (use.txt)
Updates the uniprint documentation for this release. (devices.txt)
Expands the rationale for the large resolution in the bbox device.
(gdevbbox.c)
Notes that the H-P DeskJet 600 series can use the djet500 driver with -r600.
(devs.mak)
Procedures
----------
Fixes bugs:
- Vector devices didn't include a necessary dependency on the stream
package. (lib.mak)
- There were several bugs in the ps2pdf.bat file. (ps2pdf.bat)
Changes -Z: so it prints some summary lines as well as minimal information
about banding. This makes the -ZA trace compatible with our memory leak
tool. (iminst.h, imain.c)
Utilities
---------
Fixes bugs:
- ps2epsi sometimes produced a too-large bounding box, or even
caused a rangecheck. (ps2epsi)
At the advice of a user, removes the RESOLUTION=100 line from pv.sh.
(pv.sh)
Drivers
-------
Fixes bugs:
- The PDF writer produced incorrect output for stroke operations
with unusual CTMs, because PDF, unlike PostScript, applies the CTM to the
path at the time of the fill or stroke, not as the path is being
constructed. (gdevpdfd.c)
- Vector devices returned an error, instead of falling back to the
default implementations, when filling or stroking with a pattern.
(gdevvec.c)
- The PDF writer freed an internal stream structure using the wrong
allocator, possibly causing memory corruption. (gdevpdf.c)
- The uniprint driver had some compilation problems, and possibly
other problems as well (consult the source file). (gdevupd.c, *.upp)
- With -dNOCACHE, the PDF writer wrote all text in the base 14 fonts
twice, once as text and once as outlines. (gs_pdfwr.ps, gdevpdfd.c)
- The PDF writer didn't properly recognize Symbol and ZapfDingbats
as being among the base 14 fonts. (gs_pdfwr.ps)
- When using Acrobat Reader with font smoothing turned on, the base
14 fonts appeared too bold on the screen in files produced by ps2pdf,
because Reader decides that a 100-unit font at 1 unit = 0.1 point should be
bolder than a 10-unit font at 1 unit = 1 point. (gdevpdfx.h, gdevpdf.c,
gdevpdft.c)
- The PDF writer didn't convert View/Page specifications for
bookmark pdfmarks to a Dest key, causing bookmarks not to work.
(gdevpdfm.c)
Speeds up the PDF writer by only passing the encoding if it isn't
StandardEncoding. (gs_pdfwr.ps, gdevpdft.c)
Changes the PDF writer's handling of unencoded glyphs. Adds device
parameters ReEncodeCharacters and ReAssignCharacters to control how
unencoded glyphs are handled. (These parameters will go away when we handle
variant encodings in full generality.) (gdevpdfx.h, gdevpdf.c, gdevpdfp.c,
gdevpdft.c)
Interpreter
-----------
Fixes bugs:
- setpagedevice didn't restore the stack properly if it failed.
(gs_setpd.ps)
- 0 identmatrix didn't cause an error. (gs_init.ps)
- Devices expecting array-valued parameters didn't accept packed
arrays. (iparam.c)
Starts to de-implement support for special handling of the stacks on
machines with 16:16 addressing. Currently this only happens if DPNEXT is
defined. (istack.h)
Brings multiple contexts closer to working. The interpreter can now run
some very simple test cases. (int.mak, icontext.h, igstate.h, interp.h,
istruct.h, icontext.c, interp.c, zcontext.c, zgstate.c)
Adds support for FunctionType 0 Functions. (ifunc.h, iref.h, store.h,
zfunc.c, zfunc0.c)
Updates a few remaining pseudo-operators in gs_init.ps to take advantage of
automatic operand and dictionary stack restoration: eexec, identmatrix,
pathbbox. Not updated yet: filter. (gs_init.ps)
Interpreter (PDF)
-----------------
Fixes bugs:
- Separation color spaces weren't supported. (gs_pdf.ps,
pdf_draw.ps)
Library
-------
Fixes bugs:
- The size argument to gs_free was wrong in an out-of-memory case.
(This was irrelevant, since gs_free only uses the size argument for
error-checking during debugging.) (gdevprn.c)
- When freeing a block on the C heap, if -Z@ was set, the block's
header wasn't filled with the sentinel pattern. (Only relevant when
debugging.) (gsmemory.c)
- The C heap allocator didn't fix up pointers properly when freeing
a block, causing unpredictable memory corruption after a 'resize' call.
(gsmemory.c)
- Using a show operator inside the procedure of a cshow with a
composite font could cause an invalid access. (gschar.c)
Adds support for FunctionType 0 Functions. (gsdsrc.h, gsfunc.h, gsfunc0.h,
gxfunc.h, gsdsrc.c, gsfunc.c, gsfunc0.c)
Moves the GC descriptor for arrays of constant strings to a place where it
is more visible. (gscie.h, gsstruct.h, gscie.c, gsmemory.c)
Version 5.05(limited) (9/24/97)
===============================
This fixes a few bugs found in the first few days of testing 5.04. There
will probably be several more small incremental filesets before the next
public release.
Platforms
---------
Fixes bugs:
- The Windows code wouldn't compile with the latest MSVC++, because
Microsoft changed the prototype for fprintf. (gp_msio.c)
Drivers
-------
Fixes bugs:
- A picky compiler complained about some omitted casts. (gdevpdf.c,
gdevpdft.c)
- Writing a PDF file with any synthesized fonts could produce
slightly garbled output or possibly even an invalid memory access, because a
string was not terminated. (gdevpdft.c)
- When writing a PDF file, the first character of a string could get
placed off the page, because of a matrix bookkeeping error. (gdevpdft.c)
Interpreter
-----------
Fixes bugs:
- In case of an error, setpagedevice executed a 'stop'
unconditionally, rather than just signalling an error through the error
machinery. (gs_setpd.ps)
Interpreter (PDF)
-----------------
Fixes bugs:
- Files with unknown operators caused errors, even if the BX
operator was used to disable the error report. (pdf_base.ps)
Version 5.04(limited) (9/21/97)
===============================
This is a test fileset for an unplanned release that greatly reduces the
size of PDF files produced by the pdfwrite device, and also optionally
produces output compatible with Acrobat 2.x, in order to address problems
reported by NSF in processing these files as part of their FastLane
electronic proposal submission process. Aside from that, and some localized
bug fixes, it has minimal changes from 5.03.
Documentation
-------------
Fixes bugs:
- George Cameron's address was listed with a domain of .ukis rather
than .uk. (devices.txt)
- The default value of ORIENT1 was given as false rather than true.
(use.txt)
- The documentation for ps2pdf said one can omit the output file
name, but this is only true on Unix systems. (ps2pdf.txt)
- The documentation for ps2pdf didn't make clear that the executable
must be named gs on Microsoft OSs. (ps2pdf.txt)
- ht_cache is actually allocated with the first gstate, not on
demand. (gsstate.c)
Slightly improves the documentation of .type1execchar. (zchar1.c)
Clarifies the distinction between Ghostscript (PostScript) commands and
shell commands, for the benefit of users brainwashed by Microsoft.
(use.txt)
Improves the usage synopsis in the ps2epsi man page. (ps2epsi.1)
Adds a reference to Uli Wortmann's H-P drivers. (new-user.txt)
Improves the documentation of GS_FONTPATH, distinguishing it from GS_LIB and
the search path. (use.txt)
Notes that on some systems, one must substitute 'installbsd' for 'install'
in the makefile and make other edits. (install.txt, ansihead.mak,
cc-head.mak, gcc-head.mak)
Notes that ps2epsi is no longer maintained. (ps2epsi.ps)
Clarifies the availability of support. (new-user.txt)
Procedures
----------
Fixes bugs:
- The uniprint driver was accidentally omitted from the default
Watcom (MS-DOS) and OS/2 configurations. (watc.mak, os2.mak)
- The suggested compiler switches for Digital Unix were incorrect.
(make.txt)
- The cp.cmd script file didn't work in the newest versions of OS/2.
(cp.cmd)
- The compilation rules for some Windows-specific files didn't
include ccf32.tr in their dependencies, which could cause the compilation to
fail. (winint.mak)
Removes the lev2min configuration, since we no longer support 16-bit Windows
environments. (int.mak)
Utilities
---------
Fixes bugs:
- ps2epsi.bat always appended to the output file, rather than
writing over it. (There are probably other bugs in this script file.)
(ps2epsi.bat)
- The output of pdf2ps didn't execute properly on some printers,
especially Level 1 printers. (gs_pdf.ps)
Makes ps2pdf do an initial 'save', which causes fonts to be retained better
across pages. (ps2pdf, ps2pdf.bat)
Adds an option to pcharstr.ps to produce C-like rather than PostScript-like
output. (pcharstr.ps)
Drivers
-------
Fixes bugs:
- The LaserJet III and higher printers weren't able to print in the
narrow strip between 1/6" and 1/4" from the left edge of the page.
(gdevdjet.c)
- The PCL XL drivers produced incorrect output which often caused a
PCL XL NoCurrentFont error at the beginning of the second page. (gdevpx.c)
- The GC descriptors for the pswrite device and for PS/PDF devices
were incorrect, causing the GC to smash memory. (gdevpsdf.h, gdevps.c)
- The pdfwrite device didn't have a GC descriptor at all. ******
DISABLED because the device allocates all its temporary structures directly
on the C heap. ****** (gdevpdf.c)
- When the PDF writer wrote out the Dest key in an action
dictionary, it always used a page object instead of a page number, even if
the page was in another file or didn't exist; it now always uses a page
number. (gdevpdfm.c)
- The PDF writer gave an error if a file redefined any of the 14
known fonts. (gs_pdfwr.ps)
- The PDF writer didn't handle copy_mono with a non-zero sourcex.
(This probably had no effect in practice.) (gdevpdfi.c)
Splits off gdevpdfd.c (driver drawing procedures) from gdevpdf.c, since the
file was getting too large. (gdevpdfx.h, gdevpdf.c, gdevpdfd.c)
Adds recognition of the CompressPages, CompatibilityLevel, and
UseFlateCompression device (distiller) parameters to the PDF writer. If
CompressPages is true (default), CompatibilityLevel is 1.2 (default), and
UseFlateCompression is true (default), page contents will be compressed with
Flate ("zip") compression; otherwise, they will not be compressed.
Restructures the PDF writer to produce much smaller and faster PDF files, by
restructuring its handling of text to defer all resources to the end of the
file, eliminate duplicate Font resources, turn characters into Type 3 fonts
rather than Image XObjects, use more efficient text positioning commands,
and optionally (but by default) Flate-compress the contents streams. Also
removes some unnecessary spaces in the output. (gdevpdfx.h, gdevpdf.c,
gdevpdfd.c, gdevpdfi.c, gdevpdfm.c, gdevpdft.c)
Improves the PDF writer so that it no longer converts stroke operations with
non-uniform CTMs to fills, and doesn't bother to stroke empty paths at all.
(gdevpdfd.c)
Speeds up the "alternate" X devices substantially. (gdevxalt.c)
Interpreter
-----------
Fixes bugs:
- Filling a string with a Pattern caused a crash with the PDF
writer. (gs_pdfwr.ps)
- Converting a file with no marks at all to PDF produced invalid
output. (gdevpdf.c)
- .endpage, which is called at the end of every page, sometimes left
2 extra values on the stack. (gs_setpd.ps)
- A definefont with a Type 1 font lacking a .notdef character didn't
cause an invalidfont error. (bfont.h, zfont1.c, zfont2.c)
- On anti-aliased devices, characters from Type 1 fonts with an
incorrect or missing FontBBox came out a factor of 2 or 4 too small if the
character was small enough to cache. (zchar1.c)
- If a file redefined certain operators, loading Type 1 fonts could
fail. This problem was fixed in an earlier release, and somehow the fix got
undone. (gs_type1.ps)
- cshow didn't set the correct current font when running the
procedure, and didn't restore it properly afterwards. (zchar.c, zchar2.c)
- With certain compilers, the interpreter loop caused unaligned
memory accesses on DEC Alpha systems running Windows NT. (iref.h)
Adds freelist validation to the memory checker. (ilocate.c)
Changes the debugging switch for bypassing the garbage collector from
compile-time to run-time. (igc.c)
Adds the real operators for view clipping (but they don't do anything yet,
because view clipping isn't implemented at the library level). (zdps.c,
zvmem.c)
Completes the implementation of defineusername. (zdps.c)
Adds an implementation of wtranslation, by simply reading a device parameter
of the same name. (gs_dps.ps)
Interpreter (PDF)
-----------------
Fixes bugs:
- Lab color spaces weren't implemented, and gave an error.
(gs_pdf.ps)
- Images only worked with built-in color spaces, not color space
resources. (pdf_draw.ps)
- Embedded font subsets were treated as undefined. (pdf_font.ps)
Library
-------
Fixes bugs:
- strokepath sometimes clipped the path to the current clipping
region, which it should never do. (gxstroke.c)
- The initial X/Y position for Type 2 charstrings (CFFs) sometimes
was set incorrectly. (gstype2.c)
- Memory management for dash patterns was still incorrect (despite
the fix in 4.36), possibly causing snarled freelists and invalid memory
references. (gsline.c, gsstate.c)
- The saved gstate of a Pattern instance was freed properly when the
instance was freed by reference counting as a result of setting the color or
color space, but not when the instance was freed by reference counting
anywhere else. (gspcolor.c)
- A test for whether to use a slower form of oversampling was
incorrect. (Probably only a performance bug.) (gschar.c)
- cshow didn't set the correct current font when running the
procedure, and didn't restore it properly afterwards. (gsfont.h, gschar.c,
gsfont.c)
Improves allocator validity checking when DEBUG is set. (gsalloc.c)
Adds a couple of missing FontType values. (gxftype.h)
Changes the default conversions between CMYK and RGB colors back to the
Adobe rules documented in the Red Book, to reduce output differences from
Adobe implementations. (gxdcconv.c)
Adds a graphics state element for view clipping, under an #ifdef DPNEXT, and
implementations of the view clipping operators (but not the logic for doing
the actual clipping). (gsstate.h, gzstate.h, gsstate.c)
Removes the redundant clip_rule variable from the graphics state (which
wasn't used for anything). (gzstate.h, gspath.c)
Version 5.03 (8/8/97)
=====================
The only reason for this release is to fix two serious bugs introduced
between 5.01 and 5.02. We fixed a few other very localized and low-risk
bugs at the same time.
Documentation
-------------
Removes the "(if relevant)" from the bug reporting form, since about 25% of
the forms are submitted without a URL or any other data. (bug-form.txt)
Adds a discussion of single-use procedures to the style guide.
(c-style.txt)
Updates the information about obtaining Ghostscript on physical media.
(new-user.txt)
Updates the information about ps_view. (new-user.txt)
Procedures
----------
Adds the uniprint driver to all platforms. (*.mak)
Changes the contents of the pc.tar.gz archives:
- Adds *.upp.
- Removes *.res.
- Removes cp.bat, font2c.bat, mv.bat, rm.bat, wmakebat.bat,
cp.cmd, mv.cmd and rm.cmd, and gv-vms.hlp.
Removes an obsolete script file. (tar_mv)
Drivers
-------
Fixes bugs:
- The uniprint driver didn't handle an increase in media height
correctly. (gdevupd.c)
Platforms
---------
Fixes bugs:
- Printing to printers other than LPT1 under MS Windows no longer
worked. (bug introduced in 5.02) (gp_mswin.c)
- Drag-and-drop didn't work under Windows NT (or other 32-bit
Windows environments). (dwtext.cpp)
- Sequent systems needed an additional system header file.
(time_.h)
Fonts
-----
Fixes bugs:
- The substitutions Myriad => Times and Minion => Helvetica were
incorrect; they should be the other way around. (gs_fonts.ps)
- MyriadPkg wasn't recognized as a condensed font. (gs_fonts.ps)
- Univers wasn't recognized as mapping to Helvetica. (gs_fonts.ps)
Interpreter
-----------
Fixes bugs:
- A line of debugging code, printing the sections of 3 regions of
TrueType fonts being loaded, was accidentally left in. (gs_ttf.ps)
- TrueType fonts whose pre-glyf data had odd length were broken
(typically gave a rangecheck error), because of the fix to treat the odd
byte of individual sfnts strings as padding per Adobe documentation. (bug
introduced in 5.02) (gs_ttf.ps)
Interpreter (PDF)
-----------------
Fixes bugs:
- If a real-number token in a CFF had an even number of nibbles, a
unmatchedmark error would occur. (gs_cff.ps)
- If the strings Index in a CFF included an empty string, a
rangecheck error would occur. (gs_cff.ps)
- CFFs with non-standard Encodings that included standard strings
would get a typecheck error. (gs_cff.ps)
Library
-------
Fixes bugs:
- Using %d in an OutputFile name didn't substitute the page number.
(bug introduced in 5.02) (gsdevice.c)
- In Type 2 CharStrings, if a hintmask occurred at the beginning, it
wasn't recognized as also incorporating the function of vstemhm.
(gstype2.c)
- The data bytes for hintmask and cntrmask weren't printed for
debugging. (gstype2.c)
Version 5.02 (7/28/97)
======================
Because of an ISP failure that delayed the 5.0 announcement for 12 days, the
5.01 release only responded to a few days of bug reports; 5.02 fixes some
problems that should have been fixed in 5.01, as well as a large number of
obscure problems uncovered by Genoa testing.
Documentation
-------------
Fixes bugs:
- The documentation for building on the Intergraph Clipper was out
of date. (make.txt)
- ESC was claimed to be a self-delimiting character. (gs_init.ps)
- Removes the documentation claiming that ^D and ^Z are
self-delimiting. (language.txt)
- Document that -dSUBSTFONT doesn't create a font with the requested
font name. (use.txt)
- Ghostscript was defined as compatible with PDF 1.1 rather than PDF
1.2. (language.txt)
- The description of gcc problems on Alpha didn't make it clear that
the use of gcc was optional, not required. (make.txt)
- The description of how to use GNU make on VMS systems was
inaccurate. (make.txt)
Improves the documentation for building on H-P RISC systems. (make.txt)
Corrects the discussion of Cygnus' licensing terms for the cygwin32
environment. (make.txt)
Removes the apology for the poor quality of Ghostscript's TrueType
rasterizer, since the quality is now quite good. (fonts.txt)
Documents the fact that one must use # rather than = with Watcom C.
(use.txt)
Documents the updates and additions to the uniprint driver. (devices.txt)
Adds some material to Aladdin's C style guide. (c-style.txt)
Documents the fact that using gmake requires VMS 6.2 or later on Alphas and
7.1 (perhaps 7.0) or later on VAXen. (make.txt)
Adds an example EPS file. (psfiles.txt)
Adds some information about compiling and linking under OS/2. (make.txt)
Expands the description of XLIBDIR and XLIBDIRS. (*head.mak)
Adds a new pointer to information on using a Kanji font with Ghostscript.
(new-user.txt)
Documents the use of /Resource/<category>/<resource> as the default place
where resources are sought. (use.txt)
Updates the documentation on building with MSVC++ to reflect the makefile
changes. (make.txt)
Procedures
----------
Fixes bugs:
- In openvms.mak, several ifdef tests were wrong. (openvms.mak)
- One CP command was slightly inconsistent with the others.
(zlib.mak)
- If libz and libpng were both shared, libz was linked first,
resulting in some undefined references. (libpng.mak)
- The VMS makefile didn't interact properly with VMS's version
numbering facility. (copy_one.com)
Updates the VMS DCL script one last time, to handle libpng version 96.
(vms.mak)
Restructures the MSVC++ makefiles to allow building the graphics library
without the PostScript interpreter. (bcwin32.mak, msvc4.mak[deleted],
msvc5.mak[deleted], msvc32.mak, msvccom.mak, watcw32.mak,
wincom.mak[deleted], winint.mak, winlib.mak)
Adds a makefile to create a library-only demo program under MSVC++, like the
ones for Unix/gcc and MS-DOS/Watcom. (msvclib.mak)
Adds an example EPS file. (ridt91.eps, unix-end.mak)
Removes support for libpng release 0.88, which is now quite obsolete.
(libpng.mak)
Utilities
---------
Fixes bugs:
- ps2pdf.bat, unlike ps2pdf, didn't accept options. (ps2pdf.bat)
- echogs used 'const' in one place, which wasn't accepted by some
very old compilers. (echogs.c)
- pdf2ps output Orientation, which it shouldn't. (pdf_main.ps)
Makes the usage message from ps2pdf.bat include the options, like ps2pdf.
(ps2pdf.bat)
Changes the printpath utility so that its output is legal PostScript code.
(ppath.ps)
Makes pdf2dsc add DSC comments for the bounding box (if a CropBox is
available in the PDF file) and the orientation. (pdf2dsc.ps)
Drivers
-------
Fixes bugs:
- The get_bits operation wasn't implemented for the vgalib driver.
(gdevvglb.c)
- The dnj650c driver output an extra % near the end of the file.
(gdevcdj.c)
- The definition of pprintd2 didn't have a line break before the
procedure name, confusing ansi2knr. (gdevpstr.c)
- EPS files produced invalid PDF output. (gdevpdf.c)
- "Vector" output devices didn't recognize %d in output file names,
or - for output to stdout. (gdevprn.h, gxdevice.h, gdevprn.c, gdevvec.c,
gsdevice.c)
- With the pdfwrite driver, restore or grestore would cause a
rangecheck error in .installpagedevice if a setpagedevice had been executed.
(gdevpdfp.c)
- The pdfwrite driver produced garbage output for text rotated by
angles that were only infinitesimally different from multiples of 90
degrees. (gdevpdft.c)
- The pnm[raw] driver didn't handle anti-aliasing properly.
(gdevpbm.c)
- The PDF writer didn't scale the parameters for [a][width]show
correctly. (gs_pdfwr.ps, gdevpdft.c)
Fixes some minor compilation warnings not affecting code functionality.
(gdevbbox.c, gdevpdfm.c, gshtscr.c, gsmemory.c, gxccman.c, gxfill.c,
gximage0.c)
Fixes some bugs in the uniprint driver and adds some more printer models.
(gdevupd.c, bjc610a*.upp, bjc610b*.upp, necp2x6.upp, stc1520h.upp)
Makes a small change for clean compilation on BeOS. (gdevcdj.c)
Updates the PNG driver to use updated API calls for allocating/initializing
and freeing the PNG structures. (gdevpng.c)
Platforms
---------
Refactors the MS Windows code to allow building the library without the
interpreter. (gs_msio.c, gs_mslib.c, gp_mswin.c)
Fonts
-----
Fixes bugs:
- definefont was executed twice on TrueType fonts. (No bad
consequences, just unnecessary work.) (gs_ttf.ps)
Interpreter
-----------
Fixes bugs:
- The fix for the 'stopped' around run_string_* in 5.01 was made
incorrectly. (gs_init.ps)
- Many operators that expect a matrix operand didn't accept packed
arrays. (iutil.c)
- The default CRD didn't have an explicit BlackPoint, which some
Genoa tests require. (gs_lev2.ps)
- A stack protection fix caused setscreen and setcolorscreen with
dictionary operands to give a typecheck. (gs_dps2.ps)
- Executing a string didn't handle tail recursion properly if the
last token was followed by a single whitespace character. (interp.c)
- Clearing the error indication didn't set errorname to null.
(gs_init.ps)
- Some unexpected items appeared on the execution stack, confusing
some of the Genoa tests. (gs_init.ps, istack.h, istack.c, zcontrol.c)
- The dummy definitions for setucacheparams/ucachestatus didn't look
enough like the real ones. (gs_dps2.ps)
- Insideness tests didn't work, because the hit detection device
width and height weren't set up. (zupath.c)
- defineuserobject didn't use the same algorithm for growing the
array as Adobe interpreters. (gs_dps2.ps)
- eq and ne didn't work correctly on save objects. (iutil.c)
- findfont used =string internally, interfering with PostScript
programs that also used it. (gs_fonts.ps)
- cshow didn't set up scaled versions of base fonts as the current
font. (zchar2.c)
- defineresource didn't make the resource value read-only.
(gs_res.ps)
- If inustroke got an error, it could return without an error
indication and without changing the stack. (zupath.c)
- The arrays returned by different invocations of currentcolorspace
with the same device color space weren't guaranteed to be eq. (gs_lev2.ps)
- Out-of-range integers followed by a '.' were converted to names
rather than reals. (iscan.c, iscannum.c)
- resourceforall caused an invalidaccess error if currentglobal was
true but the procedure, template, or scratch string was in local VM.
(gs_res.ps)
- In many places, integer values were converted to floats rather
than doubles, losing precision. (ichar.h, icharout.h, ifont.h, iutil.h,
idparam.c, iparam.c, iutil.c, zchar.c, zchar1.c, zchar42.c, zcharout.c,
zcie.c, zcolor.c, zcolor1.c, zcolor2.c, zcontrol.c, zcsindex.c, zcssepr.c,
zdpnext.c, zdps1.c, zfont.c, zfont2.c, zgstate.c, zhsb.c, zht.c, zmath.c,
zmatrix.c, zmedia2.c, zpath.c, zpath1.c, zupath.c)
- The TransformPQR procedure in the default CRD didn't pop its
auxiliary operands from the stack. (gs_lev2.ps)
- Because of an incorrect stack depth check, setcolorrendering
sometimes produced a stackunderflow. (zcrd.c)
- sethalftone caused an invalidaccess error if the HalfTone type was
not 5, the dictionary was in local VM, and the current VM was global.
(gs_dps2.ps)
- writeobject and printobject caused an invalidaccess error if the
object being written was in local VM and the current VM was global.
(gs_btokn.ps)
- ustrokepath appended the strokepath segments to the current path,
rather than replacing the path. (zupath.c)
- restore incorrectly purged from the character cache any characters
in a font being freed, even if the font had a UID. (zfont.c)
- The definition of zimage_opaque_setup confused ansi2knr.
(zimage.c)
- Type 42 fonts that included the padding byte in each sfnts string
didn't work if sfnts had more than one string. (zfont42.c)
- Doing a garbage collection at the same time as handling a
stackoverflow failed to update the object that needed re-execution, causing
the interpreter to execute random data. (interp.c)
- %stdout and %stderr weren't flushed if they were closed
explicitly. (ziodev.c)
For greater Adobe compatibility:
- Changes setdash to limit dash patterns to 11 elements. (This is
enforced at the PostScript level: the graphics library doesn't have a
limit.) (gs_init.ps)
- Changes ^D and ^Z so they are not self-delimiting characters, and
changes ^K so it is not a whitespace character. (gs_init.ps, iscan.c,
scantab.c)
- Makes = cause an error on non-read-accessible objects rather than
printing them as --nostringval--. (gs_init.ps)
- When -dSUBSTFONT= is used, makes findfont return the actual named
font, rather than a copy with the FontName changed to the requested one.
(gs_fonts.ps)
- CFF fonts with a non-default FontMatrix caused an error.
(gs_cff.ps)
Fixes some minor compilation warnings not affecting code functionality.
(iparam.c, zfcmap.c)
Strengthens the test of o-stack validity in the main interpreter loop in
debug mode. (interp.c)
Changes the filling rule for Type 1 fonts from winding-number to even-odd.
This affects no properly designed fonts, and seems to match Adobe
interpreters better. (zchar1.c)
Implements non-standard Encodings in CFF fonts. (gs_cff.ps)
Changes the default halftone screen for 600 dpi printers from 85 to 106 lpi,
which reduces the number of halftone levels from 50 to 32 but produces
visually better output. (gs_init.ps)
Interpreter (PDF)
-----------------
Fixes bugs:
- Pattern color spaces weren't supported. (gs_pdf.ps, pdf_draw.ps)
Causes references to undefined named Destinations to be ignored rather than
giving an error. (pdf_main.ps)
Library
-------
Fixes bugs:
- A 'const' was omitted in a declaration, upsetting several
compilers. (gxclread.c)
- arct and arcto gave an error for negative radii. (gspath1.c)
- The collinearity check for arct[o] could cause some arcs to be
rendered as single points. (gspath1.c)
- Uncolored patterns sometimes came out blank, because the color
wasn't set before calling the PaintProc. (gspcolor.c)
- The phase for masking colored patterns was wrong, producing
incorrect output. (gspcolor.c)
- reversepath always appended the current position to the new path,
rather than only doing so if the path just consisted of a single moveto.
(gxpath2.c)
- cshow didn't restore the current font properly. (gschar.h,
gschar.c)
- The check for whether characters can be cached didn't consider
PaintType values other than 0 and 2. (gschar.c)
- The bounding box device didn't handle PageCount properly.
(gdevbbox.c)
- Uncached fonts with a next_char procedure didn't set the glyph
properly. (gschar.c)
- Parallelograms with ax < bx, ay < by, and the 'a' edge to the
right of the 'b' edge weren't filled, causing pixels to be omitted from some
highly skewed images. (gdevddrw.c)
- 12-bit-per-pixel images in portrait orientation filled each scan
line with the value of the last pixel -- i.e., didn't work. (gximage4.c)
- The path representation of a clipping path could include some
inappropriate, leftover path segments. (gxcpath.c)
- The angle for the miter check was computed in device space rather
than in user space. (gxstroke.c)
- TrueType fonts were lumpy, and the accents of accented characters
were placed incorrectly. (gstype42.c)
- Some macros used for generating device prototypes didn't
parenthesize all uses of their parameters, causing possible errors if the
parameters were expressions rather than numeric constants. (gdevprn.h)
- When banding, strip halftones (typically produced by
AccurateScreens) sometimes didn't have the correct phase. (gxbitmap.h,
gxclread.c)
- A minor change was required for correct compilation with Microsoft
VC++. (memory_.h)
- Under certain conditions, character shapes could get wildly
distorted by hints. (bug introduced in 5.01) (gxhint3.c)
For greater Adobe compatibility:
- Changes reversepath so that the implicit line created by closepath
is not considered a "segment". (gxpath2.c)
Fixes some minor compilation warnings not affecting code functionality.
(gstype1.c)
Changes the font and scaled-font caches so that if the font has a UID
(UniqueID or XUID), the UID and FontType are both considered part of the
key, and we don't cache fonts with non-zero PaintType. (The Red Book says
that changing anything except the Encoding should also change or remove the
UID, but some files don't do this. The current fix is probably not
sufficient, but it is a step in the right direction.) (gxfcache.h,
gxccache.c, gxccman.c)
Splits off the definitions of font_type and fbit_type into a separate file,
since gxfcache.h now needs font_type. (gxfcache.h, gxfont.h, gxftype.h)
Makes the Flex feature in Type 1 fonts conform to the published
specification, rather than always producing curves. The comment in the code
(and in the NEWS entry for release 2.6) says that this breaks some very old
Adobe fonts: if this turns out to be a problem, we'll figure out a test that
will do the right thing for these fonts. (gstype1.c)
Provides 'double' versions of some API functions to accommodate the
increased use of doubles in the interpreter. (gschar.h, gschar.c)
Adds a compile-time option to force the use of strip halftones, for
debugging. (gshtscr.c)
Changes the hint snapping algorithm in the Type 1 rasterizer so that it will
only change a stem width by a maximum of 1/2 pixel rather than 1 pixel.
This appears to help with dropouts at certain sizes. (gxhint2.c)
Makes a few changes for clean compilation on BeOS. (stdpre.h, stat_.h,
gxcpath.c)
Version 5.01 (6/22/97)
======================
This fixes a few bugs reported in the 5.0 release. This will be a
commercially supported release.
Documentation
-------------
Fixes bugs:
- README referred to an obsolete file devarch.txt. (README)
- The comment on flip4x12 had a typo. (gsflip.c)
- The algorithm comments for adjusted_y_spans_pixel weren't precise
enough. (gxfill.c)
- The usage message printed by the ps2pdf script didn't indicate
that one can now insert options before the input file name. (ps2pdf)
- The file searching documentation didn't indicate that paths
beginning with ./ or ../ are considered "explicit" and not subject to
searching. (use.txt)
- The description of SEARCH_HERE_FIRST in the per-platform makefiles
indicated that it only applied to initialization files, not to files
specified on the command line as well. (*.mak)
- There were still some references to 16-bit implementations.
(install.txt)
Clarifies that -dNODISPLAY also suppresses output to other devices.
(use.txt)
Adds the e-mail address for reporting problems to the bug report form, and
also a space to report makefile changes. (bug-form.txt)
Adds a note under -g indicating that it fixes the media size. (use.txt)
Adds an explanation of why Ghostscript can't use the system libraries for
the JPEG package. (make.txt)
Notes that ps2ai doesn't work properly with Adobe's Helvetica-Oblique font,
and other fonts whose original FontMatrix involves skewing or rotation.
(psfiles.txt)
Updates the uniprint documentation slightly. (devices.txt)
Notes that the new lj5 drivers do not work with the LJ5L. (devs.mak)
Modifies the Aladdin Free Public License slightly to make it clearer that
the exception for freely redistributable CD-ROMs only applies if the CD-ROM
is being distributed by itself, not with anything else commercial. (This
has always been the case, but the previous wording wasn't clear enough.)
(PUBLIC)
Notes that gcc with -O still has code generation problems on H-P RISC
machines. (make.txt)
Adds a pointer to Martin Lottermoser's hpdj driver. (new-user.txt)
Enhances and reorganizes the documentation for building Ghostscript, in
response to user feedback. (make.txt, install.txt)
Adds a description of the EPSF recognition feature. (language.txt)
Procedures
----------
Fixes bugs:
- string__h was misspelled string_h in one place. (lib.mak)
- gs_dps.ps wasn't installed by "make install". (unix-end.mak)
- ccgs (used with non-ANSI C compilers) didn't do the right thing
with -DPNG_USE_CONST. (ccgs)
Adds support for version 96 of libpng, and updates all the makefiles to
reference it. (libpng.mak, *.mak)
Updates the MSVC makefiles to get rid of some warning messages and provide a
way to specify a library path for the final link. (msvc*.mak)
Utilities
---------
Fixes bugs:
- The usage message for the gslp utility had a minor typo.
(gslp.ps)
- The "line printer" utility didn't expand tabs properly when
producing PostScript output. (gslp.ps)
- The gslp utility didn't automatically include the date. (gslp)
- The line printer scripts didn't pass the script name to the
utility program, so the usage message didn't use the correct name. (gsbj*,
gsdj*, gslj*, gslp*, lp*)
Modifies the gslp utility so that invoking it with no arguments prints the
usage message. (gslp.ps)
Adds the ability to specify the number of bits per component to the
CMYK-viewing utility. (viewcmyk.ps)
Changes the ps2pdf script so that on Windows NT, as on Unix, it allows
omitting the output file name, automatically replacing the extension of the
input file with .pdf. (ps2pdf.bat)
Drivers
-------
Fixes bugs:
- Some compilers didn't accept a #define with the macro name on the
next line. (gdevpx.c)
- The procedure dash_pattern_eq was defined in two places.
(gdevpdf.c)
- The uniprint driver sometimes dropped some output or got confused,
because of a misunderstanding about how to update device procedure vectors
properly. (gdevupd.c)
- The PostScript and EPS writers produced binary output for images,
which generally can't be sent to PostScript printers. (gdevpsdf.h,
gdevpdf.c, gdevps.c)
- The EPS writer put a %%EOF at the end of the file, which might
cause problems for some spoolers if the file is embedded in another.
(gdevps.c)
Changes the implementation of printer drivers so that they flush the output
stream after each page. We aren't absolutely sure that this is a good idea,
but it prevents certain anomalous behavior where the last page isn't ejected
properly. (gdevprn.c)
Implements a long-delayed update to the mgr drivers, to restore the color
mapping to an older one. (gdevmgr.h, gdevmgr.c)
Updates the uniprint driver with a number of changes from its author.
(gdevupd.c)
Platforms
---------
Adds the JPEG, Postscript, and PCL XL drivers, which are included on all
other platforms, to the MS Windows platforms. (bcwin32.mak, msvc4.mak,
msvc5.mak, watcw32.mak)
Interpreter
-----------
Fixes bugs:
- composefont defined the resource with the font name and font
directory interchanged. (gs_cmap.ps)
- With dFIXEDMEDIA, documents requesting other sizes caused an error
instead of clipping the page. (gs_init.ps)
- PageSize Policy = 7 wasn't implemented. (However, the current
implementation is wrong.) (gs_setpd.ps, zmedia2.c)
- FontType resource 42 wasn't defined even if Type 42 fonts were
supported; similarly for FontType 9, 10, and 11 for CIDFonts. (gs_cidfn.ps,
gs_res.ps)
- The error handling machinery would break if the name /errordict
was redefined. (gs_init.ps)
- Level 1 systems got an /undefined in .doneshowpage. (zdevice.c,
zdevice2.c)
- Because of an initialization order problem, copy didn't work on
gstates. (zgeneric.c)
Adds a naive implementation of findcolorrendering. (gs_lev2.ps, gs_res.ps)
Removes the 'stopped' around run_string[_begin/continue/end] so that, as in
4.03, errors print a hex dump and exit with a non-zero code instead of
printing a readable message and continuing. (We aren't sure that this
change didn't undo the fix in 5.0 regarding calling startjob from
run_string.) (gs_init.ps)
Interpreter (PDF)
-----------------
Fixes bugs:
- stdin redirection failed for PDF files even if the new stdin was
seekable. This was fixed in 4.02, but the fix stopped working with the
introduction of .runexec. (pdf_main.ps)
Makes the cross-reference reader accept a startxref value that points at the
EOL before the xref line. The Adobe documentation doesn't allow this, but
some real files are this way. (pdf_main.ps)
Library
-------
Fixes bugs:
- The bounding box of a completely empty path was reported as
garbage. (gxpath2.c)
- Stroking a path with more than one segment didn't produce correct
output when anti-aliasing was used. (gspaint.c)
- The alpha-buffer device returned an incorrect clipping box,
causing output to be discarded. (gdevabuf.c)
- gx_forward_get_clipping_box passed the wrong device to the target
procedure, producing incorrect results. (gdevnfwd.c)
- The sin/cos procedure did some unnecessary computations
(performance bug only). (gsmisc.c)
- The procedure for adjusting the ends of curves to match the
tangents did some unnecessary computations (performance bug only).
(gxpcopy.c)
- RAM-based banding always gave an invalidfileaccess error, due to a
typo in memfile_fopen. (gxclmem.c)
- The algorithms for deciding whether a line is thin still weren't
correct. (gxstroke.c)
- The fill adjustment values for the any-part-of-pixel case (adjust
= 0.5) were (0.5-epsilon, 0.5+epsilon), which colored inappropriate
additional pixels if the higher coordinate was integral. With considerable
trepidation, we have changed this to (0.5-epsilon,0.5), which does the right
thing in every case we can think of. (gxfill.c)
- When banding, paths were clipped to only 0.5 pixel outside their
bounding box, which may be slightly too conservative; 1 pixel is safer.
(gxclpath.c)
- The algorithm for testing whether an adjusted Y value spanned a
pixel center was incorrect, causing some pixels to get colored incorrectly.
(gxfill.c)
- 24-bit devices could cause a memory fault, by accessing a pointer
just beyond the end of the line pointer array. (gdevm24.c)
- Astonishingly enough, the determination of which hints were
applicable to a given segment of a Type 1 character was wrong in several
different places. Fixing this in a way that correctly handled all allowed
permutations of the coordinate system was not simple. (gxfont1.h,
gxhint1.c, gxhint3.c)
- The debugging printout macros didn't include the syntactic hack to
prevent an 'else' from begin assigned to the wrong 'if'. (gdebug.h)
- The bbox device was accidentally limited to 130 x 130 pixels (not
130" x 130"). (bug introduced in 5.0) (gdevbbox.c)
- The bbox device didn't recognize PageBoundingBox in put_params,
causing a possible /undefined error on [g]restore. (gdevbbox.c)
- setlinewidth didn't take the absolute value of its operand.
(zgstate.c)
- Some code formatting was slightly off. (gximage5.c)
- Some extra pixels were written for Interpolated images, but they
were immediately overwritten, so the output was correct. (gximage5.c)
Changes the data flipping API from a macro to a procedure, adds a return
value, and makes the individual flipping procedures private. (gsflip.h,
gsflip.c)
Adds (under an #ifdef FUTURE) code to allow passing multi-plane images
through the band list. (gxclpath.h, gxclimag.c, gxclread.c)
Adds (under an #ifdef FUTURE) code to allow passing interpolated images
through the band list. NOTE: interpolated images will appear slightly
different than without banding, because the part of the image intersecting
each band will be scaled slightly differently in the (device) Y direction.
(gxclpath.h, gxclimag.c, gxclread.c, gximage.c)
Changes Type 1 hinting so that when it moves points on a curve, it does so
by properly scaling the curve in the given direction. (gxhint3.c)
Version 5.0 (6/6/97)
====================
This is the first public release since 4.03.
Documentation
-------------
Fixes bugs:
- Fontmap.Sol was incorrectly referred to as Fontmap.Solaris.
(use.txt)
- There was still a reference to pstoppm in the documentation.
(psfiles.txt)
- The JPEG DOS source site information was out of date. (jpeg.mak)
- The list of devices included in the distributed Unix makefiles was
out of date. (make.txt)
- The MCU size limitation on the DCT filters was documented
incorrectly. (current.txt)
- The URL for the uniprint driver home page was incorrect.
(devices.txt)
- The makefiles referred to sfilefd.c, which is now named sfxfd.c.
(gs.mak, *.mak)
Adds a VMS help file. (gs-vms.hlp)
Removes documentation for Digital Unix (OSF/1) 1.2 and 1.3, which are now
long obsolete, and updates the documentation for current versions.
(make.txt)
Notes that there may be a problem with libpng version 0.95. (libpng.mak)
Adds some specific documentation for the JPEG drivers. (devices.txt)
Adds a suggestion that people compiling Ghostscript check the values of
JVERSION and PVERSION. (make.txt)
Removes the requirement for setting the LIB environment variable when
compiling with MSVC. (make.txt)
Procedures
----------
Fixes bugs:
- There were a number of small errors in the new OpenVMS makefile.
(openvms.mak)
- The MSVC makefiles omitted a necessary switch to work around some
"unspecified Pentium bugs". (msvccom.mak)
- The Borland makefile wasn't even close to working; fixing it
required moving the compilation rule for genarch.exe into the
compiler-specific makefiles. (bcwin32.mak, msvccom.mak, watcw32.mak,
wincom.mak)
- There were some (harmless) undefined macro references in the MSVC
makefile. (msvccom.mak)
Makes it unnecessary to set the LIB environment variable for MSVC.
(msvc4.mak, msvc5.mak, wincom.mak)
Adds a note on compiling with the cygwin32 gcc compiler for Windows NT.
(make.txt)
Updates vms.mak yet again, hopefully for the last time. (vms.mak)
Moves the CGM, JPEG, and MIFF file formats from DEVICE_DEVS8 to
DEVICE_DEVS14 to shorten command lines; adds pcxcmyk to all platforms that
include PCX format at all; adds jpeggray to all platforms that include jpeg.
(devs.mak, *.mak)
Adds -DPNG_USE_CONST for compiling libpng, to get rid of compiler warning
messages. (gs.mak)
Removes obsolete makefiles from the fileset. (tccommon.mak, tctail.mak)
Interpreter
-----------
Fixes bugs:
- restore was broken if -dNOBIND was invoked. This fix should have
been in the 4.81 fileset, but was left out due to operator error.
(gs_dps1.ps)
- Some compilers complained about macro argument replacement within
a string literal. (isave.c)
-dSAFER didn't allow opening the %stdxxx files, which caused the
combination of -dSAFER and -dNOBIND to cause an infinite error.
(gs_init.ps)
- If C code used run_string to execute a startjob, an error
occurred. (gs_init.ps)
Library
-------
Fixes bugs:
- Some compilers complained about macro argument replacement within
a string literal. (gxclbits.c, gdevpdfi.c)
- At certain resolutions, a 1-pixel line of the wrong color could
appear at one edge of landscape-oriented monobit images. (This is the 4th
or 5th time we have "fixed" this one infuriatingly fragile piece of code.)
(gxfixed.h, gximage1.c)
- The optimized code for landscape monobit images overlooked the
possibility of partial images, causing parts of images to be translated and
possibly clipped. (Yes, it's that same fragile piece of code.)
(gximage1.c)
- The bounding box device allowed resetting its resolution, which
could cause limitchecks from coordinate overflow. Our fix is to initialize
the device to a very high resolution (4000 dpi), which reduces the maximum
page size it can handle to about 130" on a side. (gdevbbox.c)
- The bounding box device wasn't identified as a page device.
(gdevbbox.c)
- The bounding box device used alone disregarded changes in page
size. (gdevbbox.c)
- One old compiler didn't allow a structure member name to be the
same as a typedef name. (gximage.h, gximage.c, gximage4.c)
- The height and band intersection computations for banded images
still weren't right, leading to inconsistencies in the band list and errors
in the output (typically, thin horizontal white stripes at band boundaries).
(gxclimag.c)
Adds an extensive memory dump facility to the standard allocator.
Eventually this should be moved into a separate file, but it would be too
disruptive to do this just before a release. (gsalloc.c)
Versions before 5.0
===================
See the files history1.txt through history4.txt.
|