staden-lg/src/staden/userface.f

656 lines
17 KiB
Fortran

C user interface routines: i.e. they deal with user interaction
C like string input, dialogue boxes, radio buttons, check boxes
C 19-11-90 New version of radion to look more like other routines
C 11-12-90 Set maxbox in radion to 20 (was 14)
C 8-7-91 removed radio, modified openf1 to deal with blank file names
C
C HELP
C HELP OPTION
C THE HELP FILE IS HELPF. THE FIRST AND LAST RECORD NUMBERS
C DESCRIBING EACH OPTION IN THIS FILE ARE STORED IN HELPS(OPTION)
C AND HELPE(OPTION). THIS ROUTINE SIMPLY LISTS THE INTERVENING RECORDS
SUBROUTINE HELP(HELPS,HELPE,BOTOPT,TOPOPT,HELPF,IDEV,KBIN,KBOUT)
C AUTHOR: RODGER STADEN
PARAMETER (IPAGE=22)
INTEGER BOTOPT,TOPOPT
CHARACTER HELPF*(*),SPACE
INTEGER HELPS(BOTOPT:TOPOPT),HELPE(BOTOPT:TOPOPT)
CHARACTER LINE*80
INTEGER NOTIRL
EXTERNAL NOTIRL
SAVE SPACE
DATA SPACE/' '/
1002 FORMAT(' ',A)
CALL OPENRS(IDEV,HELPF,IOK,20,5)
IF(IOK.NE.0)GO TO 100
20 CONTINUE
WRITE(KBOUT,1005)
1005 FORMAT(' For information on any option type its option number.'
+,/,
+' In addition,',/,
+' 0 = Introduction to the program,',/,
+' 1 = List of options')
NOPT = 1
CALL GETINT(BOTOPT,TOPOPT,NOPT,'Option number',IVAL,
+KBIN,KBOUT,HELPS(1),HELPE(1),HELPF,IDEV,IOK)
IF(IOK.NE.0) GO TO 40
NOPT = IVAL
C COUNT LINES OUTPUT
IDONE=0
ISTART=HELPS(NOPT)
IEND=HELPE(NOPT)
I=ISTART-1
21 CONTINUE
I=I+1
READ(IDEV,REC=I,ERR=110)LINE
WRITE(KBOUT,1002)LINE(1:MAX(1,NOTIRL(LINE,79,SPACE)))
IDONE=IDONE+1
IF(IDONE.EQ.IPAGE)THEN
CALL BPAUSE(KBIN,KBOUT,IQUIT)
IF(IQUIT.NE.0) GO TO 20
IDONE=0
END IF
IF(I.LT.IEND)GO TO 21
CALL BPAUSE(KBIN,KBOUT,IQUIT)
IF(IQUIT.NE.0) GO TO 40
GO TO 20
40 CONTINUE
CLOSE(UNIT=IDEV)
RETURN
100 CONTINUE
1001 FORMAT(' Error opening help file')
WRITE(KBOUT,1001)
RETURN
110 CONTINUE
WRITE(KBOUT,1010)
1010 FORMAT(' Error reading help file')
END
C HELP2
C HELP OPTION FOR SINGLE FUNCTION
C THE HELP FILE IS HELPF. THE FIRST AND LAST RECORD NUMBERS
C DESCRIBING EACH OPTION IN THIS FILE ARE STORED IN HELPS
C AND HELPE. THIS ROUTINE SIMPLY LISTS THE INTERVENING RECORDS
SUBROUTINE HELP2(HELPS,HELPE,HELPF,IDEV,KBIN,KBOUT)
C AUTHOR: RODGER STADEN
PARAMETER (IPAGE=22)
CHARACTER HELPF*(*),SPACE
INTEGER HELPS,HELPE
CHARACTER LINE*80
INTEGER NOTIRL
EXTERNAL NOTIRL
SAVE SPACE
DATA SPACE/' '/
1002 FORMAT(' ',A)
CALL OPENRS(IDEV,HELPF,IOK,20,5)
IF(IOK.NE.0)GO TO 100
C COUNT LINES OUTPUT
IDONE=0
ISTART=HELPS
IEND=HELPE
I=ISTART-1
21 CONTINUE
I=I+1
READ(IDEV,REC=I,ERR=110)LINE
WRITE(KBOUT,1002)LINE(1:MAX(1,NOTIRL(LINE,79,SPACE)))
IDONE=IDONE+1
IF(IDONE.EQ.IPAGE)THEN
CALL BPAUSE(KBIN,KBOUT,IQUIT)
IF(IQUIT.NE.0) GO TO 50
IDONE=0
END IF
IF(I.LT.IEND)GO TO 21
WRITE(KBOUT,1000)
1000 FORMAT(' End of file')
CALL BPAUSE(KBIN,KBOUT,IQUIT)
50 CONTINUE
CLOSE(UNIT=IDEV)
RETURN
100 CONTINUE
1001 FORMAT(' Error opening help file')
WRITE(KBOUT,1001)
RETURN
110 CONTINUE
WRITE(KBOUT,1010)
1010 FORMAT(' Error reading help file')
CLOSE(UNIT=IDEV)
END
C SETHLP
C READS POINTERS TO HELP FILE
C THESE POINTERS HAVE BEEN WRITTEN TO A FILE WHOSE NAME IS IN POINTF
C BY PROGRAM SETUPHELP.
C EACH OPTION (WITH NUMBERS BETWEEN BOTOPT AND TOPOPT)
C HAS ITS HELP TEXT POINTERS STORED IN HELPS(OPTION) AND HELPE(OPTION)
C WHERE HELPS CONTAINS THE FIRST RECORD NUMBER AND HELPE THE LAST
C RECORD NUMBER OF THE TEXT FILE HELPF THAT DESCRIBES THE OPTION
SUBROUTINE SETHLP(HELPS,HELPE,BOTOPT,TOPOPT,POINTF,IDEV,KBOUT)
C AUTHOR: RODGER STADEN
INTEGER BOTOPT,TOPOPT
CHARACTER POINTF*(*)
INTEGER HELPS(BOTOPT:TOPOPT),HELPE(BOTOPT:TOPOPT)
CALL OPENRS(IDEV,POINTF,IOK,LRECL,2)
IF(IOK.NE.0)GO TO 100
1 CONTINUE
READ(IDEV,1004,END=11,ERR=110)I,J,K
IF((I.GE.BOTOPT).AND.(I.LE.TOPOPT))THEN
HELPS(I)=J
HELPE(I)=K
END IF
GO TO 1
1004 FORMAT(3I6)
11 CONTINUE
CLOSE(UNIT=IDEV)
RETURN
100 CONTINUE
WRITE(KBOUT,1001)
1001 FORMAT(' Error opening help record pointer file')
RETURN
110 CONTINUE
WRITE(KBOUT,1005)
1005 FORMAT(' Error reading help record pointer file')
RETURN
END
SUBROUTINE SHOWFU(KBOUT,STRING)
CHARACTER STRING*(*)
WRITE(KBOUT,1000)STRING
1000 FORMAT(' ',A)
END
SUBROUTINE SHOWFI(KBOUT,STRING)
CHARACTER STRING*(*)
END
SUBROUTINE ERROM(KBOUT,STRING)
CHARACTER STRING*(*)
WRITE(KBOUT,1000)STRING
1000 FORMAT(' ',A)
END
SUBROUTINE BUSY(KBOUT)
WRITE(KBOUT,1000)
1000 FORMAT(' Working')
END
SUBROUTINE RADION(TITLE,PROMPT,NB,CHOICE,
+IHELPS,IHELPE,HELPF,IDEVH,KBIN,KBOUT)
PARAMETER (MAXBOX = 20,MAXCHR = 3)
CHARACTER HELPF*(*),PROMPT(NB)*(*),CHECK*(MAXBOX)
CHARACTER TITLE*(*)
INTEGER CHOICE
CHARACTER*(MAXCHR) STR2,STR3
EXTERNAL NOTILR
EXTERNAL IGET
IF((CHOICE.LT.1).OR.(CHOICE.GT.NB)) THEN
WRITE(KBOUT,*)'Error in call to radion, default set to 1'
CHOICE = 1
END IF
IN = CHOICE
CALL FILLC(CHECK,NB,' ')
CHECK(IN:IN) = 'X'
1002 FORMAT(I3)
WRITE(STR2,1002,ERR=30)NB
WRITE(STR3,1002,ERR=30)CHOICE
10 CONTINUE
WRITE(KBOUT,1001)TITLE
1001 FORMAT(' ',A)
DO 20 I = 1,NB
WRITE(KBOUT,1000)CHECK(I:I),I,PROMPT(I)
1000 FORMAT(' ',A,I3,' ',A)
20 CONTINUE
WRITE(KBOUT,1003)
+STR2(NOTILR(STR2,MAXCHR,' '):MAXCHR),
+STR3(NOTILR(STR3,MAXCHR,' '):MAXCHR)
1003 FORMAT(' ? Selection ',' (1','-',A,') (',A,') =',$)
I = IGET(J,KBIN)
IF(I.EQ.1) THEN
CALL HELP2(IHELPS,IHELPE,HELPF,IDEVH,KBIN,KBOUT)
GO TO 10
END IF
IF(I.EQ.2) THEN
CHOICE = -1
RETURN
END IF
IF(I.EQ.3) RETURN
IF(I.GT.0) GO TO 10
IF(J.GT.NB) GO TO 10
IF(J.LT.1) GO TO 10
CHOICE = MAX(1,J)
RETURN
30 CONTINUE
WRITE(KBOUT,*)'Error in RADION! Choice set to default'
END
SUBROUTINE CHECKB(PROMPT,BOXES,NB,
+IHELPS,IHELPE,HELPF,IDEVH,KBIN,KBOUT,IOK)
PARAMETER (MAXBOX = 14)
CHARACTER HELPF*(*),PROMPT(NB)*(*),CHECK*(MAXBOX),D*35
INTEGER BOXES(NB)
INTEGER TOGGLE
EXTERNAL TOGGLE,IGET
SAVE D
DATA D/' ? 1,2,3,4,5,6,7,8,9,10,11,12,13,14'/
IOK = 1
10 CONTINUE
CALL FILLC(CHECK,NB,' ')
DO 15 I = 1,NB
IF(BOXES(I).EQ.1) CHECK(I:I) = 'X'
15 CONTINUE
WRITE(KBOUT,1002)
1002 FORMAT(/,' checkbox: those set are marked X')
DO 20 I = 1,NB
WRITE(KBOUT,1000)CHECK(I:I),I,PROMPT(I)
1000 FORMAT(' ',A,I3,' ',A)
20 CONTINUE
WRITE(KBOUT,1001)NB+1
1001 FORMAT(' ',I3,' ','ALL')
IF(NB.LE.9)THEN
WRITE(KBOUT,1003)D(1:2+2*NB)
ELSE
WRITE(KBOUT,1003)D(1:20+3*(NB-9))
END IF
1003 FORMAT(A,' =',$)
IN = IGET(J,KBIN)
IF(IN.EQ.1) THEN
CALL HELP2(IHELPS,IHELPE,HELPF,IDEVH,KBIN,KBOUT)
GO TO 10
END IF
IF(IN.EQ.2) RETURN
IF(IN.GT.3) GO TO 10
IF((IN.EQ.3).OR.(J.EQ.0)) THEN
IOK = 0
RETURN
END IF
IF((J.LE.NB).AND.(J.GT.0)) THEN
BOXES(J) = TOGGLE(BOXES(J))
ELSE IF(J.EQ.NB+1) THEN
CALL FILLI(BOXES,NB,1)
END IF
GO TO 10
END
INTEGER FUNCTION SIN(KBIN,STRING)
C AUTHOR: RODGER STADEN
C RETURNS:
C 1 FOR HELP
C 2 FOR QUIT
C 3 FOR ALL BLANKS
C 0 OTHERWISE
C ABOVE FROM HQN
C 4 FOR READ ERROR
CHARACTER STRING*(*)
INTEGER HQN
EXTERNAL HQN
READ(KBIN,1000,ERR=10,END=10)STRING
1000 FORMAT(A)
SIN = HQN(STRING)
RETURN
10 CONTINUE
SIN = 4
END
INTEGER FUNCTION IGET(IN,KBIN)
C AUTHOR: RODGER STADEN
C RETURNS:
C 1 FOR HELP
C 2 FOR QUIT
C 3 FOR ALL BLANKS
C 4 FOR READ ERROR
C 0 OTHERWISE
CHARACTER STRING*10
INTEGER SIN
EXTERNAL SIN
IN = 0
IGET = SIN(KBIN,STRING)
IF(IGET.NE.0) RETURN
1001 FORMAT(I10)
CALL RJST(STRING)
READ(STRING,1001,ERR=10,END=10)IN
RETURN
10 CONTINUE
IN = 0
IGET = 4
END
INTEGER FUNCTION IGETR(RIN,KBIN)
C AUTHOR: RODGER STADEN
C RETURNS:
C 1 FOR HELP
C 2 FOR QUIT
C 3 FOR ALL BLANKS
C 4 FOR READ ERROR
C 0 OTHERWISE
CHARACTER STRING*12
INTEGER SIN
EXTERNAL SIN
RIN = 0.
IGETR = SIN(KBIN,STRING)
IF(IGETR.NE.0) RETURN
1001 FORMAT(F12.0)
CALL RJST(STRING)
READ(STRING,1001,ERR=10,END=10)RIN
RETURN
10 CONTINUE
RIN = 0.
IGETR = 4
END
SUBROUTINE GTSTR(P,STRING,NEW,LENGTH,KBOUT,KBIN,INFLAG)
CHARACTER STRING*(*),NEW*(*),P*(*)
INTEGER SIN
EXTERNAL NOTRL,SIN
10 CONTINUE
IF(LENGTH.GT.0)WRITE(KBOUT,1000)P,STRING(1:LENGTH)
1000 FORMAT(' Default ',A,'=',A)
WRITE(KBOUT,1001)P
1001 FORMAT(' ? ',A,'=',$)
INFLAG = SIN(KBIN,NEW)
IF(INFLAG.EQ.4) GO TO 10
IF(INFLAG.EQ.0) THEN
MAXSTR = LEN(NEW)
LENGTH = NOTRL(NEW,MAXSTR,' ')
RETURN
END IF
IF(INFLAG.EQ.3) THEN
LENGTH = 0
RETURN
END IF
LENGTH = 1
END
SUBROUTINE GETSTR(P,STRING,NEW,MAXSTR,LENGTH,KBOUT,KBIN,INFLAG)
CHARACTER STRING(MAXSTR),NEW(MAXSTR),P*(*),NEWT*80
INTEGER SIN
EXTERNAL NOTRL,SIN
PARAMETER (MAXST = 80)
10 CONTINUE
IF(LENGTH.GT.0)WRITE(KBOUT,1000)P,(STRING(K),K=1,LENGTH)
1000 FORMAT(' Default ',A,'=',75A1)
WRITE(KBOUT,1001)P
1001 FORMAT(' ? ',A,'=',$)
INFLAG = SIN(KBIN,NEWT)
IF(INFLAG.EQ.4) GO TO 10
IF(INFLAG.EQ.0) THEN
LENGTH = MIN(MAXSTR,NOTRL(NEWT,MAXST,' '))
CALL STOA(NEWT,NEW,LENGTH)
RETURN
END IF
IF(INFLAG.EQ.3) THEN
LENGTH = 0
RETURN
END IF
LENGTH = 1
END
SUBROUTINE STOA(STRING,ARRAY,LENGTH)
CHARACTER STRING*(*),ARRAY(LENGTH)
DO 10 I = 1,LENGTH
ARRAY(I) = STRING(I:I)
10 CONTINUE
END
SUBROUTINE GETOPT(KBIN,KOPT,IOPT)
CHARACTER TCLASS,STRING*10,STRNG2*10
INTEGER SIN
EXTERNAL NOTILR,NOTIRL,SIN
IOPT = 0
KOPT = 0
10 CONTINUE
INFLAG = SIN(KBIN,STRING)
IF(INFLAG.EQ.1) THEN
KOPT = 2
END IF
IF(INFLAG.EQ.2) THEN
KOPT = 0
IOPT = 2
RETURN
END IF
IF(INFLAG.EQ.4) GO TO 10
K = NOTIRL(STRING,10,' ')
L = NOTILR(STRING,10,' ')
IF(K.LT.L) RETURN
TCLASS = STRING(L:L)
IF((TCLASS.EQ.'D').OR.(TCLASS.EQ.'d')) THEN
KOPT = 1
ELSE IF((TCLASS.EQ.'M').OR.(TCLASS.EQ.'m')) THEN
KOPT = 3
END IF
IF(KOPT.NE.0) L = L + 1
IF((KOPT.EQ.2).AND.(L.GT.K)) THEN
KOPT = 0
IOPT = 1
RETURN
END IF
J = 11
STRNG2 = ' '
DO 50 I = K,L,-1
J = J-1
STRNG2(J:J) = STRING(I:I)
50 CONTINUE
READ(STRNG2,1001,ERR=60)IOPT
1001 FORMAT(I10)
IF(KOPT.EQ.3) THEN
IOPT = -IOPT
KOPT = 0
END IF
RETURN
60 CONTINUE
KOPT = 4
RETURN
70 CONTINUE
KOPT = 4
END
SUBROUTINE YESNO(ANSWER,PROMPT,
+IHELPS,IHELPE,HELPF,IDEVH,KBIN,KBOUT)
INTEGER ANSWER,SIN
CHARACTER PROMPT*(*),HELPF*(*),STRING,YESU,YESL,NOU,NOL
PARAMETER (YESU='Y',YESL='y',NOU='N',NOL='n')
EXTERNAL SIN
10 CONTINUE
WRITE(KBOUT,1000)PROMPT
1000 FORMAT(' ? ',A,' (y/n) (y) = ',$)
I = SIN(KBIN,STRING)
IF(I.EQ.1) THEN
CALL HELP2(IHELPS,IHELPE,HELPF,IDEVH,KBIN,KBOUT)
GO TO 10
END IF
IF(I.EQ.2) THEN
ANSWER = -1
RETURN
END IF
IF(I.EQ.3) THEN
ANSWER = 0
RETURN
END IF
I = MAX(INDEX(STRING,NOU),INDEX(STRING,NOL))
IF(I.NE.0) THEN
ANSWER = 1
RETURN
END IF
I = MAX(INDEX(STRING,YESU),INDEX(STRING,YESL))
IF(I.NE.0) THEN
ANSWER = 0
RETURN
END IF
GO TO 10
END
SUBROUTINE YESONO(CHOICE,P1,P2,
+IHELPS,IHELPE,HELPF,IDEVH,KBIN,KBOUT)
CHARACTER HELPF*(*),P1*(*),P2*(*)
INTEGER CHOICE
IF(CHOICE.EQ.0) THEN
CALL YESNO(I,P1,
+ IHELPS,IHELPE,HELPF,IDEVH,KBIN,KBOUT)
ELSE IF(CHOICE.EQ.1) THEN
CALL YESNO(I,P2,
+ IHELPS,IHELPE,HELPF,IDEVH,KBIN,KBOUT)
IF(I.EQ.1) THEN
I = 0
ELSE IF(I.EQ.0) THEN
I = 1
END IF
ELSE
WRITE(KBOUT,*)'ERROR IN INPUT TO YESONO'
END IF
CHOICE = I
END
SUBROUTINE GETINT(MININ,MAXIN,DEF,PROMPT,VALUE,KBIN,KBOUT,
+IHELPS,IHELPE,HELPF,IDEVH,IOK)
C AUTHOR: RODGER STADEN
PARAMETER (MAXCHR = 8)
CHARACTER HELPF*(*),PROMPT*(*)
CHARACTER*8 STR1,STR2,STR3
INTEGER DEF,VALUE
EXTERNAL NOTILR,IGET
IOK = 1
1000 FORMAT(I8)
WRITE(STR1,1000,ERR=20)MININ
WRITE(STR2,1000,ERR=20)MAXIN
WRITE(STR3,1000,ERR=20)DEF
10 CONTINUE
WRITE(KBOUT,1003)PROMPT,
+STR1(NOTILR(STR1,MAXCHR,' '):MAXCHR),
+STR2(NOTILR(STR2,MAXCHR,' '):MAXCHR),
+STR3(NOTILR(STR3,MAXCHR,' '):MAXCHR)
1003 FORMAT(' ? ',A,' (',A,'-',A,') (',A,') =',$)
IN = IGET(IVAL,KBIN)
IF(IN.EQ.1)THEN
CALL HELP2(IHELPS,IHELPE,HELPF,IDEVH,KBIN,KBOUT)
GO TO 10
END IF
IF(IN.EQ.2)RETURN
IF(IN.EQ.3) THEN
VALUE = DEF
IOK = 0
RETURN
END IF
IF(IN.GT.0) GO TO 10
IF(IVAL.GT.MAXIN)GO TO 10
IF(IVAL.LT.MININ)GO TO 10
VALUE = IVAL
IOK = 0
RETURN
20 CONTINUE
WRITE(KBOUT,*)'Error in routine getint'
END
SUBROUTINE GETRL(MININ,MAXIN,DEF,PROMPT,VALUE,KBIN,KBOUT,
+IHELPS,IHELPE,HELPF,IDEVH,IOK)
C AUTHOR: RODGER STADEN
PARAMETER (MAXCHR = 8)
CHARACTER HELPF*(*),PROMPT*(*)
CHARACTER*8 STR1,STR2,STR3
REAL MININ,MAXIN,IVAL
EXTERNAL NOTILR,IGETR
IOK = 1
1000 FORMAT(F8.2)
WRITE(STR1,1000,ERR=20)MININ
WRITE(STR2,1000,ERR=20)MAXIN
WRITE(STR3,1000,ERR=20)DEF
10 CONTINUE
WRITE(KBOUT,1003)PROMPT,
+STR1(NOTILR(STR1,MAXCHR,' '):MAXCHR),
+STR2(NOTILR(STR2,MAXCHR,' '):MAXCHR),
+STR3(NOTILR(STR3,MAXCHR,' '):MAXCHR)
1003 FORMAT(' ? ',A,' (',A,'-',A,') (',A,') =',$)
IN = IGETR(IVAL,KBIN)
IF(IN.EQ.1)THEN
CALL HELP2(IHELPS,IHELPE,HELPF,IDEVH,KBIN,KBOUT)
GO TO 10
END IF
IF(IN.EQ.2)RETURN
IF(IN.EQ.3) THEN
VALUE = DEF
IOK = 0
RETURN
END IF
IF(IN.GT.0) GO TO 10
IF(IVAL.GT.MAXIN)GO TO 10
IF(IVAL.LT.MININ)GO TO 10
VALUE = IVAL
IOK = 0
RETURN
20 CONTINUE
WRITE(KBOUT,*)'Error in routine getrl'
END
SUBROUTINE GETRLS(MININ,MAXIN,DEF,PROMPT,VALUE,KBIN,KBOUT,
+IHELPS,IHELPE,HELPF,IDEVH,IOK)
C AUTHOR: RODGER STADEN
PARAMETER (MAXCHR = 12)
CHARACTER HELPF*(*),PROMPT*(*)
CHARACTER*12 STR1,STR2,STR3
REAL MININ,MAXIN,IVAL
EXTERNAL NOTILR,IGETR,NOTIRL
IOK = 1
1000 FORMAT(F12.10)
WRITE(STR1,1000,ERR=20)MININ
WRITE(STR2,1000,ERR=20)MAXIN
WRITE(STR3,1000,ERR=20)DEF
10 CONTINUE
WRITE(KBOUT,1003)PROMPT,
+STR1(NOTILR(STR1,MAXCHR,' '):NOTIRL(STR1,MAXCHR,'0')),
+STR2(NOTILR(STR2,MAXCHR,' '):NOTIRL(STR2,MAXCHR,'0')),
+STR3(NOTILR(STR3,MAXCHR,' '):NOTIRL(STR3,MAXCHR,'0'))
1003 FORMAT(' ? ',A,' (',A,'-',A,') (',A,') =',$)
IN = IGETR(IVAL,KBIN)
IF(IN.EQ.1)THEN
CALL HELP2(IHELPS,IHELPE,HELPF,IDEVH,KBIN,KBOUT)
GO TO 10
END IF
IF(IN.EQ.2)RETURN
IF(IN.EQ.3) THEN
VALUE = DEF
IOK = 0
RETURN
END IF
IF(IN.GT.0) GO TO 10
IF(IVAL.GT.MAXIN)GO TO 10
IF(IVAL.LT.MININ)GO TO 10
VALUE = IVAL
IOK = 0
RETURN
20 CONTINUE
WRITE(KBOUT,*)'Error in routine getrls'
END
SUBROUTINE CHECK4(P1,P2,P3,P4,C1,C2,C3,C4,
+IHELPS,IHELPE,HELPF,IDEVH,KBIN,KBOUT,IOK)
CHARACTER HELPF*(*),P1*(*),P2*(*),P3*(*),P4*(*),C*4
INTEGER C1,C2,C3,C4,CA(4)
INTEGER TOGGLE
EXTERNAL TOGGLE,IGET
IOK = 1
CA(1) = C1
CA(2) = C2
CA(3) = C3
CA(4) = C4
10 CONTINUE
CALL FILLC(C,4,' ')
DO 15 I = 1,4
IF(CA(I).EQ.1) C(I:I) = 'X'
15 CONTINUE
WRITE(KBOUT,1002)
1002 FORMAT(/,' checkbox: those set are marked X')
WRITE(KBOUT,1000)
+C(1:1),P1,
+C(2:2),P2,
+C(3:3),P3,
+C(4:4),P4
1000 FORMAT(
+' ',A,' 1 ',A,/,
+' ',A,' 2 ',A,/,
+' ',A,' 3 ',A,/,
+' ',A,' 4 ',A,/,
+' ? 0,1,2,3,4 =',$)
IN = IGET(J,KBIN)
IF(IN.EQ.1) THEN
CALL HELP2(IHELPS,IHELPE,HELPF,IDEVH,KBIN,KBOUT)
GO TO 10
END IF
IF(IN.EQ.2) RETURN
IF(IN.GT.3) GO TO 10
IF((IN.EQ.3).OR.(J.EQ.0)) THEN
C1 = CA(1)
C2 = CA(2)
C3 = CA(3)
C4 = CA(4)
IOK = 0
RETURN
END IF
IF((J.LT.5).AND.(J.GT.0)) CA(J) = TOGGLE(CA(J))
GO TO 10
END
INTEGER FUNCTION TOGGLE(I)
IN = I
IF(IN.EQ.0) THEN
IN = 1
ELSE
IN = 0
END IF
TOGGLE = IN
END