<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-31375541</id><updated>2011-12-15T03:36:16.540+01:00</updated><title type='text'>Hacking UnifAce</title><subtitle type='html'>Tips, Tricks for Compuware's Uniface 4GL RAD.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://nodebug.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31375541/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://nodebug.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Hertz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>25</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-31375541.post-8717718857831584337</id><published>2011-05-11T19:39:00.001+02:00</published><updated>2011-05-11T19:40:02.068+02:00</updated><title type='text'>Now where was I before I was so rudely interrupted...</title><content type='html'>Assuming it is safe to do so again, I'd like to tell of a very useful function that I so wish I had back in the mists of time when it was all chained polyservers and client assignment files.  &lt;br /&gt;&lt;br /&gt;Try this:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;putmess $assignments("FILES") &lt;/code&gt;&lt;br /&gt;&lt;br /&gt;or &lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;putmess $assignments("DRIVER_SETTINGS")&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;You get my drift.&lt;br /&gt;&lt;br /&gt;Please note: NO BEARDS WERE HARMED TO MAKE THIS BLOG POST.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-2646375246043932";
google_ad_width = 125;
google_ad_height = 125;
google_ad_format = "125x125_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;
&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31375541-8717718857831584337?l=nodebug.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31375541/posts/default/8717718857831584337'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31375541/posts/default/8717718857831584337'/><link rel='alternate' type='text/html' href='http://nodebug.blogspot.com/2011/05/now-where-was-i-before-i-was-so-rudely.html' title='Now where was I before I was so rudely interrupted...'/><author><name>Hertz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-31375541.post-116489679284035802</id><published>2006-11-30T15:26:00.000+01:00</published><updated>2006-11-30T15:26:33.283+01:00</updated><title type='text'></title><content type='html'>More hidden talents&lt;br /&gt;&lt;br /&gt;fieldsyntax ".&lt;$entname&gt;","YED,YPR,YDI"&lt;br /&gt;&lt;br /&gt;Applies to all.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-2646375246043932";
google_ad_width = 125;
google_ad_height = 125;
google_ad_format = "125x125_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;
&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31375541-116489679284035802?l=nodebug.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31375541/posts/default/116489679284035802'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31375541/posts/default/116489679284035802'/><link rel='alternate' type='text/html' href='http://nodebug.blogspot.com/2006/11/more-hidden-talents-fieldsyntax.html' title=''/><author><name>Hertz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-31375541.post-115928100271785907</id><published>2006-09-26T16:30:00.000+02:00</published><updated>2006-09-29T12:59:40.673+02:00</updated><title type='text'>More hidden talents.</title><content type='html'>The humble dropdownlist can display thumbnail images!  Just set the valrep representation as follows: &lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$valrep = "001=^U_UQTD_GPICKBUT·!Confused·;002=^U_FIELDUNDO·!Undo·;003=^I_SYNTAX·!Accept"&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;or even&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$valrep(comb) = "001=@tresjolie.bmp·!Angelina·;002=@bgates.bmp·!Bill·;003=@pinguin.bmp·!Linus"  &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The images are scaled to font size.  One could increase the number of lines, use a large font like MonoHuge and create really cool user logins.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-2646375246043932";
google_ad_width = 125;
google_ad_height = 125;
google_ad_format = "125x125_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;
&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31375541-115928100271785907?l=nodebug.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31375541/posts/default/115928100271785907'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31375541/posts/default/115928100271785907'/><link rel='alternate' type='text/html' href='http://nodebug.blogspot.com/2006/09/more-hidden-talents.html' title='More hidden talents.'/><author><name>Hertz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-31375541.post-115773278226312760</id><published>2006-09-08T18:26:00.000+02:00</published><updated>2006-09-09T10:32:59.033+02:00</updated><title type='text'>No comment</title><content type='html'>&lt;b&gt;Tip&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The default syntax highlighting colors of the RTF might not suit you.  You may prefer a smaller tabsize.  You may find keyword completion a source of aggravation.  You may want to hide some comments...? :/&lt;br /&gt;&lt;br /&gt;Surcease of suffering is at hand.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;[widgets]&lt;br /&gt;RichEdit=urichedit(font=MonoMedium;procbox=on;keywordcompletion=off;undolevels=200)&lt;br /&gt;&lt;br /&gt;[procbox]&lt;br /&gt;tabsize = 2&lt;br /&gt;text = 0,128,0&lt;br /&gt;comment = 255,255,255&lt;br /&gt;string = 255,128,0&lt;br /&gt;register = 0,0,255&lt;br /&gt;keyword = 255,0,255&lt;br /&gt;type = 0,128,255&lt;br /&gt;userdefined = 0,0,192&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-2646375246043932";
google_ad_width = 125;
google_ad_height = 125;
google_ad_format = "125x125_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;
&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31375541-115773278226312760?l=nodebug.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31375541/posts/default/115773278226312760'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31375541/posts/default/115773278226312760'/><link rel='alternate' type='text/html' href='http://nodebug.blogspot.com/2006/09/no-comment.html' title='No comment'/><author><name>Hertz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-31375541.post-115762815489238889</id><published>2006-09-07T13:22:00.000+02:00</published><updated>2006-09-07T13:45:20.143+02:00</updated><title type='text'>Hidden talents</title><content type='html'>Richedit and other widgets have properties not mentioned in documentation or default usys.ini file.  &lt;br /&gt;&lt;br /&gt;Amongst others, &lt;span style="font-weight:bold;"&gt;undolevels&lt;/span&gt; is used for setting the number of times you can undo edits in the richedit widget:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;RichEdit=urichedit(font=MonoMedium;procbox=on;undolevels=20)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Most widgets have the property &lt;span style="font-weight:bold;"&gt;dimmedbackcolor&lt;/span&gt; which prevents the text background being greyed when the field is dimmed, (if you like that sort of thing).&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-2646375246043932";
google_ad_width = 125;
google_ad_height = 125;
google_ad_format = "125x125_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;
&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31375541-115762815489238889?l=nodebug.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31375541/posts/default/115762815489238889'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31375541/posts/default/115762815489238889'/><link rel='alternate' type='text/html' href='http://nodebug.blogspot.com/2006/09/hidden-talents.html' title='Hidden talents'/><author><name>Hertz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-31375541.post-115655002119233024</id><published>2006-08-26T01:25:00.000+02:00</published><updated>2006-08-26T02:30:08.153+02:00</updated><title type='text'>Glue factories.</title><content type='html'>&lt;b&gt;Tip:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;I mentioned in the previous example of using a language other than Uniface to decode some data.  Uniface is a high level language but sometimes you need low level functionality.  Luckily, Uniface is extremely good at call-outs.  You could even embed and spawn some, say python (Dutch too, so it must be okay ;D):&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;if (runScript()="Goodbye Cruel World%%^")&lt;br /&gt;    apexit&lt;br /&gt;endif&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;entry runScript &lt;br /&gt;variables&lt;br /&gt;    any stdout&lt;br /&gt;endvariables&lt;br /&gt;&lt;br /&gt;filedump $script, "hello_world.py"&lt;br /&gt;activate "SYSTEM".COMMANDOUT("pythonw hello_world.py",stdout) &lt;br /&gt;$status = stdout&lt;br /&gt;&lt;br /&gt;script:blockdata +&lt;br /&gt;"""&lt;br /&gt;This example doesn't do anything worthwhile&lt;br /&gt;"""&lt;br /&gt;#Yeah right&lt;br /&gt;import icomp&lt;br /&gt;&lt;br /&gt;#Do something&lt;br /&gt;print "Goodbye Cruel World"&lt;br /&gt;+&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Unfortunately, you can't use string interpolation within blockdata segments but precompiler constants are substituted and you can pass arguments on the command line.&lt;br /&gt;&lt;br /&gt;But why embed? Simple:  All interface contracts are held internally and don't require negotiation exception handling.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-2646375246043932";
google_ad_width = 125;
google_ad_height = 125;
google_ad_format = "125x125_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;
&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31375541-115655002119233024?l=nodebug.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31375541/posts/default/115655002119233024'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31375541/posts/default/115655002119233024'/><link rel='alternate' type='text/html' href='http://nodebug.blogspot.com/2006/08/glue-factories.html' title='Glue factories.'/><author><name>Hertz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-31375541.post-115643455645639519</id><published>2006-08-24T17:49:00.000+02:00</published><updated>2006-08-26T00:10:29.540+02:00</updated><title type='text'>Object example.</title><content type='html'>The IDF default export file format is .trx rather than my personal preference .xml format.  I can read xml, trx less so.  It seems a trivial thing but it is something you can correct and it provides a nice excercise on hacking uniface besides.  (Don't worry there is a less scary way too).&lt;br /&gt;&lt;br /&gt;The 'Convert Data' utility is one of Uniface's best innovations and your friend whether you are loading and unloading test data, migrating data or just mucking about with Uniface internals.  &lt;br /&gt;&lt;br /&gt;Export UOBJ.TEXT using the IDF form or from the command line.  You may notice that some of the object entries are not your own.  One in particular looks like this (almost):&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;UOBJ:UCSUB&amp;gt;S&amp;lt;/UOBJ:UCSUB&amp;gt;&lt;br /&gt;&amp;lt;UOBJ:UCLABEL&amp;gt;SYSTEM&amp;lt;/UOBJ:UCLABEL&amp;gt;&lt;br /&gt;&amp;lt;UOBJ:UCVAR&amp;gt;USYS&amp;lt;/UOBJ:UCVAR&amp;gt;&lt;br /&gt;&amp;lt;UOBJ:UCTYPE&amp;gt;S&amp;lt;/UOBJ:UCTYPE&amp;gt;&lt;br /&gt;&amp;lt;UOBJ:UCLASS&amp;gt;0&amp;lt;/UOBJ:UCLASS&amp;gt;&lt;br /&gt;&amp;lt;UOBJ:UCOBJECT&amp;gt;&amp;lt;BIN&gt;55555F534343495F444C4C3D1B55555F435553545F5....&lt;br /&gt;49523D46&amp;lt;/BIN&amp;gt;&amp;lt;/UOBJ:UCOBJECT&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;I modified the object code so that I can import it in order to set a particular encoded Uniface internal.  Decode or 'unhex' the string in your export file, using say java, python or a php script.  All have 'bin2ascii' modules suitable for the purpose (but not perl).  Take  care to remove (and later replace) &lt;/CR&gt; tags.  As XML and TRX share the same number of characters they should be at the same offset, (but it doesn't really matter).  &lt;br /&gt;&lt;br /&gt;Once decoded, mine looks like this (without carriage returns): &lt;br /&gt;&lt;pre&gt;&lt;br /&gt;UU_SCCI_DLL=·;UU_CUST_UUIMPO49=UUIMPO49·;UU_CUST_UUEXPO49=UUEXPO49·;&lt;br /&gt;UU_CUST_UUCLUS49=UUCLUS49·;UU_DEFEXPORT=TRX·;UU_PERMISSION=0·;&lt;br /&gt;UU_SCCI_AREA=·;UU_SCCI_LOG=·;UU_SCCI_PROJ=·;UU_SCCI_AUTO=F·;&lt;br /&gt;UU_SCCI_CHGPATH=T·;UU_SCCI_CHGPROJ=T·;UU_SCCI_GETVERSION=0·;&lt;br /&gt;UU_CLUSTERING=EXTN_CL=1·!·;EXTN_PR=·!·;EXTN_PO=.cmx·!·;EXTN_OP=1·!·;&lt;br /&gt;SPEC_CL=1·!·;SPEC_PR=·!·;SPEC_PO=.sgx·!·;SPEC_OP=1·!·;CONC_CL=1·!·;&lt;br /&gt;CONC_PR=·!·;CONC_PO=.amx·!·;APPL_CL=1·!·;APPL_PR=·!·;APPL_PO=.shx·!·;&lt;br /&gt;EINT_CL=2·!·;EINT_PR=·!·;EINT_PO=.eix·!·;INTT_CL=2·!·;INTT_PR=·!·;&lt;br /&gt;INTT_PO=.fix·!·;SYNT_CL=2·!·;SYNT_PR=·!·;SYNT_PO=.fsx·!·;LAYT_CL=2·!·;&lt;br /&gt;LAYT_PR=·!·;LAYT_PO=.flx·!·;FLDT_CL=2·!·;FLDT_PR=·!·;FLDT_PO=.ftx·!·;&lt;br /&gt;LIBR_CL=1·!·;LIBR_PR=·!·;LIBR_PO=.lbx·!·;LIBR_OP=0·!·;CPRC_CL=3·!·;CPRC_PR=·!·;&lt;br /&gt;CPRC_PO=.prx·!·;INCL_CL=3·!·;INCL_PR=·!·;INCL_PO=.ipx·!·;DEVC_CL=3·!·;&lt;br /&gt;DEVC_PR=·!·;DEVC_PO=.dtx·!·;TRAN_CL=3·!·;TRAN_PR=·!·;TRAN_PO=.ktx·!·;PANL_CL=3·!·;&lt;br /&gt;PANL_PR=·!·;PANL_PO=.pnx·!·;MESG_CL=3·!·;MESG_PR=·!·;MESG_PO=.msx·!·;GLYP_CL=3·!·;&lt;br /&gt;GLYP_PR=·!·;GLYP_PO=.glx·!·;MENU_CL=3·!·;MENU_PR=·!·;MENU_PO=.mnx·!·;GFMT_CL=3·!·;&lt;br /&gt;GFMT_PR=·!·;GFMT_PO=.fmx·!·;LANS_CL=5·!·;LANS_PR=·!·;LANS_PO=.lnx·!·;CREG_CL=3·!·;&lt;br /&gt;CREG_PR=·!·;CREG_PO=.vrx·!·;GCNT_CL=3·!·;GCNT_PR=·!·;GCNT_PO=.cnx·;&lt;br /&gt;UU_BPA_CLUS=CLUS100=0·!·;PRE100=·!·;POST100=.vpx·!·;CHECK100=F·!·;CLUS101=0·!·;&lt;br /&gt;PRE101=·!·;POST101=.npx·!·;CHECK101=F·!·;CLUS102=0·!·;PRE102=·!·;POST102=.pkx·!·;&lt;br /&gt;CLUS103=0·!·;PRE103=·!·;POST103=.pkx·!·;CLUS104=1·!·;PRE104=·!·;POST104=.cpx·!·;&lt;br /&gt;CLUS105=1·!·;PRE105=·!·;POST105=.orx·!·;ADDTPDIR=F&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Interesting.  The setting I'm after is UU_DEFEXPORT=TRX, change this to XML. Encode the string and replace in your UOBJ.XML.  Reimport it using the convert data utility as before.  Build your uobj.dol and check the export objects form in the IDF.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-2646375246043932";
google_ad_width = 125;
google_ad_height = 125;
google_ad_format = "125x125_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;
&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31375541-115643455645639519?l=nodebug.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31375541/posts/default/115643455645639519'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31375541/posts/default/115643455645639519'/><link rel='alternate' type='text/html' href='http://nodebug.blogspot.com/2006/08/object-example.html' title='Object example.'/><author><name>Hertz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-31375541.post-115583528709021488</id><published>2006-08-17T19:21:00.002+02:00</published><updated>2011-05-11T19:44:26.819+02:00</updated><title type='text'>Identity crisis solved</title><content type='html'>In the past, and it irked only the most pedantic, there were uniface commands which were proc but should have been functions.  I prefer:&lt;br /&gt;&lt;pre&gt;if ($length(PASSWD) &lt; 8) message/warning "That's not very secure is it?"&lt;br /&gt;&lt;/pre&gt;to:&lt;pre&gt;length PASSWD&lt;br /&gt;if ($result &lt; 8) message/warning "That's not very secure is it?"&lt;br /&gt;&lt;/pre&gt;It just scans (pun intended) better for me - is more intuitive I find.  Functions are more amenable for usage in runtime coding (see previous tip) and $result is preserved too.  I like to combine $item and $lfileproperties.  Some others:&lt;pre&gt;$length&lt;br /&gt;$stripattributes&lt;br /&gt;$bold&lt;br /&gt;$italic&lt;br /&gt;$underline&lt;br /&gt;$displaylength&lt;br /&gt;$addmonths&lt;br /&gt;$statement&lt;br /&gt;$lfileexists&lt;br /&gt;$ldirlist&lt;br /&gt;$convertpath&lt;br /&gt;$ldir&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-2646375246043932";
google_ad_width = 125;
google_ad_height = 125;
google_ad_format = "125x125_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;
&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31375541-115583528709021488?l=nodebug.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31375541/posts/default/115583528709021488'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31375541/posts/default/115583528709021488'/><link rel='alternate' type='text/html' href='http://nodebug.blogspot.com/2006/08/identity-crisis-solved.html' title='Identity crisis solved'/><author><name>Hertz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-31375541.post-115583469559246071</id><published>2006-08-17T19:11:00.000+02:00</published><updated>2006-08-17T22:58:16.293+02:00</updated><title type='text'>Uniface Rules...</title><content type='html'>Even end-users can have a go at coding uniface with expressions and conditions but even I can't think of a situation where you would need to reverse some compiled proc.  Still here's how:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;proccompile/statement "temp1 = temp2 * 9 / 5 + 32"&lt;br /&gt;code = $result&lt;br /&gt;test = $decompile(code)&lt;br /&gt;; test = "temp1 = temp2 * 9 / 5 + 32"&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Compiled proc looks like the output of $proccontext() with "temp1 = temp2 * 9 / 5 + 32" appended to the end anyway.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-2646375246043932";
google_ad_width = 125;
google_ad_height = 125;
google_ad_format = "125x125_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;
&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31375541-115583469559246071?l=nodebug.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31375541/posts/default/115583469559246071'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31375541/posts/default/115583469559246071'/><link rel='alternate' type='text/html' href='http://nodebug.blogspot.com/2006/08/uniface-rules.html' title='Uniface Rules...'/><author><name>Hertz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-31375541.post-115531380011331248</id><published>2006-08-11T18:30:00.000+02:00</published><updated>2006-08-14T22:25:50.746+02:00</updated><title type='text'>Search me...</title><content type='html'>Both the $scan function and scan procedure are limited to shorter strings.  Fortunately for those of us wishing to extend the IDF to automate some menial tasks, the "UUSTRSEARCH" function call allows you to search larger strings and returns the results in a nice list with line and character positions: The results are ready to be displayed in a tree.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;   He sports a beard.&lt;br /&gt;He wears a hat.&lt;br /&gt;  Ted has a beard.&lt;br /&gt;&lt;br /&gt;...1·!·;17·!·;beard·!·;   He sports a beard·;&lt;br /&gt;3·!·;14·!·;beard·!·;  Ted has a beard.·;...  &lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;As usual the highest registers are used as parameters, in this case, to point to some component fields on which to act.  &lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$97 = "SEARCH.DUMMY"&lt;br /&gt;$98 = "LTOB.DUMMY"&lt;br /&gt;$99 = "HITLIST.DUMMY"&lt;br /&gt;perform "UUSTRSEARCH"&lt;br /&gt;if ($status &gt; 0)&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;For some reason, the character position is over by 2.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-2646375246043932";
google_ad_width = 125;
google_ad_height = 125;
google_ad_format = "125x125_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;
&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31375541-115531380011331248?l=nodebug.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31375541/posts/default/115531380011331248'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31375541/posts/default/115531380011331248'/><link rel='alternate' type='text/html' href='http://nodebug.blogspot.com/2006/08/search-me.html' title='Search me...'/><author><name>Hertz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-31375541.post-115522058917297253</id><published>2006-08-10T16:36:00.000+02:00</published><updated>2006-08-10T21:33:11.533+02:00</updated><title type='text'>The Mark Of The Beast</title><content type='html'>Some people may have noticed that the Richedit widget doesn't appear in the IDF even though a logical mapping exists in the [widgets] section of the .ini file.  This .ini section and setting remedies this situation.  &lt;br /&gt;&lt;pre&gt;&lt;br /&gt;[developer]&lt;br /&gt;urichedit = 666&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-2646375246043932";
google_ad_width = 125;
google_ad_height = 125;
google_ad_format = "125x125_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;
&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31375541-115522058917297253?l=nodebug.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31375541/posts/default/115522058917297253'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31375541/posts/default/115522058917297253'/><link rel='alternate' type='text/html' href='http://nodebug.blogspot.com/2006/08/mark-of-beast.html' title='The Mark Of The Beast'/><author><name>Hertz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-31375541.post-115516083109661526</id><published>2006-08-09T23:46:00.000+02:00</published><updated>2006-08-10T01:07:39.483+02:00</updated><title type='text'>Trust me, I am the doctor.</title><content type='html'>Adrenalin junkies will import &lt;a href=" http://www.google.com/base/a/1143177/D408825349651384060"&gt;this file&lt;/a&gt; into their Uniface 8 development environment, make the .dol and watch their development team colleagues freak out.  It moves the Additional menu to the File menu of the component editor (and that nasty 'Create Shortcut' out of my way).  Alternatively, the more timid can try it out in a local sandbox first.  &lt;br /&gt;&lt;br /&gt;To undo the effect, clean UOBJ.TEXT and rebuild.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-2646375246043932";
google_ad_width = 125;
google_ad_height = 125;
google_ad_format = "125x125_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;
&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31375541-115516083109661526?l=nodebug.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31375541/posts/default/115516083109661526'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31375541/posts/default/115516083109661526'/><link rel='alternate' type='text/html' href='http://nodebug.blogspot.com/2006/08/trust-me-i-am-doctor.html' title='Trust me, I am the doctor.'/><author><name>Hertz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-31375541.post-115513324047156033</id><published>2006-08-09T16:20:00.000+02:00</published><updated>2006-08-09T23:45:27.673+02:00</updated><title type='text'>XSLT Processing.</title><content type='html'>&lt;b&gt;Tip:Transform XML&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;activate "USYSXSLT"."XMLTRANSFORM"( XMLDATA , XSLFILEPATH , "" , XMLDONE , XMLERROR , XMLERRINFO ) &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This is a callout to the java component used by the IDF.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-2646375246043932";
google_ad_width = 125;
google_ad_height = 125;
google_ad_format = "125x125_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;
&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31375541-115513324047156033?l=nodebug.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31375541/posts/default/115513324047156033'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31375541/posts/default/115513324047156033'/><link rel='alternate' type='text/html' href='http://nodebug.blogspot.com/2006/08/xslt-processing.html' title='XSLT Processing.'/><author><name>Hertz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-31375541.post-115505692894555075</id><published>2006-08-08T19:08:00.000+02:00</published><updated>2006-08-09T16:17:56.920+02:00</updated><title type='text'>Enhanced Trigger Editor functions</title><content type='html'>If you do want to add some enhanced trigger editor function to your Additional menu, you will need to be able to manipulate the urichedit widget.  Code should be inserted using $procinsert documented earlier.  The statements' purpose and usage are self-evident:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Get the tabsize&lt;/b&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;activate "URICHEDIT"."UGETTABSIZE"( "PROC.DUMMY0" , TABSIZE ) &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Moving the cursor about&lt;/b&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;activate "URICHEDIT"."UGETCURSORPOS"( "PROC.DUMMY0" , XPOS , YPOS ) &lt;br /&gt;activate "URICHEDIT"."UGOTOLINE"( "PROC.DUMMY0" , YPOS , XPOS ) &lt;br /&gt;activate "URICHEDIT"."UOPERSETCURSOR"( "PROC.DUMMY0" , OPERATIONNAME ) &lt;br /&gt;activate "URICHEDIT"."UENTRYSETCURSOR"( "PROC.DUMMY0" , PROCNAME ) &lt;br /&gt;activate "URICHEDIT"."UTRIGGERSETCURSOR"( "PROC.DUMMY0" , TRIGGERNAME ) &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Selecting code&lt;/b&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;activate "URICHEDIT"."USELECTALL"( "PROC.DUMMY0" ) &lt;br /&gt;&lt;br /&gt;activate "URICHEDIT"."USELECTDATA"( "PROC.DUMMY0" ) &lt;br /&gt;BUFFER = $selblk&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Inserting data&lt;/b&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;activate "URICHEDIT"."UINSERTDATA"( "PROC.DUMMY0", DATA ) &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Returns a help topic keyword depending on your cursor position&lt;/b&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;activate "URICHEDIT"."UOPERHELP"( "PROC.DUMMY0" , KEYWORD ) &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The widget also supports the following additional macros:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;macro "^FIELDREDO"&lt;br /&gt;macro "^FIELDUNDO"&lt;br /&gt;macro "^FINDREPLACE"&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-2646375246043932";
google_ad_width = 125;
google_ad_height = 125;
google_ad_format = "125x125_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;
&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31375541-115505692894555075?l=nodebug.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31375541/posts/default/115505692894555075'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31375541/posts/default/115505692894555075'/><link rel='alternate' type='text/html' href='http://nodebug.blogspot.com/2006/08/enhanced-trigger-editor-functions.html' title='Enhanced Trigger Editor functions'/><author><name>Hertz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-31375541.post-115455917222444631</id><published>2006-08-03T00:18:00.000+02:00</published><updated>2006-08-09T22:52:07.896+02:00</updated><title type='text'>User definable labels - why?</title><content type='html'>The apparent desirability of user-definable field labels for one always surprises me. &lt;br /&gt;&lt;br /&gt;So as the label frametype value is not amendable at runtime, what to do?  I'm sure there are a plethora of solutions available, two are:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;   &lt;li&gt;Hyperlink&lt;/li&gt;&lt;br /&gt;   &lt;li&gt;Drag &amp; Drop Label&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Hyperlinks make good dynamic labels, except they do present a funny finger cursor on mouseover.  You might want to detail on the field anyway in order maintain the value.  Is possible of course, to use the $properties / $fieldproperties to define the appearance at runtime, but as you'll want this behavior as default - amend the widgets section of your ini file - copy the Hyperlink - uhyperlink logical to physical widget mapping and create a new, say, DynaLabel widget line. Set the font property to Label to make it look like a label and get rid of the underscore.  Set Transparency to true.  Make sure it appears on your tool palette in the IDF.  (This is a tip in itself.  You can do this for the urichedit widget too for instance - if you'd like an editbox with features like text undo &amp; redo, amongst others.  There is another .ini setting required in order to see the mapping appear in the IDF.  See the code of the last tip for some urichedit operations.  This will be documented fully in due course).  &lt;br /&gt;The Drag &amp; Drop widget also has a dynamic label, except you have to paint the label and its drag well which is a real pain as you have to dim the hidden widget to dim your label.  (This technique is used in the IDF on some model definition components, but to be fair there was no hyperlink available then). &lt;br /&gt;&lt;br /&gt;Set the label by setting the label property of the drag &amp; drop field.  Now every form you have can have dynamic field labels - great. :/&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-2646375246043932";
google_ad_width = 125;
google_ad_height = 125;
google_ad_format = "125x125_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;
&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31375541-115455917222444631?l=nodebug.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31375541/posts/default/115455917222444631'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31375541/posts/default/115455917222444631'/><link rel='alternate' type='text/html' href='http://nodebug.blogspot.com/2006/08/user-definable-labels-why.html' title='User definable labels - why?'/><author><name>Hertz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-31375541.post-115447128251122188</id><published>2006-08-02T00:27:00.000+02:00</published><updated>2006-08-02T23:45:03.533+02:00</updated><title type='text'>If you want something done...</title><content type='html'>&lt;b&gt;Tip: The IDF is extensible&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;No big secret:The IDF/UDE can be extended by adding your own custom tools to the ADDITIONAL menu.  This can be anything - search/replace tool, checking version control or... sorting a trigger? =0&lt;br /&gt;&lt;br /&gt;I actually do use this, even though it is quick and dirty.  Nevertheless, no warranty is expressed or should be implied, suffice it to say that version control is just common sense (Watch your includes and comments!) and that it is of dubious utility except to those pendantic enough to care about such trivialities.  It could easily be adapted to do something useful.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;if ($componentname="UUEXTN23")&lt;br /&gt;    if ($CURTRIG$ = "LPMX" | $CURTRIG$ = "LPME" | $CURTRIG$ = "LPMF")&lt;br /&gt;        call SORT_TRIGGER("entry")&lt;br /&gt;        message/hint "Just sorting procedures into alphabetical order... "&lt;br /&gt;    elseif ($CURTRIG$ = "OPER")&lt;br /&gt;        call SORT_TRIGGER("operation")&lt;br /&gt;        message/hint "Just sorting operations into alphabetical order... "&lt;br /&gt;    else&lt;br /&gt;        message/hint "I don't know how to sort this trigger."&lt;br /&gt;    endif&lt;br /&gt;else&lt;br /&gt;    message/hint "I don't know how to on this form"&lt;br /&gt;endif&lt;br /&gt;&lt;br /&gt;message/hint "Done. "&lt;br /&gt;&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;entry SORT_TRIGGER&lt;br /&gt;params&lt;br /&gt;    string DECLARES :in&lt;br /&gt;endparams&lt;br /&gt;variables&lt;br /&gt;   numeric XPOS, YPOS&lt;br /&gt;    string TEKSHTBLOK, ONELINE&lt;br /&gt;   numeric LINE, COUNTER, BEFORE, AFTER&lt;br /&gt;    string PROCNAME, PROCBODY&lt;br /&gt;    string TRIGDAT, TRIGNDX, EXTRA            &lt;br /&gt;endvariables&lt;br /&gt;&lt;br /&gt;clrmess&lt;br /&gt;putmess TEKSHTBLOK&lt;br /&gt;&lt;br /&gt;activate "URICHEDIT"."UGETCURSORPOS"( "PROC.DUMMY0" , XPOS , YPOS ) &lt;br /&gt;activate "URICHEDIT"."USELECTALL"( "PROC.DUMMY0" ) &lt;br /&gt;activate "URICHEDIT"."USELECTDATA"( "PROC.DUMMY0" ) &lt;br /&gt;TEKSHTBLOK = $selblk&lt;br /&gt;&lt;br /&gt;if (TEKSHTBLOK != "")&lt;br /&gt;    TEKSHTBLOK = $replace(TEKSHTBLOK,1,"&amp;amp;","&amp;amp;amp;", - 1)&lt;br /&gt;    TEKSHTBLOK = $replace(TEKSHTBLOK,1,"&amp;lt;","&amp;amp;lt;", - 1)&lt;br /&gt;    TEKSHTBLOK = $replace(TEKSHTBLOK,1,"&amp;gt;","&amp;amp;gt;", - 1)&lt;br /&gt;    TEKSHTBLOK = $replace(TEKSHTBLOK,1,"&lt;GLD&gt;;&lt;/GLD&gt;","&amp;lt;gold&amp;gt;;", - 1)&lt;br /&gt;    TEKSHTBLOK = $replace(TEKSHTBLOK,1,"&lt;GLD&gt;!&lt;/GLD&gt;","&amp;lt;gold&amp;gt;!", - 1)&lt;br /&gt;    TEKSHTBLOK = $replace(TEKSHTBLOK,1,"%%^","&lt;GLD&gt;;&lt;/GLD&gt;", - 1)&lt;br /&gt;endif&lt;br /&gt;&lt;br /&gt;length DECLARES&lt;br /&gt;BEFORE = $result + 1&lt;br /&gt;AFTER = $result + 2&lt;br /&gt;&lt;br /&gt;LINE = 1&lt;br /&gt;COUNTER = 1&lt;br /&gt;EXTRA = &lt;br /&gt;getitem ONELINE, TEKSHTBLOK, COUNTER&lt;br /&gt;while ($status &amp;gt; 0)&lt;br /&gt;&lt;br /&gt;    ; Found new entry&lt;br /&gt;    if ($ltrim($lowercase(ONELINE[1,BEFORE])," ")="%%DECLARES ")&lt;br /&gt;        &lt;br /&gt;        ;Get procedure name&lt;br /&gt;        $status = $split(ONELINE[AFTER],1," ",PROCNAME,PROCBODY) &lt;br /&gt;        if (PROCNAME="")&lt;br /&gt;            PROCNAME = ONELINE[AFTER]&lt;br /&gt;        endif&lt;br /&gt;&lt;br /&gt;        PROCBODY =         &lt;br /&gt;        repeat&lt;br /&gt;            ONELINE = itemnr(LINE,TEKSHTBLOK)&lt;br /&gt;            putitem PROCBODY, -1, ONELINE&lt;br /&gt;            LINE = LINE + 1&lt;br /&gt;        until ($ltrim($lowercase(ONELINE[1,4])," ") = "end " | ONELINE = "end")&lt;br /&gt;&lt;br /&gt;        putitem/id TRIGDAT, PROCNAME, PROCBODY&lt;br /&gt;        putitem TRIGNDX, -1, PROCNAME&lt;br /&gt;&lt;br /&gt;        EXTRA = &lt;br /&gt;        COUNTER = LINE - 1&lt;br /&gt;&lt;br /&gt;    endif&lt;br /&gt;  &lt;br /&gt;    COUNTER = COUNTER + 1&lt;br /&gt;    putitem EXTRA, -1, itemnr(COUNTER, TEKSHTBLOK)&lt;br /&gt;    getitem ONELINE, TEKSHTBLOK, COUNTER&lt;br /&gt;endwhile&lt;br /&gt;&lt;br /&gt;sort/list TRIGNDX&lt;br /&gt;&lt;br /&gt;TEKSHTBLOK =  &lt;br /&gt;repeat&lt;br /&gt;    getitem/id PROCBODY, TRIGDAT, itemnr(1,TRIGNDX)&lt;br /&gt;    if (TEKSHTBLOK)&lt;br /&gt;        TEKSHTBLOK = "%%TEKSHTBLOK%%%&lt;GLD&gt;;&lt;/GLD&gt;&lt;GLD&gt;;&lt;/GLD&gt;%%PROCBODY"&lt;br /&gt;    else&lt;br /&gt;        TEKSHTBLOK = PROCBODY&lt;br /&gt;    endif&lt;br /&gt;    delitem TRIGNDX, 1&lt;br /&gt;until ($status = 0)&lt;br /&gt;&lt;br /&gt;TEKSHTBLOK = "%%TEKSHTBLOK%%%&lt;GLD&gt;;&lt;/GLD&gt;%%EXTRA"&lt;br /&gt;TEKSHTBLOK = $replace(TEKSHTBLOK,1,"&lt;GLD&gt;;&lt;/GLD&gt;","%%^", - 1)&lt;br /&gt;TEKSHTBLOK = $replace(TEKSHTBLOK,1,"&amp;lt;gold&amp;gt;!","&lt;GLD&gt;!&lt;/GLD&gt;", - 1)&lt;br /&gt;TEKSHTBLOK = $replace(TEKSHTBLOK,1,"&amp;lt;gold&amp;gt;;","&lt;GLD&gt;;&lt;/GLD&gt;", - 1)&lt;br /&gt;TEKSHTBLOK = $replace(TEKSHTBLOK,1,"&amp;amp;gt;","&amp;gt;", - 1)&lt;br /&gt;TEKSHTBLOK = $replace(TEKSHTBLOK,1,"&amp;amp;lt;","&amp;lt;", - 1)&lt;br /&gt;TEKSHTBLOK = $replace(TEKSHTBLOK,1,"&amp;amp;amp;","&amp;amp;", - 1)&lt;br /&gt;&lt;br /&gt;askmess/question "Update re-ordered trigger","Ok,Cancel"&lt;br /&gt;if ($status = 1)&lt;br /&gt;    $procinsert(PROC.DUMMY0) = TEKSHTBLOK&lt;br /&gt;endif&lt;br /&gt;&lt;br /&gt;XPOS = 1&lt;br /&gt;activate "URICHEDIT"."UGOTOLINE"( "PROC.DUMMY0" , YPOS , XPOS ) &lt;br /&gt;&lt;br /&gt;putmess PROC.DUMMY0&lt;br /&gt;&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-2646375246043932";
google_ad_width = 125;
google_ad_height = 125;
google_ad_format = "125x125_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;
&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31375541-115447128251122188?l=nodebug.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31375541/posts/default/115447128251122188'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31375541/posts/default/115447128251122188'/><link rel='alternate' type='text/html' href='http://nodebug.blogspot.com/2006/08/if-you-want-something-done.html' title='If you want something done...'/><author><name>Hertz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-31375541.post-115446554438130901</id><published>2006-08-01T22:52:00.000+02:00</published><updated>2006-08-01T22:54:38.256+02:00</updated><title type='text'>As the man said:"It does what it says on the tin..."</title><content type='html'>&lt;pre&gt;&lt;br /&gt;$result = &lt;$fieldname&gt;&lt;br /&gt;interrupt 989, "UNDOGOLD"&lt;br /&gt;;value = $result&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-2646375246043932";
google_ad_width = 125;
google_ad_height = 125;
google_ad_format = "125x125_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;
&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31375541-115446554438130901?l=nodebug.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31375541/posts/default/115446554438130901'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31375541/posts/default/115446554438130901'/><link rel='alternate' type='text/html' href='http://nodebug.blogspot.com/2006/08/as-man-saidit-does-what-it-says-on-tin.html' title='As the man said:&quot;It does what it says on the tin...&quot;'/><author><name>Hertz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-31375541.post-115408682949341382</id><published>2006-07-28T13:40:00.000+02:00</published><updated>2006-08-09T15:54:24.530+02:00</updated><title type='text'>More Developer Logicals</title><content type='html'>Logicals are often used to 'turn on' functionality especially debug code.  UU_SPECIAL is not the only [LOGICALS] developer setting.&lt;br /&gt;&lt;br /&gt;Some others (of perhaps limited utility) include :&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;[LOGICALS]&lt;br /&gt;UdbgSpecial             1&lt;br /&gt;;UdbgLines               1&lt;br /&gt;;UdbgDebugging           1&lt;br /&gt;;UdbgWholeTree           1&lt;br /&gt;;UdbgTracing             1&lt;br /&gt;;UShowSAPTester          1&lt;br /&gt;;uShowQALogForm          1&lt;br /&gt;ShowPanel                FALSE&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Some of these will be covered later in 'Debugging the debugger'.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-2646375246043932";
google_ad_width = 125;
google_ad_height = 125;
google_ad_format = "125x125_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;
&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31375541-115408682949341382?l=nodebug.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31375541/posts/default/115408682949341382'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31375541/posts/default/115408682949341382'/><link rel='alternate' type='text/html' href='http://nodebug.blogspot.com/2006/07/more-developer-logicals.html' title='More Developer Logicals'/><author><name>Hertz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-31375541.post-115401723384397212</id><published>2006-07-27T18:20:00.000+02:00</published><updated>2006-07-27T18:38:04.983+02:00</updated><title type='text'>Form tab sequence</title><content type='html'>$prompt in the 'next field' and 'previous field' triggers can help control the form tab sequence, although overriding UnifAce's own curious default behaviour in this way can prove quite a laborious task.  &lt;br /&gt;&lt;br /&gt;This is where precompiler constants can help:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Tip:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In the Next field and Previous field triggers (using global updates perhaps)&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#for FIELD = (&amp;lt;fieldOrder&amp;gt;), COUNT1&lt;br /&gt;    #if &amp;lt;FIELD&amp;gt; = &amp;lt;$fieldname&amp;gt;.&amp;lt;$entname&amp;gt;&lt;br /&gt;        #if (&amp;lt;$trigger&amp;gt; = PFLD)&lt;br /&gt;            #for PFLD = (&amp;lt;pfldOrder&amp;gt;), COUNT2&lt;br /&gt;                 #if (&amp;lt;COUNT2&amp;gt; = &amp;lt;COUNT1&amp;gt;)&lt;br /&gt;$prompt = &amp;lt;PFLD&amp;gt;&lt;br /&gt;                 #endif&lt;br /&gt;            #endfor&lt;br /&gt;        #else&lt;br /&gt;            #for NFLD = (&amp;lt;nfldOrder&amp;gt;), COUNT3&lt;br /&gt;                 #if (&amp;lt;COUNT3&amp;gt; = &amp;lt;COUNT1&amp;gt;)&lt;br /&gt;$prompt = &amp;lt;NFLD&amp;gt;&lt;br /&gt;                 #endif&lt;br /&gt;            #endfor&lt;br /&gt;        #endif&lt;br /&gt;    #endif&lt;br /&gt;#endfor&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;In the Defines trigger of the form...&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#define fieldOrder = fieldname.tablename,fieldname.tablename,fieldname.tablename,...&lt;br /&gt;#include SYSTEM_LIBRARY:FIELDORDER&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;...where...&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;;include SYSTEM_LIBRARY:FIELDORDER&lt;br /&gt;#ifdefined fieldOrder&lt;br /&gt;#ifundefined pfldOrder&lt;br /&gt;#ifundefined nfldOrder&lt;br /&gt;&lt;br /&gt;    ;Build NfldOrder&lt;br /&gt;    #for FIELD = (&amp;lt;fieldOrder&amp;gt;), COUNT1&lt;br /&gt;         #if (&amp;lt;COUNT1&amp;gt; = 0)&lt;br /&gt;              #define firstField = &amp;lt;FIELD&amp;gt;&lt;br /&gt;         #else&lt;br /&gt;             #if (&amp;lt;COUNT1&amp;gt; = 1)&lt;br /&gt;                 #define tempOrder = &amp;lt;FIELD&amp;gt;&lt;br /&gt;             #else&lt;br /&gt;                 #ifdefined nfldOrder&lt;br /&gt;                     #undefine nfldOrder&lt;br /&gt;                 #endif&lt;br /&gt;                 #define nfldOrder = &amp;lt;tempOrder&amp;gt;·;&amp;lt;FIELD&amp;gt;&lt;br /&gt;                 #undefine tempOrder&lt;br /&gt;                 #define tempOrder = &amp;lt;nfldOrder&amp;gt;&lt;br /&gt;             #endif&lt;br /&gt;         #endif&lt;br /&gt;    #endfor&lt;br /&gt;    #undefine nfldOrder&lt;br /&gt;    #define nfldOrder = &amp;lt;tempOrder&amp;gt;·;&amp;lt;firstField&amp;gt;&lt;br /&gt;&lt;br /&gt;    ;Build pfldOrder&lt;br /&gt;    #define lastField = &amp;lt;FIELD&amp;gt;&lt;br /&gt;    #undefine tempOrder&lt;br /&gt;&lt;br /&gt;    #for FIELD = (&amp;lt;fieldOrder&amp;gt;), COUNT2&lt;br /&gt;        #if (&amp;lt;COUNT2&amp;gt; = 0)&lt;br /&gt;            #define tempOrder = &amp;lt;FIELD&amp;gt;&lt;br /&gt;        #else&lt;br /&gt;            #ifdefined pfldOrder&lt;br /&gt;                #undefine pfldOrder&lt;br /&gt;            #endif&lt;br /&gt;            #if (&amp;lt;FIELD&amp;gt; != &amp;lt;lastField&amp;gt;)&lt;br /&gt;                 #define pfldOrder = &amp;lt;tempOrder&amp;gt;·;&amp;lt;FIELD&amp;gt;&lt;br /&gt;                 #undefine tempOrder&lt;br /&gt;                 #define tempOrder = &amp;lt;pfldOrder&amp;gt;&lt;br /&gt;            #endif&lt;br /&gt;        #endif&lt;br /&gt;    #endfor&lt;br /&gt;    #undefine pfldOrder&lt;br /&gt;    #define pfldOrder = &amp;lt;lastField&amp;gt;·;&amp;lt;tempOrder&amp;gt;&lt;br /&gt;&lt;br /&gt;#endif&lt;br /&gt;#endif&lt;br /&gt;#endif&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;...is the #included block and fieldOrder is the list of fields in tab sequence order.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-2646375246043932";
google_ad_width = 125;
google_ad_height = 125;
google_ad_format = "125x125_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;
&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31375541-115401723384397212?l=nodebug.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31375541/posts/default/115401723384397212'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31375541/posts/default/115401723384397212'/><link rel='alternate' type='text/html' href='http://nodebug.blogspot.com/2006/07/form-tab-sequence.html' title='Form tab sequence'/><author><name>Hertz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-31375541.post-115383572601117888</id><published>2006-07-25T15:55:00.000+02:00</published><updated>2006-07-26T00:01:30.593+02:00</updated><title type='text'>Loading xml data</title><content type='html'>&lt;b&gt;Tip:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;xmlload/nomod vData, vDTD&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Won't set your modification status.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-2646375246043932";
google_ad_width = 125;
google_ad_height = 125;
google_ad_format = "125x125_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;
&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31375541-115383572601117888?l=nodebug.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31375541/posts/default/115383572601117888'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31375541/posts/default/115383572601117888'/><link rel='alternate' type='text/html' href='http://nodebug.blogspot.com/2006/07/loading-xml-data.html' title='Loading xml data'/><author><name>Hertz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-31375541.post-115374135898794695</id><published>2006-07-24T13:42:00.000+02:00</published><updated>2006-07-26T00:06:14.873+02:00</updated><title type='text'>'A bad workman blames his tool':</title><content type='html'>The purpose of this blog is to promote Uniface as a development tool.  For all its foibles, when used properly, it is very powerful.  If you are having problems it is more than likely because you are trying to do something strange.  Its a 4GL - you don't have low-level control so be realistic.  &lt;br /&gt;&lt;br /&gt;There are endless tips, hacks and caveats/gotchas.  This is an attempt to document them here as I remember/find them.  &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Tip: Procedures as inline function calls:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;if ((totocc("&lt;$entname&gt;") = 1))&lt;br /&gt;    call E_&lt;$entname&gt;_Del()&lt;br /&gt;endif&lt;br /&gt;&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;entry totocc&lt;br /&gt;params&lt;br /&gt;    string entname:inout&lt;br /&gt;endparams&lt;br /&gt;    $status = $totocc(entname)&lt;br /&gt;    return($status)&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;WARNING! Undocumented features may be removed by Compuware without notice.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-2646375246043932";
google_ad_width = 125;
google_ad_height = 125;
google_ad_format = "125x125_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;
&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31375541-115374135898794695?l=nodebug.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31375541/posts/default/115374135898794695'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31375541/posts/default/115374135898794695'/><link rel='alternate' type='text/html' href='http://nodebug.blogspot.com/2006/07/bad-workman-blames-his-tool.html' title='&apos;A bad workman blames his tool&apos;:'/><author><name>Hertz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-31375541.post-115373761974670916</id><published>2006-07-24T12:40:00.000+02:00</published><updated>2006-07-24T22:16:42.966+02:00</updated><title type='text'>Uniface Developer Settings:</title><content type='html'>Place UU_SPECIAL = 1 in the [LOGICALS] section of your idf assignment file to see the 'Internal Defines' trigger.  &lt;br /&gt;&lt;br /&gt;Be prepared for some other unusual behaviour too...&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-2646375246043932";
google_ad_width = 125;
google_ad_height = 125;
google_ad_format = "125x125_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;
&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31375541-115373761974670916?l=nodebug.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31375541/posts/default/115373761974670916'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31375541/posts/default/115373761974670916'/><link rel='alternate' type='text/html' href='http://nodebug.blogspot.com/2006/07/uniface-developer-settings.html' title='Uniface Developer Settings:'/><author><name>Hertz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-31375541.post-115361222565744028</id><published>2006-07-23T01:15:00.000+02:00</published><updated>2006-07-26T00:10:24.320+02:00</updated><title type='text'>elegant cycles</title><content type='html'>There are some useful tips hidden here:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;; Classic loop - cycling through occurrences&lt;br /&gt;; (You may have wanted to keep the original occurrence number)&lt;br /&gt;setocc "&lt;$entname&gt;", 1&lt;br /&gt;while ($status &gt; -1)&lt;br /&gt;    ...&lt;br /&gt;    setocc "&lt;$entname&gt;", $curocc("&lt;$entname&gt;") + 1&lt;br /&gt;endwhile&lt;br /&gt;&lt;br /&gt;Lists.&lt;br /&gt;&lt;br /&gt;; Destructive whole list process&lt;br /&gt;repeat &lt;br /&gt;    ...&lt;br /&gt;    delitem vList, 1&lt;br /&gt;until ($status = 0)&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;But since you may have wanted to reuse that list and copying big strings can be slow...&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;;Non-destructive whole list processing&lt;br /&gt;variables&lt;br /&gt;    numeric vIndex&lt;br /&gt;endvariables&lt;br /&gt;&lt;br /&gt;repeat &lt;br /&gt;    vIndex = vIndex + 1&lt;br /&gt;    ...&lt;br /&gt;until ($itemnr(vIndex,vList)=$itemnr(-1,vList))&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-2646375246043932";
google_ad_width = 125;
google_ad_height = 125;
google_ad_format = "125x125_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;
&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31375541-115361222565744028?l=nodebug.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31375541/posts/default/115361222565744028'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31375541/posts/default/115361222565744028'/><link rel='alternate' type='text/html' href='http://nodebug.blogspot.com/2006/07/elegant-cycles.html' title='elegant cycles'/><author><name>Hertz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-31375541.post-115335420484317070</id><published>2006-07-20T02:08:00.000+02:00</published><updated>2006-07-20T02:10:04.843+02:00</updated><title type='text'>Isn't hacking bad?</title><content type='html'>&lt;a href="http://en.wikipedia.org/wiki/Hacker"&gt;No&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-2646375246043932";
google_ad_width = 125;
google_ad_height = 125;
google_ad_format = "125x125_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;
&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31375541-115335420484317070?l=nodebug.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31375541/posts/default/115335420484317070'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31375541/posts/default/115335420484317070'/><link rel='alternate' type='text/html' href='http://nodebug.blogspot.com/2006/07/isnt-hacking-bad.html' title='Isn&apos;t hacking bad?'/><author><name>Hertz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-31375541.post-115335277076094329</id><published>2006-07-20T01:34:00.000+02:00</published><updated>2006-07-20T02:05:55.760+02:00</updated><title type='text'>What is Uniface?</title><content type='html'>&lt;a href="http://www.compuware.com/products/uniface/"&gt;This is Uniface 4GL.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Made in Holland... by men with beards.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-2646375246043932";
google_ad_width = 125;
google_ad_height = 125;
google_ad_format = "125x125_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;
&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31375541-115335277076094329?l=nodebug.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31375541/posts/default/115335277076094329'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31375541/posts/default/115335277076094329'/><link rel='alternate' type='text/html' href='http://nodebug.blogspot.com/2006/07/what-is-uniface.html' title='What is Uniface?'/><author><name>Hertz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry></feed>
