Amiga® RKM Libraries: A Linker Libraries
This section describes the amiga.lib and debug.lib libraries. Unlike the
libraries described in the other chapters of the manual, these are not
shared run-time libraries. Code from the linker libraries is inserted by
the linker into your final program. Only the functions you use are pulled
into your code. These libraries are typically supplied by your language
or compiler vendor.
Amiga.lib Debug.lib
A Appendix A: Linker Libraries / Amiga.lib
This is the main Amiga scanned linker library, linked with most programs
for the Amiga. The major components of amiga.lib are:
* stubs Functions for each Amiga ROM routine that copy
arguments from the stack to the CPU registers --
thereby enabling stack-based C compilers to call
register-based Amiga ROM routines.
* offsets The negative offset from the library base for each
Amiga function. These are called Library Vector
Offsets (_LVO).
* Exec C functions which simplify many Exec procedures such
as the creation and deletion of tasks, ports, and I/O
request structures.
* clib C support functions including pseudo-random number
generation and a limited set of file and stdio
functions designed to work directly with AmigaDOS file
handles.
* Math C functions which provide some basic conversions to
and from Fast Floating Point (FFP) format numbers.
* Graphics C support functions to add and remove tasks from the
vertical-blanking interval interrupt server chain.
* ARexx C support functions for ARexx variable handling and
message checking.
NOTE:
-----
The Timer, Commodities, and Intuition support functions listed below
are valid only for use with Release 2.04 (V37) or a later version of
the system software.
* Timer C support functions to do common timer device
operations.
* Commodities C functions which support the Commodities system.
Included are functions to deal with ToolTypes, and to
create various Commodities objects.
* Intuition Functions which provide support for Intuition's hook
and Boopsi sub-systems.
Most applications link with and use at least one function in amiga.lib.
The functions available are as follows.
Exec Support Math Arexx Commodities
Clib Graphics Timer Intuition
A / Amiga.lib / Exec Support
BeginIO()
This function takes an IORequest and passes it directly to the
BEGINIO vector of the proper device. This works exactly like
SendIO(), but does not clear the io_Flags field first. This function
does not wait for the I/O to complete.
CreateExtIO() and DeleteExtIO()
CreateExtIO() allocates memory for and initializes a new I/O request
block of a program-specified number of bytes. The number of bytes
must be the size of a legal IORequest (or extended request) or very
nasty things will happen. DeleteExtIO() frees up an I/O request as
allocated by CreateExtIO(). The mn_Length field determines how much
memory to deallocate.
CreatePort() and DeletePort()
CreatePort() allocates and initializes a new message port. The
message list of the new port will be prepared for use via NewList().
The port will be set to signal your task when a message arrives
(PA_SIGNAL). DeletePort() deletes the port created by CreatePort().
All messages that may have been attached to that port must already
have been replied to.
CreateStdIO() and DeleteStdIO()
CreateStdIO() allocates memory for and initializes a new IOStdReq
structure. DeleteStdIO() frees up an IOStdReq allocated by
CreateStdIO().
CreateTask() and DeleteTask()
These functions simplify creation and deletion of subtasks by
dynamically allocating and initializing the required structures and
stack space. They also add the task to Exec's task list with the
given name and priority. A tc_MemEntry list is provided so that all
stack and structure memory allocated by CreateTask() is automatically
deallocated when the task is removed. Before deleting a task with
DeleteTask(), you must first make sure that the task is not currently
executing any system code which might try to signal the task after it
is gone.
NewList()
Prepares a List structure for use; the list will be empty and ready
to use.
A / Amiga.lib / Clib
FastRand()
Generates a pseudo-random number. The seed value is taken from
stack, shifted left one position, exclusive-or'ed with hex value
$1D872B41 and returned.
RangeRand()
RangeRand() accepts a value from 1 to 65535, and returns a value
within that range (a 16-bit integer). Note that this function is
implemented in C.
fclose()
Closes a file.
fgetc()
Gets a character from a file.
fprintf()
Prints a formatted output line to a file.
fputc()
Puts character to file.
fputs()
Writes a string to file.
getchar()
Gets a character from stdin.
printf()
Puts format data to stdout.
putchar()
Puts character to stdout.
puts()
Puts a string to stdout, followed by newline.
sprintf()
Formats data into a string (see Exec RawDoFmt() ).
A / Amiga.lib / Math
afp()
Converts ASCII string variable into fast floating-point.
arnd()
ASCII round-off of the provided floating-point string."
dbf()
Accepts a dual-binary format floating-point number and converts it to
FFP format.
fpa()
Accepts an FFP number and the address of the ASCII string where its
converted output is to be stored. The number is converted to a NULL
terminated ASCII string and stored at the address provided.
Additionally, the base ten (10) exponent in binary form is returned.
A / Amiga.lib / Graphics
AddTOF() and RemTOF()
AddTOF() adds a task to the vertical-blanking interval interrupt
server chain. This frees C programmers from the burden of having to
write an assembly language routine to perform this function. The task
can be removed with RemTOF().
A / Amiga.lib / ARexx
GetRexxVar() and SetRexxVar()
GetRexxVar() attempts to extract the value of a variable from a
running ARexx script/program. SetRexxVar() will attempt to set the
value of a particular variable in a running ARexx script.
CheckRexxMsg()
This function checks to make sure that a RexxMsg is from ARexx
directly. Messages used by the Rexx Variable Interface (RVI) routines
are required to be directly from ARexx.
A / Amiga.lib / Timer
TimeDelay()
This function waits for a specified period of time before returning
to the the caller.
A / Amiga.lib / Commodities
ArgArrayInit() and ArgArrayDone()
ArgArrayInit() returns an array of strings suitable for sending to
icon.library/FindToolType(). This array will be the ToolTypes array
of the program's icon, if it was started from Workbench. It will just
be 'argv' if the program was started from a shell. ArgArrayDone()
frees memory and does cleanup required after a call to ArgArrayInit().
ArgInt() and ArgString()
These functions look for a particular entry in a ToolType array
returned by ArgArrayInit() and return the integer (ArgInt()) or
string (ArgString()) associated with that entry. A default value can
be passed to each function which will be returned in the event that
the requested entry could not be found in the ToolType array.
CxCustom()
This function creates a custom commodity object. The action of this
object on receiving a commodity message is to call a function of the
application programmer's choice.
CxDebug()
This function creates a Commodities debug object. The action of this
object on receiving a Commodities message is to print out information
about the message through the serial port (using the
debug.lib/KprintF() routine). A specified 'id' will also be displayed.
CxFilter()
Creates a Commodities input event filter object that matches a
description string. The description string is in the same format as
strings expected by commodities.library/SetFilter(). If the
description string is NULL, the filter will not match any messages.
CxSender()
This function creates a Commodities sender object. The action of this
object on receiving a Commodities message is to copy the Commodities
message into a standard Exec Message, to put a supplied id in the
message as well, and to send the message off to the message port.
CxSignal()
This function creates a Commodities signal object. The action of this
object on receiving a Commodities message is to send a signal to a
task. The caller is responsible for allocating the signal and
determining the proper task ID.
CxTranslate()
This function creates a Commodities translator object. The action of
this object on receiving a Commodities message is to replace that
message in the commodities network with a chain of Commodities input
messages.
HotKey()
This function creates a triad of commodity objects to accomplish a
high-level function.
The three objects are a filter, which is created to match by
CxFilter(), a sender created by CxSender(), and a translator which is
created by CxTranslate(), so that it swallows any commodity input
event messages that are passed down by the filter.
This is the simple way to get a message sent to your program when the
user performs a particular input action.
InvertString()
This function returns a linked list of input events which would
translate into the string using the supplied keymap (or the system
default keymap if the supplied keymap is NULL).
This chain should eventually be freed using FreeIEvents().
FreeIEvents()
This function frees a linked list of input events as obtained from
InvertString().
A / Amiga.lib / Intuition
CallHook() and CallHookA()
These functions invoke hooks. CallHook() expects a parameter packet
("message") on the stack, while CallHookA() takes a pointer to the
message.
DoMethod() and DoMethodA()
Boopsi support functions that ask a specified Boopsi object to
perform a specific message. The message is passed in the function
call for DoMethodA() and on the stack for DoMethod(). The message is
invoked on the object's true class.
DoSuperMethod() and DoSuperMethodA()
Boopsi support functions that ask a Boopsi object to perform a
supplied message as if it was an instance of its superclass. The
message is passed in the function call for DoSuperMethodA() and on
the stack for DoSuperMethod().
CoerceMethod() and CoerceMethodA()
Boopsi support functions that ask a Boopsi object to perform a
supplied message as if it was an instance of some other class. The
message is passed in the function call for CoerceMethodA() and on the
stack for CoerceMethod.
SetSuperAttrs()
Boopsi support function which invokes the OM_SET method on the
superclass of the supplied class for the supplied object. Allows the
ops_AttrList to be supplied on the stack (i.e. in a varargs way).
A Appendix A: Linker Libraries / Debug.lib
This link library contains standard I/O (stdio) style functions for
communicating with a serial terminal connected to the Amiga via its
built-in serial port. Typically this terminal will be a 9600-baud, 8
data-bits, one stop-bit connection to an external terminal or an Amiga
running a terminal package. The debug.lib functions allow you to output
messages and prompt for input (even from within low level task or
interrupt code) without disturbing the Amiga's display and or current
state (other than the serial hardware itself).
No matter how badly the system may have crashed, these functions can
usually get a message out. A similar debugging library (currently called
ddebug.lib) is available for sending debugging output to the parallel
port. This is useful for debugging serial applications. Ddebug.lib is not
documented here. It contains functions similar to debug.lib but with
names starting with `D' instead of `K'.
Debug.lib is a link library that provides useful diagnostic functions that
are handy for developing code. It includes the following functions:
KCmpStr()
Compare two null-terminated strings.
KGetChar()
Get a character from the console.
KGetNum()
Get a number from the console.
KMayGetChar()
Return a character if present, but don't wait.
KPrintF()
Print formatted data to the console.
KPutChar()
Put a character to the console.
KPutStr()
Put a string to the console.
Please refer to the Amiga ROM Kernel Reference Manual: Includes and
Autodocs for a detailed description of the functions.
Converted on 22 Apr 2000 with RexxDoesAmigaGuide2HTML 2.1 by Michael Ranner.