[Contents] [Index] [Help] [Retrace] [Browse <] [Browse >]


   NAME
	SystemControlA - Method for selectively disabling OS features. (V40)
	SystemControl - varargs stub for SystemControlA().

   SYNOPSIS
	failTag = SystemControlA(tagList);
	D0                       A1

	ULONG SystemControlA(struct TagItem *);

	failTag = SystemControl(firstTag, ...);

	ULONG SystemControl(Tag, ...);

   FUNCTION
	This function is used to alter the operation of the system. Some of
	the alterations involve controlling what are normally regarded as
	system resources. In order to minimize confusion only one task is
	allowed to control any part of the system resources. This prevents
	the possiblity of two tasks fighting, each controlling a part of the
	system. If a tag is identified as task exclusive, it means that
	only one task can hold (set to TRUE) that tag. If
	another task attempts to set the same tag to TRUE, the call to
	SystemControl() will fail.

	It is important to remember that SystemControl() can fail.

	This is a low level function and certain tags do not fit the normal
	Amiga multitasking model.

   INPUTS
	tagList - pointer to an array of tags listing the features of the
	          system to be enabled/disabled.

   TAGS
	SCON_TakeOverSys (BOOL)
		TRUE -	Takes over the CPU to ensure that a program gets every
			ounce of CPU time (with the exception of crucial
			interrupts). When in this mode, the CPU will belong
			completely to the program. Task switching will be
			disabled and the program will get all CPU cycles. This
			means any calls to the OS that involve multitasking in
			some way will not execute correctly. Other tasks will
			not run until this tag is used with FALSE. However,
			during a Wait() on a signal, multitasking will
			automatically be turned back on until the signal is
			received. Once received, multitasking will again be
			disabled and the CPU will be exclusive to the owning
			program.
		FALSE - Relinquishes the CPU and reenables multitasking.
			This tag is task exculsive. This tag nests. A task may
			take over the CPU several times before relinquishing
			it.

	SCON_KillReq (BOOL)
	       TRUE - 	Disables system requesters.  These are the reasons for
			NOT disabling system requesters:

	                    1- No calls in the program will cause a system
			       requester.
	                    2- The only thing that could cause a requester
			       to appear is the lack of a CD in the drive and
			       SCON_CDReboot is set to CDReboot_On, therefore a
			       requester can't appear.
	    		    3- The only disk I/O is via a CD with SCON_CDReboot
			       set to CDReboot_On and/or nonvolatile.library.

	    		When requesters should not be disabled.
	    		GAME PROGRAMS:
	    		No DOS calls are used after loading; or SCON_CDReboot
			is CDReboot_On; and nonvolatile.library is used for
			loading and saving user data.

	    		This fits the above case since; After loading either
			DOS calls are not used fitting reason 1, or the game
			is accessing the CD and has SCON_CDReboot set to
			CDReboot_On fitting reason 2. The game accesses high
			scores, game position, etc through nonvolatile.library,
			fitting reason 3.

		FALSE -	Enables requesters for the program.

	    This tag nests. Tasks may disable requesters several times before
	    enabling them.  However, there must be a matching number of calls.

	SCON_CDReboot (ULONG)
		CDReboot_On - Ejecting the CD will cause a reboot of the
			system. Use this only if the program cannot deal with
			error conditions.
		CDReboot_Off - Ejecting the CD will not cause a reboot of the
	    		system. Use this if the program needs to insert CDs
			while running.
		CDReboot_Default - Restore the default reboot behavior for this
			system. This should be used upon exit, if this tag had
			been used to change the reboot behaviour. For the CD32
 			this value is synonomous with CDReboot_On. For Amiga
			computers this value is synonomous with CDReboot_Off.

	    Note that the default reboot behavior differs depending on the
	    platform. If a program requires a specific behavior it must
	    use this function to set the behavior. For example, a CD audio
	    mixer would use this tag with the data CDReboot_Off. This will
	    allow the changing of audio CDs on the game machine as well as
	    Amiga computers.

	    If, however, there is no error detection code at all this tag
	    should be used with the data CDReboot_On.

	    It is hoped that no program will require CDReboot_On. If all
	    programs check for error condition and recover gracefully such a
	    call should never be necessary. With the default behavior the
	    CD32 will always reset on disk ejects, and programs
	    run from Amiga computers will not reset. Thus, leaving the
	    default will increase the market for a program to include both
	    types of platforms.

	    This tag does not nest.

	SCON_StopInput (BOOL) - When TRUE, stops input.device from using any
	    CPU cycles. Also prevents input.device from passing along any
	    events from either the keyboard and/or port 0.

	    This tag is task exclusive. This tag is NOT reversible.
	    Attempting to reverse will result in confused/garbled input
	    events.

	SCON_AddCreateKeys (ULONG) - Starts creating rawkey codes for the
	    joystick/game controller on the given unit. The unit value is
	    checked for validity and must be either 0 or 1. Each different unit
	    used results in some code added to the VBlank interrupt chain.
	    This tag nests. The tag SCON_RemCreateKeys is used to undo this
	    tag. Tasks may create rawkey codes several times before stopping
	    them.

	    Note that when operating in an Intuition window, the controller's
	    blue button is the equivilent of the mouse menu button. Therefore,
	    Intuition will be capturing most blue button events. If
	    notificiation of these events is important, review the
	    documentation for WFLG_RMBTRAP in the
	    intuition.library/OpenWindow() autodoc.

	SCON_RemCreateKeys (ULONG) - stops rawkey codes for the joystick/game
	    controller on the given unit. The unit value is checked for
	    validity and must be either 0 or 1.

   RESULT
	failTag - zero if all tags succeeded. A non-zero return indicates a
		  tag that has failed. It is possible that other tags may
	          fail as well.

	          If any tag fails there will be no change in the system due
	          to other tags.

   SEE ALSO
	<libraries/lowlevel.h>