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
|
Notes file for VMS/IRAF V2.2 Installation
Beginning 16 January 1985 (code prepared on UNIX)
------------------------------------------------
vms/*
Moved unix/* to vms/*. (1/16)
vms/os/*
Moved the current VMS kernel into host$os. (1/16)
vms/os/mkpkg
Wrote mkpkg file for OS. (1/16)
vms/as/*.s
Replaced all these assembler files by their VMS equivalents. Deleted
all the arithmetic VOPS machine files, as they are not worth it on
VMS (probably not worth it any more on UNIX, either). Wrote the new
routine ACLR.S for VMS. (1/17)
vms/os/zsvjmp.s
Moved to AS. (1/17)
vms/os/str.s
Added _strupk, _strpak, since the VMS kernel references these
internally, they need to be in LIBOS. Added the underscore to avoid
conflict with the OSB (C) versions used by the VOS. I know it seems
wasteful to duplicate essentially the same routine in different parts
of the system, but the subsystem interfaces must be respected. The
alternative is to add the routines to the kernel, but this involves
an expensive interface modification, and I don't think its worth it
for such trivial little routines. (1/17)
vms/os/zfiotx.c
vms/os/zfioty.c
vms/os/zfrnam.c
Changed references to strpak, strupk to _strpak, _strupk. (1/17)
vms/hlib/*
Set up the HLIB directory. This involved minor edits to config.h,
clpackage.cl, etc., and most of the .cl scripts therein. Moved in
all the .com files from the original "vms" directory from V2.0 of
VMS/IRAF. Added logical names for TMP and HOST to irafuser.com,
also logical names for MKPKG, RMBIN, etc. (1/18)
vms/hlib/libc/iraf.h
Modified for VMS. The remaining files are now the same for both
UNIX/IRAF and VMS/IRAF. (1/18)
vms/boot/bootlib/*
Minor changes for VMS. (1/19-20)
vms/boot/generic/*
Minor changes for VMS. (1/20)
vms/boot/mkpkg/*
Fairly extensive changes for VMS. Picked up the SCANLIB code from
the old VMS mkpkg; for the rest (mkpkg/host.c) I just modified the
new UNIX code as necessary for VMS. Still using the docvcl() stuff
to call XC, which is a kludge, but presumably it helps cut down on
process spawns. (1/20-21)
vms/boot/mkpkg/scanlib.c,rec.c
Had second thoughts about this code. A full but null sysgen must be
incredibly slow on anything less than an 8600, since the old vms mklib
would physically open and read each file to map an object file name
into an object module name to get a date. Even on the 8600 it is
probably an order of magnitude slower than the new MKPKG on the UNIX
750. Opening the source files with the C i/o can also change the file
modify dates, and the modify date is valuable information which I hate
to lose.
To avoid this dreadful situation, I have decided to not use the VMS
librarian at all to track object module dates. Instead, for each
library there is an associated module date database file, e.g.,
libsys.mlb for libsys.olb. This is updated by MKPKG when
objects are inserted into the library. If modules are replaced in
the library at the VMS level, MKPKG will simply recompile those
modules when eventually it is run (unless a utility program is run
to update the .mlb dates). But since the new MKPKG is such a screamer
anyhow, there is no need to use REPLACE.COM, or whatever, to update
modules in libraries - and the thing is dangerous anyhow (it is easy
to put the module in the wrong library, for example).
This approach has the further advantage that the technique and the
code are both portable and can be reused on other systems that, like
VMS, do not manage libraries the way we would like. (1/21)
vms/boot/rmbin
vms/boot/rtar
vms/boot/wtar
No changes for VMS, other than to replace the mkpkg.csh by a mkpkg.com.
(1/22)
vms/boot/xyacc
Not supported on VMS. (1/22)
vms/boot/spp/[...]
Some work was required here for VMS. The VMS version of RATLIBC was
picked up wholesale, but the UNIX versions of RATLIB[RF], RPPRAT, and
RPPFOR were used without change (these contain recent revisions which
were documented elsewhere). The VMS version of SPP.C was used (it
does more), but the UNIX versions XPPMAIN.C, XPPCODE.C, and DECL.c
were used, since they should be portable, now address all of the
issues dealt with in the VMS versions, and have recent revisions.
The VMS version of XC.C was used with very minor revisions. DCL.C
(the special ZOSCMD) was moved to BOOTLIB and hooked into os_cmd().
To summarize, the VMS versions of XC.C, RPP.C, and RATLIBC were used
with minor changes since they have been extensively modified for VMS.
The UNIX versions of the remaining files were used since they should
work for VMS, and it is desirable to minimize the differences between
the two versions to ease future merges.
A DCL mkpkg.com was written for each directory under SPP. These are
for bootstrap purposes and will always recompile everything. It is
assumed that some version of LIBSYS and LIBVOPS is available for
filename mapping purposes. (1/22)
vms/os/zfiomt.c
Removed the device table stuff, since the drive argument to ZZOPMT
is now the VMS device name. Density checking is performed at allocate
time by the VOS. It appears that the density is not being set
anywhere. (1/22)
vms/os/zalloc.c +
vms/os/cltape.c -
vms/os/devtable.c -
Added the two new kernel routines ZDVALL and ZDVOWN, in the file
zalloc.c. They were easy to generate as the original cltape.c code
was quite well structured. Deleted the files cltape.c and devtable.c
since they are no longer used. (1/22)
-------------------------------------------
That completes the coding modifications for VMS/IRAF, done on UNIX.
System moved to VMS for compile test beginning the 23rd. (1/22)
(edited the mkpkg.coms, fixed compile time bugs, not worth recording here)
vms/boot/generic/lexyy.c
Made the same changes for VMS as were made for the Lex/C output of
xpp.l. Should add editor script in UNIX version to make these
changes whenever lexyy.c is generated. (1/23)
vms/os/zfnbrk.x
vms/os/zfxdir.x
vms/os/zfpath.x
vms/os/zfsubd.x
Replaced these SPP source files by equivalent C versions, to simplify
bootstrapping the system. It is just as easy to work on XCHAR arrays
in a C program as char arrays, hence there is no advantage to using
SPP for these routines. (1/23)
TODO
Note - ZFNBRK differs from the UNIX version in that it ignores \ in
filenames (rather than interpreting them as directory delimiters).
Should merge back into UNIX version, too. (1/23)
vms/boot/bootlib/osfn2vfn.c
vms/boot/bootlib/vfn2osfn.c
Added #undefs for fprintf, strcpy to cancel out the defines in libc.h.
(1/23)
vms/hlib/libc/xnames.h
vms/hlib/libc/xnames.no_
Added a define for VFNUNMAP. (1/23)
vms/os/zzstrt.c
vms/hlib/libc/knames.h
vms/hlib/libc/knames.no_
Discovered that the VMS kernel does not have the entry points _zstartup
and _zshutdown. These are used in programs that do not have a ZMAIN.
They are currently no-ops in both UNIX and VMS, but in general it sure
seems that they might be needed; the bootstrap utilities would not
link because the routines were missing. If we are going to have them
they should be Fortran callable too, so I changed the names to ZZSTRT
and ZZSTOP and added them to the VMS kernel (as no-ops). (1/23)
vms/boot/*
Replaced all references to _zstartup and _zshutdown by references to
ZZSTRT and ZZSTOP. (1/23)
vms/boot/rtar/rtar.c
Declared getblock() at the head of the file and deleted the local
definitions in each procedure. (1/23)
vms/hlib/libc/xnames.h
vms/hlib/libc/xnames.no_
vms/boot/bootlib/vfn2osfn.c
vms/boot/bootlib/envinit.c
Use of the VOS for filename mapping requires initialization of the
iraf environment table. VFN2OSFN will now initialize the env. table
the first time it is called, taking SET declarations from the
zzsetenv.def file in hlib. Added a define for ENVINIT to xnames.h
to initialize the env data structures; ENVPUTS is called to make
entries in the table. The bootlib init procedure is _envinit(). (1/23)
vms/boot/bootlib/osfpathname.c
Added call to vfn2osfn() before call to ZFPATH. (1/23)
vms/boot/bootlib/oschdir.c
Replaced call to os_fpathname() by call to ZFSUBD, since the former
produces an OS filename rather than an OS directory name, and VMS
insists on the latter. (1/23)
vms/boot/hlib/libc/spp.h
Added a definition OSOK to spp.h. This is the value a foreign task
should return for normal successful completion, i.e., 0 for UNIX,
and 1 for VMS. (1/23)
vms/boot/mkpkg/host.c
vms/boot/mkpkg/modlist.c
vms/boot/bootlib/*.c
Lots of changes to the system interface code to get MKPKG to work
properly on VMS. (1/23-24)
vms/boot/bootlib/osdir.c
This code was rewritten to vfnopen the directory at diropen time
for efficiency reasons. Debugged the VOS filename mapping interface.
RMBIN was used to test the OSDIR code. (1/24)
vms/boot/hlib/libc/libc.h
Added a #ifdef to turn off LIBC name redefinitions, for programs like
the bootstrap utilities which need to import_libc, but which want to
use the host system strcpy, printf, etc. (1/24)
vms/boot/rtar.c
vms/os/zfiotx.c
I had a binary file on a supposedly text only tar tape. The file would
pass the ZFACSS test and appear to be a text file. RTAR would try to
use ZFIOTX to write the output file; the result was an access violation
in ZPUTTX, presumably because of the binary data. (1/24)
[not yet resolved]
vms/boot/rmbin [!!! NASTY BUG !!!]
vms/os/zfdele.c
Ran into an interesting problem with RMBIN. This task reads through
a directory, deleting any binary files found. The problem is that on
VMS, while the directory is open for reading, one cannot delete any
files in the directory because the directory file is locked. Not only
does this make RMBIN fail, it will also make a regular file delete,
create, rename, etc., fail, if the request is issued while another
process is reading from the directory!!! This means that bkg jobs
will mysteriously bomb out at random intervals on a file error. (1/24)
[not yet resolved]
sys/mkpkg
Added a $purge lib$ to the end of the sysgen section (after updating
all the system libraries). This will purge all the old versions of
the libraries after a sysgen. In the first attempt at a full sysgen
on the 24th, MKPKG went into a loop and filled up a disk, creating
43 versions of each system library! (1/25)
sys/mkpkg/pkg.c
The MKPKG loop mentioned earlier turned out to be due to a bug in the
VMS C stdio. FTELL returns the offset of the current record, rather
than the offset of the next record as the documentation states (and as
is necessary for UNIX compatibility). MKPKG would therefore repeat
the last command after pushing (ftell) and restoring (fseek) its state
to call a lower level module. This explains the problem, but does not
explain how it ever worked as well as it did in the first trial; we
may not know the whole story yet.
No choice but to add an #ifdef vms to pop_context() in pkg.c to skip
forward one line after an FSEEK. (1/25)
vms/os/net/kutil.c
Eliminated the reference to the macro define IRAFDIR, which has been
deleted. (1/25)
vms/mkpkg
Added a call at the end to MKPKG to update LIBOS, since the bootstrap
does not get the networking stuff. (1/25)
sys/libc/cfnames.c -
Deleted this file, which was apparently forgotten about after the
contents were unpacked into separate files. (1/25)
vms/boot/mkpkg/pkg.c
As expected, the FTELL/FSEEK problem has not yet been resolved. After
running tests for several hours, most of which worked, I was unable to
isolate the problem. Simple little test programs always work correctly
(i.e., they always seek to the wrong line). I was able to determine
that when it fails it is because FTELL returns the wrong offset. It is
conceivable that MKPKG could be corrupting a stdio data structure, but
I doubt it. More likely there is a bug in the VMS FTELL.
The next attempt at a workaround is to avoid the use of FTELL entirely
for VMS. Instead, I wrote a little package k_getc, k_fgets, k_ftell,
k_fseek. The getc counts characters, the ftell returns the char
offset, and the fseek rewinds the bloody file and reads so many
characters to get to the seek position. With this change, "mkpkg -n"
was able to traverse the system successfully. This code could be
useful on any system, so I will leave it in with a switch; there is
little effect on speed. (1/25)
vms/os/zfiotx.c
It appears that the RTAR crash when writing binary data into a text
file was due to the lack of overflow checking in ZPUTTX. Added
overflow checking. (1/25)
------------
Started a full sysgen on 25 January. This ran to completion, uncovering the
usual assortment of compile time bugs not found on UNIX/IRAF.
NOTE TO VMS/IRAF PROGRAMMERS
To relink a package executable for debugging on VMS, enter the
following command to relink with the "-x" flag:
mkpkg lflags=-x
For most packages, this will produce a debug version of x_test.e in
the local directory. The user package in the IRAF login.cl file
defines a foreign task "mkdebug" to make this easier:
task $mkdebug = "$mkpkg lflags=-x"
After debugging is complete, the following command will relink and
install a new executable:
mkpkg update
Alternatively, you can always type in a long "xc -x ..." command.
DCL .com files should not be used in the SYS or PKG directories.
sys/mkpkg
Made compilation of libmain.o optional, under control of a switch in
hlib$mkpkg.inc. The VMS XC does not need a separate object module,
hence it is turned off for VMS. LIBMAIN is a prelinked object module
on UNIX, and will eventually be the sharable library on VMS, once we
figure out how to have MKPKG udpated during a sysgen. (1/26)
vms/hlib/libcalcomp.a [SITE DEPENDENT]
Copied the VMS version of this library into HLIB. The source for the
library is local and is not part of IRAF. To link with this library,
one must reference the C runtime library CRTLIB.OLB in their login.com
file. Other sites may have a different version of the calcomp library,
or the Versaplot library, any of which will probably do as well for
the GIO calcomp kernel. (1/26)
math/llsq/sva.for
On lines 179, 181, the comma at the end of the line was in column 73,
hence VMS/FORTRAN would ignore it. Moved to column 7 of the first
continuation line. (1/26)
pkg/dataio/idsmtn/bswap6.c
Changed the [include "iraf.h"] to [include <iraf.h>]. (1/26)
pkg/images/geometry/geotran.x
On line 531, changed a couple of '0's to '0.'s in calls to the intrinsic
function MAX (argument type mismatch). (1/26)
pkg/local/mkpkg
Disabled the PERITEK code on VMS. This is a local, UNIX dependent pkg
(written by a staff astronomer) not intended for use outside of NOAO.
Will compile now only if site=noao and hostid=unix. (1/26)
pkg/local/intrp.f
Near the end of file, contained a line that extended way beyond col 72.
Detabbed the file and made extra continuation for the long line. Has
already been updated on UNIX/IRAF (where I did the detab). (1/26)
pkg/onedspec/identify/idpeak.x
Argument type mismatch in call to max(). (1/26)
pkg/twodspec/longslit/transform/trtransform.x
Several array arguments were dimensioned using variables NX,NY defined
in COMMON. Changed to ARB to get it to compile (the original is not
legal Fortran), but passing the array dimensions via common is a more
serious problem. (1/26)
pkg/utilities/t_polyfit.x
pkg/utilities/pfregres.f +
The polyfit task called the Bevington procedure REGRES which implicitly
called a function with the explicit external name FCTN. The source
for FCTN was provided with that for the polyfit task, but the VMS
librarian would store it in a separate library object module. Hence,
at link time REGRES causes a backwards reference to FCTN in the package
library, but since that library had already been searched the module
would not be found and the link would fail.
This could be solved by moving FCTN into a separate object file not
in the package library, and linking it explicitly by name. Instead,
I copied the source for REGRES into the local file pfregres.f, and
added a reference to FCTN (renamed pf_fctn) in the pf_regres argument
list as an external. The real problem here is the Bevington library,
a simple instructional tool which was never intended to be used in an
application such as ours. Coupling to the outside world via a reserved
external name (FCTN) is as bad as common coupling. In both cases the
information should come into the procedure in an obvious way via the
argument list. (1/26)
The new code should be tested.
pkg/imred/vtel/readvt.x
Assignment to DO variable `subswath' within loop. Recoded to use a
FOR loop. (1/26)
pkg/mkpkg
Added a "purge [...]" at the end, to be executed only on a vms host.
(1/26)
-------------
(End of compile time bug fixes)
(All of the above files where also updated in UNIX/IRAF, so that the PKG
(sources are still identical in both systems).
pkg/cl/opcodes.c [+ globaldef]
pkg/cl/globals.c [+ globaldef]
pkg/cl/main.c [+2 globalref]
I was forced to add #ifdef vms globaldef, globalref nonsense to these
files to enable a standard XC call to link the CL. I suspect that
linking C data-only modules will be a problem on other systems as well;
in the future, we may want to outlaw data only modules in portable C
code. (1/26)
(With this last fix, the new system is fully up and seems to be running
(fine, performing all basic functions normally).
dev/devices
Edited for VMS. Decided to use the third field ("aliases" for UNIX)
to pass the density at device allocation time. For VMS it appears
the density must be set at ALLOCATE (mount) time. (1/26)
vms/hlib/devstatus.cl
Edited for VMS. After printing the IRAF status (which is obtained
by a direct inquiry to VMS, not by just looking for a lock file),
devstatus will scan the device table dev$devices and do a
"!show devices/full device" to print the VMS info. (1/26)
pkg/cl/scan.c
Would only skip blanks between the tokens; will now skip both spaces
and tabs. (1/26)
vms/boot/spp/xc.c
Modified to actually create a shareable image with no traceback when
the -n flag is specified (it was a no-op before). Doesn't seem very
useful yet (the resultant image cannot be executed or installed),
but it will be useful for testing purposes. (1/26)
vms/hlib/devstatus.cl
Added a boolean param verbose, default no, controlling whether the
SHOW DEV info is printed. Since the IRAF device status now comes
from VMS, we no longer need the VMS output, and it is a lot faster
without it. (1/26)
vms/hlib/login.cl
Added a default NOAO USER package to the default login.cl. This serves
as a starter package for each user to modify as they wish. Each site
will wish to set up their own default package. (1/27)
vms/os/open.c
Modified to provide shared access to files opened for reading, to
avoid the locked directory problem mentioned earlier. (1/27)
sys/etc/syserr.x
In syserrs, added a check for overflow on the error message string.
These messages do not necessarily come from <syserrmsg>, and can be
quite long. (1/27)
sys/ki/kiconnect.x
Added a call to ki_gethosts() if the node table has not yet been
read. There are circumstances (although unusual) in which ki_connect
can be called before the node table has been read, causing the system
to try to open the resource on the local node. (1/27)
(All these bugs I am fixing have been in the system for some time, they
(are not new with this release...)
vms/os/zmain.c
vms/os/zfiopr.c
Added support for monitoring IPC messages a run time, a useful tool
for debugging connected subprocesses. To enable logging of IPC
communications for a process, the programmer runs the VMS PATCH
facility to set the value of the global variable debug_ipc to 1.
The process must first be linked -x (or -M) to get the address of
the variable debug_ipc.
cl> mkdebug
cl> adb x_test
DBG> ev debug_ipc
1D58
DBG> exit
cl> !patch x_pkg
PATCH> deposit 1d58=1
PATCH> update
PATCH> exit
This is similar to the way one does this on UNIX. (1/29)
sys/fmtio/lexnum.x
Changed stk_ip[] from short to int. (1/29)
pkg/cl/builtin.c
Changed two instances of
flags != LT_PFILE;
to
flags &= ~LT_PFILE; (1/29)
sys/clio/zfiocl.x
There was some confusion between bytes and chars here, causing the
numstr[..] = EOS to overwrite the static "xfer" string, resulting in
the command "x(3,2044)" being sent to the CL. This would cause
tasks which read from the standard input to fail. (1/29)
pkg/system/help/t_help.x
Added , to the stridxs search for pattern metacharacters, so that
commands like "help taska,taskb" do not stop after printing only the
first task. (1/29)
pkg/images/tv/display/imdopen.x
pkg/images/tv/cv/iism70/imdopen.x
Added an include <knet.h>. (1/29)
vms/os/net/zfioks.c
Modified to not return a channel value of zero, which makes the KI
think the server has not been connected, even though it has. (1/29)
Proposed Changes based on recent Installation Experiences
----------------------
The following observations followed a trip to the Univ. of Wash. to install
IRAF and interface the display software to the model 75 IIS. This served
as a test case to refine our installation procedures before the release.
- The quota requirements need to be better defined. In this case
the paging file quota was too small, and we had problems spawing
connected subprocesses.
- Make the [iraf.local] directory a standard thing, to hold all
local and VMS junk, e.g., login.com, test login.cl and uparm,
notes file, sysbull.dat, etc. etc.
- Replace IMAGEDISK by a definition of the default image storage
directory, which need not be a disk device.
- The symbol IRAF (used to load the logical names) collides with
the iraf system login IRAF. Mail cannot be sent to IRAF, it
has to be sent to _IRAF, which is confusing to the user.
Solution: use "IRAF" for the system login, [IRAF] for the
root directory, and IRAFDEFS for the symbol which used to be
called IRAF.
- Add a new subdirectory off the root called BIN, and install all
the executables there. Modify the CL to read the parameter
files from the source directories for the package, rather than
constraining the .par files to be in the same directory as the
executable.
- Add a utility to strip the system of all sources, objects, and
libraries not needed at runtime or for simple user software
development applications. All machines do not need to have
a full copy of the system with all sources.
- We need to include NSPP/MCVAX in the distribution, so that people
can get hardcopy on a Versatec or Printronix.
(end of observations)
-----------------------
vms/gdev/zfiogd.x
Broke iism70, iism75 into two separate cases, calling two separate
sets of interface procedures for each device. (2/5)
vms/gdev/iism75/*
Added a new subdirectory IISM75 containing the interface procedures
for the Model 75 IIS. This device was interfaced without any changes
at all to the existing high level code, which was written for the
Model 70. Instead, the IISM75 procedures perform transformations on
the data stream to and from the physical device. M70 output
instructions are converted to M75 format, and M75 responses are
converted to M70 format. In effect, we have added software to convert
the model 75 back into a 70. This makes it possible for us to modify
the complex high level software and test in on the model 70, with a
reasonable expectation that it will still work on the 75 as well. (2/5)
vms/gdev/iism70/m70io.f
The .for QIO interface procedures in gdev/iism70 are used for both
the model 70 and 75 (probably they should be moved into a separate
directory). The M70IO procedure would fail with the max transfer
size set to 32768 bytes. This was traced to the following expression
in a QIO call:
%val(2*count)
Here, `count' is a short integer variable. The result of the
expression is a long integer. The Fortran compiler would do the
multiplication with short integer arithmetic and then convert the
result to long integer, causing the unsigned integer result to overflow
into the sign bit, causing sign extension and an invalid QIO request
resulting in a cryptic insufficient working set message from VMS.
The solution was to store count into a long integer temporary before
evaluating the expression. Applying the INT intrinsic function to
COUNT had no effect. Note also that one might assume that 2 is of
type "integer" and that the multiplication would be evaluated using
integer arithmetic, but that is not how this compiler does it.
After this modification, the interface still failed, no doubt due
to the same problem elsewhere in the interface; I did not persue the
matter any further. I am documenting this carefully here because it
illustrates the danger of short integer arithmetic with the VMS
Fortran compiler, and anyone using such arithmetic must understand
in detail how such expressions are evaluated. Short integer arithmetic
was used in this particular application only because I cribbed the
QIO level interface routines from somewhere else, and they were
written to be compiled /I2. (2/5)
pkg/images/tv/display/iisrcr.x
Added a 30 millisecond delay, so that cursor loop applications (e.g.,
to window the display) do not hog the cpu polling the system in an
infinite loop. (2/5)
dev/graphcap
Added an entry for the CIT-414a graphics terminal. (2/5)
sys/tty/mkpkg
sys/tty/ttyclear.x
sys/tty/ttyclln.x
sys/tty/ttyctrl.x
sys/tty/ttydelay.x
sys/tty/ttygoto.x
sys/tty/ttyputs.x
sys/tty/ttywrite.x
In the process of developing a graphcap for the CIT-414a, I found
a problem with the TTY interface. The interface was set up to
operate upon EOS delimited control strings. This would prevent
inclusion of NULs in the control string (used to generate delays),
since the NUL would be interpreted as the EOS. A new routine TTYWRITE
was added, and TTYPUTS was modified to call STRLEN and then TTYWRITE.
The remaining routines were modified to call TTYWRITE rather than
TTYPUTS. I considered adding a notation to be used in control strings
to represent delays, but did not do so since the resultant TERMCAP
entries would no longer be compatible with UNIX TERMCAP. Instead,
one must explicitly include the nulls as \0\0\0 in the control strings.
(2/5)
sys/gio/stdgraph/stdgraph.h
sys/gio/stdgraph/stgencode.x
Added a new operator !! to the stdgraph encoder, used to generate
millisecond delays by inserting NUL characters into the output text.
The delay in milliseconds is popped from the stack. For example,
(#20!!) is a 20 millisecond delay. (2/5)
sys/gio/stdgraph/t_showcap.x
Modified to use the count returned by the encoder to find the end
of the output string, rather than assuming that the control string
is EOS delimited. This is necessary because the string may contain
embedded NUL characters. SHOWCAP will represent these as \0 in
diagnostic output. (2/5)
dev/graphcap
Made a pass through this and made minor revisions to bring the comments
up to date. Deleted all the "old graphcap" stuff at the end of the
file, as the code which used it has all been deleted. (2/6)
vms/boot/mkpkg/host.c
Modified h_outcheck() ($checkout) to always check out the latest
version of a file, even if a local file already exists with the
same name as the file to be checked out (the old version is deleted
and a new version is checked out). (2/6)
vms/boot/mkpkg/tok.c
Added verbose messages to do_copyfile() and do_movefile(). (2/6)
vms/os/zgtenv.c
vms/hlib/libc/iraf.h
sys$library:iraf.h
After having what appeared to be problems with the passing of logical
names to subprocesses spawned by batch queue jobs, I added the logical
name table lookup code from UNIX/IRAF to the VMS version of ZGTENV.
This code will fetch the values of the three essential logical names
IRAF, HOST, or TMP from the file <iraf.h> at runtime, if not found in
the VMS environment. These logical names are currently defined as VMS
logical names in hlib$irafuser.com as well, but these values can be
deleted should it prove desirable, and the system will automatically
pick up the default values from <iraf.h>. This is the way this works
on UNIX/IRAF too. (2/6)
vms/boot/boot/* [UNRESOLVED]
This is a problem with the bootstrap utilities. At present, these
work great when run interactively from either DCL or the CL.
Even background execution works, provided the subprocess type of
bkg job is used. When run in a batch queue, however, my test case
(MKPKG) apparently completes successfully (an executable is linked),
but the spool file contains a DCL dump claiming that the MKPKG died
during startup because it could not find a file (it looks like the
hlib$zzsetenv.def file, but the RMS error message does not give the
file name). No other output is produced. I looked for a while but
could not figure out where the real output is going, or why this
apparently ficticious error output is being generated. Since the
MKPKG job apparently completes normally, it must be something during
job termination, but I don't have time to look into this further
now. (2/6)
vms/os/net/zfioks.c
vms/os/net/inet.h
Reduced the max transfer size to 32256. A transfer size of 32768 or
larger causes the Wollongong network driver to crash VMS (this was
reported before, but the value checked for was still too large). (2/9)
pkg/images/tv/display/iisopn.x
Added a strupk to unpack devinfo before calling ki_gnode. (2/9)
pkg/images/tv/display/zsttim.x
Added code to multiply the max buffer size by 2 if "packit" is set,
allowing twice as many pixels to be stored in the same space. (2/9)
vms/os/zgtenv.c
We don't want to use VMS logical names like "IRAF" and "TMP" because
problems are likely due to name collisions. On the other hand, we
don't want to change the IRAF names. The solution adopted was to
have ZGTENV, when asked to lookup NAME, look for IRAFNAME first.
This allows all logical names to be defined in irafuser.com with the
IRAF prefix.
The exact sequence of events followed by ZGTENV when a request for NAME
is received is the following:
[1] Look in VMS land for IRAFNAME.
[2] If NAME is one of "IRAF", "HOST", or "TMP", the three host level
logical names required by the IRAF VOS, and the VMS lookup for
"IRAFIRAF", "IRAFHOST", or "IRAFTMP" failed, fetch the default
value from <iraf.h>.
[3] Lastly, simply look in the VMS tables for NAME.
vms/hlib/irafuser.com
vms/hlib/mkiraf.com
Now defines the following machine dependent logical names:
IRAFDISK locates IRAF root at IRAFDISK:[IRAF]
IRAFTMP default TMP directory (public)
fast,batch,slow aliases for batch queues
(SYS$NODE) not needed for 4.X VMS.
The remaining definitions in irafuser.com are site independent.
The old logical IMDIRDISK has been replaced by IRAFTMP. The latter
is needed in any case to define the IRAF "tmp$", and it was desirable
for the default image storage location to be a directory rather than a
disk. MKIRAF was modified to create the default user IMDIR as a
subdirectory of the directory IRAFTMP. The temporary logical names
IRAF, HOST, and TMP were replaced by IRAFIRAF, IRAFHOST, and IRAFTMP.
The logical names EDT and VI were replaced by IRAFEDT and IRAFVI,
under the assumption that code will be added to EDCAP to define what
name to pass to the host to run the editor. It was annoying to have
an important symbol like VI used by IRAF, and always calling the
editor via the very slow @irafvi.com script. (2/11)
TODO: add "host command" string to EDCAP, modify CL to use it.
VMS Environment
This is a summary of the VMS environment configuration recommended
for IRAF.
IRAF Symbol, loads irafuser.com
IRAFDISK Logical name, disk iraf sources are on
IRAFTMP Default public scratch directory
IRAFDISK:[IRAF] Root directory of iraf on IRAFDISK
IRAFDISK:[IRAF.LOCAL] Login directory for vms user "IRAF".
If no IMDIR is defined, the CL uses IRAFTMP. The default IMDIR
created by MKIRAF is the subdirectory .USER] of IRAFTMP. The system
should be installed under the login name IRAF. IRAF related VMS
mail should be sent to user IRAF (no need to use _iraf). (2/11)
pkg/cl/builtin.c
pkg/cl/edcap.c
pkg/cl/globals.c
pkg/cl/eparam.h
Added a new field EDITOR_CMD to the EDCAP database. The "escape"
field contains the command to be sent to the host system to run the
editor. The function HOST_EDITOR() accesses edcap and returns the
command string for the named editor. (2/11)
dev/edt.ed
dev/emacs.ed
dev/vi.ed
Added an EDITOR_CMD entry to each table file. (2/11)
vms/hlib/clpackage.cl
vms/hlib/zzsetenv.def
Since the CL is an IRAF task run from the host, it reads the default
zzsetenv.def file during startup. Since this file already defines
all the logical directories, I moved the remaining non CL specific
SET definitions from clpackage.cl to zzsetenv.def. The clpackage.cl
file is now machine and site independent, and is one less file to
have to worry about during an installation. Since the system package
is loaded during startup now, I also replaced the fscan stuff, used
to type the message of the day, by a call to PAGE. (2/12)
sys/ki/kishownet.x
pkg/system/netstatus.x
pkg/system/system.cl,x_system.x
Added function ki_shownet (outfd), used to print the network status.
Added a task NETSTATUS to the system package which simply calls the new
function and prints the network status as seen by x_system.e. (2/12)
dev/hosts
dev/uhosts
Updated these tables. (2/12)
vms/os/zopdpr.c
This interface routine was modified to give the user more control over
the priority of "interactive" background jobs (bkg jobs run as
subprocesses, rather than in a batch queue). The syntax is as follows:
& [+|-]N
where +(-) causes the bkg job to run at a higher(lower) priority than
the parent, and N is a decimal number. If neither + or - appears N is
the absolute priority of the process.
For example,
&15 run job at priority level 15
&-1 run job at a priority one level down
The default if nothing is specified is to run the job at a priority
level one less that that of the parent. (2/12)
vms/os/zgtenv.c
This procedure was returning ERR if it could not find the name or the
output string overflowed. Changed to return 0, as is the standard for
operators that return string values. (2/12)
iraf$mkpkg
Added an "update" entry point to the root mkpkg, so that I don't
have to run update twice in sys and pkg when relinking the system.
(2/12)
dev/edt.ed
dev/emacs.ed
Added the NEXT_PAGE and PREV_PAGE operators as indicated in the ST
notesfile, received last month in the mail (the VI edcap file was
updated some time ago). There was a conflict for EDT; there was a
duplicate entry for MOVE_START which used the same code as one of
the new commands (keypad-7). I solved the problem by deleting the
duplicate entry. (2/12)
pkg/cl/builtin.c
Everywhere there was a reference to the _pname (physical task name)
for an executable file, added a call to findexe() to get the name
of the executable which is actually used. If this is not done,
things like testing to see if a process is in the cache (prc, flpr)
fail. (2/12)
sys/sys.hd
host/os/doc/os.hd
Changed sys$ references to host$ references to reflect the relocation
of OS to the HOST directories. (2/12)
pkg/images/tv/cv/ids/idsfont.x
pkg/images/tv/cv/iism70/idsoptn.x -
There was a name collision with the routines IDS_OPEN and IDS_OPTN.
The latter was a no-op in any case, so I deleted it and commented
out the only reference to it in IDS_FONT. (2/13)
sys/gio/cursor/grcwaitp.x
Modified to display the "wait" message again after the user responds
to the previous "wait" with a space bar, causing the system help
to be printed. (2/13)
dev/termcap
dev/graphcap
Added a few new entries to each file, contributed from our early
test sites. Updated the cached entries. (2/13)
pkg/language/*
Extensively revised, edited, corrected, extended, brought up to
date, added new examples, etc. the manual pages for the CL.
Most of the changes were minor, but some important new material
was added. Manual pages were added for those tasks added since
the docs were originally written. A manual page CURSORS was
added for cursor mode. The BEGIN and END manual pages were
deleted since these keywords are merely components of the PROCEDURE
declaration, not entities in themselves. (2/12-13)
softools/*.hlp
Added manual pages for all the softools utilities, including all
bootstrap utilities (generic, mkpkg, rtar, wtar, rmbin, mkhelpdb,
hdbexamine, mkmanpage, etc.). (2/13)
pkg/cl/builtin.c
Deleted a couple of task placeholder entries for the language package
and added a couple others, so that "? lan" will prompt with a certain
set of tasks or functions. The keywords and common intrinsic fcns
are excluded. (2/15)
dev/termcap
Added a new device entry VMSPRINT, used to queue print jobs to the
standard VMS print queue SYS$PRINT. (2/15)
sys/imio/imfort/ +
vms/os/zgcmdl.c +
Added a new interface IMFORT, the Fortran programmer's interface to
IRAF images. This is implemented as the library lib$libfort.a.
Linking requires also libsys.a, libvops.a, and libos.a. Documentation
is in the README file, and a manual is on the way. The interface is
minimal at present.
A new routine, ZGCMDL, was added to the kernel to support IMFORT
(I also have plans for it for the LIBC interface, to be able to
emulate main(argc,argv)). This in available in IMFORT as the
Fortran callable procedure GCMDLN. The idea is that the user
interfaces their Fortran (or C) program to the CL as a foreign task,
then calls it with arguments like any other task. The Fortran program
gets the command line and parses it in memory to get the arguments.
(1/17)
vms/os/zfiopr.c
We have been having problems connecting subprocesses, so I added a
call to _zerror if the create and/or map global section fails when
setting up IPC, so that hopefully we can determine why. (2/18)
sys/etc/propcpr.x
A very minor change, while looking over this code. Added an errchk
for the syserr SYS_PROVFL, to prevent a memory overrun in the event
that there are no more process slots. (2/18)
vms/hlib/gripes.cl
Modified the gripes script to send the entire text of the gripe to
IRAF (as in UNIX/IRAF), rather than just a line stating that a gripe
has been posted. On our system, mail to IRAF on any node is
forwarded to a central node, with the mail file for IRAF on that
node serving as the central gripes database. A copy of the gripe
is still appended to the gripesfile on the local node. The temporary
file was moved from TMP to UPARM and the extension ".txt" was added
to keep VMS mail happy. The second temporary file for the mail
message is no longer created, since the osfn() function now allows
us to pass the host name of the first tempfile to the host mail
program. (2/19)
vms/os/zfiopr.c
Installed a new version of this driver from ST, which should fix
the IPC connect failure problem we have been experiencing lately.
ST went though the same thing several weeks ago. The problem was
traced to a SECTBLFUL (section table full) problem in VMS. This is
fixable by rebuilding VMS with a larger table (param GBLPAGFIL),
but the new driver will hopefully avoid the problem altogether,
avoiding the need for sites istalling IRAF to change a system
parameter. The recent debug_ipc mods were merged into the new
driver. (2/19)
exception handling [UNRESOLVED]
After relinking the system with the new IPC driver from ST, we had
problems when interrupting subprocesses. Relinking with the old
IPC driver helped, but while testing I continued to have problems
with exception handling. Nothing I have done in recent history
should have anything to do with these problems, so I ran the same
tests on an executable in the old system (untouched for some months).
Exactly the same thing happened there, so evidently the problem has
been with us for some time.
The test is this: I run the x_system.e process standalone, entering
the command "count files=*.x", and then <ctrl/c> interrupt the
task while it is running. Five times out of six, or thereabouts,
it will work, going through error recovery successfully. When it
fails VMS prints the message "improperly handled condition" along
with a dump of the stack and registers, and does a panic shutdown of
the process. This is preceeded by an access violation message.
--------------------------------------------------------------------------
VMS/IRAF V2.2 frozen on 21 Feb.
vms/hlib/mkpkg.e
Relinked; old executable was using an obsolete version of zgetenv
that had a bug. (3/4)
pkg/cl/config.h
Doubled the size of the stack and increased the dictionary from 20K
to 30K. (3/6)
dev/termcap
Added an entry for device "imagend", the new imagen on node draco,
plus an alias "imagena" for the original imagen on node aquila. (3/13)
sys/ki/kireceive.x
Will now echo "out of band" error messages to STDERR, prefixed by
the node name, before returning ERR on the kernel server channel.
(3/14)
sys/osb/miiupk16.x
sys/osb/miiupk32.x
These procedures were modifying their input arguments. (3/14)
mkpkg, zgtenv.c [OBSERVATION]
We are running with two different versions of the system, IRAF and
IRAFX. When I linked a process with mkpkg from the IRAFX CL I found
that the old IRAF libraries were being used. The pathnames in the
global <iraf.h>, read by ZGTENV when it cannot find IRAF etc. in
the VMS tables, were still set for the old system. After editing
<iraf.h> and repeating the mkpkg, the IRAFX libraries were accessed.
This proves that indeed the logical names are NOT always getting passed
down through all the process spawns, and the new ZGTENV facility is
doing its job. (3/14)
|