This appendix explains how reentrancy is controlled within the Spontaneous Assembly TSR system. In addition to the automatic facilities described below, other methods (e.g., semaphores) may be used to control reentrancy, but these methods are beyond the scope of this documentation.
In this appendix, reentrancy refers to execution of the same program (not necessarily the same routine) through one or more entry points as a result of external events (e.g., interrupts) before previous entries have finished executing.
By default, the Spontaneous Assembly TSR system automatically prevents reentrant execution of TSR entry points. However, reentrancy is often necessary in a TSR. For example, a TSR may support an alarm window that "pops up" at a specified time as well as a hotkey which displays another window to set the alarm time. The alarm window must always be allowed to pop up when the alarm time is reached, even if the window which is used to set the alarm time is visible. This is not possible if reentrancy is disallowed.
By following the guidelines in this appendix, this kind of reentrant TSR execution is easily supported and managed by the Spontaneous Assembly TSR functions.
Managing Reentrancy
Any program may be made reentrant by following one simple rule: resources not exclusively owned by a particular instance of a routine must be saved when that routine gains control and restored when that routine finishes. A "resource" is data which is not maintained in registers or on the stack (e.g. variables and buffers). A resource is "exclusively owned" only if it is locked while in use to prevent other routines or other instances of the same routine from using it.
System resources (e.g., DOS and BIOS) are automatically locked, saved, and restored by the TSR system when those resources are specified for a particular entry point. System resources are specified in the entry definition structure by using the appropriate resource equates (e.g., _con_kbd) in conjunction with the ..._DEF macros.
Program resources are also automatically locked by the Spontaneous Assembly TSR system if they are specified for a given entry point. By default, the TSR system assumes that the entire TSR is a single program resource which is locked each time any entry point gains control. This safely prevents all reentrancy without any work on the programmer's part. However, this default can be easily changed to allow more than one TSR entry point to be active at a time (as long as they do not require the use of the same program resources).
Program resource locking is managed through the tsr_lockmask variable and the entry_mask field of each entry definition structure. Whenever an ISR attempts to pass control to an entry point, the entry_mask for that entry point is non-destructively ANDed with tsr_lockmask. If the result is non-zero (required resources are in use), the fail function is called instead of the entry point. If the result is zero, the entry_mask is then ORed into tsr_lockmask to lock the entry point's resources, and the entry point receives control. When the entry point finishes execution, tsr_lockmask is ANDed with the logical NOT of entry_mask to indicate that the locked resources are again available for use.
By default, bit 0 of tsr_lockmask is assigned to the entire TSR as a single resource. However, the programmer may assign bits 0 through 14 of this variable to any program resources of their choosing. Bit 15 is reserved for use by the keystroke feeder. Each TSR entry point may then specify its required program resources by setting the appropriate bits in entry_mask. When all required resource bits have been properly set, the TSR will safely operate in a reentrant manner.
WARNING! The TSR resource locking system used by Spontaneous Assembly is straight forward and reliable. If a TSR does not behave as expected, the problem is almost certainly due to overlooked or improperly specified resources. Please follow the troubleshooting guidelines in the section below if resource conflicts are suspected!
Troubleshooting
Improper management of resources can cause unpredictable behavior in a TSR. If a reentrant TSR crashes or behaves unexpectedly, the exact conditions under which the problem occurs should be carefully noted so that the problem may be isolated quickly.
In resolving resource conflicts, the developer should remember that TSR execution always occurs on a last-in-first-out basis. This means that one TSR entry point may interrupt another (or the TSR may interrupt a foreground application), but the interrupt ing entry point always finishes executing before it returns control to the interrupt ed entry point (or application). This means that when a resource conflict is suspected because of erratic behavior, the conflict usually lies between the entry point (or program) which exhibited the behavior and the entry point which was executed just before the behavior was noted.
System resource conflicts occur when the interrupt ing entry point fails to check for resource availability (e.g., DOS) before using the resource. This causes the resource to be corrupted when control is returned to the previous entry point or foreground application. This only occurs when the system resource is not properly noted in the entry definition structure. This problem should be immediately suspected any time the foreground application crashes after the TSR has been activated. It may also be suspected if a TSR crashes just after another TSR entry point has finished execution. This type of conflict is easily solved by adding the overlooked resource to the entry definition structure resource list (specified when the ..._DEF macros are used).
Program resource conflicts are resolved similarly, but these can be the fault of either the interrupt ed entry point and/or the interrupt ing entry point. Program resource conflicts are likely to have less disastrous effects than system resource conflicts. Overlooked program resources can include global variables, buffers, and routines with self-modifying code (data in the code segment). This problem is resolved by identifying the overlooked resource and properly noting it in the entry_mask field of the entry definition structure for any entry point which uses that resource.
C Function Cross Reference
abs. . . . . . . . . . . . . . . . . _abs...
access . . . . . . . . . . . . . . _access_f
allocmem . . . . . . . . . . . . _dos_malloc
_amblksiz. . . . . . . . . . . . .nheap_size
_argc. . . . . . . . . . . . . . ._arg_count
_argv. . . . . . . . . . . . . . . _arg_next
asctime. . . . . . . . . . . . . . _asc_time
. . . . . . . . . . . . . . . ._time_to_asc
atexit . . . . . . . . . . . . . . ._on_exit
atoi . . . . . . . . . . . . . . . _asc_to_c
. . . . . . . . . . . . . . . . . _asc_to_i
atol . . . . . . . . . . . . . . . _asc_to_l
bcd. . . . . . . . . . . . . . ._bcd_to_quad
. . . . . . . . . . . . . . . ._quad_to_bcd
_bios_keybrd . . . . . . . . . _get_keyflags
_bios_timeofday. . . . . . . . _tick_to_time
. . . . . . . . . . . . . . . _time_to_tick
bsearch. . . . . . . . . . . . . _bin_search
calloc . . . . . . . . . . . . . _far_calloc
. . . . . . . . . . . . . . . ._near_calloc
. . . . . . . . . . . . . . . . _rel_calloc
cgets. . . . . . . . . . . . . . . _cget_str
chdir. . . . . . . . . . . . . . . . _ch_dir
chmod. . . . . . . . . . . . . . ._getmode_f
chsize . . . . . . . . . . . . . _setfsize_h
clock. . . . . . . . . . . . . . ._get_clock
close. . . . . . . . . . . . . . . ._close_h
clreol . . . . . . . . . . . . . . ._clr_eol
clrscr . . . . . . . . . . . . . _clr_region
coreleft . . . . . . . . . . . . ._far_avail
. . . . . . . . . . . . . . . . _near_avail
. . . . . . . . . . . . . . . . ._rel_avail
country. . . . . . . . . . ._get_countryinfo
. . . . . . . . . . . . . . . ._set_country
cprintf. . . . . . . . . . . . ._cput_script
cputs. . . . . . . . . . . . . . . _cput_str
creat. . . . . . . . . . . . . . . _create_h
creatnew . . . . . . . . . . . . . _create_h
creattemp. . . . . . . . . . . . . ._mk_temp
cscanf . . . . . . . . . . . . ._cget_script
ctime. . . . . . . . . . . . . . . _asc_time
. . . . . . . . . . . . . . . ._time_to_asc
ctrlbrk. . . . . . . . . . . . _cbrk_install
delay. . . . . . . . . . . . . . _sleep_msec
delline. . . . . . . . . . . . . . _del_line
difftime . . . . . . . . . . . . ._diff_time
directvideo. . . . . . . . . . .direct_video
div. . . . . . . . . . . . . . . . . _div...
_dos_allocmen. . . . . . . . . . _dos_malloc
_dos_close . . . . . . . . . . . . ._close_h
_dos_findfirst . . . . . . . . . _find_first
_dos_findnext. . . . . . . . . . ._find_next
_dos_freemem . . . . . . . . . . ._dos_mfree
_dos_getftime. . . . . . . . . . _getftime_h
_dos_getdrive. . . . . . . . . . ._get_drive
_dos_gettime . . . . . . . . . . . _get_time
_dos_open. . . . . . . . . . . . . . _open_h
. . . . . . . . . . . . . . . . . _openex_h
_dos_read. . . . . . . . . . . . . . _read_h
_dos_setblock. . . . . . . . . . . _dos_mset
. . . . . . . . . . . . . . . . ._dos_msize
_dos_setdate . . . . . . . . . . . _set_date
_dos_setdrive. . . . . . . . . . ._set_drive
_dos_setfileattr . . . . . . . . ._getmode_f
. . . . . . . . . . . . . . . . ._setmode_f
_dos_setftime. . . . . . . . . . _setftime_h
_dos_settime . . . . . . . . . . . _set_time
_dos_setvect . . . . . . . . . . . ._set_vec
. . . . . . . . . . . . . . . . . _set_vect
_dos_write . . . . . . . . . . . . ._write_h
dup. . . . . . . . . . . . . . . . . ._dup_h
dup2 . . . . . . . . . . . . . . . . _dup2_h
ecvt . . . . . . . . . . . . . ._d_to_dec...
. . . . . . . . . . . . . . . ._f_to_dec...
. . . . . . . . . . . . . . . _ld_to_dec...
environ. . . . . . . . . . . . . _get_envseg
eof. . . . . . . . . . . . . . . . . ._eof_h
errno. . . . . . . . . . . . . . . . .e_code
. . . . . . . . . . . . . . . . ._get_ecode
exec.... . . . . . . . . . . . . . ._exec...
_exit. . . . . . . . . . . . . . . . . _exit
exit . . . . . . . . . . . . . _exit_cleanup
_expand. . . . . . . . . . . . _near_realloc
farcalloc. . . . . . . . . . . . _far_calloc
farcoreleft. . . . . . . . . . . ._far_avail
farfree. . . . . . . . . . . . . . _far_free
farmalloc. . . . . . . . . . . . _far_malloc
farrealloc . . . . . . . . . . ._far_realloc
fclose . . . . . . . . . . . . . . ._close_h
feof . . . . . . . . . . . . . . . . ._eof_h
fflush . . . . . . . . . . . . . . ._flush_h
filelength . . . . . . . . . . . _getfsize_h
fgetc. . . . . . . . . . . . . . . _hget_chr
fgetchar . . . . . . . . . . . . . ._get_chr
fgetpos. . . . . . . . . . . . . . . _tell_h
fgets. . . . . . . . . . . . . . . _hget_str
. . . . . . . . . . . . . . . . ._hget_line
filelength . . . . . . . . . . . _getfsize_h
fnmerg . . . . . . . . . . . . . ._merge_...
fnsplit. . . . . . . . . . . . . ._split_...
fopen. . . . . . . . . . . . . . . . _open_h
fprintf. . . . . . . . . . . . ._hput_script
fputc. . . . . . . . . . . . . . . _hput_chr
fputchar . . . . . . . . . . . . . ._put_chr
fputs. . . . . . . . . . . . . . . _hput_str
fread. . . . . . . . . . . . . . . . _read_h
free . . . . . . . . . . . . . . . _far_free
. . . . . . . . . . . . . . . . ._near_free
. . . . . . . . . . . . . . . . . _rel_free
fscanf . . . . . . . . . . . . ._hget_script
fseek. . . . . . . . . . . . . . . _lseek...
ftell. . . . . . . . . . . . . . . . _tell_h
ftime. . . . . . . . . . . . . . . _get_time
fwrite . . . . . . . . . . . . . . ._write_h
getc . . . . . . . . . . . . . . . _hget_chr
getch. . . . . . . . . . . . . . . _cget_chr
getchar. . . . . . . . . . . . . . ._get_chr
getche . . . . . . . . . . . . . ._cget_chre
getcurdir. . . . . . . . . . . . _get_curdir
getcwd . . . . . . . . . . . . . . ._get_cwd
getdate. . . . . . . . . . . . . . _get_date
getdfree . . . . . . . . . . . . ._get_dfree
getdrive . . . . . . . . . . . . ._get_drive
getdta . . . . . . . . . . . . . . ._get_dta
getenv . . . . . . . . . . . . . . ._get_env
. . . . . . . . . . . . . . ._get_curenvseg
. . . . . . . . . . . . . . ._get_dosenvseg
. . . . . . . . . . . . . . . . _get_envseg
. . . . . . . . . . . . . . ._get_parenvseg
. . . . . . . . . . . . . . _get_rootenvseg
getfat . . . . . . . . . . . . . ._get_dinfo
getfatd. . . . . . . . . . . . . _get_cdinfo
getftime . . . . . . . . . . . . _getftime_h
getpsp . . . . . . . . . . . . . . ._get_psp
gets . . . . . . . . . . . . . . . ._get_str
gettext. . . . . . . . . . . ._read_textattr
gettextcolor . . . . . . . . . . . _get_attr
. . . . . . . . . . . . . . . . ._get_dattr
_get_textinfo. . . . . . . . . . _get_region
_gettextposition . . . . . . . . . _where_xy
_fcvt. . . . . . . . . . . . . ._d_to_dec...
. . . . . . . . . . . . . . . ._f_to_dec...
. . . . . . . . . . . . . . . _ld_to_dec...
getvect. . . . . . . . . . . . . . ._get_vec
. . . . . . . . . . . . . . . . . _get_vect
getverify. . . . . . . . . . . . _get_verify
gotoxy . . . . . . . . . . . . . . ._goto_xy
. . . . . . . . . . . . . . . . . . _goto_x
. . . . . . . . . . . . . . . . . . _goto_y
harderr. . . . . . . . . . . . . _ce_install
hardresume . . . . . . . . . . ._cem_install
hardretn . . . . . . . . . . . ._cem_install
get_drive. . . . . . . . . . . . ._get_drive
hfree. . . . . . . . . . . . . . ._dos_mfree
highvideo. . . . . . . . . . . . . ._bold_on
insline. . . . . . . . . . . . . . _ins_line
isalnum. . . . . . . . . . . . . . _is_alnum
isalpha. . . . . . . . . . . . . . _is_alpha
isascii. . . . . . . . . . . . . . _is_ascii
isatty . . . . . . . . . . . . . . ._is_atty
iscntrl. . . . . . . . . . . . . . _is_cntrl
isdigit. . . . . . . . . . . . . . _is_digit
isgraph. . . . . . . . . . . . . . _is_graph
islower. . . . . . . . . . . . . . _is_lower
isprint. . . . . . . . . . . . . . _is_print
ispunct. . . . . . . . . . . . . . _is_punct
isspace. . . . . . . . . . . . . . _is_space
isupper. . . . . . . . . . . . . . _is_upper
isxdigit . . . . . . . . . . . . ._is_xdigit
itoa . . . . . . . . . . . . . . . _c_to_asc
. . . . . . . . . . . . . . . . . _i_to_asc
kbhit. . . . . . . . . . . . . . _ccheck_key
. . . . . . . . . . . . . . . . ._check_key
labs . . . . . . . . . . . . . . . . _abs...
ldiv . . . . . . . . . . . . . . . . _div...
lfind. . . . . . . . . . . . . . _lin_search
lowvideo . . . . . . . . . . . . . _bold_off
lsearch. . . . . . . . . . . . . _lin_search
lseek. . . . . . . . . . . . . . . _lseek...
ltoa . . . . . . . . . . . . . ._l_to_asc...
. . . . . . . . . . . . . . . ._l_to_dec...
_makepath. . . . . . . . . . . . ._merge_...
malloc . . . . . . . . . . . . ._near_malloc
. . . . . . . . . . . . . . . . _far_malloc
. . . . . . . . . . . . . . . . _rel_malloc
memccpy. . . . . . . . . . . . . . _mem_ccpy
memchr . . . . . . . . . . . . . . ._mem_chr
memcmp . . . . . . . . . . . . . . ._mem_cmp
memcpy . . . . . . . . . . . . . . ._mem_cpy
memicmp. . . . . . . . . . . . . . _mem_cmpi
memmove. . . . . . . . . . . . . . ._mem_mov
memset . . . . . . . . . . . . . . ._mem_set
mkdir. . . . . . . . . . . . . . . . _mk_dir
mktemp . . . . . . . . . . . . . . ._mk_temp
movedata . . . . . . . . . . . . . ._mem_mov
movetext . . . . . . . . . . ._move_textattr
movmem . . . . . . . . . . . . . . ._mem_mov
_nfree . . . . . . . . . . . . . ._near_free
_nmalloc . . . . . . . . . . . ._near_malloc
nosound. . . . . . . . . . . . . ._sound_off
open . . . . . . . . . . . . . . . . _open_h
_osmajor . . . . . . . . . . . . . ._osmajor
_osminor . . . . . . . . . . . . . ._osminor
_osversion . . . . . . . . . . . . ._version
perror . . . . . . . . . . . . . _dos_errmsg
printf . . . . . . . . . . . . . _put_script
_psp . . . . . . . . . . . . . . . ._get_psp
. . . . . . . . . . . . . . . . . . . ._psp
putc . . . . . . . . . . . . . . . _hput_chr
putch. . . . . . . . . . . . . . . _cput_chr
putchar. . . . . . . . . . . . . . ._put_chr
putenv . . . . . . . . . . . . . . ._set_env
puts . . . . . . . . . . . . . . . ._put_str
puttext. . . . . . . . . . . _write_textattr
qsort. . . . . . . . . . . . . ._array_qsort
. . . . . . . . . . . . . . . . _quick_sort
rand . . . . . . . . . . . . . . . . _rand_w
random . . . . . . . . . . . . . . ._randr_w
randomize. . . . . . . . . . . . ._rand_init
read . . . . . . . . . . . . . . . . _read_h
realloc. . . . . . . . . . . . ._far_realloc
. . . . . . . . . . . . . . . _near_realloc
. . . . . . . . . . . . . . . ._rel_realloc
remove . . . . . . . . . . . . . . _remove_h
rename . . . . . . . . . . . . . . _rename_h
rewind . . . . . . . . . . . . . _lseekbof_h
rmdir. . . . . . . . . . . . . . . . _rm_dir
scanf. . . . . . . . . . . . . . _get_script
_searchenv . . . . . . . . . . ._search_path
searchpath . . . . . . . . . . ._search_path
setcbrk. . . . . . . . . . . . ._cbrk_enable
setdisk. . . . . . . . . . . . . ._set_drive
setdta . . . . . . . . . . . . . . ._set_dta
setftime . . . . . . . . . . . . _setftime_h
setmem . . . . . . . . . . . . . . ._mem_set
setmode. . . . . . . . . . . . . ._setmode_f
settime. . . . . . . . . . . . . _setftime_h
setvect. . . . . . . . . . . . . . ._set_vec
. . . . . . . . . . . . . . . . . _set_vect
setverify. . . . . . . . . . . . _set_verify
_setvideomode. . . . . . . . . . ._set_vmode
sleep. . . . . . . . . . . . . . ._sleep_sec
sound. . . . . . . . . . . . . . . _sound_on
spawn... . . . . . . . . . . . _exec_prog...
_splitpath . . . . . . . . . . . ._split_...
sprintf. . . . . . . . . . . . ._sput_script
srand. . . . . . . . . . . . . . . rand_seed
sscanf . . . . . . . . . . . . ._sget_script
stime. . . . . . . . . . . . . . . _set_time
stpcpy . . . . . . . . . . . . . . _str_cpye
strcat . . . . . . . . . . . . . . ._str_cat
strchr . . . . . . . . . . . . . . ._str_chr
strcmp . . . . . . . . . . . . . . ._str_cmp
strcpy . . . . . . . . . . . . . . ._str_cpy
. . . . . . . . . . . . . . . . . _str_cpye
strcspn. . . . . . . . . . . . . . _str_cspn
_strdate . . . . . . . . . . . . . _asc_date
. . . . . . . . . . . . . . . ._date_to_asc
strerror . . . . . . . . . . . ._dos_errmsge
stricmp. . . . . . . . . . . . . . _str_cmpi
strlen . . . . . . . . . . . . . . ._str_len
strlwr . . . . . . . . . . . . . . ._str_lwr
strncat. . . . . . . . . . . . . . _str_ncat
strncmp. . . . . . . . . . . . . . _str_ncmp
strncmpi . . . . . . . . . . . . ._str_ncmpi
strncpy. . . . . . . . . . . . . . _str_ncpy
strnicmp . . . . . . . . . . . . ._str_ncmpi
strnset. . . . . . . . . . . . . . _str_nset
strtod . . . . . . . . . . . . . . _asc_to_d
. . . . . . . . . . . . . . . . . _asc_to_f
. . . . . . . . . . . . . . . . . _dec_to_d
. . . . . . . . . . . . . . . . . _dec_to_f
strtold. . . . . . . . . . . . . ._asc_to_ld
. . . . . . . . . . . . . . . . ._dec_to_ld
strpbrk. . . . . . . . . . . . . . _str_pbrk
strrchr. . . . . . . . . . . . . . _str_rchr
strrev . . . . . . . . . . . . . . ._str_rev
strset . . . . . . . . . . . . . . ._str_set
strspn . . . . . . . . . . . . . . ._str_spn
strstr . . . . . . . . . . . . . . ._str_str
_strtime . . . . . . . . . . . . . _asc_time
. . . . . . . . . . . . . . . ._time_to_asc
strtok . . . . . . . . . . . . . . ._str_tok
strtol . . . . . . . . . . . . . . _asc_to_l
strtoul. . . . . . . . . . . . . . _asc_to_l
strupr . . . . . . . . . . . . . . ._str_upr
swab . . . . . . . . . . . . . . . _mem_swab
system . . . . . . . . . . . . ._exec_sys...
tell . . . . . . . . . . . . . . . . _tell_h
textattr . . . . . . . . . . . . . _set_attr
textbackground . . . . . . . . ._set_bkcolor
textcolor. . . . . . . . . . . ._set_fgcolor
textmode . . . . . . . . . . . . ._set_vmode
time . . . . . . . . . . . . . . . _get_time
tmpnam . . . . . . . . . . . . . . ._mk_temp
toascii. . . . . . . . . . . . . . _to_ascii
tolower. . . . . . . . . . . . . . _to_lower
toupper. . . . . . . . . . . . . . _to_upper
ultoa. . . . . . . . . . . . . . . _l_to_asc
unlink . . . . . . . . . . . . . . _remove_f
_version . . . . . . . . . . . . . ._version
wherex . . . . . . . . . . . . . . _where_xy
wherey . . . . . . . . . . . . . . _where_xy
window . . . . . . . . . . . . . _set_region
write. . . . . . . . . . . . . . . ._write_h
Scripted I/O Function-to-Code Cross Reference
Codes for all ..._script functions:
_c_to_dec,
_dec_to_c. . . . . . . . . . . . . . .__BYTE
_i_to_dec,
_dec_to_i. . . . . . . . . . . . . . . __INT
_l_to_dec,
_dec_to_l. . . . . . . . . . . . . . .__LONG
_q_to_dec,
_dec_to_q. . . . . . . . . . . . . . .__QUAD
_c_to_asc,
_asc_to_c. . . . . . . . . . . . . __ASCBYTE
_i_to_asc,
_asc_to_i. . . . . . . . . . . . . .__ASCINT
_l_to_asc,
_asc_to_l. . . . . . . . . . . . .__ASCDLONG
_q_to_asc,
_asc_to_q. . . . . . . . . . . . . __ASCQUAD
_fixpi_to_dec,
_dec_to_fixpi. . . . . . . . . . . .__FXPINT
_fixpl_to_dec,
_dec_to_fixpl. . . . . . . . . . . __FXPLONG
_fixpq_to_dec,
_dec_to_fixpq. . . . . . . . . . . __FXPQUAD
_f_to_dec,
_dec_to_f. . . . . . . . . . . . . . __FLOAT
_d_to_dec,
_dec_to_d. . . . . . . . . . . . . .__DOUBLE
_ld_to_dec,
_dec_to_ld . . . . . . . . . . . . __LDOUBLE
_bcd_to_dec,
_dec_to_bcd. . . . . . . . . . . . . . __BCD
_l_to_asc,
_asc_to_l. . . . . . . . . . . . . __NEARPTR
_date_to_asc,
_asc_to_date . . . . . . . . . . . . .__DATE
_time_to_asc,
_asc_to_time . . . . . . . . . . . . .__TIME
_cput_beep,
_put_beep. . . . . . . . . . . . . . . _BEEP
_cput_chr,
_hput_chr,
_put_chr,
_cget_chr,
_hget_chr,
_get_chr . . . . . . . . . . . . . . .__CHAR
_cput_newline,
_put_newline . . . . . . . . . . . . . . _NL
_cput_str,
_hput_str,
_put_str,
_cget_str,
_hget_str,
_get_str . . . . . . . . . . . . . .__STRING
_Additional codes for the _cput_script function:
_afill_eol . . . . . . . . . . . . _AFILLEOL
_afill_line. . . . . . . . . . . . _AFILLINE
_afill_n . . . . . . . . . . . . . . _AFILLN
_afill_reg . . . . . . . . . . . . _AFILLREG
_bkbold_off. . . . . . . . . . . ._BKBOLDOFF
_bkbold_on . . . . . . . . . . . . _BKBOLDON
_blink_off . . . . . . . . . . . . _BLINKOFF
_blink_on. . . . . . . . . . . . . ._BLINKON
_bold_off. . . . . . . . . . . . . ._BOLDOFF
_bold_on . . . . . . . . . . . . . . _BOLDON
_clr_eol . . . . . . . . . . . . . . _CLREOL
_clr_line. . . . . . . . . . . . . ._CLRLINE
_clr_n . . . . . . . . . . . . . . . . _CLRN
_clr_region. . . . . . . . . . . . . _CLRREG
_cput_attr . . . . . . . . . . . . ._PUTATTR
_cput_chri . . . . . . . . . . . . ._PUTCHRI
_cput_linefeed . . . . . . . . . . . . . _FF
_cput_nattr. . . . . . . . . . . . _PUTNATTR
_cput_nchri. . . . . . . . . . . . _PUTNCHRI
_cput_return . . . . . . . . . . . . . . _CR
_cput_strci. . . . . . . . . . . . _PUTSTRCI
_cput_stri . . . . . . . . . . . . ._PUTSTRI
_cput_strji. . . . . . . . . . . . _PUTSTRJI
_cursor_off. . . . . . . . . . . . ._CURSOFF
_cursor_on . . . . . . . . . . . . . _CURSON
_del_line. . . . . . . . . . . . . ._DELLINE
_direc_down. . . . . . . . . . . . ._DIRDOWN
_direc_left. . . . . . . . . . . . ._DIRLEFT
_direc_right . . . . . . . . . . . _DIRRIGHT
_direc_up. . . . . . . . . . . . . . ._DIRUP
_fill_eol. . . . . . . . . . . . . ._FILLEOL
_fill_line . . . . . . . . . . . . ._FILLINE
_fill_n. . . . . . . . . . . . . . . ._FILLN
_fill_region . . . . . . . . . . . ._FILLREG
_get_attr. . . . . . . . . . . . . __GETATTR
_get_attrflags . . . . . . . . . .__GETATTRF
_get_attrtbl . . . . . . . . . . . __GETATBL
_get_dattr . . . . . . . . . . . .__GETDATTR
_get_direction . . . . . . . . . .__GETDIREC
_goto_bottom . . . . . . . . . . . _GOBOTTOM
_goto_end. . . . . . . . . . . . . . ._GOEND
_goto_home . . . . . . . . . . . . . _GOHOME
_goto_left . . . . . . . . . . . . . _GOLEFT
_goto_right. . . . . . . . . . . . ._GORIGHT
_goto_top. . . . . . . . . . . . . . ._GOTOP
_goto_x. . . . . . . . . . . . . . . . ._GOX
__SETX
_goto_xy . . . . . . . . . . . . . . . _GOXY
__SETXY
_goto_y. . . . . . . . . . . . . . . .__SETY
_GOY
_ins_line. . . . . . . . . . . . . ._INSLINE
_move_down . . . . . . . . . . . . . . _DOWN
_move_left . . . . . . . . . . . . . . _LEFT
_move_next . . . . . . . . . . . . . . _NEXT
_move_right. . . . . . . . . . . . . ._RIGHT
_move_up . . . . . . . . . . . . . . . . _UP
_region_off. . . . . . . . . . . . . _REGOFF
_region_on . . . . . . . . . . . . . ._REGON
_rel_xy. . . . . . . . . . . . . . . ._RELXY
_reset_attr. . . . . . . . . . . ._RESETATTR
_scroll_down . . . . . . . . . . . _SCRLDOWN
_scroll_up . . . . . . . . . . . . . _SCRLUP
_set_attr. . . . . . . . . . . . . __SETATTR
_ATTR
_set_attrflags . . . . . . . . . . . ._ATTRF
__SETATTRF
_set_attrtbl . . . . . . . . . . . __SETATBL
_set_bkboldmode. . . . . . . . . . ._BKBOLDM
_set_bkcolor . . . . . . . . . . . ._BKCOLOR
_set_blinkmode . . . . . . . . . . . _BLINKM
_set_border. . . . . . . . . . . . ._VBCOLOR
_set_cursor. . . . . . . . . . . . . _CURSOR
_set_dattr . . . . . . . . . . . .__SETDATTR
_DATTR
_set_direction . . . . . . . . . ._DIRECTION
__SETDIREC
_set_fgcolor . . . . . . . . . . . ._FGCOLOR
_set_region. . . . . . . . . . . . . _REGION
_set_vbordattr . . . . . . . . . . . _VBATTR
_vborder_off . . . . . . . . . . . . ._VBOFF
_vborder_on. . . . . . . . . . . . . . _VBON
_where_xy. . . . . . . . . . . . . . .__GETX
__GETY
__GETXY