From: fairfield@umahe1.slac.stanford.edu
Subject: KHF$FORMAT.1-OF-3, V2.2  (EVE Justify/Unjustify)
Organization: Stanford Linear Accelerator Center
Date: Mon, 25 Jan 1993 23:09:36 GMT

$! ------------------ CUT HERE -----------------------
$ v='f$verify(f$trnlnm("SHARE_UNPACK_VERIFY"))'
$!
$! This archive created by VMS_SHARE Version 8.2
$!   On 25-JAN-1993 14:27:51.69   By user FAIRFIELD (Ken Fairfield)
$!
$! The VMS_SHARE software that created this archive
$!    was written by  Andy Harper, Kings College London UK
$!    -- December 1992
$!
$! Credit is due to these people for their original ideas:
$!    James Gray, Michael Bednarek 
$!
$!+ THIS PACKAGE DISTRIBUTED IN 3 PARTS, TO KEEP EACH PART
$!  BELOW 30 BLOCKS
$!
$! TO UNPACK THIS SHARE FILE, CONCATENATE ALL PARTS IN ORDER
$! AND EXECUTE AS A COMMAND PROCEDURE  (  @name  )
$!
$! THE FOLLOWING FILE(S) WILL BE CREATED AFTER UNPACKING:
$!       1. KHF$FORMAT.README;1
$!       2. KHF$FORMAT.TPU;12
$!
$set="set"
$set symbol/scope=(nolocal,noglobal)
$f=f$parse("SHARE_UNPACK_TEMP","SYS$SCRATCH:."+f$getjpi("","PID"))
$e="write sys$error  ""%UNPACK"", "
$w="write sys$output ""%UNPACK"", "
$ if .not. f$trnlnm("SHARE_UNPACK_LOG") then $ w = "!"
$ ve=f$getsyi("version")
$ if ve-f$extract(0,1,ve) .ges. "4.4" then $ goto start
$ e "-E-OLDVER, Must run at least VMS 4.4"
$ v=f$verify(v)
$ exit 44
$unpack: subroutine ! P1=filename, P2=checksum, P3=attributes
$ if f$parse(P1) .nes. "" then $ goto dirok
$ dn=f$parse(P1,,,"DIRECTORY")
$ w "-I-CREDIR, Creating directory ''dn'"
$ create/dir 'dn'
$ if $status then $ goto dirok
$ e "-E-CREDIRFAIL, Unable to create ''dn' File skipped"
$ delete 'f'*
$ exit
$dirok:
$ x=f$search(P1)
$ if x .eqs. "" then $ goto file_absent
$ e "-W-EXISTS, File ''P1' exists. Skipped"
$ delete 'f'*
$ exit
$file_absent:
$ w "-I-UNPACK, Unpacking file ", P1
$ n=P1
$ if P3 .nes. "" then $ n=f
$ if .not. f$verify() then $ define/user sys$output nl:
$ EDIT/TPU/NOSEC/NODIS/COM=SYS$INPUT 'f'/OUT='n'
PROCEDURE GetHex(s,p)LOCAL x1,x2;x1:=INDEX(t,SUBSTR(s,p,1))-1;x2:=INDEX(t,
SUBSTR(s,p+1,1))-1;RETURN 16*x1+x2;ENDPROCEDURE;
PROCEDURE SkipPartsep LOOP EXITIF MARK(NONE)=END_OF(b);EXITIF INDEX(ERASE_LINE,
"-+-+-+-+-+-+-+-+")=1;ENDLOOP;ENDPROCEDURE;PROCEDURE COPY_PREVIOUS(b,n)LOCAL m,
s,e;m:=MARK(NONE);MOVE_HORIZONTAL(-b);s:=MARK(NONE);MOVE_HORIZONTAL(n-1);e:=
MARK(NONE);POSITION(m);COPY_TEXT(CREATE_RANGE(s,e));ENDPROCEDURE;
PROCEDURE ProcessLine LOCAL c,s,l,b,n,p;c := ERASE_CHARACTER(1);s :=
 ERASE_LINE;IF c = "X" THEN SPLIT_LINE; ENDIF;MOVE_HORIZONTAL(-1);l := LENGTH(
s);p := 1;LOOP EXITIF p > l;c := SUBSTR(s,p,1);p := p+1;
CASE c FROM ' ' TO '`' ['\']: b:=GetHex(s,p); n:=GetHex(s,p+2); p:=p+4;
 COPY_PREVIOUS(b,n);['`']: COPY_TEXT(ASCII(GetHex(s,p))); p:=p+2;[' ']: p:=p+1;
[INRANGE,OUTRANGE]: COPY_TEXT(c);ENDCASE;ENDLOOP;ENDPROCEDURE;
PROCEDURE Decode POSITION(BEGINNING_OF(b));LOOP EXITIF MARK(NONE)=END_OF(b);
IF INDEX(CURRENT_LINE,"+-+-+-+-+-+-+-+-")=1 THEN SkipPartSep;ELSE ProcessLine;
MOVE_HORIZONTAL(1);ENDIF;ENDLOOP;ENDPROCEDURE;SET(FACILITY_NAME,"UNPACK");SET(
SUCCESS,OFF);SET(INFORMATIONAL,OFF);t:="0123456789ABCDEF";f:=GET_INFO(
COMMAND_LINE,"file_name");b:=CREATE_BUFFER(f,f);Decode;WRITE_FILE(b,GET_INFO(
COMMAND_LINE,"output_file"));QUIT;
$ if p3 .eqs. "" then $ goto dl
$ open/write fdl &f
$ write fdl "RECORD"
$ write fdl P3
$ close fdl
$ w "-I-CONVRFM, Converting record format to ", P3
$ convert/fdl=&f &f-1 &P1
$dl: delete 'f'*
$ checksum 'P1'
$ if checksum$checksum .nes. P2 then $ -
  e "-E-CHKSMFAIL, Checksum of ''P1' failed."
$ exit
$ endsubroutine
$start:
$!
$ create 'f'
X
X`20`20`20\0303`20`20As`20noted`20`20in`20`20the`20`20original`20`2018-DEC-1992
V`20`20announcement\2503f`20`20this\4905package,`20`20I`20`20have`20chosen`20to
V`20use`20slightly`20modified`20versions\4805EVE'\4907rocedures`20EVE_FILL_PARA
VGRAPH`20`20an\A803EVE$FILL_RANGE`20`20while`20`20retaining
X\4904their\CB0Cnames.\1A03\A203did`20this\9F04avoid`20unnecessary`20duplicate
X\4904code`20in`20an`20already`20large`20section`20file.
X\2C05\0404Some`20people`20have`20informed`20me`20`20privately\A204at\A704y`20p
Vrefer`20a`20mor\7506modular\0A03approach`20`20(I\EB03onde\1703why?\1D03:-)`20
V\FF04\1F04makes`20\5104m`20`20less\4905susceptible`20to`20EVE`20vers\B804`20ch
Vanges.`20`20`20If`20`20you`20`20wis\4C03to`20`20take\4F04is\4905\8808,`20simp
V\C003do\6C04`20following:
X\2805o`20Change`20all`20occurances`20of\7D04$FILL_RANGE`20to`20KHF$\120A.
X\4128PARAGRAPH`20\450C\1609\4908Delete`20procedure\4104_F\410Efrom\E605`20modu
Vle.
X
X\3E05\0404Ken`20Fairfield`20\1608\0909\0909January`2023,`201993\420AStanford
V`20Linear`20Accelerator`20Center\2B09P.O.Box`204349,`20M/S`2098\4811,`20CA`20
V`2093409
X\1C08USA
X\0D09Internet:\B90A@Slac.\4208.Edu\2E09DECn\2C04`20`2045537::FAIRFIELD`20(
V\1205=SLACVX)\3209BITNET\0A04\600Evx
X
X--------\0808\1010\2020\0C0C
X
X\7305KHF$FORMAT`20V02-002\8908\0808\1010\070725-JAN-1993
X\BD09I`20discovered`20a`20bug`20in`20`20the`20`20procedure`20Khf$Justify`20whi
Vch`20has`20been\4905corrected`20\3D07is`20version.`20`20The`20\5805s`20obvious
V`20when`20it`20`20occurs`20`20(a
X\4904line\4304\6406\8504last`20word`20extend\2C03past`20\A206righ\0C03margin),
V`20`20but
X\4904generally`20`20onl\0604\6907if\3B06paragraph`20or`20box`20being`20justifi
Ved`20is\4905relatively`20narrow.
X\1805\0404\D904follow\3B04conditions`20are`20necessary`20for`20\7304bug`20to
V\8A06:
X\4609o`20Given`20a`20\FE05\8907\8A0B`20that`20`20(1)`20needed`20to`20have`20M
V\4509`20`20spaces`20`20added,`20`20and\34032)\EF05re`20were`20`20N`20`20word
V`20`20gaps\0C03here\450Badditional\5008could`20be\5806;
X\B70BM`20was`20exactly`20divisible`20by`20N`20(`20MOD`20(M,N)`20=`200`20);
V\3B0D/N\3D05greater`20than`20one.\2506If`20all\B904se`20conditions`20\C405met,
V\1B04\3105`20too`20many`20\B007\5604added\4905in`20each`20\F409.`20`20`20This
V`20`20result\0903in`20\4F04`20`20last`20`20\2B06of\1405line\4905extending`20p
V\2604\1C04right`20margin\B807\0404The`20problem`20\8D05`20logic`20error`20(mi
V\B503:-(`20)`20which`20led`20to`20incorrect
X\B806itialization\8E08variable`20`20"the_fill"\B103hen`20\1F0D"nbig"\4905
V\8204zero`20and`20"small_spaces"`20\1C04longer`20than`20one`20space\CE0BVers
V\82042-002`20\A307s`20this`20`20\E708\5D05incorporates`20two`20other
X\4504minor`20changes`20with`20respect\FA04\BB04\F007`20releas\8105--------
V\0808\1010\2020\0C0C\D006KHF$FORMAT`20V02-001`20UPD`20\EB08\0909\111122-DEC-19
V92
X\4A05Well,`20I`20can't`20seem\C904leave`20well`20enough`20alone...\3606\0404In
V`20looking`20at`20the`20Khf$Justify`20procedure`20in\AF0B.TPU,`20which
X\4505`20posted`20a`20few`20days`20ago\9204got`20to`20thin\6506bout`20all`20
V\6C04unnecessary
X\4904work\1905Eve$Current_Word`20is`20do\4104\8A04`20terms`20`20of`20creat
V\1804marks`20and\4905ranges.`20`20`20Since`20`20DEC`20TPU`20developers`20have
V`20noted`20on\A204s`20list\6207he\4905past`20that\6A13\6607\9C04"expensive"
V`20in`20TPU,`20\2204since\4905\D604JUSTIFY`20comm\1E04takes`20a\8504iceable
V`20amount\DA04`20tim\B903to`20`20complet\4906(compared`20\1C05a`20`20simple
V`20`20FILL`20`20for`20example),`20I've`20replaced`20calls`20to\4905Eve$Current
V_Word`20`20by\1606End_of_Word.`20\2A03I`20`20`20won't`20\6D03ay\CD04at\D305
V\4905performance`20is`20\CE09y`20better,`20but`20it`20_is_`20an`20improvement.
V
X\4305\0404Below`20\4204\D504VMS_SHARE`20\D303il\DF03which`20`20contain\2603KHF
V$FORMAT.UPD.
X\D505xtract\9C04\430B\4105(into`20something`20like`20F\4006SHARE),`20strip
V\4905ou\E205is`20message`20down`20to`20\5B04"CUT`20HERE"`20line,`20and`20@F
V\4D0B\2704\4905result\7104\8705.`20\1403Then\0703us\D703\5005`20`20SUMSLP
V\0903editor\1804o`20\2303pdat\4906\EF0BTPU:
X
X\1504\0404\0808$`20EDIT/SUM\2C0F`20/UPDATE=K\170AUPD\420A-Ken
X
X`20--------\0808\1010\2020\0C0C\5D06\710A`20V02-001\B510\1010\080818-DEC-1992
X\4B05Greetings`20All!\BC0AHere's`20a`20Holiday`20gift`20for`20`20everyone`20
V`20in`20INFO-TPU`20land.`20`20I've`20been
X\4604stimulated`20`20by\0403oth`20`20Hunter`20Goatley's`20and`20Ken`20Selvia's
V`20`20EVE`20`20Justify\4A05procedures`20to`20merge`20paragraph`20justification
V`20with`20the`20FILL,`20FILL`20RANGE\4A05\6D04\1305PARAGRAPH`20commands`20
V\D103\3804current`20`20version`20`20of`20\9404\E103`20Also,\4A05there\AE04new
V`20`20functionalit\EB03in`20TPU`20that`20wasn't`20available`20when`20Hunter
V\9409Ken`20wrote\5804ir\7C08s,`20so`20`20hopefully,`20this\9A09is`20a`20little
V
X\4A04more\D004pact`20(e.g.,`20compare`20Hg$Squeeze_Range\7706hf$Fill_Edit).
X
X\4604\0404First,`20I`20took`20\AD06's`20idea`20of`20`20alternately`20filling
V`20out`20the`20lines
X\4604from`20`20\1404`20right\7405then`20\1A05\2D05eft,`20\1804supplemented`20
V\1C03at`20`20with\4A06\6407\3809center\8C04\7308\8004ward\4E06\7B06both`20`20e
Vnds`20`20of\4A05\8E05\3005`20toward\1B03\1405\5206.`20`20`20Thus,`20`20on`20
V\9503ccessive\3506\2D03in`20a\4A05paragraph`20or`20range,`20\2407ar\3003fill
V\CB04\8B06\B50A-out\C909\4A05outside-in,\2F0C`20right\A80A\EA05eft,\E205\290Cl
Veft\DE06\2B0Bright\D003This`20alternation`20of\9C05ing`20`20pattern\B403help
V\0703\9408\DE0Aappear`20more`20balanced.
X\2505\0404Second,`20I`20took`20Ken's`20idea`20\6904`20using`20Eve$Current_Word
V`20to`20pick`20out\4A05each`20`20word`20`20in`20a`20line`20\E804st\7904\D105es
Vults\2005n`20array\DF03I`20`20use`20\B909ranges`20as`20returned`20`20from`20
V`20\8511`20rather`20`20than`20\6405`20corre-
X\4A04spond\BE04`20stri\0804that`20\E304\7304s,`20but\1405's`20a`20detail\9205a
Vlso`20imple\4A06mented`20\6105"extra\5E04ac\0F03follow\5E05\1504entence"`20
V`20which`20`20both`20these\4A05gentlemen`20had`20done,`20if`20in\3E03slightly
V`20different`20way.
X\3905\0404Third,`20and`20`20perhaps`20`20mos\D403important,`20\C003`20integrat
Ved`20\B605justify
X\4604procedur\BD03`20within`20`20`20EVE'\4D03FILL\4203FILL`20`20PARAGRAPH`20
V\7306\1606`20RANGE\4A0Es.\9D03o`20do`20this,`20I`20split`20\7B04original`20Eve
V_Fill_Paragraph\A704o
X\4A04two`20`20`20routines\8203`20a\0403"stub"\9E04\3B11\2304\9606\2B06`20new
V\4A05Eve$F\2B0D\9C04he`20latter`20contains`20all`20of\A306ld`20code,`20with
V`20my
X\9405he`20`20small`20`20additions\7803including`20`20optional`20input`20parame
Vters,`20which`20I
X\4A04required`20in`20order`20to`20implement\6906justification\B305us`20I`20hav
Ve`20added\4A05just\F104handfu\C105lines`20to`20\FA09Range`20and\130AParagraph
V`20and\4A05\5906voided`20\8204ne\0904o`20add`20`20duplicat\9903code\F504`20
V`20\A812\4A05procedure`20\9E05to`20find`20\8004fill`20p\7C08s.
X
X\3104\0404The`20result`20is`20three`20new`20EVE`20commands:`20JUSTIFY,`20
V\0907`20PARAGRAPH,
X\4604\6404\1B08RANGE.\5A06\5107`20are`20`20entirely`20`20analogous`20to`20
V\CE04three\4A05corresponding`20FILL\8709\5403For`20instance\8D0A\7E11\4A05wi
V\F403`20work`20`20on`20`20a`20BOX`20selection`20in`20addit\0C04to`20\2003`20no
Vrma\3503\2509.
X\4A04Paragraph`20indention,`20positive`20or`20negative,`20_is_`20respected`20b
Vy`20\9907.
X\4B05\0404Finally,`20I`20found`20`20there`20`20w\0605times`20\1D03`20might
V\1703an\0603to`20undo`20the\4A05spacing`20`20that`20`20\6707`20had`20done.`20
V`20Unlike`20earlier`20versions`20of`20EVE\F103nd\4A05TPU,\5704`20current`20
V\2A07\2904`20FILL`20`20leave\9503embedded`20\7F0Aintact.
X\4A05hu\BA06have`20supplied`20three`20corresponding`20UN\B208commands.\4004es
V\DE06use`20\9304same`20procedure\EC06\3908\2504s`20before`20fill\5804out`20lin
Ves`20to\4A05first`20\6604press`20out`20extra`20spaces,`20and\6C04n`20add`20one
V`20\1F0B`20at`20the\4A05end`20of`20each`20`20sentence\B603\B704\1E03ffec\6903i
Vs`20`20like`20`20Ken'\0D03"ragged-right"\4A05justification`20(I`20call`20
V\DD05NO\1E0F:-).
X
X\3604\0404I`20have`20packaged\9C04`20modified`20\C904`20new`20FILL,`20JUSTIFY
V\1705UN\0E07\4A05procedures\B003nto`20a`20singl\4C05ule,`20KHF$FORMAT,`20whi
V\F203can`20be`20used`20as-is\4A05to`20EXTEND`20TPU`20*,`20or\2A08included`20in
V`20your`20xxx$MASTER.FILE`20`20for`20\5104\4A05with`20`20EVE$BUILD.\ED05`20wil
Vl`20`20se\DA04out`20\980A\5704three`20VMS_SHARE'd
X\DE05arts`20following`20this`20note.`20`20As\5604comment`20\4305at`20file,`20m
Vodifications\DE08\9204\5303rocedures`20are`20clearly`20labeled`20\BC05"!\9E04"
V`20at`20`20the`20`20e\B505f
X\4A04affected`20lines.\1203Furthermore,`20\9208s`20\3F0Abeginn\C104`20of\1405
V\DE06\8B08`20Khf$Justify`20outline`20ways`20\3F04user`20can\D606y`20\1404patte
Vrn`20\9407filling,`20etc.,\ED04suit`20an`20individual's`20taste`20or`20needs.
X
X\3C04\0404Use`20and`20enjoy!`20`20Co\C407are`20hereby`20solici\F904;-)
X\3B09\0808Cheers,`20Ken
X--
X`20Dr.`20Kenneth`20H.`20Fairfield`20\2C03`7C`20`20Internet:`20\1A09@Slac.Stanf
Vord.Edu
X`20SLAC,`20P.O.Box`204349,`20MS`2098`20\4605DECn\4404`20`2045537::FAIRFIELD
V`20(45537=SLACVX)
X`20S\5807,`20CA\300394309`20\BC07\4A03BITNET\0D04\900Evx
X`20--------\0808\1010\2020\0C0C
$ call unpack KHF$FORMAT.README;1 1769806412 ""
$!
$ create 'f'
Xprocedure`20KHF$FORMAT_MODULE_IDENT
X`20`20`20`20return`20"V02-002";
Xendp\3B08;
X
X!++
X!\2903\450A.TPU
X!\1505The`20\2D09s`20found`20here`20implement`20new`20EVE`20commands`20JUSTIFY
V,`20\0907\4A05PARAGRAPH,`20and`20\1B07`20RANGE.`20`20In`20order`20to`20avoid
V`20duplicate`20code,`20the
X\4904various`20\7304FILLxxxx\A40Care`20\A80A,`20slightly`20modified`20to\4905s
Vupport`20calls`20to`20Khf$Fill_Edit`20\A604Khf$Justify.`20`20The`20\4506cation
Vs\4705\7004indicated`20by`20a`20"KHF"`20comments\3A03Eve_Fill_paragraph`20was
V`20split`20in\9107two`20\C90Bto`20facilitate`20access`20from\4F05\9707_P\5208.
V
X!
X!
X\4804Mo\E907\4D0Bextrac\A204\4206VE$FORMAT.TPU`20(V02-100b):
X!`09`09`09`09`20\4703\0303--------\0606
X!`09eve_fi\C90C`09`09Now`20calls`20eve$f\1E0D\3306\150F`09`09Fill`20p\1008`20b
Vetween`20margins`20using\8906\8A03spaces\4A0Crange`09\4707a`20range\FC07New
V`20\F70Bin`20this`20file:
X!
X!`09Eve_Justify`09\4208nd`20j\1306\4E08`20or`20\C50C\360B_P\C80F\3F0E\3618Ra
V\B405\3211the`20selected\CA08\3905Un\2307\A707_Edit`20\3B04fil\F709\A914\3A09
V\AB10\4311\3A1A\AF0B\360F\B115Khf$\EA07\AF03Does\2805work`20of`20right-\5C07in
Vg
X!`09\2703`09`20\C608\4207\6E09\1C03Prepares`20\E908for`20filling
X!
X!`20Author/Date:`09`09K.H.`20Fairfield,`09`0917-DEC-1992
X\2F04Revisions:
X!
X!--
X
X
X!--------\0808\0909Modified`20EVE`20Procedures\3019-----
X
X
Xpr\2B07`20eve_fill_paragraph
X
X`20`20`20`20return`20(eve$f\200D);
X
Xendp\4308;`09`09!\4715\660E\460F\3403Fill`20p\1108`20between`20margins`20using
V`20spaces
X!`09`20`20\CA13\1603\AC03(;do_justify,`09!`20Flag`20whether`20to`20j\1B06`20th
Ve\700A
X`09`09`09\2C03\3E03DEFAULT`20=`20FALSE)\5607`20`20do_fill_edit)`09\5812callKhf
V$Fill_Edit`20before\5B09fill\600C\A70A)
X
Xlocal`09saved_mark,\3404Marker`20for`20current\0804sor`20position
X`09start_\C909\F204\370Bstart`20of`20\4008\F20Bstop\390C\3A0Eend`20\3816the_ri
Vght_margin,\1306left\120Eindent,
X`09fill_range;`09\6603Range\D60D\5E0A
Xon_error
X`20`20`20`20`5BOTHERWISE`5D:
+-+-+-+-+-+-+-+-  END  OF PART 1 +-+-+-+-+-+-+-+-
-- 
 Dr. Kenneth H. Fairfield    |  Internet: Fairfield@Slac.Stanford.Edu
 SLAC, P.O.Box 4349, MS 98   |  DECnet:   45537::FAIRFIELD (45537=SLACVX)
 Stanford, CA   94309        |  BITNET    Fairfield@Slacvx
 ----------------------------------------------------------------------------
 These opinions are mine, not SLAC's, Stanford's, nor the DOE's...