®GLA¯®LM0¯®RM255¯
CHNGBLOK.PM v2.1
Global "CIA"-style Search-and-Replace within DeFined Blocks Only
For XyWrite III+.  R. J. Holmgren  9/86 (rev 10/28/89)

INSTRUCTIONS:  (main program; another version is coded within LaBel
  ÿAELB-ALTERNATIVE VERSIONÿAF, at the end of this file.  Remove it from the
  LaBel, and write it to disk as an independent file, or load it in OODLES)

ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

First, DeFine the text block at both ends (doesn't matter where you leave
  the cursor)
Second, manually input the global Search-&-Replace command on the CM line:
  e.g.  "cia /that/which/"  ÄÄ input MUST be in ABSOLUTE "cia" form,
  NOT "ci" or "cv"                                          =
Third, instead of giving an Ù³XC (eXeCute) instruction, RUN this PM with
  a .KeyBoarD file key assignment, or loaded on a Save/Get.  As you can
  see, the procedure is "ordinary" with this last exception

An alternative version, suitable for OODLES, is coded at the end ÄÄ less of a
  kludge, and much faster.  Input of SEARCH and REPLACE strings is handled by
  this alternative program; the drawback is that string input is not
  correctible.

Enjoy!

®LBA¯®SX04,.5¯®SX01,®VA$DS¯¯®SX05,®VA$DN¯¯®IF®PV05¯==0!®PV05¯==®PV01¯¯ÿ€}®PRBad define block Ä Abort¯®EX¯®EI¯ÿAÿÿ€ãÿ€mÿ€wÿ€Ïÿ€Ïÿ€Ïÿ€Ïcva ÿ€mÿ€wjmp ®PV05¯ ÿ	®SU03,®LBB¯ÿ+®SX07,®PV07¯-1¯®IF®PV07¯>0¯®GLB¯®EI¯ÿ£¯®SU08,®SX07,@SIZ(®IS01¯)+5¯ÿ€mÿ€wjmp ®PV01¯ ÿ	ÿ€m®PV03¯ÿ£¯®SX07,@SIZ(®IS05¯)+5¯ÿ€m®PV03¯ÿ€mÿ€wes 1 ÿ	ÿ€m®SX07,5¯®PV03¯®PV08¯®LBC¯ÿ	®IF®ER¯¯®GLD¯®EI¯®SX02,®CP¯¯®IF®PV02¯<=®PV05¯¯®GLE¯®EI¯a®LBD¯®IF®PV04¯==.5¯ÿ€ñÿse  ÿ	ÿ+®EI¯ÿes 0ÿ	ÿjmp ®PV05¯ ÿ	ÿ€kÿjmp ®PV01¯ ÿ?ÿ;ÿ	ÿ€kÿcia ®PRDone¯®EX¯®LBE¯y®IF®PV04¯==.5¯ÿ€mÿ€wse   ÿ	ÿ+®SX04,®CP¯-®PV05¯¯®SX07,6¯ÿ€m®PV03¯®EI¯ÿ€mÿ€wjmp ®PV02¯ ÿ	®SX07,@SIZ(®IS02¯)+5¯ÿ€m®PV03¯®SX05,®PV05¯+®PV04¯¯®GLC¯


Alternative Version (for OODLES):

First, DeFine the text block at both ends
Then RUN this version.  Input of both SEARCH and REPLACE strings is handled
  by the program, and EACH string terminates with function XC -- NOT <cr>
  (the carriage return key) [this enables you to put a carriage return in the
  Search³Replace string].  Func XC is usually mapped to F9

®LB-ALTERNATIVE VERSION:
®LB-BEGIN COPY:¯®LBA¯®SX01,®VA$DS¯¯®SX05,®VA$DN¯¯®IF®PV05¯==0¯ÿBad define block®GLD¯®EI¯ÿ€ã®SV03,ÿ	¯®SV04,¯®SV08,¯®SV07,¯ÿcia ü®LBB¯®PRSearch $? (XC; `Esc' aborts)¯®SX09,®RC¯¯®IF®IS09¯==®IS07¯¯®LBC¯ÿ®LBD¯ÿ€}®PRQuit¯®EX¯®EI¯®IF®IS09¯î®IS03¯>-1¯®GLE¯®EI¯®IF@SIZ(®IS09¯)<3¯®PV09¯®SX04,®IS04¯+®IS09¯¯®EI¯®GLB¯

®LBE¯ü®LBF¯®PRReplace $? (XC; `Esc' aborts)¯®SX09,®RC¯¯®IF®IS09¯==®IS07¯¯®GLC¯®EI¯®IF®IS09¯î®IS03¯>-1¯®GLG¯®EI¯®IF@SIZ(®IS09¯)<3¯®PV09¯®SX08,®IS08¯+®IS09¯¯®EI¯®GLF¯

®LBG¯®SX09,@SIZ(®IS04¯)¯®SX06,@SIZ(®IS08¯)¯®IF®PV09¯==0&®PV06¯==0¯ÿNo strings®GLD¯®EI¯ÿAÿes 1ÿ	ÿjmp ®PV01¯ÿ	ÿ®LBH¯ÿcva ü®PV04¯ü®PV08¯üÿ	®IF®ER¯¯®GLI¯®EI¯®SX02,®CP¯¯®IF®PV02¯<=®PV05¯¯®GLJ¯®EI¯a®LBI¯ÿes 0ÿ	ÿjmp ®PV05¯ÿ	ÿ€kÿjmp ®PV01¯ÿ?ÿ;ÿ	ÿ€k®GLA¯

®LBJ¯y®SX05,®PV05¯+®PV06¯-®PV09¯¯ÿjmp ®PV02¯ÿ	®GLH¯ÿ£®LB-END COPY¯¯