1B MicroScript Thorough Primer, No. 8

Toshihisa Muto

Personal Media Corporation


On this occasion, let's try making a tool to do presentations in the manner of a picture story show using 1B MicroScript.

Creating a Simple Presentation Tool

Recently, our chances of hearing the term desktop presentation (DTPR) have increased. This is attempting to do a presentation using a personal computer.

If one thinks about it, when it comes down to writing OHP [1] drafts, creating these with handwriting has already become rare. We create drafts with word processor and drawing software, and then we burn the printouts of these onto transparent sheets using a copying machine. However, because they have been accurately entered into a computer, it would be better if we could have used them as is. The personal computer becomes a powerful presentation weapon that not only displays characters and drawings, but also does things like using animation and doing various simulations on the spot [2].

Well then, how will things turn out when we do a presentation with BTRON? In fact, the file system that BTRON possesses (the real object/virtual object model) becomes an outstanding presentation tool just as it is already. You can set up things so that you output tables, graphs, and the like in accordance to need by burying beforehand virtual objects in this place and that. Without losing sight of the overall flow, you can enter into a detailed discussion at the necessary time.

However, the real object/virtual object model is way too flexible, and there are occasions when it is a little difficult to use in a place where we actually do presentations. One cause is that it will be necessary at some time to close an opened window. When an operation to close a window is entered, the force of the presentation ends up getting diminished.

Also, when things are arranged so that any virtual object can be freely opened, there is the possibility that the flow of the entire presentation will end up getting broken off just by mistaking the order in which you open the virtual objects. For a detailed explanation, anyway, it is better for the overall flow to proceed as determined, without making any mistakes.

Accordingly, on this occasion, we shall make it our business to try to create a simple presentation tool for carrying out presentations. Basically, this will be a so-called picture story show. When you click through it, the paper (slides) turns from one to the next. However, I have devised a little scheme in which by making it so that can attach a table of contents to the slides, you make it so that you can begin even from the middle.

Creating this Kind of Presentation Tool

First, in the beginning, I would like to have you take a look beforehand at the completed presentation tool. When we start up the virtual object of "1B/V1 Presen," Fig. 1 appears. What I am giving as an example is a presentation concerning the BTRON environment "1B/V1," which is being marketed by Personal Media Corporation. It is a simple thing that consists of four slides in its entirety.

Figure 1. Cover page slide

The four slides are divided in two, "Features" of the former half (three slides) and "References" of the latter half (one slide). It is arranged so that you turn through the slides in order from No. 1 up to No. 4.

"Features" and "References" have been made into virtual objects. When we double click "Features," Fig. 2 appears. This is the No. 1 slide [TN1].

Figure 2. No. 1 slide

When you click somewhere on the screen, you move on to the next slide. With just this click operation, you grope along up to the last, No. 4. In the lower right hand corner, the mark of a book appears in which the current page number is displayed. When we click the page on the left side of the book, we return to the previous page.

In the No. 1 and No. 3 slides, virtual objects have been buried. For example, in the No. 1 slide (Fig. 2), when you double click the virtual object "TRON," a window appears (Fig. 3) [which states that "TRON is an abbreviation of The Real-time Operating system Nucleus"]. Of course, any sort of virtual object can be buried. It's all right whether it's a simple text editor window in the manner of Fig. 3, and, furthermore, it's all right even if it's another MicroScript program.

Figure 3. Opening a virtual object from the slide

Actually, when we double click "References" in the cover slide of Fig. 1, we jump from No. 1 to No. 3, and, suddenly, we go to the No. 4 slide. In fact, the virtual objects lined up on top of each other on the cover page slide correspond to a table of contents. It is made up so that when you double click on one of them, the presentation can begin from the middle.

Creating the Manuscript for the Slides

Real Object "1B/V1 Presen"

Well then, let's now go on to take a look at how we create the above Presen slide. When we open the real object "1B/V1" with the figure editor, Fig. 4 appears.

Figure 4. Contents of the real object "1B/V1 Presen" (1/2 times view)

"Features" and "References" have been made in the form of virtual objects. The title, the background, etc., have all been made into the segment name "Page." The real object "1B/V1 Presen" holds only the role of collecting together each slide. The description of the processing that turns the actual slide manuscripts and slides is carried out in the individual real objects (we shall decide to call these slide real objects; here, "Features" and "References"). In other words, when we change from Fig. 1 to Fig. 2, it comes about that the "Features" window starts up by piling on top of the window in which "1B/V1 Presen" has been executed.

For creating the slides, all we have to look at is "SCRIPT: Register All Slides" (program). Inside this, what forms the guts is the call up of the procedure "Set_VObject" on the 5th and 6th lines. The meaning of each argument is as below.

5   CALL Set_VObject Execute_VObject1 1 3

No. 0 argument: <procedure name executed when double clicked>
No. 1 argument: <first page of the slide real object>
No. 2 argument <last page of the slide real object>

Because the "Features" one corresponds to slides No. 1 to No. 3, the no. 1 argument and the no. 2 argument respectively become 1 and 3. The "Execute_VObject1" procedure of the no. 0 argument is described in the 13th to 15th lines directly below.

The "Execute_VObject1" procedure is called up when the "Features" real object is double clicked, which does the processing that opens the actual slides. Here, all we have to do is call up the procedure "Open_Slide_RObject."

14   CALL Open_Slide_RObject 0 VObject1 $ARG[0]

No. 0 argument: <slide real object number when first slide real object is made no. 0>
No. 1 argument: <name of the slide real object>
No. 2 argument <give $ARG[0] unconditionally>

Real Objects "Features" and "References"

In that case, let's at last take a look through the slide real objects that realize the substance of the slides. When we open the real object "Features" with the figure editor, Fig. 5 appears.

Figure 5. Contents of real object "Features" (1/2 times view)

The segment "Page" is a figure segment that serves as the background. Here, I have used a simple mesh pattern, but if one devises a background with various things, a beautiful presentation will be possible.

Because the book symbol part in the lower right is jammed together, I have placed an enlarged illustration of it in Fig. 6. What I call PG is the character segment for the purpose of displaying the slide number.

Figure 6. Contents of real object "Features" (2 times view)

I have attached the names "S01," "S02," and "S03" to things in which I have grouped the slide manuscripts. Along the exterior, there is a thin frame, but this is an empty rectangle for the purpose of attaching an approximation of the size of the slide. This also has been grouped together.

In "S01" and "S03," there are respectively the virtual objects "TRON" and "DoubleClick_This_VObject." However, as virtual objects cannot be grouped, it's fine just to simply place them beforehand in the locations where we would like to show segments. When we display these slides, these virtual objects are displayed together with them, and they will be set to open into a window with a double click.

As for the scripts, it's all right if we look at just "SCRIPT: Slide #1." We call up the procedure "Set_Page" in the order of the slides.

2   CALL Set_Page S01 TRON TRON.X-S01.X TRON.Y-S01.Y

No. 0 argument: <segment name>
No. 1 argument: <real object name> (if there is one)
No. 2 argument <difference between the slide manuscript overall and the X coordinate of the virtual object> (if there is one)
No. 3 argument <difference between the slide manuscript overall and the Y coordinate of the virtual object> (if there is one)

The no. 1 argument to the no. 3 argument are specified in a case where a virtual object is displayed together.

With the real object "References" (Fig. 7) also, it's all right if we write "SCRIPT: Slide #2" [TN2] in the same manner.

Figure 7. Contents of real object "References" (1/2 times view)

Summary

With the above, the creation of the slide manuscripts and the work of registering them is finished. When we write it, it gets long, but the description of slide manuscript registration can be done almost mechanically. Almost all the work comes down to the work of creating the slide manuscripts with the figure editor, and then making them into groups.

Scheme for the Realization of the Presentation Tool

The workings of this presentation are realized through "SCRIPT: Slide Control" (Program 4) and "SCRIPT: Slide Engine" (Program 5). Here, I will briefly mention just that point.

The way in which we take the interface of the script program of the cover page slide ("SCRIPT: Slide Control") and the script program of the individual slides ("SCRIPT: Slide Engine") becomes that point. Because both of them are completely independent programs, we use shared variables in exchanging information.

 1 DEFINE Beginning 0
 2 DEFINE End 1
 3 DEFINE Current 2
 4 DEFINE All_End 3
 5 DEFINE Moving  4
 6 #--------------------------------------------------------------------- 
 7 DEFINE CURR   $GV[Current]
   # The current slide number
 8 DEFINE MIN    $GV[Beginning]
   # The start page of the current slide real object
 9 DEFINE MAX    $GV[End]
   # The finish page of the current slide real object
10 DEFINE ALLMAX $GV[All_End]
   # The finish page of all the slides
11 DEFINE MOVING $GV[Moving]
   # When a slide movement occurs, "1" is substituted

When turning through pages, at certain times, processing in which you close your slide real object and open the next slide real object real object becomes necessary. What realizes that is the procedure "Monitor_Page_Turning" (25th to 39th lines) inside "SCRIPT: Slide Control." When the variable MOVING that reports the movement of a slide becomes 1, the procedure searches for a slide real object that should be newly started up, and then it starts that up.

In Closing

On this occasion, we have created a presentation tool using 1B MicroScript. It is a simple picture story show program.

Expanding the functions in various ways on the basis of this also would be interesting. For example, the first thing that comes to mind is attaching a bookmark that moves in the horizontal direction in the place of the book symbol on the lower right. It would be something that would make it so that you could jump to a favorite page by dragging. If you liken a bookmark to a volume knob, then the volume library in the sixth installment of this series (Vol. 28 of this magazine) could be used.

____________________

Program 1 "SCRIPT: Register All Slides"
(Stored inside the real object "1B/V1 Presen")
 1 DEFINE VObject1 Features
 2 DEFINE VObject2 References
 3 #---------------------------------------------------------------------
 4 ACTION Set_PageNo
 5   CALL Set_VObject Execute_VObject1 1 3
 6   CALL Set_VObject Execute_VObject2 4 4 
 7 END
 8 #--------------------------------------------------------------------- 
 9 ACTION Initial_Display
10   SCENE Page VObject1 VObject2
11 END
12 #---------------------------------------------------------------------
13 ACTION Execute_VObject1 DCLICK VObject1
14   CALL Open_Slide_RObject 0 VObject1 $ARG[0]
15 END
16 #---------------------------------------------------------------------
17 ACTION Execute_VObject2 DCLICK VObject2
18   CALL Open_Slide_RObject 1 VObject2 $ARG[0]
19 END

Program 2 "SCRIPT: Slide #1"
(Stored inside the real object "Features")
1 ACTION Set_All_Pages
2   CALL Set_Page S01 TRON TRON.X-S01.X TRON.Y-S01.Y
3   CALL Set_Page S02
4   CALL Set_Page S03 DoubleClick_This_VObject
                      DoubleClick_This_VObject.X-S03.X
                      DoubleClick_This_VObject.Y-S03.Y
5 END

Program 3 "SCRIPT: Slide #2"
(Stored inside the real object "References")
1 ACTION Set_All_Pages
2   CALL Set_Page S01
3 END

Program 4 "SCRIPT: Slide Control"
(Stored inside the real object "1B/V1 Presen")
 1 DEFINE Beginning 0
 2 DEFINE End 1
 3 DEFINE Current 2
 4 DEFINE All_End 3
 5 DEFINE Moving  4
 6 #--------------------------------------------------------------------- 
 7 DEFINE CURR   $GV[Current]
 8 DEFINE MIN    $GV[Beginning]
 9 DEFINE MAX    $GV[End]
10 DEFINE ALLMAX $GV[All_End]
11 DEFINE MOVING $GV[Moving]
12 #---------------------------------------------------------------------
13 DEFINE MAXVOBJ 16
14 #---------------------------------------------------------------------
15 VARIABLE VACT[MAXVOBJ] START[MAXVOBJ] END[MAXVOBJ]
16 VARIABLE VCOUNT
17 ACTION Set_VObject
18   SET VACT[VCOUNT] $ARG[0]
19   SET START[VCOUNT] $ARG[1]
20   SET END[VCOUNT] $ARG[2]
21   SET ALLMAX $ARG[2]
22   SET SET VCOUNT VCOUNT + 1
23 END
24 VARIABLE I
25 ACTION Monitor_Page_Turning
26   REPEAT
27     WAIT MOVING == 1
28     SET I 0
29     REPEAT VCOUNT
30       IF (START[I]<=CURR & (CURR<=END[I])
31         BREAK
32       ENDIF
33       SET I I + 1
34     ENDREPEAT
35 #    MESG "%d" I
36     CALL VACT[I] 1
37     SET MOVING 0
38   ENDREPEAT
39 END
40 #---------------------------------------------------------------------
41 ACTION Open_Slide_RObject
42   VCLOSE
43   SET MIN START[$ARG[0]]; SET MAX END[$ARG[0]]
44   IF $ARG[2] !=1; SET CURR START[$ARG[0]]; ENDIF
45   VOPEN $ARG[1]
46 END
47 #---------------------------------------------------------------------
48 PROLOGUE
49  CALL Set_PageNo
50  SET MOVING 0
51  CALL Initial_Display
52  EXECUTE Monitor_Page_Turning
53 END
54 
55 #---------------------------------------------------------------------
56 EPILOGUE
57  VCLOSE
58 END
59 #---------------------------------------------------------------------

Program 5 "SCRIPT: Slide Engine"
(Stored inside the real objects "Features" and "References")
 1 ACTION Small_RightPage_CLICK CLICK Small_RightPage
 2  CALL Turn_Page 1 # Next page
 3 END 
 4  
 5 ACTION Small_LeftPage_CLICK CLICK Small_LeftPage
 6  CALL Turn_Page (-1) # Previous page
 7 END
 8 
 9 #---------------------------------------------------------------------
10 DEFINE Beginning 0
11 DEFINE End 1
12 DEFINE Current 2
13 DEFINE All_End 3
14 DEFINE Moving  4
15 #---------------------------------------------------------------------
16 DEFINE CURR   $GV[Current]
17 DEFINE MIN    $GV[Beginning]
18 DEFINE MAX    $GV[End]
19 DEFINE ALLMAX $GV[All_End]
20 DEFINE MOVING $GV[Moving]
21 #---------------------------------------------------------------------
22 DEFINE Previous (-1)
23 DEFINE Next 1
24 #---------------------------------------------------------------------
25 DEFINE OK 1
26 #---------------------------------------------------------------------
27 DEFINE MAXELEM 100
28 #---------------------------------------------------------------------
29 VARIABLE PAGE[MAXELEM]
30 VARIABLE PAGECOUNT VOBJ1[MAXELEM] VOBJ2[MAXELEM]
31 #---------------------------------------------------------------------
32 # $ARG[0]=Scene segment
33 # $ARG[1]=VObject1 $ARG[2]=VObject1.X offset $ARG[3]=VObject1.Y offset
34 # $ARG[4]=VObject2 $ARG[5]=VObject2.X offset $ARG[6]=VObject3.Y offset
35 ACTION Set_Page
36  SET PAGE[PAGECOUNT] $ARG[0]
37  SET VOBJ1[PAGECOUNT] $ARG[1]
38  SET VOBJ2[PAGECOUNT] $ARG[4]
39  MOVE $ARG[0]:0 0 Page
40  MOVE $ARG[1]: $ARG[2] $ARG[3] Page
41  MOVE $ARG[4]: $ARG[5] $ARG[6] Page
42  SET PAGECOUNT PAGECOUNT +1
43 END
44 #---------------------------------------------------------------------
45 DEFINE Page_Turn Small_Book Small_LeftPage Small_RightPage PG
46 DEFINE NEXTPG $ARG[0]
47 ACTION Display_Page
48  IF (NEXTPG>ALLMAX) | (NEXTPG<1) | (MOVING==1)
49    EXIT
50  ENDIF
51  SET CURR NEXTPG
52  IF (CURR>MAX) | (CURR < MIN)
53    SET MOVING 1
54    EXIT
55  ENDIF
56  TEXT PG "%2d" CURR
57  SCENE Page Page_Turn PAGE[CURR-MIN] VOBJ1[CURR-MIN] VOBJ2[CURR-MIN]
58 END
59 #---------------------------------------------------------------------
60 ACTION Turn_Page
61   CALL Display_Page CURR + $ARG[0]
62 END
63 #---------------------------------------------------------------------
64 ACTION Page_CLICK CLICK Page
65   CALL Turn_Page Next
66 END
67 #---------------------------------------------------------------------
68 ACTION Slide_Exit_Processing
69   VCLOSE
70 END
71 #########################
72 #########################
73 PROLOGUE 
74   SCENE Page Page_Turn
75   CALL Set_All_Pages
76   EXECUTE Initial_Display
77 END
78 #---------------------------------------------------------------------
79 ACTION Initial_Display
80   CALL Display_Page CURR
81 END
82 #---------------------------------------------------------------------
83 EPILOGUE
84   CALL Slide_Exit_Processing
85 END

Virtual Object Features: S01

An Operating System Born in Japan:

1B was born out of the TRON Project, which is Japanese independently developed computer technology.

In its design, we ceased using as is unfamiliar English technical terms, such as file and directory.

Virtual Object Features: S02

Standardizing Operations in a Friendly Manner:

In 1B, we have standardized basic operations with TRON operation methods. For example, with characters and pictures, and also with windows, the operations for moving them are all the same.

For character editing, just pull as is the selected characters. Furthermore, even moving and copying to another window is possible with the same operation.

Virtual Object Features: S03

You Can Add Electronic Footnotes One after Another:

Inside text or a picture, we can enter "electronic notes" that show the whereabouts of a more detailed explanation.

DoubleClick_This_VObject

"I want to arrange this complicated data nicely," "I want to smartly express a reference to another document," things that have been difficult with a personal computer up to now, are easy with 1B.

Virtual Object References: S01

References:

Electronic Stationery 1B Primer: BTRON, a Tool for Thinking, Personal Media Corporation, 2,060 yen

Invitation to BTRON, General Editor Ken Sakamura, Personal Media Corporation 400 yen

TRONWARE, Vols. 1~30, Personal Media Corporation

____________________

[1] OHP: Overhead Projector: this is equipment that projects characters and pictures written or drawn on transparent sheets onto a screen.

[2] As to the spread of DTPR, that color notebook personal computers have also become cheap is probably a great factor. If you try doing a color presentation without using a personal computer, it comes down to using slides. However, making these takes quite a lot of time and expense.

[Translator's Note 1] The translations of the contents of these four slides are given at the end of this article in the tables with brown backgrounds.

[Translator's Note 2] Note that Fig. 7 shows the virtual object "SCRIPT: OHP#2," which is different from the virtual object name in the text and the source code given below in Program 3. This appears to be a mistake on the part of the author.


The above article on MicroScript appeared on pages 34-39 in Vol. 30 of TRONWARE . It was translated and loaded onto this Web page with the permission of Personal Media Corporation.

Copyright © 1994 Personal Media Corporation

Copyright © 2008 Sakamura Laboratory, University Museum, University of Tokyo