$DEBUG PAGELENGTH(55) /*******************/ /* */ /* E X $ D I R */ /* */ /*******************/ M$EX$DIR: DO; /*************************************************/ /* */ /* OPERATION: */ /* */ /* 1. ASK IF SPECIAL OPTIONS, */ /* 1.1 N: THEN GET DISK'S NUMBER,AND RETURN. */ /* 1.2 Y: ASK IF WHOLE DISK? */ /* Y: GET DISK'S NUMBER. */ /* N: GET FILE NAME. */ /* GET SWITCHES. */ /* */ /*************************************************/ $NOLIST $INCLUDE(COMMON.DCL) $INCLUDE(ISIS.DCL) $INCLUDE(:F1:ISISIO.DCL) $LIST GET$FNAME: PROCEDURE(NAME$P,TYPE,WILDCARD,NULLNAME,EXTPNT) EXTERNAL; DECLARE NAME$P ADDRESS, TYPE BYTE, WILDCARD BOOLEAN, NULLNAME BOOLEAN, EXTPNT BOOLEAN; END GET$FNAME; SWITCH: PROCEDURE(YESNO$P,MSG$P) EXTERNAL; DECLARE (YESNO$P,MSG$P) ADDRESS; END; DECLARE MSG$FILL$IN(1) BYTE EXTERNAL; DECLARE MSG$OPTIONS(1) BYTE EXTERNAL; $INCLUDE(STRING.DCL) EX$DIR: PROCEDURE (COM$LINE$P,COM$TYPE$P) PUBLIC; DECLARE COM$LINE$P ADDRESS, COM$TYPE$P ADDRESS; DECLARE (COM$LINE BASED COM$LINE$P) STRING, (COM$TYPE BASED COM$TYPE$P) BYTE; DECLARE NAME STRUCTURE( ML ADDRESS, L ADDRESS, D(15) BYTE ); DECLARE CHAR STRUCTURE( ML ADDRESS, L ADDRESS, D(2) BYTE ); DECLARE SWITCHES(5) STRUCTURE( ML ADDRESS, L ADDRESS, D(3) BYTE ) DATA ( 2,2,' I',0, 2,2,' F',0, 2,2,' P',0, 2,2,' O',0, 2,2,' Z',0 ); DECLARE YESNO STRUCTURE( L BYTE, D(5) BYTE ); DECLARE COMP1 STRUCTURE( ML ADDRESS, L ADDRESS, D(5) BYTE ) DATA (4,4,'DIR ',0); DECLARE COMP2 STRUCTURE( ML ADDRESS, L ADDRESS, D(5) BYTE ) DATA (4,4,'FOR ',0); DECLARE COMP3 STRUCTURE( ML ADDRESS, L ADDRESS, D(3) BYTE ) DATA (2,2,CR,LF,0); DECLARE CONSOL$LINE$I ADDRESS; DECLARE I BYTE; DECLARE MSG1(*) BYTE DATA( LF, ' --- DISPLAY DISK DIRECTORY ---',CR,LF, 0); DECLARE MSG2(*) BYTE DATA( ' ENTER DISK NUMBER : ', 0); DECLARE MSG3(*) BYTE DATA( C$LFT,C$LFT,C$LFT,C$LFT, C$LFT,C$LFT,C$LFT,C$LFT, C$LFT,C$LFT,C$LFT,C$LFT, C$LFT,C$LFT, 0); DECLARE MSG4(*) BYTE DATA( 'List invisible files',CR,LF, 'List only name.ext of files',CR,LF, 'Pause to change disks before listing',CR,LF, 'Single column display',CR,LF, 'Show only number of sectors in use',CR,LF, 0); DECLARE MSG5(*) BYTE DATA( ' FILE NAME ',CR,LF, ' ..............', 0); DECLARE MSG6(*) BYTE DATA( ' Display whole disk directory (y/n)? ', 0); CHAR.ML=1; CHAR.D(1)=0; CHAR.L=1; CHAR.D(0)=0; CALL MSG$OUT(.MSG$FILL$IN); CALL MSG$OUT(.MSG1); COM$LINE.L=0; CALL APPEND$S(.COM$LINE,.COMP1); CALL MSG$OUT(.MSG$OPTIONS); CHAR.D(0)=CI; CALL MSG$OUT(.(CLR$LIN,CR,0)); IF UPPER(CHAR.D(0))<>'Y' THEN DO; CALL MSG$OUT(.MSG2); CHAR.D(0)=CI; DO WHILE ((CHAR.D(0)<'0') OR (CHAR.D(0)>'9')); CALL CO(BELL); CHAR.D(0)=CI; END; CALL CO(CR); CALL APPEND$S(.COM$LINE,.CHAR); END; ELSE DO; CALL MSG$OUT(.MSG6); CHAR.D(0)=CI; CALL MSG$OUT(.(CLR$LIN,CR,0)); IF UPPER(CHAR.D(0))='Y' THEN DO; CALL MSG$OUT(.MSG2); CHAR.D(0)=CI; DO WHILE ((CHAR.D(0)<'0') OR (CHAR.D(0)>'9')); CALL CO(BELL); CHAR.D(0)=CI; END; CALL CO(CR); CALL APPEND$S(.COM$LINE,.CHAR); END; ELSE DO; CALL MSG$OUT(.MSG5); CALL MSG$OUT(.MSG3); CALL GET$FNAME(.NAME,1,TRUE,TRUE,FALSE); CALL MSG$OUT(.(CR,LF,0)); CALL APPEND$S(.COM$LINE,.COMP2); CALL APPEND$S(.COM$LINE,.NAME); END; YESNO.L=5; DO I=0 TO 4; YESNO.D(I)=0; END; CALL SWITCH(.YESNO,.MSG4); DO I=0 TO YESNO.L-1; IF YESNO.D(I)=1 THEN CALL APPEND$S(.COM$LINE,.SWITCHES(I)); END; END; CALL APPEND$S(.COM$LINE,.COMP3); CALL MSG$OUT(.(CLR$SCRN,0)); COM$TYPE=1; END EX$DIR; END M$EX$DIR;