tomwalters@0
|
1 /*
|
tomwalters@0
|
2 bufframe.c shifting AIM output frame buffer.
|
tomwalters@0
|
3 ----------
|
tomwalters@0
|
4
|
tomwalters@0
|
5
|
tomwalters@0
|
6
|
tomwalters@0
|
7 Examples:
|
tomwalters@0
|
8
|
tomwalters@0
|
9 1. To convert gennap output to multiple animated frames:
|
tomwalters@0
|
10
|
tomwalters@0
|
11 gennap len=16ms display=off output=stdout file | \
|
tomwalters@0
|
12 bufframe width=8ms frstep=0.2ms anim=on > file.sai
|
tomwalters@0
|
13 gensai useprev=on top=1000 cegc -(for landscape plot)
|
tomwalters@0
|
14 genspl useprev=on top=1000 pensize=2 cegc -(for spiral plot)
|
tomwalters@0
|
15
|
tomwalters@0
|
16 (Note: spirals look better in a square box, so you might use options:
|
tomwalters@0
|
17 dencf=1 width=500 height=500 )
|
tomwalters@0
|
18
|
tomwalters@0
|
19 2. To view the basilar membrane from a cross section, animating the waves on it.
|
tomwalters@0
|
20
|
tomwalters@0
|
21 genbmm mincf=220 maxcf=660 len=8ms output=stdout display=off file | \
|
tomwalters@0
|
22 bufframe width=1p frstep=1p Tran=on display=on anim=on > foo.sai
|
tomwalters@0
|
23 gensai bott=-100 useprev=on mag=.2 foo
|
tomwalters@0
|
24
|
tomwalters@0
|
25 or:
|
tomwalters@0
|
26
|
tomwalters@0
|
27 genbmm mincf=220 maxcf=660 len=32ms output=stdout display=off file | \
|
tomwalters@0
|
28 bufframe width=1p frstep=1p Tran=on Header=off > foo
|
tomwalters@0
|
29
|
tomwalters@0
|
30 x11play -n75 -a500 foo
|
tomwalters@0
|
31
|
tomwalters@0
|
32 */
|
tomwalters@0
|
33
|
tomwalters@0
|
34
|
tomwalters@0
|
35
|
tomwalters@0
|
36 #include <stdio.h>
|
tomwalters@0
|
37 #include <math.h>
|
tomwalters@0
|
38 #include "header.h"
|
tomwalters@0
|
39 #include "options.h"
|
tomwalters@0
|
40 #include "units.h"
|
tomwalters@0
|
41 #include "strmatch.h"
|
tomwalters@0
|
42
|
tomwalters@0
|
43
|
tomwalters@0
|
44 char applic[] = "shifting AIM output frame buffer. " ;
|
tomwalters@0
|
45
|
tomwalters@0
|
46
|
tomwalters@0
|
47 static char *helpstr, *debugstr, *dispstr, *anistr, *transtr ;
|
tomwalters@0
|
48 static char *widthstr, *shiftstr, *headerstr, *framestr ;
|
tomwalters@0
|
49
|
tomwalters@0
|
50 static Options option[] = {
|
tomwalters@0
|
51 { "help" , "off" , &helpstr , "help" , DEBUG },
|
tomwalters@0
|
52 { "debug" , "off" , &debugstr , "debugging switch" , DEBUG },
|
tomwalters@0
|
53 { "width" , "32ms" , &widthstr , "Width of image frame." , VAL },
|
tomwalters@0
|
54 { "frstep" , "16ms" , &shiftstr , "Step between image frames." , VAL },
|
tomwalters@0
|
55 { "frames" , "min-max" , &framestr , "Select frames inclusively" , VAL },
|
tomwalters@0
|
56 { "Transpose" , "off" , &transtr , "Transpose image frames" , SETFLAG },
|
tomwalters@0
|
57 { "Header" , "on" , &headerstr , "Header (for gensai useprevious=on)." , VAL },
|
tomwalters@0
|
58 { "display" , "on" , &dispstr , "Display output image." , SETFLAG },
|
tomwalters@0
|
59 { "animate" , "off" , &anistr , "Animate cartoon." , SETFLAG },
|
tomwalters@0
|
60 ( char * ) 0 } ;
|
tomwalters@0
|
61
|
tomwalters@0
|
62
|
tomwalters@0
|
63 int frameheight, framewidth, frames, framebytes ;
|
tomwalters@0
|
64 int Newframeheight, Newframewidth, Newframes, Newframebytes ;
|
tomwalters@0
|
65
|
tomwalters@0
|
66 int rows, cols, numframes ;
|
tomwalters@0
|
67 int Newrows, Newcols, Newnumframes ;
|
tomwalters@0
|
68
|
tomwalters@0
|
69 int samplerate ;
|
tomwalters@0
|
70 int frstep ;
|
tomwalters@0
|
71 int application ;
|
tomwalters@0
|
72 int startbytes ;
|
tomwalters@0
|
73 int frshift ;
|
tomwalters@0
|
74 int Transpose ;
|
tomwalters@0
|
75
|
tomwalters@0
|
76 main(argc, argv)
|
tomwalters@0
|
77 int argc ;
|
tomwalters@0
|
78 char *argv[] ;
|
tomwalters@0
|
79 {
|
tomwalters@0
|
80 FILE *fp ;
|
tomwalters@0
|
81 char *header, *Header() ;
|
tomwalters@0
|
82 short *frame, *endframe ;
|
tomwalters@0
|
83 char *val1, *val2 ;
|
tomwalters@0
|
84 int i,j,k, a,b ;
|
tomwalters@0
|
85
|
tomwalters@0
|
86 fp = openopts( option,argc,argv ) ;
|
tomwalters@0
|
87 if ( !isoff( helpstr ) )
|
tomwalters@0
|
88 helpopts( helpstr, argv[0], applic, option ) ;
|
tomwalters@0
|
89
|
tomwalters@0
|
90 if ( ( header = ReadHeader( fp ) ) == (char *) 0 ) {
|
tomwalters@0
|
91 fprintf( stderr, "edframe: header not found\n" ) ;
|
tomwalters@0
|
92 exit( 1 ) ;
|
tomwalters@0
|
93 }
|
tomwalters@0
|
94 frameheight = HeaderInt( header, "frameheight" );
|
tomwalters@0
|
95 framewidth = HeaderInt( header, "framewidth" );
|
tomwalters@0
|
96 frames = HeaderInt( header, "frames" );
|
tomwalters@0
|
97 samplerate = HeaderSamplerate( header );
|
tomwalters@0
|
98
|
tomwalters@0
|
99 if ( ( application = Applic( header) ) < 0 ) {
|
tomwalters@0
|
100 fprintf(stderr,"bufframe: application name not found in header\n" ) ;
|
tomwalters@0
|
101 exit( 1 ) ;
|
tomwalters@0
|
102 }
|
tomwalters@0
|
103 if ( Format( application ) != NAP ) {
|
tomwalters@0
|
104 fprintf(stderr,"bufframe: buffer for %s format not implemented\n", gen_applics[application] ) ;
|
tomwalters@0
|
105 exit( 1 ) ;
|
tomwalters@0
|
106 }
|
tomwalters@0
|
107 frame_to_matrix( NAP, &rows, &cols, &numframes, frameheight, framewidth, frames ) ;
|
tomwalters@0
|
108
|
tomwalters@0
|
109 Transpose = ison( transtr ) ;
|
tomwalters@0
|
110 frstep = to_p( shiftstr, samplerate ) ;
|
tomwalters@0
|
111 Newrows = frameheight ;
|
tomwalters@0
|
112 Newcols = to_p( widthstr, samplerate ) ;
|
tomwalters@0
|
113 Newnumframes = ( cols - Newcols ) / frstep + 1 ; /* since: Newcols + ( Newnumframes - 1 ) * frstep <= cols */
|
tomwalters@0
|
114
|
tomwalters@0
|
115
|
tomwalters@0
|
116 /* Get limits on specified number of frames */
|
tomwalters@0
|
117
|
tomwalters@0
|
118 if ( getvals( framestr, &val1, &val2, "-" ) == BADVAL ) {
|
tomwalters@0
|
119 fprintf(stderr,"bufframe: bad frame selector [%s]\n", framestr ) ;
|
tomwalters@0
|
120 exit( 1 ) ;
|
tomwalters@0
|
121 }
|
tomwalters@0
|
122 if ( ismin( val1 ) ) a = 0 ;
|
tomwalters@0
|
123 else if ( ismax( val1 ) ) a = Newnumframes - 1 ;
|
tomwalters@0
|
124 else if ( Units( val1 ) ) a = (int)to_p( val1, samplerate ) / frstep ;
|
tomwalters@0
|
125 else a = atoi( val1 ) ;
|
tomwalters@0
|
126
|
tomwalters@0
|
127 if ( isempty( val2 ) ) b = a ;
|
tomwalters@0
|
128 else if ( ismin( val2 ) ) b = 0 ;
|
tomwalters@0
|
129 else if ( ismax( val2 ) ) b = Newnumframes - 1 ;
|
tomwalters@0
|
130 else if ( Units( val2 ) ) b = (int)to_p( val2, samplerate ) / frstep ;
|
tomwalters@0
|
131 else b = atoi( val2 ) ;
|
tomwalters@0
|
132
|
tomwalters@0
|
133 if (a<0 || b>=Newnumframes || a>b) {
|
tomwalters@0
|
134 if ( b>=Newnumframes ) fprintf(stderr,"bufframe: bad frame selector [%d frames needed but %d available]\n", b+1, Newnumframes );
|
tomwalters@0
|
135 else fprintf(stderr,"bufframe: bad frame selector \n" );
|
tomwalters@0
|
136 exit(1);
|
tomwalters@0
|
137 }
|
tomwalters@0
|
138
|
tomwalters@0
|
139 Newnumframes = b - a + 1 ;
|
tomwalters@0
|
140
|
tomwalters@0
|
141 framebytes = Newrows * ( Newcols + ( Newnumframes - 1 ) * frstep ) * sizeof(short) ;
|
tomwalters@0
|
142
|
tomwalters@0
|
143 if ( Transpose )
|
tomwalters@0
|
144 matrix_to_frame( SAI, Newcols, Newrows, Newnumframes, &Newframeheight, &Newframewidth, &Newframes ) ;
|
tomwalters@0
|
145 else
|
tomwalters@0
|
146 matrix_to_frame( SAI, Newrows, Newcols, Newnumframes, &Newframeheight, &Newframewidth, &Newframes ) ;
|
tomwalters@0
|
147
|
tomwalters@0
|
148 Newframebytes = Newframeheight * Newframewidth * sizeof(short) ;
|
tomwalters@0
|
149
|
tomwalters@0
|
150 if ( ison( headerstr ) )
|
tomwalters@0
|
151 WriteHeader( Header( header ), stdout ) ;
|
tomwalters@0
|
152
|
tomwalters@0
|
153
|
tomwalters@0
|
154 /* Allocate space for framebytes of data */
|
tomwalters@0
|
155
|
tomwalters@0
|
156 if ( ( frame = (short *)malloc( framebytes ) ) == NULL ) {
|
tomwalters@0
|
157 fprintf( stderr, "bufframe: malloc out of space\n" ) ;
|
tomwalters@0
|
158 exit( 1 ) ;
|
tomwalters@0
|
159 }
|
tomwalters@0
|
160
|
tomwalters@0
|
161 frshift = frstep * rows ;
|
tomwalters@0
|
162
|
tomwalters@0
|
163 /* Seek past `a' frames in blocks of framebytes */
|
tomwalters@0
|
164
|
tomwalters@0
|
165 startbytes = a * frshift * sizeof(short) ;
|
tomwalters@0
|
166 for (i=framebytes ; i < startbytes ; i += framebytes)
|
tomwalters@0
|
167 if ( fread( frame, framebytes, 1, fp ) == NULL ) {
|
tomwalters@0
|
168 fprintf(stderr,"bufframe: missing data after header\n");
|
tomwalters@0
|
169 exit(1);
|
tomwalters@0
|
170 }
|
tomwalters@0
|
171 if ( (startbytes -= (i - framebytes)) > 0 )
|
tomwalters@0
|
172 if ( fread( frame, startbytes, 1, fp ) == NULL ) {
|
tomwalters@0
|
173 fprintf(stderr,"bufframe: missing data after header\n");
|
tomwalters@0
|
174 exit(1);
|
tomwalters@0
|
175 }
|
tomwalters@0
|
176
|
tomwalters@0
|
177 /* Read framebytes of data */
|
tomwalters@0
|
178
|
tomwalters@0
|
179 if ( fread( frame, framebytes, 1, fp ) == NULL ) {
|
tomwalters@0
|
180 fprintf(stderr,"bufframe: insufficient data after header\n");
|
tomwalters@0
|
181 exit(1);
|
tomwalters@0
|
182 }
|
tomwalters@0
|
183 fclose( fp ) ;
|
tomwalters@0
|
184
|
tomwalters@0
|
185 endframe = frame + Newframes * frshift ;
|
tomwalters@0
|
186
|
tomwalters@0
|
187 fprintf(stderr,"bufframe: %d frames [height=%d width=%d]\n", Newnumframes, Newframeheight, Newframewidth );
|
tomwalters@0
|
188
|
tomwalters@0
|
189 if ( ison( debugstr ) ) {
|
tomwalters@0
|
190 fprintf( stderr," frameheight=%3d framewidth=%3d frames=%3d framebytes=%d\n", frameheight, framewidth, frames, framebytes ) ;
|
tomwalters@0
|
191 fprintf( stderr,"Newframeheight=%3d Newframewidth=%3d Newframes=%3d Newframebytes=%d\n", Newframeheight, Newframewidth, Newframes, Newframebytes ) ;
|
tomwalters@0
|
192 fprintf( stderr," rows=%3d cols=%3d numframes=%d\n", rows, cols, numframes ) ;
|
tomwalters@0
|
193 fprintf( stderr," Newrows=%3d Newcols=%3d Newnumframes=%d\n", Newrows, Newcols, Newnumframes ) ;
|
tomwalters@0
|
194 fprintf( stderr,"frstep=%d startbytes=%d frshift=%d\n", frstep, startbytes, frshift ) ;
|
tomwalters@0
|
195 exit( 1 ) ;
|
tomwalters@0
|
196 }
|
tomwalters@0
|
197
|
tomwalters@0
|
198 if ( Transpose ) {
|
tomwalters@0
|
199
|
tomwalters@0
|
200 for ( ; frame < endframe ; frame += frshift )
|
tomwalters@0
|
201 for ( j=0 ; j < Newcols ; j++ )
|
tomwalters@0
|
202 fwrite( frame + j*frameheight, sizeof(short), Newrows, stdout ) ;
|
tomwalters@0
|
203 }
|
tomwalters@0
|
204
|
tomwalters@0
|
205 else {
|
tomwalters@0
|
206 for ( ; frame < endframe ; frame += frshift )
|
tomwalters@0
|
207 for (j=0 ; j < Newrows ; j++)
|
tomwalters@0
|
208 for (k=0 , i=j ; k < Newcols ; k++, i+=frameheight)
|
tomwalters@0
|
209 fwrite( &frame[i], sizeof(short), 1, stdout );
|
tomwalters@0
|
210 }
|
tomwalters@0
|
211 fprintf(stderr,"bufframe: done\n" );
|
tomwalters@0
|
212 }
|
tomwalters@0
|
213
|
tomwalters@0
|
214
|
tomwalters@0
|
215
|
tomwalters@0
|
216 /* Return 1 if the str has appended units. Otherwise return 0. */
|
tomwalters@0
|
217 /* (A freqency specifier with no units is interpreted as a channel number) */
|
tomwalters@0
|
218
|
tomwalters@0
|
219 Units(str)
|
tomwalters@0
|
220 char *str ;
|
tomwalters@0
|
221 {
|
tomwalters@0
|
222 char *eptr = str + strlen( str ) ;
|
tomwalters@0
|
223
|
tomwalters@0
|
224 if( isdigit( *--eptr ) ) return 0 ; /* last char is digit, so no units */
|
tomwalters@0
|
225 else return 1 ;
|
tomwalters@0
|
226 }
|
tomwalters@0
|
227
|
tomwalters@0
|
228
|
tomwalters@0
|
229 /*
|
tomwalters@0
|
230 Copy the original (NAP format) header to a new sai header, changing in order:
|
tomwalters@0
|
231 frstep
|
tomwalters@0
|
232 frames
|
tomwalters@0
|
233 framewidth
|
tomwalters@0
|
234 frameheight
|
tomwalters@0
|
235 framebytes
|
tomwalters@0
|
236 animate
|
tomwalters@0
|
237 display
|
tomwalters@0
|
238 Copy application name "sai" into the version string.
|
tomwalters@0
|
239 Finally, update the new header_bytes, and return the new header.
|
tomwalters@0
|
240 */
|
tomwalters@0
|
241
|
tomwalters@0
|
242 char *Header( oldheader )
|
tomwalters@0
|
243 char *oldheader ;
|
tomwalters@0
|
244 {
|
tomwalters@0
|
245 char *saiheader;
|
tomwalters@0
|
246 char *p0, *p1, *p2, *s, str[64];
|
tomwalters@0
|
247
|
tomwalters@0
|
248 saiheader = (char *)malloc( strlen(oldheader) + 256 ) ;
|
tomwalters@0
|
249
|
tomwalters@0
|
250 p0 = saiheader ;
|
tomwalters@0
|
251 p1 = oldheader ;
|
tomwalters@0
|
252
|
tomwalters@0
|
253 /* copy to first item after the header_bytes */
|
tomwalters@0
|
254
|
tomwalters@0
|
255 p2 = HeaderString( oldheader , "header_bytes" ) ;
|
tomwalters@0
|
256 while( p1 < p2 )
|
tomwalters@0
|
257 *p0++ = *p1++ ;
|
tomwalters@0
|
258 while (*p1 != '\n')
|
tomwalters@0
|
259 *p0++ = *p1++ ;
|
tomwalters@0
|
260 *p0++ = *p1++;
|
tomwalters@0
|
261
|
tomwalters@0
|
262 /* insert frstep_aid at top of new header */
|
tomwalters@0
|
263
|
tomwalters@0
|
264 sprintf( str,"frstep_aid=%s\n", shiftstr ) ;
|
tomwalters@0
|
265 for (s = str ; *s != '\n' ; )
|
tomwalters@0
|
266 *p0++ = *s++;
|
tomwalters@0
|
267 *p0++ = *s;
|
tomwalters@0
|
268
|
tomwalters@0
|
269
|
tomwalters@0
|
270 /** copy up to channels_afb (if transpose changes apparent number of channels) **/
|
tomwalters@0
|
271
|
tomwalters@0
|
272 if ( Transpose ) {
|
tomwalters@0
|
273 p2 = HeaderString( oldheader , "channels_afb" ) ;
|
tomwalters@0
|
274 while( p1 < p2 )
|
tomwalters@0
|
275 *p0++ = *p1++ ;
|
tomwalters@0
|
276
|
tomwalters@0
|
277 sprintf(str,"%d\n", Newframeheight);
|
tomwalters@0
|
278 for (s = str ; *s != '\n' ; )
|
tomwalters@0
|
279 *p0++ = *s++;
|
tomwalters@0
|
280 *p0++ = *s;
|
tomwalters@0
|
281 while (*p1 != '\n')
|
tomwalters@0
|
282 *p1++;
|
tomwalters@0
|
283 *p1++;
|
tomwalters@0
|
284 }
|
tomwalters@0
|
285
|
tomwalters@0
|
286
|
tomwalters@0
|
287 /** copy up to frames **/
|
tomwalters@0
|
288
|
tomwalters@0
|
289 p2 = HeaderString( oldheader , "frames" ) ;
|
tomwalters@0
|
290 while( p1 < p2 )
|
tomwalters@0
|
291 *p0++ = *p1++ ;
|
tomwalters@0
|
292
|
tomwalters@0
|
293 sprintf(str,"%d\n", Newframes);
|
tomwalters@0
|
294 for (s = str ; *s != '\n' ; )
|
tomwalters@0
|
295 *p0++ = *s++;
|
tomwalters@0
|
296 *p0++ = *s;
|
tomwalters@0
|
297 while (*p1 != '\n')
|
tomwalters@0
|
298 *p1++;
|
tomwalters@0
|
299 *p1++;
|
tomwalters@0
|
300
|
tomwalters@0
|
301
|
tomwalters@0
|
302 /** copy up to framewidth **/
|
tomwalters@0
|
303
|
tomwalters@0
|
304 p2 = HeaderString( oldheader , "framewidth" ) ;
|
tomwalters@0
|
305 while ( p1 < p2 )
|
tomwalters@0
|
306 *p0++ = *p1++ ;
|
tomwalters@0
|
307
|
tomwalters@0
|
308 sprintf(str,"%d\n", Newframewidth);
|
tomwalters@0
|
309 for (s = str ; *s != '\n' ; )
|
tomwalters@0
|
310 *p0++ = *s++;
|
tomwalters@0
|
311 *p0++ = *s;
|
tomwalters@0
|
312 while (*p1 != '\n')
|
tomwalters@0
|
313 *p1++;
|
tomwalters@0
|
314 *p1++;
|
tomwalters@0
|
315
|
tomwalters@0
|
316
|
tomwalters@0
|
317 /** copy up to frameheight **/
|
tomwalters@0
|
318
|
tomwalters@0
|
319 p2 = HeaderString( oldheader , "frameheight" ) ;
|
tomwalters@0
|
320 while ( p1 < p2 )
|
tomwalters@0
|
321 *p0++ = *p1++ ;
|
tomwalters@0
|
322
|
tomwalters@0
|
323 sprintf(str,"%d\n", Newframeheight);
|
tomwalters@0
|
324 for (s = str ; *s != '\n' ; )
|
tomwalters@0
|
325 *p0++ = *s++;
|
tomwalters@0
|
326 *p0++ = *s;
|
tomwalters@0
|
327 while (*p1 != '\n')
|
tomwalters@0
|
328 *p1++;
|
tomwalters@0
|
329 *p1++;
|
tomwalters@0
|
330
|
tomwalters@0
|
331
|
tomwalters@0
|
332 /** copy up to framebytes **/
|
tomwalters@0
|
333
|
tomwalters@0
|
334 p2 = HeaderString( oldheader , "framebytes" ) ;
|
tomwalters@0
|
335 while ( p1 < p2 )
|
tomwalters@0
|
336 *p0++ = *p1++ ;
|
tomwalters@0
|
337
|
tomwalters@0
|
338 sprintf(str,"%d\n", Newframebytes);
|
tomwalters@0
|
339 for (s = str ; *s != '\n' ; )
|
tomwalters@0
|
340 *p0++ = *s++;
|
tomwalters@0
|
341 *p0++ = *s;
|
tomwalters@0
|
342 while (*p1 != '\n')
|
tomwalters@0
|
343 *p1++;
|
tomwalters@0
|
344 *p1++;
|
tomwalters@0
|
345
|
tomwalters@0
|
346
|
tomwalters@0
|
347 /** copy up to animate_ctn **/
|
tomwalters@0
|
348
|
tomwalters@0
|
349 p2 = HeaderString( oldheader , "animate_ctn" ) ;
|
tomwalters@0
|
350 while ( p1 < p2 )
|
tomwalters@0
|
351 *p0++ = *p1++ ;
|
tomwalters@0
|
352
|
tomwalters@0
|
353 sprintf(str,"%s\n", anistr );
|
tomwalters@0
|
354 for (s = str ; *s != '\n' ; )
|
tomwalters@0
|
355 *p0++ = *s++;
|
tomwalters@0
|
356 *p0++ = *s;
|
tomwalters@0
|
357 while (*p1 != '\n')
|
tomwalters@0
|
358 *p1++;
|
tomwalters@0
|
359 *p1++;
|
tomwalters@0
|
360
|
tomwalters@0
|
361
|
tomwalters@0
|
362 /** copy up to display **/
|
tomwalters@0
|
363
|
tomwalters@0
|
364 p2 = HeaderString( oldheader , "display" ) ;
|
tomwalters@0
|
365 while ( p1 < p2 )
|
tomwalters@0
|
366 *p0++ = *p1++ ;
|
tomwalters@0
|
367
|
tomwalters@0
|
368 sprintf(str,"%s\n", dispstr );
|
tomwalters@0
|
369 for (s = str ; *s != '\n' ; )
|
tomwalters@0
|
370 *p0++ = *s++;
|
tomwalters@0
|
371 *p0++ = *s;
|
tomwalters@0
|
372 while (*p1 != '\n')
|
tomwalters@0
|
373 *p1++;
|
tomwalters@0
|
374 *p1++;
|
tomwalters@0
|
375
|
tomwalters@0
|
376
|
tomwalters@0
|
377 /** copy rest of header **/
|
tomwalters@0
|
378
|
tomwalters@0
|
379 p2 = HeaderString( oldheader , "Version" ) ;
|
tomwalters@0
|
380 while ( p1 < p2 )
|
tomwalters@0
|
381 *p0++ = *p1++ ;
|
tomwalters@0
|
382
|
tomwalters@0
|
383 /** ( copy application name "sai" into header ) **/
|
tomwalters@0
|
384
|
tomwalters@0
|
385 if ( ( p2 = ApplicString( oldheader ) ) == (char *)0 ) {
|
tomwalters@0
|
386 fprintf(stderr,"bufframe: application name not found in header\n");
|
tomwalters@0
|
387 exit( 1 ) ;
|
tomwalters@0
|
388 }
|
tomwalters@0
|
389 while ( p1 < p2 )
|
tomwalters@0
|
390 *p0++ = *p1++ ;
|
tomwalters@0
|
391
|
tomwalters@0
|
392 *p0++ = 's' ; *p0++ = 'a' ; *p0++ = 'i' ;
|
tomwalters@0
|
393 p1 += 3 ;
|
tomwalters@0
|
394
|
tomwalters@0
|
395 while (*p1 != '\n')
|
tomwalters@0
|
396 *p0++ = *p1++ ;
|
tomwalters@0
|
397 *p0++ = *p1++ ;
|
tomwalters@0
|
398
|
tomwalters@0
|
399
|
tomwalters@0
|
400 /** update header_bytes **/
|
tomwalters@0
|
401
|
tomwalters@0
|
402 sprintf(str, "%0*d", 7, p0-saiheader);
|
tomwalters@0
|
403 p0 = HeaderString( saiheader , "header_bytes" ) ;
|
tomwalters@0
|
404 s = str;
|
tomwalters@0
|
405 while(*p0 != '\n')
|
tomwalters@0
|
406 *p0++ = *s++ ;
|
tomwalters@0
|
407
|
tomwalters@0
|
408
|
tomwalters@0
|
409 return saiheader;
|
tomwalters@0
|
410 }
|
tomwalters@0
|
411
|
tomwalters@0
|
412
|
tomwalters@0
|
413
|
tomwalters@0
|
414
|