mirror of
https://github.com/GnoConsortium/gno.git
synced 2024-06-11 09:29:27 +00:00
Describe (and related utils), version 1.0.1. Like v1.0, this checkin
does not include resource forks. See the README for changes. This update by Devin Reade.
This commit is contained in:
parent
effd236a58
commit
3a79f5a3a6
125
usr.orca.bin/describe/README
Normal file
125
usr.orca.bin/describe/README
Normal file
|
@ -0,0 +1,125 @@
|
||||||
|
$Id: README,v 1.1 1996/01/22 01:37:59 gdr Exp $
|
||||||
|
|
||||||
|
This is the README file for the describe package. This package is
|
||||||
|
designated as version 1.0.1, and consists of the following utilities:
|
||||||
|
|
||||||
|
describe v1.0.1 - show database entries describing the current
|
||||||
|
status of programs
|
||||||
|
|
||||||
|
descc v1.0.1 - the describe source compiler
|
||||||
|
|
||||||
|
descu v1.0 - the describe source updater
|
||||||
|
|
||||||
|
ABOUT DESCRIBE AND DESCC
|
||||||
|
========================
|
||||||
|
|
||||||
|
This is yet another project I've been sitting on for a while, but have
|
||||||
|
finally decided to release. The basic idea of the 'describe' package
|
||||||
|
(the descc "compiler" and describe itself) is to provide a quick, easy
|
||||||
|
way of accessing information related to the utilities which so many
|
||||||
|
different people are releasing these days. The reason it sat around on
|
||||||
|
my harddrive so long is I was having qualms about its designated role in
|
||||||
|
life. I wasn't sure exactly what I wanted it to do. Well, I've decided
|
||||||
|
to KISS for now: descc simply compiles the utility list, which I maintain,
|
||||||
|
into a (very) simple "database" located in /usr/local/lib/. The companion
|
||||||
|
utility 'describe' is used to fetch information about a particular utility
|
||||||
|
from this "database".
|
||||||
|
|
||||||
|
descc is fairly limited, as is the "database" format itself. Part of the
|
||||||
|
KISS (or it wouldn't be out now) design philosophy ;). Usage is simple:
|
||||||
|
when you get a new listing (I'll provide monthly updates), simply "descc
|
||||||
|
<filename>" where <filename> is the name of the newly released update.
|
||||||
|
descc will simply write over the old database and replace it with the
|
||||||
|
new. (Note: No appendages are allowed by descc. See descu.)
|
||||||
|
|
||||||
|
As always, coments are appreciated. And, moreso than on other projects,
|
||||||
|
I'd appreciate some comments about the direction I'm going in, suggestions
|
||||||
|
as to where to take this, etc. I have a feeling that some fields in the
|
||||||
|
format (eg, FTP:) are rather useless, and I'd like to know what you guys
|
||||||
|
out there think.
|
||||||
|
|
||||||
|
James Brookes
|
||||||
|
jamesb@ecst.csuchico.edu
|
||||||
|
|
||||||
|
ABOUT DESCU
|
||||||
|
===========
|
||||||
|
|
||||||
|
I think describe and descc were really good ideas; they sure beat the
|
||||||
|
text file list of Gno utilities that James used to keep. The one major
|
||||||
|
shortfall I found was having to manually update the describe database
|
||||||
|
source every time I wanted to include a new entry.
|
||||||
|
|
||||||
|
I therefore wrote descu, the describe updater, which is also rather
|
||||||
|
limited due to following the KISS principle.
|
||||||
|
|
||||||
|
For completeness, I have also added the man pages describe.1, descc.8,
|
||||||
|
and descu.8. I briefly pondered having a describe.5, but alas I was too
|
||||||
|
lazy; you can find the file formats as part of descc.8.
|
||||||
|
|
||||||
|
Devin Reade
|
||||||
|
gdr@myrias.ab.ca
|
||||||
|
|
||||||
|
INSTALLATION
|
||||||
|
============
|
||||||
|
|
||||||
|
You can either type "dmake install", or do the following:
|
||||||
|
|
||||||
|
mkdir -p /usr/local/lib
|
||||||
|
cp ./describe /usr/local/bin
|
||||||
|
cp ./descc /usr/sbin
|
||||||
|
cp ./descu /usr/sbin
|
||||||
|
rm /usr/local/bin/descc
|
||||||
|
|
||||||
|
You will also want to do the following, which is NOT done by dmake's
|
||||||
|
install target:
|
||||||
|
|
||||||
|
rehash
|
||||||
|
descc ./describe.source
|
||||||
|
|
||||||
|
CHANGES
|
||||||
|
=======
|
||||||
|
|
||||||
|
This details changes to the entire distribution.
|
||||||
|
|
||||||
|
v1.1 May 1995
|
||||||
|
Initial release for descu.
|
||||||
|
Added -h and -v flags to describe and descc.
|
||||||
|
Common defines and typedefs were extracted to desc.h.
|
||||||
|
Descc now exits -1 on failure (vice 0).
|
||||||
|
In descc, some more error checking and flushing were added. Also,
|
||||||
|
mygets wasn't dereferencing one of its arguments properly.
|
||||||
|
Allocated stack size was increased from 512 to 768 bytes.
|
||||||
|
Describe and descc were modified not to be dependant on the size
|
||||||
|
of integers.
|
||||||
|
Ran source files through indent(1).
|
||||||
|
|
||||||
|
v1.0 Feb 1994
|
||||||
|
Initial release for describe and descc.
|
||||||
|
|
||||||
|
AUTHORS
|
||||||
|
=======
|
||||||
|
|
||||||
|
The original describe and descc utilities and the describe format were
|
||||||
|
written by James Brookes <jamesb@ecst.csuchico.edu>.
|
||||||
|
|
||||||
|
The descu utility and v1.1 modifications to describe and descc were by
|
||||||
|
Devin Reade <gdr@myrias.ab.ca>.
|
||||||
|
|
||||||
|
LEGALESE
|
||||||
|
========
|
||||||
|
|
||||||
|
The describe and descc utilities are copyright (c) 1994-1995 by James
|
||||||
|
Brookes. The descu utility is copyright (c) 1995 by Devin Reade.
|
||||||
|
|
||||||
|
These programs may be freely copied provided that the archive, including
|
||||||
|
source files and this README, remain intact. Modified versions of these
|
||||||
|
programs may not be distributed without the permission of the respective
|
||||||
|
authors.
|
||||||
|
|
||||||
|
Contact the respective authors for permission to include these programs on
|
||||||
|
any commercial software collections. Permission is granted to Usenet sites
|
||||||
|
and GEnie Information Services for inclusion in software archives.
|
||||||
|
|
||||||
|
The Apple IIGS executable files distributed with this archive contain
|
||||||
|
material from the ORCA/C Run-Time Libraries, copyright 1987-1995 by
|
||||||
|
Byte Works, Inc. Used with permission.
|
|
@ -1,20 +0,0 @@
|
||||||
About Me
|
|
||||||
~~~~~~~~~
|
|
||||||
Um. Not much to say right now. I'll get back to this part later.
|
|
||||||
|
|
||||||
About My Source
|
|
||||||
~~~~~~~~~~~~~~~
|
|
||||||
I guess I used to feel a bit propriatary about it, but a couple of things
|
|
||||||
have caused me to change my mind:
|
|
||||||
|
|
||||||
1) Losing over half of the eps source, may it rest in peace.
|
|
||||||
2) Yes, people can profit by and sometimes even improve (gasp!) my
|
|
||||||
source. And I'd be a grumpy old coot if I didn't let them.
|
|
||||||
|
|
||||||
So what this means is that most (not all) of my stuff will be released
|
|
||||||
with full source from now henceforth. I only ask of you, the humble masses
|
|
||||||
yearning to be free, please don't distribute modified versions of my programs
|
|
||||||
without first contacting me. I think this is only fair.
|
|
||||||
|
|
||||||
James Brookes
|
|
||||||
jamesb@ecst.csuchico.edu
|
|
30
usr.orca.bin/describe/basename.c
Normal file
30
usr.orca.bin/describe/basename.c
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
#pragma optimize -1
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
char *basename (char *name) {
|
||||||
|
char *p, brk;
|
||||||
|
|
||||||
|
/* checking for ':' is GS-specific */
|
||||||
|
brk = (strchr(name,':')) ? ':' : '/';
|
||||||
|
p = strrchr(name,brk);
|
||||||
|
|
||||||
|
return ((p) ? p+1 : name);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef SHELLCOMD
|
||||||
|
|
||||||
|
int main (int argc, char **argv) {
|
||||||
|
|
||||||
|
if (argc != 2) {
|
||||||
|
fprintf(stderr,"Usage: basename file_name\nVersion 1.0\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
printf("%s\n",basename(argv[1]));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* SHELLCOMD */
|
52
usr.orca.bin/describe/desc.h
Normal file
52
usr.orca.bin/describe/desc.h
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
/*
|
||||||
|
* Header file for the describe package. This file is
|
||||||
|
* used by describe(1), descc(8), and descu(8).
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define QUOTE_CHAR '#'
|
||||||
|
#define DATABASE "/usr/local/lib/describe"
|
||||||
|
|
||||||
|
#define FIELD_LEN 9
|
||||||
|
#define NAME_LEN 34
|
||||||
|
#define MAX_LINE_LENGTH 81
|
||||||
|
#define FIELD_COUNT 6 /* number of fields below, not including comments */
|
||||||
|
|
||||||
|
#define NAME "Name: "
|
||||||
|
#define VERSION "Version: "
|
||||||
|
#define AUTHOR "Author: "
|
||||||
|
#define CONTACT "Contact: "
|
||||||
|
#define WHERE "Where: "
|
||||||
|
#define FTP "FTP: "
|
||||||
|
|
||||||
|
#define NAME_SHORT "Name:"
|
||||||
|
#define VERSION_SHORT "Version:"
|
||||||
|
#define AUTHOR_SHORT "Author:"
|
||||||
|
#define CONTACT_SHORT "Contact:"
|
||||||
|
#define WHERE_SHORT "Where:"
|
||||||
|
#define FTP_SHORT "FTP:"
|
||||||
|
|
||||||
|
#ifndef FALSE
|
||||||
|
# define FALSE 0
|
||||||
|
# define TRUE 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef short int2;
|
||||||
|
typedef long int4;
|
||||||
|
|
||||||
|
typedef struct nameEntry_tag {
|
||||||
|
char name[NAME_LEN];
|
||||||
|
long int offset;
|
||||||
|
} nameEntry;
|
||||||
|
|
||||||
|
typedef struct descEntryTag {
|
||||||
|
char *name;
|
||||||
|
char *data;
|
||||||
|
} descEntry;
|
||||||
|
|
||||||
|
extern int optind;
|
||||||
|
extern char *optarg;
|
||||||
|
|
||||||
|
/* extern int getopt_restart(void); */
|
||||||
|
extern void begin_stack_check(void);
|
||||||
|
extern int end_stack_check(void);
|
||||||
|
extern char *basename(char *);
|
86
usr.orca.bin/describe/descc.8
Normal file
86
usr.orca.bin/describe/descc.8
Normal file
|
@ -0,0 +1,86 @@
|
||||||
|
.TH DESCC 8 "System Administration" "7 May 1995" "Version 1.0.1"
|
||||||
|
.SH NAME
|
||||||
|
descc \- the describe(1) source compiler
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.BR descc " [" -hV ]
|
||||||
|
.I sourcefile
|
||||||
|
.SH DESCRIPTION
|
||||||
|
.BR descc
|
||||||
|
compiles the describe source file
|
||||||
|
.I sourcefile
|
||||||
|
and saves the result to the system describe database.
|
||||||
|
.SH OPTIONS
|
||||||
|
.nf
|
||||||
|
\fB-h\fR Show usage information.
|
||||||
|
|
||||||
|
\fB-V\fR Show version information.
|
||||||
|
.fi
|
||||||
|
.SH "FILE FORMATS"
|
||||||
|
The describe source file consists of comments and records. A comment
|
||||||
|
is any line starting with the
|
||||||
|
.BR #
|
||||||
|
character. Each record consists of seven fields. The first
|
||||||
|
six consist of one line of text and begin with the following identifiers:
|
||||||
|
.nf
|
||||||
|
|
||||||
|
Name: (The name of the program.)
|
||||||
|
Version: (The current version number.)
|
||||||
|
Author: (The author or maintainer of the program.)
|
||||||
|
Contact: (How to contact the Author, typically an
|
||||||
|
email address.)
|
||||||
|
Where: (Where the program should be installed.)
|
||||||
|
FTP: (An ftp site from which the program may be
|
||||||
|
obtained.)
|
||||||
|
|
||||||
|
.fi
|
||||||
|
The last field consists of multiple lines of text. It should be
|
||||||
|
a brief description of the program. The following is an example of
|
||||||
|
a complete record:
|
||||||
|
.nf
|
||||||
|
|
||||||
|
Name: descc
|
||||||
|
Version: 1.0.1
|
||||||
|
Author: James Brookes
|
||||||
|
Contact: jamesb@ecst.csuchico.edu
|
||||||
|
Where: /usr/local/bin
|
||||||
|
FTP: ftp.cco.caltech.edu
|
||||||
|
|
||||||
|
Print a multi-line description obtained from the compiled
|
||||||
|
'describe' database; giving utility name, version, author,
|
||||||
|
author's contact, where the utility is, as well as where the
|
||||||
|
utility can be FTPd from on the InterNet.
|
||||||
|
|
||||||
|
.fi
|
||||||
|
.LP
|
||||||
|
The describe database file consists of a
|
||||||
|
.BR Header ,
|
||||||
|
a set of
|
||||||
|
.BR "Name Entries" ,
|
||||||
|
and a set of
|
||||||
|
.BR Records ,
|
||||||
|
in the following format:
|
||||||
|
.nf
|
||||||
|
|
||||||
|
Header
|
||||||
|
2 bytes: Short Int, number of \fBName Entries\fR
|
||||||
|
|
||||||
|
Name Entries
|
||||||
|
34 bytes: NULL-terminated string; name of the utility.
|
||||||
|
4 bytes: Long Int, offset of the \fBrecord\fR in file.
|
||||||
|
|
||||||
|
Records
|
||||||
|
7 variable-length NULL-terminated strings.
|
||||||
|
|
||||||
|
.fi
|
||||||
|
.SH FILES
|
||||||
|
/usr/local/lib/describe \- the system
|
||||||
|
.B describe
|
||||||
|
database.
|
||||||
|
.SH AUTHOR
|
||||||
|
James Brookes <jamesb@ecst.csuchico.edu>.
|
||||||
|
.SH "SEE ALSO"
|
||||||
|
.BR apropos (1),
|
||||||
|
.BR describe (1),
|
||||||
|
.BR man (1),
|
||||||
|
.BR whatis (1),
|
||||||
|
.BR descu (8).
|
|
@ -1,15 +1,11 @@
|
||||||
#ifndef _ORCAC_
|
|
||||||
#define _ORCAC_
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef _ORCAC_
|
|
||||||
#pragma optimize -1
|
|
||||||
#pragma stacksize 512
|
|
||||||
#endif /* _ORCAC_ */
|
|
||||||
|
|
||||||
/* */
|
/* */
|
||||||
/* descc - compile info file into describe database file */
|
/* descc - compile info file into describe database file */
|
||||||
/* */
|
/* */
|
||||||
|
/* v1.0.1 - Added -h and -V flags [Sat May 06 1995] */
|
||||||
|
/* Extracted certain #defines to "desc.h" */
|
||||||
|
/* Now uses getopt for command line parsing. */
|
||||||
|
/* Fixed some potential bugs. */
|
||||||
|
/* */
|
||||||
/* v1.0.0 - James Brookes [Sat Oct 23 1993] */
|
/* v1.0.0 - James Brookes [Sat Oct 23 1993] */
|
||||||
/* released [Thu Mar 31 1994] [!!!!!!!!!!!] */
|
/* released [Thu Mar 31 1994] [!!!!!!!!!!!] */
|
||||||
/* */
|
/* */
|
||||||
|
@ -33,199 +29,213 @@
|
||||||
/* 7 variable-length Null-terminated strings. */
|
/* 7 variable-length Null-terminated strings. */
|
||||||
/* */
|
/* */
|
||||||
|
|
||||||
|
#pragma optimize 15
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <getopt.h>
|
||||||
|
#include <assert.h>
|
||||||
|
#include "desc.h"
|
||||||
|
|
||||||
#pragma lint -1
|
#define _VERSION_ "v1.0.1"
|
||||||
|
|
||||||
/* prototypes */
|
/* prototypes */
|
||||||
|
|
||||||
void usage(char *callname);
|
void usage(char *callname);
|
||||||
|
void version(char *callname);
|
||||||
void puke(int error,int lines);
|
void puke(int error,int lines);
|
||||||
int mygets(char *buffer, int *lines, FILE *FInPtr);
|
int mygets(char *buffer, int2 *lines, FILE *FInPtr);
|
||||||
|
|
||||||
/* defines */
|
int Vflag;
|
||||||
|
|
||||||
typedef struct nameEntry_tag
|
/* version - print it out */
|
||||||
|
|
||||||
{
|
void version (char *callname) {
|
||||||
char name[34];
|
Vflag++;
|
||||||
long int offset;
|
fprintf(stderr,"%s version %s\n",callname,_VERSION_);
|
||||||
}nameEntry;
|
return;
|
||||||
|
}
|
||||||
#define _VERSION_ "v1.0.0"
|
|
||||||
#define QUOTE_CHAR '#'
|
|
||||||
#define OUTFILE "/usr/local/lib/describe"
|
|
||||||
|
|
||||||
#define FIELD_LEN 9
|
|
||||||
|
|
||||||
#define NAME "Name: "
|
|
||||||
#define VERSION "Version: "
|
|
||||||
#define AUTHOR "Author: "
|
|
||||||
#define CONTACT "Contact: "
|
|
||||||
#define WHERE "Where: "
|
|
||||||
#define FTP "FTP: "
|
|
||||||
|
|
||||||
/* */
|
/* */
|
||||||
/* usage - you know what to do */
|
/* usage - you know what to do */
|
||||||
/* */
|
/* */
|
||||||
|
|
||||||
void usage (char *callname)
|
void usage (char *callname) {
|
||||||
|
if (!Vflag) version(callname);
|
||||||
{
|
fprintf(stderr,"usage: %s [-hV] <describe_sourcefile>\n",callname);
|
||||||
fprintf(stderr,"%s %s\n",callname,_VERSION_);
|
exit(-1);
|
||||||
fprintf(stderr,"usage: %s <describe sourcefile>\n",callname);
|
}
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* */
|
/* */
|
||||||
/* puke - stdlib errors */
|
/* puke - stdlib errors */
|
||||||
/* */
|
/* */
|
||||||
|
|
||||||
void puke (int error,int lines)
|
void puke (int error,int lines) {
|
||||||
|
fprintf(stderr,"\nError $%x in line %d of script\n",error,lines);
|
||||||
{
|
fflush(stdout);
|
||||||
fprintf(stderr,"\nError $%x in line %d of script\n",error,lines);
|
exit(error);
|
||||||
fflush(stdout);
|
}
|
||||||
exit(error);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* */
|
/* */
|
||||||
/* mygets - get a line (skipping commented lines) and increment line count */
|
/* mygets - get a line (skipping commented lines) and increment line count */
|
||||||
/* */
|
/* */
|
||||||
|
|
||||||
int mygets (char *buffer, int *lines, FILE *FInPtr)
|
int mygets (char *buffer, int2 *lines, FILE *FInPtr) {
|
||||||
|
char *p, c;
|
||||||
|
|
||||||
{
|
do {
|
||||||
int i;
|
if (fgets(buffer,MAX_LINE_LENGTH,FInPtr)==NULL) {
|
||||||
|
return(-1);
|
||||||
do
|
}
|
||||||
|
p = buffer + strlen(buffer) - 1; /* remove trailing \n */
|
||||||
{
|
if (*p == '\n') {
|
||||||
if (fgets(buffer,80,FInPtr)==NULL)
|
*p = '\0';
|
||||||
return(-1);
|
} else {
|
||||||
buffer[strlen(buffer)-1] = '\0'; /* remove trailing \n */
|
fprintf(stderr,"Line %d exceeds %d characters. Remainder ignored.\n",
|
||||||
lines++;
|
*lines,MAX_LINE_LENGTH-1);
|
||||||
}
|
do {
|
||||||
|
c = fgetc(FInPtr);
|
||||||
while(buffer[0] == QUOTE_CHAR || buffer[0] == '\n');
|
} while ((c!='\n') && !feof(FInPtr));
|
||||||
return(0);
|
}
|
||||||
}
|
(*lines)++;
|
||||||
|
} while(buffer[0] == QUOTE_CHAR || buffer[0] == '\n');
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
|
|
||||||
/* */
|
/* */
|
||||||
/* Mainline */
|
/* Mainline */
|
||||||
/* */
|
/* */
|
||||||
|
|
||||||
int main (int argc, char **argv)
|
int main (int argc, char **argv) {
|
||||||
|
FILE *FInPtr, *FOutPtr;
|
||||||
|
long int *record_locs, currLoc, endOfFile;
|
||||||
|
char *buffer;
|
||||||
|
int2 lines, namecount, i, j;
|
||||||
|
nameEntry nameStruct;
|
||||||
|
int c, errflag;
|
||||||
|
|
||||||
{
|
/* initialize globals */
|
||||||
FILE *FInPtr, *FOutPtr;
|
Vflag=0;
|
||||||
long int *record_locs, currLoc, endOfFile;
|
errflag=0;
|
||||||
char *tmpPtr, *buffer;
|
#ifdef STACK_CHECK
|
||||||
int lines, namecount, c, i, j;
|
begin_stack_check();
|
||||||
nameEntry nameStruct;
|
#endif
|
||||||
|
|
||||||
if (argc != 2)
|
assert(sizeof(int2)==2);
|
||||||
usage(argv[0]);
|
assert(sizeof(int4)==4);
|
||||||
|
|
||||||
/* open input and output files */
|
/* parse command line */
|
||||||
|
while ((c = getopt(argc, argv, "hV")) != EOF) {
|
||||||
|
switch (c) {
|
||||||
|
case 'V':
|
||||||
|
version(basename(argv[0]));
|
||||||
|
break;
|
||||||
|
case 'h': /*FALLTHROUGH*/
|
||||||
|
default:
|
||||||
|
errflag++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (errflag || (argc-optind != 1))
|
||||||
|
usage(basename(argv[0]));
|
||||||
|
|
||||||
buffer = (char *) malloc (81);
|
/* open input and output files */
|
||||||
if ((FInPtr = fopen(argv[1],"r")) == NULL)
|
|
||||||
|
|
||||||
{
|
|
||||||
fprintf(stderr,"Error opening %s; exiting.\n",argv[1]);
|
|
||||||
free(buffer);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((FOutPtr = fopen(OUTFILE,"w+")) == NULL)
|
if ((buffer = malloc (MAX_LINE_LENGTH)) == NULL) {
|
||||||
|
fprintf(stderr,"couldn't allocate line buffer\n");
|
||||||
|
exit (-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((FInPtr = fopen(argv[argc-1],"r")) == NULL) {
|
||||||
|
fprintf(stderr,"Error opening %s; exiting.\n",argv[argc-1]);
|
||||||
|
free(buffer);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
{
|
if ((FOutPtr = fopen(DATABASE,"wb+")) == NULL) {
|
||||||
fprintf(stderr,"Error opening output file %s; exiting.\n",OUTFILE);
|
fprintf(stderr,"Error opening database file %s; exiting.\n",DATABASE);
|
||||||
free(buffer);
|
free(buffer);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Compile array of names */
|
/* Compile array of names */
|
||||||
|
lines = 0;
|
||||||
|
namecount = 0;
|
||||||
|
|
||||||
lines = 0;
|
/* space for # of array entries */
|
||||||
namecount = 0;
|
fwrite(&namecount,sizeof(namecount),1,FOutPtr);
|
||||||
fseek(FOutPtr,2,SEEK_CUR); /* space for # of array entries */
|
|
||||||
|
|
||||||
while(mygets(buffer,&lines,FInPtr) != -1)
|
while(mygets(buffer,&lines,FInPtr) != -1) {
|
||||||
|
if (!strncmp(buffer,NAME,FIELD_LEN)) { /* found a match */
|
||||||
{
|
strncpy(nameStruct.name,&buffer[FIELD_LEN],NAME_LEN-1);
|
||||||
if (!strncmp(buffer,NAME,FIELD_LEN)) /* found a match */
|
nameStruct.name[NAME_LEN-1] = '\0';
|
||||||
|
|
||||||
{
|
|
||||||
tmpPtr = &buffer[FIELD_LEN];
|
|
||||||
strcpy(nameStruct.name,tmpPtr);
|
|
||||||
fwrite(&nameStruct,sizeof(nameStruct),1,FOutPtr);
|
|
||||||
namecount++;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
record_locs = (long int *) malloc (namecount*sizeof(long int));
|
|
||||||
rewind(FInPtr);
|
|
||||||
buffer[0] = '\0';
|
|
||||||
lines = 0;
|
|
||||||
fprintf(FOutPtr,"\t");
|
|
||||||
|
|
||||||
/* Increment to first field */
|
|
||||||
|
|
||||||
while (strncmp(buffer,NAME,FIELD_LEN)) /* found a match! */
|
|
||||||
mygets(buffer,&lines,FInPtr);
|
|
||||||
|
|
||||||
for (i = 0; i < namecount; i++)
|
|
||||||
|
|
||||||
{
|
|
||||||
record_locs[i] = ftell(FOutPtr);
|
|
||||||
for (j = 0; j < 5; j++) /* parse additional info */
|
|
||||||
|
|
||||||
{
|
|
||||||
mygets(buffer,&lines,FInPtr);
|
|
||||||
tmpPtr = &buffer[FIELD_LEN];
|
|
||||||
fprintf(FOutPtr,"%s\n",tmpPtr); /* print out fields */
|
|
||||||
}
|
|
||||||
|
|
||||||
/* handle comment field */
|
|
||||||
|
|
||||||
while (1)
|
|
||||||
|
|
||||||
{
|
|
||||||
if (mygets(buffer,&lines,FInPtr) == -1)
|
|
||||||
break;
|
|
||||||
if (!strncmp(buffer,NAME,FIELD_LEN)) /* until next field */
|
|
||||||
break;
|
|
||||||
fprintf(FOutPtr,"%s ",buffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
fprintf(FOutPtr,"\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
endOfFile = ftell(FOutPtr);
|
|
||||||
rewind(FOutPtr);
|
|
||||||
fwrite(&namecount,2,1,FOutPtr);
|
|
||||||
|
|
||||||
/* time to go through the record_locs array and backpatch in */
|
|
||||||
/* all the record locations. A little slower than necessary */
|
|
||||||
/* perhaps, but it gets the job done. */
|
|
||||||
|
|
||||||
for (i = 0; i < namecount; i++)
|
|
||||||
|
|
||||||
{
|
|
||||||
currLoc = ftell(FOutPtr);
|
|
||||||
fread(&nameStruct,sizeof(nameStruct),1,FOutPtr);
|
|
||||||
fseek(FOutPtr,-(sizeof(nameEntry)),SEEK_CUR);
|
|
||||||
nameStruct.offset = record_locs[i];
|
|
||||||
fwrite(&nameStruct,sizeof(nameStruct),1,FOutPtr);
|
fwrite(&nameStruct,sizeof(nameStruct),1,FOutPtr);
|
||||||
}
|
namecount++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fseek(FOutPtr,endOfFile,SEEK_SET);
|
if ((record_locs = malloc (namecount*sizeof(long int)))==NULL) {
|
||||||
fclose(FOutPtr);
|
fprintf(stderr,"malloc of record_locs failed (%ld bytes); exiting\n",
|
||||||
free(record_locs);
|
(long) namecount*sizeof(long int));
|
||||||
free(buffer);
|
exit(-1);
|
||||||
}
|
}
|
||||||
|
rewind(FInPtr);
|
||||||
|
fflush(FInPtr);
|
||||||
|
buffer[0] = '\0';
|
||||||
|
lines = 0;
|
||||||
|
fprintf(FOutPtr,"\t");
|
||||||
|
|
||||||
|
/* Increment to first field */
|
||||||
|
|
||||||
|
while (strncmp(buffer,NAME,FIELD_LEN)) /* found a match! */
|
||||||
|
mygets(buffer,&lines,FInPtr);
|
||||||
|
|
||||||
|
/* Write out records and keep track of their file offsets */
|
||||||
|
for (i = 0; i < namecount; i++) {
|
||||||
|
record_locs[i] = ftell(FOutPtr);
|
||||||
|
|
||||||
|
/* print out <Version>, <Author>, <Contact>, <Where>, <FTP> */
|
||||||
|
for (j = 0; j < FIELD_COUNT-1; j++) {
|
||||||
|
buffer[FIELD_LEN] = '\0';
|
||||||
|
mygets(buffer,&lines,FInPtr);
|
||||||
|
fprintf(FOutPtr,"%s\n",&buffer[FIELD_LEN]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* handle <description> field */
|
||||||
|
for (;;) {
|
||||||
|
if (mygets(buffer,&lines,FInPtr) == -1) break;
|
||||||
|
if (!strncmp(buffer,NAME,FIELD_LEN)) break;
|
||||||
|
fprintf(FOutPtr,"%s ",buffer);
|
||||||
|
}
|
||||||
|
fprintf(FOutPtr,"\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
endOfFile = ftell(FOutPtr);
|
||||||
|
fflush(FOutPtr); /*gdr 1*/
|
||||||
|
rewind(FOutPtr);
|
||||||
|
fwrite(&namecount,sizeof(namecount),1,FOutPtr);
|
||||||
|
fflush(FOutPtr); /*gdr 1*/
|
||||||
|
|
||||||
|
/* time to go through the record_locs array and backpatch in */
|
||||||
|
/* all the record locations. A little slower than necessary */
|
||||||
|
/* perhaps, but it gets the job done. */
|
||||||
|
|
||||||
|
for (i = 0; i < namecount; i++) {
|
||||||
|
fread(&nameStruct,sizeof(nameStruct),1,FOutPtr);
|
||||||
|
fseek(FOutPtr,-(sizeof(nameStruct)),SEEK_CUR);
|
||||||
|
nameStruct.offset = record_locs[i];
|
||||||
|
fwrite(&nameStruct,sizeof(nameStruct),(size_t) 1,FOutPtr);
|
||||||
|
fflush(FOutPtr);
|
||||||
|
}
|
||||||
|
|
||||||
|
fseek(FOutPtr,endOfFile,SEEK_SET);
|
||||||
|
fclose(FOutPtr);
|
||||||
|
free(record_locs);
|
||||||
|
free(buffer);
|
||||||
|
|
||||||
|
#ifdef STACK_CHECK
|
||||||
|
fprintf(stderr,"stack usage: %d bytes\n",end_stack_check());
|
||||||
|
#endif
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
46
usr.orca.bin/describe/describe.1
Normal file
46
usr.orca.bin/describe/describe.1
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
.TH DESCRIBE 1 "Commands and Applications" "7 May 1995" "Version 1.0.1"
|
||||||
|
.SH NAME
|
||||||
|
describe \- show information about a program
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.BR describe " [" -hvV ]
|
||||||
|
.I program
|
||||||
|
.SH DESCRIPTION
|
||||||
|
.BR describe
|
||||||
|
will show current information about
|
||||||
|
.IR program .
|
||||||
|
This information includes:
|
||||||
|
.nf
|
||||||
|
|
||||||
|
The name of the program;
|
||||||
|
The program version number;
|
||||||
|
The author (or the person currently maintaining the program);
|
||||||
|
Contact information for the author;
|
||||||
|
Where the utility should be installed;
|
||||||
|
An FTP site from which the program may be obtained, and;
|
||||||
|
A brief description of the program.
|
||||||
|
|
||||||
|
.fi
|
||||||
|
.LP
|
||||||
|
.BR describe
|
||||||
|
uses a database compiled by
|
||||||
|
.BR descc (8).
|
||||||
|
.SH OPTIONS
|
||||||
|
.nf
|
||||||
|
\fB-h\fR Show usage information.
|
||||||
|
|
||||||
|
\fB-v\fR Verbose debugging mode.
|
||||||
|
|
||||||
|
\fB-V\fR Show version information.
|
||||||
|
.fi
|
||||||
|
.SH FILES
|
||||||
|
/usr/local/lib/describe \- the system
|
||||||
|
.B describe
|
||||||
|
database.
|
||||||
|
.SH AUTHOR
|
||||||
|
James Brookes <jamesb@ecst.csuchico.edu>.
|
||||||
|
.SH "SEE ALSO"
|
||||||
|
.BR apropos (1),
|
||||||
|
.BR man (1),
|
||||||
|
.BR whatis (1),
|
||||||
|
.BR descc (8),
|
||||||
|
.BR descu (8).
|
|
@ -1,16 +1,22 @@
|
||||||
#pragma optimize 15
|
/*
|
||||||
#pragma stacksize 512
|
* describe(1) -- Copyright 1993-1995 James Brookes. See the README and
|
||||||
|
* man page for details.
|
||||||
|
*
|
||||||
|
* We have to have this pragma in here; Orca/C's bit 5 optimization
|
||||||
|
* (loop invariant removal) kills code somewhere in this file, resulting
|
||||||
|
* in a system panic.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma optimize 31
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
#include <getopt.h>
|
||||||
|
#include "desc.h"
|
||||||
|
|
||||||
#pragma lint -1
|
#define _VERSION_ "v1.0.1"
|
||||||
|
|
||||||
#ifdef STACK_CHECK
|
|
||||||
void begin_stack_check(void);
|
|
||||||
int end_stack_check(void);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* prototypes */
|
/* prototypes */
|
||||||
|
|
||||||
|
@ -18,188 +24,165 @@ void usage(char *callname);
|
||||||
void print_entry(FILE *FInPtr, long int index);
|
void print_entry(FILE *FInPtr, long int index);
|
||||||
void myprintf(char *string, int wordwrap_size);
|
void myprintf(char *string, int wordwrap_size);
|
||||||
|
|
||||||
/* defines */
|
int Vflag;
|
||||||
|
|
||||||
typedef struct nameEntry_tag
|
void version (char *callname) {
|
||||||
|
Vflag++;
|
||||||
|
fprintf(stderr,"%s version %s\n",callname,_VERSION_);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
{
|
void usage(char *callname) {
|
||||||
char name[34];
|
if (!Vflag) version(callname);
|
||||||
long int offset;
|
fprintf(stderr,"usage: %s [-hv] <utility_name>\n",callname);
|
||||||
}nameEntry;
|
exit(-1);
|
||||||
|
}
|
||||||
|
|
||||||
#ifndef FALSE
|
void myprintf(char *string, int wordwrap_size) {
|
||||||
#define FALSE 0
|
int length = 0;
|
||||||
#define TRUE 1
|
char *headString, *tailString;
|
||||||
#endif
|
|
||||||
|
headString = tailString = string;
|
||||||
|
printf("\n");
|
||||||
|
while (1) {
|
||||||
|
tailString++; length++;
|
||||||
|
if (*tailString == '\0') {
|
||||||
|
printf("%s",headString);
|
||||||
|
return;
|
||||||
|
} else if (length == wordwrap_size) {
|
||||||
|
while (*tailString != ' ')
|
||||||
|
tailString--;
|
||||||
|
*tailString = '\0';
|
||||||
|
printf("%s\n",headString);
|
||||||
|
headString = tailString+1;
|
||||||
|
length = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#define _VERSION_ "v1.0"
|
void print_entry(FILE *FInPtr, long int index) {
|
||||||
#define INFILE "/usr/local/lib/describe"
|
char *buffer;
|
||||||
|
|
||||||
|
buffer = (char *) malloc (1024);
|
||||||
|
|
||||||
#define NAME "Name: "
|
fseek(FInPtr,index,SEEK_SET);
|
||||||
#define VERSION "Version: "
|
|
||||||
#define AUTHOR "Author: "
|
printf("%s",VERSION);
|
||||||
#define CONTACT "Contact: "
|
fgets(buffer,MAX_LINE_LENGTH,FInPtr);
|
||||||
#define WHERE "Where: "
|
printf("%s",buffer);
|
||||||
#define FTP "FTP: "
|
|
||||||
|
printf("%s",AUTHOR);
|
||||||
void usage(char *callname)
|
fgets(buffer,MAX_LINE_LENGTH,FInPtr);
|
||||||
|
printf("%s",buffer);
|
||||||
{
|
|
||||||
fprintf(stderr,"Describe %s\n",_VERSION_);
|
printf("%s",CONTACT);
|
||||||
fprintf(stderr,"usage: %s -[v] <utilityname>\n",callname);
|
fgets(buffer,MAX_LINE_LENGTH,FInPtr);
|
||||||
exit(0);
|
printf("%s",buffer);
|
||||||
}
|
|
||||||
|
printf("%s",WHERE);
|
||||||
void myprintf(char *string, int wordwrap_size)
|
fgets(buffer,MAX_LINE_LENGTH,FInPtr);
|
||||||
|
printf("%s",buffer);
|
||||||
{
|
|
||||||
int length = 0;
|
printf("%s",FTP);
|
||||||
char *headString, *tailString;
|
fgets(buffer,MAX_LINE_LENGTH,FInPtr);
|
||||||
|
printf("%s",buffer);
|
||||||
headString = tailString = string;
|
|
||||||
printf("\n");
|
fgets(buffer,1024,FInPtr);
|
||||||
while (1)
|
myprintf(buffer,75);
|
||||||
|
|
||||||
{
|
free(buffer);
|
||||||
tailString++; length++;
|
|
||||||
if (*tailString == '\0')
|
|
||||||
|
|
||||||
{
|
|
||||||
printf("%s",headString);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (length == wordwrap_size)
|
|
||||||
|
|
||||||
{
|
|
||||||
while (*tailString != ' ')
|
|
||||||
tailString--;
|
|
||||||
*tailString = '\0';
|
|
||||||
printf("%s\n",headString);
|
|
||||||
headString = tailString+1;
|
|
||||||
length = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void print_entry(FILE *FInPtr, long int index)
|
|
||||||
|
|
||||||
{
|
|
||||||
char *buffer;
|
|
||||||
|
|
||||||
buffer = (char *) malloc (1024);
|
|
||||||
|
|
||||||
fseek(FInPtr,index,SEEK_SET);
|
|
||||||
|
|
||||||
printf("%s",VERSION);
|
|
||||||
fgets(buffer,80,FInPtr);
|
|
||||||
printf("%s",buffer);
|
|
||||||
|
|
||||||
printf("%s",AUTHOR);
|
|
||||||
fgets(buffer,80,FInPtr);
|
|
||||||
printf("%s",buffer);
|
|
||||||
|
|
||||||
printf("%s",CONTACT);
|
|
||||||
fgets(buffer,80,FInPtr);
|
|
||||||
printf("%s",buffer);
|
|
||||||
|
|
||||||
printf("%s",WHERE);
|
|
||||||
fgets(buffer,80,FInPtr);
|
|
||||||
printf("%s",buffer);
|
|
||||||
|
|
||||||
printf("%s",FTP);
|
|
||||||
fgets(buffer,80,FInPtr);
|
|
||||||
printf("%s",buffer);
|
|
||||||
|
|
||||||
fgets(buffer,1024,FInPtr);
|
|
||||||
myprintf(buffer,75);
|
|
||||||
|
|
||||||
free(buffer);
|
|
||||||
#ifdef STACK_CHECK
|
#ifdef STACK_CHECK
|
||||||
printf("Stack: %d\n",end_stack_check());
|
printf("Stack: %d\n",end_stack_check());
|
||||||
#endif
|
#endif
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
int main (int argc, char **argv)
|
|
||||||
|
|
||||||
{
|
|
||||||
FILE *FInPtr;
|
|
||||||
char searchName[34];
|
|
||||||
long int index;
|
|
||||||
int verbose, argind, numOfEntries, cmp, offset1, offset2, check, i;
|
|
||||||
nameEntry nameStruct;
|
|
||||||
|
|
||||||
|
int main (int argc, char **argv) {
|
||||||
|
FILE *FInPtr;
|
||||||
|
char searchName[NAME_LEN];
|
||||||
|
int2 verbose, numOfEntries, cmp, offset1, offset2, check, i;
|
||||||
|
nameEntry nameStruct;
|
||||||
|
int c, errflag;
|
||||||
|
char *p;
|
||||||
|
|
||||||
#ifdef STACK_CHECK
|
#ifdef STACK_CHECK
|
||||||
begin_stack_check();
|
begin_stack_check();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
verbose = FALSE;
|
verbose = FALSE;
|
||||||
argind = 1;
|
Vflag = FALSE;
|
||||||
|
errflag = FALSE;
|
||||||
|
|
||||||
if ((argc == 3) && (!strcmp(argv[1],"-v")))
|
while ((c = getopt(argc,argv,"hvV")) != EOF) {
|
||||||
|
switch (c) {
|
||||||
{
|
case 'v':
|
||||||
verbose = TRUE;
|
verbose = TRUE;
|
||||||
argind++;
|
break;
|
||||||
|
case 'V':
|
||||||
|
version(basename(argv[0]));
|
||||||
|
break;
|
||||||
|
case 'h':
|
||||||
|
default:
|
||||||
|
errflag = TRUE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (errflag || (argc-optind != 1))
|
||||||
|
usage(basename(argv[0]));
|
||||||
|
|
||||||
|
|
||||||
|
if ((FInPtr = fopen(DATABASE,"r")) == NULL) {
|
||||||
|
perror("couldn't open database");
|
||||||
|
exit(-1);
|
||||||
|
}
|
||||||
|
fread(&numOfEntries,2,1,FInPtr);
|
||||||
|
offset1 = 0;
|
||||||
|
offset2 = numOfEntries-1;
|
||||||
|
|
||||||
|
strcpy(searchName,argv[optind]);
|
||||||
|
i=0;
|
||||||
|
p = searchName;
|
||||||
|
while (*p) {
|
||||||
|
*p = tolower(*p);
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (verbose)
|
||||||
|
printf("Searching...\n");
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
check = ((offset2-offset1)/2) + offset1;
|
||||||
|
fseek(FInPtr,2+(check*sizeof(nameEntry)),SEEK_SET);
|
||||||
|
fread(&nameStruct,sizeof(nameEntry),1,FInPtr);
|
||||||
|
|
||||||
|
cmp = strcmp(nameStruct.name,searchName);
|
||||||
|
|
||||||
|
if (verbose)
|
||||||
|
printf(" checked %s\n",nameStruct.name);
|
||||||
|
|
||||||
|
if (cmp > 0) {
|
||||||
|
offset2 = check-1;
|
||||||
|
} else if (cmp < 0) {
|
||||||
|
offset1 = check+1;
|
||||||
|
} else {
|
||||||
|
if (verbose) {
|
||||||
|
printf("Found entry %s!\n",searchName);
|
||||||
|
#ifdef STACK_CHECK
|
||||||
|
printf("Stack: %d\n",end_stack_check());
|
||||||
|
#endif
|
||||||
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (argc != 2)
|
printf("%s%s\n",NAME,searchName);
|
||||||
usage(argv[0]);
|
print_entry(FInPtr,nameStruct.offset);
|
||||||
|
}
|
||||||
|
|
||||||
FInPtr = fopen(INFILE,"r");
|
if (offset1 > offset2) {
|
||||||
fread(&numOfEntries,2,1,FInPtr);
|
printf("Entry '%s' not found in describe database.\n",searchName);
|
||||||
offset1 = 0;
|
#ifdef STACK_CHECK
|
||||||
offset2 = numOfEntries-1;
|
printf("Stack: %d\n",end_stack_check());
|
||||||
|
#endif
|
||||||
strcpy(searchName,argv[argind]);
|
exit(1);
|
||||||
i=0;
|
}
|
||||||
while(searchName[i] = tolower(searchName[i++]));
|
}
|
||||||
|
}
|
||||||
if (verbose)
|
|
||||||
printf("Searching...\n");
|
|
||||||
|
|
||||||
while (1)
|
|
||||||
|
|
||||||
{
|
|
||||||
check = ((offset2-offset1)/2) + offset1;
|
|
||||||
fseek(FInPtr,2+(check*sizeof(nameEntry)),SEEK_SET);
|
|
||||||
fread(&nameStruct,sizeof(nameEntry),1,FInPtr);
|
|
||||||
|
|
||||||
cmp = strcmp(nameStruct.name,searchName);
|
|
||||||
|
|
||||||
if (verbose)
|
|
||||||
printf(" checked %s\n",nameStruct.name);
|
|
||||||
|
|
||||||
if (cmp > 0)
|
|
||||||
offset2 = check-1;
|
|
||||||
|
|
||||||
else if (cmp < 0)
|
|
||||||
offset1 = check+1;
|
|
||||||
|
|
||||||
else
|
|
||||||
|
|
||||||
{
|
|
||||||
if (verbose)
|
|
||||||
|
|
||||||
{
|
|
||||||
printf("Found entry %s!\n",searchName);
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("%s%s\n",NAME,searchName);
|
|
||||||
print_entry(FInPtr,nameStruct.offset);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (offset1 > offset2)
|
|
||||||
|
|
||||||
{
|
|
||||||
printf("Entry '%s' not found in describe database.\n",searchName);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#===============================================================================
|
#=============================================================================
|
||||||
# List of shell applications for GNO/ME Last revision: 11/2/93
|
# List of shell applications for GNO/ME Last revision: 07 May 95
|
||||||
#===============================================================================
|
#=============================================================================
|
||||||
#
|
#
|
||||||
# About this file
|
# About this file
|
||||||
# ~~~~~~~~~~~~~~~
|
# ~~~~~~~~~~~~~~~
|
||||||
|
@ -11,12 +11,18 @@
|
||||||
# sure the directory structure '/usr/local/lib/' exists first! Information
|
# sure the directory structure '/usr/local/lib/' exists first! Information
|
||||||
# may be later culled from the file with the command 'describe <utility>'.
|
# may be later culled from the file with the command 'describe <utility>'.
|
||||||
#
|
#
|
||||||
|
# While this file may be updated manually, new entries and updates may
|
||||||
|
# also be merged through the use of 'descu'.
|
||||||
|
#
|
||||||
|
# This file is sorted lexicographically based on the Name field. This
|
||||||
|
# means that any names starting with capital letters will appear before
|
||||||
|
# those starting with lower case letters.
|
||||||
|
#
|
||||||
# Send additions/corrections to:
|
# Send additions/corrections to:
|
||||||
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
# James Brookes
|
# James Brookes
|
||||||
#
|
#
|
||||||
# jamesb@ecst.csuchico.edu <-- Preferred
|
# jamesb@ecst.csuchico.edu
|
||||||
# bb252@cleveland.freenet.edu
|
|
||||||
#
|
#
|
||||||
# To obtain the version number of a file:
|
# To obtain the version number of a file:
|
||||||
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
@ -24,9 +30,18 @@
|
||||||
# B) any usage or -v/V flag supplied by the utility author
|
# B) any usage or -v/V flag supplied by the utility author
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
# NB: "Author" may mean who is maintaing the current port, and may not actually
|
# NB: "Author" may mean who is maintaing the current port, and may not
|
||||||
# mean the original author of the program.
|
# actually mean the original author of the program.
|
||||||
#===============================================================================
|
#==============================================================================
|
||||||
|
|
||||||
|
Name: DRWM
|
||||||
|
Version: 2.01
|
||||||
|
Author: Dave J. Roberts
|
||||||
|
Contact: dave@mary.iia.org
|
||||||
|
Where: /usr/X/bin
|
||||||
|
FTP: ftp.cco.caltech.edu, grind.isca.uiowa.edu
|
||||||
|
|
||||||
|
Davis Rex Window Manager. A window manager for GNO.
|
||||||
|
|
||||||
Name: argv0
|
Name: argv0
|
||||||
Version: 1.0
|
Version: 1.0
|
||||||
|
@ -49,6 +64,28 @@ FTP: ...
|
||||||
most options--including underline, boldface, margins, centering--on all
|
most options--including underline, boldface, margins, centering--on all
|
||||||
terminal types.
|
terminal types.
|
||||||
|
|
||||||
|
Name: bc
|
||||||
|
Version: 1.01
|
||||||
|
Author: Frank Petroski
|
||||||
|
Contact:
|
||||||
|
Where: /usr/bin
|
||||||
|
FTP: ftp.cco.caltech.edu
|
||||||
|
|
||||||
|
GNU bc is an arbitrary precision numeric processing language. Syntax is
|
||||||
|
similar to C, but differs in many substantial areas. It supports
|
||||||
|
interactive execution of statements. bc is a utility included in the
|
||||||
|
POSIX P1003.2/D11 draft standard. Copyright Free Software Foundation.
|
||||||
|
|
||||||
|
Name: bed
|
||||||
|
Version: 1.1.1
|
||||||
|
Author: Phil Vandry
|
||||||
|
Contact: vandry@cam.org
|
||||||
|
Where: /usr/local/bin
|
||||||
|
FTP: grind.isca.uiowa.edu
|
||||||
|
|
||||||
|
A binary editor that can handle "infinitely" long lines and null bytes
|
||||||
|
in the file. Intended for editing binary files.
|
||||||
|
|
||||||
Name: binprint
|
Name: binprint
|
||||||
Version: 1.2
|
Version: 1.2
|
||||||
Author: Phillip Vandry
|
Author: Phillip Vandry
|
||||||
|
@ -59,19 +96,19 @@ FTP:
|
||||||
Prints a hex dump of files or standard in
|
Prints a hex dump of files or standard in
|
||||||
|
|
||||||
Name: bison
|
Name: bison
|
||||||
Version: 1.03
|
Version: 1.19
|
||||||
Author: Soenke Behrens
|
Author: Soenke Behrens
|
||||||
Contact: behrenss@informatik.tu-muenchen.de
|
Contact: schaf@meadow.muc.de
|
||||||
Where: /usr/local/bin
|
Where: /usr/local/bin
|
||||||
FTP: ...
|
FTP: ...
|
||||||
|
|
||||||
A port of the FSF's yacc replacement. bison is part of the GNU project. yacc
|
A port of the FSF's yacc replacement. bison is part of the GNU project.
|
||||||
is a parser generator (also known as "compiler compiler").
|
yacc is a parser generator (also known as "compiler compiler").
|
||||||
|
|
||||||
Name: booz
|
Name: booz
|
||||||
Version: 2.0
|
Version: 2.0
|
||||||
Author: Soenke Behrens
|
Author: Soenke Behrens
|
||||||
Contact: behrenss@informatik.tu-muenchen.de
|
Contact: schaf@meadow.muc.de
|
||||||
Where: /usr/local/bin
|
Where: /usr/local/bin
|
||||||
FTP: ...
|
FTP: ...
|
||||||
|
|
||||||
|
@ -87,34 +124,35 @@ FTP:
|
||||||
Prints a calendar for the current month or any month.
|
Prints a calendar for the current month or any month.
|
||||||
|
|
||||||
Name: calls
|
Name: calls
|
||||||
Version: 2.0
|
Version: 2.0 (16 Dec 93)
|
||||||
Author: Devin Reade
|
Author: Ported by Devin Reade
|
||||||
Contact: glyn@cs.ualberta.ca, glyn@ersys.edm.ab.ca
|
Contact: gdr@myrias.ab.ca
|
||||||
Where: ??
|
Where: /usr/local/bin
|
||||||
FTP: cco.caltech.edu and grind.isca.uiowa.edu.
|
FTP: ftp.cco.caltech.edu, grind.isca.uiowa.edu.
|
||||||
|
|
||||||
A call chart generator, to show the sequence and calling dependancies of
|
A call chart generator, to show the sequence and calling dependancies of
|
||||||
functions within a program. It's more flexible than Orca shell version.
|
functions within a program. It's more flexible than Orca shell version.
|
||||||
Requires cpp.
|
Requires cpp.
|
||||||
|
|
||||||
Name: cc
|
Name: cclean
|
||||||
Version: 1.06
|
Version: 1.02
|
||||||
Author: Soenke Behrens
|
Author: Soenke Behrens
|
||||||
Contact: behrenss@informatik.tu-muenchen.de
|
Contact: sbehrens@contech.demon.co.uk
|
||||||
Where: /usr/local/bin
|
Where: /usr/local/bin
|
||||||
FTP: ...
|
FTP: ftp.cco.caltech.edu, grind.isca.uiowa.edu
|
||||||
|
|
||||||
Unixish front-end for ORCA/C. Particularly useful in combination with dmake.
|
For use with occ. Remove the lines ccprep put into a source file from that
|
||||||
|
source file. Part of the occ 1.12 distribution.
|
||||||
|
|
||||||
Name: ccprep
|
Name: ccprep
|
||||||
Version: 1.01
|
Version: 1.1
|
||||||
Author: Soenke Behrens
|
Author: Soenke Behrens
|
||||||
Contact: behrenss@informatik.tu-muenchen.de
|
Contact: sbehrens@contech.demon.co.uk
|
||||||
Where: /usr/local/bin
|
Where: /usr/local/bin
|
||||||
FTP: ...
|
FTP: ftp.cco.caltech.edu, grind.isca.uiowa.edu
|
||||||
|
|
||||||
For use with cc. Allows the use of a kludge file for specifying #pragma
|
For use with occ. Puts a "#line 2" statement into source files to
|
||||||
statements from the command line.
|
get around problems with occ 1.12 and ORCA/C 2.03.
|
||||||
|
|
||||||
Name: chat
|
Name: chat
|
||||||
Version: 1.0
|
Version: 1.0
|
||||||
|
@ -155,6 +193,15 @@ FTP: ...
|
||||||
|
|
||||||
Runs certain processes at certain times. cron is started by init.
|
Runs certain processes at certain times. cron is started by init.
|
||||||
|
|
||||||
|
Name: cu
|
||||||
|
Version: 1.0
|
||||||
|
Author: Dave J. Roberts
|
||||||
|
Contact: daver@interactive.net
|
||||||
|
Where: /usr/local/bin
|
||||||
|
FTP:
|
||||||
|
|
||||||
|
A simple dialup utility.
|
||||||
|
|
||||||
Name: date
|
Name: date
|
||||||
Version: 1.2
|
Version: 1.2
|
||||||
Author: Phillip Vandry
|
Author: Phillip Vandry
|
||||||
|
@ -165,25 +212,34 @@ FTP: ...
|
||||||
Shows the date and time (optionally, continuously).
|
Shows the date and time (optionally, continuously).
|
||||||
|
|
||||||
Name: descc
|
Name: descc
|
||||||
Version: 1.0
|
Version: 1.0.1
|
||||||
Author: James Brookes
|
Author: James Brookes
|
||||||
Contact: jamesb@ecst.csuchico.edu
|
Contact: jamesb@ecst.csuchico.edu
|
||||||
Where: /usr/local/bin
|
Where: /usr/sbin
|
||||||
FTP: ...
|
FTP: ftp.cco.caltech.edu
|
||||||
|
|
||||||
Compile a source file into a 'describe' database file.
|
Compile a source file into a 'describe' database file.
|
||||||
|
|
||||||
Name: describe
|
Name: describe
|
||||||
Version: 1.0
|
Version: 1.0.1
|
||||||
Author: James Brookes
|
Author: James Brookes
|
||||||
Contact: jamesb@ecst.csuchico.edu
|
Contact: jamesb@ecst.csuchico.edu
|
||||||
Where: /usr/local/bin
|
Where: /usr/local/bin
|
||||||
FTP: ...
|
FTP: ftp.cco.caltech.edu
|
||||||
|
|
||||||
Print a multi-line description obtained from the compiled 'describe'
|
Print a multi-line description obtained from the compiled 'describe'
|
||||||
database; giving utility name, version, author, author's contact, where the
|
database; giving utility name, version, author, author's contact, where the
|
||||||
utility is, as well as where the utility can be FTPd from on the InterNet.
|
utility is, as well as where the utility can be FTPd from on the InterNet.
|
||||||
|
|
||||||
|
Name: descu
|
||||||
|
Version: 1.0
|
||||||
|
Author: Devin Reade
|
||||||
|
Contact: gdr@myrias.ab.ca
|
||||||
|
Where: /usr/sbin
|
||||||
|
FTP: ftp.cco.caltech.edu
|
||||||
|
|
||||||
|
Update a 'describe' source file.
|
||||||
|
|
||||||
Name: dial
|
Name: dial
|
||||||
Version: 1.0
|
Version: 1.0
|
||||||
Author: Phillip Vandry
|
Author: Phillip Vandry
|
||||||
|
@ -204,14 +260,35 @@ FTP: ...
|
||||||
Run from inittab to handle modems on dialup lines.
|
Run from inittab to handle modems on dialup lines.
|
||||||
|
|
||||||
Name: dmake
|
Name: dmake
|
||||||
Version: 0.4.3b (17 Jan 94)
|
Version: 1.0 (4 Jul 94)
|
||||||
Author: Devin Reade.
|
Author: Ported by Devin Reade.
|
||||||
Contact: <glyn@cs.ualberta.ca>,<glyn@ersys.edm.ab.ca>
|
Contact: gdr@myrias.ab.ca
|
||||||
Where: /usr/bin
|
Where: /usr/local/bin
|
||||||
FTP: cco.caltech.edu,grind.isca.uiowa.edu.
|
FTP: ftp.cco.caltech.edu, grind.isca.uiowa.edu.
|
||||||
|
|
||||||
A Unix-style make utility for automated compilation.
|
A Unix-style make utility for automated compilation.
|
||||||
|
|
||||||
|
Name: dsort
|
||||||
|
Version: 1.0 (14 Jun 94)
|
||||||
|
Author: Devin Reade.
|
||||||
|
Contact: gdr@myrias.ab.ca
|
||||||
|
Where: /usr/local/bin
|
||||||
|
FTP: ftp.cco.caltech.edu, grind.isca.uiowa.edu (in file sorts10.shk)
|
||||||
|
|
||||||
|
Sort a text file on disk lexicographically. Archived together
|
||||||
|
with msort.
|
||||||
|
|
||||||
|
Name: dsplit
|
||||||
|
Version: 1.0 (19 Dec 93)
|
||||||
|
Author: Ported by Devin Reade.
|
||||||
|
Contact: gdr@myrias.ab.ca
|
||||||
|
Where: /usr/local/bin
|
||||||
|
FTP: ftp.cco.caltech.edu, grind.isca.uiowa.edu
|
||||||
|
|
||||||
|
A file splitter, with a default output size of 811520 bytes, suitable
|
||||||
|
for 800k 3.5" floppies. It will work with any type of regular (no
|
||||||
|
resource fork) file.
|
||||||
|
|
||||||
Name: eps
|
Name: eps
|
||||||
Version: 1.0
|
Version: 1.0
|
||||||
Author: James Brookes
|
Author: James Brookes
|
||||||
|
@ -231,30 +308,52 @@ FTP:
|
||||||
Evaluates matehmatical expressions; prints result in normal and
|
Evaluates matehmatical expressions; prints result in normal and
|
||||||
scientific notation. Uses C like syntax.
|
scientific notation. Uses C like syntax.
|
||||||
|
|
||||||
|
Name: finger
|
||||||
|
Version: 1.1
|
||||||
|
Author: Leslie M. Barstow III
|
||||||
|
Contact: wdphoenix@delphi.com
|
||||||
|
Where: /usr/bin
|
||||||
|
FTP: ...
|
||||||
|
|
||||||
|
finger is a re-write of the UNIX finger utility. Its purpose is to provide
|
||||||
|
information about a user or users. It shows their real name, home directory,
|
||||||
|
default shell, last login time, and two files that they may create to provide
|
||||||
|
further information.
|
||||||
|
|
||||||
Name: flex
|
Name: flex
|
||||||
Version: 2.38
|
Version: 2.38
|
||||||
Author: Soenke Behrens
|
Author: Soenke Behrens
|
||||||
Contact: berenss@informatik.tu-muenchen.de
|
Contact: schaf@meadow.muc.de
|
||||||
Where: /usr/local/bin
|
Where: /usr/local/bin
|
||||||
FTP: ...
|
FTP: ...
|
||||||
|
|
||||||
A port of the FSF's lex replacement. flex is part of the GNU project. lex
|
A port of the FSF's lex replacement. flex is part of the GNU project.
|
||||||
is a tokenizer generator, to be used in conjunction with yacc. Note that due
|
lex is a tokenizer generator, to be used in conjunction with yacc. Note
|
||||||
to the way the FSF writes their code (yuck), flex has some problems with ints
|
that due to the way the FSF writes their code (yuck), flex has some problems
|
||||||
being 16-bit instead of 32-bit on the GS. A version that fixes these problems
|
with ints being 16-bit instead of 32-bit on the GS. A version that fixes
|
||||||
will be released as soon as the more annoying bugs are out of ORCA/C 2.0.1.
|
these problems will be released as soon as the more annoying bugs are out
|
||||||
|
of ORCA/C 2.0.1.
|
||||||
|
|
||||||
Name: fmake
|
Name: fmake
|
||||||
Version: 1.0
|
Version: 1.0
|
||||||
Author: Felix Blank
|
Author: Felix Blank
|
||||||
Contact: behrenss@informatik.tu-muenchen.de
|
Contact: schaf@meadow.muc.de
|
||||||
Where: /usr/local/bin
|
Where: /usr/local/bin
|
||||||
FTP: ...
|
FTP: ...
|
||||||
|
|
||||||
fmake is Unixish make utility. It only understands a small subset of make
|
fmake is Unixish make utility. It only understands a small subset of make
|
||||||
commands, though, barely enough to maintain small projects. Written originally
|
commands, though, barely enough to maintain small projects. Written originally
|
||||||
by Felix Blank, now "maintained" by Soenke Behrens. The need for this utility
|
by Felix Blank, now "maintained" by Soenke Behrens. The need for this utility
|
||||||
will vanish with the advent of dmake.
|
vanished with the advent of dmake.
|
||||||
|
|
||||||
|
Name: ftn
|
||||||
|
Version: 1.1 (11 Oct 94)
|
||||||
|
Author: Dave J. Roberts. Version 1.1 changes by Devin Reade.
|
||||||
|
Contact: daver@rush.cc.edu, droberts@chaos.bsu.edu
|
||||||
|
Where: /usr/local/bin
|
||||||
|
FTP: ftp.cco.caltech.edu, grind.isca.uiowa.edu
|
||||||
|
|
||||||
|
A utility to display Apple's DTS File Type Notes.
|
||||||
|
|
||||||
Name: getvers
|
Name: getvers
|
||||||
Version: 1.2
|
Version: 1.2
|
||||||
|
@ -266,6 +365,16 @@ FTP: pindarus.cs.uiuc.edu
|
||||||
Gets the rVersion information on a EXE, including name, version, and any
|
Gets the rVersion information on a EXE, including name, version, and any
|
||||||
other information the author wishes to include, printing it to standard out.
|
other information the author wishes to include, printing it to standard out.
|
||||||
|
|
||||||
|
Name: gzip
|
||||||
|
Version: 1.2.4 (Gno)
|
||||||
|
Author: Joseph Lee
|
||||||
|
Contact: eaiu410@ea.oac.uci.edu
|
||||||
|
Where: /usr/local/bin
|
||||||
|
FTP: ftp.cco.caltech.edu, grind.isca.uiowa.edu
|
||||||
|
|
||||||
|
GNU zip -- compress or expand files. Ported from the Free Software
|
||||||
|
Foundation's gzip. Also has functionality of gunzip and gzcat.
|
||||||
|
|
||||||
Name: init
|
Name: init
|
||||||
Version: 1.0
|
Version: 1.0
|
||||||
Author: Phillip Vandry
|
Author: Phillip Vandry
|
||||||
|
@ -286,25 +395,25 @@ FTP: ...
|
||||||
syslogd (log daemon)
|
syslogd (log daemon)
|
||||||
|
|
||||||
Name: joinpara
|
Name: joinpara
|
||||||
Version: 1.0
|
Version: 1.0 (16 Dec 93)
|
||||||
Author: Devin Reade
|
Author: Devin Reade
|
||||||
Contact: glyn@cs.ualberta.ca, glyn@ersys.edm.ab.ca
|
Contact: gdr@myrias.ab.ca
|
||||||
Where: /usr/bin
|
Where: /usr/local/bin
|
||||||
FTP: cco.caltech.edu, grind.isca.uiowa.edu.
|
FTP: ftp.cco.caltech.edu, grind.isca.uiowa.edu.
|
||||||
|
|
||||||
A filter to strip newlines from the middle of paragraphs, but not
|
A filter to strip newlines from the middle of paragraphs, but not
|
||||||
elsewhere. Written to ease the importing of text files into word
|
elsewhere. Written to ease the importing of text files into word
|
||||||
processor documents.
|
processor documents.
|
||||||
|
|
||||||
Name: last
|
Name: last
|
||||||
Version: 1.0
|
Version: 1.1
|
||||||
Author: Steve Reeves
|
Author: Steve Reeves
|
||||||
Contact: reevess@cse.fau.edu
|
Contact: Internet: reevess@cse.fau.edu, GEnie: S.REEVES2
|
||||||
Where: /usr/bin
|
Where: /usr/bin
|
||||||
FTP: grind.isca.uiowa.edu
|
FTP: grind.isca.uiowa.edu
|
||||||
|
|
||||||
last indicates last logins by user or terminal. It searches
|
Displays last logins for specified users or terminals. It searches
|
||||||
through the login accounting file "/etc/wtmp" for this information.
|
through the login accounting file "/var/adm/wtmp" for this information.
|
||||||
It is only useful with GNO's Multi-User package.
|
It is only useful with GNO's Multi-User package.
|
||||||
|
|
||||||
Name: machtype
|
Name: machtype
|
||||||
|
@ -318,24 +427,33 @@ FTP: pindarus.cs.uiuc.edu
|
||||||
memory, versions of GNO, GS/OS, and the ROM, accelerator type if any, and more.
|
memory, versions of GNO, GS/OS, and the ROM, accelerator type if any, and more.
|
||||||
|
|
||||||
Name: makedmake
|
Name: makedmake
|
||||||
Version: 1.1.1
|
Version: 1.1.1 (16 Jan 94)
|
||||||
Author: Devin Reade
|
Author: Ported by Devin Reade
|
||||||
Contact: <glyn@cs.ualberta.ca>,<glyn@ersys.edm.ab.ca>
|
Contact: gdr@myrias.ab.ca
|
||||||
Where: /usr/bin
|
Where: /usr/local/bin
|
||||||
FTP: cco.caltech.edu,grind.isca.uiowa.edu,pindarus.cs.uiuc.edu
|
FTP: ftp.cco.caltech.edu, grind.isca.uiowa.edu.
|
||||||
|
|
||||||
Calculates program dependencies and generates makefiles for dmake.
|
Calculates program dependencies and generates makefiles for dmake.
|
||||||
This is a particularily brain-dead port that will likely be superceded.
|
This is a particularily brain-dead port that will likely be superceded.
|
||||||
(By mkmf?) Suitable for simple dependancies.
|
(By mkmf?) Suitable for simple dependancies.
|
||||||
|
|
||||||
|
Name: makewhatis
|
||||||
|
Version: 1.1 (29 May 94)
|
||||||
|
Author: Devin Reade.
|
||||||
|
Contact: gdr@myrias.ab.ca
|
||||||
|
Where: /usr/sbin
|
||||||
|
FTP: ftp.cco.caltech.edu, grind.isca.uiowa.edu
|
||||||
|
|
||||||
|
Generates the whatis database used by apropos(1) and whatis(1).
|
||||||
|
|
||||||
Name: martian
|
Name: martian
|
||||||
Version: ??
|
Version: ??
|
||||||
Author: Soenke Behrens
|
Author: Soenke Behrens
|
||||||
Contact: behrenss@informatik.tu-muenchen.de
|
Contact: schaf@meadow.muc.de
|
||||||
Where: /usr/local/bin or /usr/local/games
|
Where: /usr/local/bin or /usr/local/games
|
||||||
FTP: ...
|
FTP: ...
|
||||||
|
|
||||||
Creates martian poetry in nroff format. The source is, alas, lost, it seems.
|
Creates martian poetry in nroff format.
|
||||||
|
|
||||||
Name: mem
|
Name: mem
|
||||||
Version: 1.2
|
Version: 1.2
|
||||||
|
@ -346,6 +464,15 @@ FTP: ...
|
||||||
|
|
||||||
Shows memory usage statistics in different formats.
|
Shows memory usage statistics in different formats.
|
||||||
|
|
||||||
|
Name: mkdir
|
||||||
|
Version: 1.2
|
||||||
|
Author: James Brookes
|
||||||
|
Contact: jamesb@ecst.csuchico.edu
|
||||||
|
Where: /bin
|
||||||
|
FTP: ...
|
||||||
|
|
||||||
|
Make a directory.
|
||||||
|
|
||||||
Name: mkfs
|
Name: mkfs
|
||||||
Version: 1.0
|
Version: 1.0
|
||||||
Author: Phillip Vandry
|
Author: Phillip Vandry
|
||||||
|
@ -355,14 +482,15 @@ FTP: ...
|
||||||
|
|
||||||
Formats or erases physical devices and creates file systems on them.
|
Formats or erases physical devices and creates file systems on them.
|
||||||
|
|
||||||
Name: mkdir
|
Name: msort
|
||||||
Version: 1.2
|
Version: 1.0 (14 Jun 94)
|
||||||
Author: James Brookes
|
Author: Devin Reade.
|
||||||
Contact: jamesb@ecst.csuchico.edu
|
Contact: gdr@myrias.ab.ca
|
||||||
Where: /bin
|
Where: /usr/local/bin
|
||||||
FTP: ...
|
FTP: ftp.cco.caltech.edu, grind.isca.uiowa.edu (in file sorts10.shk)
|
||||||
|
|
||||||
Make a directory.
|
Sort a text file in memory lexicographically. Archived together
|
||||||
|
with dsort.
|
||||||
|
|
||||||
Name: mugs
|
Name: mugs
|
||||||
Version: 3.0
|
Version: 3.0
|
||||||
|
@ -395,6 +523,16 @@ FTP: ...
|
||||||
Create a home directory with basic gshrc for new user, and add user
|
Create a home directory with basic gshrc for new user, and add user
|
||||||
to /var/adm/newuser/newusers file for validation by the system operator.
|
to /var/adm/newuser/newusers file for validation by the system operator.
|
||||||
|
|
||||||
|
Name: occ
|
||||||
|
Version: 1.12
|
||||||
|
Author: Soenke Behrens
|
||||||
|
Contact: sbehrens@contech.demon.co.uk
|
||||||
|
Where: /usr/local/bin
|
||||||
|
FTP: ftp.cco.caltech.edu, grind.isca.uiowa.edu
|
||||||
|
|
||||||
|
Unixish front-end for ORCA/C. Particularly useful in combination with
|
||||||
|
dmake. Requires ORCA/C 2.0.3 (compiler version 2.0.2).
|
||||||
|
|
||||||
Name: parent
|
Name: parent
|
||||||
Version: 1.0
|
Version: 1.0
|
||||||
Author: Phillip Vandry
|
Author: Phillip Vandry
|
||||||
|
@ -415,10 +553,28 @@ FTP: ...
|
||||||
Based on talk, phone allows two users to interactively chat in a
|
Based on talk, phone allows two users to interactively chat in a
|
||||||
split-screen format.
|
split-screen format.
|
||||||
|
|
||||||
|
Name: rdial
|
||||||
|
Version: 1.1 (28 Feb 95)
|
||||||
|
Author: Jeremy Rand.
|
||||||
|
Contact: <u8902848@muss.mcmaster.ca>
|
||||||
|
Where: /usr/local/bin
|
||||||
|
FTP: grind.isca.uiowa.edu
|
||||||
|
|
||||||
|
Auto redial a system with a login script.
|
||||||
|
|
||||||
|
Name: rmdir
|
||||||
|
Version: 1.0 (28 Nov 94)
|
||||||
|
Author: Devin Reade.
|
||||||
|
Contact: gdr@myrias.ab.ca
|
||||||
|
Where: /bin
|
||||||
|
FTP: ftp.cco.caltech.edu, grind.isca.uiowa.edu
|
||||||
|
|
||||||
|
Remove empty directories.
|
||||||
|
|
||||||
Name: rndname
|
Name: rndname
|
||||||
Version: 4.0
|
Version: 4.0
|
||||||
Author: Soenke Behrens
|
Author: Soenke Behrens
|
||||||
Contact: behrenss@informatik.tu-muenchen.de
|
Contact: schaf@meadow.muc.de
|
||||||
Where: /usr/local/bin or /usr/local/games
|
Where: /usr/local/bin or /usr/local/games
|
||||||
FTP: ...
|
FTP: ...
|
||||||
|
|
||||||
|
@ -435,6 +591,17 @@ FTP: ...
|
||||||
|
|
||||||
Converts RTF (Rich Text Format) files to text.
|
Converts RTF (Rich Text Format) files to text.
|
||||||
|
|
||||||
|
Name: scpp
|
||||||
|
Version: 1.1 (15 Feb 94)
|
||||||
|
Author: Ported by Devin Reade
|
||||||
|
Contact: gdr@myrias.ab.ca
|
||||||
|
Where: /usr/bin
|
||||||
|
FTP: ftp.cco.caltech.edu, grind.isca.uiowa.edu.
|
||||||
|
|
||||||
|
A selective C preprocessor. It will only interpret directives that it
|
||||||
|
is told to interpret. This makes scpp useful for making source files easier
|
||||||
|
to read by removing unnecessary code (such as that for other architectures).
|
||||||
|
|
||||||
Name: sendmail
|
Name: sendmail
|
||||||
Version: 1.1
|
Version: 1.1
|
||||||
Author: Phillip Vandry
|
Author: Phillip Vandry
|
||||||
|
@ -473,30 +640,59 @@ FTP: ...
|
||||||
|
|
||||||
Causes GS/OS to commit all pending data to disk.
|
Causes GS/OS to commit all pending data to disk.
|
||||||
|
|
||||||
Name: timelimit
|
Name: tee
|
||||||
Version: 1.1
|
Version: 1.1 (23 Nov 93)
|
||||||
Author: Devin Reade
|
Author: Devin Reade
|
||||||
Contact: glyn@cs.ualberta.ca, glyn@ersys.edm.ab.ca
|
Contact: gdr@myrias.ab.ca
|
||||||
|
Where: /bin
|
||||||
|
FTP: ftp.cco.caltech.edu, grind.isca.uiowa.edu.
|
||||||
|
|
||||||
|
Pipe fitting: copies stdin to stdout while making copies of the stream
|
||||||
|
in one or more text files.
|
||||||
|
|
||||||
|
Name: timelimit
|
||||||
|
Version: 1.1 (16 Dec 93)
|
||||||
|
Author: Ported by Devin Reade
|
||||||
|
Contact: gdr@myrias.ab.ca
|
||||||
Where: /usr/bin
|
Where: /usr/bin
|
||||||
FTP: cco.caltech.edu, grind.isca.uiowa.edu.
|
FTP: ftp.cco.caltech.edu, grind.isca.uiowa.edu.
|
||||||
|
|
||||||
Limits the run time of a process; when the time is up, it sends the
|
Limits the run time of a process; when the time is up, it sends the
|
||||||
specified process a series of SIGINTs.
|
specified process a series of SIGINTs.
|
||||||
|
|
||||||
Name: udl
|
Name: tn
|
||||||
Version: 1.03
|
Version: 1.1 (11 Oct 94)
|
||||||
Author: Soenke Behrens
|
Author: Dave J. Roberts. Version 1.1 changes by Devin Reade.
|
||||||
Contact: behrenss@informatik.tu-muenchen.de
|
Contact: daver@rush.cc.edu, droberts@chaos.bsu.edu
|
||||||
Where: /usr/local/bin
|
Where: /usr/local/bin
|
||||||
FTP: ...
|
FTP: ftp.cco.caltech.edu, grind.isca.uiowa.edu
|
||||||
|
|
||||||
Converts text between the CR, LF and CR/LF forms. Somewhat on the slow side,
|
A utility to display Apple's DTS Technical Notes.
|
||||||
so don't use it.
|
|
||||||
|
Name: udl
|
||||||
|
Version: 1.14
|
||||||
|
Author: Soenke Behrens, Devin Reade
|
||||||
|
Contact: sbehrens@contech.demon.co.uk, gdr@myrias.ab.ca
|
||||||
|
Where: /usr/local/bin
|
||||||
|
FTP: ftp.cco.caltech.edu, grind.isca.uiowa.edu
|
||||||
|
|
||||||
|
Converts text between the CR, LF and CR/LF forms. Also available for Unix
|
||||||
|
machines, reasonably fast yet secure.
|
||||||
|
|
||||||
|
Name: uname
|
||||||
|
Version: 2.0.2
|
||||||
|
Author: Ian Schmidt
|
||||||
|
Contact: irsman@drift.winternet.com
|
||||||
|
Where: /bin/
|
||||||
|
FTP: grind.isca.uiowa.edu
|
||||||
|
|
||||||
|
Prints the name of the UNIX system (in this case GNO/ME) plus various
|
||||||
|
other information such as your hostname if you are running the MU package.
|
||||||
|
|
||||||
Name: unarj
|
Name: unarj
|
||||||
Version: 2.41
|
Version: 2.42
|
||||||
Author: Soenke Behrens
|
Author: Soenke Behrens
|
||||||
Contact: behrenss@informatik.tu-muenchen.de
|
Contact: schaf@meadow.muc.de
|
||||||
Where: /usr/local/bin
|
Where: /usr/local/bin
|
||||||
FTP: ...
|
FTP: ...
|
||||||
|
|
||||||
|
@ -505,7 +701,7 @@ FTP: ...
|
||||||
Name: unpp
|
Name: unpp
|
||||||
Version: 1.1
|
Version: 1.1
|
||||||
Author: Soenke Behrens
|
Author: Soenke Behrens
|
||||||
Contact: behrenss@informatik.tu-muenchen.de
|
Contact: schaf@meadow.muc.de
|
||||||
Where: /usr/local/bin
|
Where: /usr/local/bin
|
||||||
FTP: ...
|
FTP: ...
|
||||||
|
|
||||||
|
@ -531,6 +727,16 @@ FTP: ...
|
||||||
Keeps track of system load averages for the uptime utility over the last
|
Keeps track of system load averages for the uptime utility over the last
|
||||||
1, 5 and 15 minutes.
|
1, 5 and 15 minutes.
|
||||||
|
|
||||||
|
Name: whereis
|
||||||
|
Version: v1.1 (2 Jan 93)
|
||||||
|
Author: v1.1 update by Devin Reade
|
||||||
|
Contact: gdr@myrias.ab.ca
|
||||||
|
Where: /usr/bin
|
||||||
|
FTP: ftp.cco.caltech.edu,grind.isca.uiowa.edu.
|
||||||
|
|
||||||
|
whereis searches certain directories (/bin, /usr/bin, /usr/man, et cetera) and
|
||||||
|
reports the location of source, executables, and man pages.
|
||||||
|
|
||||||
Name: wrap
|
Name: wrap
|
||||||
Version: 1.1
|
Version: 1.1
|
||||||
Author: Phillip Vandry
|
Author: Phillip Vandry
|
||||||
|
@ -541,6 +747,27 @@ FTP: ...
|
||||||
Word wraps text to a certain length (79 default). Also filters binary
|
Word wraps text to a certain length (79 default). Also filters binary
|
||||||
data and is very fast.
|
data and is very fast.
|
||||||
|
|
||||||
|
Name: write
|
||||||
|
Version: 2.1
|
||||||
|
Author: Leslie M. Barstow III
|
||||||
|
Contact: wdphoenix@delphi.com
|
||||||
|
Where: /usr/bin
|
||||||
|
FTP: ...
|
||||||
|
|
||||||
|
write is a simple utility which writes a message to a user, no matter what
|
||||||
|
terminal he or she is on. The format is: write username [message]
|
||||||
|
If you do not input a message, you will be prompted for message lines until
|
||||||
|
you enter a blank line.
|
||||||
|
|
||||||
|
Name: xargs
|
||||||
|
Version: 0.9 (3 Mar 95)
|
||||||
|
Author: Jeremy Rand.
|
||||||
|
Contact: <u8902848@muss.mcmaster.ca>
|
||||||
|
Where: /usr/local/bin
|
||||||
|
FTP: grind.isca.uiowa.edu
|
||||||
|
|
||||||
|
Pass parameters to a command through standard input.
|
||||||
|
|
||||||
Name: xbiff
|
Name: xbiff
|
||||||
Version: 1.0
|
Version: 1.0
|
||||||
Author: James Brookes
|
Author: James Brookes
|
||||||
|
@ -553,13 +780,28 @@ aurally and visibly when the user has mail. OA-clicking on the window's
|
||||||
content region causes a title bar to appear, allowing the window to be moved.
|
content region causes a title bar to appear, allowing the window to be moved.
|
||||||
|
|
||||||
Name: xclock
|
Name: xclock
|
||||||
Version: 1.0
|
Version: 1.12
|
||||||
Author: James Brookes
|
Author: Dave J. Roberts
|
||||||
Contact: jamesb@ecst.csuchico.edu
|
Contact: dave@mary.iia.org
|
||||||
Where: */system/desk.accs/
|
Where: /usr/X/bin
|
||||||
FTP: ...
|
FTP: ftp.cco.caltech.edu, grind.isca.uiowa.edu
|
||||||
|
|
||||||
|
graphical analog time display unit
|
||||||
|
|
||||||
XClock is an NDA analog clock, similar to xclock -analog under XWindows.
|
Name: xlogin
|
||||||
OA-clicking on the window's content region causes a title bar to appear,
|
Version: 2.21
|
||||||
allowing the window to be moved and/or resized.
|
Author: Dave J. Roberts
|
||||||
|
Contact: dave@mary.iia.org
|
||||||
|
Where: /usr/X/bin
|
||||||
|
FTP: ftp.cco.caltech.edu, grind.isca.uiowa.edu
|
||||||
|
|
||||||
|
|
||||||
|
Name: zsh
|
||||||
|
Version: 2.0
|
||||||
|
Author: Leslie M. Barstow III
|
||||||
|
Contact: wdphoenix@delphi.com
|
||||||
|
Where: /bin
|
||||||
|
FTP:
|
||||||
|
|
||||||
|
zsh is a program used to put a user's account in suspension.
|
||||||
|
It prints a message and then exits.
|
||||||
|
|
57
usr.orca.bin/describe/descu.8
Normal file
57
usr.orca.bin/describe/descu.8
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
.TH DESCU 8 "System Administration" "7 May 1995" "Version 1.0"
|
||||||
|
.SH NAME
|
||||||
|
descu \- the describe(1) source updater
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.BR descu " [" -hV ]
|
||||||
|
.I sourcefile
|
||||||
|
.I patchfile1
|
||||||
|
[
|
||||||
|
.IR patchfile2 " ..."
|
||||||
|
]
|
||||||
|
.SH DESCRIPTION
|
||||||
|
.BR descu
|
||||||
|
updates the describe source file
|
||||||
|
.I sourcefile
|
||||||
|
by applying the new and updated records from the \fIpatchfile\fRs
|
||||||
|
and prints the result to standard output.
|
||||||
|
.LP
|
||||||
|
.IR Patchfile s
|
||||||
|
are just one or more describe source entries as defined in
|
||||||
|
.BR descc (8).
|
||||||
|
(They have nothing to do with
|
||||||
|
.BR patch (1).)
|
||||||
|
.LP
|
||||||
|
.IR Patchfile s
|
||||||
|
are assumed to contain at most one entry (in all listed
|
||||||
|
.IR patchfile s)
|
||||||
|
for a given program, keyed on the
|
||||||
|
.BR Name:
|
||||||
|
field. If an entry in
|
||||||
|
.IR patchfile
|
||||||
|
is already in
|
||||||
|
.IR sourcefile ,
|
||||||
|
it replaces the original; otherwise the entry is appended. In both
|
||||||
|
cases, the output is sorted lexicographically, based on the
|
||||||
|
.BR Name:
|
||||||
|
field.
|
||||||
|
.LP
|
||||||
|
.BR descu
|
||||||
|
will create the file
|
||||||
|
.B describe.rej
|
||||||
|
in the current directory. This contains all records that were removed
|
||||||
|
from
|
||||||
|
.IR sourcefile .
|
||||||
|
.SH OPTIONS
|
||||||
|
.nf
|
||||||
|
\fB-h\fR Show usage information.
|
||||||
|
|
||||||
|
\fB-V\fR Show version information.
|
||||||
|
.fi
|
||||||
|
.SH AUTHOR
|
||||||
|
Devin Reade <gdr@myrias.ab.ca>
|
||||||
|
.SH "SEE ALSO"
|
||||||
|
.BR apropos (1),
|
||||||
|
.BR describe (1),
|
||||||
|
.BR man (1),
|
||||||
|
.BR whatis (1),
|
||||||
|
.BR descc (8).
|
497
usr.orca.bin/describe/descu.c
Normal file
497
usr.orca.bin/describe/descu.c
Normal file
|
@ -0,0 +1,497 @@
|
||||||
|
/*
|
||||||
|
* descu - describe(1) update utility for maintaining describe source files
|
||||||
|
*
|
||||||
|
* Usage: descu [-hV] sourcefile patchfile1 [patchfile2 ...]
|
||||||
|
*
|
||||||
|
* Options:
|
||||||
|
* -h show usage information and exit.
|
||||||
|
* -V show version information
|
||||||
|
*
|
||||||
|
* Copyright 1995 by Devin Reade for James Brookes' describe(1) utility.
|
||||||
|
* See the included README file and man page for details.
|
||||||
|
*
|
||||||
|
* $Id: descu.c,v 1.1 1996/01/22 01:38:05 gdr Exp $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma optimize -1
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <assert.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
#include <getopt.h>
|
||||||
|
#include "desc.h"
|
||||||
|
|
||||||
|
#define _VERSION_ "v1.0.1"
|
||||||
|
#define MAX_BUFFER 65534
|
||||||
|
#define SLOTS_QUANTUM 20
|
||||||
|
#define REJECT_FILE "descu.rej"
|
||||||
|
|
||||||
|
#ifndef __ORCAC__
|
||||||
|
ssize_t read(int, void *, size_t);
|
||||||
|
#endif
|
||||||
|
char *strerror(int);
|
||||||
|
void convert (char *);
|
||||||
|
|
||||||
|
char *versionStr = _VERSION_;
|
||||||
|
static char *header=NULL; /* comments before the first describe entry */
|
||||||
|
static char *trailer=NULL; /* comments after the last describe entry */
|
||||||
|
|
||||||
|
short oflag;
|
||||||
|
short Vflag;
|
||||||
|
short errflag;
|
||||||
|
|
||||||
|
descEntry **entryArray1=NULL;
|
||||||
|
descEntry **entryArray2=NULL;
|
||||||
|
int array1SlotsAlloced=0;
|
||||||
|
int array2SlotsAlloced=0;
|
||||||
|
int array1SlotsUsed=0;
|
||||||
|
int array2SlotsUsed=0;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* inhale - read file into buffer
|
||||||
|
*
|
||||||
|
* Pre: <pathname> is the path name of the file to read in
|
||||||
|
*
|
||||||
|
* Post: returns a malloc'd NULL-terminated buffer containing the contents
|
||||||
|
* of file <pathname>. On error, returns NULL and prints a suitable
|
||||||
|
* message.
|
||||||
|
*
|
||||||
|
* On the Apple IIgs, CR's are also converted to LF's
|
||||||
|
*/
|
||||||
|
|
||||||
|
char *inhale (char *pathname) {
|
||||||
|
char *buffer;
|
||||||
|
long bytecount, bytes_read;
|
||||||
|
ssize_t i;
|
||||||
|
int fd;
|
||||||
|
|
||||||
|
/* open the file */
|
||||||
|
if ((fd = open(pathname,O_RDONLY))==-1) {
|
||||||
|
fprintf(stderr,"inhale: open of %s failed: %s\n",
|
||||||
|
pathname,strerror(errno));
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* create the buffer */
|
||||||
|
bytecount = lseek(fd,(off_t) 0,SEEK_END);
|
||||||
|
if (bytecount > MAX_BUFFER) {
|
||||||
|
fprintf(stderr,"descu internal error: cannot handle files greater"
|
||||||
|
"than %d bytes\n due to a compiler bug. Sorry.\n",
|
||||||
|
MAX_BUFFER);
|
||||||
|
exit(-1);
|
||||||
|
}
|
||||||
|
lseek(fd,(off_t) 0, SEEK_SET);
|
||||||
|
if ((buffer = malloc(bytecount+1))==NULL) {
|
||||||
|
fprintf(stderr,"inhale: malloc of %ld-byte buffer failed for file %s:%s\n",
|
||||||
|
bytecount+1,pathname,strerror(errno));
|
||||||
|
close(fd);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* read file into the buffer */
|
||||||
|
bytes_read=0;
|
||||||
|
while (bytes_read < bytecount) {
|
||||||
|
i = read(fd,&buffer[bytes_read],(size_t)bytecount-bytes_read);
|
||||||
|
if (i==-1) {
|
||||||
|
fprintf(stderr,"inhale: read failed on file %s:%s\n",
|
||||||
|
pathname,strerror(errno));
|
||||||
|
free(buffer);
|
||||||
|
close(fd);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
bytes_read += i;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* clean up and return buffer */
|
||||||
|
close(fd);
|
||||||
|
buffer[bytecount] = '\0';
|
||||||
|
|
||||||
|
#ifdef __ORCAC__
|
||||||
|
/* convert CR to LF */
|
||||||
|
{
|
||||||
|
char *p;
|
||||||
|
|
||||||
|
for (p=buffer; *p ; p++) {
|
||||||
|
if (*p == 0x0D) *p = 0x0A;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return buffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* extract_info -- take a string buffer containing the describe information
|
||||||
|
* and return a malloc'd descEntry structure containing
|
||||||
|
* pointers into the buffer of the various parts. Also
|
||||||
|
* modifies the buffer so that there is a '\0' character
|
||||||
|
* between the parts.
|
||||||
|
*/
|
||||||
|
|
||||||
|
descEntry *extract_info(char *source) {
|
||||||
|
|
||||||
|
char *p;
|
||||||
|
descEntry *entry;
|
||||||
|
|
||||||
|
if ((entry = malloc(sizeof(descEntry))) == NULL) {
|
||||||
|
perror("add_entry: couldn't allocate new entry");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* extract out name */
|
||||||
|
if (((entry->name = strstr(source,NAME_SHORT))==NULL) ||
|
||||||
|
((p = strchr(source,'\n'))==NULL)) {
|
||||||
|
fprintf(stderr,"bad or missing describe field: \"%s\"\n"
|
||||||
|
"describe entry is:\n%s\n",NAME,source);
|
||||||
|
free(entry);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* extract out data */
|
||||||
|
entry->data = p+1;
|
||||||
|
|
||||||
|
/* terminate the name, dropping trailing space */
|
||||||
|
do { --p; } while (isspace(*p));
|
||||||
|
*(p+1) = '\0';
|
||||||
|
|
||||||
|
return entry;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* add_entry -- add entry to the descTable, even if it already exists.
|
||||||
|
*/
|
||||||
|
|
||||||
|
void add_entry(descEntry *entry, int initial_buffer) {
|
||||||
|
descEntry **e, ***array;
|
||||||
|
int *slotsAlloced, *slotsUsed;
|
||||||
|
|
||||||
|
if (initial_buffer) {
|
||||||
|
array = &entryArray1;
|
||||||
|
slotsAlloced = &array1SlotsAlloced;
|
||||||
|
slotsUsed = &array1SlotsUsed;
|
||||||
|
} else {
|
||||||
|
array = &entryArray2;
|
||||||
|
slotsAlloced = &array2SlotsAlloced;
|
||||||
|
slotsUsed = &array2SlotsUsed;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* grow array if necessary */
|
||||||
|
if (*slotsAlloced == *slotsUsed) {
|
||||||
|
*slotsAlloced += SLOTS_QUANTUM;
|
||||||
|
if (*array) {
|
||||||
|
e = realloc(*array,(*slotsAlloced) * sizeof(descEntry *));
|
||||||
|
} else {
|
||||||
|
e = malloc((*slotsAlloced) * sizeof(descEntry *));
|
||||||
|
}
|
||||||
|
if (e == NULL) {
|
||||||
|
perror("couldn't grow describe array");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
*array = e;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* add in the entry */
|
||||||
|
(*array)[*slotsUsed] = entry;
|
||||||
|
(*slotsUsed)++;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* insert - insert all entries contained in buffer into the descTable.
|
||||||
|
* If initial_buffer is non-zero, then use any comments preceeding
|
||||||
|
* the first entry as the output file header, and any comments
|
||||||
|
* following the last entry as the output file trailer. If
|
||||||
|
* initial_buffer is zero, then the respective comment blocks are
|
||||||
|
* ignored, effectively deleting them from the output.
|
||||||
|
*/
|
||||||
|
|
||||||
|
void insert(char *buffer, int initial_buffer) {
|
||||||
|
char *p, *q;
|
||||||
|
descEntry *entry;
|
||||||
|
|
||||||
|
/* pull out the header (if nec) and init p */
|
||||||
|
if (initial_buffer) header = buffer;
|
||||||
|
p = strstr(buffer,NAME_SHORT);
|
||||||
|
if(!p) return; /* buffer doesn't have any describe entries! */
|
||||||
|
*(p-1)='\0';
|
||||||
|
|
||||||
|
/* add all but the last entry */
|
||||||
|
while ((q=strstr(p+1,NAME_SHORT))!=NULL) {
|
||||||
|
*(q-1)='\0';
|
||||||
|
entry = extract_info(p);
|
||||||
|
if (entry) add_entry(entry, initial_buffer);
|
||||||
|
p=q;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* extract out the trailer and add the last entry */
|
||||||
|
if ((q = strstr(p,"\n#"))==NULL) {
|
||||||
|
if (initial_buffer) trailer="";
|
||||||
|
} else {
|
||||||
|
if (initial_buffer) trailer=q+1;
|
||||||
|
*q = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
|
entry = extract_info(p);
|
||||||
|
if (entry) add_entry(entry,initial_buffer);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* sortArray - do a heapsort on <array> consisting of <slotsUsed> elements.
|
||||||
|
* The sort is based on the field array[i]->name, sorted
|
||||||
|
* lexicographically.
|
||||||
|
*/
|
||||||
|
|
||||||
|
void sortArray(descEntry **array, int slotsUsed) {
|
||||||
|
|
||||||
|
int l, j, ir, i;
|
||||||
|
descEntry *rra;
|
||||||
|
|
||||||
|
if (slotsUsed==1) return; /* no need to sort one element */
|
||||||
|
--array; /* fudge since the algorithm was designed */
|
||||||
|
/* for a unit-indexing */
|
||||||
|
|
||||||
|
l = (slotsUsed>>1) + 1;
|
||||||
|
ir = slotsUsed;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The index l will be decremented from its initial value down to 0 during
|
||||||
|
* the heap creation phase. Once it reaches 0, the index ir will be
|
||||||
|
* decremented from its initial value down to 0 during the heap selection
|
||||||
|
* phase.
|
||||||
|
*/
|
||||||
|
for (;;) {
|
||||||
|
if (l > 1) /* still in creation phase */
|
||||||
|
rra = array[--l];
|
||||||
|
else { /* in selection phase */
|
||||||
|
rra= array[ir]; /* clear a space at the end of array */
|
||||||
|
array[ir] = array[1]; /* retire the top of the heap into it */
|
||||||
|
if (--ir == 1) { /* done with the last promotion */
|
||||||
|
array[1] = rra;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
i = l; /* set up to sift down element rra to its proper place */
|
||||||
|
j = l << 1;
|
||||||
|
while (j<=ir) {
|
||||||
|
if (j<ir && (strcmp(array[j]->name,array[j+1]->name)<0)) ++j;
|
||||||
|
if (strcmp(rra->name,array[j]->name)<0) { /* demote rra */
|
||||||
|
array[i] = array[j];
|
||||||
|
i = j;
|
||||||
|
j += i;
|
||||||
|
} else j = ir + 1; /* this is rra's level; set j to terminate */
|
||||||
|
} /* the sift-down */
|
||||||
|
array[i] = rra;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ns_strcmp (no-space string compare) -- compare two strings, ignoring
|
||||||
|
* a leading NAME_SHORT and whitespace, and ignoring trailing
|
||||||
|
* whitespace.
|
||||||
|
*
|
||||||
|
* Returns zero if strings are equal, -1 if a<b, 1 if a>b.
|
||||||
|
* The following are therefore equal:
|
||||||
|
* "Name: test "
|
||||||
|
* "Name: test "
|
||||||
|
* The following are inequal:
|
||||||
|
* "Name: one"
|
||||||
|
* "Name: One"
|
||||||
|
*/
|
||||||
|
|
||||||
|
int ns_strcmp (char *a, char *b) {
|
||||||
|
char *p;
|
||||||
|
size_t len;
|
||||||
|
|
||||||
|
/* strip NAME_SHORT and leading space */
|
||||||
|
len = strlen(NAME_SHORT);
|
||||||
|
a+=len;
|
||||||
|
b+=len;
|
||||||
|
while (isspace(*a)) a++;
|
||||||
|
while (isspace(*b)) b++;
|
||||||
|
|
||||||
|
/* strip trailing space */
|
||||||
|
p = a + strlen(a);
|
||||||
|
do {
|
||||||
|
--p;
|
||||||
|
} while (isspace(*p));
|
||||||
|
*(p+1) = '\0';
|
||||||
|
|
||||||
|
p = b + strlen(b);
|
||||||
|
do {
|
||||||
|
--p;
|
||||||
|
} while (isspace(*p));
|
||||||
|
*(p+1) = '\0';
|
||||||
|
|
||||||
|
/* do the string comparison */
|
||||||
|
while (*a && *b) {
|
||||||
|
if (*a < *b) return -1;
|
||||||
|
if (*a > *b) return 1;
|
||||||
|
a++; b++;
|
||||||
|
}
|
||||||
|
if (*a == *b) return 0;
|
||||||
|
else if (*a) return -1;
|
||||||
|
else return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void version (char *progName) {
|
||||||
|
fprintf(stderr,
|
||||||
|
"%s version %s Copyright 1995 Devin Reade\n"
|
||||||
|
"Freeware. See the manual page for copying restrictions.\n",
|
||||||
|
progName,versionStr);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Usage -- print usage info and exit
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
void usage(char *progName) {
|
||||||
|
|
||||||
|
if (!Vflag || errflag) {
|
||||||
|
fprintf(stderr,
|
||||||
|
"%s -- describe(1) source update utility\n"
|
||||||
|
"Usage: %s [-hV] sourcefile patchfile1 [patchfile2 ...]\n"
|
||||||
|
"\t-h\tshow usage information\n"
|
||||||
|
"\t-V\tshow version information\n\n",
|
||||||
|
progName,progName);
|
||||||
|
}
|
||||||
|
version(progName);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* need I say it?
|
||||||
|
*/
|
||||||
|
|
||||||
|
int main(int argc, char **argv) {
|
||||||
|
char *buffer;
|
||||||
|
int i, j;
|
||||||
|
FILE *outfp, *rejfp;
|
||||||
|
int c;
|
||||||
|
char *outputfile=NULL;
|
||||||
|
int compare;
|
||||||
|
|
||||||
|
#ifdef STACK_CHECK
|
||||||
|
begin_stack_check();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* initialize */
|
||||||
|
errflag=0;
|
||||||
|
oflag=0;
|
||||||
|
|
||||||
|
/* parse command line */
|
||||||
|
while ((c=getopt(argc,argv,"ho:V"))!=EOF) {
|
||||||
|
switch (c) {
|
||||||
|
case 'o':
|
||||||
|
outputfile = optarg;
|
||||||
|
oflag++;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'V':
|
||||||
|
Vflag++;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'h':
|
||||||
|
default:
|
||||||
|
errflag++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* error and exit if necessary */
|
||||||
|
if (errflag || (argc-optind<2)) usage(basename(argv[0]));
|
||||||
|
|
||||||
|
/* show version info */
|
||||||
|
if (Vflag) version(basename(argv[0]));
|
||||||
|
|
||||||
|
/* open output (if nec) and reject file */
|
||||||
|
if (oflag) {
|
||||||
|
if ((outfp = fopen(outputfile,"w+"))==NULL) {
|
||||||
|
perror("main: couldn't open output file");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
outfp = stdout;
|
||||||
|
}
|
||||||
|
if ((rejfp = fopen(REJECT_FILE,"w+"))==NULL) {
|
||||||
|
perror("main: couldn't open rejects file");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* read in original describe source file */
|
||||||
|
buffer = inhale(argv[optind]);
|
||||||
|
insert(buffer,1);
|
||||||
|
|
||||||
|
/* insert describe patch files */
|
||||||
|
for (optind++; optind<argc; optind++) {
|
||||||
|
buffer = inhale(argv[optind]);
|
||||||
|
insert(buffer,0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* sort the two arrays */
|
||||||
|
sortArray(entryArray1,array1SlotsUsed);
|
||||||
|
sortArray(entryArray2,array2SlotsUsed);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* merge the two arrays, printing out the result
|
||||||
|
*/
|
||||||
|
i=0; j=0;
|
||||||
|
|
||||||
|
/* print the header */
|
||||||
|
fprintf(outfp,"%s\n",header);
|
||||||
|
|
||||||
|
/* first stage; merge while we have two arrays */
|
||||||
|
while ((i<array1SlotsUsed) && (j<array2SlotsUsed)) {
|
||||||
|
compare = ns_strcmp (entryArray1[i]->name, entryArray2[j]->name);
|
||||||
|
if (compare < 0) {
|
||||||
|
fprintf(outfp,"%s\n%s\n",entryArray1[i]->name,entryArray1[i]->data);
|
||||||
|
i++;
|
||||||
|
} else if (compare > 0) {
|
||||||
|
fprintf(outfp,"%s\n%s\n",entryArray2[j]->name,entryArray2[j]->data);
|
||||||
|
j++;
|
||||||
|
} else {
|
||||||
|
fprintf(rejfp,"%s\n%s\n",entryArray1[i]->name,entryArray1[i]->data);
|
||||||
|
fprintf(outfp,"%s\n%s\n",entryArray2[j]->name,entryArray2[j]->data);
|
||||||
|
i++; j++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* second stage; print out remaining list */
|
||||||
|
while (i<array1SlotsUsed) {
|
||||||
|
fprintf(outfp,"%s\n%s\n",entryArray1[i]->name,entryArray1[i]->data);
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
while (j<array2SlotsUsed) {
|
||||||
|
fprintf(outfp,"%s\n%s\n",entryArray2[j]->name,entryArray2[j]->data);
|
||||||
|
j++;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* print the trailer */
|
||||||
|
fprintf(outfp,"%s",trailer);
|
||||||
|
|
||||||
|
/* close the files and exit */
|
||||||
|
fclose(rejfp);
|
||||||
|
if (oflag) fclose(outfp);
|
||||||
|
|
||||||
|
#ifdef STACK_CHECK
|
||||||
|
fprintf(stderr,"stack usage: %d bytes\n",end_stack_check());
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
49
usr.orca.bin/describe/makefile.mk
Normal file
49
usr.orca.bin/describe/makefile.mk
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
#
|
||||||
|
# This is the makefile for the describe(1) package. It is for use
|
||||||
|
# with dmake(1).
|
||||||
|
#
|
||||||
|
|
||||||
|
# Use -DSTACK_CHECK in CFLAGS to show stack usage.
|
||||||
|
|
||||||
|
CFLAGS += -O -w -v -I/usr/include -s768
|
||||||
|
LDFLAGS += -v
|
||||||
|
LDLIBS += -l/usr/lib/lgetopt -l/usr/lib/stack
|
||||||
|
BINDIR = /usr/local/bin
|
||||||
|
SBINDIR = /usr/sbin
|
||||||
|
MANDIR = /usr/man
|
||||||
|
INSTALL = /bin/cp
|
||||||
|
|
||||||
|
build: describe descc descu
|
||||||
|
|
||||||
|
descc: descc.o basename.o
|
||||||
|
@purge
|
||||||
|
$(CC) $(LDFLAGS) $< -o $@ $(LDLIBS)
|
||||||
|
|
||||||
|
describe: describe.o basename.o
|
||||||
|
@purge
|
||||||
|
$(CC) $(LDFLAGS) $< -o $@ $(LDLIBS)
|
||||||
|
|
||||||
|
descu: descu.o basename.o
|
||||||
|
@purge
|
||||||
|
$(CC) $(LDFLAGS) $< -o $@ $(LDLIBS)
|
||||||
|
|
||||||
|
basename.o: basename.c
|
||||||
|
$(CC) -c $(CFLAGS) basename.c
|
||||||
|
|
||||||
|
descc.o: descc.c desc.h
|
||||||
|
$(CC) -c $(CFLAGS) descc.c
|
||||||
|
|
||||||
|
describe.o: describe.c desc.h
|
||||||
|
$(CC) -c $(CFLAGS) describe.c
|
||||||
|
|
||||||
|
descu.o: descu.c desc.h
|
||||||
|
$(CC) -c $(CFLAGS) descu.c
|
||||||
|
|
||||||
|
install:
|
||||||
|
$(RM) -f /usr/local/bin/descc
|
||||||
|
$(INSTALL) describe $(BINDIR)
|
||||||
|
$(INSTALL) descc $(SBINDIR)
|
||||||
|
$(INSTALL) descu $(SBINDIR)
|
||||||
|
$(INSTALL) describe.1 $(MANDIR)/man1
|
||||||
|
$(INSTALL) descc.8 $(MANDIR)/man8
|
||||||
|
$(INSTALL) descu.8 $(MANDIR)/man8
|
|
@ -1,31 +0,0 @@
|
||||||
About Describe
|
|
||||||
~~~~~~~~~~~~~~
|
|
||||||
First off: make sure the directory /usr/local/lib exists!!!
|
|
||||||
|
|
||||||
This is yet another project I've been sitting on for a while, but have
|
|
||||||
finally decided to release. The basic idea of the 'describe' package
|
|
||||||
(the descc "compiler" and describe itself) is to provide a quick, easy
|
|
||||||
way of accessing information related to the utilities which so many
|
|
||||||
different people are releasing these days. The reason it sat around on
|
|
||||||
my harddrive so long is I was having qualms about its designated role in
|
|
||||||
life. I wasn't sure exactly what I wanted it to do. Well, I've decided
|
|
||||||
to KISS for now: descc simply compiles the utility list, which I maintain,
|
|
||||||
into a (very) simple "database" located in /usr/local/lib/. The companion
|
|
||||||
utility 'describe' is used to fetch information about a particular utility
|
|
||||||
from this "database".
|
|
||||||
|
|
||||||
descc is fairly limited, as is the "database" format itself. Part of the
|
|
||||||
KISS (or it wouldn't be out now) design philosophy ;). Usage is simple:
|
|
||||||
when you get a new listing (I'll provide monthly updates), simply "descc
|
|
||||||
<filename>" where <filename> is the name of the newly released update.
|
|
||||||
descc will simply write over the old database and replace it with the
|
|
||||||
new (note: no appendages allowed).
|
|
||||||
|
|
||||||
As always, coments are appreciated. And, moreso than on other projects,
|
|
||||||
I'd appreciate some comments about the direction I'm going in, suggestions
|
|
||||||
as to where to take this, etc. I have a feeling that some fields in the
|
|
||||||
format (eg, FTP:) are rather useless, and I'd like to know what you guys
|
|
||||||
out there think.
|
|
||||||
|
|
||||||
James Brookes
|
|
||||||
jamesb@ecst.csuchico.edu
|
|
Loading…
Reference in New Issue
Block a user