unsigned short int rt_yr
:5; /*Year - 1972 */
unsigned short int rt_dy
:5; /*day */
unsigned short int rt_mo
:5; /*month */
char rt_pad
; /*unusued */
char rt_stat
; /*Type of entry, or end of seg*/
unsigned short rt_name
[3]; /*Name, 3 words in rad50 form */
short rt_len
; /*Length of file */
char rt_chan
; /*Only used in temporary files*/
char rt_job
; /*Only used in temporary files*/
struct rt_dat rt_date
; /*Creation Date */
short rt_numseg
; /*number of segments available*/
short rt_nxtseg
; /*segment no of next log. seg */
short rt_lstseg
; /*highest seg currenltly open */
unsigned short rt_entpad
; /*extra words/dir. entry */
short rt_stfile
; /*block no where files begin */
struct rt_head rt_axhead
;
struct rt_ent rt_ents
[72];
extern struct rt_dir rt_dir
;
#define rt(p) ((struct rt_ent *) p )
#define flag(c) (flg[(c) - 'a'])
struct rt_dir rt_dir
= {{4,0,1,0,14},{0,RT_NULL
,{0,0,0},494,0}, {0,RT_ESEG
}};
struct rt_ent
*rt_curend
;
char *defdev
= "/dev/floppy";
int signum
[] = {SIGHUP
, SIGINT
, SIGQUIT
, 0};
if(signal(signum[i], SIG_IGN) != SIG_IGN)
signal(signum[i], sigdone);*/
for(cp
= argv
[1]; *cp
; cp
++)
#define SURE "Are you sure you want to clobber the floppy?\n"
tty
= open("/dev/tty",2);
write(tty
,SURE
,sizeof(SURE
));
fprintf(stderr
, "arff: bad option `%c'\n", *cp
);
fprintf(stderr
, "arff: one of [%s] must be specified\n", man
);
fprintf(stderr
, "arff: only one of [%s] allowed\n", man
);
printf("usage: ar [%s][%s] archive files ...\n", opt
, man
);
fprintf(stderr
, "arff: %s not found\n", namv
[i
]);
fprintf(stderr
, "arff: phase error on %s\n", file
);
if(c
!= 'c' || flg
['v'-'a'] > 1)
printf("%c - %s\n", c
, file
);
register struct rt_ent
*rde
;
for(de
=((char *)&rt_dir
)+10; de
<= rt_last
; de
+= rt_entsiz
) {
nleft
= (rt_last
- de
) / rt_entsiz
;
printf("\n\n%d entries remaining.\n",nleft
);
for(i
= 0; i
< namc
; i
++) {
if(dope
= lookup(namv
[i
])) {
register struct rt_ent
*de
;
unrad50(2,de
->rt_name
,name
);
unrad50(1,&(de
->rt_name
[2]),ext
);
year
= de
->rt_date
.rt_yr
+ 72;
month
= de
->rt_date
.rt_mo
;
printf("%6.6s %3.3s %02d/%02d/%02d %d\n",name
,
ext
,month
,day
,year
,de
->rt_len
);
printf("%-25.9s %d\n","<UNUSED>",de
->rt_len
);
sunrad50(name
,de
->rt_name
);
printf(name
);putchar('\n');
for(de
=((char *)&rt_dir
)+10; de
<= rt_last
; de
+= rt_entsiz
) {
sunrad50(name
,rt(de
)->rt_name
);
for(i
= 0; i
< namc
; i
++)
if(rtx(namv
[i
])==0) namv
[i
] = 0;
int file
; char buff
[512];
if(dope
= lookup(name
)) {
file
= creat(name
, 0666);
for( ; count
> 0 ; count
-= 512) {
if(flag('c') || flag('d') || flag('r'))
if((floppydes
= open(defdev
,mode
)) < 0)
dbprintf("Floppy open failed\n");
lread(6*RT_BLOCK
,2*RT_BLOCK
,(char *)&rt_dir
);
rt_entsiz
= 2*rt_dir
.rt_axhead
.rt_entpad
+ 14;
rt_last
= ((char *) &rt_dir
) + 10 + 1014/rt_entsiz
*rt_entsiz
;
for(de
=((char *)&rt_dir
)+10; de
<= rt_last
; de
+= rt_entsiz
) {
if(rt(de
)->rt_stat
==RT_ESEG
) break;
rt_nleft
= (rt_last
- de
) / rt_entsiz
;
* Search for name, accumulate blocks in index
for(de
= ((char *) &rt_dir
) + 10; de
<= rt_last
; de
+= rt_entsiz
) {
switch(rt(de
)->rt_stat
) {
if(samename(rname
,rt(de
)->rt_name
))
found
: result
.count
= rt(de
)->rt_len
* 512;
result
.startad
= 512 * (rt_dir
.rt_axhead
.rt_stfile
+ index
);
result
.rtdope
= (struct rt_ent
*) de
;
unsigned short a
[3],b
[3];
return( a
[0]==b
[0] && a
[1]==b
[1] && a
[2]==b
[2] );
register unsigned char *cp
;
for(index
= 0;*cp
; index
++) {
temp
= Ain1
* table
[*cp
++];
temp
+= Ain2
* table
[*cp
++];
register i
, temp
; register unsigned char *v
= (unsigned char *) val
;
for(i
= 0; i
< count
; i
++) {
reduce (*cp
++,temp
,Ain1
);
reduce (*cp
++,temp
,Ain2
);
register unsigned short *rname
;
register index
; register char *cp
;
while(cp
>= name
&& *--cp
!= '/');
if(*cp
=='.' || index
>=3) {
rad50((unsigned char *)file
,rname
);
rad50((unsigned char *)ext
,rname
+2);
unrad50(1,rname
+ 2,ext
);
/* Jam name and extension together with a dot
for(cp
= name
; *cp
++;);--cp
; while(*--cp
==' ' && cp
>=name
);
for(cp2
=ext
; *cp2
!=' ' && cp2
< ext
+ 3;) {
if(cp
[-1]=='.') cp
[-1] = 0;
static char *oval
= " ABCDEFGHIJKLMNOPQRSTUVWXYZ$.@0123456789";
static char *val
= " abcdefghijklmnopqrstuvwxyz$.@0123456789";
static char table
[256] = {
29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
0, 29, 29, 29, 27, 29, 29, 29, 29, 29, 29, 29, 29, 29, 28, 29,
30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 29, 29, 29, 29, 29, 29,
29, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 29, 29, 29, 29, 29,
29, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 29, 29, 29, 29, 29,
29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
0, 29, 29, 29, 27, 29, 29, 29, 29, 29, 29, 29, 29, 29, 28, 29,
30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 29, 29, 29, 29, 29, 29,
29, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 29, 29, 29, 29, 29,
29, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 29, 29, 29, 29 };
/* Logical to physical adress translation */
register int sector
, bytes
, track
;
sector
+= 26 + ((track
= (logical
/ 26)) - 1) * 6;
return( (((track
*26) + sector
) << 7) + bytes
);
lread(startad
,count
,obuff
)
while( (count
-= 128) >= 0) {
lseek(floppydes
, trans(startad
), 0);
read(floppydes
,obuff
,128);
while( (count
-= 512) >= 0) {
lseek(floppydes
,(long) (startad
), 0);
read(floppydes
,obuff
,512);
lwrite(startad
,count
,obuff
)
while( (count
-= 128) >= 0) {
lseek(floppydes
, trans(startad
), 0);
write(floppydes
,obuff
,128);
while( (count
-= 512) >= 0) {
lseek(floppydes
,(long) (startad
), 0);
write(floppydes
,obuff
,512);
for(i
= 0; i
< namc
; i
++)
if(rtr(namv
[i
])==0) namv
[i
]=0;
register FLDOPE
*dope
; register struct rt_ent
*de
;
struct stat buf
; register struct stat
*bufp
= &buf
;
if(stat(name
,bufp
)<0) return(1);
if(dope
= lookup(name
)) {
/* can replace, no problem */
if(bufp
->st_size
<= (de
->rt_len
* 512))
toflop(name
,bufp
->st_size
,dope
);
printf("%s will not fit in currently used file on floppy\n",name
);
/* Search for vacant spot */
for(de
= rt_dir
.rt_ents
; (char *) de
<= rt_last
; de
++) {
if(bufp
->st_size
<= (de
->rt_len
* 512)) {
found
: if(dope
=lookup(name
)) {
toflop(name
,bufp
->st_size
,dope
);
register struct rt_ent
*de
;
register struct stat
*bufp
;
struct tm
*localtime(); register struct tm
*timp
;
register struct rt_ent
*workp
; int count
;
count
= (((bufp
->st_size
-1) >>9) + 1);
/* Make sure there is room */
fprintf(stderr
,"Directory full on %s\n",defdev
);
/* copy directory entries up */
for(workp
= rt_curend
+1; workp
> de
; workp
--)
srad50(name
,de
->rt_name
);
timp
= localtime(&bufp
->st_mtime
);
de
->rt_date
.rt_dy
= timp
->tm_mday
+ 1;
de
->rt_date
.rt_mo
= timp
->tm_mon
+ 1;
de
->rt_date
.rt_yr
= timp
->tm_year
- 72;
lwrite(6*RT_BLOCK
,2*RT_BLOCK
,(char *)&rt_dir
);
register file
, n
, startad
= dope
->startad
, count
= ocount
;
printf("arff: couldn't open %s\n",name
);exit(1);}
for( ; count
>= 512; count
-= 512) {
lwrite(startad
,512,buff
);
for(n
= count
; n
< 512; n
++) buff
[n
] = 0;
lwrite(startad
,512,buff
);
count
= (dope
->rtdope
->rt_len
* 512 - ocount
) / 512 ;
for( ; count
> 0 ; count
--) {
lwrite(startad
,512,zeroes
);
for(i
= 0; i
< namc
; i
++)
if(rtk(namv
[i
])==0) namv
[i
]=0;
register struct rt_ent
*de
;
if(dope
= lookup(name
)) {
* ((unsigned short *) & (de
->rt_date
)) = 0;
register struct rt_ent
*de
= rt_dir
.rt_ents
, *workp
;
for(de
= rt_dir
.rt_ents
; de
<= rt_curend
; de
++) {
if(de
->rt_stat
==RT_NULL
&& de
[1].rt_stat
==RT_NULL
) {
(de
+1)->rt_len
+= de
->rt_len
;
for(workp
= de
; workp
< rt_curend
; workp
++)
lwrite(6*RT_BLOCK
,2*RT_BLOCK
,(char *)&rt_dir
);