home *** CD-ROM | disk | FTP | other *** search
- $TITLE: 'EDIT Spectrum'
- $LARGE R,SPECT1,IPTS,IMAGE
- $NOFLOATCALLS
- SUBROUTINE EDITS(IDLSP,R,SPECT1,IPTS,IMAGE,GMODE)
- REAL*4 R(10,640),SPECT1(10,640)
- CHARACTER*1 RCHR,ANSW,F2CHR*30,LABEL*60
- LOGICAL IEXIST
- INTEGER IPTS(10),GMODE
- INTEGER*4 IMAGE(8000),SAVE(8000)
- INTEGER*2 CH,L1,R1,FH,ST,BFIT,EFIT
- REAL DUMSP(640),DUMX(640)
- REAL*8 CDBLP(3,3),RSDBLP(3),QDBLP,QQDBLP
- C
- C An interactive visual editor for changing the y values
- C of the data by simply moving a cursor around.
- C
- C
- C The following functions can be performed by this subroutine:
- C
- C
- C *start over with the original data
- C command- '-' pressing this key erases everything and
- C starts over.
- C
- C *exit the subroutine
- C commands- Q quits and returns to main program as if
- C nothing had been done to the data.
- C F finish manipulating the data and display-
- C returns to the main program with the screen
- C image intact and with any changes made to the
- C data (e.g. background corrected, etc.).
- C
- C *obtain printer output
- C command- G dump screen image to printer
- C
- C
- C *write the data to a disk file
- C command- W you will be prompted for a file name.
- C
- C *change y values of points on the screen image
- C commands- E key to push so you will be able to change
- C the y position and value of the point at the
- C current cursor position.
- C
- C 8 move up | With the NumLck key
- C 9 move up fast | is lit on the IBM
- C 6 move right | keyboard this key
- C + move right fast| arrangement really
- C 2 move down | does make some
- C 3 move down fast | sense
- C 4 move left |
- C <RETURN> move left fast |
- C
- C Q quit editing this point.
- C
- 10 L1=1
- R1=10
- CH=1
- BFIT=1
- EFIT=IPTS(IDLSP)
- IINT=IPTS(IDLSP)
- C
- DO 50 J=1,IINT
- DUMX(J)=R(IDLSP,J)
- 50 DUMSP(J)=SPECT1(IDLSP,J)
- C
- CALL INQWOR(XW1,YW1,XW2,YW2)
- CALL WORLDO
- CALL INQDRA(IXMX,IYMX)
- CALL MOVEFR(0,0,IXMX,IYMX,SAVE(1))
- CALL INITHC(10,10,1)
- CALL SETWOR(XW1,YW1,XW2,YW2)
- 100 CALL INKEY(RCHR)
- X=R(IDLSP,CH)
- Y=DUMSP(CH)
- CALL MOVHCA(X,Y)
- IF(RCHR.EQ.CHAR(0)) GO TO 100
- IF(RCHR.EQ.'4') THEN
- C
- C CURSOR LEFT
- C
- CH=CH-1
- IF (CH.LT.1) CH=1
- GO TO 100
- ENDIF
- IF(RCHR.EQ.CHAR(13)) THEN
- CH=CH-5
- IF(CH.LT.1) CH=1
- GO TO 100
- ENDIF
- IF(RCHR.EQ.'6') THEN
- C
- C CURSOR RIGHT
- C
- CH=CH + 1
- IF (CH.GT.IINT) CH=IINT
- GO TO 100
- ENDIF
- IF(RCHR.EQ.'+') THEN
- CH=CH+5
- IF(CH.GT.IINT) CH=IINT
- GO TO 100
- ENDIF
- C-------------
- C
- C Let's start over
- IF(RCHR.EQ.'-') GO TO 200
- IF((RCHR.EQ.'W').OR.(RCHR.EQ.'w')) GO TO 1380
- IF((RCHR.EQ.'E').OR.(RCHR.EQ.'e')) GO TO 1600
- IF((RCHR.EQ.'F').OR.(RCHR.EQ.'f')) GO TO 1900
- IF((RCHR.EQ.'Q').OR.(RCHR.EQ.'q')) GO TO 2000
- GO TO 100
- C
- C START OVER
- C
- 200 CALL WORLDO
- CALL MOVETO(0,0,SAVE(1),1)
- CALL INITHC(10,10,1)
- CALL SETWOR(XW1,YW1,XW2,YW2)
- GO TO 10
- C
- C REM WRITE RESULTS
- C
- 1380 CONTINUE
- CALL INQWOR(XW1,YW1,XW2,YW2)
- CALL WORLDO
- CALL INQDRA(IXMX,IYMX)
- CALL MOVEFR(0,0,IXMX,IYMX,IMAGE(1))
- 1385 WRITE(0,'(A\)')' OUTPUT FILENAME: '
- READ(0,'(A)') F2CHR
- INQUIRE(FILE=F2CHR,EXIST=IEXIST)
- IF(IEXIST) THEN
- WRITE(0,'(A\)') ' File exists- overwrite it (Y/N): '
- READ(0,'(A)')ANSW
- IF((ANSW.EQ.'Y').OR.(ANSW.EQ.'y')) THEN
- OPEN(4,FILE=F2CHR,STATUS='OLD')
- ELSE
- GO TO 1385
- ENDIF
- ELSE
- OPEN(4,FILE=F2CHR,STATUS='NEW')
- ENDIF
- C
- 1386 WRITE(0,'(A\)') ' 1 OR 2 COLUMN FILETYPE (1/2): '
- READ(0,*,ERR=1386) IFLTYP
- IF(IFLTYP.EQ.1) THEN
- WRITE(4,*,ERR=1435) IFLTYP
- DO 1430 J=1,IINT
- WRITE(4,*,ERR=1435) DUMSP(J)
- 1430 CONTINUE
- ELSEIF(IFLTYP.EQ.2) THEN
- WRITE(4,*,ERR=1435) IFLTYP
- DO 1433 J=1,IINT
- WRITE(4,*,ERR=1435) R(IDLSP,J),DUMSP(J)
- 1433 CONTINUE
- ELSE
- GO TO 1386
- ENDIF
- 1435 CLOSE(4,STATUS='KEEP')
- CALL MOVETO(0,0,IMAGE(1),1)
- CALL SETWOR(XW1,YW1,XW2,YW2)
- GO TO 100
- C
- C POINT EDITING ROUTINE
- C
- 1600 CONTINUE
- CALL INQHCU(X,Y,IC)
- CALL MAPWTD(X,Y,IX,IY)
- CALL WORLDO
- CALL INQDRA(IXMX,IYMX)
- CALL MOVEFR(0,0,IXMX,IYMX,IMAGE(1))
- ISTART=CH-1
- ISTOP=CH +1
- IPTH=0
- MODE=0
- CALL SETXOR(1)
- CALL MOVHCA(IX,IY)
- 1610 CALL GETCHR(RCHR)
- IF(RCHR.EQ.'2') THEN
- CALL MOVHCR(0,1)
- CALL INQHCU(IX,IY,IC)
- CALL SETWOR(XW1,YW1,XW2,YW2)
- CALL MAPDTW(IX,IY,X,Y)
- CALL MOVABS(DUMX(ISTART),DUMSP(ISTART))
- CALL POLYLA(DUMX(CH),DUMSP(CH),2)
- DUMSP(CH)=Y
- CALL MOVABS(DUMX(ISTART),DUMSP(ISTART))
- CALL POLYLA(DUMX(CH),DUMSP(CH),2)
- CALL WORLDO
- CALL MOVHCA(IX,IY)
- ELSEIF(RCHR.EQ.'3') THEN
- CALL MOVHCR(0,5)
- CALL INQHCU(IX,IY,IC)
- CALL SETWOR(XW1,YW1,XW2,YW2)
- CALL MAPDTW(IX,IY,X,Y)
- CALL MOVABS(DUMX(ISTART),DUMSP(ISTART))
- CALL POLYLA(DUMX(CH),DUMSP(CH),2)
- DUMSP(CH)=Y
- CALL MOVABS(DUMX(ISTART),DUMSP(ISTART))
- CALL POLYLA(DUMX(CH),DUMSP(CH),2)
- CALL WORLDO
- CALL MOVHCA(IX,IY)
- ELSEIF(RCHR.EQ.'8') THEN
- CALL MOVHCR(0,-1)
- CALL INQHCU(IX,IY,IC)
- CALL SETWOR(XW1,YW1,XW2,YW2)
- CALL MAPDTW(IX,IY,X,Y)
- CALL MOVABS(DUMX(ISTART),DUMSP(ISTART))
- CALL POLYLA(DUMX(CH),DUMSP(CH),2)
- DUMSP(CH)=Y
- CALL MOVABS(DUMX(ISTART),DUMSP(ISTART))
- CALL POLYLA(DUMX(CH),DUMSP(CH),2)
- CALL WORLDO
- CALL MOVHCA(IX,IY)
- ELSEIF(RCHR.EQ.'9') THEN
- CALL MOVHCR(0,-5)
- CALL INQHCU(IX,IY,IC)
- CALL SETWOR(XW1,YW1,XW2,YW2)
- CALL MAPDTW(IX,IY,X,Y)
- CALL MOVABS(DUMX(ISTART),DUMSP(ISTART))
- CALL POLYLA(DUMX(CH),DUMSP(CH),2)
- DUMSP(CH)=Y
- CALL MOVABS(DUMX(ISTART),DUMSP(ISTART))
- CALL POLYLA(DUMX(CH),DUMSP(CH),2)
- CALL WORLDO
- CALL MOVHCA(IX,IY)
- ELSEIF((RCHR.EQ.'Z').OR.(RCHR.EQ.'z')) THEN
- CALL SETWOR(XW1,YW1,XW2,YW2)
- CALL MOVABS(DUMX(ISTART),DUMSP(ISTART))
- CALL POLYLA(DUMX(CH),DUMSP(CH),2)
- DUMSP(CH)=SPECT1(IDLSP,CH)
- CALL MOVABS(DUMX(ISTART),DUMSP(ISTART))
- CALL POLYLA(DUMX(CH),DUMSP(CH),2)
- CALL MOVHCA(DUMX(CH),DUMSP(CH))
- CALL WORLDO
- ELSEIF((RCHR.EQ.'Q').OR.(RCHR.EQ.'q')) THEN
- GO TO 1620
- ENDIF
- GO TO 1610
- 1620 CONTINUE
- CALL SETXOR(0)
- CALL SETWOR(XW1,YW1,XW2,YW2)
- GO TO 100
- C********************** END POINT EDITING ROUTINE
- C
- C EXIT
- C
- 1900 CONTINUE
- DO 1905 J=1,IPTS(IDLSP)
- 1905 SPECT1(IDLSP,J)=DUMSP(J)
- C
- C QUIT
- C
- 2000 CONTINUE
- RETURN
- END