This is afpudb.c in view mode; [Download] [Up]
/*
* $Author: cck $ $Date: 88/03/28 17:24:12 $
* $Header: afpudb.c,v 1.9 88/03/28 17:24:12 cck Rel $
* $Revision: 1.9 $
*/
/*
* afpudb.c - Appletalk Filing Protocol Unix Finder Information
* database.
*
* AppleTalk package for UNIX (4.2 BSD).
*
* Copyright (c) 1986, 1987, 1988 by The Trustees of Columbia University in the
* City of New York.
*
* Edit History:
*
* August 1987 CCKim Created.
*
*/
#include <stdio.h>
#include <sys/param.h>
#ifndef _TYPES
# include <sys/types.h>
#endif
#include <sys/file.h>
#include <sys/stat.h>
#include <netat/appletalk.h>
#include "afpudb.h"
#ifdef NEEDFCNTLDOTH
# include <fcntl.h>
#endif
#ifdef bsd
# define BSDSYSTEM
#endif
#ifdef bsd4_2
# define BSDSYSTEM
#endif
/*
* Deal with unix file types
*
*/
/* This is the "file" icon - generic for unix files */
private byte unix_text[] = {
0x0f,0xff,0xfc,0x00, /* XXXXXXXXXXXXXXXXXX */
0x08,0x00,0x06,0x00, /* X XX */
0x08,0x00,0x05,0x00, /* X X X */
0x08,0x00,0x04,0x80, /* X X X */
0x08,0x00,0x04,0x40, /* X X X */
0x08,0x0c,0x04,0x20, /* X XX X X */
0x09,0xf8,0x87,0xf0, /* X XXXXXX X XXXXXXX */
0x0b,0xf9,0xc0,0x10, /* X XXXXXXX XXX X */
0x08,0x9b,0xe0,0x10, /* X X XX XXXXX X */
0x09,0x29,0x84,0x50, /* X X X X XX X X X */
0x0b,0x29,0x84,0x50, /* X XX X X XX X X X */
0x0b,0x29,0x85,0x50, /* X XX X X XX X X X X */
0x0b,0x69,0x85,0x50, /* X XX XX X XX X X X X */
0x0b,0x69,0x85,0x50, /* X XX XX X XX X X X X */
0x0b,0x49,0x85,0x50, /* X XX X X XX X X X X */
0x0b,0x89,0x85,0x50, /* X XXX X XX X X X X */
0x09,0x8b,0xa5,0x10, /* X XX X XXX X X X X */
0x09,0xfe,0xc5,0x50, /* X XXXXXXXX XX X X X X */
0x08,0x7c,0xc0,0x10, /* X XXXXX XX X */
0x08,0x00,0x00,0x10, /* X X */
0x08,0x40,0x44,0x50, /* X X X X X X */
0x09,0x54,0x45,0x50, /* X X X X X X X X X X */
0x09,0x55,0x55,0x50, /* X X X X X X X X X X X X */
0x09,0x51,0x55,0x50, /* X X X X X X X X X X X */
0x09,0x55,0x55,0x50, /* X X X X X X X X X X X X */
0x09,0x55,0x55,0x50, /* X X X X X X X X X X X X */
0x09,0x15,0x14,0x50, /* X X X X X X X X X */
0x09,0x55,0x54,0x10, /* X X X X X X X X X X */
0x09,0x41,0x50,0x10, /* X X X X X X X */
0x08,0x00,0x00,0x10, /* X X */
0x08,0x00,0x00,0x10, /* X X */
0x0f,0xff,0xff,0xf0, /* XXXXXXXXXXXXXXXXXXXXXXXX */
/* mask */
0x0f,0xff,0xfc,0x00, /* XXXXXXXXXXXXXXXXXX */
0x0f,0xff,0xfe,0x00, /* XXXXXXXXXXXXXXXXXXX */
0x0f,0xff,0xff,0x00, /* XXXXXXXXXXXXXXXXXXXX */
0x0f,0xff,0xff,0x80, /* XXXXXXXXXXXXXXXXXXXXX */
0x0f,0xff,0xff,0xc0, /* XXXXXXXXXXXXXXXXXXXXXX */
0x0f,0xff,0xff,0xe0, /* XXXXXXXXXXXXXXXXXXXXXXX */
0x0f,0xff,0xff,0xf0, /* XXXXXXXXXXXXXXXXXXXXXXXX */
0x0f,0xff,0xff,0xf0, /* XXXXXXXXXXXXXXXXXXXXXXXX */
0x0f,0xff,0xff,0xf0, /* XXXXXXXXXXXXXXXXXXXXXXXX */
0x0f,0xff,0xff,0xf0, /* XXXXXXXXXXXXXXXXXXXXXXXX */
0x0f,0xff,0xff,0xf0, /* XXXXXXXXXXXXXXXXXXXXXXXX */
0x0f,0xff,0xff,0xf0, /* XXXXXXXXXXXXXXXXXXXXXXXX */
0x0f,0xff,0xff,0xf0, /* XXXXXXXXXXXXXXXXXXXXXXXX */
0x0f,0xff,0xff,0xf0, /* XXXXXXXXXXXXXXXXXXXXXXXX */
0x0f,0xff,0xff,0xf0, /* XXXXXXXXXXXXXXXXXXXXXXXX */
0x0f,0xff,0xff,0xf0, /* XXXXXXXXXXXXXXXXXXXXXXXX */
0x0f,0xff,0xff,0xf0, /* XXXXXXXXXXXXXXXXXXXXXXXX */
0x0f,0xff,0xff,0xf0, /* XXXXXXXXXXXXXXXXXXXXXXXX */
0x0f,0xff,0xff,0xf0, /* XXXXXXXXXXXXXXXXXXXXXXXX */
0x0f,0xff,0xff,0xf0, /* XXXXXXXXXXXXXXXXXXXXXXXX */
0x0f,0xff,0xff,0xf0, /* XXXXXXXXXXXXXXXXXXXXXXXX */
0x0f,0xff,0xff,0xf0, /* XXXXXXXXXXXXXXXXXXXXXXXX */
0x0f,0xff,0xff,0xf0, /* XXXXXXXXXXXXXXXXXXXXXXXX */
0x0f,0xff,0xff,0xf0, /* XXXXXXXXXXXXXXXXXXXXXXXX */
0x0f,0xff,0xff,0xf0, /* XXXXXXXXXXXXXXXXXXXXXXXX */
0x0f,0xff,0xff,0xf0, /* XXXXXXXXXXXXXXXXXXXXXXXX */
0x0f,0xff,0xff,0xf0, /* XXXXXXXXXXXXXXXXXXXXXXXX */
0x0f,0xff,0xff,0xf0, /* XXXXXXXXXXXXXXXXXXXXXXXX */
0x0f,0xff,0xff,0xf0, /* XXXXXXXXXXXXXXXXXXXXXXXX */
0x0f,0xff,0xff,0xf0, /* XXXXXXXXXXXXXXXXXXXXXXXX */
0x0f,0xff,0xff,0xf0, /* XXXXXXXXXXXXXXXXXXXXXXXX */
0x0f,0xff,0xff,0xf0 /* XXXXXXXXXXXXXXXXXXXXXXXX */
};
#ifdef SMART_UNIX_FINDERINFO
/* other icons */
#endif
#define FNDR_NOFNDR 0
#define FNDR_DEF 1
#define FNDR_DEVICE 2
#define FNDR_SOCKET 3
#ifdef SMART_UNIX_FINDERINFO
#define FNDR_BIN 4
#define FNDR_UPGM 5
#define FNDR_UOBJ 6
#define FNDR_ARCHIVE 7
#define FNDR_CPIO 8
#define FNDR_LOCKED 9
#endif
struct ufinderdb uf[] = {
#define deffinfo(c1,c2,c3,c4,com,icon) {{(c1),(c2),(c3),(c4)}, \
(com), sizeof(com)-1, \
(icon), sizeof((icon))}
{{0, 0, 0, 0}, ""},
deffinfo('T','E','X','T', "This is a Unix\252 created file", unix_text),
deffinfo('D','E','V',' ', "This is a Unix\252 device", NULL),
deffinfo('S','K','T',' ', "This is a Unix\252 socket", NULL),
#ifdef SMART_UNIX_FINDERINFO
deffinfo('D','A','T','A', "This is a Unix\252 binary file", NULL),
deffinfo('P','G','R','M', "This is a Unix\252 program", NULL),
deffinfo('O','B','J',' ', "This is a Unix\252 object file", NULL),
deffinfo('A','R',' ',' ', "This is a Unix\252 archive file", NULL),
deffinfo('C','P','I','O', "This is a Unix\252 cpio file", NULL),
deffinfo('L','C','K','D', "This file is not readable", NULL)
#endif
};
export int uf_len = sizeof(uf)/sizeof(struct ufinderdb);
int
os_getunixtype(path, stb)
char *path;
struct stat *stb;
{
#ifdef SMART_UNIX_FINDERINFO
char buf[BUFSIZ];
int i, fd;
#endif
if ((stb->st_mode & S_IFMT) == S_IFDIR) /* a directory? */
return(FNDR_NOFNDR);
switch (stb->st_mode & S_IFMT) {
case S_IFCHR:
case S_IFBLK:
/* super wanky thing to do would be to return an type */
/* based upon the device type */
return(FNDR_DEVICE);
break;
case S_IFSOCK:
return(FNDR_SOCKET);
break;
}
#ifdef SMART_UNIX_FINDERINFO
if ((fd=open(path,O_RDONLY)) < 0)
return(FNDR_DEF);
if ((i = read(fd, buf, BUFSIZ)) <= 0) {
(void)close(fd); /* ignore error here */
return(FNDR_DEF);
}
(void)close(fd); /* ignore error here */
switch (*(int *)buf) {
#ifdef BSDSYSTEM
case 0413:
case 0410:
case 0411:
case 0407:
return(FNDR_UPGM);
case 0177555:
case 0177545:
return(FNDR_ARCHIVE);
#endif
case 070707:
return(FNDR_CPIO);
}
#ifdef BSDSYSTEM
if (strncmp(buf, "!<arch>\n", sizeof("!<arch>\n")-1) == 0)
return(FNDR_ARCHIVE);
#endif
#ifndef BIN_FUZZ
# define BIN_FUZZ BUFSIZ/2
#endif
for (i = 0; i < BIN_FUZZ; i++)
if (buf[i] & 0x80)
return(FNDR_BIN);
#endif
return(FNDR_DEF);
}
int
os_issmartunixfi()
{
#ifdef SMART_UNIX_FINDERINFO
return(1);
#else
return(0);
#endif
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.