.TITLE CSI COMPATABILITY ROUTINES .SBTTL INTRODUCTION ; INTRODUCTION - CSI COMPATABILITY ROUTINES ; ; THIS IS A BRIEF INTRODUCTION TO THE USAGE OF FORTRAN COMPATABLE ; COMMAND STRING INTERPRETER SUBROUTINES. A MORE FORMAL DESCRIPTION ; OF THE ARGUMENTS FOLLOWS THIS INTRODUCTION. AN EFFORT HAS BEEN ; MADE TO MAKE THE CALLING SEQUENCES AS SIMILAR AS POSSIBLE TO THE ; "CSI$" MACROS, WHOSE DOCUMENTATION CAN BE FOUND IN THE RSX11D ; I/O OPERATIONS MANUAL, SECTION 6. REFERENCE TO THIS MANUAL IS ; SUGGESTED IF ANY FURTHER QUESTIONS EXIST. ; THE COMMAND STRING INTERPRETER IS USED TO PARSE COMMAND STRINGS ; WHICH CONSIST OF INPUT AND OUTPUT FILE SPECIFICATIONS. EACH ; SPECIFICATION CONSISTS OF SEVERAL PARTS, ALL OF WHICH ARE OPTIONAL. ; THE PARTS ARE: DEVICE NAME AND NUMBER, UIC, FILE NAME, EXTENSION, ; VERSION NUMBER, AND SWITCHES AND ASSOCIATED SWITCH VALUES. ; A SAMPLE SPECIFICATION IS: ; ; DK0:[1,1]SAMPLE.EXT;1/SW:1:2/NOSS ; ; THE SYNTAX OF THE COMMAND STRING CONSISTS OF 2 LISTS OF ; FILE SPECS SEPARATED BY AN EQUALS SIGN '='. EACH LIST CONSISTS OF ; FILE SPECS SEPARATED BY COMMAS. THE LEFT LIST IS CALLED THE ; OUTPUT LIST, AND THE RIGHT SIDE IS THE INPUT LIST. IF THE '=' IS ; ABSENT THEN ONLY ONE LIST IS USED, THE OUTPUT LIST. ; FOR EITHER SIDE, THE DEVICE NAME AND NUMBER, AND THE UIC ARE SPECIAL ; IN THAT, ONCE SPECIFIED, THEY CAN ACT AS DEFAULTS FOR THE REST ; OF THE LIST. THUS CONSECUTIVE CALLS TO "CSISTR" (DEFINED BELOW) FOR ; THE STRING: ; ; TEST1.TMP;1,DK0:[1,1]TEST2.TMP,TEST3.TMP,DK2:TEST4=TEST5 ; ; WILL PRODUCE: ; ; TEST1.TMP ; DK0:[1,1]TEST2.TMP ; DK0:[1,1]TEST3.TMP ; DK2:[1,1]TEST4 ; TEST5 ; ; NOTE THAT CHANGING SIDES CANCELS OUT BOTH DEVICE NAME AND UIC (TEST5). ; THE SYNTAX AND USE OF THE SWITCHES, WHICH CAN BE APPENDED TO ANY ; OF THE FILE SPECIFICATIONS, WILL BE EXPLAINED FULLY BELOW. BRIEFLY, ; A SPECIFICATION OF THE FORM '/SW', IF EXPECTED, CAN BE MADE TO SET ; A FLAG FOR THE USER TO TEST. NEGATION OF SWITCHES IS POSSIBLE; ; EITHER THE FORM '/-SW' OR '/NOSW', WHICH ARE EQUIVALENT, CAN BE USED. ; THE PROGRAM CAN THEN DETERMINE BOTH THAT THE SWITCH WAS PRESENT AND ; ITS SENSE. SWITCHES MAY ALSO HAVE ONE OR MORE VALUES WHICH CAN BE ; ASCII OR OCTAL/DECIMAL NUMERIC. THESE FOLLOW THE CORRESPONDING SWITCH ; SEPARATED BY COLONS (':'). A SWITCH SPECIFICATION CAN ONLY BE USED ; WHERE A TABLE HAS BEEN PROVIDED TO INTERPRET THE SWITCH. ANYWHERE ; ELSE, THEY CAUSE A NON-FATAL ERROR. ; THE SUBROUTINE CALLS TO SET UP AND EXECUTE THE COMMAND STRING ; INTERPRETER WILL NOW BE BRIEFLY DESCRIBED, FOLLOWED BY A SAMPLE ; PROGRAM. FOLLOWING THIS WILL BE THE FULL DEFINITIONS OF EACH CALL. .SBTTL BRIEF DESCRIPTION ; ; ; THE CALLS TO BE DESCRIBED ARE LOGICALLY DIVIDED INTO 3 TYPES, ; THOSE THAT DO THE PARSING, THOSE THAT SET UP TABLES, AND THOSE THAT ; RETURN PARSED INFORMATION. ; .SBTTL PARSING ROUTINES. ; ; THERE ARE TWO ROUTINES, "CSI1" AND "CSI2", FOR PARSING. EACH USES ; A 22 WORD ARRAY CALLED CSIBLK, WHICH IS THE FIRST ARGUMENT TO EACH ONE. ; A SAMPLE CALL TO "CSI1" IS: ; ; CALL CSI1(CSIBLK,CMDSTR,LENGTH,IER) ; ; CSIBLK IS THE ABOVE MENTIONED 22 WORD ARRAY. THE PROGRAMMER NEED ; NOT DO ANYTHING WITH IT, IN FACT, SHOULD NOT EVEN TOUCH IT! THE ; SECOND ARGUMENT IS A BYTE ARRAY HOLDING THE COMMAND STRING, AND THE ; THIRD IS THE LENGTH OF THIS STRING. THE LAST ARGUMENT IS AN ERROR ; RETURN CODE WHOSE VALUE WILL BE NEGATIVE IF AN ERROR OCCURS. "CSI1" ; CHECKS THE SYNTAX OF THE WHOLE COMMAND STRING AND COMPRESSES OUT ; BLANKS, TABS, AND NULLS. IF A SYNTAX ERROR OCCURS, THE OFFENDING ; SPECIFICATION CAN BE FETCHED WITH "CSISTR". ; THE SECOND OF THE PARSING ROUTINES IS "CSI2". IT IS POSSIBLE TO ASK, ; IN THE CALL, FOR THE NEXT INPUT OR OUTPUT STRING, AND THE SWITCHES ; PRESENT IN THAT SPECIFICATION. AFTER A SUCCESFUL CALL TO CSI2, ; THE COMPLETE FILE SPECIFICATION, WITHOUT SWITCHES CAN BE RETRIEVED ; WITH "CSISTR". A SAMPLE CALL TO "CSI2" IS: ; ; CALL CSI2(CSIBLK,'OUTPUT',SWTAB,IER) ; ; WHERE THE FIRST ARGUMENT IS THE CSIBLK INITIALIZED BY "CSI1", THE ; SECOND IS EITHER 'INPUT' OR 'OUTPUT', FOR OBVIOUS REASONS, AND ; THE THIRD IS A SWITCH TABLE ARRAY PREPARED BY CSISW AND CSIND. ; THE LAST, AGAIN, IS AN ERROR RETURN, AND IF NEGATIVE, USUALLY MEANS ; SOME ERROR IN SWITCH PARSING (NONEXISTANT SWITCHES,ETC.). ; EACH CALL TO "CSI2" WILL PARSE THE NEXT SPECIFICATION IN THE LIST ; UNTIL "CSIMOR(CSIBLK)" IS FALSE (SEE "CSIMOR"). ; .SBTTL ROUTINES FOR RETRIEVING INFORMATION. ; ; THE MOST IMPORTANT OF THESE ROUTINES IS "CSISTR", WHICH GETS ; THE MOST RECENTLY PARSED FILE SPECIFICATION. THE OTHER ROUTINES ; IN THIS GROUP ARE: "CSIDEV", "CSIUIC", "CSINAM", "CSIMOR", ; "CSIEQU", "CSIFNM", "CSIDIR", "CSIDVN", AND "CSIMSK". ; THE CALL TO "CSISTR" IS: ; ; CALL CSISTR(CSIBLK,STRING,LENGTH) ; ; CSIBLK IS AS ABOVE. THE SECOND ARGUMENT IS A BYTE ARRAY OF A ; LENGTH SUITABLE FOR A COMPLETE FILE SPECIFICATION (34 IS MAXIMUM ; POSSIBLE). THE RETURNED STRING WILL RETURN ANY PREVIOUSLY PARSED ; DEVICE AND UIC ENTRIES, AS WELL AS THE MOST RECENT FILE NAME, EXTENSION ; AND VERSION. TO SEE IF THE FILE NAME WAS BLANK, "CSIFNM" IS AVAILABLE ; TO TEST FOR THIS POSSIBILITY. "CSISTR" ALSO RETURNS THE PORTION OF ; THE COMMAND STRING IN ERROR IF "CSI1" DETECTS A SYNTAX VIOLATION. ; THE CALLS TO THE FLAG CHECKING ROUTINES, "CSIEQU","CSIMOR", ; "CSIDIR", "CSIDVN", AND "CSIFNM" ARE ALL THE SAME. THESE ARE ALL ; LOGICAL FUNCTIONS, I.E., THEY RETURN '.TRUE.' OR '.FALSE.' TO A ; PROGRAM, (-1 OR 0, RESP.). THE METHOD OF CALL IS: ; ; IF (CSI???(CSIBLK)) DO-SOMETHING ; ; WHERE ??? IS ONE OF "EQU", "MOR", "FNM", "DIR", "DVN", TO DETECT ; THE PRESENCE OF AN EQUAL SIGN ('='), COMMA (','), OR FILE NAME ; (AS OPPOSED TO JUST A DIRECTORY AND/OR DEVICE). TO CHECK FOR THE EQUAL ; SIGN, "CSI1" MUST HAVE BEEN PREVIOUSLY CALLED WITH CSIBLK; "CSI2" MUST ; BE CALLED TO SET THE OTHER FLAGS. THE PRESENCE OF A COMMA ("CSIMOR") ; INDICATES THAT THERE ARE "MORE" SPECIFICATIONS IN THIS LIST (EITHER ; INPUT OR OUTPUT). WARNING: "CSIEQU" MUST BE CALLED BEFORE "CSI2" HAS ; BEEN CALLED, AS "CSI2" RESETS THE FLAG. ; "CSIMSK" IS USED TO RETRIEVE THE MASK WORDS SET BY THE SWITCHES (IF ; ANY) IN THE FILE SPECIFICATION (SEE SWITCH TABLE DESCRIPTION). THE ; CALL IS: ; ; CALL CSIMSK(CSIBLK,MASK1,MASK2) ; ; WHERE MASK1 AND MASK2 ARE THE WORDS CONTAINING THE PRESENCE AND SENSE ; BITS, RESPECTIVELY, FOR THE SWITCHS IN THE MOST RECENT PARSED SPEC- ; IFICATION. ; .SBTTL ROUTINES TO SET-UP SWITCH TABLES ; ; A VERY IMPORTANT, AND SOMEWHAT COMPLEX, CAPABILITY OF THE CSI PACK- ; AGE IS THE PROCESSING OF SWITCHES. THESE TAKE THE FORM OF A SLASH ("/") ; FOLLOWED BY A 2 LETTER SWITCH NAME (POSSIBLY NEGATED BY "NO" ; OR "-"), AND OPTIONAL SWITCH VALUES SEPARATED BY COLONS (":"). ; THE ROUTINES USED TO SET UP THE SWITCH NAMES AND VALUE TABLES ; ARE: "CSIINI", "CSISW", "CSISV", AND "CSIND". "CSISW" AND "CSISV" ; SET UP THE SWITCH AND VALUE TABLES, RESPECTIVELY, WHILE "CSIINI" AND ; "CSIND" INITIALIZE AND END A TABLE OF EITHER TYPE. ; AS AN EXAMPLE, THE SWITCHES IN THE SAMPLE SPECIFICATION ABOVE ; COULD HAVE BEEN PREPARED FOR BY THE FOLLOWING FORTRAN CALLS: ; ; INTEGER SWTAB(11),SVTAB(7) ; ; CALL CSIINI(SWTAB,11) ; CALL CSISW(SWTAB,' .SBTTL COMPLETE DESCRIPTIONS ;+ ; THESE FORTRAN CALLABLE ROUTINES FORM AN INTERFACE WITH THE ; COMMAND STRING INTERPRETER (CSI). AN ATTEMPT HAS BEEN MADE TO ; CONFORM AS CLOSELY AS POSSIBLE TO THE MACRO IMPLEMENTATIONS OF ; ; CSI$1,CSI$2,CSI$SW,CSI$SV,CSI$ND. ; ; THE CORRESPONDING FORTRAN COMPATIBLE ROUTINES, DEFINED AND DESCRIBED ; BELOW, ARE: ; ; CSI1,CSI1,CSISW,CSISV,CSIND. ; ; IN ORDER TO OVERCOME THE INABILITY TO USE EXTERNAL OFFSETS IN ; FORTRAN, SEVERAL OTHER ROUTINES ARE DEFINED WHICH RETRIEVE SPECIFIC ; INFORMATION FROM THE CSI CONTROL BLOCK. ; ; ; IN ALL ROUTINES BELOW, CSIBLK IS AN ARRAY OF SIZE AT LEAST 22 WORDS. ;- .SBTTL CSI1 ;+ ; SUBROUTINE CSI1(CSIBLK [,BUFF] [,LEN] [,IER]) ; WHERE: ; CSIBLK - 22 WORD ARRAY FOR CONTROL BLOCK ; BUFF - ADDRESS OF INPUT COMMAND STRING ; - IF NOT SPECIFIED CSIBLK MUST HAVE BEEN SET UP ; - PREVIOUSLY. ; LEN - LENGTH OF INPUT STRING. AS ABOVE IF NULL. ; IER - ERROR RETURN CODE. ; - POSSIBLE VALUES: ; - 0 SUCCESS ; - -1 SYNTAX ERROR. ; CALL "CSISTR" TO RETRIEVE OFFENDING STRING. ; ; "CSI1" INITIALIZES CSIBLK AND CHECKS THE SYNTAX OF BUFF. ;- .SBTTL CSI2 ;+ ; SUBROUTINE CSI2(CSIBLK,IO [,SWTAB] [,IER]) ; WHERE: ; CSIBLK - AS ABOVE ("CSI1" MUST HAVE BEEN CALLED PREVIOUSLY) ; IO - MUST BE ASCII STRING OF AT LEAST 2 CHARACTERS. ; - PERMITTED VALUES ARE: ; - 'IN [PUT]' ; - 'OU [TPUT]' ; SWTAB - OPTIONAL SWITCH TABLE ADDRESS. MUST HAVE BEEN ; - INITIALIZED BY CSISW AND CSIND. REPEAT - THESE ; - ROUTINES MUST BE USED. ; IER - ERROR RETURN CODE ; - POSSIBLE VALUES: ; - 0 SUCCESS ; - -2 IO ARGUMENT NOT SPECIFIED ; - -3 IO ARGUMENT MUST BE 'IN' OR 'OU' ; - -4 ERROR RETURNED BY "CSI2". SEE MANUAL. ;- .SBTTL CSIINI - INITIALIZE TABLE ;+ ; SUBROUTINE CSIINI(TABLE,SIZE) ; WHERE: ; TABLE - EITHER A SWITCH TABLE OR VALUE TABLE, I.E. AN INTEGER ; - ARRAY OF LENGTH SIZE. ; SIZE - NO. OF WORDS IN TABLE. ; ; "CSIINI" SETS UP A TABLE AS SPECIFIED IN THE CALLS TO "CSISW" AND ; "CSISV". ;- .SBTTL CSISW - DEFINE SWITCH TABLE ;+ ; SUBROUTINE CSISW(SWTAB,SW,MASK [,MASKW] [,CSFLAG] [,NFLAG] ; [,VALTAB] [,IER]) ; WHERE: ; SWTAB - ADDRESS OF SWITCH TABLE ARRAY. ; - THIS ARRAY MUST BE INITIALIZED AS FOLLOWS: ; - FIRST WORD: 0 ; - SECOND WORD: N, WHERE N IS LENGTH OF ARRAY ; - "CSIINI" CAN BE CALLED TO PERFORM THIS INITIALIZATION. ; - "CSISW" WILL RETURN AN ERROR (SEE IER) IF THE SWTAB ; - WILL REACH OVERFLOW FOR THE PRESENT CALL. ; - THE LENGTH SHOULD BE AT LEAST M*4+3, WHERE M IS THE ; - NUMBER OF SWITCHES IN THE TABLE. ; SW - THE 2 ASCII CHARACTERS FOR THE SWITCH. ; MASK - THE MASK VALUE TO BE USED IF THE SWITCH IS PRESENT. ; MASKW - AN OPTIONAL WORD WHICH WILL BE CLEARED OR SET WITH ; - MASK ACCORDING TO THE SETTING OF CSFLAG. ; CSFLAG - AN OPTIONAL ARGUMENT WHOSE VALUE MUST BE EITHER ; - 'CL [EAR]' OR 'SE [T]' IF PRESENT. THE DEFAULT IS SET. ; NFLAG - AN OPTIONAL ARGUMETN WHOSE VALUE MUST BE 'NE [G]' IF ; - PRESENT. THE DEFAULT IS NO NEGATION ALLOWED. IF NFLAG ; - IS PRESENT, NEGATION OF THE SWITCH IS ALLOWED. ; VALTAB - OPTIONAL ADDRESS OF AN ASSOCIATED VALUE TABLE (SEE ; - "CSISV"). ; IER - OPTIONAL ERROR RETURN CODE. ; - POSSIBLE VALUES: ; - 0 SUCCESS ; - -1 OVERFLOW OF SWTAB - TOO MANY SWITCHES ; - -2 CSFLAG NOT 'SE' OR 'CL' ; - -3 NFLAG NOT 'NE' ; - -4 ONE OF SWTAB,SW, OR MASK NOT SPECIFIED. ; ; SWTAB,SW, AND MASK MUST BE SPECIFIED. ; ; BEFORE USING SWTAB, "CSIND" (WHICH SEE) MUST BE CALLED TO END THE TABLE. ;- .SBTTL CSISV - DEFINE SWITCH VALUE TABLE ;+ ; SUBROUTINE CSISV(VALTAB,TYPE,VALUE,LEN [,IER]) ; WHERE: ; VALTAB - ADDRESS OF ARRAY TO HOLD SWITCH VALUE TABLE. ; - THIS ARRAY IS THE ONE SPECIFIED IN A CALL TO "CSISW". ; - IT IS INITIALIZED IN THE SAME WAY AS THE SWITCH TABLE, ; - I.E., THE FIRST WORD MUST BE ZERO AND THE SECOND MUST ; - BE THE ALLOCATED LENGTH OF THE ARRAY. THIS LENGTH ; - SHOULD BE AT LEAST M*2+3 WHERE M IS THE NUMBER OF ; - SWITCH VALUES DESIRED. ; TYPE - REQUIRED TYPE OF VALUE EXPECTED. MUST BE ONE OF: ; - 'AS [CII]' ASCII VALUE ; - 'NU [MERIC]' NUMERIC (OCTAL VALUE) ; - 'OC [TAL]' SAME AS NUMERIC ; - 'DE [CIMAL]' DECIMAL. ; - AS DISCUSSED IN THE CSI$ DOCUMENTATION, THE DECIMAL ; - OR OCTAL DEFAULT CAN BE OVERRIDDEN BY A '#' OR '.' ; - RESPECTIVELY. ; VALUE - ADDRESS OF WORD TO HOLD NUMERIC VALUE, OR BYTE ; - ARRAY TO HOLD ASCII VALUE. ; LEN - LENGTH OF ASCII STRING EXPECTED. THIS ARGUMENT ; - IS REQUIRED FOR TYPE 'ASCII', BUT IS IGNORED FOR ; - NUMERIC CONVERSIONS, AS THE LENGTH FOR THESE TYPES ; - IS ALWAYS 2. ; IER - OPTIONAL ERROR CODE RETURN. ; - POSSIBLE VALUES ARE: ; - 0 SUCCESS ; - -1 OVERFLOW ; - -2 ILLEGAL TYPE FOR CONVERSION ; - -4 REQUIRED ARGUMENT NOT PRESENT ; ; VALTAB, TYPE AND VALUE ARGUMENTS ARE REQUIRED, AND LEN IS REQUIRED ; IF TYPE IS 'ASCII'. ;- .SBTTL CSIND - END OF TABLE ;+ ; SUBROUTINE CSIND(SWTAB [,IER]) ; WHERE: ; SWTAB - ADDRESS OF A SWITCH TABLE CORRECTLY INITIALIZED BY ; - "CSISW". ; IER - OPTIONAL ERROR CODE RETURN. ; - POSSIBLE VALUES: ; - -1 OVERFLOW (NO ROOM FOR ZERO WORD!) ; ; "CSIND" IS CALLED TO TERMINATE A SWITCH TABLE. SUBSEQUENTLY, THIS TABLE ; MAY BE USED BY "CSI2" WHENEVER DESIRED. ;- .SBTTL CSISTR - GET FILE NAME STRING ;+ ; SUBROUTINE CSISTR(CSIBLK,STRING,LENGTH) ; ; THE CALL TO CSISTR IS DEFINED UNDER THE BRIEF DESCRIPTION. HOWEVER, ; IT IS ALSO POSSIBLE TO GET PORTIONS OF THE COMPLETE STRING, IN PART- ; ICULAR, THE DEVICE NAME, THE UIC (DIRECTORY), AS WELL AS THE FILENAME ; PORTION. ; THESE ROUTINES ARE: ; ; SUBROUTINE CSIDEV(CSIBLK,STRING,LENGTH) ; RETURNS DEVICE NAME, NUMBER AND COLON! ; ; SUBROUTINE CSIUIC(CSIBLK,STRING,LENGTH) ; RETURNS UIC, BRACKETS AND ALL! ; ; SUBROUTINE CSINAM(CSIBLK,STRING,LENGTH) ; RETURNS FILE NAME,EXTENSION, AND VERSION NUMBER ; ; WHERE: ; CSIBLK - AS ALWAYS ; STRING - BYTE ARRAY OF SUFFICIENT LENGTH ; LENGTH - RETURNED LENGTH OF PORTION DESIRED ; - LENGTH WILL BE ZERO (0) IF NO STRING IS AVAILABLE. ; ; SEE ALSO THE "FLAG FUNCTIONS" "CSIFNM","CSIDVN","CSIDIR", FOR A ; METHOD OF DETERMINING THE EXISTANCE OF THE ABOVE STRINGS IN THE ; LAST PARSED FILE SPECIFICATION. ;- .SBTTL CSIMSK- GET CSI MASK WORDS ;+ ; SUBROUTINE CSIMSK(CSIBLK,MSKW1,MSKW2) ; WHERE: ; CSIBLK - THE WELL KNOWN COMMAND STRING INTERPRETER CONTROL ; - BLOCK. (AFTER "CSI2" HAS BEEN CALLED!) ; MSKW1 - ON RETURN CONTAINS CONTENTS OF C.MKW1. ; - I.E., THE LOGICAL OR OF ALL MASKS OF SWITCHES ; - WHICH OCCURED IN THE MOST RECENT SPECIFIER. ; MSKW2 - CONTAINS CONTENTS OF C.MKW2 ON RETURN. ; - I.E., FOR EACH MASK OR'ED INTO C.MKW1, MSKW2 HAS ; - THIS (OR THESE) BIT SET OR CLEARED ACCORDING TO THE ; - SENSE OF THE SWITCH. THAT IS, IF THE SWITCH IS ; - NEGATED THE BIT(S) IS CLEARED, OTHERWISE SET. ; ; THIS IS THE ONLY WAY TO FIND WHICH, IF ANY SWITCHES HAVE BEEN ; SPECIFIED, UNLESS A MASK WORD ADDRESS IS PRESENT IN THE CALL TO ; THE APPROPRIATE CSISW. ; ; NOTE THAT ALL ARGUMENTS ARE REQUIRED! ;- .SBTTL FLAG FUNCTIONS ;+ ; FOLLOWING ARE FORTRAN LOGICAL*1 FUNCTIONS WHICH TEST VARIOUS ; FLAGS IN C.STAT. ; ; LOGICAL*1 FUNCTION CSIMOR(CSIBLK) ; CSIMOR IS TRUE IF THE LAST SPECIFICATION WAS TERMINATED ; BY A COMMA, I.E., IF THERE ARE MORE SPECIFICATIONS. ; ; LOGICAL*1 FUNCTION CSIEQU(CSIBLK) ; CSIEQU IS TRUE IF AN EQUAL SIGN (=) OCCURED IN THE ; STRING. IT IS SET BY "CSI1", WHILE THE OTHER FLAGS ; ARE ALL SET BY "CSI2". IF AN EQUAL SIGN IS PRESENT, ; THEN THE SPECIFICATIONS TO THE RIGHT ARE PARSED BY ; SPECIFYING 'INPUT' IN "CSI2". IF NO EQUAL SIGN IS ; PRESENT OR THE LEFT SIDE IS DESIRED, SPECIFY 'OUTPUT'. ; ; WARNING: "CSIEQU" MUST BE CALLED BEFORE "CSI2", ; AS THE FLAG SEEMS TO BE RESET BY THE LATTER. ; ; LOGICAL*1 FUNCTION CSIFNM(CSIBLK) ; CSIFNM IS TRUE IF A FILE NAME WAS SPECIFIED IN THE ; LAST PARSED STRING. ; ; LOGICAL*1 FUNCTION CSIDIR(CSIBLK) ; CSIDIR IS TRUE IF A DIRECTORY WAS INCLUDED IN THE ; LAST PARSED STRING. ; ; LOGICAL*1 FUNCTION CSIDVN(CSIBLK) ; CSIDVN IS TRUE IF A DEVICE NAME WAS SPECIFIED IN THE ; LAST PARSED STRING. ; ; IN ALL CASES, THE PARAMETER CSIBLK IS REQUIRED AND MUST HAVE BEEN ; SET BY LEGAL CALLS TO "CSI1" AND/OR "CSI2". ;- .END