/*
 *
 *
 *	Make4D.rexx
 *      ŻŻŻŻŻŻŻŻŻŻŻ
 *
 *	Creates a four dimensional traplist.library compatible
 *	nodelist from the two dimensional german pointlist POINTS24.
 *
 *	Written 29-Dec-1990 by Peer Hasselmeyer (2:247/4 @ FidoNet)
 *	Date of this version: 18-Nov-1991, 23:35:05
 *
 *
 *
 *	The incoming POINTS24.### file consists of entries for each
 *	boss node like:
 *	   Host,<fakenet>,<boss net/node>,<place>,<sysop>,<tel>,<baud>,<flags>
 *
 *	Each point occupies one line that looks like:
 *	   ,<point-#>,<net/node.point>,<place>,<sysop>,<tel>,<baud>,<flags>
 *
 *
 *	The resulting PointList.### looks like:
 *	   Host,<net>,->
 *	   ,<node>,->
 *
 *	and many point entries:
 *	   Point,<point-#>,<net/node.point>,<place>,<sysop>,<tel>,<baud>,<flags>
 *
 *
 */

/*-----------------------------------------------------------------------*/

nldir	= "dh1:Nodelist/"	/* Nodelist-Directory, must end with "/" or ":" */
name2d	= "POINTS24."		/* name of 2d list */
name4d	= "PointList."		/* name of 4d list */

/*-----------------------------------------------------------------------*/

if ~show(l, "rexxsupport.library") then
    if ~addlib("rexxsupport.library", 0, -30, 0) then do
	say "Couldn't open rexxsupport.library !"	/* open support.lib */
	exit 20
	end

dfiles = showdir(nldir, f)

if dfiles = "" then do
    say "No" name2d || "* file found !"		/* no files in NL-Dir */
    exit
    end

ext = ""
do until dfiles = ""
    parse var dfiles cfile dfiles
    if upper(left(cfile, length(name2d))) = upper(name2d) then do
	ext = right(cfile, 3)
	dfiles = ""
	end
    end

if ext = "" then do
    say "No" name2d || "* file found !"		/* no 2d-file found */
    exit
    end

if ~open(infile, nldir || name2d || ext, r) then do
    say 'Couldn''t open 2d-list "' || name2d || ext || '" !'
    exit 20
    end

if ~open(outfile, nldir || name4d || ext, w) then do
    say 'Couldn''t open 4d-list "' || name4d || ext || '" !'
    exit 20
    end

say 'Creating 4d-list "' || name4d || ext || '" from "' || name2d || ext || '" ...'

net = 0
node = 0

call writeln outfile, readln(infile)		/* copy first line */

do while ~eof(infile)
    inline = readln(infile)
    if length(inline) < 3 then iterate
    if left(inline,1) = ";" then iterate	/* ignore comments */
    parse var inline keyword "," rest
    upper keyword
    select
	when keyword = "HOST" then do
	    parse var rest nnet "," rest
	    if nnet = 24000 then iterate	/* ignore host24000 */
	    parse var rest nnet "/" node "," .
	    if index(nnet,":") > 0 then parse var nnet . ":" nnet
	    if nnet ~= net then do
		net = nnet
		call writeln outfile, "Host," || net || ",->" || "0d"x
		end
	    call writeln outfile, "," || node || ",->" || "0d"x
	    iterate
	    end
	when keyword = "HUB" then do
	    parse var rest . "," nnet "/" node "," .
	    if nnet ~= net then do
		net = nnet
		call writeln outfile, "Host," || net || ",->" || "0d"x
		end
	    call writeln outfile, "," || node || ",->" || "0d"x
	    node = nnode
	    end
	when keyword = "ZONE" then do
	    parse var rest zone "," .
	    call writeln outfile, "Zone," || zone || ",->" || "0d"x
	    iterate
	    end
	when keyword = "REGION" then do
	    parse var rest zone "," .
	    call writeln outfile, "Region," || zone || ",->" || "0d"x
	    iterate
	    end
	otherwise nop
	end
    call writeln outfile, "Point," || rest
    end

call close outfile
call close infile
say "All right !"

