Home
Manual
Packages
Global Index
Keywords
Quick Reference
|
/*
COPYB.I
Utility to copy binary files.
$Id: copyb.i,v 1.1 1993/08/27 18:50:06 munro Exp $
*/
/* Copyright (c) 1994. The Regents of the University of California.
All rights reserved. */
func copyb (src, dst, size=)
/* DOCUMENT copyb, src, dst
or copyb, openb(src_name), createb(dst_name)
Copy binary file SRC to binary file DST.
Check for "obsolete/" subdirectory of Yorick home directory for
extensions of the openb function to old file formats.
Use the size= keyword to specify a non-default (4 Mbyte) size for
the members of the output file family.
If you habitually include basfix.i, you may want to use the
basfix_openb function to open the src file.
SEE ALSO: openb, createb, open102, close102
*/
{
vars= get_vars(src);
/* sort the variables into order of increasing address */
addrs= get_addrs(src);
/* declare and copy non-record variables */
names= *vars(1);
n= numberof(names);
if (n) names= names(sort(*addrs(1)));
for (i=1 ; i<=n ; i++) {
name= names(i);
value= get_member(src, name);
add_variable, dst, -1, name, structof(value), dimsof(value);
get_member(dst, name)= value;
value= [];
}
names= *vars(2);
n= numberof(names);
if (n<1) return;
names= names(sort(*addrs(2)));
/* declare record variables */
add_record, dst;
if (size) set_filesize, dst, size;
for (i=1 ; i<=n ; i++) {
name= names(i);
add_variable, dst, -1, name, structof(get_member(src, name)), \
dimsof(get_member(src, name));
}
/* copy record variables for each record */
times= get_times(src);
ncycs= get_ncycs(src);
time= ncyc= [];
r= r0= 1;
while (jt(src,-)) ++r0;
while (jt(src)) {
if (!is_void(times)) time= times(r);
if (!is_void(ncycs)) ncyc= ncycs(r);
add_record, dst, time, ncyc, -1;
for (i=1 ; i<=n ; i++) {
name= names(i);
get_member(dst, name)= get_member(src, name);
}
r++;
}
if (r>1) jr, src, r0;
}
|