1 |
jmc |
1.1 |
!======================================================================= |
2 |
|
|
integer function generate_tag( iarg1, iarg2, carg ) |
3 |
|
|
implicit none |
4 |
|
|
! Predefined constants/arrays |
5 |
|
|
#include "CPLR_SIG.h" |
6 |
|
|
! Arguments |
7 |
|
|
integer iarg1 |
8 |
|
|
integer iarg2 |
9 |
|
|
character*(*) carg |
10 |
|
|
! Local |
11 |
|
|
integer j,hash,pow |
12 |
|
|
integer itrans(MAXLEN_COMP_NAME) |
13 |
|
|
! ------------------------------------------------------------------ |
14 |
|
|
|
15 |
|
|
! Convert the characters to an integer array |
16 |
|
|
call mitcplr_char2int( carg, itrans ) |
17 |
|
|
|
18 |
|
|
! Hash the integer array |
19 |
|
|
hash=1 |
20 |
|
|
pow=1 |
21 |
|
|
do j=1,MAXLEN_COMP_NAME |
22 |
|
|
hash=abs(hash+itrans(j)*pow) |
23 |
|
|
pow=mod(pow*128,256*256) |
24 |
|
|
enddo |
25 |
|
|
|
26 |
|
|
generate_tag=(hash*256+iarg2)*128+iarg1 |
27 |
|
|
generate_tag=abs(mod(generate_tag,256*256*256)) |
28 |
|
|
|
29 |
|
|
c if (DEBUG) |
30 |
|
|
c & write(0,*) 'generate_tag = ',generate_tag,iarg1,iarg2,carg |
31 |
|
|
|
32 |
|
|
! ------------------------------------------------------------------ |
33 |
|
|
return |
34 |
|
|
end |
35 |
|
|
!======================================================================= |