home *** CD-ROM | disk | FTP | other *** search
/ The Best of Select: Windows 95 Special 1 / WINDOWS95_1.ISO / utils / w32-rex / regina / srccode / readme.vms < prev    next >
Text File  |  1993-05-09  |  12KB  |  259 lines

  1. Regina has support for VAX/VMS, but due to lack of time (and more
  2. recently: lack of a machine for testing), I have not yet tested it on
  3. as many different VMS machines as I wanted. I hope it will be of use,
  4. and I will try to clear up the remaining problems later. Please feel
  5. free to send me comments and suggestions on how Rexx should be
  6. implemented under VMS.
  7.  
  8. There are a few details in the implementation.
  9.  
  10. 1) You need the files vmsfuncs.c and vmscmd.c in addition to the rest
  11.    of the files. These files are not used on non-VMS machines. 
  12.  
  13. 2) The makefile may not work. There is a simplified makefile.vms,
  14.    which I've been using myself, but as far as I know, there are
  15.    several different versions of make for VMS, and not all are
  16.    compatible, so my makefile may not work for you.
  17.  
  18.    If the makefile doesn't work, just compile all c code, and link it
  19.    all together. 
  20.  
  21. 3) The lex and yacc code may be a bit of a problem. There are mainly
  22.    two ways to fix it: either install the gnu versions of lex and yacc
  23.    (called flex and bison) on VMS, or run lex and yacc on a Unix
  24.    machine, transferring the resulting C code to the VMS machine
  25.    afterwards. You may run into several problems here. Among other
  26.    things, not all versions of yacc seems to produce code that are
  27.    correct. 
  28.  
  29.    The best result has been with flex version 2.3, and yacc on SunOS,
  30.    I don't know why, but output from yacc from Ultrix seems to give
  31.    occational syntax errors. It *may* be an error in yacc under
  32.    Ultrix, but I havn't really tracked the problem well enough to say
  33.    for sure.
  34.  
  35. Regina has been extended with a set of functions which are equivalent
  36. to the DCL lexical functions. Only in a few areas do they differ:
  37.  
  38. 1) The DCL lexial functions may be abbreviated (as long as they are 
  39.    unique. However, in Rexx, the concept of abbreviateable function 
  40.    names does not exist, and you are required to spell the function's
  41.    name completely.
  42.  
  43. 2) DCL devide messages into fatal, severe, error, warning and
  44.    informational. And some function may flash warnings or
  45.    informational messages on the screen without interrupting the
  46.    program. However, in Regina, 
  47.  
  48. 3) There may be some slightly different conditions on the format of
  49.    parameters in Regina than in DCL, e.g. where padding of spaces are
  50.    allowed or which characters are whitespace. This is mostly due to
  51.    VMS not completely defining these in "DCL Dictionary". I'll
  52.    consider fixing any such inconsistence that comes to my attention. 
  53.  
  54. 4) The two functions f$environment() and f$verify() are not
  55.    implemented. These are functions that operates on the internal
  56.    variables of the DCL CLI itself, and I don't have enough
  57.    documentation to implement them. (Implementing the KNOWN item of
  58.    f$file_attributes() was bad enough!) Besides there are some
  59.    problems and questions related to these, that I am not sure how to
  60.    answer:
  61.  
  62.       a) Should they refer to data in Regina rather than the DCL CLI?
  63.          E.g. should f$environment('depth') return? The depth of
  64.          routines in Regina, or in DCL?. 
  65.  
  66.       b) If it should refer to data in DCL rather than in Regina
  67.          (which I think it should), should it refer to data in the
  68.          caller (the process that started Regina) or data in the DCL
  69.          CLI that performs commands?
  70.  
  71.       c) In case they refer to the DCL CLI that performs commands, the
  72.          result of these functions may even depend upon the
  73.          environment chosen.
  74.    
  75.  
  76.  
  77. Some of these function provides information about the system, and some
  78. of them are purly utility functions that perform similar tasks under
  79. DCL that the builtin-in functions do under Rexx. For completeness, I
  80. have included all functions, but I strongly recommend that you use the
  81. Rexx built-in functions instead the the DCL lexical functions, where
  82. possible. The DCL lexical functions that are more or less duplication
  83. of functionality that already exists in Rexx are:
  84.  
  85.    F$LOCATE, F$LENGTH, F$INTEGER
  86.  
  87. The lexical functions that are implemented are listed below, with a
  88. very short description. For a more complete discussion of these
  89. functions, see the VAX/VMS documentation on lexical functions.
  90.  
  91.    F$CVSI()
  92.    F$CVTIME()
  93.    F$CVUI()
  94.  
  95.    F$DIRECTORY() -- returns the name of the current default directory,
  96.          not that the name of the current device is not returned as a 
  97.          part of this string.
  98.  
  99.    F$EDIT(string,operations) -- Returns 'string', after having done
  100.          some operations on it. The parameter 'operations' is a comma
  101.          separated list of operations, which may be:
  102.   
  103.           COLLAPSE -- remove all whitespace in 'string'
  104.           COMPRESS -- compress all consequitive whitespace to exactly
  105.              one space character
  106.           LOWERCASE -- convert all uppercase character to lower case
  107.           TRIM -- remove leading and trailing whitespace from 'string'
  108.           UNCOMMENT -- remove comments from 'string', a comment is 
  109.              started by the '!' character.
  110.           UPCASE -- convert all lowercase character to upper case.
  111.  
  112.    F$ELEMENT(num,delim,string) -- Interprets 'string' as a set of 
  113.         substrings, delimited by the 'delim' character, and returns
  114.         the num'th such substring. The first substring (before the
  115.         first delimiter) is numbered 0.
  116.  
  117.    F$ENVIRONMENT(item) -- Currently not implemented.
  118.  
  119.    F$EXTRACT(start,length,string) -- Extract a substring from 'string'
  120.    
  121.         which starts at the start'th character, and is 'length'
  122.         characters long. The first character in 'string' is numbered
  123.         0. 'string' is not padded if 'start' and 'length' refers to 
  124.         more characters than 'string' contains.
  125.  
  126.    F$FAO(...)
  127.  
  128.    F$FILE_ATTRIBUTES(file,item) -- A piece of information (specified
  129.         by 'item') about the file 'file' is returned. The legal
  130.         'item's are:
  131.  
  132.           ALQ, BDT, BKS, BLS, CBT, CDT, CTG, DEQ, DID, DVI, EDT, EOF,
  133.           FID, FSZ, GRP, KNOWN, MBM, MRN, MRS, NOA, NOK, ORG, PRO, PVN,
  134.           RAT, RCK, RDT, RFM, RVN, UIC, WCK
  135.  
  136.    F$GETDVI(device,item) -- Return information about the named device
  137.         'device', which information is specified by 'item'. The legal
  138.         values of 'item' are:
  139.  
  140.           ACPPID ACPTYPE ALL ALLDEVNAM ALLOCLASS ALT_HOST_AVAIL
  141.           ALT_HOST_NAME ALT_HOST_TYPE AVL CCL CLUSTER CONCEALED
  142.           CYLINDERS DEVBUFSIZ DEVCHAR DEVCHAR2 DEVCLASS DEVDEPEND
  143.           DEVDEPEND2 DEVLOCKNAM DEVNAM DEVSTS DEVTYPE DIR DMT DUA ELG
  144.           ERRCNT EXISTS FOD FOR FREEBLOCKS FULLDEVNAM GEN HOST_AVAIL
  145.           HOST_COUNT HOST_NAME HOST_TYPE IDV LOCKID LOGVOLNAM MAXBLOCK
  146.           MAXFILES MBX MEDIA_ID MEDIA_NAME MEDIA_TYPE MNT MOUNTCNT NET
  147.           NEXTDEVNAM ODV OPCNT OPR OWNUIC PID RCK RCT REC RECSIZ
  148.           REFCNT REMOTE_DEVICE RND ROOTDEVNAM RTM SDI SECTORS
  149.           SERIALNUM SERVED_DEVICE SHR SPL SPLDEVNAM SQD STS SWL TRACKS
  150.           TRANSCNT TRM TT_ACCPORNAM TT_ALTYPEAHD TT_ANSICRT
  151.           TT_APP_KEYPAD TT_AUTOBAUD TT_AVO TT_BLOCK TT_BRDCSTMBX
  152.           TT_CRFILL TT_DECCRT TT_DECCRT2 TT_DIALUP TT_DISCONNECT
  153.           TT_DMA TT_DRCS TT_EDIT TT_EDITING TT_EIGHTBIT TT_ESCAPE
  154.           TT_FALLBACK TT_HALFDUP TT_HANGUP TT_HOSTSYNC TT_INSERT
  155.           TT_LFFILL TT_LOCALECHO TT_LOWER TT_MBXDSABL TT_MECHFORM
  156.           TT_MECHTAB TT_MODEM TT_MODHANGUP TT_NOBRDCST TT_NOECHO
  157.           TT_NOTYPEAHD TT_OPER TT_PAGE TT_PASTHRU TT_PHYDEVNAM
  158.           TT_PRINTER TT_READSYNC TT_REGIS TT_REMOTE TT_SCOPE TT_SECURE
  159.           TT_SETSPEED TT_SIXEL TT_TTSYNC TT_SYSPWD TT_WRAP UNIT
  160.           VOLCOUNT VOLNAM VOLNUMBER VOLSETMEM VPROT WCK
  161.  
  162.    F$GETJPI(process,item) -- Return information about the specified
  163.           process 'process', which information to return is specified
  164.           by 'item'. The legal values of 'item' are:
  165.  
  166.    F$GETQUI(func,item,object,flags) -- Return information about a
  167.           queue, or something related to a queue. 'func' is the
  168.           particular funtion to perform, while 'item' is the piece of
  169.           information to return. You may regard 'func' and 'item' as a
  170.           sort of two-level item code. The 'object' names an object
  171.           (e.g. a queue or a spool file) that the function is to
  172.           return information about. 'flags' is used to select the
  173.           scope of the function, e.g. only to certain jobs or certain
  174.           queues. 
  175.  
  176.           Note that only certain combinations of the four parameters
  177.           are legal, and refer to the VMS manuals for more
  178.           information. 
  179.  
  180.    F$GETSYI(item[,node]) -- Return information about the system. The
  181.           'item' specifies which information to return, which the
  182.           optional parameter 'node' can be used to select a particular
  183.           node. If 'node' is omitted, the local node is used. The
  184.           legal values for 'item' are:
  185.  
  186.              ARCHFLAG BOOTTIME CHARACTER_EMULATED CPU DECIMAL_EMULATED
  187.              D_FLOAT_EMULATED ERRORLOGBUFFERS F_FLOAT_EMULATED
  188.              G_FLOAT_EMULATED PAGEFILE_FREE PAGEFILE_PAGE SID
  189.              SWAPFILE_FREE SWAPFILE_PAGE VERSION ACTIVECPU_CNT
  190.              AVAILCPU_CNT CLUSTER_FSYSID CLUSTER_FTIME CLUSTER_MEMBER
  191.              CLUSTER_NODES CLUSTER_QUORUM CLUSTER_VOTES
  192.              CONTIG_GBLPAGES FREE_GBLPAGES FREE_GBLSECTS HW_MODEL
  193.              HW_NAME NODENAME NODE_AREA NODE_CSID NODE_HWTYPE
  194.              NODE_HWVERS NODE_NUMBER NODE_QUORUM NODE_SWINCARN
  195.              NODE_SWTYPE NODE_SWVERS NODE_SYSTEMID NODE_VOTES
  196.              SCS_EXISTS
  197.  
  198.    F$IDENTIFIER(id,conv) -- Takes the 'id' and converts to another
  199.           format, depending on the value of 'conv'. 'conv' may only
  200.           take the values:
  201.  
  202.             NAME_TO_NUMBER -- 'id' is a alphanumeric identifier, which
  203.               is to be converted into numeric format.
  204.  
  205.             NUMBER_TO_NAME -- 'id' is a numberic identifier, whic is
  206.               to be converted into alphanumeric format.
  207.  
  208.    F$INTEGER(number) -- In DCL, this function converts between the
  209.           internal format of a number, and the ASCII representation of
  210.           a the same numeric value. In Rexx however, numbers are
  211.           stored as their character string format, so there aren't two
  212.           format to convert between. Consequently, this is almost a
  213.           no-op function, the only task it performs is to normalize
  214.           'number'. 
  215.  
  216.    F$LENGTH(string) -- Returns the length of 'string', same as Rexx
  217.           built-in function length()
  218.  
  219.    F$LOCATE(substring,string) -- Seeks for 'substring' in 'string',
  220.           and if a match is found, it returns the number of the first
  221.           character of the first match. The first character of
  222.           'string' is numbered 0. If no match is found, -1 is
  223.           returned.
  224.  
  225.    F$LOGICAL(name) -- Retrieves the logical name for 'name'. This
  226.           function has be obsoleted by the F$TRNLNM() function, and
  227.           you should use that instead.
  228.  
  229.    F$MESSAGE(code) -- Returns the message assiciated with the numeric
  230.           (error-)code 'code'. Note that this message may include
  231.           formatting information (F$FAO-codes).
  232.  
  233.    F$MODE() -- Returns one of "BATCH", "NETWORK", "OTHER" or
  234.           "INTERACTIVE", depending on the current mode of operation
  235.           for the process running the interpreter. 
  236.  
  237.    F$PARSE(file,default,related,field,type) -- Parses (in the DCL
  238.           sence) 'file', which must be a file specification, and
  239.           return parts of it, possibly after filling out missing
  240.           parts. The parameters 'default' and 'related' contain
  241.           filename specification which is interpreted as defaults for
  242.           missing fields in 'file'. The 'field' refers to which
  243.           particular field to extract, and can be one of NODE, DEVICE,
  244.           DIRECTORY, NAME, TYPE or VERSION. The 'type' can be empty,
  245.           or either NO_CONCEAL or SYNTAX_ONLY. 
  246.  
  247.    F$PID(context)
  248.    F$PRIVILEGES()
  249.    F$PROCESS()
  250.    F$SEARCH()
  251.    F$SETPRV()
  252.    F$STRING()
  253.    F$TIME()
  254.    F$TRNLNM()
  255.    F$TYPE()
  256.    F$USER()
  257.  
  258.  
  259.