home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Monster Media 1993 #2
/
Image.iso
/
wp
/
be310a.zip
/
BINGO.DOC
< prev
next >
Wrap
Text File
|
1993-08-01
|
355KB
|
8,777 lines
The Bingo Text Editor
A Shareware Product
Version 3.10
Reference Manual
Copyright 1989,1993
Christopher R. S. Schanck
June 1st, 1993
_______
____|__ | (R)
--| | |-------------------
| ____|__ | Association of
| | |_| Shareware
|__| o | Professionals
-----| | |---------------------
|___|___| MEMBER
Table of Contents
-----------------
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Philosophy . . . . . . . . . . . . . . . . . . . . . . . . . 2
The Association of Shareware Professionals . . . . . . . . . 3
The Shareware Concept and Registering . . . . . . . . . . . 4
Ordering Bingo . . . . . . . . . . . . . . . . . . . . . . . 5
Direct from Me . . . . . . . . . . . . . . . . . . . . 5
PsL Shareware Registration . . . . . . . . . . . . . . 5
Compuserve Online Registration . . . . . . . . . . . . 5
Things to Possibly Come . . . . . . . . . . . . . . . . . . 6
Support . . . . . . . . . . . . . . . . . . . . . . . . . . 7
US Mail Contact . . . . . . . . . . . . . . . . . . . . 7
CompuServe Contact . . . . . . . . . . . . . . . . . . 7
Internet Contact . . . . . . . . . . . . . . . . . . . 7
Getting the Latest Version . . . . . . . . . . . . . . . . . 8
Using this Manual . . . . . . . . . . . . . . . . . . . . . 9
Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Installing Bingo . . . . . . . . . . . . . . . . . . . . . . 10
BOPTS: The External Configuration Utility . . . . . . . . . 11
Number of Buckets and Bucket Size . . . . . . . . . . . 11
Chess Stack Size . . . . . . . . . . . . . . . . . . . 11
Chess Number of Variables . . . . . . . . . . . . . . . 11
Chess Number of Functions . . . . . . . . . . . . . . . 11
Scramble Registration Name . . . . . . . . . . . . . . 12
Bingo and Virtual Memory . . . . . . . . . . . . . . . . . . 13
Impact of Virtual Memory on Performance . . . . . . . . 13
KEYCFG: The Keyboard Configuration Program . . . . . . . . . 15
Key Names . . . . . . . . . . . . . . . . . . . . . . . 15
Section 1 -- Key Assignments . . . . . . . . . . . . . 17
'open_end' Key Identifier . . . . . . . . . . . . 19
'cur_file' Key Identifier . . . . . . . . . . . . 19
Using Chess functions . . . . . . . . . . . . . . 19
Section 2 - Chess Code . . . . . . . . . . . . . . . . 19
KEYCFG Command Line Options . . . . . . . . . . . . . . 19
The KEYINFO Key Information Utility . . . . . . . . . . . . 21
Starting Bingo . . . . . . . . . . . . . . . . . . . . . . . 22
The BINGO.INI file . . . . . . . . . . . . . . . . . . . . . 23
Bingo and Larger Screen Displays . . . . . . . . . . . . . . 26
Bingo's Menu System . . . . . . . . . . . . . . . . . . . . 27
Bingo's User Interface . . . . . . . . . . . . . . . . . . . 28
String Entry Boxes . . . . . . . . . . . . . . . . . . 28
Yes/No Boxes . . . . . . . . . . . . . . . . . . . . . 29
Non-Editable Display Boxes . . . . . . . . . . . . . . 29
List-Picking Boxes . . . . . . . . . . . . . . . . . . 29
Directory Lister . . . . . . . . . . . . . . . . . . . . . . 30
Bingo and File Names . . . . . . . . . . . . . . . . . . . . 31
The Status Line . . . . . . . . . . . . . . . . . . . . . . 32
Bingo and The Mouse . . . . . . . . . . . . . . . . . . . . 33
The Mouse Cursor . . . . . . . . . . . . . . . . . . . 33
The Mouse at the General Editing Level . . . . . . . . 33
The Mouse and The Menus . . . . . . . . . . . . . . . . 35
The Mouse and Dialogue Boxes . . . . . . . . . . . . . 36
String Entry Boxes . . . . . . . . . . . . . . . . 36
Yes/No Boxes . . . . . . . . . . . . . . . . . . . 36
Non-Editable Display Boxes . . . . . . . . . . . . 36
List-Picking Boxes . . . . . . . . . . . . . . . . 36
The Mouse and The ASCII Table . . . . . . . . . . . . . 37
Bingo Function Summary . . . . . . . . . . . . . . . . . . . . . 39
Configuring Bingo . . . . . . . . . . . . . . . . . . . . . 40
Function List . . . . . . . . . . . . . . . . . . . . . 40
Basic Editing . . . . . . . . . . . . . . . . . . . . . . . 49
The Destructive Backspace . . . . . . . . . . . . . . . 49
The 'Default_' Functions . . . . . . . . . . . . . . . 49
Function List . . . . . . . . . . . . . . . . . . . . . 49
Block Handling . . . . . . . . . . . . . . . . . . . . . . . 52
Marking . . . . . . . . . . . . . . . . . . . . . . . . 52
Operations on Blocks . . . . . . . . . . . . . . . . . 52
Named Buffers . . . . . . . . . . . . . . . . . . . . . 53
Emacs_yank . . . . . . . . . . . . . . . . . . . . . . 53
Function List . . . . . . . . . . . . . . . . . . . . . 53
Undo and Error Parsing . . . . . . . . . . . . . . . . . . . 57
Undo Capabilities . . . . . . . . . . . . . . . . . . . 57
Manipulating the Unkill Stack . . . . . . . . . . . . . 58
Error Parsing . . . . . . . . . . . . . . . . . . . . . 58
Error Parsing Method . . . . . . . . . . . . . . . 58
Function List . . . . . . . . . . . . . . . . . . . . . 59
File Handling . . . . . . . . . . . . . . . . . . . . . . . 61
Function List . . . . . . . . . . . . . . . . . . . . . 61
Info . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
Function List . . . . . . . . . . . . . . . . . . . . . 64
Macros . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
Macro Space . . . . . . . . . . . . . . . . . . . . . . 65
Defining Macros . . . . . . . . . . . . . . . . . . . . 65
Ending Macro Definition . . . . . . . . . . . . . . . . 65
Saving Macros . . . . . . . . . . . . . . . . . . . . . 65
Saving the Entire Key Set . . . . . . . . . . . . . . . 66
Executing a Macro File . . . . . . . . . . . . . . . . 66
Function List . . . . . . . . . . . . . . . . . . . . . 66
Navigation . . . . . . . . . . . . . . . . . . . . . . . . . 68
Function List . . . . . . . . . . . . . . . . . . . . . 68
System Operations . . . . . . . . . . . . . . . . . . . . . 72
Simple Execution and Shelling . . . . . . . . . . . . . 72
Swap Execution and Shelling . . . . . . . . . . . . . . 72
Function List . . . . . . . . . . . . . . . . . . . . . 72
Printing . . . . . . . . . . . . . . . . . . . . . . . . . . 74
Function List . . . . . . . . . . . . . . . . . . . . . 74
Searching . . . . . . . . . . . . . . . . . . . . . . . . . 75
Regular Expression Search and Replace Examples . . . . 76
Incremental Searching . . . . . . . . . . . . . . . . . 77
Function List . . . . . . . . . . . . . . . . . . . . . 77
Utilities . . . . . . . . . . . . . . . . . . . . . . . . . 80
Function List . . . . . . . . . . . . . . . . . . . . . 80
Windows . . . . . . . . . . . . . . . . . . . . . . . . . . 83
Window_vertical . . . . . . . . . . . . . . . . . . . . 83
Window_one and Window_zoom . . . . . . . . . . . . . . 83
Window_max . . . . . . . . . . . . . . . . . . . . . . 83
Function List . . . . . . . . . . . . . . . . . . . . . 83
Extra Functions . . . . . . . . . . . . . . . . . . . . . . 85
Pick and Exec . . . . . . . . . . . . . . . . . . . . . 85
Repeat_last . . . . . . . . . . . . . . . . . . . . . . 85
Box Draw Mode . . . . . . . . . . . . . . . . . . . . . 85
Cmd_line . . . . . . . . . . . . . . . . . . . . . . . 86
Function List . . . . . . . . . . . . . . . . . . . . . 88
Chess: Bingo's Extension Language . . . . . . . . . . . . . . . . 90
Introduction . . . . . . . . . . . . . . . . . . . . . . . . 90
Things to Possibly Come . . . . . . . . . . . . . . . . . . 91
The Body of a Chess Program . . . . . . . . . . . . . . . . 92
Variables and Constants and Comments . . . . . . . . . . . . 93
Integers and Characters: . . . . . . . . . . . . . . . 93
Constants: . . . . . . . . . . . . . . . . . . . . . . 93
Comments: . . . . . . . . . . . . . . . . . . . . . . . 94
Arrays and Pointers . . . . . . . . . . . . . . . . . . . . 95
Arrays: . . . . . . . . . . . . . . . . . . . . . . . . 95
Pointers: . . . . . . . . . . . . . . . . . . . . . . . 95
Operators and Expressions . . . . . . . . . . . . . . . . . 98
Operators . . . . . . . . . . . . . . . . . . . . . . . 98
Expressions . . . . . . . . . . . . . . . . . . . . . . 99
Program Statements . . . . . . . . . . . . . . . . . . . . . 100
IF . . . . . . . . . . . . . . . . . . . . . . . . . . 100
IF-ELSE . . . . . . . . . . . . . . . . . . . . . . . . 100
WHILE . . . . . . . . . . . . . . . . . . . . . . . . . 101
DO ... WHILE . . . . . . . . . . . . . . . . . . . . . 101
RETURN . . . . . . . . . . . . . . . . . . . . . . . . 101
BREAK . . . . . . . . . . . . . . . . . . . . . . . . . 102
Compound Statements . . . . . . . . . . . . . . . . . . 102
User Functions . . . . . . . . . . . . . . . . . . . . . . . 103
An Example Chess Program . . . . . . . . . . . . . . . 103
Declaration . . . . . . . . . . . . . . . . . . . . . . 103
Variable Scope . . . . . . . . . . . . . . . . . . . . 105
The Rules of Scoping . . . . . . . . . . . . . . . . . 105
Library Functions . . . . . . . . . . . . . . . . . . . . . 106
Using Chess From Within Bingo . . . . . . . . . . . . . . . . . . 107
Chess Code in a *.CFG File . . . . . . . . . . . . . . . . . 107
Attaching Chess Functions to Keystrokes . . . . . . . . . . 108
The Chess Command Line in Bingo . . . . . . . . . . . . . . 108
Chess Program Files . . . . . . . . . . . . . . . . . . . . 109
Attaching Chess Functions to Profile Files . . . . . . . . . 109
Running a Chess File on Start Up . . . . . . . . . . . . . . 110
Order of Execution on Start Up . . . . . . . . . . . . . . . 110
Debugging Chess Programs . . . . . . . . . . . . . . . . . . 110
Library Function Reference . . . . . . . . . . . . . . . . . . . 111
Bingo from within Chess . . . . . . . . . . . . . . . . . . 111
Ask . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
Atoi . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
B_cmd . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
Beep . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
Box_pick . . . . . . . . . . . . . . . . . . . . . . . . . . 112
Clear_regs . . . . . . . . . . . . . . . . . . . . . . . . . 113
Gen_interrupt . . . . . . . . . . . . . . . . . . . . . . . 113
Get_str . . . . . . . . . . . . . . . . . . . . . . . . . . 113
Get_yesno . . . . . . . . . . . . . . . . . . . . . . . . . 113
Get_char . . . . . . . . . . . . . . . . . . . . . . . . . . 114
Get_curr_text . . . . . . . . . . . . . . . . . . . . . . . 114
Get_fname . . . . . . . . . . . . . . . . . . . . . . . . . 114
Get_reg . . . . . . . . . . . . . . . . . . . . . . . . . . 114
Get_text . . . . . . . . . . . . . . . . . . . . . . . . . . 114
Getkey . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
Itoa . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
Key . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
Memcpy . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
Msg . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
Pick_file . . . . . . . . . . . . . . . . . . . . . . . . . 116
Put_char . . . . . . . . . . . . . . . . . . . . . . . . . . 116
Put_text . . . . . . . . . . . . . . . . . . . . . . . . . . 116
Put_text_curr . . . . . . . . . . . . . . . . . . . . . . . 116
Run . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
Set_display . . . . . . . . . . . . . . . . . . . . . . . . 117
Set_msg_wait . . . . . . . . . . . . . . . . . . . . . . . . 117
Set_recall . . . . . . . . . . . . . . . . . . . . . . . . . 117
Set_reg . . . . . . . . . . . . . . . . . . . . . . . . . . 118
Sformat . . . . . . . . . . . . . . . . . . . . . . . . . . 118
Str . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
Strcat . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
Strcmp . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
Strcpy . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
Strlen . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
Strndx . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
Update_display . . . . . . . . . . . . . . . . . . . . . . . 120
Valid_name . . . . . . . . . . . . . . . . . . . . . . . . . 120
"Ask" Arguments . . . . . . . . . . . . . . . . . . . . . . . . . 121
File_autoindent . . . . . . . . . . . . . . . . . . . . . . 121
File_bspace . . . . . . . . . . . . . . . . . . . . . . . . 121
File_changes . . . . . . . . . . . . . . . . . . . . . . . . 121
File_cmode . . . . . . . . . . . . . . . . . . . . . . . . . 121
File_column . . . . . . . . . . . . . . . . . . . . . . . . 122
File_dialogue . . . . . . . . . . . . . . . . . . . . . . . 122
File_matching . . . . . . . . . . . . . . . . . . . . . . . 122
File_name . . . . . . . . . . . . . . . . . . . . . . . . . 122
File_new . . . . . . . . . . . . . . . . . . . . . . . . . . 122
File_number . . . . . . . . . . . . . . . . . . . . . . . . 122
File_path . . . . . . . . . . . . . . . . . . . . . . . . . 123
File_rmargin . . . . . . . . . . . . . . . . . . . . . . . . 123
File_smart_tabs . . . . . . . . . . . . . . . . . . . . . . 123
File_tabsize . . . . . . . . . . . . . . . . . . . . . . . . 124
File_timed . . . . . . . . . . . . . . . . . . . . . . . . . 124
File_w_height . . . . . . . . . . . . . . . . . . . . . . . 124
File_w_left . . . . . . . . . . . . . . . . . . . . . . . . 124
File_w_top . . . . . . . . . . . . . . . . . . . . . . . . . 124
File_w_width . . . . . . . . . . . . . . . . . . . . . . . . 124
File_wordwrap . . . . . . . . . . . . . . . . . . . . . . . 124
File_x . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
File_y . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
Sys_autoindent . . . . . . . . . . . . . . . . . . . . . . . 125
Sys_autostrip . . . . . . . . . . . . . . . . . . . . . . . 125
Sys_autotrail . . . . . . . . . . . . . . . . . . . . . . . 125
Sys_backups . . . . . . . . . . . . . . . . . . . . . . . . 125
Sys_bounce . . . . . . . . . . . . . . . . . . . . . . . . . 125
Sys_bspace . . . . . . . . . . . . . . . . . . . . . . . . . 126
Sys_carriage . . . . . . . . . . . . . . . . . . . . . . . . 126
Sys_cmode . . . . . . . . . . . . . . . . . . . . . . . . . 126
Sys_cols . . . . . . . . . . . . . . . . . . . . . . . . . . 126
Sys_delete . . . . . . . . . . . . . . . . . . . . . . . . . 126
Sys_extensions . . . . . . . . . . . . . . . . . . . . . . . 126
Sys_fcount . . . . . . . . . . . . . . . . . . . . . . . . . 127
Sys_inmacro . . . . . . . . . . . . . . . . . . . . . . . . 127
Sys_insmode . . . . . . . . . . . . . . . . . . . . . . . . 127
Sys_mark_paste . . . . . . . . . . . . . . . . . . . . . . . 127
Sys_matching . . . . . . . . . . . . . . . . . . . . . . . . 127
Sys_mouse . . . . . . . . . . . . . . . . . . . . . . . . . 127
Sys_para . . . . . . . . . . . . . . . . . . . . . . . . . . 127
Sys_rdefs . . . . . . . . . . . . . . . . . . . . . . . . . 128
Sys_recording . . . . . . . . . . . . . . . . . . . . . . . 128
Sys_rmargin . . . . . . . . . . . . . . . . . . . . . . . . 128
Sys_rows . . . . . . . . . . . . . . . . . . . . . . . . . . 128
Sys_sdefs . . . . . . . . . . . . . . . . . . . . . . . . . 128
Sys_smart_tabs . . . . . . . . . . . . . . . . . . . . . . . 128
Sys_tabsize . . . . . . . . . . . . . . . . . . . . . . . . 129
Sys_timed . . . . . . . . . . . . . . . . . . . . . . . . . 129
Sys_undo_many . . . . . . . . . . . . . . . . . . . . . . . 129
Sys_word_delim . . . . . . . . . . . . . . . . . . . . . . . 129
Sys_wordwrap . . . . . . . . . . . . . . . . . . . . . . . . 129
Sys_zoom . . . . . . . . . . . . . . . . . . . . . . . . . . 129
Version . . . . . . . . . . . . . . . . . . . . . . . . . . 129
Ws_size . . . . . . . . . . . . . . . . . . . . . . . . . . 130
Chess Execution Errors . . . . . . . . . . . . . . . . . . . . . 131
Abort . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
Arguments . . . . . . . . . . . . . . . . . . . . . . . . . 131
Bingo Intrinsic . . . . . . . . . . . . . . . . . . . . . . 131
Class . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
Declaration . . . . . . . . . . . . . . . . . . . . . . . . 131
Exec Interp . . . . . . . . . . . . . . . . . . . . . . . . 131
Function Table Overflow . . . . . . . . . . . . . . . . . . 131
Interpreter Parsing . . . . . . . . . . . . . . . . . . . . 131
Left Brace . . . . . . . . . . . . . . . . . . . . . . . . . 131
Left-Value . . . . . . . . . . . . . . . . . . . . . . . . . 132
Link . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
Range . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
Right Paren . . . . . . . . . . . . . . . . . . . . . . . . 132
Stack (Pop) . . . . . . . . . . . . . . . . . . . . . . . . 132
Stack (Push) . . . . . . . . . . . . . . . . . . . . . . . . 132
Symbol . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
System Call . . . . . . . . . . . . . . . . . . . . . . . . 132
System Variable . . . . . . . . . . . . . . . . . . . . . . 133
Variable Table Overflow . . . . . . . . . . . . . . . . . . 133
Some Example Chess Code . . . . . . . . . . . . . . . . . . . . . 134
Example #1: Execute the Current File . . . . . . . . . . . . 134
Example #2: Factorials . . . . . . . . . . . . . . . . . . . 134
The Included Chess Files . . . . . . . . . . . . . . . . . . . . 135
The Author . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . 138
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
Introduction
------------
This document serves as the reference manual for Bingo 3.10.
Bingo is a full-featured text editor at the right price. Some of its
features include:
- high speed execution, with particularly fast searches, screen
handling, and file I/O
- virtual memory for file storage; up to 240 Megabytes of file
storage possible; XMS, EMS both supported.
- CHESS C-like interpreted language giving you access to
Bingo's powers in a true programmable language with looping,
decision making, functions, variables and more.
- multi level UNDO, allowing 'rollback' of changes to files
- automatic or on-demand text recognition
- custom define your own keyboard setup
- superb macro capability
- complete menu system supporting most Bingo functions
- multiple files, multiple windows: view different sections of the
same file, or different files at the same time
- completely configurable
- full color support
- programmable, integrated mouse support
- support of VGA, EGA, & MCGA extended text modes
- large suite of utility functions: entab; detab; shift; etc.
- execute DOS commands, including command-line compilers within
only ~3k of overhead
- regular expression search and replace, within and across files.
- use placemarks to mark positions in files
- extensive block operation support, include point, line and column
marking, and two different sets of block operations
- 27 independent paste buffers
- wordwrap, paragraph formatting, and autoindent support included
for text processing work
- 2 C indentation Modes supports programming in the C programming
language
- User-defined delimiter and indentation matching
- directory list picker
- both command line and dialogue box user interface paradigms
- print files & blocks through the serial port, parallel port, or
to a file, with or without line numbers
- set printing left margin, top margin, and lines per page
- automatic processing of errors generated by most developmental
tools.
- execute any keystroke, Bingo function, or Chess function
"globally" over all files in the ring
- profile files allow file extension specific settings.
Bingo 3.10 Reference Manual
1
Philosophy
----------
It has now been over five years since I first conceived the basic
philosophy for Bingo; a fast, very capable editor for the person who
needs to really manipulate textual data.
Like fire and the wheel are to civilization, compilers,
interpreters and editors are the underpinnings of the computer world.
For anyone who wishes to deal with free-format files of text and
create code, it all begins with an editor. Programmers *live* in
their editors, wearing them like a comfortable pair of jeans. Power
users require a tool which can handle big files and perform a
multitude of unforseen tasks with aplomb. And everyone requires an
environment we can tailor to our own taste.
It is against this backdrop that I created Bingo.
Certainly, there are many other editors available. But I believe
no other editor offers Bingo's combination of power, flexibility, and
value.
There are many fast editors with configurable keyboards, nice
menus, and macros. However, there are three features which set Bingo
a part from its brethren:
- Virtual Memory: No other editor offers Bingo's extensive,
seamless support for files vastly larger than memory. Using any
combination of Extended Memory, Expanded memory, and Disk, Bingo
easily handles files over 200 megabytes in size.
- Undo: New with version 3.10, Bingo now features a multi-level
undo which can roll back any changes you make with no problem.
- Interpreted Macro Language: In Chess, Bingo offers a simple yet
mature C-like processing language which supports looping, if-
then-else constructs, variables, and functions. This allows for
the automation of complex tasks and the easy extension of Bingo's
basic functionality.
While there are other editors available that offer one or two of
these three features, only Bingo combines them into one cohesive
whole. In addition, Bingo is packed with time and effort saving
functions, such as:
- mouse support
- "repeat" any keystroke, Bingo command, or Chess function
- extensive searching and replacing, including regular expression
searching and searching across multiple files.
- line, point, and column block marking
- DOS access with a minimum of overhead.
- compiler error parsing
and many more.
I believe Bingo is a very capable tool, well suited to carry out
nearly any text file manipulation. I hope you find it to be a
valuable addition to your software library!
Bingo 3.10 Reference Manual
2
The Association of Shareware Professionals
------------------------------------------
This program is produced by a member of the Association of
Shareware Professionals (ASP). ASP wants to make sure that the
shareware principle works for you. If you are unable to resolve a
shareware-related problem with an ASP member by contacting the member
directly, ASP may be able to help. The ASP Ombudsman can help you
resolve a dispute or problem with an ASP member, but does not provide
technical support for members' products. Please write to the ASP
Ombudsman at 545 Grover Road, Muskegon, MI 49442 or send a CompuServe
message via CompuServe Mail to ASP Ombudsman 70007,3536.
Bingo 3.10 Reference Manual
3
The Shareware Concept and Registering
-------------------------------------
This is just a general note as to what Bingo being Shareware
means to you, the user. Shareware could just as easily be called
"Honorware"; I depend upon you honor to mail in your payment for Bingo
if you are using it regularly. All of the legal jargon describing
this Shareware concept is contained in the REGISTER.DOC file included
with Bingo.
Basically, I depend upon you to mail in your payment for Bingo
after you have taken a reasonable amount of time to try it out. If
you use it regularly, please mail in the payment. The number of man-
hours which went into Bingo is incredible; the registration fee is a
small price to pay. So if you use Bingo regularly, please send me the
registration fee I charge for Bingo -- it's not much money for a very
sharp program.
When you register, you are entitled to a number of advantages,
depending on how you register. If your registration is a Single
Version registration ($40), these benefits include:
1) If you request it, I will mail you a copy of the current
release of Bingo free.
2) You are entitled to support for 9 months, or until 1 month
past the release of the next version, whichever is longer.
If your registration is a Lifetime registration ($75), your benefits
are a little more extensive. They include:
1) If you request it, I will mail you a copy of the current
release of Bingo free.
2) You are entitled to support for as long as Bingo is marketed
as a product, be it as shareware or commercial.
3) The next release will be mailed to you free of charge.
4) You will be notified of each successive release, and each will
be available to you for a mere $5.00 shipping fee.
In addition, registered users of any sort get to have their named
emblazoned on their copy for all to see; this way everyone will know
what honorable people they are. And no, a simple sector editor cannot
change this name -- it has to be done here. The name will be shown on
the initial screen which is popped up when Bingo is executed, and can
also be accessed from the 'version_info' function.
Also, some registered users are able to beta-test upcoming
versions -- a double-edged sword. Beta testing is somewhat precarious
at times, but you do get to take a hand in forming the next version.
Plus you get to have your complaints redressed faster than the general
public.
Bingo 3.10 Reference Manual
4
Ordering Bingo
--------------
Direct from Me
--------------
You can order directly from me at the below address:
Christopher R. S. Schanck
PO Box 279
Hanover MD 21076
(410) 379-9019
PsL Shareware Registration
--------------------------
You can register from Public (software) Library with your MC,
Visa, AmEx or Discover card by calling 800-2424-PsL or 713-524-6394 or
by FAX to 713-524-6398 or by CompuServe to 71355,470 or by mail to
PsL, PO Box 35705, Houston, Texas 77235-5705. Bingo's order number is
10399. Please use this order number when ordering if possible. These
numbers are for ordering *only*. For information about dealer
pricing, volume discounts, site licensing, shipping of product,
returns, latest version number or other technical information, contact
me directly at the above address. I repeat, please
*** DO NOT ***
call PsL for anything other than to place an order -- they will not be
able to help you.
Compuserve Online Registration
------------------------------
You can register the Lifetime version of Bingo online via the
Compuserve Information Service. To do this GO SWREG to the Software
Registration Service. Bingo's Registration ID is #411. When you
register this way I am notified within one (1) day and mail your copy
directly to you. Your Compuserve account will be charged the
registration fee.
Bingo 3.10 Reference Manual
5
Things to Possibly Come
-----------------------
For some time, a goal was implementing a full procedural
language. Earlier last year (12/91) I began prototyping a full
procedural interpreter which was to be integrated into Bingo. I was
very pleased to announce the Chess procedural language as an integral
part of Bingo starting with version 3.00. Chess is a very powerful,
if minimalistic, C-like language complete with looping, if-then-else
statements, variables, functions, and more. You can interrogate Bingo
for its current status, and ask the user for a variety of input.
For version 3.10, several of my prior goals have been met. In
particular I have added a multi-level undo function. This is a very
powerful function which adds another safety net for you, the user.
This will be expanded into a redo function as well in the near future.
So what remains? Plenty; I still really want to add customizable
menus to Bingo; even more so with addition of Chess, this seems to me
to be a very important addition. Plus, the longer people use Chess,
the more functionality they think of to add, so extending Chess is an
ongoing proposition.
Also, I have been giving serious thought to porting Bingo to the
OS/2 environment. OS/2 is a very powerful environment with a lot to
offer both users and developers.
Bingo 3.10 Reference Manual
6
Support
-------
As any of my registered users will tell you, I am committed to
supporting Bingo. Without my users, where would I be? Anyone,
registered or not, who calls or writes me will receive prompt and
(hopefully) useful help. I particularly like to hear of requests;
anything you would like to see in Bingo, let me know. One of my beta-
testers remarked that he felt like he had a personal editor --
anything he wanted was added.
US Mail Contact
---------------
The address and phone number to contact me at is:
Christopher Schanck
PO Box 279
Hanover MD 21076
(410) 379-9019
PLEASE feel free to contact me. I very much like to hear from
you!
CompuServe Contact
------------------
You will get the quickest response from me via Compuserve. You
can contact me there as:
70541,3614
On the Internet, that would be:
70541.3614@compuserve.com
Internet Contact
----------------
You will get very quick response from me via Internet E-mail.
You can contact me there as:
cschanck@access.digex.net
Bingo 3.10 Reference Manual
7
Getting the Latest Version
--------------------------
If you have a copy of Bingo but are not sure if it is the latest
version, the best way to find out is by calling the Computer
Connection BBS in Washington DC. This is a very large, well-managed
BBS. The latest version of Bingo will always be available here, and
E-Mail left for me will be answered. The number is (202) 547-2008.
Another way to assure yourself is to check on Compuserve, in the
IBMAPP forum, Text Editor section, generally named BE???.ZIP.
Bingo 3.10 Reference Manual
8
Using this Manual
-----------------
This manual is broken into four parts. The first is an overview
of Bingo itself, including topics such as customization.
The second section consists of sections on each major
functionality present in Bingo. These individual sections are not
tutorial in orientation, but rather give necessary information needed
to utilize this functionality. Each section has both a narrative
section and a function reference.
The third section is a overview and introduction to the Chess
procedural language, covering things like syntax and rules. The final
section is the library reference for Chess.
I suggest that the first time user first read the initial
sections for pertinent information, then go through the function
summary thoroughly. This will give you a clear idea of the
capabilities of Bingo. Reading the third section will familiarize you
with the capabilities of the Chess language.
Finally, *please* read the README.DOC file very carefully. In
some cases it will have information this file doesn't contain, and it
may describe some things in greater detail as it is kept as a running
log as I make changes.
Bingo 3.10 Reference Manual
9
Overview
--------
Installing Bingo
----------------
There are 2 files which are of critical importance for Bingo to
run.
BE.EXE is the executable. If you dislike typing 'be' at the DOS
command, you CAN rename Bingo's executable. One point to remember,
don't invoke the .EXE file directly.
KEYCFG.SET is the compiled keyboard definition file. This needs
to be in the same directory as BE.EXE, or in the current directory.
Without these two files, BE.EXE and KEYCFG.SET, Bingo will not
start.
There is another file which is useful but not mandatory for Bingo
to run. BINGO.INI, in either the current directory or in same
directory as BE.EXE.
The help file BINGO.HLP, is an additional file which must be in
the same subdirectory as BE.EXE if you wish to use it. When you
invoke help, Bingo will look there for the file BINGO.HLP. The file
may contain your own description of the current key layout, or just
about anything else you would like. Bingo comes with a default help
file.
As an example, assume the Bingo distribution files are contained
on floppy disk on drive A:, and you are installing Bingo on drive C:.
First, move to drive C: and create a directory for bingo, called
\bingo using DOS's mkdir command. Move to this subdirectory using 'cd
\bingo'. Now copy the files from drive A: over to the proper
subdirectory by using 'copy A:*.* C:\BINGO'.
Bingo 3.10 Reference Manual
10
BOPTS: The External Configuration Utility
-----------------------------------------
While most of Bingo's options are configurable from within Bingo
itself, for certain technical reasons some are not. BOPTS is a
utility which allows you to set these. To run BOPTS, use
BOPTS
and BOPTS will look for the file BE.EXE in the current directory.
Using:
BOPTS <executable name>
and BOPTS will look for the name you give it.
BOPTS will allow you to alter several key attributes affecting
the way Bingo runs. This section will detail what those options are,
and what they can do for you.
BOPTS will modify the BE.EXE executable directly, so if you are
going to compress it with one of the several popular utilities which
do so, beware, you will have to uncompress it for BOPTS to work.
Also, if you have anti-virus programs, they will probably complain
about BOPTS modifying BE.EXE as well.
The good news is that the settings controlled by BOPTS are of a
nature that you will not have to set them often.
Number of Buckets and Bucket Size
---------------------------------
The first two options are the number of virtual memory 'buckets'
Bingo allocates space for upon start up, and the second is the 'size'
of each virtual-memory bucket. In short, the *number* of buckets (up
to 15k) multiplied by the *size* of each bucket (up to 16k) determines
the maximum theoretical memory limit. For a full discussion of how
these two parameters impact performance, see the section on Virtual
Memory.
Chess Stack Size
----------------
This option controls the number of items Bingo allocates room for
Chess subprograms to use on the Chess stack. Since all Chess
subprograms share a common stack, this can be important. In heavily
recursive pieces of code, increasing this can be very important.
Chess Number of Variables
-------------------------
This dictates what the maximum number of Variables Bingo
allocates handles for on start up.
Chess Number of Functions
-------------------------
This dictates what the maximum number of Functions Bingo
allocates handles for on start up.
Bingo 3.10 Reference Manual
11
Scramble Registration Name
--------------------------
This option will allow you to scramble the registration name in a
copy of BE.EXE. This will blank out the current registration name.
This is included so that people who have registered copies and wish to
pass them along can expunge their name from the executable.
Bingo 3.10 Reference Manual
12
Bingo and Virtual Memory
------------------------
In version 2.10, Bingo introduced a virtual memory paradigm to
allow programmers to edit more and larger files. Virtual memory is a
simple, elegant, beautiful concept in the abstract; the reality, on an
MS-DOS based PC, is a very hairy beasty indeed. Many different
methods for implementing virtual memory were examined. The one I
settled on seems a good compromise; Bingo is still very quick, and the
memory/disk swapping necessary when you are working with large files
is relatively unobtrusive.
Bingo treats file storage as a set of fixed length blocks. As
shipped, Bingo is generally configured for 4096 byte-sized blocks, or
4k. Internally, Bingo can deal with up to 16k of these blocks, or
*buckets*, configurable from 1k to 16k. The bucket *size* is the size
of each block and is configurable from 2k to 16k. The larger the
bucket size, the more blocks (or buckets) allocated the higher the
theoretical memory limit. For instance, a bucket size of 16k with 8k
buckets gives a theoretical memory limit of 128 Megabytes! So why not
just set the limits way up and be done with it?
Two reasons. First, the larger the bucket size, the harder Bingo
works to manipulate text. On faster machines, larger bucket sizes are
fine; on a 386/25 Mhz PC, a 16k bucket size is no problem at all. On
the other hand, a 2k bucket size is fine on every machine out there.
The more buckets allocated, the less conventional memory Bingo
has available for use. So allocating a lot more than you need is non-
optimal use of your resources.
Second, let's be serious about this. Seldom, if ever, will
someone really need to edit a file 200+ Megs in size. Could happen;
that is why I coded it as I did. But still. Also, do the arithmetic.
To edit a 200M file, you need roughly > 400M of disk storage; 200M for
the file itself, + 200M for the swapfile, + some odd number of bytes
for the file entries in the FAT table (grin). Not a lot of systems
around with several hundred megs of storage hanging about. But we
plan for the future.
You can change the Bucket Size and Number of Buckets via the
BOPTS utility.
With version 3.10, Bingo now makes use of Expanded (EMS) memory
and Extended (XMS) memory in 256k chunks. Depending on the setting of
the 'conf_vmem' function, you can choose in which order this memory
will be used. Bingo makes use of EMS version 3.00 or above; XMS
version 2.00 or above.
Impact of Virtual Memory on Performance
---------------------------------------
Virtual memory has had a measurable impact on Bingo's performance
in a number of areas. Users coming from version 2.01 or earlier will
appreciate this discussion of differences.
On the downside, general editing is, in my estimation, a touch
slower. Searches, scrolling, block operations, etc. On the other
hand, the only machine I can tell the difference on is an ancient
8088; use an AT-class machine, and you can't see a difference.
Bingo 3.10 Reference Manual
13
However, even on the 8088, things are by no means slow; searches and
such are still very quick.
One function in particular is much slower. When you sort a
block, things are much, *much* slower in this version. This is not so
much a consequence of the virtual memory per se, but of the new memory
structure. In version 2.01 and earlier, sorting was done with a
recursive algorithm (N log N bound), and swapping lines meant swapping
pointers only. In version 2.10, a stack-based sort is not acceptable,
because with a large file you could corrupt the stack. So the
excellent CombSort algorithm (April 1991 BYTE) was used instead. This
algorithm approximates N log N time, but is ultimately slower. The
real speed killer, however, is that I can no longer simply swap
pointers. Instead, I have to physically move the lines themselves
around. This is slow, slow, slow, pushing the sort time way, way up.
But I did not want to eliminate sorting entirely. I use it too much
to give up.
On the upside, obviously, you can edit humongous files with ease,
and a virtually unlimited number of files. This is an obvious
improvement.
Bingo 3.10 Reference Manual
14
KEYCFG: The Keyboard Configuration Program
------------------------------------------
KEYCFG is the program used to create a keyboard configuration
which the Bingo executable can utilize. KEYCFG also allows you to
embed Chess code (Bingo's procedural language) into a .SET file and
assigned code subprograms to keys. The supplied configuration files
(BINGO.CFG, EMACS.CFG, possibly others) give a good example of how to
set up the file.
Using Chess code in Bingo is covered thoroughly in the Chess
manual, so this section will give a quick rundown on using Chess with
Keycfg.
KEYCFG is invoked as follows:
KEYCFG <configuration name> <keyset file name>
<configuration name> is the name of the text configuration source file
you wish KEYCFG to read, and <keyset file name> is the name you wish
KEYCFG to write the compiled keyboard setup to. The default keyset
file which Bingo looks for on start up is KEYCFG.SET. Bingo will look
first in the current directory, then in Bingo's own home directory.
Alternate keyset files can be loaded from within Bingo using the
'key_set_load' function.
Key Names
---------
KEYCFG's primary job is to assign functionality to keystrokes or
combinations of keystrokes. As such, it is important to know the
possible key names. The keys follow the following patterns:
f1-f12 are the function keys
!f1-!f12 are the shifted function keys
@f1-@f12 are the control function keys
#f1-#f12 are the alt function keys
@<key> is the control-<key> combination
#<key> is the alt-<key> combination
<key> is a simple key, named key, or a mouse event.
These are named keys:
alt_backspace alt_grey_right_arrow
alt_equal alt_grey_up_arrow
alt_escape alt_keypad_aster
alt_grey_delete alt_keypad_divide
alt_grey_down_arrow alt_keypad_minus
alt_grey_end alt_keypad_plus
alt_grey_home alt_keypad_return
alt_grey_insert alt_minus
alt_grey_left_arrow alt_return
alt_grey_pgdn alt_tab
alt_grey_pgup backspace
Bingo 3.10 Reference Manual
15
backtab keypad_plus
ctrl_backspace keypad_return
ctrl_delete left_arrow
ctrl_down_arrow pgdn
ctrl_end pgup
ctrl_grey_delete return
ctrl_grey_down_arrow right_arrow
ctrl_grey_end shift_delete
ctrl_grey_home shift_down_arrow
ctrl_grey_insert shift_end
ctrl_grey_left_arrow shift_home
ctrl_grey_pgdn shift_insert
ctrl_grey_pgup shift_keypad_5
ctrl_grey_right_arrow shift_left_arrow
ctrl_grey_up_arrow shift_pgdn
ctrl_home shift_pgup
ctrl_insert shift_right_arrow
ctrl_keypad_5 shift_up_arrow
ctrl_keypad_aster tab
ctrl_keypad_divide up_arrow
ctrl_keypad_minus
ctrl_keypad_plus Note: The key names with
ctrl_keypad_return 'grey' in them, as well as
ctrl_left_arrow F11, F12, and several others,
ctrl_minus denote keys which are
ctrl_pgdn available only if you have an
ctrl_pgup extended keyboard, and you
ctrl_return have the 'Use Extended
ctrl_right_arrow Keyboard Bios' option turned
ctrl_tab on.
ctrl_up_arrow
delete
down_arrow
end
escape
grey_delete
grey_down_arrow
grey_end
grey_home
grey_insert
grey_left_arrow
grey_pgdn
grey_pgup
grey_right_arrow
grey_up_arrow
home
insert
keypad_5
keypad_aster
keypad_divide
keypad_minus
Bingo 3.10 Reference Manual
16
These are the mouse events:
Three_buttons
Left_right_buttons
Left_middle_buttons
Multiple_left_button
Single_left_button
Right_middle_buttons
Multiple_right_button
Single_right_button
Multiple_middle_button
Single_middle_button
Single_up_arrow
Single_down_arrow
Single_left_arrow
Single_right_arrow
Single_pyramids
Multiple_up_arrow
Multiple_down_arrow
Multiple_left_arrow
Multiple_right_arrow
Multiple_pyramids
The configuration file itself consists of two sections:
Section 1 -- Key Assignments
----------------------------
The first is any number of lines of key assignments of one of the
following formats:
a) <key specifier> <function identifier>
b) <key specifier> macro <macro list>
c) <key specifier> <character>
d) ; <comment text>
A line starting with a space is a continuation of the
previous line.
<key specifier> is either a simple <key name>, or two key names
strung together as <key name>+<key name>, or three key names strung
together as <key_name>+<key_name>+<key_name>. For instance, for you
Wordstar people, control-k q would be entered as '@k+q' (Note: in
this case, the Bingo will recognize both the sequence @k+q and @k+Q as
the same thing -- case is not significant.)
Bingo 3.10 Reference Manual
17
The <macro list> is a list of 0 or more function descriptors, as
listed in the Function Summary section, and 0 or more literal
occurrences, and 0 or more named keys, in any order. The literals
must be enclosed in single quotes. The literals will occur in the
macro exactly as if they had been typed. For instance, the line
f1 macro 'Chris' return
would define the f1 key as my name followed by a return.
The <character> is any printable ASCII character, entered without
quotes. For instance,
< ,
would redefined the less-than symbol to be the comma. This
translation will occur during general editing, as well as in the
search and replace string-entry boxes. Everywhere else it will be
ignored.
The following macro would define the Alt-C key to save all
current modified files, execute the make command while swapping Bingo
out to disk, saving the errors in the ERRS file, then load the ERRS
file.
#c macro save_all swap_execute 'make > errs' return return
load_file 'errs.' return
A more interesting variant of this is the one I used prior to
installing the auto-error processing:
#c macro modify_save_all swap_execute 'make > errs' return
return window_bottom load_file 'errs.' return
This version will attempt to put the errors file in the bottom-most
window, and it will initially only save those files as have been
modified.
After adding the auto-error processing, I added a more complex
version of this macro:
#c macro modify_save_all
swap_execute 'make > errs' return return
window_one window_split
load_file 'errs.' return
window_previous
window_resize down_arrow down_arrow down_arrow
down_arrow down_arrow down_arrow return
setup_err_parse 'errs.' return
return next_error
This version saves all modified files, executes MAKE as before, and
returns. When it returns, it makes sure there is but one window,
splits the current window, and loads in the ERRS file. It then
resizes it so the bottom window is smaller, resets the error parsing
to the ERRS file, then searches for the next (first) error.
This last version is very sweet to use if you have a compiler
which generates agreeable error files. Bingo will work with most
compilers I have come across, including the Borland and Microsoft
compilers/assemblers. With the Microsoft tools, you may have to tweak
the compile flags a bit to get a usable format.
Since adding Chess to Bingo, I have been using a set of Chess
functions to manage compiling and error parsing (see the COMPILE.CHS
file for an example of how to do this).
Bingo 3.10 Reference Manual
18
'open_end' Key Identifier
-------------------------
KEYCFG allows the use of the 'open_end' identifier in macros to
force Bingo to fetch string input from the keyboard. For example:
f1 macro search open_end 'i' return
will execute the search function, wait for the user to input the
target string, then input 'i' for the search modifier and do the
search.
'open_end' is effective only for string input --- single key
input situations will not respond to it. In effect, 'open_end' is a
very special key name.
'cur_file' Key Identifier
-------------------------
KEYCFG also allows the use of the 'cur_file' identifier in macros
to expand into the current file's name (less path) in string input.
For example:
f1 macro load_file cur_file return
will force the reload of the current file, providing it is located in
the current directory.
Using Chess functions
---------------------
Any function which is not recognized as being a Bingo internal
function is assumed to be a Chess function. For example:
#z hello_world()
would tie Alt-Z to the 'hello_world' Chess function.
Section 2 - Chess Code
----------------------
The second section of a .CFG file is the section of Chess code. To
signal KEYCFG that this section has been reached, use the token
'chess-begin' on a line by itself. The token 'chess-end' signals the
end of this section. All text between these tokens will be
interpreted as Chess code. See the manual on the Chess procedural
language for a further explanation.
KEYCFG Command Line Options
----------------------------
KEYCFG recognizes three command line options. One is a shortcut:
keycfg !
tells KEYCFG to assume the name of the configuration file is
BINGO.CFG, and that the keyset file is KEYCFG.SET. I put this in
primarily for my own use, as I run KEYCFG often during development.
'KEYCFG names' will provide an alphabetical list of all of the
function names which are currently recognized. Useful to have.
Bingo 3.10 Reference Manual
19
Likewise 'KEYCFG keys' will list all recognized key names and
mouse events. Also useful to have.
Bingo 3.10 Reference Manual
20
The KEYINFO Key Information Utility
-----------------------------------
KEYCFG takes plain text key definitions and 'compiles' them into
.SET file format, KEYINFO takes a .SET file and turns it into its
plain-text equivalent. Further, KEYINFO can take a saved Single-Key
macro and turn it into its plain-text format. This means that you can
define a macro on the fly and get it converted back to its text format
where you can tune it to your heart's content.
KEYINFO can be invoked two ways. First, to turn a .SET file into
its text equivalent, use:
KEYINFO <.SET file name>
To turn a saved macro file into its text equivalent, use:
KEYINFO -s <macro file name>
Bingo 3.10 Reference Manual
21
Starting Bingo
--------------
Starting Bingo is simple. Simply type:
be <filespec> <filespec> ...
be.exe <filespec> <filespec> ...
at the DOS prompt, and you are off. One of several things will
happen. If each file name you gave is discreet (i.e., no wild cards),
the files named will each be loaded, one after another. If a filespec
matches more than one file, a directory list of matching files will
pop up which will allow you to choose a file or files. See the
section on the Directory List for further explanation.
If no filespec is given, Bingo will behave as if you issued 'be
*.*'.
You may also specify the starting line and column position for
the each loaded file. The '/pLL:CC' switch allows you to do this.
For example:
be test.doc test2.doc /p10:5 /p20
would load the file TEST.DOC and move to the 10th line, 5th column.
TEST2.DOC would begin on the 20th line. If you do not give a column
argument, the first column will be assumed.
You can use the '-x<file name>' switch to run a recorded macro
file on start up. For example:
be test.doc test2.doc -xfun1.mac
would load both files, then execute the macro file FUN1.MAC inside the
buffer holding TEST.DOC.
You can use the '-c<file name>' switch to run a CHESS command
file on start up. For example:
be test.doc test2.doc -cfun1.chs
would load both files, then execute the CHESS program file FUN1.CHS
inside the buffer holding TEST.DOC.
Bingo 3.10 Reference Manual
22
The BINGO.INI file
------------------
With version 2.11a, Bingo's configuration settings are stored in
a file called BINGO.INI. When Bingo starts up, it will look first in
the local directory, then in BE.EXE's execution directory. If it is
found in neither of these places, you will not be notified and Bingo
will run with the default settings it is shipped with. To create
BINGO.INI, use the 'save_settings' function.
Moving the settings to a separate file means that the settings
and the key configurations are held in 2 separate files. This allows
you to effortlessly use executable compression programs such as LZEXE
(TM) and PKLite (TM) to compress BE.EXE; no longer is BE.EXE in the
habit of modifying itself.
With version 3.10, BINGO.INI is now a plain-text ASCII file,
editable by Bingo itself. Normally, you use the 'save_settings'
function to create this file -- the reason it was altered to an ASCII
format was to facilitate Bingo upgrades. The settings are of the
form:
&<setting name>=<value>
The ampersand (&) character must be in the first column. Any line
with anything other than an & in the first column will be treated as a
comment line. Generally, the possible <values> are:
TRUE/FALSE 1/0
Integer Range 0-???? (the upper range is dependent
upon the setting.
String <character string>
These are the available settings:
&Auto_cut 'conf_auto_cut' T/F
* &Autoindent autoindent mode T/F
&Automark auto marking T/F
&Autostrip 8th bit stripping T/F
&Autotrail trail space clipping T/F
&Backups backup extension char string
&Bottom_marg bottom margin 0-256
&Bounce_curs bounce cursor T/F
&Box_shadow shadow boxes T/F
* &Bspace_mode backspace mode 0-3
&Buf_to_stack cut to stack T/F
&Chess_trace chess tracing T/F
* &Cmode C mode indention 0-2
&Col_bbord box border color <color>
&Col_bchar box highlight char color <color>
&Col_btext box text color <color>
&Col_cur_l current line color <color>
&Col_dial cmd line dialogue color <color>
&Col_eob end of buffer color <color>
Bingo 3.10 Reference Manual
23
&Col_high highlight text color <color>
&Col_mbar menubar color <color>
&Col_norm normal text color <color>
&Col_over overscan color <color>
&Col_stat status line color <color>
&Def_ext default file extension <string>
&Delete_join delete joins lines T/F
&Delim delimiters 2 <strings>
&Dial_mode user interface mode 0-2
&Eof_mark write eof marker T/F
&Eol_char end of line char 0-255
&Error_only error-only error parsing T/F
&Exit_to_dir exit to string entry box T/F
&Ext_keybios use extended keyboard BIOS T/F
* &Insert insert mode T/F
&Kill_save unkill stack size 5-10240
&Lf_only write LF only files T/F
&M_button_del mouse button click delay 200-1000
&M_repeat_del mouse repeat factor 0-1000
&Mark_paste mark after pasting T/F
* &Matching matching mode T/F
&Para_indent indent starts para T/F
&Picklist where/what filenames saved 0-4
&Prn_crlf print cr/lf setting T/F
&Prn_dest print destination 0-2
&Prn_header print header T/F
&Prn_left_marg print left margin 0-256
&Prn_line_no print line numbers T/F
&Prn_lines_pp print lines per page 1-256
&Prn_top_marg print top margin 0-256
&Profile_mode profile mode T/F
* &Rec_mode text recognition mode 0-1
&Replace_defs replace default modifiers <string>
&Resume_pos attempt restoer cursor pos T/F
&Return_split return splits line T/F
* &Right_marg right margin 0-1024
&Safe_save use safe saves T/F
&Save_scr save DOS entry screen T/F
&Search_defs search default modifiers <string>
* &Smart_tabs smart tabs T/F
&Sound_dur sound duration 0-10000
&Sound_freq sound frequency 0-10000
* &Tabsize tabsize 0-80
* &Timed timed backups 0-10000
&Undo_many number of undo events 0-2048
&Use_mouse use mouse T/F
&Use_vmem virtual memory scheme 0-4
&Vmode video mode 0-2
&Wild_load wildcard loading rules 0-3
&Win_close window closes with file T/F
&Word_delim word delimter chars <string>
Bingo 3.10 Reference Manual
24
* &Wordwrap wordwrap mode T/F
Note: The entries marked with an asterisk (*) are also found in
profile files.
<color>: <foreground><background>
where the <foreground> and <background> are characters from the
following list:
k black
b blue
g green
c cyan
r red
m magenta
y yellow
w white
Lowercase characters mean low-intensity colors, while uppercase
indicates high intensity. For example:
Bk = Bright Blue on Black
cb = Cyan on Blue
Wr = Bright White on Red
As a rule, you do not really need to ever edit this file
directly; Bingo will write out a complete BINGO.INI file for you when
you use the 'save_settings' function. The reason the .INI file is
saved in ASCII file format is for easy upgradability to future
versions of Bingo.
Bingo 3.10 Reference Manual
25
Bingo and Larger Screen Displays
--------------------------------
EGA, VGA, and MCGA video display cards support displays larger
than the standard 25 rows by 80 columns. Bingo does support editing
on these screen sizes. Bingo can be set to handle screen displays in
one of three ways:
- Bingo can be set to detect the current screen type and
dimensions, and do retrace checking.
- Bingo can be set to detect the current screen type and size,
but do no retrace checking.
- Bingo can be set to switch to 43/50 line mode if it is
supported. No retrace checking will be performed.
As shipped, Bingo chooses the middle of these three courses. The
retrace checking is only done if you are using a color display with a
25x80 configuration.
Bingo 3.10 Reference Manual
26
Bingo's Menu System
-------------------
Bingo implements a comprehensive menu structure to aid you in
utilizing Bingo's functions. Many people, myself included, do not
necessarily wish to spend the time to assign every function we need to
a keyboard equivalent. This requires a large time investment before
you can begin using the editor. On the other hand, it is very
irritating when you need a particular function and cannot use it
because you did not have the foresight to assigned it to a key
combination.
Bingo's menu system was designed to handle just this situation.
By assigning the 'main_menu' function to a keystroke, you effectively
have access to *every* function Bingo has. First, almost all of
Bingo's functions are directly accessible from the menus, grouped in
logical sets, following a logical hierarchy. The remaining functions
can be accessed by selecting the 'eXtras' sub-menu, then the 'Pick and
exec' function. This function then allows you to choose from a list
of *all* supported functions.
I have found that for most people, it pays to assign your most
commonly needed functions to keystrokes, and then rely on the menu
system for the ones which are used to a lesser degree. The logical
structure of the menus allows for easy access to less frequently
needed functions.
The menus themselves work quite easily. A list of possibilities
is presented. A menu bar can be moved up and down to make your
choice; pressing Return selects the choice. In addition, each choice
has a highlighted character; pressing this character will
automatically select the choice.
In some cases you may be presented with a child menu. Here again
you may make a choice as before, with one additional bit of
functionality. If you are in a child menu, pressing the PgUp or PgDn
keys will move you to the previous or next sibling menu, respectively.
The Print menu, as well as all of the configuration menus, is a
multiple menu. This means that after you have made a choice, the
action will be executed and you will be returned to the menu at the
same spot. I have found that when printing and configuring, people
usually want to do more than one task. Menus which are multiple will
have an asterisk ('*') printed at the bottom of the menu border.
The Escape key always closes the current child menu. If you are
at the top menu, it quits the menu system entirely. To see how your
mouse, if you have one, interacts with the menus, see the section
concerning Bingo and a mouse.
Bingo 3.10 Reference Manual
27
Bingo's User Interface
----------------------
Bingo's user interface comes in two flavors. The default method,
which longtime users of Bingo will recognize, uses bordered boxes in
the center of the screen to display and ask for user input. The
second type of interface, which uses a command line at the bottom of
the screen, is new for v3.00. Which interface style is used is
controlled by the setting of the 'conf_dialogue' option. Regardless
of the setting, the input rules are the same for the 4 main types of
interface interaction. They are as follows.
String Entry Boxes:
These are the boxes which ask you for string input. The easiest
example is when Bingo asks you for a file name. These boxes allow you
to enter string input in a flexible manner. A wide variety of
keystrokes are available to aid in this endeavor; they are:
^F/CursRt One Character Forward
^B/CursLt One Character Backward
^A/Home Beginning of Line
^E/End End of Line
^K/CtrlEnd Delete to Eol
CtrlHome Delete to Bol
^Y Delete Line
^Q Quote character; the next character you type
(such as control-L, or using the Alt-keypad
to enter ASCII values) will be literally
inserted into the string
Tab Insert from Paste Buffer
Insert Toggle insert Mode
Alt-A Invoke the ASCII Table
Up Arrow In Boxes interface mode, pops up a list of
the previous 15 strings entered. In Command-
Line interface mode, displays the previous
string entered. Repeatedly hitting this key
will cycle through the entire list.
Down Arrow Valid only in Command-line mode, this cycles
through the list in the opposite direction as
Up Arrow.
PgUp In Boxes interface mode, pops up a list of
the previous 15 file names edited. In
Command-Line interface mode, displays the
previous file name entered. Repeatedly
hitting this key will cycle through the
entire list of file names.
PgDn Valid only in Command-line mode, this cycles
through the list in the opposite direction as
PgUp.
Pressing <Escape> will abort out of the string entry operation.
Bingo 3.10 Reference Manual
28
Yes/No Boxes:
These are the boxes which require a yes or no answer to a
question. An example of this is when you 'quit' a file and the file
has been modified. Bingo will ask you if you wish to save the file.
Each time you enter a Yes/No box, one of the two options will be
will be highlighted (in the Command-Line method, the 'Y' or 'N' will
be capitalized to indicate the default). This is the default option
which will be selected if you press <Return>. In the Boxes interface
method, using the Left and Right Arrow keys, you can change the
current selection. Alternatively, you can press either the 'y' key
(any case) for a yes answer, or the 'n' key (any case) for a no
answer.
Pressing <Escape> will abort the operation.
Non-Editable Display Boxes:
The easiest example of this type of box is the Help box, or the
Info box. This type of box simply displays a number of lines within a
box. By using the Up and Down arrows (also the space bar) you may
scroll by lines, and by using the Page Up and Page Down keys you may
scroll by pages.
Any other keystroke will exit the box.
The Command-Line method, when turned on, will display the same
box as the Boxes method; there is no command line equivalent.
List-Picking Boxes:
The best example of this type of dialogue box occurs when the
'directory list picker' pops up. This type of box is very similar to
the Non-Editable box discussed above, but the idea here is not merely
to display information but to facilitate making a choice. There will
be a menu bar highlighted, showing the current selection. You may
move this bar up and down using the arrow and page keys. Pressing
<Return> will selection this option.
Additionally, the initial character of each selection may be
highlighted. If so, pressing the corresponding character will
automatically select this option.
Finally, even if the leading characters of each selection are not
so highlighted, you may "step" through the selections by pressing
letter keys. The menu bar will move to the next selection which
starts with the letter pressed. If necessary, the menu bar will wrap
to the top of the list (Bingo will beep in this case). In the case of
the directory picker, the leading '\' characters of directory entries
will be ignored.
As is the custom, the <Escape> key will abort the operation.
Again, there is no Command-Line equivalent; a bordered box will
be used.
Bingo 3.10 Reference Manual
29
Directory Lister
----------------
One of the extremely useful features of Bingo is its directory
lister. Often, Bingo will ask for a file name. If the name you give
matches more than one file, in the case of wild cards, for instance,
the lister will appear with a list of matches and all subdirectories
in the current directory. There are several features embedded in this
lister to assist you in choosing a file.
First, all subdirectory entries in the current directory will are
shown at the top, with a '\' character preceding them. Selecting any
of these will cause the lister to change to that directory.
Second, pressing a letter causes the Lister to move to the next
file name whose first character matches the letter pressed. A beep
will sound if the search wraps around to the beginning.
The list is sorted alphabetically by name, but subdirectory
entries come first. The last entry is always the New Specification
entry, which allows you to type in a new specification, perhaps
another drive if it is necessary.
You have 2 choices in the directory lister other than choosing a
file. The second-last option in the list, "Load All Matching Files",
will, as you might guess, load all the files shown in the list. It
will not attempt to load subdirectories. The last option, "New File
Spec", allows you to re-choose the directory specification.
Bingo 3.10 Reference Manual
30
Bingo and File Names
--------------------
Many times during normal operation, Bingo will ask you for a file
name. Bingo potentially handles file names slightly differently than
plain vanilla DOS. In particular, let's examine the difference
between
'thisfile' and 'thisfile.'
The first does not contain a period. In this case, Bingo will do
two things. First, it will, for each defined default extension, check
if the file with that extension exists. If it does, it will use that
file name. Possibly, one of the default extensions is '.*'. This
would lead you to a directory list picker.
The second contains the trailing period, and so will be used as
is. So, in order to specify a file ignoring the default extensions,
you must add the trailing period.
Additionally, Bingo accepts either '/' or '\' characters as file
delimiters. This will make life a little easier on those of us who
use UNIX systems regularly. Finally, version 2.10 allows the use of
the '..' and '.' directory primitives.
Also, there are two other specifications you may use. ':home:'
will be translated by Bingo into Bingo's original directory. So,
':home:bingo.hlp' would be translated to 'bingo.hlp' in Bingo's home
directory. Likewise, ':temp:' will be mapped to the value of the TEMP
environment variable. If TEMP is not defined, it will use the TMP
environment variable.
Finally, if you use any other ':xxx:' string and do not use
'home' or 'temp', the string between the ':' is translated as an
environment variable. For example, if you have the line:
set CHESS=c:\edit\chess\
is in your AUTOEXEC.BAT files, the using the filename
:chess:test.chs
would be expanded to
c:\edit\chess\test.chs.
This is very handy when you want to put things in specific locations
and just define the location as a variable.
Bingo 3.10 Reference Manual
31
The Status Line
---------------
On the bottom line of each window in Bingo's display is the
status line. This line communicates several valuable pieces of
information. On the left side of the line, the current line and
column are displayed. Next are a series of flags:
a Auto indent
b Box Draw Mode
c C mode
i Insert mode
m Matching Mode
r Recording Macro
w Word wrap
z Zoom mode
For each of these flags, if the letter is capitalized, it indicates
that the toggle is on, while a lower case character indicates the
option is toggled off.
Next you will see something looking like [x/y] where 'y' is the
number of files in the ring, and 'x' is the position of the current
file in the ring.
Finally, the file name comes. It will be enclosed in curly
braces, and only the drive letter and the actual 12 character
filename. If it is prefaced with an asterisk '*', it means the file
has been modified.
At the end of one of the on screen status lines, you will see
either one or three little pyramids. If there is a single pyramid,
that means it is not the active window. If there are three pyramids,
they tell you which is the active window. If the three pyramids are
pointing up, the full-width window above the status line is the
current window. If the three pyramids point to the left, this means
that of the two windows above the status line, the one on the left is
the active window. If the three pyramids point to the right, the
window on the right is active.
The same rules concerning the direction of the pyramids hold for
inactive status lines, except that only one pyramid will be present.
If this all sounds complicated, don't worry. Open a few windows
and move among them; it will become much clearer.
Finally, on the right end of the current status line, a 'T' or
'F' character will be shown. This represent whether the last
operation Bingo executed returned a value of True or False; i.e.,
whether it worked.
Bingo 3.10 Reference Manual
32
Bingo and The Mouse
-------------------
Bingo has the capacity to make extensive use of a Microsoft
(trademark, copyright, and kudos to Microsoft) compatible mouse,
should you have one installed. In order for the mouse to work, three
things must be true:
1) It must be connected to the computer properly. See your mouse
manual for instructions.
2) You must have your mouse driver installed properly. Again,
see your mouse manual for instructions on how to accomplish this.
3) You must have the 'Use Mouse' option turned on, found in the
General configuration menu. Bingo is shipped with mouse use turned on.
Bingo is designed to allow users of three button mice to make
full use of all three buttons (I have a three button mouse). However,
users with two button mice will only lose a little functionality when
it comes to programming the mouse, and no functionality at all when it
comes to dealing with the menus and dialogue boxes.
It is generally easy to tell if the mouse is working; the status
line will have four additional "buttons", each consisting of three
arrows enclosed in square braces. Also, to conserve space, the file
name will be shown without its full path.
The Mouse Cursor
----------------
The mouse cursor will appear on your screen as a solid, non-
blinking block, which changes color depending on the underlying color.
It should be possible to move the cursor over the entire screen. If
the mouse cursor is present, it means that a response with the mouse
is possible. If it is not visible, this means that at this point, no
mouse response makes sense.
The Mouse at the General Editing Level
--------------------------------------
At the general editing screen, Bingo has 20 programmable mouse
events. The programmable events are handled exactly as key
assignments are handled: through KEYCFG. These are the mouse names:
Mouse Event Identifiers
Three_buttons Left_right_buttons
Left_middle_buttons Multiple_left_button
Single_left_button Right_middle_buttons
Multiple_right_button Single_right_button
Multiple_middle_button Single_middle_button
Single_pyramids Multiple_pyramids
Single_up_arrow Single_down_arrow
Single_left_arrow Single_right_arrow
Multiple_up_arrow Multiple_down_arrow
Multiple_left_arrow Multiple_right_arrow
Bingo 3.10 Reference Manual
33
The first ten are concerned simply with what happens when you
press the corresponding button sequence. Note that users of two-
button devices will only be able to utilize five of these, those
dealing with the left and right buttons.
The second ten refer to the 5 "hot spots" on the active status
line. There are two for each button, one for a single click and one
for a double click.
Now that you know of these event names, what can you do with
them? Well, you can assign them anything you could assign a key. In
addition, two special functions are provided to help deal with the
mouse:
snap_to_mouse_xy:
this function moves the cursor to the current mouse
position. If necessary, it will change the active window.
mouse_scroll:
this function is kind of an expanded snap_to_mouse_xy.
First, it moves the cursor to the mouse position. Then, as
long as a mouse button is held down, the screen will scroll
in the following manner:
1) If you are in the upper 1/8 of the screen you will
scroll up.
2) If you are in the next 1/8 of the screen, the screen
will scroll up, but more slowly.
3) If you are in the lower 1/8 of the screen you will
scroll down.
4) If you are in the next lower 1/8 of the screen, the
screen will scroll down, but more slowly.
Additionally, 'mouse_scroll' works in exactly the same
manner horizontally.
Finally, if automarking is turned on, 'mouse_scroll'
will update the marking on screen if marking is active.
If you are elsewhere on the screen, you simply move the
cursor about. This makes 'click and drag' operations
possible.
Combining these with other functions, quite powerful mouse events can
be programmed. For example:
Single_left_button snap_to_mouse_xy
Single_right_button macro snap_to_mouse_xy point_mark
Multiple_left_button macro snap_to_mouse_xy linemark
mouse_scroll linemark
Bingo 3.10 Reference Manual
34
The first simply moves the cursor, while the second moves the cursor
and drops a point mark. The third lets you scroll about the file,
delineating an area to be marked.
The ten "hot spots" can also be programmed as if they were keys.
Single_down_arrow cursor_down
Double_down_arrow down_page
Here, this has defined the down arrow button to respond with a
cursor_down if a single click occurs on it, or a down_page if a double
click occurs on it.
These "buttons" work a little differently than you might expect -
- as long as you hold the mouse button down, the function will
repetitively execute. So, if you double click on the down arrow
"button" and hold the second click down, you will see the file whiz by
at a truly astonishing speed. The speed with which the functions are
repetitively executed can be governed using the 'conf_mdelay'
function.
These 20 events give you the user an unparalleled degree of
control over how the mouse responds.
The Mouse and The Menus
-----------------------
The mouse would not be very useful if it was not well integrated
into the menu system. Great pains have been taken to make mouse use
easy and intuitive with respect to the menu system.
It is very simple. The left mouse button selects something, and
the right mouse button closes the current menu. However, there are a
few refinements.
If the item you select with a single left click is in the right-
most menu, the effect is the same as if you had moved to that
selection and hit <return>. If the item is not the right-most menu,
say the it is in the Main menu and you currently have the Block menu
open, then you will simply be moved to the selection, with the other
menus closed for you. However, no equivalent <return> will be
executed.
If, however, you use a double left click, the selection will be
executed regardless of where it was on the menu hierarchy. Any extra
open menus will be closed to bring you to the selected level.
Likewise, a single right click will close the current menu.
However, a double click will close *all* open menus.
Note that this gives you some capabilities which are not
available from the keyboard.
If the above sounds complicated, don't worry. In practice, it is
very easy. I would suggest you restrict yourself to single clicks
when you begin, then move to double clicks when you are sure of what a
single click would do. You will very quickly find that the menus are
effortlessly intertwined with the mouse.
Bingo 3.10 Reference Manual
35
The Mouse and Dialogue Boxes
--------------------------
Throughout Bingo, you will encounter many dialogue boxes. There
are four main types, and all support mouse use where appropriate. They
are:
String Entry Boxes:
These are the boxes which ask you for string input. The easiest
example is when Bingo asks you for a file name. There are only a few
mouse options in these boxes; most of the time you must enter text
from the keyboard.
However, there are three supported button events. A single left
click has the same effect as a <return>; it accepts the current
string. A double left click wipes out the string; it in effect is a
Control-Y equivalent. Finally, any right button click is the
equivalent of an <Escape> key.
Yes/No Boxes:
These are the boxes which require a yes or no answer to a
question. The easiest example of this is in the configuration
options, where you are asked if you wish to toggle the option. By
placing the mouse cursor over the [Yes] selection and pressing the
left mouse button, you answer in the affirmative. Likewise, placing
the mouse cursor over the [No] selection and pressing the left button
answers in the negative.
As usual, pressing the right mouse button is equivalent to the
<Escape> key.
Non-Editable Display Boxes:
The easiest example of this type of box is the Help box, or the
Info box. If there are more lines than fit within the box, up and
down arrow boxes will appear in the upper and lower right hand corners
of the box. By moving the mouse cursor to the corresponding box and
holding a mouse button down, the display will scroll in the
corresponding direction.
As expected, the right button exits.
List-Picking Boxes:
The best example of this type of dialogue box occurs when the
'directory list picker' pops up. Here, as in the Non-Editable Display
Boxes, up and down arrow boxes will appear if necessary. Furthermore,
moving the mouse cursor to a particular selection and pressing a
single left key will move the menu bar to that selection.
Moving the mouse cursor to a particular selection and double left
clicking will select that particular selection as if you had moved the
menu bar there and typed <return>.
As always, the right button is the equivalent of typing <Escape>.
Bingo 3.10 Reference Manual
36
The Mouse and The ASCII Table
-----------------------------
The mouse is also tightly integrated with the ASCII table
function, 'ascii_table'. Here, single left clicking on a character
moves the cursor to it (updating the display). Double left clicking
selects the character and adds it to the string.
Single left clicking on the [Bspace] bar is equivalent to typing
<backspace>; it removes one character from the string. A double left
click on this spot zeroes the string entirely.
As always, clicking the right button is the equivalent of typing
<Escape>.
Bingo 3.10 Reference Manual
37
Bingo and A Network
-------------------
Bingo will function quite well within the network environment,
but there are some concerns network administrators should be aware of.
Several operations cause Bingo to save temporary data to disk. Swap-
execution, automatic backups, and virtual memory all flush data to
disk files for storage.
By default, Bingo looks for an environment variable called "TEMP"
(first choice) or "TMP" (second choice). If found, it will be used as
a directory specification for storage of the above temporary files.
If neither of the two environment variables is defined, the directory
where BE.EXE was located is used.
This enables network administrators to set up Bingo so that users
can run the same executable, but by giving each user a separate
definition of "TEMP" (or "TMP"), each user's temporary storage area
will be separate from one another.
Bingo 3.10 Reference Manual
38
Bingo Function Summary
----------------------
This section will give a overview of the basic functionality
included in Bingo. For each section, detail for some of the more
intricate functions will be presented. After the narrative section, a
reference list for each function in the section will be presented.
The index at the end of the manual can be used as an alphabetical
cross-reference. Have fun!
Bingo 3.10 Reference Manual
39
Configuring Bingo
-----------------
Bingo is extremely configurable. To access the configuration
menu, select the 'Config' option from the main menu, or attach keys to
particular configuration functions.
To make the current selections permanent, select the "Write
setting" option found on the main configuration menu.
There is one other item of interest. The settings found on the
'Text Settings' configuration menu per buffer basis. These settings
are the ones saved in profile files. Each time you change these with
a 'conf_' function, you change both the underlying default (used when
new files are brought in) and the current buffer's settings. For a
few settings, there are also 'toggle_' functions, such as
'toggle_cmode'. These change only the current buffer's settings.
Function List
----------------------------------------------------------------------
Save_settings
---------------------------------------------------------------------
Saves the current config settings to the file you name, usually
BINGO.INI. Upon start up, Bingo looks in the local directory then in
Bingo's execution directory for BINGO.INI.
Conf_color
----------------------------------------------------------------------
Configure the color settings. You select the color you are interested
in by pressing the appropriate color. Then, by watching the bottom
line on the screen and pressing the up and down arrow keys for the
foreground and the pageup and pagedown keys for the background, you
select the color you want. Pressing return will select the color.
For the Overscan (border) attribute, only the background attribute
matters.
Conf_lfs
----------------------------------------------------------------------
Alter the lfs-only setting. If on, this setting has Bingo write files
with lines separated by LF's only, in the UNIX fashion. Otherwise,
Bingo uses CR-LF pairs to delimit lines.
Bingo 3.10 Reference Manual
40
Conf_backups
----------------------------------------------------------------------
Allows you to specify the character Bingo uses to automatically create
backup files when a file is saved. The algorithm used takes the
character you give and uses it to flesh out the extension of the
original file to three characters; if the extension is already 3
characters long, the backup character replaces the third character of
the extension. For example, if the backup character is '$',
main.c becomes main.c$$
main.cp becomes main.cp$
main.pas becomes main.pa$
Conf_eof
----------------------------------------------------------------------
Alter whether Bingo writes a EOF character at the end of files (^Z).
Conf_search
----------------------------------------------------------------------
Allows you to predetermine which flags (I/G/B/etc...) will be set
initially for a search and replace attempts.
Conf_stripping
----------------------------------------------------------------------
Configure whether Bingo strips the high bit of characters when
reading. Only really useful when reading Wordstar files.
Conf_rmargin
----------------------------------------------------------------------
Set the right margin. Affects paragraph reformatting and word wrap.
This changes the current buffer's setting and the global setting.
Conf_autoindent
----------------------------------------------------------------------
Set whether Bingo uses auto indent mode. Affects paragraph
reformatting and word wrap. This changes both the current buffer's
setting and the global setting.
Conf_wordwrap
----------------------------------------------------------------------
Set the word wrap mode. This changes both the current buffer's
setting and the global setting.
Conf_insert
----------------------------------------------------------------------
Alter whether Bingo is in insert/overwrite mode. This changes both
the current buffer's setting and the global setting.
Conf_tabsize
----------------------------------------------------------------------
Set the tab size. This changes both the current buffer's setting and
the global setting.
Bingo 3.10 Reference Manual
41
Conf_backspace
----------------------------------------------------------------------
Configure the backspace mode:
1. Delete single chars
2. Delete spaces back to tab setting
3. Delete spaces to left margin
4. Rubout
This changes both the current buffer's setting and the global setting.
Conf_cmode
----------------------------------------------------------------------
Configure whether Bingo uses C Mode on *.c and *.h files. Allows you
to choose between two different modes of C indention:
for(i=0;i<10;i++){ and for(i=0;i<10;i++)
...stuff... {
} ...stuff...
}
This changes both the current buffer's setting and the global setting.
Conf_sound
----------------------------------------------------------------------
Allows you to set the frequency of the beep Bingo uses. Setting it to
zero will effectively turn off the sound.
Conf_mdelay
----------------------------------------------------------------------
Allows you to specify the timing delay between repetitions of a
function(s) being executed while a mouse button is held down. For
example, on reasonably quick machines, paging down while holding the
mouse button down on one of the status line "hot spots" occurred so
fast with version 2.0 so as to be useless.
Conf_button_wait
----------------------------------------------------------------------
Allows you to configure, in milliseconds, the amount of delay Bingo
will wait for the second click of a double click.
Conf_shadow
----------------------------------------------------------------------
Silly function, configures whether Bingo uses "shadow" boxes. Play
with it, amaze your friends.
Conf_win_close
----------------------------------------------------------------------
Controls whether Bingo automatically closes a window when the file is
closed.
Bingo 3.10 Reference Manual
42
Conf_def_ext
----------------------------------------------------------------------
Allows you to specify the file extensions Bingo will attempt to use
when you specify a file name without '.'. The extensions are checked
in order.
Conf_video_mode
----------------------------------------------------------------------
Allows you to choose from between three screen handling options:
- autodetect with retrace checking
- autodetect with no retrace checking
- 43 or 50 line mode, if supported
Retrace checking will only be in effect if there are only 25 lines to
be displayed.
Conf_prn
----------------------------------------------------------------------
Set the printer destination, between the default serial port, the
default parallel port, or a file.
Conf_tmarg
----------------------------------------------------------------------
Set the top margin, in terms of number of lines.
Conf_bmarg
----------------------------------------------------------------------
Set the bottom margin, in terms of number of lines.
Conf_lmarg
----------------------------------------------------------------------
Set the left margin which will be used when printing, in terms of
spaces.
Conf_lines_per
----------------------------------------------------------------------
Set the lines per page, counting the top margin.
Conf_kill_size
----------------------------------------------------------------------
Alters the size of the kill buffer.
Conf_cut_stack
----------------------------------------------------------------------
Allows you to choose whether text about to be discarded from the paste
buffer should be placed on the stack. If this is on, this will slow
block operations down a bit, but it is a nice safety feature.
Bingo 3.10 Reference Manual
43
Conf_auto_cut
----------------------------------------------------------------------
Allows you to toggle how the 'cut' and 'copy' functions respond when
no block has been marked. If auto cut is active, these functions will
cut (or copy) the current line. If auto cut is not active, the
current line will be Line marked.
Conf_smart_tabs
----------------------------------------------------------------------
Allows you to specify whether or not "Smart" tabs are active. Smart
tabs cause the 'insert_tab' function to tab over to the same column as
the next non-space character on the line previous. This changes both
the current buffer's setting and the global setting.
Conf_matching
----------------------------------------------------------------------
Configures matching mode. If matching mode is active, entering a
'[{<(' character will cause its matching close member to be entered
automatically. This changes both the current buffer's setting and the
global setting.
Conf_trail
----------------------------------------------------------------------
Allows you to configure whether or not Bingo automatically strips
trailing spaces.
Conf_bounce
----------------------------------------------------------------------
Allows you what cursor movement paradigm Bingo uses. If Bounce mode
is active, Bingo views the entire document as one long string of
characters. Thus, you cannot move off of exiting text. Further, the
cursor will automatically wrap at the end of lines. If Bounce mode is
turned off, cursor movement is by the more traditional method, where
you can move any where (horizontally) you wish.
Conf_key_bios
----------------------------------------------------------------------
This governs whether or not Bingo will use the Extended Keyboard Bios
if it is found. On some machines, Bingo may identify it incorrectly,
or there may be compatibility problems. This function allows you to
tell Bingo to disregard the extended Bios, even if it is found. If
this is on, the two sets of arrow keys, for example, will be
recognized as different. They will therefore have to be defined
separately in your keyboard config file.
Conf_erronly
----------------------------------------------------------------------
Allows you to tell Bingo to further restrict valid error lines to
those containing the word 'error' (any case).
Bingo 3.10 Reference Manual
44
Conf_mouse
----------------------------------------------------------------------
Controls whether or not Bingo uses a Mouse, if it finds one.
Conf_profile
----------------------------------------------------------------------
Controls whether Bingo will check for, and load if found, the profile
file of a file's file extension each time a file is loaded.
Conf_word
----------------------------------------------------------------------
Allows you to edit the string containing what characters are not part
of a word.
Conf_scr_save
----------------------------------------------------------------------
Controls whether Bingo will save, and then restore, the DOS screen
upon start up and exit. Will cost you some memory.
Conf_name_save
----------------------------------------------------------------------
Controls whether, and how, Bingo saves the last 15 files edited. You
can turn it off, tell it to save the info in the current directory
(where Bingo looks first upon start up), or in Bingo's home directory.
Further, this controls whether only the filenames are saved, or if
other history information (such as string entry history, file
positions, etc) are saved.
Conf_delims
----------------------------------------------------------------------
Allows you to input and edit pairs of delimiters for Bingo to balance
with the 'match_delim' function. Both delimiters must be non-blank.
Conf_eol_display
----------------------------------------------------------------------
Allows you to enter the ASCII decimal value of the character to be
displayed as the end of line character. The default is 32, the space
character.
Conf_exit_to_pick
----------------------------------------------------------------------
Controls Bingo's actions upon exit. If turned on, Bingo will pop up
an edit box when you quit the program (except when you exit through
the abort_all function).
Conf_prn_eol
----------------------------------------------------------------------
Controls whether Bingo terminates lines with a linefeed only or a
carriage return/linefeed pair while printing.
Bingo 3.10 Reference Manual
45
Conf_prn_lineno
----------------------------------------------------------------------
Sets whether or not Bingo prints line numbers on each line it prints.
Conf_prn_header
----------------------------------------------------------------------
Sets whether or not Bingo prints page headers on each page it prints.
Headers consist of the file name, the page number, and the date/time.
Conf_timed_backups
----------------------------------------------------------------------
Allows you to specify how often, in terms of changes, to save a backup
of a file. A value of zero (0) indicates no automatic backups are to
take place. The value input becomes the default value for any
subsequently entered files, and becomes the value for the current
file; it does not change the value for any existing files. Any
operation which changes the file will increment the change counter.
The current number of changes for each file is displayed on the info
screen. When the predetermined number of changes has occurred, the
file is saved as
backXXXX.bak
where XXXX is the buffer 4 digit id number. This id number is
unique over an editing session, and is displayed as part of the info
screen. The backup files are identical to the files themselves,
except that the first line contains the original name of the file
(full path name) and the time of the backup. So if there is a
catastrophic failure (your cat chews through the power cord, for
instance), you can explore the back*.bck files and recover recent
version of your files.
The *.bak files are stored in the location specified by the
"TEMP" (or "TMP") environment variable; if this environment variable
is not set the files will be stored in the root directory of the
current drive.
*Note*: Be very careful with setting this value. Generally, a
setting between 256 and 1024 is very useful. However, if you are
editing a multi-megabyte file, backups can be a large pain
because of the time involved in saving the file.
Conf_carriage
----------------------------------------------------------------------
This function toggles on and off whether or not the 'carriage'
function splits lines.
Conf_delete_join
----------------------------------------------------------------------
This function toggles on and off whether or not deleting at the end of
a line brings the next line up.
Bingo 3.10 Reference Manual
46
Conf_wild_load
----------------------------------------------------------------------
This function is used to control how Bingo interprets wild card
characters in file names. There are 4 choices:
- never load wild card matches automatically
- load wild card matches only at start up
- load wild card matches every *but* start up
- always automatically load wild card matches
Conf_chess_trace
---------------------------------------------------------------------
This is used to turn on the Chess execution trace capability. When
enabled, each Chess program executed will stop at each line and
display it. You will be able to continue execution or halt it.
Conf_dialogue
----------------------------------------------------------------------
This is used to set whether string, yes/no, and character dialogue
takes place in bordered boxes in the center of the screen or at the
bottom of the screen.
Conf_recognize
----------------------------------------------------------------------
This is used to decide whether Bingo's text recognition system is
continuously active ('Automatic' mode) or quiescent ('On-Demand'
mode). See the section on Extra Functions for a complete explanation
of the text recognition system.
Conf_undo
----------------------------------------------------------------------
This sets the number of undo events Bingo saves systemwide. Valid
settings are 0 (which indicates no undo events are to be saved) to
2048.
Conf_scr_save
----------------------------------------------------------------------
This turns on or off whether Bingo saves what the DOS screen looked
like before Bingo was started up.
Conf_resume_pos
----------------------------------------------------------------------
This setting controls to whether or not Bingo attempts to resume to
the last cursor position of the file when it was edited last. In
other words, when you load a file (if this option is turned on) and
that file was one of the last 15 edited, and file status saving is
turned on, Bingo will automatically move to the position the cursor
was at when the file was last edited. See the 'conf_name_save'
function for more information.
Bingo 3.10 Reference Manual
47
Conf_vmem
----------------------------------------------------------------------
Controls how Extended (XMS) and Expanded (EMS) memory are used in
conjunction with the disk for virtual memory. The choices are:
a) Disk Only: Bingo immediately swaps to disk when it runs out of
conventional memory.
b) EMS Only: Bingo attempts to swap to EMS memory for virtual
memory when it runs out; if EMS is exhausted or unavailable,
Bingo will then use the disk.
c) XMS Only: Bingo attempts to swap to XMS memory for virtual
memory when it runs out; if XMS is exhausted or unavailable,
Bingo will then use the disk.
d) EMS, then XMS : Bingo attempts to swap to EMS memory for
virtual memory when it runs out; if EMS is exhausted or
unavailable, Bingo attempts to swap to XMS memory for virtual
memory when it runs out; if XMS is exhausted or unavailable,
Bingo will then use the disk.
e) XMS, then EMS : Bingo attempts to swap to XMS memory for
virtual memory when it runs out; if XMS is exhausted or
unavailable, Bingo attempts to swap to EMS memory for virtual
memory when it runs out; if EMS is exhausted or unavailable,
Bingo will then use the disk.
Conf_para
----------------------------------------------------------------------
Controls what the definition of the beginning of a paragraph is. The
default (off) setting is a blank line; turned on, and indented line is
a new paragraph. This setting affect the 'reform_para' function.
Conf_mark_paste
----------------------------------------------------------------------
This function allows you to turn on whether a pasted block is marked
when it is pasted in.
Bingo 3.10 Reference Manual
48
Basic Editing
-------------
Basic editing concerns deletion and insertion of characters.
Bingo provides a number of ways to delete text without recourse to the
block operation. Five of these operations push deleted text onto the
unkill stack -- 'del_eol', 'del_line', 'del_bol', 'del_word_lt', and
'del_word_rt'.
The Destructive Backspace
-------------------------
Bingo supports four backspace deletion modes. The first is the
old favorite, the simple one character destructive backspace. The
second mode destructively deletes back to the previous tab stop,
provided there are only spaces in the way. If there are non-space
characters in the way, it functions as in mode 1.
The third mode deletes all the way to the left margin (column 1),
provided it consists only of spaces. Again, if there are non-space
characters, it functions as mode 2.
The fourth mode is termed a rubout. In this mode, Bingo will
backup one character and overwrite that character with a space.
The 'Default_' Functions
------------------------
Bingo has two deletion functions which are variations on others.
The 'default_bspace' function is a variation on the 'back_space'
function while the 'default_del' function is a variation on the
'del_char'. Both work in essentially the same manner. If a block is
marked, a 'cut' function is performed. If no block is marked, the
corresponding function.
Function List
----------------------------------------------------------------------
Insert_tab
----------------------------------------------------------------------
Insert the number of spaces needed to move the cursor to the next tab
stop, based on the current tab size.
Carriage
----------------------------------------------------------------------
If the 'conf_carriage' setting is turned on, this function splits the
current line by moving the cursor to the start of the next line,
taking everything to the right of the cursor along for the ride. If
this moves you onto the bottom line of the window, the line will be
centered on the screen. Depending on C mode and the Auto indent mode
settings, automatic indentation of some type may be performed. If the
'conf_carriage' setting is turned off, this function simply moves the
cursor down one line.
Bingo 3.10 Reference Manual
49
Toggle_ins
----------------------------------------------------------------------
Toggles the insert/overwrite mode. Changes only the setting of the
current buffer.
Toggle_wrap
----------------------------------------------------------------------
Toggles the word wrap setting. Changes only the setting of the current
buffer.
Toggle_cmode
----------------------------------------------------------------------
Toggles the C mode setting, regardless of the file name. Changes only
the setting of the current buffer.
Toggle_autoindent
----------------------------------------------------------------------
Toggle the auto indent setting. Changes only the setting of the
current buffer.
Del_char
----------------------------------------------------------------------
Deletes the current character at the cursor position; if it was at the
end of a line and the 'conf_delete_join' setting is turned on, brings
the next line up.
Back_space
----------------------------------------------------------------------
If the 'conf_delete_join' setting is turned on, performs a destructive
backspace, if the current deletion mode is not Rubout. If the current
mode is Rubout, the cursor will back up one space and the current
character will be blanked based on the current deletion mode in
effect. If the setting is turned off, performs a rubout.
Del_line
----------------------------------------------------------------------
Deletes the entire current line, regardless of position.
Del_eol
----------------------------------------------------------------------
Deletes all text to the end of the line; if at the end of a line,
joins the lines if the 'conf_delete_join' setting is turned on.
Del_bol
----------------------------------------------------------------------
Deletes all text to beginning of line, moves to first column. If at
the beginning, joins the line with the previous line if the
'conf_delete_join' setting is turned on.
Bingo 3.10 Reference Manual
50
Default_del
----------------------------------------------------------------------
Does one of two things depending on whether or not a block is marked.
If a block is marked, the 'cut' function is executed. If no block is
marked, the 'del_char' function is executed.
Default_bspace
----------------------------------------------------------------------
Similar to 'default_del', except that if no block is marked, a
'back_space' function is executed.
Del_word_rt
----------------------------------------------------------------------
Deletes from the current cursor position to the start of the next word
to the right.
Del_word_lt
----------------------------------------------------------------------
Deletes from the current cursor position to the start of the next word
to the left.
New_line
----------------------------------------------------------------------
Inserts a new line before the current line, without moving the cursor.
Bingo 3.10 Reference Manual
51
Block Handling
--------------
Marking
-------
Block marking is extremely flexible. Three types of marking are
supported. Line marking considers lines to be the smallest
indivisible chunks of text. It is primarily used when editing large
sections of program code, since much of this type of editing involves
moving lines.
Point marking, on the other hand, considers single characters to
be the smallest indivisible portions of text. this is useful for
replicating portions of lines, rather than whole lines.
While Point marking "snakes" the mark from one point to the next,
Vertical marking lets you define corners of a column-oriented block.
There are two methods of marking, governed by the 'conf_automark'
function. If auto marking is turned off, marking proceeds as follows:
go to the beginning of the block you wish to mark; execute the
appropriate mark function for the block type you are interested in;
move to the end of the block you wish to mark; mark again.
If auto marking is turned on, things work differently. Now, when
you mark, you turn marking 'on'. As you move about the file, the
block will follow you until you decide to mark the end. However, you
do not have to mark the end of the block; Bingo will simply assume the
current position is the other end of the block.
You can also use the 'extend_mark' function. This simply extends
the current marking scheme to the current cursor position. If there
is no mark in the file, 'Extend_mark' will display an error message.
Operations on Blocks
--------------------
Bingo supports two slightly different sets of block operations.
The first set will be familiar to users of many programming editors,
while the second will bring back memories of any Wordstar compatible
editor they may have used.
The first set of operations consists of three functions: 'cut',
'copy', 'paste'. 'cut' snips the marked region to the block buffer,
removing it from the file. 'copy' does the same thing, but it leaves
the marked text intact in the file. In both cases, if nothing is
marked and you have this option turned on, Bingo will assume you wish
the current line to be line marked.
'paste' is very simple: whatever is currently in the block buffer
is placed at the current cursor position, based on the marking method
used. If the contents were point marked, the contents are simply
'squirted' into the text. If the contents were line marked, the lines
are inserted above the current line.
There is also an alternate type of paste operation, that of
'paste_replace'. In this case, the paste buffer's contents overwrite
the needed amount of space in the text, rather than squirting between
existing text. This type of pasting will only work for Column and
Line marked blocks. Be careful! You can hurt yourself with this one.
Bingo 3.10 Reference Manual
52
The second type of block operations available are similar in
nature to those used by Wordstar-compatible editors. Block operations
consist of three steps: mark the text, move to the destination
position, invoke the function.
'block_move' moves the currently marked blocked of text to the
current cursor position. 'block_copy' does the same thing, except it
leaves a copy behind. 'block_move' and 'block_copy' will not allow
you to manipulate blocks between files.
'block_delete' is functionally identical to Cut, except that it
requires that a block be marked; the setting of the auto line cut
toggle has no effect on 'block_delete'.
Remember that since each file can have independently marked
sections of text, you cannot use the 'block_move' and 'block_copy'
functions to manipulate text between separate files.
Named Buffers
-------------
In addition to the default paste buffer, Bingo supports 26 named
buffers, 'a'-'z'. In order to change which buffer is currently in
use, use the 'name_buffer' function. Press the letter of the buffer
you want, or <return> for the default buffer. Until you change the
buffer, Bingo will use the currently named buffer for all its
operations. All buffers will be saved when a swapping operation is
being done.
Emacs_yank
----------
This function melds the unkill stack and the paste buffer
together in the following manner. If the most recent block
operation/deletion was a block operation, 'emacs_yank' works exactly
like 'paste', pushing the paste buffer contents into the text. If the
most recent operation was a deletion (word, line, -eol, -bol),
'emacs_yank' works like the 'paste_kill' function, pulling text from
the undo stack without disturbing its contents. This allows you to
use the deletion commands to manipulate text in concert with the paste
buffer operations. Note that this is not identical to EMACS's 'yank'
functionality, but it is useful.
Function List
----------------------------------------------------------------------
Line_mark
----------------------------------------------------------------------
Drop a line marker. The block will be expanded or shrunk, depending
on the last drop made. Line marks consider the line to be the
smallest markable element of text.
Bingo 3.10 Reference Manual
53
Point_mark
----------------------------------------------------------------------
Drop a point marker. The block will be expanded or shrunk, depending
on the last drop made. Point marks consider the character to be the
smallest markable element of text.
Vertical_mark
----------------------------------------------------------------------
Drop a vertical marker. Vertical, or column, blocks are defined by and
upper and an opposing lower corner.
Extend_mark
----------------------------------------------------------------------
Extends the current marked block, using whichever marking scheme is in
place. Does nothing if no block is marked.
Unmark
----------------------------------------------------------------------
Unmark all text in current buffer.
Cut
----------------------------------------------------------------------
Cut the marked text to the block buffer. The marked text is deleted
from the file.
Copy
----------------------------------------------------------------------
Copy the marked text to the block buffer. The marked text is NOT
deleted from the file.
Paste
----------------------------------------------------------------------
Pastes the contents of the block buffer into the text at the current
position. If the contents were line marked, the contents will be
pasted, as lines, above the current line.
Paste_replace
----------------------------------------------------------------------
Pastes the contents of the block buffer at the current location,
overwriting the needed amount of space. This is only valid when the
paste buffer is Line or Vertical marked.
Block_move
----------------------------------------------------------------------
Moves the currently marked blocked of text to the cursor position.
Block_copy
----------------------------------------------------------------------
Copies the currently marked blocked of text to the cursor position.
Bingo 3.10 Reference Manual
54
Block_delete
----------------------------------------------------------------------
Deletes the currently marked block of text to the block buffer;
identical to cut.
Block_save
----------------------------------------------------------------------
Writes the currently marked text to a file.
Swap_buf_and_block
----------------------------------------------------------------------
Takes the currently marked portion, and swaps it with the current
contents of the paste buffer. The two blocks need not be of the same
type.
Report_bsize
----------------------------------------------------------------------
Reports the number of lines and characters (line breaks in point
marked blocks count as one character) the currently marked block
spans.
Name_buffer
----------------------------------------------------------------------
Allows you to change the current paste buffer. <return> specifies the
default buffer, and 'a'-'z' specify their respective buffers.
Buffer_info
----------------------------------------------------------------------
Displays various pertinent information about all the paste buffers.
Look_buffer
----------------------------------------------------------------------
Displays the contents of the current buffer in a non-editable window.
This only displays up to the first 100 lines in the buffer.
Cut_append
----------------------------------------------------------------------
Works exactly like 'Cut', except it appends the marked text to the
current contents of the buffer. The text in the buffer and the marked
text must be of the same type.
Copy_append
----------------------------------------------------------------------
Just as 'Cut_append', but performs a copy instead.
Bingo 3.10 Reference Manual
55
Emacs_yank
----------------------------------------------------------------------
Melds the unkill stack and the paste buffer together. If the most
recent block operation/deletion was a block operation, 'emacs_yank'
works exactly like 'paste', pushing the paste buffer contents into the
text. If the most recent operation was a deletion (word, line, -eol,
-bol), 'emacs_yank' works like the 'paste_kill' function, pulling text
from the undo stack without disturbing its contents. This allows you
to use the deletion commands to manipulate text in concert with the
paste buffer operations.
Mark_word
----------------------------------------------------------------------
This marks the current word, using the defined word characters. Only
legal word text is marked.
Bingo 3.10 Reference Manual
56
Undo and Error Parsing
----------------------
Undo Capabilities
-----------------
With the advent of version 3.10, Bingo now supports true multi-
level undo. With few exceptions, every operation in Bingo can be
completely "undone". You can designate how many operations will be
saved by Bingo, from 0 (no Undo active) to 2048 via the 'conf_undo'
function. This undo stack is global, i.e., all of the buffers share
in this one stack in common.
In order to undo an operation, use the 'undo' function to undo
the operation. Use a series of 'undo' functions to rollback a
sequence of operations. As each operation is undone, it is popped off
of the undo stack, no longer available.
There are a number of technical issues you need to be aware of in
conjunction with undo. They are:
a) a few operations, particularly those which execute a single
operation over a large number of lines (such as 'shift_block'-ing
5 thousand lines) will fail to be saved because of memory
constraints. You will be notified in these cases.
b) all block operations will be saved, regardless of the size of
the blocks, as these have been specially coded to be supported.
c) Undo uses additional virtual memory space, particularly in
cases when it is saving delete operations, as it must save the
deleted text so as to make undoing the delete feasible. Because
of this, you may choose to turn undo off in cases when extremely
large file manipulation is needed.
d) search and replace operations are treated as if each
replacement is a single operation t be rolled back.
Additional Undo Capability
--------------------------
The full Undo capability is good for the wholesale rolling back
of changes, but some additional deletion recovery is provided: Bingo
keeps a stack of recently deleted items; text deleted by 'del_eol',
'del_bol', and 'del_line' functions. This stack is kept in reverse
order; that is, the most recently deleted text is placed in top of the
unkill stack.
Additionally, you have an option regarding text cut to the paste
buffer. Normally, when you place text into the paste buffer (Using
the 'cut', 'copy', etc. functions), if the paste buffer already
contains something, that text is discarded. However, if you set the
'cut to stack' option on (in the General Config Menu, or with the
'conf_cut_stack' function), this text will be pushed onto the stack
also.
Bingo 3.10 Reference Manual
57
You can control the size of the unkill stack using the
'conf_kill_size' function (1 to 10240 lines), or through the config
menus. You cannot, however, turn it off.
Manipulating the Unkill Stack
-----------------------------
There are three functions available to help you deal with the
unkill stack. 'rotate_kill' will pop up a list of the current stack's
contents. By moving the menu bar and hitting return, you can move the
selected entry to the top of the stack.
'unkill' and 'paste_kill' are very similar. They take the top
member of the stack and insert it in the current position. If the top
member of the stack was a full line, it will be inserted above the
current line. 'unkill' also removes the top member from the stack.
Error Parsing
-------------
Bingo provides the capability to automatically parse compiler
generated error messages. The procedure for this is fairly simple.
First, you must have a text file containing the error output of
the compiler (or assembler) in question. This usually obtained by
running said compiler and redirecting its output to a file. Bring
this file into the editor.
Next, call the 'setup_err_parse' function, and give it the name
of the file. If the name matches a file in the ring, Bingo will tell
you that error processing is setup properly.
Now it is simple; simple call the 'next_error' or 'prev_error'
functions. The following things will happen:
1) Bingo will see if a next (or previous) error can be found.
If not, it will report that no more errors exist.
2) Assuming an error line is found, the file name and line
number will be picked out of the line. Bingo will perform and
edit_file operation on the file name, then jump to the offending
line. All of this will happen within the current window.
3) Also, any on-screen window which contains the file being
parsed will be updated. The current error line will be
highlighted automatically.
As you can see, error parsing is super useful. For a further example
of how it works, see the example macro in the section on the KEYCFG
program.
Error Parsing Method
--------------------
Bingo parses error files using a "fuzzy" or "best-guess"
algorithm. It checks each line as follows.
First, Bingo attempts to find a valid file name on the line. The
file name must contain a period, and it must have a file extension.
The file name cannot be a .EXE or .COM file, and it may contain the
full path specification (new with version 2.10e).
Bingo 3.10 Reference Manual
58
After finding such a file name, Bingo verifies that the named
file exists on disk or in the current ring. If it does, Bingo now
begins to look for the line number within the error file. Bingo will
look for the first number to follow the file name, and use this as the
line number.
If both a file name and a line number are found, the line will be
recognized as a valid error/warning line.
This algorithm will work for the Borland and Microsoft
developmental tools. However, in some cases, you may have to consult
your manual in order to find what command-line switches have to be set
for your compiler to output errors in a usable message format.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!! Note that linker errors do not !!!!!!!!!
!!!!!!!! have line numbers, and so will !!!!!!!!!
!!!!!!!! not be recognized. !!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
However, whenever Bingo encounters a situation where there are no more
errors, it will display a message saying so. Further, it will display
a portion of the last non-blank line in the error file on the message
line with the "No more Errors" message, so you can verify that all
went well.
Function List
----------------------------------------------------------------------
Setup_err_parse
----------------------------------------------------------------------
This function will prompt you for a file name. Bingo will from then
on use the named file as the error file. This must be called before
next_error, prev_error, or last_error are called.
Next_error
----------------------------------------------------------------------
Moves, within the current window, to the next error as found in the
current error file. If no more errors can be found, Bingo will say
so, and display the last non-blank line in the error file. Otherwise,
Bingo will edit the appropriate file into the current window, as well
as highlighting the line in the error file being referenced.
Prev_error
----------------------------------------------------------------------
Same as error except it moves backward through the error file.
Last_error
----------------------------------------------------------------------
Re-displays the last error message, if there was one.
Bingo 3.10 Reference Manual
59
Rotate_kill
----------------------------------------------------------------------
Pops up the current kill stack and allows you to arbitrarily move a
line of text to the top of the stack.
Unkill
----------------------------------------------------------------------
Inserts the top member of the stack at the current position. If the
top member of the stack was a full line, it is inserted above the
current line. Removes the top member from the stack.
Paste_kill
----------------------------------------------------------------------
Inserts the top member of the stack at the current position. If the
top member of the stack was a full line, it is inserted above the
current line. Leaves the stack itself alone.
Restore_line
----------------------------------------------------------------------
Restores the current line to its former form.
Bingo 3.10 Reference Manual
60
File Handling
-------------
Bingo has extensive file handling capabilities, more than almost
any other editor available. Literally, there is little you could want
to do with a file which Bingo will not let you do.
A couple of words are in order about the file format. Bingo
cares not at all if the file you are reading is delimited by carriage-
return/linefeed pairs or just linefeed characters; Bingo will read
both with equal aplomb. Similarly, Bingo doesn't object to files
ending with the EOF character (ASCII 26). On output, the output
format is governed by the configuration settings accessible through
the 'conf_eof' and 'conf_lfs' functions.
Function List
----------------------------------------------------------------------
Edit_file
----------------------------------------------------------------------
Asks for a file name. If the file is already in the ring, it simply
switches to it. If it is not in the ring, it loads the file.
Choose_file
----------------------------------------------------------------------
Pops up a list of current files in the ring, and an option for a new
file. Selecting the New File option performs an 'edit_file' function.
Load_file
----------------------------------------------------------------------
After asking for a file name, it loads that file from disk. If the
file is already in the ring, the in-memory version is first deleted
from memory.
Rename_file
----------------------------------------------------------------------
Renames current file. Does not save it to disk automatically.
Switch_file
----------------------------------------------------------------------
Switches to a different file, performing a quit on the current file
first. If you escape out of the quit option, the switch operation
will abort.
Save_file
----------------------------------------------------------------------
Saves the current file; does not exit.
Modify_save
----------------------------------------------------------------------
Saves current file ONLY if it has been modified.
Bingo 3.10 Reference Manual
61
Quit
----------------------------------------------------------------------
Exits current file. If the file was modified, it will ask you if you
wish to save the file; a <return> indicates yes.
Abort
----------------------------------------------------------------------
Exits the file, no protection, no save.
File
----------------------------------------------------------------------
Saves and exits current file.
Next_file
----------------------------------------------------------------------
Moves to the next file in ring.
Prev_file
----------------------------------------------------------------------
Moves to the previous file in the ring.
Quit_all
----------------------------------------------------------------------
Performs a quit on each file in the ring.
Abort_all
----------------------------------------------------------------------
Aborts all files, no questions asks.
File_all
----------------------------------------------------------------------
Saves and exits all files.
Save_all
----------------------------------------------------------------------
Saves all files.
Modify_save_all
----------------------------------------------------------------------
Saves each modified file in the ring.
Delete_file
----------------------------------------------------------------------
Asks for a file name to delete on disk.
Zap_file
----------------------------------------------------------------------
Deletes the disk copy of the current file.
Bingo 3.10 Reference Manual
62
Block_load
----------------------------------------------------------------------
Loads a file from disk into the current position of the file.
Clean_file
----------------------------------------------------------------------
Resets the 'modified' status of the file to FALSE.
Clean_all
----------------------------------------------------------------------
Resets the 'modified' status of all files in the ring to FALSE.
Backup_file
----------------------------------------------------------------------
Forces a backup attempt for the current file; this will only have an
effect if the file's timed backup setting is on.
Backup_all
----------------------------------------------------------------------
Forces a backup attempt on each file in the ring. For each file, this
will only have an effect if the file's timed backup setting is on.
Bingo 3.10 Reference Manual
63
Info
----
Function List
----------------------------------------------------------------------
Help
----------------------------------------------------------------------
The 'help' function attempts to read the file BINGO.HLP located in the
same directory as BE.EXE. This file can consist of anything you wish,
and contain up to 1000 lines as you wish (it must fit into memory...).
File_info
----------------------------------------------------------------------
This function simply brings up some useful information about the
current file.
Sys_info
----------------------------------------------------------------------
This function simply brings up some useful information about Bingo in
general.
Ascii_table
----------------------------------------------------------------------
This function serves a dual purpose. First, it will pop up a display
of all 256 characters, serving as a handy reminder of the characters
available. As you move the cursor over the table, the decimal, octal,
hexadecimal, and mnemonic values, if appropriate.
Further, by moving onto a particular character and hitting
return, you will add this character to the string displayed at the
top. You can build a string up to about 30 characters in length. The
<Backspace> key will delete the last character on the string. When
you press <Escape> to leave, the contents of the string will be
inserted into the text at the current cursor position.
Version_info
----------------------------------------------------------------------
Displays various version information and the name of the person this
copy was registered to, if it is a registered copy.
Main_menu
----------------------------------------------------------------------
Invokes the main menu.
Show_recognize
----------------------------------------------------------------------
This function will pop up a display of the currently defined text
recognition relationships for the current buffer.
Bingo 3.10 Reference Manual
64
Macros
------
Bingo provides tremendous support for the creation, management,
and execution of keyboard macros. This level of support was initially
dictated by my own experiences developing software, and later added to
by user feedback.
Bingo retains the status of the last function executed internally
as a True or False value; you can see this reflected on the far right
end of the active status line. If, during the execution of a macro a
function returns a False value, the macro will terminate. Further, if
applicable, the repeat command will terminate. This allows you to
execute macros "until function failure" based on things like trying to
move beyond the beginning of the line.
Also, you can terminate the execution of a macro by pressing the
Scroll Lock key and holding it until the macro terminates.
Macro Space
-----------
Bingo will dynamically increase its macro space to compensate
when you add or release memory. Thus, macro space is limited by
available memory.
Defining Macros
---------------
There are four ways to define macros, all very similar. You can
define the scrap key to hold a macro, a single key to hold a macro,a
two key combination to hold a macro, or a three key combination to
hold a macro. Any of these functions will also end a macro definition
if one is currently in progress. Macros can be defined across any
number of activities. Pressing <Escape> at any time as the response
to a query from Bingo will end the macro presently being recorded.
Ending Macro Definition
-----------------------
When you wish to end a macro definition, you can use any of the
macro functions which would start a macro definition ('onekey_def',
'twokey_def', 'threekey_def', 'define_scrap') as well as the
'end_macro' function. It is important to have at least one of these
functions directly assigned to a key; if you use them from the menu,
you will record the keystrokes leading to them menu as well!
Saving Macros
-------------
Using the single key save and load functions, you can save
favorite macros to named files for later recall. Single saving also
saves the key sequence the macro is attached to, and loading it in
again will redefine the key.
Bingo 3.10 Reference Manual
65
Saving the Entire Key Set
-------------------------
Bingo also allows you to save the entire key table, including all
key assignments and all macros, for later recall. Recalling a keyset
file will overwrite the entire key table, so be warned.
When you save a keyset file, you can name the keyset file, and
you can have it saved in Bingo's home directory or in an arbitrary
directory. If you name it Keycfg.set, it becomes the default file
keyset, depending where you put it. When Bingo starts up, it looks
first in the current directory, then in its home directory for
KEYCFG.SET. This allows you to have multiple key configurations in
different disk locations while still maintaining one executable.
Executing a Macro File
----------------------
You may also execute any macro which was single saved to a file
at any time. This executes it one, without disturbing the current key
table assignments. Good for macros used infrequently, but which are
very useful. I have a whole library of interesting ones saved at this
point.
Function List
----------------------------------------------------------------------
Define_scrap
----------------------------------------------------------------------
Start scrap macro definition.
Onekey_def
----------------------------------------------------------------------
Start single-key macro definition.
Twokey_def
----------------------------------------------------------------------
Start two-key macro definition.
Threekey_def
----------------------------------------------------------------------
Start a three-key macro definition.
Scrap
----------------------------------------------------------------------
Execute the scrap macro.
Single_key_save
----------------------------------------------------------------------
Save a single macro to a file for later recall. Saves the key it is
attached to also.
Bingo 3.10 Reference Manual
66
Single_key_load
----------------------------------------------------------------------
Load a single macro from a file. Overwrites the current definition
for the key, if it has one.
Key_set_save
----------------------------------------------------------------------
Saves entire keyset, including macros, but not the scrap.
Key_set_load
----------------------------------------------------------------------
Load entire keyset.
Run_macro_file
----------------------------------------------------------------------
Runs a macro from a file saved with single_key_save.
Undefine_key
----------------------------------------------------------------------
Undefines a key.
End_macro
----------------------------------------------------------------------
Ends the recording of a current macro. Mostly useless, but it made
for a useful menu entry.
Bingo 3.10 Reference Manual
67
Navigation
----------
Navigation in Bingo is very straightforward. You may move in
terms of characters, lines, words, windowfuls, and the entire file.
You can also jump to the beginning and end of a marked block.
Finally, you can jump to a specified line, or by a relative number of
lines, or to a column, or by a relative number of columns, or by both
lines and columns in the file using the Jump function.
In addition, Bingo supports placemarks. I had never really used
placemarks much, or "bookmarks" as they are sometimes called. But a
buddy of mine told me to try them when in big files, and I was
impressed. But the editor I tried them in allowed only one; this is
just not enough. So I went one better. Actually, I went 9 better.
Bingo provides 10 placemarks. You can drop one or jump to one.
Each placemark defines a file, a line, and a column. When you try to
jump to a placemark and the file it pertains to is not in the ring,
the file will be fetched.
Function List
----------------------------------------------------------------------
Down_page
----------------------------------------------------------------------
Moves down one windowful.
Up_page
----------------------------------------------------------------------
Moves up one windowful.
Cursor_right
----------------------------------------------------------------------
Moves right one char; wraps if necessary and if bounce mode is active.
Cursor_left
----------------------------------------------------------------------
Moves left one char, wraps if necessary and if bounce mode is active.
Cursor_up
----------------------------------------------------------------------
Moves up one line.
Cursor_down
----------------------------------------------------------------------
Moves down one line.
Back_tab
----------------------------------------------------------------------
Moves back to the previous tab stop. Does not change the text at all.
Bingo 3.10 Reference Manual
68
Begin_line
----------------------------------------------------------------------
Goes to beginning of line.
End_line
----------------------------------------------------------------------
Goes to end of line.
Top_of_file
----------------------------------------------------------------------
Jump to top of file.
Bot_of_file
----------------------------------------------------------------------
Jump to bottom of file.
Next_word
----------------------------------------------------------------------
Goes to beginning of next word.
Prev_word
----------------------------------------------------------------------
Goes to beginning of previous word.
Top_of_screen
----------------------------------------------------------------------
Jumps to the top of screen.
Bottom_of_screen
----------------------------------------------------------------------
Jumps to the bottom of screen.
Top_of_block
----------------------------------------------------------------------
Jumps to the top of marked block.
Bottom_of_block
----------------------------------------------------------------------
Jumps to the bottom of marked block.
Jump
----------------------------------------------------------------------
Jump to position, column, line or both. The format is:
[(+/-)row][,(+/-)column]
If the number is prefaced with a '+' character, Bingo will jump the
relative distance forward. If the number is prefaced with a '-'
character, Bingo will jump the relative distance backwards. Otherwise
the number will be interpreted as an absolute. Either number, or
neither, may be omitted.
Bingo 3.10 Reference Manual
69
Center_line
----------------------------------------------------------------------
Makes the current line the center line of the current window, and
repaint the entire screen, all windows.
Begin_of_text
----------------------------------------------------------------------
Moves the cursor to the first non-space character on the current line.
Indent_up
----------------------------------------------------------------------
Moves to previous line with same indentation scheme as current line.
Indent_down
----------------------------------------------------------------------
Moves to next line with same indentation scheme as current line.
Snap_to_mouse_xy
----------------------------------------------------------------------
Moves the cursor to the current mouse position, changing windows if
necessary.
Mouse_scroll
----------------------------------------------------------------------
Moves the cursor to the mouse position when the mouse button is
released; while the button is depressed, the file will scroll up and
down, depending on where the mouse cursor is moved. The closer the
cursor is to the top and bottom (and left/right for horizontal
movement) of the window, the faster the file will scroll.
Place_mark
----------------------------------------------------------------------
This function will pop up a list of the current definitions of the ten
placemarks. By pressing '0' to '9', you define the selected placemark
as the current position & file. Each placemark contains the file
name, the line, the column.
Jump_mark
----------------------------------------------------------------------
This function will pop up a list of the defined placemarks and allow
you to choose which one '0'-'9' you wish to jump to. If the specified
file name is not in the ring, Bingo will go and get it.
Scroll_up
----------------------------------------------------------------------
Scroll the display up one line, keeping the cursor in its same place.
Scroll_down
----------------------------------------------------------------------
Scroll the display down one line, keeping the cursor in its same
place.
Bingo 3.10 Reference Manual
70
Scroll_left
----------------------------------------------------------------------
Scrolls the screen to left (the text to the right).
Scroll_right
----------------------------------------------------------------------
Scrolls the screen to right (the text to the left).
Last_position
----------------------------------------------------------------------
Returns to the previous cursor position in the current file.
Bingo 3.10 Reference Manual
71
System Operations
-----------------
Bingo supports a number of system operations. While they are not
large in number, they are large in utility.
Simple Execution and Shelling
-----------------------------
The 'exec_command' function simply executes a given DOS command
line and returns. It does not do anything fancy, and Bingo will
remain in memory (consuming quite a bit of memory) but it is fast and
simple for issuing short commands.
The 'shell' function is identical to 'exec_command', except it
takes no arguments. It simply gives you a DOS shell.
Swap Execution and Shelling
---------------------------
More often than not, particularly in the case of executing
command-line compilers, you simply can't afford to let Bingo hang
around in memory, since it consumes a bit. So Bingo provides two
other methods for executing commands. While they appear identical in
form and function to the previous pair of functions, 'swap_execute'
and 'swap_shell', are much more interesting.
While they, too, execute a command or shell to DOS, prior to
doing so, they save all relevant information such as copies of the
current files, etc., then swap Bingo out of memory. When this
happens, a 3k kernel is left behind to manage things until the command
is finished; then it will reload Bingo. Notice that the method of
Bingo swapping out is now much different with version 3.00; thanks to
Ralf Brown's excellent SPAWNO swapping routines.
Function List
----------------------------------------------------------------------
Chdir
----------------------------------------------------------------------
Change the currently logged directory.
Exec_command
----------------------------------------------------------------------
Execute a DOS command, while leaving Bingo completely resident in
memory.
Shell
----------------------------------------------------------------------
Shell to DOS, leaving Bingo completely resident in memory.
Swap_execute
----------------------------------------------------------------------
Execute a DOS command while swapping Bingo out, leaving behind an 3k
kernel.
Bingo 3.10 Reference Manual
72
Swap_shell
----------------------------------------------------------------------
Shell to DOS while swapping as above.
Bingo 3.10 Reference Manual
73
Printing
--------
Prior to version 2.01, there were two functions to print, one for
the file and one for a marked block. As of version 2.01, these have
been combined into 'print_file', which prints a block if it is marked,
otherwise it prints the file.
There are a number of options governing printing. You can ask
for line numbers to be printed, page headers (time, page, file name),
and decide whether Bingo should terminate a line with a single
linefeed, or with linefeed/carriage return pairs.
You can also send standalone linefeed or formfeed character, or
send a sequence of ASCII values.
Function List
----------------------------------------------------------------------
Print_file
----------------------------------------------------------------------
Print the current file, or a marked block if there is one, using the
current printer settings, to the current destination. Whenever Bingo
encounters a formfeed character, it will assume that is the start of a
new page, and start the remainder of the line at the left margin.
Send_lf
----------------------------------------------------------------------
Send a line feed character to the destination.
Send_ff
----------------------------------------------------------------------
Send a formfeed character to the destination
Send_sequence
----------------------------------------------------------------------
Send a sequence of character values to the printer; e.g.
12,12,12,12,12
sends a series of 5 ASCII 12's (decimal) to the destination
Bingo 3.10 Reference Manual
74
Searching
---------
There are two search algorithms present in Bingo. One is very
simple and very fast, and part of it is hand-coded in assembler for a
bit more speed yet. For 95% of what you want to do, it is just right.
However, with the advent of version 2.01, a second search
algorithm was added; a regular-expression method. Regular expressions
are a mathematical way to describe strings of text, and are very
powerful. Bingo's algorithm is reliable but not overly speedy; I
suggest you keep this in mind when using it.
If you are not familiar with regular expressions, I am not going
to attempt to explain them to you here. If, however, you have used
them before, I will explain the notations I used in coding Bingo's
algorithm.
To perform a regexp search, use the 'R' modifier on you search
(or replace). If you use this modifier, the string will be
interpreted as follows:
- classes, i.e. [0-9] and 'not' classes, i.e. [~0-9]
- occurrences of once, once or none (?), one or more (+), none
or more (*)
- grouping {}
- ORing of {} groups |
- wild card character .
- match begin and end of lines with ^ and $, respectively
- support for debugging regular expression search
patterns
- along with regular expression searches, you can specify the
replacement in terms of the matched text. '@n' in the
replacement pattern places the text matching the nth group.
'@@' matches the entire matched text. This allows you to do
some nifty text manipulation.
For some simple examples, see below.
It is easy to limit the search area to a specific range by
marking a range of text in any of Bingo's three modes. Then use the
'M' modifier to say you wish to match text only within the Marked
area.
The 'C' option in the 'search' function will count the number of
occurrences of the target string in the rest of the search area.
The 'G'lobal option for search and replace operations starts from
the current cursor position, not from the top of the file.
Try the Search and Macro capability -- it is sharp.
Bingo 3.10 Reference Manual
75
Regular Expression Search and Replace Examples
----------------------------------------------
Here are some examples of regular example search and replace.
Search for --> [a-z]+/.
would match any sequence of one or more letters between 'a' and
'z' followed by a single period.
Search for --> help[a-z]+/.
would match a sequence of 'help' followed by one or more letters
then a single period. It would match 'helpoooooo.' and 'helpp.'
but not 'help.'
Search for --> 19{87}|{88}
would match '19' followed by one occurrence of either '87' or
'88'.
Search for --> 19{87}*|{88}
would match '19' followed by none or more occurrences of '87' or
a single occurrence of '88'. Thus it would match '19',
'1987878787', or '1988'.
Search for --> .
matches any single character. (Note: /. would match a an actual
period.)
Search for --> ^[a-z]+
matches a sequence of 1 or more letters, provided it starts a
line.
Search for --> ^[a-z]+$
matches a sequence of 1 or more letters, provided it starts a
line and ends a line.
Search for --> ^[a-z]+/.[a-z]+
basically matches file names made up of alpha characters, which
are found at the beginning of a line.
Search for --> ^$
matches a blank line.
Search for --> ^.
matches a non-blank line.
These last two allow you to do some neat stuff using
the macro capability, i.e., apply a macro to every
non-blank line.
Bingo 3.10 Reference Manual
76
Search for --> {[a-z]+}{/.}{[a-z]+}
Replace with --> @3.@1
This will match a sequence of one or more letters, followed by a
period, followed by one or more letters (a file name,
essentially). The replace will put the text matching the 3rd
group first, then a period, then the text matching the 1st group.
On a file name, this will have the effect of reversing the order
of the name and the extension, i.e:
filename.txt
would become
txt.filename
since 'filename' would match the first group and 'txt' matches
the third group.
Incremental Searching
---------------------
Version 3.10 adds an incremental search facility. This searches
forward, finding a match as you extend the string. Hitting the <TAB>
key will cause it to find the next match. Pressing <Backspace> will
backup one match. Pressing <Return> will end the search and leave
you at your current position; Pressing <Escape> will return to where
the search began.
Function List
----------------------------------------------------------------------
Again
----------------------------------------------------------------------
Repeat the last search operation. If none has yet been done, works
just like search. If the last search operation done was a search and
replace, only the search portion is done.
Search
----------------------------------------------------------------------
Search for text. Will ask for the target text, and then the
modifiers:
A Accent
B Backwards
C Count
D Debug
F search through all Files
I Ignore case
M Marked
R Regexp
T start at the Top of the workspace
The 'A' option tells Bingo to highlight the 'found' text until
Bingo 3.10 Reference Manual
77
the next keystroke arrives.
The 'B' modifier will search backwards.
The 'C' option simply counts the number of occurrences.
The 'D' option tells Bingo that, if you also specify regular
expression searching, before searching display Bingo's interpretation
of your regular expression.
The 'F' option tells Bingo to treat all the loaded files as the
search space. This allows Bingo to find the next occurrence, even if
it is in another file.
The 'I' option tells Bingo to ignore case when searching.
The 'M' option tells Bingo to only matched text *completely*
within marked text.
The 'R' option tells Bingo to interpret the input string as a
regular expression. See the section on searching for more details.
The 'T' option tells Bingo to start at the beginning of the
search space. If the 'I' option is also used, this is the bottom of
the file; if not, the top of the file. If the 'F' option is also
used, it is the last/first file.
Isearch
----------------------------------------------------------------------
Incremental search. Searches for a match to the target string
interactively, as you type in each character, Bingo searches for a
match and moves there. Pressing <TAB> finds the next search; pressing
<Backspace> backs up one match. Pressing <Return> will end the search
and leave you at your current position; Pressing <Escape> will return
to where the search began.
Isearch_files
----------------------------------------------------------------------
Works just like Isearch, only it will search across files. If a match
is not found in the current file, it will look in the next, and so on.
Replace
----------------------------------------------------------------------
Search and replace text. Will ask for target, replacement text, and
three modifiers:
B Backwards
D Debug
F search across Files
G Global Search/Replace
I Ignore Case
M Marked
P Preserve
R Regexp
T Top of search space
If Global is selected, Bingo will simply replace all matching
occurrences with the replacement text. If not, Bingo will stop at
each match and ask:
Yes: replace and continue.
No: don't replace, but continue search.
Bingo 3.10 Reference Manual
78
Only: Replace this and stop
Quit: stop, no replacement.
Global: Continue with global replacement
'M', 'R', 'F', 'T' and 'A' options work as in the search case.
'P' tells Bingo to preserve the original cursor location and
return to it when done with the replace operation.
'D' is useful for regular expression work. It tells Bingo to
display its conception of the target string (grouping, classes,
occurrence, etc).
Search_apply
----------------------------------------------------------------------
Will act like the 'search' function, but will ask for either:
- a key to apply.
- a Bingo command line to execute (as if it were used with the
'cmd_line' function).
- a Chess command (as if it were used with the 'exec_chess'
function).
when found. It will work like the replace function, but instead of
replacing, it will execute the given key. DO NOT use this function
while recording a macro.
Mark_last_found
----------------------------------------------------------------------
His will unmark the file and mark the last found text if you have not
moved.
Bingo 3.10 Reference Manual
79
Utilities
---------
Bingo provides large number of utilities to be used to manipulate
text. Some of the functions available can:
- change the case of a block
- strip the high bit from characters in a block
- place tabs within text, and expand tabs within text
- shift blocks a certain number of spaces
- align lines with other lines
- sort blocks, in ascending or descending order, on a
particular column
- fill a vertically marked block with a specific character
- format a paragraph
- count the number of words over a span of lines
- insert the current time and date into the file
- center text
The big thing with the utilities is: play with them. They allow
you to do some really useful things to your text,particularly when you
are reformatting. Particularly, entab/detab/indent_tab are very
useful when importing files from other systems/editors. You can take
a file with hard tabs in it which assumed a tab size of 8 characters,
detab it, change the tab size to 3, entab it, and save it ready for
another editor which demands hard tabs with a tab size of 3.
Function List
----------------------------------------------------------------------
Entab
----------------------------------------------------------------------
Compresses the line marked region specified or the entire file by
converting spaces to tabs.
Indent_tab
----------------------------------------------------------------------
Compresses the leading spaces of the line mark region specified or the
entire file by converting into the proper tabs. Rounds to the nearest
tab stop, thus "normalizing" the indention to tab stops.
Detab
----------------------------------------------------------------------
Expands the line marked region specified or the entire file by
converting tabs to spaces.
Bingo 3.10 Reference Manual
80
Shift_block
----------------------------------------------------------------------
Shifts the specified line marked region the number of columns
specified. Positive numbers indicate right-shifting, negative
numbers, left-shifting. The character 't' is used to signify tab
widths '-3t' shifts the block left 3 tab widths.
Lcase_block
----------------------------------------------------------------------
Lower cases the marked region.
Ucase_block
----------------------------------------------------------------------
Upper cases the marked region.
Fcase_block
----------------------------------------------------------------------
Flips the case of the marked region.
Word_count
----------------------------------------------------------------------
Counts the words in the line marked region, default the whole file. A
word here is defined as non-whitespace and non-punctuation characters,
NOT by the settings of the 'conf_word' function.
Strip_highbit
----------------------------------------------------------------------
Strips the 8th bit in the line marked region, default the whole file.
Sort_block
----------------------------------------------------------------------
Sorts block, ascending or descending, on a given column.
Reform_para
----------------------------------------------------------------------
Reformats a block of text to conform to the right margin; a paragraph
is defined as text between blank lines. The total amount of text
contained in a single paragraph cannot be larger than 30000
characters. The indention of the first line (the current line) is
always preserved. If Autoindent mode is turned on, the indention of
the first line will be preserved for each succeeding line.
Bingo 3.10 Reference Manual
81
Repeat
----------------------------------------------------------------------
Repeats:
- a key to apply.
- a Bingo command line to execute (as if it were used with the
'cmd_line' function).
- a Chess command (as if it were used with the 'exec_chess'
function).
N times. If N is '*', the function repeats until a search fails. The
function halts repetition on a search failure. DO NOT use this
command while you are recording a macro; you will get unpredictable
results when you replay the macro.
Dup_line
----------------------------------------------------------------------
Duplicates the current line and increments cursor to the next line.
Align
----------------------------------------------------------------------
Slides the line marked region left or right to match indentation with
the line immediately above the first marked line. If no lines are
marked, the current line is aligned.
Match_delim
----------------------------------------------------------------------
Finds the proper match for a delimiter. Delimiters are configurable
by the 'conf_delims' functions.
Time_stamp
----------------------------------------------------------------------
Inserts the current date and time into the text.
Fill_block
----------------------------------------------------------------------
Fills a vertically marked block with a specified character.
Center_text
----------------------------------------------------------------------
Centers the current non-space text of the current line (or line marked
block) on its line, relative to the right margin.
Bingo 3.10 Reference Manual
82
Windows
-------
Window_vertical
---------------
Bingo provides the ability to split windows vertically. There
are some restrictions, however. Vertical windows must always exist in
pairs; that is, two windows sharing one status line. They are also
even resized together. This is not a large problem, but you should be
aware of it.
Window_one and Window_zoom
--------------------------
While window_one and window_zoom superficially perform the same
action, remember that zoom is simply a toggle, while the 'window_one'
function eliminates all windows except the current, growing the
current window to full size.
Window_max
----------
This is a new function which is very useful -- it resizes the
current window to its maximum dimension by resizing all of the other
windows down to their *smallest* dimensions. Very useful.
Function List
----------------------------------------------------------------------
Window_edit
----------------------------------------------------------------------
This function ask for a file name, then splits the window and
essentially performs and edit_file function for the requested file
name.
Window_load
----------------------------------------------------------------------
Works like window_edit, except it forces a reload of the named file.
Window_split
----------------------------------------------------------------------
This simply splits the current window in two and uses the current file
for both.
Window_vertical
----------------------------------------------------------------------
Splits the current window vertically. Windows can only be split so
once.
Window_close
----------------------------------------------------------------------
Closes the current window and expands the above window to use its
space.
Bingo 3.10 Reference Manual
83
Window_zoom
----------------------------------------------------------------------
Toggles the display between zoomed mode. When the display is zoomed,
the current window takes up the entire display, but Bingo 'remembers'
the rest of the windows and will restore them when zoom mode is
toggled again.
Window_one
----------------------------------------------------------------------
This function makes the current window the only window, wiping out all
other windows.
Window_next
----------------------------------------------------------------------
This moves to the next window down, or wraps to the top window if
necessary.
Window_previous
----------------------------------------------------------------------
This moves to the next window up, or wraps to the bottom if necessary.
Window_top
----------------------------------------------------------------------
Jumps to the top-most, left-most window.
Window_bottom
----------------------------------------------------------------------
Jumps to the bottom-most, right-most window.
Window_resize
----------------------------------------------------------------------
This allows you to resize the current window (and its left or right
sibling, if it exists) and the window below (and *its* left or right
sibling, if it exists) by 'rubberbanding' the current status line up
and down, and left and right. Note that resizing left and right is
new for version 3.10.
Window_max
----------------------------------------------------------------------
Resizes the current window to its maximum dimension by shrinking all
of the other windows to their smallest dimensions.
Bingo 3.10 Reference Manual
84
Extra Functions
---------------
Pick and Exec
-------------
This function asks for a function descriptor to execute. The
same function descriptors are used as are used by KEYCFG. If you give
it an unrecognized descriptor, a list of all supported functions are
popped up for your convenience. If you give it substring, such as
'win', all functions descriptors which contain 'win' anywhere will be
shown; in this case the window functions. Tie this to an easy-to-
remember key and all of Bingo's functions are at your fingertips.
This is also useful when you are trying to remember a particular
function descriptor and you don't have the documentation handy.
Repeat_last
-----------
This is a handy function. It will execute the most-recently-
executed function again. It won't change what that most-recently-
executed function was.
Box Draw Mode
-------------
This is an enormously useful capability. When the
'toggle_box_draw' function is executed, you will be asked whether you
wish to use:
a) erasure mode
b) single line drawing
c) double line drawing
d) any arbitrary character drawing
After you make your choice, the 4 cursor movement functions will
respond differently. When you move the cursor up via the 'cursor_up'
function, the cursor will move up, but it will trail a line (of the
appropriate drawing type) behind. Corners and intersections will be
handled automatically. The line characters will be placed into the
text as if Bingo was in overwrite mode.
As of version 3.10, the AnyChar mode has been added, which will
allow you draw with any character from the ASCII table.
Bingo 3.10 Reference Manual
85
Cmd_line
--------
This function gives you a command line entry space on the status
line. You may enter any valid Bingo function. You only need to enter
enough of the function to make it unique; for example, 'swap_ex' is
enough to get you the swap_execute function.
Further, you can pass parameters to the function you enter
directly on the command line, using the following notation:
~<string>~ loads the string as an argument and follows it
with a carriage return.
'<string>' loads the string as an argument, but does NOT
follow it with a carriage return. If this
argument is intended to be used in a string-entry
box, Bingo will NOT wait for further input.
`<string>` loads the string as and argument, and then waits
for user input until a carriage return is entered
before proceeding.
For example:
search ~hello~ ~~ : search for the string 'hello' with the
default search modifiers.
search 'hello' ~~ : \
search ~hello~ : - these are the same; both search for
the string 'hello' but leave you at the
modifier prompt.
search `hello` ~i~ : searches for the string 'hello', but
waits for user input after entering
'hello'. After the user enters a
carriage return, Bingo continues and
performs the search using the 'i' ignore
case option.
Another example:
conf_autoindent ~~ : toggles the current autoindent setting
conf_autoindent 'y' : turns the autoindent setting on
Further, if you need to use any of '`~ in a command line, preface them
with a forward slash (/). If you need to use a forward slash, use
two. For example:
search ~search for tilde(/~)~ ~~
would search for the string "search for tilde(~)" using the default
search modifiers.
This new command-line notation may seem a bit cryptic at first,
but it is far more flexible than the prior method. It allows you to
execute virtually any Bingo command from the command-line with any
Bingo 3.10 Reference Manual
86
arguments.
Text Recognition
----------------
Version 3.10 introduces a powerful text recognition system. Text
recognition is the ability for Bingo to "watch" what the user types
and take a specified action when a certain character sequence is
observed. In the case of Bingo, you can specify that when a certain
string is seen, a certain CHESS function is called. Since that Chess
function can be the 'run' command, the CHESS statement can actually
run a CHESS program file.
You define text recognition relationships in profile files (see
the section on profile files for more information on other uses of
profile files) using lines of the form:
&recog=<text to recognize>!<chess function to execute>
For example, in the profile file for .TST file (PROFILE.TST), you
might lose the line:
&recall=hello!do_hello_func()
would cause upon activation the CHESS function 'do_hello_func' to be
called.
The <text to recognize> IS case sensitive. If you need to use an
exclamation point in the <text to recognize>, preface it wit a forward
slash '/'. If you need to use a '/' in the text, use two (2) forward
slashes.
Now, we have discussed how to *define* text recognition. There
are several functions available to let you deal with text recognition.
First, 'show_recognition' will pop up a window showing the current
text recognition definitions for the current buffer.
The 'conf_recognize' function is very important. It allows you
to choose what type of recognition is active. You can choose between
two types. The first type of recognition is 'Automatic'. In this
mode, as long as there is at least one text recognition relationship
defined Bingo will *always* watch the keyboard input stream looking
for a match. This is often not the ideal solution.
The second type of recognition is 'On-Demand'. In this mode,
Bingo normally does not watch the input stream. Only when another
function 'one_recognize' is executed, does Bingo begin to watch the
input stream. Bingo will continue to watch the input stream until it
sees a match, and then it will revert to not watching. This allows
you the ability to have a stored bank of definitions you can activate
with the touch of a keystroke.
Bingo 3.10 Reference Manual
87
Function List
----------------------------------------------------------------------
Pick_exec
----------------------------------------------------------------------
This allows you to pick a function descriptor and have it executed.
Global
----------------------------------------------------------------------
This allows you to execute any
- a key to apply.
- a Bingo command line to execute (as if it were used with the
'cmd_line' function).
- a Chess command (as if it were used with the 'exec_chess'
function).
globally, throughout all the files in the ring. When invoked, it asks
for a keystroke to execute globally. The keystroke can invoke a
macro, or simple be tied to a function. For each file in the ring,
Bingo will ask if you wish the function to be executed; your options
are the same as they are when doing a search and replace operation:
Y Yes, do operation, go to next file
N No, don't do operation, but do go to next file
O Yes, do the operation, but abort the global operation
afterwards.
G Yes, do the operation, and do it for all remaining
files without asking.
Q Abort the global operation right now.
Query_quote
----------------------------------------------------------------------
Inserts an integer or sequence of integers as its raw ASCII character.
The decimal values must be comma delimited. This function does NOT
change the cursor position.
Toggle_display
----------------------------------------------------------------------
Toggles the display size between 25 lines and 43/50 lines. Will in
all likelihood screw up the cursor shape, since the scan line counts
will change.
Load_profile
----------------------------------------------------------------------
Loads the profile file of your choice, searching first the current
directory then Bingo's home directory.
Bingo 3.10 Reference Manual
88
Write_profile
----------------------------------------------------------------------
Saves the text settings of the active buffer to the profile file of
your choice in either the current directory or Bingo's home directory.
The settings you can use include the ones from the .INI listing (see
the section on BINGO.INI) as well as the text recognition keyword (see
the section on text recognition) and one additional one:
&run=<chess_fname>
See the Chess documentation for more information on the &run keyword.
Repeat_last
----------------------------------------------------------------------
Repeats the last function executed.
Display_file
----------------------------------------------------------------------
Will pop up the named file into a scrollable box, similar to the help
file.
Exec_chess
----------------------------------------------------------------------
This function will execute a single line of Chess code, typically a
function or a function with its arguments.
One_recognize
----------------------------------------------------------------------
This function tells Bingo's text recognition system (when it is in On-
Demand mode) to watch for the next match and then go back to On-Demand
mode.
View_screen
----------------------------------------------------------------------
Allows you to view the DOS screen which was active when you prior to
starting Bingo. This is only available if you have this option turned
on via the 'conf_scr_save' function.
Bingo 3.10 Reference Manual
89
Chess: Bingo's Extension Language
---------------------------------
Introduction
------------
This section serves as the reference text for the Chess
procedural language used by Bingo. Chess is a simple yet powerful
language with much in common with the C programming language. While
Bingo has been around for a number of years, as it grew more and more
powerful I began to see that a procedural language would be necessary
for users to fully unlock the power of Bingo. And so, in November of
1991 I began looking into interpreter and compiler theory.
Adding a procedural language to an application is not a trivial
undertaking. There are a number of issues which all conflict with
each other: the addition couldn't bloat Bingo beyond measure; the
language couldn't be too trivial to be useful; Bingo had to work as
easily with it as without it.
It was immediately clear that implementing an interpreter was far
easier than a compiler. However, interpreted code is usually far
slower than compiled code. But when I reflected on this, it occurred
to me that most of a subprogram would be calls to Bingo functions,
which would operate very quickly indeed. So an interpreter was indeed
feasible for what I had in mind.
Modeling the interpreter after the C programming language was
also appealing, not just because I am most comfortable programming in
C. I was able to locate several texts which used C as a teaching
interpreter. This made the learning much easier.
By April of 1992, I had a working standalone interpreter,
designed so it would graft easily onto another application, and I had
learned a whole lot about lexical analysis and interpreter theory.
Now all I had to do was graft this onto Bingo! After a lot of design
work, I started implementing it, and within a month it was reasonably
complete. The time since has been spent refining the interpreter,
judiciously adding to the system function library, and testing,
testing, testing!
Bingo 3.10 Reference Manual
90
Things to Possibly Come
-----------------------
Obviously, given the design of Chess, adding more library
functions is in the future. Chess's capabilities have to be kept in
step with Bingo's own growth. However, it is paramount that Chess
stay relatively small. The code for Chess added less than 20k in
total to Bingo's executable and I don't want that to grow unchecked.
This release of Chess is fully functionally, but the code is
currently tuned for functionality, not for speed. Future versions of
Chess will be much more optimized for execution speed.
Bingo 3.10 Reference Manual
91
The Body of a Chess Program
---------------------------
A Chess program consists of the following format:
<type> <global_varname1>
...
<type> <global_varnameN>
{
<type> <local_varname1>
...
<type> <local_varnameN>
<statement1>
...
<statementN>
}
<function_name1>
<argtype> <arg1>
...
<argtype> <argN>
{
}
...
<function_nameN>
{
<argtype> <arg1>
...
<argtype> <argN>
{
}
The variables declared as <global_varname> are known as global
variables, while the variables declared as <local_varname> are local
variables. Now we will take a look at what comprises these variables
and statements.
Bingo 3.10 Reference Manual
92
Variables and Constants and Comments
------------------------------------
Like most procedural languages, Chess programs are composed of
three basic building blocks, Variables, Constants, and Comments.
Variables are locations which hold information. You can
visualize them as shoeboxes with names. Each of these locations can
hold one of two basic types of information, integers (whole numbers)
or characters (like the letter 'a'). Additionally, Chess uses
'arrays' of variables (groups of 1 or more basic objects) and
'pointers' to basic objects. Arrays and pointers will be discussed in
the next section. Variables which haven't had a value assigned to
them always start out loaded with zeros.
Integers and Characters:
Integer Chess variables are defined like this:
int int_var;
This defines the variable 'int_var' as a Chess integer. Chess integer
variables are represented internally as 4-byte values able to hold
whole-number values in the range of -2147483648 to +2147483647.
Character Chess variables are defined like this:
char c_var;
This defines the variables 'c_var' as a character variable. Chess
character variables are 1-byte values, and the values they can hold
equate to the IBM Extended ASCII character set (see Bingo's ASCII
Chart for a complete listing). These letters have integer
representation as well, for instance, the character 'A' has s decimal
representation of 65.
Variable names can be comprised of letters [a-zA-Z], digits [0-
9], and the underscore character, and they are case sensitive. The
first 7 characters are significant. You can define multiple variables
on the same line:
int int_var1,int_var2;
Constants:
Constants are numeric, character and string literal values.
Numeric constants consist of an optional negative sign [-] and one or
more digits[0-9]. For example:
123 12345 -90 -987654321
are all integer constants.
Character constants consist of a single character, (such as A),
between single quotes ('). For example:
'A' 'a' '1' 'p'
are all character constants.
String constants are the third type of constant Chess supports.
String constants consist of a string of characters enclosed between
double quotes. For example:
"Hello!" "Hi" "12,345 bottles of Beer"
are all string constants.
Bingo 3.10 Reference Manual
93
Comments:
Comments are also very important in Chess; they are strings of
text in a program which are there for we humans to read, and for Chess
to ignore. Comments help the programmer document what he is doing in
the program. Comments begin with the two-letter sequence '/*' and
extend until the end of the current line. For example:
int i; /* define i as an integer
The sequence '/* define i as an integer' is a comment.
Bingo 3.10 Reference Manual
94
Arrays and Pointers
-------------------
Using the two basic building block data types, integer and
character, you can derive two other types of variables. Arrays are
"lists" of like types, and Pointer variables are variables which hold
the address or location of other variables.
Arrays:
To define a character array, use the following:
char var_name[10];
What does this mean? This means, define a variable named 'var_name'
as a list of 10 character blocks. In Chess, you will deal with
'strings' as a data type; a 'string' is a pointer to an array of
characters containing a sequence of characters followed by a zero
byte. Hence the term "zero terminated" string.
Similarly, an integer array would look like this:
int int_name[20];
This would define 'int_name' as a list of 20 integer blocks.
So what does this mean? Well, with arrays, you can access each
element individually. For example:
int i[20];
i[0]=1;
i[19]=2;
This code fragment shows that you can access each individual element.
Note that when you define an array N elements long, the elements are
numbered 0 to (N-1).
Pointers:
A *pointer* variable is a variable which holds the address of
another variable. For example, in the declaration:
int i[20];
i[5], i[6], and i[8] are all Integer variables; however, 'i' all by
itself is a pointer to the integer array, called an Integer Pointer.
Similarly, in the declaration:
char hello[20];
hello[0], hello[5], and hello[9] are all Character variables. 'hello'
all by itself is a Character Pointer; a variable which holds the
address of a character array.
What do you need pointers for? Well, primarily you use them to
pass arguments back and forth to user and library functions. You will
see a lot of this in the sections on functions, but here are some
examples:
{
char temp[80]; a)
strcpy(temp,"Hello!"); b)
}
This program does 2 things. First, a) declares an array of characters
80 characters long. Then, b) calls the library function 'strcpy'.
'strcpy' is used to copy the contents of one string into another.
Bingo 3.10 Reference Manual
95
Strings in Chess are similar to those in C, as they are character
arrays terminated by a character with a value of zero (0). So, strcpy
will fill in the contents of the array 'temp' with the string
"Hello!". After this function call, temp will look like this:
temp[0]='H'
temp[1]='e'
temp[2]='l'
temp[3]='l'
temp[4]='o'
temp[5]='!'
temp[6]=0
You can do arithmetic on pointers, similar to C, with on caveat.
Look at this example:
{
char temp[80]; a)
strcpy(temp,"Hello!"); b)
msg("%s",temp); c)
temp=temp+1; d)
msg("%s",temp); e)
}
Here we loaded 'temp' with the string "Hello!", just as before, then
we did c), using the library function 'msg' to display the contents of
'temp, the string "hello!". Then d) increments temp by one byte. Now
when we execute e), temp points one byte further along than it did,
and 'msg' will print out "ello!". Now, temp[0] is 'e', not 'h'.
Similarly, you can increment integer pointers, but there is
something to remember. Look at this example:
{
int temp[80]; a)
temp[0]=1; b)
temp[1]=2; c)
msg("%ld",temp[0]); d)
temp=temp+4; e)
msg("%ld",temp[0]); f)
}
In this code fragment, a) declares am array of integers. In b) and c)
we set the first and second members of the arrays to 1 and 2
respectively. d) using the 'msg' function to print the value of
temp[0], which is 1. e) increments temp by *4* bytes -- this is very
necessary as each integer is 4 bytes wide. Now when we print out
temp[0], we get 2, as temp points to a different place.
Bingo 3.10 Reference Manual
96
Sometimes you will wish to declare a pointer without declaring
any storage to go along with it. You can do this in the following
way:
{
char temp[80]; a)
char p[0]; b)
strcpy(temp,"Hello"); c)
p=temp; d)
msg("%s",p); e)
}
Here, a) declares a character array with space for 80 characters. b)
declares a character array with *no* members; this declares 'p' to be
a pointer to a character buffer. c) copies the string "Hello" into
'temp'. d) assigns 'p' to point at 'temp'. Finally, e) prints the
character buffer pointed to by 'p', the string "Hello".
Bingo 3.10 Reference Manual
97
Operators and Expressions
-------------------------
Operators
Operators are used to do mathematical operations, such as
subtraction and division. There are sixteen operators recognized by
Chess. Assuming 'a' and 'b' are declared as integers, they are:
Operator/Precedence Description
------------------- -----------
unary + (1) When used all by itself before a number
(or variable), denotes the number as a
positive. It is for readability
purposes.
unary - (1) Used to show a number (or variable) is
negative. For example: -a to use the
negative of 'a'.
* (2) Multiplication. For example: a*b
multiples a times b.
/ (2) Division. For example: a/b divides a
by b. Fractions are discarded, so 5/3
is one; 4/3 is also one.
% (2) Modulo or remainder operator. a%b
calculates the remainder of a when
divided by b. So 7%3 is 1, and 8%3 is
2.
+ (3) Addition. a+b adds a and b together.
- (3) Subtraction. a-b subtracts b from a.
< (4) Less than comparison. a<b will evaluate
to 1 if a is less than b, 0 if not.
> (4) Greater than comparison. a>b will
evaluate to 1 if a is greater than b, 0
if it is not.
<= (4) Less than or equal comparison. a<=b
will evaluate to 1 if a is less than or
equal to b, 0 if not.
>= (4) Greater than or equal comparison. a>=b
will evaluate to 1 if a is greater than
or equal to b, 0 if not.
Bingo 3.10 Reference Manual
98
== (4) Equal comparison. a==b evaluates to 1
if a is equal to b, 0 if not.
!= (4) Not equal comparison. a!=b will
evaluate to 1 if a is not equal to b, 0
if it is.
&& (4) Boolean AND operator. a&&b evaluates to
1 if both a and b are nonzero, 0 if
either or both are 0.
|| (4) Boolean OR operator. a||b evaluates to
1 if either a or b, or both, are
nonzero. If both are zero, evaluates to
zero.
= (5) Assignment. a=b sets a to be the value
of b.
The precedence value shows the order in which the operators are
processed. For example:
7*3+5
would evaluate the 7*3 first, since '*' has a precedence higher than
'+', then the 21+5 would be evaluated, giving 26.
Parenthesis can be used to change the order of operations. For
example:
(7*3)+5 evaluates to 26 while
7*(3+5) evaluates to 56.
Expressions
Expressions are comprised of operators, parenthesis, and values.
Operators and parenthesis were discussed above. Values are made up
several different things:
Constants Variables Functions
Constants were discussed previously, as were variables. Functions,
both user and library, always return a value and work like special
variables. For example:
int i;
i=(7+8)*happy(1)+hello(2);
where 'happy' and 'hello' are function names.
Bingo 3.10 Reference Manual
99
Program Statements
------------------
While Chess is very similar to the C programming language, there
are only 5 real statements:
if if-else
while return
break
In addition, a valid expression is a valid statement.
Chess statements must be one to a line of text; you cannot have a
statement (and this includes an expression) span more than one line.
Each statement may be followed on its line by a comment. Each
statement may be followed by a semicolon (;).
IF
The 'if' statement is used to make simple decisions. Its syntax
is:
if (expression)
<statement>
If the 'expression' evaluates to a nonzero value, the <statement> will
be executed. If 'expression' evaluates to zero, <statement> will be
skipped. So:
int i,j;
i=5;
j=0;
if(i<5)
j=10;
Here, 'j' will be left the value '0', because the comparison 'i<5'
will evaluate to zero.
IF-ELSE
The 'if-else' statement is also used to make simple decisions.
Its syntax is:
if (expression)
<statement1>
else
<statement2>
If the 'expression' evaluates to a nonzero value, <statement1> will be
executed. If 'expression' evaluates to zero, <statement2> will be
executed. So:
int i,j;
i=5;
j=0;
if(i<5)
j=10;
else
j=5;
Here, 'j' will be left the value '5', because the comparison 'i<5'
will evaluate to zero.
Bingo 3.10 Reference Manual
100
WHILE
The 'while' statement is used to repeat the execution of a
statement, testing at the beginning of each iteration. The syntax is:
while (expression)
<statement>
Here, for as long as 'expression' evaluates to a nonzero value,
statement will be executed. Before each <statement> is executed,
'expression' will be re-evaluated. So:
int i;
i=0;
while(i<10)
i=i+1;
Here the statement 'i=i+1' will be executed 10 times, and 'i' will be
left with the value '10';
DO ... WHILE
The 'do ...while' statement is used to repeat the execution of a
statement, testing at the end of each iteration. The syntax is:
do
<statement>
while (expression)
Here, for as long as 'expression' evaluates to a nonzero value,
statement will be executed. After each <statement> is executed,
'expression' will be re-evaluated. So:
int i;
i=0;
do
i=i+1;
while(i<10)
Here the statement 'i=i+1' will be executed 10 times, and 'i' will be
left with the value '10';
RETURN
The 'return' statement is used to interrupt control flow at the
current level and return a value. It is primarily used to terminate
the execution of a function. For example:
square (n)
int n;
{
return( n * n );
}
This function will takes a single integer as an argument, and returns
its square.
Bingo 3.10 Reference Manual
101
BREAK
The break statement interrupts the execution of the currently
looping WHILE statement. It can only be used within a WHILE loop.
For example:
int i,j;
i=0;
while(1)
if(i==10)
break;
else
i=i+1;
j=0;
This will loop until 'i' is equal to 10, then 'break' out of the loop
and assign zero to 'j'.
Compound Statements
In the above definitions, several statements operate on other
statements. In addition to using a single statement for <statement>,
you can use multiple statements as a single statement via the '{}'
operators. For example:
int i;
i=0;
while(1){
if(i==10)
break;
i=i+1;
}
Here the sequence: { if(i==10) break; i=i+1; } is treated as a single
statement. This allows you to create complex code using the above
simple statements.
Bingo 3.10 Reference Manual
102
User Functions
--------------
Functions are very powerful constructs used to encapsulate common
chunks of functionality. Function always return a value; if they do
not explicitly return a value, they will return zero. They can be
used anywhere in an expression, except to the left of an assignment
operator. *User* functions are function which you, the user, write
for your own benefit.
An Example Chess Program:
int i,j;
square
int n;
{
return(n*n);
}
{
i=1;
while (i<10)
{
j=square(i);
msg("%ld*%ld = %ld",i,i,j);
}
}
Declaration
The declaration of a function is as follows:
<fname>
<argtype> arg1;
...
<argtype> argN;
{
<statement1>
...
<statementN>
}
A function may have zero or more arguments declared. If there are no
arguments passed to it, the parentheses are not necessary. If you
look at the example above, you will note several things. First of
all, to *call* the function, you use the syntax:
<function_name> ( arg1 .. argN )
the user function 'square' is called in the above example as:
j=square(i);
This calls the function 'square', passing the argument value of 'i'
into 'square'. This value maps to 'square's first argument, 'n',
which is multiplied by itself and the returned, placed into 'j'.
The number of arguments *passed* into a function must equal the
number of arguments *declared* for the function. For example, you
could not use:
j=square(10,3);
as this tries to use 2 arguments for the function square, which is
Bingo 3.10 Reference Manual
103
declared to use only one.
Arguments are passed into functions by passing their value.
Therefore, a function cannot change the value of an argument. For
instance, in our example above, 'i' is not changed by the use of 'n*n'
in the function. If we had a function:
foo
int n;
{
n=10;
}
and we called it using:
i=5;
foo(i);
'i' would still have a value of 5, since changes to 'n' within the
function 'foo' don't affect the argument 'i'.
So how do you have a function change a variable? To do this, you
must pass a *pointer* to the variable you wish to change. For
example:
foo
int n[0]
{
n[0]=10;
}
and we called it using:
int i[1];
i[0]=4;
foo(i);
Now 'i[0]' will have the value '10'. Here what was passed to 'foo'
was not the value of 'i[0]', but rather the address of the integer
array variable 'i'.
You can do the same thing for strings. Consider:
foo
char s[0];
{
strcpy(s,"Hello");
}
and
char temp[80];
foo(temp);
Here the call to 'foo' passes in the pointer 'temp' to the argument
's'. Then 'foo' uses the system function 'strcpy' to copy in the
string "Hello" to the address 's'. Since 's' maps to 'temp', the
string "Hello" is actually copied into the array 'temp'.
Bingo 3.10 Reference Manual
104
Variable Scope
There is one important concern to keep in mind when using
functions, and that is "variable scope". To illustrate this, look at
this program:
int i;
hello
int n;
{ /* function hello
i=i+n;
}
{ /* main program
int i;
i=0;
while(i<10){
hello(i);
i=i+1;
}
}
Here you will notice the variable 'i' is declared twice, once as a
global value and once as a local value within the main program. So
how does Chess know which one to use? That is where variable scope
comes into play.
The Rules of Scoping
1) If the reference is within the main program and the variable
is declared within the main program, that declaration is used.
2) If the reference is within the main program and the variable
is *not* declared within the main program, the global declaration
is used.
3) If the reference is within a function and the variable is
declared within the function, that declaration is used.
4) If the reference is within a function and the variable is
*not* declared within the function, the global declaration is
used.
So how do these rules apply above? There are two declarations of the
variable 'i'. When 'i' is referenced within the main program, the
main program declaration should be used. These variable 'i' is
separate from the global declaration of 'i' on the first line. Now
when 'i' is referenced within the function 'hello', there is now local
declaration within 'hello', so therefore the global declaration of 'i'
on the first line is used.
Bingo 3.10 Reference Manual
105
Library Functions
-----------------
Library functions are functions which are predefined for you by
Chess. There are many, and they can perform a variety of tasks. See
the "Library Function Reference" section for details. Library
functions can be used just like user functions. If a user function or
variable is defined with the same name as a library function, the user
function or variable will be ignored.
Bingo 3.10 Reference Manual
106
Using Chess From Within Bingo
-----------------------------
Bingo is a powerful text editing engine and Chess is a very
capable procedural language. How do you use the two in concert to
meet your editing needs?
- how to run a chess program
- how to embed chess calls in macros in keycfg
- how to tie programs to keys
- show all the power of the 'run' command
Chess Code in a *.CFG File
--------------------------
The first place Chess program code can exists is in your .CFG
file, which KEYCFG turns into a .SET file. This is where you place
the Chess functions you wish to be able to execute within a Bingo
editing section. The way this is done is by enclosing a full chess
program, or just a collection of Chess subfunctions in your .CFG file.
The code itself is placed between the two lines:
chess-begin
and
chess-end
each on a line alone. For example:
<normal Keycfg key assignments...>
chess-start
char temp[80];
{ /* main program
msg("Bingo has started up!");
getkey();
}
/* this function will run the current file as subprogram.
run_current
{
char temp[80],name[20]; /* declare working variables
int i;
bingo("modify_save"); /* save current file if dirty
i=ask("file_path",temp) /* get the file's path
ask("file_name",name) /* get the file's name
strcpy(temp+i,name); /* add the name to the path
return(run(temp)); /* run the file and return
}
Bingo 3.10 Reference Manual
107
show_count /* function to count off
int n; /* one parameter
{ /* start function
int i; /* declare an int
i=1; /* start at 1
while (i<=n){ /* until n...
msg("Now at %ld!",i); /* show the value
getkey(); /* wait for a keystroke
i=i+1; /* add 1 to i
}
msg("All done!!!!"); /* all finished!
getkey(); /* wait for a final keystroke
} /* end of the function
chess-end
Here the code in the main body of the program will be executed
when Bingo starts up. The functions 'run_current' and 'show_count' is
defined but not actually used by the start up code.
Attaching Chess Functions to Keystrokes
---------------------------------------
In the above example the function 'run_current' was defined
without being directly used. It is easy to attach this, or any other
defined Chess function, to a specific set of keystrokes. You do this
via Keycfg such as:
#e run_current();
would define the Alt-e keystroke combination to run the function
'run_current' with no arguments. Likewise:
#c show_count(9);
defines the Alt-c combination to invoke the function 'show_count'
function with an argument of 9.
The Chess Command Line in Bingo
-------------------------------
From within Bingo itself, you can execute an arbitrary Chess
function, with or without arguments, with no problem. The function
used to do this is 'exec_chess'. This function will present a command
line, on which a single Chess function call and its arguments can be
entered. For example, assuming the above code was entered in the .CFG
file and compiled to a .SET file by KEYINFO, this line:
show_count(4);
would invoke the 'show_count' function with an argument of 4.
Bingo 3.10 Reference Manual
108
Chess Program Files
-------------------
One place Chess program code can reside is in your .CFG file
(which is turned into a .SET file); another is in a Chess program
file. A Chess program file is a text file containing a Chess
function. For example:
--------------- cut here ------------------------------------------
/* this routine functions the same as HEXKEY.COM
/* it displays the hex and decimal value of a keystroke
{
int i;
msg("Press any key ... (Escape exits)");
i=getkey();
while((i%256)!=27)
{
msg("Value is %04lx [%06ld] ... Press a key ...",i,i);
i=getkey();
}
}
--------------- cut here ------------------------------------------
This program duplicates the functionality of the HEXKEY.COM program --
it outputs the scan code/ASCII value of a keystroke. It will loop
until you press the Escape key. This program is included with the
distribution of Bingo as HEXKEY.CHS. To run this program (or any
other Chess program) from inside Bingo, use the Chess interpreter.
When the Chess interpreter prompts you for input, use the Chess system
call 'run'. For example, in this case you would use the 'exec_chess'
function and the input:
run("hexkey.chs");
This is assuming HEXKEY.CHS is in the current directory. *Any* Chess
program file can be run from within Bingo in this manner.
Attaching Chess Functions to Profile Files
------------------------------------------
Another very powerful way to execute Chess files is through a
profile file. Profile files are discussed in detail in the Bingo
manual under the 'write_profile' function. One of the parameters
which can be set in a profile file is the '&run' parameter. This
parameter is used to name a file containing a Chess program to
execute. The syntax for using this in the profile file is:
&run=c:\test.chs
This instructs Bingo to execute the Chess program contained in
"c:\test.chs" when the profile file is loaded. Remember, profile
files are loaded based on a file's extension.
Bingo 3.10 Reference Manual
109
Running a Chess File on Start Up
--------------------------------
Finally, you can tell Bingo to directly execute a Chess program
file using the '-c' command line flag. For example:
be -cc:\test.chs
will run the Chess program file "c:\test.chs" on start up. Note that
you may only run one Chess file on start up, though of course that
program could run as many others as it wanted, using the Chess library
function 'run'.
Order of Execution on Start Up
------------------------------
On start up, both keyboard macros and Chess programs can be start
up automatically. It is important to know the order in which this
will occur. The order is as follows:
1) macro files entered per file via the '-x' flag
2) Chess start up code (main program code from .CFG file)
3) line/column commands per file via the '-p' flag
4) Chess file for each profile file loaded
Debugging Chess Programs
------------------------
In order to make developing Chess programming easier, a
rudimentary tracing function has been provided, accessed through the
'conf_chess_trace' function. When this option is turned on, prior to
execution of each line of Chess code a dialogue box will be popped up
showing the line number and the line of code. If you press the
'Enter' key, execution will continue. Pressing Escape will abort the
execution.
Bingo 3.10 Reference Manual
110
Library Function Reference
--------------------------
Bingo from within Chess
-----------------------
Normally, the best way to call Bingo functions from within Chess
is by using the function name directly, capitalizing the first letter
of the function name. For example:
{
Edit_file("temp.");
Top_of_file();
Begin_line();
Replace("~hello~ ~goodbye~ ~ig~");
File();
}
This Chess program file loads the file TEMP., goes to the top of the
file, replaces each occurrence of "hello" with "goodbye", then saves
the file and exits.
Note that as an argument, you may use the same command line input
as is normally used in the 'cmd_line' function. See the section on
'cmd_line' for a complete description of this notation.
Ask
----------------------------------------------------------------------
Format: int ask(char what[], ...)
Description: Used to 'ask' the status of various internal
Bingo/Chess variables. Over 50 variables, both text and integer, are
available for your inspection. 'Ask' can be used only to retrieve
values of system variables; it cannot set them.
The calling sequence may differ for each variable, but generally
they are of the format:
i=ask(<ask argument>,[possible extra arguments...])
as in
i=ask("file_new") and
i=ask("file_name",dest)
The first of these checks whether the current file is new (returning 1
for True) while the latter places the current file's name into the
character buffer 'dest', returning the length of the name.
Atoi
----------------------------------------------------------------------
Format: int atoi(char aval[])
Description: Converts the ASCII string representation of a number
into its integer equivalent. For example, suppose the character
buffer test[80] contains the string "12345". Then the call
i=atoi(test)
would return the integer value 12,345 into the integer variable 'i'.
Bingo 3.10 Reference Manual
111
B_cmd
----------------------------------------------------------------------
Format: int b_cmd(char cmd[],...)
Description: Used to execute Bingo commands from within Chess. For
example:
i=b_cmd("down_page");
would attempt to execute the Bingo command 'down_page'. The
True/False return value of 'down_page' will be returned and placed in
the integer variable 'i'. To execute a Bingo command and preload
arguments, make use of the Chess functions 'Key' and 'Str'. For
example:
i=b_cmd("swap_execute",str("dir/p"),key("return"));
would execute the command "dir/p", swapping out to DOS. The return
value would be placed in 'i'. See the sections of 'Str' and 'Key'
respectively for a more in-depth discussion of how they work.
'b_cmd' is an acceptable method of executing a Bingo function
from within Chess, a better method is described in the section "Bingo
from within Chess".
Beep
----------------------------------------------------------------------
Format: int beep(void)
Description: Sounds a beep on the PC speaker, using Bingo's current
frequency and duration settings. Always returns integer 1.
Box_pick
----------------------------------------------------------------------
Format: int box_pick(char title[],int style,int start,
char pick1[], ... char pickN[])
Description: Used to allow the user to pick from a set of options.
Displays a dialogue box, with one line for each choice. You may pick
from 3 different styles:
1 --> display only
2 --> display a menu bar, with Return selecting the choice
3 --> display a menu bar, but also allow the first character of
each choice to select a choice.
The 'start' parameter allows control over where the menu bar in
styles 2 and 3 begins, with 0 being the first possibility, 1 the
second possibility, and so on. After the first 3 arguments, any
number of character buffer arguments may be added. These are the
possible choices. For example:
i=box_pick("Test choices",2,0,"Choice 1",Choice 2","Choice 3");
would allow the user to choose from between 3 choices ("Choice 1",
"Choice 2", "Choice 3") using a menu bar.
'box_pick' returns the number of the choice made, with 0 being
the first, 1 the second, etc. If the user presses Escape, a -1 is
returned.
Be aware there is an upper limit of about 40 on the number of
arguments you can use. When you need to choose from a larger list of
choices, use the 'pick_file' function.
Bingo 3.10 Reference Manual
112
Clear_regs
----------------------------------------------------------------------
Format: int clear_regs()
Description: Used to clear each of the Chess working copies of the
internal 80x86 registers to zero (0).
Gen_interrupt
----------------------------------------------------------------------
Format: int gen_interrupt(int int_num);
Description: Generates an 80x86 interrupt, specifically, it
generates interrupt number 'int_num'. Prior to generating the
interrupt, the registers are loaded with the values in Bingo's
internal working copies, and after the interrupt, the values are saved
in Bingo's internal working copies. This function is very powerful
and can be used to do a great many things, but you must be VERY
CAREFUL! This function if used improperly can have catastrophic
results.
Get_str
----------------------------------------------------------------------
Format: int get_str(char dest[],char prompt[],int max)
Description: Used to ask for string input from the user via Bingo's
internal dialogue box. 'get_str' will place the string in the 'dest'
character buffer. 'prompt' will be used as a prompt string to tell
the user what you are asking for. 'max' is the maximum number of
characters allowed. 'dest' must have room for 'max' + 1 characters.
For example:
char ret[21];
int i;
ret[0]=0;
i=get_str(ret,"What is your name?",20);
declares a character buffer with room for 21 characters, an integer,
sets the char buffer 'ret' to empty, then asks for the users name, no
longer than 20 characters, placing the result in the buffer 'ret'.
'get_str' returns the character last pressed.
Get_yesno
----------------------------------------------------------------------
Format: int box_yesno(char text[],int default)
Description: Asks the user a yes/no question, allowing only yes, no,
and abort as return values. It displays the text in the character
buffer 'text' and a choice of Yes/No. The default choice is No if the
'default' argument is 0, Yes if the 'default' argument is 1. The user
can press 'y' for Yes, 'n' for No, Return for the current option, or
Escape to abort.
If the user chooses Yes, 'box_yesno' will return 1. If the user
chooses No, it will return 0. If the user hits Escape, 'box_yesno'
will return -1.
Bingo 3.10 Reference Manual
113
Get_char
----------------------------------------------------------------------
Format: int box_char(char text[])
Description: Displays the contents of the character buffer 'text' on
the screen, in a dialogue box. It waits for a keystroke, and returns
the ASCII value of the keystroke.
Get_curr_text
----------------------------------------------------------------------
Format: int get_curr_text(char dest[],int len)
Description: Places a copy of 'len' characters, starting from the
current file's current cursor position, into the destination character
buffer 'dest'. If the current line does not contain 'len' characters
past the current cursor position, the return buffer will be padded
with spaces on the right side.
Get_fname
----------------------------------------------------------------------
Format: int get_fname(char dest[], char prompt[],int defok,
int wildok)
Description: Allows you to make use of Bingo's file name validation
and directory list-picking intrinsics. This will prompt the user for
a file name using 'prompt'. If the 'defok' flag is True (nonzero) and
the file name has no extension, Bingo will attempt to use the defined
default extension ('conf_def_ext') and fine a match. If 'wildok' is
False (zero) and wild card characters are present, 'get_fname' will
present the user with a directory list-picker. Once a selection has
been made, the selection will be placed in the character buffer
'dest'.
'get_fname' returns an integer greater than or equal to zero for
True, less than zero for False.
Get_reg
----------------------------------------------------------------------
Format: int get_reg(char reg_name[]);
Description: Returns the integer value of Bingo's internal working
copy of the 80x86 register named in reg_nam. Se 'set_re' for a list
of the names of valid registers.
Get_text
----------------------------------------------------------------------
Format: int get_text(int line,int column,char dest[],int len);
Description: Places a copy of 'len' characters, starting from the
current file's 'line' and 'column' position, into the destination
character buffer 'dest'. If the 'line' does not contain 'len'
characters past the 'column' position, the return buffer will be
padded with spaces on the right side.
Bingo 3.10 Reference Manual
114
Getkey
----------------------------------------------------------------------
Format: int getkey(void)
Description: Waits for a returns the value of a keypress. Whether
the extended keyboard BIOS is utilized is dependent on Bingo's setting
('conf_key_bios'). This value is not simply the 8-bit ASCII value of
the keypress, but the 16-bit scan-code/ASCII combination. The
HEXKEY.COM utility will help in discerning particular key-values.
Itoa
----------------------------------------------------------------------
Format: int itoa(int val,char dest[])
Description: Converts a character buffer representation of a number
into its integer equivalent. For example:
int i;
char temp[20];
strcpy(temp,"12345");
i=atoi(temp);
will leave 'i' with the value 12,345.
Key
----------------------------------------------------------------------
Format: int key(char s[])
Description: This is a specialized function very similar to 'str'.
It is used in conjunction with 'b_cmd' to pass keystrokes to intrinsic
Bingo commands. For example:
b_cmd("window_resize",key("down_arrow"),
key("down_arrow"),key("return"));
would resize the current window to be 2 lines bigger (assuming there
was room, of course). The series of 'key' statements "preload" the
keystrokes shown in the order shown. Allowable key names currently
include:
return
escape
up_arrow
down_arrow
left_arrow
right_arrow
ctrl_home
delete
end
home
tab
Note: In the above example, remember that the command would have to be
all on the same line to be properly interpreted by Chess.
Memcpy
----------------------------------------------------------------------
Format: int memcpy(char dest[], char src[], int n)
Description: Copies 'n' bytes of memory from the buffer 'src' to the
buffer 'dest'.
Bingo 3.10 Reference Manual
115
Msg
----------------------------------------------------------------------
Format: int msg(char format[], ...)
Description: Displays a formatted message on the status line. This
message will remain displayed until normal screen processing re-
displays the status line, or until an 'update_display' command is
issued. Formatting follows the same conventions as the 'sformat'
function.
Pick_file
----------------------------------------------------------------------
Format: int pick_file(char fname[],char title[],int style,
int start)
Description: Used as an alternative to the 'box_pick' function when
the number of choices is large. This function will work the same as
'box_pick', except that the choices will be contained in the file
whose name is in the character buffer 'fname'. 'Pick_file' returns
the same values as 'box_pick' does.
Put_char
----------------------------------------------------------------------
Format: int put_char(int val)
Description: Interprets an integer value 'val' exactly as if it was
typed in. For example:
put_char(17408);
will cause Bingo to interpret the keystroke F10. Likewise:
put_char(65)
will cause Bingo to interpret the keystroke 'A'.
Put_text
----------------------------------------------------------------------
Format: int put_text(int insert,int line,int col,char text[]);
Description: This function allows the user to place a string of
zero-terminated text, contained in the character buffer 'text', into
the current file. The text will be placed on line number 'line' at
column 'col'. If the 'insert' flag is True (nonzero), any text
currently located there will be pushed to the right. If the 'insert'
flag is False (zero), any text located in that space will be
overwritten. For example:
put_text(1,100,4,"Hi!")
will cause the text string "Hi!" to be inserted on line 100 starting
at column 4.
Put_text_curr
----------------------------------------------------------------------
Format: int put_text_curr(int insert,char text[]);
Description: Function similarly to 'put_text', however the text will
be placed at the current cursor position in the current file.
Bingo 3.10 Reference Manual
116
Run
----------------------------------------------------------------------
Format: int run(char fname[])
Description: Allows the user to run another Chess program, contained
in the file named in 'fname'. This file will have access to global
variables defined in the currently executing Chess program.
Set_display
----------------------------------------------------------------------
Format: int set_display(int on)
Description: Sets on (on nonzero) or off (on = zero) whether the
display (screen) gets updated during subsequent Bingo/Chess commands.
Turning this off can significantly increase performance. Remember,
however, to issue an 'update_display()' call when you need the screen
repainted, and to turn it back on again at some point.
Set_msg_wait
----------------------------------------------------------------------
Format: int set_msg_wait(int on)
Description: Sets on (on nonzero) or off (on = zero) whether Bingo
waits for a keystrokes after the messages where Bingo would normally
do this. For example, the 'replace' command normally pauses for 3
seconds or a keystroke after it executes. Turning this off can speed
up such processing.
Set_recall
----------------------------------------------------------------------
Format: int set_recall(int on)
Description: Normally, Bingo saves two types of string entry
histories, the standard string entry history and the filename history.
This function allows you to turn on or off this action for both,
either, or neither of these histories. For example:
set_recall(""); : turns off both histories
set_recall("file"); : turns on filename histories
set_recall("string"); : turns on standard string history
set_recall("string","file"); : turns on both
Bingo 3.10 Reference Manual
117
Set_reg
----------------------------------------------------------------------
Format: int set_reg(char regname[],int val)
Description: Used to set the value of one of Bingo's working copies
of the internal 80x86 registers. The register names and their range
of legal values are as follows:
Name Size Name Size
---------------------------------------------
ax 16 bit al 8 bit
bx 16 bit ah 8 bit
cx 16 bit bl 8 bit
dx 16 bit bh 8 bit
si 16 bit cl 8 bit
di 16 bit ch 8 bit
cflag 16 bit dl 8 bit
flags 16 bit dh 8 bit
Sformat
----------------------------------------------------------------------
Format: int sformat (char dest[],char str[],...)
Description: Allows formatting of strings using the C language
'printf' conventions. Places the formatted string in 'dest'. While
the full complement of replacements are available, only three basic
primitives will be described here.
%ld integer
%s string
%c character
'Sformat' returns the length of the formatted string. For example:
int i,j;
char dest[80];
char temp[30];
i=sformat(dest,"Hi %s.","Chris");
--> 'dest' contains "Hi Chris."
--> 'i' contains 9
i=sformat(dest,"Hello %s %c.","Chris",'S');
--> 'dest' contains "Hi Chris S."
--> 'i' contains 11
j=99;
strcpy(temp,"Chris");
i=sformat(dest,"%ld red balloons, %s!",j,temp);
--> 'dest' contains "99 red balloons, Chris!"
--> 'i' contains 21
Note: All of Borland TurboC's 'printf' primitives are supported, but
you must remember a few things. In particular, Chess integers are 4-
bytes longs, not normal Turbo C integers. Thus:
i=300000;
sformat(dest,"%d",i);
will not work properly.
Bingo 3.10 Reference Manual
118
Str
----------------------------------------------------------------------
Format: int str(char s[])
Description: This is a specialized function very similar to 'key'.
It is used in conjunction with 'b_cmd' to pass strings of text to
intrinsic Bingo commands. For example:
b_cmd("swap_execute",str("dir /p"),key("return"));
would cause Bingo to swap to DOS and execute the command "dir/p". The
'key("return")' preloads the keystroke 'Return' as well.
Strcat
----------------------------------------------------------------------
Format: int strcat(char dest[],char src[])
Description: Concatenates the contents of one zero-terminate string
onto another:
char temp1[20],temp2[20];
strcpy(temp1,"Hi ");
strcpy(temp2,"Chris!");
strcat(temp1,temp2);
would leave the string "Hi Chris!" in the character buffer 'temp1'
Strcmp
----------------------------------------------------------------------
Format: int strcmp(char s1[],char s2[])
Description: Compares two strings (character buffers). Returns 0 if
the strings match, <0 if string 's1' is less than 's2', and >0 if 's1'
is greater than 's2'. For example:
strcmp("Hello","Hi") returns <0
strcmp("Hello","Alfie") returns >0
strcmp("hello",Hello") returns 0
Strcpy
----------------------------------------------------------------------
Format: int strcpy(char dest[],char src[])
Description: Copies the contents of 'src', a zero-terminated string,
into the character buffer 'dest', including the 0. Always returns 1.
Strlen
----------------------------------------------------------------------
Format: int strlen(char src[])
Description: Returns the length of the zero-terminated string in
'src'. For example:
char tempo[80];
strcpy(tempo,"Hi!")
i=strlen(tempo);
would leave 'i' with the value of 3.
Bingo 3.10 Reference Manual
119
Strndx
----------------------------------------------------------------------
Format: int strndx(char src[],char c)
Description: Returns the integer offset of the *first* occurrence of
'c' in the zero-terminated string 'src'. Return -1 if 'c' is not
found. Position zero (0) is the first character. For example:
strndx("Hello",'o') returns 4
strndx("Hello",'l') returns 2
strndx("Hello",'p') returns -1
Update_display
----------------------------------------------------------------------
Format: int update_display(void)
Description: Refreshes the current window and the command line.
Always returns 1.
Valid_name
----------------------------------------------------------------------
Format: int valid_name(char s[])
Description: Attempts to validate the file name in the character
buffer 's'. Will interpret the ":temp:" and ":home:" identifiers
automatically. Will convert forward slashes to back slashes. Will
attempt to expand 's' to a full directory specification. Always
returns 1.
's' MUST have enough room for the expanded file name; on MS-DOS
file systems, this equates to roughly 80 characters.
Bingo 3.10 Reference Manual
120
"Ask" Arguments
---------------
Chess's 'ask' library function is the means through which a
program can retrieve information about Bingo's current settings and
status. This section will list each of the 'ask' arguments
recognized, and what they return. Most 'ask' arguments return an
integer, and are used like this:
i=ask("file_autoindent");
True/False arguments such as 'file_autoindent' return 1 for True, 0
for False.
Other types of 'ask' arguments fetch character buffer data, such
as:
char dest[80];
ask("file_name",dest);
would place the current filename in the character buffer 'dest'.
File_autoindent
----------------------------------------------------------------------
Calling Sequence: ask("file_autoindent")
Description: Auto indent setting for current file.
Returns: Integer, 1 if set to True, 0 for False.
File_bspace
----------------------------------------------------------------------
Calling Sequence: ask("file_bspace")
Description: Backspace mode setting for current file.
Returns: Integer 0-3, meaning:
0 --> No Tab Delete
1 --> One Tab Delete
2 --> Delete All
3 --> Rubout
File_changes
----------------------------------------------------------------------
Calling Sequence: ask("file_changes")
Description: Changes to current file since last backup.
Returns: Integer number equal to the number of "change"
events which have hit the current file. This is the same number of
changes which the timed backups are triggered from.
File_cmode
----------------------------------------------------------------------
Calling Sequence: ask("file_cmode")
Description: C-Mode setting for the current file.
Returns: Integer describing which type of C-Mode indention is
active for the current file. Types are:
0 None
1 ANSI
2 Classical
Bingo 3.10 Reference Manual
121
File_column
----------------------------------------------------------------------
Calling Sequence: ask("file_column")
Description: Column position in current file.
Returns: Integer denoting the column position of the current
file. 1 is the first column, etc.
File_dialogue
---------------------------------------------------------------------
Returns: Integer denoting the line the cursor is on in the
current file. The first line is 1.
File_matching
----------------------------------------------------------------------
Calling Sequence: ask("file_matching")
Description: Matching mode for the current file.
Returns: Integer True (1) or False (0) depending when the
current files Matching mode setting.
File_name
----------------------------------------------------------------------
Calling Sequence: ask("file_name",char dest[])
Description: File name, with extension, of the current file.
Returns: Into the character buffer 'dest', retrieves the file
name, without the path, of the current file. For example, editing the
file "c:\edit\temp.c":
char temp[80];
ask("file_name",temp);
--> 'temp' now contains "temp.c"
Note: There must be sufficient space in 'dest' for the file name.
File_new
----------------------------------------------------------------------
Calling Sequence: ask("file_new")
Description: Was the current file new when loaded?
Returns: True (1) or False (0) depending on if the current
file was created when it was loaded.
File_number
----------------------------------------------------------------------
Calling Sequence: ask("file_number")
Description: Number of the current file in the ring.
Returns: Integer, ranging from 0 to (number of files - 1),
denoting the number of the current file in the ring. The first file
is 0, the second is 1, etc. This is not to be confused with the
"file_id_no", which is unique for each file edited in the session.
Bingo 3.10 Reference Manual
122
File_path
----------------------------------------------------------------------
Calling Sequence: ask("file_path",char dest[])
Description: Path name of the current file, ending with
backslash.
Returns: Into a character buffer 'dest', the full path
including the drive, of the current file. For example, editing the
file "c:\edit\temp.c":
char temp[80];
ask("file_path",temp);
--> 'temp' contains "c:\edit\"
Note: "file_path" will always end with a backslash, so that the
"file_name" can be concatenated onto the end of the path. 'dest' must
have enough room for the "file_path".
File_recmode
----------------------------------------------------------------------
Calling Sequence: ask("file_recmode")
Description: Current text recognition mode setting for the
current buffer.
Returns: Integer corresponding to the setting of the text
recognition mode (0=On-Demand (Sleeping), 1=Automatic, 2=On-Demand
(waiting for a match)).
File_recog
----------------------------------------------------------------------
Calling Sequence: ask("file_recog",int n,char trigger[],char chess[])
Description: Text recognition relationship 'n' for the current
buffer. The first relationship has n=0.
Returns: Into 'trigger', the character string which is the
trigger Integer corresponding to the setting of the text recognition
mode (0=On-Demand (Sleeping), 1=Automatic, 2=On-Demand (waiting for a
match)).
File_rmargin
----------------------------------------------------------------------
Calling Sequence: ask("file_rmargin")
Description: Right margin setting for current file.
Returns: Integer which is the setting of the right margin for
the current file.
File_smart_tabs
----------------------------------------------------------------------
Calling Sequence: ask("file_smart_tabs")
Description: Smart tab setting for current file.
Returns: Integer True (1) or False (0) denoting the setting
of the SmartTabs option for the current file.
Bingo 3.10 Reference Manual
123
File_tabsize
----------------------------------------------------------------------
Calling Sequence: ask("file_tabsize")
Description: Tab size for the current file.
Returns: Integer value of the current file's tab size
setting.
File_timed
----------------------------------------------------------------------
Calling Sequence: ask("file_timed")
Description: Timed backup setting for the current file.
Returns: Integer setting of the timed backup option for the
current file.
File_w_height
----------------------------------------------------------------------
Calling Sequence: ask("file_w_height")
Description: Current window height.
Returns: Integer height, in rows, of the current window.
This does not include the status line.
File_w_left
----------------------------------------------------------------------
Calling Sequence: ask("file_w_left")
Description: Current window left location.
Returns: Integer column upon which the current windows left
side starts.
File_w_top
----------------------------------------------------------------------
Calling Sequence: ask("file_w_top")
Description: Current window one pos.
Returns: Integer value of the row upon which the current
windows top row sits.
File_w_width
----------------------------------------------------------------------
Calling Sequence: ask("file_w_width")
Description: Width of current window.
Returns: Integer width, in columns, of the current window.
File_wordwrap
----------------------------------------------------------------------
Calling Sequence: ask("file_wordwrap")
Description: Word wrap setting of current file.
Returns: Integer True (1) or False (0) setting of the current
files Word wrap option.
Bingo 3.10 Reference Manual
124
File_x
----------------------------------------------------------------------
Calling Sequence: ask("file_x")
Description: X location of cursor within the current window.
Returns: Integer X, or column, location of the cursor within
the window, using the window top as row 1, and the window left as
column 1.
File_y
----------------------------------------------------------------------
Calling Sequence: ask("file_y")
Description: Y location of cursor on the current window.
Returns: Integer Y, or row, location of the cursor within the
window, using the window top as row 1, and the window left as column
1.
Sys_autoindent
----------------------------------------------------------------------
Calling Sequence: ask("sys_autoindent")
Description: System auto indent setting.
Returns: Integer default auto indent setting, True (1) or
False (0).
Sys_autostrip
----------------------------------------------------------------------
Calling Sequence: ask("sys_autostrip")
Description: System autostrip setting.
Returns: Integer default high bit stripping setting, True (1)
or False (0).
Sys_autotrail
----------------------------------------------------------------------
Calling Sequence: ask("sys_autotrail")
Description: System autotrail setting.
Returns: Integer default auto trailing space setting, True
(1) or False (0).
Sys_backups
----------------------------------------------------------------------
Calling Sequence: ask("sys_backups",char dest[])
Description: System backup extension.
Returns:
Sys_bounce
----------------------------------------------------------------------
Calling Sequence: ask("sys_bounce")
Description: System cursor bounce setting.
Returns: Integer default bounce cursor setting, True (1) or
False (0).
Bingo 3.10 Reference Manual
125
Sys_bspace
----------------------------------------------------------------------
Calling Sequence: ask("sys_bspace")
Description: System backspace setting.
Returns: Integer default backspace setting. See the entry
for "file_bspace" for a listing of valid return codes.
Sys_carriage
----------------------------------------------------------------------
Calling Sequence: ask("sys_carriage")
Description: Carriage return setting.
Returns: Integer default carriage-return-splits-line setting,
True (1) or False (0).
Sys_cmode
----------------------------------------------------------------------
Calling Sequence: ask("sys_cmode")
Description: System C-Mode setting.
Returns: Integer default C-Mode setting; see the entry for
file_cmode for an explanation of return codes.
Sys_cols
----------------------------------------------------------------------
Calling Sequence: ask("sys_cols")
Description: System number columns.
Returns: Integer number of columns on the screen.
Sys_delete
----------------------------------------------------------------------
Calling Sequence: ask("sys_delete")
Description: Delete joins lines setting.
Returns: Integer default setting for the delete-join option,
True (1) or False (0).
Sys_extensions
----------------------------------------------------------------------
Calling Sequence: ask("sys_extensions", int which, char dest[])
Description: Default file extensions.
Returns: The [which] currently defined file extension. For
example:
char temp[80];
ask("sys_extensions",3,temp);
will retrieve the 3rd defined file extension into the character buffer
'dest'. If the extension is not defined, 'dest' will be filled in
with the empty string "".
Bingo 3.10 Reference Manual
126
Sys_fcount
----------------------------------------------------------------------
Calling Sequence: ask("sys_fcount")
Description: Count of files - 1 in the ring.
Returns: Integer number of files currently in the ring, less
one.
Sys_inmacro
----------------------------------------------------------------------
Calling Sequence: ask("sys_inmacro")
Description: Is Bingo currently replaying a macro?
Returns: Integer default sys_inmacro setting, True (1) or
False (0).
Sys_insmode
----------------------------------------------------------------------
Calling Sequence: ask("sys_insmode")
Description: Default insert mode.
Returns: Integer default Insert mode setting, True (1) or
False (0).
Sys_mark_paste
----------------------------------------------------------------------
Calling Sequence: ask("sys_mark_paste")
Description: System mark-pasting block setting.
Returns: Integer mark-pasting setting, True (1) or False (0).
Sys_matching
----------------------------------------------------------------------
Calling Sequence: ask("sys_matching")
Description: System matching mode setting.
Returns: Integer default Matching mode setting, True (1) or
False (0).
Sys_mouse
----------------------------------------------------------------------
Calling Sequence: ask("sys_mouse")
Description: Is a mouse available?
Returns: Integer True (1) or False (0), denoting whether the
mouse is available.
Sys_para
----------------------------------------------------------------------
Calling Sequence: ask("sys_para")
Description: Indention starts new paragraph.
Bingo 3.10 Reference Manual
127
Sys_rdefs
----------------------------------------------------------------------
Calling Sequence: ask("sys_rdefs",char dest[])
Description: Replace default string.
Returns: Places in the 'dest' character buffer the current
Replace default string.
Sys_recmode
----------------------------------------------------------------------
Calling Sequence: ask("sys_recmode")
Description: Systemwide default text recognition mode setting.
Returns: Integer corresponding to the setting of the text
recognition mode (0=On-Demand (Sleeping), 1=Automatic, 2=On-Demand
(waiting for a match)).
Sys_recording
----------------------------------------------------------------------
Calling Sequence: ask("sys_recording")
Description: Is Bingo currently recording a macro?
Returns: True (1) or False (0), depending on whether Bingo is
currently recording a macro.
Sys_rmargin
----------------------------------------------------------------------
Calling Sequence: ask("sys_rmargin")
Description: System right margin setting.
Returns: Integer value of the current default right margin
setting.
Sys_rows
----------------------------------------------------------------------
Calling Sequence: ask("sys_rows")
Description: Number of rows on screen.
Returns: Integer number of rows displayed on the screen.
Sys_sdefs
----------------------------------------------------------------------
Calling Sequence: ask("sys_sdefs",char dest[])
Description: Search defaults.
Returns: Places in the 'dest' character buffer the current
Search default string.
Sys_smart_tabs
----------------------------------------------------------------------
Calling Sequence: ask("sys_smart_tabs")
Description: System smart tab setting.
Returns: Integer default SmartTab setting, True (1) or False
(0).
Bingo 3.10 Reference Manual
128
Sys_tabsize
----------------------------------------------------------------------
Calling Sequence: ask("sys_tabsize")
Description: System tab size.
Returns: Integer default Tab Size setting.
Sys_timed
----------------------------------------------------------------------
Calling Sequence: ask("sys_timed")
Description: System timed backup setting.
Returns: Integer denoting the number of "changes" which can
elapse between autosaves. Zero (0) means no saves will be done.
Sys_undo_many
----------------------------------------------------------------------
Calling Sequence: ask("sys_undo_many")
Description: System undo setting.
Returns: Integer denoting the maximum number of undo events
Bingo is saving. Zero (0) means no undo events are being saved.
Sys_word_delim
----------------------------------------------------------------------
Calling Sequence: ask("sys_word_delim",char dest[])
Description: System defined word delimiters.
Returns: Copies into the character buffer 'dest' the string
of characters which are *not* in a word.
Sys_wordwrap
----------------------------------------------------------------------
Calling Sequence: ask("sys_wordwrap")
Description: System word wrap setting.
Returns: Integer default word wrap setting, True (1) or False
(0).
Sys_zoom
----------------------------------------------------------------------
Calling Sequence: ask("sys_zoom")
Description: Is the current window zoomed?.
Returns: Integer default zoom window setting, True (1) or
False (0).
Version
----------------------------------------------------------------------
Calling Sequence: ask("version", char dest[])
Description: Current Bingo version.
Returns: Copies into the character buffer 'dest' a zero
terminated string containing the current Bingo versions. This string
will be at most 20 characters, including the zero.
Bingo 3.10 Reference Manual
129
Ws_size
----------------------------------------------------------------------
Calling Sequence: ask("ws_size")
Description: Interpreter workspace size.
Returns: Integer size of the currently executing Chess
subprogram size, in characters.
Bingo 3.10 Reference Manual
130
Chess Execution Errors
----------------------
Abort
----------------------------------------------------------------------
This error will be generated when the execution of a Chess program is
interrupted by the user by pressing and holding the Scroll Lock key.
Arguments
----------------------------------------------------------------------
This error will be generated when the number of arguments used to call
a function does not equal the number of arguments declared for the
function.
Bingo Intrinsic
----------------------------------------------------------------------
This error is generated by a call to the 'b_cmd' library function when
the first argument passed to it does not equal a valid Bingo intrinsic
function.
Class
----------------------------------------------------------------------
This error will be generated when a variable which is not an array is
referenced with an array subscript.
Declaration
----------------------------------------------------------------------
This error is generated when a Chess program attempts to reference a
variable which has not been declared.
Exec Interp
----------------------------------------------------------------------
This error will be generated when Bingo lacks memory to execute the
command line given in the 'Chess_exec' function.
Function Table Overflow
----------------------------------------------------------------------
This will be generated when the number of declared functions exceeds
the size of the function table set using the BOPTS utility program.
Interpreter Parsing
----------------------------------------------------------------------
This is an error generated when the Chess interpreter has encountered
illegal syntax.
Left Brace
----------------------------------------------------------------------
This error is generated when a left brace ('{') is not found when
Chess expects to find one.
Bingo 3.10 Reference Manual
131
Left-Value
----------------------------------------------------------------------
This error is generated when Chess finds that the value on the left
side of an assignment statement is illegal, such as a constant or a
function.
Link
----------------------------------------------------------------------
This error is generated when Chess is unable to resolve all of the
function and variable references in a program.
Range
----------------------------------------------------------------------
This error is generated when you attempt to reference an array element
outside the declared range.
Right Paren
----------------------------------------------------------------------
This error is generated if Chess fails to find matching right
parentheses or right braces.
Stack (Pop)
----------------------------------------------------------------------
This is an internal error indicating a stack error; report these to
the error as soon as possible, along with a copy of the code that
caused it.
Stack (Push)
----------------------------------------------------------------------
This is an internal error indicating a stack error; report these to
the error as soon as possible, along with a copy of the code that
caused it.
Symbol
----------------------------------------------------------------------
This error is generated when Chess cannot find a symbol used as either
a variable or function.
Syntax
----------------------------------------------------------------------
This error is generated when basic Chess syntax rules are broken.
System Call
----------------------------------------------------------------------
This error is generated when a call to one of Chess's library
functions is called without the proper number of arguments.
Bingo 3.10 Reference Manual
132
System Variable
----------------------------------------------------------------------
This error is generated when a call to the 'ask' library function uses
the incorrect number of arguments, or if the 'ask' argument is
unrecognized.
Variable Table Overflow
----------------------------------------------------------------------
This will be generated when the number of declared variables exceeds
the size of the variable table set using the BOPTS utility program.
Bingo 3.10 Reference Manual
133
Some Example Chess Code
-----------------------
This section will have some example Chess code which you may find
useful.
Example #1: Execute the Current File
------------------------------------
This function is also seen elsewhere, but it is so useful it
warrants inclusion again. It first saves the current file if need be,
then builds its full filespec and executes it as Chess program file.
run_current{
char temp[80],name[20]; /* declare working variables
int i;
b_cmd("modify_save"); /* save current file if dirty
i=ask("file_path",temp) /* get the file's path
ask("file_name",name) /* get the file's name
strcpy(temp+i,name); /* add the name to the path
return(run(temp)); /* run the file and return
}
Example #2: Factorials
----------------------
This pair of functions finds the factorials of numbers.
'find_fact' asks the user for a number and calls 'do_fact' to actually
figure it out. 'do_fact' uses the classical recursive method to
calculate the factorial of an integer.
find_fact{
char temp[30];
int i;
if((get_str(temp,"Find factorial of What number?",2)%256)!=27){
/* if the user didn't press escape
i=atoi(temp); /* convert to an integer
i=do_fact(i); /* find its factorial
msg("%s factorial is %ld",temp,i); /* print it out
getkey(); /* wait for a keypress
}
}
do_fact /* this function is a recursive one
int n; /* single parameter
{
if(n<1) /* if illegal, return 0
return(0);
else if(n==1) /* if we are done with recursive call
return(1);
else /* else, recurse another level
return(do_fact(n-1)*n);
}
Bingo 3.10 Reference Manual
134
The Included Chess Files
------------------------
Version 3.10 includes 15 sample CHESS program files/functions.
Each of these files are meant to be both useful and to illustrate
important Chess programming concepts. The sample files are
BIOS_INT.CHS : This sample file includes two routine to access
the BIOS keyboard interrupt. One routine can return keypress
information, the other will wait for a keypress and then return,
without processing the keypress.
CINDENT1.CHS : This sample file will change all occurrences of
C mode indention #2 to C mode indention #1. I.e.,
if -- becomes --> if{
{ stuff...
stuff... }
}
This sample file is a very good example of using Bingo commands
with complex arguments to perform operations. Useful in
conjunction with the 'global' command to change whole sets of
files to a uniform C mode indention.
CINDENT2.CHS : This sample file will change all occurrences of
C mode indention #1 to C mode indention #2. I.e.,
if{ -- becomes --> if
stuff... {
} stuff...
}
This sample file is a very good example of using Bingo commands
with complex arguments to perform operations. Useful in
conjunction with the 'global' command to change whole sets of
files to a uniform C mode indention.
COMMENT.CHS : Block comments a set of lines using '/*' in
front of each linemarked lines. A parameter 'aft' is used to
decide whether or not an accompanying '*/' is placed after each
line.
COMPILE.CHS : VERY useful program files. Designed to be run
as a standalone CHESS program file (run("compile.chs") from the
'exec_chess' function). The main code pops up a menu of choices
using the 'box_pick function. Then, two functions
"compile_review" and "parse_errs" are used to run the command
line and parse the errors. This program file illustrates many
key CHESS programming ideas.
ERRORP.CHS : This is a cousin of COMPILE.CHS; the difference
is that ERRORP.CHS is designed to be used to parse errors from
the command-line.
Bingo 3.10 Reference Manual
135
FACT.CHS : This is a simple recursion example, finding the
factorial of a number.
HEXKEY.CHS : This routine displays the hexadecimal and
decimal value of a keystroke.
HOME&END.CHS : This is a pair of functions which were inspired
by the gang on the IBMAPP forum of Compuserve. They are
alternative begin and end of line functions, which depending on
the current cursor position, may move further up or down the
file. A good example of how to replace standard Bingo functions
with enhanced functions.
LEAP.CHS : Since the 'leap_' functions were dropped from
version 3.10 of Bingo, this file contains replacement functions
in Chess.
QUIT.CHS : This is an alternative 'quit' function, in which
the default reply to quitting a modified file is not to save it -
- the reverse of the standard function.
S_AGAIN.CHS : This contains functions which search for the
last target again, only one function forces the search to be in
the forward direction, the other in the reverse.
SIDEBY.CHS : These two functions allow for side by side
scrolling of two vertical windows.
STRIP.CHS : This is a simple program file to strip comments
from a CHESS program file; since they are unnecessary to run it
and take up space.
VARTABS.CHS : This is a collection of functions designed to
let you set tabs on a ruler line at arbitrary positions and then
have Bingo use a replacement tab function to perform tabbing.
This would have to be incorporated into you .CFG file for it to
work most effectively.
Bingo 3.10 Reference Manual
136
The Author
----------
I received my M.S. in Computer Science from The Ohio State
University in March of 1990, and am now employed by a large
engineering/manufacturing firm in the Baltimore area. I was raised in
a steel town in Eastern Pennsylvania, and attended The Pennsylvania
State University as an undergraduate, graduating in May of 1988. I
hold a first-degree Black Belt in Tae Kwon Do, and I am an avid reader
of science-fiction, fantasy, military fiction, mythology, and just
about any other occurance of the printed word. Bingo was developed on
an original IBM PC (8088!) through version 2.10d, and since on a
Gateway 2000 386DX/25. Since April '92, Bingo has been developed
while running under IBM's awesome OS/2 2.0 operating system.
Bingo 3.10 Reference Manual
137
Acknowledgements
----------------
There are many I must acknowledge for the inspiration for writing
this program: family, friends, colleagues. In addition, I want to
thank Borland for their excellent Turbo C compiler, which I used to
write Bingo; IBM for making my beloved baby, lo those many years ago;
IBM again for creating OS/2 2.0, which has speeded development
considerably, and all the other folks who wrote software I used to
create Bingo. In particular, thanks to Ralf Brown for his excellent
SPAWNO libraries which I used in this version. Thanks to Gateway
computers, for making my workhorse. Thanks to all my computer science
professors, who instilled the knowledge to write such an application
in me, often against my will.
Thanks to the members of the Columbus Computer Society (CCS),
particularly the members of the Programmer's SIG, several of whom
served as Beta test people during versions 1.0 to 2.0, putting their
programs In Harm's Way as they tested features.
Thanks to Jorge, Bradley, Alan, Mike, Pierre, Mike, all of the
beta testers who worked on v3.10, and all the others for more positive
feedback than anyone could hope for.
Thanks to the BedPiglet, for understanding the time involved in
doing this, and for her smile. I *am* going to marry this girl, this
coming October 16th. Life just gets better!!!!
Bingo 3.10 Reference Manual
138
Index
-----
.CFG . . . . . . . . . . . . . . . . . . . . . . . . 19, 107-110, 136
.INI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25, 89
abort . . . . . . . . . . . . . 28, 29, 45, 61, 62, 88, 110, 113, 131
abort_all . . . . . . . . . . . . . . . . . . . . . . . . . . . 45, 62
again . . . . . 27, 29, 33, 49, 52, 65, 77, 84, 85, 117, 134, 136, 138
align . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80, 82
ascii_table . . . . . . . . . . . . . . . . . . . . . . . . . . 37, 64
ask 6, 28-31, 36, 62, 74, 77-79, 83, 88, 107, 111, 113, 121-130, 133, 134
ASP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Association of Shareware Professionals . . . . . . . . . . . . . . 3
atoi . . . . . . . . . . . . . . . . . . . . . . . . . 111, 115, 134
b_cmd . . . . . . . . . . . . . . . . . . . . 112, 115, 119, 131, 134
back_space . . . . . . . . . . . . . . . . . . . . . . . . . . 49-51
back_tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
backup_all . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
backup_file . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
BE.EXE . . . . . . . . . . . . . . . . . . . . 10-12, 22, 23, 38, 64
beep . . . . . . . . . . . . . . . . . . . . . . . . 29, 30, 42, 112
begin_line . . . . . . . . . . . . . . . . . . . . . . . . . 69, 111
begin_of_text . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
block_copy . . . . . . . . . . . . . . . . . . . . . . . . . . 53, 54
block_delete . . . . . . . . . . . . . . . . . . . . . . . . . 53, 55
block_load . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
block_move . . . . . . . . . . . . . . . . . . . . . . . . . . 53, 54
block_save . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
bot_of_file . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
bottom_of_block . . . . . . . . . . . . . . . . . . . . . . . . . . 69
bottom_of_screen . . . . . . . . . . . . . . . . . . . . . . . . . 69
box_char . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
box_pick . . . . . . . . . . . . . . . . . . . . . . . 112, 116, 135
box_yesno . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
buffer_info . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
carriage . . . . . . . . . . . . . . . . 45, 46, 49, 61, 74, 86, 126
center_line . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
center_text . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
chdir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
Chess . 1, 2, 6, 9, 11, 15, 18, 19, 22, 23, 31, 47, 79, 82, 87-96, 98,
100, 103, 105, 106-113, 115, 117, 118, 121, 130-132, 134-136
choose_file . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
clean_all . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
clean_file . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
cmd_line . . . . . . . . . . . . . . . . . . . . 79, 82, 86, 88, 111
conf_auto_cut . . . . . . . . . . . . . . . . . . . . . . . . . 23, 44
conf_autoindent . . . . . . . . . . . . . . . . . . . . . . . . 41, 86
conf_automark . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
conf_backspace . . . . . . . . . . . . . . . . . . . . . . . . . . 42
conf_backups . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
conf_bmarg . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Bingo 3.10 Reference Manual
139
conf_bounce . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
conf_button_wait . . . . . . . . . . . . . . . . . . . . . . . . . 42
conf_carriage . . . . . . . . . . . . . . . . . . . . . . . . . 46, 49
conf_chess_trace . . . . . . . . . . . . . . . . . . . . . . 47, 110
conf_cmode . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
conf_color . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
conf_cut_stack . . . . . . . . . . . . . . . . . . . . . . . . 43, 57
conf_def_ext . . . . . . . . . . . . . . . . . . . . . . . . 43, 114
conf_delete_join . . . . . . . . . . . . . . . . . . . . . . . 46, 50
conf_delims . . . . . . . . . . . . . . . . . . . . . . . . . . 45, 82
conf_dialogue . . . . . . . . . . . . . . . . . . . . . . . . . 28, 47
conf_eof . . . . . . . . . . . . . . . . . . . . . . . . . . . 41, 61
conf_eol_display . . . . . . . . . . . . . . . . . . . . . . . . . 45
conf_erronly . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
conf_exit_to_pick . . . . . . . . . . . . . . . . . . . . . . . . . 45
conf_insert . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
conf_key_bios . . . . . . . . . . . . . . . . . . . . . . . . 44, 115
conf_kill_size . . . . . . . . . . . . . . . . . . . . . . . . 43, 58
conf_lfs . . . . . . . . . . . . . . . . . . . . . . . . . . . 40, 61
conf_lines_per . . . . . . . . . . . . . . . . . . . . . . . . . . 43
conf_lmarg . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
conf_mark_paste . . . . . . . . . . . . . . . . . . . . . . . . . . 48
conf_matching . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
conf_mdelay . . . . . . . . . . . . . . . . . . . . . . . . . . 35, 42
conf_mouse . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
conf_name_save . . . . . . . . . . . . . . . . . . . . . . . . 45, 47
conf_para . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
conf_prn . . . . . . . . . . . . . . . . . . . . . . . . . 43, 45, 46
conf_prn_eol . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
conf_prn_header . . . . . . . . . . . . . . . . . . . . . . . . . . 46
conf_prn_lineno . . . . . . . . . . . . . . . . . . . . . . . . . . 46
conf_profile . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
conf_recognize . . . . . . . . . . . . . . . . . . . . . . . . 47, 87
conf_resume_pos . . . . . . . . . . . . . . . . . . . . . . . . . . 47
conf_rmargin . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
conf_scr_save . . . . . . . . . . . . . . . . . . . . . . . 45, 47, 89
conf_search . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
conf_shadow . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
conf_smart_tabs . . . . . . . . . . . . . . . . . . . . . . . . . . 44
conf_sound . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
conf_stripping . . . . . . . . . . . . . . . . . . . . . . . . . . 41
conf_tabsize . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
conf_timed_backups . . . . . . . . . . . . . . . . . . . . . . . . 46
conf_tmarg . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
conf_trail . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
conf_undo . . . . . . . . . . . . . . . . . . . . . . . . . . . 47, 57
conf_video_mode . . . . . . . . . . . . . . . . . . . . . . . . . . 43
conf_vmem . . . . . . . . . . . . . . . . . . . . . . . . . . . 13, 48
conf_wild_load . . . . . . . . . . . . . . . . . . . . . . . . . . 47
conf_win_close . . . . . . . . . . . . . . . . . . . . . . . . . . 42
conf_word . . . . . . . . . . . . . . . . . . . . . . . . . . . 45, 81
Bingo 3.10 Reference Manual
140
conf_wordwrap . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
copy . . . 4, 5, 8, 10, 12, 44, 52-55, 57, 62, 64, 95, 104, 114, 132
copy_append . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
cursor_down . . . . . . . . . . . . . . . . . . . . . . . . . . 35, 68
cursor_left . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
cursor_right . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
cursor_up . . . . . . . . . . . . . . . . . . . . . . . . . . . 68, 85
cut . . . . . . . . . . . . . . . . . . 23, 43, 44, 49, 51-55, 57, 109
cut_append . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
default_bspace . . . . . . . . . . . . . . . . . . . . . . . . 49, 51
default_del . . . . . . . . . . . . . . . . . . . . . . . . . . 49, 51
define_scrap . . . . . . . . . . . . . . . . . . . . . . . . . 65, 66
del_bol . . . . . . . . . . . . . . . . . . . . . . . . . . 49, 50, 57
del_char . . . . . . . . . . . . . . . . . . . . . . . . . . . 49-51
del_eol . . . . . . . . . . . . . . . . . . . . . . . . . . 49, 50, 57
del_line . . . . . . . . . . . . . . . . . . . . . . . . . 49, 50, 57
del_word_lt . . . . . . . . . . . . . . . . . . . . . . . . . . 49, 51
del_word_rt . . . . . . . . . . . . . . . . . . . . . . . . . . 49, 51
delete_file . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
detab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1, 80
display_file . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
down_page . . . . . . . . . . . . . . . . . . . . . . . . 35, 68, 112
dup_line . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
edit_file . . . . . . . . . . . . . . . . . . . . . . 58, 61, 83, 111
emacs_yank . . . . . . . . . . . . . . . . . . . . . . . . . . 53, 56
end_line . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
end_macro . . . . . . . . . . . . . . . . . . . . . . . . . . . 65, 67
entab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1, 80
exec_chess . . . . . . . . . . . . . . 79, 82, 88, 89, 108, 109, 135
exec_command . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
extend_mark . . . . . . . . . . . . . . . . . . . . . . . . . . 52, 54
fcase_block . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
file . 1, 2, 4, 9-11, 13-15, 17-19, 21-25, 28-33, 35, 36, 40-47, 50,
52-55, 57-59, 61, 62-64, 66-71, 74-81, 83, 87-89, 107-112,
114, 116, 117, 120-126, 134-136
file_all . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
file_autoindent . . . . . . . . . . . . . . . . . . . . . . . . . 121
file_bspace . . . . . . . . . . . . . . . . . . . . . . . . . 121, 126
file_changes . . . . . . . . . . . . . . . . . . . . . . . . . . 121
file_cmode . . . . . . . . . . . . . . . . . . . . . . . . . 121, 126
file_column . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
file_id_no . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
file_matching . . . . . . . . . . . . . . . . . . . . . . . . . . 122
file_name . . . . . . . . . . . . . . . . . . . 107, 111, 121-123, 134
file_new . . . . . . . . . . . . . . . . . . . . . . . . . . 111, 122
file_number . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
file_path . . . . . . . . . . . . . . . . . . . . . . . 107, 123, 134
file_rmargin . . . . . . . . . . . . . . . . . . . . . . . . . . 123
file_smart_tabs . . . . . . . . . . . . . . . . . . . . . . . . . 123
file_tabsize . . . . . . . . . . . . . . . . . . . . . . . . . . 124
file_timed . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
Bingo 3.10 Reference Manual
141
file_w_height . . . . . . . . . . . . . . . . . . . . . . . . . . 124
file_w_left . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
file_w_top . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
file_w_width . . . . . . . . . . . . . . . . . . . . . . . . . . 124
file_wordwrap . . . . . . . . . . . . . . . . . . . . . . . . . . 124
file_x . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
file_y . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
fill_block . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
get_char . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
get_curr_text . . . . . . . . . . . . . . . . . . . . . . . . . . 114
get_fname . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
get_str . . . . . . . . . . . . . . . . . . . . . . . . . . . 113, 134
get_text . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
get_yesno . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
getkey . . . . . . . . . . . . . . . . . . . . . . 107-109, 115, 134
global . . . . . . . . 41, 42, 44, 57, 78, 79, 88, 92, 105, 117, 135
help . . . . . . . . 3, 5, 7, 10, 29, 34, 36, 58, 64, 76, 89, 94, 115
indent_down . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
indent_tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
indent_up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
info . . . . . . . . . . . . . . . . . . . 4, 29, 36, 45, 46, 55, 64
insert_tab . . . . . . . . . . . . . . . . . . . . . . . . . . 44, 49
isearch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
isearch_files . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
itoa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
jump . . . . . . . . . . . . . . . . . . . . . . . . . . . 58, 68-70
jump_mark . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
key . 10, 11, 15-21, 23, 27-29, 33, 34, 36, 44, 64-67, 77, 79, 82, 85,
88, 107, 109, 110, 112, 115, 119, 131, 135
key_set_load . . . . . . . . . . . . . . . . . . . . . . . . . 15, 67
key_set_save . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
KEYCFG . . . . . . . . . . . 10, 15, 19-21, 33, 58, 66, 85, 107, 108
KEYINFO . . . . . . . . . . . . . . . . . . . . . . . . . . . 21, 108
last_error . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
lcase_block . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
line_mark . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
load_file . . . . . . . . . . . . . . . . . . . . . . . . . 18, 19, 61
load_profile . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
look_buffer . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
main_menu . . . . . . . . . . . . . . . . . . . . . . . . . . . 27, 64
mark_last_found . . . . . . . . . . . . . . . . . . . . . . . . . . 79
mark_word . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
match_delim . . . . . . . . . . . . . . . . . . . . . . . . . . 45, 82
memcpy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
modify_save . . . . . . . . . . . . . . . . . . . 18, 61, 62, 107, 134
modify_save_all . . . . . . . . . . . . . . . . . . . . . . . . 18, 62
Mouse . . . . . . . . 1, 2, 15, 17, 20, 24, 27, 33-37, 42, 45, 70, 127
mouse_scroll . . . . . . . . . . . . . . . . . . . . . . . . . 34, 70
msg . . . . . . . . . . . . . . . 96, 97, 103, 107-109, 116, 117, 134
name_buffer . . . . . . . . . . . . . . . . . . . . . . . . . . 53, 55
new_line . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Bingo 3.10 Reference Manual
142
next_error . . . . . . . . . . . . . . . . . . . . . . . . 18, 58, 59
next_file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
next_word . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
one_recognize . . . . . . . . . . . . . . . . . . . . . . . . . 87, 89
onekey_def . . . . . . . . . . . . . . . . . . . . . . . . . . 65, 66
paste . . . . . . . . . . . . . . . 1, 24, 28, 43, 48, 52-58, 60, 127
paste_kill . . . . . . . . . . . . . . . . . . . . . . 53, 56, 58, 60
paste_replace . . . . . . . . . . . . . . . . . . . . . . . . . 52, 54
pick_exec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
pick_file . . . . . . . . . . . . . . . . . . . . . . . . . . 112, 116
place_mark . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
point_mark . . . . . . . . . . . . . . . . . . . . . . . . . . 34, 54
prev_error . . . . . . . . . . . . . . . . . . . . . . . . . . 58, 59
prev_file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
prev_word . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
print_file . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
put_char . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
put_text . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
put_text_curr . . . . . . . . . . . . . . . . . . . . . . . . . . 116
query_quote . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
quit . . . . . . . . . . . . . . . . . . . . 29, 45, 61, 62, 79, 136
quit_all . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
reform_para . . . . . . . . . . . . . . . . . . . . . . . . . . 48, 81
rename_file . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
repeat . . . . . . . . . . . . . . 2, 5, 24, 65, 77, 82, 85, 89, 101
repeat_last . . . . . . . . . . . . . . . . . . . . . . . . . 85, 89
replace . . . 1, 18, 24, 41, 52, 54, 57, 75-79, 88, 111, 117, 128, 136
report_bsize . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
restore_line . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
rotate_kill . . . . . . . . . . . . . . . . . . . . . . . . . . 58, 60
run . . . . 10, 11, 19, 22, 23, 38, 67, 87, 89, 107-110, 117, 134-136
run_macro_file . . . . . . . . . . . . . . . . . . . . . . . . . . 67
save_all . . . . . . . . . . . . . . . . . . . . . . . . . . . 18, 62
save_file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
save_settings . . . . . . . . . . . . . . . . . . . . . . . 23, 25, 40
scrap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
scroll_down . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
scroll_left . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
scroll_right . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
scroll_up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
search . . . . 1, 18, 19, 24, 30, 41, 57, 75-79, 82, 86, 88, 128, 136
search_apply . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
send_ff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
send_lf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
send_sequence . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
setup_err_parse . . . . . . . . . . . . . . . . . . . . . . 18, 58, 59
sformat . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72, 73
shift_block . . . . . . . . . . . . . . . . . . . . . . . . . . 57, 81
show_recognize . . . . . . . . . . . . . . . . . . . . . . . . . . 64
single_key_load . . . . . . . . . . . . . . . . . . . . . . . . . . 67
Bingo 3.10 Reference Manual
143
single_key_save . . . . . . . . . . . . . . . . . . . . . . . . 66, 67
snap_to_mouse_xy . . . . . . . . . . . . . . . . . . . . . . . 34, 70
sort_block . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
str . . . . . . . . . . . . . . . . . . . . . 112, 113, 115, 119, 134
strcat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
strcmp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
strcpy . . . . . . . . . . . . . 95-97, 104, 107, 115, 118, 119, 134
strip_highbit . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
strlen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
strndx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
swap_buf_and_block . . . . . . . . . . . . . . . . . . . . . . . . 55
swap_execute . . . . . . . . . . . . . . . . . . 18, 72, 86, 112, 119
swap_shell . . . . . . . . . . . . . . . . . . . . . . . . . . 72, 73
switch_file . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
sys_autoindent . . . . . . . . . . . . . . . . . . . . . . . . . 125
sys_autostrip . . . . . . . . . . . . . . . . . . . . . . . . . . 125
sys_autotrail . . . . . . . . . . . . . . . . . . . . . . . . . . 125
sys_backups . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
sys_bounce . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
sys_bspace . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
sys_cmode . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
sys_cols . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
sys_delete . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
sys_extensions . . . . . . . . . . . . . . . . . . . . . . . . . 126
sys_fcount . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
sys_inmacro . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
sys_insmode . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
sys_matching . . . . . . . . . . . . . . . . . . . . . . . . . . 127
sys_mouse . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
sys_rdefs . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
sys_recording . . . . . . . . . . . . . . . . . . . . . . . . . . 128
sys_rmargin . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
sys_rows . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
sys_sdefs . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
sys_smart_tabs . . . . . . . . . . . . . . . . . . . . . . . . . 128
sys_tabsize . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
sys_timed . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
sys_word_delim . . . . . . . . . . . . . . . . . . . . . . . . . 129
sys_wordwrap . . . . . . . . . . . . . . . . . . . . . . . . . . 129
sys_zoom . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
text recognition . . . . . . . . . . 1, 24, 47, 64, 87, 89, 123, 128
threekey_def . . . . . . . . . . . . . . . . . . . . . . . . . 65, 66
time_stamp . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
toggle_autoindent . . . . . . . . . . . . . . . . . . . . . . . . . 50
toggle_box_draw . . . . . . . . . . . . . . . . . . . . . . . . . . 85
toggle_cmode . . . . . . . . . . . . . . . . . . . . . . . . . 40, 50
toggle_display . . . . . . . . . . . . . . . . . . . . . . . . . . 88
toggle_ins . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
toggle_wrap . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
top_of_block . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
top_of_file . . . . . . . . . . . . . . . . . . . . . . . . . 69, 111
Bingo 3.10 Reference Manual
144
top_of_screen . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
twokey_def . . . . . . . . . . . . . . . . . . . . . . . . . . 65, 66
ucase_block . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
undefine_key . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
undo . . . . . . . . . . . . . . . . 1, 2, 6, 24, 47, 53, 56, 57, 129
unkill . . . . . . . . . . . . . . . . . . . . 24, 49, 53, 56-58, 60
unmark . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54, 79
up_page . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
update_display . . . . . . . . . . . . . . . . . . . . 116, 117, 120
valid_name . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
version 1, 2, 4-6, 8, 13, 14, 18, 23, 31, 42, 46, 57, 58, 61, 64, 72,
74, 75, 77, 84, 85, 87, 129, 135-138
version_info . . . . . . . . . . . . . . . . . . . . . . . . . 4, 64
vertical_mark . . . . . . . . . . . . . . . . . . . . . . . . . . 54
view_screen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
virtual memory . . . . . . . . . . . 1, 2, 11, 13, 14, 24, 38, 48, 57
window_bottom . . . . . . . . . . . . . . . . . . . . . . . . . 18, 84
window_close . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
window_edit . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
window_load . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
window_max . . . . . . . . . . . . . . . . . . . . . . . . . . 83, 84
window_next . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
window_one . . . . . . . . . . . . . . . . . . . . . . . . 18, 83, 84
window_previous . . . . . . . . . . . . . . . . . . . . . . . . 18, 84
window_resize . . . . . . . . . . . . . . . . . . . . . . 18, 84, 115
window_split . . . . . . . . . . . . . . . . . . . . . . . . . 18, 83
window_top . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
window_vertical . . . . . . . . . . . . . . . . . . . . . . . . . . 83
window_zoom . . . . . . . . . . . . . . . . . . . . . . . . . . 83, 84
word_count . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
write_profile . . . . . . . . . . . . . . . . . . . . . . . . 89, 109
ws_size . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
zap_file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Bingo 3.10 Reference Manual
145