786.TXT ===================================================================== WAYNE'S CORNER - AN R:BASE SLIDE SHOW ===================================================================== PRODUCT: R:BASE VERSION: 4.5+ or Higher ===================================================================== CATALOG: Programming in R:BASE AREA : Logic & Data Manipulation ===================================================================== Use R:BASE to create a slide show type presentation. Display text on the screen line by line, run command files, and return to the same place in your presentation. Using a table to hold the information to display lets you show text to the screen on the key points of your presentation. You can then run R:BASE command files to demonstrate features and provide examples for your talk. Creating the table Create a table in R:BASE to control the actions. This table contains all the data necessary to draw colored boxes on the screen, display text and run the example programs. The command file, talk.rmd, accesses the data in this table through DECLARE CURSOR. As each row is read, the designated action is performed. Table Actions: Frame INTEGER Action TEXT (8) Words NOTE UpperLeftRow INTEGER UpperLeftColumn INTEGER LowerRightRow INTEGER LowerRightColumn INTEGER FColor TEXT (8) BColor TEXT (8) The Frame column orders the actions. By using groups of numbers (100, 200, 300, and so on), you can group the actions by screen, making it easier to set up your presentation. Define a single column index for this column. The Action column tells the program what to do. There are four possible actions: WORDS, CLS, BOX, and RUN. Depending on the action, the other columns are filled in appropriately. The Words action When the action is words, the Words column contains the text to display. The text is displayed using the WRITE command. The text in the Words column can be one long string that is wrapped on display, or it can contain LINEEND characters for additional formatting. The UpperLeftRow and UpperLeftColumn columns contain the starting row and column locations for the text display. These parameters are coordinated with the box display that the text is written in - the words action always follows a box action. The row and column positions should be one row greater and one column greater than the UpperLeftRow and UpperLeftColumn coordinates for the preceding box action. The LowerRightRow column contains the display width for the text. The LowerRightColumn column is NULL. The FColor and BColor columns contain the foreground and background colors for the text display. The background color matches the background color of the preceding box action. The BColor column can have the same value for all rows in the table. Text is emphasized by writing it in different colors, such as black or red; the FColor column has the color of the actual text. The Cls action When the action is cls, all the other columns on the row are NULL. This action executes the CLS - clear screen - command. The Box action When the action is box, the Words column is NULL. This action draws a shadowed, colored box on the screen. The CLS command is used to draw the box. The UpperLeftRow, UpperLeftColumn, LowerRightRow, and LowerRightColumn columns contain the screen coordinates for drawing the box. The text from words actions is displayed in this box. The FColor column is NULL and the BColor column has the box color. This color matches the BColor value for the words actions that follow the box action. The Run action When the action is run, the Words column contains the name of a command file to run. This command file must be an ASCII file; you cannot run an application file here. All the other columns on the row are NULL. The ASCII command file is run using the QUIT TO command. This action exits the presentation program, talk.rmd. The last line in the ASCII command file that is run must be RUN TALK.RMD, which restarts the presentation program at the same place. The variables vlastcls and vresume control where the presentation program restarts - do not clear them in the ASCII command file. Setting up frames Use the frame column to group the actions by screen display. A screen is 25 lines; actual display is limited to about 20 lines for ease of viewing. Within a frame or group, the actions begin with a cls, then a box, then a series of words and run actions. More than one box can be drawn per group. Using different boxes separates and emphasizes the text. You might have the following frame numbers and actions: screen 1 100 CLS clear the screen 101 BOX draw box for text display 102 WORDS text to display in box drawn by 101 screen 2 200 CLS clear the screen 201 BOX draw box for text display 202 WORDS text to display in box drawn by 201 203 BOX draw a second box below the first 210 WORDS text to display in box drawn by 203 220 WORDS text to display in box drawn by 203 230 WORDS text to display in box drawn by 203 screen 3 300 CLS clear the screen 301 BOX draw box for text display 302 WORDS text to display in box drawn by 301 303 BOX draw a second box below the first 310 WORDS text to display in box drawn by 303 320 RUN file to run 330 WORDS text to display in box drawn by 303 Group the actions and text by screen display to easily set up your presentation. Remember that each group starts with a cls, then a box, and then a words action, putting a header or title on the screen. Then, draw additional boxes and display text as desired on the rest of the screen below the header. The header box and text remain on the screen while the lower boxes and text change. You don't need to clear the screen to clear text displayed in a box - just use a box action to redraw an empty box at the same location. Rows of data can be added to the Actions table in any order; when the presentation program is run, it orders the data by the frame column. Rows are inserted or reordered by changing the frame number. For example, insert another words action by adding a frame numbered 311. The row is physically added to the end of the Actions table, but ordered properly when the presentation program is run. 300 CLS clear the screen 301 BOX draw box for text display 302 WORDS text to display in box drawn by 301 303 BOX draw a second box below the first 310 WORDS text to display in box drawn by 303 311 WORDS text to display in box drawn by 303 320 RUN file to run 330 WORDS text to display in box drawn by 303 Here's the presentation program code. *(TALK.RMD) CONNECT talk SET VAR vkey TEXT, vclscount INT, vresume INT, + vlastcls INT SET MESSAGE OFF IF vlastcls IS NULL THEN SET VAR vlastcls = 0 ENDIF DECLARE c1 SCROLL CURSOR FOR SELECT * FROM actions + WHERE Frame >= .vlastcls ORDER BY Frame OPEN c1 FETCH NEXT FROM c1 INTO + vFrame i1, vAction i2, vWords i3, vULR i4, + vULC i5, vLRR i6, vLRC i7, vFColor i8, vBColor i9 WHILE sqlcode = 0 THEN IF vresume = 0 OR vresume IS NULL THEN SWITCH (.vAction) CASE CLS CLS SET VAR vlastcls = .vFrame BREAK CASE BOX SET VAR bulr = (.vULR + 1) SET VAR bulc = (.vULC + 1) SET VAR blrr = (.vLRR + 1) SET VAR blrc = (.vLRC + 1) CLS FROM .bulr .bulc TO .blrr .blrc black CLS FROM .vULR .vULC TO .vLRR .vLRC .vBColor BREAK CASE WORDS SET VAR vwords TEXT = (.vwords) WRITE .vwords = .vLRR AT .vULR .vULC + .vFColor ON .vBColor SET VAR vkey = (GETKEY(0)) SWITCH (.vkey) CASE [Esc] SET VAR vlastcls = 0 CLS QUIT CASE [Up] CASE [PgUp] SET VAR vclscount = 0 WHILE sqlcode = 0 THEN FETCH PRIOR FROM c1 INTO + vFrame i1, vAction i2, vWords i3,+ vULR i4, vULC i5, vLRR i6, vLRC i7, + vFColor i8, vBColor i9 IF vclscount >= 2 THEN BREAK ENDIF IF vAction = 'CLS' THEN SET VAR vclscount = (.vclscount + 1) ENDIF ENDWHILE BREAK CASE [PgDn] SET VAR vclscount = 0 WHILE sqlcode = 0 THEN FETCH NEXT FROM c1 INTO + vFrame i1, vAction i2, vWords i3,+ vULR i4, vULC i5, vLRR i6, vLRC i7, + vFColor i8, vBColor i9 IF vAction = 'CLS' THEN FETCH PRIOR FROM c1 INTO + vFrame i1, vAction i2, vWords i3,+ vULR i4, vULC i5, vLRR i6, vLRC i7, + vFColor i8, vBColor i9 BREAK ENDIF ENDWHILE BREAK CASE [Alt][F1] SET KEYMAP [Alt][F2] = 'run talk.rmd[enter]' SNAP resume.scn FROM 1,1 TO 25,80 SET VAR vresume = .vFrame QUIT DEFAULT BREAK ENDSW BREAK CASE RUN IF vkey <> '[F2]' THEN SNAP resume.scn FROM 1,1 TO 25,80 SET VAR vresume = .vFrame QUIT TO .vWords ENDIF BREAK ENDSW ELSE IF vFrame > .vresume THEN SET VAR vresume = 0 DISPLAY resume.scn AT 1,1 ERASE resume.scn ENDIF ENDIF FETCH NEXT FROM c1 INTO + vFrame i1, vAction i2, vWords i3,+ vULR i4, vULC i5, vLRR i6, vLRC i7, + vFColor i8, vBColor i9 ENDWHILE CLOSE c1 DROP CURSOR c1 SET VAR vlastcls = 0 CLS SET MESSAGE ON RETURN The DECLARE CURSOR orders the data by the frame column. A scrolling cursor is used so you can go back to previous screens. The where clause on the DECLARE CURSOR is used when you restart the application using the Alt-F2 function key (program exited by Alt-F1) or when you restart after running a program. vresume has a value only after you have run a program This switch block, the Action switch, executes commands based on the action defined for this row in the Actions table The Cls action Since each screen starts with a CLS, vlastcls is set to identify the screen for restarting the presentation. The Box action Draw the black shadow Draw the colored box. The Words action Display the text in the box. The program pauses here waiting for a key press. The GETKEY function checks for a key press to determine what to do next. Any key other than Esc, PgUp, Up, PgDn, or Alt-F1 moves to the next row in the Actions table and executes the next action. F2 here skips past a run action The Esc key exits completely. Up arrow or Page up displays the previous screen. Previous rows are fetched until the program finds two cls actions. Each screen starts with a CLS, that's why the program looks for two - the screen the cursor is on is one cls action. The cursor skips past this cls, then finds the previous cls action. After finding the second cls action, one more FETCH PRIOR is done. This ensures the FETCH NEXT located after the Action switch block (this fetch always executes), retrieves the cls action to start the previous screen. Page down goes to the next screen, the program fetches rows until a cls action is found. A cls action begins each screen. A FETCH PRIOR is then done to position the cursor for the FETCH NEXT that always executes after the Action switch block. Alt-F1 exits the application but allows restart at the same place. The Alt-F2 key is defined to restart the program from the R> prompt. End of the Words switch and action The Run action Use the F2 key to skip by and not run the external program; any key but F2 will execute the specified ASCII file. Variable vresume holds the current frame number, which identifies where the restart the DECLARE CURSOR End of the Action switch This section restarts after running a program. The vFrame comes from the DECLARE CURSOR and FETCH that is done as the program is restarted. The variable vlastcls, used in the DECLARE CURSOR WHERE clause, has the frame number of the last cls action. The variable vresume has the frame number of the last action executed, usually a run action. Vresume is greater than vFrame the first time through; the program then fetches rows until vframe is greater than vresume - the frame and action following the run action. The screen is redisplayed, resume.scn, the next row fetched and the action executed. This FETCH is always executed, it gets the next row after an action is completed.