Thread View: mod.protocols.appletalk
1 messages
1 total messages
Started by hedrick
Fri, 13 Mar 1987 09:01
Submission for mod-protocols-appletalk
Author: hedrick
Date: Fri, 13 Mar 1987 09:01
Date: Fri, 13 Mar 1987 09:01
376 lines
9848 bytes
9848 bytes
Path: topaz!hedrick
From: hedrick@topaz.RUTGERS.EDU (Charles Hedrick)
Newsgroups: mod.protocols.appletalk
Subject: CAP for Pyramid
Message-ID: <10071@topaz.RUTGERS.EDU>
Date: 13 Mar 87 09:00:59 GMT
Organization: Rutgers Univ., New Brunswick, N.J.
Lines: 367
We are currently using EFS and PAPIP on a Pyramid 98x, on an
experimental basis. I thought the results would be interesting
both to other Pyramid sites and people with other machines that
have alignment problems. There were two classes of problems:
1) alignment problems. On the Pyramid, 16 bit things must be on
16 bit boundaries and 32 bit things on 32 bit boundaries. I added
an ifdef pyr to handle alignment. Note that all routines must be
compiled with -q on the Pyramid. This causes fields to be allocated
as on the VAX. Otherwise padding bytes are added so that half words
and full words begin the right place. When -q is used, the compiler
compiles code to pull out individual bytes and put them together,
i.e. it handles alignment problems. A couple of patches were still
needed because of the use of casts in ways that fool the compiler.
In the process, I repaired some code that seemed to be an attempt
to fix alignment for the PC RT. If your machine does not have
the equivalent of Pyramid's -q, but does have alignment requirements,
porting this code is likely to be quite interesting.
2) a problem with finderInfo being used as both a struct name and
a field name. I assume this is really a Pyramid compiler bug, but
I'm not enough of a C expert to be sure.
*** abatp.c.ORIG Mon Jan 26 17:48:04 1987
--- abatp.c Tue Mar 10 23:36:56 1987
***************
*** 396,402
int len;
AddrBlock *addr;
{
! #ifdef sun
ATP catp; /* aligned copy of atp */
#endif
ATP *atp;
--- 396,402 -----
int len;
AddrBlock *addr;
{
! #if defined(sun) || defined (pyr)
ATP catp; /* aligned copy of atp */
#endif
ATP *atp;
***************
*** 407,413
if (len < atpSize || type != ddpATP)
return; /* drop it */
! #ifdef sun
bcopy(p, &catp, atpSize);
atp = &catp;
#else
--- 407,413 -----
if (len < atpSize || type != ddpATP)
return; /* drop it */
! #if defined(sun) || defined(pyr)
bcopy(p, &catp, atpSize);
atp = &catp;
#else
*** abddp.c.ORIG Mon Jan 26 17:48:12 1987
--- abddp.c Wed Mar 11 01:29:24 1987
***************
*** 160,165
word chksum;
#endif
#endif BBN
dpr = &abr->proto.ddp;
dstskt = htons(ddp2ipskt(dpr->ddpAddress.skt));
--- 160,166 -----
word chksum;
#endif
#endif BBN
+ struct in_addr d_addr;
dpr = &abr->proto.ddp;
dstskt = htons(ddp2ipskt(dpr->ddpAddress.skt));
***************
*** 192,198
desthost = ipaddr_src;
else
desthost = bridge_addr;
! return(abwrite(desthost, dstskt, iov, iovl));
}
/*ARGSUSED*/
--- 193,200 -----
desthost = ipaddr_src;
else
desthost = bridge_addr;
! d_addr.s_addr = desthost;
! return(abwrite(d_addr, dstskt, iov, iovl));
}
/*ARGSUSED*/
***************
*** 229,236
* DDPOpenSocket call.
*
*/
! #if defined(ibm032) /* rt */
! # define xddp(mem) ddp.mem
#else
# define xddp(mem) ddp->mem
#endif
--- 231,238 -----
* DDPOpenSocket call.
*
*/
! #if defined(ibm032) || defined(pyr) /* rt */
! # define xddp(mem) data.mem
#else
# define xddp(mem) ddp->mem
#endif
***************
*** 234,239
#else
# define xddp(mem) ddp->mem
#endif
ddp_protocol(ddp,len)
DDP *ddp;
int len;
--- 236,242 -----
#else
# define xddp(mem) ddp->mem
#endif
+
ddp_protocol(ddp,len)
DDP *ddp;
int len;
***************
*** 247,254
word chksum;
#endif
#endif DONT_DOCHKSUM
! #if defined(ibm032)
! DDP ddp;
#endif
#if defined(ibm032)
--- 250,257 -----
word chksum;
#endif
#endif DONT_DOCHKSUM
! #if defined(ibm032) || defined(pyr)
! DDP data;
#endif
#if defined(ibm032) || defined(pyr)
***************
*** 251,258
DDP ddp;
#endif
! #if defined(ibm032)
! bcopy(data, &ddp, ddpSize);
#endif
#ifndef DONT_DOCHKSUM
--- 254,261 -----
DDP data;
#endif
! #if defined(ibm032) || defined(pyr)
! bcopy(ddp, &data, ddpSize);
#endif
#ifndef DONT_DOCHKSUM
***************
*** 257,263
#ifndef DONT_DOCHKSUM
if (xddp(checksum) != 0) {
! ddp_chksum(&xddp(dstNet), len-4, 0, chksum);
if (chksum == 0) chksum = 0xffff;
if (ntohs(xddp(checksum)) != chksum) {
fprintf(stderr,"Checksum error: Incoming: %x, calculated %x [%d.%d]\n",
--- 260,266 -----
#ifndef DONT_DOCHKSUM
if (xddp(checksum) != 0) {
! ddp_chksum(&ddp->dstNet, len-4, 0, chksum);
if (chksum == 0) chksum = 0xffff;
if (ntohs(xddp(checksum)) != chksum) {
fprintf(stderr,"Checksum error: Incoming: %x, calculated %x [%d.%d]\n",
***************
*** 286,294
addr.net = xddp(srcNet);
addr.node = xddp(srcNode);
addr.skt = xddp(srcSkt);
- #if defined(ibm032)
- p = ((byte *) data)+ddpSize;
- #else
p = ((byte *) ddp)+ddpSize;
#endif rt
/* transfer to listener */
--- 289,294 -----
addr.net = xddp(srcNet);
addr.node = xddp(srcNode);
addr.skt = xddp(srcSkt);
p = ((byte *) ddp)+ddpSize;
/* transfer to listener */
(*ddpl[skt].lproc)(skt,xddp(type),p,len-ddpSize,&addr);
***************
*** 290,296
p = ((byte *) data)+ddpSize;
#else
p = ((byte *) ddp)+ddpSize;
- #endif rt
/* transfer to listener */
(*ddpl[skt].lproc)(skt,xddp(type),p,len-ddpSize,&addr);
}
--- 290,295 -----
addr.node = xddp(srcNode);
addr.skt = xddp(srcSkt);
p = ((byte *) ddp)+ddpSize;
/* transfer to listener */
(*ddpl[skt].lproc)(skt,xddp(type),p,len-ddpSize,&addr);
}
*** efs.h.ORIG Mon Mar 9 22:35:11 1987
--- efs.h Mon Mar 9 22:38:37 1987
***************
*** 24,30
long resEOF; /* l/p end of resource fork */
long mdDate; /* file modification date */
long crDate; /* file creation date */
! char finderInfo[16]; /* finder info */
char fName; /* length byte of file name */
};
#define FISIZE 33 /* size of above (avoid sizeof() problems) */
--- 24,30 -----
long resEOF; /* l/p end of resource fork */
long mdDate; /* file modification date */
long crDate; /* file creation date */
! char finderInfoData[16]; /* finder info */
char fName; /* length byte of file name */
};
#define FISIZE 33 /* size of above (avoid sizeof() problems) */
*** efsd.c.ORIG Mon Jan 26 17:49:24 1987
--- efsd.c Wed Mar 11 18:49:01 1987
***************
*** 1143,1148
kp->node = node;
}
#endif ONECHILD
/*
* addFileInfo - put information on a file in a FileInfo structure
*
--- 1143,1155 -----
kp->node = node;
}
#endif ONECHILD
+
+ #ifdef pyr
+ #define cplong(a,b) {long tmp=b; bcopy(&tmp, &a, 4);}
+ #else
+ #define cplong(a,b) a = b
+ #endif
+
/*
* addFileInfo - put information on a file in a FileInfo structure
*
***************
*** 1169,1175
bzero(fi, sizeof(*fi));
! if (read(fd, fi->finderInfo, sizeof(fi->finderInfo)) < 0) {
close(fd);
return(0);
}
--- 1176,1182 -----
bzero(fi, sizeof(*fi));
! if (read(fd, fi->finderInfoData, sizeof(fi->finderInfoData)) < 0) {
close(fd);
return(0);
}
***************
*** 1174,1180
return(0);
}
fstat(fd, &statb);
! fi->crDate = htonl(mac_date(statb.st_mtime));
close(fd);
strcpy(cp, ".DF");
--- 1181,1187 -----
return(0);
}
fstat(fd, &statb);
! cplong (fi->crDate, htonl(mac_date(statb.st_mtime)));
close(fd);
strcpy(cp, ".DF");
***************
*** 1180,1186
strcpy(cp, ".DF");
if (stat(fn, &statb) < 0)
return(0);
! fi->dataEOF = htonl(statb.st_size);
strcpy(cp, ".RF");
if (stat(fn, &statb) < 0)
--- 1187,1193 -----
strcpy(cp, ".DF");
if (stat(fn, &statb) < 0)
return(0);
! cplong (fi->dataEOF, htonl(statb.st_size));
strcpy(cp, ".RF");
if (stat(fn, &statb) < 0)
***************
*** 1185,1191
strcpy(cp, ".RF");
if (stat(fn, &statb) < 0)
return(0);
! fi->resEOF = htonl (statb.st_size);
fi->mdDate = htonl(mac_date(statb.st_mtime));
--- 1192,1198 -----
strcpy(cp, ".RF");
if (stat(fn, &statb) < 0)
return(0);
! cplong (fi->resEOF, htonl (statb.st_size));
cplong (fi->mdDate, htonl(mac_date(statb.st_mtime)));
***************
*** 1187,1193
return(0);
fi->resEOF = htonl (statb.st_size);
! fi->mdDate = htonl(mac_date(statb.st_mtime));
*cp = '\0'; /* remove extension from file name */
cp = &fi->fName + 1;
--- 1194,1200 -----
return(0);
cplong (fi->resEOF, htonl (statb.st_size));
! cplong (fi->mdDate, htonl(mac_date(statb.st_mtime)));
*cp = '\0'; /* remove extension from file name */
cp = &fi->fName + 1;
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads