C************************************************************** C C PIPCCL.FLX ENVOIE A MCR UNE LIGNE DE COMMANDE C DU GENRE C C PIP TI:=XXXXXX.XX;XX C C ORDRES INSTALLES : C C POUR PIP : FRE DIR TYP COP DEL SDL REN DLK PUR EOF C C C*************************************************************** PROGRAM PIPCCL BYTE LI(80),LO(79) LOGICAL*1 FLAG,FSLASH,FVIRG,FNUIC EQUIVALENCE (LI(1),CMCR) DATA XMCR/6RMCR.../ DO (I=1,80) LI(I)=' ' FLAG=.FALSE. ID=5 ! MONO-LIGNE: LA COMMANDE DEBUTE EN 5 NTCAR=6 ! MONO-LIGNE: NTCAR-3=3 => MULTI-LIGNE CALL GETMCR(LI,NCHAR) IF (NCHAR.EQ.3) LI(4)=' ' SMCR=CMCR 100 LO(1)='P' LO(2)='I' LO(3)='P' LO(4)=' ' DO (I=5,79) LO(I)=0 CONDITIONAL C ! JAMAIS DE FORME MULTILIGNE (SMCR.EQ.'FRE') DO (I=4,NCHAR) LO(I)=LI(I) FIN LO(NCHAR+2)='/' ! SI ">FRE",NCHAR=3 :IL FAUT LO(NCHAR+3)='F' ! MENAGER UN INTERVALLE LO(NCHAR+4)='R' FIN (SMCR.EQ.'DIR') C ! JAMAIS DE FORME MULTILIGNE UNLESS (NCHAR.EQ.3) DO (I=4,NCHAR) LO(I)=LI(I) FIN LO(NCHAR+2)='/' ! SI ">DIR",NCHAR=3 :IL FAUT LO(NCHAR+3)='L' ! MENAGER UN INTERVALLE LO(NCHAR+4)='I' FIN (NCHAR.EQ.NTCAR-3) 10 TYPE 1,SMCR,'>' 1 FORMAT('$',A3,A1) FLAG=.TRUE. READ(5,2,END=110)NCHAR,LI 2 FORMAT(Q,80A1) DO (IB=1,NCHAR) IF (LI(IB).NE.' ') ID=1 ! MULTI-LIGNE: TOUT EST UTIL NTCAR=3 ! MULTI-LIGNE: NTCAR-3=0 => MULTI-LIGNE GO TO 100 FIN FIN GO TO 10 FIN (SMCR.EQ.'TYP') LO(5)='T' LO(6)='I' LO(7)=':' LO(8)='=' DO (I=ID,NCHAR) LO(I-ID+9)=LI(I) FIN (SMCR.EQ.'COP') DO (I=ID,NCHAR) LO(I-ID+5)=LI(I) FIN FIN (SMCR.EQ.'DEL') FNUIC=.TRUE. FVIRG=.TRUE. NV=5 DO (I=ID,NCHAR) IF (LI(I).EQ.'[') FNUIC=.FALSE. IF (LI(I).EQ.']') FNUIC=.TRUE. IF (LI(I).EQ.',' .AND. FNUIC) IF (FVIRG) INST=I-ID+5 LO(INST)='/' LO(INST+1)='L' LO(INST+2)='D' FVIRG=.FALSE. NV=NV+3 FIN FIN LO(I-ID+NV)=LI(I) FIN INST=NCHAR-ID+NV+1 LO(INST)='/' LO(INST+1)='D' LO(INST+2)='E' IF (FVIRG) INST=INST+3 LO(INST)='/' LO(INST+1)='L' LO(INST+2)='D' FIN FIN (SMCR.EQ.'SDL') DO (I=ID,NCHAR) LO(I-ID+5)=LI(I) FIN NV=1 IF (ID.EQ.1) NV=5 LO(NCHAR+NV)='/' ! FORME MONO-LIGNE :ID=5 ON PLACE "/" LO(NCHAR+NV+1)='S' ! EN "NCHAR+1" - MULTILIGNE : ID=1 LO(NCHAR+NV+2)='D' ! LE "/" EN "NCHAR+5" (4 CAR. "PIP ") FIN (SMCR.EQ.'REN') DO (I=ID,NCHAR) LO(I-ID+5)=LI(I) FIN NV=1 IF (ID.EQ.1) NV=5 LO(NCHAR+NV)='/' LO(NCHAR+NV+1)='R' LO(NCHAR+NV+2)='E' FIN (SMCR.EQ.'DLK') DO (I=ID,NCHAR) LO(I-ID+5)=LI(I) FIN NV=1 IF (ID.EQ.1) NV=5 LO(NCHAR+NV)='/' LO(NCHAR+NV+1)='U' LO(NCHAR+NV+2)='N' FIN (SMCR.EQ.'EOF') DO (I=ID,NCHAR) LO(I-ID+5)=LI(I) FIN NV=1 IF (ID.EQ.1) NV=5 LO(NCHAR+NV)='/' LO(NCHAR+NV+1)='E' LO(NCHAR+NV+2)='O' LO(NCHAR+NV+3)='F' FIN (SMCR.EQ.'PUR') C C 3 CAS POSSIBLE : C TYPE 1 PUR *.*,*.* ON NE CONSERVE QUE LA DERNIERE VERSION C TYPE 2 PUR *.*,*.*,*.* /X, PORTE SUR TOUT LE CHAMP C TYPE 3 PUR *.*,*.* /X,*.* /Y CHAQUE SWITCHE DOIT ETRE GARDE C ISLH=0 ! INDICE DE POSITION DU 1 "/" ILD=0 ! " " 1 "," IVRG=0 ! " " DERN. "," FNUIC=.TRUE. N=5-ID DO (IAN=ID,NCHAR) CONDITIONAL (ISLH.EQ.0 .AND. LI(IAN).EQ.'/') ISLH=IAN (LI(IAN).EQ.'[') FNUIC=.FALSE. (LI(IAN).EQ.']') FNUIC=.TRUE. (ILD.EQ.0 .AND. LI(IAN).EQ.',' .AND. FNUIC) ILD =IAN (LI(IAN).EQ.',' .AND. FNUIC) IVRG =IAN FIN FIN C VERIFICATION WHEN (ISLH.EQ.ID.OR.IVRG.EQ.ID.OR.ILD.EQ.ID) TYPE *,'===>> Mauvaise ligne de commande CCL <<===' FIN ELSE WHEN (ISLH.NE.0 .AND. IVRG.GT.ISLH) C TYPE 3 DO (I=ID,NCHAR) CONDITIONAL (LI(I).EQ.'/') LO(I+N)=LI(I) LO(I+N+1)='P' LO(I+N+2)='U' LO(I+N+3)=':' N=N+3 FIN (I.EQ.ILD) LO(I+N)='/' LO(I+N+1)='L' LO(I+N+2)='D' LO(I+N+3)=LI(I) N=N+3 FIN (OTHERWISE) LO(I+N)=LI(I) FIN FIN FIN ELSE C C TYPE 1 OU 2 C WHEN (ISLH.EQ.0) NFIN=NCHAR ELSE NFIN=ISLH-1 C WHEN (ILD.EQ.0) NSTOP=NFIN ELSE NSTOP=ILD-1 DO (I=ID,NSTOP) LO(I+N)=LI(I) I=NSTOP LO(I+N+1)='/' LO(I+N+2)='L' LO(I+N+3)='D' LO(I+N+4)='/' LO(I+N+5)='P' LO(I+N+6)='U' I=I+N+6 UNLESS (ISLH.EQ.0) I=I+1 LO(I)=':' DO (J=ISLH+1,NCHAR) I=I+1 LO(I)=LI(J) FIN FIN UNLESS (ILD.EQ.0) DO (J=ILD,NFIN) I=I+1 LO(I)=LI(J) FIN FIN FIN FIN FIN (OTHERWISE) TYPE *,'===>> Commande incorrecte (4 lettres?) <<===' CALL EXIT FIN FIN IEFN=50 REPEAT WHILE (IDS.EQ.-7) CALL CLREF(IEFN) CALL SPAWN(XMCR,,,IEFN,,,,LO,79,,,IDS) CONDITIONAL (IDS.EQ.-7) TYPE *,'===>> Patience, la tache est ACTIVE <<===' (IDS.LT.0) TYPE*,'===>> ERREUR FATALE <<===' CALL EXIT FIN FIN CALL WAITFR(IEFN) FIN IF (FLAG) 90 TYPE 1,SMCR,'>' READ(5,2,END=110)NCHAR,LI DO (IB=1,NCHAR) IF (LI(IB).NE.' ') GO TO 100 FIN GO TO 90 FIN 110 CALL EXIT END