Go to the documentation of this file.00001 SUBROUTINE phrtsd(phrase,seed1,seed2)
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 CHARACTER*(*) table
00039 PARAMETER (table='abcdefghijklmnopqrstuvwxyz'//
00040 + 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'//'0123456789'//
00041 + '!@#$%^&*()_+[];:''"<>?,./')
00042 INTEGER twop30
00043 PARAMETER (twop30=1073741824)
00044 INTEGER sixty4
00045 PARAMETER (sixty4=64)
00046
00047
00048 INTEGER seed1,seed2
00049 CHARACTER phrase* (*)
00050
00051
00052 INTEGER i,ichr,j,lphr,idxval
00053
00054
00055 INTEGER shift(0:4),values(5)
00056
00057
00058 INTEGER lennob
00059 EXTERNAL lennob
00060
00061
00062 INTRINSIC index,mod
00063
00064
00065
00066 SAVE shift
00067
00068
00069
00070 DATA shift/1,64,4096,262144,16777216/
00071
00072
00073 seed1 = 1234567890
00074 seed2 = 123456789
00075 lphr = lennob(phrase)
00076 IF (lphr.LT.1) RETURN
00077 DO 30,i = 1,lphr
00078 idxval = index(table,phrase(i:i))
00079 ichr = mod(idxval,sixty4)
00080 IF (ichr.EQ.0) ichr = 63
00081 DO 10,j = 1,5
00082 values(j) = ichr - j
00083 IF (values(j).LT.1) values(j) = values(j) + 63
00084 10 CONTINUE
00085 DO 20,j = 1,5
00086 seed1 = mod(seed1+shift(j-1)*values(j),twop30)
00087 seed2 = mod(seed2+shift(j-1)*values(6-j),twop30)
00088 20 CONTINUE
00089 30 CONTINUE
00090 RETURN
00091
00092 END