aboutsummaryrefslogtreecommitdiff
path: root/doc/newsfile
blob: 51a19e99e038dec2454b283c24e94d4ce401fa26 (plain) (blame)
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
5291
5292
5293
5294
5295
5296
5297
5298
5299
5300
5301
5302
5303
5304
5305
5306
5307
5308
5309
5310
5311
5312
5313
5314
5315
5316
5317
5318
5319
5320
5321
5322
5323
5324
5325
5326
5327
5328
5329
5330
5331
5332
5333
5334
5335
5336
5337
5338
5339
5340
5341
5342
5343
5344
5345
5346
5347
5348
5349
5350
5351
5352
5353
5354
5355
5356
5357
5358
5359
5360
5361
5362
5363
5364
5365
5366
5367
5368
5369
5370
5371
5372
5373
5374
5375
5376
5377
5378
5379
5380
5381
5382
5383
5384
5385
5386
5387
5388
5389
5390
5391
5392
5393
5394
5395
5396
5397
5398
5399
5400
5401
5402
5403
5404
5405
5406
5407
5408
5409
5410
5411
5412
5413
5414
5415
5416
5417
5418
5419
5420
5421
5422
5423
5424
5425
5426
5427
5428
5429
5430
5431
5432
5433
5434
5435
5436
5437
5438
5439
5440
5441
5442
5443
5444
5445
5446
5447
5448
5449
5450
5451
5452
5453
5454
5455
5456
5457
5458
5459
5460
5461
5462
5463
5464
5465
5466
5467
5468
5469
5470
5471
5472
5473
5474
5475
5476
5477
5478
5479
5480
5481
5482
5483
5484
5485
5486
5487
5488
5489
5490
5491
5492
5493
5494
5495
5496
5497
5498
5499
5500
5501
5502
5503
5504
5505
5506
5507
5508
5509
5510
5511
5512
5513
5514
5515
5516
5517
5518
5519
5520
5521
5522
5523
5524
5525
5526
5527
5528
5529
5530
5531
5532
5533
5534
5535
5536
5537
5538
5539
5540
5541
5542
5543
5544
5545
5546
5547
5548
5549
5550
5551
5552
5553
5554
5555
5556
5557
5558
5559
5560
5561
5562
5563
5564
5565
5566
5567
5568
5569
5570
5571
5572
5573
5574
5575
5576
5577
5578
5579
5580
5581
5582
5583
5584
5585
5586
5587
5588
5589
5590
5591
5592
5593
5594
5595
5596
5597
5598
5599
5600
5601
5602
5603
5604
5605
5606
5607
5608
5609
5610
5611
5612
5613
5614
5615
5616
5617
5618
5619
5620
5621
5622
5623
5624
5625
5626
5627
5628
5629
5630
5631
5632
5633
5634
5635
5636
5637
5638
5639
5640
5641
5642
5643
5644
5645
5646
5647
5648
5649
5650
5651
5652
5653
5654
5655
5656
5657
5658
5659
5660
5661
5662
5663
5664
5665
5666
5667
5668
5669
5670
5671
5672
5673
5674
5675
5676
5677
5678
5679
5680
5681
5682
5683
5684
5685
5686
5687
5688
5689
5690
5691
5692
5693
5694
5695
5696
5697
5698
5699
5700
5701
5702
5703
5704
5705
5706
5707
5708
5709
5710
5711
5712
5713
5714
5715
5716
5717
5718
5719
5720
5721
5722
5723
5724
5725
5726
5727
5728
5729
5730
5731
5732
5733
5734
5735
5736
5737
5738
5739
5740
5741
5742
5743
5744
5745
5746
5747
5748
5749
5750
5751
5752
5753
5754
5755
5756
5757
5758
5759
5760
5761
5762
5763
5764
5765
5766
5767
5768
5769
5770
5771
5772
5773
5774
5775
5776
5777
5778
5779
5780
5781
5782
5783
5784
5785
5786
5787
5788
5789
5790
5791
5792
5793
5794
5795
5796
5797
5798
5799
5800
5801
5802
5803
5804
5805
5806
5807
5808
5809
5810
5811
5812
5813
5814
5815
5816
5817
5818
5819
5820
5821
5822
5823
5824
5825
5826
5827
5828
5829
5830
5831
5832
5833
5834
5835
5836
5837
5838
5839
5840
5841
5842
5843
5844
5845
5846
5847
5848
5849
5850
5851
5852
5853
5854
5855
5856
5857
5858
5859
5860
5861
5862
5863
5864
5865
5866
5867
5868
5869
5870
5871
5872
5873
5874
5875
5876
5877
5878
5879
5880
5881
5882
5883
5884
5885
5886
5887
5888
5889
5890
5891
5892
5893
5894
5895
5896
5897
5898
5899
5900
5901
5902
5903
5904
5905
5906
5907
5908
5909
5910
5911
5912
5913
5914
5915
5916
5917
5918
5919
5920
5921
5922
5923
5924
5925
5926
5927
5928
5929
5930
5931
5932
5933
5934
5935
5936
5937
5938
5939
5940
5941
5942
5943
5944
5945
5946
5947
5948
5949
5950
5951
5952
5953
5954
5955
5956
5957
5958
5959
5960
5961
5962
5963
5964
5965
5966
5967
5968
5969
5970
5971
5972
5973
5974
5975
5976
5977
5978
5979
5980
5981
5982
5983
5984
5985
5986
5987
5988
5989
5990
5991
5992
5993
5994
5995
5996
5997
5998
5999
6000
6001
6002
6003
6004
6005
6006
6007
6008
6009
6010
6011
6012
6013
6014
6015
6016
6017
6018
6019
6020
6021
6022
6023
6024
6025
6026
6027
6028
6029
6030
6031
6032
6033
6034
6035
6036
6037
6038
6039
6040
6041
6042
6043
6044
6045
6046
6047
6048
6049
6050
6051
6052
6053
6054
6055
6056
6057
6058
6059
6060
6061
6062
6063
6064
6065
6066
6067
6068
6069
6070
6071
6072
6073
6074
6075
6076
6077
6078
6079
6080
6081
6082
6083
6084
6085
6086
6087
6088
6089
6090
6091
6092
6093
6094
6095
6096
6097
6098
6099
6100
6101
6102
6103
6104
6105
6106
6107
6108
6109
6110
6111
6112
6113
6114
6115
6116
6117
6118
6119
6120
6121
6122
6123
6124
6125
6126
6127
6128
6129
6130
6131
6132
6133
6134
6135
6136
6137
6138
6139
6140
6141
6142
6143
6144
6145
6146
6147
6148
6149
6150
6151
6152
6153
6154
6155
6156
6157
6158
6159
6160
6161
6162
6163
6164
6165
6166
6167
6168
6169
6170
6171
6172
6173
6174
6175
6176
6177
6178
6179
6180
6181
6182
6183
6184
6185
6186
6187
6188
6189
6190
6191
6192
6193
6194
6195
6196
6197
6198
6199
6200
6201
6202
6203
6204
6205
6206
6207
6208
6209
6210
6211
6212
6213
6214
6215
6216
6217
6218
6219
6220
6221
6222
6223
6224
6225
6226
6227
6228
6229
6230
6231
6232
6233
6234
6235
6236
6237
6238
6239
6240
6241
6242
6243
6244
6245
6246
6247
6248
6249
6250
6251
6252
6253
6254
6255
6256
6257
6258
6259
6260
6261
6262
6263
6264
6265
6266
6267
6268
6269
6270
6271
6272
6273
6274
6275
6276
6277
6278
6279
6280
6281
6282
6283
6284
6285
6286
6287
6288
6289
6290
6291
6292
6293
6294
6295
6296
6297
6298
6299
6300
6301
6302
6303
6304
6305
6306
6307
6308
6309
6310
6311
6312
6313
6314
6315
6316
6317
6318
6319
6320
6321
6322
6323
6324
6325
6326
6327
6328
6329
6330
6331
6332
6333
6334
6335
6336
6337
6338
6339
6340
6341
6342
6343
6344
6345
6346
6347
6348
6349
6350
6351
6352
6353
6354
6355
6356
6357
6358
6359
6360
6361
6362
6363
6364
6365
6366
6367
6368
6369
6370
6371
6372
6373
6374
6375
6376
6377
6378
6379
6380
6381
6382
6383
6384
6385
6386
6387
6388
6389
6390
6391
6392
6393
6394
6395
6396
6397
6398
6399
6400
6401
6402
6403
6404
6405
6406
6407
6408
6409
6410
6411
6412
6413
6414
6415
6416
6417
6418
6419
6420
6421
6422
6423
6424
6425
6426
6427
6428
6429
6430
6431
6432
6433
6434
6435
6436
6437
6438
6439
6440
6441
6442
6443
6444
6445
6446
6447
6448
6449
6450
6451
6452
6453
6454
6455
6456
6457
6458
6459
6460
6461
6462
6463
6464
6465
6466
6467
6468
6469
6470
6471
6472
6473
6474
6475
6476
6477
6478
6479
6480
6481
6482
6483
6484
6485
6486
6487
6488
6489
6490
6491
6492
6493
6494
6495
6496
6497
6498
6499
6500
6501
6502
6503
6504
6505
6506
6507
6508
6509
6510
6511
6512
6513
6514
6515
6516
6517
6518
6519
6520
6521
6522
6523
6524
6525
6526
6527
6528
6529
6530
6531
6532
6533
6534
6535
6536
6537
6538
6539
6540
6541
6542
6543
6544
6545
6546
6547
6548
6549
6550
6551
6552
6553
6554
6555
6556
6557
6558
6559
6560
6561
6562
6563
6564
6565
6566
6567
6568
6569
6570
6571
6572
6573
6574
6575
6576
6577
6578
6579
6580
6581
6582
6583
6584
6585
6586
6587
6588
6589
6590
6591
6592
6593
6594
6595
6596
6597
6598
6599
6600
6601
6602
6603
6604
6605
6606
6607
6608
6609
6610
6611
6612
6613
6614
6615
6616
6617
6618
6619
6620
6621
6622
6623
6624
6625
6626
6627
6628
6629
6630
6631
6632
6633
6634
6635
6636
6637
6638
6639
6640
6641
6642
6643
6644
6645
6646
6647
6648
6649
6650
6651
6652
6653
6654
6655
6656
6657
6658
6659
6660
6661
6662
6663
6664
6665
6666
6667
6668
6669
6670
6671
6672
6673
6674
6675
6676
6677
6678
6679
6680
6681
6682
6683
6684
6685
6686
6687
6688
6689
6690
6691
6692
6693
6694
6695
6696
6697
6698
6699
6700
6701
6702
6703
6704
6705
6706
6707
6708
6709
6710
6711
6712
6713
6714
6715
6716
6717
6718
6719
6720
6721
6722
6723
6724
6725
6726
6727
6728
6729
6730
6731
6732
6733
6734
6735
6736
6737
6738
6739
6740
6741
6742
6743
6744
6745
6746
6747
6748
6749
6750
6751
6752
6753
6754
6755
6756
6757
6758
6759
6760
6761
6762
6763
6764
6765
6766
6767
6768
6769
6770
6771
6772
6773
6774
6775
6776
6777
6778
6779
6780
6781
6782
6783
6784
6785
6786
6787
6788
6789
6790
6791
6792
6793
6794
6795
6796
6797
6798
6799
6800
6801
6802
6803
6804
6805
6806
6807
6808
6809
6810
6811
6812
6813
6814
6815
6816
6817
6818
6819
6820
6821
6822
6823
6824
6825
6826
6827
6828
6829
6830
6831
6832
6833
6834
6835
6836
6837
6838
6839
6840
6841
6842
6843
6844
6845
6846
6847
6848
6849
6850
6851
6852
6853
6854
6855
6856
6857
6858
6859
6860
6861
6862
6863
6864
6865
6866
6867
6868
6869
6870
6871
6872
6873
6874
6875
6876
6877
6878
6879
6880
6881
6882
6883
6884
6885
6886
6887
6888
6889
6890
6891
6892
6893
6894
6895
6896
6897
6898
6899
6900
6901
6902
6903
6904
6905
6906
6907
6908
6909
6910
6911
6912
6913
6914
6915
6916
6917
6918
6919
6920
6921
6922
6923
6924
6925
6926
6927
6928
6929
6930
6931
6932
6933
6934
6935
6936
6937
6938
6939
6940
6941
6942
6943
6944
6945
6946
6947
6948
6949
6950
6951
6952
6953
6954
6955
6956
6957
6958
6959
6960
6961
6962
6963
6964
6965
6966
6967
6968
6969
6970
6971
6972
6973
6974
6975
6976
6977
6978
6979
6980
6981
6982
6983
6984
6985
6986
6987
6988
6989
6990
6991
6992
6993
6994
6995
6996
6997
6998
6999
7000
7001
7002
7003
7004
7005
7006
7007
7008
7009
7010
7011
7012
7013
7014
7015
7016
7017
7018
7019
7020
7021
7022
7023
7024
7025
7026
7027
7028
7029
7030
7031
7032
7033
7034
7035
7036
7037
7038
7039
7040
7041
7042
7043
7044
7045
7046
7047
7048
7049
7050
7051
7052
7053
7054
7055
7056
7057
7058
7059
7060
7061
7062
7063
7064
7065
7066
7067
7068
7069
7070
7071
7072
7073
7074
7075
7076
7077
7078
7079
7080
7081
7082
7083
7084
7085
7086
7087
7088
7089
7090
7091
7092
7093
7094
7095
7096
7097
7098
7099
7100
7101
7102
7103
7104
7105
7106
7107
7108
7109
7110
7111
7112
7113
7114
7115
7116
7117
7118
7119
7120
7121
7122
7123
7124
7125
7126
7127
7128
7129
7130
7131
7132
7133
7134
7135
7136
7137
7138
7139
7140
7141
7142
7143
7144
7145
7146
7147
7148
7149
7150
7151
7152
7153
7154
7155
7156
7157
7158
7159
7160
7161
7162
7163
7164
7165
7166
7167
7168
7169
7170
7171
7172
7173
7174
7175
7176
7177
7178
7179
7180
7181
7182
7183
7184
7185
7186
7187
7188
7189
7190
7191
7192
7193
7194
7195
7196
7197
7198
7199
7200
7201
7202
7203
7204
7205
7206
7207
7208
7209
7210
7211
7212
7213
7214
7215
7216
7217
7218
7219
7220
7221
7222
7223
7224
7225
7226
7227
7228
7229
7230
7231
7232
7233
7234
7235
7236
7237
7238
7239
7240
7241
7242
7243
7244
7245
7246
7247
7248
7249
7250
7251
7252
7253
7254
7255
7256
7257
7258
7259
7260
7261
7262
7263
7264
7265
7266
7267
7268
7269
7270
7271
7272
7273
7274
7275
7276
7277
7278
7279
7280
7281
7282
7283
7284
7285
7286
7287
7288
7289
7290
7291
7292
7293
7294
7295
7296
7297
7298
7299
7300
7301
7302
7303
7304
7305
7306
7307
7308
7309
7310
7311
7312
7313
7314
7315
7316
7317
7318
7319
7320
7321
7322
7323
7324
7325
7326
7327
7328
7329
7330
7331
7332
7333
7334
7335
7336
7337
7338
7339
7340
7341
7342
7343
7344
7345
7346
7347
7348
7349
7350
7351
7352
7353
7354
7355
7356
7357
7358
7359
7360
7361
7362
7363
7364
7365
7366
7367
7368
7369
7370
7371
7372
7373
7374
7375
7376
7377
7378
7379
7380
7381
7382
7383
7384
7385
7386
7387
7388
7389
7390
7391
7392
7393
7394
7395
7396
7397
7398
7399
7400
7401
7402
7403
7404
7405
7406
7407
7408
7409
7410
7411
7412
7413
7414
7415
7416
7417
7418
7419
7420
7421
7422
7423
7424
7425
7426
7427
7428
7429
7430
7431
7432
7433
7434
7435
7436
7437
7438
7439
7440
7441
7442
7443
7444
7445
7446
7447
7448
7449
7450
7451
7452
7453
7454
7455
7456
7457
7458
7459
7460
7461
7462
7463
7464
7465
7466
7467
7468
7469
7470
7471
7472
7473
7474
7475
7476
7477
7478
7479
7480
7481
7482
7483
7484
7485
7486
7487
7488
7489
7490
7491
7492
7493
7494
7495
7496
7497
7498
7499
7500
7501
7502
7503
7504
7505
7506
7507
7508
7509
7510
7511
7512
7513
7514
7515
7516
7517
7518
7519
7520
7521
7522
7523
7524
7525
7526
7527
7528
7529
7530
7531
7532
7533
7534
7535
7536
7537
7538
7539
7540
7541
7542
7543
7544
7545
7546
7547
7548
7549
7550
7551
7552
7553
7554
7555
7556
7557
7558
7559
7560
7561
7562
7563
7564
7565
7566
7567
7568
7569
7570
7571
7572
7573
7574
7575
7576
7577
7578
7579
7580
7581
7582
7583
7584
7585
7586
7587
7588
7589
7590
7591
7592
7593
7594
7595
7596
7597
7598
7599
7600
7601
7602
7603
7604
7605
7606
7607
7608
7609
7610
7611
7612
7613
7614
7615
7616
7617
7618
7619
7620
7621
7622
7623
7624
7625
7626
7627
7628
7629
7630
7631
7632
7633
7634
7635
7636
7637
7638
7639
7640
7641
7642
7643
7644
7645
7646
7647
7648
7649
7650
7651
7652
7653
7654
7655
7656
7657
7658
7659
7660
7661
7662
7663
7664
7665
7666
7667
7668
7669
7670
7671
7672
7673
7674
7675
7676
7677
7678
7679
7680
7681
7682
7683
7684
7685
7686
7687
7688
7689
7690
7691
7692
7693
7694
7695
7696
7697
7698
7699
7700
7701
7702
7703
7704
7705
7706
7707
7708
7709
7710
7711
7712
7713
7714
7715
7716
7717
7718
7719
7720
7721
7722
7723
7724
7725
7726
7727
7728
7729
7730
7731
7732
7733
7734
7735
7736
7737
7738
7739
7740
7741
7742
7743
7744
7745
7746
7747
7748
7749
7750
7751
7752
7753
7754
7755
7756
7757
7758
7759
7760
7761
7762
7763
7764
7765
7766
7767
7768
7769
7770
7771
7772
7773
7774
7775
7776
7777
7778
7779
7780
7781
7782
7783
7784
7785
7786
7787
7788
7789
7790
7791
7792
7793
7794
7795
7796
7797
7798
7799
7800
7801
7802
7803
7804
7805
7806
7807
7808
7809
7810
7811
7812
7813
7814
7815
7816
7817
7818
7819
7820
7821
7822
7823
7824
7825
7826
7827
7828
7829
7830
7831
7832
7833
7834
7835
7836
7837
7838
7839
7840
7841
7842
7843
7844
7845
7846
7847
7848
7849
7850
7851
7852
7853
7854
7855
7856
7857
7858
7859
7860
7861
7862
7863
7864
7865
7866
7867
7868
7869
7870
7871
7872
7873
7874
7875
7876
7877
7878
7879
7880
7881
7882
7883
7884
7885
7886
7887
7888
7889
7890
7891
7892
7893
7894
7895
7896
7897
7898
7899
7900
7901
7902
7903
7904
7905
7906
7907
7908
7909
7910
7911
7912
7913
7914
7915
7916
7917
7918
7919
7920
7921
7922
7923
7924
7925
7926
7927
7928
7929
7930
7931
7932
7933
7934
7935
7936
7937
7938
7939
7940
7941
7942
7943
7944
7945
7946
7947
7948
7949
7950
7951
7952
7953
7954
7955
7956
7957
7958
7959
7960
7961
7962
7963
7964
7965
7966
7967
7968
7969
7970
7971
7972
7973
7974
7975
7976
7977
7978
7979
7980
7981
7982
7983
7984
7985
7986
7987
7988
7989
7990
7991
7992
7993
7994
7995
7996
7997
7998
7999
8000
8001
8002
8003
8004
8005
8006
8007
8008

IRAF (Mar02)            V2.12EXPORT Release Notes           IRAF (Mar02)


                     IRAF V2.12EXPORT Release Notes
                            January 25, 2002
                        Updated: March 25, 2002


These release notes provide a summary of the  major  changes  in  V2.12.
This  is a major release of IRAF and will be available for all supported
platforms.  More detailed technical documentation of all system  changes
will  be  found  in  the  'notes.v211'  and  'notes.v212'  files  in the
iraf$doc and iraf$local directories.  Detailed revisions notes for  each
application  package  are  in  the  package directories in a file called
Revisions, e.g. apphot$Revisions.

     1.  Highlights of This Release
     2.  IRAF System Revisions Summary
     3.  Core IRAF Revisions Summary
          3.1 New Tasks
          3.2 Existing tasks with new parameters/defaults
          3.3 Existing tasks with new capabilities
     4.  NOAO Package Revisions Summary
          4.1 New NOAO Packages
          4.2 New NOAO Package Tasks
          4.3 Existing tasks with new parameters/defaults
          4.4 Existing tasks with new capabilities
     5.  General Package Changes
     6.  General Task Changes
     7.  Parameter File Changes
     8.  Details of Major System Changes
          8.1 FITS Kernel Changes
          8.2 Large Image Support
          8.3 Virtual Memory Cache
          8.4 New Developer libraries
     9.  System Changes Which May Affect You
          9.1 Shared Library Version Incremented
          9.2 External Package Recompilation
          9.3 Parameter File Changes
          9.4 Installation Script Changes
          9.5 Help System Changes
          9.6 Image Display Changes
          9.7 PLIO Changes
          9.8 New Environment Variables Changes




1. Highlights of This Release

    o Pixel Mask Support Added to FITS Kernel
        The FITS kernel was modified to add support for storing images in
        extensions as compressed pixel masks using the binary table extension.
        These masks may be accessed like any other image and allow for tasks
        to more easily store bad-pixel masks, regions masks, or error arrays
        in the same image file as the science data.
        
    o New Pixel Mask Tasks
        Several new tasks have been added to the system PROTO package for
        manipulating pixel masks:  

        o MIMSTATISTICS allows image statistics to be computed while
            rejecting pixels specified by an input mask.  
        o MSKEXPR task is a general-purpose mask expression evaluator
            similar to IMEXPR for images, but has builtin boolean region
            functions which can be used to set values inside or outside
            of certain geometric shapes.
        o MSKREGIONS creates an output mask based on an input text de-
            scription.  Region descriptions can be composed of geometric
            shapes and logical operation on mask regions.

        o OBJMASKS in the NPROTO package is a new task for detecting objects
            in an image and creating an output catalog or pixel mask of
            found objects.
        
    o Shared Memory Limitations Eased
        The IMAGES and DAOPHOT packages executables are now linked statically
        to remove per-process memory limitations imposed by the IRAF shared
        library on Sun and Dec Alpha systems.  Previously tasks such as
        DAOFIND and IMCOMBINE were limited to 268Mb on Sun systems,  these
        tasks can now use up to the machine memory limits.

    o Image I/O Buffer Sizes Increased
        Support for large image I/O was improved by changes to the internal
        buffer sizes.  These buffers may automatically adjust to optimal
        values for the image being accessed, however new environment variables
        may be set to further tune the buffers at the user level.  Where
        needed applications tasks were modified to take advantage of these
        buffer size changes to force the imio buffer to be the size of the
        input image.
        
    o Simplified Installation Script
        The install script was rewritten to clarify the output and provide
        some basic checking of the IRAF system setup prior to installation,
        and to do some of the most common post-install configuration.  The
        script will print an explanation of any errors it finds and suggest
        corrective action, the hope is this will lead the user past some of
        the most common installation errors.

        In addition, the SYSINFO diagnostic script which does more extensive
        checking of the system is also now part of the distribution.  This
        script can be used to verify the system once the install is complete,
        or to generate a report of the system configuration if needed by
        site support.  An UNINSTALL script to remove iraf command links and
        files created by the INSTALL script is also available to remove IRAF
        from a machine.  All scripts are now installed in the hlib$ directory.
        
    o New HELP GUI and Output Options
        The HELP task was enhanced to have a new GUI option for XGterm
        users.  This is essentially the XHELP task which has been available
        in the GUIAPPS external package for some time, however the task is
        fully backwards compatible and the text-mode output is still the
        default.  As part of this work, help pages may also now be formatted
        as either HTML or Postscript for web presentation or pretty-printing
        to a hardcopy device.  The LROFF task was similarly modified to
        provide direct conversion of lroff text sources.

    o DISPLAY Task Changes
        As part of the recent X11IRAF enhancements, the DISPLAY task and
        others such as IMEXAMINE which interact with the display server were
        modified to take advantage of the new features in XImtool V1.3.
        These include support for 16 frame buffers (increased from 4 in
        previous versions), and enhanced WCS readout capabilities.  The
        changes are fully backwards compatible for use with older XImtool
        versions or display servers such as SAOimage, SAOtng, or DS9 which
        have not yet been updated.

        X11IRAF V1.3 is being released simultaneously (but still separately)
        with IRAF V2.12.  While V2.12 is fully compatible with older versions
        of X11IRAF,  however users will need to upgrade both systems to take
        full advantage of all the new features.  Users should consult the
        X11IRAF Release Notes for details on what has changed there.
        
    o New Packages
        Several new packages are available in this release (see the NOAO
        package change notes below for details):

        - A new ASTCAT package for extracting astrometric and photometric
          calibration data from remote or local catalogs was added to NOAO.

        - A new CRUTIL package for doing cosmic ray detection and removal
          package was installed in the IMRED package.

        - A new QUADRED reduction package for QUAD format data was installed
          in the IMRED package.  This is a generalized replacement for the
          ARED.QUAD and XCCDRED external packages for processing CTIO and
          ESO FORS1 multi-amplifier data.

        - A new OBSUTIL package was installed in NOAO.  This is a collection
          of tasks from various external packages which are useful to plan or
          carry out observations.

    o New Developer Libraries.
        Several new libraries are available for SPP developers:

        - PSIO is a new Postscript text generation library installed in
          sys$psio.

        - CATQUERY is a remote astrometric/photometric catalog access lib
          installed in the XTOOLS utility library.  

        - SKYWCS is a sky coordinate transformation library installed in
          the XTOOLS utility library.




2. IRAF System Revisions Summary

    o The IRAF shared library version number was incremented for SunOS
        and Solaris systems.  See below for details on how this change
        will affect external packages and locally-compiled software.

    o The maximum number of nodes in a local iraf network was increased
        from 320 to 512.

    o The max number of open files in FIO, FIO_MAXFD, was increased from 
        256 to 4096.  This is the "hard limit" on the maximum number of
        open files in an IRAF process.

    o The maximum number of host level open files, MAXOFILES, was increased
        from 64 to 256.  This is the maximum number of files that can be
        simultaneously open at the host level.  It determines the maximum
        number of files that can be simultaneously open by an IRAF process
        in the usual case.

    o The number of keywords in a group header block for STF images (i.e.
        the MAX_PCOUNT) was increased from 50 to 99 in the STF image kernel.

    o Added support for the bitwise boolean operators: '&' (and), '|' (or),
        '^' (xor), and '~' (not/complement), to vectory expression evaluator
        fmtio$evvexpr.gy.  The IMEXPR task was modified to allow these new
        bitwise operations.

    o Added new vector operators to VOPS library: alan, alank (logical AND)
        and alor, alork (logical OR).  These take any integer data as input
        (short, int, long) and return a logical (expressed as int) result.

    o The 'imextn' environment variable will now accept upper-case extensions
        to specify image types.

    o Host Command Execution: The way command line arguments are parsed 
        was modified to make it easier to set the value of a string parameter
        to the null string. Whitespace is still skipped in @par files
        as before, however null strings are valid parameter values and will
        no longer cause a parameter prompt.

    o The MKPKG special file list link support was enhanced to allow replacing
        LFLAGS (the link flags variable) as well as the entire link line.
        This makes is possible to write special-file list entries for packages 
        which need e.g. to be compiled nonshared on certain platforms without
        creating a platform specific mkpkg file for the package itself.

    o The HSI zawset.c routine which controls a process working set size was
        modified to automatically detect the physical size of system memory
        (with a maximum return value of 2Gb).  The hard upper limit on memory
        utilization defined by the unix kernel can be limited either by the
        value return by the IRAF kernel (up to 90% of physical memory), or by
        the value set in the user environment variable MAXWORKSET (given in
        units of Mb).

    o New stdimage display devices were added to support the display of Gemini
        GMOS CCD data.  These devices are named 'imt45' thru 'imt49' and
        correspond to the following frame buffer sizes:

                imt45   2080 x 4644        # imt45|imtgmosccd
                imt46   6400 x 4644        # imt46|imtgmos
                imt47   3200 x 2322        # imt47|imtgmos2
                imt48   1600 x 1161        # imt48|imtgmos4
                imt49    800 x  581        # imt49|imtgmos8



3. CORE IRAF REVISIONS SUMMARY



3.1 New Tasks
     imcoords.ccget - extract objects from a test file catalog
     imcoords.ccstd - transform to and from standard astrometric coordinates
proto.mimstatistics - do image statistics through a mask
      proto.rskysub - sky subtract images using running mean or median
      proto.mskexpr - general mask expression evaluator
   proto.mskregions - create a mask from a list of region specifications



3.2 Existing Tasks with New Parameters or New Parameter Defaults
 immatch.imcentroid - new parameter maxshift
    immatch.imalign - new parameter maxshift
     immatch.geomap - new parameter maxiter, default reject = 3.0 not INDEF
     imcoords.ccmap - new parameter maxiter, default reject = 3.0 not INDEF
  imcoords.imcctran - new parameter longpole
       imutil.hedit - new parameter addonly
imutil.imstatistics - new parameters nclip, lsigma, usigma, cache



3.3 Existing Tasks with New Capabilities
 immatch.imcentroid - optionally rejects objects whose centers wander too much
    immatch.imalign - optionally rejects objects whose centers wander too much
     immatch.geomap - iterative rejection capability added
     imcoords.ccmap - iterative rejection capability added 
  imcoords.imcctran - support for non-zenithal projections added
       imutil.hedit - support for add keyword only if new option
imutil.imstatistics - support for iterative rejection and memory caching added
      imutil.imexpr - support for bitwise operators or, and, xor, and not added




4. NOAO PACKAGE REVISIONS SUMMARY



4.1 New NOAO Packages
      astcat - Astronomical catalog and surveys access package
      crutil - Cosmic ray detection and removal package
     obsutil - Observing utilities package



4.2 New NOAO Package Tasks
      apphot.pcalc - Do arithmetic operations on a list of apphot databases
   apphot.pconvert - Convert a text database to a tables database
      apphot.pdump - Print selected fields from a list of apphot databases
   apphot.pexamine - Interactively examine and edit an apphot database
  apphot.prenumber - Renumber stars in an apphot database
    apphot.pselect - Select records from an apphot database
      apphot.psort - Sort an apphot database

     astcat.aclist - List the supported astrometric catalogs
    astcat.agetcat - Extract astrometry files from astrometric catalogs
   astcat.afiltcat - Filter astrometry files derived from astrometric catalogs 
   astcat.adumpcat - Catalog access debugging task
     astcat.aslist - List the supported image surveys 
     astcat.agetim - Extract FITS images from image surveys 
     astcat.ahedit - Initialize the image wcs and set standard keywords
    astcat.aimfind - Select images containing catalog objects
    astcat.adumpim - Image survey access debugging task
   astcat.aregpars - Default region parameter set
   astcat.acatpars - Default astrometry file format parameter set 
  astcat.afiltpars - Default astrometry file filtering parameters
    astcat.aimpars - Default image data parameters
   astcat.awcspars - Default image wcs parameters

 crutil.cosmicrays - Remove cosmic rays using flux ratio algorithm
  crutil.craverage - Detect CRs against average and avoid objects
  crutil.crcombine - Combine multiple exposures to eliminate cosmic rays
     crutil.credit - Interactively edit cosmic rays using an image display
      crutil.crfix - Fix cosmic rays in images using cosmic ray masks
     crutil.crgrow - Grow cosmic rays in cosmic ray masks
   crutil.crmedian - Detect and replace cosmic rays with median filter
   crutil.crnebula - Detect and replace cosmic rays in nebular data

obsutil.psfmeasure - Measure PSF sizes from stellar images
 obsutil.specfocus - Determine spectral focus and alignment variations
 obsutil.starfocus - Determine direct focus variations from stellar images
   obsutil.ccdtime - CCD photometry exposure time calculator
  obsutil.pairmass - Plot airmass vs time for a given coordinate
    obsutil.sptime - Spectroscopic exposure time calculator
  obsutil.specpars - Spectrograph instrument parameters for sptime
  obsutil.bitcount - Accumulate the bit statistics for a list of images
  obsutil.findgain - Estimate the gain and readnoise of a CCD 
   obsutil.shutcor - Shutter correction from images of varying exposure times

   nproto.objmasks - detect and catalog objects in image



4.3 Existing Packages and Tasks with New Parameters or New Parameter Defaults
            apphot - new package parameters wcsin, wcsout, and cache
     apphot.center - new parameters wcsin, wcsout, cache
    apphot.daofind - new parameters wcsout, cache
     apphot.fitpsf - new parameters wcsin, wcsout, cache
     apphot.fitsky - new parameters wcsin, wcsout, cache
       apphot.phot - new parameters wcsin, wcsout, cache
   apphot.polymark - new parameters wcsin, wcsout, cache
   apphot.polyphot - new parameters wcsin, wcsout, cache
      apphot.qphot - new parameters wcsin, wcsout, cache
    apphot.radprof - new parameters wcsin, wcsout, cache
      apphot.wphot - new parameters wcsin, wcsout, cache
     apphot.txdump - replaced by pdump, available as a hidden task

astutil.setairmass - new parameters ra, dec, equinox, st, ut, scale

           daophot - new package parameters wcsin, wcsout, wcspsf, and cache
   daophot.addstar - new parameters wcsin, wcsout, wcspsf, and cache
   daophot.allstar - new parameters wcsin, wcsout, and wcspsf
   daophot.daoedit - new parameters cache
   daophot.daofind - new parameters wcsout, and cache
     daophot.group - new parameters wcsin, wcsout, wcspsf, and cache
     daophot.nstar - new parameters wcsin, wcsout, wcspsf, and cache
      daophot.peak - new parameters wcsin, wcsout, wcspsf, and cache
      daophot.phot - new parameters wcsin, wcsout, and cache
       daophot.psf - new parameters wcsin, wcsout, and cache
   daophot.substar - new parameters wcsin, wcsout, and cache



4.4 Existing Tasks with New Capabilities
     apphot.center - coordinate system support, optional image cacheing
    apphot.daofind - coordinate system support, optional image cacheing
     apphot.fitpsf - coordinate system support, optional image cacheing
     apphot.fitsky - coordinate system support, optional image cacheing
       apphot.phot - coordinate system support, optional image cacheing
   apphot.polymark - coordinate system support, optional image cacheing
   apphot.polyphot - coordinate system support, optional image cacheing
      apphot.qphot - coordinate system support, optional image cacheing
    apphot.radprof - coordinate system support, optional image cacheing
      apphot.wphot - coordinate system support, optional image cacheing

astutil.setairmass - ra, dec, equinox, st, ut, scale are no longer hardwired
 astutil.rvcorrect - more flexibility in setting ut

   daophot.addstar - coordinate system support, optional image cacheing
   daophot.allstar - coordinate system support
   daophot.daoedit - optional image cacheing
   daophot.daofind - coordinate system support, optional image cacheing
     daophot.group - coordinate system support, optional image cacheing
     daophot.nstar - coordinate system support, optional image cacheing
      daophot.peak - coordinate system support, optional image cacheing
      daophot.phot - coordinate system support, optional image cacheing
       daophot.psf - coordinate system support, optional image cacheing
   daophot.substar - coordinate system support, optional image cacheing




5. General Package Changes

NOAO

  ONEDSPEC
      More than 999 apertures are now allowed.

  APPHOT
      Coordinate Support:
          All the apphot tasks have been modified to accept input coordinates
          in the logical, tv, physical, or world systems, and to write output
          coordinates in the logical, tv, or physical coordinate systems. One
          consequence of this is that the apphot tasks will now work correctly
          on image sections in interactive mode. Another is that users can now
          work directly on image sections while preserving the coordinate
          system of the parent image.

      Image Cacheing Support:
          All the apphot tasks which accept image pixel input have been mod-
          ified to optional cache the entire input image in memory. Cacheing
          may significantly improve the performance of tasks where many random
          access operations are performed.

      File and image name directory information removed from output files
          All the apphot tasks have been modified to strip directory infor-
          mation from the image and coordinate file names written to the output
          files, to the terminal, and to the plot headers. The colon commands
          will still read and write full image and coordinate file path names.

      New PTOOLS Tasks Added
        The ptools package tasks pcalc, pconvert, pdump, prenumber, pselect
        and psort were added to the apphot package. The functionality of the
        old txdump task as been replaced by the pdump.  TXDUMP is still avail-
        able as a hidden task.

   ASTCAT
      The astcat package is a set of tasks for extracting astrometric and
      photometric calibration data from remote or local catalogs, filtering
      the data, extracting FITS images from remote or local surveys, and adding
      standard keywords to the extracted images.  There is also a task for
      selecting images which contain catalog objects and locating the catalog
      objects in the image.

  IMRED.CRUTIL
      Cosmic ray detection and removal package.  This package includes new
      tasks and links to tasks from other package.  It replaces the CRUTIL
      external package.

  IMRED.QUADRED
      Reduction package for QUAD format data.  This replaces the ARED.QUAD
      and XCCDRED external packages for processing CTIO and ESO FORS1 multi-
      amplifier data.

  DAOPHOT
    Coordinate Support
        All the daophot tasks have been modified to accept input coordinates
        in the logical, tv, physical, or world systems, and to write the output
        coordinates in the logical, tv, or physical coordinate systems. One
        consequence of this is that the daophot tasks will now work correctly
        on image sections in interactive mode. Another is that users can now
        work directly on image sections while preserving the coordinate
        system of the parent image.

    Image Cacheing Support
        All the daophot tasks which accept image pixel input have been modified
        to optionally cache the entire input image in memory. Cacheing signif-
        icantly improves the performance of the tasks when many random access
        operations are performed.  The cacheing already performed by the
        ALLSTAR task is unchanged.

    File and image name directory information removed from output files
        All the daophot tasks have been modified to strip directory information
        from the image and coordinate file names written to the output files,
        to the terminal, and to the plot headers. The colon commands will still
        read and write full image and coordinate file path names.

  OBSUTIL
        New observing utilities package.  This collects tasks from the NMISC,
        SPECTIME, PROTO, and NLOCAL external package which are useful to
        plan or carry out observations.  The new tasks are:

               PSFMEASURE    STARFOCUS   SPECFOCUS    CCDTIME       
               PAIRMASS      SPTIME      BITCOUNT     FINDGAIN    
               SHUTCOR

  OBSOLETE
        o  Added tasks OIMCOMBINE and OIMSTATISTICS which are the previous
           versions from V2.113b system
        o  Deleted the ODISPLAY task




6. General Task Changes

NOAO
  ONEDSPEC.SPLOT
      Rather than refusing to evaluate errors when there is negative data,
      negative data is treated as zero.

  ASTUTIL.SETAIRMASS
      Modified to have greater flexibility in selecting the keyword defining
      the universal time.  New parameters define the keywords for RA, dec,
      equinox, siderial time, universal time, and astrospheric scale height.

  ASTUTIL.RVCORRECT
      Modified to have greater flexibility in selecting the keyword defining
      the universal time.

  IMRED.ECHELLE.ECIDENTIFY
      Help page describes how to externally evaluate the dispersion fcns.

  IMRED.CCREDRED.COSMISRAYS
      Task was removed (see CRUTIL)

  NPROTO.FINDGAIN
      Task was removed (see OBSUTIL)

  NPROTO.OBJMASKS
      This is a new task for detecting objects in an image and creating
      an output catalog or pixel mask of found objects.

  TWODSPEC.LONGSLIT.FITCOORDS
      - Help page describes the contents of the database and how to ext-
        ernally evaluate the fits.
      - The RMS is shown in the graph title and in the :show output.

  TWODSPEC.APEXTRACT.APEDIT
      When there is just one aperture the background regions are shown
      on the graph without needing to enter the 'b' background mode.


IMAGES

  TV.DISPLAY
      - The mask overlay feature when the displayed image is a reduction of
        mask (e.g. a block average) now uses the maximum of all mask pixels
        within the display pixel.
      - The task will now allow up to 16 frame buffers to be used for the
        display if allowed by the server. (Currently requires XIMtool V1.3).

  TV.IMEXAMINE
      - A new key 't' allows output of a region centered on the cursor as an
        image for further analysis by other programs.
      - The task will now allow up to 16 frame buffers to be used for the
        display if allowed by the server. (Currently requires XIMtool V1.3).
      - Cursor readback will now properly detect the correct image when more
        than one image is displayed per frame, e.g. in a mosaic.  (Currently
        requires XIMtool V1.3).

  IMMATCH.IMCOMBINE
      - New parameters "headers", "bpmasks", "rejmasks",  "nrejmasks", and
        "expmasks" provide additional types of output.  The old parameters
        "rejmask" and "plfile" were removed.  The new "nrejmasks" parameter
        corresponds to the old "plfile" and the new "rejmasks" parameter
        corresponds to the old "rejmask".
      - There is a new "combine" type "sum" for summing instead of averaging
        the final set of offset, scaled, and weighted pixels.
      - There is a new parameter "outlimits" to allow output of a subregion
        of the full output.  This is useful for raster surveys with large
        numbers of images.
      - Additional keywords may appear in the output headers.
      - Scaling is now done relative to the first image rather than an average
        over the images.  This is done so that flux related keywords such as
        exposure time and airmass remain representative.
      - A median calculation was made faster.
      - The previous version is available in the OBSOLETE package.

  IMMATCH.IMCENTROID
  IMMATCH.IMALIGN
      A new parameter maxshift has been added to the imcentroid and imalign
      tasks.  Maxshift defines the maximum permitted difference between the
      predicted and computed shifts. It is used to reject objects whose
      positions have wandered too far from the predicted positions.

  IMMATCH.GEOMAP
  IMCOORDS.CCMAP
      An iterative rejection capability has been added to the geomap and
      ccmap tasks. The new parameter maxiter in combination with the existing
      parameter reject define the rejection parameter. The default value of
      the reject parameter has been changed from INDEF to 3.0. 

      The colon command ":order <value>" has been added to the geomap and ccmap
      tasks. The new command enables the user to change all the order parameters
      simultaneously when experimenting with different fitting functions.

  IMCOORDS.STARFIND
      The starfind task background estimation algorithm has been modified so
      that it no longer depends on the value and density of the central pixel.

  IMCOORDS.IMCCTRAN
      Support for non-zenithal projections has been added to the imcctran task.
      The previous technique of rotating the cd matrix does not work properly
      for these functions. The new parameter longpole was added to imcctran.
      Longpole enables the user to select either the cd matrix or longpole /
      latpole method for transforming zenithal projections.

  IMCOORDS.CCGET
      The new task ccget was added to the imcoords package. Ccget extracts
      objects in a user specified region from a a simple text file catalog.

  IMCOORDS.CCSTD
      The task ccstd was added to the imcoords package. Ccstd transforms pixel
      and celestial coordinates to standard coordinates and vice versa.

  IMUTIL.HEDIT
      The new parameter addonly was added to hedit task. The addonly switch
      is used to add a parameter to the image header only if it does not
      already exist. The addonly switch has a precedence intermediate between
      the add and delete switches.

  IMUTIL.IMSTATISTICS
      An interative rejection capability has been added to the imstatistics
      task. The new parameters nclip, lsigma, and usigma define the rejection
      parameters. A memory cacheing option was also added to imstatistics in
      order to optionally speed up performance if iterative rejection is en-
      abled or the midpt/mode is computed.

  IMUTIL.IMEXPR
      Support for the bitwise operators or (|), and (&), exclusive or (^), and
      not (~) has been added to the imexpr task. The logical operators or (||)
      and and (&&) have ben made truly logical i.e. they return 0's or 1's,
      rather than results of a bitwise or and and.


PROTO
  MIMSTATISTICS
      The new task mimstatistics has been added to the proto package.
      Mimstatistics does image statistics through a mask.

  RSKYSUB
      The new task rskysub was added to the proto package. Rskysub does a
      running mean or median sky subtraction on an ordered list of images
      using optional background scaling and object masking.

  MSKEXPR
      The new task mskexpr has been added to the proto package. Mskexpr
      creates a new mask from a user supplied expression, an optional
      reference image, and an optional reference mask.

  MSKREGIONS
      The new task mskregions has been added to the proto package. Mskregions
      creates a new mask or modifies an existing mask using a list of region
      definitions or region expressions.


XTOOLS
  SKYWCS
      A new library skywcs has been added to the xtools package. The skywcs
      library is a set of routines for managing image and catalog celestial
      coordinate systems and for transforming from one celestial coordinate
      system to another.  Skywcs is layered on the Starlink Positional
      Astronomy library slalib which is installed in the iraf math package.

  CATQUERY
      A new library catquery was added to the xtools package. The catquery
      library is a set of routines for doing local and remote catalog and
      image survey access.

SYSTEM
  HELP
      Task was modified to call the XHELP code to run the GUI version of
      the task if requested.  Task output is the same if the device
      remains the default 'terminal' value, however resetting the 'device'
      parameter to one of 'gui', 'html', or 'ps' will either spawn the GUI
      task under xgterm or print the converted help page to the stdout.

  LROFF
      The task was enhanced with a new 'format' parameter that allows the
      text to be formatted as one of: plain-text, HTML, or Postscript. 




7. Parameter File Changes

In the tables below each parameter change is identified with one of  the
following codes followed by task name and the description of the change.
   * n = new parameter
   * c = changed/modified parameter
   * d = deleted parameter


CL
  n cl                      Added the new CL parameter "release".  This
                            is a string valued parameter with values such
                            as "2.11.3a", "2.12", "3.0" etc.  This differs
                            from "version" which is a descriptive string
                            such as "NOAO/IRAF V2.11.3 EXPORT".  There can
                            be multiple releases of one version of the
                            software, and "release" specifies exactly what
                            build the software is.  The release strings are
                            composed in such a way that they can be used
                            in expressions, e.g. (release >= 2.11.3) would
                            be true for IRAF V2.11.3 and all subsequent
                            releases.

DATAIO
  c dataio.export           Made the 'format' parameter automatic mode
  c dataio.import           Made the 'format' parameter automatic mode

IMAGES
  n imcoords.imcctran       Added a new parameter longpole to the imcctran
                            task. If longpole=yes then coordinate transfor-
                            mations with zenithal projections will be rot-
                            ated using longpole rather than the CD matrix.

  c immatch.wregister       Fixed boundary option typo, "refect" to "reflect".
  c immatch.sregister       Fixed boundary option typo, "refect" to "reflect".

  n immatch.imcentroid      Added a new parameter maxshift to the imcentroid
    immatch.imalign         and imalign tasks.  Maxshift is the maximum perm-
                            itted difference between the computed and predicted
                            shifts. Maxshift can be used to reject objects whose
                            centers have wandered too far from the expected
                            center. By default maxshift is undefined.

  n immatch.geomap          Added a new parameter maxiter to the geomap and
    immatch.ccmap           ccmap tasks. Maxiter defines the maximum number of
                            rejection iterations and has a default value of 0
                            for no rejection.  

  c immatch.geomap          Changed the default value of the ccmap and geomap
  c immatch.ccmap           parameter reject from INDEF to 3.0.

  c immatch.imcombine       Numerous changes, see details above

  c imgeom.imlintran        Changed the nrows argument names to nlines 


  n imutil.hedit            Added a new addonly parameter to the hedit task. If
                            addonly is set a new field will only be added to
                            the image header if it does not already exist.

  n tv.imexamine            Added new parameters 'output', 'ncoutput', and
                            'nloutput' used by the new 't' keystroke when
                            outputting an image section centered on the cursor.

SYSTEM
  n help                    New parameters required for GUI options, output
                            formats for HTML/PS, printer, etc.
  n lroff                   Added new 'format' parameter for HTML/PS output 

UTILITIES

  c utilities.surfit        Added support for the half cross-terms option to
                            the surfit task.  This involved changing the type
                            of the xterms parameter from boolen (yes/no) to
                            string (none,half,full).

NOAO

  ASTUTIL
    n astutil.setairmass    new parameters ra, dec, equinox, st, ut, scale

  DIGIPHOT
    n apphot                new package parameters wcsin, wcsout, and cache
    n apphot.center         new parameters wcsin, wcsout, cache
    n apphot.daofind        new parameters wcsout, cache
    n apphot.fitpsf         new parameters wcsin, wcsout, cache
    n apphot.fitsky         new parameters wcsin, wcsout, cache
    n apphot.phot           new parameters wcsin, wcsout, cache
    n apphot.polymark       new parameters wcsin, wcsout, cache
    n apphot.polyphot       new parameters wcsin, wcsout, cache
    n apphot.qphot          new parameters wcsin, wcsout, cache
    n apphot.radprof        new parameters wcsin, wcsout, cache
    n apphot.wphot          new parameters wcsin, wcsout, cache

    n daophot               new package params wcsin, wcsout, wcspsf, and cache
    n daophot.addstar       new parameters wcsin, wcsout, wcspsf, and cache
    n daophot.allstar       new parameters wcsin, wcsout, and wcspsf
    n daophot.daoedit       new parameters cache
    n daophot.daofind       new parameters wcsout, and cache
    n daophot.group         new parameters wcsin, wcsout, wcspsf, and cache
    n daophot.nstar         new parameters wcsin, wcsout, wcspsf, and cache
    n daophot.peak          new parameters wcsin, wcsout, wcspsf, and cache
    n daophot.phot          new parameters wcsin, wcsout, and cache
    n daophot.psf           new parameters wcsin, wcsout, and cache
    n daophot.substar       new parameters wcsin, wcsout, and cache


  ONEDSPEC
    n standard              new parameter mag, magband, and teff.  These 
    n splot                 params can be use to specify calibration files
    n lcalib                as blackbody curves scale to a specified magnitude

  TWODSPEC
    c apextract.apall1      Reduced the 'polysep' parameter.
    c apextract.apdebug     Reduced the 'polysep' parameter.
    c apextract.apfit1      Reduced the 'polysep' parameter.
    c apextract.apnoise1    Reduced the 'polysep' parameter.
    c apextract.apnorm1     Reduced the 'polysep' parameter.
    c apextract.apparams    Reduced the 'polysep' parameter.





8. Details of Major System Changes



8.1 FITS kernel changes
        The FITS kernel was modified to add support for storing images in
    extensions as compressed pixel masks.  The mask is stored as a binary
    table using the "ZIMAGE" (compressed image) convention proposed by White,
    Greenfield, Pence, and Tody in 1999:

            http://heasarc.gsfc.nasa.gov
            /docs/software/fitsio/compression/compress_image.html

        In the current implementation only the "PLIO_1" compression
    algorithm is implemented.  Mask extensions may be read or written directly
    by the kernel.  When writing a new extension it will be appended to the
    MEF file.  To append an image to a MEF file as a mask, include "type=mask"
    in the image kernel section when the output image is opened.

        Masks are interfaced to the system as images and may be read and
    written like any other image via IMIO.  They have a normal image header
    and can be manipulated with any program that deals with images.  The pixel
    type is INT.

        It is also possible to access a mask image as a PLIO mask.  An
    IMSTATI query for IM_PLDES parameter will return the PLIO mask descriptor.
    While a mask extension is opened under IMIO it is represented as a PLIO
    mask and may be accessed in this form like any other mask.

        The mask image is stored in the FITS binary table (BINTABLE)
    extension when the image is closed, and is loaded from the extension when
    the image is opened.  The compression representation used to store the
    mask in the binary table is the same as is used within PLIO.  The new
    (V2.12) encoding is used, allowing very large masks to be stored.
    Currently masks up to 3D are supported.  Data on each 2D mask plane
    will be compressed in both X and Y as with PLIO.  The depth of the mask
    is preserved.

        Although a mask is stored as a binary table the format of the
    table is not completely general.  In the current implementation there
    can be only one column in the table (COMPRESSED_DATA).  This is an
    integer-valued variable length array column containing, for each line of
    the N-dimensional image, the PLIO compressed version of that image line.
    The actual compressed data is stored in the heap area of the table.
    Multiple image lines may point to the same compressed line list, e.g.,
    to store the empty line or to compression in Y.




8.2 Large Image Support

        The  following  changes  were  made to enable IMIO to use larger
buffer sizes to optimize i/o for large images:

        The default file buffer size set by IMIO is unchanged: it is still
    about 512 MB, the value set for V2.11.2.  However, a new parameter
    IM_BUFFRAC was added.  Both IM_BUFSIZE and IM_BUFFRAC are used to help
    determine the FIO buffer size set when an image is opened.  The logic
    for this is implemented in imsetbuf.x.

        Backwards compatibility.  If you do nothing about IMIO/FIO buffers
    in your program, the system may transparently use a larger buffer for
    larger images.  If you set BUFSIZE in your program, the system will
    by default use the value you give, or possibly a larger value, if the
    image you are accessing is very large.  If you set BUFSIZE and you want
    to guarantee that the value you set is used (even for very large images)
    then you should also set BUFFRAC=0 to ensure that only BUFSIZE is used.

        How it works.  BUFFRAC specifies the default FIO buffer size used to
    access an image, expressed as a percentage of the size of the image.
    For example, the builtin default value of BUFFRAC=10 will try to make a
    FIO buffer 10% of the size of the image.  The actual value used will be
    given by BUFFRAC, but will be at least BUFSIZE, and no more than a builtin
    default maximum value, currently 32 MB.  Given the builtin defaults,
    the buffer size will range from 0.5 to 32 MB depending upon the size of
    the image being accessed.  As noted above, BUFSIZE and BUFFRAC can be
    set to force the buffer size to a specific value if desired.

        Environment variables for both parameters are provided.  The names
    are "IMIO_BUFSIZE" (specified as bytes) and "IMIO_BUFFRAC" (specified
    as a decimal fraction).  If defined, these override (at image open time)
    the builtin default values for both parameters.  An IMSET call by the
    application will override all such defaults.

        The FIO buffer allocated will not be larger than the size of the
    image.  The FIO buffer will also not exceed the maximum size set by
    the file driver being accessed.  For example, for PLIO images the file
    buffer will not exceed about 2KB, even for a very large mask.  This is
    because the "pixel file" for a PLIO image is dev$null, the driver for
    which specifies a maximum i/o buffer size of 2K (the real file to load
    or save the mask will use a different descriptor).

        The intent here is to provide an adaptive mechanism for setting the
    FIO buffer size used to access an image, which automatically adapts to
    the size of the image being accessed.  If you access a lot of small
    images you will get smaller buffers - everything will be as before.
    If you access very large images, you may get large buffers up to the
    builtin maximum value of (currently) 32 MB.

        Using large buffers could cause a machine to run out of memory.
    However, it is likely that if someone is working on 300 MB images
    that they are using a machine which has a memory at least that large
    - probably larger.  If there are problems, the environment variable
    overrides can be used to tune IMIO.

        The reason for large file buffers is to limit the number of disk
    data transfers, and hence the number of disk seeks.  Using buffers larger
    than a certain amount (32 MB is generous) is probably counterproductive.
    If the i/o system provides 20 MB/sec i/o transfers, 32 MB will take
    1.6 seconds.  This should be more than a large enough granularity to
    provide efficient i/o, hence is a reasonable limit (at this point paging
    effects are likely to dominate).



8.3 Virtual Memory Cache

        The VMcache client interface and  daemon  provide  a  method  by
which  data-intensive IRAF tasks (or non-IRAF tasks for that matter) can
manage how files/images  are  maintained  in  virtual  memory  to  avoid
excessive  system  paging.   In  essence it's a way to "lock" a specific
image in memory to improve performance.  As of this release no tasks  in
the  system  have  been  modified  to  make  use  of the VMcache daemon,
however installing it in the system at this point provides  a  framework
for future applications and systems development.

        The  following notes summarize the changes made for this feature
and describe it's function in more detail.  A more complete  description
of  the  interface,  environment  variables which control it, etc can be
found in the main systems revisions file iraf$local/notes.v211.

        The source for the developmental version of the VMcache library
    and the VMcache daemon (vmcached) have been installed in the
    unix$boot tree and the HSI binary file driver was modified to add VMcache
    client support.  This adds two new capabilities to the driver: 1)
    built-in support for direct i/o (on systems that support it), and 2)
    a client interface to the VMcache daemon to permit the daemon to
    optimally manage binary file i/o if a VMcache daemon is present.

    The vmcached code is complete but only enough debug/testing was done to
    support development of the VMcache client interface for IRAF (the vmcached
    code is debugged but the new version of the vmcache library code has
    not been tested).  Since the daemon can be utilized outside the normal
    IRAF release we do not have to fully develop it for the release.

    It should be stressed that VMcache is only useful or warranted for
    systems that are very data intensive.  The standard host operating
    system file access heuristics are best for "normal" processing where
    either the system is not really busy, or the datafiles are not
    excessively large.  On systems with very large physical memories
    where massive amounts of data are being processed, VMcache can make
    a significant difference in overall system performance.

    VMcache is too complex to document here.  Without going into the
    details, its function is to manage a cache of files in system
    virtual memory.  Files can be explicitly cached or uncached, or they
    can be "accessed", and VMcache will decide whether or not to cache
    the file in virtual memory.  This is what the VMcache client
    interface does: every time it accesses (opens or extends) a file
    larger then the VM threshold it sends an "access" directive to the
    VMcache daemon.  The daemon sends back a response of 0 (file not
    cached; use direct i/o to access the file), or 1 (file cached in VM;
    use normal VM-buffered i/o to access the file).  Even if a file is
    not cached the daemon keeps track of all accesses.  Files which are
    frequently accessed will have a higher prority and are more likely
    to be cached in memory.

    The VMcache daemon is a separate system-level program outside of
    IRAF.  This is necessary to provide a central system-wide cache
    controller.  It also provides flexibility, allowing multiple
    versions of the daemon to exist, e.g., to allow experimentation with
    different types of caching algorithms.  It also allows easy
    customization of the daemon independently of the IRAF applications
    using the VMcache client interface.




8.4 New Developer Libraries

    o Several new libraries are now available for developers:

      PSIO      New Postscript text generation library installed in the
                sys$psio.  The PSIO interface is used to format a block of
                text as Postscript output on a page of a given size (Letter,
                Legal, A4 or B5).  See the psio$README file for details.

      CATQUERY  Remote astrometric/photometric catalog access lib installed
                in the XTOOLS utility library.  
                  The catquery package provides a set of routines for local
                and remote catalog and image survey server access.  The sup-
                ported catalogs and image surveys are described in records
                stored in a catalog and image survey configuration file
                respectively. The catalog and image survey records specify
                the network address, the query format, and the output format
                for each supported catalog or image display server.  See
                "help catalogs" and "help surveys" for details.

      SKYWCS    Sky coordinate transformation library installed in the XTOOLS
                utility library.
                  The skywcs package contains a simple set of routines for
                managing sky coordinate information and for transforming from
                one sky coordinate system to another. The sky coordinate
                system is defined either by a system name, e.g.  "J2000",
                "galactic", etc., or by an image system name, e.g. "dev$ypix"
                or "dev$ypix world".




9. System Changes Which May Affect You

   * SHARED LIBRARY VERSION INCREMENTED (Sun/IRAF only)
        The IRAF shared library for SunOS and Solaris platforms has been
        incremented with this release due to the nature of various system
        changes.  Existing IRAF binaries (e.g. locally written software
        or external packages) will continue to run using the old shared 
        image, however they will need to be recompiled against V2.12 in order
        to pick up the numerous system bug fixes and features in this release.
        In particular, pixel masks produced by V2.12 IRAF tasks may be 
        incompatible with external packages which have not been recompiled.

   * EXTERNAL PACKAGE RECOMPILATION
        The V2.12 release contains changes to the FIO and PLIO/PMIO interface
        header files used by numerous applications.  Relinking of an external
        package may fail to pick up these changes and not recompile a source
        file which uses one of these header files if the mkpkg file doesn't
        correctly list all of the dependencies (nearly all packages have one
        or more mkpkg files which have this problem).  In the worst cases 
        this could lead to a runtime error due to the incompatibilities.

        For this reason we recommend that all packages and local tasks be
        recompiled (completely from source* (rather than simply relinked
        against the new version) to assure that all changes and new features
        will be included.  Recompilation also guarantees that packages can
        take advantage of some of the larger buffer sizes and optimizations
        in this release.  Site support can supply a list of missing mkpkg
        dependencies for most external packages being developed outside NOAO
        that wish to fix these files for a future release.  

   * PARAMETER FILE CHANGES
        As with all major releases, we recommend that you do a MKIRAF and
        delete all your old parameter files after the IRAF upgrade. You may
        choose not to do this if you are in the midst of a project and have
        setups that may be difficult to reproduce. 

        The automatic parameter file update/merge mechanism, which is used
        if you do not initialize your parameters with MKIRAF, is based on
        file date comparisons.  If you run IRAF V2.11 after V2.12 has been
        installed, the file dates on your uparm parameter files will be
        more recent than the V2.12 installation date.  If you then try to
        run V2.12, the automatic parameter file merge/update will fail due
        to the file dates.  The system only updates personal parameter
        files which are older than the update date of the system.  A
        MKIRAF avoids the problem if you delete your parameter files,
        causing them to be updated from the system default versions.

   * INSTALLATION SCRIPT CHANGES
        As the first step of an ongoing effort to simplify the installation
        and system configuration, the IRAF install script was rewritten to
        do some error-checking of the iraf setup, present a simplified and
        easier to read output, and do some common post-install configuration
        of the system.  Additionally, the SYSINFO diagnostic script for
        finding system errors and reporting on the configuration, and a new
        UNINSTALL script for removing IRAF files/links from the system have
        also been installed.  The old install script is still available as
        a fallback in case problems with the new script are found.

   * HELP SYSTEM CHANGES
        The HELP task was modified with several new parameters controlling
        the display and formatting of the help pages.  Help may now be
        presented as formatted text (as before), HTML, or fully formatted
        Postscript.  Additionally, users running under an XGterm window can
        use the task in a new GUI mode.  The help GUI allows users to browse
        the help system and easily search for tasks/topics using a familiar
        web-like interface.  The GUI mode is not the default, but can be
        enabled easily using the 'device' parameter.

   * IMAGE DISPLAY CHANGES
        Tasks which display images or interact with the image display were
        modified to take advantage of new features added to XImtool V1.3
        (e.g. the multiple WCS and pixel-value readouts and 16 display frame
        buffers).  These changes were done in a backwards compatible way so
        interaction with display servers such as SAOimage, SAOtng, DS9, or
        older XImtool versions should be unaffected.  If problems are dis-
        covered a CL environment variable 'disable_wcs_maps' can be defined
        to force all of the old behaviors.  These changes do not add any new
        functionality to the tasks themselves, only the underlying display
        protocols.

  * PLIO Changes
        The LEN and BLEN fields of the encoded line list (LL) descriptor
        would limit the length of a pixel area (and hence the size of a
        pixel mask) to the max size of a signed short, 32768.  This was due
        to the use of a simple array of type short to encode the line list
        (which simplifies handling considerably).  Nonetheless the limit to
        32K was unacceptable.  The fix adopted was to increase the LL header
        from 3 to 7 words.  Two 16 bit words are now used to encode each of
        LEN and BLEN.  A "version" word was added to allow the old, new, and
        future encodings to be distinguished.  A "hdrlen" word was added to
        parameterize the length of the LL header, rather than fix it at
        compile time as in the initial version.  With this change, the
        maximum length of an image line under PLIO is increased from 32768
        to 1073741824 (32768*32768).  All the higher level PLIO code is
        integer, so should already support larger masks.

        This was done in such a way that old line lists can still be read,
        although PLIO will always write out new format line lists (pixel
        mask files and images, QPOE, and MWCS all store encoded line lists
        in external storage, so backwards compatibility is important; also
        existing complied programs will continue to generate the old
        format).  The cost is 8 bytes per encoded line list.  For most masks
        this should only increase the size of the mask by a few percent at
        most.

   * NEW ENVIRONMENT VARIABLES
        The following new environment variables may be defined to tune the
        size of the system file i/o buffers used by the image i/o system.
        The system will automatically adjust to use larger buffers when
        accessing larger images, these variables may be set to further
        optimize the buffers

          IMIO_BUFSIZE      Size of the FIO buffer size in bytes.

          IMIO_BUFFRAC      FIO buffer size expressed as a percentage of 
                            the image size.  Actual value will be at least
                            BUFSIZE and no more than BUFMAX.

          IMIO_BUFMAX       Max size of FIO buffer which will override the
                            32Mb default.


        Other miscellaneous environment variables:

          disable_wcs_maps  If defined or set to 'yes', this variable will
                            force any tasks which interact with the image
                            display to use the old protocols.

          pspage            Variable which is used by the PSIO interface to
                            set the default page size.  Acceptable values
                            include "letter" (the default) for US Letter,
                            "legal" for US Legal, and "a4" and "b5" for the
                            most common European sizes.  Pspage can be used
                            by the new HELP and LROFF tasks to automatically
                            set the desired Postscript page size. 

IRAF (Aug97)             V2.11 Revisions Summary            IRAF (Aug97)



                      IRAF V2.11 Revisions Summary
                            August 27, 1997

Introduction

    Modifications and additions to IRAF V2.11EXPORT, compiled since the last
documented  release of IRAF, V2.10.3, are summarized below.  V2.11EXPORT is
a major release of IRAF and  will  be  available  for  all  supported
platforms.   These  release notes provide a summary of the major changes in
V2.11.  More detailed technical documentation of all  system  changes will
be  found  in  the "notes.v210" and "notes.v211" files in the iraf$doc and
iraf$local directories.

    1. Things to be aware of or watch out for
        1.1. Parameter file changes 
        1.2. Networking change
        1.3. Image format change 
        1.4. FITS kernel
        1.5. RFITS/wfits changes 
        1.6. Merged SunOS and Solaris IRAF systems 
        1.7. Tape access 
        1.8. Default magnitude zero changed

    2. IMAGES package changes

    3. Major system changes
        3.1. New FITS image kernel (FXF)
        3.2. Changes to the IRAF native image format (OIF)
        3.3. IMFORT changes
        3.4. Environment variables
        3.5. New intrinsic functions
        3.6. System default modifications
        3.7. Libraries added
        3.8. Graphics changes
        3.9. FITS-related core-level task changes
        3.10. General changes

    4. New tasks, or old tasks moved to new packages

    5. Task and package deletions

    6. Modifications to old tasks

    7. Parameter file changes


The IRAF V2.11 release notes can also be found online on the Internet at
the URL http://iraf.noao.edu/v211revs.html.


1. Things to be aware of or watch out for


1.1 Parameter file changes 

Since this is a major release we recommend that  you  do  a  mkiraf  and
delete  all  your  old parameter files. You may choose not to do this if
you are in the midst of a project and have setups that may be  difficult
to  reproduce.   Old  IMAGES  package  parameter files will no longer be
recognized, however, because of  the  package  reorganization  mentioned
below.   Generally,  old  parameter  files are merged automatically with
any new parameter files if there have been any changes, but  if  you  do
have  problems you will need to unlearn the task before you can proceed.
A list of the parameter file changes appears below and you may  wish  to
check this list to see how this will affect your setups.

The  automatic  parameter  file update/merge mechanism, which is used if
you do not initialize your parameters with mkiraf, is based on file date
comparisons.   If you run IRAF V2.10 after V2.11 has been installed, the
file dates on your uparm parameter files will be more  recent  than  the
V2.11  installation  date.   If you then try to run V2.11, the automatic
parameter file merge/update will fail due to the file dates.  The system
only  updates  personal  parameter files which are older than the update
date of the system.  A mkiraf avoids the  problem  if  you  delete  your
parameter  files,  causing  them  to  be updated from the system default
versions.


1.2 Networking change

The "set node = foo" syntax, used to enable remote image  display  under
IRAF   networking,  has  changed.   The  new  syntax  requires  that  an 
exclamation be appended to the node name as in the example  below  (this
dates  back  to  V2.10.4 so many users will already be familiar with the
feature).

        cl> set node = "orion!"


1.3 Image format change 

The internal IRAF image format (.imh images) has  changed.   V2.11EXPORT
can  read  the old image format but the new image format is not readable
by V2.10.4 or earlier versions.  This means that you can not  easily  go
from  the  new  IRAF  system  (V2.11) to an old one (V2.10.4 or earlier)
unless you first convert the V2.11 IRAF images to FITS files.  All  your
old  V2.10.4 or earlier images are readable by V2.11EXPORT.  The benefit
is that the new image  format  is  machine  independent,  slightly  more
storage   efficient,  and  supports  long  file  pathnames.   If  it  is 
necessary to be  able  to  read  images  written  by  V2.11  with  older
software,  V2.11  can  be  made  to  write  the old IRAF image format by
setting the oifversion environment variable, e.g., "set oifversion =  1"
(the default is version 2).  See below for details.


1.4 FITS kernel

A  FITS  image  kernel  is available in V2.11, allowing runtime read and
write access to FITS files on disk.  There are many related  changes  to
IRAF  image  i/o  and  FITS  support.  More information on the new image
kernel, and on the expanded FITS support available in  V2.11,  is  given
below.


1.5 RFITS/WFITS changes 

rfits  and  wfits  have  been  modified  to support multi-extension FITS
files.  The extension numbering convention used is the same  as  in  the
FITS  image  kernel.   As  a result, users who read simple FITS files on
disk with a command such as  "rfits diskfilename 1 foo" will  find  that
this  no  longer  works  -  instead use "rfits diskfilename 0 foo".  See
below for details.


1.6 Merged SunOS and Solaris IRAF systems 

A single installation of Sun/IRAF will now simultaneously  support  both
SunOS  and Solaris (previously separate IRAF distributions were required
for each).


1.7 Tape access 

The "tapecap" mechanism has changed.   The  system  now  looks  for  the
filename  "tapecap.<node>"  followed  by the default "tapecap".  <node>:
should be the hostname (as  used  by  IRAF  networking)  of  the  server
hosting  the  tape drives described by the tapecap file.  For example if
host "gemini" serves up some tape drives  it's  tapecap  file  is  named
"tapecap.gemini".   If  a  server-specific tapecap file is not found the
default "tapecap" (on the possibly remote server node)  is  used.   This
feature  allows  a  single  IRAF  installation  to be shared by multiple
servers.


1.8 Default magnitude zero changed

The default APPHOT magnitude zero point has been changed  from  26.0  to
25.0  to  bring it into agreement with the DAOPHOT package default value
and thereby avoid confusion for users who switch back and forth  between
packages.   The  affected  APPHOT  tasks  are  phot, photpars, polypars,
polyphot, qphot, radprof, and wphot.  The APPHOTX package in  the  addon
DIGIPHOTX  package will retain the old zero point values until IRAF 2.11
is released after which they will be updated.

The default value of the magzero  parameter  in  imexamine  was  changed
from 30.0 to 25.0 for consistency with the DIGIPHOT package.


2. IMAGES package changes

The  IMAGES  package  has  been  reorganized  by  function  into  the  7 
subpackages listed below.

      imcoords - Image coordinates package
      imfilter - Image filtering package
         imfit - Image fitting package
        imgeom - Image geometric transformation package
       immatch - Image matching and combining package
        imutil - Image utilities package
            tv - Image display utilities package

The new IMAGES package contains a total of 82 tasks,  including  26  new
tasks  from  the  IMMATCH  and  VOL  external addon packages, 6 existing
PROTO package  tasks,  and  1  existing  NOAO.PROTO  package  task.  The
undocumented  IMAGES  package  IMDEBUG and its 6 tasks have been deleted
from the IMAGES package.  User should  use  the  tasks  in  the  ARTDATA
package instead.

This  reorganization  of the IMAGES package should be mostly transparent
to the user and not affect any existing scripts, unless you  were  using
any  of  the  6  deleted  tasks.  By default, the IMAGES subpackages are
automatically loaded when you log in to  the  CL.  Old  parameter  files
will not be recognized since the package names have changed.


3. Major system changes


3.1 New FITS image kernel (FXF)

V2.11  introduces  a  new  image kernel providing runtime access to FITS
multi-extension image datafiles.  What this means  is  that  IRAF  tasks
can now read and write FITS images directly at runtime.  The native IRAF
image format (used by images  with  the  .imh  extension),  remains  the
default  as it is the most efficient and well-tested format.  IMH, FITS,
and  the  other  types  of  images  supported  by  IRAF  can   be   used 
interchangeably in most IRAF tasks.  Although we have extensively tested
the new FITS image kernel, it is still evolving, is complex,  and  still
has some bugs.  Users should use it with caution.  Please let us know of
any problems.

Besides support for classical FITS images,  the  new  FITS  kernel  also
supports  multi-extension FITS files: several FITS files packed into one
large file with a PHU (Primary Header Unit) that contains global  header
information  shared  by the other files.  Multi-extension FITS files are
0-indexed, with the PHU being 0 and the first image extension (or  other
data  extension)  at  index  1.   If there is no PHU then the first FITS
image is 0 and there is no global header.

For further details about the FITS kernel please see the new FITS Kernel
User's Guide by Nelson Zarate.


3.2 Changes to the IRAF native image format (OIF)

   o It was necessary to change the IRAF image format to increase the
     maximum path length for header and pixel files.  This made it necessary
     to change the disk image format, since the old format only allowed 80
     characters for the pixel file pathname.  The path lengths can now be up
     to 255 characters.

     Support for two versions of the image and pixel file headers was added.
     V2.11 will read both the old image format (V1) and the new image format
     (V2). But the new image format is not readable by older versions of IRAF.

   o Native format IRAF images (OIF type or extension ".imh") are now machine
     independent, for example, a PC and a Sun can now access the same images.

   o Support was added for byte swapping pixels. With the machine independent
     image header, this allows .imh images to be read on any node (integer)
     or any IEEE-compatible node (floating).

   o Some pointers: "strings foo.imh" (or other tools like the "less" file
     viewer) can be used at the Unix level to look at the text contained in
     the new V2 OIF image headers.


3.3 IMFORT changes

   o IMFORT was brought up to date to read and write the new V2 ".imh" images.
     The old V1 format is still supported but new images are written using
     the new machine independent V2 format by default.

   o Image headers can now be any size (the old IMFORT had a fixed, relatively
     low, limit on the image header size).

   o The "min_lenuserarea" variable is now supported by IMFORT (since IMFORT
     is host level the variable must be defined in the host environment).
     The builtin default header buffer is 64000 chars, which is about 800
     card images.


3.4 Environment variables

Several new environment variable have been added to the system.

   o The new environment variable imextn determines the image kernels
     (image file formats) recognized by IRAF and defines the mapping of
     imagefile extensions to these image formats.  A file that does not have
     an extension listed in imextn may not be recognized as an image by all
     IRAF tasks.  The default value of imextn is as follows:

          imextn = "oif:imh fxf:fits,fit plf:pl qpf:qp stf:hhh,??h"

     IRAF tasks will not recognize a file as an image unless it has an
     extension (except rfits which will read FITS files on disk that
     have no extensions).  The rename task can be used to add
     extensions to image files if needed. "imextn" can be redefined (use
     reset imextn = "new-value") to modify the mapping of extensions to
     image types.

     The meaning of the fields of the default "imextn" are as follows.  Each
     substring corresponds to a single kernel. The "xxx:" is the internal
     name of the image kernel, i.e. "oif", "fxf", "plf", etc.  A comma
     delimited list of the extensions, or extension patterns, associated with
     that image format follows the colon.  For example, for the FITS image
     kernel, the internal kernel name is "fxf" and the system default file
     extensions are ".fits" and ".fit".

        - oif:imh - The original (native) IRAF image format.

        - fxf:fits,fit - The FITS image extension format, which supports
          classical FITS images as well as multi-extension FITS files.

        - plf:pl - The pixel list format used for compressed pixel masks.

        - qpf:qp - The QPOE image format for event list data (typically
          X-ray or other high energy data).

        - stf:hhh,??h - The Space Telescope runtime GEIS image format.

     Users can define extensions for the fxf and stf kernels. For example,
     if you have FITS files on disk that have a .ft extension then you can
     reset imextn so that IRAF will recognize these image extensions:

          cl> reset imextn="fxf:ft"

     The new .ft extension for the FITS kernel images will now override the
     default values - the other kernels remain unchanged. ".fits" will no
     longer be recognized as a FITS file unless you include it in the list
     of extensions for the "fxf" kernel.

     The first extension given for a kernel defines the default file
     extension for new images of that type (rather than e.g. the value of
     imtype, or a builtin default).

     The value of "imextn" is only read once when a process starts up. Hence
     it is advisable to do a "flpr" (flush process cache) after changing
     this variable, to force all processes to re-read it.

   o The environment variable imtype defines the default image type for
     new images created by IRAF.  If a file extension is given explicitly
     when creating a new image then this file extension, in combination with
     the "imextn" mappings, determines the type of the new image.  Otherwise
     the type is determined by the value of "imtype".  Typical values are
     "imh" for native IRAF images, or "fits" for FITS images.  The internal
     kernel name documented above for "imextn" can be used instead of a file
     extension to ensure that the desired image format is used regardless of
     what extensions are assigned to that type by imextn.

     The default value of imtype is "oif,noinherit" which means that the
     IRAF native format is the default for all new images, regardless of the
     type of the input image (i.e. do not "inherit" the input image type).
     "inherit" was the default in V2.10 and earlier versions of IRAF.

     For example, if you wish to use FITS as the default for new images you
     can set imtype=fits as follows:

            cl> reset imtype="fits"
            cl> flpr                  % needed before the next task execution

     Assuming "imextn" defines ".fits" as a valid file extension for FITS
     imagefiles (kernel "fxf"), all new images produced by IRAF will be FITS
     files with the extension .fits unless some other extension is given
     explicitly when creating a new image.

            cl> reset imtype = "imh,inherit"

     This example sets the default type for new images to ".imh" for native
     format images, but enables image type inheritance.  By default new
     images will be of the same type as the input image.  For example if a
     FITS image is being read another FITS image will be output, or if a
     pixel mask is being read a pixel mask will be created.

     You can override the default output image type specified by imtype by
     giving an image extension (as defined by imextn) explicitly in the image
     name, e.g. "pix.imh", "pix.fits", "pix.pl" and so on.

   o A new environment variable called imclobber has been added.
     The default value is set to no. If imclobber is set to yes, images
     can and will be overwritten, without warning, when you create new
     images.

   o The original IRAF image format (OIF) kernel now supports an environment
     variable oifversion which, if defined, specifies the file
     version for new OIF images (for example, oifversion=2 produces the
     new format, or version 2 images).  By default the variable is undefined,
     the builtin OIF default will be in effect, and new-format images will
     be generated.  This variable is provided only for backwards
     compatibility, e.g., when using V2.11 IRAF with old software which
     cannot easily be updated.


3.5 New intrinsic functions

Two  new  intrinsic functions were added to the CL, imaccess and defvar.
imaccess tests whether an image exists, e.g.,  (imaccess("dev$pix"))  or
(imaccess(foo.fits[3])).   defvar  tests whether an environment variable
exists, e.g. (defvar("imextn")).


3.6 System default modifications

   o The default size of the user area (min_lenuserarea) was increased
     to 64000 (about 800 80 character cards).  There was some ambiguity about
     units for min_lenuserarea; it should be consistently characters now.

   o The maximum number of open IRAF logical files was increased from 128 to
     256. This is good news for imcombine users.

   o Various buffer limits were increased:

        - The IRAF line length was increased from 161 to 1023 characters.
          One often ran into this lower limit when entering a long list of
          input image names, for example.

        - CL commands can now be 2047 characters long (the old limit was
          1024) - this is particularly useful for scripts.

        - IRAF file names can now be up to 255 characters long.

        - Expanded file names (pathnames) can be up to 511 characters long.


3.7 Libraries added

The Starlink positional astronomy library SLALIB was added to  the  math
package.


3.8 Graphics changes

   o SGI Translator change: Modified the header ID string produced by
     sgi2uapl to be "%!PS", this is required by certain models of printers.

   o Installed graphcap support for the STSDAS PostScript graphics kernel.

   o The SGI graphics kernel was upgraded with a better roman font, and a
     new greek font was added. To use the new high-quality greek fonts use
     the "\fG" escape sequence when you use the "T" keystroke to mark text
     in a plot, e.g., \fGa Hydra would produce " Hydra". The greek font
     may also be used in label parameters for tasks like GRAPH, for example

             cl> graph dev$pix xlabel="Wavelength\\fG(A)"

     would produce an Angstrom symbol in parenthesis.  The double backslash
     is necessary to pass the escape string thru the CL.  A file containing
     the mappings for the greek fonts and other special characters can be
     found at http://iraf.noao.edu/greek.ps.


3.9 FITS-related core-level task changes


3.9.1 IMHEADER

The  behavior of imheader has changed a bit - typed with no arguments it
will list all the images in the current directory, as in  the  following
example:

            cl> imhead
            pix4.imh[512,512][short]: m51  B  600s
            boc.fits: FXF: must specify which FITS extension (boc.fits)
            fits.fits[512,512][short]: m51  B  600s
            pix.fits[512,512][short]: m51  B  600s
            pix3.fits[512,512][short]: m51  B  600s
            pix5.fits: FXF: must specify which FITS extension (pix5.fits)
            zero.fits: FXF: must specify which FITS extension (zero.fits)
            mask.pl[512,512][int]: m51  B  600s
            foo.qp[1024,811][int]:

The  multi-extensions  FITS  files  show up in the list with the message
"FXF: must specify which FITS  extension",  since  these  files  contain
multiple  images  and  the task does not know which image to open to get
header information.

At present imheader does not use "imextn" to determine what  is  and  is
not  an  image.  The  parameter  "imlist"  defines  the  valid imagefile
extensions. If imextn is modified "imlist" may need to  be  modified  as
well.


3.9.2 RENAME

The  rename  task  was  modified  to allow a destination directory to be
specified without changing the filename.  A new "field" parameter option
"all"  was  added and made the default so the entire filename is changed
(or moved in the case of a destination directory).  When  field  is  set
to "extn" filenames without an extension will not have the new extension
appended so a filename isn't generated which can get overwritten.


3.9.3 rfits/wfits

Some changes were also implemented in rfits and  wfits  to  add  support
for multi-extension FITS files.

   o The default action of wfits when writing to tape is unchanged for
     single image files.

     wfits now has a new parameter called "fextn" and it is set to
     "fits".  This parameter only affects FITS files written by wfits
     to disk - the extension .fits will automatically be added to the
     filenames, so that the files will be automatically recognized by
     the FITS image kernel.

     wfits also has two additional parameters called "extensions" and
     "global_hdr" that deal with writing multi-extension FITS files.

   o The default action of rfits from tape to disk remains unchanged.

     If rfits is used to read FITS files on disk then users need to
     be aware of a change to the behavior of the "file-list" parameter.
     File-list is now used to define the list of files on the tape as
     well as the list of extensions in a multi-extension FITS image.
     To read single FITS images on disk use "" as the value for
     "file-list". Some users have been using "1" for this value but now
     that value will try to read the first extension which doesn't
     exist - use "0" if you wish to put something there.

     rfits will unpack multi-extension FITS files upon a read. If you
     wish to retain the multi-extension FITS format then use T2D and
     RENAME.

The help pages have been updated to reflect these changes.

wfits  now  writes  ushort (16 bit unsigned short) images to FITS images
with bitpix=16, bscale=1.0, and bzero=32768.0 by  default.   rfits  will
read these images back as type ushort.


3.10 General changes

   o The GSURFIT package has been updated to include support for the "half"
     cross terms option useful in computing plate solutions.  Tasks that can
     make use of this feature have been updated although their default
     behaviors have not changed.

   o The code which computes the CD matrix from CDELT/CROTA was modified.
     The old code computed the diagonal (scale) terms correctly but the
     rotation terms were evidently incorrect.  The old code was based on
     the 1988 Hanisch and Wells WCS paper and the new code is based on a
     more recent paper by Mark Calabretta et al, which supercedes the
     1988 representation.  The affect of this change should be limited
     as it only affects rotated images for which CDELT is given but no
     CD matrix is defined. (V2.10.4p2)

   o Several new celestial coordinate projection functions have been added.
     Users with IPAC data that use the CAR projection function should now be
     able to read the image coordinates directly with LISTPIXELS, etc.


4. New tasks, or old tasks moved to new packages

 Task Name      Package                  Function

 CCXYMATCH      IMCOORDS         Four new tasks for computing and evaluating
 CCMAP                           simple astrometric plate solutions and storing
 CCSETWC                         them in the image headers in fits-compatible
 CCTRAN                          format.

 CCFIND         IMCOORDS         CCFIND locate objects in an image given a
                                 celestial coordinate list and the image wcs.

 IMCCTRAN       IMCOORDS         Two new tasks for transforming celestial
 SKYCTRAN                        coordinate lists and image celestial
                                 coordinate systems from one celestial
                                 coordinate system to another.

 STARFIND       IMCOORDS         STARFIND automatically detects stellar objects
                                 in a list of images.

 WCSCTRAN       IMCOORDS         A new task for transforming between IRAF image
                                 coordinate systems.

 WCSEDIT        IMCOORDS         Two unaltered former PROTO package tasks for
 WCSRESET                        editing IRAF image coordinate systems.

 FRMEDIAN       IMFILTER         Four new tasks for doing circular/elliptical/
 FRMODE                          ring image median filtering.
 RMEDIAN
 RMODE

 IM3DTRAN       IMGEOM           The former addon VOL package task IM3DTRAN for
                                 doing 3D image transposes.

 GEOXYTRAN      IMMATCH          A new task for transforming coordinate lists
                                 using the results of the GEOMAP task.

 IMCENTROID     IMMATCH          Four new tasks for computing matched pixel
 SKYXYMATCH                      lists. IMCENTROID is a modified version of the
 WCSXYMATCH                      PROTO package task of the same name.
 XYXYMATCH

 SKYMAP         IMMATCH          Two new tasks for computing geometric
 WCSMAP                          transforms using the image coordinate system
                                 information.

 IMALIGN        IMMATCH          Three new tasks for doing automated image
 SREGISTER                       registration. IMALIGN is a modified version
 WREGISTER                       of the PROTO package task of the same name.

 WCSCOPY        IMMATCH          A new task for copying the coordinate system
                                 of a reference image to a set of input images.

 PSFMATCH       IMMATCH          A new task for matching the PSFs of a set of
                                 input images to the PSF of a reference image
                                 using Fourier techniques.

 LINMATCH       IMMATCH          A new task for matching the linear intensity a
                                 scale of a set of input images to the
                                 intensity scale of a reference image.

 IMFUNCTION     IMUTIL           The former PROTO package task for applying a
                                 single argument function to an image.

 IMJOIN         IMUTIL           The former addon VOL package task for joining
                                 same-dimensioned images along a specified
                                 dimension.

 IMREPLACE      IMUTIL           The former PROTO package task IMREPLACE for
                                 replacing bad pixels based on their value.

 IMTILE         IMUTIL           A modified version of the NOAO.PROTO IRMOSAIC
                                 task for tiling same sized 2D images into a
                                 single mosaiced image.

 EXPORT         DATAIO           Two new tasks from the external IMCNV package
 IMPORT                          for exporting IRAF images to binary formats
                                 and for importing binary files into IRAF
                                 images.

 TEXT2MASK      PROTO            This new task appears in conjunction with a
                                 new  pixel mask based version of FIXPIX.

 IMEXTENSIONS   PROTO            This task selects and lists image extensions 
                                 in  files.   Image extensions currently occur 
                                 in  multi-extension FITS files and multi-group 
                                 Geiss (STF format) files.
   
 CCDMASK        CCDRED           This new task creates a pixel mask from a
                                 CCD image.

 AIDPAR         ONEDSPEC         New parameter set for automatic line
                                 identification for the tasks AUTOIDENTIFY,
                                 IDENTIFY and REIDENTIFY.

 AUTOIDENTIFY   ONEDSPEC         A new task to automatically identify lines
                                 and fit the dispersion function.

 SKYTWEAK       ONEDSPEC         Sky spectra are shifted and scaled to best
                                 subtract sky features from data spectra.

 TELLURIC       ONEDSPEC         Telluric calibration spectra are shifted and
                                 scaled to best divide out telluric features
                                 from data spectra.

 ASTCALC        ASTUTIL          An astronomical calculator.

 ASTRADIUS      ASTUTIL          Finds images within a circle on the sky.


5. Task and package deletions

CUBE,  DUMP,  GSUBRAS,  MAXMIN,  MKIMAGE,  MKTEST: These tasks have been
superseded by the equivalent tasks in the IMAGES  or  ARTDATA  packages.
The    functionality    of    these    tasks   still   exists   in   the  
iraf$pkg/images/lib/zzdebug.x file.

REGISTER: This task has been renamed to GREGISTER.

IMALIGN, IMCENTROID, IMFUNCTION, IMREPLACE, WCSEDIT, WCSRESET: Moved  to
the IMAGES package.


6. Modifications to old tasks

Grouped  by  package,  a  list of modifications to old tasks in IRAF are
summarized below.  We have  included  modifications  since  the  V2.10.3
release.

IMFILTER:
    FMEDIAN, FMODE, MEDIAN, MODE
        Minimum and maximum good data value parameters zloreject and zhireject
        and a verbose option parameter were added.
    MEDIAN, MODE
        The 64 x 64 maximum kernel size limit was removed from these tasks.

IMMATCH:
    GEOMAP
        Renamed the output parameter to database for the sake of consistency
        with other new images tasks.

        Changed the default value of the reject parameter from 0.0 to INDEF.

        Added the transforms parameter. Transforms permits the user to specify
        the names of the output database records explicitly.

        Added the parameter results. Results permits the user to save a summary
        of the results including a description of the transform geometry, and a
        listing of the input coordinates, the fitted coordinates, and the fit
        residuals.

        Added the fitgeometry parameter. Fitgeometry permits the user to
        constrain the linear part of the fit to: 1) x and y shifts only, 2) x
        and y shifts and rotation only, 3) x and y shifts and x and y scale
        changes only, 4) x and y shifts, rotation, and a scale change only, 5)
        x and y shifts, rotation, x and y scale changes only, and 5) x and
        shifts, rotation, skew, and x and y scale changes.
    GREGISTER
        Renamed the register task gregister to emphasize that it is paired with
        the geomap task and to avoid confusion with the new registration tasks.
    GEOTRAN, GREGISTER
        Renamed the transform parameter to transforms.

        Added the verbose parameter.
    GEOTRAN
        Added the ability to write to a section of an existing image.
    IMCOMBINE
        The  limit of the number of images that may be combined has been
        removed.  If the number of images exceeds the maximum number  of
        open  images  permitted  then the images are stacked in a single
        temporary image and  then  combined  with  the  project  option.
        Note   that   this   will   double   the   amount  of  diskspace
        temporarily.  There is also a limitation in this case  that  the
        bad  pixel mask from the first image in the list will be applied
        to all the images.

        Integer  offsets  may  be  determined  from  the   image   world
        coordinate system.

        A  combination  of  ushort  and  short  images  now  defaults to
        integer.

        Added support for type ushort images.

        Added a new options for computing offsets using the image wcs.

        Removed the limit on the maximum number of images that can be combined.
    IMALIGN, IMCENTROID
        Renamed the images parameter to input, changed the reference parameter
        mode from hidden to automatic, and reversed the order of the reference
        and coords parameters.

IMUTILS:
    IMEXPR
        Modified the task so that it will accept an image name that looks like
        a number in the first few characters, but which is really an image
        name.  For example, "123.imh" or "../foo.imh".  The previous version
        of imexpr was treating any string which looked like a number in the
        first few characters as a numeric constant. (V2.10.4p2)
    IMREPLACE
        The lower value is now rounded up for integer images so  that  a
        range like 5.1-9.9 affects pixels 6-9 instead of 5-9.
    IMSUM
        Now allows "ushort" data types.

TV:
    DISPLAY
        The bad pixel mask,  overlay  mask,  sample  mask,  and  overlay
        colors  parameters  and  functionality  have  been  added.   The
        "nsample_lines" parameter is now an "nsample" parameter.

        Bugs in the coordinate system sent  to  the  image  display  for
        cursor readback were fixed.
    IMEDIT
        If  xorder  or  yorder  are  zero  then  a  median background is
        computed for the 'a' and 'b' keys.
    IMEXAMINE
        ('a'  and  'r'):  The  fit  to  the  radial  profile  points now
        includes both a Gaussian  and  a  Moffat  profile.   The  Moffat
        profile  exponent  parameter, beta, may be fixed or left free to
        be fit.

        ('a' and 'r'): New estimates fo the FWHM were added to  the  'a'
        and  'r'  keys.   These  include  the  Moffat  profile fit noted
        above, a direct  measurement  of  the  FWHM  from  the  radially
        binned  profile,  and  a  Gaussian  or  Moffat fit to the radial
        enclosed flux profile.  The output from these keys was  modified
        to include the new information.

        ('a'  and  'r'):  The  direct  FWHM  may  be used to iteratively
        adjust the fitting  radius  to  lessen  the  dependence  on  the
        initial fitting radius value.

        ('k'): Added a kimexam parameter set.

        The default value of rimexam.magzero parameter was changed from
        30.0 to 25.0 for consistency with the digiphot package.

PROTO:
    FIELDS
        The default value for the lines parameter was changed to an open
        upper limit.

        Changed the default value of the lines parameter from "1-999" to
        "1-" so that the upper bound would be open ended.
    FIXPIX
        This  task  replaces  the  old  task  (now obsolete.ofixpix) and
        works with the more general  pixel  mask  facilities.   It  also
        provides   greater  flexibility  in  chosing  the  interpolation
        direction.

ICFIT used in various tasks:
    ICFIT
        The  :xyshow output was modified to 1) not include colon labels,
        2) print (X, Y, Y fit, Weight) instead of (X, Y fit, Y), and  3)
        the printed values are those actually used in the fit when using
        composite points (naverage not 1).

ARTDATA:
    MK1DSPEC
        Lorentzian and Voigt profiles were added and the parameters  and
        input  line  list  format were changed.  The widths are now FWHM
        instead of gaussian sigmas.
    MKOBJECTS, MKNOISE
        The default value of "ranbuf" was changed to zero.
    GALLIST
        The  default value for the minimum elliptical galaxy axial ratio
        was changed to 0.3 to cover the range E0-E7 uniformly.
    MKPATTERN
        Now allows ndim=0 to make an dataless header.
        Now allows ushort pixel type.

ASTUTIL:
    SETJD
        The  checking  of  the  epoch  keyword   value   was   improved.
        Previously  if  there  was  a  problem  with  the  keyword value
        (missing or malformed) the task  would  use  the  epoch  of  the
        observation.   Now  it  is  an  error  if  an  epoch  keyword is
        specified but the epoch  value  can't  be  determined.   Also  a
        leading  'B'  or  'J'  is allowed and a warning will be given if
        the epoch value is unlikely.
    ASTHEDIT
        There are new astronomical functions and input/output functions.
        The command syntax may now use "=" as a  delimiter  as  well  as
        the whitespace.

        A  new parameter "update" allows protecting images and accessing
        read-only images for the purpose  of  calculating  and  printing
        quantities.

        The  special variable name "$I" has the value of the image name,
        $D the current date, and $T the current time.

        The case of no image name creates and deletes a temporary  image
        so  the  task  can  be  used  purely  as  a  calculator (but see
        astcalc).

CCDRED:
    CCDPROC
        The  bad  pixel fixing was modified to allow use of pixel masks,
        images, or the text file description.  Bad pixel masks  are  the
        desired  description and use of text files is only supported for
        backward compatibility.  Note that support for  the  trimmed  or
        untrimmed conversion from text files has been eliminated.

        Line-by-line  overscan/prescan  subtraction is now provided with
        three simple algorithms.
    COMBINE
        The  limit of the number of images that may be combined has been
        removed.  If the number of images exceeds the maximum number  of
        open  images  permitted  then the images are stacked in a single
        temporary image and  then  combined  with  the  project  option.
        Note   that   this   will   double   the   amount  of  diskspace
        temporarily.  There is also a limitation in this case  that  the
        bad  pixel mask from the first image in the list will be applied
        to all the images.

        Integer  offsets  may  be  determined  from  the   image   world
        coordinate system.

        Fixed a bug where a variable was improperly used for two different 
        purposes causing the algorithm to fail.  This also affected IMCOMBINE
        and SCOMBINE.  See bug 316 for details. (V2.10.4p2)
    COSMICRAYS
        The output bad pixel data accidentally included some extra fields 
        making it incorrect to use the file directly with BADPIXIMAGE.  
        The extra diagnostic fields were removed.  For details, see bug 311
        in the buglog. (V2.10.4p2)

ECHELLE:
    ECIDENTIFY
        The  dispersion  units are now determined from a user parameter,
        the coordinate list, or the database entry.

IMRED Spectral Packages:
    DOARGUS, DOFIBERS, DOHYDRA
        A  sky  alignment option was added.

        The aperture identification can new be taken from image  header
        keywords.

        The initial arc line identifications is done with the automatic
        line identification algorithm.
    DOSLIT, DO3FIBER
        The initial arc line identifications is done with the automatic
        line identification algorithm.

ONEDSPEC:
    Support for the Sloan Sky Survey was added by allowing multifiber
    reductions with up to 500 fibers with non-linear dispersions. (V2.10.4p2)

    BPLOT
        Fixed a general problem in BPLOT and SLIST that caused a segmentation
        violation error.  See buglog 312 for details. (V2.10.4p2)
    FITPROFS
        Modified  to  include  lorentzian  and  voigt   profiles.    The
        parameters  and  positions  file  format  have  changed  in this
        version.  A new parameter controls  the  number  of  Monte-Carlo
        samples used in the error estimates.
    IDENTIFY
        The  dispersion  units are now determined from a user parameter,
        the coordinate list, or the database entry.
        A new key, 'e', has been added to add features from a line  list
        without  doing  any  fits.  This is like the 'l' but without the
        automatic fitting before and after adding new features.

        A new key, 'b', has  been  added  to  apply  an  automatic  line
        identification algorithm.

        The  'x'  key  has  been  changed  to  use  the  automatic  line
        identification  algorithm.   The  allows  finding  much   larger
        shifts.

        The  match  parameter  may  now  be  specified  either  in  user
        coordinates or in pixels.  The default is now 3 pixels.

        The default threshold value has been changed to 0.
    REIDENTIFY
        A new parameter, "search", was added to specify a search radius
        for the automatic line identification algorithm.
 
        The "nlost" parameter now also applies when not tracing; i.e. it
        will issue a warning and not record a solution if the specified
        number of features is lost when reidentifying against a specific
        reference spectrum as is done with multispec data.

        The  task  will  now  work  with only a warning if the reference
        image is absent; i.e. it is possible to  reidentify  given  only
        the database.

        The  addfeatures  function will now add features before a fit if
        there are no reference database features.   Previously  features
        could  only  be  added  after an initial fit using the reference
        features and, so, required the  reference  database  to  contain
        features  for  reidentification.   This new feature is useful if
        one wants to  uses  a  dispersion  function  from  one  type  of
        calibration  but  wants  to add features for a different kind of
        calibration.
    SAPERTURES
        This task has  been  modified  to  allow  use  of  image  header
        keywords as done in the APEXTRACT package.
    SARITH
        Previously  both w1 and w2 had to be specified to select a range
        to be used.  Now if only one is specified  the  second  endpoint
        defaults to the first or last pixel.

        The noise band in multispec data is only copied from the primary
        spectrum and not modified.  This is a kludge until the noise  is
        handled properly.

        Fixed a problem in SARITH and SCOPY where a segmentation error 
        occurred when a wavelength range was specified in the reverse sense 
        of the data and without rebinning.  See buglog 323 for details.
        (V2.10.4p2)
    SBANDS
        Fixed a problem in SBANDS that caused a segmentation violation when 
        the number of input bandpasses was greater than 10.  See buglog 298
        for details. (V2.10.4p2)
    SCOPY
        Previously both w1 and w2 had to be specified to select a  range
        to  copy.   Now  if  only  one  is specified the second endpoint
        defaults to the first or last pixel.
    SPECPLOT
        The  scale and offset parameters may now be a value, a filename,
        or and image header keyword.

        The 'f' key was added to toggle between world and logical  pixel
        coordinates.
    SPLOT
        The profile fitting  and  deblending  was  expanded  to  include
        lorentzian  and  voigt  profiles.   A new parameter controls the
        number of Monte-Carlo samples used in the error estimates.
    RSPECTEXT
        The task now automatically senses the presence of a header.

APEXTRACT:
    APALL, APSUM, APNOISE, APNORMALIZE, APSCATTER, APTRACE,
    APRECENTER, APRESIZE, APMASK, APFIND, APFLATTEN
        The  "apertures"  parameter  can be used to select apertures for
        resizing, recentering, tracing, and extraction.  This  parameter
        name   was  previously  used  for  selecting  apertures  in  the
        recentering algorithm.  The new parameter name for this  is  now
        "aprecenter".
    APALL, APSUM
        The "nsubaps" parameter now allows onedspec and  echelle  output
        formats.   The  echelle  format is appropriate for treating each
        subaperture as a full echelle extraction.
    APALL
        The  aperture  ID  table information may now be contained in the
        image header under the keywords SLFIBnnn.
    APSUM
        The dispersion axis parameter was  moved  to  purely  a  package
        parameter.

        As  a  final step when computing a weighted/cleaned spectrum the
        total  fluxes  from  the  weighted  spectrum  and   the   simple
        unweighted   spectrum   (excluding  any  deviant  and  saturated
        pixels) are computed and a "bias" factor of  the  ratio  of  the
        two  fluxes  is  multiplied  into  the weighted spectrum and the
        sigma estimate.  This makes the total fluxes the same.  In  this
        version  the  bias  factor  is recorded in the logfile if one is
        kept.  Also a check is made for unusual bias  factors.   If  the
        two  fluxes  disagree  by more than a factor of two a warning is
        given on the standard output and the logfile with the individual
        total  fluxes as well as the bias factor.  If the bias factor is
        negative a warning is also given and no bias factor is  applied.
        In  the  previous  version  a negative (inverted) spectrum would
        result.

RV:
    RVIDLINES, RVREIDLINES
        These tasks now work in the units of the input spectra.
    FXCOR
        The input spectra are converted to Angstroms for the
        crosscorrelation and analysis.  Thus the velocities will
        be correctly computed regardless of the units of the
        input spectra.

DAOPHOT:
    DAOFIND
        A major bug in the DAOFIND task centering code that affects the
        computed x and y positions was fixed. Users should refer to bug 
        log entry number 332 for details. (V2.10.4p2)

        A new roundness statistic was added to the DAOFIND output to
        bring the task into conformance with standalone DAOPHOT II. The new
        statistic is sensitive to and tries to eliminate detected objects
        which are significantly elongated in directions other than 0, 90,
        180, and 270 degrees. The original roundness statistic is stored in
        the ground column, the new one in the sround column. The same
        default roundness limits apply to both statistics. (V2.10.4p2)

    DAOPARS
        Added a new parameter "mergerad" to the DAOPARS parameter set.
        Mergerad permits the user to control the merging process. If
        mergerad is INDEF (the default setting) the default merging radius
        is used. If mergerad is 0 object merging is turned off altogether.
        Otherwise the user can set the merging radius to a specific value.
        Mergerad is used by the nstar and allstar tasks, but their default
        behavior is unchanged. (V2.10.4p2)
 
        Changed the name of the "critovlap" parameter to "critsnratio" to
        avoid confusion with the the meaning of the parameter especially
        with regard the mergerad parameter. The behavior of the parameter is
        unchanged. (V2.10.4p2)


7. Parameter file changes

The  parameter  file changes below are for modifications between V2.10.4
and V2.11.  For a list of parameter file  changes  between  V2.10.3  and
V2.10.4 see the file iraf/v210/params.v2104.Z in the IRAF FTP archives.

In  the tables below each parameter change is identified with one of the
following   codes   followed   by   task_name.parameter_name   and   the  
description of the change.

    n = new parameter
    c = changed/modified parameter
    d = deleted parameter

TV:
 n  display.nsample: replaces nsample_lines
 d  display.nsample_lines: replaced by nsample
 n  display.bpmask: specify a bad pixel mask
 n  display.bpdisplay: specify display mode for bad pixel mask
 n  display.bpcolors: specify overlay colors for bad pixel mask
 n  display.overlay: specify an overlay mask
 n  display.ocolors: specify overlay colors for overlay mask
 n  display.zmask: specify a sample mask for the zscale calculation
 c  imedit.xorder: now allows a value of zero for median background
 c  imedit.yorder: now allows a value of zero for median background
 n  rimexam.fittype: specify a profile type to fit - default is now moffat
 n  rimexam.iterations: specify number of iterations to adjust fitting radius
 n  rimexam.beta: specify beta value for moffat fitting
 c  rimexam.buffer: default value changed from 1 to 5
 c  rimexam.width: default value changed from 2 to 5
 c  rimexam.magzero: default value changed from 30 to 25
 n  wcslab.overplot: specify overplotting

DATAIO:
 n  wfits.fextn: extension to append to output disk FITS filename - default is
      fits
 n  wfits.extensions: write all images to a single FITS file ? - default is no
 n  wfits.global_hdr: prepend a global header to the FITS extensions - default
      is yes

IMAGES:
 n  fmedian.zloreject: good data minimum
 n  fmedian.zhireject: good data maximum
 n  fmedian.verbose: verbose option
 n  fmode.zloreject: good data minimum
 n  fmode.zhireject: good data maximum
 n  fmode.verbose: verbose option
 n  median.zloreject: good data minimum
 n  median.zhireject: good data maximum
 n  median.verbose: verbose option
 n  mode.zloreject: good data minimum
 n  mode.zhireject: good data maximum
 n  mode.verbose: verbose option
 n  geomap.transforms: list of record names
 n  geomap.results: results summary file
 n  geomap.fitgeometry: fitting geometry
 d  geomap.output: renamed to database
 c  geomap.reject: changed from 0.0 to INDEF
 n  [g]register.verbose: verbose option
 d  [g]register.transform: renamed to transfo
 n  geotran.verbose: verbose option
 d  geotran.transform: renamed to transforms
 c  imcombine.offsets: now allows specifying "wcs" to compute offsets from WCS
 d  imalign.images: renamed to input
 c  imalign.reference: went from hidden to auto
 c  imalign.coords: reversed places with reference
 d  imcentroid.images: renamed to input
 c  imcentroid.reference: went from hidden to auto
 c  imcentroid.coords: reversed places with reference
 n  imheader.imlist: default image names

PLOT:
 n  graph.ltypes: specify the line types
 n  graph.colors: specify the colors

PROTO:
 n  fixpix.masks: new version specifies bad pixel masks
 n  fixpix.linterp: specify mask values for line interpolation
 n  fixpix.cinterp: specify mask values for column interpolation
 n  fixpix.pixels: list pixels that are modified
 d  fixpix.badpixels: new version does not use bad pixel region description
 c  fields.lines: default value changed from "1-9999" to "1-"

ARTDATA:
 n  mk1dspec.profile: define the profile type
 n  mk1dspec.gfwhm: replaces sigma for gaussian profile width
 n  mk1dspec.lfwhm: width for lorentzian profile
 c  artdata.randbuf: default value changed from 1000 to 0.
 c  mkpattern.ndim: allows a value of 0 for a dataless header.
 c  mkpattern.pixtype: allows ushort.
 c  gallist.ar: default value changed to 0.3.
 d  mk1dspec.sigma: replaced by gfwhm

ASTUTIL:
 n  rvcorrect.keywpars: added to define keywords used
 n  asthedit.prompt: used for new calculator option
 n  asthedit.update: update the header
 n  asthedit.oldstyle: to allow backward compatibility

APEXTRACT, IMRED spectral packages:
 n  apnoise.apertures: select apertures to be used
 n  apfit.apertures: select apertures to be used
 n  apedit.apertures: select apertures to be used
 n  apfind.apertures: select apertures to be used
 n  apnormalize.apertures: select apertures to be used
 n  apscatter.apertures: select apertures to be used
 n  apsum.apertures: select apertures to be used
 n  aptrace.apertures: select apertures to be used
 n  apresize.apertures: select apertures to be used
 n  apmask.apertures: select apertures to be used
 n  apflatten.apertures: select apertures to be used
 n  aprecenter.apertures: select apertures to be used
 n  aprecenter.aprecenter: was what was previously the apertures parameter
 n  apall.apertures: select apertures to be used
 n  apall.aprecenter: was what was previously the apertures parameter

ARGUS, HYDRA, SPECRED:
 n  doargus.crval: for automatic line identifications
 n  doargus.crdelt: for automatic line identifications
 n  doargus.skyalign: night sky alignment option
 n  dohydra.crval: for automatic line identifications
 n  dohydra.crdelt: for automatic line identifications
 n  dohydra.skyalign: night sky alignment option
 n  dofibers.crval: for automatic line identifications
 n  dofibers.crdelt: for automatic line identifications
 n  dofibers.skyalign: night sky alignment option
 n  do3fiber.crval: for automatic line identifications
 n  do3fiber.crdelt: for automatic line identifications

ARGUS, HYDRA, KPNOCOUDE, KPNOSLIT, SPECRED:
 c  params.match: default value changed to -3 (3 pixels instead of Angstroms)
 c  sparams.match: default value changed to to -3 (3 pixels instead of Angs)

ONEDSPEC, IMRED spectral packages:
 d  fitprofs.sigma: replaced by gfwhm
 d  fitprofs.function: replaced by profile
 d  fitprofs.fitsigmas: replaced by fitgfwhm
 d  rspectext.header: removed since the task now senses the header information

ONEDSPEC, LONGSLIT, IMRED spectral packages:
 n  identify.units: specify the desired units for the dispersion function
 n  identify.crval: for automatic line identifications
 n  identify.crdelt: for automatic line identifications
 n  identify.aidpars: parameter set for automatic line identifications
 c  identify.match: default value changed to -3 (3 pixels instead of Angstroms)
 c  identify.threshold: default value changed from 10 to 0.
 c  reidentify.match: default value changed to -3 (3 pixels instead of Angs)
 c  reidentify.threshold: default value changed from 10 to 0.
 n  reidentify.crval: for automatic line identifications
 n  reidentify.crdelt: for automatic line identifications
 n  reidentify.aidpars: parameter set for automatic line identifications
 n  reidentify.search: specify a search radius for the automatic line 
       identification algorithm
 n  ecidentify.units: specify the desired units for the dispersion function
 n  fitprofs.profile: define the profile type
 n  fitprofs.gfwhm: replaces sigma for gaussian profile width
 n  fitprofs.lfwhm: width for lorentzian profile
 n  fitprofs.fitgfwhm: replaces fitsigmas
 n  fitprofs.fitlfwhm: select whether to fit lorentzian profile widths
 n  fitprofs.nerrsample: allows control of the error calculation accuracy
 n  splot.nerrsample: allows control of the error calculation accuracy

CCDRED:
 c  ccdproc.fixfile: this now specifies a bad pixel mask
 c  combine.offsets: now allows specifying "wcs" to compute from WCS

RV:
 n  rvcorrect.par: Added the KEYWPARS pset declaration

DAOPHOT:
 c  daopars.critsnratio: critical S/N ratio for group membership - changed
       the name only from critovlap (V2.10.4p2)
 n  daopars.mergerad: critical object merging radius in scale units
    (V2.10.4p2)
IRAF (Jul92)             V2.10 Revisions Summary            IRAF (Jul92)


                  IRAF Version 2.10 Revisions Summary
                               July 1992




1. Introduction

    This document summarizes the changes made to IRAF in  version  2.10.
V2.10  is  a  major release of IRAF, meaning that there were significant
changes to both the system and applications software,  and  the  release
will eventually be made available on all supported platforms.

By  IRAF  version  2.10  we  refer only to the core IRAF system and NOAO
packages.  Numerous external or "layered" packages  are  also  available
for  IRAF,  for  example  the  NSO  package  (solar  astronomy), the ICE
package (data acquisition), the STSDAS  package  from  STScI  (HST  data
reduction  and  analysis), the TABLES package from STScI (tabular data),
the XRAY package from SAO (X-ray  data  analysis),  and  so  on.   These
packages  are layered upon the IRAF core system, and once installed, are
indistinguishable  from  the  rest  of  IRAF.   Layered   packages   are 
developed  and  maintained  separately  from  the  core IRAF release and
follow independent release schedules, hence we  will  not  discuss  them
further  here.   Contact  the  IRAF project or any of the outside groups
supporting IRAF layered packages for additional information on  what  is
available.

This  document is intended only as an overview of what is new in version
2.10 IRAF.  More detailed documentation will be found in the systems and
applications  notes  files (files sysnotes.v210.Z and pkgnotes.v210.Z in
the network archive), in the online help pages,  and  in  any  reference
papers  or  user's  manuals  distributed  with  the  software.  The IRAF
Newsletter is a good source of information for new IRAF software.

This revisions summary is organized as follows:

        1.  Introduction

        2.  IRAF System Revisions

        3.  IRAF and NOAO Package Revisions
            3.1. Changes to the System Packages
            3.2. Changes to the NOAO Packages

        4.  Programming Environment Revisions
            4.1. Compatibility Issues
            4.2. Portability Issues
	    4.3. Software Tools
	    4.4. Programming Interface Changes

	5.  Getting Copies of this Revisions Summary

The reader is assumed to already be familiar with the basic concepts and
operation  of  the  IRAF  system.   In particular, familiarity with V2.9
IRAF is assumed.



2. IRAF System Revisions


2.1 Starting up V2.10 IRAF

    Before attempting to start V2.10  IRAF  each  user  should  run  the
mkiraf  command  in  their IRAF login directory.  This will create a new
login.cl file and uparm (user parameter) directory.   mkiraf  should  be
allowed  to delete any existing parameter files, as there have been many
changes to task parameter sets in the new version of IRAF.


2.1.1 LOGIN.CL changes

    The login.cl file is read by the CL during startup to  perform  some
runtime  initialization and to customize IRAF for each user.  A standard
login.cl file is created and initialized by the mkiraf command when  the
user's  IRAF login directory is configured.  For V2.10 IRAF the login.cl
file has undergone the following changes.

    o   The IRAF version number is now  checked  automatically  whenever
        you  login,  and  a  warning  message  will  be  printed if your
        login.cl file is out of date.  If you see this message it  means
        that  important  changes have been made to the login.cl file and
        you need to rerun mkiraf to update this file.
    
    o   Most of core IRAF system packages are now  loaded  automatically
        at  login  time  by  the  login.cl  file.  If you use a personal
        loginuser.cl file and you  previously  loaded  any  core  system
        packages  in  this  file,  you  should  edit the file and remove
        those entries.
    
    o   A "quiet" login  option  is  now  provided.   If  a  file  named
        .hushiraf  exists  in  the login directory when you start up the
        CL, printing of the usual login messages will be  disabled  (the
        only output seen will be the "cl>" prompt).
    
    o   On  UNIX/IRAF  systems  the  login  script now looks at the host
        system environment variable  TERM  and  checks  for  the  common
        terminal  types  "sun"  and  "xterm",  configuring the IRAF stty
        accordingly if either terminal  type  is  seen  (note  that  the
        default  number  of  lines  set for an xterm terminal window may
        need to be  modified).   The  logic  used  to  do  this  is  not
        foolproof   however,   and   is  provided  only  as  an  example 
        illustrating how  to  make  use  of  the  host  system  terminal
        definitions.   You  may  need  to  customize this portion of the
        script, or override it in your loginuser.cl file.
    
    o   The CL hidden parameter showtype is now set to "yes" by default.
        This  will  cause  a  character  to be printed after the name of
        each package or named pset in CL package menus  to  allow  these
        objects   to   be  easily  distinguished  from  ordinary  tasks. 
        Packages are marked with a trailing period (".") and psets  with
        an  ampersand  ("@").   This  feature  can  be  disabled  with a
        "showtype=no" statement.
    
    o   The V2.10 login  script  contains  a  call  to  a  new  internal
        (non-user)  IRAF  task mtclean.  Be sure to leave this alone, it
        is required for the correct operation of  the  new  magtape  i/o
        system.
    
    The   USER  package  defined  in  the  template  login.cl  has  been 
    extensively revised, adding many new tasks.  These are  mainly  used
    to  make  common  UNIX  commands  available  from  within  the  IRAF 
    environment.  Type "?user" in the CL to see what is available, e.g.:
    
        cl> ?user
             adb     cp      fc      lpq     mv      rlogin  spell   top
             bc      csh     find    ls      nbugs   rsh     sps     touch
             buglog  date    finger  mail    nm      rtar    strings vi
             cal     df      ftp     make    od      ruptime su      w
             cat     diff    generic man     ps      rusers  sync    wc
             cls     du      grep    mkpkg   pwd     rwho    telnet  wtar
             comm    emacs   less    mon     rcp     sh      tip     xc
    
    
    Note that since the USER package is  defined  in  the  user's  login
    file  it  is  easily  customized  to  add  new  tasks.  Refer to the
    existing package for examples illustrating how to do this.
    
    
2.1.2 Compatibility Issues

    Version 2.10 IRAF requires the new login.cl file; if the CL does not
start  up  correctly,  it may be because the user has not done a mkiraf,
or because they have some construct in their loginuser.cl file which  is
incompatible  with V2.10 IRAF.  The V2.10 login file is usable with V2.9
IRAF, however this is not recommended.

There have been many task parameter changes between V2.9 and V2.10.   If
"parameter not found" messages are seen, most likely the user has an old
uparm directory, or has been  switching  back  and  forth  between  IRAF
versions.  An unlearn or mkiraf should fix the problem.

The  V2.10  IRAF  networking system is not fully compatible with earlier
versions of IRAF.  This can cause problems when, e.g., a newly installed
V2.10  system  is  used  to communicate with an older version of IRAF on
another system.  The  best  solution  is  to  update  to  V2.10  on  all
systems,  but  if this is not convenient it is possible to configure the
networking system to avoid the problems.  See the discussion of the  new
networking system given below.

Accessing  a  remote  magtape  device  via IRAF networking will not work
between V2.10 and older versions of IRAF  (the  remote  procedure  calls
have  changed).   To  remotely  access  magtape devices you will need to
install V2.10 IRAF on both the client and server nodes.

In  most  respects  installing  V2.10  IRAF  will  be  very  similar  to 
installing  earlier  versions  of  IRAF.   The  main  difference  is the
tapecap  file  required  to  use  the  new  magtape  system.   The   old 
dev$devices  file  is  no  longer  used.   See the discussion of the new
magtape system given below for more details.

Due to name changes in certain low level system routines (made to  avoid
name   clashes  when  linking  with  host  level  libraries)  the  V2.10 
libraries are incompatible  with  older  versions  of  IRAF.   Any  IRAF
programs  or  external  packages  relinked  under  V2.10 will have to be
fully  recompiled  or  the  linker  will   complain   about   unresolved 
externals.   Note  that so long as the old program is not relinked there
should be no problem, even if the program uses the  IRAF  shared  image,
since  the  V2.9  shared  image  is  included  in V2.10 (this applies to
Sun/IRAF systems only).

Starting  with  V2.10,  many  IRAF  applications   now   fully   support 
generalized  world  coordinates  (WCS).   While in principle this should
not pose any compatibility problems, the image headers do  contain  more
information  in V2.10 than previously, and there can be problems if, for
example, an input image contains an illegal WCS.  Previous  versions  of
IRAF  would  ignore  this  but in V2.10 such an image could result in an
error or warning message.  If WCS related problems  are  encountered  it
is probably best to contact the IRAF group for help.



2.2 CL Enhancements


2.2.1 Formatted scans and prints, scan from a pipe

    New  in the V2.10 CL (command language) are formatted scan and print
routines, and the  ability  to  scan  from  a  pipe  or  other  form  of
redirected  input.   These  new  facilities will prove most useful in CL
scripts.

The old unformatted scan and print routines are  the  following.   These
are  still available and are the simplest routines to use where they are
adequate.

      scan (arglist)          # scan standard input
     fscan (list, arglist)    # scan a list
     print (expr, exprlist)   # print to standard output
    fprint (param, exprlist)  # print to a string buffer


For example,

    list = "filename"
    while (fscan (list, x, y) != EOF)
        print ("x=", x, "y=", y)


In the above, arglist is a comma  delimited  list  of  output  arguments
(parameter  or  parameter field names) and exprlist is a comma delimited
list  of  expressions  to  be  printed.   list  is   the   name   of   a 
list-structured  parameter  to  be  scanned,  and param is the name of a
parameter, the value field of which is to  receive  the  output  string.
The  unformatted  scan  routines  will automatically convert output data
values to match the types of the output arguments.

The new formatted routines are as follows.  These take an  extra  format
argument  which  tells  how to parse the input string in the case of the
scanf routines, or how to format the output in the case  of  the  printf
routines.

     scanf (format, arglist)        # formatted scan from stdin
    fscanf (list, format, arglist)  # formatted scan from a list
    printf (format, exprlist)       # formatted print to standard output


Currently  there  is  no  fprintf  routine.   For the printf routine the
format argument is similar to that for  the  SPP/VOS  printf  (which  is
similar  to  the  C printf).  The format argument for the scanf routines
is the same as the VOS LIBC scanf, which is patterned after the C  scanf
(in  fact  the  UNIX manual page for scanf can be used as a guide to the
CL scanf with only minor deviations).

The following examples illustrate the new routines.

    cl> printf ("%d foo %7.3f\n", 5, 12.123) | scanf ("%d foo %g", i, x)
    cl> printf ("new values are i=%d, x=%g\n", i, x)
    new values are i=5, x=12.123

or,

    while (fscanf (list, " %*d size=%d name=%s", i, s1) != EOF)
        printf ("size=%05o, name=`%s'\n", i, s1)


Note in the first example the use of scanf to scan from a  pipe.   There
are  actually two different versions of scan and scanf in V2.10 IRAF, an
intrinsic function version and a procedure version.  When called  as  an
intrinsic  function,  a  scan  routine returns as its function value the
number of operands successfully scanned,  or  EOF.   When  called  as  a
procedure, the function value of a scan routine is discarded.

Here  is  another  example  illustrating  scan from a pipe, in this case
using an unformatted scan since  the  hselect  output  is  in  a  simple
tabular format (hselect prints selected fields of the image header).

    cl> hselect dev$pix naxis,naxis1,naxis2 yes | scan (i, j, k)
    cl> printf ("naxis=%d, axlen=[%d,%d]\n", i, j, k)
    naxis=2, axlen=[512,512]


When  using  the  formatted  scan routines, care must be taken to ensure
that the data types implied by the format argument match the actual data
types  of  the  output  parameters.   The scanf routines are implemented
using an internal call to the C (LIBC) scanf, with the output  parameter
value  fields  referenced  directly  via a pointer.  If the data type is
incorrect the output value may be meaningless.


2.2.2 Unlearning package parameters

    The unlearn task now works for package parameters as  well  as  task
parameters.   In  a  command  such  as  "unlearn  pkgname"  the  package 
parameters for the named package will  be  unlearned,  as  well  as  the
parameters  for all the tasks in the package.  This works whether or not
the package is loaded.


2.2.3 Loading packages at login time

    A  bug  has  been  fixed  which  affected  packages   with   package 
parameters  loaded  at  login  time.   It is now permissible to load any
package at login time regardless of whether it  has  package  parameters
(V2.9  users  will  recognize  this  bug  as one which prevented loading
CCDRED in the login script).


2.2.4 Environment variables

    The environment variables imtype, cmbuflen, and min_lenuserarea  are
now  defined  at  login  time.   Previously,  explicit  values for these
variables were not  defined,  and  the  system  would  use  the  builtin
internal  defaults.   Explicit  definitions  were added so that the user
can query the current value, e.g.

    cl> show cmbuflen
    128000

A show or set with no arguments will print the  full  environment  list.
New  values  for these and other common environment variables may be set
in the user login.cl file.



2.3 System Management Related Changes


2.3.1 Install script

    The UNIX/IRAF install script underwent minor changes to make it more
robust.  Problems are still possible if the IRAF root pathname is set to
different values in the various system dependent files modified  by  the
script.   The  system  as  shipped  from  NOAO has the same initial root
pathname set in all such files, but problems can occur if the files  are
manually  edited during or after installation.  To avoid problems always
use the install script to make system changes such as  installing  at  a
different root directory.


2.3.2 Caching of termcap entries

    User  caching  of termcap or graphcap entries with the old mkttydata
task is no longer recommended.   The  most  common  entries  (e.g.  sun,
xterm,  vt100) are already cached.  Modern workstations are so fast that
there is no  longer  much  point  in  caching  termcap  entries;  it  is
sufficient  to  merely  place  local additions near the top of the file.
Most programs that repeatedly access  the  terminal  cache  the  entries
internally  during  execution.   Custom  caching  of termcap or graphcap
device entries requires that  the  system  be  relinked,  and  the  risk
inherent  in  relinking  the  system  (hence  giving  up  the  prebuilt, 
pretested binaries) is not worth the small performance gain achieved.


2.3.3 Sorting of UNIX directories

    The UNIX-based versions of IRAF now sort UNIX directories whenever a
directory  is  accessed  to  expand a file or image template.  This will
fix the problem sometimes seen in earlier versions of IRAF, in which  an
image  template  could  appear  to  be  expanded  in  a seemingly random
fashion.


2.3.4 UMASK support

    The UNIX-based versions of IRAF now support  the  host  level  umask
file  creation mask correctly.  If files or directories created by V2.10
IRAF do not have the desired permissions, it is because you do not  have
umask set correctly at the UNIX level (most people set umask to 022).



2.4 Networking Enhancements


2.4.1 New networking driver

    The  UNIX/IRAF  networking  driver has been completely rewritten for
version 2.10 IRAF, with the  goals  of  eliminating  redundant  password
prompts,  improving  efficiency, and enhancing system security.  For the
most part the changes will be transparent to the user.   Once  the  IRAF
system  manager has configured the dev$hosts file for the local site the
networking  system  should  function  automatically;  in   the   default 
configuration  a  password prompt should be seen only when connecting to
a server for which rhosts ("trusted" hosts) permission is not granted.

The following information is provided mainly for IRAF  system  managers.
In  normal  use  the user does not need to understand how the networking
system functions.


2.4.1.1 How it works

    The IRAF  networking  system  is  an  RPC  (remote  procedure  call)
mechanism  for the IRAF kernel; all kernel procedures may execute either
locally or remotely, and the client and server nodes do  not  even  need
to   run   the   same   operating  system.   IRAF  applications  may  be 
distributed, and may access  resources  which  reside  anywhere  on  the
network.   IRAF networking is layered upon standard low level networking
protocols such as TCP/IP and DECNET.

The IRAF networking system defines  one  or  more  connection  protocols
which  are  used  by  a client to connect to the IRAF kernel server on a
remote  machine.   The  old  networking  driver   supported   only   one 
connection  protocol,  the  rexec  protocol, which requires a login name
and password.  The new driver adds support for an  rsh  based  protocol.
This  is  the  default  connection  protocol  for  V2.10 IRAF; automatic
fallback to the rexec protocol is provided in the  event  that  the  rsh
connect   fails.    The  rsh  connection  protocol  bootstraps  off  the 
suid-root rsh command found in  most  BSD  derived  UNIX  systems  (most
System V systems provide the equivalent command remsh).

The  connection protocol is used to start the in.irafksd IRAF networking
daemon on the remote server node.  This daemon executes  with  the  same
uid  and  permissions as the account which initiated the connection, and
there is one such daemon per user per server node.  Once the daemon  has
been  started  via  the  rsh  or  rexec  connection protocol, new client
connections are made very quickly,  by  merely  forking  the  daemon  to
create  the  IRAF  kernel server process, and setting up a direct socket
connection between the IRAF client process and the server.   The  daemon
process  runs  indefinitely,  shutting  down  if  idle for longer than a
certain interval (the current default is one hour).  When connecting  to
the  daemon a client must supply an authentication key to gain access to
the daemon.  If authentication fails the daemon shuts  down  and  it  is
necessary to reestablish the connection.


2.4.1.2 The .irafhosts file

    The  new  networking  driver retains the old irafhosts file, used to
store information telling how to connect  to  various  IRAF  hosts  (the
irafhosts  file  is  the file .irafhosts in the user's login directory).
The networking system will automatically create this file for  the  user
if  the  file  is  not  found; if an old-style file is found, it will be
edited by the system to make  it  compatible  with  the  new  networking
system.   While  it  is  no  longer  necessary for the irafhosts file to
contain password information to avoid  password  prompts,  the  file  is
used  to  store  the  user  authentication key, hence the file should be
read protected.  The networking system will automatically  read  protect
the file if it is not already protected.

To  avoid  authentication  failures  when  clients  on  different  nodes 
attempt to connect to the same  server,  the  same  authentication  code
should  be used on all server nodes.  Unfortunately there is no way that
the networking system can do this automatically (without going  to  some
much  more  complicated authentication scheme, such as a key server), so
users who make heavy use of the networking system should install a  copy
of  their  irafhosts  file in their login directory on all server nodes.
If this is not done the networking system will still work, but  will  be
less  efficient than it could be, when simultaneously accessing the same
server from IRAF sessions running on multiple client nodes.

The  truly  paranoid  may  not  be  happy  with  even  the  unique  user 
authentication  code  used in the current networking system.  If this is
the case the port parameter (see below) may be set to zero to force  rsh
to  be used for every connection (in effect the in.irafksd daemon has to
be restarted for every connection).  This  imposes  an  overhead  of  as
much  as several seconds on every server connect.  Alternatively, KSAUTH
can be defined in the user environment at login time, setting the  value
string  to some random integer value selected at login time.  If defined
in the user environment, KSAUTH will override the value of auth given in
the  irafhosts  file.   This  approach  would  at  least allow efficient
connects for a single login process tree.

The irafhosts file consists of two sections.  The first section  defines
several  networking  parameters:  port,  auth, hiport, and timeout.  The
second section is a list  of  server  nodes,  with  login  and  password
information describing how to connect to each node.

    port = default
    auth = 1234567890
    hiport = default
    timeout = default
    
    ursa    : <user> ?
    *       : <user> <user>


The  example  above  illustrates  a typical irafhosts file.  Typically a
unique authentication code is  allocated  automatically  by  the  system
when  the  file  is first created, and the other parameters retain their
default values as shown (i.e., the string "default").   In  the  example
the  host  list  consists  of an entry for the node "ursa", and an entry
for everything else.  The  format  of  a  host  entry  is  "host-name  :
login-name  password".   If  login-name  is the reserved string "<user>"
the user name on the client node is used  for  login  authentication  on
the  remote  node.   Setting the password to "<user>" as well causes the
rsh connect  protocol  to  be  used;  anything  else  causes  the  rexec
protocol  to  be used.  If the rexec protocol is used the password field
may be set to the actual password or to the string "?",  in  which  case
the  system  will  prompt for the password whenever a connection attempt
is made.  The "*" entry should always be the last  entry  in  the  list,
since  it  matches  all  nodes.  The default host list contains only the
"*" entry.

Additional  information  on  the  irafhosts  file  is  provided  in  the 
comments in the file dev$irafhosts, and in the system notes file.


2.4.1.3 Compatibility

    By  default  the  new  networking  system  will  try  to use the rsh
protocol to connect to the server node.  If the  server  is  running  an
older  version  of  IRAF the connection attempt will hang and eventually
time out.  If this occurs the networking system will fall  back  on  the
rexec  protocol  and  issue a password prompt, but by then the user will
probably have interrupted the connect.   The  best  way  to  avoid  this
problem  is  to  update  the  server  node  to V2.10, but if this is not
possible, an explicit entry for the node can be made  in  the  irafhosts
file,  setting  the  password  field  so that the rexec protocol will be
used.

An older, e.g. V2.9 client connecting to a V2.10 server should not be  a
problem.   In  this case the V2.10 server will see an attempt to connect
with the rexec protocol, which should be processed as in the past.

Aside from the problem of making a connection the  pre-V2.10  and  V2.10
networking  systems  are  compatible,  except for the magtape i/o calls.
Since the magtape driver calling sequences were changed in V2.10, remote
magtape access between V2.10 and older systems is not supported.


2.4.2 The hosts file

    The  file  dev$hosts  is  used to interface new host machines to the
IRAF networking system.  This file defines, for each host,  the  primary
host name, any aliases, and the command to be executed remotely to start
up the IRAF kernel server on a remote node.

The format and role of the  hosts  file  is  unchanged  in  V2.10.   Two
changes were made which affect the use of this file.

o   A  user  can  now  have a private copy of the hosts file.  To enable
    this feature, the variable irafhnt (IRAF host name table) should  be
    defined  in  the  user's  IRAF  or  host level environment, with the
    string value giving the file pathname of  the  user's  private  host
    name table file.

o   The  maximum  number  of  entries  in  the  host name table has been
    increased from 64 to  128.   In  the  current  implementation  these
    entries  are  statically  buffered,  so  it is necessary to keep the
    maximum number of entries to a reasonable value.
    
    The hosts file must be configured to enable IRAF  networking.   IRAF
    networking  is  disabled  if there is no entry for the local host in
    this file.  The netstatus command may be used to examine  the  state
    of  the  host  name table after it has been loaded by the networking
    system.
    
    There is another file dev$uhosts which often confuses people.   This
    file  is  not  used by UNIX/IRAF and can be ignored; it is there for
    VMS/IRAF and other IRAF implementations which  do  not  provide  the
    equivalent  of  the  UNIX  system  routine  gethostbyname.   On host
    machines which implement name server facilities IRAF  will  use  the
    name  server,  allowing  any  machine on the internet to be accessed
    via IRAF networking, so long as there is  an  entry  in  the  system
    wide or user IRAF hosts file.
    
    
    
2.5 Magtape System Enhancements

    The  magtape subsystem underwent a major revision in V2.10.  The VOS
level MTIO interface was extensively revised, and  the  host-level  IRAF
magtape  driver  ZFIOMT  is  completely new.  A new device configuration
facility  called  tapecap  was  introduced.   Together  with   the   new 
"programmable"  magtape  driver,  this  makes  it  possible to interface
almost  any  removable  media  mass  storage  device  to   the   magtape 
subsystem.   The  DATAIO  applications, in particular the FITS programs,
underwent minor, but important revisions.

A full specification of the  new  magtape  subsystem,  particularly  the
tapecap  facility,  is beyond the scope of this document.  Our intention
here is merely to introduce the new facilities.  A  reference  paper  is
planned,  time  permitting,  which  will  fully document the new magtape
system and tapecap.


2.5.1 Basic usage

    In most respects basic usage of the magtape system is unchanged from
previous releases.  Many new capabilities have been added, but these are
upwards compatible with earlier releases.


2.5.1.1 Logical device names

    Magtape devices are still referred to in IRAF applications  much  as
they  have  been  in  the past.  Whether or not the logical device names
are the same before and after the V2.10 upgrade  depends  upon  how  the
IRAF  system  manager  configures  the  tapecap  file.   The new magtape
system is much more flexible than  previously  regarding  device  names,
but  to  avoid  user  confusion  it is recommended that the old names be
supported as aliases regardless of whatever the full device name may be.

As in earlier versions of IRAF, a simple magtape reference might be

    cl> mtexamine mta

where "mta" is the device name.  To examine only file 3 on the tape  one
might enter

    cl> mtex mta[3]

If the device is on the remote node "ursa" the command would be

    cl> mtex ursa!mta[3]

If  the  device is a 9 track tape supporting multiple densities we might
specify the density explicitly, e.g.

    cl> mtex mta1600[3]

Device names can be more complex.  For example,

    cl> mtex mtwd

might refer to a WangDAT drive, and

    cl> mtex mtwdc

to the same drive, but with data compression enabled.

Devices can  have  multiple  names,  possibly  with  slightly  different
behavior  or  characteristics.   Device  names such as "mta" are usually
only host specific aliases for the lower level, host independent  device
names.  The names "mta" and "mtb" might be aliases for the actual device
names "mthp0" and "mtxt1".  This can  be  useful  in  networked  systems
where  IRAF  and  the tapecap file reside on a server node, but the user
is running IRAF on their workstation with a local tape  drive  attached.
In  this case there may be no entry for the local drive in the installed
tapecap file, but the user can still access the local  drive  using  the
lower  level, host independent device entry (it is also possible to have
a private tapecap file as we shall see later).

To see what logical devices are known to  the  magtape  system  you  can
enter  the  following  command  (the  task  gdevices  was  intended  for 
graphics devices but can be pressed into service to list a tapecap  file
as  well).   Just  because  a  device  is  listed does not mean that the
physical device actually exists on a particular host system.

    cl> gdev devices='^mt' graphcap=dev$tapecap

In IRAF V2.10 it is possible to include tapecap parameters in the device
specification to do clever things, as in the following example.

    cl> mtex "mta[:so=lepus:se:nb]"

This  is  discussed  further below in the section describing the tapecap
facility.


2.5.1.2 Device allocation

    Device allocation operates much the same  in  V2.10  as  in  earlier
versions  of IRAF.  The main change is that it is no longer necessary to
allocate a device in order to be able to  access  it.   It  is  strongly
recommended  however  that you always allocate a device before accessing
it in IRAF.  If the device  is  not  allocated  anyone  can  access  the
drive,  e.g.,  changing the tape position, and this can cause data to be
lost or improperly read back.  The  only  reason  to  access  the  drive
without   allocating  it  is  if  there  is  some  problem  with  device 
allocation on your system.

A device is allocated with the allocate command, e.g.

    cl> alloc mta

A device is deallocated with deallocate.  If the tape has  already  been
unmounted  use  the  rewind=no  option to avoid accessing the drive.  By
default the tape will be rewound when it is  deallocated.   Deallocating
and  reallocating  a  drive  initializes  the  magtape system, i.e., all
cached knowledge of the status of the drive is discarded.


2.5.1.3 Device status

    The device status can be examined  at  any  time  that  the  magtape
device  is  idle (not being actively accessed by an IRAF task) using the
devstatus task.

    cl> devs mtc
    # Magtape unit mtc status Thu 12:54:02 04-Jun-92 user v14
    file = 4
    record = 1
    nfiles = 0
    tapeused = 405
    pflags = 0


Of particular interest are  the  tapeused  and  nfiles  fields.   nfiles
refers  to  the total number of files on the tape (if a file is appended
to the tape it will be file nfiles+1).  If nfiles is given as zero  that
means  that  the  magtape system does not yet know how many files are on
the tape (it has not seen the end of tape).

tapeused reports the amount of tape used in units  of  kilobytes.   This
is  intended to refer to the amount of tape used up to and including the
end of tape (EOT).  However, the magtape system only  knows  about  data
that  it  has  seen, i.e.  physically read or written, so whether or not
tapeused is accurate depends upon how you have accessed the tape.

For example, if you started out with a fresh tape and appended a  number
of  files  the  number should be accurate.  If you just completed a full
scan of the tape with mtexamine the number  should  be  accurate,  since
all  the data was read.  If you just put on a new tape and did a scan of
the FITS headers with "rfits make-",  the  number  may  or  may  not  be
accurate,  depending  upon  the device and how file skipping forward was
done.  In most cases only the header area of each file  will  have  been
read  and  tapeused  will not reflect the full contents of the tape.  If
however, "rfits make-" is done immediately after writing to a new  tape,
the  number  will be accurate, since all the data was written before the
tape was rescanned to print the FITS headers.

Be advised that by default an explicit rewind will clear the nfiles  and
tapeused  fields,  since  by  default  rewind  initializes  the  magtape 
system.  See the discussion of rewind below.

In summary tapeused can be useful for monitoring how much space is  left
on  a  tape, but you have to know what you are doing.  When writing to a
new tape the number will be accurate so  long  as  you  avoid  doing  an
explicit  rewind.   A  simple  procedure  which  will  always  work when
mounting a non-empty tape and  appending  files  to  it,  is  to  do  an
mtexamine  of  the tape and then append the new files.  This can be time
consuming   for   large   tapes   but   does   provide   a   safe    and  
device-independent  method  for  getting the maximum amount of data on a
tape.


2.5.1.4 File positioning

    File  positioning  when  accessing  magtape   files   in   IRAF   is 
straightforward  in  the  sense  that  you  can  simply specify the file
number to read an existing file, or  "append"  (as  in  wfits  new-)  to
append  a  file  to  an existing tape.  Most tasks accept range lists to
access existing files, e.g.

    cl> mtexamine mta file="3,5,9-11"

It is even possible to position a tape to a  specific  record  within  a
file.   Opening  a  tape  with  file zero (as in "mta[0]") disables file
positioning,  allowing  the  tape  to  be  positioned  with  host  level 
utilities to workaround media problems.

There  can be problems with this simple scheme however, with modern tape
devices such as DAT and Exabyte which have capacities  in  the  gigabyte
range  and  which may be used to store thousands of files.  It is beyond
the scope of a revisions summary to go into this in detail here,  but  a
simple example will help illustrate the problem.

Assume we have a tape mounted on device "mtwd" containing 900 files.  We
want to append image "pix" as a FITS file.  The obvious thing to  do  is
enter the following command.

    cl> wfits pix mtwd new-

This  will  certainly  work.   The  only  problem is that if the tape is
freshly mounted the magtape system will not know how  many  files  there
are  on the tape, and it will have to skip forward one file at a time to
count the files and determine where EOT is.  In  the  worst  case  of  a
tape containing several thousand files this could literally take hours.

If  we  know  apriori  the number of files on the tape, e.g., 900 in our
example, the following command would  be  much  faster  (something  like
10-40 seconds on most DAT drives, assuming a decent host level driver).

    cl> wfits pix mtwd[901]

Of  course,  if  there  were actually 930 files on the tape, the last 30
files would be overwritten.

There is a useful trick which works in  some  cases  if  we  don't  care
exactly  how many files are on the tape (whether this works depends upon
the specific device and the host driver).  Assume  that  we  know  there
are  several  hundred  files  on the tape, but less than 1000.  We enter
the following command to append a file to the tape.

    cl> wfits pix mtwd[1000]

If this works, after the operation the magtape system will  think  there
are  1000  files  on  the tape.  A subsequent "wfits new-" would be very
fast regardless of the tape position,  since  so  long  as  the  magtape
system  knows where the end of tape is relative to the current position,
it can get there very fast.

If the trick doesn't work for your particular device or driver you  will
probably  get  a  positioning  error  when  attempting  to position to a
nonexistent file beyond the EOT.

More automated techniques for rapid positioning with very high  capacity
tapes are still a matter for study.  One promising technique would be to
formalize the above approach by supporting EOT-relative positioning.   A
tape  catalog  based  approach  is also possible.  The best approach may
simply be to not write so many small files on large tapes,  by  grouping
images  or  other  data  system  files into a single large tape file (as
with UNIX tar).  None of these approaches are implemented in V2.10.


2.5.1.5 Rewind

    In IRAF a magtape device is rewound with the rewind command,  as  in
the following example.

    cl> rewind mta

By  default  this  will not only rewind the tape but also initialize the
magtape system, in the sense that all cached information  regarding  the
named  device  is erased (e.g., nfiles and tapeused in the cached device
status).  This is necessary when changing tapes without deallocating the
drive; always do an explicit rewind (or deallocate) of the device before
removing a tape or mounting a new one.  Having rewind initialize  things
is  also  useful if error recovery should fail following an interrupt or
program abort.

In some cases it may be useful  to  be  able  to  do  a  rewind  without
erasing  the cached device status.  This is done by specifying the init-
option on the command line.


2.5.2 New magtape driver

    The IRAF magtape driver is new for V2.10.  The chief feature of  the
new  driver  is  that  it is programmable, via the tapecap device entry,
making it possible to interface new  devices  or  host  drivers  without
having  to  make  any binary code changes to IRAF.  All one has to do is
add a device entry in the tapecap file.


2.5.2.1 Software structure

    The IRAF magtape system has enough layers that it may  be  confusing
exactly  what  the  magtape  driver  is and what role it plays.  A brief
review of the software structure may help clarify things.

Starting at the top we have applications, such as the DATAIO and MTLOCAL
tasks,   which  can  access  magtape  files.   These  use  the  IRAF/VOS 
interfaces FIO (file i/o) and MTIO (magtape  i/o)  to  do  i/o  to  tape
devices.   For  the  most  part  i/o  is  done  with  FIO  and is device
independent, but a call to the magtape system  is  required  to  open  a
magtape  device.   The  tapecap file is read by the GTY interface, which
is called by MTIO.  MTIO passes the tapecap device entry as a string  to
ZFIOMT,  the  IRAF  magtape  device  driver, when a tape file is opened.
All magtape positioning and i/o is  done  by  ZFIOMT  driver  under  the
control  of  the  MTIO  interface.   Device  allocation is done prior to
accessing the device  by  the  CL  and  is  handled  by  the  allocation
routines  in  the  ETC  interface,  with kernel support (this is largely
independent of the magtape system).

All of the code listed above is part of the portable IRAF system  (i.e.,
is  OS independent and shared by all host versions of IRAF) until we get
to the ZFIOMT driver.  This is in the IRAF kernel  and  is  host  system
dependent.   At  present the only version of ZFIOMT is the UNIX version;
other versions, e.g., for VMS will follow as IRAF is  updated  to  V2.10
on  these  systems.   The  UNIX version of ZFIOMT uses only generic UNIX
ioctls and should compile on most UNIX systems without change.   All  of
the  system  and  device dependence has been concentrated in the tapecap
file.  The ioctls used to  communicate  with  a  UNIX  tape  device  are
fairly  standard,  but  the  semantics  are often poorly defined and are
certainly not standardized.

Beneath the IRAF driver are the host level magtape  device  drivers.   A
given  host  system  may  have more than one of these, typically one for
each class of magtape device.  Some systems, notably Sun with  their  ST
(SCSI  tape)  driver, try to control more than one type of device with a
single host driver.  The host driver may come with  the  OS  or  may  be
supplied by a third party vendor.

Beneath  the  host  driver  is the actual tape device.  Often these days
this is a SCSI tape device such as a DAT or Exabyte.  These devices  are
intelligent  peripherals;  control of the physical tape hardware resides
in the tape unit.  There is a small computer in each  tape  drive  which
communicates  with  the  host  computer  via the SCSI interface, passing
commands and data back and forth.  The drive will buffer  256K  to  512K
of  data  passed in bursts over the SCSI bus, and then copied to or from
the physical  media  at  a  much  slower  rate.   These  drives  emulate
variable  size records by blocking and deblocking within the drive unit,
and writing fixed size blocks to the  media.   Features  such  as  error
correction and data compression are also handled within the drive.

Although we usually speak of tape devices, the "magtape" device does not
have to be a tape device at all.  The IRAF magtape system can also  make
use  of,  e.g.,  a  floppy  disk, or anything that looks like a raw disk
partition.  The problem with the latter devices  is  that  they  usually
don't  support  files  and  file  positioning, hence can only be used to
store one "file".


2.5.2.2 Driver features

    A detailed description of the magtape driver is beyond the scope  of
this  document.   Briefly,  the  driver  supports  two  main  classes of
devices, variable record size devices  and  fixed  block  devices.   All
file  positioning is handled by the driver, and while the driver has the
device open it is responsible for keeping track of the  device  position
(the  saved  device  position is passed in at open time and saved by the
high level code at close time).  A couple of  dozen  tapecap  parameters
are  defined  which describe the characteristics of each device, such as
whether it supports variable records, the maximum record  size,  whether
it  can  backspace,  and  so  on.  A socket or file based status logging
feature is provided which allows detailed monitoring of the tape  status
during execution (see below).

In  the  simplest  case  the  new  magtape system, coupled with the UNIX
version of the magtape driver, will emulate simple  UNIX  commands  such
as  tar  and  mt  insofar  as  the  requests made to the host system and
magtape device are concerned.  That is, if one writes a series of  files
the  only  system  requests  made for each file will be open, write, and
close.  When reading a series of files in  sequence  the  only  requests
made  will  be  open, read, and close.  Providing no file positioning is
attempted it is possible to get by with  no  file  positioning  requests
other  than  rewind.   The driver provides extensive facilities for file
positioning, using tapecap parameters to work  around  any  shortcomings
of  the  host system or device, but in case of trouble it is possible to
operate with only open, close, read, and write  requests,  which  should
work for any device (unless it is truly broken).


2.5.3 Tapecap

    The  tapecap  file, or magtape device capabilities file, defines the
magtape devices known to the system and how  to  access  these  devices.
While  large  portions  of this file depend only upon the host operating
system and device type and hence are fairly site  independent,  it  will
typically  be  necessary  to customize the tapecap file to configure the
IRAF magtape system for a site.  In  normal  use  the  tapecap  file  is
invisible  to  the  user,  but  users  with special problems may wish to
learn more about tapecap to gain more control over the behavior  of  the
magtape system.


2.5.3.1 Using tapecap

    The  standard  tapecap  file  is  the  file  dev$tapecap.   A system
environment variable tapecap is defined which by default points to  this
file.

Users can customize or manipulate tapecap entries in either of two ways.
The user can have their own private copy of the tapecap file (much as is
currently  done  with  the termcap and graphcap files), by resetting the
value of the tapecap environment variable to point to their  local  copy
of the file.  For example,

    cl> reset tapecap = home$tapecap

This  may be necessary to customize a device entry, or add support for a
local device not supported by the system wide tapecap file.

It is also possible to modify a tapecap device entry "on  the  fly",  by
overriding the values of specific tapecap parameters on the command line
when the device is accessed.  For example,

    cl> mtex "mta[:so=/dev/tty]"

would override the default value  of  the  tapecap  parameter  "so"  for
device  mta  (in  this case enabling status output logging and directing
this output to the user terminal).

Specifying  tapecap  parameters  on  the  command  line  is  useful  for 
experimentation  but  rapidly  becomes  tiresome  if  many  commands are
entered.  In this case it becomes simpler to redefine tapecap to include
the desired tapecap parameter overrides.

    cl> reset tapecap = ":so=/dev/tty"

As  we  see,  the  tapecap  environment  variable  can be used to either
specify the tapecap file name, or  globally  override  specific  tapecap
parameters  (all  device  entries  are  affected).  The full form of the
value string for tapecap is

    cl> reset tapecap = [tapecap-file] [`:' capabilities-list]

Any number of colon-delimited tapecap capabilities or parameters may  be
given.

It  is  beyond  the  scope  of  this  document to detail all the tapecap
parameters here.  A reference paper for the magtape system  is  planned.
For  the  present,  there  is a summary of the tapecap parameters in the
ZFIOMT driver source file, os$zfiomt.c.  For examples  of  actual  usage
refer to the tapecap file in the distributed system.


2.5.3.2 Configuring tapecap

    The   tapecap   file   uses  the  standard  "termcap"  file  format, 
originally developed for BSD UNIX and adopted long ago  for  IRAF.   Any
UNIX  system  will probably have a manual page defining the termcap file
format, if not this can be obtained from the IRAF group.

The distributed tapecap file is divided into three  sections:  the  host
machine  specific  device  aliases  (names  like  "mta"  etc.), the site
logical devices, and the  generic  device  entries.   To  customize  the
tapecap  file  for  a site you modify the first and second sections.  To
configure the tapecap file for a particular host machine  you  uncomment
the  entries  for  that  host  in  the first section of the file.  Sites
which don't have a large network of hosts  may  prefer  to  combine  the
first  two  sections  to  simplify things.  Site specific changes should
never be made to the bottom, or generic, part of the  tapecap  file,  as
you  will  want  to update this portion of the file when new versions of
IRAF are released.

Don't be intimidated by the apparent complexity of some of  the  tapecap
device  entries.   In  most  cases the generic device entry will already
exist for the device you need to interface, and all you need  to  do  is
add  a site entry which references the generic entry.  In some cases the
generic entry itself may be sufficient (for example, in the  distributed
SunOS  version  of  tapecap, logical device "mtxb0" would provide access
to Exabyte unit 0 interfaced with the Sun ST driver,  "mtxb1"  would  be
the same but unit 1, "mthp0" the HP 9 track tape on unit 0, and so on).

For  example  to  interface  Exabyte unit 2, using the Sun ST driver, as
local device "mta", the following entry would suffice.

    mta|        :tc=mtst2-exb:

If the generic device  entry  provided  doesn't  quite  work  and  minor
modifications  are  needed,  these should be made to the local entry and
not the standard generic  entry.   This  is  easily  done  with  termcap
parameter  redefinitions.   For example, in SunOS 4.1.2 (but not earlier
versions  of  SunOS)  there  is  a  bug  in  the  Sun  ST  driver  which 
necessitates  rewinding  the  tape after a tape scan is made to position
to EOT (!).  The capabilities ":se:nb"  can  be  added  to  the  tapecap
entry  for  the  device  to  workaround  this  bug,  as in the following
example.

    mta|        :se:nb:tc=mtst2-exb:

The parameters mean that the device spaces past EOT in a read  (se)  and
cannot  backspace  (nb).   Neither of these things is actually true, but
the effect is that the tape is rewound and spaced forward  to  get  back
to  the  desired file, working around the host level driver bug.  Access
will be less efficient than it should be, but the  interface  will  work
properly and the user does not have to be concerned with the problem.

As  a  final  example, suppose we need to write a new tapecap entry from
scratch because there  is  no  generic  entry  for  the  device  in  the
distributed  tapecap file.  To simplify things we assume that no special
tapecap parameters are needed, i.e., that  the  standard  UNIX  defaults
builtin  to  the driver will work for the device.  We are upgrading from
an old version of IRAF so we already have an  old  dev$devices  file  to
work  with.   For the purposes of our example we use an old HP 88780 1/2
tape drive entry, but pretend that the device is something which is  not
already supported.

The old devices file entry was as follows.

    mta         nrst20 nrst4 nrst12 nrst28 rst4 rst12 rst20 rst28
    mta.6250    nrst20 nrst4 nrst12 nrst28 rst4 rst12 rst20 rst28

The minimal tapecap entry required to duplicate this is the following.

    mta|mta6250|HP 88780 1/2 inch tape drive:\
            :al=nrst4 nrst12 nrst20 nrst28 rst4 rst12 rst20 rst28:\
            :dv=nrst20:lk=st4:tc=9tk-6250:

Here,  the  "al"  parameter  lists the device files to be allocated, the
"dv" parameter is the device file to be used  for  i/o  at  the  desired
density  (6250bpi  in  this  case), and "lk" is the root file name to be
used for the ".lok", or device status file.   The  "tc="  picks  up  the
standard  parameters for a 9 track 1/2 inch tape drive operating at 6250
bpi.  Two device aliases are defined, "mta" and "mta6250".


2.5.3.3 Supported devices

    The IRAF magtape system itself should  support  almost  any  magtape
device  if  properly configured.  What devices are actually supported at
a site depends upon the tapecap file, and in particular  upon  the  host
system (different host systems have different tapecap files).

                Device                              Driver

        QIC-11 cartridge tape                  Sun st
        QIC-24 cartridge tape                  Sun st
        QIC-150 cartridge tape                 Sun st
        Pertec compatible 1/2 inch drives      Xylogics
        HP 88780 1/2 inch drive                 Sun st
        WangDAT 1300, 2000                     ApUNIX
        HP DAT                                 ApUNIX
        Exabyte 8200, 8500                     ApUNIX, Sun st, Ciprico
        DC2000 cartridge tape                  A/UX tc
        FDHD floppy disk                       A/UX fd

As  an  example,  the tapecap file distributed in the V2.10.0 release of
Sun/IRAF supported the devices listed in the table above.   New  devices
are  constantly  being  added.   As V2.10 IRAF propagates to the various
platforms on which IRAF is supported,  similar  tapecap  files  will  be
configured for those systems.


2.5.4 Status output

    The  new  magtape  driver  has  a  facility  known  as status output
logging which can be used to monitor  interactively  lengthy  tape  jobs
while  i/o  is  in  progress.   The  status  output facility can also be
useful for debugging magtape problems.

In its simplest form, the status output  may  be  directed  to  a  file,
e.g.,  an  actual  text  file,  or  a terminal device.  Status output is
enabled by setting the "so" option in tapecap.  For example,

    cl> mtex "mta[:so=/tmp/mta.out]"

would enable status output logging and direct the  output  text  to  the
file /tmp/mta.out.  Likewise,

    cl> mtex "mta[:so=/dev/ttyp7]"

would  enable  status  output and direct the output to a pseudoterminal,
e.g., an xterm window.  When this form of status output logging is  used
one  sees  the  raw,  driver  level status messages, as in the following
example.

    cl> mtex "mta[:so=/dev/tty]"
    open device tc2n\n
    devtype = Apple Tape 40SC
    tapetype = DC2000
    tapesize = 38500
    density = na
    blksize = 8192
    acmode = read
    file = -1
    record = -1
    nfiles = 0
    tapeused = 0
    device tc2n opened on descriptor 4\n
    rewinding...
    done\n
    position to file 1\n
    file = 1
    record = 1
    reading...\n
    recsize = 65536
    record = 9
    tapeused = 64
       (etc.)


The UNIX version of the new magtape driver also has an option to  direct
status  output to a TCP/IP socket, which can be anywhere on the network.
For this option to be useful one must have a program which  will  listen
on  the designated socket, accept the connection when the magtape driver
tries to open a  connection,  and  then  read  and  process  the  status
messages (which are still text, exactly as in the example above).

Status  output to a socket is enabled by giving a host name instead of a
file name in the "so" directive:

    cl> mtex "mta[3:so=lepus]"

to examine file 3,  directing  status  messages  to  a  socket  on  node
"lepus".

An  X11  client application called xtapemon has been developed to listen
on a socket, read messages from the tape driver, and provide a real-time
display  of  the  status  of the tape device.  While not included in the
V2.10 IRAF distribution, this utility will be available  later  in  1992
as part of the X11 support package currently under development.


2.5.5 Error recovery

    Considerable  effort  went  into  "bullet  proofing" the new magtape
system to make it recover gracefully from  ctrl/c  interrupts  or  other
program  aborts.  In practice it can be very difficult to reliably catch
and recover from interrupts in a multiprocess, distributed  system  such
as  IRAF.   No doubt there are still conditions under which an interrupt
will leave the magtape system in a bad state, but in most  circumstances
the  system  should  now be able to successfully recover gracefully from
an interrupt.

If it is necessary to interrupt a tape operation,  it  is  important  to
understand  that  the  host system will not deliver the interrupt signal
to the IRAF process until any pending  i/o  operation  or  other  driver
request  completes.  For example, in a read operation the interrupt will
not be acted upon until the read  operation  completes,  or  in  a  tape
positioning  operation  such  as  a  rewind  or  file  skip forward, the
interrupt will not be acted upon until the tape gets  to  the  requested
position.   For  a  device such as a disk you rarely notice the delay to
complete a driver request, but for a  magtape  device  these  operations
will  take  anywhere  from  a  few  seconds  to a few tens of seconds to
complete.  Type ctrl/c once, and wait until the operation completes  and
the system responds.

If a magtape operation is interrupted, the IRAF error recovery code will
mark the tape position  as  undefined  (devstatus  will  report  a  file
number of -1).  This will automatically cause a rewind and space forward
the next time the tape is accessed.  The rewind is necessary  to  return
the tape to a known position.


2.5.6 Device optimization

    In  addition to making it possible to characterize the behavior of a
magtape device to  permit  the  device  to  be  accessed  reliably,  the
tapecap  facility  is used to optimize i/o to the device.  The parameter
"fb" may be  specified  for  a  device  to  define  the  "optimum"  FITS
blocking  factor  for  the device.  Unless the user explicitly specifies
the blocking factor, this is the value that the V2.10  wfits  task  will
use  when writing FITS files to a tape.  Note that for cartridge devices
a FITS blocking factor of 22 is used for some  devices;  at  first  this
may  seem  non-standard  FITS,  but  it  is perfectly legal, since for a
fixed block  size  device  the  FITS  blocking  factor  serves  only  to
determine  how  the  program  buffers the data (for a fixed block device
you get exactly  the  same  tape  regardless  of  the  logical  blocking
factor).   For  non-FITS  device  access  the  magtape system defines an
optimum record size which is used to do  things  like  buffer  data  for
cartridge tape devices to allow streaming.

Some  devices,  i.e.,  some  DAT and Exabyte devices, are slow to switch
between read and skip mode, and for files smaller than a  certain  size,
when  skipping  forward  to the next file, it will be faster to read the
remainder of the file than  to  close  the  file  and  do  a  file  skip
forward.   The  "fe"  parameter  is provided for such devices, to define
the "file equivalent" in kilobytes of file data, which can  be  read  in
the  time  that  it takes to complete a short file positioning operation
and resume reading.  Use of this device parameter  in  a  tape  scanning
application  such  as  rfits can make a factor of 5-10 difference in the
time required to execute a tape scan of a  tape  containing  many  small
files.

On most cartridge tape devices backspacing, if permitted at all, is very
slow.  On such devices it may be best to set the "nf" parameter to  tell
the driver to rewind and space forward when backspacing to a file.


2.5.7 MTIO interface changes

    A  number  of  new  routines  were  added  to the MTIO (magtape i/o)
programming  interface.   These  are  documented  in  the   summary   of 
programming   environment   revisions  given  below.   Existing  magtape 
applications may benefit from being modified to make use  of  these  new
routines.



2.6 Graphics and Imaging Subsystem Enhancements


2.6.1 New graphics applications

    New  tasks  for  histogram  plotting,  radial  profile plotting, and
producing lists of the available graphics devices  have  been  added  to
the  PLOT package.  All of the tasks in this package were revised to add
support for  world  coordinates.   A  related  task  for  drawing  world
coordinate  grid  overlays on images or plots was added to the IMAGES.TV
package.   See  the  appropriate  sections  of  IRAF  and  NOAO  package 
revisions below for further information on these changes.


2.6.2 Graphics system changes


2.6.2.1 Encapsulated postscript SGI kernel

    A  new  encapsulated postscript SGI kernel has been added.  Graphics
output may be directed to any of the logical graphics devices eps, epsl,
epshalf,  etc.  to  render  a plot in encapsulated postscript, e.g., for
inclusion as a figure in a document.  For example,

    cl> prow dev$pix 101 dev=eps; gflush

will leave a ".eps" file containing the plot in the  current  directory.
The  command  "gdev  dev=eps"  will  produce a list of the available EPS
logical graphics devices.


2.6.2.2 Graphics output to the default printer

    Graphics output (SGI postscript) can now be  directed  to  the  UNIX
default  printer  device  by  directing  output  to  any  of the logical
devices "lpr", "lp", or "lw".

    cl> prow dev$pix 101 dev=lpr


Output will be sent to the default device for the UNIX lpr command  (set
by  defining  "PRINTER"  in  your  UNIX  environment).   This  makes  it 
possible to make immediate use the  distributed  IRAF  graphcap  without
having  to  add  entries  for  specific  local devices (although you may
still wish to do so).


2.6.2.3 Tick spacing algorithm improved

    The algorithm used to  draw  the  minor  ticks  on  IRAF  plots  was
replaced  by an improved algorithm contributed by the STScI STSDAS group
(Jonathan Eisenhamer in particular).   This  was  derived  from  similar
code in Mongo.


2.6.2.4 Graphics metacode buffer

    The  default maximum size of the graphics metacode buffer in the CL,
used  to  buffer  graphics  output  for  cursor  mode  interaction,  was 
increased  from  64K  to  128K  graphics  metacode  words  (256Kb).  The
cmbuflen environment variable may be used to change this value.


2.6.2.5 IMTOOL changes

    The imtool display server (SunView) was enhanced to  add  additional
builtin  color  tables,  support  for user color tables, and setup panel
control over  the  screen  capture  facilities.   A  version  supporting
encapsulated  postscript  output  is in testing.  This will be the final
version of the SunView based version of imtool (the new display  servers
are all X window system based).


2.6.2.6 IMTOOLRC changes

    The  imtoolrc  file,  used  by  display  servers  such as imtool and
saoimage to define the available image frame buffer configurations,  has
been  relocated  to  the  DEV directory to make it easier for local site
managers to customize.  The IRAF install  script  now  uses  a  link  to
point  to  this  file,  rather  than  copying it to /usr/local/lib.  The
maximum number of frame buffer configurations was increased from  64  to
128.


2.6.2.7 X11 support

    The  released  version of V2.10 does not contain any changes insofar
as X11 support is concerned.  Since our X11 support code is  host  level
stuff,  with  minimal  ties  to  IRAF  per  se,  it  is  being developed
independently  of  the  V2.10  release  and  will  be  distributed   and 
installed as a separate product.



2.7 Image Structures


2.7.1 Image I/O (IMIO)

    The  image  i/o  interface  (IMIO)  is  that part of the IRAF system
responsible for imagefile access and management.  The  changes  to  IMIO
for V2.10 included the following.


2.7.1.1 Null images

    Null  images  are now supported for image output, much like the null
files long supported by the file i/o system.  For example,

    cl> imcopy pix dev$null

would copy the image "pix"  to  the  null  image.   This  exercises  the
software  but  produces no actual output image.  Unlike null files, null
images do not work for input since images  have  some  minimal  required
structure, whereas files can be zero length.


2.7.1.2 Preallocating pixel file storage

    In  the  UNIX  versions of IRAF, when a new image is created storage
is not physically allocated for the  output  image  until  the  data  is
written.   This is because most UNIX systems do not provide any means to
preallocate file system storage.  The UNIX/IRAF file creation  primitive
zfaloc,  used  by  IMIO  to  create  pixel files, now provides an option
which can be used to force storage to be physically  allocated  at  file
creation  time.   This  feature  is  enabled by defining the environment
variable ZFALOC in the UNIX environment.  For example,

    % setenv ZFALOC

can be entered before starting IRAF to cause space for all  pixel  files
to  be  preallocated  as  images  are  created.  If it is not desired to
preallocate all image storage (there is a significant  runtime  overhead
associated  with  preallocating large images) then a value string can be
given to specify which types of images to preallocate storage for.   For
example,

    % setenv ZFALOC /scr5

would preallocate only those pixel files stored on the /scr5 disk, and

    % setenv ZFALOC "/scr5,zero"

would  preallocate  only  images  on  /scr5,  or  images  containing the
substring "zero" in the image name.  In general,  the  string  value  of
ZFALOC  may  be  the null string, which matches all images, or a list of
simple pattern substrings identifying the images to be matched.

In most cases the default behavior  of  the  system,  which  is  to  not
physically  allocate  storage  until  the data is written, is preferable
since it is more efficient.  The preallocation option  is  provided  for
users  who,  for example might have an application which spends a lot of
time computing an image, and they want to ensure  that  the  disk  space
will be available to finish writing out the image.


2.7.1.3 Image templates now sorted

    As mentioned earlier in the System Management section, UNIX/IRAF now
sorts UNIX directories.  One result of this  is  that  the  sections  of
image  templates  which  are  expanded  via  pattern  matching against a
directory will now be sorted, or at least logically ordered  (the  final
output  list will not necessarily be fully sorted if string substitution
is being performed - this is the reason the output list  itself  is  not
sorted).


2.7.1.4 The dev$pix test image

    Minor  changes  were  made  to  clean  up  the  image  header of the
standard test image dev$pix.  A second  test  image  dev$wpix  has  been
added.  This is the same image, but with a different header containing a
test world coordinate system (actually the image is just a second  image
header pointing to the dev$pix pixel file, now shared by both images).


2.7.2 Image kernels (IKI)

    The  IMIO  image  kernels  are  the data format specific part of the
IRAF image i/o  subsystem.   Each  kernel  supports  a  different  image
format.   Existing  disk image formats range from the conventional image
raster formats (OIF and STF) to the photon image format (QPF  and  QPOE)
and  the  pixel mask image format (PLF and PMIO/PLIO).  There also exist
special image kernels which allow IMIO to be  used  to  access  non-disk
storage devices such as image display frame buffers.


2.7.2.1 New PLF image kernel

    A  new  image  kernel,  the  PLF  image kernel, has been added which
allows IRAF PMIO/PLIO pixel masks to be stored as images.   This  kernel
first  appeared  as  a  patch  to  version  2.9  IRAF  but  was actually
developed within V2.10.

Pixel mask images may be created,  deleted,  read,  written,  etc.  like
other  IRAF  images,  but  the  image  is stored in a special compressed
format designed  specially  for  image  masks.   An  image  mask  is  an
N-dimensional  raster-like object wherein typically there are regions of
constant value but arbitrary shape.   Masks  are  used  by  applications
involving  image decomposition.  The image is decomposed into regions of
different types, the type of region being very dependent upon  the  type
of  image analysis being performed.  A special type of mask image is the
bad pixel mask, used  to  flag  the  bad  pixels  in  an  image.   Other
applications  use  masks  for  data  quality,  to identify the region or
regions to be used for analysis, and so on.

A PMIO image mask is a special case of a PLIO  pixel  list.   Masks  can
exist  and  be  accessed  independently of the image i/o system, but the
PLF image kernel allows a mask to be stored  and  accessed  as  an  IRAF
image.   Any  IRAF  application  which operates upon images can operated
upon a mask image.  For example, the imcalc (image  calculator)  program
in  the  SAO  XRAY  package  can be used to combine images and masks, or
compute new masks by evaluating an algebraic expression over an image.

Mask images have the  reserved  image  extension  ".pl".   Some  of  the
features of mask images are illustrated by the following example.

    cl> imcopy dev$pix pix.pl
    dev$pix -> pix.pl
    cl> imstat dev$pix,pix.pl
    #     IMAGE      NPIX      MEAN    STDDEV       MIN       MAX
        dev$pix    262144     108.3     131.3       -1.    19936.
         pix.pl    262144     108.3     131.3        6.    19936.

This  is a sort of worst case test of the mask encoding algorithm, since
our test image is not a mask but a  noisy  image  (and  hence  not  very
compressible).   Note  that masks must be positive valued, hence the MIN
value is different for the two images.  Storing dev$pix as a  mask  does
not  result  in  any  significant  compression, but for a real mask very
high compression factors are possible.  The compression  algorithm  used
in  PLIO  is  simple  and  fast,  combining 2D run length encoding and a
differencing technique in a data structure  allowing  random  access  of
multidimensional masks (masks are not limited to one or two dimensions).

For further information on pixel lists and pixel masks, see the document
plio$PLIO.hlp  in  the  online  system.   This  is  also  available   as 
plio.txt.Z in the IRAF network archive.


2.7.2.2 OIF image kernel changes

    The  OIF  image kernel is the kernel for the old IRAF image format -
this is still the default IRAF  image  format.   Revisions  to  the  OIF
kernel for V2.10 included the following items.

o   A  valid  image  header  is now written even if an application which
    writes to a new image is aborted.  Previously, the pixel file  would
    be  written  but  the  image  header  would be zero length until the
    image was closed.  If an image creation task aborts the  image  will
    likely  be  incomplete in some way, e.g., part of the pixels may not
    have been written to, or  the  header  may  be  missing  application
    specific  keywords.   By  valid image header we mean that the header
    will be valid to IMIO, allowing the image to be accessed to  try  to
    recover the data, or to delete the image.

o   The  image  header  file of a new image is now written to and closed
    at image create time, then reopened at image close  time  to  update
    the   header.    This   frees  one  file  descriptor,  an  important 
    consideration for applications which for some reason need  to  write
    to dozens of output images simultaneously.

o   The  OIF  image  kernel  uses file protection to prevent inadvertent
    deletion of the  image  header  file.   In  UNIX/IRAF  systems  file
    delete  protection  is  simulated  by  creating a ".." prefixed hard
    link to the file.  This could cause  problems  with  images  if  the
    user  deleted  the  image  header  file outside of IRAF, leaving the
    ".." prefixed link to the file behind.  A  subsequent  image  create
    operation  with  the same image name would fail due to the existence
    of the hidden ".." prefixed file.  It is unlikely that such  a  file
    (with  a  ".." prefix and a ".imh" extension) could ever be anything
    but an old IRAF image header file, so the system will  now  silently
    replace such files when creating a new image.
    
    A  couple  of  related  system  changes  were  made which, while not
    implemented in the OIF kernel, do involve the OIF  or  ".imh"  image
    format.   The  default template login.cl now defines the environment
    variable imtype and sets it  to  "imh".   The  environment  variable
    min_lenuserarea  is  also  defined now at login time, with a default
    value of 20000, allowing image headers with up to about  250  header
    parameters.
    
    
2.7.2.3 STF image kernel changes

    The  STF image kernel is the kernel for the online HST (Hubble Space
Telescope) image format.  This  format  allows  multiple  images  to  be
grouped  together  in  a single "group format" image.  There is a common
image header stored in a FITS-like format, as  well  as  a  small  fixed
format binary header associated with each image in the group.

o   A  check  was  added  for a group index out of range.  This yields a
    more meaningful error message  about  no  such  group,  rather  than
    having  IMIO  complain  about a reference out of bounds on the pixel
    file.

o   Support was added for non-group STF images (GROUPS=F in the header).
    At  first  glance a non-group group format image might seem a little
    silly, but it turns out that a  non-group  STF  image  with  a  zero
    length  group parameter block is very close to "FITS on disk", since
    the header is FITS-like and the  image  matrix  is  simple.   It  is
    still  not  true  FITS  since  the  header  and pixels are stored in
    separate  files  and  the  pixels  are  not  encoded  in  a  machine 
    independent  form, but on UNIX hosts which are IEEE standard and not
    byte swapped, it comes close enough to be useful  for  communicating
    with external applications in some cases.
    
    A  true  FITS  image kernel is planned for IRAF.  This will probably
    appear in one of the V2.10 patches, sometime during 1992.
    
    
2.7.2.4 QPF image kernel changes

    The QPF image kernel is the interface  between  the  QPOE  (position
ordered  event file) interface and IMIO, allowing QPOE event files to be
accessed as images by general IRAF applications.   Photon  "images"  are
unique  in that the image raster is generated at runtime as the image is
accessed, optionally passing the photon  list  through  event  attribute
and  spatial  filters,  and  sampling  the  photons  to produce a raster
image.  For example,

    cl> imcopy "snr[time=@snr.tf,bl=4]" snr.imh

would filter the event list stored in the  file  "snr.qp"  by  the  time
filter  stored  in  file  "snr.tf", sample the image space blocking by a
factor of 4, and store the resultant image raster in the OIF image  file
"snr.imh".

    cl> display "snr[time=@snr.tf,bl=4]" 1

would  display  the  same  image raster without creating an intermediate
disk image.

The changes to the QPF interface for V2.10 included the following.

o   A bug was fixed which would prevent  very  long  filter  expressions
    from  being  correctly  recorded  in  the  IMIO  image  header.  The
    current version of IMIO stores  applications  header  parameters  in
    FITS  format,  hence  multiple FITS cards are required to store long
    filter expressions.  The bug would cause only one such  card  to  be
    output.

o   A  new  facility  was  added  which allows general expressions to be
    computed for the input event list and  stored  as  keywords  in  the
    output  image header.  The header of the input QPOE file can contain
    one or more parameters named defattr1,  defattr2,  and  so  on.   If
    present,  the  string  value  of  each  such  parameter  should be a
    statement such as
    
        exptime = integral time:d
    
    which will cause a keyword  named  "exptime"  to  be  added  to  the
    output  image  header,  the  scalar  value  of the keyword being the
    value of the expression on the right.  Currently, only the  integral
    function  is  provided.   This computes the included area of a range
    list field of  the  event  attribute  expression,  such  as  a  time
    filter.   In  the example, "time" is the name of the event attribute
    to be integrated, and the ":d"  means  use  a  range  list  of  type
    double  for the computation.  The data types currently supported are
    integer, real and double.
    
    Other minor changes  to  QPF  included  improvements  to  the  error
    recovery, and other changes to support very large filters.
    
    
2.7.3 World coordinate system support (MWCS)

    MWCS  is  the IRAF world coordinate system package, one of the major
new system interfaces developed for the new  image  structures  project.
A  full  description  of  the  MWCS  interface  is  given  in  the  file 
mwcs$MWCS.hlp in the online system, and in the file  mwcs.txt.Z  in  the
IRAF network archive.


2.7.3.1 Applications support

    MWCS  was  first released in V2.9 IRAF and at the time the interface
was new and few applications were yet using  it.   In  V2.10  IRAF  most
(but  not  all)  applications  which deal with coordinates now use MWCS.
These include all  of  the  system  plotting  tasks,  and  the  spectral
reduction  packages.   Details  of  the MWCS support added to the system
and science applications in  V2.10  are  given  in  the  IRAF  and  NOAO
package revisions section of this revisions summary.


2.7.3.2 New function drivers

    Function   drivers   for   the  arc,  sin,  and  gls  nonlinear  sky 
projections were added, as well as a special  function  driver  for  the
multispec  image format.  The latter allows general programs which don't
know anything about spectra to  access  and  display  spectra  in  world
coordinates, e.g., for plotting.


2.7.3.3 WCS attributes

    The  maximum number of "attributes" per WCS was increased from 64 to
256, mainly to support the multispec function driver, which makes  heavy
use  of  attributes.   A  limit  on the size of a single attribute value
string was removed, allowing arbitrarily large attribute  values  to  be
stored.


2.7.3.4 Axis mapping

    Axis  mapping  is now fully implemented.  Axis mapping is used when,
for example, you extract a 2 dimensional section from  a  3  dimensional
image  and  write  the result to a new image.  Axis mapping allows the 2
dimensions of the new image to be mapped  backed  into  the  original  3
dimensional   WCS,   making   it  possible  to  get  the  full  physical 
coordinates (which are 3 dimensional) for any  point  in  the  extracted
image.   A  new  header keyword WAXMAPnn was added to store the axis map
in image headers.


2.7.3.5 MWCS save format

    The newer IRAF image formats such as QPOE  are  capable  of  storing
arbitrarily  complex  objects such as a MWCS in an image header keyword.
In the case of a stored MWCS object, the MWCS interface  is  responsible
for  encoding  the  object in its external storage format, and restoring
it to a MWCS descriptor when the MWCS is accessed.  The code which  does
this  was revised to add a new version number for the stored V2.10 MWCS,
to make it possible to differentiate between the MWCS save formats  used
in  V2.9  and  V2.10  and allow recovery of MWCS objects from data files
written under V2.9.


2.7.3.6 Bug fixes

    Since MWCS is a new interface and V2.10 saw its first  real  use  in
applications,  a  number  of  interface  bugs were discovered and fixed.
Most of the bugs turned out to be in the part  of  MWCS  which  converts
between   the  internal  MWCS  WCS  representation,  and  the  FITS  WCS 
representation, used for those image formats that  still  use  FITS-like
headers.   Bug  fixes included a problem with the treatment of CROTA2, a
problem with the FITS CD matrix, an axis  mapping  problem  that  caused
"dimension  mismatch"  errors,  and  a  problem  with  support  for  the 
old-style CDELT/CROTA which could result in  a  singular  matrix  during
WCS inversion when compiling a transformation.


2.7.4 Event files (QPOE)

    The  QPOE  interface  is  the interface responsible for creating and
accessing event files, the main data format produced by  event  counting
detectors.   We summarize here the main enhancements to QPOE made during
the preparation of V2.10.  Some of these features  appeared  earlier  in
the  patches  made  to  V2.9  IRAF  but  these revisions have never been
formally documented so we summarize  both  the  old  and  new  revisions
here.  See also the discussion of the QPF image kernel given earlier.


2.7.4.1 Blocking factors

    The  builtin  default  blocking factor, when sampling the event list
to make an image raster, is one.  This may be changed on a  per-datafile
basis by defining the parameter defblock in the QPOE file header.


2.7.4.2 Parameter defaults

    Since  parameters such as the blocking factor can be set at a number
of levels, a parameter defaulting scheme was defined  to  determine  the
precedence  of  parameter  overrides.  The lowest level of precedence is
the builtin default.  Next  is  any  datafile  specific  value  such  as
defblock.   A  value  such  as  blockfactor  set in the QPDEFS file will
override the datafile default value if any.   Specifying  the  parameter
value  in  a  runtime  filter  expression  or qpseti call is the highest
order of precedence and will override any other setting.

Another way to think of this is the  more  recently  the  parameter  was
set,  the  higher  the  precedence.   The  oldest  value  is the default
builtin to the code.  Next is the datafile value, usually set  when  the
datafile  was  created.   Next  is the QPDEFS macro file, usually set by
the user or for a site.  Last (highest precedence) is the value  set  by
the user when the data is accessed.


2.7.4.3 Referencing the current datafile in macros

    A  special  symbol $DFN is now recognized during macro expansion and
if present is replaced by the filename of the current QPOE  file.   This
allows  macros  to be written which automatically perform some operation
involving the  datafile  to  which  they  applied,  e.g.,  computing  an
attribute  list  from  aspect  or data quality information stored in the
datafile header.


2.7.4.4 Bitmask expressions

    Bitmask expressions may now be negated, e.g., "%3B" is the  mask  03
octal, "!%3B" or "!(%3B)" is the complement of 03 octal.


2.7.4.5 Large time filters

    A  number  of  changes  and bug fixes were made to QPOE for V2.10 to
support large time filters.  These are lists of  "good  time"  intervals
used  to  filter  the  event list.  These large time filters may contain
several hundred double precision time intervals  spanning  the  exposure
period.   Often  a  large time filter is combined with a complex spatial
filter (PLIO mask) to filter an event list consisting  of  from  several
hundred  thousand  to  several  million  events.   QPOE  can handle this
efficiently regardless of whether the data is temporarily  or  spatially
sorted  and  regardless  of  the  complexity  of the temporal or spatial
filters.

A number of minor bugs were fixed caused by the large filter expressions
overflowing  various buffers.  The default sizes of the program and data
buffers used to compile filter expressions were increased to  allow  all
but  very  large  filters  to  be  compiled without having to change the
defaults.  If the buffers  overflow  more  space  can  be  allocated  by
setting  the  progbuflen  and  databuflen  parameters  in  QPDEFS (these
buffers are not dynamically resized at runtime for efficiency  reasons).
During  testing with large time filters it was discovered that a routine
used to test floating point equality was being used  inefficiently,  and
compilation  of  large time filters was taking a surprisingly long time.
A change was made which reduced the time to compile large filters  by  a
factor of 10 to 15.


2.7.4.6 Default filters

    QPOE   now  fully  supports  default  event  attribute  and  spatial 
filtering of data at runtime.  The idea is that the full data  set  (all
events)  is  stored in the QPOE file, along with default event attribute
and spatial filters.  When the data is accessed these  filters  are,  by
default,  automatically  applied.  Any user specified event attribute or
spatial filters are "added" to the builtin default  filters  to  produce
the  combined filter used when the event list is accessed.  The point of
all this is to make it easy for  the  user  to  modify  or  replace  the
default  filters  and "reprocess" the raw event list.  In effect the raw
and processed event list are available in the same file.

The default filter and mask, if any, are stored in the  datafile  header
parameters  deffilt  and  defmask.   If  the  datafile contains multiple
event lists a default filter or mask may be associated  with  each  list
by  adding  a  period  and  the  name of the event list parameter, e.g.,
"deffilt.foo" would be the default filter for the event list "foo".

By default, if a default filter or mask exists for an event list  it  is
automatically  applied  when  the  event  list  is accessed.  Use of the
default filter or mask can be disabled in  QPDEFS  with  either  of  the
following statements:

    set nodeffilt
    set nodefmask

The  default filter and mask can also be disabled in a filter expression
by adding a "!" before the expression, as in the following example.

    display "snr[!time=@times.lst,pha=(3,8:11)]"

There are actually several variants on the "=" assignment operator  used
in  filter  expressions  such  as  that  above.   The  operator  "="  is 
equivalent to "+=", meaning the expression term on  the  right  adds  to
any  existing filter specified for the event attribute on the left.  The
operator ":=" on the other hand, means replace any  existing  filter  by
the new filter expression.


2.7.4.7 Alternate coordinate systems

    The  event  structure  used to represent each event in an event list
may  contain  multiple  coordinate  systems  if  desired,  for  example, 
detector  and  sky coordinates.  One coordinate system should be defined
as the default when the event list is created, and if the event list  is
to  be  indexed  it must be sorted using the coordinate system specified
as the default.  Any coordinate system may be  used  when  the  data  is
accessed  however;  this can result in quite different views of the same
data set.  For example,

    cl> display snr.qp 1

would display the QPOE file "snr.qp"  in  display  frame  1,  using  all
defaults  for  the event list, blocking factor, filter, mask, and so on.
The default event coordinate system would probably be  sky  coordinates.
To  display the same event list in detector coordinates, one could enter
the following command.

    cl> display "snr.qp[key=(dx,dy)]" 1

This assumes that the event structure fields "dx" and "dy"  are  defined
somewhere,  either  in  the  datafile header or in QPDEFS (otherwise the
actual field datatype-offset codes must be given).

Currently if the QPOE datafile has a WCS associated with it this WCS can
only  refer  to  one  coordinate  system,  normally  the  default  event 
coordinate system.  Additional WCS can  be  stored  in  the  QPOE  file,
either  in  the  stored  MWCS object or as separate MWCS objects, but at
present there is no mechanism for selecting which will be used  (if  the
parameter  qpwcs exists in the QPOE file header, this is assumed to be a
stored MWCS object and this is the WCS which will be used).



2.8 System Specific Changes


2.8.1 Sun/IRAF

    Since V2.10 has only just been completed and at this stage has  only
been  released on Sun platforms, there are few system specific revisions
to report.  For SunOS  there  were  several  system  specific  revisions
worth noting here.

o   The  HSI  binaries  for  the  sparc  architecture are now statically
    linked.  This makes them considerably larger,  but  avoids  problems
    with  SunOS  complaining  about  shared  library  version mismatches
    (note that we refer here to to Sun shared libraries - this is not  a
    problem  with  the IRAF shared library facility since we control the
    version numbers).

o   The HSI binaries for the Motorola architectures  (f68881  and  ffpa)
    are  not statically linked since they cannot be without running into
    linker problems warning about f68881_used etc.  To avoid or at least
    minimize warnings about SunOS shared library versions the system was
    linked on 4.1.1 instead of  4.1.2.   SunOS  4.0.3  versions  of  the
    Motorola HSI binaries are also available upon request.

o   The  system  as distributed was linked with the name server library,
    -lresolv.  This means that if the local host is  configured  to  use
    the  name server, IRAF will be able to access almost any host on the
    Internet without an entry in the /etc/hosts file on the local host.
    
    Additional  system  specific  changes  will  be  reported   in   the 
    documentation  distributed  with  each release, as V2.10 is moved to
    the various platforms for which IRAF is supported.
    
    
    
3. IRAF and NOAO package revisions

    The revisions for the various packages in the IRAF core  system  and
in  the NOAO packages are summarized below. There have been many changes
with this release.  Users are encouraged to refer  to  the  help  pages,
user's  guides  provided  with  some packages, revisions notes, and more
recent issues of  IRAF  Newsletters  for  more  details.   Comprehensive
notes  on  systems  and  applications  modifications  are  in  the files
pkgnotes.v210.Z and sysnotes.v210.Z in the directory  iraf/v210  in  the
network  archive.   This  summary  can  be  read  online by typing news.
Revisions notes for the various packages can also be accessed online  as
in the following example.

    cl> phelp dataio.revisions opt=sys


One  of  the system changes that affects many tasks in the IMAGES, PLOT,
and LISTS packages as well as most tasks in the  spectroscopic  packages
in  NOAO  is  the  full  implementation  of  the world coordinate system
(WCS), introduced in V2.9 but not fully integrated  into  the  IRAF  and
NOAO  tasks  at  that  time.   There  are  currently  three  classes  of 
coordinate systems: the logical system is in pixel units of the  current
image  section;  the  physical  system  is  in pixel units of the parent
image (for a WCS associated with a raster image); the world  system  can
be   any  system  defined  by  the  application,  e.g.  RA  and  DEC  or 
wavelength.  In general, this should be transparent to  the  user  since
most  defaults have been chosen carefully so that tasks perform the same
as in V2.9.  The NOAO spectroscopic tasks also use the WCS  extensively,
but  again,  this  should  be  transparent  to the user, although it can
cause some problems with backward compatibility.  Users will notice  the
biggest  difference  in the image headers with additional keywords added
by the  interface.   Two  tasks  in  the  PROTO  package  may  help  the
interested  user  understand  more  about  the  WCS  -  see  wcsedit and
wcsreset.  Technical notes on the WCS are available in a  paper  in  the
iraf$sys/mwcs  directory.   Type  the  following  to read more about the
MWCS interface.

    cl> phelp mwcs$MWCS.hlp fi+



3.1 Changes to the IRAF system packages


3.1.1 DATAIO package modifications

o   The output defaults for wfits have  been  modified.   If  the  pixel
    type  on  disk  is  real or double precision the output will be IEEE
    format (FITS bitpix = -32 or -64, respectively).  If the pixel  type
    on  disk  is  short  integer  then the output will be integer format
    (bitpix = 16) as before.  These defaults can of  course  be  changed
    by modifying the parameters for wfits.

o   The  wfits  "blocking_factor"  parameter can accept values up to and
    including 10 for variable blocked devices, i.e.  1/2"  tape  drives,
    Exabytes,  and  DATs.   If the "blocking_factor" parameter is set to
    "0", as in the default, the value is read from  the  "fb"  parameter
    in  the tapecap file (usually 10 for variable blocked devices).  For
    fixed blocked devices such as  cartridge  tape  drives  the  default
    value  for  the  "fb"  parameter  in the tapecap file is 22 (used to
    determine a buffer size) and the block size of the device  is  given
    by the "bs" parameter.

o   All  tasks were modified to accept tapecap parameters as part of the
    magtape file name syntax.  Tapecap parameters can  now  be  appended
    to  the  magtape  file  name  to  add  to  or override values in the
    tapecap file.  For example, "mta6250[:se]" is a valid  magtape  file
    name  (the "" are important when tapecap parameters are specified at
    execution time).  See the file os$zfiomt.c for  more  details  about
    the tapecap parameters.

o   The  rfits  task  has  been  modified to permit a short last record,
    i.e. a last record that has not been padded out to 2880  bytes.   No
    warning messages are issued.

o   rfits  was modified to map ASCII control characters in the header to
    blanks.

o   The sequence number appended to disk file names by rfits  and  wfits
    was modified to 4 digits, i.e. 0001 - 9999.
    
    
3.1.2 IMAGES package modifications

o   WCS  (world coordinate system) support was added to all tasks in the
    IMAGES package that could  introduce  a  coordinate  transformation.
    Some  tasks  had  already been modified for the V2.9 release.  These
    tasks  (blkavg,  blkrep,  geotran,   imcopy,   imlintran,   imshift, 
    imslice,   imstack,  imtranspose,  magnify,  register,  rotate,  and 
    shiftlines),  upon  execution,  will  update  the  image  header  to 
    reflect any transformation.

o   The  listpixels  task  was modified to list the pixel coordinates in
    either logical, physical, or world coordinates.  A format  parameter
    was  added  to  the task for formatting the output pixel coordinates
    taking precedence over the WCS in the image header, if used.

o   A new imcombine task was  added  to  the  package.   This  new  task
    supports  image  masks  and  offsets,  and  has an assortment of new
    combining algorithms.  See the help pages for  complete  details  on
    this powerful new task.

o   The  imhistogram  task  has  a  new "binwidth" parameter for setting
    histogram resolution in intensity units.

o   The default values for the parameters "xscale" and "yscale"  in  the
    register  and  geotran  tasks  were  changed  from  INDEF to 1.0, to
    preserve the scale of the reference image.
    
    
3.1.3 IMAGES.TV package reorganization and  modifications

o   The TV package has been reorganized.  The IIS dependent  tasks  have
    been  moved  into  a subpackage, TV.IIS.  The imedit, imexamine, and
    tvmark tasks that were previously in PROTO have been moved to TV.

o   A new task wcslab developed at  STScI  by  Jonathan  Eisenhamer  was
    added  to  the  package.  wcslab overlays a labeled world coordinate
    grid on an image using WCS information stored in the header  of  the
    image or in parameters of the task.

o   imexamine  was  modified  to  use WCS information in axis labels and
    coordinate readback, if selected by the user.  Two  new  parameters,
    "xformat"  and  "yformat",  were  added to specify the format of the
    WCS if it is not present in the header of the image.

o   A new option  was  added  to  imexamine  to  allow  for  fitting  1D
    gaussians to lines or columns.

o   tvmark  had  two cursor key changes.  The "d" keystroke command that
    marked an object with a dot was changed to ".";  the  "u"  keystroke
    command that deleted a point was changed to "d".
    
    
3.1.4 LISTS package modifications

o   Two  new parameters were added to the rimcursor task, "wxformat" and
    "wyformat".  These  parameters  allow  the  user  to   specify   the 
    coordinate  formats  for  the  output  of  the task and override any
    values stored in the WCS in the image header.
    
    
3.1.5 OBSOLETE package added

o   An new package called OBSOLETE was added.  Tasks will  be  moved  to
    this  package  as  they  are  replaced by newer tasks in the system.
    OBSOLETE tasks will then be removed at the time of the next release.

o   mkhistogram, imtitle, radplt, and the old imcombine task  have  been
    moved  to  the  OBSOLETE package.  Users should become familiar with
    phistogram, hedit, pradprof, and the  new  imcombine  and  use  them
    instead  since  mkhistogram, imtitle, radplt, and oimcombine will be
    retired with the next release.
    
    
3.1.6 PLOT package modifications

o   A new task called phistogram was added to the  PLOT  package.   This
    task  takes  input  from  an  image  or  from a list and allows full
    control over  the  plotting  parameters.   This  task  replaces  the
    obsolete.mkhistogram task.

o   A  new task pradprof was added to the PLOT package.  This task plots
    or lists  the  radial  profile  of  a  stellar  object.   This  task
    replaces the obsolete.radplt task.

o   A  new  task  called  gdevices  was  added to the package.  gdevices
    prints available information  known  about  a  particular  class  of
    device.   The  default  parameters are set up to print a list of the
    available stdimage devices in the standard graphcap file.

o   WCS support was added to the tasks graph, pcol(s), and  prow(s).   A
    new  parameter  called  "wcs"  was  added  to  define the coordinate
    system to be used on the axis, either logical,  physical  or  world.
    Two  additional parameters, "xformat" and "yformat", were also added
    to allow the user to set the format for axis labels  overriding  any
    values  in  the  image  header.   The "xlabel" parameter values were
    extended to include the special word "wcslabel" to  select  the  WCS
    label for the x axis from the image header.

o   WCS  support  was  added to the task implot.  A new parameter called
    "wcs" was added  to  define  the  coordinate  system  for  plotting,
    either  logical, physical, or world.  Two new ":" commands were also
    added: ":w" allows the user to set a  new  WCS  type  interactively;
    ":f"  allows  the  user to change the axis format, for instance, ":f
    %H" would change the axis to read h:m:s, if the world coordinate  RA
    had  been  defined  in the image header.  The "space" key now prints
    out the coordinate and pixel value information.

o   graph has a another new parameter "overplot" that  allows  the  user
    to overplot multiple plots with different axes.

o   The  default  parameters  for  "floor"  and "ceiling" in contour and
    surface were changed to INDEF.
    
    
3.1.7 PROTO package reorganization and modifications

    This package has been reorganized.  The PROTO  package  now  resides
in  the  core  system.  Tasks in the old PROTO package that were general
image processing tools were kept in this new PROTO package.  Tasks  that
were  more  data reduction specific were moved to the new NPROTO package
in the NOAO package.  The current PROTO package now contains  the  tasks
binfil,   bscale,  epix,  fields,  fixpix,  hfix,  imalign,  imcentroid, 
incntr,  imfunction,  imreplace,  imscale,  interp,  irafil,  joinlines, 
suntoiraf, wcsedit, and wcsreset.

o   The  new  task  hfix  was added to the package. This task allows the
    user to extract the image headers into a text file, view  or  modify
    this  file  with  a  specified  command,  and  then update the image
    header with the modified file.

o   A new task called suntoiraf was added to this package.   This  is  a
    host  dependent  task that will most likely be useful only on Sun's.
    This task converts a Sun raster file into an IRAF image.

o   Two new tasks dealing with the  WCS  were  added  to  this  package,
    wcsreset  and  wcsedit.   wcsreset  resets the coordinate systems in
    the image header to the logical coordinate system.   wcsedit  allows
    the  user to modify the existing WCS or to create a new WCS and then
    update the image header.

o   A new version of bscale was added to  the  package.   The  task  now
    takes a list of input images and output images.

o   A  new  version  of  imfunction  was added to the package.  The task
    supports many more functions, for example log10,  alog10,  ln,  aln,
    sqrt,  square,  cbrt,  cube,  abs,  neg,  cos, sin, tan, acos, asin,
    atan, hcos, hsin, htan, and reciprocal.

o   imreplace was modified to support the "ushort" pixel type.

o   The task join has been renamed joinlines.
    
    
3.1.8 Additions to XTOOLS and MATH

    Programmers may be interested in the following new additions to  the
XTOOLS and MATH libraries.

o   The  interactive  non-linear  least  squares fitting package INLFIT,
    developed by Pedro Gigoux at CTIO, was added to XTOOLS.

o   The 1D  image  interpolation  routines  in  the  MATH  library  were
    modified to support sinc interpolation.
    
    
3.1.9 Glossary of new tasks in the IRAF core system

Task            Package         Description

gdevices        plot    List imaging or other graphics devices
hfix            proto   Fix image headers
imcombine       images  Combine images pixel-by-pixel
phistogram      plot    Plot or print the histogram of an image or list
pradprof        plot    Plot or list the radial profile of an object
suntoiraf       proto   Convert Sun rasters into IRAF images
wcsedit         proto   Edit the image coordinate system
wcslab          tv      Overlay an image with a world coordinate grid
wcsreset        proto   Reset the image coordinate system


3.2 Changes to the NOAO Packages

    An updated version of the observatory task has been installed at the
NOAO level.  The task sets observatory parameters  from  a  database  of
observatories  or from the parameters in the task itself.  Many packages
and tasks within the NOAO packages that  need  information  about  where
the data was observed use information supplied by the observatory task.


3.2.1 ARTDATA package modifications

    A  new version of the ARTDATA package was released with IRAF version
2.9.1.  A summary of those changes plus modifications since that  update
are  listed below.  A more comprehensive list of the changes included in
V2.9.1 are discussed in IRAF Newsletter Number 10.

o   A new task mkechelle has  been  added  that  creates  artificial  2D
    echelle images.

o   A  new  task  mkexamples  has  been  added.  The task is intended to
    generate a variety of artificial images to be  used  in  testing  or
    demonstrations.

o   A  new  task  mkheader adds or modifies image headers using a header
    keyword data file.

o   The mk1dspec task was  modified  to  create  multispec  and  echelle
    format images, line by line.

o   A  parameter "header" was added to mkobjects, mknoise, mk1dspec, and
    mk2dspec so that a header data file could be  added  to  the  output
    image.   Other  header parameters are also added to the image header
    such as gain, rdnoise, and exptime.

o   A   "comments"   parameter   was   added   to   various   tasks   to  
    include/exclude  comments  in  the  header  of the output image that
    describe the data parameters.
    
    
3.2.2 ASTUTIL package modifications

o   A new task gratings  has  been  added  to  the  package.  This  task
    computes  grating  parameters;  five of the seven parameters must be
    specified at one time.

o   A new task setjd has been added to the package.  setjd computes  the
    geocentric,  heliocentric,  and  integer  local  Julian  dates  from 
    information given in the headers of the input list of images.   This
    information is then listed or added to the image headers.

o   A  few  changes  were  made  to  setairmass.  The  default value for
    "update" was changed to "yes"; an update  field  was  added  to  the
    "show"  messages;  a  warning is printed if both "show" and "update"
    are set to "no" indicating that nothing was done.
    
    
3.2.3 DIGIPHOT package modifications

    A new version of the DIGIPHOT package was installed.   Some  changes
were  made  to the existing APPHOT package used for aperture photometry,
and those are mentioned below.  But three new packages  have  also  been
installed, DAOPHOT, PHOTCAL, and PTOOLS.

DAOPHOT  has  been available for the past two years as an add-on package
known as TESTPHOT.  It is now part of the distributed system.  The  IRAF
version  of DAOPHOT, used to do photometry in crowded fields, has been a
collaborative effort with Peter  Stetson  and  Dennis  Crabtree  of  the
DAO.   For  the  convenience  of the many TESTPHOT users, changes to the
package since the last release of TESTPHOT are summarized below.

PHOTCAL  is  the  photometric  calibration  package  for  computing  the 
transformations  of  the  instrumental magnitudes output from APPHOT and
DAOPHOT to the standard photometric system.  This  package  has  been  a
collaborative effort with Pedro Gigoux at CTIO.

PTOOLS  is  a package containing an assortment of tools for manipulating
the data files produced from APPHOT and DAOPHOT.   If  users  are  using
STSDAS  TABLES format data files then they must first install the TABLES
layered package.  This package can be  obtained  from  either  STScI  or
NOAO (see iraf/contrib in the IRAF network archive).


3.2.4 DIGIPHOT.APPHOT package modifications

o   The  apselect  task  was  replaced  with the functionally equivalent
    txdump task.  txdump allows the user to select fields of  data  from
    the  output  data files produced from APPHOT tasks and either simply
    list the extracted data or save it in another file.

o   A new task called pexamine has been added to the package.   pexamine
    is  a  general  purpose tool for interactively examining and editing
    the data files produced from tasks  in  either  APPHOT  or  DAOPHOT.
    This task is intended to complement the batch oriented task txdump.

o   All  of  the APPHOT tasks will now query to verify the "datamin" and
    "datamax" values, if these values are used by the tasks.

o   The time of the observation, i.e. UT, can now be carried  over  into
    the  output  data  files,  if a keyword in the image header contains
    this information.

o   If there is bad data within  the  photometry  aperture  a  value  of
    INDEF will be stored in the data file for that magnitude.
    
    
3.2.5 DIGIPHOT.DAOPHOT (TESTPHOT) package modifications

    This  is  a new package but for the convenience of the many users of
the TESTPHOT add-on package, the changes to TESTPHOT  between  its  last
release  and  its  installation into the DIGIPHOT package as DAOPHOT are
summarized below.

o   The append, convert, dump, renumber, select,  and  sort  tasks  were
    renamed to pappend, pconvert, pdump, prenumber, pselect, and psort.

o   The  "text"  parameter was moved from daopars to the DAOPHOT package
    parameters.

o   All the DAOPHOT routines were modified so that  "psfrad",  "fitrad",
    and "matchrad" are defined in terms of scale.

o   The  tasks  allstar,  group,  nstar, peak, psf, and substar were all
    modified  to  include  "datamin"  and  "datamax"  in  their   verify 
    routines.

o   Support  was  added  for  a time of observation parameter to all the
    appropriate DAOPHOT tasks.  If present, this time  will  be  carried
    over into the output data files.

o   All  the DAOPHOT tasks except psf have been modified to accept lists
    of input and output files.

o   The new pexamine task was added  to  this  package.  pexamine  is  a
    general  purpose  tool  for  interactively examining and editing the
    data files produced from tasks in either APPHOT  or  DAOPHOT.   This
    task is intended to complement the batch oriented task txdump.

o   Several  changes were made to psf: the default PSF image header will
    now hold  up  to  66  stars  (but  it  is  still  dependent  on  the
    environment  variable  min_lenuserarea);  a  check was added so that
    the same star can not be added  to  the  PSF  twice;  potential  PSF
    stars  are  now rejected if their sky or magnitude values are INDEF;
    a check was added so that stars  with  INDEF  valued  positions  are
    treated as stars that were not found.

o   group  was modified so that the groups are output in y order instead
    of in order of the size of the group.

o   Both group and peak were modified so that stars with  INDEF  centers
    are not written to the output file.
    
    
3.2.6 IMRED package modifications

    The  spectroscopic  packages within the IMRED package have undergone
quite a bit of work and reorganization.  The spectroscopic packages  are
now  ARGUS,  CTIOSLIT,  ECHELLE,  HYDRA, IIDS, IRS, KPNOCOUDE, KPNOSLIT,
and SPECRED.  These packages are a collection of  tasks  from  APEXTRACT
and  ONEDSPEC  that  are appropriate for the specific applications.  All
these packages use the  new  versions  of  the  APEXTRACT  and  ONEDSPEC
packages;  the  changes for APEXTRACT and ONEDSPEC are summarized below.
Earlier versions of all these packages were  released  as  the  NEWIMRED
add-on   package.    The   NEWIMRED  package  is  now  defunct  and  the 
distributed system contains the latest versions of these packages.

The spectroscopic packages now contain "DO" tasks that are scripts  that
streamline the reduction process for the user.  The "DO" tasks have been
modified for each particular application.

The ARGUS package is for the reduction of data taken with the CTIO argus
instrument.  Its corresponding script task is doargus.

The  CTIOSLIT  package  is similar to the ARGUS package except that is a
collection  of  spectroscopic  tasks  used   for   general   CTIO   slit 
reductions.  The doslit task allows for streamlined reductions.

The  ECHELLE package  has the addition of the doecslit task for simplied
echelle reductions.  The dofoe task has been added for the reduction  of
Fiber Optic Echelle (FOE) spectra.

The  HYDRA package is used for the reduction of multifiber data taken at
KPNO.  The dohydra task has been customized for streamlining nessie  and
hydra reductions.

The  KPNOCOUDE  package  has  been  customized  for the KPNO Coude.  The
doslit task allows the user to go through the reduction process with  as
few  keystrokes as possible.  The do3fiber task is specialized for the 3
fiber (two arc and one object) instrument.

The KPNOSLIT package can be used for general slit  reductions  at  KPNO.
The  doslit  task  in  this  package  is  similar  to  that in the other
packages.

The  SPECRED  package  is  the  old  MSRED  package,  used  for  general 
multispectral  reductions.   This  is a generic package that can be used
for slit and multifiber/ aperture data.   General  doslit  and  dofibers
tasks are available.

Several of the spectroscopic packages has a special task called msresp1d
for creating 1d aperture response corrections from flat  and  throughput
data.  This task is specialized for multiaperture or multifiber data.

All  of  the "DO" tasks have reference manuals that are available in the
network archive in the iraf/docs directory.


3.2.7 IMRED.CCDRED package modifications

o   A new task ccdinstrument was added to the package.  The  purpose  of
    this  task  is  to  help users create new CCD instrument translation
    files to use with the package.

o   The  combine  task  (as  well  as  darkcombine,   flatcombine,   and 
    zerocombine)  is  the same task as the new imcombine task in IMAGES.
    A few parameters were added for compatibility with the CCDRED tasks.

o   A new parameter was added to  ccdproc  called  "minreplace".   Pixel
    values  in flat fields below the value for "minreplace" are replaced
    by the same value (after  overscan,  zero,  and  dark  corrections).
    This avoids dividing by zero problems.

o   The  default  computation  and  output  "pixeltype"  in  the package
    parameter for CCDRED are both real.   Note  that  both  can  now  be
    specified separately.

o   The  default  parameters  for  darkcombine and flatcombine have been
    changed.
    
    
3.2.8 NOBSOLETE package added

    This new package has been defined but currently no tasks  reside  in
it.   This package will be used as a repository for tasks that have been
replaced by newer tasks in the NOAO packages.  The NOBSOLETE tasks  will
then be removed at the time of the next release.


3.2.9 NPROTO package modifications

    The  old  PROTO  package was divided into two separate packages, one
called PROTO that now resides in the IRAF  core  system  and  the  other
called  NPROTO  that  resides  in  the NOAO package.  The current NPROTO
tasks  are   binpairs,   findgain,   findthresh,   iralign,   irmatch1d, 
irmatch2d,  irmosaic,  linpol,  and slitpic.  The imedit, imexamine, and
tvmark tasks were moved to the IMAGES.TV package. The  ndprep  task  was
moved  to  ONEDSPEC.  All other tasks were moved to the PROTO package at
the core level.

o   Two new tasks called findgain and  findthresh  were  added  to  this
    package.   findgain determines the gain and read noise of a CCD from
    a pair of dome flats and from a pair of bias/zero frames  using  the
    Janesick  method.   findthresh  estimates the background noise level
    of the CCD using a sky frame and the gain and readnoise of the CCD.

o   A new task called linpol has been added to the PROTO package.   This
    task  calculates  the  pixel-by-pixel fractional linear polarization
    and polarization angle for three  or  four  images.   The  polarizer
    must be set at even multiples of a 45 degree position angle.

o   The  task  ndprep used for CTIO 2DFRUTTI reductions was moved to the
    ONEDSPEC package.

o   The task toonedspec was  removed  since  its  function  can  now  be
    performed by the onedspec.scopy task.
    
    
3.2.10 ONEDSPEC package reductions

    There  have  been  significant  changes  to the ONEDSPEC package.  A
more detailed  revisions  summary  is  available  in  the  IRAF  network
archive as file onedv210.ps.Z in the subdirectory iraf/docs.

The new package supports a variety of spectral image formats.  The older
formats  can  still  be  read.   In  particular  the   one   dimensional 
"onedspec"  and  the  two  dimensional  "multispec" format will still be
acceptable as  input.   Note  that  the  image  naming  syntax  for  the
"onedspec"  format  using  record  number extensions is a separate issue
and  is  still  provided  but  only  in  the  IMRED.IIDS  and  IMRED.IRS 
packages.   Any  new spectra created are either a one dimensional format
using relatively simple keywords and a two or three  dimensional  format
which  treats  each  line of the image as a separate spectrum and uses a
more complex world coordinate system and  keywords.   For  the  sake  of
discussion  the  two formats are still called "onedspec" and "multispec"
though they are not equivalent to the earlier formats.

In addition, the one dimensional spectral tasks may also operate on  two
dimensional images.  This is done by using the "dispaxis" keyword in the
image header or a package dispaxis parameter if the keyword  is  missing
to  define  the  dispersion  axis.   In  addition  there  is  a  summing 
parameter in  the  package  to  allow  summing  a  number  of  lines  or
columns.   If  the  spectra are wavelength calibrated long slit spectra,
the product of the longslit.transform task, the  wavelength  information
will  also be properly handled.  Thus, one may use splot or specplot for
plotting such data without having to extract  them  to  another  format.
If  one  wants  to extract one dimensional spectra by summing columns or
lines, as opposed to using the more complex APEXTRACT package, then  one
can simply use scopy (this effectively replaces proto.toonedspec)

Another  major  change  to the package is that spectra no longer need to
be interpolated to a uniform sampling  in  wavelength.   The  dispersion
functions  determined  by  identify/reidentify  can now be carried along
with the spectra in the image  headers  and  recognized  throughout  the
package  and  the  IRAF  core  system.   Thus  the  WCS  has  been fully
implemented in the ONEDSPEC tasks and although much is to be  gained  by
this  it  can cause problems with earlier IRAF systems as well as making
it difficult to import data into  non-IRAF  software.   But  it  is  now
possible  to  use  imcopy  with  an  image  section  on  a spectrum, for
instance, and have the wavelength information retained correctly.

A sinc interpolator is now available for  those  tasks  doing  geometric
corrections  or  interpolations.  This option can be selected by setting
the "interp" parameter in the ONEDSPEC package parameters.

Other changes are summarized:

o   The new  task  deredden  corrects  input  spectra  for  interstellar
    extinction, or reddening.

o   The  new  task dopcor corrects input spectra by removing a specified
    doppler velocity.  The opposite sign can be used to  add  a  doppler
    shift to a spectrum.

o   The new task fitprofs fits 1D gaussian profiles to spectral lines or
    features in an image line or column.  This is done  noninteractively
    and driven by an input list of feature positions.

o   The  task  ndprep  was moved to this package from the PROTO package.
    ndprep is used for CTIO 2DFRUTTI reductions.

o   The new task sapertures adds or modifies beam numbers  and  aperture
    titles  for  selected  apertures based on an aperture identification
    file.

o   The new task sarith does  spectral  arithmetic  and  includes  unary
    operators.   The  arithmetic  can  be  performed  on  separate input
    spectra or on apertures within a multispec format image.

o   The task scombine has been added to the package.  This new  task  is
    similar  to  the  new  imcombine  task  in the IMAGES package but is
    specialized for spectral data.

o   The new task scopy copies  subsets  of  apertures  and  does  format
    conversions between the different spectrum formats.

o   The new task sfit fits spectra and outputs the fits in various ways.
    This includes a new feature to replace deviant points  by  the  fit.
    Apertures in  multispec and echelle format are fit independently.

o   The  tasks  addsets,  batchred,  bswitch, coincor, flatdiv, flatfit,
    subsets and sums were moved to the IIDS and IRS packages.

o   The task combine was removed with the all new scombine suggested  in
    its place.

o   The  tasks  rebin,  sflip  and shedit were removed from the package.
    Rebinning of spectra can now be done with scopy or  dispcor.   scopy
    and  imcopy  can  now  be  used  in place of sflip.  And hedit is an
    alternative for shedit.

o   bplot and slist have been modified to support the multispec format.

o   The task continuum now  does  independent  fits  for  multispec  and
    echelle format spectra.

o   There  is  now  only  one  dispcor  task doing the work of the three
    previous tasks dispcor, msdispcor and  ecdispcor.   Several  of  the
    parameters  for  this  task  have been changed.  The old "recformat"
    and "records" parameters for  supporting  the  old  onedspec  format
    have  been  removed  except in the IIDS/IRS packages.  A "linearize"
    parameter has been added for setting the interpolation to yes or  no
    on  output.   The  "interpolation"  parameter was removed since this
    information is now read from the package  parameter  "interp".   The
    "ignoreaps" parameter has been changed to "samedisp".

o   identify  and  reidentify now treat multispec format spectra and two
    dimensional  images  as  a  unit  allowing  easy  movement   between 
    different image lines or columns.  The database is only updated upon
    exiting the image.  The "j", "k", and "o" keys have  been  added  to
    the   interactive  sessions  to  allow  for  scrolling  through  the 
    different lines in a two dimensional  image.   The  database  format
    now  uses  aperture numbers rather than image sections for multispec
    format spectra.

o   The task specplot has new  parameters  "apertures"  and  "bands"  to
    select spectra for plotting in the multispec format.

o   splot  now  allows deblending of any number of components and allows
    simultaneous fitting of a linear background.   Several  cursor  keys
    have  been  redefined  and  colon  commands have been added to fully
    support the new multispec format and to add  even  more  flexibility
    to the task than before! Please see the help pages for details.

o   The  reidentify  task  is  essentially  a  new  task.  The important
    changes are  an  interactive  review  option,  the  ability  to  add
    features  from  a  line  list, using the same reference spectrum for
    all other spectra in a 2D  reference  image  rather  than  "tracing"
    (using  the  results  of  the  last  reidentification as the initial
    guess for the  next  one)  across  the  image,  and  matching  image
    lines/columns/apertures  from  a  2D  reference  image  to  other 2D
    images rather than "tracing" again.
    
    
3.2.11 RV package added

    This is a new package installed with IRAF version 2.10.   A  version
of  this package, RV0, has been available as an add-on for the past year
or so.  The package contains one main task fxcor that performs a Fourier
cross-correlation  on  the  input list of spectra.  The package supports
the multispec format.


3.2.12 TWODSPEC package modifications

    The old MULTISPEC package that has resided in the  TWODSPEC  package
for  years  has  been  disabled.   The code is still there for browsing,
however, and the package can be resurrected easily if needed.

The observatory  task  was  moved  to  the  NOAO  package  itself.   The
setairmass  task  was  moved  to  LONGSLIT.   And the setdisp task is no
longer needed; task or package parameters are used in its place.

Changes to the APEXTRACT and LONGSLIT packages are summarized below.


3.2.13 TWODSPEC.APEXTRACT package modifications

    A new version, version 3, of the IRAF  APEXTRACT  package  has  been
completed.   A  detailed  revisions  summary  is  available  in the IRAF
network archive (file apexv210.ps.Z in iraf/docs).

There were three goals for the new package: new  and  improved  cleaning
and  variance weighting (optimal extraction) algorithms, the addition of
recommended or desirable  new  tasks  and  algorithms  (particularly  to
support   large   numbers  of  spectra  from  fiber  and  aperture  mask 
instruments), and special support for the new image reduction scripts in
the various IMRED packages.

The  multispec  format,  the  default image format for all spectroscopic
packages except IIDS and IRS, is either 2D or 3D (the 3D format  is  new
with  this  release).   The  3D  format  is  produced when the parameter
"extras" is set to yes in the extraction tasks.  The  basic  2D  format,
which  applies to the first plane of the 3D format, has each 1D aperture
spectra extracted in a line.  Thus, the first coordinate  is  the  pixel
coordinate  along  the  spectra.   The  second  coordinate refers to the
separate apertures.  The third  coordinate  contains  extra  information
associated with the spectrum in the first plane.  The extra planes are:

        1: Primary spectra which are variance and/or cosmic ray cleaned
        2: Spectra which are not weighted or cleaned
        3: Sky spectra when using background subtraction
        4: Estimated sigma of the extracted spectra

If  background  subtraction  is  not  done then 4 moves down to plane 3.
Thus:

        output.ms[*,*,1] = all primary spectra
        output.ms[*,5,1] = 5th aperture spectrum which is cleaned
        output.ms[*,5,2] = raw/uncleaned 5th aperture spectrum
        output.ms[*,5,3] = sky for 5th spectrum
        output.ms[*,5,4] = sigma of 5th spectrum


The following summarizes the major new features and changes.

o   New  techniques  for  cleaning  and  variance  weighting   extracted 
    spectra have been implemented.

o   Special  features  for automatically numbering and identifying large
    numbers of apertures have been added.

o   There is no longer a limit to the number of apertures  that  can  be
    extracted.

o   The  new  task  apall  integrates  all  the  parameters used for one
    dimensional extraction of spectra.

o   The new task  apfit  provides  various  types  of  fitting  for  two
    dimensional multiobject spectra.

o   The  new  task  apflatten creates flat fields from fiber and slitlet
    spectra.

o   The new task apmask creates mask images  from  aperture  definitions
    using  the  new  pixel  list  image  format.  No tasks have yet been
    written, however, to use this new mask image format.

o   The  new  tasks  and  algorithms,  aprecenter  and  apresize,   will 
    automatically recenter and resize aperture definitions.

o   The  task  apio  is defunct.  Its functionality has been replaced by
    the APEXTRACT package parameters.

o   The task apstrip has been removed.

o   Minor changes have been made to the old "AP"  tasks  to  accommodate
    these  new changes in the package; in some cases new parameters have
    been added to the task and in other cases new  cursor  options  have
    been implemented.  See the help pages for details.
    
    
3.2.14 TWODSPEC.LONGSLIT package modifications

o   The  "dispaxis" parameter was added to the package parameters.  This
    value is used unless DISPAXIS is in the image header.
    
    
3.2.15 Glossary of new tasks in the NOAO packages

Task            Package         Description

addstar         daophot         Add artificial stars to an image
allstar         daophot         Group and fit psf to multiple stars
apall           apextract       Extract 1D spectra
apfit           apextract       Fit 2D spectra
apflatten       apextract       Remove shapes from flat fields
apmask          apextract       Create an IRAF pixel mask from apertures
aprecenter      apextract       Recenter apertures
apresize        apextract       Resize apertures
ccdinstrument   ccdred          Review instrument translation files
centerpars      daophot         Edit the centering algorithm parameters
chkconfig       photcal         Check the configuration file
continpars      rv              Edit continuum subtraction parameters
daofind         daophot         Find stars using the DAO algorithm
daopars         daophot         Edit the daophot algorithms parameter set
datapars        daophot         Edit the data dependent parameters
deredden        onedspec        Apply interstellar extinction correction
do3fiber        kpnocoude       Process KPNO coude three fiber spectra
doargus         argus           Process ARGUS spectra
doecslit        echelle         Process Echelle slit spectra
dofibers        specred         Process fiber spectra
dofoe           echelle         Process Fiber Optic Echelle (FOE) spectra
dohydra         hydra           Process HYDRA spectra
dopcor          onedspec        Apply doppler corrections
doslit          ctioslit        Process CTIO slit spectra
doslit          kpnocoude       Process KPNO coude slit spectra
doslit          kpnoslit        Process slit spectra
doslit          specred         Process slit spectra
evalfit         photcal         Compute standard indices
filtpars        rv              Edit the filter function parameters
findgain        nproto          Estimate the gain and readnoise of a CCD
findthresh      nproto          Estimate a CCD's sky noise
fitparams       photcal         Compute transformation equations
fitprofs        onedspec        Fit gaussian profiles
fitskypars      daophot         Edit the sky fitting parameters
fxcor           rv              Radial velocities via cross correlation
gratings        astutil         Compute and print grating parameters
group           daophot         Group stars
grpselect       daophot         Select groups from a daophot database
invertfit       photcal         Compute the standard indices by inversion
istable         ptools          Is a file a table or text database file?
linpol          nproto          Polarization and Stoke's parameters
keywpars        rv              Translate image header keywords
mkcatalog       photcal         Type in a standard star catalog
mkconfig        photcal         Prepare a configuration file
mkechelle       artdata         Make artificial 1D and 2D echelle spectra
mkexamples      artdata         Make artificial data examples
mkheader        artdata         Append/replace header parameters
mkimsets        photcal         Prepare an image set file for mkNobsfile
mk(n)obsfile    photcal         Make a starfield observations file
mkphotcors      photcal         Check photometric corrections files
msresp1d        argus           Create 1D response spectra
msresp1d        hydra           Create 1D response spectra
msresp1d        kpnocoude       Create fiber response spectra
msresp1d        specred         Create 1D response spectra
nstar           daophot         Fit the psf to groups of stars
obsfile         photcal         Make a starfield observations file
pappend         daophot         Concatenate daophot databases
pappend         ptools          Concatenate apphot/daophot databases
pconvert        daophot         Convert text database to tables database
pconvert        ptools          Convert text database to tables database
pdump           daophot         Print fields from daophot databases
pdump           ptools          Print columns of daophot/apphot databases
peak            daophot         Fit the psf to single stars
pexamine        apphot          Examine or edit an apphot output file
pexamine        daophot         Examine and edit a daophot database
pexamine        ptools          Examine and edit an apphot/daophot database
phot            daophot         Compute sky values and initial magnitudes
photpars        daophot         Edit the photometry parameters
prenumber       daophot         Renumber stars in a daophot database
prenumber       ptools          Renumber a list of apphot/daophot databases
pselect         daophot         Select records from daophot database
pselect         ptools          Select records from apphot/daophot databases
psf             daophot         Fit the point spread function
psort           daophot         Sort a daophot database
psort           ptools          Sort a list of apphot/daophot databases
sapertures      onedspec        Set or change aperture header information
sarith          onedspec        Spectrum arithmetic
scombine        onedspec        Combine spectra
scopy           onedspec        Select and copy apertures
seepsf          daophot         Compute an image of the PSF
setjd           astutil         Compute and set Julian dates in images
sfit            onedspec        Fit spectra
substar         daophot         Subtract the fitted stars
tbappend        ptools          Concatenate apphot/daophot tables databases
tbdump          ptools          Print columns of tables databases
tbrenumber      ptools          Renumber apphot/daophot tables databases
tbselect        ptools          Select records from apphot/daophot databases
tbsort          ptools          Sort apphot/daophot tables databases
txappend        ptools          Concatenate apphot/daophot text databases
txdump          apphot          Dump selected fields of apphot output file
txdump          ptools          Print columns of text databases
txrenumber      ptools          Renumber apphot/daophot text databases
txselect        ptools          Select records from text databases
txsort          ptools          Sort apphot/daophot text databases



4. Programming Environment Revisions



4.1 Compatibility Issues

    V2.10 IRAF requires that any local IRAF  programs  external  to  the
V2.10  system  (such  as  layered  packages or locally written tasks) be
fully recompiled if  they  are  relinked  against  V2.10.   The  problem
arises  only  if  the  programs  are  relinked;  external  programs will
continue to run after V2.10 is installed,  but  linker  errors  will  be
seen  if the programs are relinked without being fully recompiled.  This
is because the internal names of some  important  system  routines  were
changed  in  V2.10 to avoid name clashes with host system routines.  For
example, the SPP procedure "rename" is now translated to  "xfrnam"  when
the SPP code it appears in is compiled.

As  always, actual interface changes affecting existing source code were
very few.  The macro "E" in <math.h> was renamed to "BASE_E" to minimize
the  chance  of  an accidental name collision.  The calling sequence for
the onentry procedure (ETC) was changed, but since this is a little used
system  procedure  very  few  tasks should be affected.  A number of new
procedures were added to MTIO and the syntax of  a  magtape  device  has
changed;  old applications should be modified to use the MTIO procedures
to operate upon magtape device names.

These and other revisions  affecting  the  programming  environment  are
discussed in more detail below.



4.2 Portability Issues

    The  V2.10  UNIX/IRAF  kernel now includes "#ifdef SYSV" support for
System V UNIX, making it easier to port  IRAF  to  SysV  based  systems.
The  UNIX/IRAF  HSI  (host system interface) is still not as portable to
UNIX variants as it could be, but at this point it is easier for  us  to
make  the minor revisions required for a new port than to further refine
the HSI.  The disadvantage is that it is harder than it  should  be  for
people  in the community to do their own IRAF ports, due to the level of
IRAF expertise required to tune the code.  Someday we plan  to  generate
a  generic-UNIX  HSI.   Note that these comments pertain only to the few
thousand lines of code in the HSI - the bulk of the IRAF  code  is  100%
portable (identical on all IRAF systems) as it has always been.

The  recent  port  of  IRAF  to  A/UX  (the  Apple  Macintosh  UNIX)  is 
interesting  from  a  portability  standpoint  because   we   used   the 
publically  available  Fortran  to  C  translator  f2c  plus  the  GNU C
compiler gcc to compile all the SPP and Fortran code in IRAF.  This  was
remarkably  successful  and  means that the IRAF code is now portable to
any system with a C  compiler.   In  the  process  of  performing  these
compilations  a  few  dozen  minor bugs were found by the static compile
time checking performed by f2c  and  gcc.   The  IRAF  C  code  was  run
through  gcc  with  ANSI  mode  enabled,  and hence should now be ANSI-C
compatible.  The GNU debugger gdb proved to be  an  effective  tool  for
debugging of IRAF code compiled with gcc.



4.3 Software Tools


4.3.1 LOGIPC feature

    A  new  facility  has  been  added  to  UNIX/IRAF  (all systems) for
debugging interprocess communication (IPC).  This feature will  also  be
useful  for  debugging  tasks  standalone, particularly in cases where a
bug seen when running a task from the CL is difficult to reproduce  when
the  task is run standalone.  The new facility allows one to carry out a
normal  IRAF  session  while  transparently  logging  all   interprocess 
communications.   Each  process can then be rerun individually using the
logged IPC to exactly duplicate  the  functioning  of  the  process  to,
e.g., examine the program operation in detail under a debugger.

The  facility is this: if LOGIPC is defined in the host environment when
an iraf process is started, the process will  create  two  files  pid.in
and  pid.out, where pid is the process id.  Everything read from the IPC
input file is copied to the .in file, and everything written to the  IPC
output  (i.e., sent back to the CL) is copied to the .out file.  This is
done only for connected subprocesses.  It will work  for  any  connected
subprocess,  e.g.,  normal  cached  processes and graphics subkernels in
both foreground and background CLs, but not the i/o  of  the  CL  itself
since the CL is not driven by IPC.

The  IPC streams saved are an exact binary copy of whatever was sent via
IPC, including the binary IPC packet headers, and binary graphics  data,
and  so  on.   All  the IPC communications used to start up the process,
run zero or more tasks, and close  the  process  down  will  be  logged.
Most  IPC traffic is textual in nature so it will usually be possible to
examine the IPC files with a file pager, although  the  results  may  be
less  than  satisfactory  if  binary  data  such  as a graphics metacode
stream is logged.  It is not necessary to examine the IPC files  to  use
them for process execution or debugging.

A  particularly interesting use of this feature is to allow a process to
be run under the CL in the normal fashion, then rerun under a host level
debugger  using  the  saved IPC input to duplicate the input and actions
of the process when run under the CL.  For example,

    % setenv LOGIPC
    % cl
    cl> dir
    cl> logout
    % unsetenv LOGIPC

will run the CL, saving the IPC of all  subprocesses,  e.g.  x_system.e.
We can then run the system process manually, using the saved IPC input:

    % $iraf/bin/x_system.e -c < pid.in

To run the process under adb or dbx, using the saved input:

    % adb $iraf/bin/x_system.e
    :r <pid.in -c

or

    % dbx $iraf/bin/x_system.e
    dbx> r -c < pid.in

Note  that  the  redirection has to be given first for adb, and last for
dbx.  This  also  works  for  gdb   using   the   run   command.    Some 
implementations  of  adb  are  picky  about  syntax and will not allow a
space between the "<" and the process id in the :r command.

Running a task in  this  way  is  not  identical  to  running  the  task
standalone,  e.g.  using  a dparam file for parameter input, because the
full runtime context of the process as run under the  CL  is  reproduced
by  LOGIPC but not when the task is run standalone.  The differences are
subtle but can be important when trying to reproduce  a  bug  seen  when
the  process  is run under the CL.  It is often the case that a bug seen
when a task is run from the CL will  disappear  when  the  task  is  run
standalone, but in most cases LOGIPC will duplicate the bug.


4.3.2 XC changes

    The  xc  program  (IRAF  compiler-linker)  underwent  the  following 
changes for  V2.10,  in  addition  to  the  usual  host-system  specific
changes required to support new host compiler versions.

Multiple  "-p pkgname" arguments are now supported.  These are used when
compiling a module which uses multiple package environments, e.g.,

    cl> xc -p noao -p tables foo.x

Each package  environment  may  define  package  environment  variables,
directories  to  be searched for include files and libraries, and so on.
Package environments are used by the IRAF layered packages.

Host libraries named on the command line  using  the  -l  switch  (e.g.,
"-lresolv")  are  now  searched  after the IRAF system libraries, rather
than before as in previous versions of  xc.   If  the  host  library  is
referenced  by  absolute  pathname  it is still searched before the IRAF
libraries, since the command line order determines the search order.


4.3.3 SPPLINT code checker

    A static  code  checker  utility  spplint  has  been  developed  for
checking  SPP programs.  This uses the SPP translation utilities in IRAF
to convert SPP to Fortran, f2c to generate C code,  and  lint  to  check
the  C  code.   The  code  is  checked  in various ways at all phases of
translation.  Some of the most useful checking  are  performed  by  f2c,
which  checks  the number and type of arguments in all calls to IRAF VOS
library procedures.  In other words, spplint will determine if  an  IRAF
library  procedure  is  called incorrectly, as well as perform a variety
of other checks.

The spplint utility is not included in the main  IRAF  release,  but  is
available  separately.   Contact the IRAF project for information on the
availability of this and other optional code development utilities.


4.3.4 Multiple architecture support

    Multiple architecture support is a way of  using  multiple  sets  of
compiled  program  binaries within a single copy of IRAF.  Multiple sets
of binaries are used to support different  machine  architectures  (e.g.
sparc   and   Motorola),  different  compiler  options  (floating  point 
options,   vectorization   options,   profiling   options),    different  
compilers, and so on.

The  command  for checking the architecture of the IRAF core system or a
layered package has been changed from showfloat to arch to  reflect  the
fact  that  multiple  architecture  support  is no longer used merely to
select the floating point option.

    cl> mkpkg arch
    sparc

The default architecture of the distributed system is "generic", meaning
no  specific  architecture has been set (the source tree is generic, not
configured for any particular architecture).

It is suggested that developers of layered software for IRAF adopt  this
same convention in their root mkpkg files.


4.3.5 Package environments

    All  the  HSI  software  utilities  now permit multiple "-p pkgname"
package environment references.  The host  PKGENV  environment  variable
now also permits multiple package environments to be referenced, e.g.

    % setenv PKGENV "noao tables xray"

The  package  names  should  be  whitespace delimited (PKGENV is used to
avoid having to give the "-p" flags on the mkpkg or  xc  command  line).
To  successfully  load  a package enironment, the package root directory
must be defined in hlib$extern.pkg or in the  user's  host  environment.
A   host  environment  definition  will  override  the  value  given  in 
extern.pkg.


4.3.6 Finding module sources

    IRAF V2.10 includes a "tags" file in the IRAF root directory to  aid
software  development.  This file contains an index to all procedures in
the IRAF VOS and HSI and can be used with host editors  such  as  vi  to
rapidly  find  and  display the source for IRAF system procedures.  Note
that the names of the kernel procedures are given in upper  case,  e.g.,
"ZOPNBF",  whereas  the  names  of the VOS procedures are given in lower
case.  To use the tags file with vi, start the editor at the  IRAF  root
directory  and  while in the editor, type a command such as ":ta foo" to
view the source for procedure foo.



4.4 Programming Interface Changes


4.4.1 IEEE floating support

    Modifications were made to the IEEE floating conversion routines  in
the  OSB  package  to  support NaN mapping.  This is a low level package
used by, e.g., the MII package in ETC.  The interface  as  it  currently
stands is summarized below.

         ieepak[rd] (datum)               # pack scalar value
         ieeupk[rd] (datum)               # unpack scalar value
        ieevpak[rd] (native, ieee, nelem) # pack vector
        ieevupk[rd] (ieee, native, nelem) # unpack vector
     iee[sg]nan[rd] (NaN)                 # set/get NaN value
         ieemap[rd] (mapin, mapout)       # enable/disable NaN mapping
        ieestat[rd] (nin, nout)           # get count of NaN values
       ieezstat[rd] ()                    # zero NaN counters


The  new or modified routines are ieesnan, ieegnan, ieemap, ieestat, and
ieezstat.  By NaN (not-a-number)  we  refer  collectively  to  all  IEEE
non-arithmetic  values,  not  just  IEEE  NaN.  The routines ieesnan and
ieegnan set or get the native floating value used  to  replace  NaNs  or
overflows  occurring  when converting IEEE to the native floating format
(any floating value will do, e.g., zero or INDEF).  If  NaN  mapping  is
enabled,  the  ieestat  routines  may be used to determine the number of
input or output  NaN  conversions  occurring  since  the  last  call  to
ieezstat.  Both real and double versions of all routines are provided.

The  NaN  mapping enable switch and statistics counters are undefined at
process startup; programs which use the IEEE conversion  package  should
call   ieemap  to  enable  or  disable  NaN  mapping,  and  ieezstat  to 
initialize the statistics counters.


4.4.2 MATH libraries

    The following changes were made to the MATH libraries  in  the  IRAF
core  system.   Refer  to the online help pages of the affected routines
for detailed information.

o   The  one-dimensional  image  interpolation  library   iminterp   was 
    modified to add support for sinc interpolation.

o   A  new  library nlfit was added for non-linear function fitting.  An
    interactive graphics front end to this was also added in XTOOLS.

o   The name of the symbol E  in  <math.h>  was  changed  to  BASE_E  to
    minimize the chance of name clashes.
    
    
4.4.3 CLIO interface

    The  CLIO  (command  language i/o) interface underwent the following
changes for version 2.10 IRAF.

o   A README file was added to the source directory containing an up  to
    date interface summary.

o   The  routines  clgpset and clppset (get/put string valued parameter)
    were  renamed  clgpseta  and  clppseta.   The  old  procedures  were 
    retained  for  compatibility  but  are  now obsolete and may at some
    point in the future disappear or be reused for some other function.

o   Two new routines cllpset and clepset  were  added  for  listing  and
    editing psets (parameter sets).
    
    The calling sequences for the new pset routines are as follows.
    
        cllpset (pp, fd, format)    # list pset
        clepset (pp)                # edit pset
    
    These  new  routines are still considered experimental and should be
    avoided or used with caution (they could change).
    
    Internal to the  CLIO  code,  the  CLIO  parameter  caching  package
    underwent  minor  changes  to  add  a  new  clc_compress routine and
    improve pset handling, as part of the minilanguage support effort.
    
    
4.4.4 ETC interface

    The ETC interface contains miscellaneous system interface  routines.
The ETC interface underwent the following changes for V2.10 IRAF.


4.4.4.1 Calling sequence for onentry changed

    The  calling  sequence for the onentry routine was changed.  The new
calling sequence is as follows.

        action = onentry (prtype, bkgfile, cmd)

The onentry procedure is an optional procedure which is called  when  an
IRAF  process  starts  up.   Normally  the onentry procedure is a no-op,
passing control to the  IRAF  main  in-task  interpreter.   Custom  IRAF
applications,  e.g.,  the  CL,  have  a  special onentry procedure which
replaces the default in-task interpreter.

The change made to the onentry calling sequence was the addition of  the
additional  argument  cmd.  This argument receives the command line used
to invoke the IRAF process at  the  host  level.   The  application  can
parse  this command line to extract arguments, allowing the IRAF process
to operate as a host program (it is already possible to  call  any  IRAF
task  from  the  host  level, but use of an onentry procedure allows the
in-task interpreter to be bypassed and  gives  the  application  control
over parsing the command line).

See  etc$onentry.x  for  additional  information  on  how  to  use  this 
procedure.


4.4.4.2 New onerror and onexit procedures

    Two new procedures  onerror_remove  and  onexit_remove  were  added.
These have the following calling sequences.

        onerror_remove (proc)      # remove posted onerror procedure
         onexit_remove (proc)      # remove posted onexit procedure

The  new routines are used to remove onerror or onexit procedures posted
by a task during task execution.  Such user  procedures  are  called  if
the  task aborts (onerror procedures) or during normal task exit (onexit
procedures).  Formerly there was  no  way  to  "unpost"  the  procedures
other than by the normal cleanup occurring during task termination.


4.4.4.3 New gqsort routine

    A  new quick-sort routine gqsort (generalized quick sort) was added.
This has the following calling sequence.

        gqsort (x, nelem, compare, client_data)

gqsort is identical to the old qsort routine except for the addition  of
the  fourth  argument  client_data.   This  is an integer value which is
passed on to the compare procedure during sorting to  compare  two  data
values.  The compare routine is called as follows.

        result = compare (client_data, x1, x2)

The  new  routine  eliminates  the  need  to  use  a common area to pass
information to the compare routine, as was often necessary with qsort.


4.4.5 FIO interface

    The FIO interface (file i/o) underwent minor  changes  to  fix  some
bugs  affecting  pushed  back  data.  The F_UNREAD file status parameter
will now correctly report pushed back  data  as  well  as  any  buffered
input  file  data.   The  F_CANCEL  file  set option will now cancel any
pushed back data.


4.4.5.1 Nonblocking terminal i/o

    A new nonblocking form of raw mode terminal input  has  been  added.
This   permits   polling   the   terminal  for  input  without  blocking 
(suspending  process  execution)  if  no  input  is  available.   In   a 
character  read,  EOF is returned if no input is available otherwise the
character value  is  returned.   An  example  illustrating  the  use  of
nonblocking terminal i/o follows.

    include <fset.h>
    
    task foo
    
    procedure foo()

    int     fd, ch
    int     getci()

    begin
            fd = STDIN
            call fseti (fd, F_IOMODE, IO_RAW+IO_NDELAY)

            repeat {
                if (getci(fd,ch) == EOF)
                    call printf ("no pending input\r\n")
                else {
                    call printf ("ch = %03o\r\n")
                        call pargi (ch)
                }
                call sleep (1)
            } until (ch == '\004' || ch == 'q')

            call fseti (fd, F_IOMODE, IO_NORMAL)
    end


This  sample  program sets the terminal i/o mode to nonblocking raw mode
and polls the terminal once per second, printing the character value  in
octal  if  a  character is typed on the terminal, exiting when ctrl/d or
'q' is typed.  Note that in  raw  mode  characters  such  as  ctrl/d  or
ctrl/c  are  passed  through  as  data  and  do  not  get mapped to EOF,
generate an interrupt, and so on.  Raw mode i/o such as this  will  work
both   when  running  a  task  under  the  CL  and  standalone,  and  in 
combination with IRAF networking (e.g. to access a remote device).

Nonblocking  terminal  input  is  used   in   applications   which   run 
continuously but which we wish to be able to control interactively.


4.4.6 FMTIO interface

    The  FMTIO  interface  (formatted i/o) is used to format output text
or decode input text.  The V2.10 release  adds  two  new  printf  output
formats,   %H   and   %M.    These   are   used   to  print  numbers  in 
hours-minutes-seconds or minutes-seconds format and  are  equivalent  to
the  older  output  formats  %h  and  %m except that the number is first
divided by 15.  This converts degrees to hours allowing values given  in
units of degrees to be printed as hours with just a change of the output
format.  In other words, given a number N in units of degrees, %H  would
print  the number in hours-minutes-seconds, i.e., "hh:mm:ss.ss", whereas
%h   would   print   the   same   number   as   degrees-minutes-seconds,  
"dd:mm:ss.ss".   The  %m formats are similar except that only two of the
three fields are printed.


4.4.7 GTY interface

    The GTY interface is a generalized version of that  portion  of  the
older  TTY  interface  dealing  with termcap format files.  The TTY code
which accesses termcap format files has been extracted to form  the  new
GTY  interface,  allowing  arbitrary termcap format files to be accessed
by filename, unlike TTY which returns TTY descriptors given the  termcap
or  graphcap  device  name.   GTY  was  contributed  by Skip Schaller of
Steward Observatory.

            gty = gtyopen (termcap_file, device, ufields)
                 gtyclose (gty)
             cp = gtycaps (gty)
       pval = gtyget[bir] (gty, cap)
         nchars = gtygets (gty, cap, outstr, maxch)


The gtyopen call returns the GTY descriptor for the  named  device  from
the  file termcap_file.  The ufields string may be either NULL or a list
of  colon-delimited  device  capabilities,  which  will   override   the 
corresponding  capabilities  in  the  device  entry given in the termcap
file.  If termcap_file is the null string ufields is  taken  to  be  the
device  entry  for the named device.  The gtycaps routine may be used to
get the entire device entry as a string, whereas the gtyget and  gtygets
routines  are  used  to  get  the  values  of individual capabilities or
parameters.


4.4.8 MTIO interface

    MTIO is the magtape i/o interface.  The magtape  i/o  subsystem  was
extensively  revised  for  V2.10  IRAF,  as  documented  earlier in this
revisions summary.  The VOS level MTIO interface itself was not  changed
other  than  to  add a few new routines.  The tapecap facility is new in
V2.10.  The revisions to the host level magtape driver  ZFIOMT  required
that the calling sequences of some of the interface routines be changed.


4.4.8.1 MTIO applications programming interface

    The  current  MTIO  applications programming interface is summarized
below.  Most of these routines are new: the  old  routines  are  mtfile,
mtopen, mtrewind and mtposition.

          yes|no = mtfile (fname)
    yes|no = mtneedfileno (mtname)
              gty = mtcap (mtname)
                  mtfname (mtname, file, outstr, maxch)

                  mtparse (mtname, device, fileno, recno, attrl, maxch)
                 mtencode (mtname, maxch, device, fileno, recno, attrl)

              fd = mtopen (mtname, acmode, bufsize)
                 mtrewind (mtname, initcache)
               mtposition (mtname, file, record)


The  mtfile  routine  is  used  to  test whether the given filename is a
magtape file or something else, i.e., a disk file.   mtneedfileno  tests
whether  a  file number has been specified in mtname (e.g., to determine
whether or not to query for a file  number  parameter).   mtfname  takes
mtname  and  a  file  number and constructs a new magtape device name in
the output string.  mtparse  parses  a  magtape  device  name  into  its
component  parts,  and mtencode does the reverse.  mtcap returns the GTY
descriptor of the tapecap entry for  the  device.   gtyclose  should  be
used to free this descriptor when it is no longer needed.

Some  older  magtape applications programs parse the magtape device name
directly, looking for characters  like  `['.   These  old  programs  are
making  assumptions  about  the  form of a magtape device name which are
probably no longer true.  Such old applications should be  rewritten  to
use the new MTIO procedures for all magtape device name operations.


4.4.8.2 MTIO system procedures

    The  MTIO  interface  also  includes a number of procedures intended
for use in systems code.  These are summarized in the table below.

        mtallocate (mtname)
      mtdeallocate (mtname, rewind_tape)
          mtstatus (out, mtname)
           mtclean (level, stale, out)


The only new routine here is mtclean.  This is  called  by  the  mtclean
task  in the V2.10 SYSTEM package and is used to scan the magtape status
file storage area to delete old magtape position  status  files.   Prior
to  V2.10  these files were stored in the user's UPARM directory, but in
V2.10 the files are stored in /tmp so that multiple IRAF  sessions  will
share  the  same tape position information.  A special task is needed to
delete old position files in order to protect against,  e.g.,  one  user
deleting  another  user's  device  position  file  while  the  device is
actively in use.


4.4.8.3 Magtape driver procedures

    All access to the physical magtape device  is  via  the  host  level
IRAF  magtape  device  driver  ZFIOMT.   The driver procedures had to be
revised for V2.10 to  add  support  for  the  tapecap  facility  and  to
accommodate  changes  in the way the device position is maintained.  The
new driver procedures are summarized below.

        zzopmt (device, acmode, devcap, devpos, newfile, chan)
        zzrdmt (chan, buf, maxbytes, offset)
        zzwrmt (chan, buf, nbytes, offset)
        zzwtmt (chan, devpos, status)
        zzstmt (chan, param, value)
        zzclmt (chan, devpos, status)
        zzrwmt (device, devcap, status)


The corresponding KI (kernel interface) routines were also  modified  to
reflect  the  new  calling  sequences.   A  result  of this is that IRAF
networking  for  magtape  devices  is  incompatible  between  V2.10  and 
earlier versions of IRAF.

The host level device driver procedures are not normally called directly
in applications code (applications use mtopen).  Refer to  the  comments
in the source file os$zfiomt.c for additional details.


4.4.9 MWCS interface

    The  MWCS interface provides world coordinate system support for the
IRAF system and applications.  The main changes in  the  MWCS  interface
for   V2.10   were   bug   fixes  and  semantic  changes,  e.g.  various 
restrictions  having  to  do  with  WCS  attributes  were  removed,  new 
function  drivers  were  added, and so on.  These changes are documented
elsewhere in this revisions summary.

The only interface change affecting MWCS was the  addition  of  the  new
MWCS procedure mw_show.

        mw_show (mw, fd, what)


This  is used to dump a MWCS descriptor to the given output file, and is
useful for examining MWCS descriptors while debugging applications.



5. Getting Copies of this Revisions Summary

    Additional copies  of  this  revisions  summary  are  available  via
anonymous ftp from node iraf.noao.edu in the directory iraf/v210, or via
email from iraf@noao.edu.
IRAF (Mar90)             V2.9 Revisions Summary             IRAF (Mar90)


                   IRAF Version 2.9 Revisions Summary
                             April 10, 1990




1. Introduction

    This document summarizes the changes in IRAF version 2.9.  This  was
primarily   a  development  release  intended  to  support  applications 
software development, hence the major changes were  in  the  programming
environment,  although  there  are important new features of interest to
general users too.  Since IRAF V2.9 is primarily a development  release,
it  is not being released on all platforms, and it is expected that many
sites will not need to upgrade until IRAF  V2.10  is  available.   Sites
interested  in  obtaining  IRAF  V2.9 should contact the IRAF project to
determine if the release is available for a particular host system.   At
the  present  time,  the  release  is  being  made available for all Sun
systems, for VAX/VMS, and for the DECstation running Ultrix.

What follows is  a  brief  description  of  some  of  the  new  features
available  in  IRAF  Version  2.9.   This  is  not  intended  to  be  an 
exhaustive list, but rather a brief summary of the major  changes  since
the  last  release  of  IRAF,  Version 2.8, released in July 1989.  More
detailed revisions  notes  are  available  in  the  system  notes  file,
iraf$local/notes.v29,  as  well as in the online revisions notes for the
various packages.

Users looking for information on a particular new  package  should  note
that  if  the  package  is  not  mentioned  in  these  release notes and
therefore is not included in IRAF V2.9, that does not  necessarily  mean
that  it  is  not available.  Most major reduction and analysis packages
are now made available for testing as user installable layered  packages
before  they are included in the standard distribution.  For information
on the available add-on packages, contact the IRAF group, or  check  the
latest IRAF Newsletter.


This revisions summary is organized as follows:

        1.  Introduction

        2.  IRAF System Revisions

        3.  IRAF Package Revisions
            3.1. Changes to the System Packages
            3.2. Glossary of New Tasks in the IRAF System Packages
            3.3. Changes to the NOAO Packages
            3.4. Modifications and Additions to Calibration Data
            3.5. Glossary of New Tasks in the NOAO Packages

        4.  Programming Environment Revisions
            4.1. Changes to the Programming Utilities
            4.2. Programming Interface Changes



2. IRAF System Revisions


2.1 IEEE to native floating point conversions

    Support  has  been  added  to  the  programming  interfaces (section
4.2.3) for  converting  between  the  IEEE  floating  point  and  native
floating   point   data   formats,  including  both  single  and  double 
precision.  The FITS programs in DATAIO  (section  3.1.1)  make  use  of
this,  allowing  floating  point  data  to  be  exchanged in FITS format
without having to convert to type integer.


2.2 World coordinate system support

    A major new VOS interface MWCS has been  added  to  support  general
world  coordinate  systems  (WCS)  and  transformations thereon (section
4.2.1).  This includes support for linear, piecewise linear  or  sampled
WCS,  and  general  nonlinear  WCS such as the tangent plane or gnomonic
projection.

If a FITS image is read into the system which has WCS information in the
header,  the  WCS  will  be retained in the IRAF image header and can be
used in coordinate transformations.  The IMAGES tasks which move  pixels
around  have been modified to edit the WCS to reflect the transformation
(section 3.1.2).  The image i/o system will automatically propagate  the
WCS  of  an  image  to a new copy of the image, and will edit the WCS as
necessary if an image section is copied (this applies to all IRAF  tasks
which  operate  upon  images).   The task RIMCURSOR in the LISTS package
has  been  rewritten  to  add  support  for  coordinate  transformations 
(section  3.1.3),  and  can be used, e.g., to read out the RA and DEC of
objects on the image display using the image cursor, if  the  image  has
the necessary WCS information in the image header.

Full  integration  of  the  new world coordinate facilities into all the
IRAF applications, e.g., the graphics tasks and the  spectral  reduction
packages,  will  take  a  year  or  longer due to the amount of software
involved.  In  V2.9  the  IRAF  spectral  packages  have  not  yet  been
converted  to use MWCS, and if MWCS is enabled it could alter the normal
behavior of these packages.  IRAF V2.9 is therefore  shipped  with  MWCS
disabled.   What  "disabled"  means is that WCS information in the image
headers is not edited to reflect operations  involving  image  sections,
or  geometric  transformations of images.  Tasks such as RIMCURSOR which
use an already existing WCS  will  still  work  whether  or  not  header
editing  is  disabled.  If the spectral tasks will not be used and it is
desired  that  world  coordinates  be  propagated  correctly  in   image 
transformations,  MWCS  header  editing  can be enabled in either of the
following ways.

The MWCS transformations are disabled by defining the variable  "nomwcs"
in  the  IRAF  environment.   To  globally  enable  MWCS  by default for
everyone  using  the  system,  edit  the  file  "hlib$zzsetenv.def"  and 
comment  out the following line as shown (you want to add the leading #,
which will be missing in the distributed version):

    #set nomwcs = yes

To enable MWCS header editing temporarily, for the current IRAF run:

    cl> reset nomwcs = no

Detailed information on the coordinate systems defined by  MWCS  can  be
obtained in the online system with the command

    cl> phelp mwcs$MWCS.hlp fi+

Additional information is also given in the help page for RIMCURSOR.


2.3 IMFORT changes

    The  IMFORT interface (host level Fortran or C interface to the IRAF
image format) has undergone the following bug fixes and enhancements:

o   A couple  of  bugs  associated  with  the  IMDIR  (image  pixel-file
    directory) feature introduced in IRAF V2.8 have been fixed.

o   Image  clobber checking has been added.  By default, if you create a
    new image and another image with the same name already  exists,  the
    image  create  will  now  return  an error code leaving the existing
    image unchanged.  To override clobber checking in  IMFORT  programs,
    restoring  the  previous behavior of the interface, define "clobber"
    in your host environment.

o   IMFORT will now  perform  a  limited  filename  translation  service
    using  the  IRAF  VOS  filename translation code.  This should allow
    most IRAF filenames to  be  used  as  input  to  host  level  IMFORT
    programs.   Full VOS filename mapping is not provided, but filenames
    containing upper case characters and multiple "."  delimited  fields
    should be translated as in IRAF programs.

o   On  systems  with  multiple architecture support (e.g., Sun, Convex)
    the FC task, used to compile and link IMFORT  programs  from  within
    the  IRAF  environment, is now a script rather than a simple foreign
    task front end to XC.  The purpose of the script is to see that  all
    the  necessary  IRAF  and  host  level  command  line  switches  and 
    environment definitions (IRAFARCH,  FLOAT_OPTION,  etc.)  are  used.
    Previously,   users   had  to  make  these  environment  definitions 
    manually, and if they forgot the IMFORT program could fail  to  link
    or execute.

o   On  most  UNIX/IRAF  systems, the host library -lU77 is now searched
    automatically by FC when an IMFORT program is linked.  This  library
    is  not  used  by any of the IRAF code, but is required to link some
    Fortran programs that might want to use IMFORT.

Users are encouraged to use FC to link their  IMFORT  programs.   It  is
possible  to  manually  link against the IRAF libraries if you know what
you are doing, but the location of the libraries and the  required  host
level   command  line  switches  vary  for  different  systems  and  for 
different architectures of a single system,  and  it  is  easy  to  make
mistakes.


2.4 MKIRAF now copies login.cl to login.cl.OLD

    On  UNIX/IRAF systems, the MKIRAF command will now copy any existing
login.cl file to login.cl.OLD,  so  that,  for  example,  you  can  more
easily  merge  any  custom  changes  back  in  after running MKIRAF.  On
VMS/IRAF systems a new file version is created, as before.


2.5 Local additions to termcap/graphcap

    The  termcap  and  graphcap  device  capability  files   have   been 
reorganized  with  a  section  at  the  top  for local additions.  It is
recommended that any locally added entries be  made  in  this  area,  to
simplify  future system updates.  The local additions can then be simply
transferred to the new version of the file when a new  version  of  IRAF
is  installed  (any  entries  which  are  modified  versions of standard
entries should always be checked to see if anything has changed  in  the
distributed version).


2.6 BIN directories now smaller

    On  systems  with  multiple  architecture  support, the architecture
save file OBJS.arc stored in the BIN directory for each architecture  is
now  maintained  as  a  compressed file.  In a typical case this reduces
the size of the file by about a factor of two, saving  1-2  Mb  of  disk
space in each BIN directory.


2.7 Various system buffers increased in size

    The  layered software support in IRAF V2.8 (extern.pkg and all that)
had a problem with very long helpdb environment  strings,  limiting  the
number  of  external  packages  which  could  be  defined.   To fix this
problem, various buffers were increased in size  all  over  the  system.
The  maximum length of an environment variable such as helpdb is now 960
characters (12 80 character lines of text).  String parameters to  tasks
can  also  be  larger, and the system is more resistant to problems when
size limits are exceeded.  Foreign task commands, OS escapes, etc.,  can
all  be  larger  now.   The  current limit on such strings is about 1024
characters, and is defined at sysgen time by the  new  system  parameter
SZ_COMMAND in hlib$iraf.h.


2.8 Shared library versions

    The  Sun/IRAF  shared  library mechanism was modified to add support
for shared library versions.  The result is that when you  install  IRAF
V2.9,  which  has  a  different  shared  library  than  V2.8,  any local
programs or other layered software linked under V2.8  will  continue  to
run,  because  both  the old V2.8 shared library and the new V2.9 shared
library  are  included  in  V2.9  (with  different   version   numbers). 
Although  old programs will continue to run with V2.9, it is recommended
that they be relinked eventually to take advantage of the many  features
and  bug  fixes  provided  by V2.9.  In the case of very large packages,
e.g., STSDAS 1.0, it may be wise to wait until the  latest  release  can
be  obtained and installed before relinking, as the old version will not
have been tested under IRAF V2.9 (which of  course,  didn't  exist  back
then).


2.9 File pager enhancements

    The  system  file  pager, used in the PAGE task, the new PHELP task,
and other places, has undergone the following enhancements.

o   The N and P keys, used to move to the next  or  previous  file  when
    paging  a  list  of  files,  now  have a dual meaning: when paging a
    single file containing multiple formfeed delimited pages,  the  keys
    will  move  to  the next or previous page in the file.  This feature
    is used in the new PHELP task  to  page  a  large  file  containing,
    e.g., all the HELP pages for a package.

o   A  limited upscrolling capability is now supported, e.g., if you hit
    the 'k' key while in the pager, the screen will be scrolled  up  one
    line  in  the  file  being paged.  This feature may not be supported
    for some terminals, in which case the entire screen  is  redrawn  at
    the new file location.
    
    
2.10 STF image kernel enhancements

    Extensive  work  has  been  done  on  the  STF  image kernel in this
release (the STF kernel allows IRAF to access the Space Telescope  image
format directly).  The changes included the following.

o   Header  file  caching.   STF  images  often  have  quite  large FITS
    headers which can be time consuming to read.  A header file  caching
    scheme  is  now  used to optimize the kernel in cases where the same
    imagefile is repeatedly accessed, e.g.,  when  successively  reading
    each  element  of  a  large  group format image.  By default up to 3
    header files will be cached; this default should be  fine  for  most
    applications.   If  necessary  the  number  of  cache  slots  can be
    changed by defining the integer  variable  "stfcache"  in  the  IRAF
    environment (the builtin maximum is 5 cached headers per process).

o   The  semantics  of the kernel regarding header updates have changed.
    STF images differ from other IRAF images in that  they  may  consist
    of  a  group  of  images  all in the same file, with each individual
    image having its own  header  (the  group  header),  plus  a  single
    global  FITS  header  shared by all images in the group.  This is no
    problem in a read operation, but in  a  write  or  update  operation
    there  can  be  problems  since  parameters  cannot  be  added to or
    deleted from  the  individual  group  headers.   The  new  semantics
    regarding  STF image header updates are as follows: 1) when updating
    the header of a multigroup image (not recommended)  only  the  group
    header  is  updated, and attempts to add new parameters are ignored;
    2) when updating the header of an image containing a  single  group,
    both the group header and the FITS header are updated.
    
    As  a  result  of  these changes, the behavior of a single group STF
    image is now identical to that of  a  regular  IRAF  image.   It  is
    recommended  that  multigroup  STF images be treated as read only if
    possible, creating  only  single  group  images  during  interactive
    processing  (except  when  running  a  program  that  is  explicitly 
    designed to create multigroup images).

o   The kernel was modified to work with the new MWCS (world  coordinate
    system)   interface.    The  image  section  transformation  is  now 
    performed by MWCS rather than by the STF kernel.

o   A number of minor changes were made to the way the  group  parameter
    block  (GPB) cards are maintained in the IRAF image descriptor.  The
    comments on GPB definition cards are  now  preserved.   Restrictions
    on the grouping of GPB cards in the header have been removed.

o   A  number  of  bugs  were  fixed and restrictions removed, e.g., the
    size of a header is no  longer  limited  to  32767  characters  (404
    lines).
    
    The  IRAF core system and NOAO science applications were extensively
    tested with both single and multigroup  STF  images  using  the  new
    kernel,  and we now feel that it is safe to use the STF image format
    with these tasks, although the regular format is preferred if  there
    is  no  special  reason to use the STF format (the regular format is
    more efficient).
    
    
2.11 QPOE (event list image format) enhancements

    The QPOE image kernel, used for event  list  data  (photon  counting
detectors,   e.g.,   X-ray  satellites  such  as  ROSAT)  underwent  the 
following changes.

o   MWCS (world coordinate  system)  support  has  been  added  (section
    4.2.2).   This  provides  a  consistent  coordinate  system despite,
    e.g., the blocking factor, rect, or image section used to  construct
    an image matrix from an event list.

o   When  opening  a  QPOE  file  as  an  IRAF image, the runtime filter
    expression used to create the image  matrix  is  now  saved  in  the
    parameter  QPFILTn  in the image header (multiple cards are used for
    long expressions).

o   Region masks of arbitrary complexity and size can  now  be  used  to
    mask   the   event  list  when  reading  time-ordered  or  unordered 
    (unindexed) event lists.  This is done using the new  PLRIO  package
    (section  4.2.5) which provides the capability to efficiently random
    access large image masks of arbitrary complexity.

o   Unmatched brackets, braces, or parentheses are now  reported  as  an
    error  by  the  filter expression parser (this can occur even with a
    valid  expression,  e.g.,  due  to  truncation  of  the   expression 
    string).   A  reference  to  an  undefined  keyword,  e.g., due to a
    spelling error, is now detected  and  reported  as  an  error.   Any
    errors  occurring  during  expression  parsing  will  now  result in
    termination of the calling task, unless caught in an error handler.

o   A number of bugs were fixed.
    
    
2.12 Changes affecting image display in VMS/IRAF

    A new  version  of  Nigel  Sharp's  UISDISPLAY  program,  for  image
display   on   VMS   systems   running   UIS,   has  been  installed  in 
"iraf$vms/uis".  An executable for an  early  version  of  the  SAOIMAGE
display  program  for  the  X  window  system,  written by Mike VanHilst
(SAO), and ported to VMS by Jay Travisano (STScI)  has  been  placed  in
the  directory "iraf$vms/x11".  An executable for a VMS version of XTERM
(the X window terminal emulator, ported to VMS by  Stephan  Jansen),  is
also  in  this  directory.   We  wanted  our VMS users to have access to
these programs, although more development work  and  testing  is  needed
before  we  can  offer good support for X window based image display and
graphics on  VMS.   A  more  comprehensive  package  providing  enhanced
capabilities should be available as an add-on later this year.



3. IRAF Package Revisions

    The  most  notable  changes  to  the  tasks in the IRAF packages are
summarized below.  Further information may be obtained  by  reading  the
help  page  for  each  task,  or  by  paging  the  revisions  file for a
particular package.  For example, to page the revisions for  the  DATAIO
package:

    cl> phelp dataio.revisions op=sys



3.1 Changes to the System Packages


3.1.1 Modifications to tasks in the DATAIO package

o   The  RFITS and WFITS tasks have been modified to add support for the
    IEEE floating point format.  The "bitpix" parameter in WFITS can  be
    set  to -32 or -64 to specify real or double precision IEEE floating
    numbers on output.   RFITS  recognizes  these  same  values  in  the
    bitpix  keyword  in  the  FITS header on input and converts the data
    accordingly.  Note that this option must be selected by the user  as
    the  defaults for writing a FITS tape have not changed.  The user is
    cautioned that support for  the  IEEE  floating  formats  is  a  new
    feature of FITS and may not be supported by all FITS readers.

o   RFITS  was  modified so that the "iraf_file" parameter can be a list
    of output images or a image root name.
    
    
3.1.2 Modifications to tasks in the IMAGES package

o   MWCS (world coordinate system) support was added to those  tasks  in
    the  IMAGES  package  which  change  the geometry of an image, i.e.,
    IMSHIFT, SHIFTLINES, MAGNIFY, IMTRANSPOSE, IMCOPY,  BLKREP,  BLKAVG,
    ROTATE,  IMLINTRAN, REGISTER, and GEOTRAN (REGISTER and GEOTRAN only
    support simple linear transformations).  If one of  these  tasks  is
    used  to  linearly  transform  an image, the world coordinate system
    (WCS)  in  the  image  header  will  be  updated  to   reflect   the 
    transformation.   Note  that  MWCS  is  disabled  by default in IRAF
    V2.9, and must be explicitly enabled to allow these  tasks  to  edit
    the image header to update the WCS (see section 2.2).

o   The  IMSTATISTICS  task  was  modified.  The "verbose" parameter was
    renamed "format" with the default being set to "yes"  (fixed  format
    with  column  labels).   Otherwise  the  fields  are printed in free
    format with 2 blanks separating the fields.  The name of the  median
    field has been changed to "midpt".

o   The  IMHISTOGRAM  task  has  a new parameter called "hist_type" that
    gives  the  user  the  option  of  plotting  the   integral,   first 
    derivative,  or  second  derivative  of the histogram instead of the
    normal histogram.
    
    
3.1.3 Modifications to tasks in the LISTS package

o   The RIMCURSOR task in the LISTS package was completely rewritten  to
    add  MWCS  support,  so  that  coordinates may be output in any user
    specified coordinate system defined by the WCS  information  in  the
    image  header of the reference image.  For example, if an image with
    a TAN projection WCS is loaded into  the  image  display,  RIMCURSOR
    may  be  used  to  print  the right ascension and declination at the
    location defined by the image cursor.  Refer to the  help  page  for
    details.
    
    
3.1.4 Modifications to tasks in the PLOT package

o   A  new graphics kernel task IMDKERN (written by Zolt Levay at STScI)
    has been added to the PLOT package.  The new graphics kernel  allows
    the  graphics output of any task to be plotted as a graphics overlay
    on the image display.  As with the other graphics kernels, this  may
    be  done  by  calling  the  IMDKERN task directly, but is more often
    done by specifying the image display (e.g.,  device  "imd")  as  the
    output  device when running a graphics task.  Refer to the help page
    for details.

o   The CONTOUR task was modified so that it could be used with  IMDKERN
    to  overlay  contour  plots on the image display.  If the parameters
    fill=yes and perimeter=no are set the  contour  plot  is  scaled  to
    fill  the  entire  device viewport and all axis and plot labeling is
    disabled.  If the  image  being  displayed  also  fills  the  entire
    device  viewport (display frame) then the contour plot will be drawn
    to the same scale as the displayed image.  Refer to  the  help  page
    for details.

o   Several  tasks  in  the PLOT package were modified to allow use with
    image  specifications  containing  brackets,  e.g.,   group   format 
    images,  QPOE  filter  expressions,  and  image sections.  The tasks
    modified were PROW, PROWS, PCOL, PCOLS, SURFACE, and CONTOUR.

o   An option was added to the PVECTOR task to output  the  vector  (cut
    through  the  image at an arbitrary angle and center) as a text file
    or image, rather than plotting the vector.
    
    
3.1.5 Modifications to tasks in the SYSTEM package

o   A new task PHELP (paged help)  was  added  to  the  SYSTEM  package.
    PHELP  is  a script task front end to HELP which collects the output
    of HELP in a scratch file  and  pages  it  with  the  system  pager,
    allowing  one  to  randomly skip around to read the help text.  Note
    that paging of all the help pages in a package is supported, e.g.,
    
        cl> phelp images.*
    
    would page all the help files for the IMAGES package.

o   The NEWS task was completely rewritten, and is now used to page  the
    revisions  summary  for the current and previous releases.  In other
    words, one can now type NEWS to find out what is new in the  current
    release.

o   The  GRIPES  task  was  modified  to  send  mail to iraf@noao.edu or
    5355::iraf.  The IRAF site administrator  may  want  to  check  this
    script for compatibility with the local mail system.
    
    
3.2 Glossary of New Tasks in the IRAF System Packages

Task       Package                   Description

imdkern    plot      Image display device (IMD) graphics kernel
news       system    Summarize what is new in the current release
phelp      system    Paged HELP: collects and pages the output of HELP
rimcursor  lists     Read image cursor position in world coordinates



3.3 Changes to the NOAO Packages


3.3.1 New NOAO Packages

    A  new  package  ARTDATA, used to generate artificial data, has been
added to the NOAO packages.  ARTDATA includes tasks for  the  generation
of  star  fields,  optionally  containing  galaxies,  and  one  and  two 
dimensional spectra as well as simple test pattern  images.   The  tasks
GALLIST  and  STARLIST  provide  many  options  for  producing  lists of
galaxies or stars that can then be used by the task MKOBJECTS to produce
output images.  The tasks MK1DSPEC and MK2DSPEC provide tools for making
artificial spectral data.  The task  MKNOISE  allows  the  user  to  add
readout  noise, poisson noise and/or cosmic ray events to new or already
existing images.   The task MKPATTERN allows the  user  to  make  images
from a choice of patterns.


3.3.2 Modifications to Existing NOAO Packages


3.3.2.1 The ASTUTIL package

o   The  task  SETAIRMASS in the ASTUTIL package was modified so that it
    now precesses the coordinates to the epoch of the observation.
    
    
3.3.2.2 The DIGIPHOT.APPHOT package

o   A new task APTEST was added  to  the  DIGIPHOT.APPHOT  package  that
    tests the execution of the package.  Output files are generated that
    the user can review.

o   Two new parameters were added to DATAPARS, "datamin" and  "datamax".
    Pixels  outside  this  range  are  rejected  from  the  sky  fitting 
    algorithms and from the non-linear least square fits in  FITPSF  and
    RADPROF.

o   An  "update" parameter was added to all of the APPHOT tasks.  If the
    "verify"  parameter  is  set  to  "yes"  and  the  task  is  run  in 
    noninteractive  mode  update=yes will update the critical parameters
    in their respective parameter sets.

o   Four new parameters, "airmass", "xairmass", "filter", and "ifilter",
    were  added to the DATAPARS task.  These parameters provide the user
    the option of having the filter  and  airmass  quantities  from  the
    image  headers to be carried over into the APPHOT database files for
    later transmission to calibration programs.

o   A new algorithm "mean" was added to the sky fitting options.

o   A setup menu mode was added to all the APPHOT tasks.  When the  user
    types  "i" in interactive mode a setup menu is presented rather than
    a fixed set of predefined commands.
    
    
3.3.2.3 The IMRED.IRRED package

o   The APSELECT task (from the APPHOT package) has been made visible.

o   The image i/o for IRMOSAIC, IRALIGN, IRMATCH1D,  and  IRMATCH2D  has
    been  optimized  so  things should run much faster.  There is now an
    option to  trim  each  section  before  insertion  into  the  output
    image.   The  actions of these tasks can now optionally be output to
    the terminal.
    
    
3.3.2.4 The IMRED.MSRED package

o   A task called MSBPLOT was added to the  IMRED.MSRED  package.   This
    task  allows  the  user to plot a range of lines in multispec images
    in batch mode.
    
    
3.3.2.5 The ONEDSPEC package

o   Several modifications were made  to  the  ONEDSPEC  package.   These
    changes  affect  all  of the IMRED packages that include these tasks
    as well.

o   The equivalent width measurement using the "e"  keystroke  in  SPLOT
    is  now  computed  using the ratio of the spectrum to the continuum.
    The  previous  approximation  is  included  in   the   logfile   for 
    comparison.

o   The  DISPERSION  task will now add CDi_j (CD matrix) keywords to the
    image header as an alternative  way  of  expressing  the  dispersion
    function.   If  the keywords W0 and WPC or CRVALn and CDELTn are not
    in the image header the tasks reading this information  for  setting
    the  wavelength  (IDENTIFY, SENSFUNC, SPLOT, and SPECPLOT) will look
    for the CDi_j keywords.  This change should have no  affect  on  the
    NOAO   applications   but   provides   compatibility   with   STSDAS  
    applications  using  the  new  MWCS  interface  provided  with  IRAF 
    version 2.9.

o   The  call  to  the  CALIBRATE  task  in the script task BATCHRED was
    modified so that the "extinct" parameter is  always  set  to  "yes".
    Since  CALIBRATE  checks to be sure the data has not been previously
    extinction corrected this simple change provides more flexibility.
    
    
3.3.2.6 The PROTO package

o   Two new tasks, IMALIGN and IMCENTROID, were added  to  the  package.
    IMCENTROID  computes a set of relative shifts required to register a
    set of images.  The  task  IMALIGN  both  computes  the  shifts  and
    aligns the images.

o   The  JOIN  task  (previously a simple script) has been replaced by a
    compiled version which removes  many  of  the  restrictions  of  the
    previous version.

o   The  IR  tasks  have  been  modified  as  mentioned  above under the
    IMRED.IRRED section (section 3.3.2.3).

o   The TVMARK task was modified to permit deletion  (the  "u"  key)  as
    well  as addition of objects to the coordinate file.  Another cursor
    keystroke, the "f" key, was  added  allowing  the  user  to  draw  a
    filled rectangle.
    
    
3.3.2.7 The TWODSPEC.LONGSLIT package

o   Tasks  in  the  TWODSPEC.LONGSLIT  package that are used for setting
    wavelength information (EXTINCTION, FLUXCALIB, and  TRANSFORM)  were
    modified for the CDi_j keywords as outlined above for ONEDSPEC.
    
    
3.4 Modifications and Additions to Calibration Data

    The  calibration  data  used  by  some of the tasks in the TWODSPEC,
ONEDSPEC, and many of the IMRED packages are kept in a directory  called
ONEDSTDS  in  noao$lib.  The current contents of this directory are best
summarized by paging through its README file, e.g.,

    cl> page noao$lib/onedstds/README


A new directory  spec50redcal  in  "noao$lib/onedstds"  has  been  added
containing  flux  information for standard stars.  The data in this list
are from Massey and Gronwall, Ap. J., July 20, 1990.


3.5 Glossary of New Tasks in the NOAO Packages

Task        Package                 Description

aptest      apphot    Run basic tests on the apphot package tasks
gallist     artdata   Make an artificial galaxies list
imalign     proto     Register and shift a list of images 
imcentroid  proto     Compute relative shifts for a list of images
mk1dspec    artdata   Make/add artificial 1D spectra
mk2dspec    artdata   Make/add artificial 2D spectra
mknoise     artdata   Make/add noise and cosmic rays to 1D/2D images
mkobjects   artdata   Make/add artificial stars and galaxies to 2D images
mkpattern   artdata   Make/add patterns to images
msbplot     msred     Batch plots of multispec spectra using SPLOT
starlist    artdata   Make an artificial star list



4. Programming Environment Revisions


4.1 Changes to the Programming Utilities


4.1.1 MKPKG changes

    The MKPKG utility can now substitute the contents  of  a  file  back
into  the  input  stream,  as  a  special  case of the macro replacement
syntax.  For example, the sequence

    abc$(@file)def

would be translated as

    abc10def

if the file "file"  contained  the  string  "10".   The  replacement  is
performed  by  inserting  the  contents  of the file back into the input
stream, replacing sequences of newlines, spaces, or  tabs  by  a  single
space, and omitting any trailing whitespace.

The  "-p  <pkg>"  argument to MKPKG, XC, and so on loads the environment
of the named package pkg, to define the package  environment  variables,
load  the mkpkg special file list, define the directories to be searched
for global include files  and  libraries,  and  so  on.   Multiple  "-p"
arguments  may  be given to load multiple package environments.  What is
new is that if pkglibs is defined in the environment  of  a  package  to
list  the  package  library directories to be searched (the usual case),
and multiple package environments are loaded,  successive  redefinitions
of  pkglibs  will  add to the list of directories to be searched, rather
than redefining  the  old  list  as  each  new  package  environment  is
loaded.   For  example, if two package environments are loaded, and each
defines its own library, both libraries will be searched.


4.1.2 Generic preprocessor

    A minor change was made to the generic  preprocessor  which  affects
how  strings such as "FOO_PIXEL" are translated.  In the usual case, the
preprocessor replaces all occurrences of "PIXEL" by  "int",  "real",  or
whatever  the  actual  datatype  is.   The  translation  is  now context
sensitive.  Rather than  translating  "FOO_PIXEL"  as  "FOO_int"  (e.g.,
"MII_PIXEL"  ->  "MII_int"),  the  type name will now be output in upper
case if the rest of the name in which it occurs is upper  case.   Hence,
a  string such as "MII_PIXEL" will now be translated as "MII_INT".  This
allows the use of generic constructs to symbolize SPP macros.


4.1.3 SPP changes

    The language constant ARB, formerly defined as 32767, is now treated
differently depending upon how it is used.  In a declaration of an array
argument, ARB is replaced in the output Fortran by  a  "*",  e.g.,  "int
data[ARB]"  becomes  "INTEGER DATA(*)".  In an executable statement, ARB
is replaced by a very large ("arbitrarily" large) integer  value,  e.g.,
to  define  a DO-loop which is to loop an arbitrary number of times.  If
ARB is mistakenly used to dimension an array which is a  local  variable
rather  than  an argument, the SPP translator will now detect and report
the error.


4.1.4 Interactive development and the process cache

    Whenever a CL task is run and the process  containing  the  task  is
already  idling in the CL process cache, the CL will now check to see if
the modify date on the process executable has changed, and  restart  the
process  if  the  executable has been modified.  For example, when doing
software development from within the CL and  a  process  is  alternately
relinked  and  tested,  the  CL  will  now automatically detect that the
process has been relinked and will run  the  new  process,  without  any
need to manually flush the process cache.


4.2 Programming Interface Changes


4.2.1 New MWCS interface (world coordinate system support)

    A  major  new  VOS  interface MWCS, providing general facilities for
linear and nonlinear world coordinate systems, has  been  added  to  the
programming  environment  and  is used in IRAF V2.9 in IMIO, IMAGES, and
other parts of the system.  MWCS  is  intended  for  use  in  scientific
applications  as  well  as  in  system  code  such  as IMIO, hence is of
potential  interest  to  anyone  developing  software  within  the  IRAF 
environment.   The  source  directory  is  "mwcs"  and  the interface is
documented in the file "mwcs$MWCS.hlp".  Users  should  be  aware  that,
although  the  new  interface  addresses the general WCS problem and has
been carefully designed, a second version of the  interface  is  planned
and the current interface is not yet a "frozen" interface.


4.2.2 QPOE interface changes

    The  QPOE  (event  list  image)  interface  has been extended to add
routines to store MWCS objects in the QPOE header.   By  default,  there
is  one  MWCS  per  QPOE  file,  stored encoded in a machine independent
binary format in a variable length array qpwcs of type opaque.  The  new
routines are as follows:

            mw = qp_loadwcs (qp)
                 qp_savewcs (qp, mw)
          mw = qpio_loadwcs (io)

The  routines  qp_savewcs  and qp_loadwcs merely save a MWCS in the QPOE
header, or load a previously saved one.  The QPIO  (event  i/o)  routine
qpio_loadwcs  is  like  qp_loadwcs,  except that it will also modify the
Lterm of the MWCS to reflect any blocking factor or "rect" specified  in
the  filtering  expression  when  the  event  list  was opened.  The new
routine is called automatically by QPF and IMIO whenever  a  QPOE  event
list  is  opened  under image i/o, making the physical coordinate system
of the image matrix the same as physical event coordinates.

The calling sequences of  the  qp_add  and  qp_astr  routines,  used  to
conditionally add or update header parameters, have been changed (so far
as we could determine very  few  programs  exist  yet  which  use  these
routines,  so  we decided to risk an interface change).  The change made
was to add a  comment  argument.   This  change  was  motivated  by  the
observation  that  people  would  not use the routines but would instead
use lower level routines, in order to be able to set the  comment  field
if the parameter has to be added to the header.


4.2.3 IEEE support routines added

    Routines  for IEEE floating to native floating conversions have been
added to the MII and OSB  interfaces.   The  new  MII  routines  are  as
follows:

        nelem = miiread[rd] (fd, spp, maxelem)
               miiwrite[rd] (fd, spp, nelem)
                 miipak[rd] (spp, mii, nelems, spp_datatype)
                 miiupk[rd] (mii, spp, nelems, spp_datatype)

The  miiread  and  miiwrite  routines  are  like their FIO counterparts,
except that they are used only with data  of  the  indicated  type,  and
perform  the  IEEE to native floating conversion (or vice versa) as part
of  the  i/o  operation.   The   miipak   and   miiupk   routines   pack 
(native->IEEE) and unpack (IEEE->native) arrays of the indicated type.

The  lowest  level  conversion  routines are the OSB routines, which are
what the MII routines use to perform the lowest level translation.

                 ieepak[rd] (datum)
                 ieeupk[rd] (datum)
                ieevpak[rd] (native, ieee, nelem)
                ieevupk[rd] (ieee, native, nelem)
             iee[sg]nan[rd] (NaN)

The ieepak and ieeupk  routines  transform  a  single  scalar  value  in
place,  while  the  ieevpak and ieevupk routines transform vectors (note
that  the  package  prefix  is  "iee",  not  "ieee").   In-place  vector 
conversions  are  permitted.   Since  IRAF  does  not  support  the IEEE
not-a-number formats, NaN, Inf etc. values  are  converted  to  a  legal
native  floating  value  on  input.   The native floating value to which
NaNs are mapped (default zero) may be globally set with ieesnan.

On some systems, e.g., the VAX, the low level conversion routines may be
written  in  assembler  or  machine dependent C.  If so, the source file
actually used by the system will be found in the "host$as" directory.


4.2.4 New routine GETLLINE added to FIO

    A new routine getlline (get long line) has been added to FIO.   This
is  similar to getline, except that it will reconstruct arbitrarily long
newline delimited  lines  of  text,  whereas  getline  returns  at  most
SZ_LINE characters.

          nchars = getlline (fd, outstr, maxch)

The new routine should not be confused with the old routine getlongline,
a higher level routine which performs  a  similar  function,  but  which
also  ignores  comment  lines  and  help  blocks,  and  maintains a line
counter.


4.2.5 Modifications to PLIO/PMIO

    A new routine p[lm]_sectnotconst has been added  to  PLIO  and  PMIO
(the  pixel  list and image mask interfaces).  As the name suggests, the
routine tests whether a given rectangular section of the mask is all  at
the same value, and if so returns the mask value as an output argument.

     bool = pl_sectnotconst (pl_src, v1, v2, ndim, mval)

A  new  subpackage  PLRIO  has  been added.  This is used to efficiently
random access any 2D plane of an existing pixel list or image mask.

             plr = plr_open (pl, plane, buflimit)
                plr_setrect (plr, x1,y1, x2,y2)
          mval = plr_getpix (plr, x, y)
                 plr_getlut (plr, bufp, xsize,ysize, xblock,yblock)
                  plr_close (plr)

The mask is opened for random  access  on  a  special  descriptor  which
incorporates   a  scaled,  active  2D  lookup  table.   Most  subsequent 
plr_getpix calls will return the given  mask  value  directly  from  the
table  with very little overhead; only if the referenced pixel occurs in
a region too complex to be described by a  single  table  entry  is  the
value  computed  by  direct evaluation of the mask.  A special 2D binary
recursive  algorithm  (using   pl_sectnotconst   above)   with   log2(N) 
performance  is  used  to  calculate  the  scaled  lookup  table.  These
algorithms provide efficient table  generation  and  random  mask  pixel
access even for very large masks.
IRAF (Mar90)                 V2.8 Revisions                 IRAF (Mar90)


                   IRAF Version 2.8 Revisions Summary
                             June 30, 1989




1. Introduction

    This revisions notice coincides with the release of version  2.8  of
IRAF.   The  V2.8  release  is  a general release for all supported IRAF
hosts.

The following is a  brief  description  of  some  of  the  new  features
available  in  IRAF  Version  2.8.   This  is  not  intended  to  be  an 
exhaustive list, but rather a brief summary of the major  changes  since
the  last  major release of IRAF Version 2.5 in July 1987 and subsequent
intermediate releases primarily to support Sun/IRAF:  IRAF  Version  2.6
(February  1988),  IRAF  Version 2.6+ (March 1988), and IRAF Version 2.7
(December 1988).

More detailed revisions notes are available in the system notes files in
the  iraf$doc  and  iraf$local  directories,  as  well  as in the online
revisions notes for the various packages.



2. IRAF System Revisions

    This document highlights the most  notable  revisions  made  to  the
IRAF  core  system  software  for Version 2.8.  This is only a revisions
summary; no attempt is made to provide detailed technical  documentation
for  each  revision,  nor is there any attempt to exhaustively summarize
all revisions.  A complete record of all core system revisions  will  be
found  in  the System Notes for V2.8.  Additional information on some of
the topics covered below will  be  found  in  the  various  Installation
Guides  and  Site  Manager's  Guides, and in the IRAF User and Technical
Documentation manual sets.



2.1 Copyright notice

    Subject to  AURA  and  NSF  approval,  the  IRAF  software  will  be
copyrighted  sometime  during  1989.  As a first step in this process, a
copyright notice has been added to all core system  source  files.   The
notice  reads as follows: "Copyright(c) 1986 Association of Universities
for Research in Astronomy Inc".  We will also be adding  a  file  called
COPYRIGHT  to  the  distribution  stating the terms of the copyright and
associated licensing agreement for the software.

The intent of this  action  is  solely  to  protect  the  software  from
unauthorized  commercial exploitation, and the copyright grants, or will
grant, the right to copy, modify, and  redistribute  the  IRAF  software
provided  the  original copyright notice remains intact, the software is
made available in source form, and the rights we  grant  are  passed  on
with  the  software.   We  wish to prevent others, especially commercial
firms, from copyrighting IRAF software in their own  name  and  possibly
taking  away  the rights we grant with the software.  Granting the right
to modify and redistribute IRAF  software  does  not  mean  we  want  to
encourage  people  to do so, we merely want them to have the legal right
to do so if they feel they need to.



2.2 Major system enhancements

    The information in  this  section  is  provided  primarily  for  the
benefit  of  IRAF  site managers and programmers.  The reader interested
primarily in science applications may wish to skip ahead.  Some  systems
level familiarity with the current IRAF system is assumed.


2.2.1 Layered software enhancements

    A  given IRAF installation consists of the core IRAF system, and any
number of layered software products or external packages.  The  goal  of
the  layered software enhancements introduced in V2.8 is to make layered
software products self contained  and  hence  independent  of  the  core
system  and  of  other  layered  software.  Examples of layered software
products are the NOAO packages, LOCAL, STSDAS, PROS, and so on.

The layered  software  enhancements  make  it  possible  to  install  or
deinstall  a layered product by modifying only a single file in the core
IRAF system.  The core system may be updated without  affecting  layered
software,  and  vice  versa.  Since layered products are independent and
are simple to install, IRAF can easily be  configured  with  only  those
packages  needed at a particular site.  Software developers benefit from
the layered software enhancements because the  facilities  provided  for
development  and maintenance of layered software are equivalent to those
provided  for  development  of  the  core  IRAF  system  and  the   NOAO 
packages.   User  sites  benefit because it is easy to extend the system
with LOCAL packages of their own making.

Each layered product (usually this refers to a tree of  packages)  is  a
system  in itself, similar in structure to the core IRAF system.  Hence,
there is a LIB (global system library), one or more  BINs  (binary  file
directories),  a Help database, a set of global environment definitions,
and all the sources and runtime files, all  contained  within  the  same
directory  tree.   Layered software products, in their source only form,
are portable without change to any computer which runs IRAF.


2.2.1.1 The hlib$extern.pkg file

    This is the file which is modified to install or  deinstall  layered
software  products.   To  install  a  layered  product,  one  creates  a 
directory to hold the software, restores the files to  disk,  and  edits
the  extern.pkg  file  to  tell IRAF the name of the root package of the
layered product, and where  the  root  directory  is  located.   If  the
layered  software  is  distributed  in  source only form it will also be
necessary to recompile the software, but this is a completely  automated
process.


2.2.1.2 NOAO and LOCAL packages reorganized

    As  part of the project to better support layered software, the NOAO
and LOCAL packages have been reorganized  as  layered  products.   These
packages  are  now  structurally  equivalent  to  third party (non-NOAO)
packages, except that the directory trees  are  rooted  in  IRAF.   Both
packages  are  now  self  contained,  with  their  own  LIB,  BINs, Help
database, etc., and with an entry  in  extern.pkg,  like  other  layered
products.   The  NOAO  package  serves  as  a  working example of how to
configure a layered  package.   The  reorganization  of  these  packages
should be transparent to anyone merely using the system.


2.2.1.3 The template LOCAL

    The  LOCAL  package  included  with  the distributed system has been
stripped of all NOAO site-local tasks  and  restructured  as  a  layered
product,  the  template  local.   The  template  local contains only two
sample tasks and is not intended as an end-user package, but  rather  as
a  template  to  be  copied and modified by sites to construct their own
site dependent LOCAL package.  The desire to be able to  easily  develop
and  maintain  locally  added  packages was one of the major motivations
for the layered software enhancements project, and we  hope  that  sites
will  realize the significance of this new capability and take advantage
of it.


2.2.1.4 CL now supports package level BIN directories

    Rather than assuming a  global  BIN  directory  for  all  tasks  and
packages,  the  CL  now  permits  multiple  BIN  directories,  each  BIN 
directory being associated  with  the  package  of  definition  and  all
subpackages  of  that  package  (unless they have their own BIN).  A new
BIN directory is declared with the optional argument bindir=path in  the
package statement, e.g., in a package script task.


2.2.1.5 MKPKG support for package environments

    Layered  packages  now  have  their  own  private  LIB, including an
environment definitions file (zzsetenv.def), mkpkg global  include  file
(mkpkg.inc),  and,  optionally,  a mkpkg special file list file for each
supported host system, listing files requiring  special  compilation  to
work  around host compiler bugs or whatever.  The full mkpkg environment
is formed  by  reading  the  IRAF  core  system  environment  and  mkpkg
definitions  and  include files, followed by the package definitions and
include files.  Reading of the package environment occurs only if  mkpkg
is  called  with  the "-p" flag, or if the variable PKGENV is defined in
the user's environment.

Another way of expressing this is, when using  mkpkg  within  a  layered
package,  one  must now specify the name of the layered package in order
to pick up the package environment definitions.  For example, to  update
the  MTLOCAL  package  in NOAO, one would type "mkpkg -p noao update" in
the mtlocal directory.  If this  is  not  done  compilation  errors  may
result,  or  the  exectable  may  not  be  successfully installed in the
package BIN directory.


2.2.2 Multiple architecture support

    A single IRAF system (or layered  package)  can  now  simultaneously
support   any   number  of  machine  architectures  using  multiple  BIN 
directories sharing a single machine independent  copy  of  IRAF.   Each
BIN  directory  contains  all  the object modules, object libraries, and
executables  for  a  particular  architecture.   An   architecture   can 
represent  either  a  type  of  hardware,  e.g.,  sparc, mc68020+f68881,
mc68020+ffpa, vax,  etc.,  or  a  software  distinction,  e.g.,  systems
compiled  with  different  sets of compiler flags, or different versions
of a system.  Multiple architectures are now  supported  both  for  IRAF
execution,  and  for  IRAF  based  software  development, e.g., a single
version of IRAF can now be used to develop and run  IMFORT  programs  on
both Sun-3 and Sun-4 nodes.

The only case where multiple architecture support is used at the present
time is in  Sun/IRAF,  which  is  often  installed  on  a  heterogeneous
network  of  workstations,  e.g.,  Sun-3s with various hardware floating
point options, and Sun-4s.  A single copy of  IRAF  will  be  configured
with  several  BIN directories, one for each supported architecture, and
NFS mounted on all the network nodes which will be  using  IRAF.   There
is  no reason that this feature need be restricted to use with Sun/IRAF,
however.


2.2.2.1 IRAFBIN and IRAFARCH

    Starting with IRAF V2.8, the old environment  variable  IRAFBIN  has
been  obsoleted  and  replaced  by  IRAFARCH.  On machines which support
multiple architectures, the latter defines the architecture to  be  used
for  both  IRAF  execution  and  software  development.   If  only  IRAF 
execution  is  needed  the  variable  is   optional,   with   the   best 
architecture  being  selected  automatically when the CL is started.  If
one will be doing software development (including IMFORT) it is best  to
define  the  variable  in  the  host environment before starting IRAF or
doing any host level software development.  Typical values  of  IRAFARCH
for a Sun workstation are "sparc", "i386", "f68881", and "ffpa".


2.2.2.2 System libraries moved to the BIN directory

    As  part of the revisions required for multiple architecture support
for software development, all object libraries have been moved from  the
global,  architecture independent LIB to the architecture dependent BIN,
with the LIB entries being replaced by symbolic links (in  the  case  of
Sun/IRAF).    This   should   be  transparent  to  both  end  users  and 
programmers.


2.2.2.3 New bin.generic architecture

    On Sun/IRAF systems, which are distributed configured  for  multiple
architecture  support,  the system architecture is set to generic in the
distributed system.  What this means is that all architecture  dependent
files  (objects  and object libraries) have been removed from the system
directories and archived in the file OBJS.arc in the BIN  directory  for
each  architecture.   Rebuilding  any  of the packages in a system would
require restoring the binaries  for  a  particular  architecture,  e.g.,
typing  "mkpkg  sparc" at the IRAF root would restore the sparc binaries
for the core system on a Sun/IRAF installation.   Note  that  this  only
affects  software  development  for  the  system  in  question; software
development for external  packages  or  private  user  software  is  not
affected.


2.2.3 Shared library facility

    IRAF  version 2.8 adds support for a general shared library facility
for UNIX based systems.  Although currently  only  used  with  Sun/IRAF,
this  facility  is  potentially useful for other UNIX based IRAF systems
as well (VMS/IRAF already has its own shared library facility).

What the shared library facility does is take most of  the  IRAF  system
software   (currently  the  contents  of  the  ex,  sys,  vops,  and  os 
libraries) and link it together into a special sharable image, the  file
S.e  in  each  core  system BIN directory.  This file is mapped into the
virtual memory of each IRAF process at process startup time.  Since  the
shared  image  is  shared  by all IRAF processes, each process uses less
physical memory, and  the  process  pagein  time  is  reduced,  speeding
process  execution.   Likewise, since the subroutines forming the shared
image are no longer linked  into  each  individual  process  executable,
substantial  disk  space is saved for the BIN directories.  Link time is
correspondingly reduced, speeding software development.

With the introduction of the shared library  facility,  the  disk  space
required  for  Sun/IRAF  is substantially reduced.  Due to the increased
memory  sharing  and  reduced  process  pagein  times   performance   is 
substantially  improved,  especially  on systems like the Sun/386i which
has a relatively slow SCSI disk and  often  limited  memory.   The  disk
size  of  small  programs  is  reduced  by up to a factor of ten in some
cases, e.g., an executable for a small program that was formerly 250  Kb
in  size  might  be  as small as 25 Kb if the shared library is used and
the shared image symbols are omitted at link time.



2.3 User interface changes


2.3.1 Calling IRAF tasks from the host environment

    The IRAF main and zmain were modified to  make  it  easier  to  call
IRAF  tasks  as  host  level  tasks,  i.e.,  without  having to set up a
command file and run the process with  the  standard  input  redirected.
In  the  new  scheme,  any  extra arguments given on the process command
line are passed into the IRAF main as a command  buffer  containing  the
IRAF command or commands to be run.  For example,

    cl> x_system.e netstatus

would run the command netstatus in process x_system.e.

    cl> x_system.e count "files=*.x"

would  run  the  count  task,  counting  all  ".x"  files in the current
directory.

    cl> x_system.e count "files=*.x 4>_o"

would do the same, redirecting the output at the IRAF main level to  the
file _o.

    cl> x_system.e 'directory @pars $nargs=0'

would  run  the directory task with the given parameter set, with $nargs
set to 0.  If any of the parameters to a task are omitted the task  will
query the terminal for them in the usual way, so for example

    cl> alias count "$iraf/bin/x_system.e count files="

would  make  the  IRAF  task  count available in UNIX, allowing the IRAF
template specifying the files to be counted to be either  given  on  the
UNIX  command  line, or prompted for if omitted.  Given the above alias,
one could enter a UNIX command such as

    cl> count 'cl$*.h'


This feature is available in all UNIX based versions of IRAF  V2.8,  but
did not make it into VMS/IRAF version 2.8.


2.3.2 Image packing density control (impkden)

    Some  users  have  complained about images taking up more disk space
than they have to, due to the IMIO feature  which  conditionally  blocks
image  lines to fill an integral number of disk blocks.  This can result
in more efficient image i/o but can also make a  significant  difference
in the amount of disk space consumed by an image in some cases.

IMIO  can  actually  support both block-aligned and fully packed images.
The decision is made at image creation time and is based  on  the  image
packing  density  if  image  lines  are  block  aligned.  If the packing
density is too low for a block-aligned image, a fully  packed  image  is
created  to  avoid  wasting  disk  space.   The  default minimum packing
density is 0.6, i.e., up to 40% wasted space  before  IMIO  switches  to
full packing (no wasted space).

For finer control over the packing density, the user can now specify the
optional environment variable  impkden,  the  numeric  value  being  the
mininum packing density.  For example,

    cl> set impkden = 1.0

would completely disable block-alignment of image lines in IMIO.


2.3.3 User libraries (IRAFULIB)

    It  is  now possible for the programmer (SPP or IMFORT) to specify a
private  directory  to  be  searched  at  compile  or  link  time   when 
developing  IRAF  or IMFORT programs.  This is done by defining the path
to the directory in the  user  environment  as  the  variable  IRAFULIB.
When  locating a particular file, this directory will be searched before
the IRAF system libraries are searched, hence this feature may  be  used
to  substitute  custom  versions  of files in the IRAF system libraries,
e.g., for debugging purposes.


2.3.4 New logical printer device LPR

    A new logical line printer or plotter device lpr is now supported on
all  UNIX/IRAF  systems.   This  treats  the  UNIX task lpr as a kind of
pseudo-device, leaving it up to UNIX to decide what physical  device  to
dispose  of  the  output  to.   This default is system dependent, but on
some systems can be controlled by defining the variable PRINTER  in  the
user environment.


2.3.5 Machine independent help database

    The  IRAF help task uses a precompiled binary database to speed help
keyword searching.  This file is now machine  independent,  allowing  it
to  be  generated  on  one system and included in software distributions
without having to be recompiled.  In addition, as part  of  the  layered
software  support, help now allows each external package to have its own
private help database.  The first time help is run, all  such  databases
are  read  and  linked  to produce a database containing entries for all
help modules in the core system and  all  installed  external  packages.
The  help  database  file is the file helpdb.mip in the LIB directory of
the core system and each external package.


2.3.6 Set terminal type will no longer hangup

    On systems,  e.g.,  workstations,  which  provide  virtual  terminal
windows  which  can  change  in size, IRAF may query the terminal at run
time to determine  the  screen  size.   This  query  is  performed,  for
example,  at  login  time  if  the terminal type is set to gterm or sun.
Formerly this could cause the login process to hang indefinitely  (i.e.,
until  the  user  typed  return  or  interrupt)  if the terminal did not
respond to the size query, as would happen when the  terminal  type  was
set  improperly  and  the  actual terminal ignored the query.  Thanks to
the addition  of  non-blocking  raw  terminal  i/o  in  V2.8  IRAF,  the
terminal  screen  size query will now time out with a warning message to
reset the terminal type, if the terminal does not respond to  the  query
within several seconds.


2.3.7 Installing a new version of IRAF obsoletes old user parameter files

    The  problem  of  old,  obsolete  user (uparm) parameter files being
used with a newly  installed  version  of  IRAF,  which  could  lead  to
"parameter  not  found" error aborts, has been fixed.  The CL now checks
the date of the file utime in HLIB, and refuses to use  the  user  pfile
if  it is older than either utime or the package pfile provided with the
new system.  The contents of old user pfiles are  merged  into  the  new
system  pfile,  as before, preserving learned parameter values even when
the user pfile is obsolete.


2.3.8 @file list bug fixed

    The problem of the "@file" (at-file-list) syntax  not  working  when
the file in question was not in the current directory has been fixed.



2.4 Programming interface changes


2.4.1 IMFORT pixel directory control

    IMFORT  has  been modified to permit specification of the pixel file
directory by the calling  program.   The  modifications  are  completely
upwards   compatible,  i.e.,  existing  programs  linked  with  the  new 
interface will still create pixel files in the  same  directory  as  the
header file, with "HDR$" in the image header.

The  Fortran  programmer may set or query the pixel file directory using
the following routines:

    imsdir (dir)            # set pixel directory pathname
    imgdir (dir)            # get pixel directory pathname

where dir is a Fortran character variable.  The value should  be  either
"HDR$"  (the default) or a concatenatable host directory pathname (i.e.,
trailing / required for unix).  Once set, the pixel  directory  will  be
used  for  all  subsequent  image  create  or  rename  operations by the
calling process.

For example,

    call imsdir ("/tmp3/pixels/")
    call imcrea (image1, axlen, naxis, dtype, ier)
    call imcrea (image2, axlen, naxis, dtype, ier)

If desired the default pixel directory may  be  specified  in  the  host
environment  as  imdir or IMDIR before running the program.  IMFORT will
check the host  environment  for  this  environment  variable  then  use
"HDR$" as the default if no host definition is found.

Note  that although this is similar to setting the value of imdir in the
IRAF environment, IMFORT programs are not part of the  IRAF  environment
and  are  not affected by changes to the IRAF imdir.  Also, since IMFORT
is a host level facility and  IRAF  networking  is  not  supported,  the
network  prefix  (e.g., "node!") is omitted from the pixelfile pathname,
and since IMFORT programs are not necessarily used in  conjunction  with
IRAF,  the  ".."  (hidden file protection) files are not used to protect
against image deletion.


2.4.2 Image display interface: IMD

    A new  interface  IMD  has  been  added  to  provide  a  rudimentary
facility  for  interactive  image  display  device  control.  This is an
interim prototype interface which will be replaced by  the  new  display
interfaces when the latter become available.

The  IMD  interface  operates  by  mapping an image display device frame
buffer onto an IMIO image descriptor.   The  display  frame  buffer  may
then  be randomly edited by normal image i/o operations, e.g., to modify
subrasters of the displayed image,  or  overlay  the  image  with  color
graphics.    The   image   pixel  to  display  frame  buffer  coordinate 
transformation is supported, allowing  applications  to  work  in  image
pixel  coordinates  if  desired.  This interim interface is what is used
by the new display oriented tasks imexamine, imedit, and tvmark.


2.4.3 Image masks: PLIO, PMIO, MIO

    The following new VOS interfaces have been added in V2.8 to  provide
a general boolean or integer image mask facility.

    PLIO        pixel list i/o
    PMIO        pixel (image) mask i/o
    MIO         masked image i/o (image i/o through a mask)


PLIO   is   a   general   interface   for   storing   and   manipulating  
multidimensional integer valued rasters containing regions  of  constant
value  (i.e., masks).  The masks are stored in a highly compressed form,
the size of the compressed mask being  a  function  of  the  information
content  of  the  mask.   Both pixel array and range list i/o facilities
are provided, as well as a set  of  general  boolean  raster  operators,
e.g.,  to  extract  or  insert  subrasters,  AND  or  OR a source with a
destination, do the same through a  stencil,  draw  regions  of  various
kinds  (point, line, box, circle, polygon), and so on.  See the PLIO.hlp
file in the PLIO source directory for further information.

An  interactive  debug  program   (plio$zzdebug.x)   is   provided   for 
experimenting  with  masks.   Note  that PLIO is a stand alone interface
and is not tied in any way to  IMIO,  even  though  the  data  structure
operated upon is similar to an image matrix.

PMIO  is  very  similar  to  PLIO  except that it is used to associate a
masks with an IMIO maintained  reference  image.   Currently,  the  PMIO
mask  must  be the same resolution as the physical reference image.  All
coordinates input to PMIO are in the image section  coordinates  of  the
reference  image.   Hence,  given  a physical image and associated mask,
one can operate  upon  both  through  a  user  specified  image  section
transparently  to  the  applications  program.   This  includes all PLIO
style boolean rasterop operations, as well as mask pixel and range  list
i/o.   The PMIO interface is layered upon PLIO and IMIO, and the calling
sequences are identical with PLIO except for  the  package  prefix,  and
the addition of several new PMIO specific routines.

MIO  is  essentially  an  extension of image i/o for pixel i/o through a
mask.  The central routines are the following:

                    mio_setrange (mp, vs, ve, ndim)
    n|EOF = mio_[gp]lseg[silrdx] (mp, ptr, mval, v, npix)

One defines a rectangular region of the  image  with  mio_setrange,  and
then  sequentially  reads  or  writes  line  segments  until  all pixels
visible through the mask have been accessed.  This type  of  i/o  should
be  ideal  for  most image processing applications which need to operate
upon only those pixels visible through a region mask  (e.g.,  a  surface
fitting  task),  upon all pixels except those on a bad pixel mask (e.g.,
any analysis program), and so on.

PLIO (or PMIO) masks may be stored in binary files on  disk,  the  files
having   the  extension  ".pl".   The  V2.8  version  of  IMIO  has  the 
capability to treat such masks as if they were  images,  allowing  masks
to  be  easily  displayed, used in image expressions, converted to image
matrices and vice versa, etc.   Applications  may  do  either  pixel  or
range  list  i/o  to  a  mask image via IMIO, if MIO is not suitable for
some reason.


2.4.4 Photon images: QPOE, QPIO, QPEX

    A new set of VOS interfaces supporting photon  or  event  list  data
are  now  available.  The QPOE interface implements the Position Ordered
Event list object, which consists of a general header mechanism plus  an
event  list,  wherein  the  events are little data structures, e.g., the
attributes required to describe a photon  detection  (position,  energy,
time,  etc.).   QPOE  is designed to efficiently access very large event
lists, e.g., several hundred thousand or several million events in size.
Builtin  event attribute filtering and region filtering capabilities are
provided for selecting photons from the  event  list.   These  filtering
capabilities  may  be  combined  with the sampling capability to produce
filtered, block averaged image matrices from event lists.

The QPOE interfaces are the following:

    QPOE        header and file access and management facilities
    QPIO        raw and filtered event i/o
    QPEX        event attribute filter mechanism
    QPF         IMIO/IKI kernel for image interface to QPOE files

QPOE and QPF add  a  new  image  type  to  the  system,  with  .qp  file
extension.   Hence,  event  list data can be used as input to any of the
image processing tasks in standard IRAF, in addition to  being  analyzed
by  tasks which deal with the individual photon events.  A QPOE image is
contained in a single file.  When a QPOE file is accessed  as  an  image
the  interface  filters and samples the event list in real time, using a
user defined filter, block averaging factor, region  mask,  and  so  on,
producing  the image matrix seen by applications at the IMIO level.  The
QPOE object may be repeatedly examined with different event  filters  to
view the data in different ways.

The  QPOE  interface,  in addition to providing an event list capability
for IRAF, serves as a prototype for the  "flex-header"  portion  of  the
new  image  structures project.  Many of the capabilities to be provided
for image storage under the new image structures are already present  in
QPOE.

Further  information  is  given  in the QPOE.hlp file in the QPOE source
directory.


2.4.5 File manager: FMIO

    A new VOS library FMIO has been installed.  FMIO  is  "File  Manager
I/O",  and  is  used  to  implement  a  simple binary file manager which
maintains the  file  data  of  so-called  "lfiles"  (lightweight  files)
inside  a  single  host  binary file.  The system overhead for accessing
lfiles is much less than that of host files,  and  many  lfiles  can  be
used  to  store  a  complex  data  structure  without  cluttering a host
directory or incurring the inefficiency of accessing host  files.   FMIO
is  part  of  the  DFIO  project  and  will  serve  as  the lowest level
interface  within  DFIO;  it  is  also  used  currently  in   the   QPOE 
interface.   Additional  information  is given in the README file in the
source directory for the interface.


2.4.6 IMIO changes

    IMIO is the image i/o interface, the  standard  IRAF  VOS  interface
for managing all varieties of image data.


2.4.6.1 Mask image support

    IMIO  now  supports a new type of image, the mask image, stored as a
highly compressed binary (PLIO) file with the  extension  ".pl".   Image
masks  are  most  commonly used to store information describing selected
pixels in an associated data  image.   An  image  mask  is  logically  a
boolean  or  integer  image,  up to 28 bits deep, containing information
only on selected pixels or regions  of  pixels.   Masks  are  stored  in
highly  compressed  format,  e.g., a simple mask may be stored in only a
few hundred bytes of space.  Mask images  are  readable,  writable,  and
randomly  modifiable,  like  ordinary  raster images.  See \(sc2.4.3 for
more information.


2.4.6.2 Photon image support

    Support has also been added to IMIO for event  list  images,  stored
as  position  ordered  event  list  datafiles using the QPOE interfaces.
This new image type has the extension ".qp".  QPOE images are  read-only
under  IMIO.  Subject to that restriction, they may be accessed like any
other image by any IRAF image  analysis  program.   Accessing  an  event
list  image  as  a  raster image necessarily involves a runtime sampling
operation, wherein the events in the region of interest are  accumulated
into  an  initially zero image matrix; in the process the event list may
optionally be filtered by event attribute or event position, e.g.,

    cl> display "xray.qp[t=(30:40),pha=10,block=4]"

would display the QPOE image  xray.qp  with  a  blocking  factor  of  4,
selecting  only those events with t (time) in the range 30 to 40 and for
which pha (energy) has the value 10.  The  event  attributes  and  their
names  are user definable and may vary for different types of data.  See
\(sc2.4.4 for more information.


2.4.6.3 IMPUTH

    A new procedure imputh has been added  to  the  IMIO  header  access
library.   The  new  procedure  is  used  to append FITS like HISTORY or
COMMENT cards to the image header.


2.4.6.4 IMPARSE

    The calling sequence of the  internal  IMIO  procedure  imparse  has
changed.   Although this procedure is internal to the IMIO interface and
is  not  supposed  to  be  used  within  applications,  there   may   be 
applications  which  make  use of this procedure.  Any such applications
must be modified to  reflect  the  new  procedure  calling  sequence  or
runtime problems are guaranteed.


2.4.7 Null string environment variables

    The  semantics  of  the  VOS  procedures  envgets  and  envfind have
changed.  This could affect existing programs  and  any  programs  which
use  these  functions  should be checked to make certain they will still
work properly.

These procedures,  used  to  fetch  the  string  values  of  environment
variables, return the length of the output string as the function value.
Formerly, a value  of  zero  would  be  returned  both  when  the  named
variable  existed but had a null string value, and when the variable was
not found.  This made it impossible to discriminate between the case  of
a  variable  not  being defined, and one which is defined but has a null
value.  The routines have been  changed  to  return  the  value  ERR  (a
negative integer) if the variable is not defined.  Programs which do not
wish to make the distinction between undefined  and  null-valued  should
check  for  a function value less than or equal to zero.  Programs which
check for a function  value  equal  to  zero  will  fail  if  the  named
variable is not defined.


2.4.8 Environment substitution in filenames

    The  VOS  filename  mapping  code has been modified to add support a
powerful new  environment  substitution  syntax.   Previously  the  only
environment  substitution  mechanism available was the logical directory
facility, which  could  only  be  used  to  parameterize  the  directory
field.    The   new   facility   may  be  used  to  perform  environment 
substitution anywhere in a filename.  This is used in IRAF  version  2.8
to implement multiple architecture support, e.g.,

    cl> set bin = "iraf$bin(arch)/"

is  how  the  core  system  BIN  is  defined  in  V2.8 IRAF.  The syntax
"(arch)" tells the filename mapping code to substitute the string  value
of  the  environment  variable arch, if defined.  If the variable is not
defined the null string is substituted.  Hence, if the host system  does
not  implement  multiple  architecture  support and arch is not defined,
BIN is  defined  as  "iraf$bin/",  which  is  the  backwards  compatible
definition.   If  arch  is defined as, e.g., ".vax", then BIN is defined
as "iraf$bin.vax/".  The new feature allows use of a single  environment
variable  to  define  the  architecture, not only to form filenames, but
for other purposes as well, e.g., to generate compiler  switches  or  to
control library searching in mkpkg.


2.4.9 Nonblocking raw terminal i/o

    The  VOS  file  i/o interfaces have been modified to add support for
nonblocking terminal i/o.   This  facility  makes  it  possible  to,  in
effect,  "poll"  the terminal to see if there is any input waiting to be
read, to allow interaction without having a program block  if  the  user
has not typed anything.

The  immediate  application  of this in version 2.8 was the modification
of the stty (set-terminal) facility to implement  a  time  out  for  the
terminal  size  query.   Formerly,  stty would hang up indefinitely when
the terminal type was  set  to  "gterm"  but  the  actual  terminal  was
something different, causing the screen size query to be ignored.

In  the more general case, nonblocking terminal i/o makes possible a new
class of user interface,  which  is  not  only  interactive,  but  event
driven.   Nonblocking  i/o  makes  it  possible for an application to be
continually processing, while checking the terminal occasionally to  see
if the user has input any commands.

At  present, nonblocking i/o is always used in conjunction with raw mode
input from a terminal.  A new flag F_NDELAY,  defined  in  <fset.h>,  is
used to enable or disable nonblocking i/o.  For example,

    call fseti (fd, F_RAW, YES)

enables conventional blocking, single character raw mode reads, and

    call fseti (fd, F_RAW, YES + F_NDELAY)

enables  nonblocking  raw  mode  input  (YES,  NO,  and F_NDELAY are bit
flags).  These modes are mutually exclusive, e.g., the  first  call  may
be  issued  while  nonblocking  raw  mode is in effect to make the reads
block, and vice versa.  A call to fset(fd,F_RAW,NO)  disables  both  raw
mode  and  nonblocking mode.  Once nonblocking raw mode is in effect one
merely reads characters from  the  terminal  in  the  usual  way,  using
getc.   EOF is returned if a read is performed when no data is available
for input, otherwise the next  character  is  returned  from  the  input
queue.   Further  information  on nonblocking i/o is given in the system
notes file.


2.4.10 Function call tables (ZFUNC)

    IRAF has always had  the  ability  to  compute  the  integer  valued
address  of  a  procedure,  store that address in a table, and later use
the address as an argument to one of  the  zcall  kernel  primitives  to
call  the  addressed  procedure.  This facility has been extended by the
addition of a set of zfunc  primitives,  used  to  call  integer  valued
functions.   Only  integer  valued  functions are supported (in order to
simplify the kernel support  required),  but  in  the  systems  oriented
applications  where  procedure call tables are used, this is unlikely to
be a serious limitation.



2.5 Sun/IRAF specific revisions


2.5.1 IEEE exception handling

    By default the IEEE hardware is now configured, on all Sun  systems,
with  the invalid, overflow, and divide by zero IEEE exceptions enabled,
and with the default rounding direction and  precision  modes  (nearest,
extended)   in  effect.   This  configuration  should  ensure  that  all 
questionable floating point operations are detected, and  that  no  IEEE
"funny  numbers"  (NaN,  Inf,  etc.)  get  into the data.  These values,
since they don't behave like ordinary numbers,  can  cause  programs  to
misbehave,  e.g.,  go  into  an  infinite  loop.  In Sun/IRAF V2.8, if a
computation  results  in  an  IEEE  funny  number  being  generated,  an 
exception abort will result.  The most common example is divide by zero.

The  IRAF/IEEE  interface  offers a special debug feature that may be of
interest to programmers developing numerically sensitive  software.   If
desired,  one  can  change  the default rounding direction and precision
(e.g., to test the numerical stability of  applications)  by  using  the
debugger  to  set  a  nonzero  value  of  the variable debug_ieee before
running an executable.  The procedure for doing this  is  documented  in
the system notes file.


2.5.2 IMTOOL enhancements

    A  number  of  enhancements and bug fixes have been made for V2.8 to
the SunView  based  IMTOOL  image  display  server.   The  most  notable
changes  are summarized here; refer to the IMTOOL manual page for a more
complete description of the new features.


2.5.2.1 Software ZOOM added

    IMTOOL, which has had for some time the ability to pan  about  on  a
large  image,  now  has  the ability to zoom as well.  Both pan and zoom
are controlled very conveniently by the middle mouse button:  place  the
mouse  on an object and tape the middle button once to pan the object to
the center of the display window; tap it again and  the  image  will  be
zoomed.   Zoom,  currently  implemented  by  writing  directly  into the
hardware frame buffer,  is  very  fast,  almost  as  fast  as  a  normal
unzoomed  window  refresh.   The  default set of zoom factors is 1,2,4,8
after which the sequence wraps around to 1.  The zoom factors  are  user
configurable  via the IMTOOL setup panel; very large zoom factors, e.g.,
x64, are possible.   Dezoom  (making  a  large  image  smaller)  is  not
currently supported.


2.5.2.2 WCSDIR eliminated

    The  host  level WCSDIR environment variable, and the text file used
to communicate image coordinate (WCS) information  between  the  display
task  and the display server, have been eliminated.  All WCS information
is now passed via the datastream used to pass commands and data  between
the  client  and the display server.  This eliminates the need for users
to have to remember to define WCSDIR in  order  to  get  coordinates  in
image  units,  and  some  subtle  process  synchronization  problems are
eliminated as well.

In a related change, the frame buffer configuration index is  no  longer
passed  in  during  a  frame  erase,  hence it is no longer necessary to
erase a frame before displaying an image to ensure that a  frame  buffer
configuration  change  is passed to the server.  The configuration index
is now passed when the WCS information for a frame is set.


2.5.2.3 Graphics colors

    IMTOOL now allocates a range of pixel values  for  use  as  graphics
overlay  colors.   Setting  a  frame buffer pixel to one of these values
causes it to always be displayed with the assigned color.  The  graphics
color  values  are  not  affected  by  windowing  the display.  The most
common use of graphics colors with V2.8 IRAF  is  for  drawing  graphics
into  a  displayed  frame  with the new tvmark task, available in PROTO.
See the IMTOOL manpage for a table listing the color index assignments.


2.5.2.4 New imtoolrc entries

    Several new predefined frame buffer configurations have  been  added
to  the  default  imtoolrc.   These  include  an  128 pixel square frame
buffer (imt128), a 256 pixel square frame buffer (imt256),  and  a  full
screen display with the same aspect ratio as a 35 mm slide (imtfs35).


2.5.2.5 System crash (FIFO) bug fixed

    Versions  of  SunOS  through  at  least 4.0.1 have a bug in the FIFO
driver code which can cause the internal kernel FIFO data buffer  to  be
deallocated  while it is still in use.  This will result in a bad kernel
which will eventually panic and reboot the system.  This  is  the  cause
of  the  IMTOOL  crash  problem  which  some sites may have experienced.
IMTOOL has been modified to avoid the circumstances (repeated 4096  byte
transfers)  which cause the bug to surface.  So far as we know, the real
bug (in SunOS) has not  yet  been  fixed,  but  at  least  on  the  NOAO
systems,  the  frequency  of occurrence of the system crashes is greatly
reduced  with  the  new  version  of  IMTOOL  which   incorporates   the 
workaround for the SunOS bug.


2.5.2.6 Cursor marking now disabled by default

    When  the  interactive image cursor read facility was first added to
IMTOOL, the default response to each cursor read was  to  draw  a  small
white  dot  at  the  position  of  the  cursor.  This is convenient when
marking a series of objects to make a  list,  but  with  the  increasing
number  of IRAF programs making user of the interactive image cursor, it
has been necessary to change the default to  disable  automatic  marking
of  each  cursor read.  The cursor mark feature is still available as an
option and can be enabled via the setup panel.


2.5.2.7 Ctrl/b may be used for manual blinking

    In addition to the list of blink frames and the timed blink  feature
IMTOOL  has provided for some time, it is now possible to manually cycle
through the blink frames with the <ctrl/b> key.  Typing  <ctrl/b>  while
the  mouse  is in the image window will cause the display to display the
next blink frame in sequence.


2.5.2.8 F4 key will now toggle setup panel

    The F4 function key on the Sun keyboard may now be  used  to  toggle
whether  or  not  the  setup panel is displayed.  This provides a single
keystroke alternative to calling up the setup panel with the frame menu.



2.6 VMS/IRAF specific revisions


2.6.1 NEWUISDISP added to VMS/IRAF

    Nigel Sharp's NEWUISDISP display program,  used  for  image  display
under UIS on microvaxes with bitmapped displays, is now available in the
standard VMS/IRAF release, in the directory [IRAF.VMS.UIS].


2.6.2 New INSTALL.COM script

    A new INSTALL.COM script (also written  by  Nigel  Sharp)  has  been
added  to  VMS/IRAF.   This script, run by the system manager to install
selected IRAF executable images, will now automatically  check  for  and
deinstall  any old versions of the executables before installing the new
ones.


2.6.3 VMS 4.7/5.0

    Testing of the standard V2.8 VMS/IRAF release,  which  was  prepared
on  VMS  4.7, on a VMS 5.0 system has thus far not revealed any problems
(NOAO is still running VMS  4.7  as  our  standard  system).   Hence  it
appears  that  the  standard  V2.8 VMS/IRAF will run under VMS 5.  It is
likely, however, that any attempt to  recompile  VMS/IRAF  under  VMS  5
would  cause problems, since we have not yet tried to rebuild IRAF under
VMS 5, and such a major operating  system  upgrade  will  often  require
changes  to  the  IRAF  code.  The system may be relinked under VMS 5 if
desired, and this does not appear to cause  any  problems,  but  neither
does there appear to be any benefit to be gained from doing so.



2.7 Summary of IRAF System Packages Revisions


o   The  tasks  RFITS  and  WFITS  in the DATAIO package now support the
    reading and writing of arbitrary sized data blocks (IRAF version 2.7
    and later).

o   Several new tasks were added to the IMAGES package.  IMCOMBINE (IRAF
    version 2.6 and later) provides for the combining  of  images  by  a
    number  of algorithms.  The new task CHPIXTYPE (IRAF version 2.7 and
    later) changes the pixel types of a list of input images.  The  task
    IMSLICE  slices  images  into  images  of  one  less dimension (IRAF
    version 2.8).  The task IMSTACK  has  been  moved  into  the  IMAGES
    package (although it still resides in PROTO as well).
    
    The  IMSTATISTICS task has been rewritten and now allows the user to
    select which statistical  parameters  to  compute  and  print  (IRAF
    version  2.8).   The  IMRENAME  task  has been modified to allow "in
    place" image renames, used chiefly for moving the pixel files  to  a
    new IMDIR.
    
    Several  other  tasks  in  the  IMAGES  package  were modified (IRAF
    version 2.8).  IMSHIFT was modified to accept a list of shifts  from
    a  file.   REGISTER  and  GEOTRAN  were modified to accept a list of
    transforms instead of only a single one.  IMHISTOGRAM has  undergone
    extensive  revision  including support for "box" type plots, support
    for linear or log scaling in the y coordinate, as  well  as  support
    for antialiasing of the histogram bins.

o   All  the  tasks in the IMAGES.TV package were modified (IRAF version
    2.8) so that if a task is used with an unsupported display device  a
    message is printed to that effect.

o   The  STTY  task  in  the  LANGUAGE  package  has been improved (IRAF
    version 2.6 and later) to better facilitate its "playback"  feature.
    These  changes  have  been  documented  in  the  online help for the
    task.  This feature is little used by external sites but  can  be  a
    very useful instructional aid if users are aware of its capability.

o   A  new task PVECTOR was added to the PLOT package that allows one to
    plot an arbitrary vector in a two dimensional  image  (IRAF  version
    2.6 and later).
    
    The  task  STDPLOT  was  modified (IRAF version 2.8) so that it uses
    the more popular SGI kernel  rather  than  the  NSPP  (NCAR)  kernel
    (STDPLOT  is  now  equivalent  to  the  SGIKERN  task).   A new task
    NSPPKERN was added that uses the NSPP kernel.

o   Two new tasks were added to the SYSTEM package (IRAF  version  2.8).
    The  task  DEVICES  simply prints the dev$devices.hlp file as edited
    by the site manager listing available devices on the local  host  or
    network.   The  REFERENCES  task is used to search the help database
    for all tasks or other help modules pertaining  to  a  given  topic,
    e.g.,  references  vector  will  list all tasks that have the string
    "vector" in their one line description.
    
    
2.8 Glossary of New Tasks in the IRAF System Packages

Task         Package                     Description

chpixtype    images     Change the pixel type of a list of images
devices      system     Print information on the locally available devices
imcombine    images     Combine images pixel-by-pixel using various algorithms
imslice      images     Slice images into images of lower dimension
imstack      images     Stack images into a single image of higher dimension
nsppkern     plot       Plot metacode on a NSPP (NCAR) plotter device
pvector      plot       Plot an arbitrary vector in a 2D image
references   system     Find all help database references for a given topic

In addition, there are  new  image  display  oriented  tasks  imexamine,
imedit,  and  tvmark in the PROTO package in NOAO (used to interactively
examine and edit images, or draw graphics into  image  display  frames).
These  really  belong  in  the  core  system  but  have  been  placed in
noao.proto since they are prototype tasks.



3. NOAO Package Revisions

    Some of the major revisions to the NOAO packages are listed below.


3.1 Summary of NOAO Packages Revisions


3.1.1 New NOAO Packages

    Several new packages have been added to the NOAO suite of packages.

o   The APPHOT package  is  a  set  of  tasks  for  performing  aperture
    photometry  on  uncrowded  or  moderately  crowded stellar fields in
    either interactive or batch mode.  This package is now installed  in
    the  DIGIPHOT  package  (IRAF  version  2.7  and later).  The APPHOT
    package was available as an add-on package to IRAF version  2.5  and
    later  while  it  was  undergoing  alpha testing.  Many new features
    have been added to the  package  since  it  first  became  available
    including  the  new  task  QPHOT  (quick  aperture  photometry)  and 
    interaction with  the  image  display  cursor  for  supported  image
    displays (Sun workstation, IIS model 70).

o   The  CCDRED  package  provides  tools  for  the  easy  and efficient
    reduction of CCD images.  This package has  been  installed  in  the
    IMRED  package (IRAF version 2.6 and later).  The CCDRED package was
    also available as an add-on to IRAF version 2.5.
    
    A short demonstration of many of the tasks in the CCDRED package  is
    provided with the DEMO task in the CCDRED.CCDTEST package.

o   The   IMRED.ECHELLE   package   has   been   replaced  with  a  more 
    sophisticated collection of tasks for  reducing  echelle  type  data
    (IRAF  version  2.7 and later). The new ECHELLE package recognizes a
    new image format in which each extracted  echelle  order  becomes  a
    line  in  a  two dimensional image rather than having a separate one
    dimensional spectrum  for  each  order,  although  this  old  output
    format  is  still  available  as an option.  Several new tasks exist
    for computing and applying a  wavelength  calibration  to  the  data
    using  the  echelle  relationship  between  the  orders (ECIDENTIFY,
    ECREIDENTIFY, and ECDISPCOR) as well as  for  manipulating  the  new
    echelle format (ECSELECT, ECCONTINUUM, and ECBPLOT).

o   The  IRRED  package  has been added to the IMRED package.  The IRRED
    package collects  together  in  one  place  those  tasks  used  most
    frequently  by users reducing IR data such as that taken with the IR
    imager at KPNO.  The IRMOSAIC and IRALIGN tasks were available  with
    IRAF  version  2.6  and  later.   IRMOSAIC  takes an ordered list of
    input images and places them on a grid in an output image.   IRALIGN
    uses  this  grid  and  a coordinate list of overlapping objects from
    the individual subrasters to produce an aligned output  image.   The
    tasks  IRMATCH1D  and IRMATCH2D were available with IRAF version 2.7
    and later.  These tasks are  similar  to  IRALIGN  expect  that  the
    intensities  of  adjacent  subrasters  can  be  matched  as well.  A
    script called MOSPROC (IRAF version 2.8) has also  been  added  that
    prepares a list of images for a quick look mosaic.

o   The  MSRED  package  has been added to the IMRED package.  The MSRED
    package is a collection of tasks  used  for  reducing  multispectral
    types  of  data, e.g. fiber arrays, where the individual spectra are
    for different objects.  Like the ECHELLE package, it  also  has  its
    own  multispectral  image  format  (a two dimensional image in which
    each line is an extracted spectrum).  Several new  tasks  have  been
    added  to  the  package  for wavelength calibration of multispectral
    data.
    
    
3.1.2 Modifications to Existing NOAO Packages


o   The ASTUTIL package was reorganized (IRAF version 2.6  and  later  -
    see  IRAF Newsletter No. 3 for details) and several tasks were added
    and/or  modified.   A  new  task  ASTTIMES   computes   and   prints 
    astronomical  dates  and  times  given a local date and time.  A new
    task RVCORRECT computes and prints radial velocity  corrections  for
    an  observation.   The  tasks  PRECESS  and  GALACTIC  were modified
    slightly using different but more accurate algorithms.
    
    The new task SETAIRMASS (IRAF version 2.8)  computes  the  effective
    airmass  and  middle  UT  of  an  exposure.  This task was also made
    available in the TWODSPEC and IMRED packages.

o   The two tasks in the IMRED.BIAS package, COLBIAS and LINEBIAS,  were
    modified  slightly  (IRAF version 2.7 and later) so that the fitting
    parameters for the overscan region can be set by the user as  hidden
    parameters to the tasks.

o   The  task COSMICRAYS (from the CCDRED package) was made available in
    the IMRED.GENERIC package (IRAF version 2.6 and later).

o   A new task called SYNDICO has been added to the  IMRED.VTEL  package
    (IRAF  version  2.6  and  later). SYNDICO makes glossy prints on the
    NOAO Dicomed printer of the synoptic, full  disk,  magnetograms  and
    spectroheliograms taken at the vacuum telescope at Kitt Peak.

o   Modifications  were  made  to the IMRED.DTOI package.  These changes
    have been documented in IRAF Newsletter No. 4.

o   Three new tasks in the ONEDSPEC package, REFSPECTRA,  SEXTRACT,  and
    SPECPLOT,  were  made  available  in  the  IMRED.COUDE,  IMRED.IIDS, 
    IMRED.IRS, and IMRED.SPECPHOT packages.

o   Many new tasks and features have been added to the ONEDSPEC package.
    
    The SENSFUNC task was completely rewritten  (IRAF  version  2.6  and
    later)  to  allow  determination  of  extinction,  display  of  flux 
    calibrated  spectra,  and  many  new  features  for  displaying  and 
    manipulating the data.
    
    IDENTIFY,  REIDENTIFY  and  DISPCOR  were modified (IRAF version 2.6
    and later) so that a dispersion  solution  from  IDENTIFY  could  be
    shifted  without  changing  the  original  shape  of  the coordinate
    function (see IRAF Newsletter No. 3 for details).
    
    A new deblending algorithm was added to SPLOT (IRAF version 2.7  and
    later).   See  the  online  help for SPLOT as well as the article in
    IRAF Newsletter No. 4.
    
    The tasks in the ONEDSPEC.ONEDUTIL package were  absorbed  into  the
    ONEDSPEC package (IRAF version 2.7 and later).
    
    The  EXTINCT  task  disappeared  with  its functionality being taken
    over by a rewritten CALIBRATE (IRAF version 2.7 and later).
    
    The COEFS task was moved to the IMRED.IIDS  and  IMRED.IRS  packages
    since  this is a very instrument specific task (IRAF version 2.7 and
    later).
    
    Three new tasks were added to the package.  SEXTRACT  (IRAF  version
    2.6  and  later)  extracts  subspectra  from  one  dimensional input
    spectra.  REFSPECTRA (IRAF version 2.7 and later)  takes  over  part
    of  the functionality of the old DISPCOR task and allows the user to
    define which arc spectra are to be used in the  calculation  of  the
    dispersion  solution of object spectra.  SPECPLOT (IRAF version 2.8)
    is a new plotting task that allows the compression of  many  spectra
    to a page (see IRAF Newsletter No. 6).

o   Several new tasks have been added to the PROTO package.
    
    Four  tasks  were  added to IRAF version 2.6 and later.  BSCALE is a
    task that can  be  used  to  linearly  scale  images  by  the  mean,
    average,  or mode of the image.  IRMOSAIC and IRALIGN can be used to
    combine many frames into one large image.   These  three  tasks  are
    also  available  in the IMRED.IRRED package.  MKHISTOGRAM calculates
    the histogram of the data in a text file.
    
    Three new tasks were added to IRAF version 2.7 and  later.   IMSLICE
    is  a  task  that  slices  an  image into images of lower dimension.
    IRMATCH1D and IRMATCH2D are two tasks that allow combining  of  many
    overlapping  images while matching the background intensities in two
    different ways.
    
    Three new tasks have been added to IRAF version 2.8 that  allow  the
    user  to  interact  with  the  image  display (for supported display
    devices, ie Sun workstation, IIS model 70).   IMEXAMINE  allows  the
    user  to  interactively  examine  portions  of  the displayed image.
    TVMARK allows the  user  to  mark  objects  on  the  image  display.
    IMEDIT allows the user to interactively edit an image.

o   The  APEXTRACT  package  in  the TWODSPEC package has ungone several
    rounds of modifications, as discussed in the IRAF  Newsletters,  No.
    3  and 4.  These changes included improved techniques and additional
    options for the extraction of data.
    
    A new task, APSCATTER, has been added to the package  (IRAF  version
    2.8).   This  task determines and subtracts scattered light from two
    dimensional aperture or echelle spectra.  The  task  was  also  made
    available  from within the ECHELLE package.  This task was discussed
    in IRAF Newsletter No. 6.
    
    
3.2 Modifications and Additions to Calibration Data

    The calibration data used by some of  the  tasks  in  the  TWODSPEC,
ONEDSPEC,  and many of the IMRED packages are kept in a directory called
ONEDSTDS in noao$lib.  The current contents of this directory  are  best
summarized by paging through its README file, e.g.,

    cl> page noao$lib/onedstds/README


Two  additional  line  lists  (used by IDENTIFY) have been added to this
directory  (IRAF  version  2.8).   These  lists,   vacidhenear.dat   and 
vacthorium.dat,  are  simply  the standard .dat files in air wavelengths
converted to vacuum wavelengths.  The equation used for  the  conversion
as  well as the appropriate reference in the literature are contained in
the README file.

The thorium.dat file has been updated  to  contain  thorium  lines  from
3180  Angstroms  to 9540 Angstroms (IRAF version 2.6 and later).  Please
see the README file for the source.

Two new directories have been  added  containing  flux  information  for
standard stars (IRAF version 2.6 and later): SPECHAYESCAL and SPEC50CAL.
Both of these lists are from Massey et al., 1988, Ap. J., Vol.  328,  p.
315.


3.3 Glossary of New Tasks in the NOAO Packages

Task           Package                     Description

apscatter(1)   apextract  Fit and subtract scattered light
apselect       apphot     Extract select fields from apphot output files
asttimes       astutil    Compute UT, Julian day, epoch, and sidereal time
badpiximage    ccdred     Create a bad pixel mask image from a bad pixel file
bscale(3)      proto      Brightness scale images:  new = (old-bzero) / bscale
ccdgeometry    ccdred     Discussion of CCD coordinate/geometry keywords
ccdgroups      ccdred     Group CCD images into image lists
ccdhedit       ccdred     CCD image header editor
ccdlist        ccdred     List CCD processing information
ccdproc        ccdred     Process CCD images
ccdred         ccdred     CCD image reduction package
ccdtypes       ccdred     Description of the CCD image types
center(3)      apphot     Compute accurate centers for a list of objects
centerpars(3)  apphot     Edit the centering parameters
combine        ccdred     Combine CCD images
cosmicrays(4)  ccdred     Detect and replace cosmic rays
daofind        apphot     Find stars in an image using the DAO algorithm
darkcombine    ccdred     Combine and process dark count images
datapars(3)    apphot     Edit the data dependent parameters
demo           ccdtest    Run a demonstration of the CCD reduction package
ecbplot        echelle    Batch plots of echelle spectra
eccontinuum    echelle    Fit the continuum of echelle spectra
ecdispcor      echelle    Dispersion correct spectra
ecidentify     echelle    Identify features in spectrum for dispersion solution
ecreidentify   echelle    Automatically reidentify features in spectra
ecselect       echelle    Select and extract apertures from echelle spectra
fitpsf         apphot     Model the stellar psf with an analytic function
fitsky         apphot     Compute sky values in a list of regions
fitskypars     apphot     Edit the sky fitting parameters
flatcombine    ccdred     Combine and process flat field images
flatfields     ccdred     Discussion of CCD flat field calibrations
guide          ccdred     Introductory guide to using the CCDRED package
imedit         proto      Examine and edit pixels in images
imexamine      proto      Examine images using image display, graphics, and text
imslice        proto      Slice images into images of lower dimension
instruments    ccdred     Instrument specific data files
iralign(3)     proto      Align the mosaiced image produced by irmosaic
irmatch1d(3)   proto      Align and intensity match image produced by irmosaic
irmatch2d(3)   proto      Align and intensity match image produced by irmosaic
irmosaic(3)    proto      Mosaic an ordered list of images onto a grid
mkfringecor    ccdred     Make fringe correction images from sky images
mkhistogram    proto      List or plot the histogram of a data stream
mkillumcor     ccdred     Make flat field illumination correction images
mkillumflat    ccdred     Make illumination corrected flat fields
mkimage        ccdtest    Make or modify an image with simple values
mkskycor       ccdred     Make sky illumination correction images
mkskyflat      ccdred     Make sky corrected flat field images
mosproc        irred      Prepare images for quick look mosaicing
msdispcor      msred      Dispersion correct spectra
msreidentify   msred      Reidentify features from/to a multispec image
msselect       msred      Select and extract apertures from spectra
observe        ccdtest    Create an artificial CCD observation
phot           apphot     Measure magnitudes for a list of stars
photpars       apphot     Edit the photometry parameters
polymark       apphot     Create polygon lists for polyphot
polypars       apphot     Edit the polyphot parameters
polyphot       apphot     Measure magnitudes inside a list of polygonal regions
qphot          apphot     Measure quick magnitudes for a list of stars
radprof        apphot     Compute the stellar radial profile of a list of stars
refspectra(5)  onedspec   Assign wavelength reference spectra to other spectra
rvcorrect      astutil    Compute radial velocity corrections
setairmass(6)  astutil    Compute effective airmass for an exposure
setinstrument  ccdred     Set instrument parameters
sextract(2)    onedspec   Extract subspectra from dispersion corrected spectra
specplot(5)    onedspec   Stack and plot multiple spectra
subsection     ccdtest    Create an artificial subsection CCD observation
subsets        ccdred     Description of CCD subsets
syndico        vtel       Make dicomed print of daily grams 18 cm across
tvmark         proto      Mark objects on the image display
wphot          apphot     Measure magnitudes for a list of stars with weighting
zerocombine    ccdred     Combine and process zero level images


Notes:

(1) Tasks also in echelle and  msred packages.

(2) Tasks also in coude, iids, irs, and specphot packages.

(3) Tasks also in irred package.

(4) Tasks also in generic package.

(5) Tasks  also  in  coude,  echelle,  iids,  irs,  msred,  and specphot
    packages.

(6) Tasks also in imred and twodspec packages.
NEWS (Jul86)                  Ancient News                  NEWS (Jul86)

30 July 86      IMIO Modifications
-------------------------------------------------------------------------------

    The new IMIO interface, used by all IRAF tasks to access bulk image data
on disk, is now capabable of operating upon both the old IRAF format (OIF)
images as well as STScI SDAS/GEIS format images.  The default image type is
the OIF format.  Any existing OIF format images are readable by the new system
without change.  Although IRAF can read either OIF or STF format images,
SDAS can read only STF format images, so serious SDAS users should configure
IRAF to work with STF format images as the default.  All other users should
continue to use the OIF format images as image access is more efficient,
and the IRAF software has been extensively tested only for OIF format images.
Users of the OIF format should note that they can read a VMS BACKUP tape
(or UNIX TAR tape) containing STF format images directly to disk and immediately
access the images, without changing the default configuration of IRAF.

    The image type is specified by a filename extension; extensions for the
OIF format images are new in this release of the system.  The recognized
extensions are shown below.

        image type      header file extensions

            OIF                 .imh
            STF                 .??h    (? stands for any character)

In most cases when operating upon an image with an IRAF task the extension
can be omitted.  The most important exception occurs in image templates.
THE PATTERN GIVEN IN AN IMAGE TEMPLATE MUST FULLY MATCH THE IMAGE HEADER
FILE NAMES AS THEY APPEAR IN A DIRECTORY LISTING, i.e., the header filename
extension must be matched by the image template.  The image type extension
must also be specified to access an image which is not of the default image
type (OIF or STF), or when changing the type of an image.  For example,

        cl> imcopy dev$pix.imh pix.hhh

will make an STF format copy in the current directory of the OIF format image
"dev$pix".

The default image type is controlled by the new environment variable IMTYPE.
The string value of IMTYPE is the desired image header file extension, e.g.,
"imh" (omit the dot) for an OIF format image.  If IMTYPE is not defined the
default image type is "imh".  For STF format images there are many possible
image header extensions, and IMTYPE specifies the default type IMIO should
look for when the extension is not explicitly given, or the default extension
to use when a completely new image is to be created.  When making a new copy
of some existing image, IMIO will make a new image of the same type as the
existing input image unless an extension is given to force some other type
of image to be created.

   environment variable                 description

        IMTYPE                  the default image type (extension)
        IMDIR                   pixel storage directory for OIF images

The IMDIR environment variable defines the directory in which the pixel file
is to be placed when creating a new OIF format image.  In V2.2 and older
versions of IRAF, IMDIR could only be a logical or machine dependent directory
pathname.  The new system also recognizes the special "builtin" logical
directory name "HDR$" (must be upper case).  If the value of IMDIR is "HDR$",
IMIO will create the pixel file in the SAME directory as the header file,
rather than in some other directory.  It is also possible to place the pixel
file in some subdirectory of the header directory, e.g., "HDR$pixels/" will
cause the pixel files to go into the subdirectory "pixels".

        set imdir = "/tmp/user/"        # pixel files -> specified directory
        set imdir = "HDR$"              # pixel files -> header file directory
        set imdir = "HDR$pixels/"       # pixel files -> subdirectory of HDR$

The root filename of OIF pixel files is now the same as that of the header
file, rather than a computer generated name.  The filename extension of an
OIF pixel file is ".pix".

The STF format images support group format, a format very similar to that
used for group format FITS tapes.  IRAF users accessing an STF group format
image can specify the `group' (subimage) to be accessed by appending a
subscript to the image name, e.g.,

        cl> imstat pix.aah[3]           # access group 3
or
        cl> imstat pix.aah[3][*,100]    # line 100 of group 3

A new group format image can be created in a similar fashion, specifing the
number of groups to preallocate space for, e.g.,

        cl> imcopy dev$pix testimage[1/10]

would create a new group format image "testimage" with space for 10 groups
(subimages), and initialize group 1.  The remaining groups would then be
initialized by specifying only the group subscript "[N]".  Note that all
groups must be the same size, new groups cannot be allocated, old groups
cannot be deleted, the set of possible group parameters is fixed at creation
time, and all groups share the same FITS header.


15 June 86      System Tasks
-------------------------------------------------------------------------------

    The DIRECTORY, HELP, and PAGE system tasks have all undergone important
revisions.  The directory task has been completely rewritten and now handles
directory pathnames, etc., correctly, and in addition it has a more concise
syntax.  The HELP and PAGE tasks have been modified to replace the old "more"
boolean query mechanism (used to pause between pages of output) with a nicer
keystroke driven mechanism which offers more options and is faster.  Read the
manual pages for additional details.  The old parameter files should be
unlearned.


28 April 86     Package Reorganization
-------------------------------------------------------------------------------

    The basic package structure of IRAF has been modified to make a distinction
between the system packages and the NOAO optical astronomy packages.  The basic
directory structure of the system was also changed to reflect the new package
organization, and the printed documentation will be changed as well when time
permits.  These changes were necessary to better isolate science software such
as the NOAO and STScI/SDAS packages from the system software, for a more logical
package structure, and to make it easier to install and maintain the science
packages.

The new root menu of IRAF is as follows:

    dataio      images      lists       noao        sdas        system
    dbms        language    local       plot        softools    utilities

The NOAO menu is as follows:

    artdata     astutil     focas       mtlocal     proto       twodspec
    astrometry  digiphot    imred       onedspec    surfphot

Three new packages were added and three old packages were extensively revised.
The NOAO mountain tape readers were moved from the DATAIO package into the new
MTLOCAL package.  The astronomically oriented utility tasks were moved from
the UTILITIES package to the new ASTUTIL package.  The old LOCAL package was
renamed PROTO, and a new LOCAL package was added in the directory
"iraf$local/tasks".

The concept of the new PROTO package is appropriate for what the old LOCAL
package was used for, i.e., prototype, temporary, or contributed tasks which
are part of the NOAO package and which are exported with the system, but which
are expected to eventually disappear or be replaced by planned system
facilities.  The new LOCAL package is a place to put tasks of strictly local
interest, or tasks which are not portable, e.g., foreign tasks and the Peritek
package.  The LOCAL package should be particularly useful for outside sites
as it gives them a place to put locally added tasks which will not be affected
by future updates of the system.  Also, the framework (mkpkg, local.cl, etc.)
is all set up, making it easier for outside sites to add their own software
without having to figure out how to set up an IRAF package.


20 Feb 85       Recovery from Interrupts
-------------------------------------------------------------------------------

    Tests today (unfortunately only shortly before the first IRAF release)
have shown that VMS/IRAF has higher failure rate than expected for recovery
from a ctrl/c interrupt of a running subprocess, especially if the process
is actively doing i/o.  It is probably much safer to interrupt a compute
bound process than a process which is doing heavy i/o, e.g., reading a tape
or doing many file opens, or probably large numbers of any type of system
calls.  The failure rate for i/o intensive processes was as high as 1 failure
to recover in 4 interrupts in some of the cases tested.  Testing of UNIX/IRAF
turned up some of the same problems, but the failure rate was considerably
lower, probably because the kernel and i/o system are so much simpler.

Interrupting a process at the wrong time can cause many problems, e.g.,
[1] subprocess memory can be corrupted, resulting in unpredictable behaviour
and possibly deadlock when the CL later tries to talk the the process,
[2] a VMS forced exit of the process can occur, e.g., when trying to deliver
an AST to an invalid address, [3] corruption of the CL/subprocess communications
protocol can occur, resulting in deadlock or the loss of sync (the output of
a task will come out when the next command is entered), and various other
problems as well.

Tests on the old version of VMS/IRAF, which dates back to last fall, show
that the problem has existed all along.  The fact that we did not fully
appreciate the problem until now indicates that the problem is not a serious
hindrance provided one is conservative about the use of interrupts.  It also
appears that this will not be an easy problem to solve, hence it is likely
to be with us for a while.  Probably nothing at all will be done about it
for some months since other projects are likely to have a higher priority
if this problem is understood and can be worked around.

In summary, try to minimize the use of interrupts, and in particular, avoid
interrupting processes which are doing heavy i/o.  When in doubt, type
"flpr" after interrupting a process to force it to be restarted.  If a
subprocess becomes hung it may be necessary to restart the CL itself.


20 Feb 85       Process connect failure during ":.snap" in cursor mode
----------------------------------------------------------------------------

    We are still ocasionally having problems when trying to spawn a graphics
subkernel in response to a ":.snap" command in cursor mode.  This happens
infrequently (which is why it is so hard to find the bug), and will usually
go away after exiting and reentering cursor mode and trying again.  It might
also help to do a ":.gflush" while in cursor mode.