static char *sccsid
= "@(#)ar11.c 4.2 (Berkeley) %G%";
/* ar11 - archiver for PDP-11 formatted archives */
#define ARMAG -155 /* 017545 */
char *man
= { "mrxtdp" };
char *opt
= { "uvnbai" };
int signum
[] = {SIGHUP
, SIGINT
, SIGQUIT
, 0};
if(signal(signum
[i
], SIG_IGN
) != SIG_IGN
)
signal(signum
[i
], sigdone
);
for(cp
= argv
[1]; *cp
; cp
++)
fprintf(stderr
, "ar11: bad option `%c'\n", *cp
);
if(flg
['a'-'a'] || flg
['b'-'a']) {
fprintf(stderr
, "ar11: one of [%s] must be specified\n", man
);
fprintf(stderr
, "ar11: only one of [%s] allowed\n", man
);
if(getaf() && flg
['c'-'a']==0) {
fprintf(stderr
, "ar11: %s does not exist\n", arnam
);
if(namc
== 0 || match()) {
fprintf(stderr
, "ar11: cannot open %s\n", file
);
if(stbuf
.st_mtime
<= ar_date
) {
copyfil(af
, -1, IODD
+SKIP
);
copyfil(af
, tf
, IODD
+OODD
+HEAD
);
copyfil(af
, -1, IODD
+SKIP
);
copyfil(af
, tf
, IODD
+OODD
+HEAD
);
if(namc
== 0 || match()) {
f
= creat(file
, arbuf
.ar_mode
& 0777);
fprintf(stderr
, "ar11: %s cannot create\n", file
);
copyfil(af
, -1, IODD
+SKIP
);
if(namc
== 0 || match()) {
printf("\n<%s>\n\n", file
);
copyfil(af
, -1, IODD
+SKIP
);
tf2nam
= mktemp("/tmp/v2XXXXX");
close(creat(tf2nam
, 0600));
fprintf(stderr
, "ar11: cannot create third temp\n");
copyfil(af
, tf2
, IODD
+OODD
+HEAD
);
copyfil(af
, tf
, IODD
+OODD
+HEAD
);
if(namc
== 0 || match()) {
printf("%s\n", trim(file
));
copyfil(af
, -1, IODD
+SKIP
);
static short mbuf
= ARMAG
;
tfnam
= mktemp("/tmp/vXXXXX");
close(creat(tfnam
, 0600));
fprintf(stderr
, "ar11: cannot create temp file\n");
if (write(tf
, (char *)&mbuf
, sizeof(short)) != sizeof(short))
if (read(af
, (char *)&mbuf
, sizeof(short)) != sizeof(short) || mbuf
!=ARMAG
) {
fprintf(stderr
, "ar11: %s not in PDP-11 archive format\n", arnam
);
printf("usage: ar11 [%s][%s] archive files ...\n", opt
, man
);
fprintf(stderr
, "ar11: %s does not exist\n", arnam
);
fprintf(stderr
, "ar11: %s not found\n", namv
[i
]);
fprintf(stderr
, "ar11: %s cannot open\n", file
);
signal(signum
[i
], (int (*)())1);
fprintf(stderr
, "ar11: cannot create %s\n", arnam
);
while((i
= read(tf
, buf
, 512)) > 0)
if (write(af
, buf
, i
) != i
)
while((i
= read(tf2
, buf
, 512)) > 0)
if (write(af
, buf
, i
) != i
)
while((i
= read(tf1
, buf
, 512)) > 0)
if (write(af
, buf
, i
) != i
)
* into the temporary file
if(arbuf
.ar_name
[i
] = *cp
)
ar_size
= x
.w1
= stbuf
.st_size
;
arbuf
.ar_uid
= stbuf
.st_uid
;
arbuf
.ar_gid
= stbuf
.st_gid
;
arbuf
.ar_mode
= stbuf
.st_mode
;
copyfil(f
, tf
, OODD
+HEAD
);
if(fstat(f
, &stbuf
) < 0) {
if (write(fo
, (char *)&arbuf
, sizeof arbuf
) != sizeof arbuf
)
if(read(fi
, buf
, i
) != i
)
if (write(fo
, buf
, o
) != o
)
i
= read(af
, (char *)&arbuf
, sizeof arbuf
);
name
[i
] = arbuf
.ar_name
[i
];
ar_date
= swap(&arbuf
.ar_date1
);
ar_size
= swap(&arbuf
.ar_size1
);
if(strcmp(trim(namv
[i
]), file
) == 0) {
if(strcmp(file
, ponam
) != 0)
tf1nam
= mktemp("/tmp/v1XXXXX");
close(creat(tf1nam
, 0600));
fprintf(stderr
, "ar11: cannot create second temp\n");
fprintf(stderr
, "ar11: phase error on %s\n", file
);
if(c
!= 'c' || flg
['v'-'a'] > 1)
printf("%c - %s\n", c
, file
);
printf("%3d/%1d", arbuf
.ar_uid
, arbuf
.ar_gid
);
printf(" %-12.12s %-4.4s ", cp
+4, cp
+20);
int m1
[] = { 1, ROWN
, 'r', '-' };
int m2
[] = { 1, WOWN
, 'w', '-' };
int m3
[] = { 2, SUID
, 's', XOWN
, 'x', '-' };
int m4
[] = { 1, RGRP
, 'r', '-' };
int m5
[] = { 1, WGRP
, 'w', '-' };
int m6
[] = { 2, SGID
, 's', XGRP
, 'x', '-' };
int m7
[] = { 1, ROTH
, 'r', '-' };
int m8
[] = { 1, WOTH
, 'w', '-' };
int m9
[] = { 2, STXT
, 't', XOTH
, 'x', '-' };
int *m
[] = { m1
, m2
, m3
, m4
, m5
, m6
, m7
, m8
, m9
};
for (mp
= &m
[0]; mp
< &m
[9];)
while (--n
>=0 && (arbuf
.ar_mode
&*ap
++)==0)
perror("ar write error");
x
.h1
= ((struct fun
*)word
)->h2
;
x
.h2
= ((struct fun
*)word
)->h1
;