summaryrefslogtreecommitdiff
path: root/web/clip
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /web/clip
Initial commit
Diffstat (limited to 'web/clip')
-rw-r--r--web/clip/clip_ann.ps2373
-rw-r--r--web/clip/clip_style.ps8574
-rw-r--r--web/clip/clip_style_a.ps2001
-rw-r--r--web/clip/clip_style_b.ps389
-rw-r--r--web/clip/ms_dos/ada.ini21
-rw-r--r--web/clip/ms_dos/c.ini21
-rw-r--r--web/clip/ms_dos/cl.bat5
-rw-r--r--web/clip/ms_dos/clip.bat8
-rw-r--r--web/clip/ms_dos/clip_msg.dat36
-rw-r--r--web/clip/ms_dos/cliphelp.hlpbin0 -> 12372 bytes
-rw-r--r--web/clip/ms_dos/clp.bat44
-rw-r--r--web/clip/ms_dos/clp_env.bat22
-rw-r--r--web/clip/ms_dos/ex01_a.asc274
-rw-r--r--web/clip/ms_dos/ex01_a.ini26
-rw-r--r--web/clip/ms_dos/ex01_a.pas102
-rw-r--r--web/clip/ms_dos/ex01_a.ps1416
-rw-r--r--web/clip/ms_dos/ex01_b.asc42
-rw-r--r--web/clip/ms_dos/ex01_b.ini27
-rw-r--r--web/clip/ms_dos/ex01_b.pas119
-rw-r--r--web/clip/ms_dos/ex01_b.ps370
-rw-r--r--web/clip/ms_dos/fortran.ini21
-rw-r--r--web/clip/ms_dos/lisp.ini21
-rw-r--r--web/clip/ms_dos/manual.ps5813
-rw-r--r--web/clip/ms_dos/manual.txt854
-rw-r--r--web/clip/ms_dos/modula.ini21
-rw-r--r--web/clip/ms_dos/pascal.ini21
-rw-r--r--web/clip/ms_dos/read_me.ps1812
-rw-r--r--web/clip/ms_dos/read_me.txt191
-rw-r--r--web/clip/unix/CLIP_MSG36
-rw-r--r--web/clip/unix/ada.ini21
-rw-r--r--web/clip/unix/c.ini21
-rw-r--r--web/clip/unix/cl.csh23
-rw-r--r--web/clip/unix/clipbin0 -> 139264 bytes
-rw-r--r--web/clip/unix/clip.ini22
-rw-r--r--web/clip/unix/clip.pas5682
-rw-r--r--web/clip/unix/clp.csh58
-rw-r--r--web/clip/unix/clp_env.csh25
-rw-r--r--web/clip/unix/ex01_a.asc274
-rw-r--r--web/clip/unix/ex01_a.ini25
-rw-r--r--web/clip/unix/ex01_a.pas102
-rw-r--r--web/clip/unix/ex01_a.ps1415
-rw-r--r--web/clip/unix/ex01_b.asc42
-rw-r--r--web/clip/unix/ex01_b.ini24
-rw-r--r--web/clip/unix/ex01_b.pas119
-rw-r--r--web/clip/unix/ex01_b.ps370
-rw-r--r--web/clip/unix/fortran.ini21
-rw-r--r--web/clip/unix/lisp.ini21
-rw-r--r--web/clip/unix/manual.pdfbin0 -> 44280 bytes
-rw-r--r--web/clip/unix/manual.ps5813
-rw-r--r--web/clip/unix/manual.txt854
-rw-r--r--web/clip/unix/modula.ini21
-rw-r--r--web/clip/unix/pascal.ini21
-rw-r--r--web/clip/unix/read_me.ps1463
-rw-r--r--web/clip/unix/read_me.txt148
-rw-r--r--web/clip/vax_vms/ada.ini21
-rw-r--r--web/clip/vax_vms/c.ini21
-rw-r--r--web/clip/vax_vms/cl.com13
-rw-r--r--web/clip/vax_vms/clip.com16
-rw-r--r--web/clip/vax_vms/clip_1.com12
-rw-r--r--web/clip/vax_vms/clip_msg.dat36
-rw-r--r--web/clip/vax_vms/clp.com48
-rw-r--r--web/clip/vax_vms/clp_env.com12
-rw-r--r--web/clip/vax_vms/ex01_a.asc274
-rw-r--r--web/clip/vax_vms/ex01_a.ini26
-rw-r--r--web/clip/vax_vms/ex01_a.pas102
-rw-r--r--web/clip/vax_vms/ex01_a.ps1419
-rw-r--r--web/clip/vax_vms/ex01_b.asc42
-rw-r--r--web/clip/vax_vms/ex01_b.ini27
-rw-r--r--web/clip/vax_vms/ex01_b.pas119
-rw-r--r--web/clip/vax_vms/ex01_b.ps370
-rw-r--r--web/clip/vax_vms/fortran.ini21
-rw-r--r--web/clip/vax_vms/lisp.ini21
-rw-r--r--web/clip/vax_vms/manual.ps5813
-rw-r--r--web/clip/vax_vms/manual.txt854
-rw-r--r--web/clip/vax_vms/modula.ini21
-rw-r--r--web/clip/vax_vms/pascal.ini21
-rw-r--r--web/clip/vax_vms/read_me.ps1988
-rw-r--r--web/clip/vax_vms/read_me.txt212
-rw-r--r--web/clip/vax_vms/use_clip.com7
79 files changed, 52761 insertions, 0 deletions
diff --git a/web/clip/clip_ann.ps b/web/clip/clip_ann.ps
new file mode 100644
index 0000000000..cde5d5811f
--- /dev/null
+++ b/web/clip/clip_ann.ps
@@ -0,0 +1,2373 @@
+%!PS-Adobe-2.0
+%%DocumentFonts: (atend)
+%%Title: F:\\LITPROG\\CLIP_ANN.DOC
+%%Creator: Lotus Manuscript
+%%For: EWvA
+%%CreationDate: February 24, 1993
+%%Pages: (atend)
+%%BoundingBox: 0 0 595 841
+%%EndComments
+% PostScript Prologue (initialization) for Manuscript
+% Copyright (c) 1985,1986,1987,1988 Lotus Development Corporation
+% There is no user servicable code in this file.
+
+% set timeouts to infinite
+statusdict begin
+0 setjobtimeout
+/manualfeedtimeout 3600 def
+/waittimeout 0 def
+end
+
+% correct bug correction in rev 41.0
+/idiv{div cvi}bind def
+
+% define User Dictionary
+/msdict 300 dict def msdict begin
+/bd{bind def}bind def
+
+% Define commonly used things
+/delay{usertime 5000 add{dup usertime lt{pop exit}if}loop}bd
+/mfeed{statusdict begin /manualfeed true def end}bd
+/afeed{statusdict begin /manualfeed false def end}bd
+/bfeed{ afeed statusdict begin /setpapertray where
+ {pop setpapertray}{pop} ifelse end}bd
+
+/dpi{0.24 dup scale}bd
+
+% These two are called for each page
+/inpage false def
+/begpage{save dpi /inpage true def}bd
+/endpage{inpage {restore showpage}if }bd
+
+% for possible banner
+/fileinfo {pop pop pop}bd
+/enddocument {end} bd
+
+% these are also used by eqn & gmf
+/ld{load def}bd
+/x/exch ld
+/cu{300 mul 72 div}bd
+/m/moveto ld
+/t/translate ld
+/rm/rmoveto ld
+/cp/currentpoint ld
+/st/stroke ld
+/ln/lineto ld
+/rlt/rlineto ld
+/slw/setlinewidth ld
+
+/ff/findfont ld
+/scf/scalefont ld
+/sf/setfont ld
+/fs{x /pt x def ff pt cu scf sf}bd
+
+% linedraw
+/li{4 2 roll setlinewidth 3 1 roll moveto 0.0 rlineto st}bd
+
+% outline factor
+/olwid 40.0 def
+% stroke width for outline
+/uoslw {pt cu x div slw}bd
+% relative horizontal move
+/xm{x currentpoint pop sub 0.0 rmoveto}bd
+
+% The basic show
+/s/show ld
+% move horizontal and show
+/ms{xm s}bd
+
+% variations
+% outline show - first printer attribute
+/ppss{dup cp 3 -1 roll false charpath st
+x 3 -1 roll stringwidth pop add x moveto}bd
+/pss{olwid uoslw { ( ) dup 0 4 -1 roll put ppss}forall}bd
+/ps{pss}bd
+/mps{xm ps}bd
+
+% graybox show - second printer attribute
+/gb{cp 3 -1 roll pt cu dup 4 div neg 0 x rm dup 0 x rlt x 0 rlt
+neg 0 x rlt closepath currentgray .9 setgray fill setgray m}bd
+/usi{dup stringwidth pop gb}bd
+/us{usi s}bd
+/xum{x cp pop sub dup gb 0 rmoveto}bd
+
+% combinations of PD1 and PD2
+/ups{usi pss}bd
+/mups{xm ups}bd
+/mus{xm us}bd
+
+% define a new encoding vector (code page 850 based)
+/PC 256 array def
+StandardEncoding PC copy pop
+
+/dotaccent/bullet
+/quotesingle/quotedblleft/quotedblright/quotesinglbase
+/quotedblbase/guilsinglleft/guilsinglright/.notdef
+/ellipsis/perthousand/.notdef/.notdef/paragraph/section/dagger/daggerdbl
+/OE/oe/fi/fl/endash/emdash/fraction/Ydieresis
+PC 6 26 getinterval astore pop
+
+/Ccedilla/udieresis/eacute/acircumflex/adieresis/agrave/aring/ccedilla
+/ecircumflex/edieresis/egrave/idieresis/icircumflex/igrave/Adieresis/Aring
+/Eacute/ae/AE/ocircumflex/odieresis/ograve/ucircumflex/ugrave
+/ydieresis/Odieresis/Udieresis/oslash/sterling/Oslash/.notdef/florin
+/aacute/iacute/oacute/uacute/ntilde/Ntilde/ordfeminine/ordmasculine
+/questiondown/.notdef/.notdef/onehalf/onequarter/exclamdown/guillemotleft/guillemotright
+/.notdef/.notdef/.notdef/.notdef/.notdef/Aacute/Acircumflex/Agrave
+/.notdef/.notdef/.notdef/.notdef/.notdef/cent/yen/.notdef
+/.notdef/grave/.notdef/circumflex/tilde/.notdef/atilde/Atilde
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/currency
+/eth/Eth/Ecircumflex/Edieresis/Egrave/dotlessi/Iacute/Icircumflex
+/Idieresis/.notdef/.notdef/.notdef/.notdef/brokenbar/Igrave/.notdef
+/Oacute/germandbls/Ocircumflex/Ograve/otilde/Otilde/.notdef/thorn
+/Thorn/Uacute/Ucircumflex/Ugrave/yacute/Yacute/.notdef/acute
+/.notdef/.notdef/.notdef/threequarters/paragraph/section/.notdef/cedilla
+/ring/dieresis/periodcentered/onesuperior/threesuperior/twosuperior/.notdef/.notdef
+
+PC 128 128 getinterval astore pop
+
+% duplicate fonts with a new encoding vector
+/recd 5 dict def
+/pcft
+{recd begin
+/ncs PC def /nfn x def
+/bfn x def /bfd bfn findfont def
+/nf bfd maxlength dict def
+bfd{x dup dup /FID ne x /Encoding ne and
+{x nf 3 1 roll put}{pop pop}ifelse
+}forall
+nf/FontName nfn put
+nf/Encoding ncs put
+nfn nf definefont pop
+end}bd
+
+/fs{x /pt x def ff pt cu scf sf}bd
+
+% used by eqn
+/Times-Roman/TR pcft /Times-Bold/TRB pcft
+/Times-Italic/TRI pcft /Times-BoldItalic/TRBI pcft
+/Helvetica/HV pcft /Helvetica-Bold/HVB pcft
+/Helvetica-Oblique/HVO pcft /Helvetica-BoldOblique/HVBO pcft
+/Courier/CR pcft /Courier-Bold/CRB pcft
+/Sym{/Symbol fs}bd
+
+% Bit map image data decompression code
+/xx 0 def /yy 0 def
+/xbytes 0 def
+/lbuf 1200 string def /obuf 600 string def
+/bval <FFFEFCF8F0E0C080000103070F1F3F7F> def
+/blacks 96 string def /whites 96 string def
+0 1 95 {whites x 255 put} for
+
+/dispatch [
+{
+dup 47 le {32 sub 4 bitshift x pop 1}{
+dup 63 le {x pop 48 sub bval x get
+3 copy put x 1 add x 0} {
+dup 79 le {62 sub} {
+80 sub { 3 copy put x 1 add x } repeat 0
+}ifelse }ifelse }ifelse
+}bind
+{
+32 sub add
+3 copy put
+x 1 add x 0
+} bind
+{
+32 sub x pop add 255 0
+}bind
+{
+32 sub x pop
+3 copy getinterval
+whites 0 3 index getinterval
+x copy pop add 255 0
+}bind
+{
+32 sub x pop
+3 copy getinterval
+blacks 0 3 index getinterval
+x copy pop add 0 0
+}bind
+]def
+
+% read a raster line and unpack
+/readx{
+obuf 0 255 0
+currentfile lbuf readline pop
+{x dispatch x get exec} forall
+pop pop pop 0 xbytes getinterval}bd
+
+/mspic{
+/yy x def/xx x def
+/xbytes xx 8 idiv def
+xx yy 1 [xx 0 0 0 yy sub 0 yy]{readx}image}bd
+
+
+
+/Helvetica/fA pcft/FA{/fA fs}bd
+/Helvetica-Oblique/fAI pcft/FAI{/fAI fs}bd
+/Helvetica-Bold/fAB pcft/FAB{/fAB fs}bd
+/Helvetica-BoldOblique/fAIB pcft/FAIB{/fAIB fs}bd
+/Times-Roman/fB pcft/FB{/fB fs}bd
+/Times-Italic/fBI pcft/FBI{/fBI fs}bd
+/Times-Bold/fBB pcft/FBB{/fBB fs}bd
+/Times-BoldItalic/fBIB pcft/FBIB{/fBIB fs}bd
+/Courier/fH pcft/FH{/fH fs}bd
+/Courier-Oblique/fHI pcft/FHI{/fHI fs}bd
+/Courier-Bold/fHB pcft/FHB{/fHB fs}bd
+/Courier-BoldOblique/fHIB pcft/FHIB{/fHIB fs}bd
+/FJ{/ZapfDingbats fs}bd
+/FJI{/ZapfDingbats fs}bd
+/FJB{/ZapfDingbats fs}bd
+/FJIB{/ZapfDingbats fs}bd
+/Helvetica-Narrow/fK pcft/FK{/fK fs}bd
+/Helvetica-Narrow-Oblique/fKI pcft/FKI{/fKI fs}bd
+/Helvetica-Narrow-Bold/fKB pcft/FKB{/fKB fs}bd
+/Helvetica-Narrow-BoldOblique/fKIB pcft/FKIB{/fKIB fs}bd
+/ZapfChancery-MediumItalic/fL pcft/FL{/fL fs}bd
+/ZapfChancery-MediumItalic/fLI pcft/FLI{/fLI fs}bd
+/ZapfChancery-MediumItalic/fLB pcft/FLB{/fLB fs}bd
+/ZapfChancery-MediumItalic/fLIB pcft/FLIB{/fLIB fs}bd
+/AvantGarde-Book/fM pcft/FM{/fM fs}bd
+/AvantGarde-BookOblique/fMI pcft/FMI{/fMI fs}bd
+/AvantGarde-Demi/fMB pcft/FMB{/fMB fs}bd
+/AvantGarde-DemiOblique/fMIB pcft/FMIB{/fMIB fs}bd
+(F:\\LITPROG\\CLIP_ANN.DOC)(EWvA)(February 24, 1993)fileinfo
+%%EndProlog
+%%Page: 0 1
+delay mfeed
+begpage
+18 FAB
+473 2743 m
+(CLiP, a universal literate programming tool)s
+11 FA
+1024 2582 m
+(Eric. W. van Ammers)s
+12 FBB
+389 2395 m
+(Abstract:)s
+12 FB
+483 2335 m
+(CLiP)s
+604(\(Code)ms
+741(from)ms
+854(Literate)ms
+1025(Program\))ms
+1229(is)ms
+1278(a)ms
+1315(tool)ms
+1409(which)ms
+1546(allows)ms
+1692(writing)ms
+1852(literate)ms
+2006(pro-)ms
+389 2275 m
+(grams)s
+527(in)ms
+583(virtually)ms
+769(any)ms
+858(programming)ms
+1147(language)ms
+1344(\(Pascal,)ms
+1518(Fortran,)ms
+1694(C,)ms
+1757(C++,)ms
+1876(Assembler)ms
+389 2215 m
+(languages,)s
+617(etc\))ms
+709(and)ms
+798(in)ms
+853(combination)ms
+1120(with)ms
+1225(almost)ms
+1375(any)ms
+1464(formatter)ms
+1666(\(Runoff,)ms
+1854(Troff,)ms
+1988(TeX,)ms
+389 2155 m
+(LaTeX,)s
+552(etc.\))ms
+649(or)ms
+700(word-processor)ms
+1021(\(Winword,)ms
+1249(Lotus)ms
+1372(Manuscript,)ms
+1622(Ami)ms
+1720(Pro,)ms
+1812(Word)ms
+1935(Perfect,)ms
+389 2095 m
+(Wordstar,)s
+600(etc\).)ms
+483 2035 m
+(This)s
+581(posting)ms
+738(explains)ms
+915(the)ms
+985(CLiP)ms
+1101(philosophy)ms
+1333(and)ms
+1415(compares)ms
+1616(it)ms
+1653(to)ms
+1702(the)ms
+1773(WEB)ms
+1894(approach.)ms
+389 1975 m
+(CLiP)s
+512(turns)ms
+631(out)ms
+713(much)ms
+843(more)ms
+964(general.)ms
+1142(In)ms
+1202(spite)ms
+1315(of)ms
+1375(this)ms
+1465(generality)ms
+1683(its)ms
+1749(disadvantages)ms
+2048(as)ms
+389 1915 m
+(compared)s
+598(to)ms
+650(the)ms
+723(WEB-family)ms
+994(are)ms
+1068(few)ms
+1155(indeed.)ms
+483 1855 m
+(Currently)s
+688(we)ms
+759(have)ms
+867(two)ms
+956(versions)ms
+1136(of)ms
+1191(CLiP,)ms
+1322(for)ms
+1394(VAX/VMS)ms
+1638(and)ms
+1724(for)ms
+1796(MS-DOS)ms
+1998(plat-)ms
+389 1795 m
+(form.)s
+513(Although)ms
+716(only)ms
+819(limited)ms
+975(user)ms
+1073(documentation)ms
+1384(is)ms
+1432(available,)ms
+1639(this)ms
+1726(is)ms
+1774(not)ms
+1852(felt)ms
+1933(as)ms
+1989(a)ms
+2026(big)ms
+389 1735 m
+(problem)s
+568(since)ms
+683(CLiP)ms
+801(works)ms
+936(fairly)ms
+1057(intuitively)ms
+12 FBB
+389 1590 m
+(Remark:)s
+12 FB
+593(A)ms
+641(postscript)ms
+848(edition)ms
+1000(of)ms
+1054(this)ms
+1138(text)ms
+1226(can)ms
+1308(be)ms
+1368(anonymously)ms
+1650(FTP-ed)ms
+1812(from)ms
+483 1505 m
+(ftp_node:)s
+814(sun01.info.wau.nl)ms
+1186(\(IPnr)ms
+1302(137.224.133.1\))ms
+483 1445 m
+(directory:)s
+814(clip)ms
+483 1385 m
+(file:)s
+814(clip_ann.ps)ms
+endpage
+%%Page: 1 2
+delay mfeed
+begpage
+10 FAB
+295 3182 m
+(2)s
+10 FA
+460 3182 m
+(Introduction)s
+11 FAB
+295 3011 m
+(1 Introduction)s
+12 FB
+295 2933 m
+(It)s
+338(is)ms
+384(clearly)ms
+533(impossible)ms
+762(to)ms
+814(realise)ms
+957(literate)ms
+1109(programming)ms
+1394(\(LP\))ms
+1499(without)ms
+1664(a)ms
+1699(supporting)ms
+1926(tool.)ms
+2029(Histori-)ms
+295 2873 m
+(cally)s
+409(Knuth)ms
+552(was)ms
+647(the)ms
+725(first)ms
+823(to)ms
+879(report)ms
+1016(the)ms
+1095(very)ms
+1201(idea)ms
+1302(of)ms
+1361(LP)ms
+1436(using)ms
+1562(his)ms
+1638(WEB-system)ms
+1922(and)ms
+2012(most)ms
+2126(LP)ms
+295 2813 m
+(practitioners)s
+555(today)ms
+677(employ)ms
+838(WEB)ms
+960(or)ms
+1012(one)ms
+1095(of)ms
+1147(its)ms
+1205(derivatives.)ms
+1448(The)ms
+1536(original)ms
+1702(WEB)ms
+1824(philosophy)ms
+2057(was)ms
+2146(to)ms
+295 2753 m
+(provide)s
+463(a)ms
+500(literate)ms
+654(programming)ms
+942(tool)ms
+1035(for)ms
+1108(a)ms
+1146(particular)ms
+1353(programming)ms
+1640(language)ms
+1836(\(Pascal\))ms
+2012(in)ms
+2067(a)ms
+2104(par-)ms
+295 2693 m
+(ticular)s
+432(formatting)ms
+653(environment)ms
+916(\(TeX\).)ms
+1060(Consequently)ms
+1345(a)ms
+1377(whole)ms
+1509(family)ms
+1650(of)ms
+1701(*WEB*'s)ms
+1908(have)ms
+2012(emerged)ms
+295 2633 m
+(to)s
+346(satisfy)ms
+489(the)ms
+563(needs)ms
+689(of)ms
+743(individuals)ms
+978(who)ms
+1076(wanted)ms
+1233(to)ms
+1285(program)ms
+1467(literately)ms
+1657(on)ms
+1719(different)ms
+1904(platforms.)ms
+389 2573 m
+(However,)s
+593(the)ms
+663(idea)ms
+755(to)ms
+803(extract)ms
+948(compilable)ms
+1179(modules)ms
+1357(from)ms
+1464(documented)ms
+1717(refinement)ms
+1942(steps)ms
+2051(\(rather)ms
+295 2513 m
+(then)s
+394(to)ms
+446(create)ms
+579(modules)ms
+762(and)ms
+848(documentation)ms
+1159(separately\))ms
+1391(has)ms
+1472(independently)ms
+1768(originated)ms
+1985(elsewhere)ms
+295 2453 m
+(too.)s
+385(Not)ms
+475(surprisingly,)ms
+741(the)ms
+816(corresponding)ms
+1117(LP-tools)ms
+1303(have)ms
+1412(been)ms
+1521(based)ms
+1650(on)ms
+1714(different)ms
+1901(principles)ms
+2112(and)ms
+295 2393 m
+(show)s
+416(rather)ms
+549(distinct)ms
+712(characteristics.)ms
+1027(At)ms
+1093(the)ms
+1171(Wageningen)ms
+1439(Agricultural)ms
+1700(University)ms
+1927(e.g.)ms
+2016(we)ms
+2090(have)ms
+295 2333 m
+(developed)s
+512(VAMP)ms
+668(\(1984\))ms
+813(and)ms
+897(later)ms
+998(CLiP)ms
+1116(\(1992\))ms
+1261(and)ms
+1345(these)ms
+1459(tools)ms
+1569(show)ms
+1686(interesting)ms
+1909(differences)ms
+2143(as)ms
+295 2273 m
+(compared)s
+504(to)ms
+556(the)ms
+630(WEB-family)ms
+901([1,2,4,5].)ms
+1097(Because)ms
+1277(the)ms
+1351(introduction)ms
+1608(of)ms
+1663(CLiP)ms
+1781(made)ms
+1902(VAMP)ms
+2059(obsol-)ms
+295 2213 m
+(ete,)s
+378(we)ms
+449(will)ms
+539(focus)ms
+660(our)ms
+739(attention)ms
+926(to)ms
+978(the)ms
+1051(CLiP-system.)ms
+389 2153 m
+(First)s
+491(we)ms
+560(explain)ms
+718(the)ms
+790(design)ms
+931(philosophy)ms
+1164(of)ms
+1217(CLiP)ms
+1333(and)ms
+1416(we)ms
+1485(briefly)ms
+1629(sketch)ms
+1768(the)ms
+1839(way)ms
+1933(CLiP)ms
+2050(works.)ms
+295 2093 m
+(Next)s
+405(we)ms
+476(describe)ms
+656(the)ms
+730(major)ms
+859(differences)ms
+1094(between)ms
+1274(the)ms
+1348(CLiP-system)ms
+1622(and)ms
+1707(the)ms
+1781(WEB-family.)ms
+2065(These)ms
+295 2033 m
+(differences)s
+530(are)ms
+605(mostly)ms
+754(due)ms
+840(to)ms
+893(the)ms
+967(difference)ms
+1183(in)ms
+1236(philosophy)ms
+1472(of)ms
+1527(both)ms
+1629(systems.)ms
+1814(Then)ms
+1930(we)ms
+2002(report)ms
+2135(on)ms
+295 1973 m
+(the)s
+367(status)ms
+492(of)ms
+545(the)ms
+617(CLiP)ms
+734(project)ms
+884(and)ms
+968(we)ms
+1037(conclude)ms
+1229(by)ms
+1290(a)ms
+1324(sketch)ms
+1463(of)ms
+1516(our)ms
+1594(activities)ms
+1785(in)ms
+1836(the)ms
+1908(near)ms
+2005(future.)ms
+2148(A)ms
+295 1913 m
+(more)s
+410(extensive)ms
+611(description)ms
+846(of)ms
+900(CLiP)ms
+1018(is)ms
+1064(in)ms
+1115([5].)ms
+11 FAB
+295 1788 m
+(2 Design philosophy)s
+12 FB
+295 1710 m
+(CLiP)s
+413(\(and)ms
+514(formerly)ms
+701(VAMP\))ms
+875(was)ms
+965(designed)ms
+1155(from)ms
+1265(the)ms
+1339(idea)ms
+1434(that)ms
+1522("good")ms
+1675(programming)ms
+1960(has)ms
+2039(little)ms
+2143(or)ms
+295 1650 m
+(nothing)s
+464(to)ms
+520(do)ms
+586(with)ms
+692(programming)ms
+981(languages.)ms
+1210(We)ms
+1296(consider)ms
+1482(stepwise)ms
+1671(refinement)ms
+1905(a)ms
+1944("good")ms
+2101(pro-)ms
+295 1590 m
+(gramming)s
+517(technique.)ms
+740(So)ms
+809(when)ms
+934(we)ms
+1009(decided)ms
+1181(to)ms
+1236(build)ms
+1355(a)ms
+1394(tool)ms
+1488(that)ms
+1580(would)ms
+1721(allow)ms
+1849(the)ms
+1926(extraction)ms
+2143(of)ms
+295 1530 m
+(modules)s
+483(from)ms
+598(documented)ms
+861(refinement)ms
+1097(steps,)ms
+1228(it)ms
+1274(was)ms
+1370(evident)ms
+1536(this)ms
+1627(tool)ms
+1723(would)ms
+1867(have)ms
+1980(to)ms
+2037(operate)ms
+295 1470 m
+(independent)s
+552(of)ms
+607(the)ms
+681(programming)ms
+967(language)ms
+1160(involved.)ms
+1361(In)ms
+1416(addition)ms
+1593(this)ms
+1678(approach)ms
+1875(would)ms
+2013(be)ms
+2074(bene-)ms
+295 1410 m
+(ficial)s
+412(from)ms
+524(the)ms
+599(point)ms
+717(of)ms
+773(view)ms
+885(of)ms
+941(maintenance.)ms
+1221(The)ms
+1314(latter)ms
+1431(perspective)ms
+1673(made)ms
+1796(us)ms
+1855(decide)ms
+2000(to)ms
+2054(design)ms
+295 1350 m
+(the)s
+368(tool)ms
+458(also)ms
+551(as)ms
+606(much)ms
+729(as)ms
+783(possible)ms
+960(independent)ms
+1217(of)ms
+1271(formatter)ms
+1469(or)ms
+1524(word-processor.)ms
+389 1290 m
+(According)s
+619(to)ms
+678(the)ms
+758(CLiP)ms
+884(approach)ms
+1086(the)ms
+1167(extracted)ms
+1370(modules)ms
+1559(definitely)ms
+1770(have)ms
+1884(a)ms
+1926(function)ms
+2112(and)ms
+295 1230 m
+(should)s
+443(not)ms
+523(be)ms
+586("deliberately)ms
+858(unreadable")ms
+1113(as)ms
+1170(Knuth)ms
+1311(proposes)ms
+1504([2].)ms
+1591(Since)ms
+1717(compiler)ms
+1911(and)ms
+1998(debugger)ms
+295 1170 m
+(messages)s
+497(relate)ms
+622(to)ms
+674(derived)ms
+838(modules)ms
+1021(rather)ms
+1151(than)ms
+1251(to)ms
+1304(the)ms
+1379(documentation)ms
+1689(proper,)ms
+1846(it)ms
+1888(should)ms
+2035(be)ms
+2096(easy)ms
+295 1110 m
+(to)s
+345(relate)ms
+468(the)ms
+541(code)ms
+647(lines)ms
+753(of)ms
+806(the)ms
+879(generated)ms
+1085(modules)ms
+1266(to)ms
+1317(the)ms
+1390(corresponding)ms
+1688(documentation)ms
+1996(lines.)ms
+2115(For)ms
+295 1050 m
+(this)s
+379(reason)ms
+522(we)ms
+593(want)ms
+703(to)ms
+754(copy)ms
+864(the)ms
+937(code)ms
+1044(lines)ms
+1151(of)ms
+1205(the)ms
+1279(documentation)ms
+1589(unchanged)ms
+1818(into)ms
+1908(the)ms
+1982(modules.)ms
+11 FAB
+295 925 m
+(3 How CLiP works)s
+12 FB
+295 847 m
+(A)s
+344(literate)ms
+497(programming)ms
+783(tool)ms
+874(\(LP-tool\))ms
+1074(has)ms
+1154(to)ms
+1207(extract)ms
+1357(modules)ms
+1540(from)ms
+1651(input)ms
+1767(files)ms
+1867(\(called)ms
+2017("source-)ms
+295 787 m
+(files"\))s
+428(that)ms
+514(serve)ms
+630(as)ms
+682(\(input)ms
+812(for\))ms
+897(documentation)ms
+1205(at)ms
+1252(the)ms
+1323(same)ms
+1437(time.)ms
+1549(The)ms
+1637(first)ms
+1728(problem)ms
+1905(for)ms
+1974(an)ms
+2032(LP-tool)ms
+295 727 m
+(to)s
+342(solve)ms
+457(is)ms
+499(to)ms
+546(separate)ms
+719(text)ms
+803(segments)ms
+998(\(that)ms
+1098(are)ms
+1168(meant)ms
+1299(as)ms
+1349(informal)ms
+1530(explanation\))ms
+1789(from)ms
+1895(code)ms
+1998(segments)ms
+295 667 m
+(\(that)s
+396(contain)ms
+553(the)ms
+624(actual)ms
+753(code)ms
+857(to)ms
+906(be)ms
+963(extracted\).)ms
+1185(The)ms
+1272(second)ms
+1421(problem)ms
+1597(is)ms
+1640(to)ms
+1689(merge)ms
+1824(the)ms
+1894(code)ms
+1999(segments)ms
+295 607 m
+(into)s
+385(output)ms
+525(files)ms
+624(\(called)ms
+772("modules"\).)ms
+389 547 m
+(For)s
+471(this)ms
+556(purpose)ms
+728(we)ms
+799(have)ms
+907(in)ms
+959(a)ms
+994(conventional)ms
+1266(literate)ms
+1417(programming)ms
+1703(environment)ms
+1969(\(like)ms
+2073(WEB)ms
+295 487 m
+(or)s
+348(VAMP\))ms
+520(special)ms
+671(command)ms
+879(lines)ms
+985(that)ms
+1072(are)ms
+1144(added)ms
+1275(to)ms
+1326(the)ms
+1398(sourcefiles.)ms
+1639(The)ms
+1728(command)ms
+1937(lines)ms
+2043(control)ms
+295 427 m
+(the)s
+371(extraction)ms
+586(of)ms
+643(the)ms
+720(modules)ms
+905(by)ms
+970(the)ms
+1046(module)ms
+1212(generator)ms
+1416(but)ms
+1495(are)ms
+1572(ignored)ms
+1740(by)ms
+1805(the)ms
+1882(formatter.)ms
+2096(This)ms
+295 367 m
+(technique)s
+509(does)ms
+620(not)ms
+704(work)ms
+827(if)ms
+877(the)ms
+958(documentation)ms
+1275(is)ms
+1328(processed)ms
+1545(by)ms
+1615(a)ms
+1657(word-processor,)ms
+2001(since)ms
+2123(the)ms
+endpage
+%%Page: 2 3
+delay mfeed
+begpage
+10 FA
+1416 3182 m
+(4.1 General design differences)s
+10 FAB
+2161 3182 m
+(3)s
+12 FB
+295 3011 m
+(command)s
+514(lines)ms
+630(would)ms
+777(invariably)ms
+1002(show)ms
+1129(up)ms
+1201(as)ms
+1265(lines)ms
+1381(in)ms
+1442(the)ms
+1525(documentation,)ms
+1857(which)ms
+2001(is)ms
+2057(highly)ms
+295 2951 m
+(undesirable.)s
+389 2891 m
+(CLiP)s
+507(solves)ms
+644(the)ms
+717(problem)ms
+897(by)ms
+959(prescribing)ms
+1196(a)ms
+1231(special)ms
+1382(programming)ms
+1667(STYLE.)ms
+1847(Its)ms
+1910(input)ms
+2025(files)ms
+2124(are)ms
+295 2831 m
+(either)s
+423(obtained)ms
+610(directly)ms
+777(by)ms
+841(an)ms
+903(editor)ms
+1034(or)ms
+1091(indirectly)ms
+1297(by)ms
+1361(an)ms
+1423(ASCII-export)ms
+1713(from)ms
+1824(a)ms
+1861(word-processor.)ms
+295 2771 m
+(CLiP)s
+416(recognizes)ms
+645(special)ms
+800(comment)ms
+1002(lines)ms
+1112(as)ms
+1169(indicators)ms
+1382(to)ms
+1437(guide)ms
+1564(the)ms
+1641(module)ms
+1806(extraction)ms
+2022(process.)ms
+295 2711 m
+(These)s
+434(comments)ms
+660(look)ms
+770('natural')ms
+962(in)ms
+1022(the)ms
+1103(context)ms
+1271(of)ms
+1333(the)ms
+1414(code.)ms
+1542(The)ms
+1640(syntax)ms
+1791(CLiP)ms
+1917(recognizes)ms
+2151(is)ms
+295 2651 m
+(parameterized)s
+590(and)ms
+675(can)ms
+757(be)ms
+817(adjusted)ms
+996(to)ms
+1047(virtually)ms
+1229(any)ms
+1314(programming)ms
+1598(language.)ms
+11 FAB
+295 2526 m
+(4 CLiP compared to the WEB-family)s
+12 FB
+295 2448 m
+(The)s
+383(differences)ms
+616(between)ms
+794(the)ms
+866(CLiP-system)ms
+1138(and)ms
+1221(the)ms
+1294(WEB-family)ms
+1563(are)ms
+1635(partly)ms
+1763(due)ms
+1846(to)ms
+1896(general)ms
+2054(design)ms
+295 2388 m
+(decisions)s
+493(and)ms
+578(partly)ms
+707(to)ms
+758(the)ms
+832(difference)ms
+1047(in)ms
+1099(philosophy.)ms
+11 FAB
+295 2263 m
+(4.1 General design differences)s
+12 FB
+295 2185 m
+(\007)s
+389(CLiP)ms
+509(works)ms
+645(not)ms
+724("monolithic")ms
+995(\(like)ms
+1101(WEB)ms
+1227(does\).)ms
+1362(It)ms
+1407(processes)ms
+1613(up)ms
+1677(to)ms
+1730(64)ms
+1795(\(the)ms
+1887(number)ms
+2054(can)ms
+2137(be)ms
+389 2125 m
+(adjusted\))s
+581(inputfiles)ms
+779(in)ms
+827(one)ms
+909(run.)ms
+997(From)ms
+1114(this)ms
+1195(input)ms
+1307(it)ms
+1344(produces)ms
+1534(as)ms
+1584(many)ms
+1705(modules)ms
+1883(as)ms
+1934(are)ms
+2004(specified)ms
+389 2065 m
+(by)s
+460(the)ms
+541(user.)ms
+658(Thus)ms
+778(it)ms
+826(is)ms
+880(possible)ms
+1065(to)ms
+1124(generate)ms
+1314(a)ms
+1357(complete)ms
+1561(software)ms
+1753(system)ms
+1913(in)ms
+1972(one)ms
+2065(single)ms
+389 2005 m
+(CLiP-run.)s
+295 1945 m
+(\007)s
+389(CLiP)ms
+507(composes)ms
+717(modules)ms
+899(from)ms
+1008(stubs)ms
+1124(which)ms
+1258(may)ms
+1357(be)ms
+1417(scattered)ms
+1607(over)ms
+1708(multiple)ms
+1888(sourcefiles.)ms
+295 1885 m
+(\007)s
+389(CLiP)ms
+508(allows)ms
+651(a)ms
+686(global)ms
+824(redefinition)ms
+1070(of)ms
+1125(stubs.)ms
+1253(In)ms
+1307(this)ms
+1393(way)ms
+1489(one)ms
+1574(can)ms
+1656(temporarily)ms
+1902(put)ms
+1979(a)ms
+2014(stub)ms
+2111(in)ms
+2162(a)ms
+389 1825 m
+(given)s
+511(slot)ms
+595(and)ms
+678(replace)ms
+834(it)ms
+873(later)ms
+973(on.)ms
+1047(This)ms
+1147(feature)ms
+1297(makes)ms
+1436(it)ms
+1475(possible)ms
+1651(to)ms
+1701(define)ms
+1837(abstraction)ms
+2068(levels)ms
+389 1765 m
+(in)s
+441(the)ms
+514(description)ms
+749(of)ms
+804(a)ms
+839(system.)ms
+1003(For)ms
+1085(instance)ms
+1261(one)ms
+1346(can)ms
+1428(introduce)ms
+1630(a)ms
+1665(particular)ms
+1869(record)ms
+2010(structure)ms
+389 1705 m
+(at)s
+440(a)ms
+477(higher)ms
+619(level)ms
+731(as)ms
+787(a)ms
+824(simple)ms
+972(name)ms
+1095(with)ms
+1198(only)ms
+1302(its)ms
+1364(most)ms
+1475(important)ms
+1684(fields)ms
+1810(and)ms
+1897(defer)ms
+2014(the)ms
+2090(defi-)ms
+389 1645 m
+(nition)s
+517(of)ms
+570(the)ms
+642(other)ms
+756(fields)ms
+878(to)ms
+928(a)ms
+961(suitable)ms
+1128(lower)ms
+1253(level.)ms
+1374(Such)ms
+1485(a)ms
+1518(form)ms
+1626(of)ms
+1679(data)ms
+1773(abstraction)ms
+2004(is)ms
+2048(known)ms
+389 1585 m
+(as)s
+443("partially)ms
+643(specified)ms
+836(data)ms
+932(structures".)ms
+295 1525 m
+(\007)s
+389(Unlike)ms
+538(WEB,)ms
+674(CLiP)ms
+792(has)ms
+871(no)ms
+933(macro)ms
+1071(facilities.)ms
+11 FAB
+295 1400 m
+(4.2 Programming language independence)s
+12 FB
+295 1322 m
+(CLiP)s
+413(will)ms
+505(work)ms
+621(seamless)ms
+812(with)ms
+914(any)ms
+999(programming)ms
+1285(language)ms
+1479(that)ms
+1567(allows)ms
+1711(comment)ms
+1910(lines)ms
+2018(between)ms
+295 1262 m
+(the)s
+365(tokens)ms
+504(of)ms
+555(the)ms
+625(language.)ms
+827(Otherwise)ms
+1041(its)ms
+1098(applicability)ms
+1357(can)ms
+1435(in)ms
+1483(principle)ms
+1670(be)ms
+1726(restricted,)ms
+1933(but)ms
+2006(we)ms
+2073(know)ms
+295 1202 m
+(of)s
+349(no)ms
+411(language)ms
+604(where)ms
+739(this)ms
+824(would)ms
+961(be)ms
+1021(a)ms
+1055(problem)ms
+1235(in)ms
+1286(practice.)ms
+389 1142 m
+(Since)s
+512(CLiP)ms
+630(is)ms
+675(completely)ms
+910(programming)ms
+1194(language)ms
+1387(independent,)ms
+1656(it)ms
+1697(has)ms
+1776(no)ms
+1838(knowledge)ms
+2070(of)ms
+2123(the)ms
+295 1082 m
+(programming)s
+577(language)ms
+768(it)ms
+805(is)ms
+849(processing.)ms
+1085(Thus)ms
+1196(it)ms
+1234(will)ms
+1322(not)ms
+1396(recognize)ms
+1600(keywords,)ms
+1817(identifiers)ms
+2030(or)ms
+2082(other)ms
+295 1022 m
+(tokens.)s
+295 937 m
+(\007)s
+389(CLiP)ms
+506(cannot)ms
+652(automatically)ms
+936(produce)ms
+1109(a)ms
+1143(X-reference)ms
+1393(list)ms
+1466(of)ms
+1520(identifiers)ms
+1734(the)ms
+1807(way)ms
+1902(WEB)ms
+2025(does)ms
+2129(\(in)ms
+389 877 m
+(this)s
+472(respect)ms
+623(CLiP)ms
+739(is)ms
+783(definitely)ms
+985(less)ms
+1070(powerful)ms
+1261(than)ms
+1358(WEB\).)ms
+1508(With)ms
+1618(CLiP)ms
+1734(a)ms
+1767(X-reference)ms
+2016(list)ms
+2087(must)ms
+389 817 m
+(be)s
+450(produced)ms
+650(the)ms
+724(same)ms
+841(way)ms
+938(as)ms
+993(an)ms
+1054(index)ms
+1179(of)ms
+1234(an)ms
+1295(ordinary)ms
+1478(document.)ms
+1702(This)ms
+1804(feature)ms
+1957(is)ms
+2004(therefore)ms
+389 757 m
+(highly)s
+535(dependent)ms
+759(of)ms
+819(the)ms
+898(particular)ms
+1108(formatter)ms
+1312(or)ms
+1372(word-processor)ms
+1702(one)ms
+1792(applies.)ms
+1965(But)ms
+2055(with)ms
+2162(a)ms
+389 697 m
+(modern)s
+560(word-processor)ms
+890(like)ms
+983(WinWord)ms
+1202(or)ms
+1262(Ami)ms
+1369(Pro,)ms
+1470(powerful)ms
+1669(tools)ms
+1785(exist)ms
+1898(to)ms
+1955(support)ms
+2123(the)ms
+389 637 m
+(construction)s
+649(of)ms
+703(an)ms
+763(index.)ms
+295 577 m
+(\007)s
+389(CLiP)ms
+505(can)ms
+586(extract)ms
+732(any)ms
+815(sort)ms
+901(of)ms
+953(file)ms
+1031(from)ms
+1139(the)ms
+1211(documentation.)ms
+1531(So)ms
+1595(all)ms
+1656(kind)ms
+1755(of)ms
+1808(additional)ms
+2018(files)ms
+2115(can)ms
+389 517 m
+(be)s
+450(documented)ms
+708(also,)ms
+815(rather)ms
+945(than)ms
+1045(the)ms
+1120(pure)ms
+1223(code)ms
+1331(only.)ms
+1446(One)ms
+1543(can)ms
+1627(think)ms
+1743(of)ms
+1799(files)ms
+1899(containing)ms
+2123(the)ms
+389 457 m
+(error)s
+501(message)ms
+685(templates)ms
+892(of)ms
+948(a)ms
+985(system,)ms
+1151(batch)ms
+1275(files,)ms
+1388(internal)ms
+1556(tables)ms
+1687(that)ms
+1777(are)ms
+1853(present)ms
+2012(as)ms
+2068(a)ms
+2105(file,)ms
+389 397 m
+(etc.)s
+295 337 m
+(\007)s
+389(The)ms
+481(special)ms
+634(lines)ms
+742(that)ms
+831(CLiP)ms
+951(recognizes)ms
+1178(can)ms
+1262(be)ms
+1323(adjusted)ms
+1504(to)ms
+1556(suit)ms
+1643(virtually)ms
+1826(any)ms
+1912(programming)ms
+endpage
+%%Page: 3 4
+delay mfeed
+begpage
+10 FAB
+295 3182 m
+(4)s
+10 FA
+460 3182 m
+(Project status)s
+12 FB
+389 3011 m
+(language.)s
+595(However,)ms
+803(the)ms
+876(system)ms
+1028(operates)ms
+1207(strictly)ms
+1358(on)ms
+1421(a)ms
+1455(line)ms
+1543(basis.)ms
+295 2951 m
+(\007)s
+389(CLiP)ms
+511(allows)ms
+657(a)ms
+696(fine-tuning)ms
+934(of)ms
+992(the)ms
+1069(module)ms
+1235(generation)ms
+1462(process)ms
+1628(by)ms
+1694(means)ms
+1838(of)ms
+1896("options".)ms
+2112(But)ms
+389 2891 m
+(these)s
+504(are)ms
+578(cosmetical)ms
+804(and)ms
+889(will)ms
+979(not)ms
+1056(be)ms
+1115(discussed)ms
+1319(here.)ms
+295 2831 m
+(\007)s
+389(Unlike)ms
+540(WEB,)ms
+678(CLiP)ms
+798(has)ms
+880(no)ms
+944(compiler)ms
+1137(like)ms
+1226(knowledge)ms
+1461(and)ms
+1547(it)ms
+1590(does)ms
+1696(not)ms
+1775(extend)ms
+1923(the)ms
+1999(program-)ms
+389 2771 m
+(ming)s
+504(language)ms
+697(one)ms
+782(uses)ms
+881(in)ms
+932(any)ms
+1017(way.)ms
+1125(Nor)ms
+1215(does)ms
+1319(it)ms
+1360(compensate)ms
+1608(any)ms
+1693(nasty)ms
+1811(features.)ms
+11 FAB
+295 2646 m
+(4.3 Formatter and word-processor independence)s
+12 FB
+295 2568 m
+(CLiP)s
+414(simply)ms
+563(processes)ms
+769(all)ms
+832(the)ms
+907(lines)ms
+1015(that)ms
+1104(are)ms
+1178(enclosed)ms
+1367(between)ms
+1547(a)ms
+1583(special)ms
+1735(type)ms
+1835(of)ms
+1890(comment)ms
+2090(lines)ms
+295 2508 m
+(it)s
+336(recognizes.)ms
+577(Such)ms
+691(segment)ms
+871(should)ms
+1019(contain)ms
+1180(only)ms
+1283(code.)ms
+1404(CLiP)ms
+1523(copies)ms
+1665(the)ms
+1740(lines)ms
+1848(from)ms
+1960(the)ms
+2035(sources)ms
+295 2448 m
+(into)s
+385(the)ms
+458(modules)ms
+640(without)ms
+806(any)ms
+890(formatting)ms
+1114(\(i.e.)ms
+1204("verbatim")ms
+1435(or)ms
+1489("literal"\).)ms
+389 2388 m
+(This)s
+486(means)ms
+623(that)ms
+707(CLiP)ms
+821(will)ms
+908(cooperate)ms
+1111(with)ms
+1209(any)ms
+1290(formatter)ms
+1485(that)ms
+1569(has)ms
+1645(a)ms
+1676(command)ms
+1882(like)ms
+1966("verbatim")ms
+295 2328 m
+(or)s
+349("literal")ms
+519(\(all)ms
+598(formatters)ms
+816(that)ms
+903(we)ms
+974(know)ms
+1098(off)ms
+1168(do)ms
+1231(have)ms
+1338(such)ms
+1442(a)ms
+1477(command\).)ms
+295 2268 m
+(CLiP)s
+413(will)ms
+503(process)ms
+665(the)ms
+739(same)ms
+854(files)ms
+953(that)ms
+1040(otherwise)ms
+1247(would)ms
+1385(be)ms
+1444(formatted.)ms
+389 2208 m
+(In)s
+447(a)ms
+486(word-processor)ms
+814(environment)ms
+1083(it)ms
+1128(is)ms
+1178(required)ms
+1362(that)ms
+1454(the)ms
+1531(word-processor)ms
+1859(has)ms
+1943(an)ms
+2007(adequate)ms
+295 2148 m
+(ASCII-export,)s
+603(which)ms
+746(eliminates)ms
+972(formatting)ms
+1204(information.)ms
+1473(CLiP)ms
+1600(will)ms
+1698(analyse)ms
+1869(the)ms
+1951(ASCII-files)ms
+295 2088 m
+(rather)s
+423(than)ms
+520(the)ms
+593(original)ms
+760(word-processor)ms
+1082(files)ms
+1180(and)ms
+1264(generate)ms
+1445(the)ms
+1517(modules)ms
+1698(from)ms
+1807(there.)ms
+1931(Again)ms
+2065(we)ms
+2135(do)ms
+295 2028 m
+(not)s
+371(know)ms
+495(of)ms
+549(any)ms
+633(word-processor)ms
+957(where)ms
+1092(there)ms
+1204(could)ms
+1328(be)ms
+1387(a)ms
+1422(problem)ms
+1601(in)ms
+1653(this)ms
+1737(respect.)ms
+295 1943 m
+(\007)s
+389(The)ms
+479(documentation)ms
+788(of)ms
+842(refinement)ms
+1071(steps)ms
+1183(using)ms
+1304(CLiP)ms
+1421(is)ms
+1467(entirely)ms
+1632(free)ms
+1722(and)ms
+1806(only)ms
+1907(limited)ms
+2061(by)ms
+2123(the)ms
+389 1883 m
+(text)s
+484(processing)ms
+718(system)ms
+876(one)ms
+968(is)ms
+1021(using.)ms
+1162(No)ms
+1243(order)ms
+1368(is)ms
+1422(imposed)ms
+1611(for)ms
+1689(the)ms
+1770(refinements)ms
+2026(nor)ms
+2112(any)ms
+389 1823 m
+(hierarchy)s
+590(in)ms
+642(terms)ms
+765(of)ms
+819(sections)ms
+993(and)ms
+1078(subsections)ms
+1321(\(WEB)ms
+1461(is)ms
+1507(fairly)ms
+1628(restricted)ms
+1826(here\).)ms
+295 1763 m
+(\007)s
+389(No)ms
+460(restrictions)ms
+693(exist,)ms
+810(other)ms
+923(than)ms
+1019(the)ms
+1090(limitation)ms
+1295(of)ms
+1347(the)ms
+1418(particular)ms
+1620(word-processing)ms
+1963(system)ms
+2112(one)ms
+389 1703 m
+(uses,)s
+499(to)ms
+550(explain)ms
+709(the)ms
+781(program)ms
+962(that)ms
+1049(is)ms
+1094(documented.)ms
+1363(Illustration)ms
+1594(by)ms
+1655(means)ms
+1795(of)ms
+1848(tables,)ms
+1989(diagrams,)ms
+389 1643 m
+(figures)s
+540(or)ms
+595(pictures)ms
+765(are)ms
+839(no)ms
+901(problem.)ms
+295 1583 m
+(\007)s
+389(CLiP)ms
+509(generates)ms
+713(modules)ms
+897(that)ms
+986(strongly)ms
+1165(resemble)ms
+1360(the)ms
+1435(code)ms
+1544(one)ms
+1631(finds)ms
+1746(in)ms
+1799(the)ms
+1875(documentation.)ms
+389 1523 m
+(This)s
+489(is)ms
+534(convenient)ms
+765(for)ms
+835(the)ms
+907(programmer)ms
+1166(who)ms
+1263(wants)ms
+1391(to)ms
+1441(use)ms
+1520(them)ms
+1631(for)ms
+1701(debugging)ms
+1923(purposes)ms
+2112(and)ms
+389 1463 m
+(the)s
+461(like.)ms
+560(Although)ms
+760(this)ms
+843(does)ms
+946(not)ms
+1021(really)ms
+1146(solve)ms
+1262(the)ms
+1334(so)ms
+1390(called)ms
+1520("preprocessor)ms
+1807(problem",)ms
+2018(it)ms
+2057(makes)ms
+389 1403 m
+(it)s
+429(a)ms
+464(lot)ms
+529(easier)ms
+658(to)ms
+710(live)ms
+797(with)ms
+899(than)ms
+997(in)ms
+1049(a)ms
+1083(WEB-environment)ms
+1476([3].)ms
+11 FAB
+295 1278 m
+(5 Project status)s
+12 FB
+295 1200 m
+(Currently)s
+501(CLiP)ms
+621(experiences)ms
+872(its)ms
+934(second)ms
+1087(version)ms
+1249(which)ms
+1386(exists)ms
+1515(for)ms
+1588(VAX/VMS)ms
+1833(\(written)ms
+2006(in)ms
+2060(VAX-)ms
+295 1140 m
+(Pascal\))s
+451(and)ms
+536(for)ms
+607(MS-DOS)ms
+808(\(written)ms
+979(in)ms
+1031(Turbo)ms
+1165(Pascal)ms
+1305(Vision\).)ms
+1480(Both)ms
+1590(systems)ms
+1761(are)ms
+1835(of)ms
+1889(course)ms
+2032(docum-)ms
+295 1080 m
+(ented)s
+415(as)ms
+469(CLiP)ms
+588(literate)ms
+739(programs)ms
+940(themselves.)ms
+389 1020 m
+(The)s
+484(user)ms
+585(documentation)ms
+900(of)ms
+960(CLiP)ms
+1083(currently)ms
+1282(consists)ms
+1458(of)ms
+1517(a)ms
+1557(short)ms
+1675(description)ms
+1915(of)ms
+1975(how)ms
+2079(CLiP)ms
+295 960 m
+(works)s
+428(and)ms
+512(should)ms
+656(be)ms
+715(used.)ms
+830(Although)ms
+1031(it)ms
+1070(definitely)ms
+1273(does)ms
+1376(not)ms
+1451(have)ms
+1557(the)ms
+1629(status)ms
+1754(of)ms
+1807(a)ms
+1841(manual,)ms
+2012(it)ms
+2051(should)ms
+295 900 m
+(allow)s
+418(programmers)ms
+697(to)ms
+749(get)ms
+822(along)ms
+946(with)ms
+1047(the)ms
+1121(CLiP-system.)ms
+389 840 m
+(Currently)s
+589(we)ms
+657(only)ms
+755(have)ms
+859(a)ms
+890(limited)ms
+1041(number)ms
+1203(of)ms
+1254(examples)ms
+1452(and)ms
+1534(demos)ms
+1674(which)ms
+1805(moreover)ms
+2006(are)ms
+2076(fairly)ms
+295 780 m
+(trivial.)s
+438(Better)ms
+571(ones)ms
+674(are)ms
+747(on)ms
+808(the)ms
+881(priority)ms
+1042(list.)ms
+1127(Of)ms
+1191(course)ms
+1333(we)ms
+1403(have)ms
+1508(real)ms
+1595(systems)ms
+1764(build)ms
+1878(with)ms
+1979(CLiP)ms
+2096(\(e.g.)ms
+295 720 m
+(CLiP)s
+410(itself)ms
+520(is)ms
+563(a)ms
+595(literate)ms
+744(program)ms
+923(in)ms
+971(CLiP\))ms
+1103(but)ms
+1177(they)ms
+1273(are)ms
+1344(too)ms
+1418(complex)ms
+1600(to)ms
+1648(qualify)ms
+1800(as)ms
+1851(useful)ms
+1983(examples.)ms
+11 FAB
+295 595 m
+(6 Future activities)s
+12 FB
+295 517 m
+(From)s
+417(the)ms
+492(discussion)ms
+715(inside)ms
+849(the)ms
+924(LITPROG)ms
+1149(group)ms
+1280(we)ms
+1353(infer)ms
+1461(that)ms
+1551(CLiP,)ms
+1683(due)ms
+1769(to)ms
+1823(its)ms
+1884(original)ms
+2054(design)ms
+295 457 m
+(philosophy,)s
+543(may)ms
+642(be)ms
+702(a)ms
+738(valuable)ms
+921(addition)ms
+1098(to)ms
+1150(the)ms
+1224(set)ms
+1293(of)ms
+1348(literate)ms
+1500(programming)ms
+1786(tools.)ms
+1909(Our)ms
+2000(goal)ms
+2099(is)ms
+2146(to)ms
+295 397 m
+(make)s
+417(CLiP)ms
+537(as)ms
+593(quickly)ms
+757(as)ms
+813(possible)ms
+991(available)ms
+1186(to)ms
+1239(the)ms
+1314(LP)ms
+1387(audience)ms
+1579(by)ms
+1643(means)ms
+1785(of)ms
+1841(anonymous)ms
+2086(FTP.)ms
+295 337 m
+(We)s
+376(aim)ms
+464(at)ms
+513(the)ms
+586(following)ms
+793(time)ms
+894(schedule:)ms
+endpage
+%%Page: 4 5
+delay mfeed
+begpage
+10 FA
+1736 3182 m
+(7 References)s
+10 FAB
+2161 3182 m
+(5)s
+12 FB
+295 3011 m
+(1.)s
+389(Executable)ms
+622(versions)ms
+800(of)ms
+852(CLiP)ms
+969(for)ms
+1038(VAX/VMS)ms
+1280(and)ms
+1363(MS-DOS)ms
+1563(+)ms
+1602(provisional)ms
+1838(operating)ms
+2037(manual)ms
+389 2951 m
+(+)s
+430(trivial)ms
+562(example)ms
+744(program)ms
+925(will)ms
+1016(be)ms
+1075(FTP-able)ms
+1274(by)ms
+1337(March)ms
+1480(15,)ms
+1555(1993.)ms
+295 2891 m
+(2.)s
+389(More)ms
+511(extensive)ms
+713(example)ms
+895(programs)ms
+1097(in)ms
+1149(different)ms
+1335(programming)ms
+1620(languages)ms
+1833(will)ms
+1924(follow)ms
+2068(incre-)ms
+389 2831 m
+(mentally)s
+577(in)ms
+628(the)ms
+702(successive)ms
+925(months.)ms
+295 2771 m
+(3.)s
+389(We)ms
+473(are)ms
+548(looking)ms
+715(for)ms
+788(an)ms
+850(opportunity)ms
+1098(to)ms
+1151(have)ms
+1260(CLiP)ms
+1380(ported)ms
+1522(to)ms
+1575(Unix.)ms
+1702(Resources)ms
+1922(for)ms
+1995(a)ms
+2031(job)ms
+2109(like)ms
+389 2711 m
+(this)s
+472(are)ms
+544(currently)ms
+736(extremely)ms
+946(scarce)ms
+1082(at)ms
+1129(our)ms
+1207(university,)ms
+1430(and)ms
+1513(unfortunately)ms
+1794(we)ms
+1863(are)ms
+1935(unable)ms
+2079(to)ms
+2129(set)ms
+389 2651 m
+(a)s
+424(date)ms
+520(yet.)ms
+606(External)ms
+788(help)ms
+886(would)ms
+1024(be)ms
+1083(very)ms
+1185(welcome.)ms
+11 FAB
+295 2526 m
+(7 References)s
+12 FB
+295 2448 m
+(1.)s
+389(Ammers)ms
+579(E.W.)ms
+700(van)ms
+790(et.al.)ms
+905(1984.)ms
+1036("VAMP:)ms
+1232(A)ms
+1286(Tool)ms
+1399(for)ms
+1475(Programming)ms
+1768(by)ms
+1836(Stepwise)ms
+2035(Refine-)ms
+389 2388 m
+(ment".)s
+538(Internal)ms
+709(report.)ms
+856(Department)ms
+1108(of)ms
+1165(Computer)ms
+1381(Science,)ms
+1564(Wageningen)ms
+1833(Agricultural)ms
+2093(Uni-)ms
+389 2328 m
+(versity.)s
+295 2268 m
+(2.)s
+389(Knuth)ms
+527(D.E.,)ms
+643(1984.)ms
+768("Literate)ms
+957(Programming".)ms
+1277(The)ms
+1367(Computer)ms
+1580(Journal)ms
+1739(27,)ms
+1814(2,)ms
+1864(pg.)ms
+1939(97-111.)ms
+295 2208 m
+(3.)s
+389(Ramsey)ms
+573(N.,)ms
+656(Marceau)ms
+854(C.)ms
+922(1991.)ms
+1057("Literate)ms
+1256(Programming)ms
+1553(on)ms
+1626(a)ms
+1671(Team)ms
+1807(Project".)ms
+2004(Software)ms
+389 2148 m
+(Practice)s
+563(and)ms
+647(Experience)ms
+885(21,)ms
+960(7,)ms
+1010(pg)ms
+1072(677-683.)ms
+295 2088 m
+(4.)s
+389(Ammers)ms
+575(E.W.)ms
+691(van,)ms
+790(Kramer)ms
+956(M.R.)ms
+1073(1992.)ms
+1199("VAMP:)ms
+1391(A)ms
+1441(Tool)ms
+1549(for)ms
+1621(Literate)ms
+1790(Programming)ms
+2079(Inde-)ms
+389 2028 m
+(pendent)s
+559(of)ms
+613(Programming)ms
+900(Language)ms
+1109(and)ms
+1193(Formatter".)ms
+1435(CompEuro '92)ms
+1745(Proceedings,)ms
+2014(May)ms
+2118(4-8)ms
+389 1968 m
+(1992,)s
+514(the)ms
+588(Hague,)ms
+743(pg.)ms
+818(371-376.)ms
+1002 1703 m
+(I N F O R M A T I O N)s
+295 1558 m
+(For)s
+376(any)ms
+461(information)ms
+710(on)ms
+772(the)ms
+846(CLiP-system)ms
+1120(please)ms
+1257(contact)ms
+625 1438 m
+(Eric)s
+720(W.)ms
+793(van)ms
+877(Ammers)ms
+625 1378 m
+(Wageningen)s
+890(Agricultural)ms
+1147(University)ms
+625 1318 m
+(Department)s
+873(of)ms
+927(Computer)ms
+1140(Science)ms
+625 1258 m
+(Dreijenplein)s
+887(2)ms
+625 1198 m
+(6703)s
+737(HB)ms
+831(Wageningen)ms
+625 1138 m
+(The)s
+715(Netherlands)ms
+625 1078 m
+(Voice:)s
+770(+31)ms
+861(\(0\)8370)ms
+1032(83356/84154)ms
+625 1018 m
+(Fax:)s
+751(+31)ms
+842(\(0\)8370)ms
+1012(84731)ms
+625 958 m
+(E-mail:)s
+787(ammers@rcl.wau.nl)ms
+endpage
+%%Trailer
+enddocument
+%%Pages: 5
+%%DocumentFonts:
+%%+ Helvetica
+%%+ Helvetica-Bold
+%%+ Times-Roman
+%%+ Times-Bold
+%%EOF
+ \ No newline at end of file
diff --git a/web/clip/clip_style.ps b/web/clip/clip_style.ps
new file mode 100644
index 0000000000..598cc7e945
--- /dev/null
+++ b/web/clip/clip_style.ps
@@ -0,0 +1,8574 @@
+%!PS-Adobe-2.0
+%%DocumentFonts: (atend)
+%%Title: F:\\LPT\\COMPR\\COMPREH.DOC
+%%Creator: Lotus Manuscript
+%%For: EWvA, MRK
+%%CreationDate: February 26, 1993
+%%Pages: (atend)
+%%BoundingBox: 0 0 595 841
+%%EndComments
+% PostScript Prologue (initialization) for Manuscript
+% Copyright (c) 1985,1986,1987,1988 Lotus Development Corporation
+% There is no user servicable code in this file.
+
+% set timeouts to infinite
+statusdict begin
+0 setjobtimeout
+/manualfeedtimeout 3600 def
+/waittimeout 0 def
+end
+
+% correct bug correction in rev 41.0
+/idiv{div cvi}bind def
+
+% define User Dictionary
+/msdict 300 dict def msdict begin
+/bd{bind def}bind def
+
+% Define commonly used things
+/delay{usertime 5000 add{dup usertime lt{pop exit}if}loop}bd
+/mfeed{statusdict begin /manualfeed true def end}bd
+/afeed{statusdict begin /manualfeed false def end}bd
+/bfeed{ afeed statusdict begin /setpapertray where
+ {pop setpapertray}{pop} ifelse end}bd
+
+/dpi{0.24 dup scale}bd
+
+% These two are called for each page
+/inpage false def
+/begpage{save dpi /inpage true def}bd
+/endpage{inpage {restore showpage}if }bd
+
+% for possible banner
+/fileinfo {pop pop pop}bd
+/enddocument {end} bd
+
+% these are also used by eqn & gmf
+/ld{load def}bd
+/x/exch ld
+/cu{300 mul 72 div}bd
+/m/moveto ld
+/t/translate ld
+/rm/rmoveto ld
+/cp/currentpoint ld
+/st/stroke ld
+/ln/lineto ld
+/rlt/rlineto ld
+/slw/setlinewidth ld
+
+/ff/findfont ld
+/scf/scalefont ld
+/sf/setfont ld
+/fs{x /pt x def ff pt cu scf sf}bd
+
+% linedraw
+/li{4 2 roll setlinewidth 3 1 roll moveto 0.0 rlineto st}bd
+
+% outline factor
+/olwid 40.0 def
+% stroke width for outline
+/uoslw {pt cu x div slw}bd
+% relative horizontal move
+/xm{x currentpoint pop sub 0.0 rmoveto}bd
+
+% The basic show
+/s/show ld
+% move horizontal and show
+/ms{xm s}bd
+
+% variations
+% outline show - first printer attribute
+/ppss{dup cp 3 -1 roll false charpath st
+x 3 -1 roll stringwidth pop add x moveto}bd
+/pss{olwid uoslw { ( ) dup 0 4 -1 roll put ppss}forall}bd
+/ps{pss}bd
+/mps{xm ps}bd
+
+% graybox show - second printer attribute
+/gb{cp 3 -1 roll pt cu dup 4 div neg 0 x rm dup 0 x rlt x 0 rlt
+neg 0 x rlt closepath currentgray .9 setgray fill setgray m}bd
+/usi{dup stringwidth pop gb}bd
+/us{usi s}bd
+/xum{x cp pop sub dup gb 0 rmoveto}bd
+
+% combinations of PD1 and PD2
+/ups{usi pss}bd
+/mups{xm ups}bd
+/mus{xm us}bd
+
+% define a new encoding vector (code page 850 based)
+/PC 256 array def
+StandardEncoding PC copy pop
+
+/dotaccent/bullet
+/quotesingle/quotedblleft/quotedblright/quotesinglbase
+/quotedblbase/guilsinglleft/guilsinglright/.notdef
+/ellipsis/perthousand/.notdef/.notdef/paragraph/section/dagger/daggerdbl
+/OE/oe/fi/fl/endash/emdash/fraction/Ydieresis
+PC 6 26 getinterval astore pop
+
+/Ccedilla/udieresis/eacute/acircumflex/adieresis/agrave/aring/ccedilla
+/ecircumflex/edieresis/egrave/idieresis/icircumflex/igrave/Adieresis/Aring
+/Eacute/ae/AE/ocircumflex/odieresis/ograve/ucircumflex/ugrave
+/ydieresis/Odieresis/Udieresis/oslash/sterling/Oslash/.notdef/florin
+/aacute/iacute/oacute/uacute/ntilde/Ntilde/ordfeminine/ordmasculine
+/questiondown/.notdef/.notdef/onehalf/onequarter/exclamdown/guillemotleft/guillemotright
+/.notdef/.notdef/.notdef/.notdef/.notdef/Aacute/Acircumflex/Agrave
+/.notdef/.notdef/.notdef/.notdef/.notdef/cent/yen/.notdef
+/.notdef/grave/.notdef/circumflex/tilde/.notdef/atilde/Atilde
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/currency
+/eth/Eth/Ecircumflex/Edieresis/Egrave/dotlessi/Iacute/Icircumflex
+/Idieresis/.notdef/.notdef/.notdef/.notdef/brokenbar/Igrave/.notdef
+/Oacute/germandbls/Ocircumflex/Ograve/otilde/Otilde/.notdef/thorn
+/Thorn/Uacute/Ucircumflex/Ugrave/yacute/Yacute/.notdef/acute
+/.notdef/.notdef/.notdef/threequarters/paragraph/section/.notdef/cedilla
+/ring/dieresis/periodcentered/onesuperior/threesuperior/twosuperior/.notdef/.notdef
+
+PC 128 128 getinterval astore pop
+
+% duplicate fonts with a new encoding vector
+/recd 5 dict def
+/pcft
+{recd begin
+/ncs PC def /nfn x def
+/bfn x def /bfd bfn findfont def
+/nf bfd maxlength dict def
+bfd{x dup dup /FID ne x /Encoding ne and
+{x nf 3 1 roll put}{pop pop}ifelse
+}forall
+nf/FontName nfn put
+nf/Encoding ncs put
+nfn nf definefont pop
+end}bd
+
+/fs{x /pt x def ff pt cu scf sf}bd
+
+% used by eqn
+/Times-Roman/TR pcft /Times-Bold/TRB pcft
+/Times-Italic/TRI pcft /Times-BoldItalic/TRBI pcft
+/Helvetica/HV pcft /Helvetica-Bold/HVB pcft
+/Helvetica-Oblique/HVO pcft /Helvetica-BoldOblique/HVBO pcft
+/Courier/CR pcft /Courier-Bold/CRB pcft
+/Sym{/Symbol fs}bd
+
+% Bit map image data decompression code
+/xx 0 def /yy 0 def
+/xbytes 0 def
+/lbuf 1200 string def /obuf 600 string def
+/bval <FFFEFCF8F0E0C080000103070F1F3F7F> def
+/blacks 96 string def /whites 96 string def
+0 1 95 {whites x 255 put} for
+
+/dispatch [
+{
+dup 47 le {32 sub 4 bitshift x pop 1}{
+dup 63 le {x pop 48 sub bval x get
+3 copy put x 1 add x 0} {
+dup 79 le {62 sub} {
+80 sub { 3 copy put x 1 add x } repeat 0
+}ifelse }ifelse }ifelse
+}bind
+{
+32 sub add
+3 copy put
+x 1 add x 0
+} bind
+{
+32 sub x pop add 255 0
+}bind
+{
+32 sub x pop
+3 copy getinterval
+whites 0 3 index getinterval
+x copy pop add 255 0
+}bind
+{
+32 sub x pop
+3 copy getinterval
+blacks 0 3 index getinterval
+x copy pop add 0 0
+}bind
+]def
+
+% read a raster line and unpack
+/readx{
+obuf 0 255 0
+currentfile lbuf readline pop
+{x dispatch x get exec} forall
+pop pop pop 0 xbytes getinterval}bd
+
+/mspic{
+/yy x def/xx x def
+/xbytes xx 8 idiv def
+xx yy 1 [xx 0 0 0 yy sub 0 yy]{readx}image}bd
+
+
+
+/Helvetica/fA pcft/FA{/fA fs}bd
+/Helvetica-Oblique/fAI pcft/FAI{/fAI fs}bd
+/Helvetica-Bold/fAB pcft/FAB{/fAB fs}bd
+/Helvetica-BoldOblique/fAIB pcft/FAIB{/fAIB fs}bd
+/Times-Roman/fB pcft/FB{/fB fs}bd
+/Times-Italic/fBI pcft/FBI{/fBI fs}bd
+/Times-Bold/fBB pcft/FBB{/fBB fs}bd
+/Times-BoldItalic/fBIB pcft/FBIB{/fBIB fs}bd
+/Courier/fH pcft/FH{/fH fs}bd
+/Courier-Oblique/fHI pcft/FHI{/fHI fs}bd
+/Courier-Bold/fHB pcft/FHB{/fHB fs}bd
+/Courier-BoldOblique/fHIB pcft/FHIB{/fHIB fs}bd
+/AvantGarde-Book/fL pcft/FL{/fL fs}bd
+/AvantGarde-BookOblique/fLI pcft/FLI{/fLI fs}bd
+/AvantGarde-Demi/fLB pcft/FLB{/fLB fs}bd
+/AvantGarde-DemiOblique/fLIB pcft/FLIB{/fLIB fs}bd
+(F:\\LPT\\COMPR\\COMPREH.DOC)(EWvA, MRK)(February 26, 1993)fileinfo
+%%EndProlog
+%%Page: 0 1
+delay mfeed
+begpage
+18 FAB
+531 2978 m
+(The CLiP Style of Literate Programming)s
+12 FBB
+770 2684 m
+(Eric. W. van Ammers and Mark R. Kramer)s
+12 FB
+931 2474 m
+(Computer Science Department)s
+873 2414 m
+(Wageningen Agricultural University)s
+681 2354 m
+(Dreijenplein 2, 6703 HB Wageningen, The Netherlands)s
+728 2294 m
+(voice: +31 \(0\)8370 83356, fax: +31 \(0\)8370 84731)s
+960 2234 m
+(e-mail: ammers@rcl.wau.nl)s
+12 FBB
+484 1844 m
+(Abstract:)s
+12 FB
+531 1784 m
+(Literate)s
+699(programming)ms
+985(is)ms
+1032(a)ms
+1068(method)ms
+1231(to)ms
+1283(integrate)ms
+1472(programs)ms
+1674(with)ms
+1777(their)ms
+1882(docu-)ms
+484 1724 m
+(mentation.)s
+724(Compilable)ms
+986(modules)ms
+1183(are)ms
+1273(no)ms
+1351(separate)ms
+1543(entities,)ms
+1728(but)ms
+1820(they)ms
+1934(are)ms
+484 1664 m
+(extracted)s
+679(from)ms
+789(the)ms
+863(documentation.)ms
+531 1604 m
+(Most)s
+648(literate)ms
+802(programming)ms
+1089(tools)ms
+1201(use)ms
+1283(explicit)ms
+1448(commands)ms
+1680(in)ms
+1733(the)ms
+1809(formatter)ms
+484 1544 m
+(input)s
+600(files)ms
+700(to)ms
+753(guide)ms
+878(the)ms
+953(extraction)ms
+1167(process.)ms
+1343(The)ms
+1435(CLiP)ms
+1554(approach)ms
+1751(presented)ms
+1957(in)ms
+484 1484 m
+(this)s
+575(paper)ms
+706(relies)ms
+833(on)ms
+903(coding)ms
+1058(style)ms
+1172(instead.)ms
+1346(This)ms
+1454(makes)ms
+1601(the)ms
+1682(code)ms
+1795(extraction)ms
+484 1424 m
+(completely)s
+718(independent)ms
+975(of)ms
+1030(the)ms
+1103(text)ms
+1191(processing)ms
+1417(environment.)ms
+1695(Thus)ms
+1808(CLiP)ms
+1926(can)ms
+484 1364 m
+(even)s
+590(be)ms
+650(used)ms
+754(in)ms
+806(combination)ms
+1068(with)ms
+1170(a)ms
+1204(modern)ms
+1370(wordprocessor.)ms
+531 1304 m
+(In)s
+594(addition)ms
+780(the)ms
+862(CLiP)ms
+990(mechanism)ms
+1239(is)ms
+1294(independent)ms
+1560(of)ms
+1624(programming)ms
+1918(lan-)ms
+484 1244 m
+(guages)s
+635(as)ms
+689(well,)ms
+800(and)ms
+885(the)ms
+958(CLiP)ms
+1077(style)ms
+1183(is)ms
+1229(easily)ms
+1358(adapted)ms
+1526(to)ms
+1578(any)ms
+1663(language.)ms
+12 FBB
+484 1064 m
+(Keywords:)s
+12 FB
+531 1004 m
+(Literate)s
+697(programming,)ms
+993(Language)ms
+1202(independent)ms
+1458(literate)ms
+1608(programming,)ms
+1904(Text)ms
+484 944 m
+(processing)s
+716(independent)ms
+978(literate)ms
+1135(programming,)ms
+1438(Multi-file/multi-module)ms
+1937(lit-)ms
+484 884 m
+(erate)s
+593(programming,)ms
+890(Documentation,)ms
+1224(Coding)ms
+1383(style.)ms
+8 FB
+295 204 m
+(The)s
+355(CLiP)ms
+433(Style)ms
+510(of)ms
+546(Literate)ms
+658(Programming)ms
+850(\(4.074,)ms
+953(26-feb-93\))ms
+12 FB
+2075 204 m
+( 1 )s
+50 2 2130 216 li
+50 2 2020 216 li
+endpage
+%%Page: 1 2
+delay mfeed
+begpage
+12 FAB
+295 3176 m
+(1 Introduction)s
+12 FB
+295 3089 m
+(Maintenance)s
+566(is)ms
+613(the)ms
+688(dominating)ms
+929(cost)ms
+1023(factor)ms
+1153(of)ms
+1208(a)ms
+1244(software)ms
+1429(system.)ms
+1594(Estimations)ms
+1844(are)ms
+1918(that)ms
+2007(mainten-)ms
+295 3029 m
+(ance)s
+395(programmers)ms
+671(spend)ms
+797(up)ms
+857(to)ms
+905(50%)ms
+1006(of)ms
+1057(their)ms
+1158(time)ms
+1256(simply)ms
+1401(trying)ms
+1530(to)ms
+12 FBI
+1578(understand)ms
+12 FB
+1812(what)ms
+1919(the)ms
+1989(code)ms
+2093(does)ms
+295 2969 m
+([Parikh)s
+464(and)ms
+558(Zvegintov)ms
+786(1983].)ms
+938(Also)ms
+1054(it)ms
+1104(has)ms
+1193(been)ms
+1310(observed)ms
+1512(over)ms
+1624(and)ms
+1718(over)ms
+1829(that)ms
+1926(conventional)ms
+295 2909 m
+(documentation)s
+606(is)ms
+654(often)ms
+771(inadequate)ms
+1002(for)ms
+1075(maintenance)ms
+1342(purposes.)ms
+1547(Programmers)ms
+1831(on)ms
+1895(a)ms
+1932(maintenance)ms
+295 2849 m
+(job)s
+374(tend)ms
+477(to)ms
+531(ignore)ms
+675(the)ms
+752(documentation)ms
+1066(and)ms
+1154(rely)ms
+1248(on)ms
+1314(the)ms
+1391(code)ms
+1501(listings)ms
+1662(instead.)ms
+1832(The)ms
+1925(fact)ms
+2016(that)ms
+2107(in)ms
+2162(a)ms
+295 2789 m
+(conventional)s
+569(set-up)ms
+707(the)ms
+783(documentation)ms
+1096(and)ms
+1184(the)ms
+1261(code)ms
+1371(are)ms
+1448(distinct)ms
+1611(documents,)ms
+1856(is)ms
+1905(generally)ms
+2107(rec-)ms
+295 2729 m
+(ognized)s
+466(as)ms
+521(a)ms
+556(contributing)ms
+813(factor)ms
+943(since)ms
+1059(it)ms
+1100(presents)ms
+1277(a)ms
+1312(serious)ms
+1467(obstacle)ms
+1643(to)ms
+1695(keep)ms
+1803(the)ms
+1877(code)ms
+1985(consistent)ms
+295 2669 m
+(with)s
+395(its)ms
+454(description.)ms
+700(The)ms
+789(problem)ms
+967(made)ms
+1087(Brooks)ms
+1243(ponder)ms
+1393(on)ms
+1455(the)ms
+1527(idea)ms
+1622(of)ms
+1675("self-documenting)ms
+2057(code",)ms
+295 2609 m
+(that)s
+385(is)ms
+433(an)ms
+495(improved)ms
+702(documentation)ms
+1014(method)ms
+1179(which)ms
+1316(integrates)ms
+1526(high)ms
+1630(quality)ms
+1783(documentation)ms
+2096(with)ms
+295 2549 m
+(actual)s
+426(code)ms
+533([Brooks)ms
+707(1982].)ms
+342 2489 m
+(Literate)s
+514(programming)ms
+804(promises)ms
+1001(a)ms
+1041(significant)ms
+1269(step)ms
+1367(towards)ms
+1542(more)ms
+1662(comprehensible)ms
+1996(programs)ms
+295 2429 m
+([Knuth)s
+450(1984].)ms
+593(The)ms
+684(basic)ms
+800(idea)ms
+897(is)ms
+944(twofold.)ms
+1126(Firstly)ms
+1270(the)ms
+1345(program)ms
+1528(code)ms
+1636(and)ms
+1722(its)ms
+1782(description)ms
+2018(are)ms
+2093(inte-)ms
+295 2369 m
+(grated)s
+434(in)ms
+487(such)ms
+594(a)ms
+630(way)ms
+728(that)ms
+818(compilable)ms
+1054(units)ms
+1166(can)ms
+1250(be)ms
+1312(extracted)ms
+1510(automatically,)ms
+1809(thus)ms
+1907(implementing)ms
+295 2309 m
+(the)s
+374(ideal)ms
+490(of)ms
+551(self-documenting)ms
+920(code)ms
+1033(in)ms
+1091(an)ms
+1157(even)ms
+1270(more)ms
+1391(extreme)ms
+1571(form.)ms
+1700(Secondly)ms
+1905(the)ms
+1985(integrated)ms
+295 2249 m
+(document)s
+504(is)ms
+549(no)ms
+611(longer)ms
+750(presented)ms
+954(as)ms
+1007(a)ms
+1041(plain)ms
+1153(ASCII-file,)ms
+1391(but)ms
+1467(rather)ms
+1596(as)ms
+1649(a)ms
+1683(type-set)ms
+1853(document)ms
+2062(where)ms
+295 2189 m
+(all)s
+357(sorts)ms
+464(of)ms
+518(\(typo\)graphical)ms
+839(features)ms
+1010(can)ms
+1092(be)ms
+1151(applied)ms
+1311(to)ms
+1362(increase)ms
+1539(its)ms
+1598(explanatory)ms
+1847(power.)ms
+342 2129 m
+(Evidently)s
+575(literate)ms
+752(programming)ms
+1063(requires)ms
+1263(a)ms
+1324(mechanism)ms
+1591(to)ms
+1668(create)ms
+1826(compilable)ms
+2087(units)ms
+355 2069 m
+( henceforth)s
+595(called)ms
+12 FBI
+728(modules )ms
+12 FB
+981(from)ms
+1092(the)ms
+1167(documentation)ms
+1478(files.)ms
+1590(Such)ms
+1704(a)ms
+1740(mechanism)ms
+1982(is)ms
+2029(called)ms
+2162(a)ms
+295 2009 m
+(module)s
+465(extractor.)ms
+675(In)ms
+737(most)ms
+854(literate)ms
+1013(programming)ms
+1306(settings)ms
+1479(the)ms
+1560(documentation)ms
+1878(is)ms
+1931(produced)ms
+2137(be)ms
+295 1949 m
+(means)s
+433(of)ms
+486(a)ms
+519(formatter.)ms
+728(In)ms
+780(that)ms
+866(case)ms
+963(the)ms
+1035(literate)ms
+1185(programmer)ms
+1442(has)ms
+1520(in)ms
+1570(fact)ms
+1655(to)ms
+1705(work)ms
+1819(with)ms
+1918(four)ms
+2012(different)ms
+295 1889 m
+(languages)s
+509(simultaneously,)ms
+839(namely)ms
+1001(the)ms
+1077(explanation)ms
+1325(language)ms
+1520(\(typically)ms
+1726(English\),)ms
+1923(the)ms
+1998(program-)ms
+295 1829 m
+(ming)s
+407(language)ms
+597(\(e.g.)ms
+695(Pascal\),)ms
+862(the)ms
+932(language)ms
+1122(to)ms
+1171(instruct)ms
+1330(the)ms
+1401(formatter)ms
+1596(and)ms
+1678(the)ms
+1749(language)ms
+1939(to)ms
+1987(command)ms
+295 1769 m
+(the)s
+368(module)ms
+531(extractor)ms
+721([Reenskaug)ms
+969(1989].)ms
+342 1709 m
+(The)s
+430(CLiP)ms
+546(approach)ms
+740(distinguishes)ms
+1012(itself)ms
+1123(from)ms
+1231(other)ms
+1344(literate)ms
+1494(programming)ms
+1777(environments)ms
+2060(in)ms
+2109(that)ms
+295 1649 m
+(it)s
+340(applies)ms
+12 FBI
+500(style)ms
+12 FB
+609(\(or)ms
+686(programming)ms
+976(conventions\))ms
+1252(rather)ms
+1387(than)ms
+12 FBI
+1491(commands)ms
+12 FB
+1722(to)ms
+1779(conduct)ms
+1955(the)ms
+2035(module)ms
+295 1589 m
+(extraction)s
+510(process.)ms
+688(This)ms
+793(concept)ms
+964(sets)ms
+1054(the)ms
+1131(programmer)ms
+1394(entirely)ms
+1562(free)ms
+1656(to)ms
+1710(use)ms
+1792(any)ms
+1880(text)ms
+1971(processing)ms
+295 1529 m
+(system)s
+445(he)ms
+504(prefers.)ms
+667(In)ms
+720(fact)ms
+807(CLiP)ms
+924(cooperates)ms
+1149(just)ms
+1233(as)ms
+1287(easily)ms
+1415(with)ms
+1515(a)ms
+1549(batch)ms
+1669(oriented)ms
+1845(formatter)ms
+2042(as)ms
+2096(with)ms
+295 1469 m
+(an)s
+354(interactive)ms
+577(word-processor.)ms
+912(A)ms
+960(second)ms
+1111(important)ms
+1317(quality)ms
+1468(of)ms
+1522(CLiP)ms
+1639(is)ms
+1685(that)ms
+1772(it)ms
+1812(processes)ms
+2015(virtually)ms
+295 1409 m
+(any)s
+379(programming)ms
+664(language.)ms
+869(However,)ms
+1078(in)ms
+1129(this)ms
+1214(respect)ms
+1368(it)ms
+1408(is)ms
+1454(not)ms
+1530(unique.)ms
+342 1349 m
+(The)s
+436(rest)ms
+526(of)ms
+584(this)ms
+674(paper)ms
+802(consists)ms
+977(of)ms
+1036(five)ms
+1131(main)ms
+1248(parts.)ms
+1375(In)ms
+1434(section 2)ms
+1630(we)ms
+1705(discuss)ms
+1867(the)ms
+1945(literate)ms
+2101(pro-)ms
+295 1289 m
+(gramming)s
+518(paradigm.)ms
+738(We)ms
+826(then)ms
+930(continue)ms
+1121(with)ms
+1228(an)ms
+1294(exposition)ms
+1521(of)ms
+1581(the)ms
+1660(CLiP)ms
+1784(approach)ms
+1986(which)ms
+2126(we)ms
+295 1229 m
+(illustrate)s
+480(by)ms
+541(an)ms
+599(example)ms
+779(in)ms
+828(the)ms
+900(appendices.)ms
+1145(In)ms
+1198(section 4)ms
+1387(the)ms
+1459(CLiP)ms
+1575(technique)ms
+1780(is)ms
+1824(compared)ms
+2032(to)ms
+2082(other)ms
+295 1169 m
+(literate)s
+443(programming)ms
+726(tools)ms
+833(around.)ms
+994(Section 5)ms
+1192(summarizes)ms
+1440(the)ms
+1512(experiences)ms
+1758(that)ms
+1842(have)ms
+1947(been)ms
+2051(gained)ms
+295 1109 m
+(so)s
+357(far.)ms
+443(Finally)ms
+603(we)ms
+680(reflect)ms
+825(on)ms
+894(some)ms
+1017(important)ms
+1230(developments)ms
+1526(of)ms
+1586(literate)ms
+1743(programming)ms
+2033(that)ms
+2126(we)ms
+295 1049 m
+(foresee.)s
+12 FAB
+295 926 m
+(2 The literate programming paradigm)s
+12 FB
+295 839 m
+(Knuth's)s
+468(original)ms
+636(paper)ms
+760(describes)ms
+958(literate)ms
+1110(programming)ms
+1394(as)ms
+1448([Knuth)ms
+1603(1984])ms
+484 779 m
+("Instead)s
+659(of)ms
+711(imagining)ms
+925(that)ms
+1010(our)ms
+1087(main)ms
+1198(task)ms
+1289(is)ms
+1333(to)ms
+1383(instruct)ms
+1543(a)ms
+12 FBI
+1576(computer)ms
+12 FB
+1776(what)ms
+1883(to)ms
+1933(do,)ms
+484 719 m
+(let)s
+553(us)ms
+616(concentrate)ms
+866(rather)ms
+1001(on)ms
+1070(explaining)ms
+1301(to)ms
+12 FBI
+1359(human)ms
+12 FBI
+1514(beings)ms
+12 FB
+1663(what)ms
+1780(we)ms
+1857(want)ms
+1973(a)ms
+484 659 m
+(computer)s
+685(to)ms
+736(do".)ms
+295 599 m
+(We)s
+378(would)ms
+518(like)ms
+607(to)ms
+660(add)ms
+747(the)ms
+822(phrase)ms
+967("in)ms
+1040(such)ms
+1146(a)ms
+1183(way)ms
+1280(that)ms
+1370(it)ms
+1412(can)ms
+1495(be)ms
+1557(interpreted)ms
+1788(by)ms
+1852(a)ms
+1889(computer")ms
+2112(and)ms
+295 539 m
+(consider)s
+476(this)ms
+561(an)ms
+621(almost)ms
+767(perfect)ms
+918(definition.)ms
+342 479 m
+(Thus)s
+451(a)ms
+483(literate)ms
+631(program)ms
+810(contains)ms
+986(the)ms
+12 FBI
+1057(actual)ms
+1192(code)ms
+12 FB
+1296(\(the)ms
+1383(lines)ms
+1487(that)ms
+1571(end-up)ms
+1720(in)ms
+1768(the)ms
+1839(modules\))ms
+2035(divided)ms
+295 419 m
+(in)s
+346(suitable)ms
+513(chunks.)ms
+680(In)ms
+734(general)ms
+893(each)ms
+997(of)ms
+1051(those)ms
+1169(chunks)ms
+1322(will)ms
+1412(be)ms
+1472(accompanied)ms
+1748(with)ms
+1849(a)ms
+12 FBI
+1883(description)ms
+12 FB
+2121(\(an)ms
+295 359 m
+(explanation)s
+541(in)ms
+593(a)ms
+629(suitable)ms
+797(form\).)ms
+937(The)ms
+1028(author)ms
+1169(integrates)ms
+1377(the)ms
+1451(two)ms
+1539(in)ms
+1591(a)ms
+1627(way)ms
+1723(that)ms
+1812(in)ms
+1864(his)ms
+1935(opinion)ms
+2101(pro-)ms
+8 FB
+295 204 m
+(The)s
+355(CLiP)ms
+433(Style)ms
+510(of)ms
+546(Literate)ms
+658(Programming)ms
+850(\(4.074,)ms
+953(26-feb-93\))ms
+12 FB
+2075 204 m
+( 2 )s
+50 2 2130 216 li
+50 2 2020 216 li
+50 2 912 2081 li
+50 2 300 2081 li
+endpage
+%%Page: 2 3
+delay mfeed
+begpage
+12 FB
+295 3179 m
+(vides)s
+414(the)ms
+489(best)ms
+583(explanation)ms
+831(of)ms
+886(the)ms
+961(program.)ms
+1157(This)ms
+1260(integrated)ms
+1473(text)ms
+1562(we)ms
+1635(will)ms
+1726(call)ms
+1812(the)ms
+12 FBI
+1887(documentation)ms
+12 FB
+295 3119 m
+(of)s
+348(the)ms
+421(system.)ms
+584(To)ms
+652(have)ms
+758(a)ms
+792(computer)ms
+993(interpret)ms
+1174(the)ms
+1247(code,)ms
+1366(the)ms
+1439(documentation)ms
+1748(has)ms
+1827(to)ms
+1878(be)ms
+1937(processed)ms
+2146(to)ms
+295 3059 m
+(realise)s
+438(modules.)ms
+632(In)ms
+686(this)ms
+771(section)ms
+925(we)ms
+996(will)ms
+1086(explore)ms
+1249(the)ms
+1322(ingredients)ms
+1557(to)ms
+1608(achieve)ms
+1773(this)ms
+1858(objective.)ms
+11 FAB
+295 2939 m
+(2.1 Explanation to human beings)s
+12 FB
+295 2857 m
+(Programming)s
+583(is)ms
+630(a)ms
+665(painful)ms
+821(process)ms
+984(involving)ms
+1189(many)ms
+1314(distinct)ms
+1474(steps.)ms
+1600(With)ms
+1714(every)ms
+1838(step)ms
+1932(we)ms
+2004(associate)ms
+295 2797 m
+(a)s
+332(design)ms
+478(decision)ms
+660(which)ms
+797(in)ms
+851(turn)ms
+947(is)ms
+996(implemented)ms
+1272(by)ms
+1338(a)ms
+1375(certain)ms
+1526(amount)ms
+1692(of)ms
+1749('real')ms
+1872(code.)ms
+1994(A)ms
+2046(literate)ms
+295 2737 m
+(program)s
+480(documents)ms
+712(the)ms
+788(relation)ms
+957(between)ms
+1139(code)ms
+1249(and)ms
+1337(design)ms
+1483(decision)ms
+1665(as)ms
+1722(an)ms
+1785(integrated)ms
+2001(entity.)ms
+2143(In)ms
+295 2677 m
+(this)s
+376(way)ms
+469(the)ms
+539(ideal)ms
+646(of)ms
+697(self-documenting)ms
+1056(code)ms
+1160(is)ms
+1203(closely)ms
+1354(approximated.)ms
+1651(As)ms
+1716(an)ms
+1772(additional)ms
+1982(advantage)ms
+295 2617 m
+(the)s
+370(programmer)ms
+631(tends)ms
+751(to)ms
+804(express)ms
+969(the)ms
+1044(design)ms
+1189(step)ms
+1284(in)ms
+1337(terms)ms
+1462(of)ms
+1518(actual)ms
+1652(names)ms
+1794(as)ms
+1850(they)ms
+1950(show)ms
+2070(in)ms
+2123(the)ms
+295 2557 m
+(program)s
+475(code.)ms
+594(In)ms
+647(a)ms
+681(conventional)ms
+950(environment,)ms
+1227(where)ms
+1361(description)ms
+1594(and)ms
+1678(program)ms
+1859(code)ms
+1965(are)ms
+2037(distinct)ms
+295 2497 m
+(documents,)s
+535(the)ms
+607(tendency)ms
+799(is)ms
+843(rather)ms
+971(to)ms
+1021(express)ms
+1182(descriptions)ms
+1435(in)ms
+1485(more)ms
+1598(abstract)ms
+1765(terms)ms
+1887(and)ms
+1971(names)ms
+2109(that)ms
+295 2437 m
+(often)s
+410(do)ms
+472(not)ms
+549(return)ms
+681(as)ms
+735(identifiers)ms
+950(in)ms
+1001(the)ms
+1075(program.)ms
+342 2377 m
+(Design)s
+500(steps)ms
+616(per)ms
+696(se)ms
+755(are)ms
+832(fairly)ms
+957(autonomous)ms
+1218(entities.)ms
+1391(It)ms
+1438(is)ms
+1488(by)ms
+1555(their)ms
+1663(mutual)ms
+1818(relationship)ms
+2071(that)ms
+2162(a)ms
+295 2317 m
+(certain)s
+443(desired)ms
+601(functionality)ms
+869(is)ms
+916(realised.)ms
+1096(Therefore)ms
+1306(the)ms
+1380(hierarchy)ms
+1582(of)ms
+1637(the)ms
+1711(design)ms
+1854(steps)ms
+1967(is)ms
+2013(a)ms
+2048(crucial)ms
+295 2257 m
+(factor)s
+424(to)ms
+477(understand)ms
+709(the)ms
+784(structure)ms
+972(of)ms
+1027(a)ms
+1062(software)ms
+1248(system.)ms
+1413(This)ms
+1515(hierarchy)ms
+1717(usually)ms
+1875(does)ms
+1980(not)ms
+2057(reflect)ms
+295 2197 m
+(the)s
+373(chronological)ms
+665(order)ms
+787(of)ms
+846(the)ms
+924(design)ms
+1072(decisions)ms
+1275(that)ms
+1367(have)ms
+1479(been)ms
+1590(made)ms
+1716([Parnas)ms
+1883(1986].)ms
+2029(Literate)ms
+295 2137 m
+(programming)s
+591(invites)ms
+748(the)ms
+833(programmer)ms
+1104(to)ms
+1167(explain)ms
+1338(the)ms
+1423(hierarchy)ms
+1636(in)ms
+1699(any)ms
+1795(order)ms
+1924(he)ms
+1996(considers)ms
+295 2077 m
+(appropriate)s
+537(and)ms
+624(in)ms
+678(terms)ms
+804(of)ms
+860(the)ms
+936(code)ms
+1045(that)ms
+1135(is)ms
+1183(actually)ms
+1356(involved.)ms
+1559(Whether)ms
+1746(this)ms
+1833(exposition)ms
+2056(is)ms
+2104(top-)ms
+295 2017 m
+(down,)s
+431(bottom-up,)ms
+664(middle-out)ms
+896(or)ms
+950(any)ms
+1035(other)ms
+1150(suitable)ms
+1318(way)ms
+1414(is)ms
+1460(entirely)ms
+1625(up)ms
+1687(to)ms
+1739(the)ms
+1812(author.)ms
+342 1957 m
+(The)s
+430(freedom)ms
+608(to)ms
+657(present)ms
+813(the)ms
+884(design)ms
+1026(hierarchy)ms
+1225(in)ms
+1275(the)ms
+1347(order)ms
+1463(desired)ms
+1619(by)ms
+1680(the)ms
+1751(programmer/author)ms
+2151(is)ms
+295 1897 m
+(considered)s
+534(a)ms
+578(vital)ms
+690(aspect)ms
+837(of)ms
+901(the)ms
+985(literate)ms
+1146(programming)ms
+1441(paradigm)ms
+1652([Bentley)ms
+1847(1986a/b].)ms
+2059(Knuth)ms
+295 1837 m
+(appreciates)s
+532(this)ms
+617(property)ms
+800(in)ms
+851(that)ms
+939(it)ms
+980("...)ms
+1051(allows)ms
+1194(a)ms
+1229(person)ms
+1375(to)ms
+1427(express)ms
+1590(programs)ms
+1791(in)ms
+1843(a)ms
+1878('stream)ms
+2041(of)ms
+2096(con-)ms
+295 1777 m
+(sciousness')s
+535(order.")ms
+686([Knuth)ms
+840(1984].)ms
+342 1717 m
+(Programming)s
+636(is)ms
+689(not)ms
+773(a)ms
+815(rational)ms
+988(design)ms
+1138(process)ms
+1308([Parnas)ms
+1478(1986].)ms
+1627(Design)ms
+1788(steps)ms
+1908(are)ms
+1989(proposed,)ms
+295 1657 m
+(explored,)s
+497(thrown)ms
+654(away)ms
+775(and)ms
+862(replaced)ms
+1047(by)ms
+1112(alternatives.)ms
+1371(For)ms
+1455(this)ms
+1543(reason)ms
+1689(it)ms
+1732(is)ms
+1780(customary)ms
+2004(in)ms
+2058(a)ms
+2096(con-)ms
+295 1597 m
+(ventional)s
+494(environment)ms
+760(to)ms
+812(produce)ms
+986(the)ms
+1060(description)ms
+1296(of)ms
+1351(a)ms
+1386(program)ms
+1569(only)ms
+1671(after)ms
+1775(its)ms
+1836(design)ms
+1980(has)ms
+2059(stabil-)ms
+295 1537 m
+(ized.)s
+402(With)ms
+513(literate)ms
+663(programming)ms
+947(the)ms
+1019(work)ms
+1134(process)ms
+1295(is)ms
+1340(much)ms
+1462(more)ms
+1576(flexible.)ms
+1753(Since)ms
+1875(the)ms
+1948(code)ms
+2054(and)ms
+2137(its)ms
+295 1477 m
+(description)s
+536(are)ms
+616(one)ms
+707(and)ms
+799(the)ms
+879(same)ms
+1001(document)ms
+1217(it)ms
+1264(is)ms
+1317(easy)ms
+1425(to)ms
+1483(jot)ms
+1555(down)ms
+1685(any)ms
+1776(noteworthy)ms
+2023(remarks)ms
+295 1417 m
+(together)s
+467(with)ms
+565(the)ms
+635(related)ms
+780(code.)ms
+895(Whether)ms
+1076(or)ms
+1127(not)ms
+1200(these)ms
+1311(remarks)ms
+1481(will)ms
+1568(mature)ms
+1716(into)ms
+1802(actual)ms
+1930(descriptions,)ms
+295 1357 m
+(depends)s
+470(mainly)ms
+621(on)ms
+683(the)ms
+756(way)ms
+851(the)ms
+924(design)ms
+1066(stabilizes.)ms
+1276(But)ms
+1360(the)ms
+1433(remarks)ms
+1606(as)ms
+1660(such)ms
+1763(are)ms
+1836(secured)ms
+2001(and)ms
+2085(there)ms
+295 1297 m
+(is)s
+340(no)ms
+403(chance)ms
+554(they)ms
+653(will)ms
+743(be)ms
+803(accidentally)ms
+1057(forgotten)ms
+1253(in)ms
+1304(the)ms
+1378(final)ms
+1482(documentation.)ms
+342 1237 m
+(A)s
+392(literate)ms
+546(program)ms
+730(can)ms
+814(\(and)ms
+918(should\))ms
+1083(be)ms
+1144(organized)ms
+1356(as)ms
+1413(a)ms
+1450(textbook)ms
+1639(and)ms
+1726(a)ms
+1763(notorious)ms
+1967(example)ms
+2151(is)ms
+295 1177 m
+(the)s
+373(TEX-program)ms
+673(by)ms
+740(Knuth)ms
+882([Knuth)ms
+1040(1986].)ms
+1187(Thus,)ms
+1316(for)ms
+1391(the)ms
+1469(sake)ms
+1575(of)ms
+1634(explaining)ms
+1862(the)ms
+1940(documented)ms
+295 1117 m
+(program,)s
+492(we)ms
+565(can)ms
+650(make)ms
+774(use)ms
+856(of)ms
+913(all)ms
+978(those)ms
+1099(features)ms
+1273(that)ms
+1363(are)ms
+1440(used)ms
+1547(for)ms
+1620(ordinary)ms
+1805(textbooks)ms
+2015(too.)ms
+2107(The)ms
+295 1057 m
+(benefits)s
+470(of)ms
+529(the)ms
+607(so)ms
+668(called)ms
+12 FBI
+805(book)ms
+919(format)ms
+1069(paradigm)ms
+12 FB
+1281(are)ms
+1359(described)ms
+1567(by)ms
+1634(Oman)ms
+1774(and)ms
+1863(Cook,)ms
+2001(who)ms
+2104(also)ms
+295 997 m
+(conducted)s
+516(experimental)ms
+793(studies)ms
+948(to)ms
+1003(verify)ms
+1138(those)ms
+1260(claims)ms
+1406([Oman)ms
+1561(1990a/1990b].)ms
+1867(It)ms
+1914(turns)ms
+2030(out)ms
+2109(that)ms
+295 937 m
+(organizing)s
+526(information)ms
+779(as)ms
+838(components)ms
+1097(of)ms
+1155(a)ms
+1195(book)ms
+1312(\(i.e.)ms
+1407(preface,)ms
+1584(table)ms
+1698(of)ms
+1757(contents,)ms
+1954(indices)ms
+2112(and)ms
+295 877 m
+(pagination,)s
+537(chapters,)ms
+734(sections,)ms
+926(paragraphs,)ms
+1177(sentences,)ms
+1399(punctuation,)ms
+1667(type)ms
+1771(style,)ms
+1897(character)ms
+2098(case)ms
+295 817 m
+(etc.\))s
+398(provides)ms
+586(a)ms
+624(variety)ms
+779(of)ms
+836(access)ms
+980(methods)ms
+1165(which)ms
+1303(have)ms
+1414(a)ms
+1452(significant)ms
+1679(impact)ms
+1831(on)ms
+1897(program)ms
+2082(com-)ms
+295 757 m
+(prehension.)s
+539(Also)ms
+647(facilities)ms
+832(like)ms
+919(figures,)ms
+1084(schemes,)ms
+1278(drawings,)ms
+1487(tables,)ms
+1629(etc.)ms
+1713(greatly)ms
+1864(extend)ms
+2011(the)ms
+2085(scale)ms
+295 697 m
+(of)s
+349(gadgets)ms
+514(that)ms
+601(can)ms
+683(be)ms
+743(thrown)ms
+897(in)ms
+949(for)ms
+1019(explanatory)ms
+1268(proposes.)ms
+11 FAB
+295 576 m
+(2.2 Interpretation by a computer)s
+12 FB
+295 494 m
+(The)s
+387(relationship)ms
+637(between)ms
+818(design)ms
+963(decisions)ms
+1164(becomes)ms
+1353(manifest)ms
+1540(when)ms
+1663(a)ms
+1700(design)ms
+1845(step)ms
+1940(is)ms
+1987(expressed)ms
+295 434 m
+(in)s
+350(terms)ms
+477(of)ms
+536(design)ms
+683(steps)ms
+799(described)ms
+1007(elsewhere)ms
+1223(in)ms
+1279(the)ms
+1356(literate)ms
+1512(program.)ms
+1710(Of)ms
+1779(course)ms
+1926(conventional)ms
+295 374 m
+(references)s
+514(to)ms
+566(names)ms
+708(are)ms
+782(solved)ms
+927(by)ms
+990(the)ms
+1065(language)ms
+1259(environment)ms
+1526(in)ms
+1579(question.)ms
+1774(But)ms
+1860(in)ms
+1913(a)ms
+1949(literate)ms
+2101(pro-)ms
+8 FB
+295 204 m
+(The)s
+355(CLiP)ms
+433(Style)ms
+510(of)ms
+546(Literate)ms
+658(Programming)ms
+850(\(4.074,)ms
+953(26-feb-93\))ms
+12 FB
+2075 204 m
+( 3 )s
+50 2 2130 216 li
+50 2 2020 216 li
+endpage
+%%Page: 3 4
+delay mfeed
+begpage
+12 FB
+295 3179 m
+(gramming)s
+518(environment)ms
+789(the)ms
+868(order)ms
+991(of)ms
+1051(the)ms
+1130(code)ms
+1242(fragments)ms
+1460(has)ms
+1545(to)ms
+1602(be)ms
+1667(indicated)ms
+1868(as)ms
+1928(well.)ms
+2044(This)ms
+2151(is)ms
+295 3119 m
+(accomplished)s
+596(by)ms
+674(placeholders)ms
+953(that)ms
+1055(refer)ms
+1177(to)ms
+1243(other)ms
+1372(code)ms
+1494(fragments)ms
+1721(in)ms
+1787(the)ms
+1875(documentation.)ms
+295 3059 m
+(Typically,)s
+510(a)ms
+544(pseudostatement)ms
+888(is)ms
+933(a)ms
+966(placeholder)ms
+1211(for)ms
+1281(the)ms
+1353(code)ms
+1459(fragment)ms
+1651(of)ms
+1703(the)ms
+1776(supplemental)ms
+2054(design)ms
+295 2999 m
+(step.)s
+409(At)ms
+481(module-generation-time)ms
+986(a)ms
+1029(literate)ms
+1190(programming)ms
+1484(system)ms
+1644(will)ms
+12 FBI
+1744(automatically)ms
+12 FB
+2040(expand)ms
+295 2939 m
+(every)s
+419(placeholder)ms
+667(into)ms
+758(the)ms
+833(intended)ms
+1019(code)ms
+1128(described)ms
+1333(elsewhere)ms
+1547(in)ms
+1600(the)ms
+1675(documentation.)ms
+1998(Since)ms
+2123(the)ms
+295 2879 m
+(module)s
+463(generation)ms
+692(process)ms
+861(is)ms
+913(not)ms
+995(disturbed)ms
+1199(by)ms
+1268(human)ms
+1422(intervention,)ms
+1695(the)ms
+1774(modules)ms
+1962(necessarily)ms
+295 2819 m
+(reflect)s
+435(the)ms
+508(code)ms
+615(as)ms
+669(it)ms
+709(appears)ms
+874(in)ms
+926(the)ms
+999(documentation.)ms
+1321(This)ms
+1423(property)ms
+1604(of)ms
+1658(literate)ms
+1810(programs)ms
+2011(has)ms
+2090(been)ms
+295 2759 m
+(dubbed)s
+12 FBI
+454(verisimilitude)ms
+12 FB
+742([Van)ms
+854(Wyk)ms
+964(1990].)ms
+342 2699 m
+(The)s
+435(documentation)ms
+747(of)ms
+804(a)ms
+842(computer)ms
+1046(program)ms
+1231(in)ms
+1285(general)ms
+1448(extends)ms
+1616(over)ms
+1720(many)ms
+1847(different)ms
+2034(files.)ms
+2148(A)ms
+295 2639 m
+(program)s
+478(itself)ms
+593(is)ms
+641(seldom)ms
+800(monolithic;)ms
+1045(virtually)ms
+1228(always)ms
+1382(it)ms
+1424(is)ms
+1472(composed)ms
+1689(of)ms
+1745(several)ms
+1901(independently)ms
+295 2579 m
+(compilable)s
+529(modules.)ms
+722(Sometimes)ms
+956(it)ms
+996(may)ms
+1094(be)ms
+1153(convenient)ms
+1384(to)ms
+1435(be)ms
+1494(able)ms
+1589(to)ms
+1640(derive)ms
+1777(several)ms
+1930(versions)ms
+2109(of)ms
+2162(a)ms
+295 2519 m
+(program)s
+477(\(e.g.)ms
+578(a)ms
+613(test)ms
+695(version)ms
+855(containing)ms
+1079(additional)ms
+1292(debugging)ms
+1516(code)ms
+1623(or)ms
+1677(different)ms
+1862(versions)ms
+2041(for)ms
+2112(dif-)ms
+295 2459 m
+(ferent)s
+425(platforms\).)ms
+660(For)ms
+744(these)ms
+861(reasons)ms
+1025(it)ms
+1066(is)ms
+1114(highly)ms
+1256(desirable)ms
+1450(that)ms
+1540(a)ms
+1576(literate)ms
+1729(programming)ms
+2015(environ-)ms
+295 2399 m
+(ment)s
+408(does)ms
+513(not)ms
+590(impose)ms
+748(restrictions)ms
+983(on)ms
+1047(the)ms
+1121(way)ms
+1218(the)ms
+1292(modules)ms
+1475(relate)ms
+1599(to)ms
+1652(the)ms
+1726(documentation.)ms
+2049(Thus)ms
+2162(a)ms
+295 2339 m
+(literate)s
+444(programming)ms
+727(tool)ms
+816(should)ms
+960(be)ms
+1018(able)ms
+1112(to)ms
+1162(extract)ms
+1309(an)ms
+1367(arbitrary)ms
+1550(set)ms
+1616(of)ms
+1669(program)ms
+1849(modules)ms
+2029(from)ms
+2137(an)ms
+295 2279 m
+(arbitrary)s
+479(set)ms
+547(of)ms
+601(documentation)ms
+911(files.)ms
+12 FAB
+295 2156 m
+(3 The CLiP approach to literate programming)s
+12 FB
+295 2069 m
+(In)s
+352(the)ms
+429(CLiP)ms
+550(approach)ms
+749(the)ms
+826(preparation)ms
+1069(of)ms
+1126(printed)ms
+1284(documentation)ms
+1597(is)ms
+1646(totally)ms
+1789(decoupled)ms
+2010(from)ms
+2123(the)ms
+295 2009 m
+(code)s
+400(extraction.)ms
+623(The)ms
+712(one)ms
+795(and)ms
+878(only)ms
+978(function)ms
+1156(of)ms
+1208(the)ms
+1280(tool)ms
+1369(CLiP)ms
+1486(itself)ms
+1597(is)ms
+1641(to)ms
+1691(extract)ms
+1838(the)ms
+1910(code)ms
+2015(from)ms
+2123(the)ms
+295 1949 m
+(documentation;)s
+618(CLiP)ms
+736(stands)ms
+874(for)ms
+945("Code)ms
+1083(from)ms
+1193(Literate)ms
+1361(Program".)ms
+342 1889 m
+(CLiP)s
+459(can)ms
+540(be)ms
+599(used)ms
+703(in)ms
+754(combination)ms
+1016(with)ms
+1117(any)ms
+1201(formatting)ms
+1424(tool)ms
+1513(and/or)ms
+1653(word-processor,)ms
+1988(as)ms
+2042(long)ms
+2143(as)ms
+295 1829 m
+(plain)s
+411(text)ms
+503(files)ms
+606(are)ms
+683(available)ms
+881(as)ms
+939(source)ms
+1086(files)ms
+1189(for)ms
+1264(the)ms
+1342(module)ms
+1508(extraction.)ms
+1737(With)ms
+1854('traditional')ms
+2110(for-)ms
+295 1769 m
+(matters)s
+455(like)ms
+543(troff)ms
+644(or)ms
+699(\(La\)TeX)ms
+887(the)ms
+961(input)ms
+1077(files)ms
+1176(of)ms
+1231(the)ms
+1305(formatter)ms
+1504(can)ms
+1586(be)ms
+1646(used)ms
+1751(\(see)ms
+1844(fig. 1a\).)ms
+2014(To)ms
+2083(use)ms
+2162(a)ms
+295 1709 m
+(modern)s
+459(word-processor,)ms
+794(the)ms
+867(CLiP)ms
+985(source)ms
+1127(files)ms
+1225(have)ms
+1331(to)ms
+1381(be)ms
+1440(generated)ms
+1647(by)ms
+1708(a)ms
+1742(suitable)ms
+1910(ASCII-export)ms
+295 1649 m
+(from)s
+404(the)ms
+478(word-processor)ms
+801(\(see)ms
+894(fig. 1b\).)ms
+396 479 m
+(Figure 1a: CLiP and a word-processor)s
+1414 479 m
+(Figure 1b: CLiP and a formatter)s
+/-save0- save def /showpage {} def
+1381 569 translate
+2362 2990 div 300 72 div mul 3342 4230 div 300 72 div mul scale
+72 300 div 72 300 div scale
+0 setlinecap
+0 setlinejoin
+5 setmiterlimit
+/itr {transform round exch round exch itransform}bind def
+/diag{
+{
+2{x cvi dup dx mod sub}repeat
+2 copy
+newpath
+cnt{
+dy add 2 copy moveto
+4 2 roll
+x dx add x
+2 copy lineto stroke
+4 2 roll
+}repeat
+pop pop
+}if
+pop pop
+}bind def
+/hatch{
+gsave
+1 slw
+[] 0 setdash
+eoclip
+/dx x def
+/dy dx def
+pathbbox
+4 copy
+3 -1 roll sub
+3 -2 roll sub sub
+dx idiv 2 add /cnt x def
+x pop 2 index x dx add 4 2 roll
+4 index diag
+/dy dy neg def
+3 index diag
+pop pop
+grestore
+}bind def
+newpath
+1 slw
+[] 0 setdash
+23 275 itr m
+209 275 itr ln
+209 13 itr ln
+23 13 itr ln
+23 275 itr ln
+st
+35 275 itr m
+35 287 itr ln
+221 287 itr ln
+221 25 itr ln
+209 25 itr ln
+st
+221 36 itr m
+233 36 itr ln
+233 299 itr ln
+46 299 itr ln
+46 287 itr ln
+st
+58 299 itr m
+58 311 itr ln
+244 311 itr ln
+244 49 itr ln
+233 49 itr ln
+st
+244 60 itr m
+256 60 itr ln
+256 323 itr ln
+70 323 itr ln
+70 311 itr ln
+st
+[] 0 setdash
+/HV findfont 10 scalefont setfont
+33 262 itr m
+(~~~~~~~~~~~~~~~~~~~~~~~~)
+currentfont /FontBBox get 3 get currentfont /FontMatrix get 3 get mul 0.800 mul neg 0 exch rm
+show
+newpath
+34 250 itr m
+(~~~~~~~~~~~~~~~~~~~~~~~~)
+currentfont /FontBBox get 3 get currentfont /FontMatrix get 3 get mul 0.800 mul neg 0 exch rm
+show
+newpath
+34 238 itr m
+(~~~~~~~~~~~~~~~~~~~~~~~~)
+currentfont /FontBBox get 3 get currentfont /FontMatrix get 3 get mul 0.800 mul neg 0 exch rm
+show
+newpath
+34 226 itr m
+(~~~~~~~~~~~~~~~~~~~~~~~~)
+currentfont /FontBBox get 3 get currentfont /FontMatrix get 3 get mul 0.800 mul neg 0 exch rm
+show
+newpath
+34 214 itr m
+(~~~~~~~~~~~~~~~~~~~~~~~~)
+currentfont /FontBBox get 3 get currentfont /FontMatrix get 3 get mul 0.800 mul neg 0 exch rm
+show
+newpath
+34 202 itr m
+(~~~~~~~~~~~~~~~~~~~~~~~~)
+currentfont /FontBBox get 3 get currentfont /FontMatrix get 3 get mul 0.800 mul neg 0 exch rm
+show
+newpath
+34 190 itr m
+(~~~~~~~~~~~~~~~~~~~~~~~~)
+currentfont /FontBBox get 3 get currentfont /FontMatrix get 3 get mul 0.800 mul neg 0 exch rm
+show
+newpath
+34 178 itr m
+(~~~~~~~~~~~~~~~~~~~~~~~~)
+currentfont /FontBBox get 3 get currentfont /FontMatrix get 3 get mul 0.800 mul neg 0 exch rm
+show
+newpath
+34 166 itr m
+(~~~~~~~~~~~~~~~~~~~~~~~~)
+currentfont /FontBBox get 3 get currentfont /FontMatrix get 3 get mul 0.800 mul neg 0 exch rm
+show
+newpath
+34 155 itr m
+(~~~~~~~~~~~~~~~~~~~~~~~~)
+currentfont /FontBBox get 3 get currentfont /FontMatrix get 3 get mul 0.800 mul neg 0 exch rm
+show
+newpath
+34 143 itr m
+(~~~~~~~~~~~~~~~~~~~~~~~~)
+currentfont /FontBBox get 3 get currentfont /FontMatrix get 3 get mul 0.800 mul neg 0 exch rm
+show
+newpath
+34 131 itr m
+(~~~~~~~~~~~~~~~~~~~~~~~~)
+currentfont /FontBBox get 3 get currentfont /FontMatrix get 3 get mul 0.800 mul neg 0 exch rm
+show
+newpath
+34 119 itr m
+(~~~~~~~~~~~~~~~~~~~~~~~~)
+currentfont /FontBBox get 3 get currentfont /FontMatrix get 3 get mul 0.800 mul neg 0 exch rm
+show
+newpath
+34 107 itr m
+(~~~~~~~~~~~~~~~~~~~~~~~~)
+currentfont /FontBBox get 3 get currentfont /FontMatrix get 3 get mul 0.800 mul neg 0 exch rm
+show
+newpath
+34 95 itr m
+(~~~~~~~~~~~~~~~~~~~~~~~~)
+currentfont /FontBBox get 3 get currentfont /FontMatrix get 3 get mul 0.800 mul neg 0 exch rm
+show
+newpath
+34 83 itr m
+(~~~~~~~~~~~~~~~~~~~~~~~~)
+currentfont /FontBBox get 3 get currentfont /FontMatrix get 3 get mul 0.800 mul neg 0 exch rm
+show
+newpath
+34 71 itr m
+(~~~~~~~~~~~~~~~~~~~~~~~~)
+currentfont /FontBBox get 3 get currentfont /FontMatrix get 3 get mul 0.800 mul neg 0 exch rm
+show
+newpath
+34 59 itr m
+(~~~~~~~~~~~~~~~~~~~~~~~~)
+currentfont /FontBBox get 3 get currentfont /FontMatrix get 3 get mul 0.800 mul neg 0 exch rm
+show
+newpath
+34 47 itr m
+(~~~~~~~~~~~~~~~~~~~~~~~~)
+currentfont /FontBBox get 3 get currentfont /FontMatrix get 3 get mul 0.800 mul neg 0 exch rm
+show
+newpath
+34 35 itr m
+(~~~~~~~~~~~~~~~~~~~~~~~~)
+currentfont /FontBBox get 3 get currentfont /FontMatrix get 3 get mul 0.800 mul neg 0 exch rm
+show
+newpath
+/TR findfont 49 scalefont setfont
+347 323 itr m
+(Compiler/Linker)
+currentfont /FontBBox get 3 get currentfont /FontMatrix get 3 get mul 0.800 mul neg 0 exch rm
+show
+newpath
+13 1195 itr m
+(Wordprocessor)
+currentfont /FontBBox get 3 get currentfont /FontMatrix get 3 get mul 0.800 mul neg 0 exch rm
+show
+newpath
+[] 0 setdash
+522 171 itr m
+834 171 itr ln
+st
+487 91 t
+85 84 scale
+0 0 1 -67.5 67.6 arc
+1 85 div 1 84 div scale
+-487 -91 t
+st
+800 91 t
+84 84 scale
+0 0 1 -67.3 67.4 arc
+1 84 div 1 84 div scale
+-800 -91 t
+st
+834 15 itr m
+522 15 itr ln
+st
+[] 0 setdash
+/HV findfont 49 scalefont setfont
+713 136 itr m
+(Executables)
+currentfont /FontBBox get 3 get currentfont /FontMatrix get 3 get mul 0.800 mul neg 0 exch rm
+dup stringwidth pop round cvi neg 2 idiv 0 rm show
+newpath
+/HV findfont 41 scalefont setfont
+713 76 itr m
+(\(binary\))
+currentfont /FontBBox get 3 get currentfont /FontMatrix get 3 get mul 0.800 mul neg 0 exch rm
+dup stringwidth pop round cvi neg 2 idiv 0 rm show
+newpath
+[] 0 setdash
+522 598 itr m
+834 598 itr ln
+st
+487 517 t
+85 85 scale
+0 0 1 -67.3 67.4 arc
+1 85 div 1 85 div scale
+-487 -517 t
+st
+800 517 t
+84 85 scale
+0 0 1 -67.1 67.2 arc
+1 84 div 1 85 div scale
+-800 -517 t
+st
+834 442 itr m
+522 442 itr ln
+st
+[] 0 setdash
+/HV findfont 49 scalefont setfont
+713 563 itr m
+(Modules)
+currentfont /FontBBox get 3 get currentfont /FontMatrix get 3 get mul 0.800 mul neg 0 exch rm
+dup stringwidth pop round cvi neg 2 idiv 0 rm show
+newpath
+/HV findfont 41 scalefont setfont
+713 503 itr m
+(\(ASCII\))
+currentfont /FontBBox get 3 get currentfont /FontMatrix get 3 get mul 0.800 mul neg 0 exch rm
+dup stringwidth pop round cvi neg 2 idiv 0 rm show
+newpath
+[] 0 setdash
+721 868 itr m
+721 634 itr ln
+st
+721 597 itr m
+730 634 itr ln
+712 634 itr ln
+closepath
+0.00 0.00 0.00 setrgbcolor
+gsave
+eofill
+grestore
+0.00 setgray
+st
+721 442 itr m
+721 207 itr ln
+st
+721 170 itr m
+730 207 itr ln
+712 207 itr ln
+closepath
+0.00 0.00 0.00 setrgbcolor
+gsave
+eofill
+grestore
+0.00 setgray
+st
+[] 0 setdash
+/TR findfont 49 scalefont setfont
+554 749 itr m
+(CLiP)
+currentfont /FontBBox get 3 get currentfont /FontMatrix get 3 get mul 0.800 mul neg 0 exch rm
+show
+newpath
+[] 0 setdash
+523 1257 itr m
+835 1257 itr ln
+st
+487 1177 t
+85 85 scale
+0 0 1 -67.3 67.4 arc
+1 85 div 1 85 div scale
+-487 -1177 t
+st
+800 1177 t
+84 85 scale
+0 0 1 -67.1 67.2 arc
+1 84 div 1 85 div scale
+-800 -1177 t
+st
+835 1101 itr m
+523 1101 itr ln
+st
+[] 0 setdash
+/HV findfont 49 scalefont setfont
+713 1222 itr m
+(Source files)
+currentfont /FontBBox get 3 get currentfont /FontMatrix get 3 get mul 0.800 mul neg 0 exch rm
+dup stringwidth pop round cvi neg 2 idiv 0 rm show
+newpath
+/HV findfont 41 scalefont setfont
+713 1163 itr m
+(\(?????\))
+currentfont /FontBBox get 3 get currentfont /FontMatrix get 3 get mul 0.800 mul neg 0 exch rm
+dup stringwidth pop round cvi neg 2 idiv 0 rm show
+newpath
+[] 0 setdash
+523 1024 itr m
+835 1024 itr ln
+st
+487 944 t
+85 85 scale
+0 0 1 -67.3 67.4 arc
+1 85 div 1 85 div scale
+-487 -944 t
+st
+800 944 t
+84 85 scale
+0 0 1 -67.1 67.2 arc
+1 84 div 1 85 div scale
+-800 -944 t
+st
+835 868 itr m
+523 868 itr ln
+st
+[] 0 setdash
+/HV findfont 49 scalefont setfont
+713 989 itr m
+(Export files)
+currentfont /FontBBox get 3 get currentfont /FontMatrix get 3 get mul 0.800 mul neg 0 exch rm
+dup stringwidth pop round cvi neg 2 idiv 0 rm show
+newpath
+/HV findfont 41 scalefont setfont
+713 930 itr m
+(\(ASCII\))
+currentfont /FontBBox get 3 get currentfont /FontMatrix get 3 get mul 0.800 mul neg 0 exch rm
+dup stringwidth pop round cvi neg 2 idiv 0 rm show
+newpath
+[] 0 setdash
+217 1138 itr m
+217 944 itr ln
+530 944 itr ln
+st
+566 944 itr m
+530 953 itr ln
+530 935 itr ln
+closepath
+0.00 0.00 0.00 setrgbcolor
+gsave
+eofill
+grestore
+0.00 setgray
+st
+372 1176 itr m
+530 1176 itr ln
+st
+566 1176 itr m
+530 1186 itr ln
+530 1167 itr ln
+closepath
+0.00 0.00 0.00 setrgbcolor
+gsave
+eofill
+grestore
+0.00 setgray
+st
+140 1138 itr m
+140 360 itr ln
+st
+140 323 itr m
+149 360 itr ln
+130 360 itr ln
+closepath
+0.00 0.00 0.00 setrgbcolor
+gsave
+eofill
+grestore
+0.00 setgray
+st
+
+ -save0- restore
+/-save0- save def /showpage {} def
+424 569 translate
+2362 3223 div 300 72 div mul 2788 3803 div 300 72 div mul scale
+72 300 div 72 300 div scale
+0 setlinecap
+0 setlinejoin
+5 setmiterlimit
+/itr {transform round exch round exch itransform}bind def
+/diag{
+{
+2{x cvi dup dx mod sub}repeat
+2 copy
+newpath
+cnt{
+dy add 2 copy moveto
+4 2 roll
+x dx add x
+2 copy lineto stroke
+4 2 roll
+}repeat
+pop pop
+}if
+pop pop
+}bind def
+/hatch{
+gsave
+1 slw
+[] 0 setdash
+eoclip
+/dx x def
+/dy dx def
+pathbbox
+4 copy
+3 -1 roll sub
+3 -2 roll sub sub
+dx idiv 2 add /cnt x def
+x pop 2 index x dx add 4 2 roll
+4 index diag
+/dy dy neg def
+3 index diag
+pop pop
+grestore
+}bind def
+newpath
+1 slw
+[] 0 setdash
+14 303 itr m
+219 303 itr ln
+219 14 itr ln
+14 14 itr ln
+14 303 itr ln
+st
+27 303 itr m
+27 316 itr ln
+232 316 itr ln
+232 27 itr ln
+219 27 itr ln
+st
+232 40 itr m
+245 40 itr ln
+245 329 itr ln
+39 329 itr ln
+39 316 itr ln
+st
+52 329 itr m
+52 343 itr ln
+257 343 itr ln
+257 54 itr ln
+245 54 itr ln
+st
+257 67 itr m
+270 67 itr ln
+270 356 itr ln
+65 356 itr ln
+65 343 itr ln
+st
+[] 0 setdash
+/HV findfont 12 scalefont setfont
+25 288 itr m
+(~~~~~~~~~~~~~~~~~~~~~~~~)
+currentfont /FontBBox get 3 get currentfont /FontMatrix get 3 get mul 0.800 mul neg 0 exch rm
+show
+newpath
+25 275 itr m
+(~~~~~~~~~~~~~~~~~~~~~~~~)
+currentfont /FontBBox get 3 get currentfont /FontMatrix get 3 get mul 0.800 mul neg 0 exch rm
+show
+newpath
+25 262 itr m
+(~~~~~~~~~~~~~~~~~~~~~~~~)
+currentfont /FontBBox get 3 get currentfont /FontMatrix get 3 get mul 0.800 mul neg 0 exch rm
+show
+newpath
+25 249 itr m
+(~~~~~~~~~~~~~~~~~~~~~~~~)
+currentfont /FontBBox get 3 get currentfont /FontMatrix get 3 get mul 0.800 mul neg 0 exch rm
+show
+newpath
+25 236 itr m
+(~~~~~~~~~~~~~~~~~~~~~~~~)
+currentfont /FontBBox get 3 get currentfont /FontMatrix get 3 get mul 0.800 mul neg 0 exch rm
+show
+newpath
+25 223 itr m
+(~~~~~~~~~~~~~~~~~~~~~~~~)
+currentfont /FontBBox get 3 get currentfont /FontMatrix get 3 get mul 0.800 mul neg 0 exch rm
+show
+newpath
+25 210 itr m
+(~~~~~~~~~~~~~~~~~~~~~~~~)
+currentfont /FontBBox get 3 get currentfont /FontMatrix get 3 get mul 0.800 mul neg 0 exch rm
+show
+newpath
+25 196 itr m
+(~~~~~~~~~~~~~~~~~~~~~~~~)
+currentfont /FontBBox get 3 get currentfont /FontMatrix get 3 get mul 0.800 mul neg 0 exch rm
+show
+newpath
+25 183 itr m
+(~~~~~~~~~~~~~~~~~~~~~~~~)
+currentfont /FontBBox get 3 get currentfont /FontMatrix get 3 get mul 0.800 mul neg 0 exch rm
+show
+newpath
+25 170 itr m
+(~~~~~~~~~~~~~~~~~~~~~~~~)
+currentfont /FontBBox get 3 get currentfont /FontMatrix get 3 get mul 0.800 mul neg 0 exch rm
+show
+newpath
+25 157 itr m
+(~~~~~~~~~~~~~~~~~~~~~~~~)
+currentfont /FontBBox get 3 get currentfont /FontMatrix get 3 get mul 0.800 mul neg 0 exch rm
+show
+newpath
+25 144 itr m
+(~~~~~~~~~~~~~~~~~~~~~~~~)
+currentfont /FontBBox get 3 get currentfont /FontMatrix get 3 get mul 0.800 mul neg 0 exch rm
+show
+newpath
+25 131 itr m
+(~~~~~~~~~~~~~~~~~~~~~~~~)
+currentfont /FontBBox get 3 get currentfont /FontMatrix get 3 get mul 0.800 mul neg 0 exch rm
+show
+newpath
+25 118 itr m
+(~~~~~~~~~~~~~~~~~~~~~~~~)
+currentfont /FontBBox get 3 get currentfont /FontMatrix get 3 get mul 0.800 mul neg 0 exch rm
+show
+newpath
+25 105 itr m
+(~~~~~~~~~~~~~~~~~~~~~~~~)
+currentfont /FontBBox get 3 get currentfont /FontMatrix get 3 get mul 0.800 mul neg 0 exch rm
+show
+newpath
+25 91 itr m
+(~~~~~~~~~~~~~~~~~~~~~~~~)
+currentfont /FontBBox get 3 get currentfont /FontMatrix get 3 get mul 0.800 mul neg 0 exch rm
+show
+newpath
+25 78 itr m
+(~~~~~~~~~~~~~~~~~~~~~~~~)
+currentfont /FontBBox get 3 get currentfont /FontMatrix get 3 get mul 0.800 mul neg 0 exch rm
+show
+newpath
+25 65 itr m
+(~~~~~~~~~~~~~~~~~~~~~~~~)
+currentfont /FontBBox get 3 get currentfont /FontMatrix get 3 get mul 0.800 mul neg 0 exch rm
+show
+newpath
+25 52 itr m
+(~~~~~~~~~~~~~~~~~~~~~~~~)
+currentfont /FontBBox get 3 get currentfont /FontMatrix get 3 get mul 0.800 mul neg 0 exch rm
+show
+newpath
+25 39 itr m
+(~~~~~~~~~~~~~~~~~~~~~~~~)
+currentfont /FontBBox get 3 get currentfont /FontMatrix get 3 get mul 0.800 mul neg 0 exch rm
+show
+newpath
+/TR findfont 54 scalefont setfont
+370 356 itr m
+(Compiler/Linker)
+currentfont /FontBBox get 3 get currentfont /FontMatrix get 3 get mul 0.800 mul neg 0 exch rm
+show
+newpath
+[] 0 setdash
+350 1039 itr m
+566 1039 itr ln
+st
+606 1039 itr m
+566 1049 itr ln
+566 1028 itr ln
+closepath
+0.00 0.00 0.00 setrgbcolor
+gsave
+eofill
+grestore
+0.00 setgray
+st
+[] 0 setdash
+176 1064 itr m
+(Editor)
+currentfont /FontBBox get 3 get currentfont /FontMatrix get 3 get mul 0.800 mul neg 0 exch rm
+show
+newpath
+[] 0 setdash
+554 188 itr m
+898 188 itr ln
+st
+516 100 t
+93 93 scale
+0 0 1 -67.3 67.4 arc
+1 93 div 1 93 div scale
+-516 -100 t
+st
+860 100 t
+93 93 scale
+0 0 1 -67.3 67.4 arc
+1 93 div 1 93 div scale
+-860 -100 t
+st
+898 16 itr m
+554 16 itr ln
+st
+[] 0 setdash
+/HV findfont 54 scalefont setfont
+764 150 itr m
+(Executables)
+currentfont /FontBBox get 3 get currentfont /FontMatrix get 3 get mul 0.800 mul neg 0 exch rm
+dup stringwidth pop round cvi neg 2 idiv 0 rm show
+newpath
+/HV findfont 45 scalefont setfont
+764 84 itr m
+(\(binary\))
+currentfont /FontBBox get 3 get currentfont /FontMatrix get 3 get mul 0.800 mul neg 0 exch rm
+dup stringwidth pop round cvi neg 2 idiv 0 rm show
+newpath
+[] 0 setdash
+554 658 itr m
+898 658 itr ln
+st
+516 570 t
+93 93 scale
+0 0 1 -67.3 67.4 arc
+1 93 div 1 93 div scale
+-516 -570 t
+st
+860 570 t
+93 93 scale
+0 0 1 -67.3 67.4 arc
+1 93 div 1 93 div scale
+-860 -570 t
+st
+898 486 itr m
+554 486 itr ln
+st
+[] 0 setdash
+/HV findfont 54 scalefont setfont
+764 619 itr m
+(Modules)
+currentfont /FontBBox get 3 get currentfont /FontMatrix get 3 get mul 0.800 mul neg 0 exch rm
+dup stringwidth pop round cvi neg 2 idiv 0 rm show
+newpath
+/HV findfont 45 scalefont setfont
+764 554 itr m
+(\(ASCII\))
+currentfont /FontBBox get 3 get currentfont /FontMatrix get 3 get mul 0.800 mul neg 0 exch rm
+dup stringwidth pop round cvi neg 2 idiv 0 rm show
+newpath
+[] 0 setdash
+555 1127 itr m
+898 1127 itr ln
+st
+516 1039 t
+93 93 scale
+0 0 1 -67.3 67.4 arc
+1 93 div 1 93 div scale
+-516 -1039 t
+st
+860 1039 t
+93 93 scale
+0 0 1 -67.3 67.4 arc
+1 93 div 1 93 div scale
+-860 -1039 t
+st
+898 955 itr m
+555 955 itr ln
+st
+[] 0 setdash
+/HV findfont 54 scalefont setfont
+764 1089 itr m
+(Source files)
+currentfont /FontBBox get 3 get currentfont /FontMatrix get 3 get mul 0.800 mul neg 0 exch rm
+dup stringwidth pop round cvi neg 2 idiv 0 rm show
+newpath
+/HV findfont 45 scalefont setfont
+764 1024 itr m
+(\(ASCII\))
+currentfont /FontBBox get 3 get currentfont /FontMatrix get 3 get mul 0.800 mul neg 0 exch rm
+dup stringwidth pop round cvi neg 2 idiv 0 rm show
+newpath
+[] 0 setdash
+781 956 itr m
+781 697 itr ln
+st
+781 657 itr m
+792 697 itr ln
+771 697 itr ln
+closepath
+0.00 0.00 0.00 setrgbcolor
+gsave
+eofill
+grestore
+0.00 setgray
+st
+782 486 itr m
+782 227 itr ln
+st
+782 187 itr m
+792 227 itr ln
+772 227 itr ln
+closepath
+0.00 0.00 0.00 setrgbcolor
+gsave
+eofill
+grestore
+0.00 setgray
+st
+654 953 itr m
+654 911 itr ln
+185 911 itr ln
+185 396 itr ln
+st
+185 356 itr m
+195 396 itr ln
+174 396 itr ln
+closepath
+0.00 0.00 0.00 setrgbcolor
+gsave
+eofill
+grestore
+0.00 setgray
+st
+[] 0 setdash
+/TR findfont 54 scalefont setfont
+614 824 itr m
+(CLiP)
+currentfont /FontBBox get 3 get currentfont /FontMatrix get 3 get mul 0.800 mul neg 0 exch rm
+show
+newpath
+/TR findfont 54 scalefont setfont
+99 526 itr m
+90 rotate
+(Formatter)
+currentfont /FontBBox get 3 get currentfont /FontMatrix get 3 get mul 0.800 mul neg 0 exch rm
+show
+-90 rotate
+newpath
+
+ -save0- restore
+8 FB
+295 204 m
+(The)s
+355(CLiP)ms
+433(Style)ms
+510(of)ms
+546(Literate)ms
+658(Programming)ms
+850(\(4.074,)ms
+953(26-feb-93\))ms
+12 FB
+2075 204 m
+( 4 )s
+50 2 2130 216 li
+50 2 2020 216 li
+endpage
+%%Page: 4 5
+delay mfeed
+begpage
+12 FB
+295 3179 m
+(The)s
+386(independence)ms
+675(of)ms
+730(text)ms
+819(processing)ms
+1046(and)ms
+1132(CLiPping)ms
+1340(was)ms
+1432(one)ms
+1517(of)ms
+1573(our)ms
+1653(initial)ms
+1783(requirements.)ms
+2071(Other)ms
+295 3119 m
+(requirements)s
+567(included)ms
+751(a)ms
+785(total)ms
+886(independence)ms
+1173(of)ms
+1226(target)ms
+1352(\(programming\))ms
+1669(language)ms
+1861(and)ms
+1945(the)ms
+2018(freedom)ms
+295 3059 m
+(to)s
+346(describe)ms
+526(several)ms
+681(modules)ms
+863(in)ms
+915(one)ms
+1000(document)ms
+1211(or)ms
+1265(a)ms
+1300(set)ms
+1369(of)ms
+1424(related)ms
+1573(documents.)ms
+1815(We)ms
+1897(return)ms
+2030(to)ms
+2082(these)ms
+295 2999 m
+(ideas)s
+412(in)ms
+466(section)ms
+622(3.3.)ms
+712(Last)ms
+813(but)ms
+892(not)ms
+971(least)ms
+1077(we)ms
+1150(wanted)ms
+1309(the)ms
+1385(code)ms
+1495(contained)ms
+1704(in)ms
+1758(the)ms
+1834(documentation)ms
+2146(to)ms
+295 2939 m
+(look)s
+396(natural.)ms
+560(More)ms
+681(specifically,)ms
+936(it)ms
+976(should)ms
+1122(not)ms
+1199(contain)ms
+1358(special)ms
+1510(commands)ms
+1739(for)ms
+1810(the)ms
+1883(code)ms
+1990(extractor.)ms
+342 2879 m
+(The)s
+436(placeholders)ms
+705(introduced)ms
+935(in)ms
+991(the)ms
+1068(process)ms
+1234(of)ms
+1293(literate)ms
+1448(programming)ms
+1737(must)ms
+1850(look)ms
+1956(natural,)ms
+2123(yet)ms
+295 2819 m
+(have)s
+408(to)ms
+467(be)ms
+533(distinguished)ms
+820(from)ms
+936('normal')ms
+1131(code.)ms
+1257(Placeholders)ms
+1532(may)ms
+1637(be)ms
+1704(used)ms
+1815(to)ms
+1874(represent)ms
+2076(pseu-)ms
+295 2759 m
+(do-statements,)s
+597(but)ms
+672(also)ms
+764(to)ms
+815(indicate)ms
+985(locations)ms
+1177(where)ms
+1311(definitions,)ms
+1550(declarations,)ms
+1815(externals)ms
+2008(etc.)ms
+2090(have)ms
+295 2699 m
+(to)s
+347(be)ms
+409(included.)ms
+607(In)ms
+663(fact)ms
+752(the)ms
+827(nature)ms
+966(of)ms
+1022(the)ms
+1097('code')ms
+1239(to)ms
+1292(be)ms
+1353(inserted)ms
+1525(does)ms
+1631(not)ms
+1709(really)ms
+1837(matter:)ms
+1993(even)ms
+2101(data)ms
+295 2639 m
+(files)s
+397(may)ms
+500(be)ms
+564(organised)ms
+775(in)ms
+831(this)ms
+920(way.)ms
+1033(Usually,)ms
+1218(in)ms
+1273(algorithm)ms
+1484(development)ms
+1759(the)ms
+1837(placeholders)ms
+2107(\(i.e.)ms
+295 2579 m
+(pseudocode\))s
+562(are)ms
+639(represented)ms
+884(in)ms
+938(the)ms
+1015(form)ms
+1127(of)ms
+1184(comments)ms
+1405(inside)ms
+1539(fragments)ms
+1754(of)ms
+1811(code.)ms
+1933(CLiP)ms
+2054(adopts)ms
+295 2519 m
+(this)s
+382(convention)ms
+620(for)ms
+694(all)ms
+759(other)ms
+877(placeholders)ms
+1146(as)ms
+1203(well.)ms
+1317(Thus)ms
+1432(in)ms
+1487(the)ms
+1563(CLiP)ms
+1684(approach)ms
+1883(all)ms
+1948(information)ms
+295 2459 m
+(relevant)s
+466(to)ms
+515(the)ms
+587(code)ms
+692(extraction)ms
+902(is)ms
+946(represented)ms
+1187(by)ms
+1247(a)ms
+1280(naturally)ms
+1468(looking)ms
+1631(coding)ms
+1778(style,)ms
+1895(viz.)ms
+1979(comments)ms
+295 2399 m
+(that)s
+382(resemble)ms
+575(pseudo-statements.)ms
+342 2339 m
+(This)s
+440(representation)ms
+733(is)ms
+777(expounded)ms
+1006(in)ms
+1054(the)ms
+1125(following)ms
+1330(subsections:)ms
+1584(first)ms
+1674(we)ms
+1743(look)ms
+1841(at)ms
+1887(the)ms
+1958(bare)ms
+2054(syntax)ms
+295 2279 m
+(of)s
+352(CLiP,)ms
+486(next)ms
+588(some)ms
+709(additional)ms
+925(conventions)ms
+1182(are)ms
+1259(presented.)ms
+1479(In)ms
+1537(section)ms
+1694(3.3)ms
+1772(we)ms
+1847(investigate)ms
+2079(some)ms
+295 2219 m
+(advanced)s
+495(ways)ms
+609(of)ms
+662(using)ms
+782(CLiP.)ms
+912(The)ms
+1001(appendices)ms
+1234(A)ms
+1282(and)ms
+1366(B)ms
+1411(contain)ms
+1569(a)ms
+1603(small,)ms
+1735(yet)ms
+1808(complete,)ms
+2015(example)ms
+295 2159 m
+(of)s
+345(a)ms
+377(literate)ms
+525(program)ms
+704(in)ms
+752(CLiP)ms
+867(style)ms
+970(which)ms
+1102(is)ms
+1144(augmented)ms
+1373(with)ms
+1471(line)ms
+1556(numbers.)ms
+1750(The)ms
+1837(numbers)ms
+2018(between)ms
+295 2099 m
+("<")s
+376(and)ms
+461(">")ms
+542(in)ms
+594(the)ms
+667(discussion)ms
+888(below)ms
+1023(refer)ms
+1130(to)ms
+1181(these)ms
+1296(lines.)ms
+11 FAB
+295 1979 m
+(3.1 Basic syntax of CLiP)s
+12 FB
+295 1897 m
+(In)s
+350(the)ms
+424(structure)ms
+613(of)ms
+668(a)ms
+704(CLiP-document,)ms
+1050(as)ms
+1105(far)ms
+1174(as)ms
+1229(module)ms
+1393(extraction)ms
+1606(is)ms
+1653(concerned,)ms
+1885(we)ms
+1957(may)ms
+2057(distin-)ms
+295 1837 m
+(guish)s
+415(four)ms
+511(syntax)ms
+654(levels:)ms
+342 1777 m
+(1.)s
+391(division)ms
+564(in)ms
+615(active)ms
+746(parts)ms
+855(with)ms
+956(a)ms
+990(special)ms
+1141(meaning)ms
+1325(to)ms
+1375(CLiP)ms
+1493(\(code)ms
+1616(fragments\))ms
+1844(and)ms
+1928(passive)ms
+2087(parts)ms
+392 1717 m
+(which)s
+526(CLiP)ms
+644(ignores)ms
+804(\(descriptions\),)ms
+342 1657 m
+(2.)s
+392(structure)ms
+579(of)ms
+633(the)ms
+707(active)ms
+839(parts:)ms
+962(the)ms
+1036(segments,)ms
+342 1597 m
+(3.)s
+392(internal)ms
+557(structure)ms
+744(of)ms
+798(segments,)ms
+342 1537 m
+(4.)s
+392(the)ms
+465(concrete)ms
+647(syntax.)ms
+295 1477 m
+(The)s
+382(first)ms
+473(three)ms
+583(levels)ms
+710(constitute)ms
+915(the)ms
+986(abstract)ms
+1152(syntax)ms
+1293(in)ms
+1342(which)ms
+1474(the)ms
+1545(basic)ms
+1658(entities)ms
+1813(are)ms
+1884(complete)ms
+2078(lines.)ms
+295 1417 m
+(At)s
+357(the)ms
+431(fourth)ms
+565(level)ms
+675(the)ms
+749(internal)ms
+914(structure)ms
+1101(of)ms
+1155(these)ms
+1271(lines)ms
+1378(is)ms
+1424(taken)ms
+1544(into)ms
+1635(account.)ms
+342 1357 m
+(The)s
+432(purpose)ms
+604(of)ms
+659(the)ms
+733(extraction)ms
+946(tool)ms
+1037(is)ms
+1084(to)ms
+1136(process)ms
+1299(only)ms
+1401(those)ms
+1519(lines)ms
+1627(that)ms
+1715('look)ms
+1834(like')ms
+1939(code)ms
+2046(or)ms
+2101(pro-)ms
+295 1297 m
+(gramming)s
+517(language)ms
+715(comments)ms
+938(\(all)ms
+1021(numbered)ms
+1238(lines\).)ms
+1379(To)ms
+1452(keep)ms
+1563(the)ms
+1642(parser)ms
+1781(independent)ms
+2042(of)ms
+2101(pro-)ms
+295 1237 m
+(gramming)s
+520(languages,)ms
+753(only)ms
+862(comment)ms
+1068(lines)ms
+1183(with)ms
+1292(a)ms
+1334(special)ms
+1493(appearance)ms
+1738(trigger)ms
+1892(the)ms
+1973(process)ms
+2143(of)ms
+295 1177 m
+(CLiPping.)s
+514(We)ms
+596(call)ms
+681(these)ms
+796(lines)ms
+903(CLiP-lines)ms
+1132(<e.g.)ms
+1245(1,)ms
+1295(7,)ms
+1345(8,)ms
+1395(16,)ms
+1470(17,)ms
+1545(20,)ms
+1620(26-29,)ms
+1762(32>.)ms
+342 1117 m
+(At)s
+412(the)ms
+494(first)ms
+595(level)ms
+713(of)ms
+775(syntax)ms
+926(we)ms
+1005(distinguish)ms
+1245(descriptions)ms
+1508(\(all)ms
+1595(unnumbered)ms
+1865(lines\))ms
+1997(and)ms
+2090(code)ms
+295 1057 m
+(fragments,)s
+519(in)ms
+571(the)ms
+644(terminology)ms
+901(of)ms
+956(CLiP)ms
+1074(called)ms
+1206('stubs')ms
+1354(\(e.g.)ms
+1456(1-7,)ms
+1547(8-32,)ms
+1664(37-38,)ms
+1805(39-41,)ms
+1947(49-75\):)ms
+10 FL
+531 969 m
+(Source-file)s
+753(==)ms
+815(Description)ms
+1063(\()ms
+1090(Stub)ms
+1202(Description)ms
+1439(\))ms
+7.2 FB
+1455 991 m
+(*)s
+12 FB
+295 892 m
+(At)s
+356(the)ms
+428(second)ms
+578(level)ms
+686(the)ms
+758(internal)ms
+922(structure)ms
+1108(of)ms
+10 FL
+1161(Stub)ms
+12 FB
+(s)s
+1280(is)ms
+1325(introduced.)ms
+1562(Each)ms
+1673(stub)ms
+1768(starts)ms
+1884(with)ms
+1985(a)ms
+2018(segment)ms
+295 832 m
+(of)s
+351(CLiP-lines)ms
+583(stating)ms
+732(the)ms
+808(name)ms
+931(\(and)ms
+1035(optionally)ms
+1253(some)ms
+1374(properties\))ms
+1606(of)ms
+1662(the)ms
+1739(stub)ms
+1837(<typically)ms
+2055(49-51,)ms
+295 772 m
+(86-88>.)s
+465(The)ms
+556(stub)ms
+653(ends)ms
+758(with)ms
+860(a)ms
+895(segment)ms
+1075(of)ms
+1130(CLiP-lines)ms
+1360(containing)ms
+1585(a)ms
+1620(special)ms
+1772('end)ms
+1874(string')ms
+2018(<41,)ms
+2122(75,)ms
+295 712 m
+(109>.)s
+421(Any)ms
+519(segment)ms
+696(of)ms
+749(CLiP-lines)ms
+977(in)ms
+1027(between)ms
+1205(constitutes)ms
+1430(a)ms
+10 FL
+1463(Slot-segment)ms
+12 FB
+1735(<54-57,)ms
+1904(61-64,)ms
+2055(68-70,)ms
+295 652 m
+(105-107>.)s
+516(Note)ms
+628(that)ms
+717('slot')ms
+837(is)ms
+885(the)ms
+960(CLiP)ms
+1080(terminology)ms
+1339(for)ms
+1411(a)ms
+1448(placeholder.)ms
+1708(All)ms
+1786(non-CLiP-lines)ms
+2109(in)ms
+2162(a)ms
+295 592 m
+(stub)s
+390(establish)ms
+578(the)ms
+10 FL
+651(Code-segment)ms
+12 FB
+(s)s
+991(<52-53,)ms
+1161(58-60,)ms
+1303(65-67,)ms
+1444(71-74,)ms
+1586(89-104,)ms
+1752(108>:)ms
+10 FL
+531 504 m
+(Stub)s
+631(==)ms
+693(Stub-segment)ms
+984(\()ms
+1011(Code-segment)ms
+1330(|)ms
+1369(Slot-segment)ms
+1642(\))ms
+7.2 FB
+1658 526 m
+(*)s
+10 FL
+1684 504 m
+(End-segment)s
+8 FB
+295 204 m
+(The)s
+355(CLiP)ms
+433(Style)ms
+510(of)ms
+546(Literate)ms
+658(Programming)ms
+850(\(4.074,)ms
+953(26-feb-93\))ms
+12 FB
+2075 204 m
+( 5 )s
+50 2 2130 216 li
+50 2 2020 216 li
+endpage
+%%Page: 5 6
+delay mfeed
+begpage
+12 FB
+295 3179 m
+(Although)s
+498(descriptions)ms
+754(do)ms
+818(not)ms
+896(have)ms
+1005(an)ms
+1066(internal)ms
+1233(structure,)ms
+1435(we)ms
+1507(introduce)ms
+1710(the)ms
+1786(notion)ms
+1928(of)ms
+1984(a)ms
+10 FL
+2020(Descrip-)ms
+10 FL
+295 3119 m
+(tion-segment)s
+12 FB
+573(for)ms
+644(completeness)ms
+926(sake:)ms
+10 FL
+531 3031 m
+(Description)s
+768(==)ms
+830(Description-segment)ms
+12 FB
+295 2954 m
+(The)s
+10 FL
+392(Stub-segments)ms
+12 FB
+(,)s
+10 FL
+720(Slot-segments)ms
+12 FB
+1018(and)ms
+10 FL
+1110(End-segments)ms
+12 FB
+1413(consist)ms
+1572(entirely)ms
+1745(of)ms
+1806(consecutive)ms
+2062(CLiP-)ms
+295 2894 m
+(lines.)s
+415(Each)ms
+529(one)ms
+615(starts)ms
+734(with)ms
+837(a)ms
+873(CLiP-line)ms
+1084(that)ms
+1173(contains)ms
+1354(additional)ms
+1567(characters)ms
+1784(<49,)ms
+1888(54,)ms
+1965(61>)ms
+2057(to)ms
+2109(dis-)ms
+295 2834 m
+(tinguish)s
+471(it)ms
+515(from)ms
+628(ordinary)ms
+813(comments)ms
+1034(<10,)ms
+1141(11,)ms
+1219(12,)ms
+1297(117,)ms
+1401(123>)ms
+1520(as)ms
+1577(well)ms
+1679(as)ms
+1736(from)ms
+1849(other)ms
+1968(CLiP-lines)ms
+295 2774 m
+(<50,)s
+399(51,)ms
+476(55,)ms
+552(56>.)ms
+657(Such)ms
+771(starting)ms
+934(lines,)ms
+1055(named)ms
+10 FL
+1203(L1)ms
+12 FB
+1259(and)ms
+10 FL
+1345(L2)ms
+12 FB
+(,)s
+1414(basically)ms
+1605(have)ms
+1714(the)ms
+1789(same)ms
+1905(structure.)ms
+2107(The)ms
+295 2714 m
+(distinction)s
+519(is)ms
+566(made)ms
+687(according)ms
+898(to)ms
+950(the)ms
+1025(contents)ms
+1205(of)ms
+1260(the)ms
+1334(lines.)ms
+1454(Additional)ms
+1682(lines)ms
+1790(of)ms
+1845(one)ms
+1930(of)ms
+1985(these)ms
+2101(seg-)ms
+12 FB
+295 2654 m
+(ments)s
+431(should)ms
+581(belong)ms
+734(to)ms
+790(category)ms
+10 FL
+979(L3)ms
+12 FB
+1039(<27,)ms
+1146(28,)ms
+1226(50,)ms
+1305(51>.)ms
+10 FL
+1430(Code-segments)ms
+12 FB
+1771(and)ms
+10 FL
+1860(Description-seg-)ms
+10 FL
+295 2594 m
+(ments)s
+12 FB
+429(are)ms
+502(made)ms
+623(up)ms
+686(of)ms
+740(non-CLiP-lines,)ms
+1073(called)ms
+10 FL
+1205(L4)ms
+12 FB
+1260(here)ms
+1359(<18,)ms
+1462(19,)ms
+1537(52,)ms
+1612(53,)ms
+1687(137,)ms
+1787(138,)ms
+1887(139>:)ms
+10 FL
+531 2506 m
+(Stub-segment ==)s
+1098(L1)ms
+1163(L3)ms
+7.2 FB
+1206 2528 m
+(*)s
+10 FL
+531 2456 m
+(Slot-segment ==)s
+1098(L1)ms
+1163(L3)ms
+7.2 FB
+1206 2478 m
+(*)s
+10 FL
+531 2406 m
+(End-segment ==)s
+1098(L2)ms
+1163(L3)ms
+7.2 FB
+1205 2428 m
+(*)s
+10 FL
+531 2356 m
+(Code-segment ==)s
+1098(L4)ms
+7.2 FB
+1141 2378 m
+(*)s
+10 FL
+531 2306 m
+(Description-segment ==)s
+1098(L4)ms
+7.2 FB
+1140 2328 m
+(*)s
+12 FB
+295 2229 m
+(Note)s
+407(that)ms
+10 FL
+497(Stub-segment)ms
+12 FB
+(s)s
+812(and)ms
+10 FL
+899(Slot-segment)ms
+12 FB
+(s)s
+1195(have)ms
+1305(the)ms
+1381(same)ms
+1500(syntax.)ms
+1658(They)ms
+1776(are)ms
+1852(distinguished)ms
+2134(by)ms
+12 FB
+295 2169 m
+(the)s
+369(fact)ms
+458(that)ms
+547(the)ms
+622(first)ms
+717(segment)ms
+897(of)ms
+953(a)ms
+989(stub)ms
+1086(is)ms
+1133(always)ms
+1286(a)ms
+10 FL
+1322(Stub-segment)ms
+12 FB
+1615(while)ms
+1740(all)ms
+1804(others)ms
+1940(are)ms
+10 FL
+2015(Slot-seg-)ms
+10 FL
+295 2109 m
+(ment)s
+12 FB
+(s.)s
+342 2049 m
+(The)s
+433(appearance)ms
+672(of)ms
+728(CLiP-lines)ms
+959(is)ms
+1006(largely)ms
+1159(free)ms
+1251(to)ms
+1304(the)ms
+1379(user.)ms
+1489(They)ms
+1606(start)ms
+1706(and)ms
+1793(end)ms
+1879(with)ms
+1982(sequences)ms
+10 FL
+295 1989 m
+(comm-start)s
+12 FB
+537(and)ms
+10 FL
+621(comm-end)ms
+12 FB
+859(intended)ms
+1043(to)ms
+1093(delimit)ms
+1245(comment)ms
+1443(lines)ms
+1548(of)ms
+1601(the)ms
+1673(programming)ms
+1957(language)ms
+2148(at)ms
+295 1929 m
+(hand)s
+401(\(")ms
+11 FH
+(\(*)s
+12 FB
+(")s
+523(and)ms
+605(")ms
+11 FH
+(*\))s
+12 FB
+(")s
+710(in)ms
+759(our)ms
+835(example\).)ms
+1043(To)ms
+1108(distinguish)ms
+1337(CLiP-lines)ms
+1563(from)ms
+1670(other)ms
+1782(comment)ms
+1978(lines)ms
+2082(these)ms
+295 1869 m
+(sequences)s
+511(are)ms
+585(extended)ms
+780(with)ms
+882(one)ms
+968(ore)ms
+1045(more)ms
+1162(special)ms
+1314(characters,)ms
+1543(the)ms
+10 FL
+1618(CLiP-char)ms
+12 FB
+1824(\(in)ms
+1894(our)ms
+1974(case)ms
+2074(")ms
+11 FH
+(*)s
+12 FB
+("\))s
+2172(.)ms
+295 1809 m
+(The)s
+383(number)ms
+547(of)ms
+10 FL
+600(CLiP-char)ms
+12 FB
+(s)s
+823(constitutes)ms
+1048(the)ms
+1121(difference)ms
+1334(between)ms
+10 FL
+1512(L1)ms
+12 FB
+1565(and)ms
+10 FL
+1648(L2)ms
+12 FB
+1702(on)ms
+1763(the)ms
+1835(one)ms
+1918(hand)ms
+2026(\(several)ms
+295 1749 m
+(additional)s
+10 FL
+507(CLiP-char)ms
+12 FB
+(s)s
+733(<49,)ms
+836(54,)ms
+911(75>\))ms
+1019(and)ms
+10 FL
+1103(L3)ms
+12 FB
+1158(on)ms
+1221(the)ms
+1295(other)ms
+1410(hand)ms
+1520(\(exactly)ms
+1694(one)ms
+1778(additional)ms
+10 FL
+1991(CLiP-char)ms
+12 FB
+295 1689 m
+(<50,)s
+396(51,)ms
+469(55,)ms
+543(56>\).)ms
+661(In)ms
+713(practice)ms
+882(we)ms
+951(emphasize)ms
+1173(the)ms
+1245(distinction)ms
+1467(by)ms
+1528(using)ms
+1647(a)ms
+1680(longer)ms
+1818(row)ms
+1907(of)ms
+10 FL
+1959(CLiP-char)ms
+12 FB
+(s.)s
+10 FL
+531 1601 m
+(L1)s
+584(==)ms
+646(comm-start)ms
+901(\(CLiP-char\))ms
+6 FL
+1125 1620 m
+(2+)s
+10 FL
+1177 1601 m
+(text)s
+1276(\(CLiP-char\))ms
+6 FL
+1500 1620 m
+(2+)s
+10 FL
+1552 1601 m
+(comm-end)s
+531 1551 m
+(L2)s
+584(==)ms
+646(comm-start)ms
+901(\(CLiP-char\))ms
+6 FL
+1125 1570 m
+(2+)s
+10 FL
+1177 1551 m
+(end-string)s
+1400(text)ms
+1498(\(CLiP-char\))ms
+6 FL
+1722 1570 m
+(2+)s
+10 FL
+1775 1551 m
+(comm-end)s
+531 1501 m
+(L3)s
+584(==)ms
+646(comm-start)ms
+901(CLiP-char)ms
+1118(text)ms
+1216(CLiP-char)ms
+1432(comm-end)ms
+531 1451 m
+(L4)s
+584(==)ms
+646({)ms
+12 FB
+(anything)s
+849(else)ms
+939(including)ms
+1140(ordinary)ms
+1322(comments)ms
+10 FL
+(})s
+12 FB
+295 1374 m
+(The)s
+10 FL
+388(text)ms
+12 FB
+478(of)ms
+535(a)ms
+573(complete)ms
+771(stub)ms
+870(segment)ms
+1052(or)ms
+1109(slot)ms
+1197(segment)ms
+1379(effectuates)ms
+1611(the)ms
+1687(name)ms
+1811(of)ms
+1868(the)ms
+1944(stub)ms
+2043(or)ms
+2100(slot.)ms
+295 1314 m
+(These)s
+426(names)ms
+565(are)ms
+638(used)ms
+741(by)ms
+802(CLiP)ms
+920(to)ms
+970(match)ms
+1104(stubs)ms
+1218(to)ms
+1269(their)ms
+1372(corresponding)ms
+1670(slots.)ms
+1785(In)ms
+1839(addition)ms
+2014(a)ms
+2048(stub)ms
+2143(or)ms
+295 1254 m
+(slot)s
+377(may)ms
+473(contain)ms
+630(a)ms
+662(number)ms
+824(of)ms
+876(options)ms
+1033(following)ms
+1237(the)ms
+1308(name.)ms
+1439(Each)ms
+1549(option)ms
+1687(is)ms
+1730(introduced)ms
+1954(by)ms
+2014(a)ms
+2046(special)ms
+10 FL
+295 1194 m
+(option-marker)s
+12 FB
+592(<16,)ms
+696(17,)ms
+771(106>.)ms
+342 1134 m
+(The)s
+439(actual)ms
+578(representations)ms
+901(of)ms
+962(the)ms
+1043(various)ms
+1210(syntactic)ms
+1408(categories)ms
+1631(are)ms
+1712(run-time)ms
+1904(parameters)ms
+2143(of)ms
+295 1074 m
+(CLiP.)s
+425(For)ms
+507(Pascal)ms
+647(we)ms
+718(use)ms
+10 FL
+531 986 m
+(comm-start ==)s
+956(")ms
+11 FH
+(\(*)s
+10 FL
+(")s
+531 936 m
+(comm-end ==)s
+956(")ms
+11 FH
+(*\))s
+10 FL
+(")s
+531 886 m
+(CLiP-char ==)s
+956(")ms
+11 FH
+(*)s
+10 FL
+(")s
+531 836 m
+(end-string ==)s
+956(")ms
+11 FH
+(End)s
+1079(of)ms
+10 FL
+(")s
+531 786 m
+(option-marker ==)s
+956(")ms
+11 FH
+(#)s
+10 FL
+(")s
+11 FAB
+295 684 m
+(3.2 Conventions)s
+12 FB
+295 602 m
+(The)s
+391(syntax)ms
+541(presented)ms
+751(above)ms
+890(is)ms
+942(a)ms
+983(good)ms
+1102(starting)ms
+1271(point)ms
+1393(for)ms
+1470(an)ms
+1536(intuitive)ms
+1722(presentation)ms
+1985(of)ms
+2046(literate)ms
+295 542 m
+(programs.)s
+507(Yet,)ms
+604(it)ms
+643(gives)ms
+760(the)ms
+833(opportunity)ms
+1077(to)ms
+1128(augment)ms
+1311(the)ms
+1384(notation)ms
+1559(with)ms
+1660(a)ms
+1694(specialized)ms
+1927(project)ms
+2078(style.)ms
+295 482 m
+(Our)s
+384(experience)ms
+613(indicates)ms
+803(that)ms
+890(some)ms
+1008(additional)ms
+1220(conventions)ms
+1473(are)ms
+1547(even)ms
+1653(necessary)ms
+1859(to)ms
+1910(reach)ms
+2031(our)ms
+2109(aim)ms
+295 422 m
+(of)s
+352('explaining)ms
+596(the)ms
+673(code)ms
+784(to)ms
+839(humans')ms
+1027(and)ms
+1116('almost)ms
+1282(incidentally)ms
+1534(explaining)ms
+1762(it)ms
+1805(to)ms
+1861(the)ms
+1938(computer)ms
+2143(as)ms
+295 362 m
+(well'.)s
+8 FB
+295 204 m
+(The)s
+355(CLiP)ms
+433(Style)ms
+510(of)ms
+546(Literate)ms
+658(Programming)ms
+850(\(4.074,)ms
+953(26-feb-93\))ms
+12 FB
+2075 204 m
+( 6 )s
+50 2 2130 216 li
+50 2 2020 216 li
+endpage
+%%Page: 6 7
+delay mfeed
+begpage
+12 FB
+342 3179 m
+(In)s
+394(this)ms
+477(section)ms
+629(we)ms
+698(restrict)ms
+848(ourselves)ms
+1048(to)ms
+1097(the)ms
+1169(conventions)ms
+1422(used)ms
+1524(in)ms
+1574(the)ms
+1646(example)ms
+1826(of)ms
+1878(the)ms
+1950(appendices.)ms
+295 3119 m
+(The)s
+386(conventions)ms
+641(partly)ms
+771(deal)ms
+867(with)ms
+970(rules)ms
+1080(for)ms
+1152(organising)ms
+1376(the)ms
+1451(documentation)ms
+1761(and)ms
+1847(its)ms
+1907(appearance)ms
+2146(in)ms
+295 3059 m
+(the)s
+370(type-set)ms
+542(form,)ms
+666(which)ms
+802(aspects)ms
+960(are)ms
+1035(independent)ms
+1294(of)ms
+1349(CLiP.)ms
+1481(Partly)ms
+1615(they)ms
+1715(elaborate)ms
+1912(the)ms
+1987(use)ms
+2068(of)ms
+2123(the)ms
+295 2999 m
+(CLiP)s
+413(syntax.)ms
+342 2939 m
+(In)s
+396(the)ms
+470(type-set)ms
+641(documentation)ms
+951(all)ms
+1013(code)ms
+1120(should)ms
+1266(appear)ms
+1412(in)ms
+1464(a)ms
+1499(non-proportional)ms
+1851(font,)ms
+1956(to)ms
+2008(aid)ms
+2082(navi-)ms
+295 2879 m
+(gation)s
+431(in)ms
+481(module)ms
+642(listings)ms
+798(during)ms
+940(debugging.)ms
+1175(In)ms
+1228(this)ms
+1311(way)ms
+1406(all)ms
+1467(code)ms
+1573(appears)ms
+1737(in)ms
+1787(the)ms
+1859(modules)ms
+2040(exactly)ms
+295 2819 m
+(as)s
+357(it)ms
+405(shows)ms
+550(up)ms
+621(in)ms
+680(the)ms
+762(documentation.)ms
+1092(Furthermore)ms
+1362(all)ms
+1432(identifiers)ms
+1656(that)ms
+1751(are)ms
+1833(mentioned)ms
+2064(in)ms
+2123(the)ms
+295 2759 m
+(descriptions)s
+549(should)ms
+695(be)ms
+754(in)ms
+806(the)ms
+879(same)ms
+994(font)ms
+1088(as)ms
+1142(the)ms
+1215(code)ms
+1322(fragments)ms
+1535(\(maybe)ms
+1697(in)ms
+1748(another)ms
+1911(size\).)ms
+342 2699 m
+(Sections)s
+523(of)ms
+576(the)ms
+650(documentation)ms
+959(should)ms
+1104(reflect)ms
+1244(single)ms
+1375(design)ms
+1517(steps)ms
+1629(with)ms
+1730(all)ms
+1792(corresponding)ms
+2090(code)ms
+295 2639 m
+(included.)s
+492(In)ms
+546(particular,)ms
+763(variables)ms
+956(introduced)ms
+1183(in)ms
+1234(the)ms
+1308(code)ms
+1415(of)ms
+1470(a)ms
+1504(section)ms
+1659(should)ms
+1805(be)ms
+1865(explained)ms
+2072(in)ms
+2123(the)ms
+295 2579 m
+(description)s
+528(of)ms
+580(that)ms
+666(section,)ms
+831(and)ms
+914(the)ms
+986(actual)ms
+1117(declarations)ms
+1369(should)ms
+1513(be)ms
+1572(included)ms
+1755(in)ms
+1805(the)ms
+1877(same)ms
+1990(section)ms
+2143(as)ms
+295 2519 m
+(well.)s
+404(To)ms
+470(reduce)ms
+614(the)ms
+685(visual)ms
+816(overhead,)ms
+1022(a)ms
+1055(stub)ms
+1149(can)ms
+1229(contain)ms
+1386(a)ms
+1419(special)ms
+1569(option)ms
+1707("quick",)ms
+1882(which)ms
+2015(instructs)ms
+295 2459 m
+(CLiP)s
+412(that)ms
+500(the)ms
+573(stub)ms
+669(is)ms
+714(ended)ms
+846(by)ms
+908(an)ms
+968(empty)ms
+1105(line)ms
+1192(or)ms
+1246(a)ms
+1280(CLiP-line)ms
+1490(\(this)ms
+1591(complication)ms
+1864(is)ms
+1910(not)ms
+1986(dealt)ms
+2096(with)ms
+295 2399 m
+(in)s
+346(section)ms
+500(3.1.)ms
+588(Examples)ms
+797(are)ms
+871(<33-34,)ms
+1041(35-36,)ms
+1182(37-38,)ms
+1324(42-43,)ms
+1466(44-46>\).)ms
+342 2339 m
+(There)s
+470(are)ms
+544(essentially)ms
+767(two)ms
+855(kinds)ms
+976(of)ms
+1030(slots:)ms
+1148(pseudostatements)ms
+1513(and)ms
+1597(other)ms
+1712(slots.)ms
+1829(Pseudostatements)ms
+295 2279 m
+(are)s
+371(important)ms
+581(for)ms
+654(the)ms
+731(explanation)ms
+980(of)ms
+1037(an)ms
+1099(algorithms,)ms
+1341(so)ms
+1401(pseudostatements)ms
+1769(should)ms
+1918(catch)ms
+2039(the)ms
+2115(eye)ms
+295 2219 m
+(<26-29,)s
+466(54-57,)ms
+609(61-64>.)ms
+780(Most)ms
+896(other)ms
+1013(slots)ms
+1119(serve)ms
+1238(as)ms
+1293('syntactic')ms
+1518(placeholders)ms
+1785(to)ms
+1837(indicate)ms
+2010(the)ms
+2085(posi-)ms
+295 2159 m
+(tions)s
+402(of)ms
+454(\(e.g.\))ms
+569(declarations.)ms
+834(Therefore)ms
+1041(they)ms
+1137(are)ms
+1209(kept)ms
+1305(to)ms
+1354(one)ms
+1436(single)ms
+1566(line)ms
+1651(with)ms
+1750(a)ms
+1783(short)ms
+1893(slot)ms
+1975(name)ms
+2094(<16,)ms
+295 2099 m
+(17,)s
+370(20>.)ms
+342 2039 m
+(We)s
+425(write)ms
+542(pseudo-statements)ms
+925(as)ms
+981(framed)ms
+1137(comments)ms
+1357(with)ms
+1460(a)ms
+1496(short)ms
+1610(identification)ms
+1891(in)ms
+1944(the)ms
+2019(top)ms
+2097(line.)ms
+295 1979 m
+(This)s
+397(identification)ms
+676(is)ms
+723(not)ms
+800(strictly)ms
+952(needed,)ms
+1119(but)ms
+1196(it)ms
+1237(aids)ms
+1331(in)ms
+1383(the)ms
+1457(process)ms
+1620(of)ms
+1675(finding)ms
+1833(relations)ms
+2018(between)ms
+295 1919 m
+(slots)s
+398(and)ms
+481(stubs.)ms
+608(The)ms
+697(remainder)ms
+912(of)ms
+965(a)ms
+998(slot)ms
+1082(describes)ms
+1280(the)ms
+1352(operation)ms
+1552(of)ms
+1606(the)ms
+1678(pseudostatement)ms
+2023(in)ms
+2073(terms)ms
+295 1859 m
+(of)s
+358(the)ms
+440(variables)ms
+643(involved.)ms
+852(Thus)ms
+973(the)ms
+1056(corresponding)ms
+1364(stub)ms
+1468(may)ms
+1576(be)ms
+1645(understood)ms
+1889(independently,)ms
+295 1799 m
+(essentially)s
+518(avoiding)ms
+706(Thimbleby's)ms
+974('dynamic)ms
+1175(binding)ms
+1340(problem')ms
+1536([Thimbleby)ms
+1785(1986].)ms
+11 FAB
+295 1679 m
+(3.3 Advanced features)s
+12 FB
+295 1597 m
+(The)s
+385(CLiP)ms
+503(tool)ms
+593(is)ms
+639(able)ms
+735(to)ms
+786(combine)ms
+971(multiple)ms
+1150(source)ms
+1293(files.)ms
+1404(This)ms
+1505(allows)ms
+1649(structuring)ms
+1878(the)ms
+1951(explanation)ms
+295 1537 m
+(of)s
+346(a)ms
+378(program)ms
+557(into)ms
+645(separate)ms
+818(levels)ms
+945(of)ms
+996(detail.)ms
+1130(Each)ms
+1240(level)ms
+1347(of)ms
+1398(understanding)ms
+1691(abstracts)ms
+1876(from)ms
+1983(the)ms
+2054(details)ms
+295 1477 m
+(of)s
+349(a)ms
+385(lower)ms
+512(level.)ms
+634(Therefore,)ms
+857(in)ms
+909(the)ms
+983(CLiP)ms
+1102(approach)ms
+1298(it)ms
+1339(is)ms
+1386(customary)ms
+1607(to)ms
+1659(split)ms
+1758(the)ms
+1833(documentation)ms
+2143(of)ms
+295 1417 m
+(one)s
+379(module)ms
+542(into)ms
+632(separate)ms
+808(documents)ms
+1037(according)ms
+1247(to)ms
+1299(this)ms
+1383(hierarchy.)ms
+342 1357 m
+(Conversely,)s
+592(it)ms
+631(is)ms
+674(also)ms
+765(possible)ms
+940(to)ms
+989(document)ms
+1197(several)ms
+1349(modules)ms
+1529(in)ms
+1578(one)ms
+1661(\(set)ms
+1744(of\))ms
+1812(source)ms
+1953(file\(s\).)ms
+2096(This)ms
+295 1297 m
+(feature)s
+444(is)ms
+488(typically)ms
+674(used)ms
+776(to)ms
+826(include)ms
+984(data)ms
+1078(files)ms
+1175(in)ms
+1225(the)ms
+1296(documentation:)ms
+1618(e.g.)ms
+1701(test)ms
+1781(data,)ms
+1888(tables)ms
+2015(and)ms
+2098(help)ms
+295 1237 m
+(files.)s
+407(In)ms
+463(the)ms
+538(case)ms
+638(of)ms
+694(Modula-2)ms
+905(programs)ms
+1108(this)ms
+1195(mechanism)ms
+1436(proves)ms
+1584(very)ms
+1687(useful)ms
+1823(too)ms
+1901(for)ms
+1973(generating)ms
+295 1177 m
+(specification)s
+563(and)ms
+648(implementation)ms
+975(modules)ms
+1157(from)ms
+1268(the)ms
+1342(same)ms
+1457(sources)ms
+1620(file.)ms
+1712(Thus)ms
+1825(the)ms
+1899(procedure)ms
+2112(and)ms
+295 1117 m
+(function)s
+474(headings)ms
+664(need)ms
+771(to)ms
+822(be)ms
+882(specified)ms
+1075(only)ms
+1176(once.)ms
+342 1057 m
+(The)s
+429(operation)ms
+628(of)ms
+679(CLiP)ms
+795(may)ms
+891(be)ms
+948(tuned)ms
+1068(by)ms
+1128(means)ms
+1266(of)ms
+1317(options)ms
+1474(in)ms
+1523(slot)ms
+1605(or)ms
+1657(stub)ms
+1750(segments.)ms
+1958(The)ms
+2046(default)ms
+295 997 m
+(mechanism)s
+532(is)ms
+576(designed)ms
+764(such)ms
+865(that)ms
+951(options)ms
+1108(are)ms
+1179(not)ms
+1253(normally)ms
+1444(needed.)ms
+1608(The)ms
+1696(remainder)ms
+1909(of)ms
+1960(this)ms
+2043(section)ms
+295 937 m
+(discusses)s
+493(the)ms
+567(most)ms
+676(important)ms
+883(options)ms
+1043(in)ms
+1095(the)ms
+1168(context)ms
+1328(of)ms
+1382(their)ms
+1486(most)ms
+1596(frequent)ms
+1775(application.)ms
+12 FBB
+295 847 m
+(Declaration)s
+557(slots:)ms
+681(options)ms
+849("multiple")ms
+1094(and)ms
+1188("leader")ms
+12 FB
+342 787 m
+(The)s
+432(default)ms
+583(mechanism)ms
+824(of)ms
+878(CLiP)ms
+996(relates)ms
+1139(each)ms
+1244(placeholder)ms
+1490(to)ms
+1541(exactly)ms
+1698(one)ms
+1783(code)ms
+1890(fragment.)ms
+2096(This)ms
+295 727 m
+(is)s
+337(a)ms
+369(useful)ms
+500(choice)ms
+640(for)ms
+708(placeholders)ms
+970(representing)ms
+1227(pseudocode,)ms
+1485(but)ms
+1558(not)ms
+1631(for)ms
+1699('syntactic')ms
+1919(placeholders,)ms
+295 667 m
+(such)s
+400(as)ms
+456(a)ms
+492(fixed)ms
+609(location)ms
+784(where)ms
+920(variable)ms
+1096(declarations)ms
+1351(have)ms
+1460(to)ms
+1513(be)ms
+1574(included.)ms
+1773(It)ms
+1817(is)ms
+1865(very)ms
+1968(illogical)ms
+2146(to)ms
+295 607 m
+(declare)s
+450(all)ms
+512(variables)ms
+704(at)ms
+751(once,)ms
+869(where)ms
+1003(the)ms
+1075(actual)ms
+1206(code)ms
+1312(is)ms
+1357(split)ms
+1454(into)ms
+1544(manageable)ms
+1794(parts.)ms
+1915(Therefore)ms
+2123(the)ms
+295 547 m
+(option)s
+436("multiple")ms
+657(is)ms
+704(used)ms
+809(to)ms
+861(indicate)ms
+1033(a)ms
+1069(slot)ms
+1154(where)ms
+1290(more)ms
+1406(than)ms
+1506(one)ms
+1592(stub)ms
+1689(can)ms
+1771(be)ms
+1832(included)ms
+2018(<16,)ms
+2122(17,)ms
+295 487 m
+(20>.)s
+8 FB
+295 204 m
+(The)s
+355(CLiP)ms
+433(Style)ms
+510(of)ms
+546(Literate)ms
+658(Programming)ms
+850(\(4.074,)ms
+953(26-feb-93\))ms
+12 FB
+2075 204 m
+( 7 )s
+50 2 2130 216 li
+50 2 2020 216 li
+endpage
+%%Page: 7 8
+delay mfeed
+begpage
+12 FB
+342 3179 m
+(Another)s
+518(peculiarity)ms
+744(of)ms
+798(declarations)ms
+1052(is)ms
+1098(that)ms
+1185(some)ms
+1303(languages)ms
+1516(\(notably)ms
+1695(Pascal\))ms
+1851(require)ms
+2005(that)ms
+2093(each)ms
+295 3119 m
+(type)s
+391(of)ms
+444(declaration)ms
+677(is)ms
+721(introduced)ms
+945(by)ms
+1006(its)ms
+1064(own)ms
+1161(keyword.)ms
+1359(This)ms
+1459(leads)ms
+1572(to)ms
+1622(problems)ms
+1819(when)ms
+1938(the)ms
+2010(keyword)ms
+295 3059 m
+(is)s
+339(either)ms
+465(included)ms
+648(in)ms
+699(the)ms
+771(first)ms
+863(corresponding)ms
+1161(stub)ms
+1255(\(which)ms
+1406(might)ms
+1534(be)ms
+1592(replaced)ms
+1773(during)ms
+1915(maintenance\))ms
+295 2999 m
+(or)s
+346(in)ms
+395(front)ms
+502(of)ms
+554(the)ms
+625(slot)ms
+707(\(if)ms
+764(no)ms
+824(stub)ms
+917(is)ms
+961(specified,)ms
+1164(the)ms
+1235(program)ms
+1414(is)ms
+1457(syntactically)ms
+1720(incorrect\).)ms
+1937(To)ms
+2002(deal)ms
+2096(with)ms
+295 2939 m
+(these)s
+411(problems,)ms
+624(CLiP)ms
+744(allows)ms
+889(the)ms
+964("leader")ms
+1141(option)ms
+1283(in)ms
+1337(a)ms
+1373(stub)ms
+1471(<33,)ms
+1575(35>.)ms
+1680(A)ms
+1731(leader)ms
+1867(stub)ms
+1965(is)ms
+2012(included)ms
+295 2879 m
+(only)s
+400(if)ms
+447(at)ms
+499(least)ms
+607(one)ms
+696(regular)ms
+854(stub)ms
+954(is)ms
+1003(present)ms
+1164(in)ms
+1220(the)ms
+1297(documentation;)ms
+1625(otherwise)ms
+1835(the)ms
+1913(leader)ms
+2051(stub)ms
+2151(is)ms
+295 2819 m
+(ignored.)s
+12 FBB
+295 2729 m
+(Data)s
+410(files:)ms
+525(option)ms
+674("comment)ms
+911(off")ms
+12 FB
+342 2669 m
+(Comments)s
+570(are)ms
+643(normally)ms
+836(extracted)ms
+1031(with)ms
+1132(the)ms
+1205(code.)ms
+1323(This)ms
+1424(is)ms
+1469(important)ms
+1676(to)ms
+1727(guide)ms
+1850(the)ms
+1923(navigation)ms
+2146(in)ms
+295 2609 m
+(the)s
+370(extracted)ms
+568(code,)ms
+689(especially)ms
+903(in)ms
+957(the)ms
+1032(process)ms
+1196(of)ms
+1252(debugging)ms
+1478(\(see)ms
+1573(also)ms
+1668(section)ms
+1824(5\).)ms
+1892(But)ms
+1979(comments)ms
+295 2549 m
+(are)s
+368(not)ms
+444(desired)ms
+601(in)ms
+653(data)ms
+748(files.)ms
+859(With)ms
+972(the)ms
+1045(option)ms
+1186("Comment)ms
+1416(off")ms
+1507(we)ms
+1578(direct)ms
+1704(CLiP)ms
+1822(to)ms
+1873(extract)ms
+2022(only)ms
+2123(the)ms
+295 2489 m
+(code)s
+401(segments)ms
+600(<1,)ms
+678(143>.)ms
+342 2429 m
+(It)s
+385(is)ms
+431(also)ms
+524(possible)ms
+701(to)ms
+753(suppress)ms
+938(comments)ms
+1156(locally)ms
+1305(by)ms
+1368(specifying)ms
+1589("Comment)ms
+1820(off")ms
+1911(in)ms
+1963(a)ms
+1998(slot.)ms
+2096(This)ms
+295 2369 m
+(is)s
+351(very)ms
+463(useful)ms
+609(in)ms
+671(a)ms
+717(list)ms
+801(of)ms
+866(variable)ms
+1050(declarations:)ms
+1329(all)ms
+1402(declarations)ms
+1667(are)ms
+1752(included)ms
+1947(without)ms
+2123(the)ms
+295 2309 m
+(\(superfluous\))s
+574(comment)ms
+772(stating)ms
+918(the)ms
+992(slot-name.)ms
+12 FBB
+295 2219 m
+(Testing)s
+465(and)ms
+558(debugging)ms
+793(code:)ms
+920(option)ms
+1068("optional")ms
+12 FB
+342 2159 m
+(In)s
+400(the)ms
+478(process)ms
+645(of)ms
+703(debugging)ms
+931(one)ms
+1020(often)ms
+1139(needs)ms
+1270(to)ms
+1326(include)ms
+1490(code)ms
+1601(for)ms
+1676(the)ms
+1754(purpose)ms
+1929(of)ms
+1987(tracing)ms
+2143(or)ms
+295 2099 m
+(dumping)s
+487(tables.)ms
+630(According)ms
+856(to)ms
+909(the)ms
+985(literate)ms
+1138(programming)ms
+1425(credo)ms
+1550(we)ms
+1623(do)ms
+1687(not)ms
+1766(want)ms
+1877(to)ms
+1931(edit)ms
+2020(the)ms
+2096(gen-)ms
+295 2039 m
+(erated)s
+428(modules,)ms
+620(or)ms
+673(even)ms
+778(the)ms
+850(source)ms
+992(files,)ms
+1101(for)ms
+1171(this)ms
+1254(purpose.)ms
+1436(So)ms
+1499(we)ms
+1569(include)ms
+1727(slots)ms
+1829(that)ms
+1915(normally)ms
+2107(will)ms
+295 1979 m
+(be)s
+353(left)ms
+431(blank,)ms
+566(indicated)ms
+761(by)ms
+822(the)ms
+895(option)ms
+1034("optional")ms
+1250(<105-106>.)ms
+1497(This)ms
+1597(option)ms
+1736(instructs)ms
+1917(the)ms
+1990(CLiP)ms
+2107(tool)ms
+295 1919 m
+(not)s
+370(to)ms
+420(complain)ms
+618(if)ms
+660(the)ms
+732(slot)ms
+816(is)ms
+861(not)ms
+936(satisfied.)ms
+1127(Those)ms
+1260(slots)ms
+1364(serve)ms
+1481(as)ms
+1534(placeholders)ms
+1798(for)ms
+1868(debugging)ms
+2090(code)ms
+295 1859 m
+(that)s
+387(is)ms
+438(kept)ms
+542(in)ms
+598(separate)ms
+780(documents)ms
+1014(\(e.g.)ms
+1120(appendix)ms
+1321(B\).)ms
+1401(Whether)ms
+1591(or)ms
+1650(not)ms
+1732(the)ms
+1810(debugging)ms
+2039(code)ms
+2151(is)ms
+295 1799 m
+(included)s
+479(depends)ms
+656(solely)ms
+788(on)ms
+850(the)ms
+924(set)ms
+992(of)ms
+1046(source)ms
+1189(files)ms
+1287(that)ms
+1375(is)ms
+1421(supplied)ms
+1603(for)ms
+1674(a)ms
+1708(run)ms
+1787(of)ms
+1842(CLiP.)ms
+12 FBB
+295 1709 m
+(Partial)s
+454(implementations:)ms
+839(option)ms
+988("default")ms
+12 FB
+342 1649 m
+(It)s
+385(is)ms
+431(very)ms
+532(useful)ms
+667(to)ms
+719(test)ms
+801(each)ms
+905(level)ms
+1015(of)ms
+1069(a)ms
+1104(program)ms
+1286(without)ms
+1452(all)ms
+1514(details)ms
+1657(filled)ms
+1776(in.)ms
+1840(When)ms
+1972(the)ms
+2046(literate)ms
+295 1589 m
+(program)s
+479(is)ms
+527(structured)ms
+742(as)ms
+798(explained)ms
+1007(in)ms
+1061(the)ms
+1137(first)ms
+1232(paragraph)ms
+1447(of)ms
+1504(this)ms
+1591(section,)ms
+1760(a)ms
+1797(level)ms
+1909(of)ms
+1965(abstraction)ms
+295 1529 m
+(corresponds)s
+549(to)ms
+600(a)ms
+634(set)ms
+702(of)ms
+757(source)ms
+899(files.)ms
+1010(In)ms
+1065(order)ms
+1182(to)ms
+1234(test)ms
+1316(such)ms
+1420(a)ms
+1454(level,)ms
+1577(the)ms
+1650(source)ms
+1793(files)ms
+1891(should)ms
+2037(contain)ms
+295 1469 m
+(some)s
+413(default)ms
+564(actions)ms
+718(to)ms
+770(be)ms
+829(taken)ms
+950(instead)ms
+1104(of)ms
+1158(those)ms
+1277(missing)ms
+1445(details,)ms
+1600(e.g.)ms
+1685(writing)ms
+1842(a)ms
+1877(message)ms
+2059("func-)ms
+295 1409 m
+(tion)s
+384(...)ms
+432(not)ms
+507(yet)ms
+580(implemented".)ms
+885(This)ms
+985(code)ms
+1091(is)ms
+1135(included)ms
+1319(in)ms
+1369(a)ms
+1402(stub)ms
+1497(with)ms
+1597(the)ms
+1669(option)ms
+1808("default")ms
+1999(<42-43>,)ms
+295 1349 m
+(which)s
+429(is)ms
+475(only)ms
+576(extracted)ms
+772(when)ms
+893(no)ms
+956(regular)ms
+1110(stub)ms
+1205(is)ms
+1251(supplied)ms
+1433(for)ms
+1504(the)ms
+1578(corresponding)ms
+1876(slot.)ms
+342 1289 m
+(A)s
+391(related)ms
+540(situation)ms
+726(occurs)ms
+870(in)ms
+922(lines)ms
+1030(42-43)ms
+1160(of)ms
+1214(the)ms
+1289(example)ms
+1472(where)ms
+1607(we)ms
+1679(have)ms
+1786(a)ms
+1822(so)ms
+1880(called)ms
+12 FBI
+2012(partially)ms
+12 FBI
+295 1229 m
+(defined)s
+12 FB
+456(data)ms
+553(type)ms
+11 FH
+653(TEXT_LINE)ms
+12 FB
+(.)s
+941(First)ms
+1047(a)ms
+1083(temporary)ms
+1302(declaration)ms
+1538(is)ms
+1586(given,)ms
+1723(adequate)ms
+1915(to)ms
+1968(the)ms
+2043(current)ms
+295 1169 m
+(abstraction)s
+526(level.)ms
+649(Later)ms
+767(on,)ms
+842(in)ms
+893(section)ms
+1047(A.4,)ms
+1146(it)ms
+1186(is)ms
+1232(refined)ms
+1386(to)ms
+1437(its)ms
+1497(final)ms
+1601(form.)ms
+12 FBB
+295 1079 m
+(Other)s
+435(applications)ms
+706(of)ms
+760(the)ms
+839("default")ms
+1057(option)ms
+12 FB
+342 1019 m
+(The)s
+438("default")ms
+636(option)ms
+783(is)ms
+835(very)ms
+942(useful)ms
+1083(too)ms
+1165(during)ms
+1315(the)ms
+1394(development)ms
+1671(of)ms
+1731(multiple)ms
+1917(versions)ms
+2102(of)ms
+2162(a)ms
+295 959 m
+(program.)s
+488(In)ms
+542(its)ms
+601(simplest)ms
+780(form)ms
+889(it)ms
+929(is)ms
+974(almost)ms
+1119(identical)ms
+1303(to)ms
+1354(the)ms
+1427(previous)ms
+1611(example.)ms
+1805(Operations)ms
+2037(that)ms
+2123(are)ms
+295 899 m
+(not)s
+374(allowed)ms
+547(in)ms
+602(some)ms
+723(versions)ms
+905(are)ms
+981(separated)ms
+1185(into)ms
+1279(different)ms
+1466(source)ms
+1612(files;)ms
+1727(a)ms
+1765(default)ms
+1919(stub)ms
+2018(contains)ms
+295 839 m
+(code)s
+401(to)ms
+453(generate)ms
+635(a)ms
+669(message)ms
+851(like)ms
+939("operation)ms
+1161(...)ms
+1211(not)ms
+1287(allowed)ms
+1458(in)ms
+1509(this)ms
+1594(version".)ms
+342 779 m
+(Default)s
+507(stubs)ms
+625(may)ms
+726(also)ms
+822(be)ms
+884(used)ms
+991(for)ms
+1064(porting)ms
+1224(and)ms
+1312(tuning.)ms
+1467(In)ms
+1524(this)ms
+1611(case)ms
+1713(the)ms
+1789(default)ms
+1943(stub)ms
+2041(gives)ms
+2162(a)ms
+295 719 m
+(general)s
+456(solution,)ms
+643(but)ms
+721(not)ms
+799(necessarily)ms
+1035(an)ms
+1096(efficient)ms
+1277(one.)ms
+1390(Well)ms
+1501(tuned)ms
+1626(\(but)ms
+1721(machine)ms
+1904(specific\))ms
+2090(code)ms
+295 659 m
+(may)s
+396(be)ms
+458(included)ms
+645(by)ms
+710(use)ms
+792(of)ms
+848(an)ms
+911(additional)ms
+1126(source)ms
+1271(file.)ms
+1365(As)ms
+1436(a)ms
+1473(premium)ms
+1669(the)ms
+1745(main)ms
+1860(document)ms
+2072(is)ms
+2121(not)ms
+295 599 m
+(clobbered)s
+504(with)ms
+606(all)ms
+668(the)ms
+742(tricks)ms
+865(that)ms
+953(are)ms
+1026(sometimes)ms
+1253(needed)ms
+1407(to)ms
+1458(gain)ms
+1557(the)ms
+1630(desired)ms
+1787(efficiency.)ms
+8 FB
+295 204 m
+(The)s
+355(CLiP)ms
+433(Style)ms
+510(of)ms
+546(Literate)ms
+658(Programming)ms
+850(\(4.074,)ms
+953(26-feb-93\))ms
+12 FB
+2075 204 m
+( 8 )s
+50 2 2130 216 li
+50 2 2020 216 li
+endpage
+%%Page: 8 9
+delay mfeed
+begpage
+12 FAB
+295 3176 m
+(4 Comparison with other literate programming tools)s
+12 FB
+295 3089 m
+(The)s
+382(most)ms
+488(widely)ms
+633(known)ms
+779(system)ms
+927(for)ms
+995(literate)ms
+1143(programming)ms
+1424(is)ms
+1467(without)ms
+1629(doubt)ms
+1752(Knuth's)ms
+1922(WEB)ms
+2043([Knuth)ms
+295 3029 m
+(1984,)s
+416(Bentley)ms
+581(and)ms
+662(Knuth)ms
+796(1986a,)ms
+940(1986b,)ms
+1087(Sewell)ms
+1232(1989].)ms
+1371(WEB)ms
+1491(consists)ms
+1658(of)ms
+1709(two)ms
+1793(programs,)ms
+2004(WEAVE)ms
+295 2969 m
+(and)s
+382(TANGLE,)ms
+610(that)ms
+701(generate)ms
+886(a)ms
+923(TeX-file)ms
+1111(and)ms
+1199(a)ms
+1236(Pascal-module)ms
+1546(respectively.)ms
+1816(By)ms
+1890(now)ms
+1991(WEB)ms
+2118(has)ms
+295 2909 m
+(been)s
+401(adapted)ms
+568(to)ms
+619(a)ms
+654(number)ms
+818(of)ms
+872(other)ms
+987(programming)ms
+1271(languages.)ms
+1495(CWEB)ms
+1652([Levy)ms
+1783(1987])ms
+1912(for)ms
+1982(c,)ms
+2029(MWEB)ms
+295 2849 m
+([Sewell)s
+459(1987])ms
+588(for)ms
+658(Modula-2,)ms
+879(FWEB)ms
+1030([Avenarius)ms
+1264(and)ms
+1348(Oppermann)ms
+1596(1990])ms
+1724(for)ms
+1794(Fortran)ms
+1953(and)ms
+2037(various)ms
+295 2789 m
+(other)s
+412(WEBs.)ms
+569(With)ms
+683(Ramsey's)ms
+895(Spider)ms
+1039([Ramsey)ms
+1232(1989])ms
+1362(it)ms
+1405(is)ms
+1452(even)ms
+1561(possible)ms
+1739(to)ms
+1792(generate)ms
+1976(an)ms
+2037(XWEB)ms
+295 2729 m
+(for)s
+368(your)ms
+475(favourite)ms
+670(language)ms
+866(X.)ms
+929(Apart)ms
+1058(from)ms
+1171(the)ms
+1247(target)ms
+1376(programming)ms
+1663(language,)ms
+1871(all)ms
+1936(these)ms
+2054(WEBs)ms
+295 2669 m
+(share)s
+413(the)ms
+486(properties)ms
+699(of)ms
+753(WEB;)ms
+890(therefore)ms
+1083(we)ms
+1154(refer)ms
+1261(to)ms
+1312(them)ms
+1425(collectively)ms
+1671(as)ms
+1725(the)ms
+1798(WEB)ms
+1922(family.)ms
+342 2609 m
+(In)s
+396(table 1)ms
+543(we)ms
+615(compare)ms
+799(CLiP)ms
+918(with)ms
+1020(those)ms
+1138(other)ms
+1253(tools)ms
+1363(of)ms
+1418(which)ms
+1553(we)ms
+1624(know)ms
+1748(sufficient)ms
+1949(details:)ms
+2107(The)ms
+295 2549 m
+(WEB)s
+418(family,)ms
+573(Thimbleby's)ms
+841(Cweb)ms
+970([Thimbleby)ms
+1218(1986],)ms
+1360(c-no-web)ms
+1561([Fox)ms
+1667(1990],)ms
+1809(HSD)ms
+1921([Tung)ms
+2055(1989],)ms
+295 2489 m
+(LIPED)s
+452([Bishop)ms
+627(1992],)ms
+772(and)ms
+860(a)ms
+898(nameless)ms
+1098(Smalltalk)ms
+1305(environment)ms
+1574([Reenskaug)ms
+1826(1989].)ms
+1971(We)ms
+2057(ignore)ms
+295 2429 m
+(VAMP,)s
+464(the)ms
+538(predecessor)ms
+786(of)ms
+840(CLiP)ms
+958([Ammers)ms
+1160(1992].)ms
+12 FBI
+295 2369 m
+([note)s
+410(to)ms
+458(the)ms
+528(referee:)ms
+696(possibly)ms
+869(we)ms
+934(missed)ms
+1080(some)ms
+1192(important)ms
+1399(other)ms
+1514(tools;)ms
+1637(we)ms
+1702(plan)ms
+1801(to)ms
+1849(expand)ms
+2003(this)ms
+2085(table)ms
+12 FBI
+295 2309 m
+(in)s
+346(the)ms
+420(final)ms
+524(version].)ms
+12 FB
+342 2249 m
+(Most)s
+458(tools)ms
+569(are)ms
+643(coupled)ms
+815(to)ms
+867(one)ms
+953(specific)ms
+1122(programming)ms
+1408(language)ms
+1602(\(row)ms
+1710(1\).)ms
+1777(As)ms
+1846(mentioned)ms
+2071(in)ms
+2123(the)ms
+295 2189 m
+(first)s
+387(paragraph,)ms
+612(each)ms
+716(member)ms
+893(of)ms
+947(the)ms
+1020(WEB)ms
+1144(family)ms
+1287(is)ms
+1332(tailored)ms
+1498(to)ms
+1549(one)ms
+1633(particular)ms
+1837(language.)ms
+2043(LIPED)ms
+295 2129 m
+(is)s
+351(independent)ms
+618(of)ms
+682(programming)ms
+977(language)ms
+1180(in)ms
+1242(the)ms
+1326(sense)ms
+1457(that)ms
+1554(it)ms
+1605(is)ms
+1661(controlled)ms
+1886(by)ms
+1959(a)ms
+2004(language)ms
+295 2069 m
+(description.)s
+541(CLiP's)ms
+694(mechanism)ms
+933(is)ms
+978(totally)ms
+1117(independent)ms
+1373(of)ms
+1426(the)ms
+1498(target)ms
+1624(language,)ms
+1828(so)ms
+1884(e.g.)ms
+1968(job)ms
+2043(control)ms
+295 2009 m
+(procedures)s
+529(and)ms
+617(data)ms
+716(files)ms
+817(\(row)ms
+927(2\))ms
+984(can)ms
+1069(be)ms
+1131(extracted)ms
+1330(as)ms
+1387(well.)ms
+1501(The)ms
+1594(only)ms
+1698(other)ms
+1816(system)ms
+1971(addressing)ms
+295 1949 m
+(data)s
+390(files)ms
+489(is)ms
+535(the)ms
+608(Smalltalk)ms
+813(environment.)ms
+342 1889 m
+(The)s
+435(majority)ms
+619(of)ms
+676(the)ms
+753(literate)ms
+907(programming)ms
+1194(tools)ms
+1307(is)ms
+1355(coupled)ms
+1529(to)ms
+1583(one)ms
+1671(or)ms
+1728(a)ms
+1765(few)ms
+1855(batch)ms
+1979(formatters)ms
+295 1829 m
+(\(row)s
+409(3\).)ms
+483(The)ms
+580(Smalltalk)ms
+792(environment)ms
+1064(and)ms
+1156(LIPED)ms
+1318(have)ms
+1432(their)ms
+1543(own)ms
+1649(text)ms
+1744(processing)ms
+1978(interfaces.)ms
+295 1769 m
+(LIPED)s
+449(may)ms
+547(be)ms
+607(interfaced)ms
+819(to)ms
+871(an)ms
+931(arbitrary)ms
+1115(text)ms
+1203(formatter)ms
+1401(by)ms
+1464(means)ms
+1604(of)ms
+1658(a)ms
+1693(trick:)ms
+1811(it)ms
+1851(uses)ms
+1950(printer)ms
+2096(con-)ms
+295 1709 m
+(figuration)s
+507(files)ms
+609(which)ms
+746(can)ms
+831(be)ms
+894(used)ms
+1001(to)ms
+1056(generate)ms
+1240(formatter)ms
+1442(input)ms
+1560(\(e.g.)ms
+1665(LaTeX-files\).)ms
+1954(CLiP)ms
+2075(is)ms
+2123(the)ms
+295 1649 m
+(only)s
+392(tool)ms
+479(suitable)ms
+644(for)ms
+711(use)ms
+787(with)ms
+885(a)ms
+916(word-processor)ms
+1236(\(see)ms
+1325(fig. 1b\))ms
+1481(because)ms
+1649(all)ms
+1708(information)ms
+1953(for)ms
+2020(the)ms
+2090(code)ms
+295 1589 m
+(extractor)s
+483(is)ms
+526(visible)ms
+670(in)ms
+719(the)ms
+791(documentation.)ms
+1111(Alternatively)ms
+1385(its)ms
+1443(source)ms
+1583(files)ms
+1680(may)ms
+1776(be)ms
+1834(edited)ms
+1967(by)ms
+2027(any)ms
+2109(text)ms
+295 1529 m
+(editor)s
+427(\(row)ms
+536(4\).)ms
+606(The)ms
+699(Smalltalk)ms
+906(environment,)ms
+1187(LIPED)ms
+1344(and)ms
+1431(HSD)ms
+1547(have)ms
+1657(integrated)ms
+1872(special)ms
+2026(purpose)ms
+295 1469 m
+(editors)s
+447(which)ms
+585(add)ms
+674(functions)ms
+876(for)ms
+951(navigating)ms
+1179(in)ms
+1234(the)ms
+1311(literate)ms
+1466(programs)ms
+1672(as)ms
+1730(on)ms
+1796(line)ms
+1887(documentation)ms
+295 1409 m
+(\(row)s
+401(5\).)ms
+342 1349 m
+(CLiP)s
+461(is)ms
+509(quite)ms
+624(unique)ms
+774(in)ms
+827(extracting)ms
+1042(multiple)ms
+1223(modules)ms
+1407(from)ms
+1518(multiple)ms
+1699(source)ms
+1844(files)ms
+1945(\(rows)ms
+2073(6)ms
+2112(and)ms
+295 1289 m
+(7\).)s
+367(Perhaps)ms
+544(LIPED)ms
+704(shares)ms
+847(this)ms
+937(feature,)ms
+1107(but)ms
+1189(this)ms
+1280(is)ms
+1332(not)ms
+1414(entirely)ms
+1585(clear)ms
+1700(from)ms
+1816(the)ms
+1895(literature.)ms
+2107(The)ms
+295 1229 m
+(Smalltalk)s
+497(environment)ms
+761(interfaces)ms
+967(to)ms
+1017(the)ms
+1089(Smalltalk)ms
+1292(library)ms
+1437(for)ms
+1506(storing)ms
+1656(and)ms
+1740(retrieving)ms
+1945(all)ms
+2007(pieces)ms
+2143(of)ms
+295 1169 m
+(information.)s
+342 1109 m
+(Suppression)s
+600(of)ms
+655(details)ms
+799(\(row)ms
+907(8\))ms
+962(in)ms
+1015(very)ms
+1117(easy)ms
+1220(in)ms
+1272(CLiP)ms
+1392(by)ms
+1455(its)ms
+1516(ability)ms
+1658(to)ms
+1710(process)ms
+1874(multiple)ms
+2054(source)ms
+295 1049 m
+(files.)s
+407(By)ms
+479(the)ms
+554(same)ms
+670(mechanism)ms
+912(CLiP)ms
+1031(is)ms
+1078(able)ms
+1175(to)ms
+1228(handle)ms
+1375(debugging)ms
+1599(code)ms
+1708(\(row)ms
+1816(9\))ms
+1871(and)ms
+1957(to)ms
+2010(integrate)ms
+295 989 m
+(multiple)s
+475(versions)ms
+656(\(row)ms
+765(10\))ms
+846(of)ms
+901(the)ms
+977(same)ms
+1094(program)ms
+1277(\(see)ms
+1372(section)ms
+1528(3.3\).)ms
+1634(Debugging)ms
+1870(code)ms
+1979(is)ms
+2026(handled)ms
+295 929 m
+(in)s
+342(the)ms
+412(WEB)ms
+532(family)ms
+671(and)ms
+752(in)ms
+800(cweb)ms
+914(by)ms
+973(macro's)ms
+1143(that)ms
+1227(expand)ms
+1380(either)ms
+1503(to)ms
+1550(comment)ms
+1745(delimiters)ms
+1954(\(effectively)ms
+295 869 m
+('commenting)s
+572(out')ms
+664(the)ms
+737(debugging)ms
+959(code\))ms
+1082(or)ms
+1134(to)ms
+1185(whitespace)ms
+1418(at)ms
+1466(the)ms
+1538(users)ms
+1652(choice.)ms
+1806(WEB)ms
+1929(uses)ms
+2026('change)ms
+295 809 m
+(files')s
+414(for)ms
+489(various)ms
+653(purposes,)ms
+860(one)ms
+949(of)ms
+1007(them)ms
+1124(versioning)ms
+1351(\(for)ms
+1443(more)ms
+1562(details)ms
+1710(see)ms
+1790(e.g.)ms
+1879(Sewell)ms
+2032([Sewell)ms
+295 749 m
+(1989])s
+422(or)ms
+474(Appelt)ms
+621(and)ms
+704(Horn)ms
+818([1986]\).)ms
+991(We)ms
+1071(use)ms
+1148(the)ms
+1220(term)ms
+1323('versioning')ms
+1578(\(row)ms
+1683(10\))ms
+1760(because)ms
+1929(neither)ms
+2079(CLiP)ms
+295 689 m
+(nor)s
+377(WEB)ms
+503(do)ms
+569(perform)ms
+745(real)ms
+836('version)ms
+1015(management'.)ms
+1315(LIPED)ms
+1473(includes)ms
+1655(version)ms
+1817(information)ms
+2069(in)ms
+2123(the)ms
+295 629 m
+(names)s
+434(of)ms
+488(code)ms
+594(fragments.)ms
+819(The)ms
+908(Smalltalk)ms
+1112(environment)ms
+1377(relies)ms
+1497(on)ms
+1559(the)ms
+1632(underlying)ms
+1861(system)ms
+2011(for)ms
+2082(these)ms
+295 569 m
+(purposes.)s
+8 FB
+295 204 m
+(The)s
+355(CLiP)ms
+433(Style)ms
+510(of)ms
+546(Literate)ms
+658(Programming)ms
+850(\(4.074,)ms
+953(26-feb-93\))ms
+12 FB
+2075 204 m
+( 9 )s
+50 2 2130 216 li
+50 2 2020 216 li
+endpage
+%%Page: 9 10
+delay mfeed
+begpage
+10 FB
+870 3180 m
+(CLiP)s
+1052 3180 m
+(...WEB)s
+1227 3180 m
+(cweb)s
+1350 3180 m
+(c-no-web)s
+1565 3180 m
+(HSD)s
+1737 3180 m
+(LIPED)s
+1921 3180 m
+(Smalltalk-env)s
+337 3104 m
+(1)s
+379 3104 m
+(Programming language)s
+884 3104 m
+(any)s
+1050 3104 m
+(see text)s
+1262 3104 m
+(c)s
+1419 3104 m
+(c)s
+1598 3104 m
+(c)s
+1737 3104 m
+(several)s
+1958 3104 m
+(Smalltalk)s
+337 3054 m
+(2)s
+379 3054 m
+(Data files etc.)s
+886 3054 m
+(yes)s
+1093 3054 m
+(no)s
+1250 3054 m
+(no)s
+1408 3054 m
+(no)s
+1586 3054 m
+(no)s
+1775 3054 m
+(no)s
+2010 3054 m
+(yes)s
+337 2978 m
+(3)s
+379 2978 m
+(Text processing env.)s
+884 2978 m
+(any)s
+1076 2978 m
+(TeX)s
+1234 2978 m
+(troff)s
+1356 2978 m
+(\(La\)TeX)s
+1548 2978 m
+(LaTeX)s
+1733 2978 m
+(see text)s
+1980 2978 m
+(special)s
+337 2928 m
+(4)s
+379 2928 m
+(Editing)s
+854 2928 m
+(editor /)s
+1083 2928 m
+(any)s
+1241 2928 m
+(any)s
+1398 2928 m
+(any)s
+1546 2928 m
+(built-in)s
+1735 2928 m
+(built-in)s
+1976 2928 m
+(built-in)s
+834 2878 m
+(wordproc)s
+1065 2878 m
+(editor)s
+1222 2878 m
+(editor)s
+1380 2878 m
+(editor)s
+1558 2878 m
+(editor)s
+1747 2878 m
+(editor)s
+1989 2878 m
+(editor)s
+337 2828 m
+(5)s
+379 2828 m
+(On line documentation)s
+893 2828 m
+(no)s
+1093 2828 m
+(no)s
+1250 2828 m
+(no)s
+1408 2828 m
+(no)s
+1579 2828 m
+(yes)s
+1768 2828 m
+(yes)s
+2010 2828 m
+(yes)s
+337 2752 m
+(6)s
+379 2752 m
+(Nr. of source files)s
+868 2752 m
+(many)s
+1103 2752 m
+(1)s
+1261 2752 m
+(1)s
+1418 2752 m
+(1)s
+1597 2752 m
+(1)s
+1776 2752 m
+(1?)s
+1968 2752 m
+(\(library\))s
+337 2702 m
+(7)s
+379 2702 m
+(Nr. of modules)s
+868 2702 m
+(many)s
+1103 2702 m
+(1)s
+1261 2702 m
+(1)s
+1418 2702 m
+(1)s
+1597 2702 m
+(1)s
+1776 2702 m
+(1?)s
+1968 2702 m
+(\(library\))s
+337 2652 m
+(8)s
+379 2652 m
+(Suppressing details)s
+886 2652 m
+(yes)s
+1093 2652 m
+(no)s
+1250 2652 m
+(no)s
+1408 2652 m
+(no)s
+1586 2652 m
+(no)s
+1775 2652 m
+(no)s
+2017 2652 m
+(no)s
+337 2602 m
+(9)s
+379 2602 m
+(Debugging code)s
+886 2602 m
+(yes)s
+1086 2602 m
+(yes)s
+1243 2602 m
+(yes)s
+1408 2602 m
+(no)s
+1586 2602 m
+(no)s
+1775 2602 m
+(no)s
+2010 2602 m
+(yes)s
+316 2552 m
+(10)s
+379 2552 m
+(Versioning)s
+886 2552 m
+(yes)s
+1086 2552 m
+(yes)s
+1250 2552 m
+(no)s
+1408 2552 m
+(no)s
+1586 2552 m
+(no)s
+1768 2552 m
+(yes)s
+2010 2552 m
+(yes)s
+316 2476 m
+(11)s
+379 2476 m
+(Documentation structure)s
+882 2476 m
+(free)s
+1054 2476 m
+(limited)s
+1239 2476 m
+(free)s
+1386 2476 m
+(fixed)s
+1564 2476 m
+(fixed)s
+1764 2476 m
+(free)s
+2005 2476 m
+(free)s
+316 2426 m
+(12)s
+379 2426 m
+(Code formatting)s
+893 2426 m
+(no)s
+1086 2426 m
+(yes)s
+1250 2426 m
+(no)s
+1408 2426 m
+(no)s
+1579 2426 m
+(yes)s
+1768 2426 m
+(yes)s
+2010 2426 m
+(yes)s
+316 2376 m
+(13)s
+379 2376 m
+(Automatic index)s
+893 2376 m
+(no)s
+1086 2376 m
+(yes)s
+1234 2376 m
+(yes?)s
+1408 2376 m
+(no)s
+1586 2376 m
+(no)s
+1754 2376 m
+(\(yes\))s
+1996 2376 m
+(\(yes\))s
+12 FB
+669 2274 m
+(Table 1: Properties of various literate programming tools)s
+342 2154 m
+(The)s
+435(last)ms
+520(part)ms
+613(of)ms
+671(the)ms
+747(table)ms
+860(relates)ms
+1006(to)ms
+1061(the)ms
+1138('book)ms
+1270(format)ms
+1419(paradigm'.)ms
+1668(All)ms
+1748(tools)ms
+1861(allow)ms
+1987(automatic)ms
+295 2094 m
+(generation)s
+521(of)ms
+578(a)ms
+615(table)ms
+728(of)ms
+785(contents,)ms
+979(use)ms
+1061(of)ms
+1118(type)ms
+1219(faces,)ms
+1350(semi-automatic)ms
+1673(indexing)ms
+1864(etc.)ms
+1950(Indexing)ms
+2143(of)ms
+295 2034 m
+(program)s
+476(identifiers)ms
+691(is)ms
+736(fully)ms
+842(automatic)ms
+1051(\(row)ms
+1158(11\))ms
+1236(in)ms
+1287(the)ms
+1360(WEB)ms
+1483(family.)ms
+1638(The)ms
+1728(Smalltalk)ms
+1932(environment)ms
+295 1974 m
+(and)s
+382(LIPED)ms
+539(use)ms
+620(an)ms
+683(internal)ms
+851(representation)ms
+1149(that)ms
+1239(allows)ms
+1385(automated)ms
+1609(interfacing)ms
+1840(to)ms
+1894(the)ms
+1971(semi-auto-)ms
+295 1914 m
+(matic)s
+418(mechanism)ms
+658(of)ms
+712(a)ms
+747(text)ms
+835(formatter.)ms
+1046(With)ms
+1158(CLiP)ms
+1276(indexing)ms
+1464(fully)ms
+1571(depends)ms
+1747(on)ms
+1810(the)ms
+1883(text)ms
+1971(processing)ms
+295 1854 m
+(tools)s
+409(used;)ms
+531(no)ms
+598(automatic)ms
+812(means)ms
+956(are)ms
+1034(available)ms
+1231(to)ms
+1287(generate)ms
+1473(cross)ms
+1593(reference)ms
+1795(lists)ms
+1893(in)ms
+1948(the)ms
+2026(type-set)ms
+295 1794 m
+(documentation.)s
+616(Neither)ms
+778(does)ms
+882(the)ms
+955(CLiP)ms
+1073(approach)ms
+1268(support)ms
+1430(formatting)ms
+1654(of)ms
+1707(the)ms
+1781(code)ms
+1887(\(row)ms
+1994(12\))ms
+2072(in)ms
+2123(the)ms
+295 1734 m
+(documentation,)s
+617(but)ms
+693(this)ms
+778(is)ms
+824(felt)ms
+903(as)ms
+957(an)ms
+1017(advantage)ms
+1232(rather)ms
+1361(than)ms
+1460(a)ms
+1494(disadvantage)ms
+1768(\(see)ms
+1861(section)ms
+2015(5\).)ms
+342 1674 m
+(In)s
+396(most)ms
+507(systems,)ms
+691(including)ms
+893(CLiP,)ms
+1024(the)ms
+1099(literate)ms
+1251(programmer)ms
+1511(is)ms
+1558(totally)ms
+1699(free)ms
+1789(to)ms
+1842(choose)ms
+1994(a)ms
+2029(suitable)ms
+295 1614 m
+(structure)s
+479(of)ms
+531(documentation)ms
+838(\(row)ms
+942(13\).)ms
+1031(In)ms
+1082(WEB,)ms
+1216(however,)ms
+1410(only)ms
+1509(two)ms
+1594(levels)ms
+1720(of)ms
+1772(sections)ms
+1943(are)ms
+2014(allowed.)ms
+295 1554 m
+(HSD)s
+405(generates)ms
+604(the)ms
+675(documentation)ms
+983(as)ms
+1035(a)ms
+1067(preorder)ms
+1247(traversal)ms
+1430(of)ms
+1482(the)ms
+1553(tree)ms
+1638(of)ms
+1690(code)ms
+1795(fragments.)ms
+2018(Because)ms
+295 1494 m
+(the)s
+368(source)ms
+510(files)ms
+608(of)ms
+662(c-no-web)ms
+862(are)ms
+935(the)ms
+1008(c)ms
+1042(modules)ms
+1224(with)ms
+1324(embedded)ms
+1542(formatting)ms
+1765(commands,)ms
+2006(the)ms
+2079(order)ms
+295 1434 m
+(of)s
+349(the)ms
+422(code)ms
+529(is)ms
+575(\(necessarily\))ms
+843(retained)ms
+1017(in)ms
+1068(the)ms
+1142(printed)ms
+1296(documentation.)ms
+12 FAB
+295 1310 m
+(5 Experiences)s
+12 FB
+295 1224 m
+(Many)s
+430(authors)ms
+597(have)ms
+710(reported)ms
+896(their)ms
+1006(experiences)ms
+1261(with)ms
+1369(literate)ms
+1527(programming)ms
+1819(in)ms
+1877(general)ms
+2043([Knuth)ms
+295 1164 m
+(1984,)s
+417(Thimbleby)ms
+646(1986,)ms
+768(Van)ms
+861(Wyk)ms
+967(1987,)ms
+1090(Reenskaug)ms
+1319(1989,)ms
+1441(Oman)ms
+1572(1990b,)ms
+1720(Ramsey)ms
+1890(1991,)ms
+2012(Ammers)ms
+295 1104 m
+(1992,)s
+421(Smith)ms
+554(1992,)ms
+681(Levy)ms
+797(1993].)ms
+940(Here)ms
+1051(we)ms
+1124(report)ms
+1257(on)ms
+1321(our)ms
+1401(experiences)ms
+1651(with)ms
+1754(the)ms
+1829(CLiP)ms
+1948(approach)ms
+2146(in)ms
+295 1044 m
+(particular.)s
+342 984 m
+(The)s
+432(CLiP)ms
+551(system)ms
+703(has)ms
+783(been)ms
+891(operational)ms
+1129(for)ms
+1201(about)ms
+1325(two)ms
+1413(years)ms
+1532(on)ms
+1595(VAX/VMS.)ms
+1851(Since)ms
+1976(a)ms
+2011(year)ms
+2110(it)ms
+2151(is)ms
+295 924 m
+(also)s
+392(available)ms
+590(for)ms
+665(MS-DOS)ms
+871(systems.)ms
+1059(CLiP)ms
+1182(\(and)ms
+1287(its)ms
+1352(predecessor)ms
+1605(VAMP\))ms
+1783(has)ms
+1867(been)ms
+1978(used)ms
+2087(for)ms
+2162(a)ms
+295 864 m
+(variety)s
+450(of)ms
+509(middle)ms
+665(size)ms
+760(programs)ms
+966(\(10k)ms
+1075(-)ms
+1109(30k)ms
+1201(lines)ms
+1312(of)ms
+1371(code\).)ms
+1512(The)ms
+1606(textprocessing)ms
+1912(environments)ms
+295 804 m
+(range)s
+416(from)ms
+523(the)ms
+594(formatters)ms
+809(Runoff)ms
+961(and)ms
+1043(Latex)ms
+1167(to)ms
+1216(the)ms
+1287(word-processors)ms
+1627(Lotus)ms
+1751(Manuscript)ms
+1989(and)ms
+2071(Word)ms
+295 744 m
+(Perfect.)s
+465(The)ms
+558(programming)ms
+846(languages)ms
+1062(have)ms
+1172(mainly)ms
+1327(been)ms
+1438(Fortran,)ms
+1613(Pascal,)ms
+1769(Turbo)ms
+1907(Pascal)ms
+2051(Vision)ms
+295 684 m
+(and)s
+379(Modula-2.)ms
+342 624 m
+(We)s
+422(have)ms
+528(found)ms
+656(that)ms
+742(the)ms
+815(CLiP)ms
+932(style)ms
+1038(of)ms
+1091(programming)ms
+1374(is)ms
+1419(sufficiently)ms
+1658(intuitive)ms
+1836(to)ms
+1887(be)ms
+1945(very)ms
+2045(easy)ms
+2146(to)ms
+295 564 m
+(learn)s
+409(and)ms
+495(use.)ms
+588(This)ms
+692(is)ms
+739(at)ms
+789(least)ms
+895(partly)ms
+1026(due)ms
+1112(to)ms
+1166(the)ms
+1241(fact)ms
+1330(that)ms
+1419(the)ms
+1495(CLiP)ms
+1614(programmer)ms
+1876(deals)ms
+1993(with)ms
+2096(only)ms
+295 504 m
+(two)s
+382(languages)ms
+595(and)ms
+679(a)ms
+714(couple)ms
+860(of)ms
+914(style)ms
+1022(concepts)ms
+1209(rather)ms
+1338(than)ms
+1437(with)ms
+1539(four)ms
+1634(independent)ms
+1891(languages)ms
+2104(\(see)ms
+295 444 m
+(section)s
+460(1\).)ms
+538(In)ms
+603(this)ms
+699(respect)ms
+864(CLiP)ms
+993(is)ms
+1050(undoubtedly)ms
+1324(superior)ms
+1511(over)ms
+1623(other)ms
+1750(literate)ms
+1912(programming)ms
+295 384 m
+(approaches.)s
+8 FB
+295 204 m
+(The)s
+355(CLiP)ms
+433(Style)ms
+510(of)ms
+546(Literate)ms
+658(Programming)ms
+850(\(4.074,)ms
+953(26-feb-93\))ms
+12 FB
+2050 204 m
+( 10 )s
+50 2 2130 216 li
+50 2 1995 216 li
+1886 4 295 2352 li
+4 172 2177 2440 li
+4 172 807 2440 li
+1886 4 295 2528 li
+4 272 2177 2666 li
+4 272 807 2666 li
+1886 4 295 2804 li
+4 222 2177 2917 li
+4 222 807 2917 li
+1886 4 295 3030 li
+4 122 2177 3093 li
+4 122 807 3093 li
+1886 4 295 3156 li
+4 54 2177 3185 li
+4 54 807 3185 li
+endpage
+%%Page: 10 11
+delay mfeed
+begpage
+12 FB
+342 3179 m
+(The)s
+436(fact)ms
+527(that)ms
+618(the)ms
+696(author/programmer)ms
+1101(is)ms
+1151(free)ms
+1245(to)ms
+1300(use)ms
+1383(his)ms
+1458(own)ms
+1561(preferred)ms
+1760(text)ms
+1852(processing)ms
+2082(envi-)ms
+295 3119 m
+(ronment)s
+474(is)ms
+520(very)ms
+622(convenient)ms
+855(and)ms
+940(makes)ms
+1080(it)ms
+1121(rather)ms
+1251(easy)ms
+1353(to)ms
+1404(accept)ms
+1545(the)ms
+1619(CLiP)ms
+1738(system.)ms
+1902(CLiP)ms
+2021(imposes)ms
+295 3059 m
+(virtually)s
+474(no)ms
+533(limits)ms
+657(on)ms
+717(the)ms
+788(way)ms
+881(a)ms
+912(text)ms
+997(processing)ms
+1221(system)ms
+1369(is)ms
+1412(being)ms
+1533(used.)ms
+1647(In)ms
+1698(particular)ms
+1900(CLiP)ms
+2015(supports)ms
+295 2999 m
+(the)s
+368(use)ms
+447(of)ms
+501(any)ms
+586(sort)ms
+673(of)ms
+727(illustrations)ms
+976(for)ms
+1047(explanatory)ms
+1295(purposes,)ms
+1498(which)ms
+1632(is)ms
+1678(generally)ms
+1876(recognized)ms
+2108(as)ms
+2162(a)ms
+295 2939 m
+(important)s
+504(advantage)ms
+723([Thimbleby)ms
+974(1986,)ms
+1102(Reenskaug)ms
+1337(1989,)ms
+1465(Ramsey)ms
+1642(1991].)ms
+1787(We)ms
+1871(found)ms
+2004(it)ms
+2047(a)ms
+2085(great)ms
+295 2879 m
+(help)s
+393(being)ms
+517(able)ms
+613(to)ms
+664(explain)ms
+824(data)ms
+919(structures)ms
+1126(not)ms
+1203(only)ms
+1304(by)ms
+1367(words,)ms
+1514(but)ms
+1590(also)ms
+1683(in)ms
+1735(terms)ms
+1858(of)ms
+1912(diagrams.)ms
+342 2819 m
+(We)s
+420(consider)ms
+599(CLiP's)ms
+749(independence)ms
+1033(of)ms
+1084(a)ms
+1116(programming)ms
+1397(language)ms
+1586(a)ms
+1618(definite)ms
+1780(advantage.)ms
+2004(Together)ms
+295 2759 m
+(with)s
+401(its)ms
+465(ability)ms
+610(to)ms
+666(extract)ms
+819(several)ms
+978(modules)ms
+1164(from)ms
+1278(a)ms
+1318(set)ms
+1390(of)ms
+1449(files)ms
+1552(it)ms
+1597(provides)ms
+1787(a)ms
+1826(much)ms
+1954(appreciated)ms
+295 2699 m
+(flexibility.)s
+514(We)ms
+592(not)ms
+666(only)ms
+764(extract)ms
+910(the)ms
+980(program)ms
+1159(modules,)ms
+1350(but)ms
+1424(also)ms
+1514(various)ms
+1670(additional)ms
+1880(files)ms
+1975(the)ms
+2046(system)ms
+295 2639 m
+(may)s
+393(need)ms
+500(for)ms
+571(proper)ms
+714(use)ms
+793(and)ms
+878(maintenance.)ms
+1155(The)ms
+1246(appendices)ms
+1480(display)ms
+1637(an)ms
+1697(example.)ms
+342 2579 m
+(A)s
+392(general)ms
+553(problem)ms
+734(with)ms
+837(literate)ms
+990(programming)ms
+1276(tools)ms
+1388(is)ms
+1435(called)ms
+1569(the)ms
+1644(preprocessor)ms
+1913(problem.)ms
+2107(The)ms
+295 2519 m
+(compiler)s
+485(and)ms
+571(debugger)ms
+770(will)ms
+861(give)ms
+960(their)ms
+1064(reports)ms
+1216(with)ms
+1318(respect)ms
+1473(to)ms
+1525(the)ms
+1599(line)ms
+1687(numbers)ms
+1872(of)ms
+1927(the)ms
+2001(extracted)ms
+295 2459 m
+(modules)s
+477(rather)ms
+607(than)ms
+706(the)ms
+780(original)ms
+949(documentation.)ms
+1272(For)ms
+1354(this)ms
+1439(reason)ms
+1583(the)ms
+1657(modules)ms
+1840(have)ms
+1947(to)ms
+1999(be)ms
+2059(exam-)ms
+295 2399 m
+(ined)s
+393(next)ms
+492(to)ms
+544(the)ms
+618(documentation)ms
+928(and)ms
+1013(the)ms
+1087(references)ms
+1306(are)ms
+1380(indirect.)ms
+1558(This)ms
+1659(is)ms
+1706(a)ms
+1741(nuisance,)ms
+1941(especially)ms
+2154(if)ms
+295 2339 m
+(the)s
+370(layout)ms
+509(of)ms
+566(the)ms
+641(modules)ms
+825(has)ms
+906(little)ms
+1012(correspondence)ms
+1340(to)ms
+1394(the)ms
+1469(code)ms
+1578(lines)ms
+1687(of)ms
+1743(the)ms
+1819(documentation.)ms
+2143(In)ms
+295 2279 m
+(our)s
+375(view)ms
+486(Knuth)ms
+624(is)ms
+671(definitely)ms
+876(wrong)ms
+1018(in)ms
+1070(asserting)ms
+1262(that)ms
+1350(the)ms
+1425(intermediate)ms
+1689(modules)ms
+1872(can)ms
+1955(\(and)ms
+2057(in)ms
+2110(fact)ms
+295 2219 m
+(should\))s
+456(be)ms
+514(ignored,)ms
+691(the)ms
+763(reason)ms
+905(why)ms
+1003(his)ms
+1072(WEB)ms
+1195(system)ms
+1345(produces)ms
+1537(deliberately)ms
+1784(unreadable)ms
+2015(modules)ms
+295 2159 m
+([Knuth)s
+446(1984].)ms
+586(CLiP)ms
+702(does)ms
+804(not)ms
+878(format)ms
+1021(the)ms
+1093(code)ms
+1197(fragments,)ms
+1420(neither)ms
+1569(in)ms
+1618(the)ms
+1690(documentation)ms
+1997(nor)ms
+2074(in)ms
+2123(the)ms
+295 2099 m
+(extracted)s
+499(modules.)ms
+702(Therefore)ms
+920(the)ms
+1003(code)ms
+1118(fragments)ms
+1339(look)ms
+1449(very)ms
+1560(much)ms
+1692(alike)ms
+1810(in)ms
+1870(both)ms
+1980(situations.)ms
+295 2039 m
+(Although)s
+495(this)ms
+578(does)ms
+681(not)ms
+756(eliminate)ms
+954(the)ms
+1026(preprocessor)ms
+1293(problem)ms
+1471(of)ms
+1524(course,)ms
+1678(it)ms
+1717(makes)ms
+1856(it)ms
+1895(much)ms
+2018(easier)ms
+2146(to)ms
+295 1979 m
+(deal)s
+390(with)ms
+492([Ramsey)ms
+682(1991].)ms
+342 1919 m
+(The)s
+436(most)ms
+550(prominent)ms
+773(disadvantage)ms
+1051(of)ms
+1110(CLiP)ms
+1232(is)ms
+1282(its)ms
+1347(inability)ms
+1530(to)ms
+1586(produce)ms
+1764(an)ms
+1828(index)ms
+1956(of)ms
+2015(program)ms
+295 1859 m
+(identifiers)s
+508(fully)ms
+614(automatically.)ms
+910(This)ms
+1010(problem)ms
+1188(is)ms
+1233(inherent)ms
+1408(to)ms
+1458(CLiPs)ms
+1594(language)ms
+1786(independence.)ms
+2084(With)ms
+295 1799 m
+(CLiP)s
+411(one)ms
+494(has)ms
+571(to)ms
+621(create)ms
+751(an)ms
+809(X-ref)ms
+929(list)ms
+1001(the)ms
+1072(same)ms
+1186(way)ms
+1280(as)ms
+1333(one)ms
+1416(would)ms
+1552(create)ms
+1682(the)ms
+1754(index)ms
+1876(of)ms
+1928(a)ms
+1961(book.)ms
+2084(Thus)ms
+295 1739 m
+(the)s
+368(text)ms
+456(processing)ms
+682(system)ms
+833(completely)ms
+1068(determines)ms
+1300(the)ms
+1374(degree)ms
+1519(of)ms
+1573(support)ms
+1736(for)ms
+1807(this)ms
+1892(activity.)ms
+342 1679 m
+(If)s
+385(CLiP)ms
+500(is)ms
+543(used)ms
+644(with)ms
+743(a)ms
+775(word-processor,)ms
+1108(one)ms
+1190(has)ms
+1266(to)ms
+1315(export)ms
+1453(ASCII-files)ms
+1696(from)ms
+1803(the)ms
+1873(word-processor)ms
+295 1619 m
+(files)s
+398(before)ms
+542(CLiP)ms
+665(can)ms
+752(proceed.)ms
+939(This)ms
+1045(implies)ms
+1210(a)ms
+1249(small)ms
+1374(amount)ms
+1541(of)ms
+1600(overhead)ms
+1800(which)ms
+1940(we)ms
+2015(consider)ms
+295 1559 m
+(neglectable.)s
+12 FAB
+295 1436 m
+(6 Future developments)s
+12 FB
+295 1349 m
+(The)s
+386(quest)ms
+506(for)ms
+578(techniques)ms
+806(to)ms
+859(write)ms
+976(comprehensible)ms
+1306(programs)ms
+1509(started)ms
+1656(in)ms
+1709(the)ms
+1784(early)ms
+1898(seventies)ms
+2096(with)ms
+295 1289 m
+(structured)s
+508(programming)ms
+795([Dijkstra)ms
+986(1972,)ms
+1113(Wirth)ms
+1244(1971/1974].)ms
+1501(Literate)ms
+1670(programming)ms
+1957(is)ms
+2004(a)ms
+2040(signifi-)ms
+295 1229 m
+(cant)s
+391(step)ms
+485(forwards,)ms
+688(formulated)ms
+921(by)ms
+984(Lins)ms
+1087(as)ms
+1141("Literate)ms
+1331(programming)ms
+1616(=)ms
+1658(structured)ms
+1871(programming)ms
+2156(+)ms
+295 1169 m
+(structured)s
+507(documentation")ms
+837([Lins)ms
+955(1989].)ms
+1097(What)ms
+1218(more)ms
+1333(can)ms
+1415(we)ms
+1486(expect)ms
+1629(in)ms
+1680(the)ms
+1754(future?)ms
+342 1109 m
+(A)s
+397(fairly)ms
+524(obvious)ms
+701(idea)ms
+804(is)ms
+856(to)ms
+914(replace)ms
+1077(the)ms
+1158(book)ms
+1277(format)ms
+1429(by)ms
+1498(hypertext)ms
+1706(structures.)ms
+1932(Experiments)ms
+295 1049 m
+(indicate)s
+465(that)ms
+552(the)ms
+626(way)ms
+721(in)ms
+772(which)ms
+907(information)ms
+1155(is)ms
+1201(disclosed)ms
+1399(by)ms
+1461(means)ms
+1601(of)ms
+1655(different)ms
+1839(access)ms
+1979(paths)ms
+2097(is)ms
+2143(of)ms
+295 989 m
+(eminent)s
+477(importance)ms
+722(for)ms
+802(its)ms
+870(comprehensibility)ms
+1252([Oman)ms
+1412(1990a/1990b].)ms
+1723(Since)ms
+1855(a)ms
+1898(hypertext)ms
+2108(is)ms
+2162(a)ms
+295 929 m
+(generalization)s
+589(of)ms
+642(the)ms
+715(conventional)ms
+984(book)ms
+1096(format)ms
+1240(there)ms
+1352(can)ms
+1433(be)ms
+1491(no)ms
+1553(doubt)ms
+1678(that)ms
+1764(it)ms
+1803(provides)ms
+1987(a)ms
+2021(superior)ms
+295 869 m
+(paradigm)s
+498(in)ms
+551(this)ms
+638(respect.)ms
+806(In)ms
+862(addition)ms
+1040(a)ms
+1077(hypertext)ms
+1280(easily)ms
+1411(accommodates)ms
+1723(a)ms
+1759(multimedia)ms
+2001(approach)ms
+295 809 m
+(to)s
+347(code)ms
+455(explanation.)ms
+714(It)ms
+758(would)ms
+897(for)ms
+969(instance)ms
+1146(be)ms
+1207(possible)ms
+1384(to)ms
+1437(explain)ms
+1598(the)ms
+1672(behaviour)ms
+1886(of)ms
+1941(a)ms
+1977(given)ms
+2101(data)ms
+295 749 m
+(structure)s
+482(by)ms
+544(an)ms
+604(animation)ms
+817(in)ms
+868(moving)ms
+1033(images)ms
+1188(rather)ms
+1317(than)ms
+1415(by)ms
+1478(a)ms
+1512(description)ms
+1747(in)ms
+1799(plain)ms
+1911(English.)ms
+342 689 m
+(It)s
+384(is)ms
+429(possible)ms
+605(to)ms
+656(formalize)ms
+859(the)ms
+932(design)ms
+1074(steps)ms
+1186(that)ms
+1273(we)ms
+1343(make)ms
+1463(to)ms
+1514(\(de\)compose)ms
+1784(a)ms
+1818(system)ms
+1969(in)ms
+2020(terms)ms
+2143(of)ms
+295 629 m
+(a)s
+336(particular)ms
+547(model.)ms
+704(For)ms
+793(instance)ms
+976(Back)ms
+1099(and)ms
+1190(Morris)ms
+1346(have)ms
+1460(formalized)ms
+1696(the)ms
+1776(stepwise)ms
+1968(refinement)ms
+295 569 m
+(technique)s
+502(as)ms
+556(proposed)ms
+752(by)ms
+815(Dijkstra)ms
+989(and)ms
+1074(Wirth)ms
+1204(in)ms
+1255(the)ms
+1329(early)ms
+1442(seventies)ms
+1638([Wirth)ms
+1784(1971/1974,)ms
+2023(Dijkstra)ms
+295 509 m
+(1972,)s
+424(Back)ms
+545(1980,)ms
+675(Morris)ms
+828(1987].)ms
+975(Let)ms
+1059(us)ms
+1121(consider)ms
+1308(the)ms
+1386(programming)ms
+1676(process)ms
+1843(as)ms
+1902(a)ms
+1942(sequence)ms
+2143(of)ms
+295 449 m
+(design)s
+434(steps)ms
+543(each)ms
+644(of)ms
+695(which)ms
+826(is)ms
+869(implemented)ms
+1139(by)ms
+1198(a)ms
+1229(certain)ms
+1374(amount)ms
+1533(of)ms
+1584(code.)ms
+1700(In)ms
+1751(the)ms
+1821(context)ms
+1978(of)ms
+2028(a)ms
+2060(model)ms
+295 389 m
+(it)s
+333(is)ms
+376(possible)ms
+551(to)ms
+600(validate)ms
+768(the)ms
+840(code)ms
+945(of)ms
+997(every)ms
+1118(step)ms
+1209(with)ms
+1308(respect)ms
+1460(to)ms
+1509(the)ms
+1581(corresponding)ms
+1877(design)ms
+2018(decision)ms
+295 329 m
+(and)s
+379(to)ms
+431(support)ms
+593(the)ms
+667(validation)ms
+879(process)ms
+1042(by)ms
+1104(means)ms
+1244(of)ms
+1299(a)ms
+1333(tool.)ms
+8 FB
+295 204 m
+(The)s
+355(CLiP)ms
+433(Style)ms
+510(of)ms
+546(Literate)ms
+658(Programming)ms
+850(\(4.074,)ms
+953(26-feb-93\))ms
+12 FB
+2050 204 m
+( 11 )s
+50 2 2130 216 li
+50 2 1995 216 li
+endpage
+%%Page: 11 12
+delay mfeed
+begpage
+12 FB
+342 3179 m
+(The)s
+432(metaphor)ms
+634(of)ms
+689(a)ms
+725(literate)ms
+876(program)ms
+1059(as)ms
+1114(a)ms
+1149(textbook)ms
+1337(can)ms
+1420(be)ms
+1480(carried)ms
+1632(through)ms
+1801(even)ms
+1908(further)ms
+2058(to)ms
+2110(that)ms
+295 3119 m
+(of)s
+354(a)ms
+393(mathematical)ms
+680(textbook.)ms
+885(A)ms
+939(mathematical)ms
+1226(textbook)ms
+1418(does)ms
+1527(not)ms
+1608(explain)ms
+1773(a)ms
+1813(theory)ms
+1958(in)ms
+2014(terms)ms
+2143(of)ms
+295 3059 m
+(theorems)s
+488(that)ms
+573(are)ms
+644(proven)ms
+793(by)ms
+853(formal)ms
+996(techniques.)ms
+1233(Instead)ms
+1387(it)ms
+1425(derives)ms
+1579(its)ms
+1636(proofs)ms
+1774(by)ms
+1834('informal)ms
+2033(rigour',)ms
+295 2999 m
+(that)s
+392(is)ms
+447(the)ms
+531(proofs)ms
+681(are)ms
+764(written)ms
+928(in)ms
+989(natural)ms
+1151(language)ms
+1353(but)ms
+1440(in)ms
+1501(a)ms
+1545(very)ms
+1657(precise)ms
+1820(and)ms
+1915(unambiguous)ms
+295 2939 m
+(formulation.)s
+555(Using)ms
+686(the)ms
+758(same)ms
+872(technique)ms
+1078(a)ms
+1112(literate)ms
+1262(program)ms
+1443(can,)ms
+1537(at)ms
+1584(least)ms
+1688(in)ms
+1738(principle,)ms
+1940(be)ms
+1998(modelled)ms
+295 2879 m
+(as)s
+356(an)ms
+423(informal)ms
+615(correctness)ms
+860(argument)ms
+1069(for)ms
+1147(the)ms
+1228(implemented)ms
+1509(system.)ms
+1680(This)ms
+1789(seems)ms
+1931(an)ms
+1998(attractive)ms
+295 2819 m
+(thought)s
+457(especially)ms
+666(in)ms
+714(a)ms
+746(context)ms
+903(where)ms
+1034(\(de\)composition)ms
+1371(steps)ms
+1481(can)ms
+1559(be)ms
+1616(validated)ms
+1809(by)ms
+1868(automatic)ms
+2075(tools.)ms
+295 2759 m
+(In)s
+349(our)ms
+428(department)ms
+665(we)ms
+736(are)ms
+810(exploring)ms
+1014(this)ms
+1099(path.)ms
+12 FAB
+295 2636 m
+(7 Conclusions)s
+12 FB
+342 2549 m
+(Our)s
+434(experiences)ms
+685(with)ms
+789(literate)ms
+943(programming)ms
+1231(in)ms
+1285(general)ms
+1447(and)ms
+1534(with)ms
+1638(CLiP)ms
+1759(in)ms
+1813(particular)ms
+2020(are)ms
+2096(very)ms
+295 2489 m
+(positive.)s
+478(CLiP)ms
+597(is)ms
+644(easy)ms
+746(to)ms
+798(use)ms
+877(and)ms
+963(its)ms
+1023(flexibility)ms
+1233(is)ms
+1280(very)ms
+1382(much)ms
+1506(appreciated.)ms
+1762(We)ms
+1844(fully)ms
+1952(confirm)ms
+2123(the)ms
+295 2429 m
+(observation)s
+541(of)ms
+595(others)ms
+730(that)ms
+818(the)ms
+892(improvement)ms
+1172(in)ms
+1223(quality)ms
+1375(of)ms
+1430(the)ms
+1504(final)ms
+1608(product)ms
+1774(by)ms
+1837(far)ms
+1905(outweighs)ms
+2123(the)ms
+295 2369 m
+(initial)s
+427(overhead)ms
+627(that)ms
+718(inevitably)ms
+934(goes)ms
+1042(with)ms
+1147(producing)ms
+1366(a)ms
+1405(program)ms
+1590(in)ms
+1646(literate)ms
+1801(form)ms
+1914([Knuth)ms
+2072(1984,)ms
+295 2309 m
+(Levy)s
+412(1993].)ms
+555(The)ms
+647(advantages)ms
+883(are)ms
+959(even)ms
+1067(more)ms
+1184(prominent)ms
+1404(when)ms
+1527(it)ms
+1569(comes)ms
+1711(to)ms
+1764(the)ms
+1839(maintenance)ms
+2106(of)ms
+2162(a)ms
+295 2249 m
+(program.)s
+342 2189 m
+(All)s
+415(of)ms
+467(the)ms
+538(present)ms
+692(literate)ms
+841(programming)ms
+1123(tools)ms
+1230(have)ms
+1335(originated)ms
+1547(from)ms
+1654(people)ms
+1798(in)ms
+1847(need)ms
+1951(of)ms
+2002(a)ms
+2035(module)ms
+295 2129 m
+(extractor)s
+484(for)ms
+553(at)ms
+601(best)ms
+693(a)ms
+727(limited)ms
+880(variety)ms
+1030(of)ms
+1083(environments.)ms
+1380(This)ms
+1480(is)ms
+1525(considered)ms
+1753(a)ms
+1787(serious)ms
+1940(drawback)ms
+2146(to)ms
+295 2069 m
+(make)s
+415(literate)ms
+565(programming)ms
+849(a)ms
+883(generally)ms
+1081(accepted)ms
+1268(technique)ms
+1474([Van)ms
+1585(Wyk)ms
+1694(1990].)ms
+1835(CLiP)ms
+1953(is)ms
+1998(unique)ms
+2146(in)ms
+295 2009 m
+(that)s
+388(it)ms
+435(has)ms
+520(been)ms
+633(designed)ms
+829(to)ms
+887(be)ms
+953(a)ms
+994(truly)ms
+1107(general)ms
+1273(literate)ms
+1430(programming)ms
+1721(tool.)ms
+1830(Consequently)ms
+2123(the)ms
+295 1949 m
+(system)s
+446(misses)ms
+592(a)ms
+626(few)ms
+714(features,)ms
+897(but)ms
+974(this)ms
+1058(is)ms
+1104(not)ms
+1181(experienced)ms
+1435(as)ms
+1489(a)ms
+1523(serious)ms
+1678(limitation.)ms
+12 FAB
+295 1826 m
+(8 References)s
+12 FB
+295 1739 m
+(Ammers)s
+483(E.W.)ms
+601(van)ms
+689(and)ms
+777(M.R.)ms
+896(Kramer,)ms
+1077(VAMP:)ms
+1251(A)ms
+1303(Tool)ms
+1413(for)ms
+1487(Programming)ms
+1778(Independent)ms
+2041(of)ms
+2098(Pro-)ms
+436 1679 m
+(gramming)s
+656(Language)ms
+868(and)ms
+956(Formatter,)ms
+12 FBI
+1180(Proceedings)ms
+1445(of)ms
+1499(the)ms
+1575(6th)ms
+1654(Annual)ms
+1814(Computer)ms
+2029(Confer-)ms
+12 FBI
+436 1619 m
+(ence)s
+540(CompEuro'92,)ms
+851(The)ms
+938(Hague,)ms
+1097(371-376)ms
+12 FB
+(.)s
+295 1544 m
+(Avenarius)s
+509(A.)ms
+566(and)ms
+648(S.)ms
+697(Oppermann)ms
+942(\(1990\),)ms
+1096(FWEB:)ms
+1258(A)ms
+1303(Literate)ms
+1468(Programming)ms
+1751(System)ms
+1908(for)ms
+1975(Fortran8x,)ms
+12 FBI
+436 1484 m
+(ACM)s
+554(Sigplan)ms
+719(Notices)ms
+881(25,)ms
+956(1,)ms
+1006(52-58)ms
+12 FB
+(.)s
+295 1409 m
+(Back)s
+413(R.J.)ms
+507(\(1980\),)ms
+669(Correctness)ms
+921(Preserving)ms
+1151(Program)ms
+1339(Refinements:)ms
+1621(Proof,)ms
+1761(Theory)ms
+1921(and)ms
+2010(Applica-)ms
+436 1349 m
+(tions,)s
+558(MC)ms
+648(Tract)ms
+766(131,)ms
+12 FBI
+866(Mathematical)ms
+1156(Centre)ms
+1305(Tracts)ms
+12 FB
+(,)s
+1458(Amsterdam.)ms
+295 1274 m
+(Bentley)s
+463(J.)ms
+509(and)ms
+594(D.E.)ms
+699(Knuth)ms
+837(\(1986a\),)ms
+1019(Programming)ms
+1307(Pearls:)ms
+1457(Literate)ms
+1625(Programming,)ms
+12 FBI
+1926(Communica-)ms
+12 FBI
+436 1214 m
+(tions)s
+545(of)ms
+597(the)ms
+670(ACM)ms
+788(29,)ms
+863(5,)ms
+913(364-369)ms
+12 FB
+(.)s
+295 1139 m
+(Bentley)s
+469(J.,)ms
+533(D.E.)ms
+644(Knuth)ms
+788(and)ms
+879(D.)ms
+947(McIlroy)ms
+1130(\(1986b\),)ms
+1320(Programming)ms
+1615(Pearls:)ms
+1770(A)ms
+1825(Literate)ms
+2000(Program,)ms
+12 FBI
+436 1079 m
+(Communications)s
+787(of)ms
+838(the)ms
+912(ACM)ms
+1030(29,)ms
+1105(6,)ms
+1155(471-483)ms
+12 FB
+(.)s
+295 1004 m
+(Bishop)s
+453(J.M.)ms
+559(and)ms
+648(K.M.)ms
+771(Gregson)ms
+957(\(1992\),)ms
+1120(Literate)ms
+1293(Programming)ms
+1585(and)ms
+1674(the)ms
+1752(LIPED)ms
+1911(Environment,)ms
+12 FBI
+436 944 m
+(Structured)s
+659(Programming)ms
+952(13,)ms
+1027(1,)ms
+1077(23-34)ms
+12 FB
+(.)s
+295 869 m
+(Brooks)s
+462(F.P.)ms
+565(\(1982\),)ms
+733(The)ms
+834(Mythical)ms
+1037(Man-Month:)ms
+1315(Essays)ms
+1474(on)ms
+1546(software)ms
+1741(Engineering,)ms
+12 FBI
+2021(Addison)ms
+12 FBI
+436 809 m
+(Wesley)s
+12 FB
+(,)s
+602(Reading,)ms
+794(Massachusets.)ms
+295 734 m
+(Dijkstra)s
+472(E.W.)ms
+590(\(1972\),)ms
+752(Notes)ms
+885(on)ms
+951(Structured)ms
+1175(Programming,)ms
+1479(pages)ms
+1609(1-82)ms
+1716(in)ms
+1771(Structured)ms
+1996(Program-)ms
+436 674 m
+(ming)s
+551(\(O.-J.)ms
+677(Dahl,)ms
+799(E.W.)ms
+915(Dijkstra)ms
+1088(and)ms
+1173(C.A.R.)ms
+1326(Hoare\),)ms
+12 FBI
+1490(Academic)ms
+1699(Press)ms
+12 FB
+(,)s
+1835(London.)ms
+295 599 m
+(Fox)s
+385(J.)ms
+429(\(1990\),)ms
+588(Webless)ms
+769(Literate)ms
+937(Programming,)ms
+12 FBI
+1237(TUGboat)ms
+1439(11,)ms
+1514(4,)ms
+1564(511-513)ms
+12 FB
+(.)s
+295 524 m
+(Knuth)s
+432(D.E.)ms
+536(\(1984\),)ms
+694(Literate)ms
+862(Programming,)ms
+12 FBI
+1162(The)ms
+1250(Computer)ms
+1462(Journal,)ms
+1643(27,)ms
+1718(2,)ms
+1768(97-111)ms
+12 FB
+(.)s
+295 449 m
+(Knuth)s
+432(D.E.)ms
+536(\(1986\),)ms
+694(TeX:)ms
+810(The)ms
+900(Program,)ms
+12 FBI
+1097(Addison)ms
+1274(Wesley)ms
+12 FB
+(.)s
+295 374 m
+(Levy)s
+410(S.)ms
+463(\(1987\),)ms
+621(WEB)ms
+744(Adapted)ms
+926(to)ms
+978(C:)ms
+1038(Another)ms
+1214(Approach,)ms
+12 FBI
+1436(TUGboat)ms
+1637(8,)ms
+1687(1,)ms
+1737(12-13)ms
+12 FB
+(.)s
+8 FB
+295 204 m
+(The)s
+355(CLiP)ms
+433(Style)ms
+510(of)ms
+546(Literate)ms
+658(Programming)ms
+850(\(4.074,)ms
+953(26-feb-93\))ms
+12 FB
+2050 204 m
+( 12 )s
+50 2 2130 216 li
+50 2 1995 216 li
+endpage
+%%Page: 12 13
+delay mfeed
+begpage
+12 FB
+295 3179 m
+(Lins)s
+396(C.)ms
+454(\(1989\),)ms
+613(A)ms
+661(First)ms
+765(Look)ms
+883(at)ms
+932(Literate)ms
+1100(Programming,)ms
+12 FBI
+1400(Structured)ms
+1624(Programming)ms
+1917(10,)ms
+1992(1,)ms
+2042(60-62)ms
+12 FB
+(.)s
+295 3104 m
+(Morris)s
+455(J.M.)ms
+568(\(1987\),)ms
+738(A)ms
+798(Theoretical)ms
+1050(Basis)ms
+1183(for)ms
+1265(Stepwise)ms
+1470(Refinement)ms
+1728(and)ms
+1824(the)ms
+1910(Programming)ms
+436 3044 m
+(Calculus,)s
+12 FBI
+636(Science)ms
+801(of)ms
+852(Computer)ms
+1065(Programming)ms
+1358(9,)ms
+1408(287-306)ms
+12 FB
+(.)s
+295 2969 m
+(Oman)s
+435(P.W.)ms
+553(and)ms
+643(C.R.)ms
+753(Cook)ms
+880(\(1990a\),)ms
+1066(The)ms
+1162(Book)ms
+1288(Paradigm)ms
+1498(for)ms
+1575(Improved)ms
+1787(Maintenance,)ms
+12 FBI
+2076(IEEE)ms
+12 FBI
+436 2909 m
+(Software)s
+626(7,)ms
+676(1,)ms
+726(39-45)ms
+12 FB
+(.)s
+295 2834 m
+(Oman)s
+428(P.W.)ms
+539(and)ms
+623(C.R.)ms
+725(Cook)ms
+845(\(1990b\),)ms
+1027(Typographic)ms
+1294(Style)ms
+1408(is)ms
+1452(More)ms
+1572(than)ms
+1669(Cosmic,)ms
+12 FBI
+1846(Communications)ms
+12 FBI
+436 2774 m
+(of)s
+487(the)ms
+561(ACM)ms
+679(33,)ms
+754(5,)ms
+804(506-520)ms
+12 FB
+(.)s
+295 2699 m
+(Parikh)s
+437(G.)ms
+497(and)ms
+581(N.)ms
+642(Zvegintov)ms
+859(\(eds.\))ms
+983(\(1983\).)ms
+1141(Tutorial)ms
+1314(on)ms
+1376(Software)ms
+1568(Maintenance,)ms
+12 FBI
+1851(IEEE/)ms
+1985(Computer)ms
+12 FBI
+436 2639 m
+(Society)s
+592(Press)ms
+12 FB
+(,)s
+729(Silver)ms
+860(Spring,)ms
+1019(Md.)ms
+295 2564 m
+(Parnas)s
+445(D.L.)ms
+553(and)ms
+642(C.)ms
+705(Clemants)ms
+911(\(1986\),)ms
+1073(A)ms
+1126(Rational)ms
+1313(Design)ms
+1471(Process:)ms
+1655(How)ms
+1769(and)ms
+1858(Why)ms
+1972(to)ms
+2027(Fake)ms
+2142(It,)ms
+12 FBI
+436 2504 m
+(Software)s
+626(Engineering)ms
+886(12,)ms
+961(2,)ms
+1011(251-257)ms
+12 FB
+(.)s
+295 2429 m
+(Ramsey)s
+469(N.)ms
+530(\(1989\),)ms
+689(Weaving)ms
+883(a)ms
+918(Language)ms
+1128(Independent)ms
+1389(WEB,)ms
+12 FBI
+1525(Communications)ms
+1877(of)ms
+1929(the)ms
+2003(ACM)ms
+2122(32,)ms
+12 FBI
+436 2369 m
+(9,)s
+486(1051-1055)ms
+12 FB
+(.)s
+295 2294 m
+(Ramsey)s
+465(N.)ms
+523(and)ms
+605(C.)ms
+660(Marceau)ms
+845(\(1991\),)ms
+1000(Literate)ms
+1165(Programming)ms
+1450(on)ms
+1509(a)ms
+1541(Team)ms
+1664(Project,)ms
+12 FBI
+1828(Software)ms
+2015(Practice)ms
+12 FBI
+436 2234 m
+(and)s
+523(Experience)ms
+760(21,)ms
+835(7,)ms
+885(677-683)ms
+12 FB
+(.)s
+295 2159 m
+(Reenskaug)s
+531(T.)ms
+591(and)ms
+681(A.L.)ms
+789(Skaar)ms
+920(\(1989\),)ms
+1083(An)ms
+1162(Environment)ms
+1440(for)ms
+1515(Literate)ms
+1688(Smalltalk)ms
+1897(Programming,)ms
+12 FBI
+436 2099 m
+(OOPSLA'89)s
+701(Proceedings,)ms
+976(337-345)ms
+12 FB
+(.)s
+295 2024 m
+(Sewell)s
+453(E.W.)ms
+578(\(1987\),)ms
+745(How)ms
+865(to)ms
+926(MANGLE)ms
+1162(your)ms
+1275(Software:)ms
+1492(The)ms
+1592(WEB)ms
+1725(System)ms
+1894(for)ms
+1975(Modula-2,)ms
+12 FBI
+436 1964 m
+(TUGboat)s
+637(8,)ms
+687(2,)ms
+737(118-122)ms
+12 FB
+(.)s
+295 1889 m
+(Sewell)s
+454(E.W.)ms
+580(\(1989\),)ms
+749(Weaving)ms
+953(a)ms
+999(Program:)ms
+1208(Literate)ms
+1387(Programming)ms
+1685(in)ms
+1748(WEB,)ms
+12 FBI
+1894(Van)ms
+1998(Nostrand)ms
+12 FBI
+436 1829 m
+(Reinhold)s
+12 FB
+(.)s
+295 1754 m
+(Smith)s
+433(L.M.C.)ms
+597(and)ms
+688(M.H.)ms
+812(Samadzadeh)ms
+1083(\(1992\),)ms
+1247(Measuring)ms
+1480(Complexity)ms
+1734(and)ms
+1825(Stability)ms
+2013(of)ms
+2073(WEB)ms
+436 1694 m
+(Programs,)s
+12 FBI
+652(Structured)ms
+876(Programming)ms
+1169(13,)ms
+1244(1,)ms
+1294(35-50)ms
+12 FB
+(.)s
+295 1619 m
+(Soloway)s
+481(E,)ms
+536(J.)ms
+580(Pinto,)ms
+710(S.)ms
+762(Letovsky,)ms
+972(D)ms
+1020(Littman)ms
+1190(and)ms
+1274(R.)ms
+1331(Lampert)ms
+1513(\(1988\),)ms
+1670(Designing)ms
+1887(documentation)ms
+436 1559 m
+(to)s
+487(Compensate)ms
+747(for)ms
+817(Delocalized)ms
+1069(Plans,)ms
+12 FBI
+1202(Communications)ms
+1553(of)ms
+1605(the)ms
+1678(ACM)ms
+1797(31,)ms
+1872(11,)ms
+1947(1259-1267)ms
+12 FB
+(.)s
+295 1484 m
+(Thimbleby)s
+523(H.)ms
+581(\(1986\),)ms
+736(Experiences)ms
+990(of)ms
+12 Sym
+1050(\242)ms
+12 FB
+(Literate)s
+1227(Programming)ms
+12 Sym
+(\242)s
+12 FB
+1533(using)ms
+1650(Cweb)ms
+1776(\(a)ms
+1824(variant)ms
+1973(of)ms
+2023(Knuth's)ms
+436 1424 m
+(WEB\),)s
+12 FBI
+588(The)ms
+676(Computer)ms
+888(Journal)ms
+1056(29,)ms
+1131(3,)ms
+1181(201-211)ms
+12 FB
+(.)s
+295 1349 m
+(Tung)s
+414(S.-H.)ms
+534(\(1989\),)ms
+693(A)ms
+744(Structured)ms
+966(Method)ms
+1136(for)ms
+1208(Literate)ms
+1377(Programming,)ms
+12 FBI
+1679(Structured)ms
+1904(Programming)ms
+12 FBI
+436 1289 m
+(10,)s
+511(2,)ms
+561(113-120)ms
+12 FB
+(.)s
+295 1214 m
+(Van)s
+388(Wyk)ms
+496(C.J.)ms
+584(\(1990\),)ms
+740(Literate)ms
+906(Programming:)ms
+1205(An)ms
+1277(Assessment,)ms
+12 FBI
+1536(Communications)ms
+1885(of)ms
+1935(the)ms
+2006(ACM)ms
+2122(33,)ms
+12 FBI
+436 1154 m
+(3,)s
+486(361-365)ms
+12 FB
+(.)s
+295 1079 m
+(Wirth)s
+422(N.)ms
+481(\(1971\),)ms
+637(Program)ms
+820(Development)ms
+1100(by)ms
+1161(Stepwise)ms
+1352(Refinement,)ms
+12 FBI
+1608(Communications)ms
+1958(of)ms
+2007(the)ms
+2079(ACM)ms
+12 FBI
+436 1019 m
+(14,)s
+511(4,)ms
+561(221-227)ms
+12 FB
+(.)s
+295 944 m
+(Wirth)s
+425(N.)ms
+487(\(1974\),)ms
+646(On)ms
+720(the)ms
+795(Composition)ms
+1066(of)ms
+1121(Well-Structured)ms
+1457(Programs,)ms
+12 FBI
+1674(ACM)ms
+1793(Computing)ms
+2029(Surveys)ms
+12 FBI
+436 884 m
+(6,)s
+486(4,)ms
+536(247-259)ms
+12 FB
+(.)s
+8 FB
+295 204 m
+(The)s
+355(CLiP)ms
+433(Style)ms
+510(of)ms
+546(Literate)ms
+658(Programming)ms
+850(\(4.074,)ms
+953(26-feb-93\))ms
+12 FB
+2050 204 m
+( 13 )s
+50 2 2130 216 li
+50 2 1995 216 li
+endpage
+%%Trailer
+enddocument
+%%Pages: 13
+%%DocumentFonts:
+%%+ Helvetica-Bold
+%%+ Times-Roman
+%%+ Times-Italic
+%%+ Times-Bold
+%%+ Courier
+%%+ AvantGarde-Book
+%%EOF
+ \ No newline at end of file
diff --git a/web/clip/clip_style_a.ps b/web/clip/clip_style_a.ps
new file mode 100644
index 0000000000..dce263580c
--- /dev/null
+++ b/web/clip/clip_style_a.ps
@@ -0,0 +1,2001 @@
+%!PS-Adobe-2.0
+%%DocumentFonts: (atend)
+%%Title: F:\\LPT\\COMPR\\APP_A.DOC
+%%Creator: Lotus Manuscript
+%%For: EWvA, MRK
+%%CreationDate: February 26, 1993
+%%Pages: (atend)
+%%BoundingBox: 0 0 595 841
+%%EndComments
+% PostScript Prologue (initialization) for Manuscript
+% Copyright (c) 1985,1986,1987,1988 Lotus Development Corporation
+% There is no user servicable code in this file.
+
+% set timeouts to infinite
+statusdict begin
+0 setjobtimeout
+/manualfeedtimeout 3600 def
+/waittimeout 0 def
+end
+
+% correct bug correction in rev 41.0
+/idiv{div cvi}bind def
+
+% define User Dictionary
+/msdict 300 dict def msdict begin
+/bd{bind def}bind def
+
+% Define commonly used things
+/delay{usertime 5000 add{dup usertime lt{pop exit}if}loop}bd
+/mfeed{statusdict begin /manualfeed true def end}bd
+/afeed{statusdict begin /manualfeed false def end}bd
+/bfeed{ afeed statusdict begin /setpapertray where
+ {pop setpapertray}{pop} ifelse end}bd
+
+/dpi{0.24 dup scale}bd
+
+% These two are called for each page
+/inpage false def
+/begpage{save dpi /inpage true def}bd
+/endpage{inpage {restore showpage}if }bd
+
+% for possible banner
+/fileinfo {pop pop pop}bd
+/enddocument {end} bd
+
+% these are also used by eqn & gmf
+/ld{load def}bd
+/x/exch ld
+/cu{300 mul 72 div}bd
+/m/moveto ld
+/t/translate ld
+/rm/rmoveto ld
+/cp/currentpoint ld
+/st/stroke ld
+/ln/lineto ld
+/rlt/rlineto ld
+/slw/setlinewidth ld
+
+/ff/findfont ld
+/scf/scalefont ld
+/sf/setfont ld
+/fs{x /pt x def ff pt cu scf sf}bd
+
+% linedraw
+/li{4 2 roll setlinewidth 3 1 roll moveto 0.0 rlineto st}bd
+
+% outline factor
+/olwid 40.0 def
+% stroke width for outline
+/uoslw {pt cu x div slw}bd
+% relative horizontal move
+/xm{x currentpoint pop sub 0.0 rmoveto}bd
+
+% The basic show
+/s/show ld
+% move horizontal and show
+/ms{xm s}bd
+
+% variations
+% outline show - first printer attribute
+/ppss{dup cp 3 -1 roll false charpath st
+x 3 -1 roll stringwidth pop add x moveto}bd
+/pss{olwid uoslw { ( ) dup 0 4 -1 roll put ppss}forall}bd
+/ps{pss}bd
+/mps{xm ps}bd
+
+% graybox show - second printer attribute
+/gb{cp 3 -1 roll pt cu dup 4 div neg 0 x rm dup 0 x rlt x 0 rlt
+neg 0 x rlt closepath currentgray .9 setgray fill setgray m}bd
+/usi{dup stringwidth pop gb}bd
+/us{usi s}bd
+/xum{x cp pop sub dup gb 0 rmoveto}bd
+
+% combinations of PD1 and PD2
+/ups{usi pss}bd
+/mups{xm ups}bd
+/mus{xm us}bd
+
+% define a new encoding vector (code page 850 based)
+/PC 256 array def
+StandardEncoding PC copy pop
+
+/dotaccent/bullet
+/quotesingle/quotedblleft/quotedblright/quotesinglbase
+/quotedblbase/guilsinglleft/guilsinglright/.notdef
+/ellipsis/perthousand/.notdef/.notdef/paragraph/section/dagger/daggerdbl
+/OE/oe/fi/fl/endash/emdash/fraction/Ydieresis
+PC 6 26 getinterval astore pop
+
+/Ccedilla/udieresis/eacute/acircumflex/adieresis/agrave/aring/ccedilla
+/ecircumflex/edieresis/egrave/idieresis/icircumflex/igrave/Adieresis/Aring
+/Eacute/ae/AE/ocircumflex/odieresis/ograve/ucircumflex/ugrave
+/ydieresis/Odieresis/Udieresis/oslash/sterling/Oslash/.notdef/florin
+/aacute/iacute/oacute/uacute/ntilde/Ntilde/ordfeminine/ordmasculine
+/questiondown/.notdef/.notdef/onehalf/onequarter/exclamdown/guillemotleft/guillemotright
+/.notdef/.notdef/.notdef/.notdef/.notdef/Aacute/Acircumflex/Agrave
+/.notdef/.notdef/.notdef/.notdef/.notdef/cent/yen/.notdef
+/.notdef/grave/.notdef/circumflex/tilde/.notdef/atilde/Atilde
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/currency
+/eth/Eth/Ecircumflex/Edieresis/Egrave/dotlessi/Iacute/Icircumflex
+/Idieresis/.notdef/.notdef/.notdef/.notdef/brokenbar/Igrave/.notdef
+/Oacute/germandbls/Ocircumflex/Ograve/otilde/Otilde/.notdef/thorn
+/Thorn/Uacute/Ucircumflex/Ugrave/yacute/Yacute/.notdef/acute
+/.notdef/.notdef/.notdef/threequarters/paragraph/section/.notdef/cedilla
+/ring/dieresis/periodcentered/onesuperior/threesuperior/twosuperior/.notdef/.notdef
+
+PC 128 128 getinterval astore pop
+
+% duplicate fonts with a new encoding vector
+/recd 5 dict def
+/pcft
+{recd begin
+/ncs PC def /nfn x def
+/bfn x def /bfd bfn findfont def
+/nf bfd maxlength dict def
+bfd{x dup dup /FID ne x /Encoding ne and
+{x nf 3 1 roll put}{pop pop}ifelse
+}forall
+nf/FontName nfn put
+nf/Encoding ncs put
+nfn nf definefont pop
+end}bd
+
+/fs{x /pt x def ff pt cu scf sf}bd
+
+% used by eqn
+/Times-Roman/TR pcft /Times-Bold/TRB pcft
+/Times-Italic/TRI pcft /Times-BoldItalic/TRBI pcft
+/Helvetica/HV pcft /Helvetica-Bold/HVB pcft
+/Helvetica-Oblique/HVO pcft /Helvetica-BoldOblique/HVBO pcft
+/Courier/CR pcft /Courier-Bold/CRB pcft
+/Sym{/Symbol fs}bd
+
+% Bit map image data decompression code
+/xx 0 def /yy 0 def
+/xbytes 0 def
+/lbuf 1200 string def /obuf 600 string def
+/bval <FFFEFCF8F0E0C080000103070F1F3F7F> def
+/blacks 96 string def /whites 96 string def
+0 1 95 {whites x 255 put} for
+
+/dispatch [
+{
+dup 47 le {32 sub 4 bitshift x pop 1}{
+dup 63 le {x pop 48 sub bval x get
+3 copy put x 1 add x 0} {
+dup 79 le {62 sub} {
+80 sub { 3 copy put x 1 add x } repeat 0
+}ifelse }ifelse }ifelse
+}bind
+{
+32 sub add
+3 copy put
+x 1 add x 0
+} bind
+{
+32 sub x pop add 255 0
+}bind
+{
+32 sub x pop
+3 copy getinterval
+whites 0 3 index getinterval
+x copy pop add 255 0
+}bind
+{
+32 sub x pop
+3 copy getinterval
+blacks 0 3 index getinterval
+x copy pop add 0 0
+}bind
+]def
+
+% read a raster line and unpack
+/readx{
+obuf 0 255 0
+currentfile lbuf readline pop
+{x dispatch x get exec} forall
+pop pop pop 0 xbytes getinterval}bd
+
+/mspic{
+/yy x def/xx x def
+/xbytes xx 8 idiv def
+xx yy 1 [xx 0 0 0 yy sub 0 yy]{readx}image}bd
+
+
+
+/Helvetica/fA pcft/FA{/fA fs}bd
+/Helvetica-Oblique/fAI pcft/FAI{/fAI fs}bd
+/Helvetica-Bold/fAB pcft/FAB{/fAB fs}bd
+/Helvetica-BoldOblique/fAIB pcft/FAIB{/fAIB fs}bd
+/Times-Roman/fB pcft/FB{/fB fs}bd
+/Times-Italic/fBI pcft/FBI{/fBI fs}bd
+/Times-Bold/fBB pcft/FBB{/fBB fs}bd
+/Times-BoldItalic/fBIB pcft/FBIB{/fBIB fs}bd
+/Courier/fH pcft/FH{/fH fs}bd
+/Courier-Oblique/fHI pcft/FHI{/fHI fs}bd
+/Courier-Bold/fHB pcft/FHB{/fHB fs}bd
+/Courier-BoldOblique/fHIB pcft/FHIB{/fHIB fs}bd
+/ZapfChancery-MediumItalic/fL pcft/FL{/fL fs}bd
+/ZapfChancery-MediumItalic/fLI pcft/FLI{/fLI fs}bd
+/ZapfChancery-MediumItalic/fLB pcft/FLB{/fLB fs}bd
+/ZapfChancery-MediumItalic/fLIB pcft/FLIB{/fLIB fs}bd
+/AvantGarde-Book/fM pcft/FM{/fM fs}bd
+/AvantGarde-BookOblique/fMI pcft/FMI{/fMI fs}bd
+/AvantGarde-Demi/fMB pcft/FMB{/fMB fs}bd
+/AvantGarde-DemiOblique/fMIB pcft/FMIB{/fMIB fs}bd
+(F:\\LPT\\COMPR\\APP_A.DOC)(EWvA, MRK)(February 26, 1993)fileinfo
+%%EndProlog
+%%Page: 0 1
+delay mfeed
+begpage
+12 FAB
+880 3176 m
+(Appendix A: Palindrome filter)s
+12 FB
+293 2969 m
+(In)s
+352(this)ms
+442(appendix)ms
+644(we)ms
+720(illustrate)ms
+913(the)ms
+992(CLiP)ms
+1116(style)ms
+1228(of)ms
+1288(literate)ms
+1445(programming)ms
+1735(by)ms
+1803(a)ms
+1843(program)ms
+2030(to)ms
+2087(filter)ms
+12 FB
+293 2909 m
+(palindromic)s
+551(lines)ms
+662(from)ms
+775(an)ms
+839(input)ms
+958(file.)ms
+1054(Three)ms
+1187(files)ms
+1290(are)ms
+1367(involved:)ms
+1573(the)ms
+1650(program)ms
+1836(module)ms
+2003(\()ms
+11 FH
+(PALIN-)s
+11 FH
+293 2849 m
+(DROME.PAS)s
+12 FB
+(\),)s
+582(a)ms
+616(test)ms
+698(file)ms
+778(\()ms
+11 FH
+(TESTDATA.TXT)s
+12 FB
+(\))s
+1154(and)ms
+1238(a)ms
+1273(command)ms
+1483(file)ms
+1562(\()ms
+11 FH
+(PALINDROME.COM)s
+12 FB
+(\))s
+1993(to)ms
+2044(run)ms
+2123(the)ms
+293 2789 m
+(palindrome)s
+533(filter.)ms
+393 2729 m
+(Subsections)s
+646(A.1)ms
+735(through)ms
+905(A.7)ms
+993(display)ms
+1153(the)ms
+1229(documentation)ms
+1541(literally,)ms
+1723(but)ms
+1802(we)ms
+1875(have)ms
+1984(numbered)ms
+293 2669 m
+(the)s
+366(code)ms
+473(lines)ms
+580(in)ms
+631(the)ms
+705(margin)ms
+859(for)ms
+930(easy)ms
+1031(reference)ms
+1230(from)ms
+1339(the)ms
+1413(main)ms
+1526(text.)ms
+12 FAB
+293 2546 m
+(A.1. Specification)s
+12 FB
+293 2459 m
+(A)s
+341(palindrome)ms
+581(is)ms
+627(a)ms
+661(sentence)ms
+846(with)ms
+947(the)ms
+1020(property)ms
+1202(that)ms
+1289(the)ms
+1363(letters)ms
+1497(from)ms
+1607(left)ms
+1686(to)ms
+1737(right,)ms
+1856(read)ms
+1954(the)ms
+2028(same)ms
+2143(as)ms
+293 2399 m
+(from)s
+410(right)ms
+525(to)ms
+585(left.)ms
+685(In)ms
+747(the)ms
+828(comparison)ms
+1082(uppercase)ms
+1303(and)ms
+1396(lowercase)ms
+1616(letters)ms
+1759(are)ms
+1841(considered)ms
+2078(to)ms
+2137(be)ms
+293 2339 m
+(equivalent)s
+510(and)ms
+591(all)ms
+650(other)ms
+762(characters)ms
+973(are)ms
+1043(simply)ms
+1189(ignored.)ms
+1363(Hence)ms
+1499(an)ms
+1556(empty)ms
+1690(sentence)ms
+1871(is)ms
+1913(a)ms
+1944(palindrome.)ms
+293 2279 m
+(Other)s
+419(examples)ms
+620(are:)ms
+8 FB
+226 2198 m
+(1)s
+10 FH
+368 2198 m
+(\(************* #file "TESTDATA.TXT" #comment off *************\))s
+8 FB
+226 2156 m
+(2)s
+10 FH
+368 2156 m
+(Ada)s
+8 FB
+226 2115 m
+(3)s
+10 FH
+368 2115 m
+(1234567)s
+8 FB
+226 2073 m
+(4)s
+10 FH
+368 2073 m
+(Able was I, ere I saw Elba.)s
+8 FB
+226 2031 m
+(5)s
+10 FH
+368 2031 m
+(A man, a plan, a canal, Panama.)s
+8 FB
+226 1990 m
+(6)s
+10 FH
+368 1990 m
+(Norma is as selfless as I Am, Ron.)s
+8 FB
+226 1948 m
+(7)s
+10 FH
+368 1948 m
+(\(***************** End of TESTDATA.PAS ************************\))s
+12 FB
+293 1856 m
+(The)s
+384(program)ms
+11 FH
+567(PALINDROME)ms
+12 FB
+856(reads)ms
+975(an)ms
+1036(input)ms
+1152(file,)ms
+1245(filters)ms
+1375(the)ms
+1450(lines)ms
+1558(that)ms
+1647(are)ms
+1721(palindromic)ms
+1976(and)ms
+2062(writes)ms
+293 1796 m
+(them)s
+405(to)ms
+456(an)ms
+516(output)ms
+656(file.)ms
+12 FAB
+293 1672 m
+(A.2. Communication with the outside world)s
+12 FB
+293 1586 m
+(The)s
+389(program)ms
+576(conforms)ms
+784(to)ms
+841(the)ms
+921(general)ms
+1086(template)ms
+1277(of)ms
+1337(a)ms
+1377(Pascal)ms
+1524(program.)ms
+1724(We)ms
+1812(introduce)ms
+2019(the)ms
+2098(files)ms
+11 FH
+293 1526 m
+(IN_FILE)s
+12 FB
+499(and)ms
+11 FH
+585(OUT_FILE)ms
+12 FB
+818(to)ms
+871(define)ms
+1010(its)ms
+1071(communication)ms
+1395(with)ms
+1498(the)ms
+1573(outside)ms
+1731(world.)ms
+1874(The)ms
+1965(actual)ms
+2098(files)ms
+293 1466 m
+(have)s
+399(to)ms
+451(be)ms
+511(specified)ms
+704(at)ms
+752(run-time.)ms
+949(Thus)ms
+1062(we)ms
+1133(have)ms
+8 FB
+226 1385 m
+(8)s
+10 FH
+368 1385 m
+(\(***************** #file "PALINDROME.PAS" *********************\))s
+8 FB
+226 1343 m
+(9)s
+10 FH
+368 1343 m
+(\(****************************************************************\))s
+8 FB
+209 1301 m
+(10)s
+10 FH
+368 1301 m
+(\(* Program: Palindrome filter program. *\))s
+8 FB
+209 1260 m
+(11)s
+10 FH
+368 1260 m
+(\(* Purpose: To filter the palindromic lines from a given input *\))s
+8 FB
+209 1218 m
+(12)s
+10 FH
+368 1218 m
+(\(* file to a specified output file. *\))s
+8 FB
+209 1176 m
+(13)s
+10 FH
+368 1176 m
+(\(****************************************************************\))s
+8 FB
+209 1135 m
+(14)s
+10 FH
+368 1135 m
+(PROGRAM PALINDROME \(INPUT, OUTPUT, IN_FILE, OUT_FILE\);)s
+8 FB
+209 1093 m
+(15)s
+209 1051 m
+(16)s
+10 FH
+368 1051 m
+(\(******* Palindrome constants #multiple #comment off *******\))s
+8 FB
+209 1010 m
+(17)s
+10 FH
+368 1010 m
+(\(******* Palindrome types #multiple #comment off *******\))s
+8 FB
+209 968 m
+(18)s
+10 FH
+368 968 m
+(VAR)s
+8 FB
+209 926 m
+(19)s
+10 FH
+368 926 m
+( IN_FILE, OUT_FILE: TEXT;)s
+8 FB
+209 885 m
+(20)s
+10 FH
+368 885 m
+(\(******* Palindrome variables #multiple #comment off *******\))s
+8 FB
+209 843 m
+(21)s
+209 801 m
+(22)s
+10 FH
+368 801 m
+(BEGIN)s
+8 FB
+209 760 m
+(23)s
+10 FH
+368 760 m
+( RESET \(IN_FILE\);)s
+8 FB
+209 718 m
+(24)s
+10 FH
+368 718 m
+( REWRITE \(OUT_FILE\);)s
+8 FB
+209 676 m
+(25)s
+209 635 m
+(26)s
+10 FH
+368 635 m
+( \(***************** Palindrome \(body\) **********************\))s
+8 FB
+209 593 m
+(27)s
+10 FH
+368 593 m
+( \(** Copy the lines of the IN_FILE that are palindromic to **\))s
+8 FB
+209 551 m
+(28)s
+10 FH
+368 551 m
+( \(** the OUT_FILE. **\))s
+8 FB
+209 510 m
+(29)s
+10 FH
+368 510 m
+( \(************************************************************\))s
+8 FB
+209 468 m
+(30)s
+209 426 m
+(31)s
+10 FH
+368 426 m
+(END \(*PALINDROME*\).)s
+8 FB
+209 385 m
+(32)s
+10 FH
+368 385 m
+(\(******************* End of PALINDROME.PAS ********************\))s
+8 FB
+293 204 m
+(The)s
+353(CLiP)ms
+431(Style)ms
+508(of)ms
+544(Literate)ms
+656(Programming)ms
+848(\(3.076,)ms
+951(26-feb-93\))ms
+12 FB
+2075 204 m
+( 1 )s
+50 2 2130 216 li
+50 2 2020 216 li
+endpage
+%%Page: 1 2
+delay mfeed
+begpage
+12 FB
+293 3179 m
+(To)s
+361(prepare)ms
+523(the)ms
+597(module)ms
+759(for)ms
+830(future)ms
+962(declarations)ms
+1216(of)ms
+1270(constants)ms
+1469(and)ms
+1553(types)ms
+1671(we)ms
+1742(have)ms
+8 FB
+209 3098 m
+(33)s
+10 FH
+368 3098 m
+(\(******* Palindrome constants #leader #quick *******\))s
+8 FB
+209 3056 m
+(34)s
+10 FH
+368 3056 m
+(CONST)s
+8 FB
+209 3015 m
+(35)s
+10 FH
+368 3015 m
+(\(******* Palindrome types #leader #quick *******\))s
+8 FB
+209 2973 m
+(36)s
+10 FH
+368 2973 m
+(TYPE)s
+12 FAB
+293 2861 m
+(A.3. Processing of the files)s
+12 FB
+293 2774 m
+(The)s
+382(program)ms
+563(processes)ms
+11 FH
+766(IN_FILE)ms
+12 FB
+970(line)ms
+1057(by)ms
+1119(line.)ms
+1218(The)ms
+1307(idea)ms
+1402(is)ms
+1447(to)ms
+1498(buffer)ms
+1632(an)ms
+1691(exact)ms
+1808(copy)ms
+1917(of)ms
+1970(the)ms
+2043(current)ms
+293 2714 m
+(line)s
+380(in)ms
+11 FH
+432(IN_LINE)ms
+12 FB
+(,)s
+650(while)ms
+774(at)ms
+823(the)ms
+897(same)ms
+1013(time)ms
+1115(its)ms
+1175(letters)ms
+1310(are)ms
+1384(buffered)ms
+1566(in)ms
+11 FH
+1618(LETTERS)ms
+12 FB
+(.)s
+1836(So)ms
+11 FH
+1901(LETTERS)ms
+12 FB
+2107(will)ms
+293 2654 m
+(be)s
+351(empty)ms
+487(if)ms
+529(the)ms
+601(line)ms
+687(holds)ms
+807(no)ms
+868(letters)ms
+1002(at)ms
+1049(all,)ms
+1123(in)ms
+1173(which)ms
+1306(case)ms
+1403(the)ms
+1476(line)ms
+1562(is)ms
+1607(considered)ms
+1834(to)ms
+1884(be)ms
+1943(palindromic)ms
+293 2594 m
+(by)s
+355(definition.)ms
+393 2534 m
+(We)s
+473(choose)ms
+622(the)ms
+694(buffers)ms
+11 FH
+847(IN_LINE)ms
+12 FB
+1050(and)ms
+11 FH
+1133(LETTERS)ms
+12 FB
+1336(to)ms
+1386(be)ms
+1444(of)ms
+1497(the)ms
+1568(same)ms
+1682(type,)ms
+11 FH
+1791(TEXT_LINE)ms
+12 FB
+(,)s
+2062(which)ms
+293 2474 m
+(we)s
+363(will)ms
+454(not)ms
+530(specify)ms
+687(in)ms
+738(detail)ms
+862(right)ms
+969(now.)ms
+1080(For)ms
+1162(this)ms
+1247(purpose)ms
+1417(we)ms
+1488(introduce)ms
+1690(a)ms
+1724(type)ms
+11 FH
+1823(ABSTRACT)ms
+12 FB
+(.)s
+8 FB
+209 2393 m
+(37)s
+10 FH
+368 2393 m
+(\(******* Palindrome types #quick *******\))s
+8 FB
+209 2351 m
+(38)s
+10 FH
+368 2351 m
+( ABSTRACT = \(DEFINED, UNDEFINED\);)s
+11 FH
+293 2259 m
+(TEXT_LINE)s
+12 FB
+553(will)ms
+644(temporarily)ms
+890(be)ms
+951(declared)ms
+11 FH
+1133(ABSTRACT)ms
+12 FB
+1366(and)ms
+1452(its)ms
+1512(details)ms
+1656(will)ms
+1747(be)ms
+1807(defined)ms
+1970(later.)ms
+2085(Thus)ms
+293 2199 m
+(the)s
+366(declaration)ms
+601(of)ms
+11 FH
+655(TEXT_LINE)ms
+8 FB
+209 2118 m
+(39)s
+10 FH
+368 2118 m
+(\(******* Palindrome types *******\))s
+8 FB
+209 2076 m
+(40)s
+10 FH
+368 2076 m
+(\(******* Declaration of TEXT_LINE *******\))s
+8 FB
+209 2035 m
+(41)s
+10 FH
+368 2035 m
+(\(***************** End of Palindrome types ********************\))s
+12 FB
+293 1942 m
+(is)s
+338(temporarily)ms
+584(satisfied)ms
+763(with)ms
+865(the)ms
+938(type)ms
+11 FH
+1037(ABSTRACT)ms
+12 FB
+(.)s
+8 FB
+209 1861 m
+(42)s
+10 FH
+368 1861 m
+(\(******* Declaration of TEXT_LINE #quick #default *******\))s
+8 FB
+209 1820 m
+(43)s
+10 FH
+368 1820 m
+( TEXT_LINE = ABSTRACT;)s
+12 FB
+293 1727 m
+(The)s
+383(declaration)ms
+617(for)ms
+688(the)ms
+762(variables)ms
+11 FH
+955(IN_LINE)ms
+12 FB
+1160(and)ms
+11 FH
+1245(LETTERS)ms
+12 FB
+1450(becomes)ms
+8 FB
+209 1646 m
+(44)s
+10 FH
+368 1646 m
+(\(******* Palindrome variables #quick *******\))s
+8 FB
+209 1605 m
+(45)s
+10 FH
+368 1605 m
+( IN_LINE,)s
+8 FB
+209 1563 m
+(46)s
+10 FH
+368 1563 m
+( LETTERS: TEXT_LINE;)s
+12 FB
+293 1471 m
+(We)s
+377(have)ms
+486(to)ms
+540(test)ms
+11 FH
+625(LETTERS)ms
+12 FB
+832(in)ms
+886(order)ms
+1007(to)ms
+1061(decide)ms
+1206(whether)ms
+1382(or)ms
+1439(not)ms
+11 FH
+1518(IN_LINE)ms
+12 FB
+1725(contains)ms
+1907(a)ms
+1944(palindrome.)ms
+293 1411 m
+(The)s
+383(result)ms
+506(of)ms
+561(this)ms
+645(test)ms
+727(is)ms
+773(flagged)ms
+936(by)ms
+11 FH
+998(IS_PALINDROME)ms
+12 FB
+(,)s
+1381(for)ms
+1451(which)ms
+1586(we)ms
+1657(introduce)ms
+1858(the)ms
+1932(declaration)ms
+8 FB
+209 1330 m
+(47)s
+10 FH
+368 1330 m
+(\(******* Palindrome variables #quick *******\))s
+8 FB
+209 1288 m
+(48)s
+10 FH
+368 1288 m
+( IS_PALINDROME: BOOLEAN;)s
+12 FB
+293 1196 m
+(Now)s
+402(the)ms
+476(body)ms
+588(of)ms
+642(the)ms
+716(Palindrome)ms
+959(filter)ms
+1069(may)ms
+1167(be)ms
+1227(expanded)ms
+1431(as)ms
+8 FB
+209 1115 m
+(49)s
+10 FH
+368 1115 m
+( \(***************** Palindrome \(body\) **********************\))s
+8 FB
+209 1073 m
+(50)s
+10 FH
+368 1073 m
+( \(** Copy the lines of the IN_FILE that are palindromic to **\))s
+8 FB
+209 1031 m
+(51)s
+10 FH
+368 1031 m
+( \(** the OUT_FILE. **\))s
+8 FB
+209 990 m
+(52)s
+10 FH
+368 990 m
+( WHILE NOT EOF \(IN_FILE\) DO)s
+8 FB
+209 948 m
+(53)s
+10 FH
+368 948 m
+( BEGIN)s
+8 FB
+209 906 m
+(54)s
+10 FH
+368 906 m
+( \(***************** Palindrome \(1\) *********************\))s
+8 FB
+209 865 m
+(55)s
+10 FH
+368 865 m
+( \(** Read a line from IN_FILE into IN_LINE. The letters **\))s
+8 FB
+209 823 m
+(56)s
+10 FH
+368 823 m
+( \(** of this line are copied to LETTERS. **\))s
+8 FB
+209 781 m
+(57)s
+10 FH
+368 781 m
+( \(********************************************************\))s
+8 FB
+209 740 m
+(58)s
+209 698 m
+(59)s
+10 FH
+368 698 m
+( READLN \(IN_FILE\);)s
+8 FB
+209 656 m
+(60)s
+209 615 m
+(61)s
+10 FH
+368 615 m
+( \(***************** Palindrome \(2\) *********************\))s
+8 FB
+209 573 m
+(62)s
+10 FH
+368 573 m
+( \(** Test palindromicity of LETTERS. Set IS_PALINDROME **\))s
+8 FB
+209 531 m
+(63)s
+10 FH
+368 531 m
+( \(** to reflect the result of the test. **\))s
+8 FB
+209 490 m
+(64)s
+10 FH
+368 490 m
+( \(********************************************************\))s
+8 FB
+209 448 m
+(65)s
+293 204 m
+(The)s
+353(CLiP)ms
+431(Style)ms
+508(of)ms
+544(Literate)ms
+656(Programming)ms
+848(\(3.076,)ms
+951(26-feb-93\))ms
+12 FB
+2075 204 m
+( 2 )s
+50 2 2130 216 li
+50 2 2020 216 li
+endpage
+%%Page: 2 3
+delay mfeed
+begpage
+8 FB
+209 3188 m
+(66)s
+10 FH
+368 3188 m
+( IF IS_PALINDROME THEN)s
+8 FB
+209 3146 m
+(67)s
+10 FH
+368 3146 m
+( BEGIN)s
+8 FB
+209 3105 m
+(68)s
+10 FH
+368 3105 m
+( \(***************** Palindrome \(3\) *****************\))s
+8 FB
+209 3063 m
+(69)s
+10 FH
+368 3063 m
+( \(** Write IN_LINE to OUT_FILE. **\))s
+8 FB
+209 3021 m
+(70)s
+10 FH
+368 3021 m
+( \(****************************************************\))s
+8 FB
+209 2980 m
+(71)s
+209 2938 m
+(72)s
+10 FH
+368 2938 m
+( WRITELN \(OUT_FILE\);)s
+8 FB
+209 2896 m
+(73)s
+10 FH
+368 2896 m
+( END \(*IF*\);)s
+8 FB
+209 2855 m
+(74)s
+10 FH
+368 2855 m
+( END \(*WHILE*\);)s
+8 FB
+209 2813 m
+(75)s
+10 FH
+368 2813 m
+( \(************* End of Palindrome \(body\) *******************\))s
+12 FAB
+293 2701 m
+(A.4. Choosing the structure of )s
+11 FH
+(IN_LINE)s
+12 FAB
+( and )s
+11 FH
+(LETTERS)s
+12 FB
+293 2614 m
+(Before)s
+440(we)ms
+510(can)ms
+591(proceed)ms
+761(we)ms
+831(need)ms
+937(to)ms
+988(establish)ms
+1175(a)ms
+1209(structure)ms
+1395(for)ms
+1465(the)ms
+1538(objects)ms
+11 FH
+1691(IN_LINE)ms
+12 FB
+1896(and)ms
+11 FH
+1980(LETTERS)ms
+12 FB
+(.)s
+293 2554 m
+(Thus)s
+410(we)ms
+486(define)ms
+11 FH
+628(TEXT_LINE)ms
+12 FB
+893(as)ms
+952(a)ms
+991(structure)ms
+1184(with)ms
+1290(two)ms
+1382(components.)ms
+1654(The)ms
+1749(first)ms
+1847(component)ms
+2087(is)ms
+2137(an)ms
+293 2494 m
+(array,)s
+11 FH
+422(CHARS)ms
+12 FB
+(,)s
+587(which)ms
+724(contains)ms
+906(the)ms
+982(characters)ms
+1199(to)ms
+1253(be)ms
+1315(buffered.)ms
+1511(The)ms
+1604(second)ms
+1758(component,)ms
+11 FH
+2007(LENGTH)ms
+12 FB
+(,)s
+293 2434 m
+(indicates)s
+483(which)ms
+617(part)ms
+707(of)ms
+761(the)ms
+834(array)ms
+949(is)ms
+995(actually)ms
+1165(occupied.)ms
+1371(The)ms
+1461(maximum)ms
+1676(number)ms
+1841(of)ms
+1895(characters)ms
+2110(that)ms
+293 2374 m
+(can)s
+373(be)ms
+432(buffered)ms
+613(by)ms
+674(the)ms
+747(structure)ms
+933(is)ms
+978(determined)ms
+1214(by)ms
+1276(the)ms
+1348(length,)ms
+11 FH
+1497(MAX_L)ms
+12 FB
+(,)s
+1659(of)ms
+1712(the)ms
+1784(array.)ms
+11 FH
+1911(MAX_L)ms
+12 FB
+2060(serves)ms
+293 2314 m
+(as)s
+347(an)ms
+406(implementation)ms
+733(parameter.)ms
+8 FB
+209 2233 m
+(76)s
+10 FH
+368 2233 m
+(\(******* Palindrome constants #quick *******\))s
+8 FB
+209 2191 m
+(77)s
+10 FH
+368 2191 m
+( MAX_L = 132;)s
+8 FB
+209 2150 m
+(78)s
+209 2108 m
+(79)s
+10 FH
+368 2108 m
+(\(******* Declaration of TEXT_LINE #quick *******\))s
+8 FB
+209 2066 m
+(80)s
+10 FH
+368 2066 m
+( TEXT_LINE = RECORD)s
+8 FB
+209 2025 m
+(81)s
+10 FH
+368 2025 m
+( CHARS: ARRAY[1..MAX_L] OF CHAR;)s
+8 FB
+209 1983 m
+(82)s
+10 FH
+368 1983 m
+( LENGTH: 0..MAX_L;)s
+8 FB
+209 1941 m
+(83)s
+10 FH
+368 1941 m
+( END \(*RECORD*\);)s
+12 FAB
+293 1829 m
+(A.5. Reading a line)s
+12 FB
+293 1742 m
+(For)s
+381(efficiency)ms
+599(reasons)ms
+768(we)ms
+845(fill)ms
+11 FH
+922(IN_LINE)ms
+12 FB
+1133(and)ms
+11 FH
+1224(LETTERS)ms
+12 FB
+1435(simultaneously.)ms
+1769(Therefore)ms
+1985(we)ms
+2062(buffer)ms
+293 1682 m
+(every)s
+416(character)ms
+612(that)ms
+699(is)ms
+745(read)ms
+844(from)ms
+11 FH
+953(IN_FILE)ms
+12 FB
+1158(in)ms
+1210(the)ms
+1283(variable)ms
+11 FH
+1457(IN_CHAR)ms
+12 FB
+(.)s
+8 FB
+209 1601 m
+(84)s
+10 FH
+368 1601 m
+(\(******* Palindrome variables #quick *******\))s
+8 FB
+209 1560 m
+(85)s
+10 FH
+368 1560 m
+( IN_CHAR: CHAR;)s
+12 FB
+293 1467 m
+(Only)s
+402(when)ms
+11 FH
+520(IN_CHAR)ms
+12 FB
+723(turns)ms
+832(out)ms
+906(to)ms
+955(be)ms
+1011(a)ms
+1043(letter)ms
+1156(it)ms
+1193(is)ms
+1237(copied)ms
+1380(to)ms
+11 FH
+1428(LETTERS)ms
+12 FB
+(.)s
+1643(Since)ms
+1764(this)ms
+1846(process)ms
+2005(is)ms
+2049(crucial)ms
+293 1407 m
+(for)s
+363(the)ms
+437(overall)ms
+588(operation,)ms
+802(we)ms
+873(make)ms
+994(provisions)ms
+1215(for)ms
+1285(some)ms
+1403(debugging)ms
+1627(code)ms
+1734(here.)ms
+8 FB
+209 1326 m
+(86)s
+10 FH
+368 1326 m
+( \(***************** Palindrome \(1\) *********************\))s
+8 FB
+209 1285 m
+(87)s
+10 FH
+368 1285 m
+( \(** Read a line from IN_FILE into IN_LINE. The letters **\))s
+8 FB
+209 1243 m
+(88)s
+10 FH
+368 1243 m
+( \(** of this line are copied to LETTERS. **\))s
+8 FB
+209 1201 m
+(89)s
+10 FH
+368 1201 m
+( IN_LINE.LENGTH := 0;)s
+8 FB
+209 1160 m
+(90)s
+10 FH
+368 1160 m
+( LETTERS.LENGTH := 0;)s
+8 FB
+209 1118 m
+(91)s
+10 FH
+368 1118 m
+( WITH IN_LINE DO)s
+8 FB
+209 1076 m
+(92)s
+10 FH
+368 1076 m
+( WHILE NOT EOLN \(IN_FILE\) DO)s
+8 FB
+209 1035 m
+(93)s
+10 FH
+368 1035 m
+( BEGIN)s
+8 FB
+209 993 m
+(94)s
+10 FH
+368 993 m
+( READ \(IN_FILE, IN_CHAR\);)s
+8 FB
+209 951 m
+(95)s
+10 FH
+368 951 m
+( LENGTH := LENGTH + 1;)s
+8 FB
+209 910 m
+(96)s
+10 FH
+368 910 m
+( CHARS[LENGTH] := IN_CHAR;)s
+8 FB
+209 868 m
+(97)s
+10 FH
+368 868 m
+( IF IN_CHAR IN ['A'..'Z', 'a'..'z'] THEN)s
+8 FB
+209 826 m
+(98)s
+10 FH
+368 826 m
+( WITH LETTERS DO)s
+8 FB
+209 785 m
+(99)s
+10 FH
+368 785 m
+( BEGIN)s
+8 FB
+193 743 m
+(100)s
+10 FH
+368 743 m
+( LENGTH := LENGTH + 1;)s
+8 FB
+193 701 m
+(101)s
+10 FH
+368 701 m
+( CHARS[LENGTH] := IN_CHAR;)s
+8 FB
+193 660 m
+(102)s
+10 FH
+368 660 m
+( END \(*WITH/IF*\);)s
+8 FB
+193 618 m
+(103)s
+10 FH
+368 618 m
+( END \(*WHILE/WITH*\);)s
+8 FB
+193 576 m
+(104)s
+193 535 m
+(105)s
+10 FH
+368 535 m
+( \(********************* Palindrome \(test\) **************\))s
+8 FB
+193 493 m
+(106)s
+10 FH
+368 493 m
+( \(** Check contents of IN_LINE and LETTERS. #optional **\))s
+8 FB
+193 451 m
+(107)s
+10 FH
+368 451 m
+( \(********************************************************\))s
+8 FB
+193 410 m
+(108)s
+193 368 m
+(109)s
+10 FH
+368 368 m
+( \(***************** End of Palindrome \(1\) **************\))s
+8 FB
+293 204 m
+(The)s
+353(CLiP)ms
+431(Style)ms
+508(of)ms
+544(Literate)ms
+656(Programming)ms
+848(\(3.076,)ms
+951(26-feb-93\))ms
+12 FB
+2075 204 m
+( 3 )s
+50 2 2130 216 li
+50 2 2020 216 li
+endpage
+%%Page: 3 4
+delay mfeed
+begpage
+12 FAB
+293 3176 m
+(A.6. Testing for palindromicity)s
+12 FB
+293 3089 m
+(We)s
+385(test)ms
+478(the)ms
+562(palindromicity)ms
+879(of)ms
+11 FH
+944(LETTERS)ms
+12 FB
+1160(in)ms
+1222(two)ms
+1320(steps.)ms
+1455(First)ms
+1570(we)ms
+1651(transform)ms
+1869(the)ms
+1953(contents)ms
+2143(of)ms
+11 FH
+293 3029 m
+(LETTERS)s
+12 FB
+501(to)ms
+556(uppercase)ms
+773(and)ms
+861(then)ms
+963(we)ms
+1038(compare)ms
+1226(the)ms
+1304(characters)ms
+1523(of)ms
+11 FH
+1581(LETTERS)ms
+12 FB
+1789(pairwise.)ms
+1988(The)ms
+2082(com-)ms
+293 2969 m
+(parison)s
+453(is)ms
+500(done)ms
+611(starting)ms
+774(with)ms
+876(the)ms
+951(most)ms
+1062(outside)ms
+1219(characters)ms
+1436(and)ms
+1521(progressing)ms
+1768(inward.)ms
+1933(The)ms
+2024(string)ms
+2151(is)ms
+293 2909 m
+(assumed)s
+478(a)ms
+514(palindrome)ms
+756(until)ms
+861(the)ms
+936(opposite)ms
+1119(is)ms
+1166(proven)ms
+1318(through)ms
+1487(a)ms
+1523(pair)ms
+1615(of)ms
+1670(different)ms
+1856(characters.)ms
+2084(With)ms
+293 2849 m
+(the)s
+366(local)ms
+476(counter)ms
+8 FB
+193 2768 m
+(110)s
+10 FH
+368 2768 m
+(\(******* Palindrome variables #quick *******\))s
+8 FB
+193 2726 m
+(111)s
+10 FH
+368 2726 m
+( I: INTEGER;)s
+12 FB
+293 2634 m
+(we)s
+363(keep)ms
+470(track)ms
+583(of)ms
+637(the)ms
+710(comparing)ms
+937(process.)ms
+1112(Now)ms
+11 FH
+1221(Palindrome \(2\))ms
+12 FB
+1619(can)ms
+1701(be)ms
+1761(expanded)ms
+1965(as)ms
+8 FB
+193 2553 m
+(112)s
+10 FH
+368 2553 m
+( \(***************** Palindrome \(2\) *********************\))s
+8 FB
+193 2511 m
+(113)s
+10 FH
+368 2511 m
+( \(** Test palindromicity of LETTERS. Set IS_PALINDROME **\))s
+8 FB
+193 2470 m
+(114)s
+10 FH
+368 2470 m
+( \(** to reflect the result of the test. **\))s
+8 FB
+193 2428 m
+(115)s
+10 FH
+368 2428 m
+( WITH LETTERS DO)s
+8 FB
+193 2386 m
+(116)s
+10 FH
+368 2386 m
+( BEGIN)s
+8 FB
+193 2345 m
+(117)s
+10 FH
+368 2345 m
+( \(* Transform lowercase to uppercase. *\))s
+8 FB
+193 2303 m
+(118)s
+10 FH
+368 2303 m
+( FOR I := 1 TO LENGTH DO)s
+8 FB
+193 2261 m
+(119)s
+10 FH
+368 2261 m
+( IF CHARS[I] IN ['a'..'z'])s
+8 FB
+193 2220 m
+(120)s
+10 FH
+368 2220 m
+( THEN CHARS[I] :=)s
+8 FB
+193 2178 m
+(121)s
+10 FH
+368 2178 m
+( CHR\(ORD\(CHARS[I]\) - ORD\('a'\) + ORD\('A'\)\);)s
+8 FB
+193 2136 m
+(122)s
+193 2095 m
+(123)s
+10 FH
+368 2095 m
+( \(* Perform the palindromicity test. *\))s
+8 FB
+193 2053 m
+(124)s
+10 FH
+368 2053 m
+( IS_PALINDROME := TRUE;)s
+8 FB
+193 2011 m
+(125)s
+10 FH
+368 2011 m
+( I := 1;)s
+8 FB
+193 1970 m
+(126)s
+10 FH
+368 1970 m
+( WHILE IS_PALINDROME AND \(I <= LENGTH DIV 2\) DO)s
+8 FB
+193 1928 m
+(127)s
+10 FH
+368 1928 m
+( IF CHARS[I] = CHARS[LENGTH-I+1] THEN)s
+8 FB
+193 1886 m
+(128)s
+10 FH
+368 1886 m
+( I := I + 1)s
+8 FB
+193 1845 m
+(129)s
+10 FH
+368 1845 m
+( ELSE)s
+8 FB
+193 1803 m
+(130)s
+10 FH
+368 1803 m
+( IS_PALINDROME := FALSE;)s
+8 FB
+193 1761 m
+(131)s
+10 FH
+368 1761 m
+( END \(*WITH*\);)s
+8 FB
+193 1720 m
+(132)s
+10 FH
+368 1720 m
+( \(***************** End of Palindrome \(2\) **************\))s
+12 FAB
+293 1607 m
+(A.7. Writing the palindrome)s
+12 FB
+293 1521 m
+(The)s
+383(only)ms
+484(remaining)ms
+699(action)ms
+834(is)ms
+880(to)ms
+931(write)ms
+1047(the)ms
+1120(contents)ms
+1299(of)ms
+11 FH
+1354(IN_LINE)ms
+12 FB
+(.)s
+1571(Again)ms
+1706(we)ms
+1777(need)ms
+1883(a)ms
+1918(local)ms
+2028(counter)ms
+8 FB
+193 1440 m
+(133)s
+10 FH
+368 1440 m
+(\(******* Palindrome variables #quick *******\))s
+8 FB
+193 1398 m
+(134)s
+10 FH
+368 1398 m
+( J: INTEGER;)s
+12 FB
+293 1306 m
+(The)s
+383(writing)ms
+540(proceeds)ms
+730(straight)ms
+892(forward.)ms
+8 FB
+193 1225 m
+(135)s
+10 FH
+368 1225 m
+( \(***************** Palindrome \(3\) *****************\))s
+8 FB
+193 1183 m
+(136)s
+10 FH
+368 1183 m
+( \(** Write IN_LINE to OUT_FILE. **\))s
+8 FB
+193 1141 m
+(137)s
+10 FH
+368 1141 m
+( WITH IN_LINE DO)s
+8 FB
+193 1100 m
+(138)s
+10 FH
+368 1100 m
+( BEGIN)s
+8 FB
+193 1058 m
+(139)s
+10 FH
+368 1058 m
+( FOR J := 1 TO LENGTH DO)s
+8 FB
+193 1016 m
+(140)s
+10 FH
+368 1016 m
+( WRITE \(OUT_FILE, CHARS[J]\);)s
+8 FB
+193 975 m
+(141)s
+10 FH
+368 975 m
+( END \(*WITH*\);)s
+8 FB
+193 933 m
+(142)s
+10 FH
+368 933 m
+( \(************* End of Palindrome \(3\) **************\))s
+12 FAB
+293 821 m
+(A.8. Running the Palindrome filter)s
+12 FB
+293 734 m
+(To)s
+365(run)ms
+449(the)ms
+527(program)ms
+713(in)ms
+769(a)ms
+808(VAX/VMS)ms
+1055(environment)ms
+1325(the)ms
+1403(following)ms
+1614(command)ms
+1829(procedure)ms
+2045(is)ms
+2096(con-)ms
+293 674 m
+(venient.)s
+8 FB
+193 593 m
+(143)s
+10 FH
+368 593 m
+(\(********* #file "PALINDROME.COM" #comment off ***************\))s
+8 FB
+193 551 m
+(144)s
+10 FH
+368 551 m
+($!***************************************************************!)s
+8 FB
+193 510 m
+(145)s
+10 FH
+368 510 m
+($! Run PALINDROME. Input file and output file are parameters. *!)s
+8 FB
+193 468 m
+(146)s
+10 FH
+368 468 m
+($! Par1: Specification of input file. *!)s
+8 FB
+193 426 m
+(147)s
+10 FH
+368 426 m
+($! Par2: Specification of output file. *!)s
+8 FB
+193 385 m
+(148)s
+10 FH
+368 385 m
+($!***************************************************************!)s
+8 FB
+293 204 m
+(The)s
+353(CLiP)ms
+431(Style)ms
+508(of)ms
+544(Literate)ms
+656(Programming)ms
+848(\(3.076,)ms
+951(26-feb-93\))ms
+12 FB
+2075 204 m
+( 4 )s
+50 2 2130 216 li
+50 2 2020 216 li
+endpage
+%%Page: 4 5
+delay mfeed
+begpage
+8 FB
+193 3188 m
+(149)s
+10 FH
+368 3188 m
+($DEFINE IN_FILE 'P1)s
+8 FB
+193 3146 m
+(150)s
+10 FH
+368 3146 m
+($DEFINE OUT_FILE 'P2)s
+8 FB
+193 3105 m
+(151)s
+10 FH
+368 3105 m
+(RUN PALIND)s
+8 FB
+193 3063 m
+(152)s
+10 FH
+368 3063 m
+(\(***************** End of PALINDROME.COM **********************\))s
+8 FB
+293 204 m
+(The)s
+353(CLiP)ms
+431(Style)ms
+508(of)ms
+544(Literate)ms
+656(Programming)ms
+848(\(3.076,)ms
+951(26-feb-93\))ms
+12 FB
+2075 204 m
+( 5 )s
+50 2 2130 216 li
+50 2 2020 216 li
+endpage
+%%Trailer
+enddocument
+%%Pages: 5
+%%DocumentFonts:
+%%+ Helvetica-Bold
+%%+ Times-Roman
+%%+ Courier
+%%EOF
+ \ No newline at end of file
diff --git a/web/clip/clip_style_b.ps b/web/clip/clip_style_b.ps
new file mode 100644
index 0000000000..a5935f6281
--- /dev/null
+++ b/web/clip/clip_style_b.ps
@@ -0,0 +1,389 @@
+%!PS-Adobe-2.0
+%%DocumentFonts: (atend)
+%%Title: F:\\LPT\\COMPR\\APP_B.DOC
+%%Creator: Lotus Manuscript
+%%For: EWvA, MRK
+%%CreationDate: February 26, 1993
+%%Pages: (atend)
+%%BoundingBox: 0 0 595 841
+%%EndComments
+% PostScript Prologue (initialization) for Manuscript
+% Copyright (c) 1985,1986,1987,1988 Lotus Development Corporation
+% There is no user servicable code in this file.
+
+% set timeouts to infinite
+statusdict begin
+0 setjobtimeout
+/manualfeedtimeout 3600 def
+/waittimeout 0 def
+end
+
+% correct bug correction in rev 41.0
+/idiv{div cvi}bind def
+
+% define User Dictionary
+/msdict 300 dict def msdict begin
+/bd{bind def}bind def
+
+% Define commonly used things
+/delay{usertime 5000 add{dup usertime lt{pop exit}if}loop}bd
+/mfeed{statusdict begin /manualfeed true def end}bd
+/afeed{statusdict begin /manualfeed false def end}bd
+/bfeed{ afeed statusdict begin /setpapertray where
+ {pop setpapertray}{pop} ifelse end}bd
+
+/dpi{0.24 dup scale}bd
+
+% These two are called for each page
+/inpage false def
+/begpage{save dpi /inpage true def}bd
+/endpage{inpage {restore showpage}if }bd
+
+% for possible banner
+/fileinfo {pop pop pop}bd
+/enddocument {end} bd
+
+% these are also used by eqn & gmf
+/ld{load def}bd
+/x/exch ld
+/cu{300 mul 72 div}bd
+/m/moveto ld
+/t/translate ld
+/rm/rmoveto ld
+/cp/currentpoint ld
+/st/stroke ld
+/ln/lineto ld
+/rlt/rlineto ld
+/slw/setlinewidth ld
+
+/ff/findfont ld
+/scf/scalefont ld
+/sf/setfont ld
+/fs{x /pt x def ff pt cu scf sf}bd
+
+% linedraw
+/li{4 2 roll setlinewidth 3 1 roll moveto 0.0 rlineto st}bd
+
+% outline factor
+/olwid 40.0 def
+% stroke width for outline
+/uoslw {pt cu x div slw}bd
+% relative horizontal move
+/xm{x currentpoint pop sub 0.0 rmoveto}bd
+
+% The basic show
+/s/show ld
+% move horizontal and show
+/ms{xm s}bd
+
+% variations
+% outline show - first printer attribute
+/ppss{dup cp 3 -1 roll false charpath st
+x 3 -1 roll stringwidth pop add x moveto}bd
+/pss{olwid uoslw { ( ) dup 0 4 -1 roll put ppss}forall}bd
+/ps{pss}bd
+/mps{xm ps}bd
+
+% graybox show - second printer attribute
+/gb{cp 3 -1 roll pt cu dup 4 div neg 0 x rm dup 0 x rlt x 0 rlt
+neg 0 x rlt closepath currentgray .9 setgray fill setgray m}bd
+/usi{dup stringwidth pop gb}bd
+/us{usi s}bd
+/xum{x cp pop sub dup gb 0 rmoveto}bd
+
+% combinations of PD1 and PD2
+/ups{usi pss}bd
+/mups{xm ups}bd
+/mus{xm us}bd
+
+% define a new encoding vector (code page 850 based)
+/PC 256 array def
+StandardEncoding PC copy pop
+
+/dotaccent/bullet
+/quotesingle/quotedblleft/quotedblright/quotesinglbase
+/quotedblbase/guilsinglleft/guilsinglright/.notdef
+/ellipsis/perthousand/.notdef/.notdef/paragraph/section/dagger/daggerdbl
+/OE/oe/fi/fl/endash/emdash/fraction/Ydieresis
+PC 6 26 getinterval astore pop
+
+/Ccedilla/udieresis/eacute/acircumflex/adieresis/agrave/aring/ccedilla
+/ecircumflex/edieresis/egrave/idieresis/icircumflex/igrave/Adieresis/Aring
+/Eacute/ae/AE/ocircumflex/odieresis/ograve/ucircumflex/ugrave
+/ydieresis/Odieresis/Udieresis/oslash/sterling/Oslash/.notdef/florin
+/aacute/iacute/oacute/uacute/ntilde/Ntilde/ordfeminine/ordmasculine
+/questiondown/.notdef/.notdef/onehalf/onequarter/exclamdown/guillemotleft/guillemotright
+/.notdef/.notdef/.notdef/.notdef/.notdef/Aacute/Acircumflex/Agrave
+/.notdef/.notdef/.notdef/.notdef/.notdef/cent/yen/.notdef
+/.notdef/grave/.notdef/circumflex/tilde/.notdef/atilde/Atilde
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/currency
+/eth/Eth/Ecircumflex/Edieresis/Egrave/dotlessi/Iacute/Icircumflex
+/Idieresis/.notdef/.notdef/.notdef/.notdef/brokenbar/Igrave/.notdef
+/Oacute/germandbls/Ocircumflex/Ograve/otilde/Otilde/.notdef/thorn
+/Thorn/Uacute/Ucircumflex/Ugrave/yacute/Yacute/.notdef/acute
+/.notdef/.notdef/.notdef/threequarters/paragraph/section/.notdef/cedilla
+/ring/dieresis/periodcentered/onesuperior/threesuperior/twosuperior/.notdef/.notdef
+
+PC 128 128 getinterval astore pop
+
+% duplicate fonts with a new encoding vector
+/recd 5 dict def
+/pcft
+{recd begin
+/ncs PC def /nfn x def
+/bfn x def /bfd bfn findfont def
+/nf bfd maxlength dict def
+bfd{x dup dup /FID ne x /Encoding ne and
+{x nf 3 1 roll put}{pop pop}ifelse
+}forall
+nf/FontName nfn put
+nf/Encoding ncs put
+nfn nf definefont pop
+end}bd
+
+/fs{x /pt x def ff pt cu scf sf}bd
+
+% used by eqn
+/Times-Roman/TR pcft /Times-Bold/TRB pcft
+/Times-Italic/TRI pcft /Times-BoldItalic/TRBI pcft
+/Helvetica/HV pcft /Helvetica-Bold/HVB pcft
+/Helvetica-Oblique/HVO pcft /Helvetica-BoldOblique/HVBO pcft
+/Courier/CR pcft /Courier-Bold/CRB pcft
+/Sym{/Symbol fs}bd
+
+% Bit map image data decompression code
+/xx 0 def /yy 0 def
+/xbytes 0 def
+/lbuf 1200 string def /obuf 600 string def
+/bval <FFFEFCF8F0E0C080000103070F1F3F7F> def
+/blacks 96 string def /whites 96 string def
+0 1 95 {whites x 255 put} for
+
+/dispatch [
+{
+dup 47 le {32 sub 4 bitshift x pop 1}{
+dup 63 le {x pop 48 sub bval x get
+3 copy put x 1 add x 0} {
+dup 79 le {62 sub} {
+80 sub { 3 copy put x 1 add x } repeat 0
+}ifelse }ifelse }ifelse
+}bind
+{
+32 sub add
+3 copy put
+x 1 add x 0
+} bind
+{
+32 sub x pop add 255 0
+}bind
+{
+32 sub x pop
+3 copy getinterval
+whites 0 3 index getinterval
+x copy pop add 255 0
+}bind
+{
+32 sub x pop
+3 copy getinterval
+blacks 0 3 index getinterval
+x copy pop add 0 0
+}bind
+]def
+
+% read a raster line and unpack
+/readx{
+obuf 0 255 0
+currentfile lbuf readline pop
+{x dispatch x get exec} forall
+pop pop pop 0 xbytes getinterval}bd
+
+/mspic{
+/yy x def/xx x def
+/xbytes xx 8 idiv def
+xx yy 1 [xx 0 0 0 yy sub 0 yy]{readx}image}bd
+
+
+
+/Helvetica/fA pcft/FA{/fA fs}bd
+/Helvetica-Oblique/fAI pcft/FAI{/fAI fs}bd
+/Helvetica-Bold/fAB pcft/FAB{/fAB fs}bd
+/Helvetica-BoldOblique/fAIB pcft/FAIB{/fAIB fs}bd
+/Times-Roman/fB pcft/FB{/fB fs}bd
+/Times-Italic/fBI pcft/FBI{/fBI fs}bd
+/Times-Bold/fBB pcft/FBB{/fBB fs}bd
+/Times-BoldItalic/fBIB pcft/FBIB{/fBIB fs}bd
+/Courier/fH pcft/FH{/fH fs}bd
+/Courier-Oblique/fHI pcft/FHI{/fHI fs}bd
+/Courier-Bold/fHB pcft/FHB{/fHB fs}bd
+/Courier-BoldOblique/fHIB pcft/FHIB{/fHIB fs}bd
+/ZapfChancery-MediumItalic/fL pcft/FL{/fL fs}bd
+/ZapfChancery-MediumItalic/fLI pcft/FLI{/fLI fs}bd
+/ZapfChancery-MediumItalic/fLB pcft/FLB{/fLB fs}bd
+/ZapfChancery-MediumItalic/fLIB pcft/FLIB{/fLIB fs}bd
+/AvantGarde-Book/fM pcft/FM{/fM fs}bd
+/AvantGarde-BookOblique/fMI pcft/FMI{/fMI fs}bd
+/AvantGarde-Demi/fMB pcft/FMB{/fMB fs}bd
+/AvantGarde-DemiOblique/fMIB pcft/FMIB{/fMIB fs}bd
+(F:\\LPT\\COMPR\\APP_B.DOC)(EWvA, MRK)(February 26, 1993)fileinfo
+%%EndProlog
+%%Page: 0 1
+delay mfeed
+begpage
+12 FAB
+969 3176 m
+(Appendix B: Testcode)s
+12 FB
+295 2969 m
+(This)s
+397(appendix)ms
+594(is)ms
+641(a)ms
+677(separate)ms
+855(file.)ms
+948(It)ms
+992(contains)ms
+1172(the)ms
+1247(test)ms
+1330(code)ms
+1438(that)ms
+1527(can)ms
+1610(be)ms
+1671(inserted)ms
+1843(to)ms
+1896(debug)ms
+2032(the)ms
+2107(pal-)ms
+295 2909 m
+(indrome)s
+475(filter)ms
+587(program.)ms
+783(If)ms
+830(the)ms
+11 FH
+906(PALINDROME.PAS)ms
+12 FB
+1305(module)ms
+1469(is)ms
+1517(extracted)ms
+1714(from)ms
+1826(appendices)ms
+2062(A)ms
+2112(and)ms
+295 2849 m
+(B)s
+340(together,)ms
+529(then)ms
+628(the)ms
+701(resulting)ms
+889(module)ms
+1051(includes)ms
+1231(this)ms
+1315(test)ms
+1397(code.)ms
+12 FAB
+295 2726 m
+(B.1. Print the contents of IN_LINE and LETTERS)s
+12 FB
+295 2639 m
+(Correct)s
+462(reading)ms
+629(of)ms
+688(the)ms
+767(input)ms
+887(is)ms
+938(crucial.)ms
+1104(For)ms
+1191(debugging)ms
+1419(purposes)ms
+1614(we)ms
+1690(may)ms
+1794(want)ms
+1908(to)ms
+1964(inspect)ms
+2123(the)ms
+295 2579 m
+(contents)s
+474(of)ms
+11 FH
+528(IN_LINE)ms
+12 FB
+733(and)ms
+11 FH
+818(LETTERS)ms
+12 FB
+(.)s
+1035(We)ms
+1117(need)ms
+1224(a)ms
+1259(local)ms
+1368(counter)ms
+10 FH
+345 2498 m
+(\(******* Palindrome variables #quick *******\))s
+345 2456 m
+( T : INTEGER;)s
+12 FB
+295 2364 m
+(We)s
+376(want)ms
+486(the)ms
+560(debugging)ms
+783(information)ms
+1032(te)ms
+1081(be)ms
+1140(clearly)ms
+1289(flagged)ms
+1451(as)ms
+1505(such.)ms
+10 FH
+345 2283 m
+(\(***************** Palindrome \(test\) ******************\))s
+345 2241 m
+(\(** Check contents of IN_LINE and LETTERS. **\))s
+345 2200 m
+(WRITELN;)s
+345 2158 m
+(WRITELN \('============ DEBUGGING INFORMATION ==============='\);)s
+345 2116 m
+(WRITELN \('Contents of buffer IN_LINE: '\);)s
+345 2075 m
+(WITH IN_LINE DO)s
+345 2033 m
+(FOR T := 1 TO LENGTH DO WRITE \(OUTPUT, CHARS[T]\);)s
+345 1991 m
+(WRITELN \('Contents of buffer LETTERS: '\);)s
+345 1950 m
+(WITH LETTERS DO)s
+345 1908 m
+(FOR T := 1 TO LENGTH DO WRITE \(OUTPUT, CHARS[T]\);)s
+345 1866 m
+(WRITELN \('========== END OF DEBUGGING INFORMATION =========='\);)s
+345 1825 m
+(WRITELN;)s
+345 1783 m
+(\(************* End of Palindrome \(test\) ***************\))s
+8 FB
+295 204 m
+(The)s
+355(CLiP)ms
+433(Style)ms
+510(of)ms
+546(Literate)ms
+658(Programming)ms
+850(\(3.038,)ms
+953(26-feb-93\))ms
+12 FB
+2075 204 m
+( 1 )s
+50 2 2130 216 li
+50 2 2020 216 li
+endpage
+%%Trailer
+enddocument
+%%Pages: 1
+%%DocumentFonts:
+%%+ Helvetica-Bold
+%%+ Times-Roman
+%%+ Courier
+%%EOF
+ \ No newline at end of file
diff --git a/web/clip/ms_dos/ada.ini b/web/clip/ms_dos/ada.ini
new file mode 100644
index 0000000000..4c9ceb12c5
--- /dev/null
+++ b/web/clip/ms_dos/ada.ini
@@ -0,0 +1,21 @@
+This file contains data that is needed to run CLiP
+And is generated by CLiP_MENU
+Modifying this file at own risk.
+Using CLiP_MENU is definitely recommended.
+
+INTERACTIVE_MODE Mode (INTERACTIVE/DEBUG/HELPFUL/AUTO)
+NO Interactive fault correction (YES/NO)
+BOTH Error message destination (TERMINAL/REPORTFILE/BOTH/NONE)
+-- Left comment string
+-- Right comment string
++ Command character
+ENDOF END string
+# Option marker
+OMITTED The specified modules are (OMITTED/EXTRACTED)
+------------ REPORT FILE -----------
+CLIP.RPT
+------------ INPUT FILES -----------
+------------ MODULES ---------------
+------------ MODULE DIRECTORY ------
+
+------------ END OF INI FILE -------
diff --git a/web/clip/ms_dos/c.ini b/web/clip/ms_dos/c.ini
new file mode 100644
index 0000000000..dad00ccd0a
--- /dev/null
+++ b/web/clip/ms_dos/c.ini
@@ -0,0 +1,21 @@
+This file contains data that is needed to run CLiP
+And is generated by CLiP_MENU
+Modifying this file at own risk.
+Using CLiP_MENU is definitely recommended.
+
+INTERACTIVE_MODE Mode (INTERACTIVE/DEBUG/HELPFUL/AUTO)
+NO Interactive fault correction (YES/NO)
+BOTH Error message destination (TERMINAL/REPORTFILE/BOTH/NONE)
+/* Left comment string
+*/ Right comment string
+* Command character
+ENDOF END string
+# Option marker
+OMITTED The specified modules are (OMITTED/EXTRACTED)
+------------ REPORT FILE -----------
+CLIP.RPT
+------------ INPUT FILES -----------
+------------ MODULES ---------------
+------------ MODULE DIRECTORY ------
+
+------------ END OF INI FILE -------
diff --git a/web/clip/ms_dos/cl.bat b/web/clip/ms_dos/cl.bat
new file mode 100644
index 0000000000..d94e8ca6c3
--- /dev/null
+++ b/web/clip/ms_dos/cl.bat
@@ -0,0 +1,5 @@
+ @echo off
+ echo .....Run CLiP with already existing INI-file.....
+ set clip_dir=C:\CLIP
+ if not ".%1"=="." copy %1 CLIP.INI
+ C:\CLIP\CLIP_2
diff --git a/web/clip/ms_dos/clip.bat b/web/clip/ms_dos/clip.bat
new file mode 100644
index 0000000000..39423f1e29
--- /dev/null
+++ b/web/clip/ms_dos/clip.bat
@@ -0,0 +1,8 @@
+ echo off
+ c:\CLIP\CLIP_1.EXE %1
+ if errorlevel == 1 goto CLIP_2
+ goto ready
+ :CLIP_2
+ set clip_dir=C:\CLIP
+ c:\CLIP\CLIP_2.EXE
+ :ready
diff --git a/web/clip/ms_dos/clip_msg.dat b/web/clip/ms_dos/clip_msg.dat
new file mode 100644
index 0000000000..3359871417
--- /dev/null
+++ b/web/clip/ms_dos/clip_msg.dat
@@ -0,0 +1,36 @@
+ SCAN_FILES (2.2): A line of category L2 is not allowed in passive mode.%
+ SCAN_FILES (2.3): A line of category L3 in not allowed in passive mode.%
+ SCAN_LINE (3a): An CLIP_LPAR is found but not an CLIP_RPAR.%
+ SCAN_LINE (3b): An CLIP_RPAR is found but not an CLIP_LPAR.%
+ SCAN_LINE (4a): Only one CLIP command character is found.
+ Line treated as an L3.%
+ SCAN_LINE (4b): Only one CLIP command character is found.
+ Line treated as an L3.%
+ BUILD_C_S (12): Line cannot be paste to a segment.%
+ BUILD_C_S (22): Stub not correctly closed before end of file.%
+ SCAN_OPTIONS (3.1.1): Missing argument option @. Option ignored.%
+ SCAN_OPTIONS (3.1.2)a: Illegal abbreviation @. Supply more characters.%
+ SCAN_OPTIONS (3.1.2)b: Unknown option @. Option ignored.%
+ SCAN_OPTIONS (3.1.3)a: @ Quoted string not terminated for end of line.
+ Option FILE ignored.%
+ SCAN_OPTIONS (3.1.3)b: @ Quoted string expected. Option FILE ignored.%
+ SCAN_OPTIONS (3.1.4): Illegal argument @ Indent option. Option ignored.%
+ SCAN_OPTIONS (3.1.5)a: Comment @ not yet implemented.%
+ SCAN_OPTIONS (3.1.5)b: Illegal argument @ COMMENT-option. Option ignored.%
+ SCAN_OPTIONS (3.2.1)a: @ quoted string not terminated for end of line.
+ Option FILE ignored.%
+ SCAN_OPTIONS (3.2.1)b: Quoted string expected. Option FILE ignored.%
+ SCAN_OPTIONS (3.2.2): Illegal argument @ Indent option. Option ignored.%
+ SCAN_OPTIONS (3.2.3)a: Comment @ not yet implemented.%
+ SCAN_OPTIONS (3.2.3)b: Illegal argument @ COMMENT-option. Option ignored.%
+ SCAN_OPTIONS (3.2.4): Illegal character @ in line. Option marker expected.%
+ SCAN_OPTIONS (5a): Missing argument @-option . Option ignored.%
+ SCAN_OPTIONS (5b): Stub option @ not allowed in slot. Option ignored.%
+ SCAN_OPTIONS (5c): Slot option @ not allowed in stub. Option ignored.%
+ SCAN_OPTIONS (5d): Any combination of the options FILE, LEADER, TRAILER,
+ SEPARATOR or DEFAULT in one segment is illegal. Defaults assumed.%
+ ANALYSE (4.1): Multiple stubs in single slot. SLOT set to multiple.%
+ ORDER_TWINS (1.5): LEADER, TRAILER and/or SEPARATOR stubs found without
+ ordinary stubs for this slot. Stubs ignored.%
+ GENMOD (2.1): Error opening file @. Module will not be generated.%
+ GENMOD (4.1): Error closing file @.%
diff --git a/web/clip/ms_dos/cliphelp.hlp b/web/clip/ms_dos/cliphelp.hlp
new file mode 100644
index 0000000000..29affb71ae
--- /dev/null
+++ b/web/clip/ms_dos/cliphelp.hlp
Binary files differ
diff --git a/web/clip/ms_dos/clp.bat b/web/clip/ms_dos/clp.bat
new file mode 100644
index 0000000000..c1c6ac2806
--- /dev/null
+++ b/web/clip/ms_dos/clp.bat
@@ -0,0 +1,44 @@
+ @echo off
+ if z%CLIP_SRC%==z goto set_environment
+ if z%CLIP_TRG%==z goto set_environment
+ :create_INI_file
+ echo ..... CLiP the sourcefiles that are given as arguments .....
+ echo ..... Report file is CLIP.RPT .....
+ if exist CLIP.INI del CLIP.INI
+ echo This file contains data that is needed to run CLiP > CLIP.INI
+ echo And is generated by CLiP_1 >> CLIP.INI
+ echo Modifying this file at own risk. >> CLIP.INI
+ echo Using CLiP_1 is definitely recommended. >> CLIP.INI
+ echo >> CLIP.INI
+ echo INTERACTIVE_MODE >> CLIP.INI
+ echo NO >> CLIP.INI
+ echo BOTH >> CLIP.INI
+ echo (* >> CLIP.INI
+ echo *) >> CLIP.INI
+ echo * >> CLIP.INI
+ echo ENDOF >> CLIP.INI
+ echo # >> CLIP.INI
+ echo OMITTED >> CLIP.INI
+ echo ------------ REPORT FILE ----------- >> CLIP.INI
+ echo CLIP.RPT >> CLIP.INI
+ echo ------------ INPUT FILES ----------- >> CLIP.INI
+ if not ".%1"=="." echo %CLIP_SRC%\%1 >> CLIP.INI
+ if not ".%2"=="." echo %CLIP_SRC%\%2 >> CLIP.INI
+ if not ".%3"=="." echo %CLIP_SRC%\%3 >> CLIP.INI
+ if not ".%4"=="." echo %CLIP_SRC%\%4 >> CLIP.INI
+ if not ".%5"=="." echo %CLIP_SRC%\%5 >> CLIP.INI
+ if not ".%6"=="." echo %CLIP_SRC%\%6 >> CLIP.INI
+ if not ".%7"=="." echo %CLIP_SRC%\%7 >> CLIP.INI
+ if not ".%8"=="." echo %CLIP_SRC%\%8 >> CLIP.INI
+ if not ".%9"=="." echo %CLIP_SRC%\%9 >> CLIP.INI
+ echo ------------ MODULES --------------- >> CLIP.INI
+ echo ------------ MODULE DIRECTORY ------ >> CLIP.INI
+ echo %CLIP_TRG%\ >> CLIP.INI
+ echo ------------ END OF INI FILE ------- >> CLIP.INI
+ set clip_dir=C:\CLIP
+ C:\CLIP\CLIP_2
+ goto ready
+ :set_environment
+ echo ..... Please define SOURCE and TARGET directories .....
+ echo ..... You can use CLIP_ENV.BAT for this purpose .....
+ :ready
diff --git a/web/clip/ms_dos/clp_env.bat b/web/clip/ms_dos/clp_env.bat
new file mode 100644
index 0000000000..34b0452d13
--- /dev/null
+++ b/web/clip/ms_dos/clp_env.bat
@@ -0,0 +1,22 @@
+ @echo off
+ if ".%1"=="." goto clear_env
+ if ".%2"=="." goto more_parameters
+ :set_environement
+ set CLIP_SRC=%1
+ set CLIP_TRG=%2
+ echo ..... Set CLiP environment .....
+ echo Source file directory is "%1" .....
+ echo Target module directory is "%2" .....
+ goto ready
+ :clear_env
+ set CLIP_SRC=
+ set CLIP_TRG=
+ echo ..... CLiP environment cleared .....
+ goto ready
+ :more_parameters
+ echo ..... Please specify directories for .....
+ echo ..... SOURCE files and TARGET modules .....
+ echo ..... without trailing backslash, e.g. .....
+ echo ..... >clp_env d: d:\test .....
+ goto ready
+ :ready
diff --git a/web/clip/ms_dos/ex01_a.asc b/web/clip/ms_dos/ex01_a.asc
new file mode 100644
index 0000000000..b26ff02583
--- /dev/null
+++ b/web/clip/ms_dos/ex01_a.asc
@@ -0,0 +1,274 @@
+
+
+
+ Example 01: Palindrome filter
+
+
+
+
+
+In this appendix we illustrate the CLiP style of literate programming by a
+program to filter palindromic lines from an input file.
+ Two files are involved: the program module (*PALINDROME.PAS*) and a test
+file (*TESTDATA.IN*).
+
+
+A.1. Specification
+
+A palindrome is a sentence with the property that the letters from left to
+right, read the same as from right to left. In the comparison uppercase and
+lowercase letters are considered to be equivalent and all other characters are
+simply ignored. Hence an empty sentence is a palindrome. Other examples are:
+
+ (************* #file "TESTDATA.IN" #comment off **************)
+ Ada
+ 1234567
+ doremifasolosafimerod
+ (******* Testdata #multiple *******)
+ (***************** End of TESTDATA.PAS ************************)
+
+The following sentences do not qualify as a palindrome.
+
+ (******* Testdata #quick *******)
+ Mr. Clinton won the elections over Mr. Bush.
+ This line is not palindromic.
+ Aabbccdd Aabbccdd Aabbccdd Aabbccdd
+ Abracadabra
+ supercalafragilisiticexpielecdosia
+
+The following are examples of more sophisticated palindromes.
+
+ (******* Testdata #quick *******)
+ Able was I, ere I saw Elba.
+ A man, a plan, a canal, Panama.
+ Norma is as selfless as I Am, Ron.
+
+Note that the famous Dutch sentence
+
+ (******* Testdata #quick *******)
+ Koos Eekfeen keek maar door rood kerkraam, maar krek door rood raam keek
+ neef Kees ook.
+
+will not be recognized as a plindrome since it occupies two lines.
+ The program *PALINDROME* reads an input file, filters the lines that are
+palindromic and writes them to an output file.
+
+A.2. Communication with the outside world
+
+The program conforms to the general template of a Pascal program. We introduce
+the files *IN_FILE* and *OUT_FILE* to define its communication with the outside
+world. The actual files have to be specified at run-time. Thus we have
+
+ (***************** #file "PALINDRO.PAS" ***********************)
+ (****************************************************************)
+ (* Program: Palindrome filter program. *)
+ (* Purpose: To filter the palindromic lines from a given input *)
+ (* file to a specified output file. *)
+ (****************************************************************)
+ PROGRAM PALINDROME (INPUT, OUTPUT, IN_FILE, OUT_FILE);
+
+ (******* Palindrome constants #multiple #comment off *******)
+ (******* Palindrome types #multiple #comment off *******)
+ VAR
+ IN_FILE, OUT_FILE: TEXT;
+ (******* Palindrome variables #multiple #comment off *******)
+
+ BEGIN
+ ASSIGN (IN_FILE, 'TESTDATA.IN'); RESET (IN_FILE);
+ ASSIGN (OUT_FILE, 'TESTDATA.OUT'); REWRITE (OUT_FILE);
+
+ (***************** Palindrome (body) **********************)
+ (** Copy the lines of the IN_FILE that are palindromic to **)
+ (** the OUT_FILE. **)
+ (************************************************************)
+
+ END (*PALINDROME*).
+ (******************* End of PALINDROME.PAS ********************)
+
+To prepare the module for future declarations of constants and types we have
+
+ (******* Palindrome constants #leader #quick *******)
+ CONST
+ (******* Palindrome types #leader #quick *******)
+ TYPE
+
+A.3. Processing of the files
+
+The program processes *IN_FILE* line by line. The idea is to buffer an exact
+copy of the current line in *IN_LINE*, while at the same time its letters are
+buffered in *LETTERS*. So *LETTERS* will be empty if the line holds no letters
+at all, in which case the line is considered to be palindromic by definition.
+ We choose the buffers *IN_LINE* and *LETTERS* to be of the same type, *
+TEXT_LINE*, which we will not specify in detail right now. For this purpose we
+introduce a type *ABSTRACT*.
+
+ (******* Palindrome types #quick *******)
+ ABSTRACT = (DEFINED, UNDEFINED);
+
+*TEXT_LINE* will temporarily be declared *ABSTRACT* and its details will be
+defined later. Thus the declaration of *TEXT_LINE*
+
+ (******* Palindrome types *******)
+ (******* Declaration of TEXT_LINE *******)
+ (***************** End of Palindrome types ********************)
+
+is temporarily satisfied with the type *ABSTRACT*.
+
+ (******* Declaration of TEXT_LINE #quick #default *******)
+ TEXT_LINE = ABSTRACT;
+
+The declaration for the variables *IN_LINE* and *LETTERS* becomes
+
+ (******* Palindrome variables #quick *******)
+ IN_LINE,
+ LETTERS: TEXT_LINE;
+
+We have to test *LETTERS* in order to decide whether or not *IN_LINE* contains
+a palindrome. The result of this test is flagged by *IS_PALINDROME*, for which
+we introduce the declaration
+
+ (******* Palindrome variables #quick *******)
+ IS_PALINDROME: BOOLEAN;
+
+Now the body of the Palindrome filter may be expanded as
+
+ (***************** Palindrome (body) **********************)
+ (** Copy the lines of the IN_FILE that are palindromic to **)
+ (** the OUT_FILE. **)
+ WHILE NOT EOF (IN_FILE) DO
+ BEGIN
+ (***************** Palindrome (1) *********************)
+ (** Read a line from IN_FILE into IN_LINE. The letters **)
+ (** of this line are copied to LETTERS. **)
+ (********************************************************)
+
+ READLN (IN_FILE);
+
+ (***************** Palindrome (2) *********************)
+ (** Test palindromicity of LETTERS. Set IS_PALINDROME **)
+ (** to reflect the result of the test. **)
+ (********************************************************)
+
+
+ IF IS_PALINDROME THEN
+ BEGIN
+ (***************** Palindrome (3) *****************)
+ (** Write IN_LINE to OUT_FILE. **)
+ (****************************************************)
+
+ WRITELN (OUT_FILE);
+ END (*IF*);
+ END (*WHILE*);
+ (************* End of Palindrome (body) *******************)
+
+A.4. Choosing the structure of *IN_LINE* and *LETTERS*
+
+Before we can proceed we need to establish a structure for the objects *IN_LINE*
+ and *LETTERS*. Thus we define *TEXT_LINE* as a structure with two components.
+The first component is an array, *CHARS*, which contains the characters to be
+buffered. The second component, *LENGTH*, indicates which part of the array is
+actually occupied. The maximum number of characters that can be buffered by the
+structure is determined by the length, *MAX_L*, of the array. *MAX_L* serves as
+an implementation parameter.
+
+ (******* Palindrome constants #quick *******)
+ MAX_L = 132;
+
+ (******* Declaration of TEXT_LINE #quick *******)
+ TEXT_LINE = RECORD
+ CHARS: ARRAY[1..MAX_L] OF CHAR;
+ LENGTH: 0..MAX_L;
+ END (*RECORD*);
+
+A.5. Reading a line
+
+For efficiency reasons we fill *IN_LINE* and *LETTERS* simultaneously.
+Therefore we buffer every character that is read from *IN_FILE* in the variable
+*IN_CHAR*.
+
+ (******* Palindrome variables #quick *******)
+ IN_CHAR: CHAR;
+
+Only when *IN_CHAR* turns out to be a letter it is copied to *LETTERS*. Since
+this process is crucial for the overall operation, we make provisions for some
+debugging code here.
+
+ (***************** Palindrome (1) *********************)
+ (** Read a line from IN_FILE into IN_LINE. The letters **)
+ (** of this line are copied to LETTERS. **)
+ IN_LINE.LENGTH := 0;
+ LETTERS.LENGTH := 0;
+ WITH IN_LINE DO
+ WHILE NOT EOLN (IN_FILE) DO
+ BEGIN
+ READ (IN_FILE, IN_CHAR);
+ LENGTH := LENGTH + 1;
+ CHARS[LENGTH] := IN_CHAR;
+ IF IN_CHAR IN ['A'..'Z', 'a'..'z'] THEN
+ WITH LETTERS DO
+ BEGIN
+ LENGTH := LENGTH + 1;
+ CHARS[LENGTH] := IN_CHAR;
+ END (*WITH/IF*);
+ END (*WHILE/WITH*);
+
+ (********************* Palindrome (test) **************)
+ (** Check contents of IN_LINE and LETTERS. #optional **)
+ (********************************************************)
+
+ (***************** End of Palindrome (1) **************)
+
+A.6. Testing for palindromicity
+
+We test the palindromicity of *LETTERS* in two steps. First we transform the
+contents of *LETTERS* to uppercase and then we compare the characters of *
+LETTERS* pairwise. The comparison is done starting with the most outside
+characters and progressing inward. The string is assumed a palindrome until the
+opposite is proven through a pair of different characters. With the local
+counter
+
+ (******* Palindrome variables #quick *******)
+ I: INTEGER;
+
+we keep track of the comparing process. Now *Palindrome (2)* can be expanded as
+
+ (***************** Palindrome (2) *********************)
+ (** Test palindromicity of LETTERS. Set IS_PALINDROME **)
+ (** to reflect the result of the test. **)
+ WITH LETTERS DO
+ BEGIN
+ (* Transform lowercase to uppercase. *)
+ FOR I := 1 TO LENGTH DO
+ IF CHARS[I] IN ['a'..'z']
+ THEN CHARS[I] :=
+ CHR(ORD(CHARS[I]) - ORD('a') + ORD('A'));
+
+ (* Perform the palindromicity test. *)
+ IS_PALINDROME := TRUE;
+ I := 1;
+ WHILE IS_PALINDROME AND (I <= LENGTH DIV 2) DO
+ IF CHARS[I] = CHARS[LENGTH-I+1] THEN
+ I := I + 1
+ ELSE
+ IS_PALINDROME := FALSE;
+ END (*WITH*);
+ (***************** End of Palindrome (2) **************)
+
+A.7. Writing the palindrome
+
+The only remaining action is to write the contents of *IN_LINE*. Again we need
+a local counter
+
+ (******* Palindrome variables #quick *******)
+ J: INTEGER;
+
+The writing proceeds straight forward.
+
+ (***************** Palindrome (3) *****************)
+ (** Write IN_LINE to OUT_FILE. **)
+ WITH IN_LINE DO
+ BEGIN
+ FOR J := 1 TO LENGTH DO
+ WRITE (OUT_FILE, CHARS[J]);
+ END (*WITH*);
+ (************* End of Palindrome (3) **************)
diff --git a/web/clip/ms_dos/ex01_a.ini b/web/clip/ms_dos/ex01_a.ini
new file mode 100644
index 0000000000..ccac7316e6
--- /dev/null
+++ b/web/clip/ms_dos/ex01_a.ini
@@ -0,0 +1,26 @@
+This file contains data that is needed to run CLiP
+And is generated by CLiP_MENU
+Modifying this file at own risk.
+Using CLiP_MENU is definitely recommended.
+
+INTERACTIVE_MODE Mode (INTERACTIVE/DEBUG/HELPFUL/AUTO)
+YES Interactive fault correction (YES/NO)
+BOTH Error message destination (TERMINAL/REPORTFILE/BOTH/NONE)
+(* Left comment string
+*) Right comment string
+* Command character
+ENDOF END string
+# Option marker
+EXTRACTED The specified modules are (OMITTED/EXTRACTED)
+------------ REPORT FILE -----------
+CLIP.RPT
+------------ INPUT FILES -----------
+.\EX01_A.ASC
+------------ MODULES ---------------
+.\
+PALINDRO.PAS
+.\
+TESTDATA.IN
+------------ MODULE DIRECTORY ------
+.\
+------------ END OF INI FILE -------
diff --git a/web/clip/ms_dos/ex01_a.pas b/web/clip/ms_dos/ex01_a.pas
new file mode 100644
index 0000000000..914c550a71
--- /dev/null
+++ b/web/clip/ms_dos/ex01_a.pas
@@ -0,0 +1,102 @@
+ (***************** #file "PALINDRO.PAS" ***********************)
+ (****************************************************************)
+ (* Program: Palindrome filter program. *)
+ (* Purpose: To filter the palindromic lines from a given input *)
+ (* file to a specified output file. *)
+ (****************************************************************)
+ PROGRAM PALINDROME (INPUT, OUTPUT, IN_FILE, OUT_FILE);
+
+ CONST
+ MAX_L = 132;
+ TYPE
+ ABSTRACT = (DEFINED, UNDEFINED);
+ TEXT_LINE = RECORD
+ CHARS: ARRAY[1..MAX_L] OF CHAR;
+ LENGTH: 0..MAX_L;
+ END (*RECORD*);
+ VAR
+ IN_FILE, OUT_FILE: TEXT;
+ IN_LINE,
+ LETTERS: TEXT_LINE;
+ IS_PALINDROME: BOOLEAN;
+ IN_CHAR: CHAR;
+ I: INTEGER;
+ J: INTEGER;
+
+ BEGIN
+ ASSIGN (IN_FILE, 'TESTDATA.IN'); RESET (IN_FILE);
+ ASSIGN (OUT_FILE, 'TESTDATA.OUT'); REWRITE (OUT_FILE);
+
+ (***************** Palindrome (body) **********************)
+ (** Copy the lines of the IN_FILE that are palindromic to **)
+ (** the OUT_FILE. **)
+ WHILE NOT EOF (IN_FILE) DO
+ BEGIN
+ (***************** Palindrome (1) *********************)
+ (** Read a line from IN_FILE into IN_LINE. The letters **)
+ (** of this line are copied to LETTERS. **)
+ IN_LINE.LENGTH := 0;
+ LETTERS.LENGTH := 0;
+ WITH IN_LINE DO
+ WHILE NOT EOLN (IN_FILE) DO
+ BEGIN
+ READ (IN_FILE, IN_CHAR);
+ LENGTH := LENGTH + 1;
+ CHARS[LENGTH] := IN_CHAR;
+ IF IN_CHAR IN ['A'..'Z', 'a'..'z'] THEN
+ WITH LETTERS DO
+ BEGIN
+ LENGTH := LENGTH + 1;
+ CHARS[LENGTH] := IN_CHAR;
+ END (*WITH/IF*);
+ END (*WHILE/WITH*);
+
+ (********************* Palindrome (test) **************)
+ (** Check contents of IN_LINE and LETTERS. #optional **)
+ (********************************************************)
+
+ (***************** End of Palindrome (1) **************)
+
+ READLN (IN_FILE);
+
+ (***************** Palindrome (2) *********************)
+ (** Test palindromicity of LETTERS. Set IS_PALINDROME **)
+ (** to reflect the result of the test. **)
+ WITH LETTERS DO
+ BEGIN
+ (* Transform lowercase to uppercase. *)
+ FOR I := 1 TO LENGTH DO
+ IF CHARS[I] IN ['a'..'z']
+ THEN CHARS[I] :=
+ CHR(ORD(CHARS[I]) - ORD('a') + ORD('A'));
+
+ (* Perform the palindromicity test. *)
+ IS_PALINDROME := TRUE;
+ I := 1;
+ WHILE IS_PALINDROME AND (I <= LENGTH DIV 2) DO
+ IF CHARS[I] = CHARS[LENGTH-I+1] THEN
+ I := I + 1
+ ELSE
+ IS_PALINDROME := FALSE;
+ END (*WITH*);
+ (***************** End of Palindrome (2) **************)
+
+
+ IF IS_PALINDROME THEN
+ BEGIN
+ (***************** Palindrome (3) *****************)
+ (** Write IN_LINE to OUT_FILE. **)
+ WITH IN_LINE DO
+ BEGIN
+ FOR J := 1 TO LENGTH DO
+ WRITE (OUT_FILE, CHARS[J]);
+ END (*WITH*);
+ (************* End of Palindrome (3) **************)
+
+ WRITELN (OUT_FILE);
+ END (*IF*);
+ END (*WHILE*);
+ (************* End of Palindrome (body) *******************)
+
+ END (*PALINDROME*).
+ (******************* End of PALINDROME.PAS ********************)
diff --git a/web/clip/ms_dos/ex01_a.ps b/web/clip/ms_dos/ex01_a.ps
new file mode 100644
index 0000000000..4e7e24c4fe
--- /dev/null
+++ b/web/clip/ms_dos/ex01_a.ps
@@ -0,0 +1,1416 @@
+%!PS-Adobe-2.0
+%%DocumentFonts: (atend)
+%%Title: F:\\LPT\\MAN\\EX01_A.DOC
+%%Creator: Lotus Manuscript
+%%For: EWvA, MRK
+%%CreationDate: March 22, 1993
+%%Pages: (atend)
+%%BoundingBox: 0 0 595 841
+%%EndComments
+% PostScript Prologue (initialization) for Manuscript
+% Copyright (c) 1985,1986,1987,1988 Lotus Development Corporation
+% There is no user servicable code in this file.
+
+% set timeouts to infinite
+statusdict begin
+0 setjobtimeout
+/manualfeedtimeout 3600 def
+/waittimeout 0 def
+end
+
+% correct bug correction in rev 41.0
+/idiv{div cvi}bind def
+
+% define User Dictionary
+/msdict 300 dict def msdict begin
+/bd{bind def}bind def
+
+% Define commonly used things
+/delay{usertime 5000 add{dup usertime lt{pop exit}if}loop}bd
+/mfeed{statusdict begin /manualfeed true def end}bd
+/afeed{statusdict begin /manualfeed false def end}bd
+/bfeed{ afeed statusdict begin /setpapertray where
+ {pop setpapertray}{pop} ifelse end}bd
+
+/dpi{0.24 dup scale}bd
+
+% These two are called for each page
+/inpage false def
+/begpage{save dpi /inpage true def}bd
+/endpage{inpage {restore showpage}if }bd
+
+% for possible banner
+/fileinfo {pop pop pop}bd
+/enddocument {end} bd
+
+% these are also used by eqn & gmf
+/ld{load def}bd
+/x/exch ld
+/cu{300 mul 72 div}bd
+/m/moveto ld
+/t/translate ld
+/rm/rmoveto ld
+/cp/currentpoint ld
+/st/stroke ld
+/ln/lineto ld
+/rlt/rlineto ld
+/slw/setlinewidth ld
+
+/ff/findfont ld
+/scf/scalefont ld
+/sf/setfont ld
+/fs{x /pt x def ff pt cu scf sf}bd
+
+% linedraw
+/li{4 2 roll setlinewidth 3 1 roll moveto 0.0 rlineto st}bd
+
+% outline factor
+/olwid 40.0 def
+% stroke width for outline
+/uoslw {pt cu x div slw}bd
+% relative horizontal move
+/xm{x currentpoint pop sub 0.0 rmoveto}bd
+
+% The basic show
+/s/show ld
+% move horizontal and show
+/ms{xm s}bd
+
+% variations
+% outline show - first printer attribute
+/ppss{dup cp 3 -1 roll false charpath st
+x 3 -1 roll stringwidth pop add x moveto}bd
+/pss{olwid uoslw { ( ) dup 0 4 -1 roll put ppss}forall}bd
+/ps{pss}bd
+/mps{xm ps}bd
+
+% graybox show - second printer attribute
+/gb{cp 3 -1 roll pt cu dup 4 div neg 0 x rm dup 0 x rlt x 0 rlt
+neg 0 x rlt closepath currentgray .9 setgray fill setgray m}bd
+/usi{dup stringwidth pop gb}bd
+/us{usi s}bd
+/xum{x cp pop sub dup gb 0 rmoveto}bd
+
+% combinations of PD1 and PD2
+/ups{usi pss}bd
+/mups{xm ups}bd
+/mus{xm us}bd
+
+% define a new encoding vector (code page 850 based)
+/PC 256 array def
+StandardEncoding PC copy pop
+
+/dotaccent/bullet
+/quotesingle/quotedblleft/quotedblright/quotesinglbase
+/quotedblbase/guilsinglleft/guilsinglright/.notdef
+/ellipsis/perthousand/.notdef/.notdef/paragraph/section/dagger/daggerdbl
+/OE/oe/fi/fl/endash/emdash/fraction/Ydieresis
+PC 6 26 getinterval astore pop
+
+/Ccedilla/udieresis/eacute/acircumflex/adieresis/agrave/aring/ccedilla
+/ecircumflex/edieresis/egrave/idieresis/icircumflex/igrave/Adieresis/Aring
+/Eacute/ae/AE/ocircumflex/odieresis/ograve/ucircumflex/ugrave
+/ydieresis/Odieresis/Udieresis/oslash/sterling/Oslash/.notdef/florin
+/aacute/iacute/oacute/uacute/ntilde/Ntilde/ordfeminine/ordmasculine
+/questiondown/.notdef/.notdef/onehalf/onequarter/exclamdown/guillemotleft/guillemotright
+/.notdef/.notdef/.notdef/.notdef/.notdef/Aacute/Acircumflex/Agrave
+/.notdef/.notdef/.notdef/.notdef/.notdef/cent/yen/.notdef
+/.notdef/grave/.notdef/circumflex/tilde/.notdef/atilde/Atilde
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/currency
+/eth/Eth/Ecircumflex/Edieresis/Egrave/dotlessi/Iacute/Icircumflex
+/Idieresis/.notdef/.notdef/.notdef/.notdef/brokenbar/Igrave/.notdef
+/Oacute/germandbls/Ocircumflex/Ograve/otilde/Otilde/.notdef/thorn
+/Thorn/Uacute/Ucircumflex/Ugrave/yacute/Yacute/.notdef/acute
+/.notdef/.notdef/.notdef/threequarters/paragraph/section/.notdef/cedilla
+/ring/dieresis/periodcentered/onesuperior/threesuperior/twosuperior/.notdef/.notdef
+
+PC 128 128 getinterval astore pop
+
+% duplicate fonts with a new encoding vector
+/recd 5 dict def
+/pcft
+{recd begin
+/ncs PC def /nfn x def
+/bfn x def /bfd bfn findfont def
+/nf bfd maxlength dict def
+bfd{x dup dup /FID ne x /Encoding ne and
+{x nf 3 1 roll put}{pop pop}ifelse
+}forall
+nf/FontName nfn put
+nf/Encoding ncs put
+nfn nf definefont pop
+end}bd
+
+/fs{x /pt x def ff pt cu scf sf}bd
+
+% used by eqn
+/Times-Roman/TR pcft /Times-Bold/TRB pcft
+/Times-Italic/TRI pcft /Times-BoldItalic/TRBI pcft
+/Helvetica/HV pcft /Helvetica-Bold/HVB pcft
+/Helvetica-Oblique/HVO pcft /Helvetica-BoldOblique/HVBO pcft
+/Courier/CR pcft /Courier-Bold/CRB pcft
+/Sym{/Symbol fs}bd
+
+% Bit map image data decompression code
+/xx 0 def /yy 0 def
+/xbytes 0 def
+/lbuf 1200 string def /obuf 600 string def
+/bval <FFFEFCF8F0E0C080000103070F1F3F7F> def
+/blacks 96 string def /whites 96 string def
+0 1 95 {whites x 255 put} for
+
+/dispatch [
+{
+dup 47 le {32 sub 4 bitshift x pop 1}{
+dup 63 le {x pop 48 sub bval x get
+3 copy put x 1 add x 0} {
+dup 79 le {62 sub} {
+80 sub { 3 copy put x 1 add x } repeat 0
+}ifelse }ifelse }ifelse
+}bind
+{
+32 sub add
+3 copy put
+x 1 add x 0
+} bind
+{
+32 sub x pop add 255 0
+}bind
+{
+32 sub x pop
+3 copy getinterval
+whites 0 3 index getinterval
+x copy pop add 255 0
+}bind
+{
+32 sub x pop
+3 copy getinterval
+blacks 0 3 index getinterval
+x copy pop add 0 0
+}bind
+]def
+
+% read a raster line and unpack
+/readx{
+obuf 0 255 0
+currentfile lbuf readline pop
+{x dispatch x get exec} forall
+pop pop pop 0 xbytes getinterval}bd
+
+/mspic{
+/yy x def/xx x def
+/xbytes xx 8 idiv def
+xx yy 1 [xx 0 0 0 yy sub 0 yy]{readx}image}bd
+
+
+
+/Helvetica/fA pcft/FA{/fA fs}bd
+/Helvetica-Oblique/fAI pcft/FAI{/fAI fs}bd
+/Helvetica-Bold/fAB pcft/FAB{/fAB fs}bd
+/Helvetica-BoldOblique/fAIB pcft/FAIB{/fAIB fs}bd
+/Times-Roman/fB pcft/FB{/fB fs}bd
+/Times-Italic/fBI pcft/FBI{/fBI fs}bd
+/Times-Bold/fBB pcft/FBB{/fBB fs}bd
+/Times-BoldItalic/fBIB pcft/FBIB{/fBIB fs}bd
+/Courier/fH pcft/FH{/fH fs}bd
+/Courier-Oblique/fHI pcft/FHI{/fHI fs}bd
+/Courier-Bold/fHB pcft/FHB{/fHB fs}bd
+/Courier-BoldOblique/fHIB pcft/FHIB{/fHIB fs}bd
+/ZapfChancery-MediumItalic/fL pcft/FL{/fL fs}bd
+/ZapfChancery-MediumItalic/fLI pcft/FLI{/fLI fs}bd
+/ZapfChancery-MediumItalic/fLB pcft/FLB{/fLB fs}bd
+/ZapfChancery-MediumItalic/fLIB pcft/FLIB{/fLIB fs}bd
+/AvantGarde-Book/fM pcft/FM{/fM fs}bd
+/AvantGarde-BookOblique/fMI pcft/FMI{/fMI fs}bd
+/AvantGarde-Demi/fMB pcft/FMB{/fMB fs}bd
+/AvantGarde-DemiOblique/fMIB pcft/FMIB{/fMIB fs}bd
+(F:\\LPT\\MAN\\EX01_A.DOC)(EWvA, MRK)(March 22, 1993)fileinfo
+%%EndProlog
+%%Page: 0 1
+begpage
+12 FAB
+977 2996 m
+(Example 01: Palindrome filter)s
+12 FB
+295 2669 m
+(In)s
+354(this)ms
+444(appendix)ms
+645(we)ms
+721(illustrate)ms
+914(the)ms
+993(CLiP)ms
+1117(style)ms
+1229(of)ms
+1289(literate)ms
+1445(programming)ms
+1735(by)ms
+1803(a)ms
+1843(program)ms
+2031(to)ms
+2087(filter)ms
+295 2609 m
+(palindromic)s
+549(lines)ms
+656(from)ms
+765(an)ms
+825(input)ms
+940(file.)ms
+12 FB
+395 2549 m
+(Two)s
+501(files)ms
+602(are)ms
+678(involved:)ms
+882(the)ms
+958(program)ms
+1142(module)ms
+1307(\()ms
+11 FH
+(PALINDROME.PAS)s
+12 FB
+(\))s
+1740(and)ms
+1827(a)ms
+1864(test)ms
+1949(file)ms
+2030(\()ms
+11 FH
+(TEST-)s
+11 FH
+295 2489 m
+(DATA.IN)s
+12 FB
+(\).)s
+12 FAB
+295 2306 m
+(A.1. Specification)s
+12 FB
+295 2219 m
+(A)s
+343(palindrome)ms
+583(is)ms
+628(a)ms
+663(sentence)ms
+847(with)ms
+948(the)ms
+1021(property)ms
+1203(that)ms
+1290(the)ms
+1364(letters)ms
+1498(from)ms
+1607(left)ms
+1686(to)ms
+1737(right,)ms
+1856(read)ms
+1955(the)ms
+2028(same)ms
+2143(as)ms
+295 2159 m
+(from)s
+412(right)ms
+527(to)ms
+586(left.)ms
+686(In)ms
+748(the)ms
+830(comparison)ms
+1083(uppercase)ms
+1304(and)ms
+1396(lowercase)ms
+1617(letters)ms
+1759(are)ms
+1841(considered)ms
+2078(to)ms
+2137(be)ms
+295 2099 m
+(equivalent)s
+512(and)ms
+593(all)ms
+652(other)ms
+763(characters)ms
+975(are)ms
+1044(simply)ms
+1189(ignored.)ms
+1364(Hence)ms
+1500(an)ms
+1556(empty)ms
+1690(sentence)ms
+1871(is)ms
+1913(a)ms
+1944(palindrome.)ms
+295 2039 m
+(Other)s
+421(examples)ms
+622(are:)ms
+10 FH
+395 1958 m
+(\(************* #file "TESTDATA.IN" #comment off **************\))s
+395 1916 m
+(Ada)s
+395 1875 m
+(1234567)s
+395 1833 m
+(doremifasolosafimerod)s
+395 1791 m
+(\(******* Testdata #multiple *******\))s
+395 1750 m
+(\(***************** End of TESTDATA.PAS ************************\))s
+12 FB
+295 1657 m
+(The)s
+385(following)ms
+592(sentences)ms
+796(do)ms
+858(not)ms
+935(qualify)ms
+1089(as)ms
+1143(a)ms
+1178(palindrome.)ms
+10 FH
+395 1576 m
+(\(******* Testdata #quick *******\))s
+395 1535 m
+(Mr. Clinton won the elections over Mr. Bush.)s
+395 1493 m
+(This line is not palindromic.)s
+395 1451 m
+(Aabbccdd Aabbccdd Aabbccdd Aabbccdd)s
+395 1410 m
+(Abracadabra)s
+395 1368 m
+(supercalafragilisiticexpielecdosia)s
+12 FB
+295 1276 m
+(The)s
+385(following)ms
+592(are)ms
+665(examples)ms
+867(of)ms
+921(more)ms
+1036(sophisticated)ms
+1310(palindromes.)ms
+10 FH
+395 1195 m
+(\(******* Testdata #quick *******\))s
+395 1153 m
+(Able was I, ere I saw Elba.)s
+395 1111 m
+(A man, a plan, a canal, Panama.)s
+395 1070 m
+(Norma is as selfless as I Am, Ron.)s
+12 FB
+295 977 m
+(Note)s
+404(that)ms
+492(the)ms
+565(famous)ms
+725(Dutch)ms
+860(sentence)ms
+10 FH
+395 896 m
+(\(******* Testdata #quick *******\))s
+395 855 m
+(Koos Eekfeen keek maar door rood kerkraam, maar krek door rood raam)s
+395 813 m
+(keek neef Kees ook.)s
+12 FB
+295 721 m
+(will)s
+385(not)ms
+461(be)ms
+521(recognized)ms
+753(as)ms
+807(a)ms
+842(plindrome)ms
+1060(since)ms
+1175(it)ms
+1215(occupies)ms
+1403(two)ms
+1490(lines.)ms
+395 661 m
+(The)s
+488(program)ms
+11 FH
+674(PALINDROME)ms
+12 FB
+965(reads)ms
+1087(an)ms
+1151(input)ms
+1270(file,)ms
+1365(filters)ms
+1498(the)ms
+1575(lines)ms
+1686(that)ms
+1777(are)ms
+1854(palindromic)ms
+2112(and)ms
+295 601 m
+(writes)s
+429(them)ms
+542(to)ms
+593(an)ms
+653(output)ms
+793(file.)ms
+8 FB
+470 204 m
+(The)s
+530(CLiP)ms
+608(Style)ms
+685(of)ms
+721(Literate)ms
+833(Programming)ms
+1025(\(3.088,)ms
+1128(30-mar-93\))ms
+12 FB
+2075 204 m
+( 1 )s
+50 2 2130 216 li
+50 2 2020 216 li
+endpage
+%%Page: 1 2
+begpage
+12 FAB
+295 3176 m
+(A.2. Communication with the outside world)s
+12 FB
+295 3089 m
+(The)s
+391(program)ms
+578(conforms)ms
+785(to)ms
+842(the)ms
+922(general)ms
+1087(template)ms
+1278(of)ms
+1338(a)ms
+1378(Pascal)ms
+1524(program.)ms
+1724(We)ms
+1812(introduce)ms
+2019(the)ms
+2098(files)ms
+11 FH
+295 3029 m
+(IN_FILE)s
+12 FB
+501(and)ms
+11 FH
+586(OUT_FILE)ms
+12 FB
+820(to)ms
+872(define)ms
+1011(its)ms
+1072(communication)ms
+1396(with)ms
+1499(the)ms
+1573(outside)ms
+1731(world.)ms
+1874(The)ms
+1966(actual)ms
+2098(files)ms
+295 2969 m
+(have)s
+401(to)ms
+453(be)ms
+513(specified)ms
+706(at)ms
+754(run-time.)ms
+951(Thus)ms
+1064(we)ms
+1135(have)ms
+10 FH
+395 2888 m
+(\(***************** #file "PALINDRO.PAS" ***********************\))s
+395 2846 m
+(\(****************************************************************\))s
+395 2805 m
+(\(* Program: Palindrome filter program. *\))s
+395 2763 m
+(\(* Purpose: To filter the palindromic lines from a given input *\))s
+395 2721 m
+(\(* file to a specified output file. *\))s
+395 2680 m
+(\(****************************************************************\))s
+395 2638 m
+(PROGRAM PALINDROME \(INPUT, OUTPUT, IN_FILE, OUT_FILE\);)s
+395 2555 m
+(\(******* Palindrome constants #multiple #comment off *******\))s
+395 2513 m
+(\(******* Palindrome types #multiple #comment off *******\))s
+395 2471 m
+(VAR)s
+395 2430 m
+( IN_FILE, OUT_FILE: TEXT;)s
+395 2388 m
+(\(******* Palindrome variables #multiple #comment off *******\))s
+395 2305 m
+(BEGIN)s
+495 2263 m
+(ASSIGN \(IN_FILE, 'TESTDATA.IN'\); RESET \(IN_FILE\);)s
+395 2221 m
+( ASSIGN \(OUT_FILE, 'TESTDATA.OUT'\); REWRITE \(OUT_FILE\);)s
+395 2138 m
+( \(***************** Palindrome \(body\) **********************\))s
+395 2096 m
+( \(** Copy the lines of the IN_FILE that are palindromic to **\))s
+395 2055 m
+( \(** the OUT_FILE. **\))s
+395 2013 m
+( \(************************************************************\))s
+395 1930 m
+(END \(*PALINDROME*\).)s
+395 1888 m
+(\(******************* End of PALINDROME.PAS ********************\))s
+12 FB
+295 1796 m
+(To)s
+363(prepare)ms
+525(the)ms
+599(module)ms
+761(for)ms
+832(future)ms
+964(declarations)ms
+1218(of)ms
+1272(constants)ms
+1471(and)ms
+1555(types)ms
+1673(we)ms
+1744(have)ms
+10 FH
+395 1715 m
+(\(******* Palindrome constants #leader #quick *******\))s
+395 1673 m
+(CONST)s
+395 1631 m
+(\(******* Palindrome types #leader #quick *******\))s
+395 1590 m
+(TYPE)s
+12 FAB
+295 1477 m
+(A.3. Processing of the files)s
+12 FB
+295 1391 m
+(The)s
+384(program)ms
+565(processes)ms
+11 FH
+768(IN_FILE)ms
+12 FB
+972(line)ms
+1059(by)ms
+1120(line.)ms
+1219(The)ms
+1309(idea)ms
+1403(is)ms
+1448(to)ms
+1499(buffer)ms
+1632(an)ms
+1691(exact)ms
+1808(copy)ms
+1917(of)ms
+1970(the)ms
+2043(current)ms
+295 1331 m
+(line)s
+382(in)ms
+11 FH
+434(IN_LINE)ms
+12 FB
+(,)s
+652(while)ms
+776(at)ms
+824(the)ms
+898(same)ms
+1014(time)ms
+1116(its)ms
+1176(letters)ms
+1311(are)ms
+1384(buffered)ms
+1567(in)ms
+11 FH
+1618(LETTERS)ms
+12 FB
+(.)s
+1836(So)ms
+11 FH
+1902(LETTERS)ms
+12 FB
+2107(will)ms
+295 1271 m
+(be)s
+353(empty)ms
+489(if)ms
+531(the)ms
+603(line)ms
+689(holds)ms
+808(no)ms
+869(letters)ms
+1003(at)ms
+1050(all,)ms
+1124(in)ms
+1174(which)ms
+1307(case)ms
+1404(the)ms
+1476(line)ms
+1562(is)ms
+1607(considered)ms
+1835(to)ms
+1885(be)ms
+1943(palindromic)ms
+295 1211 m
+(by)s
+357(definition.)ms
+395 1151 m
+(We)s
+475(choose)ms
+624(the)ms
+696(buffers)ms
+11 FH
+848(IN_LINE)ms
+12 FB
+1051(and)ms
+11 FH
+1134(LETTERS)ms
+12 FB
+1337(to)ms
+1387(be)ms
+1445(of)ms
+1497(the)ms
+1569(same)ms
+1682(type,)ms
+11 FH
+1792(TEXT_LINE)ms
+12 FB
+(,)s
+2062(which)ms
+295 1091 m
+(we)s
+365(will)ms
+456(not)ms
+532(specify)ms
+689(in)ms
+740(detail)ms
+864(right)ms
+971(now.)ms
+1082(For)ms
+1164(this)ms
+1249(purpose)ms
+1419(we)ms
+1490(introduce)ms
+1692(a)ms
+1726(type)ms
+11 FH
+1825(ABSTRACT)ms
+12 FB
+(.)s
+10 FH
+395 1010 m
+(\(******* Palindrome types #quick *******\))s
+395 968 m
+( ABSTRACT = \(DEFINED, UNDEFINED\);)s
+11 FH
+295 876 m
+(TEXT_LINE)s
+12 FB
+555(will)ms
+646(temporarily)ms
+892(be)ms
+952(declared)ms
+11 FH
+1134(ABSTRACT)ms
+12 FB
+1367(and)ms
+1453(its)ms
+1513(details)ms
+1656(will)ms
+1747(be)ms
+1807(defined)ms
+1970(later.)ms
+2084(Thus)ms
+295 816 m
+(the)s
+368(declaration)ms
+603(of)ms
+11 FH
+657(TEXT_LINE)ms
+10 FH
+395 735 m
+(\(******* Palindrome types *******\))s
+395 693 m
+(\(******* Declaration of TEXT_LINE *******\))s
+395 651 m
+(\(***************** End of Palindrome types ********************\))s
+12 FB
+295 559 m
+(is)s
+340(temporarily)ms
+586(satisfied)ms
+765(with)ms
+867(the)ms
+940(type)ms
+11 FH
+1039(ABSTRACT)ms
+12 FB
+(.)s
+10 FH
+395 478 m
+(\(******* Declaration of TEXT_LINE #quick #default *******\))s
+395 436 m
+( TEXT_LINE = ABSTRACT;)s
+12 FB
+295 344 m
+(The)s
+385(declaration)ms
+619(for)ms
+690(the)ms
+764(variables)ms
+11 FH
+957(IN_LINE)ms
+12 FB
+1162(and)ms
+11 FH
+1247(LETTERS)ms
+12 FB
+1452(becomes)ms
+8 FB
+470 204 m
+(The)s
+530(CLiP)ms
+608(Style)ms
+685(of)ms
+721(Literate)ms
+833(Programming)ms
+1025(\(3.088,)ms
+1128(30-mar-93\))ms
+12 FB
+2075 204 m
+( 2 )s
+50 2 2130 216 li
+50 2 2020 216 li
+endpage
+%%Page: 2 3
+begpage
+10 FH
+395 3188 m
+(\(******* Palindrome variables #quick *******\))s
+395 3146 m
+( IN_LINE,)s
+395 3105 m
+( LETTERS: TEXT_LINE;)s
+12 FB
+295 3012 m
+(We)s
+379(have)ms
+488(to)ms
+542(test)ms
+11 FH
+626(LETTERS)ms
+12 FB
+834(in)ms
+887(order)ms
+1008(to)ms
+1062(decide)ms
+1207(whether)ms
+1383(or)ms
+1439(not)ms
+11 FH
+1518(IN_LINE)ms
+12 FB
+1726(contains)ms
+1907(a)ms
+1944(palindrome.)ms
+295 2952 m
+(The)s
+385(result)ms
+508(of)ms
+563(this)ms
+647(test)ms
+729(is)ms
+775(flagged)ms
+938(by)ms
+11 FH
+1000(IS_PALINDROME)ms
+12 FB
+(,)s
+1383(for)ms
+1453(which)ms
+1588(we)ms
+1659(introduce)ms
+1860(the)ms
+1934(declaration)ms
+10 FH
+395 2871 m
+(\(******* Palindrome variables #quick *******\))s
+395 2830 m
+( IS_PALINDROME: BOOLEAN;)s
+12 FB
+295 2737 m
+(Now)s
+404(the)ms
+478(body)ms
+590(of)ms
+644(the)ms
+718(Palindrome)ms
+961(filter)ms
+1071(may)ms
+1169(be)ms
+1229(expanded)ms
+1433(as)ms
+10 FH
+395 2656 m
+( \(***************** Palindrome \(body\) **********************\))s
+395 2615 m
+( \(** Copy the lines of the IN_FILE that are palindromic to **\))s
+395 2573 m
+( \(** the OUT_FILE. **\))s
+395 2531 m
+( WHILE NOT EOF \(IN_FILE\) DO)s
+395 2490 m
+( BEGIN)s
+395 2448 m
+( \(***************** Palindrome \(1\) *********************\))s
+395 2406 m
+( \(** Read a line from IN_FILE into IN_LINE. The letters **\))s
+395 2365 m
+( \(** of this line are copied to LETTERS. **\))s
+395 2323 m
+( \(********************************************************\))s
+395 2240 m
+( READLN \(IN_FILE\);)s
+395 2156 m
+( \(***************** Palindrome \(2\) *********************\))s
+395 2115 m
+( \(** Test palindromicity of LETTERS. Set IS_PALINDROME **\))s
+395 2073 m
+( \(** to reflect the result of the test. **\))s
+395 2031 m
+( \(********************************************************\))s
+395 1906 m
+( IF IS_PALINDROME THEN)s
+395 1865 m
+( BEGIN)s
+395 1823 m
+( \(***************** Palindrome \(3\) *****************\))s
+395 1781 m
+( \(** Write IN_LINE to OUT_FILE. **\))s
+395 1740 m
+( \(****************************************************\))s
+395 1656 m
+( WRITELN \(OUT_FILE\);)s
+395 1615 m
+( END \(*IF*\);)s
+395 1573 m
+( END \(*WHILE*\);)s
+395 1531 m
+( \(************* End of Palindrome \(body\) *******************\))s
+12 FAB
+295 1419 m
+(A.4. Choosing the structure of )s
+11 FH
+(IN_LINE)s
+12 FAB
+( and )s
+11 FH
+(LETTERS)s
+12 FB
+295 1332 m
+(Before)s
+442(we)ms
+512(can)ms
+593(proceed)ms
+763(we)ms
+833(need)ms
+939(to)ms
+989(establish)ms
+1176(a)ms
+1209(structure)ms
+1396(for)ms
+1466(the)ms
+1538(objects)ms
+11 FH
+1692(IN_LINE)ms
+12 FB
+1896(and)ms
+11 FH
+1979(LETTERS)ms
+12 FB
+(.)s
+295 1272 m
+(Thus)s
+412(we)ms
+487(define)ms
+11 FH
+629(TEXT_LINE)ms
+12 FB
+894(as)ms
+953(a)ms
+993(structure)ms
+1185(with)ms
+1291(two)ms
+1383(components.)ms
+1654(The)ms
+1749(first)ms
+1847(component)ms
+2087(is)ms
+2137(an)ms
+295 1212 m
+(array,)s
+11 FH
+424(CHARS)ms
+12 FB
+(,)s
+589(which)ms
+726(contains)ms
+907(the)ms
+983(characters)ms
+1200(to)ms
+1254(be)ms
+1315(buffered.)ms
+1512(The)ms
+1604(second)ms
+1758(component,)ms
+11 FH
+2007(LENGTH)ms
+12 FB
+(,)s
+295 1152 m
+(indicates)s
+484(which)ms
+619(part)ms
+709(of)ms
+762(the)ms
+836(array)ms
+950(is)ms
+996(actually)ms
+1166(occupied.)ms
+1371(The)ms
+1461(maximum)ms
+1676(number)ms
+1841(of)ms
+1895(characters)ms
+2109(that)ms
+295 1092 m
+(can)s
+375(be)ms
+434(buffered)ms
+614(by)ms
+676(the)ms
+748(structure)ms
+934(is)ms
+979(determined)ms
+1215(by)ms
+1277(the)ms
+1349(length,)ms
+11 FH
+1498(MAX_L)ms
+12 FB
+(,)s
+1659(of)ms
+1712(the)ms
+1784(array.)ms
+11 FH
+1911(MAX_L)ms
+12 FB
+2060(serves)ms
+295 1032 m
+(as)s
+349(an)ms
+408(implementation)ms
+735(parameter.)ms
+10 FH
+395 951 m
+(\(******* Palindrome constants #quick *******\))s
+395 910 m
+( MAX_L = 132;)s
+395 826 m
+(\(******* Declaration of TEXT_LINE #quick *******\))s
+395 785 m
+( TEXT_LINE = RECORD)s
+395 743 m
+( CHARS: ARRAY[1..MAX_L] OF CHAR;)s
+395 701 m
+( LENGTH: 0..MAX_L;)s
+395 660 m
+( END \(*RECORD*\);)s
+12 FAB
+295 547 m
+(A.5. Reading a line)s
+12 FB
+295 461 m
+(For)s
+383(efficiency)ms
+601(reasons)ms
+769(we)ms
+846(fill)ms
+11 FH
+923(IN_LINE)ms
+12 FB
+1134(and)ms
+11 FH
+1225(LETTERS)ms
+12 FB
+1436(simultaneously.)ms
+1770(Therefore)ms
+1986(we)ms
+2062(buffer)ms
+295 401 m
+(every)s
+418(character)ms
+614(that)ms
+701(is)ms
+747(read)ms
+846(from)ms
+11 FH
+955(IN_FILE)ms
+12 FB
+1160(in)ms
+1212(the)ms
+1285(variable)ms
+11 FH
+1459(IN_CHAR)ms
+12 FB
+(.)s
+8 FB
+470 204 m
+(The)s
+530(CLiP)ms
+608(Style)ms
+685(of)ms
+721(Literate)ms
+833(Programming)ms
+1025(\(3.088,)ms
+1128(30-mar-93\))ms
+12 FB
+2075 204 m
+( 3 )s
+50 2 2130 216 li
+50 2 2020 216 li
+endpage
+%%Page: 3 4
+begpage
+10 FH
+395 3188 m
+(\(******* Palindrome variables #quick *******\))s
+395 3146 m
+( IN_CHAR: CHAR;)s
+12 FB
+295 3054 m
+(Only)s
+404(when)ms
+11 FH
+522(IN_CHAR)ms
+12 FB
+724(turns)ms
+834(out)ms
+907(to)ms
+956(be)ms
+1013(a)ms
+1045(letter)ms
+1157(it)ms
+1194(is)ms
+1237(copied)ms
+1380(to)ms
+11 FH
+1429(LETTERS)ms
+12 FB
+(.)s
+1643(Since)ms
+1764(this)ms
+1846(process)ms
+2006(is)ms
+2049(crucial)ms
+295 2994 m
+(for)s
+365(the)ms
+439(overall)ms
+590(operation,)ms
+804(we)ms
+875(make)ms
+996(provisions)ms
+1217(for)ms
+1287(some)ms
+1405(debugging)ms
+1629(code)ms
+1736(here.)ms
+10 FH
+395 2913 m
+( \(***************** Palindrome \(1\) *********************\))s
+395 2871 m
+( \(** Read a line from IN_FILE into IN_LINE. The letters **\))s
+395 2830 m
+( \(** of this line are copied to LETTERS. **\))s
+395 2788 m
+( IN_LINE.LENGTH := 0;)s
+395 2746 m
+( LETTERS.LENGTH := 0;)s
+395 2705 m
+( WITH IN_LINE DO)s
+395 2663 m
+( WHILE NOT EOLN \(IN_FILE\) DO)s
+395 2621 m
+( BEGIN)s
+395 2580 m
+( READ \(IN_FILE, IN_CHAR\);)s
+395 2538 m
+( LENGTH := LENGTH + 1;)s
+395 2496 m
+( CHARS[LENGTH] := IN_CHAR;)s
+395 2455 m
+( IF IN_CHAR IN ['A'..'Z', 'a'..'z'] THEN)s
+395 2413 m
+( WITH LETTERS DO)s
+395 2371 m
+( BEGIN)s
+395 2330 m
+( LENGTH := LENGTH + 1;)s
+395 2288 m
+( CHARS[LENGTH] := IN_CHAR;)s
+395 2246 m
+( END \(*WITH/IF*\);)s
+395 2205 m
+( END \(*WHILE/WITH*\);)s
+395 2121 m
+( \(********************* Palindrome \(test\) **************\))s
+395 2080 m
+( \(** Check contents of IN_LINE and LETTERS. #optional **\))s
+395 2038 m
+( \(********************************************************\))s
+395 1955 m
+( \(***************** End of Palindrome \(1\) **************\))s
+12 FAB
+295 1842 m
+(A.6. Testing for palindromicity)s
+12 FB
+295 1756 m
+(We)s
+387(test)ms
+479(the)ms
+563(palindromicity)ms
+881(of)ms
+11 FH
+945(LETTERS)ms
+12 FB
+1161(in)ms
+1223(two)ms
+1321(steps.)ms
+1456(First)ms
+1571(we)ms
+1652(transform)ms
+1869(the)ms
+1953(contents)ms
+2143(of)ms
+11 FH
+295 1696 m
+(LETTERS)s
+12 FB
+503(to)ms
+558(uppercase)ms
+774(and)ms
+863(then)ms
+965(we)ms
+1039(compare)ms
+1227(the)ms
+1305(characters)ms
+1523(of)ms
+11 FH
+1581(LETTERS)ms
+12 FB
+1790(pairwise.)ms
+1988(The)ms
+2082(com-)ms
+295 1636 m
+(parison)s
+455(is)ms
+502(done)ms
+612(starting)ms
+775(with)ms
+878(the)ms
+952(most)ms
+1063(outside)ms
+1220(characters)ms
+1436(and)ms
+1522(progressing)ms
+1768(inward.)ms
+1933(The)ms
+2024(string)ms
+2151(is)ms
+295 1576 m
+(assumed)s
+480(a)ms
+516(palindrome)ms
+757(until)ms
+862(the)ms
+937(opposite)ms
+1120(is)ms
+1167(proven)ms
+1319(through)ms
+1488(a)ms
+1524(pair)ms
+1615(of)ms
+1670(different)ms
+1856(characters.)ms
+2085(With)ms
+295 1516 m
+(the)s
+368(local)ms
+478(counter)ms
+10 FH
+395 1435 m
+(\(******* Palindrome variables #quick *******\))s
+395 1393 m
+( I: INTEGER;)s
+12 FB
+295 1301 m
+(we)s
+365(keep)ms
+472(track)ms
+585(of)ms
+639(the)ms
+712(comparing)ms
+939(process.)ms
+1114(Now)ms
+11 FH
+1223(Palindrome \(2\))ms
+12 FB
+1621(can)ms
+1703(be)ms
+1763(expanded)ms
+1967(as)ms
+10 FH
+395 1220 m
+( \(***************** Palindrome \(2\) *********************\))s
+395 1178 m
+( \(** Test palindromicity of LETTERS. Set IS_PALINDROME **\))s
+395 1136 m
+( \(** to reflect the result of the test. **\))s
+395 1095 m
+( WITH LETTERS DO)s
+395 1053 m
+( BEGIN)s
+395 1011 m
+( \(* Transform lowercase to uppercase. *\))s
+395 970 m
+( FOR I := 1 TO LENGTH DO)s
+395 928 m
+( IF CHARS[I] IN ['a'..'z'])s
+395 886 m
+( THEN CHARS[I] :=)s
+395 845 m
+( CHR\(ORD\(CHARS[I]\) - ORD\('a'\) + ORD\('A'\)\);)s
+395 761 m
+( \(* Perform the palindromicity test. *\))s
+395 720 m
+( IS_PALINDROME := TRUE;)s
+395 678 m
+( I := 1;)s
+395 636 m
+( WHILE IS_PALINDROME AND \(I <= LENGTH DIV 2\) DO)s
+395 595 m
+( IF CHARS[I] = CHARS[LENGTH-I+1] THEN)s
+395 553 m
+( I := I + 1)s
+395 511 m
+( ELSE)s
+395 470 m
+( IS_PALINDROME := FALSE;)s
+395 428 m
+( END \(*WITH*\);)s
+395 386 m
+( \(***************** End of Palindrome \(2\) **************\))s
+8 FB
+470 204 m
+(The)s
+530(CLiP)ms
+608(Style)ms
+685(of)ms
+721(Literate)ms
+833(Programming)ms
+1025(\(3.088,)ms
+1128(30-mar-93\))ms
+12 FB
+2075 204 m
+( 4 )s
+50 2 2130 216 li
+50 2 2020 216 li
+endpage
+%%Page: 4 5
+begpage
+12 FAB
+295 3176 m
+(A.7. Writing the palindrome)s
+12 FB
+295 3089 m
+(The)s
+385(only)ms
+486(remaining)ms
+701(action)ms
+836(is)ms
+882(to)ms
+933(write)ms
+1049(the)ms
+1122(contents)ms
+1301(of)ms
+11 FH
+1356(IN_LINE)ms
+12 FB
+(.)s
+1573(Again)ms
+1708(we)ms
+1779(need)ms
+1885(a)ms
+1920(local)ms
+2030(counter)ms
+10 FH
+395 3008 m
+(\(******* Palindrome variables #quick *******\))s
+395 2966 m
+( J: INTEGER;)s
+12 FB
+295 2874 m
+(The)s
+385(writing)ms
+542(proceeds)ms
+732(straight)ms
+894(forward.)ms
+10 FH
+395 2793 m
+( \(***************** Palindrome \(3\) *****************\))s
+395 2751 m
+( \(** Write IN_LINE to OUT_FILE. **\))s
+395 2710 m
+( WITH IN_LINE DO)s
+395 2668 m
+( BEGIN)s
+395 2626 m
+( FOR J := 1 TO LENGTH DO)s
+395 2585 m
+( WRITE \(OUT_FILE, CHARS[J]\);)s
+395 2543 m
+( END \(*WITH*\);)s
+395 2501 m
+( \(************* End of Palindrome \(3\) **************\))s
+8 FB
+470 204 m
+(The)s
+530(CLiP)ms
+608(Style)ms
+685(of)ms
+721(Literate)ms
+833(Programming)ms
+1025(\(3.088,)ms
+1128(30-mar-93\))ms
+12 FB
+2075 204 m
+( 5 )s
+50 2 2130 216 li
+50 2 2020 216 li
+endpage
+%%Trailer
+enddocument
+%%Pages: 5
+%%DocumentFonts:
+%%+ Helvetica-Bold
+%%+ Times-Roman
+%%+ Courier
+%%EOF
+ \ No newline at end of file
diff --git a/web/clip/ms_dos/ex01_b.asc b/web/clip/ms_dos/ex01_b.asc
new file mode 100644
index 0000000000..af96cdf4aa
--- /dev/null
+++ b/web/clip/ms_dos/ex01_b.asc
@@ -0,0 +1,42 @@
+
+
+
+ Example 01: Testcode
+
+
+
+
+
+This section contains some test code that can be inserted to debug the
+palindrome filter program.
+
+
+B.1. Print the contents of IN_LINE and LETTERS
+
+Correct reading of the input is crucial. For debugging purposes we may want to
+inspect the contents of *IN_LINE* and *LETTERS*. We need a local counter
+
+ (******* Palindrome variables #quick *******)
+ T : INTEGER;
+
+We want the debugging information te be clearly flagged as such.
+
+ (***************** Palindrome (test) ******************)
+ (** Check contents of IN_LINE and LETTERS. **)
+ WRITELN;
+ WRITELN ('============ DEBUGGING INFORMATION ===============');
+ WRITELN ('Contents of buffer IN_LINE: ');
+ WRITE ('>>>>');
+ WITH IN_LINE DO
+ FOR T := 1 TO LENGTH DO WRITE (OUTPUT, CHARS[T]);
+ WRITE ('<<<<');
+ WRITELN;
+ WRITELN ('Contents of buffer LETTERS: ');
+ WRITE ('>>>>');
+ WITH LETTERS DO
+ FOR T := 1 TO LENGTH DO WRITE (OUTPUT, CHARS[T]);
+ WRITE ('<<<<');
+ WRITELN;
+ WRITELN ('========== END OF DEBUGGING INFORMATION ==========');
+ WRITELN;
+ (************* End of Palindrome (test) ***************)
diff --git a/web/clip/ms_dos/ex01_b.ini b/web/clip/ms_dos/ex01_b.ini
new file mode 100644
index 0000000000..071e1a38f3
--- /dev/null
+++ b/web/clip/ms_dos/ex01_b.ini
@@ -0,0 +1,27 @@
+This file contains data that is needed to run CLiP
+And is generated by CLiP_MENU
+Modifying this file at own risk.
+Using CLiP_MENU is definitely recommended.
+
+INTERACTIVE_MODE Mode (INTERACTIVE/DEBUG/HELPFUL/AUTO)
+YES Interactive fault correction (YES/NO)
+BOTH Error message destination (TERMINAL/REPORTFILE/BOTH/NONE)
+(* Left comment string
+*) Right comment string
+* Command character
+ENDOF END string
+# Option marker
+EXTRACTED The specified modules are (OMITTED/EXTRACTED)
+------------ REPORT FILE -----------
+CLIP.RPT
+------------ INPUT FILES -----------
+.\EX01_A.ASC
+.\EX01_B.ASC
+------------ MODULES ---------------
+.\
+PALINDRO.PAS
+.\
+TESTDATA.IN
+------------ MODULE DIRECTORY ------
+.\
+------------ END OF INI FILE -------
diff --git a/web/clip/ms_dos/ex01_b.pas b/web/clip/ms_dos/ex01_b.pas
new file mode 100644
index 0000000000..329560b847
--- /dev/null
+++ b/web/clip/ms_dos/ex01_b.pas
@@ -0,0 +1,119 @@
+ (***************** #file "PALINDRO.PAS" ***********************)
+ (****************************************************************)
+ (* Program: Palindrome filter program. *)
+ (* Purpose: To filter the palindromic lines from a given input *)
+ (* file to a specified output file. *)
+ (****************************************************************)
+ PROGRAM PALINDROME (INPUT, OUTPUT, IN_FILE, OUT_FILE);
+
+ CONST
+ MAX_L = 132;
+ TYPE
+ ABSTRACT = (DEFINED, UNDEFINED);
+ TEXT_LINE = RECORD
+ CHARS: ARRAY[1..MAX_L] OF CHAR;
+ LENGTH: 0..MAX_L;
+ END (*RECORD*);
+ VAR
+ IN_FILE, OUT_FILE: TEXT;
+ IN_LINE,
+ LETTERS: TEXT_LINE;
+ IS_PALINDROME: BOOLEAN;
+ IN_CHAR: CHAR;
+ I: INTEGER;
+ J: INTEGER;
+ T : INTEGER;
+
+ BEGIN
+ ASSIGN (IN_FILE, 'TESTDATA.IN'); RESET (IN_FILE);
+ ASSIGN (OUT_FILE, 'TESTDATA.OUT'); REWRITE (OUT_FILE);
+
+ (***************** Palindrome (body) **********************)
+ (** Copy the lines of the IN_FILE that are palindromic to **)
+ (** the OUT_FILE. **)
+ WHILE NOT EOF (IN_FILE) DO
+ BEGIN
+ (***************** Palindrome (1) *********************)
+ (** Read a line from IN_FILE into IN_LINE. The letters **)
+ (** of this line are copied to LETTERS. **)
+ IN_LINE.LENGTH := 0;
+ LETTERS.LENGTH := 0;
+ WITH IN_LINE DO
+ WHILE NOT EOLN (IN_FILE) DO
+ BEGIN
+ READ (IN_FILE, IN_CHAR);
+ LENGTH := LENGTH + 1;
+ CHARS[LENGTH] := IN_CHAR;
+ IF IN_CHAR IN ['A'..'Z', 'a'..'z'] THEN
+ WITH LETTERS DO
+ BEGIN
+ LENGTH := LENGTH + 1;
+ CHARS[LENGTH] := IN_CHAR;
+ END (*WITH/IF*);
+ END (*WHILE/WITH*);
+
+ (***************** Palindrome (test) ******************)
+ (** Check contents of IN_LINE and LETTERS. **)
+ WRITELN;
+ WRITELN ('============ DEBUGGING INFORMATION ===============');
+ WRITELN ('Contents of buffer IN_LINE: ');
+ WRITE ('>>>>');
+ WITH IN_LINE DO
+ FOR T := 1 TO LENGTH DO WRITE (OUTPUT, CHARS[T]);
+ WRITE ('<<<<');
+ WRITELN;
+ WRITELN ('Contents of buffer LETTERS: ');
+ WRITE ('>>>>');
+ WITH LETTERS DO
+ FOR T := 1 TO LENGTH DO WRITE (OUTPUT, CHARS[T]);
+ WRITE ('<<<<');
+ WRITELN;
+ WRITELN ('========== END OF DEBUGGING INFORMATION ==========');
+ WRITELN;
+ (************* End of Palindrome (test) ***************)
+
+ (***************** End of Palindrome (1) **************)
+
+ READLN (IN_FILE);
+
+ (***************** Palindrome (2) *********************)
+ (** Test palindromicity of LETTERS. Set IS_PALINDROME **)
+ (** to reflect the result of the test. **)
+ WITH LETTERS DO
+ BEGIN
+ (* Transform lowercase to uppercase. *)
+ FOR I := 1 TO LENGTH DO
+ IF CHARS[I] IN ['a'..'z']
+ THEN CHARS[I] :=
+ CHR(ORD(CHARS[I]) - ORD('a') + ORD('A'));
+
+ (* Perform the palindromicity test. *)
+ IS_PALINDROME := TRUE;
+ I := 1;
+ WHILE IS_PALINDROME AND (I <= LENGTH DIV 2) DO
+ IF CHARS[I] = CHARS[LENGTH-I+1] THEN
+ I := I + 1
+ ELSE
+ IS_PALINDROME := FALSE;
+ END (*WITH*);
+ (***************** End of Palindrome (2) **************)
+
+
+ IF IS_PALINDROME THEN
+ BEGIN
+ (***************** Palindrome (3) *****************)
+ (** Write IN_LINE to OUT_FILE. **)
+ WITH IN_LINE DO
+ BEGIN
+ FOR J := 1 TO LENGTH DO
+ WRITE (OUT_FILE, CHARS[J]);
+ END (*WITH*);
+ (************* End of Palindrome (3) **************)
+
+ WRITELN (OUT_FILE);
+ END (*IF*);
+ END (*WHILE*);
+ (************* End of Palindrome (body) *******************)
+
+ END (*PALINDROME*).
+ (******************* End of PALINDROME.PAS ********************)
diff --git a/web/clip/ms_dos/ex01_b.ps b/web/clip/ms_dos/ex01_b.ps
new file mode 100644
index 0000000000..5728152156
--- /dev/null
+++ b/web/clip/ms_dos/ex01_b.ps
@@ -0,0 +1,370 @@
+%!PS-Adobe-2.0
+%%DocumentFonts: (atend)
+%%Title: F:\\LPT\\MAN\\EX01_B.DOC
+%%Creator: Lotus Manuscript
+%%For: EWvA, MRK
+%%CreationDate: March 22, 1993
+%%Pages: (atend)
+%%BoundingBox: 0 0 595 841
+%%EndComments
+% PostScript Prologue (initialization) for Manuscript
+% Copyright (c) 1985,1986,1987,1988 Lotus Development Corporation
+% There is no user servicable code in this file.
+
+% set timeouts to infinite
+statusdict begin
+0 setjobtimeout
+/manualfeedtimeout 3600 def
+/waittimeout 0 def
+end
+
+% correct bug correction in rev 41.0
+/idiv{div cvi}bind def
+
+% define User Dictionary
+/msdict 300 dict def msdict begin
+/bd{bind def}bind def
+
+% Define commonly used things
+/delay{usertime 5000 add{dup usertime lt{pop exit}if}loop}bd
+/mfeed{statusdict begin /manualfeed true def end}bd
+/afeed{statusdict begin /manualfeed false def end}bd
+/bfeed{ afeed statusdict begin /setpapertray where
+ {pop setpapertray}{pop} ifelse end}bd
+
+/dpi{0.24 dup scale}bd
+
+% These two are called for each page
+/inpage false def
+/begpage{save dpi /inpage true def}bd
+/endpage{inpage {restore showpage}if }bd
+
+% for possible banner
+/fileinfo {pop pop pop}bd
+/enddocument {end} bd
+
+% these are also used by eqn & gmf
+/ld{load def}bd
+/x/exch ld
+/cu{300 mul 72 div}bd
+/m/moveto ld
+/t/translate ld
+/rm/rmoveto ld
+/cp/currentpoint ld
+/st/stroke ld
+/ln/lineto ld
+/rlt/rlineto ld
+/slw/setlinewidth ld
+
+/ff/findfont ld
+/scf/scalefont ld
+/sf/setfont ld
+/fs{x /pt x def ff pt cu scf sf}bd
+
+% linedraw
+/li{4 2 roll setlinewidth 3 1 roll moveto 0.0 rlineto st}bd
+
+% outline factor
+/olwid 40.0 def
+% stroke width for outline
+/uoslw {pt cu x div slw}bd
+% relative horizontal move
+/xm{x currentpoint pop sub 0.0 rmoveto}bd
+
+% The basic show
+/s/show ld
+% move horizontal and show
+/ms{xm s}bd
+
+% variations
+% outline show - first printer attribute
+/ppss{dup cp 3 -1 roll false charpath st
+x 3 -1 roll stringwidth pop add x moveto}bd
+/pss{olwid uoslw { ( ) dup 0 4 -1 roll put ppss}forall}bd
+/ps{pss}bd
+/mps{xm ps}bd
+
+% graybox show - second printer attribute
+/gb{cp 3 -1 roll pt cu dup 4 div neg 0 x rm dup 0 x rlt x 0 rlt
+neg 0 x rlt closepath currentgray .9 setgray fill setgray m}bd
+/usi{dup stringwidth pop gb}bd
+/us{usi s}bd
+/xum{x cp pop sub dup gb 0 rmoveto}bd
+
+% combinations of PD1 and PD2
+/ups{usi pss}bd
+/mups{xm ups}bd
+/mus{xm us}bd
+
+% define a new encoding vector (code page 850 based)
+/PC 256 array def
+StandardEncoding PC copy pop
+
+/dotaccent/bullet
+/quotesingle/quotedblleft/quotedblright/quotesinglbase
+/quotedblbase/guilsinglleft/guilsinglright/.notdef
+/ellipsis/perthousand/.notdef/.notdef/paragraph/section/dagger/daggerdbl
+/OE/oe/fi/fl/endash/emdash/fraction/Ydieresis
+PC 6 26 getinterval astore pop
+
+/Ccedilla/udieresis/eacute/acircumflex/adieresis/agrave/aring/ccedilla
+/ecircumflex/edieresis/egrave/idieresis/icircumflex/igrave/Adieresis/Aring
+/Eacute/ae/AE/ocircumflex/odieresis/ograve/ucircumflex/ugrave
+/ydieresis/Odieresis/Udieresis/oslash/sterling/Oslash/.notdef/florin
+/aacute/iacute/oacute/uacute/ntilde/Ntilde/ordfeminine/ordmasculine
+/questiondown/.notdef/.notdef/onehalf/onequarter/exclamdown/guillemotleft/guillemotright
+/.notdef/.notdef/.notdef/.notdef/.notdef/Aacute/Acircumflex/Agrave
+/.notdef/.notdef/.notdef/.notdef/.notdef/cent/yen/.notdef
+/.notdef/grave/.notdef/circumflex/tilde/.notdef/atilde/Atilde
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/currency
+/eth/Eth/Ecircumflex/Edieresis/Egrave/dotlessi/Iacute/Icircumflex
+/Idieresis/.notdef/.notdef/.notdef/.notdef/brokenbar/Igrave/.notdef
+/Oacute/germandbls/Ocircumflex/Ograve/otilde/Otilde/.notdef/thorn
+/Thorn/Uacute/Ucircumflex/Ugrave/yacute/Yacute/.notdef/acute
+/.notdef/.notdef/.notdef/threequarters/paragraph/section/.notdef/cedilla
+/ring/dieresis/periodcentered/onesuperior/threesuperior/twosuperior/.notdef/.notdef
+
+PC 128 128 getinterval astore pop
+
+% duplicate fonts with a new encoding vector
+/recd 5 dict def
+/pcft
+{recd begin
+/ncs PC def /nfn x def
+/bfn x def /bfd bfn findfont def
+/nf bfd maxlength dict def
+bfd{x dup dup /FID ne x /Encoding ne and
+{x nf 3 1 roll put}{pop pop}ifelse
+}forall
+nf/FontName nfn put
+nf/Encoding ncs put
+nfn nf definefont pop
+end}bd
+
+/fs{x /pt x def ff pt cu scf sf}bd
+
+% used by eqn
+/Times-Roman/TR pcft /Times-Bold/TRB pcft
+/Times-Italic/TRI pcft /Times-BoldItalic/TRBI pcft
+/Helvetica/HV pcft /Helvetica-Bold/HVB pcft
+/Helvetica-Oblique/HVO pcft /Helvetica-BoldOblique/HVBO pcft
+/Courier/CR pcft /Courier-Bold/CRB pcft
+/Sym{/Symbol fs}bd
+
+% Bit map image data decompression code
+/xx 0 def /yy 0 def
+/xbytes 0 def
+/lbuf 1200 string def /obuf 600 string def
+/bval <FFFEFCF8F0E0C080000103070F1F3F7F> def
+/blacks 96 string def /whites 96 string def
+0 1 95 {whites x 255 put} for
+
+/dispatch [
+{
+dup 47 le {32 sub 4 bitshift x pop 1}{
+dup 63 le {x pop 48 sub bval x get
+3 copy put x 1 add x 0} {
+dup 79 le {62 sub} {
+80 sub { 3 copy put x 1 add x } repeat 0
+}ifelse }ifelse }ifelse
+}bind
+{
+32 sub add
+3 copy put
+x 1 add x 0
+} bind
+{
+32 sub x pop add 255 0
+}bind
+{
+32 sub x pop
+3 copy getinterval
+whites 0 3 index getinterval
+x copy pop add 255 0
+}bind
+{
+32 sub x pop
+3 copy getinterval
+blacks 0 3 index getinterval
+x copy pop add 0 0
+}bind
+]def
+
+% read a raster line and unpack
+/readx{
+obuf 0 255 0
+currentfile lbuf readline pop
+{x dispatch x get exec} forall
+pop pop pop 0 xbytes getinterval}bd
+
+/mspic{
+/yy x def/xx x def
+/xbytes xx 8 idiv def
+xx yy 1 [xx 0 0 0 yy sub 0 yy]{readx}image}bd
+
+
+
+/Helvetica/fA pcft/FA{/fA fs}bd
+/Helvetica-Oblique/fAI pcft/FAI{/fAI fs}bd
+/Helvetica-Bold/fAB pcft/FAB{/fAB fs}bd
+/Helvetica-BoldOblique/fAIB pcft/FAIB{/fAIB fs}bd
+/Times-Roman/fB pcft/FB{/fB fs}bd
+/Times-Italic/fBI pcft/FBI{/fBI fs}bd
+/Times-Bold/fBB pcft/FBB{/fBB fs}bd
+/Times-BoldItalic/fBIB pcft/FBIB{/fBIB fs}bd
+/Courier/fH pcft/FH{/fH fs}bd
+/Courier-Oblique/fHI pcft/FHI{/fHI fs}bd
+/Courier-Bold/fHB pcft/FHB{/fHB fs}bd
+/Courier-BoldOblique/fHIB pcft/FHIB{/fHIB fs}bd
+/ZapfChancery-MediumItalic/fL pcft/FL{/fL fs}bd
+/ZapfChancery-MediumItalic/fLI pcft/FLI{/fLI fs}bd
+/ZapfChancery-MediumItalic/fLB pcft/FLB{/fLB fs}bd
+/ZapfChancery-MediumItalic/fLIB pcft/FLIB{/fLIB fs}bd
+/AvantGarde-Book/fM pcft/FM{/fM fs}bd
+/AvantGarde-BookOblique/fMI pcft/FMI{/fMI fs}bd
+/AvantGarde-Demi/fMB pcft/FMB{/fMB fs}bd
+/AvantGarde-DemiOblique/fMIB pcft/FMIB{/fMIB fs}bd
+(F:\\LPT\\MAN\\EX01_B.DOC)(EWvA, MRK)(March 22, 1993)fileinfo
+%%EndProlog
+%%Page: 0 1
+begpage
+12 FAB
+977 2996 m
+(Example 01: Testcode)s
+12 FB
+295 2669 m
+(This)s
+393(section)ms
+544(contains)ms
+721(some)ms
+836(test)ms
+915(code)ms
+1019(that)ms
+1103(can)ms
+1183(be)ms
+1239(inserted)ms
+1407(to)ms
+1456(debug)ms
+1588(the)ms
+1658(palindrome)ms
+1896(filter)ms
+2003(program.)ms
+12 FAB
+295 2486 m
+(B.1. Print the contents of IN_LINE and LETTERS)s
+12 FB
+295 2399 m
+(Correct)s
+462(reading)ms
+629(of)ms
+688(the)ms
+767(input)ms
+887(is)ms
+938(crucial.)ms
+1104(For)ms
+1191(debugging)ms
+1419(purposes)ms
+1614(we)ms
+1690(may)ms
+1794(want)ms
+1908(to)ms
+1964(inspect)ms
+2123(the)ms
+295 2339 m
+(contents)s
+474(of)ms
+11 FH
+528(IN_LINE)ms
+12 FB
+733(and)ms
+11 FH
+818(LETTERS)ms
+12 FB
+(.)s
+1035(We)ms
+1117(need)ms
+1224(a)ms
+1259(local)ms
+1368(counter)ms
+10 FH
+370 2258 m
+(\(******* Palindrome variables #quick *******\))s
+370 2216 m
+( T : INTEGER;)s
+12 FB
+295 2124 m
+(We)s
+376(want)ms
+486(the)ms
+560(debugging)ms
+783(information)ms
+1032(te)ms
+1081(be)ms
+1140(clearly)ms
+1289(flagged)ms
+1451(as)ms
+1505(such.)ms
+10 FH
+370 2043 m
+(\(***************** Palindrome \(test\) ******************\))s
+370 2001 m
+(\(** Check contents of IN_LINE and LETTERS. **\))s
+370 1960 m
+(WRITELN;)s
+370 1918 m
+(WRITELN \('============ DEBUGGING INFORMATION ==============='\);)s
+370 1876 m
+(WRITELN \('Contents of buffer IN_LINE: '\);)s
+370 1835 m
+(WRITE \('>>>>'\);)s
+370 1793 m
+(WITH IN_LINE DO)s
+370 1751 m
+(FOR T := 1 TO LENGTH DO WRITE \(OUTPUT, CHARS[T]\);)s
+370 1710 m
+(WRITE \('<<<<'\);)s
+370 1668 m
+(WRITELN;)s
+370 1626 m
+(WRITELN \('Contents of buffer LETTERS: '\);)s
+370 1585 m
+(WRITE \('>>>>'\);)s
+370 1543 m
+(WITH LETTERS DO)s
+370 1501 m
+(FOR T := 1 TO LENGTH DO WRITE \(OUTPUT, CHARS[T]\);)s
+370 1460 m
+(WRITE \('<<<<'\);)s
+370 1418 m
+(WRITELN;)s
+370 1376 m
+(WRITELN \('========== END OF DEBUGGING INFORMATION =========='\);)s
+370 1335 m
+(WRITELN;)s
+370 1293 m
+(\(************* End of Palindrome \(test\) ***************\))s
+8 FB
+295 204 m
+(The)s
+355(CLiP)ms
+433(Style)ms
+510(of)ms
+546(Literate)ms
+658(Programming)ms
+850(\(3.046,)ms
+953(30-mar-93\))ms
+12 FB
+2075 204 m
+( 1 )s
+50 2 2130 216 li
+50 2 2020 216 li
+endpage
+%%Trailer
+enddocument
+%%Pages: 1
+%%DocumentFonts:
+%%+ Helvetica-Bold
+%%+ Times-Roman
+%%+ Courier
+%%EOF
+ \ No newline at end of file
diff --git a/web/clip/ms_dos/fortran.ini b/web/clip/ms_dos/fortran.ini
new file mode 100644
index 0000000000..dfa6ed41f3
--- /dev/null
+++ b/web/clip/ms_dos/fortran.ini
@@ -0,0 +1,21 @@
+This file contains data that is needed to run CLiP
+And is generated by CLiP_MENU
+Modifying this file at own risk.
+Using CLiP_MENU is definitely recommended.
+
+INTERACTIVE_MODE Mode (INTERACTIVE/DEBUG/HELPFUL/AUTO)
+YES Interactive fault correction (YES/NO)
+BOTH Error message destination (TERMINAL/REPORTFILE/BOTH/NONE)
+!* Left comment string
+*! Right comment string
+* Command character
+ENDOF END string
+# Option marker
+OMITTED The specified modules are (OMITTED/EXTRACTED)
+------------ REPORT FILE -----------
+CLIP.RPT
+------------ INPUT FILES -----------
+------------ MODULES ---------------
+------------ MODULE DIRECTORY ------
+
+------------ END OF INI FILE -------
diff --git a/web/clip/ms_dos/lisp.ini b/web/clip/ms_dos/lisp.ini
new file mode 100644
index 0000000000..7dba75501b
--- /dev/null
+++ b/web/clip/ms_dos/lisp.ini
@@ -0,0 +1,21 @@
+This file contains data that is needed to run CLiP
+And is generated by CLiP_MENU
+Modifying this file at own risk.
+Using CLiP_MENU is definitely recommended.
+
+INTERACTIVE_MODE Mode (INTERACTIVE/DEBUG/HELPFUL/AUTO)
+YES Interactive fault correction (YES/NO)
+BOTH Error message destination (TERMINAL/REPORTFILE/BOTH/NONE)
+#|| Left comment string
+||# Right comment string
++ Command character
+ENDOF END string
+@ Option marker
+OMITTED The specified modules are (OMITTED/EXTRACTED)
+------------ REPORT FILE -----------
+CLIP.RPT
+------------ INPUT FILES -----------
+------------ MODULES ---------------
+------------ MODULE DIRECTORY ------
+
+------------ END OF INI FILE -------
diff --git a/web/clip/ms_dos/manual.ps b/web/clip/ms_dos/manual.ps
new file mode 100644
index 0000000000..50d83c521f
--- /dev/null
+++ b/web/clip/ms_dos/manual.ps
@@ -0,0 +1,5813 @@
+%!PS-Adobe-2.0
+%%DocumentFonts: (atend)
+%%Title: F:\\LPT\\MAN\\MANUAL.DOC
+%%Creator: Lotus Manuscript
+%%For: EWvA
+%%CreationDate: November 16, 1993
+%%Pages: (atend)
+%%BoundingBox: 0 0 595 841
+%%EndComments
+% PostScript Prologue (initialization) for Manuscript
+% Copyright (c) 1985,1986,1987,1988 Lotus Development Corporation
+% There is no user servicable code in this file.
+
+% set timeouts to infinite
+statusdict begin
+0 setjobtimeout
+/manualfeedtimeout 3600 def
+/waittimeout 0 def
+end
+
+% correct bug correction in rev 41.0
+/idiv{div cvi}bind def
+
+% define User Dictionary
+/msdict 300 dict def msdict begin
+/bd{bind def}bind def
+
+% Define commonly used things
+/delay{usertime 5000 add{dup usertime lt{pop exit}if}loop}bd
+/mfeed{statusdict begin /manualfeed true def end}bd
+/afeed{statusdict begin /manualfeed false def end}bd
+/bfeed{ afeed statusdict begin /setpapertray where
+ {pop setpapertray}{pop} ifelse end}bd
+
+/dpi{0.24 dup scale}bd
+
+% These two are called for each page
+/inpage false def
+/begpage{save dpi /inpage true def}bd
+/endpage{inpage {restore showpage}if }bd
+
+% for possible banner
+/fileinfo {pop pop pop}bd
+/enddocument {end} bd
+
+% these are also used by eqn & gmf
+/ld{load def}bd
+/x/exch ld
+/cu{300 mul 72 div}bd
+/m/moveto ld
+/t/translate ld
+/rm/rmoveto ld
+/cp/currentpoint ld
+/st/stroke ld
+/ln/lineto ld
+/rlt/rlineto ld
+/slw/setlinewidth ld
+
+/ff/findfont ld
+/scf/scalefont ld
+/sf/setfont ld
+/fs{x /pt x def ff pt cu scf sf}bd
+
+% linedraw
+/li{4 2 roll setlinewidth 3 1 roll moveto 0.0 rlineto st}bd
+
+% outline factor
+/olwid 40.0 def
+% stroke width for outline
+/uoslw {pt cu x div slw}bd
+% relative horizontal move
+/xm{x currentpoint pop sub 0.0 rmoveto}bd
+
+% The basic show
+/s/show ld
+% move horizontal and show
+/ms{xm s}bd
+
+% variations
+% outline show - first printer attribute
+/ppss{dup cp 3 -1 roll false charpath st
+x 3 -1 roll stringwidth pop add x moveto}bd
+/pss{olwid uoslw { ( ) dup 0 4 -1 roll put ppss}forall}bd
+/ps{pss}bd
+/mps{xm ps}bd
+
+% graybox show - second printer attribute
+/gb{cp 3 -1 roll pt cu dup 4 div neg 0 x rm dup 0 x rlt x 0 rlt
+neg 0 x rlt closepath currentgray .9 setgray fill setgray m}bd
+/usi{dup stringwidth pop gb}bd
+/us{usi s}bd
+/xum{x cp pop sub dup gb 0 rmoveto}bd
+
+% combinations of PD1 and PD2
+/ups{usi pss}bd
+/mups{xm ups}bd
+/mus{xm us}bd
+
+% define a new encoding vector (code page 850 based)
+/PC 256 array def
+StandardEncoding PC copy pop
+
+/dotaccent/bullet
+/quotesingle/quotedblleft/quotedblright/quotesinglbase
+/quotedblbase/guilsinglleft/guilsinglright/.notdef
+/ellipsis/perthousand/.notdef/.notdef/paragraph/section/dagger/daggerdbl
+/OE/oe/fi/fl/endash/emdash/fraction/Ydieresis
+PC 6 26 getinterval astore pop
+
+/Ccedilla/udieresis/eacute/acircumflex/adieresis/agrave/aring/ccedilla
+/ecircumflex/edieresis/egrave/idieresis/icircumflex/igrave/Adieresis/Aring
+/Eacute/ae/AE/ocircumflex/odieresis/ograve/ucircumflex/ugrave
+/ydieresis/Odieresis/Udieresis/oslash/sterling/Oslash/.notdef/florin
+/aacute/iacute/oacute/uacute/ntilde/Ntilde/ordfeminine/ordmasculine
+/questiondown/.notdef/.notdef/onehalf/onequarter/exclamdown/guillemotleft/guillemotright
+/.notdef/.notdef/.notdef/.notdef/.notdef/Aacute/Acircumflex/Agrave
+/.notdef/.notdef/.notdef/.notdef/.notdef/cent/yen/.notdef
+/.notdef/grave/.notdef/circumflex/tilde/.notdef/atilde/Atilde
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/currency
+/eth/Eth/Ecircumflex/Edieresis/Egrave/dotlessi/Iacute/Icircumflex
+/Idieresis/.notdef/.notdef/.notdef/.notdef/brokenbar/Igrave/.notdef
+/Oacute/germandbls/Ocircumflex/Ograve/otilde/Otilde/.notdef/thorn
+/Thorn/Uacute/Ucircumflex/Ugrave/yacute/Yacute/.notdef/acute
+/.notdef/.notdef/.notdef/threequarters/paragraph/section/.notdef/cedilla
+/ring/dieresis/periodcentered/onesuperior/threesuperior/twosuperior/.notdef/.notdef
+
+PC 128 128 getinterval astore pop
+
+% duplicate fonts with a new encoding vector
+/recd 5 dict def
+/pcft
+{recd begin
+/ncs PC def /nfn x def
+/bfn x def /bfd bfn findfont def
+/nf bfd maxlength dict def
+bfd{x dup dup /FID ne x /Encoding ne and
+{x nf 3 1 roll put}{pop pop}ifelse
+}forall
+nf/FontName nfn put
+nf/Encoding ncs put
+nfn nf definefont pop
+end}bd
+
+/fs{x /pt x def ff pt cu scf sf}bd
+
+% used by eqn
+/Times-Roman/TR pcft /Times-Bold/TRB pcft
+/Times-Italic/TRI pcft /Times-BoldItalic/TRBI pcft
+/Helvetica/HV pcft /Helvetica-Bold/HVB pcft
+/Helvetica-Oblique/HVO pcft /Helvetica-BoldOblique/HVBO pcft
+/Courier/CR pcft /Courier-Bold/CRB pcft
+/Sym{/Symbol fs}bd
+
+% Bit map image data decompression code
+/xx 0 def /yy 0 def
+/xbytes 0 def
+/lbuf 1200 string def /obuf 600 string def
+/bval <FFFEFCF8F0E0C080000103070F1F3F7F> def
+/blacks 96 string def /whites 96 string def
+0 1 95 {whites x 255 put} for
+
+/dispatch [
+{
+dup 47 le {32 sub 4 bitshift x pop 1}{
+dup 63 le {x pop 48 sub bval x get
+3 copy put x 1 add x 0} {
+dup 79 le {62 sub} {
+80 sub { 3 copy put x 1 add x } repeat 0
+}ifelse }ifelse }ifelse
+}bind
+{
+32 sub add
+3 copy put
+x 1 add x 0
+} bind
+{
+32 sub x pop add 255 0
+}bind
+{
+32 sub x pop
+3 copy getinterval
+whites 0 3 index getinterval
+x copy pop add 255 0
+}bind
+{
+32 sub x pop
+3 copy getinterval
+blacks 0 3 index getinterval
+x copy pop add 0 0
+}bind
+]def
+
+% read a raster line and unpack
+/readx{
+obuf 0 255 0
+currentfile lbuf readline pop
+{x dispatch x get exec} forall
+pop pop pop 0 xbytes getinterval}bd
+
+/mspic{
+/yy x def/xx x def
+/xbytes xx 8 idiv def
+xx yy 1 [xx 0 0 0 yy sub 0 yy]{readx}image}bd
+
+
+
+/Times-Roman/fA pcft/FA{/fA fs}bd
+/Times-Italic/fAI pcft/FAI{/fAI fs}bd
+/Times-Bold/fAB pcft/FAB{/fAB fs}bd
+/Times-BoldItalic/fAIB pcft/FAIB{/fAIB fs}bd
+/Helvetica/fC pcft/FC{/fC fs}bd
+/Helvetica-Oblique/fCI pcft/FCI{/fCI fs}bd
+/Helvetica-Bold/fCB pcft/FCB{/fCB fs}bd
+/Helvetica-BoldOblique/fCIB pcft/FCIB{/fCIB fs}bd
+/Courier/fH pcft/FH{/fH fs}bd
+/Courier-Oblique/fHI pcft/FHI{/fHI fs}bd
+/Courier-Bold/fHB pcft/FHB{/fHB fs}bd
+/Courier-BoldOblique/fHIB pcft/FHIB{/fHIB fs}bd
+/Helvetica-Narrow/fK pcft/FK{/fK fs}bd
+/Helvetica-Narrow-Oblique/fKI pcft/FKI{/fKI fs}bd
+/Helvetica-Narrow-Bold/fKB pcft/FKB{/fKB fs}bd
+/Helvetica-Narrow-BoldOblique/fKIB pcft/FKIB{/fKIB fs}bd
+/ZapfChancery-MediumItalic/fL pcft/FL{/fL fs}bd
+/ZapfChancery-MediumItalic/fLI pcft/FLI{/fLI fs}bd
+/ZapfChancery-MediumItalic/fLB pcft/FLB{/fLB fs}bd
+/ZapfChancery-MediumItalic/fLIB pcft/FLIB{/fLIB fs}bd
+/AvantGarde-Book/fM pcft/FM{/fM fs}bd
+/AvantGarde-BookOblique/fMI pcft/FMI{/fMI fs}bd
+/AvantGarde-Demi/fMB pcft/FMB{/fMB fs}bd
+/AvantGarde-DemiOblique/fMIB pcft/FMIB{/fMIB fs}bd
+(F:\\LPT\\MAN\\MANUAL.DOC)(EWvA)(November 16, 1993)fileinfo
+%%EndProlog
+%%Page: 0 1
+begpage
+14 FCB
+719 2578 m
+(CLiP - )s
+14 FCIB
+(C)s
+14 FCB
+( ode from )s
+14 FCIB
+(Li)s
+14 FCB
+( terate )s
+14 FCIB
+(P)s
+14 FCB
+( rograms)s
+14 FCB
+901 2438 m
+(Provisional User Manual)s
+12 FAB
+295 2133 m
+(Disclaimer:)s
+12 FA
+389 2073 m
+(This)s
+493(document)ms
+706(is)ms
+755(meant)ms
+893(for)ms
+967(programmers)ms
+1250(who)ms
+1351(are)ms
+1428(already)ms
+1591(familiar)ms
+1765(with)ms
+1870(the)ms
+1947(literate)ms
+2101(pro-)ms
+295 2013 m
+(gramming)s
+512(paradigm.)ms
+725(It)ms
+767(pretends)ms
+948(in)ms
+999(no)ms
+1061(way)ms
+1156(to)ms
+1207(be)ms
+1266(a)ms
+1299(complete)ms
+1495(user)ms
+1590(manual)ms
+1749(in)ms
+1799(the)ms
+1872(real)ms
+1959(meaning)ms
+2143(of)ms
+295 1953 m
+(the)s
+369(word.)ms
+497(But)ms
+583(the)ms
+657(document)ms
+868(should)ms
+1014(supply)ms
+1161(sufficient)ms
+1363(hints)ms
+1473(to)ms
+1525(experiment)ms
+1764(successfully)ms
+2021(with)ms
+2123(the)ms
+295 1893 m
+(CLiP)s
+413(system.)ms
+389 1833 m
+(You)s
+492(are)ms
+571(assumed)ms
+761(to)ms
+817(be)ms
+882(familiar)ms
+1058(with)ms
+1165(the)ms
+1243(ideas)ms
+1364(and)ms
+1454(design)ms
+1602(goals)ms
+1725(of)ms
+1784(the)ms
+1863(CLiP)ms
+1986(system)ms
+2143(as)ms
+295 1773 m
+(explained)s
+513(in)ms
+576([Ammers)ms
+788(and)ms
+884(Kramer)ms
+1061(1993].)ms
+1214(Also)ms
+1332(you)ms
+1431(should)ms
+1588(have)ms
+1707(read)ms
+11 FH
+1816(READ_ME.TXT)ms
+12 FA
+2143(or)ms
+11 FH
+295 1713 m
+(READ_ME.PS)s
+12 FA
+577(which)ms
+707(come)ms
+823(with)ms
+919(the)ms
+988(executables)ms
+1229(and)ms
+1309(understand)ms
+1536(the)ms
+1604(meaning)ms
+1784(of)ms
+1833(the)ms
+1902(INI-file)ms
+2062(which)ms
+295 1653 m
+(guides)s
+438(the)ms
+511(extraction)ms
+724(process.)ms
+389 1593 m
+(The)s
+481(DOS)ms
+596(and)ms
+683(VMS)ms
+806(versions)ms
+987(of)ms
+1044(CLiP)ms
+1164(consist)ms
+1318(of)ms
+1374(two)ms
+1464(independent)ms
+1723(programs,)ms
+1939(CLIP_1)ms
+2112(and)ms
+295 1533 m
+(CLIP_2.)s
+481(CLIP_1)ms
+654(is)ms
+703(purely)ms
+846(to)ms
+900(create)ms
+1035(an)ms
+1097(INI-file)ms
+1265(for)ms
+1339(CLIP_2,)ms
+1525(which)ms
+1662(performs)ms
+1858(the)ms
+1935(actual)ms
+2069(work.)ms
+295 1473 m
+(The)s
+387(Unix)ms
+502(version)ms
+664(consists)ms
+837(of)ms
+894(only)ms
+998(one)ms
+1085(program,)ms
+1282(CLIP)ms
+1405(\(which)ms
+1559(is)ms
+1607(identical)ms
+1794(to)ms
+1848(CLIP_2\),)ms
+2050(and)ms
+2137(an)ms
+295 1413 m
+(INI-file)s
+459(should)ms
+603(be)ms
+662(made)ms
+782(using)ms
+902(the)ms
+974(supplied)ms
+1155(scripts)ms
+1297(or)ms
+1350(an)ms
+1409(editor.)ms
+1549(This)ms
+1650(manual)ms
+1808(only)ms
+1909(deals)ms
+2023(with)ms
+2123(the)ms
+295 1353 m
+(second)s
+446(program.)ms
+14 FCB
+295 1193 m
+(1 Introduction)s
+12 FA
+295 1098 m
+(In)s
+354(short)ms
+472(the)ms
+551(idea)ms
+652(behind)ms
+806(CLiP)ms
+930(is)ms
+981(to)ms
+1038(define)ms
+1181(a)ms
+1221(style)ms
+1334(of)ms
+1393(programming)ms
+1683(sufficiently)ms
+1929(formal)ms
+2080(to)ms
+2137(be)ms
+295 1038 m
+(recognized)s
+531(by)ms
+597(a)ms
+636(literate)ms
+792(programming)ms
+1080(automaton.)ms
+1321(This)ms
+1426(syntax)ms
+1574(\(which)ms
+1729(we)ms
+1804(will)ms
+1899(refer)ms
+2010(to)ms
+2065(as)ms
+2123(the)ms
+295 978 m
+(CLiP-syntax\))s
+577(should)ms
+724(not)ms
+801(obstruct)ms
+975(a)ms
+1011(natural)ms
+1163(way)ms
+1259(of)ms
+1314(programming.)ms
+1612(Ideally)ms
+1764(the)ms
+1839(system)ms
+1991(should)ms
+2137(be)ms
+295 918 m
+(smart)s
+421(enough)ms
+583(to)ms
+637("see")ms
+756(stubs,)ms
+887(slots)ms
+993(and)ms
+1080(the)ms
+1157(like)ms
+1247(by)ms
+1312("inspecting")ms
+1573(the)ms
+1649(documentation)ms
+1961(and)ms
+2048(simply)ms
+295 858 m
+("understanding")s
+631(the)ms
+704(refinements)ms
+952(the)ms
+1025(programmer)ms
+1285(has)ms
+1364(made.)ms
+1497(Alas,)ms
+1613(this)ms
+1697(is)ms
+1743(far)ms
+1810(beyond)ms
+1970(the)ms
+2043(current)ms
+295 798 m
+(potential)s
+485(of)ms
+542(artificial)ms
+726(intelligence)ms
+975(and)ms
+1062(we)ms
+1136(will)ms
+1229(have)ms
+1339(to)ms
+1393(reach)ms
+1516(the)ms
+1593(automaton)ms
+1819(a)ms
+1857(helping)ms
+2022(hand)ms
+2134(by)ms
+295 738 m
+(defining)s
+474(a)ms
+508(special)ms
+660(syntax.)ms
+389 678 m
+(So)s
+454(we)ms
+524(want)ms
+634(the)ms
+707("look)ms
+829(and)ms
+914(feel")ms
+1021(of)ms
+1075(a)ms
+1110(documentation)ms
+1420(to)ms
+1471(be)ms
+1530(as)ms
+1584("natural")ms
+1776(as)ms
+1830(possible,)ms
+2019(but)ms
+2096(with)ms
+295 618 m
+(CLiP)s
+413(features)ms
+584(that)ms
+672(can)ms
+754(be)ms
+814(recognized)ms
+1046(by)ms
+1109(an)ms
+1169(automaton.)ms
+1406(On)ms
+1480(the)ms
+1554(other)ms
+1669(hand)ms
+1779(should)ms
+1926(the)ms
+2000(reader)ms
+2137(be)ms
+295 558 m
+(burdened)s
+497(as)ms
+554(little)ms
+662(as)ms
+720(possible)ms
+900(with)ms
+1004(the)ms
+1082(fact)ms
+1173(that)ms
+1264(additional)ms
+1480(processing)ms
+1709(is)ms
+1759(needed)ms
+1916(to)ms
+1971(extract)ms
+2123(the)ms
+295 498 m
+(modules.)s
+493(In)ms
+551(systems)ms
+726(like)ms
+818(VAMP)ms
+979([Ammers)ms
+1184(1984])ms
+1317(and)ms
+1406(WEB)ms
+1534([Knuth)ms
+1692(1984])ms
+1825(- which)ms
+1993(use)ms
+2076(batch)ms
+295 438 m
+(formatters -)s
+539(this)ms
+622(is)ms
+665(achieved)ms
+853(by)ms
+913(adding)ms
+1059(explicit)ms
+1219(commands)ms
+1446(in)ms
+1495(the)ms
+1566(source-files)ms
+1809(that)ms
+1894(are)ms
+1965(suppressed)ms
+295 378 m
+(in)s
+349(the)ms
+425(formatted)ms
+634(documentation.)ms
+959(But)ms
+1047(this)ms
+1134(technique)ms
+1344(does)ms
+1450(not)ms
+1530(work)ms
+1647(if)ms
+1693(the)ms
+1769(documentation)ms
+2082(envi-)ms
+8 FA
+295 254 m
+(CLiP)s
+373(provisional)ms
+532(user)ms
+595(manual)ms
+702(\(version)ms
+819(2.100\))ms
+endpage
+%%Page: 1 2
+begpage
+10 FCB
+295 3182 m
+(2)s
+10 FC
+460 3182 m
+(Syntax \(programming style\))s
+12 FA
+295 3011 m
+(ronment)s
+470(is)ms
+512(an)ms
+568(interactive)ms
+788(word-processor)ms
+1107(\(Word)ms
+1247(Perfect,)ms
+1409(Lotus)ms
+1532(Manuscript,)ms
+1781(MS-Word,)ms
+2005(Ami)ms
+2102(Pro,)ms
+295 2951 m
+(etc.\).)s
+411(So)ms
+480(CLiP)ms
+602(uses)ms
+705(either)ms
+835(the)ms
+912(ASCII-export)ms
+1204(from)ms
+1317(a)ms
+1356(word-processors)ms
+1703(or)ms
+1761(the)ms
+1838(ASCII)ms
+1985(input)ms
+2104(of)ms
+2162(a)ms
+295 2891 m
+(formatter)s
+491(and)ms
+573(extracts)ms
+738(modules)ms
+918(from)ms
+1025(there.)ms
+1148(In)ms
+1199(these)ms
+1312(files)ms
+1408(CLiP)ms
+1524(recognizes)ms
+1748(the)ms
+1819(important)ms
+2023(sections)ms
+295 2831 m
+(by)s
+357(a)ms
+392(particular)ms
+596(programming-style)ms
+992(rather)ms
+1121(than)ms
+1219(by)ms
+1282(explicit)ms
+1444(commands.)ms
+389 2771 m
+(The)s
+479(first)ms
+573(section)ms
+727(describes)ms
+926(the)ms
+1000(syntax)ms
+1143(that)ms
+1231(CLiP)ms
+1350("sees".)ms
+1499(The)ms
+1590(next)ms
+1689(section)ms
+1843(gives)ms
+1962(a)ms
+1997(couple)ms
+2143(of)ms
+295 2711 m
+(useful)s
+427(examples.)ms
+640(In)ms
+692(section)ms
+844(4)ms
+880(we)ms
+949(describe)ms
+1127(the)ms
+1198(options)ms
+1356(that)ms
+1442(may)ms
+1539(be)ms
+1597(used)ms
+1699(to)ms
+1749(customize)ms
+1963(the)ms
+2035(process)ms
+295 2651 m
+(of)s
+350(module)ms
+514(generation.)ms
+752(In)ms
+808(section)ms
+963(5)ms
+1002(we)ms
+1075(give)ms
+1175(some)ms
+1295(hints)ms
+1406(on)ms
+1470(how)ms
+1570(to)ms
+1623(organize)ms
+1809(your)ms
+1915(working)ms
+2096(with)ms
+295 2591 m
+(CLiP)s
+409(efficiently.)ms
+637(Stubs)ms
+757(and)ms
+839(slots)ms
+940(my)ms
+1013(remaining)ms
+1226(sections)ms
+1396(illustrate)ms
+1580(the)ms
+1651(style)ms
+1755(of)ms
+1806(documentation)ms
+2112(and)ms
+295 2531 m
+(programs)s
+492(that)ms
+575(would)ms
+709(result.)ms
+841(CLiP)ms
+955(is)ms
+997(in)ms
+1044(development)ms
+1311(and)ms
+1392(we)ms
+1459(compile)ms
+1628(the)ms
+1698(known)ms
+1843(bugs)ms
+1946(in)ms
+1993(section 6.)ms
+14 FCB
+295 2371 m
+(2 Syntax \(programming style\))s
+12 FAI
+295 2276 m
+(CLiP-lines)s
+12 FA
+562( that)ms
+670(is)ms
+723(lines)ms
+838(which)ms
+981(have)ms
+1096(a)ms
+1138(special)ms
+1297(meaning)ms
+1490(to)ms
+1549(CLiP )ms
+1718(start)ms
+1824(with)ms
+1934(a)ms
+1976(CLIP-left-)ms
+295 2216 m
+(parenthesis)s
+537(\(CLIP-lpar\))ms
+790(and)ms
+879(end)ms
+969(with)ms
+1075(a)ms
+1114(CLIP-right-parenthesis)ms
+1593(\(CLIP-rpar\).)ms
+1861(Both)ms
+1976(tokens)ms
+2123(are)ms
+295 2156 m
+(constructed)s
+545(as)ms
+607(extensions)ms
+838(of)ms
+899(the)ms
+980(tokens)ms
+1131(encapsulating)ms
+1426(comments)ms
+1651(which)ms
+1794(we)ms
+1872(will)ms
+1970(refer)ms
+2084(to)ms
+2143(as)ms
+11 FH
+295 2096 m
+(COMM-START)s
+12 FA
+581(and)ms
+11 FH
+665(COMM-END)ms
+12 FA
+(.)s
+909(If)ms
+954(we)ms
+1024(program)ms
+1205(in)ms
+1256(Pascal)ms
+1396(then)ms
+1493(everything)ms
+1719(between)ms
+1897(")ms
+11 FH
+(\(*)s
+12 FA
+(")s
+2005(and)ms
+2089(")ms
+11 FH
+(*\))s
+12 FA
+(")s
+295 2036 m
+(is)s
+340(seen)ms
+442(as)ms
+496(comment,)ms
+707(thus)ms
+803(we)ms
+874(have)ms
+981(the)ms
+1054(convention:)ms
+11 FH
+554 1951 m
+(COMM-START)s
+12 FA
+841(=)ms
+882(")ms
+11 FH
+(\(*)s
+12 FA
+(")s
+11 FH
+554 1891 m
+(COMM-END)s
+12 FA
+811(=)ms
+852(")ms
+11 FH
+(*\))s
+12 FA
+(")s
+295 1806 m
+(Extension)s
+503(of)ms
+553(the)ms
+622(comment)ms
+816(token)ms
+936(is)ms
+977(by)ms
+1035(a)ms
+1066(character)ms
+1257(with)ms
+1354(a)ms
+1385(special)ms
+1532(meaning)ms
+1712(to)ms
+1759(clip,)ms
+1855(the)ms
+11 FH
+1924(CLIP-CHAR)ms
+12 FA
+(.)s
+295 1746 m
+(In)s
+349(our)ms
+428(case)ms
+526(we)ms
+597(assume)ms
+11 FH
+554 1661 m
+(CLIP-CHAR)s
+12 FA
+814(=)ms
+854(")ms
+11 FH
+(*)s
+12 FA
+(")s
+295 1576 m
+(Thus)s
+407(CLiP-lines)ms
+636(are)ms
+710(enclosed)ms
+897(by)ms
+554 1491 m
+(CLIP-lpar)s
+769(of)ms
+823(the)ms
+897(form)ms
+1006(")ms
+11 FH
+(\(**)s
+12 FA
+(")s
+295 1406 m
+(and)s
+554 1321 m
+(CLIP-rpar)s
+772(of)ms
+826(the)ms
+899(form)ms
+1009(")ms
+11 FH
+(**\))s
+12 FA
+(")s
+295 1236 m
+(The)s
+380(parameters)ms
+11 FH
+607(COMM-START)ms
+12 FA
+(,)s
+11 FH
+902(COMM-END)ms
+12 FA
+1129(and)ms
+11 FH
+1209(CLIP-CHAR)ms
+12 FA
+1464(are)ms
+1532(set)ms
+1595(by)ms
+1653(the)ms
+1721(INI-file)ms
+1882(and)ms
+1961(it)ms
+1997(is)ms
+2037(evident)ms
+295 1176 m
+(that)s
+382(the)ms
+456(convention)ms
+690(can)ms
+772(be)ms
+832(adjusted.)ms
+389 1091 m
+(CLiP)s
+507(distinguishes)ms
+780(six)ms
+851(source)ms
+994(line)ms
+1082(categories:)ms
+10 FH
+395 1011 m
+(1)s
+470 1011 m
+(\(******************* <arbitrary string> **********************\))s
+395 961 m
+(2)s
+470 961 m
+(\(**************** End of <arbitrary string> ******************\))s
+395 911 m
+(3)s
+470 911 m
+(\(** <arbitrary string> **\))s
+395 861 m
+(4)s
+470 861 m
+(\(***************************************************************\))s
+395 811 m
+(5)s
+470 811 m
+(<the empty string>)s
+395 761 m
+(6)s
+470 761 m
+(<any string not falling in one of the above categories>)s
+12 FA
+295 664 m
+(We)s
+373(will)ms
+460(refer)ms
+563(to)ms
+611(a)ms
+642(line)ms
+726(from)ms
+832(the)ms
+902(second)ms
+1049(category)ms
+1230(as)ms
+1281(an)ms
+1337("L2")ms
+1442(and)ms
+1523(so)ms
+1577(on)ms
+1636(and)ms
+1717(investigate)ms
+1942(the)ms
+2012(meaning)ms
+295 604 m
+(is)s
+340(of)ms
+395(the)ms
+468(various)ms
+628(categories)ms
+843(for)ms
+914(CLiP.)ms
+389 544 m
+(The)s
+479(string)ms
+605(")ms
+11 FH
+(End)s
+736(of)ms
+12 FA
+(")s
+824(of)ms
+879(an)ms
+938(L2)ms
+1007(has)ms
+1086(a)ms
+1121(special)ms
+1272(meaning)ms
+1457(that)ms
+1545(distinguishes)ms
+1819(an)ms
+1879(L2)ms
+1947(from)ms
+2057(an)ms
+2117(L1.)ms
+295 484 m
+(Again)s
+429(this)ms
+514(special)ms
+665(string)ms
+792(is)ms
+838(defined)ms
+1000(by)ms
+1063(a)ms
+1097(parameter)ms
+1310(in)ms
+1361(the)ms
+1435(INI-file)ms
+11 FH
+554 394 m
+(END-STRING)s
+12 FA
+841(=)ms
+882(")ms
+11 FH
+(ENDOF)s
+12 FA
+(")s
+8 FA
+295 254 m
+(CLiP)s
+373(provisional)ms
+532(user)ms
+595(manual)ms
+702(\(version)ms
+819(2.100\))ms
+4 300 430 889 li
+25 2 1670 2288 li
+25 2 534 2288 li
+endpage
+%%Page: 2 3
+begpage
+10 FC
+1203 3182 m
+(2.1 Stub blocks and documentation blocks)s
+10 FCB
+2161 3182 m
+(3)s
+12 FA
+295 3011 m
+(Observe)s
+472(that)ms
+558(CLiP)ms
+674(does)ms
+776(not)ms
+851(distinguish)ms
+1081(between)ms
+1258(upper)ms
+1383(and)ms
+1466(lower)ms
+1590(case)ms
+1687(and)ms
+1770(forgets)ms
+1920(about)ms
+2041(spaces.)ms
+295 2951 m
+(In)s
+351(fact)ms
+440(CLiP)ms
+561(reduces)ms
+728(the)ms
+804(<arbitrary)ms
+1018(string>)ms
+1175(internally)ms
+1381(to)ms
+1435(a)ms
+1472(sequence)ms
+1670(of)ms
+1726(the)ms
+1802(characters)ms
+2019(")ms
+11 FH
+(A)s
+12 FA
+("-")s
+11 FH
+(Z)s
+12 FA
+(",)s
+295 2891 m
+(")s
+11 FH
+(0)s
+12 FA
+("-")s
+11 FH
+(9)s
+12 FA
+(")s
+460(and)ms
+545(")ms
+11 FH
+(.)s
+12 FA
+(")s
+389 2831 m
+(Note)s
+500(that)ms
+590(for)ms
+663(an)ms
+725(L3)ms
+796(the)ms
+872(character)ms
+1070(immediately)ms
+1334(following)ms
+1544(the)ms
+11 FH
+1619(CLIP-CHAR)ms
+12 FA
+1882(on)ms
+1947(the)ms
+2022(left)ms
+2104(side)ms
+295 2771 m
+(and)s
+381(the)ms
+456(character)ms
+654(preceding)ms
+866(the)ms
+11 FH
+941(CLIP-CHAR)ms
+12 FA
+1203(on)ms
+1267(the)ms
+1343(right)ms
+1451(side)ms
+1546(may)ms
+1647(be)ms
+1708(anything)ms
+1898(apart)ms
+2012(from)ms
+2123(the)ms
+11 FH
+295 2711 m
+(CLIP-CHAR)s
+12 FA
+555(itself.)ms
+12 FCB
+295 2588 m
+(2.1 Stub blocks and documentation blocks)s
+12 FA
+295 2501 m
+(From)s
+412(CLiP's)ms
+563(point)ms
+674(of)ms
+725(view)ms
+831(the)ms
+901(source-files)ms
+1143(are)ms
+1213(divided)ms
+1372(in)ms
+12 FAI
+1420(documentation)ms
+1726(blocks)ms
+12 FA
+1863(and)ms
+12 FAI
+1944(stub-blocks)ms
+12 FA
+(.)s
+295 2441 m
+(A)s
+344(stub-block)ms
+568(starts)ms
+686(with)ms
+788(an)ms
+848(L1)ms
+917(and)ms
+1002(usually)ms
+1159(ends)ms
+1264(with)ms
+1365(an)ms
+1426(L2.)ms
+1507(A)ms
+1556(special)ms
+1707(kind)ms
+1809(of)ms
+1864(stub,)ms
+1973(a)ms
+2008(so)ms
+2065(called)ms
+295 2381 m
+(quick)s
+416(stub)ms
+509(\(see)ms
+599(sect.)ms
+699(3.3)ms
+772(and)ms
+854(4\),)ms
+918(is)ms
+961(ended)ms
+1090(by)ms
+1150(an)ms
+1207(L5)ms
+1273(or)ms
+1324(an)ms
+1382(<EOF>.)ms
+1555(Everything)ms
+1787(outside)ms
+1941(a)ms
+1973(stub-block)ms
+295 2321 m
+(is)s
+343(a)ms
+381(documentation)ms
+694(block)ms
+820(and)ms
+908(ignored)ms
+1076(by)ms
+1142(CLiP.)ms
+1276(For)ms
+1360(this)ms
+1448(reason)ms
+1594(we)ms
+1668(say)ms
+1750(that)ms
+1841(CLiP)ms
+1962(is)ms
+2011(in)ms
+12 FAI
+2065(active)ms
+12 FAI
+295 2261 m
+(mode)s
+12 FA
+419(during)ms
+565(the)ms
+642(processing)ms
+872(of)ms
+930(a)ms
+968(stub-block)ms
+1195(and)ms
+1283(in)ms
+12 FAI
+1338(passive)ms
+1501(mode)ms
+12 FA
+1625(otherwise.)ms
+1848(The)ms
+1942(only)ms
+2046(way)ms
+2146(to)ms
+295 2201 m
+(change)s
+448(CLiP)ms
+566(from)ms
+675(passive)ms
+835(to)ms
+886(active)ms
+1017(mode)ms
+1140(is)ms
+1186(by)ms
+1248(an)ms
+1307(L1)ms
+1375(and)ms
+1459(the)ms
+1532(usual)ms
+1650(way)ms
+1745(from)ms
+1855(active)ms
+1986(to)ms
+2037(passive)ms
+295 2141 m
+(is)s
+340(through)ms
+508(an)ms
+568(L2.)ms
+649(An)ms
+722(L2)ms
+790(in)ms
+842(passive)ms
+1001(mode)ms
+1125(is)ms
+1171(presumably)ms
+1417(an)ms
+1476(error)ms
+1586(and)ms
+1671(will)ms
+1761(be)ms
+1821(ignored.)ms
+12 FCB
+295 1988 m
+(2.2 Segments)s
+12 FA
+295 1901 m
+(A)s
+356(stub-block)ms
+592(contains)ms
+784(one)ms
+882(and)ms
+979(only)ms
+1094(one)ms
+12 FAI
+1191(stub-segment)ms
+12 FA
+(,)s
+1493(which)ms
+1640(starts)ms
+1771(the)ms
+1858(stub-block.)ms
+2107(The)ms
+295 1841 m
+(stub-segment)s
+574(may)ms
+672(be)ms
+732(followed)ms
+922(by)ms
+985(any)ms
+1069(number)ms
+1235(of)ms
+12 FAI
+1289(slot-segments)ms
+12 FA
+1574(and/or)ms
+12 FAI
+1714(code-segments)ms
+12 FA
+(.)s
+389 1781 m
+(An)s
+458(L1)ms
+522(always)ms
+669(starts)ms
+783(a)ms
+814(new)ms
+906(stub-)ms
+1014(or)ms
+1064(slot-segment)ms
+1328(and)ms
+1409(the)ms
+1479(segment)ms
+1654(continues)ms
+1854(with)ms
+1951(any)ms
+2032(number)ms
+295 1721 m
+(of)s
+350(lines)ms
+459(of)ms
+514(type)ms
+614(L3)ms
+684(or)ms
+740(L4.)ms
+822(A)ms
+872(segment)ms
+1052(is)ms
+1100(a)ms
+1136(slot-segment)ms
+1405(if)ms
+1450(and)ms
+1536(only)ms
+1639(if)ms
+1684(it)ms
+1725(is)ms
+1773(not)ms
+1851(the)ms
+1926(first)ms
+2020(one)ms
+2107(of)ms
+2162(a)ms
+295 1661 m
+(stub-block.)s
+532(A)ms
+582(code-segment)ms
+874(consists)ms
+1046(of)ms
+1102(any)ms
+1188(number)ms
+1355(of)ms
+1410(contiguous)ms
+1644(lines)ms
+1752(of)ms
+1808(type)ms
+1908(L5.)ms
+1990(Stub-)ms
+2112(and)ms
+12 FA
+295 1601 m
+(slot-segments)s
+587(have)ms
+699(an)ms
+12 FAI
+764(identification)ms
+12 FA
+1048(or)ms
+12 FAI
+1107(name)ms
+12 FA
+1233(which)ms
+1373(is)ms
+1424(constructed)ms
+1672(somehow)ms
+1881(from)ms
+1996(the)ms
+11 FH
+2075(<ar-)ms
+11 FH
+295 1541 m
+(bitrary)s
+515(string>)ms
+12 FA
+(s)s
+739(inside)ms
+871(the)ms
+945(segment.)ms
+389 1481 m
+(L3)s
+455(and)ms
+539(L4)ms
+606(are)ms
+678(continuations)ms
+958(of)ms
+1011(stub-)ms
+1123(and)ms
+1206(slot-segments,)ms
+1505(but)ms
+1580(with)ms
+1680(a)ms
+1714(slightly)ms
+1875(different)ms
+2058(status.)ms
+295 1421 m
+(An)s
+373(L3)ms
+446(that)ms
+538(cannot)ms
+688(be)ms
+753(pasted)ms
+898(to)ms
+954(a)ms
+994(segment)ms
+1177(is)ms
+1228(flagged)ms
+1395(as)ms
+1454(an)ms
+1519(error.)ms
+1645(But)ms
+1735(an)ms
+1799(L4)ms
+1872(under)ms
+2003(the)ms
+2082(same)ms
+295 1361 m
+(conditions)s
+515(is)ms
+561(interpreted)ms
+790(as)ms
+844(belonging)ms
+1057(to)ms
+1108(the)ms
+1182(current)ms
+1336(code-segment.)ms
+12 FCB
+295 1208 m
+(2.3 Options)s
+12 FA
+295 1121 m
+(The)s
+390(module)ms
+557(extraction)ms
+774(process)ms
+941(can)ms
+1028(be)ms
+1092(tuned)ms
+1221(by)ms
+1288(means)ms
+1433(of)ms
+12 FAI
+1492(options)ms
+12 FA
+(.)s
+1669(Stub-segments)ms
+1981(as)ms
+2040(well)ms
+2143(as)ms
+295 1061 m
+(slot-segments)s
+593(may)ms
+702(have)ms
+820(options.)ms
+1003(An)ms
+1087(option)ms
+1238(starts)ms
+1367(with)ms
+1479(a)ms
+1525(keyword)ms
+1723(signalled)ms
+1927(by)ms
+2000(a)ms
+2046(special)ms
+11 FH
+295 1001 m
+(OPTION-MARKER)s
+12 FA
+(.)s
+681(The)ms
+775(option)ms
+919(keyword)ms
+1110(may)ms
+1212(be)ms
+1276(abbreviated)ms
+1525(to)ms
+1581(a)ms
+1619(unique)ms
+1772(headerstring)ms
+2035(for)ms
+2110(that)ms
+295 941 m
+(option.)s
+446(We)ms
+527(will)ms
+616(assume)ms
+775(")ms
+11 FH
+(#)s
+12 FA
+(")s
+854(for)ms
+11 FH
+924(OPTION-MARKER)ms
+12 FA
+(,)s
+1305(but)ms
+1380(of)ms
+1433(course)ms
+1575(this)ms
+1659(again)ms
+1778(is)ms
+1823(a)ms
+1857(parameter)ms
+2068(set)ms
+2135(by)ms
+295 881 m
+(the)s
+370(INI-file.)ms
+549(The)ms
+641(argument\(s\))ms
+897(following)ms
+1105(an)ms
+1166(option)ms
+1308(continue)ms
+1495(till)ms
+1564(the)ms
+1640(next)ms
+1740(option-keyword)ms
+2073(or)ms
+2129(till)ms
+295 821 m
+(the)s
+368(end)ms
+453(of)ms
+507(the)ms
+581(segment.)ms
+772(Therefore)ms
+982(the)ms
+1055(name)ms
+1176(of)ms
+1230(a)ms
+1265(segment)ms
+1444(must)ms
+1554(precede)ms
+1722(the)ms
+1796(options.)ms
+389 761 m
+(In)s
+440(general)ms
+596(options)ms
+753(operate)ms
+910(on)ms
+970(the)ms
+12 FAI
+1040(inside)ms
+12 FA
+1169(of)ms
+1221(the)ms
+1291(stub)ms
+1384(only,)ms
+1495(since)ms
+1608(that)ms
+1692(is)ms
+1735(the)ms
+1806(part)ms
+1893(of)ms
+1944(the)ms
+2015(program)ms
+295 701 m
+(that)s
+381(the)ms
+453(programmer)ms
+711(of)ms
+764(this)ms
+847(particular)ms
+1050(refinement)ms
+1278(has)ms
+1355(in)ms
+1405(his)ms
+1475(or)ms
+1528(her)ms
+1603(mind.)ms
+1729(In)ms
+1782(addition)ms
+1957(options)ms
+2115(can)ms
+295 641 m
+(be)s
+351(inherited.)ms
+551(The)ms
+639(meaning)ms
+821(of)ms
+872(the)ms
+943(various)ms
+1100(options)ms
+1257(is)ms
+1300(explained)ms
+1504(in)ms
+1553(section 4.)ms
+1754(Some)ms
+1878(frequently)ms
+2093(used)ms
+295 581 m
+(options)s
+454(show)ms
+572(up)ms
+635(in)ms
+686(the)ms
+760(examples)ms
+961(of)ms
+1015(section 3.)ms
+8 FA
+295 254 m
+(CLiP)s
+373(provisional)ms
+532(user)ms
+595(manual)ms
+702(\(version)ms
+819(2.100\))ms
+endpage
+%%Page: 3 4
+begpage
+10 FCB
+295 3182 m
+(4)s
+10 FC
+460 3182 m
+(Examples)s
+14 FCB
+295 3001 m
+(3 Examples)s
+12 FA
+295 2906 m
+(In)s
+351(the)ms
+426(examples)ms
+630(we)ms
+703(will)ms
+795(illustrate)ms
+984(the)ms
+1060(most)ms
+1172(important)ms
+1381(features)ms
+1554(of)ms
+1610(CLiP)ms
+1730(by)ms
+1794(making)ms
+1959(remarks)ms
+2134(on)ms
+295 2846 m
+(excerpts)s
+474(drawn)ms
+611(from)ms
+721(the)ms
+794(documentation)ms
+1104(of)ms
+1158(CLiPs)ms
+1296(predecessor,)ms
+1557(VAMP.)ms
+12 FCB
+295 2723 m
+(3.1 Example 1: Defining a module)s
+10 FAIB
+470 2641 m
+(The module VAMP:)s
+10 FA
+570 2591 m
+(Starting from nowhere, the empty program will do.)s
+10 FH
+395 2491 m
+(1)s
+470 2491 m
+(\(**** #File "VAMP.PAS". #Indent on. ****\))s
+395 2441 m
+(2)s
+395 2391 m
+(3)s
+470 2391 m
+(\(***************************************************************\))s
+395 2341 m
+(4)s
+470 2341 m
+(\(* Routine: VAMP)s
+1070(-)ms
+1170(Main module of the VAMP system.)ms
+2020( *\))ms
+395 2291 m
+(5)s
+470 2291 m
+(\(* Purpose:)s
+870(Main module and unique entry point to the)ms
+2020( *\))ms
+395 2241 m
+(6)s
+470 2241 m
+(\(*)s
+870(VAMP-system.)ms
+2020( *\))ms
+395 2191 m
+(7)s
+470 2191 m
+(\(* Interface:)s
+870(TTY -)ms
+1070(All communication with the user)ms
+2020( *\))ms
+395 2141 m
+(8)s
+470 2141 m
+(\(*)s
+870(proceeds via the terminal.)ms
+2020( *\))ms
+395 2091 m
+(9)s
+470 2091 m
+(\(* Author/Date:)s
+870(VAMP project management, Sept. 12, 1983.)ms
+2020( *\))ms
+370 2041 m
+(10)s
+470 2041 m
+(\(***************************************************************\))s
+370 1991 m
+(11)s
+370 1941 m
+(12)s
+470 1941 m
+(\(********************** VAMP \(body\) **************************\))s
+370 1891 m
+(13)s
+370 1841 m
+(14)s
+470 1841 m
+(\(*********************** End of VAMP *************************\))s
+370 1791 m
+(15)s
+370 1741 m
+(16)s
+370 1691 m
+(18)s
+470 1691 m
+(\(********* VAMP \(body\) #def ***********\))s
+370 1641 m
+(19)s
+470 1641 m
+(PROGRAM)s
+770(VAMP \(INPUT, OUTPUT\);)ms
+370 1591 m
+(20)s
+570 1591 m
+(BEGIN)s
+370 1541 m
+(21)s
+570 1541 m
+(WRITELN \('!!! VAMP was here !!!'\);)s
+370 1491 m
+(22)s
+570 1491 m
+(END \(*VAMP*\).)s
+370 1441 m
+(23)s
+470 1441 m
+(\(********** End of VAMP \(body\) *********\))s
+12 FAB
+295 1344 m
+(Remarks:)s
+12 FA
+389 1284 m
+(There)s
+523(are)ms
+602(two)ms
+695(stubs)ms
+816(in)ms
+873(this)ms
+964(section.)ms
+1136(Line)ms
+1246(1-14)ms
+1355(and)ms
+1446(line)ms
+1539(18-23.)ms
+1686(Both)ms
+1801(stub-blocks)ms
+2050(have)ms
+2162(a)ms
+295 1224 m
+(stub-segment)s
+574(of)ms
+628(one)ms
+713(line)ms
+800(only)ms
+901(\(lines)ms
+1025(1)ms
+1063(and)ms
+1147(18)ms
+1210(respectively\).)ms
+389 1164 m
+(The)s
+480(first)ms
+575(stub-segment)ms
+856(has)ms
+937(no)ms
+1001(identification.)ms
+1294(It)ms
+1339(specifies)ms
+1528(the)ms
+1603(start)ms
+1703(of)ms
+1759(a)ms
+1795(new)ms
+1893(output)ms
+2034(module)ms
+295 1104 m
+(by)s
+357(the)ms
+431(FILE)ms
+549(option)ms
+689(and)ms
+774(thus)ms
+870(is)ms
+915(not)ms
+992(meant)ms
+1126(to)ms
+1178(be)ms
+1238(referenced)ms
+1461(\(see)ms
+1554(also)ms
+1647(example)ms
+1829(5\).)ms
+389 1044 m
+(Line)s
+494(2)ms
+533(\(an)ms
+611(L5\))ms
+697(separates)ms
+894(line)ms
+982(3)ms
+1021(\(an)ms
+1099(L4\))ms
+1185(from)ms
+1296(the)ms
+1371(stub-segment)ms
+1652(and)ms
+1738(makes)ms
+1879(it)ms
+1921(belong)ms
+2071(to)ms
+2123(the)ms
+295 984 m
+(code-segment)s
+585(which)ms
+719(expands)ms
+896(over)ms
+997(lines)ms
+1104(2-11.)ms
+389 924 m
+(There)s
+525(resides)ms
+684(only)ms
+793(one)ms
+885(slot)ms
+978(inside)ms
+1117(the)ms
+1198(first)ms
+1299(stub)ms
+1402(\(line)ms
+1514(12\))ms
+1601(and)ms
+1693(this)ms
+1785(slot)ms
+1878(is)ms
+1931(identified)ms
+2143(as)ms
+295 864 m
+(")s
+11 FH
+(VAMPBODY)s
+12 FA
+(".)s
+580(The)ms
+671(second)ms
+822(stub)ms
+918(has)ms
+997(no)ms
+1059(slots)ms
+1164(at)ms
+1212(all.)ms
+389 804 m
+(Line)s
+489(13)ms
+548(is)ms
+590(a)ms
+621(trivial)ms
+749(code-segment)ms
+1036(and)ms
+1117(line)ms
+1201(14)ms
+1260(marks)ms
+1391(the)ms
+1461(end)ms
+1542(of)ms
+1592(the)ms
+1662(first)ms
+1752(stub-block.)ms
+1984(The)ms
+2071(string)ms
+295 744 m
+(following)s
+501(the)ms
+575("End)ms
+689(of")ms
+763(is)ms
+809(optional)ms
+985(and)ms
+1070(does)ms
+1174(not)ms
+1251(have)ms
+1357(to)ms
+1409(match)ms
+1544(the)ms
+1617(stub)ms
+1713(name)ms
+1834(in)ms
+1885(any)ms
+1970(way.)ms
+8 FA
+295 254 m
+(CLiP)s
+373(provisional)ms
+532(user)ms
+595(manual)ms
+702(\(version)ms
+819(2.100\))ms
+4 1250 430 2044 li
+endpage
+%%Page: 4 5
+begpage
+10 FC
+1453 3182 m
+(3.2 Example 2: Multiple slots)s
+10 FCB
+2161 3182 m
+(5)s
+12 FCB
+295 3008 m
+(3.2 Example 2: Multiple slots)s
+10 FAIB
+470 2926 m
+(Environment module)s
+10 FA
+(:)s
+10 FA
+570 2876 m
+(In the past there have been made several changes in the VAMP program. These changes have)s
+10 FA
+470 2826 m
+(been made in the extracted modules rather then in the VAMP source. To make source files consistent)s
+10 FA
+470 2776 m
+(with the modules, the source files have been updated in march 1990 by Jeroen Reef.)s
+10 FA
+570 2726 m
+(Furthermore, the updated source files contain two additional modules, VAMP.MSG and)s
+10 FA
+470 2676 m
+(DECLAR_MOD. The module VAMP.MSG contains the error messages of VAMP and the module)s
+10 FA
+470 2626 m
+(DECLAR_MOD contains the types and constants used by several modules of VAMP. This module)s
+10 FA
+470 2576 m
+(uses the ENVIRONMENT, which directs the compiler to generate an environment file)s
+10 FA
+470 2526 m
+(DECLAR.PEN. Other modules can reference the identifiers declared in DECLAR_MOD by inheriting)s
+10 FA
+470 2476 m
+(the environment with the INHERIT attribute.)s
+10 FH
+395 2359 m
+(1)s
+470 2359 m
+(\(****** #File "DECLAR_MOD.PAS". #Indent ON. ******\))s
+395 2309 m
+(2)s
+395 2259 m
+(3)s
+470 2259 m
+(\(***************************************************************\))s
+395 2209 m
+(4)s
+470 2209 m
+(\(* Module to contain all parameters and global declarations)s
+2020( *\))ms
+395 2159 m
+(5)s
+470 2159 m
+(\(* of the VAMP system.)s
+2020( *\))ms
+395 2109 m
+(6)s
+470 2109 m
+(\(***************************************************************\))s
+395 2059 m
+(7)s
+470 2059 m
+([ENVIRONMENT \('DECLAR.PEN'\)])s
+1270(MODULE DECLARS;)ms
+395 2009 m
+(8)s
+395 1959 m
+(9)s
+470 1959 m
+(\(********** Parameters of the VAMP-system \(#mul\) *************\))s
+370 1909 m
+(10)s
+370 1859 m
+(11)s
+470 1859 m
+(TYPE)s
+370 1809 m
+(12)s
+570 1809 m
+(ABSTRACT = \(DEFINED, UNDEFINED\);)s
+370 1759 m
+(13)s
+570 1759 m
+(\(********* Simple types of the VAMP-system \(#mul\) ********\))s
+370 1709 m
+(14)s
+570 1709 m
+(\(******** Structured types of the VAMP-system \(#mul\) ******\))s
+370 1659 m
+(15)s
+470 1659 m
+(END.)s
+370 1609 m
+(16)s
+470 1609 m
+(\(***************** End of DECLARE_MOD.PAS ********************\))s
+12 FAB
+295 1513 m
+(Remarks:)s
+12 FA
+389 1453 m
+(The)s
+483(stub-block)ms
+711(extends)ms
+880(over)ms
+986(16)ms
+1052(lines.)ms
+1176(Line)ms
+1284(1)ms
+1326(is)ms
+1376(the)ms
+1454(stub-segment)ms
+1737(and)ms
+1826(line)ms
+1918(16)ms
+1984(closes)ms
+2123(the)ms
+295 1393 m
+(stub-block.)s
+532(Lines)ms
+657(2-8)ms
+737(constitute)ms
+945(the)ms
+1020(first)ms
+1115(code-segment)ms
+1406(of)ms
+1462(the)ms
+1536(stub)ms
+(,)s
+1646(lines)ms
+1754(10-12)ms
+1885(the)ms
+1960(middle)ms
+2112(one)ms
+295 1333 m
+(and)s
+379(line)ms
+467(15)ms
+529(the)ms
+603(last)ms
+685(one.)ms
+389 1273 m
+(There)s
+515(are)ms
+587(three)ms
+697(slots)ms
+799(\(or)ms
+868(slot-segments\),)ms
+1182(lines)ms
+1287(9,)ms
+1335(13)ms
+1395(and)ms
+1478(14.)ms
+1550(All)ms
+1625(slots)ms
+1727(consist)ms
+1876(of)ms
+1928(one)ms
+2010(line)ms
+2096(only)ms
+295 1213 m
+(and)s
+380(carry)ms
+496(the)ms
+570(multiple)ms
+750(option.)ms
+903(For)ms
+986(instance)ms
+1163(the)ms
+1237(first)ms
+1331(slot)ms
+1416(can)ms
+1499(swallow)ms
+1679(any)ms
+1764(number)ms
+1930(of)ms
+1985(parameter)ms
+295 1153 m
+(definition)s
+501(that)ms
+589(might)ms
+718(turn)ms
+811(up)ms
+874(in)ms
+925(the)ms
+999(future.)ms
+389 1093 m
+(The)s
+479(names)ms
+619(\(identifications\))ms
+951(of)ms
+1005(the)ms
+1079(slots)ms
+1183(are)ms
+1256(respectively)ms
+460 1008 m
+(")s
+11 FH
+(PARAMETERSOFTHEVAMPSYSTEM)s
+12 FA
+(")s
+460 948 m
+(")s
+11 FH
+(SIMPLETYPESOFTHEVAMPSYSTEM)s
+12 FA
+(")s
+460 888 m
+(")s
+11 FH
+(STRUCTUREDTYPESOFTHEVAMPSYSTEM)s
+12 FA
+(")s
+8 FA
+295 254 m
+(CLiP)s
+373(provisional)ms
+532(user)ms
+595(manual)ms
+702(\(version)ms
+819(2.100\))ms
+4 800 430 1988 li
+4 500 430 2704 li
+endpage
+%%Page: 5 6
+begpage
+10 FCB
+295 3182 m
+(6)s
+10 FC
+460 3182 m
+(Examples)s
+12 FCB
+295 3008 m
+(3.3 Example 3: Quick stubs and abstract data types)s
+10 FAIB
+495 2926 m
+(First level data structures:)s
+10 FA
+595 2876 m
+(This level introduces the data-structure TTY_INFO, containing the initial communication)s
+10 FA
+495 2826 m
+(between the terminal and the program. The definition requires in addition four system parameters)s
+10 FA
+495 2776 m
+(and some constants and types which are related to file specifications. The structure of CODE_INFO)s
+10 FA
+495 2726 m
+(is left open for the time being.)s
+10 FH
+420 2626 m
+(1)s
+495 2626 m
+(\(********** Parameters of the VAMP-system \(#quick\) ***********\))s
+420 2576 m
+(2)s
+495 2576 m
+(\(*)s
+795(-------- Parameters of TTY_INFO ---------)ms
+2045( *\))ms
+420 2526 m
+(3)s
+495 2526 m
+(MAX_FILE_SPEC_L = 255;)s
+1195(\(* Maximum length file-specific.)ms
+2045( *\))ms
+420 2476 m
+(4)s
+495 2476 m
+(MAX_FILE_NAME_L = 39;)s
+1195(\(* Maximum length file-name.)ms
+2045( *\))ms
+420 2426 m
+(5)s
+495 2426 m
+(MAX_FILE_EXT_L = 39;)s
+1195(\(* Maximum length file-extension.)ms
+2045( *\))ms
+420 2376 m
+(6)s
+495 2376 m
+(MAX_IN_FILES =)s
+995( 8;)ms
+1195(\(* Maximum number of in-files for)ms
+2045( *\))ms
+420 2326 m
+(7)s
+1195 2326 m
+(\(* a single run.)s
+2045( *\))ms
+420 2276 m
+(8)s
+495 2276 m
+(UPB_IN_FILES =)s
+995(9;)ms
+1195(\(* = MAX_IN_FILES + 1.)ms
+2045( *\))ms
+420 2226 m
+(9)s
+495 2226 m
+(MAX_MODULES =)s
+995(10;)ms
+1195(\(* Maximum number of modules)ms
+2045( *\))ms
+395 2176 m
+(10)s
+1195 2176 m
+(\(* specified for a run.)s
+2045( *\))ms
+395 2126 m
+(11)s
+495 2126 m
+(UPB_MODULES =)s
+995(11;)ms
+1195(\(* = MAX_MODULES + 1.)ms
+2045( *\))ms
+395 2076 m
+(12)s
+495 2076 m
+(EMPTY = '';)s
+395 2026 m
+(13)s
+395 1976 m
+(14)s
+495 1976 m
+(\(********* Simple types of the VAMP-system \(#quick\) **********\))s
+395 1926 m
+(15)s
+495 1926 m
+(\(*)s
+795(-------- Simple types of TTY_INFO ---------)ms
+2045( *\))ms
+395 1876 m
+(16)s
+495 1876 m
+(FILE_SPEC = VARYING [MAX_FILE_SPEC_L] OF CHAR;)s
+395 1826 m
+(17)s
+495 1826 m
+(FILE_NAME = VARYING [MAX_FILE_NAME_L] OF CHAR;)s
+395 1776 m
+(18)s
+495 1776 m
+(FILE_EXT = VARYING [MAX_FILE_EXT_L] OF CHAR;)s
+395 1726 m
+(19)s
+395 1676 m
+(20)s
+495 1676 m
+(\(******** Structured types of the VAMP-system ****************\))s
+395 1626 m
+(21)s
+495 1626 m
+(\(*)s
+695(-------- Structured types of TTY_INFO ---------)ms
+2045( *\))ms
+395 1576 m
+(22)s
+495 1576 m
+(TTY_INFO =)s
+795(RECORD)ms
+395 1526 m
+(23)s
+895 1526 m
+(IN_FILES:)s
+1195(ARRAY [1..UPB_IN_FILES] OF FILE_SPEC;)ms
+395 1476 m
+(24)s
+895 1476 m
+(MODULES:)s
+1195(ARRAY [1..UPB_MODULES] OF FILE_NAME;)ms
+395 1426 m
+(25)s
+895 1426 m
+(DFLT_EXT:)s
+1195(FILE_EXT;)ms
+395 1376 m
+(26)s
+895 1376 m
+(INV_MODE,)s
+395 1326 m
+(27)s
+895 1326 m
+(GO:)s
+1195(BOOLEAN;)ms
+395 1276 m
+(29)s
+795 1276 m
+(END \(*RECORD*\);)s
+395 1226 m
+(30)s
+495 1226 m
+(\(**************** Declaration of CODE_INFO *******************\))s
+395 1176 m
+(31)s
+495 1176 m
+(\(******** End of Structured types of the VAMP-system *********\))s
+395 1126 m
+(32)s
+395 1076 m
+(33)s
+395 1026 m
+(34)s
+495 1026 m
+(\(************* Declaration of CODE_INFO \(#def\) ***************\))s
+395 976 m
+(35)s
+495 976 m
+(CODE_INFO = ABSTRACT;)s
+395 926 m
+(36)s
+495 926 m
+(\(******************** End of declaration *********************\))s
+12 FAB
+295 846 m
+(Remarks:)s
+12 FA
+389 786 m
+(This)s
+487(section)ms
+639(contains)ms
+816(five)ms
+904(stubs)ms
+1017(altogether,)ms
+1239(i.e.)ms
+1310(lines)ms
+1415(1-12,)ms
+1529(14-18,)ms
+1668(20-31)ms
+1795(and)ms
+1877(34-36.)ms
+2016(The)ms
+2104(first)ms
+295 726 m
+(two)s
+384(blocks)ms
+529(one)ms
+616(have)ms
+726(no)ms
+790(internal)ms
+958(slots.)ms
+1077(The)ms
+1169(quick)ms
+1295(option)ms
+1437(promotes)ms
+1638(them)ms
+1753(to)ms
+1807(quick)ms
+1932(stubs,)ms
+2062(which)ms
+295 666 m
+(means)s
+435(that)ms
+522(they)ms
+621(are)ms
+694(completed)ms
+915(by)ms
+978(the)ms
+1051(first)ms
+1144(line)ms
+1232(that)ms
+1319(is)ms
+1365(not)ms
+1442(an)ms
+1501(L6.)ms
+389 606 m
+(The)s
+480(third)ms
+587(stub)ms
+684(\(20-31\))ms
+847(illustrates)ms
+1055(how)ms
+1155(an)ms
+1215(abstract)ms
+1384(data)ms
+1480(type)ms
+1580(can)ms
+1663(be)ms
+1723(implemented.)ms
+2010(The)ms
+2101(stub)ms
+295 546 m
+(is)s
+341(an)ms
+402(ordinary)ms
+584(one)ms
+670(with)ms
+772(one)ms
+858(slot)ms
+943(- identified)ms
+1177(as)ms
+1232(")ms
+11 FH
+(DECLARATIONOFCODEINFO)s
+12 FA
+(" -)s
+1893(at)ms
+1943(line)ms
+2031(30.)ms
+2107(The)ms
+295 486 m
+(slot)s
+380(is)ms
+427(by)ms
+490(default)ms
+642(satisfied)ms
+822(with)ms
+924(the)ms
+998(stub)ms
+1095(at)ms
+1144(lines)ms
+1252(34-36.)ms
+1394(But)ms
+1480(this)ms
+1565(declaration)ms
+1800(will)ms
+1891(be)ms
+1952(replaced)ms
+2134(by)ms
+295 426 m
+(a)s
+329(new)ms
+425(one)ms
+510(at)ms
+558(some)ms
+676(time)ms
+778(in)ms
+829(the)ms
+903(future.)ms
+8 FA
+295 254 m
+(CLiP)s
+373(provisional)ms
+532(user)ms
+595(manual)ms
+702(\(version)ms
+819(2.100\))ms
+4 2050 455 1929 li
+endpage
+%%Page: 6 7
+begpage
+10 FC
+1182 3182 m
+(3.4 Example 4: An ordinary refinement step)s
+10 FCB
+2161 3182 m
+(7)s
+12 FCB
+295 3008 m
+(3.4 Example 4: An ordinary refinement step)s
+10 FAIB
+470 2926 m
+(Body of VAMP:)s
+10 FA
+570 2876 m
+(The input-files will be processed sequentially in the same order as given by the user. The inter-)s
+10 FA
+470 2826 m
+(mediate file "VAMP.TMP" is guarded by a sentinel to simplify backspacing later on and it needs an)s
+10 FA
+470 2776 m
+(additional global declaration.)s
+10 FH
+395 2676 m
+(1)s
+570 2676 m
+(\(*********** Simple types of the VAMP-system ************\))s
+395 2626 m
+(2)s
+570 2626 m
+(FTYPE = FILE OF CHAR;)s
+395 2576 m
+(3)s
+570 2576 m
+(\(****************** End of declaration ******************\))s
+470 2476 m
+(Now the body of VAMP expands to)s
+395 2376 m
+(4)s
+470 2376 m
+(\(********************** VAMP \(body\) **************************\))s
+395 2326 m
+(5)s
+470 2326 m
+([INHERIT \('SYS$LIBRARY:STARLET.PEN', 'DECLAR.PEN'\)])s
+395 2276 m
+(6)s
+470 2276 m
+(PROGRAM)s
+770(VAMP \(INPUT, OUTPUT\);)ms
+395 2226 m
+(7)s
+395 2176 m
+(8)s
+470 2176 m
+(\(***************** Constants of VAMP \(#mult\) *****************\))s
+395 2126 m
+(9)s
+470 2126 m
+(\(***************** Types of VAMP \(#mult\) *********************\))s
+370 2076 m
+(10)s
+470 2076 m
+(VAR)s
+370 2026 m
+(11)s
+470 2026 m
+( FILE_CNT:)s
+970(1..UPB_IN_FILES;)ms
+370 1976 m
+(12)s
+470 1976 m
+( CURR_IN_FILE:)s
+970(TEXT;)ms
+1170(\(* Currently read file.)ms
+2020( *\))ms
+370 1926 m
+(13)s
+470 1926 m
+( CODE_LINES:)s
+970(FTYPE;)ms
+1170(\(* From input extracted code.)ms
+2020( *\))ms
+370 1876 m
+(14)s
+470 1876 m
+( TTY_DATA:)s
+970(TTY_INFO;)ms
+370 1826 m
+(15)s
+470 1826 m
+( CODE_STRUCT:)s
+970(CODE_INFO;)ms
+370 1776 m
+(16)s
+570 1776 m
+(\(************ Variables of VAMP \(#mult\) ******************\))s
+370 1726 m
+(17)s
+370 1676 m
+(18)s
+470 1676 m
+([EXTERNAL] PROCEDURE)s
+1070(ASKTTY \(VAR TTY_DATA: TTY_INFO\); EXTERN;)ms
+370 1626 m
+(19)s
+470 1626 m
+(\(*************** Functions of VAMP \(#mult\) *******************\))s
+370 1576 m
+(20)s
+370 1526 m
+(21)s
+470 1526 m
+(BEGIN)s
+370 1476 m
+(22)s
+570 1476 m
+(\(* Take the data, that are needed for this VAMP run from)s
+2020( *\))ms
+370 1426 m
+(23)s
+570 1426 m
+(\(* the terminal.)s
+2020( *\))ms
+370 1376 m
+(24)s
+570 1376 m
+(ASKTTY \(TTY_DATA\);)s
+370 1326 m
+(25)s
+570 1326 m
+(WITH TTY_DATA DO)s
+370 1276 m
+(26)s
+570 1276 m
+(IF GO THEN)s
+370 1226 m
+(27)s
+570 1226 m
+(BEGIN)s
+370 1176 m
+(28)s
+670 1176 m
+(\(********************* VAMP \(C\) **********************\))s
+370 1126 m
+(29)s
+670 1126 m
+(\(** Initialize CODE_STRUCT.)s
+2020(**\))ms
+370 1076 m
+(30)s
+670 1076 m
+(\(*******************************************************\))s
+370 1026 m
+(31)s
+370 976 m
+(32)s
+670 976 m
+(OPEN \(CODE_LINES, FILE_NAME :='VAMP.TMP',)s
+370 926 m
+(33)s
+770 926 m
+( ORGANIZATION := RELATIVE, ACCESS_METHOD := DIRECT,)s
+370 876 m
+(34)s
+770 876 m
+( DISPOSITION := DELETE\);)s
+370 826 m
+(35)s
+670 826 m
+(REWRITE \(CODE_LINES\);)s
+370 776 m
+(36)s
+670 776 m
+(FILE_CNT := 1;)s
+370 726 m
+(37)s
+670 726 m
+(WHILE \(IN_FILES [FILE_CNT] <> EMPTY\) DO)s
+370 676 m
+(38)s
+670 676 m
+(BEGIN)s
+370 626 m
+(39)s
+770 626 m
+(WRITELN \('Proceeding on file ',IN_FILES [FILE_CNT]\);)s
+370 576 m
+(40)s
+570 576 m
+( )s
+770(OPEN \(CURR_IN_FILE, FILE_NAME := IN_FILES [FILE_CNT],)ms
+370 526 m
+(41)s
+870 526 m
+( HISTORY := READONLY\);)s
+370 476 m
+(42)s
+770 476 m
+(RESET \(CURR_IN_FILE\);)s
+370 426 m
+(43)s
+770 426 m
+(PUT \(CODE_LINES\);)s
+1270(\(* Start file with a sentinel. *\))ms
+370 376 m
+(44)s
+8 FA
+295 254 m
+(CLiP)s
+373(provisional)ms
+532(user)ms
+595(manual)ms
+702(\(version)ms
+819(2.100\))ms
+4 2600 430 1654 li
+endpage
+%%Page: 7 8
+begpage
+10 FCB
+295 3182 m
+(8)s
+10 FC
+460 3182 m
+(Examples)s
+10 FH
+370 3016 m
+(45)s
+770 3016 m
+(\(****************** VAMP \(A\) *********************\))s
+370 2966 m
+(46)s
+770 2966 m
+(\(** Build CODE_STRUCT and fill CODE_LINES by a)s
+2020(**\))ms
+370 2916 m
+(47)s
+770 2916 m
+(\(** scan of CURR_IN_FILE, using the information)s
+2020(**\))ms
+370 2866 m
+(48)s
+770 2866 m
+(\(** of MODULES, DFLT_EXT and INV_MODE.)s
+2020(**\))ms
+370 2816 m
+(49)s
+770 2816 m
+(\(***************************************************\))s
+370 2766 m
+(50)s
+370 2716 m
+(51)s
+770 2716 m
+(CLOSE \(CURR_IN_FILE\);)s
+370 2666 m
+(52)s
+770 2666 m
+(FILE_CNT := FILE_CNT + 1;)s
+370 2616 m
+(53)s
+670 2616 m
+(END \(*WHILE*\);)s
+370 2566 m
+(54)s
+370 2516 m
+(55)s
+670 2516 m
+(\(******************** VAMP \(B\) ***********************\))s
+370 2466 m
+(56)s
+670 2466 m
+(\(** Generate the files as specified by CODE_STRUCT)s
+2020(**\))ms
+370 2416 m
+(57)s
+670 2416 m
+(\(** from the data contained by CODE_LINES.)s
+2020(**\))ms
+370 2366 m
+(58)s
+670 2366 m
+(\(*******************************************************\))s
+370 2316 m
+(59)s
+370 2266 m
+(60)s
+670 2266 m
+(\(* Close and Delete scratch-file CODE_LINES.)s
+2020( *\))ms
+370 2216 m
+(61)s
+670 2216 m
+(CLOSE \(CODE_LINES, DELETE\);)s
+370 2166 m
+(62)s
+570 2166 m
+(END)s
+370 2116 m
+(63)s
+570 2116 m
+(ELSE)s
+370 2066 m
+(64)s
+670 2066 m
+(WRITELN \('!!! You specified an empty run - try again !!!'\);)s
+370 2016 m
+(65)s
+470 2016 m
+(END \(*VAMP*\).)s
+370 1966 m
+(66)s
+470 1966 m
+(\(******************* End of VAMP \(body\) **********************\))s
+370 1916 m
+(67)s
+370 1866 m
+(68)s
+370 1816 m
+(69)s
+470 1816 m
+(\(************ Constants of VAMP \(#leader, #quick\) ************\))s
+370 1766 m
+(70)s
+470 1766 m
+(CONST)s
+370 1716 m
+(71)s
+470 1716 m
+(\(************ Types of VAMP \(#leader, #quick\) ****************\))s
+370 1666 m
+(72)s
+470 1666 m
+(TYPE)s
+12 FAB
+295 1586 m
+(Remarks:)s
+12 FA
+389 1526 m
+(This)s
+488(refinement)ms
+714(contains)ms
+891(four)ms
+985(stubs)ms
+1098(\(lines)ms
+1219(1-3,)ms
+1308(4-66,)ms
+1422(69-70)ms
+1549(and)ms
+1632(71-72\).)ms
+1787(The)ms
+1875(second)ms
+2024(stub)ms
+2118(has)ms
+295 1466 m
+(seven)s
+417(slots)ms
+518(\(lines)ms
+638(8,)ms
+685(9,)ms
+732(16,)ms
+803(19,)ms
+875(28-30,)ms
+1013(45-49)ms
+1139(and)ms
+1220(55-58\).)ms
+1375(Lines)ms
+1495(22,)ms
+1567(23)ms
+1626(and)ms
+1707(60)ms
+1766(are)ms
+1837(simple)ms
+1979(code-lines)ms
+295 1406 m
+(from)s
+404(CLiPs)ms
+542(point)ms
+657(of)ms
+711(view.)ms
+389 1346 m
+(The)s
+481(leader)ms
+617(option)ms
+760(of)ms
+816(the)ms
+891(last)ms
+975(two)ms
+1065(stubs)ms
+1182(defines)ms
+1341(the)ms
+1416(code)ms
+1525(that)ms
+1615(will)ms
+1707(be)ms
+1768(inserted)ms
+1941(in)ms
+1995(front)ms
+2106(of)ms
+2162(a)ms
+295 1286 m
+(stub)s
+390(that)ms
+478(matches)ms
+654(the)ms
+728(slot.)ms
+8 FA
+295 254 m
+(CLiP)s
+373(provisional)ms
+532(user)ms
+595(manual)ms
+702(\(version)ms
+819(2.100\))ms
+4 1400 430 2344 li
+endpage
+%%Page: 8 9
+begpage
+10 FC
+1312 3182 m
+(3.5 Example 5: A subroutine module)s
+10 FCB
+2161 3182 m
+(9)s
+12 FCB
+295 3008 m
+(3.5 Example 5: A subroutine module)s
+10 FH
+395 2926 m
+(1)s
+470 2926 m
+(\(****** #File "ASKTTY.PAS" ******\))s
+395 2876 m
+(2)s
+470 2876 m
+([INHERIT \('DECLAR.PEN'\)] MODULE ASKTTY \(INPUT, OUTPUT\);)s
+395 2826 m
+(3)s
+395 2776 m
+(4)s
+470 2776 m
+(\(*********** External procedures of ASKTTY \(#mult\) ************\))s
+395 2726 m
+(5)s
+395 2676 m
+(6)s
+470 2676 m
+(\(***************************************************************\))s
+395 2626 m
+(7)s
+470 2626 m
+(\(* Routine:)s
+870(ASKTTY)ms
+1070(-)ms
+1170(ASK information from TTY.)ms
+2020( *\))ms
+395 2576 m
+(8)s
+470 2576 m
+(\(* Purpose:)s
+870(To obtain from the TTY the information which)ms
+2020( *\))ms
+395 2526 m
+(9)s
+470 2526 m
+(\(*)s
+870(is needed to perform a VAMP run.)ms
+2020( *\))ms
+370 2476 m
+(10)s
+470 2476 m
+(\(* Interface:)s
+870(TTY_DATA -)ms
+1170(Data from TTY to VAMP.)ms
+2020( *\))ms
+370 2426 m
+(11)s
+470 2426 m
+(\(*)s
+870(TTY -)ms
+1170(Source of all knowledge.)ms
+2020( *\))ms
+370 2376 m
+(12)s
+470 2376 m
+(\(* Author/Date:)s
+870(VAMP project management, September 29, 1983.)ms
+2020( *\))ms
+370 2326 m
+(13)s
+470 2326 m
+(\(***************************************************************\))s
+370 2276 m
+(14)s
+470 2276 m
+([GLOBAL] PROCEDURE)s
+970(ASKTTY \(VAR TTY_DATA: TTY_INFO\);)ms
+370 2226 m
+(15)s
+370 2176 m
+(16)s
+470 2176 m
+(\(************* Constants of ASKTTY \(#multiple\) ***************\))s
+370 2126 m
+(17)s
+470 2126 m
+(\(************* Types of ASKTTY \(#multiple\) *******************\))s
+370 2076 m
+(18)s
+470 2076 m
+(\(************* Variables of ASKTTY \(#multiple\) ***************\))s
+370 2026 m
+(19)s
+470 2026 m
+(\(************* Procedures of ASKTTY \(#multiple\) **************\))s
+370 1976 m
+(20)s
+370 1926 m
+(21)s
+470 1926 m
+(BEGIN)s
+370 1876 m
+(22)s
+570 1876 m
+(WITH TTY_DATA DO)s
+370 1826 m
+(23)s
+570 1826 m
+(BEGIN)s
+370 1776 m
+(24)s
+670 1776 m
+(\(******************** ASKTTY \(1\) *********************\))s
+370 1726 m
+(25)s
+670 1726 m
+(\(** Get IN_FILES from TTY.)s
+2020(**\))ms
+370 1676 m
+(26)s
+670 1676 m
+(\(*******************************************************\))s
+370 1626 m
+(27)s
+370 1576 m
+(28)s
+670 1576 m
+(GO := NOT \(IN_FILES[1] = EMPTY\);)s
+370 1526 m
+(29)s
+670 1526 m
+(IF GO THEN)s
+370 1476 m
+(30)s
+670 1476 m
+(BEGIN)s
+370 1426 m
+(31)s
+770 1426 m
+(\(**************** ASKTTY \(2\) *********************\))s
+370 1376 m
+(32)s
+770 1376 m
+(\(** Ask which modules must be generated by VAMP.)s
+2020(**\))ms
+370 1326 m
+(33)s
+770 1326 m
+(\(** Set INV_MODE, MODULES and GO accordingly.)s
+2020(**\))ms
+370 1276 m
+(34)s
+770 1276 m
+(\(***************************************************\))s
+370 1226 m
+(35)s
+670 1226 m
+(END \(*IF*\);)s
+370 1176 m
+(36)s
+670 1176 m
+(IF GO THEN)s
+370 1126 m
+(37)s
+670 1126 m
+(BEGIN)s
+370 1076 m
+(38)s
+770 1076 m
+(\(**************** ASKTTY \(3\) *********************\))s
+370 1026 m
+(39)s
+770 1026 m
+(\(** Ask DFLT_EXT from the terminal.)s
+2020(**\))ms
+370 976 m
+(40)s
+770 976 m
+(\(***************************************************\))s
+370 926 m
+(41)s
+670 926 m
+(END \(*IF*\);)s
+370 876 m
+(42)s
+570 876 m
+(END \(*WITH*\);)s
+370 826 m
+(43)s
+470 826 m
+(END \(*ASKTTY*\);)s
+370 776 m
+(44)s
+370 726 m
+(45)s
+470 726 m
+(END \(*MODULE*\).)s
+370 676 m
+(46)s
+470 676 m
+(\(********************** End of MODULE ************************\))s
+370 626 m
+(47)s
+370 576 m
+(48)s
+370 526 m
+(49)s
+470 526 m
+(\(********** Constants of ASKTTY \(#leader, #quick\) ************\))s
+370 476 m
+(50)s
+470 476 m
+(CONST)s
+8 FA
+295 254 m
+(CLiP)s
+373(provisional)ms
+532(user)ms
+595(manual)ms
+702(\(version)ms
+819(2.100\))ms
+4 2500 430 1704 li
+endpage
+%%Page: 9 10
+begpage
+10 FCB
+295 3182 m
+(10)s
+10 FC
+460 3182 m
+(Examples)s
+10 FH
+370 3016 m
+(51)s
+470 3016 m
+(\(********** Types of ASKTTY \(#leader, #quick\) ****************\))s
+370 2966 m
+(52)s
+470 2966 m
+(TYPE)s
+370 2916 m
+(53)s
+470 2916 m
+(\(********** Variables of ASKTTY \(#leader, #quick\) ************\))s
+370 2866 m
+(54)s
+470 2866 m
+(VAR)s
+12 FAB
+295 2786 m
+(Remarks:)s
+12 FA
+389 2726 m
+(A)s
+437(clear)ms
+546(cut)ms
+620(example)ms
+802(of)ms
+856(a)ms
+890(subroutine)ms
+1114(definition)ms
+1320(in)ms
+1372(VAX/VMS)ms
+1614(Pascal)ms
+1755(that)ms
+1842(is)ms
+1888(to)ms
+1939(be)ms
+1998(compiled)ms
+295 2666 m
+(independently.)s
+606(The)ms
+699(refinement)ms
+931(contains)ms
+1113(stubs)ms
+1232(at)ms
+1283(lines)ms
+1393(1-46,)ms
+1513(49-50,)ms
+1657(51-52)ms
+1789(and)ms
+1877(53-54.)ms
+2022(The)ms
+2115(last)ms
+295 2606 m
+(three)s
+407(stubs)ms
+522(are)ms
+596(all)ms
+658(quick)ms
+782(stubs.)ms
+389 2546 m
+(The)s
+479(first)ms
+572(stub)ms
+668(is)ms
+714(a)ms
+749(main)ms
+861(stub.)ms
+970(It)ms
+1013(carries)ms
+1159(no)ms
+1221(identification)ms
+1501(and)ms
+1585(only)ms
+1687(specifies)ms
+1874(the)ms
+1948(name)ms
+2069(of)ms
+2123(the)ms
+295 2486 m
+(file)s
+374(that)ms
+461(will)ms
+551(finally)ms
+694(hold)ms
+795(the)ms
+869(module.)ms
+1044(Had)ms
+1140(the)ms
+1213(file-option)ms
+1437(be)ms
+1496(omitted,)ms
+1674(this)ms
+1758(would)ms
+1896(have)ms
+2003(meant)ms
+2137(an)ms
+295 2426 m
+(error.)s
+389 2366 m
+(Lines)s
+514(4,)ms
+567(16,)ms
+644(17,)ms
+721(18)ms
+786(and)ms
+873(19)ms
+937(are)ms
+1013(single-line)ms
+1239(slot)ms
+1326(for)ms
+1399(future)ms
+1533(declarations.)ms
+1802(The)ms
+1894(leader)ms
+2031(stubs)ms
+2148(at)ms
+295 2306 m
+(the)s
+368(end)ms
+453(secure)ms
+593(syntactic)ms
+783(details.)ms
+939(Lines)ms
+1062(24-26,)ms
+1204(31-34)ms
+1333(and)ms
+1418(38-40)ms
+1547(are)ms
+1621(ordinary)ms
+1803(slots)ms
+1907(again.)ms
+8 FA
+295 254 m
+(CLiP)s
+373(provisional)ms
+532(user)ms
+595(manual)ms
+702(\(version)ms
+819(2.100\))ms
+4 200 430 2944 li
+endpage
+%%Page: 10 11
+begpage
+10 FC
+1562 3182 m
+(4 Semantics of options)s
+10 FCB
+2138 3182 m
+(11)s
+14 FCB
+295 3001 m
+(4 Semantics of options)s
+12 FAB
+295 2906 m
+(#Comment)s
+12 FA
+543(\(stub,)ms
+668(slot\))ms
+389 2846 m
+(The)s
+478(comment)ms
+676(option)ms
+816(transforms)ms
+1042(the)ms
+1115(special)ms
+1266(CLIP-characters)ms
+1606(to)ms
+1657(a)ms
+1691(predefined)ms
+1917(format)ms
+2062(which)ms
+389 2786 m
+(suits)s
+501(a)ms
+544(particular)ms
+756(programming)ms
+1049(language.)ms
+1262(The)ms
+1361(option)ms
+1509(has)ms
+1596(an)ms
+1664(obligatory)ms
+1890(argument,)ms
+2112(e.g.)ms
+12 FAB
+389 2726 m
+(PASCAL)s
+12 FA
+(,)s
+12 FAB
+610(FORTRAN)ms
+12 FA
+(,)s
+12 FAB
+878(C)ms
+12 FA
+(,)s
+12 FAB
+936(ADA)ms
+12 FA
+1053(etc.)ms
+1133(or)ms
+12 FAB
+1183(ON)ms
+12 FA
+(/)s
+12 FAB
+(OFF)s
+12 FA
+(.)s
+1394(The)ms
+1480(ON/OFF)ms
+1667(argument)ms
+1865(specifies)ms
+2048(wether)ms
+389 2666 m
+(or)s
+443(not)ms
+520(the)ms
+594(slot-)ms
+696(or)ms
+750(stub-segment)ms
+1030(is)ms
+1076(to)ms
+1128(be)ms
+1188(included)ms
+1373(upon)ms
+1486(substitution.)ms
+1745(Comment)ms
+1955(options)ms
+2115(can)ms
+389 2606 m
+(be)s
+448(nested)ms
+588(and)ms
+673(the)ms
+747(most)ms
+857(local)ms
+966(version)ms
+1126(controls)ms
+1300(the)ms
+1373(operation.)ms
+12 FAB
+295 2516 m
+(#Default)s
+12 FA
+490(\(stub\))ms
+389 2456 m
+(A)s
+432(default)ms
+578(stub)ms
+668(is)ms
+708(prefixed)ms
+882(to)ms
+928(exclusively)ms
+1163(substituted)ms
+1387(if)ms
+1424(no)ms
+1481(other)ms
+1591(stub)ms
+1681(is)ms
+1722(found)ms
+1845(for)ms
+1911(that)ms
+1993(particular)ms
+389 2396 m
+(slot.)s
+12 FAB
+295 2306 m
+(#Indent)s
+12 FA
+474(\(stub,)ms
+599(slot\))ms
+389 2246 m
+(The)s
+481(indent)ms
+621(option)ms
+763(controls)ms
+939(the)ms
+1015(indentation)ms
+1255(of)ms
+1311(the)ms
+1387(generated)ms
+1596(listing.)ms
+1749(Indent)ms
+1891(options)ms
+2053(can)ms
+2137(be)ms
+389 2186 m
+(nested)s
+527(and)ms
+610(the)ms
+682(most)ms
+790(local)ms
+898(option)ms
+1036(overrules)ms
+1233(the)ms
+1305(more)ms
+1419(global)ms
+1554(ones.)ms
+1669(Indent)ms
+1808(has)ms
+1885(as)ms
+1938(one)ms
+2021(optional)ms
+389 2126 m
+(argument,)s
+12 FAB
+602(ON)ms
+12 FA
+690(or)ms
+12 FAB
+744(OFF)ms
+12 FA
+(.)s
+12 FAB
+295 2036 m
+(#File)s
+12 FA
+413(\(stub\))ms
+389 1976 m
+(The)s
+476(file)ms
+553(option)ms
+691(identifies)ms
+887(the)ms
+959(stub)ms
+1052(as)ms
+1104(a)ms
+1136(main)ms
+1246(stub)ms
+1340(\(viz.)ms
+1440(the)ms
+1511(root)ms
+1602(of)ms
+1654(a)ms
+1686(new)ms
+1780(module\).)ms
+1969(The)ms
+2057(option)ms
+389 1916 m
+(carries)s
+535(a)ms
+570(string)ms
+697(in)ms
+749(quotes)ms
+893(as)ms
+948(argument.)ms
+1162(This)ms
+1264(string)ms
+1391(specifies)ms
+1579(the)ms
+1653(name)ms
+1775(of)ms
+1829(the)ms
+1904(file)ms
+1983(to)ms
+2035(be)ms
+2096(gen-)ms
+389 1856 m
+(erated.)s
+12 FAB
+295 1766 m
+(#Leader)s
+12 FA
+485(\(stub\))ms
+389 1706 m
+(The)s
+477(leader)ms
+611(stub)ms
+705(is)ms
+750(usually)ms
+905(combined)ms
+1114(with)ms
+1214(multiple)ms
+1391(slots.)ms
+1507(It)ms
+1548(modifies)ms
+1734(the)ms
+1807(environment)ms
+2071(of)ms
+2123(the)ms
+389 1646 m
+(stubs)s
+506(that)ms
+596(will)ms
+688(be)ms
+750(substituted)ms
+982(by)ms
+1046(inserting)ms
+1236(the)ms
+1312(leader)ms
+1449(stub)ms
+1547(in)ms
+1601(front)ms
+1713(of)ms
+1769(the)ms
+1845(first)ms
+1940(encountered)ms
+389 1586 m
+(normal)s
+543(stub.)ms
+12 FAB
+295 1496 m
+(#Multiple)s
+12 FA
+515(\(slot\))ms
+389 1436 m
+(A)s
+437(multiple)ms
+616(slot)ms
+701(accepts)ms
+861(the)ms
+934(substitution)ms
+1180(of)ms
+1234(any)ms
+1319(number)ms
+1484(of)ms
+1538(stubs.)ms
+12 FAB
+295 1346 m
+(#Optional)s
+12 FA
+521(\(slot\))ms
+389 1286 m
+(An)s
+462(optional)ms
+639(slot)ms
+723(accepts)ms
+883(the)ms
+957(substitution)ms
+1202(of)ms
+1257(0)ms
+1294(or)ms
+1348(1)ms
+1386(stubs)ms
+1501(only.)ms
+12 FAB
+295 1196 m
+(#Overrule)s
+12 FA
+526(\(stub\))ms
+389 1136 m
+(The)s
+478(overrule)ms
+657(stub)ms
+752(replaces)ms
+928(the)ms
+1001(stub)ms
+1096(already)ms
+1255(substituted)ms
+1484(in)ms
+1535(a)ms
+1569(particular)ms
+1772(position.)ms
+1958(It)ms
+2000(is)ms
+2046(mainly)ms
+389 1076 m
+(meant)s
+523(for)ms
+594(testing)ms
+740(purposes.)ms
+12 FAB
+295 986 m
+(#Quick)s
+12 FA
+463(\(stub\))ms
+389 926 m
+(A)s
+440(quick)ms
+567(stub)ms
+666(is)ms
+715(a)ms
+753(stub)ms
+851(without)ms
+1020(internal)ms
+1188(structure)ms
+1379(\(viz.)ms
+1485(slots\).)ms
+1621(Following)ms
+1842(the)ms
+1919(stub)ms
+2018(segment)ms
+389 866 m
+(only)s
+490(L6-type)ms
+661(lines)ms
+768(are)ms
+841(allowed.)ms
+1025(Any)ms
+1123(other)ms
+1238(type)ms
+1337(of)ms
+1391(line)ms
+1479(will)ms
+1569(end)ms
+1654(the)ms
+1727(stub.)ms
+12 FAB
+295 776 m
+(#Separator)s
+12 FA
+546(\(stub\))ms
+389 716 m
+(A)s
+437(separator)ms
+633(stub)ms
+729(is)ms
+775(to)ms
+826(be)ms
+886(inserted)ms
+1056(between)ms
+1236(two)ms
+1323(consecutive)ms
+1572(stubs)ms
+1687(of)ms
+1741(the)ms
+1815(same)ms
+1930(slot.)ms
+12 FAB
+295 626 m
+(#Trailer)s
+12 FA
+485(\(stub\))ms
+389 566 m
+(The)s
+476(trailer)ms
+606(stub)ms
+699(is)ms
+742(the)ms
+814(counterpart)ms
+1051(of)ms
+1103(the)ms
+1174(default)ms
+1323(stub.)ms
+1429(It)ms
+1469(modifies)ms
+1654(the)ms
+1726(environment)ms
+1988(by)ms
+2048(adding)ms
+389 506 m
+(the)s
+462(trailer)ms
+594(stub)ms
+690(after)ms
+794(the)ms
+868(last)ms
+950(encountered)ms
+1206(normal)ms
+1361(stub.)ms
+8 FA
+295 254 m
+(CLiP)s
+373(provisional)ms
+532(user)ms
+595(manual)ms
+702(\(version)ms
+819(2.100\))ms
+endpage
+%%Page: 11 12
+begpage
+10 FCB
+295 3182 m
+(12)s
+10 FC
+460 3182 m
+(Using CLiP)s
+14 FCB
+295 3001 m
+(5 Using CLiP)s
+12 FA
+295 2906 m
+(The)s
+399(complete)ms
+610(CLiP)ms
+742(system)ms
+908(for)ms
+994(DOS)ms
+1121(and)ms
+1220(VMS)ms
+1356(consists)ms
+1541(of)ms
+1610(two)ms
+1712(independent)ms
+1983(programs,)ms
+295 2846 m
+(CLIP_1.EXE)s
+584(and)ms
+678(CLIP_2.EXE.)ms
+980(The)ms
+1079(Unix)ms
+1201(version)ms
+1369(has)ms
+1457(only)ms
+1568(one)ms
+1662(program,)ms
+1865(CLIP,)ms
+2007(which)ms
+2151(is)ms
+295 2786 m
+(functionally)s
+549(identical)ms
+734(to)ms
+785(CLIP_2.)ms
+969(CLIP_1)ms
+1140(prepares)ms
+1321(a)ms
+1356(file,)ms
+1448(CLIP.INI,)ms
+1663(telling)ms
+1804(CLIP_2)ms
+1975(\(the)ms
+2065(actual)ms
+295 2726 m
+(module)s
+465(extractor\))ms
+679(literally)ms
+855(everything)ms
+1089(it)ms
+1137(has)ms
+1223(to)ms
+1282(know)ms
+1414(in)ms
+1473(order)ms
+1598(to)ms
+1657(perform)ms
+1838(a)ms
+1881(run)ms
+1967(\(a)ms
+2026(detailed)ms
+295 2666 m
+(description)s
+534(of)ms
+592(the)ms
+670(structure)ms
+862(of)ms
+921(an)ms
+985(INI-file)ms
+1155(is)ms
+1205(in)ms
+1261(the)ms
+1339(next)ms
+1442(section\).)ms
+1630(Thus)ms
+1747(CLIP.INI)ms
+1954(specifies)ms
+2146(to)ms
+295 2606 m
+(CLIP_2)s
+465(\(CLIP\):)ms
+389 2546 m
+(-)s
+460(the)ms
+534(files)ms
+632(it)ms
+673(has)ms
+752(to)ms
+803(read)ms
+902(\(i.e.)ms
+992(the)ms
+1066(source)ms
+1209(files\),)ms
+389 2486 m
+(-)s
+460(the)ms
+534(modules)ms
+716(it)ms
+756(should)ms
+902(extract)ms
+1050(\(i.e.)ms
+1141(target)ms
+1267(modules\),)ms
+389 2426 m
+(-)s
+460(the)ms
+534(name)ms
+655(of)ms
+709(the)ms
+782(report)ms
+914(file,)ms
+389 2366 m
+(-)s
+460(the)ms
+532(syntax)ms
+674(of)ms
+726(the)ms
+798(CLiP-lines)ms
+1026(\(i.e.)ms
+1114(the)ms
+1186(style)ms
+1292(of)ms
+1344(the)ms
+1416(lines)ms
+1522(that)ms
+1607(trigger)ms
+1752(the)ms
+1824(module)ms
+1984(extraction)ms
+460 2306 m
+(process\).)s
+295 2246 m
+(CLIP_1)s
+465(allows)ms
+607(a)ms
+641(very)ms
+742(detailed)ms
+912(specification)ms
+1179(of)ms
+1232(the)ms
+1305(extraction)ms
+1517(process,)ms
+1691(much)ms
+1814(more)ms
+1928(detailed)ms
+2098(than)ms
+295 2186 m
+(you)s
+384(will)ms
+477(need)ms
+586(in)ms
+640(general.)ms
+815(For)ms
+899(this)ms
+986(reason)ms
+1131(the)ms
+1207(CLiP)ms
+1328(system)ms
+1482(comes)ms
+1624(with)ms
+1728(a)ms
+1765(couple)ms
+1913(of)ms
+1970(routines)ms
+2146(to)ms
+295 2126 m
+(shortcut)s
+465(CLIP_1)ms
+632(and)ms
+713(for)ms
+781(Unix)ms
+890(users)ms
+1002(these)ms
+1113(routines)ms
+1284(are)ms
+1354(the)ms
+1424(primary)ms
+1591(tool)ms
+1678(to)ms
+1726(construct)ms
+1919(their)ms
+2019(INI-file.)ms
+295 2066 m
+(For)s
+378(a)ms
+414(description)ms
+650(of)ms
+706(these)ms
+823(routines)ms
+998(we)ms
+1070(refer)ms
+1179(to)ms
+1232(section)ms
+1387("Using)ms
+1541(CLiP")ms
+1681(of)ms
+1737(the)ms
+1812(READ_ME)ms
+2062(file)ms
+2143(of)ms
+295 2006 m
+(this)s
+379(release.)ms
+389 1946 m
+(When)s
+520(using)ms
+641(CLiP)ms
+759(it)ms
+800(is)ms
+846(recommended)ms
+1141(to)ms
+1193(introduce)ms
+1394(at)ms
+1443(least)ms
+1547(the)ms
+1620(following)ms
+1827(directories:)ms
+389 1886 m
+(-)s
+460(A)ms
+514(directory)ms
+711(for)ms
+787(the)ms
+865(source)ms
+1013(files)ms
+1117(CLiP)ms
+1240(will)ms
+1335(use.)ms
+1431(This)ms
+1537(directory)ms
+1735(also)ms
+1833(holds)ms
+1959(the)ms
+2037(various)ms
+460 1826 m
+(INI-file)s
+625(you)ms
+713(maintain)ms
+900(to)ms
+952(conduct)ms
+1123(the)ms
+1196(extraction)ms
+1409(process.)ms
+389 1766 m
+(-)s
+460(A)ms
+509(directory)ms
+702(to)ms
+753(contain)ms
+913(the)ms
+986(extracted)ms
+1182(modules.)ms
+389 1706 m
+(-)s
+460(A)ms
+509(directory)ms
+702(to)ms
+753(contain)ms
+913(the)ms
+986(results)ms
+1130(of)ms
+1184(the)ms
+1257(compilation)ms
+1509(and)ms
+1593(linking)ms
+1748(of)ms
+1802(the)ms
+1875(modules.)ms
+389 1646 m
+(-)s
+460(In)ms
+521(case)ms
+627(CLiP)ms
+753(is)ms
+806(used)ms
+917(in)ms
+975(combination)ms
+1245(with)ms
+1354(a)ms
+1396(word-processor,)ms
+1739(it)ms
+1786(is)ms
+1839(wise)ms
+1951(to)ms
+2009(keep)ms
+2123(the)ms
+460 1586 m
+(word-processor)s
+784(files)ms
+882(again)ms
+1003(in)ms
+1054(a)ms
+1089(separate)ms
+1265(directory.)ms
+1471(In)ms
+1525(this)ms
+1610(case)ms
+1708(the)ms
+1782(source)ms
+1925(file)ms
+2004(directory)ms
+460 1526 m
+(should)s
+606(be)ms
+666(fed)ms
+742(with)ms
+843(ASCII)ms
+987(exports)ms
+1146(from)ms
+1256(word-processor)ms
+1579(files.)ms
+8 FA
+295 254 m
+(CLiP)s
+373(provisional)ms
+532(user)ms
+595(manual)ms
+702(\(version)ms
+819(2.100\))ms
+endpage
+%%Page: 12 13
+begpage
+10 FC
+1467 3182 m
+(6 The structure of an INI-file)s
+10 FCB
+2138 3182 m
+(13)s
+14 FCB
+295 3001 m
+(6 The structure of an INI-file)s
+12 FA
+295 2906 m
+(This)s
+402(section)ms
+562(explains)ms
+748(the)ms
+828(structure)ms
+1021(of)ms
+1082(an)ms
+1148(INI-file)ms
+1319(by)ms
+1388(means)ms
+1534(of)ms
+1595(an)ms
+1660(example)ms
+1849(file.)ms
+1946(You)ms
+2051(should)ms
+295 2846 m
+(understand)s
+528(this)ms
+615(structure)ms
+804(thoroughly)ms
+1038(before)ms
+1179(your)ms
+1285(try)ms
+1355(to)ms
+1408(edit)ms
+1497(INI-files)ms
+1684(yourself)ms
+1862(directly)ms
+2029(through)ms
+295 2786 m
+(an)s
+354(editor)ms
+483([Ammers 1993].)ms
+389 2726 m
+(The)s
+481(example)ms
+665(is)ms
+714(an)ms
+776(INI-file)ms
+943(for)ms
+1017(MS-DOS.)ms
+1233(The)ms
+1326(only)ms
+1429(difference)ms
+1647(with)ms
+1751(other)ms
+1869(platforms)ms
+2075(is)ms
+2123(the)ms
+295 2666 m
+(specification)s
+558(of)ms
+607(directories.)ms
+838(The)ms
+923(numbers)ms
+1103(at)ms
+1147(the)ms
+1215(beginning)ms
+1423(of)ms
+1472(every)ms
+1591(line)ms
+1673(are)ms
+1742(added)ms
+1869(for)ms
+1935(convenience)ms
+295 2606 m
+(of)s
+349(reference.)ms
+560(They)ms
+675(are)ms
+748(not)ms
+825(part)ms
+915(of)ms
+969(the)ms
+1043(file)ms
+1122(itself.)ms
+10 FH
+470 2495 m
+(<================= Example of an INI-file ====================>)s
+395 2453 m
+(1)s
+470 2453 m
+(This file contains data that is needed to run CLiP)s
+395 2411 m
+(2)s
+470 2411 m
+(And is generated by CLiP_MENU)s
+395 2370 m
+(3)s
+470 2370 m
+(Modifying this file at own risk.)s
+395 2328 m
+(4)s
+470 2328 m
+(Using CLiP_MENU is definitely recommended.)s
+395 2286 m
+(5)s
+395 2245 m
+(6)s
+470 2245 m
+(INTERACTIVE_MODE Mode \(INTERACTIVE/DEBUG/HELPFUL/AUTO\))s
+395 2203 m
+(7)s
+470 2203 m
+(NO Interactive fault correction \(YES/NO\))s
+395 2161 m
+(8)s
+470 2161 m
+(BOTH Error message destination \(TERMINAL/......\))s
+395 2120 m
+(9)s
+470 2120 m
+(\(* Left comment string)s
+370 2078 m
+(10)s
+470 2078 m
+(*\) Right comment string)s
+370 2036 m
+(11)s
+470 2036 m
+(* Command character)s
+370 1995 m
+(12)s
+470 1995 m
+(ENDOF END string)s
+370 1953 m
+(13)s
+470 1953 m
+(# Option marker)s
+370 1911 m
+(14)s
+470 1911 m
+(EXTRACTED The specified modules are \(OMITTED/EX-)s
+370 1870 m
+(15)s
+470 1870 m
+(TRACTED\))s
+370 1828 m
+(16)s
+470 1828 m
+(------------ REPORT FILE -----------)s
+370 1786 m
+(17)s
+470 1786 m
+(CLIP.RPT)s
+370 1745 m
+(18)s
+470 1745 m
+(------------ INPUT FILES -----------)s
+370 1703 m
+(19)s
+470 1703 m
+(f:\\LPT\\MAN\\EX01_A.ASC)s
+370 1661 m
+(20)s
+470 1661 m
+(f:\\LPT\\MAN\\EX01_B.ASC)s
+370 1620 m
+(21)s
+470 1620 m
+(------------ MODULES ---------------)s
+370 1578 m
+(22)s
+470 1578 m
+(F:\\TEST\\)s
+370 1536 m
+(23)s
+470 1536 m
+(PALINDRO.PAS)s
+370 1495 m
+(24)s
+470 1495 m
+(F:\\TEST\\)s
+370 1453 m
+(25)s
+470 1453 m
+(TESTDATA.IN)s
+370 1411 m
+(26)s
+470 1411 m
+(------------ MODULE DIRECTORY ------)s
+370 1370 m
+(27)s
+470 1370 m
+(f:\\LPT\\)s
+470 1328 m
+(------------ END OF INI FILE -------)s
+470 1286 m
+(<================= End of Example INI-file ===================>)s
+12 FA
+295 1178 m
+(Lines 1-5:)s
+602(Descriptive)ms
+845(lines)ms
+952(that)ms
+1039(are)ms
+1113(flushed)ms
+1272(upon)ms
+1385(reading.)ms
+295 1088 m
+(Lines 6-14:)s
+602(Information)ms
+853(behind)ms
+1002(position)ms
+1175(24)ms
+1238(is)ms
+1284(not)ms
+1360(interpreted.)ms
+295 998 m
+(Lines 6-7:)s
+602(These)ms
+734(lines)ms
+841(refer)ms
+947(to)ms
+999(unimplemented)ms
+1322(options.)ms
+1495(They)ms
+1610(should)ms
+1756(not)ms
+1832(be)ms
+1892(changed.)ms
+295 908 m
+(Lines 8:)s
+602(Identifies)ms
+804(the)ms
+877(output)ms
+1018(device)ms
+1161(for)ms
+1232(messages)ms
+1433(and)ms
+1518(reports.)ms
+1682(The)ms
+1773(first)ms
+1866(word)ms
+1981(of)ms
+2036(the)ms
+2110(line)ms
+602 848 m
+(must)s
+712(be)ms
+773(on)ms
+837(of)ms
+892(the)ms
+967(following)ms
+1175(keywords)ms
+1383(TERMINAL,)ms
+1667(REPORTFILE)ms
+1978(\(or)ms
+2050(FILE\),)ms
+602 788 m
+(BOTH)s
+750(or)ms
+804(NONE)ms
+956(and)ms
+1040(we)ms
+1111(assume)ms
+1271(the)ms
+1344(meaning)ms
+1529(self)ms
+1614(evident.)ms
+295 698 m
+(Lines 9-13:)s
+602(These)ms
+735(lines)ms
+844(together)ms
+1022(define)ms
+1161(the)ms
+1236(syntax)ms
+1381(of)ms
+1437(the)ms
+1512(lines)ms
+1621(CLiP)ms
+1741(will)ms
+1833(recognize.)ms
+2054(For)ms
+2137(an)ms
+602 638 m
+(explanation)s
+847(of)ms
+901(the)ms
+975(CLiP)ms
+1093(syntax,)ms
+1249(refer)ms
+1356(to)ms
+1407([Ammers)ms
+1608(1993].)ms
+295 548 m
+(Lines 9:)s
+602(At)ms
+659(most)ms
+763(6)ms
+795(characters)ms
+1004(to)ms
+1050(specify)ms
+1201(the)ms
+1269("left)ms
+1363(comment)ms
+1556(string")ms
+1697(i.e.)ms
+1765(the)ms
+1833(opening)ms
+2001(sequence)ms
+602 488 m
+(of)s
+650(a)ms
+680(comment)ms
+873(string)ms
+994(of)ms
+1043(the)ms
+1111(programming)ms
+1390(language)ms
+1578(you)ms
+1660(want)ms
+1765(to)ms
+1811(use.)ms
+1897(The)ms
+1982(characters)ms
+602 428 m
+(cannot)s
+747(be)ms
+807(letters)ms
+942(\(A-Z,)ms
+1067(a-z\),)ms
+1169(digits)ms
+1293(\(0-9\))ms
+1405(or)ms
+1460(a)ms
+1494(dot)ms
+1571(\(.\).)ms
+8 FA
+295 254 m
+(CLiP)s
+373(provisional)ms
+532(user)ms
+595(manual)ms
+702(\(version)ms
+819(2.100\))ms
+4 1250 430 1894 li
+endpage
+%%Page: 13 14
+begpage
+10 FCB
+295 3182 m
+(14)s
+10 FC
+460 3182 m
+(The structure of an INI-file)s
+12 FA
+295 3011 m
+(Lines 10:)s
+602(At)ms
+674(most)ms
+793(6)ms
+840(characters)ms
+1064(to)ms
+1125(specify)ms
+1291(the)ms
+1374("right)ms
+1510(comment)ms
+1718(string")ms
+1874(i.e.)ms
+1957(the)ms
+2040(closing)ms
+602 2951 m
+(sequence)s
+801(of)ms
+858(a)ms
+896(comment)ms
+1098(string)ms
+1228(of)ms
+1285(the)ms
+1362(programming)ms
+1650(language)ms
+1847(you)ms
+1938(want)ms
+2051(to)ms
+2105(use.)ms
+602 2891 m
+(The)s
+692(characters)ms
+907(cannot)ms
+1053(be)ms
+1112(letters)ms
+1247(\(A-Z,)ms
+1372(a-z\),)ms
+1475(digits)ms
+1598(\(0-9\))ms
+1711(or)ms
+1765(a)ms
+1800(dot)ms
+1876(\(.\).)ms
+295 2801 m
+(Lines 11:)s
+602(The)ms
+694(character)ms
+892(that)ms
+982(is)ms
+1030(postfixed)ms
+1231(to)ms
+1284(a)ms
+1321(left)ms
+1402(comment)ms
+1603(string)ms
+1732(and)ms
+1818(prefixed)ms
+2000(to)ms
+2053(a)ms
+2090(right)ms
+602 2741 m
+(comment)s
+805(string)ms
+936(in)ms
+992(order)ms
+1115(to)ms
+1171(identify)ms
+1344(it)ms
+1389(as)ms
+1448(a)ms
+1487(special)ms
+1643(comment)ms
+1847(that)ms
+1939(CLiP)ms
+2062(has)ms
+2146(to)ms
+602 2681 m
+(process,)s
+773(a)ms
+804(so)ms
+857(called)ms
+985(CLiP-line.)ms
+1203(The)ms
+1290(character)ms
+1482(cannot)ms
+1624(be)ms
+1680(a)ms
+1711(letter)ms
+1822(\(A-Z,)ms
+1943(a-z\),)ms
+2042(a)ms
+2073(digits)ms
+602 2621 m
+(\(0-9\))s
+714(or)ms
+768(a)ms
+803(dot)ms
+879(\(.\).)ms
+295 2531 m
+(Lines 12:)s
+602(The)ms
+693(leading)ms
+854(characters)ms
+1071(that)ms
+1160(identify)ms
+1329(a)ms
+1365(particular)ms
+1570(CLiP-line)ms
+1781(as)ms
+1836(the)ms
+1911(end)ms
+1997(of)ms
+2053(a)ms
+2089(stub,)ms
+602 2471 m
+(i.e.)s
+675(a)ms
+710(particular)ms
+914(section)ms
+1068(that)ms
+1156(can)ms
+1237(be)ms
+1297(substituted)ms
+1526(elsewhere.)ms
+295 2381 m
+(Lines 13:)s
+602(The)ms
+692(character)ms
+888(that)ms
+975(identifies)ms
+1174(the)ms
+1248(options.)ms
+295 2291 m
+(Line 14:)s
+602(Relates)ms
+758(to)ms
+807(the)ms
+878(modules)ms
+1057(in)ms
+1105(the)ms
+1176(module)ms
+1335(section)ms
+1487(below.)ms
+1631(The)ms
+1718(specified)ms
+1908(modules)ms
+2087(must)ms
+602 2231 m
+(either)s
+723(be)ms
+777(extracted)ms
+967(or)ms
+1016(omitted)ms
+1176(and)ms
+1256(the)ms
+1324(first)ms
+1412(word)ms
+1522(of)ms
+1571(this)ms
+1650(line)ms
+1732(can)ms
+1809(only)ms
+1905(be)ms
+1960(OMITTED)ms
+602 2171 m
+(or)s
+656(EXTRACTED.)ms
+295 2081 m
+(Line 15:)s
+602(Starts)ms
+729(the)ms
+804(section)ms
+959(defining)ms
+1139(the)ms
+1214(file)ms
+1294(that)ms
+1382(mirrors)ms
+1543(the)ms
+1618(extraction)ms
+1831(process.)ms
+2007(This)ms
+2110(line)ms
+602 2021 m
+(should)s
+747(be)ms
+807(copied)ms
+953(literally.)ms
+295 1931 m
+(Line 16:)s
+602(Path)ms
+703(and)ms
+788(file)ms
+867(specification)ms
+1135(of)ms
+1189(the)ms
+1263(report)ms
+1394(file.)ms
+295 1841 m
+(Line 17:)s
+602(Starts)ms
+726(the)ms
+799(section)ms
+951(defining)ms
+1129(the)ms
+1201(input)ms
+1315(files)ms
+1412(for)ms
+1481(the)ms
+1553(extraction)ms
+1764(process,)ms
+1938(the)ms
+2010(so)ms
+2065(called)ms
+602 1781 m
+(source)s
+745(files.)ms
+856(This)ms
+957(line)ms
+1045(should)ms
+1190(be)ms
+1250(copied)ms
+1396(literally.)ms
+295 1691 m
+(Line 18-19:)s
+602(Every)ms
+736(line)ms
+825(specifies)ms
+1014(a)ms
+1051(path)ms
+1151(and)ms
+1238(source)ms
+1382(file.)ms
+1476(There)ms
+1607(may)ms
+1707(be)ms
+1769(up)ms
+1833(to)ms
+1886(64)ms
+1950(lines)ms
+2059(in)ms
+2112(this)ms
+602 1631 m
+(section.)s
+295 1541 m
+(Line 20:)s
+602(Starts)ms
+727(the)ms
+799(section)ms
+952(defining)ms
+1130(the)ms
+1203(modules)ms
+1384(that)ms
+1470(are)ms
+1542(considered)ms
+1770(during)ms
+1912(the)ms
+1985(extraction)ms
+602 1481 m
+(process.)s
+776(Whether)ms
+959(the)ms
+1032(modules)ms
+1213(are)ms
+1286(extracted)ms
+1480(or)ms
+1534(omitted)ms
+1698(depends)ms
+1873(on)ms
+1935(line)ms
+2022(14.)ms
+2096(This)ms
+602 1421 m
+(line)s
+689(should)ms
+835(be)ms
+895(copied)ms
+1040(literally.)ms
+295 1331 m
+(Line 21-24:)s
+602(Every)ms
+735(line)ms
+824(pair)ms
+915(specifies)ms
+1104(a)ms
+1139(path)ms
+1239(and)ms
+1325(a)ms
+1361(module)ms
+1524(file.)ms
+1617(There)ms
+1747(may)ms
+1847(be)ms
+1908(up)ms
+1971(to)ms
+2024(64)ms
+2087(pairs)ms
+602 1271 m
+(\(128)s
+706(lines\))ms
+829(in)ms
+881(this)ms
+965(section.)ms
+295 1181 m
+(Line 25:)s
+602(Starts)ms
+728(the)ms
+801(section)ms
+955(to)ms
+1007(identify)ms
+1175(the)ms
+1248(default)ms
+1399(directory)ms
+1592(for)ms
+1663(modules,)ms
+1857(i.e.)ms
+1931(the)ms
+2004(directory)ms
+602 1121 m
+(where)s
+734(modules)ms
+913(go)ms
+973(to)ms
+1022(that)ms
+1107(have)ms
+1211(no)ms
+1271(explicit)ms
+1431(directory)ms
+1621(specified)ms
+1812(by)ms
+1872(the)ms
+1943(MODULES)ms
+602 1061 m
+(section.)s
+768(This)ms
+870(line)ms
+957(should)ms
+1103(be)ms
+1163(copied)ms
+1308(literally.)ms
+295 971 m
+(Line 26:)s
+602(Default)ms
+764(directory)ms
+957(for)ms
+1028(extracted)ms
+1224(modules.)ms
+295 881 m
+(Line 27:)s
+602(Identifies)ms
+803(the)ms
+877(end)ms
+961(of)ms
+1015(the)ms
+1089(INI-file.)ms
+1267(This)ms
+1368(line)ms
+1456(should)ms
+1601(be)ms
+1661(copied)ms
+1807(literally.)ms
+8 FA
+295 254 m
+(CLiP)s
+373(provisional)ms
+532(user)ms
+595(manual)ms
+702(\(version)ms
+819(2.100\))ms
+endpage
+%%Page: 14 15
+begpage
+10 FC
+926 3182 m
+(7.1 "SP_EXTR_STR: system failure .... call maintenance")s
+10 FCB
+2138 3182 m
+(15)s
+14 FCB
+295 3001 m
+(7 Bugs, work-arounds and undocumented features)s
+12 FCB
+295 2868 m
+(7.1 "SP_EXTR_STR: system failure .... call maintenance")s
+12 FA
+295 2781 m
+(This)s
+394(failure)ms
+536(may)ms
+633(happen)ms
+788(if)ms
+829(the)ms
+901(stubs)ms
+1015(have)ms
+1120(not)ms
+1195(been)ms
+1300(correctly)ms
+1488(closed)ms
+1627(with)ms
+1727(the)ms
+1799(END-STRING)ms
+2110(that)ms
+295 2721 m
+(has)s
+378(been)ms
+489(specified)ms
+686(as)ms
+744(the)ms
+822(syntax.)ms
+982(The)ms
+1076(default)ms
+1232(value)ms
+1356(of)ms
+1415(this)ms
+1504(string)ms
+1634(is)ms
+1684("ENDOF".)ms
+1921(Also)ms
+2032(the)ms
+2110(line)ms
+295 2661 m
+(containing)s
+518(the)ms
+592(END-STRING)ms
+904(should)ms
+1050(be)ms
+1110(properly)ms
+1292(closed.)ms
+1444(For)ms
+1526(example)ms
+1708(in)ms
+1760(a)ms
+1794(Pascal)ms
+1935(situation)ms
+10 FH
+345 2580 m
+( \(********* End of module \(2.1\) ***\))s
+12 FA
+295 2496 m
+(should)s
+440(be)ms
+500(all)ms
+563(right,)ms
+682(but)ms
+10 FH
+345 2415 m
+( \(****** End of module \(2.1\) **\))s
+12 FA
+295 2331 m
+(may)s
+393(give)ms
+492(trouble)ms
+646(since)ms
+761(the)ms
+835(string)ms
+961("**\)")ms
+1081(is)ms
+1127(incorrect)ms
+1317(here.)ms
+12 FCB
+295 2178 m
+(7.2 Options in general)s
+12 FA
+295 2091 m
+(Several)s
+453(options)ms
+608(have)ms
+711(been)ms
+814(introduces)ms
+1030(with)ms
+1128(very)ms
+1225(advanced)ms
+1422(applications)ms
+1672(in)ms
+1719(mind.)ms
+1843(They)ms
+1954(have)ms
+2057(hardly)ms
+295 2031 m
+(been)s
+402(tested)ms
+532(will)ms
+624(probably)ms
+815(not)ms
+892(work.)ms
+1021(You)ms
+1121(won't)ms
+1251(need)ms
+1358(them)ms
+1472(either.)ms
+1612(For)ms
+1695(this)ms
+1780(reason)ms
+1924(don't)ms
+2043(use)ms
+2123(the)ms
+295 1971 m
+(options)s
+454(OVERRULE,)ms
+746(SEPARATOR)ms
+1050(and)ms
+1135(TRAILER.)ms
+12 FCB
+295 1818 m
+(7.3 Multiple option)s
+12 FA
+295 1731 m
+(A)s
+343(slot)ms
+427(with)ms
+529(the)ms
+602("MULTIPLE")ms
+902(option)ms
+1042(raises)ms
+1169(an)ms
+1228(error)ms
+1338(if)ms
+1380(no)ms
+1443(stubs)ms
+1558(are)ms
+1631(found)ms
+1760(matching)ms
+1959(the)ms
+2032(slot.)ms
+2129(To)ms
+295 1671 m
+(prevent)s
+457(this)ms
+542(error)ms
+651(message)ms
+833(one)ms
+918(should)ms
+1064(specify)ms
+1221(the)ms
+1294(option)ms
+1435("OPTIONAL")ms
+1738(also)ms
+1831(for)ms
+1902(the)ms
+1975(slot.)ms
+12 FCB
+295 1518 m
+(7.4 Report file option NONE)s
+12 FA
+295 1431 m
+(This)s
+395(option)ms
+535(to)ms
+586(suppress)ms
+770(the)ms
+842(printing)ms
+1013(of)ms
+1066(reports)ms
+1217(to)ms
+1267(the)ms
+1340(terminal)ms
+1519(has)ms
+1597(not)ms
+1673(been)ms
+1779(implemented.)ms
+2064(It)ms
+2107(will)ms
+295 1371 m
+(be)s
+354(eliminated)ms
+578(in)ms
+629(some)ms
+747(later)ms
+849(version.)ms
+12 FCB
+295 1218 m
+(7.5 Generating target modules)s
+12 FAB
+295 1101 m
+(7.5.1 Specification)s
+12 FA
+295 1011 m
+(If)s
+339(CLIP.INI)ms
+541(specifies)ms
+728(a)ms
+761(target)ms
+887(module)ms
+1048(that)ms
+1135(matches)ms
+1310(no)ms
+1372(file-option)ms
+1594(argument)ms
+1794(anywhere)ms
+2000(in)ms
+2051(the)ms
+2123(list)ms
+295 951 m
+(of)s
+345(specified)ms
+534(source)ms
+672(files,)ms
+779(CLiP)ms
+893(does)ms
+994(not)ms
+1066(complain.)ms
+1273(The)ms
+1359(matching)ms
+1554(is)ms
+1595(case)ms
+1690(sensitive)ms
+1873(and)ms
+1954(for)ms
+2021(instance)ms
+295 891 m
+(a)s
+329(file-option)ms
+553(argument)ms
+10 FH
+545 810 m
+(\(********** #file "EXAMPLE.PAS" ***********************\))s
+12 FA
+295 726 m
+(does)s
+399(not)ms
+475(fit)ms
+532(a)ms
+567(module)ms
+729(specification)ms
+997(in)ms
+1049(CLIP.INI)ms
+1251(of)ms
+1306(the)ms
+1379(form)ms
+10 FH
+545 645 m
+(Example.PAS)s
+12 FA
+295 561 m
+(This)s
+396(may)ms
+495(lead)ms
+590(to)ms
+642(unpleasant)ms
+868(surprises.)ms
+389 501 m
+(On)s
+464(MS-DOS)ms
+668(and)ms
+755(VAX/VMS)ms
+1000(platforms)ms
+1206(the)ms
+1282(specification)ms
+1552(of)ms
+1608(files)ms
+1709(is)ms
+1757(not)ms
+1835(context)ms
+1997(sensitive.)ms
+295 441 m
+(For)s
+371(this)ms
+450(reason)ms
+588(the)ms
+656(CLIP_1)ms
+821(program)ms
+998(\(which)ms
+1144(is)ms
+1184(available)ms
+1372(for)ms
+1437(the)ms
+1505(MS-DOS)ms
+1701(and)ms
+1780(VAX/VMS)ms
+2018(versions)ms
+295 381 m
+(of)s
+355(CLiP\))ms
+496(converts)ms
+684(those)ms
+808(names)ms
+955(to)ms
+1012(upper)ms
+1145(case)ms
+1250(in)ms
+1307(the)ms
+1387(INI-file)ms
+1558(it)ms
+1605(creates.)ms
+1775(Thus)ms
+1894(the)ms
+1973(file-option)ms
+8 FA
+295 254 m
+(CLiP)s
+373(provisional)ms
+532(user)ms
+595(manual)ms
+702(\(version)ms
+819(2.100\))ms
+endpage
+%%Page: 15 16
+begpage
+10 FCB
+295 3182 m
+(16)s
+10 FC
+460 3182 m
+(Bugs, work-arounds and undocumented features)s
+12 FA
+295 3011 m
+(arguments)s
+515(in)ms
+567(the)ms
+640(source)ms
+783(files)ms
+882(should)ms
+1028(definitely)ms
+1232(be)ms
+1292(specified)ms
+1485(in)ms
+1536(upper)ms
+1662(case)ms
+1761(too.)ms
+389 2951 m
+(In)s
+441(a)ms
+475(Unix)ms
+586(environment)ms
+850(a)ms
+884(file)ms
+962(name)ms
+1082(is)ms
+1126(case)ms
+1224(sensitive)ms
+1410(indeed.)ms
+1567(Currently)ms
+1770(no)ms
+1831(CLIP_1)ms
+2001(exists)ms
+2126(for)ms
+295 2891 m
+(Unix)s
+410(and)ms
+498(an)ms
+561(INI-file)ms
+730(has)ms
+812(to)ms
+867(be)ms
+930(created)ms
+1090(by)ms
+1156(means)ms
+1299(of)ms
+1357(the)ms
+1434(short-cut)ms
+1627(routine)ms
+1784(CLP)ms
+1892(\(or)ms
+1966(directly)ms
+2135(by)ms
+295 2831 m
+(means)s
+434(of)ms
+488(an)ms
+548(editor,)ms
+689(cf.)ms
+752(section 6\).)ms
+973(No)ms
+1046(conversion)ms
+1278(is)ms
+1323(performed)ms
+1544(in)ms
+1595(this)ms
+1679(case)ms
+1777(and)ms
+1862(one)ms
+1946(has)ms
+2025(to)ms
+2076(make)ms
+295 2771 m
+(sure)s
+390(the)ms
+464(file-option)ms
+688(argument)ms
+889(is)ms
+935(identical)ms
+1119(to)ms
+1171(the)ms
+1244(corresponding)ms
+1543(name)ms
+1664(in)ms
+1715(the)ms
+1789(INI-file.)ms
+12 FAB
+295 2621 m
+(7.5.2 Omitted modules)s
+12 FA
+295 2531 m
+(If)s
+340(modules)ms
+521(are)ms
+593(specified)ms
+786(for)ms
+856(being)ms
+978(OMITTED)ms
+1215(at)ms
+1263(extraction)ms
+1475(time,)ms
+1588(it)ms
+1627(will)ms
+1717(be)ms
+1776(omitted)ms
+1940(independent)ms
+295 2471 m
+(of)s
+349(the)ms
+422(path)ms
+521(that)ms
+608(may)ms
+707(have)ms
+814(been)ms
+921(specified.)ms
+1126(The)ms
+1217(module)ms
+1379(will)ms
+1469(never)ms
+1593(be)ms
+1653(generated.)ms
+12 FAB
+295 2321 m
+(7.5.3 Empty run)s
+12 FA
+295 2231 m
+(CLiP)s
+415(does)ms
+521(not)ms
+600(always)ms
+754(recognize)ms
+963(a)ms
+1000(corrupted)ms
+1206(INI-file.)ms
+1386(Thus)ms
+1501(if)ms
+1546(you)ms
+1636(run)ms
+1717(CLiP)ms
+1838(and)ms
+1925(it)ms
+1967(produces)ms
+2162(a)ms
+295 2171 m
+(report)s
+426(of)ms
+481(the)ms
+554(form)ms
+10 FH
+345 2090 m
+(============================ CLiP version 2.1 ==========================)s
+345 2006 m
+(============================ Busy scanning =============================)s
+345 1965 m
+(Scanning file: ..................)s
+345 1923 m
+(.................................)s
+345 1840 m
+(============================ End scanning ==============================)s
+345 1756 m
+(============================ Busy analysing ============================)s
+345 1673 m
+(============================ End analysing =============================)s
+345 1590 m
+(============================ Busy generating ===========================)s
+345 1506 m
+(============================ End generating ============================)s
+345 1465 m
+(Used \(CPU\) time :5.88 Sec.)s
+345 1423 m
+(See you next time !)s
+12 FA
+295 1339 m
+(then)s
+397(you)ms
+489(start)ms
+591(checking)ms
+788(the)ms
+866(specifications)ms
+1157(of)ms
+1215(the)ms
+1293(target)ms
+1423(modules,)ms
+1622(since)ms
+1741(this)ms
+1830(is)ms
+1879(the)ms
+1957(most)ms
+2071(likely)ms
+295 1279 m
+(source)s
+437(of)ms
+490(trouble.)ms
+655(Keep)ms
+772(in)ms
+823(mind)ms
+937(however,)ms
+1133(that)ms
+1220(the)ms
+1292(problem)ms
+1471(may)ms
+1568(be)ms
+1627(also)ms
+1719(arise)ms
+1825(due)ms
+1909(to)ms
+1959(a)ms
+1993(corrupted)ms
+295 1219 m
+(INI-file.)s
+12 FCB
+295 1066 m
+(7.6 Lost lines)s
+12 FA
+295 979 m
+(If)s
+340(you)ms
+428(have)ms
+535(stubs)ms
+650(of)ms
+704(the)ms
+778(form)ms
+10 FH
+345 898 m
+(\(****************** GEN_POOL global routines ********************\))s
+345 856 m
+(\(******************************************************************\))s
+345 815 m
+(\(* routine: write_string .... *\))s
+345 773 m
+(\(* ................... *\))s
+345 731 m
+(\(******************************************************************\))s
+12 FA
+295 648 m
+(you)s
+385(will)ms
+479(see)ms
+559(that)ms
+650(the)ms
+727(second)ms
+881(line)ms
+972(of)ms
+1030(the)ms
+1107(stub)ms
+1206(\(the)ms
+1299("starred")ms
+1492(line\))ms
+1600(is)ms
+1649(not)ms
+1729(generated)ms
+1939(in)ms
+1994(the)ms
+2071(target)ms
+295 588 m
+(modules.)s
+488(For)ms
+569(this)ms
+652(reason)ms
+794(it)ms
+833(is)ms
+878(better)ms
+1003(to)ms
+1053(put)ms
+1129(an)ms
+1187(additional)ms
+1399(empty)ms
+1535(line)ms
+1621(in)ms
+1671(between.)ms
+1862(For)ms
+1943(example)ms
+2123(the)ms
+295 528 m
+(following)s
+501(stub)ms
+597(will)ms
+688(be)ms
+747(extracted)ms
+943(correctly.)ms
+8 FA
+295 254 m
+(CLiP)s
+373(provisional)ms
+532(user)ms
+595(manual)ms
+702(\(version)ms
+819(2.100\))ms
+endpage
+%%Page: 16 17
+begpage
+10 FC
+1736 3182 m
+(8 References)s
+10 FCB
+2138 3182 m
+(17)s
+10 FH
+345 3020 m
+(\(****************** GEN_POOL global routines ********************\))s
+345 2936 m
+(\(******************************************************************\))s
+345 2895 m
+(\(* routine: write_string .... *\))s
+345 2853 m
+(\(* ................... *\))s
+345 2811 m
+(\(******************************************************************\))s
+12 FCB
+295 2674 m
+(7.7 DOS version only)s
+12 FA
+295 2588 m
+(If)s
+344(you)ms
+435(activate)ms
+607(the)ms
+685(PROJECT/Load)ms
+1029(INI-file)ms
+1198(or)ms
+1256(PROJECT/Save)ms
+1594(INI-file)ms
+1763(menu)ms
+1891(of)ms
+1949(the)ms
+2026(CLIP_1)ms
+295 2528 m
+(program)s
+481(and)ms
+569(you)ms
+661(specify)ms
+822(an)ms
+886(illegal)ms
+1028(drive)ms
+1147(in)ms
+1203(the)ms
+1280(Current)ms
+1450(Directory)ms
+1658(option,)ms
+1815(you)ms
+1907(may)ms
+2009(hang)ms
+2123(the)ms
+295 2468 m
+(system.)s
+458(For)ms
+540(instance)ms
+717(a)ms
+751(drive)ms
+867(specification)ms
+1135(preceeded)ms
+1350(by)ms
+1412(a)ms
+1447(space)ms
+1571(will)ms
+1661(produce)ms
+1834(this)ms
+1919(bug.)ms
+14 FCB
+295 2308 m
+(8 References)s
+12 FA
+295 2213 m
+(Ammers)s
+480(E.W.)ms
+596(van,)ms
+693(M.R.)ms
+809(Kramer)ms
+975(\(1993\),)ms
+1134(The)ms
+1225(CLiP)ms
+1343(Style)ms
+1459(of)ms
+1514(Literate)ms
+1683(Programming)ms
+1971(\(submitted)ms
+389 2153 m
+(for)s
+467(publication\).)ms
+742(Anonymously)ms
+1046(ftp-able)ms
+1222(as)ms
+1284(CLIP_STYLE.PS,)ms
+1674(CLIP_STYLE_A.PS)ms
+2112(and)ms
+389 2093 m
+(CLIP_STYLE_B.PS)s
+816(from)ms
+926(directory)ms
+1119(CLIP)ms
+1240(on)ms
+1302(sun01.info.wau.nl.)ms
+295 2003 m
+(Ammers)s
+475(E.W.)ms
+587(van,)ms
+680(Kramer)ms
+842(M.R.)ms
+953(\(1992\),)ms
+1108(VAMP:)ms
+1275(A)ms
+1319(Tool)ms
+1423(for)ms
+1490(Literate)ms
+1654(Programming)ms
+1937(Independent)ms
+389 1943 m
+(of)s
+441(Programming)ms
+728(Language)ms
+936(and)ms
+1020(Formatter.)ms
+1241(CompEuro '92)ms
+1551(Proceedings,)ms
+1819(May)ms
+1922(4-8)ms
+2000(1992,)ms
+2123(the)ms
+389 1883 m
+(Hague,)s
+544(pg.)ms
+619(371-376.)ms
+295 1793 m
+(Knuth)s
+432(D.E.)ms
+536(\(1984\).)ms
+694(Literate)ms
+862(Programming.)ms
+1162(The)ms
+1253(Computer)ms
+1465(Journal)ms
+1625(27,)ms
+1700(2,)ms
+1750(97-111.)ms
+8 FA
+295 254 m
+(CLiP)s
+373(provisional)ms
+532(user)ms
+595(manual)ms
+702(\(version)ms
+819(2.100\))ms
+endpage
+%%Page: Contents-0 18
+begpage
+12 FAB
+1049 3019 m
+(Table of Contents)s
+12 FA
+295 2919 m
+(CLiP - )s
+12 FAI
+(C)s
+12 FA
+( ode from )s
+12 FAI
+(Li)s
+12 FA
+( terate )s
+12 FAI
+(P)s
+12 FA
+( rograms Provisional User Manual )s
+1596(................................)ms
+2019 2919 m
+(1)s
+295 2819 m
+(1 Introduction )s
+608(...............................................................................................................)ms
+2019 2819 m
+(1)s
+295 2719 m
+(2 Syntax \(programming style\) )s
+933(.....................................................................................)ms
+2019 2719 m
+(2)s
+365 2669 m
+(2.1 Stub blocks and documentation blocks )s
+1245(............................................................)ms
+2019 2669 m
+(3)s
+365 2619 m
+(2.2 Segments )s
+670(..........................................................................................................)ms
+2019 2619 m
+(3)s
+365 2569 m
+(2.3 Options )s
+632(.............................................................................................................)ms
+2019 2569 m
+(3)s
+295 2469 m
+(3 Examples )s
+558(...................................................................................................................)ms
+2019 2469 m
+(4)s
+365 2419 m
+(3.1 Example 1: Defining a module )s
+1082(.........................................................................)ms
+2019 2419 m
+(4)s
+365 2369 m
+(3.2 Example 2: Multiple slots )s
+995(................................................................................)ms
+2019 2369 m
+(5)s
+365 2319 m
+(3.3 Example 3: Quick stubs and abstract data types )s
+1420(..............................................)ms
+2019 2319 m
+(6)s
+365 2269 m
+(3.4 Example 4: An ordinary refinement step )s
+1282(.........................................................)ms
+2019 2269 m
+(7)s
+365 2219 m
+(3.5 Example 5: A subroutine module )s
+1132(.....................................................................)ms
+2019 2219 m
+(9)s
+295 2119 m
+(4 Semantics of options )s
+783(.................................................................................................)ms
+2019 2119 m
+(11)s
+295 2019 m
+(5 Using CLiP )s
+596(................................................................................................................)ms
+2019 2019 m
+(12)s
+295 1919 m
+(6 The structure of an INI-file )s
+908(.......................................................................................)ms
+2019 1919 m
+(13)s
+295 1819 m
+(7 Bugs, work-arounds and undocumented features )s
+1333(.....................................................)ms
+2019 1819 m
+(15)s
+365 1769 m
+(7.1 "SP_EXTR_STR: system failure .... call maintenance" )s
+1570(..................................)ms
+2019 1769 m
+(15)s
+365 1719 m
+(7.2 Options in general )s
+845(............................................................................................)ms
+2019 1719 m
+(15)s
+365 1669 m
+(7.3 Multiple option )s
+782(.................................................................................................)ms
+2019 1669 m
+(15)s
+365 1619 m
+(7.4 Report file option NONE )s
+982(.................................................................................)ms
+2019 1619 m
+(15)s
+365 1569 m
+(7.5 Generating target modules )s
+1007(...............................................................................)ms
+2019 1569 m
+(15)s
+436 1519 m
+(7.5.1 Specification )s
+845(............................................................................................)ms
+2019 1519 m
+(15)s
+436 1469 m
+(7.5.2 Omitted modules )s
+920(......................................................................................)ms
+2019 1469 m
+(16)s
+436 1419 m
+(7.5.3 Empty run )s
+795(................................................................................................)ms
+2019 1419 m
+(16)s
+365 1369 m
+(7.6 Lost lines )s
+670(..........................................................................................................)ms
+2019 1369 m
+(16)s
+365 1319 m
+(7.7 DOS version only )s
+832(.............................................................................................)ms
+2019 1319 m
+(17)s
+295 1219 m
+(8 References )s
+583(.................................................................................................................)ms
+2019 1219 m
+(17)s
+8 FA
+295 254 m
+(CLiP)s
+373(provisional)ms
+532(user)ms
+595(manual)ms
+702(\(version)ms
+819(2.100\))ms
+endpage
+%%Trailer
+enddocument
+%%Pages: 18
+%%DocumentFonts:
+%%+ Times-Roman
+%%+ Times-Italic
+%%+ Times-Bold
+%%+ Times-BoldItalic
+%%+ Helvetica
+%%+ Helvetica-Bold
+%%+ Helvetica-BoldOblique
+%%+ Courier
+%%EOF
+ \ No newline at end of file
diff --git a/web/clip/ms_dos/manual.txt b/web/clip/ms_dos/manual.txt
new file mode 100644
index 0000000000..b7e319fd8f
--- /dev/null
+++ b/web/clip/ms_dos/manual.txt
@@ -0,0 +1,854 @@
+
+
+
+ CLiP - C ode from Li terate P rograms
+ *************************************
+
+ Provisional User Manual
+
+
+
+Disclaimer:
+ This document is meant for programmers who are already familiar with the
+literate programming paradigm. It pretends in no way to be a complete user
+manual in the real meaning of the word. But the document should supply
+sufficient hints to experiment successfully with the CLiP system.
+ You are assumed to be familiar with the ideas and design goals of the CLiP
+system as explained in [Ammers and Kramer 1993]. Also you should have read *
+READ_ME.TXT* or *READ_ME.PS* which come with the executables and understand the
+meaning of the INI-file which guides the extraction process.
+ The DOS and VMS versions of CLiP consist of two independent programs,
+CLIP_1 and CLIP_2. CLIP_1 is purely to create an INI-file for CLIP_2, which
+performs the actual work. The Unix version consists of only one program, CLIP
+(which is identical to CLIP_2), and an INI-file should be made using the
+supplied scripts or an editor. This manual only deals with the second program.
+
+
+
+ Table of Contents
+
+1 Introduction 1
+
+2 Syntax (programming style) 2
+ 2.1 Stub blocks and documentation blocks 3
+ 2.2 Segments 3
+ 2.3 Options 3
+3 Examples 4
+ 3.1 Example 1: Defining a module 4
+ 3.2 Example 2: Multiple slots 5
+ 3.3 Example 3: Quick stubs and abstract data types 6
+ 3.4 Example 4: An ordinary refinement step 7
+ 3.5 Example 5: A subroutine module 9
+4 Semantics of options 11
+
+5 Using CLiP 12
+
+6 The structure of an INI-file 13
+
+7 Bugs, work-arounds and undocumented features 15
+ 7.1 "SP_EXTR_STR: system failure .... call maintenance" 15
+ 7.2 Options in general 15
+ 7.3 Multiple option 15
+ 7.4 Report file option NONE 15
+ 7.5 Generating target modules 15
+ 7.5.1 Specification 15
+ 7.5.2 Omitted modules 16
+ 7.5.3 Empty run 16
+ 7.6 Lost lines 16
+ 7.7 DOS version only 17
+8 References 17
+
+
+1 Introduction
+
+In short the idea behind CLiP is to define a style of programming sufficiently
+formal to be recognized by a literate programming automaton. This syntax (which
+we will refer to as the CLiP-syntax) should not obstruct a natural way of
+programming. Ideally the system should be smart enough to "see" stubs, slots
+and the like by "inspecting" the documentation and simply "understanding" the
+refinements the programmer has made. Alas, this is far beyond the current
+potential of artificial intelligence and we will have to reach the automaton a
+helping hand by defining a special syntax.
+ So we want the "look and feel" of a documentation to be as "natural" as
+possible, but with CLiP features that can be recognized by an automaton. On the
+other hand should the reader be burdened as little as possible with the fact
+that additional processing is needed to extract the modules. In systems like
+VAMP [Ammers 1984] and WEB [Knuth 1984] - which use batch formatters - this is
+achieved by adding explicit commands in the source-files that are suppressed in
+the formatted documentation. But this technique does not work if the
+documentation environment is an interactive word-processor (Word Perfect, Lotus
+Manuscript, MS-Word, Ami Pro, etc.). So CLiP uses either the ASCII-export from
+a word-processors or the ASCII input of a formatter and extracts modules from
+there. In these files CLiP recognizes the important sections by a particular
+programming-style rather than by explicit commands.
+ The first section describes the syntax that CLiP "sees". The next section
+gives a couple of useful examples. In section 4 we describe the options that
+may be used to customize the process of module generation. In section 5 we give
+some hints on how to organize your working with CLiP efficiently. Stubs and
+slots my remaining sections illustrate the style of documentation and programs
+that would result. CLiP is in development and we compile the known bugs in
+section 6.
+
+2 Syntax (programming style)
+
+CLiP-lines [-] that is lines which have a special meaning to CLiP [-] start
+with a CLIP-left-parenthesis (CLIP-lpar) and end with a CLIP-right-parenthesis
+(CLIP-rpar). Both tokens are constructed as extensions of the tokens
+encapsulating comments which we will refer to as *COMM-START* and *COMM-END*.
+If we program in Pascal then everything between "*(**" and "**)*" is seen as
+comment, thus we have the convention:
+
+ *COMM-START* = "*(**"
+ *COMM-END* = "**)*"
+
+Extension of the comment token is by a character with a special meaning to
+clip, the *CLIP-CHAR*. In our case we assume
+
+ *CLIP-CHAR* = "***"
+
+Thus CLiP-lines are enclosed by
+
+ CLIP-lpar of the form "*(***"
+
+and
+
+ CLIP-rpar of the form "***)*"
+
+The parameters *COMM-START*, *COMM-END* and *CLIP-CHAR* are set by the INI-file
+and it is evident that the convention can be adjusted.
+
+
+ CLiP distinguishes six source line categories:
+
+ 1 (******************* <arbitrary string> **********************)
+ 2 (**************** End of <arbitrary string> ******************)
+ 3 (** <arbitrary string> **)
+ 4 (***************************************************************)
+ 5 <the empty string>
+ 6 <any string not falling in one of the above categories>
+
+We will refer to a line from the second category as an "L2" and so on and
+investigate the meaning is of the various categories for CLiP.
+ The string "*End of*" of an L2 has a special meaning that distinguishes an
+L2 from an L1. Again this special string is defined by a parameter in the
+INI-file
+
+ *END-STRING* = "*ENDOF*"
+
+Observe that CLiP does not distinguish between upper and lower case and forgets
+about spaces. In fact CLiP reduces the <arbitrary string> internally to a
+sequence of the characters "*A*"-"*Z*", "*0*"-"*9*" and "*.*"
+ Note that for an L3 the character immediately following the *CLIP-CHAR* on
+the left side and the character preceding the *CLIP-CHAR* on the right side may
+be anything apart from the *CLIP-CHAR* itself.
+
+2.1 Stub blocks and documentation blocks
+
+From CLiP's point of view the source-files are divided in documentation blocks
+and stub-blocks. A stub-block starts with an L1 and usually ends with an L2. A
+special kind of stub, a so called quick stub (see sect. 3.3 and 4), is ended by
+an L5 or an <EOF>. Everything outside a stub-block is a documentation block and
+ignored by CLiP. For this reason we say that CLiP is in active mode during the
+processing of a stub-block and in passive mode otherwise. The only way to
+change CLiP from passive to active mode is by an L1 and the usual way from
+active to passive is through an L2. An L2 in passive mode is presumably an
+error and will be ignored.
+
+2.2 Segments
+
+A stub-block contains one and only one stub-segment, which starts the
+stub-block. The stub-segment may be followed by any number of slot-segments
+and/or code-segments.
+ An L1 always starts a new stub- or slot-segment and the segment continues
+with any number of lines of type L3 or L4. A segment is a slot-segment if and
+only if it is not the first one of a stub-block. A code-segment consists of any
+number of contiguous lines of type L5. Stub- and slot-segments have an
+identification or name which is constructed somehow from the *<arbitrary string>
+*s inside the segment.
+ L3 and L4 are continuations of stub- and slot-segments, but with a slightly
+different status. An L3 that cannot be pasted to a segment is flagged as an
+error. But an L4 under the same conditions is interpreted as belonging to the
+current code-segment.
+
+2.3 Options
+
+The module extraction process can be tuned by means of options. Stub-segments
+as well as slot-segments may have options. An option starts with a keyword
+signalled by a special *OPTION-MARKER*. The option keyword may be abbreviated
+to a unique headerstring for that option. We will assume "*#*" for *
+OPTION-MARKER*, but of course this again is a parameter set by the INI-file.
+
+
+The argument(s) following an option continue till the next option-keyword or
+till the end of the segment. Therefore the name of a segment must precede the
+options.
+ In general options operate on the inside of the stub only, since that is
+the part of the program that the programmer of this particular refinement has
+in his or her mind. In addition options can be inherited. The meaning of the
+various options is explained in section 4. Some frequently used options show up
+in the examples of section 3.
+
+
+3 Examples
+
+In the examples we will illustrate the most important features of CLiP by
+making remarks on excerpts drawn from the documentation of CLiPs predecessor,
+VAMP.
+
+3.1 Example 1: Defining a module
+
+ The module VAMP:
+ Starting from nowhere, the empty program will do.
+
+
+ 1 (**** #File "VAMP.PAS". #Indent on. ****)
+ 2
+ 3 (***************************************************************)
+ 4 (* Routine: VAMP - Main module of the VAMP system. *)
+ 5 (* Purpose: Main module and unique entry point to the *)
+ 6 (* VAMP-system. *)
+ 7 (* Interface: TTY - All communication with the user *)
+ 8 (* proceeds via the terminal. *)
+ 9 (* Author/Date: VAMP project management, Sept. 12, 1983. *)
+ 10 (***************************************************************)
+ 11
+ 12 (********************** VAMP (body) **************************)
+ 13
+ 14 (*********************** End of VAMP *************************)
+ 15
+ 16
+ 18 (********* VAMP (body) #def ***********)
+ 19 PROGRAM VAMP (INPUT, OUTPUT);
+ 20 BEGIN
+ 21 WRITELN ('!!! VAMP was here !!!');
+ 22 END (*VAMP*).
+ 23 (********** End of VAMP (body) *********)
+
+Remarks:
+ There are two stubs in this section. Line 1-14 and line 18-23. Both
+stub-blocks have a stub-segment of one line only (lines 1 and 18 respectively).
+ The first stub-segment has no identification. It specifies the start of a
+new output module by the FILE option and thus is not meant to be referenced
+(see also example 5).
+ Line 2 (an L5) separates line 3 (an L4) from the stub-segment and makes it
+belong to the code-segment which expands over lines 2-11.
+ There resides only one slot inside the first stub (line 12) and this slot
+is identified as "*VAMPBODY*". The second stub has no slots at all.
+ Line 13 is a trivial code-segment and line 14 marks the end of the first
+stub-block. The string following the "End of" is optional and does not have to
+match the stub name in any way.
+
+
+3.2 Example 2: Multiple slots
+
+ Environment module:
+ In the past there have been made several changes in the VAMP
+ program. These changes have been made in the extracted modules rather
+ then in the VAMP source. To make source files consistent with the
+ modules, the source files have been updated in march 1990 by Jeroen
+ Reef.
+
+ Furthermore, the updated source files contain two additional
+ modules, VAMP.MSG and DECLAR_MOD. The module VAMP.MSG contains the error
+ messages of VAMP and the module DECLAR_MOD contains the types and
+ constants used by several modules of VAMP. This module uses the
+ ENVIRONMENT, which directs the compiler to generate an environment file
+ DECLAR.PEN. Other modules can reference the identifiers declared in
+ DECLAR_MOD by inheriting the environment with the INHERIT attribute.
+
+
+
+ 1 (****** #File "DECLAR_MOD.PAS". #Indent ON. ******)
+ 2
+ 3 (***************************************************************)
+ 4 (* Module to contain all parameters and global declarations *)
+ 5 (* of the VAMP system. *)
+ 6 (***************************************************************)
+ 7 [ENVIRONMENT ('DECLAR.PEN')] MODULE DECLARS;
+ 8
+ 9 (********** Parameters of the VAMP-system (#mul) *************)
+ 10
+ 11 TYPE
+ 12 ABSTRACT = (DEFINED, UNDEFINED);
+ 13 (********* Simple types of the VAMP-system (#mul) ********)
+ 14 (******** Structured types of the VAMP-system (#mul) ******)
+ 15 END.
+ 16 (***************** End of DECLARE_MOD.PAS ********************)
+
+Remarks:
+ The stub-block extends over 16 lines. Line 1 is the stub-segment and line
+16 closes the stub-block. Lines 2-8 constitute the first code-segment of the
+stub, lines 10-12 the middle one and line 15 the last one.
+ There are three slots (or slot-segments), lines 9, 13 and 14. All slots
+consist of one line only and carry the multiple option. For instance the first
+slot can swallow any number of parameter definition that might turn up in the
+future.
+ The names (identifications) of the slots are respectively
+
+ "*PARAMETERSOFTHEVAMPSYSTEM*"
+ "*SIMPLETYPESOFTHEVAMPSYSTEM*"
+ "*STRUCTUREDTYPESOFTHEVAMPSYSTEM*"
+
+
+3.3 Example 3: Quick stubs and abstract data types
+
+ First level data structures:
+ This level introduces the data-structure TTY_INFO, containing the
+ initial communication between the terminal and the program. The
+ definition requires in addition four system parameters and some
+ constants and types which are related to file specifications. The
+ structure of CODE_INFO is left open for the time being.
+
+
+ 1 (********** Parameters of the VAMP-system (#quick) ***********)
+ 2 (* -------- Parameters of TTY_INFO --------- *)
+ 3 MAX_FILE_SPEC_L = 255; (* Maximum length file-specific. *)
+ 4 MAX_FILE_NAME_L = 39; (* Maximum length file-name. *)
+ 5 MAX_FILE_EXT_L = 39; (* Maximum length file-extension. *)
+ 6 MAX_IN_FILES = 8; (* Maximum number of in-files for *)
+ 7 (* a single run. *)
+ 8 UPB_IN_FILES = 9; (* = MAX_IN_FILES + 1. *)
+ 9 MAX_MODULES = 10; (* Maximum number of modules *)
+ 10 (* specified for a run. *)
+ 11 UPB_MODULES = 11; (* = MAX_MODULES + 1. *)
+ 12 EMPTY = '';
+ 13
+ 14 (********* Simple types of the VAMP-system (#quick) **********)
+ 15 (* -------- Simple types of TTY_INFO --------- *)
+ 16 FILE_SPEC = VARYING [MAX_FILE_SPEC_L] OF CHAR;
+ 17 FILE_NAME = VARYING [MAX_FILE_NAME_L] OF CHAR;
+ 18 FILE_EXT = VARYING [MAX_FILE_EXT_L] OF CHAR;
+ 19
+ 20 (******** Structured types of the VAMP-system ****************)
+ 21 (* -------- Structured types of TTY_INFO --------- *)
+ 22 TTY_INFO = RECORD
+ 23 IN_FILES: ARRAY [1..UPB_IN_FILES] OF FILE_SPEC;
+ 24 MODULES: ARRAY [1..UPB_MODULES] OF FILE_NAME;
+ 25 DFLT_EXT: FILE_EXT;
+ 26 INV_MODE,
+ 27 GO: BOOLEAN;
+ 29 END (*RECORD*);
+ 30 (**************** Declaration of CODE_INFO *******************)
+ 31 (******** End of Structured types of the VAMP-system *********)
+ 32
+ 33
+ 34 (************* Declaration of CODE_INFO (#def) ***************)
+ 35 CODE_INFO = ABSTRACT;
+ 36 (******************** End of declaration *********************)
+
+Remarks:
+ This section contains five stubs altogether, i.e. lines 1-12, 14-18, 20-31
+and 34-36. The first two blocks one have no internal slots. The quick option
+promotes them to quick stubs, which means that they are completed by the first
+line that is not an L6.
+ The third stub (20-31) illustrates how an abstract data type can be
+implemented. The stub is an ordinary one with one slot - identified as "*
+DECLARATIONOFCODEINFO*" - at line 30. The slot is by default satisfied with the
+stub at lines 34-36. But this declaration will be replaced by a new one at some
+time in the future.
+
+
+3.4 Example 4: An ordinary refinement step
+
+ Body of VAMP:
+ The input-files will be processed sequentially in the same order as
+ given by the user. The intermediate file "VAMP.TMP" is guarded by a
+ sentinel to simplify backspacing later on and it needs an additional
+ global declaration.
+
+
+ 1 (*********** Simple types of the VAMP-system ************)
+ 2 FTYPE = FILE OF CHAR;
+ 3 (****************** End of declaration ******************)
+
+
+ Now the body of VAMP expands to
+
+ 4 (********************** VAMP (body) **************************)
+ 5 [INHERIT ('SYS$LIBRARY:STARLET.PEN', 'DECLAR.PEN')]
+ 6 PROGRAM VAMP (INPUT, OUTPUT);
+ 7
+ 8 (***************** Constants of VAMP (#mult) *****************)
+ 9 (***************** Types of VAMP (#mult) *********************)
+ 10 VAR
+ 11 FILE_CNT: 1..UPB_IN_FILES;
+ 12 CURR_IN_FILE: TEXT; (* Currently read file. *)
+ 13 CODE_LINES: FTYPE; (* From input extracted code. *)
+ 14 TTY_DATA: TTY_INFO;
+ 15 CODE_STRUCT: CODE_INFO;
+ 16 (************ Variables of VAMP (#mult) ******************)
+ 17
+ 18 [EXTERNAL] PROCEDURE ASKTTY (VAR TTY_DATA: TTY_INFO); EXTERN;
+ 19 (*************** Functions of VAMP (#mult) *******************)
+ 20
+ 21 BEGIN
+ 22 (* Take the data, that are needed for this VAMP run from *)
+ 23 (* the terminal. *)
+ 24 ASKTTY (TTY_DATA);
+ 25 WITH TTY_DATA DO
+ 26 IF GO THEN
+ 27 BEGIN
+ 28 (********************* VAMP (C) **********************)
+ 29 (** Initialize CODE_STRUCT. **)
+ 30 (*******************************************************)
+ 31
+ 32 OPEN (CODE_LINES, FILE_NAME :='VAMP.TMP',
+ 33 ORGANIZATION := RELATIVE, ACCESS_METHOD := DIRECT,
+ 34 DISPOSITION := DELETE);
+ 35 REWRITE (CODE_LINES);
+ 36 FILE_CNT := 1;
+ 37 WHILE (IN_FILES [FILE_CNT] <> EMPTY) DO
+ 38 BEGIN
+ 39 WRITELN ('Proceeding on file ',IN_FILES [FILE_CNT]);
+ 40 OPEN (CURR_IN_FILE, FILE_NAME := IN_FILES [FILE_CNT],
+ 41 HISTORY := READONLY);
+ 42 RESET (CURR_IN_FILE);
+ 43 PUT (CODE_LINES); (* Start file with a sentinel. *)
+ 44
+
+
+ 45 (****************** VAMP (A) *********************)
+ 46 (** Build CODE_STRUCT and fill CODE_LINES by a **)
+ 47 (** scan of CURR_IN_FILE, using the information **)
+ 48 (** of MODULES, DFLT_EXT and INV_MODE. **)
+ 49 (***************************************************)
+ 50
+ 51 CLOSE (CURR_IN_FILE);
+ 52 FILE_CNT := FILE_CNT + 1;
+ 53 END (*WHILE*);
+ 54
+ 55 (******************** VAMP (B) ***********************)
+ 56 (** Generate the files as specified by CODE_STRUCT **)
+ 57 (** from the data contained by CODE_LINES. **)
+ 58 (*******************************************************)
+ 59
+ 60 (* Close and Delete scratch-file CODE_LINES. *)
+ 61 CLOSE (CODE_LINES, DELETE);
+ 62 END
+ 63 ELSE
+ 64 WRITELN ('!!! You specified an empty run - try again !!!');
+ 65 END (*VAMP*).
+ 66 (******************* End of VAMP (body) **********************)
+ 67
+ 68
+ 69 (************ Constants of VAMP (#leader, #quick) ************)
+ 70 CONST
+ 71 (************ Types of VAMP (#leader, #quick) ****************)
+ 72 TYPE
+
+Remarks:
+ This refinement contains four stubs (lines 1-3, 4-66, 69-70 and 71-72). The
+second stub has seven slots (lines 8, 9, 16, 19, 28-30, 45-49 and 55-58). Lines
+22, 23 and 60 are simple code-lines from CLiPs point of view.
+ The leader option of the last two stubs defines the code that will be
+inserted in front of a stub that matches the slot.
+
+
+3.5 Example 5: A subroutine module
+
+ 1 (****** #File "ASKTTY.PAS" ******)
+ 2 [INHERIT ('DECLAR.PEN')] MODULE ASKTTY (INPUT, OUTPUT);
+ 3
+ 4 (*********** External procedures of ASKTTY (#mult) ************)
+ 5
+ 6 (***************************************************************)
+ 7 (* Routine: ASKTTY - ASK information from TTY. *)
+ 8 (* Purpose: To obtain from the TTY the information which *)
+ 9 (* is needed to perform a VAMP run. *)
+ 10 (* Interface: TTY_DATA - Data from TTY to VAMP. *)
+ 11 (* TTY - Source of all knowledge. *)
+ 12 (* Author/Date: VAMP project management, September 29, 1983. *)
+ 13 (***************************************************************)
+ 14 [GLOBAL] PROCEDURE ASKTTY (VAR TTY_DATA: TTY_INFO);
+ 15
+ 16 (************* Constants of ASKTTY (#multiple) ***************)
+ 17 (************* Types of ASKTTY (#multiple) *******************)
+ 18 (************* Variables of ASKTTY (#multiple) ***************)
+ 19 (************* Procedures of ASKTTY (#multiple) **************)
+ 20
+ 21 BEGIN
+ 22 WITH TTY_DATA DO
+ 23 BEGIN
+ 24 (******************** ASKTTY (1) *********************)
+ 25 (** Get IN_FILES from TTY. **)
+ 26 (*******************************************************)
+ 27
+ 28 GO := NOT (IN_FILES[1] = EMPTY);
+ 29 IF GO THEN
+ 30 BEGIN
+ 31 (**************** ASKTTY (2) *********************)
+ 32 (** Ask which modules must be generated by VAMP. **)
+ 33 (** Set INV_MODE, MODULES and GO accordingly. **)
+ 34 (***************************************************)
+ 35 END (*IF*);
+ 36 IF GO THEN
+ 37 BEGIN
+ 38 (**************** ASKTTY (3) *********************)
+ 39 (** Ask DFLT_EXT from the terminal. **)
+ 40 (***************************************************)
+ 41 END (*IF*);
+ 42 END (*WITH*);
+ 43 END (*ASKTTY*);
+ 44
+ 45 END (*MODULE*).
+ 46 (********************** End of MODULE ************************)
+ 47
+ 48
+ 49 (********** Constants of ASKTTY (#leader, #quick) ************)
+ 50 CONST
+
+
+ 51 (********** Types of ASKTTY (#leader, #quick) ****************)
+ 52 TYPE
+ 53 (********** Variables of ASKTTY (#leader, #quick) ************)
+ 54 VAR
+
+Remarks:
+ A clear cut example of a subroutine definition in VAX/VMS Pascal that is to
+be compiled independently. The refinement contains stubs at lines 1-46, 49-50,
+51-52 and 53-54. The last three stubs are all quick stubs.
+ The first stub is a main stub. It carries no identification and only
+specifies the name of the file that will finally hold the module. Had the
+file-option be omitted, this would have meant an error.
+ Lines 4, 16, 17, 18 and 19 are single-line slot for future declarations.
+The leader stubs at the end secure syntactic details. Lines 24-26, 31-34 and
+38-40 are ordinary slots again.
+
+
+4 Semantics of options
+
+#Comment (stub, slot)
+ The comment option transforms the special CLIP-characters to a predefined
+ format which suits a particular programming language. The option has an
+ obligatory argument, e.g. PASCAL, FORTRAN, C, ADA etc. or ON/OFF. The
+ ON/OFF argument specifies wether or not the slot- or stub-segment is to be
+ included upon substitution. Comment options can be nested and the most
+ local version controls the operation.
+
+#Default (stub)
+ A default stub is prefixed to exclusively substituted if no other stub is
+ found for that particular slot.
+
+#Indent (stub, slot)
+ The indent option controls the indentation of the generated listing. Indent
+ options can be nested and the most local option overrules the more global
+ ones. Indent has as one optional argument, ON or OFF.
+
+#File (stub)
+ The file option identifies the stub as a main stub (viz. the root of a new
+ module). The option carries a string in quotes as argument. This string
+ specifies the name of the file to be generated.
+
+#Leader (stub)
+ The leader stub is usually combined with multiple slots. It modifies the
+ environment of the stubs that will be substituted by inserting the leader
+ stub in front of the first encountered normal stub.
+
+#Multiple (slot)
+ A multiple slot accepts the substitution of any number of stubs.
+
+#Optional (slot)
+ An optional slot accepts the substitution of 0 or 1 stubs only.
+
+#Overrule (stub)
+ The overrule stub replaces the stub already substituted in a particular
+ position. It is mainly meant for testing purposes.
+
+#Quick (stub)
+ A quick stub is a stub without internal structure (viz. slots). Following
+ the stub segment only L6-type lines are allowed. Any other type of line
+ will end the stub.
+
+#Separator (stub)
+ A separator stub is to be inserted between two consecutive stubs of the
+ same slot.
+
+#Trailer (stub)
+ The trailer stub is the counterpart of the default stub. It modifies the
+ environment by adding the trailer stub after the last encountered normal
+ stub.
+
+
+5 Using CLiP
+
+The complete CLiP system for DOS and VMS consists of two independent programs,
+CLIP_1.EXE and CLIP_2.EXE. The Unix version has only one program, CLIP, which
+is functionally identical to CLIP_2. CLIP_1 prepares a file, CLIP.INI, telling
+CLIP_2 (the actual module extractor) literally everything it has to know in
+order to perform a run (a detailed description of the structure of an INI-file
+is in the next section). Thus CLIP.INI specifies to CLIP_2 (CLIP):
+ - the files it has to read (i.e. the source files),
+ - the modules it should extract (i.e. target modules),
+ - the name of the report file,
+ - the syntax of the CLiP-lines (i.e. the style of the lines that trigger
+ the module extraction process).
+CLIP_1 allows a very detailed specification of the extraction process, much
+more detailed than you will need in general. For this reason the CLiP system
+comes with a couple of routines to shortcut CLIP_1 and for Unix users these
+routines are the primary tool to construct their INI-file. For a description of
+these routines we refer to section "Using CLiP" of the READ_ME file of this
+release.
+ When using CLiP it is recommended to introduce at least the following
+directories:
+ - A directory for the source files CLiP will use. This directory also
+ holds the various INI-file you maintain to conduct the extraction
+ process.
+ - A directory to contain the extracted modules.
+ - A directory to contain the results of the compilation and linking of
+ the modules.
+ - In case CLiP is used in combination with a word-processor, it is wise
+ to keep the word-processor files again in a separate directory. In this
+ case the source file directory should be fed with ASCII exports from
+ word-processor files.
+
+
+6 The structure of an INI-file
+
+This section explains the structure of an INI-file by means of an example file.
+You should understand this structure thoroughly before your try to edit
+INI-files yourself directly through an editor [Ammers 1993].
+ The example is an INI-file for MS-DOS. The only difference with other
+platforms is the specification of directories. The numbers at the beginning of
+every line are added for convenience of reference. They are not part of the
+file itself.
+
+ <================= Example of an INI-file ====================>
+ 1 This file contains data that is needed to run CLiP
+ 2 And is generated by CLiP_MENU
+ 3 Modifying this file at own risk.
+ 4 Using CLiP_MENU is definitely recommended.
+ 5
+ 6 INTERACTIVE_MODE Mode (INTERACTIVE/DEBUG/HELPFUL/AUTO)
+ 7 NO Interactive fault correction (YES/NO)
+ 8 BOTH Error message destination (TERMINAL/......)
+ 9 (* Left comment string
+ 10 *) Right comment string
+ 11 * Command character
+ 12 ENDOF END string
+ 13 # Option marker
+ 14 EXTRACTED The specified modules are (OMITTED/EXTRACTED)
+ 15 ------------ REPORT FILE -----------
+ 16 CLIP.RPT
+ 17 ------------ INPUT FILES -----------
+ 18 f:\LPT\MAN\EX01_A.ASC
+ 19 f:\LPT\MAN\EX01_B.ASC
+ 20 ------------ MODULES ---------------
+ 21 F:\TEST\
+ 22 PALINDRO.PAS
+ 23 F:\TEST\
+ 24 TESTDATA.IN
+ 25 ------------ MODULE DIRECTORY ------
+ 26 f:\LPT\
+ 27 ------------ END OF INI FILE -------
+ <================= End of Example INI-file ===================>
+
+Lines 1-5: Descriptive lines that are flushed upon reading.
+
+Lines 6-14: Information behind position 24 is not interpreted.
+
+Lines 6-7: These lines refer to unimplemented options. They should not be
+ changed.
+
+Lines 8: Identifies the output device for messages and reports. The first
+ word of the line must be on of the following keywords TERMINAL,
+ REPORTFILE (or FILE), BOTH or NONE and we assume the meaning self
+ evident.
+
+Lines 9-13: These lines together define the syntax of the lines CLiP will
+ recognize. For an explanation of the CLiP syntax, refer to [Ammers
+ 1993].
+
+
+Lines 9: At most 6 characters to specify the "left comment string" i.e. the
+ opening sequence of a comment string of the programming language
+ you want to use. The characters cannot be letters (A-Z, a-z),
+ digits (0-9) or a dot (.).
+
+Lines 10: At most 6 characters to specify the "right comment string" i.e.
+ the closing sequence of a comment string of the programming
+ language you want to use. The characters cannot be letters (A-Z,
+ a-z), digits (0-9) or a dot (.).
+
+Lines 11: The character that is postfixed to a left comment string and
+ prefixed to a right comment string in order to identify it as a
+ special comment that CLiP has to process, a so called CLiP-line.
+ The character cannot be a letter (A-Z, a-z), a digits (0-9) or a
+ dot (.).
+
+Lines 12: The leading characters that identify a particular CLiP-line as the
+ end of a stub, i.e. a particular section that can be substituted
+ elsewhere.
+
+Lines 13: The character that identifies the options.
+
+Line 14: Relates to the modules in the module section below. The specified
+ modules must either be extracted or omitted and the first word of
+ this line can only be OMITTED or EXTRACTED.
+
+Line 15: Starts the section defining the file that mirrors the extraction
+ process. This line should be copied literally.
+
+Line 16: Path and file specification of the report file.
+
+Line 17: Starts the section defining the input files for the extraction
+ process, the so called source files. This line should be copied
+ literally.
+
+Line 18-19: Every line specifies a path and source file. There may be up to 64
+ lines in this section.
+
+Line 20: Starts the section defining the modules that are considered during
+ the extraction process. Whether the modules are extracted or
+ omitted depends on line 14. This line should be copied literally.
+
+Line 21-24: Every line pair specifies a path and a module file. There may be
+ up to 64 pairs (128 lines) in this section.
+
+Line 25: Starts the section to identify the default directory for modules,
+ i.e. the directory where modules go to that have no explicit
+ directory specified by the MODULES section. This line should be
+ copied literally.
+
+Line 26: Default directory for extracted modules.
+
+Line 27: Identifies the end of the INI-file. This line should be copied
+ literally.
+
+
+7 Bugs, work-arounds and undocumented features
+
+7.1 "SP_EXTR_STR: system failure .... call maintenance"
+
+This failure may happen if the stubs have not been correctly closed with the
+END-STRING that has been specified as the syntax. The default value of this
+string is "ENDOF". Also the line containing the END-STRING should be properly
+closed. For example in a Pascal situation
+
+ (********* End of module (2.1) ***)
+
+should be all right, but
+
+ (****** End of module (2.1) **)
+
+may give trouble since the string "**)" is incorrect here.
+
+7.2 Options in general
+
+Several options have been introduces with very advanced applications in mind.
+They have hardly been tested will probably not work. You won't need them
+either. For this reason don't use the options OVERRULE, SEPARATOR and TRAILER.
+
+7.3 Multiple option
+
+A slot with the "MULTIPLE" option raises an error if no stubs are found
+matching the slot. To prevent this error message one should specify the option
+"OPTIONAL" also for the slot.
+
+7.4 Report file option NONE
+
+This option to suppress the printing of reports to the terminal has not been
+implemented. It will be eliminated in some later version.
+
+7.5 Generating target modules
+
+7.5.1 Specification
+
+If CLIP.INI specifies a target module that matches no file-option argument
+anywhere in the list of specified source files, CLiP does not complain. The
+matching is case sensitive and for instance a file-option argument
+
+ (********** #file "EXAMPLE.PAS" ***********************)
+
+does not fit a module specification in CLIP.INI of the form
+
+ Example.PAS
+
+This may lead to unpleasant surprises.
+ On MS-DOS and VAX/VMS platforms the specification of files is not context
+sensitive. For this reason the CLIP_1 program (which is available for the
+MS-DOS and VAX/VMS versions of CLiP) converts those names to upper case in the
+INI-file it creates. Thus the file-option arguments in the source files should
+definitely be specified in upper case too.
+ In a Unix environment a file name is case sensitive indeed. Currently no
+CLIP_1 exists for Unix and an INI-file has to be created by means of the
+short-cut routine CLP (or directly by means of an editor, cf. section 6). No
+conversion is performed in this case and one has to make sure the file-option
+argument is identical to the corresponding name in the INI-file.
+
+
+7.5.2 Omitted modules
+
+If modules are specified for being OMITTED at extraction time, it will be
+omitted independent of the path that may have been specified. The module will
+never be generated.
+
+7.5.3 Empty run
+
+CLiP does not always recognize a corrupted INI-file. Thus if you run CLiP and
+it produces a report of the form
+
+ ============================ CLiP version 2.1 ==========================
+
+ ============================ Busy scanning =============================
+ Scanning file: ..................
+ .................................
+
+ ============================ End scanning ==============================
+
+ ============================ Busy analysing ============================
+
+ ============================ End analysing =============================
+
+ ============================ Busy generating ===========================
+
+ ============================ End generating ============================
+ Used (CPU) time :5.88 Sec.
+ See you next time !
+
+then you start checking the specifications of the target modules, since this is
+the most likely source of trouble. Keep in mind however, that the problem may
+be also arise due to a corrupted INI-file.
+
+7.6 Lost lines
+
+If you have stubs of the form
+
+ (****************** GEN_POOL global routines ********************)
+ (******************************************************************)
+ (* routine: write_string .... *)
+ (* ................... *)
+ (******************************************************************)
+
+you will see that the second line of the stub (the "starred" line) is not
+generated in the target modules. For this reason it is better to put an
+additional empty line in between. For example the following stub will be
+extracted correctly.
+
+ (****************** GEN_POOL global routines ********************)
+
+ (******************************************************************)
+ (* routine: write_string .... *)
+ (* ................... *)
+ (******************************************************************)
+
+
+7.7 DOS version only
+
+If you activate the PROJECT/Load INI-file or PROJECT/Save INI-file menu of the
+CLIP_1 program and you specify an illegal drive in the Current Directory
+option, you may hang the system. For instance a drive specification preceeded
+by a space will produce this bug.
+
+
+8 References
+
+Ammers E.W. van, M.R. Kramer (1993), The CLiP Style of Literate Programming
+ (submitted for publication). Anonymously ftp-able as CLIP_STYLE.PS,
+ CLIP_STYLE_A.PS and CLIP_STYLE_B.PS from directory CLIP on
+ sun01.info.wau.nl.
+
+Ammers E.W. van, Kramer M.R. (1992), VAMP: A Tool for Literate Programming
+ Independent of Programming Language and Formatter. CompEuro '92
+ Proceedings, May 4-8 1992, the Hague, pg. 371-376.
+
+Knuth D.E. (1984). Literate Programming. The Computer Journal 27, 2, 97-111.
diff --git a/web/clip/ms_dos/modula.ini b/web/clip/ms_dos/modula.ini
new file mode 100644
index 0000000000..892efa30b0
--- /dev/null
+++ b/web/clip/ms_dos/modula.ini
@@ -0,0 +1,21 @@
+This file contains data that is needed to run CLiP
+And is generated by CLiP_MENU
+Modifying this file at own risk.
+Using CLiP_MENU is definitely recommended.
+
+INTERACTIVE_MODE Mode (INTERACTIVE/DEBUG/HELPFUL/AUTO)
+YES Interactive fault correction (YES/NO)
+BOTH Error message destination (TERMINAL/REPORTFILE/BOTH/NONE)
+(* Left comment string
+*) Right comment string
+* Command character
+ENDOF END string
+# Option marker
+OMITTED The specified modules are (OMITTED/EXTRACTED)
+------------ REPORT FILE -----------
+CLIP.RPT
+------------ INPUT FILES -----------
+------------ MODULES ---------------
+------------ MODULE DIRECTORY ------
+
+------------ END OF INI FILE -------
diff --git a/web/clip/ms_dos/pascal.ini b/web/clip/ms_dos/pascal.ini
new file mode 100644
index 0000000000..892efa30b0
--- /dev/null
+++ b/web/clip/ms_dos/pascal.ini
@@ -0,0 +1,21 @@
+This file contains data that is needed to run CLiP
+And is generated by CLiP_MENU
+Modifying this file at own risk.
+Using CLiP_MENU is definitely recommended.
+
+INTERACTIVE_MODE Mode (INTERACTIVE/DEBUG/HELPFUL/AUTO)
+YES Interactive fault correction (YES/NO)
+BOTH Error message destination (TERMINAL/REPORTFILE/BOTH/NONE)
+(* Left comment string
+*) Right comment string
+* Command character
+ENDOF END string
+# Option marker
+OMITTED The specified modules are (OMITTED/EXTRACTED)
+------------ REPORT FILE -----------
+CLIP.RPT
+------------ INPUT FILES -----------
+------------ MODULES ---------------
+------------ MODULE DIRECTORY ------
+
+------------ END OF INI FILE -------
diff --git a/web/clip/ms_dos/read_me.ps b/web/clip/ms_dos/read_me.ps
new file mode 100644
index 0000000000..9d84e121c6
--- /dev/null
+++ b/web/clip/ms_dos/read_me.ps
@@ -0,0 +1,1812 @@
+%!PS-Adobe-2.0
+%%DocumentFonts: (atend)
+%%Title: F:\\LPT\\DOS\\READ_ME.DOC
+%%Creator: Lotus Manuscript
+%%For: Eric W. van Ammers
+%%CreationDate: November 17, 1993
+%%Pages: (atend)
+%%BoundingBox: 0 0 595 841
+%%EndComments
+% PostScript Prologue (initialization) for Manuscript
+% Copyright (c) 1985,1986,1987,1988 Lotus Development Corporation
+% There is no user servicable code in this file.
+
+% set timeouts to infinite
+statusdict begin
+0 setjobtimeout
+/manualfeedtimeout 3600 def
+/waittimeout 0 def
+end
+
+% correct bug correction in rev 41.0
+/idiv{div cvi}bind def
+
+% define User Dictionary
+/msdict 300 dict def msdict begin
+/bd{bind def}bind def
+
+% Define commonly used things
+/delay{usertime 5000 add{dup usertime lt{pop exit}if}loop}bd
+/mfeed{statusdict begin /manualfeed true def end}bd
+/afeed{statusdict begin /manualfeed false def end}bd
+/bfeed{ afeed statusdict begin /setpapertray where
+ {pop setpapertray}{pop} ifelse end}bd
+
+/dpi{0.24 dup scale}bd
+
+% These two are called for each page
+/inpage false def
+/begpage{save dpi /inpage true def}bd
+/endpage{inpage {restore showpage}if }bd
+
+% for possible banner
+/fileinfo {pop pop pop}bd
+/enddocument {end} bd
+
+% these are also used by eqn & gmf
+/ld{load def}bd
+/x/exch ld
+/cu{300 mul 72 div}bd
+/m/moveto ld
+/t/translate ld
+/rm/rmoveto ld
+/cp/currentpoint ld
+/st/stroke ld
+/ln/lineto ld
+/rlt/rlineto ld
+/slw/setlinewidth ld
+
+/ff/findfont ld
+/scf/scalefont ld
+/sf/setfont ld
+/fs{x /pt x def ff pt cu scf sf}bd
+
+% linedraw
+/li{4 2 roll setlinewidth 3 1 roll moveto 0.0 rlineto st}bd
+
+% outline factor
+/olwid 40.0 def
+% stroke width for outline
+/uoslw {pt cu x div slw}bd
+% relative horizontal move
+/xm{x currentpoint pop sub 0.0 rmoveto}bd
+
+% The basic show
+/s/show ld
+% move horizontal and show
+/ms{xm s}bd
+
+% variations
+% outline show - first printer attribute
+/ppss{dup cp 3 -1 roll false charpath st
+x 3 -1 roll stringwidth pop add x moveto}bd
+/pss{olwid uoslw { ( ) dup 0 4 -1 roll put ppss}forall}bd
+/ps{pss}bd
+/mps{xm ps}bd
+
+% graybox show - second printer attribute
+/gb{cp 3 -1 roll pt cu dup 4 div neg 0 x rm dup 0 x rlt x 0 rlt
+neg 0 x rlt closepath currentgray .9 setgray fill setgray m}bd
+/usi{dup stringwidth pop gb}bd
+/us{usi s}bd
+/xum{x cp pop sub dup gb 0 rmoveto}bd
+
+% combinations of PD1 and PD2
+/ups{usi pss}bd
+/mups{xm ups}bd
+/mus{xm us}bd
+
+% define a new encoding vector (code page 850 based)
+/PC 256 array def
+StandardEncoding PC copy pop
+
+/dotaccent/bullet
+/quotesingle/quotedblleft/quotedblright/quotesinglbase
+/quotedblbase/guilsinglleft/guilsinglright/.notdef
+/ellipsis/perthousand/.notdef/.notdef/paragraph/section/dagger/daggerdbl
+/OE/oe/fi/fl/endash/emdash/fraction/Ydieresis
+PC 6 26 getinterval astore pop
+
+/Ccedilla/udieresis/eacute/acircumflex/adieresis/agrave/aring/ccedilla
+/ecircumflex/edieresis/egrave/idieresis/icircumflex/igrave/Adieresis/Aring
+/Eacute/ae/AE/ocircumflex/odieresis/ograve/ucircumflex/ugrave
+/ydieresis/Odieresis/Udieresis/oslash/sterling/Oslash/.notdef/florin
+/aacute/iacute/oacute/uacute/ntilde/Ntilde/ordfeminine/ordmasculine
+/questiondown/.notdef/.notdef/onehalf/onequarter/exclamdown/guillemotleft/guillemotright
+/.notdef/.notdef/.notdef/.notdef/.notdef/Aacute/Acircumflex/Agrave
+/.notdef/.notdef/.notdef/.notdef/.notdef/cent/yen/.notdef
+/.notdef/grave/.notdef/circumflex/tilde/.notdef/atilde/Atilde
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/currency
+/eth/Eth/Ecircumflex/Edieresis/Egrave/dotlessi/Iacute/Icircumflex
+/Idieresis/.notdef/.notdef/.notdef/.notdef/brokenbar/Igrave/.notdef
+/Oacute/germandbls/Ocircumflex/Ograve/otilde/Otilde/.notdef/thorn
+/Thorn/Uacute/Ucircumflex/Ugrave/yacute/Yacute/.notdef/acute
+/.notdef/.notdef/.notdef/threequarters/paragraph/section/.notdef/cedilla
+/ring/dieresis/periodcentered/onesuperior/threesuperior/twosuperior/.notdef/.notdef
+
+PC 128 128 getinterval astore pop
+
+% duplicate fonts with a new encoding vector
+/recd 5 dict def
+/pcft
+{recd begin
+/ncs PC def /nfn x def
+/bfn x def /bfd bfn findfont def
+/nf bfd maxlength dict def
+bfd{x dup dup /FID ne x /Encoding ne and
+{x nf 3 1 roll put}{pop pop}ifelse
+}forall
+nf/FontName nfn put
+nf/Encoding ncs put
+nfn nf definefont pop
+end}bd
+
+/fs{x /pt x def ff pt cu scf sf}bd
+
+% used by eqn
+/Times-Roman/TR pcft /Times-Bold/TRB pcft
+/Times-Italic/TRI pcft /Times-BoldItalic/TRBI pcft
+/Helvetica/HV pcft /Helvetica-Bold/HVB pcft
+/Helvetica-Oblique/HVO pcft /Helvetica-BoldOblique/HVBO pcft
+/Courier/CR pcft /Courier-Bold/CRB pcft
+/Sym{/Symbol fs}bd
+
+% Bit map image data decompression code
+/xx 0 def /yy 0 def
+/xbytes 0 def
+/lbuf 1200 string def /obuf 600 string def
+/bval <FFFEFCF8F0E0C080000103070F1F3F7F> def
+/blacks 96 string def /whites 96 string def
+0 1 95 {whites x 255 put} for
+
+/dispatch [
+{
+dup 47 le {32 sub 4 bitshift x pop 1}{
+dup 63 le {x pop 48 sub bval x get
+3 copy put x 1 add x 0} {
+dup 79 le {62 sub} {
+80 sub { 3 copy put x 1 add x } repeat 0
+}ifelse }ifelse }ifelse
+}bind
+{
+32 sub add
+3 copy put
+x 1 add x 0
+} bind
+{
+32 sub x pop add 255 0
+}bind
+{
+32 sub x pop
+3 copy getinterval
+whites 0 3 index getinterval
+x copy pop add 255 0
+}bind
+{
+32 sub x pop
+3 copy getinterval
+blacks 0 3 index getinterval
+x copy pop add 0 0
+}bind
+]def
+
+% read a raster line and unpack
+/readx{
+obuf 0 255 0
+currentfile lbuf readline pop
+{x dispatch x get exec} forall
+pop pop pop 0 xbytes getinterval}bd
+
+/mspic{
+/yy x def/xx x def
+/xbytes xx 8 idiv def
+xx yy 1 [xx 0 0 0 yy sub 0 yy]{readx}image}bd
+
+
+
+/Helvetica/fA pcft/FA{/fA fs}bd
+/Helvetica-Oblique/fAI pcft/FAI{/fAI fs}bd
+/Helvetica-Bold/fAB pcft/FAB{/fAB fs}bd
+/Helvetica-BoldOblique/fAIB pcft/FAIB{/fAIB fs}bd
+/Times-Roman/fB pcft/FB{/fB fs}bd
+/Times-Italic/fBI pcft/FBI{/fBI fs}bd
+/Times-Bold/fBB pcft/FBB{/fBB fs}bd
+/Times-BoldItalic/fBIB pcft/FBIB{/fBIB fs}bd
+/Courier/fQ pcft/FQ{/fQ fs}bd
+/Courier-Oblique/fQI pcft/FQI{/fQI fs}bd
+/Courier-Bold/fQB pcft/FQB{/fQB fs}bd
+/Courier-BoldOblique/fQIB pcft/FQIB{/fQIB fs}bd
+(F:\\LPT\\DOS\\READ_ME.DOC)(Eric W. van Ammers)(November 17, 1993)fileinfo
+%%EndProlog
+%%Page: 0 1
+begpage
+18 FAB
+731 2938 m
+(READ_ME for CLIP/MS_DOS)s
+12 FAB
+295 2588 m
+(1 Directory CLIP/MS_DOS)s
+12 FB
+295 2517 m
+(The)s
+385(directory)ms
+578(contains)ms
+757(the)ms
+831(files)ms
+389 2457 m
+(a.)s
+484(READ_ME.PS,)ms
+813(READ_ME.TXT)ms
+1172(\(this)ms
+1273(file\).)ms
+389 2397 m
+(b.)s
+484(CLIP_1.EXE,)ms
+777(CLIP_2.EXE,)ms
+1070(CLIPHELP.HLP,)ms
+1435(CLIP_MSG.DAT)ms
+1805(\(CLiP)ms
+1940(system\).)ms
+389 2337 m
+(c.)s
+484(CL.BAT,)ms
+686(CLP.BAT,)ms
+915(CLIP.BAT,)ms
+1161(CLP_ENV.BAT)ms
+1505(\(user)ms
+1618(support\).)ms
+389 2277 m
+(d.)s
+484(EX01_A.PS,)ms
+755(EX01_A.ASC,)ms
+1067(EX01_A.INI,)ms
+1352(EX01_A.PAS,)ms
+484 2217 m
+(EX01_B.PS,)s
+752(EX01_B.ASC,)ms
+1061(EX01_B.INI,)ms
+1343(EX01_B.PAS)ms
+1635(\(example\).)ms
+389 2157 m
+(e.)s
+484(ADA.INI,)ms
+698(C.INI,)ms
+838(FORTRAN.INI,)ms
+1177(LISP.INI,)ms
+1385(MODULA.INI,)ms
+1711(PASCAL.INI)ms
+1996(\(template)ms
+484 2097 m
+(INI-files)s
+669(for)ms
+740(some)ms
+858(languages\).)ms
+389 2037 m
+(f.)s
+484(MANUAL.PS,)ms
+796(MANUAL.TXT)ms
+1138(\(manual\).)ms
+295 1977 m
+(File)s
+385(extensions:)ms
+389 1917 m
+(PS-files)s
+560(are)ms
+633(postscript)ms
+840(files)ms
+939(and)ms
+1024(represent)ms
+1220(the)ms
+1294(type-set)ms
+1465(versions)ms
+1644(of)ms
+1698(the)ms
+1772(corresponding)ms
+2071(ASC-)ms
+389 1857 m
+(or)s
+443(TXT-files.)ms
+389 1797 m
+(ASC-files)s
+600(are)ms
+673(derived)ms
+835(by)ms
+896(ASCII-export)ms
+1183(from)ms
+1292(the)ms
+1365(original)ms
+1532(word-processor)ms
+1855(files)ms
+1953(\(in)ms
+2020(our)ms
+2098(case)ms
+389 1737 m
+(Lotus)s
+515(Manuscript\).)ms
+389 1677 m
+(TXT-files)s
+601(are)ms
+674(ASCII)ms
+816(versions)ms
+995(of)ms
+1049(the)ms
+1122(corresponding)ms
+1420(PS-files.)ms
+1603(They)ms
+1718(are)ms
+1791(slightly)ms
+1953(modified)ms
+2146(to)ms
+389 1617 m
+(improve)s
+574(the)ms
+655(lay-out.)ms
+828(TXT-files)ms
+1048(are)ms
+1128(a)ms
+1169(service)ms
+1330(for)ms
+1408(people)ms
+1561(who)ms
+1666(have)ms
+1780(no)ms
+1849(easy)ms
+1957(access)ms
+2104(to)ms
+2162(a)ms
+389 1557 m
+(postscript)s
+595(printer.)ms
+12 FAB
+295 1428 m
+(2 Installing CLiP)s
+12 FB
+389 1357 m
+(a.)s
+484(Use)ms
+588(FTP)ms
+699(to)ms
+764(copy)ms
+886(the)ms
+973(CLiP)ms
+1104(system)ms
+1269(to)ms
+1333(your)ms
+1450(local)ms
+1573(site.)ms
+1681(Note)ms
+1803(that)ms
+1904(CLIP_1.EXE,)ms
+484 1297 m
+(CLIP_2.EXE)s
+765(and)ms
+849(CLIPHELP.HLP)ms
+1202(should)ms
+1348(be)ms
+1408(FTP-ed)ms
+1570(in)ms
+1622(binary)ms
+1762(mode.)ms
+389 1237 m
+(b.)s
+484(Create)ms
+641(a)ms
+690(directory)ms
+897(for)ms
+982(the)ms
+1069(CLiP-system.)ms
+1370(This)ms
+1485(directory)ms
+1692(will)ms
+1797(be)ms
+1870(referred)ms
+2055(as)ms
+2123(the)ms
+484 1177 m
+(CLIP_DIR.)s
+728(Let)ms
+808(us)ms
+865(assume)ms
+1024(this)ms
+1109(directory)ms
+1302(is)ms
+578 1117 m
+(C:\\CLIP)s
+389 1057 m
+(c.)s
+484(Copy)ms
+605(the)ms
+679(files)ms
+578 997 m
+(CLIPHELP.HLP,)s
+943(CLIP_1.EXE,)ms
+1236(CLIP_2.EXE)ms
+1516(and)ms
+1601(CLIP_MSG.DAT)ms
+484 937 m
+(to)s
+535(the)ms
+609(CLIP_DIR.)ms
+389 877 m
+(d.)s
+484(Copy)ms
+605(the)ms
+678(files)ms
+578 817 m
+(CL.BAT,)s
+779(CLP.BAT,)ms
+1008(CLIP.BAT,)ms
+1254(CLP_ENV.BAT)ms
+484 757 m
+(to)s
+538(the)ms
+614(directory)ms
+810(that)ms
+901(contains)ms
+1083(your)ms
+1190(batch)ms
+1314(files)ms
+1415(\(this)ms
+1520(directory)ms
+1716(is)ms
+1764(assumed)ms
+1952(to)ms
+2006(be)ms
+2069(in)ms
+2123(the)ms
+484 697 m
+(PATH)s
+627(definition)ms
+834(of)ms
+888(the)ms
+961(AUTOEXEC.BAT\).)ms
+389 637 m
+(e.)s
+484(If)ms
+529(the)ms
+601(name)ms
+721(of)ms
+773(your)ms
+876(CLIP_DIR)ms
+1107(differs)ms
+1249(from)ms
+1357(the)ms
+1429(name)ms
+1549("C:\\CLIP")ms
+1770(as)ms
+1823(suggested)ms
+2032(in)ms
+2082(point)ms
+484 577 m
+(2.a,)s
+569(the)ms
+643(batch)ms
+763(files)ms
+578 517 m
+(CL.BAT,)s
+779(CLP.BAT)ms
+996(and)ms
+1080(CLIP.BAT)ms
+484 457 m
+(have)s
+591(to)ms
+642(be)ms
+702(adjusted.)ms
+894(That)ms
+998(is)ms
+1045(the)ms
+1118(string)ms
+1245("C:\\CLIP")ms
+1468(has)ms
+1547(to)ms
+1599(be)ms
+1659(replaced)ms
+1841(by)ms
+1904(a)ms
+1939(string)ms
+2065(repre-)ms
+484 397 m
+(senting)s
+640(the)ms
+714(correct)ms
+865(name)ms
+986(of)ms
+1040(your)ms
+1144(CLIP_DIR.)ms
+8 FB
+295 145 m
+(READ_ME)s
+460(for)ms
+507(CLIP/MS_DOS)ms
+729(\(READ_ME.DOC,)ms
+993(2.106,)ms
+1084(November 17, 1993\))ms
+12 FB
+2100 145 m
+(1)s
+50 2 2130 157 li
+50 2 2045 157 li
+endpage
+%%Page: 1 2
+begpage
+12 FAB
+295 3136 m
+(3 A quick installation test)s
+12 FB
+295 3064 m
+(To)s
+363(have)ms
+470(a)ms
+505(partial)ms
+645(test)ms
+727(\(it)ms
+785(does)ms
+889(not)ms
+966(check)ms
+1095(CLIP_1\))ms
+1283(to)ms
+1334(see)ms
+1411(if)ms
+1454(your)ms
+1559(CLiP)ms
+1677(system)ms
+1829(has)ms
+1908(been)ms
+2015(properly)ms
+295 3004 m
+(installed,)s
+489(perform)ms
+663(the)ms
+736(following)ms
+943(steps:)ms
+389 2944 m
+(a.)s
+484(Choose)ms
+647(a)ms
+681(test)ms
+763(directory)ms
+956(and)ms
+1041(make)ms
+1162(it)ms
+1202(current.)ms
+1369(Let)ms
+1448(us)ms
+1505(assume)ms
+1665("C:\\TEST".)ms
+389 2884 m
+(b.)s
+484(Copy)ms
+643(the)ms
+756(files)ms
+893(EX01_A.ASC,)ms
+1244(EX01_B.ASC,)ms
+1592(EX01_A.INI,)ms
+1915(EX02_B.INI,)ms
+484 2824 m
+(EX01_A.PAS)s
+778(and)ms
+863(EX01_B.PAS)ms
+1155(to)ms
+1206(this)ms
+1291(test)ms
+1373(directory.)ms
+389 2764 m
+(c.)s
+484(Type)ms
+599(the)ms
+673(command)ms
+578 2704 m
+(>CL)s
+682(EX01_A.INI)ms
+484 2644 m
+(to)s
+542(produce)ms
+722(the)ms
+803(file)ms
+889(PALINDRO.PAS.)ms
+1278(Note)ms
+1394(that)ms
+1489(EX01_A.INI)ms
+1768(specifies)ms
+1962(the)ms
+2043(current)ms
+484 2584 m
+(directory)s
+677(for)ms
+747(the)ms
+821(source)ms
+964(files)ms
+1063(as)ms
+1117(well)ms
+1215(as)ms
+1269(for)ms
+1340(the)ms
+1414(target)ms
+1540(modules.)ms
+389 2524 m
+(d.)s
+484(Compare)ms
+680(the)ms
+753(file)ms
+833(PALINDRO.PAS)ms
+1202(with)ms
+1303(EX01_A.PAS)ms
+1598(by)ms
+1660(means)ms
+1801(of)ms
+1855(the)ms
+1928(command)ms
+578 2464 m
+(>COMP)s
+760(PALINDRO.PAS)ms
+1129(EX01_A.PAS)ms
+484 2404 m
+(There)s
+613(should)ms
+758(be)ms
+818(no)ms
+881(differences.)ms
+389 2344 m
+(e.)s
+484(Now)ms
+594(type)ms
+693(the)ms
+766(command)ms
+578 2284 m
+(>CL)s
+682(EX01_B.INI)ms
+484 2224 m
+(to)s
+535(produce)ms
+708(a)ms
+743(new)ms
+839(file)ms
+918(PALINDRO.PAS.)ms
+389 2164 m
+(f.)s
+484(Compare)ms
+679(the)ms
+753(new)ms
+849(PALINDRO.PAS)ms
+1218(with)ms
+1320(EX01_B.PAS)ms
+578 2104 m
+(>COMP)s
+760(PALINDRO.PAS)ms
+1129(EX01_B.PAS)ms
+484 2044 m
+(Again)s
+618(there)ms
+731(should)ms
+877(be)ms
+936(no)ms
+999(differences.)ms
+12 FAB
+295 1916 m
+(4 What you should know)s
+12 FB
+295 1844 m
+(The)s
+385(complete)ms
+581(system)ms
+732(executes)ms
+917(in)ms
+968(two)ms
+1056(passes.)ms
+389 1784 m
+(The)s
+482(second)ms
+637(pass,)ms
+751(CLIP_2.EXE,)ms
+1047(performs)ms
+1243(the)ms
+1320(actual)ms
+1455(module)ms
+1621(extraction.)ms
+1849(It)ms
+1896(is)ms
+1945(guided)ms
+2097(by)ms
+2162(a)ms
+295 1724 m
+(file,)s
+386(CLIP.INI,)ms
+602(which)ms
+737(tells)ms
+833(it)ms
+873(literally)ms
+1041(everything)ms
+1268(it)ms
+1308(has)ms
+1388(to)ms
+1439(know)ms
+1563(in)ms
+1614(order)ms
+1733(to)ms
+1784(perform)ms
+1958(a)ms
+1993(run.)ms
+2085(Thus)ms
+295 1664 m
+(CLIP.INI)s
+497(specifies)ms
+685(to)ms
+736(CLIP_2.EXE:)ms
+389 1604 m
+(-)s
+484(the)ms
+558(files)ms
+656(it)ms
+697(has)ms
+776(to)ms
+827(read)ms
+926(\(i.e.)ms
+1016(the)ms
+1090(source)ms
+1233(files\),)ms
+389 1544 m
+(-)s
+484(the)ms
+558(modules)ms
+740(it)ms
+780(should)ms
+926(extract)ms
+1074(\(i.e.)ms
+1165(target)ms
+1291(modules\),)ms
+389 1484 m
+(-)s
+484(the)ms
+558(report)ms
+690(file,)ms
+389 1424 m
+(-)s
+484(the)ms
+561(syntax)ms
+708(of)ms
+765(the)ms
+842(CLiP-lines)ms
+1075(\(i.e.)ms
+1168(the)ms
+1245(lines)ms
+1355(which)ms
+1493(trigger)ms
+1643(the)ms
+1720(module)ms
+1885(extraction)ms
+2101(pro-)ms
+484 1364 m
+(cess\).)s
+295 1304 m
+(CLIP.INI)s
+496(is)ms
+541(a)ms
+574(straight)ms
+735(forward)ms
+905(ASCII-file.)ms
+1142(Its)ms
+1203(fairly)ms
+1323(simple)ms
+1467(structure)ms
+1654(is)ms
+1698(explained)ms
+1904(in)ms
+1954(section)ms
+2107(6)ms
+2143(of)ms
+295 1244 m
+(the)s
+368(manual.)ms
+389 1184 m
+(The)s
+477(responsibility)ms
+759(of)ms
+812(the)ms
+883(first)ms
+974(pass)ms
+1071(of)ms
+1123(the)ms
+1195(CLiP-system,)ms
+1479(CLIP_1.EXE,)ms
+1770(is)ms
+1814(purely)ms
+1952(to)ms
+2001(construct)ms
+295 1124 m
+(an)s
+355(appropriate)ms
+597(INI-file)ms
+763(for)ms
+835(the)ms
+909(task)ms
+1003(you)ms
+1092(want)ms
+1203(CLIP_2)ms
+1375(to)ms
+1427(perform.)ms
+1614(More)ms
+1736(often)ms
+1852(than)ms
+1952(not)ms
+2029(the)ms
+2104(first)ms
+295 1064 m
+(pass)s
+393(can)ms
+475(be)ms
+535(short-cut)ms
+725(and)ms
+810(several)ms
+964(batch)ms
+1085(files)ms
+1183(are)ms
+1257(supplied)ms
+1439(for)ms
+1509(this)ms
+1594(reason)ms
+1737(\(see)ms
+1830(section)ms
+1984(5\).)ms
+12 FAB
+295 936 m
+(5 Using CLiP ...)s
+12 FB
+295 864 m
+(The)s
+385(batch)ms
+505(procedures)ms
+737(below)ms
+871(are)ms
+945(designed)ms
+1135(to)ms
+1186(make)ms
+1307(your)ms
+1410(working)ms
+1589(directories)ms
+1813(independent)ms
+2069(of)ms
+2123(the)ms
+295 804 m
+(CLIP_DIR.)s
+542(Remark)ms
+716(that)ms
+807(the)ms
+884(original)ms
+1055(batch)ms
+1180(files)ms
+1281(assume)ms
+1444(that)ms
+1535(your)ms
+1643(CLIP_DIR)ms
+1878(is)ms
+1927(the)ms
+2004(directory)ms
+295 744 m
+("C:\\CLIP".)s
+10 FAB
+295 647 m
+(5.1 ... via CLIP.BAT)s
+12 FB
+295 582 m
+(CLIP.BAT)s
+528(performs)ms
+720(the)ms
+794(complete)ms
+990(cycle)ms
+1107(to)ms
+1159(define)ms
+1296(and)ms
+1380(execute)ms
+1545(a)ms
+1580(run)ms
+1659(of)ms
+1713(CLiP.)ms
+1843(Thus)ms
+1955(both)ms
+2057(passes)ms
+295 522 m
+(of)s
+347(CLiP)ms
+464(are)ms
+537(executed)ms
+726(by)ms
+787(this)ms
+871(command.)ms
+1092(The)ms
+1181(procedure)ms
+1392(gives)ms
+1509(the)ms
+1581(user)ms
+1676(complete)ms
+1870(control)ms
+2023(over)ms
+2123(the)ms
+295 462 m
+(extraction)s
+505(process)ms
+665(and)ms
+748(supplies)ms
+922(context)ms
+1080(sensitive)ms
+1265(HELP)ms
+1401(when)ms
+1519(asked.)ms
+1656(The)ms
+1744(procedure)ms
+1955(works)ms
+2087(most)ms
+295 402 m
+(comfortable)s
+549(when)ms
+669(a)ms
+704(mouse)ms
+847(is)ms
+893(available.)ms
+295 342 m
+(PROJECT)s
+515(menu)ms
+635(allows)ms
+775(your)ms
+876(to)ms
+924(LOAD)ms
+1072(an)ms
+1129(already)ms
+1285(existing)ms
+1453(INI-file)ms
+1615(or)ms
+1666(to)ms
+1714(SAVE)ms
+1854(the)ms
+1924(one)ms
+2006(you)ms
+2090(have)ms
+484 282 m
+(defined)s
+646(so)ms
+703(far.)ms
+783(In)ms
+838(addition)ms
+1014(you)ms
+1101(can)ms
+1183(start)ms
+1282(the)ms
+1356(extraction)ms
+1568(process)ms
+1730(from)ms
+1840(here.)ms
+8 FB
+295 145 m
+(READ_ME)s
+460(for)ms
+507(CLIP/MS_DOS)ms
+729(\(READ_ME.DOC,)ms
+993(2.106,)ms
+1084(November 17, 1993\))ms
+12 FB
+2100 145 m
+(2)s
+50 2 2130 157 li
+50 2 2045 157 li
+endpage
+%%Page: 2 3
+begpage
+12 FB
+295 3139 m
+(SETTINGS/SOURCEFILES)s
+888(allows)ms
+1032(you)ms
+1120(to)ms
+1172(define)ms
+1310(the)ms
+1384(sources)ms
+1547(files)ms
+1647(that)ms
+1735(CLiP)ms
+1854(has)ms
+1933(to)ms
+1985(include)ms
+2146(in)ms
+484 3079 m
+(the)s
+557(extraction)ms
+770(process.)ms
+945(The)ms
+1035(source)ms
+1178(files)ms
+1276(may)ms
+1375(reside)ms
+1507(in)ms
+1558(different)ms
+1743(directories.)ms
+295 3019 m
+(SETTINGS/TARGETMODULES)s
+1000(lets)ms
+1086(you)ms
+1178(specify)ms
+1339(which)ms
+1478(modules)ms
+1664(you)ms
+1755(want)ms
+1869(to)ms
+1925(be)ms
+1989(extracted.)ms
+484 2959 m
+(The)s
+575(names)ms
+716(of)ms
+771(modules)ms
+955(you)ms
+1043(put)ms
+1121(in)ms
+1173(the)ms
+1248(list)ms
+1323(are)ms
+1397(used)ms
+1503(either)ms
+1630(to)ms
+1683(identify)ms
+1852(the)ms
+1926(modules)ms
+2110(that)ms
+484 2899 m
+(have)s
+596(to)ms
+653(be)ms
+718(extracted)ms
+919(\(in)ms
+993(which)ms
+1133(case)ms
+1237(you)ms
+1330(set)ms
+1404(the)ms
+1483(radiobutton)ms
+1732(EXTRACTED\))ms
+2064(or)ms
+2123(the)ms
+484 2839 m
+(modules)s
+666(that)ms
+755(have)ms
+863(to)ms
+915(be)ms
+975(omitted)ms
+1142(during)ms
+1286(the)ms
+1360(extraction)ms
+1573(process)ms
+1737(\(in)ms
+1806(which)ms
+1941(case)ms
+2041(you)ms
+2129(set)ms
+484 2779 m
+(of)s
+545(course)ms
+695(the)ms
+775(radiobutton)ms
+1025(OMITTED\).)ms
+1299(The)ms
+1396(default)ms
+1554(is)ms
+1607(OMITTED)ms
+1851(which)ms
+1993(of)ms
+2054(course)ms
+484 2719 m
+(implies)s
+643(that)ms
+731(if)ms
+774(no)ms
+836(modules)ms
+1018(are)ms
+1092(listed,)ms
+1225(CLiP)ms
+1343(will)ms
+1434(extract)ms
+1582(every)ms
+1706(module)ms
+1868(it)ms
+1908(finds.)ms
+295 2659 m
+(SETTINGS/PARAMETERS)s
+888(refers)ms
+1015(partly)ms
+1145(to)ms
+1198(non)ms
+1286(implemented)ms
+1560(features.)ms
+1744(Therefore)ms
+1955(don't)ms
+2073(touch)ms
+484 2599 m
+(the)s
+563(CLIP_MOD)ms
+831(radiobuttons)ms
+1100(and)ms
+1190(forget)ms
+1328(about)ms
+1457(the)ms
+1537(INTERACTIVE)ms
+1886(FAULT)ms
+2065(COR-)ms
+484 2539 m
+(RECTION.)s
+725(If)ms
+771(you)ms
+859(want)ms
+969(error)ms
+1079(messages)ms
+1280(to)ms
+1332(be)ms
+1392(filed,)ms
+1509(you)ms
+1596(have)ms
+1703(to)ms
+1755(specify)ms
+1912(the)ms
+1986(report)ms
+2118(file)ms
+484 2479 m
+(in)s
+535(this)ms
+620(menu.)ms
+295 2419 m
+(SETTINGS/SYNTAX)s
+772(allows)ms
+928(you)ms
+1027(to)ms
+1091(change)ms
+1258(the)ms
+1344(appearance)ms
+1593(of)ms
+1660(the)ms
+1746(lines)ms
+1865(that)ms
+1965(trigger)ms
+2123(the)ms
+484 2359 m
+(CLiPping)s
+695(process.)ms
+874(By)ms
+949(LOADing)ms
+1168(an)ms
+1232(appropriate)ms
+1476(INI-file)ms
+1646(\(like)ms
+1754(PASCAL.INI,)ms
+2057(C.INI,)ms
+484 2299 m
+(MODULA.INI)s
+794(or)ms
+845(FORTRAN.INI\))ms
+1186(you)ms
+1271(have)ms
+1374(an)ms
+1431(adequate)ms
+1618(suggestion)ms
+1841(for)ms
+1909(that)ms
+1993(particular)ms
+484 2239 m
+(language.)s
+689(The)ms
+779(choice)ms
+922(SHOW)ms
+1082(SYNTAX)ms
+1297(displays)ms
+1474(the)ms
+1547(way)ms
+1643(CLiP)ms
+1761(lines)ms
+1868(will)ms
+1958(look.)ms
+10 FAB
+295 2142 m
+(5.2 ... via CLP.BAT and CLP_ENV.BAT)s
+12 FB
+295 2077 m
+(This)s
+396(procedure)ms
+609(can)ms
+691(be)ms
+751(used)ms
+855(in)ms
+907(a)ms
+942(situation)ms
+1127(where)ms
+1262(on)ms
+1324(wants)ms
+1454(to)ms
+1505(extract)ms
+1654(all)ms
+1717(the)ms
+1791(modules)ms
+1973(from)ms
+2083(up)ms
+2146(to)ms
+295 2017 m
+(nine)s
+394(source)ms
+538(files.)ms
+651(The)ms
+742(source)ms
+886(files)ms
+986(are)ms
+1060(passed)ms
+1207(as)ms
+1263(parameters.)ms
+1508(CLP.BAT)ms
+1726(creates)ms
+1878(a)ms
+1914(CLIP.INI)ms
+2118(file)ms
+295 1957 m
+(and)s
+379(starts)ms
+497(the)ms
+571(CLIP_2)ms
+742(program)ms
+924(afterwards.)ms
+389 1897 m
+(All)s
+464(setting)ms
+608(are)ms
+681(assumed)ms
+864(by)ms
+926(the)ms
+998(batch)ms
+1118(procedure.)ms
+1342(Originally)ms
+1558(it)ms
+1598(is)ms
+1642(tailored)ms
+1806(to)ms
+1857(Pascal)ms
+1996(programs)ms
+295 1837 m
+(of)s
+350(the)ms
+425(sort)ms
+514(displayed)ms
+720(in)ms
+773(the)ms
+848(example)ms
+1031(EX01)ms
+1162(\(i.e.)ms
+1253(the)ms
+1329(files)ms
+1429(EX01_?.*\))ms
+1661(on)ms
+1725(the)ms
+1800(directory)ms
+1994(CLIP.)ms
+2129(To)ms
+295 1777 m
+(adjust)s
+427(CLP.BAT)ms
+644(one)ms
+730(should)ms
+876(sufficiently)ms
+1117(understand)ms
+1349(the)ms
+1423(syntax)ms
+1567(of)ms
+1622(CLiP)ms
+1740([Ammers)ms
+1942(1993].)ms
+2085(Only)ms
+295 1717 m
+(modify)s
+451(the)ms
+525(lines)ms
+632(of)ms
+686(CLP.BAT)ms
+903(as)ms
+957(follows)ms
+389 1657 m
+(line)s
+476(16:)ms
+552(Replace)ms
+726("\(*")ms
+896(with)ms
+997(the)ms
+1071(COMM-START)ms
+1417(of)ms
+1471(your)ms
+1575(choice.)ms
+389 1597 m
+(line)s
+476(17:)ms
+552(Replace)ms
+726("*\)")ms
+896(with)ms
+997(the)ms
+1071(COMM-END)ms
+1361(of)ms
+1415(your)ms
+1519(choice.)ms
+389 1537 m
+(line)s
+476(18:)ms
+552(Replace)ms
+726("*")ms
+892(with)ms
+993(the)ms
+1067(CLIP-CHAR)ms
+1343(of)ms
+1397(your)ms
+1501(choice.)ms
+389 1477 m
+(line)s
+476(19:)ms
+552(Replace)ms
+726("ENDOF")ms
+983(with)ms
+1085(the)ms
+1158(END-STRING)ms
+1471(of)ms
+1525(your)ms
+1629(choice.)ms
+389 1417 m
+(line)s
+476(20:)ms
+552(Replace)ms
+726("#")ms
+892(with)ms
+993(the)ms
+1067(OPTION-MARKER)ms
+1493(of)ms
+1547(your)ms
+1651(choice.)ms
+389 1357 m
+(line)s
+476(23:)ms
+552(Replace)ms
+726("CLIP.RPT")ms
+992(with)ms
+1093(the)ms
+1167(report)ms
+1299(file)ms
+1378(name)ms
+1499(of)ms
+1553(your)ms
+1657(choice.)ms
+295 1297 m
+(Note)s
+412(that)ms
+508(the)ms
+590(characters)ms
+813("a"-"z",)ms
+989("A"-"Z",)ms
+1187("0"-"9")ms
+1356(and)ms
+1449(".")ms
+1523(do)ms
+1594(not)ms
+1678(qualify)ms
+1841(as)ms
+1903(characters)ms
+2126(for)ms
+295 1237 m
+(COMM-START,)s
+649(COMM-END,)ms
+948(CLIP-CHAR)ms
+1221(or)ms
+1272(OPTION-MARKER)ms
+1695(while)ms
+1815(the)ms
+1885(END-STRING)ms
+295 1177 m
+(should)s
+440(be)ms
+500(chosen)ms
+651(from)ms
+761(letters)ms
+896(only.)ms
+389 1117 m
+(If)s
+438(you)ms
+529(are)ms
+607(not)ms
+687(sure)ms
+787(of)ms
+845(your)ms
+953(modifications,)ms
+1256(you)ms
+1348(should)ms
+1497(compare)ms
+1686(the)ms
+1763(INI-file)ms
+1932(produced)ms
+2135(by)ms
+295 1057 m
+(CLP.BAT)s
+511(with)ms
+613(the)ms
+686(one)ms
+771(that)ms
+858(CLIP.BAT)ms
+1092(produces)ms
+1285(from)ms
+1394(the)ms
+1468(same)ms
+1583(set)ms
+1651(of)ms
+1706(preferences.)ms
+389 997 m
+(CLP.BAT)s
+614(must)ms
+732(know)ms
+864(the)ms
+946(directory)ms
+1147(of)ms
+1209(the)ms
+1291(source)ms
+1443(files)ms
+1550(and)ms
+1643(the)ms
+1725(directory)ms
+1926(of)ms
+1989(the)ms
+2071(target)ms
+295 937 m
+(modules.)s
+487(This)ms
+587(information)ms
+833(is)ms
+877(taken)ms
+996(from)ms
+1104(the)ms
+1176(environment)ms
+1439(variables)ms
+1630(CLIP_SRC)ms
+1868(and)ms
+1951(CLIP_TRG)ms
+295 877 m
+(that)s
+381(can)ms
+462(be)ms
+521(set)ms
+588(using)ms
+708(CLP_ENV.BAT.)ms
+1064(Note)ms
+1173(that)ms
+1259(the)ms
+1332(directories)ms
+1555(must)ms
+1664(be)ms
+1722(specified)ms
+1915(excluding)ms
+2123(the)ms
+295 817 m
+(trailing)s
+451(backslash.)ms
+671(For)ms
+753(example)ms
+484 757 m
+(>CLP_ENV)s
+756(D:)ms
+831(C:\\PROJECT\\PASCAL)ms
+295 697 m
+(defines)s
+451(the)ms
+524(home)ms
+647(directory)ms
+839(of)ms
+892(drive)ms
+1007(D:)ms
+1069(as)ms
+1122(source)ms
+1264(file)ms
+1343(directory)ms
+1535(while)ms
+1658(the)ms
+1731(subdirectory)ms
+1993(PASCAL)ms
+295 637 m
+(of)s
+349(directory)ms
+542(PROJECT)ms
+765(on)ms
+828(drive)ms
+943(C:)ms
+1003(will)ms
+1093(receive)ms
+1250(the)ms
+1324(extracted)ms
+1519(modules.)ms
+10 FAB
+295 539 m
+(5.3 ... via CL.BAT)s
+12 FB
+295 474 m
+(CL.BAT)s
+483(is)ms
+528(the)ms
+600(fastest)ms
+740(way)ms
+835(to)ms
+885(run)ms
+964(CLiP)ms
+1081(and)ms
+1165(will)ms
+1254(probably)ms
+1443(be)ms
+1502(invoked)ms
+1675(most)ms
+1784(often.)ms
+1911(It)ms
+1953(can)ms
+2034(be)ms
+2093(used)ms
+295 414 m
+(whenever)s
+503(an)ms
+563(INI-file)ms
+730(already)ms
+891(is)ms
+938(available.)ms
+1145(It)ms
+1189(copies)ms
+1330(the)ms
+1405(information)ms
+1655(of)ms
+1710(the)ms
+1785(specified)ms
+1979(INI-file)ms
+2146(to)ms
+295 354 m
+(CLIP.INI)s
+497(and)ms
+582(runs)ms
+681(the)ms
+754(CLIP_2)ms
+925(program.)ms
+389 294 m
+(The)s
+486(INI-file)ms
+658(to)ms
+717(be)ms
+783(used)ms
+895(is)ms
+948(passed)ms
+1100(as)ms
+1162(an)ms
+1228(optional)ms
+1412(parameter.)ms
+1644(If)ms
+1697(no)ms
+1766(INI-file)ms
+1939(is)ms
+1991(specified,)ms
+8 FB
+295 145 m
+(READ_ME)s
+460(for)ms
+507(CLIP/MS_DOS)ms
+729(\(READ_ME.DOC,)ms
+993(2.106,)ms
+1084(November 17, 1993\))ms
+12 FB
+2100 145 m
+(3)s
+50 2 2130 157 li
+50 2 2045 157 li
+endpage
+%%Page: 3 4
+begpage
+12 FB
+295 3139 m
+(CL.BAT)s
+483(simply)ms
+632(assumes)ms
+811(CLIP.INI.)ms
+1026(For)ms
+1108(example)ms
+484 3079 m
+(>CL)s
+588(EX01_A.INI)ms
+295 3019 m
+(will)s
+385(copy)ms
+495(the)ms
+568(file)ms
+647(EX01_A.INI)ms
+919(to)ms
+971(CLIP.INI)ms
+1174(and)ms
+1258(run)ms
+1337(CLIP_2.)ms
+1521(However)ms
+1717(the)ms
+1790(command)ms
+484 2959 m
+(>CL)s
+295 2899 m
+(immediately)s
+557(runs)ms
+656(CLIP_2)ms
+826(on)ms
+889(the)ms
+963(basis)ms
+1075(of)ms
+1129(an)ms
+1189(already)ms
+1349(existing)ms
+1519(CLIP.INI)ms
+1722(file.)ms
+12 FAB
+295 2771 m
+(6 Specimen INI-files)s
+12 FB
+295 2699 m
+(The)s
+400(files)ms
+514(ADA.INI,)ms
+745(C.INI,)ms
+901(FORTRAN.INI,)ms
+1256(LISP.INI,)ms
+1482(MODULA.INI)ms
+1811(and)ms
+1911(PASCAL.INI)ms
+295 2639 m
+(suggest)s
+459(a)ms
+495(suitable)ms
+664(CLiP)ms
+784(syntax)ms
+929(for)ms
+1001(a)ms
+1037(start.)ms
+1150(To)ms
+1220(customize)ms
+1436(such)ms
+1542(an)ms
+1603(INI-file)ms
+1770(run)ms
+1851(the)ms
+1926(CLiP)ms
+2046(system)ms
+295 2579 m
+(through)s
+470(CLIP.BAT.)ms
+723(Then)ms
+846(load)ms
+952(the)ms
+1033(proper)ms
+1183(INI-file)ms
+1356(and)ms
+1448(modify)ms
+1613(the)ms
+1694(syntax)ms
+1844(by)ms
+1914(means)ms
+2062(of)ms
+2123(the)ms
+295 2519 m
+(SETTINGS/SYNTAX)s
+760(menu)ms
+883(\(see)ms
+976(sect.)ms
+1079(5.1\).)ms
+12 FAB
+295 2391 m
+(7 References)s
+12 FB
+295 2319 m
+(Ammers)s
+480(E.W.)ms
+596(van,)ms
+693(M.R.)ms
+809(Kramer)ms
+975(\(1993\),)ms
+1134(The)ms
+1225(CLiP)ms
+1343(Style)ms
+1459(of)ms
+1514(Literate)ms
+1683(Programming)ms
+1971(\(submitted)ms
+389 2259 m
+(for)s
+467(publication\).)ms
+742(Anonymously)ms
+1046(ftp-able)ms
+1222(as)ms
+1284(CLIP_STYLE.PS,)ms
+1674(CLIP_STYLE_A.PS)ms
+2112(and)ms
+389 2199 m
+(CLIP_STYLE_B.PS)s
+816(from)ms
+926(directory)ms
+1119(CLIP)ms
+1240(on)ms
+1302(sun01.info.wau.nl.)ms
+8 FB
+295 145 m
+(READ_ME)s
+460(for)ms
+507(CLIP/MS_DOS)ms
+729(\(READ_ME.DOC,)ms
+993(2.106,)ms
+1084(November 17, 1993\))ms
+12 FB
+2100 145 m
+(4)s
+50 2 2130 157 li
+50 2 2045 157 li
+endpage
+%%Page: Contents-0 5
+begpage
+12 FAB
+1028 3136 m
+(Table of Contents)s
+12 FB
+295 3039 m
+(1 Directory CLIP/MS_DOS )s
+896(........................................................................................)ms
+2019 3039 m
+(1)s
+295 2939 m
+(2 Installing CLiP )s
+683(.........................................................................................................)ms
+2019 2939 m
+(1)s
+295 2839 m
+(3 A quick installation test )s
+858(...........................................................................................)ms
+2019 2839 m
+(2)s
+295 2739 m
+(4 What you should know )s
+846(............................................................................................)ms
+2019 2739 m
+(2)s
+295 2639 m
+(5 Using CLiP ... )s
+658(...........................................................................................................)ms
+2019 2639 m
+(2)s
+365 2589 m
+(5.1 ... via CLIP.BAT )s
+832(.............................................................................................)ms
+2019 2589 m
+(2)s
+365 2539 m
+(5.2 ... via CLP.BAT and CLP_ENV.BAT )s
+1245(............................................................)ms
+2019 2539 m
+(3)s
+365 2489 m
+(5.3 ... via CL.BAT )s
+782(.................................................................................................)ms
+2019 2489 m
+(3)s
+295 2389 m
+(6 Specimen INI-files )s
+746(....................................................................................................)ms
+2019 2389 m
+(4)s
+295 2289 m
+(7 References )s
+583(.................................................................................................................)ms
+2019 2289 m
+(4)s
+8 FB
+295 135 m
+(READ_ME for CLIP/MS_DOS \(READ_ME.DOC, 2.106, November 17, 1993\))s
+12 FB
+2111 135 m
+(i)s
+50 2 2130 147 li
+50 2 2056 147 li
+endpage
+%%Trailer
+enddocument
+%%Pages: 5
+%%DocumentFonts:
+%%+ Helvetica-Bold
+%%+ Times-Roman
+%%EOF
+ \ No newline at end of file
diff --git a/web/clip/ms_dos/read_me.txt b/web/clip/ms_dos/read_me.txt
new file mode 100644
index 0000000000..634de18349
--- /dev/null
+++ b/web/clip/ms_dos/read_me.txt
@@ -0,0 +1,191 @@
+
+ READ_ME for CLIP/MS_DOS
+ ***********************
+
+
+
+1 Directory CLIP/MS_DOS
+
+The directory contains the files
+ a. READ_ME.PS, READ_ME.TXT (this file).
+ b. CLIP_1.EXE, CLIP_2.EXE, CLIPHELP.HLP, CLIP_MSG.DAT (CLiP system).
+ c. CL.BAT, CLP.BAT, CLIP.BAT, CLP_ENV.BAT (user support).
+ d. EX01_A.PS, EX01_A.ASC, EX01_A.INI, EX01_A.PAS,
+ EX01_B.PS, EX01_B.ASC, EX01_B.INI, EX01_B.PAS (example).
+ e. ADA.INI, C.INI, FORTRAN.INI, LISP.INI, MODULA.INI, PASCAL.INI
+ (template INI-files for some languages).
+ f. MANUAL.PS, MANUAL.TXT (manual).
+File extensions:
+ PS-files are postscript files and represent the type-set versions of the
+ corresponding ASC- or TXT-files.
+ ASC-files are derived by ASCII-export from the original word-processor
+ files (in our case Lotus Manuscript).
+ TXT-files are ASCII versions of the corresponding PS-files. They are
+ slightly modified to improve the lay-out. TXT-files are a service for
+ people who have no easy access to a postscript printer.
+
+2 Installing CLiP
+
+ a. Use FTP to copy the CLiP system to your local site. Note that
+ CLIP_1.EXE, CLIP_2.EXE and CLIPHELP.HLP should be FTP-ed in binary
+ mode.
+ b. Create a directory for the CLiP-system. This directory will be
+ referred as the CLIP_DIR. Let us assume this directory is
+ C:\CLIP
+ c. Copy the files
+ CLIPHELP.HLP, CLIP_1.EXE, CLIP_2.EXE and CLIP_MSG.DAT
+ to the CLIP_DIR.
+ d. Copy the files
+ CL.BAT, CLP.BAT, CLIP.BAT, CLP_ENV.BAT
+ to the directory that contains your batch files (this directory is
+ assumed to be in the PATH definition of the AUTOEXEC.BAT).
+ e. If the name of your CLIP_DIR differs from the name "C:\CLIP" as
+ suggested in point 2.a, the batch files
+ CL.BAT, CLP.BAT and CLIP.BAT
+ have to be adjusted. That is the string "C:\CLIP" has to be replaced
+ by a string representing the correct name of your CLIP_DIR.
+
+3 A quick installation test
+
+To have a partial test (it does not check CLIP_1) to see if your CLiP system
+has been properly installed, perform the following steps:
+ a. Choose a test directory and make it current. Let us assume "C:\TEST".
+ b. Copy the files EX01_A.ASC, EX01_B.ASC, EX01_A.INI, EX02_B.INI,
+ EX01_A.PAS and EX01_B.PAS to this test directory.
+ c. Type the command
+ >CL EX01_A.INI
+ to produce the file PALINDRO.PAS. Note that EX01_A.INI specifies the
+ current directory for the source files as well as for the target
+ modules.
+
+
+ d. Compare the file PALINDRO.PAS with EX01_A.PAS by means of the command
+ >COMP PALINDRO.PAS EX01_A.PAS
+ There should be no differences.
+ e. Now type the command
+ >CL EX01_B.INI
+ to produce a new file PALINDRO.PAS.
+ f. Compare the new PALINDRO.PAS with EX01_B.PAS
+ >COMP PALINDRO.PAS EX01_B.PAS
+ Again there should be no differences.
+
+4 What you should know
+
+The complete system executes in two passes.
+ The second pass, CLIP_2.EXE, performs the actual module extraction. It is
+guided by a file, CLIP.INI, which tells it literally everything it has to know
+in order to perform a run. Thus CLIP.INI specifies to CLIP_2.EXE:
+ - the files it has to read (i.e. the source files),
+ - the modules it should extract (i.e. target modules),
+ - the report file,
+ - the syntax of the CLiP-lines (i.e. the lines which trigger the module
+ extraction process).
+CLIP.INI is a straight forward ASCII-file. Its fairly simple structure is
+explained in section 6 of the manual.
+ The responsibility of the first pass of the CLiP-system, CLIP_1.EXE, is
+purely to construct an appropriate INI-file for the task you want CLIP_2 to
+perform. More often than not the first pass can be short-cut and several batch
+files are supplied for this reason (see section 5).
+
+5 Using CLiP ...
+
+The batch procedures below are designed to make your working directories
+independent of the CLIP_DIR. Remark that the original batch files assume that
+your CLIP_DIR is the directory "C:\CLIP".
+
+5.1 ... via CLIP.BAT
+
+CLIP.BAT performs the complete cycle to define and execute a run of CLiP. Thus
+both passes of CLiP are executed by this command. The procedure gives the user
+complete control over the extraction process and supplies context sensitive
+HELP when asked. The procedure works most comfortable when a mouse is
+available.
+
+PROJECT menu allows your to LOAD an already existing INI-file or to SAVE the
+ one you have defined so far. In addition you can start the extraction
+ process from here.
+
+SETTINGS/SOURCEFILES allows you to define the sources files that CLiP has to
+ include in the extraction process. The source files may reside in
+ different directories.
+
+SETTINGS/TARGETMODULES lets you specify which modules you want to be extracted.
+ The names of modules you put in the list are used either to identify
+ the modules that have to be extracted (in which case you set the
+ radiobutton EXTRACTED) or the modules that have to be omitted during
+ the extraction process (in which case you set of course the radiobutton
+ OMITTED). The default is OMITTED which of course implies that if no
+ modules are listed, CLiP will extract every module it finds.
+
+
+SETTINGS/PARAMETERS refers partly to non implemented features. Therefore don't
+ touch the CLIP_MOD radiobuttons and forget about the INTERACTIVE FAULT
+ CORRECTION. If you want error messages to be filed, you have to specify
+ the report file in this menu.
+
+SETTINGS/SYNTAX allows you to change the appearance of the lines that trigger
+ the CLiPping process. By LOADing an appropriate INI-file (like
+ PASCAL.INI, C.INI, MODULA.INI or FORTRAN.INI) you have an adequate
+ suggestion for that particular language. The choice SHOW SYNTAX
+ displays the way CLiP lines will look.
+
+5.2 ... via CLP.BAT and CLP_ENV.BAT
+
+This procedure can be used in a situation where on wants to extract all the
+modules from up to nine source files. The source files are passed as
+parameters. CLP.BAT creates a CLIP.INI file and starts the CLIP_2 program
+afterwards.
+ All setting are assumed by the batch procedure. Originally it is tailored
+to Pascal programs of the sort displayed in the example EX01 (i.e. the files
+EX01_?.*) on the directory CLIP. To adjust CLP.BAT one should sufficiently
+understand the syntax of CLiP [Ammers 1993]. Only modify the lines of CLP.BAT
+as follows
+
+ line 16: Replace "(*" with the COMM-START of your choice.
+ line 17: Replace "*)" with the COMM-END of your choice.
+ line 18: Replace "*" with the CLIP-CHAR of your choice.
+ line 19: Replace "ENDOF" with the END-STRING of your choice.
+ line 20: Replace "#" with the OPTION-MARKER of your choice.
+ line 23: Replace "CLIP.RPT" with the report file name of your choice.
+
+Note that the characters "a"-"z", "A"-"Z", "0"-"9" and "." do not qualify as
+characters for COMM-START, COMM-END, CLIP-CHAR or OPTION-MARKER while the
+END-STRING should be chosen from letters only.
+ If you are not sure of your modifications, you should compare the INI-file
+produced by CLP.BAT with the one that CLIP.BAT produces from the same set of
+preferences.
+ CLP.BAT must know the directory of the source files and the directory of
+the target modules. This information is taken from the environment variables
+CLIP_SRC and CLIP_TRG that can be set using CLP_ENV.BAT. Note that the
+directories must be specified excluding the trailing backslash. For example
+ >CLP_ENV D: C:\PROJECT\PASCAL
+defines the home directory of drive D: as source file directory while the
+subdirectory PASCAL of directory PROJECT on drive C: will receive the extracted
+modules.
+
+5.3 ... via CL.BAT
+
+CL.BAT is the fastest way to run CLiP and will probably be invoked most often.
+It can be used whenever an INI-file already is available. It copies the
+information of the specified INI-file to CLIP.INI and runs the CLIP_2 program.
+ The INI-file to be used is passed as an optional parameter. If no INI-file
+is specified, CL.BAT simply assumes CLIP.INI. For example
+ >CL EX01_A.INI
+will copy the file EX01_A.INI to CLIP.INI and run CLIP_2. However the command
+ >CL
+immediately runs CLIP_2 on the basis of an already existing CLIP.INI file.
+
+
+6 Specimen INI-files
+
+The files ADA.INI, C.INI, FORTRAN.INI, LISP.INI, MODULA.INI and PASCAL.INI
+suggest a suitable CLiP syntax for a start. To customize such an INI-file run
+the CLiP system through CLIP.BAT. Then load the proper INI-file and modify the
+syntax by means of the SETTINGS/SYNTAX menu (see sect. 5.1).
+
+7 References
+
+Ammers E.W. van, M.R. Kramer (1993), The CLiP Style of Literate Programming
+ (submitted for publication). Anonymously ftp-able as CLIP_STYLE.PS,
+ CLIP_STYLE_A.PS and CLIP_STYLE_B.PS from directory CLIP on
+ sun01.info.wau.nl.
diff --git a/web/clip/unix/CLIP_MSG b/web/clip/unix/CLIP_MSG
new file mode 100644
index 0000000000..3359871417
--- /dev/null
+++ b/web/clip/unix/CLIP_MSG
@@ -0,0 +1,36 @@
+ SCAN_FILES (2.2): A line of category L2 is not allowed in passive mode.%
+ SCAN_FILES (2.3): A line of category L3 in not allowed in passive mode.%
+ SCAN_LINE (3a): An CLIP_LPAR is found but not an CLIP_RPAR.%
+ SCAN_LINE (3b): An CLIP_RPAR is found but not an CLIP_LPAR.%
+ SCAN_LINE (4a): Only one CLIP command character is found.
+ Line treated as an L3.%
+ SCAN_LINE (4b): Only one CLIP command character is found.
+ Line treated as an L3.%
+ BUILD_C_S (12): Line cannot be paste to a segment.%
+ BUILD_C_S (22): Stub not correctly closed before end of file.%
+ SCAN_OPTIONS (3.1.1): Missing argument option @. Option ignored.%
+ SCAN_OPTIONS (3.1.2)a: Illegal abbreviation @. Supply more characters.%
+ SCAN_OPTIONS (3.1.2)b: Unknown option @. Option ignored.%
+ SCAN_OPTIONS (3.1.3)a: @ Quoted string not terminated for end of line.
+ Option FILE ignored.%
+ SCAN_OPTIONS (3.1.3)b: @ Quoted string expected. Option FILE ignored.%
+ SCAN_OPTIONS (3.1.4): Illegal argument @ Indent option. Option ignored.%
+ SCAN_OPTIONS (3.1.5)a: Comment @ not yet implemented.%
+ SCAN_OPTIONS (3.1.5)b: Illegal argument @ COMMENT-option. Option ignored.%
+ SCAN_OPTIONS (3.2.1)a: @ quoted string not terminated for end of line.
+ Option FILE ignored.%
+ SCAN_OPTIONS (3.2.1)b: Quoted string expected. Option FILE ignored.%
+ SCAN_OPTIONS (3.2.2): Illegal argument @ Indent option. Option ignored.%
+ SCAN_OPTIONS (3.2.3)a: Comment @ not yet implemented.%
+ SCAN_OPTIONS (3.2.3)b: Illegal argument @ COMMENT-option. Option ignored.%
+ SCAN_OPTIONS (3.2.4): Illegal character @ in line. Option marker expected.%
+ SCAN_OPTIONS (5a): Missing argument @-option . Option ignored.%
+ SCAN_OPTIONS (5b): Stub option @ not allowed in slot. Option ignored.%
+ SCAN_OPTIONS (5c): Slot option @ not allowed in stub. Option ignored.%
+ SCAN_OPTIONS (5d): Any combination of the options FILE, LEADER, TRAILER,
+ SEPARATOR or DEFAULT in one segment is illegal. Defaults assumed.%
+ ANALYSE (4.1): Multiple stubs in single slot. SLOT set to multiple.%
+ ORDER_TWINS (1.5): LEADER, TRAILER and/or SEPARATOR stubs found without
+ ordinary stubs for this slot. Stubs ignored.%
+ GENMOD (2.1): Error opening file @. Module will not be generated.%
+ GENMOD (4.1): Error closing file @.%
diff --git a/web/clip/unix/ada.ini b/web/clip/unix/ada.ini
new file mode 100644
index 0000000000..4c9ceb12c5
--- /dev/null
+++ b/web/clip/unix/ada.ini
@@ -0,0 +1,21 @@
+This file contains data that is needed to run CLiP
+And is generated by CLiP_MENU
+Modifying this file at own risk.
+Using CLiP_MENU is definitely recommended.
+
+INTERACTIVE_MODE Mode (INTERACTIVE/DEBUG/HELPFUL/AUTO)
+NO Interactive fault correction (YES/NO)
+BOTH Error message destination (TERMINAL/REPORTFILE/BOTH/NONE)
+-- Left comment string
+-- Right comment string
++ Command character
+ENDOF END string
+# Option marker
+OMITTED The specified modules are (OMITTED/EXTRACTED)
+------------ REPORT FILE -----------
+CLIP.RPT
+------------ INPUT FILES -----------
+------------ MODULES ---------------
+------------ MODULE DIRECTORY ------
+
+------------ END OF INI FILE -------
diff --git a/web/clip/unix/c.ini b/web/clip/unix/c.ini
new file mode 100644
index 0000000000..dad00ccd0a
--- /dev/null
+++ b/web/clip/unix/c.ini
@@ -0,0 +1,21 @@
+This file contains data that is needed to run CLiP
+And is generated by CLiP_MENU
+Modifying this file at own risk.
+Using CLiP_MENU is definitely recommended.
+
+INTERACTIVE_MODE Mode (INTERACTIVE/DEBUG/HELPFUL/AUTO)
+NO Interactive fault correction (YES/NO)
+BOTH Error message destination (TERMINAL/REPORTFILE/BOTH/NONE)
+/* Left comment string
+*/ Right comment string
+* Command character
+ENDOF END string
+# Option marker
+OMITTED The specified modules are (OMITTED/EXTRACTED)
+------------ REPORT FILE -----------
+CLIP.RPT
+------------ INPUT FILES -----------
+------------ MODULES ---------------
+------------ MODULE DIRECTORY ------
+
+------------ END OF INI FILE -------
diff --git a/web/clip/unix/cl.csh b/web/clip/unix/cl.csh
new file mode 100644
index 0000000000..b4c1bc25bb
--- /dev/null
+++ b/web/clip/unix/cl.csh
@@ -0,0 +1,23 @@
+#! /bin/csh
+# cl.csh
+# CLIP Cshellscript equiv to CL.BAT
+# Assumption: clip has been installed in directory ~/clip
+
+
+echo ".....Run CLiP with already existing INI-file....."
+set CLIP_DIR = ~/clip
+unalias rm
+unalias cp
+
+# Copy existing argument to CLIP.INI. Notify non-existing argument.
+if ($1 != '') then
+ if (-e $1) then
+ cp $1 CLIP.INI
+ else
+ echo Filename $1 in directory $PWD does not exist!
+ echo NOT executing ....
+ exit
+ endif
+endif
+
+$CLIP_DIR/clip
diff --git a/web/clip/unix/clip b/web/clip/unix/clip
new file mode 100644
index 0000000000..cc2795f6bd
--- /dev/null
+++ b/web/clip/unix/clip
Binary files differ
diff --git a/web/clip/unix/clip.ini b/web/clip/unix/clip.ini
new file mode 100644
index 0000000000..790a47d8e3
--- /dev/null
+++ b/web/clip/unix/clip.ini
@@ -0,0 +1,22 @@
+This file contains data that is needed to run CLiP
+And is generated by CLiP_MENU
+Modifying this file at own risk.
+Using CLiP_MENU is definitely recommended.
+ECHO is off
+INTERACTIVE_MODE
+NO
+BOTH
+(*
+*)
+*
+ENDOF
+#
+OMITTED
+------------ REPORT FILE -----------
+CLIP.RPT
+------------ INPUT FILES -----------
+.\\ex01_a.asc
+------------ MODULES ---------------
+------------ MODULE DIRECTORY ------
+.\\
+------------ END OF INI FILE -------
diff --git a/web/clip/unix/clip.pas b/web/clip/unix/clip.pas
new file mode 100644
index 0000000000..534164e5a4
--- /dev/null
+++ b/web/clip/unix/clip.pas
@@ -0,0 +1,5682 @@
+ (********** #File "CLIP_UNIX.PAS" (#Indent on, #Comment on) *******)
+ (*********************************************************************)
+ (* Program: CLIP_2 - Code from LIterate Program: 2-nd pass *)
+ (* Purpose: Perform a run of the CLIP-system. *)
+ (* Interface: CLIP.INI: File which contains all the information *)
+ (* for this particular run. *)
+ (* <sources>: Files containing the refinements. *)
+ (* <modules>: Files containing the generated modules. *)
+ (*********************************************************************)
+ PROGRAM CLIP_2 (INPUT, OUTPUT);
+ (*----------- Global parameters of the CLiP system ---------------*)
+ CONST
+ CLiP = 'Code from Literate Programs';
+ CLIP_VERSION = 'CLiP version 2.1'; (* Mod: EWvA 16/10/93 *)
+ DFLT_INIFILE = 'CLIP.INI'; (* Mod: EWvA 16/10/93 *)
+ DFLT_INIFILE_L = 8; (* Mod: EWvA 16/10/93 *)
+ STRING_FIXED_L = 132;
+ EMPTY_STRING_FIXED = ' '+
+ ' '+
+ ' ';
+ MAX_FILE_SPEC_L = 132;
+ MAX_NR_FILE_SPECS = 64;
+ MAX_CHOICE_L = 100;
+ ALLOWED_ID_CHARS = ['A'..'Z', 'a'..'z', '0'..'9', '.'];
+ ERROR_MSG_LENGTH = 80;
+ LOC_SPEC_L = 25;
+ CORRUPT_INI_FILE = 1; (* Error_code used by CLIP_MNU *)
+ FT_SIZE = MAX_NR_FILE_SPECS;
+ MAX_LINE = 132;
+ ST_SIZE = 30000;
+ SP_SIZE = 65000;
+ SYNTAX_LEN = 10;
+ MAX_MODE_L = 16;
+ MAX_M_D_L = 10;
+ MAX_NR_SRC_FILES = MAX_NR_FILE_SPECS;
+ MAX_NR_RSLT_MODULES = 10;
+ MAX_EXTR_MODE_L = 9;
+ MAX_FILE_EXT_L = 39;
+ MAX_OPTION_LENGTH = 15;
+ MAX_OPTIONS = 12;
+
+ (*----------- Constants to assist implemention of ADTs -----------*)
+ CONST
+ MAX_NR_MESS = 35;
+ MAX_ERROR = 100;
+ CONST
+ EMPTY_OPTION = ' ';
+
+ (*----------- Global simple types of the CLiP system -------------*)
+ TYPE
+ TO_BE_DECIDED_LATER_ = (DEFINED,UNDEFINED);
+ LONGINTEGER = -2147483647..2147483647;
+ STRING_FIXED_ = PACKED ARRAY[1..STRING_FIXED_L] OF CHAR;
+ FILE_MODE_ = (INSP_MODE, GEN_MODE);
+ SPECIAL_CHOICE_ = CHAR;
+ ALLOWED_ANSW_ = SET OF CHAR;
+ ERROR_MSG_ = STRING_FIXED_;
+ SEV_CODE_ = (WARN, ERR, FAIL, DUMP);
+ LOC_SPEC_ = PACKED ARRAY[1..LOC_SPEC_L] OF CHAR;
+ FT_INDEX_ = 0..FT_SIZE;
+ ERROR_CODE_ = INTEGER;
+ ST_INDEX_ = -1..ST_SIZE;
+ SEGMENT_TYPE_ = (STUB, SLOT, CODE, END_STUB);
+ SP_INDEX_ = -1..SP_SIZE;
+ SYNTAX_STRING_ = STRING_FIXED_;
+ MODE_ = STRING_FIXED_;
+ MESSAGE_DESTINATION_ = STRING_FIXED_;
+ EXTR_MODE_ = STRING_FIXED_;
+ FILE_EXT_ = STRING_FIXED_;
+ CATEGORY_ = (L1, L2, L3, L4, L5);
+ SLT_PTR_ = ^SLOT_DES_;
+ STB_PTR_ = ^STUB_DES_;
+ SHADOW_PTR_ = ^SHADOW_LIST_;
+
+ (*----------- Global structured types of the CLiP system ---------*)
+ STRING132_ = RECORD
+ BODY: STRING_FIXED_;
+ LENGTH: INTEGER;
+ END (*RECORD*);
+ FILE_SPEC_ = RECORD
+ LENGTH: INTEGER;
+ BODY: STRING_FIXED_;
+ END (*RECORD*);
+ RSLT_MOD_SPEC_ = RECORD
+ FILE_NAME: FILE_SPEC_;
+ PATH: FILE_SPEC_;
+ END (*RECORD*);
+ SOURCE_FILES_ = ARRAY[1..MAX_NR_SRC_FILES] OF FILE_SPEC_;
+ RSLT_MODULES_ = ARRAY[1..MAX_NR_RSLT_MODULES] OF
+ RSLT_MOD_SPEC_;
+ FILE_SPECS_ = RECORD
+ NR_FILE_SPECS: INTEGER;
+ FILES: SOURCE_FILES_;
+ END (*RECORD*);
+ LINE_DES_ = RECORD
+ CHARS: STRING_FIXED_;
+ INDENT: INTEGER;
+ USED: INTEGER;
+ ID: INTEGER;
+ POS_OPTION_MARKER: INTEGER;
+ END (*RECORD*);
+ SEGMENT_DES_ = RECORD
+ FIRST: ST_INDEX_;
+ LAST: ST_INDEX_;
+ END (*RECORD*);
+ STRING_DES_ = RECORD
+ FIRST: SP_INDEX_;
+ LAST: SP_INDEX_;
+ END (*RECORD*);
+ SYNTAX_ = RECORD
+ BODY: SYNTAX_STRING_;
+ LENGTH: INTEGER;
+ END (*RECORD*);
+ RUN_INFO_ = RECORD
+ CLIP_LPAR,
+ CLIP_RPAR: SYNTAX_;
+ CLIP_CC: CHAR;
+ CLIP_END: SYNTAX_;
+ OPTION_MARKER: CHAR;
+ MODE: MODE_;
+ INT_FAULT_CORR: BOOLEAN;
+ MESSAGE_DESTINATION: MESSAGE_DESTINATION_;
+ REPORT_FILE_SPEC: FILE_SPEC_;
+ NR_SRC_FILES: INTEGER;
+ SOURCE_FILES: SOURCE_FILES_;
+ EXTR_MODE: EXTR_MODE_;
+ NR_MODULES: INTEGER;
+ RSLT_MODULES: RSLT_MODULES_;
+ DFLT_EXT: FILE_EXT_;
+ MODULE_DIRECTORY: FILE_SPEC_;
+ END (*RECORD*);
+ LINE_INFO_ = RECORD
+ LINE_ID: STRING_DES_;
+ CATEGORY: CATEGORY_;
+ OPTIONS: BOOLEAN;
+ END (*RECORD*);
+ OPTIONS_ = RECORD
+ QUICK, MULTIPLE, OPTIONAL, OVERRULE,
+ LEADER, TRAILER, SEPARATOR, DEFAULT,
+ LINENUMBER: BOOLEAN;
+ INDENT,
+ FILE_NAME,
+ COMMENT: STRING_DES_;
+ END (*RECORD*);
+ STUB_DES_ = RECORD
+ NAME: STRING_DES_ ;
+ SRC_IMG: SEGMENT_DES_;
+ OPTIONS: OPTIONS_ ;
+ SLOTS: SLT_PTR_ ;
+ NEXT_TWIN,
+ NEXT_STUB: STB_PTR_ ;
+ VISITED: BOOLEAN ;
+ END (*RECORD*);
+ SLOT_DES_ = RECORD
+ NAME: STRING_DES_;
+ SRC_IMG: SEGMENT_DES_;
+ OPTIONS: OPTIONS_;
+ STUB_REF: STB_PTR_;
+ CODE: SEGMENT_DES_;
+ NEXT_SLOT: SLT_PTR_;
+ END (*RECORD*);
+ CODE_STRUCT_ = RECORD
+ FIRST_STUB: STB_PTR_;
+ LAST_STUB: STB_PTR_;
+ END (*RECORD*);
+ SHADOW_LIST_ = RECORD
+ STUB_POINTER: STB_PTR_;
+ NEXT: SHADOW_PTR_;
+ END (*RECORD*);
+
+ (*----------- Types to assist implemention of ADTs ---------------*)
+ TYPE
+ SP_TYPE = RECORD
+ CHARS: ARRAY[1..SP_SIZE] OF CHAR;
+ USED : SP_INDEX_;
+ END (*RECORD*);
+ SP_PTR = ^SP_TYPE;
+ TYPE
+ OPTION_KEYWORD_ = PACKED ARRAY [1..MAX_OPTION_LENGTH] OF CHAR;
+
+ (*----------- Global variables of the CLiP system ----------------*)
+ VAR
+ REPORT_FILE: TEXT;
+ REPORT_OK: BOOLEAN;
+
+ (*----------- Variables to assist implemention of ADTs -----------*)
+ VAR
+ START, STOP: LONGINTEGER;
+ CONTINUE: BOOLEAN;
+ RUN_INFO: RUN_INFO_;
+ CODE_STRUCT: CODE_STRUCT_;
+ (* STRING132: STRING132_; 22/10/93 *)
+ (* DUMMY_LINE: LINE_DES_; 22/10/93 *)
+ (* DUMMY_SEG: SEGMENT_DES_; 22/10/93 *)
+ DUMMY_ERROR: INTEGER;
+ INI_FILE: TEXT;
+ EXT_FILE_SPEC: FILE_SPEC_;
+ DUMMY_FILE_OK: BOOLEAN;
+ DUMMY_ERROR_MSG: ERROR_MSG_;
+ DUMMY_ERROR_CODE: INTEGER;
+ ERROR_CODE: ERROR_CODE_;
+ AUX_STRING_8: PACKED ARRAY[1..8] OF CHAR;
+ I: INTEGER;
+ ERROR_MSG : ERROR_MSG_;
+ VAR
+ FILE_TABLE: ARRAY[1..FT_SIZE] OF RECORD
+ FILE_SPEC: FILE_SPEC_;
+ FIRST: INTEGER;
+ LAST: INTEGER;
+ END (*RECORD*);
+ LAST_LINE: INTEGER;
+ LAST_FILE: FT_INDEX_;
+ CURR_IN_FILE: TEXT;
+ CURR_OUT_FILE: TEXT;
+ SPACE: SET OF CHAR;
+ VAR
+ SEGMENT_TABLE: RECORD
+ LINES: ARRAY [1..ST_SIZE] OF LINE_DES_;
+ USED: ST_INDEX_;
+ END (*RECORD*);
+ LAST_READ_SEG: RECORD
+ LAST_SEG: SEGMENT_DES_;
+ LAST_LINE: ST_INDEX_;
+ END (*RECORD*);
+ VAR
+ STRING_POOL: SP_PTR;
+ BUFFER: STRING132_;
+ VAR
+ DIAG_TBL: ARRAY[1..MAX_NR_MESS] OF
+ RECORD
+ MESSAGE: STRING_FIXED_;
+ MESS_LOC: LOC_SPEC_;
+ MESS_L: INTEGER;
+ END (*RECORD*);
+ NO_MESSAGES: BOOLEAN;
+ MSG_TBL: ARRAY[1..MAX_ERROR+1] OF
+ RECORD
+ SEV: SEV_CODE_;
+ LOC: LOC_SPEC_;
+ SOURCE_LINE: LINE_DES_;
+ SEGMENT: SEGMENT_DES_;
+ STRING132: STRING132_;
+ LINE_ABS: INTEGER;
+ END (*RECORD*);
+ NR_MSG: INTEGER;
+ VAR
+ ALLOWED: SET OF CHAR;
+ VAR
+ OPTION_TABLE: ARRAY [1..MAX_OPTIONS] OF OPTION_KEYWORD_;
+ OPT_SPACE: SET OF CHAR;
+ OPT_CHARS: SET OF CHAR;
+ DEFAULT_OPTIONS: OPTIONS_;
+ PASCAL_STRING: STRING_FIXED_;
+ FORTRAN_STRING: STRING_FIXED_;
+ C_STRING: STRING_FIXED_;
+
+ (*----------- Forward declarations -------------------------------*)
+ PROCEDURE CLIP_STOP; FORWARD;
+ PROCEDURE EXT_FILE_CLOSE( VAR FILE_VAR : TEXT;
+ VAR ERROR_CODE: INTEGER); FORWARD;
+ PROCEDURE EXT_FILE_PREP (VAR FILE_VAR: TEXT;
+ EXT_FILE_SPEC: FILE_SPEC_;
+ FILE_MODE: FILE_MODE_;
+ VAR FILE_OK: BOOLEAN;
+ VAR ERROR_CODE: INTEGER;
+ VAR ERROR_MSG: ERROR_MSG_ );
+ FORWARD;
+ PROCEDURE READ_FILE_SPEC (VAR AUX_FILE_SPEC: FILE_SPEC_;
+ VAR FILE_SPEC_OK: BOOLEAN);
+ FORWARD;
+ PROCEDURE UC_WORD (VAR STR: PACKED ARRAY [ONE..LEN:INTEGER]
+ OF CHAR); FORWARD;
+ PROCEDURE WRITE_STRING (VAR OUT_FILE: TEXT;
+ OUT_STRING: STRING_FIXED_;
+ NR_CHARS: INTEGER); FORWARD;
+ PROCEDURE WRLN_STRING (VAR OUT_FILE: TEXT;
+ OUT_STRING: STRING_FIXED_;
+ NR_CHARS: INTEGER;
+ SPACE: INTEGER); FORWARD;
+ FUNCTION CHECK_SYNTAX (LPAR, RPAR, END_STRING: SYNTAX_;
+ CC, MARKER: CHAR): BOOLEAN;
+ FORWARD;
+ PROCEDURE INIT_RUN_INFO (VAR INIT_INFO: RUN_INFO_);
+ FORWARD;
+ PROCEDURE READ_INI_FILE (VAR INI_FILE: TEXT;
+ VAR READ_INFO: RUN_INFO_;
+ EXT_FILE_SPEC: FILE_SPEC_;
+ VAR FILE_OK: BOOLEAN;
+ VAR ERROR_MSG: ERROR_MSG_;
+ VAR ERROR_CODE: INTEGER);
+ FORWARD;
+ PROCEDURE READ_LINE_SAFELY (VAR FILE_IN: TEXT);
+ FORWARD;
+ PROCEDURE READ_STRING (VAR IN_FILE: TEXT;
+ VAR IN_STR_LN: INTEGER;
+ VAR IN_STR_BODY: STRING_FIXED_;
+ NR_CHARS_TO_READ: INTEGER);
+ FORWARD;
+ FUNCTION UC (INCHAR: CHAR): CHAR;
+ FORWARD;
+ PROCEDURE VAL_INI_DATA (VAR VAL_INFO: RUN_INFO_;
+ VAR OK: BOOLEAN);
+ FORWARD;
+ FUNCTION FT_ABS_LINE_NUMBER (SOURCE_LINE: LINE_DES_): INTEGER;
+ FORWARD;
+ FUNCTION FT_CHECK_FILE (FILE_SPEC: FILE_SPEC_): ERROR_CODE_;
+ FORWARD;
+ FUNCTION FT_EOF: BOOLEAN;
+ FORWARD;
+ FUNCTION FT_GET_CHAR (SOURCE_LINE: LINE_DES_; INDEX: INTEGER): CHAR;
+ FORWARD;
+ PROCEDURE FT_GET_FILE_SPEC
+ (SOURCE_LINE:LINE_DES_; VAR FILE_SPEC:FILE_SPEC_);
+ FORWARD;
+ FUNCTION FT_GET_INDENT (SOURCE_LINE: LINE_DES_): INTEGER;
+ FORWARD;
+ FUNCTION FT_GET_LINE_LENGTH (SOURCE_LINE: LINE_DES_): INTEGER;
+ FORWARD;
+ FUNCTION FT_GET_LINE_NUMBER (SOURCE_LINE: LINE_DES_): INTEGER;
+ FORWARD;
+ FUNCTION FT_GET_POS_OPTION_MARKER (SOURCE_LINE: LINE_DES_): INTEGER;
+ FORWARD;
+ FUNCTION FT_INCLOSE: ERROR_CODE_;
+ FORWARD;
+ PROCEDURE FT_INIT;
+ FORWARD;
+ PROCEDURE FT_INIT_LINE (VAR LINE: LINE_DES_);
+ FORWARD;
+ FUNCTION FT_INOPEN (FILE_SPEC: FILE_SPEC_): ERROR_CODE_;
+ FORWARD;
+ FUNCTION FT_OUTOPEN (FILE_SPEC: FILE_SPEC_): ERROR_CODE_;
+ FORWARD;
+ FUNCTION FT_OUTCLOSE: ERROR_CODE_;
+ FORWARD;
+ PROCEDURE FT_RDLN (VAR LINE: LINE_DES_);
+ FORWARD;
+ PROCEDURE FT_WRLN (VAR LINE: LINE_DES_; NR_BLANKS: INTEGER;
+ DESTINATION: INTEGER);
+ FORWARD;
+ FUNCTION ST_ABS_SEG (SEGMENT: SEGMENT_DES_):INTEGER;
+ FORWARD;
+ PROCEDURE ST_GET_FILE_SPEC ( SEGMENT: SEGMENT_DES_;
+ VAR FILE_SPEC: FILE_SPEC_);
+ FORWARD;
+ FUNCTION ST_GET_INDENT (SEG: SEGMENT_DES_): INTEGER;
+ FORWARD;
+ PROCEDURE ST_GET_LINE (VAR LINE: LINE_DES_);
+ FORWARD;
+ PROCEDURE ST_GET_OPTION_LINE (SEG: SEGMENT_DES_; VAR LINE: LINE_DES_);
+ FORWARD;
+ PROCEDURE ST_GET_SEG (SEG: SEGMENT_DES_; VAR LINE: LINE_DES_);
+ FORWARD;
+ PROCEDURE ST_GET_SEG_RANGE ( SEGMENT: SEGMENT_DES_;
+ VAR FIRST, LAST:INTEGER);
+ FORWARD;
+ PROCEDURE ST_INIT;
+ FORWARD;
+ PROCEDURE ST_INIT_SEG (VAR SEG: SEGMENT_DES_);
+ FORWARD;
+ FUNCTION ST_IS_EMPTY_SEG (SEG: SEGMENT_DES_): BOOLEAN;
+ FORWARD;
+ FUNCTION ST_NUMBER_OF_LINES (SEG: SEGMENT_DES_): INTEGER;
+ FORWARD;
+ PROCEDURE ST_PUT_LINE (LINE: LINE_DES_; VAR SEG: SEGMENT_DES_);
+ FORWARD;
+ PROCEDURE ST_PUT_SEG (LINE: LINE_DES_; VAR SEG: SEGMENT_DES_);
+ FORWARD;
+ PROCEDURE ST_FINIT;
+ FORWARD;
+ FUNCTION ST_SEG_WIDTH (SEG: SEGMENT_DES_): INTEGER;
+ FORWARD;
+ PROCEDURE ST_WRITE_SEG (SEG: SEGMENT_DES_; BLANKS: INTEGER;
+ DESTINATION: INTEGER);
+ FORWARD;
+ PROCEDURE SP_ADD_CHAR (CH: CHAR; VAR STR: STRING_DES_);
+ FORWARD;
+ PROCEDURE SP_CONC_STR (VAR MASTER: STRING_DES_; SLAVE: STRING_DES_);
+ FORWARD;
+ FUNCTION SP_EQ (STR1: STRING_DES_; STR2: STRING_DES_): BOOLEAN;
+ FORWARD;
+ PROCEDURE SP_EXTR_STR (STR: STRING_DES_; VAR STR132: STRING132_);
+ FORWARD;
+ FUNCTION SP_GET_CHAR (INDEX: INTEGER; STR: STRING_DES_): CHAR;
+ FORWARD;
+ PROCEDURE SP_INIT;
+ FORWARD;
+ PROCEDURE SP_INIT_STR (VAR STR: STRING_DES_);
+ FORWARD;
+ FUNCTION SP_IS_EMPTY_STR (STR: STRING_DES_): BOOLEAN;
+ FORWARD;
+ FUNCTION SP_LENGTH_STR (STR: STRING_DES_): INTEGER;
+ FORWARD;
+ PROCEDURE SP_ADD_BUFFER (VAR STR: STRING_DES_);
+ FORWARD;
+ PROCEDURE SP_ADD_BUFFER_CHAR (CH: CHAR);
+ FORWARD;
+ FUNCTION SP_GET_BUFFER_CHAR (INDEX: INTEGER): CHAR;
+ FORWARD;
+ PROCEDURE SP_INIT_BUFFER;
+ FORWARD;
+
+ (*----------- General routines -----------------------------------*)
+
+ (*********************************************************************)
+ (* Procedure: CLIP_STOP (VAX-version) *)
+ (* Purpose: To halt a program without any message or dump. *)
+ (*********************************************************************)
+ PROCEDURE CLIP_STOP;
+ BEGIN
+ HALT
+ END (*PROCEDURE CLIP_STOP*);
+
+ (*********************************************************************)
+ (* Routine: EXT_FILE_CLOSE (VAX-version) *)
+ (* Purpose: To close an external file. *)
+ (* Interface: FILE_VAR - Pascal file in question *)
+ (* ERROR_CODE - Error indication to caller *)
+ (*********************************************************************)
+ PROCEDURE EXT_FILE_CLOSE;
+ BEGIN
+ CLOSE (FILE_VAR);
+ ERROR_CODE := 0;
+ END (*EXT_FILE_CLOSE*);
+
+ (*********************************************************************)
+ (* Procedure: EXT_FILE_PREP ( VAX-version ) *)
+ (* Purpose: To prepare an external file for reading from it *)
+ (* or writing to it. *)
+ (* Interface: EXT_FILE_SPEC - VMS-file in question. *)
+ (* FILE_MODE - Mode indicator. *)
+ (* FILE_VAR - Pascal file in question. *)
+ (* FILE_OK - Indicates succesfull preparation. *)
+ (* ERROR_CODE - Error indication to caller. *)
+ (* ERROR_MSG - Error message to caller. *)
+ (*********************************************************************)
+ PROCEDURE EXT_FILE_PREP;
+ VAR
+ AUX_FILE_SPEC: VARYING [MAX_FILE_SPEC_L] OF CHAR;
+ BEGIN
+ ERROR_CODE := -1; (* Initialization *)
+ AUX_FILE_SPEC := EXT_FILE_SPEC.BODY;
+ IF (FILE_MODE = INSP_MODE) THEN
+ BEGIN
+ IF (EXT_FILE_SPEC.LENGTH <> 0) THEN
+ BEGIN
+ (* First the file has to be opened. *)
+ OPEN (FILE_VAR,
+ AUX_FILE_SPEC,
+ 'old',
+ ERROR_CODE);
+ IF ERROR_CODE = 0 THEN
+ RESET (FILE_VAR);
+ END (*IF*);
+ END
+ ELSE
+ BEGIN
+ (* FILE_MODE is gelijk aan GEN_MODE *)
+ IF (EXT_FILE_SPEC.LENGTH <> 0) THEN
+ BEGIN
+ (* First the file has to be opened. *)
+ OPEN (FILE_VAR,
+ AUX_FILE_SPEC,
+ 'unknown',
+ ERROR_CODE);
+ IF ERROR_CODE = 0 THEN
+ REWRITE (FILE_VAR);
+ END (*IF*);
+ END (*IF*);
+
+ (* DEFAULT CODE: *)
+ IF NOT (ERROR_CODE = 0) THEN
+ BEGIN
+ FILE_OK := FALSE;
+ (* This string is a bit too short for the assignment, *)
+ (* but that is no problem in VAX-Pascal. *)
+ CASE ERROR_CODE OF
+ -1: BEGIN
+ ERROR_MSG := 'Empty file name.';
+ END;
+ 2: BEGIN
+ ERROR_MSG := 'File not found.';
+ END;
+ OTHERWISE
+ ERROR_MSG := 'Unsuccesful performance';
+ END (*CASE*);
+ END (*IF*)
+ ELSE
+ BEGIN
+ FILE_OK := TRUE;
+ ERROR_MSG := 'Succesful performance. ';
+ ERROR_CODE := 0;
+ END (*IF*);
+ (* END DEFAULT CODE *)
+
+ END (*EXT_FILE_PREP*);
+
+ (*********************************************************************)
+ (* Procedure: READ_FILE_SPEC *)
+ (* Purpose: To read a filespecification from the terminal. *)
+ (* Interface: AUX_FILE_SPEC - Returned file specification. *)
+ (* FILE_SPEC_OK - File specification from terminal. *)
+ (* Author/Date: Maarten Rooda, January 1991. *)
+ (*********************************************************************)
+ PROCEDURE READ_FILE_SPEC;
+ VAR
+ VAX_AUX_FILE_SPEC: VARYING [MAX_FILE_SPEC_L] OF CHAR;
+ I: INTEGER; (* loopvariable. *)
+ DUMMY_FILE: TEXT;
+ FILE_OK: BOOLEAN;
+ ERROR_CODE: INTEGER;
+ ERROR_MSG: ERROR_MSG_;
+
+ BEGIN
+ FILE_SPEC_OK := TRUE;
+ READLN (VAX_AUX_FILE_SPEC);
+ FOR I := 1 TO LENGTH(VAX_AUX_FILE_SPEC) DO
+ BEGIN
+ AUX_FILE_SPEC.BODY[I] := VAX_AUX_FILE_SPEC[I];
+ END (*FOR*);
+ AUX_FILE_SPEC.LENGTH := LENGTH(VAX_AUX_FILE_SPEC)
+ END (*PROCEDURE READ_FILE_SPEC*);
+
+ (*********************************************************************)
+ (* Routine: UC_WORD *)
+ (* Pupose: To convert a string to upper case . *)
+ (* Interface: STRING - String to be converted *)
+ (*********************************************************************)
+ PROCEDURE UC_WORD;
+ VAR
+ COUNTER: INTEGER;
+ BEGIN
+ FOR COUNTER := ONE TO LEN DO
+ STR[COUNTER] := UC (STR[COUNTER]);
+ END (*UC_WORD*);
+
+ (*********************************************************************)
+ (* Procedure: WRITE_STRING (VAX-version) *)
+ (* Purpose: Write a part of a text string to a text file *)
+ (* Interface: OUT_FILE - The file that is written to *)
+ (* NR_CHARS - The number of CHAR's that have to be *)
+ (* written to the file *)
+ (* OUT_STRING - The string to be written *)
+ (* Author/date: Hans Rabouw, March 1992 *)
+ (*********************************************************************)
+ PROCEDURE WRITE_STRING;
+ VAR
+ I: INTEGER;
+ BEGIN
+ FOR I:= 1 TO NR_CHARS DO
+ WRITE(OUT_FILE, OUT_STRING[I]);
+ END;
+
+ (*********************************************************************)
+ (* Routine: WRLN_STRING - WRiTeLN STRING. (VAX-version) *)
+ (* Purpose: Write a part of a text string to a text file and *)
+ (* jump to the next line in the file after that. *)
+ (* Interface: OUT_FILE - The file that is written to *)
+ (* NR_CHARS - The number of CHAR's that have to be *)
+ (* written to the file *)
+ (* OUT_STRING - The string to be written *)
+ (* SPACE - Number of spaces written before string. *)
+ (* Author/date: Heleen Hollenberg, june 1992. *)
+ (*********************************************************************)
+ PROCEDURE WRLN_STRING;
+ VAR
+ I: INTEGER;
+ BEGIN
+ FOR I := 1 TO SPACE DO
+ WRITE (OUT_FILE, ' ' );
+ FOR I:= 1 TO NR_CHARS DO
+ WRITE (OUT_FILE, OUT_STRING[I]);
+ WRITELN (OUT_FILE);
+ END;
+
+ (*********************************************************************)
+ (* Routine: READ_LINE_SAFELY *)
+ (* Purpose: To read a line from a file . *)
+ (* Interface: FILE_IN - File to be read *)
+ (* Author/date: Boudewijn Pelt, August 1991. *)
+ (*********************************************************************)
+ PROCEDURE READ_LINE_SAFELY;
+ BEGIN
+ IF NOT EOF (FILE_IN) THEN
+ READLN (FILE_IN);
+ END (*READ_LINE_SAFELY*);
+
+ (*********************************************************************)
+ (* Routine: CHECK_SYNTAX *)
+ (* Purpose: To check the syntax parameters of CLIP. If they are *)
+ (* not legal then the function result is FALSE *)
+ (* Interface: LPAR - CLIP Left parenthesis definition *)
+ (* RPAR - CLIP Right parenthesis definition *)
+ (* END_STRING - End of stub indicator *)
+ (* CC - CLIP Control Character *)
+ (* MARKER - *)
+ (* CHECK_SYNTAX - Show example of CLIP-syntax *)
+ (* Author/date: Boudewijn Pelt, July 1991 *)
+ (*********************************************************************)
+ FUNCTION CHECK_SYNTAX;
+ VAR
+ COUNTER: INTEGER;
+ ERROR: BOOLEAN;
+
+ BEGIN
+ ERROR := FALSE;
+ FOR COUNTER := 1 TO SYNTAX_LEN DO
+ IF MARKER IN [LPAR.BODY[COUNTER], RPAR.BODY[COUNTER],
+ END_STRING.BODY[COUNTER]] THEN
+ ERROR := TRUE;
+ IF MARKER = CC THEN
+ ERROR := TRUE;
+
+ IF LPAR.BODY[LPAR.LENGTH] <> CC THEN
+ ERROR := TRUE;
+ IF RPAR.BODY[1] <> CC THEN
+ ERROR := TRUE;
+
+ WITH LPAR DO
+ BEGIN
+ IF LENGTH <= 1 THEN
+ ERROR := TRUE;
+ FOR COUNTER := 1 TO LENGTH DO
+ IF BODY[COUNTER] IN ALLOWED_ID_CHARS THEN
+ ERROR := TRUE;
+ END (*WITH*);
+ WITH RPAR DO
+ BEGIN
+ IF LENGTH <= 1 THEN
+ ERROR := TRUE;
+ FOR COUNTER := 1 TO LENGTH DO
+ IF BODY[COUNTER] IN ALLOWED_ID_CHARS THEN
+ ERROR := TRUE;
+ END (*WITH*);
+ WITH END_STRING DO
+ BEGIN
+ IF LENGTH <= 0 THEN
+ ERROR := TRUE;
+ FOR COUNTER := 1 TO LENGTH DO
+ IF NOT (BODY[COUNTER] IN ALLOWED_ID_CHARS) THEN
+ ERROR := TRUE;
+ END (*WITH*);
+ IF (CC IN ALLOWED_ID_CHARS) OR (CC = ' ') THEN
+ ERROR := TRUE;
+ IF (MARKER IN ALLOWED_ID_CHARS) OR (MARKER = ' ') THEN
+ ERROR := TRUE;
+
+ CHECK_SYNTAX := NOT ERROR;
+ END (*CHECK_SYNTAX*);
+
+ (*********************************************************************)
+ (* Procedure: INIT_RUN_INFO . *)
+ (* Purpose: To initialize the fields of a record INIT_INFO of *)
+ (* type RUN_INFO_ to default values. *)
+ (* Interface: INIT_INFO - Structure to initialize. *)
+ (* Author/date: Maarten Rooda, January 1991. *)
+ (*********************************************************************)
+ PROCEDURE INIT_RUN_INFO;
+
+ CONST
+ AUX_STR_L = MAX_MODE_L;
+
+ VAR
+ I: INTEGER;
+ AUX_STRING: PACKED ARRAY[1..AUX_STR_L] OF CHAR;
+
+ BEGIN
+ (******* INIT_RUN_INFO body *******)
+ WITH INIT_INFO DO
+ BEGIN
+ (* additional parameters of init_info. *)
+ CLIP_LPAR.BODY := EMPTY_STRING_FIXED;
+ CLIP_LPAR.BODY[1] := '(';
+ CLIP_LPAR.BODY[2] := '*';
+ CLIP_LPAR.BODY[3] := '*';
+ CLIP_LPAR.LENGTH := 3;
+
+ CLIP_RPAR.BODY := EMPTY_STRING_FIXED;
+ CLIP_RPAR.BODY[1] := '*';
+ CLIP_RPAR.BODY[2] := '*';
+ CLIP_RPAR.BODY[3] := ')';
+ CLIP_RPAR.LENGTH := 3;
+
+ CLIP_END.BODY := EMPTY_STRING_FIXED;
+ CLIP_END.BODY[1] := 'E';
+ CLIP_END.BODY[2] := 'N';
+ CLIP_END.BODY[3] := 'D';
+ CLIP_END.BODY[4] := 'O';
+ CLIP_END.BODY[5] := 'F';
+ CLIP_END.LENGTH := 5;
+
+ CLIP_CC := '*';
+ OPTION_MARKER := '#';
+
+ (* old parameters. *)
+ MODE := EMPTY_STRING_FIXED;
+ AUX_STRING := 'INTERACTIVE_MODE';
+ FOR I := 1 TO MAX_MODE_L DO
+ MODE[I] := AUX_STRING[I];
+
+ INT_FAULT_CORR := TRUE;
+
+ MESSAGE_DESTINATION := EMPTY_STRING_FIXED;
+ AUX_STRING := 'TERMINAL ';
+ FOR I := 1 TO MAX_M_D_L DO
+ MESSAGE_DESTINATION[I] := AUX_STRING[I];
+
+ REPORT_FILE_SPEC.BODY := EMPTY_STRING_FIXED;
+ REPORT_FILE_SPEC.BODY[1] := 'C';
+ REPORT_FILE_SPEC.BODY[2] := 'L';
+ REPORT_FILE_SPEC.BODY[3] := 'I';
+ REPORT_FILE_SPEC.BODY[4] := 'P';
+ REPORT_FILE_SPEC.BODY[5] := '.';
+ REPORT_FILE_SPEC.BODY[6] := 'R';
+ REPORT_FILE_SPEC.BODY[7] := 'P';
+ REPORT_FILE_SPEC.BODY[8] := 'T';
+ REPORT_FILE_SPEC.LENGTH := 8;
+
+ NR_SRC_FILES := 0;
+
+ (* Default: *)
+ EXTR_MODE := EMPTY_STRING_FIXED;
+ AUX_STRING := 'OMITTED ';
+ FOR I := 1 TO MAX_EXTR_MODE_L DO
+ EXTR_MODE[I] := AUX_STRING[I];
+
+ NR_MODULES:= 0;
+ MODULE_DIRECTORY.BODY := EMPTY_STRING_FIXED;
+ MODULE_DIRECTORY.LENGTH := 0;
+
+ END (* WITH INIT_INFO *);
+ (***************** End of INIT_RUN_INFO body ***********************)
+ END (*INIT_RUN_INFO*);
+
+ (*********************************************************************)
+ (* Procedure: READ_INI_FILE *)
+ (* Purpose: To open an initializationfile and read data from *)
+ (* it into a record READ_INFO of type RUN_INFO_ . *)
+ (* Interface: INI_FILE: The initializationfile in question. *)
+ (* READ_INFO: Information for a run of CLIP. *)
+ (* EXT_FILE_SPEC: The filespecification *)
+ (* FILE_OK: TRUE if data read successfully *)
+ (* ERROR_MSG: Error message. *)
+ (* ERROR_CODE: Type of error. *)
+ (* Author/date: Maarten Rooda, February 1991. *)
+ (*********************************************************************)
+ PROCEDURE READ_INI_FILE;
+ VAR
+ DUMMY_CODE: INTEGER;
+
+ (*********************************************************************)
+ (* Procedure: READ_INI_DATA *)
+ (* Purpose: To read data from an initializationfile into a *)
+ (* record READ_INFO of type RUN_INFO_ . *)
+ (* Interface: INI_FILE - INI-file to be read *)
+ (* READ_INFO - Structure to return the data. *)
+ (* Author/date: Boudewijn Pelt, May 1991. *)
+ (*********************************************************************)
+ PROCEDURE READ_INI_DATA(VAR INI_FILE: TEXT;
+ VAR READ_INFO: RUN_INFO_);
+ CONST
+ SKIP_LINES = 5;
+ VAR
+ COUNTER: INTEGER;
+ LETTER: STRING_FIXED_; (* This is an array that can be read by *)
+ (* READ_STRING *)
+ DUMMY_L: INTEGER; (* A dummy parameter for READ_STRING *)
+ OK: BOOLEAN;
+ AUX_STR_34 : PACKED ARRAY[1..34] OF CHAR;
+
+
+ (*********************************************************************)
+ (* Routine: GET_SOURCE_FILES *)
+ (* Purpose: To read a number of filespecifications from an *)
+ (* input file. *)
+ (* Interface: FILE_IN - File with data to be read *)
+ (* FILES - Data of files *)
+ (* NR_FILES - Number of files *)
+ (* Author/date: Boudewijn Pelt, August 1991 *)
+ (* Modified: Hans Rabouw, March 1992 *)
+ (*********************************************************************)
+ PROCEDURE GET_SOURCE_FILES
+ (VAR FILE_IN: TEXT;
+ VAR FILES: SOURCE_FILES_;
+ VAR NR_FILES: INTEGER);
+ VAR
+ I: INTEGER;
+ READ_ON: BOOLEAN;
+ AUX_FILE_SPEC: FILE_SPEC_;
+
+ BEGIN
+ I := 0;
+ READ_ON := NOT (EOF (FILE_IN));
+ WHILE READ_ON DO
+ BEGIN
+ WITH AUX_FILE_SPEC DO
+ READ_STRING(FILE_IN, LENGTH, BODY, MAX_FILE_SPEC_L);
+ READ_LINE_SAFELY(INI_FILE);
+ IF (AUX_FILE_SPEC.BODY[1] = '-') OR
+ (AUX_FILE_SPEC.LENGTH = 0) THEN
+ (* AUX_FILE_SPEC was not read successfully. *)
+ READ_ON := FALSE
+ ELSE IF I < MAX_NR_SRC_FILES THEN
+ BEGIN
+ (* AUX_FILE_SPEC was read successfully. *)
+ I := I + 1;
+ FILES[I] := AUX_FILE_SPEC;
+ END (*IF.IF*);
+ END (*WHILE*);
+ NR_FILES := I;
+ END (*GET_SOURCE_FILES*);
+
+
+ (*********************************************************************)
+ (* Routine: GET_MODULES *)
+ (* Purpose: To read a number of filespecifications from an *)
+ (* input file. *)
+ (* Interface: FILE_IN - File with data to be read *)
+ (* FILES - Data of files *)
+ (* NR_FILES - Number of files *)
+ (* Author/date: Boudewijn Pelt, August 1991 *)
+ (* Modified: Hans Rabouw, March 1992 *)
+ (*********************************************************************)
+ PROCEDURE GET_MODULES
+ (VAR FILE_IN: TEXT;
+ VAR FILES: RSLT_MODULES_;
+ VAR NR_FILES: INTEGER);
+
+ VAR
+ I: INTEGER;
+ READ_ON: BOOLEAN;
+ AUX_FILE_SPEC: FILE_SPEC_;
+ AUX_PATH_SPEC: FILE_SPEC_;
+
+ BEGIN
+ I := 0;
+ READ_ON := NOT (EOF (FILE_IN));
+ WHILE READ_ON DO
+ BEGIN
+ WITH AUX_PATH_SPEC DO
+ READ_STRING(FILE_IN, LENGTH, BODY, MAX_FILE_SPEC_L);
+ READ_LINE_SAFELY(INI_FILE);
+ IF (AUX_PATH_SPEC.BODY[1] = '-')
+ (* OR (AUX_PATH_SPEC.LENGTH = 0) (EWvA nav. HR 17/11/92) *)
+ THEN
+ (* AUX_PATH_SPEC was not read successfully. *)
+ READ_ON := FALSE
+ ELSE
+ BEGIN
+ WITH AUX_FILE_SPEC DO
+ READ_STRING(FILE_IN, LENGTH, BODY, MAX_FILE_SPEC_L);
+ READ_LINE_SAFELY(INI_FILE);
+ IF (AUX_FILE_SPEC.BODY[1] = '-') OR
+ (AUX_FILE_SPEC.LENGTH = 0) THEN
+ READ_ON := FALSE
+ ELSE IF I < MAX_NR_RSLT_MODULES THEN
+ BEGIN
+ (* AUX_FILE_SPEC was read successfully. *)
+ I := I + 1;
+ FILES[I].FILE_NAME := AUX_FILE_SPEC;
+ FILES[I].PATH := AUX_PATH_SPEC;
+ END (*IF.IF*);
+ END (*IF*);
+ END (*WHILE*);
+ NR_FILES := I;
+ END (*GET_MODULES*);
+
+
+ BEGIN
+ (******* READ_INI_DATA body *******)
+ RESET (INI_FILE);
+ FOR COUNTER := 1 TO SKIP_LINES DO
+ READ_LINE_SAFELY(INI_FILE);
+ WITH READ_INFO DO
+ BEGIN
+ (********************* READ_INI_DATA (1) ***********************)
+ (** Read the data from INI_FILE into MODE, INT_FAULT_CORR, **)
+ (** MESSAGE_DESTINATION, REPORT_FILE_SPEC, CLIP_LPAR, CLIP_- **)
+ (** RPAR, CLIP_CC, CLIP_END, OPTION_MARKER, NR_SCR_FILES, **)
+ (** SOURCE_FILES, NR_MODULES, EXTR_MODE, RSLT_MODULES. **)
+ READ_STRING(INI_FILE, DUMMY_L, MODE, MAX_MODE_L);
+ READ_LINE_SAFELY(INI_FILE);
+ READ_STRING(INI_FILE, DUMMY_L, LETTER, 1);
+ READ_LINE_SAFELY(INI_FILE);
+ INT_FAULT_CORR := LETTER[1] = 'Y';
+ READ_STRING(INI_FILE, DUMMY_L, MESSAGE_DESTINATION, MAX_M_D_L);
+ READ_LINE_SAFELY(INI_FILE);
+ WITH CLIP_LPAR DO
+ READ_STRING(INI_FILE, LENGTH, BODY, SYNTAX_LEN);
+
+ READ_LINE_SAFELY(INI_FILE);
+ WITH CLIP_RPAR DO
+ READ_STRING(INI_FILE, LENGTH, BODY, SYNTAX_LEN);
+
+ READ_LINE_SAFELY(INI_FILE);
+ READ_STRING(INI_FILE, DUMMY_L, LETTER, 1);
+ READ_LINE_SAFELY(INI_FILE);
+ CLIP_CC := LETTER[1];
+ WITH CLIP_END DO
+ READ_STRING(INI_FILE, LENGTH, BODY, SYNTAX_LEN);
+
+ READ_LINE_SAFELY(INI_FILE);
+ READ_STRING(INI_FILE, DUMMY_L, LETTER, 1);
+ READ_LINE_SAFELY(INI_FILE);
+ OPTION_MARKER := LETTER[1];
+ READ_STRING(INI_FILE, DUMMY_L, EXTR_MODE, MAX_EXTR_MODE_L);
+
+ READ_LINE_SAFELY(INI_FILE);
+
+ (************************ READ_INI_DATA (1.1) **********************)
+ (** Read the file specifications REPORT_FILE_SPEC, **)
+ (** SOURCE_FILES.FILES[1..NR_FILE_SPECS] **)
+ (** RSLT_MODULES.FILES[1..NR_FILE_SPECS] from the INI_FILE. **)
+ READ_LINE_SAFELY(INI_FILE); (* Skip -- REPORT FILE -- *)
+ WITH REPORT_FILE_SPEC DO
+ READ_STRING(INI_FILE, LENGTH, BODY, MAX_FILE_SPEC_L);
+
+ READ_LINE_SAFELY(INI_FILE);
+ READ_LINE_SAFELY(INI_FILE); (* skip -- INPUT FILES -- *)
+ GET_SOURCE_FILES (INI_FILE, SOURCE_FILES, NR_SRC_FILES);
+ GET_MODULES (INI_FILE, RSLT_MODULES, NR_MODULES);
+
+ (* There is no need to skip the '--- MODULE DIRECTORY ---' line *)
+ (* because it is read by the GET_MODULES procedure *)
+
+ WITH MODULE_DIRECTORY DO
+ READ_STRING(INI_FILE, LENGTH, BODY, MAX_FILE_SPEC_L);
+
+ (***************** End of READ_INI_DATA (1.1) **********************)
+
+ (************************ READ_INI_DATA (1.2) **********************)
+ (** CLIP_LPAR and CLIP_RPAR are not complete. An CLIP_CC needs to **)
+ (** be added. **)
+ WITH CLIP_LPAR DO
+ BEGIN
+ IF LENGTH < SYNTAX_LEN THEN
+ LENGTH := LENGTH + 1;
+ BODY[LENGTH] := CLIP_CC;
+ END (*WITH*);
+ WITH CLIP_RPAR DO
+ BEGIN
+ LENGTH := LENGTH + 1;
+ IF LENGTH > SYNTAX_LEN THEN
+ LENGTH := SYNTAX_LEN;
+ FOR COUNTER := LENGTH-1 DOWNTO 1 DO
+ BODY[COUNTER+1] := BODY[COUNTER];
+ BODY[1] := CLIP_CC;
+ END (*WITH*);
+ (****************** End of READ_INI_DATA (1.2) *********************)
+
+ (***************** End of READ_INI_DATA (1) ********************)
+ END (*WITH*);
+
+ (************************* READ_INI_DATA (2) ***********************)
+ (** Check if READ_INFO is valid. If not display an error message **)
+ (** and set READ_INFO to default values. **)
+ VAL_INI_DATA (READ_INFO, OK);
+ IF NOT OK THEN
+ BEGIN
+ (********************* READ_INI_DATA (2.1) *********************)
+ (** Generate a warning message **)
+ ERROR_CODE := CORRUPT_INI_FILE;
+ ERROR_MSG := EMPTY_STRING_FIXED;
+ AUX_STR_34 := 'THE SPECIFIED INI-FILE IS CORRUPT.';
+ FOR COUNTER := 1 TO 34 DO
+ ERROR_MSG[COUNTER] := AUX_STR_34[COUNTER];
+ (***************** End of READ_INI_DATA (2.1) ******************)
+ INIT_RUN_INFO(READ_INFO);
+ END (*IF*);
+ (********************* End of READ_INI_DATA (2) ********************)
+
+ (***************** End of READ_INI_DATA body ***********************)
+ END (*READ_INI_DATA*);
+
+ BEGIN
+ FILE_OK := FALSE;
+ EXT_FILE_PREP(INI_FILE, EXT_FILE_SPEC, INSP_MODE, FILE_OK,
+ ERROR_CODE, ERROR_MSG);
+ IF FILE_OK THEN
+ BEGIN
+ READ_INI_DATA (INI_FILE, READ_INFO);
+ (* If the INI-file contained an error, the READ_INFO record *)
+ (* was initialized by READ_INI_DATA. *)
+ EXT_FILE_CLOSE (INI_FILE, DUMMY_CODE); (* EWvA, 16/10/93 *)
+ END (*IF*);
+ END (*READ_INI_FILE*);
+
+ (*********************************************************************)
+ (* Procedure: READ_STRING *)
+ (* Purpose: read a string from a text file and determine its *)
+ (* length. *)
+ (* Interface: IN_FILE - File to be read *)
+ (* IN_STR_LN - Index in line to be read *)
+ (* IN_STR_BODY - Body of the line *)
+ (* Author/date: Maarten Rooda, September 1990. *)
+ (* Modified: Boudewijn Pelt, June 1991 & July 1991. *)
+ (* Hans Rabouw, March 1992 *)
+ (*********************************************************************)
+ PROCEDURE READ_STRING;
+ VAR
+ INDEX: INTEGER;
+
+ BEGIN
+ (* File is already open and in inspection mode. *)
+ (* A prompt, if needed, has already been issued. *)
+ IN_STR_LN := 0;
+ INDEX := 1;
+ IF NOT (EOF(IN_FILE)) OR (EOLN (IN_FILE)) THEN
+ BEGIN
+ WHILE NOT (EOLN (IN_FILE) OR (INDEX > NR_CHARS_TO_READ)) DO
+ BEGIN
+ READ(IN_FILE, IN_STR_BODY[INDEX]);
+ INDEX := INDEX + 1;
+ END (*WHILE*);
+ IN_STR_LN := INDEX - 1;
+ IF IN_STR_LN > 0 THEN
+ WHILE (IN_STR_BODY[IN_STR_LN] = ' ') AND
+ (IN_STR_LN > 1) DO
+ IN_STR_LN := IN_STR_LN - 1;
+
+ (* If not all of the string has been filled, write spaces to *)
+ (* the cells that have not been filled. *)
+
+ FOR INDEX := INDEX TO STRING_FIXED_L DO
+ IN_STR_BODY[INDEX] := ' ';
+ END (*IF*);
+ END (*READ_STRING*);
+
+ (*********************************************************************)
+ (* Routine: UC - convert character to Upper-Case *)
+ (* Purpose: To transform lower case letters to their uppercase *)
+ (* equivalent. *)
+ (* Interface: INCHAR - Character to be converted. *)
+ (* <RETURNS> - Converted character. *)
+ (* Author/Date: Vamp project management, october 1983. *)
+ (*********************************************************************)
+ FUNCTION UC;
+ BEGIN
+ IF (INCHAR >= 'a') AND (INCHAR <= 'z') THEN
+ UC := CHR (ORD(INCHAR) - ORD('a') + ORD('A'))
+ ELSE
+ UC := INCHAR;
+ END (*UC*);
+
+ (*********************************************************************)
+ (* Routine: VAL_INI_DATA *)
+ (* Purpose: Check if the run_info structure VAL_INFO is valid *)
+ (* if this is not the case then attempt to fix it *)
+ (* or return an error. (Make OK FALSE) *)
+ (* Interface: VAL_INFO - Data from initialization. *)
+ (* OK - TRUE if data OK. *)
+ (* Author/date: Boudewijn Pelt, June 1991. *)
+ (*********************************************************************)
+ PROCEDURE VAL_INI_DATA;
+ CONST
+ AUX_STR_L = MAX_MODE_L;
+
+ VAR
+ ERROR: BOOLEAN;
+ AUX_STRING: PACKED ARRAY [1..AUX_STR_L] OF CHAR;
+ I: INTEGER;
+
+ BEGIN
+ ERROR := FALSE;
+ WITH VAL_INFO DO
+ BEGIN
+ IF NOT (CHECK_SYNTAX(CLIP_LPAR, CLIP_RPAR, CLIP_END,
+ CLIP_CC, OPTION_MARKER)) THEN
+ ERROR := TRUE;
+
+ (* Check MODE and set ERROR. *)
+ IF MODE[1] IN ['I', 'i'] THEN
+ AUX_STRING :='INTERACTIVE_MODE'
+ ELSE IF MODE[1] IN ['A', 'a'] THEN
+ AUX_STRING :='AUTO_MODE '
+ ELSE IF MODE[1] IN ['H', 'h'] THEN
+ AUX_STRING :='HELPFUL_MODE '
+ ELSE IF MODE[1] IN ['D', 'd'] THEN
+ AUX_STRING :='DEBUG_MODE '
+ ELSE
+ ERROR := TRUE;
+
+ IF NOT ERROR THEN
+ FOR I := 1 TO MAX_MODE_L DO
+ MODE[I] := AUX_STRING[I];
+
+ (* Check MESSAGE_DESTINATION and set ERROR. *)
+ IF MESSAGE_DESTINATION[1] IN ['F', 'f'] THEN
+ AUX_STRING := 'FILE '
+ ELSE IF MESSAGE_DESTINATION[1] IN ['T', 't'] THEN
+ AUX_STRING := 'TERMINAL '
+ ELSE IF MESSAGE_DESTINATION[1] IN ['B', 'b'] THEN
+ AUX_STRING := 'BOTH '
+ ELSE IF MESSAGE_DESTINATION[1] IN ['N', 'n'] THEN
+ AUX_STRING := 'NONE '
+ ELSE
+ ERROR := TRUE;
+
+ IF NOT ERROR THEN
+ FOR I := 1 TO MAX_M_D_L DO
+ MESSAGE_DESTINATION[I] := AUX_STRING[I];
+
+ (* Check EXTR_MODE and set ERROR. *)
+ IF EXTR_MODE[1] IN ['E', 'e'] THEN
+ AUX_STRING := 'EXTRACTED '
+ ELSE IF EXTR_MODE[1] IN ['O', 'o'] THEN
+ AUX_STRING := 'OMITTED '
+ ELSE
+ ERROR := TRUE;
+
+ IF NOT ERROR THEN
+ FOR I := 1 TO MAX_EXTR_MODE_L DO
+ EXTR_MODE[I] := AUX_STRING[I];
+
+ END (*WITH*);
+ OK := NOT ERROR;
+ END (*VAL_INI_DATA*);
+
+ (*----------- File Table routines (ADT) --------------------------*)
+
+ (*********************************************************************)
+ (* Routine: FT_ABS_LINE_NUMBER - File Table ABSolute LINE NUMBER.*)
+ (* Purpose: To return the absolute line number of a source line *)
+ (* the source file. *)
+ (* Interface: SOURCE_LINE - The specified source line. *)
+ (* RETURNS - Absolute line number of the given *)
+ (* SOURCE_LINE. *)
+ (*********************************************************************)
+ FUNCTION FT_ABS_LINE_NUMBER;
+ BEGIN
+ FT_ABS_LINE_NUMBER := SOURCE_LINE.ID;
+ END (*FUNCTION FT_ABS_LINE_NUMBER*);
+
+ (*********************************************************************)
+ (* Routine: FT_CHECK_FILE *)
+ (* Purpose: Checks whether a file is acccessable or not. *)
+ (* Interface: FILE_SPEC - Specification of file to check. *)
+ (* RETURNS - Code of a possible error. *)
+ (* FT vars: CURR_IN_FILE. *)
+ (*********************************************************************)
+ FUNCTION FT_CHECK_FILE;
+ VAR
+ ERROR_CODE: ERROR_CODE_;
+ DUMMY_FILE_OK: BOOLEAN;
+ DUMMY_ERROR_MSG: ERROR_MSG_;
+
+ BEGIN
+ EXT_FILE_PREP (CURR_IN_FILE, FILE_SPEC, INSP_MODE, DUMMY_FILE_OK,
+ ERROR_CODE, DUMMY_ERROR_MSG);
+ IF ERROR_CODE<=0 THEN
+ CLOSE (CURR_IN_FILE);
+ FT_CHECK_FILE := ERROR_CODE;
+ END (*FT_CHECK_FILE*);
+
+ (*********************************************************************)
+ (* Routine: FT_EOF *)
+ (* Purpose: The function examines if the currently read file is *)
+ (* exhausted. *)
+ (* Interface: RETURNS - TRUE if the file is exhausted. *)
+ (* FT vars: CURR_IN_FILE. *)
+ (*********************************************************************)
+ FUNCTION FT_EOF;
+ BEGIN
+ IF NOT EOF(CURR_IN_FILE) THEN
+ FT_EOF := FALSE
+ ELSE
+ FT_EOF := TRUE;
+ END (*FT_EOF*);
+
+ (*********************************************************************)
+ (* Routine: FT_GET_CHAR *)
+ (* Purpose: To locate a character at a given position in a *)
+ (* source_line and to return this character. *)
+ (* Interface: SOURCE_LINE - The source line. *)
+ (* INDEX - Index of the desired character. *)
+ (* RETURNS - The desired character. *)
+ (* CLIP objs: MAX_LINE. *)
+ (*********************************************************************)
+ FUNCTION FT_GET_CHAR;
+ BEGIN
+ IF (INDEX > MAX_LINE) OR (INDEX <= 0) THEN
+ BEGIN
+ WRITELN (OUTPUT, 'FT-GET-CHAR (a): ',
+ 'System Failure... Call maintenance.');
+ CLIP_STOP;
+ END (*IF*);
+ IF INDEX > SOURCE_LINE.USED THEN
+ BEGIN
+ WRITELN (OUTPUT, 'FT-GET-CHAR (B): ',
+ 'System Failure... Call maintenance.');
+ CLIP_STOP;
+ END (*IF*);
+
+ (* Index is within legal range. Proceed... *)
+ FT_GET_CHAR := SOURCE_LINE.CHARS[INDEX];
+ END (*FT_GET_CHAR*);
+
+ (*********************************************************************)
+ (* Routine: FT_GET_FILE_SPEC *)
+ (* Purpose: To return the file specification of a source line *)
+ (* Interface: SOURCE_LINE - The source line. *)
+ (* FILE_SPEC - The wanted file specification. *)
+ (* FT vars: FILE_TABLE. *)
+ (*********************************************************************)
+ PROCEDURE FT_GET_FILE_SPEC;
+ VAR
+ INDEX: FT_INDEX_;
+
+ BEGIN
+ (* Beware of non-existing line identifications. *)
+ IF (SOURCE_LINE.ID <= 0) OR
+ (SOURCE_LINE.ID > FILE_TABLE[LAST_FILE].LAST) THEN
+ BEGIN
+ WRITELN (OUTPUT, 'FT-GET-FILE-SPEC: ',
+ 'System Failure... Call maintenance.');
+ CLIP_STOP;
+ END (*IF*);
+
+ (* Line surely exist in FT. Find its specification. *)
+ INDEX := 1;
+ WHILE FILE_TABLE[INDEX].LAST < SOURCE_LINE.ID DO
+ INDEX := INDEX+1;
+ FILE_SPEC := FILE_TABLE[INDEX].FILE_SPEC;
+ END (*FT_GET_FILE_SPEC*);
+
+ (*********************************************************************)
+ (* Routine: FT_GET_INDENT *)
+ (* Purpose: To return the indentation of a line *)
+ (* Interface: SOURCE_LINE - The source line. *)
+ (* RETURNS - The indentation of SOURCE_LINE. *)
+ (*********************************************************************)
+ FUNCTION FT_GET_INDENT;
+ BEGIN
+ FT_GET_INDENT := SOURCE_LINE.INDENT;
+ END (*FT_GET_INDENT*);
+
+ (*********************************************************************)
+ (* Routine: FT_GET_LINE_LENGTH *)
+ (* Purpose: To return the length of a line *)
+ (* Interface: SOURCE_LINE - Line-descriptor to be examined. *)
+ (* RETURNS - Length of given line. *)
+ (*********************************************************************)
+ FUNCTION FT_GET_LINE_LENGTH;
+ BEGIN
+ FT_GET_LINE_LENGTH := SOURCE_LINE.USED;
+ END (*FT_GET_LINE_LENGTH*);
+
+ (*********************************************************************)
+ (* Routine: FT_GET_LINE_NUMBER *)
+ (* Purpose: To return the line number of a source line. *)
+ (* Interface: SOURCE_LINE - The source line *)
+ (* RETURNS - Line number or error code. *)
+ (* FT vars: FILE_TABLE. *)
+ (*********************************************************************)
+ FUNCTION FT_GET_LINE_NUMBER;
+ VAR
+ INDEX: FT_INDEX_;
+
+ BEGIN
+ (* Beware of non-existing line identifications. *)
+ IF (SOURCE_LINE.ID <= 0) OR
+ (SOURCE_LINE.ID > FILE_TABLE[LAST_FILE].LAST) THEN
+ BEGIN
+ WRITELN (OUTPUT, 'FT_GET_LINE_NUMBER: ',
+ 'System Failure... Call maintenance.');
+ CLIP_STOP;
+ END (*IF*);
+
+ (* Line surely exist in FT. Find its number. *)
+ INDEX := 1;
+ WHILE FILE_TABLE[INDEX].LAST < SOURCE_LINE.ID DO
+ INDEX := INDEX + 1;
+ FT_GET_LINE_NUMBER := SOURCE_LINE.ID - FILE_TABLE[INDEX].FIRST + 1;
+ END (*FT_GET_LINE_NUMBER*);
+
+ (*********************************************************************)
+ (* Routine: FT_GET_POS_OPTION_MARKER *)
+ (* Purpose: Return the value of POS_OPTION_MARKER. *)
+ (* Interface: SOURCE_LINE - Line-descriptor to be examined. *)
+ (* RETURNS - Position of the OPTION_MARKER. *)
+ (*********************************************************************)
+ FUNCTION FT_GET_POS_OPTION_MARKER;
+ BEGIN
+ FT_GET_POS_OPTION_MARKER := SOURCE_LINE.POS_OPTION_MARKER;
+ END (*FT_GET_POS_MARKER*);
+
+ (*********************************************************************)
+ (* Routine: FT_INCLOSE *)
+ (* Purpose: Close the current input file. *)
+ (* Interface: RETURNS - Code of a possible error. *)
+ (* FT vars: CURR_IN_FILE. *)
+ (*********************************************************************)
+ FUNCTION FT_INCLOSE;
+ VAR
+ ERROR_CODE: ERROR_CODE_;
+
+ BEGIN
+ EXT_FILE_CLOSE (CURR_IN_FILE, ERROR_CODE);
+ FT_INCLOSE := ERROR_CODE;
+ END (*FT_INCLOSE*);
+
+ (*********************************************************************)
+ (* Routine: FT_INIT *)
+ (* Purpose: General initialization of the file table. It is only *)
+ (* activated once at the start of an run. *)
+ (* FT vars: FILE_TABLE, LAST_LINE, LAST_FILE, SPACE. *)
+ (*********************************************************************)
+ PROCEDURE FT_INIT;
+ VAR
+ K: FT_INDEX_;
+
+ BEGIN
+ FOR K := 1 TO FT_SIZE DO
+ WITH FILE_TABLE[K] DO
+ BEGIN
+ FILE_SPEC.LENGTH := 0;
+ FIRST := 0;
+ LAST := 0;
+ END (*WITH*);
+ LAST_LINE := 0;
+ LAST_FILE := 0;
+ SPACE := [CHR(0) .. CHR(9), CHR(14) .. CHR(25),
+ CHR(28) .. CHR(32), CHR(11), CHR(127)];
+ END (*FT_INIT*);
+
+ (*********************************************************************)
+ (* Routine: FT_INIT_LINE *)
+ (* Purpose: Initialization of a LINE_DES_-object. *)
+ (*********************************************************************)
+ PROCEDURE FT_INIT_LINE;
+ BEGIN
+ WITH LINE DO
+ BEGIN
+ INDENT := 0;
+ USED := 0;
+ ID := 0;
+ POS_OPTION_MARKER := 0;
+ END (*WITH*);
+ END (*FT_INIT_LINE*);
+
+ (*********************************************************************)
+ (* Routine: FT_INOPEN *)
+ (* Purpose: Opens a new file with the given specification for *)
+ (* read access. *)
+ (* Interface: FILE_SPEC - Specification of file to open. *)
+ (* RETURNS - Code of a possible error. *)
+ (* FT vars: FILE_TABLE, LAST_FILE, CURR_IN_FILE. *)
+ (*********************************************************************)
+ FUNCTION FT_INOPEN;
+ VAR
+ ERROR_CODE: ERROR_CODE_;
+ DUMMY_FILE_OK: BOOLEAN;
+ DUMMY_ERROR_MSG: ERROR_MSG_;
+
+ BEGIN
+ EXT_FILE_PREP (CURR_IN_FILE, FILE_SPEC, INSP_MODE, DUMMY_FILE_OK,
+ ERROR_CODE, DUMMY_ERROR_MSG);
+ IF ERROR_CODE = 0 THEN
+ BEGIN
+ LAST_FILE := LAST_FILE+1;
+ FILE_TABLE[LAST_FILE].FILE_SPEC := FILE_SPEC;
+ END (*IF*);
+ FT_INOPEN := ERROR_CODE;
+ END (*FT_INOPEN*);
+
+ (*********************************************************************)
+ (* Routine: FT_OUTOPEN *)
+ (* Purpose: Opens a new file with the given specification for *)
+ (* write access. *)
+ (* Interface: FILE_SPEC - Specification of outputfile. *)
+ (* RETURNS - Code of a possible error. *)
+ (* FT vars: CURR_OUT_FILE. *)
+ (*********************************************************************)
+ FUNCTION FT_OUTOPEN;
+ VAR
+ ERROR_CODE: ERROR_CODE_;
+ DUMMY_FILE_OK: BOOLEAN;
+ DUMMY_ERROR_MSG: ERROR_MSG_;
+
+ BEGIN
+ EXT_FILE_PREP (CURR_OUT_FILE, FILE_SPEC, GEN_MODE, DUMMY_FILE_OK,
+ ERROR_CODE, DUMMY_ERROR_MSG);
+
+ (* The opening was successfull. Make ERROR_CODE equal to *)
+ (* STATUS (CURR_OUT_FILE) in case an error occured during the *)
+ (* REWRITE operation (flagged by a value <> -1). *)
+ FT_OUTOPEN := ERROR_CODE;
+ END (*FT_OUTOPEN*);
+
+ (*********************************************************************)
+ (* Routine: FT_OUTCLOSE *)
+ (* Purpose: Close the current output file. *)
+ (* Interface: RETURNS - Code of a possible error. *)
+ (* FT vars: CURR_OUT_FILE. *)
+ (*********************************************************************)
+ FUNCTION FT_OUTCLOSE;
+ VAR
+ ERROR_CODE: ERROR_CODE_;
+
+ BEGIN
+ EXT_FILE_CLOSE (CURR_OUT_FILE, ERROR_CODE);
+ FT_OUTCLOSE := ERROR_CODE;
+ END (*FT_OUTCLOSE*);
+
+ (*********************************************************************)
+ (* Routine: FT_RDLN *)
+ (* Purpose: Read the next line from the current source-file. *)
+ (* Interface: LINE - A source-line is returned in the form of a *)
+ (* line descriptor. *)
+ (* FT vars: SPACE *)
+ (*********************************************************************)
+ PROCEDURE FT_RDLN;
+ CONST
+ TAB = 8;
+ VAR
+ STR132: STRING132_;
+ INDEX,
+ K: INTEGER;
+
+ BEGIN
+ WITH LINE DO
+ BEGIN
+ INDENT := 0;
+ USED := 0;
+ POS_OPTION_MARKER := 0;
+ WITH STR132 DO
+ BEGIN
+ BODY := EMPTY_STRING_FIXED;
+ LENGTH := 0;
+ WHILE (NOT EOLN(CURR_IN_FILE)) AND
+ (LENGTH < STRING_FIXED_L) DO
+ BEGIN
+ LENGTH := LENGTH + 1;
+ READ (CURR_IN_FILE, BODY[LENGTH]);
+ END (*WHILE*);
+ READLN (CURR_IN_FILE);
+
+ (* Check spaces at beginning of string and calculate *)
+ (* INDENT. *)
+ INDEX := 1;
+ WHILE (INDEX < LENGTH) AND (BODY[INDEX] IN SPACE) DO
+ BEGIN
+ IF BODY[INDEX] = CHR(9) THEN
+ INDENT := INDENT + (TAB - (INDENT MOD TAB))
+ ELSE
+ INDENT := INDENT + 1;
+ INDEX := INDEX + 1;
+ END (*WHILE*);
+
+ LAST_LINE := LAST_LINE + 1;
+ FOR K := INDEX TO LENGTH DO
+ CHARS[K-INDEX+1] := BODY[K];
+
+ (* Remove spaces at the end of the line. *)
+ IF LENGTH > 0 THEN
+ BEGIN
+ USED := LENGTH-INDEX+1;
+ (*********************************************************************)
+ (* Modified 14/10/93 by Mark Kramer to solve an index out of bound *)
+ (* problem when bound checks are on. *)
+ (* WHILE (USED >0) AND (CHARS[USED] IN SPACE) DO *)
+ (* USED := USED-1; *)
+
+ WHILE (USED > 1) AND (CHARS[USED] IN SPACE) DO
+ USED := USED-1;
+ IF (USED = 1) AND (CHARS[USED] IN SPACE) THEN
+ USED := USED-1;
+
+ (* End of modification 14/10/93. *)
+ (*********************************************************************)
+ END (*IF*);
+ ID := LAST_LINE;
+ END (*WITH*);
+
+ (* Update the File Table. *)
+ IF FILE_TABLE[LAST_FILE].FIRST = 0 THEN
+ FILE_TABLE[LAST_FILE].FIRST := LAST_LINE;
+ FILE_TABLE[LAST_FILE].LAST := LAST_LINE;
+ END (*WITH*);
+ END (*FT_RDLN*);
+
+ (*********************************************************************)
+ (* Routine: FT_WRLN *)
+ (* Purpose: Write a line to the current output file. *)
+ (* Interface: LINE - The line to be written. *)
+ (* NR_BLANKS - The number of blanks leading the *)
+ (* first character of LINE. *)
+ (* DESTINATION - The destination of the line (screen, *)
+ (* output file, reportfile etc.) *)
+ (* REPORT_FILE - Report file for output. *)
+ (*********************************************************************)
+ PROCEDURE FT_WRLN;
+ VAR
+ INDEX: INTEGER;
+ NR_TOTAL_BLANKS: INTEGER;
+
+ BEGIN (*FT_WRLN*)
+ NR_TOTAL_BLANKS := LINE.INDENT + NR_BLANKS;
+ CASE DESTINATION OF
+ 0: BEGIN
+ FOR INDEX := 1 TO LINE.USED DO
+ WRITE (OUTPUT, LINE.CHARS[INDEX]);
+ WRITELN (OUTPUT);
+ END;
+ 1: BEGIN
+ WRLN_STRING (CURR_OUT_FILE, LINE.CHARS, LINE.USED,
+ NR_TOTAL_BLANKS);
+ END;
+ 2: BEGIN
+ FOR INDEX := 1 TO LINE.USED DO
+ WRITE (OUTPUT, LINE.CHARS[INDEX]);
+ WRITELN (OUTPUT);
+ END;
+ 3: BEGIN
+ WRLN_STRING (REPORT_FILE, LINE.CHARS, LINE.USED, 0);
+ END;
+ END (*CASE*);
+
+ END (*FT_WRLN*);
+
+ (*----------- Segment Table routines (ADT) -----------------------*)
+
+ (*********************************************************************)
+ (* Routine: ST_RD - Segment Table ReaD. *)
+ (* Purpose: Read a line from the SEGMENT_TABLE. *)
+ (* Interface: LINE - The line which is read. *)
+ (* INDEX - The position of the line in SEGMENT_TABLE. *)
+ (* ST vars: SEGMENT_TABLE. *)
+ (*********************************************************************)
+ PROCEDURE ST_RD (VAR LINE: LINE_DES_; INDEX: ST_INDEX_);
+ BEGIN
+
+ LINE := SEGMENT_TABLE.LINES[INDEX];
+ END (*ST_READ*);
+
+ (*********************************************************************)
+ (* Routine: ST_WR - Segment Table WRite. *)
+ (* Purpose: Write a line to the SEGMENT_TABLE. *)
+ (* Interface: LINE - The line which is written *)
+ (* INDEX- The position of the LINE. *)
+ (* ST var: SEGMENT_TABLE. *)
+ (*********************************************************************)
+ PROCEDURE ST_WR (LINE: LINE_DES_; INDEX: ST_INDEX_);
+ BEGIN
+
+ SEGMENT_TABLE.LINES[INDEX] := LINE;
+ END (*ST_WR*);
+
+ (*********************************************************************)
+ (* Routine: ST_ABS_SEG - Segment Table ABSolute SEGment *)
+ (* Purpose: To return the absolute line number of the first *)
+ (* line of the segment. *)
+ (* Interface: SEGMENT - Given segment *)
+ (* Function result - The absolute line number of the *)
+ (* first line of SEGMENT. *)
+ (* ST vars: SEGMENT_TABLE. *)
+ (*********************************************************************)
+ FUNCTION ST_ABS_SEG;
+ VAR
+ LINE: LINE_DES_;
+
+ BEGIN
+ IF SEGMENT.FIRST > 0 THEN
+ BEGIN
+ ST_RD (LINE, SEGMENT.FIRST);
+ ST_ABS_SEG := FT_ABS_LINE_NUMBER (LINE);
+ END (*IF*)
+ END (*ST_ABS_SEG*);
+
+ (*********************************************************************)
+ (* Routine: ST_GET_FILE_SPEC *)
+ (* Purpose: To return the file specification of the source file *)
+ (* of the segment. *)
+ (* Interface: SEGMENT - Given segment. *)
+ (* FILE_SPEC - The file specification. *)
+ (* ST vars: SEGMENT_TABLE. *)
+ (*********************************************************************)
+ PROCEDURE ST_GET_FILE_SPEC;
+ VAR
+ LINE: LINE_DES_;
+
+ BEGIN
+ ST_RD (LINE, SEGMENT.FIRST);
+ FT_GET_FILE_SPEC (LINE, FILE_SPEC);
+ END (*ST_GET_FILE_SPEC*);
+
+ (*********************************************************************)
+ (* Routine: ST_GET_INDENT *)
+ (* Purpose: Return the indentation of segment. *)
+ (* Interface: SEG - Segment to be investigated. *)
+ (* RETURNS - Indent value or error-code. *)
+ (*********************************************************************)
+ FUNCTION ST_GET_INDENT;
+ VAR
+ LINE: LINE_DES_;
+
+ BEGIN
+ ST_RD (LINE, SEG.FIRST);
+ ST_GET_INDENT := FT_GET_INDENT (LINE);
+ END (*ST_GET_INDENT*);
+
+ (*********************************************************************)
+ (* Routine: ST_GET_LINE *)
+ (* Purpose: Retrieves next line from the currently read segment. *)
+ (* Interface: LINE - Returned line. *)
+ (* ST vars: SEGMENT_TABLE, LAST_READ_SEG. *)
+ (*********************************************************************)
+ PROCEDURE ST_GET_LINE;
+ VAR
+ INDEX: ST_INDEX_;
+
+ BEGIN
+ WITH LAST_READ_SEG DO
+ BEGIN
+ IF ST_IS_EMPTY_SEG (LAST_SEG) THEN
+ BEGIN
+ (* ST_GET_LINE has not properly been prepared for reading.*)
+ WRITELN (OUTPUT, 'ST-GET-LN: ',
+ 'System Failure... Call maintenance.');
+ CLIP_STOP;
+ END
+ ELSE
+ BEGIN
+ INDEX := LAST_LINE + 1;
+ IF INDEX > LAST_SEG.LAST THEN
+ BEGIN
+ (* Segment exhausted. Return LINE with ID value 0. *)
+ LINE.ID := 0;
+ END
+ ELSE
+ BEGIN
+ (* Retrieve line at position INDEX from the ST and *)
+ (* update LAST_READ_SEG. *)
+ ST_RD (LINE, INDEX);
+ LAST_LINE := INDEX;
+ END (*IF*);
+ END (*IF*);
+ END (*WITH*);
+ END (*ST_GET_LINE*);
+
+ (*********************************************************************)
+ (* Routine: ST_GET_OPTION_LINE *)
+ (* Purpose: To retrieve the first line from a segment which *)
+ (* holds an option marker. *)
+ (* Interface: SEG - The segment *)
+ (* LINE - The first line holding an option marker *)
+ (* ST vars: SEGMENT_TABLE, LAST_READ_SEG. *)
+ (*********************************************************************)
+ PROCEDURE ST_GET_OPTION_LINE;
+ VAR
+ INDEX: ST_INDEX_;
+ POSITION: INTEGER;
+ AUX_LINE: LINE_DES_;
+
+ BEGIN
+ INDEX := SEG.FIRST;
+ POSITION := 0;
+ IF INDEX > 0 THEN
+ BEGIN
+ WHILE (POSITION =0) AND (INDEX <= SEG.LAST) DO
+ BEGIN
+ ST_RD (AUX_LINE, INDEX);
+ POSITION := FT_GET_POS_OPTION_MARKER (AUX_LINE);
+ IF POSITION =0 THEN
+ INDEX := INDEX + 1;
+ END (*WHILE*);
+ IF POSITION =0 THEN
+ LINE.ID := 0
+ ELSE
+ LINE := AUX_LINE;
+ WITH LAST_READ_SEG DO
+ BEGIN
+ LAST_SEG := SEG;
+ LAST_LINE := INDEX;
+ END (*WITH*);
+ END
+ ELSE
+ BEGIN
+ LAST_READ_SEG.LAST_SEG.FIRST := 0;
+ LAST_READ_SEG.LAST_SEG.LAST := 0;
+ LAST_READ_SEG.LAST_LINE := 0;
+ LINE.ID := 0;
+ END (*IF*);
+ END (*ST_GET_OPTION_LINE*);
+
+ (*********************************************************************)
+ (* Routine: ST_GET_SEG *)
+ (* Purpose: Retrieve the first line of a given segment from ST. *)
+ (* Interface: LINE - Returned line. *)
+ (* SEG - Segment to read from. *)
+ (* ST vars: SEGMENT_TABLE, LAST_READ_SEG. *)
+ (*********************************************************************)
+ PROCEDURE ST_GET_SEG;
+ BEGIN
+ IF ST_IS_EMPTY_SEG (SEG) THEN
+ BEGIN
+ (* Return virtual line and reset LAST_READ_SEG. *)
+ LINE.ID := 0;
+ ST_INIT_SEG (LAST_READ_SEG.LAST_SEG);
+ LAST_READ_SEG.LAST_LINE := 0;
+ END
+ ELSE
+ BEGIN
+ ST_RD (LINE, SEG.FIRST);
+ WITH LAST_READ_SEG DO
+ BEGIN
+ LAST_SEG := SEG;
+ LAST_LINE := SEG.FIRST;
+ END (*WITH*);
+ END (*IF*);
+ END (*ST_GET_SEG*);
+
+ (*********************************************************************)
+ (* Routine: ST_GET_SEG_RANGE - Segment Table SEGMENT RANGE *)
+ (* Purpose: To return the first and last relative line number of *)
+ (* a segment. *)
+ (* Interface: SEGMENT - Given segment. *)
+ (* FIRST - The line number of the first segment line. *)
+ (* LAST - The line number of the last segment line. *)
+ (* ST vars: SEGMENT_TABLE. *)
+ (*********************************************************************)
+ PROCEDURE ST_GET_SEG_RANGE;
+ VAR
+ LINE: LINE_DES_;
+
+ BEGIN
+ FIRST := 0;
+ LAST := 0;
+ IF SEGMENT.FIRST > 0 THEN
+ BEGIN
+ ST_RD (LINE, SEGMENT.FIRST);
+ FIRST := FT_GET_LINE_NUMBER (LINE);
+ ST_RD (LINE, SEGMENT.LAST);
+ LAST := FT_GET_LINE_NUMBER (LINE);
+ END (*IF*);
+ END (*ST_GET_SEG_RANGE*);
+
+ (*********************************************************************)
+ (* Routine: ST_INIT *)
+ (* Purpose: General initialization of the segment table. To be *)
+ (* invoked only once at the beginning of a run. *)
+ (* ST vars: SEGMENT_TABLE, LAST_READ_SEG. *)
+ (*********************************************************************)
+ PROCEDURE ST_INIT;
+ BEGIN
+
+ SEGMENT_TABLE.USED := 0;
+ ST_INIT_SEG (LAST_READ_SEG.LAST_SEG);
+ LAST_READ_SEG.LAST_LINE := 0;
+ END (*ST_INIT*);
+
+ (*********************************************************************)
+ (* Routine: ST_INIT_SEG *)
+ (* Purpose: To establish a new and empty segment. *)
+ (* Interface: SEG - the segment to initialize. *)
+ (*********************************************************************)
+ PROCEDURE ST_INIT_SEG;
+ BEGIN
+ SEG.FIRST := 0;
+ SEG.LAST := -1;
+ END (*ST_INIT_SEG*);
+
+ (*********************************************************************)
+ (* Routine: ST_IS_EMPTY_SEG *)
+ (* Purpose: To examine if a segment is empty or not. *)
+ (* Interface: SEG - Segment to be examined. *)
+ (*********************************************************************)
+ FUNCTION ST_IS_EMPTY_SEG;
+ BEGIN
+ ST_IS_EMPTY_SEG := (ST_NUMBER_OF_LINES (SEG) <= 0);
+ END (*ST_IS_EMPTY_SEG*);
+
+ (*********************************************************************)
+ (* Routine: ST_NUMBER_OF_LINES *)
+ (* Purpose: To calculate the number of lines in a segment. *)
+ (* Interface: SEG - Segment to be investigated. *)
+ (* RETURNS - Number of lines contained by segment. *)
+ (*********************************************************************)
+ FUNCTION ST_NUMBER_OF_LINES;
+ BEGIN
+ WITH SEG DO
+ BEGIN
+ IF (FIRST >= 0) AND (LAST >= FIRST -1) THEN
+ BEGIN
+ ST_NUMBER_OF_LINES := LAST - FIRST + 1;
+ END
+ ELSE
+ BEGIN
+ WRITELN (OUTPUT, 'ST-NUMBER-OF-LINES: ',
+ 'System Failure... Call maintenance.');
+ CLIP_STOP;
+ END (*IF*);
+ END (*WITH*);
+ END (*ST_NUMBER_OF_LINES*);
+
+ (*********************************************************************)
+ (* Routine: ST_PUT_LINE *)
+ (* Purpose: Add a source line to the last segment in the table. *)
+ (* Interface: LINE - Source line to write. *)
+ (* SEG - Segment to write to. *)
+ (* ST vars: SEGMENT_TABLE. *)
+ (*********************************************************************)
+ PROCEDURE ST_PUT_LINE;
+ BEGIN
+ IF SEGMENT_TABLE.USED < ST_SIZE THEN
+ BEGIN
+ WITH SEGMENT_TABLE DO
+ BEGIN
+ (* Abort if the ST has become internally inconsistent. *)
+ (* Othewise add line to the table. *)
+ IF SEG.LAST <> USED THEN
+ BEGIN
+ WRITELN (OUTPUT, 'ST-PUT-LN: ',
+ 'System Failure... Call maintenance.');
+ CLIP_STOP;
+ END
+ ELSE
+ BEGIN
+ USED := USED + 1;
+ ST_WR (LINE, USED);
+ SEG.LAST := USED;
+ END (*IF*)
+ END (*WITH*);
+ END
+ ELSE
+ BEGIN
+ (* Segment Table to small for this application. *)
+ WRITELN (OUTPUT, 'ST-PUT-LN: ',
+ 'Parameter Failure... Call maintenance.');
+ CLIP_STOP;
+ END (*IF*);
+ END (*ST_PUT_LINE*);
+
+ (*********************************************************************)
+ (* Routine: ST_PUT_SEG *)
+ (* Purpose: Start a new segment in ST by writing its first line. *)
+ (* Interface: LINE - The line to be written. *)
+ (* SEG - The returned segment. *)
+ (* ST vars: SEGMENT_TABLE, LAST_READ_SEG. *)
+ (*********************************************************************)
+ PROCEDURE ST_PUT_SEG;
+ BEGIN
+ IF SEGMENT_TABLE.USED < ST_SIZE THEN
+ BEGIN
+ WITH SEGMENT_TABLE DO
+ BEGIN
+ USED := USED + 1;
+ ST_WR (LINE, USED);
+ SEG.FIRST := USED;
+ SEG.LAST := USED;
+ END (*WITH*);
+ END
+ ELSE
+ BEGIN
+ WRITELN (OUTPUT, 'ST-PUT-SEG: ',
+ 'Parameter Failure... Call maintenance.');
+ CLIP_STOP;
+ END (*IF*);
+ END (*ST_PUT_SEG*);
+
+ (*********************************************************************)
+ (* Routine: ST_FINIT - FINIsh Segment Table *)
+ (* Purpose: Remove the segment-file from the directory. *)
+ (* Interface: - *)
+ (* ST vars: SEGMENT_TABLE. *)
+ (*********************************************************************)
+ PROCEDURE ST_FINIT;
+ BEGIN
+ END (*ST_REMOVE*);
+
+ (*********************************************************************)
+ (* Routine: ST_SEG_WIDTH - Segment Table SEGment USED. *)
+ (* Purpose: Return the horizontal length of a segment. *)
+ (* Interface: SEGMENT - Given segment. *)
+ (* RETURNS - Length of the given segment. *)
+ (* ST vars: SEGMENT_TABLE. *)
+ (*********************************************************************)
+ FUNCTION ST_SEG_WIDTH;
+ VAR
+ LINE: LINE_DES_;
+
+ BEGIN
+ ST_RD (LINE, SEG.FIRST);
+ ST_SEG_WIDTH := FT_GET_LINE_LENGTH (LINE);
+ END;
+
+ (*********************************************************************)
+ (* Routine: ST_WRITE_SEG *)
+ (* Purpose: To write a segment to an output file. *)
+ (* Interface: SEG - Segment to be written. *)
+ (* BLANKS - Leading blanks for every line of the *)
+ (* segment. *)
+ (* DESTINATION - Indicates the destination of the *)
+ (* writing action. *)
+ (* REPORT_FILE - Report file for output. *)
+ (*********************************************************************)
+ PROCEDURE ST_WRITE_SEG;
+ VAR
+ K: ST_INDEX_;
+ LINE: LINE_DES_;
+
+ BEGIN
+ IF SEG.FIRST >0 THEN
+ FOR K := SEG.FIRST TO SEG.LAST DO
+ BEGIN
+ ST_RD (LINE, K);
+ FT_WRLN (LINE, BLANKS, DESTINATION);
+ END (*FOR*);
+ END (*ST_WRITE_SEG*);
+
+ (*----------- String Pool routines (ADT) -------------------------*)
+
+ (*********************************************************************)
+ (* Routine: SP_ADD_CHAR *)
+ (* Purpose: Add character to currently written string. *)
+ (* Interface: CH - Character to be added. *)
+ (* STR - String to add character to. *)
+ (*********************************************************************)
+ PROCEDURE SP_ADD_CHAR;
+ BEGIN
+ WITH STRING_POOL^ DO
+ IF USED < SP_SIZE THEN
+ BEGIN
+ (* SP has enough space left to accept another character. *)
+ USED := USED + 1;
+ CHARS[USED] := CH;
+ IF STR.FIRST =0 THEN
+ BEGIN
+ (* First character of a new string. *)
+ STR.FIRST := USED;
+ STR.LAST := USED;
+ END
+ ELSE
+ BEGIN
+ (* The string already exists. Abort if this string is *)
+ (* not physically the last one of the SP. *)
+ IF STR.LAST <> USED - 1 THEN
+ BEGIN
+ WRITELN (OUTPUT, 'SP-ADD-CHAR: ',
+ 'System Failure... Call maintenance.');
+ CLIP_STOP;
+ END (*IF*);
+ STR.LAST := USED;
+ END (*IF*);
+ END
+ ELSE
+ BEGIN
+ WRITELN (OUTPUT, 'SP-ADD-CHAR: ',
+ 'Parameter Failure... Call maintenance.');
+ CLIP_STOP;
+ END (*IF.WITH*);
+ END (*SP_ADD_CHAR*);
+
+ (*********************************************************************)
+ (* Routine: SP_CONC_STR *)
+ (* Purpose: Concatenation of neighbouring strings. *)
+ (* Interface: MASTER - Recieving string. *)
+ (* SLAVE - Concatented string *)
+ (*********************************************************************)
+ PROCEDURE SP_CONC_STR;
+ BEGIN
+ IF MASTER.FIRST =0 THEN
+ (* An empty MASTER becomes a SLAVE... *)
+ MASTER := SLAVE
+ ELSE IF SLAVE.FIRST =0 THEN
+ (* but an empty SLAVE does not bother its MASTER. *)
+ (* DO NOTHING... *)
+ ELSE IF MASTER.FIRST <>0 THEN
+ BEGIN
+ (* Concatenate only if SLAVE follows MASTER immediately. *)
+ IF MASTER.LAST + 1 = SLAVE.FIRST THEN
+ MASTER.LAST := SLAVE.LAST
+ ELSE
+ BEGIN
+ WRITELN (OUTPUT, 'SP-CONC-STR: ',
+ 'System Failure... Call maintenance.');
+ CLIP_STOP;
+ END (*IF*);
+ END (*IF*);
+ END (*SP_CONC_STR*);
+
+ (*********************************************************************)
+ (* Routine: SP_EQ *)
+ (* Purpose: To decide if two strings are equal. *)
+ (* Interface: STR1: First operand. *)
+ (* STR2: Second operand. *)
+ (* RETURNS: TRUE if both operands are equal. *)
+ (* SP vars: STRING_POOL. *)
+ (*********************************************************************)
+ FUNCTION SP_EQ;
+ VAR
+ CONTINUE: BOOLEAN;
+ INDEX: INTEGER;
+ STR_L: INTEGER;
+
+ BEGIN
+ STR_L := SP_LENGTH_STR (STR1);
+ IF STR_L <> SP_LENGTH_STR (STR2) THEN
+ SP_EQ := FALSE
+ ELSE
+ BEGIN
+ INDEX := 1;
+ CONTINUE := TRUE;
+ SP_EQ := TRUE;
+ WHILE (CONTINUE) AND (INDEX <= STR_L) DO
+ BEGIN
+ IF SP_GET_CHAR (INDEX, STR1)
+ <> SP_GET_CHAR (INDEX, STR2) THEN
+ BEGIN
+ CONTINUE := FALSE;
+ SP_EQ := FALSE;
+ END (*IF*);
+ INDEX := INDEX + 1;
+ END (*WHILE*);
+ END (*IF*);
+ END (*SP_EQ*);
+
+ (*********************************************************************)
+ (* Routine: SP_EXTR_STR *)
+ (* Purpose: To extract a sequence of characters out of the SP *)
+ (* and to store these characters in a packed array. *)
+ (* Interface: STR - Descriptor of the wanted string. *)
+ (* STR132 - The extracted characters. *)
+ (*********************************************************************)
+ PROCEDURE SP_EXTR_STR;
+ VAR
+ I: INTEGER;
+ K: SP_INDEX_;
+
+ BEGIN
+ IF STR.FIRST= 0 THEN
+ BEGIN
+ STR132.LENGTH := 0;
+ STR132.BODY := EMPTY_STRING_FIXED;
+ END
+ ELSE IF STR.LAST <= STRING_POOL^.USED THEN
+ BEGIN
+ STR132.BODY := EMPTY_STRING_FIXED;
+ I := 0;
+ FOR K := STR.FIRST TO STR.LAST DO
+ BEGIN
+ I := I + 1;
+ STR132.BODY[I] := STRING_POOL^.CHARS[K];
+ END;
+ STR132.LENGTH := I;
+ END
+ ELSE
+ BEGIN
+ WRITELN (OUTPUT, 'SP_EXTR_STR: ',
+ 'System Failure... Call maintenance.');
+ CLIP_STOP;
+ END (*IF.IF*);
+ END;
+
+ (*********************************************************************)
+ (* Routine: SP_GET_CHAR *)
+ (* Purpose: Get character from given position of a string. *)
+ (* Interface: INDEX - Index of the wanted character. *)
+ (* STR - String to be searched. *)
+ (* RETURNS - Wanted character. *)
+ (* SP vars: STRING_POOL. *)
+ (* MOD1: EWvA (18/12/91) ivm probleem met SCAN_LINE (7). *)
+ (*********************************************************************)
+ FUNCTION SP_GET_CHAR;
+ BEGIN
+ WITH STR DO
+ BEGIN
+ (* Check if value of INDEX is within correct range. *)
+ IF ((LAST - FIRST +1) < INDEX)
+ OR (INDEX <= 0) THEN
+ BEGIN
+ (* MOD1: WRITELN (OUTPUT, 'SP-GET_CHAR: ', *)
+ (* MOD1: 'System Failure... Call maintenance.'); *)
+ (* MOD1: CLIP_STOP; *)
+ SP_GET_CHAR := CHR(0); (* MOD1: *)
+ END
+ ELSE
+ (* INDEX and STR are sound. Proceed to retrieve *)
+ (* character. *)
+ SP_GET_CHAR := STRING_POOL^.CHARS [FIRST + INDEX -1];
+ END (*IF*)
+ END (*SP_GET_CHAR*);
+
+ (*********************************************************************)
+ (* Routine: SP_INIT *)
+ (* Purpose: General initialization of the String Pool. It is *)
+ (* only activated once at the start of an CLIP-run. *)
+ (*********************************************************************)
+ PROCEDURE SP_INIT;
+ BEGIN
+ NEW (STRING_POOL);
+ STRING_POOL^.USED := 0;
+ END (*SP_INIT*);
+
+ (*********************************************************************)
+ (* Routine: SP_INIT_STR *)
+ (* Purpose: Initialize a string *)
+ (* Interface: STR - the string to be initialized. *)
+ (*********************************************************************)
+ PROCEDURE SP_INIT_STR;
+ BEGIN
+ STR.FIRST := 0;
+ STR.LAST := -1;
+ END (*SP_INIT_STR*);
+
+ (*********************************************************************)
+ (* Routine: SP_IS_EMPTY_STR *)
+ (* Purpose: The function examines if a string is empty or not. *)
+ (* Interface: STR - string to be examined. *)
+ (* RETURNS - TRUE if string is empty. *)
+ (*********************************************************************)
+ FUNCTION SP_IS_EMPTY_STR;
+ BEGIN
+ SP_IS_EMPTY_STR := (SP_LENGTH_STR(STR) = 0);
+ END (*SP_IS_EMPTY_STR*);
+
+ (*********************************************************************)
+ (* Routine: SP_LENGTH_STR *)
+ (* Purpose: To calculate the length of a string. *)
+ (* Interface: STR: Given string. *)
+ (* RESULT: Length of STRING. *)
+ (*********************************************************************)
+ FUNCTION SP_LENGTH_STR;
+ BEGIN
+ SP_LENGTH_STR := STR.LAST - STR.FIRST + 1;
+ END (*SP_LENGTH_STR*);
+
+ (*********************************************************************)
+ (* Routine: SP_ADD_BUFFER *)
+ (* Purpose: Add the buffer to a string. *)
+ (* Interface: STR - String to which the buffer is added. *)
+ (* SP vars: BUFFER *)
+ (*********************************************************************)
+ PROCEDURE SP_ADD_BUFFER;
+ VAR
+ I : INTEGER;
+
+ BEGIN
+ SP_INIT_STR (STR);
+ FOR I := 1 TO BUFFER.LENGTH DO
+ SP_ADD_CHAR (BUFFER.BODY[I], STR);
+ END (*SP_ADD_BUFFER*);
+
+ (*********************************************************************)
+ (* Routine: SP_ADD_BUFFER_CHAR *)
+ (* Purpose: Add a character to the buffer. *)
+ (* Interface: CH - Character to be added. *)
+ (* SP vars: BUFFER *)
+ (*********************************************************************)
+ PROCEDURE SP_ADD_BUFFER_CHAR;
+ BEGIN
+ WITH BUFFER DO
+ IF LENGTH < 132 THEN
+ BEGIN
+ LENGTH := LENGTH + 1;
+ BODY[LENGTH] := CH;
+ END
+ ELSE
+ BEGIN
+ WRITELN (OUTPUT,'SP_ADD_BUFFER_CHAR system failure...',
+ 'Call maintenance');
+ CLIP_STOP;
+ END (*IF*);
+ END (*SP_ADD_BUFFER_CHAR*);
+
+ (*********************************************************************)
+ (* Routine: SP_GET_BUFFER_CHAR *)
+ (* Purpose: Get a character from the buffer. *)
+ (* Interface: INDEX - Index of the wanted character. *)
+ (* SP_GET_BUFFER_CHAR - Character to get. *)
+ (* SP vars: BUFFER *)
+ (*********************************************************************)
+ FUNCTION SP_GET_BUFFER_CHAR;
+ BEGIN
+ IF INDEX IN [1..BUFFER.LENGTH] THEN
+ SP_GET_BUFFER_CHAR := BUFFER.BODY[INDEX]
+ ELSE
+ SP_GET_BUFFER_CHAR := CHR(0);
+ END (*SP_GET_BUFFER_CHAR*);
+
+ (*********************************************************************)
+ (* Routine: SP_INIT_BUFFER *)
+ (* Purpose: Initialize the buffer by making it empty. *)
+ (* SP vars: BUFFER *)
+ (*********************************************************************)
+ PROCEDURE SP_INIT_BUFFER;
+ BEGIN
+ BUFFER.LENGTH := 0;
+ END (*SP_INIT_BUFFER*);
+
+ (*----------- DIAGNOSTic routines (ADT) --------------------------*)
+
+ (*********************************************************************)
+ (* Routine: DIAGNOST_INIT - INITialize the variables of DIAGNOST. *)
+ (* Purpose: Initialize the global variables of procdure DIAG. *)
+ (* Interface: - *)
+ (* DIAGNOST vars: DIAG_TBL, NO_MESSAGES, NR_MSG. *)
+ (*********************************************************************)
+ PROCEDURE DIAGNOST_INIT;
+
+ VAR
+ K: INTEGER;
+ TBL_FILE: TEXT;
+ ERROR_CODE: INTEGER;
+ DUMMY_ERROR: INTEGER;
+ DUMMY_FILE_OK : BOOLEAN;
+ DUMMY_ERROR_MSG : ERROR_MSG_;
+ AUX_STRING_8: PACKED ARRAY[1..8] OF CHAR;
+ TBL_FILE_NAME: FILE_SPEC_;
+ MESS_CNT: INTEGER;
+ CH : CHAR;
+
+
+ BEGIN
+ (******* DIAGNOST_INIT body *******)
+ NO_MESSAGES := FALSE;
+ NR_MSG := 0;
+ FOR K := 1 TO MAX_NR_MESS DO
+ DIAG_TBL[K].MESS_LOC := ' ';
+
+ (* Clear the variable which is to hold the specification of the *)
+ (* error message file. *)
+ TBL_FILE_NAME.BODY := EMPTY_STRING_FIXED;
+ TBL_FILE_NAME.LENGTH := 0;
+
+ (******* DIAGNOST_INIT Add environment (TP) (#Opt) *******)
+
+ (* Write name of message file to TBL_FLE_NAME. The length must *)
+ (* be exactly 8 characters. *)
+ AUX_STRING_8 := 'CLIP_MSG';
+ WITH TBL_FILE_NAME DO
+ BEGIN
+ FOR K := 1 TO 8 DO
+ BODY[LENGTH+K] := AUX_STRING_8[K];
+ LENGTH := LENGTH + 8;
+ END (* WITH *);
+
+ (******* DIAGNOST_INIT Add extension (TP) (#Opt) *******)
+
+ EXT_FILE_PREP (TBL_FILE, TBL_FILE_NAME, INSP_MODE, DUMMY_FILE_OK,
+ ERROR_CODE, DUMMY_ERROR_MSG);
+ IF ERROR_CODE <> 0 THEN
+ BEGIN
+ NO_MESSAGES := TRUE;
+ WRITELN ('Error message file (logical name: CLIP_MSG) not found.');
+ WRITELN ('CLiP will continue without diagnostics');
+ WRITELN;
+ END
+ ELSE
+ BEGIN
+ NO_MESSAGES := FALSE;
+
+ (********************* DIAGNOST_INIT (1) ***********************)
+ (** Initialize DIAG_TBL by reading the TBL_FILE. **)
+ MESS_CNT := 1;
+ WHILE NOT EOF (TBL_FILE) DO
+ BEGIN
+ WITH DIAG_TBL[MESS_CNT] DO
+ BEGIN
+ (********************* DIAGNOST_INIT (1.1) *****************)
+ (** Initialize DIAG_TBL[MESS_CNT].MESS_LOC. **)
+ READ (TBL_FILE, CH);
+ READ (TBL_FILE, CH);
+ READ (TBL_FILE, CH);
+ K := 1;
+ WHILE CH <> ':' DO
+ BEGIN
+ MESS_LOC[K] := CH;
+ READ (TBL_FILE, CH);
+ K := K + 1;
+ END (*WHILE*);
+ (***************** End of DIAGNOST_INIT (1.1) **************)
+
+ (********************* DIAGNOST_INIT (1.2) *****************)
+ (** Initialize DIAG_TBL[MESS_CNT].MESSAGE. **)
+ MESSAGE := EMPTY_STRING_FIXED;
+ READ (TBL_FILE, CH);
+ MESS_L := 1;
+ WHILE CH <> '%' DO
+ BEGIN
+ IF EOLN (TBL_FILE) THEN
+ READLN (TBL_FILE);
+ READ (TBL_FILE, CH);
+ IF CH <> '%' THEN
+ BEGIN
+ MESSAGE[MESS_L] := CH;
+ MESS_L := MESS_L + 1;
+ END (*IF*);
+ END (*WHILE*);
+ (***************** End of DIAGNOST_INIT (1.2) **************)
+
+ READLN (TBL_FILE);
+ END (*WITH*);
+ MESS_CNT := MESS_CNT + 1;
+ END (*WHILE*);
+ (***************** End of DIAGNOST_INIT (1) ********************)
+
+ (* Close the TBL_FILE and ignore any errors that may occur. *)
+ EXT_FILE_CLOSE (TBL_FILE, DUMMY_ERROR);
+ END (*IF*);
+ (***************** End of DIAGNOST_INIT body *******************)
+
+ END (*DIAGNOST_INIT*);
+
+ (*********************************************************************)
+ (* Routine: DIAG - Issue a DIAGnostic message. *)
+ (* Purpose: Handling of all diagnostics by a message to the *)
+ (* terminal. *)
+ (* Interface: DIAG_TBL - Internal table with messages. *)
+ (* MSG_TBL - Internal table with detected errors. *)
+ (* NR_MSG - Counting error messages in MSG_TBL. *)
+ (* SEV - Severity of the diagnostic. *)
+ (* LOC - Program location which detected the *)
+ (* problem. *)
+ (* SOURCE_LINE - Source line causing the problem. *)
+ (* SEGMENT - Segment causing the problem. *)
+ (* STRING132 - Keyword(s) indicating the specific *)
+ (* diagnostic. *)
+ (*********************************************************************)
+ PROCEDURE DIAG (SEV: SEV_CODE_;
+ LOC: LOC_SPEC_;
+ SOURCE_LINE: LINE_DES_;
+ SEGMENT: SEGMENT_DES_;
+ STRING132: STRING132_);
+
+ VAR
+ K : INTEGER;
+
+ BEGIN
+ (************************* DIAG (body) *****************************)
+ IF NOT NO_MESSAGES THEN
+ BEGIN
+ IF NR_MSG < MAX_ERROR THEN
+ BEGIN
+ NR_MSG := NR_MSG + 1;
+
+ (********************* DIAG (1) ************************)
+ (** Store the actual parameters passed to DIAG in **)
+ (** MSG_TBL[NR_MSG]. **)
+ MSG_TBL[NR_MSG].SEV := SEV;
+ MSG_TBL[NR_MSG].LOC := LOC;
+ MSG_TBL[NR_MSG].STRING132 := STRING132;
+ MSG_TBL[NR_MSG].SOURCE_LINE := SOURCE_LINE;
+ MSG_TBL[NR_MSG].SEGMENT := SEGMENT;
+ IF NOT ST_IS_EMPTY_SEG (SEGMENT) THEN
+ MSG_TBL[NR_MSG].LINE_ABS := ST_ABS_SEG (SEGMENT)
+ ELSE IF FT_GET_LINE_LENGTH (SOURCE_LINE) > 0 THEN
+ MSG_TBL[NR_MSG].LINE_ABS :=
+ FT_ABS_LINE_NUMBER (SOURCE_LINE)
+ ELSE
+ BEGIN
+ WRITELN ('Internal error DIAG (1)... Call maintenance');
+ WRITELN ('Troubles caused by an error detected by: ');
+ FOR K := 1 TO LOC_SPEC_L DO
+ WRITE (LOC[K]);
+ NR_MSG := NR_MSG - 1;
+ END (*IF.IF*);
+ (******************* End of DIAG (1) *******************)
+ END
+ ELSE IF NR_MSG = MAX_ERROR THEN
+ BEGIN
+ WRITELN (OUTPUT, 'CLIP detected more then ',
+ NR_MSG,' errors');
+ WRITELN (OUTPUT, 'Only first ', NR_MSG,
+ ' diagnostic messages will be generated');
+ NR_MSG := NR_MSG + 1;
+ END
+ ELSE IF NR_MSG > MAX_ERROR THEN
+ BEGIN
+ (* Nothing remains to be done here. *)
+ END (*IF.IF.IF*);
+ END (*IF*);
+ (********************* End of DIAG (body) **********************)
+
+ END (*DIAG*);
+
+ (*********************************************************************)
+ (* Routine: DIAGNOST_EXIT - Exit the diagnostic table. *)
+ (* Purpose: Generate the cumulated list of diagnostics to the *)
+ (* termnal and, if specified, to a report file. *)
+ (* Interface: DIAGNOST module variables *)
+ (* REPORT_FILE - From CLIP_CDL *)
+ (* REPORT_OK - From CLIP_CDL *)
+ (* RUN_INFO variables *)
+ (*********************************************************************)
+ PROCEDURE DIAGNOST_EXIT;
+
+ VAR
+ I, K: INTEGER;
+ MESS_INDEX: INTEGER;
+ FILE_SPEC: FILE_SPEC_;
+ FIRST, LAST: INTEGER;
+ TMP_STRING_8: PACKED ARRAY [1..8] OF CHAR;
+ J: INTEGER;
+
+ BEGIN
+ (********************* DIAGNOST_EXIT (body) ************************)
+ IF NOT NO_MESSAGES THEN
+ BEGIN
+ IF NR_MSG > MAX_ERROR THEN
+ NR_MSG := MAX_ERROR;
+
+ (***************** DIAGNOST_EXIT (1) ***************************)
+ (** Sort MSG_TBL by absolute line numbers. **)
+ FOR K := NR_MSG DOWNTO 1 DO
+ BEGIN
+ FOR I := 1 TO K-1 DO
+ BEGIN
+ IF MSG_TBL[I].LINE_ABS > MSG_TBL[I+1].LINE_ABS THEN
+ BEGIN
+ MSG_TBL[MAX_ERROR+1] := MSG_TBL[I];
+ MSG_TBL[I] := MSG_TBL[I+1];
+ MSG_TBL[I+1] := MSG_TBL[MAX_ERROR+1];
+ END (*IF*);
+ END (*FOR*);
+ END (*FOR*);
+ (***************** End of DIAGNOST_EXIT (1) ********************)
+
+ (* Write the opening lines of the report(s). *)
+ IF NR_MSG > 0 THEN
+ BEGIN
+ WRITELN (OUTPUT, '============================ ',
+ 'Diagnostics ===============================');
+ IF REPORT_OK THEN
+ WRITELN (REPORT_FILE, '============================ ',
+ 'Diagnostics ===============================');
+ END (* IF *);
+
+ (***************** DIAGNOST_EXIT (2) ***************************)
+ (** Generate messages from MSG_TBL and DIAG_TBL to OUTPUT and **)
+ (** also to REPORT_FILE if REPORT_OK is raised. Write a **)
+ (** diagnostic in case of trouble, but do not abort. **)
+ FOR K := 1 TO NR_MSG DO
+ BEGIN
+ MESS_INDEX := 0;
+
+ (***************** DIAGNOST_EXIT (2.1) *************************)
+ (** Search DIAG_TBL for MSG_TBL[K].LOC. Store the index in **)
+ (** MESS_INDEX. **)
+ FOR I := 1 TO MAX_NR_MESS DO
+ BEGIN
+ IF DIAG_TBL[I].MESS_LOC = MSG_TBL[K].LOC THEN
+ MESS_INDEX := I;
+ END (*FOR*);
+ (**************** End of DIAGNOST_EXIT (2.1) *******************)
+
+ IF MESS_INDEX = 0 THEN
+ BEGIN
+ WRITELN (OUTPUT,
+ 'system error DIAGNOST_EXIT ..... call maintenance');
+ WRITELN ('Not able to generate diagnostic message.');
+ WRITE ('DIAGNOST_EXIT was called by : ');
+ FOR I := 1 TO LOC_SPEC_L DO
+ WRITE (MSG_TBL[K].LOC[I]);
+
+ IF REPORT_OK THEN
+ BEGIN
+ WRITELN (REPORT_FILE,
+ 'system error DIAGNOST_EXIT ..... call maintenance');
+ WRITELN (REPORT_FILE,
+ 'Not able to generate diagnostic message.');
+ WRITE (REPORT_FILE, 'DIAGNOST_EXIT was called by : ');
+ FOR I := 1 TO LOC_SPEC_L DO
+ WRITE (REPORT_FILE, MSG_TBL[K].LOC[I]);
+ END (* IF *);
+ END
+ ELSE
+ BEGIN
+ (***************** DIAGNOST_EXIT (2.2) *********************)
+ (** Generate diagnostic using information stored in MSG_- **)
+ (** TBL[K] and DIAG_TBL[MESS_INDEX]. **)
+ WITH MSG_TBL[K] DO
+ BEGIN
+ CASE SEV OF
+ WARN:
+ TMP_STRING_8 := 'Warning ';
+ ERR:
+ TMP_STRING_8 := 'Error ';
+ FAIL:
+ TMP_STRING_8 := 'Failure ';
+ DUMP:
+ CLIP_STOP;
+ END (*CASE*);
+ WRITE (OUTPUT, TMP_STRING_8);
+ IF REPORT_OK THEN
+ WRITE (REPORT_FILE, TMP_STRING_8);
+
+ IF NOT ST_IS_EMPTY_SEG (SEGMENT) THEN
+ BEGIN
+ ST_GET_SEG_RANGE (SEGMENT, FIRST, LAST);
+ ST_GET_FILE_SPEC (SEGMENT, FILE_SPEC);
+ WRITE (' between the lines ', FIRST:2, ' and ',
+ LAST:2, ' of file: ' );
+ FOR I := 1 TO FILE_SPEC.LENGTH DO
+ WRITE (FILE_SPEC.BODY[I]);
+ WRITELN;
+ WRITELN ('Source lines:');
+ WRITELN;
+
+ (* Write segement to OUTPUT. *)
+ ST_WRITE_SEG (SEGMENT, 0, 0);
+ WRITELN;
+
+ IF REPORT_OK THEN
+ BEGIN
+ WRITE (REPORT_FILE, ' between the lines ', FIRST:2,
+ ' and ', LAST:2, ' of file: ' );
+ FOR I := 1 TO FILE_SPEC.LENGTH DO
+ WRITE (REPORT_FILE, FILE_SPEC.BODY[I]);
+ WRITELN (REPORT_FILE);
+ WRITELN (REPORT_FILE, 'Source lines:');
+ WRITELN (REPORT_FILE);
+
+ (* Write segement to file variable REPORT_FILE of FT *)
+ (* (see also DIAGNOST_EXIT (2)). *)
+ ST_WRITE_SEG (SEGMENT, 0, 3);
+ WRITELN (REPORT_FILE);
+ END (* IF *);
+ END
+ ELSE IF FT_GET_LINE_LENGTH (SOURCE_LINE) > 0 THEN
+ BEGIN
+ FT_GET_FILE_SPEC (SOURCE_LINE, FILE_SPEC);
+
+ WRITE ('in line ', FT_GET_LINE_NUMBER (SOURCE_LINE):4);
+ WRITE (' of file :');
+ FOR I := 1 TO FILE_SPEC.LENGTH DO
+ WRITE (FILE_SPEC.BODY[I]);
+ WRITELN;
+
+ (* Write line to OUTPUT. *)
+ FT_WRLN (SOURCE_LINE, 0, 0);
+
+ IF REPORT_OK THEN
+ BEGIN
+ WRITE (REPORT_FILE, 'in line ',
+ FT_GET_LINE_NUMBER (SOURCE_LINE):4);
+ WRITE (REPORT_FILE, ' of file :');
+ FOR I := 1 TO FILE_SPEC.LENGTH DO
+ WRITE (REPORT_FILE, FILE_SPEC.BODY[I]);
+ WRITELN (REPORT_FILE);
+
+ (* Write LINE to file variable REPORT_FILE of FT *)
+ (* (see also DIAGNOST_EXIT (2)). *)
+ FT_WRLN (SOURCE_LINE, 0, 3);
+ END (* IF *);
+ END
+ ELSE
+ BEGIN
+ WRITELN ('Internal error DIAG... Call maintenance');
+ IF REPORT_OK THEN
+ WRITELN (REPORT_FILE,
+ 'Internal error DIAG... Call maintenance');
+ END (*IF.IF*);
+ WITH DIAG_TBL[MESS_INDEX] DO
+ BEGIN
+ FOR I := 1 TO MESS_L DO
+ BEGIN
+ IF MESSAGE[I] <> '@' THEN
+ BEGIN
+ WRITE (MESSAGE[I]);
+ IF REPORT_OK THEN
+ WRITE (REPORT_FILE, MESSAGE[I]);
+ END
+ ELSE
+ BEGIN
+ FOR J := 1 TO STRING132.LENGTH DO
+ BEGIN
+ WRITE (STRING132.BODY[J]);
+ IF REPORT_OK THEN
+ WRITE (REPORT_FILE, STRING132.BODY[J]);
+ END (*FOR*);
+ END (*IF*);
+ END (*FOR*);
+ END(*WITH*);
+ END (*WITH*);
+ (**************** End of DIAGNOST_EXIT (2.2) ***************)
+ END (*IF*);
+ WRITELN; WRITELN;
+ WRITELN ('------------------------------------',
+ '------------------------------------');
+
+ IF REPORT_OK THEN
+ BEGIN
+ WRITELN (REPORT_FILE); WRITELN (REPORT_FILE);
+ WRITELN (REPORT_FILE, '------------------------------------',
+ '------------------------------------');
+ END (* IF *);
+ END (*FOR*);
+ (**************** End of DIAGNOST_EXIT (2) *********************)
+
+ (* Write closing remarks of the report(s). Don't forget to close *)
+ (* the REPORT_FILE if it has been used. Ignore closing problems. *)
+ IF NR_MSG > 0 THEN
+ BEGIN
+ WRITE (OUTPUT, 'Diagnostics TOTAL of: ',NR_MSG:1);
+ IF REPORT_OK THEN
+ WRITE (REPORT_FILE, 'Diagnostics TOTAL of: ',NR_MSG:1);
+
+ (* Print different text to distinguish between a for single *)
+ (* error situation and a multiple error situation. *)
+ IF NR_MSG = 1 THEN
+ BEGIN
+ WRITELN (' error or warning detected.');
+ IF REPORT_OK THEN
+ WRITELN (REPORT_FILE, ' error or warning detected.');
+ END
+ ELSE
+ BEGIN
+ WRITELN (' errors or warnings detected.');
+ IF REPORT_OK THEN
+ WRITELN (REPORT_FILE, ' errors or warnings detected.');
+ END (* IF *);
+
+ WRITELN;
+ WRITELN ('============================ End of ',
+ 'diagnostics ========================');
+ WRITELN;
+ IF REPORT_OK THEN
+ BEGIN
+ WRITELN (REPORT_FILE);
+ WRITELN (REPORT_FILE,
+ '============================ End of ',
+ 'diagnostics ========================');
+ WRITELN (REPORT_FILE);
+ END (* IF *);
+ END (*IF*);
+ END (*IF*);
+ (**************** End of DIAGNOST_EXIT (body) **********************)
+
+ END (*DIAG*);
+
+
+ (*----------- Main components of the CLiP system -----------------*)
+
+
+ (*********************************************************************)
+ (* Routine: SCN_LINE_INIT - INITialize variables of SCN_LINE. *)
+ (* Purpose: Initialize the global variables of procedure SCAN_LINE.*)
+ (* Interface: - *)
+ (* SCN_LINE vars: ALLOWED *)
+ (*********************************************************************)
+ PROCEDURE SCN_LINE_INIT;
+ BEGIN
+ ALLOWED := ['A'..'Z', 'a'..'z', '0'..'9','.'];
+ END;
+
+
+ (*********************************************************************)
+ (* Routine: SCAN_LINE - Scan a source line *)
+ (* Purpose: To examine to what sort of CLIP category a source *)
+ (* line belongs to. *)
+ (* Interface: SOURCE_LINE: The line to be scanned. *)
+ (* LINE_INFO: A record structure that holding all *)
+ (* relevant info of this SOURCE_LINE. *)
+ (* RUN_INFO: General information for this run. *)
+ (*********************************************************************)
+ PROCEDURE SCAN_LINE (VAR LINE_INFO: LINE_INFO_;
+ VAR SOURCE_LINE: LINE_DES_;
+ RUN_INFO: RUN_INFO_);
+
+ VAR
+ SCAN_LINE_CONTINUE: BOOLEAN;
+ L2_LINE,
+ L3_LINE,
+ L4_LINE: BOOLEAN;
+ LENGTH_LINE: INTEGER;
+ START_INDEX,
+ END_INDEX: INTEGER;
+ SEGMENT: SEGMENT_DES_;
+ STRING132: STRING132_;
+ OPEN_FOUND,
+ CLOSE_FOUND: BOOLEAN;
+ X, Y: INTEGER;
+ CH: CHAR;
+ CLIP_CCL: CHAR;
+ CLIP_CCR: CHAR;
+
+ BEGIN
+ (******* SCAN_LINE (body) *******)
+
+ (************************* SCAN_LINE (1) ***************************)
+ (** Initialize the Buffer and SCAN_LINE_CONTINUE. **)
+ SP_INIT_BUFFER;
+ SCAN_LINE_CONTINUE := TRUE;
+ (********************* End of SCAN_LINE (1) ************************)
+
+ (************************* SCAN_LINE (2) ***************************)
+ (** Examine the length of SOURCE_LINE. Make SCAN_LINE_CONTINUE to **)
+ (** FALSE if this length is shorter then that of CLIP_LPAR and **)
+ (** CLIP_RPAR together and set LINE_INFO.CATEGORY to L5. **)
+ WITH RUN_INFO DO
+ BEGIN
+ LENGTH_LINE := FT_GET_LINE_LENGTH (SOURCE_LINE);
+ IF LENGTH_LINE < CLIP_LPAR.LENGTH+CLIP_RPAR.LENGTH THEN
+ BEGIN
+ LINE_INFO.CATEGORY := L5;
+ SCAN_LINE_CONTINUE := FALSE;
+ END (*IF*);
+ END (*WITH*);
+ (********************* End of SCAN_LINE (2) ************************)
+
+ IF SCAN_LINE_CONTINUE THEN
+ BEGIN
+ (************************* SCAN_LINE (3) ***********************)
+ (** Examine if SOURCE_LINE starts with an CLIP_LPAR and ends **)
+ (** with an CLIP_RPAR. Set SCAN_LINE_CONTINUE to FALSE if this **)
+ (** is not the case. Generate error message using SOURCE_LINE **)
+ (** if only one of the two strings is detected. **)
+ X := 1;
+ OPEN_FOUND := TRUE;
+ WITH RUN_INFO DO
+ BEGIN
+ WHILE (X <= CLIP_LPAR.LENGTH) AND (SCAN_LINE_CONTINUE) DO
+ BEGIN
+ CH := FT_GET_CHAR (SOURCE_LINE, X);
+ IF CLIP_LPAR.BODY[X] <> CH THEN
+ BEGIN
+ SCAN_LINE_CONTINUE := FALSE;
+ OPEN_FOUND := FALSE;
+ END (*IF*);
+ X := X+1;
+ END (*WHILE*);
+
+ X := LENGTH_LINE-CLIP_RPAR.LENGTH+1;
+ Y := 1;
+ CLOSE_FOUND := TRUE;
+ WHILE (X <=LENGTH_LINE) DO
+ BEGIN
+ CH := FT_GET_CHAR (SOURCE_LINE, X);
+ IF CLIP_RPAR.BODY[Y] <> CH THEN
+ BEGIN
+ CLOSE_FOUND := FALSE;
+ SCAN_LINE_CONTINUE := FALSE;
+ END (*IF*);
+ X := X+1;
+ Y := Y+1;
+ END (*WHILE*);
+ END (*WITH*);
+
+ IF NOT SCAN_LINE_CONTINUE THEN
+ BEGIN
+ ST_INIT_SEG (SEGMENT);
+ STRING132.LENGTH := 0;
+ STRING132.BODY := EMPTY_STRING_FIXED;
+ IF (OPEN_FOUND) AND (NOT CLOSE_FOUND) THEN
+ DIAG (WARN, 'SCAN_LINE (3a) ', SOURCE_LINE, SEGMENT,
+ STRING132)
+ ELSE IF (CLOSE_FOUND) AND (NOT OPEN_FOUND) THEN
+ DIAG (WARN, 'SCAN_LINE (3b) ', SOURCE_LINE, SEGMENT,
+ STRING132);
+ END (*WITH*);
+ (********************* End of SCAN_LINE (3) ********************)
+
+ IF NOT SCAN_LINE_CONTINUE THEN
+ LINE_INFO.CATEGORY := L5
+ ELSE
+ BEGIN
+ L3_LINE := FALSE;
+
+ (********************* SCAN_LINE (4) ***********************)
+ (** Examine the character following CLIP_LPAR and the one **)
+ (** preceeding CLIP_RPAR. Set L3_LINE to TRUE if at least **)
+ (** one of these characters differs from CLIP_CC. Generate **)
+ (** an error message using SOURCE_LINE if only one CLIP_CC **)
+ (** is detected. **)
+ WITH RUN_INFO DO
+ BEGIN
+ X := CLIP_LPAR.LENGTH+1;
+ Y := LENGTH_LINE-CLIP_RPAR.LENGTH;
+ CLIP_CCL := FT_GET_CHAR (SOURCE_LINE, X);
+ CLIP_CCR := FT_GET_CHAR (SOURCE_LINE, Y);
+
+ IF (CLIP_CCL <> CLIP_CC) AND (CLIP_CCR <> CLIP_CC) THEN
+ BEGIN
+ SCAN_LINE_CONTINUE := FALSE;
+ L3_LINE := TRUE;
+ END
+ ELSE IF (CLIP_CCL<>CLIP_CC) AND (CLIP_CCR=CLIP_CC) THEN
+ BEGIN
+ ST_INIT_SEG (SEGMENT);
+ STRING132.LENGTH := 0;
+ STRING132.BODY := EMPTY_STRING_FIXED;
+ DIAG (WARN, 'SCAN_LINE (4a) ', SOURCE_LINE, SEGMENT,
+ STRING132);
+ SCAN_LINE_CONTINUE := FALSE;
+ L3_LINE := TRUE;
+ END
+ ELSE IF (CLIP_CCL = CLIP_CC) AND (CLIP_CCR <> CLIP_CC) THEN
+ BEGIN
+ ST_INIT_SEG (SEGMENT);
+ STRING132.LENGTH := 0;
+ STRING132.BODY := EMPTY_STRING_FIXED;
+ DIAG (WARN, 'SCAN_LINE (4b) ', SOURCE_LINE, SEGMENT,
+ STRING132);
+ SCAN_LINE_CONTINUE := FALSE;
+ L3_LINE := TRUE;
+ END (*IF.IF.IF*);
+ END (*WITH*);
+ (***************** End of SCAN_LINE (4) ********************)
+
+ IF (L3_LINE) AND (LINE_INFO.OPTIONS) THEN
+ BEGIN
+ (* SOURCE_LINE holds only options which will be *)
+ (* scanned in a later stadium. Nothing remains to *)
+ (* be done here. *)
+ END
+ ELSE
+ BEGIN
+ WITH RUN_INFO DO
+ BEGIN
+ START_INDEX := CLIP_LPAR.LENGTH;
+ END_INDEX :=
+ SOURCE_LINE.USED-RUN_INFO.CLIP_RPAR.LENGTH;
+ END (*WITH*);
+ L4_LINE := TRUE;
+
+ (********************* SCAN_LINE (5) *******************)
+ (** Examine the characters in SOURCE_LINE starting at **)
+ (** START_INDEX until a character not equal to CLIP_CC **)
+ (** or until END_INDEX is reached. If such a character **)
+ (** is detected, set L4_LINE to FALSE and store its **)
+ (** position in START_INDEX. **)
+ WHILE (START_INDEX < END_INDEX) AND (L4_LINE) DO
+ BEGIN
+ CH := FT_GET_CHAR (SOURCE_LINE, START_INDEX);
+ IF CH <> RUN_INFO.CLIP_CC THEN
+ L4_LINE := FALSE
+ ELSE
+ START_INDEX := START_INDEX+1;
+ END (*WHILE*);
+ (***************** End of SCAN_LINE (5) ****************)
+
+ IF NOT L4_LINE THEN
+ BEGIN
+ IF NOT L3_LINE THEN
+ LINE_INFO.OPTIONS := FALSE;
+ X := START_INDEX;
+ WHILE (X <= END_INDEX) AND (NOT LINE_INFO.OPTIONS) DO
+ BEGIN
+ CH := FT_GET_CHAR (SOURCE_LINE, X);
+ IF (CH IN ALLOWED) OR
+ (CH=RUN_INFO.OPTION_MARKER) THEN
+ BEGIN
+ IF CH=RUN_INFO.OPTION_MARKER THEN
+ BEGIN
+ LINE_INFO.OPTIONS := TRUE;
+ SOURCE_LINE.POS_OPTION_MARKER := X;
+ END
+ ELSE
+ BEGIN
+ (************* SCAN_LINE (6) ***********)
+ (** Add CH to the Buffer String. **)
+ SP_ADD_BUFFER_CHAR (UC (CH));
+ (********* End of SCAN_LINE (6) ********)
+ END (*IF*);
+ END (*IF*);
+ X := X+1;
+ END (*WHILE*);
+ L2_LINE := TRUE;
+
+ (***************** SCAN_LINE (7) *******************)
+ (** Check if the first LENGTH (CLIP_END) chars of **)
+ (** the Bufffer String are equal to CLIP_END. If **)
+ (** not, set L2_LINE to FALSE. **)
+ WITH RUN_INFO DO
+ BEGIN
+ X := 1;
+ WHILE (X <= CLIP_END.LENGTH) AND (SCAN_LINE_CONTINUE) DO
+ BEGIN
+ CH := SP_GET_BUFFER_CHAR (X);
+ IF UC (CLIP_END.BODY[X]) <> UC (CH) THEN
+ L2_LINE := FALSE;
+ X := X+1;
+ END (*WHILE*);
+ END (*WITH*);
+ (*************** End of SCAN_LINE (7) **************)
+ END (*IF*);
+ END (*IF*);
+ IF L4_LINE THEN
+ LINE_INFO.CATEGORY := L4
+ ELSE IF L3_LINE THEN
+ LINE_INFO.CATEGORY := L3
+ ELSE IF L2_LINE THEN
+ LINE_INFO.CATEGORY := L2
+ ELSE
+ LINE_INFO.CATEGORY := L1;
+ END (*IF*);
+ END (*IF*);
+ (********************* End of SCAN_LINE (body) *****************)
+ END (*PROCEDURE SCAN_LINE*);
+
+
+ (********************************************************************)
+ (* Routine: CONVERT_OPTION *)
+ (* Purpose: Covert an abbreviated option to its full length. *)
+ (* Interface: OPTION: Option to be converted. *)
+ (* ERROR_CODE: 0 - No Problems. *)
+ (* 1 - No Match found. *)
+ (* -1 - More then one match found. *)
+ (********************************************************************)
+ PROCEDURE CONVERT_OPTION (VAR OPTION: OPTION_KEYWORD_;
+ VAR ERROR_CODE: ERROR_CODE_);
+
+ VAR
+ K, I: INTEGER;
+ LENGTH_OPTION: INTEGER;
+ LOCATED: BOOLEAN;
+ DUMMY: OPTION_KEYWORD_;
+ NR_MATCH: INTEGER;
+
+ BEGIN
+ DUMMY := EMPTY_OPTION;
+ K := 1;
+ NR_MATCH := 0;
+ WHILE OPTION[K] <> ' ' DO
+ K := K + 1;
+ LENGTH_OPTION := K-1;
+ LOCATED := FALSE;
+ I := 1;
+ ERROR_CODE := 1; (* Assume no match found. *)
+ WHILE (I <= MAX_OPTIONS) DO
+ BEGIN
+ K := 1;
+ LOCATED := TRUE;
+ WHILE (K <= LENGTH_OPTION) AND (LOCATED) DO
+ BEGIN
+ IF UC (OPTION[K]) = UC (OPTION_TABLE[I,K]) THEN
+ LOCATED := TRUE
+ ELSE
+ LOCATED := FALSE;
+ K := K + 1;
+ END (*WHILE*);
+
+ IF LOCATED THEN
+ BEGIN
+ IF NR_MATCH = 0 THEN
+ BEGIN
+ ERROR_CODE := 0; (* One match has been found. *)
+ DUMMY := OPTION_TABLE[I];
+ NR_MATCH := NR_MATCH + 1;
+ END
+ ELSE
+ ERROR_CODE := -1; (* More then one match found *)
+ END (*IF*);
+ I := I + 1;
+ END (*WHILE*);
+ IF ERROR_CODE = 0 THEN
+ OPTION := DUMMY;
+ END (*CONVERT_OPTION*);
+
+
+ (*********************************************************************)
+ (* Routine: SCN_OPTS_INIT - INITialize the variables of SCN_OPTS. *)
+ (* Purpose: Initialize the global variables of SCAN_OPTIONS. *)
+ (* Interface: - *)
+ (* SCN_OPTS vars: OPT_SPACE, DEFAULT_OPTIONS, OPT_CHARS, *)
+ (* PASCAL_STRING, C_STRING. *)
+ (*********************************************************************)
+ PROCEDURE SCN_OPTS_INIT;
+ BEGIN
+ OPTION_TABLE [ 1] := 'QUICK ';
+ OPTION_TABLE [ 2] := 'MULTIPLE ';
+ OPTION_TABLE [ 3] := 'OPTIONAL ';
+ OPTION_TABLE [ 4] := 'FILE ';
+ OPTION_TABLE [ 5] := 'INDENT ';
+ OPTION_TABLE [ 6] := 'COMMENT ';
+ OPTION_TABLE [ 7] := 'OVERRULE ';
+ OPTION_TABLE [ 8] := 'LEADER ';
+ OPTION_TABLE [ 9] := 'TRAILER ';
+ OPTION_TABLE [10] := 'SEPARATOR ';
+ OPTION_TABLE [11] := 'DEFAULT ';
+ OPTION_TABLE [12] := 'LINENUMBER ';
+
+ OPT_CHARS := ['A'..'Z', 'a'..'z', '0'..'9', '"'];
+
+ WITH DEFAULT_OPTIONS DO
+ BEGIN
+ QUICK := FALSE;
+ MULTIPLE := FALSE;
+ OPTIONAL := FALSE;
+ OVERRULE := FALSE;
+ LEADER := FALSE;
+ DEFAULT := FALSE;
+ TRAILER := FALSE;
+ SEPARATOR := FALSE;
+ LINENUMBER := FALSE;
+ SP_INIT_STR (FILE_NAME);
+ SP_INIT_STR (INDENT);
+ SP_INIT_STR (COMMENT);
+ END;
+
+ PASCAL_STRING := EMPTY_STRING_FIXED;
+ PASCAL_STRING[1] := 'P';
+ PASCAL_STRING[2] := 'A';
+ PASCAL_STRING[3] := 'S';
+ PASCAL_STRING[4] := 'C';
+ PASCAL_STRING[5] := 'A';
+ PASCAL_STRING[6] := 'L';
+
+ FORTRAN_STRING := EMPTY_STRING_FIXED;
+ FORTRAN_STRING[1] := 'F';
+ FORTRAN_STRING[2] := 'O';
+ FORTRAN_STRING[3] := 'R';
+ FORTRAN_STRING[4] := 'T';
+ FORTRAN_STRING[5] := 'R';
+ FORTRAN_STRING[6] := 'A';
+ FORTRAN_STRING[7] := 'N';
+
+ C_STRING := EMPTY_STRING_FIXED;
+ C_STRING[1] := 'C';
+
+ END;
+
+
+ (*********************************************************************)
+ (* Routine: SCAN_OPTIONS - SCAN OPTIONS *)
+ (* Purpose: To scan and store the options that are specified by *)
+ (* a stub or slot segment. *)
+ (* Interface: SEGMENT_OPTIONS - The structure with options. *)
+ (* SEGMENT - The segment to be scanned. *)
+ (* RUN_INFO - The information for this run. *)
+ (* SEGMENT_TYPE - Type of segment to be scanned. *)
+ (*********************************************************************)
+ PROCEDURE SCAN_OPTIONS (VAR SEGMENT_OPTIONS: OPTIONS_;
+ SEGMENT: SEGMENT_DES_;
+ RUN_INFO: RUN_INFO_;
+ SEGMENT_TYPE: SEGMENT_TYPE_);
+
+ VAR
+ OPTION_KEYWORD: OPTION_KEYWORD_;
+ LINE: LINE_DES_;
+ SEGMENT_EXHAUSTED: BOOLEAN;
+ INDEX: INTEGER;
+ CH: CHAR;
+ LENGTH_LINE: INTEGER;
+ OK: BOOLEAN;
+ STRING132: STRING132_;
+ I: INTEGER;
+ ERROR_CODE: ERROR_CODE_;
+ DUMMY_LINE: LINE_DES_;
+ AUX_STRING10: PACKED ARRAY[1..10] OF CHAR;
+
+ BEGIN
+ (******* SCAN_OPTIONS (body) *******)
+
+ (************************* SCAN_OPTIONS (1) ********************)
+ (** Initialize OPTION_KEYWORD. Make SEGMENT_OPTIONS equal to **)
+ (** DEFAULT_OPTIONS and set SEGMENT_EXHAUSTED to FALSE. **)
+ OPTION_KEYWORD := EMPTY_OPTION;
+ SEGMENT_OPTIONS := DEFAULT_OPTIONS;
+ SEGMENT_EXHAUSTED := FALSE;
+ (********************* End of SCAN_OPTIONS (1) *****************)
+
+ IF NOT ST_IS_EMPTY_SEG (SEGMENT) THEN
+ BEGIN
+ (********************* SCAN_OPTIONS (2) ********************)
+ (** Retrieve first line from SEGMENT which holds an option **)
+ (** marker and store it in LINE. Set SEGMENT_EXHAUSTED to **)
+ (** TRUE if no such LINE could be found. **)
+ ST_GET_OPTION_LINE (SEGMENT, LINE);
+ IF LINE.ID =0 THEN
+ SEGMENT_EXHAUSTED := TRUE;
+ (***************** End of SCAN_OPTIONS (2) *****************)
+
+ WHILE NOT SEGMENT_EXHAUSTED DO
+ BEGIN
+ (********************* SCAN_OPTIONS (3) ****************)
+ (** Scan LINE for options with their arguments and put **)
+ (** the result in SEGMENT_OPTIONS. Generate diagnostic **)
+ (** message using SEGMENT in case of trouble. **)
+ INDEX := FT_GET_POS_OPTION_MARKER (LINE);
+ IF INDEX = 0 THEN
+ INDEX := RUN_INFO.CLIP_LPAR.LENGTH + 1;
+ LENGTH_LINE := FT_GET_LINE_LENGTH (LINE) - RUN_INFO.CLIP_RPAR.LENGTH;
+ CH := FT_GET_CHAR (LINE, INDEX);
+ WHILE INDEX < LENGTH_LINE DO
+ BEGIN
+ WHILE (CH <> RUN_INFO.OPTION_MARKER) AND
+ (NOT (CH IN OPT_CHARS)) AND
+ (INDEX < LENGTH_LINE) DO
+ BEGIN
+ INDEX := INDEX + 1;
+ CH := FT_GET_CHAR (LINE, INDEX);
+ END (*WHILE*);
+
+ IF CH = RUN_INFO.OPTION_MARKER THEN
+ BEGIN
+ (********************* SCAN_OPTIONS (3.1) ******************)
+ (** Start of a new option in LINE. Check by an empty **)
+ (** OPTION_KEYWORD if previous option is "closed" correctly **)
+ (** and issue a diagnostic if not. Read the characters **)
+ (** following OPTION_MARKER until the next OPT_SPACE and **)
+ (** store them in OPTION_KEYWORD. Read a possible argument **)
+ (** and update SEGMENT_OPTIONS. Initialize OPTION_KEYWORD **)
+ (** if all went well. **)
+ IF OPTION_KEYWORD <> EMPTY_OPTION THEN
+ BEGIN
+ (********************* SCAN_OPTIONS (3.1.1) ********************)
+ (** Missing argument of option stored in OPTION_KEYWORD. **)
+ (** Generate a diagnostic using OPTION_KEYWORD and SEGMENT. **)
+ STRING132.LENGTH := 0;
+ STRING132.BODY := EMPTY_STRING_FIXED;
+ FOR I := 1 TO MAX_OPTION_LENGTH DO
+ BEGIN
+ IF OPTION_KEYWORD[I] <> ' ' THEN
+ BEGIN
+ STRING132.BODY[I] := OPTION_KEYWORD[I];
+ STRING132.LENGTH := STRING132.LENGTH + 1;
+ END (*IF*);
+ END (*FOR*);
+ DIAG (ERR, 'SCAN_OPTIONS (3.1.1) ', DUMMY_LINE, SEGMENT, STRING132);
+ OPTION_KEYWORD := EMPTY_OPTION;
+ (***************** End of SCAN_OPTIONS (3.1.1) *****************)
+ END (*IF*);
+ OK := FALSE;
+
+ (********************* SCAN_OPTIONS (3.1.2) ************************)
+ (** Store all characters following this OPTION_MARKER in OPTION_- **)
+ (** KEYWORD until the first character that is not a member of **)
+ (** OPT_CHARS. Try to located the option in OPTION_TABLE and make **)
+ (** OK equal to TRUE if a match is found and store the full option **)
+ (** in OPTION_KEYWORD. In case no match can be found generate a **)
+ (** diagnostic message and jump to the next option marker. **)
+ INDEX := INDEX + 1;
+ CH := FT_GET_CHAR (LINE, INDEX);
+ WHILE NOT (CH IN OPT_CHARS) AND
+ (CH <> RUN_INFO.OPTION_MARKER) AND
+ (INDEX < LENGTH_LINE) DO
+ BEGIN
+ INDEX := INDEX + 1;
+ CH := FT_GET_CHAR (LINE, INDEX);
+ END (*WHILE*);
+ I := 1;
+ WHILE CH IN OPT_CHARS DO
+ BEGIN
+ OPTION_KEYWORD [I] := CH;
+ I := I + 1;
+ INDEX := INDEX + 1;
+ CH := FT_GET_CHAR (LINE, INDEX);
+ END (*WHILE*);
+ CONVERT_OPTION (OPTION_KEYWORD, ERROR_CODE);
+ IF ERROR_CODE <> 0 THEN
+ BEGIN
+ STRING132.LENGTH := 0;
+ STRING132.BODY := EMPTY_STRING_FIXED;
+ FOR I := 1 TO MAX_OPTION_LENGTH DO
+ BEGIN
+ IF OPTION_KEYWORD[I] <> ' ' THEN
+ BEGIN
+ STRING132.BODY[I] := OPTION_KEYWORD[I];
+ STRING132.LENGTH := STRING132.LENGTH + 1;
+ END (*IF*);
+ END (*FOR*);
+ IF ERROR_CODE = -1 THEN
+ BEGIN
+ (* More then one match found in table. *)
+ DIAG (ERR, 'SCAN_OPTIONS (3.1.2)a ',
+ DUMMY_LINE, SEGMENT, STRING132);
+ OPTION_KEYWORD := EMPTY_OPTION;
+ END
+ ELSE IF ERROR_CODE = 1 THEN
+ BEGIN
+ (* No match found in the table. *)
+ DIAG (ERR, 'SCAN_OPTIONS (3.1.2)b ',
+ DUMMY_LINE, SEGMENT, STRING132);
+ OPTION_KEYWORD := EMPTY_OPTION;
+ END (*IF.IF*);
+
+ (* Jump to the next OPTION_MARKER in LINE. *)
+ WHILE (CH <> RUN_INFO.OPTION_MARKER) AND
+ (INDEX<LENGTH_LINE) DO
+ BEGIN
+ INDEX := INDEX + 1;
+ CH := FT_GET_CHAR (LINE, INDEX);
+ END (*WHILE*);
+ END
+ ELSE
+ OK := TRUE;
+ (********************* End of SCAN_OPTIONS (3.1.2) *****************)
+
+ IF OK THEN
+ BEGIN
+ IF OPTION_KEYWORD = OPTION_TABLE[1] THEN
+ BEGIN
+ SEGMENT_OPTIONS.QUICK := TRUE;
+ OPTION_KEYWORD := EMPTY_OPTION;
+ END
+ ELSE IF OPTION_KEYWORD = OPTION_TABLE[2] THEN
+ BEGIN
+ SEGMENT_OPTIONS.MULTIPLE := TRUE;
+ OPTION_KEYWORD := EMPTY_OPTION;
+ END
+ ELSE IF OPTION_KEYWORD = OPTION_TABLE[3] THEN
+ BEGIN
+ SEGMENT_OPTIONS.OPTIONAL := TRUE;
+ OPTION_KEYWORD := EMPTY_OPTION;
+ END
+ ELSE IF OPTION_KEYWORD = OPTION_TABLE[4] THEN
+ BEGIN
+ (***************** SCAN_OPTIONS (3.1.3) ********************)
+ (** Add all characters from INDEX until the next member of **)
+ (** OPT_SPACE to the string SEGMENT_OPTIONS.FILE_NAME. **)
+ (** Generate a diagnostic message in case of trouble. **)
+ WHILE (NOT (CH IN OPT_CHARS)) AND
+ (CH <> '"') AND
+ (INDEX<LENGTH_LINE) DO
+ BEGIN
+ INDEX := INDEX + 1;
+ CH := FT_GET_CHAR (LINE, INDEX);
+ END (*WHILE*);
+ IF CH = '"' THEN
+ BEGIN
+ INDEX := INDEX + 1;
+ CH := FT_GET_CHAR (LINE, INDEX);
+ WHILE (CH <> '"') AND (INDEX < LENGTH_LINE) DO
+ BEGIN
+ (* SP_ADD_CHAR (UC (CH), SEGMENT_OPTIONS.FILE_NAME); 14/10/93) *)
+ SP_ADD_CHAR (CH, SEGMENT_OPTIONS.FILE_NAME);
+ INDEX := INDEX + 1;
+ CH := FT_GET_CHAR (LINE, INDEX);
+ END (*WHILE*);
+ IF CH = '"' THEN
+ BEGIN
+ INDEX := INDEX + 1;
+ CH := FT_GET_CHAR (LINE, INDEX);
+ END
+ ELSE
+ BEGIN
+ SP_EXTR_STR (SEGMENT_OPTIONS.FILE_NAME, STRING132);
+ DIAG (ERR, 'SCAN_OPTIONS (3.1.3)a ',
+ DUMMY_LINE, SEGMENT, STRING132);
+ SP_INIT_STR (SEGMENT_OPTIONS.FILE_NAME);
+ OPTION_KEYWORD := EMPTY_OPTION;
+ END (*IF*);
+ END
+ ELSE IF (CH IN OPT_CHARS) THEN
+ BEGIN
+ SP_EXTR_STR (SEGMENT_OPTIONS.FILE_NAME, STRING132);
+ DIAG (ERR, 'SCAN_OPTIONS (3.1.3)b ',
+ DUMMY_LINE, SEGMENT, STRING132);
+ SP_INIT_STR (SEGMENT_OPTIONS.FILE_NAME);
+ OPTION_KEYWORD := EMPTY_OPTION;
+
+ (* Jump to the next option marker. *)
+ WHILE (CH <> RUN_INFO.OPTION_MARKER) AND
+ (INDEX<LENGTH_LINE) DO
+ BEGIN
+ INDEX := INDEX + 1;
+ CH := FT_GET_CHAR (LINE, INDEX);
+ END (*WHILE*);
+ END
+ ELSE IF INDEX = LENGTH_LINE THEN
+ BEGIN
+ (* The file specification must be on the next line. *)
+ (* Nothing remains to be done here. *)
+ END (* IF.IF.IF*);
+ (***************** End of SCAN_OPTIONS (3.1.3) *************)
+
+ IF NOT SP_IS_EMPTY_STR (SEGMENT_OPTIONS.FILE_NAME) THEN
+ OPTION_KEYWORD := EMPTY_OPTION;
+ END
+ ELSE IF OPTION_KEYWORD = OPTION_TABLE[5] THEN
+ BEGIN
+ (***************** SCAN_OPTIONS (3.1.4) ********************)
+ (** Add all characters from INDEX until the next member of **)
+ (** OPT_SPACE to the string SEGMENT_OPTIONS.INDENT. Give an **)
+ (** error and initialize SEGMENT_OPTIONS.INDENT and **)
+ (** OPTION_KEYWORD and in case of trouble. **)
+ WHILE (NOT (CH IN OPT_CHARS)) AND
+ (INDEX < LENGTH_LINE) AND
+ (CH <> RUN_INFO.OPTION_MARKER) DO
+ BEGIN
+ INDEX := INDEX + 1;
+ CH := FT_GET_CHAR (LINE, INDEX);
+ END (*WHILE*);
+ WHILE (CH IN OPT_CHARS) AND (INDEX < LENGTH_LINE) DO
+ BEGIN
+ SP_ADD_CHAR (UC (CH), SEGMENT_OPTIONS.INDENT);
+ INDEX := INDEX + 1;
+ CH := FT_GET_CHAR (LINE, INDEX);
+ END (*WHILE*);
+ IF NOT SP_IS_EMPTY_STR (SEGMENT_OPTIONS.INDENT) THEN
+ BEGIN
+ SP_EXTR_STR (SEGMENT_OPTIONS.INDENT, STRING132);
+ IF ((STRING132.BODY[1] <> 'O') OR
+ (STRING132.BODY[2] <> 'N')) AND
+ ((STRING132.BODY[1] <> 'O') OR
+ (STRING132.BODY[2] <> 'F') OR
+ (STRING132.BODY[3] <> 'F')) THEN
+ BEGIN
+ SP_INIT_STR (SEGMENT_OPTIONS.INDENT);
+ OPTION_KEYWORD := EMPTY_OPTION;
+ DIAG (ERR, 'SCAN_OPTIONS (3.1.4) ',
+ DUMMY_LINE, SEGMENT, STRING132);
+ END (*IF*);
+ END
+ ELSE
+ BEGIN
+ (* The argument of the INDENT-option must be on the next *)
+ (* line. Nothing remains to be done here. *)
+ END (*IF*);
+ (************* End of SCAN_OPTIONS (3.1.4) *****************)
+
+ IF NOT SP_IS_EMPTY_STR (SEGMENT_OPTIONS.INDENT) THEN
+ OPTION_KEYWORD := EMPTY_OPTION;
+ END
+ ELSE IF OPTION_KEYWORD = OPTION_TABLE[6] THEN
+ BEGIN
+ (***************** SCAN_OPTIONS (3.1.5) ********************)
+ (** Add all characters from INDEX until the next member of **)
+ (** OPT_SPACE to SEGMENT_OPTIONS.COMMENT. Issue diagnostic **)
+ (** and initialize OPTION_KEYWORD and SEGMENT_OPTIONS.- **)
+ (** COMMENT in case of trouble. **)
+ WHILE (NOT (CH IN OPT_CHARS)) AND
+ (INDEX < LENGTH_LINE) AND
+ (CH <> RUN_INFO.OPTION_MARKER) DO
+ BEGIN
+ INDEX := INDEX + 1;
+ CH := FT_GET_CHAR (LINE, INDEX);
+ END (*WHILE*);
+ WHILE (CH IN OPT_CHARS) AND (INDEX < LENGTH_LINE) DO
+ BEGIN
+ SP_ADD_CHAR (UC (CH), SEGMENT_OPTIONS.COMMENT);
+ INDEX := INDEX + 1;
+ CH := FT_GET_CHAR (LINE, INDEX);
+ END (*WHILE*);
+ IF NOT SP_IS_EMPTY_STR (SEGMENT_OPTIONS.COMMENT) THEN
+ BEGIN
+ SP_EXTR_STR (SEGMENT_OPTIONS.COMMENT, STRING132);
+ IF (STRING132.BODY = PASCAL_STRING) OR
+ (STRING132.BODY = FORTRAN_STRING) OR
+ (STRING132.BODY = C_STRING) THEN
+ BEGIN
+ DIAG (WARN, 'SCAN_OPTIONS (3.1.5)a ',
+ DUMMY_LINE, SEGMENT, STRING132);
+ SP_INIT_STR (SEGMENT_OPTIONS.COMMENT);
+ OPTION_KEYWORD := EMPTY_OPTION;
+ END
+ ELSE IF ((STRING132.BODY[1] <> 'O') OR
+ (STRING132.BODY[2] <> 'N')) AND
+ ((STRING132.BODY[1] <> 'O') OR
+ (STRING132.BODY[2] <> 'F') OR
+ (STRING132.BODY[3] <> 'F')) THEN
+ BEGIN
+ DIAG (ERR, 'SCAN_OPTIONS (3.1.5)b ',
+ DUMMY_LINE, SEGMENT, STRING132);
+ SP_INIT_STR (SEGMENT_OPTIONS.COMMENT);
+ OPTION_KEYWORD := EMPTY_OPTION;
+ END (*IF.IF*);
+ END
+ ELSE
+ BEGIN
+ (* The argument of the option COMMENT must be on the *)
+ (* next line. Nothing remains to be done here *)
+ END (*IF*);
+ (************* End of SCAN_OPTIONS (3.1.5) *****************)
+
+ IF NOT SP_IS_EMPTY_STR (SEGMENT_OPTIONS.COMMENT) THEN
+ OPTION_KEYWORD := EMPTY_OPTION;
+ END
+ ELSE IF OPTION_KEYWORD = OPTION_TABLE[7] THEN
+ BEGIN
+ SEGMENT_OPTIONS.OVERRULE := TRUE;
+ OPTION_KEYWORD := EMPTY_OPTION;
+ END
+ ELSE IF OPTION_KEYWORD = OPTION_TABLE[8] THEN
+ BEGIN
+ SEGMENT_OPTIONS.LEADER := TRUE;
+ OPTION_KEYWORD := EMPTY_OPTION;
+ END
+ ELSE IF OPTION_KEYWORD = OPTION_TABLE[9] THEN
+ BEGIN
+ SEGMENT_OPTIONS.TRAILER := TRUE;
+ OPTION_KEYWORD := EMPTY_OPTION;
+ END
+ ELSE IF OPTION_KEYWORD = OPTION_TABLE[10] THEN
+ BEGIN
+ SEGMENT_OPTIONS.SEPARATOR := TRUE;
+ OPTION_KEYWORD := EMPTY_OPTION;
+ END
+ ELSE IF OPTION_KEYWORD = OPTION_TABLE[11] THEN
+ BEGIN
+ SEGMENT_OPTIONS.DEFAULT := TRUE;
+ OPTION_KEYWORD := EMPTY_OPTION;
+ END
+ ELSE IF OPTION_KEYWORD = OPTION_TABLE[12] THEN
+ BEGIN
+ SEGMENT_OPTIONS.LINENUMBER := TRUE;
+ OPTION_KEYWORD := EMPTY_OPTION;
+ END (*IF.IF.IF.IF.IF.IF.IF.IF.IF.IF.IF.IF*);
+ END (*IF*);
+ (***************** End of SCAN_OPTIONS (3.1) ***************)
+ END
+ ELSE IF CH IN OPT_CHARS THEN
+ BEGIN
+ (********************* SCAN_OPTIONS (3.2) ******************)
+ (** CH is only legal at this point as the first character **)
+ (** of the argument of the previous option, i.e. **)
+ (** OPTION_KEYWORD must not be empty. Read this argument. **)
+ (** When problems arise, jump to next OPTION_MARKER and **)
+ (** issue a diagnostic message. **)
+ IF OPTION_KEYWORD <> EMPTY_OPTION THEN
+ BEGIN
+ IF OPTION_KEYWORD = OPTION_TABLE[4] THEN
+ BEGIN
+ (***************** SCAN_OPTIONS (3.2.1) ********************)
+ (** Add characters from INDEX to SEGMENT_OPTIONS.FILE_NAME **)
+ (** until the next OPT_SPACE is met. Diagnostic in case of **)
+ (** trouble. **)
+ WHILE (NOT (CH IN OPT_CHARS)) AND
+ (CH <> '"') AND
+ (INDEX < LENGTH_LINE) DO
+ BEGIN
+ INDEX := INDEX + 1;
+ CH := FT_GET_CHAR (LINE, INDEX);
+ END (*WHILE*);
+ IF CH = '"' THEN
+ BEGIN
+ INDEX := INDEX + 1;
+ CH := FT_GET_CHAR (LINE, INDEX);
+ WHILE (CH <> '"') AND (INDEX <= LENGTH_LINE) DO
+ BEGIN
+ (* SP_ADD_CHAR (UC (CH), SEGMENT_OPTIONS.FILE_NAME); 14/10/93 *)
+ SP_ADD_CHAR (CH, SEGMENT_OPTIONS.FILE_NAME);
+ INDEX := INDEX + 1;
+ CH := FT_GET_CHAR (LINE, INDEX);
+ END (*WHILE*);
+ IF CH='"' THEN
+ BEGIN
+ INDEX := INDEX + 1;
+ CH := FT_GET_CHAR (LINE, INDEX);
+ END
+ ELSE
+ BEGIN
+ SP_EXTR_STR (SEGMENT_OPTIONS.FILE_NAME, STRING132);
+ DIAG (ERR, 'SCAN_OPTIONS (3.2.1)a ',
+ DUMMY_LINE, SEGMENT, STRING132);
+ SP_INIT_STR (SEGMENT_OPTIONS.FILE_NAME);
+ OPTION_KEYWORD := EMPTY_OPTION;
+ END (*IF*);
+ END
+ ELSE IF (CH IN OPT_CHARS) THEN
+ BEGIN
+ SP_EXTR_STR (SEGMENT_OPTIONS.FILE_NAME, STRING132);
+ DIAG (ERR, 'SCAN_OPTIONS (3.2.1)b ',
+ DUMMY_LINE, SEGMENT, STRING132);
+ SP_INIT_STR (SEGMENT_OPTIONS.FILE_NAME);
+ OPTION_KEYWORD := EMPTY_OPTION;
+
+ (* Jump to the next option marker. *)
+ WHILE (CH <> RUN_INFO.OPTION_MARKER) AND
+ (INDEX<LENGTH_LINE) DO
+ BEGIN
+ INDEX := INDEX + 1;
+ CH := FT_GET_CHAR (LINE, INDEX);
+ END (*WHILE*);
+ END
+ ELSE IF INDEX=LENGTH_LINE THEN
+ BEGIN
+ (* The file specification must be on the next line. *)
+ (* Nothing remains to be done here. *)
+ END (*IF.IF.IF*);
+ (************* End of SCAN_OPTIONS (3.2.1) *****************)
+
+ IF NOT SP_IS_EMPTY_STR (SEGMENT_OPTIONS.FILE_NAME) THEN
+ OPTION_KEYWORD := EMPTY_OPTION;
+ END
+ ELSE IF OPTION_KEYWORD=OPTION_TABLE[5] THEN
+ BEGIN
+ (***************** SCAN_OPTIONS (3.2.2) ********************)
+ (** Add characters from INDEX to SEGMENT_OPTIONS.INDENT **)
+ (** until the next OPT_SPACE is met. Generate a diagnostic **)
+ (** message and reset OPTION_KEYWORD and SEGMENT_OPTIONS.- **)
+ (** INDENT in case of trouble. **)
+ WHILE (NOT (CH IN OPT_CHARS)) AND
+ (INDEX < LENGTH_LINE) DO
+ BEGIN
+ INDEX := INDEX + 1;
+ CH := FT_GET_CHAR (LINE, INDEX);
+ END (*WHILE*);
+ WHILE (CH IN OPT_CHARS) AND
+ (INDEX<LENGTH_LINE) DO
+ BEGIN
+ SP_ADD_CHAR (UC (CH), SEGMENT_OPTIONS.INDENT);
+ INDEX := INDEX + 1;
+ CH := FT_GET_CHAR (LINE, INDEX);
+ END (*WHILE*);
+ IF NOT SP_IS_EMPTY_STR (SEGMENT_OPTIONS.INDENT) THEN
+ BEGIN
+ SP_EXTR_STR (SEGMENT_OPTIONS.INDENT, STRING132);
+ IF ((STRING132.BODY[1] <> 'O') OR
+ (STRING132.BODY[2] <> 'N')) AND
+ ((STRING132.BODY[1] <> 'O') OR
+ (STRING132.BODY[2] <> 'F') OR
+ (STRING132.BODY[3] <> 'F')) THEN
+ BEGIN
+ SP_INIT_STR (SEGMENT_OPTIONS.INDENT);
+ OPTION_KEYWORD := EMPTY_OPTION;
+ DIAG (ERR, 'SCAN_OPTIONS (3.2.2) ',
+ DUMMY_LINE, SEGMENT, STRING132);
+ END (*IF*);
+ END
+ ELSE
+ BEGIN
+ (* The argument of the option INDENT must be on the next *)
+ (* line. Nothing remains to be done here *)
+ END (*IF*);
+ (************* End of SCAN_OPTIONS (3.2.2) *****************)
+
+ IF NOT SP_IS_EMPTY_STR (SEGMENT_OPTIONS.INDENT) THEN
+ OPTION_KEYWORD := EMPTY_OPTION;
+ END
+ ELSE IF OPTION_KEYWORD=OPTION_TABLE[6] THEN
+ BEGIN
+ (***************** SCAN_OPTIONS (3.2.3) ********************)
+ (** Add characters from INDEX to SEGMENT_OPTIONS.COMMENT **)
+ (** until the next OPT_SPACE is met. Generate a diagnostic **)
+ (** message and reset OPTION_KEYWORD and SEGMENT_OPTIONS.- **)
+ (** COMMENT in case of trouble. **)
+ WHILE (NOT (CH IN OPT_CHARS)) AND
+ (INDEX<LENGTH_LINE) DO
+ BEGIN
+ INDEX := INDEX + 1;
+ CH := FT_GET_CHAR (LINE, INDEX);
+ END (*WHILE*);
+ WHILE (CH IN OPT_CHARS) AND
+ (INDEX<LENGTH_LINE) DO
+ BEGIN
+ SP_ADD_CHAR (UC (CH), SEGMENT_OPTIONS.COMMENT);
+ INDEX := INDEX + 1;
+ CH := FT_GET_CHAR (LINE, INDEX);
+ END (*WHILE*);
+ IF NOT SP_IS_EMPTY_STR (SEGMENT_OPTIONS.COMMENT) THEN
+ BEGIN
+ SP_EXTR_STR (SEGMENT_OPTIONS.COMMENT, STRING132);
+ IF (STRING132.BODY = PASCAL_STRING) OR
+ (STRING132.BODY = FORTRAN_STRING) OR
+ (STRING132.BODY = C_STRING) THEN
+ BEGIN
+ DIAG (WARN, 'SCAN_OPTIONS (3.2.3)a ',
+ DUMMY_LINE, SEGMENT, STRING132);
+ SP_INIT_STR (SEGMENT_OPTIONS.COMMENT);
+ OPTION_KEYWORD := EMPTY_OPTION;
+ END
+ ELSE IF ((STRING132.BODY[1] <> 'O') OR
+ (STRING132.BODY[2] <> 'N')) AND
+ ((STRING132.BODY[1] <> 'O') OR
+ (STRING132.BODY[2] <> 'F') OR
+ (STRING132.BODY[3] <> 'F')) THEN
+ BEGIN
+ DIAG (ERR, 'SCAN_OPTIONS (3.2.3)b ',
+ DUMMY_LINE, SEGMENT, STRING132);
+ SP_INIT_STR (SEGMENT_OPTIONS.COMMENT);
+ OPTION_KEYWORD := EMPTY_OPTION;
+ END (*IF.IF*);
+ END
+ ELSE
+ BEGIN
+ (* The argument of the option COMMENT must be on the *)
+ (* next line. Nothing remains to be done here *)
+ END (*IF*);
+ (************* End of SCAN_OPTIONS (3.2.3) *****************)
+ IF NOT SP_IS_EMPTY_STR (SEGMENT_OPTIONS.COMMENT) THEN
+ OPTION_KEYWORD := EMPTY_OPTION;
+ END (*IF.IF.IF*);
+ END
+ ELSE
+ BEGIN
+ (********************* SCAN_OPTIONS (3.2.4) ********************)
+ (** Character is illegal at this position. Skip to next **)
+ (** OPTION_MARKER or to end of this line. Generate a diagnostic **)
+ (** message using SEGMENT and LINE. **)
+ STRING132.LENGTH := 1;
+ STRING132.BODY[1] := CH;
+ DIAG (ERR, 'SCAN_OPTIONS (3.2.4) ', DUMMY_LINE, SEGMENT, STRING132);
+ OPTION_KEYWORD := EMPTY_OPTION;
+ WHILE (CH <> RUN_INFO.OPTION_MARKER) AND
+ (INDEX < LENGTH_LINE) DO
+ BEGIN
+ INDEX := INDEX + 1;
+ CH := FT_GET_CHAR (LINE, INDEX);
+ END (*WHILE*);
+ (***************** End of SCAN_OPTIONS (3.2.4) *****************)
+ END (*IF*);
+ (***************** End of SCAN_OPTIONS (3.2) ***************)
+ END (*IF*);
+ END (*WHILE*);
+ (***************** End of SCAN_OPTIONS (3) *************)
+
+ (***************** SCAN_OPTIONS (4) ********************)
+ (** Retrieve next LINE from SEGMENT. SEGMENT_EXHAUSTED **)
+ (** becomes TRUE if the segment is exhausted. **)
+ ST_GET_LINE (LINE);
+ IF LINE.ID = 0 THEN
+ SEGMENT_EXHAUSTED := TRUE;
+ (************* End of SCAN_OPTIONS (4) *****************)
+ END (*WHILE*);
+ IF SEGMENT_EXHAUSTED THEN
+ BEGIN
+ (***************** SCAN_OPTIONS (5) ********************)
+ (** Check SEGMENT_OPTIONS for any errors. and generate **)
+ (** diagnostic message using SEGMENT if appropriate. **)
+ FT_INIT_LINE (DUMMY_LINE);
+
+ (* 1. Check for a missing argument of the last option. *)
+ (* This can be detected by a non-empty OPTION_KEYWORD.*)
+ IF OPTION_KEYWORD <> EMPTY_OPTION THEN
+ BEGIN
+ STRING132.LENGTH := 0;
+ STRING132.BODY := EMPTY_STRING_FIXED;
+ FOR I := 1 TO MAX_OPTION_LENGTH DO
+ BEGIN
+ IF OPTION_KEYWORD[I] <> ' ' THEN
+ BEGIN
+ STRING132.BODY[I] := OPTION_KEYWORD[I];
+ STRING132.LENGTH := STRING132.LENGTH + 1;
+ END (*IF*);
+ END (*FOR*);
+ DIAG (ERR, 'SCAN_OPTIONS (5a) ', DUMMY_LINE, SEGMENT, STRING132);
+ END (*IF*);
+
+ (* 2. Check the use of stub options in a slot SEGMENT. *)
+ IF (SEGMENT_TYPE = SLOT) OR (SEGMENT_TYPE = CODE) THEN
+ BEGIN
+ IF SEGMENT_OPTIONS.QUICK THEN
+ BEGIN
+ SEGMENT_OPTIONS.QUICK := FALSE;
+ STRING132.BODY[1] := 'Q';
+ STRING132.BODY[2] := 'U';
+ STRING132.BODY[3] := 'I';
+ STRING132.BODY[4] := 'C';
+ STRING132.BODY[5] := 'K';
+ STRING132.LENGTH := 5;
+ DIAG (ERR, 'SCAN_OPTIONS (5b) ', DUMMY_LINE, SEGMENT,
+ STRING132);
+ END (*IF*);
+ IF NOT (SP_IS_EMPTY_STR (SEGMENT_OPTIONS.FILE_NAME)) THEN
+ BEGIN
+ SP_INIT_STR (SEGMENT_OPTIONS.FILE_NAME);
+ STRING132.BODY[1] := 'F';
+ STRING132.BODY[2] := 'I';
+ STRING132.BODY[3] := 'L';
+ STRING132.BODY[4] := 'E';
+ STRING132.LENGTH := 4;
+ DIAG (ERR, 'SCAN_OPTIONS (5b) ', DUMMY_LINE, SEGMENT,
+ STRING132);
+ END (*IF*);
+ IF SEGMENT_OPTIONS.OVERRULE THEN
+ BEGIN
+ SEGMENT_OPTIONS.OVERRULE := FALSE;
+ AUX_STRING10 := 'OVERRULE ';
+ FOR I:= 1 TO 8 DO
+ STRING132.BODY[I] := AUX_STRING10[I];
+ STRING132.LENGTH := 8;
+ DIAG (ERR, 'SCAN_OPTIONS (5b) ', DUMMY_LINE, SEGMENT,
+ STRING132);
+ END (*IF*);
+ IF SEGMENT_OPTIONS.LEADER THEN
+ BEGIN
+ SEGMENT_OPTIONS.LEADER := FALSE;
+ AUX_STRING10 := 'LEADER ';
+ FOR I := 1 TO 6 DO
+ STRING132.BODY[I] := AUX_STRING10[I];
+ STRING132.LENGTH := 6;
+ DIAG (ERR, 'SCAN_OPTIONS (5b) ', DUMMY_LINE, SEGMENT,
+ STRING132);
+ END (*IF*);
+ IF SEGMENT_OPTIONS.TRAILER THEN
+ BEGIN
+ SEGMENT_OPTIONS.TRAILER := FALSE;
+ AUX_STRING10 := 'TRAILER ';
+ FOR I:= 1 TO 7 DO
+ STRING132.BODY[I] := AUX_STRING10[I];
+ STRING132.LENGTH := 7;
+ DIAG (ERR, 'SCAN_OPTIONS (5b) ', DUMMY_LINE, SEGMENT,
+ STRING132);
+ END (*IF*);
+ IF SEGMENT_OPTIONS.SEPARATOR THEN
+ BEGIN
+ SEGMENT_OPTIONS.SEPARATOR := FALSE;
+ AUX_STRING10 := 'SEPARATOR ';
+ FOR I := 1 TO 9 DO
+ STRING132.BODY[I] := AUX_STRING10[I];
+ STRING132.LENGTH := 9;
+ DIAG (ERR, 'SCAN_OPTIONS (5b) ', DUMMY_LINE, SEGMENT,
+ STRING132);
+ END (*IF*);
+ IF SEGMENT_OPTIONS.DEFAULT THEN
+ BEGIN
+ SEGMENT_OPTIONS.QUICK := FALSE;
+ AUX_STRING10 := 'DEFAULT ';
+ FOR I := 1 TO 7 DO
+ STRING132.BODY[I] := AUX_STRING10[I];
+ STRING132.LENGTH := 7;
+ DIAG (ERR, 'SCAN_OPTIONS (5b) ', DUMMY_LINE, SEGMENT,
+ STRING132);
+ END (*IF*);
+ END
+
+ (* 3. Check the use of slot options in a stub segment. *)
+ ELSE IF SEGMENT_TYPE = STUB THEN
+ BEGIN
+ IF SEGMENT_OPTIONS.MULTIPLE THEN
+ BEGIN
+ SEGMENT_OPTIONS.MULTIPLE := FALSE;
+ AUX_STRING10 := 'MULTIPLE ';
+ FOR I := 1 TO 8 DO
+ STRING132.BODY[I] := AUX_STRING10[I];
+ STRING132.LENGTH := 8;
+ DIAG (ERR, 'SCAN_OPTIONS (5c) ', DUMMY_LINE, SEGMENT,
+ STRING132);
+ END (*IF*);
+ IF SEGMENT_OPTIONS.OPTIONAL THEN
+ BEGIN
+ SEGMENT_OPTIONS.OPTIONAL := FALSE;
+ AUX_STRING10 := 'OPTIONAL ';
+ FOR I := 1 TO 8 DO
+ STRING132.BODY[I] := AUX_STRING10[I];
+ STRING132.LENGTH := 8;
+ DIAG (ERR, 'SCAN_OPTIONS (5c) ', DUMMY_LINE, SEGMENT,
+ STRING132);
+ END (*IF*);
+ END (*IF*);
+
+ (* 4. Check illegal use of the options FILE, LEADER, *)
+ (* TRAILER, SEPARATOR and DEFAULT in the segment. *)
+ WITH SEGMENT_OPTIONS DO
+ BEGIN
+ IF ( (NOT SP_IS_EMPTY_STR (FILE_NAME)) AND
+ ( (DEFAULT) OR (SEPARATOR) OR (LEADER) OR (TRAILER))) OR
+ ( (DEFAULT) AND ( (SEPARATOR) OR (LEADER) OR (TRAILER))) OR
+ ( (LEADER) AND ( (SEPARATOR) OR (TRAILER))) OR
+ ( (SEPARATOR) AND (TRAILER)) THEN
+ BEGIN
+ DEFAULT := FALSE;
+ SEPARATOR := FALSE;
+ LEADER := FALSE;
+ TRAILER := FALSE;
+ STRING132.LENGTH := 0;
+ STRING132.BODY := EMPTY_STRING_FIXED;
+ DIAG (ERR, 'SCAN_OPTIONS (5d) ', DUMMY_LINE, SEGMENT,
+ STRING132);
+ END (*IF*);
+ END (*WITH*);
+ (***************** End of SCAN_OPTIONS (5) *************)
+ END (*IF*);
+ END (*IF*);
+ (***************** End of SCAN_OPTIONS (body) ******************)
+
+ END (*PROCEDURE SCAN_OPTIONS*);
+
+
+ (*********************************************************************)
+ (* Routine: BUILD_CODE_STRUCT - BUILD the structure CODE_STRUCT. *)
+ (* Purpose: Scan a stub block upon the different sort of *)
+ (* segments and build the structure of stubs and slots. *)
+ (* Interface: CODE_STRUCT: Anchors the datastructure representing *)
+ (* the stubs and slots structure. *)
+ (* RUN_INFO: All information concerning this run. *)
+ (* FIRST_LINE: The first line of a stub block. *)
+ (* LINE_INFO: Scanned information of a line. *)
+ (*********************************************************************)
+ PROCEDURE BUILD_CODE_STRUCT (VAR CODE_STRUCT: CODE_STRUCT_;
+ RUN_INFO: RUN_INFO_;
+ FIRST_LINE: LINE_DES_;
+ LINE_INFO: LINE_INFO_);
+
+ VAR
+ SEGMENT_TYPE: SEGMENT_TYPE_;
+ END_OF_STUB_BLOCK: BOOLEAN;
+ SOURCE_LINE: LINE_DES_;
+ LAST_SLOT: SLT_PTR_;
+ STRING132: STRING132_;
+ SEGMENT: SEGMENT_DES_;
+
+ BEGIN
+ (******* BUILD_CODE_STRUCT (body) *******)
+
+ (********************* BUILD_CODE_STRUCT (1) *******************)
+ (** FIRST_LINE marks a new stub segment. Link the stub into its **)
+ (** position and let CODE_STRUCT.LAST_STUB refer to it. Set **)
+ (** LAST_SLOT to NIL. Initialize LAST_STUB. Add FIRST_LINE to **)
+ (** the segment LAST_STUB^.SRC_IMG. Use LINE_INFO to update **)
+ (** LAST_STUB^.NAME. **)
+ WITH CODE_STRUCT DO
+ BEGIN
+ LAST_SLOT := NIL;
+ IF FIRST_STUB = NIL THEN
+ BEGIN
+ NEW (FIRST_STUB);
+ LAST_STUB := FIRST_STUB;
+ END
+ ELSE
+ BEGIN
+ NEW (LAST_STUB^.NEXT_STUB);
+ LAST_STUB := LAST_STUB^.NEXT_STUB;
+ END (*IF*);
+ WITH LAST_STUB^ DO
+ BEGIN
+ SLOTS := NIL;
+ NEXT_STUB := NIL;
+ NEXT_TWIN := NIL;
+ ST_INIT_SEG (SRC_IMG);
+ SP_INIT_STR (NAME);
+ ST_PUT_SEG (FIRST_LINE, SRC_IMG);
+ SP_ADD_BUFFER (LINE_INFO.LINE_ID);
+ SP_CONC_STR (NAME, LINE_INFO.LINE_ID);
+ END (*WITH*);
+ END (*WITH*);
+ (***************** End of BUILD_CODE_STRUCT (1) ****************)
+
+ (* Set SEGMENT_TYPE to STUB since the first segment of a stub *)
+ (* block must be a stub segment. Initialize END_OF_STUB_BLOCK. *)
+ SEGMENT_TYPE := STUB;
+ END_OF_STUB_BLOCK := FALSE;
+
+ WHILE (NOT END_OF_STUB_BLOCK) AND (NOT FT_EOF) DO
+ BEGIN
+ FT_RDLN (SOURCE_LINE);
+
+ (* Check wether or not we need to scan this line. *)
+ WITH RUN_INFO DO
+ BEGIN
+ IF FT_GET_LINE_LENGTH (SOURCE_LINE) >
+ CLIP_LPAR.LENGTH+CLIP_RPAR.LENGTH THEN
+ SCAN_LINE (LINE_INFO, SOURCE_LINE, RUN_INFO)
+ ELSE
+ LINE_INFO.CATEGORY := L5;
+ END (*WITH*);
+
+ WITH CODE_STRUCT DO
+ CASE LINE_INFO.CATEGORY OF
+ L1:
+ BEGIN
+ IF LAST_SLOT = NIL THEN
+ BEGIN
+ (************* BUILD_CODE_STRUCT (2) ***************)
+ (** The end of the previous stub segment. Scan the **)
+ (** options of LAST_STUB^.SRC_IMG and store the **)
+ (** found options in LAST_STUB^.OPTIONS. Add the **)
+ (** buffer to LINE_INFO.LINE_ID. **)
+ WITH LAST_STUB^ DO
+ SCAN_OPTIONS (OPTIONS, SRC_IMG, RUN_INFO, SEGMENT_TYPE);
+ LINE_INFO.OPTIONS := FALSE;
+ SP_ADD_BUFFER (LINE_INFO.LINE_ID);
+ (********* End of BUILD_CODE_STRUCT (2) ************)
+
+ IF LAST_STUB^.OPTIONS.QUICK THEN
+ BEGIN
+ SEGMENT_TYPE := STUB;
+ (************* BUILD_CODE_STRUCT (3) ***********)
+ (** The end of the current stub block and the **)
+ (** start a new one. Make an entry for this new **)
+ (** stub, let LAST_STUB point to it and initia- **)
+ (** lize its fields. Set LAST_SLOT to NIL. Add **)
+ (** SOURCE_LINE to LAST_STUB^.SRC_IMG. Update **)
+ (** LAST_STUB^.NAME with information from **)
+ (** LINE_INFO. **)
+ NEW (LAST_STUB^.NEXT_STUB);
+ LAST_STUB := LAST_STUB^.NEXT_STUB;
+ LAST_SLOT := NIL;
+ WITH LAST_STUB^ DO
+ BEGIN
+ SLOTS := NIL;
+ NEXT_STUB := NIL;
+ NEXT_TWIN := NIL;
+ ST_INIT_SEG (SRC_IMG);
+ SP_INIT_STR (NAME);
+ ST_PUT_SEG (SOURCE_LINE, SRC_IMG);
+ SP_CONC_STR (NAME, LINE_INFO.LINE_ID);
+ END (*WITH*);
+ (********* End of BUILD_CODE_STRUCT (3) ********)
+ END
+ ELSE
+ BEGIN
+ SEGMENT_TYPE := SLOT;
+ (************* BUILD_CODE_STRUCT (4) ***********)
+ (** First slot segment of this stub block. Make **)
+ (** entry for this new slot, let LAST_SLOT **)
+ (** point to it and initialize its fields. Add **)
+ (** SOURCE_LINE to segment LAST_SLOT^.SRC_IMG. **)
+ (** Update LAST_SLOT with the information hold **)
+ (** by LINE_INFO. **)
+ NEW (LAST_STUB^.SLOTS);
+ LAST_SLOT := LAST_STUB^.SLOTS;
+ WITH LAST_SLOT^ DO
+ BEGIN
+ SP_INIT_STR (NAME);
+ ST_INIT_SEG (SRC_IMG);
+ STUB_REF := NIL;
+ ST_INIT_SEG (CODE);
+ NEXT_SLOT := NIL;
+ ST_PUT_SEG (SOURCE_LINE, SRC_IMG);
+ SP_CONC_STR (NAME, LINE_INFO.LINE_ID);
+ END (*WITH*);
+ (********* End of BUILD_CODE_STRUCT (4) ********)
+ END (*IF*);
+ END
+ ELSE
+ BEGIN
+ (************* BUILD_CODE_STRUCT (5) ***************)
+ (** End of the previous segment LAST_SLOT^.SRC_IMG. **)
+ (** Finish the segment by scanning its options **)
+ (** using RUN_INFO. Store found options in **)
+ (** LAST_SLOT^.OPTIONS. Add the buffer to LINE_- **)
+ (** INFO.LINE_ID. **)
+ WITH LAST_SLOT^ DO
+ SCAN_OPTIONS (OPTIONS, SRC_IMG, RUN_INFO, SEGMENT_TYPE);
+ LINE_INFO.OPTIONS := FALSE;
+ SP_ADD_BUFFER (LINE_INFO.LINE_ID);
+ (********* End of BUILD_CODE_STRUCT (5) ************)
+ IF LAST_STUB^.OPTIONS.QUICK THEN
+ BEGIN
+ SEGMENT_TYPE := STUB;
+ (************* BUILD_CODE_STRUCT (6) ***********)
+ (** End of current stub block and the start of **)
+ (** a new one. Link this new stub into its po- **)
+ (** sition, let LAST_STUB point to it and ini- **)
+ (** tialize its fields. Add SOURCE_LINE to **)
+ (** segment LAST_STUB^.SRC_IMG and update **)
+ (** LAST_STUB^.NAME with the help of LINE_INFO. **)
+ NEW (LAST_STUB^.NEXT_STUB);
+ LAST_STUB := LAST_STUB^.NEXT_STUB;
+ LAST_SLOT := NIL;
+ WITH LAST_STUB^ DO
+ BEGIN
+ SLOTS := NIL;
+ NEXT_STUB := NIL;
+ NEXT_TWIN := NIL;
+ ST_INIT_SEG (SRC_IMG);
+ SP_INIT_STR (NAME);
+ ST_PUT_SEG (SOURCE_LINE, SRC_IMG);
+ SP_CONC_STR (NAME, LINE_INFO.LINE_ID);
+ END (*WITH*);
+ (********* End of BUILD_CODE_STRUCT (6) ********)
+ END
+ ELSE
+ BEGIN
+ SEGMENT_TYPE := SLOT;
+ (************* BUILD_CODE_STRUCT (7) ***********)
+ (** Start of a new slot segment. Link slot into **)
+ (** its position, let LAST_SLOT point to it and **)
+ (** initialize its fields. Add SOURCE_LINE to **)
+ (** LAST_SLOT^.SRC_IMG and update LAST_SLOT^.- **)
+ (** NAME with the help of LINE_INFO. **)
+ NEW (LAST_SLOT^.NEXT_SLOT);
+ LAST_SLOT := LAST_SLOT^.NEXT_SLOT;
+ WITH LAST_SLOT^ DO
+ BEGIN
+ SP_INIT_STR (NAME);
+ ST_INIT_SEG (SRC_IMG);
+ STUB_REF := NIL;
+ ST_INIT_SEG (CODE);
+ NEXT_SLOT := NIL;
+ ST_PUT_SEG (SOURCE_LINE, SRC_IMG);
+ SP_CONC_STR (NAME, LINE_INFO.LINE_ID);
+ END (*WITH*);
+ (********* End of BUILD_CODE_STRUCT (7) ********)
+ END (*IF*);
+ END(*IF*);
+ END;
+ L2:
+ BEGIN
+ (***************** BUILD_CODE_STRUCT (8) ***************)
+ (** End of the previous slot or stub segment. Scan **)
+ (** LAST_<x>^.SRC_IMG for options and store them in **)
+ (** LAST_<x>^.OPTIONS. Add the buffer to LINE_INFO.- **)
+ (** LINE_ID after that. <x> reads "STUB" for a stub **)
+ (** and "SLOT" for a slot- or code-segment. **)
+ IF (SEGMENT_TYPE = STUB) THEN
+ BEGIN
+ WITH LAST_STUB^ DO
+ SCAN_OPTIONS (OPTIONS, SRC_IMG, RUN_INFO, SEGMENT_TYPE)
+ END
+ ELSE
+ BEGIN
+ WITH LAST_SLOT^ DO
+ SCAN_OPTIONS (OPTIONS, SRC_IMG, RUN_INFO, SEGMENT_TYPE);
+ END (*IF*);
+ LINE_INFO.OPTIONS := FALSE;
+ SP_ADD_BUFFER (LINE_INFO.LINE_ID);
+ (************* End of BUILD_CODE_STRUCT (8) ************)
+
+ END_OF_STUB_BLOCK := TRUE;
+ SEGMENT_TYPE := END_STUB;
+
+ (***************** BUILD_CODE_STRUCT (9) ***************)
+ (** Start of the end segment. Link slot into its posi- **)
+ (** tion, let LAST_SLOT point to it and initialize its **)
+ (** fields. Add SOURCE_LINE to the segment LAST_SLOT^.- **)
+ (** SRC_IMG and update LAST_SLOT^.NAME using the infor- **)
+ (** mation of LINE_INFO. **)
+ IF LAST_SLOT<>NIL THEN
+ BEGIN
+ NEW (LAST_SLOT^.NEXT_SLOT);
+ LAST_SLOT := LAST_SLOT^.NEXT_SLOT;
+ END
+ ELSE
+ BEGIN
+ NEW (LAST_STUB^.SLOTS);
+ LAST_SLOT := LAST_STUB^.SLOTS;
+ END (*IF*);
+ WITH LAST_SLOT^ DO
+ BEGIN
+ SP_INIT_STR (NAME);
+ ST_INIT_SEG (SRC_IMG);
+ STUB_REF := NIL;
+ ST_INIT_SEG (CODE);
+ NEXT_SLOT := NIL;
+ SCAN_OPTIONS (OPTIONS, SRC_IMG, RUN_INFO, SEGMENT_TYPE);
+ LINE_INFO.OPTIONS := FALSE;
+ ST_PUT_SEG (SOURCE_LINE, SRC_IMG);
+ SP_CONC_STR (NAME, LINE_INFO.LINE_ID);
+ END; (*WITH*)
+ (************* End of BUILD_CODE_STRUCT (9) ************)
+ END;
+ L3:
+ BEGIN
+ IF SEGMENT_TYPE = STUB THEN
+ BEGIN
+ (************* BUILD_CODE_STRUCT (10) **************)
+ (** Continuation line of the stub segment. Add **)
+ (** SOURCE_LINE to LAST_STUB^.SRC_IMG. Add buffer **)
+ (** to LINE_INFO.LINE_ID and update LAST_STUB^.NAME **)
+ (** using LINE_INFO. **)
+ WITH LAST_STUB^ DO
+ BEGIN
+ ST_PUT_LINE (SOURCE_LINE, SRC_IMG);
+ SP_ADD_BUFFER (LINE_INFO.LINE_ID);
+ SP_CONC_STR (NAME, LINE_INFO.LINE_ID);
+ END (*WITH*);
+ (********* End of BUILD_CODE_STRUCT (10) ***********)
+ END
+ ELSE IF SEGMENT_TYPE = SLOT THEN
+ BEGIN
+ (************* BUILD_CODE_STRUCT (11) **************)
+ (** Continuation of the current slot segment. **)
+ (** Add SOURCE_LINE to LAST_SLOT^.SRC_IMG, add the **)
+ (** buffer to LINE_INFO.LINE_ID and update LAST_- **)
+ (** SLOT^.NAME using LINE_INFO. **)
+ WITH LAST_SLOT^ DO
+ BEGIN
+ ST_PUT_LINE (SOURCE_LINE, SRC_IMG);
+ SP_ADD_BUFFER (LINE_INFO.LINE_ID);
+ SP_CONC_STR (NAME, LINE_INFO.LINE_ID);
+ END (*WITH*);
+ (********* End of BUILD_CODE_STRUCT (11) ***********)
+ END
+ ELSE
+ BEGIN
+ (************* BUILD_CODE_STRUCT (12) **************)
+ (** This orphan line cannot be paste to a stub- or **)
+ (** slot-segment. Generate an error message using **)
+ (** the information hold by SOURCE_LINE. **)
+ ST_INIT_SEG (SEGMENT);
+ STRING132.LENGTH := 0;
+ STRING132.BODY := EMPTY_STRING_FIXED;
+ DIAG (WARN, 'BUILD_C_S (12) ', SOURCE_LINE, SEGMENT, STRING132);
+ (********* End of BUILD_CODE_STRUCT (12) ***********)
+ END (*IF.IF*);
+ END;
+ L4:
+ BEGIN
+ IF SEGMENT_TYPE = STUB THEN
+ BEGIN
+ (************* BUILD_CODE_STRUCT (13) **************)
+ (** Continuation ofcurrent stub segment. Add **)
+ (** SOURCE_LINE to segment LAST_STUB^.SRC_IMG. **)
+ WITH LAST_STUB^ DO
+ ST_PUT_LINE (SOURCE_LINE, SRC_IMG);
+ (********* End of BUILD_CODE_STRUCT (13) ***********)
+ END
+ ELSE IF SEGMENT_TYPE = SLOT THEN
+ BEGIN
+ (************* BUILD_CODE_STRUCT (14) **************)
+ (** Continuation of current slot segment. Add **)
+ (** SOURCE_LINE to segment LAST_SLOT^.SRC_IMG. **)
+ WITH LAST_SLOT^ DO
+ ST_PUT_LINE (SOURCE_LINE, SRC_IMG);
+ (********* End of BUILD_CODE_STRUCT (14) ***********)
+ END
+ ELSE IF SEGMENT_TYPE = CODE THEN
+ BEGIN
+ (************* BUILD_CODE_STRUCT (15) **************)
+ (** Continuation of current code segment. Add **)
+ (** SOURCE_LINE to segment LAST_SLOT^.CODE. **)
+ WITH LAST_SLOT^ DO
+ ST_PUT_LINE (SOURCE_LINE, CODE);
+ (********* End of BUILD_CODE_STRUCT (15) ***********)
+ END (*IF.IF.IF*);
+ END;
+ L5:
+ BEGIN
+ IF SEGMENT_TYPE = STUB THEN
+ BEGIN
+ (************* BUILD_CODE_STRUCT (16) **************)
+ (** End of previous stub segment LAST_STUB^.- **)
+ (** SRC_IMG. Complete that segment by scanning **)
+ (** which are stored to LAST_STUB^.OPTIONS. **)
+ WITH LAST_STUB^ DO
+ SCAN_OPTIONS (OPTIONS, SRC_IMG, RUN_INFO, SEGMENT_TYPE);
+ LINE_INFO.OPTIONS := FALSE;
+ (********* End of BUILD_CODE_STRUCT (16) ***********)
+
+ IF (LAST_STUB^.OPTIONS.QUICK) AND
+ (FT_GET_LINE_LENGTH (SOURCE_LINE) = 0) THEN
+ BEGIN
+ (************* BUILD_CODE_STRUCT (17) **********)
+ (** End of current stub block. Set Boolean **)
+ (** END_OF_STUB_BLOCK to TRUE. **)
+ END_OF_STUB_BLOCK := TRUE;
+ (********* End of BUILD_CODE_STRUCT (17) *******)
+ END
+ ELSE
+ BEGIN
+ SEGMENT_TYPE := CODE;
+ (************* BUILD_CODE_STRUCT (18) **********)
+ (** Start of a new code-segment. Link a new **)
+ (** entry for this slot into its position. Let **)
+ (** LAST_SLOT refer to this slot and initialize **)
+ (** its fields. Add SOURCE_LINE to the new code **)
+ (** segment LAST_SLOT^.CODE. **)
+ NEW (LAST_STUB^.SLOTS);
+ LAST_SLOT := LAST_STUB^.SLOTS;
+ WITH LAST_SLOT^ DO
+ BEGIN
+ SP_INIT_STR (NAME);
+ ST_INIT_SEG (SRC_IMG);
+ STUB_REF := NIL;
+ ST_INIT_SEG (CODE);
+ NEXT_SLOT := NIL;
+ ST_PUT_SEG (SOURCE_LINE, CODE);
+ END (*WITH*);
+ (********* END OF BUILD_CODE-STRUCT (18) *******)
+ END (*IF.IF*);
+ END
+ ELSE IF SEGMENT_TYPE = SLOT THEN
+ BEGIN
+ SEGMENT_TYPE := CODE;
+ (************* BUILD_CODE_STRUCT (19) **************)
+ (** Start of a new code segment immediately follo- **)
+ (** wing a slot segment. Add SOURCE_LINE to the **)
+ (** to the code segment LAST_SLOT^.CODE. **)
+ WITH LAST_SLOT^ DO
+ ST_PUT_SEG (SOURCE_LINE, CODE);
+ (********* End of BUILD_CODE_STRUCT (19) ***********)
+ END
+ ELSE IF SEGMENT_TYPE = CODE THEN
+ BEGIN
+ IF (CODE_STRUCT.LAST_STUB^.OPTIONS.QUICK) AND
+ (FT_GET_LINE_LENGTH (SOURCE_LINE)=0) THEN
+ BEGIN
+ (************* BUILD_CODE_STRUCT (20) **********)
+ (** End of current stub block. Scan options **)
+ (** from LAST_SLOT^.SRC_IMG and store them in **)
+ (** LAST_SLOT^.OPTIONS. **)
+ SCAN_OPTIONS (LAST_SLOT^.OPTIONS, LAST_SLOT^.SRC_IMG,
+ RUN_INFO, SEGMENT_TYPE);
+ LINE_INFO.OPTIONS := FALSE;
+ (********* End of BUILD_CODE_STRUCT (20) *******)
+
+ END_OF_STUB_BLOCK := TRUE;
+ END
+ ELSE
+ BEGIN
+ (************* BUILD_CODE_STRUCT (21) **********)
+ (** Continuation of the code segment. Add **)
+ (** SOURCE_LINE to segment LAST_SLOT^.CODE. **)
+ WITH LAST_SLOT^ DO
+ ST_PUT_LINE (SOURCE_LINE, CODE);
+ (********* End of BUILD_CODE_STRUCT (21) *******)
+ END (*IF*);
+ END (*IF.IF.IF*);
+ END;
+ END (*CASE.WITH*);
+ END (*WHILE*);
+
+ IF (NOT END_OF_STUB_BLOCK) THEN
+ BEGIN
+ IF (NOT CODE_STRUCT.LAST_STUB^.OPTIONS.QUICK) THEN
+ BEGIN
+ (************* BUILD_CODE_STRUCT (22) ******************)
+ (** File exhausted but current stub block not closed by **)
+ (** a line of category L2. Issue an error using **)
+ (** FILE_SPEC. **)
+ STRING132.LENGTH := 0;
+ STRING132.BODY := EMPTY_STRING_FIXED;
+ FT_INIT_LINE (SOURCE_LINE);
+ DIAG (WARN, 'BUILD_C_S (22) ', SOURCE_LINE,
+ CODE_STRUCT.LAST_STUB^.SRC_IMG, STRING132);
+ (************* End of BUILD_CODE_STRUCT (22) ***********)
+ END
+ ELSE IF SEGMENT_TYPE = CODE THEN
+ BEGIN
+ (************* BUILD_CODE_STRUCT (23) ******************)
+ (** The last quick stub in the file didn't end with an **)
+ (** L5-line, but with EOF. So the options from LAST_- **)
+ (** SLOT.SRC_IMG must be scanned and stored in LAST_- **)
+ (** SLOT.OPTIONS here. **)
+ SCAN_OPTIONS (LAST_SLOT^.OPTIONS, LAST_SLOT^.SRC_IMG,
+ RUN_INFO, SEGMENT_TYPE);
+ LINE_INFO.OPTIONS := FALSE;
+ (************* End of BUILD_CODE_STRUCT (23) ***********)
+ END (*IF*);
+ END (*IF*);
+ (************* End of BUILD_CODE_STRUCT (body) *****************)
+
+ END (*PROCEDURE BUILD_CODE_STRUCT*);
+
+
+ (*********************************************************************)
+ (* Routine: SCAN_FILES - SCAN all source FILES. *)
+ (* Purpose: To coordinate the scanning of all the sourcefiles on *)
+ (* file level. More detailed activities are delegated. *)
+ (* Interface: RUN_INFO: Structure containing all needed info *)
+ (* for this CLIP run. *)
+ (* CODE_STRUCT: Internal representation of stub-, *)
+ (* slot- and code-segments. *)
+ (*********************************************************************)
+ PROCEDURE SCAN_FILES (VAR CODE_STRUCT: CODE_STRUCT_;
+ RUN_INFO: RUN_INFO_);
+
+ VAR
+ SCAN_FILE_STOP: BOOLEAN;
+ FILE_CNT: INTEGER;
+ I: INTEGER;
+ LINE_INFO: LINE_INFO_ ;
+ SOURCE_LINE: LINE_DES_ ;
+ DUMMY: ERROR_CODE_;
+ STRING132: STRING132_;
+ SEGMENT: SEGMENT_DES_;
+
+ BEGIN
+ (******* SCAN_FILES (body) *******)
+ SCAN_FILE_STOP := FALSE;
+
+ (********************* SCAN_FILES (1) **************************)
+ (** Try to open all source files of which the names are kept by **)
+ (** RUN_INFO. List inaccessible files. Set SCAN_FILE_STOP to **)
+ (** TRUE when at least one file gives a problem. **)
+ WITH RUN_INFO DO
+ FOR FILE_CNT := 1 TO NR_SRC_FILES DO
+ BEGIN
+ IF FT_CHECK_FILE (SOURCE_FILES [FILE_CNT]) <> 0 THEN
+ BEGIN
+ WRITE ('ERROR checking source file: ');
+ FOR I := 1 TO SOURCE_FILES [FILE_CNT].LENGTH DO
+ WRITE (SOURCE_FILES [FILE_CNT].BODY [I]);
+ WRITELN;
+
+ IF REPORT_OK THEN
+ BEGIN
+ WRITE (REPORT_FILE, 'ERROR checking source file: ');
+ FOR I := 1 TO SOURCE_FILES [FILE_CNT].LENGTH DO
+ WRITE (REPORT_FILE, SOURCE_FILES [FILE_CNT].BODY [I]);
+ WRITELN (REPORT_FILE);
+ END (*IF*);
+
+ SCAN_FILE_STOP := TRUE;
+ END (*IF*);
+ END (*FOR.WITH*);
+ (***************** End of SCAN_FILES (1) ***********************)
+
+ IF NOT SCAN_FILE_STOP THEN
+ BEGIN
+ (********************* SCAN_FILES (2) **********************)
+ (** Build CODE_STRUCT from the source files specified by **)
+ (** RUN_INFO. **)
+ FOR FILE_CNT := 1 TO RUN_INFO.NR_SRC_FILES DO
+ BEGIN
+ (* Open and reset file with given specification using *)
+ (* the function FT_INOPEN from the module FT. *)
+ IF FT_INOPEN (RUN_INFO.SOURCE_FILES [FILE_CNT]) <= 0 THEN
+ BEGIN
+ WRITE ('Scanning file: ');
+ FOR I := 1 TO RUN_INFO.SOURCE_FILES [FILE_CNT].LENGTH DO
+ WRITE (RUN_INFO.SOURCE_FILES [FILE_CNT].BODY[I]);
+ WRITELN;
+
+ IF REPORT_OK THEN
+ BEGIN
+ WRITE (REPORT_FILE, 'Scanning file: ');
+ FOR I := 1 TO RUN_INFO.SOURCE_FILES [FILE_CNT].LENGTH DO
+ WRITE (REPORT_FILE,
+ RUN_INFO.SOURCE_FILES [FILE_CNT].BODY[I]);
+ WRITELN (REPORT_FILE);
+ END (*IF*);
+
+ WHILE NOT FT_EOF DO
+ BEGIN
+ (* Read the next line from the source file and *)
+ (* initialize LINE_INFO and the Buffer. *)
+ FT_RDLN (SOURCE_LINE);
+ WITH LINE_INFO DO
+ OPTIONS := FALSE;
+ SP_INIT_BUFFER;
+
+ (* Determine the category this line belongs to. *)
+ WITH RUN_INFO DO
+ BEGIN
+ IF SOURCE_LINE.USED >
+ CLIP_LPAR.LENGTH + CLIP_RPAR.LENGTH THEN
+ SCAN_LINE (LINE_INFO, SOURCE_LINE, RUN_INFO)
+ ELSE
+ LINE_INFO.CATEGORY := L5;
+ END (*WITH*);
+
+ (* Proces this line according to its catagory. *)
+ CASE LINE_INFO.CATEGORY OF
+ L1:
+ BEGIN
+ (************* SCAN_FILES (2.1) ********************)
+ (** Start of a new stub. Switch to active mode and **)
+ (** build CODE_STRUCT from successive lines using **)
+ (** RUN_INFO, SOURCE_LINE and LINE_INFO. **)
+
+ BUILD_CODE_STRUCT (CODE_STRUCT, RUN_INFO, SOURCE_LINE, LINE_INFO);
+
+ (************* End of SCAN_FILES (2.1) *************)
+ END;
+ L2:
+ BEGIN
+ (************* SCAN_FILES (2.2) ********************)
+ (** Illegal in passive mode. Generate an error from **)
+ (** the information in SOURCE_LINE. **)
+ ST_INIT_SEG (SEGMENT);
+ STRING132.BODY := EMPTY_STRING_FIXED;
+ STRING132.LENGTH := 0;
+ DIAG (WARN, 'SCAN_FILES (2.2) ', SOURCE_LINE, SEGMENT, STRING132);
+ (************* End of SCAN_FILES (2.2) *************)
+ END;
+ L3:
+ BEGIN
+ (************* SCAN_FILES (2.3) ********************)
+ (** Illegal in passive mode. Generate an error from **)
+ (** the information in SOURCE_LINE. **)
+ ST_INIT_SEG (SEGMENT);
+ STRING132.LENGTH := 0;
+ STRING132.BODY := EMPTY_STRING_FIXED;
+ DIAG (ERR, 'SCAN_FILES (2.3) ', SOURCE_LINE, SEGMENT, STRING132);
+ (************* End of SCAN_FILES (2.3) *************)
+ END;
+ L4,
+ L5:
+ BEGIN
+ (* Nothing to be done. Flush this line. *)
+ END;
+ END (*CASE*);
+ END (*WHILE*);
+ DUMMY := FT_INCLOSE;
+ END
+ ELSE
+ BEGIN
+ (********************* SCAN_FILES (2.4) ********************)
+ (** Access problem with this source file. Issue error using **)
+ (** its specification in RUN_INFO. **)
+ WITH RUN_INFO DO
+ BEGIN
+ WRITE ('ERROR opening source file: ');
+ FOR I := 1 TO SOURCE_FILES [FILE_CNT].LENGTH DO
+ WRITE (SOURCE_FILES [FILE_CNT].BODY [I]);
+ WRITELN;
+
+ IF REPORT_OK THEN
+ BEGIN
+ WRITE (REPORT_FILE, 'ERROR opening source file: ');
+ FOR I := 1 TO SOURCE_FILES [FILE_CNT].LENGTH DO
+ WRITE (REPORT_FILE, SOURCE_FILES [FILE_CNT].BODY [I]);
+ WRITELN (REPORT_FILE);
+ END (*IF*);
+ END (*WITH*);
+ (***************** End of SCAN_FILES (2.4) *****************)
+ END (*IF*);
+ END (*FOR*);
+ (***************** End of SCAN_FILES (2) *******************)
+ END (*IF*);
+ (***************** End of SCAN_FILES (body) ********************)
+ END (*PROCEDURE SCAN_FILES*);
+
+
+ (*********************************************************************)
+ (* Routine: CHECK_CIRC - CHECK FOR CIRCularity. *)
+ (* Purpose: To check possible circularity of CODE_STRUCT. *)
+ (* Interface: CODE_STRUCT - Structure to be examined. *)
+ (* LIST_HEAD - First element of shadow list. *)
+ (*********************************************************************)
+ PROCEDURE CHECK_CIRC (VAR CODE_STRUCT: CODE_STRUCT_;
+ LIST_HEAD: SHADOW_PTR_);
+
+ VAR
+ MAIN_STUB: STB_PTR_;
+ SHADOW_STUB: SHADOW_PTR_;
+ STUB: STB_PTR_;
+ CIRCULARITY,
+ REMOVED: BOOLEAN;
+
+ (******* CHECK_CIRC routines *******)
+
+ (*********************************************************************)
+ (* Routine: LOCATE_CIRC - LOCATE CIRCularity. *)
+ (* Purpose: Locate and remove circularity in CODE_STRUCT. *)
+ (* Interface: CODE_STRUCT - The structure to be checked. *)
+ (* STUB - The stub currently checked. *)
+ (* CIRCULARITY - Flags if circularity is detected. *)
+ (* REMOVED - Flags if circularity is removed. *)
+ (*********************************************************************)
+ PROCEDURE LOCATE_CIRC (VAR CODE_STRUCT: CODE_STRUCT_;
+ VAR STUB: STB_PTR_;
+ VAR CIRCULARITY: BOOLEAN;
+ VAR REMOVED: BOOLEAN);
+
+ (******* LOCATE_CIRC labels (#Quick) *******)
+ LABEL
+ MYEXIT;
+
+ VAR
+ SLOT: SLT_PTR_;
+ HELP_STUB: STB_PTR_;
+ TWIN_STUB: STB_PTR_;
+
+ (******* LOCATE_CIRC routines *******)
+
+ (*********************************************************************)
+ (* Routine: TRACEBACK *)
+ (* Purpose: -In case of an unremoved circularity: Remove circu- *)
+ (* larity and show the responsible slot. *)
+ (* -Show a stub of the circularity-chain. *)
+ (* Interface: STUB - The stub, which was being checked. *)
+ (* SLOT - The slot, at which STUB is pointing. *)
+ (* REMOVED - Flags if the circularity is removed. *)
+ (*********************************************************************)
+ PROCEDURE TRACEBACK ( STUB: STB_PTR_;
+ SLOT: SLT_PTR_;
+ VAR REMOVED: BOOLEAN);
+ BEGIN
+ IF NOT REMOVED THEN
+ BEGIN
+ SLOT^.STUB_REF := NIL;
+ REMOVED := TRUE;
+ WRITELN('Circularity detected !!! TRACE BACK:');
+ WRITELN ('slot:');
+ ST_WRITE_SEG (SLOT^.SRC_IMG, 0, 0);
+ WRITELN;
+
+ IF REPORT_OK THEN
+ BEGIN
+ WRITELN (REPORT_FILE,
+ 'Circularity detected !!! TRACE BACK:');
+ WRITELN (REPORT_FILE, 'slot:');
+ ST_WRITE_SEG (SLOT^.SRC_IMG, 0, 3);
+ WRITELN (REPORT_FILE);
+ END (*IF*);
+
+ END(*IF*);
+ IF NOT SP_IS_EMPTY_STR (STUB^.OPTIONS.FILE_NAME) THEN
+ BEGIN
+ WRITELN ('Main stub:');
+ ST_WRITE_SEG (STUB^.SRC_IMG, 0, 0);
+ WRITELN ('------------------------------------',
+ '------------------------------------');
+
+ IF REPORT_OK THEN
+ BEGIN
+ WRITELN (REPORT_FILE, 'Main stub:');
+ ST_WRITE_SEG (STUB^.SRC_IMG, 0, 3);
+ WRITELN (REPORT_FILE,
+ '------------------------------------',
+ '------------------------------------');
+ END (*IF*);
+ END
+ ELSE
+ BEGIN
+ WRITELN ('Stub:');
+ ST_WRITE_SEG (STUB^.SRC_IMG, 0, 0);
+
+ IF REPORT_OK THEN
+ BEGIN
+ WRITELN (REPORT_FILE, 'Stub:');
+ ST_WRITE_SEG (STUB^.SRC_IMG, 0, 3);
+ END (*IF*);
+ END (*IF*);
+ WRITELN;
+ END (*TRACEBACK*);
+ (********************* End of LOCATE_CIRC routines *****************)
+
+ BEGIN
+ (******* LOCATE_CIRC (body) *******)
+ WITH STUB^ DO
+ BEGIN
+ CIRCULARITY := STUB^.VISITED;
+ IF NOT CIRCULARITY THEN
+ BEGIN
+ STUB^.VISITED := TRUE;
+ SLOT := STUB^.SLOTS;
+
+ (********************* LOCATE_CIRC (1) *********************)
+ (** Check if the SLOTs of STUB are pointing at any stubs. **)
+ (** If so, locate circularities in these stubs and their **)
+ (** structure behind. Leave this level of the procedure **)
+ (** through MYEXIT in case of circularity. **)
+ WHILE SLOT <> NIL DO
+ BEGIN
+ IF SLOT^.STUB_REF <> NIL THEN
+ BEGIN
+ LOCATE_CIRC(CODE_STRUCT,SLOT^.STUB_REF,
+ CIRCULARITY,REMOVED);
+ IF CIRCULARITY THEN
+ BEGIN
+ (***************** LOCATE_CIRC (1.1) *******************)
+ (** Remove the link causing the circularity in CODE_- **)
+ (** STRUCT, if not removed already. Mention STUB in the **)
+ (** traceback. If this STUB is a main stub, set CIRCU- **)
+ (** RITY, REMOVED and VISITED of all next stubs back to **)
+ (** FALSE and locate circularities in this new CODE_- **)
+ (** STRUCT. Leave this level of the procedure through **)
+ (** MYEXIT. **)
+ TRACEBACK (STUB, SLOT, REMOVED);
+ IF NOT SP_IS_EMPTY_STR (STUB^.OPTIONS.FILE_NAME) THEN
+ BEGIN
+ CIRCULARITY := FALSE;
+ REMOVED := FALSE;
+ HELP_STUB := STUB;
+ WHILE HELP_STUB <> NIL DO
+ BEGIN
+ HELP_STUB^.VISITED := FALSE;
+ HELP_STUB := HELP_STUB^.NEXT_STUB;
+ END (*WHILE*);
+ LOCATE_CIRC (CODE_STRUCT, STUB, CIRCULARITY, REMOVED);
+ END(*IF*);
+ GOTO MYEXIT;
+ (************* End of LOCATE_CIRC (1.1) ****************)
+ END (*IF*);
+
+ (***************** LOCATE_CIRC (1.2) ***********************)
+ (** Check if SLOT^.STUB_REF is pointing at any twin stubs. **)
+ (** If so, locate circularities in these stubs. In case of **)
+ (** circularity, remove the responsible link, if not **)
+ (** removed already, mention STUB in the traceback and **)
+ (** leave this level of the procedure through MYEXIT. **)
+ TWIN_STUB := SLOT^.STUB_REF^.NEXT_TWIN;
+ WHILE TWIN_STUB <> NIL DO
+ BEGIN
+ LOCATE_CIRC (CODE_STRUCT, TWIN_STUB, CIRCULARITY, REMOVED);
+ IF CIRCULARITY THEN
+ BEGIN
+ TRACEBACK (STUB, SLOT, REMOVED);
+ GOTO MYEXIT;
+ END (*IF*);
+ TWIN_STUB := TWIN_STUB^.NEXT_TWIN;
+ END (*WHILE*);
+ (************* End of LOCATE_CIRC (1.2) ********************)
+
+ SLOT^.STUB_REF^.VISITED := FALSE;
+ END (*IF*);
+ SLOT := SLOT^.NEXT_SLOT;
+ END (*WHILE*);
+ (***************** End of LOCATE_CIRC (1) ******************)
+
+ STUB^.VISITED := FALSE;
+ END (*IF*);
+ END (*WITH*);
+ MYEXIT:
+ (***************** End of LOCATE_CIRC (body) *******************)
+ END (*PROCEDURE LOCATE_CIRC*);
+ (***************** End of procedure LOCATE_CIRC ********************)
+
+ BEGIN
+ SHADOW_STUB := LIST_HEAD;
+ WHILE SHADOW_STUB <> NIL DO
+ BEGIN
+ MAIN_STUB := NIL;
+
+ WITH SHADOW_STUB^.STUB_POINTER^ DO
+ BEGIN
+ IF NOT SP_IS_EMPTY_STR (OPTIONS.FILE_NAME) THEN
+ MAIN_STUB := SHADOW_STUB^.STUB_POINTER;
+ END (*WITH*);
+
+ IF MAIN_STUB <> NIL THEN
+ BEGIN
+ STUB := CODE_STRUCT.FIRST_STUB;
+ WHILE STUB <> NIL DO
+ BEGIN
+ STUB^.VISITED := FALSE;
+ STUB := STUB^.NEXT_STUB;
+ END (*WHILE*);
+
+ CIRCULARITY := FALSE;
+ REMOVED := FALSE;
+ LOCATE_CIRC (CODE_STRUCT, MAIN_STUB, CIRCULARITY, REMOVED);
+ END (*IF*);
+ SHADOW_STUB := SHADOW_STUB^.NEXT;
+ END (*WHILE*)
+ END (*PROCEDURE CHECK_CIRC*);
+
+
+ (*********************************************************************)
+ (* Routine: ORDER_TWINS - ORDER TWIN stub chains. *)
+ (* Purpose: To (re)order the chains of twin stubs. *)
+ (* Interface: SHADOW_LIST: The list of pointers to the first *)
+ (* elements of the twin stub chain. *)
+ (* CODE_STRUCT: Structure of stubs and slots. *)
+ (* LIST_HEAD: Pointer to first element of the *)
+ (* shadow_list. *)
+ (*********************************************************************)
+ PROCEDURE ORDER_TWINS (VAR SHADOW_LIST: SHADOW_LIST_;
+ VAR CODE_STRUCT: CODE_STRUCT_;
+ VAR LIST_HEAD: SHADOW_PTR_);
+
+ VAR
+ FIRST_TWIN: STB_PTR_;
+ SHADOW_STUB: SHADOW_PTR_;
+ PREV_SHADOW_STUB: SHADOW_PTR_;
+ TWIN_STUB: STB_PTR_;
+ PREV_TWIN: STB_PTR_;
+ CONTINUE: BOOLEAN;
+ LAST_TWIN: STB_PTR_;
+ SEPARATOR_STUB: STB_PTR_;
+ STUB_WALKER: STB_PTR_;
+ HELP_STUB: STB_PTR_;
+ ERROR: BOOLEAN;
+ DUMMY_LINE: LINE_DES_;
+ STRING132: STRING132_;
+
+ BEGIN
+ (********************* ORDER_TWINS body ************************)
+ PREV_SHADOW_STUB := NIL;
+ SHADOW_STUB := LIST_HEAD;
+ WHILE SHADOW_STUB <> NIL DO
+ BEGIN
+ FIRST_TWIN := SHADOW_STUB^.STUB_POINTER;
+
+ (************************ ORDER_TWINS (1) *********************)
+ (** Order the twin stub chain headed by FIRST_TWIN. Make sure **)
+ (** that its first element remains accessible through by **)
+ (** SHADOW_STUB. **)
+ PREV_TWIN := NIL;
+ TWIN_STUB := FIRST_TWIN;
+ WHILE TWIN_STUB <> NIL DO
+ BEGIN
+ IF TWIN_STUB^.OPTIONS.DEFAULT THEN
+ BEGIN
+ (********************* ORDER_TWINS (1.1) *******************)
+ (** Remove the TWIN_STUB from the list if it is no longer **)
+ (** needed. Update SHADOW_LIST if needed. **)
+ IF (TWIN_STUB^.NEXT_TWIN <> NIL) AND
+ (PREV_TWIN = NIL)
+ THEN SHADOW_STUB^.STUB_POINTER := TWIN_STUB^.NEXT_TWIN
+ ELSE IF (TWIN_STUB^.NEXT_TWIN <> NIL) AND
+ (PREV_TWIN <> NIL)
+ THEN PREV_TWIN^.NEXT_TWIN := TWIN_STUB^.NEXT_TWIN
+ ELSE IF (TWIN_STUB^.NEXT_TWIN = NIL) AND
+ (PREV_TWIN <> NIL)
+ THEN PREV_TWIN^.NEXT_TWIN := NIL
+ ELSE
+ BEGIN
+ (* Nothing remains to be done here. *)
+ END(*IF.IF.IF*);
+ (***************** End of ORDER_TWINS (1.1) ****************)
+ END (*IF*);
+ IF TWIN_STUB^.OPTIONS.LEADER THEN
+ BEGIN
+ (********************* ORDER_TWINS (1.2) *******************)
+ (** Remove TWIN_STUB and put it ahead of the twin stub **)
+ (** chain. Remove SHADOW_STUB from SHADOW_LIST if TWIN_STUB **)
+ (** is no longer needed. **)
+ IF (TWIN_STUB^.NEXT_TWIN = NIL) AND (PREV_TWIN = NIL) THEN
+ BEGIN
+ IF PREV_SHADOW_STUB = NIL THEN
+ BEGIN
+ LIST_HEAD := SHADOW_STUB^.NEXT;
+ SHADOW_STUB := LIST_HEAD;
+ PREV_SHADOW_STUB := NIL;
+ END
+ ELSE
+ BEGIN
+ PREV_SHADOW_STUB^.NEXT := SHADOW_STUB^.NEXT;
+ SHADOW_STUB := PREV_SHADOW_STUB;
+ END (*IF*);
+ END
+ ELSE IF (TWIN_STUB^.NEXT_TWIN <> NIL) AND (PREV_TWIN <> NIL) THEN
+ BEGIN
+ PREV_TWIN^.NEXT_TWIN := TWIN_STUB^.NEXT_TWIN;
+ TWIN_STUB^.NEXT_TWIN := FIRST_TWIN;
+ SHADOW_STUB^.STUB_POINTER := TWIN_STUB;
+ TWIN_STUB := PREV_TWIN;
+ FIRST_TWIN := SHADOW_STUB^.STUB_POINTER;
+ END
+ ELSE IF (TWIN_STUB^.NEXT_TWIN = NIL) AND (PREV_TWIN <> NIL) THEN
+ BEGIN
+ PREV_TWIN^.NEXT_TWIN := NIL;
+ TWIN_STUB^.NEXT_TWIN := FIRST_TWIN;
+ SHADOW_STUB^.STUB_POINTER := TWIN_STUB;
+ TWIN_STUB := PREV_TWIN;
+ FIRST_TWIN := SHADOW_STUB^.STUB_POINTER;
+ END
+ ELSE
+ BEGIN
+ (* Leader stub is in place,nothing remains to be *)
+ (* done here. *)
+ END (*IF.IF.IF*);
+ (***************** End of ORDER_TWINS (1.2) ****************)
+ END (*IF*);
+ IF TWIN_STUB^.OPTIONS.TRAILER THEN
+ BEGIN
+ (********************* ORDER_TWINS (1.3) *******************)
+ (** Remove TWIN_STUB and put it at the tail of the twin **)
+ (** stub chain. **)
+
+ (* Locate the last stub in the twin stub chain *)
+ LAST_TWIN := TWIN_STUB;
+ WHILE LAST_TWIN^.NEXT_TWIN <> NIL DO
+ LAST_TWIN := LAST_TWIN^.NEXT_TWIN;
+ IF (TWIN_STUB^.NEXT_TWIN = NIL) AND (PREV_TWIN = NIL) THEN
+ BEGIN
+ IF PREV_SHADOW_STUB = NIL THEN
+ BEGIN
+ LIST_HEAD := SHADOW_STUB^.NEXT;
+ SHADOW_STUB := LIST_HEAD;
+ PREV_SHADOW_STUB := NIL;
+ END
+ ELSE
+ BEGIN
+ PREV_SHADOW_STUB^.NEXT := SHADOW_STUB^.NEXT;
+ SHADOW_STUB := PREV_SHADOW_STUB;
+ END (*IF*);
+ END
+ ELSE IF (TWIN_STUB^.NEXT_TWIN <> NIL) AND (PREV_TWIN <> NIL) THEN
+ BEGIN
+ PREV_TWIN^.NEXT_TWIN := TWIN_STUB^.NEXT_TWIN;
+ LAST_TWIN^.NEXT_TWIN := TWIN_STUB;
+ LAST_TWIN := LAST_TWIN^.NEXT_TWIN;
+ LAST_TWIN^.NEXT_TWIN := NIL;
+ TWIN_STUB := PREV_TWIN;
+ END
+ ELSE IF (TWIN_STUB^.NEXT_TWIN <> NIL) AND (PREV_TWIN = NIL) THEN
+ BEGIN
+ SHADOW_STUB^.STUB_POINTER := TWIN_STUB^.NEXT_TWIN;
+ LAST_TWIN^.NEXT_TWIN := TWIN_STUB;
+ LAST_TWIN := LAST_TWIN^.NEXT_TWIN;
+ LAST_TWIN^.NEXT_TWIN := NIL;
+ FIRST_TWIN := SHADOW_STUB^.STUB_POINTER;
+ TWIN_STUB := FIRST_TWIN;
+ PREV_TWIN := NIL;
+ END
+ ELSE
+ BEGIN
+ (* Trailer stub is in position. Nothing remains *)
+ (* to be done. *)
+ END (*IF.IF.IF*);
+ (***************** End of ORDER_TWINS (1.3) ****************)
+ END (*IF*);
+ PREV_TWIN := TWIN_STUB;
+ TWIN_STUB := TWIN_STUB^.NEXT_TWIN;
+ END (*WHILE*);
+ TWIN_STUB := FIRST_TWIN;
+ PREV_TWIN := NIL;
+ CONTINUE := TRUE;
+ WHILE (TWIN_STUB^.NEXT_TWIN <> NIL) AND (CONTINUE) DO
+ BEGIN
+ IF TWIN_STUB^.OPTIONS.SEPARATOR THEN
+ BEGIN
+ (********************* ORDER_TWINS (1.4) *******************)
+ (** Copy the seperator TWIN_STUB in between all other stubs **)
+ (** of the twin stub chain. **)
+ IF PREV_TWIN = NIL THEN
+ BEGIN
+ FIRST_TWIN := TWIN_STUB^.NEXT_TWIN;
+ SHADOW_STUB^.STUB_POINTER := FIRST_TWIN;
+ SEPARATOR_STUB := TWIN_STUB;
+ END
+ ELSE
+ BEGIN
+ PREV_TWIN^.NEXT_TWIN := TWIN_STUB^.NEXT_TWIN;
+ SEPARATOR_STUB := TWIN_STUB;
+ TWIN_STUB := PREV_TWIN;
+ END (*IF*);
+ STUB_WALKER := FIRST_TWIN;
+ WHILE STUB_WALKER^.NEXT_TWIN <> NIL DO
+ BEGIN
+ HELP_STUB := STUB_WALKER^.NEXT_TWIN;
+ NEW (STUB_WALKER^.NEXT_TWIN);
+ STUB_WALKER := STUB_WALKER^.NEXT_TWIN;
+ STUB_WALKER^ := SEPARATOR_STUB^;
+ STUB_WALKER^.NEXT_TWIN := HELP_STUB;
+ STUB_WALKER := HELP_STUB;
+ END (*WHILE*);
+ (***************** End of ORDER_TWINS (1.4) ****************)
+
+ CONTINUE := FALSE;
+ END (*IF*);
+ PREV_TWIN := TWIN_STUB;
+ TWIN_STUB := TWIN_STUB^.NEXT_TWIN;
+ END (*WHILE*);
+
+ (************************* ORDER_TWINS (1.5) ***********************)
+ (** Examine the twin stub chain accessible by FIRST_TWIN. Generate **)
+ (** a diagnostic message in case the chain contains only LEADER, **)
+ (** SEPARATOR and TRAILER stubs. **)
+ ERROR := TRUE;
+ STUB_WALKER := FIRST_TWIN;
+ WHILE (STUB_WALKER <> NIL) AND (ERROR = TRUE) DO
+ BEGIN
+ IF (NOT STUB_WALKER^.OPTIONS.LEADER) AND
+ (NOT STUB_WALKER^.OPTIONS.SEPARATOR) AND
+ (NOT STUB_WALKER^.OPTIONS.TRAILER) THEN
+ ERROR := FALSE;
+ STUB_WALKER := STUB_WALKER^.NEXT_TWIN;
+ END (*WHILE*);
+ IF (STUB_WALKER = NIL) AND (ERROR) THEN
+ BEGIN
+ STRING132.LENGTH := 0;
+ STRING132.BODY := EMPTY_STRING_FIXED;
+ FT_INIT_LINE (DUMMY_LINE);
+ DIAG(WARN, 'ORDER_TWINS (1.5) ', DUMMY_LINE,
+ FIRST_TWIN^.SRC_IMG, STRING132);
+ IF PREV_SHADOW_STUB = NIL THEN
+ BEGIN
+ LIST_HEAD := SHADOW_STUB^.NEXT;
+ SHADOW_STUB := LIST_HEAD;
+ PREV_SHADOW_STUB := NIL;
+ END
+ ELSE
+ BEGIN
+ PREV_SHADOW_STUB^.NEXT := SHADOW_STUB^.NEXT;
+ SHADOW_STUB := PREV_SHADOW_STUB;
+ END (*IF*);
+ END
+ ELSE
+ BEGIN
+ (* The twin stub chain is ok and nothing remains to be *)
+ (* done here. *)
+ END (*IF*);
+ (********************* End of ORDER_TWINS (1.5) ********************)
+
+ (********************* End of ORDER_TWINS (1) ******************)
+
+ PREV_SHADOW_STUB := SHADOW_STUB;
+ SHADOW_STUB := SHADOW_STUB^.NEXT;
+ END (*WHILE*);
+ (***************** End of ORDER_TWINS (body) *******************)
+ END (*PROCEDURE ORDER_TWINS*);
+
+
+ (*********************************************************************)
+ (* Routine: ANALYSE - ANALYSEr phase *)
+ (* Purpose: To analyse the structure of stubs and slots. *)
+ (* Interface: Input: CODE_STRUCT - the structure to be analyzed. *)
+ (* Output: CODE_STRUCT - the analyzed structure. *)
+ (*********************************************************************)
+ PROCEDURE ANALYSE (VAR CODE_STRUCT: CODE_STRUCT_);
+
+ VAR
+ SHADOW_LIST: SHADOW_LIST_;
+ LIST_HEAD: SHADOW_PTR_;
+ STRING132: STRING132_;
+ LAST_SHADOW: SHADOW_PTR_;
+ STUB: STB_PTR_;
+ LOCATED: BOOLEAN;
+ SHADOW_STUB: SHADOW_PTR_;
+ CANDIDATE_TWIN: STB_PTR_;
+ SLOT: SLT_PTR_;
+ STUB_REF: STB_PTR_;
+ DUMMY_LINE: LINE_DES_;
+
+ BEGIN
+ (********************* ANALYSE body ****************************)
+
+ LIST_HEAD := NIL;
+
+ (************************* ANALYSE (1) *************************)
+ (** Build SHADOW_LIST from the stub chain of CODE_STRUCT. Make **)
+ (** first element of SHADOW_LIST accessible by LIST_HEAD **)
+ STUB := CODE_STRUCT.FIRST_STUB;
+ IF STUB <> NIL THEN
+ BEGIN
+ NEW (LIST_HEAD);
+ LAST_SHADOW := LIST_HEAD;
+ LAST_SHADOW^.NEXT := NIL;
+ LAST_SHADOW^.STUB_POINTER := STUB;
+ STUB := STUB^.NEXT_STUB;
+ WHILE STUB <> NIL DO
+ BEGIN
+ (********************* ANALYSE (1.1) ***********************)
+ (** Check if STUB^.NAME is already linked in SHADOW_LIST. **)
+ (** If not, make a new entry for this stub in SHADOW_LIST **)
+ (** and update LAST_SHADOW. **)
+ IF SP_IS_EMPTY_STR (STUB^.NAME) THEN
+ LOCATED := FALSE
+ ELSE
+ BEGIN
+ SHADOW_STUB := LIST_HEAD;
+ LOCATED := FALSE;
+ WHILE (NOT LOCATED) AND (SHADOW_STUB <> NIL) DO
+ BEGIN
+ IF SP_EQ (SHADOW_STUB^.STUB_POINTER^.NAME, STUB^.NAME) THEN
+ LOCATED := TRUE;
+ SHADOW_STUB := SHADOW_STUB^.NEXT;
+ END (*WHILE*);
+ END (*IF*);
+ IF NOT LOCATED THEN
+ BEGIN
+ NEW (LAST_SHADOW^.NEXT);
+ LAST_SHADOW := LAST_SHADOW^.NEXT;
+ LAST_SHADOW^.STUB_POINTER := STUB;
+ LAST_SHADOW^.NEXT := NIL;
+ END (*IF*);
+ (***************** End of ANALYSE (1.1) ********************)
+
+ STUB := STUB^.NEXT_STUB;
+ END (*WHILE*);
+ END (*IF*);
+ (************************* End of ANALYSE (1) **********************)
+
+ IF LIST_HEAD <> NIL THEN
+ BEGIN
+ (************************ ANALYSE (2) **********************)
+ (** Link stubs with identical names into a twin stub chain **)
+ (** using NEXT_TWIN of the stub descriptor. Start each twin **)
+ (** stub chain with the stub accessible by SHADOW_LIST. **)
+ SHADOW_STUB := LIST_HEAD;
+ WHILE SHADOW_STUB <> NIL DO
+ BEGIN
+ STUB := SHADOW_STUB^.STUB_POINTER;
+ IF NOT SP_IS_EMPTY_STR(STUB^.NAME) THEN
+ WHILE STUB <> NIL DO
+ BEGIN
+ (***************** ANALYSE (2.1) *******************)
+ (** Read through the list of stubs starting with **)
+ (** STUB and set STUB^.NEXT_TWIN if a stub with **)
+ (** the same name as STUB^.NAME found. Let **)
+ (** CANDIDATE_TWIN refer to this stub. **)
+ LOCATED := FALSE;
+ CANDIDATE_TWIN := STUB^.NEXT_STUB;
+ WHILE (CANDIDATE_TWIN <> NIL) AND (NOT LOCATED) DO
+ BEGIN
+ IF SP_EQ (STUB^.NAME, CANDIDATE_TWIN^.NAME) THEN
+ BEGIN
+ LOCATED := TRUE;
+ STUB^.NEXT_TWIN := CANDIDATE_TWIN;
+ END
+ ELSE
+ CANDIDATE_TWIN := CANDIDATE_TWIN^.NEXT_STUB;
+ END (*WHILE*);
+ (************* End of ANALYSE (2.1) ****************)
+
+ STUB := CANDIDATE_TWIN;
+ END (*WHILE*);
+ SHADOW_STUB := SHADOW_STUB^.NEXT;
+ END (*WHILE*);
+ (********************* End of ANALYSE (2) ******************)
+
+ (********************* ANALYSE (3) *************************)
+ (** Reorder the twin stub chain by using the options of **)
+ (** the stub. SHADOW_LIST.STUB_POINTER must always refer to **)
+ (** the first stub of the twin stub chain. **)
+
+ ORDER_TWINS (SHADOW_LIST, CODE_STRUCT, LIST_HEAD);
+
+ (***************** End of ANALYSE (3) **********************)
+
+ (********************* ANALYSE (4) *************************)
+ (** Update the field STUB_REF of the slots in the structure **)
+ (** by searching a stub with the same name as the slot in **)
+ (** the structure. Use SHADOW_LIST to access the stubs. **)
+ (** Check if the option SLOT^.OPTIONS.MULTIPLE is used **)
+ (** correctly. Use SLOT^.SRC_IMG for diagnostics. **)
+ STUB := CODE_STRUCT.FIRST_STUB;
+ WHILE STUB <> NIL DO
+ BEGIN
+ SLOT := STUB^.SLOTS;
+ WHILE SLOT <> NIL DO
+ BEGIN
+ (***************** ANALYSE (4.1) *******************)
+ (** Use SHADOW_LIST to search a stub with the same **)
+ (** name as SLOT^.NAME and update SLOT^.STUB_REF if **)
+ (** such a stub is found. SLOT^.SRC_IMG serves for **)
+ (** a diagnostic if multiple stubs are used in a **)
+ (** slot without the MULTIPLE-option **)
+ LOCATED := FALSE;
+ SHADOW_STUB := LIST_HEAD;
+ WHILE (SHADOW_STUB <> NIL) AND
+ (NOT LOCATED) AND
+ (NOT SP_IS_EMPTY_STR(SLOT^.NAME)) DO
+ BEGIN
+ STUB_REF := SHADOW_STUB^.STUB_POINTER;
+ IF SP_EQ (STUB_REF^.NAME, SLOT^.NAME) THEN
+ BEGIN
+ LOCATED := TRUE;
+ SLOT^.STUB_REF := STUB_REF;
+ IF NOT SLOT^.OPTIONS.MULTIPLE THEN
+ BEGIN
+ IF STUB_REF^.NEXT_TWIN <> NIL THEN
+ BEGIN
+ STRING132.LENGTH := 0;
+ STRING132.BODY := EMPTY_STRING_FIXED;
+ FT_INIT_LINE (DUMMY_LINE);
+ DIAG (ERR, 'ANALYSE (4.1) ', DUMMY_LINE,
+ SLOT^.SRC_IMG, STRING132);
+ SLOT^.OPTIONS.MULTIPLE := TRUE;
+ END (*IF*);
+ END (*IF*);
+ END
+ ELSE
+ SHADOW_STUB := SHADOW_STUB^.NEXT;
+ END (*WHILE*);
+ (************* End of ANALYSE (4.1) ****************)
+
+ SLOT := SLOT^.NEXT_SLOT;
+ END (*WHILE*);
+ STUB := STUB^.NEXT_STUB;
+ END (*WHILE*);
+ (********************* End of ANALYSE (4) ******************)
+
+ (********************* ANALYSE (5) *************************)
+ (** Check the resulting structure of CODE_STRUCT for **)
+ (** circularity. If circularity is detected, break the **)
+ (** responsible chain and generate a diagnostic. **)
+
+ CHECK_CIRC (CODE_STRUCT, LIST_HEAD);
+
+ (********************* End of ANALYSE (5) ******************)
+ END (*IF*)
+ (********************* End of ANALYSE body *********************)
+ END (*PROCEDURE ANALYSE*);
+
+
+ (*********************************************************************)
+ (* Routine: GENMOD - MODule GENeration phase *)
+ (* Purpose: Generation of modules out of CODE_STRUCT. *)
+ (* Interface: CODE_STRUCT - Representation of the stub and slot *)
+ (* structure. *)
+ (* RUN_INFO: User's information for this run. *)
+ (*********************************************************************)
+ PROCEDURE GENMOD (CODE_STRUCT: CODE_STRUCT_; RUN_INFO: RUN_INFO_);
+
+ VAR
+ STB_PTR: STB_PTR_;
+ CONTINUE: BOOLEAN;
+ LOCATED: BOOLEAN;
+ OUT_FILE: TEXT;
+ NR_OPEN_SLOTS,
+ NR_LINES,
+ CORRECTION,
+ INDENT: INTEGER;
+ AUX_STRING_132 : STRING_FIXED_;
+ AUX_STRING_9 : PACKED ARRAY[1..9] OF CHAR;
+ EXTRACTED: BOOLEAN;
+ CH1, CH2: CHAR;
+ I: INTEGER;
+ MODULE_NR: INTEGER;
+ ERROR_CODE: ERROR_CODE_;
+ X: INTEGER;
+ TEMP_FILE_SPEC: STRING132_;
+ REAL_FILE_SPEC: FILE_SPEC_;
+ DUMMY_LINE: LINE_DES_;
+ STRING132: STRING132_;
+
+ (************************* GENMOD routines *************************)
+
+ (*********************************************************************)
+ (* Procedure: BUILDER - BUILDER of module. *)
+ (* Purpose: Build one single module. *)
+ (* Interface: STUB - Pointer to the starting point of the *)
+ (* structure. *)
+ (* OUT_FILE - File to accept the generated code. *)
+ (* NR_OPEN_SLOTS - Number of open slots when ready. *)
+ (* NR_LINES - Number of generated code lines. *)
+ (* INDENT - Current indentation level. *)
+ (* CORRECTION - Correction value for indentation. *)
+ (*********************************************************************)
+ PROCEDURE BUILDER (STUB: STB_PTR_;
+ VAR OUT_FILE: TEXT; VAR NR_OPEN_SLOTS: INTEGER;
+ VAR NR_LINES: INTEGER; VAR INDENT: INTEGER;
+ VAR CORRECTION: INTEGER);
+
+ VAR
+ PREV_INDENT: INTEGER;
+ TWIN_STUB: STB_PTR_;
+ SLOT: SLT_PTR_;
+ FIRST,
+ LAST: INTEGER;
+ INFO_LINE: LINE_DES_;
+ SEG_LENGTH: INTEGER;
+ STRING132: STRING132_;
+ FILE_SPEC: FILE_SPEC_;
+ K: INTEGER;
+ DUMMY_FILE:
+ VARYING
+ [80]
+ OF CHAR;
+ DUMMY:
+ VARYING
+ [132]
+ OF CHAR;
+
+ BEGIN
+ (********************* BUILDER (body) **************************)
+ WITH STUB^ DO
+ BEGIN
+ CORRECTION := ST_GET_INDENT (STUB^.SRC_IMG);
+ INDENT := INDENT-CORRECTION;
+ IF STUB^.OPTIONS.LINENUMBER THEN
+ BEGIN
+ (************************* BUILDER (1) *********************)
+ (** Use INDENT to write file specification and line number **)
+ (** of the source file from which STUB^.SRC_IMG is extrac- **)
+ (** ted to OUT_FILE. **)
+ ST_GET_SEG_RANGE (STUB^.SRC_IMG, FIRST, LAST);
+ ST_GET_FILE_SPEC (STUB^.SRC_IMG, FILE_SPEC);
+ FT_INIT_LINE (INFO_LINE);
+ INFO_LINE.INDENT := ST_GET_INDENT (STUB^.SRC_IMG); (* !!! *)
+ DUMMY_FILE := '';
+ FOR K := 1 TO FILE_SPEC.LENGTH DO
+ DUMMY_FILE := DUMMY_FILE + FILE_SPEC.BODY[K];
+ DUMMY := '';
+ WRITE (DUMMY, '(** Line: ', FIRST:1, ' File: ',
+ DUMMY_FILE); (* ISO vreemd *)
+ SEG_LENGTH := ST_SEG_WIDTH (STUB^.SRC_IMG);
+ FOR K := LENGTH(DUMMY) TO (SEG_LENGTH - 4) DO
+ DUMMY := DUMMY + ' ';
+ DUMMY := DUMMY + '**)';
+ FOR K := 1 TO LENGTH(DUMMY) DO
+ INFO_LINE.CHARS[K] := DUMMY[K]; (* !!! *)
+ INFO_LINE.USED := LENGTH(DUMMY); (* !!! *)
+ SP_EXTR_STR (STUB^.OPTIONS.INDENT, STRING132);
+ IF (STRING132.BODY[1] = 'O') AND (STRING132.BODY[2] = 'N') THEN
+ FT_WRLN (INFO_LINE, INDENT,1)
+ ELSE
+ FT_WRLN (INFO_LINE, 0, 1);
+ (********************* End of BUILDER (1) ******************)
+
+ NR_LINES := NR_LINES+1;
+ END (*IF*);
+
+ (************************* BUILDER (2) *************************)
+ (** Use OPTIONS.COMMENT to decide if STUB^.SRC_IMG needs to be **)
+ (** written to OUT_FILE. If so, then increase NR_LINES accor- **)
+ (** dingly and use INDENT to position the segment. **)
+ SP_EXTR_STR (STUB^.OPTIONS.COMMENT, STRING132);
+ IF (STRING132.BODY[1] = 'O') AND (STRING132.BODY[2] = 'N') THEN
+ BEGIN
+ SP_EXTR_STR (STUB^.OPTIONS.INDENT, STRING132);
+ IF (STRING132.BODY[1] = 'O') AND (STRING132.BODY[2] = 'N') THEN
+ ST_WRITE_SEG (STUB^.SRC_IMG,INDENT,1)
+ ELSE
+ ST_WRITE_SEG (STUB^.SRC_IMG,0,1);
+ NR_LINES := NR_LINES + ST_NUMBER_OF_LINES (STUB^.SRC_IMG);
+ END (*IF*);
+ (********************* End of BUILDER (2) **********************)
+
+ SLOT := STUB^.SLOTS;
+ WHILE SLOT <> NIL DO
+ BEGIN
+ (************************* BUILDER (3) *********************)
+ (** SLOT inherits the options INDENT and COMMENT from STUB **)
+ (** when they are not redefined. SLOT also inherits STUB^.- **)
+ (** OPTIONS.LINENUMBER. **)
+ IF SP_IS_EMPTY_STR (SLOT^.OPTIONS.INDENT) THEN
+ SLOT^.OPTIONS.INDENT := STUB^.OPTIONS.INDENT;
+ IF SP_IS_EMPTY_STR (SLOT^.OPTIONS.COMMENT) THEN
+ SLOT^.OPTIONS.COMMENT := STUB^.OPTIONS.COMMENT;
+ SLOT^.OPTIONS.LINENUMBER := STUB^.OPTIONS.LINENUMBER;
+ (********************* End of BUILDER (3) ******************)
+
+ IF SLOT^.STUB_REF = NIL THEN
+ BEGIN
+ (********************* BUILDER (4) *********************)
+ (** SLOT has no reference to a stub. Write segments **)
+ (** SLOT^.SRC_IMG and SLOT^.CODE to OUT_FILE using **)
+ (** COMMENT and INDENT. Update NR_LINES accodingly. **)
+ WITH SLOT^ DO
+ BEGIN
+ SP_EXTR_STR (STUB^.OPTIONS.COMMENT, STRING132);
+ IF (STRING132.BODY[1] = 'O') AND (STRING132.BODY[2] = 'N') THEN
+ BEGIN
+ SP_EXTR_STR (SLOT^.OPTIONS.INDENT, STRING132);
+ IF (STRING132.BODY[1] = 'O') AND (STRING132.BODY[2] = 'N') THEN
+ ST_WRITE_SEG (SLOT^.SRC_IMG,INDENT,1)
+ ELSE
+ ST_WRITE_SEG (SLOT^.SRC_IMG, 0, 1);
+ NR_LINES := NR_LINES + ST_NUMBER_OF_LINES (SLOT^.SRC_IMG);
+ END (*IF*);
+ SP_EXTR_STR (SLOT^.OPTIONS.INDENT, STRING132);
+ IF (STRING132.BODY[1] = 'O') AND (STRING132.BODY[2] = 'N') THEN
+ ST_WRITE_SEG (CODE,INDENT,1)
+ ELSE
+ ST_WRITE_SEG (CODE, 0, 1);
+ NR_LINES := NR_LINES + ST_NUMBER_OF_LINES (SLOT^.CODE);
+ END(*WITH*);
+ (***************** End of BUILDER (4) ******************)
+
+ IF (SLOT^.NEXT_SLOT <> NIL) AND
+ (NOT SP_IS_EMPTY_STR(SLOT^.NAME)) AND
+ (NOT SLOT^.OPTIONS.OPTIONAL) THEN
+ BEGIN
+ IF NR_OPEN_SLOTS = 0 THEN
+ BEGIN
+ WRITELN ('The following open slots are found:');
+ WRITELN;
+
+ IF REPORT_OK THEN
+ BEGIN
+ WRITELN (REPORT_FILE,
+ 'The following open slots are found:');
+ WRITELN (REPORT_FILE);
+ END (*IF*);
+ END (*IF*);
+
+ (* Write slot to terminal and to output file. *)
+ ST_WRITE_SEG (SLOT^.SRC_IMG, INDENT, 0);
+ WRITELN;
+
+ IF REPORT_OK THEN
+ BEGIN
+ ST_WRITE_SEG (SLOT^.SRC_IMG, INDENT, 3);
+ WRITELN (REPORT_FILE);
+ END (*IF*);
+
+ NR_OPEN_SLOTS := NR_OPEN_SLOTS+1;
+ END (*IF*);
+ END
+ ELSE
+ BEGIN
+ (********************* BUILDER (5) *********************)
+ (** SLOT^.STUB_REF inherits the options INDENT and **)
+ (** COMMENT from SLOT if they are not redefined by **)
+ (** SLOT^.STUB_REF. SLOT^.STUB_REF also inherits **)
+ (** LINENUMBER from SLOT. **)
+ IF SP_IS_EMPTY_STR (SLOT^.STUB_REF^.OPTIONS.INDENT) THEN
+ SLOT^.STUB_REF^.OPTIONS.INDENT := SLOT^.OPTIONS.INDENT;
+ IF SP_IS_EMPTY_STR (SLOT^.STUB_REF^.OPTIONS.COMMENT) THEN
+ SLOT^.STUB_REF^.OPTIONS.COMMENT := SLOT^.OPTIONS.COMMENT;
+ SLOT^.STUB_REF^.OPTIONS.LINENUMBER := SLOT^.OPTIONS.LINENUMBER;
+ (***************** End of BUILDER (5) ******************)
+
+ PREV_INDENT := INDENT;
+ INDENT := INDENT + ST_GET_INDENT (SLOT^.SRC_IMG);
+ BUILDER (SLOT^.STUB_REF, OUT_FILE, NR_OPEN_SLOTS,
+ NR_LINES, INDENT, CORRECTION);
+ TWIN_STUB := SLOT^.STUB_REF^.NEXT_TWIN;
+ WHILE TWIN_STUB <> NIL DO
+ BEGIN
+ (********************* BUILDER (6) *****************)
+ (** TWIN_STUB inherits INDENT and COMMENT from **)
+ (** SLOT when they are not redefined locally. In **)
+ (** addition TWIN_STUB inherits LINENUMBER from **)
+ (** SLOT. **)
+ IF SP_IS_EMPTY_STR (TWIN_STUB^.OPTIONS.INDENT) THEN
+ TWIN_STUB^.OPTIONS.INDENT := SLOT^.OPTIONS.INDENT;
+ IF SP_IS_EMPTY_STR (TWIN_STUB^.OPTIONS.COMMENT) THEN
+ TWIN_STUB^.OPTIONS.COMMENT := SLOT^.OPTIONS.COMMENT;
+ TWIN_STUB^.OPTIONS.LINENUMBER := SLOT^.OPTIONS.LINENUMBER;
+ (***************** End of BUILDER (6) **************)
+
+ INDENT := ST_GET_INDENT (SLOT^.SRC_IMG);
+ BUILDER (TWIN_STUB, OUT_FILE, NR_OPEN_SLOTS,
+ NR_LINES, INDENT, CORRECTION);
+ TWIN_STUB := TWIN_STUB^.NEXT_TWIN;
+ END (*WHILE*);
+ INDENT := PREV_INDENT;
+
+ (********************* BUILDER (7) *********************)
+ (** Write the segment SLOT^.CODE to OUT_FILE using the **)
+ (** option SLOT^.INDENT. **)
+ SP_EXTR_STR (SLOT^.OPTIONS.INDENT, STRING132);
+ IF (STRING132.BODY[1] = 'O') AND
+ (STRING132.BODY[2] = 'F') AND
+ (STRING132.BODY[3] = 'F') THEN
+ ST_WRITE_SEG (SLOT^.CODE, 0, 1)
+ ELSE
+ ST_WRITE_SEG (SLOT^.CODE,INDENT,1);
+ (***************** End of BUILDER (7) ******************)
+
+ NR_LINES := NR_LINES + ST_NUMBER_OF_LINES (SLOT^.CODE);
+ END (*IF*);
+ SLOT := SLOT^.NEXT_SLOT;
+ END (*WHILE*);
+ END (*WITH*);
+ (********************* End of BUILDER (body) *******************)
+ END (*PROCEDURE BUILDER*);
+
+ (********************* End of GENMOD routines **********************)
+
+ BEGIN
+ (********************* GENMOD (body) ***************************)
+ AUX_STRING_9 := 'EXTRACTED';
+ AUX_STRING_132 := EMPTY_STRING_FIXED;
+ FOR I:= 1 TO 9 DO
+ AUX_STRING_132[I] := AUX_STRING_9[I];
+ IF (RUN_INFO.EXTR_MODE <> AUX_STRING_132) THEN
+ EXTRACTED := FALSE
+ ELSE
+ EXTRACTED := TRUE;
+
+ STB_PTR := CODE_STRUCT.FIRST_STUB;
+ WHILE STB_PTR <> NIL DO
+ BEGIN
+ LOCATED := FALSE;
+ WHILE (STB_PTR <> NIL) AND (NOT LOCATED) DO
+ BEGIN
+ (************************* GENMOD (1) **********************)
+ (** If STB_PTR refers to a main stub then use RUN_INFO to **)
+ (** check if the module is desired by the user. Raise **)
+ (** LOCATED if this happens to be the case. **)
+ WITH STB_PTR^ DO
+ BEGIN
+ IF NOT SP_IS_EMPTY_STR (OPTIONS.FILE_NAME) THEN
+ BEGIN
+ (********************* GENMOD (1.1) ************************)
+ (** Use RUN_INFO to check if OPTIONS.FILE_NAME indicates a **)
+ (** module that is wanted by the user. Raise LOCATED if **)
+ (** this is the case. Default the options COMMENT and **)
+ (** INDENT it they have not been set explictely. **)
+ WITH RUN_INFO DO
+ BEGIN
+ CH1 := 'O';
+ CH2 := 'N';
+ IF SP_IS_EMPTY_STR (OPTIONS.INDENT) THEN
+ BEGIN
+ SP_ADD_CHAR (CH1,OPTIONS.INDENT);
+ SP_ADD_CHAR (CH2,OPTIONS.INDENT);
+ END (*IF*);
+ IF SP_IS_EMPTY_STR (OPTIONS.COMMENT) THEN
+ BEGIN
+ SP_ADD_CHAR (CH1,OPTIONS.COMMENT);
+ SP_ADD_CHAR (CH2,OPTIONS.COMMENT);
+ END (*IF*);
+ SP_EXTR_STR (STB_PTR^.OPTIONS.FILE_NAME, TEMP_FILE_SPEC);
+ LOCATED := FALSE;
+ FOR X := 1 TO RUN_INFO.NR_MODULES DO
+ BEGIN
+ IF TEMP_FILE_SPEC.BODY=
+ RUN_INFO.RSLT_MODULES[X].FILE_NAME.BODY THEN
+ BEGIN
+ LOCATED := TRUE;
+ MODULE_NR := X;
+ END (*IF*);
+ END (*FOR*);
+
+ (* Use the value of EXTRACTED to decide *)
+ (* whether the module is wanted or not. *)
+ IF EXTRACTED = FALSE THEN LOCATED := NOT LOCATED;
+ END (*WITH*);
+ (***************** End of GENMOD (1.1) *********************)
+ END (*IF*);
+ END (*WITH*);
+ (********************* End of GENMOD (1) *******************)
+
+ IF NOT LOCATED THEN
+ STB_PTR := STB_PTR^.NEXT_STUB;
+ END (*WHILE*);
+ IF LOCATED THEN
+ BEGIN
+ CONTINUE := TRUE;
+
+ (************************* GENMOD (2) **********************)
+ (** Open OUT_FILE with a name specified by this main stub. **)
+ (** Set CONTINUE to FALSE if there is a problem. STB_PTR^.- **)
+ (** OPTIONS.FILE_NAME caused the problem and displayed as **)
+ (** part of an error message. **)
+
+ SP_EXTR_STR (STB_PTR^.OPTIONS.FILE_NAME, TEMP_FILE_SPEC);
+
+ (* The type of TEMP_FILE_SPEC is not suitable for the File Table *)
+ (* routine which opens files. It is converted to a REAL_FILE_SPEC. *)
+
+ REAL_FILE_SPEC.BODY := EMPTY_STRING_FIXED;
+ REAL_FILE_SPEC.LENGTH := 0;
+
+ IF EXTRACTED THEN
+ BEGIN
+ FOR I:= 1 TO RUN_INFO.RSLT_MODULES[MODULE_NR].PATH.LENGTH DO
+ REAL_FILE_SPEC.BODY[I] :=
+ RUN_INFO.RSLT_MODULES[MODULE_NR].PATH.BODY[I];
+ REAL_FILE_SPEC.LENGTH := RUN_INFO.RSLT_MODULES[MODULE_NR].PATH.LENGTH;
+ END
+ ELSE
+ BEGIN
+ FOR I:= 1 TO RUN_INFO.MODULE_DIRECTORY.LENGTH DO
+ REAL_FILE_SPEC.BODY[I] := RUN_INFO.MODULE_DIRECTORY.BODY[I];
+ REAL_FILE_SPEC.LENGTH := RUN_INFO.MODULE_DIRECTORY.LENGTH;
+ END; (*IF*)
+
+ X := REAL_FILE_SPEC.LENGTH;
+ I := 1;
+ WHILE I <= TEMP_FILE_SPEC.LENGTH DO
+ BEGIN
+ X:=X+1;
+ REAL_FILE_SPEC.BODY[X] := TEMP_FILE_SPEC.BODY[I];
+ I:=I+1;
+ END (*WHILE*);
+ REAL_FILE_SPEC.LENGTH := X;
+
+ ERROR_CODE := FT_OUTOPEN (REAL_FILE_SPEC);
+ IF ERROR_CODE > 0 THEN
+ BEGIN
+ CONTINUE := FALSE;
+
+ (********************* GENMOD (2.1) ****************************)
+ (** Use STB_PTR^.OPTIONS.FILE_NAME and the returned ERROR_CODE **)
+ (** to generate an error message. **)
+ FT_INIT_LINE (DUMMY_LINE);
+ SP_EXTR_STR (STB_PTR^.OPTIONS.FILE_NAME, STRING132);
+ DIAG (ERR, 'GENMOD (2.1) ', DUMMY_LINE,
+ STB_PTR^.SRC_IMG, STRING132);
+ (********************* End of GENMOD (2.1) *********************)
+ END (*IF*);
+ (********************* End of GENMOD (2) *******************)
+
+ IF CONTINUE THEN
+ BEGIN
+ NR_OPEN_SLOTS := 0;
+ NR_LINES := 0;
+
+ (********************* GENMOD (3) **********************)
+ (** Generate the module indicated by STB_PTR into **)
+ (** OUT_FILE. NR_OPEN_SLOTS and NR_LINES are maintained **)
+ (** as statistical data. **)
+ WRITE ('Generating file: ');
+ FOR X := 1 TO REAL_FILE_SPEC.LENGTH DO
+ WRITE (REAL_FILE_SPEC.BODY[X]);
+ WRITELN;
+
+ IF REPORT_OK THEN
+ BEGIN
+ WRITE (REPORT_FILE, 'Generating file: ');
+ FOR X := 1 TO REAL_FILE_SPEC.LENGTH DO
+ WRITE (REPORT_FILE, REAL_FILE_SPEC.BODY[X]);
+ WRITELN (REPORT_FILE);
+ END (*IF*);
+
+ INDENT := ST_GET_INDENT (STB_PTR^.SRC_IMG);
+ CORRECTION := 0;
+ NR_LINES := 0;
+ NR_OPEN_SLOTS := 0;
+ BUILDER (STB_PTR, OUT_FILE, NR_OPEN_SLOTS, NR_LINES,
+ INDENT, CORRECTION);
+ (******************* End of GENMOD (3) *****************)
+
+ WRITELN ('Number of open slots in this module: ',
+ NR_OPEN_SLOTS:1);
+ WRITELN ('Number of generated lines: ',NR_LINES:1);
+
+ WRITELN ('------------------------------------',
+ '------------------------------------');
+ WRITELN;
+
+ IF REPORT_OK THEN
+ BEGIN
+ WRITELN (REPORT_FILE, 'Number of open slots',
+ ' in this module: ', NR_OPEN_SLOTS:1);
+ WRITELN (REPORT_FILE, 'Number of generated lines: '
+ ,NR_LINES:1);
+ WRITELN (REPORT_FILE,
+ '------------------------------------',
+ '------------------------------------');
+ WRITELN (REPORT_FILE);
+ END (*IF*);
+
+ (********************* GENMOD (4) **********************)
+ (** Close OUT_FILE. Generate an error message in case **)
+ (** of trouble. **)
+ ERROR_CODE := FT_OUTCLOSE;
+ IF ERROR_CODE <> 0 THEN
+ BEGIN
+ (************************* GENMOD (4.1) ************************)
+ (** Use STB_PTR^.OPTIONS.FILE_NAME and STB_PTR^.SRC_IMG to **)
+ (** generate a diagnostic message. **)
+ FT_INIT_LINE (DUMMY_LINE);
+ SP_EXTR_STR (STB_PTR^.OPTIONS.FILE_NAME, STRING132);
+ DIAG (ERR, 'GENMOD (4.1) ', DUMMY_LINE,
+ STB_PTR^.SRC_IMG, STRING132);
+ (********************* End of GENMOD (4.1) *********************)
+ END(*IF*);
+ (***************** End of GENMOD (4) *******************)
+ END (*IF*);
+ STB_PTR := STB_PTR^.NEXT_STUB;
+ END (*IF*);
+ END (*WHILE*);
+ (********************* End of GENMOD (body) ********************)
+
+ END (*GENMOD*);
+
+
+
+ BEGIN
+ (******* CLIP_2 (body) *******)
+ CONTINUE := TRUE;
+
+ (***************************** CLIP_2 (1) **************************)
+ (** Read the contents of CLIP.INI into RUN_INFO. Set CONTINUE to **)
+ (** FALSE in case of trouble. **)
+ EXT_FILE_SPEC.BODY := EMPTY_STRING_FIXED;
+ AUX_STRING_8 := DFLT_INIFILE;
+ FOR I := 1 TO 8 DO
+ EXT_FILE_SPEC.BODY[I] := AUX_STRING_8[I];
+ EXT_FILE_SPEC.LENGTH := 8;
+ EXT_FILE_PREP (INI_FILE, EXT_FILE_SPEC, INSP_MODE, DUMMY_FILE_OK,
+ ERROR_CODE, DUMMY_ERROR_MSG);
+ IF ERROR_CODE > 0 THEN
+ BEGIN
+ WRITELN ('The initializationfile could not be read succesfully.');
+ CONTINUE := FALSE;
+ END
+ ELSE
+ BEGIN (* EWvA: 16/10/93 *)
+ EXT_FILE_CLOSE (INI_FILE, DUMMY_ERROR_CODE); (* EWvA: 16/10/93 *)
+ READ_INI_FILE (INI_FILE, RUN_INFO, EXT_FILE_SPEC, DUMMY_FILE_OK,
+ DUMMY_ERROR_MSG, DUMMY_ERROR_CODE);
+ END (* IF *); (* EWvA: 16/10/93 *)
+ (************************* End of CLIP_2 (1) ***********************)
+
+ IF CONTINUE THEN
+ BEGIN
+ (************************* CLIP_2 (2) **************************)
+ (** Initialize CODE_STRUCT and the hidden variables of FT, ST, **)
+ (** SP, SCN_LINE, SCN_OPTS and DIAG_TBL. **)
+ FT_INIT;
+ ST_INIT;
+ SP_INIT;
+ SCN_LINE_INIT;
+ SCN_OPTS_INIT;
+ DIAGNOST_INIT;
+ CODE_STRUCT.LAST_STUB := NIL;
+ CODE_STRUCT.FIRST_STUB := NIL;
+ (********************* End of CLIP_2 (2) ***********************)
+
+ (************************* CLIP_2 (3) **************************)
+ (** Prepare a REPORT_FILE file from RUN_INFO.REPORT_FILE_SPEC **)
+ (** and raise REPORT_OK if this succeeded. **)
+ (* Modified by EWvA on 16/10/93 *)
+ IF (RUN_INFO.REPORT_FILE_SPEC.BODY <> EMPTY_STRING_FIXED) AND
+ (RUN_INFO.MESSAGE_DESTINATION[1] IN ['R','r','F','f','B','b'])
+ (* End of modification dd. 16/10/93 *)
+ THEN
+ BEGIN
+ EXT_FILE_PREP (REPORT_FILE, RUN_INFO.REPORT_FILE_SPEC, GEN_MODE,
+ REPORT_OK, ERROR_CODE, ERROR_MSG);
+ IF ERROR_CODE <> 0 THEN
+ BEGIN
+ WRITELN (OUTPUT, ERROR_MSG);
+ WRITELN (OUTPUT, 'Continue without report file...');
+ WRITELN;
+ REPORT_OK := FALSE;
+ END
+ ELSE
+ REPORT_OK := TRUE;
+ END
+ ELSE (* EWvA: 16/10/93 *)
+ REPORT_OK := FALSE; (* EWvA: 16/10/93 *)
+ (***************** End of DIAGNOST_EXIT (2) ********************)
+
+ START := CLOCK;
+ STOP := START;
+
+ (************************* CLIP_2 (4) **************************)
+ (** Scan the source files as specified in RUN_INFO and build **)
+ (** the structure of stubs and slots CODE_STRUCT. LPT_FILE_OK **)
+ (** decides if info for the terminal is copied to REPORT_FILE. **)
+ WRITELN;
+ WRITELN ('============================ ', CLIP_VERSION,
+ ' ==========================');
+ WRITELN;
+ WRITELN ('============================ Busy scanning ',
+ '=============================');
+ IF REPORT_OK THEN
+ BEGIN
+ WRITELN (REPORT_FILE);
+ WRITELN (REPORT_FILE,
+ '============================ ', CLIP_VERSION,
+ ' ==========================');
+ WRITELN (REPORT_FILE);
+ WRITELN (REPORT_FILE,
+ '============================ Busy scanning ',
+ '=============================');
+ END (*IF*);
+
+ SCAN_FILES (CODE_STRUCT, RUN_INFO);
+
+ WRITELN ('============================ End scanning ',
+ '==============================');
+ WRITELN;
+ IF REPORT_OK THEN
+ BEGIN
+ WRITELN (REPORT_FILE);
+ WRITELN (REPORT_FILE,
+ '============================ End scanning ',
+ '==============================');
+ END (*IF*);
+ (********************* End of CLIP_2 (4) **********************)
+
+ IF CODE_STRUCT.FIRST_STUB <> NIL THEN
+ BEGIN
+ (************************* CLIP_2 (5) **********************)
+ (** Analyse CODE_STRUCT. LPT_FILE_OK decides if info to the **)
+ (** terminal is copied to REPORT_FILE also. **)
+ WRITELN ('============================ Busy analysing ',
+ '============================');
+ IF REPORT_OK THEN
+ BEGIN
+ WRITELN (REPORT_FILE);
+ WRITELN (REPORT_FILE,
+ '============================ Busy analysing ',
+ '============================');
+ END (*IF*);
+
+ ANALYSE (CODE_STRUCT);
+
+ WRITELN ('============================ End analysing ',
+ '=============================');
+ WRITELN;
+ IF REPORT_OK THEN
+ BEGIN
+ WRITELN (REPORT_FILE);
+ WRITELN (REPORT_FILE,
+ '============================ End analysing ',
+ '=============================');
+ END (*IF*);
+ (********************* End of CLIP_2 (5) *******************)
+
+ (************************* CLIP_2 (6) **********************)
+ (** Generate the modules as specified in RUN_INFO out of **)
+ (** CODE_STRUCT. LPT_FILE_OK decides if info for terminal **)
+ (** is also copied to REPORT_FILE. **)
+ WRITELN ('============================ Busy generating ',
+ '===========================');
+ IF REPORT_OK THEN
+ BEGIN
+ WRITELN (REPORT_FILE);
+ WRITELN (REPORT_FILE,
+ '============================ Busy generating ',
+ '===========================');
+ END (*IF*);
+
+ GENMOD (CODE_STRUCT, RUN_INFO);
+
+ WRITELN ('============================ End generating ',
+ '============================');
+ WRITELN;
+ IF REPORT_OK THEN
+ BEGIN
+ WRITELN (REPORT_FILE);
+ WRITELN (REPORT_FILE,
+ '============================ End generating ',
+ '============================');
+ END (*IF*);
+ (********************* End of CLIP_2 (6) *******************)
+
+ STOP := CLOCK;
+ END (*IF*);
+
+ (*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ +++++++++++ EWvA, jan6, 1993: Report file ++++++++++++
+ FT_INIT_LINE (DUMMY_LINE);
+ ST_INIT_SEG (DUMMY_SEG);
+ STRING132.LENGTH := 0;
+ STRING132.BODY := EMPTY_STRING_FIXED;
+ DIAG (WARN, 'CLIP_2 ', DUMMY_LINE, DUMMY_SEG,
+ STRING132);
+ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*)
+
+ (* Generate error messages to terminal and possibly report file *)
+ DIAGNOST_EXIT;
+
+ (* Delete the segment-table. *)
+ ST_FINIT;
+
+ (* Display a goodbye message. *)
+ WRITELN ('Used (CPU) time :', (STOP-START)/1000:4:2, ' Sec.');
+ WRITELN ('See you next time !');
+
+ IF REPORT_OK THEN
+ BEGIN
+ WRITELN (REPORT_FILE, 'Used (CPU) time :',
+ (STOP-START)/1000:4:2, ' Sec.');
+ WRITELN (REPORT_FILE, 'See you next time !');
+ EXT_FILE_CLOSE (REPORT_FILE, DUMMY_ERROR);
+ END (*FI*);
+ END (*IF*);
+ (********************* End of CLIP_2 (body) ********************)
+ END (*CLIP_2*).
+ (******************* End of module clip_unix.pas *******************)
diff --git a/web/clip/unix/clp.csh b/web/clip/unix/clp.csh
new file mode 100644
index 0000000000..17e1e35092
--- /dev/null
+++ b/web/clip/unix/clp.csh
@@ -0,0 +1,58 @@
+#! /bin/csh
+# clp.csh
+# CLIP Cshellscript equal to CLP.BAT
+# Assumption: clip has been installed in directory ~/clip
+source clp_env.dat
+
+# test existance of environment vars CLIP_SRC & CLIP_TRG
+if ( $?CLIP_SRC == 0 || $?CLIP_TRG == 0 ) then
+ echo "..... Please define SOURCE and TARGET directories ....."
+ echo "..... You can use clip_env.csh for this purpose ....."
+ exit
+endif
+
+# :create_INI_file
+echo "..... CLiP the sourcefiles that are given as arguments ....."
+echo "..... Report file is CLIP.RPT ....."
+
+if (-f CLIP.INI) then
+ unalias rm
+ rm CLIP.INI
+endif
+
+
+echo This file contains data that is needed to run CLiP > CLIP.INI
+echo And is generated by CLiP_MENU >> CLIP.INI
+echo Modifying this file at own risk. >> CLIP.INI
+echo Using CLiP_MENU is definitely recommended. >> CLIP.INI
+echo "" >> CLIP.INI
+echo INTERACTIVE_MODE >> CLIP.INI
+echo NO >> CLIP.INI
+echo BOTH >> CLIP.INI
+echo "(* " >> CLIP.INI
+echo "*) " >> CLIP.INI
+echo "* " >> CLIP.INI
+echo ENDOF >> CLIP.INI
+echo "# " >> CLIP.INI
+echo OMITTED >> CLIP.INI
+echo ------------ REPORT FILE ----------- >> CLIP.INI
+echo clip.rpt >> CLIP.INI
+echo ------------ INPUT FILES ----------- >> CLIP.INI
+if ( .$1 != . ) echo $CLIP_SRC/$1 >> CLIP.INI
+if ( .$2 != . ) echo $CLIP_SRC/$2 >> CLIP.INI
+if ( .$3 != . ) echo $CLIP_SRC/$3 >> CLIP.INI
+if ( .$4 != . ) echo $CLIP_SRC/$4 >> CLIP.INI
+if ( .$5 != . ) echo $CLIP_SRC/$5 >> CLIP.INI
+if ( .$6 != . ) echo $CLIP_SRC/$6 >> CLIP.INI
+if ( .$7 != . ) echo $CLIP_SRC/$7 >> CLIP.INI
+if ( .$8 != . ) echo $CLIP_SRC/$8 >> CLIP.INI
+if ( .$9 != . ) echo $CLIP_SRC/$9 >> CLIP.INI
+echo ------------ MODULES --------------- >> CLIP.INI
+echo ------------ MODULE DIRECTORY ------ >> CLIP.INI
+echo $CLIP_TRG"/" >> CLIP.INI
+echo ------------ END OF INI FILE ------- >> CLIP.INI
+
+set CLIP_DIR = ~/clip
+$CLIP_DIR/clip
+
+# end of Cshellscript +++++++++++++++++++++++++++++++++++++++++++++++
diff --git a/web/clip/unix/clp_env.csh b/web/clip/unix/clp_env.csh
new file mode 100644
index 0000000000..06fe7e2267
--- /dev/null
+++ b/web/clip/unix/clp_env.csh
@@ -0,0 +1,25 @@
+#! /bin/csh
+# CLIP Cshellscript equal to CLP_ENV.BAT
+
+unalias rm
+rm clp_env.dat
+touch clp_env.dat
+
+if (.$1 == .) then
+ echo unsetenv CLIP_SRC >> clp_env.dat
+ echo unsetenv CLIP_TRG >> clp_env.dat
+ echo ..... CLiP environment cleared .....
+ exit
+endif
+
+if (.$2 == .) then
+ echo ..... Please specify directories for .....
+ echo ..... SOURCE files and TARGET modules .....
+ exit
+endif
+
+echo "setenv CLIP_SRC $1" >> clp_env.dat
+echo "setenv CLIP_TRG $2" >> clp_env.dat
+echo "..... Set CLiP environment ....."
+echo "Source file directory is " $1
+echo "Target module directory is " $2
diff --git a/web/clip/unix/ex01_a.asc b/web/clip/unix/ex01_a.asc
new file mode 100644
index 0000000000..445b8a8e3d
--- /dev/null
+++ b/web/clip/unix/ex01_a.asc
@@ -0,0 +1,274 @@
+
+
+
+ Example 01: Palindrome filter
+
+
+
+
+
+In this appendix we illustrate the CLiP style of literate programming by a
+program to filter palindromic lines from an input file.
+ Two files are involved: the program module (*palindrome.pas*) and a test
+file (*testdata.in*).
+
+
+A.1. Specification
+
+A palindrome is a sentence with the property that the letters from left to
+right, read the same as from right to left. In the comparison uppercase and
+lowercase letters are considered to be equivalent and all other characters are
+simply ignored. Hence an empty sentence is a palindrome. Other examples are:
+
+ (************* #file "testdata.in" #comment off **************)
+ Ada
+ 1234567
+ doremifasolosafimerod
+ (******* Testdata #multiple *******)
+ (***************** End of testdata.in *************************)
+
+The following sentences do not qualify as a palindrome.
+
+ (******* Testdata #quick *******)
+ Mr. Clinton won the elections over Mr. Bush.
+ This line is not palindromic.
+ Aabbccdd Aabbccdd Aabbccdd Aabbccdd
+ Abracadabra
+ supercalafragilisiticexpielecdosia
+
+The following are examples of more sophisticated palindromes.
+
+ (******* Testdata #quick *******)
+ Able was I, ere I saw Elba.
+ A man, a plan, a canal, Panama.
+ Norma is as selfless as I Am, Ron.
+
+Note that the famous Dutch sentence
+
+ (******* Testdata #quick *******)
+ Koos Eekfeen keek maar door rood kerkraam, maar krek door rood raam keek
+ neef Kees ook.
+
+will not be recognized as a plindrome since it occupies two lines.
+ The program *PALINDROME* reads an input file, filters the lines that are
+palindromic and writes them to an output file.
+
+A.2. Communication with the outside world
+
+The program conforms to the general template of a Pascal program. We introduce
+the files *IN_FILE* and *OUT_FILE* to define its communication with the outside
+world. The actual files have to be specified at run-time. Thus we have
+
+ (*************** #file "palindrome.pas" ***********************)
+ (****************************************************************)
+ (* Program: Palindrome filter program. *)
+ (* Purpose: To filter the palindromic lines from a given input *)
+ (* file to a specified output file. *)
+ (****************************************************************)
+ PROGRAM PALINDROME (INPUT, OUTPUT, IN_FILE, OUT_FILE);
+
+ (******* Palindrome constants #multiple #comment off *******)
+ (******* Palindrome types #multiple #comment off *******)
+ VAR
+ IN_FILE, OUT_FILE: TEXT;
+ (******* Palindrome variables #multiple #comment off *******)
+
+ BEGIN
+ OPEN (IN_FILE, 'TESTDATA.IN', 'old'); RESET (IN_FILE);
+ OPEN (OUT_FILE, 'TESTDATA.OUT', 'unknown'); REWRITE (OUT_FILE);
+
+ (***************** Palindrome (body) **********************)
+ (** Copy the lines of the IN_FILE that are palindromic to **)
+ (** the OUT_FILE. **)
+ (************************************************************)
+
+ END (*PALINDROME*).
+ (******************* End of palindrome.pas ********************)
+
+To prepare the module for future declarations of constants and types we have
+
+ (******* Palindrome constants #leader #quick *******)
+ CONST
+ (******* Palindrome types #leader #quick *******)
+ TYPE
+
+A.3. Processing of the files
+
+The program processes *IN_FILE* line by line. The idea is to buffer an exact
+copy of the current line in *IN_LINE*, while at the same time its letters are
+buffered in *LETTERS*. So *LETTERS* will be empty if the line holds no letters
+at all, in which case the line is considered to be palindromic by definition.
+ We choose the buffers *IN_LINE* and *LETTERS* to be of the same type, *
+TEXT_LINE*, which we will not specify in detail right now. For this purpose we
+introduce a type *ABSTRACT*.
+
+ (******* Palindrome types #quick *******)
+ ABSTRACT = (DEFINED, UNDEFINED);
+
+*TEXT_LINE* will temporarily be declared *ABSTRACT* and its details will be
+defined later. Thus the declaration of *TEXT_LINE*
+
+ (******* Palindrome types *******)
+ (******* Declaration of TEXT_LINE *******)
+ (***************** End of Palindrome types ********************)
+
+is temporarily satisfied with the type *ABSTRACT*.
+
+ (******* Declaration of TEXT_LINE #quick #default *******)
+ TEXT_LINE = ABSTRACT;
+
+The declaration for the variables *IN_LINE* and *LETTERS* becomes
+
+ (******* Palindrome variables #quick *******)
+ IN_LINE,
+ LETTERS: TEXT_LINE;
+
+We have to test *LETTERS* in order to decide whether or not *IN_LINE* contains
+a palindrome. The result of this test is flagged by *IS_PALINDROME*, for which
+we introduce the declaration
+
+ (******* Palindrome variables #quick *******)
+ IS_PALINDROME: BOOLEAN;
+
+Now the body of the Palindrome filter may be expanded as
+
+ (***************** Palindrome (body) **********************)
+ (** Copy the lines of the IN_FILE that are palindromic to **)
+ (** the OUT_FILE. **)
+ WHILE NOT EOF (IN_FILE) DO
+ BEGIN
+ (***************** Palindrome (1) *********************)
+ (** Read a line from IN_FILE into IN_LINE. The letters **)
+ (** of this line are copied to LETTERS. **)
+ (********************************************************)
+
+ READLN (IN_FILE);
+
+ (***************** Palindrome (2) *********************)
+ (** Test palindromicity of LETTERS. Set IS_PALINDROME **)
+ (** to reflect the result of the test. **)
+ (********************************************************)
+
+
+ IF IS_PALINDROME THEN
+ BEGIN
+ (***************** Palindrome (3) *****************)
+ (** Write IN_LINE to OUT_FILE. **)
+ (****************************************************)
+
+ WRITELN (OUT_FILE);
+ END (*IF*);
+ END (*WHILE*);
+ (************* End of Palindrome (body) *******************)
+
+A.4. Choosing the structure of *IN_LINE* and *LETTERS*
+
+Before we can proceed we need to establish a structure for the objects *IN_LINE*
+ and *LETTERS*. Thus we define *TEXT_LINE* as a structure with two components.
+The first component is an array, *CHARS*, which contains the characters to be
+buffered. The second component, *LENGTH*, indicates which part of the array is
+actually occupied. The maximum number of characters that can be buffered by the
+structure is determined by the length, *MAX_L*, of the array. *MAX_L* serves as
+an implementation parameter.
+
+ (******* Palindrome constants #quick *******)
+ MAX_L = 132;
+
+ (******* Declaration of TEXT_LINE #quick *******)
+ TEXT_LINE = RECORD
+ CHARS: ARRAY[1..MAX_L] OF CHAR;
+ LENGTH: 0..MAX_L;
+ END (*RECORD*);
+
+A.5. Reading a line
+
+For efficiency reasons we fill *IN_LINE* and *LETTERS* simultaneously.
+Therefore we buffer every character that is read from *IN_FILE* in the variable
+*IN_CHAR*.
+
+ (******* Palindrome variables #quick *******)
+ IN_CHAR: CHAR;
+
+Only when *IN_CHAR* turns out to be a letter it is copied to *LETTERS*. Since
+this process is crucial for the overall operation, we make provisions for some
+debugging code here.
+
+ (***************** Palindrome (1) *********************)
+ (** Read a line from IN_FILE into IN_LINE. The letters **)
+ (** of this line are copied to LETTERS. **)
+ IN_LINE.LENGTH := 0;
+ LETTERS.LENGTH := 0;
+ WITH IN_LINE DO
+ WHILE NOT EOLN (IN_FILE) DO
+ BEGIN
+ READ (IN_FILE, IN_CHAR);
+ LENGTH := LENGTH + 1;
+ CHARS[LENGTH] := IN_CHAR;
+ IF IN_CHAR IN ['A'..'Z', 'a'..'z'] THEN
+ WITH LETTERS DO
+ BEGIN
+ LENGTH := LENGTH + 1;
+ CHARS[LENGTH] := IN_CHAR;
+ END (*WITH/IF*);
+ END (*WHILE/WITH*);
+
+ (********************* Palindrome (test) **************)
+ (** Check contents of IN_LINE and LETTERS. #optional **)
+ (********************************************************)
+
+ (***************** End of Palindrome (1) **************)
+
+A.6. Testing for palindromicity
+
+We test the palindromicity of *LETTERS* in two steps. First we transform the
+contents of *LETTERS* to uppercase and then we compare the characters of *
+LETTERS* pairwise. The comparison is done starting with the most outside
+characters and progressing inward. The string is assumed a palindrome until the
+opposite is proven through a pair of different characters. With the local
+counter
+
+ (******* Palindrome variables #quick *******)
+ I: INTEGER;
+
+we keep track of the comparing process. Now *Palindrome (2)* can be expanded as
+
+ (***************** Palindrome (2) *********************)
+ (** Test palindromicity of LETTERS. Set IS_PALINDROME **)
+ (** to reflect the result of the test. **)
+ WITH LETTERS DO
+ BEGIN
+ (* Transform lowercase to uppercase. *)
+ FOR I := 1 TO LENGTH DO
+ IF CHARS[I] IN ['a'..'z']
+ THEN CHARS[I] :=
+ CHR(ORD(CHARS[I]) - ORD('a') + ORD('A'));
+
+ (* Perform the palindromicity test. *)
+ IS_PALINDROME := TRUE;
+ I := 1;
+ WHILE IS_PALINDROME AND (I <= LENGTH DIV 2) DO
+ IF CHARS[I] = CHARS[LENGTH-I+1] THEN
+ I := I + 1
+ ELSE
+ IS_PALINDROME := FALSE;
+ END (*WITH*);
+ (***************** End of Palindrome (2) **************)
+
+A.7. Writing the palindrome
+
+The only remaining action is to write the contents of *IN_LINE*. Again we need
+a local counter
+
+ (******* Palindrome variables #quick *******)
+ J: INTEGER;
+
+The writing proceeds straight forward.
+
+ (***************** Palindrome (3) *****************)
+ (** Write IN_LINE to OUT_FILE. **)
+ WITH IN_LINE DO
+ BEGIN
+ FOR J := 1 TO LENGTH DO
+ WRITE (OUT_FILE, CHARS[J]);
+ END (*WITH*);
+ (************* End of Palindrome (3) **************)
diff --git a/web/clip/unix/ex01_a.ini b/web/clip/unix/ex01_a.ini
new file mode 100644
index 0000000000..ffab1894d5
--- /dev/null
+++ b/web/clip/unix/ex01_a.ini
@@ -0,0 +1,25 @@
+This file contains data that is needed to run CLIP_2
+And is generated by CLIP_1
+Modifying this file at own risk.
+Using CLIP_1 is definitely recommended.
+
+INTERACTIVE_MODE Mode (INTERACTIVE/DEBUG/HELPFUL/AUTO)
+YES Interactive fault correction (YES/NO)
+BOTH Error message destination (TERMINAL/REPORTFILE/BOTH/NONE)
+(* Left comment string
+*) Right comment string
+* Command character
+ENDOF END string
+# Option marker
+EXTRACTED The specified modules are (OMITTED/EXTRACTED)
+------------ REPORT FILE -----------
+clip.rpt
+------------ INPUT FILES -----------
+ex01_a.asc
+------------ MODULES ---------------
+
+palindrome.pas
+
+testdata.in
+------------ MODULE DIRECTORY ------
+------------ END OF INI FILE -------
diff --git a/web/clip/unix/ex01_a.pas b/web/clip/unix/ex01_a.pas
new file mode 100644
index 0000000000..cf22984f72
--- /dev/null
+++ b/web/clip/unix/ex01_a.pas
@@ -0,0 +1,102 @@
+ (*************** #file "palindrome.pas" ***********************)
+ (****************************************************************)
+ (* Program: Palindrome filter program. *)
+ (* Purpose: To filter the palindromic lines from a given input *)
+ (* file to a specified output file. *)
+ (****************************************************************)
+ PROGRAM PALINDROME (INPUT, OUTPUT, IN_FILE, OUT_FILE);
+
+ CONST
+ MAX_L = 132;
+ TYPE
+ ABSTRACT = (DEFINED, UNDEFINED);
+ TEXT_LINE = RECORD
+ CHARS: ARRAY[1..MAX_L] OF CHAR;
+ LENGTH: 0..MAX_L;
+ END (*RECORD*);
+ VAR
+ IN_FILE, OUT_FILE: TEXT;
+ IN_LINE,
+ LETTERS: TEXT_LINE;
+ IS_PALINDROME: BOOLEAN;
+ IN_CHAR: CHAR;
+ I: INTEGER;
+ J: INTEGER;
+
+ BEGIN
+ OPEN (IN_FILE, 'TESTDATA.IN', 'old'); RESET (IN_FILE);
+ OPEN (OUT_FILE, 'TESTDATA.OUT', 'unknown'); REWRITE (OUT_FILE);
+
+ (***************** Palindrome (body) **********************)
+ (** Copy the lines of the IN_FILE that are palindromic to **)
+ (** the OUT_FILE. **)
+ WHILE NOT EOF (IN_FILE) DO
+ BEGIN
+ (***************** Palindrome (1) *********************)
+ (** Read a line from IN_FILE into IN_LINE. The letters **)
+ (** of this line are copied to LETTERS. **)
+ IN_LINE.LENGTH := 0;
+ LETTERS.LENGTH := 0;
+ WITH IN_LINE DO
+ WHILE NOT EOLN (IN_FILE) DO
+ BEGIN
+ READ (IN_FILE, IN_CHAR);
+ LENGTH := LENGTH + 1;
+ CHARS[LENGTH] := IN_CHAR;
+ IF IN_CHAR IN ['A'..'Z', 'a'..'z'] THEN
+ WITH LETTERS DO
+ BEGIN
+ LENGTH := LENGTH + 1;
+ CHARS[LENGTH] := IN_CHAR;
+ END (*WITH/IF*);
+ END (*WHILE/WITH*);
+
+ (********************* Palindrome (test) **************)
+ (** Check contents of IN_LINE and LETTERS. #optional **)
+ (********************************************************)
+
+ (***************** End of Palindrome (1) **************)
+
+ READLN (IN_FILE);
+
+ (***************** Palindrome (2) *********************)
+ (** Test palindromicity of LETTERS. Set IS_PALINDROME **)
+ (** to reflect the result of the test. **)
+ WITH LETTERS DO
+ BEGIN
+ (* Transform lowercase to uppercase. *)
+ FOR I := 1 TO LENGTH DO
+ IF CHARS[I] IN ['a'..'z']
+ THEN CHARS[I] :=
+ CHR(ORD(CHARS[I]) - ORD('a') + ORD('A'));
+
+ (* Perform the palindromicity test. *)
+ IS_PALINDROME := TRUE;
+ I := 1;
+ WHILE IS_PALINDROME AND (I <= LENGTH DIV 2) DO
+ IF CHARS[I] = CHARS[LENGTH-I+1] THEN
+ I := I + 1
+ ELSE
+ IS_PALINDROME := FALSE;
+ END (*WITH*);
+ (***************** End of Palindrome (2) **************)
+
+
+ IF IS_PALINDROME THEN
+ BEGIN
+ (***************** Palindrome (3) *****************)
+ (** Write IN_LINE to OUT_FILE. **)
+ WITH IN_LINE DO
+ BEGIN
+ FOR J := 1 TO LENGTH DO
+ WRITE (OUT_FILE, CHARS[J]);
+ END (*WITH*);
+ (************* End of Palindrome (3) **************)
+
+ WRITELN (OUT_FILE);
+ END (*IF*);
+ END (*WHILE*);
+ (************* End of Palindrome (body) *******************)
+
+ END (*PALINDROME*).
+ (******************* End of palindrome.pas ********************)
diff --git a/web/clip/unix/ex01_a.ps b/web/clip/unix/ex01_a.ps
new file mode 100644
index 0000000000..0bc91a950e
--- /dev/null
+++ b/web/clip/unix/ex01_a.ps
@@ -0,0 +1,1415 @@
+%!PS-Adobe-2.0
+%%DocumentFonts: (atend)
+%%Title: F:\\LPT\\UNIX\\EX01_A.DOC
+%%Creator: Lotus Manuscript
+%%For: EWvA, MRK
+%%CreationDate: November 16, 1993
+%%Pages: (atend)
+%%BoundingBox: 0 0 595 841
+%%EndComments
+% PostScript Prologue (initialization) for Manuscript
+% Copyright (c) 1985,1986,1987,1988 Lotus Development Corporation
+% There is no user servicable code in this file.
+
+% set timeouts to infinite
+statusdict begin
+0 setjobtimeout
+/manualfeedtimeout 3600 def
+/waittimeout 0 def
+end
+
+% correct bug correction in rev 41.0
+/idiv{div cvi}bind def
+
+% define User Dictionary
+/msdict 300 dict def msdict begin
+/bd{bind def}bind def
+
+% Define commonly used things
+/delay{usertime 5000 add{dup usertime lt{pop exit}if}loop}bd
+/mfeed{statusdict begin /manualfeed true def end}bd
+/afeed{statusdict begin /manualfeed false def end}bd
+/bfeed{ afeed statusdict begin /setpapertray where
+ {pop setpapertray}{pop} ifelse end}bd
+
+/dpi{0.24 dup scale}bd
+
+% These two are called for each page
+/inpage false def
+/begpage{save dpi /inpage true def}bd
+/endpage{inpage {restore showpage}if }bd
+
+% for possible banner
+/fileinfo {pop pop pop}bd
+/enddocument {end} bd
+
+% these are also used by eqn & gmf
+/ld{load def}bd
+/x/exch ld
+/cu{300 mul 72 div}bd
+/m/moveto ld
+/t/translate ld
+/rm/rmoveto ld
+/cp/currentpoint ld
+/st/stroke ld
+/ln/lineto ld
+/rlt/rlineto ld
+/slw/setlinewidth ld
+
+/ff/findfont ld
+/scf/scalefont ld
+/sf/setfont ld
+/fs{x /pt x def ff pt cu scf sf}bd
+
+% linedraw
+/li{4 2 roll setlinewidth 3 1 roll moveto 0.0 rlineto st}bd
+
+% outline factor
+/olwid 40.0 def
+% stroke width for outline
+/uoslw {pt cu x div slw}bd
+% relative horizontal move
+/xm{x currentpoint pop sub 0.0 rmoveto}bd
+
+% The basic show
+/s/show ld
+% move horizontal and show
+/ms{xm s}bd
+
+% variations
+% outline show - first printer attribute
+/ppss{dup cp 3 -1 roll false charpath st
+x 3 -1 roll stringwidth pop add x moveto}bd
+/pss{olwid uoslw { ( ) dup 0 4 -1 roll put ppss}forall}bd
+/ps{pss}bd
+/mps{xm ps}bd
+
+% graybox show - second printer attribute
+/gb{cp 3 -1 roll pt cu dup 4 div neg 0 x rm dup 0 x rlt x 0 rlt
+neg 0 x rlt closepath currentgray .9 setgray fill setgray m}bd
+/usi{dup stringwidth pop gb}bd
+/us{usi s}bd
+/xum{x cp pop sub dup gb 0 rmoveto}bd
+
+% combinations of PD1 and PD2
+/ups{usi pss}bd
+/mups{xm ups}bd
+/mus{xm us}bd
+
+% define a new encoding vector (code page 850 based)
+/PC 256 array def
+StandardEncoding PC copy pop
+
+/dotaccent/bullet
+/quotesingle/quotedblleft/quotedblright/quotesinglbase
+/quotedblbase/guilsinglleft/guilsinglright/.notdef
+/ellipsis/perthousand/.notdef/.notdef/paragraph/section/dagger/daggerdbl
+/OE/oe/fi/fl/endash/emdash/fraction/Ydieresis
+PC 6 26 getinterval astore pop
+
+/Ccedilla/udieresis/eacute/acircumflex/adieresis/agrave/aring/ccedilla
+/ecircumflex/edieresis/egrave/idieresis/icircumflex/igrave/Adieresis/Aring
+/Eacute/ae/AE/ocircumflex/odieresis/ograve/ucircumflex/ugrave
+/ydieresis/Odieresis/Udieresis/oslash/sterling/Oslash/.notdef/florin
+/aacute/iacute/oacute/uacute/ntilde/Ntilde/ordfeminine/ordmasculine
+/questiondown/.notdef/.notdef/onehalf/onequarter/exclamdown/guillemotleft/guillemotright
+/.notdef/.notdef/.notdef/.notdef/.notdef/Aacute/Acircumflex/Agrave
+/.notdef/.notdef/.notdef/.notdef/.notdef/cent/yen/.notdef
+/.notdef/grave/.notdef/circumflex/tilde/.notdef/atilde/Atilde
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/currency
+/eth/Eth/Ecircumflex/Edieresis/Egrave/dotlessi/Iacute/Icircumflex
+/Idieresis/.notdef/.notdef/.notdef/.notdef/brokenbar/Igrave/.notdef
+/Oacute/germandbls/Ocircumflex/Ograve/otilde/Otilde/.notdef/thorn
+/Thorn/Uacute/Ucircumflex/Ugrave/yacute/Yacute/.notdef/acute
+/.notdef/.notdef/.notdef/threequarters/paragraph/section/.notdef/cedilla
+/ring/dieresis/periodcentered/onesuperior/threesuperior/twosuperior/.notdef/.notdef
+
+PC 128 128 getinterval astore pop
+
+% duplicate fonts with a new encoding vector
+/recd 5 dict def
+/pcft
+{recd begin
+/ncs PC def /nfn x def
+/bfn x def /bfd bfn findfont def
+/nf bfd maxlength dict def
+bfd{x dup dup /FID ne x /Encoding ne and
+{x nf 3 1 roll put}{pop pop}ifelse
+}forall
+nf/FontName nfn put
+nf/Encoding ncs put
+nfn nf definefont pop
+end}bd
+
+/fs{x /pt x def ff pt cu scf sf}bd
+
+% used by eqn
+/Times-Roman/TR pcft /Times-Bold/TRB pcft
+/Times-Italic/TRI pcft /Times-BoldItalic/TRBI pcft
+/Helvetica/HV pcft /Helvetica-Bold/HVB pcft
+/Helvetica-Oblique/HVO pcft /Helvetica-BoldOblique/HVBO pcft
+/Courier/CR pcft /Courier-Bold/CRB pcft
+/Sym{/Symbol fs}bd
+
+% Bit map image data decompression code
+/xx 0 def /yy 0 def
+/xbytes 0 def
+/lbuf 1200 string def /obuf 600 string def
+/bval <FFFEFCF8F0E0C080000103070F1F3F7F> def
+/blacks 96 string def /whites 96 string def
+0 1 95 {whites x 255 put} for
+
+/dispatch [
+{
+dup 47 le {32 sub 4 bitshift x pop 1}{
+dup 63 le {x pop 48 sub bval x get
+3 copy put x 1 add x 0} {
+dup 79 le {62 sub} {
+80 sub { 3 copy put x 1 add x } repeat 0
+}ifelse }ifelse }ifelse
+}bind
+{
+32 sub add
+3 copy put
+x 1 add x 0
+} bind
+{
+32 sub x pop add 255 0
+}bind
+{
+32 sub x pop
+3 copy getinterval
+whites 0 3 index getinterval
+x copy pop add 255 0
+}bind
+{
+32 sub x pop
+3 copy getinterval
+blacks 0 3 index getinterval
+x copy pop add 0 0
+}bind
+]def
+
+% read a raster line and unpack
+/readx{
+obuf 0 255 0
+currentfile lbuf readline pop
+{x dispatch x get exec} forall
+pop pop pop 0 xbytes getinterval}bd
+
+/mspic{
+/yy x def/xx x def
+/xbytes xx 8 idiv def
+xx yy 1 [xx 0 0 0 yy sub 0 yy]{readx}image}bd
+
+
+
+/Helvetica/fA pcft/FA{/fA fs}bd
+/Helvetica-Oblique/fAI pcft/FAI{/fAI fs}bd
+/Helvetica-Bold/fAB pcft/FAB{/fAB fs}bd
+/Helvetica-BoldOblique/fAIB pcft/FAIB{/fAIB fs}bd
+/Times-Roman/fB pcft/FB{/fB fs}bd
+/Times-Italic/fBI pcft/FBI{/fBI fs}bd
+/Times-Bold/fBB pcft/FBB{/fBB fs}bd
+/Times-BoldItalic/fBIB pcft/FBIB{/fBIB fs}bd
+/Courier/fH pcft/FH{/fH fs}bd
+/Courier-Oblique/fHI pcft/FHI{/fHI fs}bd
+/Courier-Bold/fHB pcft/FHB{/fHB fs}bd
+/Courier-BoldOblique/fHIB pcft/FHIB{/fHIB fs}bd
+/ZapfChancery-MediumItalic/fL pcft/FL{/fL fs}bd
+/ZapfChancery-MediumItalic/fLI pcft/FLI{/fLI fs}bd
+/ZapfChancery-MediumItalic/fLB pcft/FLB{/fLB fs}bd
+/ZapfChancery-MediumItalic/fLIB pcft/FLIB{/fLIB fs}bd
+/AvantGarde-Book/fM pcft/FM{/fM fs}bd
+/AvantGarde-BookOblique/fMI pcft/FMI{/fMI fs}bd
+/AvantGarde-Demi/fMB pcft/FMB{/fMB fs}bd
+/AvantGarde-DemiOblique/fMIB pcft/FMIB{/fMIB fs}bd
+(F:\\LPT\\UNIX\\EX01_A.DOC)(EWvA, MRK)(November 16, 1993)fileinfo
+%%EndProlog
+%%Page: 0 1
+begpage
+12 FAB
+977 2996 m
+(Example 01: Palindrome filter)s
+12 FB
+295 2669 m
+(In)s
+354(this)ms
+444(appendix)ms
+645(we)ms
+721(illustrate)ms
+914(the)ms
+993(CLiP)ms
+1117(style)ms
+1229(of)ms
+1289(literate)ms
+1445(programming)ms
+1735(by)ms
+1803(a)ms
+1843(program)ms
+2031(to)ms
+2087(filter)ms
+295 2609 m
+(palindromic)s
+549(lines)ms
+656(from)ms
+765(an)ms
+825(input)ms
+940(file.)ms
+12 FB
+395 2549 m
+(Two)s
+501(files)ms
+602(are)ms
+678(involved:)ms
+882(the)ms
+958(program)ms
+1142(module)ms
+1307(\()ms
+11 FH
+(palindrome.pas)s
+12 FB
+(\))s
+1740(and)ms
+1827(a)ms
+1864(test)ms
+1949(file)ms
+2030(\()ms
+11 FH
+(test-)s
+11 FH
+295 2489 m
+(data.in)s
+12 FB
+(\).)s
+12 FAB
+295 2306 m
+(A.1. Specification)s
+12 FB
+295 2219 m
+(A)s
+343(palindrome)ms
+583(is)ms
+628(a)ms
+663(sentence)ms
+847(with)ms
+948(the)ms
+1021(property)ms
+1203(that)ms
+1290(the)ms
+1364(letters)ms
+1498(from)ms
+1607(left)ms
+1686(to)ms
+1737(right,)ms
+1856(read)ms
+1955(the)ms
+2028(same)ms
+2143(as)ms
+295 2159 m
+(from)s
+412(right)ms
+527(to)ms
+586(left.)ms
+686(In)ms
+748(the)ms
+830(comparison)ms
+1083(uppercase)ms
+1304(and)ms
+1396(lowercase)ms
+1617(letters)ms
+1759(are)ms
+1841(considered)ms
+2078(to)ms
+2137(be)ms
+295 2099 m
+(equivalent)s
+512(and)ms
+593(all)ms
+652(other)ms
+763(characters)ms
+975(are)ms
+1044(simply)ms
+1189(ignored.)ms
+1364(Hence)ms
+1500(an)ms
+1556(empty)ms
+1690(sentence)ms
+1871(is)ms
+1913(a)ms
+1944(palindrome.)ms
+295 2039 m
+(Other)s
+421(examples)ms
+622(are:)ms
+10 FH
+395 1958 m
+(\(************* #file "testdata.in" #comment off **************\))s
+395 1916 m
+(Ada)s
+395 1875 m
+(1234567)s
+395 1833 m
+(doremifasolosafimerod)s
+395 1791 m
+(\(******* Testdata #multiple *******\))s
+395 1750 m
+(\(***************** End of testdata.in *************************\))s
+12 FB
+295 1657 m
+(The)s
+385(following)ms
+592(sentences)ms
+796(do)ms
+858(not)ms
+935(qualify)ms
+1089(as)ms
+1143(a)ms
+1178(palindrome.)ms
+10 FH
+395 1576 m
+(\(******* Testdata #quick *******\))s
+395 1535 m
+(Mr. Clinton won the elections over Mr. Bush.)s
+395 1493 m
+(This line is not palindromic.)s
+395 1451 m
+(Aabbccdd Aabbccdd Aabbccdd Aabbccdd)s
+395 1410 m
+(Abracadabra)s
+395 1368 m
+(supercalafragilisiticexpielecdosia)s
+12 FB
+295 1276 m
+(The)s
+385(following)ms
+592(are)ms
+665(examples)ms
+867(of)ms
+921(more)ms
+1036(sophisticated)ms
+1310(palindromes.)ms
+10 FH
+395 1195 m
+(\(******* Testdata #quick *******\))s
+395 1153 m
+(Able was I, ere I saw Elba.)s
+395 1111 m
+(A man, a plan, a canal, Panama.)s
+395 1070 m
+(Norma is as selfless as I Am, Ron.)s
+12 FB
+295 977 m
+(Note)s
+404(that)ms
+492(the)ms
+565(famous)ms
+725(Dutch)ms
+860(sentence)ms
+10 FH
+395 896 m
+(\(******* Testdata #quick *******\))s
+395 855 m
+(Koos Eekfeen keek maar door rood kerkraam, maar krek door rood raam)s
+395 813 m
+(keek neef Kees ook.)s
+12 FB
+295 721 m
+(will)s
+385(not)ms
+461(be)ms
+521(recognized)ms
+753(as)ms
+807(a)ms
+842(plindrome)ms
+1060(since)ms
+1175(it)ms
+1215(occupies)ms
+1403(two)ms
+1490(lines.)ms
+395 661 m
+(The)s
+488(program)ms
+11 FH
+674(PALINDROME)ms
+12 FB
+965(reads)ms
+1087(an)ms
+1151(input)ms
+1270(file,)ms
+1365(filters)ms
+1498(the)ms
+1575(lines)ms
+1686(that)ms
+1777(are)ms
+1854(palindromic)ms
+2112(and)ms
+295 601 m
+(writes)s
+429(them)ms
+542(to)ms
+593(an)ms
+653(output)ms
+793(file.)ms
+8 FB
+470 204 m
+(The)s
+530(CLiP)ms
+608(Style)ms
+685(of)ms
+721(Literate)ms
+833(Programming)ms
+1025(\(3.095,)ms
+1128(16-nov-93\))ms
+12 FB
+2075 204 m
+( 1 )s
+50 2 2130 216 li
+50 2 2020 216 li
+endpage
+%%Page: 1 2
+begpage
+12 FAB
+295 3176 m
+(A.2. Communication with the outside world)s
+12 FB
+295 3089 m
+(The)s
+391(program)ms
+578(conforms)ms
+785(to)ms
+842(the)ms
+922(general)ms
+1087(template)ms
+1278(of)ms
+1338(a)ms
+1378(Pascal)ms
+1524(program.)ms
+1724(We)ms
+1812(introduce)ms
+2019(the)ms
+2098(files)ms
+11 FH
+295 3029 m
+(IN_FILE)s
+12 FB
+501(and)ms
+11 FH
+586(OUT_FILE)ms
+12 FB
+820(to)ms
+872(define)ms
+1011(its)ms
+1072(communication)ms
+1396(with)ms
+1499(the)ms
+1573(outside)ms
+1731(world.)ms
+1874(The)ms
+1966(actual)ms
+2098(files)ms
+295 2969 m
+(have)s
+401(to)ms
+453(be)ms
+513(specified)ms
+706(at)ms
+754(run-time.)ms
+951(Thus)ms
+1064(we)ms
+1135(have)ms
+10 FH
+395 2888 m
+(\(*************** #file "palindrome.pas" ***********************\))s
+395 2846 m
+(\(****************************************************************\))s
+395 2805 m
+(\(* Program: Palindrome filter program. *\))s
+395 2763 m
+(\(* Purpose: To filter the palindromic lines from a given input *\))s
+395 2721 m
+(\(* file to a specified output file. *\))s
+395 2680 m
+(\(****************************************************************\))s
+395 2638 m
+(PROGRAM PALINDROME \(INPUT, OUTPUT, IN_FILE, OUT_FILE\);)s
+395 2555 m
+(\(******* Palindrome constants #multiple #comment off *******\))s
+395 2513 m
+(\(******* Palindrome types #multiple #comment off *******\))s
+395 2471 m
+(VAR)s
+395 2430 m
+( IN_FILE, OUT_FILE: TEXT;)s
+395 2388 m
+(\(******* Palindrome variables #multiple #comment off *******\))s
+395 2305 m
+(BEGIN)s
+495 2263 m
+(OPEN \(IN_FILE, 'TESTDATA.IN', 'old'\); RESET \(IN_FILE\);)s
+395 2221 m
+( OPEN \(OUT_FILE, 'TESTDATA.OUT', 'unknown'\); REWRITE \(OUT_FILE\);)s
+395 2138 m
+( \(***************** Palindrome \(body\) **********************\))s
+395 2096 m
+( \(** Copy the lines of the IN_FILE that are palindromic to **\))s
+395 2055 m
+( \(** the OUT_FILE. **\))s
+395 2013 m
+( \(************************************************************\))s
+395 1930 m
+(END \(*PALINDROME*\).)s
+395 1888 m
+(\(******************* End of palindrome.pas ********************\))s
+12 FB
+295 1796 m
+(To)s
+363(prepare)ms
+525(the)ms
+599(module)ms
+761(for)ms
+832(future)ms
+964(declarations)ms
+1218(of)ms
+1272(constants)ms
+1471(and)ms
+1555(types)ms
+1673(we)ms
+1744(have)ms
+10 FH
+395 1715 m
+(\(******* Palindrome constants #leader #quick *******\))s
+395 1673 m
+(CONST)s
+395 1631 m
+(\(******* Palindrome types #leader #quick *******\))s
+395 1590 m
+(TYPE)s
+12 FAB
+295 1477 m
+(A.3. Processing of the files)s
+12 FB
+295 1391 m
+(The)s
+384(program)ms
+565(processes)ms
+11 FH
+768(IN_FILE)ms
+12 FB
+972(line)ms
+1059(by)ms
+1120(line.)ms
+1219(The)ms
+1309(idea)ms
+1403(is)ms
+1448(to)ms
+1499(buffer)ms
+1632(an)ms
+1691(exact)ms
+1808(copy)ms
+1917(of)ms
+1970(the)ms
+2043(current)ms
+295 1331 m
+(line)s
+382(in)ms
+11 FH
+434(IN_LINE)ms
+12 FB
+(,)s
+652(while)ms
+776(at)ms
+824(the)ms
+898(same)ms
+1014(time)ms
+1116(its)ms
+1176(letters)ms
+1311(are)ms
+1384(buffered)ms
+1567(in)ms
+11 FH
+1618(LETTERS)ms
+12 FB
+(.)s
+1836(So)ms
+11 FH
+1902(LETTERS)ms
+12 FB
+2107(will)ms
+295 1271 m
+(be)s
+353(empty)ms
+489(if)ms
+531(the)ms
+603(line)ms
+689(holds)ms
+808(no)ms
+869(letters)ms
+1003(at)ms
+1050(all,)ms
+1124(in)ms
+1174(which)ms
+1307(case)ms
+1404(the)ms
+1476(line)ms
+1562(is)ms
+1607(considered)ms
+1835(to)ms
+1885(be)ms
+1943(palindromic)ms
+295 1211 m
+(by)s
+357(definition.)ms
+395 1151 m
+(We)s
+475(choose)ms
+624(the)ms
+696(buffers)ms
+11 FH
+848(IN_LINE)ms
+12 FB
+1051(and)ms
+11 FH
+1134(LETTERS)ms
+12 FB
+1337(to)ms
+1387(be)ms
+1445(of)ms
+1497(the)ms
+1569(same)ms
+1682(type,)ms
+11 FH
+1792(TEXT_LINE)ms
+12 FB
+(,)s
+2062(which)ms
+295 1091 m
+(we)s
+365(will)ms
+456(not)ms
+532(specify)ms
+689(in)ms
+740(detail)ms
+864(right)ms
+971(now.)ms
+1082(For)ms
+1164(this)ms
+1249(purpose)ms
+1419(we)ms
+1490(introduce)ms
+1692(a)ms
+1726(type)ms
+11 FH
+1825(ABSTRACT)ms
+12 FB
+(.)s
+10 FH
+395 1010 m
+(\(******* Palindrome types #quick *******\))s
+395 968 m
+( ABSTRACT = \(DEFINED, UNDEFINED\);)s
+11 FH
+295 876 m
+(TEXT_LINE)s
+12 FB
+555(will)ms
+646(temporarily)ms
+892(be)ms
+952(declared)ms
+11 FH
+1134(ABSTRACT)ms
+12 FB
+1367(and)ms
+1453(its)ms
+1513(details)ms
+1656(will)ms
+1747(be)ms
+1807(defined)ms
+1970(later.)ms
+2084(Thus)ms
+295 816 m
+(the)s
+368(declaration)ms
+603(of)ms
+11 FH
+657(TEXT_LINE)ms
+10 FH
+395 735 m
+(\(******* Palindrome types *******\))s
+395 693 m
+(\(******* Declaration of TEXT_LINE *******\))s
+395 651 m
+(\(***************** End of Palindrome types ********************\))s
+12 FB
+295 559 m
+(is)s
+340(temporarily)ms
+586(satisfied)ms
+765(with)ms
+867(the)ms
+940(type)ms
+11 FH
+1039(ABSTRACT)ms
+12 FB
+(.)s
+10 FH
+395 478 m
+(\(******* Declaration of TEXT_LINE #quick #default *******\))s
+395 436 m
+( TEXT_LINE = ABSTRACT;)s
+12 FB
+295 344 m
+(The)s
+385(declaration)ms
+619(for)ms
+690(the)ms
+764(variables)ms
+11 FH
+957(IN_LINE)ms
+12 FB
+1162(and)ms
+11 FH
+1247(LETTERS)ms
+12 FB
+1452(becomes)ms
+8 FB
+470 204 m
+(The)s
+530(CLiP)ms
+608(Style)ms
+685(of)ms
+721(Literate)ms
+833(Programming)ms
+1025(\(3.095,)ms
+1128(16-nov-93\))ms
+12 FB
+2075 204 m
+( 2 )s
+50 2 2130 216 li
+50 2 2020 216 li
+endpage
+%%Page: 2 3
+begpage
+10 FH
+395 3188 m
+(\(******* Palindrome variables #quick *******\))s
+395 3146 m
+( IN_LINE,)s
+395 3105 m
+( LETTERS: TEXT_LINE;)s
+12 FB
+295 3012 m
+(We)s
+379(have)ms
+488(to)ms
+542(test)ms
+11 FH
+626(LETTERS)ms
+12 FB
+834(in)ms
+887(order)ms
+1008(to)ms
+1062(decide)ms
+1207(whether)ms
+1383(or)ms
+1439(not)ms
+11 FH
+1518(IN_LINE)ms
+12 FB
+1726(contains)ms
+1907(a)ms
+1944(palindrome.)ms
+295 2952 m
+(The)s
+385(result)ms
+508(of)ms
+563(this)ms
+647(test)ms
+729(is)ms
+775(flagged)ms
+938(by)ms
+11 FH
+1000(IS_PALINDROME)ms
+12 FB
+(,)s
+1383(for)ms
+1453(which)ms
+1588(we)ms
+1659(introduce)ms
+1860(the)ms
+1934(declaration)ms
+10 FH
+395 2871 m
+(\(******* Palindrome variables #quick *******\))s
+395 2830 m
+( IS_PALINDROME: BOOLEAN;)s
+12 FB
+295 2737 m
+(Now)s
+404(the)ms
+478(body)ms
+590(of)ms
+644(the)ms
+718(Palindrome)ms
+961(filter)ms
+1071(may)ms
+1169(be)ms
+1229(expanded)ms
+1433(as)ms
+10 FH
+395 2656 m
+( \(***************** Palindrome \(body\) **********************\))s
+395 2615 m
+( \(** Copy the lines of the IN_FILE that are palindromic to **\))s
+395 2573 m
+( \(** the OUT_FILE. **\))s
+395 2531 m
+( WHILE NOT EOF \(IN_FILE\) DO)s
+395 2490 m
+( BEGIN)s
+395 2448 m
+( \(***************** Palindrome \(1\) *********************\))s
+395 2406 m
+( \(** Read a line from IN_FILE into IN_LINE. The letters **\))s
+395 2365 m
+( \(** of this line are copied to LETTERS. **\))s
+395 2323 m
+( \(********************************************************\))s
+395 2240 m
+( READLN \(IN_FILE\);)s
+395 2156 m
+( \(***************** Palindrome \(2\) *********************\))s
+395 2115 m
+( \(** Test palindromicity of LETTERS. Set IS_PALINDROME **\))s
+395 2073 m
+( \(** to reflect the result of the test. **\))s
+395 2031 m
+( \(********************************************************\))s
+395 1906 m
+( IF IS_PALINDROME THEN)s
+395 1865 m
+( BEGIN)s
+395 1823 m
+( \(***************** Palindrome \(3\) *****************\))s
+395 1781 m
+( \(** Write IN_LINE to OUT_FILE. **\))s
+395 1740 m
+( \(****************************************************\))s
+395 1656 m
+( WRITELN \(OUT_FILE\);)s
+395 1615 m
+( END \(*IF*\);)s
+395 1573 m
+( END \(*WHILE*\);)s
+395 1531 m
+( \(************* End of Palindrome \(body\) *******************\))s
+12 FAB
+295 1419 m
+(A.4. Choosing the structure of )s
+11 FH
+(IN_LINE)s
+12 FAB
+( and )s
+11 FH
+(LETTERS)s
+12 FB
+295 1332 m
+(Before)s
+442(we)ms
+512(can)ms
+593(proceed)ms
+763(we)ms
+833(need)ms
+939(to)ms
+989(establish)ms
+1176(a)ms
+1209(structure)ms
+1396(for)ms
+1466(the)ms
+1538(objects)ms
+11 FH
+1692(IN_LINE)ms
+12 FB
+1896(and)ms
+11 FH
+1979(LETTERS)ms
+12 FB
+(.)s
+295 1272 m
+(Thus)s
+403(we)ms
+470(define)ms
+11 FH
+603(TEXT_LINE)ms
+12 FB
+859(as)ms
+909(a)ms
+940(structure)ms
+1123(with)ms
+1220(two)ms
+1304(components.)ms
+1566(The)ms
+1652(first)ms
+1741(component)ms
+1972(is)ms
+2014(an)ms
+2069(array,)ms
+11 FH
+295 1212 m
+(CHARS)s
+12 FB
+(,)s
+454(which)ms
+586(contains)ms
+762(the)ms
+832(characters)ms
+1044(to)ms
+1092(be)ms
+1149(buffered.)ms
+1340(The)ms
+1428(second)ms
+1576(component,)ms
+11 FH
+1820(LENGTH)ms
+12 FB
+(,)s
+2007(indicates)ms
+295 1152 m
+(which)s
+432(part)ms
+525(of)ms
+582(the)ms
+659(array)ms
+777(is)ms
+826(actually)ms
+999(occupied.)ms
+1208(The)ms
+1301(maximum)ms
+1519(number)ms
+1687(of)ms
+1744(characters)ms
+1962(that)ms
+2053(can)ms
+2137(be)ms
+295 1092 m
+(buffered)s
+477(by)ms
+540(the)ms
+614(structure)ms
+802(is)ms
+848(determined)ms
+1086(by)ms
+1149(the)ms
+1224(length,)ms
+11 FH
+1374(MAX_L)ms
+12 FB
+(,)s
+1537(of)ms
+1592(the)ms
+1666(array.)ms
+11 FH
+1794(MAX_L)ms
+12 FB
+1945(serves)ms
+2083(as)ms
+2137(an)ms
+295 1032 m
+(implementation)s
+621(parameter.)ms
+10 FH
+395 951 m
+(\(******* Palindrome constants #quick *******\))s
+395 910 m
+( MAX_L = 132;)s
+395 826 m
+(\(******* Declaration of TEXT_LINE #quick *******\))s
+395 785 m
+( TEXT_LINE = RECORD)s
+395 743 m
+( CHARS: ARRAY[1..MAX_L] OF CHAR;)s
+395 701 m
+( LENGTH: 0..MAX_L;)s
+395 660 m
+( END \(*RECORD*\);)s
+12 FAB
+295 547 m
+(A.5. Reading a line)s
+12 FB
+295 461 m
+(For)s
+372(efficiency)ms
+579(reasons)ms
+737(we)ms
+803(fill)ms
+11 FH
+869(IN_LINE)ms
+12 FB
+1069(and)ms
+11 FH
+1149(LETTERS)ms
+12 FB
+1350(simultaneously.)ms
+1673(Therefore)ms
+1878(we)ms
+1944(buffer)ms
+2074(every)ms
+295 401 m
+(character)s
+490(that)ms
+578(is)ms
+624(read)ms
+722(from)ms
+11 FH
+832(IN_FILE)ms
+12 FB
+1037(in)ms
+1088(the)ms
+1162(variable)ms
+11 FH
+1335(IN_CHAR)ms
+12 FB
+(.)s
+8 FB
+470 204 m
+(The)s
+530(CLiP)ms
+608(Style)ms
+685(of)ms
+721(Literate)ms
+833(Programming)ms
+1025(\(3.095,)ms
+1128(16-nov-93\))ms
+12 FB
+2075 204 m
+( 3 )s
+50 2 2130 216 li
+50 2 2020 216 li
+endpage
+%%Page: 3 4
+begpage
+10 FH
+395 3188 m
+(\(******* Palindrome variables #quick *******\))s
+395 3146 m
+( IN_CHAR: CHAR;)s
+12 FB
+295 3054 m
+(Only)s
+404(when)ms
+11 FH
+522(IN_CHAR)ms
+12 FB
+724(turns)ms
+834(out)ms
+907(to)ms
+956(be)ms
+1013(a)ms
+1045(letter)ms
+1157(it)ms
+1194(is)ms
+1237(copied)ms
+1380(to)ms
+11 FH
+1429(LETTERS)ms
+12 FB
+(.)s
+1643(Since)ms
+1764(this)ms
+1846(process)ms
+2006(is)ms
+2049(crucial)ms
+295 2994 m
+(for)s
+365(the)ms
+439(overall)ms
+590(operation,)ms
+804(we)ms
+875(make)ms
+996(provisions)ms
+1217(for)ms
+1287(some)ms
+1405(debugging)ms
+1629(code)ms
+1736(here.)ms
+10 FH
+395 2913 m
+( \(***************** Palindrome \(1\) *********************\))s
+395 2871 m
+( \(** Read a line from IN_FILE into IN_LINE. The letters **\))s
+395 2830 m
+( \(** of this line are copied to LETTERS. **\))s
+395 2788 m
+( IN_LINE.LENGTH := 0;)s
+395 2746 m
+( LETTERS.LENGTH := 0;)s
+395 2705 m
+( WITH IN_LINE DO)s
+395 2663 m
+( WHILE NOT EOLN \(IN_FILE\) DO)s
+395 2621 m
+( BEGIN)s
+395 2580 m
+( READ \(IN_FILE, IN_CHAR\);)s
+395 2538 m
+( LENGTH := LENGTH + 1;)s
+395 2496 m
+( CHARS[LENGTH] := IN_CHAR;)s
+395 2455 m
+( IF IN_CHAR IN ['A'..'Z', 'a'..'z'] THEN)s
+395 2413 m
+( WITH LETTERS DO)s
+395 2371 m
+( BEGIN)s
+395 2330 m
+( LENGTH := LENGTH + 1;)s
+395 2288 m
+( CHARS[LENGTH] := IN_CHAR;)s
+395 2246 m
+( END \(*WITH/IF*\);)s
+395 2205 m
+( END \(*WHILE/WITH*\);)s
+395 2121 m
+( \(********************* Palindrome \(test\) **************\))s
+395 2080 m
+( \(** Check contents of IN_LINE and LETTERS. #optional **\))s
+395 2038 m
+( \(********************************************************\))s
+395 1955 m
+( \(***************** End of Palindrome \(1\) **************\))s
+12 FAB
+295 1842 m
+(A.6. Testing for palindromicity)s
+12 FB
+295 1756 m
+(We)s
+372(test)ms
+451(the)ms
+520(palindromicity)ms
+823(of)ms
+11 FH
+873(LETTERS)ms
+12 FB
+1075(in)ms
+1122(two)ms
+1206(steps.)ms
+1327(First)ms
+1427(we)ms
+1494(transform)ms
+1697(the)ms
+1767(contents)ms
+1942(of)ms
+11 FH
+1992(LETTERS)ms
+12 FB
+295 1696 m
+(to)s
+343(uppercase)ms
+553(and)ms
+636(then)ms
+732(we)ms
+800(compare)ms
+983(the)ms
+1054(characters)ms
+1266(of)ms
+11 FH
+1318(LETTERS)ms
+12 FB
+1521(pairwise.)ms
+1713(The)ms
+1801(comparison)ms
+2044(is)ms
+2087(done)ms
+295 1636 m
+(starting)s
+458(with)ms
+561(the)ms
+636(most)ms
+747(outside)ms
+905(characters)ms
+1121(and)ms
+1207(progressing)ms
+1454(inward.)ms
+1619(The)ms
+1710(string)ms
+1838(is)ms
+1885(assumed)ms
+2071(a)ms
+2107(pal-)ms
+295 1576 m
+(indrome)s
+470(until)ms
+571(the)ms
+641(opposite)ms
+820(is)ms
+862(proven)ms
+1010(through)ms
+1175(a)ms
+1206(pair)ms
+1293(of)ms
+1344(different)ms
+1525(characters.)ms
+1749(With)ms
+1858(the)ms
+1928(local)ms
+2034(counter)ms
+10 FH
+395 1495 m
+(\(******* Palindrome variables #quick *******\))s
+395 1453 m
+( I: INTEGER;)s
+12 FB
+295 1361 m
+(we)s
+365(keep)ms
+472(track)ms
+585(of)ms
+639(the)ms
+712(comparing)ms
+939(process.)ms
+1114(Now)ms
+11 FH
+1223(Palindrome \(2\))ms
+12 FB
+1621(can)ms
+1703(be)ms
+1763(expanded)ms
+1967(as)ms
+10 FH
+395 1280 m
+( \(***************** Palindrome \(2\) *********************\))s
+395 1238 m
+( \(** Test palindromicity of LETTERS. Set IS_PALINDROME **\))s
+395 1196 m
+( \(** to reflect the result of the test. **\))s
+395 1155 m
+( WITH LETTERS DO)s
+395 1113 m
+( BEGIN)s
+395 1071 m
+( \(* Transform lowercase to uppercase. *\))s
+395 1030 m
+( FOR I := 1 TO LENGTH DO)s
+395 988 m
+( IF CHARS[I] IN ['a'..'z'])s
+395 946 m
+( THEN CHARS[I] :=)s
+395 905 m
+( CHR\(ORD\(CHARS[I]\) - ORD\('a'\) + ORD\('A'\)\);)s
+395 821 m
+( \(* Perform the palindromicity test. *\))s
+395 780 m
+( IS_PALINDROME := TRUE;)s
+395 738 m
+( I := 1;)s
+395 696 m
+( WHILE IS_PALINDROME AND \(I <= LENGTH DIV 2\) DO)s
+395 655 m
+( IF CHARS[I] = CHARS[LENGTH-I+1] THEN)s
+395 613 m
+( I := I + 1)s
+395 571 m
+( ELSE)s
+395 530 m
+( IS_PALINDROME := FALSE;)s
+395 488 m
+( END \(*WITH*\);)s
+395 446 m
+( \(***************** End of Palindrome \(2\) **************\))s
+8 FB
+470 204 m
+(The)s
+530(CLiP)ms
+608(Style)ms
+685(of)ms
+721(Literate)ms
+833(Programming)ms
+1025(\(3.095,)ms
+1128(16-nov-93\))ms
+12 FB
+2075 204 m
+( 4 )s
+50 2 2130 216 li
+50 2 2020 216 li
+endpage
+%%Page: 4 5
+begpage
+12 FAB
+295 3176 m
+(A.7. Writing the palindrome)s
+12 FB
+295 3089 m
+(The)s
+385(only)ms
+486(remaining)ms
+701(action)ms
+836(is)ms
+882(to)ms
+933(write)ms
+1049(the)ms
+1122(contents)ms
+1301(of)ms
+11 FH
+1356(IN_LINE)ms
+12 FB
+(.)s
+1573(Again)ms
+1708(we)ms
+1779(need)ms
+1885(a)ms
+1920(local)ms
+2030(counter)ms
+10 FH
+395 3008 m
+(\(******* Palindrome variables #quick *******\))s
+395 2966 m
+( J: INTEGER;)s
+12 FB
+295 2874 m
+(The)s
+385(writing)ms
+542(proceeds)ms
+732(straight)ms
+894(forward.)ms
+10 FH
+395 2793 m
+( \(***************** Palindrome \(3\) *****************\))s
+395 2751 m
+( \(** Write IN_LINE to OUT_FILE. **\))s
+395 2710 m
+( WITH IN_LINE DO)s
+395 2668 m
+( BEGIN)s
+395 2626 m
+( FOR J := 1 TO LENGTH DO)s
+395 2585 m
+( WRITE \(OUT_FILE, CHARS[J]\);)s
+395 2543 m
+( END \(*WITH*\);)s
+395 2501 m
+( \(************* End of Palindrome \(3\) **************\))s
+8 FB
+470 204 m
+(The)s
+530(CLiP)ms
+608(Style)ms
+685(of)ms
+721(Literate)ms
+833(Programming)ms
+1025(\(3.095,)ms
+1128(16-nov-93\))ms
+12 FB
+2075 204 m
+( 5 )s
+50 2 2130 216 li
+50 2 2020 216 li
+endpage
+%%Trailer
+enddocument
+%%Pages: 5
+%%DocumentFonts:
+%%+ Helvetica-Bold
+%%+ Times-Roman
+%%+ Courier
+%%EOF
+ \ No newline at end of file
diff --git a/web/clip/unix/ex01_b.asc b/web/clip/unix/ex01_b.asc
new file mode 100644
index 0000000000..1c5806481d
--- /dev/null
+++ b/web/clip/unix/ex01_b.asc
@@ -0,0 +1,42 @@
+
+
+
+ Example 01: Testcode
+
+
+
+
+
+This section contains some test code that can be inserted to debug the
+palindrome filter program.
+
+
+B.1. Print the contents of IN_LINE and LETTERS
+
+Correct reading of the input is crucial. For debugging purposes we may want to
+inspect the contents of *IN_LINE* and *LETTERS*. We need a local counter
+
+ (******* Palindrome variables #quick *******)
+ T : INTEGER;
+
+We want the debugging information to be clearly flagged as such.
+
+ (***************** Palindrome (test) ******************)
+ (** Check contents of IN_LINE and LETTERS. **)
+ WRITELN;
+ WRITELN ('============ DEBUGGING INFORMATION ===============');
+ WRITELN ('Contents of buffer IN_LINE: ');
+ WRITE ('>>>>');
+ WITH IN_LINE DO
+ FOR T := 1 TO LENGTH DO WRITE (OUTPUT, CHARS[T]);
+ WRITE ('<<<<');
+ WRITELN;
+ WRITELN ('Contents of buffer LETTERS: ');
+ WRITE ('>>>>');
+ WITH LETTERS DO
+ FOR T := 1 TO LENGTH DO WRITE (OUTPUT, CHARS[T]);
+ WRITE ('<<<<');
+ WRITELN;
+ WRITELN ('========== END OF DEBUGGING INFORMATION ==========');
+ WRITELN;
+ (************* End of Palindrome (test) ***************)
diff --git a/web/clip/unix/ex01_b.ini b/web/clip/unix/ex01_b.ini
new file mode 100644
index 0000000000..b618fb99f1
--- /dev/null
+++ b/web/clip/unix/ex01_b.ini
@@ -0,0 +1,24 @@
+This file contains data that is needed to run CLIP_2
+And is generated by CLIP_1
+Modifying this file at own risk.
+Using CLIP_1 is definitely recommended.
+
+INTERACTIVE_MODE Mode (INTERACTIVE/DEBUG/HELPFUL/AUTO)
+YES Interactive fault correction (YES/NO)
+BOTH Error message destination (TERMINAL/REPORTFILE/BOTH/NONE)
+(* Left comment string
+*) Right comment string
+* Command character
+ENDOF END string
+# Option marker
+EXTRACTED The specified modules are (OMITTED/EXTRACTED)
+------------ REPORT FILE -----------
+clip.rpt
+------------ INPUT FILES -----------
+ex01_a.asc
+ex01_b.asc
+------------ MODULES ---------------
+
+palindrome.pas
+------------ MODULE DIRECTORY ------
+------------ END OF INI FILE -------
diff --git a/web/clip/unix/ex01_b.pas b/web/clip/unix/ex01_b.pas
new file mode 100644
index 0000000000..04945c2cb8
--- /dev/null
+++ b/web/clip/unix/ex01_b.pas
@@ -0,0 +1,119 @@
+ (*************** #file "palindrome.pas" ***********************)
+ (****************************************************************)
+ (* Program: Palindrome filter program. *)
+ (* Purpose: To filter the palindromic lines from a given input *)
+ (* file to a specified output file. *)
+ (****************************************************************)
+ PROGRAM PALINDROME (INPUT, OUTPUT, IN_FILE, OUT_FILE);
+
+ CONST
+ MAX_L = 132;
+ TYPE
+ ABSTRACT = (DEFINED, UNDEFINED);
+ TEXT_LINE = RECORD
+ CHARS: ARRAY[1..MAX_L] OF CHAR;
+ LENGTH: 0..MAX_L;
+ END (*RECORD*);
+ VAR
+ IN_FILE, OUT_FILE: TEXT;
+ IN_LINE,
+ LETTERS: TEXT_LINE;
+ IS_PALINDROME: BOOLEAN;
+ IN_CHAR: CHAR;
+ I: INTEGER;
+ J: INTEGER;
+ T : INTEGER;
+
+ BEGIN
+ OPEN (IN_FILE, 'TESTDATA.IN', 'old'); RESET (IN_FILE);
+ OPEN (OUT_FILE, 'TESTDATA.OUT', 'unknown'); REWRITE (OUT_FILE);
+
+ (***************** Palindrome (body) **********************)
+ (** Copy the lines of the IN_FILE that are palindromic to **)
+ (** the OUT_FILE. **)
+ WHILE NOT EOF (IN_FILE) DO
+ BEGIN
+ (***************** Palindrome (1) *********************)
+ (** Read a line from IN_FILE into IN_LINE. The letters **)
+ (** of this line are copied to LETTERS. **)
+ IN_LINE.LENGTH := 0;
+ LETTERS.LENGTH := 0;
+ WITH IN_LINE DO
+ WHILE NOT EOLN (IN_FILE) DO
+ BEGIN
+ READ (IN_FILE, IN_CHAR);
+ LENGTH := LENGTH + 1;
+ CHARS[LENGTH] := IN_CHAR;
+ IF IN_CHAR IN ['A'..'Z', 'a'..'z'] THEN
+ WITH LETTERS DO
+ BEGIN
+ LENGTH := LENGTH + 1;
+ CHARS[LENGTH] := IN_CHAR;
+ END (*WITH/IF*);
+ END (*WHILE/WITH*);
+
+ (***************** Palindrome (test) ******************)
+ (** Check contents of IN_LINE and LETTERS. **)
+ WRITELN;
+ WRITELN ('============ DEBUGGING INFORMATION ===============');
+ WRITELN ('Contents of buffer IN_LINE: ');
+ WRITE ('>>>>');
+ WITH IN_LINE DO
+ FOR T := 1 TO LENGTH DO WRITE (OUTPUT, CHARS[T]);
+ WRITE ('<<<<');
+ WRITELN;
+ WRITELN ('Contents of buffer LETTERS: ');
+ WRITE ('>>>>');
+ WITH LETTERS DO
+ FOR T := 1 TO LENGTH DO WRITE (OUTPUT, CHARS[T]);
+ WRITE ('<<<<');
+ WRITELN;
+ WRITELN ('========== END OF DEBUGGING INFORMATION ==========');
+ WRITELN;
+ (************* End of Palindrome (test) ***************)
+
+ (***************** End of Palindrome (1) **************)
+
+ READLN (IN_FILE);
+
+ (***************** Palindrome (2) *********************)
+ (** Test palindromicity of LETTERS. Set IS_PALINDROME **)
+ (** to reflect the result of the test. **)
+ WITH LETTERS DO
+ BEGIN
+ (* Transform lowercase to uppercase. *)
+ FOR I := 1 TO LENGTH DO
+ IF CHARS[I] IN ['a'..'z']
+ THEN CHARS[I] :=
+ CHR(ORD(CHARS[I]) - ORD('a') + ORD('A'));
+
+ (* Perform the palindromicity test. *)
+ IS_PALINDROME := TRUE;
+ I := 1;
+ WHILE IS_PALINDROME AND (I <= LENGTH DIV 2) DO
+ IF CHARS[I] = CHARS[LENGTH-I+1] THEN
+ I := I + 1
+ ELSE
+ IS_PALINDROME := FALSE;
+ END (*WITH*);
+ (***************** End of Palindrome (2) **************)
+
+
+ IF IS_PALINDROME THEN
+ BEGIN
+ (***************** Palindrome (3) *****************)
+ (** Write IN_LINE to OUT_FILE. **)
+ WITH IN_LINE DO
+ BEGIN
+ FOR J := 1 TO LENGTH DO
+ WRITE (OUT_FILE, CHARS[J]);
+ END (*WITH*);
+ (************* End of Palindrome (3) **************)
+
+ WRITELN (OUT_FILE);
+ END (*IF*);
+ END (*WHILE*);
+ (************* End of Palindrome (body) *******************)
+
+ END (*PALINDROME*).
+ (******************* End of palindrome.pas ********************)
diff --git a/web/clip/unix/ex01_b.ps b/web/clip/unix/ex01_b.ps
new file mode 100644
index 0000000000..4db976b05d
--- /dev/null
+++ b/web/clip/unix/ex01_b.ps
@@ -0,0 +1,370 @@
+%!PS-Adobe-2.0
+%%DocumentFonts: (atend)
+%%Title: F:\\LPT\\UNIX\\EX01_B.DOC
+%%Creator: Lotus Manuscript
+%%For: EWvA, MRK
+%%CreationDate: November 16, 1993
+%%Pages: (atend)
+%%BoundingBox: 0 0 595 841
+%%EndComments
+% PostScript Prologue (initialization) for Manuscript
+% Copyright (c) 1985,1986,1987,1988 Lotus Development Corporation
+% There is no user servicable code in this file.
+
+% set timeouts to infinite
+statusdict begin
+0 setjobtimeout
+/manualfeedtimeout 3600 def
+/waittimeout 0 def
+end
+
+% correct bug correction in rev 41.0
+/idiv{div cvi}bind def
+
+% define User Dictionary
+/msdict 300 dict def msdict begin
+/bd{bind def}bind def
+
+% Define commonly used things
+/delay{usertime 5000 add{dup usertime lt{pop exit}if}loop}bd
+/mfeed{statusdict begin /manualfeed true def end}bd
+/afeed{statusdict begin /manualfeed false def end}bd
+/bfeed{ afeed statusdict begin /setpapertray where
+ {pop setpapertray}{pop} ifelse end}bd
+
+/dpi{0.24 dup scale}bd
+
+% These two are called for each page
+/inpage false def
+/begpage{save dpi /inpage true def}bd
+/endpage{inpage {restore showpage}if }bd
+
+% for possible banner
+/fileinfo {pop pop pop}bd
+/enddocument {end} bd
+
+% these are also used by eqn & gmf
+/ld{load def}bd
+/x/exch ld
+/cu{300 mul 72 div}bd
+/m/moveto ld
+/t/translate ld
+/rm/rmoveto ld
+/cp/currentpoint ld
+/st/stroke ld
+/ln/lineto ld
+/rlt/rlineto ld
+/slw/setlinewidth ld
+
+/ff/findfont ld
+/scf/scalefont ld
+/sf/setfont ld
+/fs{x /pt x def ff pt cu scf sf}bd
+
+% linedraw
+/li{4 2 roll setlinewidth 3 1 roll moveto 0.0 rlineto st}bd
+
+% outline factor
+/olwid 40.0 def
+% stroke width for outline
+/uoslw {pt cu x div slw}bd
+% relative horizontal move
+/xm{x currentpoint pop sub 0.0 rmoveto}bd
+
+% The basic show
+/s/show ld
+% move horizontal and show
+/ms{xm s}bd
+
+% variations
+% outline show - first printer attribute
+/ppss{dup cp 3 -1 roll false charpath st
+x 3 -1 roll stringwidth pop add x moveto}bd
+/pss{olwid uoslw { ( ) dup 0 4 -1 roll put ppss}forall}bd
+/ps{pss}bd
+/mps{xm ps}bd
+
+% graybox show - second printer attribute
+/gb{cp 3 -1 roll pt cu dup 4 div neg 0 x rm dup 0 x rlt x 0 rlt
+neg 0 x rlt closepath currentgray .9 setgray fill setgray m}bd
+/usi{dup stringwidth pop gb}bd
+/us{usi s}bd
+/xum{x cp pop sub dup gb 0 rmoveto}bd
+
+% combinations of PD1 and PD2
+/ups{usi pss}bd
+/mups{xm ups}bd
+/mus{xm us}bd
+
+% define a new encoding vector (code page 850 based)
+/PC 256 array def
+StandardEncoding PC copy pop
+
+/dotaccent/bullet
+/quotesingle/quotedblleft/quotedblright/quotesinglbase
+/quotedblbase/guilsinglleft/guilsinglright/.notdef
+/ellipsis/perthousand/.notdef/.notdef/paragraph/section/dagger/daggerdbl
+/OE/oe/fi/fl/endash/emdash/fraction/Ydieresis
+PC 6 26 getinterval astore pop
+
+/Ccedilla/udieresis/eacute/acircumflex/adieresis/agrave/aring/ccedilla
+/ecircumflex/edieresis/egrave/idieresis/icircumflex/igrave/Adieresis/Aring
+/Eacute/ae/AE/ocircumflex/odieresis/ograve/ucircumflex/ugrave
+/ydieresis/Odieresis/Udieresis/oslash/sterling/Oslash/.notdef/florin
+/aacute/iacute/oacute/uacute/ntilde/Ntilde/ordfeminine/ordmasculine
+/questiondown/.notdef/.notdef/onehalf/onequarter/exclamdown/guillemotleft/guillemotright
+/.notdef/.notdef/.notdef/.notdef/.notdef/Aacute/Acircumflex/Agrave
+/.notdef/.notdef/.notdef/.notdef/.notdef/cent/yen/.notdef
+/.notdef/grave/.notdef/circumflex/tilde/.notdef/atilde/Atilde
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/currency
+/eth/Eth/Ecircumflex/Edieresis/Egrave/dotlessi/Iacute/Icircumflex
+/Idieresis/.notdef/.notdef/.notdef/.notdef/brokenbar/Igrave/.notdef
+/Oacute/germandbls/Ocircumflex/Ograve/otilde/Otilde/.notdef/thorn
+/Thorn/Uacute/Ucircumflex/Ugrave/yacute/Yacute/.notdef/acute
+/.notdef/.notdef/.notdef/threequarters/paragraph/section/.notdef/cedilla
+/ring/dieresis/periodcentered/onesuperior/threesuperior/twosuperior/.notdef/.notdef
+
+PC 128 128 getinterval astore pop
+
+% duplicate fonts with a new encoding vector
+/recd 5 dict def
+/pcft
+{recd begin
+/ncs PC def /nfn x def
+/bfn x def /bfd bfn findfont def
+/nf bfd maxlength dict def
+bfd{x dup dup /FID ne x /Encoding ne and
+{x nf 3 1 roll put}{pop pop}ifelse
+}forall
+nf/FontName nfn put
+nf/Encoding ncs put
+nfn nf definefont pop
+end}bd
+
+/fs{x /pt x def ff pt cu scf sf}bd
+
+% used by eqn
+/Times-Roman/TR pcft /Times-Bold/TRB pcft
+/Times-Italic/TRI pcft /Times-BoldItalic/TRBI pcft
+/Helvetica/HV pcft /Helvetica-Bold/HVB pcft
+/Helvetica-Oblique/HVO pcft /Helvetica-BoldOblique/HVBO pcft
+/Courier/CR pcft /Courier-Bold/CRB pcft
+/Sym{/Symbol fs}bd
+
+% Bit map image data decompression code
+/xx 0 def /yy 0 def
+/xbytes 0 def
+/lbuf 1200 string def /obuf 600 string def
+/bval <FFFEFCF8F0E0C080000103070F1F3F7F> def
+/blacks 96 string def /whites 96 string def
+0 1 95 {whites x 255 put} for
+
+/dispatch [
+{
+dup 47 le {32 sub 4 bitshift x pop 1}{
+dup 63 le {x pop 48 sub bval x get
+3 copy put x 1 add x 0} {
+dup 79 le {62 sub} {
+80 sub { 3 copy put x 1 add x } repeat 0
+}ifelse }ifelse }ifelse
+}bind
+{
+32 sub add
+3 copy put
+x 1 add x 0
+} bind
+{
+32 sub x pop add 255 0
+}bind
+{
+32 sub x pop
+3 copy getinterval
+whites 0 3 index getinterval
+x copy pop add 255 0
+}bind
+{
+32 sub x pop
+3 copy getinterval
+blacks 0 3 index getinterval
+x copy pop add 0 0
+}bind
+]def
+
+% read a raster line and unpack
+/readx{
+obuf 0 255 0
+currentfile lbuf readline pop
+{x dispatch x get exec} forall
+pop pop pop 0 xbytes getinterval}bd
+
+/mspic{
+/yy x def/xx x def
+/xbytes xx 8 idiv def
+xx yy 1 [xx 0 0 0 yy sub 0 yy]{readx}image}bd
+
+
+
+/Helvetica/fA pcft/FA{/fA fs}bd
+/Helvetica-Oblique/fAI pcft/FAI{/fAI fs}bd
+/Helvetica-Bold/fAB pcft/FAB{/fAB fs}bd
+/Helvetica-BoldOblique/fAIB pcft/FAIB{/fAIB fs}bd
+/Times-Roman/fB pcft/FB{/fB fs}bd
+/Times-Italic/fBI pcft/FBI{/fBI fs}bd
+/Times-Bold/fBB pcft/FBB{/fBB fs}bd
+/Times-BoldItalic/fBIB pcft/FBIB{/fBIB fs}bd
+/Courier/fH pcft/FH{/fH fs}bd
+/Courier-Oblique/fHI pcft/FHI{/fHI fs}bd
+/Courier-Bold/fHB pcft/FHB{/fHB fs}bd
+/Courier-BoldOblique/fHIB pcft/FHIB{/fHIB fs}bd
+/ZapfChancery-MediumItalic/fL pcft/FL{/fL fs}bd
+/ZapfChancery-MediumItalic/fLI pcft/FLI{/fLI fs}bd
+/ZapfChancery-MediumItalic/fLB pcft/FLB{/fLB fs}bd
+/ZapfChancery-MediumItalic/fLIB pcft/FLIB{/fLIB fs}bd
+/AvantGarde-Book/fM pcft/FM{/fM fs}bd
+/AvantGarde-BookOblique/fMI pcft/FMI{/fMI fs}bd
+/AvantGarde-Demi/fMB pcft/FMB{/fMB fs}bd
+/AvantGarde-DemiOblique/fMIB pcft/FMIB{/fMIB fs}bd
+(F:\\LPT\\UNIX\\EX01_B.DOC)(EWvA, MRK)(November 16, 1993)fileinfo
+%%EndProlog
+%%Page: 0 1
+begpage
+12 FAB
+977 2996 m
+(Example 01: Testcode)s
+12 FB
+295 2669 m
+(This)s
+393(section)ms
+544(contains)ms
+721(some)ms
+836(test)ms
+915(code)ms
+1019(that)ms
+1103(can)ms
+1183(be)ms
+1239(inserted)ms
+1407(to)ms
+1456(debug)ms
+1588(the)ms
+1658(palindrome)ms
+1896(filter)ms
+2003(program.)ms
+12 FAB
+295 2486 m
+(B.1. Print the contents of IN_LINE and LETTERS)s
+12 FB
+295 2399 m
+(Correct)s
+462(reading)ms
+629(of)ms
+688(the)ms
+767(input)ms
+887(is)ms
+938(crucial.)ms
+1104(For)ms
+1191(debugging)ms
+1419(purposes)ms
+1614(we)ms
+1690(may)ms
+1794(want)ms
+1908(to)ms
+1964(inspect)ms
+2123(the)ms
+295 2339 m
+(contents)s
+474(of)ms
+11 FH
+528(IN_LINE)ms
+12 FB
+733(and)ms
+11 FH
+818(LETTERS)ms
+12 FB
+(.)s
+1035(We)ms
+1117(need)ms
+1224(a)ms
+1259(local)ms
+1368(counter)ms
+10 FH
+370 2258 m
+(\(******* Palindrome variables #quick *******\))s
+370 2216 m
+( T : INTEGER;)s
+12 FB
+295 2124 m
+(We)s
+376(want)ms
+486(the)ms
+560(debugging)ms
+783(information)ms
+1032(to)ms
+1083(be)ms
+1143(clearly)ms
+1292(flagged)ms
+1454(as)ms
+1508(such.)ms
+10 FH
+370 2043 m
+(\(***************** Palindrome \(test\) ******************\))s
+370 2001 m
+(\(** Check contents of IN_LINE and LETTERS. **\))s
+370 1960 m
+(WRITELN;)s
+370 1918 m
+(WRITELN \('============ DEBUGGING INFORMATION ==============='\);)s
+370 1876 m
+(WRITELN \('Contents of buffer IN_LINE: '\);)s
+370 1835 m
+(WRITE \('>>>>'\);)s
+370 1793 m
+(WITH IN_LINE DO)s
+370 1751 m
+(FOR T := 1 TO LENGTH DO WRITE \(OUTPUT, CHARS[T]\);)s
+370 1710 m
+(WRITE \('<<<<'\);)s
+370 1668 m
+(WRITELN;)s
+370 1626 m
+(WRITELN \('Contents of buffer LETTERS: '\);)s
+370 1585 m
+(WRITE \('>>>>'\);)s
+370 1543 m
+(WITH LETTERS DO)s
+370 1501 m
+(FOR T := 1 TO LENGTH DO WRITE \(OUTPUT, CHARS[T]\);)s
+370 1460 m
+(WRITE \('<<<<'\);)s
+370 1418 m
+(WRITELN;)s
+370 1376 m
+(WRITELN \('========== END OF DEBUGGING INFORMATION =========='\);)s
+370 1335 m
+(WRITELN;)s
+370 1293 m
+(\(************* End of Palindrome \(test\) ***************\))s
+8 FB
+295 204 m
+(The)s
+355(CLiP)ms
+433(Style)ms
+510(of)ms
+546(Literate)ms
+658(Programming)ms
+850(\(3.049,)ms
+953(16-nov-93\))ms
+12 FB
+2075 204 m
+( 1 )s
+50 2 2130 216 li
+50 2 2020 216 li
+endpage
+%%Trailer
+enddocument
+%%Pages: 1
+%%DocumentFonts:
+%%+ Helvetica-Bold
+%%+ Times-Roman
+%%+ Courier
+%%EOF
+ \ No newline at end of file
diff --git a/web/clip/unix/fortran.ini b/web/clip/unix/fortran.ini
new file mode 100644
index 0000000000..dfa6ed41f3
--- /dev/null
+++ b/web/clip/unix/fortran.ini
@@ -0,0 +1,21 @@
+This file contains data that is needed to run CLiP
+And is generated by CLiP_MENU
+Modifying this file at own risk.
+Using CLiP_MENU is definitely recommended.
+
+INTERACTIVE_MODE Mode (INTERACTIVE/DEBUG/HELPFUL/AUTO)
+YES Interactive fault correction (YES/NO)
+BOTH Error message destination (TERMINAL/REPORTFILE/BOTH/NONE)
+!* Left comment string
+*! Right comment string
+* Command character
+ENDOF END string
+# Option marker
+OMITTED The specified modules are (OMITTED/EXTRACTED)
+------------ REPORT FILE -----------
+CLIP.RPT
+------------ INPUT FILES -----------
+------------ MODULES ---------------
+------------ MODULE DIRECTORY ------
+
+------------ END OF INI FILE -------
diff --git a/web/clip/unix/lisp.ini b/web/clip/unix/lisp.ini
new file mode 100644
index 0000000000..7dba75501b
--- /dev/null
+++ b/web/clip/unix/lisp.ini
@@ -0,0 +1,21 @@
+This file contains data that is needed to run CLiP
+And is generated by CLiP_MENU
+Modifying this file at own risk.
+Using CLiP_MENU is definitely recommended.
+
+INTERACTIVE_MODE Mode (INTERACTIVE/DEBUG/HELPFUL/AUTO)
+YES Interactive fault correction (YES/NO)
+BOTH Error message destination (TERMINAL/REPORTFILE/BOTH/NONE)
+#|| Left comment string
+||# Right comment string
++ Command character
+ENDOF END string
+@ Option marker
+OMITTED The specified modules are (OMITTED/EXTRACTED)
+------------ REPORT FILE -----------
+CLIP.RPT
+------------ INPUT FILES -----------
+------------ MODULES ---------------
+------------ MODULE DIRECTORY ------
+
+------------ END OF INI FILE -------
diff --git a/web/clip/unix/manual.pdf b/web/clip/unix/manual.pdf
new file mode 100644
index 0000000000..50bfe835aa
--- /dev/null
+++ b/web/clip/unix/manual.pdf
Binary files differ
diff --git a/web/clip/unix/manual.ps b/web/clip/unix/manual.ps
new file mode 100644
index 0000000000..50d83c521f
--- /dev/null
+++ b/web/clip/unix/manual.ps
@@ -0,0 +1,5813 @@
+%!PS-Adobe-2.0
+%%DocumentFonts: (atend)
+%%Title: F:\\LPT\\MAN\\MANUAL.DOC
+%%Creator: Lotus Manuscript
+%%For: EWvA
+%%CreationDate: November 16, 1993
+%%Pages: (atend)
+%%BoundingBox: 0 0 595 841
+%%EndComments
+% PostScript Prologue (initialization) for Manuscript
+% Copyright (c) 1985,1986,1987,1988 Lotus Development Corporation
+% There is no user servicable code in this file.
+
+% set timeouts to infinite
+statusdict begin
+0 setjobtimeout
+/manualfeedtimeout 3600 def
+/waittimeout 0 def
+end
+
+% correct bug correction in rev 41.0
+/idiv{div cvi}bind def
+
+% define User Dictionary
+/msdict 300 dict def msdict begin
+/bd{bind def}bind def
+
+% Define commonly used things
+/delay{usertime 5000 add{dup usertime lt{pop exit}if}loop}bd
+/mfeed{statusdict begin /manualfeed true def end}bd
+/afeed{statusdict begin /manualfeed false def end}bd
+/bfeed{ afeed statusdict begin /setpapertray where
+ {pop setpapertray}{pop} ifelse end}bd
+
+/dpi{0.24 dup scale}bd
+
+% These two are called for each page
+/inpage false def
+/begpage{save dpi /inpage true def}bd
+/endpage{inpage {restore showpage}if }bd
+
+% for possible banner
+/fileinfo {pop pop pop}bd
+/enddocument {end} bd
+
+% these are also used by eqn & gmf
+/ld{load def}bd
+/x/exch ld
+/cu{300 mul 72 div}bd
+/m/moveto ld
+/t/translate ld
+/rm/rmoveto ld
+/cp/currentpoint ld
+/st/stroke ld
+/ln/lineto ld
+/rlt/rlineto ld
+/slw/setlinewidth ld
+
+/ff/findfont ld
+/scf/scalefont ld
+/sf/setfont ld
+/fs{x /pt x def ff pt cu scf sf}bd
+
+% linedraw
+/li{4 2 roll setlinewidth 3 1 roll moveto 0.0 rlineto st}bd
+
+% outline factor
+/olwid 40.0 def
+% stroke width for outline
+/uoslw {pt cu x div slw}bd
+% relative horizontal move
+/xm{x currentpoint pop sub 0.0 rmoveto}bd
+
+% The basic show
+/s/show ld
+% move horizontal and show
+/ms{xm s}bd
+
+% variations
+% outline show - first printer attribute
+/ppss{dup cp 3 -1 roll false charpath st
+x 3 -1 roll stringwidth pop add x moveto}bd
+/pss{olwid uoslw { ( ) dup 0 4 -1 roll put ppss}forall}bd
+/ps{pss}bd
+/mps{xm ps}bd
+
+% graybox show - second printer attribute
+/gb{cp 3 -1 roll pt cu dup 4 div neg 0 x rm dup 0 x rlt x 0 rlt
+neg 0 x rlt closepath currentgray .9 setgray fill setgray m}bd
+/usi{dup stringwidth pop gb}bd
+/us{usi s}bd
+/xum{x cp pop sub dup gb 0 rmoveto}bd
+
+% combinations of PD1 and PD2
+/ups{usi pss}bd
+/mups{xm ups}bd
+/mus{xm us}bd
+
+% define a new encoding vector (code page 850 based)
+/PC 256 array def
+StandardEncoding PC copy pop
+
+/dotaccent/bullet
+/quotesingle/quotedblleft/quotedblright/quotesinglbase
+/quotedblbase/guilsinglleft/guilsinglright/.notdef
+/ellipsis/perthousand/.notdef/.notdef/paragraph/section/dagger/daggerdbl
+/OE/oe/fi/fl/endash/emdash/fraction/Ydieresis
+PC 6 26 getinterval astore pop
+
+/Ccedilla/udieresis/eacute/acircumflex/adieresis/agrave/aring/ccedilla
+/ecircumflex/edieresis/egrave/idieresis/icircumflex/igrave/Adieresis/Aring
+/Eacute/ae/AE/ocircumflex/odieresis/ograve/ucircumflex/ugrave
+/ydieresis/Odieresis/Udieresis/oslash/sterling/Oslash/.notdef/florin
+/aacute/iacute/oacute/uacute/ntilde/Ntilde/ordfeminine/ordmasculine
+/questiondown/.notdef/.notdef/onehalf/onequarter/exclamdown/guillemotleft/guillemotright
+/.notdef/.notdef/.notdef/.notdef/.notdef/Aacute/Acircumflex/Agrave
+/.notdef/.notdef/.notdef/.notdef/.notdef/cent/yen/.notdef
+/.notdef/grave/.notdef/circumflex/tilde/.notdef/atilde/Atilde
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/currency
+/eth/Eth/Ecircumflex/Edieresis/Egrave/dotlessi/Iacute/Icircumflex
+/Idieresis/.notdef/.notdef/.notdef/.notdef/brokenbar/Igrave/.notdef
+/Oacute/germandbls/Ocircumflex/Ograve/otilde/Otilde/.notdef/thorn
+/Thorn/Uacute/Ucircumflex/Ugrave/yacute/Yacute/.notdef/acute
+/.notdef/.notdef/.notdef/threequarters/paragraph/section/.notdef/cedilla
+/ring/dieresis/periodcentered/onesuperior/threesuperior/twosuperior/.notdef/.notdef
+
+PC 128 128 getinterval astore pop
+
+% duplicate fonts with a new encoding vector
+/recd 5 dict def
+/pcft
+{recd begin
+/ncs PC def /nfn x def
+/bfn x def /bfd bfn findfont def
+/nf bfd maxlength dict def
+bfd{x dup dup /FID ne x /Encoding ne and
+{x nf 3 1 roll put}{pop pop}ifelse
+}forall
+nf/FontName nfn put
+nf/Encoding ncs put
+nfn nf definefont pop
+end}bd
+
+/fs{x /pt x def ff pt cu scf sf}bd
+
+% used by eqn
+/Times-Roman/TR pcft /Times-Bold/TRB pcft
+/Times-Italic/TRI pcft /Times-BoldItalic/TRBI pcft
+/Helvetica/HV pcft /Helvetica-Bold/HVB pcft
+/Helvetica-Oblique/HVO pcft /Helvetica-BoldOblique/HVBO pcft
+/Courier/CR pcft /Courier-Bold/CRB pcft
+/Sym{/Symbol fs}bd
+
+% Bit map image data decompression code
+/xx 0 def /yy 0 def
+/xbytes 0 def
+/lbuf 1200 string def /obuf 600 string def
+/bval <FFFEFCF8F0E0C080000103070F1F3F7F> def
+/blacks 96 string def /whites 96 string def
+0 1 95 {whites x 255 put} for
+
+/dispatch [
+{
+dup 47 le {32 sub 4 bitshift x pop 1}{
+dup 63 le {x pop 48 sub bval x get
+3 copy put x 1 add x 0} {
+dup 79 le {62 sub} {
+80 sub { 3 copy put x 1 add x } repeat 0
+}ifelse }ifelse }ifelse
+}bind
+{
+32 sub add
+3 copy put
+x 1 add x 0
+} bind
+{
+32 sub x pop add 255 0
+}bind
+{
+32 sub x pop
+3 copy getinterval
+whites 0 3 index getinterval
+x copy pop add 255 0
+}bind
+{
+32 sub x pop
+3 copy getinterval
+blacks 0 3 index getinterval
+x copy pop add 0 0
+}bind
+]def
+
+% read a raster line and unpack
+/readx{
+obuf 0 255 0
+currentfile lbuf readline pop
+{x dispatch x get exec} forall
+pop pop pop 0 xbytes getinterval}bd
+
+/mspic{
+/yy x def/xx x def
+/xbytes xx 8 idiv def
+xx yy 1 [xx 0 0 0 yy sub 0 yy]{readx}image}bd
+
+
+
+/Times-Roman/fA pcft/FA{/fA fs}bd
+/Times-Italic/fAI pcft/FAI{/fAI fs}bd
+/Times-Bold/fAB pcft/FAB{/fAB fs}bd
+/Times-BoldItalic/fAIB pcft/FAIB{/fAIB fs}bd
+/Helvetica/fC pcft/FC{/fC fs}bd
+/Helvetica-Oblique/fCI pcft/FCI{/fCI fs}bd
+/Helvetica-Bold/fCB pcft/FCB{/fCB fs}bd
+/Helvetica-BoldOblique/fCIB pcft/FCIB{/fCIB fs}bd
+/Courier/fH pcft/FH{/fH fs}bd
+/Courier-Oblique/fHI pcft/FHI{/fHI fs}bd
+/Courier-Bold/fHB pcft/FHB{/fHB fs}bd
+/Courier-BoldOblique/fHIB pcft/FHIB{/fHIB fs}bd
+/Helvetica-Narrow/fK pcft/FK{/fK fs}bd
+/Helvetica-Narrow-Oblique/fKI pcft/FKI{/fKI fs}bd
+/Helvetica-Narrow-Bold/fKB pcft/FKB{/fKB fs}bd
+/Helvetica-Narrow-BoldOblique/fKIB pcft/FKIB{/fKIB fs}bd
+/ZapfChancery-MediumItalic/fL pcft/FL{/fL fs}bd
+/ZapfChancery-MediumItalic/fLI pcft/FLI{/fLI fs}bd
+/ZapfChancery-MediumItalic/fLB pcft/FLB{/fLB fs}bd
+/ZapfChancery-MediumItalic/fLIB pcft/FLIB{/fLIB fs}bd
+/AvantGarde-Book/fM pcft/FM{/fM fs}bd
+/AvantGarde-BookOblique/fMI pcft/FMI{/fMI fs}bd
+/AvantGarde-Demi/fMB pcft/FMB{/fMB fs}bd
+/AvantGarde-DemiOblique/fMIB pcft/FMIB{/fMIB fs}bd
+(F:\\LPT\\MAN\\MANUAL.DOC)(EWvA)(November 16, 1993)fileinfo
+%%EndProlog
+%%Page: 0 1
+begpage
+14 FCB
+719 2578 m
+(CLiP - )s
+14 FCIB
+(C)s
+14 FCB
+( ode from )s
+14 FCIB
+(Li)s
+14 FCB
+( terate )s
+14 FCIB
+(P)s
+14 FCB
+( rograms)s
+14 FCB
+901 2438 m
+(Provisional User Manual)s
+12 FAB
+295 2133 m
+(Disclaimer:)s
+12 FA
+389 2073 m
+(This)s
+493(document)ms
+706(is)ms
+755(meant)ms
+893(for)ms
+967(programmers)ms
+1250(who)ms
+1351(are)ms
+1428(already)ms
+1591(familiar)ms
+1765(with)ms
+1870(the)ms
+1947(literate)ms
+2101(pro-)ms
+295 2013 m
+(gramming)s
+512(paradigm.)ms
+725(It)ms
+767(pretends)ms
+948(in)ms
+999(no)ms
+1061(way)ms
+1156(to)ms
+1207(be)ms
+1266(a)ms
+1299(complete)ms
+1495(user)ms
+1590(manual)ms
+1749(in)ms
+1799(the)ms
+1872(real)ms
+1959(meaning)ms
+2143(of)ms
+295 1953 m
+(the)s
+369(word.)ms
+497(But)ms
+583(the)ms
+657(document)ms
+868(should)ms
+1014(supply)ms
+1161(sufficient)ms
+1363(hints)ms
+1473(to)ms
+1525(experiment)ms
+1764(successfully)ms
+2021(with)ms
+2123(the)ms
+295 1893 m
+(CLiP)s
+413(system.)ms
+389 1833 m
+(You)s
+492(are)ms
+571(assumed)ms
+761(to)ms
+817(be)ms
+882(familiar)ms
+1058(with)ms
+1165(the)ms
+1243(ideas)ms
+1364(and)ms
+1454(design)ms
+1602(goals)ms
+1725(of)ms
+1784(the)ms
+1863(CLiP)ms
+1986(system)ms
+2143(as)ms
+295 1773 m
+(explained)s
+513(in)ms
+576([Ammers)ms
+788(and)ms
+884(Kramer)ms
+1061(1993].)ms
+1214(Also)ms
+1332(you)ms
+1431(should)ms
+1588(have)ms
+1707(read)ms
+11 FH
+1816(READ_ME.TXT)ms
+12 FA
+2143(or)ms
+11 FH
+295 1713 m
+(READ_ME.PS)s
+12 FA
+577(which)ms
+707(come)ms
+823(with)ms
+919(the)ms
+988(executables)ms
+1229(and)ms
+1309(understand)ms
+1536(the)ms
+1604(meaning)ms
+1784(of)ms
+1833(the)ms
+1902(INI-file)ms
+2062(which)ms
+295 1653 m
+(guides)s
+438(the)ms
+511(extraction)ms
+724(process.)ms
+389 1593 m
+(The)s
+481(DOS)ms
+596(and)ms
+683(VMS)ms
+806(versions)ms
+987(of)ms
+1044(CLiP)ms
+1164(consist)ms
+1318(of)ms
+1374(two)ms
+1464(independent)ms
+1723(programs,)ms
+1939(CLIP_1)ms
+2112(and)ms
+295 1533 m
+(CLIP_2.)s
+481(CLIP_1)ms
+654(is)ms
+703(purely)ms
+846(to)ms
+900(create)ms
+1035(an)ms
+1097(INI-file)ms
+1265(for)ms
+1339(CLIP_2,)ms
+1525(which)ms
+1662(performs)ms
+1858(the)ms
+1935(actual)ms
+2069(work.)ms
+295 1473 m
+(The)s
+387(Unix)ms
+502(version)ms
+664(consists)ms
+837(of)ms
+894(only)ms
+998(one)ms
+1085(program,)ms
+1282(CLIP)ms
+1405(\(which)ms
+1559(is)ms
+1607(identical)ms
+1794(to)ms
+1848(CLIP_2\),)ms
+2050(and)ms
+2137(an)ms
+295 1413 m
+(INI-file)s
+459(should)ms
+603(be)ms
+662(made)ms
+782(using)ms
+902(the)ms
+974(supplied)ms
+1155(scripts)ms
+1297(or)ms
+1350(an)ms
+1409(editor.)ms
+1549(This)ms
+1650(manual)ms
+1808(only)ms
+1909(deals)ms
+2023(with)ms
+2123(the)ms
+295 1353 m
+(second)s
+446(program.)ms
+14 FCB
+295 1193 m
+(1 Introduction)s
+12 FA
+295 1098 m
+(In)s
+354(short)ms
+472(the)ms
+551(idea)ms
+652(behind)ms
+806(CLiP)ms
+930(is)ms
+981(to)ms
+1038(define)ms
+1181(a)ms
+1221(style)ms
+1334(of)ms
+1393(programming)ms
+1683(sufficiently)ms
+1929(formal)ms
+2080(to)ms
+2137(be)ms
+295 1038 m
+(recognized)s
+531(by)ms
+597(a)ms
+636(literate)ms
+792(programming)ms
+1080(automaton.)ms
+1321(This)ms
+1426(syntax)ms
+1574(\(which)ms
+1729(we)ms
+1804(will)ms
+1899(refer)ms
+2010(to)ms
+2065(as)ms
+2123(the)ms
+295 978 m
+(CLiP-syntax\))s
+577(should)ms
+724(not)ms
+801(obstruct)ms
+975(a)ms
+1011(natural)ms
+1163(way)ms
+1259(of)ms
+1314(programming.)ms
+1612(Ideally)ms
+1764(the)ms
+1839(system)ms
+1991(should)ms
+2137(be)ms
+295 918 m
+(smart)s
+421(enough)ms
+583(to)ms
+637("see")ms
+756(stubs,)ms
+887(slots)ms
+993(and)ms
+1080(the)ms
+1157(like)ms
+1247(by)ms
+1312("inspecting")ms
+1573(the)ms
+1649(documentation)ms
+1961(and)ms
+2048(simply)ms
+295 858 m
+("understanding")s
+631(the)ms
+704(refinements)ms
+952(the)ms
+1025(programmer)ms
+1285(has)ms
+1364(made.)ms
+1497(Alas,)ms
+1613(this)ms
+1697(is)ms
+1743(far)ms
+1810(beyond)ms
+1970(the)ms
+2043(current)ms
+295 798 m
+(potential)s
+485(of)ms
+542(artificial)ms
+726(intelligence)ms
+975(and)ms
+1062(we)ms
+1136(will)ms
+1229(have)ms
+1339(to)ms
+1393(reach)ms
+1516(the)ms
+1593(automaton)ms
+1819(a)ms
+1857(helping)ms
+2022(hand)ms
+2134(by)ms
+295 738 m
+(defining)s
+474(a)ms
+508(special)ms
+660(syntax.)ms
+389 678 m
+(So)s
+454(we)ms
+524(want)ms
+634(the)ms
+707("look)ms
+829(and)ms
+914(feel")ms
+1021(of)ms
+1075(a)ms
+1110(documentation)ms
+1420(to)ms
+1471(be)ms
+1530(as)ms
+1584("natural")ms
+1776(as)ms
+1830(possible,)ms
+2019(but)ms
+2096(with)ms
+295 618 m
+(CLiP)s
+413(features)ms
+584(that)ms
+672(can)ms
+754(be)ms
+814(recognized)ms
+1046(by)ms
+1109(an)ms
+1169(automaton.)ms
+1406(On)ms
+1480(the)ms
+1554(other)ms
+1669(hand)ms
+1779(should)ms
+1926(the)ms
+2000(reader)ms
+2137(be)ms
+295 558 m
+(burdened)s
+497(as)ms
+554(little)ms
+662(as)ms
+720(possible)ms
+900(with)ms
+1004(the)ms
+1082(fact)ms
+1173(that)ms
+1264(additional)ms
+1480(processing)ms
+1709(is)ms
+1759(needed)ms
+1916(to)ms
+1971(extract)ms
+2123(the)ms
+295 498 m
+(modules.)s
+493(In)ms
+551(systems)ms
+726(like)ms
+818(VAMP)ms
+979([Ammers)ms
+1184(1984])ms
+1317(and)ms
+1406(WEB)ms
+1534([Knuth)ms
+1692(1984])ms
+1825(- which)ms
+1993(use)ms
+2076(batch)ms
+295 438 m
+(formatters -)s
+539(this)ms
+622(is)ms
+665(achieved)ms
+853(by)ms
+913(adding)ms
+1059(explicit)ms
+1219(commands)ms
+1446(in)ms
+1495(the)ms
+1566(source-files)ms
+1809(that)ms
+1894(are)ms
+1965(suppressed)ms
+295 378 m
+(in)s
+349(the)ms
+425(formatted)ms
+634(documentation.)ms
+959(But)ms
+1047(this)ms
+1134(technique)ms
+1344(does)ms
+1450(not)ms
+1530(work)ms
+1647(if)ms
+1693(the)ms
+1769(documentation)ms
+2082(envi-)ms
+8 FA
+295 254 m
+(CLiP)s
+373(provisional)ms
+532(user)ms
+595(manual)ms
+702(\(version)ms
+819(2.100\))ms
+endpage
+%%Page: 1 2
+begpage
+10 FCB
+295 3182 m
+(2)s
+10 FC
+460 3182 m
+(Syntax \(programming style\))s
+12 FA
+295 3011 m
+(ronment)s
+470(is)ms
+512(an)ms
+568(interactive)ms
+788(word-processor)ms
+1107(\(Word)ms
+1247(Perfect,)ms
+1409(Lotus)ms
+1532(Manuscript,)ms
+1781(MS-Word,)ms
+2005(Ami)ms
+2102(Pro,)ms
+295 2951 m
+(etc.\).)s
+411(So)ms
+480(CLiP)ms
+602(uses)ms
+705(either)ms
+835(the)ms
+912(ASCII-export)ms
+1204(from)ms
+1317(a)ms
+1356(word-processors)ms
+1703(or)ms
+1761(the)ms
+1838(ASCII)ms
+1985(input)ms
+2104(of)ms
+2162(a)ms
+295 2891 m
+(formatter)s
+491(and)ms
+573(extracts)ms
+738(modules)ms
+918(from)ms
+1025(there.)ms
+1148(In)ms
+1199(these)ms
+1312(files)ms
+1408(CLiP)ms
+1524(recognizes)ms
+1748(the)ms
+1819(important)ms
+2023(sections)ms
+295 2831 m
+(by)s
+357(a)ms
+392(particular)ms
+596(programming-style)ms
+992(rather)ms
+1121(than)ms
+1219(by)ms
+1282(explicit)ms
+1444(commands.)ms
+389 2771 m
+(The)s
+479(first)ms
+573(section)ms
+727(describes)ms
+926(the)ms
+1000(syntax)ms
+1143(that)ms
+1231(CLiP)ms
+1350("sees".)ms
+1499(The)ms
+1590(next)ms
+1689(section)ms
+1843(gives)ms
+1962(a)ms
+1997(couple)ms
+2143(of)ms
+295 2711 m
+(useful)s
+427(examples.)ms
+640(In)ms
+692(section)ms
+844(4)ms
+880(we)ms
+949(describe)ms
+1127(the)ms
+1198(options)ms
+1356(that)ms
+1442(may)ms
+1539(be)ms
+1597(used)ms
+1699(to)ms
+1749(customize)ms
+1963(the)ms
+2035(process)ms
+295 2651 m
+(of)s
+350(module)ms
+514(generation.)ms
+752(In)ms
+808(section)ms
+963(5)ms
+1002(we)ms
+1075(give)ms
+1175(some)ms
+1295(hints)ms
+1406(on)ms
+1470(how)ms
+1570(to)ms
+1623(organize)ms
+1809(your)ms
+1915(working)ms
+2096(with)ms
+295 2591 m
+(CLiP)s
+409(efficiently.)ms
+637(Stubs)ms
+757(and)ms
+839(slots)ms
+940(my)ms
+1013(remaining)ms
+1226(sections)ms
+1396(illustrate)ms
+1580(the)ms
+1651(style)ms
+1755(of)ms
+1806(documentation)ms
+2112(and)ms
+295 2531 m
+(programs)s
+492(that)ms
+575(would)ms
+709(result.)ms
+841(CLiP)ms
+955(is)ms
+997(in)ms
+1044(development)ms
+1311(and)ms
+1392(we)ms
+1459(compile)ms
+1628(the)ms
+1698(known)ms
+1843(bugs)ms
+1946(in)ms
+1993(section 6.)ms
+14 FCB
+295 2371 m
+(2 Syntax \(programming style\))s
+12 FAI
+295 2276 m
+(CLiP-lines)s
+12 FA
+562( that)ms
+670(is)ms
+723(lines)ms
+838(which)ms
+981(have)ms
+1096(a)ms
+1138(special)ms
+1297(meaning)ms
+1490(to)ms
+1549(CLiP )ms
+1718(start)ms
+1824(with)ms
+1934(a)ms
+1976(CLIP-left-)ms
+295 2216 m
+(parenthesis)s
+537(\(CLIP-lpar\))ms
+790(and)ms
+879(end)ms
+969(with)ms
+1075(a)ms
+1114(CLIP-right-parenthesis)ms
+1593(\(CLIP-rpar\).)ms
+1861(Both)ms
+1976(tokens)ms
+2123(are)ms
+295 2156 m
+(constructed)s
+545(as)ms
+607(extensions)ms
+838(of)ms
+899(the)ms
+980(tokens)ms
+1131(encapsulating)ms
+1426(comments)ms
+1651(which)ms
+1794(we)ms
+1872(will)ms
+1970(refer)ms
+2084(to)ms
+2143(as)ms
+11 FH
+295 2096 m
+(COMM-START)s
+12 FA
+581(and)ms
+11 FH
+665(COMM-END)ms
+12 FA
+(.)s
+909(If)ms
+954(we)ms
+1024(program)ms
+1205(in)ms
+1256(Pascal)ms
+1396(then)ms
+1493(everything)ms
+1719(between)ms
+1897(")ms
+11 FH
+(\(*)s
+12 FA
+(")s
+2005(and)ms
+2089(")ms
+11 FH
+(*\))s
+12 FA
+(")s
+295 2036 m
+(is)s
+340(seen)ms
+442(as)ms
+496(comment,)ms
+707(thus)ms
+803(we)ms
+874(have)ms
+981(the)ms
+1054(convention:)ms
+11 FH
+554 1951 m
+(COMM-START)s
+12 FA
+841(=)ms
+882(")ms
+11 FH
+(\(*)s
+12 FA
+(")s
+11 FH
+554 1891 m
+(COMM-END)s
+12 FA
+811(=)ms
+852(")ms
+11 FH
+(*\))s
+12 FA
+(")s
+295 1806 m
+(Extension)s
+503(of)ms
+553(the)ms
+622(comment)ms
+816(token)ms
+936(is)ms
+977(by)ms
+1035(a)ms
+1066(character)ms
+1257(with)ms
+1354(a)ms
+1385(special)ms
+1532(meaning)ms
+1712(to)ms
+1759(clip,)ms
+1855(the)ms
+11 FH
+1924(CLIP-CHAR)ms
+12 FA
+(.)s
+295 1746 m
+(In)s
+349(our)ms
+428(case)ms
+526(we)ms
+597(assume)ms
+11 FH
+554 1661 m
+(CLIP-CHAR)s
+12 FA
+814(=)ms
+854(")ms
+11 FH
+(*)s
+12 FA
+(")s
+295 1576 m
+(Thus)s
+407(CLiP-lines)ms
+636(are)ms
+710(enclosed)ms
+897(by)ms
+554 1491 m
+(CLIP-lpar)s
+769(of)ms
+823(the)ms
+897(form)ms
+1006(")ms
+11 FH
+(\(**)s
+12 FA
+(")s
+295 1406 m
+(and)s
+554 1321 m
+(CLIP-rpar)s
+772(of)ms
+826(the)ms
+899(form)ms
+1009(")ms
+11 FH
+(**\))s
+12 FA
+(")s
+295 1236 m
+(The)s
+380(parameters)ms
+11 FH
+607(COMM-START)ms
+12 FA
+(,)s
+11 FH
+902(COMM-END)ms
+12 FA
+1129(and)ms
+11 FH
+1209(CLIP-CHAR)ms
+12 FA
+1464(are)ms
+1532(set)ms
+1595(by)ms
+1653(the)ms
+1721(INI-file)ms
+1882(and)ms
+1961(it)ms
+1997(is)ms
+2037(evident)ms
+295 1176 m
+(that)s
+382(the)ms
+456(convention)ms
+690(can)ms
+772(be)ms
+832(adjusted.)ms
+389 1091 m
+(CLiP)s
+507(distinguishes)ms
+780(six)ms
+851(source)ms
+994(line)ms
+1082(categories:)ms
+10 FH
+395 1011 m
+(1)s
+470 1011 m
+(\(******************* <arbitrary string> **********************\))s
+395 961 m
+(2)s
+470 961 m
+(\(**************** End of <arbitrary string> ******************\))s
+395 911 m
+(3)s
+470 911 m
+(\(** <arbitrary string> **\))s
+395 861 m
+(4)s
+470 861 m
+(\(***************************************************************\))s
+395 811 m
+(5)s
+470 811 m
+(<the empty string>)s
+395 761 m
+(6)s
+470 761 m
+(<any string not falling in one of the above categories>)s
+12 FA
+295 664 m
+(We)s
+373(will)ms
+460(refer)ms
+563(to)ms
+611(a)ms
+642(line)ms
+726(from)ms
+832(the)ms
+902(second)ms
+1049(category)ms
+1230(as)ms
+1281(an)ms
+1337("L2")ms
+1442(and)ms
+1523(so)ms
+1577(on)ms
+1636(and)ms
+1717(investigate)ms
+1942(the)ms
+2012(meaning)ms
+295 604 m
+(is)s
+340(of)ms
+395(the)ms
+468(various)ms
+628(categories)ms
+843(for)ms
+914(CLiP.)ms
+389 544 m
+(The)s
+479(string)ms
+605(")ms
+11 FH
+(End)s
+736(of)ms
+12 FA
+(")s
+824(of)ms
+879(an)ms
+938(L2)ms
+1007(has)ms
+1086(a)ms
+1121(special)ms
+1272(meaning)ms
+1457(that)ms
+1545(distinguishes)ms
+1819(an)ms
+1879(L2)ms
+1947(from)ms
+2057(an)ms
+2117(L1.)ms
+295 484 m
+(Again)s
+429(this)ms
+514(special)ms
+665(string)ms
+792(is)ms
+838(defined)ms
+1000(by)ms
+1063(a)ms
+1097(parameter)ms
+1310(in)ms
+1361(the)ms
+1435(INI-file)ms
+11 FH
+554 394 m
+(END-STRING)s
+12 FA
+841(=)ms
+882(")ms
+11 FH
+(ENDOF)s
+12 FA
+(")s
+8 FA
+295 254 m
+(CLiP)s
+373(provisional)ms
+532(user)ms
+595(manual)ms
+702(\(version)ms
+819(2.100\))ms
+4 300 430 889 li
+25 2 1670 2288 li
+25 2 534 2288 li
+endpage
+%%Page: 2 3
+begpage
+10 FC
+1203 3182 m
+(2.1 Stub blocks and documentation blocks)s
+10 FCB
+2161 3182 m
+(3)s
+12 FA
+295 3011 m
+(Observe)s
+472(that)ms
+558(CLiP)ms
+674(does)ms
+776(not)ms
+851(distinguish)ms
+1081(between)ms
+1258(upper)ms
+1383(and)ms
+1466(lower)ms
+1590(case)ms
+1687(and)ms
+1770(forgets)ms
+1920(about)ms
+2041(spaces.)ms
+295 2951 m
+(In)s
+351(fact)ms
+440(CLiP)ms
+561(reduces)ms
+728(the)ms
+804(<arbitrary)ms
+1018(string>)ms
+1175(internally)ms
+1381(to)ms
+1435(a)ms
+1472(sequence)ms
+1670(of)ms
+1726(the)ms
+1802(characters)ms
+2019(")ms
+11 FH
+(A)s
+12 FA
+("-")s
+11 FH
+(Z)s
+12 FA
+(",)s
+295 2891 m
+(")s
+11 FH
+(0)s
+12 FA
+("-")s
+11 FH
+(9)s
+12 FA
+(")s
+460(and)ms
+545(")ms
+11 FH
+(.)s
+12 FA
+(")s
+389 2831 m
+(Note)s
+500(that)ms
+590(for)ms
+663(an)ms
+725(L3)ms
+796(the)ms
+872(character)ms
+1070(immediately)ms
+1334(following)ms
+1544(the)ms
+11 FH
+1619(CLIP-CHAR)ms
+12 FA
+1882(on)ms
+1947(the)ms
+2022(left)ms
+2104(side)ms
+295 2771 m
+(and)s
+381(the)ms
+456(character)ms
+654(preceding)ms
+866(the)ms
+11 FH
+941(CLIP-CHAR)ms
+12 FA
+1203(on)ms
+1267(the)ms
+1343(right)ms
+1451(side)ms
+1546(may)ms
+1647(be)ms
+1708(anything)ms
+1898(apart)ms
+2012(from)ms
+2123(the)ms
+11 FH
+295 2711 m
+(CLIP-CHAR)s
+12 FA
+555(itself.)ms
+12 FCB
+295 2588 m
+(2.1 Stub blocks and documentation blocks)s
+12 FA
+295 2501 m
+(From)s
+412(CLiP's)ms
+563(point)ms
+674(of)ms
+725(view)ms
+831(the)ms
+901(source-files)ms
+1143(are)ms
+1213(divided)ms
+1372(in)ms
+12 FAI
+1420(documentation)ms
+1726(blocks)ms
+12 FA
+1863(and)ms
+12 FAI
+1944(stub-blocks)ms
+12 FA
+(.)s
+295 2441 m
+(A)s
+344(stub-block)ms
+568(starts)ms
+686(with)ms
+788(an)ms
+848(L1)ms
+917(and)ms
+1002(usually)ms
+1159(ends)ms
+1264(with)ms
+1365(an)ms
+1426(L2.)ms
+1507(A)ms
+1556(special)ms
+1707(kind)ms
+1809(of)ms
+1864(stub,)ms
+1973(a)ms
+2008(so)ms
+2065(called)ms
+295 2381 m
+(quick)s
+416(stub)ms
+509(\(see)ms
+599(sect.)ms
+699(3.3)ms
+772(and)ms
+854(4\),)ms
+918(is)ms
+961(ended)ms
+1090(by)ms
+1150(an)ms
+1207(L5)ms
+1273(or)ms
+1324(an)ms
+1382(<EOF>.)ms
+1555(Everything)ms
+1787(outside)ms
+1941(a)ms
+1973(stub-block)ms
+295 2321 m
+(is)s
+343(a)ms
+381(documentation)ms
+694(block)ms
+820(and)ms
+908(ignored)ms
+1076(by)ms
+1142(CLiP.)ms
+1276(For)ms
+1360(this)ms
+1448(reason)ms
+1594(we)ms
+1668(say)ms
+1750(that)ms
+1841(CLiP)ms
+1962(is)ms
+2011(in)ms
+12 FAI
+2065(active)ms
+12 FAI
+295 2261 m
+(mode)s
+12 FA
+419(during)ms
+565(the)ms
+642(processing)ms
+872(of)ms
+930(a)ms
+968(stub-block)ms
+1195(and)ms
+1283(in)ms
+12 FAI
+1338(passive)ms
+1501(mode)ms
+12 FA
+1625(otherwise.)ms
+1848(The)ms
+1942(only)ms
+2046(way)ms
+2146(to)ms
+295 2201 m
+(change)s
+448(CLiP)ms
+566(from)ms
+675(passive)ms
+835(to)ms
+886(active)ms
+1017(mode)ms
+1140(is)ms
+1186(by)ms
+1248(an)ms
+1307(L1)ms
+1375(and)ms
+1459(the)ms
+1532(usual)ms
+1650(way)ms
+1745(from)ms
+1855(active)ms
+1986(to)ms
+2037(passive)ms
+295 2141 m
+(is)s
+340(through)ms
+508(an)ms
+568(L2.)ms
+649(An)ms
+722(L2)ms
+790(in)ms
+842(passive)ms
+1001(mode)ms
+1125(is)ms
+1171(presumably)ms
+1417(an)ms
+1476(error)ms
+1586(and)ms
+1671(will)ms
+1761(be)ms
+1821(ignored.)ms
+12 FCB
+295 1988 m
+(2.2 Segments)s
+12 FA
+295 1901 m
+(A)s
+356(stub-block)ms
+592(contains)ms
+784(one)ms
+882(and)ms
+979(only)ms
+1094(one)ms
+12 FAI
+1191(stub-segment)ms
+12 FA
+(,)s
+1493(which)ms
+1640(starts)ms
+1771(the)ms
+1858(stub-block.)ms
+2107(The)ms
+295 1841 m
+(stub-segment)s
+574(may)ms
+672(be)ms
+732(followed)ms
+922(by)ms
+985(any)ms
+1069(number)ms
+1235(of)ms
+12 FAI
+1289(slot-segments)ms
+12 FA
+1574(and/or)ms
+12 FAI
+1714(code-segments)ms
+12 FA
+(.)s
+389 1781 m
+(An)s
+458(L1)ms
+522(always)ms
+669(starts)ms
+783(a)ms
+814(new)ms
+906(stub-)ms
+1014(or)ms
+1064(slot-segment)ms
+1328(and)ms
+1409(the)ms
+1479(segment)ms
+1654(continues)ms
+1854(with)ms
+1951(any)ms
+2032(number)ms
+295 1721 m
+(of)s
+350(lines)ms
+459(of)ms
+514(type)ms
+614(L3)ms
+684(or)ms
+740(L4.)ms
+822(A)ms
+872(segment)ms
+1052(is)ms
+1100(a)ms
+1136(slot-segment)ms
+1405(if)ms
+1450(and)ms
+1536(only)ms
+1639(if)ms
+1684(it)ms
+1725(is)ms
+1773(not)ms
+1851(the)ms
+1926(first)ms
+2020(one)ms
+2107(of)ms
+2162(a)ms
+295 1661 m
+(stub-block.)s
+532(A)ms
+582(code-segment)ms
+874(consists)ms
+1046(of)ms
+1102(any)ms
+1188(number)ms
+1355(of)ms
+1410(contiguous)ms
+1644(lines)ms
+1752(of)ms
+1808(type)ms
+1908(L5.)ms
+1990(Stub-)ms
+2112(and)ms
+12 FA
+295 1601 m
+(slot-segments)s
+587(have)ms
+699(an)ms
+12 FAI
+764(identification)ms
+12 FA
+1048(or)ms
+12 FAI
+1107(name)ms
+12 FA
+1233(which)ms
+1373(is)ms
+1424(constructed)ms
+1672(somehow)ms
+1881(from)ms
+1996(the)ms
+11 FH
+2075(<ar-)ms
+11 FH
+295 1541 m
+(bitrary)s
+515(string>)ms
+12 FA
+(s)s
+739(inside)ms
+871(the)ms
+945(segment.)ms
+389 1481 m
+(L3)s
+455(and)ms
+539(L4)ms
+606(are)ms
+678(continuations)ms
+958(of)ms
+1011(stub-)ms
+1123(and)ms
+1206(slot-segments,)ms
+1505(but)ms
+1580(with)ms
+1680(a)ms
+1714(slightly)ms
+1875(different)ms
+2058(status.)ms
+295 1421 m
+(An)s
+373(L3)ms
+446(that)ms
+538(cannot)ms
+688(be)ms
+753(pasted)ms
+898(to)ms
+954(a)ms
+994(segment)ms
+1177(is)ms
+1228(flagged)ms
+1395(as)ms
+1454(an)ms
+1519(error.)ms
+1645(But)ms
+1735(an)ms
+1799(L4)ms
+1872(under)ms
+2003(the)ms
+2082(same)ms
+295 1361 m
+(conditions)s
+515(is)ms
+561(interpreted)ms
+790(as)ms
+844(belonging)ms
+1057(to)ms
+1108(the)ms
+1182(current)ms
+1336(code-segment.)ms
+12 FCB
+295 1208 m
+(2.3 Options)s
+12 FA
+295 1121 m
+(The)s
+390(module)ms
+557(extraction)ms
+774(process)ms
+941(can)ms
+1028(be)ms
+1092(tuned)ms
+1221(by)ms
+1288(means)ms
+1433(of)ms
+12 FAI
+1492(options)ms
+12 FA
+(.)s
+1669(Stub-segments)ms
+1981(as)ms
+2040(well)ms
+2143(as)ms
+295 1061 m
+(slot-segments)s
+593(may)ms
+702(have)ms
+820(options.)ms
+1003(An)ms
+1087(option)ms
+1238(starts)ms
+1367(with)ms
+1479(a)ms
+1525(keyword)ms
+1723(signalled)ms
+1927(by)ms
+2000(a)ms
+2046(special)ms
+11 FH
+295 1001 m
+(OPTION-MARKER)s
+12 FA
+(.)s
+681(The)ms
+775(option)ms
+919(keyword)ms
+1110(may)ms
+1212(be)ms
+1276(abbreviated)ms
+1525(to)ms
+1581(a)ms
+1619(unique)ms
+1772(headerstring)ms
+2035(for)ms
+2110(that)ms
+295 941 m
+(option.)s
+446(We)ms
+527(will)ms
+616(assume)ms
+775(")ms
+11 FH
+(#)s
+12 FA
+(")s
+854(for)ms
+11 FH
+924(OPTION-MARKER)ms
+12 FA
+(,)s
+1305(but)ms
+1380(of)ms
+1433(course)ms
+1575(this)ms
+1659(again)ms
+1778(is)ms
+1823(a)ms
+1857(parameter)ms
+2068(set)ms
+2135(by)ms
+295 881 m
+(the)s
+370(INI-file.)ms
+549(The)ms
+641(argument\(s\))ms
+897(following)ms
+1105(an)ms
+1166(option)ms
+1308(continue)ms
+1495(till)ms
+1564(the)ms
+1640(next)ms
+1740(option-keyword)ms
+2073(or)ms
+2129(till)ms
+295 821 m
+(the)s
+368(end)ms
+453(of)ms
+507(the)ms
+581(segment.)ms
+772(Therefore)ms
+982(the)ms
+1055(name)ms
+1176(of)ms
+1230(a)ms
+1265(segment)ms
+1444(must)ms
+1554(precede)ms
+1722(the)ms
+1796(options.)ms
+389 761 m
+(In)s
+440(general)ms
+596(options)ms
+753(operate)ms
+910(on)ms
+970(the)ms
+12 FAI
+1040(inside)ms
+12 FA
+1169(of)ms
+1221(the)ms
+1291(stub)ms
+1384(only,)ms
+1495(since)ms
+1608(that)ms
+1692(is)ms
+1735(the)ms
+1806(part)ms
+1893(of)ms
+1944(the)ms
+2015(program)ms
+295 701 m
+(that)s
+381(the)ms
+453(programmer)ms
+711(of)ms
+764(this)ms
+847(particular)ms
+1050(refinement)ms
+1278(has)ms
+1355(in)ms
+1405(his)ms
+1475(or)ms
+1528(her)ms
+1603(mind.)ms
+1729(In)ms
+1782(addition)ms
+1957(options)ms
+2115(can)ms
+295 641 m
+(be)s
+351(inherited.)ms
+551(The)ms
+639(meaning)ms
+821(of)ms
+872(the)ms
+943(various)ms
+1100(options)ms
+1257(is)ms
+1300(explained)ms
+1504(in)ms
+1553(section 4.)ms
+1754(Some)ms
+1878(frequently)ms
+2093(used)ms
+295 581 m
+(options)s
+454(show)ms
+572(up)ms
+635(in)ms
+686(the)ms
+760(examples)ms
+961(of)ms
+1015(section 3.)ms
+8 FA
+295 254 m
+(CLiP)s
+373(provisional)ms
+532(user)ms
+595(manual)ms
+702(\(version)ms
+819(2.100\))ms
+endpage
+%%Page: 3 4
+begpage
+10 FCB
+295 3182 m
+(4)s
+10 FC
+460 3182 m
+(Examples)s
+14 FCB
+295 3001 m
+(3 Examples)s
+12 FA
+295 2906 m
+(In)s
+351(the)ms
+426(examples)ms
+630(we)ms
+703(will)ms
+795(illustrate)ms
+984(the)ms
+1060(most)ms
+1172(important)ms
+1381(features)ms
+1554(of)ms
+1610(CLiP)ms
+1730(by)ms
+1794(making)ms
+1959(remarks)ms
+2134(on)ms
+295 2846 m
+(excerpts)s
+474(drawn)ms
+611(from)ms
+721(the)ms
+794(documentation)ms
+1104(of)ms
+1158(CLiPs)ms
+1296(predecessor,)ms
+1557(VAMP.)ms
+12 FCB
+295 2723 m
+(3.1 Example 1: Defining a module)s
+10 FAIB
+470 2641 m
+(The module VAMP:)s
+10 FA
+570 2591 m
+(Starting from nowhere, the empty program will do.)s
+10 FH
+395 2491 m
+(1)s
+470 2491 m
+(\(**** #File "VAMP.PAS". #Indent on. ****\))s
+395 2441 m
+(2)s
+395 2391 m
+(3)s
+470 2391 m
+(\(***************************************************************\))s
+395 2341 m
+(4)s
+470 2341 m
+(\(* Routine: VAMP)s
+1070(-)ms
+1170(Main module of the VAMP system.)ms
+2020( *\))ms
+395 2291 m
+(5)s
+470 2291 m
+(\(* Purpose:)s
+870(Main module and unique entry point to the)ms
+2020( *\))ms
+395 2241 m
+(6)s
+470 2241 m
+(\(*)s
+870(VAMP-system.)ms
+2020( *\))ms
+395 2191 m
+(7)s
+470 2191 m
+(\(* Interface:)s
+870(TTY -)ms
+1070(All communication with the user)ms
+2020( *\))ms
+395 2141 m
+(8)s
+470 2141 m
+(\(*)s
+870(proceeds via the terminal.)ms
+2020( *\))ms
+395 2091 m
+(9)s
+470 2091 m
+(\(* Author/Date:)s
+870(VAMP project management, Sept. 12, 1983.)ms
+2020( *\))ms
+370 2041 m
+(10)s
+470 2041 m
+(\(***************************************************************\))s
+370 1991 m
+(11)s
+370 1941 m
+(12)s
+470 1941 m
+(\(********************** VAMP \(body\) **************************\))s
+370 1891 m
+(13)s
+370 1841 m
+(14)s
+470 1841 m
+(\(*********************** End of VAMP *************************\))s
+370 1791 m
+(15)s
+370 1741 m
+(16)s
+370 1691 m
+(18)s
+470 1691 m
+(\(********* VAMP \(body\) #def ***********\))s
+370 1641 m
+(19)s
+470 1641 m
+(PROGRAM)s
+770(VAMP \(INPUT, OUTPUT\);)ms
+370 1591 m
+(20)s
+570 1591 m
+(BEGIN)s
+370 1541 m
+(21)s
+570 1541 m
+(WRITELN \('!!! VAMP was here !!!'\);)s
+370 1491 m
+(22)s
+570 1491 m
+(END \(*VAMP*\).)s
+370 1441 m
+(23)s
+470 1441 m
+(\(********** End of VAMP \(body\) *********\))s
+12 FAB
+295 1344 m
+(Remarks:)s
+12 FA
+389 1284 m
+(There)s
+523(are)ms
+602(two)ms
+695(stubs)ms
+816(in)ms
+873(this)ms
+964(section.)ms
+1136(Line)ms
+1246(1-14)ms
+1355(and)ms
+1446(line)ms
+1539(18-23.)ms
+1686(Both)ms
+1801(stub-blocks)ms
+2050(have)ms
+2162(a)ms
+295 1224 m
+(stub-segment)s
+574(of)ms
+628(one)ms
+713(line)ms
+800(only)ms
+901(\(lines)ms
+1025(1)ms
+1063(and)ms
+1147(18)ms
+1210(respectively\).)ms
+389 1164 m
+(The)s
+480(first)ms
+575(stub-segment)ms
+856(has)ms
+937(no)ms
+1001(identification.)ms
+1294(It)ms
+1339(specifies)ms
+1528(the)ms
+1603(start)ms
+1703(of)ms
+1759(a)ms
+1795(new)ms
+1893(output)ms
+2034(module)ms
+295 1104 m
+(by)s
+357(the)ms
+431(FILE)ms
+549(option)ms
+689(and)ms
+774(thus)ms
+870(is)ms
+915(not)ms
+992(meant)ms
+1126(to)ms
+1178(be)ms
+1238(referenced)ms
+1461(\(see)ms
+1554(also)ms
+1647(example)ms
+1829(5\).)ms
+389 1044 m
+(Line)s
+494(2)ms
+533(\(an)ms
+611(L5\))ms
+697(separates)ms
+894(line)ms
+982(3)ms
+1021(\(an)ms
+1099(L4\))ms
+1185(from)ms
+1296(the)ms
+1371(stub-segment)ms
+1652(and)ms
+1738(makes)ms
+1879(it)ms
+1921(belong)ms
+2071(to)ms
+2123(the)ms
+295 984 m
+(code-segment)s
+585(which)ms
+719(expands)ms
+896(over)ms
+997(lines)ms
+1104(2-11.)ms
+389 924 m
+(There)s
+525(resides)ms
+684(only)ms
+793(one)ms
+885(slot)ms
+978(inside)ms
+1117(the)ms
+1198(first)ms
+1299(stub)ms
+1402(\(line)ms
+1514(12\))ms
+1601(and)ms
+1693(this)ms
+1785(slot)ms
+1878(is)ms
+1931(identified)ms
+2143(as)ms
+295 864 m
+(")s
+11 FH
+(VAMPBODY)s
+12 FA
+(".)s
+580(The)ms
+671(second)ms
+822(stub)ms
+918(has)ms
+997(no)ms
+1059(slots)ms
+1164(at)ms
+1212(all.)ms
+389 804 m
+(Line)s
+489(13)ms
+548(is)ms
+590(a)ms
+621(trivial)ms
+749(code-segment)ms
+1036(and)ms
+1117(line)ms
+1201(14)ms
+1260(marks)ms
+1391(the)ms
+1461(end)ms
+1542(of)ms
+1592(the)ms
+1662(first)ms
+1752(stub-block.)ms
+1984(The)ms
+2071(string)ms
+295 744 m
+(following)s
+501(the)ms
+575("End)ms
+689(of")ms
+763(is)ms
+809(optional)ms
+985(and)ms
+1070(does)ms
+1174(not)ms
+1251(have)ms
+1357(to)ms
+1409(match)ms
+1544(the)ms
+1617(stub)ms
+1713(name)ms
+1834(in)ms
+1885(any)ms
+1970(way.)ms
+8 FA
+295 254 m
+(CLiP)s
+373(provisional)ms
+532(user)ms
+595(manual)ms
+702(\(version)ms
+819(2.100\))ms
+4 1250 430 2044 li
+endpage
+%%Page: 4 5
+begpage
+10 FC
+1453 3182 m
+(3.2 Example 2: Multiple slots)s
+10 FCB
+2161 3182 m
+(5)s
+12 FCB
+295 3008 m
+(3.2 Example 2: Multiple slots)s
+10 FAIB
+470 2926 m
+(Environment module)s
+10 FA
+(:)s
+10 FA
+570 2876 m
+(In the past there have been made several changes in the VAMP program. These changes have)s
+10 FA
+470 2826 m
+(been made in the extracted modules rather then in the VAMP source. To make source files consistent)s
+10 FA
+470 2776 m
+(with the modules, the source files have been updated in march 1990 by Jeroen Reef.)s
+10 FA
+570 2726 m
+(Furthermore, the updated source files contain two additional modules, VAMP.MSG and)s
+10 FA
+470 2676 m
+(DECLAR_MOD. The module VAMP.MSG contains the error messages of VAMP and the module)s
+10 FA
+470 2626 m
+(DECLAR_MOD contains the types and constants used by several modules of VAMP. This module)s
+10 FA
+470 2576 m
+(uses the ENVIRONMENT, which directs the compiler to generate an environment file)s
+10 FA
+470 2526 m
+(DECLAR.PEN. Other modules can reference the identifiers declared in DECLAR_MOD by inheriting)s
+10 FA
+470 2476 m
+(the environment with the INHERIT attribute.)s
+10 FH
+395 2359 m
+(1)s
+470 2359 m
+(\(****** #File "DECLAR_MOD.PAS". #Indent ON. ******\))s
+395 2309 m
+(2)s
+395 2259 m
+(3)s
+470 2259 m
+(\(***************************************************************\))s
+395 2209 m
+(4)s
+470 2209 m
+(\(* Module to contain all parameters and global declarations)s
+2020( *\))ms
+395 2159 m
+(5)s
+470 2159 m
+(\(* of the VAMP system.)s
+2020( *\))ms
+395 2109 m
+(6)s
+470 2109 m
+(\(***************************************************************\))s
+395 2059 m
+(7)s
+470 2059 m
+([ENVIRONMENT \('DECLAR.PEN'\)])s
+1270(MODULE DECLARS;)ms
+395 2009 m
+(8)s
+395 1959 m
+(9)s
+470 1959 m
+(\(********** Parameters of the VAMP-system \(#mul\) *************\))s
+370 1909 m
+(10)s
+370 1859 m
+(11)s
+470 1859 m
+(TYPE)s
+370 1809 m
+(12)s
+570 1809 m
+(ABSTRACT = \(DEFINED, UNDEFINED\);)s
+370 1759 m
+(13)s
+570 1759 m
+(\(********* Simple types of the VAMP-system \(#mul\) ********\))s
+370 1709 m
+(14)s
+570 1709 m
+(\(******** Structured types of the VAMP-system \(#mul\) ******\))s
+370 1659 m
+(15)s
+470 1659 m
+(END.)s
+370 1609 m
+(16)s
+470 1609 m
+(\(***************** End of DECLARE_MOD.PAS ********************\))s
+12 FAB
+295 1513 m
+(Remarks:)s
+12 FA
+389 1453 m
+(The)s
+483(stub-block)ms
+711(extends)ms
+880(over)ms
+986(16)ms
+1052(lines.)ms
+1176(Line)ms
+1284(1)ms
+1326(is)ms
+1376(the)ms
+1454(stub-segment)ms
+1737(and)ms
+1826(line)ms
+1918(16)ms
+1984(closes)ms
+2123(the)ms
+295 1393 m
+(stub-block.)s
+532(Lines)ms
+657(2-8)ms
+737(constitute)ms
+945(the)ms
+1020(first)ms
+1115(code-segment)ms
+1406(of)ms
+1462(the)ms
+1536(stub)ms
+(,)s
+1646(lines)ms
+1754(10-12)ms
+1885(the)ms
+1960(middle)ms
+2112(one)ms
+295 1333 m
+(and)s
+379(line)ms
+467(15)ms
+529(the)ms
+603(last)ms
+685(one.)ms
+389 1273 m
+(There)s
+515(are)ms
+587(three)ms
+697(slots)ms
+799(\(or)ms
+868(slot-segments\),)ms
+1182(lines)ms
+1287(9,)ms
+1335(13)ms
+1395(and)ms
+1478(14.)ms
+1550(All)ms
+1625(slots)ms
+1727(consist)ms
+1876(of)ms
+1928(one)ms
+2010(line)ms
+2096(only)ms
+295 1213 m
+(and)s
+380(carry)ms
+496(the)ms
+570(multiple)ms
+750(option.)ms
+903(For)ms
+986(instance)ms
+1163(the)ms
+1237(first)ms
+1331(slot)ms
+1416(can)ms
+1499(swallow)ms
+1679(any)ms
+1764(number)ms
+1930(of)ms
+1985(parameter)ms
+295 1153 m
+(definition)s
+501(that)ms
+589(might)ms
+718(turn)ms
+811(up)ms
+874(in)ms
+925(the)ms
+999(future.)ms
+389 1093 m
+(The)s
+479(names)ms
+619(\(identifications\))ms
+951(of)ms
+1005(the)ms
+1079(slots)ms
+1183(are)ms
+1256(respectively)ms
+460 1008 m
+(")s
+11 FH
+(PARAMETERSOFTHEVAMPSYSTEM)s
+12 FA
+(")s
+460 948 m
+(")s
+11 FH
+(SIMPLETYPESOFTHEVAMPSYSTEM)s
+12 FA
+(")s
+460 888 m
+(")s
+11 FH
+(STRUCTUREDTYPESOFTHEVAMPSYSTEM)s
+12 FA
+(")s
+8 FA
+295 254 m
+(CLiP)s
+373(provisional)ms
+532(user)ms
+595(manual)ms
+702(\(version)ms
+819(2.100\))ms
+4 800 430 1988 li
+4 500 430 2704 li
+endpage
+%%Page: 5 6
+begpage
+10 FCB
+295 3182 m
+(6)s
+10 FC
+460 3182 m
+(Examples)s
+12 FCB
+295 3008 m
+(3.3 Example 3: Quick stubs and abstract data types)s
+10 FAIB
+495 2926 m
+(First level data structures:)s
+10 FA
+595 2876 m
+(This level introduces the data-structure TTY_INFO, containing the initial communication)s
+10 FA
+495 2826 m
+(between the terminal and the program. The definition requires in addition four system parameters)s
+10 FA
+495 2776 m
+(and some constants and types which are related to file specifications. The structure of CODE_INFO)s
+10 FA
+495 2726 m
+(is left open for the time being.)s
+10 FH
+420 2626 m
+(1)s
+495 2626 m
+(\(********** Parameters of the VAMP-system \(#quick\) ***********\))s
+420 2576 m
+(2)s
+495 2576 m
+(\(*)s
+795(-------- Parameters of TTY_INFO ---------)ms
+2045( *\))ms
+420 2526 m
+(3)s
+495 2526 m
+(MAX_FILE_SPEC_L = 255;)s
+1195(\(* Maximum length file-specific.)ms
+2045( *\))ms
+420 2476 m
+(4)s
+495 2476 m
+(MAX_FILE_NAME_L = 39;)s
+1195(\(* Maximum length file-name.)ms
+2045( *\))ms
+420 2426 m
+(5)s
+495 2426 m
+(MAX_FILE_EXT_L = 39;)s
+1195(\(* Maximum length file-extension.)ms
+2045( *\))ms
+420 2376 m
+(6)s
+495 2376 m
+(MAX_IN_FILES =)s
+995( 8;)ms
+1195(\(* Maximum number of in-files for)ms
+2045( *\))ms
+420 2326 m
+(7)s
+1195 2326 m
+(\(* a single run.)s
+2045( *\))ms
+420 2276 m
+(8)s
+495 2276 m
+(UPB_IN_FILES =)s
+995(9;)ms
+1195(\(* = MAX_IN_FILES + 1.)ms
+2045( *\))ms
+420 2226 m
+(9)s
+495 2226 m
+(MAX_MODULES =)s
+995(10;)ms
+1195(\(* Maximum number of modules)ms
+2045( *\))ms
+395 2176 m
+(10)s
+1195 2176 m
+(\(* specified for a run.)s
+2045( *\))ms
+395 2126 m
+(11)s
+495 2126 m
+(UPB_MODULES =)s
+995(11;)ms
+1195(\(* = MAX_MODULES + 1.)ms
+2045( *\))ms
+395 2076 m
+(12)s
+495 2076 m
+(EMPTY = '';)s
+395 2026 m
+(13)s
+395 1976 m
+(14)s
+495 1976 m
+(\(********* Simple types of the VAMP-system \(#quick\) **********\))s
+395 1926 m
+(15)s
+495 1926 m
+(\(*)s
+795(-------- Simple types of TTY_INFO ---------)ms
+2045( *\))ms
+395 1876 m
+(16)s
+495 1876 m
+(FILE_SPEC = VARYING [MAX_FILE_SPEC_L] OF CHAR;)s
+395 1826 m
+(17)s
+495 1826 m
+(FILE_NAME = VARYING [MAX_FILE_NAME_L] OF CHAR;)s
+395 1776 m
+(18)s
+495 1776 m
+(FILE_EXT = VARYING [MAX_FILE_EXT_L] OF CHAR;)s
+395 1726 m
+(19)s
+395 1676 m
+(20)s
+495 1676 m
+(\(******** Structured types of the VAMP-system ****************\))s
+395 1626 m
+(21)s
+495 1626 m
+(\(*)s
+695(-------- Structured types of TTY_INFO ---------)ms
+2045( *\))ms
+395 1576 m
+(22)s
+495 1576 m
+(TTY_INFO =)s
+795(RECORD)ms
+395 1526 m
+(23)s
+895 1526 m
+(IN_FILES:)s
+1195(ARRAY [1..UPB_IN_FILES] OF FILE_SPEC;)ms
+395 1476 m
+(24)s
+895 1476 m
+(MODULES:)s
+1195(ARRAY [1..UPB_MODULES] OF FILE_NAME;)ms
+395 1426 m
+(25)s
+895 1426 m
+(DFLT_EXT:)s
+1195(FILE_EXT;)ms
+395 1376 m
+(26)s
+895 1376 m
+(INV_MODE,)s
+395 1326 m
+(27)s
+895 1326 m
+(GO:)s
+1195(BOOLEAN;)ms
+395 1276 m
+(29)s
+795 1276 m
+(END \(*RECORD*\);)s
+395 1226 m
+(30)s
+495 1226 m
+(\(**************** Declaration of CODE_INFO *******************\))s
+395 1176 m
+(31)s
+495 1176 m
+(\(******** End of Structured types of the VAMP-system *********\))s
+395 1126 m
+(32)s
+395 1076 m
+(33)s
+395 1026 m
+(34)s
+495 1026 m
+(\(************* Declaration of CODE_INFO \(#def\) ***************\))s
+395 976 m
+(35)s
+495 976 m
+(CODE_INFO = ABSTRACT;)s
+395 926 m
+(36)s
+495 926 m
+(\(******************** End of declaration *********************\))s
+12 FAB
+295 846 m
+(Remarks:)s
+12 FA
+389 786 m
+(This)s
+487(section)ms
+639(contains)ms
+816(five)ms
+904(stubs)ms
+1017(altogether,)ms
+1239(i.e.)ms
+1310(lines)ms
+1415(1-12,)ms
+1529(14-18,)ms
+1668(20-31)ms
+1795(and)ms
+1877(34-36.)ms
+2016(The)ms
+2104(first)ms
+295 726 m
+(two)s
+384(blocks)ms
+529(one)ms
+616(have)ms
+726(no)ms
+790(internal)ms
+958(slots.)ms
+1077(The)ms
+1169(quick)ms
+1295(option)ms
+1437(promotes)ms
+1638(them)ms
+1753(to)ms
+1807(quick)ms
+1932(stubs,)ms
+2062(which)ms
+295 666 m
+(means)s
+435(that)ms
+522(they)ms
+621(are)ms
+694(completed)ms
+915(by)ms
+978(the)ms
+1051(first)ms
+1144(line)ms
+1232(that)ms
+1319(is)ms
+1365(not)ms
+1442(an)ms
+1501(L6.)ms
+389 606 m
+(The)s
+480(third)ms
+587(stub)ms
+684(\(20-31\))ms
+847(illustrates)ms
+1055(how)ms
+1155(an)ms
+1215(abstract)ms
+1384(data)ms
+1480(type)ms
+1580(can)ms
+1663(be)ms
+1723(implemented.)ms
+2010(The)ms
+2101(stub)ms
+295 546 m
+(is)s
+341(an)ms
+402(ordinary)ms
+584(one)ms
+670(with)ms
+772(one)ms
+858(slot)ms
+943(- identified)ms
+1177(as)ms
+1232(")ms
+11 FH
+(DECLARATIONOFCODEINFO)s
+12 FA
+(" -)s
+1893(at)ms
+1943(line)ms
+2031(30.)ms
+2107(The)ms
+295 486 m
+(slot)s
+380(is)ms
+427(by)ms
+490(default)ms
+642(satisfied)ms
+822(with)ms
+924(the)ms
+998(stub)ms
+1095(at)ms
+1144(lines)ms
+1252(34-36.)ms
+1394(But)ms
+1480(this)ms
+1565(declaration)ms
+1800(will)ms
+1891(be)ms
+1952(replaced)ms
+2134(by)ms
+295 426 m
+(a)s
+329(new)ms
+425(one)ms
+510(at)ms
+558(some)ms
+676(time)ms
+778(in)ms
+829(the)ms
+903(future.)ms
+8 FA
+295 254 m
+(CLiP)s
+373(provisional)ms
+532(user)ms
+595(manual)ms
+702(\(version)ms
+819(2.100\))ms
+4 2050 455 1929 li
+endpage
+%%Page: 6 7
+begpage
+10 FC
+1182 3182 m
+(3.4 Example 4: An ordinary refinement step)s
+10 FCB
+2161 3182 m
+(7)s
+12 FCB
+295 3008 m
+(3.4 Example 4: An ordinary refinement step)s
+10 FAIB
+470 2926 m
+(Body of VAMP:)s
+10 FA
+570 2876 m
+(The input-files will be processed sequentially in the same order as given by the user. The inter-)s
+10 FA
+470 2826 m
+(mediate file "VAMP.TMP" is guarded by a sentinel to simplify backspacing later on and it needs an)s
+10 FA
+470 2776 m
+(additional global declaration.)s
+10 FH
+395 2676 m
+(1)s
+570 2676 m
+(\(*********** Simple types of the VAMP-system ************\))s
+395 2626 m
+(2)s
+570 2626 m
+(FTYPE = FILE OF CHAR;)s
+395 2576 m
+(3)s
+570 2576 m
+(\(****************** End of declaration ******************\))s
+470 2476 m
+(Now the body of VAMP expands to)s
+395 2376 m
+(4)s
+470 2376 m
+(\(********************** VAMP \(body\) **************************\))s
+395 2326 m
+(5)s
+470 2326 m
+([INHERIT \('SYS$LIBRARY:STARLET.PEN', 'DECLAR.PEN'\)])s
+395 2276 m
+(6)s
+470 2276 m
+(PROGRAM)s
+770(VAMP \(INPUT, OUTPUT\);)ms
+395 2226 m
+(7)s
+395 2176 m
+(8)s
+470 2176 m
+(\(***************** Constants of VAMP \(#mult\) *****************\))s
+395 2126 m
+(9)s
+470 2126 m
+(\(***************** Types of VAMP \(#mult\) *********************\))s
+370 2076 m
+(10)s
+470 2076 m
+(VAR)s
+370 2026 m
+(11)s
+470 2026 m
+( FILE_CNT:)s
+970(1..UPB_IN_FILES;)ms
+370 1976 m
+(12)s
+470 1976 m
+( CURR_IN_FILE:)s
+970(TEXT;)ms
+1170(\(* Currently read file.)ms
+2020( *\))ms
+370 1926 m
+(13)s
+470 1926 m
+( CODE_LINES:)s
+970(FTYPE;)ms
+1170(\(* From input extracted code.)ms
+2020( *\))ms
+370 1876 m
+(14)s
+470 1876 m
+( TTY_DATA:)s
+970(TTY_INFO;)ms
+370 1826 m
+(15)s
+470 1826 m
+( CODE_STRUCT:)s
+970(CODE_INFO;)ms
+370 1776 m
+(16)s
+570 1776 m
+(\(************ Variables of VAMP \(#mult\) ******************\))s
+370 1726 m
+(17)s
+370 1676 m
+(18)s
+470 1676 m
+([EXTERNAL] PROCEDURE)s
+1070(ASKTTY \(VAR TTY_DATA: TTY_INFO\); EXTERN;)ms
+370 1626 m
+(19)s
+470 1626 m
+(\(*************** Functions of VAMP \(#mult\) *******************\))s
+370 1576 m
+(20)s
+370 1526 m
+(21)s
+470 1526 m
+(BEGIN)s
+370 1476 m
+(22)s
+570 1476 m
+(\(* Take the data, that are needed for this VAMP run from)s
+2020( *\))ms
+370 1426 m
+(23)s
+570 1426 m
+(\(* the terminal.)s
+2020( *\))ms
+370 1376 m
+(24)s
+570 1376 m
+(ASKTTY \(TTY_DATA\);)s
+370 1326 m
+(25)s
+570 1326 m
+(WITH TTY_DATA DO)s
+370 1276 m
+(26)s
+570 1276 m
+(IF GO THEN)s
+370 1226 m
+(27)s
+570 1226 m
+(BEGIN)s
+370 1176 m
+(28)s
+670 1176 m
+(\(********************* VAMP \(C\) **********************\))s
+370 1126 m
+(29)s
+670 1126 m
+(\(** Initialize CODE_STRUCT.)s
+2020(**\))ms
+370 1076 m
+(30)s
+670 1076 m
+(\(*******************************************************\))s
+370 1026 m
+(31)s
+370 976 m
+(32)s
+670 976 m
+(OPEN \(CODE_LINES, FILE_NAME :='VAMP.TMP',)s
+370 926 m
+(33)s
+770 926 m
+( ORGANIZATION := RELATIVE, ACCESS_METHOD := DIRECT,)s
+370 876 m
+(34)s
+770 876 m
+( DISPOSITION := DELETE\);)s
+370 826 m
+(35)s
+670 826 m
+(REWRITE \(CODE_LINES\);)s
+370 776 m
+(36)s
+670 776 m
+(FILE_CNT := 1;)s
+370 726 m
+(37)s
+670 726 m
+(WHILE \(IN_FILES [FILE_CNT] <> EMPTY\) DO)s
+370 676 m
+(38)s
+670 676 m
+(BEGIN)s
+370 626 m
+(39)s
+770 626 m
+(WRITELN \('Proceeding on file ',IN_FILES [FILE_CNT]\);)s
+370 576 m
+(40)s
+570 576 m
+( )s
+770(OPEN \(CURR_IN_FILE, FILE_NAME := IN_FILES [FILE_CNT],)ms
+370 526 m
+(41)s
+870 526 m
+( HISTORY := READONLY\);)s
+370 476 m
+(42)s
+770 476 m
+(RESET \(CURR_IN_FILE\);)s
+370 426 m
+(43)s
+770 426 m
+(PUT \(CODE_LINES\);)s
+1270(\(* Start file with a sentinel. *\))ms
+370 376 m
+(44)s
+8 FA
+295 254 m
+(CLiP)s
+373(provisional)ms
+532(user)ms
+595(manual)ms
+702(\(version)ms
+819(2.100\))ms
+4 2600 430 1654 li
+endpage
+%%Page: 7 8
+begpage
+10 FCB
+295 3182 m
+(8)s
+10 FC
+460 3182 m
+(Examples)s
+10 FH
+370 3016 m
+(45)s
+770 3016 m
+(\(****************** VAMP \(A\) *********************\))s
+370 2966 m
+(46)s
+770 2966 m
+(\(** Build CODE_STRUCT and fill CODE_LINES by a)s
+2020(**\))ms
+370 2916 m
+(47)s
+770 2916 m
+(\(** scan of CURR_IN_FILE, using the information)s
+2020(**\))ms
+370 2866 m
+(48)s
+770 2866 m
+(\(** of MODULES, DFLT_EXT and INV_MODE.)s
+2020(**\))ms
+370 2816 m
+(49)s
+770 2816 m
+(\(***************************************************\))s
+370 2766 m
+(50)s
+370 2716 m
+(51)s
+770 2716 m
+(CLOSE \(CURR_IN_FILE\);)s
+370 2666 m
+(52)s
+770 2666 m
+(FILE_CNT := FILE_CNT + 1;)s
+370 2616 m
+(53)s
+670 2616 m
+(END \(*WHILE*\);)s
+370 2566 m
+(54)s
+370 2516 m
+(55)s
+670 2516 m
+(\(******************** VAMP \(B\) ***********************\))s
+370 2466 m
+(56)s
+670 2466 m
+(\(** Generate the files as specified by CODE_STRUCT)s
+2020(**\))ms
+370 2416 m
+(57)s
+670 2416 m
+(\(** from the data contained by CODE_LINES.)s
+2020(**\))ms
+370 2366 m
+(58)s
+670 2366 m
+(\(*******************************************************\))s
+370 2316 m
+(59)s
+370 2266 m
+(60)s
+670 2266 m
+(\(* Close and Delete scratch-file CODE_LINES.)s
+2020( *\))ms
+370 2216 m
+(61)s
+670 2216 m
+(CLOSE \(CODE_LINES, DELETE\);)s
+370 2166 m
+(62)s
+570 2166 m
+(END)s
+370 2116 m
+(63)s
+570 2116 m
+(ELSE)s
+370 2066 m
+(64)s
+670 2066 m
+(WRITELN \('!!! You specified an empty run - try again !!!'\);)s
+370 2016 m
+(65)s
+470 2016 m
+(END \(*VAMP*\).)s
+370 1966 m
+(66)s
+470 1966 m
+(\(******************* End of VAMP \(body\) **********************\))s
+370 1916 m
+(67)s
+370 1866 m
+(68)s
+370 1816 m
+(69)s
+470 1816 m
+(\(************ Constants of VAMP \(#leader, #quick\) ************\))s
+370 1766 m
+(70)s
+470 1766 m
+(CONST)s
+370 1716 m
+(71)s
+470 1716 m
+(\(************ Types of VAMP \(#leader, #quick\) ****************\))s
+370 1666 m
+(72)s
+470 1666 m
+(TYPE)s
+12 FAB
+295 1586 m
+(Remarks:)s
+12 FA
+389 1526 m
+(This)s
+488(refinement)ms
+714(contains)ms
+891(four)ms
+985(stubs)ms
+1098(\(lines)ms
+1219(1-3,)ms
+1308(4-66,)ms
+1422(69-70)ms
+1549(and)ms
+1632(71-72\).)ms
+1787(The)ms
+1875(second)ms
+2024(stub)ms
+2118(has)ms
+295 1466 m
+(seven)s
+417(slots)ms
+518(\(lines)ms
+638(8,)ms
+685(9,)ms
+732(16,)ms
+803(19,)ms
+875(28-30,)ms
+1013(45-49)ms
+1139(and)ms
+1220(55-58\).)ms
+1375(Lines)ms
+1495(22,)ms
+1567(23)ms
+1626(and)ms
+1707(60)ms
+1766(are)ms
+1837(simple)ms
+1979(code-lines)ms
+295 1406 m
+(from)s
+404(CLiPs)ms
+542(point)ms
+657(of)ms
+711(view.)ms
+389 1346 m
+(The)s
+481(leader)ms
+617(option)ms
+760(of)ms
+816(the)ms
+891(last)ms
+975(two)ms
+1065(stubs)ms
+1182(defines)ms
+1341(the)ms
+1416(code)ms
+1525(that)ms
+1615(will)ms
+1707(be)ms
+1768(inserted)ms
+1941(in)ms
+1995(front)ms
+2106(of)ms
+2162(a)ms
+295 1286 m
+(stub)s
+390(that)ms
+478(matches)ms
+654(the)ms
+728(slot.)ms
+8 FA
+295 254 m
+(CLiP)s
+373(provisional)ms
+532(user)ms
+595(manual)ms
+702(\(version)ms
+819(2.100\))ms
+4 1400 430 2344 li
+endpage
+%%Page: 8 9
+begpage
+10 FC
+1312 3182 m
+(3.5 Example 5: A subroutine module)s
+10 FCB
+2161 3182 m
+(9)s
+12 FCB
+295 3008 m
+(3.5 Example 5: A subroutine module)s
+10 FH
+395 2926 m
+(1)s
+470 2926 m
+(\(****** #File "ASKTTY.PAS" ******\))s
+395 2876 m
+(2)s
+470 2876 m
+([INHERIT \('DECLAR.PEN'\)] MODULE ASKTTY \(INPUT, OUTPUT\);)s
+395 2826 m
+(3)s
+395 2776 m
+(4)s
+470 2776 m
+(\(*********** External procedures of ASKTTY \(#mult\) ************\))s
+395 2726 m
+(5)s
+395 2676 m
+(6)s
+470 2676 m
+(\(***************************************************************\))s
+395 2626 m
+(7)s
+470 2626 m
+(\(* Routine:)s
+870(ASKTTY)ms
+1070(-)ms
+1170(ASK information from TTY.)ms
+2020( *\))ms
+395 2576 m
+(8)s
+470 2576 m
+(\(* Purpose:)s
+870(To obtain from the TTY the information which)ms
+2020( *\))ms
+395 2526 m
+(9)s
+470 2526 m
+(\(*)s
+870(is needed to perform a VAMP run.)ms
+2020( *\))ms
+370 2476 m
+(10)s
+470 2476 m
+(\(* Interface:)s
+870(TTY_DATA -)ms
+1170(Data from TTY to VAMP.)ms
+2020( *\))ms
+370 2426 m
+(11)s
+470 2426 m
+(\(*)s
+870(TTY -)ms
+1170(Source of all knowledge.)ms
+2020( *\))ms
+370 2376 m
+(12)s
+470 2376 m
+(\(* Author/Date:)s
+870(VAMP project management, September 29, 1983.)ms
+2020( *\))ms
+370 2326 m
+(13)s
+470 2326 m
+(\(***************************************************************\))s
+370 2276 m
+(14)s
+470 2276 m
+([GLOBAL] PROCEDURE)s
+970(ASKTTY \(VAR TTY_DATA: TTY_INFO\);)ms
+370 2226 m
+(15)s
+370 2176 m
+(16)s
+470 2176 m
+(\(************* Constants of ASKTTY \(#multiple\) ***************\))s
+370 2126 m
+(17)s
+470 2126 m
+(\(************* Types of ASKTTY \(#multiple\) *******************\))s
+370 2076 m
+(18)s
+470 2076 m
+(\(************* Variables of ASKTTY \(#multiple\) ***************\))s
+370 2026 m
+(19)s
+470 2026 m
+(\(************* Procedures of ASKTTY \(#multiple\) **************\))s
+370 1976 m
+(20)s
+370 1926 m
+(21)s
+470 1926 m
+(BEGIN)s
+370 1876 m
+(22)s
+570 1876 m
+(WITH TTY_DATA DO)s
+370 1826 m
+(23)s
+570 1826 m
+(BEGIN)s
+370 1776 m
+(24)s
+670 1776 m
+(\(******************** ASKTTY \(1\) *********************\))s
+370 1726 m
+(25)s
+670 1726 m
+(\(** Get IN_FILES from TTY.)s
+2020(**\))ms
+370 1676 m
+(26)s
+670 1676 m
+(\(*******************************************************\))s
+370 1626 m
+(27)s
+370 1576 m
+(28)s
+670 1576 m
+(GO := NOT \(IN_FILES[1] = EMPTY\);)s
+370 1526 m
+(29)s
+670 1526 m
+(IF GO THEN)s
+370 1476 m
+(30)s
+670 1476 m
+(BEGIN)s
+370 1426 m
+(31)s
+770 1426 m
+(\(**************** ASKTTY \(2\) *********************\))s
+370 1376 m
+(32)s
+770 1376 m
+(\(** Ask which modules must be generated by VAMP.)s
+2020(**\))ms
+370 1326 m
+(33)s
+770 1326 m
+(\(** Set INV_MODE, MODULES and GO accordingly.)s
+2020(**\))ms
+370 1276 m
+(34)s
+770 1276 m
+(\(***************************************************\))s
+370 1226 m
+(35)s
+670 1226 m
+(END \(*IF*\);)s
+370 1176 m
+(36)s
+670 1176 m
+(IF GO THEN)s
+370 1126 m
+(37)s
+670 1126 m
+(BEGIN)s
+370 1076 m
+(38)s
+770 1076 m
+(\(**************** ASKTTY \(3\) *********************\))s
+370 1026 m
+(39)s
+770 1026 m
+(\(** Ask DFLT_EXT from the terminal.)s
+2020(**\))ms
+370 976 m
+(40)s
+770 976 m
+(\(***************************************************\))s
+370 926 m
+(41)s
+670 926 m
+(END \(*IF*\);)s
+370 876 m
+(42)s
+570 876 m
+(END \(*WITH*\);)s
+370 826 m
+(43)s
+470 826 m
+(END \(*ASKTTY*\);)s
+370 776 m
+(44)s
+370 726 m
+(45)s
+470 726 m
+(END \(*MODULE*\).)s
+370 676 m
+(46)s
+470 676 m
+(\(********************** End of MODULE ************************\))s
+370 626 m
+(47)s
+370 576 m
+(48)s
+370 526 m
+(49)s
+470 526 m
+(\(********** Constants of ASKTTY \(#leader, #quick\) ************\))s
+370 476 m
+(50)s
+470 476 m
+(CONST)s
+8 FA
+295 254 m
+(CLiP)s
+373(provisional)ms
+532(user)ms
+595(manual)ms
+702(\(version)ms
+819(2.100\))ms
+4 2500 430 1704 li
+endpage
+%%Page: 9 10
+begpage
+10 FCB
+295 3182 m
+(10)s
+10 FC
+460 3182 m
+(Examples)s
+10 FH
+370 3016 m
+(51)s
+470 3016 m
+(\(********** Types of ASKTTY \(#leader, #quick\) ****************\))s
+370 2966 m
+(52)s
+470 2966 m
+(TYPE)s
+370 2916 m
+(53)s
+470 2916 m
+(\(********** Variables of ASKTTY \(#leader, #quick\) ************\))s
+370 2866 m
+(54)s
+470 2866 m
+(VAR)s
+12 FAB
+295 2786 m
+(Remarks:)s
+12 FA
+389 2726 m
+(A)s
+437(clear)ms
+546(cut)ms
+620(example)ms
+802(of)ms
+856(a)ms
+890(subroutine)ms
+1114(definition)ms
+1320(in)ms
+1372(VAX/VMS)ms
+1614(Pascal)ms
+1755(that)ms
+1842(is)ms
+1888(to)ms
+1939(be)ms
+1998(compiled)ms
+295 2666 m
+(independently.)s
+606(The)ms
+699(refinement)ms
+931(contains)ms
+1113(stubs)ms
+1232(at)ms
+1283(lines)ms
+1393(1-46,)ms
+1513(49-50,)ms
+1657(51-52)ms
+1789(and)ms
+1877(53-54.)ms
+2022(The)ms
+2115(last)ms
+295 2606 m
+(three)s
+407(stubs)ms
+522(are)ms
+596(all)ms
+658(quick)ms
+782(stubs.)ms
+389 2546 m
+(The)s
+479(first)ms
+572(stub)ms
+668(is)ms
+714(a)ms
+749(main)ms
+861(stub.)ms
+970(It)ms
+1013(carries)ms
+1159(no)ms
+1221(identification)ms
+1501(and)ms
+1585(only)ms
+1687(specifies)ms
+1874(the)ms
+1948(name)ms
+2069(of)ms
+2123(the)ms
+295 2486 m
+(file)s
+374(that)ms
+461(will)ms
+551(finally)ms
+694(hold)ms
+795(the)ms
+869(module.)ms
+1044(Had)ms
+1140(the)ms
+1213(file-option)ms
+1437(be)ms
+1496(omitted,)ms
+1674(this)ms
+1758(would)ms
+1896(have)ms
+2003(meant)ms
+2137(an)ms
+295 2426 m
+(error.)s
+389 2366 m
+(Lines)s
+514(4,)ms
+567(16,)ms
+644(17,)ms
+721(18)ms
+786(and)ms
+873(19)ms
+937(are)ms
+1013(single-line)ms
+1239(slot)ms
+1326(for)ms
+1399(future)ms
+1533(declarations.)ms
+1802(The)ms
+1894(leader)ms
+2031(stubs)ms
+2148(at)ms
+295 2306 m
+(the)s
+368(end)ms
+453(secure)ms
+593(syntactic)ms
+783(details.)ms
+939(Lines)ms
+1062(24-26,)ms
+1204(31-34)ms
+1333(and)ms
+1418(38-40)ms
+1547(are)ms
+1621(ordinary)ms
+1803(slots)ms
+1907(again.)ms
+8 FA
+295 254 m
+(CLiP)s
+373(provisional)ms
+532(user)ms
+595(manual)ms
+702(\(version)ms
+819(2.100\))ms
+4 200 430 2944 li
+endpage
+%%Page: 10 11
+begpage
+10 FC
+1562 3182 m
+(4 Semantics of options)s
+10 FCB
+2138 3182 m
+(11)s
+14 FCB
+295 3001 m
+(4 Semantics of options)s
+12 FAB
+295 2906 m
+(#Comment)s
+12 FA
+543(\(stub,)ms
+668(slot\))ms
+389 2846 m
+(The)s
+478(comment)ms
+676(option)ms
+816(transforms)ms
+1042(the)ms
+1115(special)ms
+1266(CLIP-characters)ms
+1606(to)ms
+1657(a)ms
+1691(predefined)ms
+1917(format)ms
+2062(which)ms
+389 2786 m
+(suits)s
+501(a)ms
+544(particular)ms
+756(programming)ms
+1049(language.)ms
+1262(The)ms
+1361(option)ms
+1509(has)ms
+1596(an)ms
+1664(obligatory)ms
+1890(argument,)ms
+2112(e.g.)ms
+12 FAB
+389 2726 m
+(PASCAL)s
+12 FA
+(,)s
+12 FAB
+610(FORTRAN)ms
+12 FA
+(,)s
+12 FAB
+878(C)ms
+12 FA
+(,)s
+12 FAB
+936(ADA)ms
+12 FA
+1053(etc.)ms
+1133(or)ms
+12 FAB
+1183(ON)ms
+12 FA
+(/)s
+12 FAB
+(OFF)s
+12 FA
+(.)s
+1394(The)ms
+1480(ON/OFF)ms
+1667(argument)ms
+1865(specifies)ms
+2048(wether)ms
+389 2666 m
+(or)s
+443(not)ms
+520(the)ms
+594(slot-)ms
+696(or)ms
+750(stub-segment)ms
+1030(is)ms
+1076(to)ms
+1128(be)ms
+1188(included)ms
+1373(upon)ms
+1486(substitution.)ms
+1745(Comment)ms
+1955(options)ms
+2115(can)ms
+389 2606 m
+(be)s
+448(nested)ms
+588(and)ms
+673(the)ms
+747(most)ms
+857(local)ms
+966(version)ms
+1126(controls)ms
+1300(the)ms
+1373(operation.)ms
+12 FAB
+295 2516 m
+(#Default)s
+12 FA
+490(\(stub\))ms
+389 2456 m
+(A)s
+432(default)ms
+578(stub)ms
+668(is)ms
+708(prefixed)ms
+882(to)ms
+928(exclusively)ms
+1163(substituted)ms
+1387(if)ms
+1424(no)ms
+1481(other)ms
+1591(stub)ms
+1681(is)ms
+1722(found)ms
+1845(for)ms
+1911(that)ms
+1993(particular)ms
+389 2396 m
+(slot.)s
+12 FAB
+295 2306 m
+(#Indent)s
+12 FA
+474(\(stub,)ms
+599(slot\))ms
+389 2246 m
+(The)s
+481(indent)ms
+621(option)ms
+763(controls)ms
+939(the)ms
+1015(indentation)ms
+1255(of)ms
+1311(the)ms
+1387(generated)ms
+1596(listing.)ms
+1749(Indent)ms
+1891(options)ms
+2053(can)ms
+2137(be)ms
+389 2186 m
+(nested)s
+527(and)ms
+610(the)ms
+682(most)ms
+790(local)ms
+898(option)ms
+1036(overrules)ms
+1233(the)ms
+1305(more)ms
+1419(global)ms
+1554(ones.)ms
+1669(Indent)ms
+1808(has)ms
+1885(as)ms
+1938(one)ms
+2021(optional)ms
+389 2126 m
+(argument,)s
+12 FAB
+602(ON)ms
+12 FA
+690(or)ms
+12 FAB
+744(OFF)ms
+12 FA
+(.)s
+12 FAB
+295 2036 m
+(#File)s
+12 FA
+413(\(stub\))ms
+389 1976 m
+(The)s
+476(file)ms
+553(option)ms
+691(identifies)ms
+887(the)ms
+959(stub)ms
+1052(as)ms
+1104(a)ms
+1136(main)ms
+1246(stub)ms
+1340(\(viz.)ms
+1440(the)ms
+1511(root)ms
+1602(of)ms
+1654(a)ms
+1686(new)ms
+1780(module\).)ms
+1969(The)ms
+2057(option)ms
+389 1916 m
+(carries)s
+535(a)ms
+570(string)ms
+697(in)ms
+749(quotes)ms
+893(as)ms
+948(argument.)ms
+1162(This)ms
+1264(string)ms
+1391(specifies)ms
+1579(the)ms
+1653(name)ms
+1775(of)ms
+1829(the)ms
+1904(file)ms
+1983(to)ms
+2035(be)ms
+2096(gen-)ms
+389 1856 m
+(erated.)s
+12 FAB
+295 1766 m
+(#Leader)s
+12 FA
+485(\(stub\))ms
+389 1706 m
+(The)s
+477(leader)ms
+611(stub)ms
+705(is)ms
+750(usually)ms
+905(combined)ms
+1114(with)ms
+1214(multiple)ms
+1391(slots.)ms
+1507(It)ms
+1548(modifies)ms
+1734(the)ms
+1807(environment)ms
+2071(of)ms
+2123(the)ms
+389 1646 m
+(stubs)s
+506(that)ms
+596(will)ms
+688(be)ms
+750(substituted)ms
+982(by)ms
+1046(inserting)ms
+1236(the)ms
+1312(leader)ms
+1449(stub)ms
+1547(in)ms
+1601(front)ms
+1713(of)ms
+1769(the)ms
+1845(first)ms
+1940(encountered)ms
+389 1586 m
+(normal)s
+543(stub.)ms
+12 FAB
+295 1496 m
+(#Multiple)s
+12 FA
+515(\(slot\))ms
+389 1436 m
+(A)s
+437(multiple)ms
+616(slot)ms
+701(accepts)ms
+861(the)ms
+934(substitution)ms
+1180(of)ms
+1234(any)ms
+1319(number)ms
+1484(of)ms
+1538(stubs.)ms
+12 FAB
+295 1346 m
+(#Optional)s
+12 FA
+521(\(slot\))ms
+389 1286 m
+(An)s
+462(optional)ms
+639(slot)ms
+723(accepts)ms
+883(the)ms
+957(substitution)ms
+1202(of)ms
+1257(0)ms
+1294(or)ms
+1348(1)ms
+1386(stubs)ms
+1501(only.)ms
+12 FAB
+295 1196 m
+(#Overrule)s
+12 FA
+526(\(stub\))ms
+389 1136 m
+(The)s
+478(overrule)ms
+657(stub)ms
+752(replaces)ms
+928(the)ms
+1001(stub)ms
+1096(already)ms
+1255(substituted)ms
+1484(in)ms
+1535(a)ms
+1569(particular)ms
+1772(position.)ms
+1958(It)ms
+2000(is)ms
+2046(mainly)ms
+389 1076 m
+(meant)s
+523(for)ms
+594(testing)ms
+740(purposes.)ms
+12 FAB
+295 986 m
+(#Quick)s
+12 FA
+463(\(stub\))ms
+389 926 m
+(A)s
+440(quick)ms
+567(stub)ms
+666(is)ms
+715(a)ms
+753(stub)ms
+851(without)ms
+1020(internal)ms
+1188(structure)ms
+1379(\(viz.)ms
+1485(slots\).)ms
+1621(Following)ms
+1842(the)ms
+1919(stub)ms
+2018(segment)ms
+389 866 m
+(only)s
+490(L6-type)ms
+661(lines)ms
+768(are)ms
+841(allowed.)ms
+1025(Any)ms
+1123(other)ms
+1238(type)ms
+1337(of)ms
+1391(line)ms
+1479(will)ms
+1569(end)ms
+1654(the)ms
+1727(stub.)ms
+12 FAB
+295 776 m
+(#Separator)s
+12 FA
+546(\(stub\))ms
+389 716 m
+(A)s
+437(separator)ms
+633(stub)ms
+729(is)ms
+775(to)ms
+826(be)ms
+886(inserted)ms
+1056(between)ms
+1236(two)ms
+1323(consecutive)ms
+1572(stubs)ms
+1687(of)ms
+1741(the)ms
+1815(same)ms
+1930(slot.)ms
+12 FAB
+295 626 m
+(#Trailer)s
+12 FA
+485(\(stub\))ms
+389 566 m
+(The)s
+476(trailer)ms
+606(stub)ms
+699(is)ms
+742(the)ms
+814(counterpart)ms
+1051(of)ms
+1103(the)ms
+1174(default)ms
+1323(stub.)ms
+1429(It)ms
+1469(modifies)ms
+1654(the)ms
+1726(environment)ms
+1988(by)ms
+2048(adding)ms
+389 506 m
+(the)s
+462(trailer)ms
+594(stub)ms
+690(after)ms
+794(the)ms
+868(last)ms
+950(encountered)ms
+1206(normal)ms
+1361(stub.)ms
+8 FA
+295 254 m
+(CLiP)s
+373(provisional)ms
+532(user)ms
+595(manual)ms
+702(\(version)ms
+819(2.100\))ms
+endpage
+%%Page: 11 12
+begpage
+10 FCB
+295 3182 m
+(12)s
+10 FC
+460 3182 m
+(Using CLiP)s
+14 FCB
+295 3001 m
+(5 Using CLiP)s
+12 FA
+295 2906 m
+(The)s
+399(complete)ms
+610(CLiP)ms
+742(system)ms
+908(for)ms
+994(DOS)ms
+1121(and)ms
+1220(VMS)ms
+1356(consists)ms
+1541(of)ms
+1610(two)ms
+1712(independent)ms
+1983(programs,)ms
+295 2846 m
+(CLIP_1.EXE)s
+584(and)ms
+678(CLIP_2.EXE.)ms
+980(The)ms
+1079(Unix)ms
+1201(version)ms
+1369(has)ms
+1457(only)ms
+1568(one)ms
+1662(program,)ms
+1865(CLIP,)ms
+2007(which)ms
+2151(is)ms
+295 2786 m
+(functionally)s
+549(identical)ms
+734(to)ms
+785(CLIP_2.)ms
+969(CLIP_1)ms
+1140(prepares)ms
+1321(a)ms
+1356(file,)ms
+1448(CLIP.INI,)ms
+1663(telling)ms
+1804(CLIP_2)ms
+1975(\(the)ms
+2065(actual)ms
+295 2726 m
+(module)s
+465(extractor\))ms
+679(literally)ms
+855(everything)ms
+1089(it)ms
+1137(has)ms
+1223(to)ms
+1282(know)ms
+1414(in)ms
+1473(order)ms
+1598(to)ms
+1657(perform)ms
+1838(a)ms
+1881(run)ms
+1967(\(a)ms
+2026(detailed)ms
+295 2666 m
+(description)s
+534(of)ms
+592(the)ms
+670(structure)ms
+862(of)ms
+921(an)ms
+985(INI-file)ms
+1155(is)ms
+1205(in)ms
+1261(the)ms
+1339(next)ms
+1442(section\).)ms
+1630(Thus)ms
+1747(CLIP.INI)ms
+1954(specifies)ms
+2146(to)ms
+295 2606 m
+(CLIP_2)s
+465(\(CLIP\):)ms
+389 2546 m
+(-)s
+460(the)ms
+534(files)ms
+632(it)ms
+673(has)ms
+752(to)ms
+803(read)ms
+902(\(i.e.)ms
+992(the)ms
+1066(source)ms
+1209(files\),)ms
+389 2486 m
+(-)s
+460(the)ms
+534(modules)ms
+716(it)ms
+756(should)ms
+902(extract)ms
+1050(\(i.e.)ms
+1141(target)ms
+1267(modules\),)ms
+389 2426 m
+(-)s
+460(the)ms
+534(name)ms
+655(of)ms
+709(the)ms
+782(report)ms
+914(file,)ms
+389 2366 m
+(-)s
+460(the)ms
+532(syntax)ms
+674(of)ms
+726(the)ms
+798(CLiP-lines)ms
+1026(\(i.e.)ms
+1114(the)ms
+1186(style)ms
+1292(of)ms
+1344(the)ms
+1416(lines)ms
+1522(that)ms
+1607(trigger)ms
+1752(the)ms
+1824(module)ms
+1984(extraction)ms
+460 2306 m
+(process\).)s
+295 2246 m
+(CLIP_1)s
+465(allows)ms
+607(a)ms
+641(very)ms
+742(detailed)ms
+912(specification)ms
+1179(of)ms
+1232(the)ms
+1305(extraction)ms
+1517(process,)ms
+1691(much)ms
+1814(more)ms
+1928(detailed)ms
+2098(than)ms
+295 2186 m
+(you)s
+384(will)ms
+477(need)ms
+586(in)ms
+640(general.)ms
+815(For)ms
+899(this)ms
+986(reason)ms
+1131(the)ms
+1207(CLiP)ms
+1328(system)ms
+1482(comes)ms
+1624(with)ms
+1728(a)ms
+1765(couple)ms
+1913(of)ms
+1970(routines)ms
+2146(to)ms
+295 2126 m
+(shortcut)s
+465(CLIP_1)ms
+632(and)ms
+713(for)ms
+781(Unix)ms
+890(users)ms
+1002(these)ms
+1113(routines)ms
+1284(are)ms
+1354(the)ms
+1424(primary)ms
+1591(tool)ms
+1678(to)ms
+1726(construct)ms
+1919(their)ms
+2019(INI-file.)ms
+295 2066 m
+(For)s
+378(a)ms
+414(description)ms
+650(of)ms
+706(these)ms
+823(routines)ms
+998(we)ms
+1070(refer)ms
+1179(to)ms
+1232(section)ms
+1387("Using)ms
+1541(CLiP")ms
+1681(of)ms
+1737(the)ms
+1812(READ_ME)ms
+2062(file)ms
+2143(of)ms
+295 2006 m
+(this)s
+379(release.)ms
+389 1946 m
+(When)s
+520(using)ms
+641(CLiP)ms
+759(it)ms
+800(is)ms
+846(recommended)ms
+1141(to)ms
+1193(introduce)ms
+1394(at)ms
+1443(least)ms
+1547(the)ms
+1620(following)ms
+1827(directories:)ms
+389 1886 m
+(-)s
+460(A)ms
+514(directory)ms
+711(for)ms
+787(the)ms
+865(source)ms
+1013(files)ms
+1117(CLiP)ms
+1240(will)ms
+1335(use.)ms
+1431(This)ms
+1537(directory)ms
+1735(also)ms
+1833(holds)ms
+1959(the)ms
+2037(various)ms
+460 1826 m
+(INI-file)s
+625(you)ms
+713(maintain)ms
+900(to)ms
+952(conduct)ms
+1123(the)ms
+1196(extraction)ms
+1409(process.)ms
+389 1766 m
+(-)s
+460(A)ms
+509(directory)ms
+702(to)ms
+753(contain)ms
+913(the)ms
+986(extracted)ms
+1182(modules.)ms
+389 1706 m
+(-)s
+460(A)ms
+509(directory)ms
+702(to)ms
+753(contain)ms
+913(the)ms
+986(results)ms
+1130(of)ms
+1184(the)ms
+1257(compilation)ms
+1509(and)ms
+1593(linking)ms
+1748(of)ms
+1802(the)ms
+1875(modules.)ms
+389 1646 m
+(-)s
+460(In)ms
+521(case)ms
+627(CLiP)ms
+753(is)ms
+806(used)ms
+917(in)ms
+975(combination)ms
+1245(with)ms
+1354(a)ms
+1396(word-processor,)ms
+1739(it)ms
+1786(is)ms
+1839(wise)ms
+1951(to)ms
+2009(keep)ms
+2123(the)ms
+460 1586 m
+(word-processor)s
+784(files)ms
+882(again)ms
+1003(in)ms
+1054(a)ms
+1089(separate)ms
+1265(directory.)ms
+1471(In)ms
+1525(this)ms
+1610(case)ms
+1708(the)ms
+1782(source)ms
+1925(file)ms
+2004(directory)ms
+460 1526 m
+(should)s
+606(be)ms
+666(fed)ms
+742(with)ms
+843(ASCII)ms
+987(exports)ms
+1146(from)ms
+1256(word-processor)ms
+1579(files.)ms
+8 FA
+295 254 m
+(CLiP)s
+373(provisional)ms
+532(user)ms
+595(manual)ms
+702(\(version)ms
+819(2.100\))ms
+endpage
+%%Page: 12 13
+begpage
+10 FC
+1467 3182 m
+(6 The structure of an INI-file)s
+10 FCB
+2138 3182 m
+(13)s
+14 FCB
+295 3001 m
+(6 The structure of an INI-file)s
+12 FA
+295 2906 m
+(This)s
+402(section)ms
+562(explains)ms
+748(the)ms
+828(structure)ms
+1021(of)ms
+1082(an)ms
+1148(INI-file)ms
+1319(by)ms
+1388(means)ms
+1534(of)ms
+1595(an)ms
+1660(example)ms
+1849(file.)ms
+1946(You)ms
+2051(should)ms
+295 2846 m
+(understand)s
+528(this)ms
+615(structure)ms
+804(thoroughly)ms
+1038(before)ms
+1179(your)ms
+1285(try)ms
+1355(to)ms
+1408(edit)ms
+1497(INI-files)ms
+1684(yourself)ms
+1862(directly)ms
+2029(through)ms
+295 2786 m
+(an)s
+354(editor)ms
+483([Ammers 1993].)ms
+389 2726 m
+(The)s
+481(example)ms
+665(is)ms
+714(an)ms
+776(INI-file)ms
+943(for)ms
+1017(MS-DOS.)ms
+1233(The)ms
+1326(only)ms
+1429(difference)ms
+1647(with)ms
+1751(other)ms
+1869(platforms)ms
+2075(is)ms
+2123(the)ms
+295 2666 m
+(specification)s
+558(of)ms
+607(directories.)ms
+838(The)ms
+923(numbers)ms
+1103(at)ms
+1147(the)ms
+1215(beginning)ms
+1423(of)ms
+1472(every)ms
+1591(line)ms
+1673(are)ms
+1742(added)ms
+1869(for)ms
+1935(convenience)ms
+295 2606 m
+(of)s
+349(reference.)ms
+560(They)ms
+675(are)ms
+748(not)ms
+825(part)ms
+915(of)ms
+969(the)ms
+1043(file)ms
+1122(itself.)ms
+10 FH
+470 2495 m
+(<================= Example of an INI-file ====================>)s
+395 2453 m
+(1)s
+470 2453 m
+(This file contains data that is needed to run CLiP)s
+395 2411 m
+(2)s
+470 2411 m
+(And is generated by CLiP_MENU)s
+395 2370 m
+(3)s
+470 2370 m
+(Modifying this file at own risk.)s
+395 2328 m
+(4)s
+470 2328 m
+(Using CLiP_MENU is definitely recommended.)s
+395 2286 m
+(5)s
+395 2245 m
+(6)s
+470 2245 m
+(INTERACTIVE_MODE Mode \(INTERACTIVE/DEBUG/HELPFUL/AUTO\))s
+395 2203 m
+(7)s
+470 2203 m
+(NO Interactive fault correction \(YES/NO\))s
+395 2161 m
+(8)s
+470 2161 m
+(BOTH Error message destination \(TERMINAL/......\))s
+395 2120 m
+(9)s
+470 2120 m
+(\(* Left comment string)s
+370 2078 m
+(10)s
+470 2078 m
+(*\) Right comment string)s
+370 2036 m
+(11)s
+470 2036 m
+(* Command character)s
+370 1995 m
+(12)s
+470 1995 m
+(ENDOF END string)s
+370 1953 m
+(13)s
+470 1953 m
+(# Option marker)s
+370 1911 m
+(14)s
+470 1911 m
+(EXTRACTED The specified modules are \(OMITTED/EX-)s
+370 1870 m
+(15)s
+470 1870 m
+(TRACTED\))s
+370 1828 m
+(16)s
+470 1828 m
+(------------ REPORT FILE -----------)s
+370 1786 m
+(17)s
+470 1786 m
+(CLIP.RPT)s
+370 1745 m
+(18)s
+470 1745 m
+(------------ INPUT FILES -----------)s
+370 1703 m
+(19)s
+470 1703 m
+(f:\\LPT\\MAN\\EX01_A.ASC)s
+370 1661 m
+(20)s
+470 1661 m
+(f:\\LPT\\MAN\\EX01_B.ASC)s
+370 1620 m
+(21)s
+470 1620 m
+(------------ MODULES ---------------)s
+370 1578 m
+(22)s
+470 1578 m
+(F:\\TEST\\)s
+370 1536 m
+(23)s
+470 1536 m
+(PALINDRO.PAS)s
+370 1495 m
+(24)s
+470 1495 m
+(F:\\TEST\\)s
+370 1453 m
+(25)s
+470 1453 m
+(TESTDATA.IN)s
+370 1411 m
+(26)s
+470 1411 m
+(------------ MODULE DIRECTORY ------)s
+370 1370 m
+(27)s
+470 1370 m
+(f:\\LPT\\)s
+470 1328 m
+(------------ END OF INI FILE -------)s
+470 1286 m
+(<================= End of Example INI-file ===================>)s
+12 FA
+295 1178 m
+(Lines 1-5:)s
+602(Descriptive)ms
+845(lines)ms
+952(that)ms
+1039(are)ms
+1113(flushed)ms
+1272(upon)ms
+1385(reading.)ms
+295 1088 m
+(Lines 6-14:)s
+602(Information)ms
+853(behind)ms
+1002(position)ms
+1175(24)ms
+1238(is)ms
+1284(not)ms
+1360(interpreted.)ms
+295 998 m
+(Lines 6-7:)s
+602(These)ms
+734(lines)ms
+841(refer)ms
+947(to)ms
+999(unimplemented)ms
+1322(options.)ms
+1495(They)ms
+1610(should)ms
+1756(not)ms
+1832(be)ms
+1892(changed.)ms
+295 908 m
+(Lines 8:)s
+602(Identifies)ms
+804(the)ms
+877(output)ms
+1018(device)ms
+1161(for)ms
+1232(messages)ms
+1433(and)ms
+1518(reports.)ms
+1682(The)ms
+1773(first)ms
+1866(word)ms
+1981(of)ms
+2036(the)ms
+2110(line)ms
+602 848 m
+(must)s
+712(be)ms
+773(on)ms
+837(of)ms
+892(the)ms
+967(following)ms
+1175(keywords)ms
+1383(TERMINAL,)ms
+1667(REPORTFILE)ms
+1978(\(or)ms
+2050(FILE\),)ms
+602 788 m
+(BOTH)s
+750(or)ms
+804(NONE)ms
+956(and)ms
+1040(we)ms
+1111(assume)ms
+1271(the)ms
+1344(meaning)ms
+1529(self)ms
+1614(evident.)ms
+295 698 m
+(Lines 9-13:)s
+602(These)ms
+735(lines)ms
+844(together)ms
+1022(define)ms
+1161(the)ms
+1236(syntax)ms
+1381(of)ms
+1437(the)ms
+1512(lines)ms
+1621(CLiP)ms
+1741(will)ms
+1833(recognize.)ms
+2054(For)ms
+2137(an)ms
+602 638 m
+(explanation)s
+847(of)ms
+901(the)ms
+975(CLiP)ms
+1093(syntax,)ms
+1249(refer)ms
+1356(to)ms
+1407([Ammers)ms
+1608(1993].)ms
+295 548 m
+(Lines 9:)s
+602(At)ms
+659(most)ms
+763(6)ms
+795(characters)ms
+1004(to)ms
+1050(specify)ms
+1201(the)ms
+1269("left)ms
+1363(comment)ms
+1556(string")ms
+1697(i.e.)ms
+1765(the)ms
+1833(opening)ms
+2001(sequence)ms
+602 488 m
+(of)s
+650(a)ms
+680(comment)ms
+873(string)ms
+994(of)ms
+1043(the)ms
+1111(programming)ms
+1390(language)ms
+1578(you)ms
+1660(want)ms
+1765(to)ms
+1811(use.)ms
+1897(The)ms
+1982(characters)ms
+602 428 m
+(cannot)s
+747(be)ms
+807(letters)ms
+942(\(A-Z,)ms
+1067(a-z\),)ms
+1169(digits)ms
+1293(\(0-9\))ms
+1405(or)ms
+1460(a)ms
+1494(dot)ms
+1571(\(.\).)ms
+8 FA
+295 254 m
+(CLiP)s
+373(provisional)ms
+532(user)ms
+595(manual)ms
+702(\(version)ms
+819(2.100\))ms
+4 1250 430 1894 li
+endpage
+%%Page: 13 14
+begpage
+10 FCB
+295 3182 m
+(14)s
+10 FC
+460 3182 m
+(The structure of an INI-file)s
+12 FA
+295 3011 m
+(Lines 10:)s
+602(At)ms
+674(most)ms
+793(6)ms
+840(characters)ms
+1064(to)ms
+1125(specify)ms
+1291(the)ms
+1374("right)ms
+1510(comment)ms
+1718(string")ms
+1874(i.e.)ms
+1957(the)ms
+2040(closing)ms
+602 2951 m
+(sequence)s
+801(of)ms
+858(a)ms
+896(comment)ms
+1098(string)ms
+1228(of)ms
+1285(the)ms
+1362(programming)ms
+1650(language)ms
+1847(you)ms
+1938(want)ms
+2051(to)ms
+2105(use.)ms
+602 2891 m
+(The)s
+692(characters)ms
+907(cannot)ms
+1053(be)ms
+1112(letters)ms
+1247(\(A-Z,)ms
+1372(a-z\),)ms
+1475(digits)ms
+1598(\(0-9\))ms
+1711(or)ms
+1765(a)ms
+1800(dot)ms
+1876(\(.\).)ms
+295 2801 m
+(Lines 11:)s
+602(The)ms
+694(character)ms
+892(that)ms
+982(is)ms
+1030(postfixed)ms
+1231(to)ms
+1284(a)ms
+1321(left)ms
+1402(comment)ms
+1603(string)ms
+1732(and)ms
+1818(prefixed)ms
+2000(to)ms
+2053(a)ms
+2090(right)ms
+602 2741 m
+(comment)s
+805(string)ms
+936(in)ms
+992(order)ms
+1115(to)ms
+1171(identify)ms
+1344(it)ms
+1389(as)ms
+1448(a)ms
+1487(special)ms
+1643(comment)ms
+1847(that)ms
+1939(CLiP)ms
+2062(has)ms
+2146(to)ms
+602 2681 m
+(process,)s
+773(a)ms
+804(so)ms
+857(called)ms
+985(CLiP-line.)ms
+1203(The)ms
+1290(character)ms
+1482(cannot)ms
+1624(be)ms
+1680(a)ms
+1711(letter)ms
+1822(\(A-Z,)ms
+1943(a-z\),)ms
+2042(a)ms
+2073(digits)ms
+602 2621 m
+(\(0-9\))s
+714(or)ms
+768(a)ms
+803(dot)ms
+879(\(.\).)ms
+295 2531 m
+(Lines 12:)s
+602(The)ms
+693(leading)ms
+854(characters)ms
+1071(that)ms
+1160(identify)ms
+1329(a)ms
+1365(particular)ms
+1570(CLiP-line)ms
+1781(as)ms
+1836(the)ms
+1911(end)ms
+1997(of)ms
+2053(a)ms
+2089(stub,)ms
+602 2471 m
+(i.e.)s
+675(a)ms
+710(particular)ms
+914(section)ms
+1068(that)ms
+1156(can)ms
+1237(be)ms
+1297(substituted)ms
+1526(elsewhere.)ms
+295 2381 m
+(Lines 13:)s
+602(The)ms
+692(character)ms
+888(that)ms
+975(identifies)ms
+1174(the)ms
+1248(options.)ms
+295 2291 m
+(Line 14:)s
+602(Relates)ms
+758(to)ms
+807(the)ms
+878(modules)ms
+1057(in)ms
+1105(the)ms
+1176(module)ms
+1335(section)ms
+1487(below.)ms
+1631(The)ms
+1718(specified)ms
+1908(modules)ms
+2087(must)ms
+602 2231 m
+(either)s
+723(be)ms
+777(extracted)ms
+967(or)ms
+1016(omitted)ms
+1176(and)ms
+1256(the)ms
+1324(first)ms
+1412(word)ms
+1522(of)ms
+1571(this)ms
+1650(line)ms
+1732(can)ms
+1809(only)ms
+1905(be)ms
+1960(OMITTED)ms
+602 2171 m
+(or)s
+656(EXTRACTED.)ms
+295 2081 m
+(Line 15:)s
+602(Starts)ms
+729(the)ms
+804(section)ms
+959(defining)ms
+1139(the)ms
+1214(file)ms
+1294(that)ms
+1382(mirrors)ms
+1543(the)ms
+1618(extraction)ms
+1831(process.)ms
+2007(This)ms
+2110(line)ms
+602 2021 m
+(should)s
+747(be)ms
+807(copied)ms
+953(literally.)ms
+295 1931 m
+(Line 16:)s
+602(Path)ms
+703(and)ms
+788(file)ms
+867(specification)ms
+1135(of)ms
+1189(the)ms
+1263(report)ms
+1394(file.)ms
+295 1841 m
+(Line 17:)s
+602(Starts)ms
+726(the)ms
+799(section)ms
+951(defining)ms
+1129(the)ms
+1201(input)ms
+1315(files)ms
+1412(for)ms
+1481(the)ms
+1553(extraction)ms
+1764(process,)ms
+1938(the)ms
+2010(so)ms
+2065(called)ms
+602 1781 m
+(source)s
+745(files.)ms
+856(This)ms
+957(line)ms
+1045(should)ms
+1190(be)ms
+1250(copied)ms
+1396(literally.)ms
+295 1691 m
+(Line 18-19:)s
+602(Every)ms
+736(line)ms
+825(specifies)ms
+1014(a)ms
+1051(path)ms
+1151(and)ms
+1238(source)ms
+1382(file.)ms
+1476(There)ms
+1607(may)ms
+1707(be)ms
+1769(up)ms
+1833(to)ms
+1886(64)ms
+1950(lines)ms
+2059(in)ms
+2112(this)ms
+602 1631 m
+(section.)s
+295 1541 m
+(Line 20:)s
+602(Starts)ms
+727(the)ms
+799(section)ms
+952(defining)ms
+1130(the)ms
+1203(modules)ms
+1384(that)ms
+1470(are)ms
+1542(considered)ms
+1770(during)ms
+1912(the)ms
+1985(extraction)ms
+602 1481 m
+(process.)s
+776(Whether)ms
+959(the)ms
+1032(modules)ms
+1213(are)ms
+1286(extracted)ms
+1480(or)ms
+1534(omitted)ms
+1698(depends)ms
+1873(on)ms
+1935(line)ms
+2022(14.)ms
+2096(This)ms
+602 1421 m
+(line)s
+689(should)ms
+835(be)ms
+895(copied)ms
+1040(literally.)ms
+295 1331 m
+(Line 21-24:)s
+602(Every)ms
+735(line)ms
+824(pair)ms
+915(specifies)ms
+1104(a)ms
+1139(path)ms
+1239(and)ms
+1325(a)ms
+1361(module)ms
+1524(file.)ms
+1617(There)ms
+1747(may)ms
+1847(be)ms
+1908(up)ms
+1971(to)ms
+2024(64)ms
+2087(pairs)ms
+602 1271 m
+(\(128)s
+706(lines\))ms
+829(in)ms
+881(this)ms
+965(section.)ms
+295 1181 m
+(Line 25:)s
+602(Starts)ms
+728(the)ms
+801(section)ms
+955(to)ms
+1007(identify)ms
+1175(the)ms
+1248(default)ms
+1399(directory)ms
+1592(for)ms
+1663(modules,)ms
+1857(i.e.)ms
+1931(the)ms
+2004(directory)ms
+602 1121 m
+(where)s
+734(modules)ms
+913(go)ms
+973(to)ms
+1022(that)ms
+1107(have)ms
+1211(no)ms
+1271(explicit)ms
+1431(directory)ms
+1621(specified)ms
+1812(by)ms
+1872(the)ms
+1943(MODULES)ms
+602 1061 m
+(section.)s
+768(This)ms
+870(line)ms
+957(should)ms
+1103(be)ms
+1163(copied)ms
+1308(literally.)ms
+295 971 m
+(Line 26:)s
+602(Default)ms
+764(directory)ms
+957(for)ms
+1028(extracted)ms
+1224(modules.)ms
+295 881 m
+(Line 27:)s
+602(Identifies)ms
+803(the)ms
+877(end)ms
+961(of)ms
+1015(the)ms
+1089(INI-file.)ms
+1267(This)ms
+1368(line)ms
+1456(should)ms
+1601(be)ms
+1661(copied)ms
+1807(literally.)ms
+8 FA
+295 254 m
+(CLiP)s
+373(provisional)ms
+532(user)ms
+595(manual)ms
+702(\(version)ms
+819(2.100\))ms
+endpage
+%%Page: 14 15
+begpage
+10 FC
+926 3182 m
+(7.1 "SP_EXTR_STR: system failure .... call maintenance")s
+10 FCB
+2138 3182 m
+(15)s
+14 FCB
+295 3001 m
+(7 Bugs, work-arounds and undocumented features)s
+12 FCB
+295 2868 m
+(7.1 "SP_EXTR_STR: system failure .... call maintenance")s
+12 FA
+295 2781 m
+(This)s
+394(failure)ms
+536(may)ms
+633(happen)ms
+788(if)ms
+829(the)ms
+901(stubs)ms
+1015(have)ms
+1120(not)ms
+1195(been)ms
+1300(correctly)ms
+1488(closed)ms
+1627(with)ms
+1727(the)ms
+1799(END-STRING)ms
+2110(that)ms
+295 2721 m
+(has)s
+378(been)ms
+489(specified)ms
+686(as)ms
+744(the)ms
+822(syntax.)ms
+982(The)ms
+1076(default)ms
+1232(value)ms
+1356(of)ms
+1415(this)ms
+1504(string)ms
+1634(is)ms
+1684("ENDOF".)ms
+1921(Also)ms
+2032(the)ms
+2110(line)ms
+295 2661 m
+(containing)s
+518(the)ms
+592(END-STRING)ms
+904(should)ms
+1050(be)ms
+1110(properly)ms
+1292(closed.)ms
+1444(For)ms
+1526(example)ms
+1708(in)ms
+1760(a)ms
+1794(Pascal)ms
+1935(situation)ms
+10 FH
+345 2580 m
+( \(********* End of module \(2.1\) ***\))s
+12 FA
+295 2496 m
+(should)s
+440(be)ms
+500(all)ms
+563(right,)ms
+682(but)ms
+10 FH
+345 2415 m
+( \(****** End of module \(2.1\) **\))s
+12 FA
+295 2331 m
+(may)s
+393(give)ms
+492(trouble)ms
+646(since)ms
+761(the)ms
+835(string)ms
+961("**\)")ms
+1081(is)ms
+1127(incorrect)ms
+1317(here.)ms
+12 FCB
+295 2178 m
+(7.2 Options in general)s
+12 FA
+295 2091 m
+(Several)s
+453(options)ms
+608(have)ms
+711(been)ms
+814(introduces)ms
+1030(with)ms
+1128(very)ms
+1225(advanced)ms
+1422(applications)ms
+1672(in)ms
+1719(mind.)ms
+1843(They)ms
+1954(have)ms
+2057(hardly)ms
+295 2031 m
+(been)s
+402(tested)ms
+532(will)ms
+624(probably)ms
+815(not)ms
+892(work.)ms
+1021(You)ms
+1121(won't)ms
+1251(need)ms
+1358(them)ms
+1472(either.)ms
+1612(For)ms
+1695(this)ms
+1780(reason)ms
+1924(don't)ms
+2043(use)ms
+2123(the)ms
+295 1971 m
+(options)s
+454(OVERRULE,)ms
+746(SEPARATOR)ms
+1050(and)ms
+1135(TRAILER.)ms
+12 FCB
+295 1818 m
+(7.3 Multiple option)s
+12 FA
+295 1731 m
+(A)s
+343(slot)ms
+427(with)ms
+529(the)ms
+602("MULTIPLE")ms
+902(option)ms
+1042(raises)ms
+1169(an)ms
+1228(error)ms
+1338(if)ms
+1380(no)ms
+1443(stubs)ms
+1558(are)ms
+1631(found)ms
+1760(matching)ms
+1959(the)ms
+2032(slot.)ms
+2129(To)ms
+295 1671 m
+(prevent)s
+457(this)ms
+542(error)ms
+651(message)ms
+833(one)ms
+918(should)ms
+1064(specify)ms
+1221(the)ms
+1294(option)ms
+1435("OPTIONAL")ms
+1738(also)ms
+1831(for)ms
+1902(the)ms
+1975(slot.)ms
+12 FCB
+295 1518 m
+(7.4 Report file option NONE)s
+12 FA
+295 1431 m
+(This)s
+395(option)ms
+535(to)ms
+586(suppress)ms
+770(the)ms
+842(printing)ms
+1013(of)ms
+1066(reports)ms
+1217(to)ms
+1267(the)ms
+1340(terminal)ms
+1519(has)ms
+1597(not)ms
+1673(been)ms
+1779(implemented.)ms
+2064(It)ms
+2107(will)ms
+295 1371 m
+(be)s
+354(eliminated)ms
+578(in)ms
+629(some)ms
+747(later)ms
+849(version.)ms
+12 FCB
+295 1218 m
+(7.5 Generating target modules)s
+12 FAB
+295 1101 m
+(7.5.1 Specification)s
+12 FA
+295 1011 m
+(If)s
+339(CLIP.INI)ms
+541(specifies)ms
+728(a)ms
+761(target)ms
+887(module)ms
+1048(that)ms
+1135(matches)ms
+1310(no)ms
+1372(file-option)ms
+1594(argument)ms
+1794(anywhere)ms
+2000(in)ms
+2051(the)ms
+2123(list)ms
+295 951 m
+(of)s
+345(specified)ms
+534(source)ms
+672(files,)ms
+779(CLiP)ms
+893(does)ms
+994(not)ms
+1066(complain.)ms
+1273(The)ms
+1359(matching)ms
+1554(is)ms
+1595(case)ms
+1690(sensitive)ms
+1873(and)ms
+1954(for)ms
+2021(instance)ms
+295 891 m
+(a)s
+329(file-option)ms
+553(argument)ms
+10 FH
+545 810 m
+(\(********** #file "EXAMPLE.PAS" ***********************\))s
+12 FA
+295 726 m
+(does)s
+399(not)ms
+475(fit)ms
+532(a)ms
+567(module)ms
+729(specification)ms
+997(in)ms
+1049(CLIP.INI)ms
+1251(of)ms
+1306(the)ms
+1379(form)ms
+10 FH
+545 645 m
+(Example.PAS)s
+12 FA
+295 561 m
+(This)s
+396(may)ms
+495(lead)ms
+590(to)ms
+642(unpleasant)ms
+868(surprises.)ms
+389 501 m
+(On)s
+464(MS-DOS)ms
+668(and)ms
+755(VAX/VMS)ms
+1000(platforms)ms
+1206(the)ms
+1282(specification)ms
+1552(of)ms
+1608(files)ms
+1709(is)ms
+1757(not)ms
+1835(context)ms
+1997(sensitive.)ms
+295 441 m
+(For)s
+371(this)ms
+450(reason)ms
+588(the)ms
+656(CLIP_1)ms
+821(program)ms
+998(\(which)ms
+1144(is)ms
+1184(available)ms
+1372(for)ms
+1437(the)ms
+1505(MS-DOS)ms
+1701(and)ms
+1780(VAX/VMS)ms
+2018(versions)ms
+295 381 m
+(of)s
+355(CLiP\))ms
+496(converts)ms
+684(those)ms
+808(names)ms
+955(to)ms
+1012(upper)ms
+1145(case)ms
+1250(in)ms
+1307(the)ms
+1387(INI-file)ms
+1558(it)ms
+1605(creates.)ms
+1775(Thus)ms
+1894(the)ms
+1973(file-option)ms
+8 FA
+295 254 m
+(CLiP)s
+373(provisional)ms
+532(user)ms
+595(manual)ms
+702(\(version)ms
+819(2.100\))ms
+endpage
+%%Page: 15 16
+begpage
+10 FCB
+295 3182 m
+(16)s
+10 FC
+460 3182 m
+(Bugs, work-arounds and undocumented features)s
+12 FA
+295 3011 m
+(arguments)s
+515(in)ms
+567(the)ms
+640(source)ms
+783(files)ms
+882(should)ms
+1028(definitely)ms
+1232(be)ms
+1292(specified)ms
+1485(in)ms
+1536(upper)ms
+1662(case)ms
+1761(too.)ms
+389 2951 m
+(In)s
+441(a)ms
+475(Unix)ms
+586(environment)ms
+850(a)ms
+884(file)ms
+962(name)ms
+1082(is)ms
+1126(case)ms
+1224(sensitive)ms
+1410(indeed.)ms
+1567(Currently)ms
+1770(no)ms
+1831(CLIP_1)ms
+2001(exists)ms
+2126(for)ms
+295 2891 m
+(Unix)s
+410(and)ms
+498(an)ms
+561(INI-file)ms
+730(has)ms
+812(to)ms
+867(be)ms
+930(created)ms
+1090(by)ms
+1156(means)ms
+1299(of)ms
+1357(the)ms
+1434(short-cut)ms
+1627(routine)ms
+1784(CLP)ms
+1892(\(or)ms
+1966(directly)ms
+2135(by)ms
+295 2831 m
+(means)s
+434(of)ms
+488(an)ms
+548(editor,)ms
+689(cf.)ms
+752(section 6\).)ms
+973(No)ms
+1046(conversion)ms
+1278(is)ms
+1323(performed)ms
+1544(in)ms
+1595(this)ms
+1679(case)ms
+1777(and)ms
+1862(one)ms
+1946(has)ms
+2025(to)ms
+2076(make)ms
+295 2771 m
+(sure)s
+390(the)ms
+464(file-option)ms
+688(argument)ms
+889(is)ms
+935(identical)ms
+1119(to)ms
+1171(the)ms
+1244(corresponding)ms
+1543(name)ms
+1664(in)ms
+1715(the)ms
+1789(INI-file.)ms
+12 FAB
+295 2621 m
+(7.5.2 Omitted modules)s
+12 FA
+295 2531 m
+(If)s
+340(modules)ms
+521(are)ms
+593(specified)ms
+786(for)ms
+856(being)ms
+978(OMITTED)ms
+1215(at)ms
+1263(extraction)ms
+1475(time,)ms
+1588(it)ms
+1627(will)ms
+1717(be)ms
+1776(omitted)ms
+1940(independent)ms
+295 2471 m
+(of)s
+349(the)ms
+422(path)ms
+521(that)ms
+608(may)ms
+707(have)ms
+814(been)ms
+921(specified.)ms
+1126(The)ms
+1217(module)ms
+1379(will)ms
+1469(never)ms
+1593(be)ms
+1653(generated.)ms
+12 FAB
+295 2321 m
+(7.5.3 Empty run)s
+12 FA
+295 2231 m
+(CLiP)s
+415(does)ms
+521(not)ms
+600(always)ms
+754(recognize)ms
+963(a)ms
+1000(corrupted)ms
+1206(INI-file.)ms
+1386(Thus)ms
+1501(if)ms
+1546(you)ms
+1636(run)ms
+1717(CLiP)ms
+1838(and)ms
+1925(it)ms
+1967(produces)ms
+2162(a)ms
+295 2171 m
+(report)s
+426(of)ms
+481(the)ms
+554(form)ms
+10 FH
+345 2090 m
+(============================ CLiP version 2.1 ==========================)s
+345 2006 m
+(============================ Busy scanning =============================)s
+345 1965 m
+(Scanning file: ..................)s
+345 1923 m
+(.................................)s
+345 1840 m
+(============================ End scanning ==============================)s
+345 1756 m
+(============================ Busy analysing ============================)s
+345 1673 m
+(============================ End analysing =============================)s
+345 1590 m
+(============================ Busy generating ===========================)s
+345 1506 m
+(============================ End generating ============================)s
+345 1465 m
+(Used \(CPU\) time :5.88 Sec.)s
+345 1423 m
+(See you next time !)s
+12 FA
+295 1339 m
+(then)s
+397(you)ms
+489(start)ms
+591(checking)ms
+788(the)ms
+866(specifications)ms
+1157(of)ms
+1215(the)ms
+1293(target)ms
+1423(modules,)ms
+1622(since)ms
+1741(this)ms
+1830(is)ms
+1879(the)ms
+1957(most)ms
+2071(likely)ms
+295 1279 m
+(source)s
+437(of)ms
+490(trouble.)ms
+655(Keep)ms
+772(in)ms
+823(mind)ms
+937(however,)ms
+1133(that)ms
+1220(the)ms
+1292(problem)ms
+1471(may)ms
+1568(be)ms
+1627(also)ms
+1719(arise)ms
+1825(due)ms
+1909(to)ms
+1959(a)ms
+1993(corrupted)ms
+295 1219 m
+(INI-file.)s
+12 FCB
+295 1066 m
+(7.6 Lost lines)s
+12 FA
+295 979 m
+(If)s
+340(you)ms
+428(have)ms
+535(stubs)ms
+650(of)ms
+704(the)ms
+778(form)ms
+10 FH
+345 898 m
+(\(****************** GEN_POOL global routines ********************\))s
+345 856 m
+(\(******************************************************************\))s
+345 815 m
+(\(* routine: write_string .... *\))s
+345 773 m
+(\(* ................... *\))s
+345 731 m
+(\(******************************************************************\))s
+12 FA
+295 648 m
+(you)s
+385(will)ms
+479(see)ms
+559(that)ms
+650(the)ms
+727(second)ms
+881(line)ms
+972(of)ms
+1030(the)ms
+1107(stub)ms
+1206(\(the)ms
+1299("starred")ms
+1492(line\))ms
+1600(is)ms
+1649(not)ms
+1729(generated)ms
+1939(in)ms
+1994(the)ms
+2071(target)ms
+295 588 m
+(modules.)s
+488(For)ms
+569(this)ms
+652(reason)ms
+794(it)ms
+833(is)ms
+878(better)ms
+1003(to)ms
+1053(put)ms
+1129(an)ms
+1187(additional)ms
+1399(empty)ms
+1535(line)ms
+1621(in)ms
+1671(between.)ms
+1862(For)ms
+1943(example)ms
+2123(the)ms
+295 528 m
+(following)s
+501(stub)ms
+597(will)ms
+688(be)ms
+747(extracted)ms
+943(correctly.)ms
+8 FA
+295 254 m
+(CLiP)s
+373(provisional)ms
+532(user)ms
+595(manual)ms
+702(\(version)ms
+819(2.100\))ms
+endpage
+%%Page: 16 17
+begpage
+10 FC
+1736 3182 m
+(8 References)s
+10 FCB
+2138 3182 m
+(17)s
+10 FH
+345 3020 m
+(\(****************** GEN_POOL global routines ********************\))s
+345 2936 m
+(\(******************************************************************\))s
+345 2895 m
+(\(* routine: write_string .... *\))s
+345 2853 m
+(\(* ................... *\))s
+345 2811 m
+(\(******************************************************************\))s
+12 FCB
+295 2674 m
+(7.7 DOS version only)s
+12 FA
+295 2588 m
+(If)s
+344(you)ms
+435(activate)ms
+607(the)ms
+685(PROJECT/Load)ms
+1029(INI-file)ms
+1198(or)ms
+1256(PROJECT/Save)ms
+1594(INI-file)ms
+1763(menu)ms
+1891(of)ms
+1949(the)ms
+2026(CLIP_1)ms
+295 2528 m
+(program)s
+481(and)ms
+569(you)ms
+661(specify)ms
+822(an)ms
+886(illegal)ms
+1028(drive)ms
+1147(in)ms
+1203(the)ms
+1280(Current)ms
+1450(Directory)ms
+1658(option,)ms
+1815(you)ms
+1907(may)ms
+2009(hang)ms
+2123(the)ms
+295 2468 m
+(system.)s
+458(For)ms
+540(instance)ms
+717(a)ms
+751(drive)ms
+867(specification)ms
+1135(preceeded)ms
+1350(by)ms
+1412(a)ms
+1447(space)ms
+1571(will)ms
+1661(produce)ms
+1834(this)ms
+1919(bug.)ms
+14 FCB
+295 2308 m
+(8 References)s
+12 FA
+295 2213 m
+(Ammers)s
+480(E.W.)ms
+596(van,)ms
+693(M.R.)ms
+809(Kramer)ms
+975(\(1993\),)ms
+1134(The)ms
+1225(CLiP)ms
+1343(Style)ms
+1459(of)ms
+1514(Literate)ms
+1683(Programming)ms
+1971(\(submitted)ms
+389 2153 m
+(for)s
+467(publication\).)ms
+742(Anonymously)ms
+1046(ftp-able)ms
+1222(as)ms
+1284(CLIP_STYLE.PS,)ms
+1674(CLIP_STYLE_A.PS)ms
+2112(and)ms
+389 2093 m
+(CLIP_STYLE_B.PS)s
+816(from)ms
+926(directory)ms
+1119(CLIP)ms
+1240(on)ms
+1302(sun01.info.wau.nl.)ms
+295 2003 m
+(Ammers)s
+475(E.W.)ms
+587(van,)ms
+680(Kramer)ms
+842(M.R.)ms
+953(\(1992\),)ms
+1108(VAMP:)ms
+1275(A)ms
+1319(Tool)ms
+1423(for)ms
+1490(Literate)ms
+1654(Programming)ms
+1937(Independent)ms
+389 1943 m
+(of)s
+441(Programming)ms
+728(Language)ms
+936(and)ms
+1020(Formatter.)ms
+1241(CompEuro '92)ms
+1551(Proceedings,)ms
+1819(May)ms
+1922(4-8)ms
+2000(1992,)ms
+2123(the)ms
+389 1883 m
+(Hague,)s
+544(pg.)ms
+619(371-376.)ms
+295 1793 m
+(Knuth)s
+432(D.E.)ms
+536(\(1984\).)ms
+694(Literate)ms
+862(Programming.)ms
+1162(The)ms
+1253(Computer)ms
+1465(Journal)ms
+1625(27,)ms
+1700(2,)ms
+1750(97-111.)ms
+8 FA
+295 254 m
+(CLiP)s
+373(provisional)ms
+532(user)ms
+595(manual)ms
+702(\(version)ms
+819(2.100\))ms
+endpage
+%%Page: Contents-0 18
+begpage
+12 FAB
+1049 3019 m
+(Table of Contents)s
+12 FA
+295 2919 m
+(CLiP - )s
+12 FAI
+(C)s
+12 FA
+( ode from )s
+12 FAI
+(Li)s
+12 FA
+( terate )s
+12 FAI
+(P)s
+12 FA
+( rograms Provisional User Manual )s
+1596(................................)ms
+2019 2919 m
+(1)s
+295 2819 m
+(1 Introduction )s
+608(...............................................................................................................)ms
+2019 2819 m
+(1)s
+295 2719 m
+(2 Syntax \(programming style\) )s
+933(.....................................................................................)ms
+2019 2719 m
+(2)s
+365 2669 m
+(2.1 Stub blocks and documentation blocks )s
+1245(............................................................)ms
+2019 2669 m
+(3)s
+365 2619 m
+(2.2 Segments )s
+670(..........................................................................................................)ms
+2019 2619 m
+(3)s
+365 2569 m
+(2.3 Options )s
+632(.............................................................................................................)ms
+2019 2569 m
+(3)s
+295 2469 m
+(3 Examples )s
+558(...................................................................................................................)ms
+2019 2469 m
+(4)s
+365 2419 m
+(3.1 Example 1: Defining a module )s
+1082(.........................................................................)ms
+2019 2419 m
+(4)s
+365 2369 m
+(3.2 Example 2: Multiple slots )s
+995(................................................................................)ms
+2019 2369 m
+(5)s
+365 2319 m
+(3.3 Example 3: Quick stubs and abstract data types )s
+1420(..............................................)ms
+2019 2319 m
+(6)s
+365 2269 m
+(3.4 Example 4: An ordinary refinement step )s
+1282(.........................................................)ms
+2019 2269 m
+(7)s
+365 2219 m
+(3.5 Example 5: A subroutine module )s
+1132(.....................................................................)ms
+2019 2219 m
+(9)s
+295 2119 m
+(4 Semantics of options )s
+783(.................................................................................................)ms
+2019 2119 m
+(11)s
+295 2019 m
+(5 Using CLiP )s
+596(................................................................................................................)ms
+2019 2019 m
+(12)s
+295 1919 m
+(6 The structure of an INI-file )s
+908(.......................................................................................)ms
+2019 1919 m
+(13)s
+295 1819 m
+(7 Bugs, work-arounds and undocumented features )s
+1333(.....................................................)ms
+2019 1819 m
+(15)s
+365 1769 m
+(7.1 "SP_EXTR_STR: system failure .... call maintenance" )s
+1570(..................................)ms
+2019 1769 m
+(15)s
+365 1719 m
+(7.2 Options in general )s
+845(............................................................................................)ms
+2019 1719 m
+(15)s
+365 1669 m
+(7.3 Multiple option )s
+782(.................................................................................................)ms
+2019 1669 m
+(15)s
+365 1619 m
+(7.4 Report file option NONE )s
+982(.................................................................................)ms
+2019 1619 m
+(15)s
+365 1569 m
+(7.5 Generating target modules )s
+1007(...............................................................................)ms
+2019 1569 m
+(15)s
+436 1519 m
+(7.5.1 Specification )s
+845(............................................................................................)ms
+2019 1519 m
+(15)s
+436 1469 m
+(7.5.2 Omitted modules )s
+920(......................................................................................)ms
+2019 1469 m
+(16)s
+436 1419 m
+(7.5.3 Empty run )s
+795(................................................................................................)ms
+2019 1419 m
+(16)s
+365 1369 m
+(7.6 Lost lines )s
+670(..........................................................................................................)ms
+2019 1369 m
+(16)s
+365 1319 m
+(7.7 DOS version only )s
+832(.............................................................................................)ms
+2019 1319 m
+(17)s
+295 1219 m
+(8 References )s
+583(.................................................................................................................)ms
+2019 1219 m
+(17)s
+8 FA
+295 254 m
+(CLiP)s
+373(provisional)ms
+532(user)ms
+595(manual)ms
+702(\(version)ms
+819(2.100\))ms
+endpage
+%%Trailer
+enddocument
+%%Pages: 18
+%%DocumentFonts:
+%%+ Times-Roman
+%%+ Times-Italic
+%%+ Times-Bold
+%%+ Times-BoldItalic
+%%+ Helvetica
+%%+ Helvetica-Bold
+%%+ Helvetica-BoldOblique
+%%+ Courier
+%%EOF
+ \ No newline at end of file
diff --git a/web/clip/unix/manual.txt b/web/clip/unix/manual.txt
new file mode 100644
index 0000000000..b7e319fd8f
--- /dev/null
+++ b/web/clip/unix/manual.txt
@@ -0,0 +1,854 @@
+
+
+
+ CLiP - C ode from Li terate P rograms
+ *************************************
+
+ Provisional User Manual
+
+
+
+Disclaimer:
+ This document is meant for programmers who are already familiar with the
+literate programming paradigm. It pretends in no way to be a complete user
+manual in the real meaning of the word. But the document should supply
+sufficient hints to experiment successfully with the CLiP system.
+ You are assumed to be familiar with the ideas and design goals of the CLiP
+system as explained in [Ammers and Kramer 1993]. Also you should have read *
+READ_ME.TXT* or *READ_ME.PS* which come with the executables and understand the
+meaning of the INI-file which guides the extraction process.
+ The DOS and VMS versions of CLiP consist of two independent programs,
+CLIP_1 and CLIP_2. CLIP_1 is purely to create an INI-file for CLIP_2, which
+performs the actual work. The Unix version consists of only one program, CLIP
+(which is identical to CLIP_2), and an INI-file should be made using the
+supplied scripts or an editor. This manual only deals with the second program.
+
+
+
+ Table of Contents
+
+1 Introduction 1
+
+2 Syntax (programming style) 2
+ 2.1 Stub blocks and documentation blocks 3
+ 2.2 Segments 3
+ 2.3 Options 3
+3 Examples 4
+ 3.1 Example 1: Defining a module 4
+ 3.2 Example 2: Multiple slots 5
+ 3.3 Example 3: Quick stubs and abstract data types 6
+ 3.4 Example 4: An ordinary refinement step 7
+ 3.5 Example 5: A subroutine module 9
+4 Semantics of options 11
+
+5 Using CLiP 12
+
+6 The structure of an INI-file 13
+
+7 Bugs, work-arounds and undocumented features 15
+ 7.1 "SP_EXTR_STR: system failure .... call maintenance" 15
+ 7.2 Options in general 15
+ 7.3 Multiple option 15
+ 7.4 Report file option NONE 15
+ 7.5 Generating target modules 15
+ 7.5.1 Specification 15
+ 7.5.2 Omitted modules 16
+ 7.5.3 Empty run 16
+ 7.6 Lost lines 16
+ 7.7 DOS version only 17
+8 References 17
+
+
+1 Introduction
+
+In short the idea behind CLiP is to define a style of programming sufficiently
+formal to be recognized by a literate programming automaton. This syntax (which
+we will refer to as the CLiP-syntax) should not obstruct a natural way of
+programming. Ideally the system should be smart enough to "see" stubs, slots
+and the like by "inspecting" the documentation and simply "understanding" the
+refinements the programmer has made. Alas, this is far beyond the current
+potential of artificial intelligence and we will have to reach the automaton a
+helping hand by defining a special syntax.
+ So we want the "look and feel" of a documentation to be as "natural" as
+possible, but with CLiP features that can be recognized by an automaton. On the
+other hand should the reader be burdened as little as possible with the fact
+that additional processing is needed to extract the modules. In systems like
+VAMP [Ammers 1984] and WEB [Knuth 1984] - which use batch formatters - this is
+achieved by adding explicit commands in the source-files that are suppressed in
+the formatted documentation. But this technique does not work if the
+documentation environment is an interactive word-processor (Word Perfect, Lotus
+Manuscript, MS-Word, Ami Pro, etc.). So CLiP uses either the ASCII-export from
+a word-processors or the ASCII input of a formatter and extracts modules from
+there. In these files CLiP recognizes the important sections by a particular
+programming-style rather than by explicit commands.
+ The first section describes the syntax that CLiP "sees". The next section
+gives a couple of useful examples. In section 4 we describe the options that
+may be used to customize the process of module generation. In section 5 we give
+some hints on how to organize your working with CLiP efficiently. Stubs and
+slots my remaining sections illustrate the style of documentation and programs
+that would result. CLiP is in development and we compile the known bugs in
+section 6.
+
+2 Syntax (programming style)
+
+CLiP-lines [-] that is lines which have a special meaning to CLiP [-] start
+with a CLIP-left-parenthesis (CLIP-lpar) and end with a CLIP-right-parenthesis
+(CLIP-rpar). Both tokens are constructed as extensions of the tokens
+encapsulating comments which we will refer to as *COMM-START* and *COMM-END*.
+If we program in Pascal then everything between "*(**" and "**)*" is seen as
+comment, thus we have the convention:
+
+ *COMM-START* = "*(**"
+ *COMM-END* = "**)*"
+
+Extension of the comment token is by a character with a special meaning to
+clip, the *CLIP-CHAR*. In our case we assume
+
+ *CLIP-CHAR* = "***"
+
+Thus CLiP-lines are enclosed by
+
+ CLIP-lpar of the form "*(***"
+
+and
+
+ CLIP-rpar of the form "***)*"
+
+The parameters *COMM-START*, *COMM-END* and *CLIP-CHAR* are set by the INI-file
+and it is evident that the convention can be adjusted.
+
+
+ CLiP distinguishes six source line categories:
+
+ 1 (******************* <arbitrary string> **********************)
+ 2 (**************** End of <arbitrary string> ******************)
+ 3 (** <arbitrary string> **)
+ 4 (***************************************************************)
+ 5 <the empty string>
+ 6 <any string not falling in one of the above categories>
+
+We will refer to a line from the second category as an "L2" and so on and
+investigate the meaning is of the various categories for CLiP.
+ The string "*End of*" of an L2 has a special meaning that distinguishes an
+L2 from an L1. Again this special string is defined by a parameter in the
+INI-file
+
+ *END-STRING* = "*ENDOF*"
+
+Observe that CLiP does not distinguish between upper and lower case and forgets
+about spaces. In fact CLiP reduces the <arbitrary string> internally to a
+sequence of the characters "*A*"-"*Z*", "*0*"-"*9*" and "*.*"
+ Note that for an L3 the character immediately following the *CLIP-CHAR* on
+the left side and the character preceding the *CLIP-CHAR* on the right side may
+be anything apart from the *CLIP-CHAR* itself.
+
+2.1 Stub blocks and documentation blocks
+
+From CLiP's point of view the source-files are divided in documentation blocks
+and stub-blocks. A stub-block starts with an L1 and usually ends with an L2. A
+special kind of stub, a so called quick stub (see sect. 3.3 and 4), is ended by
+an L5 or an <EOF>. Everything outside a stub-block is a documentation block and
+ignored by CLiP. For this reason we say that CLiP is in active mode during the
+processing of a stub-block and in passive mode otherwise. The only way to
+change CLiP from passive to active mode is by an L1 and the usual way from
+active to passive is through an L2. An L2 in passive mode is presumably an
+error and will be ignored.
+
+2.2 Segments
+
+A stub-block contains one and only one stub-segment, which starts the
+stub-block. The stub-segment may be followed by any number of slot-segments
+and/or code-segments.
+ An L1 always starts a new stub- or slot-segment and the segment continues
+with any number of lines of type L3 or L4. A segment is a slot-segment if and
+only if it is not the first one of a stub-block. A code-segment consists of any
+number of contiguous lines of type L5. Stub- and slot-segments have an
+identification or name which is constructed somehow from the *<arbitrary string>
+*s inside the segment.
+ L3 and L4 are continuations of stub- and slot-segments, but with a slightly
+different status. An L3 that cannot be pasted to a segment is flagged as an
+error. But an L4 under the same conditions is interpreted as belonging to the
+current code-segment.
+
+2.3 Options
+
+The module extraction process can be tuned by means of options. Stub-segments
+as well as slot-segments may have options. An option starts with a keyword
+signalled by a special *OPTION-MARKER*. The option keyword may be abbreviated
+to a unique headerstring for that option. We will assume "*#*" for *
+OPTION-MARKER*, but of course this again is a parameter set by the INI-file.
+
+
+The argument(s) following an option continue till the next option-keyword or
+till the end of the segment. Therefore the name of a segment must precede the
+options.
+ In general options operate on the inside of the stub only, since that is
+the part of the program that the programmer of this particular refinement has
+in his or her mind. In addition options can be inherited. The meaning of the
+various options is explained in section 4. Some frequently used options show up
+in the examples of section 3.
+
+
+3 Examples
+
+In the examples we will illustrate the most important features of CLiP by
+making remarks on excerpts drawn from the documentation of CLiPs predecessor,
+VAMP.
+
+3.1 Example 1: Defining a module
+
+ The module VAMP:
+ Starting from nowhere, the empty program will do.
+
+
+ 1 (**** #File "VAMP.PAS". #Indent on. ****)
+ 2
+ 3 (***************************************************************)
+ 4 (* Routine: VAMP - Main module of the VAMP system. *)
+ 5 (* Purpose: Main module and unique entry point to the *)
+ 6 (* VAMP-system. *)
+ 7 (* Interface: TTY - All communication with the user *)
+ 8 (* proceeds via the terminal. *)
+ 9 (* Author/Date: VAMP project management, Sept. 12, 1983. *)
+ 10 (***************************************************************)
+ 11
+ 12 (********************** VAMP (body) **************************)
+ 13
+ 14 (*********************** End of VAMP *************************)
+ 15
+ 16
+ 18 (********* VAMP (body) #def ***********)
+ 19 PROGRAM VAMP (INPUT, OUTPUT);
+ 20 BEGIN
+ 21 WRITELN ('!!! VAMP was here !!!');
+ 22 END (*VAMP*).
+ 23 (********** End of VAMP (body) *********)
+
+Remarks:
+ There are two stubs in this section. Line 1-14 and line 18-23. Both
+stub-blocks have a stub-segment of one line only (lines 1 and 18 respectively).
+ The first stub-segment has no identification. It specifies the start of a
+new output module by the FILE option and thus is not meant to be referenced
+(see also example 5).
+ Line 2 (an L5) separates line 3 (an L4) from the stub-segment and makes it
+belong to the code-segment which expands over lines 2-11.
+ There resides only one slot inside the first stub (line 12) and this slot
+is identified as "*VAMPBODY*". The second stub has no slots at all.
+ Line 13 is a trivial code-segment and line 14 marks the end of the first
+stub-block. The string following the "End of" is optional and does not have to
+match the stub name in any way.
+
+
+3.2 Example 2: Multiple slots
+
+ Environment module:
+ In the past there have been made several changes in the VAMP
+ program. These changes have been made in the extracted modules rather
+ then in the VAMP source. To make source files consistent with the
+ modules, the source files have been updated in march 1990 by Jeroen
+ Reef.
+
+ Furthermore, the updated source files contain two additional
+ modules, VAMP.MSG and DECLAR_MOD. The module VAMP.MSG contains the error
+ messages of VAMP and the module DECLAR_MOD contains the types and
+ constants used by several modules of VAMP. This module uses the
+ ENVIRONMENT, which directs the compiler to generate an environment file
+ DECLAR.PEN. Other modules can reference the identifiers declared in
+ DECLAR_MOD by inheriting the environment with the INHERIT attribute.
+
+
+
+ 1 (****** #File "DECLAR_MOD.PAS". #Indent ON. ******)
+ 2
+ 3 (***************************************************************)
+ 4 (* Module to contain all parameters and global declarations *)
+ 5 (* of the VAMP system. *)
+ 6 (***************************************************************)
+ 7 [ENVIRONMENT ('DECLAR.PEN')] MODULE DECLARS;
+ 8
+ 9 (********** Parameters of the VAMP-system (#mul) *************)
+ 10
+ 11 TYPE
+ 12 ABSTRACT = (DEFINED, UNDEFINED);
+ 13 (********* Simple types of the VAMP-system (#mul) ********)
+ 14 (******** Structured types of the VAMP-system (#mul) ******)
+ 15 END.
+ 16 (***************** End of DECLARE_MOD.PAS ********************)
+
+Remarks:
+ The stub-block extends over 16 lines. Line 1 is the stub-segment and line
+16 closes the stub-block. Lines 2-8 constitute the first code-segment of the
+stub, lines 10-12 the middle one and line 15 the last one.
+ There are three slots (or slot-segments), lines 9, 13 and 14. All slots
+consist of one line only and carry the multiple option. For instance the first
+slot can swallow any number of parameter definition that might turn up in the
+future.
+ The names (identifications) of the slots are respectively
+
+ "*PARAMETERSOFTHEVAMPSYSTEM*"
+ "*SIMPLETYPESOFTHEVAMPSYSTEM*"
+ "*STRUCTUREDTYPESOFTHEVAMPSYSTEM*"
+
+
+3.3 Example 3: Quick stubs and abstract data types
+
+ First level data structures:
+ This level introduces the data-structure TTY_INFO, containing the
+ initial communication between the terminal and the program. The
+ definition requires in addition four system parameters and some
+ constants and types which are related to file specifications. The
+ structure of CODE_INFO is left open for the time being.
+
+
+ 1 (********** Parameters of the VAMP-system (#quick) ***********)
+ 2 (* -------- Parameters of TTY_INFO --------- *)
+ 3 MAX_FILE_SPEC_L = 255; (* Maximum length file-specific. *)
+ 4 MAX_FILE_NAME_L = 39; (* Maximum length file-name. *)
+ 5 MAX_FILE_EXT_L = 39; (* Maximum length file-extension. *)
+ 6 MAX_IN_FILES = 8; (* Maximum number of in-files for *)
+ 7 (* a single run. *)
+ 8 UPB_IN_FILES = 9; (* = MAX_IN_FILES + 1. *)
+ 9 MAX_MODULES = 10; (* Maximum number of modules *)
+ 10 (* specified for a run. *)
+ 11 UPB_MODULES = 11; (* = MAX_MODULES + 1. *)
+ 12 EMPTY = '';
+ 13
+ 14 (********* Simple types of the VAMP-system (#quick) **********)
+ 15 (* -------- Simple types of TTY_INFO --------- *)
+ 16 FILE_SPEC = VARYING [MAX_FILE_SPEC_L] OF CHAR;
+ 17 FILE_NAME = VARYING [MAX_FILE_NAME_L] OF CHAR;
+ 18 FILE_EXT = VARYING [MAX_FILE_EXT_L] OF CHAR;
+ 19
+ 20 (******** Structured types of the VAMP-system ****************)
+ 21 (* -------- Structured types of TTY_INFO --------- *)
+ 22 TTY_INFO = RECORD
+ 23 IN_FILES: ARRAY [1..UPB_IN_FILES] OF FILE_SPEC;
+ 24 MODULES: ARRAY [1..UPB_MODULES] OF FILE_NAME;
+ 25 DFLT_EXT: FILE_EXT;
+ 26 INV_MODE,
+ 27 GO: BOOLEAN;
+ 29 END (*RECORD*);
+ 30 (**************** Declaration of CODE_INFO *******************)
+ 31 (******** End of Structured types of the VAMP-system *********)
+ 32
+ 33
+ 34 (************* Declaration of CODE_INFO (#def) ***************)
+ 35 CODE_INFO = ABSTRACT;
+ 36 (******************** End of declaration *********************)
+
+Remarks:
+ This section contains five stubs altogether, i.e. lines 1-12, 14-18, 20-31
+and 34-36. The first two blocks one have no internal slots. The quick option
+promotes them to quick stubs, which means that they are completed by the first
+line that is not an L6.
+ The third stub (20-31) illustrates how an abstract data type can be
+implemented. The stub is an ordinary one with one slot - identified as "*
+DECLARATIONOFCODEINFO*" - at line 30. The slot is by default satisfied with the
+stub at lines 34-36. But this declaration will be replaced by a new one at some
+time in the future.
+
+
+3.4 Example 4: An ordinary refinement step
+
+ Body of VAMP:
+ The input-files will be processed sequentially in the same order as
+ given by the user. The intermediate file "VAMP.TMP" is guarded by a
+ sentinel to simplify backspacing later on and it needs an additional
+ global declaration.
+
+
+ 1 (*********** Simple types of the VAMP-system ************)
+ 2 FTYPE = FILE OF CHAR;
+ 3 (****************** End of declaration ******************)
+
+
+ Now the body of VAMP expands to
+
+ 4 (********************** VAMP (body) **************************)
+ 5 [INHERIT ('SYS$LIBRARY:STARLET.PEN', 'DECLAR.PEN')]
+ 6 PROGRAM VAMP (INPUT, OUTPUT);
+ 7
+ 8 (***************** Constants of VAMP (#mult) *****************)
+ 9 (***************** Types of VAMP (#mult) *********************)
+ 10 VAR
+ 11 FILE_CNT: 1..UPB_IN_FILES;
+ 12 CURR_IN_FILE: TEXT; (* Currently read file. *)
+ 13 CODE_LINES: FTYPE; (* From input extracted code. *)
+ 14 TTY_DATA: TTY_INFO;
+ 15 CODE_STRUCT: CODE_INFO;
+ 16 (************ Variables of VAMP (#mult) ******************)
+ 17
+ 18 [EXTERNAL] PROCEDURE ASKTTY (VAR TTY_DATA: TTY_INFO); EXTERN;
+ 19 (*************** Functions of VAMP (#mult) *******************)
+ 20
+ 21 BEGIN
+ 22 (* Take the data, that are needed for this VAMP run from *)
+ 23 (* the terminal. *)
+ 24 ASKTTY (TTY_DATA);
+ 25 WITH TTY_DATA DO
+ 26 IF GO THEN
+ 27 BEGIN
+ 28 (********************* VAMP (C) **********************)
+ 29 (** Initialize CODE_STRUCT. **)
+ 30 (*******************************************************)
+ 31
+ 32 OPEN (CODE_LINES, FILE_NAME :='VAMP.TMP',
+ 33 ORGANIZATION := RELATIVE, ACCESS_METHOD := DIRECT,
+ 34 DISPOSITION := DELETE);
+ 35 REWRITE (CODE_LINES);
+ 36 FILE_CNT := 1;
+ 37 WHILE (IN_FILES [FILE_CNT] <> EMPTY) DO
+ 38 BEGIN
+ 39 WRITELN ('Proceeding on file ',IN_FILES [FILE_CNT]);
+ 40 OPEN (CURR_IN_FILE, FILE_NAME := IN_FILES [FILE_CNT],
+ 41 HISTORY := READONLY);
+ 42 RESET (CURR_IN_FILE);
+ 43 PUT (CODE_LINES); (* Start file with a sentinel. *)
+ 44
+
+
+ 45 (****************** VAMP (A) *********************)
+ 46 (** Build CODE_STRUCT and fill CODE_LINES by a **)
+ 47 (** scan of CURR_IN_FILE, using the information **)
+ 48 (** of MODULES, DFLT_EXT and INV_MODE. **)
+ 49 (***************************************************)
+ 50
+ 51 CLOSE (CURR_IN_FILE);
+ 52 FILE_CNT := FILE_CNT + 1;
+ 53 END (*WHILE*);
+ 54
+ 55 (******************** VAMP (B) ***********************)
+ 56 (** Generate the files as specified by CODE_STRUCT **)
+ 57 (** from the data contained by CODE_LINES. **)
+ 58 (*******************************************************)
+ 59
+ 60 (* Close and Delete scratch-file CODE_LINES. *)
+ 61 CLOSE (CODE_LINES, DELETE);
+ 62 END
+ 63 ELSE
+ 64 WRITELN ('!!! You specified an empty run - try again !!!');
+ 65 END (*VAMP*).
+ 66 (******************* End of VAMP (body) **********************)
+ 67
+ 68
+ 69 (************ Constants of VAMP (#leader, #quick) ************)
+ 70 CONST
+ 71 (************ Types of VAMP (#leader, #quick) ****************)
+ 72 TYPE
+
+Remarks:
+ This refinement contains four stubs (lines 1-3, 4-66, 69-70 and 71-72). The
+second stub has seven slots (lines 8, 9, 16, 19, 28-30, 45-49 and 55-58). Lines
+22, 23 and 60 are simple code-lines from CLiPs point of view.
+ The leader option of the last two stubs defines the code that will be
+inserted in front of a stub that matches the slot.
+
+
+3.5 Example 5: A subroutine module
+
+ 1 (****** #File "ASKTTY.PAS" ******)
+ 2 [INHERIT ('DECLAR.PEN')] MODULE ASKTTY (INPUT, OUTPUT);
+ 3
+ 4 (*********** External procedures of ASKTTY (#mult) ************)
+ 5
+ 6 (***************************************************************)
+ 7 (* Routine: ASKTTY - ASK information from TTY. *)
+ 8 (* Purpose: To obtain from the TTY the information which *)
+ 9 (* is needed to perform a VAMP run. *)
+ 10 (* Interface: TTY_DATA - Data from TTY to VAMP. *)
+ 11 (* TTY - Source of all knowledge. *)
+ 12 (* Author/Date: VAMP project management, September 29, 1983. *)
+ 13 (***************************************************************)
+ 14 [GLOBAL] PROCEDURE ASKTTY (VAR TTY_DATA: TTY_INFO);
+ 15
+ 16 (************* Constants of ASKTTY (#multiple) ***************)
+ 17 (************* Types of ASKTTY (#multiple) *******************)
+ 18 (************* Variables of ASKTTY (#multiple) ***************)
+ 19 (************* Procedures of ASKTTY (#multiple) **************)
+ 20
+ 21 BEGIN
+ 22 WITH TTY_DATA DO
+ 23 BEGIN
+ 24 (******************** ASKTTY (1) *********************)
+ 25 (** Get IN_FILES from TTY. **)
+ 26 (*******************************************************)
+ 27
+ 28 GO := NOT (IN_FILES[1] = EMPTY);
+ 29 IF GO THEN
+ 30 BEGIN
+ 31 (**************** ASKTTY (2) *********************)
+ 32 (** Ask which modules must be generated by VAMP. **)
+ 33 (** Set INV_MODE, MODULES and GO accordingly. **)
+ 34 (***************************************************)
+ 35 END (*IF*);
+ 36 IF GO THEN
+ 37 BEGIN
+ 38 (**************** ASKTTY (3) *********************)
+ 39 (** Ask DFLT_EXT from the terminal. **)
+ 40 (***************************************************)
+ 41 END (*IF*);
+ 42 END (*WITH*);
+ 43 END (*ASKTTY*);
+ 44
+ 45 END (*MODULE*).
+ 46 (********************** End of MODULE ************************)
+ 47
+ 48
+ 49 (********** Constants of ASKTTY (#leader, #quick) ************)
+ 50 CONST
+
+
+ 51 (********** Types of ASKTTY (#leader, #quick) ****************)
+ 52 TYPE
+ 53 (********** Variables of ASKTTY (#leader, #quick) ************)
+ 54 VAR
+
+Remarks:
+ A clear cut example of a subroutine definition in VAX/VMS Pascal that is to
+be compiled independently. The refinement contains stubs at lines 1-46, 49-50,
+51-52 and 53-54. The last three stubs are all quick stubs.
+ The first stub is a main stub. It carries no identification and only
+specifies the name of the file that will finally hold the module. Had the
+file-option be omitted, this would have meant an error.
+ Lines 4, 16, 17, 18 and 19 are single-line slot for future declarations.
+The leader stubs at the end secure syntactic details. Lines 24-26, 31-34 and
+38-40 are ordinary slots again.
+
+
+4 Semantics of options
+
+#Comment (stub, slot)
+ The comment option transforms the special CLIP-characters to a predefined
+ format which suits a particular programming language. The option has an
+ obligatory argument, e.g. PASCAL, FORTRAN, C, ADA etc. or ON/OFF. The
+ ON/OFF argument specifies wether or not the slot- or stub-segment is to be
+ included upon substitution. Comment options can be nested and the most
+ local version controls the operation.
+
+#Default (stub)
+ A default stub is prefixed to exclusively substituted if no other stub is
+ found for that particular slot.
+
+#Indent (stub, slot)
+ The indent option controls the indentation of the generated listing. Indent
+ options can be nested and the most local option overrules the more global
+ ones. Indent has as one optional argument, ON or OFF.
+
+#File (stub)
+ The file option identifies the stub as a main stub (viz. the root of a new
+ module). The option carries a string in quotes as argument. This string
+ specifies the name of the file to be generated.
+
+#Leader (stub)
+ The leader stub is usually combined with multiple slots. It modifies the
+ environment of the stubs that will be substituted by inserting the leader
+ stub in front of the first encountered normal stub.
+
+#Multiple (slot)
+ A multiple slot accepts the substitution of any number of stubs.
+
+#Optional (slot)
+ An optional slot accepts the substitution of 0 or 1 stubs only.
+
+#Overrule (stub)
+ The overrule stub replaces the stub already substituted in a particular
+ position. It is mainly meant for testing purposes.
+
+#Quick (stub)
+ A quick stub is a stub without internal structure (viz. slots). Following
+ the stub segment only L6-type lines are allowed. Any other type of line
+ will end the stub.
+
+#Separator (stub)
+ A separator stub is to be inserted between two consecutive stubs of the
+ same slot.
+
+#Trailer (stub)
+ The trailer stub is the counterpart of the default stub. It modifies the
+ environment by adding the trailer stub after the last encountered normal
+ stub.
+
+
+5 Using CLiP
+
+The complete CLiP system for DOS and VMS consists of two independent programs,
+CLIP_1.EXE and CLIP_2.EXE. The Unix version has only one program, CLIP, which
+is functionally identical to CLIP_2. CLIP_1 prepares a file, CLIP.INI, telling
+CLIP_2 (the actual module extractor) literally everything it has to know in
+order to perform a run (a detailed description of the structure of an INI-file
+is in the next section). Thus CLIP.INI specifies to CLIP_2 (CLIP):
+ - the files it has to read (i.e. the source files),
+ - the modules it should extract (i.e. target modules),
+ - the name of the report file,
+ - the syntax of the CLiP-lines (i.e. the style of the lines that trigger
+ the module extraction process).
+CLIP_1 allows a very detailed specification of the extraction process, much
+more detailed than you will need in general. For this reason the CLiP system
+comes with a couple of routines to shortcut CLIP_1 and for Unix users these
+routines are the primary tool to construct their INI-file. For a description of
+these routines we refer to section "Using CLiP" of the READ_ME file of this
+release.
+ When using CLiP it is recommended to introduce at least the following
+directories:
+ - A directory for the source files CLiP will use. This directory also
+ holds the various INI-file you maintain to conduct the extraction
+ process.
+ - A directory to contain the extracted modules.
+ - A directory to contain the results of the compilation and linking of
+ the modules.
+ - In case CLiP is used in combination with a word-processor, it is wise
+ to keep the word-processor files again in a separate directory. In this
+ case the source file directory should be fed with ASCII exports from
+ word-processor files.
+
+
+6 The structure of an INI-file
+
+This section explains the structure of an INI-file by means of an example file.
+You should understand this structure thoroughly before your try to edit
+INI-files yourself directly through an editor [Ammers 1993].
+ The example is an INI-file for MS-DOS. The only difference with other
+platforms is the specification of directories. The numbers at the beginning of
+every line are added for convenience of reference. They are not part of the
+file itself.
+
+ <================= Example of an INI-file ====================>
+ 1 This file contains data that is needed to run CLiP
+ 2 And is generated by CLiP_MENU
+ 3 Modifying this file at own risk.
+ 4 Using CLiP_MENU is definitely recommended.
+ 5
+ 6 INTERACTIVE_MODE Mode (INTERACTIVE/DEBUG/HELPFUL/AUTO)
+ 7 NO Interactive fault correction (YES/NO)
+ 8 BOTH Error message destination (TERMINAL/......)
+ 9 (* Left comment string
+ 10 *) Right comment string
+ 11 * Command character
+ 12 ENDOF END string
+ 13 # Option marker
+ 14 EXTRACTED The specified modules are (OMITTED/EXTRACTED)
+ 15 ------------ REPORT FILE -----------
+ 16 CLIP.RPT
+ 17 ------------ INPUT FILES -----------
+ 18 f:\LPT\MAN\EX01_A.ASC
+ 19 f:\LPT\MAN\EX01_B.ASC
+ 20 ------------ MODULES ---------------
+ 21 F:\TEST\
+ 22 PALINDRO.PAS
+ 23 F:\TEST\
+ 24 TESTDATA.IN
+ 25 ------------ MODULE DIRECTORY ------
+ 26 f:\LPT\
+ 27 ------------ END OF INI FILE -------
+ <================= End of Example INI-file ===================>
+
+Lines 1-5: Descriptive lines that are flushed upon reading.
+
+Lines 6-14: Information behind position 24 is not interpreted.
+
+Lines 6-7: These lines refer to unimplemented options. They should not be
+ changed.
+
+Lines 8: Identifies the output device for messages and reports. The first
+ word of the line must be on of the following keywords TERMINAL,
+ REPORTFILE (or FILE), BOTH or NONE and we assume the meaning self
+ evident.
+
+Lines 9-13: These lines together define the syntax of the lines CLiP will
+ recognize. For an explanation of the CLiP syntax, refer to [Ammers
+ 1993].
+
+
+Lines 9: At most 6 characters to specify the "left comment string" i.e. the
+ opening sequence of a comment string of the programming language
+ you want to use. The characters cannot be letters (A-Z, a-z),
+ digits (0-9) or a dot (.).
+
+Lines 10: At most 6 characters to specify the "right comment string" i.e.
+ the closing sequence of a comment string of the programming
+ language you want to use. The characters cannot be letters (A-Z,
+ a-z), digits (0-9) or a dot (.).
+
+Lines 11: The character that is postfixed to a left comment string and
+ prefixed to a right comment string in order to identify it as a
+ special comment that CLiP has to process, a so called CLiP-line.
+ The character cannot be a letter (A-Z, a-z), a digits (0-9) or a
+ dot (.).
+
+Lines 12: The leading characters that identify a particular CLiP-line as the
+ end of a stub, i.e. a particular section that can be substituted
+ elsewhere.
+
+Lines 13: The character that identifies the options.
+
+Line 14: Relates to the modules in the module section below. The specified
+ modules must either be extracted or omitted and the first word of
+ this line can only be OMITTED or EXTRACTED.
+
+Line 15: Starts the section defining the file that mirrors the extraction
+ process. This line should be copied literally.
+
+Line 16: Path and file specification of the report file.
+
+Line 17: Starts the section defining the input files for the extraction
+ process, the so called source files. This line should be copied
+ literally.
+
+Line 18-19: Every line specifies a path and source file. There may be up to 64
+ lines in this section.
+
+Line 20: Starts the section defining the modules that are considered during
+ the extraction process. Whether the modules are extracted or
+ omitted depends on line 14. This line should be copied literally.
+
+Line 21-24: Every line pair specifies a path and a module file. There may be
+ up to 64 pairs (128 lines) in this section.
+
+Line 25: Starts the section to identify the default directory for modules,
+ i.e. the directory where modules go to that have no explicit
+ directory specified by the MODULES section. This line should be
+ copied literally.
+
+Line 26: Default directory for extracted modules.
+
+Line 27: Identifies the end of the INI-file. This line should be copied
+ literally.
+
+
+7 Bugs, work-arounds and undocumented features
+
+7.1 "SP_EXTR_STR: system failure .... call maintenance"
+
+This failure may happen if the stubs have not been correctly closed with the
+END-STRING that has been specified as the syntax. The default value of this
+string is "ENDOF". Also the line containing the END-STRING should be properly
+closed. For example in a Pascal situation
+
+ (********* End of module (2.1) ***)
+
+should be all right, but
+
+ (****** End of module (2.1) **)
+
+may give trouble since the string "**)" is incorrect here.
+
+7.2 Options in general
+
+Several options have been introduces with very advanced applications in mind.
+They have hardly been tested will probably not work. You won't need them
+either. For this reason don't use the options OVERRULE, SEPARATOR and TRAILER.
+
+7.3 Multiple option
+
+A slot with the "MULTIPLE" option raises an error if no stubs are found
+matching the slot. To prevent this error message one should specify the option
+"OPTIONAL" also for the slot.
+
+7.4 Report file option NONE
+
+This option to suppress the printing of reports to the terminal has not been
+implemented. It will be eliminated in some later version.
+
+7.5 Generating target modules
+
+7.5.1 Specification
+
+If CLIP.INI specifies a target module that matches no file-option argument
+anywhere in the list of specified source files, CLiP does not complain. The
+matching is case sensitive and for instance a file-option argument
+
+ (********** #file "EXAMPLE.PAS" ***********************)
+
+does not fit a module specification in CLIP.INI of the form
+
+ Example.PAS
+
+This may lead to unpleasant surprises.
+ On MS-DOS and VAX/VMS platforms the specification of files is not context
+sensitive. For this reason the CLIP_1 program (which is available for the
+MS-DOS and VAX/VMS versions of CLiP) converts those names to upper case in the
+INI-file it creates. Thus the file-option arguments in the source files should
+definitely be specified in upper case too.
+ In a Unix environment a file name is case sensitive indeed. Currently no
+CLIP_1 exists for Unix and an INI-file has to be created by means of the
+short-cut routine CLP (or directly by means of an editor, cf. section 6). No
+conversion is performed in this case and one has to make sure the file-option
+argument is identical to the corresponding name in the INI-file.
+
+
+7.5.2 Omitted modules
+
+If modules are specified for being OMITTED at extraction time, it will be
+omitted independent of the path that may have been specified. The module will
+never be generated.
+
+7.5.3 Empty run
+
+CLiP does not always recognize a corrupted INI-file. Thus if you run CLiP and
+it produces a report of the form
+
+ ============================ CLiP version 2.1 ==========================
+
+ ============================ Busy scanning =============================
+ Scanning file: ..................
+ .................................
+
+ ============================ End scanning ==============================
+
+ ============================ Busy analysing ============================
+
+ ============================ End analysing =============================
+
+ ============================ Busy generating ===========================
+
+ ============================ End generating ============================
+ Used (CPU) time :5.88 Sec.
+ See you next time !
+
+then you start checking the specifications of the target modules, since this is
+the most likely source of trouble. Keep in mind however, that the problem may
+be also arise due to a corrupted INI-file.
+
+7.6 Lost lines
+
+If you have stubs of the form
+
+ (****************** GEN_POOL global routines ********************)
+ (******************************************************************)
+ (* routine: write_string .... *)
+ (* ................... *)
+ (******************************************************************)
+
+you will see that the second line of the stub (the "starred" line) is not
+generated in the target modules. For this reason it is better to put an
+additional empty line in between. For example the following stub will be
+extracted correctly.
+
+ (****************** GEN_POOL global routines ********************)
+
+ (******************************************************************)
+ (* routine: write_string .... *)
+ (* ................... *)
+ (******************************************************************)
+
+
+7.7 DOS version only
+
+If you activate the PROJECT/Load INI-file or PROJECT/Save INI-file menu of the
+CLIP_1 program and you specify an illegal drive in the Current Directory
+option, you may hang the system. For instance a drive specification preceeded
+by a space will produce this bug.
+
+
+8 References
+
+Ammers E.W. van, M.R. Kramer (1993), The CLiP Style of Literate Programming
+ (submitted for publication). Anonymously ftp-able as CLIP_STYLE.PS,
+ CLIP_STYLE_A.PS and CLIP_STYLE_B.PS from directory CLIP on
+ sun01.info.wau.nl.
+
+Ammers E.W. van, Kramer M.R. (1992), VAMP: A Tool for Literate Programming
+ Independent of Programming Language and Formatter. CompEuro '92
+ Proceedings, May 4-8 1992, the Hague, pg. 371-376.
+
+Knuth D.E. (1984). Literate Programming. The Computer Journal 27, 2, 97-111.
diff --git a/web/clip/unix/modula.ini b/web/clip/unix/modula.ini
new file mode 100644
index 0000000000..892efa30b0
--- /dev/null
+++ b/web/clip/unix/modula.ini
@@ -0,0 +1,21 @@
+This file contains data that is needed to run CLiP
+And is generated by CLiP_MENU
+Modifying this file at own risk.
+Using CLiP_MENU is definitely recommended.
+
+INTERACTIVE_MODE Mode (INTERACTIVE/DEBUG/HELPFUL/AUTO)
+YES Interactive fault correction (YES/NO)
+BOTH Error message destination (TERMINAL/REPORTFILE/BOTH/NONE)
+(* Left comment string
+*) Right comment string
+* Command character
+ENDOF END string
+# Option marker
+OMITTED The specified modules are (OMITTED/EXTRACTED)
+------------ REPORT FILE -----------
+CLIP.RPT
+------------ INPUT FILES -----------
+------------ MODULES ---------------
+------------ MODULE DIRECTORY ------
+
+------------ END OF INI FILE -------
diff --git a/web/clip/unix/pascal.ini b/web/clip/unix/pascal.ini
new file mode 100644
index 0000000000..892efa30b0
--- /dev/null
+++ b/web/clip/unix/pascal.ini
@@ -0,0 +1,21 @@
+This file contains data that is needed to run CLiP
+And is generated by CLiP_MENU
+Modifying this file at own risk.
+Using CLiP_MENU is definitely recommended.
+
+INTERACTIVE_MODE Mode (INTERACTIVE/DEBUG/HELPFUL/AUTO)
+YES Interactive fault correction (YES/NO)
+BOTH Error message destination (TERMINAL/REPORTFILE/BOTH/NONE)
+(* Left comment string
+*) Right comment string
+* Command character
+ENDOF END string
+# Option marker
+OMITTED The specified modules are (OMITTED/EXTRACTED)
+------------ REPORT FILE -----------
+CLIP.RPT
+------------ INPUT FILES -----------
+------------ MODULES ---------------
+------------ MODULE DIRECTORY ------
+
+------------ END OF INI FILE -------
diff --git a/web/clip/unix/read_me.ps b/web/clip/unix/read_me.ps
new file mode 100644
index 0000000000..03b9dbc665
--- /dev/null
+++ b/web/clip/unix/read_me.ps
@@ -0,0 +1,1463 @@
+%!PS-Adobe-2.0
+%%DocumentFonts: (atend)
+%%Title: F:\\LPT\\UNIX\\READ_ME.DOC
+%%Creator: Lotus Manuscript
+%%For: Eric W. van Ammers
+%%CreationDate: November 17, 1993
+%%Pages: (atend)
+%%BoundingBox: 0 0 595 841
+%%EndComments
+% PostScript Prologue (initialization) for Manuscript
+% Copyright (c) 1985,1986,1987,1988 Lotus Development Corporation
+% There is no user servicable code in this file.
+
+% set timeouts to infinite
+statusdict begin
+0 setjobtimeout
+/manualfeedtimeout 3600 def
+/waittimeout 0 def
+end
+
+% correct bug correction in rev 41.0
+/idiv{div cvi}bind def
+
+% define User Dictionary
+/msdict 300 dict def msdict begin
+/bd{bind def}bind def
+
+% Define commonly used things
+/delay{usertime 5000 add{dup usertime lt{pop exit}if}loop}bd
+/mfeed{statusdict begin /manualfeed true def end}bd
+/afeed{statusdict begin /manualfeed false def end}bd
+/bfeed{ afeed statusdict begin /setpapertray where
+ {pop setpapertray}{pop} ifelse end}bd
+
+/dpi{0.24 dup scale}bd
+
+% These two are called for each page
+/inpage false def
+/begpage{save dpi /inpage true def}bd
+/endpage{inpage {restore showpage}if }bd
+
+% for possible banner
+/fileinfo {pop pop pop}bd
+/enddocument {end} bd
+
+% these are also used by eqn & gmf
+/ld{load def}bd
+/x/exch ld
+/cu{300 mul 72 div}bd
+/m/moveto ld
+/t/translate ld
+/rm/rmoveto ld
+/cp/currentpoint ld
+/st/stroke ld
+/ln/lineto ld
+/rlt/rlineto ld
+/slw/setlinewidth ld
+
+/ff/findfont ld
+/scf/scalefont ld
+/sf/setfont ld
+/fs{x /pt x def ff pt cu scf sf}bd
+
+% linedraw
+/li{4 2 roll setlinewidth 3 1 roll moveto 0.0 rlineto st}bd
+
+% outline factor
+/olwid 40.0 def
+% stroke width for outline
+/uoslw {pt cu x div slw}bd
+% relative horizontal move
+/xm{x currentpoint pop sub 0.0 rmoveto}bd
+
+% The basic show
+/s/show ld
+% move horizontal and show
+/ms{xm s}bd
+
+% variations
+% outline show - first printer attribute
+/ppss{dup cp 3 -1 roll false charpath st
+x 3 -1 roll stringwidth pop add x moveto}bd
+/pss{olwid uoslw { ( ) dup 0 4 -1 roll put ppss}forall}bd
+/ps{pss}bd
+/mps{xm ps}bd
+
+% graybox show - second printer attribute
+/gb{cp 3 -1 roll pt cu dup 4 div neg 0 x rm dup 0 x rlt x 0 rlt
+neg 0 x rlt closepath currentgray .9 setgray fill setgray m}bd
+/usi{dup stringwidth pop gb}bd
+/us{usi s}bd
+/xum{x cp pop sub dup gb 0 rmoveto}bd
+
+% combinations of PD1 and PD2
+/ups{usi pss}bd
+/mups{xm ups}bd
+/mus{xm us}bd
+
+% define a new encoding vector (code page 850 based)
+/PC 256 array def
+StandardEncoding PC copy pop
+
+/dotaccent/bullet
+/quotesingle/quotedblleft/quotedblright/quotesinglbase
+/quotedblbase/guilsinglleft/guilsinglright/.notdef
+/ellipsis/perthousand/.notdef/.notdef/paragraph/section/dagger/daggerdbl
+/OE/oe/fi/fl/endash/emdash/fraction/Ydieresis
+PC 6 26 getinterval astore pop
+
+/Ccedilla/udieresis/eacute/acircumflex/adieresis/agrave/aring/ccedilla
+/ecircumflex/edieresis/egrave/idieresis/icircumflex/igrave/Adieresis/Aring
+/Eacute/ae/AE/ocircumflex/odieresis/ograve/ucircumflex/ugrave
+/ydieresis/Odieresis/Udieresis/oslash/sterling/Oslash/.notdef/florin
+/aacute/iacute/oacute/uacute/ntilde/Ntilde/ordfeminine/ordmasculine
+/questiondown/.notdef/.notdef/onehalf/onequarter/exclamdown/guillemotleft/guillemotright
+/.notdef/.notdef/.notdef/.notdef/.notdef/Aacute/Acircumflex/Agrave
+/.notdef/.notdef/.notdef/.notdef/.notdef/cent/yen/.notdef
+/.notdef/grave/.notdef/circumflex/tilde/.notdef/atilde/Atilde
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/currency
+/eth/Eth/Ecircumflex/Edieresis/Egrave/dotlessi/Iacute/Icircumflex
+/Idieresis/.notdef/.notdef/.notdef/.notdef/brokenbar/Igrave/.notdef
+/Oacute/germandbls/Ocircumflex/Ograve/otilde/Otilde/.notdef/thorn
+/Thorn/Uacute/Ucircumflex/Ugrave/yacute/Yacute/.notdef/acute
+/.notdef/.notdef/.notdef/threequarters/paragraph/section/.notdef/cedilla
+/ring/dieresis/periodcentered/onesuperior/threesuperior/twosuperior/.notdef/.notdef
+
+PC 128 128 getinterval astore pop
+
+% duplicate fonts with a new encoding vector
+/recd 5 dict def
+/pcft
+{recd begin
+/ncs PC def /nfn x def
+/bfn x def /bfd bfn findfont def
+/nf bfd maxlength dict def
+bfd{x dup dup /FID ne x /Encoding ne and
+{x nf 3 1 roll put}{pop pop}ifelse
+}forall
+nf/FontName nfn put
+nf/Encoding ncs put
+nfn nf definefont pop
+end}bd
+
+/fs{x /pt x def ff pt cu scf sf}bd
+
+% used by eqn
+/Times-Roman/TR pcft /Times-Bold/TRB pcft
+/Times-Italic/TRI pcft /Times-BoldItalic/TRBI pcft
+/Helvetica/HV pcft /Helvetica-Bold/HVB pcft
+/Helvetica-Oblique/HVO pcft /Helvetica-BoldOblique/HVBO pcft
+/Courier/CR pcft /Courier-Bold/CRB pcft
+/Sym{/Symbol fs}bd
+
+% Bit map image data decompression code
+/xx 0 def /yy 0 def
+/xbytes 0 def
+/lbuf 1200 string def /obuf 600 string def
+/bval <FFFEFCF8F0E0C080000103070F1F3F7F> def
+/blacks 96 string def /whites 96 string def
+0 1 95 {whites x 255 put} for
+
+/dispatch [
+{
+dup 47 le {32 sub 4 bitshift x pop 1}{
+dup 63 le {x pop 48 sub bval x get
+3 copy put x 1 add x 0} {
+dup 79 le {62 sub} {
+80 sub { 3 copy put x 1 add x } repeat 0
+}ifelse }ifelse }ifelse
+}bind
+{
+32 sub add
+3 copy put
+x 1 add x 0
+} bind
+{
+32 sub x pop add 255 0
+}bind
+{
+32 sub x pop
+3 copy getinterval
+whites 0 3 index getinterval
+x copy pop add 255 0
+}bind
+{
+32 sub x pop
+3 copy getinterval
+blacks 0 3 index getinterval
+x copy pop add 0 0
+}bind
+]def
+
+% read a raster line and unpack
+/readx{
+obuf 0 255 0
+currentfile lbuf readline pop
+{x dispatch x get exec} forall
+pop pop pop 0 xbytes getinterval}bd
+
+/mspic{
+/yy x def/xx x def
+/xbytes xx 8 idiv def
+xx yy 1 [xx 0 0 0 yy sub 0 yy]{readx}image}bd
+
+
+
+/Helvetica/fA pcft/FA{/fA fs}bd
+/Helvetica-Oblique/fAI pcft/FAI{/fAI fs}bd
+/Helvetica-Bold/fAB pcft/FAB{/fAB fs}bd
+/Helvetica-BoldOblique/fAIB pcft/FAIB{/fAIB fs}bd
+/Times-Roman/fB pcft/FB{/fB fs}bd
+/Times-Italic/fBI pcft/FBI{/fBI fs}bd
+/Times-Bold/fBB pcft/FBB{/fBB fs}bd
+/Times-BoldItalic/fBIB pcft/FBIB{/fBIB fs}bd
+/Courier/fQ pcft/FQ{/fQ fs}bd
+/Courier-Oblique/fQI pcft/FQI{/fQI fs}bd
+/Courier-Bold/fQB pcft/FQB{/fQB fs}bd
+/Courier-BoldOblique/fQIB pcft/FQIB{/fQIB fs}bd
+(F:\\LPT\\UNIX\\READ_ME.DOC)(Eric W. van Ammers)(November 17, 1993)fileinfo
+%%EndProlog
+%%Page: 0 1
+begpage
+18 FAB
+800 2938 m
+(READ_ME for CLIP/UNIX)s
+12 FAB
+295 2588 m
+(1 Directory CLIP/UNIX)s
+12 FB
+295 2517 m
+(The)s
+385(directory)ms
+578(contains)ms
+757(the)ms
+831(files)ms
+389 2457 m
+(a.)s
+484(read_me.ps,)ms
+738(read_me.txt)ms
+988(\(this)ms
+1090(file\).)ms
+389 2397 m
+(b.)s
+484(clip.pas,)ms
+663(clip,)ms
+763(CLIP_MSG)ms
+1017(\(CLiP)ms
+1152(system\).)ms
+389 2337 m
+(c.)s
+484(cl.csh,)ms
+624(clp.csh,)ms
+790(clp_env.csh,)ms
+1052(\(user)ms
+1165(support\).)ms
+389 2277 m
+(d.)s
+484(ex01_a.ps,)ms
+710(ex01_a.asc,)ms
+956(ex01_a.ini,)ms
+1191(ex01_a.pas,)ms
+484 2217 m
+(ex01_b.ps,)s
+713(ex01_b.asc,)ms
+961(ex01_b.ini,)ms
+1199(ex01_b.pas)ms
+1438(\(example\).)ms
+389 2157 m
+(e.)s
+484(ada.ini,)ms
+648(c.ini,)ms
+764(fortran.ini,)ms
+994(lisp.ini,)ms
+1160(modula.ini,)ms
+1404(pascal.ini)ms
+1611(\(template)ms
+1816(INI-files)ms
+2004(for)ms
+2079(some)ms
+484 2097 m
+(languages\).)s
+389 2037 m
+(f.)s
+484(manual.ps,)ms
+713(manual.txt)ms
+938(\(manual\).)ms
+295 1977 m
+(About)s
+432(file)ms
+511(extensions:)ms
+389 1917 m
+(PS-files)s
+561(are)ms
+636(postscript)ms
+844(files)ms
+945(and)ms
+1031(represent)ms
+1228(the)ms
+1303(type-set)ms
+1476(versions)ms
+1656(of)ms
+1712(the)ms
+1787(corresponding)ms
+2087(ASC)ms
+389 1857 m
+(or)s
+443(TXT-files.)ms
+389 1797 m
+(ASC-files)s
+600(are)ms
+673(derived)ms
+835(by)ms
+896(ASCII-export)ms
+1183(from)ms
+1292(the)ms
+1365(original)ms
+1532(word-processor)ms
+1855(files)ms
+1953(\(in)ms
+2020(our)ms
+2098(case)ms
+389 1737 m
+(Lotus)s
+515(Manuscript\).)ms
+389 1677 m
+(TXT-files)s
+601(are)ms
+674(ASCII)ms
+816(versions)ms
+995(of)ms
+1049(the)ms
+1122(corresponding)ms
+1420(PS-files.)ms
+1603(They)ms
+1718(are)ms
+1791(slightly)ms
+1953(modified)ms
+2146(to)ms
+389 1617 m
+(improve)s
+574(the)ms
+655(lay-out.)ms
+828(TXT-files)ms
+1048(are)ms
+1128(a)ms
+1169(service)ms
+1330(for)ms
+1408(people)ms
+1561(who)ms
+1666(have)ms
+1780(no)ms
+1849(easy)ms
+1957(access)ms
+2104(to)ms
+2162(a)ms
+389 1557 m
+(postscript)s
+595(printer.)ms
+12 FAB
+295 1428 m
+(2 Installing CLiP)s
+12 FB
+389 1357 m
+(a.)s
+484(Use)ms
+584(FTP)ms
+692(to)ms
+753(copy)ms
+872(the)ms
+955(CLiP)ms
+1083(system)ms
+1244(to)ms
+1305(your)ms
+1418(local)ms
+1537(site.)ms
+1641(Note)ms
+1761(that)ms
+1858(clip)ms
+1955(is)ms
+2010(our)ms
+2099(own)ms
+484 1297 m
+(executable)s
+711(version)ms
+870(of)ms
+924(clip.pas,)ms
+1104(and)ms
+1188(it)ms
+1229(should)ms
+1374(be)ms
+1434(FTP-ed)ms
+1597(in)ms
+1648(binary)ms
+1788(mode.)ms
+389 1237 m
+(b.)s
+484(Create)ms
+641(a)ms
+690(directory)ms
+897(for)ms
+982(the)ms
+1069(CLiP-system.)ms
+1370(This)ms
+1485(directory)ms
+1692(will)ms
+1797(be)ms
+1870(referred)ms
+2055(as)ms
+2123(the)ms
+484 1177 m
+(CLIP_DIR.)s
+728(Let)ms
+808(us)ms
+865(assume)ms
+1024(this)ms
+1109(directory)ms
+1302(is)ms
+909 1117 m
+(~/clip)s
+389 1057 m
+(c.)s
+484(Copy)ms
+605(clip.pas)ms
+772(to)ms
+824(your)ms
+928(CLIP_DIR)ms
+1160(and)ms
+1245(compile.)ms
+1431(Since)ms
+1555(it)ms
+1595(is)ms
+1641(written)ms
+1795(in)ms
+1847(ISO-Pascal)ms
+2085(there)ms
+484 997 m
+(should)s
+633(be)ms
+696(no)ms
+762(problem.)ms
+957(We)ms
+1043(use)ms
+1125(the)ms
+1202(Sun)ms
+1296(Pascal)ms
+1439(2.0)ms
+1518(compiler)ms
+1711(under)ms
+1841(operating)ms
+2046(system)ms
+484 937 m
+(SunOS)s
+641(4.2)ms
+719(running)ms
+890(on)ms
+955(Sun4c)ms
+1095(\(Sun1,)ms
+1243(Sun1+,)ms
+1401(Sun2\))ms
+1536(hardware.)ms
+1750(If)ms
+1798(you)ms
+1889(have)ms
+1998(problems)ms
+484 877 m
+(you)s
+572(may)ms
+670(want)ms
+780(to)ms
+831(try)ms
+899(the)ms
+973(binary)ms
+1113(version)ms
+1273(of)ms
+1327(clip.pas,)ms
+1506(clip,)ms
+1606(instead.)ms
+389 817 m
+(d.)s
+484(Copy)ms
+605(the)ms
+678(files)ms
+777(CLIP_MSG,)ms
+1044(cl.csh,)ms
+1184(clp.csh)ms
+1336(and)ms
+1421(clp_env.csh)ms
+1671(to)ms
+1722(your)ms
+1826(CLIP_DIR.)ms
+2071(Make)ms
+484 757 m
+(sure)s
+580(the)ms
+653(file)ms
+733(name)ms
+853(CLIP_MSG)ms
+1108(is)ms
+1153(in)ms
+1205(uppercase.)ms
+389 697 m
+(e.)s
+484(Make)ms
+611(the)ms
+684(script)ms
+808(files)ms
+906(executable)ms
+1133(through)ms
+1301(the)ms
+1374(command)ms
+578 637 m
+(%)s
+632(chmod)ms
+793(+x)ms
+871(*.csh)ms
+12 FAB
+295 508 m
+(3 A quick installation test)s
+12 FB
+295 437 m
+(To)s
+363(test)ms
+445(if)ms
+488(your)ms
+592(CLiP)ms
+710(system)ms
+861(has)ms
+940(been)ms
+1047(properly)ms
+1229(installed,)ms
+1424(perform)ms
+1597(the)ms
+1671(following)ms
+1878(steps:)ms
+389 377 m
+(a.)s
+484(Choose)ms
+647(a)ms
+681(test)ms
+763(directory.)ms
+969(Let)ms
+1048(us)ms
+1105(assume)ms
+1265(~/test.)ms
+389 317 m
+(b.)s
+484(Copy)ms
+621(the)ms
+712(files)ms
+827(ex01_a.asc,)ms
+1089(ex01_b.asc,)ms
+1354(ex01_a.ini,)ms
+1606(ex01_b.ini,)ms
+1860(ex01_a.pas)ms
+2112(and)ms
+8 FB
+295 145 m
+(READ_ME)s
+460(for)ms
+507(CLIP/UNIX)ms
+681(\(READ_ME.DOC/2.119/November 17, 1993\))ms
+12 FB
+2100 145 m
+(1)s
+50 2 2130 157 li
+50 2 2045 157 li
+endpage
+%%Page: 1 2
+begpage
+12 FB
+484 3139 m
+(ex01_b.pas)s
+723(to)ms
+774(your)ms
+878(test)ms
+960(directory.)ms
+389 3079 m
+(c.)s
+484(Type)ms
+599(the)ms
+673(command)ms
+578 3019 m
+(%)s
+632(cl)ms
+680(ex01_a.ini)ms
+484 2959 m
+(to)s
+532(produce)ms
+703(the)ms
+774(file)ms
+851(palindrome.pas.)ms
+1180(Note)ms
+1287(that)ms
+1372(ex01_a.ini)ms
+1591(locates)ms
+1740(the)ms
+1811(source)ms
+1951(files)ms
+2047(as)ms
+2098(well)ms
+484 2899 m
+(as)s
+538(the)ms
+611(target)ms
+738(modules)ms
+920(in)ms
+971(the)ms
+1045(current)ms
+1199(directory.)ms
+389 2839 m
+(d.)s
+484(Compare)ms
+680(the)ms
+753(file)ms
+833(palindrome.pas)ms
+1152(with)ms
+1253(ex01_a.pas)ms
+1489(by)ms
+1552(means)ms
+1692(of)ms
+1746(the)ms
+1820(command)ms
+578 2779 m
+(%)s
+632(diff)ms
+716(palindrome.pas)ms
+1036(ex01_a.pas)ms
+484 2719 m
+(There)s
+613(should)ms
+758(be)ms
+818(no)ms
+881(differences.)ms
+389 2659 m
+(e.)s
+484(Now)ms
+594(type)ms
+693(the)ms
+766(command)ms
+578 2599 m
+(%)s
+632(cl)ms
+680(ex01_b.ini)ms
+484 2539 m
+(to)s
+535(produce)ms
+708(a)ms
+743(new)ms
+839(file)ms
+918(palindrome.pas.)ms
+389 2479 m
+(f.)s
+484(Compare)ms
+679(the)ms
+753(new)ms
+849(palindrome.pas)ms
+1168(with)ms
+1270(ex01_b.pas)ms
+1509(by)ms
+1571(means)ms
+1711(of)ms
+1765(the)ms
+1839(command)ms
+578 2419 m
+(%)s
+632(diff)ms
+716(palindrome.pas)ms
+1036(ex01_b.pas)ms
+484 2359 m
+(Again)s
+618(there)ms
+731(should)ms
+877(be)ms
+936(no)ms
+999(differences.)ms
+12 FAB
+295 2231 m
+(4 What you should know)s
+12 FB
+295 2159 m
+(clip)s
+383(performs)ms
+577(the)ms
+652(actual)ms
+785(module)ms
+948(extraction)ms
+1162(on)ms
+1225(the)ms
+1300(basis)ms
+1413(of)ms
+1468(a)ms
+1504(special)ms
+1657(file,)ms
+1749(CLIP.INI,)ms
+1966(which)ms
+2101(tells)ms
+295 2099 m
+(it)s
+335(literally)ms
+503(everything)ms
+729(it)ms
+769(has)ms
+848(to)ms
+899(know)ms
+1023(in)ms
+1074(order)ms
+1192(to)ms
+1243(perform)ms
+1416(a)ms
+1451(run.)ms
+1542(Thus)ms
+1655(CLIP.INI)ms
+1857(specifies)ms
+2044(to)ms
+2096(clip:)ms
+389 2039 m
+(-)s
+484(the)ms
+558(files)ms
+656(it)ms
+697(has)ms
+776(to)ms
+827(read)ms
+926(\(i.e.)ms
+1016(the)ms
+1090(source)ms
+1233(files\),)ms
+389 1979 m
+(-)s
+484(the)ms
+558(modules)ms
+740(it)ms
+780(should)ms
+926(extract)ms
+1074(\(i.e.)ms
+1165(target)ms
+1291(modules\),)ms
+389 1919 m
+(-)s
+484(the)ms
+558(report)ms
+690(file,)ms
+389 1859 m
+(-)s
+484(the)ms
+561(syntax)ms
+708(of)ms
+765(the)ms
+842(CLiP-lines)ms
+1075(\(i.e.)ms
+1168(the)ms
+1245(lines)ms
+1355(which)ms
+1493(trigger)ms
+1643(the)ms
+1720(module)ms
+1885(extraction)ms
+2101(pro-)ms
+484 1799 m
+(cess\).)s
+295 1739 m
+(CLIP.INI)s
+495(is)ms
+538(a)ms
+571(straight)ms
+731(forward)ms
+899(ASCII-file.)ms
+1135(It)ms
+1176(has)ms
+1253(a)ms
+1285(simple)ms
+1429(structure)ms
+1614(which)ms
+1746(is)ms
+1789(explained)ms
+1994(in)ms
+2043(section)ms
+295 1679 m
+(6)s
+331(of)ms
+383(the)ms
+455(manual.)ms
+626(In)ms
+679(extreme)ms
+851(situations)ms
+1054(you)ms
+1140(may)ms
+1237(want)ms
+1345(to)ms
+1395(edit)ms
+1481(a)ms
+1514(CLIP.INI)ms
+1715(manually)ms
+1912(but)ms
+1987(in)ms
+2037(general)ms
+295 1619 m
+(it)s
+334(will)ms
+423(be)ms
+481(more)ms
+595(convenient)ms
+826(to)ms
+876(use)ms
+954(the)ms
+1027(procedures)ms
+1257(cl.csh,)ms
+1396(clp.csh)ms
+1548(and)ms
+1631(clp_env.csh.)ms
+1893(These)ms
+2023(routines)ms
+295 1559 m
+(construct)s
+492(a)ms
+528(CLIP.INI)ms
+732(for)ms
+804(you)ms
+893(and)ms
+979(run)ms
+1059(clip)ms
+1148(immediately)ms
+1412(afterwards.)ms
+1649(They)ms
+1765(are)ms
+1840(adequate)ms
+2032(most)ms
+2143(of)ms
+295 1499 m
+(the)s
+368(time.)ms
+389 1439 m
+(Whenever)s
+605(you)ms
+690(decide)ms
+832(to)ms
+881(create)ms
+1011(an)ms
+1069(INI-file)ms
+1233(to)ms
+1282(accommodate)ms
+1571(your)ms
+1673(special)ms
+1823(wishes,)ms
+1982(make)ms
+2101(sure)ms
+295 1379 m
+(you)s
+380(start)ms
+477(from)ms
+585(an)ms
+643(INI-file)ms
+806(you)ms
+892(already)ms
+1049(know)ms
+1171(to)ms
+1221(be)ms
+1279(correct.)ms
+1441(Also)ms
+1546(if)ms
+1587(you)ms
+1672(want)ms
+1780(to)ms
+1830(change)ms
+1982(the)ms
+2054(syntax)ms
+295 1319 m
+(CLiP)s
+413(recognizes,)ms
+651(please)ms
+789(study)ms
+910(section)ms
+1064(2)ms
+1101(of)ms
+1156(the)ms
+1229(manual.)ms
+389 1259 m
+(A)s
+437(more)ms
+552(extensive)ms
+754(description)ms
+988(of)ms
+1043(the)ms
+1116(CLiP)ms
+1234(system)ms
+1386(can)ms
+1468(be)ms
+1527(found)ms
+1656(in)ms
+1708([1].)ms
+12 FAB
+295 1131 m
+(5 Using CLiP ...)s
+12 FB
+295 1059 m
+(The)s
+385(batch)ms
+505(procedures)ms
+737(below)ms
+871(are)ms
+945(designed)ms
+1135(to)ms
+1186(make)ms
+1307(your)ms
+1410(working)ms
+1589(directories)ms
+1813(independent)ms
+2069(of)ms
+2123(the)ms
+295 999 m
+(CLIP_DIR.)s
+542(Remark)ms
+716(that)ms
+807(the)ms
+884(original)ms
+1055(batch)ms
+1180(files)ms
+1281(assume)ms
+1444(that)ms
+1535(your)ms
+1643(CLIP_DIR)ms
+1878(is)ms
+1927(the)ms
+2004(directory)ms
+295 939 m
+(user/clip.)s
+10 FAB
+295 842 m
+(5.1 ... via clp.csh and clp_env.csh)s
+12 FB
+295 777 m
+(These)s
+425(procedures)ms
+656(if)ms
+698(one)ms
+781(wants)ms
+909(to)ms
+960(extract)ms
+1107(all)ms
+1169(modules)ms
+1349(from)ms
+1458(up)ms
+1519(to)ms
+1570(8)ms
+1606(source)ms
+1748(files)ms
+1845(which)ms
+1979(are)ms
+2051(passed)ms
+295 717 m
+(as)s
+349(parameters.)ms
+594(First)ms
+699(use)ms
+778(clp_env.csh)ms
+1029(to)ms
+1081(define)ms
+1219(explicitly)ms
+1421(the)ms
+1495(source)ms
+1638(file)ms
+1718(directory)ms
+1911(and)ms
+1997(the)ms
+2071(target)ms
+295 657 m
+(module)s
+457(directory,)ms
+663(for)ms
+733(example)ms
+389 597 m
+(%)s
+443(clp_env.csh)ms
+705(/user/test)ms
+911(/user/test)ms
+295 537 m
+(defines)s
+452(the)ms
+527(subdirectory)ms
+790(test)ms
+873(from)ms
+984(the)ms
+1058(directory)ms
+1252(user)ms
+1349(as)ms
+1404(directory)ms
+1598(for)ms
+1670(the)ms
+1745(source)ms
+1889(files)ms
+1988(as)ms
+2043(well)ms
+2143(as)ms
+295 477 m
+(for)s
+365(the)ms
+439(target)ms
+565(modules.)ms
+760(With)ms
+872(this)ms
+957(setting)ms
+1103(the)ms
+1176(command)ms
+389 417 m
+(%)s
+443(clp.csh)ms
+608(file1.asc)ms
+801(file2.asc)ms
+994(file3.asc)ms
+295 357 m
+(will)s
+387(process)ms
+552(the)ms
+627(files)ms
+728(/user/test/file1.asc)ms
+1105(etc.)ms
+1191(and)ms
+1277(extract)ms
+1428(all)ms
+1493(modules)ms
+1677(it)ms
+1719(encounters)ms
+1950(towards)ms
+2123(the)ms
+295 297 m
+(directory)s
+488(/user/test.)ms
+8 FB
+295 145 m
+(READ_ME)s
+460(for)ms
+507(CLIP/UNIX)ms
+681(\(READ_ME.DOC/2.119/November 17, 1993\))ms
+12 FB
+2100 145 m
+(2)s
+50 2 2130 157 li
+50 2 2045 157 li
+endpage
+%%Page: 2 3
+begpage
+12 FB
+389 3139 m
+(All)s
+464(setting)ms
+608(are)ms
+681(assumed)ms
+864(by)ms
+926(the)ms
+998(batch)ms
+1118(procedure.)ms
+1342(Originally)ms
+1558(it)ms
+1598(is)ms
+1642(tailored)ms
+1806(to)ms
+1857(Pascal)ms
+1996(programs)ms
+295 3079 m
+(of)s
+347(the)ms
+418(sort)ms
+503(displayed)ms
+705(in)ms
+755(the)ms
+826(example)ms
+1006(ex01)ms
+1114(\(i.e.)ms
+1202(the)ms
+1273(files)ms
+1370(ex01_?.*\))ms
+1579(on)ms
+1639(the)ms
+1710(directory)ms
+1901(clip.)ms
+1999(To)ms
+2065(adjust)ms
+295 3019 m
+(clp.csh)s
+447(to)ms
+498(another)ms
+660(syntax)ms
+803(one)ms
+888(should)ms
+1033(be)ms
+1093(familiar)ms
+1263(with)ms
+1364(section)ms
+1518(2)ms
+1555(of)ms
+1609(the)ms
+1683(manual.)ms
+1855(Only)ms
+1967(modify)ms
+2123(the)ms
+295 2959 m
+(following)s
+501(lines)ms
+608(clp.csh)ms
+761(for)ms
+832(this)ms
+917(purpose:)ms
+389 2899 m
+(line)s
+476(15:)ms
+552(Replace)ms
+726(\(*)ms
+868(with)ms
+969(the)ms
+1043(COMM-START)ms
+1388(of)ms
+1443(your)ms
+1547(choice.)ms
+389 2839 m
+(line)s
+476(16:)ms
+552(Replace)ms
+726(*\))ms
+868(with)ms
+969(the)ms
+1043(COMM-END)ms
+1333(of)ms
+1387(your)ms
+1491(choice.)ms
+389 2779 m
+(line)s
+476(17:)ms
+552(Replace)ms
+726(*)ms
+863(with)ms
+965(the)ms
+1038(CLIP-CHAR)ms
+1315(of)ms
+1369(your)ms
+1473(choice.)ms
+389 2719 m
+(line)s
+476(18:)ms
+552(Replace)ms
+726(ENDOF)ms
+955(with)ms
+1057(the)ms
+1130(END-STRING)ms
+1443(of)ms
+1497(your)ms
+1601(choice.)ms
+389 2659 m
+(line)s
+476(19:)ms
+552(Replace)ms
+726(#)ms
+863(with)ms
+965(the)ms
+1038(OPTION-MARKER)ms
+1465(of)ms
+1519(your)ms
+1623(choice.)ms
+389 2599 m
+(line)s
+476(22:)ms
+552(Replace)ms
+726(clip.rpt)ms
+894(with)ms
+995(the)ms
+1069(report)ms
+1201(file)ms
+1280(name)ms
+1401(of)ms
+1455(your)ms
+1559(choice.)ms
+295 2539 m
+(Note)s
+412(that)ms
+508(the)ms
+590(characters)ms
+813("a"-"z",)ms
+989("A"-"Z",)ms
+1187("0"-"9")ms
+1356(and)ms
+1449(".")ms
+1523(do)ms
+1594(not)ms
+1678(qualify)ms
+1841(as)ms
+1903(characters)ms
+2126(for)ms
+295 2479 m
+(COMM-START,)s
+649(COMM-END,)ms
+948(CLIP-CHAR)ms
+1221(or)ms
+1272(OPTION-MARKER)ms
+1695(while)ms
+1815(the)ms
+1885(END-STRING)ms
+295 2419 m
+(should)s
+440(be)ms
+500(chosen)ms
+651(from)ms
+761(letters)ms
+896(only.)ms
+10 FAB
+295 2322 m
+(5.2 ... via cl.csh)s
+12 FB
+295 2257 m
+(cl.csh)s
+426(is)ms
+477(the)ms
+554(fastest)ms
+699(way)ms
+799(to)ms
+855(run)ms
+938(clip)ms
+1030(and)ms
+1119(will)ms
+1213(probably)ms
+1408(be)ms
+1472(invoked)ms
+1649(most)ms
+1763(often.)ms
+1895(It)ms
+1943(can)ms
+2029(be)ms
+2093(used)ms
+295 2197 m
+(whenever)s
+503(an)ms
+563(INI-file)ms
+730(already)ms
+891(is)ms
+938(available.)ms
+1145(It)ms
+1189(copies)ms
+1330(the)ms
+1405(information)ms
+1655(of)ms
+1710(the)ms
+1785(specified)ms
+1979(INI-file)ms
+2146(to)ms
+295 2137 m
+(CLIP.INI)s
+497(and)ms
+582(runs)ms
+681(the)ms
+754(clip)ms
+842(program.)ms
+389 2077 m
+(The)s
+477(INI-file)ms
+641(to)ms
+691(be)ms
+750(used)ms
+852(is)ms
+897(passed)ms
+1041(as)ms
+1094(an)ms
+1153(optional)ms
+1328(parameter.)ms
+1551(If)ms
+1596(no)ms
+1657(INI-file)ms
+1821(is)ms
+1865(specified,)ms
+2069(cl.csh)ms
+295 2017 m
+(simply)s
+443(assumes)ms
+622(CLIP.INI.)ms
+838(For)ms
+920(example)ms
+484 1957 m
+(%)s
+538(cl)ms
+586(ex01_a.ini)ms
+295 1897 m
+(will)s
+385(copy)ms
+495(the)ms
+568(file)ms
+647(ex01_a.ini)ms
+869(to)ms
+921(CLIP.INI)ms
+1124(and)ms
+1208(run)ms
+1287(clip.)ms
+1387(However)ms
+1583(the)ms
+1657(command)ms
+484 1837 m
+(%)s
+538(cl)ms
+295 1777 m
+(immediately)s
+557(runs)ms
+656(clip)ms
+743(with)ms
+845(the)ms
+918(assumption)ms
+1158(that)ms
+1246(a)ms
+1281(CLIP.INI)ms
+1483(already)ms
+1643(exists.)ms
+12 FAB
+295 1648 m
+(6 Specimen INI-files)s
+12 FB
+295 1577 m
+(The)s
+389(files)ms
+492(ada.ini,)ms
+657(c.ini,)ms
+774(fortran.ini,)ms
+1004(lisp.ini,)ms
+1171(modula.ini)ms
+1404(and)ms
+1493(pascal.ini)ms
+1700(suggest)ms
+1867(a)ms
+1906(suitable)ms
+2079(CLiP)ms
+295 1517 m
+(syntax)s
+440(for)ms
+512(a)ms
+549(start.)ms
+662(To)ms
+732(customize)ms
+950(clp.csh)ms
+1105(for)ms
+1177(such)ms
+1284(a)ms
+1320(syntax,)ms
+1478(refer)ms
+1587(to)ms
+1640(the)ms
+1716(previous)ms
+1903(section)ms
+2059(and)ms
+2146(to)ms
+295 1457 m
+(section)s
+449(6)ms
+486(of)ms
+540(the)ms
+614(manual.)ms
+12 FAB
+295 1328 m
+(7 References)s
+12 FB
+295 1257 m
+(Ammers)s
+480(E.W.)ms
+596(van,)ms
+693(M.R.)ms
+809(Kramer)ms
+975(\(1993\),)ms
+1134(The)ms
+1225(CLiP)ms
+1343(Style)ms
+1459(of)ms
+1514(Literate)ms
+1683(Programming)ms
+1971(\(submitted)ms
+389 1197 m
+(for)s
+467(publication\).)ms
+742(Anonymously)ms
+1046(ftp-able)ms
+1222(as)ms
+1284(CLIP_STYLE.PS,)ms
+1674(CLIP_STYLE_A.PS)ms
+2112(and)ms
+389 1137 m
+(CLIP_STYLE_B.PS)s
+816(from)ms
+926(directory)ms
+1119(CLIP)ms
+1240(on)ms
+1302(sun01.info.wau.nl.)ms
+8 FB
+295 145 m
+(READ_ME)s
+460(for)ms
+507(CLIP/UNIX)ms
+681(\(READ_ME.DOC/2.119/November 17, 1993\))ms
+12 FB
+2100 145 m
+(3)s
+50 2 2130 157 li
+50 2 2045 157 li
+endpage
+%%Page: Contents-0 4
+begpage
+12 FAB
+1028 3136 m
+(Table of Contents)s
+12 FB
+295 3039 m
+(1 Directory CLIP/UNIX )s
+821(..............................................................................................)ms
+2019 3039 m
+(1)s
+295 2939 m
+(2 Installing CLiP )s
+683(.........................................................................................................)ms
+2019 2939 m
+(1)s
+295 2839 m
+(3 A quick installation test )s
+858(...........................................................................................)ms
+2019 2839 m
+(1)s
+295 2739 m
+(4 What you should know )s
+846(............................................................................................)ms
+2019 2739 m
+(2)s
+295 2639 m
+(5 Using CLiP ... )s
+658(...........................................................................................................)ms
+2019 2639 m
+(2)s
+365 2589 m
+(5.1 ... via clp.csh and clp_env.csh )s
+1082(.........................................................................)ms
+2019 2589 m
+(2)s
+365 2539 m
+(5.2 ... via cl.csh )s
+720(......................................................................................................)ms
+2019 2539 m
+(3)s
+295 2439 m
+(6 Specimen INI-files )s
+746(....................................................................................................)ms
+2019 2439 m
+(3)s
+295 2339 m
+(7 References )s
+583(.................................................................................................................)ms
+2019 2339 m
+(3)s
+8 FB
+295 135 m
+(READ_ME for CLIP/UNIX \(READ_ME.DOC/2.119/November 17, 1993\))s
+12 FB
+2111 135 m
+(i)s
+50 2 2130 147 li
+50 2 2056 147 li
+endpage
+%%Trailer
+enddocument
+%%Pages: 4
+%%DocumentFonts:
+%%+ Helvetica-Bold
+%%+ Times-Roman
+%%EOF
+ \ No newline at end of file
diff --git a/web/clip/unix/read_me.txt b/web/clip/unix/read_me.txt
new file mode 100644
index 0000000000..868cd91647
--- /dev/null
+++ b/web/clip/unix/read_me.txt
@@ -0,0 +1,148 @@
+
+ READ_ME for CLIP/UNIX
+ *********************
+
+
+1 Directory CLIP/UNIX
+
+The directory contains the files
+ a. read_me.ps, read_me.txt (this file).
+ b. clip.pas, clip, CLIP_MSG (CLiP system).
+ c. cl.csh, clp.csh, clp_env.csh, (user support).
+ d. ex01_a.ps, ex01_a.asc, ex01_a.ini, ex01_a.pas,
+ ex01_b.ps, ex01_b.asc, ex01_b.ini, ex01_b.pas (example).
+ e. ada.ini, c.ini, fortran.ini, lisp.ini, modula.ini, pascal.ini
+ (template INI-files for some languages).
+ f. manual.ps, manual.txt (manual).
+About file extensions:
+ PS-files are postscript files and represent the type-set versions of the
+ corresponding ASC or TXT-files.
+ ASC-files are derived by ASCII-export from the original word-processor
+ files (in our case Lotus Manuscript).
+ TXT-files are ASCII versions of the corresponding PS-files. They are
+ slightly modified to improve the lay-out. TXT-files are a service for
+ people who have no easy access to a postscript printer.
+
+2 Installing CLiP
+
+ a. Use FTP to copy the CLiP system to your local site. Note that clip is
+ our own executable version of clip.pas, and it should be FTP-ed in
+ binary mode.
+ b. Create a directory for the CLiP-system. This directory will be
+ referred as the CLIP_DIR. Let us assume this directory is named
+ ~/clip
+ c. Copy clip.pas to your CLIP_DIR and compile. Since it is written in
+ ISO-Pascal there should be no problem. We use the Sun Pascal 2.0
+ compiler under operating system SunOS 4.2 running on Sun4c (Sun1,
+ Sun1+, Sun2) hardware. If you have problems you may want to try the
+ binary version of clip.pas, clip, instead.
+ d. Copy the files CLIP_MSG, cl.csh, clp.csh and clp_env.csh to your
+ CLIP_DIR. Make sure the file name CLIP_MSG is in uppercase.
+ e. Make the script files executable through the command
+ % chmod +x *.csh
+
+3 A quick installation test
+
+To test if your CLiP system has been properly installed, perform the following
+steps:
+ a. Choose a test directory. Let us assume ~/test.
+ b. Copy the files ex01_a.asc, ex01_b.asc, ex01_a.ini, ex01_b.ini,
+ ex01_a.pas and ex01_b.pas to your test directory.
+ c. Type the command
+ % cl ex01_a.ini
+ to produce the file palindrome.pas. Note that ex01_a.ini locates the
+ source files as well as the target modules in the current directory.
+ d. Compare the file palindrome.pas with ex01_a.pas by means of the
+ command
+ % diff palindrome.pas ex01_a.pas
+ There should be no differences.
+
+
+ e. Now type the command
+ % cl ex01_b.ini
+ to produce a new file palindrome.pas.
+ f. Compare the new palindrome.pas with ex01_b.pas by means of the command
+ % diff palindrome.pas ex01_b.pas
+ Again there should be no differences.
+
+4 What you should know
+
+clip performs the actual module extraction on the basis of a special file,
+CLIP.INI, which tells it literally everything it has to know in order to
+perform a run. Thus CLIP.INI specifies to clip:
+ - the files it has to read (i.e. the source files),
+ - the modules it should extract (i.e. target modules),
+ - the report file,
+ - the syntax of the CLiP-lines (i.e. the lines which trigger the module
+ extraction process).
+CLIP.INI is a straight forward ASCII-file. It has a simple structure which is
+explained in section 6 of the manual. In extreme situations you may want to
+edit a CLIP.INI manually but in general it will be more convenient to use the
+procedures cl.csh, clp.csh and clp_env.csh. These routines construct a CLIP.INI
+for you and run clip immediately afterwards. They are adequate most of the
+time.
+ Whenever you decide to create an INI-file to accommodate your special
+wishes, make sure you start from an INI-file you already know to be correct.
+Also if you want to change the syntax CLiP recognizes, please study section 2
+of the manual.
+ A more extensive description of the CLiP system can be found in [1].
+
+5 Using CLiP ...
+
+The batch procedures below are designed to make your working directories
+independent of the CLIP_DIR. Remark that the original batch files assume that
+your CLIP_DIR is the directory user/clip.
+
+5.1 ... via clp.csh and clp_env.csh
+
+These procedures if one wants to extract all modules from up to 8 source files
+which are passed as parameters. First use clp_env.csh to define explicitly the
+source file directory and the target module directory, for example
+ % clp_env.csh /user/test /user/test
+defines the subdirectory test from the directory user as directory for the
+source files as well as for the target modules. With this setting the command
+ % clp.csh file1.asc file2.asc file3.asc
+will process the files /user/test/file1.asc etc. and extract all modules it
+encounters towards the directory /user/test.
+ All setting are assumed by the batch procedure. Originally it is tailored
+to Pascal programs of the sort displayed in the example ex01 (i.e. the files
+ex01_?.*) on the directory clip. To adjust clp.csh to another syntax one should
+be familiar with section 2 of the manual. Only modify the following lines
+clp.csh for this purpose:
+
+ line 15: Replace (* with the COMM-START of your choice.
+ line 16: Replace *) with the COMM-END of your choice.
+ line 17: Replace * with the CLIP-CHAR of your choice.
+ line 18: Replace ENDOF with the END-STRING of your choice.
+ line 19: Replace # with the OPTION-MARKER of your choice.
+ line 22: Replace clip.rpt with the report file name of your choice.
+
+
+Note that the characters "a"-"z", "A"-"Z", "0"-"9" and "." do not qualify as
+characters for COMM-START, COMM-END, CLIP-CHAR or OPTION-MARKER while the
+END-STRING should be chosen from letters only.
+
+5.2 ... via cl.csh
+
+cl.csh is the fastest way to run clip and will probably be invoked most often.
+It can be used whenever an INI-file already is available. It copies the
+information of the specified INI-file to CLIP.INI and runs the clip program.
+ The INI-file to be used is passed as an optional parameter. If no INI-file
+is specified, cl.csh simply assumes CLIP.INI. For example
+ % cl ex01_a.ini
+will copy the file ex01_a.ini to CLIP.INI and run clip. However the command
+ % cl
+immediately runs clip with the assumption that a CLIP.INI already exists.
+
+6 Specimen INI-files
+
+The files ada.ini, c.ini, fortran.ini, lisp.ini, modula.ini and pascal.ini
+suggest a suitable CLiP syntax for a start. To customize clp.csh for such a
+syntax, refer to the previous section and to section 6 of the manual.
+
+7 References
+
+Ammers E.W. van, M.R. Kramer (1993), The CLiP Style of Literate Programming
+ (submitted for publication). Anonymously ftp-able as CLIP_STYLE.PS,
+ CLIP_STYLE_A.PS and CLIP_STYLE_B.PS from directory CLIP on
+ sun01.info.wau.nl.
diff --git a/web/clip/vax_vms/ada.ini b/web/clip/vax_vms/ada.ini
new file mode 100644
index 0000000000..4c9ceb12c5
--- /dev/null
+++ b/web/clip/vax_vms/ada.ini
@@ -0,0 +1,21 @@
+This file contains data that is needed to run CLiP
+And is generated by CLiP_MENU
+Modifying this file at own risk.
+Using CLiP_MENU is definitely recommended.
+
+INTERACTIVE_MODE Mode (INTERACTIVE/DEBUG/HELPFUL/AUTO)
+NO Interactive fault correction (YES/NO)
+BOTH Error message destination (TERMINAL/REPORTFILE/BOTH/NONE)
+-- Left comment string
+-- Right comment string
++ Command character
+ENDOF END string
+# Option marker
+OMITTED The specified modules are (OMITTED/EXTRACTED)
+------------ REPORT FILE -----------
+CLIP.RPT
+------------ INPUT FILES -----------
+------------ MODULES ---------------
+------------ MODULE DIRECTORY ------
+
+------------ END OF INI FILE -------
diff --git a/web/clip/vax_vms/c.ini b/web/clip/vax_vms/c.ini
new file mode 100644
index 0000000000..dad00ccd0a
--- /dev/null
+++ b/web/clip/vax_vms/c.ini
@@ -0,0 +1,21 @@
+This file contains data that is needed to run CLiP
+And is generated by CLiP_MENU
+Modifying this file at own risk.
+Using CLiP_MENU is definitely recommended.
+
+INTERACTIVE_MODE Mode (INTERACTIVE/DEBUG/HELPFUL/AUTO)
+NO Interactive fault correction (YES/NO)
+BOTH Error message destination (TERMINAL/REPORTFILE/BOTH/NONE)
+/* Left comment string
+*/ Right comment string
+* Command character
+ENDOF END string
+# Option marker
+OMITTED The specified modules are (OMITTED/EXTRACTED)
+------------ REPORT FILE -----------
+CLIP.RPT
+------------ INPUT FILES -----------
+------------ MODULES ---------------
+------------ MODULE DIRECTORY ------
+
+------------ END OF INI FILE -------
diff --git a/web/clip/vax_vms/cl.com b/web/clip/vax_vms/cl.com
new file mode 100644
index 0000000000..9de0bcbd94
--- /dev/null
+++ b/web/clip/vax_vms/cl.com
@@ -0,0 +1,13 @@
+$! CL.COM: Runs the second pass of CLiP, CLIP_2, with an !$
+$! optional INI-file. !$
+$! PAR1: Optional INI-file for this run. Default CLIP.INI. !$
+$!
+$ IF P1 .NES. "" THEN COPY 'P1 CLiP.INI
+$ DEFINE/USER CLiP_MSG CLiP_DIR:CLiP_MSG.DAT
+$ ON ERROR THEN GOTO CLEAN_UP
+$ DEF/USER SYS$INPUT SYS$COMMAND
+$ RUN CLiP_DIR:CLIP_2.EXE
+$ EXIT
+$CLEAN_UP:
+$! IF P1 .NES. "" THEN DELETE CLiP.INI;
+$ EXIT
diff --git a/web/clip/vax_vms/clip.com b/web/clip/vax_vms/clip.com
new file mode 100644
index 0000000000..852aa8afff
--- /dev/null
+++ b/web/clip/vax_vms/clip.com
@@ -0,0 +1,16 @@
+$! CLIP.COM: Runs the complete CLiP system, i.e. first and seconc !$
+$! pass. On problems with the first pass the second one is !$
+$! not executed. !$
+$! PAR1: Ooptional INI-file. Default is CLIP.INI. !$
+$!
+$ IF P1 .EQS. ""
+$ THEN DEFINE/USER_MODE STRT_INIFILE CLIP.INI
+$ ELSE DEFINE/USER_MODE STRT_INIFILE 'P1
+$ ENDIF
+$!
+$ DEFINE/USER_MODE SYS$INPUT SYS$COMMAND
+$ ON ERROR GOTO SKIP_PASS2
+$ RUN CLIP_DIR:CLiP_1.EXE
+$ CL
+$SKIP_PASS2:
+$ EXIT
diff --git a/web/clip/vax_vms/clip_1.com b/web/clip/vax_vms/clip_1.com
new file mode 100644
index 0000000000..6cce1e1c9e
--- /dev/null
+++ b/web/clip/vax_vms/clip_1.com
@@ -0,0 +1,12 @@
+$! COM-file to run CLIP_1.EXE after defining the logical STRT_INIFILE
+$! Optional parameter: INI-file; default is CLIP.INI
+$! Example call: $ @CLIP_1 EXAMPLE.INI
+$!
+$ IF P1 .EQS. ""
+$ THEN DEFINE/USER_MODE STRT_INIFILE CLIP.INI
+$ ELSE DEFINE/USER_MODE STRT_INIFILE 'P1
+$ ENDIF
+$!
+$ DEFINE/USER_MODE SYS$INPUT SYS$COMMAND
+$ RUN CLIP_DIR:CLIP_1.EXE
+$ EXIT
diff --git a/web/clip/vax_vms/clip_msg.dat b/web/clip/vax_vms/clip_msg.dat
new file mode 100644
index 0000000000..3359871417
--- /dev/null
+++ b/web/clip/vax_vms/clip_msg.dat
@@ -0,0 +1,36 @@
+ SCAN_FILES (2.2): A line of category L2 is not allowed in passive mode.%
+ SCAN_FILES (2.3): A line of category L3 in not allowed in passive mode.%
+ SCAN_LINE (3a): An CLIP_LPAR is found but not an CLIP_RPAR.%
+ SCAN_LINE (3b): An CLIP_RPAR is found but not an CLIP_LPAR.%
+ SCAN_LINE (4a): Only one CLIP command character is found.
+ Line treated as an L3.%
+ SCAN_LINE (4b): Only one CLIP command character is found.
+ Line treated as an L3.%
+ BUILD_C_S (12): Line cannot be paste to a segment.%
+ BUILD_C_S (22): Stub not correctly closed before end of file.%
+ SCAN_OPTIONS (3.1.1): Missing argument option @. Option ignored.%
+ SCAN_OPTIONS (3.1.2)a: Illegal abbreviation @. Supply more characters.%
+ SCAN_OPTIONS (3.1.2)b: Unknown option @. Option ignored.%
+ SCAN_OPTIONS (3.1.3)a: @ Quoted string not terminated for end of line.
+ Option FILE ignored.%
+ SCAN_OPTIONS (3.1.3)b: @ Quoted string expected. Option FILE ignored.%
+ SCAN_OPTIONS (3.1.4): Illegal argument @ Indent option. Option ignored.%
+ SCAN_OPTIONS (3.1.5)a: Comment @ not yet implemented.%
+ SCAN_OPTIONS (3.1.5)b: Illegal argument @ COMMENT-option. Option ignored.%
+ SCAN_OPTIONS (3.2.1)a: @ quoted string not terminated for end of line.
+ Option FILE ignored.%
+ SCAN_OPTIONS (3.2.1)b: Quoted string expected. Option FILE ignored.%
+ SCAN_OPTIONS (3.2.2): Illegal argument @ Indent option. Option ignored.%
+ SCAN_OPTIONS (3.2.3)a: Comment @ not yet implemented.%
+ SCAN_OPTIONS (3.2.3)b: Illegal argument @ COMMENT-option. Option ignored.%
+ SCAN_OPTIONS (3.2.4): Illegal character @ in line. Option marker expected.%
+ SCAN_OPTIONS (5a): Missing argument @-option . Option ignored.%
+ SCAN_OPTIONS (5b): Stub option @ not allowed in slot. Option ignored.%
+ SCAN_OPTIONS (5c): Slot option @ not allowed in stub. Option ignored.%
+ SCAN_OPTIONS (5d): Any combination of the options FILE, LEADER, TRAILER,
+ SEPARATOR or DEFAULT in one segment is illegal. Defaults assumed.%
+ ANALYSE (4.1): Multiple stubs in single slot. SLOT set to multiple.%
+ ORDER_TWINS (1.5): LEADER, TRAILER and/or SEPARATOR stubs found without
+ ordinary stubs for this slot. Stubs ignored.%
+ GENMOD (2.1): Error opening file @. Module will not be generated.%
+ GENMOD (4.1): Error closing file @.%
diff --git a/web/clip/vax_vms/clp.com b/web/clip/vax_vms/clp.com
new file mode 100644
index 0000000000..131b37f6b0
--- /dev/null
+++ b/web/clip/vax_vms/clp.com
@@ -0,0 +1,48 @@
+$! CLP.COM: Commandfile for quick CLiP run on files specified by !$
+$! up to eight parameters. Generates all modules. !$
+$! PAR1 - PAR8: Sourcefiles to be scanned by CLiP. !$
+$! Note 1: !$
+$! The global logicals CLiP$SRC_DIR and CLiP$MOD_DIR are used !$
+$! to determine the source and target directories, respectively. !$
+$! Use the CLIP_ENV command procedure to set these logicals. !$
+$! NOTE 2:
+$! This command-procedure is tailored to Pascal-use of CLiP. !$
+$! The "Left/right comment string" have to be edited to accomodate !$
+$! other languages. !$
+$!
+$ OPEN/WRITE CLIP_INI CLIP.INI
+$ WRITE CLIP_INI "This file contains data that is needed to run CLiP_2"
+$ WRITE CLIP_INI "And is generated by CLiP_1"
+$ WRITE CLIP_INI "Modifying this file at own risk."
+$ WRITE CLIP_INI "Using CLiP_1 is definitely recommended."
+$ WRITE CLIP_INI ""
+$ WRITE CLIP_INI "INTERACTIVE_MODE Mode (INTERACTIVE/DEBUG/HELPFUL/AUTO)"
+$ WRITE CLIP_INI "NO Interactive fault correction (YES/NO)"
+$ WRITE CLIP_INI "FILE Error message destination (TERMINAL/FILE/BOTH/NONE)"
+$ WRITE CLIP_INI "(* Left comment string"
+$ WRITE CLIP_INI "*) Right comment string"
+$ WRITE CLIP_INI "* Command character"
+$ WRITE CLIP_INI "ENDOF END string"
+$ WRITE CLIP_INI "# Option marker"
+$ WRITE CLIP_INI "OMITTED The specified modules are (OMITTED/EXTRACTED)"
+$ WRITE CLIP_INI "------------ REPORT FILE -----------"
+$ WRITE CLIP_INI "CLIP.RPT"
+$ WRITE CLIP_INI "------------ INPUT FILES -----------"
+$ CLIP_SRC_DIR = F$TRNLNM("CLIP$SRC_DIR")
+$ IF P1 .NES. "" THEN WRITE CLIP_INI CLIP_SRC_DIR+P1
+$ IF P2 .NES. "" THEN WRITE CLIP_INI CLIP_SRC_DIR+P2
+$ IF P3 .NES. "" THEN WRITE CLIP_INI CLIP_SRC_DIR+P3
+$ IF P4 .NES. "" THEN WRITE CLIP_INI CLIP_SRC_DIR+P4
+$ IF P5 .NES. "" THEN WRITE CLIP_INI CLIP_SRC_DIR+P5
+$ IF P6 .NES. "" THEN WRITE CLIP_INI CLIP_SRC_DIR+P6
+$ IF P7 .NES. "" THEN WRITE CLIP_INI CLIP_SRC_DIR+P7
+$ IF P8 .NES. "" THEN WRITE CLIP_INI CLIP_SRC_DIR+P8
+$ WRITE CLIP_INI "------------ MODULES ---------------"
+$ WRITE CLIP_INI "------------ MODULE DIRECTORY ------"
+$ CLIP_MOD_DIR = F$TRNLNM("CLIP$MOD_DIR")
+$ WRITE CLIP_INI CLIP_MOD_DIR
+$ WRITE CLIP_INI "------------ END OF INI FILE -------"
+$ CLOSE CLIP_INI
+$ CL
+$! DELETE CLIP.INI.
+$ EXIT
diff --git a/web/clip/vax_vms/clp_env.com b/web/clip/vax_vms/clp_env.com
new file mode 100644
index 0000000000..232b759419
--- /dev/null
+++ b/web/clip/vax_vms/clp_env.com
@@ -0,0 +1,12 @@
+$! CLP_ENV.COM: Sets the logicals CLiP$SRC_DIR and CLiP$MOD_DIR used !$
+$! by the CLP command procedure. !$
+$! PAR1: Directory specification of source files. !$
+$! PAR2: Directory specification of terget modules. !$
+$!
+$ IF P1 .NES. "" THEN GOTO PARAMS_OK
+$ READ/PROMPT="CLiP source directory? " SYS$COMMAND P1
+$ READ/PROMPT="CLiP module directory? " SYS$COMMAND P2
+$ PARAMS_OK:
+$ DEFINE CLiP$SRC_DIR 'P1
+$ DEFINE CLiP$MOD_DIR 'P2
+$ EXIT
diff --git a/web/clip/vax_vms/ex01_a.asc b/web/clip/vax_vms/ex01_a.asc
new file mode 100644
index 0000000000..adbf2bb4fb
--- /dev/null
+++ b/web/clip/vax_vms/ex01_a.asc
@@ -0,0 +1,274 @@
+
+
+
+ Example 01: Palindrome filter
+
+
+
+
+
+In this appendix we illustrate the CLiP style of literate programming by a
+program to filter palindromic lines from an input file.
+ Two files are involved: the program module (*PALINDROME.PAS*) and a test
+file (*TESTDATA.IN*).
+
+
+A.1. Specification
+
+A palindrome is a sentence with the property that the letters from left to
+right, read the same as from right to left. In the comparison uppercase and
+lowercase letters are considered to be equivalent and all other characters are
+simply ignored. Hence an empty sentence is a palindrome. Other examples are:
+
+ (************* #file "TESTDATA.IN" #comment off **************)
+ Ada
+ 1234567
+ doremifasolosafimerod
+ (******* Testdata #multiple *******)
+ (***************** End of TESTDATA.PAS ************************)
+
+The following sentences do not qualify as a palindrome.
+
+ (******* Testdata #quick *******)
+ Mr. Clinton won the elections over Mr. Bush.
+ This line is not palindromic.
+ Aabbccdd Aabbccdd Aabbccdd Aabbccdd
+ Abracadabra
+ supercalafragilisiticexpielecdosia
+
+The following are examples of more sophisticated palindromes.
+
+ (******* Testdata #quick *******)
+ Able was I, ere I saw Elba.
+ A man, a plan, a canal, Panama.
+ Norma is as selfless as I Am, Ron.
+
+Note that the famous Dutch sentence
+
+ (******* Testdata #quick *******)
+ Koos Eekfeen keek maar door rood kerkraam, maar krek door rood raam keek
+ neef Kees ook.
+
+will not be recognized as a plindrome since it occupies two lines.
+ The program *PALINDROME* reads an input file, filters the lines that are
+palindromic and writes them to an output file.
+
+A.2. Communication with the outside world
+
+The program conforms to the general template of a Pascal program. We introduce
+the files *IN_FILE* and *OUT_FILE* to define its communication with the outside
+world. The actual files have to be specified at run-time. Thus we have
+
+ (*************** #file "PALINDROME.PAS" ***********************)
+ (****************************************************************)
+ (* Program: Palindrome filter program. *)
+ (* Purpose: To filter the palindromic lines from a given input *)
+ (* file to a specified output file. *)
+ (****************************************************************)
+ PROGRAM PALINDROME (INPUT, OUTPUT, IN_FILE, OUT_FILE);
+
+ (******* Palindrome constants #multiple #comment off *******)
+ (******* Palindrome types #multiple #comment off *******)
+ VAR
+ IN_FILE, OUT_FILE: TEXT;
+ (******* Palindrome variables #multiple #comment off *******)
+
+ BEGIN
+ OPEN (IN_FILE, 'TESTDATA.IN', HISTORY := OLD); RESET (IN_FILE);
+ OPEN (OUT_FILE, 'TESTDATA.OUT', HISTORY := NEW); REWRITE (OUT_FILE);
+
+ (***************** Palindrome (body) **********************)
+ (** Copy the lines of the IN_FILE that are palindromic to **)
+ (** the OUT_FILE. **)
+ (************************************************************)
+
+ END (*PALINDROME*).
+ (******************* End of PALINDROME.PAS ********************)
+
+To prepare the module for future declarations of constants and types we have
+
+ (******* Palindrome constants #leader #quick *******)
+ CONST
+ (******* Palindrome types #leader #quick *******)
+ TYPE
+
+A.3. Processing of the files
+
+The program processes *IN_FILE* line by line. The idea is to buffer an exact
+copy of the current line in *IN_LINE*, while at the same time its letters are
+buffered in *LETTERS*. So *LETTERS* will be empty if the line holds no letters
+at all, in which case the line is considered to be palindromic by definition.
+ We choose the buffers *IN_LINE* and *LETTERS* to be of the same type, *
+TEXT_LINE*, which we will not specify in detail right now. For this purpose we
+introduce a type *ABSTRACT*.
+
+ (******* Palindrome types #quick *******)
+ ABSTRACT = (DEFINED, UNDEFINED);
+
+*TEXT_LINE* will temporarily be declared *ABSTRACT* and its details will be
+defined later. Thus the declaration of *TEXT_LINE*
+
+ (******* Palindrome types *******)
+ (******* Declaration of TEXT_LINE *******)
+ (***************** End of Palindrome types ********************)
+
+is temporarily satisfied with the type *ABSTRACT*.
+
+ (******* Declaration of TEXT_LINE #quick #default *******)
+ TEXT_LINE = ABSTRACT;
+
+The declaration for the variables *IN_LINE* and *LETTERS* becomes
+
+ (******* Palindrome variables #quick *******)
+ IN_LINE,
+ LETTERS: TEXT_LINE;
+
+We have to test *LETTERS* in order to decide whether or not *IN_LINE* contains
+a palindrome. The result of this test is flagged by *IS_PALINDROME*, for which
+we introduce the declaration
+
+ (******* Palindrome variables #quick *******)
+ IS_PALINDROME: BOOLEAN;
+
+Now the body of the Palindrome filter may be expanded as
+
+ (***************** Palindrome (body) **********************)
+ (** Copy the lines of the IN_FILE that are palindromic to **)
+ (** the OUT_FILE. **)
+ WHILE NOT EOF (IN_FILE) DO
+ BEGIN
+ (***************** Palindrome (1) *********************)
+ (** Read a line from IN_FILE into IN_LINE. The letters **)
+ (** of this line are copied to LETTERS. **)
+ (********************************************************)
+
+ READLN (IN_FILE);
+
+ (***************** Palindrome (2) *********************)
+ (** Test palindromicity of LETTERS. Set IS_PALINDROME **)
+ (** to reflect the result of the test. **)
+ (********************************************************)
+
+
+ IF IS_PALINDROME THEN
+ BEGIN
+ (***************** Palindrome (3) *****************)
+ (** Write IN_LINE to OUT_FILE. **)
+ (****************************************************)
+
+ WRITELN (OUT_FILE);
+ END (*IF*);
+ END (*WHILE*);
+ (************* End of Palindrome (body) *******************)
+
+A.4. Choosing the structure of *IN_LINE* and *LETTERS*
+
+Before we can proceed we need to establish a structure for the objects *IN_LINE*
+ and *LETTERS*. Thus we define *TEXT_LINE* as a structure with two components.
+The first component is an array, *CHARS*, which contains the characters to be
+buffered. The second component, *LENGTH*, indicates which part of the array is
+actually occupied. The maximum number of characters that can be buffered by the
+structure is determined by the length, *MAX_L*, of the array. *MAX_L* serves as
+an implementation parameter.
+
+ (******* Palindrome constants #quick *******)
+ MAX_L = 132;
+
+ (******* Declaration of TEXT_LINE #quick *******)
+ TEXT_LINE = RECORD
+ CHARS: ARRAY[1..MAX_L] OF CHAR;
+ LENGTH: 0..MAX_L;
+ END (*RECORD*);
+
+A.5. Reading a line
+
+For efficiency reasons we fill *IN_LINE* and *LETTERS* simultaneously.
+Therefore we buffer every character that is read from *IN_FILE* in the variable
+*IN_CHAR*.
+
+ (******* Palindrome variables #quick *******)
+ IN_CHAR: CHAR;
+
+Only when *IN_CHAR* turns out to be a letter it is copied to *LETTERS*. Since
+this process is crucial for the overall operation, we make provisions for some
+debugging code here.
+
+ (***************** Palindrome (1) *********************)
+ (** Read a line from IN_FILE into IN_LINE. The letters **)
+ (** of this line are copied to LETTERS. **)
+ IN_LINE.LENGTH := 0;
+ LETTERS.LENGTH := 0;
+ WITH IN_LINE DO
+ WHILE NOT EOLN (IN_FILE) DO
+ BEGIN
+ READ (IN_FILE, IN_CHAR);
+ LENGTH := LENGTH + 1;
+ CHARS[LENGTH] := IN_CHAR;
+ IF IN_CHAR IN ['A'..'Z', 'a'..'z'] THEN
+ WITH LETTERS DO
+ BEGIN
+ LENGTH := LENGTH + 1;
+ CHARS[LENGTH] := IN_CHAR;
+ END (*WITH/IF*);
+ END (*WHILE/WITH*);
+
+ (********************* Palindrome (test) **************)
+ (** Check contents of IN_LINE and LETTERS. #optional **)
+ (********************************************************)
+
+ (***************** End of Palindrome (1) **************)
+
+A.6. Testing for palindromicity
+
+We test the palindromicity of *LETTERS* in two steps. First we transform the
+contents of *LETTERS* to uppercase and then we compare the characters of *
+LETTERS* pairwise. The comparison is done starting with the most outside
+characters and progressing inward. The string is assumed a palindrome until the
+opposite is proven through a pair of different characters. With the local
+counter
+
+ (******* Palindrome variables #quick *******)
+ I: INTEGER;
+
+we keep track of the comparing process. Now *Palindrome (2)* can be expanded as
+
+ (***************** Palindrome (2) *********************)
+ (** Test palindromicity of LETTERS. Set IS_PALINDROME **)
+ (** to reflect the result of the test. **)
+ WITH LETTERS DO
+ BEGIN
+ (* Transform lowercase to uppercase. *)
+ FOR I := 1 TO LENGTH DO
+ IF CHARS[I] IN ['a'..'z']
+ THEN CHARS[I] :=
+ CHR(ORD(CHARS[I]) - ORD('a') + ORD('A'));
+
+ (* Perform the palindromicity test. *)
+ IS_PALINDROME := TRUE;
+ I := 1;
+ WHILE IS_PALINDROME AND (I <= LENGTH DIV 2) DO
+ IF CHARS[I] = CHARS[LENGTH-I+1] THEN
+ I := I + 1
+ ELSE
+ IS_PALINDROME := FALSE;
+ END (*WITH*);
+ (***************** End of Palindrome (2) **************)
+
+A.7. Writing the palindrome
+
+The only remaining action is to write the contents of *IN_LINE*. Again we need
+a local counter
+
+ (******* Palindrome variables #quick *******)
+ J: INTEGER;
+
+The writing proceeds straight forward.
+
+ (***************** Palindrome (3) *****************)
+ (** Write IN_LINE to OUT_FILE. **)
+ WITH IN_LINE DO
+ BEGIN
+ FOR J := 1 TO LENGTH DO
+ WRITE (OUT_FILE, CHARS[J]);
+ END (*WITH*);
+ (************* End of Palindrome (3) **************)
diff --git a/web/clip/vax_vms/ex01_a.ini b/web/clip/vax_vms/ex01_a.ini
new file mode 100644
index 0000000000..36ae5c3dd6
--- /dev/null
+++ b/web/clip/vax_vms/ex01_a.ini
@@ -0,0 +1,26 @@
+This file contains data that is needed to run CLIP_2
+And is generated by CLIP_1
+Modifying this file at own risk.
+Using CLIP_1 is definitely recommended.
+
+INTERACTIVE_MODE Mode (INTERACTIVE/DEBUG/HELPFUL/AUTO)
+YES Interactive fault correction (YES/NO)
+BOTH Error message destination (TERMINAL/REPORTFILE/BOTH/NONE)
+(* Left comment string
+*) Right comment string
+* Command character
+ENDOF END string
+# Option marker
+EXTRACTED The specified modules are (OMITTED/EXTRACTED)
+------------ REPORT FILE -----------
+CLIP.RPT
+------------ INPUT FILES -----------
+EX01_A.ASC
+------------ MODULES ---------------
+
+PALINDROME.PAS
+
+TESTDATA.IN
+------------ MODULE DIRECTORY ------
+[]
+------------ END OF INI FILE -------
diff --git a/web/clip/vax_vms/ex01_a.pas b/web/clip/vax_vms/ex01_a.pas
new file mode 100644
index 0000000000..1f82144d53
--- /dev/null
+++ b/web/clip/vax_vms/ex01_a.pas
@@ -0,0 +1,102 @@
+ (*************** #file "PALINDROME.PAS" ***********************)
+ (****************************************************************)
+ (* Program: Palindrome filter program. *)
+ (* Purpose: To filter the palindromic lines from a given input *)
+ (* file to a specified output file. *)
+ (****************************************************************)
+ PROGRAM PALINDROME (INPUT, OUTPUT, IN_FILE, OUT_FILE);
+
+ CONST
+ MAX_L = 132;
+ TYPE
+ ABSTRACT = (DEFINED, UNDEFINED);
+ TEXT_LINE = RECORD
+ CHARS: ARRAY[1..MAX_L] OF CHAR;
+ LENGTH: 0..MAX_L;
+ END (*RECORD*);
+ VAR
+ IN_FILE, OUT_FILE: TEXT;
+ IN_LINE,
+ LETTERS: TEXT_LINE;
+ IS_PALINDROME: BOOLEAN;
+ IN_CHAR: CHAR;
+ I: INTEGER;
+ J: INTEGER;
+
+ BEGIN
+ OPEN (IN_FILE, 'TESTDATA.IN', HISTORY := OLD); RESET (IN_FILE);
+ OPEN (OUT_FILE, 'TESTDATA.OUT', HISTORY := NEW); REWRITE (OUT_FILE);
+
+ (***************** Palindrome (body) **********************)
+ (** Copy the lines of the IN_FILE that are palindromic to **)
+ (** the OUT_FILE. **)
+ WHILE NOT EOF (IN_FILE) DO
+ BEGIN
+ (***************** Palindrome (1) *********************)
+ (** Read a line from IN_FILE into IN_LINE. The letters **)
+ (** of this line are copied to LETTERS. **)
+ IN_LINE.LENGTH := 0;
+ LETTERS.LENGTH := 0;
+ WITH IN_LINE DO
+ WHILE NOT EOLN (IN_FILE) DO
+ BEGIN
+ READ (IN_FILE, IN_CHAR);
+ LENGTH := LENGTH + 1;
+ CHARS[LENGTH] := IN_CHAR;
+ IF IN_CHAR IN ['A'..'Z', 'a'..'z'] THEN
+ WITH LETTERS DO
+ BEGIN
+ LENGTH := LENGTH + 1;
+ CHARS[LENGTH] := IN_CHAR;
+ END (*WITH/IF*);
+ END (*WHILE/WITH*);
+
+ (********************* Palindrome (test) **************)
+ (** Check contents of IN_LINE and LETTERS. #optional **)
+ (********************************************************)
+
+ (***************** End of Palindrome (1) **************)
+
+ READLN (IN_FILE);
+
+ (***************** Palindrome (2) *********************)
+ (** Test palindromicity of LETTERS. Set IS_PALINDROME **)
+ (** to reflect the result of the test. **)
+ WITH LETTERS DO
+ BEGIN
+ (* Transform lowercase to uppercase. *)
+ FOR I := 1 TO LENGTH DO
+ IF CHARS[I] IN ['a'..'z']
+ THEN CHARS[I] :=
+ CHR(ORD(CHARS[I]) - ORD('a') + ORD('A'));
+
+ (* Perform the palindromicity test. *)
+ IS_PALINDROME := TRUE;
+ I := 1;
+ WHILE IS_PALINDROME AND (I <= LENGTH DIV 2) DO
+ IF CHARS[I] = CHARS[LENGTH-I+1] THEN
+ I := I + 1
+ ELSE
+ IS_PALINDROME := FALSE;
+ END (*WITH*);
+ (***************** End of Palindrome (2) **************)
+
+
+ IF IS_PALINDROME THEN
+ BEGIN
+ (***************** Palindrome (3) *****************)
+ (** Write IN_LINE to OUT_FILE. **)
+ WITH IN_LINE DO
+ BEGIN
+ FOR J := 1 TO LENGTH DO
+ WRITE (OUT_FILE, CHARS[J]);
+ END (*WITH*);
+ (************* End of Palindrome (3) **************)
+
+ WRITELN (OUT_FILE);
+ END (*IF*);
+ END (*WHILE*);
+ (************* End of Palindrome (body) *******************)
+
+ END (*PALINDROME*).
+ (******************* End of PALINDROME.PAS ********************)
diff --git a/web/clip/vax_vms/ex01_a.ps b/web/clip/vax_vms/ex01_a.ps
new file mode 100644
index 0000000000..196a5f6707
--- /dev/null
+++ b/web/clip/vax_vms/ex01_a.ps
@@ -0,0 +1,1419 @@
+%!PS-Adobe-2.0
+%%DocumentFonts: (atend)
+%%Title: F:\\LPT\\VMS\\EX01_A.DOC
+%%Creator: Lotus Manuscript
+%%For: EWvA, MRK
+%%CreationDate: September 29, 1993
+%%Pages: (atend)
+%%BoundingBox: 0 0 595 841
+%%EndComments
+% PostScript Prologue (initialization) for Manuscript
+% Copyright (c) 1985,1986,1987,1988 Lotus Development Corporation
+% There is no user servicable code in this file.
+
+% set timeouts to infinite
+statusdict begin
+0 setjobtimeout
+/manualfeedtimeout 3600 def
+/waittimeout 0 def
+end
+
+% correct bug correction in rev 41.0
+/idiv{div cvi}bind def
+
+% define User Dictionary
+/msdict 300 dict def msdict begin
+/bd{bind def}bind def
+
+% Define commonly used things
+/delay{usertime 5000 add{dup usertime lt{pop exit}if}loop}bd
+/mfeed{statusdict begin /manualfeed true def end}bd
+/afeed{statusdict begin /manualfeed false def end}bd
+/bfeed{ afeed statusdict begin /setpapertray where
+ {pop setpapertray}{pop} ifelse end}bd
+
+/dpi{0.24 dup scale}bd
+
+% These two are called for each page
+/inpage false def
+/begpage{save dpi /inpage true def}bd
+/endpage{inpage {restore showpage}if }bd
+
+% for possible banner
+/fileinfo {pop pop pop}bd
+/enddocument {end} bd
+
+% these are also used by eqn & gmf
+/ld{load def}bd
+/x/exch ld
+/cu{300 mul 72 div}bd
+/m/moveto ld
+/t/translate ld
+/rm/rmoveto ld
+/cp/currentpoint ld
+/st/stroke ld
+/ln/lineto ld
+/rlt/rlineto ld
+/slw/setlinewidth ld
+
+/ff/findfont ld
+/scf/scalefont ld
+/sf/setfont ld
+/fs{x /pt x def ff pt cu scf sf}bd
+
+% linedraw
+/li{4 2 roll setlinewidth 3 1 roll moveto 0.0 rlineto st}bd
+
+% outline factor
+/olwid 40.0 def
+% stroke width for outline
+/uoslw {pt cu x div slw}bd
+% relative horizontal move
+/xm{x currentpoint pop sub 0.0 rmoveto}bd
+
+% The basic show
+/s/show ld
+% move horizontal and show
+/ms{xm s}bd
+
+% variations
+% outline show - first printer attribute
+/ppss{dup cp 3 -1 roll false charpath st
+x 3 -1 roll stringwidth pop add x moveto}bd
+/pss{olwid uoslw { ( ) dup 0 4 -1 roll put ppss}forall}bd
+/ps{pss}bd
+/mps{xm ps}bd
+
+% graybox show - second printer attribute
+/gb{cp 3 -1 roll pt cu dup 4 div neg 0 x rm dup 0 x rlt x 0 rlt
+neg 0 x rlt closepath currentgray .9 setgray fill setgray m}bd
+/usi{dup stringwidth pop gb}bd
+/us{usi s}bd
+/xum{x cp pop sub dup gb 0 rmoveto}bd
+
+% combinations of PD1 and PD2
+/ups{usi pss}bd
+/mups{xm ups}bd
+/mus{xm us}bd
+
+% define a new encoding vector (code page 850 based)
+/PC 256 array def
+StandardEncoding PC copy pop
+
+/dotaccent/bullet
+/quotesingle/quotedblleft/quotedblright/quotesinglbase
+/quotedblbase/guilsinglleft/guilsinglright/.notdef
+/ellipsis/perthousand/.notdef/.notdef/paragraph/section/dagger/daggerdbl
+/OE/oe/fi/fl/endash/emdash/fraction/Ydieresis
+PC 6 26 getinterval astore pop
+
+/Ccedilla/udieresis/eacute/acircumflex/adieresis/agrave/aring/ccedilla
+/ecircumflex/edieresis/egrave/idieresis/icircumflex/igrave/Adieresis/Aring
+/Eacute/ae/AE/ocircumflex/odieresis/ograve/ucircumflex/ugrave
+/ydieresis/Odieresis/Udieresis/oslash/sterling/Oslash/.notdef/florin
+/aacute/iacute/oacute/uacute/ntilde/Ntilde/ordfeminine/ordmasculine
+/questiondown/.notdef/.notdef/onehalf/onequarter/exclamdown/guillemotleft/guillemotright
+/.notdef/.notdef/.notdef/.notdef/.notdef/Aacute/Acircumflex/Agrave
+/.notdef/.notdef/.notdef/.notdef/.notdef/cent/yen/.notdef
+/.notdef/grave/.notdef/circumflex/tilde/.notdef/atilde/Atilde
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/currency
+/eth/Eth/Ecircumflex/Edieresis/Egrave/dotlessi/Iacute/Icircumflex
+/Idieresis/.notdef/.notdef/.notdef/.notdef/brokenbar/Igrave/.notdef
+/Oacute/germandbls/Ocircumflex/Ograve/otilde/Otilde/.notdef/thorn
+/Thorn/Uacute/Ucircumflex/Ugrave/yacute/Yacute/.notdef/acute
+/.notdef/.notdef/.notdef/threequarters/paragraph/section/.notdef/cedilla
+/ring/dieresis/periodcentered/onesuperior/threesuperior/twosuperior/.notdef/.notdef
+
+PC 128 128 getinterval astore pop
+
+% duplicate fonts with a new encoding vector
+/recd 5 dict def
+/pcft
+{recd begin
+/ncs PC def /nfn x def
+/bfn x def /bfd bfn findfont def
+/nf bfd maxlength dict def
+bfd{x dup dup /FID ne x /Encoding ne and
+{x nf 3 1 roll put}{pop pop}ifelse
+}forall
+nf/FontName nfn put
+nf/Encoding ncs put
+nfn nf definefont pop
+end}bd
+
+/fs{x /pt x def ff pt cu scf sf}bd
+
+% used by eqn
+/Times-Roman/TR pcft /Times-Bold/TRB pcft
+/Times-Italic/TRI pcft /Times-BoldItalic/TRBI pcft
+/Helvetica/HV pcft /Helvetica-Bold/HVB pcft
+/Helvetica-Oblique/HVO pcft /Helvetica-BoldOblique/HVBO pcft
+/Courier/CR pcft /Courier-Bold/CRB pcft
+/Sym{/Symbol fs}bd
+
+% Bit map image data decompression code
+/xx 0 def /yy 0 def
+/xbytes 0 def
+/lbuf 1200 string def /obuf 600 string def
+/bval <FFFEFCF8F0E0C080000103070F1F3F7F> def
+/blacks 96 string def /whites 96 string def
+0 1 95 {whites x 255 put} for
+
+/dispatch [
+{
+dup 47 le {32 sub 4 bitshift x pop 1}{
+dup 63 le {x pop 48 sub bval x get
+3 copy put x 1 add x 0} {
+dup 79 le {62 sub} {
+80 sub { 3 copy put x 1 add x } repeat 0
+}ifelse }ifelse }ifelse
+}bind
+{
+32 sub add
+3 copy put
+x 1 add x 0
+} bind
+{
+32 sub x pop add 255 0
+}bind
+{
+32 sub x pop
+3 copy getinterval
+whites 0 3 index getinterval
+x copy pop add 255 0
+}bind
+{
+32 sub x pop
+3 copy getinterval
+blacks 0 3 index getinterval
+x copy pop add 0 0
+}bind
+]def
+
+% read a raster line and unpack
+/readx{
+obuf 0 255 0
+currentfile lbuf readline pop
+{x dispatch x get exec} forall
+pop pop pop 0 xbytes getinterval}bd
+
+/mspic{
+/yy x def/xx x def
+/xbytes xx 8 idiv def
+xx yy 1 [xx 0 0 0 yy sub 0 yy]{readx}image}bd
+
+
+
+/Helvetica/fA pcft/FA{/fA fs}bd
+/Helvetica-Oblique/fAI pcft/FAI{/fAI fs}bd
+/Helvetica-Bold/fAB pcft/FAB{/fAB fs}bd
+/Helvetica-BoldOblique/fAIB pcft/FAIB{/fAIB fs}bd
+/Times-Roman/fB pcft/FB{/fB fs}bd
+/Times-Italic/fBI pcft/FBI{/fBI fs}bd
+/Times-Bold/fBB pcft/FBB{/fBB fs}bd
+/Times-BoldItalic/fBIB pcft/FBIB{/fBIB fs}bd
+/Courier/fH pcft/FH{/fH fs}bd
+/Courier-Oblique/fHI pcft/FHI{/fHI fs}bd
+/Courier-Bold/fHB pcft/FHB{/fHB fs}bd
+/Courier-BoldOblique/fHIB pcft/FHIB{/fHIB fs}bd
+/ZapfChancery-MediumItalic/fL pcft/FL{/fL fs}bd
+/ZapfChancery-MediumItalic/fLI pcft/FLI{/fLI fs}bd
+/ZapfChancery-MediumItalic/fLB pcft/FLB{/fLB fs}bd
+/ZapfChancery-MediumItalic/fLIB pcft/FLIB{/fLIB fs}bd
+/AvantGarde-Book/fM pcft/FM{/fM fs}bd
+/AvantGarde-BookOblique/fMI pcft/FMI{/fMI fs}bd
+/AvantGarde-Demi/fMB pcft/FMB{/fMB fs}bd
+/AvantGarde-DemiOblique/fMIB pcft/FMIB{/fMIB fs}bd
+(F:\\LPT\\VMS\\EX01_A.DOC)(EWvA, MRK)(September 29, 1993)fileinfo
+%%EndProlog
+%%Page: 0 1
+begpage
+12 FAB
+977 2996 m
+(Example 01: Palindrome filter)s
+12 FB
+295 2669 m
+(In)s
+354(this)ms
+444(appendix)ms
+645(we)ms
+721(illustrate)ms
+914(the)ms
+993(CLiP)ms
+1117(style)ms
+1229(of)ms
+1289(literate)ms
+1445(programming)ms
+1735(by)ms
+1803(a)ms
+1843(program)ms
+2031(to)ms
+2087(filter)ms
+295 2609 m
+(palindromic)s
+549(lines)ms
+656(from)ms
+765(an)ms
+825(input)ms
+940(file.)ms
+12 FB
+395 2549 m
+(Two)s
+501(files)ms
+602(are)ms
+678(involved:)ms
+882(the)ms
+958(program)ms
+1142(module)ms
+1307(\()ms
+11 FH
+(PALINDROME.PAS)s
+12 FB
+(\))s
+1740(and)ms
+1827(a)ms
+1864(test)ms
+1949(file)ms
+2030(\()ms
+11 FH
+(TEST-)s
+11 FH
+295 2489 m
+(DATA.IN)s
+12 FB
+(\).)s
+12 FAB
+295 2306 m
+(A.1. Specification)s
+12 FB
+295 2219 m
+(A)s
+343(palindrome)ms
+583(is)ms
+628(a)ms
+663(sentence)ms
+847(with)ms
+948(the)ms
+1021(property)ms
+1203(that)ms
+1290(the)ms
+1364(letters)ms
+1498(from)ms
+1607(left)ms
+1686(to)ms
+1737(right,)ms
+1856(read)ms
+1955(the)ms
+2028(same)ms
+2143(as)ms
+295 2159 m
+(from)s
+412(right)ms
+527(to)ms
+586(left.)ms
+686(In)ms
+748(the)ms
+830(comparison)ms
+1083(uppercase)ms
+1304(and)ms
+1396(lowercase)ms
+1617(letters)ms
+1759(are)ms
+1841(considered)ms
+2078(to)ms
+2137(be)ms
+295 2099 m
+(equivalent)s
+512(and)ms
+593(all)ms
+652(other)ms
+763(characters)ms
+975(are)ms
+1044(simply)ms
+1189(ignored.)ms
+1364(Hence)ms
+1500(an)ms
+1556(empty)ms
+1690(sentence)ms
+1871(is)ms
+1913(a)ms
+1944(palindrome.)ms
+295 2039 m
+(Other)s
+421(examples)ms
+622(are:)ms
+10 FH
+395 1958 m
+(\(************* #file "TESTDATA.IN" #comment off **************\))s
+395 1916 m
+(Ada)s
+395 1875 m
+(1234567)s
+395 1833 m
+(doremifasolosafimerod)s
+395 1791 m
+(\(******* Testdata #multiple *******\))s
+395 1750 m
+(\(***************** End of TESTDATA.PAS ************************\))s
+12 FB
+295 1657 m
+(The)s
+385(following)ms
+592(sentences)ms
+796(do)ms
+858(not)ms
+935(qualify)ms
+1089(as)ms
+1143(a)ms
+1178(palindrome.)ms
+10 FH
+395 1576 m
+(\(******* Testdata #quick *******\))s
+395 1535 m
+(Mr. Clinton won the elections over Mr. Bush.)s
+395 1493 m
+(This line is not palindromic.)s
+395 1451 m
+(Aabbccdd Aabbccdd Aabbccdd Aabbccdd)s
+395 1410 m
+(Abracadabra)s
+395 1368 m
+(supercalafragilisiticexpielecdosia)s
+12 FB
+295 1276 m
+(The)s
+385(following)ms
+592(are)ms
+665(examples)ms
+867(of)ms
+921(more)ms
+1036(sophisticated)ms
+1310(palindromes.)ms
+10 FH
+395 1195 m
+(\(******* Testdata #quick *******\))s
+395 1153 m
+(Able was I, ere I saw Elba.)s
+395 1111 m
+(A man, a plan, a canal, Panama.)s
+395 1070 m
+(Norma is as selfless as I Am, Ron.)s
+12 FB
+295 977 m
+(Note)s
+404(that)ms
+492(the)ms
+565(famous)ms
+725(Dutch)ms
+860(sentence)ms
+10 FH
+395 896 m
+(\(******* Testdata #quick *******\))s
+395 855 m
+(Koos Eekfeen keek maar door rood kerkraam, maar krek door rood raam)s
+395 813 m
+(keek neef Kees ook.)s
+12 FB
+295 721 m
+(will)s
+385(not)ms
+461(be)ms
+521(recognized)ms
+753(as)ms
+807(a)ms
+842(plindrome)ms
+1060(since)ms
+1175(it)ms
+1215(occupies)ms
+1403(two)ms
+1490(lines.)ms
+395 661 m
+(The)s
+488(program)ms
+11 FH
+674(PALINDROME)ms
+12 FB
+965(reads)ms
+1087(an)ms
+1151(input)ms
+1270(file,)ms
+1365(filters)ms
+1498(the)ms
+1575(lines)ms
+1686(that)ms
+1777(are)ms
+1854(palindromic)ms
+2112(and)ms
+295 601 m
+(writes)s
+429(them)ms
+542(to)ms
+593(an)ms
+653(output)ms
+793(file.)ms
+8 FB
+470 204 m
+(The)s
+530(CLiP)ms
+608(Style)ms
+685(of)ms
+721(Literate)ms
+833(Programming)ms
+1025(\(3.091,)ms
+1128(29-sep-93\))ms
+12 FB
+2075 204 m
+( 1 )s
+50 2 2130 216 li
+50 2 2020 216 li
+endpage
+%%Page: 1 2
+begpage
+12 FAB
+295 3176 m
+(A.2. Communication with the outside world)s
+12 FB
+295 3089 m
+(The)s
+391(program)ms
+578(conforms)ms
+785(to)ms
+842(the)ms
+922(general)ms
+1087(template)ms
+1278(of)ms
+1338(a)ms
+1378(Pascal)ms
+1524(program.)ms
+1724(We)ms
+1812(introduce)ms
+2019(the)ms
+2098(files)ms
+11 FH
+295 3029 m
+(IN_FILE)s
+12 FB
+501(and)ms
+11 FH
+586(OUT_FILE)ms
+12 FB
+820(to)ms
+872(define)ms
+1011(its)ms
+1072(communication)ms
+1396(with)ms
+1499(the)ms
+1573(outside)ms
+1731(world.)ms
+1874(The)ms
+1966(actual)ms
+2098(files)ms
+295 2969 m
+(have)s
+401(to)ms
+453(be)ms
+513(specified)ms
+706(at)ms
+754(run-time.)ms
+951(Thus)ms
+1064(we)ms
+1135(have)ms
+10 FH
+395 2888 m
+(\(*************** #file "PALINDROME.PAS" ***********************\))s
+395 2846 m
+(\(****************************************************************\))s
+395 2805 m
+(\(* Program: Palindrome filter program. *\))s
+395 2763 m
+(\(* Purpose: To filter the palindromic lines from a given input *\))s
+395 2721 m
+(\(* file to a specified output file. *\))s
+395 2680 m
+(\(****************************************************************\))s
+395 2638 m
+(PROGRAM PALINDROME \(INPUT, OUTPUT, IN_FILE, OUT_FILE\);)s
+395 2555 m
+(\(******* Palindrome constants #multiple #comment off *******\))s
+395 2513 m
+(\(******* Palindrome types #multiple #comment off *******\))s
+395 2471 m
+(VAR)s
+395 2430 m
+( IN_FILE, OUT_FILE: TEXT;)s
+395 2388 m
+(\(******* Palindrome variables #multiple #comment off *******\))s
+395 2305 m
+(BEGIN)s
+495 2263 m
+(OPEN \(IN_FILE, 'TESTDATA.IN', HISTORY := OLD\); RESET \(IN_FILE\);)s
+395 2221 m
+( OPEN \(OUT_FILE, 'TESTDATA.OUT', HISTORY := NEW\); REWRITE)s
+395 2180 m
+(\(OUT_FILE\);)s
+395 2096 m
+( \(***************** Palindrome \(body\) **********************\))s
+395 2055 m
+( \(** Copy the lines of the IN_FILE that are palindromic to **\))s
+395 2013 m
+( \(** the OUT_FILE. **\))s
+395 1971 m
+( \(************************************************************\))s
+395 1888 m
+(END \(*PALINDROME*\).)s
+395 1846 m
+(\(******************* End of PALINDROME.PAS ********************\))s
+12 FB
+295 1754 m
+(To)s
+363(prepare)ms
+525(the)ms
+599(module)ms
+761(for)ms
+832(future)ms
+964(declarations)ms
+1218(of)ms
+1272(constants)ms
+1471(and)ms
+1555(types)ms
+1673(we)ms
+1744(have)ms
+10 FH
+395 1673 m
+(\(******* Palindrome constants #leader #quick *******\))s
+395 1631 m
+(CONST)s
+395 1590 m
+(\(******* Palindrome types #leader #quick *******\))s
+395 1548 m
+(TYPE)s
+12 FAB
+295 1436 m
+(A.3. Processing of the files)s
+12 FB
+295 1349 m
+(The)s
+384(program)ms
+565(processes)ms
+11 FH
+768(IN_FILE)ms
+12 FB
+972(line)ms
+1059(by)ms
+1120(line.)ms
+1219(The)ms
+1309(idea)ms
+1403(is)ms
+1448(to)ms
+1499(buffer)ms
+1632(an)ms
+1691(exact)ms
+1808(copy)ms
+1917(of)ms
+1970(the)ms
+2043(current)ms
+295 1289 m
+(line)s
+382(in)ms
+11 FH
+434(IN_LINE)ms
+12 FB
+(,)s
+652(while)ms
+776(at)ms
+824(the)ms
+898(same)ms
+1014(time)ms
+1116(its)ms
+1176(letters)ms
+1311(are)ms
+1384(buffered)ms
+1567(in)ms
+11 FH
+1618(LETTERS)ms
+12 FB
+(.)s
+1836(So)ms
+11 FH
+1902(LETTERS)ms
+12 FB
+2107(will)ms
+295 1229 m
+(be)s
+353(empty)ms
+489(if)ms
+531(the)ms
+603(line)ms
+689(holds)ms
+808(no)ms
+869(letters)ms
+1003(at)ms
+1050(all,)ms
+1124(in)ms
+1174(which)ms
+1307(case)ms
+1404(the)ms
+1476(line)ms
+1562(is)ms
+1607(considered)ms
+1835(to)ms
+1885(be)ms
+1943(palindromic)ms
+295 1169 m
+(by)s
+357(definition.)ms
+395 1109 m
+(We)s
+475(choose)ms
+624(the)ms
+696(buffers)ms
+11 FH
+848(IN_LINE)ms
+12 FB
+1051(and)ms
+11 FH
+1134(LETTERS)ms
+12 FB
+1337(to)ms
+1387(be)ms
+1445(of)ms
+1497(the)ms
+1569(same)ms
+1682(type,)ms
+11 FH
+1792(TEXT_LINE)ms
+12 FB
+(,)s
+2062(which)ms
+295 1049 m
+(we)s
+365(will)ms
+456(not)ms
+532(specify)ms
+689(in)ms
+740(detail)ms
+864(right)ms
+971(now.)ms
+1082(For)ms
+1164(this)ms
+1249(purpose)ms
+1419(we)ms
+1490(introduce)ms
+1692(a)ms
+1726(type)ms
+11 FH
+1825(ABSTRACT)ms
+12 FB
+(.)s
+10 FH
+395 968 m
+(\(******* Palindrome types #quick *******\))s
+395 926 m
+( ABSTRACT = \(DEFINED, UNDEFINED\);)s
+11 FH
+295 834 m
+(TEXT_LINE)s
+12 FB
+555(will)ms
+646(temporarily)ms
+892(be)ms
+952(declared)ms
+11 FH
+1134(ABSTRACT)ms
+12 FB
+1367(and)ms
+1453(its)ms
+1513(details)ms
+1656(will)ms
+1747(be)ms
+1807(defined)ms
+1970(later.)ms
+2084(Thus)ms
+295 774 m
+(the)s
+368(declaration)ms
+603(of)ms
+11 FH
+657(TEXT_LINE)ms
+10 FH
+395 693 m
+(\(******* Palindrome types *******\))s
+395 651 m
+(\(******* Declaration of TEXT_LINE *******\))s
+395 610 m
+(\(***************** End of Palindrome types ********************\))s
+12 FB
+295 517 m
+(is)s
+340(temporarily)ms
+586(satisfied)ms
+765(with)ms
+867(the)ms
+940(type)ms
+11 FH
+1039(ABSTRACT)ms
+12 FB
+(.)s
+10 FH
+395 436 m
+(\(******* Declaration of TEXT_LINE #quick #default *******\))s
+395 395 m
+( TEXT_LINE = ABSTRACT;)s
+8 FB
+470 204 m
+(The)s
+530(CLiP)ms
+608(Style)ms
+685(of)ms
+721(Literate)ms
+833(Programming)ms
+1025(\(3.091,)ms
+1128(29-sep-93\))ms
+12 FB
+2075 204 m
+( 2 )s
+50 2 2130 216 li
+50 2 2020 216 li
+endpage
+%%Page: 2 3
+begpage
+12 FB
+295 3179 m
+(The)s
+385(declaration)ms
+619(for)ms
+690(the)ms
+764(variables)ms
+11 FH
+957(IN_LINE)ms
+12 FB
+1162(and)ms
+11 FH
+1247(LETTERS)ms
+12 FB
+1452(becomes)ms
+10 FH
+395 3098 m
+(\(******* Palindrome variables #quick *******\))s
+395 3056 m
+( IN_LINE,)s
+395 3015 m
+( LETTERS: TEXT_LINE;)s
+12 FB
+295 2922 m
+(We)s
+379(have)ms
+488(to)ms
+542(test)ms
+11 FH
+626(LETTERS)ms
+12 FB
+834(in)ms
+887(order)ms
+1008(to)ms
+1062(decide)ms
+1207(whether)ms
+1383(or)ms
+1439(not)ms
+11 FH
+1518(IN_LINE)ms
+12 FB
+1726(contains)ms
+1907(a)ms
+1944(palindrome.)ms
+295 2862 m
+(The)s
+385(result)ms
+508(of)ms
+563(this)ms
+647(test)ms
+729(is)ms
+775(flagged)ms
+938(by)ms
+11 FH
+1000(IS_PALINDROME)ms
+12 FB
+(,)s
+1383(for)ms
+1453(which)ms
+1588(we)ms
+1659(introduce)ms
+1860(the)ms
+1934(declaration)ms
+10 FH
+395 2781 m
+(\(******* Palindrome variables #quick *******\))s
+395 2740 m
+( IS_PALINDROME: BOOLEAN;)s
+12 FB
+295 2647 m
+(Now)s
+404(the)ms
+478(body)ms
+590(of)ms
+644(the)ms
+718(Palindrome)ms
+961(filter)ms
+1071(may)ms
+1169(be)ms
+1229(expanded)ms
+1433(as)ms
+10 FH
+395 2566 m
+( \(***************** Palindrome \(body\) **********************\))s
+395 2525 m
+( \(** Copy the lines of the IN_FILE that are palindromic to **\))s
+395 2483 m
+( \(** the OUT_FILE. **\))s
+395 2441 m
+( WHILE NOT EOF \(IN_FILE\) DO)s
+395 2400 m
+( BEGIN)s
+395 2358 m
+( \(***************** Palindrome \(1\) *********************\))s
+395 2316 m
+( \(** Read a line from IN_FILE into IN_LINE. The letters **\))s
+395 2275 m
+( \(** of this line are copied to LETTERS. **\))s
+395 2233 m
+( \(********************************************************\))s
+395 2150 m
+( READLN \(IN_FILE\);)s
+395 2066 m
+( \(***************** Palindrome \(2\) *********************\))s
+395 2025 m
+( \(** Test palindromicity of LETTERS. Set IS_PALINDROME **\))s
+395 1983 m
+( \(** to reflect the result of the test. **\))s
+395 1941 m
+( \(********************************************************\))s
+395 1816 m
+( IF IS_PALINDROME THEN)s
+395 1775 m
+( BEGIN)s
+395 1733 m
+( \(***************** Palindrome \(3\) *****************\))s
+395 1691 m
+( \(** Write IN_LINE to OUT_FILE. **\))s
+395 1650 m
+( \(****************************************************\))s
+395 1566 m
+( WRITELN \(OUT_FILE\);)s
+395 1525 m
+( END \(*IF*\);)s
+395 1483 m
+( END \(*WHILE*\);)s
+395 1441 m
+( \(************* End of Palindrome \(body\) *******************\))s
+12 FAB
+295 1329 m
+(A.4. Choosing the structure of )s
+11 FH
+(IN_LINE)s
+12 FAB
+( and )s
+11 FH
+(LETTERS)s
+12 FB
+295 1242 m
+(Before)s
+442(we)ms
+512(can)ms
+593(proceed)ms
+763(we)ms
+833(need)ms
+939(to)ms
+989(establish)ms
+1176(a)ms
+1209(structure)ms
+1396(for)ms
+1466(the)ms
+1538(objects)ms
+11 FH
+1692(IN_LINE)ms
+12 FB
+1896(and)ms
+11 FH
+1979(LETTERS)ms
+12 FB
+(.)s
+295 1182 m
+(Thus)s
+412(we)ms
+487(define)ms
+11 FH
+629(TEXT_LINE)ms
+12 FB
+894(as)ms
+953(a)ms
+993(structure)ms
+1185(with)ms
+1291(two)ms
+1383(components.)ms
+1654(The)ms
+1749(first)ms
+1847(component)ms
+2087(is)ms
+2137(an)ms
+295 1122 m
+(array,)s
+11 FH
+424(CHARS)ms
+12 FB
+(,)s
+589(which)ms
+726(contains)ms
+907(the)ms
+983(characters)ms
+1200(to)ms
+1254(be)ms
+1315(buffered.)ms
+1512(The)ms
+1604(second)ms
+1758(component,)ms
+11 FH
+2007(LENGTH)ms
+12 FB
+(,)s
+295 1062 m
+(indicates)s
+484(which)ms
+619(part)ms
+709(of)ms
+762(the)ms
+836(array)ms
+950(is)ms
+996(actually)ms
+1166(occupied.)ms
+1371(The)ms
+1461(maximum)ms
+1676(number)ms
+1841(of)ms
+1895(characters)ms
+2109(that)ms
+295 1002 m
+(can)s
+375(be)ms
+434(buffered)ms
+614(by)ms
+676(the)ms
+748(structure)ms
+934(is)ms
+979(determined)ms
+1215(by)ms
+1277(the)ms
+1349(length,)ms
+11 FH
+1498(MAX_L)ms
+12 FB
+(,)s
+1659(of)ms
+1712(the)ms
+1784(array.)ms
+11 FH
+1911(MAX_L)ms
+12 FB
+2060(serves)ms
+295 942 m
+(as)s
+349(an)ms
+408(implementation)ms
+735(parameter.)ms
+10 FH
+395 861 m
+(\(******* Palindrome constants #quick *******\))s
+395 820 m
+( MAX_L = 132;)s
+395 736 m
+(\(******* Declaration of TEXT_LINE #quick *******\))s
+395 695 m
+( TEXT_LINE = RECORD)s
+395 653 m
+( CHARS: ARRAY[1..MAX_L] OF CHAR;)s
+395 611 m
+( LENGTH: 0..MAX_L;)s
+395 570 m
+( END \(*RECORD*\);)s
+8 FB
+470 204 m
+(The)s
+530(CLiP)ms
+608(Style)ms
+685(of)ms
+721(Literate)ms
+833(Programming)ms
+1025(\(3.091,)ms
+1128(29-sep-93\))ms
+12 FB
+2075 204 m
+( 3 )s
+50 2 2130 216 li
+50 2 2020 216 li
+endpage
+%%Page: 3 4
+begpage
+12 FAB
+295 3176 m
+(A.5. Reading a line)s
+12 FB
+295 3089 m
+(For)s
+383(efficiency)ms
+601(reasons)ms
+769(we)ms
+846(fill)ms
+11 FH
+923(IN_LINE)ms
+12 FB
+1134(and)ms
+11 FH
+1225(LETTERS)ms
+12 FB
+1436(simultaneously.)ms
+1770(Therefore)ms
+1986(we)ms
+2062(buffer)ms
+295 3029 m
+(every)s
+418(character)ms
+614(that)ms
+701(is)ms
+747(read)ms
+846(from)ms
+11 FH
+955(IN_FILE)ms
+12 FB
+1160(in)ms
+1212(the)ms
+1285(variable)ms
+11 FH
+1459(IN_CHAR)ms
+12 FB
+(.)s
+10 FH
+395 2948 m
+(\(******* Palindrome variables #quick *******\))s
+395 2906 m
+( IN_CHAR: CHAR;)s
+12 FB
+295 2814 m
+(Only)s
+404(when)ms
+11 FH
+522(IN_CHAR)ms
+12 FB
+724(turns)ms
+834(out)ms
+907(to)ms
+956(be)ms
+1013(a)ms
+1045(letter)ms
+1157(it)ms
+1194(is)ms
+1237(copied)ms
+1380(to)ms
+11 FH
+1429(LETTERS)ms
+12 FB
+(.)s
+1643(Since)ms
+1764(this)ms
+1846(process)ms
+2006(is)ms
+2049(crucial)ms
+295 2754 m
+(for)s
+365(the)ms
+439(overall)ms
+590(operation,)ms
+804(we)ms
+875(make)ms
+996(provisions)ms
+1217(for)ms
+1287(some)ms
+1405(debugging)ms
+1629(code)ms
+1736(here.)ms
+10 FH
+395 2673 m
+( \(***************** Palindrome \(1\) *********************\))s
+395 2631 m
+( \(** Read a line from IN_FILE into IN_LINE. The letters **\))s
+395 2590 m
+( \(** of this line are copied to LETTERS. **\))s
+395 2548 m
+( IN_LINE.LENGTH := 0;)s
+395 2506 m
+( LETTERS.LENGTH := 0;)s
+395 2465 m
+( WITH IN_LINE DO)s
+395 2423 m
+( WHILE NOT EOLN \(IN_FILE\) DO)s
+395 2381 m
+( BEGIN)s
+395 2340 m
+( READ \(IN_FILE, IN_CHAR\);)s
+395 2298 m
+( LENGTH := LENGTH + 1;)s
+395 2256 m
+( CHARS[LENGTH] := IN_CHAR;)s
+395 2215 m
+( IF IN_CHAR IN ['A'..'Z', 'a'..'z'] THEN)s
+395 2173 m
+( WITH LETTERS DO)s
+395 2131 m
+( BEGIN)s
+395 2090 m
+( LENGTH := LENGTH + 1;)s
+395 2048 m
+( CHARS[LENGTH] := IN_CHAR;)s
+395 2006 m
+( END \(*WITH/IF*\);)s
+395 1965 m
+( END \(*WHILE/WITH*\);)s
+395 1881 m
+( \(********************* Palindrome \(test\) **************\))s
+395 1840 m
+( \(** Check contents of IN_LINE and LETTERS. #optional **\))s
+395 1798 m
+( \(********************************************************\))s
+395 1715 m
+( \(***************** End of Palindrome \(1\) **************\))s
+12 FAB
+295 1602 m
+(A.6. Testing for palindromicity)s
+12 FB
+295 1516 m
+(We)s
+387(test)ms
+479(the)ms
+563(palindromicity)ms
+881(of)ms
+11 FH
+945(LETTERS)ms
+12 FB
+1161(in)ms
+1223(two)ms
+1321(steps.)ms
+1456(First)ms
+1571(we)ms
+1652(transform)ms
+1869(the)ms
+1953(contents)ms
+2143(of)ms
+11 FH
+295 1456 m
+(LETTERS)s
+12 FB
+503(to)ms
+558(uppercase)ms
+774(and)ms
+863(then)ms
+965(we)ms
+1039(compare)ms
+1227(the)ms
+1305(characters)ms
+1523(of)ms
+11 FH
+1581(LETTERS)ms
+12 FB
+1790(pairwise.)ms
+1988(The)ms
+2082(com-)ms
+295 1396 m
+(parison)s
+455(is)ms
+502(done)ms
+612(starting)ms
+775(with)ms
+878(the)ms
+952(most)ms
+1063(outside)ms
+1220(characters)ms
+1436(and)ms
+1522(progressing)ms
+1768(inward.)ms
+1933(The)ms
+2024(string)ms
+2151(is)ms
+295 1336 m
+(assumed)s
+480(a)ms
+516(palindrome)ms
+757(until)ms
+862(the)ms
+937(opposite)ms
+1120(is)ms
+1167(proven)ms
+1319(through)ms
+1488(a)ms
+1524(pair)ms
+1615(of)ms
+1670(different)ms
+1856(characters.)ms
+2085(With)ms
+295 1276 m
+(the)s
+368(local)ms
+478(counter)ms
+10 FH
+395 1195 m
+(\(******* Palindrome variables #quick *******\))s
+395 1153 m
+( I: INTEGER;)s
+12 FB
+295 1061 m
+(we)s
+365(keep)ms
+472(track)ms
+585(of)ms
+639(the)ms
+712(comparing)ms
+939(process.)ms
+1114(Now)ms
+11 FH
+1223(Palindrome \(2\))ms
+12 FB
+1621(can)ms
+1703(be)ms
+1763(expanded)ms
+1967(as)ms
+10 FH
+395 980 m
+( \(***************** Palindrome \(2\) *********************\))s
+395 938 m
+( \(** Test palindromicity of LETTERS. Set IS_PALINDROME **\))s
+395 896 m
+( \(** to reflect the result of the test. **\))s
+395 855 m
+( WITH LETTERS DO)s
+395 813 m
+( BEGIN)s
+395 771 m
+( \(* Transform lowercase to uppercase. *\))s
+395 730 m
+( FOR I := 1 TO LENGTH DO)s
+395 688 m
+( IF CHARS[I] IN ['a'..'z'])s
+395 646 m
+( THEN CHARS[I] :=)s
+395 605 m
+( CHR\(ORD\(CHARS[I]\) - ORD\('a'\) + ORD\('A'\)\);)s
+8 FB
+470 204 m
+(The)s
+530(CLiP)ms
+608(Style)ms
+685(of)ms
+721(Literate)ms
+833(Programming)ms
+1025(\(3.091,)ms
+1128(29-sep-93\))ms
+12 FB
+2075 204 m
+( 4 )s
+50 2 2130 216 li
+50 2 2020 216 li
+endpage
+%%Page: 4 5
+begpage
+10 FH
+395 3188 m
+( \(* Perform the palindromicity test. *\))s
+395 3146 m
+( IS_PALINDROME := TRUE;)s
+395 3105 m
+( I := 1;)s
+395 3063 m
+( WHILE IS_PALINDROME AND \(I <= LENGTH DIV 2\) DO)s
+395 3021 m
+( IF CHARS[I] = CHARS[LENGTH-I+1] THEN)s
+395 2980 m
+( I := I + 1)s
+395 2938 m
+( ELSE)s
+395 2896 m
+( IS_PALINDROME := FALSE;)s
+395 2855 m
+( END \(*WITH*\);)s
+395 2813 m
+( \(***************** End of Palindrome \(2\) **************\))s
+12 FAB
+295 2701 m
+(A.7. Writing the palindrome)s
+12 FB
+295 2614 m
+(The)s
+385(only)ms
+486(remaining)ms
+701(action)ms
+836(is)ms
+882(to)ms
+933(write)ms
+1049(the)ms
+1122(contents)ms
+1301(of)ms
+11 FH
+1356(IN_LINE)ms
+12 FB
+(.)s
+1573(Again)ms
+1708(we)ms
+1779(need)ms
+1885(a)ms
+1920(local)ms
+2030(counter)ms
+10 FH
+395 2533 m
+(\(******* Palindrome variables #quick *******\))s
+395 2491 m
+( J: INTEGER;)s
+12 FB
+295 2399 m
+(The)s
+385(writing)ms
+542(proceeds)ms
+732(straight)ms
+894(forward.)ms
+10 FH
+395 2318 m
+( \(***************** Palindrome \(3\) *****************\))s
+395 2276 m
+( \(** Write IN_LINE to OUT_FILE. **\))s
+395 2235 m
+( WITH IN_LINE DO)s
+395 2193 m
+( BEGIN)s
+395 2151 m
+( FOR J := 1 TO LENGTH DO)s
+395 2110 m
+( WRITE \(OUT_FILE, CHARS[J]\);)s
+395 2068 m
+( END \(*WITH*\);)s
+395 2026 m
+( \(************* End of Palindrome \(3\) **************\))s
+8 FB
+470 204 m
+(The)s
+530(CLiP)ms
+608(Style)ms
+685(of)ms
+721(Literate)ms
+833(Programming)ms
+1025(\(3.091,)ms
+1128(29-sep-93\))ms
+12 FB
+2075 204 m
+( 5 )s
+50 2 2130 216 li
+50 2 2020 216 li
+endpage
+%%Trailer
+enddocument
+%%Pages: 5
+%%DocumentFonts:
+%%+ Helvetica-Bold
+%%+ Times-Roman
+%%+ Courier
+%%EOF
+ \ No newline at end of file
diff --git a/web/clip/vax_vms/ex01_b.asc b/web/clip/vax_vms/ex01_b.asc
new file mode 100644
index 0000000000..af96cdf4aa
--- /dev/null
+++ b/web/clip/vax_vms/ex01_b.asc
@@ -0,0 +1,42 @@
+
+
+
+ Example 01: Testcode
+
+
+
+
+
+This section contains some test code that can be inserted to debug the
+palindrome filter program.
+
+
+B.1. Print the contents of IN_LINE and LETTERS
+
+Correct reading of the input is crucial. For debugging purposes we may want to
+inspect the contents of *IN_LINE* and *LETTERS*. We need a local counter
+
+ (******* Palindrome variables #quick *******)
+ T : INTEGER;
+
+We want the debugging information te be clearly flagged as such.
+
+ (***************** Palindrome (test) ******************)
+ (** Check contents of IN_LINE and LETTERS. **)
+ WRITELN;
+ WRITELN ('============ DEBUGGING INFORMATION ===============');
+ WRITELN ('Contents of buffer IN_LINE: ');
+ WRITE ('>>>>');
+ WITH IN_LINE DO
+ FOR T := 1 TO LENGTH DO WRITE (OUTPUT, CHARS[T]);
+ WRITE ('<<<<');
+ WRITELN;
+ WRITELN ('Contents of buffer LETTERS: ');
+ WRITE ('>>>>');
+ WITH LETTERS DO
+ FOR T := 1 TO LENGTH DO WRITE (OUTPUT, CHARS[T]);
+ WRITE ('<<<<');
+ WRITELN;
+ WRITELN ('========== END OF DEBUGGING INFORMATION ==========');
+ WRITELN;
+ (************* End of Palindrome (test) ***************)
diff --git a/web/clip/vax_vms/ex01_b.ini b/web/clip/vax_vms/ex01_b.ini
new file mode 100644
index 0000000000..d526df8ef4
--- /dev/null
+++ b/web/clip/vax_vms/ex01_b.ini
@@ -0,0 +1,27 @@
+This file contains data that is needed to run CLIP_2
+And is generated by CLIP_1
+Modifying this file at own risk.
+Using CLIP_1 is definitely recommended.
+
+INTERACTIVE_MODE Mode (INTERACTIVE/DEBUG/HELPFUL/AUTO)
+YES Interactive fault correction (YES/NO)
+BOTH Error message destination (TERMINAL/REPORTFILE/BOTH/NONE)
+(* Left comment string
+*) Right comment string
+* Command character
+ENDOF END string
+# Option marker
+EXTRACTED The specified modules are (OMITTED/EXTRACTED)
+------------ REPORT FILE -----------
+CLIP.RPT
+------------ INPUT FILES -----------
+EX01_A.ASC
+EX01_B.ASC
+------------ MODULES ---------------
+
+PALINDROME.PAS
+
+TESTDATA.IN
+------------ MODULE DIRECTORY ------
+[]
+------------ END OF INI FILE -------
diff --git a/web/clip/vax_vms/ex01_b.pas b/web/clip/vax_vms/ex01_b.pas
new file mode 100644
index 0000000000..922466572a
--- /dev/null
+++ b/web/clip/vax_vms/ex01_b.pas
@@ -0,0 +1,119 @@
+ (*************** #file "PALINDROME.PAS" ***********************)
+ (****************************************************************)
+ (* Program: Palindrome filter program. *)
+ (* Purpose: To filter the palindromic lines from a given input *)
+ (* file to a specified output file. *)
+ (****************************************************************)
+ PROGRAM PALINDROME (INPUT, OUTPUT, IN_FILE, OUT_FILE);
+
+ CONST
+ MAX_L = 132;
+ TYPE
+ ABSTRACT = (DEFINED, UNDEFINED);
+ TEXT_LINE = RECORD
+ CHARS: ARRAY[1..MAX_L] OF CHAR;
+ LENGTH: 0..MAX_L;
+ END (*RECORD*);
+ VAR
+ IN_FILE, OUT_FILE: TEXT;
+ IN_LINE,
+ LETTERS: TEXT_LINE;
+ IS_PALINDROME: BOOLEAN;
+ IN_CHAR: CHAR;
+ I: INTEGER;
+ J: INTEGER;
+ T : INTEGER;
+
+ BEGIN
+ OPEN (IN_FILE, 'TESTDATA.IN', HISTORY := OLD); RESET (IN_FILE);
+ OPEN (OUT_FILE, 'TESTDATA.OUT', HISTORY := NEW); REWRITE (OUT_FILE);
+
+ (***************** Palindrome (body) **********************)
+ (** Copy the lines of the IN_FILE that are palindromic to **)
+ (** the OUT_FILE. **)
+ WHILE NOT EOF (IN_FILE) DO
+ BEGIN
+ (***************** Palindrome (1) *********************)
+ (** Read a line from IN_FILE into IN_LINE. The letters **)
+ (** of this line are copied to LETTERS. **)
+ IN_LINE.LENGTH := 0;
+ LETTERS.LENGTH := 0;
+ WITH IN_LINE DO
+ WHILE NOT EOLN (IN_FILE) DO
+ BEGIN
+ READ (IN_FILE, IN_CHAR);
+ LENGTH := LENGTH + 1;
+ CHARS[LENGTH] := IN_CHAR;
+ IF IN_CHAR IN ['A'..'Z', 'a'..'z'] THEN
+ WITH LETTERS DO
+ BEGIN
+ LENGTH := LENGTH + 1;
+ CHARS[LENGTH] := IN_CHAR;
+ END (*WITH/IF*);
+ END (*WHILE/WITH*);
+
+ (***************** Palindrome (test) ******************)
+ (** Check contents of IN_LINE and LETTERS. **)
+ WRITELN;
+ WRITELN ('============ DEBUGGING INFORMATION ===============');
+ WRITELN ('Contents of buffer IN_LINE: ');
+ WRITE ('>>>>');
+ WITH IN_LINE DO
+ FOR T := 1 TO LENGTH DO WRITE (OUTPUT, CHARS[T]);
+ WRITE ('<<<<');
+ WRITELN;
+ WRITELN ('Contents of buffer LETTERS: ');
+ WRITE ('>>>>');
+ WITH LETTERS DO
+ FOR T := 1 TO LENGTH DO WRITE (OUTPUT, CHARS[T]);
+ WRITE ('<<<<');
+ WRITELN;
+ WRITELN ('========== END OF DEBUGGING INFORMATION ==========');
+ WRITELN;
+ (************* End of Palindrome (test) ***************)
+
+ (***************** End of Palindrome (1) **************)
+
+ READLN (IN_FILE);
+
+ (***************** Palindrome (2) *********************)
+ (** Test palindromicity of LETTERS. Set IS_PALINDROME **)
+ (** to reflect the result of the test. **)
+ WITH LETTERS DO
+ BEGIN
+ (* Transform lowercase to uppercase. *)
+ FOR I := 1 TO LENGTH DO
+ IF CHARS[I] IN ['a'..'z']
+ THEN CHARS[I] :=
+ CHR(ORD(CHARS[I]) - ORD('a') + ORD('A'));
+
+ (* Perform the palindromicity test. *)
+ IS_PALINDROME := TRUE;
+ I := 1;
+ WHILE IS_PALINDROME AND (I <= LENGTH DIV 2) DO
+ IF CHARS[I] = CHARS[LENGTH-I+1] THEN
+ I := I + 1
+ ELSE
+ IS_PALINDROME := FALSE;
+ END (*WITH*);
+ (***************** End of Palindrome (2) **************)
+
+
+ IF IS_PALINDROME THEN
+ BEGIN
+ (***************** Palindrome (3) *****************)
+ (** Write IN_LINE to OUT_FILE. **)
+ WITH IN_LINE DO
+ BEGIN
+ FOR J := 1 TO LENGTH DO
+ WRITE (OUT_FILE, CHARS[J]);
+ END (*WITH*);
+ (************* End of Palindrome (3) **************)
+
+ WRITELN (OUT_FILE);
+ END (*IF*);
+ END (*WHILE*);
+ (************* End of Palindrome (body) *******************)
+
+ END (*PALINDROME*).
+ (******************* End of PALINDROME.PAS ********************)
diff --git a/web/clip/vax_vms/ex01_b.ps b/web/clip/vax_vms/ex01_b.ps
new file mode 100644
index 0000000000..42d31eb9d6
--- /dev/null
+++ b/web/clip/vax_vms/ex01_b.ps
@@ -0,0 +1,370 @@
+%!PS-Adobe-2.0
+%%DocumentFonts: (atend)
+%%Title: F:\\LPT\\VMS\\EX01_B.DOC
+%%Creator: Lotus Manuscript
+%%For: EWvA, MRK
+%%CreationDate: September 29, 1993
+%%Pages: (atend)
+%%BoundingBox: 0 0 595 841
+%%EndComments
+% PostScript Prologue (initialization) for Manuscript
+% Copyright (c) 1985,1986,1987,1988 Lotus Development Corporation
+% There is no user servicable code in this file.
+
+% set timeouts to infinite
+statusdict begin
+0 setjobtimeout
+/manualfeedtimeout 3600 def
+/waittimeout 0 def
+end
+
+% correct bug correction in rev 41.0
+/idiv{div cvi}bind def
+
+% define User Dictionary
+/msdict 300 dict def msdict begin
+/bd{bind def}bind def
+
+% Define commonly used things
+/delay{usertime 5000 add{dup usertime lt{pop exit}if}loop}bd
+/mfeed{statusdict begin /manualfeed true def end}bd
+/afeed{statusdict begin /manualfeed false def end}bd
+/bfeed{ afeed statusdict begin /setpapertray where
+ {pop setpapertray}{pop} ifelse end}bd
+
+/dpi{0.24 dup scale}bd
+
+% These two are called for each page
+/inpage false def
+/begpage{save dpi /inpage true def}bd
+/endpage{inpage {restore showpage}if }bd
+
+% for possible banner
+/fileinfo {pop pop pop}bd
+/enddocument {end} bd
+
+% these are also used by eqn & gmf
+/ld{load def}bd
+/x/exch ld
+/cu{300 mul 72 div}bd
+/m/moveto ld
+/t/translate ld
+/rm/rmoveto ld
+/cp/currentpoint ld
+/st/stroke ld
+/ln/lineto ld
+/rlt/rlineto ld
+/slw/setlinewidth ld
+
+/ff/findfont ld
+/scf/scalefont ld
+/sf/setfont ld
+/fs{x /pt x def ff pt cu scf sf}bd
+
+% linedraw
+/li{4 2 roll setlinewidth 3 1 roll moveto 0.0 rlineto st}bd
+
+% outline factor
+/olwid 40.0 def
+% stroke width for outline
+/uoslw {pt cu x div slw}bd
+% relative horizontal move
+/xm{x currentpoint pop sub 0.0 rmoveto}bd
+
+% The basic show
+/s/show ld
+% move horizontal and show
+/ms{xm s}bd
+
+% variations
+% outline show - first printer attribute
+/ppss{dup cp 3 -1 roll false charpath st
+x 3 -1 roll stringwidth pop add x moveto}bd
+/pss{olwid uoslw { ( ) dup 0 4 -1 roll put ppss}forall}bd
+/ps{pss}bd
+/mps{xm ps}bd
+
+% graybox show - second printer attribute
+/gb{cp 3 -1 roll pt cu dup 4 div neg 0 x rm dup 0 x rlt x 0 rlt
+neg 0 x rlt closepath currentgray .9 setgray fill setgray m}bd
+/usi{dup stringwidth pop gb}bd
+/us{usi s}bd
+/xum{x cp pop sub dup gb 0 rmoveto}bd
+
+% combinations of PD1 and PD2
+/ups{usi pss}bd
+/mups{xm ups}bd
+/mus{xm us}bd
+
+% define a new encoding vector (code page 850 based)
+/PC 256 array def
+StandardEncoding PC copy pop
+
+/dotaccent/bullet
+/quotesingle/quotedblleft/quotedblright/quotesinglbase
+/quotedblbase/guilsinglleft/guilsinglright/.notdef
+/ellipsis/perthousand/.notdef/.notdef/paragraph/section/dagger/daggerdbl
+/OE/oe/fi/fl/endash/emdash/fraction/Ydieresis
+PC 6 26 getinterval astore pop
+
+/Ccedilla/udieresis/eacute/acircumflex/adieresis/agrave/aring/ccedilla
+/ecircumflex/edieresis/egrave/idieresis/icircumflex/igrave/Adieresis/Aring
+/Eacute/ae/AE/ocircumflex/odieresis/ograve/ucircumflex/ugrave
+/ydieresis/Odieresis/Udieresis/oslash/sterling/Oslash/.notdef/florin
+/aacute/iacute/oacute/uacute/ntilde/Ntilde/ordfeminine/ordmasculine
+/questiondown/.notdef/.notdef/onehalf/onequarter/exclamdown/guillemotleft/guillemotright
+/.notdef/.notdef/.notdef/.notdef/.notdef/Aacute/Acircumflex/Agrave
+/.notdef/.notdef/.notdef/.notdef/.notdef/cent/yen/.notdef
+/.notdef/grave/.notdef/circumflex/tilde/.notdef/atilde/Atilde
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/currency
+/eth/Eth/Ecircumflex/Edieresis/Egrave/dotlessi/Iacute/Icircumflex
+/Idieresis/.notdef/.notdef/.notdef/.notdef/brokenbar/Igrave/.notdef
+/Oacute/germandbls/Ocircumflex/Ograve/otilde/Otilde/.notdef/thorn
+/Thorn/Uacute/Ucircumflex/Ugrave/yacute/Yacute/.notdef/acute
+/.notdef/.notdef/.notdef/threequarters/paragraph/section/.notdef/cedilla
+/ring/dieresis/periodcentered/onesuperior/threesuperior/twosuperior/.notdef/.notdef
+
+PC 128 128 getinterval astore pop
+
+% duplicate fonts with a new encoding vector
+/recd 5 dict def
+/pcft
+{recd begin
+/ncs PC def /nfn x def
+/bfn x def /bfd bfn findfont def
+/nf bfd maxlength dict def
+bfd{x dup dup /FID ne x /Encoding ne and
+{x nf 3 1 roll put}{pop pop}ifelse
+}forall
+nf/FontName nfn put
+nf/Encoding ncs put
+nfn nf definefont pop
+end}bd
+
+/fs{x /pt x def ff pt cu scf sf}bd
+
+% used by eqn
+/Times-Roman/TR pcft /Times-Bold/TRB pcft
+/Times-Italic/TRI pcft /Times-BoldItalic/TRBI pcft
+/Helvetica/HV pcft /Helvetica-Bold/HVB pcft
+/Helvetica-Oblique/HVO pcft /Helvetica-BoldOblique/HVBO pcft
+/Courier/CR pcft /Courier-Bold/CRB pcft
+/Sym{/Symbol fs}bd
+
+% Bit map image data decompression code
+/xx 0 def /yy 0 def
+/xbytes 0 def
+/lbuf 1200 string def /obuf 600 string def
+/bval <FFFEFCF8F0E0C080000103070F1F3F7F> def
+/blacks 96 string def /whites 96 string def
+0 1 95 {whites x 255 put} for
+
+/dispatch [
+{
+dup 47 le {32 sub 4 bitshift x pop 1}{
+dup 63 le {x pop 48 sub bval x get
+3 copy put x 1 add x 0} {
+dup 79 le {62 sub} {
+80 sub { 3 copy put x 1 add x } repeat 0
+}ifelse }ifelse }ifelse
+}bind
+{
+32 sub add
+3 copy put
+x 1 add x 0
+} bind
+{
+32 sub x pop add 255 0
+}bind
+{
+32 sub x pop
+3 copy getinterval
+whites 0 3 index getinterval
+x copy pop add 255 0
+}bind
+{
+32 sub x pop
+3 copy getinterval
+blacks 0 3 index getinterval
+x copy pop add 0 0
+}bind
+]def
+
+% read a raster line and unpack
+/readx{
+obuf 0 255 0
+currentfile lbuf readline pop
+{x dispatch x get exec} forall
+pop pop pop 0 xbytes getinterval}bd
+
+/mspic{
+/yy x def/xx x def
+/xbytes xx 8 idiv def
+xx yy 1 [xx 0 0 0 yy sub 0 yy]{readx}image}bd
+
+
+
+/Helvetica/fA pcft/FA{/fA fs}bd
+/Helvetica-Oblique/fAI pcft/FAI{/fAI fs}bd
+/Helvetica-Bold/fAB pcft/FAB{/fAB fs}bd
+/Helvetica-BoldOblique/fAIB pcft/FAIB{/fAIB fs}bd
+/Times-Roman/fB pcft/FB{/fB fs}bd
+/Times-Italic/fBI pcft/FBI{/fBI fs}bd
+/Times-Bold/fBB pcft/FBB{/fBB fs}bd
+/Times-BoldItalic/fBIB pcft/FBIB{/fBIB fs}bd
+/Courier/fH pcft/FH{/fH fs}bd
+/Courier-Oblique/fHI pcft/FHI{/fHI fs}bd
+/Courier-Bold/fHB pcft/FHB{/fHB fs}bd
+/Courier-BoldOblique/fHIB pcft/FHIB{/fHIB fs}bd
+/ZapfChancery-MediumItalic/fL pcft/FL{/fL fs}bd
+/ZapfChancery-MediumItalic/fLI pcft/FLI{/fLI fs}bd
+/ZapfChancery-MediumItalic/fLB pcft/FLB{/fLB fs}bd
+/ZapfChancery-MediumItalic/fLIB pcft/FLIB{/fLIB fs}bd
+/AvantGarde-Book/fM pcft/FM{/fM fs}bd
+/AvantGarde-BookOblique/fMI pcft/FMI{/fMI fs}bd
+/AvantGarde-Demi/fMB pcft/FMB{/fMB fs}bd
+/AvantGarde-DemiOblique/fMIB pcft/FMIB{/fMIB fs}bd
+(F:\\LPT\\VMS\\EX01_B.DOC)(EWvA, MRK)(September 29, 1993)fileinfo
+%%EndProlog
+%%Page: 0 1
+begpage
+12 FAB
+977 2996 m
+(Example 01: Testcode)s
+12 FB
+295 2669 m
+(This)s
+393(section)ms
+544(contains)ms
+721(some)ms
+836(test)ms
+915(code)ms
+1019(that)ms
+1103(can)ms
+1183(be)ms
+1239(inserted)ms
+1407(to)ms
+1456(debug)ms
+1588(the)ms
+1658(palindrome)ms
+1896(filter)ms
+2003(program.)ms
+12 FAB
+295 2486 m
+(B.1. Print the contents of IN_LINE and LETTERS)s
+12 FB
+295 2399 m
+(Correct)s
+462(reading)ms
+629(of)ms
+688(the)ms
+767(input)ms
+887(is)ms
+938(crucial.)ms
+1104(For)ms
+1191(debugging)ms
+1419(purposes)ms
+1614(we)ms
+1690(may)ms
+1794(want)ms
+1908(to)ms
+1964(inspect)ms
+2123(the)ms
+295 2339 m
+(contents)s
+474(of)ms
+11 FH
+528(IN_LINE)ms
+12 FB
+733(and)ms
+11 FH
+818(LETTERS)ms
+12 FB
+(.)s
+1035(We)ms
+1117(need)ms
+1224(a)ms
+1259(local)ms
+1368(counter)ms
+10 FH
+370 2258 m
+(\(******* Palindrome variables #quick *******\))s
+370 2216 m
+( T : INTEGER;)s
+12 FB
+295 2124 m
+(We)s
+376(want)ms
+486(the)ms
+560(debugging)ms
+783(information)ms
+1032(to)ms
+1083(be)ms
+1143(clearly)ms
+1292(flagged)ms
+1454(as)ms
+1508(such.)ms
+10 FH
+370 2043 m
+(\(***************** Palindrome \(test\) ******************\))s
+370 2001 m
+(\(** Check contents of IN_LINE and LETTERS. **\))s
+370 1960 m
+(WRITELN;)s
+370 1918 m
+(WRITELN \('============ DEBUGGING INFORMATION ==============='\);)s
+370 1876 m
+(WRITELN \('Contents of buffer IN_LINE: '\);)s
+370 1835 m
+(WRITE \('>>>>'\);)s
+370 1793 m
+(WITH IN_LINE DO)s
+370 1751 m
+(FOR T := 1 TO LENGTH DO WRITE \(OUTPUT, CHARS[T]\);)s
+370 1710 m
+(WRITE \('<<<<'\);)s
+370 1668 m
+(WRITELN;)s
+370 1626 m
+(WRITELN \('Contents of buffer LETTERS: '\);)s
+370 1585 m
+(WRITE \('>>>>'\);)s
+370 1543 m
+(WITH LETTERS DO)s
+370 1501 m
+(FOR T := 1 TO LENGTH DO WRITE \(OUTPUT, CHARS[T]\);)s
+370 1460 m
+(WRITE \('<<<<'\);)s
+370 1418 m
+(WRITELN;)s
+370 1376 m
+(WRITELN \('========== END OF DEBUGGING INFORMATION =========='\);)s
+370 1335 m
+(WRITELN;)s
+370 1293 m
+(\(************* End of Palindrome \(test\) ***************\))s
+8 FB
+295 204 m
+(The)s
+355(CLiP)ms
+433(Style)ms
+510(of)ms
+546(Literate)ms
+658(Programming)ms
+850(\(3.047,)ms
+953(29-sep-93\))ms
+12 FB
+2075 204 m
+( 1 )s
+50 2 2130 216 li
+50 2 2020 216 li
+endpage
+%%Trailer
+enddocument
+%%Pages: 1
+%%DocumentFonts:
+%%+ Helvetica-Bold
+%%+ Times-Roman
+%%+ Courier
+%%EOF
+ \ No newline at end of file
diff --git a/web/clip/vax_vms/fortran.ini b/web/clip/vax_vms/fortran.ini
new file mode 100644
index 0000000000..dfa6ed41f3
--- /dev/null
+++ b/web/clip/vax_vms/fortran.ini
@@ -0,0 +1,21 @@
+This file contains data that is needed to run CLiP
+And is generated by CLiP_MENU
+Modifying this file at own risk.
+Using CLiP_MENU is definitely recommended.
+
+INTERACTIVE_MODE Mode (INTERACTIVE/DEBUG/HELPFUL/AUTO)
+YES Interactive fault correction (YES/NO)
+BOTH Error message destination (TERMINAL/REPORTFILE/BOTH/NONE)
+!* Left comment string
+*! Right comment string
+* Command character
+ENDOF END string
+# Option marker
+OMITTED The specified modules are (OMITTED/EXTRACTED)
+------------ REPORT FILE -----------
+CLIP.RPT
+------------ INPUT FILES -----------
+------------ MODULES ---------------
+------------ MODULE DIRECTORY ------
+
+------------ END OF INI FILE -------
diff --git a/web/clip/vax_vms/lisp.ini b/web/clip/vax_vms/lisp.ini
new file mode 100644
index 0000000000..7dba75501b
--- /dev/null
+++ b/web/clip/vax_vms/lisp.ini
@@ -0,0 +1,21 @@
+This file contains data that is needed to run CLiP
+And is generated by CLiP_MENU
+Modifying this file at own risk.
+Using CLiP_MENU is definitely recommended.
+
+INTERACTIVE_MODE Mode (INTERACTIVE/DEBUG/HELPFUL/AUTO)
+YES Interactive fault correction (YES/NO)
+BOTH Error message destination (TERMINAL/REPORTFILE/BOTH/NONE)
+#|| Left comment string
+||# Right comment string
++ Command character
+ENDOF END string
+@ Option marker
+OMITTED The specified modules are (OMITTED/EXTRACTED)
+------------ REPORT FILE -----------
+CLIP.RPT
+------------ INPUT FILES -----------
+------------ MODULES ---------------
+------------ MODULE DIRECTORY ------
+
+------------ END OF INI FILE -------
diff --git a/web/clip/vax_vms/manual.ps b/web/clip/vax_vms/manual.ps
new file mode 100644
index 0000000000..50d83c521f
--- /dev/null
+++ b/web/clip/vax_vms/manual.ps
@@ -0,0 +1,5813 @@
+%!PS-Adobe-2.0
+%%DocumentFonts: (atend)
+%%Title: F:\\LPT\\MAN\\MANUAL.DOC
+%%Creator: Lotus Manuscript
+%%For: EWvA
+%%CreationDate: November 16, 1993
+%%Pages: (atend)
+%%BoundingBox: 0 0 595 841
+%%EndComments
+% PostScript Prologue (initialization) for Manuscript
+% Copyright (c) 1985,1986,1987,1988 Lotus Development Corporation
+% There is no user servicable code in this file.
+
+% set timeouts to infinite
+statusdict begin
+0 setjobtimeout
+/manualfeedtimeout 3600 def
+/waittimeout 0 def
+end
+
+% correct bug correction in rev 41.0
+/idiv{div cvi}bind def
+
+% define User Dictionary
+/msdict 300 dict def msdict begin
+/bd{bind def}bind def
+
+% Define commonly used things
+/delay{usertime 5000 add{dup usertime lt{pop exit}if}loop}bd
+/mfeed{statusdict begin /manualfeed true def end}bd
+/afeed{statusdict begin /manualfeed false def end}bd
+/bfeed{ afeed statusdict begin /setpapertray where
+ {pop setpapertray}{pop} ifelse end}bd
+
+/dpi{0.24 dup scale}bd
+
+% These two are called for each page
+/inpage false def
+/begpage{save dpi /inpage true def}bd
+/endpage{inpage {restore showpage}if }bd
+
+% for possible banner
+/fileinfo {pop pop pop}bd
+/enddocument {end} bd
+
+% these are also used by eqn & gmf
+/ld{load def}bd
+/x/exch ld
+/cu{300 mul 72 div}bd
+/m/moveto ld
+/t/translate ld
+/rm/rmoveto ld
+/cp/currentpoint ld
+/st/stroke ld
+/ln/lineto ld
+/rlt/rlineto ld
+/slw/setlinewidth ld
+
+/ff/findfont ld
+/scf/scalefont ld
+/sf/setfont ld
+/fs{x /pt x def ff pt cu scf sf}bd
+
+% linedraw
+/li{4 2 roll setlinewidth 3 1 roll moveto 0.0 rlineto st}bd
+
+% outline factor
+/olwid 40.0 def
+% stroke width for outline
+/uoslw {pt cu x div slw}bd
+% relative horizontal move
+/xm{x currentpoint pop sub 0.0 rmoveto}bd
+
+% The basic show
+/s/show ld
+% move horizontal and show
+/ms{xm s}bd
+
+% variations
+% outline show - first printer attribute
+/ppss{dup cp 3 -1 roll false charpath st
+x 3 -1 roll stringwidth pop add x moveto}bd
+/pss{olwid uoslw { ( ) dup 0 4 -1 roll put ppss}forall}bd
+/ps{pss}bd
+/mps{xm ps}bd
+
+% graybox show - second printer attribute
+/gb{cp 3 -1 roll pt cu dup 4 div neg 0 x rm dup 0 x rlt x 0 rlt
+neg 0 x rlt closepath currentgray .9 setgray fill setgray m}bd
+/usi{dup stringwidth pop gb}bd
+/us{usi s}bd
+/xum{x cp pop sub dup gb 0 rmoveto}bd
+
+% combinations of PD1 and PD2
+/ups{usi pss}bd
+/mups{xm ups}bd
+/mus{xm us}bd
+
+% define a new encoding vector (code page 850 based)
+/PC 256 array def
+StandardEncoding PC copy pop
+
+/dotaccent/bullet
+/quotesingle/quotedblleft/quotedblright/quotesinglbase
+/quotedblbase/guilsinglleft/guilsinglright/.notdef
+/ellipsis/perthousand/.notdef/.notdef/paragraph/section/dagger/daggerdbl
+/OE/oe/fi/fl/endash/emdash/fraction/Ydieresis
+PC 6 26 getinterval astore pop
+
+/Ccedilla/udieresis/eacute/acircumflex/adieresis/agrave/aring/ccedilla
+/ecircumflex/edieresis/egrave/idieresis/icircumflex/igrave/Adieresis/Aring
+/Eacute/ae/AE/ocircumflex/odieresis/ograve/ucircumflex/ugrave
+/ydieresis/Odieresis/Udieresis/oslash/sterling/Oslash/.notdef/florin
+/aacute/iacute/oacute/uacute/ntilde/Ntilde/ordfeminine/ordmasculine
+/questiondown/.notdef/.notdef/onehalf/onequarter/exclamdown/guillemotleft/guillemotright
+/.notdef/.notdef/.notdef/.notdef/.notdef/Aacute/Acircumflex/Agrave
+/.notdef/.notdef/.notdef/.notdef/.notdef/cent/yen/.notdef
+/.notdef/grave/.notdef/circumflex/tilde/.notdef/atilde/Atilde
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/currency
+/eth/Eth/Ecircumflex/Edieresis/Egrave/dotlessi/Iacute/Icircumflex
+/Idieresis/.notdef/.notdef/.notdef/.notdef/brokenbar/Igrave/.notdef
+/Oacute/germandbls/Ocircumflex/Ograve/otilde/Otilde/.notdef/thorn
+/Thorn/Uacute/Ucircumflex/Ugrave/yacute/Yacute/.notdef/acute
+/.notdef/.notdef/.notdef/threequarters/paragraph/section/.notdef/cedilla
+/ring/dieresis/periodcentered/onesuperior/threesuperior/twosuperior/.notdef/.notdef
+
+PC 128 128 getinterval astore pop
+
+% duplicate fonts with a new encoding vector
+/recd 5 dict def
+/pcft
+{recd begin
+/ncs PC def /nfn x def
+/bfn x def /bfd bfn findfont def
+/nf bfd maxlength dict def
+bfd{x dup dup /FID ne x /Encoding ne and
+{x nf 3 1 roll put}{pop pop}ifelse
+}forall
+nf/FontName nfn put
+nf/Encoding ncs put
+nfn nf definefont pop
+end}bd
+
+/fs{x /pt x def ff pt cu scf sf}bd
+
+% used by eqn
+/Times-Roman/TR pcft /Times-Bold/TRB pcft
+/Times-Italic/TRI pcft /Times-BoldItalic/TRBI pcft
+/Helvetica/HV pcft /Helvetica-Bold/HVB pcft
+/Helvetica-Oblique/HVO pcft /Helvetica-BoldOblique/HVBO pcft
+/Courier/CR pcft /Courier-Bold/CRB pcft
+/Sym{/Symbol fs}bd
+
+% Bit map image data decompression code
+/xx 0 def /yy 0 def
+/xbytes 0 def
+/lbuf 1200 string def /obuf 600 string def
+/bval <FFFEFCF8F0E0C080000103070F1F3F7F> def
+/blacks 96 string def /whites 96 string def
+0 1 95 {whites x 255 put} for
+
+/dispatch [
+{
+dup 47 le {32 sub 4 bitshift x pop 1}{
+dup 63 le {x pop 48 sub bval x get
+3 copy put x 1 add x 0} {
+dup 79 le {62 sub} {
+80 sub { 3 copy put x 1 add x } repeat 0
+}ifelse }ifelse }ifelse
+}bind
+{
+32 sub add
+3 copy put
+x 1 add x 0
+} bind
+{
+32 sub x pop add 255 0
+}bind
+{
+32 sub x pop
+3 copy getinterval
+whites 0 3 index getinterval
+x copy pop add 255 0
+}bind
+{
+32 sub x pop
+3 copy getinterval
+blacks 0 3 index getinterval
+x copy pop add 0 0
+}bind
+]def
+
+% read a raster line and unpack
+/readx{
+obuf 0 255 0
+currentfile lbuf readline pop
+{x dispatch x get exec} forall
+pop pop pop 0 xbytes getinterval}bd
+
+/mspic{
+/yy x def/xx x def
+/xbytes xx 8 idiv def
+xx yy 1 [xx 0 0 0 yy sub 0 yy]{readx}image}bd
+
+
+
+/Times-Roman/fA pcft/FA{/fA fs}bd
+/Times-Italic/fAI pcft/FAI{/fAI fs}bd
+/Times-Bold/fAB pcft/FAB{/fAB fs}bd
+/Times-BoldItalic/fAIB pcft/FAIB{/fAIB fs}bd
+/Helvetica/fC pcft/FC{/fC fs}bd
+/Helvetica-Oblique/fCI pcft/FCI{/fCI fs}bd
+/Helvetica-Bold/fCB pcft/FCB{/fCB fs}bd
+/Helvetica-BoldOblique/fCIB pcft/FCIB{/fCIB fs}bd
+/Courier/fH pcft/FH{/fH fs}bd
+/Courier-Oblique/fHI pcft/FHI{/fHI fs}bd
+/Courier-Bold/fHB pcft/FHB{/fHB fs}bd
+/Courier-BoldOblique/fHIB pcft/FHIB{/fHIB fs}bd
+/Helvetica-Narrow/fK pcft/FK{/fK fs}bd
+/Helvetica-Narrow-Oblique/fKI pcft/FKI{/fKI fs}bd
+/Helvetica-Narrow-Bold/fKB pcft/FKB{/fKB fs}bd
+/Helvetica-Narrow-BoldOblique/fKIB pcft/FKIB{/fKIB fs}bd
+/ZapfChancery-MediumItalic/fL pcft/FL{/fL fs}bd
+/ZapfChancery-MediumItalic/fLI pcft/FLI{/fLI fs}bd
+/ZapfChancery-MediumItalic/fLB pcft/FLB{/fLB fs}bd
+/ZapfChancery-MediumItalic/fLIB pcft/FLIB{/fLIB fs}bd
+/AvantGarde-Book/fM pcft/FM{/fM fs}bd
+/AvantGarde-BookOblique/fMI pcft/FMI{/fMI fs}bd
+/AvantGarde-Demi/fMB pcft/FMB{/fMB fs}bd
+/AvantGarde-DemiOblique/fMIB pcft/FMIB{/fMIB fs}bd
+(F:\\LPT\\MAN\\MANUAL.DOC)(EWvA)(November 16, 1993)fileinfo
+%%EndProlog
+%%Page: 0 1
+begpage
+14 FCB
+719 2578 m
+(CLiP - )s
+14 FCIB
+(C)s
+14 FCB
+( ode from )s
+14 FCIB
+(Li)s
+14 FCB
+( terate )s
+14 FCIB
+(P)s
+14 FCB
+( rograms)s
+14 FCB
+901 2438 m
+(Provisional User Manual)s
+12 FAB
+295 2133 m
+(Disclaimer:)s
+12 FA
+389 2073 m
+(This)s
+493(document)ms
+706(is)ms
+755(meant)ms
+893(for)ms
+967(programmers)ms
+1250(who)ms
+1351(are)ms
+1428(already)ms
+1591(familiar)ms
+1765(with)ms
+1870(the)ms
+1947(literate)ms
+2101(pro-)ms
+295 2013 m
+(gramming)s
+512(paradigm.)ms
+725(It)ms
+767(pretends)ms
+948(in)ms
+999(no)ms
+1061(way)ms
+1156(to)ms
+1207(be)ms
+1266(a)ms
+1299(complete)ms
+1495(user)ms
+1590(manual)ms
+1749(in)ms
+1799(the)ms
+1872(real)ms
+1959(meaning)ms
+2143(of)ms
+295 1953 m
+(the)s
+369(word.)ms
+497(But)ms
+583(the)ms
+657(document)ms
+868(should)ms
+1014(supply)ms
+1161(sufficient)ms
+1363(hints)ms
+1473(to)ms
+1525(experiment)ms
+1764(successfully)ms
+2021(with)ms
+2123(the)ms
+295 1893 m
+(CLiP)s
+413(system.)ms
+389 1833 m
+(You)s
+492(are)ms
+571(assumed)ms
+761(to)ms
+817(be)ms
+882(familiar)ms
+1058(with)ms
+1165(the)ms
+1243(ideas)ms
+1364(and)ms
+1454(design)ms
+1602(goals)ms
+1725(of)ms
+1784(the)ms
+1863(CLiP)ms
+1986(system)ms
+2143(as)ms
+295 1773 m
+(explained)s
+513(in)ms
+576([Ammers)ms
+788(and)ms
+884(Kramer)ms
+1061(1993].)ms
+1214(Also)ms
+1332(you)ms
+1431(should)ms
+1588(have)ms
+1707(read)ms
+11 FH
+1816(READ_ME.TXT)ms
+12 FA
+2143(or)ms
+11 FH
+295 1713 m
+(READ_ME.PS)s
+12 FA
+577(which)ms
+707(come)ms
+823(with)ms
+919(the)ms
+988(executables)ms
+1229(and)ms
+1309(understand)ms
+1536(the)ms
+1604(meaning)ms
+1784(of)ms
+1833(the)ms
+1902(INI-file)ms
+2062(which)ms
+295 1653 m
+(guides)s
+438(the)ms
+511(extraction)ms
+724(process.)ms
+389 1593 m
+(The)s
+481(DOS)ms
+596(and)ms
+683(VMS)ms
+806(versions)ms
+987(of)ms
+1044(CLiP)ms
+1164(consist)ms
+1318(of)ms
+1374(two)ms
+1464(independent)ms
+1723(programs,)ms
+1939(CLIP_1)ms
+2112(and)ms
+295 1533 m
+(CLIP_2.)s
+481(CLIP_1)ms
+654(is)ms
+703(purely)ms
+846(to)ms
+900(create)ms
+1035(an)ms
+1097(INI-file)ms
+1265(for)ms
+1339(CLIP_2,)ms
+1525(which)ms
+1662(performs)ms
+1858(the)ms
+1935(actual)ms
+2069(work.)ms
+295 1473 m
+(The)s
+387(Unix)ms
+502(version)ms
+664(consists)ms
+837(of)ms
+894(only)ms
+998(one)ms
+1085(program,)ms
+1282(CLIP)ms
+1405(\(which)ms
+1559(is)ms
+1607(identical)ms
+1794(to)ms
+1848(CLIP_2\),)ms
+2050(and)ms
+2137(an)ms
+295 1413 m
+(INI-file)s
+459(should)ms
+603(be)ms
+662(made)ms
+782(using)ms
+902(the)ms
+974(supplied)ms
+1155(scripts)ms
+1297(or)ms
+1350(an)ms
+1409(editor.)ms
+1549(This)ms
+1650(manual)ms
+1808(only)ms
+1909(deals)ms
+2023(with)ms
+2123(the)ms
+295 1353 m
+(second)s
+446(program.)ms
+14 FCB
+295 1193 m
+(1 Introduction)s
+12 FA
+295 1098 m
+(In)s
+354(short)ms
+472(the)ms
+551(idea)ms
+652(behind)ms
+806(CLiP)ms
+930(is)ms
+981(to)ms
+1038(define)ms
+1181(a)ms
+1221(style)ms
+1334(of)ms
+1393(programming)ms
+1683(sufficiently)ms
+1929(formal)ms
+2080(to)ms
+2137(be)ms
+295 1038 m
+(recognized)s
+531(by)ms
+597(a)ms
+636(literate)ms
+792(programming)ms
+1080(automaton.)ms
+1321(This)ms
+1426(syntax)ms
+1574(\(which)ms
+1729(we)ms
+1804(will)ms
+1899(refer)ms
+2010(to)ms
+2065(as)ms
+2123(the)ms
+295 978 m
+(CLiP-syntax\))s
+577(should)ms
+724(not)ms
+801(obstruct)ms
+975(a)ms
+1011(natural)ms
+1163(way)ms
+1259(of)ms
+1314(programming.)ms
+1612(Ideally)ms
+1764(the)ms
+1839(system)ms
+1991(should)ms
+2137(be)ms
+295 918 m
+(smart)s
+421(enough)ms
+583(to)ms
+637("see")ms
+756(stubs,)ms
+887(slots)ms
+993(and)ms
+1080(the)ms
+1157(like)ms
+1247(by)ms
+1312("inspecting")ms
+1573(the)ms
+1649(documentation)ms
+1961(and)ms
+2048(simply)ms
+295 858 m
+("understanding")s
+631(the)ms
+704(refinements)ms
+952(the)ms
+1025(programmer)ms
+1285(has)ms
+1364(made.)ms
+1497(Alas,)ms
+1613(this)ms
+1697(is)ms
+1743(far)ms
+1810(beyond)ms
+1970(the)ms
+2043(current)ms
+295 798 m
+(potential)s
+485(of)ms
+542(artificial)ms
+726(intelligence)ms
+975(and)ms
+1062(we)ms
+1136(will)ms
+1229(have)ms
+1339(to)ms
+1393(reach)ms
+1516(the)ms
+1593(automaton)ms
+1819(a)ms
+1857(helping)ms
+2022(hand)ms
+2134(by)ms
+295 738 m
+(defining)s
+474(a)ms
+508(special)ms
+660(syntax.)ms
+389 678 m
+(So)s
+454(we)ms
+524(want)ms
+634(the)ms
+707("look)ms
+829(and)ms
+914(feel")ms
+1021(of)ms
+1075(a)ms
+1110(documentation)ms
+1420(to)ms
+1471(be)ms
+1530(as)ms
+1584("natural")ms
+1776(as)ms
+1830(possible,)ms
+2019(but)ms
+2096(with)ms
+295 618 m
+(CLiP)s
+413(features)ms
+584(that)ms
+672(can)ms
+754(be)ms
+814(recognized)ms
+1046(by)ms
+1109(an)ms
+1169(automaton.)ms
+1406(On)ms
+1480(the)ms
+1554(other)ms
+1669(hand)ms
+1779(should)ms
+1926(the)ms
+2000(reader)ms
+2137(be)ms
+295 558 m
+(burdened)s
+497(as)ms
+554(little)ms
+662(as)ms
+720(possible)ms
+900(with)ms
+1004(the)ms
+1082(fact)ms
+1173(that)ms
+1264(additional)ms
+1480(processing)ms
+1709(is)ms
+1759(needed)ms
+1916(to)ms
+1971(extract)ms
+2123(the)ms
+295 498 m
+(modules.)s
+493(In)ms
+551(systems)ms
+726(like)ms
+818(VAMP)ms
+979([Ammers)ms
+1184(1984])ms
+1317(and)ms
+1406(WEB)ms
+1534([Knuth)ms
+1692(1984])ms
+1825(- which)ms
+1993(use)ms
+2076(batch)ms
+295 438 m
+(formatters -)s
+539(this)ms
+622(is)ms
+665(achieved)ms
+853(by)ms
+913(adding)ms
+1059(explicit)ms
+1219(commands)ms
+1446(in)ms
+1495(the)ms
+1566(source-files)ms
+1809(that)ms
+1894(are)ms
+1965(suppressed)ms
+295 378 m
+(in)s
+349(the)ms
+425(formatted)ms
+634(documentation.)ms
+959(But)ms
+1047(this)ms
+1134(technique)ms
+1344(does)ms
+1450(not)ms
+1530(work)ms
+1647(if)ms
+1693(the)ms
+1769(documentation)ms
+2082(envi-)ms
+8 FA
+295 254 m
+(CLiP)s
+373(provisional)ms
+532(user)ms
+595(manual)ms
+702(\(version)ms
+819(2.100\))ms
+endpage
+%%Page: 1 2
+begpage
+10 FCB
+295 3182 m
+(2)s
+10 FC
+460 3182 m
+(Syntax \(programming style\))s
+12 FA
+295 3011 m
+(ronment)s
+470(is)ms
+512(an)ms
+568(interactive)ms
+788(word-processor)ms
+1107(\(Word)ms
+1247(Perfect,)ms
+1409(Lotus)ms
+1532(Manuscript,)ms
+1781(MS-Word,)ms
+2005(Ami)ms
+2102(Pro,)ms
+295 2951 m
+(etc.\).)s
+411(So)ms
+480(CLiP)ms
+602(uses)ms
+705(either)ms
+835(the)ms
+912(ASCII-export)ms
+1204(from)ms
+1317(a)ms
+1356(word-processors)ms
+1703(or)ms
+1761(the)ms
+1838(ASCII)ms
+1985(input)ms
+2104(of)ms
+2162(a)ms
+295 2891 m
+(formatter)s
+491(and)ms
+573(extracts)ms
+738(modules)ms
+918(from)ms
+1025(there.)ms
+1148(In)ms
+1199(these)ms
+1312(files)ms
+1408(CLiP)ms
+1524(recognizes)ms
+1748(the)ms
+1819(important)ms
+2023(sections)ms
+295 2831 m
+(by)s
+357(a)ms
+392(particular)ms
+596(programming-style)ms
+992(rather)ms
+1121(than)ms
+1219(by)ms
+1282(explicit)ms
+1444(commands.)ms
+389 2771 m
+(The)s
+479(first)ms
+573(section)ms
+727(describes)ms
+926(the)ms
+1000(syntax)ms
+1143(that)ms
+1231(CLiP)ms
+1350("sees".)ms
+1499(The)ms
+1590(next)ms
+1689(section)ms
+1843(gives)ms
+1962(a)ms
+1997(couple)ms
+2143(of)ms
+295 2711 m
+(useful)s
+427(examples.)ms
+640(In)ms
+692(section)ms
+844(4)ms
+880(we)ms
+949(describe)ms
+1127(the)ms
+1198(options)ms
+1356(that)ms
+1442(may)ms
+1539(be)ms
+1597(used)ms
+1699(to)ms
+1749(customize)ms
+1963(the)ms
+2035(process)ms
+295 2651 m
+(of)s
+350(module)ms
+514(generation.)ms
+752(In)ms
+808(section)ms
+963(5)ms
+1002(we)ms
+1075(give)ms
+1175(some)ms
+1295(hints)ms
+1406(on)ms
+1470(how)ms
+1570(to)ms
+1623(organize)ms
+1809(your)ms
+1915(working)ms
+2096(with)ms
+295 2591 m
+(CLiP)s
+409(efficiently.)ms
+637(Stubs)ms
+757(and)ms
+839(slots)ms
+940(my)ms
+1013(remaining)ms
+1226(sections)ms
+1396(illustrate)ms
+1580(the)ms
+1651(style)ms
+1755(of)ms
+1806(documentation)ms
+2112(and)ms
+295 2531 m
+(programs)s
+492(that)ms
+575(would)ms
+709(result.)ms
+841(CLiP)ms
+955(is)ms
+997(in)ms
+1044(development)ms
+1311(and)ms
+1392(we)ms
+1459(compile)ms
+1628(the)ms
+1698(known)ms
+1843(bugs)ms
+1946(in)ms
+1993(section 6.)ms
+14 FCB
+295 2371 m
+(2 Syntax \(programming style\))s
+12 FAI
+295 2276 m
+(CLiP-lines)s
+12 FA
+562( that)ms
+670(is)ms
+723(lines)ms
+838(which)ms
+981(have)ms
+1096(a)ms
+1138(special)ms
+1297(meaning)ms
+1490(to)ms
+1549(CLiP )ms
+1718(start)ms
+1824(with)ms
+1934(a)ms
+1976(CLIP-left-)ms
+295 2216 m
+(parenthesis)s
+537(\(CLIP-lpar\))ms
+790(and)ms
+879(end)ms
+969(with)ms
+1075(a)ms
+1114(CLIP-right-parenthesis)ms
+1593(\(CLIP-rpar\).)ms
+1861(Both)ms
+1976(tokens)ms
+2123(are)ms
+295 2156 m
+(constructed)s
+545(as)ms
+607(extensions)ms
+838(of)ms
+899(the)ms
+980(tokens)ms
+1131(encapsulating)ms
+1426(comments)ms
+1651(which)ms
+1794(we)ms
+1872(will)ms
+1970(refer)ms
+2084(to)ms
+2143(as)ms
+11 FH
+295 2096 m
+(COMM-START)s
+12 FA
+581(and)ms
+11 FH
+665(COMM-END)ms
+12 FA
+(.)s
+909(If)ms
+954(we)ms
+1024(program)ms
+1205(in)ms
+1256(Pascal)ms
+1396(then)ms
+1493(everything)ms
+1719(between)ms
+1897(")ms
+11 FH
+(\(*)s
+12 FA
+(")s
+2005(and)ms
+2089(")ms
+11 FH
+(*\))s
+12 FA
+(")s
+295 2036 m
+(is)s
+340(seen)ms
+442(as)ms
+496(comment,)ms
+707(thus)ms
+803(we)ms
+874(have)ms
+981(the)ms
+1054(convention:)ms
+11 FH
+554 1951 m
+(COMM-START)s
+12 FA
+841(=)ms
+882(")ms
+11 FH
+(\(*)s
+12 FA
+(")s
+11 FH
+554 1891 m
+(COMM-END)s
+12 FA
+811(=)ms
+852(")ms
+11 FH
+(*\))s
+12 FA
+(")s
+295 1806 m
+(Extension)s
+503(of)ms
+553(the)ms
+622(comment)ms
+816(token)ms
+936(is)ms
+977(by)ms
+1035(a)ms
+1066(character)ms
+1257(with)ms
+1354(a)ms
+1385(special)ms
+1532(meaning)ms
+1712(to)ms
+1759(clip,)ms
+1855(the)ms
+11 FH
+1924(CLIP-CHAR)ms
+12 FA
+(.)s
+295 1746 m
+(In)s
+349(our)ms
+428(case)ms
+526(we)ms
+597(assume)ms
+11 FH
+554 1661 m
+(CLIP-CHAR)s
+12 FA
+814(=)ms
+854(")ms
+11 FH
+(*)s
+12 FA
+(")s
+295 1576 m
+(Thus)s
+407(CLiP-lines)ms
+636(are)ms
+710(enclosed)ms
+897(by)ms
+554 1491 m
+(CLIP-lpar)s
+769(of)ms
+823(the)ms
+897(form)ms
+1006(")ms
+11 FH
+(\(**)s
+12 FA
+(")s
+295 1406 m
+(and)s
+554 1321 m
+(CLIP-rpar)s
+772(of)ms
+826(the)ms
+899(form)ms
+1009(")ms
+11 FH
+(**\))s
+12 FA
+(")s
+295 1236 m
+(The)s
+380(parameters)ms
+11 FH
+607(COMM-START)ms
+12 FA
+(,)s
+11 FH
+902(COMM-END)ms
+12 FA
+1129(and)ms
+11 FH
+1209(CLIP-CHAR)ms
+12 FA
+1464(are)ms
+1532(set)ms
+1595(by)ms
+1653(the)ms
+1721(INI-file)ms
+1882(and)ms
+1961(it)ms
+1997(is)ms
+2037(evident)ms
+295 1176 m
+(that)s
+382(the)ms
+456(convention)ms
+690(can)ms
+772(be)ms
+832(adjusted.)ms
+389 1091 m
+(CLiP)s
+507(distinguishes)ms
+780(six)ms
+851(source)ms
+994(line)ms
+1082(categories:)ms
+10 FH
+395 1011 m
+(1)s
+470 1011 m
+(\(******************* <arbitrary string> **********************\))s
+395 961 m
+(2)s
+470 961 m
+(\(**************** End of <arbitrary string> ******************\))s
+395 911 m
+(3)s
+470 911 m
+(\(** <arbitrary string> **\))s
+395 861 m
+(4)s
+470 861 m
+(\(***************************************************************\))s
+395 811 m
+(5)s
+470 811 m
+(<the empty string>)s
+395 761 m
+(6)s
+470 761 m
+(<any string not falling in one of the above categories>)s
+12 FA
+295 664 m
+(We)s
+373(will)ms
+460(refer)ms
+563(to)ms
+611(a)ms
+642(line)ms
+726(from)ms
+832(the)ms
+902(second)ms
+1049(category)ms
+1230(as)ms
+1281(an)ms
+1337("L2")ms
+1442(and)ms
+1523(so)ms
+1577(on)ms
+1636(and)ms
+1717(investigate)ms
+1942(the)ms
+2012(meaning)ms
+295 604 m
+(is)s
+340(of)ms
+395(the)ms
+468(various)ms
+628(categories)ms
+843(for)ms
+914(CLiP.)ms
+389 544 m
+(The)s
+479(string)ms
+605(")ms
+11 FH
+(End)s
+736(of)ms
+12 FA
+(")s
+824(of)ms
+879(an)ms
+938(L2)ms
+1007(has)ms
+1086(a)ms
+1121(special)ms
+1272(meaning)ms
+1457(that)ms
+1545(distinguishes)ms
+1819(an)ms
+1879(L2)ms
+1947(from)ms
+2057(an)ms
+2117(L1.)ms
+295 484 m
+(Again)s
+429(this)ms
+514(special)ms
+665(string)ms
+792(is)ms
+838(defined)ms
+1000(by)ms
+1063(a)ms
+1097(parameter)ms
+1310(in)ms
+1361(the)ms
+1435(INI-file)ms
+11 FH
+554 394 m
+(END-STRING)s
+12 FA
+841(=)ms
+882(")ms
+11 FH
+(ENDOF)s
+12 FA
+(")s
+8 FA
+295 254 m
+(CLiP)s
+373(provisional)ms
+532(user)ms
+595(manual)ms
+702(\(version)ms
+819(2.100\))ms
+4 300 430 889 li
+25 2 1670 2288 li
+25 2 534 2288 li
+endpage
+%%Page: 2 3
+begpage
+10 FC
+1203 3182 m
+(2.1 Stub blocks and documentation blocks)s
+10 FCB
+2161 3182 m
+(3)s
+12 FA
+295 3011 m
+(Observe)s
+472(that)ms
+558(CLiP)ms
+674(does)ms
+776(not)ms
+851(distinguish)ms
+1081(between)ms
+1258(upper)ms
+1383(and)ms
+1466(lower)ms
+1590(case)ms
+1687(and)ms
+1770(forgets)ms
+1920(about)ms
+2041(spaces.)ms
+295 2951 m
+(In)s
+351(fact)ms
+440(CLiP)ms
+561(reduces)ms
+728(the)ms
+804(<arbitrary)ms
+1018(string>)ms
+1175(internally)ms
+1381(to)ms
+1435(a)ms
+1472(sequence)ms
+1670(of)ms
+1726(the)ms
+1802(characters)ms
+2019(")ms
+11 FH
+(A)s
+12 FA
+("-")s
+11 FH
+(Z)s
+12 FA
+(",)s
+295 2891 m
+(")s
+11 FH
+(0)s
+12 FA
+("-")s
+11 FH
+(9)s
+12 FA
+(")s
+460(and)ms
+545(")ms
+11 FH
+(.)s
+12 FA
+(")s
+389 2831 m
+(Note)s
+500(that)ms
+590(for)ms
+663(an)ms
+725(L3)ms
+796(the)ms
+872(character)ms
+1070(immediately)ms
+1334(following)ms
+1544(the)ms
+11 FH
+1619(CLIP-CHAR)ms
+12 FA
+1882(on)ms
+1947(the)ms
+2022(left)ms
+2104(side)ms
+295 2771 m
+(and)s
+381(the)ms
+456(character)ms
+654(preceding)ms
+866(the)ms
+11 FH
+941(CLIP-CHAR)ms
+12 FA
+1203(on)ms
+1267(the)ms
+1343(right)ms
+1451(side)ms
+1546(may)ms
+1647(be)ms
+1708(anything)ms
+1898(apart)ms
+2012(from)ms
+2123(the)ms
+11 FH
+295 2711 m
+(CLIP-CHAR)s
+12 FA
+555(itself.)ms
+12 FCB
+295 2588 m
+(2.1 Stub blocks and documentation blocks)s
+12 FA
+295 2501 m
+(From)s
+412(CLiP's)ms
+563(point)ms
+674(of)ms
+725(view)ms
+831(the)ms
+901(source-files)ms
+1143(are)ms
+1213(divided)ms
+1372(in)ms
+12 FAI
+1420(documentation)ms
+1726(blocks)ms
+12 FA
+1863(and)ms
+12 FAI
+1944(stub-blocks)ms
+12 FA
+(.)s
+295 2441 m
+(A)s
+344(stub-block)ms
+568(starts)ms
+686(with)ms
+788(an)ms
+848(L1)ms
+917(and)ms
+1002(usually)ms
+1159(ends)ms
+1264(with)ms
+1365(an)ms
+1426(L2.)ms
+1507(A)ms
+1556(special)ms
+1707(kind)ms
+1809(of)ms
+1864(stub,)ms
+1973(a)ms
+2008(so)ms
+2065(called)ms
+295 2381 m
+(quick)s
+416(stub)ms
+509(\(see)ms
+599(sect.)ms
+699(3.3)ms
+772(and)ms
+854(4\),)ms
+918(is)ms
+961(ended)ms
+1090(by)ms
+1150(an)ms
+1207(L5)ms
+1273(or)ms
+1324(an)ms
+1382(<EOF>.)ms
+1555(Everything)ms
+1787(outside)ms
+1941(a)ms
+1973(stub-block)ms
+295 2321 m
+(is)s
+343(a)ms
+381(documentation)ms
+694(block)ms
+820(and)ms
+908(ignored)ms
+1076(by)ms
+1142(CLiP.)ms
+1276(For)ms
+1360(this)ms
+1448(reason)ms
+1594(we)ms
+1668(say)ms
+1750(that)ms
+1841(CLiP)ms
+1962(is)ms
+2011(in)ms
+12 FAI
+2065(active)ms
+12 FAI
+295 2261 m
+(mode)s
+12 FA
+419(during)ms
+565(the)ms
+642(processing)ms
+872(of)ms
+930(a)ms
+968(stub-block)ms
+1195(and)ms
+1283(in)ms
+12 FAI
+1338(passive)ms
+1501(mode)ms
+12 FA
+1625(otherwise.)ms
+1848(The)ms
+1942(only)ms
+2046(way)ms
+2146(to)ms
+295 2201 m
+(change)s
+448(CLiP)ms
+566(from)ms
+675(passive)ms
+835(to)ms
+886(active)ms
+1017(mode)ms
+1140(is)ms
+1186(by)ms
+1248(an)ms
+1307(L1)ms
+1375(and)ms
+1459(the)ms
+1532(usual)ms
+1650(way)ms
+1745(from)ms
+1855(active)ms
+1986(to)ms
+2037(passive)ms
+295 2141 m
+(is)s
+340(through)ms
+508(an)ms
+568(L2.)ms
+649(An)ms
+722(L2)ms
+790(in)ms
+842(passive)ms
+1001(mode)ms
+1125(is)ms
+1171(presumably)ms
+1417(an)ms
+1476(error)ms
+1586(and)ms
+1671(will)ms
+1761(be)ms
+1821(ignored.)ms
+12 FCB
+295 1988 m
+(2.2 Segments)s
+12 FA
+295 1901 m
+(A)s
+356(stub-block)ms
+592(contains)ms
+784(one)ms
+882(and)ms
+979(only)ms
+1094(one)ms
+12 FAI
+1191(stub-segment)ms
+12 FA
+(,)s
+1493(which)ms
+1640(starts)ms
+1771(the)ms
+1858(stub-block.)ms
+2107(The)ms
+295 1841 m
+(stub-segment)s
+574(may)ms
+672(be)ms
+732(followed)ms
+922(by)ms
+985(any)ms
+1069(number)ms
+1235(of)ms
+12 FAI
+1289(slot-segments)ms
+12 FA
+1574(and/or)ms
+12 FAI
+1714(code-segments)ms
+12 FA
+(.)s
+389 1781 m
+(An)s
+458(L1)ms
+522(always)ms
+669(starts)ms
+783(a)ms
+814(new)ms
+906(stub-)ms
+1014(or)ms
+1064(slot-segment)ms
+1328(and)ms
+1409(the)ms
+1479(segment)ms
+1654(continues)ms
+1854(with)ms
+1951(any)ms
+2032(number)ms
+295 1721 m
+(of)s
+350(lines)ms
+459(of)ms
+514(type)ms
+614(L3)ms
+684(or)ms
+740(L4.)ms
+822(A)ms
+872(segment)ms
+1052(is)ms
+1100(a)ms
+1136(slot-segment)ms
+1405(if)ms
+1450(and)ms
+1536(only)ms
+1639(if)ms
+1684(it)ms
+1725(is)ms
+1773(not)ms
+1851(the)ms
+1926(first)ms
+2020(one)ms
+2107(of)ms
+2162(a)ms
+295 1661 m
+(stub-block.)s
+532(A)ms
+582(code-segment)ms
+874(consists)ms
+1046(of)ms
+1102(any)ms
+1188(number)ms
+1355(of)ms
+1410(contiguous)ms
+1644(lines)ms
+1752(of)ms
+1808(type)ms
+1908(L5.)ms
+1990(Stub-)ms
+2112(and)ms
+12 FA
+295 1601 m
+(slot-segments)s
+587(have)ms
+699(an)ms
+12 FAI
+764(identification)ms
+12 FA
+1048(or)ms
+12 FAI
+1107(name)ms
+12 FA
+1233(which)ms
+1373(is)ms
+1424(constructed)ms
+1672(somehow)ms
+1881(from)ms
+1996(the)ms
+11 FH
+2075(<ar-)ms
+11 FH
+295 1541 m
+(bitrary)s
+515(string>)ms
+12 FA
+(s)s
+739(inside)ms
+871(the)ms
+945(segment.)ms
+389 1481 m
+(L3)s
+455(and)ms
+539(L4)ms
+606(are)ms
+678(continuations)ms
+958(of)ms
+1011(stub-)ms
+1123(and)ms
+1206(slot-segments,)ms
+1505(but)ms
+1580(with)ms
+1680(a)ms
+1714(slightly)ms
+1875(different)ms
+2058(status.)ms
+295 1421 m
+(An)s
+373(L3)ms
+446(that)ms
+538(cannot)ms
+688(be)ms
+753(pasted)ms
+898(to)ms
+954(a)ms
+994(segment)ms
+1177(is)ms
+1228(flagged)ms
+1395(as)ms
+1454(an)ms
+1519(error.)ms
+1645(But)ms
+1735(an)ms
+1799(L4)ms
+1872(under)ms
+2003(the)ms
+2082(same)ms
+295 1361 m
+(conditions)s
+515(is)ms
+561(interpreted)ms
+790(as)ms
+844(belonging)ms
+1057(to)ms
+1108(the)ms
+1182(current)ms
+1336(code-segment.)ms
+12 FCB
+295 1208 m
+(2.3 Options)s
+12 FA
+295 1121 m
+(The)s
+390(module)ms
+557(extraction)ms
+774(process)ms
+941(can)ms
+1028(be)ms
+1092(tuned)ms
+1221(by)ms
+1288(means)ms
+1433(of)ms
+12 FAI
+1492(options)ms
+12 FA
+(.)s
+1669(Stub-segments)ms
+1981(as)ms
+2040(well)ms
+2143(as)ms
+295 1061 m
+(slot-segments)s
+593(may)ms
+702(have)ms
+820(options.)ms
+1003(An)ms
+1087(option)ms
+1238(starts)ms
+1367(with)ms
+1479(a)ms
+1525(keyword)ms
+1723(signalled)ms
+1927(by)ms
+2000(a)ms
+2046(special)ms
+11 FH
+295 1001 m
+(OPTION-MARKER)s
+12 FA
+(.)s
+681(The)ms
+775(option)ms
+919(keyword)ms
+1110(may)ms
+1212(be)ms
+1276(abbreviated)ms
+1525(to)ms
+1581(a)ms
+1619(unique)ms
+1772(headerstring)ms
+2035(for)ms
+2110(that)ms
+295 941 m
+(option.)s
+446(We)ms
+527(will)ms
+616(assume)ms
+775(")ms
+11 FH
+(#)s
+12 FA
+(")s
+854(for)ms
+11 FH
+924(OPTION-MARKER)ms
+12 FA
+(,)s
+1305(but)ms
+1380(of)ms
+1433(course)ms
+1575(this)ms
+1659(again)ms
+1778(is)ms
+1823(a)ms
+1857(parameter)ms
+2068(set)ms
+2135(by)ms
+295 881 m
+(the)s
+370(INI-file.)ms
+549(The)ms
+641(argument\(s\))ms
+897(following)ms
+1105(an)ms
+1166(option)ms
+1308(continue)ms
+1495(till)ms
+1564(the)ms
+1640(next)ms
+1740(option-keyword)ms
+2073(or)ms
+2129(till)ms
+295 821 m
+(the)s
+368(end)ms
+453(of)ms
+507(the)ms
+581(segment.)ms
+772(Therefore)ms
+982(the)ms
+1055(name)ms
+1176(of)ms
+1230(a)ms
+1265(segment)ms
+1444(must)ms
+1554(precede)ms
+1722(the)ms
+1796(options.)ms
+389 761 m
+(In)s
+440(general)ms
+596(options)ms
+753(operate)ms
+910(on)ms
+970(the)ms
+12 FAI
+1040(inside)ms
+12 FA
+1169(of)ms
+1221(the)ms
+1291(stub)ms
+1384(only,)ms
+1495(since)ms
+1608(that)ms
+1692(is)ms
+1735(the)ms
+1806(part)ms
+1893(of)ms
+1944(the)ms
+2015(program)ms
+295 701 m
+(that)s
+381(the)ms
+453(programmer)ms
+711(of)ms
+764(this)ms
+847(particular)ms
+1050(refinement)ms
+1278(has)ms
+1355(in)ms
+1405(his)ms
+1475(or)ms
+1528(her)ms
+1603(mind.)ms
+1729(In)ms
+1782(addition)ms
+1957(options)ms
+2115(can)ms
+295 641 m
+(be)s
+351(inherited.)ms
+551(The)ms
+639(meaning)ms
+821(of)ms
+872(the)ms
+943(various)ms
+1100(options)ms
+1257(is)ms
+1300(explained)ms
+1504(in)ms
+1553(section 4.)ms
+1754(Some)ms
+1878(frequently)ms
+2093(used)ms
+295 581 m
+(options)s
+454(show)ms
+572(up)ms
+635(in)ms
+686(the)ms
+760(examples)ms
+961(of)ms
+1015(section 3.)ms
+8 FA
+295 254 m
+(CLiP)s
+373(provisional)ms
+532(user)ms
+595(manual)ms
+702(\(version)ms
+819(2.100\))ms
+endpage
+%%Page: 3 4
+begpage
+10 FCB
+295 3182 m
+(4)s
+10 FC
+460 3182 m
+(Examples)s
+14 FCB
+295 3001 m
+(3 Examples)s
+12 FA
+295 2906 m
+(In)s
+351(the)ms
+426(examples)ms
+630(we)ms
+703(will)ms
+795(illustrate)ms
+984(the)ms
+1060(most)ms
+1172(important)ms
+1381(features)ms
+1554(of)ms
+1610(CLiP)ms
+1730(by)ms
+1794(making)ms
+1959(remarks)ms
+2134(on)ms
+295 2846 m
+(excerpts)s
+474(drawn)ms
+611(from)ms
+721(the)ms
+794(documentation)ms
+1104(of)ms
+1158(CLiPs)ms
+1296(predecessor,)ms
+1557(VAMP.)ms
+12 FCB
+295 2723 m
+(3.1 Example 1: Defining a module)s
+10 FAIB
+470 2641 m
+(The module VAMP:)s
+10 FA
+570 2591 m
+(Starting from nowhere, the empty program will do.)s
+10 FH
+395 2491 m
+(1)s
+470 2491 m
+(\(**** #File "VAMP.PAS". #Indent on. ****\))s
+395 2441 m
+(2)s
+395 2391 m
+(3)s
+470 2391 m
+(\(***************************************************************\))s
+395 2341 m
+(4)s
+470 2341 m
+(\(* Routine: VAMP)s
+1070(-)ms
+1170(Main module of the VAMP system.)ms
+2020( *\))ms
+395 2291 m
+(5)s
+470 2291 m
+(\(* Purpose:)s
+870(Main module and unique entry point to the)ms
+2020( *\))ms
+395 2241 m
+(6)s
+470 2241 m
+(\(*)s
+870(VAMP-system.)ms
+2020( *\))ms
+395 2191 m
+(7)s
+470 2191 m
+(\(* Interface:)s
+870(TTY -)ms
+1070(All communication with the user)ms
+2020( *\))ms
+395 2141 m
+(8)s
+470 2141 m
+(\(*)s
+870(proceeds via the terminal.)ms
+2020( *\))ms
+395 2091 m
+(9)s
+470 2091 m
+(\(* Author/Date:)s
+870(VAMP project management, Sept. 12, 1983.)ms
+2020( *\))ms
+370 2041 m
+(10)s
+470 2041 m
+(\(***************************************************************\))s
+370 1991 m
+(11)s
+370 1941 m
+(12)s
+470 1941 m
+(\(********************** VAMP \(body\) **************************\))s
+370 1891 m
+(13)s
+370 1841 m
+(14)s
+470 1841 m
+(\(*********************** End of VAMP *************************\))s
+370 1791 m
+(15)s
+370 1741 m
+(16)s
+370 1691 m
+(18)s
+470 1691 m
+(\(********* VAMP \(body\) #def ***********\))s
+370 1641 m
+(19)s
+470 1641 m
+(PROGRAM)s
+770(VAMP \(INPUT, OUTPUT\);)ms
+370 1591 m
+(20)s
+570 1591 m
+(BEGIN)s
+370 1541 m
+(21)s
+570 1541 m
+(WRITELN \('!!! VAMP was here !!!'\);)s
+370 1491 m
+(22)s
+570 1491 m
+(END \(*VAMP*\).)s
+370 1441 m
+(23)s
+470 1441 m
+(\(********** End of VAMP \(body\) *********\))s
+12 FAB
+295 1344 m
+(Remarks:)s
+12 FA
+389 1284 m
+(There)s
+523(are)ms
+602(two)ms
+695(stubs)ms
+816(in)ms
+873(this)ms
+964(section.)ms
+1136(Line)ms
+1246(1-14)ms
+1355(and)ms
+1446(line)ms
+1539(18-23.)ms
+1686(Both)ms
+1801(stub-blocks)ms
+2050(have)ms
+2162(a)ms
+295 1224 m
+(stub-segment)s
+574(of)ms
+628(one)ms
+713(line)ms
+800(only)ms
+901(\(lines)ms
+1025(1)ms
+1063(and)ms
+1147(18)ms
+1210(respectively\).)ms
+389 1164 m
+(The)s
+480(first)ms
+575(stub-segment)ms
+856(has)ms
+937(no)ms
+1001(identification.)ms
+1294(It)ms
+1339(specifies)ms
+1528(the)ms
+1603(start)ms
+1703(of)ms
+1759(a)ms
+1795(new)ms
+1893(output)ms
+2034(module)ms
+295 1104 m
+(by)s
+357(the)ms
+431(FILE)ms
+549(option)ms
+689(and)ms
+774(thus)ms
+870(is)ms
+915(not)ms
+992(meant)ms
+1126(to)ms
+1178(be)ms
+1238(referenced)ms
+1461(\(see)ms
+1554(also)ms
+1647(example)ms
+1829(5\).)ms
+389 1044 m
+(Line)s
+494(2)ms
+533(\(an)ms
+611(L5\))ms
+697(separates)ms
+894(line)ms
+982(3)ms
+1021(\(an)ms
+1099(L4\))ms
+1185(from)ms
+1296(the)ms
+1371(stub-segment)ms
+1652(and)ms
+1738(makes)ms
+1879(it)ms
+1921(belong)ms
+2071(to)ms
+2123(the)ms
+295 984 m
+(code-segment)s
+585(which)ms
+719(expands)ms
+896(over)ms
+997(lines)ms
+1104(2-11.)ms
+389 924 m
+(There)s
+525(resides)ms
+684(only)ms
+793(one)ms
+885(slot)ms
+978(inside)ms
+1117(the)ms
+1198(first)ms
+1299(stub)ms
+1402(\(line)ms
+1514(12\))ms
+1601(and)ms
+1693(this)ms
+1785(slot)ms
+1878(is)ms
+1931(identified)ms
+2143(as)ms
+295 864 m
+(")s
+11 FH
+(VAMPBODY)s
+12 FA
+(".)s
+580(The)ms
+671(second)ms
+822(stub)ms
+918(has)ms
+997(no)ms
+1059(slots)ms
+1164(at)ms
+1212(all.)ms
+389 804 m
+(Line)s
+489(13)ms
+548(is)ms
+590(a)ms
+621(trivial)ms
+749(code-segment)ms
+1036(and)ms
+1117(line)ms
+1201(14)ms
+1260(marks)ms
+1391(the)ms
+1461(end)ms
+1542(of)ms
+1592(the)ms
+1662(first)ms
+1752(stub-block.)ms
+1984(The)ms
+2071(string)ms
+295 744 m
+(following)s
+501(the)ms
+575("End)ms
+689(of")ms
+763(is)ms
+809(optional)ms
+985(and)ms
+1070(does)ms
+1174(not)ms
+1251(have)ms
+1357(to)ms
+1409(match)ms
+1544(the)ms
+1617(stub)ms
+1713(name)ms
+1834(in)ms
+1885(any)ms
+1970(way.)ms
+8 FA
+295 254 m
+(CLiP)s
+373(provisional)ms
+532(user)ms
+595(manual)ms
+702(\(version)ms
+819(2.100\))ms
+4 1250 430 2044 li
+endpage
+%%Page: 4 5
+begpage
+10 FC
+1453 3182 m
+(3.2 Example 2: Multiple slots)s
+10 FCB
+2161 3182 m
+(5)s
+12 FCB
+295 3008 m
+(3.2 Example 2: Multiple slots)s
+10 FAIB
+470 2926 m
+(Environment module)s
+10 FA
+(:)s
+10 FA
+570 2876 m
+(In the past there have been made several changes in the VAMP program. These changes have)s
+10 FA
+470 2826 m
+(been made in the extracted modules rather then in the VAMP source. To make source files consistent)s
+10 FA
+470 2776 m
+(with the modules, the source files have been updated in march 1990 by Jeroen Reef.)s
+10 FA
+570 2726 m
+(Furthermore, the updated source files contain two additional modules, VAMP.MSG and)s
+10 FA
+470 2676 m
+(DECLAR_MOD. The module VAMP.MSG contains the error messages of VAMP and the module)s
+10 FA
+470 2626 m
+(DECLAR_MOD contains the types and constants used by several modules of VAMP. This module)s
+10 FA
+470 2576 m
+(uses the ENVIRONMENT, which directs the compiler to generate an environment file)s
+10 FA
+470 2526 m
+(DECLAR.PEN. Other modules can reference the identifiers declared in DECLAR_MOD by inheriting)s
+10 FA
+470 2476 m
+(the environment with the INHERIT attribute.)s
+10 FH
+395 2359 m
+(1)s
+470 2359 m
+(\(****** #File "DECLAR_MOD.PAS". #Indent ON. ******\))s
+395 2309 m
+(2)s
+395 2259 m
+(3)s
+470 2259 m
+(\(***************************************************************\))s
+395 2209 m
+(4)s
+470 2209 m
+(\(* Module to contain all parameters and global declarations)s
+2020( *\))ms
+395 2159 m
+(5)s
+470 2159 m
+(\(* of the VAMP system.)s
+2020( *\))ms
+395 2109 m
+(6)s
+470 2109 m
+(\(***************************************************************\))s
+395 2059 m
+(7)s
+470 2059 m
+([ENVIRONMENT \('DECLAR.PEN'\)])s
+1270(MODULE DECLARS;)ms
+395 2009 m
+(8)s
+395 1959 m
+(9)s
+470 1959 m
+(\(********** Parameters of the VAMP-system \(#mul\) *************\))s
+370 1909 m
+(10)s
+370 1859 m
+(11)s
+470 1859 m
+(TYPE)s
+370 1809 m
+(12)s
+570 1809 m
+(ABSTRACT = \(DEFINED, UNDEFINED\);)s
+370 1759 m
+(13)s
+570 1759 m
+(\(********* Simple types of the VAMP-system \(#mul\) ********\))s
+370 1709 m
+(14)s
+570 1709 m
+(\(******** Structured types of the VAMP-system \(#mul\) ******\))s
+370 1659 m
+(15)s
+470 1659 m
+(END.)s
+370 1609 m
+(16)s
+470 1609 m
+(\(***************** End of DECLARE_MOD.PAS ********************\))s
+12 FAB
+295 1513 m
+(Remarks:)s
+12 FA
+389 1453 m
+(The)s
+483(stub-block)ms
+711(extends)ms
+880(over)ms
+986(16)ms
+1052(lines.)ms
+1176(Line)ms
+1284(1)ms
+1326(is)ms
+1376(the)ms
+1454(stub-segment)ms
+1737(and)ms
+1826(line)ms
+1918(16)ms
+1984(closes)ms
+2123(the)ms
+295 1393 m
+(stub-block.)s
+532(Lines)ms
+657(2-8)ms
+737(constitute)ms
+945(the)ms
+1020(first)ms
+1115(code-segment)ms
+1406(of)ms
+1462(the)ms
+1536(stub)ms
+(,)s
+1646(lines)ms
+1754(10-12)ms
+1885(the)ms
+1960(middle)ms
+2112(one)ms
+295 1333 m
+(and)s
+379(line)ms
+467(15)ms
+529(the)ms
+603(last)ms
+685(one.)ms
+389 1273 m
+(There)s
+515(are)ms
+587(three)ms
+697(slots)ms
+799(\(or)ms
+868(slot-segments\),)ms
+1182(lines)ms
+1287(9,)ms
+1335(13)ms
+1395(and)ms
+1478(14.)ms
+1550(All)ms
+1625(slots)ms
+1727(consist)ms
+1876(of)ms
+1928(one)ms
+2010(line)ms
+2096(only)ms
+295 1213 m
+(and)s
+380(carry)ms
+496(the)ms
+570(multiple)ms
+750(option.)ms
+903(For)ms
+986(instance)ms
+1163(the)ms
+1237(first)ms
+1331(slot)ms
+1416(can)ms
+1499(swallow)ms
+1679(any)ms
+1764(number)ms
+1930(of)ms
+1985(parameter)ms
+295 1153 m
+(definition)s
+501(that)ms
+589(might)ms
+718(turn)ms
+811(up)ms
+874(in)ms
+925(the)ms
+999(future.)ms
+389 1093 m
+(The)s
+479(names)ms
+619(\(identifications\))ms
+951(of)ms
+1005(the)ms
+1079(slots)ms
+1183(are)ms
+1256(respectively)ms
+460 1008 m
+(")s
+11 FH
+(PARAMETERSOFTHEVAMPSYSTEM)s
+12 FA
+(")s
+460 948 m
+(")s
+11 FH
+(SIMPLETYPESOFTHEVAMPSYSTEM)s
+12 FA
+(")s
+460 888 m
+(")s
+11 FH
+(STRUCTUREDTYPESOFTHEVAMPSYSTEM)s
+12 FA
+(")s
+8 FA
+295 254 m
+(CLiP)s
+373(provisional)ms
+532(user)ms
+595(manual)ms
+702(\(version)ms
+819(2.100\))ms
+4 800 430 1988 li
+4 500 430 2704 li
+endpage
+%%Page: 5 6
+begpage
+10 FCB
+295 3182 m
+(6)s
+10 FC
+460 3182 m
+(Examples)s
+12 FCB
+295 3008 m
+(3.3 Example 3: Quick stubs and abstract data types)s
+10 FAIB
+495 2926 m
+(First level data structures:)s
+10 FA
+595 2876 m
+(This level introduces the data-structure TTY_INFO, containing the initial communication)s
+10 FA
+495 2826 m
+(between the terminal and the program. The definition requires in addition four system parameters)s
+10 FA
+495 2776 m
+(and some constants and types which are related to file specifications. The structure of CODE_INFO)s
+10 FA
+495 2726 m
+(is left open for the time being.)s
+10 FH
+420 2626 m
+(1)s
+495 2626 m
+(\(********** Parameters of the VAMP-system \(#quick\) ***********\))s
+420 2576 m
+(2)s
+495 2576 m
+(\(*)s
+795(-------- Parameters of TTY_INFO ---------)ms
+2045( *\))ms
+420 2526 m
+(3)s
+495 2526 m
+(MAX_FILE_SPEC_L = 255;)s
+1195(\(* Maximum length file-specific.)ms
+2045( *\))ms
+420 2476 m
+(4)s
+495 2476 m
+(MAX_FILE_NAME_L = 39;)s
+1195(\(* Maximum length file-name.)ms
+2045( *\))ms
+420 2426 m
+(5)s
+495 2426 m
+(MAX_FILE_EXT_L = 39;)s
+1195(\(* Maximum length file-extension.)ms
+2045( *\))ms
+420 2376 m
+(6)s
+495 2376 m
+(MAX_IN_FILES =)s
+995( 8;)ms
+1195(\(* Maximum number of in-files for)ms
+2045( *\))ms
+420 2326 m
+(7)s
+1195 2326 m
+(\(* a single run.)s
+2045( *\))ms
+420 2276 m
+(8)s
+495 2276 m
+(UPB_IN_FILES =)s
+995(9;)ms
+1195(\(* = MAX_IN_FILES + 1.)ms
+2045( *\))ms
+420 2226 m
+(9)s
+495 2226 m
+(MAX_MODULES =)s
+995(10;)ms
+1195(\(* Maximum number of modules)ms
+2045( *\))ms
+395 2176 m
+(10)s
+1195 2176 m
+(\(* specified for a run.)s
+2045( *\))ms
+395 2126 m
+(11)s
+495 2126 m
+(UPB_MODULES =)s
+995(11;)ms
+1195(\(* = MAX_MODULES + 1.)ms
+2045( *\))ms
+395 2076 m
+(12)s
+495 2076 m
+(EMPTY = '';)s
+395 2026 m
+(13)s
+395 1976 m
+(14)s
+495 1976 m
+(\(********* Simple types of the VAMP-system \(#quick\) **********\))s
+395 1926 m
+(15)s
+495 1926 m
+(\(*)s
+795(-------- Simple types of TTY_INFO ---------)ms
+2045( *\))ms
+395 1876 m
+(16)s
+495 1876 m
+(FILE_SPEC = VARYING [MAX_FILE_SPEC_L] OF CHAR;)s
+395 1826 m
+(17)s
+495 1826 m
+(FILE_NAME = VARYING [MAX_FILE_NAME_L] OF CHAR;)s
+395 1776 m
+(18)s
+495 1776 m
+(FILE_EXT = VARYING [MAX_FILE_EXT_L] OF CHAR;)s
+395 1726 m
+(19)s
+395 1676 m
+(20)s
+495 1676 m
+(\(******** Structured types of the VAMP-system ****************\))s
+395 1626 m
+(21)s
+495 1626 m
+(\(*)s
+695(-------- Structured types of TTY_INFO ---------)ms
+2045( *\))ms
+395 1576 m
+(22)s
+495 1576 m
+(TTY_INFO =)s
+795(RECORD)ms
+395 1526 m
+(23)s
+895 1526 m
+(IN_FILES:)s
+1195(ARRAY [1..UPB_IN_FILES] OF FILE_SPEC;)ms
+395 1476 m
+(24)s
+895 1476 m
+(MODULES:)s
+1195(ARRAY [1..UPB_MODULES] OF FILE_NAME;)ms
+395 1426 m
+(25)s
+895 1426 m
+(DFLT_EXT:)s
+1195(FILE_EXT;)ms
+395 1376 m
+(26)s
+895 1376 m
+(INV_MODE,)s
+395 1326 m
+(27)s
+895 1326 m
+(GO:)s
+1195(BOOLEAN;)ms
+395 1276 m
+(29)s
+795 1276 m
+(END \(*RECORD*\);)s
+395 1226 m
+(30)s
+495 1226 m
+(\(**************** Declaration of CODE_INFO *******************\))s
+395 1176 m
+(31)s
+495 1176 m
+(\(******** End of Structured types of the VAMP-system *********\))s
+395 1126 m
+(32)s
+395 1076 m
+(33)s
+395 1026 m
+(34)s
+495 1026 m
+(\(************* Declaration of CODE_INFO \(#def\) ***************\))s
+395 976 m
+(35)s
+495 976 m
+(CODE_INFO = ABSTRACT;)s
+395 926 m
+(36)s
+495 926 m
+(\(******************** End of declaration *********************\))s
+12 FAB
+295 846 m
+(Remarks:)s
+12 FA
+389 786 m
+(This)s
+487(section)ms
+639(contains)ms
+816(five)ms
+904(stubs)ms
+1017(altogether,)ms
+1239(i.e.)ms
+1310(lines)ms
+1415(1-12,)ms
+1529(14-18,)ms
+1668(20-31)ms
+1795(and)ms
+1877(34-36.)ms
+2016(The)ms
+2104(first)ms
+295 726 m
+(two)s
+384(blocks)ms
+529(one)ms
+616(have)ms
+726(no)ms
+790(internal)ms
+958(slots.)ms
+1077(The)ms
+1169(quick)ms
+1295(option)ms
+1437(promotes)ms
+1638(them)ms
+1753(to)ms
+1807(quick)ms
+1932(stubs,)ms
+2062(which)ms
+295 666 m
+(means)s
+435(that)ms
+522(they)ms
+621(are)ms
+694(completed)ms
+915(by)ms
+978(the)ms
+1051(first)ms
+1144(line)ms
+1232(that)ms
+1319(is)ms
+1365(not)ms
+1442(an)ms
+1501(L6.)ms
+389 606 m
+(The)s
+480(third)ms
+587(stub)ms
+684(\(20-31\))ms
+847(illustrates)ms
+1055(how)ms
+1155(an)ms
+1215(abstract)ms
+1384(data)ms
+1480(type)ms
+1580(can)ms
+1663(be)ms
+1723(implemented.)ms
+2010(The)ms
+2101(stub)ms
+295 546 m
+(is)s
+341(an)ms
+402(ordinary)ms
+584(one)ms
+670(with)ms
+772(one)ms
+858(slot)ms
+943(- identified)ms
+1177(as)ms
+1232(")ms
+11 FH
+(DECLARATIONOFCODEINFO)s
+12 FA
+(" -)s
+1893(at)ms
+1943(line)ms
+2031(30.)ms
+2107(The)ms
+295 486 m
+(slot)s
+380(is)ms
+427(by)ms
+490(default)ms
+642(satisfied)ms
+822(with)ms
+924(the)ms
+998(stub)ms
+1095(at)ms
+1144(lines)ms
+1252(34-36.)ms
+1394(But)ms
+1480(this)ms
+1565(declaration)ms
+1800(will)ms
+1891(be)ms
+1952(replaced)ms
+2134(by)ms
+295 426 m
+(a)s
+329(new)ms
+425(one)ms
+510(at)ms
+558(some)ms
+676(time)ms
+778(in)ms
+829(the)ms
+903(future.)ms
+8 FA
+295 254 m
+(CLiP)s
+373(provisional)ms
+532(user)ms
+595(manual)ms
+702(\(version)ms
+819(2.100\))ms
+4 2050 455 1929 li
+endpage
+%%Page: 6 7
+begpage
+10 FC
+1182 3182 m
+(3.4 Example 4: An ordinary refinement step)s
+10 FCB
+2161 3182 m
+(7)s
+12 FCB
+295 3008 m
+(3.4 Example 4: An ordinary refinement step)s
+10 FAIB
+470 2926 m
+(Body of VAMP:)s
+10 FA
+570 2876 m
+(The input-files will be processed sequentially in the same order as given by the user. The inter-)s
+10 FA
+470 2826 m
+(mediate file "VAMP.TMP" is guarded by a sentinel to simplify backspacing later on and it needs an)s
+10 FA
+470 2776 m
+(additional global declaration.)s
+10 FH
+395 2676 m
+(1)s
+570 2676 m
+(\(*********** Simple types of the VAMP-system ************\))s
+395 2626 m
+(2)s
+570 2626 m
+(FTYPE = FILE OF CHAR;)s
+395 2576 m
+(3)s
+570 2576 m
+(\(****************** End of declaration ******************\))s
+470 2476 m
+(Now the body of VAMP expands to)s
+395 2376 m
+(4)s
+470 2376 m
+(\(********************** VAMP \(body\) **************************\))s
+395 2326 m
+(5)s
+470 2326 m
+([INHERIT \('SYS$LIBRARY:STARLET.PEN', 'DECLAR.PEN'\)])s
+395 2276 m
+(6)s
+470 2276 m
+(PROGRAM)s
+770(VAMP \(INPUT, OUTPUT\);)ms
+395 2226 m
+(7)s
+395 2176 m
+(8)s
+470 2176 m
+(\(***************** Constants of VAMP \(#mult\) *****************\))s
+395 2126 m
+(9)s
+470 2126 m
+(\(***************** Types of VAMP \(#mult\) *********************\))s
+370 2076 m
+(10)s
+470 2076 m
+(VAR)s
+370 2026 m
+(11)s
+470 2026 m
+( FILE_CNT:)s
+970(1..UPB_IN_FILES;)ms
+370 1976 m
+(12)s
+470 1976 m
+( CURR_IN_FILE:)s
+970(TEXT;)ms
+1170(\(* Currently read file.)ms
+2020( *\))ms
+370 1926 m
+(13)s
+470 1926 m
+( CODE_LINES:)s
+970(FTYPE;)ms
+1170(\(* From input extracted code.)ms
+2020( *\))ms
+370 1876 m
+(14)s
+470 1876 m
+( TTY_DATA:)s
+970(TTY_INFO;)ms
+370 1826 m
+(15)s
+470 1826 m
+( CODE_STRUCT:)s
+970(CODE_INFO;)ms
+370 1776 m
+(16)s
+570 1776 m
+(\(************ Variables of VAMP \(#mult\) ******************\))s
+370 1726 m
+(17)s
+370 1676 m
+(18)s
+470 1676 m
+([EXTERNAL] PROCEDURE)s
+1070(ASKTTY \(VAR TTY_DATA: TTY_INFO\); EXTERN;)ms
+370 1626 m
+(19)s
+470 1626 m
+(\(*************** Functions of VAMP \(#mult\) *******************\))s
+370 1576 m
+(20)s
+370 1526 m
+(21)s
+470 1526 m
+(BEGIN)s
+370 1476 m
+(22)s
+570 1476 m
+(\(* Take the data, that are needed for this VAMP run from)s
+2020( *\))ms
+370 1426 m
+(23)s
+570 1426 m
+(\(* the terminal.)s
+2020( *\))ms
+370 1376 m
+(24)s
+570 1376 m
+(ASKTTY \(TTY_DATA\);)s
+370 1326 m
+(25)s
+570 1326 m
+(WITH TTY_DATA DO)s
+370 1276 m
+(26)s
+570 1276 m
+(IF GO THEN)s
+370 1226 m
+(27)s
+570 1226 m
+(BEGIN)s
+370 1176 m
+(28)s
+670 1176 m
+(\(********************* VAMP \(C\) **********************\))s
+370 1126 m
+(29)s
+670 1126 m
+(\(** Initialize CODE_STRUCT.)s
+2020(**\))ms
+370 1076 m
+(30)s
+670 1076 m
+(\(*******************************************************\))s
+370 1026 m
+(31)s
+370 976 m
+(32)s
+670 976 m
+(OPEN \(CODE_LINES, FILE_NAME :='VAMP.TMP',)s
+370 926 m
+(33)s
+770 926 m
+( ORGANIZATION := RELATIVE, ACCESS_METHOD := DIRECT,)s
+370 876 m
+(34)s
+770 876 m
+( DISPOSITION := DELETE\);)s
+370 826 m
+(35)s
+670 826 m
+(REWRITE \(CODE_LINES\);)s
+370 776 m
+(36)s
+670 776 m
+(FILE_CNT := 1;)s
+370 726 m
+(37)s
+670 726 m
+(WHILE \(IN_FILES [FILE_CNT] <> EMPTY\) DO)s
+370 676 m
+(38)s
+670 676 m
+(BEGIN)s
+370 626 m
+(39)s
+770 626 m
+(WRITELN \('Proceeding on file ',IN_FILES [FILE_CNT]\);)s
+370 576 m
+(40)s
+570 576 m
+( )s
+770(OPEN \(CURR_IN_FILE, FILE_NAME := IN_FILES [FILE_CNT],)ms
+370 526 m
+(41)s
+870 526 m
+( HISTORY := READONLY\);)s
+370 476 m
+(42)s
+770 476 m
+(RESET \(CURR_IN_FILE\);)s
+370 426 m
+(43)s
+770 426 m
+(PUT \(CODE_LINES\);)s
+1270(\(* Start file with a sentinel. *\))ms
+370 376 m
+(44)s
+8 FA
+295 254 m
+(CLiP)s
+373(provisional)ms
+532(user)ms
+595(manual)ms
+702(\(version)ms
+819(2.100\))ms
+4 2600 430 1654 li
+endpage
+%%Page: 7 8
+begpage
+10 FCB
+295 3182 m
+(8)s
+10 FC
+460 3182 m
+(Examples)s
+10 FH
+370 3016 m
+(45)s
+770 3016 m
+(\(****************** VAMP \(A\) *********************\))s
+370 2966 m
+(46)s
+770 2966 m
+(\(** Build CODE_STRUCT and fill CODE_LINES by a)s
+2020(**\))ms
+370 2916 m
+(47)s
+770 2916 m
+(\(** scan of CURR_IN_FILE, using the information)s
+2020(**\))ms
+370 2866 m
+(48)s
+770 2866 m
+(\(** of MODULES, DFLT_EXT and INV_MODE.)s
+2020(**\))ms
+370 2816 m
+(49)s
+770 2816 m
+(\(***************************************************\))s
+370 2766 m
+(50)s
+370 2716 m
+(51)s
+770 2716 m
+(CLOSE \(CURR_IN_FILE\);)s
+370 2666 m
+(52)s
+770 2666 m
+(FILE_CNT := FILE_CNT + 1;)s
+370 2616 m
+(53)s
+670 2616 m
+(END \(*WHILE*\);)s
+370 2566 m
+(54)s
+370 2516 m
+(55)s
+670 2516 m
+(\(******************** VAMP \(B\) ***********************\))s
+370 2466 m
+(56)s
+670 2466 m
+(\(** Generate the files as specified by CODE_STRUCT)s
+2020(**\))ms
+370 2416 m
+(57)s
+670 2416 m
+(\(** from the data contained by CODE_LINES.)s
+2020(**\))ms
+370 2366 m
+(58)s
+670 2366 m
+(\(*******************************************************\))s
+370 2316 m
+(59)s
+370 2266 m
+(60)s
+670 2266 m
+(\(* Close and Delete scratch-file CODE_LINES.)s
+2020( *\))ms
+370 2216 m
+(61)s
+670 2216 m
+(CLOSE \(CODE_LINES, DELETE\);)s
+370 2166 m
+(62)s
+570 2166 m
+(END)s
+370 2116 m
+(63)s
+570 2116 m
+(ELSE)s
+370 2066 m
+(64)s
+670 2066 m
+(WRITELN \('!!! You specified an empty run - try again !!!'\);)s
+370 2016 m
+(65)s
+470 2016 m
+(END \(*VAMP*\).)s
+370 1966 m
+(66)s
+470 1966 m
+(\(******************* End of VAMP \(body\) **********************\))s
+370 1916 m
+(67)s
+370 1866 m
+(68)s
+370 1816 m
+(69)s
+470 1816 m
+(\(************ Constants of VAMP \(#leader, #quick\) ************\))s
+370 1766 m
+(70)s
+470 1766 m
+(CONST)s
+370 1716 m
+(71)s
+470 1716 m
+(\(************ Types of VAMP \(#leader, #quick\) ****************\))s
+370 1666 m
+(72)s
+470 1666 m
+(TYPE)s
+12 FAB
+295 1586 m
+(Remarks:)s
+12 FA
+389 1526 m
+(This)s
+488(refinement)ms
+714(contains)ms
+891(four)ms
+985(stubs)ms
+1098(\(lines)ms
+1219(1-3,)ms
+1308(4-66,)ms
+1422(69-70)ms
+1549(and)ms
+1632(71-72\).)ms
+1787(The)ms
+1875(second)ms
+2024(stub)ms
+2118(has)ms
+295 1466 m
+(seven)s
+417(slots)ms
+518(\(lines)ms
+638(8,)ms
+685(9,)ms
+732(16,)ms
+803(19,)ms
+875(28-30,)ms
+1013(45-49)ms
+1139(and)ms
+1220(55-58\).)ms
+1375(Lines)ms
+1495(22,)ms
+1567(23)ms
+1626(and)ms
+1707(60)ms
+1766(are)ms
+1837(simple)ms
+1979(code-lines)ms
+295 1406 m
+(from)s
+404(CLiPs)ms
+542(point)ms
+657(of)ms
+711(view.)ms
+389 1346 m
+(The)s
+481(leader)ms
+617(option)ms
+760(of)ms
+816(the)ms
+891(last)ms
+975(two)ms
+1065(stubs)ms
+1182(defines)ms
+1341(the)ms
+1416(code)ms
+1525(that)ms
+1615(will)ms
+1707(be)ms
+1768(inserted)ms
+1941(in)ms
+1995(front)ms
+2106(of)ms
+2162(a)ms
+295 1286 m
+(stub)s
+390(that)ms
+478(matches)ms
+654(the)ms
+728(slot.)ms
+8 FA
+295 254 m
+(CLiP)s
+373(provisional)ms
+532(user)ms
+595(manual)ms
+702(\(version)ms
+819(2.100\))ms
+4 1400 430 2344 li
+endpage
+%%Page: 8 9
+begpage
+10 FC
+1312 3182 m
+(3.5 Example 5: A subroutine module)s
+10 FCB
+2161 3182 m
+(9)s
+12 FCB
+295 3008 m
+(3.5 Example 5: A subroutine module)s
+10 FH
+395 2926 m
+(1)s
+470 2926 m
+(\(****** #File "ASKTTY.PAS" ******\))s
+395 2876 m
+(2)s
+470 2876 m
+([INHERIT \('DECLAR.PEN'\)] MODULE ASKTTY \(INPUT, OUTPUT\);)s
+395 2826 m
+(3)s
+395 2776 m
+(4)s
+470 2776 m
+(\(*********** External procedures of ASKTTY \(#mult\) ************\))s
+395 2726 m
+(5)s
+395 2676 m
+(6)s
+470 2676 m
+(\(***************************************************************\))s
+395 2626 m
+(7)s
+470 2626 m
+(\(* Routine:)s
+870(ASKTTY)ms
+1070(-)ms
+1170(ASK information from TTY.)ms
+2020( *\))ms
+395 2576 m
+(8)s
+470 2576 m
+(\(* Purpose:)s
+870(To obtain from the TTY the information which)ms
+2020( *\))ms
+395 2526 m
+(9)s
+470 2526 m
+(\(*)s
+870(is needed to perform a VAMP run.)ms
+2020( *\))ms
+370 2476 m
+(10)s
+470 2476 m
+(\(* Interface:)s
+870(TTY_DATA -)ms
+1170(Data from TTY to VAMP.)ms
+2020( *\))ms
+370 2426 m
+(11)s
+470 2426 m
+(\(*)s
+870(TTY -)ms
+1170(Source of all knowledge.)ms
+2020( *\))ms
+370 2376 m
+(12)s
+470 2376 m
+(\(* Author/Date:)s
+870(VAMP project management, September 29, 1983.)ms
+2020( *\))ms
+370 2326 m
+(13)s
+470 2326 m
+(\(***************************************************************\))s
+370 2276 m
+(14)s
+470 2276 m
+([GLOBAL] PROCEDURE)s
+970(ASKTTY \(VAR TTY_DATA: TTY_INFO\);)ms
+370 2226 m
+(15)s
+370 2176 m
+(16)s
+470 2176 m
+(\(************* Constants of ASKTTY \(#multiple\) ***************\))s
+370 2126 m
+(17)s
+470 2126 m
+(\(************* Types of ASKTTY \(#multiple\) *******************\))s
+370 2076 m
+(18)s
+470 2076 m
+(\(************* Variables of ASKTTY \(#multiple\) ***************\))s
+370 2026 m
+(19)s
+470 2026 m
+(\(************* Procedures of ASKTTY \(#multiple\) **************\))s
+370 1976 m
+(20)s
+370 1926 m
+(21)s
+470 1926 m
+(BEGIN)s
+370 1876 m
+(22)s
+570 1876 m
+(WITH TTY_DATA DO)s
+370 1826 m
+(23)s
+570 1826 m
+(BEGIN)s
+370 1776 m
+(24)s
+670 1776 m
+(\(******************** ASKTTY \(1\) *********************\))s
+370 1726 m
+(25)s
+670 1726 m
+(\(** Get IN_FILES from TTY.)s
+2020(**\))ms
+370 1676 m
+(26)s
+670 1676 m
+(\(*******************************************************\))s
+370 1626 m
+(27)s
+370 1576 m
+(28)s
+670 1576 m
+(GO := NOT \(IN_FILES[1] = EMPTY\);)s
+370 1526 m
+(29)s
+670 1526 m
+(IF GO THEN)s
+370 1476 m
+(30)s
+670 1476 m
+(BEGIN)s
+370 1426 m
+(31)s
+770 1426 m
+(\(**************** ASKTTY \(2\) *********************\))s
+370 1376 m
+(32)s
+770 1376 m
+(\(** Ask which modules must be generated by VAMP.)s
+2020(**\))ms
+370 1326 m
+(33)s
+770 1326 m
+(\(** Set INV_MODE, MODULES and GO accordingly.)s
+2020(**\))ms
+370 1276 m
+(34)s
+770 1276 m
+(\(***************************************************\))s
+370 1226 m
+(35)s
+670 1226 m
+(END \(*IF*\);)s
+370 1176 m
+(36)s
+670 1176 m
+(IF GO THEN)s
+370 1126 m
+(37)s
+670 1126 m
+(BEGIN)s
+370 1076 m
+(38)s
+770 1076 m
+(\(**************** ASKTTY \(3\) *********************\))s
+370 1026 m
+(39)s
+770 1026 m
+(\(** Ask DFLT_EXT from the terminal.)s
+2020(**\))ms
+370 976 m
+(40)s
+770 976 m
+(\(***************************************************\))s
+370 926 m
+(41)s
+670 926 m
+(END \(*IF*\);)s
+370 876 m
+(42)s
+570 876 m
+(END \(*WITH*\);)s
+370 826 m
+(43)s
+470 826 m
+(END \(*ASKTTY*\);)s
+370 776 m
+(44)s
+370 726 m
+(45)s
+470 726 m
+(END \(*MODULE*\).)s
+370 676 m
+(46)s
+470 676 m
+(\(********************** End of MODULE ************************\))s
+370 626 m
+(47)s
+370 576 m
+(48)s
+370 526 m
+(49)s
+470 526 m
+(\(********** Constants of ASKTTY \(#leader, #quick\) ************\))s
+370 476 m
+(50)s
+470 476 m
+(CONST)s
+8 FA
+295 254 m
+(CLiP)s
+373(provisional)ms
+532(user)ms
+595(manual)ms
+702(\(version)ms
+819(2.100\))ms
+4 2500 430 1704 li
+endpage
+%%Page: 9 10
+begpage
+10 FCB
+295 3182 m
+(10)s
+10 FC
+460 3182 m
+(Examples)s
+10 FH
+370 3016 m
+(51)s
+470 3016 m
+(\(********** Types of ASKTTY \(#leader, #quick\) ****************\))s
+370 2966 m
+(52)s
+470 2966 m
+(TYPE)s
+370 2916 m
+(53)s
+470 2916 m
+(\(********** Variables of ASKTTY \(#leader, #quick\) ************\))s
+370 2866 m
+(54)s
+470 2866 m
+(VAR)s
+12 FAB
+295 2786 m
+(Remarks:)s
+12 FA
+389 2726 m
+(A)s
+437(clear)ms
+546(cut)ms
+620(example)ms
+802(of)ms
+856(a)ms
+890(subroutine)ms
+1114(definition)ms
+1320(in)ms
+1372(VAX/VMS)ms
+1614(Pascal)ms
+1755(that)ms
+1842(is)ms
+1888(to)ms
+1939(be)ms
+1998(compiled)ms
+295 2666 m
+(independently.)s
+606(The)ms
+699(refinement)ms
+931(contains)ms
+1113(stubs)ms
+1232(at)ms
+1283(lines)ms
+1393(1-46,)ms
+1513(49-50,)ms
+1657(51-52)ms
+1789(and)ms
+1877(53-54.)ms
+2022(The)ms
+2115(last)ms
+295 2606 m
+(three)s
+407(stubs)ms
+522(are)ms
+596(all)ms
+658(quick)ms
+782(stubs.)ms
+389 2546 m
+(The)s
+479(first)ms
+572(stub)ms
+668(is)ms
+714(a)ms
+749(main)ms
+861(stub.)ms
+970(It)ms
+1013(carries)ms
+1159(no)ms
+1221(identification)ms
+1501(and)ms
+1585(only)ms
+1687(specifies)ms
+1874(the)ms
+1948(name)ms
+2069(of)ms
+2123(the)ms
+295 2486 m
+(file)s
+374(that)ms
+461(will)ms
+551(finally)ms
+694(hold)ms
+795(the)ms
+869(module.)ms
+1044(Had)ms
+1140(the)ms
+1213(file-option)ms
+1437(be)ms
+1496(omitted,)ms
+1674(this)ms
+1758(would)ms
+1896(have)ms
+2003(meant)ms
+2137(an)ms
+295 2426 m
+(error.)s
+389 2366 m
+(Lines)s
+514(4,)ms
+567(16,)ms
+644(17,)ms
+721(18)ms
+786(and)ms
+873(19)ms
+937(are)ms
+1013(single-line)ms
+1239(slot)ms
+1326(for)ms
+1399(future)ms
+1533(declarations.)ms
+1802(The)ms
+1894(leader)ms
+2031(stubs)ms
+2148(at)ms
+295 2306 m
+(the)s
+368(end)ms
+453(secure)ms
+593(syntactic)ms
+783(details.)ms
+939(Lines)ms
+1062(24-26,)ms
+1204(31-34)ms
+1333(and)ms
+1418(38-40)ms
+1547(are)ms
+1621(ordinary)ms
+1803(slots)ms
+1907(again.)ms
+8 FA
+295 254 m
+(CLiP)s
+373(provisional)ms
+532(user)ms
+595(manual)ms
+702(\(version)ms
+819(2.100\))ms
+4 200 430 2944 li
+endpage
+%%Page: 10 11
+begpage
+10 FC
+1562 3182 m
+(4 Semantics of options)s
+10 FCB
+2138 3182 m
+(11)s
+14 FCB
+295 3001 m
+(4 Semantics of options)s
+12 FAB
+295 2906 m
+(#Comment)s
+12 FA
+543(\(stub,)ms
+668(slot\))ms
+389 2846 m
+(The)s
+478(comment)ms
+676(option)ms
+816(transforms)ms
+1042(the)ms
+1115(special)ms
+1266(CLIP-characters)ms
+1606(to)ms
+1657(a)ms
+1691(predefined)ms
+1917(format)ms
+2062(which)ms
+389 2786 m
+(suits)s
+501(a)ms
+544(particular)ms
+756(programming)ms
+1049(language.)ms
+1262(The)ms
+1361(option)ms
+1509(has)ms
+1596(an)ms
+1664(obligatory)ms
+1890(argument,)ms
+2112(e.g.)ms
+12 FAB
+389 2726 m
+(PASCAL)s
+12 FA
+(,)s
+12 FAB
+610(FORTRAN)ms
+12 FA
+(,)s
+12 FAB
+878(C)ms
+12 FA
+(,)s
+12 FAB
+936(ADA)ms
+12 FA
+1053(etc.)ms
+1133(or)ms
+12 FAB
+1183(ON)ms
+12 FA
+(/)s
+12 FAB
+(OFF)s
+12 FA
+(.)s
+1394(The)ms
+1480(ON/OFF)ms
+1667(argument)ms
+1865(specifies)ms
+2048(wether)ms
+389 2666 m
+(or)s
+443(not)ms
+520(the)ms
+594(slot-)ms
+696(or)ms
+750(stub-segment)ms
+1030(is)ms
+1076(to)ms
+1128(be)ms
+1188(included)ms
+1373(upon)ms
+1486(substitution.)ms
+1745(Comment)ms
+1955(options)ms
+2115(can)ms
+389 2606 m
+(be)s
+448(nested)ms
+588(and)ms
+673(the)ms
+747(most)ms
+857(local)ms
+966(version)ms
+1126(controls)ms
+1300(the)ms
+1373(operation.)ms
+12 FAB
+295 2516 m
+(#Default)s
+12 FA
+490(\(stub\))ms
+389 2456 m
+(A)s
+432(default)ms
+578(stub)ms
+668(is)ms
+708(prefixed)ms
+882(to)ms
+928(exclusively)ms
+1163(substituted)ms
+1387(if)ms
+1424(no)ms
+1481(other)ms
+1591(stub)ms
+1681(is)ms
+1722(found)ms
+1845(for)ms
+1911(that)ms
+1993(particular)ms
+389 2396 m
+(slot.)s
+12 FAB
+295 2306 m
+(#Indent)s
+12 FA
+474(\(stub,)ms
+599(slot\))ms
+389 2246 m
+(The)s
+481(indent)ms
+621(option)ms
+763(controls)ms
+939(the)ms
+1015(indentation)ms
+1255(of)ms
+1311(the)ms
+1387(generated)ms
+1596(listing.)ms
+1749(Indent)ms
+1891(options)ms
+2053(can)ms
+2137(be)ms
+389 2186 m
+(nested)s
+527(and)ms
+610(the)ms
+682(most)ms
+790(local)ms
+898(option)ms
+1036(overrules)ms
+1233(the)ms
+1305(more)ms
+1419(global)ms
+1554(ones.)ms
+1669(Indent)ms
+1808(has)ms
+1885(as)ms
+1938(one)ms
+2021(optional)ms
+389 2126 m
+(argument,)s
+12 FAB
+602(ON)ms
+12 FA
+690(or)ms
+12 FAB
+744(OFF)ms
+12 FA
+(.)s
+12 FAB
+295 2036 m
+(#File)s
+12 FA
+413(\(stub\))ms
+389 1976 m
+(The)s
+476(file)ms
+553(option)ms
+691(identifies)ms
+887(the)ms
+959(stub)ms
+1052(as)ms
+1104(a)ms
+1136(main)ms
+1246(stub)ms
+1340(\(viz.)ms
+1440(the)ms
+1511(root)ms
+1602(of)ms
+1654(a)ms
+1686(new)ms
+1780(module\).)ms
+1969(The)ms
+2057(option)ms
+389 1916 m
+(carries)s
+535(a)ms
+570(string)ms
+697(in)ms
+749(quotes)ms
+893(as)ms
+948(argument.)ms
+1162(This)ms
+1264(string)ms
+1391(specifies)ms
+1579(the)ms
+1653(name)ms
+1775(of)ms
+1829(the)ms
+1904(file)ms
+1983(to)ms
+2035(be)ms
+2096(gen-)ms
+389 1856 m
+(erated.)s
+12 FAB
+295 1766 m
+(#Leader)s
+12 FA
+485(\(stub\))ms
+389 1706 m
+(The)s
+477(leader)ms
+611(stub)ms
+705(is)ms
+750(usually)ms
+905(combined)ms
+1114(with)ms
+1214(multiple)ms
+1391(slots.)ms
+1507(It)ms
+1548(modifies)ms
+1734(the)ms
+1807(environment)ms
+2071(of)ms
+2123(the)ms
+389 1646 m
+(stubs)s
+506(that)ms
+596(will)ms
+688(be)ms
+750(substituted)ms
+982(by)ms
+1046(inserting)ms
+1236(the)ms
+1312(leader)ms
+1449(stub)ms
+1547(in)ms
+1601(front)ms
+1713(of)ms
+1769(the)ms
+1845(first)ms
+1940(encountered)ms
+389 1586 m
+(normal)s
+543(stub.)ms
+12 FAB
+295 1496 m
+(#Multiple)s
+12 FA
+515(\(slot\))ms
+389 1436 m
+(A)s
+437(multiple)ms
+616(slot)ms
+701(accepts)ms
+861(the)ms
+934(substitution)ms
+1180(of)ms
+1234(any)ms
+1319(number)ms
+1484(of)ms
+1538(stubs.)ms
+12 FAB
+295 1346 m
+(#Optional)s
+12 FA
+521(\(slot\))ms
+389 1286 m
+(An)s
+462(optional)ms
+639(slot)ms
+723(accepts)ms
+883(the)ms
+957(substitution)ms
+1202(of)ms
+1257(0)ms
+1294(or)ms
+1348(1)ms
+1386(stubs)ms
+1501(only.)ms
+12 FAB
+295 1196 m
+(#Overrule)s
+12 FA
+526(\(stub\))ms
+389 1136 m
+(The)s
+478(overrule)ms
+657(stub)ms
+752(replaces)ms
+928(the)ms
+1001(stub)ms
+1096(already)ms
+1255(substituted)ms
+1484(in)ms
+1535(a)ms
+1569(particular)ms
+1772(position.)ms
+1958(It)ms
+2000(is)ms
+2046(mainly)ms
+389 1076 m
+(meant)s
+523(for)ms
+594(testing)ms
+740(purposes.)ms
+12 FAB
+295 986 m
+(#Quick)s
+12 FA
+463(\(stub\))ms
+389 926 m
+(A)s
+440(quick)ms
+567(stub)ms
+666(is)ms
+715(a)ms
+753(stub)ms
+851(without)ms
+1020(internal)ms
+1188(structure)ms
+1379(\(viz.)ms
+1485(slots\).)ms
+1621(Following)ms
+1842(the)ms
+1919(stub)ms
+2018(segment)ms
+389 866 m
+(only)s
+490(L6-type)ms
+661(lines)ms
+768(are)ms
+841(allowed.)ms
+1025(Any)ms
+1123(other)ms
+1238(type)ms
+1337(of)ms
+1391(line)ms
+1479(will)ms
+1569(end)ms
+1654(the)ms
+1727(stub.)ms
+12 FAB
+295 776 m
+(#Separator)s
+12 FA
+546(\(stub\))ms
+389 716 m
+(A)s
+437(separator)ms
+633(stub)ms
+729(is)ms
+775(to)ms
+826(be)ms
+886(inserted)ms
+1056(between)ms
+1236(two)ms
+1323(consecutive)ms
+1572(stubs)ms
+1687(of)ms
+1741(the)ms
+1815(same)ms
+1930(slot.)ms
+12 FAB
+295 626 m
+(#Trailer)s
+12 FA
+485(\(stub\))ms
+389 566 m
+(The)s
+476(trailer)ms
+606(stub)ms
+699(is)ms
+742(the)ms
+814(counterpart)ms
+1051(of)ms
+1103(the)ms
+1174(default)ms
+1323(stub.)ms
+1429(It)ms
+1469(modifies)ms
+1654(the)ms
+1726(environment)ms
+1988(by)ms
+2048(adding)ms
+389 506 m
+(the)s
+462(trailer)ms
+594(stub)ms
+690(after)ms
+794(the)ms
+868(last)ms
+950(encountered)ms
+1206(normal)ms
+1361(stub.)ms
+8 FA
+295 254 m
+(CLiP)s
+373(provisional)ms
+532(user)ms
+595(manual)ms
+702(\(version)ms
+819(2.100\))ms
+endpage
+%%Page: 11 12
+begpage
+10 FCB
+295 3182 m
+(12)s
+10 FC
+460 3182 m
+(Using CLiP)s
+14 FCB
+295 3001 m
+(5 Using CLiP)s
+12 FA
+295 2906 m
+(The)s
+399(complete)ms
+610(CLiP)ms
+742(system)ms
+908(for)ms
+994(DOS)ms
+1121(and)ms
+1220(VMS)ms
+1356(consists)ms
+1541(of)ms
+1610(two)ms
+1712(independent)ms
+1983(programs,)ms
+295 2846 m
+(CLIP_1.EXE)s
+584(and)ms
+678(CLIP_2.EXE.)ms
+980(The)ms
+1079(Unix)ms
+1201(version)ms
+1369(has)ms
+1457(only)ms
+1568(one)ms
+1662(program,)ms
+1865(CLIP,)ms
+2007(which)ms
+2151(is)ms
+295 2786 m
+(functionally)s
+549(identical)ms
+734(to)ms
+785(CLIP_2.)ms
+969(CLIP_1)ms
+1140(prepares)ms
+1321(a)ms
+1356(file,)ms
+1448(CLIP.INI,)ms
+1663(telling)ms
+1804(CLIP_2)ms
+1975(\(the)ms
+2065(actual)ms
+295 2726 m
+(module)s
+465(extractor\))ms
+679(literally)ms
+855(everything)ms
+1089(it)ms
+1137(has)ms
+1223(to)ms
+1282(know)ms
+1414(in)ms
+1473(order)ms
+1598(to)ms
+1657(perform)ms
+1838(a)ms
+1881(run)ms
+1967(\(a)ms
+2026(detailed)ms
+295 2666 m
+(description)s
+534(of)ms
+592(the)ms
+670(structure)ms
+862(of)ms
+921(an)ms
+985(INI-file)ms
+1155(is)ms
+1205(in)ms
+1261(the)ms
+1339(next)ms
+1442(section\).)ms
+1630(Thus)ms
+1747(CLIP.INI)ms
+1954(specifies)ms
+2146(to)ms
+295 2606 m
+(CLIP_2)s
+465(\(CLIP\):)ms
+389 2546 m
+(-)s
+460(the)ms
+534(files)ms
+632(it)ms
+673(has)ms
+752(to)ms
+803(read)ms
+902(\(i.e.)ms
+992(the)ms
+1066(source)ms
+1209(files\),)ms
+389 2486 m
+(-)s
+460(the)ms
+534(modules)ms
+716(it)ms
+756(should)ms
+902(extract)ms
+1050(\(i.e.)ms
+1141(target)ms
+1267(modules\),)ms
+389 2426 m
+(-)s
+460(the)ms
+534(name)ms
+655(of)ms
+709(the)ms
+782(report)ms
+914(file,)ms
+389 2366 m
+(-)s
+460(the)ms
+532(syntax)ms
+674(of)ms
+726(the)ms
+798(CLiP-lines)ms
+1026(\(i.e.)ms
+1114(the)ms
+1186(style)ms
+1292(of)ms
+1344(the)ms
+1416(lines)ms
+1522(that)ms
+1607(trigger)ms
+1752(the)ms
+1824(module)ms
+1984(extraction)ms
+460 2306 m
+(process\).)s
+295 2246 m
+(CLIP_1)s
+465(allows)ms
+607(a)ms
+641(very)ms
+742(detailed)ms
+912(specification)ms
+1179(of)ms
+1232(the)ms
+1305(extraction)ms
+1517(process,)ms
+1691(much)ms
+1814(more)ms
+1928(detailed)ms
+2098(than)ms
+295 2186 m
+(you)s
+384(will)ms
+477(need)ms
+586(in)ms
+640(general.)ms
+815(For)ms
+899(this)ms
+986(reason)ms
+1131(the)ms
+1207(CLiP)ms
+1328(system)ms
+1482(comes)ms
+1624(with)ms
+1728(a)ms
+1765(couple)ms
+1913(of)ms
+1970(routines)ms
+2146(to)ms
+295 2126 m
+(shortcut)s
+465(CLIP_1)ms
+632(and)ms
+713(for)ms
+781(Unix)ms
+890(users)ms
+1002(these)ms
+1113(routines)ms
+1284(are)ms
+1354(the)ms
+1424(primary)ms
+1591(tool)ms
+1678(to)ms
+1726(construct)ms
+1919(their)ms
+2019(INI-file.)ms
+295 2066 m
+(For)s
+378(a)ms
+414(description)ms
+650(of)ms
+706(these)ms
+823(routines)ms
+998(we)ms
+1070(refer)ms
+1179(to)ms
+1232(section)ms
+1387("Using)ms
+1541(CLiP")ms
+1681(of)ms
+1737(the)ms
+1812(READ_ME)ms
+2062(file)ms
+2143(of)ms
+295 2006 m
+(this)s
+379(release.)ms
+389 1946 m
+(When)s
+520(using)ms
+641(CLiP)ms
+759(it)ms
+800(is)ms
+846(recommended)ms
+1141(to)ms
+1193(introduce)ms
+1394(at)ms
+1443(least)ms
+1547(the)ms
+1620(following)ms
+1827(directories:)ms
+389 1886 m
+(-)s
+460(A)ms
+514(directory)ms
+711(for)ms
+787(the)ms
+865(source)ms
+1013(files)ms
+1117(CLiP)ms
+1240(will)ms
+1335(use.)ms
+1431(This)ms
+1537(directory)ms
+1735(also)ms
+1833(holds)ms
+1959(the)ms
+2037(various)ms
+460 1826 m
+(INI-file)s
+625(you)ms
+713(maintain)ms
+900(to)ms
+952(conduct)ms
+1123(the)ms
+1196(extraction)ms
+1409(process.)ms
+389 1766 m
+(-)s
+460(A)ms
+509(directory)ms
+702(to)ms
+753(contain)ms
+913(the)ms
+986(extracted)ms
+1182(modules.)ms
+389 1706 m
+(-)s
+460(A)ms
+509(directory)ms
+702(to)ms
+753(contain)ms
+913(the)ms
+986(results)ms
+1130(of)ms
+1184(the)ms
+1257(compilation)ms
+1509(and)ms
+1593(linking)ms
+1748(of)ms
+1802(the)ms
+1875(modules.)ms
+389 1646 m
+(-)s
+460(In)ms
+521(case)ms
+627(CLiP)ms
+753(is)ms
+806(used)ms
+917(in)ms
+975(combination)ms
+1245(with)ms
+1354(a)ms
+1396(word-processor,)ms
+1739(it)ms
+1786(is)ms
+1839(wise)ms
+1951(to)ms
+2009(keep)ms
+2123(the)ms
+460 1586 m
+(word-processor)s
+784(files)ms
+882(again)ms
+1003(in)ms
+1054(a)ms
+1089(separate)ms
+1265(directory.)ms
+1471(In)ms
+1525(this)ms
+1610(case)ms
+1708(the)ms
+1782(source)ms
+1925(file)ms
+2004(directory)ms
+460 1526 m
+(should)s
+606(be)ms
+666(fed)ms
+742(with)ms
+843(ASCII)ms
+987(exports)ms
+1146(from)ms
+1256(word-processor)ms
+1579(files.)ms
+8 FA
+295 254 m
+(CLiP)s
+373(provisional)ms
+532(user)ms
+595(manual)ms
+702(\(version)ms
+819(2.100\))ms
+endpage
+%%Page: 12 13
+begpage
+10 FC
+1467 3182 m
+(6 The structure of an INI-file)s
+10 FCB
+2138 3182 m
+(13)s
+14 FCB
+295 3001 m
+(6 The structure of an INI-file)s
+12 FA
+295 2906 m
+(This)s
+402(section)ms
+562(explains)ms
+748(the)ms
+828(structure)ms
+1021(of)ms
+1082(an)ms
+1148(INI-file)ms
+1319(by)ms
+1388(means)ms
+1534(of)ms
+1595(an)ms
+1660(example)ms
+1849(file.)ms
+1946(You)ms
+2051(should)ms
+295 2846 m
+(understand)s
+528(this)ms
+615(structure)ms
+804(thoroughly)ms
+1038(before)ms
+1179(your)ms
+1285(try)ms
+1355(to)ms
+1408(edit)ms
+1497(INI-files)ms
+1684(yourself)ms
+1862(directly)ms
+2029(through)ms
+295 2786 m
+(an)s
+354(editor)ms
+483([Ammers 1993].)ms
+389 2726 m
+(The)s
+481(example)ms
+665(is)ms
+714(an)ms
+776(INI-file)ms
+943(for)ms
+1017(MS-DOS.)ms
+1233(The)ms
+1326(only)ms
+1429(difference)ms
+1647(with)ms
+1751(other)ms
+1869(platforms)ms
+2075(is)ms
+2123(the)ms
+295 2666 m
+(specification)s
+558(of)ms
+607(directories.)ms
+838(The)ms
+923(numbers)ms
+1103(at)ms
+1147(the)ms
+1215(beginning)ms
+1423(of)ms
+1472(every)ms
+1591(line)ms
+1673(are)ms
+1742(added)ms
+1869(for)ms
+1935(convenience)ms
+295 2606 m
+(of)s
+349(reference.)ms
+560(They)ms
+675(are)ms
+748(not)ms
+825(part)ms
+915(of)ms
+969(the)ms
+1043(file)ms
+1122(itself.)ms
+10 FH
+470 2495 m
+(<================= Example of an INI-file ====================>)s
+395 2453 m
+(1)s
+470 2453 m
+(This file contains data that is needed to run CLiP)s
+395 2411 m
+(2)s
+470 2411 m
+(And is generated by CLiP_MENU)s
+395 2370 m
+(3)s
+470 2370 m
+(Modifying this file at own risk.)s
+395 2328 m
+(4)s
+470 2328 m
+(Using CLiP_MENU is definitely recommended.)s
+395 2286 m
+(5)s
+395 2245 m
+(6)s
+470 2245 m
+(INTERACTIVE_MODE Mode \(INTERACTIVE/DEBUG/HELPFUL/AUTO\))s
+395 2203 m
+(7)s
+470 2203 m
+(NO Interactive fault correction \(YES/NO\))s
+395 2161 m
+(8)s
+470 2161 m
+(BOTH Error message destination \(TERMINAL/......\))s
+395 2120 m
+(9)s
+470 2120 m
+(\(* Left comment string)s
+370 2078 m
+(10)s
+470 2078 m
+(*\) Right comment string)s
+370 2036 m
+(11)s
+470 2036 m
+(* Command character)s
+370 1995 m
+(12)s
+470 1995 m
+(ENDOF END string)s
+370 1953 m
+(13)s
+470 1953 m
+(# Option marker)s
+370 1911 m
+(14)s
+470 1911 m
+(EXTRACTED The specified modules are \(OMITTED/EX-)s
+370 1870 m
+(15)s
+470 1870 m
+(TRACTED\))s
+370 1828 m
+(16)s
+470 1828 m
+(------------ REPORT FILE -----------)s
+370 1786 m
+(17)s
+470 1786 m
+(CLIP.RPT)s
+370 1745 m
+(18)s
+470 1745 m
+(------------ INPUT FILES -----------)s
+370 1703 m
+(19)s
+470 1703 m
+(f:\\LPT\\MAN\\EX01_A.ASC)s
+370 1661 m
+(20)s
+470 1661 m
+(f:\\LPT\\MAN\\EX01_B.ASC)s
+370 1620 m
+(21)s
+470 1620 m
+(------------ MODULES ---------------)s
+370 1578 m
+(22)s
+470 1578 m
+(F:\\TEST\\)s
+370 1536 m
+(23)s
+470 1536 m
+(PALINDRO.PAS)s
+370 1495 m
+(24)s
+470 1495 m
+(F:\\TEST\\)s
+370 1453 m
+(25)s
+470 1453 m
+(TESTDATA.IN)s
+370 1411 m
+(26)s
+470 1411 m
+(------------ MODULE DIRECTORY ------)s
+370 1370 m
+(27)s
+470 1370 m
+(f:\\LPT\\)s
+470 1328 m
+(------------ END OF INI FILE -------)s
+470 1286 m
+(<================= End of Example INI-file ===================>)s
+12 FA
+295 1178 m
+(Lines 1-5:)s
+602(Descriptive)ms
+845(lines)ms
+952(that)ms
+1039(are)ms
+1113(flushed)ms
+1272(upon)ms
+1385(reading.)ms
+295 1088 m
+(Lines 6-14:)s
+602(Information)ms
+853(behind)ms
+1002(position)ms
+1175(24)ms
+1238(is)ms
+1284(not)ms
+1360(interpreted.)ms
+295 998 m
+(Lines 6-7:)s
+602(These)ms
+734(lines)ms
+841(refer)ms
+947(to)ms
+999(unimplemented)ms
+1322(options.)ms
+1495(They)ms
+1610(should)ms
+1756(not)ms
+1832(be)ms
+1892(changed.)ms
+295 908 m
+(Lines 8:)s
+602(Identifies)ms
+804(the)ms
+877(output)ms
+1018(device)ms
+1161(for)ms
+1232(messages)ms
+1433(and)ms
+1518(reports.)ms
+1682(The)ms
+1773(first)ms
+1866(word)ms
+1981(of)ms
+2036(the)ms
+2110(line)ms
+602 848 m
+(must)s
+712(be)ms
+773(on)ms
+837(of)ms
+892(the)ms
+967(following)ms
+1175(keywords)ms
+1383(TERMINAL,)ms
+1667(REPORTFILE)ms
+1978(\(or)ms
+2050(FILE\),)ms
+602 788 m
+(BOTH)s
+750(or)ms
+804(NONE)ms
+956(and)ms
+1040(we)ms
+1111(assume)ms
+1271(the)ms
+1344(meaning)ms
+1529(self)ms
+1614(evident.)ms
+295 698 m
+(Lines 9-13:)s
+602(These)ms
+735(lines)ms
+844(together)ms
+1022(define)ms
+1161(the)ms
+1236(syntax)ms
+1381(of)ms
+1437(the)ms
+1512(lines)ms
+1621(CLiP)ms
+1741(will)ms
+1833(recognize.)ms
+2054(For)ms
+2137(an)ms
+602 638 m
+(explanation)s
+847(of)ms
+901(the)ms
+975(CLiP)ms
+1093(syntax,)ms
+1249(refer)ms
+1356(to)ms
+1407([Ammers)ms
+1608(1993].)ms
+295 548 m
+(Lines 9:)s
+602(At)ms
+659(most)ms
+763(6)ms
+795(characters)ms
+1004(to)ms
+1050(specify)ms
+1201(the)ms
+1269("left)ms
+1363(comment)ms
+1556(string")ms
+1697(i.e.)ms
+1765(the)ms
+1833(opening)ms
+2001(sequence)ms
+602 488 m
+(of)s
+650(a)ms
+680(comment)ms
+873(string)ms
+994(of)ms
+1043(the)ms
+1111(programming)ms
+1390(language)ms
+1578(you)ms
+1660(want)ms
+1765(to)ms
+1811(use.)ms
+1897(The)ms
+1982(characters)ms
+602 428 m
+(cannot)s
+747(be)ms
+807(letters)ms
+942(\(A-Z,)ms
+1067(a-z\),)ms
+1169(digits)ms
+1293(\(0-9\))ms
+1405(or)ms
+1460(a)ms
+1494(dot)ms
+1571(\(.\).)ms
+8 FA
+295 254 m
+(CLiP)s
+373(provisional)ms
+532(user)ms
+595(manual)ms
+702(\(version)ms
+819(2.100\))ms
+4 1250 430 1894 li
+endpage
+%%Page: 13 14
+begpage
+10 FCB
+295 3182 m
+(14)s
+10 FC
+460 3182 m
+(The structure of an INI-file)s
+12 FA
+295 3011 m
+(Lines 10:)s
+602(At)ms
+674(most)ms
+793(6)ms
+840(characters)ms
+1064(to)ms
+1125(specify)ms
+1291(the)ms
+1374("right)ms
+1510(comment)ms
+1718(string")ms
+1874(i.e.)ms
+1957(the)ms
+2040(closing)ms
+602 2951 m
+(sequence)s
+801(of)ms
+858(a)ms
+896(comment)ms
+1098(string)ms
+1228(of)ms
+1285(the)ms
+1362(programming)ms
+1650(language)ms
+1847(you)ms
+1938(want)ms
+2051(to)ms
+2105(use.)ms
+602 2891 m
+(The)s
+692(characters)ms
+907(cannot)ms
+1053(be)ms
+1112(letters)ms
+1247(\(A-Z,)ms
+1372(a-z\),)ms
+1475(digits)ms
+1598(\(0-9\))ms
+1711(or)ms
+1765(a)ms
+1800(dot)ms
+1876(\(.\).)ms
+295 2801 m
+(Lines 11:)s
+602(The)ms
+694(character)ms
+892(that)ms
+982(is)ms
+1030(postfixed)ms
+1231(to)ms
+1284(a)ms
+1321(left)ms
+1402(comment)ms
+1603(string)ms
+1732(and)ms
+1818(prefixed)ms
+2000(to)ms
+2053(a)ms
+2090(right)ms
+602 2741 m
+(comment)s
+805(string)ms
+936(in)ms
+992(order)ms
+1115(to)ms
+1171(identify)ms
+1344(it)ms
+1389(as)ms
+1448(a)ms
+1487(special)ms
+1643(comment)ms
+1847(that)ms
+1939(CLiP)ms
+2062(has)ms
+2146(to)ms
+602 2681 m
+(process,)s
+773(a)ms
+804(so)ms
+857(called)ms
+985(CLiP-line.)ms
+1203(The)ms
+1290(character)ms
+1482(cannot)ms
+1624(be)ms
+1680(a)ms
+1711(letter)ms
+1822(\(A-Z,)ms
+1943(a-z\),)ms
+2042(a)ms
+2073(digits)ms
+602 2621 m
+(\(0-9\))s
+714(or)ms
+768(a)ms
+803(dot)ms
+879(\(.\).)ms
+295 2531 m
+(Lines 12:)s
+602(The)ms
+693(leading)ms
+854(characters)ms
+1071(that)ms
+1160(identify)ms
+1329(a)ms
+1365(particular)ms
+1570(CLiP-line)ms
+1781(as)ms
+1836(the)ms
+1911(end)ms
+1997(of)ms
+2053(a)ms
+2089(stub,)ms
+602 2471 m
+(i.e.)s
+675(a)ms
+710(particular)ms
+914(section)ms
+1068(that)ms
+1156(can)ms
+1237(be)ms
+1297(substituted)ms
+1526(elsewhere.)ms
+295 2381 m
+(Lines 13:)s
+602(The)ms
+692(character)ms
+888(that)ms
+975(identifies)ms
+1174(the)ms
+1248(options.)ms
+295 2291 m
+(Line 14:)s
+602(Relates)ms
+758(to)ms
+807(the)ms
+878(modules)ms
+1057(in)ms
+1105(the)ms
+1176(module)ms
+1335(section)ms
+1487(below.)ms
+1631(The)ms
+1718(specified)ms
+1908(modules)ms
+2087(must)ms
+602 2231 m
+(either)s
+723(be)ms
+777(extracted)ms
+967(or)ms
+1016(omitted)ms
+1176(and)ms
+1256(the)ms
+1324(first)ms
+1412(word)ms
+1522(of)ms
+1571(this)ms
+1650(line)ms
+1732(can)ms
+1809(only)ms
+1905(be)ms
+1960(OMITTED)ms
+602 2171 m
+(or)s
+656(EXTRACTED.)ms
+295 2081 m
+(Line 15:)s
+602(Starts)ms
+729(the)ms
+804(section)ms
+959(defining)ms
+1139(the)ms
+1214(file)ms
+1294(that)ms
+1382(mirrors)ms
+1543(the)ms
+1618(extraction)ms
+1831(process.)ms
+2007(This)ms
+2110(line)ms
+602 2021 m
+(should)s
+747(be)ms
+807(copied)ms
+953(literally.)ms
+295 1931 m
+(Line 16:)s
+602(Path)ms
+703(and)ms
+788(file)ms
+867(specification)ms
+1135(of)ms
+1189(the)ms
+1263(report)ms
+1394(file.)ms
+295 1841 m
+(Line 17:)s
+602(Starts)ms
+726(the)ms
+799(section)ms
+951(defining)ms
+1129(the)ms
+1201(input)ms
+1315(files)ms
+1412(for)ms
+1481(the)ms
+1553(extraction)ms
+1764(process,)ms
+1938(the)ms
+2010(so)ms
+2065(called)ms
+602 1781 m
+(source)s
+745(files.)ms
+856(This)ms
+957(line)ms
+1045(should)ms
+1190(be)ms
+1250(copied)ms
+1396(literally.)ms
+295 1691 m
+(Line 18-19:)s
+602(Every)ms
+736(line)ms
+825(specifies)ms
+1014(a)ms
+1051(path)ms
+1151(and)ms
+1238(source)ms
+1382(file.)ms
+1476(There)ms
+1607(may)ms
+1707(be)ms
+1769(up)ms
+1833(to)ms
+1886(64)ms
+1950(lines)ms
+2059(in)ms
+2112(this)ms
+602 1631 m
+(section.)s
+295 1541 m
+(Line 20:)s
+602(Starts)ms
+727(the)ms
+799(section)ms
+952(defining)ms
+1130(the)ms
+1203(modules)ms
+1384(that)ms
+1470(are)ms
+1542(considered)ms
+1770(during)ms
+1912(the)ms
+1985(extraction)ms
+602 1481 m
+(process.)s
+776(Whether)ms
+959(the)ms
+1032(modules)ms
+1213(are)ms
+1286(extracted)ms
+1480(or)ms
+1534(omitted)ms
+1698(depends)ms
+1873(on)ms
+1935(line)ms
+2022(14.)ms
+2096(This)ms
+602 1421 m
+(line)s
+689(should)ms
+835(be)ms
+895(copied)ms
+1040(literally.)ms
+295 1331 m
+(Line 21-24:)s
+602(Every)ms
+735(line)ms
+824(pair)ms
+915(specifies)ms
+1104(a)ms
+1139(path)ms
+1239(and)ms
+1325(a)ms
+1361(module)ms
+1524(file.)ms
+1617(There)ms
+1747(may)ms
+1847(be)ms
+1908(up)ms
+1971(to)ms
+2024(64)ms
+2087(pairs)ms
+602 1271 m
+(\(128)s
+706(lines\))ms
+829(in)ms
+881(this)ms
+965(section.)ms
+295 1181 m
+(Line 25:)s
+602(Starts)ms
+728(the)ms
+801(section)ms
+955(to)ms
+1007(identify)ms
+1175(the)ms
+1248(default)ms
+1399(directory)ms
+1592(for)ms
+1663(modules,)ms
+1857(i.e.)ms
+1931(the)ms
+2004(directory)ms
+602 1121 m
+(where)s
+734(modules)ms
+913(go)ms
+973(to)ms
+1022(that)ms
+1107(have)ms
+1211(no)ms
+1271(explicit)ms
+1431(directory)ms
+1621(specified)ms
+1812(by)ms
+1872(the)ms
+1943(MODULES)ms
+602 1061 m
+(section.)s
+768(This)ms
+870(line)ms
+957(should)ms
+1103(be)ms
+1163(copied)ms
+1308(literally.)ms
+295 971 m
+(Line 26:)s
+602(Default)ms
+764(directory)ms
+957(for)ms
+1028(extracted)ms
+1224(modules.)ms
+295 881 m
+(Line 27:)s
+602(Identifies)ms
+803(the)ms
+877(end)ms
+961(of)ms
+1015(the)ms
+1089(INI-file.)ms
+1267(This)ms
+1368(line)ms
+1456(should)ms
+1601(be)ms
+1661(copied)ms
+1807(literally.)ms
+8 FA
+295 254 m
+(CLiP)s
+373(provisional)ms
+532(user)ms
+595(manual)ms
+702(\(version)ms
+819(2.100\))ms
+endpage
+%%Page: 14 15
+begpage
+10 FC
+926 3182 m
+(7.1 "SP_EXTR_STR: system failure .... call maintenance")s
+10 FCB
+2138 3182 m
+(15)s
+14 FCB
+295 3001 m
+(7 Bugs, work-arounds and undocumented features)s
+12 FCB
+295 2868 m
+(7.1 "SP_EXTR_STR: system failure .... call maintenance")s
+12 FA
+295 2781 m
+(This)s
+394(failure)ms
+536(may)ms
+633(happen)ms
+788(if)ms
+829(the)ms
+901(stubs)ms
+1015(have)ms
+1120(not)ms
+1195(been)ms
+1300(correctly)ms
+1488(closed)ms
+1627(with)ms
+1727(the)ms
+1799(END-STRING)ms
+2110(that)ms
+295 2721 m
+(has)s
+378(been)ms
+489(specified)ms
+686(as)ms
+744(the)ms
+822(syntax.)ms
+982(The)ms
+1076(default)ms
+1232(value)ms
+1356(of)ms
+1415(this)ms
+1504(string)ms
+1634(is)ms
+1684("ENDOF".)ms
+1921(Also)ms
+2032(the)ms
+2110(line)ms
+295 2661 m
+(containing)s
+518(the)ms
+592(END-STRING)ms
+904(should)ms
+1050(be)ms
+1110(properly)ms
+1292(closed.)ms
+1444(For)ms
+1526(example)ms
+1708(in)ms
+1760(a)ms
+1794(Pascal)ms
+1935(situation)ms
+10 FH
+345 2580 m
+( \(********* End of module \(2.1\) ***\))s
+12 FA
+295 2496 m
+(should)s
+440(be)ms
+500(all)ms
+563(right,)ms
+682(but)ms
+10 FH
+345 2415 m
+( \(****** End of module \(2.1\) **\))s
+12 FA
+295 2331 m
+(may)s
+393(give)ms
+492(trouble)ms
+646(since)ms
+761(the)ms
+835(string)ms
+961("**\)")ms
+1081(is)ms
+1127(incorrect)ms
+1317(here.)ms
+12 FCB
+295 2178 m
+(7.2 Options in general)s
+12 FA
+295 2091 m
+(Several)s
+453(options)ms
+608(have)ms
+711(been)ms
+814(introduces)ms
+1030(with)ms
+1128(very)ms
+1225(advanced)ms
+1422(applications)ms
+1672(in)ms
+1719(mind.)ms
+1843(They)ms
+1954(have)ms
+2057(hardly)ms
+295 2031 m
+(been)s
+402(tested)ms
+532(will)ms
+624(probably)ms
+815(not)ms
+892(work.)ms
+1021(You)ms
+1121(won't)ms
+1251(need)ms
+1358(them)ms
+1472(either.)ms
+1612(For)ms
+1695(this)ms
+1780(reason)ms
+1924(don't)ms
+2043(use)ms
+2123(the)ms
+295 1971 m
+(options)s
+454(OVERRULE,)ms
+746(SEPARATOR)ms
+1050(and)ms
+1135(TRAILER.)ms
+12 FCB
+295 1818 m
+(7.3 Multiple option)s
+12 FA
+295 1731 m
+(A)s
+343(slot)ms
+427(with)ms
+529(the)ms
+602("MULTIPLE")ms
+902(option)ms
+1042(raises)ms
+1169(an)ms
+1228(error)ms
+1338(if)ms
+1380(no)ms
+1443(stubs)ms
+1558(are)ms
+1631(found)ms
+1760(matching)ms
+1959(the)ms
+2032(slot.)ms
+2129(To)ms
+295 1671 m
+(prevent)s
+457(this)ms
+542(error)ms
+651(message)ms
+833(one)ms
+918(should)ms
+1064(specify)ms
+1221(the)ms
+1294(option)ms
+1435("OPTIONAL")ms
+1738(also)ms
+1831(for)ms
+1902(the)ms
+1975(slot.)ms
+12 FCB
+295 1518 m
+(7.4 Report file option NONE)s
+12 FA
+295 1431 m
+(This)s
+395(option)ms
+535(to)ms
+586(suppress)ms
+770(the)ms
+842(printing)ms
+1013(of)ms
+1066(reports)ms
+1217(to)ms
+1267(the)ms
+1340(terminal)ms
+1519(has)ms
+1597(not)ms
+1673(been)ms
+1779(implemented.)ms
+2064(It)ms
+2107(will)ms
+295 1371 m
+(be)s
+354(eliminated)ms
+578(in)ms
+629(some)ms
+747(later)ms
+849(version.)ms
+12 FCB
+295 1218 m
+(7.5 Generating target modules)s
+12 FAB
+295 1101 m
+(7.5.1 Specification)s
+12 FA
+295 1011 m
+(If)s
+339(CLIP.INI)ms
+541(specifies)ms
+728(a)ms
+761(target)ms
+887(module)ms
+1048(that)ms
+1135(matches)ms
+1310(no)ms
+1372(file-option)ms
+1594(argument)ms
+1794(anywhere)ms
+2000(in)ms
+2051(the)ms
+2123(list)ms
+295 951 m
+(of)s
+345(specified)ms
+534(source)ms
+672(files,)ms
+779(CLiP)ms
+893(does)ms
+994(not)ms
+1066(complain.)ms
+1273(The)ms
+1359(matching)ms
+1554(is)ms
+1595(case)ms
+1690(sensitive)ms
+1873(and)ms
+1954(for)ms
+2021(instance)ms
+295 891 m
+(a)s
+329(file-option)ms
+553(argument)ms
+10 FH
+545 810 m
+(\(********** #file "EXAMPLE.PAS" ***********************\))s
+12 FA
+295 726 m
+(does)s
+399(not)ms
+475(fit)ms
+532(a)ms
+567(module)ms
+729(specification)ms
+997(in)ms
+1049(CLIP.INI)ms
+1251(of)ms
+1306(the)ms
+1379(form)ms
+10 FH
+545 645 m
+(Example.PAS)s
+12 FA
+295 561 m
+(This)s
+396(may)ms
+495(lead)ms
+590(to)ms
+642(unpleasant)ms
+868(surprises.)ms
+389 501 m
+(On)s
+464(MS-DOS)ms
+668(and)ms
+755(VAX/VMS)ms
+1000(platforms)ms
+1206(the)ms
+1282(specification)ms
+1552(of)ms
+1608(files)ms
+1709(is)ms
+1757(not)ms
+1835(context)ms
+1997(sensitive.)ms
+295 441 m
+(For)s
+371(this)ms
+450(reason)ms
+588(the)ms
+656(CLIP_1)ms
+821(program)ms
+998(\(which)ms
+1144(is)ms
+1184(available)ms
+1372(for)ms
+1437(the)ms
+1505(MS-DOS)ms
+1701(and)ms
+1780(VAX/VMS)ms
+2018(versions)ms
+295 381 m
+(of)s
+355(CLiP\))ms
+496(converts)ms
+684(those)ms
+808(names)ms
+955(to)ms
+1012(upper)ms
+1145(case)ms
+1250(in)ms
+1307(the)ms
+1387(INI-file)ms
+1558(it)ms
+1605(creates.)ms
+1775(Thus)ms
+1894(the)ms
+1973(file-option)ms
+8 FA
+295 254 m
+(CLiP)s
+373(provisional)ms
+532(user)ms
+595(manual)ms
+702(\(version)ms
+819(2.100\))ms
+endpage
+%%Page: 15 16
+begpage
+10 FCB
+295 3182 m
+(16)s
+10 FC
+460 3182 m
+(Bugs, work-arounds and undocumented features)s
+12 FA
+295 3011 m
+(arguments)s
+515(in)ms
+567(the)ms
+640(source)ms
+783(files)ms
+882(should)ms
+1028(definitely)ms
+1232(be)ms
+1292(specified)ms
+1485(in)ms
+1536(upper)ms
+1662(case)ms
+1761(too.)ms
+389 2951 m
+(In)s
+441(a)ms
+475(Unix)ms
+586(environment)ms
+850(a)ms
+884(file)ms
+962(name)ms
+1082(is)ms
+1126(case)ms
+1224(sensitive)ms
+1410(indeed.)ms
+1567(Currently)ms
+1770(no)ms
+1831(CLIP_1)ms
+2001(exists)ms
+2126(for)ms
+295 2891 m
+(Unix)s
+410(and)ms
+498(an)ms
+561(INI-file)ms
+730(has)ms
+812(to)ms
+867(be)ms
+930(created)ms
+1090(by)ms
+1156(means)ms
+1299(of)ms
+1357(the)ms
+1434(short-cut)ms
+1627(routine)ms
+1784(CLP)ms
+1892(\(or)ms
+1966(directly)ms
+2135(by)ms
+295 2831 m
+(means)s
+434(of)ms
+488(an)ms
+548(editor,)ms
+689(cf.)ms
+752(section 6\).)ms
+973(No)ms
+1046(conversion)ms
+1278(is)ms
+1323(performed)ms
+1544(in)ms
+1595(this)ms
+1679(case)ms
+1777(and)ms
+1862(one)ms
+1946(has)ms
+2025(to)ms
+2076(make)ms
+295 2771 m
+(sure)s
+390(the)ms
+464(file-option)ms
+688(argument)ms
+889(is)ms
+935(identical)ms
+1119(to)ms
+1171(the)ms
+1244(corresponding)ms
+1543(name)ms
+1664(in)ms
+1715(the)ms
+1789(INI-file.)ms
+12 FAB
+295 2621 m
+(7.5.2 Omitted modules)s
+12 FA
+295 2531 m
+(If)s
+340(modules)ms
+521(are)ms
+593(specified)ms
+786(for)ms
+856(being)ms
+978(OMITTED)ms
+1215(at)ms
+1263(extraction)ms
+1475(time,)ms
+1588(it)ms
+1627(will)ms
+1717(be)ms
+1776(omitted)ms
+1940(independent)ms
+295 2471 m
+(of)s
+349(the)ms
+422(path)ms
+521(that)ms
+608(may)ms
+707(have)ms
+814(been)ms
+921(specified.)ms
+1126(The)ms
+1217(module)ms
+1379(will)ms
+1469(never)ms
+1593(be)ms
+1653(generated.)ms
+12 FAB
+295 2321 m
+(7.5.3 Empty run)s
+12 FA
+295 2231 m
+(CLiP)s
+415(does)ms
+521(not)ms
+600(always)ms
+754(recognize)ms
+963(a)ms
+1000(corrupted)ms
+1206(INI-file.)ms
+1386(Thus)ms
+1501(if)ms
+1546(you)ms
+1636(run)ms
+1717(CLiP)ms
+1838(and)ms
+1925(it)ms
+1967(produces)ms
+2162(a)ms
+295 2171 m
+(report)s
+426(of)ms
+481(the)ms
+554(form)ms
+10 FH
+345 2090 m
+(============================ CLiP version 2.1 ==========================)s
+345 2006 m
+(============================ Busy scanning =============================)s
+345 1965 m
+(Scanning file: ..................)s
+345 1923 m
+(.................................)s
+345 1840 m
+(============================ End scanning ==============================)s
+345 1756 m
+(============================ Busy analysing ============================)s
+345 1673 m
+(============================ End analysing =============================)s
+345 1590 m
+(============================ Busy generating ===========================)s
+345 1506 m
+(============================ End generating ============================)s
+345 1465 m
+(Used \(CPU\) time :5.88 Sec.)s
+345 1423 m
+(See you next time !)s
+12 FA
+295 1339 m
+(then)s
+397(you)ms
+489(start)ms
+591(checking)ms
+788(the)ms
+866(specifications)ms
+1157(of)ms
+1215(the)ms
+1293(target)ms
+1423(modules,)ms
+1622(since)ms
+1741(this)ms
+1830(is)ms
+1879(the)ms
+1957(most)ms
+2071(likely)ms
+295 1279 m
+(source)s
+437(of)ms
+490(trouble.)ms
+655(Keep)ms
+772(in)ms
+823(mind)ms
+937(however,)ms
+1133(that)ms
+1220(the)ms
+1292(problem)ms
+1471(may)ms
+1568(be)ms
+1627(also)ms
+1719(arise)ms
+1825(due)ms
+1909(to)ms
+1959(a)ms
+1993(corrupted)ms
+295 1219 m
+(INI-file.)s
+12 FCB
+295 1066 m
+(7.6 Lost lines)s
+12 FA
+295 979 m
+(If)s
+340(you)ms
+428(have)ms
+535(stubs)ms
+650(of)ms
+704(the)ms
+778(form)ms
+10 FH
+345 898 m
+(\(****************** GEN_POOL global routines ********************\))s
+345 856 m
+(\(******************************************************************\))s
+345 815 m
+(\(* routine: write_string .... *\))s
+345 773 m
+(\(* ................... *\))s
+345 731 m
+(\(******************************************************************\))s
+12 FA
+295 648 m
+(you)s
+385(will)ms
+479(see)ms
+559(that)ms
+650(the)ms
+727(second)ms
+881(line)ms
+972(of)ms
+1030(the)ms
+1107(stub)ms
+1206(\(the)ms
+1299("starred")ms
+1492(line\))ms
+1600(is)ms
+1649(not)ms
+1729(generated)ms
+1939(in)ms
+1994(the)ms
+2071(target)ms
+295 588 m
+(modules.)s
+488(For)ms
+569(this)ms
+652(reason)ms
+794(it)ms
+833(is)ms
+878(better)ms
+1003(to)ms
+1053(put)ms
+1129(an)ms
+1187(additional)ms
+1399(empty)ms
+1535(line)ms
+1621(in)ms
+1671(between.)ms
+1862(For)ms
+1943(example)ms
+2123(the)ms
+295 528 m
+(following)s
+501(stub)ms
+597(will)ms
+688(be)ms
+747(extracted)ms
+943(correctly.)ms
+8 FA
+295 254 m
+(CLiP)s
+373(provisional)ms
+532(user)ms
+595(manual)ms
+702(\(version)ms
+819(2.100\))ms
+endpage
+%%Page: 16 17
+begpage
+10 FC
+1736 3182 m
+(8 References)s
+10 FCB
+2138 3182 m
+(17)s
+10 FH
+345 3020 m
+(\(****************** GEN_POOL global routines ********************\))s
+345 2936 m
+(\(******************************************************************\))s
+345 2895 m
+(\(* routine: write_string .... *\))s
+345 2853 m
+(\(* ................... *\))s
+345 2811 m
+(\(******************************************************************\))s
+12 FCB
+295 2674 m
+(7.7 DOS version only)s
+12 FA
+295 2588 m
+(If)s
+344(you)ms
+435(activate)ms
+607(the)ms
+685(PROJECT/Load)ms
+1029(INI-file)ms
+1198(or)ms
+1256(PROJECT/Save)ms
+1594(INI-file)ms
+1763(menu)ms
+1891(of)ms
+1949(the)ms
+2026(CLIP_1)ms
+295 2528 m
+(program)s
+481(and)ms
+569(you)ms
+661(specify)ms
+822(an)ms
+886(illegal)ms
+1028(drive)ms
+1147(in)ms
+1203(the)ms
+1280(Current)ms
+1450(Directory)ms
+1658(option,)ms
+1815(you)ms
+1907(may)ms
+2009(hang)ms
+2123(the)ms
+295 2468 m
+(system.)s
+458(For)ms
+540(instance)ms
+717(a)ms
+751(drive)ms
+867(specification)ms
+1135(preceeded)ms
+1350(by)ms
+1412(a)ms
+1447(space)ms
+1571(will)ms
+1661(produce)ms
+1834(this)ms
+1919(bug.)ms
+14 FCB
+295 2308 m
+(8 References)s
+12 FA
+295 2213 m
+(Ammers)s
+480(E.W.)ms
+596(van,)ms
+693(M.R.)ms
+809(Kramer)ms
+975(\(1993\),)ms
+1134(The)ms
+1225(CLiP)ms
+1343(Style)ms
+1459(of)ms
+1514(Literate)ms
+1683(Programming)ms
+1971(\(submitted)ms
+389 2153 m
+(for)s
+467(publication\).)ms
+742(Anonymously)ms
+1046(ftp-able)ms
+1222(as)ms
+1284(CLIP_STYLE.PS,)ms
+1674(CLIP_STYLE_A.PS)ms
+2112(and)ms
+389 2093 m
+(CLIP_STYLE_B.PS)s
+816(from)ms
+926(directory)ms
+1119(CLIP)ms
+1240(on)ms
+1302(sun01.info.wau.nl.)ms
+295 2003 m
+(Ammers)s
+475(E.W.)ms
+587(van,)ms
+680(Kramer)ms
+842(M.R.)ms
+953(\(1992\),)ms
+1108(VAMP:)ms
+1275(A)ms
+1319(Tool)ms
+1423(for)ms
+1490(Literate)ms
+1654(Programming)ms
+1937(Independent)ms
+389 1943 m
+(of)s
+441(Programming)ms
+728(Language)ms
+936(and)ms
+1020(Formatter.)ms
+1241(CompEuro '92)ms
+1551(Proceedings,)ms
+1819(May)ms
+1922(4-8)ms
+2000(1992,)ms
+2123(the)ms
+389 1883 m
+(Hague,)s
+544(pg.)ms
+619(371-376.)ms
+295 1793 m
+(Knuth)s
+432(D.E.)ms
+536(\(1984\).)ms
+694(Literate)ms
+862(Programming.)ms
+1162(The)ms
+1253(Computer)ms
+1465(Journal)ms
+1625(27,)ms
+1700(2,)ms
+1750(97-111.)ms
+8 FA
+295 254 m
+(CLiP)s
+373(provisional)ms
+532(user)ms
+595(manual)ms
+702(\(version)ms
+819(2.100\))ms
+endpage
+%%Page: Contents-0 18
+begpage
+12 FAB
+1049 3019 m
+(Table of Contents)s
+12 FA
+295 2919 m
+(CLiP - )s
+12 FAI
+(C)s
+12 FA
+( ode from )s
+12 FAI
+(Li)s
+12 FA
+( terate )s
+12 FAI
+(P)s
+12 FA
+( rograms Provisional User Manual )s
+1596(................................)ms
+2019 2919 m
+(1)s
+295 2819 m
+(1 Introduction )s
+608(...............................................................................................................)ms
+2019 2819 m
+(1)s
+295 2719 m
+(2 Syntax \(programming style\) )s
+933(.....................................................................................)ms
+2019 2719 m
+(2)s
+365 2669 m
+(2.1 Stub blocks and documentation blocks )s
+1245(............................................................)ms
+2019 2669 m
+(3)s
+365 2619 m
+(2.2 Segments )s
+670(..........................................................................................................)ms
+2019 2619 m
+(3)s
+365 2569 m
+(2.3 Options )s
+632(.............................................................................................................)ms
+2019 2569 m
+(3)s
+295 2469 m
+(3 Examples )s
+558(...................................................................................................................)ms
+2019 2469 m
+(4)s
+365 2419 m
+(3.1 Example 1: Defining a module )s
+1082(.........................................................................)ms
+2019 2419 m
+(4)s
+365 2369 m
+(3.2 Example 2: Multiple slots )s
+995(................................................................................)ms
+2019 2369 m
+(5)s
+365 2319 m
+(3.3 Example 3: Quick stubs and abstract data types )s
+1420(..............................................)ms
+2019 2319 m
+(6)s
+365 2269 m
+(3.4 Example 4: An ordinary refinement step )s
+1282(.........................................................)ms
+2019 2269 m
+(7)s
+365 2219 m
+(3.5 Example 5: A subroutine module )s
+1132(.....................................................................)ms
+2019 2219 m
+(9)s
+295 2119 m
+(4 Semantics of options )s
+783(.................................................................................................)ms
+2019 2119 m
+(11)s
+295 2019 m
+(5 Using CLiP )s
+596(................................................................................................................)ms
+2019 2019 m
+(12)s
+295 1919 m
+(6 The structure of an INI-file )s
+908(.......................................................................................)ms
+2019 1919 m
+(13)s
+295 1819 m
+(7 Bugs, work-arounds and undocumented features )s
+1333(.....................................................)ms
+2019 1819 m
+(15)s
+365 1769 m
+(7.1 "SP_EXTR_STR: system failure .... call maintenance" )s
+1570(..................................)ms
+2019 1769 m
+(15)s
+365 1719 m
+(7.2 Options in general )s
+845(............................................................................................)ms
+2019 1719 m
+(15)s
+365 1669 m
+(7.3 Multiple option )s
+782(.................................................................................................)ms
+2019 1669 m
+(15)s
+365 1619 m
+(7.4 Report file option NONE )s
+982(.................................................................................)ms
+2019 1619 m
+(15)s
+365 1569 m
+(7.5 Generating target modules )s
+1007(...............................................................................)ms
+2019 1569 m
+(15)s
+436 1519 m
+(7.5.1 Specification )s
+845(............................................................................................)ms
+2019 1519 m
+(15)s
+436 1469 m
+(7.5.2 Omitted modules )s
+920(......................................................................................)ms
+2019 1469 m
+(16)s
+436 1419 m
+(7.5.3 Empty run )s
+795(................................................................................................)ms
+2019 1419 m
+(16)s
+365 1369 m
+(7.6 Lost lines )s
+670(..........................................................................................................)ms
+2019 1369 m
+(16)s
+365 1319 m
+(7.7 DOS version only )s
+832(.............................................................................................)ms
+2019 1319 m
+(17)s
+295 1219 m
+(8 References )s
+583(.................................................................................................................)ms
+2019 1219 m
+(17)s
+8 FA
+295 254 m
+(CLiP)s
+373(provisional)ms
+532(user)ms
+595(manual)ms
+702(\(version)ms
+819(2.100\))ms
+endpage
+%%Trailer
+enddocument
+%%Pages: 18
+%%DocumentFonts:
+%%+ Times-Roman
+%%+ Times-Italic
+%%+ Times-Bold
+%%+ Times-BoldItalic
+%%+ Helvetica
+%%+ Helvetica-Bold
+%%+ Helvetica-BoldOblique
+%%+ Courier
+%%EOF
+ \ No newline at end of file
diff --git a/web/clip/vax_vms/manual.txt b/web/clip/vax_vms/manual.txt
new file mode 100644
index 0000000000..b7e319fd8f
--- /dev/null
+++ b/web/clip/vax_vms/manual.txt
@@ -0,0 +1,854 @@
+
+
+
+ CLiP - C ode from Li terate P rograms
+ *************************************
+
+ Provisional User Manual
+
+
+
+Disclaimer:
+ This document is meant for programmers who are already familiar with the
+literate programming paradigm. It pretends in no way to be a complete user
+manual in the real meaning of the word. But the document should supply
+sufficient hints to experiment successfully with the CLiP system.
+ You are assumed to be familiar with the ideas and design goals of the CLiP
+system as explained in [Ammers and Kramer 1993]. Also you should have read *
+READ_ME.TXT* or *READ_ME.PS* which come with the executables and understand the
+meaning of the INI-file which guides the extraction process.
+ The DOS and VMS versions of CLiP consist of two independent programs,
+CLIP_1 and CLIP_2. CLIP_1 is purely to create an INI-file for CLIP_2, which
+performs the actual work. The Unix version consists of only one program, CLIP
+(which is identical to CLIP_2), and an INI-file should be made using the
+supplied scripts or an editor. This manual only deals with the second program.
+
+
+
+ Table of Contents
+
+1 Introduction 1
+
+2 Syntax (programming style) 2
+ 2.1 Stub blocks and documentation blocks 3
+ 2.2 Segments 3
+ 2.3 Options 3
+3 Examples 4
+ 3.1 Example 1: Defining a module 4
+ 3.2 Example 2: Multiple slots 5
+ 3.3 Example 3: Quick stubs and abstract data types 6
+ 3.4 Example 4: An ordinary refinement step 7
+ 3.5 Example 5: A subroutine module 9
+4 Semantics of options 11
+
+5 Using CLiP 12
+
+6 The structure of an INI-file 13
+
+7 Bugs, work-arounds and undocumented features 15
+ 7.1 "SP_EXTR_STR: system failure .... call maintenance" 15
+ 7.2 Options in general 15
+ 7.3 Multiple option 15
+ 7.4 Report file option NONE 15
+ 7.5 Generating target modules 15
+ 7.5.1 Specification 15
+ 7.5.2 Omitted modules 16
+ 7.5.3 Empty run 16
+ 7.6 Lost lines 16
+ 7.7 DOS version only 17
+8 References 17
+
+
+1 Introduction
+
+In short the idea behind CLiP is to define a style of programming sufficiently
+formal to be recognized by a literate programming automaton. This syntax (which
+we will refer to as the CLiP-syntax) should not obstruct a natural way of
+programming. Ideally the system should be smart enough to "see" stubs, slots
+and the like by "inspecting" the documentation and simply "understanding" the
+refinements the programmer has made. Alas, this is far beyond the current
+potential of artificial intelligence and we will have to reach the automaton a
+helping hand by defining a special syntax.
+ So we want the "look and feel" of a documentation to be as "natural" as
+possible, but with CLiP features that can be recognized by an automaton. On the
+other hand should the reader be burdened as little as possible with the fact
+that additional processing is needed to extract the modules. In systems like
+VAMP [Ammers 1984] and WEB [Knuth 1984] - which use batch formatters - this is
+achieved by adding explicit commands in the source-files that are suppressed in
+the formatted documentation. But this technique does not work if the
+documentation environment is an interactive word-processor (Word Perfect, Lotus
+Manuscript, MS-Word, Ami Pro, etc.). So CLiP uses either the ASCII-export from
+a word-processors or the ASCII input of a formatter and extracts modules from
+there. In these files CLiP recognizes the important sections by a particular
+programming-style rather than by explicit commands.
+ The first section describes the syntax that CLiP "sees". The next section
+gives a couple of useful examples. In section 4 we describe the options that
+may be used to customize the process of module generation. In section 5 we give
+some hints on how to organize your working with CLiP efficiently. Stubs and
+slots my remaining sections illustrate the style of documentation and programs
+that would result. CLiP is in development and we compile the known bugs in
+section 6.
+
+2 Syntax (programming style)
+
+CLiP-lines [-] that is lines which have a special meaning to CLiP [-] start
+with a CLIP-left-parenthesis (CLIP-lpar) and end with a CLIP-right-parenthesis
+(CLIP-rpar). Both tokens are constructed as extensions of the tokens
+encapsulating comments which we will refer to as *COMM-START* and *COMM-END*.
+If we program in Pascal then everything between "*(**" and "**)*" is seen as
+comment, thus we have the convention:
+
+ *COMM-START* = "*(**"
+ *COMM-END* = "**)*"
+
+Extension of the comment token is by a character with a special meaning to
+clip, the *CLIP-CHAR*. In our case we assume
+
+ *CLIP-CHAR* = "***"
+
+Thus CLiP-lines are enclosed by
+
+ CLIP-lpar of the form "*(***"
+
+and
+
+ CLIP-rpar of the form "***)*"
+
+The parameters *COMM-START*, *COMM-END* and *CLIP-CHAR* are set by the INI-file
+and it is evident that the convention can be adjusted.
+
+
+ CLiP distinguishes six source line categories:
+
+ 1 (******************* <arbitrary string> **********************)
+ 2 (**************** End of <arbitrary string> ******************)
+ 3 (** <arbitrary string> **)
+ 4 (***************************************************************)
+ 5 <the empty string>
+ 6 <any string not falling in one of the above categories>
+
+We will refer to a line from the second category as an "L2" and so on and
+investigate the meaning is of the various categories for CLiP.
+ The string "*End of*" of an L2 has a special meaning that distinguishes an
+L2 from an L1. Again this special string is defined by a parameter in the
+INI-file
+
+ *END-STRING* = "*ENDOF*"
+
+Observe that CLiP does not distinguish between upper and lower case and forgets
+about spaces. In fact CLiP reduces the <arbitrary string> internally to a
+sequence of the characters "*A*"-"*Z*", "*0*"-"*9*" and "*.*"
+ Note that for an L3 the character immediately following the *CLIP-CHAR* on
+the left side and the character preceding the *CLIP-CHAR* on the right side may
+be anything apart from the *CLIP-CHAR* itself.
+
+2.1 Stub blocks and documentation blocks
+
+From CLiP's point of view the source-files are divided in documentation blocks
+and stub-blocks. A stub-block starts with an L1 and usually ends with an L2. A
+special kind of stub, a so called quick stub (see sect. 3.3 and 4), is ended by
+an L5 or an <EOF>. Everything outside a stub-block is a documentation block and
+ignored by CLiP. For this reason we say that CLiP is in active mode during the
+processing of a stub-block and in passive mode otherwise. The only way to
+change CLiP from passive to active mode is by an L1 and the usual way from
+active to passive is through an L2. An L2 in passive mode is presumably an
+error and will be ignored.
+
+2.2 Segments
+
+A stub-block contains one and only one stub-segment, which starts the
+stub-block. The stub-segment may be followed by any number of slot-segments
+and/or code-segments.
+ An L1 always starts a new stub- or slot-segment and the segment continues
+with any number of lines of type L3 or L4. A segment is a slot-segment if and
+only if it is not the first one of a stub-block. A code-segment consists of any
+number of contiguous lines of type L5. Stub- and slot-segments have an
+identification or name which is constructed somehow from the *<arbitrary string>
+*s inside the segment.
+ L3 and L4 are continuations of stub- and slot-segments, but with a slightly
+different status. An L3 that cannot be pasted to a segment is flagged as an
+error. But an L4 under the same conditions is interpreted as belonging to the
+current code-segment.
+
+2.3 Options
+
+The module extraction process can be tuned by means of options. Stub-segments
+as well as slot-segments may have options. An option starts with a keyword
+signalled by a special *OPTION-MARKER*. The option keyword may be abbreviated
+to a unique headerstring for that option. We will assume "*#*" for *
+OPTION-MARKER*, but of course this again is a parameter set by the INI-file.
+
+
+The argument(s) following an option continue till the next option-keyword or
+till the end of the segment. Therefore the name of a segment must precede the
+options.
+ In general options operate on the inside of the stub only, since that is
+the part of the program that the programmer of this particular refinement has
+in his or her mind. In addition options can be inherited. The meaning of the
+various options is explained in section 4. Some frequently used options show up
+in the examples of section 3.
+
+
+3 Examples
+
+In the examples we will illustrate the most important features of CLiP by
+making remarks on excerpts drawn from the documentation of CLiPs predecessor,
+VAMP.
+
+3.1 Example 1: Defining a module
+
+ The module VAMP:
+ Starting from nowhere, the empty program will do.
+
+
+ 1 (**** #File "VAMP.PAS". #Indent on. ****)
+ 2
+ 3 (***************************************************************)
+ 4 (* Routine: VAMP - Main module of the VAMP system. *)
+ 5 (* Purpose: Main module and unique entry point to the *)
+ 6 (* VAMP-system. *)
+ 7 (* Interface: TTY - All communication with the user *)
+ 8 (* proceeds via the terminal. *)
+ 9 (* Author/Date: VAMP project management, Sept. 12, 1983. *)
+ 10 (***************************************************************)
+ 11
+ 12 (********************** VAMP (body) **************************)
+ 13
+ 14 (*********************** End of VAMP *************************)
+ 15
+ 16
+ 18 (********* VAMP (body) #def ***********)
+ 19 PROGRAM VAMP (INPUT, OUTPUT);
+ 20 BEGIN
+ 21 WRITELN ('!!! VAMP was here !!!');
+ 22 END (*VAMP*).
+ 23 (********** End of VAMP (body) *********)
+
+Remarks:
+ There are two stubs in this section. Line 1-14 and line 18-23. Both
+stub-blocks have a stub-segment of one line only (lines 1 and 18 respectively).
+ The first stub-segment has no identification. It specifies the start of a
+new output module by the FILE option and thus is not meant to be referenced
+(see also example 5).
+ Line 2 (an L5) separates line 3 (an L4) from the stub-segment and makes it
+belong to the code-segment which expands over lines 2-11.
+ There resides only one slot inside the first stub (line 12) and this slot
+is identified as "*VAMPBODY*". The second stub has no slots at all.
+ Line 13 is a trivial code-segment and line 14 marks the end of the first
+stub-block. The string following the "End of" is optional and does not have to
+match the stub name in any way.
+
+
+3.2 Example 2: Multiple slots
+
+ Environment module:
+ In the past there have been made several changes in the VAMP
+ program. These changes have been made in the extracted modules rather
+ then in the VAMP source. To make source files consistent with the
+ modules, the source files have been updated in march 1990 by Jeroen
+ Reef.
+
+ Furthermore, the updated source files contain two additional
+ modules, VAMP.MSG and DECLAR_MOD. The module VAMP.MSG contains the error
+ messages of VAMP and the module DECLAR_MOD contains the types and
+ constants used by several modules of VAMP. This module uses the
+ ENVIRONMENT, which directs the compiler to generate an environment file
+ DECLAR.PEN. Other modules can reference the identifiers declared in
+ DECLAR_MOD by inheriting the environment with the INHERIT attribute.
+
+
+
+ 1 (****** #File "DECLAR_MOD.PAS". #Indent ON. ******)
+ 2
+ 3 (***************************************************************)
+ 4 (* Module to contain all parameters and global declarations *)
+ 5 (* of the VAMP system. *)
+ 6 (***************************************************************)
+ 7 [ENVIRONMENT ('DECLAR.PEN')] MODULE DECLARS;
+ 8
+ 9 (********** Parameters of the VAMP-system (#mul) *************)
+ 10
+ 11 TYPE
+ 12 ABSTRACT = (DEFINED, UNDEFINED);
+ 13 (********* Simple types of the VAMP-system (#mul) ********)
+ 14 (******** Structured types of the VAMP-system (#mul) ******)
+ 15 END.
+ 16 (***************** End of DECLARE_MOD.PAS ********************)
+
+Remarks:
+ The stub-block extends over 16 lines. Line 1 is the stub-segment and line
+16 closes the stub-block. Lines 2-8 constitute the first code-segment of the
+stub, lines 10-12 the middle one and line 15 the last one.
+ There are three slots (or slot-segments), lines 9, 13 and 14. All slots
+consist of one line only and carry the multiple option. For instance the first
+slot can swallow any number of parameter definition that might turn up in the
+future.
+ The names (identifications) of the slots are respectively
+
+ "*PARAMETERSOFTHEVAMPSYSTEM*"
+ "*SIMPLETYPESOFTHEVAMPSYSTEM*"
+ "*STRUCTUREDTYPESOFTHEVAMPSYSTEM*"
+
+
+3.3 Example 3: Quick stubs and abstract data types
+
+ First level data structures:
+ This level introduces the data-structure TTY_INFO, containing the
+ initial communication between the terminal and the program. The
+ definition requires in addition four system parameters and some
+ constants and types which are related to file specifications. The
+ structure of CODE_INFO is left open for the time being.
+
+
+ 1 (********** Parameters of the VAMP-system (#quick) ***********)
+ 2 (* -------- Parameters of TTY_INFO --------- *)
+ 3 MAX_FILE_SPEC_L = 255; (* Maximum length file-specific. *)
+ 4 MAX_FILE_NAME_L = 39; (* Maximum length file-name. *)
+ 5 MAX_FILE_EXT_L = 39; (* Maximum length file-extension. *)
+ 6 MAX_IN_FILES = 8; (* Maximum number of in-files for *)
+ 7 (* a single run. *)
+ 8 UPB_IN_FILES = 9; (* = MAX_IN_FILES + 1. *)
+ 9 MAX_MODULES = 10; (* Maximum number of modules *)
+ 10 (* specified for a run. *)
+ 11 UPB_MODULES = 11; (* = MAX_MODULES + 1. *)
+ 12 EMPTY = '';
+ 13
+ 14 (********* Simple types of the VAMP-system (#quick) **********)
+ 15 (* -------- Simple types of TTY_INFO --------- *)
+ 16 FILE_SPEC = VARYING [MAX_FILE_SPEC_L] OF CHAR;
+ 17 FILE_NAME = VARYING [MAX_FILE_NAME_L] OF CHAR;
+ 18 FILE_EXT = VARYING [MAX_FILE_EXT_L] OF CHAR;
+ 19
+ 20 (******** Structured types of the VAMP-system ****************)
+ 21 (* -------- Structured types of TTY_INFO --------- *)
+ 22 TTY_INFO = RECORD
+ 23 IN_FILES: ARRAY [1..UPB_IN_FILES] OF FILE_SPEC;
+ 24 MODULES: ARRAY [1..UPB_MODULES] OF FILE_NAME;
+ 25 DFLT_EXT: FILE_EXT;
+ 26 INV_MODE,
+ 27 GO: BOOLEAN;
+ 29 END (*RECORD*);
+ 30 (**************** Declaration of CODE_INFO *******************)
+ 31 (******** End of Structured types of the VAMP-system *********)
+ 32
+ 33
+ 34 (************* Declaration of CODE_INFO (#def) ***************)
+ 35 CODE_INFO = ABSTRACT;
+ 36 (******************** End of declaration *********************)
+
+Remarks:
+ This section contains five stubs altogether, i.e. lines 1-12, 14-18, 20-31
+and 34-36. The first two blocks one have no internal slots. The quick option
+promotes them to quick stubs, which means that they are completed by the first
+line that is not an L6.
+ The third stub (20-31) illustrates how an abstract data type can be
+implemented. The stub is an ordinary one with one slot - identified as "*
+DECLARATIONOFCODEINFO*" - at line 30. The slot is by default satisfied with the
+stub at lines 34-36. But this declaration will be replaced by a new one at some
+time in the future.
+
+
+3.4 Example 4: An ordinary refinement step
+
+ Body of VAMP:
+ The input-files will be processed sequentially in the same order as
+ given by the user. The intermediate file "VAMP.TMP" is guarded by a
+ sentinel to simplify backspacing later on and it needs an additional
+ global declaration.
+
+
+ 1 (*********** Simple types of the VAMP-system ************)
+ 2 FTYPE = FILE OF CHAR;
+ 3 (****************** End of declaration ******************)
+
+
+ Now the body of VAMP expands to
+
+ 4 (********************** VAMP (body) **************************)
+ 5 [INHERIT ('SYS$LIBRARY:STARLET.PEN', 'DECLAR.PEN')]
+ 6 PROGRAM VAMP (INPUT, OUTPUT);
+ 7
+ 8 (***************** Constants of VAMP (#mult) *****************)
+ 9 (***************** Types of VAMP (#mult) *********************)
+ 10 VAR
+ 11 FILE_CNT: 1..UPB_IN_FILES;
+ 12 CURR_IN_FILE: TEXT; (* Currently read file. *)
+ 13 CODE_LINES: FTYPE; (* From input extracted code. *)
+ 14 TTY_DATA: TTY_INFO;
+ 15 CODE_STRUCT: CODE_INFO;
+ 16 (************ Variables of VAMP (#mult) ******************)
+ 17
+ 18 [EXTERNAL] PROCEDURE ASKTTY (VAR TTY_DATA: TTY_INFO); EXTERN;
+ 19 (*************** Functions of VAMP (#mult) *******************)
+ 20
+ 21 BEGIN
+ 22 (* Take the data, that are needed for this VAMP run from *)
+ 23 (* the terminal. *)
+ 24 ASKTTY (TTY_DATA);
+ 25 WITH TTY_DATA DO
+ 26 IF GO THEN
+ 27 BEGIN
+ 28 (********************* VAMP (C) **********************)
+ 29 (** Initialize CODE_STRUCT. **)
+ 30 (*******************************************************)
+ 31
+ 32 OPEN (CODE_LINES, FILE_NAME :='VAMP.TMP',
+ 33 ORGANIZATION := RELATIVE, ACCESS_METHOD := DIRECT,
+ 34 DISPOSITION := DELETE);
+ 35 REWRITE (CODE_LINES);
+ 36 FILE_CNT := 1;
+ 37 WHILE (IN_FILES [FILE_CNT] <> EMPTY) DO
+ 38 BEGIN
+ 39 WRITELN ('Proceeding on file ',IN_FILES [FILE_CNT]);
+ 40 OPEN (CURR_IN_FILE, FILE_NAME := IN_FILES [FILE_CNT],
+ 41 HISTORY := READONLY);
+ 42 RESET (CURR_IN_FILE);
+ 43 PUT (CODE_LINES); (* Start file with a sentinel. *)
+ 44
+
+
+ 45 (****************** VAMP (A) *********************)
+ 46 (** Build CODE_STRUCT and fill CODE_LINES by a **)
+ 47 (** scan of CURR_IN_FILE, using the information **)
+ 48 (** of MODULES, DFLT_EXT and INV_MODE. **)
+ 49 (***************************************************)
+ 50
+ 51 CLOSE (CURR_IN_FILE);
+ 52 FILE_CNT := FILE_CNT + 1;
+ 53 END (*WHILE*);
+ 54
+ 55 (******************** VAMP (B) ***********************)
+ 56 (** Generate the files as specified by CODE_STRUCT **)
+ 57 (** from the data contained by CODE_LINES. **)
+ 58 (*******************************************************)
+ 59
+ 60 (* Close and Delete scratch-file CODE_LINES. *)
+ 61 CLOSE (CODE_LINES, DELETE);
+ 62 END
+ 63 ELSE
+ 64 WRITELN ('!!! You specified an empty run - try again !!!');
+ 65 END (*VAMP*).
+ 66 (******************* End of VAMP (body) **********************)
+ 67
+ 68
+ 69 (************ Constants of VAMP (#leader, #quick) ************)
+ 70 CONST
+ 71 (************ Types of VAMP (#leader, #quick) ****************)
+ 72 TYPE
+
+Remarks:
+ This refinement contains four stubs (lines 1-3, 4-66, 69-70 and 71-72). The
+second stub has seven slots (lines 8, 9, 16, 19, 28-30, 45-49 and 55-58). Lines
+22, 23 and 60 are simple code-lines from CLiPs point of view.
+ The leader option of the last two stubs defines the code that will be
+inserted in front of a stub that matches the slot.
+
+
+3.5 Example 5: A subroutine module
+
+ 1 (****** #File "ASKTTY.PAS" ******)
+ 2 [INHERIT ('DECLAR.PEN')] MODULE ASKTTY (INPUT, OUTPUT);
+ 3
+ 4 (*********** External procedures of ASKTTY (#mult) ************)
+ 5
+ 6 (***************************************************************)
+ 7 (* Routine: ASKTTY - ASK information from TTY. *)
+ 8 (* Purpose: To obtain from the TTY the information which *)
+ 9 (* is needed to perform a VAMP run. *)
+ 10 (* Interface: TTY_DATA - Data from TTY to VAMP. *)
+ 11 (* TTY - Source of all knowledge. *)
+ 12 (* Author/Date: VAMP project management, September 29, 1983. *)
+ 13 (***************************************************************)
+ 14 [GLOBAL] PROCEDURE ASKTTY (VAR TTY_DATA: TTY_INFO);
+ 15
+ 16 (************* Constants of ASKTTY (#multiple) ***************)
+ 17 (************* Types of ASKTTY (#multiple) *******************)
+ 18 (************* Variables of ASKTTY (#multiple) ***************)
+ 19 (************* Procedures of ASKTTY (#multiple) **************)
+ 20
+ 21 BEGIN
+ 22 WITH TTY_DATA DO
+ 23 BEGIN
+ 24 (******************** ASKTTY (1) *********************)
+ 25 (** Get IN_FILES from TTY. **)
+ 26 (*******************************************************)
+ 27
+ 28 GO := NOT (IN_FILES[1] = EMPTY);
+ 29 IF GO THEN
+ 30 BEGIN
+ 31 (**************** ASKTTY (2) *********************)
+ 32 (** Ask which modules must be generated by VAMP. **)
+ 33 (** Set INV_MODE, MODULES and GO accordingly. **)
+ 34 (***************************************************)
+ 35 END (*IF*);
+ 36 IF GO THEN
+ 37 BEGIN
+ 38 (**************** ASKTTY (3) *********************)
+ 39 (** Ask DFLT_EXT from the terminal. **)
+ 40 (***************************************************)
+ 41 END (*IF*);
+ 42 END (*WITH*);
+ 43 END (*ASKTTY*);
+ 44
+ 45 END (*MODULE*).
+ 46 (********************** End of MODULE ************************)
+ 47
+ 48
+ 49 (********** Constants of ASKTTY (#leader, #quick) ************)
+ 50 CONST
+
+
+ 51 (********** Types of ASKTTY (#leader, #quick) ****************)
+ 52 TYPE
+ 53 (********** Variables of ASKTTY (#leader, #quick) ************)
+ 54 VAR
+
+Remarks:
+ A clear cut example of a subroutine definition in VAX/VMS Pascal that is to
+be compiled independently. The refinement contains stubs at lines 1-46, 49-50,
+51-52 and 53-54. The last three stubs are all quick stubs.
+ The first stub is a main stub. It carries no identification and only
+specifies the name of the file that will finally hold the module. Had the
+file-option be omitted, this would have meant an error.
+ Lines 4, 16, 17, 18 and 19 are single-line slot for future declarations.
+The leader stubs at the end secure syntactic details. Lines 24-26, 31-34 and
+38-40 are ordinary slots again.
+
+
+4 Semantics of options
+
+#Comment (stub, slot)
+ The comment option transforms the special CLIP-characters to a predefined
+ format which suits a particular programming language. The option has an
+ obligatory argument, e.g. PASCAL, FORTRAN, C, ADA etc. or ON/OFF. The
+ ON/OFF argument specifies wether or not the slot- or stub-segment is to be
+ included upon substitution. Comment options can be nested and the most
+ local version controls the operation.
+
+#Default (stub)
+ A default stub is prefixed to exclusively substituted if no other stub is
+ found for that particular slot.
+
+#Indent (stub, slot)
+ The indent option controls the indentation of the generated listing. Indent
+ options can be nested and the most local option overrules the more global
+ ones. Indent has as one optional argument, ON or OFF.
+
+#File (stub)
+ The file option identifies the stub as a main stub (viz. the root of a new
+ module). The option carries a string in quotes as argument. This string
+ specifies the name of the file to be generated.
+
+#Leader (stub)
+ The leader stub is usually combined with multiple slots. It modifies the
+ environment of the stubs that will be substituted by inserting the leader
+ stub in front of the first encountered normal stub.
+
+#Multiple (slot)
+ A multiple slot accepts the substitution of any number of stubs.
+
+#Optional (slot)
+ An optional slot accepts the substitution of 0 or 1 stubs only.
+
+#Overrule (stub)
+ The overrule stub replaces the stub already substituted in a particular
+ position. It is mainly meant for testing purposes.
+
+#Quick (stub)
+ A quick stub is a stub without internal structure (viz. slots). Following
+ the stub segment only L6-type lines are allowed. Any other type of line
+ will end the stub.
+
+#Separator (stub)
+ A separator stub is to be inserted between two consecutive stubs of the
+ same slot.
+
+#Trailer (stub)
+ The trailer stub is the counterpart of the default stub. It modifies the
+ environment by adding the trailer stub after the last encountered normal
+ stub.
+
+
+5 Using CLiP
+
+The complete CLiP system for DOS and VMS consists of two independent programs,
+CLIP_1.EXE and CLIP_2.EXE. The Unix version has only one program, CLIP, which
+is functionally identical to CLIP_2. CLIP_1 prepares a file, CLIP.INI, telling
+CLIP_2 (the actual module extractor) literally everything it has to know in
+order to perform a run (a detailed description of the structure of an INI-file
+is in the next section). Thus CLIP.INI specifies to CLIP_2 (CLIP):
+ - the files it has to read (i.e. the source files),
+ - the modules it should extract (i.e. target modules),
+ - the name of the report file,
+ - the syntax of the CLiP-lines (i.e. the style of the lines that trigger
+ the module extraction process).
+CLIP_1 allows a very detailed specification of the extraction process, much
+more detailed than you will need in general. For this reason the CLiP system
+comes with a couple of routines to shortcut CLIP_1 and for Unix users these
+routines are the primary tool to construct their INI-file. For a description of
+these routines we refer to section "Using CLiP" of the READ_ME file of this
+release.
+ When using CLiP it is recommended to introduce at least the following
+directories:
+ - A directory for the source files CLiP will use. This directory also
+ holds the various INI-file you maintain to conduct the extraction
+ process.
+ - A directory to contain the extracted modules.
+ - A directory to contain the results of the compilation and linking of
+ the modules.
+ - In case CLiP is used in combination with a word-processor, it is wise
+ to keep the word-processor files again in a separate directory. In this
+ case the source file directory should be fed with ASCII exports from
+ word-processor files.
+
+
+6 The structure of an INI-file
+
+This section explains the structure of an INI-file by means of an example file.
+You should understand this structure thoroughly before your try to edit
+INI-files yourself directly through an editor [Ammers 1993].
+ The example is an INI-file for MS-DOS. The only difference with other
+platforms is the specification of directories. The numbers at the beginning of
+every line are added for convenience of reference. They are not part of the
+file itself.
+
+ <================= Example of an INI-file ====================>
+ 1 This file contains data that is needed to run CLiP
+ 2 And is generated by CLiP_MENU
+ 3 Modifying this file at own risk.
+ 4 Using CLiP_MENU is definitely recommended.
+ 5
+ 6 INTERACTIVE_MODE Mode (INTERACTIVE/DEBUG/HELPFUL/AUTO)
+ 7 NO Interactive fault correction (YES/NO)
+ 8 BOTH Error message destination (TERMINAL/......)
+ 9 (* Left comment string
+ 10 *) Right comment string
+ 11 * Command character
+ 12 ENDOF END string
+ 13 # Option marker
+ 14 EXTRACTED The specified modules are (OMITTED/EXTRACTED)
+ 15 ------------ REPORT FILE -----------
+ 16 CLIP.RPT
+ 17 ------------ INPUT FILES -----------
+ 18 f:\LPT\MAN\EX01_A.ASC
+ 19 f:\LPT\MAN\EX01_B.ASC
+ 20 ------------ MODULES ---------------
+ 21 F:\TEST\
+ 22 PALINDRO.PAS
+ 23 F:\TEST\
+ 24 TESTDATA.IN
+ 25 ------------ MODULE DIRECTORY ------
+ 26 f:\LPT\
+ 27 ------------ END OF INI FILE -------
+ <================= End of Example INI-file ===================>
+
+Lines 1-5: Descriptive lines that are flushed upon reading.
+
+Lines 6-14: Information behind position 24 is not interpreted.
+
+Lines 6-7: These lines refer to unimplemented options. They should not be
+ changed.
+
+Lines 8: Identifies the output device for messages and reports. The first
+ word of the line must be on of the following keywords TERMINAL,
+ REPORTFILE (or FILE), BOTH or NONE and we assume the meaning self
+ evident.
+
+Lines 9-13: These lines together define the syntax of the lines CLiP will
+ recognize. For an explanation of the CLiP syntax, refer to [Ammers
+ 1993].
+
+
+Lines 9: At most 6 characters to specify the "left comment string" i.e. the
+ opening sequence of a comment string of the programming language
+ you want to use. The characters cannot be letters (A-Z, a-z),
+ digits (0-9) or a dot (.).
+
+Lines 10: At most 6 characters to specify the "right comment string" i.e.
+ the closing sequence of a comment string of the programming
+ language you want to use. The characters cannot be letters (A-Z,
+ a-z), digits (0-9) or a dot (.).
+
+Lines 11: The character that is postfixed to a left comment string and
+ prefixed to a right comment string in order to identify it as a
+ special comment that CLiP has to process, a so called CLiP-line.
+ The character cannot be a letter (A-Z, a-z), a digits (0-9) or a
+ dot (.).
+
+Lines 12: The leading characters that identify a particular CLiP-line as the
+ end of a stub, i.e. a particular section that can be substituted
+ elsewhere.
+
+Lines 13: The character that identifies the options.
+
+Line 14: Relates to the modules in the module section below. The specified
+ modules must either be extracted or omitted and the first word of
+ this line can only be OMITTED or EXTRACTED.
+
+Line 15: Starts the section defining the file that mirrors the extraction
+ process. This line should be copied literally.
+
+Line 16: Path and file specification of the report file.
+
+Line 17: Starts the section defining the input files for the extraction
+ process, the so called source files. This line should be copied
+ literally.
+
+Line 18-19: Every line specifies a path and source file. There may be up to 64
+ lines in this section.
+
+Line 20: Starts the section defining the modules that are considered during
+ the extraction process. Whether the modules are extracted or
+ omitted depends on line 14. This line should be copied literally.
+
+Line 21-24: Every line pair specifies a path and a module file. There may be
+ up to 64 pairs (128 lines) in this section.
+
+Line 25: Starts the section to identify the default directory for modules,
+ i.e. the directory where modules go to that have no explicit
+ directory specified by the MODULES section. This line should be
+ copied literally.
+
+Line 26: Default directory for extracted modules.
+
+Line 27: Identifies the end of the INI-file. This line should be copied
+ literally.
+
+
+7 Bugs, work-arounds and undocumented features
+
+7.1 "SP_EXTR_STR: system failure .... call maintenance"
+
+This failure may happen if the stubs have not been correctly closed with the
+END-STRING that has been specified as the syntax. The default value of this
+string is "ENDOF". Also the line containing the END-STRING should be properly
+closed. For example in a Pascal situation
+
+ (********* End of module (2.1) ***)
+
+should be all right, but
+
+ (****** End of module (2.1) **)
+
+may give trouble since the string "**)" is incorrect here.
+
+7.2 Options in general
+
+Several options have been introduces with very advanced applications in mind.
+They have hardly been tested will probably not work. You won't need them
+either. For this reason don't use the options OVERRULE, SEPARATOR and TRAILER.
+
+7.3 Multiple option
+
+A slot with the "MULTIPLE" option raises an error if no stubs are found
+matching the slot. To prevent this error message one should specify the option
+"OPTIONAL" also for the slot.
+
+7.4 Report file option NONE
+
+This option to suppress the printing of reports to the terminal has not been
+implemented. It will be eliminated in some later version.
+
+7.5 Generating target modules
+
+7.5.1 Specification
+
+If CLIP.INI specifies a target module that matches no file-option argument
+anywhere in the list of specified source files, CLiP does not complain. The
+matching is case sensitive and for instance a file-option argument
+
+ (********** #file "EXAMPLE.PAS" ***********************)
+
+does not fit a module specification in CLIP.INI of the form
+
+ Example.PAS
+
+This may lead to unpleasant surprises.
+ On MS-DOS and VAX/VMS platforms the specification of files is not context
+sensitive. For this reason the CLIP_1 program (which is available for the
+MS-DOS and VAX/VMS versions of CLiP) converts those names to upper case in the
+INI-file it creates. Thus the file-option arguments in the source files should
+definitely be specified in upper case too.
+ In a Unix environment a file name is case sensitive indeed. Currently no
+CLIP_1 exists for Unix and an INI-file has to be created by means of the
+short-cut routine CLP (or directly by means of an editor, cf. section 6). No
+conversion is performed in this case and one has to make sure the file-option
+argument is identical to the corresponding name in the INI-file.
+
+
+7.5.2 Omitted modules
+
+If modules are specified for being OMITTED at extraction time, it will be
+omitted independent of the path that may have been specified. The module will
+never be generated.
+
+7.5.3 Empty run
+
+CLiP does not always recognize a corrupted INI-file. Thus if you run CLiP and
+it produces a report of the form
+
+ ============================ CLiP version 2.1 ==========================
+
+ ============================ Busy scanning =============================
+ Scanning file: ..................
+ .................................
+
+ ============================ End scanning ==============================
+
+ ============================ Busy analysing ============================
+
+ ============================ End analysing =============================
+
+ ============================ Busy generating ===========================
+
+ ============================ End generating ============================
+ Used (CPU) time :5.88 Sec.
+ See you next time !
+
+then you start checking the specifications of the target modules, since this is
+the most likely source of trouble. Keep in mind however, that the problem may
+be also arise due to a corrupted INI-file.
+
+7.6 Lost lines
+
+If you have stubs of the form
+
+ (****************** GEN_POOL global routines ********************)
+ (******************************************************************)
+ (* routine: write_string .... *)
+ (* ................... *)
+ (******************************************************************)
+
+you will see that the second line of the stub (the "starred" line) is not
+generated in the target modules. For this reason it is better to put an
+additional empty line in between. For example the following stub will be
+extracted correctly.
+
+ (****************** GEN_POOL global routines ********************)
+
+ (******************************************************************)
+ (* routine: write_string .... *)
+ (* ................... *)
+ (******************************************************************)
+
+
+7.7 DOS version only
+
+If you activate the PROJECT/Load INI-file or PROJECT/Save INI-file menu of the
+CLIP_1 program and you specify an illegal drive in the Current Directory
+option, you may hang the system. For instance a drive specification preceeded
+by a space will produce this bug.
+
+
+8 References
+
+Ammers E.W. van, M.R. Kramer (1993), The CLiP Style of Literate Programming
+ (submitted for publication). Anonymously ftp-able as CLIP_STYLE.PS,
+ CLIP_STYLE_A.PS and CLIP_STYLE_B.PS from directory CLIP on
+ sun01.info.wau.nl.
+
+Ammers E.W. van, Kramer M.R. (1992), VAMP: A Tool for Literate Programming
+ Independent of Programming Language and Formatter. CompEuro '92
+ Proceedings, May 4-8 1992, the Hague, pg. 371-376.
+
+Knuth D.E. (1984). Literate Programming. The Computer Journal 27, 2, 97-111.
diff --git a/web/clip/vax_vms/modula.ini b/web/clip/vax_vms/modula.ini
new file mode 100644
index 0000000000..892efa30b0
--- /dev/null
+++ b/web/clip/vax_vms/modula.ini
@@ -0,0 +1,21 @@
+This file contains data that is needed to run CLiP
+And is generated by CLiP_MENU
+Modifying this file at own risk.
+Using CLiP_MENU is definitely recommended.
+
+INTERACTIVE_MODE Mode (INTERACTIVE/DEBUG/HELPFUL/AUTO)
+YES Interactive fault correction (YES/NO)
+BOTH Error message destination (TERMINAL/REPORTFILE/BOTH/NONE)
+(* Left comment string
+*) Right comment string
+* Command character
+ENDOF END string
+# Option marker
+OMITTED The specified modules are (OMITTED/EXTRACTED)
+------------ REPORT FILE -----------
+CLIP.RPT
+------------ INPUT FILES -----------
+------------ MODULES ---------------
+------------ MODULE DIRECTORY ------
+
+------------ END OF INI FILE -------
diff --git a/web/clip/vax_vms/pascal.ini b/web/clip/vax_vms/pascal.ini
new file mode 100644
index 0000000000..892efa30b0
--- /dev/null
+++ b/web/clip/vax_vms/pascal.ini
@@ -0,0 +1,21 @@
+This file contains data that is needed to run CLiP
+And is generated by CLiP_MENU
+Modifying this file at own risk.
+Using CLiP_MENU is definitely recommended.
+
+INTERACTIVE_MODE Mode (INTERACTIVE/DEBUG/HELPFUL/AUTO)
+YES Interactive fault correction (YES/NO)
+BOTH Error message destination (TERMINAL/REPORTFILE/BOTH/NONE)
+(* Left comment string
+*) Right comment string
+* Command character
+ENDOF END string
+# Option marker
+OMITTED The specified modules are (OMITTED/EXTRACTED)
+------------ REPORT FILE -----------
+CLIP.RPT
+------------ INPUT FILES -----------
+------------ MODULES ---------------
+------------ MODULE DIRECTORY ------
+
+------------ END OF INI FILE -------
diff --git a/web/clip/vax_vms/read_me.ps b/web/clip/vax_vms/read_me.ps
new file mode 100644
index 0000000000..7b523abf4b
--- /dev/null
+++ b/web/clip/vax_vms/read_me.ps
@@ -0,0 +1,1988 @@
+%!PS-Adobe-2.0
+%%DocumentFonts: (atend)
+%%Title: F:\\LPT\\VMS\\READ_ME.DOC
+%%Creator: Lotus Manuscript
+%%For: Eric W. van Ammers
+%%CreationDate: November 17, 1993
+%%Pages: (atend)
+%%BoundingBox: 0 0 595 841
+%%EndComments
+% PostScript Prologue (initialization) for Manuscript
+% Copyright (c) 1985,1986,1987,1988 Lotus Development Corporation
+% There is no user servicable code in this file.
+
+% set timeouts to infinite
+statusdict begin
+0 setjobtimeout
+/manualfeedtimeout 3600 def
+/waittimeout 0 def
+end
+
+% correct bug correction in rev 41.0
+/idiv{div cvi}bind def
+
+% define User Dictionary
+/msdict 300 dict def msdict begin
+/bd{bind def}bind def
+
+% Define commonly used things
+/delay{usertime 5000 add{dup usertime lt{pop exit}if}loop}bd
+/mfeed{statusdict begin /manualfeed true def end}bd
+/afeed{statusdict begin /manualfeed false def end}bd
+/bfeed{ afeed statusdict begin /setpapertray where
+ {pop setpapertray}{pop} ifelse end}bd
+
+/dpi{0.24 dup scale}bd
+
+% These two are called for each page
+/inpage false def
+/begpage{save dpi /inpage true def}bd
+/endpage{inpage {restore showpage}if }bd
+
+% for possible banner
+/fileinfo {pop pop pop}bd
+/enddocument {end} bd
+
+% these are also used by eqn & gmf
+/ld{load def}bd
+/x/exch ld
+/cu{300 mul 72 div}bd
+/m/moveto ld
+/t/translate ld
+/rm/rmoveto ld
+/cp/currentpoint ld
+/st/stroke ld
+/ln/lineto ld
+/rlt/rlineto ld
+/slw/setlinewidth ld
+
+/ff/findfont ld
+/scf/scalefont ld
+/sf/setfont ld
+/fs{x /pt x def ff pt cu scf sf}bd
+
+% linedraw
+/li{4 2 roll setlinewidth 3 1 roll moveto 0.0 rlineto st}bd
+
+% outline factor
+/olwid 40.0 def
+% stroke width for outline
+/uoslw {pt cu x div slw}bd
+% relative horizontal move
+/xm{x currentpoint pop sub 0.0 rmoveto}bd
+
+% The basic show
+/s/show ld
+% move horizontal and show
+/ms{xm s}bd
+
+% variations
+% outline show - first printer attribute
+/ppss{dup cp 3 -1 roll false charpath st
+x 3 -1 roll stringwidth pop add x moveto}bd
+/pss{olwid uoslw { ( ) dup 0 4 -1 roll put ppss}forall}bd
+/ps{pss}bd
+/mps{xm ps}bd
+
+% graybox show - second printer attribute
+/gb{cp 3 -1 roll pt cu dup 4 div neg 0 x rm dup 0 x rlt x 0 rlt
+neg 0 x rlt closepath currentgray .9 setgray fill setgray m}bd
+/usi{dup stringwidth pop gb}bd
+/us{usi s}bd
+/xum{x cp pop sub dup gb 0 rmoveto}bd
+
+% combinations of PD1 and PD2
+/ups{usi pss}bd
+/mups{xm ups}bd
+/mus{xm us}bd
+
+% define a new encoding vector (code page 850 based)
+/PC 256 array def
+StandardEncoding PC copy pop
+
+/dotaccent/bullet
+/quotesingle/quotedblleft/quotedblright/quotesinglbase
+/quotedblbase/guilsinglleft/guilsinglright/.notdef
+/ellipsis/perthousand/.notdef/.notdef/paragraph/section/dagger/daggerdbl
+/OE/oe/fi/fl/endash/emdash/fraction/Ydieresis
+PC 6 26 getinterval astore pop
+
+/Ccedilla/udieresis/eacute/acircumflex/adieresis/agrave/aring/ccedilla
+/ecircumflex/edieresis/egrave/idieresis/icircumflex/igrave/Adieresis/Aring
+/Eacute/ae/AE/ocircumflex/odieresis/ograve/ucircumflex/ugrave
+/ydieresis/Odieresis/Udieresis/oslash/sterling/Oslash/.notdef/florin
+/aacute/iacute/oacute/uacute/ntilde/Ntilde/ordfeminine/ordmasculine
+/questiondown/.notdef/.notdef/onehalf/onequarter/exclamdown/guillemotleft/guillemotright
+/.notdef/.notdef/.notdef/.notdef/.notdef/Aacute/Acircumflex/Agrave
+/.notdef/.notdef/.notdef/.notdef/.notdef/cent/yen/.notdef
+/.notdef/grave/.notdef/circumflex/tilde/.notdef/atilde/Atilde
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/currency
+/eth/Eth/Ecircumflex/Edieresis/Egrave/dotlessi/Iacute/Icircumflex
+/Idieresis/.notdef/.notdef/.notdef/.notdef/brokenbar/Igrave/.notdef
+/Oacute/germandbls/Ocircumflex/Ograve/otilde/Otilde/.notdef/thorn
+/Thorn/Uacute/Ucircumflex/Ugrave/yacute/Yacute/.notdef/acute
+/.notdef/.notdef/.notdef/threequarters/paragraph/section/.notdef/cedilla
+/ring/dieresis/periodcentered/onesuperior/threesuperior/twosuperior/.notdef/.notdef
+
+PC 128 128 getinterval astore pop
+
+% duplicate fonts with a new encoding vector
+/recd 5 dict def
+/pcft
+{recd begin
+/ncs PC def /nfn x def
+/bfn x def /bfd bfn findfont def
+/nf bfd maxlength dict def
+bfd{x dup dup /FID ne x /Encoding ne and
+{x nf 3 1 roll put}{pop pop}ifelse
+}forall
+nf/FontName nfn put
+nf/Encoding ncs put
+nfn nf definefont pop
+end}bd
+
+/fs{x /pt x def ff pt cu scf sf}bd
+
+% used by eqn
+/Times-Roman/TR pcft /Times-Bold/TRB pcft
+/Times-Italic/TRI pcft /Times-BoldItalic/TRBI pcft
+/Helvetica/HV pcft /Helvetica-Bold/HVB pcft
+/Helvetica-Oblique/HVO pcft /Helvetica-BoldOblique/HVBO pcft
+/Courier/CR pcft /Courier-Bold/CRB pcft
+/Sym{/Symbol fs}bd
+
+% Bit map image data decompression code
+/xx 0 def /yy 0 def
+/xbytes 0 def
+/lbuf 1200 string def /obuf 600 string def
+/bval <FFFEFCF8F0E0C080000103070F1F3F7F> def
+/blacks 96 string def /whites 96 string def
+0 1 95 {whites x 255 put} for
+
+/dispatch [
+{
+dup 47 le {32 sub 4 bitshift x pop 1}{
+dup 63 le {x pop 48 sub bval x get
+3 copy put x 1 add x 0} {
+dup 79 le {62 sub} {
+80 sub { 3 copy put x 1 add x } repeat 0
+}ifelse }ifelse }ifelse
+}bind
+{
+32 sub add
+3 copy put
+x 1 add x 0
+} bind
+{
+32 sub x pop add 255 0
+}bind
+{
+32 sub x pop
+3 copy getinterval
+whites 0 3 index getinterval
+x copy pop add 255 0
+}bind
+{
+32 sub x pop
+3 copy getinterval
+blacks 0 3 index getinterval
+x copy pop add 0 0
+}bind
+]def
+
+% read a raster line and unpack
+/readx{
+obuf 0 255 0
+currentfile lbuf readline pop
+{x dispatch x get exec} forall
+pop pop pop 0 xbytes getinterval}bd
+
+/mspic{
+/yy x def/xx x def
+/xbytes xx 8 idiv def
+xx yy 1 [xx 0 0 0 yy sub 0 yy]{readx}image}bd
+
+
+
+/Helvetica/fA pcft/FA{/fA fs}bd
+/Helvetica-Oblique/fAI pcft/FAI{/fAI fs}bd
+/Helvetica-Bold/fAB pcft/FAB{/fAB fs}bd
+/Helvetica-BoldOblique/fAIB pcft/FAIB{/fAIB fs}bd
+/Times-Roman/fB pcft/FB{/fB fs}bd
+/Times-Italic/fBI pcft/FBI{/fBI fs}bd
+/Times-Bold/fBB pcft/FBB{/fBB fs}bd
+/Times-BoldItalic/fBIB pcft/FBIB{/fBIB fs}bd
+/Courier/fQ pcft/FQ{/fQ fs}bd
+/Courier-Oblique/fQI pcft/FQI{/fQI fs}bd
+/Courier-Bold/fQB pcft/FQB{/fQB fs}bd
+/Courier-BoldOblique/fQIB pcft/FQIB{/fQIB fs}bd
+(F:\\LPT\\VMS\\READ_ME.DOC)(Eric W. van Ammers)(November 17, 1993)fileinfo
+%%EndProlog
+%%Page: 0 1
+begpage
+18 FAB
+808 2938 m
+(READ_ME for CLIP/VMS)s
+12 FAB
+295 2588 m
+(1 Directory CLIP/VMS)s
+12 FB
+295 2517 m
+(The)s
+385(directory)ms
+578(contains)ms
+757(the)ms
+831(files)ms
+389 2457 m
+(a.)s
+484(READ_ME.PS,)ms
+813(READ_ME.TXT)ms
+1172(\(this)ms
+1273(file\).)ms
+389 2397 m
+(b.)s
+484(CLIP_1.EXE,)ms
+777(CLIP_2.EXE,)ms
+1070(CLIP_MSG.DAT)ms
+1440(\(CLiP)ms
+1574(system\).)ms
+389 2337 m
+(c.)s
+484(USE_CLIP.COM,)ms
+925(CL.COM,)ms
+1201(CLP.COM,)ms
+1505(CLP_ENV.COM,)ms
+1937(CLIP.COM,)ms
+484 2277 m
+(CLIP_1.COM)s
+781(\(user)ms
+894(support\).)ms
+389 2217 m
+(d.)s
+484(EX01_A.PS,)ms
+755(EX01_A.ASC,)ms
+1067(EX01_A.INI,)ms
+1352(EX01_A.PAS,)ms
+484 2157 m
+(EX01_B.PS,)s
+752(EX01_B.ASC,)ms
+1061(EX01_B.INI,)ms
+1343(EX01_B.PAS)ms
+1635(\(example\).)ms
+389 2097 m
+(e.)s
+484(ADA.INI,)ms
+698(C.INI,)ms
+838(FORTRAN.INI,)ms
+1177(LISP.INI,)ms
+1385(MODULA.INI,)ms
+1711(PASCAL.INI)ms
+1996(\(template)ms
+484 2037 m
+(INI-files)s
+669(for)ms
+740(some)ms
+858(languages\).)ms
+389 1977 m
+(f.)s
+484(MANUAL.PS,)ms
+796(MANUAL.TXT)ms
+1138(\(manual\).)ms
+295 1917 m
+(File)s
+385(extensions:)ms
+389 1857 m
+(PS-files)s
+561(are)ms
+636(postscript)ms
+844(files)ms
+945(and)ms
+1031(represent)ms
+1228(the)ms
+1303(type-set)ms
+1476(versions)ms
+1656(of)ms
+1712(the)ms
+1787(corresponding)ms
+2087(ASC)ms
+389 1797 m
+(or)s
+443(TXT-files.)ms
+389 1737 m
+(ASC-files)s
+600(are)ms
+673(derived)ms
+835(by)ms
+896(ASCII-export)ms
+1183(from)ms
+1292(the)ms
+1365(original)ms
+1532(word-processor)ms
+1855(files)ms
+1953(\(in)ms
+2020(our)ms
+2098(case)ms
+389 1677 m
+(Lotus)s
+515(Manuscript\).)ms
+389 1617 m
+(TXT-files)s
+601(are)ms
+674(ASCII)ms
+816(versions)ms
+995(of)ms
+1049(the)ms
+1122(corresponding)ms
+1420(PS-files.)ms
+1603(They)ms
+1718(are)ms
+1791(slightly)ms
+1953(modified)ms
+2146(to)ms
+389 1557 m
+(improve)s
+574(the)ms
+655(lay-out.)ms
+828(TXT-files)ms
+1048(are)ms
+1128(a)ms
+1169(service)ms
+1330(for)ms
+1408(people)ms
+1561(who)ms
+1666(have)ms
+1780(no)ms
+1849(easy)ms
+1957(access)ms
+2104(to)ms
+2162(a)ms
+389 1497 m
+(postscript)s
+595(printer.)ms
+12 FAB
+295 1368 m
+(2 Installing CLiP)s
+12 FB
+389 1297 m
+(a.)s
+484(Use)ms
+581(FTP)ms
+687(to)ms
+745(copy)ms
+862(the)ms
+943(CLiP)ms
+1068(system)ms
+1226(to)ms
+1284(your)ms
+1396(local)ms
+1512(site.)ms
+1614(Note)ms
+1730(that)ms
+1825(CLIP_1.EXE)ms
+2112(and)ms
+484 1237 m
+(CLIP_2.EXE)s
+765(should)ms
+911(be)ms
+970(FTP-ed)ms
+1133(in)ms
+1184(binary)ms
+1324(mode.)ms
+389 1177 m
+(b.)s
+484(Create)ms
+641(a)ms
+690(directory)ms
+897(for)ms
+982(the)ms
+1069(CLiP-system.)ms
+1370(This)ms
+1485(directory)ms
+1692(will)ms
+1797(be)ms
+1870(referred)ms
+2055(as)ms
+2123(the)ms
+484 1117 m
+(CLIP_DIR.)s
+728(Let)ms
+808(us)ms
+865(assume)ms
+1024(the)ms
+1098(name)ms
+1219(of)ms
+1273(this)ms
+1358(directory)ms
+1551(to)ms
+1602(be)ms
+578 1057 m
+([USERNAME.CLIP])s
+389 997 m
+(c.)s
+484(Copy)ms
+605(to)ms
+656(your)ms
+761(CLIP_DIR)ms
+993(the)ms
+1066(files)ms
+578 937 m
+(CLIP_1.EXE,)s
+871(CLIP_2.EXE,)ms
+1164(CLIP_MSG.DAT,)ms
+578 877 m
+(USE_CLIP.COM,)s
+957(CL.COM,)ms
+1172(CLP.COM,)ms
+1415(CLP_ENV.COM)ms
+1773(and)ms
+1858(CLIP.COM)ms
+389 817 m
+(d.)s
+484(Adjust)ms
+629(the)ms
+702(procedure)ms
+913(USE_CLIP.COM)ms
+1279(to)ms
+1330(reflect)ms
+1469(the)ms
+1542(actual)ms
+1673(CLIP_DIR)ms
+1904(you)ms
+1991(are)ms
+2064(using.)ms
+484 757 m
+(This)s
+588(means)ms
+732(you)ms
+822(have)ms
+932(to)ms
+987(replace)ms
+1146(the)ms
+1223(string)ms
+1353("[USERNAME.CLIP]")ms
+1838(with)ms
+1942(a)ms
+1980(string)ms
+2110(that)ms
+484 697 m
+(reflects)s
+644(you)ms
+731(actual)ms
+863(CLiP)ms
+981(directory.)ms
+389 637 m
+(e.)s
+484(Make)ms
+614(the)ms
+690(commands)ms
+922(CL,)ms
+1014(CLP,)ms
+1134(CLIP,)ms
+1271(CLP_ENV)ms
+1506(and)ms
+1593(CLIP_1)ms
+1767(available)ms
+1963(by)ms
+2029(running)ms
+484 577 m
+(the)s
+555(procedure)ms
+765(USE_CLIP.COM.)ms
+1141(If)ms
+1184(you)ms
+1268(want)ms
+1375(to)ms
+1424(have)ms
+1528(CLiP)ms
+1643(available)ms
+1833(immediately)ms
+2093(after)ms
+484 517 m
+(login,)s
+612(add)ms
+697(the)ms
+770(line)ms
+578 457 m
+(@[USERNAME.CLIP]USE_CLIP)s
+484 397 m
+(to)s
+535(your)ms
+639(LOGIN.COM.)ms
+8 FB
+295 145 m
+(READ_ME)s
+460(for)ms
+507(CLIP/VMS)ms
+670(\(READ_ME.DOC/2.104/November 17, 1993\))ms
+12 FB
+2100 145 m
+(1)s
+50 2 2130 157 li
+50 2 2045 157 li
+endpage
+%%Page: 1 2
+begpage
+12 FAB
+295 3136 m
+(3 A quick installation test)s
+12 FB
+295 3064 m
+(To)s
+363(have)ms
+470(a)ms
+505(partial)ms
+645(test)ms
+727(\(it)ms
+785(does)ms
+889(not)ms
+966(check)ms
+1095(CLIP_1\))ms
+1283(to)ms
+1334(see)ms
+1411(if)ms
+1454(your)ms
+1559(CLiP)ms
+1677(system)ms
+1829(has)ms
+1908(been)ms
+2015(properly)ms
+295 3004 m
+(installed,)s
+489(perform)ms
+663(the)ms
+736(following)ms
+943(steps:)ms
+389 2944 m
+(a.)s
+484(Choose)ms
+649(a)ms
+686(test)ms
+771(directory)ms
+966(and)ms
+1054(make)ms
+1177(it)ms
+1220(current.)ms
+1389(Let)ms
+1471(us)ms
+1530(assume)ms
+1692(this)ms
+1779(directory)ms
+1975(is)ms
+2023([USER-)ms
+484 2884 m
+(NAME.TEST].)s
+389 2824 m
+(b.)s
+484(Copy)ms
+643(the)ms
+756(files)ms
+893(EX01_A.ASC,)ms
+1244(EX01_B.ASC,)ms
+1592(EX01_A.INI,)ms
+1915(EX01_B.INI,)ms
+484 2764 m
+(EX01_A.PAS)s
+778(and)ms
+863(EX01_B.PAS)ms
+1155(to)ms
+1206(your)ms
+1310(test)ms
+1392(directory.)ms
+389 2704 m
+(c.)s
+484(Type)ms
+599(the)ms
+673(command)ms
+578 2644 m
+($CL)s
+679(EX01_A.INI)ms
+484 2584 m
+(to)s
+535(produce)ms
+710(the)ms
+784(file)ms
+863(PALINDROME.PAS.)ms
+1321(Note)ms
+1431(that)ms
+1519(EX01_A.INI)ms
+1792(specifies)ms
+1980(the)ms
+2054(source)ms
+484 2524 m
+(files)s
+582(as)ms
+636(well)ms
+735(the)ms
+808(target)ms
+935(modules)ms
+1117(to)ms
+1168(be)ms
+1228(in)ms
+1279(the)ms
+1353(current)ms
+1507(directory.)ms
+389 2464 m
+(d.)s
+484(Compare)ms
+678(the)ms
+750(file)ms
+828(PALINDROME.PAS)ms
+1271(with)ms
+1370(EX01_A.PAS)ms
+1663(by)ms
+1724(means)ms
+1863(of)ms
+1915(the)ms
+1987(command)ms
+578 2404 m
+($DIFF)s
+736(PALINDROME.PAS)ms
+1193(EX01_A.PAS)ms
+484 2344 m
+(There)s
+613(should)ms
+758(be)ms
+818(no)ms
+881(differences.)ms
+389 2284 m
+(e.)s
+484(Now)ms
+594(type)ms
+693(the)ms
+766(command)ms
+578 2224 m
+($CL)s
+679(EX01_B.INI)ms
+484 2164 m
+(to)s
+535(produce)ms
+708(a)ms
+743(new)ms
+839(file)ms
+918(PALINDROME.PAS.)ms
+389 2104 m
+(f.)s
+484(Compare)ms
+679(the)ms
+753(new)ms
+849(PALINDROME.PAS)ms
+1293(with)ms
+1395(EX01_B.PAS)ms
+578 2044 m
+($DIFF)s
+736(PALINDROME.PAS)ms
+1193(EX01_B.PAS)ms
+484 1984 m
+(Again)s
+618(there)ms
+731(should)ms
+877(be)ms
+936(no)ms
+999(differences.)ms
+12 FAB
+295 1856 m
+(4 What you should know)s
+12 FB
+295 1784 m
+(The)s
+385(complete)ms
+581(system)ms
+732(executes)ms
+917(in)ms
+968(two)ms
+1056(passes.)ms
+389 1724 m
+(The)s
+482(second)ms
+637(pass,)ms
+751(CLIP_2.EXE,)ms
+1047(performs)ms
+1243(the)ms
+1320(actual)ms
+1455(module)ms
+1621(extraction.)ms
+1849(It)ms
+1896(is)ms
+1945(guided)ms
+2097(by)ms
+2162(a)ms
+295 1664 m
+(file,)s
+386(CLIP.INI,)ms
+602(which)ms
+737(tells)ms
+833(it)ms
+873(literally)ms
+1041(everything)ms
+1268(it)ms
+1308(has)ms
+1388(to)ms
+1439(know)ms
+1563(in)ms
+1614(order)ms
+1733(to)ms
+1784(perform)ms
+1958(a)ms
+1993(run.)ms
+2085(Thus)ms
+295 1604 m
+(CLIP.INI)s
+497(specifies)ms
+685(to)ms
+736(CLIP_2.EXE:)ms
+389 1544 m
+(-)s
+484(the)ms
+558(files)ms
+656(it)ms
+697(has)ms
+776(to)ms
+827(read)ms
+926(\(i.e.)ms
+1016(the)ms
+1090(source)ms
+1233(files\),)ms
+389 1484 m
+(-)s
+484(the)ms
+558(modules)ms
+740(it)ms
+780(should)ms
+926(extract)ms
+1074(\(i.e.)ms
+1165(target)ms
+1291(modules\),)ms
+389 1424 m
+(-)s
+484(the)ms
+558(report)ms
+690(file,)ms
+389 1364 m
+(-)s
+484(the)ms
+561(syntax)ms
+708(of)ms
+765(the)ms
+842(CLiP-lines)ms
+1075(\(i.e.)ms
+1168(the)ms
+1245(lines)ms
+1355(which)ms
+1493(trigger)ms
+1643(the)ms
+1720(module)ms
+1885(extraction)ms
+2101(pro-)ms
+484 1304 m
+(cess\).)s
+295 1244 m
+(CLIP.INI)s
+496(is)ms
+541(a)ms
+574(straight)ms
+735(forward)ms
+905(ASCII-file.)ms
+1142(Its)ms
+1203(fairly)ms
+1323(simple)ms
+1467(structure)ms
+1654(is)ms
+1698(explained)ms
+1904(in)ms
+1954(section)ms
+2107(6)ms
+2143(of)ms
+295 1184 m
+(the)s
+368(manual.)ms
+389 1124 m
+(The)s
+477(responsibility)ms
+759(of)ms
+812(the)ms
+883(first)ms
+974(pass)ms
+1071(of)ms
+1123(the)ms
+1195(CLiP-system,)ms
+1479(CLIP_1.EXE,)ms
+1770(is)ms
+1814(purely)ms
+1952(to)ms
+2001(construct)ms
+295 1064 m
+(an)s
+355(appropriate)ms
+597(INI-file)ms
+763(for)ms
+835(the)ms
+909(task)ms
+1003(you)ms
+1092(want)ms
+1203(CLIP_2)ms
+1375(to)ms
+1427(perform.)ms
+1614(More)ms
+1736(often)ms
+1852(than)ms
+1952(not)ms
+2029(the)ms
+2104(first)ms
+295 1004 m
+(pass)s
+393(can)ms
+475(be)ms
+535(short-cut)ms
+725(and)ms
+810(several)ms
+964(batch)ms
+1085(files)ms
+1183(are)ms
+1257(supplied)ms
+1439(for)ms
+1509(this)ms
+1594(reason)ms
+1737(\(see)ms
+1830(section)ms
+1984(5\).)ms
+12 FAB
+295 876 m
+(5 Using CLiP ...)s
+12 FB
+295 804 m
+(The)s
+385(batch)ms
+505(procedures)ms
+737(below)ms
+871(are)ms
+945(designed)ms
+1135(to)ms
+1186(make)ms
+1307(your)ms
+1410(working)ms
+1589(directories)ms
+1813(independent)ms
+2069(of)ms
+2123(the)ms
+295 744 m
+(CLIP_DIR.)s
+542(Remark)ms
+716(that)ms
+807(the)ms
+884(original)ms
+1055(batch)ms
+1180(files)ms
+1281(assume)ms
+1444(that)ms
+1535(your)ms
+1643(CLIP_DIR)ms
+1878(is)ms
+1927(the)ms
+2004(directory)ms
+295 684 m
+([USERNAME.CLIP].)s
+10 FAB
+295 587 m
+(5.1 ... via CLIP.COM)s
+12 FB
+295 522 m
+(CLIP.COM)s
+541(performs)ms
+733(the)ms
+805(complete)ms
+1000(cycle)ms
+1117(to)ms
+1167(define)ms
+1303(and)ms
+1387(execute)ms
+1551(a)ms
+1584(run)ms
+1663(of)ms
+1716(CLiP.)ms
+1845(Thus)ms
+1956(both)ms
+2057(passes)ms
+295 462 m
+(of)s
+348(CLiP)ms
+465(are)ms
+537(executed)ms
+726(by)ms
+788(this)ms
+871(command.)ms
+1093(Probably)ms
+1285(you)ms
+1371(will)ms
+1460(not)ms
+1536(experience)ms
+1764(the)ms
+1836(first)ms
+1928(pass)ms
+2026(of)ms
+2079(CLiP)ms
+295 402 m
+(as)s
+350(particularly)ms
+594(user-friendly.)ms
+878(But)ms
+964(once)ms
+1072(you)ms
+1160(are)ms
+1235(familiar)ms
+1406(with)ms
+1509(its)ms
+1570(oddities)ms
+1741(it)ms
+1783(works)ms
+1918(fairly)ms
+2040(accept-)ms
+295 342 m
+(able.)s
+403(Below)ms
+546(you)ms
+633(find)ms
+726(some)ms
+844(hints)ms
+954(to)ms
+1006(make)ms
+1126(it)ms
+1167(work)ms
+1282(for)ms
+1353(you.)ms
+8 FB
+295 145 m
+(READ_ME)s
+460(for)ms
+507(CLIP/VMS)ms
+670(\(READ_ME.DOC/2.104/November 17, 1993\))ms
+12 FB
+2100 145 m
+(2)s
+50 2 2130 157 li
+50 2 2045 157 li
+endpage
+%%Page: 2 3
+begpage
+12 FB
+295 3139 m
+(Main)s
+413(menu)ms
+484 3079 m
+(The)s
+575(main)ms
+690(menu)ms
+815(presents)ms
+993(8)ms
+1032(options.)ms
+1206(Option)ms
+1359(1)ms
+1398(and)ms
+1485(8)ms
+1524(need)ms
+1632(no)ms
+1697(further)ms
+1847(explanation.)ms
+2107(The)ms
+484 3019 m
+(remaining)s
+699(options)ms
+859(are)ms
+932(described)ms
+1136(below.)ms
+295 2959 m
+(Option)s
+446(2:)ms
+497(Choose)ms
+660(an)ms
+720(initialization)ms
+985(file)ms
+484 2899 m
+(An)s
+559(INI-file)ms
+725(is)ms
+773(either)ms
+901(build)ms
+1018(from)ms
+1129(scratch,)ms
+1297(or)ms
+1353(it)ms
+1395(is)ms
+1442(a)ms
+1478(modification)ms
+1748(of)ms
+1804(an)ms
+1865(already)ms
+2026(existing)ms
+484 2839 m
+(INI-file.)s
+662(Most)ms
+779(likely)ms
+906(you)ms
+995(modify)ms
+1153(the)ms
+1228(INI-file)ms
+1394(of)ms
+1450(the)ms
+1525(last)ms
+1608(CLiP)ms
+1727(run)ms
+1807(you)ms
+1896(have)ms
+2004(made)ms
+2126(\(4\))ms
+484 2779 m
+(or)s
+538(you)ms
+625(start)ms
+724(all)ms
+786(over)ms
+888(\(2\).)ms
+295 2719 m
+(Option)s
+446(3:)ms
+497(Set)ms
+574(run)ms
+653(characteristics)ms
+484 2659 m
+(This)s
+588(option)ms
+732(refers)ms
+862(mainly)ms
+1017(to)ms
+1072(future)ms
+1207(ideas)ms
+1326(to)ms
+1380(implement)ms
+1610(in)ms
+1665(CLiP)ms
+1787(and)ms
+1875(it)ms
+1919(doesn't)ms
+2082(work)ms
+484 2599 m
+(properly.)s
+679(You)ms
+779(can)ms
+863(safely)ms
+996(skip)ms
+1093(this)ms
+1179(option)ms
+1321(in)ms
+1374(which)ms
+1510(case)ms
+1610(messages)ms
+1812(will)ms
+1904(be)ms
+1965(send)ms
+2071(to)ms
+2123(the)ms
+484 2539 m
+(display)s
+640(as)ms
+695(well)ms
+793(as)ms
+847(to)ms
+899(the)ms
+972(file)ms
+1052(CLIP.RPT.)ms
+295 2479 m
+(Option)s
+446(4:)ms
+497(Set)ms
+574(list)ms
+647(of)ms
+702(source)ms
+845(files)ms
+484 2419 m
+(You)s
+582(can)ms
+664(specify)ms
+821(the)ms
+894(source)ms
+1037(files)ms
+1136(CLiP)ms
+1254(has)ms
+1333(to)ms
+1384(scan)ms
+1485(by)ms
+1548(adding)ms
+1696(\(1\))ms
+1767(file)ms
+1846(names)ms
+1986(to)ms
+2037(the)ms
+2111(list,)ms
+484 2359 m
+(deleting)s
+657(\(2\))ms
+729(file)ms
+808(names)ms
+949(from)ms
+1059(the)ms
+1133(list)ms
+1207(or)ms
+1261(changing)ms
+1457(\(3\))ms
+1528(the)ms
+1602(order)ms
+1721(of)ms
+1775(the)ms
+1849(list.)ms
+1936(Don't)ms
+2065(forget)ms
+484 2299 m
+(to)s
+535(specify)ms
+692(directories)ms
+915(if)ms
+958(the)ms
+1032(files)ms
+1131(are)ms
+1204(not)ms
+1281(in)ms
+1332(the)ms
+1406(current)ms
+1560(directory.)ms
+295 2239 m
+(Option)s
+446(5:)ms
+497(Specify)ms
+663(extraction)ms
+875(of)ms
+929(modules)ms
+484 2179 m
+(By)s
+555(default)ms
+706(the)ms
+780(system)ms
+932(assumes)ms
+1111(you)ms
+1199(want)ms
+1309(to)ms
+1361(extract)ms
+1509(all)ms
+1572(modules.)ms
+1767(If)ms
+1813(not)ms
+1890(you)ms
+1977(take)ms
+2073(menu)ms
+484 2119 m
+(item)s
+589(1)ms
+630(to)ms
+685(get)ms
+763(into)ms
+857(a)ms
+896(submenu)ms
+1093(with)ms
+1198(three)ms
+1314(choices.)ms
+1493(Choice 3)ms
+1689(lets)ms
+1775(you)ms
+1866(specify)ms
+2027(a)ms
+2065(list)ms
+2143(of)ms
+484 2059 m
+(modules)s
+662(which)ms
+794(by)ms
+854(choice 2)ms
+1031(can)ms
+1110(be)ms
+1167(made)ms
+1285(to)ms
+1333(be)ms
+1390(either)ms
+1513(extracted)ms
+1706(or)ms
+1757(suppressed)ms
+1986(\(omitted\).)ms
+484 1999 m
+(Don't)s
+613(include)ms
+772(directories)ms
+996(with)ms
+1097(the)ms
+1171(specification)ms
+1439(of)ms
+1493(these)ms
+1608(modules.)ms
+295 1939 m
+(Option)s
+446(6:)ms
+497(Save)ms
+607(resulting)ms
+795(initialization)ms
+1060(file)ms
+484 1879 m
+(To)s
+553(save)ms
+656(the)ms
+731(run)ms
+811(specification)ms
+1081(into)ms
+1172(a)ms
+1208(file,)ms
+1301(use)ms
+1382(option)ms
+1524(6.)ms
+1575(It)ms
+1619(give)ms
+1719(you)ms
+1808(2)ms
+1847(menu)ms
+1972(items.)ms
+2107(The)ms
+484 1819 m
+(first)s
+577(specifies)ms
+766(a)ms
+801(name)ms
+923(for)ms
+994(the)ms
+1069(file)ms
+1149(\(default)ms
+1317(CLIP.INI\))ms
+1538(and)ms
+1623(the)ms
+1698(second)ms
+1850(actually)ms
+2021(save)ms
+2123(the)ms
+484 1759 m
+(run)s
+563(specification)ms
+831(into)ms
+921(that)ms
+1008(file.)ms
+295 1699 m
+(Option)s
+446(7:)ms
+497(Change)ms
+663(syntax)ms
+484 1639 m
+(This)s
+593(option)ms
+742(allows)ms
+893(you)ms
+989(to)ms
+1048(adjust)ms
+1188(the)ms
+1270(syntax)ms
+1421(recognized)ms
+1661(by)ms
+1732(CLiP.)ms
+1871(Make)ms
+2005(sure)ms
+2109(you)ms
+484 1579 m
+(understand)s
+728(sufficiently)ms
+980(about)ms
+1116(the)ms
+1202(operation)ms
+1416(of)ms
+1482(CLiP)ms
+1613(before)ms
+1765(fooling)ms
+1935(around)ms
+2098(here)ms
+484 1519 m
+([Ammers)s
+686(1993].)ms
+828(If)ms
+874(not)ms
+951(there)ms
+1065(is)ms
+1111(a)ms
+1147(fair)ms
+1229(change)ms
+1384(you)ms
+1472(end)ms
+1557(up)ms
+1621(with)ms
+1723(a)ms
+1758(syntax)ms
+1902(definition)ms
+2110(that)ms
+484 1459 m
+(is)s
+530(not)ms
+608(consistent)ms
+821(with)ms
+924(your)ms
+1029(source)ms
+1173(files)ms
+1273(\(there)ms
+1403(is)ms
+1450(danger)ms
+1600(though)ms
+1752(of)ms
+1807(destruction)ms
+2043(of)ms
+2098(files)ms
+484 1399 m
+(or)s
+538(the)ms
+611(like\).)ms
+295 1339 m
+(Note)s
+401(that)ms
+485(if)ms
+525(you)ms
+609(don't)ms
+724(save)ms
+822(explicitly)ms
+1020(through)ms
+1185(option 6,)ms
+1372(you)ms
+1457(simply)ms
+1602(quit)ms
+1689(the)ms
+1760(session)ms
+1913(and)ms
+1995(you)ms
+2079(loose)ms
+295 1279 m
+(the)s
+368(information)ms
+617(you)ms
+704(have)ms
+811(specified.)ms
+10 FAB
+295 1182 m
+(5.2 ... via CLP.COM and CLP_ENV.COM)s
+12 FB
+295 1117 m
+(This)s
+396(procedure)ms
+609(can)ms
+691(be)ms
+751(used)ms
+855(in)ms
+907(a)ms
+942(situation)ms
+1127(where)ms
+1262(on)ms
+1324(wants)ms
+1454(to)ms
+1505(extract)ms
+1654(all)ms
+1717(the)ms
+1791(modules)ms
+1973(from)ms
+2083(up)ms
+2146(to)ms
+295 1057 m
+(eight)s
+406(source)ms
+548(files.)ms
+658(The)ms
+748(source)ms
+890(files)ms
+988(are)ms
+1060(passed)ms
+1205(as)ms
+1259(parameters.)ms
+1502(CLP.COM)ms
+1732(creates)ms
+1882(a)ms
+1916(CLIP.INI)ms
+2118(file)ms
+295 997 m
+(and)s
+379(starts)ms
+497(the)ms
+571(CLIP_2)ms
+742(program)ms
+924(afterwards.)ms
+389 937 m
+(All)s
+464(setting)ms
+608(are)ms
+681(assumed)ms
+864(by)ms
+926(the)ms
+998(batch)ms
+1118(procedure.)ms
+1342(Originally)ms
+1558(it)ms
+1598(is)ms
+1642(tailored)ms
+1806(to)ms
+1857(Pascal)ms
+1996(programs)ms
+295 877 m
+(of)s
+350(the)ms
+425(sort)ms
+514(displayed)ms
+720(in)ms
+773(the)ms
+848(example)ms
+1031(EX01)ms
+1162(\(i.e.)ms
+1253(the)ms
+1329(files)ms
+1429(EX01_?.*\))ms
+1661(on)ms
+1725(the)ms
+1800(directory)ms
+1994(CLIP.)ms
+2129(To)ms
+295 817 m
+(adjust)s
+426(CLP.COM)ms
+656(one)ms
+740(should)ms
+885(sufficiently)ms
+1125(understand)ms
+1356(the)ms
+1429(syntax)ms
+1572(of)ms
+1625(CLiP)ms
+1743([Ammers)ms
+1943(1993].)ms
+2084(Only)ms
+295 757 m
+(modify)s
+451(the)ms
+525(lines)ms
+632(of)ms
+686(CLP.COM)ms
+917(as)ms
+971(follows)ms
+389 697 m
+(line)s
+476(15:)ms
+552(Replace)ms
+726("\(*")ms
+896(with)ms
+997(the)ms
+1071(COMM-START)ms
+1417(of)ms
+1471(your)ms
+1575(choice.)ms
+389 637 m
+(line)s
+476(16:)ms
+552(Replace)ms
+726("*\)")ms
+896(with)ms
+997(the)ms
+1071(COMM-END)ms
+1361(of)ms
+1415(your)ms
+1519(choice.)ms
+389 577 m
+(line)s
+476(17:)ms
+552(Replace)ms
+726("*")ms
+892(with)ms
+993(the)ms
+1067(CLIP-CHAR)ms
+1343(of)ms
+1397(your)ms
+1501(choice.)ms
+389 517 m
+(line)s
+476(18:)ms
+552(Replace)ms
+726("ENDOF")ms
+983(with)ms
+1085(the)ms
+1158(END-STRING)ms
+1471(of)ms
+1525(your)ms
+1629(choice.)ms
+389 457 m
+(line)s
+476(19:)ms
+552(Replace)ms
+726("#")ms
+892(with)ms
+993(the)ms
+1067(OPTION-MARKER)ms
+1493(of)ms
+1547(your)ms
+1651(choice.)ms
+389 397 m
+(line)s
+476(22:)ms
+552(Replace)ms
+726("CLIP.RPT")ms
+992(with)ms
+1093(the)ms
+1167(report)ms
+1299(file)ms
+1378(name)ms
+1499(of)ms
+1553(your)ms
+1657(choice.)ms
+8 FB
+295 145 m
+(READ_ME)s
+460(for)ms
+507(CLIP/VMS)ms
+670(\(READ_ME.DOC/2.104/November 17, 1993\))ms
+12 FB
+2100 145 m
+(3)s
+50 2 2130 157 li
+50 2 2045 157 li
+endpage
+%%Page: 3 4
+begpage
+12 FB
+295 3139 m
+(Note)s
+412(that)ms
+508(the)ms
+590(characters)ms
+813("a"-"z",)ms
+989("A"-"Z",)ms
+1187("0"-"9")ms
+1356(and)ms
+1449(".")ms
+1523(do)ms
+1594(not)ms
+1678(qualify)ms
+1841(as)ms
+1903(characters)ms
+2126(for)ms
+295 3079 m
+(COMM-START,)s
+649(COMM-END,)ms
+948(CLIP-CHAR)ms
+1221(or)ms
+1272(OPTION-MARKER)ms
+1695(while)ms
+1815(the)ms
+1885(END-STRING)ms
+295 3019 m
+(should)s
+440(be)ms
+500(chosen)ms
+651(from)ms
+761(letters)ms
+896(only.)ms
+389 2959 m
+(If)s
+438(you)ms
+529(are)ms
+607(not)ms
+687(sure)ms
+787(of)ms
+845(your)ms
+953(modifications,)ms
+1256(you)ms
+1348(should)ms
+1497(compare)ms
+1686(the)ms
+1763(INI-file)ms
+1932(produced)ms
+2135(by)ms
+295 2899 m
+(CLP.COM)s
+525(with)ms
+627(the)ms
+700(one)ms
+785(that)ms
+872(CLIP.COM)ms
+1120(produces)ms
+1313(from)ms
+1422(the)ms
+1496(same)ms
+1611(set)ms
+1679(of)ms
+1733(preferences.)ms
+389 2839 m
+(CLP.COM)s
+623(allows)ms
+770(you)ms
+861(to)ms
+916(identify)ms
+1088(different)ms
+1276(directories)ms
+1504(for)ms
+1578(the)ms
+1656(source)ms
+1802(files)ms
+1905(and)ms
+1993(the)ms
+2071(target)ms
+295 2779 m
+(modules.)s
+494(This)ms
+600(information)ms
+853(is)ms
+904(taken)ms
+1029(from)ms
+1144(the)ms
+1222(logicals)ms
+1395(CLIP$SRC_DIR)ms
+1751(and)ms
+1840(CLIP$TRG_DIR)ms
+295 2719 m
+(which)s
+429(should)ms
+575(be)ms
+635(set)ms
+703(using)ms
+824(CLP_ENV.COM.)ms
+1195(For)ms
+1276(example)ms
+484 2659 m
+($CLP_ENV)s
+753([USERNAME.ASC])ms
+1184([USERNAME])ms
+295 2599 m
+(defines)s
+449(the)ms
+521(subdirectory)ms
+782(ASC)ms
+890(of)ms
+942(USERNAME)ms
+1227(as)ms
+1280(source)ms
+1421(file)ms
+1498(directory)ms
+1689(while)ms
+1811(the)ms
+1882(home)ms
+2004(directory)ms
+295 2539 m
+(of)s
+349(USERNAME)ms
+636(will)ms
+726(receive)ms
+883(the)ms
+957(extracted)ms
+1153(modules.)ms
+10 FAB
+295 2442 m
+(5.3 ... via CL.COM)s
+12 FB
+295 2377 m
+(CL.COM)s
+496(is)ms
+540(the)ms
+612(fastest)ms
+751(way)ms
+845(to)ms
+894(run)ms
+972(CLiP)ms
+1088(and)ms
+1172(will)ms
+1260(probably)ms
+1449(be)ms
+1507(invoked)ms
+1679(most)ms
+1787(often.)ms
+1913(It)ms
+1955(can)ms
+2035(be)ms
+2093(used)ms
+295 2317 m
+(whenever)s
+503(an)ms
+563(INI-file)ms
+730(already)ms
+891(is)ms
+938(available.)ms
+1145(It)ms
+1189(copies)ms
+1330(the)ms
+1405(information)ms
+1655(of)ms
+1710(the)ms
+1785(specified)ms
+1979(INI-file)ms
+2146(to)ms
+295 2257 m
+(CLIP.INI)s
+497(and)ms
+582(runs)ms
+681(the)ms
+754(CLIP_2)ms
+925(program.)ms
+389 2197 m
+(The)s
+486(INI-file)ms
+658(to)ms
+717(be)ms
+783(used)ms
+895(is)ms
+948(passed)ms
+1100(as)ms
+1162(an)ms
+1228(optional)ms
+1412(parameter.)ms
+1644(If)ms
+1697(no)ms
+1766(INI-file)ms
+1939(is)ms
+1991(specified,)ms
+295 2137 m
+(CL.COM)s
+497(simply)ms
+646(assumes)ms
+825(CLIP.INI.)ms
+1040(For)ms
+1122(example)ms
+484 2077 m
+($CL)s
+585(EX01_A.INI)ms
+295 2017 m
+(will)s
+385(copy)ms
+495(the)ms
+568(file)ms
+647(EX01_A.INI)ms
+919(to)ms
+971(CLIP.INI)ms
+1174(and)ms
+1258(run)ms
+1337(CLIP_2.)ms
+1521(However)ms
+1717(the)ms
+1790(command)ms
+484 1957 m
+($CL)s
+295 1897 m
+(immediately)s
+557(runs)ms
+656(CLIP_2)ms
+826(on)ms
+889(the)ms
+963(basis)ms
+1075(of)ms
+1129(an)ms
+1189(already)ms
+1349(existing)ms
+1519(CLIP.INI)ms
+1722(file.)ms
+10 FAB
+295 1799 m
+(5.4 ... via CLIP_1.COM)s
+12 FB
+295 1734 m
+(You)s
+391(will)ms
+479(use)ms
+557(this)ms
+639(procedure)ms
+850(if)ms
+891(you)ms
+976(want)ms
+1084(to)ms
+1133(create)ms
+1263(several)ms
+1415(INI-files)ms
+1598(at)ms
+1645(once.)ms
+1762(In)ms
+1814(this)ms
+1897(case)ms
+1993(you)ms
+2079(don't)ms
+295 1674 m
+(want)s
+403(to)ms
+453(run)ms
+531(CLiP)ms
+648(after)ms
+750(you)ms
+837(have)ms
+942(finished)ms
+1114(your)ms
+1217(session.)ms
+1385(The)ms
+1474(second)ms
+1624(pass)ms
+1722(of)ms
+1775(CLiP)ms
+1891(is)ms
+1936(not)ms
+2011(invoked.)ms
+12 FAB
+295 1546 m
+(6 Specimen INI-files)s
+12 FB
+295 1474 m
+(The)s
+400(files)ms
+514(ADA.INI,)ms
+745(C.INI,)ms
+901(FORTRAN.INI,)ms
+1256(LISP.INI,)ms
+1482(MODULA.INI)ms
+1811(and)ms
+1911(PASCAL.INI)ms
+295 1414 m
+(suggest)s
+459(a)ms
+495(suitable)ms
+664(CLiP)ms
+784(syntax)ms
+929(for)ms
+1001(a)ms
+1037(start.)ms
+1150(To)ms
+1220(customize)ms
+1436(such)ms
+1542(an)ms
+1603(INI-file)ms
+1770(run)ms
+1851(the)ms
+1926(CLiP)ms
+2046(system)ms
+295 1354 m
+(through)s
+463(CLIP.BAT.)ms
+708(Then)ms
+824(load)ms
+922(the)ms
+996(proper)ms
+1139(INI-file)ms
+1304(and)ms
+1389(modify)ms
+1546(the)ms
+1619(syntax)ms
+1762(by)ms
+1825(means)ms
+1965(of)ms
+2019(option)ms
+2160(7)ms
+295 1294 m
+(\(see)s
+388(sect.)ms
+490(5.1\).)ms
+12 FAB
+295 1166 m
+(7 References)s
+12 FB
+295 1094 m
+(Ammers)s
+480(E.W.)ms
+596(van,)ms
+693(M.R.)ms
+809(Kramer)ms
+975(\(1993\),)ms
+1134(The)ms
+1225(CLiP)ms
+1343(Style)ms
+1459(of)ms
+1514(Literate)ms
+1683(Programming)ms
+1971(\(submitted)ms
+389 1034 m
+(for)s
+467(publication\).)ms
+742(Anonymously)ms
+1046(ftp-able)ms
+1222(as)ms
+1284(CLIP_STYLE.PS,)ms
+1674(CLIP_STYLE_A.PS)ms
+2112(and)ms
+389 974 m
+(CLIP_STYLE_B.PS)s
+816(from)ms
+926(directory)ms
+1119(CLIP)ms
+1240(on)ms
+1302(sun01.info.wau.nl.)ms
+8 FB
+295 145 m
+(READ_ME)s
+460(for)ms
+507(CLIP/VMS)ms
+670(\(READ_ME.DOC/2.104/November 17, 1993\))ms
+12 FB
+2100 145 m
+(4)s
+50 2 2130 157 li
+50 2 2045 157 li
+endpage
+%%Page: Contents-0 5
+begpage
+12 FAB
+1028 3136 m
+(Table of Contents)s
+12 FB
+295 3039 m
+(1 Directory CLIP/VMS )s
+796(................................................................................................)ms
+2019 3039 m
+(1)s
+295 2939 m
+(2 Installing CLiP )s
+683(.........................................................................................................)ms
+2019 2939 m
+(1)s
+295 2839 m
+(3 A quick installation test )s
+858(...........................................................................................)ms
+2019 2839 m
+(2)s
+295 2739 m
+(4 What you should know )s
+846(............................................................................................)ms
+2019 2739 m
+(2)s
+295 2639 m
+(5 Using CLiP ... )s
+658(...........................................................................................................)ms
+2019 2639 m
+(2)s
+365 2589 m
+(5.1 ... via CLIP.COM )s
+845(............................................................................................)ms
+2019 2589 m
+(2)s
+365 2539 m
+(5.2 ... via CLP.COM and CLP_ENV.COM )s
+1270(..........................................................)ms
+2019 2539 m
+(3)s
+365 2489 m
+(5.3 ... via CL.COM )s
+795(................................................................................................)ms
+2019 2489 m
+(4)s
+365 2439 m
+(5.4 ... via CLIP_1.COM )s
+882(.........................................................................................)ms
+2019 2439 m
+(4)s
+295 2339 m
+(6 Specimen INI-files )s
+746(....................................................................................................)ms
+2019 2339 m
+(4)s
+295 2239 m
+(7 References )s
+583(.................................................................................................................)ms
+2019 2239 m
+(4)s
+8 FB
+295 135 m
+(READ_ME for CLIP/VMS \(READ_ME.DOC/2.104/November 17, 1993\))s
+12 FB
+2111 135 m
+(i)s
+50 2 2130 147 li
+50 2 2056 147 li
+endpage
+%%Trailer
+enddocument
+%%Pages: 5
+%%DocumentFonts:
+%%+ Helvetica-Bold
+%%+ Times-Roman
+%%EOF
+ \ No newline at end of file
diff --git a/web/clip/vax_vms/read_me.txt b/web/clip/vax_vms/read_me.txt
new file mode 100644
index 0000000000..14d9b4de26
--- /dev/null
+++ b/web/clip/vax_vms/read_me.txt
@@ -0,0 +1,212 @@
+
+ READ_ME for CLIP/VMS
+ ********************
+
+
+1 Directory CLIP/VMS
+
+The directory contains the files
+ a. READ_ME.PS, READ_ME.TXT (this file).
+ b. CLIP_1.EXE, CLIP_2.EXE, CLIP_MSG.DAT (CLiP system).
+ c. USE_CLIP.COM, CL.COM, CLP.COM, CLP_ENV.COM, CLIP.COM, CLIP_1.COM (user
+ support).
+ d. EX01_A.PS, EX01_A.ASC, EX01_A.INI, EX01_A.PAS,
+ EX01_B.PS, EX01_B.ASC, EX01_B.INI, EX01_B.PAS (example).
+ e. ADA.INI, C.INI, FORTRAN.INI, LISP.INI, MODULA.INI, PASCAL.INI
+ (template INI-files for some languages).
+ f. MANUAL.PS, MANUAL.TXT (manual).
+File extensions:
+ PS-files are postscript files and represent the type-set versions of the
+ corresponding ASC or TXT-files.
+ ASC-files are derived by ASCII-export from the original word-processor
+ files (in our case Lotus Manuscript).
+ TXT-files are ASCII versions of the corresponding PS-files. They are
+ slightly modified to improve the lay-out. TXT-files are a service for
+ people who have no easy access to a postscript printer.
+
+2 Installing CLiP
+
+ a. Use FTP to copy the CLiP system to your local site. Note that
+ CLIP_1.EXE and CLIP_2.EXE should be FTP-ed in binary mode.
+ b. Create a directory for the CLiP-system. This directory will be
+ referred as the CLIP_DIR. Let us assume the name of this directory to
+ be
+ [USERNAME.CLIP]
+ c. Copy to your CLIP_DIR the files
+ CLIP_1.EXE, CLIP_2.EXE, CLIP_MSG.DAT,
+ USE_CLIP.COM, CL.COM, CLP.COM, CLP_ENV.COM and CLIP.COM
+ d. Adjust the procedure USE_CLIP.COM to reflect the actual CLIP_DIR you
+ are using. This means you have to replace the string "[USERNAME.CLIP]"
+ with a string that reflects you actual CLiP directory.
+ e. Make the commands CL, CLP, CLIP, CLP_ENV and CLIP_1 available by
+ running the procedure USE_CLIP.COM. If you want to have CLiP available
+ immediately after login, add the line
+ @[USERNAME.CLIP]USE_CLIP
+ to your LOGIN.COM.
+
+3 A quick installation test
+
+To have a partial test (it does not check CLIP_1) to see if your CLiP system
+has been properly installed, perform the following steps:
+ a. Choose a test directory and make it current. Let us assume this
+ directory is [USERNAME.TEST].
+ b. Copy the files EX01_A.ASC, EX01_B.ASC, EX01_A.INI, EX01_B.INI,
+ EX01_A.PAS and EX01_B.PAS to your test directory.
+ c. Type the command
+ $CL EX01_A.INI
+ to produce the file PALINDROME.PAS. Note that EX01_A.INI specifies the
+ source files as well the target modules to be in the current
+ directory.
+
+
+ d. Compare the file PALINDROME.PAS with EX01_A.PAS by means of the
+ command
+ $DIFF PALINDROME.PAS EX01_A.PAS
+ There should be no differences.
+ e. Now type the command
+ $CL EX01_B.INI
+ to produce a new file PALINDROME.PAS.
+ f. Compare the new PALINDROME.PAS with EX01_B.PAS
+ $DIFF PALINDROME.PAS EX01_B.PAS
+ Again there should be no differences.
+
+4 What you should know
+
+The complete system executes in two passes.
+ The second pass, CLIP_2.EXE, performs the actual module extraction. It is
+guided by a file, CLIP.INI, which tells it literally everything it has to know
+in order to perform a run. Thus CLIP.INI specifies to CLIP_2.EXE:
+ - the files it has to read (i.e. the source files),
+ - the modules it should extract (i.e. target modules),
+ - the report file,
+ - the syntax of the CLiP-lines (i.e. the lines which trigger the module
+ extraction process).
+CLIP.INI is a straight forward ASCII-file. Its fairly simple structure is
+explained in section 6 of the manual.
+ The responsibility of the first pass of the CLiP-system, CLIP_1.EXE, is
+purely to construct an appropriate INI-file for the task you want CLIP_2 to
+perform. More often than not the first pass can be short-cut and several batch
+files are supplied for this reason (see section 5).
+
+5 Using CLiP ...
+
+The batch procedures below are designed to make your working directories
+independent of the CLIP_DIR. Remark that the original batch files assume that
+your CLIP_DIR is the directory [USERNAME.CLIP].
+
+5.1 ... via CLIP.COM
+
+CLIP.COM performs the complete cycle to define and execute a run of CLiP. Thus
+both passes of CLiP are executed by this command. Probably you will not
+experience the first pass of CLiP as particularly user-friendly. But once you
+are familiar with its oddities it works fairly acceptable. Below you find some
+hints to make it work for you.
+
+Main menu
+ The main menu presents 8 options. Option 1 and 8 need no further
+ explanation. The remaining options are described below.
+
+Option 2: Choose an initialization file
+ An INI-file is either build from scratch, or it is a modification of an
+ already existing INI-file. Most likely you modify the INI-file of the
+ last CLiP run you have made (4) or you start all over (2).
+
+Option 3: Set run characteristics
+ This option refers mainly to future ideas to implement in CLiP and it
+ doesn't work properly. You can safely skip this option in which case
+ messages will be send to the display as well as to the file CLIP.RPT.
+
+
+Option 4: Set list of source files
+ You can specify the source files CLiP has to scan by adding (1) file
+ names to the list, deleting (2) file names from the list or changing
+ (3) the order of the list. Don't forget to specify directories if the
+ files are not in the current directory.
+
+Option 5: Specify extraction of modules
+ By default the system assumes you want to extract all modules. If not
+ you take menu item 1 to get into a submenu with three choices. Choice 3
+ lets you specify a list of modules which by choice 2 can be made to be
+ either extracted or suppressed (omitted). Don't include directories
+ with the specification of these modules.
+
+Option 6: Save resulting initialization file
+ To save the run specification into a file, use option 6. It give you 2
+ menu items. The first specifies a name for the file (default CLIP.INI)
+ and the second actually save the run specification into that file.
+
+Option 7: Change syntax
+ This option allows you to adjust the syntax recognized by CLiP. Make
+ sure you understand sufficiently about the operation of CLiP before
+ fooling around here [Ammers 1993]. If not there is a fair change you
+ end up with a syntax definition that is not consistent with your source
+ files (there is danger though of destruction of files or the like).
+
+Note that if you don't save explicitly through option 6, you simply quit the
+session and you loose the information you have specified.
+
+5.2 ... via CLP.COM and CLP_ENV.COM
+
+This procedure can be used in a situation where on wants to extract all the
+modules from up to eight source files. The source files are passed as
+parameters. CLP.COM creates a CLIP.INI file and starts the CLIP_2 program
+afterwards.
+ All setting are assumed by the batch procedure. Originally it is tailored
+to Pascal programs of the sort displayed in the example EX01 (i.e. the files
+EX01_?.*) on the directory CLIP. To adjust CLP.COM one should sufficiently
+understand the syntax of CLiP [Ammers 1993]. Only modify the lines of CLP.COM
+as follows
+
+ line 15: Replace "(*" with the COMM-START of your choice.
+ line 16: Replace "*)" with the COMM-END of your choice.
+ line 17: Replace "*" with the CLIP-CHAR of your choice.
+ line 18: Replace "ENDOF" with the END-STRING of your choice.
+ line 19: Replace "#" with the OPTION-MARKER of your choice.
+ line 22: Replace "CLIP.RPT" with the report file name of your choice.
+
+Note that the characters "a"-"z", "A"-"Z", "0"-"9" and "." do not qualify as
+characters for COMM-START, COMM-END, CLIP-CHAR or OPTION-MARKER while the
+END-STRING should be chosen from letters only.
+ If you are not sure of your modifications, you should compare the INI-file
+produced by CLP.COM with the one that CLIP.COM produces from the same set of
+preferences.
+ CLP.COM allows you to identify different directories for the source files
+and the target modules. This information is taken from the logicals
+CLIP$SRC_DIR and CLIP$TRG_DIR which should be set using CLP_ENV.COM. For
+example
+ $CLP_ENV [USERNAME.ASC] [USERNAME]
+defines the subdirectory ASC of USERNAME as source file directory while the
+home directory of USERNAME will receive the extracted modules.
+
+
+5.3 ... via CL.COM
+
+CL.COM is the fastest way to run CLiP and will probably be invoked most often.
+It can be used whenever an INI-file already is available. It copies the
+information of the specified INI-file to CLIP.INI and runs the CLIP_2 program.
+ The INI-file to be used is passed as an optional parameter. If no INI-file
+is specified, CL.COM simply assumes CLIP.INI. For example
+ $CL EX01_A.INI
+will copy the file EX01_A.INI to CLIP.INI and run CLIP_2. However the command
+ $CL
+immediately runs CLIP_2 on the basis of an already existing CLIP.INI file.
+
+5.4 ... via CLIP_1.COM
+
+You will use this procedure if you want to create several INI-files at once. In
+this case you don't want to run CLiP after you have finished your session. The
+second pass of CLiP is not invoked.
+
+6 Specimen INI-files
+
+The files ADA.INI, C.INI, FORTRAN.INI, LISP.INI, MODULA.INI and PASCAL.INI
+suggest a suitable CLiP syntax for a start. To customize such an INI-file run
+the CLiP system through CLIP.BAT. Then load the proper INI-file and modify the
+syntax by means of option 7 (see sect. 5.1).
+
+7 References
+
+Ammers E.W. van, M.R. Kramer (1993), The CLiP Style of Literate Programming
+ (submitted for publication). Anonymously ftp-able as CLIP_STYLE.PS,
+ CLIP_STYLE_A.PS and CLIP_STYLE_B.PS from directory CLIP on
+ sun01.info.wau.nl.
diff --git a/web/clip/vax_vms/use_clip.com b/web/clip/vax_vms/use_clip.com
new file mode 100644
index 0000000000..5b6fb2b3c2
--- /dev/null
+++ b/web/clip/vax_vms/use_clip.com
@@ -0,0 +1,7 @@
+$ DEFINE CLiP_DIR [USERNAME.CLIP]
+$ CLIP_1 :== @CLIP_DIR:CLIP_1
+$ CLIP :== @CLiP_DIR:CLIP
+$ CLP :== @CLiP_DIR:CLP
+$ CLP_ENV :== @CLiP_DIR:CLP_ENV
+$ CL :== @CLiP_DIR:CL
+$ EXIT