Path: utzoo!attcan!uunet!allbery
From: allbery@uunet.UU.NET (Brandon S. Allbery - comp.sources.misc)
Newsgroups: comp.sources.misc
Subject: v08i081: libhoward portability library, part 3 of 9
Message-ID: <68939@uunet.UU.NET>
Date: 1 Oct 89 14:42:54 GMT
Sender: allbery@uunet.UU.NET
Reply-To: howard@dahlbeck.ericsson.se (Howard Gayle)
Lines: 1858
Approved: allbery@uunet.UU.NET (Brandon S. Allbery - comp.sources.misc)
Posting-number: Volume 8, Issue 81
Submitted-by: howard@dahlbeck.ericsson.se (Howard Gayle)
Archive-name: libhoward/part03
#! /bin/sh
# This is a shell archive. Remove anything before this line, then feed it
# into a shell via "sh file" or similar. To overwrite existing files,
# type "sh file -c".
# The tool that generated this appeared in the comp.sources.unix newsgroup;
# send mail to comp-sources-unix@uunet.uu.net if you want that tool.
# If this archive is complete, you will see the following message at the end:
# "End of archive 3 (of 9)."
# Contents: FREEZE Makefile a2l.c getlic.c malf.3 mk-smp.c new-Make.b
# strspn.c
# Wrapped by howard@hasse on Mon Sep 25 07:08:06 1989
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'FREEZE' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'FREEZE'\"
else
echo shar: Extracting \"'FREEZE'\" \(5524 characters\)
sed "s/^X//" >'FREEZE' <<'END_OF_FILE'
X$Header: FREEZE,v 1.7 89/09/25 07:03:19 howard Exp $
X$Log: FREEZE,v $
X# Revision 1.7 89/09/25 07:03:19 howard
X# *** empty log message ***
X#
X# Revision 1.6 89/09/23 14:24:24 howard
X# *** empty log message ***
X#
X# Revision 1.5 89/09/19 09:09:46 howard
X# *** empty log message ***
X#
X# Revision 1.4 89/08/29 17:19:00 howard
X# *** empty log message ***
X#
X# Revision 1.3 89/08/11 14:52:36 howard
X# *** empty log message ***
X#
X========================================
XFREEZE.c 1.1 1989-08-05 08:46:25
XMakeCommon 1.3 1989-09-22 13:46:45
XMakefile 1.24 1989-09-23 15:23:28
XREADME 1.3 1989-09-23 15:25:11
Xa2.3 1.2 1989-08-10 13:53:23
Xa2.h 1.4 1989-06-22 15:11:58
Xa2d.c 1.7 1989-08-09 18:13:20
Xa2i.c 1.7 1989-08-10 13:02:15
Xa2l.c 1.12 1989-08-11 13:07:15
Xa2smp.c 1.11 1989-08-15 13:33:10
Xa2u.c 1.6 1989-08-11 14:08:33
Xa2ul.c 1.7 1989-08-11 14:17:25
Xb.bib 1.1 1989-09-20 12:35:29
Xcat-path.1 1.1 1989-09-21 10:52:02
Xcat-path.b 1.1 1989-09-21 08:01:10
Xcia.1 1.1 1989-09-23 14:11:22
Xcia.b 1.3 1989-09-23 14:06:03
Xcopy-self.1 1.2 1989-09-20 13:58:12
Xcopy-self.b 1.5 1989-09-21 07:18:17
Xfreeze.1 1.1 1989-09-23 14:22:28
Xfreeze.b 1.8 1989-09-21 19:21:19
Xfreeze0.b 1.6 1989-09-21 19:21:28
XfreezePch.1 1.2 1989-09-25 07:01:32
XfreezePch.b 1.2 1989-09-25 07:01:13
XfreezePch0.b 1.1 1989-09-23 10:39:47
Xgetlic.c 1.5 1989-08-09 09:46:01
Xgetlin.3 1.7 1989-07-05 07:31:35
Xgetlin.c 1.7 1989-08-09 09:46:03
Xgetopt.c 1.1 1989-08-29 17:16:53
Xgetpwf.3 1.2 1989-08-21 08:43:59
Xgetpwf.c 1.2 1989-08-20 11:05:20
Xgold-lt.tex 1.2 1989-08-28 19:02:50
Xhetero.tex 1.2 1989-09-20 13:03:18
Xlatin-lt.tex 1.3 1989-09-19 12:04:12
XlnR.1 1.2 1989-09-15 11:45:47
XlnR.b 1.3 1989-09-21 19:22:13
XlnR0.b 1.4 1989-09-21 19:22:16
Xma2d.c 1.6 1989-08-12 08:58:22
Xma2i.c 1.6 1989-08-12 09:10:44
Xma2l.c 1.3 1989-08-12 09:22:39
Xma2u.c 1.4 1989-08-12 09:37:32
Xma2ul.c 1.3 1989-08-12 09:56:17
Xmalf.3 1.11 1989-08-14 09:06:30
Xmalf.c 1.10 1989-08-21 17:50:36
Xmalf.h 1.18 1989-08-20 10:45:05
Xmalf0.c 1.11 1989-08-21 17:50:47
Xmalf1.c 1.8 1989-08-21 17:50:50
Xmcalloc.c 1.5 1989-08-13 10:19:24
Xmcpstr.3 1.2 1989-05-18 10:56:17
Xmcpstr.c 1.4 1989-08-13 15:27:43
Xmemcmp.c 1.1 1989-08-15 18:17:12
Xmfclose.c 1.3 1989-08-13 14:53:25
Xmfcopy.3 1.1 1989-08-13 15:45:31
Xmfcopy.c 1.4 1989-08-13 15:37:56
Xmfflush.c 1.4 1989-08-13 14:59:43
Xmfopen.c 1.5 1989-08-13 15:07:38
Xmfseek.c 1.4 1989-08-13 15:18:44
Xmk-cc-lims.b 1.6 1989-09-21 19:22:19
Xmk-reg.b 1.4 1989-09-20 12:21:49
Xmk-smp.c 1.5 1989-08-15 14:25:55
XmkAr.b 1.1 1989-09-22 13:37:21
XmkCIncl.b 1.3 1989-09-21 19:22:21
XmkDistI.b 1.4 1989-09-21 19:22:24
XmkDistO.b 1.3 1989-09-21 19:22:26
XmkFreeze.b 1.3 1989-09-20 13:40:05
XmkInstF.b 1.3 1989-09-21 19:22:29
XmkInstX.b 1.3 1989-09-21 19:22:32
XmkLaTeXPS.b 1.3 1989-09-20 12:22:10
XmkLibIncl.b 1.3 1989-09-21 19:22:34
XmkLibcLims.b 1.8 1989-09-21 19:22:37
XmkManPS.b 1.3 1989-09-21 19:22:39
XmkSpellLT.b 1.2 1989-09-20 12:22:20
XmkUncmprs.b 1.3 1989-09-21 19:22:42
Xmopenp.3 1.1 1989-08-13 16:20:15
Xmopenp.c 1.6 1989-09-21 07:43:04
Xmra2d.c 1.5 1989-08-12 10:43:12
Xmra2i.c 1.5 1989-08-13 07:35:40
Xmra2l.c 1.2 1989-08-13 08:05:51
Xmra2u.c 1.4 1989-08-13 07:46:02
Xmra2ul.c 1.2 1989-08-13 08:20:50
Xmsgfn.3 1.2 1989-08-21 08:37:19
Xmsgfn.c 1.2 1989-08-19 10:19:10
Xnew-1.b 1.2 1989-09-21 12:39:49
Xnew-3.b 1.1 1989-09-21 12:44:29
Xnew-Make.b 1.2 1989-09-23 15:24:04
Xnew-MakeC.b 1.1 1989-09-21 12:48:58
Xnew-b.b 1.2 1989-09-23 13:49:12
Xnew-bib.b 1.1 1989-09-21 11:03:58
Xnew-c.b 1.1 1989-09-21 18:32:17
Xnew-el.b 1.1 1989-09-21 18:19:01
Xnew-h.b 1.1 1989-09-21 18:25:40
Xnew-uMake.b 1.1 1989-09-21 18:14:52
Xnew.1 1.2 1989-09-22 07:24:33
Xnew.b 1.1 1989-09-21 08:00:39
Xport.h 1.30 1989-08-29 08:52:40
Xprefix.3 1.4 1989-08-19 10:38:38
Xprefix.c 1.5 1989-08-13 16:55:44
Xprefxi.c 1.1 1989-08-19 10:31:17
Xputspn.3 1.9 1989-08-14 09:07:40
Xputspn.c 1.10 1989-08-13 16:31:09
Xqrndu.3 1.1 1989-08-14 10:46:02
Xqrndu.c 1.7 1989-08-14 10:41:31
Xsmp.3 1.3 1989-08-15 14:53:10
Xsmp.h 1.2 1989-08-15 14:31:10
Xsmp2l.c 1.9 1989-08-14 18:20:04
Xsmp2u.c 1.2 1989-08-14 18:29:32
Xsmp2ul.c 1.7 1989-08-15 11:14:04
Xsmpdig.c 1.6 1989-08-14 17:52:43
Xsmpdtl.c 1.6 1989-08-14 17:37:31
Xstrend.3 1.6 1989-08-14 09:31:24
Xstrend.c 1.6 1989-08-14 09:27:31
Xstrspn.c 1.1 1989-08-29 08:34:07
XuMakefile 1.12 1989-09-22 13:46:53
Xunix-lt.tex 1.1 1989-08-28 19:15:46
Xusage.3 1.5 1989-08-14 09:23:24
Xusage.c 1.6 1989-08-14 09:18:44
Xusage.h 1.1 1988-08-21 09:02:44
Xuserfn.3 1.1 1989-08-20 11:39:55
Xuserfn.c 1.2 1989-08-20 11:30:07
Xversion.h 1.3 1989-03-17 15:33:37
Xyear.h 1.2 1989-08-14 09:54:12
Xyrwk.3 1.2 1989-08-14 10:09:58
Xyrwk.c 1.5 1989-08-14 10:01:11
END_OF_FILE
if test 5524 -ne `wc -c <'FREEZE'`; then
echo shar: \"'FREEZE'\" unpacked with wrong size!
fi
# end of 'FREEZE'
fi
if test -f 'Makefile' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'Makefile'\"
else
echo shar: Extracting \"'Makefile'\" \(6702 characters\)
sed "s/^X//" >'Makefile' <<'END_OF_FILE'
X# Makefile - main GNU make file for -lhoward and include/howard
X#
X# $Header: Makefile,v 1.24 89/09/23 15:23:28 howard Exp $
X#
X# Copyright 1989 Howard Lee Gayle
X# This file is written in the ISO 8859/1 character set.
X#
X# This program is free software; you can redistribute it and/or modify
X# it under the terms of the GNU General Public License version 1,
X# as published by the Free Software Foundation.
X#
X# This program is distributed in the hope that it will be useful,
X# but WITHOUT ANY WARRANTY; without even the implied warranty of
X# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
X# GNU General Public License for more details.
X#
X# You should have received a copy of the GNU General Public License
X# along with this program; if not, write to the Free Software
X# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
X
Xinclude MakeCommon
X
X# Commands:
X
X# Make library.
XAR=mkAr
X
X# Put a file into the distribution directory.
XDISTO=mkDistO
X
X# Install a non-executable file.
XINSTF=mkInstF
X
X# Make a shared library.
XLD=ld
X
X# Lint command.
XLINT=lint
X
X# shar command
XSHAR=makekit
X
X
X# Command options:
X
X# CC: max optimization
XCFLAGS=-O4
X
X# LINT: check everything
XLINTFLAGS=-abchux
X
X# CC: for testing, use -g option and static linking.
XTESTCFLAGS=-g -Bstatic
X
X# CC: for testing, compile with this library.
XLIBES=-lhoward
X
X# CC: library search path for testing.
XLIBPATH=-L/usr/local/free-dist/howard/1/work
X
X# Directories:
X
X# Install library here.
XAID=/usr/local/free/howard/1
X
X# Install Bourne shell files here.
XBID=../bin
X
X# Install include files here.
XHID=../include/howard
X
X# Install lint library here.
XLNID=/usr/local/free/howard/1
X
X# Install man entries here.
XMID=../man
X
X# Install shared library here.
XSLID=/usr/local/free/howard/1
X
X# Install TeX and LaTeX macro files here.
XTEXID=../tex
X
X
X# Sources:
X
X# Bourne shell files.
XBS := $(filter %.b,$(SRCS))
X
X# BibTeX bibliography file.
XBIBS := $(filter %.bib,$(SRCS))
X
X# BibTeX bibliography file.
XBIBS := $(filter %.bib,$(SRCS))
X
X# C programs.
XCS := $(shell $(SETS) $(filter %.c,$(SRCS)) -d $(SCS))
X
X# C include files.
XHS := $(filter %.h,$(SRCS))
X
X# LaTeX source.
XLATEXS := hetero.tex
X
X# Manuals.
XM1S := $(filter %.1,$(SRCS))
XM3S := $(filter %.3,$(SRCS))
Xms := $(M1S) $(M3S)
X
X# TeX and LaTeX macro files.
XTEXS := $(shell $(SETS) $(filter %.tex,$(SRCS)) -d $(LATEXS))
X
X# All ordinary source files. Removed by make clobber.
Xsrc := $(SBS) $(BS) $(BIBS) $(SCS) $(CS) $(HS) $(LATEXS) $(ms) $(TEXS)
X
X# Absolutely all source files.
Xallsrc := README LICENSE FREEZE MakeCommon Makefile uMakefile $(src)
X
X
X# Targets:
X
X# Library.
XAT = libhoward.a
X
X# Bourne shell files.
Xbt := $(subst .b,,$(BS))
X
X# LaTeX.
Xifdef FMTLATEX
Xlatext := $(subst .tex,.texf,$(LATEXS))
Xspellt := $(patsubst %.tex,%-s,$(LATEXS))#Phony targets for spelling checking.
Xendif
X
X# Lint library.
XLNT = llib-lhoward.ln
X
X# Phony lint targets for C functions.
Xlt := $(patsubst %.c,%-l,$(SCS) $(CS))
X
X# C function object files.
Xot := $(subst .c,.o,$(CS))
X
X# Assembler targets for C functions.
Xst :=$(subst .c,.s,$(CS))
X
X# Test drivers for C functions.
Xtt :=$(patsubst %.c,%-t,$(CS))
X
X# Formatted manual entries.
Xifdef FMTMAN
Xft := $(patsubst %,%.f,$(ms))
Xendif
X
X# Default targets.
Xtargets := $(LNT) $(ot) $(AT) $(SLT) $(ft) $(TEXS)
X
X# Distribution:
Xdist := $(patsubst %,$(DD)/%,$(allsrc) $(ft))
X
X
X# Installs:
X
X# Library.
Xai := $(AID)/$(AT)
X
X# Bourne shell files.
Xbi := $(patsubst %,$(BID)/%,$(bt))
X
X# On-line manual entries.
Xcati := $(patsubst %,$(MID)/cat1/%,$(M1S)) $(patsubst %,$(MID)/cat3/%,$(M3S))
X
X# Include files.
Xhi := $(patsubst %,$(HID)/%,$(HS))
X
X# Generated include files.
Xii := $(patsubst %,$(HID)/%,$(it))
X
X# Lint library.
Xlni := $(LNID)/$(LNT)
X
X# Manual entries.
Xm1i := $(patsubst %,$(MID)/man1/%,$(M1S))
Xm3i := $(patsubst %,$(MID)/man3/%,$(M3S))
Xmi := $(m1i) $(m3i)
X
X# Shared library.
Xsli := $(SLID)/$(SLT)
X
X# TeX and LaTeX macro files.
Xtexi := $(patsubst %,$(TEXID)/%,$(TEXS))
X
X# If making a shared library then compile with -pic option for
X# position-independent code.
Xifdef SLT
XPIC = -pic
Xendif
X
X# Don't use built-in rules.
X.SUFFIXES:
X.PHONY: clean clobber default dist install install-include \
X shar test vars $(lt)
X
Xdefault: $(targets)
X
X# Display values of various variables. Mostly for debugging.
Xvars:
X @$(ECHO) 'SRCS:' $(SRCS)
X @$(ECHO) 'INCLUDES:' $(INCLUDES)
X @$(ECHO) 'BS:' $(BS)
X @$(ECHO) 'CS:' $(CS)
X @$(ECHO) 'HS:' $(HS)
X @$(ECHO) 'M1S:' $(M1S)
X @$(ECHO) 'M3S:' $(M3S)
X @$(ECHO) 'SCS:' $(SCS)
X @$(ECHO) 'allsrc:' $(allsrc)
X @$(ECHO) 'AT:' $(AT)
X @$(ECHO) 'bt:' $(bt)
X @$(ECHO) 'ft:' $(ft)
X @$(ECHO) 'HT:' $(HT)
X @$(ECHO) 'LNT:' $(LNT)
X @$(ECHO) 'lt:' $(lt)
X @$(ECHO) 'ot:' $(ot)
X @$(ECHO) 'SLT:' $(SLT)
X @$(ECHO) 'st:' $(st)
X @$(ECHO) 'tt:' $(tt)
X @$(ECHO) 'cflags:' $(cflags)
X @$(ECHO) 'dist:' $(dist)
X @$(ECHO) 'ai:' $(ai)
X @$(ECHO) 'bi:' $(bi)
X @$(ECHO) 'cati:' $(cati)
X @$(ECHO) 'hi:' $(hi)
Xifdef FMTLATEX
X @$(ECHO) 'LATEXS:' $(LATEXS)
X @$(ECHO) 'BIBS:' $(BIBS)
X @$(ECHO) 'latext:' $(latext)
X @$(ECHO) 'spellt:' $(spellt)
Xendif
X @$(ECHO) 'm1i:' $(m1i)
X @$(ECHO) 'm3i:' $(m3i)
X @$(ECHO) 'sli:' $(sli)
X
Xclean:
X $(RM) depend $(ot) $(st) $(tt)
X
Xclobber: clean
X $(RM) $(src) $(targets) $(it) FREEZE FREEZE.*
X
X$(lt): %-l: %.c $(LNT)
X $(LINT) $(LINTFLAGS) -DTEST $(DEFS) $(INCLUDES) $< $(LNT)
X
X$(AT): $(ot)
X $(RM) $@
X $(AR) $@ $(ot)
X
Xifdef FMTMAN
X$(ft): %.f: %
X $(RM) $@
X $(FMTMAN) $< > $@
Xendif
X
Xifdef FMTLATEX
X$(latext): %.texf: %.tex $(BIBS)
X $(FMTLATEX) $* $@
X
X$(spellt): %-s: %.tex
X $(SPELL_LATEX) $<
Xendif
X
X$(LNT): $(CS) $(HS) $(it)
X $(LINT) -Choward $(INCLUDES) $(CS)
X
X$(ot): %.o: %.c
X $(CC) -c $(CFLAGS) $(PIC) $(DEFS) $(INCLUDES) $*.c
X
Xifdef SLT
X$(SLT): $(ot)
X $(RM) $@
X $(LD) -o $@ $(ot)
X $(CHMOD) a=r $@
Xendif
X
Xshar: $(allsrc)
X $(RM) Part[0-9][0-9]
X $(SHAR) $(allsrc)
X
Xtest: $(tt)
X
X$(tt): %-t: %.c $(AT) $(SLT)
X $(CC) -o $@ $(TESTCFLAGS) -DTEST $(DEFS) $(INCLUDES) $(LIBPATH) \
X $*.c $(LIBES)
X
X$(st): %.s: %.c
X $(CC) -S $(DEFS) $(INCLUDES) $<
X
Xifdef WORK
X
Xdist: $(dist)
X
X$(dist): $(DD)/%: %
X $(DISTO) $< $(DD)
X
X.DEFAULT:
X $(UNCMPRS) $@
X
Xelse # WORK
X
Xinstall: install-include $(ai) $(bi) $(cati) \
X $(lni) $(mi) $(sli) $(texi)
X
Xinstall-include: $(hi) $(ii)
X
X$(ai): $(AT)
X $(INSTF) $(AT) $(AID)
X
X$(bi): $(BID)/%: %
X $(INSTF) $< $(BID)
X
Xifdef SLT
X$(sli): $(SLT)
X $(INSTF) $(SLT) $(SLID)
Xendif
X
X$(lni): $(LNT)
X $(INSTF) $(LNT) $(LNID)
X
Xifdef CATMAN
X$(cati): $(m1i) $(m3i)
X $(CATMAN) -M $(MID) 13
Xendif # CATMAN
X
X$(hi): $(HID)/%: %
X $(INSTF) $< $(HID)
X
X$(ii): $(HID)/%: %
X $(INSTF) $< $(HID)
X
X$(m1i): $(MID)/man1/%: %
X $(INSTF) $< $(MID)/man1
X
X$(m3i): $(MID)/man3/%: %
X $(INSTF) $< $(MID)/man3
X
X$(texi): $(TEXID)/%: %
X $(INSTF) $< $(TEXID)
X
X$(allsrc): %: $(DD)/%
X $(DISTI) $@ $(DD)
X
X.DEFAULT:
X $(DISTI) $@ $(DD)
X
Xendif # WORK
X
Xinclude depend
END_OF_FILE
if test 6702 -ne `wc -c <'Makefile'`; then
echo shar: \"'Makefile'\" unpacked with wrong size!
fi
# end of 'Makefile'
fi
if test -f 'a2l.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'a2l.c'\"
else
echo shar: Extracting \"'a2l.c'\" \(4667 characters\)
sed "s/^X//" >'a2l.c' <<'END_OF_FILE'
X/*
X * a2l - convert Ada-syntax integer literal to long
X */
X
X#ifndef lint
Xstatic char _cpyrgt[] = "Copyright 1989 Howard Lee Gayle";
X#endif lint
X
X/*
X * This program is free software; you can redistribute it and/or modify
X * it under the terms of the GNU General Public License version 1,
X * as published by the Free Software Foundation.
X *
X * This program is distributed in the hope that it will be useful,
X * but WITHOUT ANY WARRANTY; without even the implied warranty of
X * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
X * GNU General Public License for more details.
X *
X * You should have received a copy of the GNU General Public License
X * along with this program; if not, write to the Free Software
X * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
X */
X
X#include
X#include
X#include
X
XMODVER ("@(#)$Header: a2l.c,v 1.12 89/08/11 13:07:15 howard Exp $");
X
X#include
X#include
X#include
X#include
X
XPUBLIC int a2l (str, lim, synok, res, end)
XbStrT str; /* Input string.*/
XbStrT lim; /* Don't pass this.*/
XboolT synok; /* Accept non-fatal syntax errors.*/
Xlong *res; /* Points to where to store result.*/
XbStrT *end; /* End pointer stored here.*/
X
X/* Function:
X *
X * Algorithm:
X * a2smp() then smp2l()
X * Returns:
X *
X * Notes:
X *
X */
X{
XR1 int s; /* Return code.*/
X smpT smp; /* a2smp() stores its result here.*/
X
Xs = a2smp (str, lim, synok, &smp, end);
Xif (SUCCESS == s) s = smp2l (&smp, res);
Xreturn (s);
X}
X
X#ifdef TEST
X#include
X
XMAINVER ("@(#)$Header: a2l.c,v 1.12 89/08/11 13:07:15 howard Exp $");
XUSAGE ("integer-numeric-literal");
X
X#include
X#include
X#include
X#include
X
XPRIVATE void t (num, str, limoff, synok, xrc, xres, xendoff)
Xint num; /* Test number.*/
XbStrT str; /* str argument.*/
Xint limoff; /* Limit offset, -1 for none.*/
XboolT synok; /* synok argument.*/
Xint xrc; /* Expected return code.*/
Xlong xres; /* Expected result.*/
Xint xendoff; /* Expected end offset.*/
X{
Xint rc; /* Return code.*/
Xlong res; /* Result stored here.*/
XbStrT end; /* End string stored here.*/
X
Xrc = a2l (str, (limoff < 0) ? NULBSTR : str + limoff, synok, &res, &end);
Xif (rc != xrc) PRINTF ("%d: rc %d expected %d\n", num, rc, xrc);
Xif ((0 == rc) && (0 == xrc) && (res != xres))
X PRINTF ("%d: res %ld expected %ld\n", num, res, xres);
Xif (xendoff < 0) xendoff = strlen (str);
Xif ((end - str) != xendoff)
X PRINTF ("%d: end %s expected %s\n", num, end, str + xendoff);
X}
X
XPUBLIC int main (argc, argv)
Xint argc; /* Number of arguments.*/
XbStrT *argv; /* Points to array of argument strings.*/
X{
XbStrT end; /* End of string.*/
Xlong res; /* a2l() stores its result here.*/
X#define L LONG_MIN
X#define H LONG_MAX
X
X/*num str limoff syn rc res end */
Xt(__LINE__,"12", -1, 0, 0, 12L, -1);
Xt(__LINE__,"0", -1, 0, 0, 0L, -1);
Xt(__LINE__,"1E6", -1, 0, 0, 1000000L, -1);
Xt(__LINE__,"2#1111_1111#", -1, 0, 0, 255L, -1);
Xt(__LINE__,"16#FF#", -1, 0, 0, 255L, -1);
Xt(__LINE__,"016#0FF#", -1, 0, 0, 255L, -1);
Xt(__LINE__,"16#E#E1", -1, 0, 0, 224L, -1);
Xt(__LINE__,"2#1110_0000#", -1, 0, 0, 224L, -1);
Xt(__LINE__,NULBSTR, 0, 0, EINVAL, 0L, 0);
Xt(__LINE__,"0", 0, 0, EDOM, 0L, 0);
Xt(__LINE__,"012", 1, 0, 0, 0L, 1);
Xt(__LINE__,"_0123", 4, 0, EDOM, 12L, 0);
Xt(__LINE__,"-2_147_483_648", -1, 0, 0,(long)LONG_MIN, -1);
Xt(__LINE__," \t2_147_483_647",-1, 1, 0,(long)LONG_MAX, -1);
Xt(__LINE__,"1#1111_1111#", -1, 0, EDOM, 0L, 1);
Xt(__LINE__,"17#1#", -1, 0, EDOM, 0L, 2);
Xt(__LINE__,"12B", -1, 1, 0, 12L, 2);
Xt(__LINE__,"16#abcdef#e_0", -1, 0, EDOM, 0xABCDEFL, 11);
Xt(__LINE__,"16#abcdef#.", -1, 1, 0, 0xABCDEFL, 10);
Xt(__LINE__,"-2_147_483_649", -1, 0, ERANGE, 0L, -1);
Xt(__LINE__,"2_147_483_648", -1, 1, ERANGE, 0L, -1);
X
Xif (2 != argc) usage();
Xswitch (a2l (argv[1], NULBSTR, FALSE, &res, &end))
X {
X case SUCCESS:
X PRINTF ("8#%lo#\t10#%ld#\t16#%lX#\n", res, res, res);
X break;
X case EINVAL:
X PRINTF ("EINVAL %s\n", end);
X break;
X case EDOM:
X PRINTF ("EDOM %s\n", end);
X break;
X case ERANGE:
X PRINTF ("ERANGE %s\n", end);
X break;
X default:
X PUTS ("Unexpected return");
X break;
X }
Xmfflush (stdout, "Standard Output");
Xexit (SUCCESS);
X
X#ifdef lint
Xreturn (SUCCESS);
X#endif
X}
X#endif
END_OF_FILE
if test 4667 -ne `wc -c <'a2l.c'`; then
echo shar: \"'a2l.c'\" unpacked with wrong size!
fi
# end of 'a2l.c'
fi
if test -f 'getlic.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'getlic.c'\"
else
echo shar: Extracting \"'getlic.c'\" \(5666 characters\)
sed "s/^X//" >'getlic.c' <<'END_OF_FILE'
X/*
X * getlic - read next line from a file, stripping comments & blank lines
X */
X
X#ifndef lint
Xstatic char _cpyrgt[] = "Copyright 1989 Howard Lee Gayle";
X#endif lint
X
X/*
X * This program is free software; you can redistribute it and/or modify
X * it under the terms of the GNU General Public License version 1,
X * as published by the Free Software Foundation.
X *
X * This program is distributed in the hope that it will be useful,
X * but WITHOUT ANY WARRANTY; without even the implied warranty of
X * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
X * GNU General Public License for more details.
X *
X * You should have received a copy of the GNU General Public License
X * along with this program; if not, write to the Free Software
X * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
X */
X
X#include
X#include
X#include
X
XMODVER ("@(#)$Header: getlic.c,v 1.5 89/08/09 09:46:01 howard Exp $");
X
X#include
X#include
X
XPUBLIC bStrT getlic (l, ls, f, fn, ln, tw, com)
XbStrT l; /* Points to buffer provided by caller where line
X * will be stored.*/
Xunsigned ls; /* Number of bytes in buffer, including terminal
X * NUL. (No space needs to be provided for the
X * newline since getlin removes it.)*/
XstreamT f; /* Input stream.*/
XbStrT fn; /* Input file name, for possible error messages.*/
Xunsigned *ln; /* Points to where current line number is stored.
X * getlin increments it after a successful read, and
X * uses it for error messages.*/
XR5 unsigned tw; /* Expand tabs into this many spaces. 0 = no expand.*/
XR4 rcharT com; /* Character that starts comments to end of line.*/
X
X/* Function:
X * Read one nonblank line. Strip comments. Handle errors.
X * Algorithm:
X * Read one character at a time until
X * 1) a non-empty line is received,
X * 2) an EOF is received, or
X * 3) the buffer becomes full.
X * Returns:
X * On success, a pointer to the NUL terminator in l[].
X * On normal EOF, NULBSTR.
X * No return on error.
X */
X
X{
XR1 rcharT c; /* Current input character.*/
XbStrT bp = l; /* Current position in line buffer.*/
Xunsigned col = 0; /* Current column number (leftmost 0).*/
XR3 boolT incom = FALSE; /* Set inside comments.*/
XR2 boolT more = TRUE; /* Set when more to do.*/
X
Xif ((NULBSTR == fn) || (EOS == B(*fn))) malf1 ("getlin: No file name");
Xif (NULBSTR == l) malf1 ("getlin %s: No line buffer", fn);
Xif (ls < 2) malf1 ("getlin %s: Line buffer too small", fn);
Xif (NULSTRM == f) malf1 ("getlin %s: No FILE", fn);
Xif (((unsigned *) NULL) == ln) malf1 ("getlin %s: No line number pointer", fn);
Xdo
X {
X c = getc (f);
X if (incom)
X {
X switch (c)
X {
X case '\n':
X if (bp == l)
X incom = FALSE;
X else
X more = FALSE;
X ++(*ln);
X break;
X case EOF:
X if (ferror (f)) malf1 ("%s: %u: Read error", fn, 1 + *ln);
X if (bp != l)
X malf1 ("%s: %u: End of file in middle of line", fn, 1 + *ln);
X *bp = EOS;
X bp = NULBSTR;
X more = FALSE;
X break;
X case EOS: /* NUL.*/
X malf1 ("%s: %u: NUL in line", fn, 1 + *ln);
X break;
X default:
X break;
X }
X }
X else
X {
X switch (c)
X {
X case '\t':
X if (0 == tw)
X {
X *bp++ = c;
X ++col;
X }
X else
X {
X c = tw - (col % tw);
X col += c;
X if (col < ls)
X while (c--)
X *bp++ = ' ';
X }
X break;
X case '\n':
X if (bp != l)
X {
X --bp;
X while ((bp >= l) && ((' ' == B(*bp)) || ('\t' == B(*bp))))
X --bp;
X ++bp;
X *bp = EOS;
X }
X ++(*ln);
X if (bp != l) more = FALSE;
X break;
X case EOF:
X if (ferror (f)) malf1 ("%s: %u: Read error", fn, 1 + *ln);
X if (bp != l)
X malf1 ("%s: %u: End of file in middle of line", fn, 1 + *ln);
X *bp = EOS;
X bp = NULBSTR;
X more = FALSE;
X break;
X case EOS: /* NUL.*/
X malf1 ("%s: %u: NUL in line", fn, 1 + *ln);
X break;
X default:
X if (c == com)
X {
X if (bp != l)
X {
X --bp;
X while ((bp >= l) && ((' ' == B(*bp)) || ('\t' == B(*bp))))
X --bp;
X ++bp;
X *bp = EOS;
X }
X ++incom;
X }
X else
X {
X *bp++ = c;
X ++col;
X }
X break;
X }
X }
X if (col >= ls) malf1 ("%s: %u: Line too long, %u max", fn, 1 + *ln, ls - 1);
X }
Xwhile (more);
Xreturn (bp);
X}
X
X
X#ifdef TEST
X/* This test driver copies stdin to stdout, stripping comments starting
X * with the given argument.*/
X#include
X
XMAINVER ("@(#)$Header: getlic.c,v 1.5 89/08/09 09:46:01 howard Exp $");
XUSAGE ("comment-character");
X
XPUBLIC int main (argc, argv)
Xint argc; /* Number of arguments.*/
XbStrT *argv; /* Points to array of argument strings.*/
X{
Xunsigned ln = 0;
Xstatic byteT l[1024];
X
Xif ((2 != argc) || (EOS != argv[1][1])) usage();
Xwhile (NULBSTR != getlic (l, 1024, stdin, "Standard Input", &ln, 8,
X argv[1][0]))
X PUTS (l);
X}
X#endif
END_OF_FILE
if test 5666 -ne `wc -c <'getlic.c'`; then
echo shar: \"'getlic.c'\" unpacked with wrong size!
fi
# end of 'getlic.c'
fi
if test -f 'malf.3' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'malf.3'\"
else
echo shar: Extracting \"'malf.3'\" \(4916 characters\)
sed "s/^X//" >'malf.3' <<'END_OF_FILE'
X.\" @(#)$Header: malf.3,v 1.11 89/08/14 09:06:30 howard Exp $
X.TH MALF "3 -lhoward" "$Revision: 1.11 $" "Howard\'s C library" "Howard\'s C library"
X.SH NAME
Xmalf, malf0, malf1, mcalloc, mfclose, mfflush, mfopen, mfseek \- write error message
X.SH SYNOPSIS
X.nf
X.BR "#include <" stdio.h ">"
X.BR "#include <" howard/port.h ">"
X.BR "#include <" howard/version.h ">"
X.LP
X.RI "MAINVER (" version ");"
X.LP
X.BR "#include <" howard/malf.h ">"
X.fi
X.LP
X.BR "void " "malf ("
X.IR exitcode ", " format "[, " arg ".\|.\|.])"
X.nf
X.BI "int " exitcode ";"
X.RI "cStrT " format ";"
X.fi
X.LP
X.BR "void " "malf0 ("
X.IR format "[, " arg ".\|.\|.])"
X.nf
X.RI "cStrT " format ";"
X.fi
X.LP
X.BR "void " "malf1 ("
X.IR format "[, " arg ".\|.\|.])"
X.nf
X.RI "cStrT " format ";"
X.fi
X.LP
XvoidPT mcalloc (
X.IR nelem ,
X.IR elsize ,
X.IR what )
X.nf
X.BI "unsigned " nelem;
X.BI "unsigned " elsize;
X.RI "bStrT " what;
X.fi
X.LP
X.BR "void " "mfclose ("
X.IR stream ", " filename ")"
X.nf
X.RI "streamT " stream ";"
X.RI "bStrT " filename ";"
X.fi
X.LP
X.BR "void " "mfflush ("
X.IR stream ", " filename ")"
X.nf
X.RI "streamT " stream ";"
X.RI "bStrT " filename ";"
X.fi
X.LP
X.RI "streamT mfopen (" filename ", " type ")"
X.nf
X.RI "bStrT " filename ";"
X.RI "bStrT " type ";"
X.fi
X.LP
X.BR "void " "mfseek ("
X.IR stream ,
X.IR offset ,
X.IR ptrname ,
X.IR filename )
X.nf
X.RI "streamT " stream ";"
X.BI "long " offset;
X.BI "int " ptrname;
X.RI "bStrT " filename ";"
X.fi
X.SH COPYRIGHT
XCopyright \(co 1989 Howard Lee Gayle
X.SH DESCRIPTION
X.I Malf
Xwrites on standard error a message with the syntax:
X.nf
X message at