1051 lines
28 KiB
Plaintext
1051 lines
28 KiB
Plaintext
; --------------------------------------------------------------------------------
|
|
; @Title: Menu File for TRACE32 uCLinux Awareness
|
|
; @Description: -
|
|
; @Keywords: uCLinux menu awareness
|
|
; @Author: DIE
|
|
; @Copyright: (C) 1989-2021 Lauterbach GmbH, licensed for use with TRACE32(R) only
|
|
; --------------------------------------------------------------------------------
|
|
; $Id: uclinux.m 7861 2022-07-29 13:45:42Z amerkle $
|
|
|
|
NAME "TASK.UCLINUX"
|
|
IF !MENU.EXIST("TASK.UCLINUX")
|
|
(
|
|
add
|
|
menu
|
|
(
|
|
POPUP "uCLinux"
|
|
(
|
|
default
|
|
menuitem "[:objects]Display &Tasks" "TASK.DTask"
|
|
menuitem "[:objects]Display ps-like" "TASK.PS pid tty time stat cmd"
|
|
menuitem "[:objects]Display &Modules" "TASK.MODule"
|
|
popup "[:objects]Display &File System"
|
|
(
|
|
menuitem "[:objects]Display FS Types" "TASK.FS.Types"
|
|
menuitem "[:objects]Display Mount Points" "TASK.FS.Mount"
|
|
menuitem "[:objects]Display Mounted Devices" "TASK.FS.MountDevs"
|
|
menuitem "[:objects]Display /proc" "TASK.FS.PROC"
|
|
)
|
|
separator
|
|
popup "&Process Debugging"
|
|
(
|
|
menuitem "[:symbols]&Load Symbols..."
|
|
(
|
|
dialog
|
|
(
|
|
header "TASK.sYmbol.LOAD"
|
|
pos 0. 0. 30. 3.
|
|
box "Process name"
|
|
pos 1. 1. 20. 1.
|
|
procl: defedit "" ""
|
|
pos 22. 1. 7. 1.
|
|
button "Browse..."
|
|
(
|
|
PRIVATE &file
|
|
dialog.file "*"
|
|
entry %line &file
|
|
dialog.set procl "&file"
|
|
)
|
|
pos 6. 3. 7. 1.
|
|
defbutton "Ok"
|
|
(
|
|
PRIVATE &procl &cwd
|
|
&procl=dialog.string(procl)
|
|
TASK.sYmbol.LOAD "&procl"
|
|
dialog.end
|
|
)
|
|
pos 17. 3. 7. 1.
|
|
button "Cancel" "dialog.end"
|
|
)
|
|
)
|
|
menuitem "[:symbols]&Delete Symbols..."
|
|
(
|
|
dialog
|
|
(
|
|
header "TASK.sYmbol.DELete"
|
|
pos 0. 0. 30. 3.
|
|
box "Process name"
|
|
pos 1. 1. 20. 1.
|
|
procd: defedit "" ""
|
|
pos 22. 1. 7. 1.
|
|
button "Browse..."
|
|
(
|
|
PRIVATE &file
|
|
dialog.file "*"
|
|
entry %line &file
|
|
dialog.set procd "&file"
|
|
)
|
|
pos 6. 3. 7. 1.
|
|
defbutton "Ok"
|
|
(
|
|
PRIVATE &procd
|
|
&procd=dialog.string(procd)
|
|
TASK.sYmbol.DELete "&procd"
|
|
dialog.end
|
|
)
|
|
pos 17. 3. 7. 1.
|
|
button "Cancel" "dialog.end"
|
|
)
|
|
)
|
|
menuitem "Debug Process on main..."
|
|
(
|
|
global &breakaddr
|
|
&breakaddr=0
|
|
if (task.watch.active()==1)
|
|
(
|
|
dialog.ok "Please close TASK.Watch window" "before using this menu item"
|
|
enddo
|
|
)
|
|
if (task.y.o(autoload)&0x1)!=1
|
|
(
|
|
dialog.ok "Please configure autoloader" "to check processes"
|
|
enddo
|
|
)
|
|
dialog
|
|
(
|
|
header "Debug Process on main"
|
|
pos 0. 0. 24. 3.
|
|
box "process name"
|
|
pos 1. 1. 22. 1.
|
|
proc: defhotedit ""
|
|
(
|
|
if dialog.string(proc)!=""
|
|
dialog.enable bok
|
|
else
|
|
dialog.disable bok
|
|
)
|
|
pos 1. 3. 22. 1.
|
|
exec: checkbox "send command to TERM window" ""
|
|
pos 2. 4.5 8.
|
|
bok: defbutton "Ok"
|
|
(
|
|
local &process &breakaddr
|
|
screen.always
|
|
dialog.disable bok
|
|
dialog.disable proc
|
|
&process=dialog.string(proc)
|
|
dialog.set mess "Checking process &process..."
|
|
if run()
|
|
Break
|
|
if task.proc.codeaddr("&process")!=0xffffffff
|
|
(
|
|
sYmbol.AutoLOAD.CLEAR "&process"
|
|
sYmbol.AutoLoad.CHECK
|
|
sYmbol.AutoLOAD.TOUCH "&process"
|
|
if y.exist(\\&process)
|
|
dialog.ok "Process &process already running." "Symbols loaded."
|
|
else
|
|
dialog.ok "Process &process already running." "No symbol file found."
|
|
JUMPTO close
|
|
)
|
|
dialog.set mess "Please start process &process"
|
|
&breakaddr=address.offset(set_binfmt)
|
|
Break.Delete &breakaddr
|
|
Break.Set C:&breakaddr /CONDition task.proc.codeaddr("&process")!=0xffffffff
|
|
ON PBREAKAT &breakaddr goto breaked1
|
|
Go
|
|
if dialog.boolean(exec)
|
|
TERM.OUT "&process" 0x0a
|
|
stop
|
|
breaked1:
|
|
dialog.set mess "Process &process started. Loading symbols..."
|
|
Break.Delete &breakaddr
|
|
ON PBREAKAT &breakaddr
|
|
&breakaddr=0
|
|
sYmbol.AutoLOAD.CLEAR "&process"
|
|
sYmbol.AutoLOAD.CHECK
|
|
sYmbol.AutoLOAD.TOUCH "&process"
|
|
Eval 0
|
|
sYmbol.ForEach "Eval address.offset(*)" \\&process\*\main
|
|
&breakaddr=eval()
|
|
if &breakaddr==0
|
|
(
|
|
dialog.ok "Symbol 'main' of process &process not found."
|
|
JUMPTO close
|
|
)
|
|
dialog.set mess "Waiting for reaching main..."
|
|
Break.Set C:&breakaddr
|
|
;sYmbol.ForEach "Break.Set C:" \\&process\*\main ; do not use &breakaddr -- to retain T:/R:
|
|
ON PBREAKAT &breakaddr goto breaked2
|
|
Go
|
|
stop
|
|
breaked2:
|
|
JUMPTO close
|
|
)
|
|
pos 14. 4.5 8.
|
|
button "Cancel" "JUMPTO close"
|
|
pos 0. 6. 24. 1.
|
|
mess: edit "Please enter process name" ""
|
|
close "JUMPTO close"
|
|
)
|
|
dialog.disable bok
|
|
dialog.disable mess
|
|
stop
|
|
close:
|
|
if &breakaddr!=0
|
|
(
|
|
if run()
|
|
Break
|
|
Break.Delete &breakaddr
|
|
ON PBREAKAT &breakaddr
|
|
&breakaddr=0
|
|
)
|
|
dialog.end
|
|
enddo
|
|
)
|
|
addhere
|
|
popup "&Watch Processes"
|
|
(
|
|
menuitem "[:plus]&Add..."
|
|
(
|
|
dialog
|
|
(
|
|
header "TASK.Watch.Add"
|
|
pos 0. 0. 24. 3.
|
|
box "Process name"
|
|
pos 1. 1. 22. 1.
|
|
wproca: defedit "" ""
|
|
pos 2. 3. 7. 1.
|
|
defbutton "Ok"
|
|
(
|
|
PRIVATE &wproca
|
|
&wproca=dialog.string(wproca)
|
|
TASK.Watch.View "&wproca"
|
|
dialog.end
|
|
)
|
|
pos 15. 3. 7. 1.
|
|
button "Cancel" "dialog.end"
|
|
)
|
|
)
|
|
menuitem "[:remove]&Remove..."
|
|
(
|
|
dialog
|
|
(
|
|
header "TASK.Watch.DELete"
|
|
pos 0. 0. 24. 3.
|
|
box "Process name"
|
|
pos 1. 1. 22. 1.
|
|
wprocd: defedit "" ""
|
|
pos 2. 3. 7. 1.
|
|
defbutton "Ok"
|
|
(
|
|
PRIVATE &wprocd
|
|
&wprocd=dialog.string(wprocd)
|
|
TASK.Watch.DELete "&wprocd"
|
|
dialog.end
|
|
)
|
|
pos 15. 3. 7. 1.
|
|
button "Cancel" "dialog.end"
|
|
)
|
|
)
|
|
)
|
|
;separator
|
|
;menuitem "[:manual]Process Debugging Manual" "HELP __RTOS_LINUX__S_User_Processes"
|
|
)
|
|
popup "&Module Debugging"
|
|
(
|
|
menuitem "[:symbols]&Load Symbols..."
|
|
(
|
|
dialog
|
|
(
|
|
header "TASK.sYmbol.LOADMod"
|
|
pos 0. 0. 30. 3.
|
|
box "Module name"
|
|
pos 1. 1. 20. 1.
|
|
modl: defedit "" ""
|
|
pos 22. 1. 7. 1.
|
|
button "Browse..."
|
|
(
|
|
PRIVATE &file
|
|
dialog.file "*.ko"
|
|
entry %line &file
|
|
dialog.set modl "&file"
|
|
)
|
|
pos 6. 3. 7. 1.
|
|
defbutton "Ok"
|
|
(
|
|
PRIVATE &modl
|
|
&modl=dialog.string(modl)
|
|
TASK.sYmbol.LOADMod "&modl"
|
|
dialog.end
|
|
)
|
|
pos 17. 3. 7. 1.
|
|
button "Cancel" "dialog.end"
|
|
)
|
|
)
|
|
menuitem "[:symbols]&Delete Symbols..."
|
|
(
|
|
dialog
|
|
(
|
|
header "TASK.sYmbol.DELeteMod"
|
|
pos 0. 0. 30. 3.
|
|
box "Module name"
|
|
pos 1. 1. 20. 1.
|
|
modd: defedit "" ""
|
|
pos 22. 1. 7. 1.
|
|
button "Browse..."
|
|
(
|
|
PRIVATE &file
|
|
dialog.file "*.ko"
|
|
entry %line &file
|
|
dialog.set modd "&file"
|
|
)
|
|
pos 6. 3. 7. 1.
|
|
defbutton "Ok"
|
|
(
|
|
PRIVATE &modd
|
|
&modd=dialog.string(modd)
|
|
TASK.sYmbol.DELeteMod "&modd"
|
|
dialog.end
|
|
)
|
|
pos 17. 3. 7. 1.
|
|
button "Cancel" "dialog.end"
|
|
)
|
|
)
|
|
)
|
|
separator
|
|
popup "[:symbols]&Autoloader"
|
|
(
|
|
menuitem "[:symbols]List Components" "sYmbol.AutoLoad.List"
|
|
menuitem "[:init]Check Now!" "sYmbol.AutoLoad.CHECK"
|
|
MENUITEM "[:config]Config" "sYmbol.AutoLOAD.config"
|
|
menuitem "[:objects]Components"
|
|
(
|
|
dialog
|
|
(
|
|
header "TASK.sYmbol.Option AutoLoad"
|
|
pos 0. 0. 25.
|
|
proc: checkbox "Process (Processes)"
|
|
(
|
|
if dialog.boolean(proc)
|
|
TASK.sYmbol.Option AutoLoad Process
|
|
else
|
|
TASK.sYmbol.Option AutoLoad NoProcess
|
|
)
|
|
mod: checkbox "Module (Modules)"
|
|
(
|
|
if dialog.boolean(mod)
|
|
TASK.sYmbol.Option AutoLoad Module
|
|
else
|
|
TASK.sYmbol.Option AutoLoad NoModule
|
|
)
|
|
lib: checkbox "Library (All Libraries)"
|
|
(
|
|
if dialog.boolean(lib)
|
|
TASK.sYmbol.Option AutoLoad Library
|
|
else
|
|
TASK.sYmbol.Option AutoLoad NoLibrary
|
|
dialog.set clib "FALSE"
|
|
)
|
|
clib: checkbox "CurrLib (Libraries of Current Process)"
|
|
(
|
|
if dialog.boolean(clib)
|
|
TASK.sYmbol.Option AutoLoad CurrLib
|
|
else
|
|
TASK.sYmbol.Option AutoLoad NoLibrary
|
|
dialog.set lib "FALSE"
|
|
)
|
|
)
|
|
dialog.set proc ((task.y.o(autoload)&0x1)!=0)
|
|
dialog.set mod ((task.y.o(autoload)&0x4)!=0)
|
|
dialog.set lib ((task.y.o(autoload)&0x2)!=0)
|
|
dialog.set clib ((task.y.o(autoload)&0x8)!=0)
|
|
)
|
|
)
|
|
separator
|
|
menuitem "[:term]&Linux Terminal"
|
|
(
|
|
if !window.name(term)
|
|
(
|
|
winpos ,,,,,, term
|
|
TERM
|
|
)
|
|
else
|
|
wintop term
|
|
)
|
|
menuitem "[:config]Configure Terminal..."
|
|
(
|
|
if window.name(term)
|
|
dialog.ok "Please close terminal window first!"
|
|
else
|
|
(
|
|
dialog
|
|
(
|
|
header "TERM.Protocol"
|
|
pos 0. 0. 9.
|
|
tp.be: choosebox "BufferE"
|
|
(
|
|
dialog.disable tp.com.dev
|
|
dialog.disable tp.com.bd
|
|
dialog.enable tp.be.out
|
|
dialog.enable tp.be.in
|
|
)
|
|
pos 10. 0. 5.
|
|
text "out:"
|
|
pos 15. 0. 6.
|
|
tp.be.out: edit "T32OUTBUF" ""
|
|
pos 23. 0. 6.
|
|
text "in:"
|
|
pos 29. 0. 6.
|
|
tp.be.in: edit "T32INBUF" ""
|
|
pos 0. 1. 9.
|
|
tp.dcc: choosebox "DCC"
|
|
(
|
|
dialog.disable tp.com.dev
|
|
dialog.disable tp.com.bd
|
|
dialog.disable tp.be.out
|
|
dialog.disable tp.be.in
|
|
)
|
|
pos 0. 2. 9.
|
|
tp.com: choosebox "COM"
|
|
(
|
|
dialog.disable tp.be.out
|
|
dialog.disable tp.be.in
|
|
dialog.enable tp.com.dev
|
|
dialog.enable tp.com.bd
|
|
)
|
|
pos 10. 2. 5.
|
|
text "device:"
|
|
pos 15. 2. 6.
|
|
tp.com.dev: edit "COM1" ""
|
|
pos 23. 2. 6.
|
|
text "baudrate:"
|
|
pos 29. 2. 6.
|
|
tp.com.bd: edit "115200." ""
|
|
pos 9. 3.5 7.
|
|
defbutton "Ok"
|
|
(
|
|
PRIVATE &tpbeout &tpbein &tpcomdev &tpcombd
|
|
&tpbeout=dialog.string(tp.be.out)
|
|
&tpbein=dialog.string(tp.be.in)
|
|
&tpcomdev=dialog.string(tp.com.dev)
|
|
&tpcombd=dialog.string(tp.com.bd)
|
|
if dialog.boolean(tp.be)
|
|
TERM.METHOD BufferE &tpbeout &tpbein
|
|
else if dialog.boolean(tp.dcc)
|
|
TERM.METHOD DCC
|
|
else if dialog.boolean(tp.com)
|
|
TERM.METHOD COM &tpcomdev &tpcombd 8 NONE 1STOP NONE
|
|
dialog.end
|
|
)
|
|
pos 19. 3.5 7.
|
|
button "Cancel" "dialog.end"
|
|
)
|
|
dialog.disable tp.be.out
|
|
dialog.disable tp.be.in
|
|
dialog.disable tp.com.dev
|
|
dialog.disable tp.com.bd
|
|
if cpufamily()!="ARM"
|
|
dialog.disable tp.dcc
|
|
)
|
|
)
|
|
separator
|
|
popup "[:coverage]&Stack Coverage"
|
|
(
|
|
menuitem "[:objects]&List Stacks"
|
|
(
|
|
if icd()||simulator()
|
|
TASK.STacK.PATtern 0
|
|
TASK.STacK
|
|
)
|
|
menuitem "[:plus]Add Task" "TASK.STacK.ADD"
|
|
menuitem "[:remove]Remove Task" "TASK.STacK.ReMove"
|
|
enable ice()||fire()
|
|
menuitem "&Reset Coverage" "TASK.STacK.RESet"
|
|
)
|
|
|
|
)
|
|
popup "Trace"
|
|
(
|
|
popup "List"
|
|
(
|
|
separator
|
|
menuitem "[:alist]&Task Switches" "Trace.List List.TASK"
|
|
menuitem "[:alist]&Default and Tasks" "Trace.List List.TASK DEFault"
|
|
)
|
|
)
|
|
popup "Perf"
|
|
(
|
|
separator
|
|
popup "&Task Runtime"
|
|
(
|
|
menuitem "&Prepare"
|
|
(
|
|
if t.method.analyzer()
|
|
(
|
|
Analyzer.AutoInit on
|
|
)
|
|
if (ice()||fire())&&!a.mode.flow()
|
|
(
|
|
Analyzer.ReProgram
|
|
(
|
|
Sample.Enable if AlphaBreak&&Write
|
|
)
|
|
Break.Delete /Alpha
|
|
Break.Set C:0x1F:::task.config(magic)++(task.config(magicsize)-1) /Alpha
|
|
)
|
|
if a.mode.flow()
|
|
(
|
|
Break.Delete /TraceEnable
|
|
Break.Set C:0x1F:::task.config(magic) /TraceEnable
|
|
)
|
|
)
|
|
menuitem "[:perf]Show &Numerical" "Trace.STATistic.TASK"
|
|
menuitem "[:achart]Show as &Timing" "Trace.CHART.TASK"
|
|
menuitem "[:achart]Tracking with Trace &List"
|
|
(
|
|
Trace.List List.TASK DEFault /Track
|
|
Trace.CHART.TASK /Track
|
|
)
|
|
)
|
|
popup "Task &Function Runtime"
|
|
(
|
|
menuitem "&Prepare"
|
|
(
|
|
if t.method.analyzer()
|
|
(
|
|
Analyzer.AutoInit on
|
|
Analyzer.STATistic.PreFetch on
|
|
)
|
|
|
|
if (ice()||fire())&&!a.mode.flow()
|
|
(
|
|
if a.config.hac()
|
|
(
|
|
Analyzer.ReProgram
|
|
(
|
|
Sample.Enable if AlphaBreak
|
|
Sample.Enable if BetaBreak
|
|
Mark.A if AlphaBreak
|
|
Mark.B if BetaBreak
|
|
)
|
|
)
|
|
else
|
|
(
|
|
Analyzer.ReProgram
|
|
(
|
|
Sample.Enable if AlphaBreak||BetaBreak
|
|
Mark.A if AlphaBreak
|
|
Mark.B if BetaBreak
|
|
)
|
|
)
|
|
Break.Delete /Alpha /Beta /Charly
|
|
Break.SetFunc
|
|
Break.Set C:0x1F:::task.config(magic)++(task.config(magicsize)-1) /Alpha
|
|
)
|
|
if a.mode.flow()
|
|
(
|
|
Break.Delete /TraceData
|
|
Break.Set C:0x1F:::task.config(magic) /TraceData
|
|
)
|
|
)
|
|
menuitem "[:perf]Show &Numerical" "Trace.STATistic.TASKFUNC"
|
|
menuitem "[:perf]Show as &Tree" "Trace.STATistic.TASKTREE"
|
|
menuitem "[:perf]Show &Detailed Tree" "Trace.STATistic.TASKTREE ALL"
|
|
menuitem "[:achart]Show as &Timing" "Trace.CHART.TASKFUNC"
|
|
menuitem "[:alist]Show N&esting" "Trace.List List.TASK FUNC TI.FUNC"
|
|
)
|
|
popup "Task &Status"
|
|
(
|
|
menuitem "&Prepare"
|
|
(
|
|
if t.method.analyzer()
|
|
(
|
|
Analyzer.AutoInit on
|
|
)
|
|
if (ice()||fire())&&!a.mode.flow()
|
|
(
|
|
Analyzer.ReProgram
|
|
(
|
|
Sample.Enable if AlphaBreak&&Write
|
|
)
|
|
Break.Delete /Alpha
|
|
Break.Set C:0x1F:::task.config(magic)++(task.config(magicsize)-1) /Alpha
|
|
TASK.TASKState
|
|
)
|
|
)
|
|
menuitem "[:perf]Show &Numerical" "Trace.STATistic.TASKSTATE"
|
|
menuitem "[:achart]Show as &Timing" "Trace.CHART.TASKSTATE"
|
|
menuitem "[:achart]Tracking with Trace &List"
|
|
(
|
|
Trace.List List.TASK DEFault /Track
|
|
Trace.CHART.TASKSTATE /Track
|
|
)
|
|
)
|
|
)
|
|
popup "&Help"
|
|
(
|
|
MENUITEM "[:manual]OS Awareness Manual uCLinux" "HELP __RTOS_UCLINUX_"
|
|
)
|
|
)
|
|
|
|
|
|
menu "task.dt"
|
|
(
|
|
default
|
|
menuitem "[:objects]Display detailed"
|
|
(
|
|
PRIVATE &address
|
|
&address=address.offset(track.address())
|
|
TASK.DTask &address
|
|
)
|
|
menuitem "[:var]Display task struct"
|
|
(
|
|
PRIVATE &address
|
|
&address=address.offset(track.address())
|
|
Var.View %m %s (struct task_struct*)&address
|
|
)
|
|
separator
|
|
menuitem "[:varframe]Display Stack Frame"
|
|
(
|
|
PRIVATE &address
|
|
&address=address.offset(track.address())
|
|
Var.Frame /Locals /Caller /Task &address
|
|
)
|
|
menuitem "[:reg]Display Registers"
|
|
(
|
|
PRIVATE &address
|
|
&address=address.offset(track.address())
|
|
Register /Task &address
|
|
)
|
|
menuitem "Switch Context"
|
|
(
|
|
PRIVATE &address
|
|
&address=address.offset(track.address())
|
|
Register.TASK &address
|
|
)
|
|
separator
|
|
menuitem "[:symbols]Load Process Symbols" "TASK.sYmbol.LOAD track.address()"
|
|
menuitem "[:symbols]Delete Process Symbols" "TASK.sYmbol.DELete track.address()"
|
|
menuitem "Add to Watched Processes"
|
|
(
|
|
PRIVATE &address
|
|
&address=address.offset(track.address())
|
|
TASK.Watch.View &address
|
|
)
|
|
menuitem "Delete from Watched Processes" "TASK.Watch.DELete track.address()"
|
|
separator
|
|
menuitem "Add to Stack Cov" "TASK.STK.ADD address.offset(track.address())"
|
|
menuitem "Rm from Stack Cov" "TASK.STK.RM address.offset(track.address())"
|
|
separator
|
|
menuitem "[:dump]Dump task entry"
|
|
(
|
|
PRIVATE &address
|
|
&address=address.offset(track.address())
|
|
Data.dump &address /l /dialog
|
|
)
|
|
)
|
|
|
|
|
|
menu "task.mod"
|
|
(
|
|
default
|
|
;menuitem "Display detailed"
|
|
;(
|
|
; &address=address.offset(track.address())
|
|
; TASK.MODule &address
|
|
;)
|
|
menuitem "[:var]Display module struct"
|
|
(
|
|
PRIVATE &address
|
|
&address=address.offset(track.address())
|
|
Var.View %m %s (struct module*)&address
|
|
)
|
|
separator
|
|
menuitem "[:symbols]Load Module Symbols" "TASK.sYmbol.LOADMod track.address()"
|
|
menuitem "[:symbols]Delete Module Symbols" "TASK.sYmbol.DELeteMod track.address()"
|
|
separator
|
|
menuitem "[:dump]Dump module entry"
|
|
(
|
|
PRIVATE &address
|
|
&address=address.offset(track.address())
|
|
Data.dump &address /l /dialog
|
|
)
|
|
)
|
|
|
|
|
|
menu "task.fs.t"
|
|
(
|
|
default
|
|
menuitem "[:objects]Display detailed"
|
|
(
|
|
PRIVATE &address
|
|
&address=address.offset(track.address())
|
|
TASK.FS.Types &address
|
|
)
|
|
menuitem "[:var]Display type struct"
|
|
(
|
|
PRIVATE &address
|
|
&address=address.offset(track.address())
|
|
Var.View %m %s (struct file_system_type*)&address
|
|
)
|
|
separator
|
|
menuitem "[:dump]Dump type entry"
|
|
(
|
|
PRIVATE &address
|
|
&address=address.offset(track.address())
|
|
Data.dump &address /l /dialog
|
|
)
|
|
)
|
|
|
|
|
|
menu "task.fs.md"
|
|
(
|
|
default
|
|
menuitem "[:objetcs]Display detailed"
|
|
(
|
|
PRIVATE &address
|
|
&address=address.offset(track.address())
|
|
TASK.FS.MountDevs &address
|
|
)
|
|
menuitem "[:var]Display superblock struct"
|
|
(
|
|
PRIVATE &address
|
|
&address=address.offset(track.address())
|
|
Var.View %m %s (struct super_block*)&address
|
|
)
|
|
separator
|
|
menuitem "[:dump]Dump superblock entry"
|
|
(
|
|
PRIVATE &address
|
|
&address=address.offset(track.address())
|
|
Data.dump &address /l /dialog
|
|
)
|
|
)
|
|
|
|
|
|
menu "task.fs.proc"
|
|
(
|
|
default
|
|
;menuitem "Display detailed"
|
|
;(
|
|
; &address=address.offset(track.address())
|
|
; TASK.FS.PROC &address
|
|
;)
|
|
menuitem "[:var]Display proc struct"
|
|
(
|
|
PRIVATE &address
|
|
&address=address.offset(track.address())
|
|
Var.View %m %s (struct proc_dir_entry*)&address
|
|
)
|
|
separator
|
|
menuitem "[:dump]Dump proc dir entry"
|
|
(
|
|
PRIVATE &address
|
|
&address=address.offset(track.address())
|
|
Data.dump &address /l /dialog
|
|
)
|
|
)
|
|
|
|
|
|
menu "task.fs.m"
|
|
(
|
|
default
|
|
;menuitem "Display detailed"
|
|
;(
|
|
; &address=address.offset(track.address())
|
|
; TASK.FS.Mount &address
|
|
;)
|
|
menuitem "[:var]Display mount struct"
|
|
(
|
|
PRIVATE &address
|
|
&address=address.offset(track.address())
|
|
Var.View %o %h %s (struct vfsmount*)&address
|
|
)
|
|
separator
|
|
menuitem "[:dump]Dump mount entry"
|
|
(
|
|
PRIVATE &address
|
|
&address=address.offset(track.address())
|
|
Data.dump &address /l /dialog
|
|
)
|
|
)
|
|
|
|
|
|
menu "task.w"
|
|
(
|
|
default
|
|
menuitem "[:objetcs]Display Process"
|
|
(
|
|
PRIVATE &address
|
|
&address=address.offset(track.address())
|
|
TASK.DTask &address
|
|
)
|
|
menuitem "[:remove]Delete from List" "TASK.Watch.DELete track.address()"
|
|
)
|
|
|
|
ADD
|
|
; Buttons for TASK.PS
|
|
BUTTONS "task.ps"
|
|
(
|
|
MENUITEM "CONFIG"
|
|
(
|
|
DIALOG.view
|
|
(&+
|
|
HEADER "TASK.PS.CONFIG"
|
|
|
|
POS 0. 0. 9. 12.
|
|
BOX "Sort"
|
|
POS 1. 1. 7. 1.
|
|
s.off: CHOOSEBOX "OFF" "TASK.PS.SORT OFF"
|
|
POS 1. 2. 7. 1.
|
|
s.magic: CHOOSEBOX "magic" "TASK.PS.SORT MAGIC"
|
|
POS 1. 3. 7. 1.
|
|
s.pid: CHOOSEBOX "pid" "TASK.PS.SORT PID"
|
|
POS 1. 4. 7. 1.
|
|
s.cmd: CHOOSEBOX "cmd" "TASK.PS.SORT CMD"
|
|
POS 1. 5. 7. 1.
|
|
s.mem: CHOOSEBOX "mem" "TASK.PS.SORT MEM"
|
|
POS 1. 6. 7. 1.
|
|
s.cpu: CHOOSEBOX "%cpu" "TASK.PS.SORT PCPU"
|
|
|
|
POS 10. 0. 40. 12.
|
|
BOX ""
|
|
POS 10. 0. 12. 12.
|
|
BOX "available"
|
|
POS 30. 0. 12. 12.
|
|
BOX "selected"
|
|
POS 11. 1. 10. 10.
|
|
avail: LISTBOX "magic,pid,cmd"
|
|
(
|
|
PRIVATE &sAddItem
|
|
&sAddItem=DIALOG.STRing(avail)
|
|
TASK.PS.ADD &sAddItem
|
|
DIALOG.Set avail "" TASK.PS.AVAILABLE()
|
|
DIALOG.Set selec "&sAddItem" TASK.PS.SELECTED()
|
|
)
|
|
POS 31. 1. 10. 10.
|
|
selec: LISTBOX "magic,pid,cmd"
|
|
(
|
|
PRIVATE &sDelItem
|
|
&sDelItem=DIALOG.STRing(selec)
|
|
TASK.PS.DELete &sDelItem
|
|
DIALOG.Set avail "&sDelItem" TASK.PS.AVAILABLE()
|
|
DIALOG.Set selec "" TASK.PS.SELECTED()
|
|
)
|
|
POS 23. 4. 6. 1.
|
|
BUTTON "->"
|
|
(
|
|
PRIVATE &sAddItem
|
|
&sAddItem=DIALOG.STRing(avail)
|
|
IF "&sAddItem"!=""
|
|
(
|
|
TASK.PS.ADD &sAddItem
|
|
DIALOG.Set avail "" TASK.PS.AVAILABLE()
|
|
DIALOG.Set selec "&sAddItem" TASK.PS.SELECTED()
|
|
)
|
|
)
|
|
POS 23. 6. 6. 1.
|
|
BUTTON "<-"
|
|
(
|
|
PRIVATE &sDelItem
|
|
&sDelItem=DIALOG.STRing(selec)
|
|
IF "&sDelItem"!=""
|
|
(
|
|
TASK.PS.DELete &sDelItem
|
|
DIALOG.Set avail "&sDelItem" TASK.PS.AVAILABLE()
|
|
DIALOG.Set selec "" TASK.PS.SELECTED()
|
|
)
|
|
)
|
|
POS 43. 4. 6. 1.
|
|
BUTTON "up"
|
|
(
|
|
PRIVATE &sItem
|
|
&sItem=DIALOG.STRing(selec)
|
|
IF "&sItem"!=""
|
|
(
|
|
TASK.PS.UP &sItem
|
|
DIALOG.Set selec "&sItem" TASK.PS.SELECTED()
|
|
)
|
|
)
|
|
POS 43. 6. 6. 1.
|
|
BUTTON "down"
|
|
(
|
|
PRIVATE &sItem
|
|
&sItem=DIALOG.STRing(selec)
|
|
IF "&sItem"!=""
|
|
(
|
|
TASK.PS.DOWN &sItem
|
|
DIALOG.Set selec "&sItem" TASK.PS.SELECTED()
|
|
)
|
|
)
|
|
|
|
POS 1. 12. 10. 1.
|
|
thr: CHECKBOX "show threads"
|
|
(
|
|
IF DIALOG.BOOLEAN(thr)
|
|
TASK.PS.THREADS ON
|
|
ELSE
|
|
TASK.PS.THREADS OFF
|
|
)
|
|
)
|
|
PRIVATE &sSort
|
|
&sSort=TASK.PS.SORT()
|
|
DIALOG.Set s.&sSort
|
|
|
|
DIALOG.Set avail "" TASK.PS.AVAILABLE()
|
|
DIALOG.Set selec "" TASK.PS.SELECTED()
|
|
|
|
DIALOG.Set thr TASK.PS.THREADS()!=0
|
|
|
|
ENDDO
|
|
)
|
|
)
|
|
|
|
ADD
|
|
; Buttons for TASK.DMESG
|
|
BUTTONS "task.dmesg"
|
|
(
|
|
MENUITEM "[:objects]Detailed" "TASK.DMESG /COLOR /DETAILED"
|
|
MENUITEM "[:export]Export"
|
|
(
|
|
PRIVATE &sLogfile &nLevels &nFacilities &bDetailed &bUseColors
|
|
|
|
&sLogfile=OS.FILE.JOINPATH(OS.PWD(),"dmesg.txt")
|
|
|
|
&nLevels=TASK.DMESG.VALUES(0)
|
|
&nFacilities=TASK.DMESG.VALUES(1)
|
|
&bDetailed=(TASK.DMESG.VALUES(2)&0x1)!=0
|
|
&bUseColors=(TASK.DMESG.VALUES(2)&0x2)!=0
|
|
|
|
DIALOG
|
|
(
|
|
HEADER "Export kernel log"
|
|
POS 0. 0. 40. 4.
|
|
BOX "File name"
|
|
POS 1. 1. 38. 1.
|
|
LOGFILE: EDIT "" ""
|
|
POS 1. 2. 38. 1
|
|
PRTYPE: PULLDOWN "ASCII,XHTML"
|
|
(
|
|
PRIVATE &sLogfile
|
|
&sLogfile=DIALOG.STRing(LOGFILE)
|
|
&sLogfile=STRing.CUT("&sLogfile",-STRing.LENgth(OS.FILE.EXTENSION("&sLogfile")))
|
|
IF DIALOG.STRING(PRTYPE)=="ASCII"
|
|
&sLogfile="&sLogfile"+".txt"
|
|
ELSE
|
|
&sLogfile="&sLogfile"+".html"
|
|
DIALOG.SET LOGFILE "&sLogfile"
|
|
RETURN
|
|
)
|
|
|
|
POS 0. 4. 19. 10.
|
|
BOX "Log levels"
|
|
POS 1. 5. 10. 1.
|
|
L0: CHECKBOX "0-emerg" ""
|
|
POS 1. 6. 10. 1.
|
|
L1: CHECKBOX "1-alert" ""
|
|
POS 1. 7. 10. 1.
|
|
L2: CHECKBOX "2-crit" ""
|
|
POS 1. 8. 10. 1.
|
|
L3: CHECKBOX "3-err" ""
|
|
POS 1. 9. 10. 1.
|
|
L4: CHECKBOX "4-warn" ""
|
|
POS 1. 10. 10. 1.
|
|
L5: CHECKBOX "5-notice" ""
|
|
POS 1. 11. 10. 1.
|
|
L6: CHECKBOX "6-info" ""
|
|
POS 1. 12. 10. 1.
|
|
L7: CHECKBOX "7-debug" ""
|
|
|
|
POS 20. 4. 20. 10.
|
|
BOX "Log facilities"
|
|
POS 21. 5. 10. 1.
|
|
F0: CHECKBOX "0-kern" ""
|
|
POS 21. 6. 10. 1.
|
|
F1: CHECKBOX "1-user" ""
|
|
POS 21. 7. 10. 1.
|
|
F2: CHECKBOX "2-mail" ""
|
|
POS 21. 8. 10. 1.
|
|
F3: CHECKBOX "3-daemon" ""
|
|
POS 21. 9. 10. 1.
|
|
F4: CHECKBOX "4-auth" ""
|
|
POS 21. 10. 10. 1.
|
|
F5: CHECKBOX "5-syslog" ""
|
|
POS 21. 11. 10. 1.
|
|
F6: CHECKBOX "6-lpr" ""
|
|
POS 21. 12. 10. 1.
|
|
F7: CHECKBOX "7-news" ""
|
|
|
|
POS 1. 14. 38. 1.
|
|
DET: CHECKBOX "decode facility and level to readable string" ""
|
|
|
|
POS 10. 16. 7. 1.
|
|
BUTTON "Save"
|
|
(
|
|
PRIVATE &i &sParams &sLogfile &sFileType &nLevels &nFacilities &nSize
|
|
&sParams=""
|
|
&i=0.
|
|
&nLevels=0x0
|
|
&nFacilities=0x0
|
|
RePeaT 8.
|
|
(
|
|
PRIVATE &sLabel
|
|
SPRINTF &sLabel "L%u" &i
|
|
IF DIALOG.BOOLEAN(&sLabel)
|
|
&nLevels=&nLevels|(0x1<<(&i+1.))
|
|
SPRINTF &sLabel "F%u" &i
|
|
IF DIALOG.BOOLEAN(&sLabel)
|
|
&nFacilities=&nFacilities|(0x1<<(&i+1.))
|
|
&i=&i+1.
|
|
)
|
|
|
|
IF (&nLevels!=0x1fe)&&(&nLevels!=0)
|
|
(
|
|
&i=0.
|
|
RePeaT 8.
|
|
(
|
|
IF (&nLevels&(0x1<<(&i+1.)))!=0
|
|
SPRINTF &sParams "%s /Level %u" "&sParams" &i
|
|
&i=&i+1.
|
|
)
|
|
)
|
|
|
|
IF (&nFacilities!=0x1fe)&&(&nFacilities!=0)
|
|
(
|
|
&i=0.
|
|
RePeaT 8.
|
|
(
|
|
IF (&nFacilities&(0x1<<(&i+1.)))!=0
|
|
SPRINTF &sParams "%s /Facility %u" "&sParams" &i
|
|
&i=&i+1.
|
|
)
|
|
)
|
|
|
|
IF DIALOG.BOOLEAN(DET)
|
|
&sParams="&sParams"+" /DETAILED"
|
|
|
|
&nSize=TASK.DMESG.VALUES(3)
|
|
&sFileType=DIALOG.STRing(PRTYPE)
|
|
&sLogfile=DIALOG.STRing(LOGFILE)
|
|
PRinter.FileType &sFileType
|
|
PRinter.File &sLogfile
|
|
IF &nSize>2000.
|
|
EXT.MaxVSize &nSize+10.
|
|
WinPrint.TASK.DMESG &sParams
|
|
IF &nSize>2000.
|
|
EXT.MaxVSize 2000.
|
|
PRINT "Kernel log saved to &sLogfile"
|
|
DIALOG.END
|
|
)
|
|
POS 20. 16. 7. 1.
|
|
BUTTON "Cancel" "DIALOG.END"
|
|
)
|
|
DIALOG.SET LOGFILE "&sLogfile"
|
|
PRIVATE &i
|
|
&i=0.
|
|
RePeaT 8.
|
|
(
|
|
PRIVATE &sLabel
|
|
SPRINTF &sLabel "L%u" &i
|
|
DIALOG.SET &sLabel (&nLevels&(1<<(&i+1.)))!=0
|
|
SPRINTF &sLabel "F%u" &i
|
|
DIALOG.SET &sLabel (&nFacilities&(1<<(&i+1.)))!=0
|
|
&i=&i+1.
|
|
)
|
|
DIALOG.SET DET &bDetailed
|
|
ENDDO
|
|
)
|
|
)
|
|
)
|