:top
	ansi on
	cls
	on error goto errtrap
	open 1 phone.dat i
	on error goto
	open 1 phone.dat r 20
	if "$1" != "" goto scan
	goto main

:init
	print "^[[12;25H";
	print "^[[7;5m";
	print "Creating phone.dat -- Hold on";
	print "^[[0m";
	open 1 phone.dat r 20
	put 1 2 "Lattice BBS         " 	
	put 1 3 "1 (312) 858-8087    "
	put 1 4 "........            "
	put 1 5 "1200,N,8,1          "
	put 1 1 "80                  "
	let r = 6
:initl
	put 1 %r "...................."
	let r = %r+1
	print "^[[13;38H";
	print "%r"
	if "%r" != "322" goto initl

	print "^[[0m";
	close 1 | page | return	

:--------------------------------------------------
:main
	let p = 0
	gosub action
	if "$a" == "1" gosub getent | goto dialent
	if "$a" == "2" gosub getent | goto addent
	if "$a" == "3" gosub getent | goto main
	if "$a" == "4" gosub getent | goto delent
	if "$a" == "5" gosub listall | goto main
	if "$a" == "6" goto byebye
	goto byebye

:action
	window 2 set2a "Dial an entry" "Add/Edit an entry" "List an entry" "DELETE an entry" "List ALL entries" "Exit"
	set a "7"
	print "^[[24;10H";
	print "Use Up and Down arrows to select or <Esc> to exit call";
	popup 2
	return
:---------------------------------------------------
:getent
	if %p < 0 let p = 0
	if %p > 79  let p = 0
	set a "11"
	let r = %p*4+2
	get 1 %r l
	let p = %p+1
:next1
	let r = %p*4+2
	get 1 %r m
	let p = %p+1
:next2
	let r = %p*4+2
	get 1 %r n
	let p = %p+1
:next3
	let r = %p*4+2
	get 1 %r o
	let p = %p+1
:next4
	let r = %p*4+2
	get 1 %r p
	let p = %p+1
:next5
	let r = %p*4+2
	get 1 %r q
	let p = %p+1
:next6
	let r = %p*4+2
	get 1 %r r
	let p = %p+1
:next7
	let r = %p*4+2
	get 1 %r s
	let p = %p+1
:next8
	set a "11"
	window 2 set2a "--Previous page--"  "$l" "$m" "$n" "$o" "$p" "$q" "$r" "$s" "--Next page--"
	popup 2
	if "$a" == "1" let p = %p-16 | goto getent
	if "$a" == "2" let p = %p-8 | goto printent
	if "$a" == "3" let p = %p-7 | goto printent 
	if "$a" == "4" let p = %p-6 | goto printent
	if "$a" == "5" let p = %p-5 | goto printent
	if "$a" == "6" let p = %p-4 | goto printent
	if "$a" == "7" let p = %p-3 | goto printent
	if "$a" == "8" let p = %p-2 | goto printent
	if "$a" == "9" let p = %p-1 | goto printent
	if "$a" == ":" goto getent
	if "$a" == "11" goto byebye

:printent
	let r = %p*4+2
	get 1 %r n
	let r = %r+1
	get 1 %r o
	let r = %r+1
	get 1 %r p
	let r = %r+1
	get 1 %r q
	cls
	print "^[[1m";
	left r "$p" 8
	left s "$q" 15
	print "^[[1;1H";
	print " Name                 Number               Login    Mode"
	print "^[[0m";
	print "ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»"
	print "º$nº$oº$rº$sº"
	print "ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ¼"
	return
:--------------------------------------------------
:dialent
	on error goto
	if "$o" == "...................." goto main
	print "^[[24;8H";
	print "                                                                ";
	strip o "$o"
	print "^[[11;31H";
	print "$n"
	print "^[[12;31H";
	print "Setup..."
	left a "$mode" 5
	mode $a$s
	on error goto dialerr
	print "^[[12;31H";
	print "Dialing...           "
:redial
	dial $o
	on error goto
	cls | ansi off
	left z "$r" 1
	if "$z" == "." page | end
	strip r "$r"
	print "Executing $r       "
	$r
	page
	end

:dialerr
	print "^[[12;31H";
	if %err == 31 print "No Dial Tone......"|wait 10|hangup|resume dial2
	if %err == 32 print "Busy, Redialing..."|wait 50|resume redial
	if %err == 9  print "Aborting Call....."|mprint|wait 10|hangup|resume dial2
	if %err == 30 print "Remote Not Responding..."|wait 10|hangup|resume dial2
	if %err == 33 print "Voice Detected...."|wait 10|hangup|resume dial2
	if %err == 34 print "Modem ERROR......."|wait 10|hangup|resume dial2
	on error goto
	cls
	end
:dial2
	cls | goto main
:-------------------------------------------------
:addent
	set w "" | set x "" | set y "" | set z ""
	set q "                    "
	print "^[[5;1H";
	print "Enter new name or <Return> to keep the current one."
	print "^[[3;2H";
:	set a "$n"
	ask a "" l:20
	if "$a" == "" set w "$n" | goto ent1
	len f "$a"
	if %f < 20 let b = 20-%f|left b "$q" %b|set w "$a$b"
	if %f == 20 set w "$a"
:ent1
	print "^[[5;1H";
	print "Enter new number or <Return> to keep the current one."
	print "^[[3;23H";
	set a "$o"
	ask a "" l:20
	if "$a" == "" set x "$o" | goto ent2
	len a "$a"
	if %a < 20 let b = 20-%a|left b "$q" %b|set x "$a$b"
	if %a == 20 set x "$a"
:ent2
	print "^[[5;1H"; 
	print "Enter new login file name (.SCL is assumed) or <Return> to keep the current one."
	print "^[[3;44H";
	set a "$r"
	ask a "" l:8
	if "$a" == "" set a "$r"
	len a "$a"
	if %a < 20 let b = 20-%a|left b "$q" %b|set y "$a$b"

	window 2 set2a "300" "1200" "2400" "4800" "9600"
	print "^[[24;8H";
	print "                                                                ";
	print "^[[24;10H";
	print "Select the baud rate to use or <Esc> to keep current values.";
:retry2
	set a "6"
	popup 2
	if "$a" == "6" set z "$s" | goto add2
	if "$a" == "1" set z "$z300" | goto add1
	if "$a" == "2" set z "$z1200" | goto add1
	if "$a" == "3" set z "$z2400" | goto add1
	if "$a" == "4" set z "$z4800" | goto add1
	if "$a" == "5" set z "$z9600"
:add1
	window 2 set2a "None" "Even" "Odd"
	print "^[[24;8H";
	print "                                                                ";
	print "^[[24;27H";
	print "Select the parity to use.   ";
:retry3
	set a "4"
	popup 2
	if "$a" == "4" goto retry3
	if "$a" == "1" set z "$z,N"
	if "$a" == "2" set z "$z,E"
	if "$a" == "3" set z "$z,O"
	window 2 set2a "8 data bits, 1 stop bit" "7 data bits, 1 stop bit" "8 data bits, 2 stop bits" "7 data bits, 2 stop bits"
	print "^[[24;8H";
	print "                                                                ";
	print "^[[24;18H";
	print "Select the word length/stop bit combination.";
:retry4
	set a "5"
	popup 2
	if "$a" == "1" set z "$z,8,1" | goto add2
	if "$a" == "2" set z "$z,7,1" | goto add2
	if "$a" == "3" set z "$z,8,2" | goto add2
	if "$a" == "4" set z "$z,7,2"
:add2
	len a "$z"
	if %a < 20 let b = 20-%a|left b "$q" %b|set z "$z$b"
	left r "$y" 8
	left s "$z" 15
	cls
	print "^[[1;1H";
	print " Name                 Number               Login    Mode"
	print "ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»"
	print "º$wº$xº$rº$sº"
	print "ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ¼"
	print "^[[12;28H"; 	
	print "Save this entry (Y/N):";
	ask a "" i
	case a l
	if "$a" == "n" goto endadd
	let r = %p*4+2
	put 1 %r "$w"
	let r = %r+1
	put 1 %r "$x"
	let r = %r+1
	put 1 %r "$y"
	let r = %r+1
	put 1 %r "$z"
:endadd
	cls | goto main

:-----------------------------------------
:delent
	set z "...................."
	print "^[[7m";
	print "^[[12;29H";
	ask a "Are you sure? (Y/N):" i
	print "^[[0m";
	case a l
	if "$a" == "n" cls | goto main
	let r = %p*4+2
	put 1 %r "$z"
	let r = %r+1
	put 1 %r "$z"
	let r = %r+1
	put 1 %r "$z"
	let r = %r+1
	put 1 %r "$z"
	cls | goto main

:-----------------------------------------
:listall
	cls | more on
	print "^[[1;1H";
	print " Name                 Number               Login    Mode"
	print "ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»"
	let r = 2
:list1
	get 1 %r w
	left t "$w" 1
	if "$t" == "." let n = 1
	let r = %r+1
	get 1 %r x
	let r = %r+1
	get 1 %r y
	let r = %r+1
	get 1 %r z
	let r = %r+1
	left r "$y" 8
	left s "$z" 15
	if %n == 1 let n = 0 | goto pjmp
	print "º$wº$xº$rº$sº"
:pjmp
	if %r != 322 goto list1
	print "ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ¼"
	more off | goto main	
:----------------------------------------------------------------------------
:scan
	set b "$1 $2 $3 $4"
	strip a "$b"
	case a U
	let r = 2
:scan1
	get 1 %r m
	let r = %r+1
	get 1 %r o
	let r = %r+1
	get 1 %r y
	let r = %r+1
	get 1 %r z
	let r = %r+1
	left r "$y" 8
	left s "$z" 15
	strip n "$m"
	case n u
	if "$n" == "$a" goto dialent
	if %r != 322 goto scan1
	print "^g" | goto main 

:errtrap
	if "%err" == "4" gosub init|resume top
	print "^g^g^g^g^gERR %err"|end

:byebye
	close 1
	ansi off
	cls
	end

