--- a/Makefile
|
|
+++ b/Makefile
|
|
@@ -8,10 +8,12 @@ SASR = -DSASR
|
|
######### Define SASR if >> is a signed arithmetic shift (-1 >> 1 == -1)
|
|
|
|
# MULHACK = -DUSE_FLOAT_MUL
|
|
+MULHACK =
|
|
######### Define this if your host multiplies floats faster than integers,
|
|
######### e.g. on a SPARCstation.
|
|
|
|
# FAST = -DFAST
|
|
+FAST =
|
|
######### Define together with USE_FLOAT_MUL to enable the GSM library's
|
|
######### approximation option for incorrect, but good-enough results.
|
|
|
|
@@ -22,8 +24,8 @@ LTP_CUT =
|
|
######### both integer and floating point multiplications.
|
|
######### This flag is still in the experimental stage.
|
|
|
|
-WAV49 = -DWAV49
|
|
-# WAV49 =
|
|
+# WAV49 = -DWAV49
|
|
+WAV49 =
|
|
######### Define to enable the GSM library's option to pack GSM frames
|
|
######### in the style used by the WAV #49 format. If you want to write
|
|
######### a tool that produces .WAV files which contain GSM-encoded data,
|
|
@@ -44,7 +46,8 @@ WAV49 = -DWAV49
|
|
# CCFLAGS = -c -O
|
|
|
|
CC = gcc -ansi -pedantic
|
|
-CCFLAGS = -c -O2 -DNeedFunctionPrototypes=1
|
|
+COPTS = -O2
|
|
+CCFLAGS = -c $(COPTS) -DNeedFunctionPrototypes=1
|
|
|
|
LD = $(CC)
|
|
|
|
@@ -78,10 +81,10 @@ INSTALL_ROOT =
|
|
# Leave GSM_INSTALL_ROOT empty to not install the GSM library outside of
|
|
# this directory.
|
|
|
|
-GSM_INSTALL_ROOT = $(INSTALL_ROOT)
|
|
+GSM_INSTALL_ROOT = $(INSTALL_ROOT)/usr
|
|
GSM_INSTALL_LIB = $(GSM_INSTALL_ROOT)/lib
|
|
-GSM_INSTALL_INC = $(GSM_INSTALL_ROOT)/inc
|
|
-GSM_INSTALL_MAN = $(GSM_INSTALL_ROOT)/man/man3
|
|
+GSM_INSTALL_INC = $(GSM_INSTALL_ROOT)/include
|
|
+GSM_INSTALL_MAN = $(GSM_INSTALL_ROOT)/share/man/man3
|
|
|
|
|
|
# Where do you want to install the toast binaries and their manpage?
|
|
@@ -89,14 +92,14 @@ GSM_INSTALL_MAN = $(GSM_INSTALL_ROOT)/ma
|
|
# Leave TOAST_INSTALL_ROOT empty to not install the toast binaries outside
|
|
# of this directory.
|
|
|
|
-TOAST_INSTALL_ROOT = $(INSTALL_ROOT)
|
|
+TOAST_INSTALL_ROOT = $(INSTALL_ROOT)/usr
|
|
TOAST_INSTALL_BIN = $(TOAST_INSTALL_ROOT)/bin
|
|
-TOAST_INSTALL_MAN = $(TOAST_INSTALL_ROOT)/man/man1
|
|
+TOAST_INSTALL_MAN = $(TOAST_INSTALL_ROOT)/share/man/man1
|
|
|
|
# Other tools
|
|
|
|
SHELL = /bin/sh
|
|
-LN = ln
|
|
+LN = ln -s
|
|
BASENAME = basename
|
|
AR = ar
|
|
ARFLAGS = cr
|
|
@@ -126,7 +129,7 @@ INC = $(ROOT)/inc
|
|
|
|
# Flags
|
|
|
|
-# DEBUG = -DNDEBUG
|
|
+DEBUG = -DNDEBUG
|
|
######### Remove -DNDEBUG to enable assertions.
|
|
|
|
CFLAGS = $(CCFLAGS) $(SASR) $(DEBUG) $(MULHACK) $(FAST) $(LTP_CUT) \
|
|
@@ -140,6 +143,7 @@ LFLAGS = $(LDFLAGS) $(LDINC)
|
|
# Targets
|
|
|
|
LIBGSM = $(LIB)/libgsm.a
|
|
+LIBGSMSO= $(LIB)/libgsm.so
|
|
|
|
TOAST = $(BIN)/toast
|
|
UNTOAST = $(BIN)/untoast
|
|
@@ -258,6 +262,9 @@ STUFF = ChangeLog \
|
|
|
|
GSM_INSTALL_TARGETS = \
|
|
$(GSM_INSTALL_LIB)/libgsm.a \
|
|
+ $(GSM_INSTALL_LIB)/libgsm.so \
|
|
+ $(GSM_INSTALL_LIB)/libgsm.so.1 \
|
|
+ $(GSM_INSTALL_LIB)/libgsm.so.1.0.10 \
|
|
$(GSM_INSTALL_INC)/gsm.h \
|
|
$(GSM_INSTALL_MAN)/gsm.3 \
|
|
$(GSM_INSTALL_MAN)/gsm_explode.3 \
|
|
@@ -279,7 +286,7 @@ TOAST_INSTALL_TARGETS = \
|
|
|
|
# Target rules
|
|
|
|
-all: $(LIBGSM) $(TOAST) $(TCAT) $(UNTOAST)
|
|
+all: $(LIBGSM) $(LIBGSMSO) $(TOAST) $(TCAT) $(UNTOAST)
|
|
@-echo $(ROOT): Done.
|
|
|
|
tst: $(TST)/lin2cod $(TST)/cod2lin $(TOAST) $(TST)/test-result
|
|
@@ -299,6 +306,11 @@ install: toastinstall gsminstall
|
|
|
|
# The basic API: libgsm
|
|
|
|
+$(LIBGSMSO): $(LIB) $(GSM_OBJECTS)
|
|
+ $(LD) -o $@.1.0.10 -shared -Xlinker -soname -Xlinker libgsm.so.1 $(GSM_OBJECTS) -lc
|
|
+ ln -fs libgsm.so.1.0.10 lib/libgsm.so.1
|
|
+ ln -fs libgsm.so.1.0.10 lib/libgsm.so
|
|
+
|
|
$(LIBGSM): $(LIB) $(GSM_OBJECTS)
|
|
-rm $(RMFLAGS) $(LIBGSM)
|
|
$(AR) $(ARFLAGS) $(LIBGSM) $(GSM_OBJECTS)
|
|
@@ -308,15 +320,15 @@ $(LIBGSM): $(LIB) $(GSM_OBJECTS)
|
|
# Toast, Untoast and Tcat -- the compress-like frontends to gsm.
|
|
|
|
$(TOAST): $(BIN) $(TOAST_OBJECTS) $(LIBGSM)
|
|
- $(LD) $(LFLAGS) -o $(TOAST) $(TOAST_OBJECTS) $(LIBGSM) $(LDLIB)
|
|
+ $(LD) $(LFLAGS) -o $(TOAST) $(TOAST_OBJECTS) $(LIBGSMSO) $(LDLIB)
|
|
|
|
$(UNTOAST): $(BIN) $(TOAST)
|
|
-rm $(RMFLAGS) $(UNTOAST)
|
|
- $(LN) $(TOAST) $(UNTOAST)
|
|
+ $(LN) toast $(UNTOAST)
|
|
|
|
$(TCAT): $(BIN) $(TOAST)
|
|
-rm $(RMFLAGS) $(TCAT)
|
|
- $(LN) $(TOAST) $(TCAT)
|
|
+ $(LN) toast $(TCAT)
|
|
|
|
|
|
# The local bin and lib directories
|
|
@@ -351,53 +363,66 @@ toastuninstall:
|
|
fi
|
|
|
|
$(TOAST_INSTALL_BIN)/toast: $(TOAST)
|
|
- -rm $@
|
|
- cp $(TOAST) $@
|
|
+ mkdir -p $(TOAST_INSTALL_BIN)
|
|
+ cp -f $(TOAST) $@
|
|
chmod 755 $@
|
|
|
|
$(TOAST_INSTALL_BIN)/untoast: $(TOAST_INSTALL_BIN)/toast
|
|
- -rm $@
|
|
- ln $? $@
|
|
+ mkdir -p $(TOAST_INSTALL_BIN)
|
|
+ ln -sf $? $@
|
|
|
|
$(TOAST_INSTALL_BIN)/tcat: $(TOAST_INSTALL_BIN)/toast
|
|
- -rm $@
|
|
- ln $? $@
|
|
+ mkdir -p $(TOAST_INSTALL_BIN)
|
|
+ ln -sf $? $@
|
|
|
|
$(TOAST_INSTALL_MAN)/toast.1: $(MAN)/toast.1
|
|
- -rm $@
|
|
- cp $? $@
|
|
+ mkdir -p $(TOAST_INSTALL_MAN)
|
|
+ cp -f $? $@
|
|
chmod 444 $@
|
|
|
|
$(GSM_INSTALL_MAN)/gsm.3: $(MAN)/gsm.3
|
|
- -rm $@
|
|
- cp $? $@
|
|
+ mkdir -p $(GSM_INSTALL_MAN)
|
|
+ cp -f $? $@
|
|
chmod 444 $@
|
|
|
|
$(GSM_INSTALL_MAN)/gsm_option.3: $(MAN)/gsm_option.3
|
|
- -rm $@
|
|
- cp $? $@
|
|
+ mkdir -p $(GSM_INSTALL_MAN)
|
|
+ cp -f $? $@
|
|
chmod 444 $@
|
|
|
|
$(GSM_INSTALL_MAN)/gsm_explode.3: $(MAN)/gsm_explode.3
|
|
- -rm $@
|
|
- cp $? $@
|
|
+ mkdir -p $(GSM_INSTALL_MAN)
|
|
+ cp -f $? $@
|
|
chmod 444 $@
|
|
|
|
$(GSM_INSTALL_MAN)/gsm_print.3: $(MAN)/gsm_print.3
|
|
- -rm $@
|
|
- cp $? $@
|
|
+ mkdir -p $(GSM_INSTALL_MAN)
|
|
+ cp -f $? $@
|
|
chmod 444 $@
|
|
|
|
$(GSM_INSTALL_INC)/gsm.h: $(INC)/gsm.h
|
|
- -rm $@
|
|
- cp $? $@
|
|
+ mkdir -p $(GSM_INSTALL_INC)
|
|
+ cp -f $? $@
|
|
chmod 444 $@
|
|
|
|
$(GSM_INSTALL_LIB)/libgsm.a: $(LIBGSM)
|
|
- -rm $@
|
|
- cp $? $@
|
|
+ mkdir -p $(GSM_INSTALL_LIB)
|
|
+ cp -f $? $@
|
|
chmod 444 $@
|
|
|
|
+$(GSM_INSTALL_LIB)/libgsm.so: $(LIBGSMSO)
|
|
+ mkdir -p $(GSM_INSTALL_LIB)
|
|
+ cp -f $? $@
|
|
+
|
|
+$(GSM_INSTALL_LIB)/libgsm.so.1: $(LIBGSMSO)
|
|
+ mkdir -p $(GSM_INSTALL_LIB)
|
|
+ cp -f $? $@
|
|
+
|
|
+$(GSM_INSTALL_LIB)/libgsm.so.1.0.10: $(LIBGSMSO)
|
|
+ mkdir -p $(GSM_INSTALL_LIB)
|
|
+ cp -f $? $@
|
|
+ chmod 755 $@
|
|
+
|
|
|
|
# Distribution
|
|
|
|
@@ -426,7 +451,9 @@ semi-clean:
|
|
|
|
clean: semi-clean
|
|
-rm $(RMFLAGS) $(LIBGSM) $(ADDTST)/add \
|
|
- $(TOAST) $(TCAT) $(UNTOAST) \
|
|
+ $(LIBGSMSO) $(LIB)/libgsm.so.1.0.10 \
|
|
+ $(LIB)libgsm.so.1 \
|
|
+ $(TOAST) $(TCAT) $(UNTOAST) \
|
|
$(ROOT)/gsm-1.0.tar.Z
|
|
|
|
|
|
--- a/inc/config.h
|
|
+++ b/inc/config.h
|
|
@@ -9,8 +9,8 @@
|
|
#ifndef CONFIG_H
|
|
#define CONFIG_H
|
|
|
|
-/*efine SIGHANDLER_T int /* signal handlers are void */
|
|
-/*efine HAS_SYSV_SIGNAL 1 /* sigs not blocked/reset? */
|
|
+/*efine SIGHANDLER_T int *//* signal handlers are void */
|
|
+/*efine HAS_SYSV_SIGNAL 1 *//* sigs not blocked/reset? */
|
|
|
|
#define HAS_STDLIB_H 1 /* /usr/include/stdlib.h */
|
|
#define HAS_LIMITS_H 1 /* /usr/include/limits.h */
|
|
@@ -22,16 +22,16 @@
|
|
#define HAS_CHMOD 1 /* chmod syscall */
|
|
#define HAS_FCHOWN 1 /* fchown syscall */
|
|
#define HAS_CHOWN 1 /* chown syscall */
|
|
-/*efine HAS__FSETMODE 1 /* _fsetmode -- set file mode */
|
|
+/*efine HAS__FSETMODE 1 *//* _fsetmode -- set file mode */
|
|
|
|
#define HAS_STRING_H 1 /* /usr/include/string.h */
|
|
-/*efine HAS_STRINGS_H 1 /* /usr/include/strings.h */
|
|
+/*efine HAS_STRINGS_H 1 *//* /usr/include/strings.h */
|
|
|
|
#define HAS_UNISTD_H 1 /* /usr/include/unistd.h */
|
|
#define HAS_UTIME 1 /* POSIX utime(path, times) */
|
|
-/*efine HAS_UTIMES 1 /* use utimes() syscall instead */
|
|
+/*efine HAS_UTIMES 1 *//* use utimes() syscall instead */
|
|
#define HAS_UTIME_H 1 /* UTIME header file */
|
|
#define HAS_UTIMBUF 1 /* struct utimbuf */
|
|
-/*efine HAS_UTIMEUSEC 1 /* microseconds in utimbuf? */
|
|
+/*efine HAS_UTIMEUSEC 1 *//* microseconds in utimbuf? */
|
|
|
|
#endif /* CONFIG_H */
|
|
--- a/inc/gsm.h
|
|
+++ b/inc/gsm.h
|
|
@@ -54,6 +54,10 @@ typedef gsm_byte gsm_frame[33]; /* 33
|
|
#define GSM_OPT_FRAME_INDEX 5
|
|
#define GSM_OPT_FRAME_CHAIN 6
|
|
|
|
+#ifdef __cplusplus
|
|
+extern "C" {
|
|
+#endif
|
|
+
|
|
extern gsm gsm_create GSM_P((void));
|
|
extern void gsm_destroy GSM_P((gsm));
|
|
|
|
@@ -66,6 +70,10 @@ extern int gsm_decode GSM_P((gsm, gsm_
|
|
extern int gsm_explode GSM_P((gsm, gsm_byte *, gsm_signal *));
|
|
extern void gsm_implode GSM_P((gsm, gsm_signal *, gsm_byte *));
|
|
|
|
+#ifdef __cplusplus
|
|
+}
|
|
+#endif
|
|
+
|
|
#undef GSM_P
|
|
|
|
#endif /* GSM_H */
|
|
--- a/inc/toast.h
|
|
+++ b/inc/toast.h
|
|
@@ -16,11 +16,12 @@
|
|
|
|
#include <stdio.h>
|
|
#include <ctype.h>
|
|
+#include <pthread.h>
|
|
#include <signal.h>
|
|
|
|
#include <errno.h>
|
|
-#ifndef HAS_ERRNO_DECL
|
|
- extern int errno;
|
|
+#ifndef errno
|
|
+ extern int errno;
|
|
#endif
|
|
|
|
#ifdef HAS_LIMITS_H
|
|
@@ -37,6 +38,10 @@
|
|
# endif
|
|
#endif
|
|
|
|
+#ifdef HAS_STDIO_H
|
|
+# include <stdio.h>
|
|
+#endif
|
|
+
|
|
#include "gsm.h"
|
|
|
|
#ifndef S_ISREG
|
|
--- a/src/code.c
|
|
+++ b/src/code.c
|
|
@@ -9,8 +9,8 @@
|
|
#include "config.h"
|
|
|
|
|
|
-#ifdef HAS_STDLIB_H
|
|
-#include <stdlib.h>
|
|
+#ifdef HAS_STRING_H
|
|
+#include <string.h>
|
|
#else
|
|
# include "proto.h"
|
|
extern char * memcpy P((char *, char *, int));
|
|
--- a/src/debug.c
|
|
+++ b/src/debug.c
|
|
@@ -49,7 +49,7 @@ void gsm_debug_longwords P4( (name, from
|
|
fprintf( stderr, "%s [%d .. %d]: ", name, from, to );
|
|
while (from <= to) {
|
|
|
|
- fprintf(stderr, "%d ", ptr[ from ] );
|
|
+ fprintf(stderr, "%ld ", ptr[ from ] );
|
|
from++;
|
|
if (nprinted++ >= 7) {
|
|
nprinted = 0;
|
|
@@ -63,14 +63,14 @@ void gsm_debug_longword P2( (name, valu
|
|
char * name,
|
|
longword value )
|
|
{
|
|
- fprintf(stderr, "%s: %d\n", name, (long)value );
|
|
+ fprintf(stderr, "%s: %ld\n", name, (long)value );
|
|
}
|
|
|
|
void gsm_debug_word P2( (name, value),
|
|
char * name,
|
|
word value )
|
|
{
|
|
- fprintf(stderr, "%s: %d\n", name, (long)value);
|
|
+ fprintf(stderr, "%s: %ld\n", name, (long)value);
|
|
}
|
|
|
|
#endif
|
|
--- a/src/toast.c
|
|
+++ b/src/toast.c
|
|
@@ -251,8 +251,8 @@ static char * emalloc P1((len), size_t l
|
|
{
|
|
char * s;
|
|
if (!(s = malloc(len))) {
|
|
- fprintf(stderr, "%s: failed to malloc %d bytes -- abort\n",
|
|
- progname, len);
|
|
+ fprintf(stderr, "%s: failed to malloc %ld bytes -- abort\n",
|
|
+ progname, (long) len);
|
|
onintr();
|
|
exit(1);
|
|
}
|
|
@@ -270,7 +270,7 @@ static char* normalname P3((name, want,
|
|
maxlen = strlen(name) + 1 + strlen(want) + strlen(cut);
|
|
p = strcpy(emalloc(maxlen), name);
|
|
|
|
- if (s = suffix(p, cut)) strcpy(s, want);
|
|
+ if ((s = suffix(p, cut))) strcpy(s, want);
|
|
else if (*want && !suffix(p, want)) strcat(p, want);
|
|
|
|
return p;
|
|
@@ -386,7 +386,7 @@ static void update_times P0()
|
|
ut[0] = instat.st_atime;
|
|
ut[1] = instat.st_mtime;
|
|
|
|
- (void) utime(outname, ut);
|
|
+ (void) utime(outname, (struct utimbuf *)ut);
|
|
|
|
#endif /* UTIMBUF */
|
|
}
|
|
@@ -416,7 +416,7 @@ static int okay_as_input P3((name,f,st),
|
|
}
|
|
if (st->st_nlink > 1 && !f_cat && !f_precious) {
|
|
fprintf(stderr,
|
|
- "%s: \"%s\" has %s other link%s -- unchanged.\n",
|
|
+ "%s: \"%s\" has %d other link%s -- unchanged.\n",
|
|
progname,name,st->st_nlink - 1,"s" + (st->st_nlink<=2));
|
|
return 0;
|
|
}
|
|
@@ -585,8 +585,8 @@ static int process_decode P0()
|
|
|
|
if (cc != sizeof(s)) {
|
|
if (cc >= 0) fprintf(stderr,
|
|
- "%s: incomplete frame (%d byte%s missing) from %s\n",
|
|
- progname, sizeof(s) - cc,
|
|
+ "%s: incomplete frame (%ld byte%s missing) from %s\n",
|
|
+ progname, (long) sizeof(s) - cc,
|
|
"s" + (sizeof(s) - cc == 1),
|
|
inname ? inname : "stdin" );
|
|
gsm_destroy(r);
|
|
@@ -624,8 +624,6 @@ static int process_decode P0()
|
|
|
|
static int process P1((name), char * name)
|
|
{
|
|
- int step = 0;
|
|
-
|
|
out = (FILE *)0;
|
|
in = (FILE *)0;
|
|
|
|
@@ -779,7 +777,6 @@ int main P2((ac, av), int ac, char **av)
|
|
case 'h': help(); exit(0);
|
|
|
|
default:
|
|
- usage:
|
|
fprintf(stderr,
|
|
"Usage: %s [-fcpdhvuaslFC] [files...] (-h for help)\n",
|
|
progname);
|