/[PAMELA software]/yoda/techmodel/forroutines/tracker/readraw/trkunpack.f
ViewVC logotype

Contents of /yoda/techmodel/forroutines/tracker/readraw/trkunpack.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (show annotations) (download)
Tue Jul 6 12:20:23 2004 UTC (20 years, 5 months ago) by kusanagi
Branch: MAIN
Initial revision

1 subroutine trkeventpkt(runerror,event_file_name)
2
3 include '../commonyoda/commontracker.f'
4 include '../commonyoda/dataformat.f'
5 c include '../commonyoda/trk_calib_parameters.f'
6 include '../commonyoda/level0.f'
7
8
9 integer ndummy
10 data ndummy/1000/
11
12 integer runerror !readevent error flag
13 integer ffd_pkt !pkt file descriptor
14 !(file temporaneo)
15 character*60 event_file_name !nome file
16 c print*,' lun_pkt-----',int(lun_pkt);
17 open(unit=lun_pkt,
18 $ name=EVENT_FILE_NAME(1:lnblnk(EVENT_FILE_NAME)),
19 $ status='old',
20 $ form='unformatted'
21 $ )
22 ffd_pkt = FNum(lun_pkt) !reads unix file descriptor
23
24
25 call initlevel0
26
27 TOTDATAlength = 0. !total length of data buffer
28 do iview=1,ndummy !loop on views
29 call searchtrkheader(runerror,ffd_pkt)
30 c if(runerror.eq.-1) goto 24
31 if(runerror.eq.-1) goto 2222
32 if(runerror.eq.1) then
33 print*,' '
34 print*,'readraw: END OF CPU PACKET '
35 print*,'______________________________________ '
36 c goto 9900 !end loop on files
37 c goto 8800 !end loop on views (DSP pkt)
38 goto 2222
39 endif
40
41 if(checkheader.ne.2) then
42 print*,'>>>> ERROR <<<< (trkeventpkt)'
43 print*,'>>>> CPU packet type ',!pkt_type,
44 $ ' does not match DSP type ',checkheader
45 c goto 9909 ! next event (==> search another CPU header)
46 DAQmode_temp = ishft(iand(header(1),z'03f0'),-4)
47 DSPnumber_temp = iand(header(1),z'000f')
48 print*,' -----------------------------------'
49 $ ,iview
50 print*,' DSP number-----',int(DSPnumber_temp)
51 print*,' DAQ mode-------',int(DAQmode_temp)
52 print*,' -----------------------------------'
53 goto 2525 !next view (==> search another DSP header)
54 endif
55
56 call unpackdata(runerror,ffd_pkt)
57 c if(runerror.eq.-1) goto 24
58 if(runerror.eq.-1) goto 2222
59 c if(runerror.eq.1) goto 23
60 if(runerror.eq.1) goto 2222
61
62 print*,' '
63 print*,' -----------------------------------',iview
64 print*,' DSP number-----',DSPnumber_dat
65 print*,' DAQ mode-------',DAQmode_dat
66 print*,' event number ',eventn_dat
67
68 trk_DSP_ok(DSPnumber_dat)=1
69
70 call fillview(iview)
71
72 2525 continue
73 enddo !end loop on views
74
75 2222 continue
76
77 close (lun_pkt)
78 return
79 end
80
81 * **********************************************
82
83 c subroutine trk_calib_pkt(runerror,ffd_pkt)
84 subroutine trkcalibpkt(runerror,event_file_name)
85
86 include '../commonyoda/commontracker.f'
87 include '../commonyoda/dataformat.f'
88 include '../commonyoda/trk_calib_parameters.f'
89
90 integer ndummy
91 data ndummy/1000/
92
93 integer runerror !readevent error flag
94 integer ffd_pkt !pkt file descriptor
95 !(file temporaneo)
96 character*60 event_file_name !nome file
97
98 open(unit=lun_pkt,
99 $ name=EVENT_FILE_NAME(1:lnblnk(EVENT_FILE_NAME)),
100 $ status='old',
101 $ form='unformatted'
102 $ )
103 ffd_pkt = FNum(lun_pkt) !reads unix file descriptor
104
105
106 do iview=1,ndummy !loop on views (DSP pkt)
107 call searchtrkheader(runerror,ffd_pkt)
108 c if(runerror.eq.-1) goto 24
109 if(runerror.eq.-1) goto 2222
110 if(runerror.eq.1) then
111 print*,' '
112 print*,'readraw: END OF CPU PACKET '
113 print*,'______________________________________ '
114 goto 2222 !end loop on views (DSP pkt)
115 endif
116 if(checkheader.ne.3) then
117 print*,'>>>> ERROR <<<< (trkcalibpkt)'
118 print*,'>>>> CPU packet type ',!pkt_type,
119 $ ' does not match DSP type ',checkheader
120 DAQmode_temp = ishft(iand(header(1),z'03f0'),-4)
121 DSPnumber_temp = iand(header(1),z'000f')
122 print*,' -----------------------------------'
123 $ ,iview
124 print*,' DSP number-----',int(DSPnumber_temp)
125 print*,' DAQ mode-------',int(DAQmode_temp)
126 print*,' -----------------------------------'
127 goto 2424 !next view (==> search another DSP header)
128 endif
129
130 call unpackcalibration(runerror,ffd_pkt)
131 c if(runerror.eq.-1) goto 24
132 if(runerror.eq.-1) goto 2222
133 c if(runerror.eq.1) goto 23
134 if(runerror.eq.1) goto 2222
135
136
137 print*,'Calibration packet ==> ',iview
138
139 print*,'---- Calibration packet ',iview,' ----'
140 print*,' DSP number ',DSPnumber_cal
141 print*,' DAQ mode ',DAQmode_cal
142 print*,' calibration run ',calibrationnumber
143 print*,' n. event used ',nused_event
144 print*,' <PED> ladder 1 ',ped_1
145 print*,' <PED> ladder 2 ',ped_2
146 print*,' <PED> ladder 3 ',ped_3
147 print*,' <SIG> ladder 1 ',sig_1
148 print*,' <SIG> ladder 2 ',sig_2
149 print*,' <SIG> ladder 3 ',sig_3
150 print*,' n.BAD ladder 1 ',nbad_1
151 print*,' n.BAD ladder 2 ',nbad_2
152 print*,' n.BAD ladder 3 ',nbad_3
153 print*,' error flag ',ff
154 if(nused_event.ne.0.or.ff.ne.0)then
155 print*,'*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*'
156 print*,'* !!! CALIBRATION FAILURE !!! *'
157 print*,'*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*'
158 endif
159
160
161 DAQmode(iview)=DAQmode_cal
162 DSPnumber(iview)=DSPnumber_cal
163 calibnumber(iview)=calibrationnumber
164 ncalib_event(iview)=nused_event
165 ped_l1(iview)=ped_1
166 ped_l2(iview)=ped_2
167 ped_l3(iview)=ped_3
168 sig_l1(iview)=sig_1
169 sig_l2(iview)=sig_2
170 sig_l3(iview)=sig_3
171 nbad_l1(iview)=nbad_1
172 nbad_l2(iview)=nbad_2
173 nbad_l3(iview)=nbad_3
174 cal_flag(iview)=ff
175
176 do is=1,nstrips_view
177 DSPbad_par(iview,is)=DSPbad_o(DSPnumber_cal,is)
178 DSPped_par(iview,is)=DSPped_o(DSPnumber_cal,is)
179 DSPsig_par(iview,is)=DSPsig_o(DSPnumber_cal,is)
180 enddo
181 c
182 trk_DSP_ok(DSPnumber_cal)=1
183 c----------------------------------------------------------
184 c NVIEWS calibration packets should have been found
185 c----------------------------------------------------------
186 c if(n_cal_pkt.eq.nviews)then
187 c found_cal_pkt = .true.
188 c n_cal_pkt = 0
189 c endif
190 2424 continue
191 enddo ! end loop on views (calibration pkt)
192 2222 continue
193
194 close (lun_pkt)
195
196 return
197 end
198
199 ***...***...***...***...***...***...***...***...***...***...***...***...***...***...***...***
200 *
201 *
202 *
203 *
204 *
205 *
206 *
207 *
208 ***...***...***...***...***...***...***...***...***...***...***...***...***...***...***...***
209
210 subroutine searchtrkheader(runerror,ffd)
211 C.............................................................
212 C Search for a valid tracker DSP header (=>one view)
213 C and return the type of header
214 C.............................................................
215
216 include '../commonyoda/commontracker.f'
217 include '../commonyoda/dataformat.f'
218
219 integer ffd !input file descriptor
220 integer runerror !readevent error flag
221
222 c--------------------------------------------------
223 c N.B.13 bit packing is done for each DSP header+datablock,
224 C so each DSP 13 bit
225 c first word starts at the beginnig of a 16 bit word
226 c--------------------------------------------------
227 9100 continue
228 runerror=0 !error flag initialization
229 checkheader=0
230
231 c--------------------------------------------------
232 c looks for a DSP header beginning
233 C (a word beginning with 1110)
234 c--------------------------------------------------
235 call findstart(runerror,ffd)
236
237 if(runerror.eq.1) goto 200
238 if(runerror.eq.-1)then
239 runerror=1 !in this case I dont want the
240 !the program to crash
241 goto 200
242 endif
243 c--------------------------------------------------
244 c the first word could be a DSP header first word:
245 C reads 13 8-bit words and
246 c writes them in 16 13-bit words to check for all
247 C DSP header features
248 c--------------------------------------------------
249 runerror=0
250
251 call hunpacker(header,runerror,ffd)
252
253 if(runerror.eq.1) goto 200
254 c if(runerror.eq.-1) goto 200
255 if(runerror.eq.-1)then
256 runerror=1 !in this case I dont want the
257 !the program to crash
258 goto 200
259 endif
260 c--------------------------------------------------
261 c extracts and controls header:
262 c--------------------------------------------------
263 C last header word must be:
264 c |0001|1100|0000|0000| for acquisition
265 c |0001|1111|1111|1111| for calibration
266 c--------------------------------------------------
267 if(iand(header(16),z'ffff').eq.z'1c00') then !last header
268 checkheader=2 ! event
269 elseif(iand(header(16),z'ffff').eq.z'1fff') then !last header
270 checkheader=3 ! calibration packet
271 else
272 checkheader=1 ! not a valid DSP header
273 endif
274 c--------------------------------------------------
275 c first header word must be:
276 c |0001|110x|xxxx|xxxx|
277 c--------------------------------------------------
278 if(iand(header(1),z'fe00').ne.z'1c00')
279 $ checkheader=1 !not a valid DSP header
280 c--------------------------------------------------
281 c intermediate header words must be:
282 c |0001|010x|xxxx|xxxx|
283 c--------------------------------------------------
284 do i=2,15
285 if(iand(header(i),z'fc00').ne.z'1400')
286 $ checkheader=1 !not a valid DSP header
287 enddo
288 c--------------------------------------------------
289 c if checkheader = 1
290 c then this is not a DSP header (or some
291 c noise lurks around) so go a word ahead and
292 c try again
293 c--------------------------------------------------
294 if(checkheader.eq.1) then
295 call skipbyte(ffd)
296 goto 9100
297 endif
298 200 continue
299 end
300
301 *.............................................................
302
303
304 *.............................................................
305
306 subroutine unpackcalibration(runerror,ffd)
307 *.............................................................
308 * decode calibration data
309 * header + data(PED SIG BAD) + trailer
310 *............................................................
311 include '../commonyoda/commontracker.f'
312 include '../commonyoda/dataformat.f'
313
314 integer ffd !input file descriptor
315 integer runerror !readevent error flag
316 c buffer temporanei
317 integer*2 templ(nstrips_ladder)
318 real*4 tempf(nstrips_ladder)
319
320
321 12 format(z4)
322
323 *-----------------------------------------------------------
324 * HEADER
325 * (N.B. during test 2003 the header of calibration packets
326 * was only partially filled)
327 *
328 * the following is the final calibration header
329 *-----------------------------------------------------------
330 DAQmode_cal = ishft(iand(header(1),z'03f0'),-4)
331 DSPnumber_cal = iand(header(1),z'000f')
332 dataword = ior(ishft(iand(header(2),z'03ff')
333 $ ,10),iand(header(3),z'03ff'))
334 c calibrationnumber = ior(ishft(iand(header(4)
335 c $ ,z'03ff'),10),iand(header(5),z'03ff'))
336 calibrationnumber = iand(header(4),z'03ff')
337 nused_event = iand(header(5),z'03ff')
338 ped_1 = iand(header(6),z'03ff')
339 ped_2 = iand(header(7),z'03ff')
340 ped_3 = iand(header(8),z'03ff')
341 ped_1 = ped_1 * 4
342 ped_2 = ped_2 * 4
343 ped_3 = ped_3 * 4
344 sig_1 = iand(header(9),z'03ff')
345 sig_2 = iand(header(10),z'03ff')
346 sig_3 = iand(header(11),z'03ff')
347 nbad_1 = iand(header(12),z'03ff')
348 nbad_2 = iand(header(13),z'03ff')
349 nbad_3 = iand(header(14),z'03ff')
350 ff = ishft(iand(header(15),z'0300'),-8)
351 checksum_cal = iand(header(15),z'00ff')
352
353 runerror=0
354 call readtrailer(trailer,runerror,ffd)
355 c$$$ do i=1,3
356 c$$$ write(*,12)trailer(i)
357 c$$$ enddo
358 c-----------------------------------------------------------
359 c the checksum is a 8-bit word calculated as the
360 c XOR of the 16-bit data words,
361 c hence the XOR between the two halfs
362 C----------------------------------------------------------
363 do il=1,3 !loop on ladders
364
365 call readped(tempf,runerror,ffd)
366 do is=1,nstrips_ladder
367 iss=is+nstrips_ladder*(il-1)
368 DSPped_o(DSPnumber_cal,iss)=tempf(is)
369 c print*,il,iss,DSPped_o(DSPnumber,iss)
370 c print *,DSPnumber_cal,iss,tempf(is)
371
372 enddo
373
374 call readsig(tempf,runerror,ffd)
375 do is=1,nstrips_ladder
376 iss=is+nstrips_ladder*(il-1)
377 DSPsig_o(DSPnumber_cal,iss)=tempf(is)
378 c print*,DSPsig_o(DSPnumber,iss)
379 enddo
380
381 call readbad(templ,runerror,ffd)
382 do is=1,nstrips_ladder
383 iss=is+nstrips_ladder*(il-1)
384 DSPbad_o(DSPnumber_cal,iss)=templ(is)
385 c print*,il,is,iss,DSPbad_o(DSPnumber,iss)
386 enddo
387
388 C//// CAPIRE PERCHE` NON C'E` LA PAROLA DI FINE LADDER \\\\
389 c call readeol(word,runerror,ffd)
390 11 format(i1,' ',z4)
391 c write(*,11)il,word
392 call readtrailer(trailer,runerror,ffd)
393 c$$$ do i=1,3
394 c$$$ write(*,12)trailer(i)
395 c$$$ enddo
396
397 c print*,'fine ladder' !???
398
399 enddo !end loop on ladders
400
401 return
402 end
403 *.............................................................
404
405
406 subroutine unpackdata(runerror,ffd)
407 *.............................................................
408 * decode event data
409 * header + data + trailer
410 *............................................................
411 include '../commonyoda/commontracker.f'
412 include '../commonyoda/dataformat.f'
413 include '../commonyoda/level0.f'
414
415 integer ffd !input file descriptor
416 integer runerror !readevent error flag
417 integer l_tra
418
419
420 12 format(z4)
421
422 *-----------------------------------------------------------
423 * HEADER
424 *-----------------------------------------------------------
425
426 DAQmode_dat = ishft(iand(header(1),z'03f0'),-4)
427 DSPnumber_dat = iand(header(1),z'000f')
428 C ------------------------------------------------------
429 c words 2 and 3 give tshe number of transmitted 16-bit
430 c words ( 13 header words + data )
431 c NB: data are packed from 13-bit to 16-bit words,
432 c so the stream is complited with zeros in order to have
433 c a number of bits multiple of 16
434 l_tra = ior(ishft(iand(header(2),z'03ff')
435 $ ,10),iand(header(3),z'03ff'))
436 l_tra=l_tra-13
437 C ------------------------------------------------------
438 eventn_dat = ior(ishft(iand(header(4),z'03ff')
439 $ ,10),iand(header(5),z'03ff'))
440 nclust_dat = ishft(iand(header(6),z'0380'),-7)
441 cutc_dat = ishft(iand(header(6),z'0070'),-4)
442 cutcl_dat = iand(header(6),z'000f')
443 addrcluster_dat(1) = iand(header(7),z'03ff')
444 signcluster_dat(1) = iand(header(8),z'03ff')
445 addrcluster_dat(2) = iand(header(9),z'03ff')
446 signcluster_dat(2) = iand(header(10),z'03ff')
447 addrcluster_dat(3) = iand(header(11),z'03ff')
448 signcluster_dat(3) = iand(header(12),z'03ff')
449 fc_dat = ishft(iand(header(13),z'0300'),-8)
450 compressiontime_dat = iand(header(13),z'00ff')
451 fl5_dat = ishft(iand(header(14),z'0300'),-8)
452 fl4_dat = ishft(iand(header(14),z'0300'),-6)
453 fl3_dat = ishft(iand(header(14),z'0300'),-4)
454 fl2_dat = ishft(iand(header(14),z'0300'),-2)
455 fl1_dat = iand(header(14),z'0300')
456 fl6_dat = ishft(iand(header(15),z'0300'),-8)
457 checksum_dat = iand(header(15),z'00ff')
458 c-----------------------------------------------------------
459 c the cheacksum is a 8-bit word calculated as the
460 c XOR of the 16-bit data words,
461 c hence the XOR between the two halfs
462 C----------------------------------------------------------
463 runerror=0
464 call dunpacker(l_tra,b_tra,runerror,ffd)
465 nqualcosa = (real(l_tra))/13*16
466 xx = b_tra(nqualcosa)
467 if (xx.eq.0) nqualcosa=nqualcosa -1
468 datalength_dat= nqualcosa
469 c$$$ TOTDATAlength = TOTDATAlength + datalength_dat
470 c$$$ do i=1,datalength_dat
471 c$$$ id = id + 1
472 c$$$ datatracker(id) = b_tra(i)
473 c$$$ enddo
474
475
476
477 11 format(i1,' ',z4)
478 c write(*,11)il,word
479 call readtrailer(trailer,runerror,ffd)
480 c$$$ do i=1,3
481 c$$$ write(*,12)trailer(i)
482 c$$$ enddo
483
484 ***************************************************************
485 * TRAILER *
486 ***************************************************************
487
488 pnum_dat=ishft(iand(trailer(1),z'f000'),-12)
489 cmdnum_dat=ishft(iand(trailer(1),z'0f00'),-8)
490 bid1_dat=ishft(iand(trailer(1),z'00c0'),-6)
491 bid2_dat=ishft(iand(trailer(1),z'0030'),-4)
492 bid3_dat=ishft(iand(trailer(1),z'000c'),-2)
493 bid4_dat=iand(trailer(1),z'0003')
494 bid5_dat=ishft(iand(trailer(2),z'c000'),-14)
495 bid6_dat=ishft(iand(trailer(2),z'3000'),-12)
496 bid7_dat=ishft(iand(trailer(2),z'0c00'),-10)
497 alarm_dat=ishft(iand(trailer(2),z'0300'),-8)
498 aswr_dat=ior(ishft(iand(trailer(2),z'00ff'),8)
499 $ ,ishft(iand(trailer(3),z'ff00'),-8))
500 crc_dat=iand(trailer(3),z'00ff')
501
502 bid_dat_sum = (bid1_dat + bid2_dat + bid3_dat + bid4_dat +
503 & bid5_dat + bid6_dat + bid7_dat)
504
505 bid_dat = bid_dat_sum/7
506
507 if (bid_dat.ne.1.and.bid_dat.ne.2) then
508 write(*,*) '*** *** *** *** *** *** *** *** *** ***'
509 write (*,*) 'unpack_data: TRAILER PACKET CORRUPTED'
510 write(*,*) '*** *** *** *** *** *** *** *** *** ***'
511 endif
512 if (mod(bid_dat_sum,7).ne.0) then
513 bid_dat = 0
514 write(*,*) '*** *** *** *** *** *** *** *** *** ***'
515 write (*,*) 'unpack_data: TRAILER PACKET CORRUPTED'
516 write(*,*) '*** *** *** *** *** *** *** *** *** ***'
517 endif
518
519 if (alarm_dat.eq.3) then
520 write(*,*) '*** *** *** *** *** *** *** *** *** ***'
521 write(*,*) 'unpack_data: AQUISITION ALARM'
522 write(*,*) '*** *** *** *** *** *** *** *** *** ***'
523
524 endif
525
526 if (alarm_dat.ne.3.and.alarm_dat.ne.0) then
527 write(*,*) '*** *** *** *** *** *** *** *** *** ***'
528 write(*,*) 'unpack_data: TRAILER PACKET CORRUPTED'
529 write(*,*) '*** *** *** *** *** *** *** *** *** ***'
530
531 endif
532
533
534 return
535 end
536
537
538 *.............................................................................
539 subroutine initlevel0
540
541 include '../commonyoda/level0.f'
542
543
544 do i=1, nviews
545
546 DAQmode(i) = 0
547 DSPnumber(i) = 0
548 eventn(i) = 0
549 nclust(i) = 0
550 cutc(i) = 0
551 cutcl(i) = 0
552 addrcluster(i,1) = 0
553 signcluster(i,1) = 0
554 addrcluster(i,2) = 0
555 signcluster(i,2) = 0
556 addrcluster(i,3) = 0
557 signcluster(i,3) = 0
558 fc(i) = 0
559 compressiontime(i) = 0
560 fl5(i) = 0
561 fl4(i) = 0
562 fl3(i) = 0
563 fl2(i) = 0
564 fl1(i) = 0
565 fl6(i) = 0
566 checksum(i) = 0
567 DATAlength(i) = 0
568 pnum(i)= 0
569 cmdnum(i)= 0
570 bid(i) = 1
571 alarm(i)= 0
572 aswr(i) = 0
573 enddo
574
575 TOTDATAlength = 0
576 good0=.true.
577
578 return
579 end
580
581
582 * *** *** *** *** *** *** *** *** ***
583 *
584 *
585 *
586 *
587 *
588 *
589 * *** *** *** *** *** *** *** *** ***
590 subroutine fillview(i)
591 c -----------------------------------------------------
592 c fill variables related to view i
593 c which will be stored in the level0 nt-ple
594 c at the end of loop on views
595 c ----------------------------------------------------
596
597 include '../commonyoda/commontracker.f'
598 include '../commonyoda/level0.f'
599 include '../commonyoda/dataformat.f'
600
601 DAQmode(i) = DAQmode_dat
602 DSPnumber(i) = DSPnumber_dat
603 eventn(i) = eventn_dat
604 nclust(i) = nclust_dat
605 cutc(i) = cutc_dat
606 cutcl(i) = cutcl_dat
607 addrcluster(i,1) = addrcluster_dat(1)
608 signcluster(i,1) = signcluster_dat(1)
609 addrcluster(i,2) = addrcluster_dat(2)
610 signcluster(i,2) = signcluster_dat(2)
611 addrcluster(i,3) = addrcluster_dat(3)
612 signcluster(i,3) = signcluster_dat(3)
613 fc(i) = fc_dat
614 compressiontime(i) = compressiontime_dat
615 fl5(i) = fl5_dat
616 fl4(i) = fl4_dat
617 fl3(i) = fl3_dat
618 fl2(i) = fl2_dat
619 fl1(i) = fl1_dat
620 fl6(i) = fl6_dat
621 checksum(i) = checksum_dat
622 DATAlength(i) = datalength_dat
623
624 c -----------------------------------------------------------------------
625 c filling TRAILER variables
626 c ----------------------------------------------------------------------
627
628 pnum(i)= pnum_dat
629 cmdnum(i)= cmdnum_dat
630 bid(i) = bid_dat
631 alarm(i)= alarm_dat
632 aswr(i) = aswr_dat
633
634 print*,'*-*-*-*-*-*-TRAILER-*-*-*-*-*-*'
635 print*,'* PNUM (periferal num) ',pnum_dat
636 print*,'* CMDNUM (command) ',cmdnum_dat
637 print*,'* BID (board id) ',bid_dat
638 print*,'* ALARM ',alarm_dat
639 print*,'*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*'
640
641 do idat=1,datalength_dat
642 id = TOTDATAlength + idat
643 datatracker(id) = b_tra(idat)
644 enddo
645 TOTDATAlength = TOTDATAlength + datalength_dat
646
647 return
648 end
649

  ViewVC Help
Powered by ViewVC 1.1.23