%!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 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