; -------------------------------------------------------------------------------- ; @Props: NoMetaTags, NoIndex ; @Copyright: (C) 1989-2014 Lauterbach GmbH, licensed for use with TRACE32(R) only ; -------------------------------------------------------------------------------- ; $Id: diadata.cmm 7013 2014-04-25 11:16:47Z kjmal $ ; ----- Dialog Data -------------------------------------------------------------- LOCAL &DBoolean &DBinary &DHex &DInteger &DAscii &DString &DRange &DAddress &DARange &DTime &DTRange &DFloat &DNumeric &DIntNum &DBitmask &DEmpty LOCAL &closewin &sval &stype ENTRY &stype &sval &DBoolean=0x00000001 &DBinary=0x00000002 &DHex=0x00000004 &DInteger=0x00000008 &DFloat=0x00000010 &DAscii=0x00000020 &DIntNum=0x0000002E &DNumeric=0x0000003E &DString=0x00000040 &DRange=0x00000080 &DAddress=0x00000100 &DARange=0x00000200 &DTime=0x00000400 &DTRange=0x00000800 &DBitmask=0x00004000 &DEmpty=0x00008000 if "&stype"=="" &stype="B0" &closewin=0. print "" dialog ( header "Define Data" ; ----- Definition --------------------------------------------------------------- pos 1. 0.5 6. text "Type:" pos 7. 0.5 6. T: PULLDOWN A.DSEL() "gosub InitType" ;PULLDOWN "B0,W0,LO,B,W,L" "" pos 14. 0.5 15. HEX: CHECKBOX "all values HEX" "" pos 16.5 2. 11. text "Value" pos 1. 2. 14. 2.5 A.V: CHOOSEBOX "Single Value" "gosub InitValue" A.R: CHOOSEBOX "Range" "gosub InitRange" A.M: CHOOSEBOX "Mask" "gosub InitMask" pos 16. 3. 15. 1. VE: EDIT "" "" pos 16. 4.5 10. text "Value" pos 26. 4.5 10. text "Value" pos 16. 5.5 8. RE1: EDIT "" "" pos 24. 5.5 1.5 text " -" pos 26. 5.5 8. RE2: EDIT "" "" pos 16. 8. 6. MP: PULLDOWN "BIN,HEX" "gosub InitMask" pos 23. 8. 30. ME: EDIT "" "" pos 39. 9.5 6. BUTTON "CLEAR" "gosub InitDialogData" pos 47. 9.5 6. DEFBUTTON "OK" "jumpto okcloseDATA" CLOSE "jumpto wincloseDATA" ) gosub InitDialogData &sval backloopDATA: &closewin=0. &subdialog=2. stop okcloseDATA: &closewin=1. &stype=dialog.string(T) wincloseDATA: if &closewin==0. &sval=0. else if dialog.boolean(A.V) ( &sval=dialog.string(VE) if "&sval"!=""&&dialog.boolean(HEX) ( gosub CheckValHex &sval &stype ENTRY &sval if "&sval"=="" ( ;print %ERROR "Hex value wrong defined!" goto backloopDATA ) if "&sval"=="TOOBIG" goto backloopDATA ) else if "&sval"!="" ( gosub CheckValDec &sval &stype ENTRY &sval if "&sval"=="" ( LOCAL &dtype &sval=dialog.string(VE) on error gosub goto backloopDATA EVAL &sval &dtype=eval.type() if &dtype!=&DBinary &sval="" if "&sval"=="" ( &sval=dialog.string(VE) gosub CheckAscii &sval ENTRY &sval ) ) if "&sval"=="" ( print %ERROR "Decimal/bin/ascii value wrong defined!" goto backloopDATA ) if "&sval"=="TOOBIG" goto backloopDATA ) ) else if dialog.boolean(A.R) ( LOCAL &sval1 &sval2 &brange &brange="&stype" &sval1=dialog.string(RE1) &sval2=dialog.string(RE2) if "&sval1"!=""&&"&sval2"!="" ( if dialog.boolean(HEX) ( gosub CheckValHex &sval1 &brange ENTRY &sval1 gosub CheckValHex &sval2 &brange ENTRY &sval2 if "&sval1"==""||"&sval2"=="" ( print %ERROR "Range Hex value wrong defined!" goto backloopDATA ) if "&sval1"=="TOOBIG" goto backloopDATA if "&sval2"=="TOOBIG" goto backloopDATA ) else ( if "&sval1"!="" ( gosub CheckValDec &sval1 &brange ENTRY &sval1 if "&sval1"=="" ( LOCAL &dtype &sval1=dialog.string(RE1) on error gosub goto backloopDATA EVAL &sval1 &dtype=eval.type() if &dtype!=&DBinary &sval1="" if "&sval1"=="" ( gosub CheckAscii &sval1 ENTRY &sval1 ) ) if "&sval1"=="" ( print %ERROR "Range first Decimal/bin/ascii value wrong defined!" goto backloopDATA ) if "&sval1"=="TOOBIG" goto backloopDATA ) if "&sval2"!="" ( gosub CheckValDec &sval2 &brange ENTRY &sval2 if "&sval2"=="" ( LOCAL &dtype &sval2=dialog.string(RE2) on error gosub goto backloopDATA EVAL &sval2 &dtype=eval.type() if &dtype!=&DBinary &sval2="" if "&sval2"=="" ( gosub CheckAscii &sval2 ENTRY &sval2 ) ) if "&sval2"=="" ( print %ERROR "Range second Decimal/bin/ascii value wrong defined!" goto backloopDATA ) if "&sval2"=="TOOBIG" goto backloopDATA ) if "&sval1"==""&&"&sval2"=="" ( print %ERROR "No value defined!" goto backloopDATA ) );else HEX not checked if "&sval1"!=""&&"&sval2"!="" &sval="&sval1"+"--"+"&sval2" else if "&sval1"!="" &sval="&sval1" else if "&sval2"!="" &sval="&sval2" ) ) else ( LOCAL &smtype &sval=dialog.string(ME) &smtype=dialog.string(MP) if "&sval"!="" ( gosub CheckMask &sval &smtype ENTRY &sval ) ) ;if "&sval"=="" ; &sval=0. dialog.end &subdialog=0. ENDDO "&sval" "&stype" InitDialogData: LOCAL &val &type ENTRY &val &type="&stype" if "&val"=="" ( gosub InitValue dialog.set A.V dialog.set VE "" ) else ( LOCAL &hex &mtype &mask &min &max gosub GetValData &val &type ENTRY &hex &mtype &mask &min &max if &mask==0. ( if "&max"=="" ( dialog.set A.V gosub InitValue dialog.set VE "&min" ) else ( dialog.set A.R gosub InitRange dialog.set RE1 "&min" dialog.set RE2 "&max" ) if &hex!=0. dialog.set HEX else dialog.set HEX "0." ) else ( dialog.set A.M gosub InitMask if &mtype==0. ( dialog.set HEX "0." dialog.set MP "BIN" ) else ( dialog.set HEX dialog.set MP "HEX" ) dialog.set ME "&min" ) ) dialog.set T "&type" RETURN InitValue: dialog.enable VE dialog.set RE1 "" dialog.set RE2 "" dialog.disable RE1 dialog.disable RE2 dialog.set ME "" dialog.disable ME dialog.disable MP dialog.set HEX RETURN InitRange: dialog.set VE "" dialog.disable VE dialog.enable RE1 dialog.enable RE2 dialog.set ME "" dialog.disable ME dialog.disable MP dialog.set HEX RETURN InitMask: LOCAL &stype dialog.set VE "" dialog.disable VE dialog.set RE1 "" dialog.set RE2 "" dialog.disable RE1 dialog.disable RE2 dialog.enable ME dialog.enable MP &stype=dialog.string(T) if dialog.string(MP)=="BIN" ( dialog.set HEX "0." &stype=string.mid(dialog.string(T),0.,1.) if "&stype"=="B" dialog.set ME "0yXXXXXXXX" else if "&stype"=="T" dialog.set ME "0yXXXXXXXXXXXX" else if "&stype"=="W" dialog.set ME "0yXXXXXXXXXXXXXXXX" else if "&stype"=="L" dialog.set ME "0yXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" ) else ( dialog.set HEX &stype=string.mid(dialog.string(T),0.,1.) if "&stype"=="B" dialog.set ME "0xXX" else if "&stype"=="T" dialog.set ME "0xXXX" else if "&stype"=="W" dialog.set ME "0xXXXX" else if "&stype"=="L" dialog.set ME "0xXXXXXXXX" ) RETURN InitType: if dialog.boolean(A.V) ( LOCAL &sval &sval=dialog.string(VE) ) else if dialog.boolean(A.R) ( LOCAL &sval1 &sval2 &sval1=dialog.string(RE1) &sval2=dialog.string(RE2) ) else if dialog.boolean(A.M) ( LOCAL &stype &stype=dialog.string(T) if dialog.string(MP)=="BIN" ( if "&stype"=="B"||"&stype"=="B0"||"&stype"=="B1"||"&stype"=="B2"||"&stype"=="B3" dialog.set ME "0yXXXXXXXX" else if "&stype"=="T0"||"&stype"=="T1" dialog.set ME "0yXXXXXXXXXXXX" else if "&stype"=="W"||"&stype"=="W0"||"&stype"=="W1"||"&stype"=="W2" dialog.set ME "0yXXXXXXXXXXXXXXXX" else if "&stype"=="L"||"&stype"=="L0" dialog.set ME "0yXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" ) else ( if "&stype"=="B"||"&stype"=="B0"||"&stype"=="B1"||"&stype"=="B2"||"&stype"=="B3" dialog.set ME "0xXX" else if "&stype"=="T0"||"&stype"=="T1" dialog.set ME "0xXXX" else if "&stype"=="W"||"&stype"=="W0"||"&stype"=="W1"||"&stype"=="W2" dialog.set ME "0xXXXX" else if "&stype"=="L"||"&stype"=="L0" dialog.set ME "0xXXXXXXXX" ) ) RETURN CheckValDec: LOCAL &addr &type &x &pos &type1 &max ENTRY &addr &type on error gosub return EVAL &addr &x=eval.type() if &x!=&DInteger&&&x!=&DIntNum&&&x!=&DNumeric &addr="" if "&addr"!="" ( if "&type"=="" &type="B" gosub GetMaxDataVal &type ENTRY &max if &addr>&max ( &addr="&type"+" value is too big!" print %ERROR "&addr" &addr="TOOBIG" ) ) RETURN &addr CheckValHex: LOCAL &addr &type &x &pos &max ENTRY &addr &type on error gosub return EVAL &addr &x=eval.type() if &x!=&DHex &addr="" if "&addr"!="" ( if "&type"=="" &type="B" gosub GetMaxDataVal &type ENTRY &max if &addr>&max ( &addr="&type"+" value is too big!" print %ERROR "&addr" &addr="TOOBIG" ) ) RETURN &addr CheckAscii: LOCAL &val &p1 &pm &pe ENTRY &val &p1=string.mid("&val",0.,1.) &pe=string.mid("&val",2.,1.) if !("&p1"=="'"&&"&pe"=="'") ( &val="Value "+"&val"+" is no ascii character!" print %ERROR "&val" &val="TOOBIG" ) RETURN &val CheckMask: LOCAL &val &type &x &pos &pos2 &oy ENTRY &val &type &x=0. &pos=string.mid("&val",&x,1.) &oy=0. if "&type"=="BIN" ( &pos2=string.mid("&val",&x+1.,1.) if "&pos"=="0"&&("&pos2"=="y"||"&pos2"=="Y") ( &oy=1. &x=&x+2. &pos=string.mid("&val",&x,1.) ) while ("&pos"=="0"||"&pos"=="1"||"&pos"=="X"||"&pos"=="x")&&"&pos"!="!" ( &x=&x+1. &pos=string.mid("&val",&x,1.) ) ) else ( &pos2=string.mid("&val",&x+1.,1.) if "&pos"=="0"&&("&pos2"=="x"||"&pos2"=="X") ( &oy=1. &x=&x+2. &pos=string.mid("&val",&x,1.) ) while (("&pos">="0"&&"&pos"<="9")||"&pos"=="X"||"&pos"=="x"||"&pos"=="A"||"&pos"=="a"||"&pos"=="B"||"&pos"=="b"||"&pos"=="C"||"&pos"=="c"||"&pos"=="D"||"&pos"=="d"||"&pos"=="E"||"&pos"=="e"||"&pos"=="F"||"&pos"=="f")&&"&pos"!="" ( &x=&x+1. &pos=string.mid("&val",&x,1.) ) ) if ("&type"=="BIN"&&((radix()==0.&&"&pos"=="!")||("&pos"==""&&&oy==1.)))||("&type"=="HEX"&&"&pos"==""&&&oy==1.) &val="&val" else if "&type"=="BIN" ( print %ERROR "Value is no binary mask!" &val="" ) else if "&type"=="HEX" ( print %ERROR "Value is no hex mask!" &val="" ) RETURN &val GetValData: ; wenn die Funktion arbeitet sind die Werte bereits korret!!! LOCAL &val &type &hex &mask &mtype &min &max &pos &i &z &k &u &v &pos2 ENTRY &val &type gosub CheckData &val &type ENTRY &min if "&min"=="" RETURN &mask=0. &mtype=0. &k=0. &i=0. &pos=string.mid("&val",&i,1.) loop: &hex=0. &v=0. &pos2=string.mid("&val",&i+1.,1.) if "&pos"=="0"&&("&pos2"=="x"||"&pos2"=="X") ( &hex=1. &i=&i+1. ) if "&pos"=="0"&&("&pos2"=="y"||"&pos2"=="Y") ( &v=1. &i=&i+2. ) &z=0. &u=0. while "&pos"!="-"&&"&pos"!=""&&"&pos"!="!" ( if "&pos">"1"&&"&pos"<="9" &z=&z+1. else if "&pos">="0"&&"&pos"<="1" &v=&v+1. else if ("&pos">="a"&&"&pos"<="f")||("&pos">="A"&&"&pos"<="F") &hex=&hex+1. else if "&pos"=="x"||"&pos"=="X" &mask=&mask+1. &i=&i+1. &pos=string.mid("&val",&i,1.) ) if &k==0. ( LOCAL &tpos &tpos=string.mid("&val",&i-1.,1.) if "&tpos"=="'"||(&z==0.&&&hex==0.&&&v>0.)||(&z>0.&&&hex==0.) &hex=0. else if "&tpos"!="."&&&mask==0. &hex=1. &min=string.mid("&val",0.,&i) if "&pos"=="-"&&&i>0.&&&mask==0. ( if (&z+&v==&i)&&"&tpos"!="." &hex=1. &i=&i+1. &pos=string.mid("&val",&i,1.) if "&pos"=="-" ( &i=&i+1. &pos=string.mid("&val",&i,1.) ) &k=&i goto loop ) else if "&pos"=="-"&&&mask>0. ( &min="" &max="" ) else if ((radix()==0.&&"&pos"=="!")||((radix()==10.||radix()==16.)&&"&pos"==""))&&&z==0.&&&hex==0.&&&v!=0.&&&mask>0. ( &mtype=0. if "&pos"=="!" &min="0y"+"&min" ) else if "&pos"==""&&&hex>0.&&&mask>0.&&&z+&v+&hex+&mask==&i ( LOCAL &mpos &mpos=string.mid("&min",1.,1.) if radix()==10.&&"&mpos"!="x"&&"&mpos"!="X" &min="0x"+"&min" &mtype=1. ) else if "&pos"==""&&&i>0. &max="" ) else ( &i=&i-&k &max=string.mid("&val",&k,&i); &pos=string.mid("&val",&i-1.,1.) ) RETURN &hex &mtype &mask &min &max CheckData: LOCAL &dval &dtype &dmax &x ENTRY &dval &dtype on error gosub return EVAL &dval &x=eval.type() if &x==&DAddress||&x==&DARange||&x==&DEmpty||&x==&DTime||&x==&DTRange ( &x="&dval"+" no valid data value!" print %ERROR "&x" &dval="" ) else if &x!=&DBitmask&&&x!=&DAscii&&&x!=&DString ( gosub GetMaxDataVal &dtype ENTRY &dmax if &dval>&dmax ( &x="&dval"+" bigger than "+"&dmax"+" (maximum for "+"&dtype"+" )!" print %ERROR "&x" &dval="" ) ) RETURN &dval GetMaxDataVal: LOCAL &smax &type &type1 ENTRY &type if "&type"!="" ( &type1=string.mid("&type",0.,1.) if "&type1"=="B" &smax=255. else if "&type1"=="T" &smax=4095. else if "&type1"=="W" &smax=65535. else if "&type1"=="L" &smax=4.3e+9 ) else ( if A.CONFIG.HAC() &smax=65535. else &smax=5.5e+11 ) RETURN &smax