diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /web/clip |
Initial commit
Diffstat (limited to 'web/clip')
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 Binary files differnew file mode 100644 index 0000000000..29affb71ae --- /dev/null +++ b/web/clip/ms_dos/cliphelp.hlp 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 Binary files differnew file mode 100644 index 0000000000..cc2795f6bd --- /dev/null +++ b/web/clip/unix/clip 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 Binary files differnew file mode 100644 index 0000000000..50bfe835aa --- /dev/null +++ b/web/clip/unix/manual.pdf 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 |