[futurebasic] Re: [FB] Munger Question

Message: < previous - next > : Reply : Subscribe : Cleanse
Home   : September 1999 : Group Archive : Group : All Groups

From: Jay Reeve <jktr@...>
Date: Tue, 7 Sep 99 02:37:17 -0500
>So, my question is "Is there something that I'm not doing right in the
>following program OR is there an easy way (or hard way for that matter) to
>adjust the length of the resultant text handle?
>
Hi again, tedd,

I did a little more study of your code after sending my earlier post, and 
I think I have identified the problem. FN Munger (a toolbox call) doesn't 
know about ZTXT handles (an FB construct). It can "munge" them alright, 
and adjust the handle size in the process, but it doesn't know anything 
about resetting the length word. I think this might work to reset it 
(call after FN MUNGER)...

  & [EFHandle&], FN GETHANDLESIZE(EFHandle&)-2 'poke new size

...but only if there is no style info appended to the ZTXT handle.

Macsbug shows that your function is working correctly, it just doesn't 
get the length word reset. Try the above and see if that works. If not, 
you may need to calculate the change in handle size (getting it before 
and after) so you can adjust your length word accordingly.

BTW, unless you _need_ a ZTXT handle to move into another field, I would 
say you'd be ahead just to use the efH&..teTextH& that I mentioned, but 
you do need the call to TECALTEXT.

This FN works in your code:

LOCAL FN findReplace
  DIM a$, b$, a
  DIM theString$
  DIM EFHndl&,txtH&
  
  '--- make string
  
  theString$ = "aaa*bbb*ccc*ddd*eee*fff*ggg*hhh*iii*
  
  EDIT$(1) = theString$
  
  '--- replace the string with new string
  
  a$ = "ccc"
  b$ = "ZZZZZZZZZ"
  
  CALL MOVETO (0,60)
  PRINT " Text: ";a$; " has been replaced by: ";b$
  PRINT " Note the content of the new string"
  PRINT " Q: Where are the end characters (h*iii*) if"
  PRINT " Munger is supposed to adjust Handle size?"
  PRINT
  PRINT " Press command period to break..."
  
  GET FIELD EFHndl&,1                     '*** get ZTXT handle for edit 
field
  EDIT$(2) = &EFHndl&                     'copy it into field 2
   
  DEF DISPOSEH(EFHndl&)                   '*** dispose of ZTXT handle
  
  EFHndl& = TEHANDLE(2)                   'get TE handle
  txtH& = EFHndl&..teTextH&               'get text handle
  a = FN FindReplaceString&(txtH&,0,a$,b$)'use munger
  CALL TECALTEXT(EFHndl&)                 'recalculate field info
  CALL INVALRECT(#[EFHndl&]+_teViewRect)  'force redraw
  
  EDIT FIELD 0
  
END FN

 0"0
 =J= a  y
  "