C FSCREE SOURCE CHAT 05/01/13 00:10:06 5004 C CE SOUS PROGRAMME A AFFICHER UN ECRAN ET A RECUPERER UN NUMERO C DE CLE AINSI QUE LA POSITION DU CURSEUR C SUBROUTINE FSCREE(ECRAN,ICLE,ICURSR,JCURSR) IMPLICIT INTEGER(I-N) SEGMENT ECRAN CHARACTER*80 LIGNE(NBLIG) ENDSEGMENT CHARACTER*80 LIGAF(24),LIGDU(24) CHARACTER*1 LIGAF2(24*80) DATA INIT/0/ DATA LIGAF/24*' '/,LIGDU/24*' '/ IF (INIT.EQ.0) THEN * ON INITIALISE UNE FOIS GDDM CALL FSINIT INIT=1 CALL ASDFLD(1234,1,1,24,80,0) CALL ASFCOL(1234,3) CALL ASFTRN(1234,1) CALL ASFTRA(1234,1) ENDIF * ON VERIFIE QU'ON N'A PAS ETE CASSE CALL ASQMAX(NFIELD,MFIELD) IF (MFIELD.NE.1234) THEN CALL FSRNIT * CALL ASDFMT(0,5,IBID) CALL ASDFLD(1234,1,1,24,80,0) CALL ASFCOL(1234,3) CALL ASFTRN(1234,1) CALL ASFTRA(1234,1) ENDIF IPO2=0 NBLIG=LIGNE(/2) IPOS=0 JPOS=0 LONG=1 DO 20 ILIG=1,NBLIG DO 21 ICHAR=80,LONG,-1 IF (LIGNE(ILIG)(ICHAR:ICHAR).EQ.' ') GOTO 21 GOTO 22 21 CONTINUE GOTO 20 22 CONTINUE LONG=ICHAR 20 CONTINUE IPD=MAX(0,(24-NBLIG)/2) IPF=(80-LONG)/2 IF (IPD.NE.0) THEN * CARRE AUTOUR DE LA FENETRE LIGAF(IPD)(IPF+1:IPF+LONG)= # '------------------------------------------------------------' #//'----------------------' IF (IPF.NE.0) LIGAF(IPD)(IPF:IPF)='+' IF (IPF+LONG.NE.80) # LIGAF(IPD)(IPF+LONG+1:IPF+LONG+1)='+' ENDIF IF (IPD+NBLIG+1.LE.24) THEN LIGAF(IPD+NBLIG+1)(IPF+1:IPF+LONG)= # '------------------------------------------------------------' #//'----------------------' IF (IPF.NE.0) LIGAF(IPD+NBLIG+1)(IPF:IPF)='+' IF (IPF+LONG.NE.80) # LIGAF(IPD+NBLIG+1)(IPF+LONG+1:IPF+LONG+1)='+' ENDIF * 30 CONTINUE DO 25 ILIG=1,MIN(24,NBLIG) IF (IPF.NE.0) LIGAF(IPD+ILIG)(IPF:IPF)='|' IF (IPF+LONG.NE.80) # LIGAF(IPD+ILIG)(IPF+LONG+1:IPF+LONG+1)='|' LIGAF(IPD+ILIG)(IPF+1:IPF+LONG)=LIGNE(ILIG+IPO2)(1:LONG) 25 CONTINUE * CALL ASCPUT(1234,80*24,LIGAF) * CALL ASFCUR(0,IPD+1-IPO2,IPF+41) PAS TRES HEUREUX CALL ASREAD(ITYP,ICLE,ICOUNT) IF (ITYP.EQ.0) ICLE=0 IF (ICLE.GT.12) ICLE=ICLE-12 IF (ICLE.EQ.7) IPO2=MAX(0,IPO2-24) IF (ICLE.EQ.8) IPO2=MAX(0,MIN(NBLIG-24,IPO2+24)) IF (ICLE.EQ.7.OR.ICLE.EQ.8) GOTO 30 CALL ASQCUR(0,FIELD,ICURSR,JCURSR) ICURSR=ICURSR+IPO2 ICURSR=ICURSR-IPD JCURSR=JCURSR-IPF CALL ASCGET(1234,80*24,LIGDU) IF (IPD+1-IPO2.GE.1.AND.IPD+1-IPO2.LE.24.AND.NBLIG.GE.2) # LIGNE(2)(1:LONG)=LIGDU(IPD+2-IPO2)(IPF+1:IPF+LONG) RETURN END