Tech Note                                        January 27, 1997

03. Accessing Built In Data
-----------------------------------------------------------------

The GETROOT() Function returns the root frame of your Newton. Every 
application currently installed on your Newton is accessible via this 
frame. Because of their large size, you should always use the special := 
assignment operator to point to this frame.

The first example program will display all of the items stored in the 
root frame. The output of this list is quite large, and will not be 
reproduced in this technote. This program is completely safe. You can 
enter and run it on your Newton with no risk of data loss.

10 REM getroot() Example
20 rootFrame := getroot()
30 rootElements := elements(rootFrame)
40 numElements = length(rootElements)-1
50 FOR i = 0 TO numElements
60 PRINT rootElements[i]
70 NEXT i

The next example will open the Names application, and is also completely 
safe:

10 getroot().cardFile:open()

The :open() in the above program tells the Names application to open as 
if you had tapped Names. The built-in applications respond to :open() and 
:close(). The names of the built-in applications are paperRoll (Note 
Pad), calendar (Dates), cardFile (Names), extrasDrawer (Extras), and 
assistant (Assist).

The last example program will display all of the fields in your user 
configuration frame. The output of this list is quite large, and will not 
be reproduced in this technote. This program is completely safe. You can 
enter and run it on your Newton with no risk of data loss.

10 REM GETROOT().userConfiguration Example
20 rootFrame := GETGLOBALS().userConfiguration
30 rootElements := ELEMENTS(rootFrame)
40 numElements = LENGTH(rootElements)-1
50 FOR i = 0 TO numElements
60 PRINT rootElements[i]
70 NEXT i


Figuring out the index to a file
--------------------------------

One of the first things you need to do in accessing someone else's files 
is figure out what the name of the index variable is for your OPEN and 
GET statements.

Here's a short NS BASIC program that displays all the file names and what 
their indexes are. It uses some functions that are not listed in the NS 
BASIC manual.

* list
0010 rem list indexes of all files
0011 print "Enter 0 for internal, 1 for card:";
0012 input store
0020 LET x:=getstores()[store]:getsoupnames()
0030 for i=0 to length(x)-1
0040   print x[i]
0060   LET indexes:=getstores()[store]:getsoup(x[i]):getindexes()
0065   if length(indexes)=0 then goto 100
0070   for j=0 to length(indexes)-1
0080     print "",indexes[j].path
0090   next j
0100 next i
* run
Enter 0 for internal, 1 for card:
? 1
Calendar
          mtgStartDate
          mtgAlarm
Calendar Notes
          mtgStartDate
          mtgAlarm
indexes.BAS:NSBASIC
          LineNo
Names
          sortOn
Notes
          timeStamp
Repeat Meetings
          mtgStopDate
          mtgAlarm
Repeat Notes
          mtgStopDate
          mtgAlarm
SCRATCH.BAS:NSBASIC
          LineNo
System
          tag
To do
          mtgStartDate
          mtgAlarm