; -------------------------------------------------------------------------------- ; @Props: NoMetaTags, NoIndex ; @Copyright: (C) 1989-2014 Lauterbach GmbH, licensed for use with TRACE32(R) only ; -------------------------------------------------------------------------------- ; $Id: diaetmdata.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="BYTE" &closewin=0. print "" dialog ( header "Define Data" ; ----- Definition --------------------------------------------------------------- pos 1. 0.5 6. text "Type:" pos 7. 0.5 8. T: PULLDOWN "BYTE,WORD,LONG" "gosub InitType" ;PULLDOWN "B0,W0,LO,B,W,L" "" pos 16. 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.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 6. MP: PULLDOWN "BIN,HEX" "gosub InitMask" pos 23. 5.5 30. ME: EDIT "" "" pos 39. 8. 6. BUTTON "CLEAR" "gosub InitDialogData BYTE" pos 47. 8. 6. DEFBUTTON "OK" "jumpto okcloseD" CLOSE "jumpto wincloseD" ) gosub InitDialogData &stype &sval backloopD: &closewin=0. &subdialog=2. stop okcloseD: &closewin=1. &stype=dialog.string(T) wincloseD: 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 single value wrong defined!" goto backloopD ) if "&sval"=="TOOBIG" goto backloopD ) else if "&sval"!="" ( gosub CheckValDec &sval &stype ENTRY &sval if "&sval"=="" ( LOCAL &btype &sval=dialog.string(VE) on error gosub goto backloopD EVAL &sval &btype=eval.type() if &btype!=&DBinary &sval="" ) if "&sval"=="" ( print %ERROR "Decimal/bin value wrong defined!" goto backloopD ) if "&sval"=="TOOBIG" goto backloopD ) ) else ( LOCAL &smtype &sval=dialog.string(ME) &smtype=dialog.string(MP) if "&sval"=="" ( print %ERROR "No value defined!" goto backloopD ) gosub CheckMask &sval &smtype ENTRY &sval if "&sval"=="" goto backloopD ) dialog.end &subdialog=0. ENDDO "&sval" "&stype" InitDialogData: LOCAl &val &type ENTRY &type &val 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" ) 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 ME "" dialog.disable ME dialog.disable MP dialog.set HEX RETURN InitMask: LOCAL &stype dialog.set VE "" dialog.disable VE 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"=="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"=="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.M) ( LOCAL &stype &stype=dialog.string(T) if dialog.string(MP)=="BIN" ( if "&stype"=="BYTE" dialog.set ME "0yXXXXXXXX" else if "&stype"=="WORD" dialog.set ME "0yXXXXXXXXXXXXXXXX" else if "&stype"=="LONG" dialog.set ME "0yXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" ) else ( if "&stype"=="BYTE" dialog.set ME "0xXX" else if "&stype"=="WORD" dialog.set ME "0xXXXX" else if "&stype"=="LONG" 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="BYTE" gosub GetMaxDataVal &type ENTRY &max if &addr>&max ( &addr="&type"+" value is too big!" print %ERROR "&addr" &addr="TOOBIG" ) ) RETURN &addr 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"!="!" ( 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 ((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==&DAscii ( &x="&dval"+" no valid data value!" print %ERROR "&x" &dval="" ) else if &x!=&DBitmask&&&x!=&DString ( gosub GetMaxDataVal &dtype ENTRY &dmax if &dval>&dmax ( &x="&dval"+" larger 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=0xff else if "&type1"=="W" &smax=0xffff else if "&type1"=="L" &smax=0xffffffff ) RETURN &smax