C @(#)fit_user.for 10.7 (ESO-IPG) 2/13/96 16:33:51 C=========================================================================== C Copyright (C) 1995 European Southern Observatory (ESO) C C This program is free software; you can redistribute it and/or C modify it under the terms of the GNU General Public License as C published by the Free Software Foundation; either version 2 of C the License, or (at your option) any later version. C C This program is distributed in the hope that it will be useful, C but WITHOUT ANY WARRANTY; without even the implied warranty of C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the C GNU General Public License for more details. C C You should have received a copy of the GNU General Public C License along with this program; if not, write to the Free C Software Foundation, Inc., 675 Massachusetss Ave, Cambridge, C MA 02139, USA. C C Corresponding concerning ESO-MIDAS should be addressed as follows: C Internet e-mail: midas@eso.org C Postal address: European Southern Observatory C Data Management Division C Karl-Schwarzschild-Strasse 2 C D 85748 Garching bei Muenchen C GERMANY C=========================================================================== C C&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& SUBROUTINE EdtPar(iflag) C C Edit parameter table. C iflag=0 ok C iflag=-1 quit C&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& implicit none include 'MID_REL_INCL:fit_var.inc' integer ipos integer iflag integer ist,nline,jj,kk,iexist character*20 com1,com2,com3,com4,command character*80 helpstr character test character*4 cvalue real value logical reval,iok,inewl 100 continue !starts loop call sttdis(' ',0,ist) call sttdis(' ',0,ist) call sttdis(' ',0,ist) call ShPar1('EDITPARAM') call sttdis(' ',0,ist) command = ' ' call AskC('Input command (e.g. ''B #3 25.3'', ''help'' )', 1 command,ist) if (command.eq.' ') goto 100 C C Reads, checks and processes first string of command C if (command.eq.'help'.or.command.eq.'HELP') then call sttdis(' ',0,ist) call sttdis(' ** HELP Edit Parameter **',0,ist) call sttdis(' ',0,ist) call sttdis(' * To modify the value of a parameter enter:' 1 ,0,ist) call sttdis(' # ', 1 0,ist) write(helpstr,*)' Where: Col.name is the name of the ' 1 ,'column desired (E, L, PL, N ....)' call sttdis(helpstr,0,ist) write(helpstr,*)' Row number is the number of the row' call sttdis(helpstr,0,ist) write(helpstr,*)' value is the new value to input' write(helpstr,*)'Examples:' call sttdis(helpstr,0,ist) write(helpstr,*)' E #2 CIV_1548 ' call sttdis(helpstr,0,ist) write(helpstr,*)' N #1 13.5 ' call sttdis(helpstr,0,ist) write(helpstr,*)' PB #3 5.F ' call sttdis(helpstr,0,ist) call sttdis(' ',0,ist) call sttdis(' To delete a line: ',0,ist) call sttdis(' D #',0,ist) call sttdis(' ',0,ist) call sttdis(' To exit: ',0,ist) call sttdis(' EXIT (saving)',0,ist) call sttdis(' QUIT (not saving)',0,ist) goto 100 end if if (command.eq.'exit'.or.command.eq.'EXIT') then iflag=0 return end if if (command.eq.'quit'.or.command.eq.'QUIT') then iflag=-1 return end if ! parameter name com1=command(1:2) iok=.false. if (com1.eq.'l '.or.com1.eq.'L ') then com1='L ' iok=.true. reval=.true. end if if (com1.eq.'n '.or.com1.eq.'N ') then com1='N ' iok=.true. reval=.true. end if if (com1.eq.'b '.or.com1.eq.'B ') then com1='B ' iok=.true. reval=.true. end if if (com1.eq.'bt'.or.com1.eq.'BT') then com1='BT' iok=.true. reval=.true. end if if (com1.eq.'pl'.or.com1.eq.'PL') then com1='PL' iok=.true. reval=.false. end if if (com1.eq.'pn'.or.com1.eq.'PN') then com1='PN' iok=.true. reval=.false. end if if (com1.eq.'pb'.or.com1.eq.'PB') then com1='PB' iok=.true. reval=.false. end if if (com1.eq.'pt'.or.com1.eq.'PT') then com1='PT' iok=.true. reval=.false. end if if (com1.eq.'d '.or.com1.eq.'D ') then com1='D ' iok=.true. end if if (com1.eq.'e '.or.com1.eq.'E ') then com1='E ' iok=.true. end if if (.not.iok) then call ErrMsg('Parameter name not found') goto 100 end if C C Gets line number (this is always needed) C !line number ipos=index(command,'#') if (ipos.eq.0) then call ErrMsg('Error in line specification (# is missing)') goto 100 end if com2=command(ipos+1:20) read(com2,*)nline if (nline.gt.(NROWS+1)) then !Errors in line number call ErrMsg('Line number too large') goto 100 end if if (nline.lt.1) then call ErrMsg('Line number too small') goto 100 end if !add a new line if (nline.eq.(NROWS+1)) then inewl=.false. ist=0 !waits for reply call AskYN('Create new line?',inewl,ist) if (inewl) then NROWS = NROWS + 1 ElmtNm(NROWS)=' ' LamIni(NROWS)=0. NIni(NROWS)=0. BIni(NROWS)=0. BtuIni(NROWS)=0. do jj=1,4 CPar(jj,NROWS)=' ' end do end if ! here doesn't goto100 to process the command end if ! delete a line if (com1.eq.'D ') then inewl=.false. ist=0 !waits for reply call AskYN('Confirm deletion of line?',inewl,ist) if (inewl) then do jj=nline+1,NROWS ElmtNm(JJ-1)= ElmtNm(JJ) LamIni(JJ-1)=LamIni(JJ) NIni(JJ-1)=NIni(JJ) BIni(JJ-1)=BIni(JJ) BtuIni(JJ-1)=BtuIni(JJ) do kk=1,4 CPar(kk,JJ-1)=CPar(kk,jj) end do end do ElmtNm(NROWS)=' ' LamIni(NROWS)=0. NIni(NROWS)=0. BIni(NROWS)=0. BtuIni(NROWS)=0. do jj=1,4 CPar(jj,NROWS)=' ' end do NROWS = NROWS - 1 end if goto 100 end if C C reads the third command end processes it. C ! Element if (com1.eq.'E ') then ipos=index(com2,' ') com3=com2(ipos:20) ipos=0 102 ipos=ipos+1 test=com3(ipos:ipos) if (test.eq.' ') goto 102 com4=com3(ipos:14) do jj=1,AT_N if (com4.eq.AT_NAM(jj)) iexist=1 end do if (iexist.eq.0) then call ErrMsg('Element not found') goto 100 end if write(ElmtNm(nline),'(a14)')com4 ! converts to c*14 goto 100 end if ! new value ipos=index(com2,' ') com3=com2(ipos:20) if (reval) then read(com3,*)value else ipos=0 101 ipos=ipos+1 test=com3(ipos:ipos) if (test.eq.' ') goto 101 com4=com3(ipos:20) write(cvalue,'(a4)')com4 ! converts to c*4 and flushright call CnvrtP(cvalue,ipos,test,ist) if (ist.eq.1) write(cvalue,'(i2,a1,a1)')ipos,'.',test if (ist.eq.0) write(cvalue,'(i4)')ipos end if if (com1.eq.'L ') LamIni(nline)=value if (com1.eq.'N ') NIni(nline)=value if (com1.eq.'B ') BIni(nline)=value if (com1.eq.'BT') BtuIni(nline)=value if (com1.eq.'PL') CPar(1,nline)=cvalue if (com1.eq.'PN') CPar(2,nline)=cvalue if (com1.eq.'PB') CPar(3,nline)=cvalue if (com1.eq.'PT') CPar(4,nline)=cvalue GOTO 100 ! asks for a new input end C&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& SUBROUTINE ShoRes C Stampa sullo schermo i risultati del fit C leggendo il file 'fdummy.res' C Plots the fitted spectrum C C&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& implicit none include 'MID_REL_INCL:fit_var.inc' character*79 sttapp integer istt,i C include 'MID_REL_INCL:fit_mid.inc' INTEGER MADRID(1) INCLUDE 'MID_INCLUDE:ST_DEF.INC' COMMON/VMR/MADRID INCLUDE 'MID_INCLUDE:ST_DAT.INC' C!!!!!!! C Legge il file 'fdummy.res' e stampa i risultati C!!!!!!! call sttdis(' ',0,istt) call sttdis(' ',0,istt) call sttdis('***** Result of the fit: *****',0,istt) call sttdis(' ',0,istt) open(10,file='fdummy.res',status='old') read(10,*)chi,prob write(sttapp,'(A20,f6.2,f6.2)')'Reduced chi2, prob:',chi,prob call sttdis(sttapp,0,istt) call sttdis(' ',0,istt) call sttdis(' ',0,istt) if (IMINOS.eq.0) then write(sttapp,'(A8,A5,A7,A6,A6,A5,A8,A5)')'LamCen','+/-', 1 'N ','+/-','b ','+/-',' b tur.','+/-' call sttdis(sttapp,0,istt) else write(sttapp,'(A8,A5,A7,A6,A6,A5,A8,A5)')'LamCen',' + ', 1 'N ',' + ','b ',' + ',' b tur.',' + ' call sttdis(sttapp,0,istt) write(sttapp,'(A8,A5,A7,A6,A6,A5,A8,A5)')' ',' - ', 1 ' ',' - ',' ',' - ',' ',' - ' call sttdis(sttapp,0,istt) end if call sttdis(' ',0,istt) do i=1,nrows read(10,'(17G19.9E3)')LamCen(i),NHfit(i),BDopp(i),BTur(i), 1 w(i),ErLaPa(i),ErNnPa(i),ErBbPa(i),ErBtPa(i), 2 ErLaPo(i),ErLaNe(i),ErNnPo(i),ErNnNe(i), 3 ErBbPo(i),ErBbNe(i),ErBtPo(i),ErBtNe(i) Redshi(i) = LamCen(i) / AtmLam(i) - 1. Temper(i) = AtmMas(i) * BDopp(i)* BDopp(i) * 60.137 if (BDopp(i).lt.0) BDopp(i)=-BDopp(i) if (Btur(i).lt.0)Btur(i)=-Btur(i) if (IMINOS.eq.0) then write(sttapp,98)LamCen(i),ErLaPa(i),NHfit(i),ErNnPa(i), 1 BDopp(i),ErBbPa(i),BTur(i),ErBtPa(i),ElmtNm(i) call sttdis(sttapp,0,istt) else write(sttapp,98)LamCen(i),ErLaPo(i),NHfit(i),ErNnPo(i), 1 BDopp(i),ErBbPo(i),BTur(i),ErBtPo(i),ElmtNm(i) call sttdis(sttapp,0,istt) write(sttapp,99)ErLaNe(i),ErNnNe(i), 1 ErBbNe(i),ErBtNe(i) call sttdis(sttapp,0,istt) end if end do 98 format(f8.2,f5.2,f7.2,f6.2,f6.1,f5.1,f6.1,f5.1,3x,a14) 99 format(8x,f5.2,7x,f6.2,6x,f5.1,6x,f5.1) close(10) NGRALI=nrows return end C&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& SUBROUTINE ReaRes C Versione semplificata di ShoRes C Si limita a leggere il file fdummy.res C Utile per ITERATE C C&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& implicit none include 'MID_REL_INCL:fit_var.inc' integer i C include 'MID_REL_INCL:fit_mid.inc' INTEGER MADRID(1) INCLUDE 'MID_INCLUDE:ST_DEF.INC' COMMON/VMR/MADRID INCLUDE 'MID_INCLUDE:ST_DAT.INC' C!!!!!!! C Legge il file 'fdummy.res' C!!!!!!! open(10,file='fdummy.res',status='old',err=100) read(10,*)chi,prob i=0 10 continue i = i + 1 read(10,'(17G19.9E3)',end=100,err=100)LamCen(i),NHfit(i), 1 BDopp(i),BTur(i), 2 w(i),ErLaPa(i),ErNnPa(i),ErBbPa(i),ErBtPa(i), 3 ErLaPo(i),ErLaNe(i),ErNnPo(i),ErNnNe(i), 4 ErBbPo(i),ErBbNe(i),ErBtPo(i),ErBtNe(i) Redshi(i) = LamCen(i) / AtmLam(i) - 1. Temper(i) = AtmMas(i) * BDopp(i)* BDopp(i) * 60.137 if (BDopp(i).lt.0) BDopp(i)=-BDopp(i) if (Btur(i).lt.0)Btur(i)=-Btur(i) goto 10 100 continue NGRALI = i - 1 close(10) return end C&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& SUBROUTINE AskStp(command,iok) C C Asks for setup parameters C C iok integer (out) =0 if ok, =-1 if quit C C&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& implicit none character*(*)command integer iok include 'MID_REL_INCL:fit_var.inc' integer istt logical logtur character*40 Mes character*80 strout character Risp1 character*20 Option(10) Option(1)='(P)rogram set-up' Option(2)='(D)ata set-up' Option(3)='(G)raphic set-up' Option(4)='(E)nd' Option(5)='(Q)uit' if (Command.eq.'PROGRAM') then Risp1='P' goto 101 end if if (Command.eq.'DATA') then Risp1='D' goto 101 end if if (Command.eq.'GRAPHIC') then Risp1='G' goto 101 end if 100 Mes ='************' write(strout,'(18x,A12,3x,A14,3x,A12)')Mes,'SET-UP MENU', 1 Mes call sttdis(strout,0,istt) call sttdis(' ',0,istt) call sttdis(' ',0,istt) write(strout,'(10x,A20,10x,a20)')Option(1),Option(4) call sttdis(strout,0,istt) write(strout,'(10x,A20,10x,a20)')Option(2),Option(5) call sttdis(strout,0,istt) write(strout,'(10x,a20)')Option(3) call sttdis(strout,0,istt) Risp1=' ' istt=-2 call AskC(' ',Risp1,istt) 101 if (Risp1.eq.'E'.or.Risp1.eq.'e') then iok=0 return end if if (Risp1.eq.'Q'.or.Risp1.eq.'q') then iok=-1 return end if istt=0 iok=0 if (Risp1.eq.'P'.or.Risp1.eq.'p') then call AskC('Spectrum table',FILSPE,istt) if (istt.eq.-1) goto 100 if (istt.eq.-99) return call AskC('Output table',FILOUT,istt) if (istt.eq.-1) goto 100 if (istt.eq.-99) return call AskC('Log name',FILLOG,istt) if (istt.eq.-1) goto 100 if (istt.eq.-99) return istt=1 !DON'T wait for reply call AskYN('Graphic output?',I_GRAP,istt) if (istt.eq.-1) goto 100 if (istt.eq.-99) return if (TURBLN .eq. 1) logtur = .true. if (TURBLN .eq. 0) logtur = .false. istt=1 !DON'T wait for reply call AskYN('Show turbolence parameter?',logtur,istt) if (istt.eq.-1) goto 100 if (istt.eq.-99) return if (logtur) TURBLN =1 if (.not. logtur) TURBLN =0 end if if (Risp1.eq.'D'.or.Risp1.eq.'d') then call AskD('Positive range for lambda (Angst, 0=free)', 1 LamLim(1),istt) if (istt.eq.-1) goto 100 if (istt.eq.-99) return call AskD('Negative range for lambda (Angst, 0=free)', 1 LamLim(2),istt) if (istt.eq.-1) goto 100 if (istt.eq.-99) return call AskD('Minimum N allowed (0=free)',NLim(1),istt) if (istt.eq.-1) goto 100 if (istt.eq.-99) return call AskD('Maximum N allowed (0=free)',NLim(2),istt) if (istt.eq.-1) goto 100 if (istt.eq.-99) return call AskD('Minimum b allowed (0=free)',BLim(1),istt) if (istt.eq.-1) goto 100 if (istt.eq.-99) return call AskD('Maximum b allowed (0=free)',BLim(2),istt) if (istt.eq.-1) goto 100 if (istt.eq.-99) return call AskD('Minimum b turb. allowed (0=free)', 1 BtuLim(1),istt) if (istt.eq.-1) goto 100 if (istt.eq.-99) return call AskD('Maximum b turb.allowed (0=free)', 1 BtuLim(2),istt) if (istt.eq.-1) goto 100 if (istt.eq.-99) return call AskD('Initial step for lambda (A)', 1 LamLim(3),istt) if (istt.eq.-1) goto 100 if (istt.eq.-99) return call AskD('Initial step for N',NLim(3),istt) if (istt.eq.-1) goto 100 if (istt.eq.-99) return call AskD('Initial step for b',BLim(3),istt) if (istt.eq.-1) goto 100 if (istt.eq.-99) return call AskD('Initial step for b turb.',BtuLim(3),istt) if (istt.eq.-1) goto 100 if (istt.eq.-99) return end if if (Risp1.eq.'G'.or.Risp1.eq.'g') then istt=1 !DON'T wait for reply call AskYN('Graphic output?',I_GRAP,istt) if (istt.eq.-1) goto 100 if (istt.eq.-99) return call AskD('Space below spectrum',GR_BOT,istt) if (istt.eq.-1) goto 100 if (istt.eq.-99) return call AskD('Space over spectrum',GR_TOP,istt) if (istt.eq.-1) goto 100 if (istt.eq.-99) return call AskD('Offset for labels',GR_LAB,istt) if (istt.eq.-1) goto 100 if (istt.eq.-99) return call AskD('Y-position of line ticks',GR_TIC,istt) if (istt.eq.-1) goto 100 if (istt.eq.-99) return istt=1 !DON'T wait for reply call AskYN('Plot residuals?',I_RESD,istt) if (istt.eq.-1) goto 100 if (istt.eq.-99) return istt=1 !DON'T wait for reply call AskYN('Plot variance?',I_VAR,istt) if (istt.eq.-1) goto 100 if (istt.eq.-99) return call AskI('Color for plot ',GCOLOR(1),istt) if (istt.eq.-1) goto 100 if (istt.eq.-99) return call AskI('Color for fitted profile ',GCOLOR(3),istt) if (istt.eq.-1) goto 100 if (istt.eq.-99) return call AskI('Color for reference lines ',GCOLOR(2),istt) if (istt.eq.-1) goto 100 if (istt.eq.-99) return call AskI('Color for residuals ',GCOLOR(4),istt) if (istt.eq.-1) goto 100 if (istt.eq.-99) return call AskI('Color for variance ',GCOLOR(5),istt) if (istt.eq.-1) goto 100 if (istt.eq.-99) return call AskI('Color for labels ',GCOLOR(6),istt) if (istt.eq.-1) goto 100 if (istt.eq.-99) return call AskI('Color for line ticks ',GCOLOR(7),istt) if (istt.eq.-1) goto 100 if (istt.eq.-99) return end if goto 100 end C&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& SUBROUTINE AskMin(ierr) C C Imposta la configurazione per la minimizzazione C Presenta dapprimaun menu generale per : C a) scegliere la procedura standard (MINIMIZE+HESSE) C b) choose the current set of instructions C c) impostare a piacere un set di istruzioni MINUIT C C prima vengono definiti i comandi, poi viene scritto C il file C&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& implicit none integer ierr include 'MID_REL_INCL:fit_var.inc' character*1 risp character*10 lett character*20 Menu1(10),Menu2(10),Menu3(10),Menu4(10) character*60 stt_ap,Mes character*80 strout integer istt,i,j,numcom,nparf,nparf2 real up INTEGER MADRID(1) INCLUDE 'MID_INCLUDE:ST_DEF.INC' COMMON/VMR/MADRID INCLUDE 'MID_INCLUDE:ST_DAT.INC' Menu1(1)='(M)inimize' Menu1(2)='(I)mprove' Menu1(3)='see(K)' Menu1(4)='(F)ix' Menu1(5)='(R)elease' Menu2(1)='(H)esse' Menu2(2)='mi(N)os' Menu2(3)='(S)can' Menu2(4)='(C)ontour' Menu3(1)='set err(O)r' Menu3(2)='set prin(T)' Menu3(3)='set ran(D)om' Menu3(4)='set strate(G)y' Menu4(1)='(E)nd' Menu4(2)='(Q)uit' C!!!!!!! C main menu C!!!!!!! 10 risp = ' ' lett = ' ' call sttdis(' ',0,istt) call sttdis(' ',0,istt) call sttdis(' ',0,istt) call sttdis(' *** Current instruction set: ***',0,istt) call sttdis(' ',0,istt) if (NMINCM.gt.0) then do i=1,NMINCM call sttdis(MINCOM(i),0,istt) end do end if call sttdis(' ',0,istt) call sttdis(' ',0,istt) call sttdis('*********** FIT Options ************',0,istt) call sttdis(' ',0,istt) call sttdis('(S)tandard procedure (MINIMIZE+HESSIAN ERRORS)' + ,0,istt) call sttdis(' ',0,istt) call sttdis('(C)urrent instruction set',0,istt) call sttdis(' ',0,istt) call sttdis('(I)nput commands',0,istt) call sttdis(' ',0,istt) call sttdis('(Q)uit (back to Fitlyman Menu)',0,istt) call sttdis(' ',0,istt) istt=-2 call AskC(' ',lett,istt) c read(5,'(a)')lett risp=lett if (risp.eq.'c'.or.risp.eq.'C') then ierr=0 return end if if (risp.ne.'i'.and.risp.ne.'I'.and.risp.ne.'s'.and.risp.ne.'S' + .and. risp .ne.'Q' .and. risp.ne.'q') goto 10 if (risp.eq.'q'.or.risp.eq.'Q') then ierr = -1 return end if do i=1,NMXLIN MINCOM(i)=' ' end do C!!!!!!! C Comandi per la procedura standard C!!!!!!! if (risp.eq.'s'.or.risp.eq.'S') then NMINCM=4 MINCOM(1)='SET ERRORDEF 1.' MINCOM(2)='MINIMIZE' MINCOM(3)='HESSE' MINCOM(4)='RETURN' ierr=0 return end if C!!!!!!! C Procedura a scelta C!!!!!!! if (risp.eq.'i'.or.risp.eq.'I') then NumCom=0 20 call sttdis(' ',0,istt) call sttdis(' ',0,istt) call sttdis(' ',0,istt) if (NumCom.gt.0) then call sttdis(' ***Current instruction set: ***',0,istt) do i=1,NumCom call sttdis(MINCOM(i),0,istt) end do end if call sttdis(' ',0,istt) Mes ='************' write(strout,'(18x,A16,3x,A14,3x,A12)')Mes, 1 'MINUIT COMMANDS',Mes call sttdis(strout,0,istt) call sttdis(' ',0,istt) call sttdis(' ',0,istt) do j=1,5 write(strout,'(4A20)')Menu1(j),Menu2(j),Menu3(j),Menu4(j) call sttdis(strout,0,istt) end do call sttdis(' ',0,istt) istt=-2 call AskC('--- ? ---',stt_ap,istt) read(stt_ap,'(a1)')lett risp=lett !MINIMIZE if (risp.eq.'m'.or.risp.eq.'M') then NumCom=NumCom+1 MINCOM(NumCom)='MINIMIZE' goto 20 end if !IMPROVE if (risp.eq.'i'.or.risp.eq.'I') then NumCom=NumCom+1 MINCOM(NumCom)='IMPROVE' goto 20 end if !SEEK if (risp.eq.'k'.or.risp.eq.'K') then NumCom=NumCom+1 MINCOM(NumCom)='SEEK' goto 20 end if !FIX if (risp.eq.'f'.or.risp.eq.'F') then call ShPar1('NORMAL') call AskI(' --> Parameter to fix:', NParF,istt) if (istt .eq. -1) goto 20 ! redo NumCom=NumCom+1 write(MINCOM(NumCom),301)NParF goto 20 end if 301 format('FIX',3x,i2) !RELEASE if (risp.eq.'r'.or.risp.eq.'R') then call AskI(' --> Parameter to release:', NParF,istt) if (istt .eq. -1) goto 20 ! redo NumCom=NumCom+1 write(MINCOM(NumCom),302)NParF goto 20 end if 302 format('RELEASE',3x,i2) !HESSE if (risp.eq.'h'.or.risp.eq.'H') then NumCom=NumCom+1 MINCOM(NumCom)='HESSE' goto 20 end if !MINOS if (risp.eq.'n'.or.risp.eq.'N') then NumCom=NumCom+1 MINCOM(NumCom)='MINOS' goto 20 end if !SCAN if (risp.eq.'s'.or.risp.eq.'S') then call AskI(' --> Parameter to scan:', NParF,istt) if (istt .eq. -1) goto 20 ! redo NumCom=NumCom+1 write(MINCOM(NumCom),101)NParF goto 20 end if 101 format('SCAN',5x,i2) !CONTOUR if (risp.eq.'c'.or.risp.eq.'C') then call AskI(' --> Parameter on x axis:',NParF,istt) if (istt .eq. -1) goto 20 ! redo call AskI(' --> Parameter on y axis:',NParF2,istt) if (istt .eq. -1) goto 20 ! redo NumCom=NumCom+1 write(MINCOM(NumCom),102)NParF,NParF2 goto 20 end if 102 format('CONTOUR',5x,i3,1x,i3) !SET ERROR if (risp.eq.'o'.or.risp.eq.'O') then call AskR(' --> Error level:',up,istt) if (istt .eq. -1) goto 20 ! redo NumCom=NumCom+1 write(MINCOM(NumCom),201)up goto 20 end if 201 format('SET ERRORDEF',5x,f6.2) !SET PRINT if (risp.eq.'t'.or.risp.eq.'T') then call AskI(' --> Number of columns:',NParF,istt) if (istt .eq. -1) goto 20 ! redo NumCom=NumCom+1 write(MINCOM(NumCom),202)NParF goto 20 end if 202 format('SET PRINT',5x,i3) !SET RANDOM if (risp.eq.'d'.or.risp.eq.'D') then call AskI(' --> Random seed:',NParF,istt) if (istt .eq. -1) goto 20 ! redo NumCom=NumCom+1 write(MINCOM(NumCom),204)NParF goto 20 end if 204 format('SET RANDOM',5x,i8) !SET STRATEGY if (risp.eq.'g'.or.risp.eq.'G') then call AskI(' --> Strategy level',NParF,istt) if (istt .eq. -1) goto 20 ! redo NumCom=NumCom+1 write(MINCOM(NumCom),205)NParF goto 20 end if 205 format('SET STRATEGY',5x,i2) if (risp.eq.'e'.or.risp.eq.'E') then !END call sttdis('END',0,istt) NumCom=NumCom+1 MINCOM(NumCom)='RETURN' NMINCM=NumCom ierr=0 return end if !QUIT if (risp.eq.'q'.or.risp.eq.'Q') then ierr = -1 return end if goto 20 end if return end C&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& SUBROUTINE AskI(Commnt,Valore,ier) C C Routine di I/O per leggere una variabile da tastiera. C Presenta all'utente una descrizione della variabile (Commnt) C e un valore di default (Valore). C Se l'utente risponde REDO ier=-1 C Se l'utente risponde GO ier=-99 C C&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& IMPLICIT INTEGER (I-K) character*(*) Commnt character*20 a character t(1),a1 character*300 stt_ap integer Valore,ier integer myslen ier=0 10 write(stt_ap,'(1x,a,a,I13,a)')Commnt(1:myslen(Commnt)),' [', > Valore,' ]' t(1)=' ' call sttdis(stt_ap(1:myslen(stt_ap)),0,ist) call stkwrc('INPUTC',1,t,1,20,i,i) call stkprc(' ','INPUTC',1,1,20,iletti,a,ikun,ik,is) if (a(1:4).eq.'redo'.or.a(1:4).eq.'REDO') then ier=-1 return end if if (a(1:2).eq.'go'.or.a(1:2).eq.'GO') then ier=-99 return end if a1=a if (a1.ne.' ') read(a,*,err=10)valore ier=0 return end C&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& SUBROUTINE AskD(Commnt,Valore,ier) C C Routine di I/O per leggere una variabile da tastiera. C Presenta all'utente una descrizione della variabile (Commnt C e un valore di default (Valore). C Se l'utente risponde negativo ier<0 C C&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& IMPLICIT INTEGER (I-K) character*(*) Commnt DOUBLE PRECISION Valore character t(1),a1 character*20 a character*300 stt_ap integer ier integer myslen ier=0 10 write(stt_ap,'(1x,a,a,F9.4,a)')Commnt(1:myslen(Commnt)),' [' > ,Valore,' ]' t(1)=' ' call sttdis(stt_ap(1:myslen(stt_ap)),0,ist) call stkwrc('INPUTC',1,t,1,20,i,i) call stkprc(' ','INPUTC',1,1,20,iletti,a,ikun,ik,is) if (a(1:4).eq.'redo'.or.a(1:4).eq.'REDO') then ier=-1 return end if if (a(1:2).eq.'go'.or.a(1:2).eq.'GO') then ier=-99 return end if if (a(1:1).eq.'c'.or.a(1:1).eq.'C') then ier=-98 return end if a1=a if (a1.ne.' ') read(a,*,err=10)Valore return end C&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& SUBROUTINE AskR(Commnt,Valore,ier) C C Routine di I/O per leggere una variabile da tastiera. C Presenta all'utente una descrizione della variabile (Commnt) C e un valore di default (Valore). C Se l'utente risponde negativo ier<0 C C&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& IMPLICIT INTEGER (I-K) character*(*) Commnt real Valore character*300 stt_ap character*20 a character t(1),a1 integer ier integer myslen ier=0 10 write(stt_ap,'(1x,a,a,F9.4,a)')Commnt(1:myslen(Commnt)),' [' > ,Valore,' ]' call sttdis(stt_ap(1:myslen(stt_ap)),0,ifl) t(1)=' ' call stkwrc('INPUTC',1,t,1,1,i,i) call stkprc(' ','INPUTC',1,1,20,iletti,a,ikun,ik,is) if (a(1:4).eq.'redo'.or.a(1:4).eq.'REDO') then ier=-1 return end if if (a(1:2).eq.'go'.or.a(1:2).eq.'GO') then ier=-99 return end if if (a(1:1).eq.'c'.or.a(1:1).eq.'C') then ier=-98 return end if a1=a if (a1.ne.' ') read(a,*,err=10)Valore return end C&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& SUBROUTINE AskYN(Commnt,Valore,ier) C C Routine di I/O per leggere una variabile da tastiera. C Presenta all'utente una descrizione della variabile (Commnt) C e un valore di default (Valore). C if ier in input=0, wait for a reply. C C&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& IMPLICIT INTEGER (I-K) character*(*) Commnt logical Valore character*20 a,val integer ier character*300 stt_ap character t(1),a1 integer myslen val='N' if (Valore) val='Y' 10 write(stt_ap,'(1x,a,a,a1,a)')Commnt(1:myslen(Commnt)),' [', > Val,' ]' t(1)=' ' call sttdis(stt_ap(1:myslen(stt_ap)),0,ist) call stkwrc('INPUTC',1,t,1,20,i,i) call stkprc(' ','INPUTC',1,1,20,iletti,a,ikun,ik,is) if (iletti.eq.0) then if (ier.eq.0) goto 10 ier=0 return end if if (a(1:4).eq.'redo'.or.a(1:4).eq.'REDO') then ier=-1 return end if if (a(1:2).eq.'go'.or.a(1:2).eq.'GO') then ier=-99 return end if a1=a if (a1.ne.'Y'.and.a1.ne.'y'.and.a1.ne.'N'.and.a1.ne.'n')goto 10 if (a1.eq.'Y'.or.a1.eq.'y') Valore=.true. if (a1.eq.'N'.or.a1.eq.'n') Valore=.false. ier=0 return end C&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& SUBROUTINE AskC(Commnt,Valore,ier) C C Routine di I/O per leggere una variabile da tastiera. C Presenta all'utente una descrizione della variabile (Commnt) C e un valore di default (Valore). C ier = -2 in input: non mostra valore di default C&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& IMPLICIT INTEGER (I-K) character*(*) Commnt,Valore character*20 a integer ier character*300 stt_ap character t(1),a1 integer myslen 10 if (ier.eq.-2) then write(stt_ap,'(1x,a)')Commnt else write(stt_ap,'(1x,a,a2,a,a2)')Commnt(1:myslen(Commnt)),' [' > ,Valore(1:myslen(Valore)),' ]' end if t(1)=' ' call sttdis(stt_ap(1:myslen(stt_ap)),0,ist) call stkwrc('INPUTC',1,t,1,20,i,i) call stkprc(' ','INPUTC',1,1,20,iletti,a,ikun,ik,is) if (a(1:4).eq.'redo'.or.a(1:4).eq.'REDO') then ier=-1 return end if if (a(1:2).eq.'go'.or.a(1:2).eq.'GO') then ier=-99 return end if a1=a if (a1.ne.' ') Valore = a ier=0 return end C&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& SUBROUTINE AskPar(iflag) C Ask all'utente una configurazione di righe, C Cccc Nomefile : char*(*) Nome del file da aprire C iflag: integer error flag: if 0 ok, C if <0 user quitted C C C&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& CC implicit none integer iflag INCLUDE 'MID_REL_INCL:fit_var.inc' ! Variabili globali character*30 Commnt character*80 stt_ap integer iredo,ngroup,i,j,iclin,icpar,ist,itmp integer iexist,jold,jj,nj,ij,ik integer nli(100),icur character kli(100),a real xdum,ydum,z,vel C include 'MID_REL_INCL:fit_mid.inc' INTEGER MADRID(1) INCLUDE 'MID_INCLUDE:ST_DEF.INC' COMMON/VMR/MADRID INCLUDE 'MID_INCLUDE:ST_DAT.INC' 100 iflag = 0 iclin = 0 icpar = 0 if (NROWS.gt.0) then ngroup= 0 do j=1,NROWS if (grID(j).gt.ngroup) then ngroup=ngroup+1 kli(ngroup)=Class(j) if (ngroup.ne.1) nli(ngroup-1)=j-jold jold=j end if end do nli(ngroup)=NROWS-jold+1 end if continue !inizio stt_ap=' ******* Line Configuration ******* ' call sttdis(stt_ap,0,ist) call sttdis(' ',0,ist) call AskI('--> Number of groups of lines',ngroup,iredo) if (iredo.eq.-1) then iflag = -1 return end if if (iredo.eq.-99) then c iflag = 0 call sttdis('GO DISABLED, value unchanged',0,ist) c return end if if(ngroup.eq.0) goto 100 do i=1,ngroup write(stt_ap,'(A5,I3,A9)')' ###',i,' group:' call sttdis(stt_ap,0,ist) call sttdis(' ',0,ist) itmp=nli(i) 101 call AskI(' --> Number of lines: ',itmp,iredo) if (iredo.eq.-1) goto 100 if (iredo.eq.-99) then c iflag = 0 call sttdis('GO DISABLED, value unchanged',0,ist) c return end if nli(i)=itmp if (nli(i).eq.0) goto 101 if (nli(i).eq.1) then kli(i)='S' goto 1000 end if 201 call AskC(' --> Kind of group (S,M,z,b,T)',kli(i),iredo) if (iredo.eq.-1) goto 101 if (iredo.eq.-99) then iflag = 0 return end if if (kli(i).eq.'s') kli(i)='S' if (kli(i).eq.'m') kli(i)='M' if (kli(i).eq.'Z') kli(i)='z' if (kli(i).eq.'B') kli(i)='b' if (kli(i).eq.'t') kli(i)='T' 1000 continue do j=1,nli(i) iclin=iclin+1 1001 write(stt_ap,'(A7,I3,A8)')' ###',j,' line:' call sttdis(stt_ap,0,ist) 1002 Commnt=' --> Element name: (help)' Call AskC(Commnt,ElmtNm(iclin),iredo) if (iredo.eq.-1) goto 100 if (iredo.eq.-99) then iflag = 0 return end if ! help if (ElmtNm(iclin).eq.'help'.or.ElmtNm(iclin).eq.'HELP') then call sttdis('*** List of elements: **',0,ist) nj=nint(AT_N/5.)+1 do ij=1,nj write(stt_ap,'(1x,5A14)')(AT_NAM(ij+ik*nj),ik=0,4) call sttdis(stt_ap,0,ist) end do end if iexist=0 ! Checks whether it exists. do jj=1,AT_N if (ElmtNm(iclin).eq.AT_NAM(jj)) iexist=1 end do if (iexist.eq.0) goto 1002 1101 if ((J.EQ.1).or.(j.gt.1.and.kli(i).eq.'S')) then Commnt=' --> Central wavelength: ' Call AskD(Commnt,LamIni(iclin),iredo) if (iredo.eq.-1) goto 100 if (iredo.eq.-99) then iflag = 0 return end if if (I_GRAP.and.iredo.eq.-98) then ! legge cursore call GetXCr(xdum,ydum,z,vel,icur) LamIni(iclin)=xdum end if if (.not.I_GRAP.and.iredo.eq.-98) then ! legge cursore call ErrMsg('Graphics not enabled') goto 1101 end if icpar = icpar+1 write(CPar(1,iclin),'(i4)')icpar else call CnvrtP(CPar(1,iclin-1),itmp,a,ist) write(CPar(1,iclin),'(i2,A2)')itmp,'.z' end if 1201 if ((J.EQ.1).or.(j.gt.1.and.kli(i).ne.'M')) then Commnt=' --> Column density: ' Call AskD(Commnt,NIni(iclin),iredo) if (iredo.eq.-1) goto 100 if (iredo.eq.-99) then iflag = 0 return end if icpar = icpar+1 write(CPar(2,iclin),'(i4)')icpar else call CnvrtP(CPar(2,iclin-1),itmp,a,ist) write(CPar(2,iclin),'(i4)')itmp end if 1301 if ((J.EQ.1).or.(j.gt.1.and. 1 (kli(i).eq.'S'.or.kli(i).eq.'z'))) then Commnt=' --> Doppler parameter: ' Call AskD(Commnt,BIni(iclin),iredo) if (iredo.eq.-1) goto 100 if (iredo.eq.-99) then iflag = 0 return end if icpar = icpar+1 write(CPar(3,iclin),'(i4)')icpar 1401 if (TURBLN.eq.1) then Commnt=' --> Turbolence parameter: ' Call AskD(Commnt,BtuIni(iclin),iredo) if (iredo.eq.-1) goto 100 if (iredo.eq.-99) then iflag = 0 return end if icpar = icpar+1 write(CPar(4,iclin),'(i4)')icpar end if else call CnvrtP(CPar(3,iclin-1),itmp,a,ist) if (kli(i).eq.'T') then write(CPar(3,iclin),'(i2,A2)')itmp,'.T' else write(CPar(3,iclin),'(i4)')itmp end if if (TURBLN.eq.1) then call CnvrtP(CPar(4,iclin-1),itmp,a,ist) write(CPar(4,iclin),'(i4)')itmp end if end if end do end do NROWS = iclin if (TURBLN.eq.0) then icpar = icpar+1 do j=1,iclin write(CPar(4,j),'(i2,a2)')icpar,'.F' BTuIni(iclin) = 0. end do end if itmp=0 do i=1,ngroup do j=1,nli(i) itmp=itmp+1 Class(itmp)=kli(i) grId(itmp)=i end do end do return end C&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& SUBROUTINE AskFIn(iflag) C Ask all'utente una serie di intervalli fit C Cccc Nomefile : char*(*) Nome del file da aprire C iflag: integer error flag: if 0 ok, C if <0 user quitted C C C&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& CC implicit none integer iflag INCLUDE 'MID_REL_INCL:fit_var.inc' ! Variabili globali character*50 Commnt character*70 stt_ap integer iredo,i,istt,icurer real estrem,ydum,z,vel C include 'MID_REL_INCL:fit_mid.inc' INTEGER MADRID(1) INCLUDE 'MID_INCLUDE:ST_DEF.INC' COMMON/VMR/MADRID INCLUDE 'MID_INCLUDE:ST_DAT.INC' C&&&&&&& C & Chiede limiti su cui effettuare il fit C&&&&&&& 1000 continue ! fine input parametri innesco call sttdis(' ',0,istt) call sttdis(' ******* Fit Intervals ******* ', 1 0,istt) call sttdis(' ',0,istt) Commnt='### Number of intervals:' if (NINTFT .eq. 0) NINTFT = 1 call AskI(Commnt,NINTFT,iredo) if (iredo.eq.-1) return if (iredo.eq.-99) goto 1100 ! salta altri input do i = 1,NINTFT write(stt_ap,'(a,i2,a)')' Input limits of ',i,' ^ interval' Commnt=' Minimum wavelength' call sttdis(stt_ap,0,istt) call AskD(Commnt,FITMIN(i),iredo) if (iredo.eq.-1) goto 1000 if (iredo.eq.-99) goto 1100 ! salta altri input if (iredo.eq.-98) then ! legge cursore if (I_GRAP) then estrem = FITMIN(i) call GetXCr(estrem,ydum,z,vel,icurer) FITMIN(i) = estrem Commnt=' Maximum wavelength' write(stt_ap,'(1x,a,a,F9.4,a)')Commnt,' [', 1 FITMAX(i),' ]' call sttdis(stt_ap,0,istt) estrem=FITMAX(i) call GetXCr(estrem,ydum,z,vel,icurer) FITMAX(i) = estrem goto 510 else call ErrMsg('Graphic not enabled') goto 1000 end if end if Commnt=' Maximum wavelength' call AskD(Commnt,FITMAX(i),iredo) if (iredo.eq.-1) goto 1000 if (iredo.eq.-99) goto 1100 ! salta altri input if (iredo.eq.-98) then ! legge cursore if (I_GRAP) then call GetXCr(estrem,ydum,z,vel,icurer) FITMAX(i) = estrem else call Errmsg('Graphic not enabled') goto 1000 end if end if 510 continue end do 1100 call piksr2(NINTFT,FITMIN,FITMAX) ! sorting!!! iflag=0 close (10) return end C&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& SUBROUTINE MMenu(Scelta) C C Presenta il menu principale e ritorna una stringa C con l'opzione scelta TUTTA IN MAIUSCOLO C indipendentemente da come viene scritta. C Per fornire una risposta valida bisogna inviare C il carattere scritto in maiuscolo nel menu C C Scelta char*(*) out Risposta valida C C&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& character*(*) Scelta C implicit none INCLUDE 'MID_REL_INCL:fit_var.inc' ! Variabili globali character*1 Risp1 c character*20 Risposta character*70 Mes CHARACTER*80 STROUT integer istt,j character*20 FilMen(10),DefMen(10),ManMen(10),GraMen(10) C include 'MID_REL_INCL:fit_mid.inc' INTEGER MADRID(1) INCLUDE 'MID_INCLUDE:ST_DEF.INC' COMMON/VMR/MADRID INCLUDE 'MID_INCLUDE:ST_DAT.INC' C&&&&&&& C & Presentazione menu C&&&&&&& FilMen(1)='FILE' FilMen(2)=' ' FilMen(3)='sa(V)e session ' FilMen(4)='(R)ecover session' FilMen(5)='se(T)up' FilMen(6)='(E)ND' FilMen(7)=' ' DefMen(1)='PARAMETERS' DefMen(2)=' ' DefMen(3)='(N)ew' DefMen(4)='(I)terate' DefMen(5)='load from lo(G)' DefMen(6)=' ' DefMen(7)=' ' ManMen(1)='OPERATIONS' ManMen(3)='(S)TANDARD MINIM.' ManMen(4)='edit (P)aram' ManMen(5)='edit (L)imits' ManMen(6)='edit (M)inuit' ManMen(7)='(D)irect minimize' ManMen(2)=' ' GraMen(1)='GRAPHICS' GraMen(2)=' ' GraMen(3)='define (W)indow' GraMen(4)='plot (B)ackwards' GraMen(5)='plot (F)orward' GraMen(6)='(C)ursor' GraMen(7)=' ' 100 continue ! Clear page? call sttdis(' ',0,istt) call sttdis(' ',0,istt) write(Mes,'(A14,F8.2,A4,F8.2,a2,i6,a8)')'Spectrum from ' 1 ,XLAMBD(1),' to ',XLAMBD(NPUNTI), ' (',NPUNTI, 2 ' points)' call DisMsg(Mes) call sttdis(' ',0,istt) Mes ='************' write(strout,'(18x,A12,3x,A14,3x,A12)')Mes,'FITLYMAN MENU', 1 Mes call sttdis(strout,0,istt) call sttdis(' ',0,istt) call sttdis(' ',0,istt) do j=1,7 write(strout,'(4A20)')FilMen(j),DefMen(j),ManMen(j), 1 GraMen(j) call sttdis(strout,0,istt) end do Risp1=' ' istt=-2 call AskC(' ',Risp1,istt) c Risp1=Risposta if (Risp1.eq.'W'.or.Risp1.eq.'w') then Scelta='DEFINEWINDOW' return end if if (Risp1.eq.'b'.or.Risp1.eq.'B') then Scelta='GOBACK' return end if if (Risp1.eq.'f'.or.Risp1.eq.'F') then Scelta='GOFORW' return end if if (Risp1.eq.'c'.or.Risp1.eq.'C') then Scelta='CURSOR' return end if if (Risp1.eq.'n'.or.Risp1.eq.'N') then Scelta='NEWLINE' return end if if (Risp1.eq.'i'.or.Risp1.eq.'I') then Scelta='ITERATE' return end if if (Risp1.eq.'g'.or.Risp1.eq.'G') then Scelta='HISTORY' return end if if (Risp1.eq.'V'.or.Risp1.eq.'v') then Scelta='SAVESESSION' return end if if (Risp1.eq.'r'.or.Risp1.eq.'R') then Scelta='RECOVER' return end if if (Risp1.eq.'T'.or.Risp1.eq.'t') then Scelta='SET-UP' return end if if (Risp1.eq.'e'.or.Risp1.eq.'E') then Scelta='END' return end if if (Risp1.eq.'s'.or.Risp1.eq.'S') then Scelta='STANDARD' return end if if (Risp1.eq.'p'.or.Risp1.eq.'P') then Scelta='EDITPARAM' return end if if (Risp1.eq.'l'.or.Risp1.eq.'L') then Scelta='EDITLIM' return end if if (Risp1.eq.'M'.or.Risp1.eq.'m') then Scelta='EDITMINUIT' return end if if (Risp1.eq.'d'.or.Risp1.eq.'D') then Scelta='DIRECTMINI' return end if goto 100 end C&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& SUBROUTINE ERRMSG(Messaggio) C C Stampa un messaggio d'errore C C&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& IMPLICIT INTEGER (I-K) character*(*) Messaggio character*80 a call bell(1) write(a,'(20x,a34)')'************ ERROR ***************' call sttdis(a,0,istt) call sttdis(' ',0,istt) call sttdis(Messaggio,0,istt) call sttdis(' ',0,istt) write(a,'(20x,a34)')'**********************************' call sttdis(a,0,istt) call stkprc(' Press to continue *****','INPUTC', 1 1,1,20,iletti,a,ikun,ik,is) return end C&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& SUBROUTINE WRNMSG(Messaggio) C C Stampa un messaggio d'errore C C&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& IMPLICIT INTEGER (I-K) character*(*) Messaggio character*80 a c call bell(1) write(a,'(20x,a34)')'************ WARNING ***************' call sttdis(a,0,istt) call sttdis(Messaggio,0,istt) call sttdis(' ',0,istt) return end C&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& SUBROUTINE DISMSG(Messaggio) C C Stampa un messaggio generico C C&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& IMPLICIT INTEGER (I-K) character*(*) Messaggio character*79 MesDis character*73 Mes2 Mes2 = Messaggio write(MesDis,'(A6,A)')' ---> ',Mes2 call sttdis(MesDis,0,istt) return end C&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& SUBROUTINE bell(n) C C manda n ring C C&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& INTEGER I,N,IER character b(1) b(1) = char(7) do i=1,n call sttdis(b,0,ier) c write(6,*)b end do return end function myslen(car1) character*(*) car1 integer myslen integer i,clen clen = len(car1) do i = clen,1,-1 if (car1(i:i).ne.' ') goto 99 enddo 99 continue myslen=i return end