Subversion Repositories SvarDOS

Rev

Rev 949 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 949 Rev 988
Line 3... Line 3...
3
                    === SvarCOM implementation notes ===
3
                    === SvarCOM implementation notes ===
4
 
4
 
5
 
5
 
6
=== SWAPPING =================================================================
6
=== SWAPPING =================================================================
7
 
7
 
8
While conventional RAM is scarce, a command line interpreter must make effort
8
Conventional RAM is scarce, that is why a command line interpreter must make
9
to reduce its memory footprint when launching applications. SvarCOM does that
9
efforts to reduce its memory footprint when launching applications. SvarCOM
10
by installing a small executable module in memory, called RMOD (for Resident
10
does that by installing a small executable module in memory, called RMOD (for
11
MODule). SvarCOM pre-sets RMOD so knows how to execute the external program
11
Resident MODule). SvarCOM pre-sets RMOD so it knows how to execute the external
12
and removes itself from memory, letting RMOD do the job. RMOD executes the
12
program and removes itself from memory, letting RMOD do the job. RMOD executes
13
application, waits for it to finish and then calls back SvarCOM.
13
the application, waits for it to finish and then calls back SvarCOM. All
-
 
14
necessary contextual data is kept in a resident, RMOD-owned memory structure.
14
 
15
 
15
 
16
 
16
=== NLS STRINGS ==============================================================
17
=== NLS STRINGS ==============================================================
17
 
18
 
18
SvarCOM can output information in many languages. To do so, it relies on a
19
SvarCOM can output information in many languages. To do so, it relies on a
19
precompiled resource file named SVARCOM.LNG. When SvarCOM starts, it looks
20
precompiled resource file named SVARCOM.LNG. When SvarCOM starts, it looks
20
for this file in the %NLSPATH% directory and loads from it the part that
21
for this file in the %NLSPATH% directory and loads from it the part that
21
contains the %LANG% language. All this is done by nls_langreload().
22
contains the %LANG% language. All this is done by nls_langreload().
22
 
23
 
23
The SVARCOM.LNG file is compiled by a separate tool: TLUMACZ. It takes
24
The SVARCOM.LNG file is compiled by TLUMACZ (from the SvarLANG.lib suite). It
24
CATS-style language files as input and compiles them into a single SVARCOM.LNG
25
takes CATS-style language files as input and compiles them into a single
25
resource file. It also produces a DEFAULT.LNG with english strings only, this
26
SVARCOM.LNG resource file. It also produces a DEFLANG.C file with english
26
one is embedded into the SvarCOM executable to display english text in case
27
strings only, this one is embedded into the SvarCOM executable to display
27
SVARCOM.LNG is unavailable.
28
English text in case SVARCOM.LNG is unavailable.
28
 
29
 
29
 
30
 
30
=== BATCH FILES SUPPORT ======================================================
31
=== BATCH FILES SUPPORT ======================================================
31
 
32
 
32
When SvarCOM executes a command, it checks first if it has a *.BAT extension.
33
When SvarCOM executes a command, it checks first if it has a *.BAT extension.
Line 74... Line 75...
74
programs to a directory in %PATH%. Executable links are flat files written in
75
programs to a directory in %PATH%. Executable links are flat files written in
75
%DOSDIR%\LINKS\. Each file there contains the directory where the matching
76
%DOSDIR%\LINKS\. Each file there contains the directory where the matching
76
program should be looked for.
77
program should be looked for.
77
 
78
 
78
 
79
 
-
 
80
=== STACK-OVERFLOW PROTECTION =================================================
-
 
81
 
-
 
82
RMOD reserves a 64-bytes memory buffer for its private stack. This is more than
-
 
83
enough for RMOD itself, as well as for the DOS exec function INT 21h,AX=4B00h.
-
 
84
 
-
 
85
There may be, however, exotic configurations where this stack is not enough,
-
 
86
typically if some stack-hungry TSR kicks in while RMOD is being active, or some
-
 
87
large interrupt handlers are used, etc. In such situation the 64-bytes stack
-
 
88
could be overflowed. RMOD copes with this by placing the stack right on top of
-
 
89
its command history buffer, and terminates the history string with a specific
-
 
90
signature. This way, if a stack overflow occurs and damages the command history
-
 
91
buffer, SvarCOM is able to easily detect it and invalidates the history buffer,
-
 
92
causing no risk of system instability. The user is notified about it, and the
-
 
93
only inconvenience is that he cannot recall the previous command.
-
 
94
 
-
 
95
Below the input buffer is RMOD's own memory signature, followed by its PSP.
-
 
96
This means that should the stack overflow become truly severe (more than 192
-
 
97
bytes and less than 326 bytes), RMOD signature will be overwritten and SvarCOM
-
 
98
won't be able to locate it, so a new copy of RMOD will be recreated. In case of
-
 
99
of a stack overflow that tries to use more than 326 bytes of memory, all hope
-
 
100
is lost and everything becomes possible.
-
 
101
 
-
 
102
 
79
===================================================================== EOF ====
103
===================================================================== EOF ====