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
|
UNIX/IRAF, starting 11/30/85
Goals: Restructure the system to better isolate machine dependence, make
installation and updating easier (there are many subtleties at
present). Merge in many revisions from VMS/IRAF, SUN/IRAF,
and AOS/IRAF.
--------------------------------------------------------------------------
Major Problems at present:
Root Directory dependencies
CL, XC, Mklib, etc. must be recompiled whenever the root
directory is changed. The root directory name must be changed
in all the Makefiles, and eventually in all the zzsetenv.def
files.
Installed Tasks
A number of tasks must be installed in UNIX directories outside
of IRAF; these tend to get lost whenever someone works on UNIX.
Links
Links are used for libraries, executables, and include files.
These can get lost when a file is altered, or when the system
is moved in pieces on a tar tape. At present someone must know
where all the links are and go through and remake them by hand.
Scattered machine dependencies
There are a number of assembler files scattered about the system
and referenced in the Makelib files. When installing the system
on a new host one must search out all these files, and either write
new assembler modules or comment out the optimized versions in
the Makelib files.
Automatic System Creation Procedure
The "sysgen" capability for the VOS is good, but other than that
the autogeneration facilities are rudimentary. There is no
automated full system generation capability. There is no easy
way to relink all the packages when important kernel changes are
made. The UNIX/IRAF development system (other than the VOS) has
never been fully recompiled due to the lack of these faciltities,
hence there is old code that will no longer compile hidden in the
system.
Makefiles
UNIX/IRAF currently uses the UNIX Make facility for package
generation. The result is many UNIX dependent Makefiles scattered
about the system. When moving IRAF to a non-UNIX system some other
facility must be developed to make the packages. This prevents
automated installation of new versions of IRAF, since all of the
make files must be translated for the new system.
Awkward Machine Dependencies
The magtape device table is currently wired into the kernel; should
be table driven at runtime. The ALLOCATE stuff is awful, and
depends upon an external, non-standard UNIX program. The graphics
system requires NCAR metacode translators which are not part of
the IRAF system.
These problems are awkward enough to require the assistance of an IRAF guru
for system installation and updating; installations and updates consume limited
manpower resources; maintenance starts to take so much time that new software
initiatives suffer. A more easily maintained system is required, now that we
have versions of IRAF running so many host machines.
Strategies:
[1] Collect ALL machine dependent files together in one place, so that
the major parts of the system can be updated by merely reading in a
TAR tape.
[2] Develop an automated full system generation procedure so that the
system can be automatically regenerated after an update. This requires
doing away with the Makefiles and the use of Make (and of DCL and
mkpkg.com files on VMS).
[3] Do away with the links.
[4] Do away with the remaining root directory dependence.
The major new developments are the creation of the HOST directory system, and
the replacement of Make, Mklib, DCL/mkpkg.com etc. by a new portable IRAF
bootstrap utility called MKPKG.
------------------------------------------------------------------------------
iraf$unix/* [VAX/UNIX version of IRAF]
iraf$vms/* [VAX/VMS version of IRAF] (to be added)
iraf$sun/* [SUN/UNIX version of IRAF] (to be added)
iraf$aos/* [AOS/VS version of IRAF] (to be added)
Created a new directory tree off the iraf root, to be used to hold ALL
machine dependent code in IRAF. This will make it possible to update
entire directory trees automatically, without need for an expensive
merge operation in those directories (the system dependent directories
will still require occasional merges). The name "unix" reflects the
host dependence of this directory system. Other systems have a
different root directory name. The logical name for the active host
interface directory is "host$". (12/1)
Subdirectories of host$:
as assembler stuff (optimized operators)
boot bootstrap utilities (XC, Mkpkg, etc.)
hlib text files (include files, etc.)
os the iraf kernel
The DEV directory is to be retained and will contain the device tables
for the local system. These are site dependent, unlike the HOST files,
which are machine/os dependent. OSB remains in the VOS because it is
part of LIBVOPS.A, and is mostly portable anyhow.
host/boot
host/boot/bootlib
Moved the softools$boot directory to host$boot, since it contains much
machine dependent stuff. Moved the RTAR host interface routines out
into the "bootlib" directory, as the start of a host interface library
for the boot utilities. Started on a complete rewrite of MKLIB, to
be replaced by a more comprehensive utility called MKPKG. (12/1)
unix/os/zgtenv.c
Modified to get the values of certain well known environment variables
at run time from the <iraf.h> file, after first searching the UNIX
environment. This eliminates the need to recompile the bootstrap C
programs (including the CL) when the value of a fundamental variable
like "iraf$" is changed. (12/3)
sys/ki/kignode.x
There were problems when installing a binary version of IRAF on a
new system, when the binary version was configured with networking
turned on. If the installer, thinking that they would not be using
networking, did not update the dev$hosts table, then the networking
software would not find an entry for the local host (i.e., we would
be running with the host name table for a different site).
Not surprisingly this would cause problems, but to avoid the trap
I modified kignode.x to effectively disable networking if no entry
for the local host (as named by ZGHOST) is found in the host name
table. When this situation occurs, all node names are assumed to
be aliases for the local node, causing all file references to be
resolved locally. This also makes it easy to turn off networking
temporarily, by simply commenting out the entry for the local host
in the dev$hosts file. (12/3)
sys/fmtio/ctol.x
Would interpret "-" as a number, value zero, length one char.
This was causing image sections to fail, e.g., "[*,-*]". Fixed to
treat a lone minus sign as not a number. (12/3)
unix/os/zfpath.x
unix/os/str.c
ZFPATH was making calls to the VOS procedures GSTRCPY and STRUPK.
Added the equivalent local services to the kernel. (12/5)
pkg/gio/gumark.x
The call to GGSCALE was using unit square marker polyline point coords
X,Y instead of the center coords of the marker XCEN,YCEN. (12/5)
unix/os/zfchdr.c
When called with the name of a subdirectory, would cache the subdir
name rather than the pathname of the new directory, causing a
subsequent call to ZFGCWD to fail. This has not been a problem
because ZFCHDR is not supposed to be called that way, but it seemed
safer to change it to handle this case. (12/6)
unix/os/prwait.c
The subprocess exit code (argument to exit()) was not being returned
properly (wrong byte of exit longword). (12/8)
unix/os/zoscmd.c KERNEL CHANGE
-------------------------------------------------------------------------------
When a host system command is interrupted the exit status returned
by the subprocess is now ignored, with ZOSCMD returning a special
code indicating interrupt instead. This is the only reliable way
of signalling interrupt to the parent process, because the exit status
returned by foreign tasks is not defined. (12/8)
The ZOSCMD for all kernels should return the INTERRUPT exit code
(SYS_XINT=503) when the OS command is interrupted, e.g., due to a
<ctrl/c>.
-------------------------------------------------------------------------------
host/boot/mkpkg/*
The new MKPKG task is now tested and installed. MKPKG replaces both
MKLIB and MAKE (and the mkpkg.com files in VMS/IRAF. The task is
upwards compatible with MKLIB but is much more powerful; see the task
documentation for details. This is a bootstrap utility, hence it is
written in C and makes calls only to LIBBOOT.A (a new library for the
bootstrap utilities) and LIBOS.A.
Unlike MKLIB, which was originally written as an experiment and which
was never a very good program (it was closely tied to UNIX), MKPKG was
carefully written. In particular, the machine dependent parts were
isolated (as far as possible) to make it relatively easy to port the
utility to new systems, and extensive diagnostics are built in. When
used to update libraries, MKPKG is several times as fast as the original
MKLIB since it uses a file date cache. (12/8)
host/bootlib/*
A new directory and library (lib$libboot.a). The concept here is to
isolate the machine interface for the C language bootstrap utilities.
As functions are needed by these utilities, new modules are added
to this library. Some of the modules talk directly to the host system,
others to LIBOS, others to both, etc. To bootstrap the utility tasks
(XC, MKPKG, etc.) one must first make the libraries libboot.a and
libos.a. Once these are up the bootstrap utilities can be linked
and used to make the VOS. Once the VOS is up the bootstrap utilities
can be relinked with LIBSYS and LIBVOPS to get full filename mapping.
On a UNIX host the bootstrap version of VFN2OSFN is all that is needed.
(12/8)
sys/etc/main.x
When a task is run standalone, will now look for the ZZSETENV.DEF in
the system library hlib$ if not found in the current directory.
This will get rid of the (partially system dependent) ZZSETENV.DEF
files scattered about the system, but still make it possible to have
a special version of the file in the local directory for debugging.
(12/8)
lib/*
hlib/*
Moved the following files to unix/hlib (= host$hlib). The new MKPKG
facility will find the header files in either directory; all files
are still referenced as <file.h> in source file includes. (12/8)
cllogout.cl (standard iraf stuff)
clpackage.cl
config.h
iraf.h
libc/
login.cl
mach.h
math.h
zzsetenv.def
generic.e (bootstrap utilities)
mkpkg.e
rpp.e
xc.e
xpp.e
cidir.sh (real UNIX dependent stuff)
dgrep.sh
dupdir.c
dupdir.e
irafuser.csh
mkiraf.csh
nightly.sh
Now that all these things are out of lib$, a new version of lib$ from
the UNIX development system can be installed on another system by a
simple copy operation, without a time consuming and error prone merge
operation.
host/boot/spp/xc.c
Removed the IRAFDIR pathname, -r irafdir, etc. stuff. Added references
to the libraries libboot.a and libos.a in the Makefile. Got rid of the
link on the executable and replaced it by a "make install".
The utiltity now makes VFN's of the form "iraf$..." or "host$..." and
calls vfn2osfn() to get a pathname. The latter calls ZGTENV which
references either the environment or the <iraf.h> file (as discussed
earlier), hence XC no longer needs to be recompiled when the root
directory is changed. Since vfn2osfn is used references to include
files in subdirectories of a system library (e.g., lib$pkg or lib$math)
are now fully supported. (12/8)
host/boot/spp/xpp/xppmain.c
host/boot/spp/xpp/xppcode.c
All the same changes as in XC, above. Also added a call to os_sysfile()
to go searching for system include files, which can now be in either
lib$ or hlib$. (12/8)
host/boot/generic/*
The GENERIC utility was moved into its own subdirectory. Added a
makefile. Got rid of the link to the executable in lib$. Added a
make install to move the .e instead. (12/8)
host/boot/xyacc
Changed SPP-Yacc subdirectory name to xyacc. Brought Makefile up to
date; added make install to move executable into hlib$. This utility
is really only supported in the UNIX version of IRAF for system software
development, hence did not make it fully autogenerating. (12/8)
unix/os/*
Made a mkpkg file to maintain LIBOS. Deleted the linked copies of the
kernel.h and kname.h include files, so that now there is only the one
copy in libc. Added an "mkpkg.csh" to bootstrap the library before
the mkpkg utility is up. (12/8)
host/hlib/clpackage.cl
Added defines for as$ and hlib$. Deleted the define for tmp$ since
this is now a system dependent definition (like iraf$ and host$).
Added a define for imdir$ since this now defaults to tmp$. Added
comments pointing out what is system dependent and what isn't. (12/8)
sys/vops/apowk.x
Case **0 was setting the output vector to zero rather than one. (12/9)
sys/etc/sysid.x
If the value of the "userid" environment variable is "USER" (the
default login.cl value), SYSID will now call getuid() to get the
user's host system login name, and use that in the output string
rather than having labels come out as "USER@lyra". (12/9)
host/boot/generic/*
Cleaned up the code somewhat and added a new $FOR preprocessor
directive for expanding generic sections of code inline. Formerly
the expanded code sections where always written to separate files;
this led to use of UNIX tasks in the Makefiles to generate the files
and concatenate them into a single file. Also added a mkpkg.csh
for bootstrapping the task. (12/9)
sys/clio/*
sys/etc/*
sys/fio/*
sys/fmtio/*
sys/gio/*
sys/imio/*
sys/ki/*
sys/memio/*
sys/mtio/*
sys/osb/*
sys/tty/*
sys/vops/*
The following were done for each source directory in the VOS:
o Added a mkpkg file, deleted the Makelib file. In each case
the library module list with include file dependencies was
generated fresh to make sure that all include file depenencies
were noted (these tend to get left out as code is modified).
o Deleted the local copy of a global files, leaving only the
lib$ version, to avoid problems with links. Converted all
"file" references to local copies of global files to <file>
references. Note that include files which are only referenced
locally do not appear in the system library and are referenced
as "file" in the source and mkpkg files.
o Deleted all zzsetenv.def files (no longer needed).
o Deleted any junk files found.
The mkpkg files are set up in such a way that the library can be
updated either locally, by simply typing "mkpkg", or by running mkpkg
from a higher level in the directory system, e.g., sys$. This
obsoletes the "update" utility. (12/9)
sys/gio/cursor/keys.hlp
lib/scr/cursor.key
Create a new library directory lib$scr to hold files required at
runtime for output on a terminal screen. Moved the cursor mode keys
file there. This makes it possible to get cursor mode help after
the sources for the VOS have been deleted to save space. (12/9)
sys/gio/ncarutil/sysint/ishift.s
sys/gio/ncarutil/sysint/i1mach.f
Moved ishift.s to as$. Moved i1mach.f to hlib$. Set up the mkpkg
file to conditionally compile as$ishift.s if found, else it uses the
local ishift.x (which is much slower). (12/9)
sys/gio/ncarutil/tests
Changed the filenames *.t.f to *t.f for portability reasons. Changed
the names of the files containing tasks from x_file.x to file.x; only
the file x_ncartest.x should have an x_ prefix since it is the only
executable. There was an old version of "strmln" in the directory
which is not used and should probably be deleted (or moved somewhere
else), but I left it in for Suzanne to decide what to do with it.
Set up a mkpkg to make the test package, got rid of the Makefile.
(12/9)
sys/gio/nspp/*
These directories formerly contained the graphics library used by the
original GRAPH, CONTOUR, SURFACE, etc. programs. These programs have
since been converted to use the new NCAR/GKS/GIO stuff, so most of the
code in these directories was no longer used. The only program in the
system still using the LIBNSPP.A library is the GIO/NCAR graphics
kernel, which talks directly to the NCAR system plot package (nspp)
(I think there may be other package which reference the library, but
they do not need too).
Accordingly, the gio$nspp directories were pared down to just the
system plot package and associated interface routines. Extensions to
the system plot package used by the NSPP kernel (cell array, etc.)
remain in the gio$nsppkern directory. The system interface code for
LIBNSPP uses some of the same code as ncarutil/sysint; both share the
same machine dependent files off in hlib$ and as$. (12/9)
host/boot/spp/xc.c
lib/libboot.a
lib/libos.a
Added calls to os_sysfile to generate the library names in XC, allowing
libraries to reside in either lib$ or hlib$. Moved LIBBOOT and LIBOS
to hlib$. (12/10)
host/boot/spp/xc.c
When linking an executable "file.e", the unix version of XC will now
generate a executable called "T_file.e" in the current directory.
If the link completes successfully the target executable is deleted
and the temp is renamed. This achieves the following:
[1] If the link fails, the old exectable is not affected and is
still available (particularly useful on the development system
when people may be using the package someone is working on).
[2] The link will not fail if someone is using the installed
executable, since the linker is not being asked to replace the
installed executable. For similar reasons, the link will not
fail if the installed executable was created by someone else.
The temporary executable is not deleted if the link fails, since one
might want to examine its symbol table. (12/10)
sys/imio/imfort*
Move the imfort stuff (Fortran callable image interface) to the
pkg$local directory, since it is only a prototype local interface.
(12/10)
sys/gio/ncarutil/sysint
Deleted the reference to i1mach.f, since this module is already
present in the VOPS library. (12/11)
sys/osb/*
Moved the machine dependent files into as$ and hlib$ and set up the
mkpkg to automatically reference these. (12/11)
sys/tty/*
Moved the "cacheg.dat" and "cachet.dat" files to dev$ and changed the
names to "dev$cacheg.inc" and "dev$cachet.inc" (inc = include file).
This is permissible now since XC calls vfn2osfn() to map the names of
include files, and is desirable since this is a site dependent file.
Combined files zzmktty.x and ttycomp.x and changed the name to
x_mkttydata.x. Set up the mkpkg to install the x_mkttydata.e in lib$
like all the other system executables. (12/11)
unix/os/zsvjmp.s
Moved zsvjmp.s to as$. On a UNIX host this was the only machine
dependent file in the kernel. (12/12)
unix/os/zfpath.x
unix/os/zfsubd.x
unix/os/zfxdir.x
unix/os/zfnbrk.x
Replaced the above files by equivalent C language procedures. This
results in an all-C kernel and eliminates the chicken before the egg
problem on a new system. The C procedures work directly on the XCHAR
strings just like the SPP procedures did, hence their is no
computational penalty (although the use of unpacked strings in the
four procedures is certainly inconsistent with the rest of the kernel,
and I question whether the gain in efficiency is worth it). Deleted
the str.c file introduced a couple of days ago to get a local strcpy.
(12/12)
unix/os/zfioks.c
Changed a reference to the old symbol IRAFDIR to a call to ZGTENV
to get the pathname of "iraf". (12/14)
host/boot/spp/rpprat/baderr.r
host/boot/spp/rpprat/synerr.r
The "% character" escapes to pass character*(*) declarations on to the
Fortran did not have the 6 leading spaces required by good ole Fortran,
causing a syntax error. (12/14)
host/boot/spp/rpp/rppfor
host/boot/spp/rpp/ratlibf
Did a "make fortran" to update the Fortran sources. Several
modifications were made in recent months without updating the Fortran
and testing the software. (12/14)
(Have completed testing of the automatic bootstrap procedure for the HOST
(directories, and the sysgen procedure for the SYS direcories. The former
(uses "mkpkg.csh" files to bootstrap the bootstrap utilities, and the latter
(of course used MKPKG.)
...
pkg/system/allocate.cl
pkg/system/deallocate.cl
pkg/system/devstatus.cl
pkg/system/diskspace.cl
pkg/system/gripes.cl
pkg/system/spy.cl
Moved the above machine dependent CL scripts and their associated
parameter files to the HLIB directory, and changed system.cl to
reference the tasks there. (12/14)
pkg/system/_magtape.x
pkg/system/x_systest.x
Deleted the mtdevlist task which referenced a procedure which has
been dropped from MTIO. (12/15)
pkg/cl/cldate.c
pkg/cl/builtin.c
Deleted the task version() and the C file cldate.c. This feature
has not been very useful (the date the CL itself was last compiled
or linked is not very interesting) and some machine dependent
machinations are required to generate the date string. (12/15)
pkg/cl/Makefile
pkg/cl/Makelib
pkg/cl/mkpkg
Deleted the Makefile and Makelib and added a "mkpkg" file. This calls
Yacc and Lex to translate the .l and .y files, but this does not make
the package machine dependent since the translated .c files are all
that is required on machines other than the software development VAX.
The CL should now be 100% portable (except for C bugs). (12/15)
pkg/cl/tests/
Deleted the tests subdirectory since the contents were just a bunch
of junk tasks that the authors (including myself) have long since
forgotten about. This stuff should be made to order during testing
by the tester in their own directories, outside of the production
system. (12/15)
pkg/cl/login.cl
Cleaned up somewhat so that is should work on other systems; removed
all unix pathnames. (12/15)
pkg/cl/binop.c
Deleted reference "import_mach" to nonexistent include file. (12/15)
pkg/cl/edcap.c
Deleted reference "import_fio" to nonexistent include file. (12/15)
pkg/cl/main.c
Deleted the envinit() procedure since we now assume that the essential
environment variables (e.g., iraf, host, tmp, hostid) are provided
somehow by ZGTENV. Changed the library references for the CL login
and logout files (clpackage.cl, cllogout.cl) to reference HLIB rather
than LIB, since these files are site dependent. (12/15)
pkg/cl/sizes.c
Discovered and deleted this junk (nonfunctional) file. (12/15)
lib/clpackage.men
Deleted this junk file (the real one is in pkg$clpackage/). (12/15)
lib/gvset.h
lib/gwindow.h
Deleted these header files as the code which used them (in gio$nspp)
has since been deleted. (12/15)
lib/xstdgraph.e
lib/xstdimage.e
lib/xstdplot.e
dev/graphcap
The names of these tasks were changed back to x_*.e for consistency
with the rest of IRAF; both UNIX and VMS permit underscores in file
names. (12/15)
dev/*.tbi
Deleted all the .tbi files (part of termcap, used to initialize tab
stops on terminals). We will probably never use these and they can
be regenerated if ever needed. (12/15)
sys/vops/acht.x
Added a generic $ifdef to conditionally declare the loop variable I,
so that it is not declared if the loop is not used (else the compiler
generates a warning message). (12/15)
sys/gio/nspp/portlib/flushb.f
Variable idummy not used; commented out. (12/15)
pkg/cl/debug.c
Changed the reference to "lib$iraf.h" in d_f() to "hlib$iraf.h".
(12/16)
pkg/cl/edcap.c
The get_editor() function was opening but not closing the edcap file,
eventually causing the CL to run out of file descriptors and crash.
Also, get_editor() was not saving the name of the editor in the
field "command[EDITOR_ID].keystroke" (not my choice for a name),
hence get_editor was being called every time EHIST or EPARAM was
called. (12/16)
host/hlib/mkpkg.inc
host/hlib/libc/iraf.h
unix/os/zgtenv.c
host/boot/mkpkg/*
Deleted the logical name "hostid" from ZGTENV and the <iraf.h> file.
Only "iraf", "host", and "tmp" are left now at the lowest level.
It turns out that "hostid" is used only in the MKPKG files. Rather
than use a predefined host environment variable I set up MKPKG to
read the system include file "hlib$mkpkg.inc" at startup time.
This makes it easy to set up the system with all sorts of machine
dependent MKPKG configuration parameters and switches, if necessary.
The current list includes HOSTID, XFLAGS (compile), LFLAGS (link),
USE_CCOMPILER, and USE_GENERIC. I anticipate adding switches to
conditionally build various graphics kernels and the like, as these
may reference libraries not present on all systems, and it is a waste
of time to keep a graphics kernel up to date if it will never be
used. (12/16)
sys/vops/asel.x
The "$t" suffix was missing from the procedure name. (12/16)
host/boot/generic/generic.c
We have been naming generic SPP and C files with ".x" and ".c"
extensions. This is misleading; the extensions should be ".gx" and
".gc". Modified the generic preprocessor to generate a file with
a ".X" extension when a generic file with a ".gX" extension is input.
(12/16)
sys/osb/*
sys/vops/*
Changed the names of all generic sources in OSB and VOPS to use the
extensions ".gc" and ".gx". (12/16)
(The following is a copy of some mail sent to the IRAF group)
-------------------------
Anyone calling the generic preprocessor via the new MKPKG facility should look
at OSB or VOPS for an example of how to set it up. The major points are the
following:
[1] Generic SPP files should have the extension ".gx". The GENERIC
preprocessor has been modified to make ".x" output files when fed
".gx" input files (in general, ".gX" -> ".X").
[2] The generic preprocessor is not a required bootstrap utility except
on our software development VAX; that is why we always keep the
preprocessed output files around. The MKPKG files should be set
up as follows:
tfiles:
$ifolder (fi.x, f.gx) $generic ... f.gx $endif
(etc)
;
libpkg.a:
$ifeq (USE_GENERIC, yes) $call tfiles $endif
@subdir
file.x
(etc)
;
Note that the USE_GENERIC symbol is available to test if the local
system has a generic preprocessing capability. This symbol and a
few others are defined in the MKPKG include file hlib$mkpkg.inc,
which is automatically included whenever MKPKG is run. This file
should be very useful for machine dependent conditional compilation,
e.g., we will only build the calcomp graphics kernel (etc) on a system
that sets a switch saying it wants the kernel (if the system does
not have a -lcalcomp library, the package would not even link).
[3] A new preprocessor directive $FOR (types) ... $ENDFOR has been added
to the generic preprocessor for expanding generic sections of code
inline. This should be used in conjunction with the -o switch to set
the output filename, e.g.:
$generic file.gx -o file.x
And inside the file "file.gx", e.g.:
<type specific code>
$for (silrdx)
<generic code>
$endfor
<type specific code>
...
sys/gio/calcomp/mkpkg
sys/gio/nsppkern/mkpkg
sys/gio/mkpkg
sys/mkpkg
host/hlib/mkpkg.inc
Modified the NSPP and Calcomp graphics kernels to keep the kernel
library in lib$, like the stdgraph kernel already does. This is
necessary if an external task is to be able to use the kernel as an
inline kernel. Added switch symbols to the MKPKG include file to
conditionally compile the NSPP and Calcomp kernels, as these will
not be used on some systems. (12/17)
math/*/mkpkg
pkg/*/mkpkg
The IRAF group members started writing mkpkg files for these
directories, and we began testing. (12/17)
host/boot/rmbin/
Added a new utility RMBIN for descending directory trees and deleting
binary files. This is needed to strip the system down to only sources
for a complete rebuild. (12/19)
unix/os/zfacss.c
The test for a directory file was not correct. (12/19)
--------------------------
Numerous changes to the MATH and PKG software were made in the process of
getting the MKPKG based full system generation facilities to work. In the
process many awkward things were fixed, e.g., all the assembler files were
moved to AS, local .x or stubbed out versions were added with MKPKG
conditionals to use them if the AS versions are not found, all old code was
made to use the new lib$pkg and lib$math subdirectories, most of the library
member lists were regenerated, many dead files were deleted, old code that
had not been recompiled in years was recompiled and bugs fixed, etc. The first
error-free full system rebuild (rmbin followed by mkpkg at the root) took place
on the UNIX/750 on 12/21, taking 20 hours single user.
--------------------------
unix/boot/wtar/*
unix/boot/rtar/*
unix/boot/bootlib/tape.c (etc.)
Added WTAR to the suite of portable bootstrap utilities. Fixed RTAR
so that it can read from tape as well as disk on non-UNIX systems,
and shares bootlib library procedures with WTAR (and also RMBIN, which
is a lot like WTAR). Only a little of the VMS version of WTAR could
be used due to VMS dependencies spread throughout the code (even if
under #ifdefs). The new version also fixes a number of problems with
the VMS version: IRAF file and magtape names are now used consistently,
case is preserved when transferring filenames to the tape, etc.
Most importantly, the new RTAR and WTAR are portable above LIBBOOT and
LIBOS (the ZFIOMT driver is used), hence they can be used on systems
like AOS as well as on UNIX and VMS. WTAR is useful even on UNIX
systems due to its ability to omit binary files, e.g., when making
source tapes on the UNIX/VAX for the SUN (not having to remember what
/dev/rmtXX to use is also nice). The old VMS version of WTAR, by the
way, uses a nonstandard VMS/C printf format (e.g., %6.8o) for encoding
the file headers. (12/23)
unix/os/ufstat.c
unix/os/zfacss.c
unix/os/zfinfo.c
unix/os/zfiobf.c
unix/os/zfiotx.c [UNIX]
Added cacheing of the "stat" information from the last call to the
UNIX system service STAT. This can significantly reduce the number
of system calls in applications that access a lot of files. (12/24)
host/boot/rtar/rtar.c
Added a switch "-s" to RTAR to strip the extra whitespace added to the
end of text files by WTAR (on VMS). This causes compiles to fail on
UNIX, causes diffs to fail, and in any event the tape utilities should
not modify files. (12/24)
images/tv/*
Installed the entire TV package from VMS/IRAF, since all the recent
development work has been done there. Reorganized CV with the task
at the top and the libraries in subdirectories, so that it can have
a standard mkpkg. Set up mkpkg to conditionally compile either the
UNIX or VMS device i/o interface. (12/24)
unix/os/zfiotx.c [UNIX]
Discovered that the unix text file driver will append to any existing
file when called to open a file in NEW_FILE mode. This was never
discovered before because the VOS will always delete any existing file
before opening a new file, but the bootstrap utilities (RTAR) are not
so careful. (12/24)
images/tv/*
Discovered many declared but not used variables. Also found one used
but not declared variable ("frame" in display/t_display.x). Evidently
these are not found by the VMS compiler. File zsnap.x in CV/iism70
was referencing ASEL when ASELS was intended. (12/26)
images/tv/*
host/gdev
The "m70unix" and "m70vms" subdirectories in DISPLAY and CV were
bothersome due to the duplication of code, protrusion of system
dependence into the pkg sources, and limited networking support
for the VMS version of the IIS interface (which was bypassing the
IRAF kernel). To address these problems I added a new device driver
ZFIOGD for binary graphics devices, e.g., image displays, versatec
plotters, and the like.
This driver is the i/o interface to binary graphics devices; it isolates
the host system dependence of the interface but does nothing about the
device dependence. The GIO driver, on the other hand, deals with the
device dependence but should not be host system dependent. The ZFIOGD
interface is a streaming binary file interface, hence provides a
data driven interface even if the host system device driver is control
driven. The data driven nature of ZFIOGD and its ZFIOBF semantics
make it trivial to support network access via the kernel interface.
The ZFIOGD driver is logically part of the kernel, but is programmed
in SPP, may share header files with the GIO kernel, and wants to use
high level functions (e.g., memory allocation, string ops), hence is
maintained in LIBSYS rather than LIBOS. The sources are in HOST$GDEV
since this is partially system dependent code. ZFIOGD can support
any number or set of actual graphics devices without change to the KI.
Currently only the IIS M70/M75 is supported. The new interface for
UNIX has the advantage of permitting an IOCTL call to master clear
the IIS at device open time (since we no longer assume that it is a
simple binary file, we can do anything we want). (12/26)
sys/imio/imdmap.x
pkg/images/tv/display/*
dev/*.imh
Setup up IMDMAP to open the image header in memory (as a NEW_IMAGE)
without accessing the .imh file in DEV. Deleted the .imh files;
once the MTIO lock file is gone we can remove world write permission
and quota on DEV$. IMDMAP now uses graphcap to get the device
parameters and initializes the in-core image header structure
accordingly. (12/27)
sys/fio/delete.x
DELETE will now ignore attempts to delete "dev$null". (12/27)
unix/as/*.s [UNIX]
It turns out that the UNIX assembler makes branch labels global unless
they begin with an "L". Renamed a number of branch labels with
cryptic LXX names so that they will not be kept in the symbol table
(they would come out looking like functions in profiles) (12/28)
unix/as/aclr.s
Added a fast assembler version of ACLR. (12/28)
pkg/images/tv/display
Tested, debugged, optimized. (12/28)
pkg/images/tv/cv/*
Brought up to date, now uses same bottom end as display. (12/28)
-------------------------
[Begin diff/merge of revisions from VMS/IRAF]
sys/etc/maideh.x
Message buffer size increased from 64 to SZ_LINE. (12/28)
sys/etc/propdpr.x
New version with support for queueing of bkg jobs installed. (12/28)
sys/etc/tsleep.x
ztslee -> zwmsec. (12/28)
sys/fio/fgetfd.x
Added "int or()". (12/28)
sys/fio/fwtacc.x
Modified to return not accessible for directory files; such files
cannot be read as ordinary files on some systems. (12/28)
sys/fio/osfnlock.x
Modified to temporarily override ONECASE_OUT; no longer does any
case conversion at all. This is necessary for the kernel interface
and is fairly safe since few systems with case insensitive filenames
permit only single case names as input (if such is the case, the
kernel will probably do the case mapping in any case). (12/28)
sys/fio/vfnmap.x
sys/fio/vfntrans.x
Installed vms/iraf versions without change. Numerous minor bug
fixes, ztslee -> zwmsec, bug fix in initialization of extn map,
etc. (12/28)
sys/fmtio/ctol.x
Modified to permit + as well as - (but much more than that is req'd
before IRAF permits + in numbers everywhere). (12/28)
sys/fmtio/dtoc.x
IS_INDEF -> IS_INDEFD. (12/28)
sys/fmtio/parg.x
The int(dval) would cause integer overflow when DVAL was a floating
point number with a very large exponent. (12/28)
sys/fmtio/strtbl.x
Array argument declaration buf[nstr] changed to buf[ARB] to avoid
VMS/Fortran runtime error if nstr==0. (12/28)
sys/gio/glabax/glbfind.x
Two bug fixes: invalid tick calculation causing floating point
overflow; inability to turn tick drawing off with GSET option. (12/28)
[[[[ I am finding a lot of revs and bug fixes in unix/iraf that have not yet
[[[[ made it into vms/iraf; we need to update vms/iraf as soon as the merge
[[[[ is completed and mkpkg, etc. is working in vms/iraf....
sys/gio/nsppkern/pixels.f
Arguments to ISHIFT were not both of the same type. (12/28)
sys/imio/imsetr.x
Min/max argument type mismatch. (12/28)
sys/imio/imwrite.x
When extending the pixel file at EOF, would write one too many chars,
causing pixels to be written and then read back at different file
offsets (never happened on UNIX/IRAF because pixel files are always
preallocated). (12/28)
sys/ki/kbzstt.x
Now returns the min of the max network transfer size and the max
device transfer size, rather than the value of the device parameter,
which can be larger than the network interface can handle. (12/28)
sys/ki/kopdpr.x
Added support for queued bkg jobs. (12/28)
sys/libc/cfmapfn.c
Argument maxch passed by value rather than reference. (12/28)
sys/libc/cprdet.c
Added support for queued bkg jobs. (12/28)
sys/libc/ctype.c [TEMPORARY]
Added #ifdef vms globalvalue junk for the VMS linker. (12/28)
sys/libc/cxwhen.c
Deleted the code for c_xgmes, since it has been moved out into a
separate file. (12/28)
sys/libc/isatty.c +
New operator added to LIBC. Used by the CL to test if the process
stdin is a terminal. (12/28)
sys/libc/cfnames.c +
New operator added to LIBC. Used to parse filenames. (12/28)
sys/fio/vfntrans.x
The filename extension map common was still not portable, since the
map string itself was being initialized in the common with a data
statement. Also, the compiler would give a harmless but annoying
warning message about mismatched lengths for the common. The code
was modified to fix both of these problems. (12/29)
sys/ki/kbzstt.x
Local variable status never used. (12/29)
sys/osb/f77pak.f
The exit test in the last loop (for blank fill) would do a "next"
rather than a "break", causing the loop to needlessly run on until
the top index was reached. (12/29)
sys/osb/xor.x
The expression for the exclusive-or in terms of AND and OR was
incorrect. (12/29)
sys/vops/aiftrx.x
Replaced the amovr(a,b,npix) by amovx(a,b,npix/2+1), since the input
vector is the complex transform. (12/29)
sys/vops/acnv.x
sys/vops/acnvr.x
In the npix=5 case, K4 was being assigned into instead of K5. (12/29)
hlib/libc/knames.h
lib/knet.h
sys/ki/irafks.x
sys/ki/kfiogd.x
sys/ki/mkpkg
sys/ki/ki.h
Added network support for the ZFIOGD driver. (12/29)
os/alloc.c + [UNIX]
os/zalloc.c + [UNIX]
hlib/alloc.e + [UNIX]
hlib/libc/alloc.h +
hlib/libc/iraf.h
hlib/libc/knames.h
hlib/knet.h
ki/kdvall.x
ki/kdvown.x
ki/ki.h
ki/irafks.x
dev/devices KERNEL CHANGES
-----------------------------------------------------------------------------
Added two new routines ZDVALL and ZDVOWN to the kernel. These are
used to allocate and deallocate (and mount) devices, and to query
device allocation. Allocation over the network is implemented but
will not currently work for a VMS host due to the process structure
(it will work for UNIX, as usual).
zdvall (device, status)
zdvown (device, owner, maxch, status)
A device table DEV$DEVICES was also added to runtime parameterize the
allocatable devices. This table is read by the VOS, passing only
host system device names to the kernel. The table will also be used
to get the host device name to open a magtape.
sys/zfiomt.c
The logical drive argument to ZZOPMT and ZZRWMT is now the physical
drive name as the VOS does the mapping using the dev$devices table.
hlib/libc/kernel.h
Deleted magtape device table. With this change the last of the
compile time device tables are gone from IRAF. (12/31)
-----------------------------------------------------------------------------
dev/termcap
Added an entry for the Visual 500 terminal (contributed by Skip
Schaller, Steward Obs.) (12/31)
sys/fio/getlline.x
Added a new utility procedure to the FIO package. GETLONGLINE is
like GETLINE except that it knows about comments, blank lines, help
sections, and backslash newline continuation. Comments, blank
lines, and help text are ignored and long lines are joined, returning
long lines of a user specified maximum length to the caller. (12/31)
lib/xalloc.h
sys/etc/xalloc.x
sys/etc/xgdevlist.x
Added a device allocation package to the VOS.
xallocate - allocate device
xdeallocate - deallocate device
xdevowner - determine if device is allocated
xgdevlist - get device list from dev$devices
status = xallocate (device)
status = xdeallocate (device, rewind)
status = xdevowner (device, owner, maxch)
status = xgdevlist (device, devlist, maxch)
status:
OK operation succeeded
ERR cannot allocate device
error i/o failure, e.g., dev$devices file not found
DV_DEVFREE device is free and can be allocated
DV_DEVALLOC device is already allocated
DV_DEVINUSE device is in use by someone else
DV_DEVNOTFOUND device not in device table
If the device is a magtape, xallocate will call mt_allocate to create
the "lock" file (not actually used as a lock anymore, just to record
the position), and xdeallocate will call mt_deallocate. (12/31)
sys/mtio/*
unix/os/zfiomt.c [UNIX]
The following changes were made to MTIO.
[1] The "lock" file is still used to keep track of the tape
position after task termination, but it is no longer used
to lock the device (the XALLOC code performs that function).
Any existing lock file will be overwritten at allocate time.
The lock file can be deleted while the drive is in use without
harm; MTIO will merely rewind the tape to get to a known
position.
[2] The lock file is now written into UPARM rather than DEV, and
world write permission has been removed from DEV forever.
With this change, the only place world write permission is
still required is for the gripesfile.
[3] The lock file is no longer read and written every time the
drive is opened and closed. Instead, MTIO caches the position
between opens and only updates the lock file at task
termination time (or if error recovery takes place). Hence,
a DEVSTATUS after reading a tape will work as before, but
accessing multiple files in a single call to a task should
be speeded up considerably. (12/31)
sys/etc/onerror.x
sys/etc/main.x
Procedures posted with ONERROR during task execution are now called
at task termination, whether the task terminates normally or abnormally.
The task termination code will be OK if the task terminates normally,
else it is the error code passed to ERROR, FATAL, SYSERR, etc. This
feature is used by MTIO to update the lock file at task termination
time. It appears that there was also a bug in the old implementation,
i.e., the posted error handlers were not getting cleared following
normal task termination. (12/31)
sys/etc/error.x
The system will now quietly do a max(errcode,1) to guarantee that an
error exit will not be confused with normal task termination, in case
the lazy programmer is calling ERROR with errcode=0. (12/31)
pkg/dataio/fits/read_fits.x
When just reading the fits headers (make_image=no) will now immap
DEV$NULL rather than a real disk file, to eliminate the overhead
associated with writing and then deleting a scratch image header.
(1/2)
unix/os/zfiomt.c [UNIX]
The unix MTIO driver will now backspace over the first tape mark when
writing at EOT, to save one interrecord gap between files. The skip
record forward primitive was changed to do a READ rather than an IOCTL
since all drivers do not return EOF when an IOCTL skip record passes
a tape mark. (1/2)
(new MTIO tested and debugged, 1/2)
sys/fio/diropen.x
unix/os/zopdir.c [UNIX]
Changed the VOS to skip "." prefixed files (as well as the normal
hidden files with reserved extensions) if a directory is opened with
skipping of hidden files enabled. Change ZOPDIR to NOT filter out
.xxx files. This makes it possible for the VOS to access .xxx files,
and eliminates a difference between the UNIX and VMS versions of the
system. (1/3)
hlib/libc/xnames.h
sys/libc/callocate.c
Added C language bindings for the VOS device allocation facilities.
(1/3)
pkg/cl/builtin.c
Revised the device allocation stuff to use the new VOS facilities.
(1/3)
hlib/allocate.cl
hlib/deallocate.cl
Modified these scripts to call the hidden CL tasks _allocate and
_deallocate, which do the real work. The new scripts are actually
machine independent and do not really need to be scripts, but have
been kept as scripts to avoid changing the user interface and to
provide scope for adding machine dependence if necessary. (1/3)
unix/os/zfiotx.c [UNIX]
I had thought that the unix fseek returned the new file position in
the case of a successful seek (like lseek), but evidently it returns
zero instead. This would cause the file position to be lost if there
were more than one seek on a text file. This explains part of the
problems we have been having with PROCEDURE scripts in the UNIX/IRAF
CL. (1/3)
pkg/cl/grammar.l
In the process of fixing the above bug, I thought I had found a problem
with comments in the command mode lexical analyzer. I changed the
comment eater to fix what turned out not to be a problem, but left the
revision in because it should process comments more efficiently than
the previous code (which used .* to match the comment). (1/3)
sys/mtio/mtstatus.x +
etc/xalloc.x
Added a new procedure XDEVSTATUS to ETC to print the status for a
device; if the device is an allocated magtape, this calls MTSTATUS
to print the contents of the lockfile. (1/3)
pkg/cl/builtin.c
hlib/devstatus.cl
Added a new hidden task _devstatus to the CL; modified the DEVSTATUS
script in the SYSTEM package to call this. (1/3)
(MTIO revision completed and tested)
--------------
Begin merge VMS/IRAF CL revisions into UNIX CL (1/4)
pkg/cl/bkg.c
Installed vms version; contains modifications for bkg job queues.
pkg/cl/builtin.c
Minor revs from vms version merged in (documented in vms notesfile),
plus of course the all-new device allocation stuff from unix/iraf.
pkg/cl/cmain.c
Deleted this obsolete junk file.
pkg/cl/decl.c
pkg/cl/eparam.c
pkg/cl/exec.c
pkg/cl/grammar.y
pkg/cl/lexicon.c
pkg/cl/modes.c
pkg/cl/prcache.c
Replaced by vms versions.
pkg/cl/grammar.l
Merged in &queue modifications.
pkg/cl/lex.sed
Added sed command to increase YYLMAX allocation from 200 to 2048.
pkg/cl/main.c
Merged minor revs in both versions.
(end merge) (1/4)
----------------
pkg/cl/eparam.c
Replaced a STRCHR by INDEX; would not compile on UNIX as there is no
STRCHR function. (1/4)
pkg/cl/modes.c
There was an unmatched { and the file would not compile; went and
looked at the vms version and the same bug was found there. Probably
the VMS Mklib failed to recompile the file, so I never found the
bug. (1/4)
pkg/cl/builtin.c
Deleted unused variable buf in clsleep(). (1/4)
pkg/cl/system.c
Deleted unused variable stat. (1/4)
pkg/cl/edcap.c
Function what_cmd would return an undefined function value if the
match loop terminated at nchars. Added a return(0) at end of
function. (1/4)
pkg/cl/eparam.c
eparam.c(139): warning: op unused in function ep_setoptions
eparam.c(590): warning: out unused in function e_check_vals
eparam.c(744): warning: argument maxch unused in function e_getfield
eparam.c(1012): warning: op unused in function eh_setoptions (1/4)
pkg/cl/exec.c
Variable ip unused in execnewtask(). (1/4)
pkg/system/_magtape.x -
pkg/system/x_system.x
pkg/system/system.cl
Deleted tasks mtallocate and mtdeallocate, and file _magtape.x (1/4)
pkg/system/directory.x
Now calls strtbl only if nfiles > 0. (1/4)
pkg/system/system.hd
Various changes to bring it up to date. Added a couple of new manual
pages to system/doc. (1/4)
pkg/language/doc
Updated from vms/iraf. We plan to edit these at some point to more
closely approximate our standard manual page format. (1/4)
host/boot/bootlib/tape.c
Now knows about DEV$DEVICES. Accepts either logical drive names
such as "mta" or "mta.1600", or host names such as "mt.MUA0:" or
"mt.mua0.1600" (e.g., if dev$devices is not up yet). (1/4)
sys/gio/cursor/grcpage.x
sys/gio/cursor/grcwaitp.x +
Moved grc_waitpage out of grcpage.x into a separate file to fix a
circular library reference preventing topological sorting of the
library LIBCUR. Circular library references such as this have
not been a problem on UNIX or VMS since the libraries are randomly
accessed at link time, but some systems (e.g., AOS) access libraries
sequentially, and in any event linking from a topologically sorted
library is faster, and circular references are probably dangerous.
(1/4)
(sys/gio/cursor/prpsio.x)
pkg/cl/main.c
hlib/libc/xnames.h
sys/gio/cursor/gtr.com
sys/gio/cursor/psioinit.x +
sys/gio/cursor/psioxfer.x +
sys/gio/cursor/psioisxt.x +
PRPSIO is the traffic controller for pseudofile i/o. There is a
circular library referencing problem with this routine, wherein
prpsio might call gtrctrl which might call gtropenws which references
the entry point address of prpsio in a call to LOCPR if the GKI
kernel is a subkernel (gtropenws does not actually call prpsio,
however, so the reference is not reentrant).
This can be fixed by computing the EPA of prpsio at a higher level
and letting the lower level code use the value as data. This will
fix the topological ordering problem, but the fact that the problem
occurred at all makes one wonder if reentrancy is really ruled out.
Investigation of GKI reveals that it is indeed possible for PRPSIO
to call itself indirectly by calling GIOTR which calls GKI (but only
if certain graphics instructions are encountered at run time when
a subprocess is talking to a subkernel).
This problem can be resolved by some restructuring of PRPSIO, and
will probably have to be resolved before we have fully functional
i/o to graphics subkernels. The problem is however too complex
and too risky of solution to be dealt with at the present time,
and aside from the library ordering problem we have not had any
problems with the present code.
The temporary solution is for the CL to put the EPA of the PRPSIO
procedure in the GTR common at startup time. This gets around the
circular library reference problem for the moment, but does nothing
about the reentrancy problems. The two PRPSIO subprocedures were
also moved out into separate files. (1/4)
sys/gio/gadraw.x
sys/gio/wcstogki.x +
sys/gio/gplflush.x +
Moved the gpl_wcstogki and gpl_flush procedures out of gadraw.x into
separate files to fix a library ordering problem. Deleted the
gpl_gviewport procedure at the tail of the gadraw.x file, since it
is an internal procedure which is apparently no longer used anywhere.
(1/4)
sys/gio/ncarutil/concom.f -
sys/gio/ncarutil/conterp.f -
sys/gio/ncarutil/conlib/ +
Unpacked the two NCAR files concom.f and conterp.f in the subdirectory
conlib, one subroutine per file, to permit topological ordering of the
libncar library. (1/4)
sys/fio/fstati.x
sys/fio/ffilsz.x
Removed the syserr() calls from FSTATI (which calls FFILSZ) due to
library ordering problems, and probably reentrant code problems too.
FSTATI is too low level to be calling higher level code, e.g.,
it is called by ENVGETS, by the ZFIOCL driver, and other low level
codes. (1/4)
sys/etc/environ.x
sys/etc/envinit.x +
sys/etc/envgets.x +
Moved the ENVINIT and ENVGETS procedures out into a separate files
since they call high level functions. (1/4)
sys/fio/xerputc.x
Changed this routine to use a local array to buffer the output line,
rather than the FIO pathname buffer, just to make sure no conflict
ever occurs. (1/4)
sys/etc/erract.x
Replaced the call to PUTLINE to output the warning message to STDERR
by a call to ZAWRPS, for obvious reasons. (1/4)
sys/memio/malloc.x
sys/memio/realloc.x
Replaced all ERROR, SYSERR, FATAL, etc. calls by calls to SYS_PANIC.
Dynamic memory allocation is fundamental, and is used even in the KI.
The error handling code calls the kernel zroutines to talk to files
and the CL, the zroutines use the KI, which calls MEMIO, which used
to call the error handling code causing circular library references
and possible error recursion. (1/4)
sys/ki/kigchan.x
FATAL replaced by call to sys_panic. (1/4)
sys/ki/ktzopn.x
Had an IFERR, which calls XERPOP, which calls .... (1/4)
---------------------
Begin merge of AOS revs.
pkg/cl/bkg.c
Added declaration: extern long c_clktime(); (1/5)
pkg/cl/task.h
pkg/cl/mem.h
The macros NEXT_TASK and DEREFERENCE coerce a pointer to unsigned
and add a byte offset. This does not work on byte addressed machines
since we are then adding a byte offset to a word pointer. Replaced
the "(unsigned)ptr" references by "(unsigned)(char *)ptr". (1/5)
pkg/system/help/nomore.x
pkg/system/delete.x
pkg/system/match.x
pkg/system/page.x
sys/fio/fclobber.x [IMPORTANT PORTABILTY NOTE]
sys/fio/vfnmap.x
sys/fmtio/evexpr.y
sys/fmtio/evexpr.x
sys/gio/stdgraph/stgrcur.x
sys/tty/ttyopen.x
It turns out that the Fortran standard does not permit expressions
of the form BOOL.EQ.BOOL, although most real compilers are not so
stupid. Fortran requires that such expressions be written as
BOOL.EQV.BOOL, i.e., the .EQV. and .NEQV. operators must be used
to compare booleans for equality. The current preprocessor is not
capabable of fixing such expressions, hence all occurrences of such
equivalences must be fixed in the code; fortunately the construct
is rare. (1/5)
host/boot/spp/rpp/rpprat/gtok.r
host/boot/spp/rpp/rppfor/gtok.f
The B = 10 * B + C - 48 would cause fixed point overflow for large
numbers. Radix conversion is not needed in RPP (since it is done
in XPP) hence the code was changed to simply accumulate the numeric
token. The Fortran translation file was updated. (1/5)
sys/fmtio/dtoc3.x
For the AOS compiler, had to convert
v = v + 0.5 * 10. ** -no_digits
to
v = v + 0.5 * 10. ** (-no_digits)
This is a bug in the AOS compiler, but we loose nothing by changing
the SPP code to workaround it. (1/5)
sys/os/*.c
Changed all occurrences such as "return (*status = XERR);" to the 2
statement form which does not return a function value, since the Z
routines are Fortran callable subroutines not functions (this caused
a problem with the AOS Fortran optimizer, i.e., not saving a register
or something - AOS uses part of the UNIX kernel as is). (1/5)
------------------
End of AOS bug merge.
------------------
(begin SUN merge)
host/boot/spp/xpp/decl.c
Modified to break output declaration lines when they exceed 80 columns.
Formerly lines were broken arbitrarily after 8 arguments; this would
fail, of course, when the argument names or the procedure name were
large. (1/5)
[IMPORTANT PORTABILITY NOTE]
The SUN version of 4.2BSD buffers the C stderr output when redirected
just like stdout. Output to stderr is not automatically flushed when
a newline is seen. If the output from a program which writes to both
stdout and stderr is redirected, output will come out mixed up unless
fflush(stderr) is called after every write to stderr. 4.3BSD UNIX
also buffers stderr for efficiency reasons, hence this change in the
semantics of C stdio may be permanent.
(all of the new bootstrap utilities call fflush, but some of the old
(ones probably don't, yet).
host/boot/spp/*.c
Added fflush(stderr) after all writes to stderr in C files in these
directories. (1/5)
-------------------
End of SUN revisions (so far).
host/hlib/iraf.h
host/hlib/libc/iraf.h
host/hlib/libc/libc.h
host/hlib/libc/knames.h
host/hlib/libc/names.h
host/hlib/libc/knames.no_
host/hlib/libc/names.no_
Added a new define F77_NO_ to <iraf.h>. This is defined to tell LIBC
that Fortran external names do not use the trailing underscore. If so,
<iraf.h> loads the .no_ files instead of the .h files. This does not
solve the problem of machine dependent external names, but should help
quite a bit since it works for our major systems. I also change the
names of all the VOS procedures with names likely to collide with host
or C library names if the underscores are removed. The names are also
redefined in the SPP iraf.h, and the redefined names are used whether
they are needed or not (i.e., they are used on UNIX, too). This should
simplify debugging as one need only learn one set of funny names. (1/5)
sys/libc/fseek.c
Changed the LIBC unix emulation FSEEK to return OK or ERR to conform
to UNIX. It formerly was a long function returning the new position,
which is not the way UNIX does it (see ZFIOTX bug above). No existing
C code was affected by this semantic change. (1/6)
pkg/cl/builtin.c
GFLUSH was flushing only STDPLOT; modified to flush all three std
graphics streams. (1/6)
sys/gio/gopen.x
Changed argument one of gexfls_set from FD to OUTFD. (1/6)
sys/gio/gclose.x
The test for a pseudofile output stream was based on READ permission
on the output file. That seems like a poor criterion, so I changed it
to a simple numerical test (regular file if fd > STDPLOT). Also, if
GOPEN opens the stdvdm file then GCLOSE had better close it, so I
added a test for that case. Note that GCLOSE does not normally close
the output file, since the user would normally open it before calling
GOPEN. (1/6)
sys/fio/fdebug.x
Added pargstr for APPEND mode. (1/6)
sys/tty/ttyopen.x
Formerly used a construct "while (IS_WHITE (getc (fd, ch)))" which
is illegal because the IS_WHITE macro makes multiple calls to the getc
function. (1/6)
sys/etc/lpopen.x
Now recognizes the special device "text", which has a termcap entry
and is used to get ascii LPRINT output on the standard output. (1/7)
sys/tty/tty.h
sys/tty/ttyputl.x
Optimized TTYPUTLINE for the common case where the output line of text
contains no special control characters. This routine was probably the
main contributor to the inefficiency of LPRINT. (1/7)
dev/termcap
Changed the number of lines per page from 66 to 64 for the Versatec
entries, as otherwise formfeed sometimes causes entire blank pages to
be output. Also, overstrike does not appear to work for the Versatec,
so the OS capability was removed from the termcap entries for these
devices. This will cause standout mode text to be printed in upper
case. (1/7)
pkg/system/lprint.x
Lprint moves pages of text one tab to the right if the output device
is a printer with a wide page. This would cause problems if the
first char on a line was a formfeed, since formfeed breaks a line.
The remainder of the line following the formfeed would come out one
tab to the left; this was causing manual page headers to be misaligned
when printed on the Versatec. Added a test for a formfeed at the
beginning of a line to fix the problem (not a very general solution).
(1/7)
sys/etc/main.x
sys/etc/onerror.x
sys/etc/onexit.x
Added runtime initialization of the commons of the ONEXIT and ONERROR
procedures. Formerly we were depending upon the linker to initialize
the commons to zeros; this is the case on most systems, but cannot be
assumed in portable code. (1/10)
hlib/libc/error.h
Added defines for the SYS_XXXX error codes, as in <error.h>. (1/10)
unix/os/zoscmd.c
host/boot/mkpkg/*
Modified ZOSCMD to return SYS_XINT in the event of an interrupt, and
to guarantee that it is not returned if an interrupt does not occur.
Changed the value of the INTERRUPT status code in MKPKG to SYS_XINT.
The ordinary value in use at first was getting returned on occasion
when an interrupt did not occur, causing MKPKG to terminate when it
should not. (1/10)
host/boot/spp/xpp/xppcode.c
Modified to output the SAVE statement before any DATA statements.
We discovered this violation of the F77 standard in a recent experiment
trying to compile IRAF code on a beta release of 4.3BSD UNIX, which
is evidently more strict about the F77 standard than 4.2BSD. (1/11)
sys/imio/imopsf.x
Moved the call to function FDEVBLK in the argument list of IMIOFF
out into a separate statement and added an ERRCHK for it, so that
IMIOFF is not called if an error occurs in FDEVBLK, causing it to
return a zero block size. (1/11)
sys/imio/imioff.x
Replaced the BLKSIZE variable in the call to the MOD function in
IMALIGN by max(1,blksize), to avoid integer divide by zero if the
block size is zero. (1/11)
host/as/zsvjmp.s [UNIX] [IMPORTANT KERNEL NOTE]
It turns out that UNIX only aligns commons on longword boundaries
by default (as does VMS). This can lead to pointer misalignment
problems when accessing data of type DOUBLE or COMPLEX in a buffer
with page alignment, e.g., a FIO or IMIO data buffer. In other
words, forcing page alignment on a dynamically allocated buffer
will result in the buffer not being aligned for SPP pointer references
of type DOUBLE and COMPLEX, if the MEM common is not also page aligned.
This has turned out to be a problem on both UNIX and VMS, although
in both cases there has been a simple solution.
In the case of UNIX I have arranged for the MEM common to be located
at location zero at link time. This has the following results:
[1] Since MEM is at virtual address zero, it is aligned for all
machine datatypes as well as page aligned.
[2] Debugging is easier since MEM is not at some arbitrary offset.
SPP pointers become almost equivalent to real pointers. To
convert an SPP pointer into a virtual address, subtract one
and multiply by the number of bytes (2, 4, or 8) per element.
For example, if X is a pointer to INT, the ADB address of
the integer pointed to by X is given by
byte_address = (x - 1) * 4
[3] Having MEM located at zero has the significant benefit that
uninitialized pointer references are likely to cause a memory
fault, rather than causing some arbitrary region of memory to
be overwritten. In particular, dereferencing a NULL pointer
will cause a reference to location -2, -4, or -8, causing a
memory violation. Also, address 0 is in the read protected
text segment, so small pointer values should also cause a
memory fault when writing to the referenced location.
The assembler directives required to locate MEM at location zero have
been placed in ZSVJMP.S for Berkeley UNIX, for the simple reason that
it is the only assembler module in the kernel, and it is linked into
every process. This is obviously a very machine dependent solution to
the problem. (1/11)
dev/vi.ed
I'm not sure how, but ^P and ^N were being used for MOVE_START and
MOVE_END, rather than the more logical PREV_PAGE and NEXT_PAGE.
The latter commands were not even in the menu. Added NEXT_PAGE and
PREV_PAGE as ^N and ^P, and changed the escape sequences for the
MOVE commands to something more obscure (in the process of tracing
this down I found an obscure bug in the new ttyputline; EPARAM is
great for finding bugs, as the i/o is so complicated). (1/11)
pkg/cl/grammar.y
pkg/cl/gram.c
In grammar.y, changed posit and inarglist variables from static to
global. In gram.c, modified crackident() to treat keywords as ordinary
identifiers in argument lists and expressions. Formerly the CL would
abort on a syntax error upon entry of commands such as
help xxx.hlp file+
or
wcardimage alpha,beta for=i5
The point is that it is easy to accidentlayy enter a keyword name when
abbreviating a parameter name or entering an unquoted string; when this
happens the user has no idea what they did wrong. A syntax error is
easily avoided by making crackident() context sensitive. I could also
have turned keywords off in declaration lists, but did not do so to
minimize future merge problems with the ST version of the CL. (1/12)
sys/gio/stdgraph/stginit.x
The device name string was being saved by stg_init(), but the pointer
to the string was not being set in SG_DEVNAME(g_sg). The bug was
harmless but would cause the stdgraph kernel to reinitialize itself
from the graphcap on every call to open workstation. (1/12)
This is the first uninitialized pointer bug caught by the loc(mem)=0
revision noted above!
sys/gio/cursor/rcursor.x
Another uninitialized pointer problem. In rcursor, grc_open() was
being called before the descriptor pointed to by RC was allocated
and initialized by grc_init(). (1/12)
pkg/cl/exec.c
Replaced call to prparamval() in printcall() by lower level procedures
which do not call cl_error(). Printcall() is called by killtask()
during CL error recovery, and error recursion followed by panic
shutdown will result if cl_error is called during killtask. (1/12)
pkg/cl/builtin.c
Fixed a bug in clflprcache() so that everything is not flushed if
the named task is not found in the cache. (1/12)
sys/fmtio/lexdata.inc
This was a fix to lexnum for a bug reported by ST. The fix made at
ST was not correct. The entry for cc=ED in state 10=RFR was QRX
but should have been RFX. The routine is almost impossible to figure
out by just studying the code; you need to look at the state diagram
in fmtio/doc/lexnum.hlp. A more serious problem is that the routine
is not very efficient. While in the neighborhood I made a couple
of simple optimizations which should speed it up significantly,
although it is still not very efficient. A simple brute force,
special case recognizer would probably have been fastest, but the
current code is reasonably compact and correctly handles a lot of
special cases. (1/12)
pkg/system/help/help.hlp
Fixed a typo. (1/12)
pkg/system/help.par
pkg/system/help/help.h
pkg/system/help/help.hlp
pkg/system/help/modtemp.x
pkg/system/help/t_help.x
Modified the default action of HELP to print help only for the first
module matched by the template, rather than all modules matching the
template. Since the current package is searched first, the first
module matched is likely to be what the user expects. If user wants
help for a task for which there is no help file in the current
package searching will continue elsewhere, but this is not considered
a bug since there should be help for every task in a package.
A package does not have to be loaded to get help on a module therein.
A new boolean parameter ALL was added to the help parameters with
default value NO. If the value is set to YES, HELP will behave as
before, i.e., it will print help for all modules in the help database
matching the given template. The value of ALL automatically defaults
to YES if a pattern matching metacharacter is present in the module
template entered by the user. (1/12)
pkg/local/mkpkg
pkg/local/local.cl
pkg/local/x_local.x
pkg/local/t_mpc.x +
pkg/local/imcntr.par +
pkg/local/radplt.par +
Installed the interim MPC-like image centering and radial profile
plotting tasks (contr. by G. Jacoby) in the LOCAL package. (1/12)
pkg/local/peritek/*
Cleaned up the package. Fixed it to get OS channel codes correctly
whether or not the KI is in use. Move the UNIX peritek IOCTL defs
file into the directory so that it will compile on all hosts. Set
up LOCAL mkpkg so that the Peritek stuff will not be compiled at all
except at NOAO. (1/12)
pkg/vops/*.x
pkg/vops/*.gx
Replaced all "a[npix]" type variable array dimension declarations
by "a[ARB]". The former declaration would cause a runtime abort
on VMS if the procedure were called with NPIX=0. (1/13)
lib/gio.h
sys/gio/gopen.x
sys/gio/gclose.x
GCLOSE would close the output file if GOPEN opened device "stdvdm",
but did not open the output file (i.e., if the user opened the output
file before calling GOPEN). Added a new flag word GP_GFLAGS to the
GIO descriptor and allocated one of the bits for a flag to tell
GCLOSE whether or not to close the output file. This removes all
ambiguity and should rule out any more bugs. (1/13)
unix/os/zfiobf.c [IMPORTANT KERNEL NOTE]
sys/fio/fgetfd.x
When opening a binary file in APPEND mode, FIO has to read the partial
block at the end of the file in order to append data to it. Read
permission is therefore required on a binary file opened in APPEND mode.
The read perm bit was restored in FGETFD, and ZOPNBF was modified to
open the binary file with read-write permission. Note that this
requires that ZOPNBF create the file if it does not already exist,
since the UNIX open() will abort when trying to open an nonexistent
binary file for read-write access. (1/14)
NOTE -- Appending to an odd size binary file did not work at all prior
to this bug fix (except back when FIO was first written).
pkg/cl/exec.c
The following command would cause a syntax error:
cl> printf ("!cat junk") | cl
The lexmodes=yes lexical analyzer was not recognizing beginning of
line, causing the ! operator to be interpreted as YOP_NOT instead
of YOP_OSESC. Added a lexinit() when a new cl() is pushed in
execnewtask(). (1/14)
host/os/zoscmd.c [UNIX]
Fixed a bug that was calling bkg MKPKG jobs to see interrupts. The
special zoscmd interrupt handler was being posted even when interrupts
were already disabled in the parent process. (1/15)
sys/vops/amap.gx
Was using integer arithmetic to calculate the mapping coefficients.
(1/15)
sys/gio/glabax/glbsview.x
Increased the amount of space at the left of the plot to avoid
truncation of numbers printed in scientific notation (unfortunately,
the plot will also be smaller as a result). There was also an error
in the computation, the presence of the x label and ticks was being
used to compute the xwidth, whereas it is the y label and ticks which
affects the x width of the plot. (1/15)
pkg/system/beep.x
pkg/system/clear.x
pkg/system/sleep.x
pkg/system/time.x
pkg/system/revisions.cl
pkg/system/revisions.par
pkg/system/doc/...
Deleted the above files and their manual pages (these tasks were moved
to the language pkg some time ago). The REVISIONS task will come back
later in a more useful and efficient form. (1/15)
sys/imio/imunmap.x
sys/imio/imdelete.x
IMIO has been modified to set file protection on image header files
at imunmap time on a new image or new copy image. This will prevent
creation of zombie pixel files by accidental use of DELETE rather than
IMDELETE to delete images. Unfortunately, this also prevents use of
file protection to protect an image from deletion by IMDELETE, but
at least at NOAO, few if any users ever explicitly protect images.
(1/15)
host/os/zfrnam.c [UNIX]
In testing out the rename operation on the new protected image header
files, I discovered that the original protect link is not being
deleted because ZFPROT cannot find the named file, which has been
renamed at the host level by the time ZFPROT is called to unprotect
the original file. Modified ZFRNAM to remove protection from the
original file before renaming it, and to restore protection if the
rename fails. (1/15)
host/boot/rtar.c
Added explicit initialization statements for all the switches, and
made the default action to strip trailing whitespace and blank lines
at the end of a text file (necessary when unpacking a tar archive
written on VMS). Switch -n defeats stripping. Also increased size
of pad buffer from 1024 to 8196, for very large text files. (1/16)
host/os/zxwhen.c [UNIX]
Added a new debugging tool to the exception handler. If the external
variable debug_sig is set nonzero with the debugger before running
a process, then the action SIG_DFL will be set for all UNIX signals.
This will cause the process to core dump and die when the first
signal occurs. One can then go in after the fact with the debugger
and figure out what the process was doing when the exception occurred.
This is very useful when the exception only occurs when the process
is being run from the CL, in which case ADB cannot be used during
process execution.
Example:
cl> adb -w x_pkg.e
debug_sig?w1
$q
cl> (enter command; process runs and core dumps)
cl> adb x_pkg.e core
$c
(get stack trace showing where exception occurred)
Note: adb -w works only if the process is not currently executing.
(1/16)
host/boot/spp/xpp/xppcode.c
sys/tty/ttyopen.x
The above mentioned diagnostic, in concert with the MEM=0 revision made
earlier, enabled me to find the following subtle bug in the SPP
compiler. In TTYOPEN, the load device entry routine was taking an
error action due to a bad device name, causing the error handler to
be entered. The error handler was doing an MFREE on the tty
descriptor and then calling ERRACT(EA_ERROR). The problem was that
the ERRACT was not error checked, hence processing would continue.
The MFREE sets the input pointer to NULL, hence a couple statements
down we were assigning to a structure pointed to by a null pointer,
causing a segmentation violation (fun, huh?).
I spot checked other parts of the VOS and found that RETURN was
called only occasionally after ERRACT, hence the same type of bug
could occur in other parts of the system. The language specifies
that one is supposed to explicitly ERRCHK the ERRACT subroutine,
but it is harmless (and safer) to have the system do so automatically,
so I changed the compiler to automatically ERRCHK all calls to ERRACT.
This involved modifications to only 2 lines of code in xppcode.c.
(1/16)
sys/tty/ttygdes.x
sys/tty/ttyodes.x
sys/etc/envindir.x +
The graphcap search failure leading to the bug mentioned above was
caused by ttyopen being called for the device "@terminal". Obviously,
the higher level code could have resolved the indirection, but for
reasons of defensive programming I added the capability to ttyodes
and ttygdes. The new procedure ENVINDIR was added to ETC to resolve
any indirection in the name (not value) of an environment variable.
(1/16)
host/hlib/mkiraf.csh
Modified to reference hlib$login.cl, rather than lib$login.cl. (1/16)
sys/osb/mkpkg
The mkpkg file would pass bytmov.c to the library module list even
though it had already passed bytmov.s. (1/17)
sys/osb/bytmov.c
Was not using AOFF and BOFF; would work only provided the offsets were
1 (which is usually the case). (1/17)
general
The @terminal syntax for specifying the stdgraph device is causing so
many problems thoughout the system that I think we should just drop it,
if its that hard to do, its probably not a good idea anyway. (1/17)
Begin simultaneous port to SUN and VMS!!
(Document here only notes which affect the master system; SUN or VMS specific
(revisions are docmented in their respective notes files).
-----------------------------------------------------------
host/boot/bootlib/_bytmov.c
host/boot/bootlib/osamovb.c
host/boot/bootlib/mkpkg
host/boot/bootlib/mkpkg.csh
Changed the bootlib procedure os_amovb() to use BYTMOV instead of AMOVC.
Added a local C version of BYTMOV so that the assembler version can be
optional. Added conditionals to mkpkg.csh and mkpkg to use the local
C version if the assembler version cannot be found. All assembler
modules are now optional except ZSVJMP.S. (1/18)
host/mc6800/README
host/mc6800/ishift.s
host/mc6800/zsvjmp.s
Documented the host$* changes required for a MC68000 based machine
(e.g., the SUN workstation). Put a couple of SUN/UNIX assembler sources
in the directory so that they can be moved into place during
installation. Note that these will not work on an ISI/UNIX due to
differences in the two assemblers. (1/18)
host/hlib/mkiraf.csh [UNIX]
Extracted the machine dependent pathnames into SET definitions at the
head of the file, and eliminated all site dependence from the remainder
of the script. (1/18)
host/boot/boot/mkpkg.csh
host/boot/boot/bootlib/mkpkg.csh [UNIX]
The bootlib mkpkg.csh file has a multiline if then else, hence was
made into an executable .csh and called directly as a task in the
boot bootstrap-mkpgk.csh, rather than with sh -x. (1/18)
host/boot/mkpkg/pkg.c
In push_context(), should not call ftell() if cx->fp is NULL, i.e.,
when executing do_include from the main at startup time. (1/18)
host/boot/bootlib/gmttolst.c -
Deleted this file, it is not used anywhere and got forgotten about.
(1/18)
sys/fio/delete.x
sys/fio/falloc.x
sys/fio/frename.x
sys/fio/protect.x
These routines now recognize and ignore attempts to delete, rename,
protect, etc. the null file "dev$null". (1/19)
host/hlib/zzsetenv.def
When a task is run from the host it initializes its environment from
the zzsetenv.def file in hlib$; the CL is such a task. I removed the
definition of UPARM from the default zzsetenv.def, because it is
referenced by the CL during startup when looking for cl.par, and the
uparm definition referenced home$, causing a "env.home: " query during
process startup. (1/19)
lib/syserrmsg
Replaced SYS_FUNPROTECT by a more informative message. (1/19)
host/hlib/libc.h
Added a libc style u_ definition for ISATTY. Without this, the CL
crashed badly on the SUN because the UNIX stdio code was calling the
LIBC version of isatty(). (1/19)
sys/ki/kdvall.x
sys/ki/irafks.x
All references to ZDVALL and KDVALL in this directory were missing the
second argument. (1/20)
host/os/zalloc.c
Was calling ZGTENV to get the path to hlib$. Changed to get the path
to host$, and construct the pathname to hlib$, since hlib$ is not
defined in <iraf.h>. (1/20)
host/boot/mkpkg/host.c
The UNIX version of mkpkg used to do nothing when asked to check out
a file, if a local copy of the file already existed. This would cause
problems when the system was moved to a new root directory, as the
already checked out version, a symbolic link on unix, would contain
a pathname which was no longer correct. Changed to delete the local
copy and always check out a new version. (1/20)
host/boot/bootlib/tape.c
In the decoding of the density number, changed "*ip + '0'" to
"*ip - '0'". Also, in the call to sprintf, replaced "density" by
"*density". (1/20)
pkg/cl/eparam.c
Paramget() was being used to fetch the parameter value string. This
would cause eparam to lock up the CL in terminal raw mode when one
of the parameters in the parameter file was indirect. Replaced the
call to paramget() by a call to the lower level routine sprop().
(1/21)
host/boot/mkpkg.c/scanlib.c
In working on the VMS version of MKPKG, I coded a hash table package
for the scanlib() library module list database. I had to test this
anyway, so I merged it into the UNIX version of scanlib, in place of
the old linear search scheme used formerly. Performance improved
significantly for large libraries, as one would expect, e.g., for
a null mkpkg on vops$:
make .files + 1:02 (old make + mklib)
20.2u 16.6s 0:49 (new mkpkg, linear search)
7.9u 16.6s 0:32 (new mkpkg, hash table)
An entire null sysgen on the VOS (from directory sys$) now takes
1:26 (86 clock seconds, 13 libraries) on my unix 750, when running
single user.
Given the name translation and fdate caches already in use, and now
the library module hash table, MKPKG probably isn't going to get
much faster; it is probably 4-8 times faster than the original
combination of Make plus MKLIB. The VMS version, which actually
physically reads each file, is much slower still. (1/21)
host/boot/xyacc/Makefile [UNIX]
Replaced machine dependent pathnames with offsets. (1/22)
host/boot/mkpkg/host.c
add_objects() was being called with one too few arguments. (1/22)
host/hlib/login.cl
Added a default USER package to the default login.cl. (1/22)
host/boot/spp/xpp/xppcode.c
host/boot/spp/xpp/xppmain.c
Changed include "iraf.h" to include <iraf.h>. (1/22)
host/boot/spp/xpp/xpp.h
host/boot/spp/xpp/xppmain.c
Parameterized the success code returned by XPP in xpp.h, to avoid
having xppmain.c be different in unix and vms (success=1 in vms,
0 in unix). (1/22)
sys/fmtio/lexnum.x
Changed stk_ip[] from short to int. (1/29)
pkg/cl/builtin.c
Two instances of
flags != LT_PFILE;
were changed to
flags &= ~LT_PFILE; (1/29)
pkg/system/help/t_help.x
Added , to the list of pattern metacharacters, so that help will not
stop after printing only the first help page when given a command
such as "help taska,taskb". (1/29)
sys/ki/irafks.x
Changed all the "call ki_error()" to "call ks_error()"; a typo. Added
KI_FIOGD (the graphics binary file device driver) to the case list in
the main routine. (1/29)
sys/gio/cursor/gtropenws.x
Moved the strcpy to set TR_DEVNAME until after the new kernel has been
successfully opened. Before, if the open failed (e.g., because no
x_*.e kernel executable was found), then the second attempt to open the
kernel would result in a misleading "bad file descriptor" error
message. (2/5)
sys/fio/rename.x
RENAME will copy a file if the zfrnam fails. Added code to transfer
file protection to the new file, and remove it from the old file
before deletion so that the delete will not abort. (2/7)
pkg/system/help/lroff/lroff.h
pkg/system/help/lroff/lroff.x
pkg/system/help/lroff/do_ls.x -> dols.x
pkg/system/help/lroff/section.x
(etc.)
LROFF would learn new values for the .ls indent, .sh nlines to skip,
etc., which would remain in effect after task termination, causing
subsequent text to be formatted incorrectly if that text used the
default values. The offending static variables were moved into the
lroff common, and code was added to lroff() to initialize these when
lroff() is called. In the process I eliminated the ENTRY constructs
in section.x. (2/7)
pkg/system/help/lroff/dols.x
Fixed a bug that was causing 2 ".ls" directives in a row to output
two blank lines, rather than one. (2/7)
pkg/system/help/help.hlp
This manual page was moved to system$doc/help.hlp. (2/7)
pkg/system/doc/*.hlp
Went through all these manual pages, fixing grammatical and other
errors, clarifying the discussions, improving the examples, checking
the examples to make sure they work, adding entries for parameters
not mentioned, correcting the names of misnamed parameters, and so
on. This led to the lroff and help bug fixes noted here, most of
which have been known for some time in any case. (2/7)
pkg/system/help/t_help.x
When called to process a file_template (text process an ordinary file,
rather than a module in the help database), will no longer query for
the name of the help database and all the parameters associated with
formatting manual pages. Formerly the task would abort if there were
no help database, even when called as a simple text formatter. (2/7)
sys/etc/main.x
Fixed a bug that I admit I have known about for years but never got
motivated to track down until now. The bug showed up when PAGEing
help output in a pipe; if one quit early in PAGE, and then ran page
again in a pipe, the first output seen would sometimes be from the
whatever was previously being paged. This was traced to a problem
with task termination. The IRAF main was changed to not only flush
the STDOUT when a task terminates, but to also F_CANCEL any unread
input on STDIN. (2/7)
iraf$bin +
pkg/cl/exec.c add call to findexe
pkg/cl/main.c IRAFLIB->IRAFBIN
pkg/cl/builtin.c add call to findexe in clprcache
unix/hlib/zzsetenv.def add set bin = iraf$bin/
unix/hlib/clpackage.cl add set bin = iraf$bin/
unix/hlib/irafuser.csh lib/cl.e -> bin/cl.e
dev/graphcap all lib$ -> bin$
dev/hosts all lib$ -> bin$
Created a new directory iraf$bin, logical bin$, to hold "installed"
exececutables. A new function findexe() was added to exec.c, and
a reference to it was added to the call to pr_connect(). The CL will
first look in BIN for the executable when connecting a subprocess,
and if it is not found there, use the pathname given in the TASK
statement. This allows us to install the executables all in a single
directory without need to change the TASK statement or move the
parameter files (which still must be in the directory referenced in
the TASK statement). Note that there need be no executable file in
the package directory; a "mkpkg install" or "mkpkg update" will $move
it to bin$.
In addition to permitting installed executables, this revision also
allows multiple tasks, each with its own parameter file, to share the
same executable. For example, we currently copy the ONEDSPEC
executable to the IMRED directories for the IIDS and IRS, since while
these packages can share the executable they need independent parameter
files. By installing the executable all packages can share the same
executable and still have separate parameter files.
sys/libc/cfnroot.c
sys/libc/cfnextn.c
Changed the FNLDIR references to calls to FNROOT and FNEXTN. (2/10)
sys/libc/cfnames.c
Deleted this file, since c_fnldir, c_fnroot, and c_fnextn are already
present in the library in separate files. (2/10)
pkg/cl/main.c
Changed several debugger eprintf calls to printf calls, to avoid
use of eprintf until the CL has finished starting up. (2/10)
lib/cl.par -> pkg/cl/cl.par
Since the CL is now installed just like any other executable, its
parameter file is kept in the source directory rather than lib$. (2/10)
all mkpkg files
The "update:" entries now do a "$move x_pkg.e bin$". (2/10)
dev/pix
dev/pix.pix
Installed the "standard test image" and its associated pixel file (for
testing software and new installations) in dev$. (2/10)
--------------------
Begin merge of V2.2 VMS/IRAF changes into UNIX/IRAF.
See the VMS notes for additional details.
unix/os/zfnbrk.c
Can now handle \X in filenames, without interpreting the \ as a
directory delimiter. (2/10)
unix/hlib/libc/xnames.h
unix/hlib/libc/xnames.no_
Added a define for VFNUNMAP. (2/10)
unix/os/zzinit.c -
unix/os/zzstrt.c +
unix/hlib/libc/knames.h
unix/hlib/libc/knames.no_
Added the (no-op) procedures ZZSTRT and ZZSTOP to the UNIX kernel.
These are called by the bootstrap utilities, or any other program
which does not have a ZMAIN but which uses LIBOS, to perform any
necessary kernel initialization. (2/10)
unix/boot/...
Changed all the _zstartup, _zshutdown references to ZZSTRT, ZZSTOP.
Added references to a couple programs that did not have them yet.
(2/10)
unix/boot/bootlib/osfpathname.c
Added a call to vfn2osfn before the call to ZFPATH. (2/10)
unix/boot/bootlib/oschdir.c
Replaced call to os_fpathname by call to ZFSUBD. (2/10)
unix/hlib/libc/spp.h
Added #define for OSOK. (2/10)
unix/hlib/libc/libc.h
Added #ifdef for NOLIBCNAMES. (2/10)
sys/mkpkg
Replaced with VMS version. (2/10)
unix/boot/mkpkg/*
Replaced all the "portable" files with the VMS versions, which will
work on either system. (2/10)
unix/boot/bootlib/*
Updated with code from VMS version where appropriate. (2/10)
vms/boot/bootlib/osgetenv.c
Added code for bin$. (2/10)
unix/boot/generic/*
Numerous changes to enhance the portability of this code. (2/10)
unix/boot/rmbin/rmbin.c
unix/boot/rtar/rtar.c
unix/boot/rtar/wtar.c
Replaced by the VMS versions. (2/10)
unix/boot/spp/xpp/lex.sed +
unix/boot/spp/xpp/Makefile
Now postprocesses the lexyy.c file to convert certain nonportable
constructs into a more portable form. (2/10)
pkg/mkpkg
Added a conditional purge [...] for VMS, and a $purge bin$ for
all systems. (2/10)
pkg/cl/scan.c
pkg/cl/opcodes.c
pkg/cl/main.c
pkg/cl/globals.c
Merged VMS changes into these files. Scan: tab as well as blank in
whitespace; the rest, #ifdef globalgarbage for VMS linker. (2/10)
unix/hlib/devstatus.cl
Added a verbose option like that for VMS; isn't worth much, but it
make the task parameters match on both systems. (2/10)
sys/etc/syserr.x
In syserrs, added a check for overflow on the error message string.
(2/10)
sys/ki/kiconnect.x
Added a call to ki_gethosts() to read the host name table if it has
not yet been read. (2/10)
sys/clio/zfiocl.x
In zardps, repaired some code that was confused about bytes and chars
and was overwriting memory as a result. (2/10)
dev/graphcap
Merged in changes from VMS version. (2/10)
sys/tty/*
Replaced the entire directory by the VMS version, which adds TTYWRITE
to permit null padding in control strings. (2/10)
sys/gio/stdgraph/stdgraph.h
sys/gio/stdgraph/stgencode.x
sys/gio/stdgraph/t_showcap.x
Replaced by the VMS versions. Adds !! operator for generating
millisecond delays in graphcap control strings, etc. (2/10)
pkg/images/tv/*
Replaced all of the TV code by the VMS version, except the tv/doc
directory and tv/cv/ids/iis.doc, which had been modified recently
in the UNIX version. (2/10)
(did a full reboot of UNIX/IRAF)
unix/boot/mkpkg/pkg.c
vms/boot/mkpkg/pkg.c
Open_mkpkgfile() would die on a bus error if the mkpkgfile did not
exist. Made the call to k_fseek conditional upon the successful
open of the mkpkgfile. (2/10)
unix/os/zfsubd.c
If the input directory is null, will now immediately fetch the current
directory and fold the subdirectory into that. (2/10)
sys/gio/calcomp/mkpkg
sys/gio/nsppkern/mkpkg
sys/gio/stdgraph/mkpkg
sys/tty/mkpkg
Changed to move exe to bin$ instead of lib$. (2/10)
pkg/cl/builtin.c
pkg/cl/edcap.c
pkg/cl/eparam.h
pkg/cl/globals.h
Added a new attribute EDITOR_CMD to EDCAP. This defines the command
sent to the host to run the editor (not necessarily equivalent to the
logical name of the editor). The commands are defined in the dev$*.ed
files, and are host system dependent but not site dependent. (2/11)
dev/*.ed
Added an EDITOR_CMD entry to each file for UNIX. (2/11)
doc/*
This directory contained a lot of internal memos, etc., of value only
for iraf management. These were moved out of the system, leaving only
the sources for those documents which might be of general interest.
(2/12)
local/* [UNIX]
Added a new subdirectory LOCAL to to the UNIX version of IRAF. This
serves the same purpose that it does in VMS/IRAF. Sites installing
IRAF for the first time should create a new account "iraf" for the
IRAF system, with login directory $iraf/local. The UNIX distribution
tape will contain a default .login etc. for the IRAF account (this is
needed to bootstrap the system, should it be necessary to do so).
Mail to IRAF will accumulate in the "mbox" in local, the "notes" file
will be stored in local, and so on. This directory will not be
modified when an update of the system is installed. (2/12)
pkg/cl/builtin.c
Added a call to findexe() whereever _pname is used. If this not done,
tasks like prcache and flprcache may fail to find the process in the
cache. (2/12)
unix/hlib/clpackage.cl
unix/hlib/zzsetenv.def
Since the zzsetenv.def file is always loaded now when the CL starts
up (because the CL is run from the host), and since a lot of the set
environment defs in clpackage.cl redefine those in zzsetenv.def,
I moved the remaining non CL-specific SET defs from clpackage.cl to
zzsetenv.def. The file clpackage.cl is now machine and site
independent and can safely be forgotten about. Also, since the system
package is now loaded at login time, I replaced the fscan stuff,
used to print the message of the day, by a call to PAGE. (2/12)
iraf$mkpkg
Added an "update" entry point, to avoid having to run separate mkpkg's
in sys and pkg to relink all the system executables. (2/12)
sys/ki/kishownet.x +
pkg/system/netstatus.x
pkg/system/x_system.x,system.cl,etc.
Added a new function ki_shownet to KI to print the network status.
Added a new task NETSTATUS to the system package to bring this to
the user level. NETSTATUS tells if the network is active, lists
the nodes on the local net, and lists the aliases for each node. (2/12)
dev/edt.ed
dev/emacs.ed
Updated with the VMS versions, which now include the PREV_PAGE and
NEXT_PAGE entries. (2/12)
dev/hosts
dev/uhosts
Brought these up to date; added a bunch of new hosts. (2/12)
unix/os/zgtenv.c
An optimization; <iraf.h> is not read unless the named environment
variable is a known one. (2/12)
sys/sys.hd
host/os/doc/os.hd
Replaced the references to sys$ by host$ so that HELP can find the
manual pages. (2/13)
pkg/images/tv/cv/ids/idsfont.x
pkg/images/tv/cv/iism70/idsoptn.x -
There was a name collision of the procedures ids_open and ids_optn.
The second was a no-op anyhow, so I deleted it, and commented out
the call in ids_font. (2/13)
sys/gio/cursor/grcwaitp.x
Modified to display another "wait" message after the user responds
to the first wait with the space bar, causing the system help
to be printed. (2/13)
unix/os/zopdpr.c
unix/os/zmain.c
Fixed a bug in zopdpr that was preventing KILL from killing bkg jobs
on UNIX. Also added the ability to use an &NN argument to set the
priority at which the bkg job is to run. (2/13)
dev/termcap
dev/graphcap
Several new entries were added to each file (contributed by our early
release sites). (2/13)
pkg/language/
The manual pages for the language package were extensively revised,
corrected, and extended. (2/12-13)
pkg/softools/
Manual pages were added for all the softools tasks, including all
the bootstrap utilities. (2/13)
host/spp/xpp/xppcode.c
The size of the output buffer was increased by a large factor to
avoid overflow when compiling large procedures, e.g., procedures
with a lot of data statements. (2/13)
pkg/lists/*
The names of the tasks GCURSOR and IMCURSOR were changed to RGCURSOR
and RIMCURSOR. The manual pages for these and all other tasks in
the package were revised and printed. (2/13)
host/boot/rmfiles/ +
iraf/mkpkg
Added a new bootstrap utility RMFILES. This is similar to RMBIN,
but is driven by a script and is not limited to deleting binary
files. Two new entries "strip" and "stripall" were added to the
root mkpkg file for stripping production versions of the system.
The results:
full system 41.493 Mb
mkpkg strip 19.838
mkpkg stripall 17.062
Stripall differs from strip in that it deletes the libraries as
well, preventing software development but still permitting full
use of the standard system. (2/16)
doc/*
Renamed some files with .doc extensions to make it easier to
delete them with the stripper. (2/16)
doc/gripesfile
doc/newsfile
lib/motd
These files were moved to HLIB, since they are system dependent,
and should not be clobbered when a new version of the system is
installed. (2/16)
(Skip made tape for AOS/VS)
hlib/zzsetenv.def
Changed host$osb/ to sys$osb/. (2/17)
unix/os/zfmkcp.c
An argument was being passed to ZFPROT by value rather than by
reference. (2/28)
sys/imio/imfort
Tested the Fortran/IMIO interface for UNIX. One of the Fortran
test programs had to be modified before it would compile on UNIX,
and another had a bug (misplaced continue in do loop). The only
serious problem was the linker conflict (see below). (3/5)
unix/os/mkpkg
Added an $ifeq (USE_LIBMAIN to the mkpkg to not put zmain.o in the
library if libmain.o is used. The library version is not used
anyhow, as XC explicitly references lib$libmain.o during linking.
The unix zmain.o contains the external "main"; when using libos.a
in a Fortran program, the linker would use the iraf zmain instead
of the Fortran main, causing the Fortran program to fail to link.
(3/5)
unix/hlib/newsfile
unix/hlib/gripes.cl
Installed the vms/iraf versions. (3/5)
unix/os/zgcmdl.c
Added this new kernel primitive; used to get the host system command
used to invoke the process, e.g., in a foreign task. This is used
by the IMFORT interface to allow host Fortran programs to get the
CL foreign task command line. (3/5)
unix/os/zmaloc.c
unix/hlib/kernel.h
Added a #ifdef DEBUGMEM to zmaloc.c and a #define DEBUGMEM to
kernel.h so that compilation of the special version of MALLOC can
be easily defeated. The debug version is useful on the VAX, but
should be disabled on the SUN to permit use of the standard UNIX
version when using the SUN graphics libraries. (3/5)
-------------------------
(V2.2 was sent out sometime near here)
unix/mc68000/ishift.SUN
Would not right shift properly. (3/14)
sys/osb/miiupk16.x
sys/osb/miiupk32.x
These subroutines were modifying (byte swapping) the input array.
(3/14)
sys/ki/kireceive.x
Modified to deal with out of band data by checking to see if the out
of band data is a character string (usually an error message), printing
the message on STDERR if so, and then returning ERR on the channel.
(3/14)
dev/graphcap
Modified DD entries for the versatecs and the dicomed to queue the
print jobs to these devices. (3/15)
pkg/cl/lexicon.c
Modified to permit inclusion of {} inside unqoted strings. The change
was made in a way which does not interfere with the use of {} to
delimit compound statements. (3/18)
sys/imio/imrename.x +
Added a new operator IMRENAME to IMIO, so that people won't have to
use the FIO rename to operate upon images, which is a violation of
the IMIO interface. (3/18)
pkg/cl/lexicon.c
pkg/cl/debug.c
pkg/cl/opcodes.c
pkg/cl/compile.c
pkg/cl/main.c
pkg/cl/builtin.c
pkg/cl/prcache.c
pkg/cl/exec.c
sys/gio/cursor/gtropenws.x
Added redirection for the standard graphics streams. The syntax is
as follows:
>(G|I|P)+ file # (create file)
or
>>(G|I|P)+ file # (append to file)
e.g., ">G file" to redirect STDGRAPH to "file", or ">GI file" to
redirect both STDGRAPH and STDIMAGE to file. Note that multiple
redirection arguments may be given on the command line. The >GI,
etc., is lexically a token, hence there must be no space after the >,
and the GIP must be upper case. (3/24)
pkg/cl/config.h
Increased the size of the stack and dictionary. (4/13)
pkg/cl/main.c
Fixed a bug in the calls to FDOPEN, dating back to the installation of
the graphics redirection code, above. (4/13)
unix/hlib/[dir]1mach.f
Added (commented-out) lines for the IEEE machine constants, determined
on the Sun-2. (4/15)
sys/osb/miiupk16.x
sys/osb/miiupk32.x
Would not write into output array if byte swapping was not used on the
host machine (not found until code was run on 68000 series machine).
(4/23)
-------------------
Package reorganization (add package tree NOAO) 26-27 Apr)
Detailed notes were not kept for this as hundreds of files were edited.
pkg/*
noao/*
Added a new directory NOAO off the root. Moved all the optical
astronomy packages from PKG to NOAO. (4/26)
lib/pkg/
lib/scr/
noao/lib/scr/
noao/lib/scr/stdlines/
Created a library noao/lib for the NOAO package. Moved all NOAO
related files from lib/pkg and lib/scr to the new library. All the
XTOOLS library global includes remain in lib/pkg. (4/26)
pkg/utilities
noao/astutil
Created a new package ASTUTIL in NOAO. Moved all the astronomy tasks
from the UTILITIES package to the new ASTUTIL package. (4/26)
pkg/dataio
noao/mtntape
Created a new package MTNTAPE in NOAO. Moved all the mountain tape
readers from DATAIO to the new MTNTAPE package. (4/26)
pkg/local -> noao/proto, iraf$local
Broke the old LOCAL package up into two packages PROTO (in NOAO) and
LOCAL. The PROTO package is essentially the old LOCAL package, but
the concept of the package has been changed to reflect its usage.
The new LOCAL package is in the directory iraf$local/tasks, i.e., in
the local (site dependent) directories. This is all set up as a
package in the root, ready for the individual sites to add their own
collection of packages. (4/26)
pkg/clpackage
lib/clpackage.hd
lib/root.hd
unix/hlib/clpackage.hd
The help directories were restructured to make it easier to tie
local or add-on packages into the help database. The old pkg$clpackage
directories were deleted and the files moved into hlib$. Entries for
the LOCAL and NOAO packages were added to hlib$clpackage.hd. To add
a new help tree to the help database, all the user need do is make an
entry in this file to for the root .hd of the new help tree, and run
mkhelpdb. (4/26)
unix/hlib/clpackage.men
unix/hlib/clpackage.cl
Removed the entries for all the NOAO packages. The 'page motd' entry
was moved to hlib$login.cl since the terminal type may not have been
set properly until after the user login.cl has been processed. This
also makes it possible for the user to omit the message of the day if
they wish. (4/27)
unix/hlib/mkiraf.csh
Changed all the USER, HOME, etc. entries to U_USER, U_HOME, etc.,
to avoid unintended editor script substitutions. Added an unalias
command to protect the user from their own folly if they have
aliased rm, etc. (4/27)
unix/hlib/zzsetenv.def
Moved all the NOAO logical directory definitions to noao$noao.cl.
Added SET defines for the NOAO, LOCAL, and SDAS directories. (4/27)
unix/hlib/login.cl
Changed all the USER, HOME, etc. entries to U_USER, U_HOME, etc., to
avoid unintended editor script substitutions. Moved the page motd
code in from clpackage.cl. (4/27)
pkg///*.hlp
noao///*.hlp
All manual pages were modified to give the package path in the
manual page header. (4/27)
pkg///*.men
noao///*.men
All "Revisions" entries were removed from the menu files, since this
is a temporary thing and it prevents the long form menu from matching
the multicolumn menu. In the future, any non-task manual pages should
be listed separately from the task list. (4/27)
sys/mkpkg
sys/imio/mkpkg
Added entries for libfort.a; must have forgotten to put these in when
the IMFORT package was added. (4/28)
unix/hlib/mkmlist.csh
Changed the bgrep to fgrep for increased portability. This utility is
not used often enough to make the use of bgrep worth the loss of
portability. (4/28)
pkg/images/tv/display/iisers.x
pkg/images/tv/cv/iism70/zclear.x
pkg/images/tv/cv/iism70/iiscursor.x
There were several cases of a 32 bit signed integer containing a 16 bit
unsigned integer value being assigned into a 16 bit signed integer
variable. This works on machines that do the assignment at runtime,
truncating the value in the process. It would cause a compile time
error on the SUN-3, which carries out the initialization at compile
time. Changed to [short = andi (intval, 177777B)], which forces a
runtime assignment. (4/28)
sys/gio/nspp/portlib/flush.f
sys/gio/nspp/portlib/flash[13].f
sys/gio/nsppkern/gktcancel.x
sys/gio/nsppkern/gktclear.x
sys/gio/nsppkern/gktclose.x
sys/gio/ncarutil/sysint/spps.f
Changed the name of the NSPP routine "flush" to "mcflsh" to avoid
library conflicts with the Fortran FLUSH. (4/28)
unix/hlib/libc/finfo.h
The fi_owner field of the finfo structure was not dimensioned
properly, causing the storage allocated for the structure to be
overrun. This was found in a call to pfileopen/filetime in the
CL; the finfo structure is allocated space on the stack, hence the
stack was being corrupted (found on the SUN). This is a fairly
serious bug which has been in the system for a long time. (4/28)
sys/gio/stdgraph/stgdrawch.x
The sgch_flush procedure was being called with a short argument (op/2)
when an integer argument was expected. (4/29)
sys/gio/stdgraph/stgrcur.x
The cursor read algorithm was enhanced by the addition of a general
pattern matching capability, used to improve the detection of botched
cursor reads, permitting automatic retries. The old algorithm was
fine for fixed size cursor strings, but did not work well for
variable length cursor value strings such as returned by Regis. (4/29)
pkg/cl/*
Starting with the new version of the CL from ST, did a diff of the
local changes to the CL since V2.2 (graphics redirection, {} in command
mode) and merged these into the ST version of the CL, which has been
worked on extensively since last fall, adding improved error handling,
a better logfile capability, eparam enhancements, parser improvements,
and so on. (5/2)
pkg/cl/gquery.c
Added (char *) declarations for strcpy() and index(). (5/2)
pkg/cl/cl.par
Moved the mode parameter to the end of the CL parameter list, where it
is for most parameter sets. Eparam does not print the query mode
params before the hidden ones (it should, like lparam, to indicate the
calling sequence), but since most pfiles are already ordered that way,
this is good enough for now.
Also changed the default values for EPINIT and EHINIT. Not using
standout mode in ehistory is simply a matter of preference; neither
the Cshell nor DCL uses standout mode either, and I find it distracting.
I never have understood what the noshowall option in eparam is good
for; I suspect this has something to do with SDAS not using hidden
parameters in the way they were designed to be used. With regular
IRAF tasks one always wants to see the hidden parameters too; most
of the parameters are generally hidden. (5/2)
[See the hlib$clpackage.cl mod below to personalize these parameters
for your site].
unix/hlib/login.cl
In the login.cl template, changed the call to `page' to a call to
`clear;type'. The "more" query in page() causes problems if the user
types ahead and the motd is longer than one screen. If the user does
not want the screen cleared, or does not want the motd at all, they
can now easily change the login action. (5/2)
pkg/cl/eparam.c
Some problems are apparent in using the new EPARAM. Some of these
were fixed before and must have gotten lost in the merge.
To the strings "PACKAGE = %s\n" and "TASK = %s\n" in the screen
repaint function, added a \r before the \n. This is necessary because
the Eparam screen is updated in raw mode, and no output processing
is done in raw mode, hence newlines are not converted to CRLF.
This causes the next line to be printed at the END of the last line,
one line down on the screen (!!).
In drawkey(), would clip the prompt string at the right margin of
the terminal only if the VALUE string was too long to fit in the
value field. Parameters with long prompt strings but short values
would wrap around, stepping on the next line.
unix/hlib/clpackage.cl
unix/hlib/login.cl
Deleted the ehinit, epinit environment definitions. Added commented
out cl parameter assignments to the login.cl file. (5/2)
NOTE - `editor' should remain an environment variable, rather than
being changed to a CL parameter, because the CL is not the only
task in the system which needs to know the user's editor preference.
The VOS facilities, e.g., DBMS, will use this variable too.
pkg/cl/cl.par
pkg/cl/config.h
pkg/cl/prcache.c
pkg/cl/modes.c
Added a new "active" CL parameter `szprcache' to the CL parameter file.
Changed NFGPROC in config.h to MAXSUBPROC, the maximum rather than
actual number of cached processes. Modified the prcache.c and modes.c
codes to dynamically change the size of the process cache when this
parameter is set. This was done because the optimal size of the process
cache depends upon the host operating system, upon whether the system
is single user or multiple user, upon on the per user quota, and so on.
The system manager can now set the default cache size to the optimum
value for each individual host, by editing hlib$clpackage.cl. (5/2)
pkg/cl/cl.par
unix/hlib/clpackage.cl
Changed the default value of the `lexmodes' parameter to yes in cl.par.
In clpackage.cl, added commented out assignments for all the CL
parameters for which a site might want to change the default values.
This makes it easy for sites to provide their favorite default values
for EHINIT, EPINIT, SZPRCACHE, KEEPLOG, etc. (5/2)
pkg/cl/cl.par
Changed the default value of `logfile' to "home$logfile.cl". The HOME
directory seems a better default for the logfile than UPARM, so that
the user won't forget that this potentially very large file is around,
and so that they can find it easier. (5/3)
unix/hlib/cllogout.cl
unix/hlib/clpackage.cl
Added a new task declaration $_logout = home$logout.cl in clpackage.cl.
Added code to hlib$cllogout.cl to call this task at logout time if a
logout.cl file is present in the user's home directory. (5/3)
cl syntax errors -
The new facility to help give the user some insight into syntax errors
is great, and I notice the reduce/reduce conflicts are gone from the
grammar now too.
pkg/cl/history.c
Eliminated the unused 4 spaces at the left in the logfile. (5/3)
pkg/cl/builtin.c
pkg/cl/eparam.c
pkg/cl/modes.c [EXPERIMENTAL]
pkg/cl/exec.c
pkg/cl/pfiles.c
pkg/cl/param.h
Added a "menu mode" to the CL. This was the easiest to implement of
the many EPARAM related changes recently discussed, which is the main
reason it was done now. The main revisions were: [1] moved pfilecopy
code from eparam.c to cleparam() in builtin.c, so that eparam() now
simply edits a pfile structure in memory (it should have been done
that way originally). Added a status return to eparam() to indicate
what type of exit was taken. Added M_MENU mode all over the place.
Added a conditional call to eparam() to execnewtask(), after the pfile
has been copied, the command line parameters processed into it, etc.
Modified effmode() to not query when a task is run in menu mode.
Added a new function taskmode() to modes.c to determine the effective
mode for a task.
Menu mode may be set only at the task or package level (setting menu
mode at the CL level is not useful since even simple tasks like DIR
will then cause eparam to be called). Menu mode is available only for
tasks which are called interactively, hence tasks called from within
scripts or in batch mode will not call eparam(). When menu mode is
disabled in this context, it is as if the mode were auto instead.
If menu mode is not asserted, everything behaves as it did before
there was such a thing as menu mode. Note that the task mode must
be set to "a" or "al" if setting the package mode to "m" or "ml" is
to have any effect. Setting the task mode to "m" or "ml" will always
work, of course.
When a task is executed in menu mode eparam() is called after the
argument list (if any) has been processed, and immediately before the
task is executed. Exiting eparam() with ctrl/z runs the task, exiting
with ctrl/c aborts everything and does not update the parameters.
To simply edit the parameters, one runs task EPARAM explicitly. (5/3)
pkg/cl/task.c
pkg/cl/param.c
pkg/cl/modes.c
Turned off the fancy context dependent checks to see if abbreviations
are to be permitted; abbreviations are now permitted in scripts etc.
if enabled by the CL parameter. Modified ltasksrch() to return a
match if an acceptable abbreviation is found in the current package,
without searching all the other loaded packages to see if the abbrev.
is unique. Eliminated the kludgy code in newltask() which would
directly fiddle with and later restore the CL parameter `abbrev...'
to disable abbreviations while checking for a redefined task.
This was done by adding an argument to ltaskfind(). (5/3)
pkg/cl/modes.c
LEARN mode is now enabled only for tasks which are called
interactively. Tasks called by scripts, etc., or in batch mode,
do not have their parameters learned. This should speed things
up a bit and avoid mysterious changes to parameter values when
tasks are called as subroutines in scripts. (5/3)
Note that a pfile will *always* be updated if a parameter is set in
an explicit assignment, or on eparam.
pkg/cl/param.c
Moved the call to parse_clmodes() to before, rather than after, the
value of the CL parameter is modified, in case the new value is
illegal and parse_clmodes aborts. (5/3)
pkg/cl/builtin.c (clpackage)
The PACKAGE builtin was not initializing the package descriptor
properly, causing the package parameter file to be misplaced and
preventing package parameters from being found in ambiguous (task,
package, cl) searches. 5/4)
pkg/cl/param.c (lookup_param)
pkg/cl/modes.c (effmode searches for parameters too)
Parameter searches now look in the package parameter file properly;
possibly this has never worked up until now. Ambiguous parameter
references of the form "=param" are resolved as follows (searching
for the named parameter):
Case 1: current task = `cl' (interactive)
- look in pfile of current package
- look in pfile of CL
Case 2: current task != `cl' (e.g., a compiled or script task)
- look in pfile of task
- look in pfile of package to which task belongs
- look in pfile of CL
Note that in case 2, the pfile to which the task belongs is NOT
necessarily the same as the current package. Indirection to a
package parameter can be achieved merely by omitting the parameter
declaration from the task's parameter set, although explicit
indirection is normally preferable to permit a command line override.
Note: If the current package redefines any CL parameters, this can
be confusing. The prime example of this is the "mode" parameter,
present in each task, each package, and in the CL. Interactively
typing "=mode" or "mode=value" will set the mode of the current
package, not the mode of the CL. Type "cl.mode=value" to set the
mode of the CL (or use eparam). (5/4)
unix/os/zfiotx.c
Modified the UNIX terminal driver to read the cursor in cooked rather
than raw mode, using a signal handler to catch interrupts and convert
them into ordinary character reads. It appears that raw mode is very
raw, i.e., even ctrl/s ctrl/q is turned off, which can cause data to
be lost or unsolicited characters to be seen. (5/4)
sys/fio/zfiott.x
sys/fio/finit.x
sys/clio/clopen.x
sys/etc/ttopen.x
lib/ttset.h
unix/hlib/ttset.h
unix/hlib/xnames.h,xnames.no_
unix/hlib/iraf.h
Added a new portable driver to the VOS and made it the standard terminal
driver for the high level code. If the iraf main is called by zmain
with the kernel terminal driver, clopen() maps the stdio streams to the
TT logical terminal driver. The TT driver is a place to implement any
VOS logical terminal functions; currently it is used only to support
monocase terminals, or dualcase terminals with the shift lock on (for
people who are fond of entering everything in upper case). The package
TTOPEN in ETC contains a direct terminal open routine (will be used
for screen editors implemented in subprocesses) plus TTSETI and TTSTATI
routines, used to set and query terminal driver options. FINIT was
modified to always load the TT driver as well as the TY driver.
The logical terminal driver currently supports two options:
ucasein Map input to lower case. A character may be
prefixed by ^ to enter an upper case character,
e.g., "PAGE ^MAKEFILE" -> "page Makefile".
To shift to upper case, "^+"; to shift back
to lower case, "^-", e.g., "PAGE ^+README" ->
"page README". The ^ character must be
doubled to be passed through. Note that ^
is also the history metacharacter, but there
are only so many keys to work with.
ucaseout Map all terminal output to upper case (may be
needed for some terminals).
Case mapping is disabled in raw mode. A user requested this capability
because they have a lot of old monocase terminals. It also should
be useful for people who like to work with the shift lock on. (5/5)
pkg/cl/builtin.c
pkg/system/stty.cl
pkg/system/stty.par -
Added a new builtin _stty, used to set/stat the VOS logical terminal
driver, and modified the system.stty task to use it (STTY should
probable be written as a builtin at some point). For example,
"stty ucasein" turns on monocase mode. STTY is now a procedure
script, hence the .par is gone. (5/5)
pkg/cl/eparam.c
sys/gio/cursor/rcursor.x
sys/gio/stdgraph/stgopenws.x,stgclws.x,stgdeact.x,stgreact.x
Minor changes to support `stty ucase...' modes, which require some
support in routines that do raw i/o to the terminal (case mapping,
etc., is disabled while in raw mode). (5/5)
miinelem.x +
miipksize.x +
miireadc.x +
miireadi.x +
miireads.x +
miiwritec.x +
miiwritei.x +
miiwrites.x +
Added the following routines to the MII package. The MIIPKSIZE routine
returns the size in chars of a packed MII array of the given MII type,
and obsoletes the old MIILEN function (miilen is still in the library,
however). The MIINELEM function returns the number of elements of the
given MII type in a packed array of the given size in chars. The read
and write routines are like the corresponding FIO routines, but are
used to read and write data stored externally in MII format. (5/7)
sys/etc/symtab/stsave.x
sys/etc/symtab/strestore.x
Modified these routines to use the new miiread/miiwrite facilities to
save the symbol table externally in a machine independent format.
This makes it possible to use the symbol table package as a kind of
mini-database facility, providing a quite efficient interface for a
certain class of applications. (5/8)
sys/gio/ncarutil/sysint/erprt77.f
In a couple of places, moved SAVE statements to before DATA statements
in the same procedure - required by Fortran standard. (5/8)
sys/fio/ztiott.x
lib/ttset.h
hlib/libc/ttset.h
pkg/system/stty.cl
pkg/cl/builtin.c
Added a new option "logio" to the VOS logical terminal driver. This
is used to log all i/o to the terminal in a text file home$ttyio.log.
ALL i/o is logged, including graphics and raw mode i/o. Control codes
are rendered into printable form for output to the logfile. This
feature is most useful as a debugging tool when trying to figure out
why the system is not talking to a new terminal correctly. To turn
logging on, type `stty logio' in the CL. To turn it off, type
`stty clear logio'. The data passed in each ZGETTT or ZPUTTT call
is logged as one line of text; newlines in the data are logged as \n.
Long lines are broken, with the continuation line indented 4 spaces.
(5/9)
sys/gio/gki/gkisetwcs.x
Modified to always write a copy of the SETWCS instruction to the output
metacode stream, even if writing to a standard graphics stream. (5/12)
sys/fio/fexbuf.x
sys/fio/open.x
sys/fio/fgetfd.x
unix/hlib/iraf.h
Modified FIO to support the SPOOL_FILE file type. This type of binary
file spools data in a buffer in memory. Typically, a routine writes to
the spool file, the spool file is rewound, and another program reads
the data back out, after which the data may be cancelled and the
process repeated. Spool files have long been in use in by GIO; this
revision makes the facility available to applications software. (5/12)
unix/os/zfiomt.c
Changed value of the count field in the mtop structure for the rewind
function from 0 to 1. (5/14)
unix/boot/spp/rpp/(baderr.[rf],synerr.[rf])
vms/boot/spp/rpp/(baderr.[rf],synerr.[rf])
These routines are called with obsolete Hollerith character strings,
e.g., 5Habcde, in the argument list. Sometime ago we changed the
declarations for the Hollerith arguments to character*(*), thinking
that that was the correct specification. Both the UNIX and VMS
Fortran compilers, however, implement Hollerith as a single address
in the argument list pointing to a null delimited character string
(like a C string). Character*(*) is something quite different on
VMS, hence the XC/rpp error messages were getting garbled. Changed
the declaration for the Hollerith character string back to INTEGER,
which causes the pointer to be passed on to the low level interface
procedure correctly. (5/14)
sys/fio/fdevblk.x
Modified to accept any pathname as input, not just directory pathnames.
The directory prefix is extracted and a temporary file created to
determine the device block size, as before. If an error occurs a
special error message is now generated, instead of the former message
"cannot open file (zbk12345)", which was rather cryptic. (5/14)
sys/fio/fseti.x
In the case F_CANCEL, added the statement `boffset[fd] = 0'. This
ensures that FIO will not under any circumstances consider the contents
of the buffer to be valid. Also added LNOTE/LSEEK calls to preserve
the file offset over the cancel operation. Formerly the file offset
was set to be beginning of the buffer by the cancel. Preserving the
file offset means that a cancel when reading from a blocked file is
harmless but will pick up any recent changes to the file if shared.
Modifications to a file can likewise be cancelled provided the FIO
buffer has not been flushed in the interim. (5/19)
unix/hlib/stripper
unix/hlib/stripall
No longer deletes the .hd (help directory) files. (5/16)
sys/fio/fioclean.x
This routine, which cleans up during error recovery, deletes any
partially written new files if an error occurs. This would cause a
misleading message when the file being deleted was a special device.
Added a check for special devices. (5/19)
sys/fio/fseti.x
When the file type is set to SPOOL_FILE, the FBLKSIZE parameter is now
also set to zero to indicate that the file is a streaming file. Spool
files are considered to be streaming binary files. (5/20)
sys/fio/fwtacc.x
The sleep time of 60 seconds when waiting for a file to become
accessible was too long. Changed to a short interval which gradually
increases to a long interval. (5/23)
pkg/plot/implot.keys
pkg/plot/implot.x
Moved the implot.keys file to lib$scr/implot.key, modified the implot.x
file accordingly. (5/23)
lib/imhdr.h
lib/imio.h
sys/imio/*
sys/imio/iki/ + IKI Image Kernel Interface
sys/imio/iki/oif + OIF "old iraf format" kernel
sys/imio/iki/stf + STF "space telescope format" kernel
Installed the newly revised IMIO interface, which was developed outside
the system without logging the revisions due to the extensive nature of
the revisions required. IMIO has been restructured to isolate all
knowledge of the physical image format into a new interface called the
image kernel interface (IKI). The IKI in turn can support any number
of image kernels, each of which provides an interface to a specific
host image format. These image kernels function very much like the
FIO device drivers and can even be dynamically loaded like the FIO
device drivers, to do IMIO to a device for which the full system is
not configured (linked).
Two image formats are supported by the current interface, i.e., the
old IRAF format and the STScI GEIS format (FITS group format images).
IMIO automatically determines the image type at image open time.
A new environment variable IMTYPE determines the default type image
when a new image is created, but this may be overridden by simply
including the filename extension in the image name.
A number of useful extensions were made to the semantics associated
with the use of the IMDIR environent variable. All IMIO datafiles
now have filename extensions by default. Existing code should require
no changes to use the new interface, only relinking. Existing images
can be read without reformatting. The new IMIO is documented more
fully elsewhere. (5/23)
sys/imio/db/idb.h
sys/imio/db/idbfind.x
The IDB interface can now work with either a fixed record size user
area (80 char cards plus newline) or a variable length record size
as before. Keyword searches will be faster if fixed size records are
used. The interface automatically senses the record type at image
open time. When searching for a keyword, IDB will now reference the
FIRST keyword matched, rather than the last as before. (5/23)
sys/fio/close.x
For the SPOOL_FILE case, replaced the call to frmbfs() by a call to
frtnfd(), to return the file descriptor allocated by open(). (5/24)
pkg/images/iminfo/imheader.x
Modified to print group information if multigroup image, e.g.,
[group/gcount] in section name. Also replaced file template expansion
by image template expansion to permit use of [] in image names. (5/24)
sys/fio/fcopy.x
Added some minimum copy buffer size logic to avoid copy failure when
copying a file for which fstati(fd,F_BUFSIZE) returns zero for some
reason. (5/24)
sys/fio/fntgfn.x
Made a couple of major extensions to the file template code to permit
the use of filename templates to generate the names of output files.
Also debugged the backslash escape logic in this code so that pattern
metacharacters (e.g., []) can be escaped in templates.
The new features are: [1] new filename construction by string
concatenation, and [2] filename editing by string substitution.
Some examples follow.
n_ // *.x Prepend `n_' to all .x files
nite1.* // .flat Append `.flat' to all nite1.* files
*.c // _X_ // *.h E.g., `builtin.c_X_bkg.h' (real useful, huh)
*%%_1%.imh Append `_1' to the ROOT name of all .imh
files, e.g., `pix.imh' -> `pix_1.imh'
*.%x%gx Change extn from `.x' to `.gx'
As before, more complex templates can be built up by forming a list
of patterns such as those shown, delimited by commas. The @listfile
notation may be used to read list files. The number of concatenatable
fields and edit operations is arbitrary and is currently set to 8
concatenatable fields and 8 string substitutions per list element.
When concatenating successive elements from different lists, the length
of the output list is the length of the shortest input lists, hence the
input lists need not all be the same length.
Added a new entry point FNTRFNB to the package, used to randomly read
the file list, unlike FNTGFNB which reads the list sequentially. (5/26)
sys/fmtio/patmatch.x
Added an indexing feature to support the FNTGFN string substitution
capability discussed above. The character % may be embedded in
patterns to index the marked fields of the matched string. Note that
this is not trivial as the index depends upon the data being matched,
e.g., * may expand to any number of characters, and fields may be
anchored either at the left or the right (hence this feature had to
be built directly into the pattern matching code). Inclusion of the
% in patterns does not affect the match, i.e., the % is not matched
against anything. At match time, the pattern matching engine saves
the current character index in the encoded pattern buffer whenever
the INDEX (=%) instruction is encountered in the pattern. The index
values may be recalled after a successful match with the new PATINDEX
function. (5/26)
pkg/xtools/imt.x -
sys/imio/imt.x +
Deleted the old image template package from XTOOLS and installed the
new template code in IMIO. The new code uses the revised filename
template and pattern matching code, supports the expanded image name
syntax, and supports metacharacter escapes that actually work. (5/27)
sys/imio/imgclust.x
sys/imio/imgimage.x
sys/imio/imgsect.x
Added three new procedures to IMIO, to be used to parse image
specifications. These may be called to get the cluster name, the
image name (including the cluster index if any), or the image section.
These routines call IMPARSE which does the real work, but are more
convenient to use in applications programs. (5/27)
Sample imspec: pix[3][*,-*]
procedure returns
imgcluster (imspec, cluster, maxch) pix
imgimage (imspec, image, maxch) pix[3]
imgsection (imspec, section, maxch) [*,-*]
sys/fmtio/strdic.x
Now ignores whitespace at the beginning of the input keyword. (5/27)
unix/os/zfiotx.c
It turns out that read-write mode is desirable for text files in the
IKI/STF kernel, so I made it legal in the UNIX kernel (it is also
legal in the VMS kernel). This mode was not legal under FOPEN in old
UNIX systems, but probably that is a thing of the past and even then
one could have gotten around it by modifying the UNIX FOPEN. Read
write access is now considered legal for text files; a seek or flush
is required when changing modes to synchronize the i/o system.
Currently RW mode is used only for file locking purposes and use of
this mode for i/o is not recommended. (5/27)
pkg/cl/lexicon.c
The escape sequence handler in this code would map \c into c,
preventing the \ from being passed on to the code that needs it.
It now maps \c into c if c is one of the characters "&;=+-\"'\\#><()|",
i.e., the token delimiters recognized by the lexical analyzer,
otherwise \c is mapped to \c. (5/28)
pkg/cl/history.c
The escape sequence handler in the history mechanism, which works over
the input text even before it gets to the lexical analyzer, would strip
the \ from \c when c was one of the characters ^$*. For example, \$
would be converted to $, preventing the escape from reaching the lower
level software. Modified to recognize only \^, mapping it to ^,
since ^ is the only real history metacharacter. (5/28)
sys/imio/immaky.x
Would name the new image when the old was intended, in the history
message. (5/28)
sys/fio/fcopy.x
Modified to close the input file if the call to fmkcopy fails. (5/29)
sys/fio/fmkcopy.x
Was issusing the open-failure message if the mkcopy failed. Added a
special error message for fmkcopy. (5/29)
unix/hlib/gripes.cl
vms/hlib/gripes.cl
Now uses USERID instead of HOME to record who the gripe is from. (5/29)
pkg/cl/grammar.h
pkg/cl/param.c
The .p_length parameter attribute is now treated properly. (5/29)
pkg/cl/unop.c
pkg/cl/operand.h
Added a new intrinsic function STRLEN. (5/29)
pkg/cl/param.c
In validparamget(), revised the `parameter is undefined' message to
read `the requested field of parameter .. is undefined', since I
thought the parameter itself could not be found when I saw the first
message. (5/29)
pkg/system/lprint.x
pkg/system/page.x
pkg/system/type.x
pkg/system/help/houtput.x
In a number of calls to ttyputline(), the argument map_cc was being
passed as a boolean when an integer was expected. (5/29)
pkg/cl/prcache.c
pkg/cl/builtin.c
pkg/cl/exec.c
pkg/cl/task.h
Added some new code to clpack(), restor(), the process cache, etc.,
to automatically flush all processes connected since a package was
loaded, when the package exits. These idle processes consume
resources needlessly and it is best to free up the process slot
immediately, just as we already free dictionary space, environment
name slots, etc. (5/29)
(Ongoing testing and development of the IKI/STF interface, not recorded here
(since this is a new interface. It is clear that bug fixes and further
(development will go on for some time - this is a complex interface).
vms/boot/spp/xc.c
vms/boot/spp/xc.com
vms/boot/spp/mkpkg
vms/boot/spp/mkpkg.com
Installed revised version of VMS/XC from ST. (6/1)
vms/hlib/irafemacs.com
Installed new version from ST. (6/1)
vms/dev/hosts
Removed quotes around .exe file names in VMS node entries. (6/1)
vms/hlib/irafuser.com
Changed a few of the job logicals to process ones to save job table
space; they don't all need to be job logicals. (6/1)
pkg/system/doc/directory.hlp
Fixed typo, \fb -> \fB. (6/1)
vms/as/README
vms/as/cstr.s +
Added assembler optimized versions of C string ops. (6/1)
sys/libc/mkpkg
Revised to use as$cstr.s if available. (6/1)
vms/boot/mkpkg/mkpkg.hlp
unix/boot/mkpkg/mkpkg.hlp
Fixed typo, \fmkpkg -> \fBmkpkg. (6/1)
math/mathgen/mkpkg
Added a `$purge lib$' at the end of mathgen:. (6/1)
vms/boot/bootlib/dcl.c
Installed revised version from ST. (6/1)
vms/boot/bootlib/vfn2osfn.c
unix/boot/bootlib/vfn2osfn.c
Added check to return the null string if an error occurs mapping the
file; formerly it would return the most recent file successfully
mapped. (6/1)
pkg/language/*
New manual pages added for logging, putlog task; others were modified
to reflect the recent changes in the CL. (6/1)
vms/os/mkpkg
vms/os/zfiopl.c
vms/os/mcsub.c +
Installed the VMS NCAR/MCVAX version of zfiopl (the plotter interface)
from ST. (6/1)
vms/os/rms.c
Assorted epN() changed to _epN(). (6/1)
vms/os/str.c
Minor cosmetic changes. (6/1)
vms/os/vms.h
Size parameters for zfiopl were changed. (6/1)
vms/os/zxwhen.c
Modifications to permit traceback output to be spooled in a file for
debugging purposes. Default is no traceback. (6/1)
vms/os/zmain.c
Installed the ST version; minor changes, e.g., correcting erroneous
comments. (6/1)
vms/os/net/decnet.c
Minor fix in a comment. (6/1)
TODO: Compile both for decnet and tcp/ip; runtime switch depending
upon node.
(System moved to VMS on 6/1. Merged all recent hlib,libc revisions into the
(VMS hlib,libc. System bootstrapped successfully on 6/2, started full sysgen
(on 6/2.
vms/hlib/libc/xnames.h,.no_
vms/hlib/libc/xnames.no_
unix/hlib/libc/xnames.h
unix/hlib/libc/xnames.no_
Added entry for ENVINIT, called by the bootlib routines on VMS. (6/2)
sys/gio/gclose.x
Added a declaration for and(). (6/3)
vms/hlib/lib/iraf.h [DISCUSSION]
There was a note in the ST notes file concerning the removal of the
IRAF,HOST,TMP pathnames from the C <iraf.h>, which gets installed in
sys$library. Of course it would be nice if the logical names always
got propagated to subprocesses and this file were never referenced,
in which case it would not matter what values were put in <iraf.h>.
At present, however, this is not the case and the file is getting
referenced at runtime to resolve pathnames. This is evident when
there are two versions of IRAF in the system, as the operation of
mkpkg is affected, of at least the operation of subprocesses called
by mkpkg. The ZGTENV routine only reads <iraf.h> if logical name
resolution fails. If we can figure out why it fails then we can do
away with the pathnames, but for the moment I have to leave them in
to ensure that IRAF programs know where the IRAF runtime files live.
More information on this item - we just discovered that the quota
on the size of the job table can cause logical name propagation to
subprocesses to fail. Perhaps this is the source of the problems
we have experienced in the past. I still choose to leave the
pathnames in <iraf.h>, since it does little to impress the customer
with the reliability of our software when something fundamental like
mkpkg fails due to a quota problem on the job table. The fact is
that VMS does not reliably propagate logical names to subprocesses,
so we need a backup mechanism to ensure reliable operation. (6/3)
vms/hlib/mkiraf.com
Added a couple queries to give the user more control over the operation
of MKIRAF. The first query asks if the uparm files are to be deleted.
The second asks for the name of the terminal; if nothing is entered
it picks a default and prints it on the terminal. Deleted the code
to delete the old login.cl file; this is not necessary on VMS since
it has file versions, and mkiraf.com is a very VMS dependent utility.
(6/3)
sys/fio/fntgfn.x
Modified to perform string concatenation only on the root of the
filename, i.e., rather than after the filename extension. Hence,
the template `*.imh // _2' produces filenames `*_2.imh'. The
extension is defined to be the first . delimited field encountered
in any of the strings being concatenated. If there are multiple
such fields, the first such encountered is the extension of the
output filename. (6/4)
vms/os/zopcpr.c
Changed the value of WSEXTENT for the subprocess from 1000 to 4096
pages. This seems harmless since all it does is allow the system
to give the process that much working set if the process needs it
and the load on the system permits it. (6/4)
dev/cacheg.dat
dev/cachet.dat
These files were updated to pick up any recent changes in the graphcap
and termcap entries for the cached devices. (6/4)
sys/fio/ffault.x
Modified to return the number of chars available to be read in the
buffer after the iop, rather than in the entire buffer. This causes
ffault to return EOF when faulting at a seek offset beyond EOF on a
blocked binary file. (6/4)
lib/evexpr.h
sys/fmtio/evexpr.y
An awkward feature of the way operand structure storage is mangaged
led to a "memory corrupted" bug in HEDIT. Reworked the EVEXPR code
to do the operand structure storage management in a set of procedures,
rather than by direct manipulation of the structure in the code.
EVEXPR no longer tries to reuse the same output operand structure,
it now allocates a new one on every call, leaving it up to the caller
to deallocate the operand structure returned. All allocation and
deallocation of string storage for string operands is now handled by
the operand structure procedures. (6/6)
sys/fmtio/mkpkg
unix/hlib/irafuser.csh
Set up the FMTIO mkpkg to automatically run xyacc to remake evexpr.x
from evexpr.y if out out date, so that I don't have to remember what
command to enter (only on UNIX hosts). (6/6)
images/imutil/hedit.x
images/iminfo/hselect.x
Modified as necessary for recent EVEXPR revisions. As far as I know,
these are the only programs currently using EVEXPR. This fixed the
HEDIT "memory corrupted" bug, which was due to having two operand
structures pointing to the same string buffer which was therefore
being deallocated twice. (6/6)
sys/fio/fnullfile.x+
sys/fio/protect.x
sys/fio/open.x
sys/fio/frename.x
sys/fio/falloc.x
sys/fio/delete.x
sys/imio/iki/ikimkfn.x
Added a boolean function fnullfile() to FIO, called to test if the
named file is the nullfile. Modified the listed procedures to use
the new primitive. The new procedure was added as a simple string
equality test for "dev$null" is not a reliable test, i.e., the file
name may have been mapped before being passed to the procedure which
tests for the nullfile. (6/7)
sys/fio/fntgfn.x
The first version of the filename template package would consider
the first dot delimited field encountered to be the filename extension.
This no longer seems the best choice when dot-fields are used within
a filename for other purposes. FNT was changed so that only alpha
dot fields are considered to be extensions. Hence, "pix.01 // .44" ->
"pix.01.44", and "pix.01.imh // ".44" -> "pix.01.44.imh". (6/7)
sys/imio/iki/ikirename.x
sys/imio/iki/ikicopy.x
If the old and new names are the same, now does nothing. Also fixed
some bugs in the logic for generating the root and extn fields of the
new image name. (6/7)
sys/imio/iki/oif/oifrename.x
Added code to rename pixel file as well as header file. This has to
be done as the pixel file may reside in the same directory as the
header file, and the rename operation may move the header to a
different directory. (6/7)
vms/boot/mkpkg/*
Merged in changes from ST. These were minor - XC called as a
subroutine, and a bug fix in one of the $if's. (6/7)
vms/boot/mkpkg/tok.c
Changed SZ_LINE to SZ_PBBUF in getargs(). (6/7)
unix/boot/mkpkg/tok.c
unix/boot/mkpkg/host.c
Merged in recent additions to vms/mkpkg so that these high level files
can be identical on the two systems. (6/7)
vms/os/zopcpr.c
Installed a bug fix to increase the termination mailbox buffer quota
to hopefully fix the RWAST/RWMBX hung process problem. (6/7)
vms/boot/bootlib/dcl.c
Modified to return OK only if the VMS status received from the oscmd
is 1. Return status is thus OK|ERR, which is what the calling code
(mkpkg) expects. (6/7)
vms/boot/spp/xc.c
Now checks for the existence of files before trying to compile them.
(6/7)
sys/tty/ttysubi.x
Was not handling the format "%+" properly. This would cause the
VT52 termcap entry to fail. (6/7)
pkg/images/imarith/t_imarith.x
Checked if a change recently noted had gotten installed. Cleaned up
the code slightly but did not make any functional changes. (6/7)
dev/hosts [VMS]
On our clustered VMS system, set up the satellite 750 vela as an
alias for the central host draco. This makes the networking software
work with the cluster. (6/7)
pkg/cl/history.c
In putlog(), modified to prevent overflow of the output line buffer.
Also added a crude facility to break long output lines into multiple
lines with backslash escapes. Should be redone sometime to break lines
at whitespace, indent continuation, etc., using a VOS `putlongline'
procedure (there is already a getlongline). (6/7)
sys/fio/osfnlock.x
Modified osfn_pkfname() to strip all backslash escapes from the final
output OS filename. Most of the code leaves the \ in to protect the
escaped character from the transformations to follow, hence the \
often make it all the way down to this last routine. With this last
revision, \$, \[, etc. now work in the limited tests thus far run on
VMS/IRAF. (6/8)
sys/fio/fntgfn.x
Now that \ can appear harmlessly in filenames during translation,
modified the template code to leave the \ in in more cases. This
makes it possible to use OS pathnames in templates in many cases,
provided the metacharacters are escaped. By the way, in the process
of doing the recent filename template modifications the template
code was modified to recognize / as well as $ as a directory
delimiter, hence templates such as `xx/*.h' are now legal. (6/8)
sys/fio/fchdir.x
Fixed a comment, deleted a commented out block of code. (6/8)
sys/fio/diropen.x
Added an errchk for syserrs(). Would continue on if could not open
directory, calling fstati on an unitialized file descriptor, leading
to a segmentation violation in the case which led to discovery of the
bug. (6/8)
sys/fio/unread.x
sys/fio/ungetline.x
sys/fio/rename.x
sys/fio/fredir.x
Due to the above errchk bug, looked for the same problem in the other
FIO files and made minor changes to the files listed. (6/8)
sys/fio/fdirname.x
On VMS, if fed the name of a subdirectory `subdir' would return
`subdir]'. Modified to return the concatenatable virtual path of
the given directory operand. (6/8)
pkg/system/directory.x
pkg/system/directory.par [NEW DIRECTORY PROGRAM!]
pkg/system/isdir.x
Wrote a completely new directory lister program to replace the horrible
old thing we have been stuck with the last few years. The new program
only does the simple (most commonly used) things, but at least it works
correctly. Can now list subdirectories, or any directory by pathname,
also logical directories, directories on remote nodes, files by
template, etc. Prints "no files found" rather than echoing back the
unmatched filename. The syntax has been changed to be more terse, and
a number of new options have been added. Example:
dir *.x l+ (long form listing)
The old "options" parameter is gone. New parameters allow
specification of number of columns, whether or not to sort (not
needed on VMS probably), max chars of each filename to print (useful
when directory contains a few very long filenames), option to show
hidden files, etc. The new program is also more efficient and faster
than the old one. (6/8)
sys/fio/vfnmap.x
In vfnunmap(), modified the code which deletes a trailing . (null
filename extension) to not do so if the previous character was also
a ., to avoid mapping `..' into `.'. (6/8)
lib/protect.h +
sys/fio/protect.x
Reworked the fio.protect function so that it can be used to set,
remove, or query file protection, using the action codes defined
in the new file <protect.h>. Smartened up the code to know about
directory files; formerly, an attempt to query protection on a
subdirectory would cause a "nonexistent file" error due to the
.dir extension in VMS. (6/9)
sys/imio/iki/oif/oifclose.x
sys/imio/iki/oif/oifdelete.x
pkg/system/directory.x
pkg/system/unprotect.x
pkg/system/protect.x
Modified to use <protect.h>. (6/9)
sys/fmtio/patmatch.x
The metacharacters ^ and $, when found inside a pattern, were not
being encoded as regular characters properly. This would cause a
"cannot happen" message later when trying to apply the encoded
pattern. (6/9)
sys/imio/iki/oifmkpfn.x
Fixed an interesting bug in the make-pixfile-filename routine.
The root image name was being tacked onto the OS directory name
where the pixfile would go. FIO does not translate filenames
that have an osdir prefix, so the result was that filenames were
being produced which were illegal on the host system (VMS).
This is kind of subtle - have to be on the watch for this sort
of bug in the future. (6/9)
sys/imio/db/imget*.x
Added errchk declarations for the lower level imget routine.
Would cause a floating point exception when attempting to get the
value of a nonexistent parameter, e.g., when attempting to convert
an unitialized double to a real. (6/9)
vms/hlib/install.com
vms/hlib/installr.com
Made entries for all iraf executables in the script, commenting out
all but those we wish to have actually installed (hope the install
utility accepts the comments). (6/10)
dev/pix.hhh [VMS]
Installed the real pix.hhh header template file in the DEV directory
on vms/iraf. This is a funny format file peculiar to VMS, hence if
DEV is restored from a TAR tape the file type will be lost. The
template file is required to create new STF header files in the
correct format. I also read in the SCIDAT test image files and
tried out the STF kernel with them for the first time in VMS/IRAF
(the software was all developed on UNIX). Amazingly, it worked
the first time, at least as far as I can tell. (6/10)
unix/boot/mkpkg/pkg.c
Modified to accept either "-f stdin" or "-f STDIN". (6/11)
unix/boot/mkpkg/char.c
In getcmd(), $ would delimit the command even when used as a character
within an identifier. Modified to recognize $ as the command delimiter
only when it occurs as the first character in a new token. This fixes
the problem of $ characters in filenames in $SET macros. (6/11)
unix/boot/mkpkg/pkg.c
unix/boot/mkpkg/tok.c
The $include directive was not working properly when called from within
a module. The module name was being passed into the context of the
include file, causing mkpkg to search the include file for the named
module and then abort with a module not found message. Modified the
push_context() function to set the module name to the null string
(disabling the module search) if the special module name "BOF" is
given. (6/11)
sys/imio/iki/oif/oifdelete.x
Now checks if the pixel file exists before trying to delete it.
No warning message is issued if there is no pixel file, only if the
pixel file exists but cannot be deleted. An image opened new-image
or new-copy and then closed without writing any pixels will not have
a pixel file. (6/11)
pkg/images/doc/imrename.hlp +
pkg/images/images.cl
pkg/images/images.hd
pkg/images/x_images.x
pkg/images/images.men
pkg/images/imutil/mkpkg
pkg/images/imutil/t_imrename.x +
pkg/images/imrename.par +
Added a new task IMRENAME to the IMAGES package. (6/11)
vms/boot/mkpkg/pkg.c
vms/boot/mkpkg/tok.c
Installed the new versions of these files from unix/iraf with the
bug fixes. (6/11)
unix/boot/bootlib/osgetenv.c
vms/boot/bootlib/osgetenv.c
One of our users edited the pathnames in the <iraf.h> file, rendering
the file unreadable by ZGTENV. Since VMS logical name passing was
also failing (probably due to insufficient quota on the job table)
OSGETENV would fail when MKPKG tried to start up, making it impossible
to relink the system. This showed up a bug in osgetenv - the zgtenv
failure would lead to a segmentation violation since osgetenv calls
itself recursively without checking for a NULL function value.
Rewrote osgetenv to read the values of IRAF and HOST into static
storage when first called, printing an error message if the zgtenv
call fails. (6/12)
vms/hlib/mkiraf.com
Since IRAF can now accept \$, modified mkiraf to escape $ in device
names in the login.cl. (6/12)
vms/hlib/irafuser.com
For testing purposes, modified the irafuser.com to define our local
IRAFDISK with the $ in the name. This $ CANNOT be escaped since the
logical name is also used directly at the VMS level. It does not
need to be escaped for the high level code since all high level
references resolve into references to IRAFDISK itself, not its value.
The $ in IRAFTMP, however, must be escaped since IRAF fetches the
value of this variable, but it is not used by the VMS level code.
This inconsistency is bound to cause problems but I do not have time
to resolve it just now. (6/12)
[Snapshot of system sent to ST]
----------------------------------
NOTE regarding $-in-osdir problem: ideally, one should just be able
to include $ in OS directory names defined in the environment without
having to worry about it. There appear to be several possible ways
to achieve this:
[1] Make the user or system manager escape the $, e.g., in
irafuser.com, login.cl, and when SET defs are entered
interactively. This is the current solution.
[2] Escape the $ when the entry is made in the environment table.
This is unacceptable because the env. is a general purpose
facility and is not used just for filenames.
[3] During VFN translation when an ldir is substituted, call zfxdir
to check if the substitution string is an osdir. This is bad
because of the runtime expense in recursive logical directory
expansion.
[4] Add a new function ENVGFN to the environment package, and use
this in filename translation instead of ENVGETS. The first
time an ldir is fetched, envgfn would check it the value is
an osdir and set a flag one way or the other. Thereafter,
the expense and semantics are the same as for envgets.
Scheme 4 appears to be the best, since there is no efficiency penalty
and no dangerous modifications to the FIO code are required. Some
modifications to the ENV package are necessary; these should be done
when the RESET function is added. Since the environment facilities
are critical to the functioning of the system, there is not sufficient
time before the next release to test such ENV modifications, hence
these revisions will have to be postponed to the next version of the
system.
unix/boot/mkpkg/pkg.c
In parse_modname(), added a break after the call to parse_fname,
and modified the call to parse_fname to receive the entire pathname.
(6/12)
unix/boot/bootlib/oschdir.c
Modified to accept rooted directory references as well as subdirectory
references. (6/12)
unix/boot/bootlib/osgetenv.c
The system directory SYS was somehow missing from the list of builtin
logical directory names. (6/12)
unix/boot/mkpkg/pkg.c
unix/boot/mkpkg/main.c
unix/boot/mkpkg/mkpkg.h
Modified mkpkg slightly (mostly in push_context and pop_context) to
remove the restriction that mkpkg modules in the call tree have to
reside physically in subdirectories. Hence, calls such as the
following are now permitted:
$call update@pkg$cl/mkpkg
A call such as this will return to the caller's context in the usual
way. This feature has not been extensively tested since the system
mkpkg tree matches the directory tree, but basic tests were run
without any problems. (6/12)
[Released VMS/IRAF V2.3 as the standard system on the NOAO 8600 on 6/13]
-------------------------
vms/hlib/install.com
vms/hlib/installr.com
Changed the ".e" extension to ".exe" for VMS. (6/13)
vms/hlib/zzsetenv.def
vms/hlib/sdas.cl +
Added a stubbed out sdas.cl to print "not yet available" rather than
abort because it cannot find the file. (6/13)
vms/boot/bootlib/oschdir.c
vms/boot/bootlib/osgetenv.c
Installed the new versions from unix/iraf. (6/13)
vms/boot/mkpkg/mkpkg.h
vms/boot/mkpkg/main.c
vms/boot/mkpkg/pkg.c
Installed the new versions from unix/iraf. (6/13)
vms/boot/mkpkg/mkpkg
Set up a new mkpkg driver file to separate the relink and install
operations. Also includes a "mkpkg debug" entry. (6/13)
sys/fio/vfntrans.x
In vfn_decode, added code to escape any $ in the OS filename being
decoded. This allows host filenames containing $ to be read from
a directory and passed back to the system successfully. (6/13)
vms/iraf - XC compiler [NOTE]
Just logging a note on the VMS version of XC. This version of XC
preprocesses and then compiles each .x file in the argument list
and then moves on to the next file. The UNIX XC, on the other hand,
converts all the x. to .f and then calls the Fortran compiler to
compile all the .f. I don't know why the same thing is not done for
VMS; the VMS Fortran compiler is much faster when called to compile
several files at once. This would have a much more significant impact
on performance than the business of making XC callable as a subroutine.
(6/13)
sys/imio/iki/ikiaccess.x
sys/imio/iki/ikidelete.x
Added code to check for the null image (dev$null). This was the
source of the "Cannot open image (dev$null)" bin in RFITS. (6/13)
vms/os/zfinfo.c
When called to get info on a directory with a name ending in ], would
fail if there was a ".;N" file in the named directory. This was
because the sys$search would find the .; file which is the filename
you get if you sys$parse a [] directory name (this probably has
something to do with why these files get created in the first place).
Added code to skip the sys$search if sys$parse returns zero length
root and extn fields. (6/13)
vms/os/zopdir.c
In ZGFDIR, modified to return the filename ".;" rather than the null
string, when a .;N file is encountered in a directory. A `dir all+'
is still required to actually see the file. (6/13)
dev/cacheg.dat [UNIX]
dev/cachet.dat
Updated the cache files on unix. Evidently these were only updated on
VMS earlier. (6/13)
vms/hlib/irafuser.com
The \$ in IRAFTMP caused a problem after all, since the damn thing is
used in a VMS pathname in mkiraf.com. As a temporary workaround,
added a logical IRAFTEMP which is just the same thing without the
escape. (6/13)
sys/fio/fioclean.x
The "stddev = ..." statement was being executed before the FP==NULL
test, causing a segmentation violation on the SUN (but not on the vaxes
for some reason). Moved it to after the test, to just before it is
used. (6/14)
sys/fio/fntgfn.x
In fntrfnb(), added a check for an index < 1 as well as > nfiles.
(6/14)
sys/clio/clcmdw.x +
Added a synchronous version of CLCMD. (6/14)
pkg/system/page.x
pkg/system/page.par
pkg/system/doc/page.hlp
Extensively rewrote the PAGE task to improve the interactive aspect of
the user interface. The program is now keystroke driven in raw mode
and the old cl boolean parameter "more" is gone. Type space bar or
"f" to go to the next page, return to display the next line, N or P
to go to the next or previous file in the list, ? for help, e to edit
the current file, q or ctrl/c to quit, etc. (6/14)
pkg/system/help/houtput.x
pkg/system/help/nomore.x -
pkg/system/help.par
Added keystroke driven page control similar to that used in PAGE to
the HELP program. (6/15)
pkg/cl/builtin.c
In the clclear() function, added a call to c_fseti to disable RAW
mode, just in case one of the new raw mode tasks bombs out leaving
the terminal in raw mode. (6/15)
unix/hlib/newsfile
vms/hlib/newsfile
Made an entry noting the revisions to directory, page, and help.
(6/15)
sys/osb/miireadi.x
sys/osb/miireads.x
Added an "nints = EOF" at the top; this variable was not getting
initialized when EOF was read on the input file, causing the function
to fail to return EOF. (6/17)
sys/gio/sgikern/*
The SGI kernel has been extended to support raster devices. The kernel
will now generate either SGK metacode output or bitmaps. All that
the user need add to interface either type of device is a graphcap
entry and a host program to process the metacode file or bitmap to
the device. On some systems host facilities will already be provided
for writing bitmap files to raster devices (e.g., UNIX). This kernel
provides an attractive alternative to the NCAR/MCVAX kludge for
interfacing new devices. (6/17)
pkg/plot/plot.cl
pkg/plot/sgikern.par +
pkg/plot/sgidecode.par +
pkg/plot/plot.hd
pkg/plot/plot.men
pkg/plot/doc/sgikern.hlp +
pkg/plot/doc/sgidecode.hlp +
Installed the new tasks SGIKERN and SGIDECODE in the plot package.
(6/17)
sys/gio/mkpkg
Added an entry in the update: section for @sgikern. (6/17)
sys/gio/sgikern/sgk.h
sys/gio/sgikern/sgk.x
pkg/plot/doc/sgikern.hlp
Changed the value of the opcode for the draw line instruction to 4,
so that the metacode opcodes will form a simple sequence 1-4. No need
for different classes of opcodes in this kernel. (6/18)
sys/gio/sgikern/sgk.x
Added support for a new graphcap flag DB. If present in the graphcap
this causes the SGI kernel to print debugging messages at runtime.
(6/18)
dev/graphcap
Finished up the entries for the NOAO/UNIX versatec devices and tested
the new kernel both as a task and as a pseudofile i/o subkernel.
The principle disadvantage of the SGI kernel is that it does the
rasterization on the fly rather than as a queued batch job, hence
operations like the cursor mode :.snap take longer, e.g., 10 seconds.
The actual rasterization process is actually about five times more
efficient than the NCAR/UNIX software, but to the user it will appear
somewhat slower when writing to a raster device. When writing to an
intelligent device (e.g., QMS or IMAGEN) the delay should not be
noticeable. (6/18)
sys/gio/sgikern/sgk.x
Performed the obvious optimizations, i.e.,
[1] Substituted a call to ACLRI to clear the frame buffer for
the do-loop used formerly. This function is optimized in
assembler on the VAX using the movc3 instruction (should
have had sense to use this in the first place).
[2] In the vector drawing primitive, added optimal code for the
special cases of vectorizing horizontal and vertical vectors,
e.g., for the plot box and ticks.
This did not take long and the running time for my test plot decreased
from 7.5 to 5.1 cpu seconds. Currently, 2.8 seconds are spent clearing
the frame buffer and writing it out, compared to 2.1 seconds to do the
actual vectorization (the clear and write operations must process the
entire raster), so probably there is little further room for
improvement. (6/18)
SGI device/host interface status [DISCUSSION]
An SGI VMS/Fortran translator for the calcomp has been written.
No host task had to be written for UNIX for the versatec since lpr
will take bitmaps directly; the dispose command merely disposes of the
bitmap to lpr. An SGI translator for the versatec on VMS is being
worked on - it looks like it will be only a couple pages of code,
one merely has to change the record structure of the bitmap file and
copy it to the device. A translator for the Imagen will be ready
soon; this should also be a simple little program, the main problem
being trying to make sense of the "impress" language. We are looking
for someone to write a QMS translator, since this appears to be a
popular device.
pkg/language/doc/logging.hlp +
Added this mislaid manual page to the language package help directory.
(6/21)
-------------------------------------
Revs notice printed in newsletter.
System work stopped for several weeks due to vacation.
pkg/plot/*
Installed a new version of the PLOT package. Most of the changes were
cosmetic, e.g., changes to parameter names in old tasks to make them
conform to GIO nomenclature. There were also a few bug fixes. (7/14)
sys/imio/imsetr.x
When called to set NBUFS (the number of input buffers) will now free
any existing buffers before changing the size of the buffer pool.
This makes it possible to change the number of input buffers after
doing i/o to an image; the FIXPIX program was doing this, causing an
apparent memory corruption problem leading to a panic abort. Note
that a bad pointer will result if an input routine is called before
the call to IMSET since the buffer will have been returned. The output
buffer, if any, is not affected by a change in NBUFS. (7/15)
sys/imio/iki/oif/oifdelete.x
sys/imio/iki/oif/oifrename.x
Added a check for IM_PIXFILE(im)==EOS (no pixel file) so that these
operators will not attempt to rename or delete the pixel file if there
isn't one, i.e., the image was created but never written into. (7/15)
pkg/cl/unop.c
In a couple of sscanf() calls, changed the %d and %f to %ld and %lf,
since the output variables are type long and double. (7/15)
sys/gio/cursor/grcread.x
sys/gio/cursor/grcwrite.x
sys/gio/cursor/giotr.x
The :.write command would formerly write the binary WCS structure at
the beginning of the output metacode file, followed by the frame
buffer, and the :.read would expect the same structure when reading
a file. This was bad because the resultant metacode files were not
in the standard GKI metafile format, hence problems would result when
:.write files were input to other programs, or when standard metafiles
were read by :.read. Also, the whole business was no longer necessary
since the SETWCS instruction is now included in the metacode in the
frame buffer. Removed the write/read WCS code from grcread/grcwrite,
and added a case to GIOTR to reset the WCS when the SETWCS instruction
is encountered in the frame being redrawn. (7/15)
sys/libc/isatty.c
This LIBC interface routine was the source of the bug causing <ctrl/z>
or bye to logout of the cl, rather than printing the "use `logout' to
log out of the CL" message - end of file must always cause logout if
the CL command input is not the terminal. The recent introduction of
the new VOS virtual terminal driver ZFIOTT was causing the isatty()
test to fail, since isatty() was using the driver associated with the
stream to determine if the stream was connected to a terminal.
Modified isatty() to recognize either ZFIOTY or ZFIOTT as a terminal
driver. (7/15)
vms/hlib/libc/knames.h
vms/hlib/libc/knames.no_
unix/hlib/libc/knames.h
unix/hlib/libc/knames.no_
Added an entry for ZGETTT to these files. Put the define in knames
rather than xnames since it is a kernel driver, even though it resides
in the VOS rather than the kernel. (7/15)
pkg/cl/binop.c
The STRIDX function would not work properly when there was more than
one character in the first argument string (had to invert the nested
loop). (7/15)
lib/gio.h
sys/etc/oscmd.x
sys/gio/sgikern/sgk.x
sys/gio/cursor/prpsio.x
sys/gio/cursor/proscmd.x
sys/gio/cursor/gtrdiscon.x
The SGI kernel relys upon the use of the ZOSCMD facility to permit
use of a host or foreign task to dispose of the metacode or raster
file to a host plotter device. This was a problem on VMS since the
VMS version os ZOSCMD cannot be called from a subprocess; only the
root (CL) process can spawn a sub-DCL.
To get around this problem OSCMD now determines whether the calling
process is a connected subprocess, and if so, sends the OS command to
the parent process via CLOUT, as a command line of the form "!oscmd".
The PRPSIO and GTR_DISCONNECT routines (which handle the pseudofile
XMIT/XFER requests) were modified to intercept OS escapes and process
them directly. Synchronization is achieved by returning the ZOSCMD
exit status via IPC to the OSCMD procedure in the subprocess.
If necessary the command will be passed all the way back up a
multilevel process tree to the root process before submission to the
host system. Note that these semantics are available only in the
VOS routine OSCMD; the kernel routine ZOSCMD will always try to send
a command directly to the host system. (7/16)
sys/gio/glabax/glbencode.x
This routine trims insignficant trailing zeros and decimal points from
tick labels to produce a more concise label. This led to a bug in
exponential format, as a label such as 1.0E10 would be trimmed to
"1.0E1". (7/16)
sys/imio/imt.x
The image template code will automatically escape any image notation
metacharacters present in the filename returned from the FNT package.
This was causing the @listfile type of image template to fail since
the image templace code thought the [...] sections in the image
listfile were part of the filename, and would escape them, causing
IMIO to interpret them as part of the filename rather than section,
and hence fail to find the image. This was fixed by turning off
all image template translation of the strings returned from a listfile,
hence any escapes needed must be explicitly included in the listfile
elements. (7/16)
-------------------------------------------
VMS/IRAF system updated from lyra. (7/16)
vms/os/net/zfioks.c
Changed the "Password:" prompt to "Password (user@node):" so that the
user will know which login and node the password is being requested
for when spawning a kernel server on a remote node. (7/17)
pkg/system/page.x
Fixed a bug that would cause the last line in the file to be repeated
when a continuation keystroke is erroneously entered at the end of file.
Modified page to quit without a prompt when displaying a single file
small enough to fit all on one screen. Smartened up the ":line N"
syntax to permit omission of the space, and added a [+/-]N syntax for
relative offsets. Finally gave in to the temptation and added
backwards movement in files (but not in pipes yet), e.g., `u' (up) is
the opposite of `d' (down), `k' goes up a line while `j' goes down,
and so on. (7/17)
pkg/system/lineoff.x +
Added a new package LNO (line offset package) in the SYSTEM directory
for keeping track of the file offsets of a subset of the lines in a
text file. This is used by the PAGE program but is a general purpose
package which can be copied and reused in other similar programs.
lp = lno_open (maxlines)
lno_close (lp)
lno_save (lp, line, loffset, ltag)
OK|ERR = lno_fetch (lp, line, loffset, ltag)
The package does not actually know anything about text files - its'
function is to associate a pair of long integer tag values (the file
offset and some other value) with each of a set of up to maxlines
integer keys (the line numbers). (7/17)
pkg/cl/*
The current PAGE program cannot be used in the keystroke drive mode
when reading from a pipe, since the only way a subprocess can read
from the terminal in raw mode in by reading from an unredirected STDIN
in raw mode. After some study it appears that the best solution to
this problem is to add a new parameter type to the CL which reads from
the terminal in raw mode to satisfy a query. This avoids the use of
STDIN, eliminates the need to mess with raw mode in simple keystroke
driven programs, eliminates the need to worry about UCASEIN mode in
every keystroke driven program, makes keystroke driven interaction
possible in CL scripts, and so on.
Accordingly, a new abstract datatype UKEY has been added to the CL.
UKEY is identical to GCUR except in the way the query is performed
and in the format of the returned value string. Also in analogy to
GCUR, a new list-structured parameter `ukey' has been added to the
CL global parameter set. Referencing the `cl.ukey' parameter (or any
parameter of type UKEY) in an expression will cause a raw mode
keyboard read, e.g.,
= ukey
or
while (fscan (cl.ukey, key, strval) != EOF)
...
A UKEY type parameter returns a "struct" value (i.e., a string) with
the format
key [strval]
where the `strval' is the null string unless the key is :, i.e.,
a colon escape as in cursor mode. A new CLIO procedure CLGKEY will
be added to CLIO in analogy to CLGCUR for use in keystroke driven
loops in applications programs. (7/18)
sys/clio/clgkey.x +
Added the CLGKEY function to CLIO. The function of CLGKEY is to
perform a raw mode read of a keystroke from the keyboard on the
user terminal. Single keystrokes are not echoed and the cursor is
not moved. The key ":" causes the cursor to move to the beginning
of the current line, the ": " prompt to be issued, and the `strval'
to be read. KEY is returned an integer value. EOF is returned if
end of file is detected on the input list, or if the key <ctrl/z>
or <ctrl/d> is typed. Interrupts are disabled during a raw mode
keystroke read, hence interrupt <ctrl/c> is returned as \003.
nitems|EOF = clgkey (param, key, strval, maxch)
CLGKEY is equivalent to CLGCUR except that the coordinate information
is omitted. CLGKEY flushes any buffered STDOUT or STDERR output before
reading from the terminal. The CL parameter may be local to the
calling task and of type "*ukey" to permit redirection of keyboard
input to a list file. (7/19)
pkg/system/page.x
Modifed PAGE to use the new CLGKEY facilities so that the keystroke
driven interface is available in pipes as well as on disk files.
Added a pattern searching capability, accessed via the colon escape
":/<pattern>" rather than with a simple / as one might expect
(because the clgkey interface only supports string arguments for
colon escapes).
PAGE is now fairly complete except for backwards movements in pipes,
which would require buffering of the input data, and except for
upscrolling, which is currently not implemented (backwards motions
are implemented by repainting the full screen). The revisions to PAGE
have already consumed so much time that I suppose I should have just
scrapped the original program and written a new, fully featured one
from scratch. (7/19)
pkg/system/help.x
Modifed to use CLGKEY. (7/19)
pkg/system/doc/page.hlp
Updated this manual page. (7/19)
unix/os/zfiotx.c
Changed the ioctl TIOCSETP to TIOCSETN to avoid discarding pending
terminal input when switching to "raw" mode (`cooked' in unix).
This makes type ahead possible in programs like PAGE and HELP which
are constantly switching between the raw and normal terminal modes.
It may also make cursor reads safer, since it might be possible for
a terminal to begin transmitting the cursor value sequence before
the program switches to raw mode, causing part of the return value
to be lost. (7/19)
--------------
Upgraded vms/iraf (7/19).
sys/tty/ttyputl.x
The optimized code was breaking long lines and writing them out in
chunks the width of the terminal screen, but was not adding a newline
at the end of each output line, hence text was being lost on terminals
not set to wraparound in hardware. (7/20)
pkg/system/count.x
The line count would be off when counting a file containing lines
longer than SZ_LINE. Modified to bump the line counter only when
newline is seen. In general, however, IRAF cannot be expected to
work correctly on text files containing very long lines. (7/20)
local/tasks/README
The old README file in this directory was copied from PROTO and was
useless. Replaced it by a new README file explaining what the LOCAL
package is, and outlining the steps to be taken to install a new
task. (7/20)
unix/boot/mkpkg/char.c
vms/boot/mkpkg/char.c
In k_fgets(), return NULL rather than `ch' if a read error occurs.
(7/20)
pkg/cl/modes.c
In proc_params(), if called for a procedure with a null argument
list, will now initialize to hidden the mode of all parameters for
which the mode was not explicitly set when declared. Formerly,
such parameters would end up with a default mode of auto. (7/20)
sys/imio/iki/stf/stfrgpb.x
sys/imio/iki/stf/stfwgpb.x
Added support for a boolean/logical data type. (7/20)
sys/imio/iki/stf/stfopen.x
For the moment, modified to always reblock the old header in a
NEW_COPY operation, else an VMS/RMS file write error may occur
when updating the header. This should probably be done at update
time instead. (7/20)
pkg/system/page.x
Fixed PAGE to run noninteractively if its STDOUT has been redirected.
Unfortunately, this redirection test fails when PAGE is called from
another task such as NEWS, and the output of the calling task has
been redirected. No easy solution to this at present. (7/20)
sys/imio/iki/stf/stfwgpb.x
Was not blank filling character variables when updating the group
parameter block. (7/20)
--------------------
vms/iraf updated (7/20)
vms/boot/spp/xc.c
In mktemp(), added a `static' to the declaration for the char buffer
in which the output filename goes. (7/21)
doc/suniraf.hlp
doc/unixiraf.hlp
doc/vmsiraf.hlp [MISSING?]
Moved the installation guides to the doc directory so that they won't
get lost (but where is the VMS one?). (7/21)
doc/ports/*
Moved all the old notes files from the LOCAL directory in VMS/IRAF to
the doc/ports archive. Deleted some other old files in LOCAL. (7/21)
sys/fio/ungetline.x
Fixed typo: `fiodes (fd)' -> `fiodes[fd]'. (7/21)
sys/fio/fcanpb.x +
sys/fio/*
Added a new FIO internal procedure fcanpb(fd), called to cancel out
any pushback and return the file i/o pointers to their normal state.
Added calls to this procedure in various places throughout FIO.
The new routine is a no-op if there is no pushback, so this should be
relatively risk free. This was found by the new PAGE program, which
is one of the few programs to use the FIO pushback facilities. (7/21)
vms/os/qio.c
This bug showed up in MTIO, which was not seeing the end-of-tape mark,
causing the tape to run off the end of the reel, or worse, the
program to appear to work while actually writing nothing at the end
of the tape. The AST routine was returning a count of zero when
end-of-tape was encountered, causing _zflush() to return a zero in
the same circumstance, when this was really an error condition.
Modified so that _zflush() returns XERR when an end-of-file status
is returned in a write operation. (7/21)
sys/mtio/mtrdlock.x
If the lock file does not exist or cannot be read from some reason,
a new lock file will now be written and the position will be returned
as undefined, causing MTOPEN to rewind the drive. The new MTIO will
do i/o to the drive even if the lock file does not exist, but would
abort at close time since the lock file must exist to be updated.
Creating a new lock file at open time should permit i/o even if the
drive has not been allocated within IRAF. (7/21)
sys/imio/imaccess.x
This new function (currently unused) was calling iki_access() with
the wrong number of arguments. (7/22)
imfit/fit1d.x
imfit/t_lineclean.x
imutil/imdelete.x
The above tasks were all incorrectly using the FIO access() function
to test for the existence of images. Replaced by a call to the
imaccess() function. (7/22)
MTIO - discussion
A number of changes were made to fix some problems/complaints received
in past months regarding MTIO. There was a bug where the user would
allocate/mount the tape in VMS, get into IRAF, run a program which
would successfully do i/o to the drive (this would work) and then
when it was all done, an "cannot close file" error would occur.
This would happen because the kernel level MTIO routine called to
udpate the tape position needs the old lock file to update the tape
position in the lock file. The fact that the drive was allocated
outside of IRAF is not really a problem because the new allocation
software in the CL knows if a device is allocated/mounted, regardless
of whether this was done in IRAF or the host system.
MTIO was modified in such a way that it should no longer matter
whether the user allocates the drive in IRAF or before running the CL
(I'm not sure what happens if an OS escape is used; did not test that).
If there is no lock file because the drive was allocated/mounted at
the host level, MTIO will simply write a new lock file which records
the tape position as undefined. The following changes were made to
implement this scheme.
mtio/mtalloc.x
Changed to record the initial tape position as file 0 (position
undefined) rather than file 1, since we do not really know how
the tape is positioned at allocate time. Setting the tape position
to 0 in the lock file is harmless; the effect is to require MTOPEN
to rewind the tape to get to a known position at open time. This
change will be visible to the user who runs `devstatus' after
allocating the tape drive. (7/22)
mtio/mtrewind.x
mtio/mtstatus.x
If called when there is no "lock" (save-position) file, will now
write one indicating that the position is undefined, rather than
abort. In the case of mtrewind, it is then immediately updated
to indicate that the tape is at file 1. (7/22)
unix/hlib/login.cl
vms/hlib/login.cl
After the call to TYPE to type the message of the day, added a call
to DELETE to delete any old "mt?.lok" files in UPARM. This is
essential, as otherwise MTIO might use an old lock file for a new
tape and erroneously position to the wrong file. The delete operation
is performed at login time rather than logout time because [1] doing
it at logout is not safe, as the CL or host may crash and never go
through logout, [2] login takes so long the extra time will not be
noticed, [3] the call to DELETE occurs immediately after the call to
TYPE to type the message of the day and immediately after connecting
the subprocess, hence everything will be paged in and it should go
fast. It would have been nicer to do this in hlib$clpackage.cl,
but that is not possible since UPARM is not yet defined when that
file is read. (7/22)
sys/mtio/mtdevall.x +
sys/mtio/mtopen.x
sys/mtio/mtrewind.x
Added a new internal routine mt_devallocated() to MTIO. This is called
by MTOPEN and MTREWIND to ensure that the drive has been physically
allocated before proceeding further. This is necessary because the
presence of the "lock" file can no longer be used to test if the device
has been allocated. If the device has not been allocated a message
is printed to that effect, rather than proceeding further and printing
a misleading i/o error etc. message. (7/22)
unix/hlib/stripper
unix/hlib/stripall
vms/hlib/stripper
vms/hlib/stripall
Will no longer delete the .hd files or the .key. A number of other
protected extensions were dropped and replaced by the single
extension .dat. (7/22)
----------------------------------------------------
Snapshot of new V2.3 system sent to CTIO.
sys/etc/xalloc.x
In xdeallocate(), the MTIO deallocate command was being called after
the device was deallocated at the host level. This was backwards
because the MTIO routine may rewind the device, hence must be called
before the device is physically deallocated (dismounted). (7/23)
sys/mtio/mtrdlock.x
When called with no lock file present, mt_allocate() was being called
with the drive name minus the "mt" prefix, e.g., device "b" rather
than "mtb". (7/23)
----------------------------------------------------
Snapshot of new V2.3 system sent to STScI.
sys/imio/imsetr.x
The variable `ibdes' is used to test if an input buffer descriptor
had been allocated before NBUFS was changed, as a new one must be
allocated in that case after the change. The bug was that the old
one was being freed by an `mfree (ibdes, ...)' which zeros `ibdes',
causing the test to fail. Replaced the ibdes by IM_IBDES in the
call to mfree. This bug would cause the FIXPIX task to fail,
since this wierd task likes to change the value of NBUFS after
doing i/o on the image (technically illegal but I am trying to
make it more user proof). (7/23)
sys/imio/iki/iki.h
sys/imio/iki/ikiparse.x
sys/imio/iki/stf/*.*;*
It turns out that the ST folks have reserved an entire large class
of filename extensions for their images, rather than a finite set.
The legal header extensions are ".??h" and the matching pixel file
extensions are the same with a "d" as the last character. Modified
the iki_parse() routine and various routines in the STF package to
implement this scheme. Since IKI checks for an OIF (.imh) image type
first, it will recognize OIF images even though the OIF extension
is a legal STF extension.
Only the changes to the iki_parse() routine affect OIF format images,
and the iki_parse() routine has been tested as a unit, hence bugs may
have been introduced into the STF interface, but the changes do not
require retesting of the IRAF image operators. (7/23-24)
dev/devices [VMS/IRAF]
Added an entry for `mtg' (MSC0:), the TS11 recently added to the DRACO
cluster. (7/24)
dev/graphcap
vms/gdev/sgidev/*
vms/hlib/irafuser.com
Several system revisions were made over the past week or so to install
the SGI translators. I have waited until now to document this so that
testing of the new interface could be completed.
An SGI translator is a host system program which disposes of an SGI
metacode or bitmap raster file to a specific device. The programs
may be as host specific as desired; for VMS, we have written a couple
template programs for the versatec (bitmap interface) and the calcomp
(metacode interface) which are VMS Fortran with all the extensions
and even a little assembler in places if necessary. Similar programs
can be written at user sites with little or no knowledge of IRAF
internals. The translator programs are only a few pages of Fortran,
most of which can be reused for new devices.
The source for these programs resides in vms$gdev/sgidev.
The mkpkg.com and mkpkg in this directory compile and link the
translators and install them in hlib$. A graphcap entry must be
added to dev$graphcap and a VMS foreign task declaration must be
added to irafuser.com, then the device is fully interfaced and
available for use with all IRAF graphics software. (7/24)
vms/os/zopcpr.c
In prinit(), called to get the quotas of the parent process when the
first subprocess is spawned, the value of the parent's WSEXTENT was
being assigned into the wrong slot of the `quotas' array, causing
this feature to fail. Fixed this bug and added additional entries
for WSDEFAULT and WSQUOTA, so that the subprocess will inherit
all these nondeductable quotas from the parent. The system default
working set of 200 is hopeless for IRAF processes; on a busy system,
large memory batch jobs, for example, will quickly gobble up the
pages of an idle x_system.e, causing little system tasks (like DIR)
to take a minute or so to run each time. It seems better to let
the user/system manager control the working set parameters for the
entire process tree (on a per-user basis depending upon what they
need) rather than only for the CL process. (7/24)
vms/os/zoscmd.c
Added a badly needed multiple-command capability to the VMS ZOSCMD
kernel procedure. The command separator character chosen was the
DCL comment character !, which is not likely to be useful in the
context of OS escapes. For example,
cl> !show time !show users
would issue the two commands "show time " and "show users" in that
order. This may eliminate the need to use a DCL .com file in some
applications, possibly simplifying and condensing table driven
interfaces, and making things somewhat more efficient. The feature
should be useful in foreign task definitions, the editor interfaces,
the graphcap entries for SGI devices, and other places where OS
commands are used. The revision was made to the VMS kernel procedure
rather than to etc$oscmd.x for reasons of efficiency, to avoid the
blank line output to the terminal after every command by the VMS
ZOSCMD, and to permit selection of a metacharacter suitable for the
host system. (7/24)
vms/hlib/irafuser.com
vms/hlib/mkiraf.com
Deleted the temporary workaround logical IRAFTEMP, replacing it by
IMDIRDISK and TEMPDISK. There are now three system logicals which
must be set up in IRAFUSER.COM, e.g.:
IRAFDISK USR$0: ! Disk IRAF resides on
TEMPDISK SCR$2: ! Runtime (scratch) files go here
IMDIRDISK SCR$1: ! User image subdirectories go here
IRAFTMP is now defined in a site independent way in terms of these
logicals, like IRAFHOST, IRAFHLIB, and so on:
IRAFTMP TEMPDISK:[IRAF] ! scratch files
This should help to eliminate any confusion about when and when not
to escape $ characters, since this is no longer necessary for anything
in IRAFUSER.COM. The MKIRAF script will automatically escape the $
when generating the user login.cl file. MKIRAF now creates the default
user image storage (IMDIR) directory as IMDIRDISK:[USER] rather than as
IMDIRDISK:[IRAF.USER], since this appears to be closer to the way
things are usually done in VMS.
TEMPDISK and IMDIRDISK are no longer the same as IRAF uses tmp$ (on
TEMPDISK) for runtime scratch files that can be deleted on a daily
basis if desired, whereas the image pixel files may need to be kept
around longer. Files created by IRAF in tmp$ are normally deleted
immediately by IRAF unless a program is aborted, in which case the
host system is expected to clean things up. That is why a public
device is preferred for TEMPDISK.
Sites which do not permit public directories or devices will have to
make IRAFTMP point to a user directory. This can be done in many ways,
e.g., by defining IRAFTMP in the user's LOGIN.COM file. IMDIR is only
used by the runtime IRAF system, hence need only be defined in the
user's login.cl, where it can be set to any of a number of values,
e.g., `uparm$', `home$imdir/', `HDR$', or `HDR$pixels/'. If the user
has their own private IRAFTMP it will probably not be the same as the
value in the installed version of <iraf.h>, but this may not be a
problem as the latter may not be accessed except by the IRAF login
when doing heavy duty operations with the HSI, e.g., sysgens. (7/24)
vms/os/zopcpr.c [discussion]
The system paging activity seems much improved following yesterday's
change to ZOPCPR (to pass the parent's working set parameters on to
the child). Formerly, the child would inherit the system default
WSQUOTA of 200 and a WSEXTENT of 1024 (due to the bug). A busy
process would fault up to 1024 and then rapidly drop back to 200,
causing virtually the entire process to have to be paged back in
every time a task was run in the process. Since other VMS processes
would often have much larger quotas, the performance of the IRAF
processes would seem poor by comparison. Things should be improved
somewhat now, with the next major improvement to come if and when
shareable libraries are introduced. (7/25)
dev/graphcap
In the entry for the 4014, added a | and a comment after the `tek4014'
on the header line so that the device name `tek4014' would be usable
externally. (7/25)
vms/os/net/zfioks.c
Replaced the recently introduced (mistakenly) call to sprintf() by an
equivalent series of calls to strcpy() and strcat(), to avoid use of
the DEC C runtime library. (7/25)
pkg/cl/modes.c
pkg/cl/gquery.c
Deleted the `%newmode' feature, used to change the mode of a parameter
in response to a query. This feature has not proven useful (it is
inadvisable to change the mode of a parameter in any case) and has
lately become a problem since % is now used as the string edit
metacharacter in image templates. Responding to a query for an image
template with a perfectly legal template, e.g., `%im%im_%...' would
cause an obscure `bad mode spec' error message. If anyone ever wants
to change the mode of a parameter they can still do so by an explicit
assignment into the .p_mode field of the parameter. (7/25)
-----------------------------------------------
Partial updates sent to CTIO, STScI (7/28 am)
doc/vmsiraf.hlp +
Found a copy of the VMS installation guide in a scratch directory on
another computer. Dusted it off and put it in the DOC library. (7/28)
sys/gio/sgikern/sgk.x
sys/gio/sgikern/sgk.com
sys/gio/sgikern/sgipl.x
sys/gio/sgikern/ltype.dat +
sys/gio/sgikern/mkpkg
Added software generation of polyline linetypes (dotted, dashed, etc.)
to the SGI kernel. Added a new SGI graphcap parameter NB, specifying
the number of bits per byte for packing the output raster data. Also
added more documentation in the file describing the meaning of all the
parameters used to control the generation of bitmaps. (7/28)
sys/etc/xalloc.x
The ZDVOWN kernel primitive was being passed the device list string
from the dev$devices file when the host device name was intended.
This would work fine on VMS since the device list on that system
contains only one device name, but on UNIX there are many /dev entries
for each physical drive hence it would fail. (7/29)
sys/osb/bitfields.c
sys/osb/zzdebug.x
The portable versions of BITPAK and BITUPK in bitfields.c were overly
general, allowing bitfields to be read and written in a bit array of
arbitrary length. Since the assembler versions are currently limited
to operations upon integer scalars, the bit-array generality was not
needed and I replaced bitfields.c by a simpler and more efficient
version which only deals with a single longword at a time. Brought
the zzdebug.x up to date as well. (7/30)
pkg/xtools/icfit/doc
noao/onedspec/identify/icfit/doc
noao/onedspec/identify/uparmbkgXXX
Deleted these garbage files. The DOC files were regular binary files
that were once UNIX directory files. (7/30)
sys/imio/imsetr.x
Yet another imset(IM_NBUFS,.. bug. Must reset IM_NGET(im) to zero
when the number of buffers is changed. (7/30)
iraf/local/notes.st [UNIX]
iraf/local/suninstall.hlp [UNIX]
Deleted these files as there are already copies in doc$. (7/30)
iraf/local/login.com [VMS]
vms/hlib/mkpkg.inc [VMS]
Sometime back, I removed the LNK$LIBRARY reference to the C runtime
library from the IRAF LOGIN.COM file. This was done in case C
library references creep into the kernel, to cause the linker to
flag such references. One result is that the CALCOMP kernel no
longer links under mkpkg on VMS. This is easy to get around on
those rare occasions when this host system dependent executable
needs to be relinked, until I have time to figure out the best way
to reference sys$library:libcrtl.olb directly via mkpkg. For now,
turned off the USE_CALCOMP switch in the mkpkg.inc so that remote
sites do not get the error messages when relinking the system. (7/30)
------------------------------------------------------------------------
Cut and mailed distribution tapes for the six VMS/IRAF V2.3 early test sites.
Make UNIX source only archive tape and started SUN/IRAF upgrade. (7/31)
vms/hlib/irafuser.com
Changed the definition of the IRAFTMP logical from TEMPDISK:[IRAF] to
TEMPDISK:[IRAFTMP], and changed the name of the corresponding public
directory on our system as well. This was purely a name change to
avoid having multiple [IRAF] directories on different disks used for
different purposes. Of course, the system installer can change the
name to anything they want if desired, since knowledge of the actual
directory is confined to IRAFUSER.COM (and <iraf.h>). (7/31)
unix/boot/rtar/doc
unix/boot/rtar/doc/std.ms
Deleted this garbage test directory and the file therein. (7/31)
pkg/dataio/fits/spool
noao/onedspec/doc/tmp
noao/onedspec/log.plotx
noao/twodspec/multispec/spool
noao/twodspec/multispec/make.log
noao/twodspec/longslit/doc/tmp
noao/twodspec/longslit/transform/spool
noao/twodspec/longslit/spool
noao/mtlocal/camera/header
Deleted the above junk files. (8/4)
unix/boot/rmfiles/rmfiles.c
unix/boot/rmfiles/rmfiles.hlp
Made two modifications to the RMFILES utility: [1] the root of the
directory to be pruned need no longer be an immediate subdirectory,
and [2] the program file can contain lines of the form
-file filename
to delete individual files that do not fit into any particular class.
This will make it possible to build stripper files that prune even
more off the tree. (8/4)
unix/hlib/stripper
unix/hlib/stripall
vms/hlib/stripper
vms/hlib/stripall
Examined a list of the files left after running the original stripper
scripts, and added entries (using the new RMFILES capabilities) to
strip more files here and there. In particular, did away with a lot
more stuff in the HOST directories, and all the manual pages dealing
with subroutines rather than CL callable tasks. (8/4)
sys/gio/cursor/gtrgflush.x
I may have found the old STDGRAPH/STDPLOT/STDGRAPH segmentation
violation bug, which we have not been able to reproduce in recent
times. It showed up on the sun. The GTR code caches the descriptor
for a stream, saving the FD of stream in a variable TR_STREAM to
indicate what is in the cache. The low level GFLUSH routine would
initialize a stream, but was not setting TR_STREAM to null if the
stream being initialized was the one in the cache. Calling GTR_INIT
to cache the descriptor for another stream would result in the code
trying to move the old descriptor from the cache to the dynamically
allocated descriptor, which was deallocated by the GFLUSH, zeroing
the pointer and causing the segmentation violation. (8/5)
sys/gio/cursor/prpsio.x
If an unsolicited command is received from a graphics subkernel (when
an XMIT or XFER is expected) the command is printed on STDERR with
a call to putline, followed by the `unsolicited command input' error
message. The bug was that the FIO buffer is passed to PUTLINE as
is, and at this level in the system the string is not EOS delimited,
causing garbage to be printed after the data string. Modified to add
the EOS before calling putline. This bug would only be seen when a
subkernel aborts for some reason. (8/5)
sys/gio/cursor/prpsio.x
The same problem (no EOS) as above, except this time in the string
passed to OSCMD. (8/5)
sys/gio/nsppkern/gktopenws.x
sys/gio/sgikern/sgiopenws.x
When opening the first device after process spawn, the STARTFRAME
field of the GKT/SGI descriptor was being accessed before the descriptor
was allocated and initialized, leading to a zero-pointer bug. (8/5)
sys/gio/sgikern/sgk.x
sys/gio/sgikern/sgk.com
Added two new bitmap formatting options to the SGI kernel, BS and WS,
for swapping every 2 (BS) or 4 (WS) bytes of the bitmap at output
time. (8/6)
dev/graphcap
Added a `dver' entry, and the `vtri' entry from VMS/IRAF. Tuned up
the versatec plotting window parameters to provide a unity aspect
ratio. (8/6)
sys/gio/sgikern/sgk.x
sys/gio/sgikern/sgk.com
Added yet another new SGI bitmap formatting option, NF. The NF (new
file) option, if set, causes the individual frames of a multiframe
set to be written into separate files named $F.[1-MF], i.e., $F.1,
$F.2, ..., $F.MF. This option is also supported for metacode output.
It makes it possible to use LPR to dispose of the raster output
directly without a translator (on UNIX). This is very efficient
since no reformatting is required and the LPR job is queued. (8/6)
Also discovered and fixed a bug in the SGK kernel. If XO was nonzero,
the x scale factor was not being computed correctly, causing the plot
to be truncated at the right. (8/6)
sys/etc/main.x
The iraf main would not accept redirection on STDPLOT. Added it to a
case statement. (8/7)
pkg/cl/builtin.c
pkg/cl/edcap.c
pkg/cl/eparam.h
pkg/cl/globals.c
Fixed a bug in the editor interface that would cause it to fail when
attempting to edit more than one file at a time. Also, string storage
in the command list was limited to 10 and 12 characters with no overflow
checking when the file is read in; added #defines to parameterize
these (rather small) numbers, and modified the initialization code to
truncate long strings rather than run off the end of the array.
Also changed the way EDITOR_CMD (the command to be sent to the host
system to invoke the editor) is implemented internally. The string
is no longer stored in the command list, since the string storage there
is limited to only 10 characters, and EDITOR_CMD is not an editor
command anyway. The actual command string can now contain whitespace
provided it is quoted, can be up to SZ_LINE chars long, and most
importantly, may contain a %s somewhere in the string to be replaced
by the filelist. If no %s is present then " %s" is added at the
end, making it all compatible with the old edcap files.
In combination with the multiple commands per os-escape feature
recently added, this makes it possible for the command sequence sent
to the host system to consist of several commands with the file list
embedded in there somewhere. This makes it possible to eliminate
a .COM and two wasteful process spawns from the VI editor interface
on VMS. (8/7)
vms/hlib/irafuser.com
vms/hlib/irafvi.com
dev/vi.ed [VMS]
Redid the VI interface on VMS to eliminate the use of the IRAFVI.COM
script and the calls to STTY therein. VI is now called with the
following OS escape:
"set term/pasthru/passall!vi %s!set term/nopasthru/nopassall"
where the %s is replaced by the list of files to be edited. This
speeds things up considerably and eliminates the dependence on the
STTY task. (8/7)
vms/boot/rmfiles.c
vms/boot/rmfiles.hlp
Merged the new version of the RMFILES bootstrap utility into the
VMS HSI. The link failed the first time since the C runtime library
was not defined as a LNK$LIBRARY: need to add defines for this to the
bootstrap .COM files, or maybe make the user type it in. (8/7)
----------------------------------------------------
Updated VMS/IRAF (8/7)
vms/hlib/irafuser.com
vms/hlib/sgiqueue.com +
dev/graphcap
Modified the VMS SGI interface to submit the translation jobs to the
`fast' queue. This eliminated the SGI definitions in IRAFUSER.COM.
The single command script SGIQUEUE is used for all SGI devices. (8/8)
sys/fmtio/patmatch.x
The match at end of line metacharacter $ will now work at EOS as well
as at newline. (8/8)
sys/gio/stdgraph/stgrcur.x
Fixed the bug that was probably causing the cursor read failure where
successive cursor reads return garbage keys. The delimiter pattern
(CR for the tektronix) was being matched anywhere in the returned
cursor value string. If a character were lost somehow, e.g., due to
insufficient delay after sending a command to a slow terminal, then
the cursor read routine would read 6 characters, find the CR in there
somewhere, and accept the garbage cursor value. The left over
characters would cause the next cursor read to fail, and so on.
Modified the cursor read routine to match the delimiter (CD) only
at the END of the accumulated cursor value string, if the number of
chars in a cursor value (CN) is positive. More precisely, if CN > 0,
the cursor value will be accepted if len(valstr) >= CN and the pattern
CD//$ matches valstr. (8/8)
Fixed a second bug: the routine is designed to restart the cursor if
a cursor value still has not been matched after 15 characters have
been accumulated. Instead, it was decoding the 15 character garbage
value and returning (usually harmless, as the program would beep and
the cursor would be restarted). Modified to discard the input and
restart the cursor read without returning. (8/8)
(USER NOTE - if you lose the cursor for some reason, type any key )
(except [RETURN] until the cursor comes back. )
dev/graphcap
dev/cacheg.dat (rebuilt)
The above bug was discovered due to the lack of soft delays (null
padding) in the graphcap entry for the VT640. The symptom was that
the cursor value was coming back minus the first character. What
was happening was that graphics was being deactivated, a couple
of lines of text output were written, and then graphics was immediately
reactivated and a cursor read issued. It was taking the terminal a
while to draw all the text, and this was still going on when the
graphics add-on board was reactivated, causing the cursor read to
terminate early. The above fix to the read cursor routine ensures
recovery, but to avoid the cursor read failure I added a 150 msec delay
to the GE (reactivate workstation or graphics enable) graphcap entry
for the VT640 and several other terminals. (8/8)
dev/README
dev/vdmfile.gki
dev/vdmplot.gki
Replaced dev$mc by a file dev$vdm.gki containing a slightly different
selection of plots. Rewrote the README file for the directory as it
was completely out of date - it now contains some useful information
about the files in the directory. (8/8)
sys/gio/cursor/gtrinit.x
If a very large plot is processed, the cursor mode frame buffer will
overflow and data will be discarded. An environment variable is
available to the user to increase the maximum size of the frame
buffer should this be a problem. Changed the name from the rather
verbose and non specific `maxlenframebuf' to `cmbuflen' (goes with
`cminit'). Name change should be no problem as I don't think anyone
knew about this parameter. (8/8)
pkg/cl/history.c
At long last, brought the argument substitution feature of the history
mechanism up to date, i.e., modified it to work on whitespace rather
than comma delimited argument lists. Also added the ability to specify
arguments by number (^[0-9]). The possible argument symbols and their
meanings are therefore now:
^^ first argument of last command
^$ last argument of last command
^* all arguments of last command
^0 taskname of last command
^N argument N of last command (1 <= N <= 9)
This conventional CSH-like history mechanism, simple as it is, is often
much more effective than the history editor and it is a pity that more
people do not know how to use it. (8/9)
vms/boot/*/mkpkg.com
vms/boot/spp/*/mkpkg.com
Have not tried a full bootstrap of the VMS/HSI for a while, so thought
I had better make sure it still works before V2.3 goes out. Made the
following changes first:
[1] To all MKPKG.COM and MKPKG files which call the linker, added a
DEFINE/NOLOG LNK$LIBRARY entry to cause the linker to search the
C runtime library, required by the current version of the VMS/HSI
(but not by the runtime system). This was necessary because the
original define statement was recently removed from the IRAF
LOGIN.COM file to prevent references to the C rtl from accidentally
creeping into the runtime system.
[2] In all HSI linker calls, added the switch /NOSYSSHR. This
causes the system object modules referenced by the HSI
executables to be copied into the new executable, rather than
using an indirect reference to the system shareable library.
The effect is to make each executable about 40 Kb larger,
but rumour has it that these executables will run on older
versions of VMS without relinking. If true, this makes the
entire IRAF system runnable on old versions of VMS, since the
runtime system can be relinked with MKPKG provided the HSI is
runnable.
[3] In the RPP mkpkg.com, fixed a bug in the IF (...) THEN GOTO LINK
which would cause the library to always be rebuilt.
Ran MKPKG on boot/bootlib and boot/mkpkg to make the .MLB files,
purged all and lib/compress-ed the new libraries in HLIB. (8/9)
------------------------------------------
VMS/IRAF updated from lyra.
Sysgen performed (also served to test rebuilt HSI). (8/9)
doc/*.doc
Deleted; can be regenerated from the .hlp. (8/11)
doc/cluser.tex
doc/cluser/*
Installed the manuscript for the V2.3 CL User's Guide. Deleted the
entire cluser subdirectory, only the TEX file is needed. (8/11)
osb/mkpkg
lib/libvops.a
osb/miiread[csi].x -
osb/miiwrite[csi].x -
etc/mkpkg
etc/miiread[csi].x +
etc/miiwrite[csi].x +
The miiread and miiwrite procedures use FIO and hence cannot be in the
VOPS library (OSB), else a linker unresolved reference will occur.
In any case, they are portable and do not need to be in OSB, so moved
them to ETC. The potentially machine dependent MII primitives remain
in OSB. (8/11)
sys/gio/stdgraph/t_showcap.x
Fixed an argument type mismatch: `call pargc (char (intval))' does
not coerce the argument to type char due to limitations in the
preprocessor. The solution was to eliminate the call to CHAR, and
replace the PARGC by a PARGI. (8/12)
pkg/system/directory.x
Fixed a portability bug, discovered on AOS/IRAF. The dir_putci()
routine, which has a boolean argument, was being called with an integer
argument in one case. Changed the argument type to integer. (8/12)
dev/graphcap
vms/gdev/mkpkg
vms/gdev/mkpkg.com
vms/gdev/sgi2vptx.f +
vms/hlib/sgiqueue.com
Installed the SGI translator for the Printronix on VMS. (8/12)
vms/gdev/iism75/m75put.x
vms/gdev/iism75/zrdm75.x
The M70 has an 10 bit DAC driving the guns, whereas the M75 only has
an 8 bit DAC. Modified these routines to scale the 10 bit M70 OFM
values to and from 8 bits for the M75. (8/12)
pkg/images/tv/display/iisofm.x
Modified to set the full 1024 elements of the lookup table; formerly
it was setting only the first 256 elements. (8/12)
unix/os/mkpkg.csh
In checking out IMFORT in the new system, the link failed due to the
undefined external irafmn_. This turned out to be be due to the
presence of zmain.o in libos.a. The zmain.o module contains a C
main(), which was being selected in preference to the Fortran main().
This occurred because zmain.c got installed in the library during
the bootstrap by mkpkg.csh. Modified the OS mkpkg.csh bootstrap so
that this module is not inserted into the library. (8/13)
sys/imio/iki/oif/oifdelete.x
If the image header file is not protected, the delete would fail
because the file protection could not be removed. Modified to proceed
to delete the file if it is not protected. (8/13)
sys/imio/imfort/*
Brought IMFORT up to date for the new IMIO. New images are created
with the extension .imh. The extension is optional when referencing
an image. Pixel files are always created in the same directory as
the header file (for IMFORT), so the HDR$ form of the pixfile name
is stored in the image headers. The IMFORT created images are not
file protected, unlike the IMIO images, since IMFORT users may be
working outside of the IRAF environment. (8/13)
dev/pix.imh
Changed the pixel file name in the image header from dev$pix.imh to
HDR$pix.imh, since that is how the new system does this sort of thing
(and I could not read the image from IMFORT). (8/13)
local/noao [VMS/IRAF]
local/noao/gmr27
Created a new directory [LOCAL.NOAO] on VMS/IRAF and put the Grinnell
display interface code there. (8/13)
-----------------
Updated VMS/IRAF; rebooted VMS/IRAF; sysgen. (8/13)
pkg/images/iminfo/imheader.x
The size of the user area was being computed incorrectly, leading to
STROPEN being called on a string of length zero. Since stropen
returns EOF at EOS, I merely changed it to call stropen with the
length of the string as ARB. This was the source of the problems
with IMFORT generated images on VMS/IRAF, as these images have an
empty user area (which is completely legal). (8/14)
sys/fio/stropen.x
Changed the argument string dimension from `maxch' to ARB to avoid
a possible runtime array dimension error in VMS/IRAF. (8/14)
============================================================================
Version 2.3 of IRAF frozen; began distribution (8/14 pm).
============================================================================
unix/boot/mkpkg/tok.c
In getcmd(), there was still one case where $ was being recognized as
a special character even though it occurred inside a token. This was
causing the OSB mkpkg file to fail in a call to $generic. The argument
list for $generic had a `\$$' embedded in a filename which was supposed
to map to `\$'. This is correct for mkpkg, because with very few
exceptions, the only special metacharacter in mkpkg is $, and it is
escaped by doubling (as in make). Backslash is just another character
in mkpkg scripts. (8/15)
pkg/plot/doc/sgikern.hlp
[TODO]
|