[FlexNet] English Documentation

John Papson [email protected]
Thu, 2 Oct 2003 12:24:34 -0500


Mike:

Follows is what I have on Flex_32 in English.

While one can "machine translate" German into English,
the technical terms usually don't do well..

Don, N2IRZ, has be a great aide in translating in the past.

73

John WB2CIK

Flexnet_32_eng.doc  follows:

*******************************************************
PC/Flexnet32=20

FlexNet/32 overview
FlexNet/32 offers for the first time an integrated and modular Packet =
Radio
solution for all current Windows versions. At the same time, this =
package is
a partial update for existing, DOS-based PC/FlexNet installations under
Windows.

The most important features=20
All parameters are set via a Graphical User Interface (GUI). =
Configuration
via DOS Batch files is eliminated. Drivers can be added and removed =
during
operation. High performance for future data transmission rates .

Limitations=20
DOS applications are no longer supported, as with 16-bit Windows =
programs.
Although not all drivers for current hardware are provided at this =
time, we
are working on it. Some drivers presently run only on certain Windows
versions. There is still no Digipeater (Node) kernel available. =
However, in
the near future one will become available for at least Windows NT and =
2000.
It can then be installable as a service.=20

Update of existing installations on WIN9x=20
It is sufficient to unpack the FLEX32.ZIP into the existing FlexNet =
listing.
Old versions of the programs will be overwritten - a backup of those =
files
would be a good idea. The usual functions are available, along with a =
few
bug fixes and extensions. In order to update to FlexNet32, you need to
remove the FlexNet module calls from the startup batch file, best
accomplished by commenting out the relevant lines in AUTOEXEC.BAT. =
After
windows starts, the application FLEXCTL.EXE must be started manually. =
One
could also automate this function by adding an entry to the Autostart
directory.  Now you only have to parameterize the 32-bit driver as with =
a
new installation.  Naturally, the above instructions and limitations =
only
apply to those drivers and applications that are available.
=20
New installation=20
Unpack the files from the .ZIP archive into a directory. Then start
FLEXCTL.EXE and, if desired, put a link into the autostart folder.
Rebooting is not necessary.  The channel drivers are installed and
parameterized (configured) via the Parameter menu, and become =
immediately
functional. Possible resource conflicts or parameterization errors are
indicated with an icon in the channel list.
=20
Installing new or updated drivers=20
Simply copy the new driver(s) into the FlexNet directory.  They become
immediately available in the Driver selection box.  Please observe any
release notes!  With driver updates, FlexNet must be terminated and
restarted after the updated drivers are copied.

(D)K7WJ=20

Available drivers for FlexNet32=20
Driver 	Win9x, ME 	NT4 		Win2000 =09
6pack 		x 		x 		x =09
Ser12 		- 		- 		- =09
Par96 		x 		x 		x =09
AXIP 		x 		x 		x =09
AXIPX 	x 		x 		x =09
EPP 		x 		x 		x =09
IPAX 		x 		- 		- =09
KISS 		x 		x 		x =09
PR430 		x 		x 		x=20

*******************************************************

FlexNet API doc, machine translated by me, not perfect but a start:

*******************************************************

Original title in German:  Programmentwicklung f=FCr PC/FlexNet - =
Einf=FChrung
Program development for PC/FlexNet - introduction

PC/FlexNet reached lately a quite high distribution level, what is  to =
be
attributed finally to its flexible structure. Through the modular =
approach,
it is possible to adapt the package characteristic extensively to the =
needs.
Monolithische drafts as well as for example TFPCX erkaufen the support =
of
manifold hardware through high storage requirement, or the author must
several versions of the package maintain, that support respectively =
another
hardware.=20
The Modularity of PC/FlexNet offers moreover the possibility to develop
different parts of the package independently from one another further,
without that permanently extensive sources must be exchanged. In =
addition
different interfaces are defined, that regulate the communication of =
the
Module with the FlexNet-Kernel.=20
Especially interesting for software developer the possibility is packs =
to
equipped, almost any uses with one-radio interface, even directly =
explain
without itself with the transmission medium to m=FCssen. At the same =
time the
development is eased in that the communication does not happen over the
interface by kryptische Interruptaufrufe, but rather is received by
C-functions, that are summarized in a linkbaren Library. This eased =
will
become strongly simplified the development enormously, moreover the =
finished
programs through it relatively independent of the hardware-platform, a
Portierung of packages that run already on other hardware or other =
operating
systems.=20
Further on simplest manner, applications can be bound as a
=E7=E7TSR''-Programme, without that the developer must busy himself in =
addition
with the Feinheiten of the DOS-programming. Accesses on the File system =
are
at the same time unrestricted possible. The Compilat must become solely =
with
a special object-module gelinkt. For TSR-programs, with which no
Filezugriffe are necessary, a verkleinerte version of the C-Library =
exists
by what means such TSRs can be realized very compact.=20
All libraries necessary to the program development and Module are in =
form of
a =E7=E7Baukastens'' available, moreover the dazugeh=F6renden header =
file with the
declarations of the structures related in the API and types. In the
following should on the application interface more exactly gone in =
become.=20
This contribution does not understand should serve itself as an =
instructions
to the programming of applications, it as a =E7=E7Appetitanreger'' for =
all that,
packs write wanted that already always once a program for-radio, but
previously before the expense zur=FCckschreckten, that for example with =
the
use the so-called. =C7=E7Hostmodes'' in the TNC-Firmware or the =
interrupt-
interface of the various TFPC-programs connected are. Nevertheless it =
can
help over the first hurdles in the Kodierung.=20

The FlexNet-API
For the programmer, the FlexNet-Kernel in form of a collection of
C-functions represents itself, that he can use in its project, in order =
to
exchange data over AX.25-Verbindungen. The bandwidth of the functions
submits of the Connect-command over l2_printf (), That formattierte =
data at
a connection issues, to Frame-envoy functions, that permit the sending =
of
packets with any contents and any PID under notice of the Framegrenzen.
Through it the Implementierung does not become of higher protocols e.g.
TCP/IP or an AX.25-L3 be developed yet (NET/ROME!) enables.=20

Data structures
In the following becomes there and again reference on data structures =
of the
API taken become, also the examples the API-proclamations contained
different indicating reference. Because of the totality here the most
important definitions abgedruckt are:=20
	/* Framestructure */ typedef struct
	    {
	    byte dest [FLXCALL];
	    byte source [FLXCALL];
	    byte digis;
	    byte nextdigi;
	    byte canal;
	    byte AXV2;
	    byte pid;
	    byte type;
	    byte cmd;
	    byte pf;
	    byte nr;
	    byte ns;
	    byte dama;
	    byte tx;
	    byte txdelay;
	    byte reserved[3];
	    U16 textlen;
	    byte far *text;
	    U16 qsonum;
	    U16 partner_num;
	    byte digi[DIGIS][FLXCALL];
	    } FRAME;

	/* Information block out of L2 *// typedef struct
	    {
	    I16 len;
	    byte pid;
	    byte text[256];
	    } INFORMATION;

Initialization and UnInitialization
First API-proclamation of an application must always the function =
ax_init ()
Are. It registers the application in the Kernel and initialisiert the =
basis
address of the leap strip on which the Kernel function are to be found.
ax_init () 1 delivers if the Kernel was found and 2 if the Digi module =
is
loaded. The Kernel is not found or it concerns delivers an incompatible
version ax_init () The values 0 back. To informative purposes can with
l2_version () A pointer on the Versionskennung got become. Before the
Terminieren, an application should itself with ax_exit () In the Kernel
abmelden.=20
An application is carried out as a TSR, the Initialisierung falls =
because
this is made then by the TSR-Lader in the API.=20

Characteristic expansions - the Device-Vector
The API offers in addition the possibility to the developer to =
incorporate
characteristic expansions. In addition that serves so-called. =
Device-Vector.
At the same time it concerns simply a Pointer, that by the application =
as
desired initialisiert becomes and can be queried by other applications =
by
proclamation of an API-function. Why the Pointer is subsequently used, =
is
totally left to the developer himself, can have in the simplest case =
one
this Pointer shown on a memory area reserved in the application, =
exchanged
will can over that then data, can be defined just as well the =
Device-Vector
however also as a Pointer on a leap strip by functions. Also
hardware-drivers can set such a Device-Vector, can equip through it one =
for
example the driver with additional configuration possibilities.=20
The setting of the Device-Vectors in an application happens serve =
simply
through Initialisieren of some more globally variable, that among other
things to the version inspection. Is prevented in that inkompatible
structures are reported over the Device-vector. The care of the version
numbers attends naturally to the developer himself.=20
Individually it concerns following variable:=20
		U16 device_type U16 device_version void huge * device_vector
For the Initialisierung the device_type existed following convention:=20
	*	The MSB the variable is belaid with the characteristic
Autorenkennung. The Kennungen are forgiven on inquiry by Gunter Jost
(DK7WJ).=20
	*	The LSB can be occupied with an any number in order to mark
for example interfaces with different use purpose.=20
The Device-Vector with the function is queried device_vec (). One =
delivers
the desired to this function device_type as well as that device_version =
And
the number of the instance that is supposed to be found. There several
applications with same device_type In the Kernel registered be can, =
must one
in the doubt all instances abklappern if one wants to address a =
certain.
device_vec () Delivers either the Device-Vector or however ZERO if no =
with
the desired criteria found became. Examples two little to this:=20
		Initialisierung
		externally U16 device_type; externally U16 device_version;
externally void huge * device_vector;

		static byte data[100];

		device_type =3D 0xFF01; device_version =3D 0x0001; device_vector
=3D (void *)data;
		Would query
		U16 type =3D 0xFF01; U16 version =3D 0x0001; byte *dates;

		if (!(data =3D device_vec (type, version, 0))) {
		    printf (=E7=E7Kein Vektor gefunden.\n'');
		    exit(1);} else {
		    printf (=E7=E7Vektor gefunden.\n'');
		    ...
In the example becomes in the Initialisierung of the Device-Vektor with =
the
address of a memory area belaid. Another application can would query =
shown
question then like in that this memory area in the Kernel

Sending of data
For sending of data, several functions are available, that work either
streamorientiert or note however the Framegrenzen. The functions
l2_send_char (), l2_printf () and l2_puts () sending without notice of
Framegrenzen l2_send_f () and l2_send_frame () Deliver respectively a
complete Frame at the Kernel.=20
Basic must before editions on a connection first of all in the Kernel
storage allociert become, happens over the function to this l2_ialloc =
().
This is cannot become no pure formality, the storage under =
circumstances
allociert and should be grasped the application on that.=20
In streamorientierten editions, the Kernel tried become to send fullest
possible Frames, the data automatically =E7=E7gepackt'' and sent if a =
Frame is
filled up or however a certain time was made long no edition on the
connection. The Aussendung angebrochener Frames leaves itself with the
function l2_pack () Force. Note, that after one l2_pack () all possibly =
yet
allocierter storage released is and therefore in each case before the =
next
edition on l2_ialloc () Successes must. To this a simple example:=20
		struct qso qso; const byte *text=3D''Dies a Test\r' is';

		if (l2_ialloc(qso.handle, 256)) {
		    int i;
		    for (i =3D 0; i < 10; i + +)
		        l2_puts(qso.handle, text);} l2_pack(qso.handle);
The edition on the connection takes place through Frames by means of =
the PID
0XF0, it would be has then, one previously with l2_set_pid () Another =
value
adjusted. Middle in a connection, the PID is shifted should, before the =
next
Augabe l2_pack () Called become.=20
In frameorientierter edition, zun=E4chste must locally be produced a =
structure
by the type =C7=C7INFO'' or =C7=C7FRAME''. l2_send_frame () necessarily =
next to the
Pointer on the =E7=E7INFO''-Struktur yet the QSO-would act l2_send_f () =
Simply
the Frame that is described in the =E7=E7FRAME''-Struktur sends. To =
note is,
that in frameorientierter edition at least before Aussendung of the =
first
Frames l2_pack () called will must, moreover must before each edition =
on
l2_ialloc () With the exact Framel=E4nge (data contents) made become. =
Example
following in addition:=20
		INFORMATION information; struct qso qso; byte data[256];

		l2_pack(qso.handle); if (l2_ialloc(qso.handle, 256)) {
		    memcpy(info->text, dates, 256);
		    info->len =3D 256;
		    info->pid =3D 0xF0;
		    l2_send_frame(qso.handle, information);}

l2_send_f () Is actually only to the Aussendung of Frames thought =
become, is
sent become, that belong to no L2-connection, therefore as a =
=C7=C7UI''. The
=E7=E7find''-Befehl of the Infobox of a FlexNet-Digipeaters makes use =
of for
example this function. Preferably one becomes sending of UI-Frames =
however
l2_send_ui () Use, can at the same time Rufzeichen and Digipeaterpfad =
as
well as lived delivered become in the clear text. Because the =
proclamation
deviating of the other Frame-envoy functions is, also to this a little
example:=20

		byte data[256];

		l2_send_ui(=E7=E7dg2fef-10'', =E7=E7dk7wj-10 v db0zdf-12'', 0xF0,
256, dates);

To note is further that the Kernel never supposes in frameorientierten =
envoy
functions a certain PID as a basic outlook, like that for example by =
l2_puts
() The case is. The PID must be indicated basically in the =
=C7=C7FRAME''- or
=E7=E7INFO''-Struktur in each Frame. One with l2_set_pid () made =
attitude has no
effects on the functions l2_send_f () or l2_send_frame ().=20


The monitor functions
In all Terminalprogrammen is that monitors of the Frames transferred on =
the
canals usual, for this purpose makes available the API some interesting
option. Applications can request selektierte monitor data in the Kernel
already after certain criteria, suited prepares around it to indicate =
or to
utilize otherwise, for example for Broadcast-reception or to the =
realization
of spy functions. Restricting must be noted that only respectively an
application can belay the monitor function, if therefore already for =
example
by a background program the monitor was requested, can received one
Terminalapplikation no more data running in the foreground. This =
restriction
is not for the business under M-DOS especially troublesome because of =
the
missing Multitaskingf=E4higkeit, attains however additional meaning if
PC/FlexNet is inserted together with Windows. Here applications, that =
run in
different DOS-boxes, a joint FlexNet-Kernel divide themselves. If now
already an application belays the monitor canal of the Kernels, no =
further
application data can receive. This can lead for example in the parallel
business of a BayCom-Mailbox and a Terminalprogramms or of several
BayCom-Mailboxen to unexpected effects.=20
The API places the functions for the use of the monitor l2_set_monitor =
(),
l2_clr_monitor (), l2_chk_monitor (), l2_get_monitor () and =
l2_ack_monitor
() To the decree. With l2_set_monitor () The monitor is requested, must =
be
delivered when parameter here a Pointer on an initialisierte structure =
by
the type =C7=C7TRACE''. In this structure is announced to the Kernel =
how the
monitor data vorselektiert should become. l2_set_monitor () Delivers =
either
=C7=C7TRUE'' if the request geklappt has, or however =C7=C7FALSE is =
not'', if out of
any which reasons that monitors possible. The case can be this, =
requested
has if already another application the monitor, but also because of =
storage
scarcity in the Kernel. The application should be grasped in one such =
case.=20
The picking up of the monitor data happens with the function =
l2_get_monitor
(). It delivers either a Pointer on a =E7=E7FRAME''-Struktur or ZERO if =
no
monitor data stand. Before the picking up of the next Frames, the last =
must
with l2_ack_monitor () Confirmed become, becomes therewith also the =
Pointer
on the Frame delivered finally invalid. All data as far as they are yet
required, must have become until there into a characteristic storage =
block
umkopiert. The monitor data will not make available unlimited =
gepuffert, the
Kernel for that only a limited quantity of storage. This is exhausted
because the processing of the data lasts to long, the monitor process =
is
interrupted, must the resource then again with l2_set_monitor () =
Requested
become. This in the monitor of an Ethernet-segment very often the case =
can
be. With l2_chk_monitor () Can be queried whether the monitor resource =
is
yet active, the function delivers =C7=C7TRUE'' or =C7=C7FALSE''.=20
For disengaging the monitor function, a proclamation of the function
suffices l2_clr_monitor (). The monitor resource is released then and =
is
available other applications. Also for$use of the monitor functions =
here a
short example:=20
		TRACE trace;

		trace. ch_mask =3D 0b101;           /* only canal 0 and 2
monitors */ trace. typfilter =3D TRACETYP_DIAG; /* QSO-would act and =
TX-Delay
indicate */ trace. trxfilter =3D 3;             /* RX and TX monitors =
*/
trace.call[0] =3D 0;               /* all Rufzeichen indicate */

		if (l2_set_monitor(&trace) {
		    while (l2_chk_monitor()) {
		        const FRAME *frame =3D l2_get_monitor();
		        if (frame) {
		            display (frame);
		            l2_ack_monitor();
		        }
		    }}


Auxiliary and special functions
The API makes available in addition the basis functions to the data =
exchange
another row further proclamations to, that can be for special uses of
interest. These functions are shortly supposed to be addressed in the
following without getting into to be sure deeper into the matter. In =
most
felling, the developer knows anyway even best why a function can be =
needed.=20
U16 l2_unack(u16 acts) The amount of the yet unconfirmed Frames in the
Sendebuffer of a connection redelivers. It can be inserted for
Terminalanwendungen, or however to the Flowcontrol.=20
U16 l2_rx_cnt(u16 acts) The amount of the Frames in the reception
maintenance man snake of a connection reports.=20
U16 l2_i_len(u16 acts) The length of the next Infoframes in the
Empfangsqueue of a connection delivers.=20
U16 l2_maxframe(u16 acts) The size of the current Windows reports for
unconfirmed Frames. This Window is adjusted by the Kernel dynamically =
after
connection condition and can be influenced not by the application. The
queried function serves therefore solely informative purposes.=20
U16 l2_tries(u16 acts) Delivers the current Retry-meter of a =
connection.
Also this function has only informative character.=20
l2_reset_tries(u16 acts) Sets the Retry-meter of a connection back on =
0.=20
l2_init_poll(u16 acts) pollt a connection=20
l2_start_qso(u16 acts) Starts a trunking scheme. This function is not
especially useful, offers to release however the possibility one =
left-on a
connection to Reset.=20
U16 l2_frack(u16 acts) Issues the value of the FrAck-Timers.=20
U16 l2_idletime(u16 acts) The time, that passed since the last data =
exchange
on the connection, reports.=20
l2_clr_i(u16 acts) Deletes all data that are located in the =
Empfangspuffer
of a connection.=20
build_frame (FRAME *f, byte *source, byte *dest) A FRAME-structure with
quell- and Zielrufzeichen fills.=20
U16 l2_get_qnum(FRAME *f) the connection table after a connection with =
the
Rufzeichenfeld, that searches in F The corresponding QSO is and =
delivers
contain would act-, or however 0 if no connection was found.=20
U16 get_tic (void) Timertics in the 100ms-Raster delivers.=20
void appl_watchdog(u16 time) Triggert a Watchdog for the application. =
time
The time will determine in minutes since the last proclamation of the
function until the computer rebootet becomes. On this type on simple =
manner,
a festival cliff of the total computer can be prevented, must called =
the
function in addition solely in the head bow periodical werden. The =
Watchdog
must, started once, unconditionally disengaged become before the =
leaving of
the application, this happens through following proclamation:
appl_watchdog(0).=20
Further functions exist is possible, over the accesses on information =
of the
canal drivers and serve that to the configuration of the canals.=20
byte ch_active (byte canal) =C7=C7TRUE reports'' or =C7=C7FALSE'', =
depending whether
the canal is active, send and receive can i.e. Frames or not.=20
byte set_chmode (byte canal, U16 fashion, U16 baud) Serves to the
configuration of the canal. With this function, the baud advice and the
canal option are selected, for example Duplex, DAMA-mast etc. baud =
becomes
as Baud ratio / 100 Deliver.=20
set_txdelay (byte canal, byte txd) The TX-Delay sets on a canal. txd
Skaliert in steps of 10ms is.=20
calibrate (byte canal, byte minute) turns a canal for minutes Minutes =
in the
Calibrate-fashions. The Calibrate can through proclamation of the =
function
with minutes =3D 0 disengaged become.=20
U16 get_chbaud (byte canal) Reports the current baud advice of a =
kanals.=20
U16 get_chmode (byte canal) Delivers the canal mode.=20
U16 get_txdelay (byte canal) The parametrierte TX-Delay zur=FCck. =
gives.=20
const byte *get_ident(byte canal) Delivers a pointer on the =
Ident-String of
the canal driver.=20
const L1_STATISTICS *get_stat(byte canal, byte del) Delivers a pointer =
on
the statistics data of the corresponding canal. Herein the paying on =
account
of the sent and received Frames are stored, are noted just as appeared
mistakes.=20

TSR-programs - Multitasking under M-DOS
TSRs can be realized with PC/FlexNet especially easily and elegantly =
without
having to fight at the same time with Reentranzproblemen. Even accesses =
on
the Filesystem are out of the background program unrestricted possible.
Actually one can the fact that the program should become a TSR, with =
which
development unnoticed leave almost totally.=20
Basically all programs can be divided into the parts Initialisierung , =
head
bow and Terminierung . In order to be able to codify a program as a
FlexNet-TSR, must these components to the three functions init_flextsr =
(),
poll_flextsr () and exit_flextsr () Processed become. poll_flextsr ()
Becomes ca. all 55ms after the Initialisierung by the Kernel called, =
needs
to attend naturally only if the last proclamation of the TSR-head bow =
became
until abgearbeitet already there, to Reentranz one therefore not.=20
Naturally one must himself klarmachen that the head bow should suffice
certain requests. The TSR-draft permits no preemptives Multitasking =
between
the single TSRs and just running foreground applications so that one =
should
respect on that to go around kooperativ with the resource =
=E7=E7Rechenzeit''.
That is however quite not so simple. One wants to realize for example
maintenance man bow, one must write quite costly State-Machines in =
part,
around which head bow leave and in the next =E7=E7Poll'' at the same =
place
forsetzen to k=F6nnnen. Also that stuck, is, that is available in the =
head
bow, with about 3KB quite tight so that one should stuck design =
normally no
voluminous variable on that. One must a further restriction in that for
malloc () Take memory area standing to the decree in purchase. TSRs =
cannot
make use of the normal DOS-storage administration, one can show solely =
in
the Initialisierung a certain area as a Heap, out of which then dynamic
storage allociert can become, to them. This Heap cannot be enlarged =
also to
the running time of the TSRs.=20
One gets many of these problems through it into the handle that one =
shifts
stuck in the entrance into the TSR-head bow first of all on a
characteristic, local, be then almost as desired large can that. =
Further one
can elegantly solve the leaving of the head bow with a little trick. =
The
following little example was inserted for example in the Portierung of =
the
Ping-Pong Convers. It makes available two functions set_tsr_stack () =
and
schedule (). With the first, a more local leaves stuck arrange itself =
with
maximally 64KB size, the second provides the getting out out of the =
head bow
whereby the reentry point is noticed and becomes direct after the next
Interrupt-Poll at the corresponding place of the head bow fortgefahren. =
On
this type, =E7=E7Endlos can be programmed-'' and maintenance man bow =
within the
Interruptroutine, without that the other applications ungeb=FCrhlich =
long must
wait. Further the TSR can aimed last at certain places, for example =
after
hard disks accesses leave become, that as a rule yes some =
Millisekunden.=20
		schedule. C
		/* * Schedule leaves the TSR and delivers computation time
at the Flex-Kernel *.  Therewith endless bow and Busy-Waits can be =
realized.
* *       DONT CHANGE ANYTHING BELOW THIS LINE UNLESS YOU KNOW!  */

		#include <dos.h> #include <alloc.h> #include "schedule.h"

		U16 __tsr_running;

		/* semaphore */ static volatile byte sleeping;

		static volatile U16 sss, ssp, sbp, sds; static volatile U16
xss, xsp, xbp, xds;

		/* more locally stuck */

		byte *__tsr_stack; byte *__tsr_stackptr;
		int set_tsr_stack(u16 size) {

		if ((__tsr_stack =3D calloc (1, size))! =3D 0) {
		    __tsr_stackptr =3D __tsr_stack + size;
		    return 1;} return 0;}

		void poll_flextsr (void) { _SOWED =3D _DI =3D 0; sss =3D _SS; ssp
=3D _SP; sbp =3D _BP; sds =3D _DS;

		if (sleeping) {

		    sleeping --
		    _SS =3D xss;
		    _SP =3D xsp;
		    _BP =3D xbp;
		    _DS =3D xds;
		    return;}

		_SS =3D FP_SEG(__tsr_stackptr); _SP =3D FP_OFF(__tsr_stackptr);
tsr_main();

		_SS =3D sss; _SP =3D ssp; _BP =3D sbp; _DS =3D sds;}

		void schedule (void) {

		_SOWED =3D _DI =3D 0; xss =3D _SS; xsp =3D _SP; xbp =3D _BP; xds =3D
_DS;

		sleeping + +;

		_SS =3D sss; _SP =3D ssp; _BP =3D sbp; _DS =3D sds; return;}

Anzumerken is yet, that set_tsr_stack () only in init_flextsr () called =
will
may, and also first after there with set_tsr_heap () a memory area for
malloc()/free () Arranged became. That here abgedruckte schedule. C =
Makros,
that are defined in of header file belonging to the Borland-C compiler,
uses. Also the Pseudovariablen for the access on the processor indeces =
(_SS,
_SP Etc.) Such Makros are.

End
Also if in the near future details will change at the Implementierung =
of the
API, in the syntax of the function proclamations no more revolutionary
change is to be expected. That means that in spite of further =
development by
Kernel and API the characteristic sources must not be changed or =
probably
only insignificantly. As a rule the Upgraden on a new version of the =
API
with renewed left of the Objektmodule leaves itself and perform =
Libraries.
It therefrom is to be gone out, that, although the adaptation of the =
total
package up M-Windows Is forthcoming, also this document few at its
Aktualit=E4t lose becomes. Also if I on all details I - that would not =
have
the frame of this contribution probably completely burst - hope was =
able to
go in yet to have given an insight into the variety of the =
possibilities to
the interested and also that the shown examples are helpful at least in =
the
beginning phase of a project.=20
************************************************************************=
****
**

> -----Original Message-----
> From:	Mike Miller [SMTP:[email protected]]
> Sent:	Thursday, October 02, 2003 12:24 PM
> To:	[email protected]
> Subject:	[FlexNet] English Documentation
>=20
> I have been trying to use Flex32 and Paxon and one of the=20
> problems is the lack of english documentation. It sure would be=20
> nice if some kind soul would translate the docs.
>=20
> I e-mailed Ken Williams GW3TMH, author of HamServ about the=20
> possibility of using his software with Flex32 and he said he'd=20
> love to have it work with Flex32 but is stuck because of the=20
> lack of english documentation.
>=20
> I'm sure the same thing applies to other applications.
> _______________________________________________
> FlexNet mailing list
> [email protected]
> http://mailman.qth.net/mailman/listinfo/flexnet