APPROVED
U1.00031-01 34 02-LU
SOFTWARE
COMPUTER EDUCATIONAL COMPLEX
"ELECTRONICS MS 0202"
BASIC
OPERATOR'S MANUAL
U1.00031-01 34 02
SHEETS 22
1987
LETTERS 0 - 2 -
U1.00031-01 34 02
ANNOTATION
This document is the manual of the
microcomputer operator "Electronics MS 0511" for working with the BASIC system. In
this system, user programs are
compiled before execution . This allows better use of the performance of
micro-computers than in BASIC systems based on interpreters.
The system has a large number of convenient tools for
entering and editing program texts , a wide range of commands
for downloading and running programs. The document describes all of these
means, instructions are given for using the keyboard of a microcomputer. The
appendix provides a complete list of error messages.
- 3 -
U1.00031-01 34 02
CONTENT
1. PURPOSE OF THE PROGRAM AND CONDITIONS OF ITS PERFORMANCE .............. 4
2. PERFORMANCE OF THE PROGRAM ............. ......................... 4
2.1. BASIC system start .................................... 4
2.2. Key assignment of micro-computers ............................ 5
2.2.1. Alphanumeric and register keys ............. 5
2.2.2. Editing and control keys .................. 6
2.3. Entering programs. Basic instructions ..................... 7
2.4. Editing ......................................... 8
2.4.1. Correction of errors in the input line ................. 9
2.4.2. Control and editing codes ..................... 9
2.4.3. Editing program lines ....................... 12
2.4.4. Editing Commands ............................... 13
2.4.5. An example of editing a program ...................... 14
3. STORAGE OF PROGRAMS ON MAGNETIC TAPE OR CENTRAL COMPUTER DISK
....................................... .... 15
3.1. File Formats ......................................... 15
3.2. Basic system commands ............................... 15
4. MESSAGES TO THE OPERATOR ....................................... 17
4.1. Message format ....................................... 17
4.2. Errors ................................................. 17
ATTACHMENT. ERROR MESSAGES ..................... ......... 18
- 4 -
U1.00031-01 34 02
1. APPOINTMENT OF THE PROGRAM AND CONDITIONS OF ITS IMPLEMENTATION
The BASIC system for micro-computers "Electronics MS 0511"
is a single set of programs that allows you to
use the computer to create and run programs in
the BASIC programming language in the human-computer dialogue mode. It is
intended both for the direct execution of commands and
language operators, and for the execution of a BASIC program with
its previous compilation. The system has ample
opportunities for editing and debugging programs.
To work with the BASIC system, a microcomputer
Electronics Electronics 0511 is required , which is connected to the local network. A household television receiver is connected to the microcomputer itself
.
The main way to store texts of user programs
and data is to transfer them over a network to a central computer, where they are
written to disk. In addition, it is possible to connect directly to the microcomputer of the household cassette recorder for recording programs and data on magnetic tape.
A printer device is also provided for
printing texts and / or program results.
2. PROGRAM IMPLEMENTATION
2.1. BASIC system start
The BASIC system is loaded onto the Electronics MS 0511 microcomputer
connected to the local network according to document
U1.00031-01 34 03 Local Area Network. Operator's manual.
A sign of normal operation of the system is the
following actions:
cleaning the TV screen, forming a service line on the television
screen and displaying the initial message:
LAT
BASIC UK-NTs (Voronezh State University, 1987.07.08)
Ok
The output " Ok " means the system is ready for operation and waiting for the
input of operator commands. The service line is a hint to the
user about the current operating mode of the keyboard and screen.
- 5 -
U1.00031-01 34 02
2.2. Microcomputer Key Assignment
The microcomputer keyboard is used to enter program lines,
commands, and other control information, according to which the
BASIC system performs certain actions. All keys according to their
functionality are divided into four groups:
1) alphanumeric;
2) register;
3) editing;
4) managers.
2.2.1. Alphanumeric and register keys
Alphanumeric keys are intended for typing texts of
commands and language operators, as well as data for BASIC programs. In
this group also includes some editing and control keys screen.
The transition from the input mode of the Latin font to the input mode of the
Russian font or vice versa is carried out by simultaneously
pressing the keys < ALF > and < FIX > . If you press only the < ALF > key, the
transition from one mode to another will be carried out only until
this key is released.
The transition from uppercase to lowercase when
working with both fonts occurs when you press the < HP > key until
it is released. To fix one of these modes, you must
simultaneously press the two keys < HP > and < FIX > . The inclusion
of the input modes in Russian and Latin fonts is indicated by the
corresponding inscription "RUS" or "LAT" in the service line.
To receive the characters " [ " , "]", "\", "@" and the logical negation sign , the LAT-TITLE mode is required. In the LAT-STR mode, these keys give out the right and left curly brackets, a vertical line, and the signs of low stress and overline.
The key < ZABO > in the Russian register gives the upper or lower case
"SOLID SIGN" of the Russian alphabet, in the LAT-ZAGL and LAT-STR mode
- the editing code is "ZABO".
The bottom wide key means a space.
When you press the keys with numbers and other service
symbols, for all fixed modes, only the
upper symbol is always displayed. To get the lower character, you need to press
the register key < НР > and, without releasing it, press the desired key with a special symbol
.
To switch to the half-graphic character input mode,
press the < GRAPH > key . To fix this mode,
press the < GRAPH > and < FIX > keys simultaneously . To exit the
half - graph mode , press the < GRAPH >, < FIX > keys again .
The resulting semi-graphic symbols are mainly used
for constructing various tables.
- 6 -
U1.00031-01 34 02
2.2.2. Editing and control keys
Below is a table of all the editing and control
keys with a brief description of the actions taken by the
BASIC system text editor.
For some keys, the logical names assigned to them are indicated
.
TABLE 1
+ ---------------- + ------------------ + ------------- ---------- +
! KEY! LOGIC NAME! APPOINTMENT!
+ ---------------- + ------------------ + ------------- ---------- +
! /! _____ ! ! Delete character on the left!
! < _____ ! ! Slaughter! from cursor with shift!
! \! ! ! the rest of the line!
! ! ! !
! ! ! !
! / ! _____ ! ! !
! < _____ ! ! ! Left cursor ! ! \! ! ! ! ! ! ! ! ! . ! ! ! ! / \ ! ! ! ! / _ _ \ ! ! Cursor up ! ! ! ! ! ! ! ! ! _ ! ! ! ! ! ! ! ! ! ! ! ! ! _____ ! \ ! ! ! ! ! _____ > ! ! Right cursor ! ! ! / ! ! ! ! ! ! ! ! _ ! ! ! ! ! ! ! ! ! ! _ ! ! _ ! ! Cursor down ! ! \ / ! ! ! ! \ / ! ! ! ! . ! ! ! ! ! ! ! ! ! ! ! ! . ! ! ! ! / \ ! Lower case ! Go to the bottom ! ! / \ ! < N.R. > ! register ! ! - - ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! - - ! ! ! ! \ / ! ! ! ! \ / ! ! ! ! . ! ! ! ! ! ! ! -------------------------------------------------- -----------
- 7 -
U1.00031-01 34 02
CONTINUED TABLE. one
+ ---------------- + ------------------ + ------------- ---------- +
! KEY! LOGIC NAME! APPOINTMENT!
+ ---------------- + -------- ---------- + ------------- ---------- +
! ! ! !
! ! ! !
! - ! ! !
! ! ! ! ENTER ! Close the current one ! ! /! ___ ! ! ! ! line, go to ! ! < ______ ! ! ! next one ! ! \! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! < SU > ! ! Used in com ! ! ! ! binations with others ! ! ! ! keys (see below) ! ! ! ! ! ! ! ! ! ! ! ! ! ! < RESET > ! ! Screen Reset ! ! ! ! ! ! ! ! ! ---- ---------------------------------------------- -----------
2.3. Entering programs. Basic instructions.
The program text can be entered immediately after
the prompt “ Ok ” appears on the screen , which means that the computer is
waiting for operator instructions. In this mode, the system is
from the appearance of the letters " Ok " on the screen until the RUN command is entered .
Each program line begins with a line number.
the minimum line number is 0, the maximum is 65535. The line number is
followed by the operator keyword and its parameters.
Entering a line is done by pressing the < Enter > key .
The entire logical line is entered, regardless of the fact that it can
occupy several physical lines. The maximum length of an input
logical line is 255 characters, including the line number.
The line number is the only sign that
program lines differ from lines intended for direct
execution. This means that if the line number in
the instruction entered by the operator is not specified, then it is executed immediately
after entering it. If a line number is specified, the line is remembered as
one of the program lines.
When entering program lines, the following situations are possible:
- a new line is added to the program every time a
non-empty line with a valid number is entered and the
program does not yet have a line with a number identical to the
input;
- an existing program line is replaced by a new one
if the number of a non-empty input line matches the number of an
existing line in the program;
- 8 -
U1.00031-01 34 02
- an existing line is deleted from the program if
only the number of this line is entered without a single
character following it;
- no actions are taken by the system when
an empty line is entered without a number or with a number that does not
coincide with any number before the entered
program lines;
- an error message 2 is issued if a
line number is specified that exceeds the permissible limit, an
error message 25 if more than 255 characters are entered, or
an error message 7 when there is not enough space in the computer memory
to store the input line.
In the latter case, the entered line is not
added to the program , and if it was an attempt to replace any
line, then its old text is lost.
Program lines can be entered in any order,
but they are always executed in ascending order of line numbers.
It is recommended to number lines with a certain step, for example,
10, 20, 30, etc. .. This will add new lines to the program if necessary
.
If, without turning off the power of the computer, the texts of several
programs are entered , before entering each new program, you must enter
the NEW command to erase the old one. Immediately after turning on the power, a
command is not necessary.
2.4. Editing
Working with computers in interactive mode is often accompanied by
numerous errors when entering from the keyboard. Each programmer also rarely avoids syntax errors when writing statements and, especially, logical errors in algorithms implemented in programs. Therefore, in all programming systems , tools for editing programs are provided.
In the BASIC system, there is a built-in text editor
that essentially organizes the entire human dialogue with the computer: entering
and editing programs, organizing the execution of commands and
operators in direct mode, downloading and running programs.
Conventionally, the following editing cases can be distinguished:
- correction of errors in the input line;
- editing program lines;
- editing using commands.
- 9 -
U1 .00031-01 34 02
2.4.1. Correction of errors in the input line
The BASIC system editor provides full screen
editing of any logical line, but without going beyond it
. If a typo is found in the input line, you can use
the cursor keys to move it to the desired
line character, and then apply any of the following measures:
- print a new character in the place entered earlier;
- delete the character to the left of the cursor;
- delete the character located at the cursor position;
- delete all characters, starting from the cursor position to the
end of the logical line;
- expand the line to insert new characters.
In addition, you can opt out of the input line by pressing
the key combination < SU > and < the C > , or < SU > and < the U > (sm.p.2.4.2).
All of these actions can be performed with the
edit keys , but only until a line is entered (pressing the < Enter > key ). The position of the cursor in the input line during input does not matter.
2.4.2. Control and Editing Codes
The table below shows all control and editing
codes obtained by simultaneously pressing the key < GC > and
at any alphanumeric key, indicating the action,
produced by these codes.
- 10 -
U1.00031-01 34 02
TABLE 2
-------------------------------------------------- -----------------
EIGHT. KEY APPOINTMENT
CODE < SU > +
------------------------------------------- ------------------------
000 @ DELAY screen output
00 1 A STEP 00 2 B IGNORED 00 3 C FAULT FROM input line 00 4 D IGNORED 00 5 E IGNORED 00 6 F IGNORED 00 7 G CALL 0 10 H cursor to upper left corner SCREEN 0 11 I TAB 0 12 J LINE FEED 0 13 K RESET END LINE 0 14 L CLEAR SCREEN 0 15 M ENTER 0 16 N REGISTER RUSSIAN ABC 0 17 O LATIN ALPHABETUS REGISTER 0 20 P IGNORED ---------------------------------------- --------- ------------------
- 11 -
U1.00031-01 34 02
CONTINUED TABLE 2
-------------------------------------------------- -----------------
EIGHT. KEY APPOINTMENT
CODE < SU > +
------------------------------------------- ------------------------
021 Q IGNORED 022 R IGNORED 023 S extendable LINE 02 4 T Sdvizhkov LINE 025 U CANCELLATION OF LINE 026 V IGNORED 027 W IGNORED 030 X IGNORED 031 Y IGNORED 032 Z IGNORED 033 [ IGNORED 034 \ IGNORED 035 ] IGNORED 036 ^ IGNORED 037 _ IGNORED -------------------------- -----------------------------------------
DISPLAY DELAY
- when you press the < CU > and <@> keys , a
waiting cycle for entering the next character is organized . This leads to the
suspension of any other computer actions (output to the
screen, calculations, etc.). Continuation of work - pressing
any key. There are special cases when the keyboard is
locked (interrupts from it are not processed) and it is impossible
to enter SU / @ . This happens, for example, when
working with a tape recorder. When outputting, the code is ignored.
DENIAL OF INPUT LINE
- pressing the < CU > and < C > keys interrupts the input of the current line, displays the prompt " Ok ", and puts the computer into standby mode for entering a new line. The input line is not remembered or executed (if it was a command). The output is ignored.
CALL
- 12 -
U1.00031-01 34 02
- a sound signal similar to that obtained by pressing
any key.
LINE SHIFT
- the character is deleted at the cursor position with the
shift of the entire remaining part of the logical line by one
character to the left. Characters from the leftmost position go
to the rightmost position of the previous line. With the withdrawal
, a similar closure is made within the physical
line. A space appears at the end of the line.
LINE SPLIT
- shift of all characters of the logical line by one position
to the right, starting from the cursor position. The cursor position is
released. The rightmost characters go to the
leftmost position of the next physical line. When
outputting, the shift is performed within the physical line.
The rightmost character is lost.
RESET LINE
- Deletion of all characters, starting from the cursor position to the
end of the logical line. When output is valid within the
physical line.
2.4.3. Editing program lines
To edit the text of any program line,
you need to use the editing keys to move the cursor to the
line to be corrected and then edit it in the same way as the
input line (see section 2.4.1). After correcting the text of the
program line, it is necessary to re-enter it by pressing
the < Enter > key . If the line with the error is not on the screen, you can
display it using the command:
LIST < LINE NUMBER > < INPUT > .
For editing, you can display the group of lines on the screen with the
command:
LIST NM < ENTER >
where: N is the number of the initial line; M is the number of the ending line.
But it must be borne in mind that after finishing
editing each line, you must press the < Enter > key ,
re-entering this line.
- 13 -
U1.00031-01 34 02
2.4.4. Editing commands
In the BASIC system, there are a number of special commands that
facilitate the entry and editing of programs. Their list is given in
table. 3.
TABLE 3
-------------------------------------------------- ----------
TEAM ACTION
-------------------------------------- ---------------------- LIST [ N ] [- [ M ]] DISPLAYING THE LINE OF THE PROGRAM ON THE SCREEN STARTING FROM NUMBER N TO NUMBER M DELETE [ N ] [ - [ M ]] ERASE LINE, LINES OR WIDE APPLICATION NEW removes the entire program in BASIC AUTO [ N ] [, M ] MODE automatic numbering, FROM N increments M RENUM [ N [, M ] [, L ]] renumbering LINE: NUMBER M IS REPLACED BY N AND NEXT WITH STEP L -------------------------------------- ----------------------
In the LIST , DELETE , AUTO commands , instead of line numbers, you can specify the current line.
The RENUM command is convenient to use in cases where the lines are tightly numbered and it is impossible to insert new lines.
The AUTO command, when calculating the next number that matches
the number of an existing line, displays it on the screen and
allows editing (including line number). Therefore, the command is
conveniently used for both input and editing
programs. The AUTO mode is exited by pressing the < СУ > and < C > keys, or by pressing the < STOP > key .
A complete description of the editing commands can be found in
document U1.00031-01 35 01 BASIC. Description of the language.
- 14 -
U1.00031-01 34 02
2.4.5. Program editing example
To replace a string
40 PRINT A
You can enter the string again, for example:
40 PRINT B
But it’s more convenient to use the command:
LIST 40 < ENTER >
When this command is executed, a line with the
specified number is displayed on the screen and now it can be fixed using keys
and editing commands:
such as keys:
<<->, < BOUND >, <B> and < INTER >
To delete a line, you can enter the directive:
20 < ENTER >
For the same purpose, you can use the command:
DELETE 20 < ENTER >
To delete a fragment of the program, enter the command:
DELETE 50-100 < INPUT >
The entire program is deleted when you enter the following commands:
DELETE or NEW
NOTE. Before you start creating
programs in the BASIC system for micro-computers "Electronics MS 0511",
it is necessary to study practical means of editing the text of the
program. This will significantly speed up the work with the program text.
- 15 -
U1.00031-01 34 02
3. STORAGE OF SOFTWARE ON MAGNETIC TAPE OR CENTRAL COMPUTER DISK
3.1. File formats
The BASIC system allows working with three types of files:
- information in KOI-7 codes in lines of no more than 255 characters
per line;
- BASIC programs in the internal code of the system;
- files with binary information.
Files of the first type are by default of the ASC type if they are
created using the SAVE command (see section 3.2), or the DAT type if
they are created by the user using the BASIC system. Files of the
second type are COD by default , while the third are BIN . There are also special commands for working
with files such as BIN and COD (see section 3.2).
3.2. Basic system commands
When exchanging information, standard BASIC system commands are
used:
- LOAD and SAVE - for receiving and transmitting BASIC system programs
in text format;
- CLOAD and CSAVE - for receiving and transmitting programs in the internal format of the BASIC system;
- BLOAD and BSAVE - for the exchange of binary information;
- OPEN , PRINT #, INPUT # and CLOSE - for data exchange.
These commands can be used to exchange information
between a microcomputer and a tape recorder connected to it, or over a
local area network with a central computer. But when referring to the central
microcomputer, and more precisely to the serial I / O device,
in contrast to the magnetic tape access, the
device name " TT :" must be indicated in front of the file name . Also in the OPEN team
you can specify the file type if it is different from DAT (you cannot
specify the COD or BIN types , since they are used especially).
- 16 -
U1.00031-01 34 02
Examples:
SAVE "TT: PROG1" < Enter >
Ok
The BASIC program text will be written to the PROG 1. ASC file on
the central computer disk.
CLOAD "TT: PROG2" < Enter >
PROG2 .COD
Ok
The PROG 2. COD file from the central computer disk will be transferred to the
Electronics MS 0511 microcomputer as the BASIC program in the
internal format.
10 OPEN "TT: CTLG.DIR" FOR INPUT
20 IF EOF THEN 60
30 INPUT # A¤
40 PRINT A¤
50 GOTO 20
60 CLOSE
This program prints
a CTLG text file on the screen of a microcomputer "Electronics MS 0511" . DIR .
NOTE. Between OPEN and CLOSE, the communication channel will be
busy, so you should try to keep this interval
as short as possible.
A full description of the format of commands and the actions they cause
can be found in document U1.00031-01 35 01 BASIC. Description of the language.
- 17 -
U1.00031-01 34 02
4. MESSAGES TO THE OPERATOR
4.1. Message Formats
BASIC checks the program operators and input
data and displays a message about each detected error
. error messages have the following format:
< ERROR > in the line YYYYY ,
where < ERROR > is the abbreviated name of the error;
YYYYY - line number in which an error was detected.
In the case of syntax errors on the command line, as well as in
case of errors during its execution, the line number is not displayed.
When the STOP statement is executed or when the < STOP > key is pressed, the
message appears:
Stop on the line YYYYY ,
where YYYYY is the line number running at this time.
4.2. Mistakes
Error codes and explanations are given in the appendix.
Errors can be divided into syntactic and occurring during
the execution of a program or command. If at least
one syntax error is detected, the program does not
start. If an error occurs during the
execution of the program, the execution process is interrupted and the BASIC system is put into direct execution mode. In the latter case, it is possible to continue the program using the CONT or GOTO commands .
If any error is detected in the line of direct
execution, its processing also stops immediately and the system is
put into standby mode for entering the next instruction.
- 18 -
U1.00031-01 34 02
ATTACHMENT
ERROR MESSAGES
The appendix contains error codes, their abbreviated names and
descriptions.
1 NEXT without FOR
NEXT was not preceded by FOR, or the variable used in FOR does not match the variable used in NEXT .
2 Syntax error
Incorrect use of characters, for example, the number of
opening brackets does not match the number of
closing brackets , incorrect writing of statements or
their components, a
comma, etc.
3 RETURN without GOSUB
When RETURN was
executed , it was found that GOSUB was not executed .
4 run out of DATA
When executing the READ statement , it was found that the
list of DATA statements has been exhausted.
5 Incorrect function call
The error occurs in the following cases:
- negative index;
- invalid argument for LOG , SQR ;
- incorrect argument values for graphic
and other operators;
- USR function, undefined with DEFUSR , etc.
6 overflow
The result of the arithmetic operation is too large
in absolute value and cannot be written
in the format accepted for numbers in the BASIC
system. (In case of too small values, the
result is equal to zero and no errors are
generated).
7 memory overflow
The program does not fit in memory, or
too many nested FOR , GOSUB statements are used , too many variables, too
- 19 -
U1.00031-01 34 02
a lot of memory is required for an array or a region of
strings; the free region is too small for
generating the code of directly executed
operators.
8 Undefined line number
In the GOTO , GOSUB , the IF , the RESTORE , RENUM , the AUTO , the ON or DELETE used number nonexistent line .
9 Invalid index (outside)
A reference to an array element with an index that
goes beyond the dimension of the array, or an
incorrect number of indices is specified.
10 Redefining an array
An array is defined by two DIM statements ,
or an array is defined by a DIM statement after
the default dimension of 10 has been set for this array
.
11 Division by zero
The expression encountered division by zero,
or zero was raised to a negative degree.
12 Unable to execute
Invalid statement in direct execution mode
.
13 Type error
An attempt to assign a numerical
value to a symbol variable or vice versa; a function using a
numeric argument is passed a character argument
or vice versa.
14 Not enough space for character variables
Exceeded the amount of remaining memory that
was allocated to the default character variable
or CLEAR statement .
15 Line too long
An attempt was made to create a string longer
than 255 characters.
16 Undefined
17 Continuation impossible
An attempt was made to continue executing a
program that:
- 20 -
U1.00031-01 34 02
1. It was interrupted due to an error;
2. Has been changed;
3. Does not exist.
18 User function not defined
An attempt to access the FN function before it is defined by
the DEFFN operator .
19 I / O device error
It occurs when the input / output device.
20 Undefined
21 Undefined
22 Undefined
23 Undefined
24 Missing operand
The expression contains an operator without an operand,
or there are no required parameters in the operator (command)
.
25 Input buffer overflow
An attempt was made to enter a string longer
than 255 characters.
26-51 Not determined
52 Invalid file number
An operator or command refers to a file that
is not open or opened for another purpose
(not for writing or reading).
53 Not defined
54 File is already open
The OPEN statement is applied to a file that is
already open.
55 End of file
An attempt to read the end of file entry
by the INPUT # statement was performed after
all the data from the file was entered, or applied
- 21 -
U1.00031-01 34 02
For an empty file. To avoid this error,
to detect the end of the file, use function
tion the EOF .
56 Invalid file name
The LOAD , SAVE, or OPEN statements used the wrong file name (the file name consists of too many characters).
57 String without number
The command is directly executed in the program
while downloading the KOI-7 file. Download is interrupted
.
58 Undefined
59 File not open
An I / O statement is applied to a file that has
not been opened.
60 Not determined
61 Undefined
62 Invalid device name
An invalid device name was used
(missing in this version of the language).
- 22 -
U1.00031-01 34 02
-------------------------------------------------- ----------------
! CHANGE REGISTRATION SHEET!
! ------------------------------------------------- -----------------!
! ! NUMBERS OF SHEETS (PAGES)! TOTAL ! ! INCOMING! ! !
! ! -------------------------! SHEETS! N ! N BACK! SUBP! YES!
! ! MEASURES! REPLACEMENT! NEW! ANNULES -! (PAGES)! DOCUMENT-! DIVING-! ! TA!
! ISM! NEN! NEN! ! ROWAN-! IN THE DOCUMENT. ! TA. ! GO DOCUMENT! ! !
! ! NEW! NEW! ! NEW! ! ! AND DATE! ! !
! ---! -----! -----! -----! -------! ---------! --------! ---------! ----! -!
! ! ! ! ! ! ! ! ! ! !
! ---! -----! -----! -----! -------! ---------! --------! ---------! ----! -!
! ! ! ! ! ! ! ! ! ! !
! ---! -----! -----! -----! -------! ---------! --------! ---------! ----! -!
! ! ! ! ! ! ! ! ! ! !
! ---! -----! -----! -----! -------! ---------! --------! ---------! ----! -!
! ! ! ! ! ! ! ! ! ! !
! ---! -----! -----! -----! -------! ---------! --------! ---------! ----! -!
! ! ! ! ! ! ! ! ! ! !
! ---! -----! -----! -----! -------! ---------! --------! ---------! ----! -!
! ! ! ! ! ! ! ! ! ! !
! ---! -----! -----! -----! -------! ---------! --------! ---------! ----! -!
! ! ! ! ! ! ! ! ! ! !
! ---! -----! -----! -----! -------! ---------! --------! ---------! ----! -!
! ! ! ! ! ! ! ! ! ! !
! ---! -----! -----! -----! -------! ---------! --------! ---------! ----! -!
! ! ! ! ! ! ! ! ! ! !
! ---! -----! -----! -----! -------! ---------! --------! ---------! ----! -!
! ! ! ! ! ! ! ! ! ! !
! ---! -----! -----! -----! -------! ---------! --------! ---------! ----! -!
! ! ! ! ! ! ! ! ! ! !
! ---! -----! -----! -----! -------! ---------! --------! ---------! ----! -!
! ! ! ! ! ! ! ! ! ! !
! ---! -----! -----! -----! -------! ---------! --------! ---------! ----! -!
! ! ! ! ! ! ! ! ! ! !
! ---! -----! -----! -----! -------! ---------! --------! ---------! ----! -!
! ! ! ! ! ! ! ! ! ! !
! ---! -----! -----! -----! -------! ---------! --------! ---------! ----! -!
! ! ! ! ! ! ! ! ! ! !
! ---! -----! -----! -----! -------! ---------! --------! ---------! ----! -!
! ! ! ! ! ! ! ! ! ! !
! ---! -----! -----! -----! -------! ---------! --------! ---------! ----! -!
! ! ! ! ! ! ! ! ! ! !
! ---! -----! -----! -----! -------! ---------! --------! ---------! ----! -!
! ! ! ! ! ! ! ! ! ! !
! ---! -----! -----! -----! -------! ---------! --------! ---------! ----! -!
! ! ! ! ! ! ! ! ! ! !
! ---! -----! -----! -----! -------! ---------! --------! ---------! ----! -!
! ! ! ! ! ! ! ! ! ! !
! ---! -----! -----! -----! -------! ---------! --------! ---------! ----! -!
! ! ! ! ! ! ! ! ! ! !
! ---! -----! -----! -----! -------! ---------! --------! ---------! ----! -!
! ! ! ! ! ! ! ! ! ! !
! ---! -----! -----! -----! -------! ---------! --------! ---------! ----! -!
! ! ! ! ! ! ! ! ! ! !
! ---! -----! -----! -----! -------! ---------! --------! ---------! ----! -!
! ! ! ! ! ! ! ! ! ! !
! ---! -----! -----! -----! -------! ---------! --------! ---------! ----! -!