home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 10 Tools
/
10-Tools.zip
/
fwktl101.zip
/
FWKTL101.DOC
< prev
next >
Wrap
Text File
|
1996-05-28
|
37KB
|
938 lines
(C)Copyright Frederick W. Kantor 1996. All rights reserved.
FWKTL(TM) Text_program Launcher, Version 1.01
for
OS/2 Protected Mode
1996 May 28
Summary:
FWKTL lets you use tight, .COM_like code in protected mode in OS/2:
flat, 32_bit code, able to address megabytes of memory, call OS/2 APIs,
and use dynamic link libraries (.DLLs). The special_format programs
loaded with FWKTL can modify themselves and their program files. A
"Hello, world!" program is less than 70 bytes long. FWKTL is shareware; it
must be registered for commercial, school, or government use. Assemblers
A386 and IBM Assembly Language Processor (ALP) are recommended.
This kit contains version 1.01 of program launcher FWKTL.EXE and program
trimmer FWKTRIM.EXE; two "Hello, world!" assembly_language source files
for use, respectively, with assemblers A386 and ALP; two source files
for a self_overwriting program; .BAT and .CMD programs to make programs
for loading with FWKTL; six examples of short "Hello, world!" programs;
and two examples of self_overwriting programs.
See registration information in the FWKTL101.REG file.
Distribution
~~~~~~~~~~~~
Except as otherwise authorized by the author, this software may be
distributed only in its original Authenticity Verified Zipfile
FWKTL101.ZIP: using PKUNZIP 2.04g, this test, PKUNZIP -t FWKTL101.ZIP,
must show OK -AV for every file, and must end with this statement:
Authentic files Verified! # OFT466
Frederick W. Kantor (founder/information mechanics)
displayed flush left.
WARNING: If you receive FWKTL101.ZIP without the AV stamp described
above, or if it contains any file which does not show OK -AV , do not
run any of the programs.
Validation: FWKCS(TM) contents_signatures for all the files but this one
(FWKTL101.DOC) that belong in FWKTL101.ZIP are listed near the end of
this file (see "Validation signatures"); the contents_signature for this
file itself is being distributed separately.
Programs
~~~~~~~~
FWKTL.EXE Text_program Launcher, Version 1.01, 1996 May 28.
(32_bit flat protected_mode assembly_language code)
For help screen, do FWKTL <enter>
FWKTRIM.EXE program trimmer, used in preparing programs made using
IBM Assembly Language Processor (ALP) and a 32_bit
linker (e.g., LINK386).
For help screen, do FWKTRIM /* <enter>
MK_A386.CMD general purpose utility for making .COM programs, and
optional code listing, using A386; can be used to
make special programs for loading with FWKTL in one
step.
For help screen, do MK_A386 <enter>
MK_ALP.CMD general purpose utility for making special .COM
programs for loading with FWKTL, in one pass;
can keep or delete intermediate files and code
listing; uses ALP, LINK386, and FWKTRIM.
For help screen, do MK_ALP <enter>
Special versions of MK_A386 and MK_ALP are provided for use just with
the "Hello, world!" templates:
MKHWA386.BAT make "Hello, world!" program, using assembler A386.
For help screen, do MKHWA386 <enter>
MK_HWALP.CMD make "Hello, world!" program, using ALP, LINK386, FWKTRIM.
For help screen, do MK_HWALP <enter>
examples of "Hello, world!" and self_overwriting programs are
discussed in Examples, below.
Background
~~~~~~~~~~
When people study a new computer language, one of the first programs is
often a skeleton program that writes "Hello, world!" to the screen.
In 16_bit assembly language code under DOS 3.30 or later, that only
takes 24 bytes, total, including carriage_return line_feed.
In protected mode, in assembly language, the overhead of using an .EXE
structure typically increases that by a factor of around 20 or more.
In C, a program to write "Hello, world!" to the screen may be around
15,000 bytes long -- more than 500 times as big.
Even larger "Hello, world!" programs are generated by compilers for other
high_level languages.
During this remarkable bloating of code, sight has often been lost of one
of the most subtle and powerful programming tools: the ability of a
program to redesign and rewrite itself.
Meanwhile, IBM's OS/2 operating system has grown so sophisticated that
many services offered by an older high level language, such as C, can now
be requested from the operating system directly from assembly language,
using only a few bytes of code. The supported services range from basic
file handling and input/output procedures, through coprocessor emulation,
geometric transforms and Bezier splines, and more. Semaphores for
multithread execution are directly supported by OS/2.
Assembly_language programming lets you use operating_system services,
without having to wait for someone else to incorporate them into a
high_level language, and without having to be burdened with large lumps
of unused code inflicted by coarsely grained compilers. A small program
can look, speaking metaphorically, like thin layers of glue holding
together the system calls, with an occasional little block of code that
carries out the special function of the program -- backed by the direct
power and speed of the CPU.
And, writing in assembly language helps protect against conceptual "blind
spots" which may be hidden in the assumptions underlying the design of a
high_level language.
However, the way in which "protected mode" has been implemented, has made
it difficult to use self_modifying code. And, popular tools for making
programs have not only added cumbersome overhead, they have seriously
obstructed people from seeing that programming can be thought about from
this point of view.
Protected_mode programs with self modification allowed
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
FWKTL launches special "text" programs (as distinct from "Presentation
Manager" programs) in protected mode, in such way that each program is
free to modify itself and free to modify the file from which it came.
This code supports the use of small, tightly written assembly_language
programs, and can launch large programs. (FWKTL itself is written in
flat 32_bit assembly_language)
These programs have a special header and structure, discussed in more
detail below (see "Program structure"). Instead of the overhead of an
.EXE file, the header for each program is only 12 bytes long.
An instance of FWKTL provides initialization, making available to the
newly launched program information as to where the program came from;
where it is loaded in memory; where to find its command tail; and where
the free memory it requested, if any, begins.
FWKTL provides streamlined procedures for the newly launched program to
obtain addresses for operating_system services, including a handle to use
for obtaining DOSCALL API addresses. This, in turn, lets the program use
system calls, load and call dynamically linked libraries, load and
execute programs, etc.
Because of the streamlined procedures, the incremental cost in program
size to selectively fetch more than one DOSCALL API address is only two
bytes per DOSCALL API.
A "Hello, world!" program loaded by FWKTL can be 41 bytes long, using a
simple SHOW procedure in FWKTL to send an ASCIIZ string up to, but not
including, its terminal 00 to 'standard output' (defaults to screen), and
append a terminal carriage_return line_feed. (to save space in this
short program, the exit errorlevel is not set to zero: the errorlevel
returned is the low 16 bits of the DWORD for the program's entry point.)
(EXAMPLE EQU 2; included as EX2_A386.COM and EX2_ALP.COM)
A "Hello, world!" program which includes the example of fetching the
address for the DOS32WRITE API, using it, cleaning up, and setting the
exit errorlevel to zero, is 69 bytes long.
(EXAMPLE EQU 1; included as EX1_A386.COM and EX1_ALP.COM)
A more complex "Hello, world!" program, which fetches a list of 25 API
addresses, uses two of them (DOS32BEEP and DOS32WRITE), etc, is 142 bytes
long. (EXAMPLE EQU 3; included as EX3_A386.COM and EX3_ALP.COM)
A self_overwiting program, which fetches and uses 3 API addresses (for
DOS32OPEN, DOS32WRITE, and DOS32CLOSE), is 232 bytes long, including the
internal 32_byte array in which it can save an entry from the command
tail. (source files SELFWRIT.1 and SELFWRIT.ASM for use respectively with
A386 and ALP; resulting programs included as EXS_A386.COM and EXS_ALP.COM)
Each program is written in assembly language, in flat 32_bit protected_mode
code; conditional jumps can use 32_bit relative addresses.
Using FWKTL to load and run a program
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Format: FWKTL (/option) PROGRAM.EXT command tail
where the only /option which can be added and still load and run a
program is /c (upper or lower case), described below.
For example, to load and run EX1_ALP.COM using FWKTL, do
FWKTL EX1_ALP.COM <enter>
To also display where the loaded program came from, and any command tail
furnished to it, use /c ; for example,
FWKTL /c EX1_ALP.COM this is a command tail <enter>
The program origin and command tail are written on separate lines to
'standard error' (handle 2); each line ends with 0d,0a (carriage_return
line_feed); this output defaults to the screen, and can be redirected
using 2> .
For example, to load and run EXS_ALP.COM, saving internally up to 32
bytes from the command tail, do
FWKTL EXS_ALP.COM load this command tail/w <enter>
To display any current non_zero contents of EXS_ALP.COM's internal
storage, do
FWKTL EXS_ALP.COM <enter>
EXS_ALP.COM outputs via the SHOW utility provided by FWKTL, which uses
the 'standard error' handle (handle 2); SHOW removes the terminal 00 from
the ASCIIZ string and adds a carriage_return line_feed (0d,0a). To
redirect the output from EXS_ALP to a file FOO, do
FWKTL EXS_ALP.COM 2>FOO <enter>
Starting FWKTL in a DOS session under OS/2:
If you start FWKTL in a DOS session under OS/2, an OS/2 session is
automatically opened and execution proceeds in protected mode.
However, when that OS/2 session is opened, it does not automatically
default to the current DOS directory: any program you have specified for
loading must either have appropriate d:\path\filename.ext, or be findable
on the default OS/2 PATH (specified in CONFIG.SYS) rather than on the DOS
PATH. For example, if the file is in a directory (Q) not on the OS/2
PATH, located below another directory (P) which is on the OS/2 PATH, then
you only need to provide enough path\ to reach down from P to Q. For
example, P\asneeded\Q\filename.ext (in this case, no ' \ ' at the
beginning of path\filename.ext ).
Don't assume that redirection ( < or > ) specified on the DOS command
line will work under these circumstances.
Filenames:
If you wish to, you can rename the .COM programs .EXE : in that case,
these special programs, when called directly in a DOS session, will
return to the command line; and when called directly in an OS/2 (Warp)
session, will result in a message saying that the program cannot be run
in an OS/2 session.
Any allowed filename and extension can be used for a program launched with
FWKTL, including HPFS long names and files without any extension. If a
filename has a gap in it, or a leading blank space, use quotation marks
around the entire name, including any blank spaces that serve as part of
the filename.
FWKTL can search for a program to launch which is specified using
d:\path\filename.ext (environment PATH not searched)
filename.ext (current directory is searched before PATH)
d:filename.ext (environment PATH not searched)
d:.\filename.ext "
d:..\filename.ext "
d:subpath\filename.ext "
d:.\subpath\filename.ext "
d:..\subpath\filename.ext "
\\machine\path\filename.ext "
\path\filename.ext (FWKTL inserts current drive's D: before
initial single '\'; environment PATH not
searched)
.\filename.ext (the first base directory used is the current
..\filename.ext directory, then directories on PATH are used
subpath\filename.ext sequentially as the base directory until the
.\subpath\filename.ext first copy of the file reached in that order
..\subpath\filename.ext is found)
For "file not found", FWKTL returns exit errorlevel = 65533
(your display may show this as -3 ).
Note: PROMPT $r can be used to display the exit errorlevel;
for example, for [d:\path errorlevel], use
PROMPT [$p $r] <enter>
Notes re specifying program to launch:
Wildcards are not permitted.
Backslash ('\') and forwardslash ('/') can be used in specifying a
program.
If a drive letter, initial backslash ('\'), or initial forwardslash
('/') is used in specifying the program to launch, then FWKTL does
not search the environment PATH.
If a single initial backslash ('\') or forwardslash ('/') is used in
specifying the program to launch, FWKTL inserts the default drive
letter and a colon D: before that '\' or '/'.
Any entries of the form
.\ or ./ current directory
..\ or ../ shift to the directory immediately above
appearing in the program specification are processed before the
program is launched, and do not appear in the origin information
provided to the program. More than one '..\' or '../' can be used.
Version identification
~~~~~~~~~~~~~~~~~~~~~~
To identify the version of FWKTL.EXE or FWKTRIM.EXE in a .CMD program,
you can use FWKTL /ver or FWKTRIM /ver to return the version number
without the decimal point as the exit errorlevel, and then branch on that
errorlevel. E.g., this is version 1.01, so FWKTL /ver returns an
errorlevel of 101. (in an OS/2 session, an errorlevel can be 0...65535;
when FWKTL is started from a DOS session under OS/2, its exit errorlevel is
not returned in that DOS session)
Also, FWKTL.EXE and FWKTRIM.EXE carry internal signatures which can be
read using BLDLEVEL. E.g., do BLDLEVEL FWKTL.EXE <enter>.
Program structure
~~~~~~~~~~~~~~~~~
FWKTL launches special protected_mode programs, each of which starts with
a 12_byte header, can end with a RET command, and has available to it
specific services and initial data described below.
Program header:
CODESTART: ; optional reference point for describing offsets within the
; code
RET ; 32_bit header identification string C3h,46h,57h,4Bh
DB 'FWK' ;
DD PSETUP ; bit00 = 0 for PSETUP=0 (see P_ STRUC)
; bit00 = 1 for PSETUP=1 (see P_ STRUC)
; bits 31...01 are reserved, and must be zero for use with
; FWKTL version 1.00.
DD TYPE P_ ; amount of free memory requested after code;
; in these examples, just enough to hold a P_ STRUC;
; PSETUP affects the size of P_ STRUC used
; to hold standard FWKTL initialization data;
; storage of any other data there also affects the
; size of P_ STRUC; e.g., P_ can contain buffers.
; the free memory starts DWORD aligned, zeroed.
; more memory than used in P_ STRUC can be requested;
; note that memory requested in this way is committed
; when allocated.
; for efficiency and flexibility, programs which need a
; lot of memory can use API procedures to allocate and
; free memory, rather than asking for it as part of
; installation. EXAMPLE EQ 3 loads the addresses for
; calling some memory management procedures.
; Note that this kind of program can write new code into
; the memory and then run it, or can relocate or modify
; itself and continue to run.
; this is the execution entry point
;.
;. (program follows here)
;.
The first byte is a "return" command: if one of these programs is
accidentally started, it simply returns to the command line. That byte,
together with the next three bytes, makes a 32_bit signature for
identifying the program type.
The second 4_byte double_word is bit flags, of which bit00 is used in
this first release; bits 31...01 are reserved and must be 0. The bit00
flag tells FWKTL whether to provide addresses for two extra functions
(see P_ STRUC, below).
The third 4_byte double_word specifies how much extra free space is to
be initially committed when the program is loaded, starting double_word
aligned after the end of the program.
The entry point is offset 12 bytes into the program (counting the first
position as offset 0).
Program EOF:
When this type of program is assembled using IBM's ALP, a linker may be
needed to insert relative offsets for calls to routines within the
program. The resulting .EXE or .DLL file is then stripped down to make
the finished program, using FWKTRIM. For this purpose, an end_of_file
designator DB 'FWKEOF',0,1 is placed at the end of the source code to
mark where to strip the tail. (see HELOWRLD.ASM and SELFWRIT.ASM)
When Eric Isaacson's A386 is used to assemble the program, the output is
the finished code; a linker is not needed, a program end_of_file
designator is not used, and FWKTRIM is not needed. (see HELOWRLD.1 and
SELFWRIT.1)
Initialization
~~~~~~~~~~~~~~
FWKTL loads a program and sets
EAX = entry point for execution
EBX = 0 if no free memory requested
ELSE EBX points to start of free memory, DWORD aligned, after code
ECX = number of DWORDs in initial data requested (see P_ STRUC)
ESI points to start of initial_data source (matching start of P_)
EDI = 0 if no free memory requested
ELSE EDI = EBX = start of free memory, in case you wish to put
initial data there
the "direction flag" (decrement flag) is cleared (CLD)
FWKTL provides initial values, and several procedures;
(see P_ STRUC, below, for initial values and procedure addresses)
These values are easily copied, with ESI, EDI, ECX, and CLD from
FWKTL. If free memory was requested (see HELOWRLD.1 and HELOWRLD.ASM),
use
REP MOVSD
If no free memory was requested, save initial values in the STACK:
e.g.,
SUB ESP,TYPE J_
MOV EBP,ESP
MOV EDI,EBP
REP MOVSD ; using ESI, ECX, and CLD from FWKTL
Transfer of control
~~~~~~~~~~~~~~~~~~~
FWKTL calls the program as a routine in Thread 1:
on entry, the STACK from FWKTL provides working space for 0400h
(1024 decimal) dwords, not counting space allowed for system
use;
the STACK will not return an exception until more than 0ABAh
dwords are pushed (2746 decimal)
on return to FWKTL, CS, SS, and ESP must be correct when RET is
executed
EAX, EBX, ECX, EDX, ESI, EDI, EBP, DS, ES, FS, GS, and flags can be
changed
EAX is used to return an exit errorlevel, of which the low 16 bits
(AX) is returned by OS/2 Warp at the command line.
to display exit errorlevels, you can use PROMPT=[$p $r]
STRUCture for initial data, and FWKTL services
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
PSETUP is used to control P_ STRUC and to set
bit00 in the second DWORD in the program header
= 0 to get the shorter initial setup data;
= 1 to get the longer initial setup data which has the addresses
for the SHOW and USWORDCAPS utilities
;-------------------------------------------------------
; structure for initial data:
P_ STRUC ; these are provided by FWKTL during initialization,
; according to file header settings:
P_LOADEDAT DD ? ; start of this memory block
P_PWHENCE DD ? ; points to ASCIIZ string re where program was found
P_PCOMTAIL DD ? ; points to ASCIIZ command tail
P_GETFN DD ? ; address for indirect call to FWKTL GETFN function:
;
; Input:
; EAX = ProcedureOrdinal
; (maximum permitted OS/2 ordinal <= 65533)
; if EAX > 0, ESI is ignored
; OR
; EAX = 0
; ESI points to ASCIIZ procedure_name
;
; EDX = module handle
; EDI points to target DWORD to receive
; procedure address
;
; Output:
; if no error:
; zero_flag is set
; procedure address is in target DWORD
; EAX = 0
;
; if error:
; zero_flag is cleared
; EAX contains error number:
; 6 ERROR_INVALID_HANDLE
; 123 ERROR_INVALID_NAME
; 65079 ERROR_ENTRY_IS_CALLGATE
;
; all other CPU registers and flags are preserved
P_GETFNLIST DD ? ; address for indirect call to FWKTL GETFNLIST
; function, to get the addresses for a list of
; procedures in the same module:
;
; EBX, EDX, EBP are preserved across this function
;
; Input:
; EAX = 0 if list is ASCIIZ procedure_names
; 2 if list is WORD ordinals
; 4 if list is DWORD ordinals
; (maximum permitted OS/2 ordinal = 65533)
; ECX = number of items in procedure list
; EDX = module handle
; ESI points to start of list of WORDs, DWORDs,
; or series of ASCIIZ procedure_names
; EDI points to start of target DWORDs to receive
; the corresponding procedure addresses
;
; Output:
; if no error:
; zero_flag is set
; each target DWORD contains its procedure address
; ESI:
; if EAX = 0
; ESI points to terminal 00h of last ASCIIZ
; string;
; ELSE if EAX > 0
; ESI points to first byte after source;
; EDI points to first byte after last target DWORD
;
; if error:
; zero_flag is cleared
; EAX contains error number:
; 6 ERROR_INVALID_HANDLE
; 123 ERROR_INVALID_NAME
; 65079 ERROR_ENTRY_IS_CALLGATE
; ECX is not decremented on failed step
; ESI points to list item identifying the procedure
; for which the failure occurred
P_HDOSCALLS DD ? ; handle for DOSCALLS module as loaded by FWKTL,
; can be used in EDX for P_GETFN or P_GETFNLIST.
;------------------------- end of setup for PSETUP EQ 0
IF PSETUP EQ 1
; two additional procedures are optionally available from FWKTL:
P_SHOW DD ? ; address for FWKTL SHOW function;
;
; usage:
;
; ESI points to ASCIIZ string to show on screen
; using 'standard error' handle=2;
; this procedure drops terminal 00 and adds 0D,0A;
; all CPU registers and flags are preserved.
P_USWORDCAPS DD ? ; address for FWKTL capitalization function;
;
; usage:
;
; ESI points to contiguous string > ' ' to
; capitalize, US English;
; all CPU registers and flags are preserved.
;
; (e.g., this procedure can be used when '/' or '-'
; is found in command tail, for case_insensitive
; options when you don't capitalize whole tail)
ENDIF ;------------------------- end of setup for PSETUP EQ 1
P_ ENDS ; end of P_ STRUC
; (for examples, see HELOWRLD.1 and HELOWRLD.ASM)
Termination
~~~~~~~~~~~
The program terminates by returning to FWKTL. For example,
EXIT:
XOR EAX,EAX ; set exit errorlevel to 0
BADEXIT: ; jump to here if trouble, and pass errorlevel along
MOV ESP,EBP
IF KEEP_EBX ; optionally remove one dword from stack
POP EBX ; (see HELOWRLD.1, HELOWRLD.ASM, SELFWRIT.1, SELFWRIT.ASM)
ENDIF ; (IF and ENDIF shown here are in ALP format)
RET ; return to FWKTL
FWKTL then releases memory it allocated for the program, and exits
with the errorlevel passed to it in EAX.
Examples
~~~~~~~~
"Hello, world!" programs (for self_overwrite, see below):
Two "Hello, world!" program templates are included: HELOWRLD.1, and
HELOWRLD.ASM. In each of these templates, three different settings of
EXAMPLE can be used to control what is made.
For use with Eric Isaacson's A386 assembler version 0.66 or later:
HELOWRLD.1 for assembly using A386 to make HELOWRLD.COM.
Running in a DOS session, this command produces the
finished output:
A386 HELOWRLD.1 <enter>
MKHWA386.BAT uses A386 to make a detailed .LST along with
HELOWRLD.COM, by running this command line:
A386 +P3 +G16 +S +L39 +H127 helowrld.1
For use with IBM Assembly Language Processor Version 3.00.004 or later
(ALP):
MK_HWALP.CMD running in an OS/2 session, this does the
following in one pass:
HELOWRLD.ASM is assembled using ALP to make HELOWRLD.OBJ
HELOWRLD.OBJ is linked using LINK386 and HELOWRLD.DEF (included)
to make HELOWRLD.DLL
HELOWRLD.DLL is trimmed using FWKTRIM.EXE (included) to make
output file HELOWLD2.COM
Whether using A386 or ALP, first use a text editor to set the desired
value for EXAMPLE in the appropriate source file, and then build the
output program.
Setting EXAMPLE to its three possible values in HELOWRLD.1 and
HELOWRLD.ASM results in three output programs from each. For each value
of EXAMPLE, the two output files have the same length whether made using
HELOWRLD.1 or HELOWRLD.ASM. However, the programs made with A386 differ
from the programs made using ALP in how MOV EBP,ESP and MOV ESP,EBP
are coded (this is part of the assembler "footprint" system used in A386).
Copies of these six output programs are included as
EX1_A386.COM EX2_A386.COM EX3_A386.COM (from HELOWRLD.1), and
EX1_ALP.COM EX2_ALP.COM EX3_ALP.COM (from HELOWRLD.ASM).
Self_overwrite programs:
For use with Eric Isaacson's A386 assembler version 0.66 or later:
SELFWRIT.1 for assembly using A386 to make SELFWRIT.COM.
Running in a DOS session, this command produces the
finished output:
A386 SELFWRIT.1 <enter>
MK_A386.BAT uses A386 to make a detailed %1.LST along with
%1.COM, by running this command line:
A386 +P6 +G16 +S +L39 +H127 %1
Usage: MK_A386 filename.ext k <enter>
where option k is to make a code .LST
(the +P6 setting is to support code up to and
including Intel's Pentium Pro)
For use with IBM Assembly Language Processor Version 3.00.004 or later
(ALP):
SELFWRIT.ASM and SELFWRIT.DEF are provided. Use MK_ALP to make
SELFWRIT.COM:
MK_ALP.CMD running in an OS/2 session, this does the
following in one pass:
%1.ASM is assembled using ALP to make %1.OBJ
%1.OBJ is linked using LINK386 and %1.DEF to make %1.DLL
%1.DLL is trimmed using FWKTRIM.EXE (included) to make
output file %1.COM
Usage: MK_ALP filename (k) <enter>
where option k is to keep intermediate files, code
listing, .MAP, REPORT from ALP, etc
Important: use only the filename, without any
extension.
Note that programs assembled with A386 and those assembled using ALP will
normally show differences in how various instances of the MOV command are
coded. This is used in A386 as a "footprint" for the assembler; it does
not change the length of the program.
FWKTL help screen
~~~~~~~~~~~~~~~~~
For online description from FWKTL, type FWKTL /* <enter>
The resulting help screen is written to 'standard output' (handle 1),
which defaults to the screen and can be redirected using > .
Here is what the FWKTL help screen looks like:
------------------------------------------------------------------------------
FWKTL(TM) Text_program Launcher, Ver. 1.01. 1996 May 28. OS/2 protected mode.
(C)Copyright Frederick W. Kantor 1996. All rights reserved.
Format: FWKTL (/option) (D:\PATH\)PROGRAM.COM (command tail)
Use full filename.ext, no wildcards; if gap in filename, use quotes; can use
HPFS long names. Program search defaults to current directory, then PATH.
PROGRAM.COM can contain self_modifying code, and can modify its own file.
option:
* - show this help screen; set errorlevel = 65535 decimal ("-1").
c - show where program was found; if launched, show command tail; 2 lines.
ver - set exit errorlevel per version number sans ".".
exit errorlevel:
FWKTL:
65533 ("-3") - file not found.
65534 ("-2") - wrong program header.
65535 ("-1") - see help screen.
/ver (see above).
ELSE operating_system errorlevel.
ELSE returns exit errorlevel per EAX from PROGRAM.COM.
------------------------------------------------------------------------------
FWKTRIM help screen
~~~~~~~~~~~~~~~~~~~
For online description from FWKTRIM, type FWKTRIM /* <enter>
The resulting help screen is written to 'standard output' (handle 1),
which defaults to the screen and can be redirected using > .
Here is what the FWKTRIM help screen looks like:
------------------------------------------------------------------------------
FWKTRIM(TM) Text_program Trimmer. 1.01. 1996 May 28. OS/2 protected mode.
(C)Copyright Frederick W. Kantor 1996. All rights reserved.
Format: FWKTRIM (/option) < (D:\PATH\)PROGRAM.ext > PROGRAM.COM
The output file, PROGRAM.COM, is for use with FWKTL(TM):
PROGRAM.COM can contain self_modifying code, and can modify its own file.
option:
* - show this help screen; set errorlevel = 65535 decimal ("-1").
ver - set exit errorlevel per version number sans ".".
exit errorlevel:
0 - no error.
65533 ("-3") - did not find tail 'FWKEOF',0,1 .
65534 ("-2") - did not find header C3h,'FWK'.
65535 ("-1") - see help screen.
/ver (see above).
ELSE operating_system errorlevel.
------------------------------------------------------------------------------
MK_A386 help screen
~~~~~~~~~~~~~~~~~~~
For online description from MK_A386, type MK_A386 <enter>
Here is what the MK_A386 help screen looks like:
------------------------------------------------------------------------------
Part of the FWKTL(TM) Text_program Launcher kit, version 1.01.
(C)Copyright Frederick W. Kantor 1996. All rights reserved.
MK_A386.BAT for use with A386 version 0.66 or later.
Usage: MK_A386 FILENAME.EXT (k) "<enter>"
where option k makes a .LST file (see below)
"Wildcards" can be used in FILENAME.EXT.
Output files:
FILENAME.COM for loading with FWKTL
IF k option:
FILENAME.LST code list, from A386
------------------------------------------------------------------------------
MK_ALP help screen
~~~~~~~~~~~~~~~~~~
For online description from MK_ALP, type MK_ALP <enter>
Here is what the MK_ALP help screen looks like:
------------------------------------------------------------------------------
Part of the FWKTL(TM) Text_program Launcher kit, version 1.01.
(C)Copyright Frederick W. Kantor 1996. All rights reserved.
MK_ALP.CMD for use with
IBM Assembly Language Processor (ALP), Ver. 3.00.004 or later,
LINK386, and
FWKTRIM.EXE, version 1.01.
Usage: MK_ALP FILENAME (k) "<enter>"
where option k keeps the intermediate files (see below)
Important: for input, use only the filename, without any file extension
Input files: FILENAME.ASM, FILENAME.DEF
Output files: FILENAME.COM for loading with FWKTL
IF k option: FILENAME.OBJ intermediate step, made by ALP
FILENAME.LST code list, from ALP
REPORT describing work done by ALP
FILENAME.MAP byproduct of LINK386
FILENAME.DLL intermediate step, before stripping
------------------------------------------------------------------------------
Validation signatures
~~~~~~~~~~~~~~~~~~~~~
Here is a sorted list of the FWKCS contents_signatures for all the other
files that belong in FWKTL101.ZIP, except for this file itself (FWKTL101.DOC):
005DCA3C 6A25DAB87540C3AECB0910D7671050E37EC FWKTL101.REGaFWKTL101.ZIPv
0BC2F46A 2943A66DF04CA4FFC0DDB6A26F13095F4D EX2_A386.COMaFWKTL101.ZIPv
188A6443 8EF79095357D15E6289196871479AB4D27 EX3_ALP.COM aFWKTL101.ZIPv
1EA5151B 611654C3B0EDBCA6AFD25ACC2FB2546DF21 MK_HWALP.CMDaFWKTL101.ZIPv
3FE300CD 78EF4912965D938725169E009D9F87652DF MK_ALP.CMD aFWKTL101.ZIPv
416256DF 456E92D09485626ED4FFB921A6FFAC2839 EX1_A386.COMaFWKTL101.ZIPv
4191819F 56E31BA196ADD84D2551F017CA57DE9D188A HELOWRLD.ASMaFWKTL101.ZIPv
4F6A5A79 2414F84FF54ED966AC138CF491BAD1479D8 HELOWRLD.DEFaFWKTL101.ZIPv
59D3574E 23962F6DEC24FDC96BAF5404909049EF221 MKHWA386.BATaFWKTL101.ZIPv
6533CCB4 BDC9DD5CD36562D9604345BCD4BD3E159FF FWKTL.EXE aFWKTL101.ZIPv
7C2AD1E4 5755F298FF47E7128F4FE25D5F79AB7AF8AD HELOWRLD.1 aFWKTL101.ZIPv
8C221964 E88B1E6E22000866441D3766F12360D02E EXS_ALP.COM aFWKTL101.ZIPv
8D75B9C3 BC756FF1DA8AFD8A2504CD3D7E3442D8B42 WHATSNEW.101aFWKTL101.ZIPv
940034D8 45D42C7C9E7575549EFB36A11A55DAA55D EX1_ALP.COM aFWKTL101.ZIPv
99E0B49B 1C3F04936838E18E9D3E404C997BA84E434 FILE_ID.DIZ aFWKTL101.ZIPv
9CBBFD6C 357CA353634B5B40F1DFEA41A08BCAA009C MK_A386.BAT aFWKTL101.ZIPv
AFC6DB06 71078CCB22A14049DC8B42B66B841B6F024 FWKTRIM.EXE aFWKTL101.ZIPv
B8B75D26 8E3D89B84B4DBB891AE69F5531AC1330D7 EX3_A386.COMaFWKTL101.ZIPv
BFDC8016 151FFBCEF4FCD02C8822D5B339FFB232872C SELFWRIT.ASMaFWKTL101.ZIPv
C2CFD39E 149B315AAE40D82209E051CB854D0E477FC3 SELFWRIT.1 aFWKTL101.ZIPv
D9BD3385 E81AE572DB5E6659B483BD1FBB954F0BD0 EXS_A386.COMaFWKTL101.ZIPv
DF2FD32B 24196B1C5E17CDB06B96757D9BE6301E169 SELFWRIT.DEFaFWKTL101.ZIPv
F6377BB0 29AC8E3EBD479C62ABCF942C8E8882E1CF EX2_ALP.COM aFWKTL101.ZIPv
The FWKCS contents_signature for this file itself is being distributed
separately. (The FWKCS(TM) Contents_Signature System is separately
available; current version as of 1996 May 28 is 2.05, distributed in
FWKCS205.ZIP.)
Support
~~~~~~~
Correspondence may be sent by Internet email to fred.kantor@factory.com
Public support is available through the ILink FWKCS conference.
See registration information in FWKTL101.REG file.
-----------------------------------------------------------------------
FWKCS, FWKTL, and FWKTRIM are trademarks of Frederick W. Kantor.
IBM, OS/2, Warp, Presentation Manager, and IBM Assembly Language
Processor (ALP) are trademarks of International Business Machines
Corporation.
Intel and Pentium Pro are trademarks of Intel Corporation.
A386 was written by Eric Isaacson, copyrighted 1995, 1996.