C PROGRAM: FILESPEC.SUB FILE SPECIFICATIONS C SUBROUTINE FILESPEC(CMDLINE,CMDPTR,CMDLEN,PARAM,FSLEN, * FNAME,IO,ERRCODE) C BYTE * CMDLINE(80), !COMMAND LINE * FNAME(24), !FILE NAME * SWITCHES(40), !SWITCHES * DEVICES(20), !DEVICE CODES * ERROR ! C INTEGER * ERRCODE, !FTP ERROR CODE * CMDPTR, !POINTER TO COMMAND LINE * CMDLEN, !LENGTH OF COMMAND LINE * FSLEN, ! * IO, ! 1 => OUTPUT SIDE, 2 => INPUT SIDE * SCAN, !OPTION LENGTH SCAN ROUTINE * DEVCODES(10), ! * DC, ! * PARAM(2,20) !SWITCH VALVES C C COMMON /CODES/SWITCHES,DEVICES DATA DEVCODES/0,-1,-1,-2,-2,-2,4*0/,DC/10/ C C THE PURPOSE OF THIS ROUTINE IS TO OBTAIN THE FILE NAME, AND C CHECK FOR DEVICE BY LOOKING AT THE CHARACTER THAT STOPPED THE C FSLEN SCAN. IF IT IS A ":" THEN GET DEVICE CODE. C ERRCODE=0 KPTR=1 C C SEE IF A DEVICE SPECIFICATION IS PRESENT C J=INDEX(CMDLINE(CMDPTR),':',1,1) IF(J .GT. 0 .AND. J .LE. FSLEN)GOTO 110 !DEVICE SPEC PRESENT C C NO DEVICE SPEC. ASSUME SY: C CALL SCOPY(FNAME,'SY:',ERROR) KPTR=4 110 CONTINUE C C TRANSFER FILE SPEC AND NAME C CALL SUBSTR(FNAME(KPTR),CMDLINE,CMDPTR,FSLEN,ERROR) C C DETERMINE DEVICE TYPE C IDEV=INDEX(DEVICES,FNAME,2,2) IF(IDEV .NE. 0) GO TO 210 ERRCODE=5 ! UNKNOWN DEVICE TYPE RETURN C 210 IDEV=(IDEV+1)/2 PARAM(IO,DC)=DEVCODES(IDEV) IF(DEVCODES(IDEV) .LT. 0) GO TO 300 C C ELSE, GET TAPE UNIT # C PARAM(IO,DC)= FNAME(3)-'0'+1 J = PARAM(IO,DC) IF(J .GE. 0 .AND. J .LE. 3)GOTO 300 ERRCODE = 16 CMDPTR = CMDPTR + 2 RETURN 300 CONTINUE CMDPTR = CMDPTR + FSLEN RETURN END