Classic Computer Magazine Archive COMPUTE! ISSUE 25 / JUNE 1982 / PAGE 94

Micros With The Handicapped
Developing A Communications Program: Part II

Susan Semancik and Marshall Curtis
Delmarva Computer Club

Programs which let motor impaired, nonverbal people communicate with others using a computer, can be of great benefit. Below are versions of a menu-communicator for Apple, PET, and VIC computers.

In our last column, we discussed the need for developing a program to help nonverbal, motor-impaired individuals in their communication needs. As the following outline shows, the second part of this series on construction of such a program will identify some of the considerations in the selection of a menu for the program:

  1. Introduction (April issue of COMPUTE!)
    1. Need for communications program
    2. Outline of series
    3. Reasons for tutorial approach
  2. Menu Setup (June issue of COMPUTE!)
    1. Type of Communication
      1. Word processing
      2. Computer programming
      3. Daily routine
      4. School classes
    2. Format of Message
      1. Considerations
        1. Output device for message
        2. Multiple input functions
        3. Maximum message length
        4. Screen size of computer display
      2. Calculations
        1. Number of screen lines for message
        2. Number of screen lines for menu
      3. Positioning
        1. Top of screen
        2. Bottom of screen
    3. Format of Menu
      1. Menu entries
        1. Sentences
        2. Words
        3. Characters
      2. Menu arrangement
        1. Row
        2. Column
        3. Block
      3. Menu spacing
        1. Number of blank rows and columns
        2. Number of entries per row or column
        3. Number of rows or columns per screen
    4. Display of Menu
      1. Static
        1. PET computer
        2. VIC computer
        3. Apple II computer
      2. Dynamic

There are many things to consider when developing a communications program. The most fundamental is the purpose for which communication is desired. Rather than develop one program to deal with all types of communication needs, it might be better to have separate programs dedicated to specific objectives – for instance, a program to do word processing functions with printer or modem output; or a program to communicate to a computer in a programming language such as BASIC, PASCAL, or machine language; or a program to communicate with others on a daily routine basis; or a program to use specific vocabularies for different school classes; etc. A list of communication needs compiled on an individual basis among nonverbal, motor-impaired persons would have many similar requirements, regardless of differences in computer equipment available or alternative input devices needed.

We will start with the development of a program to communicate with others on a daily basis, and will develop other types of programs as requests warrant them. Having decided on the type of communication, the next choice to consider is the format for communication: will the user be communicating by selecting from a menu of sentences, words, characters, or a combination of these? Must the physical line length of the computer's display screen be the deciding factor in this choice? Not necessarily. With the use of vertical and/or horizontal scrolling, screen sizes do not have to limit the length of menus or messages.

If enough computer memory or a disk is available, even multiple screens or "pages" of menus could be alternately displayed to increase the number of selections that can be made rapidly. If screen size is limited, a possible alternative might be to have a menu of sentences and/or words permanently displayed on a large poster rather than on the computer's screen. Then the user could access the poster's menu by a row/column or number selection method, with the choice being displayed on a printer, or even verbalized by a computer-controlled speech synthesizer.

A Versatile And Portable Program

In the series of articles we will be presenting on communications, we will be looking at some of the special features of three different computers and input devices we have available. This will mean that we will want the program we develop to be as versatile and portable as possible, and will try not to use features peculiar to a particular system if a more standard approach can be found. This will help those readers who want to develop a similar communications program for different systems. The three computers we will use have the following screen characteristics: 1) Commodore PET computer with 25 lines of 40 characters each; 2) Commodore VIC computer with 23 lines of 22 characters each; and 3) Apple II computer with 24 lines of 40 characters each.

Since this program will involve communicating with others on a daily basis, each user must make up an individual list of words involving his/her own routines. Start with a list of frequently used names of people, places, and articles, and of activities, actions, or descriptions most often associated with these words. Also, consider word endings if grammatical structure will be important in your messages, as well as punctuation, numbers, and special symbols. The alphabet should also be included so words can be formed that are not accessible from the menu.

Individualizing the menu will speed up the communication process. Not only can a message be formed faster with the computer's help, but the formation will not require the active involvement of the person with whom you want to communicate. The computer would be used in this case as a recorder of the message, so that there will be continuity of expression, and the message can be repeated without having to be reformed. Using the sound capability of most home computers, an audible signal could also be given when a message is ready for viewing.

For this demonstration program, we will choose a menu format that will include words and characters. If you want the entire menu to be visible at all times, then the computer's display screen characteristics will determine the size and structure of the menu. This type of menu will be called a static menu and will be shown first, since it is the easiest to create in a general fashion for any type of home computer. Later, we will investigate several types of dynamic menus, such as multiple menus and scrolling menus.

Next, decide on whether the message you form will be sent to an external device, and/or displayed on the computer's screen. If it will only be sent to an external device, such as a printer, then the entire screen can be used for the menu. If it will also be sent to the screen, then consider the maximum length necessary for your messages. To calculate the number of screen lines needed for the message area in a static menu, divide the maximum message length by the number of characters contained in the computer's screen width. Round up if any remainder exists, and/or add one to the result if you don't want words split at the right edge of the screen.

Also, decide if you will need several input functions and, if so, will they be performed by an alternative input device, or menu-driven from the screen. Input functions will be the topic of a later column, but they can include such things as erasing your last entry from the message, changing the selection speed for input, changing menus, changing output devices, or alternating between areas of the screen. If these functions are selected from the screen, then your communication's menu area will be smaller for a static menu.

We will assume in this demonstration that 160 characters will be the maximum message length to be displayed on the computer's screen. Also, we will reserve two lines of the screen for input functions, and will include an extra line in the message area to take care of words that would otherwise be split at the right edge of the screen. This means that our three computers would require 5, 9, and 5 lines, respectively, of the screen for the message area, and would have 18, 12, and 17 lines, respectively, remaining for the menu area.

Example 1: Commodore VIC Computer

160/22 = 8 lines for message
+ 1 for no edge-splitting of words
9 lines for message area
+ 2 for input functions
23 - 11 = 12 lines for menu

The menu can be arranged in rows, columns, blocks, etc. Remember that the main consideration in the arrangement is how easy it will be to indicate and retrieve a selection. The row or column arrangements give sufficient structure to satisfy the selection consideration. For this demonstration, we will use a column arrangement, with an attempt made to set the words in columns simulating sentence structure, and with characters appearing in an end column.

Spacing between adjacent columns and rows will be a factor of the distance the user will be from the computer's screen, in conjunction with the character size displayable by the computer. If vision is also a problem for the user, can the computer's characters be displayed larger? Yes, but since that's a concern shared by many others who may not need a communications program, we will address that problem as a separate issue in a later article.

For our demonstration program, we will assume one blank row between column entries, and one space between adjacent columns. The number of entries per column will be the quotient when you divide the number of screen lines for the menu by one more than the number of blank rows between column entries. This means that the PET, VIC, and Apple computers can have 9, 6, and 8 column entries, respectively, with the decisions made so far.

Example 2: Apple II Computer

17/2 = 8 entries per column

Since the width of each column will be determined by the largest word within it, group your list of words into sentence structure arrangement, and determine the number of columns that will form a static menu for your screen width. Sample menus follow for each of the three computers:

Example 3: Menu for the PET Computer:

DOCTOR  I   IS  HAVE  COME  SEE INGEDS
TEACHER YOU ARE HAS   BATH  EAT  AOTFR
WILL    WE  GO  GOOD  DRINK AND .ULHCP

Example 4: Menu for the VIC Computer:

DR. IS  COLD  INGEDS 12
I   AM  WHEN   AOTFR34
YOU ARE DRINK .ULHCP56
MOM EAT WANT ?MYWKB78
DAD NO  TIME ,VJQZX90
HOT YES SLEEP ;$%()'+ -

Example 5: Menu for the Apple Computer:

DOCTOR  I   IS  HAVE COME  SEE INGEDS
TEACHER YOU ARE HAS  BATH  EAT  AOTFR
WILL    WE  GO  GOOD DRINK AND .ULHCP

Once you've given the menu sufficient thought, then one of the last decisions to be made is the placement of the communications menu and the input functions menu, either at the top, bottom, or middle of the screen. And, ifthe message is also to be placed on the screen, where will it go? For our demonstration program, we will assume the communications menu will be in the middle of the screen, with the message area being either at the top or bottom of the screen. We are also assuming that the screen columns are numbered from left to right starting from one, and the screen rows are numbered from top to bottom starting from one.

We are finally at a point where we can start to consider the programming aspect of the project. It may seem that it took us a long time to get to this point, but if not enough attention is paid to the choosing and positioning of the elements of the menu, then no amount of programming tricks will make this be a functional tool for the motor impaired, nonverbal user.

Example 6: Display screen placement.

A Simple BASIC Program

We will start with a simple BASIC program that will enable you to view your individual menus on your computer's display screen. Programs 1 through 3 contain programs for our three computers to display the menus of Examples 3-5 by rows. The following is a list of variables that will be used in those programs:

W = the number of characters per screen width

RM = the number of rows in the communications menu

BR = the number of blank rows between column entries

CM = the number of columns in the communications menu

BC = the number of spaces between adjacent columns

RI = the number of rows in the input functions menu

SR = the starting screen row for the communications menu

SC = the starting screen position for the 1 st column

S() = the starting column positions for each column

L() = the width of each column

P = the tabbing position for a column

Note that line 75 of the program is written for a TAB function which starts count at zero. If your computer's TAB function starts count at one, replace line 75 with P = S(C) + TP. In line 95, TP is used to adjust the TAB value for computers which can TAB beyond the screen width. For those that don't, this line can be adjusted or deleted. If your system doesn't allow variable dimensions as in statement 25, then set the DIM for each variable to the value of W. Also, on other computers you may need to enclose all your data entries within quotation marks.

Line 65 is a check to be sure the menu as described will indeed fit on the screen. The programs for each computer use REM statements to explain important steps. These are only included for your information, and do not have to be typed in as part of the program. Notice that the lines that change for the different computers are lines 10, 20, 30, 95, and 140–195.

By following the programs, you should be able to make suitable changes to run the program on your system if it is different. Try changing your menu and some of the program parameters, such as number of columns, number of blank rows between column entries, starting row or column position on the screen. You should get a feel for how flexible this program can be.

In the next issue we'll cover the selection process in the program. Will selected entries be retrieved from DATA lists, subscripted variables, memory blocks, or from the screen itself? We will also need to look ahead at the possibility of a dynamic menu and how multiple menus can be entered without disturbing the flow of the program. Let us know if you have any special ideas you'd like developed in this program, and we'll try to incorporate them as we go along.

Delmarva Computer Club
P.O. Box 36
Wallops Island, VA 23337

Program 1.

5 REM EXAMPLE 8A) PET COMPUTER
10 PRINT CHR$(147) ; : REM CLEAR TEXT SCREEN
20 W = 40 : RM = 9 : BR = 1 : CM = 7 : BC = 1 : RI = 2 : SR = 3 : SC = 1 : REM SET MENU PARAMETERS
25 DIM S(CM), L(CM) : S(1) = SC
30 DATA 7, 4, 4, 4, 5, 3, 6 : REM COLUMN WIDTHS
35 IF CM = 1 THEN 50
38 REM CALCULATE STARTING POSITION OF EACH COLUMN
40 FOR I = 2 TO CM : READ L(I - 1) : S(I) = S(I - 1) + L(I - 1) + BC : NEXT I : READ L(CM)
50 IF SR = 1 THEN 70
60 FOR X = 1 TO SR - 1 : PRINT : NEXT X : REM POSITION CURSOR TO 1ST ROW OF MENU
65 LP = S(CM) + L(CM) - 1 : IF LP > W THEN 200
70 TP = 0 : FOR R = 1 TO RM : F0R C = 1 TO CM : READ M$
75 P = S(C) - 1 + TP
80 PRINT TAB(P) ; M$ ; : NEXT C
90 IF S(CM) + LEN(M$) - 1 < KW THEN PRINT : GOTO 100 : REM WRAPAROUND ADVANCES A LINE
95 IF BR = 0 THEN TP = TP + W : IF TP > 87 THEN TP = 0 : REM UPDATE TAB IF LINE ENDS W/NO ~ LF
100 IF BR = 0 THEN 120
110 FOR B = 1 TO BR : PRINT : NEXT B : REM SKIP BLANK ROWS BETWN COLUMN ENTRIES
120 NEXT R
130 GOTO 130 : REM DISPLAY ISN'T DISTURBED UNTIL USER BREAKS PROGRAM
139 REM ENTER DATA BY ROWS
140 DATA DOCTOR, I, IS, HAVE, COME, SEE, INGEDS
145 DATA TEACHER, YOU, ARE, HAS, BATH, EAT, " AOTFR"
150 DATA WILL, WE, GO, GOOD, DRINK, AND, .ULHCP
155 DATA HOW, DO, CAN, BAD, SLEEP, IN, ?MYWKB
160 DATA WHO, GET, AM, DID, BED, OUT, ",VJQZX"
165 DATA WHAT, MOM, WANT, HOT, RADIO, TV, " ; $ %()’"
170 DATA WHERE, DAD, TO, COLD, ROOM, YES, "!*/^ = :"
175 DATA WHEN, JOHN, TIME, THE, FOOD, NO, -01234
180 DATA WHY, RICK, DAY, CALL, PLAY, AT, + 56789
200 PRINT "MENU SIZE ERROR!" : END

Program 2.

5 REM EXAMPLE 8B) VIC COMPUTER
10 PRINT CHR$(147) ; : REM CLEAR TEXT SCREEN
20 W = 22 : RM = 6 : BR = 1 : CM = 4 : BC = 1 : RI = 2 : SR = 3 : SC = 1 : REM SET MENU PARAMETERS
25 DIM S(CM), L(CM) : S(1) = SC
30 DATA 3, 3, 5, 8 : REM COLUMN WIDTHS
35 IF CM = 1 THEN 50
38 REM CALCULATE STARTING POSITION OF EACH COLUMN
40 FOR I = 2 TO CM : READ L(I - 1) : S(I) = S(I - 1) + L(I - 1) + BC : NEXT I : READ L(CM)
50 IF SR = 1 THEN 70
60 FOR X = 1 TO SR - 1 : PRINT : NEXT X : REM POSITION CURSOR TO 1ST ROW OF MENU
65 LP = S(CM) + L(CM) - 1 : IF LP > W THEN 200
70 TP = 0 : FOR R = l TO RM : FOR C = 1 TO CM : READ M$
75 P = S(C) - 1 + TP
80 PRINT TAB(P) ; M$ ; : NEXT C
90 IF S(CM) + LEN(M$) - 1 < W THEN PRINT : GOTO 100 : REM WRAPAROUND ADVANCES A LINE
95 IF BR = 0 THEN TP = TP + W : IF TP > 87 THEN TP = 0 : REM UPDATE TAB IF LINE ENDS W/NO ~ LF
100 IF BR = 0 THEN 120
110 FOR B = 1 TO BR : PRINT : NEXT B : REM SKIP BLANK ROWS BETWN COLUMN ENTRIES
120 NEXT R
130 GOTO 130 : REM DISPLAY ISN'T DISTURBED UNTIL USER BREAKS PROGRAM
139 REM ENTER DATA BY ROWS
140 DATA DR., IS, COLD, INGEDS12
145 DATA I, AM, WHEN, " AOTFR34"
150 DATA YOU, ARE, DRINK,.ULHCP56
155 DATA MOM, EAT, WANT, ?MYWKB78
160 DATA DAD, NO, TIME, ",VJQZX90"
165 DATA HOT, YES, SLEEP, ";$%()’ + - "
200 PRINT "MENU SIZE ERROR!" : END

Program 3.

5 REM EXAMPLE 8C) APPLE II COMPUTER
10 TEXT : HOME : REM CLEAR TEXT SCREEN
20 W = 40 : RM = 8 : BR = 1 : CM = 7 : BC = 1 : RI = 2 : SR = 3 : SC = 1 : REM SET MENU PARAMETERS
25 DIM S(CM), L(CM) : S(1) = SC
30 DATA 7, 4, 4, 4, 5, 3, 6 : REM COLUMN WIDTHS
35 IF CM = 1 THEN 50
38 REM CALCULATE STARTING POSITION OF EACH COLUMN
40 FOR I = 2 TO CM : READ L(I - 1) : S(I) = S(I - 1) + L (I - 1) + BC : NEXT I : READ L(CM)
50 IF SR = 1 THEN 70
60 FOR X = 1 TO SR - 1 : PRINT : NEXT X : REM POSITION CURSOR TO 1ST ROW OF MENU
65 LP = S(CM)+L(CM)-1 : IF LP>W THEN 200
70 TP = 0 : FOR R=1 TO RM : FOR C=1 TO CM : READ M$
75 P = S(C)-1 + TP
80 PRINT TAB(P);M$; : NEXT C
90 IF S(CM)+LEN(M$)-1<W THEN PRINT : GOTO 100 : REM WRAPAROUND ADVANCES A LINE
95 IF BR = 0 THEN TP = TP+W : IF TP>87 THEN TP = 0 : REM UPDATE TAB IF LINE ENDS W/NO ~ LF
100 IF BR = 0 THEN 120
110 FOR B = 1 TO BR : PRINT : NEXT B : REM SKIP BLANK ROWS BETWEEN COLUMN ENTRIES
120 NEXT R
130 GOTO 130 : REM DISPLAY ISN'T DISTURBED UNTIL USER BREAKS PROGRAM
139 REM ENTER DATA BY ROWS
140 DATA DOCTOR, I, IS, HAVE, COME, SEE, INGEDS
145 DATA TEACHER, YOU, ARE, HAS, BATH, EAT,"AOTFR"
150 DATA WILL, WE, GO, GOOD, DRINK, AND,. ULHCP
155 DATA HOW, DO, CAN, BAD, SLEEP, IN,? MYWKB
160 DATA WHO, GET, AM, DID, BED, OUT, ",VJQZX"
165 DATA WHAT, MOM, WANT, HOT, RADIO, TV,";$%()' "
170 DATA WHERE, DAD, TO, COLD, ROOM, YES, "!*/^= :"
175 DATA WHEN, HELP, TIME, CALL, FOOD, NO, +56789
200 PRINT "MENU SIZE ERROR!" : END