TABLE OF CONTENTS amiga.lib/AddTOF amiga.lib/afp amiga.lib/ArgArrayDone amiga.lib/ArgArrayInit amiga.lib/ArgInt amiga.lib/ArgString amiga.lib/arnd amiga.lib/BeginIO amiga.lib/CallHook amiga.lib/CallHookA amiga.lib/CheckRexxMsg amiga.lib/CoerceMethod amiga.lib/CoerceMethodA amiga.lib/CreateExtIO amiga.lib/CreatePort amiga.lib/CreateStdIO amiga.lib/CreateTask amiga.lib/CxCustom amiga.lib/CxDebug amiga.lib/CxFilter amiga.lib/CxSender amiga.lib/CxSignal amiga.lib/CxTranslate amiga.lib/dbf amiga.lib/DeleteExtIO amiga.lib/DeletePort amiga.lib/DeleteStdIO amiga.lib/DeleteTask amiga.lib/DoMethod amiga.lib/DoMethodA amiga.lib/DoSuperMethod amiga.lib/DoSuperMethodA amiga.lib/FastRand amiga.lib/fpa amiga.lib/FreeIEvents amiga.lib/GetRexxVar amiga.lib/HookEntry amiga.lib/HotKey amiga.lib/InvertString amiga.lib/NewList amiga.lib/printf amiga.lib/RangeRand amiga.lib/RemTOF amiga.lib/SetRexxVar amiga.lib/SetSuperAttrs amiga.lib/sprintf amiga.lib/stdio amiga.lib/TimeDelay amiga.lib/AddTOF amiga.lib/AddTOF NAME AddTOF - add a task to the VBlank interrupt server chain. SYNOPSIS AddTOF(i,p,a); VOID AddTOF(struct Isrvstr *, APTR, APTR); FUNCTION Adds a task to the vertical-blanking interval interrupt server chain. This prevents C programmers from needing to write an assembly language stub to do this function. INPUTS i - pointer to an initialized Isrvstr structure p - pointer to the C-code routine that this server is to call each time TOF happens a - pointer to the first longword in an array of longwords that is to be used as the arguments passed to your routine pointed to by p. SEE ALSO RemTOF(), <graphics/graphint.h> amiga.lib/afp amiga.lib/afp NAME afp - Convert ASCII string variable into fast floating point SYNOPSIS ffp_value = afp(string); FUNCTION Accepts the address of the ASCII string in C format that is converted into an FFP floating point number. The string is expected in this Format: {S}{digits}{'.'}{digits}{'E'}{S}{digits} <*******MANTISSA*******><***EXPONENT***> Syntax rules: Both signs are optional and are '+' or '-'. The mantissa must be present. The exponent need not be present. The mantissa may lead with a decimal point. The mantissa need not have a decimal point. Examples: All of these values represent the number fourty-two. 42 .042e3 42. +.042e+03 +42. 0.000042e6 0000042.00 420000e-4 420000.00e-0004 Floating point range: Fast floating point supports the value zero and non-zero values within the following bounds - 18 20 9.22337177 x 10 > +number > 5.42101070 x 10 18 -20 -9.22337177 x 10 > -number > -2.71050535 x 10 Precision: This conversion results in a 24 bit precision with guaranteed error less than or equal to one-half least significant bit. INPUTS string - Pointer to the ASCII string to be converted. OUTPUTS string - points to the character which terminated the scan equ - fast floating point equivalent amiga.lib/ArgArrayDone amiga.lib/ArgArrayDone NAME ArgArrayDone -- release the memory allocated by a previous call to ArgArrayInit(). (V36) SYNOPSIS ArgArrayDone(); VOID ArgArrayDone(VOID); FUNCTION This function frees memory and does cleanup required after a call to ArgArrayInit(). Don't call this until you are done using the ToolTypes argument strings. SEE ALSO ArgArrayInit() amiga.lib/ArgArrayInit amiga.lib/ArgArrayInit NAME ArgArrayInit -- allocate and initialize a tooltype array. (V36) SYNOPSIS ttypes = ArgArrayInit(argc,argv); UBYTE **ArgArrayInit(LONG,UBYTE **); FUNCTION This function returns a null-terminated 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. Pass ArgArrayInit() your startup arguments received by main(). ArgArrayInit() requires that icon.library be open (even if the caller was started from a shell, so that the function FindToolType() can be used) and may call GetDiskObject(), so clean up is necessary when the strings are no longer needed. The function ArgArrayDone() does just that. INPUTS argc - the number of arguments in argv, 0 when started from Workbench argv - an array of pointers to the program's arguments, or the Workbench startup message when started from WB. RESULTS ttypes - the initialized argument array or NULL if it could not be allocated EXAMPLE Use of these routines facilitates the use of ToolTypes or command- line arguments to control end-user parameters in Commodities applications. For example, a filter used to trap a keystroke for popping up a window might be created by something like this: char *ttypes = ArgArrayInit(argc, argv); CxObj *filter = UserFilter(ttypes, "POPWINDOW", "alt f1"); ... with ... CxObj *UserFilter(char **tt, char *action_name, char *default_descr) { char *desc; desc = FindToolType(tt,action_name); return(CxFilter((ULONG)(desc? desc: default_descr))); } In this way the user can assign "alt f2" to the action by entering a tooltype in the program's icon of the form: POPWINDOW=alt f2 or by starting the program from the CLI like so: myprogram "POPWINDOW=alt f2" NOTE Your program must open icon.library and set up IconBase before calling this routine. In addition IconBase must remain valid until after ArgArrayDone() has been called! SEE ALSO ArgArrayDone(), ArgString(), ArgInt(), icon.library/FindToolType() amiga.lib/ArgInt amiga.lib/ArgInt NAME ArgInt -- return an integer value from a ToolTypes array. (V36) SYNOPSIS value = ArgInt(tt,entry,defaultval) LONG ArgInt(UBYTE **,STRPTR,LONG); FUNCTION This function looks in the ToolTypes array 'tt' returned by ArgArrayInit() for 'entry' and returns the value associated with it. 'tt' is in standard ToolTypes format such as: ENTRY=Value The Value string is passed to atoi() and the result is returned by this function. If 'entry' is not found, the integer 'defaultval' is returned. INPUTS tt - a ToolTypes array as returned by ArgArrayInit() entry - the entry in the ToolTypes array to search for defaultval - the value to return in case 'entry' is not found within the ToolTypes array RESULTS value - the value associated with 'entry', or defaultval if 'entry' is not in the ToolTypes array NOTES This function requires that dos.library V36 or higher be opened. SEE ALSO ArgArrayInit() amiga.lib/ArgString amiga.lib/ArgString NAME ArgString -- return a string pointer from a ToolTypes array. (V36) SYNOPSIS string = ArgString(tt,entry,defaultstring) STRPTR ArgString(UBYTE **,STRPTR,STRPTR); FUNCTION This function looks in the ToolTypes array 'tt' returned by ArgArrayInit() for 'entry' and returns the value associated with it. 'tt' is in standard ToolTypes format such as: ENTRY=Value This function returns a pointer to the Value string. If 'entry' is not found, 'defaultstring' is returned. INPUTS tt - a ToolTypes array as returned by ArgArrayInit() entry - the entry in the ToolTypes array to search for defaultstring - the value to return in case 'entry' is not found within the ToolTypes array RESULTS value - the value associated with 'entry', or defaultstring if 'entry' is not in the ToolTypes array SEE ALSO ArgArrayInit() amiga.lib/arnd amiga.lib/arnd NAME arnd - ASCII round of the provided floating point string SYNOPSIS arnd(place, exp, &string[0]); FUNCTION Accepts an ASCII string representing an FFP floating point number, the binary representation of the exponent of said floating point number and the number of places to round to. A rounding process is initiated, either to the left or right of the decimal place and the result placed back at the input address defined by &string[0]. INPUTS place - integer representing number of decimal places to round to exp - integer representing exponent value of the ASCII string &string[0] - address where rounded ASCII string is to be placed (16 bytes) RESULT &string[0] - rounded ASCII string BUGS None amiga.lib/BeginIO amiga.lib/BeginIO NAME BeginIO -- initiate asynchronous device I/O SYNOPSIS BeginIO(ioReq) VOID BeginIO(struct IORequest *); FUNCTION This function takes an IORequest, and passes it directly to the "BeginIO" vector of the proper device. This is equivalent to SendIO(), except that io_Flags is not cleared. A good understanding of Exec device I/O is required to properly use this function. This function does not wait for the I/O to complete. INPUTS ioReq - an initialized and opened IORequest structure with the io_Flags field set to a reasonable value (set to 0 if you do not require io_Flags). SEE ALSO exec.library/DoIO(), exec.library/SendIO(), exec.library/WaitIO() amiga.lib/CallHook amiga.lib/CallHook NAME CallHook -- Invoke a hook given a message on the stack. (V36) SYNOPSIS result = CallHook( hookPtr, obj, ... ) ULONG CallHook( struct Hook *, Object *, ... ); FUNCTION Like CallHookA(), CallHook() invoke a hook on the supplied hook-specific data (an "object") and a parameter packet ("message"). However, CallHook() allows you to build the message on your stack. INPUTS hookPtr - A system-standard hook obj - hook-specific data object ... - The hook-specific message you wish to send. The hook is expecting a pointer to the message, so a pointer into your stack will be sent. RESULT result - a hook-specific result. NOTES While this function requires V36 or higher intuition.library, it first appeared in V37 amiga.lib. EXAMPLE If your hook's message was struct myMessage { ULONG mm_FirstGuy; ULONG mm_SecondGuy; ULONG mm_ThirdGuy; }; You could write: result = CallHook( hook, obj, firstguy, secondguy, thirdguy ); as a shorthand for: struct myMessage msg; msg.mm_FirstGuy = firstguy; msg.mm_SecondGuy = secondguy; msg.mm_ThirdGuy = thirdguy; result = CallHookA( hook, obj, &msg ); SEE ALSO CallHookA(), utility.library/CallHookPkt(), <utility/hooks.h> amiga.lib/CallHookA amiga.lib/CallHookA NAME CallHookA -- Invoke a hook given a pointer to a message. (V36) SYNOPSIS result = CallHookA( hookPtr, obj, message ) ULONG CallHook( struct Hook *, Object *, APTR ); FUNCTION Invoke a hook on the supplied hook-specific data (an "object") and a parameter packet ("message"). This function is equivalent to utility.library/CallHookPkt(). INPUTS hookPtr - A system-standard hook obj - hook-specific data object message - The hook-specific message you wish to send RESULT result - a hook-specific result. NOTES While this function requires V36 or higher intuition.library, it first appeared in V37 amiga.lib. SEE ALSO CallHook(), utility.library/CallHookPkt(), <utility/hooks.h> amiga.lib/CheckRexxMsg amiga.lib/CheckRexxMsg NAME CheckRexxMsg - Check if a RexxMsg is from ARexx SYNOPSIS result = CheckRexxMsg(message) D0 A0 BOOL CheckRexxMsg(struct RexxMsg *); FUNCTION This function checks to make sure that the message is from ARexx directly. It is required when using the Rexx Variable Interface routines (RVI) that the message be from ARexx. While this function is new in the V37 amiga.lib, it is safe to call it in all versions of the operating system. It is also PURE code, thus usable in resident/pure executables. NOTE This is a stub in amiga.lib. It is only available via amiga.lib. The stub has two labels. One, _CheckRexxMsg, takes the arguments from the stack. The other, CheckRexxMsg, takes the arguments in registers. EXAMPLE if (CheckRexxMsg(rxmsg)) { /* Message is one from ARexx */ } INPUTS message A pointer to the RexxMsg in question RESULTS result A boolean - TRUE if message is from ARexx. SEE ALSO GetRexxVar(), SetRexxVar() amiga.lib/CoerceMethod amiga.lib/CoerceMethod NAME CoerceMethod -- Perform method on coerced object. (V36) SYNOPSIS result = CoerceMethod( cl, obj, MethodID, ... ) ULONG CoerceMethod( struct IClass *, Object *, ULONG, ... ); FUNCTION Boopsi support function that invokes the supplied message on the specified object, as though it were the specified class. Equivalent to CoerceMethodA(), but allows you to build the message on the stack. INPUTS cl - pointer to boopsi class to receive the message obj - pointer to boopsi object ... - method-specific message built on the stack RESULT result - class and message-specific result. NOTES While this function requires V36 or higher intuition.library, it first appeared in V37 amiga.lib. SEE ALSO CoerceMethodA(), DoMethodA(), DoSuperMethodA(), <intuition/classusr.h> ROM Kernel Manual boopsi section amiga.lib/CoerceMethodA amiga.lib/CoerceMethodA NAME CoerceMethodA -- Perform method on coerced object. (V36) SYNOPSIS result = CoerceMethodA( cl, obj, msg ) ULONG CoerceMethodA( struct IClass *, Object *, Msg * ); FUNCTION Boopsi support function that invokes the supplied message on the specified object, as though it were the specified class. INPUTS cl - pointer to boopsi class to receive the message obj - pointer to boopsi object msg - pointer to method-specific message to send RESULT result - class and message-specific result. NOTES While this function requires V36 or higher intuition.library, it first appeared in V37 amiga.lib. Some early example code may refer to this function as CM(). SEE ALSO CoerceMethod(), DoMethodA(), DoSuperMethodA(), <intuition/classusr.h> ROM Kernel Manual boopsi section amiga.lib/CreateExtIO amiga.lib/CreateExtIO NAME CreateExtIO -- create an IORequest structure SYNOPSIS ioReq = CreateExtIO(port,ioSize); struct IORequest *CreateExtIO(struct MsgPort *, ULONG); FUNCTION Allocates memory for and initializes a new IO request block of a user-specified number of bytes. The number of bytes MUST be the size of a legal IORequest (or extended IORequest) or very nasty things will happen. INPUTS port - an already initialized message port to be used for this IO request's reply port. If this is NULL this function fails. ioSize - the size of the IO request to be created. RESULT ioReq - a new IO Request block, or NULL if there was not enough memory EXAMPLE if (ioReq = CreateExtIO(CreatePort(NULL,0),sizeof(struct IOExtTD))) SEE ALSO DeleteExtIO(), CreatePort(), exec.library/CreateMsgPort() amiga.lib/CreatePort amiga.lib/CreatePort NAME CreatePort - Allocate and initialize a new message port SYNOPSIS port = CreatePort(name,pri) struct MsgPort *CreatePort(STRPTR,LONG); FUNCTION Allocates and initializes a new message port. The message list of the new port will be prepared for use (via NewList). A signal bit will be allocated, and the port will be set to signal your task when a message arrives (PA_SIGNAL). You *must* use DeletePort() to delete ports created with CreatePort()! INPUTS name - public name of the port, or NULL if the port is not named. The name string is not copied. Most ports do not need names, see notes below on this. pri - Priority used for insertion into the public port list, normally 0. RESULT port - a new MsgPort structure ready for use, or NULL if the port could not be created due to not enough memory or no available signal bit. NOTE In most cases, ports should not be named. Named ports are used for rendez-vous between tasks. Everytime a named port needs to be located, the list of all named ports must be traversed. The more named ports there are, the longer this list traversal takes. Thus, unless you really need to, do not name your ports, which will keep them off of the named port list and improve system performance. BUGS With versions of amiga.lib prior to V37.14, this function would not fail even though it couldn't allocate a signal bit. The port would be returned with no signal allocated. SEE ALSO DeletePort(), exec.library/FindPort(), <exec/ports.h>, exec.library/CreateMsgPort() amiga.lib/CreateStdIO amiga.lib/CreateStdIO NAME CreateStdIO -- create an IOStdReq structure SYNOPSIS ioReq = CreateStdIO(port); struct IOStdReq *CreateStdIO(struct MsgPort *) FUNCTION Allocates memory for and initializes a new IOStdReq structure. INPUTS port - an already initialized message port to be used for this IO request's reply port. If this is NULL this function fails. RESULT ioReq - a new IOStdReq structure, or NULL if there was not enough memory SEE ALSO DeleteStdIO(), CreateExtIO(), exec.library/CreateIORequest() amiga.lib/CreateTask amiga.lib/CreateTask NAME CreateTask -- Create task with given name, priority, stacksize SYNOPSIS task = CreateTask(name,pri,initPC,stackSize) struct Task *CreateTask(STRPTR,LONG,funcEntry,ULONG); FUNCTION This function simplifies program creation of sub-tasks by dynamically allocating and initializing required structures and stack space, and adding 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. An Exec task may not call dos.library functions or any function which might cause the loading of a disk-resident library, device, or file (since such functions are indirectly calls to dos.library). Only AmigaDOS Processes may call AmigaDOS; see the dos.library/CreateProc() or the dos.library/CreateNewProc() functions for more information. If other tasks or processes will need to find this task by name, provide a complex and unique name to avoid conflicts. If your compiler provides automatic insertion of stack-checking code, you may need to disable this feature when compiling sub-task code since the stack for the subtask is at a dynamically allocated location. If your compiler requires 68000 registers to contain particular values for base relative addressing, you may need to save these registers from your main process, and restore them in your initial subtask code. The function entry initPC is generally provided as follows: In C: extern void functionName(); char *tname = "unique name"; task = CreateTask(tname, 0L, functionName, 4000L); In assembler: PEA startLabel INPUTS name - a null-terminated name string pri - an Exec task priority between -128 and 127, normally 0 funcEntry - the address of the first executable instruction of the subtask code stackSize - size in bytes of stack for the subtask. Don't cut it too close - system function stack usage may change. RESULT task - a pointer to the newly created task, or NULL if there was not enough memory. BUGS Under exec.library V37 or beyond, the AddTask() function used internally by CreateTask() can fail whereas it couldn't fail in previous versions of Exec. Prior to amiga.lib V37.14, this function did not check for failure of AddTask() and thus might return a pointer to a task structure even though the task was not actually added to the system. SEE ALSO DeleteTask(), exec/FindTask() amiga.lib/CxCustom amiga.lib/CxCustom NAME CxCustom -- create a custom commodity object. (V36) SYNOPSIS customObj = CxCustom(action,id); CxObj *CxCustom(LONG(*)(),LONG); FUNCTION 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. The function provided ('action') will be passed a pointer to the actual commodities message (in commodities private data space), and will actually execute as part of the input handler system task. Among other things, the value of 'id' can be recovered from the message by using the function CxMsgID(). The purpose of this function is two-fold. First, it allows programmers to create Commodities Exchange objects with functionality that was not imagined or chosen for inclusion by the designers. Secondly, this is the only way to act synchronously with Commodities. This function is a C-language macro for CreateCxObj(), defined in <libraries/commodities.h>. INPUTS action - a function to call whenever a message reaches the object id - a message id to assign to the object RESULTS customObj - a pointer to the new custom object, or NULL if it could not be created. SEE ALSO commodities.library/CreateCxObj(), commodities.library/CxMsgID() amiga.lib/CxDebug amiga.lib/CxDebug NAME CxDebug -- create a commodity debug object. (V36) SYNOPSIS debugObj = CxDebug(id); CxObj *CxDebug(LONG); FUNCTION This function creates a Commodities debug object. The action of this object on receiving a Commodities message is to print out information about the Commodities message through the serial port (using the kprintf() routine). The value of 'id' will also be displayed. Note that this is a synchronous occurence (the printing is done by the input device task). If screen or file output is desired, using a sender object instead of a debug object is necessary, since such output is best done by your application process. This function is a C-language macro for CreateCxObj(), defined in <libraries/commodities.h>. INPUTS id - the id to assign to the debug object, this value is output whenever the debug object sends data to the serial port. RESULTS debugObj - a pointer to the debug object, or NULL if it could not be created. SEE ALSO commodities.library/CreateCxObj(), CxSender(), debug.lib/kprintf() amiga.lib/CxFilter amiga.lib/CxFilter NAME CxFilter -- create a commodity filter object. (V36) SYNOPSIS filterObj = CxFilter(description); CxObj *CxFilter(STRPTR) FUNCTION Creates an input event filter object that matches the 'description' string. If 'description' is NULL, the filter will not match any messages. A filter may be modified by the functions SetFilter(), using a description string, and SetFilterIX(), which takes a binary Input Expression as a parameter. This function is a C-language macro for CreateCxObj(), defined in <libraries/commodities.h>. INPUTS description - the description string in the same format as strings expected by commodities.library/SetFilter() RESULTS filterObj - a pointer to the filter object, or NULL if there was not enough memory. If there is a problem in the description string, the internal error code of the filter object will be set to so indicate. This error code may be interrogated using the function CxObjError(). SEE ALSO commodities.library/CreateCxObj(), commodities.library/SetFilter(), commodities.library/SetFilterIX(), commodities.library/CxObjError() amiga.lib/CxSender amiga.lib/CxSender NAME CxSender -- create a commodity sender object. (V36) SYNOPSIS senderObj = CxSender(port,id) CxObj *CxSender(struct MsgPort *,LONG); FUNCTION 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 the value 'id' in the message as well, and to send the message off to the message port 'port'. The value 'id' is used so that an application can monitor messages from several senders at a single port. It can be retrieved from the Exec message by using the function CxMsgID(). The value can be a simple integer ID, or a pointer to some application data structure. Note that Exec messages sent by sender objects arrive asynchronously at the destination port. Do not assume anything about the status of the Commodities message which was copied into the Exec message you received. All Exec messages sent to your ports must be replied. Messages may be replied after the sender object has been deleted. This function is a C-language macro for CreateCxObj(), defined in <libraries/commodities.h>. INPUTS port - the port for the sender to send messages to id - the id of the messages sent by the sender RESULTS semderObj - a pointer to the sender object, or NULL if it could not be created. SEE ALSO commodities.library/CreateCxObj(), commodities.library/CxMsgID(), exec.library/PutMsg(), exec.library/ReplyMsg() amiga.lib/CxSignal amiga.lib/CxSignal NAME CxSignal -- create a commodity signaller object. (V36) SYNOPSIS signalerObj = CxSignal(task,signal); CxObj *CxSignal(struct Task *,LONG); FUNCTION This function creates a Commodities signal object. The action of this object on receiving a Commodities message is to send the 'signal' to the 'task'. The caller is responsible for allocating the signal and determining the proper task ID. Note that 'signal' is the signal value as returned by AllocSignal(), not the mask made from that value. This function is a C-language macro for CreateCxObj(), defined in <libraries/commodities.h>. INPUTS task - the task for the signaller to signal signal - the signal bit number for the signaller to send RESULTS signallerObj - a pointer to the signaller object, or NULL if it could not be created. SEE ALSO commodities.library/CreateCxObj(), exec.library/FindTask() exec.library/Signal(), exec.library/AllocSignal(), amiga.lib/CxTranslate amiga.lib/CxTranslate NAME CxTranslate -- create a commodity translator object. (V36) SYNOPSIS translatorObj = CxTranslate(ie); CxObj *CxTranslate(struct InputEvent *); FUNCTION 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. There is one new Commodities input message generated for each input event in the linked list starting at 'ie' (and NULL terminated). The routing information of the new input messages is copied from the input message they replace. The linked list of input events associated with a translator object can be changed using the SetTranslate() function. If 'ie' is NULL, the null translation occurs: that is, the original commodities input message is disposed, and no others are created to take its place. This function is a C-language macro for CreateCxObj(), defined in <libraries/commodities.h>. INPUTS ie - the input event list used as replacement by the translator RESULTS translatorObj - a pointer to the translator object, or NULL if it could not be created. SEE ALSO commodities.library/CreateCxObj(), commodities.library/SetTranslate() amiga.lib/dbf amiga.lib/dbf NAME dbf - convert FFP dual-binary number to FFP format SYNOPSIS fnum = dbf(exp, mant); FUNCTION Accepts a dual-binary format (described below) floating point number and converts it to an FFP format floating point number. The dual-binary format is defined as: exp bit 16 = sign (0=>positive, 1=>negative) exp bits 15-0 = binary integer representing the base ten (10) exponent man = binary integer mantissa INPUTS exp - binary integer representing sign and exponent mant - binary integer representing the mantissa RESULT fnum - converted FFP floating point format number BUGS None amiga.lib/DeleteExtIO amiga.lib/DeleteExtIO NAME DeleteExtIO - return memory allocated for extended IO request SYNOPSIS DeleteExtIO(ioReq); VOID DeleteExtIO(struct IORequest *); FUNCTION Frees up an IO request as allocated by CreateExtIO(). INPUTS ioReq - the IORequest block to be freed, or NULL. SEE ALSO CreateExtIO() amiga.lib/DeletePort amiga.lib/DeletePort NAME DeletePort - free a message port created by CreatePort() SYNOPSIS DeletePort(port) VOID DeletePort(struct MsgPort *); FUNCTION Frees a message port created by CreatePort. All messages that may have been attached to this port must have already been replied before this function is called. INPUTS port - message port to delete SEE ALSO CreatePort() amiga.lib/DeleteStdIO amiga.lib/DeleteStdIO NAME DeleteStdIO - return memory allocated for IOStdReq SYNOPSIS DeleteStdIO(ioReq); VOID DeleteStdIO(struct IOStdReq *); FUNCTION Frees up an IOStdReq as allocated by CreateStdIO(). INPUTS ioReq - the IORequest block to be freed, or NULL. SEE ALSO CreateStdIO(), DeleteExtIO(), exec.library/CreateIORequest() amiga.lib/DeleteTask amiga.lib/DeleteTask NAME DeleteTask -- delete a task created with CreateTask() SYNOPSIS DeleteTask(task) VOID DeleteTask(struct Task *); FUNCTION This function simply calls exec.library/RemTask(), deleting a task from the Exec task lists and automatically freeing any stack and structure memory allocated for it by CreateTask(). Before deleting a task, 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. This can be accomplished by stopping all sources that might reference the doomed task, then causing the subtask to execute a Wait(0L). Another option is to have the task call DeleteTask()/RemTask() on itself. INPUTS task - task to remove from the system NOTE This function simply calls exec.library/RemTask(), so you can call RemTask() directly instead of calling this function. SEE ALSO CreateTask(), exec.library/RemTask() amiga.lib/DoMethod amiga.lib/DoMethod NAME DoMethod -- Perform method on object. (V36) SYNOPSIS result = DoMethod( obj, MethodID, ... ) ULONG DoMethod( Object *, ULONG, ... ); FUNCTION Boopsi support function that invokes the supplied message on the specified object. The message is invoked on the object's true class. Equivalent to DoMethodA(), but allows you to build the message on the stack. INPUTS obj - pointer to boopsi object MethodID - which method to send (see <intuition/classusr.h>) ... - method-specific message built on the stack RESULT result - specific to the message and the object's class. NOTES While this function requires V36 or higher intuition.library, it first appeared in V37 amiga.lib. SEE ALSO DoMethodA(), CoerceMethodA(), DoSuperMethodA(), <intuition/classusr.h> ROM Kernel Manual boopsi section amiga.lib/DoMethodA amiga.lib/DoMethodA NAME DoMethodA -- Perform method on object. (V36) SYNOPSIS result = DoMethodA( obj, msg ) ULONG DoMethodA( Object *, Msg * ); FUNCTION Boopsi support function that invokes the supplied message on the specified object. The message is invoked on the object's true class. INPUTS obj - pointer to boopsi object msg - pointer to method-specific message to send RESULT result - specific to the message and the object's class. NOTES While this function requires V36 or higher intuition.library, it first appeared in V37 amiga.lib. Some early example code may refer to this function as DM(). SEE ALSO DoMethod(), CoerceMethodA(), DoSuperMethodA(), <intuition/classusr.h> ROM Kernel Manual boopsi section amiga.lib/DoSuperMethod amiga.lib/DoSuperMethod NAME DoSuperMethod -- Perform method on object coerced to superclass. (V36) SYNOPSIS result = DoSuperMethod( cl, obj, MethodID, ... ) ULONG DoSuperMethod( struct IClass *, Object *, ULONG, ... ); FUNCTION Boopsi support function that invokes the supplied message on the specified object, as though it were the superclass of the specified class. Equivalent to DoSuperMethodA(), but allows you to build the message on the stack. INPUTS cl - pointer to boopsi class whose superclass is to receive the message obj - pointer to boopsi object ... - method-specific message built on the stack RESULT result - class and message-specific result. NOTES While this function requires V36 or higher intuition.library, it first appeared in V37 amiga.lib. SEE ALSO CoerceMethodA(), DoMethodA(), DoSuperMethodA(), <intuition/classusr.h> ROM Kernel Manual boopsi section amiga.lib/DoSuperMethodA amiga.lib/DoSuperMethodA NAME DoSuperMethodA -- Perform method on object coerced to superclass. (V36) SYNOPSIS result = DoSuperMethodA( cl, obj, msg ) ULONG DoSuperMethodA( struct IClass *, Object *, Msg * ); FUNCTION Boopsi support function that invokes the supplied message on the specified object, as though it were the superclass of the specified class. INPUTS cl - pointer to boopsi class whose superclass is to receive the message obj - pointer to boopsi object msg - pointer to method-specific message to send RESULT result - class and message-specific result. NOTES While this function requires V36 or higher intuition.library, it first appeared in V37 amiga.lib. Some early example code may refer to this function as DSM(). SEE ALSO CoerceMethodA(), DoMethodA(), DoSuperMethod(), <intuition/classusr.h> ROM Kernel Manual boopsi section amiga.lib/FastRand amiga.lib/FastRand NAME FastRand - quickly generate a somewhat random integer SYNOPSIS number = FastRand(seed); ULONG FastRand(ULONG); FUNCTION Seed value is taken from stack, shifted left one position, exclusive-or'ed with hex value $1D872B41 and returned. INPUTS seed - a 32-bit integer RESULT number - new random seed, a 32-bit value SEE ALSO RangeRand() amiga.lib/fpa amiga.lib/fpa NAME fpa - convert fast floating point into ASCII string equivalent SYNOPSIS exp = fpa(fnum, &string[0]); FUNCTION Accepts an FFP number and the address of the ASCII string where it's onverted output is to be stored. The number is converted to a NULL terminated ASCII string in and stored at the address provided. Additionally, the base ten (10) exponent in binary form is returned. INPUTS fnum - Motorola Fast Floating Point number &string[0] - address for output of converted ASCII character string (16 bytes) RESULT &string[0] - converted ASCII character string exp - integer exponent value in binary form BUGS None amiga.lib/FreeIEvents amiga.lib/FreeIEvents NAME FreeIEvents -- free a chain of input events allocated by InvertString(). (V36) SYNOPSIS FreeIEvents(events) VOID FreeIEvents(struct InputEvent *); FUNCTION This function frees a linked list of input events as obtained from InvertString(). INPUTS events - the list of input events to free, may be NULL. SEE ALSO InvertString() amiga.lib/GetRexxVar amiga.lib/GetRexxVar NAME GetRexxVar - Gets the value of a variable from a running ARexx program SYNOPSIS error = GetRexxVar(message,varname,bufpointer) D0,A1 A0 A1 (C-only) LONG GetRexxVar(struct RexxMsg *,char *,char **); FUNCTION This function will attempt to extract the value of the symbol varname from the ARexx script that sent the message. When called from C, a pointer to the extracted value will be placed in the pointer pointed to by bufpointer. (*bufpointer will be the pointer to the value) When called from assembly, the pointer will be returned in A1. The value string returned *MUST* *NOT* be modified. While this function is new in the V37 amiga.lib, it is safe to call it in all versions of the operating system. It is also PURE code, thus usable in resident/pure executables. NOTE This is a stub in amiga.lib. It is only available via amiga.lib. The stub has two labels. One, _GetRexxVar, takes the arguments from the stack. The other, GetRexxVar, takes the arguments in registers. This routine does a CheckRexxMsg() on the message. EXAMPLE char *value; /* Message is one from ARexx */ if (!GetRexxVar(rxmsg,"TheVar",&value)) { /* The value was gotten and now is pointed to by value */ printf("Value of TheVar is %s\n",value); } INPUTS message A message gotten from an ARexx script varname The name of the variable to extract bufpointer (For C only) A pointer to a string pointer. RESULTS error 0 for success, otherwise an error code. (Other codes may exists, these are documented) 3 == Insufficient Storage 9 == String too long 10 == invalid message A1 (Assembly only) Pointer to the string. SEE ALSO SetRexxVar(), CheckRexxMsg() amiga.lib/HookEntry amiga.lib/HookEntry NAME HookEntry -- Assembler to HLL conversion stub for hook entry. (V36) SYNOPSIS result = HookEntry( struct Hook *, Object *, APTR ) D0 A0 A2 A1 FUNCTION By definition, a standard hook entry-point must receive the hook in A0, the object in A2, and the message in A1. If your hook entry-point is written in a high-level language and is expecting its parameters on the stack, then HookEntry() will put the three parameters on the stack and invoke the function stored in the hook h_SubEntry field. This function is only useful to hook implementers, and is never called from C. INPUTS hook - pointer to hook being invoked object - pointer to hook-specific data msg - pointer to hook-specific message RESULT result - a hook-specific result. NOTES While this function requires V36 or higher intuition.library, it first appeared in V37 amiga.lib. EXAMPLE If your hook dispatcher is this: dispatch( struct Hook *hookPtr, Object *obj, APTR msg ) { ... } Then when you initialize your hook, you would say: myhook.h_Entry = HookEntry; /* amiga.lib stub */ myhook.h_SubEntry = dispatch; /* HLL entry */ SEE ALSO CallHook(), CallHookA(), <utility/hooks.h> amiga.lib/HotKey amiga.lib/HotKey NAME HotKey -- create a commodity triad. (V36) SYNOPSIS filterObj = Hotkey(description,port,id); CxObj *HotKey(STRPTR,struct MsgPort *,LONG); FUNCTION 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 the call CxFilter(description), a sender created by the call CxSender(port,id), and a translator which is created by CxTranslate(NULL), 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. It is strongly recommended that the ToolTypes environment be used to allow the user to specify the input descriptions for your application's hotkeys. INPUTS description - the description string to use for the filter in the same format as accepted by commodities.library/SetFilter() port - port for the sender to send messages to. id - id of the messages sent by the sender RESULTS filterObj - a pointer to a filter object, or NULL if it could not be created. SEE ALSO CxFilter(), CxSender(), CxTranslate(), commodities.library/CxObjError(), commodities.library/SetFilter() amiga.lib/InvertString amiga.lib/InvertString NAME InvertString -- produce input events that would generate the given string. (V36) SYNOPSIS events = InvertString(str,km) struct InputEvent *InvertString(STRPTR,struct KeyMap *); FUNCTION 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 'km' is NULL). 'str' is null-terminated and may contain: - ANSI character codes - backslash escaped characters: \n - CR \r - CR \t - TAB \0 - illegal, do not use! \\ - backslash - a text description of an input event as used by ParseIX(), enclosed in angle brackets. An example is: abc<alt f1>\nhi there. INPUTS str - null-terminated string to convert to input events km - keymap to use for the conversion, or NULL to use the default keymap. RESULTS events - a chain of input events, or NULL if there was a problem. The most likely cause of failure is an illegal description enclosed in angled brackets. This chain should eventually be freed using FreeIEvents(). SEE ALSO commodities.library/ParseIX(), FreeIEvents() amiga.lib/NewList amiga.lib/NewList NAME NewList -- prepare a list structure for use SYNOPSIS NewList(list) VOID NewList(struct List *); VOID NewList(struct MinList *); FUNCTION Perform the magic needed to prepare a List header structure for use; the list will be empty and ready to use. (If the list is the full featured type, you may need to initialize lh_Type afterwards) Assembly programmers may want to use the NEWLIST macro instead. INPUTS list - pointer to a List or MinList. SEE ALSO <exec/lists.h> amiga.lib/printf amiga.lib/printf NAME printf - print a formatted output line to the standard output. SYNOPSIS printf(formatstring [,value [,values] ] ); FUNCTION Format the output in accordance with specifications in the format string. INPUTS formatString - a C-language-like NULL-terminated format string, with the following supported % options: %[flags][width][.limit][length]type $ - must follow the arg_pos value, if specified flags - only one allowed. '-' specifies left justification. width - field width. If the first character is a '0', the field is padded with leading 0s. . - must precede the field width value, if specified limit - maximum number of characters to output from a string. (only valid for %s or %b). length - size of input data defaults to word (16-bit) for types c, d, u and x, 'l' changes this to long (32-bit). type - supported types are: b - BSTR, data is 32-bit BPTR to byte count followed by a byte string. A NULL BPTR is treated as an empty string. (V36) d - signed decimal u - unsigned decimal x - hexadecimal with hex digits in uppercase X - hexadecimal with hex digits in lowercase s - string, a 32-bit pointer to a NULL-terminated byte string. A NULL pointer is treated as an empty string. c - character value(s) - numeric variables or addresses of null-terminated strings to be added to the format information. NOTE The global "_stdout" must be defined, and contain a pointer to a legal AmigaDOS file handle. Using the standard Amiga startup module sets this up. In other cases you will need to define stdout, and assign it to some reasonable value (like what the dos.library/Output() call returns). This code would set it up: ULONG stdout; stdout=Output(); BUGS This function will crash if the resulting stream after parameter substitution is longer than 140 bytes. amiga.lib/RangeRand amiga.lib/RangeRand NAME RangeRand - generate a random number within a specific integer range SYNOPSIS number = RangeRand(maxValue); UWORD RangeRand(UWORD); FUNCTION RangeRand() accepts a value from 0 to 65535, and returns a value within that range. maxValue is passed on stack as a 32-bit integer but used as though it is only a 16-bit integer. Variable named RangeSeed is available beginning with V33 that contains the global seed value passed from call to call and thus can be changed in a program by declaring: extern ULONG RangeSeed; INPUTS maxValue - the returned random number will be in the range [0..maxValue-1] RESULT number - pseudo random number in the range of [0..maxValue-1]. SEE ALSO FastRand() amiga.lib/RemTOF amiga.lib/RemTOF NAME RemTOF - remove a task from the VBlank interrupt server chain. SYNOPSIS RemTOF(i); VOID RemTOF(struct Isrvstr *); FUNCTION Removes a task from the vertical-blanking interval interrupt server chain. INPUTS i - pointer to an Isrvstr structure SEE ALSO AddTOF(), <graphics/graphint.h> amiga.lib/SetRexxVar amiga.lib/SetRexxVar NAME SetRexxVar - Sets the value of a variable of a running ARexx program SYNOPSIS error = SetRexxVar(message,varname,value,length) D0 A0 A1 D0 D1 LONG SetRexxVar(struct RexxMsg *,char *,char *,ULONG); FUNCTION This function will attempt to the the value of the symbol varname in the ARexx script that sent the message. While this function is new in the V37 amiga.lib, it is safe to call it in all versions of the operating system. It is also PURE code, thus usable in resident/pure executables. NOTE This is a stub in amiga.lib. It is only available via amiga.lib. The stub has two labels. One, _SetRexxVar, takes the arguments from the stack. The other, SetRexxVar, takes the arguments in registers. This routine does a CheckRexxMsg() on the message. EXAMPLE char *value; /* Message is one from ARexx */ if (!SetRexxVar(rxmsg,"TheVar","25 Dollars",10)) { /* The value of TheVar will now be "25 Dollars" */ } INPUTS message A message gotten from an ARexx script varname The name of the variable to set value A string that will be the new value of the variable length The length of the value string RESULTS error 0 for success, otherwise an error code. (Other codes may exists, these are documented) 3 == Insufficient Storage 9 == String too long 10 == invalid message SEE ALSO SetRexxVar(), CheckRexxMsg() amiga.lib/SetSuperAttrs amiga.lib/SetSuperAttrs NAME SetSuperAttrs -- Invoke OM_SET method on superclass with varargs. (V36) SYNOPSIS result = SetSuperAttrs( cl, obj, tag, ... ) ULONG SetSuperAttrs( struct IClass *, Object *, ULONG, ... ); FUNCTION 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). The equivalent non-varargs function would simply be DoSuperMethod( cl, obj, OM_SET, taglist, NULL ); INPUTS cl - pointer to boopsi class whose superclass is to receive the OM_SET message obj - pointer to boopsi object tag - list of tag-attribute pairs, ending in TAG_DONE RESULT result - class and message-specific result. NOTES While this function requires V36 or higher intuition.library, it first appeared in V37 amiga.lib. SEE ALSO CoerceMethodA(), DoMethodA(), DoSuperMethodA(), <intuition/classusr.h> ROM Kernel Manual boopsi section amiga.lib/sprintf amiga.lib/sprintf NAME sprintf - format a C-like string into a string buffer. SYNOPSIS sprintf(destination formatstring [,value [, values] ] ); FUNCTION Performs string formatting identical to printf, but directs the output into a specific destination in memory. This uses the ROM version of printf (exec.library/RawDoFmt()), so it is very small. Assembly programmers can call this by placing values on the stack, followed by a pointer to the formatstring, followed by a pointer to the destination string. INPUTS destination - the address of an area in memory into which the formatted output is to be placed. formatstring - pointer to a null terminated string describing the desired output formatting (see printf() for a description of this string). value(s) - numeric information to be formatted into the output stream. SEE ALSO printf(), exec.library/RawDoFmt() amiga.lib/stdio amiga.lib/stdio NAMES fclose - close a file fgetc - get a character from a file fprintf - format data to file (see printf()) fputc - put character to file fputs - write string to file getchar - get a character from stdin printf - put format data to stdout (see exec.library/RawDoFmt) putchar - put character to stdout puts - put string to stdout, followed by newline FUNCTION These functions work much like the standard C functions of the same names. The file I/O functions all use non-buffered AmigaDOS files, and must not be mixed with the file I/O of any C compiler. The names of these functions match those found in many standard C libraries, when a name conflict occurs, the function is generally taken from the FIRST library that was specified on the linker's command line. Thus to use these functions, specify the amiga.lib library first. To get a suitable AmigaDOS FileHandle, the dos.library/Open() or dos.library/Output() functions must be used. All of the functions that write to stdout expect an appropriate FileHandle to have been set up ahead of time. Depending on your C compiler and options, this may have been done by the startup code. Or it can be done manually From C: extern ULONG stdout; /* Remove the extern if startup code did not define stdout */ stdout=Output(); From assembly: XDEF _stdout DC.L _stdout ;<- Place result of dos.library/Output() here. amiga.lib/TimeDelay amiga.lib/TimeDelay NAME TimeDelay -- Return after a period of time has elapsed. SYNOPSIS Error = TimeDelay( Unit, Seconds, MicroSeconds ) D0 D0 D1 D2 LONG TimeDelay( LONG, ULONG, ULONG ); FUNCTION Waits for the period of time specified before returning to the the caller. INPUTS Unit -- timer.device unit to open for this command. Seconds -- The seconds field of a timerequest is filled with this value. Check the documentation for what a partucular timer.device unit expects there. MicroSeconds -- The microseconds field of a timerequest is filled with this value. Check the documentation for what a particular timer.device units expects there. RESULTS Error -- will be zero if all went well; otherwise, non-zero. NOTES Two likely reasons for failures are invalid unit numbers or no more free signal bits for this task. While this function first appears in V37 amiga.lib, it works on Kickstart V33 and higher. SEE ALSO timer.device/TR_ADDREQUEST, timer.device/TR_WAITUNTIL, timer.device/WaitUnitl() BUGS