64
67
def dadd(line,s=doc): s[0] = '%s\n%s'%(s[0],line)
65
68
for (name,vnames,vars) in findcommonblocks(m):
66
lower_name = string.lower(name)
69
lower_name = name.lower()
67
70
hnames,inames = [],[]
69
72
if isintent_hide(vars[n]): hnames.append(n)
70
73
else: inames.append(n)
72
outmess('\t\tConstructing COMMON block support for "%s"...\n\t\t %s\n\t\t Hidden: %s\n'%(name,string.join(inames,','),string.join(hnames,',')))
75
outmess('\t\tConstructing COMMON block support for "%s"...\n\t\t %s\n\t\t Hidden: %s\n'%(name,','.join(inames),','.join(hnames)))
74
outmess('\t\tConstructing COMMON block support for "%s"...\n\t\t %s\n'%(name,string.join(inames,',')))
77
outmess('\t\tConstructing COMMON block support for "%s"...\n\t\t %s\n'%(name,','.join(inames)))
75
78
fadd('subroutine f2pyinit%s(setupfunc)'%name)
76
79
fadd('external setupfunc')
78
81
fadd(func2subr.var2fixfortran(vars,n))
80
fadd('common %s'%(string.join(vnames,',')))
83
fadd('common %s'%(','.join(vnames)))
82
fadd('common /%s/ %s'%(name,string.join(vnames,',')))
83
fadd('call setupfunc(%s)'%(string.join(inames,',')))
85
fadd('common /%s/ %s'%(name,','.join(vnames)))
86
fadd('call setupfunc(%s)'%(','.join(inames)))
85
88
cadd('static FortranDataDef f2py_%s_def[] = {'%(name))
90
93
dm = capi_maps.getarrdims(n,vars[n])
91
94
if dm['dims']: idims.append('(%s)'%(dm['dims']))
92
95
else: idims.append('')
93
dms=string.strip(dm['dims'])
96
dms=dm['dims'].strip()
94
97
if not dms: dms='-1'
95
98
cadd('\t{\"%s\",%s,{{%s}},%s},'%(n,dm['rank'],dms,at))
96
99
cadd('\t{NULL}\n};')
97
100
inames1 = rmbadname(inames)
98
inames1_tps = string.join(map(lambda s:'char *'+s,inames1),',')
101
inames1_tps = ','.join(map(lambda s:'char *'+s,inames1))
99
102
cadd('static void f2py_setup_%s(%s) {'%(name,inames1_tps))
100
103
cadd('\tint i_f2py=0;')
101
104
for n in inames1:
108
111
cadd('extern void %s(f2pyinit%s,F2PYINIT%s)(void(*)(%s));'\
109
%(F_FUNC,lower_name,string.upper(name),
110
string.join(['char*']*len(inames1),',')))
112
%(F_FUNC,lower_name,name.upper(),
113
','.join(['char*']*len(inames1))))
111
114
cadd('static void f2py_init_%s(void) {'%name)
112
115
cadd('\t%s(f2pyinit%s,F2PYINIT%s)(f2py_setup_%s);'\
113
%(F_FUNC,lower_name,string.upper(name),name))
116
%(F_FUNC,lower_name,name.upper(),name))
115
118
iadd('\tF2PyDict_SetItemString(d, \"%s\", PyFortranObject_New(f2py_%s_def,f2py_init_%s));'%(name,name,name))
116
tname = string.replace(name,'_','\\_')
119
tname = name.replace('_','\\_')
117
120
dadd('\\subsection{Common block \\texttt{%s}}\n'%(tname))
118
121
dadd('\\begin{description}')
120
123
dadd('\\item[]{{}\\verb@%s@{}}'%(capi_maps.getarrdocsign(n,vars[n])))
121
124
if hasnote(vars[n]):
122
125
note = vars[n]['note']
123
if type(note) is type([]): note=string.join(note,'\n')
126
if type(note) is type([]): note='\n'.join(note)
124
127
dadd('--- %s'%(note))
125
128
dadd('\\end{description}')
126
ret['docs'].append('"\t/%s/ %s\\n"'%(name,string.join(map(lambda v,d:v+d,inames,idims),',')))
129
ret['docs'].append('"\t/%s/ %s\\n"'%(name,','.join(map(lambda v,d:v+d,inames,idims))))
127
130
ret['commonhooks']=chooks
128
131
ret['initcommonhooks']=ihooks
129
132
ret['latexdoc']=doc[0]