var
 MainMenuOn        : Boolean; { Main menu state                  }
 ToolBarOn         : Boolean; { Toolbar state                    }
 StatusBarOn       : Boolean; { Statusbar state                  }
 DaqSystemOn       : Boolean; { DAQ SYSTEM window state          }
{
Return n times @system @async @async ...
}
function nAsync(n:Integer):String;
begin
 if n>0 then nAsync:=nAsync(n-1)+'@async ' else nAsync:='@system ';
end;
{
Hide\show main menu
}
procedure DisplayMainMenu(Visible:Boolean; n:Integer);
var r:Real;
begin
 if Visible
 then r:=eval(nAsync(n)+'@async @view show FormCrw32.MainMenu')
 else r:=eval(nAsync(n)+'@async @view hide FormCrw32.MainMenu');
end;
{
Hide\show toolbar
}
procedure DisplayToolBar(Visible:Boolean; n:Integer);
var r:Real;
begin
 if Visible
 then r:=eval(nAsync(n)+'@async @view show FormCrw32.ToolBar')
 else r:=eval(nAsync(n)+'@async @view hide FormCrw32.ToolBar');
end;
{
Hide\show Status Line
}
procedure DisplayStatusBar(Visible:Boolean; n:Integer);
var r:Real;
begin
 if Visible
 then r:=eval(nAsync(n)+'@async @view show FormCrw32.StatusBar')
 else r:=eval(nAsync(n)+'@async @view hide FormCrw32.StatusBar');
end;
{
Hide\show main menu
}
procedure DoMainMenu;
begin
 DisplayMainMenu(MainMenuOn,0);
 MainMenuOn:=not MainMenuOn;
 b:=Voice(snd_Click);
end;
{
Hide\show toolbar
}
procedure DoToolBar;
begin
 DisplayToolBar(ToolBarOn,0);
 ToolBarOn:=not ToolBarOn;
 b:=Voice(snd_Click);
end;
{
Hide\show Status Line
}
procedure DoStatusBar;
begin
 DisplayStatusBar(StatusBarOn,0);
 StatusBarOn:=not StatusBarOn;
 b:=Voice(snd_Click);
end;
{
Hide\show DAQ SYSTEM
}
procedure DoDaqSystem(n:Integer);
var r:Real;
begin
 if DaqSystemOn
 then r:=eval(nAsync(n)+'@async @view norm FormDaqControlDialog')
 else r:=eval(nAsync(n)+'@async @view min  FormDaqControlDialog');
 DaqSystemOn:=not DaqSystemOn;
 b:=Voice(snd_Click);
end;
{
Exit DAQ system
}
procedure DoExitDaq(n:Integer);
var r:Real;
begin
 r:=eval(nAsync(n)+'@async SaveGuard=@guard');
 r:=eval(nAsync(n)+'@async @guard root');
 r:=eval(nAsync(n)+'@async _Daq_Force_Stop_=1');
 r:=eval(nAsync(n)+'@async _Daq_Force_Exit_=1');
 r:=eval(nAsync(n)+'@async @view max FormCrw32');
 r:=eval(nAsync(n)+'@async @view norm FormDaqControlDialog');
 r:=eval(nAsync(n)+'@async @menu run FormDaqControlDialog.ActionDaqStop');
 r:=eval(nAsync(n)+'@async @menu run FormDaqControlDialog.ActionDaqDone');
 r:=eval(nAsync(n)+'@async @guard %SaveGuard');
 r:=eval(nAsync(n)+'@async SaveGuard=');
 b:=Voice(snd_Click);
end;
{
Exit CRW program
}
procedure DoExitCrw(n:Integer);
var r:Real;
begin
 r:=eval(nAsync(n)+'@async SaveGuard=@guard');
 r:=eval(nAsync(n)+'@async @guard root');
 r:=eval(nAsync(n)+'@async _Daq_Force_Stop_=1');
 r:=eval(nAsync(n)+'@async _Daq_Force_Exit_=1');
 r:=eval(nAsync(n)+'@async @view max FormCrw32');
 r:=eval(nAsync(n)+'@async @view norm FormDaqControlDialog');
 r:=eval(nAsync(n)+'@async @menu run FormDaqControlDialog.ActionDaqStop');
 r:=eval(nAsync(n)+'@async @menu run FormDaqControlDialog.ActionDaqDone');
 r:=eval(nAsync(n)+'@async _Crw_Force_Exit_=1');
 r:=eval(nAsync(n)+'@async @view max FormCrw32');
 r:=eval(nAsync(n)+'@async @menu run FormCrw32.ActionFileExit');
 r:=eval(nAsync(n)+'@async @guard %SaveGuard');
 r:=eval(nAsync(n)+'@async SaveGuard=');
 b:=Voice(snd_Click);
end;
{
Exit windows after Timeout seconds.
How = l/s/r = logout/stop/restart exit mode.
}
procedure DoExitWin(How:Char; TimeoutSec,n:Integer);
var r:Real;
begin
 r:=eval(nAsync(n)+'@async SaveGuard=@guard');
 r:=eval(nAsync(n)+'@async @guard root');
 r:=eval(nAsync(n)+'@async _Daq_Force_Stop_=1');
 r:=eval(nAsync(n)+'@async _Daq_Force_Exit_=1');
 r:=eval(nAsync(n)+'@async @view max FormCrw32');
 r:=eval(nAsync(n)+'@async @view norm FormDaqControlDialog');
 r:=eval(nAsync(n)+'@async @menu run FormDaqControlDialog.ActionDaqStop');
 r:=eval(nAsync(n)+'@async @menu run FormDaqControlDialog.ActionDaqDone');
 r:=eval(nAsync(n)+'@async @run -hide '+GetComSpec+' /c '
        +AddBackSlash(ExtractFilePath(GetComSpec))+'shutdown.exe -'
        +How+' -t '+Str(TimeoutSec));
 r:=eval(nAsync(n)+'@async _Crw_Force_Exit_=1');
 r:=eval(nAsync(n)+'@async @view max FormCrw32');
 r:=eval(nAsync(n)+'@async @menu run FormCrw32.ActionFileExit');
 r:=eval(nAsync(n)+'@async @guard %SaveGuard');
 r:=eval(nAsync(n)+'@async SaveGuard=');
 b:=Voice(snd_Click);
end;
{
Restart DAQ system after Timeout msec.
Force start after load if ForceStart=true.
}
procedure DoRestartDaq(cfg:String;ForceStart:Boolean; TimeoutMsec,n:Integer);
var r:Real;
begin
 r:=eval(nAsync(n)+'@async SaveGuard=@guard');
 r:=eval(nAsync(n)+'@async @guard root');
 r:=eval(nAsync(n)+'@async _Daq_Force_Stop_=1');
 r:=eval(nAsync(n)+'@async _Daq_Force_Exit_=1');
 r:=eval(nAsync(n)+'@async @view max FormCrw32');
 r:=eval(nAsync(n)+'@async @view norm FormDaqControlDialog');
 r:=eval(nAsync(n)+'@async @menu run FormDaqControlDialog.ActionDaqStop');
 r:=eval(nAsync(n)+'@async @menu run FormDaqControlDialog.ActionDaqDone');
 r:=eval(nAsync(n)+'@async _Daq_Force_Start_='+str(ord(ForceStart)));
 r:=eval(nAsync(n)+'@async @run '+ParamStr('ProgName')+' '+cfg);
 r:=eval(nAsync(n)+'@async @sleep '+Str(TimeoutMsec));
 r:=eval(nAsync(n)+'@async @async @guard %SaveGuard');
 r:=eval(nAsync(n)+'@async @async SaveGuard=');
 b:=Voice(snd_Click);
end;
{
Just another version of Restart DAQ. 
}
procedure DoReloadDaq(cfg:String;ForceStart:Boolean; TimeOutMsec,n:Integer);
var r:Real;
begin
 r:=eval(nAsync(n)+'@async SaveGuard=@guard');
 r:=eval(nAsync(n)+'@async @guard root');
 r:=eval(nAsync(n)+'@async _Daq_Force_Stop_=1');
 r:=eval(nAsync(n)+'@async _Daq_Force_Exit_=1');
 r:=eval(nAsync(n)+'@async @view max FormCrw32');
 r:=eval(nAsync(n)+'@async @view norm FormDaqControlDialog');
 r:=eval(nAsync(n)+'@async @menu run FormDaqControlDialog.ActionDaqStop');
 r:=eval(nAsync(n)+'@async @menu run FormDaqControlDialog.ActionDaqDone');
 if ForceStart then begin
  r:=eval(nAsync(n)+'@async @run '+ParamStr('ProgName')+' '+cfg);
  r:=eval(nAsync(n)+'@async @sleep '+Str(TimeOutMsec));
  r:=eval(nAsync(n)+'@async @async @view max FormCrw32');
  r:=eval(nAsync(n)+'@async @async @view norm FormDaqControlDialog');
  r:=eval(nAsync(n)+'@async @async @menu run FormDaqControlDialog.ActionDaqStart');
 end;
 r:=eval(nAsync(n)+'@async @async @guard %SaveGuard');
 r:=eval(nAsync(n)+'@async @async SaveGuard=');
 b:=Voice(snd_Click);
end;
