1 jones 1.1 subroutine me_parse_name (line, final_index,
2 > order, indices, line_number)
3
4 implicit none
5
6 include 'db.inc'
7
8 character*(*) line ! line to parse
9 integer final_index ! index of target variable
10 integer order ! order of ME
11 integer indices(1) ! initial indices
12 integer line_number ! line # of input file
13
14 integer bar ! location of bar
15 integer bracket ! location of bracket
16 integer i ! index
17
18 character*12 name ! variable name to check for
19
20 integer EXTRA_VAR
21 parameter (EXTRA_VAR = 11)
22 jones 1.1 character*12 name_list(EXTRA_VAR) /
23 > 'x_det', 'y_det', 'theta_det', 'z', 'theta', 'phi',
24 > 'drift',
25 > 'ang_slope_x', 'ang_slope_y', 'ang_offset_x', 'ang_offset_y'
26 > /
27
28 order = -1 ! invalid return code
29 final_index = 1 ! something by default
30
31 if (line(1:1) .ne. '<') then
32 write (*,*) ' The first character in a matrix element name',
33 > ' must be a <'
34 if (line_number .gt. 0) write (*,*) ' Line #', line_number
35 return
36 endif
37
38 bar = index(line, '|') ! find the bar
39 if (bar .eq. 0) then
40 bracket = index(line, '>') ! try for the ending bracket
41 if (bracket .ne. 0) then ! now check if I know this name
42 name = line(2:bracket-1) ! strip out the name
43 jones 1.1 do i = 1, EXTRA_VAR
44 if (name .eq. name_list(i)) then
45 order = -1 - i
46 return
47 endif
48 enddo
49 endif
50 write (*,*) ' syntax error in matrix element name, ',
51 > 'bar (|) not found.'
52 if (line_number .gt. 0) write (*,*) ' Line #', line_number
53 return
54 endif
55 if (bar .le. 2) then ! nothing given
56 write (*,*) ' You must specify a final matrix',
57 > ' element name.'
58 if (line_number .gt. 0) write (*,*) ' Line #', line_number
59 endif
60 call me_parse_final(line(2:bar-1), final_index, line_number)
61 if (final_index .le. 0) return
62
63 bracket = index(line, '>') ! find >
64 jones 1.1 if (bracket .eq. 0) then
65 write (*,*) ' syntax error in matrix element name, ',
66 > 'bracket (>) not found.'
67 if (line_number .gt. 0) write (*,*) ' Line #', line_number
68 return
69 endif
70 if (bar+1 .eq. bracket) then ! zeroth order
71 call me_parse_initial(" ", order, indices, MAX_ORDER, line_number)
72 else
73 call me_parse_initial(line(bar+1:bracket-1), order, indices,
74 > MAX_ORDER, line_number)
75 endif
76
77 end
78
|