cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
c
c Die Routinen dieser Datei werden in das Programm 'ACCEL' eingebunden und
c dort von der Routine 'READ_INPUTFILE' aufgerufen.
c
c Aufgabe dieser Routinen ist es, aus der Variablen 'ArtList' (so ihr in der
c INPUT-Datei ein Wert zugewiesen wurde) die zu verwendenden Projektilarten zu
c extrahieren und die zugehoerigen Code-Nummern in das Feld 'art_Nr'
c einzutragen. Dieses wird dann im Hauptprogramm dazu benutzt, den Massen-
c und den Ladungsspeicher entsprechend den zu den Teilchen gehoerigen Werten
c zu belegen. Wurden in 'artList' keine Teilchenarten spezifiziert, so werden
c fuer die Einstellungen der Massen- und  der Ladungsschleife im Hauptprogramm
c die Vorgaben fuer '_Masse' bzw. '_Ladung' aus dem INPUT-file verwendet.
c
c Die Subroutine EXAMINE_ARTLIST kopiert zunaechst buchstabenweise die Variable
c 'ArtList' in die Variable 'helpTxt', wobei saemtliche blanks entfernt werden.
c Anschliessend wird 'artList' geloescht. (Die Artenbezeichnungen werden spaeter
c formatiert wieder in 'artList' zurueckgeschrieben).

c Als naechstes werden aus 'HelpTxt' die Artenbezeichnungen einzeln in den
c Speicher 'testName' uebernommen und geprueft, ob die jeweilige Art erkannt
c wird. Ist die Artenbezeichnung laenger als vier Buchstaben, so erfolgt
c Programmabbruch mit Fehlermeldung (Routine ART_FEHLER). Das selbe passiert
c falls die Artenbezeichnung nicht erkannt wird.
c
c Wurde die Art erkannt, und befindet sie sich nicht schon in der Liste, so
c wird ihre Codezahl in das Feld 'art_Nr' uebernommen und wieder in die
c Variable 'ArtList' zurueckgeschrieben, wobei die Arten durch Komma und
c darauffolgendes blank getrennt werden.
c
c Wurden in 'artList' letztlich gueltige Artenbezeichnungen gefunden, so wird
c das logical 'artList_defined' auf .true. gesetzt und die Parameter fuer die
c Massen- und die Ladungs-Schleifen so eingestellt, dass erstere genau einen
c (Leer-) Durchlauf macht, letztere dagegen fuer jede gefundene Projektilart
c einen Durchgang vollfuehrt, in dem dann jeweils die zugehoerigen Ladungs- UND
c Massenwerte entsprechend den Inhalten der Speicher art_Ladung(artNr) und 
c art_Masse(artNr) eingestellt werden.
c
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc

	OPTIONS /EXTEND_SOURCE

	SUBROUTINE EXAMINE_ARTLIST
c	==========================


	implicit   none
	integer	k,k1	! Zaehlvariablen	

	integer length	! Laenge von helpTxt
        integer pos     ! Position in helpTxt
        integer komma   ! Position eines Kommas in helpTxt
        integer nummer  ! Nummer der naechsten erkannten Art
	integer posL    ! Position in ArtList

	character  helpChar*1, helpTxt*60, testName*4

	INCLUDE 'accel$sourcedirectory:COM_ACCEL.INC'

c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

c Es wurden noch keine Teilchen mit Myonen gefunden:

	mu_flag = .false.


c 'artList' in 'helpText' uebernehmen, dabei alle Blanks entfernen. Taucht ein
c '!' auf, so ignoriere den Rest.

	helpTxt = ' '
	length = 0
	do pos = 1, len(artList)
	    helpChar = artlist(pos:pos)
	    if (helpChar.EQ.'!') goto 1
	    if (helpChar.NE.' ') then
		length = length+1
		helpTxt(length:length) = helpChar
	    endif
	enddo

c	write(*,*) 'artList = ',artList
c	write(*,*) 'helpTxt = ',helpTxt
1 	artList = ' '


c die Arten nacheinander in testName uebernehmen, und pruefen, ob sie erkannt
c werden:

        nummer = 1
        pos = 1
	posL = 1
        komma = 0

        do while (komma.LT.length+1)

            komma = INDEX(helpTxt,',')		! Position des ersten Kommas
            if (komma.EQ.0) komma = length+1    ! falls kein ',' mehr, nimm Rest
c	    write(*,*) 'pos     = ',pos    
c	    write(*,*) 'komma   = ',komma  

            if (komma-pos.GT.4) then		! ArtName hat max. 4 Lettern
                call art_Fehler (helpTxt(pos:komma-1))
		STOP

            elseif (komma.NE.pos) then		! sonst: 2 Kommas hintereinander
                testName = helpTxt(pos:komma-1)
c		write(*,*) 'testName= ',testName
		!c Pruefen, ob die Art bekannt ist. Wenn ja, pruefe, ob die Art
		!c nicht schon in der Liste ist. Falls Nein, gib die Nummer der
		!c entsprechenden Art in Art_Nr(nummer) und haenge den ArtNamen
		!c gefolgt von Komma und Leerzeichen an artList an:

		do k = 1, arten_zahl   ! arten_Zahl = Anzahl bekannter Teilchenarten
		    if (testName.EQ.art_Name(k)) then  ! Teilchenart erkannt
			if (nummer.GT.1) then
			    do k1 = 1, nummer-1	! Test, ob Art schon in Liste
				if (Art_Nr(k1).EQ.k) goto 2  ! ueberspringen,
			    enddo			     !  => next, please!
			endif
			art_Nr(nummer) = k
			if (k.LE.4) mu_flag = .true.
			artList(posL:posL+komma-pos+1) = 
     +					  helpTxt(pos:komma-1)//', ' 
			posL = posL + komma-pos+2   ! Position fuer naechste Art
      			nummer = nummer + 1	    !     definieren
      			if (nummer.GT.artenMax) goto 3 ! nicht mehr als artenMax Arten
			goto 2			    ! next, please
		    endif
		enddo

		!c Art wurde nicht erkannt -> Fehlermeldung und Abbruch:
      		call art_Fehler(testName)
		STOP

            endif

2           if (komma.LT.length+1) helpTxt(komma:komma) = '#'  ! , durch # ersetzen
            pos = komma+1				       ! und dann von vorne

	enddo

3	artList(posL-2:posL-2)=' '		    ! letztes Komma entfernen

c Wenn wir hier landen, wurden Teilchen in 'artList' gefunden und erkannt!

	artList_defined = .true.


c Falls 'artList' kein Myonen-Teilchen enthaelt, braucht auch der Myonzerfall
c nicht beruecksichtigt zu werden:

	if (.NOT.mu_flag) UseDecay = .false.


c Die Massen- und die Ladungsschleife einstellen:

	par(1,mass) =  1.	    ! Masse-Schleife macht genau einen Durchgang
	par(2,mass) =  1.
	par(3,mass) =  1.

	par(1,charge) =  1.	    ! Ladungsschleife macht fuer jede
	par(2,charge) =  nummer-1   !      Projektilart einen Durchgang
	par(3,charge) =  1.


	END


C===============================================================================


	SUBROUTINE ART_FEHLER(artText)
c	==============================


	character   artText*(*)

	write (*,*)
	write (*,1) ' >>>>> Art ''',artText,''' ist unbekannt'
	write (*,1) ' >>>>> Gueltig Artenbezeichnungen sind:'
	write (*,1) ' >>>>> e+, e-, m+, m-, Mu, Mu-, H+, H, H-, '//
     +				     'H2+, H2, H2-, alfa'
	write (*,1) ' >>>>> (das Einlesen erfolgt CASE SENSITIVE!)'
	write (*,*)

1	format(T10,A)

	END


c===============================================================================
