$DEBUG PAGELENGTH(50) /*******************/ /* */ /* E X $ L I N K */ /* */ /*******************/ M$EX$LINK: DO; $NOLIST $INCLUDE(COMMON.DCL) $INCLUDE(ISIS.DCL) $INCLUDE(:F1:ISISIO.DCL) $INCLUDE(STRING.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; DECLARE MSG$FILL$IN(1) BYTE EXTERNAL; DECLARE MSG$OPTIONS(1) BYTE EXTERNAL; DECLARE MSG$FILE$OR$RETURN(1) BYTE EXTERNAL; DECLARE MSG$CLR$AFTER$FNAME(1) BYTE EXTERNAL; DECLARE ( ECOMP1, ECOMP4, ECOMP5, ECOMP6, ECOMP7 ) STRING EXTERNAL; /****************************************************/ /* */ /* OPERATION : */ /* 1. Get input file names. input list ends when */ /* a null ( CR only ) name is entered. */ /* 2. Get output file name. */ /* 3. Ask if a list file should be created. if */ /* so, ask for list file's name. */ /* */ /****************************************************/ EX$LINK: 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 COMP1 STRUCTURE( ML ADDRESS, L ADDRESS, D(6) BYTE ) DATA (5,5,'LINK ',0); DECLARE COMP2 STRUCTURE( ML ADDRESS, L ADDRESS, D(12) BYTE ) DATA (11,11,' MAP PRINT(',0); DECLARE I BYTE; DECLARE MSG1(*) BYTE DATA( LF, '--- LINK 8080 / 8085 OBJECT FILES ---',CR,LF, LF, ' INPUT FILES',CR,LF, 0); DECLARE MSG2(*) BYTE DATA( CLR$LIN,CR,LF, ' OUTPUT FILE',CR,LF, '..............',CR, 0); DECLARE MSG3(*) BYTE DATA( CLR$LIN,CR,'LINK MAP FILE',CR,LF, '.............. ( Type RETURN if you don''t want a link map )',CR, 0); CALL MSG$OUT(.MSG$FILL$IN); CALL MSG$OUT(.MSG1); COM$LINE.L=0; CALL APPEND$S(.COM$LINE,.COMP1); NAME.L=1; DO WHILE NAME.L>0; CALL MSGOUT(.MSG$FILE$OR$RETURN); CALL GET$FNAME(.NAME,1,FALSE,TRUE,FALSE); IF NAME.L>0 THEN DO; CALL APPEND$S(.COM$LINE,.ECOMP1); CALL APPEND$S(.COM$LINE,.NAME); CALL APPEND$S(.COM$LINE,.ECOMP6); CALL MSG$OUT(.MSG$CLR$AFTER$FNAME); END; END; COM$LINE.L=COM$LINE.L-1; CALL APPEND$S(.COM$LINE,.ECOMP1); CALL MSG$OUT(.MSG2); CALL GET$FNAME(.NAME,1,FALSE,FALSE,FALSE); CALL APPEND$S(.COM$LINE,.ECOMP7); CALL APPEND$S(.COM$LINE,.NAME); CALL MSG$OUT(.MSG$OPTIONS); IF UPPER(CI)='Y' THEN DO; CALL MSG$OUT(.MSG3); CALL GET$FNAME(.NAME,3,FALSE,TRUE,FALSE); CALL MSG$OUT(.MSG$CLR$AFTER$FNAME); IF NAME.L>0 THEN DO; CALL APPEND$S(.COM$LINE,.COMP2); CALL APPEND$S(.COM$LINE,.NAME); CALL APPEND$S(.COM$LINE,.ECOMP4); END; END; CALL APPEND$S(.COM$LINE,.ECOMP5); CALL MSG$OUT(.(CLR$SCRN,0)); COM$TYPE=2; END EX$LINK; END M$EX$LINK;