commit
6e56114b94
@ -0,0 +1,86 @@
|
||||
|
||||
Allgemeine Lizenz für Amateurfunk Software (ALAS)
|
||||
|
||||
Copyright (C) 1994 NORD><LINK e.V.
|
||||
Hinter dem Berge 5
|
||||
D-38108 Braunschweig
|
||||
|
||||
Dieses Dokument darf beliebig vervielfältigt oder verteilt werden,
|
||||
solange es nicht verändert wird. Für Anregungen, wie es zu verbessern ist,
|
||||
bin ich dankbar. (DF2AU @ DB0FC.#NDS.DEU.EU)
|
||||
|
||||
|
||||
1. Vorwort
|
||||
Diese Lizenz entstand aus der General Public Licence der Free Software
|
||||
Foundation (GPL). Ich habe versucht, den Sinn zu erhalten und mehr Klarheit
|
||||
hineinzubringen. Einige Passagen sind vollständig entfallen. Es ist aber
|
||||
jedem Nutzer freigestellt, an Stelle dieser Lizenz die GPL Bedingungen
|
||||
anzuwenden.
|
||||
|
||||
Der Sinn dieser Lizenz ist es, den Autor und den Anwender der Software zu
|
||||
schützen. Es sind daher einige Einschränkungen erforderlich und es entstehen
|
||||
auch einige Pflichten für den, der die mit dieser Lizenz verbundene Software
|
||||
weitergibt oder verändert.
|
||||
|
||||
Dies wird dadurch erreicht, dass die Software durch Copyright geschützt
|
||||
wird und der Nutzer durch diese Lizenz die Möglichkeit einer nahezu
|
||||
unbeschränkten Nutzung erhält.
|
||||
|
||||
|
||||
2. Geltungsbereich
|
||||
Diese Lizenz gilt für jedes Programm oder Teil eines Programmpaketes, das
|
||||
eine Copyright Notiz ausgibt, die sich auf diese Lizenz bezieht. Im folgenden
|
||||
bedeutet "Programm" entweder das Programm oder einen Teil davon.
|
||||
"Du" bist der Lizenznehmer.
|
||||
|
||||
|
||||
3. Deine Rechte:
|
||||
Du darfst das Programm nutzen oder kopieren oder verteilen oder verändern,
|
||||
solange Du damit keine kommerziellen Absichten verbindest.
|
||||
|
||||
|
||||
4. Deine Pflichten:
|
||||
|
||||
4.1. Du darfst den Copyright Vermerk und den Hinweis auf diese Lizenz nicht
|
||||
verändern und er muss bei jedem Start des Programms eindeutig für den
|
||||
Benutzer sichtbar sein.
|
||||
|
||||
4.2. Du musst jedem Dritten, dem Du eine Kopie des Programms gibst, die
|
||||
gleichen Rechte einräumen, die auch Dir gegeben wurden. Du musst ihm
|
||||
auch die gleichen Pflichten auferlegen.
|
||||
|
||||
4.3. Du darfst für die Weitergabe kein Geld verlangen ausser den
|
||||
Kosten für das Medium und Porto.
|
||||
|
||||
4.4. Du darfst das Programm nur komplett weitergeben, so wie Du es bekommen
|
||||
hast.
|
||||
|
||||
4.5. Wenn Du das Programm veränderst oder Teile davon für eigene Arbeiten
|
||||
verwendest - wörtlich oder verändert - so gelten die folgenden Punkte für
|
||||
das daraus entstehende neue Programm:
|
||||
|
||||
4.5.1. Du musst deutlich sichtbar angeben:
|
||||
- Deinen Namen und Deine Adresse und
|
||||
- die Tatsache, dass Du das Programm geändert hast oder Teile des
|
||||
Programms verwendet hast.
|
||||
|
||||
4.5.2. Du musst das Programm entweder mit dem kompletten Quelltext
|
||||
weitergeben oder jedem auf Verlangen eine Kopie des Quelltextes gegen eine
|
||||
Gebühr von maximal der Kosten des Mediums und der Portokosten aushändigen.
|
||||
|
||||
4.5.3. Du darfst keine Beschränkungen aussprechen, die über diese Lizenz
|
||||
hinausgehen.
|
||||
|
||||
|
||||
5. Sonstiges
|
||||
Du erhälst das Programm ohne jede Garantie für Funktion, Fehlerfreiheit oder
|
||||
Anwendbarkeit für eine bestimmte Sache. Du verzichtest auf jede
|
||||
Schadensersatzforderung, gleich aus welchem Grunde.
|
||||
Mit der Nutzung des Programms erkennst Du diese Lizenzbedingungen
|
||||
vorbehaltlos an.
|
||||
|
||||
|
||||
Vers. 1.0, 13-OCT-92
|
||||
Adressen aktualisiert am 20.10.2003
|
||||
|
||||
Ende ALAS
|
@ -0,0 +1,97 @@
|
||||
Installationshinweise zu TNN 1.79 :
|
||||
===================================
|
||||
|
||||
Diese Anleitung richtet sich in erster Linie an Linux-User, fuer DOS kann
|
||||
ein geringfuegig anderes Vorgehen notwendig werden. Als Basisverzeichnis
|
||||
dient hier in der Regel "c:\tnn".
|
||||
|
||||
Leider ist noch keine endgueltige Dokumentation verfuegbar, vieles ist aber
|
||||
im Vergleich zur Version 1.78 gleich geblieben, Unterschiede und neue Features,
|
||||
bzw. Kommandos, koennen im history-Verzeichnis nachgelesen werden, ansonsten
|
||||
stellt die alte Dokumentation der Version 1.78 einen guten Leitfaden dar.
|
||||
|
||||
Unter GCC 3.x meldet der Compiler beim Uebersetzen des Convers einige Warnings,
|
||||
diese koennen ignoriert werden.
|
||||
|
||||
|
||||
Neuinstallation :
|
||||
-----------------
|
||||
|
||||
1.) Archiv auspacken (z.B. in /usr/local/src/tnn) und in das Verzeichnis wechseln
|
||||
|
||||
Optional: Im Verzeichnis "include" die Datei "all.h" ansehen und ggf. Optionen
|
||||
aktivieren oder unerwuenschte Optionen deaktivieren (auskommentieren).
|
||||
|
||||
2.) "make baseinstall" ausfuehren
|
||||
|
||||
TNN kompiliert nun und wird anschliessend in das Verzeichnis "/usr/local/tnn"
|
||||
installiert. Je nach Betriebssystem werden Beispieldateien fuer die
|
||||
Konfiguration hinzugefuegt. Ein normales "make" erzeugt lediglich die
|
||||
ausfuehrbaren Dateien von TNN und der extrenen Programme, es findet KEINE
|
||||
Installation statt !
|
||||
|
||||
3.) "cd /usr/local/tnn"
|
||||
3.) Die Konfigurationsdateien tnn.ini, tnn179.{tnb,pas} und ax25ip.cfg
|
||||
ansehen und ggf. anpassen (bei DOS nicht alle benoetigt)
|
||||
4.) Dateizugriffsrechte ueberpruefen. TNN sollte root gehoeren, das Verzeichnis
|
||||
in dem sich TNN befindet, sollte auch NUR fuer root zugaenglich sein !
|
||||
Laeuft TNN nicht als root, so koennen einige Linuxfeatures nicht benutzt
|
||||
werden !!!
|
||||
5.) TNN starten ("./tnn")
|
||||
6.) Am Passwortprompt mit dem Konsolenpasswort aus der Datei tnn.pas einloggen
|
||||
(Standard: "Geheim")
|
||||
7.) "<ESC> c <Enter>" verbindet mit der ersten Konsole
|
||||
|
||||
Jetzt ggf. noch im laufenden Betrieb Einstellungen vornehmen (IP, Baken,
|
||||
Links, Convers etc.).
|
||||
|
||||
Optional:
|
||||
|
||||
A.) Mit dem Kommando "sp" an der TNN-Konsole die aktuelle Konfiguration
|
||||
speichern wenn alle Einstellungen gemacht sind
|
||||
B.) Die neue Datei "parms.tnb" sichten, ist alles korrekt, so kann diese in
|
||||
"tnn179.tnb" umbenannt werden. Achtung: "parms.tnb" selber wird beim
|
||||
Systemstart NICHT ausgewertet !!!
|
||||
|
||||
In der Datei "startup.log" befinden sich die Reaktionen auf die Verarbeitung
|
||||
der einzelnen Befehle der tnn179.tnb. Hier kann im Fehlerfall ueberprueft
|
||||
werden, welche Befehle nicht akzeptiert wurden.
|
||||
|
||||
|
||||
Update von TNN Version 1.78/1.79pre? :
|
||||
--------------------------------------
|
||||
|
||||
1.) Archiv auspacken
|
||||
|
||||
Optional: Optionen in "all.h" ueberpruefen und ggf. anpassen
|
||||
|
||||
2.) "make" oder "make install" ausfuehren. Bei letzterem wird die Verzeichnis-
|
||||
struktur mit angelegt und NUR das "tnn"-Executeable kopiert.
|
||||
3.) "tnn"-Executable ins TNN-Verzeichnis kopieren
|
||||
4.) Optional: externe Programm in die entsprechenden Verzeichnisse kopieren
|
||||
|
||||
Alte Konfigurationsdateien (tnn178.tnb etc.) werden automatisch geupdated.
|
||||
Auf Schreibberechtigungen des Users achten, der TNN dann startet, kann TNN die
|
||||
neuen Dateien nicht erzeugen, so wird mit STANDARDEINSTELLUNGEN (!) gestartet.
|
||||
Zur Sicherheit koennen die alten Dateien auch vor dem ersten Start von Hand
|
||||
in die neuen Namen kopiert werden (tnn178.tnb -> tnn179.tnb etc.). Als weitere
|
||||
Alternative bietet sich das "upd"-Utility an, welches nach dem Uebersetzen
|
||||
ebenfalls im "bin"-Verzeichnis zu finden ist.
|
||||
|
||||
|
||||
Update einer TNN-Version 1.77 oder aelter :
|
||||
-------------------------------------------
|
||||
|
||||
Hier ist leider Handarbeit angesagt. Es sollte das Neuinstallations-Verfahren
|
||||
durchgefuehrt werden, danach von Hand die Einstellungen (vor allem die PAR-
|
||||
Sektion) uebertragen und die Bedeutung der Parameter pruefen. Alternativ kann
|
||||
auch versucht werden, die alten .tnb-Dateien in die neue, laufende TNN mit dem
|
||||
"run"-Kommando einzulesen ("run tnn177.tnb"), und anschliessend mittels "sp"
|
||||
eine parms.tnb-Datei zur weiteren Anpassung erzeugt werden.
|
||||
|
||||
|
||||
Noch Probleme und Fragen ? Hier kann geholfen werden :
|
||||
------------------------------------------------------
|
||||
|
||||
* Im DL-Convers auf Kanal 170.
|
||||
* Auf www.nordlink.org im "Forum", Rubrik "TNN".
|
@ -0,0 +1,10 @@
|
||||
# TheNetNode-CB
|
||||
TheNetNode from Nordlink><, CB-Version (TNN 1.79cb53)
|
||||
|
||||
Version Info:
|
||||
|
||||
TheNetNode (Linux) (CB), Version 1.79cb53 (May 8 2019)
|
||||
Copyright by NORD><LINK, free for non-commercial usage.
|
||||
See www.nordlink.org for further information.
|
||||
This version compiled for 16 Ports, 400 L2-Links and 200 Circuits.
|
||||
*** CB-Version by DAA531, http://dig531.dyndns.org. ***
|
@ -0,0 +1,86 @@
|
||||
|
||||
Allgemeine Lizenz für Amateurfunk Software (ALAS)
|
||||
|
||||
Copyright (C) 1994 NORD><LINK e.V.
|
||||
Hinter dem Berge 5
|
||||
D-38108 Braunschweig
|
||||
|
||||
Dieses Dokument darf beliebig vervielfältigt oder verteilt werden,
|
||||
solange es nicht verändert wird. Für Anregungen, wie es zu verbessern ist,
|
||||
bin ich dankbar. (DF2AU @ DB0FC.#NDS.DEU.EU)
|
||||
|
||||
|
||||
1. Vorwort
|
||||
Diese Lizenz entstand aus der General Public Licence der Free Software
|
||||
Foundation (GPL). Ich habe versucht, den Sinn zu erhalten und mehr Klarheit
|
||||
hineinzubringen. Einige Passagen sind vollständig entfallen. Es ist aber
|
||||
jedem Nutzer freigestellt, an Stelle dieser Lizenz die GPL Bedingungen
|
||||
anzuwenden.
|
||||
|
||||
Der Sinn dieser Lizenz ist es, den Autor und den Anwender der Software zu
|
||||
schützen. Es sind daher einige Einschränkungen erforderlich und es entstehen
|
||||
auch einige Pflichten für den, der die mit dieser Lizenz verbundene Software
|
||||
weitergibt oder verändert.
|
||||
|
||||
Dies wird dadurch erreicht, dass die Software durch Copyright geschützt
|
||||
wird und der Nutzer durch diese Lizenz die Möglichkeit einer nahezu
|
||||
unbeschränkten Nutzung erhält.
|
||||
|
||||
|
||||
2. Geltungsbereich
|
||||
Diese Lizenz gilt für jedes Programm oder Teil eines Programmpaketes, das
|
||||
eine Copyright Notiz ausgibt, die sich auf diese Lizenz bezieht. Im folgenden
|
||||
bedeutet "Programm" entweder das Programm oder einen Teil davon.
|
||||
"Du" bist der Lizenznehmer.
|
||||
|
||||
|
||||
3. Deine Rechte:
|
||||
Du darfst das Programm nutzen oder kopieren oder verteilen oder verändern,
|
||||
solange Du damit keine kommerziellen Absichten verbindest.
|
||||
|
||||
|
||||
4. Deine Pflichten:
|
||||
|
||||
4.1. Du darfst den Copyright Vermerk und den Hinweis auf diese Lizenz nicht
|
||||
verändern und er muss bei jedem Start des Programms eindeutig für den
|
||||
Benutzer sichtbar sein.
|
||||
|
||||
4.2. Du musst jedem Dritten, dem Du eine Kopie des Programms gibst, die
|
||||
gleichen Rechte einräumen, die auch Dir gegeben wurden. Du musst ihm
|
||||
auch die gleichen Pflichten auferlegen.
|
||||
|
||||
4.3. Du darfst für die Weitergabe kein Geld verlangen ausser den
|
||||
Kosten für das Medium und Porto.
|
||||
|
||||
4.4. Du darfst das Programm nur komplett weitergeben, so wie Du es bekommen
|
||||
hast.
|
||||
|
||||
4.5. Wenn Du das Programm veränderst oder Teile davon für eigene Arbeiten
|
||||
verwendest - wörtlich oder verändert - so gelten die folgenden Punkte für
|
||||
das daraus entstehende neue Programm:
|
||||
|
||||
4.5.1. Du musst deutlich sichtbar angeben:
|
||||
- Deinen Namen und Deine Adresse und
|
||||
- die Tatsache, dass Du das Programm geändert hast oder Teile des
|
||||
Programms verwendet hast.
|
||||
|
||||
4.5.2. Du musst das Programm entweder mit dem kompletten Quelltext
|
||||
weitergeben oder jedem auf Verlangen eine Kopie des Quelltextes gegen eine
|
||||
Gebühr von maximal der Kosten des Mediums und der Portokosten aushändigen.
|
||||
|
||||
4.5.3. Du darfst keine Beschränkungen aussprechen, die über diese Lizenz
|
||||
hinausgehen.
|
||||
|
||||
|
||||
5. Sonstiges
|
||||
Du erhälst das Programm ohne jede Garantie für Funktion, Fehlerfreiheit oder
|
||||
Anwendbarkeit für eine bestimmte Sache. Du verzichtest auf jede
|
||||
Schadensersatzforderung, gleich aus welchem Grunde.
|
||||
Mit der Nutzung des Programms erkennst Du diese Lizenzbedingungen
|
||||
vorbehaltlos an.
|
||||
|
||||
|
||||
Vers. 1.0, 13-OCT-92
|
||||
Adressen aktualisiert am 20.10.2003
|
||||
|
||||
Ende ALAS
|
@ -0,0 +1,157 @@
|
||||
########################################################################
|
||||
# #
|
||||
# ***** ***** #
|
||||
# ***** ***** #
|
||||
# ***** ***** #
|
||||
# ***** ***** #
|
||||
# *************** *************** #
|
||||
# ***************** ***************** #
|
||||
# *************** *************** #
|
||||
# ***** ***** TheNetNode #
|
||||
# ***** ***** Portable #
|
||||
# ***** ***** Network #
|
||||
# ***** ***** Software #
|
||||
# #
|
||||
# File contrib/makefile (maintained by: DF6LN) #
|
||||
# #
|
||||
# Copyright (C) 1998 - 2004 NORD><LINK e.V. Braunschweig #
|
||||
# #
|
||||
# This program is free software; you can redistribute it and/or modify #
|
||||
# it under the terms of the NORD><LINK ALAS (Allgemeine Lizenz fuer #
|
||||
# Amateurfunk Software) as published by Hans Georg Giese (DF2AU) #
|
||||
# on 13/Oct/1992; either version 1, or (at your option) any later #
|
||||
# version. #
|
||||
# #
|
||||
# This program is distributed WITHOUT ANY WARRANTY only for further #
|
||||
# development and learning purposes. See the ALAS (Allgemeine Lizenz #
|
||||
# fuer Amateurfunk Software). #
|
||||
# #
|
||||
# You should have received a copy of the NORD><LINK ALAS (Allgemeine #
|
||||
# Lizenz fuer Amateurfunk Software) along with this program; if not, #
|
||||
# write to NORD><LINK e.V., Hinter dem Berge 5, D-38108 Braunschweig #
|
||||
# #
|
||||
# Dieses Programm ist PUBLIC DOMAIN, mit den Einschraenkungen durch #
|
||||
# die ALAS (Allgemeine Lizenz fuer Amateurfunk Software), entweder #
|
||||
# Version 1, veroeffentlicht von Hans Georg Giese (DF2AU), #
|
||||
# am 13.Oct.1992, oder (wenn gewuenscht) jede spaetere Version. #
|
||||
# #
|
||||
# Dieses Programm wird unter Haftungsausschluss vertrieben, aus- #
|
||||
# schliesslich fuer Weiterentwicklungs- und Lehrzwecke. Naeheres #
|
||||
# koennen Sie der ALAS (Allgemeine Lizenz fuer Amateurfunk Software) #
|
||||
# entnehmen. #
|
||||
# #
|
||||
# Sollte dieser Software keine ALAS (Allgemeine Lizenz fuer Amateur- #
|
||||
# funk Software) beigelegen haben, wenden Sie sich bitte an #
|
||||
# NORD><LINK e.V., Hinter dem Berge 5, D-38108 Braunschweig #
|
||||
# #
|
||||
########################################################################
|
||||
|
||||
#
|
||||
# Geruest fuer ein makefile in contrib/programmname mit dem das Programm
|
||||
# "prg" uebersetzt werden soll, das im TNN-Unterverzeichnis userexe laufen
|
||||
# soll.
|
||||
#
|
||||
# Das Programm soll grundsaetzlich in das Verzeichnis $(BIN) uebersetzt
|
||||
# werden. Die in den anderen Makefiles verwendeten Targets duerfen nicht
|
||||
# noch einmal verwendet werden. Daher werden fuer "clean", "dist", etc.
|
||||
# jeweils zusaetzliche abhaengige Targets definiert, unter denen dann die
|
||||
# tatsaechliche Ausfuehrung stattfindet. Folgende Targets sollten
|
||||
# beruecksichtigt werden:
|
||||
#
|
||||
# prg - (ist durch den Programmnamen zu ersetzen) uebersetzen des
|
||||
# Programms in das Verzeichnis $(BIN). Evtl. zusaetzlich
|
||||
# generierte Dateien sollten im Verzeichnis des Programms
|
||||
# bleiben (contrib/programmname). Das Programm kann fuer LINUX
|
||||
# und / oder GO32 uebersetzt werden, oder auch fuer GO32 unter
|
||||
# DOS.
|
||||
#
|
||||
# all - hier wird prg zusaetzlich eingetragen, so dass es bei einem
|
||||
# Befehl "make" ohne zusaetzliche Parameter mit uebersetzt
|
||||
# wird.
|
||||
#
|
||||
# clean - loeschen des compilierten Programms in $(BIN) und aller
|
||||
# anderen mit den normalen Libraries neu generierbaren Files.
|
||||
# Wenn spezielle Libraries benoetigt werden (z.b. von p2c),
|
||||
# sind besondere Massnahmen zu ueberlegen, damit nicht etwas
|
||||
# falsches geloescht wird (s. contrib/onlhelp/makefile).
|
||||
#
|
||||
# bigdist - (nur bei Linux) kopieren der fuer das Uebersetzen des
|
||||
# Programms benoetigten Dateien in das Verzeichnis
|
||||
# $(DISTDIR)/contrib/programmname - dazu gehoeren die *.c und
|
||||
# *.h Dateien sowie das Makefile und evtl. weitere Dateien wie
|
||||
# z.B. Hilfetexte.
|
||||
#
|
||||
# install - (nur fuer Linux) kopieren des fertigen Programms sowie der
|
||||
# ggf. benoetigten weiteren Dateien (Hilfe etc.) in die
|
||||
# passenden Verzeichnisse $(TNNDIR), $(TNNUSEREXE),
|
||||
# $(TNNSYSEXE), usw. - abhaengig von der gewuenschten Funktion
|
||||
#
|
||||
# go32 - (nur fuer Linux) wenn das Programm in einer GO32-Version
|
||||
# unter Linux uebersetzt werden kann, sollte es hier auch mit
|
||||
# eingetragen werden, damit es bei einem Befehl "make go32"
|
||||
# mit uebersetzt wird.
|
||||
#
|
||||
|
||||
PRGNAM := contrib/programmname
|
||||
PRGFILES := $(PRGNAM)/prg.c $(PRGNAM)/makefile
|
||||
|
||||
# Phony Targets eintragen, die fuer LINUX und DOS gueltig sind
|
||||
.PHONY: prg prgclean
|
||||
|
||||
# Lokale Erweiterung eintragen fuer "all" und "clean"
|
||||
all: prg
|
||||
clean: prgclean
|
||||
|
||||
# das wird bei "make prg" tatsaechlich uebersetzt:
|
||||
prg: $(BIN)/prg
|
||||
|
||||
# nun wirds Systemabhaengig - erstmal Linux
|
||||
ifeq ($(SYSTEM), LINUX)
|
||||
# Phony Targets eintragen, die nur fuer LINUX gueltig sind
|
||||
.PHONY: prgdist prginstall prggo32
|
||||
|
||||
# Lokale Erweiterung fuer "dist" eintragen
|
||||
bigdist: prgdist
|
||||
# Lokale Erweiterung fuer "install" eintragen
|
||||
install: prginstall
|
||||
# Lokale Erweiterung fuer "go32" eintragen
|
||||
go32: prggo32
|
||||
# das wird bei "make prggo32" tatsaechlich uebersetzt:
|
||||
prggo32: $(BIN)/prggo32
|
||||
|
||||
# hier wird tatsaechlich uebersetzt
|
||||
$(BIN)/prg: $(PRGFILES) $(CLEANER)
|
||||
$(CLEANER) $(PRG)/prg.c
|
||||
$(CC) $(CFLAGS_LIN) $(PRG)/prg.c -o $@
|
||||
sync
|
||||
echo $@ done.
|
||||
|
||||
$(BIN)/prggo32: $(PRGFILES) $(CLEANER)
|
||||
$(CLEANER) $(PRG)/prg.c
|
||||
$(CC_GO32) $(CFLAGS_GO32) $(PRG)/prg.c -o $@
|
||||
chmod 644 $@
|
||||
sync
|
||||
echo $@ done.
|
||||
|
||||
prgclean:
|
||||
rm -f $(BIN)/prg $(BIN)/prggo32{,.exe} $(PRG)/*~
|
||||
|
||||
prgdist:
|
||||
cp --parents $(PRGFILES) $(DISTDIR)
|
||||
|
||||
prginstall:
|
||||
install -m 0700 $(BIN)/prg $(TNNUSEREXE)/prg
|
||||
else
|
||||
#
|
||||
# Hier (fast) das gleiche fuer Dose
|
||||
#
|
||||
$(BIN)/prg: $(PRGFILES) $(CLEANER)
|
||||
$(CLEANER) $(PRG)/prg.c
|
||||
$(CC) $(CFLAGS_GO32) $(PRG)/prg.c -o $@
|
||||
echo $@ done.
|
||||
|
||||
prgclean:
|
||||
erase $(subst /,\\,$(BIN))\prg
|
||||
erase $(subst /,\\,$(BIN))\prg.exe
|
||||
erase $(subst /,\\,$(PRG))\*.bak
|
||||
endif
|
@ -0,0 +1,126 @@
|
||||
########################################################################
|
||||
# #
|
||||
# ***** ***** #
|
||||
# ***** ***** #
|
||||
# ***** ***** #
|
||||
# ***** ***** #
|
||||
# *************** *************** #
|
||||
# ***************** ***************** #
|
||||
# *************** *************** #
|
||||
# ***** ***** TheNetNode #
|
||||
# ***** ***** Portable #
|
||||
# ***** ***** Network #
|
||||
# ***** ***** Software #
|
||||
# #
|
||||
# File makefile (maintained by: DG8BR) #
|
||||
# #
|
||||
# Copyright (C) 1998 - 2004 NORD><LINK e.V. Braunschweig #
|
||||
# #
|
||||
# This program is free software; you can redistribute it and/or modify #
|
||||
# it under the terms of the NORD><LINK ALAS (Allgemeine Lizenz fuer #
|
||||
# Amateurfunk Software) as published by Hans Georg Giese (DF2AU) #
|
||||
# on 13/Oct/1992; either version 1, or (at your option) any later #
|
||||
# version. #
|
||||
# #
|
||||
# This program is distributed WITHOUT ANY WARRANTY only for further #
|
||||
# development and learning purposes. See the ALAS (Allgemeine Lizenz #
|
||||
# fuer Amateurfunk Software). #
|
||||
# #
|
||||
# You should have received a copy of the NORD><LINK ALAS (Allgemeine #
|
||||
# Lizenz fuer Amateurfunk Software) along with this program; if not, #
|
||||
# write to NORD><LINK e.V., Hinter dem Berge 5, D-38108 Braunschweig #
|
||||
# #
|
||||
# Dieses Programm ist PUBLIC DOMAIN, mit den Einschraenkungen durch #
|
||||
# die ALAS (Allgemeine Lizenz fuer Amateurfunk Software), entweder #
|
||||
# Version 1, veroeffentlicht von Hans Georg Giese (DF2AU), #
|
||||
# am 13.Oct.1992, oder (wenn gewuenscht) jede spaetere Version. #
|
||||
# #
|
||||
# Dieses Programm wird unter Haftungsausschluss vertrieben, aus- #
|
||||
# schliesslich fuer Weiterentwicklungs- und Lehrzwecke. Naeheres #
|
||||
# koennen Sie der ALAS (Allgemeine Lizenz fuer Amateurfunk Software) #
|
||||
# entnehmen. #
|
||||
# #
|
||||
# Sollte dieser Software keine ALAS (Allgemeine Lizenz fuer Amateur- #
|
||||
# funk Software) beigelegen haben, wenden Sie sich bitte an #
|
||||
# NORD><LINK e.V., Hinter dem Berge 5, D-38108 Braunschweig #
|
||||
# #
|
||||
########################################################################
|
||||
|
||||
#
|
||||
# Makefile fuer MSG und MSY
|
||||
#
|
||||
|
||||
MSGMSY := contrib/msgmsy
|
||||
MSGFILES := $(MSGMSY)/{ms[gy]{_lin.c,.his,.inf},msg.{usr,sys},makefile}
|
||||
|
||||
.PHONY: msg msy msgclean
|
||||
|
||||
all: msg msy
|
||||
clean: msgclean
|
||||
|
||||
msg: $(BIN)/msg
|
||||
msy: $(BIN)/msy
|
||||
|
||||
ifeq ($(SYSTEM), LINUX)
|
||||
.PHONY: msgdist msginstall msggo32 msygo32
|
||||
|
||||
bigdist: msgdist
|
||||
install: msginstall
|
||||
go32: msggo32 msygo32
|
||||
msggo32: $(BIN)/msggo32
|
||||
msygo32: $(BIN)/msygo32
|
||||
|
||||
$(BIN)/msg: $(MSGMSY)/msg_lin.c $(MSGMSY)/makefile $(CLEANER)
|
||||
$(CLEANER) $(MSGMSY)/msg_lin.c
|
||||
$(CC) $(CFLAGS_LIN) $(LDFLAGS_LIN) -o $@ $(MSGMSY)/msg_lin.c
|
||||
echo $@ done.
|
||||
|
||||
$(BIN)/msy: $(MSGMSY)/msy_lin.c $(MSGMSY)/makefile $(CLEANER)
|
||||
$(CLEANER) $(MSGMSY)/msy_lin.c
|
||||
$(CC) $(CFLAGS_LIN) $(LDFLAGS_LIN) -o $@ $(MSGMSY)/msy_lin.c
|
||||
echo $@ done.
|
||||
|
||||
$(BIN)/msggo32: $(MSGMSY)/msg_lin.c $(MSGMSY)/makefile $(CLEANER)
|
||||
$(CLEANER) $(MSGMSY)/msg_lin.c
|
||||
$(CC) $(CFLAGS_GO32) -o $@ $(MSGMSY)/msg_lin.c
|
||||
chmod 644 $@
|
||||
echo $@ done.
|
||||
|
||||
$(BIN)/msygo32: $(MSGMSY)/msy_lin.c $(MSGMSY)/makefile $(CLEANER)
|
||||
$(CLEANER) $(MSGMSY)/msy_lin.c
|
||||
$(CC) $(CFLAGS_GO32) -o $@ $(MSGMSY)/msy_lin.c
|
||||
chmod 644 $@
|
||||
echo $@ done.
|
||||
|
||||
msgclean:
|
||||
rm -f $(BIN)/ms[gy] $(BIN)/ms[gy]go32{,.exe} $(MSGMSY)/*~
|
||||
|
||||
msgdist:
|
||||
cp --parents $(MSGFILES) $(DISTDIR)
|
||||
|
||||
msginstall:
|
||||
echo $@
|
||||
install -m 0700 $(BIN)/msg $(TNNUSEREXE)msg
|
||||
install -m 0700 $(BIN)/msy $(TNNSYSEXE)msy
|
||||
cp $(MSGMSY)/msg.{usr,sys} $(TNNMSG)
|
||||
else
|
||||
#
|
||||
# Nun kommt Dose
|
||||
#
|
||||
$(BIN)/msg: $(MSGMSY)/msg_lin.c $(MSGMSY)/makefile $(CLEANER)
|
||||
$(CLEANER) $(MSGMSY)/msg_lin.c
|
||||
$(CC) $(CFLAGS_GO32) -o $@ $(MSGMSY)/msg_lin.c
|
||||
echo $@ done.
|
||||
|
||||
$(BIN)/msy: $(MSGMSY)/msy_lin.c $(MSGMSY)/makefile $(CLEANER)
|
||||
$(CLEANER) $(MSGMSY)/msy_lin.c
|
||||
$(CC) $(CFLAGS_GO32) -o $@ $(MSGMSY)/msy_lin.c
|
||||
echo $@ done.
|
||||
|
||||
msgclean:
|
||||
erase $(subst /,\\,$(BIN))\msg
|
||||
erase $(subst /,\\,$(BIN))\msy
|
||||
erase $(subst /,\\,$(BIN))\msg.exe
|
||||
erase $(subst /,\\,$(BIN))\msy.exe
|
||||
erase $(subst /,\\,$(MSGMSY))\*.bak
|
||||
endif
|
@ -0,0 +1,15 @@
|
||||
Version gleich Datum
|
||||
====================
|
||||
|
||||
16.01.1999
|
||||
- Verteilversion
|
||||
|
||||
03.06.1999
|
||||
- Wegen libc6(glibc2) ein "#include <errno.h>" eingebaut.
|
||||
und main von "void" nach "int" umgestellt.
|
||||
|
||||
20.06.99
|
||||
- Durch einen Fehler in der Speicherroutine konnte es unter Linux in einer
|
||||
bestimmten Situation zu einem 'Segmentation fault' kommen.
|
||||
Wurde abgefangen.
|
||||
|
@ -0,0 +1,23 @@
|
||||
Hallo Sysop's,
|
||||
das Paket sollte folgende Dateien beinhalten.
|
||||
|
||||
- msg_lin.c das Programm. MUSS als msg.exe. TNN verlangt .exe!!!!
|
||||
- msg.usr die Hilfedatei
|
||||
- msg.mak das Makefile
|
||||
- msg.his Histo
|
||||
|
||||
Nach dem Kompilieren solltet Ihr eine msg.exe haben.
|
||||
|
||||
Bitte msg.exe in's Verzeichnis "userexe" kopieren.
|
||||
Die Hilfe-Datei msg.usr bitte ins Verzeichnis "msg".
|
||||
Das Verzeichnis "msg" sollte unter tnn stehen. Aber das wisst Ihr sicher.
|
||||
|
||||
Es wird kein Environmenteintrag benoetigt.
|
||||
|
||||
Das Programm erkennt wo es ist. Zwingend ist nur vorgeschrieben,
|
||||
das die Hilfedatei im Verzeichniss "msg" steht!!!
|
||||
Da werden auch die call.msg geschrieben.
|
||||
|
||||
Fehler bitte unbedingt melden!!
|
||||
|
||||
Bis denne Bernd DG8BR
|
@ -0,0 +1,62 @@
|
||||
|
||||
Uebersicht zur MSY-Hilfe : 3.02
|
||||
-------------------------
|
||||
|
||||
(MSY) C count lifetime -1
|
||||
(MSY) D dir
|
||||
(MSY) E erase
|
||||
(MSY) G group
|
||||
(MSY) L list
|
||||
(MSY) S send
|
||||
(MSY) V version
|
||||
|
||||
|
||||
|
||||
Detaillierte Hilfe zu MSY :
|
||||
---------------------------
|
||||
|
||||
|
||||
(MSY) C
|
||||
Lifetime aller MSG's wird um 1 verringert. Dieses kann per Hand
|
||||
geschehen oder sinnvollerweise mit z. B. folgendem TNB-File.
|
||||
|
||||
######01.TNB
|
||||
============
|
||||
; ;Diese File startet taeglich um 1:00 Uhr.
|
||||
MSY C ;Lifetime der .MSG-File um einen Tag herrabsetzen
|
||||
; ;und bei Lifetime = 0 entfernen.
|
||||
|
||||
(MSY) D Listet die Header aller MSG's auf.
|
||||
|
||||
(MSY) D -#x o. +#x
|
||||
MSG's, deren LT (-) kleiner o. (+) groesser x-Tage ist.
|
||||
|
||||
(MSY) D -*x o. +*x
|
||||
MSG's, die (-) juenger o. (+) aelter als x-Tage sind.
|
||||
|
||||
(MSY) D FROM
|
||||
zeigt MSG-Liste sortiert nach Absender-Calls an.
|
||||
|
||||
Die Sortierung kann auch nach :
|
||||
|
||||
BYTE, DATE, TIME, LT, RETURN vorgenommen werden.
|
||||
|
||||
(MSY) E ALL <call>
|
||||
Loescht alle MSG's von oder an <call>.
|
||||
|
||||
(MSY) E 3 <call>
|
||||
Loescht die dritte Nachricht an <call>. Varianten sind 1-4, 2- oder -3.
|
||||
|
||||
(MSY) G <gruppe> +/- <call>
|
||||
Fuegt/loescht <call> ein/aus <gruppe>. Zugelassen sind in einer Gruppe
|
||||
maximal 50 Call's.
|
||||
|
||||
(MSY) L
|
||||
Zeigt alle MSG-Files.
|
||||
|
||||
(MSY) S <call> <#x> <text>
|
||||
Schreibt <text> an <call> mit Lifetime x. Hier ist eine Lifetime von
|
||||
maximal 99 Tagen moeglich.
|
||||
|
||||
(MSY) V
|
||||
Ausgabe von der Versionsnummer und dem Datum.
|
@ -0,0 +1,78 @@
|
||||
Uebersicht zur MSG-Hilfe : 3.04
|
||||
-------------------------
|
||||
(MS)G S <ZIELCALL/GRUPPE> <#lifetime> <text> sendet MSG
|
||||
(MS)G R <call> <nummer> liest MSG
|
||||
(MS)G L listet MSGs
|
||||
(MS)G E loescht MSGs
|
||||
(MS)G G <gruppe> listet Gruppen
|
||||
(MS)G V zeigt Version
|
||||
|
||||
|
||||
|
||||
Detaillierte Hilfe zu MSG :
|
||||
---------------------------
|
||||
|
||||
(MS)G S <ZIELCALL/GRUPPE> #<lifetime> <text>
|
||||
Zum Erstellen einer Digimail (MSG) :
|
||||
|
||||
Der Message-Befehl ermoeglicht es, einem Benutzer des Knotens eine kurze
|
||||
(!) Nachricht in den CTEXT zu schreiben. Beim naechsten Connect wird
|
||||
diese Zeile dann bei Ihm im CTEXT erscheinen. Statt des Zielcalls kann
|
||||
auch eine Zielgruppe angegeben werden. Diese ist eine Art Verteiler-
|
||||
liste. Jedes Mitglied der Zielgruppe bekommt eine Kopie der Nachricht.
|
||||
|
||||
Die Lifetime kann, muss aber nicht, angegeben werden. Sie kann von #1 =
|
||||
einem Tag bis #30 = dreissig Tage angegeben werden. Wird keine Lifetime
|
||||
angegeben, so wird sie auf default = 7 Tage gesetzt. Das taegliche
|
||||
Herabsetzen der Lifetime geschieht im Digi. Ist die Lifetime abgelaufen
|
||||
und der Adressat ist nicht der Absender, bekommt der Absender seine MSG
|
||||
mit einer Default-Lifetime von 7 Tagen zurueck. Nach dieser Zeit wird
|
||||
die MSG endgueltig geloescht.
|
||||
|
||||
Abhaengig davon, ob das System mit einer Festplatte oder einer RAMDISK
|
||||
arbeitet, kann die Nachricht bei Absturz oder Reset verloren gehen.
|
||||
|
||||
Beispiel: MSG S DL9GYA #10 Roland, bitte connecte mich, wenn Du zurueck
|
||||
bist!
|
||||
|
||||
MSG S SYSOP Link nach ..... defekt?!
|
||||
|
||||
Letzteres wuerde die Nachricht an die OM's der Gruppe SYSOP weiter-
|
||||
leiten.
|
||||
Die Definition einer neuen Gruppe geschieht nur durch die Sysops. Bitte
|
||||
danach fragen.
|
||||
|
||||
(MS)G R
|
||||
Liest die eigenen MSG's aus.
|
||||
|
||||
(MS)G R <call>
|
||||
Liest die an <call> gerichteten MSG's aus.
|
||||
|
||||
(MS)G R <call> 1 oder 1-3
|
||||
Zusaetzlich kann noch eine Numerierung mit angegeben werden. Also
|
||||
lesen der MSG 1 oder MSG 1-3.
|
||||
|
||||
(MS)G L
|
||||
Listet die eigenen Header auf.
|
||||
|
||||
(MS)G E
|
||||
Dieser Befehl loescht alle eigenen Digimail-Nachrichten.
|
||||
|
||||
(MS)G E 1-2
|
||||
Dieser Befehl loescht Nr. 1-2 der eigenen Digimail-Nachrichten. Es muss
|
||||
mindestens eine Zahl angegeben werden.
|
||||
|
||||
(MS)G E 1- <call>
|
||||
Dieser Befehl loescht alle eigenen Digimail-Nachrichten die an <call>
|
||||
geschickt wurden.
|
||||
|
||||
(MS)G G
|
||||
zeigt alle vorhandenen Verteiler-Gruppen mit Call's an.
|
||||
|
||||
(MS)G G <gruppe>
|
||||
zeigt nur die Call's in der <gruppe> an
|
||||
|
||||
Neue Gruppen koennen nur vom Sysop angelegt werden!
|
||||
|
||||
(MS)G V
|
||||
Gibt Versionsnummer und -Datum aus.
|
@ -0,0 +1,950 @@
|
||||
/************************************************************************/
|
||||
/* */
|
||||
/* ***** ***** */
|
||||
/* ***** ***** */
|
||||
/* ***** ***** */
|
||||
/* ***** ***** */
|
||||
/* *************** *************** */
|
||||
/* ***************** ***************** */
|
||||
/* *************** *************** */
|
||||
/* ***** ***** TheNetNode */
|
||||
/* ***** ***** Portable */
|
||||
/* ***** ***** Network */
|
||||
/* ***** ***** Software */
|
||||
/* */
|
||||
/* File msg_lin.c (maintained by: DG8BR) */
|
||||
/* */
|
||||
/* */
|
||||
/* Copyright (C) 1998 - 2008 NORD><LINK e.V. Braunschweig */
|
||||
/* */
|
||||
/* This program is free software; you can redistribute it and/or modify */
|
||||
/* it under the terms of the NORD><LINK ALAS (Allgemeine Lizenz fuer */
|
||||
/* Amateurfunk Software) as published by Hans Georg Giese (DF2AU) */
|
||||
/* on 13/Oct/1992; either version 1, or (at your option) any later */
|
||||
/* version. */
|
||||
/* */
|
||||
/* This program is distributed WITHOUT ANY WARRANTY only for further */
|
||||
/* development and learning purposes. See the ALAS (Allgemeine Lizenz */
|
||||
/* fuer Amateurfunk Software). */
|
||||
/* */
|
||||
/* You should have received a copy of the NORD><LINK ALAS (Allgemeine */
|
||||
/* Lizenz fuer Amateurfunk Software) along with this program; if not, */
|
||||
/* write to NORD><LINK e.V., Hinter dem Berge 5, D-38108 Braunschweig */
|
||||
/* */
|
||||
/* Dieses Programm ist PUBLIC DOMAIN, mit den Einschraenkungen durch */
|
||||
/* die ALAS (Allgemeine Lizenz fuer Amateurfunk Software), entweder */
|
||||
/* Version 1, veroeffentlicht von Hans Georg Giese (DF2AU), */
|
||||
/* am 13.Oct.1992, oder (wenn gewuenscht) jede spaetere Version. */
|
||||
/* */
|
||||
/* Dieses Programm wird unter Haftungsausschluss vertrieben, aus- */
|
||||
/* schliesslich fuer Weiterentwicklungs- und Lehrzwecke. Naeheres */
|
||||
/* koennen Sie der ALAS (Allgemeine Lizenz fuer Amateurfunk Software) */
|
||||
/* entnehmen. */
|
||||
/* */
|
||||
/* Sollte dieser Software keine ALAS (Allgemeine Lizenz fuer Amateur- */
|
||||
/* funk Software) beigelegen haben, wenden Sie sich bitte an */
|
||||
/* NORD><LINK e.V., Hinter dem Berge 5, D-38108 Braunschweig */
|
||||
/* */
|
||||
/************************************************************************/
|
||||
|
||||
/*****************************************************************************
|
||||
Dies ist ein Remake von MSG.PAS.
|
||||
Erstellt wurde die Originalversion von DG3AAH und DF7BZ in Pascal.
|
||||
|
||||
Ihnen ist die Entstehung des Programmpaares MSG und MSY zuverdanken.
|
||||
|
||||
Da ich einige Sachen aus DF6LN's Linuxpacket fuer TNN entnommen habe,
|
||||
moechte und muss ich diese Ausgabe unter ALAS stellen.
|
||||
Dieses Programm ist in der Bedienung und in der Ausgabe weitestgehend
|
||||
kompatibel zum Original-MSG.
|
||||
|
||||
Viele Gruesse Bernd DG8BR
|
||||
*****************************************************************************/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <time.h>
|
||||
#include <ctype.h>
|
||||
|
||||
#ifdef __MSDOS__
|
||||
#include <dir.h>
|
||||
#endif
|
||||
|
||||
#ifdef __GO32__
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
|
||||
#ifdef __linux__
|
||||
#include <errno.h>
|
||||
#include <unistd.h>
|
||||
#include <fnmatch.h>
|
||||
#include <dirent.h>
|
||||
#include <sys/stat.h>
|
||||
#endif
|
||||
|
||||
#ifdef WIN32
|
||||
#ifdef _MSC_VER
|
||||
/* Wird nur im VC benoetig. */
|
||||
#include <direct.h>
|
||||
#endif /* MSC_VER */
|
||||
#include <sys/stat.h>
|
||||
#include "sys/dirent32.h"
|
||||
#include "sys/fnmatch.h"
|
||||
#endif /* WIN32 */
|
||||
|
||||
/* Definitionen */
|
||||
#define MaxZeilen 200
|
||||
#define MaxLT 30
|
||||
#define FALSE 0
|
||||
#define TRUE (!FALSE)
|
||||
#define DefaultLT " 7"
|
||||
#ifdef __MSDOS__
|
||||
#define Seperator '\\'
|
||||
#define xfindfirst findfirst
|
||||
#define xfindnext findnext
|
||||
#endif
|
||||
|
||||
#ifdef WIN32
|
||||
#define MAXPATH 255
|
||||
#define NAME_MAX 260
|
||||
#define findfirst _findfirst
|
||||
#define findnext _findnext
|
||||
#define Seperator '\\'
|
||||
#endif /* WIN32 */
|
||||
|
||||
#ifdef __linux__
|
||||
#define Seperator '/'
|
||||
#define MAXPATH 128 /* ist unter TC3.1 auf 80 festgelegt */
|
||||
#define stricmp strcasecmp
|
||||
#endif
|
||||
|
||||
/* Globale Variablen */
|
||||
int Status; /* True, wenn procedure erfolgreich */
|
||||
int Gruppe; /* True, wenn Call==Gruppe */
|
||||
char Usercall[10]; /* Aufrufender des MSG-pgms */
|
||||
char msgpath[MAXPATH];
|
||||
char ZeitZone[5];
|
||||
#ifndef WIN32
|
||||
struct ffblk ffblk;
|
||||
#endif /* WIN32 */
|
||||
|
||||
/* Prototypen */
|
||||
void ListMsg (int,int,char**);
|
||||
void GroupMsg ( int, char** );
|
||||
void SendMsg ( int, char** );
|
||||
void HelpMsg ( void );
|
||||
void VerMsg ( void );
|
||||
|
||||
int Suche_Datei ( char* );
|
||||
void Stop (char* );
|
||||
int Calltest ( char* );
|
||||
int speichern ( char*, char*, char* ); /* Unterfunktion von SendMsg */
|
||||
|
||||
/* Alles unter dem nachfolgenden ifdef __linux__ wurde aus dem TNN-Packet */
|
||||
/* fuer LinuX von der NORD><LINK - Gruppe bzw. aus dem DJGPP GNU-Paket fuer */
|
||||
/* DOS von D.J. Delorie entnommen. */
|
||||
|
||||
#if defined(__linux__) || defined(WIN32)
|
||||
#ifndef WIN32
|
||||
int xfindfirst (const char*, struct ffblk *, int);
|
||||
int xfindnext (struct ffblk *);
|
||||
void setfiletime (struct ffblk * );
|
||||
#endif /* WIN32 */
|
||||
char* strlwr (char*);
|
||||
char* strupr (char*);
|
||||
|
||||
|
||||
struct ffblk
|
||||
{
|
||||
char ff_path[MAXPATH];
|
||||
char ff_find[NAME_MAX];
|
||||
char ff_name[NAME_MAX];
|
||||
unsigned ff_fdate;
|
||||
unsigned ff_ftime;
|
||||
};
|
||||
|
||||
#ifdef WIN32
|
||||
struct ffblk ffblk;
|
||||
|
||||
int xfindfirst (const char*, struct ffblk *, int);
|
||||
int xfindnext (struct ffblk *);
|
||||
void setfiletime (struct ffblk * );
|
||||
#endif /* WIN32 */
|
||||
|
||||
struct ftime
|
||||
{
|
||||
unsigned ft_tsec : 5;
|
||||
unsigned ft_min : 6;
|
||||
unsigned ft_hour : 5;
|
||||
unsigned ft_day : 5;
|
||||
unsigned ft_month : 4;
|
||||
unsigned ft_year : 7;
|
||||
};
|
||||
|
||||
/************************************************************************/
|
||||
/* */
|
||||
/* Als Ersatz fuer die Funktionen "findfirst" und "findnext" (bei DOS) */
|
||||
/* werden die Funktionen "xfindfirst" und "xfindnext" verwendet. Hier */
|
||||
/* wird nur der fuer TNN benoetigte Teil in die Struktur ffblk einge- */
|
||||
/* tragen. Der zuletzt gefundene Filename muss in ffblk->ff_name erhal- */
|
||||
/* ten bleiben, weil dieser beim Aufruf von "xfindnext" gesucht wird. */
|
||||
/* */
|
||||
/************************************************************************/
|
||||
|
||||
int xfindfirst(const char *pathname, struct ffblk *ffblk, int attrib)
|
||||
{
|
||||
char *fnpoi;
|
||||
DIR *dp;
|
||||
struct dirent *dirp;
|
||||
int retval;
|
||||
|
||||
strcpy(ffblk->ff_path, pathname); /* Filename incl. Pfad */
|
||||
#ifdef WIN32
|
||||
fnpoi = strrchr(ffblk->ff_path, Seperator); /* Pfad angegeben? */
|
||||
#else
|
||||
fnpoi = strrchr(ffblk->ff_path, '/'); /* Pfad angegeben? */
|
||||
#endif /* WIN32 */
|
||||
if (fnpoi == NULL) /* - nein .. */
|
||||
{
|
||||
strcpy(ffblk->ff_find, ffblk->ff_path); /* Filename kopieren */
|
||||
strcpy(ffblk->ff_path, msgpath); /* default: msgpath */
|
||||
}
|
||||
else /* mit Pfad */
|
||||
{
|
||||
if (fnpoi == ffblk->ff_path+strlen(ffblk->ff_path)) /* ohne Name */
|
||||
return(-1); /* Unsinn */
|
||||
strcpy(ffblk->ff_find, ++fnpoi); /* nur Filename */
|
||||
*fnpoi = '\0'; /* Filename im Pfad loeschen */
|
||||
}
|
||||
|
||||
if ((dp = opendir(ffblk->ff_path)) == NULL) /* Directory vorhanden? */
|
||||
return(-1);
|
||||
retval = -1; /* default: nix gefunden */
|
||||
while ((dirp = readdir(dp)) != NULL) /* Eintrag vorhanden? */
|
||||
{
|
||||
if ((fnmatch(ffblk->ff_find, dirp->d_name,
|
||||
FNM_PATHNAME|FNM_PERIOD) != 0))
|
||||
continue;
|
||||
strcpy(ffblk->ff_name, dirp->d_name);
|
||||
setfiletime(ffblk);
|
||||
retval = 0;
|
||||
break;
|
||||
}
|
||||
closedir(dp);
|
||||
return(retval);
|
||||
}
|
||||
|
||||
/****************************************************************************/
|
||||
/* */
|
||||
/* Erst den zuletzt gefundenen Eintrag suchen (steht in ffblk->ff_name) */
|
||||
/* und den darauffolgenden passenden Eintrag zurueckmelden. */
|
||||
/* */
|
||||
/****************************************************************************/
|
||||
|
||||
int xfindnext(struct ffblk *ffblk)
|
||||
{
|
||||
DIR *dp;
|
||||
struct dirent *dirp;
|
||||
int retval;
|
||||
|
||||
if ((dp = opendir(ffblk->ff_path)) == NULL)
|
||||
return -1;
|
||||
retval = -1; /* default: nix gefunden */
|
||||
while ((dirp = readdir(dp)) != NULL)
|
||||
{
|
||||
if ((fnmatch(ffblk->ff_name, dirp->d_name,
|
||||
FNM_PATHNAME|FNM_PERIOD) != 0))
|
||||
continue;
|
||||
retval = 1;
|
||||
break;
|
||||
}
|
||||
if (retval == 1)
|
||||
{
|
||||
retval = -1; /* default: nix gefunden */
|
||||
while ((dirp = readdir(dp)) != NULL)
|
||||
{
|
||||
if ((fnmatch(ffblk->ff_find, dirp->d_name,
|
||||
FNM_PATHNAME|FNM_PERIOD) != 0))
|
||||
continue;
|
||||
strcpy(ffblk->ff_name, dirp->d_name);
|
||||
setfiletime(ffblk);
|
||||
retval = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
closedir(dp);
|
||||
return(retval);
|
||||
}
|
||||
|
||||
/****************************************************************************/
|
||||
/* */
|
||||
/* Bei xfindfirst und xfindnext Datum und Uhrzeit im Fileblock setzen */
|
||||
/* */
|
||||
/****************************************************************************/
|
||||
|
||||
void setfiletime(struct ffblk *ffblk)
|
||||
{
|
||||
struct stat filestat;
|
||||
struct tm *filetime;
|
||||
char fn[MAXPATH];
|
||||
|
||||
sprintf(fn, "%s%s", ffblk->ff_path, ffblk->ff_name);
|
||||
stat(fn, &filestat);
|
||||
filetime = gmtime(&filestat.st_mtime);
|
||||
ffblk->ff_ftime = ((filetime->tm_sec / 2) & 0x1f)
|
||||
+ ((filetime->tm_min & 0x3f) << 5)
|
||||
+ ((filetime->tm_hour & 0x1f) << 11);
|
||||
ffblk->ff_fdate = (filetime->tm_mday & 0x1f)
|
||||
+ ((filetime->tm_mon & 0x0f) << 5)
|
||||
+ (((filetime->tm_year - 80) & 0x7f) << 9);
|
||||
}
|
||||
|
||||
/* Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details */
|
||||
|
||||
char* strlwr(char *_s)
|
||||
{
|
||||
char *rv = _s;
|
||||
while (*_s)
|
||||
{
|
||||
*_s = tolower(*_s);
|
||||
_s++;
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
/*
|
||||
String in Grossbuchstaben umwandeln - aus DJGPP GNU-Paket fuer DOS
|
||||
von D.J. Delorie
|
||||
*/
|
||||
|
||||
char *strupr(char *s)
|
||||
{
|
||||
char *p = s;
|
||||
while (*s)
|
||||
{
|
||||
if ((*s >= 'a') && (*s <= 'z'))
|
||||
*s += 'A'-'a';
|
||||
s++;
|
||||
}
|
||||
return p;
|
||||
}
|
||||
|
||||
#endif /* Linux-Teil */
|
||||
|
||||
/*============================================================================
|
||||
VerMsg.c
|
||||
============================================================================*/
|
||||
#define MsgVersion "3.04"
|
||||
#define MsgDatum "14.05.1997 von DF7BZ & DG3AAH"
|
||||
#define MsgLinux "(20.06.99) nach 'C' portiert von DG8BR"
|
||||
#ifdef WIN32
|
||||
#define MsgWin32 "(17.01.04) Modifiziert fuer Win32 von DAA531 Oliver Kern."
|
||||
#endif
|
||||
|
||||
void VerMsg ( void )
|
||||
{
|
||||
#ifdef WIN32
|
||||
printf("\nMSG-Programm %s von %s \n%s\n%s\n",MsgVersion, MsgDatum,MsgLinux,MsgWin32);
|
||||
#else
|
||||
printf("\nMSG-Programm %s von %s \n%s\n",MsgVersion, MsgDatum,MsgLinux);
|
||||
#endif
|
||||
Status = TRUE;
|
||||
}
|
||||
/*============================================================================
|
||||
SendMsg.c
|
||||
============================================================================*/
|
||||
/* Parameterreihenfolge ist:
|
||||
Programmname Befehl Empfaenger (Lifetime) Nachricht Absender */
|
||||
/* 1 2 3 4 5 6
|
||||
0 1 2 3 4 5 */
|
||||
void SendMsg ( int argc, char *argv[] )
|
||||
{
|
||||
int a;
|
||||
char LT[3] = DefaultLT; /* LifeTime im Header einer MSG */
|
||||
char buffer[80]; /* Nachrichtentext */
|
||||
char dname[MAXPATH];
|
||||
char name[9]; /* Gruppen oder Empfeangername */
|
||||
FILE *fp; /* Empfaenger-Dateizeiger */
|
||||
|
||||
a = 2; /* Empfangscall */
|
||||
|
||||
sscanf (argv[a], "%s", &(*name)); /* Empfaenger feststellen */
|
||||
if ( Calltest(name) == FALSE)
|
||||
Stop("Fehler im Empfaengerrufzeichen.");
|
||||
|
||||
|
||||
a++; /* Lifetime oder Nachricht */
|
||||
|
||||
if(argv[a][0] == '#') /* Lifetime vorhanden? */
|
||||
{
|
||||
strcpy (LT,&(argv[a][1])); /* Lifetime */
|
||||
if (( atoi(LT) < 1 ) || (atoi(LT) > MaxLT))
|
||||
{
|
||||
printf("ACHTUNG ! Lifetime muss zwischen 1 und %d sein!\n\n",MaxLT);
|
||||
strcpy(LT,DefaultLT);
|
||||
}
|
||||
a++; /* Nur wenn lifetime da war */
|
||||
}
|
||||
|
||||
buffer[0] = ' '; /* Nachricht einruecken. Sieht doch besser aus */
|
||||
buffer[1] = '\0';
|
||||
|
||||
for(;a < argc-1; a++) /* die komplette Nachricht einlesen */
|
||||
{
|
||||
sprintf (buffer+(char)strlen(buffer),"%s ", argv[a]);
|
||||
}
|
||||
if(buffer[1] == '\0') /* wenn nix dann mecker */
|
||||
Stop("Nachricht fehlt !");
|
||||
|
||||
buffer[strlen(buffer)-1] = '\n'; /* return einfuegen */
|
||||
a = 0; /* wird noch benoetigt */
|
||||
/*--------------------------------------------------------------------------*/
|
||||
if ( Gruppe == TRUE ) /* wird in Calltest geprueft */
|
||||
{
|
||||
sprintf(dname,"%s%s.mbr",msgpath,name);
|
||||
/* Gruppendatei oeffnen */
|
||||
if((fp = fopen(dname,"rt")) == NULL)
|
||||
{
|
||||
sprintf(dname,"Fehler #S1 Konnte die Datei %s nicht oeffnen.",name);
|
||||
Stop(dname);
|
||||
}
|
||||
while(!feof(fp))
|
||||
{
|
||||
*name = '\0';
|
||||
fscanf(fp,"%s",&(*name));
|
||||
if(name[0] != '\0') /* fscanf findet trotz feof was */
|
||||
{
|
||||
strlwr(name);
|
||||
speichern(LT,name,buffer);
|
||||
a = TRUE;
|
||||
}
|
||||
}
|
||||
fclose(fp);
|
||||
}
|
||||
else
|
||||
a = speichern(LT,name,buffer); /* Speichern ohne Gruppe */
|
||||
|
||||
if (a == TRUE)
|
||||
{
|
||||
printf("\nInhalt der Nachricht :\n"); /* das bekommen alle */
|
||||
printf("----------------------\n");
|
||||
printf("%s",buffer);
|
||||
}
|
||||
|
||||
Status = TRUE;
|
||||
}
|
||||
/*--------------------------------------------------------------------------*/
|
||||
int speichern (char *LT,char *name,char *buffer)
|
||||
{
|
||||
int a = 0; /* Nachrichtenzaehler */
|
||||
int b = 0; /* Umspeicherzaehler */
|
||||
int ist = 0; /* Flag fuer eingefuegte Nachricht. */
|
||||
char dname[MAXPATH];
|
||||
char MsgZeit[40];
|
||||
char Nachricht[MaxZeilen][80];
|
||||
char Zbuffer[80]; /* Zwischenbuffer beim umspeichern */
|
||||
char Datum[9];
|
||||
FILE *fp;
|
||||
time_t t;
|
||||
struct tm *ts;
|
||||
char *Tage[] = { "Sun", "Mon", "Thu", "Wed", "Thu", "Fri", "Sat" };
|
||||
|
||||
time(&t);
|
||||
ts = localtime(&t);
|
||||
sprintf(Datum,"%02d.%02d.%02d",ts->tm_mday,ts->tm_mon +1,ts->tm_year%100);
|
||||
sprintf(MsgZeit,"Time: %s, %s / %02d:%02dZ",Tage[ts->tm_wday],
|
||||
Datum,
|
||||
ts->tm_hour,
|
||||
ts->tm_min);
|
||||
|
||||
sprintf(dname,"%s%s.msg",msgpath,name);
|
||||
strupr(name); /* nun wird name nur noch GROSS gebraucht */
|
||||
|
||||
if ((fp = fopen(dname,"rt")) == NULL) /* Datei vorhanden? */
|
||||
{
|
||||
if((fp = fopen(dname,"wt")) == NULL) /* Nein, schreibend oeffnen */
|
||||
{
|
||||
printf("Fehler beim Oeffnen von %s !\n",dname);
|
||||
return(FALSE);
|
||||
}
|
||||
fprintf(fp,"\nMessage from %-6s - %s Lifetime %2s\n%s",
|
||||
Usercall,MsgZeit,LT,buffer);
|
||||
|
||||
fclose(fp);
|
||||
}
|
||||
else /* Datei ist da. Alles einlesen und aktuelle Nachricht einschieben */
|
||||
{
|
||||
fgets(Nachricht[a], 79,fp);
|
||||
while(!feof(fp))
|
||||
{
|
||||
if(strstr(Nachricht[a],"Message from ")) /* Kopfzeile von MSG */
|
||||
{
|
||||
if( strstr(Nachricht[a],Usercall)) /* hat er schon eine von call? */
|
||||
{ /* und auch von heute ? */
|
||||
if(strstr(Nachricht[a],Datum) && !strstr(Nachricht[a],"RETURN"))
|
||||
{ /* LT aus Datei nehmen */
|
||||
if(Gruppe == FALSE) /* Bei Gruppe die LT ueberschreiben */
|
||||
strncpy(LT,strstr(Nachricht[a],"Lifetime ")+9,2);
|
||||
else /* sonst LT uebernehmen */
|
||||
{
|
||||
strncpy (strstr(Nachricht[a],"Lifetime ")+9,LT,2);
|
||||
}
|
||||
fgets(Nachricht[++a],79,fp); /* 1 String kommt auf jeden Fall */
|
||||
do
|
||||
{
|
||||
if(fgets(Zbuffer,79,fp)) /* kommt noch mehr */
|
||||
{
|
||||
if(strstr(Zbuffer,"Message from "))
|
||||
break; /* Nee. War nur eine Zeile */
|
||||
strcpy(Nachricht[++a],Zbuffer); /* sonst kopieren */
|
||||
}
|
||||
else /* sicherheitshalber leer machen */
|
||||
*Zbuffer = '\0';
|
||||
}
|
||||
while(!feof(fp));
|
||||
|
||||
strcpy(Nachricht[++a],buffer); /* aktuelle Nachricht einfuegen */
|
||||
if(Zbuffer[0] != '\x0') /* die geholte Zeile auch einfuegen */
|
||||
strcpy(Nachricht[++a],Zbuffer);
|
||||
ist = TRUE; /* habe eingefuegt */
|
||||
}
|
||||
}
|
||||
}
|
||||
a++;
|
||||
fgets(Nachricht[a], 79,fp);
|
||||
}
|
||||
fclose(fp);
|
||||
|
||||
if ( a >= MaxZeilen )
|
||||
{
|
||||
printf("%s hat zuviele Nachrichten ! Nichts gespeichert!\n",name);
|
||||
return(FALSE); /* Speichertext wird nicht ausgegeben */
|
||||
}
|
||||
|
||||
unlink(dname);
|
||||
|
||||
if ((fp = fopen(dname,"wt")) == NULL)
|
||||
Stop("Fehler #S2 Problem beim Zurueckschreiben der Datei!");
|
||||
while (b < a)
|
||||
{
|
||||
fprintf(fp,"%s",Nachricht[b++]);
|
||||
}
|
||||
if(ist == FALSE) /* habe nicht eingefuegt, also anhaengen */
|
||||
fprintf(fp,"Message from %-6s - %s Lifetime %2s\n%s",
|
||||
Usercall,MsgZeit,LT,buffer);
|
||||
|
||||
fclose(fp);
|
||||
}
|
||||
|
||||
printf("MSG wurde fuer %-6s mit einer Lifetime von %s Tag(en)"
|
||||
" gespeichert.\n",name,LT);
|
||||
return(TRUE); /* war alles richtig */
|
||||
}
|
||||
|
||||
/*============================================================================
|
||||
ListMsg.c
|
||||
============================================================================*/
|
||||
/* Parameterreihenfolge ist: Programmname Befehl von-bis Rufzeichen Usercall
|
||||
Argument(argv) 0 1 2 3 4
|
||||
Argument(argc) 1 2 3 4 5
|
||||
|
||||
Argument 2 (von-bis) und 3 (Rufzeichen) sind optional.
|
||||
Wenn 2 nicht angegeben, dann alles ausgeben.
|
||||
Wenn 3 angegeben, beim Loeschen pruefen ob Usercall der Absender war ?
|
||||
Ansonsten ist es egal was fuer ein Call angegeben wurde!
|
||||
*/
|
||||
|
||||
void ListMsg (int Befehl,int argc,char *argv[])
|
||||
{
|
||||
int von = 1; /* Nur Nachricht von * ausgeben. 1 = default */
|
||||
int bis = 99; /* Nur Nachricht bis * ausgeben. 99 = default */
|
||||
int Nr = 0; /* Nummer der Nachricht. Von 1 bis MaxZeilen */
|
||||
int a;
|
||||
int aus; /* es wurde was ausgegeben, also nicht speichern */
|
||||
int seine = 0; /* user's eigene MSG */
|
||||
int Ruecknr; /* wieviel Zeilen noch zurueckgeschreiben */
|
||||
char trenner = '\0'; /* wird nur fuer sscanf benoetigt */
|
||||
char AnzNr[3] = "00"; /* Das wird ausgegeben. */
|
||||
char dname[MAXPATH]; /* Pfad und Dateiname */
|
||||
char name[7]; /* Dateiname */
|
||||
char Nachricht[MaxZeilen][80];
|
||||
FILE *fp;
|
||||
|
||||
*name = '\0'; /* erstmal den Namen weg */
|
||||
/*----------------------------------------------------------------------------
|
||||
von-bis und eventuell das call pruefen.
|
||||
----------------------------------------------------------------------------*/
|
||||
if (argc == 4 || argc == 5) /* Nummer und/oder Call */
|
||||
{
|
||||
for ( a = 2; a < argc-1; a++)
|
||||
{
|
||||
if((isdigit(argv[a][0])) != FALSE)
|
||||
Nr = sscanf(argv[a],"%02d%c%02d",&von, &trenner, &bis);
|
||||
if (Nr == 1) /* wenn nur eine Zahl eingegeben wurde. */
|
||||
bis = von;
|
||||
if((argv[a][0] == '-') == TRUE)
|
||||
Nr = sscanf (argv[a],"%c%02d",&trenner, &bis);
|
||||
if (Nr == 0) /* Argument ein Call */
|
||||
sscanf(argv[a],"%s",&(*name));
|
||||
Nr = 0; /* name nach von-bis wird nicht gefunden, wenn Nr gesetzt */
|
||||
}
|
||||
if( von > bis ) /* Ev. sollte man das einfach verbessern */
|
||||
Stop("Ende liegt vor Anfang!");
|
||||
}
|
||||
if(*name == FALSE) /* wenn kein Call angegeben wurde */
|
||||
{
|
||||
strcpy(name,Usercall); /* Sind seine MSG's */
|
||||
}
|
||||
else
|
||||
{
|
||||
if (Calltest(name) == FALSE) /* Gucken ob der User richtig schreiben */
|
||||
Stop("Das angegebene Rufzeichen ist ungueltig !"); /* Sonst Mecker */
|
||||
}
|
||||
/*--------------------------------------------------------------------------*/
|
||||
strlwr(name);
|
||||
sprintf(dname,"%s%s.msg",msgpath,name);
|
||||
strupr(name);
|
||||
Nr = 0;
|
||||
|
||||
if ((fp = fopen(dname,"rt")) == NULL)
|
||||
{
|
||||
printf("Keine MSG fuer %s gefunden.\n",name);
|
||||
exit(0);
|
||||
}
|
||||
|
||||
printf("\n%s :\n",name); /* Empfaenger der Nachricht ausgeben */
|
||||
|
||||
while(!feof(fp)) /* erstmal alles lesen */
|
||||
{
|
||||
if((fgets(Nachricht[Nr],79,fp)) != NULL)
|
||||
{
|
||||
if (Nachricht[Nr][0] == 0x0A) /* LF-Return, */
|
||||
continue; /* naechste Zeile einlesen. */
|
||||
|
||||
Nr++;
|
||||
}
|
||||
|
||||
if ( Nr > MaxZeilen ) /* Sollte nie vorkommen !! */
|
||||
{
|
||||
fclose(fp);
|
||||
sprintf(dname,"Fehler #L1 %s ist zu gross! ",ffblk.ff_name);
|
||||
Stop(dname);
|
||||
}
|
||||
}
|
||||
fclose(fp);
|
||||
|
||||
/*----------------------------------------------------------------------------
|
||||
Die gewuenschten Nachrichten ausgeben und wenn geloescht werden soll, die
|
||||
entsprechenden Zeilen markieren.
|
||||
----------------------------------------------------------------------------*/
|
||||
aus = 0;
|
||||
Ruecknr = Nr;
|
||||
|
||||
for (a = 0; a < Nr; a++)
|
||||
{
|
||||
if(strstr(Nachricht[a],"Message from ")) /* Kopfzeile von MSG */
|
||||
{
|
||||
if ( AnzNr[1] == '9' ) /* wenn 9 dann auf 0 setzen und das */
|
||||
{ /* vorherige Byte auf 1 */
|
||||
AnzNr[0]++;
|
||||
AnzNr[1] = '0';
|
||||
}
|
||||
else
|
||||
AnzNr[1]++; /* wenn nicht, dann nur erhoehen */
|
||||
|
||||
aus++; /* zaehlt die nachrichtennummern */
|
||||
|
||||
if(( aus >= von) && ( aus <= bis) == TRUE)
|
||||
{
|
||||
if (Befehl == 'e') /* feststellen ob es seine oder ob von ihm */
|
||||
{
|
||||
if(!stricmp(name,Usercall) || strstr(Nachricht[a],Usercall))
|
||||
{
|
||||
printf("MSG %s: %s",AnzNr,Nachricht[a]);
|
||||
*Nachricht[a] = '\0'; /* Loeschen markieren */
|
||||
Ruecknr--;
|
||||
seine = TRUE; /* fuer den Nachrichteninhalt */
|
||||
}
|
||||
else
|
||||
seine = FALSE;
|
||||
}
|
||||
if(Befehl == 'r' || Befehl == 'l')
|
||||
printf("MSG %s: %s",AnzNr,Nachricht[a]);
|
||||
}
|
||||
}
|
||||
else /* ist kein Nachrichtenkopf */
|
||||
{
|
||||
if(( aus >= von) && ( aus <= bis) == TRUE) /* aber gueltige Nummer */
|
||||
{
|
||||
if( Befehl == 'e' && seine == TRUE)
|
||||
{
|
||||
printf("%s",Nachricht[a]);
|
||||
*Nachricht[a] = '\0';
|
||||
Ruecknr--;
|
||||
}
|
||||
if(Befehl == 'r')
|
||||
printf("%s",Nachricht[a]);
|
||||
}
|
||||
}
|
||||
}
|
||||
/*----------------------------------------------------------------------------
|
||||
Und nun wird geloescht.
|
||||
----------------------------------------------------------------------------*/
|
||||
|
||||
if(Befehl == 'e')
|
||||
{
|
||||
if(Ruecknr == 0) /* ist nix mehr zum zurueckschreiben */
|
||||
unlink(dname);
|
||||
else
|
||||
{
|
||||
unlink(dname);
|
||||
if ((fp = fopen(dname,"wt")) == NULL)
|
||||
{
|
||||
Stop("Fehler #L2 Fehler beim Zurueckschreiben der Datei!");
|
||||
}
|
||||
for (a = 0; a < Nr; a++)
|
||||
{
|
||||
if(*Nachricht[a] != '\0')
|
||||
fprintf(fp,"%s",Nachricht[a]);
|
||||
}
|
||||
fclose(fp);
|
||||
}
|
||||
if(Ruecknr < Nr) /* wenn ja, dann wurde was geloescht. */
|
||||
printf("\nDiese MSG('s) wurde(n) soeben geloescht!\n");
|
||||
else
|
||||
printf("\nEs wurde nichts geloescht!\n");
|
||||
}
|
||||
Status = TRUE;
|
||||
}
|
||||
/*============================================================================
|
||||
HelpMsg.c
|
||||
============================================================================*/
|
||||
void HelpMsg ( void )
|
||||
{
|
||||
char filename[MAXPATH];
|
||||
FILE *fp;
|
||||
|
||||
sprintf(filename,"%smsg.usr",msgpath);
|
||||
if (( fp = fopen(filename,"rt")) == NULL)
|
||||
{
|
||||
Stop("Fehler #H1 Konnte Hilfedatei nicht oeffnen.");
|
||||
}
|
||||
while (!feof(fp))
|
||||
{
|
||||
if((fgets(filename,79,fp)) != NULL)
|
||||
printf("%s",filename);
|
||||
}
|
||||
fclose (fp);
|
||||
Status = TRUE;
|
||||
}
|
||||
/*============================================================================
|
||||
GroupMsg.c
|
||||
============================================================================*/
|
||||
/* Parameterreihenfolge ist: Programmname Befehl Gruppe Usercall
|
||||
Argument(argv) 0 1 2 3
|
||||
Argument(argc) 1 2 3 4
|
||||
Wobei Gruppe optional ist. Wenn keine Gruppe angegeben wurde, dann alle
|
||||
Gruppen auflisten.
|
||||
*/
|
||||
|
||||
void GroupMsg ( int argc, char *argv[] )
|
||||
{
|
||||
int a;
|
||||
int gefunden;
|
||||
char dname[MAXPATH];
|
||||
FILE *fp;
|
||||
|
||||
if(argc == 3)
|
||||
sprintf(dname,"%s*.mbr",msgpath);
|
||||
if(argc == 4)
|
||||
sprintf(dname,"%s%s.mbr",msgpath,strlwr(argv[2]));
|
||||
if(argc > 4)
|
||||
Stop("Zuviele Parameter !");
|
||||
|
||||
gefunden = xfindfirst( dname, &ffblk, 0);
|
||||
if (gefunden != FALSE) /* wenn nicht gefunden, dann meckern */
|
||||
Stop("Gruppe nicht gefunden...");
|
||||
|
||||
printf("\n");
|
||||
|
||||
while (!gefunden)
|
||||
{
|
||||
sprintf(dname,"%s%s",msgpath,ffblk.ff_name);
|
||||
|
||||
if (( fp = fopen(dname,"rt")) == NULL)
|
||||
Stop("Fehler #G1 Konnte Datei nicht oeffnen.");
|
||||
|
||||
strcpy(dname,ffblk.ff_name);
|
||||
dname[strlen(dname)-4] = '\0'; /* Standard IMMER .EXT */
|
||||
printf("%s :\n",strupr(dname));
|
||||
|
||||
for(a = strlen(dname)+2;a > 0;a--) /* Laenge des Gruppennamens */
|
||||
{
|
||||
printf("-"); /* unterstreichen */
|
||||
}
|
||||
printf("\n"); /* und dann ..... return !!! */
|
||||
|
||||
do /* Datei ausgeben */
|
||||
{
|
||||
fgets(dname,79,fp);
|
||||
printf("%s",dname);
|
||||
*dname = '\0';
|
||||
}
|
||||
while (!feof(fp));
|
||||
|
||||
printf("\n");
|
||||
|
||||
fclose (fp);
|
||||
gefunden = xfindnext(&ffblk);
|
||||