You are on page 1of 26

SUBROUTINE FANCY $SEGMENT FANCY $BINARY $CHAREQU * * (C) COPYRIGHT: Kevin G.

Rhoads & High Voltage Research Lab (MIT) - 1983,84,85 * CHARACTER*136 ALINE,BLOCK*80,FNAME*26,STRING*20,FNAME2*26 CHARACTER*12 FONTS(0:3),PRFORM,CH12 CHARACTER*8 MODES(0:3),CH8 CHARACTER*6 COLORS(0:3),SIZES(0:2),CH6 CHARACTER*1 THECHR,ENDCHR(100),CR,LF,TABCH,FF,ASPACE,DASH,CARET,SLASH CHARACTER*1 GREEK,BACKSL,VERBAR,PROCHR,TC,CHARS(2048) REAL*4 LM,RM INTEGER*4 SCRN0,CNSL0,KPD,PRN,BUSA,BUSB,BUSC,BUSD,FILE,GR,INDEX,I4CR INTEGER*4 GETINT,PR,DSKFIL,SPCNT,LINLEN,HOWFKD,BFLAST,ICARET,FIND1T INTEGER*4 ITAB,MXLN,CLINE,LMARSV,RMARSV,FILENG,I4SPAC,RMSAVE INTEGER*2 MODE,COLOR,SIZE,ENHANC,FONT,ANSWER,SKIPRF,JUSTFY,FILL,PROPSP INTEGER*2 IASC,ISCAN,IKBF1,IKBF2,IERR,LFAUTO,LPI,LEFMAR,RGTMAR,LFINC INTEGER*2 SVJUST,SVPROP,CPIS(0:5),LEVEL,FORM,PAGE,AFF,LD,HLFINC INTEGER*2 SVPSP,SVJST,ICSP,LFPKT(10),SAVLW INTEGER*1 DIR(100),BYTES(2048),THEBYT,GETIT LOGICAL*4 QTFLAG,SCRECH,UNDRLN,SPSKIP,CTRLB,ISOPEN,ISOPEF LOGICAL*2 ABORT,ESCAPE,INTRPT,ISTEST,ABSOLU,PRFKD,TMPRAW,SPECOF,JSTIFY LOGICAL*1 FIRST,QUIT EQUIVALENCE (JSTIFY,JUSTFY),(THECHR,THEBYT),(CHARS(1),BYTES(1)) COMMON /USER/COLORS,SIZES,FONTS,MODES,/FISIZE/FILENG,/SAVAFF/FORM,PAGE,AFF COMMON /FORM/MODE,COLOR,SIZE,ENHANC,FONT,ANSWER,SKIPRF,JUSTFY,FILL,PROPSP, LFAUTO,LPI,LEFMAR,RGTMAR,FIRST,QUIT COMMON /CHARS/BLOCK,FNAME,/DPUNIT/PR,DSKFIL,/PASSIT/QTFLAG,/CSPACE/CPIS COMMON /CONCHR/CR,LF,TABCH,FF,ASPACE,DASH,CARET,SLASH,BACKSL,VERBAR COMMON /SHIFT/GREEK,/TST/ISTEST,/NTRVN/ABORT,ESCAPE,INTRPT,/SAVELD/LD COMMON /KEYGET/IASC,ISCAN,IKBF1,IKBF2,IERR,/DPWHER/ICOUNT,INDEX,BFLAST,BYT ES COMMON /UNITS/SCRN0,CNSL0,KPD,PRN,BUSA,BUSB,BUSC,BUSD,FILE,GR,/SAVLF/LFINC ,HLFINC COMMON /SAVPSP/SVPSP,/SAVJST/SVJST,/SAVICS/ICSP,/SAVELW/SAVLW SAVE /NTRVN/,/USER/,/FORM/,/CHARS/,/DPUNIT/,/PASSIT/,/CSPACE/,/FISIZE/ SAVE /KEYGET/,/CONCHR/,/TST/,/SHIFT/,/UNITS/,/DPWHER/,/SAVAFF/,/SAVELD/ SAVE /SAVLF/,/SAVPSP/,/SAVJST/,/SAVICS/,/SAVELW/ SAVE LMARSV,RMARSV EXTERNAL GETINT,FIND1T,GETIT,STHTAB SAVE * SCRECH = .FALSE. UNDRLN = .FALSE. SPSKIP = .FALSE. CTRLB = .FALSE. CALL SETSPS BFLAST = 0 INDEX = 0 ICOUNT = 0 I4CR = 13 ICARET = ICHAR(CARET) IBSLSH = 92 I4SPAC = 32 I4TAB = 9 QTFLAG = .FALSE. INQUIRE (UNIT=PR,FORM=PRFORM) PRINT *,'FANCY ENTERED, PRFORM = ',PRFORM,' FILENG = ',FILENG

PRINT *,' LD = ',LD,' AFF = ',AFF,' PAGE = ',PAGE,' FORM = ',FORM FNAME2 = FNAME NUMBF = 1 INQUIRE (FILE=FNAME2,NUMBER=NUMBF,OPENED=ISOPEF,IOSTAT=IOSF) INQUIRE (UNIT=DSKFIL,OPENED=ISOPEN,IOSTAT=IOSN) PRINT *,' FILE =',FNAME,' IOS''s = ',IOSF,' ',IOSN IF ((.NOT.(ISOPEN.AND.ISOPEF)).OR.IOSN.NE.0.OR.IOSF.NE.0.OR.NUMBF.NE.DSKFI L) THEN PRINT *,'FANCY: INPUT DISK FILE ERROR CONDITION BEFORE READING.' CLOSE (UNIT=DSKFIL,STATUS='KEEP',ERR=6001) 6001 CLOSE (UNIT=NUMBF,STATUS='KEEP',ERR=6002) I = 0 6002 NUMBF = DSKFIL I = I + 1 OPEN (UNIT=NUMBF,FILE=FNAME2,FORM='BINARY',ACCESS='SEQUENTIAL', & STATUS='OLD',IOSTAT=IOS,ERR=6003) GOTO 6004 6003 PRINT *,'OPEN: IOS, UNIT, FILE = ',IOS,' ',NUMBF,' ',FNAME2 IF (I.LT.4) GOTO 6002 RETURN 6004 CONTINUE REWIND (UNIT=NUMBF,IOSTAT=IOS,ERR=6005) GOTO 2112 6005 CALL REWIND(NUMBF) ENDIF 2112 CALL CCNSL0 PR = 7 DSKFIL = 45 HOWFKD = 0 KTRIES = 1 PRFKD = .FALSE. WRITE (11,*) 'Ctrl C to ABORT, Ctrl P to PAUSE' ICSP = 0 PRFKD = .FALSE. TMPRAW = .FALSE. SPECOF = .FALSE. LEVEL = 0 SVJUSY = JUSTFY SVPROP = PROPSP 1221 CALL SECPSD(ISEC) IF (LD.GT.32700.AND.MODE.GT.1) LD = 55 IF (MODE.EQ.3) THEN CALL RESETP SKIPRF = 0 SVPSP = 0 SVJST = 0 LD = 32767 AFF = 0 FORM = 3696 PAGE = 3478 CALL DSETUP FILL = 0 JUSTFY = 0 PROPSP = 0 CALL PSPOFF CALL JSTOFF ELSEIF (MODE.EQ.1) THEN PROPSP = 1 JUSTFY = 1 SVPSP = 1

SVJST = 1 SVJUST = 1 SVPROP = 1 SKIPRF = 1 FILL = 1 FONT = 0 IF (LEFMAR.EQ.0.AND.RGTMAR.EQ.960) THEN LEFMAR = 60 RGTMAR = 900 ENDIF LD = 32767 CALL PSPON CALL JSTON ELSEIF (MODE.EQ.0) THEN PROPSP = 0 JUSTFY = 0 SVPSP = 0 SVJST = 0 SVJUST = 0 SVPROP = 0 SKIPRF = 1 LD = 32767 FILL = 0 FONT = 0 ENDIF LMARSV = LEFMAR RMARSV = RGTMAR * CALL STHTAB 2121 IF (MODE.EQ.2.OR.MODE.EQ.3) THEN PRINT *,'DSETUP1: LD = ',LD,' AFF = ',AFF,' PAGE = ',PAGE,' FORM = ',FORM ILD = LD LFAUTO = 0 CALL LFOFF SKIPRF = 0 AFF = 0 LD = 32767 CALL FFOFF PRINT *,'DSETUP2: LD = ',LD,' AFF = ',AFF,' PAGE = ',PAGE,' FORM = ',FORM TMPRAW = .TRUE. LFAUTO = 0 SKIPRF = 0 AFF = 0 LFPKT(1) = 37 LFPKT(2) = 32767 LFPKT(3) = 33 LFPKT(4) = 0 LFPKT(5) = 0 CALL SYSFUN(7,LFPKT(1),IERROR) CALL SYSFUN(7,LFPKT(2),IERROR) CLINE = 1 IF (LPI.LT.3) LPI = 3 IF (LPI.GT.10) LPI = 10 MXLN = (11.0D0*LPI*PAGE)/FORM - 0.5 IF (MXLN.LT.ILD) THEN I = (FLOAT(MXLN) + FLOAT(ILD))*0.5 +0.5001 J = ILD - 2 MXLN = MIN(I,J) ENDIF

* *

1212

PRINT *,'FANCY: STARTING MODE 2/3 PROCESSING, MXLN = ',MXLN IF (MXLN.LE.1) MXLN = 100 IF (MXLN.GE.ILD) THEN PRINT *,'ILD = ',ILD,' NEW MXLN? ' READ (*,*,ERR=1212) MXLN MXLN = ILD - 1 ENDIF THECHR = CR WRITE (UNIT=PR,ERR=9930,IOSTAT=IOS) CR ICOL = 0 THEBYT = GETIT() IF (THEBYT.EQ.0) THEN IF (QTFLAG) GOTO 9801 GOTO 1212 ENDIF IF (THECHR.EQ.CR) THEN ICOL = -1 CLINE = CLINE + 1 IF (CLINE.GE.MXLN) THEN CLINE = 1 WRITE (UNIT=PR,ERR=9930,IOSTAT=IOS) FF ELSE WRITE (UNIT=PR,ERR=9930,IOSTAT=IOS) LF ENDIF ELSEIF (THECHR.EQ.TABCH) THEN THECHR = ASPACE ICOUNT = 7 - MOD(ICOL,8) IF (ICOUNT.NE.0) WRITE (UNIT=PR,ERR=9930,IOSTAT=IOS) (ASPACE,I=1,I ICOL = ICOL + ICOUNT ENDIF WRITE (UNIT=PR,ERR=9930,IOSTAT=IOS) THECHR ICOL = ICOL + 1 CALL ISNTRP IF (IERR.NE.0) QTFLAG = CHAR(IASC) .EQ. '!' IF (IASC.EQ.16) CALL PAUSE('Pause in sending data to printer.') IF (IASC.EQ.19) THEN WRITE (11,*) 'Pause in sending data to printer.' CALL ISNTRP IF (IASC.NE.17) GOTO 1213 ENDIF IF (INTRPT.OR.ESCAPE.OR.ABORT) GOTO 9801 LEN = BFLAST - INDEX + 1 IF (LEN.LE.1) GOTO 1212 IF (LEN.GT.1) THEN ICAR = FIND1T(BYTES(INDEX),I4TAB,LEN) IF (ICAR.GE.1) THEN ICAR = ICAR - 1 ELSEIF (ICAR.EQ.-1) THEN ICAR = LEN ENDIF LEN = ICAR ENDIF IF (LEN.LE.1) GOTO 1212 I = FIND1T(BYTES(INDEX),I4CR,LEN) I = INDEX + I - 1 IF (I.GT.INDEX) THEN WRITE (UNIT=PR,ERR=9930,IOSTAT=IOS) (CHARS(J),J=INDEX,I-1) ICOUNT = ICOUNT + I - INDEX INDEX = I

COUNT)

1213

ENDIF GOTO 1212 ENDIF 4444 CONTINUE ICSP = 0 CALL DSETUP * CALL STHTAB PRINT *,'DSETUP: LD = ',LD,' AFF = ',AFF,' PAGE = ',PAGE,' FORM = ',FOR M ICSP = 0 4445 CONTINUE RM = FLOAT(RGTMAR) LM = FLOAT(LEFMAR) IF (SIZE.EQ.0) THEN LINLEN = IFIX( (RM-LM)/12.0 ) ELSEIF (SIZE.EQ.1) THEN LINLEN = IFIX( (RM-LM)/10.0 ) ELSEIF (SIZE.EQ.2) THEN LINLEN = IFIX( (RM-LM)*7.0/50.0 ) ENDIF PROPSP = MODE IF (PROPSP.EQ.1) THEN CALL PSPON ELSE CALL PSPOFF ENDIF JUSTFY = MODE IF (JSTIFY) THEN CALL JSTON ELSE CALL JSTOFF ENDIF LFPKT(1) = 31 LFPKT(2) = 0 LFPKT(3) = 0 LFPKT(5) = 31 LFPKT(6) = 1 LFPKT(7) = 0 IF (INDEX.NE.1) THEN THEBYT = GETIT() PRINT *,'FANCY: FINISHED MODE 0/1 SETUP, TC = ',THECHR IF (THEBYT.EQ.0.AND.QTFLAG) THEN PRINT *,'FANCY: GETIT ERROR, GOING TO SINGLE CHAR MODE ' FILENG = -1 INDEX = 0 BFLAST = 0 GOTO 3333 ENDIF GOTO 10 ENDIF PRINT *,'FANCY: FINISHED MODE 0/1 SETUP, AT LABEL 3' * 3 CONTINUE IF (UNDRLN.OR.TMPRAW) GOTO 3333 LEN = BFLAST - INDEX + 1 IF (BFLAST.GT.0.AND.INDEX.GT.0.AND.LEN.GT.1.AND.FILENG.GT.0) THEN IF (LEN.GT.1) THEN ICAR = FIND1T(BYTES(INDEX),IBSLSH,LEN) IF (ICAR.GT.1) THEN ICAR = ICAR - 1

1225

ELSEIF (ICAR.EQ.-1) THEN ICAR = LEN ENDIF LEN = ICAR ENDIF IF (LEN.GT.1) THEN ICAR = FIND1T(BYTES(INDEX),ICARET,LEN) IF (ICAR.GE.1) THEN ICAR = ICAR - 1 ELSEIF (ICAR.EQ.-1) THEN ICAR = LEN ENDIF LEN = ICAR ELSE LEN = 0 ENDIF IF ((LFAUTO.EQ.0.OR.FILL.EQ.1).AND.LEN.GT.2) THEN ICR = FIND1T(BYTES(INDEX),I4CR,LEN) IF (ICR.GT.1) THEN ELSEIF ICR(ICR.EQ.-1) = ICR - 1 THEN ICR = LEN ENDIF LEN = ICR IF (LEN.GT.2) THEN CONTINUE J = INDEX + LEN -2 IF (BYTES(J).EQ.32) THEN LEN = LEN - 1 GOTO 1225 ENDIF ENDIF ENDIF IF (LEN.GT.2) THEN JJKK = INDEX + LEN - 1 IF (CHARS(JJKK).EQ.' '.AND.BYTES(JJKK+1).EQ.13.AND.JJKK.GT.INDEX) T JJKK = JJKK - 1 IF (JJKK.GT.INDEX.AND.CHARS(JJKK).EQ.' ') GOTO 1226 ENDIF WRITE (UNIT=PR,ERR=9930,IOSTAT=IOS) (CHARS(J),J=INDEX,JJKK) ICOUNT = ICOUNT + LEN INDEX = INDEX + LEN WRITE (11,'(I8,A,I8,A,F9.2,A)',ERR=3333) ICOUNT,' of ',FILENG,' = ',100.0*ICOUNT/FILENG,' %' ELSE

HEN 1226

&

GOTO 3333 ENDIF ENDIF 3333 CONTINUE THEBYT = GETIT() 10 CONTINUE IF (THEBYT.EQ.0) THEN IF (QTFLAG) GOTO 9801 GOTO 3 ENDIF CALL ISNTRP IF (IASC.EQ.16) CALL PAUSE('Pause in sending data to printer.') IF (IASC.EQ.19) THEN WRITE (11,*) 'Pause in sending data to printer.' 1214 CALL ISNTRP

50

8 9

IF (IASC.NE.17) GOTO 1214 ENDIF IF (INTRPT.OR.ESCAPE.OR.ABORT) GOTO 9801 IF (TMPRAW.AND.LFAUTO.EQ.1) GOTO 515 IF (TMPRAW.AND.LFAUTO.EQ.0) THEN CALL LFOFF IF (THECHR.EQ.CR) WRITE (UNIT=PR,ERR=9930,IOSTAT=IOS) CR,LF GOTO 515 ENDIF IF ((FILL.EQ.1).AND.(THECHR.EQ.ASPACE)) THEN SPCNT = 1 THEBYT = GETIT() IF ((THECHR.EQ.CR).OR.(THECHR.EQ.LF)) GOTO 5 IF (THECHR.EQ.ASPACE) SPCNT = SPCNT + 1 THEN GOTO 50 ENDIF WRITE (UNIT=PR,ERR=9930,IOSTAT=IOS) (ASPACE,I=1,SPCNT) ENDIF CONTINUE IF ((FILL.EQ.1).AND.((THECHR.EQ.LF).OR.(THECHR.EQ.CR))) THEN THEBYT = GETIT() IF (THECHR.EQ.LF) THEBYT = GETIT() IF (THECHR.EQ.CR) THEN CONTINUE IF (LFAUTO.EQ.0) WRITE (UNIT=PR,ERR=9930,IOSTAT=IOS) CR,LF WRITE (UNIT=PR,ERR=9930,IOSTAT=IOS) THECHR THEBYT = GETIT() IF (THECHR.EQ.LF) GOTO 9 IF (THECHR.EQ.CR) GOTO 8 ELSE WRITE (UNIT=PR,ERR=9930,IOSTAT=IOS) ASPACE ENDIF GOTO 10 ELSEIF ((FILL.EQ.0).AND.(THECHR.EQ.CR)) THEN THEBYT = GETIT() IF (LFAUTO.EQ.0) WRITE (UNIT=PR,ERR=9930,IOSTAT=IOS) CR,LF WRITE (UNIT=PR,ERR=9930,IOSTAT=IOS) CR IF (THECHR.EQ.LF) GOTO 3333 GOTO 10 ELSEIF ((FILL.EQ.1).AND.(THECHR.EQ.DASH)) THEN THEBYT = GETIT() SPCNT = 0 IF (THECHR.EQ.ASPACE) THEN SPCNT = SPCNT + 1 THEBYT = GETIT() IF (THECHR.EQ.ASPACE) GOTO 6 IF ((THECHR.EQ.LF).OR.(THECHR.EQ.CR)) THEN GOTO 3333 ELSE WRITE (UNIT=PR,ERR=9930,IOSTAT=IOS) DASH ENDIF WRITE (UNIT=PR,ERR=9930,IOSTAT=IOS) (ASPACE,I=1,SPCNT) ELSEIF ((THECHR.EQ.CR).OR.(THECHR.EQ.LF)) THEN THEBYT = GETIT() IF ((THECHR.EQ.CR).OR.(THECHR.EQ.LF)) THEN THEBYT = GETIT() GOTO 4 ENDIF ELSE WRITE (UNIT=PR,ERR=9930,IOSTAT=IOS) DASH

ENDIF GOTO 10 ELSEIF (SPECOF) THEN GOTO 515 * * THIS SECTIONS HANDLES SPECIAL COMMANDS TO FORMATTER * ELSEIF ((LEVEL.GT.0).AND.(THECHR.EQ.ENDCHR(LEVEL))) THEN IF (DIR(LEVEL).EQ.1) CALL FHLIN IF (DIR(LEVEL).EQ.-1) THEN CALL BHLIN CALL BHLIN CALL FHLIN ENDIF LEVEL = LEVEL - 1 GOTO 3333 ELSEIF ((THECHR.EQ.CARET).OR.(THECHR.EQ.BACKSL)) THEN TC = THECHR THEBYT = GETIT() IMMM = ICHAR(THECHR) IF (IMMM.GE.97.AND.IMMM.LE.122) IMMM = IMMM - 32 PROCHR = CHAR(IMMM) IF (PROCHR.EQ.'Q') THEN THEBYT = GETIT() WRITE (UNIT=PR,ERR=9930,IOSTAT=IOS) THECHR GOTO 3333 ELSEIF ((PROCHR.EQ.'B').OR.(PROCHR.EQ.'M')) THEN * CTRLB = .TRUE. IF (LFAUTO.EQ.0) WRITE (UNIT=PR,ERR=9930,IOSTAT=IOS) CR,LF WRITE (UNIT=PR,ERR=9930,IOSTAT=IOS) CR 61 THEBYT = GETIT() SPCNT = 0 IF (THECHR.EQ.ASPACE) THEN 66 SPCNT = SPCNT + 1 THEBYT = GETIT() IF (THECHR.EQ.ASPACE) GOTO 66 IF ((THECHR.EQ.LF).OR.(THECHR.EQ.CR)) THEN GOTO 3333 ELSE IF (PROPSP.EQ.1) CALL PSPOFF DO 67 IKJ = 1,SPCNT WRITE (UNIT=PR,ERR=9930,IOSTAT=IOS) ASPACE 67 CONTINUE IF (PROPSP.EQ.1) CALL PSPON GOTO 10 ENDIF ELSEIF ((THECHR.EQ.CR).OR.(THECHR.EQ.LF)) THEN GOTO 3333 ELSEIF ((THECHR.GE.'0').AND.(THECHR.LE.'9')) THEN READ (THECHR,'(BN,I1)') I IF (I.EQ.0) I = 10 DO 68 J = 1,I IF (LFAUTO.EQ.0) WRITE (UNIT=PR,ERR=9930,IOSTAT=IOS) LF WRITE (UNIT=PR,ERR=9930,IOSTAT=IOS) CR 68 CONTINUE GOTO 61 ELSE GOTO 10 ENDIF ELSEIF ((THECHR.EQ.BACKSL).OR.(THECHR.EQ.SLASH)) THEN

12

14

LEVEL = LEVEL + 1 ENDCHR(LEVEL) = THECHR DIR(LEVEL) = 0 THEBYT = GETIT() IF (THECHR.EQ.ENDCHR(LEVEL)) THEN LEVEL = LEVEL - 1 GOTO 3333 ENDIF WRITE (UNIT=PR,ERR=9930,IOSTAT=IOS) THECHR GOTO 12 ELSEIF (PROCHR.EQ.'L') THEN IF (LFAUTO.EQ.1) CALL LFOFF WRITE (UNIT=PR,ERR=9930,IOSTAT=IOS) FF IF (LFAUTO.EQ.1) THEN WRITE (UNIT=PR,ERR=9930,IOSTAT=IOS) CR CALL LFON ELSE WRITE (UNIT=PR,ERR=9930,IOSTAT=IOS) CR ENDIF GOTO 3333 ELSEIF (PROCHR.EQ.'C') THEN JK = 0 THEBYT = GETIT() IF ((THECHR.NE.CR).AND.(LINLEN.GT.JK)) THEN JK = JK + 1 ALINE(JK:JK) = THECHR GOTO 14 ELSE RM = FLOAT(RGTMAR) LM = FLOAT(LEFMAR) IF (SIZE.EQ.0) THEN LINLEN = IFIX( (RM-LM)/12.0 ) ELSEIF (SIZE.EQ.1) THEN LINLEN = IFIX( (RM-LM)/10.0 ) ELSEIF (SIZE.EQ.2) THEN LINLEN = IFIX( (RM-LM)*7.0/50.0 ) ENDIF IF (ENHANC.EQ.0) THEN KL = (LINLEN - JK) /2 ELSE KL = (LINLEN - 2*JK) /4 ENDIF CALL JSTOFF I = SIZE + 3*ENHANC I = CPIS(I)*KL CALL RTAB(I) WRITE (UNIT=PR,ERR=9930,IOSTAT=IOS) (ALINE(JKL:JKL),JKL=1,JK) WRITE (UNIT=PR,ERR=9930,IOSTAT=IOS) CR IF (LFAUTO.EQ.0) WRITE (UNIT=PR,ERR=9930,IOSTAT=IOS) LF,CR IF (JSTIFY) CALL JSTON GOTO 3333 ENDIF ELSEIF (THECHR.EQ.CARET) THEN THEBYT = GETIT() IF ((THECHR.EQ.CARET).OR.(THECHR.EQ.BACKSL).OR.(THECHR.EQ.SLASH))T LEVEL = LEVEL + 1 ENDCHR(LEVEL) = THECHR DIR(LEVEL) = 1 CALL BHLIN

HEN

GOTO 3333 ELSE CALL BHLIN WRITE (UNIT=PR,ERR=9930,IOSTAT=IOS) THECHR CALL FHLIN GOTO 3333 ENDIF ELSEIF (PROCHR.EQ.'V') THEN THEBYT = GETIT() IF ((THECHR.EQ.CARET).OR.(THECHR.EQ.BACKSL).OR.(THECHR.EQ.SLASH)) THEN LEVEL = LEVEL + 1 ENDCHR(LEVEL) = THECHR DIR(LEVEL) = -1 CALL FHLIN GOTO 3333 ELSE CALL FHLIN WRITE (UNIT=PR,ERR=9930,IOSTAT=IOS) THECHR CALL BHLIN CALL BHLIN CALL FHLIN GOTO 3333 ENDIF ELSEIF (THECHR.EQ.'0') THEN ENHANC = 0 SIZE = 0 CALL PICA CALL STHTAB LINLEN = IFIX( (RM-LM)/12.0 ) PRINT *,'LPI = ',LPI,' ',COLORS(COLOR),SIZES(SIZE),FONTS(FONT),'>P GOTO 3333 ELSEIF (THECHR.EQ.'1') THEN ENHANC = 0 SIZE = 1 CALL ELITE CALL STHTAB LINLEN = IFIX( (RM-LM)/10.0 ) PRINT *,'LPI = ',LPI,' ',COLORS(COLOR),SIZES(SIZE),FONTS(FONT),'>E GOTO 3333 ELSEIF (THECHR.EQ.'2') THEN ENHANC = 0 SIZE = 2 CALL SMALLC CALL STHTAB LINLEN = IFIX( (RM-LM)*7.0/50.0 ) PRINT *,'LPI = ',LPI,' ',COLORS(COLOR),SIZES(SIZE),FONTS(FONT),'>S GOTO 3333 ELSEIF (THECHR.EQ.'3') THEN CALL LPI3 LPI = 3 PRINT *,'LD = ',LD,' LPI = ',LPI,' PAGE = ',PAGE,' >LPI3' GOTO 3333 ELSEIF (THECHR.EQ.'4') THEN CALL LPI4 LPI = 4 PRINT *,'LD = ',LD,' LPI = ',LPI,' PAGE = ',PAGE,' >LPI3'

* ICA'

* LITE'

* MALL'

GOTO 3333 ELSEIF (THECHR.EQ.'5') THEN CALL LPI5 LPI = 5 PRINT *,'LD = ',LD,' LPI = ',LPI,' PAGE = ',PAGE,' >LPI3' GOTO 3333 ELSEIF (THECHR.EQ.'6') THEN CALL LPI6 LPI = 6 PRINT *,'LD = ',LD,' LPI = ',LPI,' PAGE = ',PAGE,' >LPI3' GOTO 3333 ELSEIF (THECHR.EQ.'7') THEN CALL LPI7 LPI = 7 PRINT *,'LD = ',LD,' LPI = ',LPI,' PAGE = ',PAGE,' >LPI3' GOTO 3333 ELSEIF (THECHR.EQ.'8') THEN CALL LPI8 LPI = 8 PRINT *,'LD = ',LD,' LPI = ',LPI,' PAGE = ',PAGE,' >LPI3' GOTO 3333 ELSEIF (THECHR.EQ.'9') THEN CALL LPI9 LPI = 9 PRINT *,'LD = ',LD,' LPI = ',LPI,' PAGE = ',PAGE,' >LPI3' GOTO 3333 ELSEIF (PROCHR.EQ.'A') THEN CALL LPI10 LPI = 10 PRINT *,'LD = ',LD,' LPI = ',LPI,' PAGE = ',PAGE,' >LPI3' GOTO 3333 ELSEIF (PROCHR.EQ.'F') THEN FILL = 1 GOTO 3333 ELSEIF (PROCHR.EQ.'J') THEN JUSTFY = 1 SVJST = 1 CALL JSTON GOTO 3333 ELSEIF (PROCHR.EQ.'P') THEN PROPSP = 1 SVPSP = 1 CALL PSPON GOTO 3333 ELSEIF (PROCHR.EQ.'E') THEN ENHANC = 1 CALL DOUBLE PRINT *,'LPI = ',LPI,' ',COLORS(COLOR),SIZES(SIZE),FONTS(FONT) GOTO 3333 ELSEIF (THECHR.EQ.'_') THEN UNDRLN = .TRUE. SPSKIP = .FALSE. GOTO 3333 ELSEIF (THECHR.EQ.'-') THEN UNDRLN = .TRUE. SPSKIP = .TRUE. GOTO 3333 ELSEIF (PROCHR.EQ.'N') THEN THEBYT = GETIT() IMMM = ICHAR(THECHR)

IF (IMMM.GE.97.AND.IMMM.LE.122) IMMM = IMMM - 32 PROCHR = CHAR(IMMM) IF (PROCHR.EQ.'F') THEN FILL = 0 GOTO 3333 ELSEIF (PROCHR.EQ.'J') THEN JUSTFY = 0 CALL JSTOFF GOTO 3333 ELSEIF (PROCHR.EQ.'P') THEN PROPSP = 0 CALL PSPOFF GOTO 3333 ELSEIF (PROCHR.EQ.'_'.OR.PROCHR.EQ.'-') THEN UNDRLN = .FALSE. GOTO 3333 ELSEIF (PROCHR.EQ.'E') THEN ENHANC = 0 CALL NORMAL PRINT *,'LPI = ',LPI,' ',COLORS(COLOR),SIZES(SIZE),FONTS(FONT) GOTO 3333 ELSE GOTO 10 ENDIF ELSEIF (PROCHR.EQ.'S') THEN THEBYT = GETIT() IMMM = ICHAR(THECHR) IF (IMMM.GE.97.AND.IMMM.LE.122) IMMM = IMMM - 32 PROCHR = CHAR(IMMM) IF (PROCHR.EQ.'0'.OR.PROCHR.EQ.'P'.OR.PROCHR.EQ.')') THEN SIZE = 0 ENHANC = 0 CALL PICA CALL STHTAB ELSEIF (PROCHR.EQ.'1'.OR.PROCHR.EQ.'E'.OR.PROCHR.EQ.'!') THEN SIZE = 1 ENHANC = 0 CALL ELITE CALL STHTAB ELSEIF (PROCHR.EQ.'2'.OR.PROCHR.EQ.'S'.OR.PROCHR.EQ.'@') THEN SIZE = 2 ENHANC = 0 CALL SMALLC CALL STHTAB ELSEIF (PROCHR.EQ.'3'.OR.PROCHR.EQ.'#') THEN SIZE = 0 ENHANC = 1 CALL DPICA ELSEIF (PROCHR.EQ.'4'.OR.PROCHR.EQ.'$') THEN SIZE = 1 ENHANC = 1 CALL DELITE ELSEIF (PROCHR.EQ.'5'.OR.PROCHR.EQ.'%') THEN SIZE = 2 ENHANC = 1 CALL DSMALL ELSEIF (PROCHR.EQ.'D') THEN THEBYT = GETIT() ENHANC = 1 IF ((THECHR.EQ.'P').OR.(THECHR.EQ.'p')) THEN

SIZE = 0 CALL DPICA ELSEIF ((THECHR.EQ.'E').OR.(THECHR.EQ.'e')) THEN SIZE = 1 CALL DELITE ELSEIF ((THECHR.EQ.'S').OR.(THECHR.EQ.'s')) THEN SIZE = 2 CALL DSMALL ELSE CALL DOUBLE PRINT *,'LPI = ',LPI,' ',COLORS(COLOR),SIZES(SIZE),FONTS(F ONT) GOTO 10 ENDIF ELSE GOTO 10 ENDIF IF (SIZE.EQ.0) THEN LINLEN = IFIX( (RM-LM)/12.0 ) ELSEIF (SIZE.EQ.1) THEN LINLEN = IFIX( (RM-LM)/10.0 ) ELSEIF (SIZE.EQ.2) THEN LINLEN = IFIX( (RM-LM)*7.0/50.0 ) ENDIF PRINT *,'LPI = ',LPI,' ',COLORS(COLOR),SIZES(SIZE),FONTS(FONT) GOTO 3333 ELSEIF (PROCHR.EQ.'T') THEN THEBYT = GETIT() IMMM = ICHAR(THECHR) IF (IMMM.GE.97.AND.IMMM.LE.122) IMMM = IMMM - 32 PROCHR = CHAR(IMMM) IF (PROCHR.EQ.'C'.OR.PROCHR.EQ.'0'.OR.PROCHR.EQ.')') THEN FONT = 0 CALL CORRES ELSEIF (PROCHR.EQ.'D'.OR.PROCHR.EQ.'1'.OR.PROCHR.EQ.'!') THEN FONT = 1 CALL DRAFT ELSEIF (PROCHR.EQ.'R'.OR.PROCHR.EQ.'2'.OR.PROCHR.EQ.'@') THEN FONT = 2 CALL ROTGRA ELSEIF (THECHR.EQ.'G'.OR.PROCHR.EQ.'3'.OR.PROCHR.EQ.'#') THEN FONT = 3 CALL REGGRA ELSE GOTO 10 ENDIF PRINT *,'LPI = ',LPI,' ',COLORS(COLOR),SIZES(SIZE),FONTS(FONT) GOTO 3333 ELSEIF (PROCHR.EQ.'H'.OR.THECHR.EQ.'<'.OR.THECHR.EQ.'>') THEN IF (THECHR.EQ.'<'.OR.THECHR.EQ.'>') THEN I = SIZE + 3*ENHANC I = CPIS(I) IF (THECHR.EQ.'<') I = - I CALL RTAB(I) GOTO 3333 ENDIF THEBYT = GETIT() IF ((THECHR.GE.'0').AND.(THECHR.LE.'9')) THEN STRING = THECHR ABSOLU = .TRUE.

40

41 42 C

I = 2 ELSEIF ((THECHR.GE.'A').AND.(THECHR.LE.'a')) THEN STRING = ' ' ABSOLU = .TRUE. I = 1 ELSEIF ((THECHR.GE.'R').AND.(THECHR.LE.'r')) THEN STRING = ' ' ABSOLU = .FALSE. I = 1 ELSEIF (THECHR.EQ.'+') THEN STRING = '+' ABSOLU = .FALSE. I = 2 ELSEIF (THECHR.EQ.'-') THEN STRING = '-' ABSOLU = .FALSE. I = 2 ELSE GOTO 10 ENDIF THEBYT = GETIT() IF (I.GT.20) THEN GOTO 41 ELSEIF ((THECHR.GE.'0').AND.(THECHR.LE.'9')) THEN STRING (I:I) = THECHR I = I+1 GOTO 40 ELSEIF ((I.EQ.1).AND.((THECHR.EQ.'+').OR.(THECHR.EQ.'-'))) THEN STRING(1:1) = THECHR I = 2 GOTO 40 ENDIF CONTINUE I = INTSTR(STRING) CONTINUE ITAB = I PRINT *,'^H: 42 CONTINUE' IF (ABSOLU) THEN IF ((ITAB.GT.120).OR.(ITAB.LT.0)) THEN GOTO 10 ELSE CALL TAB(ITAB) ENDIF ELSE IF ((ITAB.LT.-120).OR.(ITAB.GT.120)) THEN GOTO 10 ELSE CALL RTAB(ITAB) ENDIF ENDIF GOTO 10 ELSEIF (PROCHR.EQ.ASPACE.OR.PROCHR.EQ.'U') THEN CALL FHLIN GOTO 3333 ELSEIF (PROCHR.EQ.'R') THEN CALL BHLIN GOTO 3333 ELSEIF (PROCHR.EQ.'K') THEN THEBYT = GETIT() IMMM = ICHAR(THECHR)

IF (IMMM.GE.97.AND.IMMM.LE.122) IMMM = IMMM - 32 PROCHR = CHAR(IMMM) IF (PROCHR.EQ.'R'.OR.PROCHR.EQ.'0'.OR.PROCHR.EQ.')') THEN COLOR = 0 CALL RED ELSEIF (PROCHR.EQ.'G'.OR.PROCHR.EQ.'1'.OR.PROCHR.EQ.'!') THEN COLOR = 1 CALL GREEN ELSEIF (PROCHR.EQ.'U'.OR.PROCHR.EQ.'B'.OR.PROCHR.EQ.'2'.OR.PROCHR. EQ.'@') THEN COLOR = 2 CALL BLUE ELSEIF (PROCHR.EQ.'A'.OR.PROCHR.EQ.'3'.OR.PROCHR.EQ.'#') THEN COLOR = 3 CALL BLACK ELSE COLOR = 3 CALL BLACK PRINT *,'LPI = ',LPI,' ',COLORS(COLOR),SIZES(SIZE),FONTS(FONT) GOTO 10 ENDIF PRINT *,'LPI = ',LPI,' ',COLORS(COLOR),SIZES(SIZE),FONTS(FONT) GOTO 3333 ELSEIF (PROCHR.EQ.'O') THEN CALL LFOFF WRITE (UNIT=PR,ERR=9930,IOSTAT=IOS) CR IF (LFAUTO.EQ.1) CALL LFON GOTO 3333 ELSEIF (PROCHR.EQ.'W') THEN THEBYT = GETIT() IMMM = ICHAR(THECHR) IF (IMMM.GE.97.AND.IMMM.LE.122) IMMM = IMMM - 32 PROCHR = CHAR(IMMM) IF (PROCHR.EQ.'F') THEN CALL FFON ELSEIF (PROCHR.EQ.'S') THEN CALL FFOFF ELSEIF (PROCHR.EQ.'A') THEN CH6 = ' ' I = 1 THEBYT = GETIT() CH6(I:I) = THECHR I = I + 1 IF (I.LE.4) GOTO 4110 I = INTOF(CH6) IF (I.LT.28) I = 34 IF (I.GT.336) I = 112 LPI = 336/I LFINC = I HLFINC = I*0.4 J = HLFINC CALL VSPAC3(I,J) ELSEIF (PROCHR.EQ.'L') THEN CH6 = ' ' I = 1 THEBYT = GETIT() CH6(I:I) = THECHR I = I + 1 IF (I.LE.6.AND.THECHR.NE.'.') GOTO 4111 I = INTOF(CH6)

4110

4111

IF (I.LE.0.OR.I.GT.32767) I = 32767 LD = I CALL SETLD(I) ENDIF GOTO 3333 ELSEIF (PROCHR.EQ.'X') THEN THEBYT = GETIT() IMMM = ICHAR(THECHR) IF (IMMM.GE.97.AND.IMMM.LE.122) IMMM = IMMM - 32 PROCHR = CHAR(IMMM) IF (PROCHR.EQ.'R') THEN TMPRAW = .TRUE. SVJUST = JUSTFY SVPROP = PROPSP CALL JSTOFF CALL PSPOFF ELSEIF (PROCHR.EQ.']') THEN THEBYT = GETIT() IMMM = ICHAR(THECHR) IF (IMMM.GE.97.AND.IMMM.LE.122) IMMM = IMMM - 32 PROCHR = CHAR(IMMM) PRINT *,'^X] - LEFT MARGIN ADJUST ' IF (PROCHR.EQ.'.') THEN LEFMAR = LMARSV ELSEIF (PROCHR.EQ.'>') THEN LEFMAR = LEFMAR + 120 ELSEIF (PROCHR.EQ.'<') THEN LEFMAR = LEFMAR - 120 ELSEIF (PROCHR.EQ.')') THEN LEFMAR = LEFMAR + 60 ELSEIF (PROCHR.EQ.'(') THEN LEFMAR = LEFMAR - 60 ENDIF CALL D2MARG(LEFMAR,RGTMAR) ELSEIF (PROCHR.EQ.'[') THEN THEBYT = GETIT() IMMM = ICHAR(THECHR) IF (IMMM.GE.97.AND.IMMM.LE.122) IMMM = IMMM - 32 PROCHR = CHAR(IMMM) PRINT *,'^X[ - RIGHT MARGIN ADJUST ' IF (PROCHR.EQ.'.') THEN RGTMAR = RMARSV ELSEIF (PROCHR.EQ.'>') THEN RGTMAR = RGTMAR + 120 ELSEIF (PROCHR.EQ.'<') THEN RGTMAR = RGTMAR - 120 ELSEIF (PROCHR.EQ.')') THEN RGTMAR = RGTMAR + 60 ELSEIF (PROCHR.EQ.'(') THEN RGTMAR = RGTMAR - 60 ENDIF CALL D2MARG(LEFMAR,RGTMAR) ELSEIF (PROCHR.EQ.'>') THEN RGTMAR = RGTMAR - 120 LEFMAR = LEFMAR + 120 CALL D2MARG(LEFMAR,RGTMAR) ELSEIF (PROCHR.EQ.'<') THEN RGTMAR = RGTMAR + 120 LEFMAR = LEFMAR - 120 CALL D2MARG(LEFMAR,RGTMAR)

ELSEIF (PROCHR.EQ.')') THEN RGTMAR = RGTMAR - 60 LEFMAR = LEFMAR + 60 CALL D2MARG(LEFMAR,RGTMAR) ELSEIF (PROCHR.EQ.'(') THEN RGTMAR = RGTMAR + 60 LEFMAR = LEFMAR - 60 CALL D2MARG(LEFMAR,RGTMAR) ELSEIF (PROCHR.EQ.'.') THEN PRINT *,'^X. - MARGIN RESTORE' LEFMAR = LMARSV RGTMAR = RMARSV CALL D2MARG(LEFMAR,RGTMAR) ELSEIF (PROCHR.EQ.'N') THEN SPECOF = .TRUE. ELSEIF (PROCHR.EQ.'F') THEN CALL CCNSL0 WRITE (11,*) 'SWITCHING TO FANCY MODE' WRITE (11,*) 'Ctrl C to ABORT, Ctrl P to PAUSE' CALL RSTPRB MODE = 1 PROPSP = 1 JUSTFY = 1 SVJUST = 1 SVPROP = 1 IF (LEFMAR.EQ.0.AND.RGTMAR.EQ.960) THEN LEFMAR = 60 RGTMAR = 900 ENDIF LMARSV = LEFMAR RMARSV = RGTMAR SKIPRF = 1 FILL = 1 FONT = 0 LPI = 7 SIZE = 1 CALL ELITE COLOR = 3 ENHANC = 0 CALL SAVEPR GOTO 4445 ELSEIF (PROCHR.EQ.'O') THEN CALL CCNSL0 WRITE (11,*) 'SWITCHING TO ORDINARY MODE' WRITE (11,*) 'Ctrl C to ABORT , Ctrl P to PAUSE' CALL RSTPRB MODE = 0 COLOR = 3 ENHANC = 0 LEFMAR = 0 RGTMAR = 960 LMARSV = LEFMAR RMARSV = RGTMAR SIZE = 0 FONT = 0 JUSTFY = 0 PROPSP = 0 SVJUST = 0 SVPROP = 0 LPI = 6

SKIPRF = 1 FILL = 0 CALL SAVEPR GOTO 4445 ENDIF GOTO 3333 ELSEIF (PROCHR.EQ.'Y') THEN CALL LFOFF CALL JSTOFF CALL FHLINE IF (JSTIFY) CALL JSTON IF (LFAUTO.EQ.1) CALL LFON GOTO 3333 ELSEIF (PROCHR.EQ.'Z') THEN CALL LFOFF CALL JSTOFF CALL BHLINE IF (JSTIFY) CALL JSTON IF (LFAUTO.EQ.1) CALL LFON GOTO 3333 ELSEIF (THECHR.EQ.'$') THEN THEBYT = GETIT() GREEK = THECHR GOTO 3333 ENDIF WRITE (UNIT=PR,ERR=9930,IOSTAT=IOS) TC,THECHR * * END OF SPECIAL COMMAND PROCESSING * ELSEIF (THECHR.EQ.GREEK) THEN * * SPECIAL CHARACTERS PROCESSING * WRITE (UNIT=PR,ERR=9930,IOSTAT=IOS) THECHR GOTO 3333 ENDIF 515 CONTINUE IF (THEBYT.EQ.0) THEN IF (QTFLAG) GOTO 9801 ENDIF IF (THECHR.EQ.CARET.OR.THECHR.EQ.BACKSL) THEN PROCHR = THECHR THEBYT = GETIT() IF (THECHR.EQ.'@') THEN IF (TMPRAW) THEN JUSTFY = SVJUST PROPSP = SVPROP ENDIF IF (JUSTFY.EQ.1) CALL JSTON IF (PROPSP.EQ.1) CALL PSPON TMPRAW = .FALSE. SPECOF = .FALSE. GOTO 3333 ENDIF WRITE (UNIT=PR,ERR=9930,IOSTAT=IOS) PROCHR ENDIF IF (UNDRLN) THEN IF (THECHR.NE.ASPACE.AND.THEBYT.NE.0.AND.THEBYT.NE.13) THEN LEN = BFLAST - INDEX + 1 IF (BFLAST.GT.0.AND.INDEX.GT.0.AND.LEN.GT.1.AND.FILENG.GT.0) THEN

ICAR = FIND1T(BYTES(INDEX),I4SPAC,LEN) IF (ICAR.GT.0) THEN ICAR = ICAR - 1 ELSE ICAR = LEN ENDIF LEN = ICAR IF (LEN.GT.0) THEN ICAR = FIND1T(BYTES(INDEX),I4CR,LEN) IF (ICAR.GT.0) THEN ICAR = ICAR - 1 ELSE ICAR = LEN ENDIF LEN = ICAR ENDIF IF (LEN.GT.0) THEN ICAR = FIND1T(BYTES(INDEX),ICARET,LEN) IF (ICAR.GT.0) THEN ICAR = ICAR - 1 ELSE ICAR = LEN ENDIF LEN = ICAR ENDIF IF (LEN.GT.0) THEN ICAR = FIND1T(BYTES(INDEX),IBSLSH,LEN) IF (ICAR.GT.0) THEN ICAR = ICAR - 1 ELSE ICAR = LEN ENDIF LEN = ICAR ENDIF ELSE LEN = 0 ENDIF I = SIZE + 3*ENHANC IBACK = -CPIS(I)*(LEN+2) IF (LEN.GE.1) THEN IF (PROPSP.EQ.1) CALL PSPOFF IF (LFAUTO.EQ.1) CALL SYSFUN(7,LFPKT(1),IEROR) ENDIF WRITE (UNIT=PR,ERR=9930,IOSTAT=IOS) (' ',I=0,LEN),'_' CALL RTAB(IBACK) IF (LEN.GT.1.AND.JSTIFY) CALL JSTOFF WRITE (UNIT=PR,ERR=9930,IOSTAT=IOS) ('_',I=0,LEN),'_' CALL RTAB(IBACK) IF (LEN.GE.1) THEN IF (LFAUTO.EQ.1) CALL SYSFUN(7,LFPKT(5),IEROR) ENDIF WRITE (UNIT=PR,ERR=9930,IOSTAT=IOS) (CHARS(INDEX-1+I),I=0,LEN) IF (LEN.GE.1) THEN IF (PROPSP.EQ.1) CALL PSPON IF (JSTIFY) CALL JSTON ENDIF INDEX = INDEX + LEN ELSEIF (.NOT.SPSKIP) THEN WRITE (UNIT=PR,ERR=9930,IOSTAT=IOS) '_' ELSE

WRITE (UNIT=PR,ERR=9930,IOSTAT=IOS) ' ' ENDIF ELSE WRITE (UNIT=PR,ERR=9930,IOSTAT=IOS) THECHR ENDIF THEBYT = BYTES(INDEX) IF (THECHR.EQ.'^'.OR.THECHR.EQ.'\'.OR.THEBYT.EQ.13.OR.THEBYT.EQ.10) GOTO 3 333 GOTO 3 * 9802 CONTINUE CALL LFOFF WRITE (UNIT=PR,ERR=9930,IOSTAT=IOS) CR,FF,CR QTFLAG = .FALSE. RETURN 9801 CONTINUE * WRITE (UNIT=PR,ERR=9930,IOSTAT=IOS) THECHR INTRPT = .FALSE. CALL CCNSL0 PR = 7 IF (ESCAPE.OR.ABORT) THEN CALL RESETP QTFLAG = .FALSE. RETURN ENDIF GOTO 9802 * 9920 CONTINUE CALL CRCLS PRINT *,'ERROR IN READING UNIT 45, DISK: FILENAME = ',FNAME PRINT *,'CONTINUE? ABORT? (Ctrl C = ABORT)' CALL PAUSE(' ') IF (INTRPT.OR.ESCAPE.OR.ABORT) RETURN IF (MODE.LE.1) GOTO 3333 IF (MODE.GE.2) GOTO 2121 9930 CONTINUE PRINT *,'ERROR WRITING PR, ',PR,' TRIES = ',KTRIES,' IOS ',IOS PR = 7 IF (PRFKD) THEN KTRIES = KTRIES + 1 IF (KTRIES.GT.3) THEN CALL INIT RETURN ENDIF CALL WAIT(1.40) ELSE KTRIES = 1 PRFKD = .TRUE. ENDIF PR = 7 PRN = 7 IF (IOS.EQ.647) THEN CLOSE (UNIT=7,ERR=9931) 9931 CONTINUE CALL RSTPRB ENDIF OPEN (UNIT=7,FILE='#PR',FORM='BINARY',ERR=9930,IOSTAT=IOS) WRITE (UNIT=7,ERR=9930,IOSTAT=IOS) THECHR PRFKD = .FALSE. PRINT *,'ATTEMPTED ERROR RECOVERY APPARENTLY SUCCESSFUL'

PRINT *,'THERE HAVE BEEN ',HOWFKD,' PREVIOUS RECOVERABLE ERRORS' HOWFKD = HOWFKD + 1 KTRIES = 1 IF (MODE.LE.1) GOTO 3333 IF (MODE.GE.2) GOTO 2121 * END *---------------------------------------------------------------------$SEGMENT MOREDP INTEGER*1 FUNCTION GETIT() CHARACTER*1 TC,TCALGN(2),THECHR,BLOCK*80,FNAME*26 INTEGER*4 FILENG,PR,DSKFIL,INDEX,IBB,IBE,IOS,BFLAST INTEGER*2 ASC,SCAN,KBF1,KBF2,ERR,IASC,ISCAN,IKBF1,IKBF2,IERR INTEGER*1 BYTE,BYTES(2048) LOGICAL*4 QTFLAG,ERRFLG,ENDFLG LOGICAL*2 ABORT,ESCAPE,INTRPT,RSH,LSH,CTRL,ALT,SCRL,NUML,CAPS,INS,INYET,FO OB EQUIVALENCE (ASC,IASC),(SCAN,ISCAN),(KBF1,IKBF1),(KBF2,IKBF2),(ERR,IERR) EQUIVALENCE (TCALGN(1),IASC),(TCALGN(2),TC) EQUIVALENCE (BYTE,BYTES(1),IBB,THECHR),(IBE,BYTES(2045)) COMMON /PASSIT/QTFLAG,/FISIZE/FILENG,/DPUNIT/PR,DSKFIL,/DPWHER/ICOUNT,INDE X,BFLAST,BYTES COMMON /KEYGET/IASC,ISCAN,IKBF1,IKBF2,IERR,/NTRVN/ABORT,ESCAPE,INTRPT COMMON /SHFSTA/RSH,LSH,CTRL,ALT,SCRL,NUML,CAPS,INS,/KTESTS/INYET,FOOB COMMON /CHARS/BLOCK,FNAME SAVE /KEYGET/,/SHFSTA/,/NTRVN/,/PASSIT/,/FISIZE/,/DPWHER/,/CHARS/ SAVE ERRFLG,ENDFLG SAVE DATA MAX/2048/,ERRFLG/.FALSE./,ENDFLG/.FALSE./ IF (FILENG.GT.0.AND.ICOUNT.LT.FILENG) QTFLAG = .FALSE. 1 CONTINUE IF (QTFLAG) GOTO 9802 IF (FILENG.LE.0) THEN READ (UNIT=DSKFIL,ERR=9920,END=9801) BYTE GETIT = BYTE INDEX = 1 MAX = 1 BFLAST = 1 BYTES(1) = BYTE ELSE IF (INDEX.GE.1.AND.INDEX.LE.MAX) THEN GETIT = BYTES(INDEX) INDEX = INDEX + 1 ICOUNT = ICOUNT + 1 ELSEIF (INDEX.GT.MAX) THEN INDEX = 0 IF (ERRFLG) GOTO 9920 IF (ENDFLG) GOTO 9802 GOTO 1 ELSEIF (INDEX.EQ.0) THEN MAX = 2048 INDEX = 1 I = 2048 CALL ZAPIT(BYTES,I) IBB = 0 IBE = 0 IF (FILENG.GT.0.AND.ICOUNT.LT.(FILENG+2049)) THEN J = 2048 READ (UNIT=DSKFIL,ERR=1001,END=1002) (BYTES(I),I=1,2048) ELSEIF (FILENG.GT.0.AND.ICOUNT.LT.(FILENG+1025)) THEN

J = 1024 READ (UNIT=DSKFIL,ERR=1001,END=1002) (BYTES(I),I=1,1024) ELSEIF (FILENG.GT.0.AND.ICOUNT.LT.(FILENG+513)) THEN J = 512 READ (UNIT=DSKFIL,ERR=1001,END=1002) (BYTES(I),I=1,512) ELSEIF (FILENG.GT.0.AND.ICOUNT.LT.(FILENG+256)) THEN J = 256 READ (UNIT=DSKFIL,ERR=1001,END=1002) (BYTES(I),I=1,256) ELSE J = 0 DO 1000 I = 1,2048 READ (UNIT=DSKFIL,ERR=1001,END=1002) BYTES(I) J = I 1000 CONTINUE ENDIF GOTO 1999 1001 CONTINUE ERRFLG = .TRUE. 1002 CONTINUE ENDFLG = .TRUE. MAX = J BYTES(J+1) = 0 1999 CONTINUE BFLAST = MAX GOTO 1 ENDIF ENDIF RETURN 9801 CONTINUE WRITE(UNIT=PR,ERR=9930,IOSTAT=IOS) THECHR 9802 CONTINUE GETIT = 0 INDEX = 0 MAX = 2048 ERRFLG = .FALSE. ENDFLG = .FALSE. QTFLAG = .TRUE. ICOUNT = FILENG CALL CCNSL0 PR = 7 IF (INTRPT.OR.ESCAPE.OR.ABORT) THEN CALL RESETP RETURN ENDIF CALL LFOFF WRITE(UNIT=PR,ERR=9930,IOSTAT=IOS) CR,FF,CR RETURN 9920 CONTINUE CALL CRCLS PRINT *,'ERROR IN READING UNIT 45: DISK' CALL PAUSE(' ') GOTO 9802 9930 CONTINUE PRINT *,'ERROR WRITING PR, ',PR,' IOS ',IOS INTRPT = .TRUE. GOTO 9802 END *------------------------------------------------------------SUBROUTINE DSETUP *

* (C) COPYRIGHT: Kevin G. Rhoads & High Voltage Research Lab (MIT) - 1983,84,85 * CHARACTER*6 COLORS(0:3),SIZES(0:2) CHARACTER*12 FONTS(0:3) CHARACTER*1 CR,LF,TABCH,FF,ASPACE,DASH,CARET,SLASH,BACKSL,VERBAR CHARACTER*8 ISJST(0:1),ISPSP(0:1),ISFILL(0:1),MODES(0:3) INTEGER*4 SCRN0,CNSL0,KPD,PRN,BUSA,BUSB,BUSC,BUSD,FILE,GR INTEGER*4 PR,DSKFIL,ERROR,GETINT INTEGER*2 PCKTA(100),SPACE,HSPACE,SAVLPI,LD,FORM,PAGE,AFF INTEGER*2 MODE,COLOR,SIZE,ENHANC,FONT,ANSWER,SKIPRF,JUSTFY,FILL,PROPSP,LFA UTO,LPI,LEFMAR,RGTMAR LOGICAL*4 ISOPEN LOGICAL*2 ISTEST,NULL LOGICAL*1 FIRST,QUIT COMMON /ANULL/NULL,/DPUNIT/PR,DSKFIL,/TST/ISTEST,/SAVELD/LD COMMON /FORM/MODE,COLOR,SIZE,ENHANC,FONT,ANSWER,SKIPRF,JUSTFY,FILL,PROPSP, LFAUTO,LPI,LEFMAR,RGTMAR,FIRST,QUIT COMMON /CONCHR/CR,LF,TABCH,FF,ASPACE,DASH,CARET,SLASH,BACKSL,VERBAR COMMON /USER/COLORS,SIZES,FONTS,MODES,/USER2/ISJST,ISPSP,ISFILL COMMON /UNITS/SCRN0,CNSL0,KPD,PRN,BUSA,BUSB,BUSC,BUSD,FILE,GR COMMON /SAVAFF/FORM,PAGE,AFF SAVE /UNITS/,/SAVELD/ SAVE /TST/,/USER/,/USER2/,/CONCHR/,/FORM/,/DPUNIT/,/ANULL/ EXTERNAL GETINT SAVE * INQUIRE (UNIT=7,OPENED=ISOPEN) IF (ISOPEN) CLOSE (UNIT=7,ERR=9922) 9922 OPEN (UNIT=7,FILE='#PR',FORM='BINARY') IF (LPI.LT.3) LPI = 3 IF (LPI.GT.10) LPI = 10 CALL GRPRT(0) IPASS = 0 IF (LEFMAR.GE.RGTMAR) THEN LEFMAR = -1 RGTMAR = -1 ENDIF IF ((LEFMAR.LT.0).OR.(LEFMAR.GT.960)) THEN LEFMAR = 60 IF (MODE.EQ.0) LEFMAR = 0 ENDIF IF ((RGTMAR.LT.0).OR.(RGTMAR.GT.960)) THEN RGTMAR = 900 IF (MODE.EQ.0.OR.MODE.EQ.2) RGTMAR = 960 ENDIF IF (SIZE.GT.2) THEN SIZE = SIZE - 3 ENHANC = 1 ENDIF IF (SIZE.LT.0.OR.SIZE.GT.2) THEN SIZE = 0 ENHANC = 0 ENDIF SAVLPI = LPI CALL SETFRM SKIPRF = 1 IF (MODE.EQ.0) THEN IF (((SIZE.NE.0).OR.(LPI.NE.6)).AND.(MODE.EQ.0)) THEN LFAUTO = 0 ELSEIF (MODE.EQ.0) THEN

LFAUTO = 1 ENDIF ENDIF 1 CONTINUE MODEA = MODE IF (MODE.GT.2) MODEA = 2 IF (NULL) LFAUTO = 0 LPP = FLOAT(LPI)*10.25 PAGE = 3360 * PRINT *,'SETUP: ',MODES(MODEA),COLORS(COLOR),SIZES(SIZE),FONTS(FONT) PRINT *,'LPI = ',LPI,', LEFMAR ',LEFMAR,', RGTMAR ',RGTMAR PRINT *,ISJST(JUSTFY),ISPSP(PROPSP),ISFILL(FILL) 2 CONTINUE IF (SKIPRF.NE.0) SKIPRF = 1 AFF = SKIPRF IF (IPASS.EQ.1) CALL SETFRQ IPASS = IPASS + 1 PCKTA(1)=6 PCKTA(2)=COLOR PCKTA(3)=33 PCKTA(4)=SKIPRF PCKTA(5)=8 PCKTA(6)=SIZE PCKTA(7)=4 PCKTA(8)=FONT PCKTA(9)=31 PCKTA(10)=LFAUTO PCKTA(11)=16 PCKTA(12)=PROPSP PCKTA(13)=22 PCKTA(14)=JUSTFY PCKTA(15)=12 PCKTA(16)=LEFMAR PCKTA(17)=RGTMAR PCKTA(18)=14 PCKTA(19)=ENHANC PCKTA(20)=0 CALL SYSFUN(7,PCKTA(1),ERROR) IF (LPI.EQ.3) THEN CALL LPI3 ELSEIF (LPI.EQ.4) THEN CALL LPI4 ELSEIF (LPI.EQ.5) THEN CALL LPI5 ELSEIF (LPI.EQ.6) THEN CALL LPI6 ELSEIF (LPI.EQ.7) THEN CALL LPI7 ELSEIF (LPI.EQ.8) THEN CALL LPI8 ELSEIF (LPI.EQ.9) THEN CALL LPI9 ELSEIF (LPI.EQ.10) THEN CALL LPI10 ENDIF LD = MIN(LPP,LD) IF (MODE.LE.1) LD = 32767 IF (LD.GT.0) THEN LPP = LD

ELSE LD = LPP ENDIF PCKTA(1)=37 PCKTA(2)=LPP PCKTA(3)=0 CALL SYSFUN(7,PCKTA(1),ERROR) IF (JUSTFY.EQ.1) CALL JSTON IF (JUSTFY.EQ.0) CALL JSTOFF IF (IPASS.EQ.1) THEN CALL FFOFF CALL FFON CALL SAVEPR GOTO 2 ENDIF RETURN END *-----------------------------------------------------------------------SUBROUTINE SETFRM * * (C) COPYRIGHT: Kevin G. Rhoads & High Voltage Research Lab (MIT) - 1983,84,85 * CHARACTER*1 CR,LF,TABCH,FF,ASPACE,DASH,CARET,SLASH,BACKSL,VERBAR CHARACTER*6 COLORS(0:3),SIZES(0:2) CHARACTER*12 FONTS(0:3) CHARACTER*8 MODES(0:3),ISJST(0:1),ISPSP(0:1),ISFILL(0:1) REAL PAGEIN,SPC INTEGER*4 SCRN0,CNSL0,KPD,PRN,BUSA,BUSB,BUSC,BUSD,FILE,GR INTEGER*4 ERROR,LSPACE,GETINT,PR,DSKFIL INTEGER*2 FORM,PAGE,PROPSP,PCKTA(26),AFF,LD INTEGER*2 MODE,COLOR,SIZE,ENHANC,FONT,ANSWER,SKIPRF,JUSTFY,FILL,PROPS,LFAU TO,LPI,LEFMAR,RGTMAR LOGICAL*2 ISTEST LOGICAL*1 FIRST,QUIT EQUIVALENCE (PROPS,PROPSP) COMMON /FORM/MODE,COLOR,SIZE,ENHANC,FONT,ANSWER,SKIPRF,JUSTFY,FILL,PROPS,L FAUTO,LPI,LEFMAR,RGTMAR,FIRST,QUIT COMMON /CONCHR/CR,LF,TABCH,FF,ASPACE,DASH,CARET,SLASH,BACKSL,VERBAR COMMON /TST/ISTEST,/DPUNIT/PR,DSKFIL,/USER/COLORS,SIZES,FONTS,MODES COMMON /USER2/ISJST,ISPSP,ISFILL,/SAVAFF/FORM,PAGE,AFF,/SAVELD/LD COMMON /UNITS/SCRN0,CNSL0,KPD,PRN,BUSA,BUSB,BUSC,BUSD,FILE,GR SAVE /UNITS/,/SAVAFF/,/SAVELD/ SAVE /TST/,/FORM/,/CONCHR/,/DPUNIT/,/USER/,/USER2/ EXTERNAL GETINT SAVE * FORM = 3696 PAGE = 3360 IF (LPI.LT.3) LPI = 3 IF (LPI.GT.10) LPI = 10 PRINT *,'SETFRM: FORM,PAGE = ',FORM,' ',PAGE PRINT *,MODES(MODE),COLORS(COLOR),SIZES(SIZE),FONTS(FONT) PRINT *,'LPI = ',LPI,', LEFMAR ',LEFMAR,', RGTMAR ',RGTMAR PRINT *,ISJST(JUSTFY),ISPSP(PROPSP),ISFILL(FILL) IPASS = 0 1 CONTINUE IPASS = IPASS + 1 SPC = (336.0/FLOAT(LPI)) + 0.5 LPP1 = FLOAT(LPI)*10.25 LPP2 = FLOAT(PAGE)/SPC

LPP = MIN(LPP1,LPP2) LD = LPP IF (MODE.LE.1) LD = 32767 LPP = LD LSPACE = NINT(SPC) * IF (PAGE.LT.0.OR.PAGE.GT.FORM) PAGE = FORM*10.0/11.0 PCKTA(1)=10 PCKTA(2)=FORM PCKTA(3)=PAGE PCKTA(4)=12 PCKTA(5)=LEFMAR PCKTA(6)=RGTMAR PCKTA(7)=16 PCKTA(8)=PROPSP PCKTA(9)=22 PCKTA(10)=JUSTFY PCKTA(11)=37 PCKTA(12)=LPP PCKTA(13)=0 CALL SYSFUN(7,PCKTA(1),ERROR) CALL VSPACE(LSPACE) IF (IPASS.EQ.1) THEN CALL FFOFF CALL FFON CALL SAVEPR GOTO 1 ENDIF RETURN ENTRY SETFRQ IPASS = 1 GOTO 1 END

You might also like