;---------------------------------------------
;	Esimerkki - Valinta 2
;---------------------------------------------
; 01-SEP-89 / Soft Service / Leonard Norrgård
;
; Copyright © 1989 Soft Service
;---------------------------------------------

	init
	keyboard nosend
	call main
	keyboard send
takaisin:
	change Esimerkki.vtex

header:
	echo "<cs>"		; Tyhjentää kuvaruudun
	echo "<cya><nbg><crlf>"
	echo "<yel><dbl> Soft Videotex <crlf><crlf>"
	echo "<cya><nbg><crlf>"
	echo "<crlf><cya>Yhteys tunnuksella<CRLF><CRLF>"
	return

main:	call header

	echo "<CYA>Tämä skripti ottaa yhteyden haluamaasi<CRLF>"
	echo "<CYA>Videotex-palveluun.<CRLF><CRLF>"

	call valitse-palvelu

	call header

	echo "<GRE>Anna modeemin siirtonopeus,<crlf>"
	echo "<GRE>joko<yel>1200<gre>tai<yel>2400<gre>:<con><yel>"

	call readword

	if "<ret>" = "1200" then goto baud-ok
	if "<ret>" = "2400" then goto baud-ok

	echo "<crlf><crlf><red>Virheellinen nopeus '<ret>'<crlf>"
	echo "<crlf><gre>Paina näppäintä,<yel>L<gre>Lopettaa: <con>"
	key flush
	if "<inkey>" ~= "l" then return
	goto main

baud-ok:
	echo "<crlf>"
	wait 00:00.01
	set baud <ret>

	when nocartrap "NO CARRIER" do goto nocar

	call header
	echo "<CYA>Kun haluat lopettaa, paina<CRLF>"
	echo "<CYA>ESC-näppäintä.<CRLF><CRLF>"

	call soita		; Ota yhteys

	keyboard nosend
key-testi:
	key
	if "<inkey>" = "^[" then goto key-lopeta
	send "<inkey>"
	goto key-testi

key-lopeta:
	call header

	echo "<GRE>Puhelinyhteys suljetaan...<CRLF><CRLF>"

	call pure-linja		; vapauta linja

	echo "<CRLF>"
	echo "<GRE>Esimerkki suoritettu,<crlf>"
	echo "<GRE>paina näppäintä: <con>"
	key flush
	wait 00:00.01
	change Esimerkki.vtex

;
nocar:  echo "<cs><red>Modeemi menetti yhteyden<crlf><crlf>"
	echo "<gre>Paina näppäintä.<crlf>"
	key flush
	keyboard send
	change Esimerkki.vtex

;
; Hae halutut sivut
;
Hae-joka:
	echo "<cof>"

	; Tänne voi halutessa lisätä sivuja.
	; Ilman tunnusta ei kuitenkin pääse pitkälle
	; TeleSammossa...
	call hae-sivu "T01a"
	call hae-sivu "T02a"
	call hae-sivu "T021a"
	call hae-sivu "HOTLINE1a"
	call hae-sivu "8a"
	call hae-sivu "T09a"
	return

;
; Hae ja tallenna sivu
;
hae-sivu:
	set virhe-jatko hae-sivu2   ; minne mennä virhekorjauksen jälkeen
;	when serial error do goto linja-virhe
	when eiooo "tee uusi valinta" do goto hae-skip
        send "<sivu-komento1><1><sivu-komento2>"

hae-sivu2:
	wait 00:00.10
;	save "kuvat:<1>"

hae-skip:
	cancel serial
	cancel eiooo
	return
;
linja-virhe:
	echo "<clear><red><double>Linja-virhe:<yellow>sivu haetaan uudestaan<crlf>"
	wait 00:00.01
	send "<sivu-uudelleen>"		; Hae sivu uudestaan
	goto <virhe-jatko>

;
; Pure linja
;
pure-linja:
	call CheckModem	; modeemi komentotilaan
	wait 00:00.01
	send "ath0^M"   ; puretaan linja
	wait 00:00.01
	return
       
;
; Ottaa yhteyden Videotex-tietokantaan
;
soita:  call checkmodem
        echo  "<GRE>Modeemi on kunnossa<CRLF>"
	when temp1 "BUSY" do goto ts-busy
	when temp2 "NO CARRIER" do goto ts-nc
	when temp3 "NO DIALTONE" do goto ts-nodial
	when temp3a "CONNECT" do goto ts-online

	echo "<GRE>Soitto meneillä...<crlf>"
	send <dial-command>
	hold

ts-busy:
	call kysy "<RED>Numero on varattu,"
	goto <ret>

ts-nc:  call kysy "<RED>Ei vastausta,"
	goto <ret>

ts-nodial:
	call kysy "<RED>Modeemi ei saanut valintaääntä,"
	goto <ret>

ts-online:
	cancel temp1 temp2 temp3 temp3a		; Poista when-ansiot
	return

kysy:	wait 00:00.01
	echo "<crlf><1><crlf>"
	echo "<RED>yritetäänkö uudestaan (K/E)?<con> "
	key flush
	wait 00:00.01
	echo "<crlf>"
	if "<inkey>" ~= "k" then return "main"
	else return "takaisin"

;
; Testaa modeemi -- varmista että parametrit ovat asetettuja ensin!
;
CheckModem:
	online <baud> <parity> <databits> <stopbits> <handshake>
	;
	; Modeemi komentotilaan: Odota, lähetä "+++" ja odota taas.
	;
	echo "<GRE>Modeemitesti:<CRLF>"
	wait 00:00.02
	send +++
	wait 00:00.02
	echo "<crlf>"
        when tmp1 after 00:00.02 do goto nomodem
        sewa "^M^Mat^M" "OK"       ; tarkista että modeemi vastaa
        cancel tmp1                ; poista ansa tmp1
        return                     ; modeemi on kunnossa, jatkaa!

NoModem:
	echo "<crlf>"
        echo "<RED>Modeemi-ongelma: modeemi ei vastaa.<CRLF>"
	echo "<RED>Tarkista että siirtonopeus on oikea ja<CRLF>"
	echo "<RED>modeemi kytketty.<CRLF>"
        cancel tmp1               ; poista temp
        goto takaisin

;
; Alustus
;
init:
	set esc	   "^["
	set cs     "^L"
	set con    "^Q"
	set cof    "^T"
	set red    "<esc>A"
	set gre    "<esc>B"
	set yel    "<esc>C"
	set cya    "<esc>F"
	set dbl    "<esc>M"
	set nrm    "<esc>L"
	set nbg    "<esc>]"
	set crlf   "^M^J"
	return

;
; Sananluku-rutiini
;
readword:
	lset result ""

	; Tyhjennä näppäimistöpuskuri
	if "<#KEYBUF>" # "" THEN KEY

read-continue:

	; Lue yksi merkki
	key

	; Jos se oli RETURN-näppäin, palauta tulos
	if "<INKEY>" = "^M" THEN RETURN "<result>"

	; Lisätään merkki `result'-merkkijonoon
	lset result "<result><inkey>"

	echo "<inkey>"

	; Backspace?
	if "<inkey>" # "^H" then goto read-continue

	; poista edellinen merkki
	split "<result>" "^H" result none

	strlen "<result>"
	lset result "<result>" 1 <ret>
	goto read-continue

;
; strlen - antaa merkkijonon pituus
;
strlen: lset result 0
	lset work "<1>"
strlen-2:
	lset temp "<work>" <result> <result>
	if "<temp>" = "" then return "<result>"
	lset result <result> + 1
	goto strlen-2

;
; Palvelun valitseminen
;
valitse-palvelu:
	echo "<GRE>Valitse näistä:<CRLF><CRLF>"
	echo "<GRE>1. TeleSampo<CRLF>"
	echo "<GRE>2. Tietoset, Turun Telset<CRLF>"
	echo "<GRE>3. Infostand, Aamulehti (Kymppikanava)<CRLF>"
	echo "<CRLF>"
	echo "<GRE>L. Lopeta<CRLF>"
	echo "<CRLF>"
	echo "<GRE>Valinta:<YEL><CON>"

	key flush
	echo "<inkey>"

	if "<inkey>" ~in "123L" then goto valitse-ok

	call header
	goto valitse-palvelu

valitse-ok:
	if "<inkey>" ~= "L" then change esimerkki.vtex

	if "<inkey>" # "1" then goto valitse-2

	;
	; Aseta parametrit TeleSampoa varten
	;
        set puhelin-numero 92922

	set dial-command "atdt <puhelin-numero>^M"

	set sivu-komento1 "*"
	set sivu-komento2 "#"
	set sivu-uudelleen "*00"

	; Siirtonopeus annettu ylhäällä
	set parity even
	set databits 7
	set stopbits 1
	set handshake none

	return

valitse-2:
	if "<inkey>" # "2" then goto valitse-3

	;
	; Aseta parametrit Turun Telset:iä varten
	;
	call yhteydenotto-tapa "Turun Telset"
	echo "Anna puhelinnumero:"
	call readword
        set puhelin-numero "519411"

	set dial-command "atdt <puhelin-numero>^M"

	set sivu-komento1 "*"
	set sivu-komento2 "#"
	set sivu-uudelleen "*00"

	; Siirtonopeus annettu ylhäällä
	set parity even
	set databits 7
	set stopbits 1
	set handshake none

	return

valitse-3:

	; Infostand
	; ...
	return

;
; Neuvo käyttäjää yhteidenottotavoista ja kysele miten otetaan yhteyttä
;
yhteydenotto-tapa:
	call header

	if "<1>" # "Turun Telset" then goto yot-2

	echo "<CYA>  On olemassa useita tapoja ottaa<CRLF>"
	echo "<CYA>yhteyttä Turun Telset:iin. Jos olet<CRLF>"
	echo "<CYA>Turun Verkkoryhmässä voit<YEL>soittaa<CRLF>"
	echo "<YEL>suoraan<CYA>Turun Telset:iin paikallis-<CRLF>"
	echo "<CYA>puhelun hinnalla.<CRLF>"
	echo "<CYA>  Turun ulkopuolelta kannattaa ottaa<CRLF>"
	echo "<CYA>yhteyden joko paikallisen<YEL>Infotel-<CRLF>"
	echo "<CYA>palvelun kautta, tai<YEL>Telesammon<CYA>kautta."
	echo "<CRLF>"
	echo "<CYA>Valitse:<CRLF><CRLF>"
	echo "<YEL>1<CYA>Suoraan<CRLF>"
	echo "<YEL>2<CYA>Infotel-palvelun kautta<CRLF>"
	echo "<YEL>3<CYA>Telesammon kautta<CRLF>"
	echo "<YEL>L<CYA>Lopeta<CRLF>"
	echo "<CRLF>"
	echo "<CYA>Valinta:<YEL><CON>"

	key flush
	echo "<inkey>"

	if "<inkey>" ~in "123L" then goto yot-1-ok
	goto yhteydenotto-tapa

yot-1-ok:
	if "<inkey>" ~= "L" then change esimerkki.vtex

	if "<inkey>" # "1" then goto yot-1-ok2
yot-1-ok-again:
	call header
	echo "<CYA>Suora puhelinyhteys<CRLF>"
	echo "<CRLF>"
	echo "<CYA>Valitse puhelinnumero:<CRLF>"
	echo "<CRLF>"
	echo "<YEL>1<CYA>519411 (Turun Verkkoryhmästä)<CRLF>
	echo "<YEL>2<CYA>921 - 519411 (Muualta)<CRLF>"
	echo "<YEL>L<CYA>Lopeta<CRLF><CRLF>"
	echo "<CYA>Valinta:<YEL><CON>"

	key flush
	echo "<inkey>"

	if "<inkey>" ~in "12L" then goto yot-1-ok-ok
	goto yot-1-ok-again

yot-1-ok-ok:
	if "<inkey>" ~= "L" then change esimerkki.vtex
	if "<inkey>" # "1" then goto yot-1-ok-ok2
	set puhelin-numero "519411"
	return
yot-1-ok-ok2:
	set puhelin-numero "921519411"
	return

yot-1-ok2:
	; infotel?
	if "<inkey>" # "2" then goto yot-1-ok3
	set puhelin-numero "0771"
	return

yot-1-ok3:
	; Telesampo!
	set puhelin-numero "92922"
	return

yot-2:
	if "<1>" # "TeleSampo" then goto yot-2