C C BY BILL CAEL AND BILL WOOD, MAY-SEPTEMBER 1980 C C LINE FEED C CARRIAGE RETURN C SUBROUTINE MESSGE(TEXT) C C ROUTINE TO BUFFER AND OUTPUT PLAYER MESSAGES C C CALL MESSGE('STRING') C STRING MUST BE <= MAXTXT (MAXIMUM LINE SIZE) C C CALL MESSGE(0) C CLEAR ALL ACCUMULATED MESSAGES C IMPLICIT INTEGER(A - Z) PARAMETER MAXTXT = 20, MAXLIN = 4, MESPOS = 19 INTEGER LINSIZ(MAXLIN) BYTE TEXT(1), BUFFER((MAXTXT + 2)*MAXLIN), LASTCH LOGICAL CLEARF, VERBOS, WRAP COMMON/MESS/CLEARF, VERBOS DATA LINSIZ/MAXLIN*0/, CURLIN/0/, FLSHNM/0/, IN/0/ DATA CLEARF/.FALSE./, VERBOS/.TRUE./, WRAP/.FALSE./ IF (CLEARF) GOTO 2000 CLEARF = .TRUE. I = CURLIN + 1 2020 IF (I .GT. MAXLIN) GOTO 2040 LINSIZ(I) = 0 2030 I = I + 1 GOTO 2020 2040 CONTINUE 2000 CONTINUE IF (.NOT.(TEXT(1) .EQ. 0 .OR. CURLIN .EQ. MAXLIN)) GOTO 2050 IF (.NOT.(CURLIN .GT. 0 .OR. FLSHNM .GE. 10)) GOTO 2070 IF (.NOT.(.NOT.WRAP)) GOTO 2090 I = CURLIN + 1 2110 IF (.NOT.(I .LE. MAXLIN .AND. LINSIZ(I) .NE. 0)) GOTO 2130 CALL PUTCH(10, BUFFER, IN) DO 2140 J = 1, LINSIZ(I) CALL PUTCH(' ', BUFFER, IN) 2140 CONTINUE 2150 CONTINUE CALL PUTCH(13, BUFFER, IN) LINSIZ(I) = 0 2120 I = I + 1 GOTO 2110 2130 CONTINUE 2090 CONTINUE IF (IN .LE. 0) GOTO 2160 CALL TPOS(MESPOS, 1) CALL OUTCH(BUFFER, IN) CALL OUTCH(0, 0) IN = 0 IF (CURLIN .NE. MAXLIN) GOTO 2180 WRAP = .TRUE. 2180 CONTINUE CURLIN = 0 2160 CONTINUE IF (TEXT(1) .NE. 0) GOTO 2200 WRAP = .FALSE. 2200 CONTINUE FLSHNM = 0 GOTO 2080 2070 CONTINUE FLSHNM = FLSHNM + 1 2080 CONTINUE 2050 CONTINUE IF (TEXT(1) .EQ. 0) GOTO 2220 CURLIN = CURLIN + 1 CALL PUTCH(10, BUFFER, IN) IF (.NOT.(VERBOS .OR. (TEXT(1) .EQ. '*') .OR. (TEXT(1) .EQ. '?') *)) GOTO 2240 I = 1 2260 IF (.NOT.(TEXT(I) .NE. 0 .AND. I .LE. MAXTXT)) GOTO 2280 CALL PUTCH(TEXT(I), BUFFER, IN) 2270 I = I + 1 GOTO 2260 2280 CONTINUE GOTO 2250 2240 CONTINUE LASTCH = ' ' I = 0 J = 1 2290 IF (.NOT.(TEXT(J) .NE. 0 .AND. J .LE. MAXTXT)) GOTO 2310 IF (LASTCH .NE. ' ') GOTO 2320 CALL PUTCH(TEXT(J), BUFFER, IN) I = I + 1 2320 CONTINUE LASTCH = TEXT(J) 2300 J = J + 1 GOTO 2290 2310 CONTINUE I = I + 1 2250 CONTINUE J = LINSIZ(CURLIN) LINSIZ(CURLIN) = I - 1 2340 IF (.NOT.(I .LE. J)) GOTO 2360 CALL PUTCH(' ', BUFFER, IN) 2350 I = I + 1 GOTO 2340 2360 CONTINUE CALL PUTCH(13, BUFFER, IN) 2220 CONTINUE RETURN END SUBROUTINE PUTCH(CH, BUF, PTR) IMPLICIT INTEGER(A - Z) BYTE CH, BUF(1) C PTR = PTR + 1 BUF(PTR) = CH RETURN END