!Teletext Script
Annotated version of 'whtrnnts'

 

This annotation is provided with the StrongHelp version of the script interpreter documentation.

 

This script will read the weather in Nantes, from the CNN european cities weather report.
It displays the weather as is shown in the teletext frame. It then reads the celsius temperature, and calculates from it a Fahrenheit temperature. While these latter functions are not strictly necessary, it does allow us to demonstrate the find() command, and various mathematical functions.

The output is written to a file which is updated each time the script is run. It is written as:

 Mon 12 May                             
 NANTES         15  59  partly sunny    
Temperature for Nantes : 15, in Fahrenheit: 59.0

This script has the comments colourised, but there are no further explanations. Hopefully it'll be fairly simple to see what is happening, and why.

; WthrNantes

channel(5)

.channelcheck
  channelid(A)
  if (A ! &804F) message("Please set satellite receiver to CNN.")
  if (A ! &804F) go("channelcheck")

getframes(463)
set F to status(frames)

; turn off polling to speed it up a little
poll_nomessages()
poll_disable()

fileupdate("<Teletext$Temp>.WthrNantes")

set G to 2
.frameloop
  selectframes(463, G)

  set L to 2
  .lineloop
    find(B,"NANTES",L)  ; case sensitive

    if (B = 0) go("continue") ; no Nantes here...
      ; got Nantes
      setchar(35,5,32)        ; remove 'x/x' pagecount
      setchar(36,5,32)
      setchar(37,5,32)
      appendline(5,2)         ; the date
      filewritebyte(10)
      appendline(L,2)         ; the report line
      filewritebyte(10)

      ; work out the temperature
      add(B,15)
      readvalue(M,B,L)
      filewritestring("Temperature for Nantes : ")
      filewritevar(M,2)       ; allows "-9" to "99"
      filewritestring(", in Fahrenheit: ")
      set Z to M              ; Fahrenheit is...
      add(Z,40)               ; Celsius plus 40
      mul(Z,Z,9)              ; multiplied by nine
      div(Z,Z,5)              ; divided by five
      sub(Z,40)               ; minus 40
      filewritevar(Z,1)
      filewritebyte(10)
      filewritebyte(10)
      go("finish")            ; don't need to scan any further

    .continue
    L++
    if (L [ 24) go("lineloop")

  G++
  if (G [ F) go("frameloop")

.finish
fileclose()

; re-pollify
poll_enable

; reopen "the usual" windows
getframe(100)                 ; force it back to 'index'
showviewer()
showcontrols()
poll_now()                    ; extra poll for windowopens

; ensure file is Text, then run file (loads into !Edit (etc))
filetype("<Teletext$Temp>.WthrNantes", &FFF)
oscall("Filer_Run <Teletext$Temp>.WthrNantes")
poll_now()                    ; poll, so file has a chance to load
pushkey(&1AE)                 ; Ctrl-cursordown

; we're done
terminate()

Return to !Teletext index
Copyright © 2003 Richard Murray