;	Zerberus-Server
;
;	Scriptfile zum Austausch neuer Nachrichten im Z-Netz-Format
;	$VER: 3.03 / 19.04.1994
;
;       Beschreibung :
;	Server-Datei fuer das Zerberus-Protokoll. Die gesendeten und
;	empfangenen Daten werden im Directory MBMSG:POINT/<Portname>/
;	temporaer gespeichert.
;	Stehen im Directory MBMSG:POINT/NETCALL/ die Dateien <USERNAME>.LHA
;	und <USERNAME>.MSGNR, so werden nicht die neusten Nachrichten und
;	Files aktuell exportiert und gepackt, sondern diese vorgepackten
;	Daten benutzt.
;
;	Das Script sollte so eingebunden werden, dass es ueber Flags
;	auf die folgende Befehle zugreifen kann !
;
;	CHECK FILE
;	CONVERT FASTTOZER
;	DISK DOWNLOAD
;	DISK UPLOAD
;	ECHO
;	EXTERN
;	FASTNET GETFILE
;	GOTO
;	IF
;	LOGOUT		<-- Option /FAST muss unterstuetzt werden !
;	ON ERROR
;	ON HANGUP
;	POINT GETFILE
;	POINT MAKEFILE
;	WAIT
;
;	Folgende Amiga-Dos-Befehle werden benutzt :
;
;	COPY
;	DELETE
;
;	Einrichtung eines Netcalls fuer eine Netzbox (Node) :
;	USERNAME : Name der anrufenden Node
;	STRASSE  : @NETCALL
;
;	Einrichtung eines LocalGates fuer die Einbindung eines anderen
;	lokalen Netzwerks :
;	USERNAME : Name der anrufenden Node
;	VORNAME  : Gatename im Fastnet
;	STRASSE  : @LOCALGATE
;
;	Einrichtung eines Gates fuer die Einbindung eines anderen
;	globalen Netzwerks :
;	USERNAME : Name der anrufenden Node
;	VORNAME  : Gatename im Fastnet
;	NACHNAME : Gatename im Zerberus-Netz
;	STRASSE  : @GATE
;
;	Beim Netcall (@NETCALL) muss die Datei MBDAT:USERNAME.NODES
;	existieren (USERNAME = Name der anrufenden Node).
;	In dieser Datei muss die anrufende Node und die Nodes stehen,
;	die ueber sie zu erreichen sind.
;	Datei fuer eine Node:
;	0
;	S
;	0
;	NAME DER ANRUFENDEN NODE
;	0		<- Hier auch ein LF setzen
;
;	Wenn mehrere Nodes ueber den Netcall mit dem Fastnet versorgt werden,
;	bitte den Aufbau der Datei in der Dokumentation FASTNET.DOK unter
;	dem Stichwort Systemnachricht der Kategorie 0 nachlesen.
;
;	Konstanten :
;
TMPDIR  = "mbmsg:point/'{port}'/"		; Dir fuer Tmp-Files
NETDIR  = "mbmsg:point/netcall/"		; NET-Directory
MAXKBYT = 2000					; Max. Filelaenge in KByte
MSGFILE = "PUFFER"				; Name des Msg-Files
NRFILE  = "msgnr"				; File fuer Msg-Nummern
COPYFILE= "'{NAME}'.lha"			; Vorgabefile (Pack-Event)
COPYNR  = "'{NAME}'.msgnr"			; File fuer Msg-Nummern
PCKFILE = "called.lzh"				; Name des gepackten Files
RECFILE = "caller.lha"				; Name des empfangenen Files
TBOXDIR = "mbdat:"				; Dir fuer Fastnet-Nodefile
PACKER  = "lha -P-1 m ""'TMPDIR''PCKFILE'"" ""'TMPDIR''MSGFILE'"""
						; Packen
UPACKER = "lha -P-1 x ""'TMPDIR''RECFILE'"" ""'TMPDIR'"" ""'MSGFILE'"""
						; Entpacken
;
_on error POINT_ERROR				; Im Fehlerfall ...

;
;	Pruefe auf normalen Netcall
;

_if {STREET} != "@NETCALL" then _goto LOCALGATE
OP_GET="/NETCALL"				; Setze Optionen
OP_MAKE="/NETCALL"
OP_CVT=""
_goto START

;
;	Pruefe auf LocalGate
;
LOCALGATE:
_if {STREET} != "@LOCALGATE" then _goto GATE
OP_GET="/NETCALL/LOCALGATE"			; Setze Optionen
OP_MAKE="/NETCALL"
OP_CVT="/LOCALGATE"
_goto START

;
;	Pruefe auf Gate
;
GATE:
_if {STREET} != "@GATE" then _goto USERPOINT
OP_GET="/NETCALL/GATE"				; Setze Optionen
OP_MAKE="/NETCALL/GATE"
OP_CVT="/GATE"
_goto START

;
;	User-Point
;
USERPOINT:
OP_GET=""					; Loesche Optionen
OP_MAKE=""
OP_CVT=""

;
;	Aktiviere Handshaking
;
START:
_echo "#home##cls#POINT LOGIN OK ...^J"
_echo "running ARC^Jrunning ARC^Jrunning ARC^Jrunning ARC^Jrunning ARC"

;
;	Loesche alte Files / Rename, wenn File immer noch geoeffnet
;

_if TMPDIR != "" then _extern/q delete "'TMPDIR'#?"
_extern/q rename "'TMPDIR''PCKFILE'" "'TMPDIR''PCKFILE''{CALLNR}'"
_extern/q rename "'TMPDIR''RECFILE'" "'TMPDIR''RECFILE''{CALLNR}'"

;
;	Neue Nachrichten fuer andere Box sammeln & packen
;

_check file "'NETDIR''COPYFILE'" EXPORT		; Existiert Sendefile ?
_extern/q copy "'NETDIR''COPYFILE'" "'TMPDIR''PCKFILE'"	; Ja, vorgepackte
_extern/q copy "'NETDIR''COPYNR'" "'TMPDIR''NRFILE'"	; Files benutzen
_goto HANDSHAKE					; -> Warten auf Handshake

;	Wenn Netcall, dann PMs exportieren.

EXPORT:
_if OP_GET == "" then _goto POINT_MAKE		; Netcall ? Nein -> Msgs sam.
_convert FastToZer'OP_CVT' "'TMPDIR''MSGFILE'"	; PM-File erstellen

;	Messages exportieren (PMs bei Usercall auch)

POINT_MAKE:
_on error/ignore
_point makefile'OP_MAKE' "'TMPDIR''MSGFILE'" 'MAXKBYT' "'TMPDIR''NRFILE'"
_on error POINT_ERROR

;	Messages packen

_extern/q 'PACKER'

;
;	Handshaking senden
;
HANDSHAKE:
_echo/nolf "^U"					; NAK fuer Fertig senden
_wait 2						; Sernr. ignorieren
_echo/nolf "^F"					; Bei uns ist es immer OK !

;
;	Messages uploaden und downloaden
;

_on hangup/ignore				; Auch weiter, wenn aufgelegt

_disk upload "'TMPDIR''RECFILE'"		; File vom Point empfangen
_disk download "'TMPDIR''PCKFILE'"		; File an Point schicken

;
;	Geschickte Messages und PMs als gelesen markieren
;

_on error/ignore				; Alle Fehler ignorieren
_point makefile/setnr "'TMPDIR''NRFILE'"	; Gezogene Msgs = alte Msgs

;
; Nicht mehr benoetigte Files loeschen, empfangene Messages entpacken.
;

_extern/q delete "'TMPDIR''PCKFILE'" "'TMPDIR''NRFILE'" "'TMPDIR''MSGFILE'" "'NETDIR''COPYFILE'" "'NETDIR''COPYNR'"
_extern/q 'UPACKER'

;
; Bei Netcall PM-Netfile loeschen und Nodes in Liste aufnehmen
;

_if OP_GET == "" then _goto POINT_GET		; Netcall ? Nein, verzw.
_convert FastToZer'OP_CVT'/Del			; mbnet:-File loeschen
_if {STREET} != "@NETCALL" then _goto POINT_GET	; @Netcall ? Nein, verzw.
_fastnet getfile "'TBOXDIR''{NAME}'.NODES"	; Nodes in Nodeliste aufnehmen

;
; Alle Messages und PMs importieren
;
POINT_GET:
_point getfile'OP_GET' "'TMPDIR''MSGFILE'"	; Nachrichten einsortieren

; Alle Files loeschen

POINT_ERROR:					; Fehler / Ende
POINT_END:
_if TMPDIR != "" then _extern/q delete "'TMPDIR'#?" ; Disk aufraeumen
_logout/f					; Logout
