Defend us from VMS! (etc)
Mike A. Gigante
mg at cidam.rmit.oz
Mon Mar 7 23:45:33 AEST 1988
I'm very quick to criticize the quality of the standard f77, many of
the fortran programs we have hanging around here cause most vanilla
f77s to page themselves to death, take forever to compile and run
(relatively) slowly. However there *ARE* good unix f77 compilers
available; we use SVS (Silicon Valley Software) here and there are
others (such as ABSOFT). I have previously posted some comparisons
b/n SVS and f77 (a long time ago), suffice to say they are stunning.
However, I should point out that we personally don't write much in
fortran here and haven't for a long time...
But now, to show those unix programmers what wonderful things are missing from
f77 and friends, we have a VMS fortran programmers masterpiece.
I expect that this will cause campuses all over the world to chuck out those
Unix tapes, purge those disks, trade in all those suns/apollos/irises etc
so as to buy vaxes to run VMS fortran on :-)
-----------------------------
C------------------------------------------------------------------
C Contains only one subroutine ACCESS
C------------------------------------------------------------------
SUBROUTINE ACCESS(I7)
IMPLICIT INTEGER*4(A-Z)
INCLUDE '($SMGDEF)'
CHARACTER*18 CMPF,MNS
CHARACTER*40 AVAL,K
CHARACTER*12 ID,bns,AVIND
CHARACTER*3 GOID,GO
CHARACTER*10 bmpf
CHARACTER*5 ART_QUAN,ART_LEVEL
REAL*8 DECVAL,DECVAL1
INCLUDE 'COMMON.FOR'
DIMENSION K(100,1)
STRUCTURE/FILE_STRUC/
CHARACTER*12 ART_NO
CHARACTER*12 ART_DESC
INTEGER*4 ART_QUAN
INTEGER*4 ART_LEVEL
CHARACTER*8 DUMMY
END STRUCTURE
RECORD/FILE_STRUC/FILEREC
STATUS = SMG$CREATE_PASTEBOARD(PI,,,,)
STATUS = SMG$CREATE_VIRTUAL_DISPLAY(20,78,SED,SMG$M_BORDER,,)
STATUS = SMG$CREATE_VIRTUAL_KEYBOARD(KEY)
STATUS = SMG$PASTE_VIRTUAL_DISPLAY(SED,PI,2,2)
OPEN(UNIT = 26,
1 FILE = 'SEARCH.DAT',
1 ORGANIZATION = 'INDEXED',
1 ACCESS = 'KEYED',
1 STATUS = 'UNKNOWN',
1 RECL = 40,
1 KEY = (1:12:CHARACTER),
1 RECORDTYPE = 'VARIABLE')
40 STATUS = SMG$PUT_CHARS(SED,'WHAT IS THE ARTICLE NUMBER OF THE PART
1 PLEASE?',4,10,,,,)
STATUS = SMG$SET_CURSOR_ABS(SED,5,15)
STATUS = SMG$READ_STRING(KEY,ID,'->>',12,,,,TEXT_SIZE,,SED)
READ(UNIT=26,KEY= ID,KEYID = 0,IOSTAT=IER,ERR=22)FILEREC
DECVAL = FLOAT(FILEREC.ART_QUAN)
call onvrt(art_quan,decval,2)
DECVAL1 = FLOAT(FILEREC.ART_LEVEL)
call onvrt(art_LEVEL,decval1,2)
STATUS = SMG$PUT_CHARS(SED,'ARTICLE NUMBER :',6,10,,,,)
STATUS = SMG$PUT_CHARS(SED,FILEREC.ART_NO,6,30,,,,)
STATUS = SMG$PUT_CHARS(SED,'DESCRIPTION :',8,10,,,,)
STATUS = SMG$PUT_CHARS(SED,FILEREC.ART_DESC,8,30,,,,)
STATUS = SMG$PUT_CHARS(SED,'QUANTITY PER PART :',10,10,,,,)
STATUS = SMG$PUT_CHARS(SED,ART_QUAN,10,30,,,,)
STATUS = SMG$PUT_CHARS(SED,'ASSEMBLY LEVEL :',12,10,,,,)
STATUS = SMG$PUT_CHARS(SED,ART_LEVEL,12,30,,,,)
22 IF(IER.EQ.36)THEN
STATUS = SMG$PUT_CHARS(SED,'ARTICLE NUMBER IS NOT ON FILE,SORRY !'
1,8,10,,,,)
STATUS = SMG$PUT_CHARS(SED,'DO YOU WISH TO GO AGAIN (Y/N)'
1,9,10,,,,)
STATUS = SMG$SET_CURSOR_ABS(SED,10,15)
STATUS = SMG$READ_STRING(KEY,GOID,'->>',3,,,,TEXT_SIZE,,SED)
STATUS = STR$UPCASE(GO,GOID)
STATUS = SMG$ERASE_DISPLAY(SED)
IF(GO.EQ.'Y')GO TO 40
GO TO 60
END IF
50 STATUS = SMG$PUT_CHARS(SED,'DO YOU WISH TO GO AGAIN (Y/N)'
1,14,10,,,,)
STATUS = SMG$SET_CURSOR_ABS(SED,15,15)
STATUS = SMG$READ_STRING(KEY,GOID,'->>',3,,,,TEXT_SIZE,,SED)
STATUS = SMG$ERASE_DISPLAY(SED)
STATUS = STR$UPCASE(GO,GOID)
IF(GO.EQ.'Y')GO TO 40
60 STATUS = SMG$DELETE_PASTEBOARD(PI)
STATUS = SMG$DELETE_VIRTUAL_DISPLAY(SED)
STATUS = SMG$DELETE_VIRTUAL_KEYBOARD(KEY)
9999 CLOSE(UNIT= 26)
RETURN
END
*
*
------------------------------
I think I'll g and read some JCL tonight, it'll put me in the mood
to appreciate more of this wonderful VMS fortran.
(seriously, give an engineer enough rope and they'll hang themselves!
This rather extreme example illustrates just how far from standard
fortran you can go...)
More information about the Comp.unix.wizards
mailing list