givecon: DO;

$include( /rmx386/inc/rmxplm.ext )
$include( /rmx386/inc/error.lit )
$include( /rmx386/inc/common.lit )
$include( /rmx386/inc/io.lit )

RQE$Alt$SysReq: PROCEDURE( cmd, status$p ) BYTE EXTERNAL;
    DECLARE cmd BYTE, status$p POINTER;
END RQE$Alt$SysReq;

DECLARE

    /* RQE$Alt$SysReq Programmatic functions */

    LOCK$CMD            LITERALLY    '1',
    UNLOCK$CMD          LITERALLY    '2',
    SWITCH$TO$RMX       LITERALLY    '3',
    SWITCH$TO$DOS       LITERALLY    '4',
    QUERY$OWNER         LITERALLY    '5',

    /* Return values for RQE$Alt$SysReq calls */

    DOS$OWNS            LITERALLY    '0H',
    RMX$OWNS            LITERALLY    '0FFH',

    /* Variable database */

    status              WORD,
    dummy               BYTE,
    owner               BYTE;

main: DO;

    owner = RQE$alt$sysReq( LOCK$CMD, @status );
    IF (status <> E$OK) THEN CAUSE$INTERRUPT(3);

    owner = RQE$alt$sysReq( SWITCH$TO$DOS, @status );
    IF (status <> E$OK) THEN CAUSE$INTERRUPT(3);

    owner = RQE$alt$sysReq( QUERY$owner, @status );
    IF ((status <> E$OK) OR (owner <> DOS$OWNS)) THEN CAUSE$INTERRUPT(3);

    dummy = RQE$alt$sysReq( UNLOCK$CMD, @status );
    IF (status <> E$OK) THEN CAUSE$INTERRUPT(3);

    CALL dq$exit( 0 );

END main;

END givecon;
